[mojarra] 01/02: Upstream import 2.2.8

Miguel Landaeta nomadium at moszumanska.debian.org
Sat Sep 27 21:31:43 UTC 2014


This is an automated email from the git hooks/post-receive script.

nomadium pushed a commit to branch 2.2.8
in repository mojarra.

commit c82a5b04cc54702e4f3155c5a52a0f51cea8422f
Author: Miguel Landaeta <nomadium at debian.org>
Date:   Sat Aug 23 15:17:42 2014 -0300

    Upstream import 2.2.8
---
 .classpath                                         |    46 -
 .project                                           |    17 -
 LICENSE                                            |   266 -
 META-INF/MANIFEST.MF                               |     6 +
 Mojarra-2.0.ipr                                    |  1340 -
 build-source.xml                                   |    85 -
 build.properties.glassfish                         |   163 -
 build.xml                                          |   381 -
 com/sun/faces/RIConstants.java                     |   164 +
 com/sun/faces/action/ActionLifecycle.java          |    93 +
 com/sun/faces/action/ActionLifecycleFactory.java   |   104 +
 com/sun/faces/action/ActionPhase.java              |   206 +
 com/sun/faces/action/RequestMapping.java           |    55 +
 com/sun/faces/action/RequestMappingInfo.java       |    89 +
 com/sun/faces/application/ActionListenerImpl.java  |   148 +
 .../faces/application/ApplicationAssociate.java    |   935 +
 .../faces/application/ApplicationFactoryImpl.java  |   137 +
 com/sun/faces/application/ApplicationImpl.java     |  2559 ++
 .../ApplicationInstanceFactoryMetadataMap.java     |    84 +
 .../application/ApplicationResourceBundle.java     |   197 +
 .../faces/application/ApplicationStateInfo.java    |   101 +
 .../application/ByteArrayWebOutputStream.java      |   283 +
 .../application/ConverterPropertyEditorBase.java   |   134 +
 .../ConverterPropertyEditorFactory.java            |   659 +
 .../ConverterPropertyEditorFor_XXXX.java           |    60 +
 .../application/InjectionApplicationFactory.java   |   172 +
 .../faces/application/JavaFlowLoaderHelper.java    |   119 +
 .../MethodBindingMethodExpressionAdapter.java      |   313 +
 .../MethodExpressionMethodBindingAdapter.java      |   327 +
 com/sun/faces/application/NamedEventManager.java   |   116 +
 .../faces/application/NavigationHandlerImpl.java   |  1554 +
 .../faces/application/ProjectStageJndiFactory.java |    96 +
 .../faces/application/PropertyEditorHelper.java    |   169 +
 com/sun/faces/application/SharedUtils.java         |   122 +
 com/sun/faces/application/StateManagerImpl.java    |   146 +
 .../application/ValidateComponentNesting.java      |   114 +
 .../ValueBindingValueExpressionAdapter.java        |   291 +
 .../ValueExpressionValueBindingAdapter.java        |   320 +
 com/sun/faces/application/ViewHandlerImpl.java     |  1028 +
 .../application/ViewHandlerResponseWrapper.java    |   205 +
 com/sun/faces/application/WebPrintWriter.java      |   134 +
 .../faces/application/WebappLifecycleListener.java |   409 +
 .../application/annotation/AnnotationManager.java  |   483 +
 .../annotation/BehaviorConfigHandler.java          |   113 +
 .../annotation/ComponentConfigHandler.java         |   124 +
 .../annotation/ConfigAnnotationHandler.java        |    85 +
 .../annotation/ConverterConfigHandler.java         |   140 +
 .../annotation/DelegatedEJBScanner.java            |    88 +
 .../DelegatedPersistenceContextScanner.java        |    89 +
 .../DelegatedPersistenceUnitScanner.java           |    89 +
 .../annotation/DelegatedResourceScanner.java       |    89 +
 .../annotation/DelegatedWebServiceRefScanner.java  |    89 +
 .../faces/application/annotation/EJBHandler.java   |   103 +
 .../faces/application/annotation/EJBScanner.java   |   104 +
 .../annotation/FacesComponentUsage.java            |    65 +
 .../faces/application/annotation/JndiHandler.java  |   167 +
 .../application/annotation/ListenerForHandler.java |   113 +
 .../application/annotation/ListenerForScanner.java |    85 +
 .../annotation/ManagedBeanConfigHandler.java       |   309 +
 .../annotation/NamedEventConfigHandler.java        |   129 +
 .../annotation/PersistenceContextHandler.java      |    98 +
 .../annotation/PersistenceContextScanner.java      |   104 +
 .../annotation/PersistenceUnitHandler.java         |    99 +
 .../annotation/PersistenceUnitScanner.java         |   104 +
 .../annotation/RenderKitConfigHandler.java         |   156 +
 .../annotation/ResourceDependencyHandler.java      |   243 +
 .../annotation/ResourceDependencyScanner.java      |    85 +
 .../application/annotation/ResourceHandler.java    |   109 +
 .../application/annotation/ResourceScanner.java    |   106 +
 .../annotation/RuntimeAnnotationHandler.java       |    69 +
 com/sun/faces/application/annotation/Scanner.java  |    72 +
 .../annotation/ValidatorConfigHandler.java         |   139 +
 .../annotation/WebServiceRefHandler.java           |   109 +
 .../annotation/WebServiceRefScanner.java           |   109 +
 .../resource/ClasspathResourceHelper.java          |   409 +
 .../application/resource/ClientResourceInfo.java   |   322 +
 .../faces/application/resource/ContractInfo.java   |    82 +
 .../application/resource/FaceletLibraryInfo.java   |    60 +
 .../application/resource/FaceletResourceInfo.java  |    60 +
 .../resource/FaceletWebappResourceHelper.java      |   253 +
 .../faces/application/resource/LibraryInfo.java    |   234 +
 com/sun/faces/application/resource/Resource.java   |   192 +
 .../faces/application/resource/ResourceCache.java  |   245 +
 .../application/resource/ResourceHandlerImpl.java  |   659 +
 .../faces/application/resource/ResourceHelper.java |   869 +
 .../faces/application/resource/ResourceImpl.java   |   472 +
 .../faces/application/resource/ResourceInfo.java   |   204 +
 .../application/resource/ResourceManager.java      |   715 +
 .../faces/application/resource/VersionInfo.java    |   136 +
 .../application/resource/WebappResourceHelper.java |   371 +
 .../resource/ZipDirectoryEntryScanner.java         |   127 +
 .../view/FaceletFullStateManagementStrategy.java   |   897 +
 .../FaceletPartialStateManagementStrategy.java     |   535 +
 .../view/FaceletViewHandlingStrategy.java          |  2177 ++
 .../faces/application/view/FormOmittedChecker.java |   160 +
 .../view/JspStateManagementStrategy.java           |   459 +
 .../application/view/JspViewHandlingStrategy.java  |   455 +
 .../faces/application/view/MultiViewHandler.java   |   836 +
 .../faces/application/view/StateHolderSaver.java   |   180 +
 .../view/ViewDeclarationLanguageFactoryImpl.java   |    89 +
 .../application/view/ViewHandlingStrategy.java     |   212 +
 .../view/ViewHandlingStrategyManager.java          |   129 +
 .../ViewHandlingStrategyNotFoundException.java     |    66 +
 .../faces/application/view/ViewMetadataImpl.java   |   165 +
 .../faces/application/view/ViewScopeContext.java   |   174 +
 .../application/view/ViewScopeContextManager.java  |   386 +
 .../application/view/ViewScopeContextObject.java   |    94 +
 .../application/view/ViewScopeEventListener.java   |    81 +
 .../faces/application/view/ViewScopeExtension.java |   145 +
 .../faces/application/view/ViewScopeManager.java   |   406 +
 .../view/ViewScopedCDIEventFireHelper.java         |    49 +
 .../view/ViewScopedCDIEventFireHelperImpl.java     |    68 +
 .../application/view/WriteBehindStateWriter.java   |   349 +
 .../component/ComponentResourceContainer.java      |    58 +
 .../component/CompositeComponentStackManager.java  |   483 +
 com/sun/faces/component/PassthroughElement.java    |   358 +
 .../faces/component/behavior/AjaxBehaviors.java    |   224 +
 .../component/validator/ComponentValidators.java   |   353 +
 .../faces/component/visit/FullVisitContext.java    |   159 +
 .../faces/component/visit/PartialVisitContext.java |   458 +
 .../component/visit/VisitContextFactoryImpl.java   |    82 +
 com/sun/faces/config/AnnotationScanner.java        |   374 +
 com/sun/faces/config/ConfigManager.java            |  1332 +
 com/sun/faces/config/ConfigurationException.java   |    71 +
 com/sun/faces/config/ConfigureListener.java        |  1138 +
 com/sun/faces/config/DbfFactory.java               |   738 +
 .../DelegateToGlassFishAnnotationScanner.java      |   258 +
 .../faces/config/DelegatingAnnotationProvider.java |   103 +
 com/sun/faces/config/DocumentInfo.java             |    84 +
 com/sun/faces/config/DocumentOrderingWrapper.java  |   778 +
 com/sun/faces/config/FaceletsConfiguration.java    |   195 +
 com/sun/faces/config/FacesConfigInfo.java          |   264 +
 com/sun/faces/config/FacesInitializer.java         |   166 +
 com/sun/faces/config/InitFacesContext.java         |   703 +
 .../config/JavaClassScanningAnnotationScanner.java |   727 +
 com/sun/faces/config/Verifier.java                 |   216 +
 com/sun/faces/config/WebConfiguration.java         |  1659 +
 .../BaseWebConfigResourceProvider.java             |   142 +
 .../MetaInfFaceletTaglibraryConfigProvider.java    |   172 +
 .../MetaInfFacesConfigResourceProvider.java        |   188 +
 .../MojarraFacesConfigResourceProvider.java        |    93 +
 .../WebAppFlowConfigResourceProvider.java          |   139 +
 .../WebFaceletTaglibResourceProvider.java          |    76 +
 .../WebFacesConfigResourceProvider.java            |   112 +
 .../config/processor/AbstractConfigProcessor.java  |   495 +
 .../processor/ApplicationConfigProcessor.java      |   901 +
 .../config/processor/BehaviorConfigProcessor.java  |   164 +
 .../config/processor/ComponentConfigProcessor.java |   164 +
 .../faces/config/processor/ConfigProcessor.java    |   101 +
 .../config/processor/ConverterConfigProcessor.java |   193 +
 .../processor/FaceletTaglibConfigProcessor.java    |   694 +
 .../processor/FacesConfigExtensionProcessor.java   |   187 +
 .../processor/FacesConfigNamespaceContext.java     |    64 +
 .../FacesFlowDefinitionConfigProcessor.java        |   853 +
 .../config/processor/FactoryConfigProcessor.java   |   380 +
 .../config/processor/LifecycleConfigProcessor.java |   157 +
 .../processor/ManagedBeanConfigProcessor.java      |   532 +
 .../processor/NavigationConfigProcessor.java       |   389 +
 .../processor/ProtectedViewsConfigProcessor.java   |   168 +
 .../config/processor/RenderKitConfigProcessor.java |   376 +
 .../ResourceLibraryContractsConfigProcessor.java   |   205 +
 com/sun/faces/config/processor/SharedUtils.java    |   122 +
 .../config/processor/ValidatorConfigProcessor.java |   197 +
 .../faces/context/AjaxExceptionHandlerImpl.java    |   267 +
 .../faces/context/AjaxNoAjaxExceptionHandler.java  |    69 +
 com/sun/faces/context/AlwaysPuttingSessionMap.java |    65 +
 com/sun/faces/context/ApplicationMap.java          |   163 +
 com/sun/faces/context/BaseContextMap.java          |   360 +
 .../faces/context/ExceptionHandlerFactoryImpl.java |    92 +
 com/sun/faces/context/ExceptionHandlerImpl.java    |   341 +
 .../faces/context/ExternalContextFactoryImpl.java  |    89 +
 com/sun/faces/context/ExternalContextImpl.java     |  1176 +
 com/sun/faces/context/FacesContextFactoryImpl.java |   126 +
 com/sun/faces/context/FacesContextImpl.java        |   789 +
 .../faces/context/FacesFileNotFoundException.java  |    71 +
 com/sun/faces/context/InitParameterMap.java        |   140 +
 .../context/InjectionFacesContextFactory.java      |   191 +
 .../context/PartialViewContextFactoryImpl.java     |    69 +
 com/sun/faces/context/PartialViewContextImpl.java  |   650 +
 com/sun/faces/context/RequestCookieMap.java        |   184 +
 com/sun/faces/context/RequestHeaderMap.java        |   140 +
 com/sun/faces/context/RequestHeaderValuesMap.java  |   144 +
 com/sun/faces/context/RequestMap.java              |   158 +
 com/sun/faces/context/RequestParameterMap.java     |   189 +
 .../faces/context/RequestParameterValuesMap.java   |   135 +
 com/sun/faces/context/SessionMap.java              |   240 +
 com/sun/faces/context/StateContext.java            |   780 +
 com/sun/faces/context/StateHolderSaver.java        |   180 +
 com/sun/faces/context/StringArrayValuesMap.java    |   134 +
 com/sun/faces/context/UrlBuilder.java              |   379 +
 com/sun/faces/context/flash/ELFlash.java           |  1663 +
 com/sun/faces/context/flash/FlashELResolver.java   |   398 +
 com/sun/faces/context/flash/FlashFactoryImpl.java  |    63 +
 com/sun/faces/context/flash/SessionHelper.java     |    98 +
 com/sun/faces/el/ChainAwareVariableResolver.java   |   112 +
 com/sun/faces/el/ChainTypeCompositeELResolver.java |   227 +
 .../el/CompositeComponentAttributesELResolver.java |   479 +
 com/sun/faces/el/DemuxCompositeELResolver.java     |   414 +
 com/sun/faces/el/DummyPropertyResolverImpl.java    |   115 +
 com/sun/faces/el/ELConstants.java                  |    88 +
 com/sun/faces/el/ELContextImpl.java                |   140 +
 com/sun/faces/el/ELContextListenerImpl.java        |    82 +
 com/sun/faces/el/ELUtils.java                      |   840 +
 com/sun/faces/el/FacesCompositeELResolver.java     |    71 +
 .../faces/el/FacesResourceBundleELResolver.java    |   215 +
 com/sun/faces/el/ImplicitObjectELResolver.java     |   317 +
 .../faces/el/ImplicitObjectELResolverForJsp.java   |   208 +
 com/sun/faces/el/ManagedBeanELResolver.java        |   267 +
 com/sun/faces/el/PropertyResolverChainWrapper.java |   218 +
 com/sun/faces/el/PropertyResolverImpl.java         |   315 +
 com/sun/faces/el/ResourceELResolver.java           |   225 +
 com/sun/faces/el/ScopedAttributeELResolver.java    |   259 +
 com/sun/faces/el/SharedUtils.java                  |   122 +
 com/sun/faces/el/VariableResolverChainWrapper.java |   199 +
 com/sun/faces/el/VariableResolverImpl.java         |   105 +
 com/sun/faces/ext/component/UIFocus.java           |    58 +
 com/sun/faces/ext/render/FocusHTMLRenderer.java    |    77 +
 .../faces/ext/taglib/CreditCardValidatorTag.java   |    64 +
 com/sun/faces/ext/taglib/FocusTag.java             |   100 +
 .../faces/ext/validator/CreditCardValidator.java   |   122 +
 .../faces/ext/validator/MojarraMessageFactory.java |   367 +
 .../faces/ext/validator/mojarraMessages.properties |    56 +
 .../ext/validator/mojarraMessages_en.properties    |    50 +
 com/sun/faces/facelets/FaceletCache.java           |   116 +
 com/sun/faces/facelets/FaceletContextImplBase.java |    88 +
 .../facelets/PrivateApiFaceletCacheAdapter.java    |   113 +
 com/sun/faces/facelets/StateWriter.java            |   178 +
 com/sun/faces/facelets/TemplateClient.java         |    99 +
 .../faces/facelets/compiler/AbstractUIHandler.java |    76 +
 .../facelets/compiler/AttributeInstruction.java    |   112 +
 .../facelets/compiler/CommentInstruction.java      |    88 +
 .../facelets/compiler/CompilationManager.java      |   551 +
 .../compiler/CompilationMessageHolder.java         |    72 +
 .../compiler/CompilationMessageHolderImpl.java     |    99 +
 .../faces/facelets/compiler/CompilationUnit.java   |   125 +
 com/sun/faces/facelets/compiler/Compiler.java      |   239 +
 .../CompilerPackageCompilationMessageHolder.java   |    48 +
 .../faces/facelets/compiler/EncodingHandler.java   |   101 +
 .../facelets/compiler/EndElementInstruction.java   |   122 +
 .../facelets/compiler/ImplementationUnit.java      |    87 +
 com/sun/faces/facelets/compiler/Instruction.java   |    70 +
 com/sun/faces/facelets/compiler/InterfaceUnit.java |    71 +
 .../compiler/LiteralAttributeInstruction.java      |    88 +
 .../compiler/LiteralCommentInstruction.java        |    84 +
 .../facelets/compiler/LiteralTextInstruction.java  |    89 +
 .../facelets/compiler/LiteralXMLInstruction.java   |    93 +
 .../faces/facelets/compiler/NamespaceHandler.java  |   120 +
 .../faces/facelets/compiler/NamespaceManager.java  |   135 +
 com/sun/faces/facelets/compiler/NamespaceUnit.java |    95 +
 com/sun/faces/facelets/compiler/RemoveUnit.java    |    81 +
 com/sun/faces/facelets/compiler/SAXCompiler.java   |   533 +
 .../facelets/compiler/StartElementInstruction.java |    85 +
 com/sun/faces/facelets/compiler/TagUnit.java       |   140 +
 .../faces/facelets/compiler/TextInstruction.java   |   107 +
 com/sun/faces/facelets/compiler/TextUnit.java      |   342 +
 .../faces/facelets/compiler/TrimmedTagUnit.java    |    71 +
 .../facelets/compiler/UIInstructionHandler.java    |   203 +
 .../faces/facelets/compiler/UIInstructions.java    |    92 +
 com/sun/faces/facelets/compiler/UILeaf.java        |   232 +
 com/sun/faces/facelets/compiler/UILiteralText.java |    83 +
 .../facelets/compiler/UILiteralTextHandler.java    |   100 +
 com/sun/faces/facelets/compiler/UIText.java        |   112 +
 com/sun/faces/facelets/compiler/UITextHandler.java |   130 +
 .../faces/facelets/compiler/XMLInstruction.java    |    92 +
 .../faces/facelets/component/RepeatRenderer.java   |   121 +
 com/sun/faces/facelets/component/UIRepeat.java     |  1122 +
 .../faces/facelets/el/CompositeFunctionMapper.java |    96 +
 .../faces/facelets/el/CompositeVariableMapper.java |   103 +
 .../el/ContextualCompositeMethodExpression.java    |   339 +
 .../el/ContextualCompositeValueExpression.java     |   283 +
 .../faces/facelets/el/DefaultFunctionMapper.java   |   267 +
 .../faces/facelets/el/DefaultVariableMapper.java   |   104 +
 com/sun/faces/facelets/el/ELText.java              |   485 +
 com/sun/faces/facelets/el/LegacyELContext.java     |   274 +
 com/sun/faces/facelets/el/LegacyMethodBinding.java |   123 +
 com/sun/faces/facelets/el/LegacyValueBinding.java  |   156 +
 com/sun/faces/facelets/el/TagMethodExpression.java |   165 +
 com/sun/faces/facelets/el/TagValueExpression.java  |   197 +
 .../faces/facelets/el/VariableMapperWrapper.java   |   125 +
 com/sun/faces/facelets/impl/DefaultFacelet.java    |   442 +
 .../faces/facelets/impl/DefaultFaceletCache.java   |   253 +
 .../faces/facelets/impl/DefaultFaceletContext.java |   423 +
 .../faces/facelets/impl/DefaultFaceletFactory.java |   541 +
 .../facelets/impl/DefaultResourceResolver.java     |    90 +
 .../facelets/impl/FaceletCacheFactoryImpl.java     |    66 +
 com/sun/faces/facelets/impl/IdMapper.java          |   131 +
 .../faces/facelets/impl/XMLFrontMatterSaver.java   |    53 +
 com/sun/faces/facelets/tag/AbstractTagLibrary.java |   776 +
 .../faces/facelets/tag/BeanPropertyTagRule.java    |   146 +
 .../faces/facelets/tag/CompositeTagDecorator.java  |   108 +
 .../faces/facelets/tag/CompositeTagLibrary.java    |   229 +
 .../faces/facelets/tag/DefaultTagDecorator.java    |   315 +
 com/sun/faces/facelets/tag/IterationStatus.java    |   186 +
 com/sun/faces/facelets/tag/MetaRulesetImpl.java    |   239 +
 com/sun/faces/facelets/tag/MetaTagHandlerImpl.java |    90 +
 com/sun/faces/facelets/tag/MetadataImpl.java       |    85 +
 com/sun/faces/facelets/tag/MetadataTargetImpl.java |   127 +
 com/sun/faces/facelets/tag/MethodRule.java         |   172 +
 com/sun/faces/facelets/tag/TagAttributeImpl.java   |   516 +
 com/sun/faces/facelets/tag/TagAttributesImpl.java  |   223 +
 com/sun/faces/facelets/tag/TagHandlerFactory.java  |    85 +
 com/sun/faces/facelets/tag/TagHandlerImpl.java     |   101 +
 com/sun/faces/facelets/tag/TagLibrary.java         |   127 +
 com/sun/faces/facelets/tag/TagLibraryImpl.java     |   135 +
 com/sun/faces/facelets/tag/UserTagHandler.java     |   172 +
 .../ActionSource2AttachedObjectTargetHandler.java  |    75 +
 .../ActionSource2AttachedObjectTargetImpl.java     |    66 +
 .../tag/composite/AttachedObjectTargetHandler.java |   129 +
 .../tag/composite/AttachedObjectTargetImpl.java    |   137 +
 .../facelets/tag/composite/AttributeHandler.java   |   239 +
 .../BehaviorHolderAttachedObjectTargetHandler.java |    88 +
 .../BehaviorHolderAttachedObjectTargetImpl.java    |   110 +
 .../tag/composite/BehaviorHolderWrapper.java       |   456 +
 .../tag/composite/CompositeComponentBeanInfo.java  |   120 +
 .../facelets/tag/composite/CompositeLibrary.java   |   102 +
 .../tag/composite/DeclareFacetHandler.java         |   149 +
 ...ableValueHolderAttachedObjectTargetHandler.java |    76 +
 ...ditableValueHolderAttachedObjectTargetImpl.java |    66 +
 .../facelets/tag/composite/ExtensionHandler.java   |    81 +
 .../tag/composite/ImplementationHandler.java       |    85 +
 .../tag/composite/InsertChildrenHandler.java       |   224 +
 .../facelets/tag/composite/InsertFacetHandler.java |   233 +
 .../facelets/tag/composite/InterfaceHandler.java   |   287 +
 .../facelets/tag/composite/PropertyHandler.java    |    73 +
 .../tag/composite/PropertyHandlerManager.java      |   370 +
 .../facelets/tag/composite/RelocateListener.java   |   117 +
 .../facelets/tag/composite/RenderFacetHandler.java |   136 +
 .../tag/composite/TypedPropertyHandler.java        |    66 +
 .../ValueHolderAttachedObjectTargetHandler.java    |    75 +
 .../ValueHolderAttachedObjectTargetImpl.java       |    65 +
 .../faces/facelets/tag/jsf/ActionSourceRule.java   |   187 +
 .../faces/facelets/tag/jsf/AttachedBehaviors.java  |    81 +
 .../tag/jsf/BehaviorTagHandlerDelegateImpl.java    |   200 +
 com/sun/faces/facelets/tag/jsf/ComponentRule.java  |   172 +
 .../faces/facelets/tag/jsf/ComponentSupport.java   |   577 +
 .../tag/jsf/ComponentTagHandlerDelegateImpl.java   |   647 +
 .../facelets/tag/jsf/CompositeComponentImpl.java   |    74 +
 .../tag/jsf/CompositeComponentTagHandler.java      |   656 +
 .../tag/jsf/CompositeComponentTagLibrary.java      |   256 +
 .../tag/jsf/ConverterTagHandlerDelegateImpl.java   |   163 +
 .../facelets/tag/jsf/EditableValueHolderRule.java  |   176 +
 .../facelets/tag/jsf/FacesComponentTagLibrary.java |   161 +
 .../faces/facelets/tag/jsf/IterationIdManager.java |    71 +
 com/sun/faces/facelets/tag/jsf/LazyTagLibrary.java |    53 +
 .../tag/jsf/PassThroughAttributeLibrary.java       |    55 +
 .../jsf/PassThroughElementComponentHandler.java    |   107 +
 .../tag/jsf/PassThroughElementLibrary.java         |    58 +
 .../faces/facelets/tag/jsf/RenderPropertyRule.java |   119 +
 .../tag/jsf/TagHandlerDelegateFactoryImpl.java     |    82 +
 .../tag/jsf/ValidatorTagHandlerDelegateImpl.java   |   262 +
 .../faces/facelets/tag/jsf/ValueHolderRule.java    |   175 +
 .../tag/jsf/core/ActionListenerHandler.java        |   182 +
 .../tag/jsf/core/ActionListenerHandlerBase.java    |   145 +
 .../faces/facelets/tag/jsf/core/AjaxHandler.java   |   468 +
 .../facelets/tag/jsf/core/AttributeHandler.java    |   131 +
 .../facelets/tag/jsf/core/AttributesHandler.java   |   122 +
 .../tag/jsf/core/ConvertDateTimeHandler.java       |   163 +
 .../tag/jsf/core/ConvertDelegateHandler.java       |   100 +
 .../tag/jsf/core/ConvertNumberHandler.java         |   117 +
 .../faces/facelets/tag/jsf/core/CoreLibrary.java   |   160 +
 .../faces/facelets/tag/jsf/core/EventHandler.java  |   171 +
 .../faces/facelets/tag/jsf/core/FacetHandler.java  |   115 +
 .../facelets/tag/jsf/core/LoadBundleHandler.java   |   238 +
 .../facelets/tag/jsf/core/MetadataHandler.java     |   121 +
 .../tag/jsf/core/PassThroughAttributeHandler.java  |   129 +
 .../tag/jsf/core/PassThroughAttributesHandler.java |   103 +
 .../tag/jsf/core/PhaseListenerHandler.java         |   230 +
 .../facelets/tag/jsf/core/ResetValuesHandler.java  |   154 +
 .../jsf/core/SetPropertyActionListenerHandler.java |   216 +
 .../tag/jsf/core/ValidateDelegateHandler.java      |    95 +
 .../tag/jsf/core/ValueChangeListenerHandler.java   |   222 +
 .../facelets/tag/jsf/core/VerbatimHandler.java     |    98 +
 .../faces/facelets/tag/jsf/core/ViewHandler.java   |   228 +
 .../facelets/tag/jsf/html/AbstractHtmlLibrary.java |    81 +
 .../tag/jsf/html/ComponentResourceDelegate.java    |   174 +
 .../tag/jsf/html/HtmlComponentHandler.java         |    82 +
 .../faces/facelets/tag/jsf/html/HtmlDecorator.java |   149 +
 .../faces/facelets/tag/jsf/html/HtmlLibrary.java   |   188 +
 .../tag/jsf/html/ScriptResourceDelegate.java       |    77 +
 .../tag/jsf/html/ScriptResourceHandler.java        |    61 +
 .../tag/jsf/html/StylesheetResourceDelegate.java   |    75 +
 .../tag/jsf/html/StylesheetResourceHandler.java    |    61 +
 com/sun/faces/facelets/tag/jsf/html/package.html   |    51 +
 .../faces/facelets/tag/jstl/core/CatchHandler.java |    95 +
 .../facelets/tag/jstl/core/ChooseHandler.java      |   114 +
 .../tag/jstl/core/ChooseOtherwiseHandler.java      |    82 +
 .../facelets/tag/jstl/core/ChooseWhenHandler.java  |    89 +
 .../facelets/tag/jstl/core/ForEachHandler.java     |   326 +
 .../faces/facelets/tag/jstl/core/IfHandler.java    |   100 +
 .../tag/jstl/core/IndexedValueExpression.java      |   187 +
 .../tag/jstl/core/IteratedValueExpression.java     |   190 +
 .../tag/jstl/core/IterationStatusExpression.java   |   178 +
 .../facelets/tag/jstl/core/JstlCoreLibrary.java    |   109 +
 .../tag/jstl/core/JstlIterationStatus.java         |    85 +
 .../tag/jstl/core/MappedValueExpression.java       |   215 +
 .../faces/facelets/tag/jstl/core/SetHandler.java   |   195 +
 .../faces/facelets/tag/jstl/fn/JstlFunction.java   |   320 +
 com/sun/faces/facelets/tag/ui/ComponentRef.java    |    76 +
 .../faces/facelets/tag/ui/ComponentRefHandler.java |    72 +
 .../faces/facelets/tag/ui/CompositionHandler.java  |   217 +
 com/sun/faces/facelets/tag/ui/DecorateHandler.java |   179 +
 com/sun/faces/facelets/tag/ui/DefineHandler.java   |   112 +
 com/sun/faces/facelets/tag/ui/IncludeHandler.java  |   134 +
 com/sun/faces/facelets/tag/ui/InsertHandler.java   |   127 +
 com/sun/faces/facelets/tag/ui/ParamHandler.java    |   102 +
 com/sun/faces/facelets/tag/ui/RepeatHandler.java   |   142 +
 .../tag/ui/SchemaCompliantRemoveHandler.java       |    62 +
 com/sun/faces/facelets/tag/ui/UIDebug.java         |   207 +
 com/sun/faces/facelets/tag/ui/UILibrary.java       |   101 +
 com/sun/faces/facelets/tag/ui/package.html         |    51 +
 com/sun/faces/facelets/util/Classpath.java         |   354 +
 com/sun/faces/facelets/util/DevTools.java          |   459 +
 com/sun/faces/facelets/util/FastWriter.java        |   130 +
 com/sun/faces/facelets/util/FunctionLibrary.java   |   120 +
 com/sun/faces/facelets/util/Path.java              |   130 +
 com/sun/faces/facelets/util/ReflectionUtil.java    |   328 +
 .../faces/facelets/util/ResourceResolverProxy.java |    84 +
 com/sun/faces/flow/FlowCDIContext.java             |   509 +
 com/sun/faces/flow/FlowCDIEventFireHelper.java     |    51 +
 com/sun/faces/flow/FlowCDIEventFireHelperImpl.java |    68 +
 com/sun/faces/flow/FlowCDIExtension.java           |   130 +
 com/sun/faces/flow/FlowCallNodeImpl.java           |   165 +
 com/sun/faces/flow/FlowDiscoveryCDIExtension.java  |   118 +
 com/sun/faces/flow/FlowDiscoveryCDIHelper.java     |    77 +
 com/sun/faces/flow/FlowDiscoveryInfo.java          |    81 +
 com/sun/faces/flow/FlowHandlerFactoryImpl.java     |    61 +
 com/sun/faces/flow/FlowHandlerImpl.java            |   558 +
 com/sun/faces/flow/FlowImpl.java                   |   405 +
 com/sun/faces/flow/MethodCallNodeImpl.java         |   159 +
 com/sun/faces/flow/ParameterImpl.java              |    83 +
 com/sun/faces/flow/ReturnNodeImpl.java             |    98 +
 com/sun/faces/flow/SwitchCaseImpl.java             |   104 +
 com/sun/faces/flow/SwitchNodeImpl.java             |   140 +
 com/sun/faces/flow/ViewNodeImpl.java               |    79 +
 com/sun/faces/flow/builder/FlowBuilderImpl.java    |   209 +
 .../faces/flow/builder/FlowCallBuilderImpl.java    |   115 +
 .../faces/flow/builder/MethodCallBuilderImpl.java  |   117 +
 .../faces/flow/builder/MutableNavigationCase.java  |   339 +
 .../flow/builder/NavigationCaseBuilderImpl.java    |   156 +
 com/sun/faces/flow/builder/ReturnBuilderImpl.java  |    83 +
 com/sun/faces/flow/builder/SwitchBuilderImpl.java  |    99 +
 .../faces/flow/builder/SwitchCaseBuilderImpl.java  |    91 +
 com/sun/faces/flow/builder/ViewBuilderImpl.java    |    68 +
 com/sun/faces/io/Base64InputStream.java            |   358 +
 com/sun/faces/io/Base64OutputStreamWriter.java     |   255 +
 com/sun/faces/io/FastStringWriter.java             |   158 +
 .../faces/lifecycle/ApplyRequestValuesPhase.java   |   104 +
 .../faces/lifecycle/ClientWindowFactoryImpl.java   |   102 +
 com/sun/faces/lifecycle/ClientWindowImpl.java      |   101 +
 .../lifecycle/ELResolverInitPhaseListener.java     |   212 +
 .../HttpMethodRestrictionsPhaseListener.java       |    79 +
 .../faces/lifecycle/InvokeApplicationPhase.java    |   108 +
 com/sun/faces/lifecycle/LifecycleFactoryImpl.java  |   154 +
 com/sun/faces/lifecycle/LifecycleImpl.java         |   283 +
 com/sun/faces/lifecycle/Phase.java                 |   267 +
 .../faces/lifecycle/ProcessValidationsPhase.java   |   102 +
 com/sun/faces/lifecycle/RenderResponsePhase.java   |   147 +
 com/sun/faces/lifecycle/RestoreViewPhase.java      |   535 +
 .../faces/lifecycle/UpdateModelValuesPhase.java    |   109 +
 com/sun/faces/mgbean/BeanBuilder.java              |   591 +
 com/sun/faces/mgbean/BeanManager.java              |   789 +
 com/sun/faces/mgbean/ErrorBean.java                |    85 +
 com/sun/faces/mgbean/ManagedBeanBuilder.java       |   630 +
 .../faces/mgbean/ManagedBeanCreationException.java |    74 +
 com/sun/faces/mgbean/ManagedBeanInfo.java          |   309 +
 .../mgbean/ManagedBeanPreProcessingException.java  |   112 +
 com/sun/faces/mgbean/ManagedListBeanBuilder.java   |    86 +
 com/sun/faces/mgbean/ManagedMapBeanBuilder.java    |    87 +
 com/sun/faces/mgbean/SharedUtils.java              |   122 +
 .../renderkit/ApplicationObjectInputStream.java    |   108 +
 com/sun/faces/renderkit/Attribute.java             |    94 +
 com/sun/faces/renderkit/AttributeManager.java      |   664 +
 com/sun/faces/renderkit/ByteArrayGuard.java        |   253 +
 com/sun/faces/renderkit/ClientSideStateHelper.java |   686 +
 com/sun/faces/renderkit/RenderKitFactoryImpl.java  |   121 +
 com/sun/faces/renderkit/RenderKitImpl.java         |   437 +
 com/sun/faces/renderkit/RenderKitUtils.java        |  1897 ++
 .../faces/renderkit/ResponseStateManagerImpl.java  |   170 +
 com/sun/faces/renderkit/SelectItemsIterator.java   |   680 +
 com/sun/faces/renderkit/ServerSideStateHelper.java |   525 +
 com/sun/faces/renderkit/StateHelper.java           |   336 +
 .../renderkit/html_basic/AjaxBehaviorRenderer.java |   343 +
 .../renderkit/html_basic/BaseTableRenderer.java    |   523 +
 .../faces/renderkit/html_basic/BodyRenderer.java   |   120 +
 .../faces/renderkit/html_basic/ButtonRenderer.java |   283 +
 .../renderkit/html_basic/CheckboxRenderer.java     |   176 +
 .../renderkit/html_basic/CommandLinkRenderer.java  |   276 +
 .../html_basic/CompositeFacetRenderer.java         |   103 +
 .../renderkit/html_basic/CompositeRenderer.java    |    89 +
 .../renderkit/html_basic/DoctypeRenderer.java      |    93 +
 .../faces/renderkit/html_basic/FileRenderer.java   |   147 +
 .../faces/renderkit/html_basic/FormRenderer.java   |   257 +
 .../faces/renderkit/html_basic/GridRenderer.java   |   266 +
 .../faces/renderkit/html_basic/GroupRenderer.java  |   167 +
 .../faces/renderkit/html_basic/HeadRenderer.java   |   118 +
 .../faces/renderkit/html_basic/HiddenRenderer.java |    98 +
 .../html_basic/HtmlBasicInputRenderer.java         |   250 +
 .../renderkit/html_basic/HtmlBasicRenderer.java    |   970 +
 .../renderkit/html_basic/HtmlResponseWriter.java   |  1400 +
 .../faces/renderkit/html_basic/ImageRenderer.java  |   128 +
 .../faces/renderkit/html_basic/LabelRenderer.java  |   203 +
 .../faces/renderkit/html_basic/LinkRenderer.java   |   134 +
 .../renderkit/html_basic/ListboxRenderer.java      |    75 +
 .../faces/renderkit/html_basic/MenuRenderer.java   |  1042 +
 .../renderkit/html_basic/MessageRenderer.java      |   290 +
 .../renderkit/html_basic/MessagesRenderer.java     |   270 +
 .../html_basic/OutcomeTargetButtonRenderer.java    |   161 +
 .../html_basic/OutcomeTargetLinkRenderer.java      |   213 +
 .../html_basic/OutcomeTargetRenderer.java          |   286 +
 .../renderkit/html_basic/OutputLinkRenderer.java   |   276 +
 .../html_basic/OutputMessageRenderer.java          |   176 +
 .../renderkit/html_basic/PassthroughRenderer.java  |   130 +
 .../faces/renderkit/html_basic/RadioRenderer.java  |   229 +
 .../faces/renderkit/html_basic/ScriptRenderer.java |   153 +
 .../html_basic/ScriptStyleBaseRenderer.java        |   229 +
 .../faces/renderkit/html_basic/SecretRenderer.java |   137 +
 .../html_basic/SelectManyCheckboxListRenderer.java |   436 +
 .../renderkit/html_basic/StylesheetRenderer.java   |   140 +
 .../faces/renderkit/html_basic/TableRenderer.java  |   452 +
 .../faces/renderkit/html_basic/TextRenderer.java   |   225 +
 .../renderkit/html_basic/TextareaRenderer.java     |   122 +
 com/sun/faces/scripting/GroovySupportFilter.java   |    81 +
 .../scripting/NonWeldAwareGroovySupportFilter.java |    87 +
 com/sun/faces/scripting/ScriptManager.java         |    50 +
 .../scripting/WeldAwareGroovySupportFilter.java    |   167 +
 .../scripting/groovy/ActionListenerProxy.java      |    99 +
 .../faces/scripting/groovy/ELResolverProxy.java    |   109 +
 com/sun/faces/scripting/groovy/GroovyHelper.java   |   127 +
 .../scripting/groovy/GroovyHelperFactory.java      |    85 +
 .../faces/scripting/groovy/GroovyHelperImpl.java   |   232 +
 .../scripting/groovy/GroovyScriptManager.java      |   176 +
 .../scripting/groovy/NavigationHandlerProxy.java   |    96 +
 .../faces/scripting/groovy/PhaseListenerProxy.java |    96 +
 com/sun/faces/scripting/groovy/RendererProxy.java  |   126 +
 .../faces/scripting/groovy/ViewHandlerProxy.java   |   177 +
 com/sun/faces/spi/AnnotationProvider.java          |   133 +
 com/sun/faces/spi/AnnotationProviderFactory.java   |   103 +
 com/sun/faces/spi/AnnotationScanner.java           |    65 +
 .../faces/spi/ConfigurationResourceProvider.java   |    66 +
 .../spi/ConfigurationResourceProviderFactory.java  |   116 +
 .../faces/spi/DiscoverableInjectionProvider.java   |    84 +
 .../faces/spi/FaceletConfigResourceProvider.java   |    77 +
 com/sun/faces/spi/FacesConfigResourceProvider.java |    79 +
 com/sun/faces/spi/HighAvailabilityEnabler.java     |    55 +
 com/sun/faces/spi/InjectionProvider.java           |    95 +
 com/sun/faces/spi/InjectionProviderException.java  |    69 +
 com/sun/faces/spi/InjectionProviderFactory.java    |   469 +
 com/sun/faces/spi/SerializationProvider.java       |    96 +
 .../faces/spi/SerializationProviderFactory.java    |   219 +
 com/sun/faces/spi/ServiceFactory.java              |   186 +
 com/sun/faces/taglib/FacesValidator.java           |   369 +
 com/sun/faces/taglib/TagParser.java                |    82 +
 com/sun/faces/taglib/ValidatorInfo.java            |   158 +
 com/sun/faces/taglib/html_basic/ColumnTag.java     |   169 +
 .../faces/taglib/html_basic/CommandButtonTag.java  |   444 +
 .../faces/taglib/html_basic/CommandLinkTag.java    |   454 +
 .../taglib/html_basic/CommandTagParserImpl.java    |   171 +
 com/sun/faces/taglib/html_basic/DataTableTag.java  |   474 +
 com/sun/faces/taglib/html_basic/FormTag.java       |   354 +
 .../faces/taglib/html_basic/GraphicImageTag.java   |   384 +
 .../taglib/html_basic/HtmlBasicValidator.java      |   156 +
 com/sun/faces/taglib/html_basic/InputFileTag.java  |   510 +
 .../faces/taglib/html_basic/InputHiddenTag.java    |   220 +
 .../faces/taglib/html_basic/InputSecretTag.java    |   520 +
 com/sun/faces/taglib/html_basic/InputTextTag.java  |   510 +
 .../faces/taglib/html_basic/InputTextareaTag.java  |   490 +
 com/sun/faces/taglib/html_basic/MessageTag.java    |   304 +
 com/sun/faces/taglib/html_basic/MessagesTag.java   |   324 +
 .../faces/taglib/html_basic/OutputFormatTag.java   |   220 +
 .../faces/taglib/html_basic/OutputLabelTag.java    |   370 +
 com/sun/faces/taglib/html_basic/OutputLinkTag.java |   440 +
 com/sun/faces/taglib/html_basic/OutputTextTag.java |   220 +
 com/sun/faces/taglib/html_basic/PanelGridTag.java  |   444 +
 com/sun/faces/taglib/html_basic/PanelGroupTag.java |   254 +
 .../html_basic/SelectBooleanCheckboxTag.java       |   470 +
 .../taglib/html_basic/SelectManyCheckboxTag.java   |   550 +
 .../taglib/html_basic/SelectManyListboxTag.java    |   520 +
 .../faces/taglib/html_basic/SelectManyMenuTag.java |   510 +
 .../taglib/html_basic/SelectOneListboxTag.java     |   510 +
 .../faces/taglib/html_basic/SelectOneMenuTag.java  |   500 +
 .../faces/taglib/html_basic/SelectOneRadioTag.java |   520 +
 .../taglib/jsf_core/AbstractConverterTag.java      |   174 +
 .../taglib/jsf_core/AbstractValidatorTag.java      |   176 +
 .../faces/taglib/jsf_core/ActionListenerTag.java   |   252 +
 com/sun/faces/taglib/jsf_core/AttributeTag.java    |   184 +
 .../faces/taglib/jsf_core/ConvertDateTimeTag.java  |   319 +
 .../faces/taglib/jsf_core/ConvertNumberTag.java    |   431 +
 com/sun/faces/taglib/jsf_core/ConverterTag.java    |   186 +
 .../faces/taglib/jsf_core/CoreTagParserImpl.java   |   232 +
 com/sun/faces/taglib/jsf_core/CoreValidator.java   |   201 +
 com/sun/faces/taglib/jsf_core/IdTagParserImpl.java |   226 +
 com/sun/faces/taglib/jsf_core/LoadBundleTag.java   |   469 +
 .../faces/taglib/jsf_core/MaxMinValidatorTag.java  |    66 +
 com/sun/faces/taglib/jsf_core/ParameterTag.java    |   129 +
 .../faces/taglib/jsf_core/PhaseListenerTag.java    |   279 +
 .../faces/taglib/jsf_core/RegexValidatorTag.java   |    95 +
 com/sun/faces/taglib/jsf_core/SelectItemTag.java   |   225 +
 com/sun/faces/taglib/jsf_core/SelectItemsTag.java  |   158 +
 .../jsf_core/SetPropertyActionListenerImpl.java    |   136 +
 .../jsf_core/SetPropertyActionListenerTag.java     |   186 +
 com/sun/faces/taglib/jsf_core/SubviewTag.java      |   229 +
 .../taglib/jsf_core/ValidateDoubleRangeTag.java    |   174 +
 .../faces/taglib/jsf_core/ValidateLengthTag.java   |   168 +
 .../taglib/jsf_core/ValidateLongRangeTag.java      |   169 +
 com/sun/faces/taglib/jsf_core/ValidatorTag.java    |   184 +
 .../taglib/jsf_core/ValueChangeListenerTag.java    |   255 +
 com/sun/faces/taglib/jsf_core/VerbatimTag.java     |   130 +
 com/sun/faces/taglib/jsf_core/ViewTag.java         |   420 +
 com/sun/faces/util/ByteArrayGuardAESCTR.java       |   224 +
 com/sun/faces/util/Cache.java                      |   130 +
 com/sun/faces/util/CollectionsUtils.java           |    86 +
 com/sun/faces/util/ComponentStruct.java            |   127 +
 com/sun/faces/util/ConcurrentCache.java            |   110 +
 com/sun/faces/util/DebugObjectOutputStream.java    |   179 +
 com/sun/faces/util/DebugUtil.java                  |   498 +
 com/sun/faces/util/ExpiringConcurrentCache.java    |   193 +
 com/sun/faces/util/FacesLogger.java                |   134 +
 com/sun/faces/util/HtmlUtils.java                  |  1243 +
 com/sun/faces/util/LRUMap.java                     |    69 +
 com/sun/faces/util/MessageFactory.java             |   389 +
 com/sun/faces/util/MessageUtils.java               |   405 +
 com/sun/faces/util/MetadataWrapperMap.java         |   115 +
 com/sun/faces/util/MojarraThreadFactory.java       |    85 +
 com/sun/faces/util/MostlySingletonSet.java         |   353 +
 com/sun/faces/util/MultiKeyConcurrentHashMap.java  |  1216 +
 com/sun/faces/util/ReflectionUtils.java            |   483 +
 com/sun/faces/util/RequestStateManager.java        |   312 +
 com/sun/faces/util/Timer.java                      |   118 +
 com/sun/faces/util/TypedCollections.java           |   159 +
 com/sun/faces/util/Util.java                       |  1137 +
 com/sun/faces/util/cdi11/CDIUtil.java              |    66 +
 com/sun/faces/util/cdi11/CDIUtilImpl.java          |   176 +
 .../vendor/WebContainerInjectionProvider.java      |   244 +
 common/ant/bin/cb.bat                              |   129 -
 common/ant/bin/cb.sh                               |   134 -
 common/ant/common.xml                              |   442 -
 common/ant/dependencies.xml                        |   741 -
 common/ant/glassfish/container.xml                 |   356 -
 common/ant/glassfishV3/config.properties.patch     |    17 -
 common/ant/glassfishV3/container.xml               |   334 -
 common/ant/glassfishV3prelude/container.xml        |   333 -
 common/ant/maven.xml                               |   258 -
 common/ant/source-build-setup.xml                  |   295 -
 common/ant/template/container.xml                  |   170 -
 common/ant/template/jsf-api-pom-template.xml       |   285 -
 common/ant/template/jsf-impl-pom-template.xml      |   242 -
 common/common.iml                                  |    13 -
 injectionprovider/build.xml                        |   100 -
 .../src/etc/com.sun.faces.spi.injectionprovider    |     2 -
 .../faces/vendor/GlassFishInjectionProvider.java   |   334 -
 .../sun/faces/vendor/Jetty6InjectionProvider.java  |   148 -
 .../sun/faces/vendor/Tomcat6InjectionProvider.java |   131 -
 javax/faces/CurrentThreadToServletContext.java     |   382 +
 javax/faces/FacesException.java                    |   131 +
 javax/faces/FacesWrapper.java                      |    60 +
 javax/faces/FactoryFinder.java                     |   373 +
 javax/faces/FactoryFinderInstance.java             |   536 +
 javax/faces/LogStrings.properties                  |    92 +
 javax/faces/LogStrings_de.properties               |    93 +
 javax/faces/LogStrings_es.properties               |    93 +
 javax/faces/LogStrings_fr.properties               |    93 +
 javax/faces/LogStrings_ja.properties               |    93 +
 javax/faces/LogStrings_ko.properties               |    93 +
 javax/faces/LogStrings_pt_BR.properties            |    93 +
 javax/faces/LogStrings_zh_CN.properties            |    93 +
 javax/faces/LogStrings_zh_HK.properties            |    93 +
 javax/faces/LogStrings_zh_TW.properties            |    93 +
 javax/faces/Messages.properties                    |   152 +
 javax/faces/Messages_de.properties                 |   152 +
 javax/faces/Messages_en.properties                 |   150 +
 javax/faces/Messages_es.properties                 |   152 +
 javax/faces/Messages_fr.properties                 |   152 +
 javax/faces/Messages_ja.properties                 |   152 +
 javax/faces/Messages_ko.properties                 |   152 +
 javax/faces/Messages_pt_BR.properties              |   152 +
 javax/faces/Messages_zh_CN.properties              |   150 +
 javax/faces/Messages_zh_HK.properties              |   150 +
 javax/faces/Messages_zh_TW.properties              |   150 +
 javax/faces/TypedCollections.java                  |   159 +
 javax/faces/application/Application.java           |  1951 ++
 .../ApplicationConfigurationPopulator.java         |    97 +
 javax/faces/application/ApplicationFactory.java    |   100 +
 javax/faces/application/ApplicationWrapper.java    |   790 +
 .../application/ConfigurableNavigationHandler.java |   162 +
 .../ConfigurableNavigationHandlerWrapper.java      |   105 +
 javax/faces/application/FacesMessage.java          |   491 +
 javax/faces/application/NavigationCase.java        |   512 +
 javax/faces/application/NavigationCaseWrapper.java |   158 +
 javax/faces/application/NavigationHandler.java     |   132 +
 .../application/NavigationHandlerWrapper.java      |    76 +
 javax/faces/application/ProjectStage.java          |   108 +
 .../faces/application/ProtectedViewException.java  |    68 +
 javax/faces/application/Resource.java              |   336 +
 javax/faces/application/ResourceDependencies.java  |    81 +
 javax/faces/application/ResourceDependency.java    |   162 +
 javax/faces/application/ResourceHandler.java       |   667 +
 .../faces/application/ResourceHandlerWrapper.java  |   208 +
 javax/faces/application/ResourceWrapper.java       |   216 +
 javax/faces/application/SharedUtils.java           |   122 +
 javax/faces/application/StateManager.java          |   596 +
 javax/faces/application/StateManagerWrapper.java   |   255 +
 javax/faces/application/ViewExpiredException.java  |   164 +
 javax/faces/application/ViewHandler.java           |   736 +
 javax/faces/application/ViewHandlerWrapper.java    |   371 +
 javax/faces/application/ViewResource.java          |    67 +
 javax/faces/application/package.html               |    57 +
 javax/faces/bean/ApplicationScoped.java            |    63 +
 javax/faces/bean/CustomScoped.java                 |    72 +
 javax/faces/bean/ManagedBean.java                  |   120 +
 javax/faces/bean/ManagedProperty.java              |    87 +
 javax/faces/bean/NoneScoped.java                   |    61 +
 javax/faces/bean/ReferencedBean.java               |    69 +
 javax/faces/bean/RequestScoped.java                |    61 +
 javax/faces/bean/SessionScoped.java                |    61 +
 javax/faces/bean/ViewScoped.java                   |   120 +
 javax/faces/bean/package.html                      |    72 +
 javax/faces/component/ActionSource.java            |   205 +
 javax/faces/component/ActionSource2.java           |    98 +
 .../faces/component/AttachedObjectListHolder.java  |   217 +
 javax/faces/component/ComponentStateHelper.java    |   481 +
 javax/faces/component/ContextCallback.java         |    74 +
 javax/faces/component/EditableValueHolder.java     |   291 +
 javax/faces/component/FacesComponent.java          |   136 +
 javax/faces/component/MessageFactory.java          |   389 +
 .../faces/component/MethodBindingAdapterBase.java  |    70 +
 .../MethodBindingMethodExpressionAdapter.java      |   313 +
 javax/faces/component/MethodBindingValidator.java  |   215 +
 .../MethodBindingValueChangeListener.java          |   214 +
 .../MethodExpressionMethodBindingAdapter.java      |   327 +
 javax/faces/component/NamingContainer.java         |    68 +
 javax/faces/component/PartialStateHolder.java      |    85 +
 javax/faces/component/SelectItemsIterator.java     |   679 +
 javax/faces/component/SelectUtils.java             |   267 +
 javax/faces/component/SharedUtils.java             |   122 +
 javax/faces/component/StateHelper.java             |   172 +
 javax/faces/component/StateHolder.java             |   133 +
 javax/faces/component/StateHolderSaver.java        |   180 +
 javax/faces/component/TransientStateHelper.java    |    95 +
 javax/faces/component/TransientStateHolder.java    |    90 +
 javax/faces/component/TypedCollections.java        |   159 +
 javax/faces/component/UIColumn.java                |   146 +
 javax/faces/component/UICommand.java               |   346 +
 javax/faces/component/UIComponent.java             |  2691 ++
 javax/faces/component/UIComponentBase.java         |  3422 ++
 .../faces/component/UIComponentHierarchy.jpg       |   Bin
 javax/faces/component/UIData.java                  |  2506 ++
 javax/faces/component/UIForm.java                  |   394 +
 javax/faces/component/UIGraphic.java               |   272 +
 javax/faces/component/UIInput.java                 |  1540 +
 javax/faces/component/UIMessage.java               |   240 +
 javax/faces/component/UIMessages.java              |   252 +
 javax/faces/component/UINamingContainer.java       |   205 +
 javax/faces/component/UIOutcomeTarget.java         |   185 +
 javax/faces/component/UIOutput.java                |   303 +
 javax/faces/component/UIPanel.java                 |    92 +
 javax/faces/component/UIParameter.java             |   185 +
 javax/faces/component/UISelectBoolean.java         |   240 +
 javax/faces/component/UISelectItem.java            |   276 +
 javax/faces/component/UISelectItems.java           |   147 +
 javax/faces/component/UISelectMany.java            |   699 +
 javax/faces/component/UISelectOne.java             |   177 +
 javax/faces/component/UIViewAction.java            |   753 +
 javax/faces/component/UIViewParameter.java         |   534 +
 javax/faces/component/UIViewRoot.java              |  1885 ++
 javax/faces/component/UniqueIdVendor.java          |    70 +
 javax/faces/component/UpdateModelException.java    |    98 +
 .../ValueBindingValueExpressionAdapter.java        |   291 +
 .../ValueExpressionValueBindingAdapter.java        |   320 +
 javax/faces/component/ValueHolder.java             |   108 +
 javax/faces/component/behavior/AjaxBehavior.java   |   829 +
 javax/faces/component/behavior/Behavior.java       |    87 +
 javax/faces/component/behavior/BehaviorBase.java   |   266 +
 javax/faces/component/behavior/ClientBehavior.java |   136 +
 .../component/behavior/ClientBehaviorBase.java     |   203 +
 .../component/behavior/ClientBehaviorContext.java  |   258 +
 .../component/behavior/ClientBehaviorHint.java     |    60 +
 .../component/behavior/ClientBehaviorHolder.java   |   104 +
 javax/faces/component/behavior/FacesBehavior.java  |    64 +
 javax/faces/component/behavior/package.html        |    54 +
 javax/faces/component/html/HtmlBody.java           |   514 +
 javax/faces/component/html/HtmlColumn.java         |   167 +
 javax/faces/component/html/HtmlCommandButton.java  |   714 +
 javax/faces/component/html/HtmlCommandLink.java    |   724 +
 javax/faces/component/html/HtmlDataTable.java      |   778 +
 javax/faces/component/html/HtmlDoctype.java        |   174 +
 javax/faces/component/html/HtmlForm.java           |   578 +
 javax/faces/component/html/HtmlGraphicImage.java   |   578 +
 javax/faces/component/html/HtmlHead.java           |   174 +
 javax/faces/component/html/HtmlInputFile.java      |   720 +
 javax/faces/component/html/HtmlInputHidden.java    |   112 +
 javax/faces/component/html/HtmlInputSecret.java    |   746 +
 javax/faces/component/html/HtmlInputText.java      |   720 +
 javax/faces/component/html/HtmlInputTextarea.java  |   674 +
 javax/faces/component/html/HtmlMessage.java        |   415 +
 javax/faces/component/html/HtmlMessages.java       |   436 +
 .../component/html/HtmlOutcomeTargetButton.java    |   595 +
 .../component/html/HtmlOutcomeTargetLink.java      |   724 +
 javax/faces/component/html/HtmlOutputFormat.java   |   270 +
 javax/faces/component/html/HtmlOutputLabel.java    |   576 +
 javax/faces/component/html/HtmlOutputLink.java     |   747 +
 javax/faces/component/html/HtmlOutputText.java     |   266 +
 javax/faces/component/html/HtmlPanelGrid.java      |   796 +
 javax/faces/component/html/HtmlPanelGroup.java     |   388 +
 .../component/html/HtmlSelectBooleanCheckbox.java  |   640 +
 .../component/html/HtmlSelectManyCheckbox.java     |   758 +
 .../component/html/HtmlSelectManyListbox.java      |   695 +
 javax/faces/component/html/HtmlSelectManyMenu.java |   676 +
 .../faces/component/html/HtmlSelectOneListbox.java |   695 +
 javax/faces/component/html/HtmlSelectOneMenu.java  |   676 +
 javax/faces/component/html/HtmlSelectOneRadio.java |   720 +
 javax/faces/component/html/package.html            |    51 +
 javax/faces/component/package.html                 |    58 +
 javax/faces/component/visit/VisitCallback.java     |    74 +
 javax/faces/component/visit/VisitContext.java      |   240 +
 .../faces/component/visit/VisitContextFactory.java |    85 +
 .../faces/component/visit/VisitContextWrapper.java |    93 +
 javax/faces/component/visit/VisitHint.java         |    82 +
 javax/faces/component/visit/VisitResult.java       |    74 +
 javax/faces/component/visit/package.html           |    85 +
 javax/faces/context/ExceptionHandler.java          |   186 +
 javax/faces/context/ExceptionHandlerFactory.java   |    94 +
 javax/faces/context/ExceptionHandlerWrapper.java   |   168 +
 javax/faces/context/ExternalContext.java           |  2078 ++
 javax/faces/context/ExternalContextFactory.java    |   104 +
 javax/faces/context/ExternalContextWrapper.java    |   994 +
 javax/faces/context/FacesContext.java              |   927 +
 javax/faces/context/FacesContextFactory.java       |   136 +
 javax/faces/context/FacesContextWrapper.java       |   556 +
 javax/faces/context/Flash.java                     |   392 +
 javax/faces/context/FlashFactory.java              |   100 +
 javax/faces/context/FlashWrapper.java              |   309 +
 javax/faces/context/PartialResponseWriter.java     |   393 +
 javax/faces/context/PartialViewContext.java        |   295 +
 javax/faces/context/PartialViewContextFactory.java |    95 +
 javax/faces/context/PartialViewContextWrapper.java |   222 +
 javax/faces/context/ResponseStream.java            |    54 +
 javax/faces/context/ResponseWriter.java            |   391 +
 javax/faces/context/ResponseWriterWrapper.java     |   384 +
 javax/faces/context/package.html                   |    55 +
 javax/faces/convert/BigDecimalConverter.java       |   166 +
 javax/faces/convert/BigIntegerConverter.java       |   164 +
 javax/faces/convert/BooleanConverter.java          |   156 +
 javax/faces/convert/ByteConverter.java             |   163 +
 javax/faces/convert/CharacterConverter.java        |   149 +
 javax/faces/convert/Converter.java                 |   150 +
 javax/faces/convert/ConverterException.java        |   148 +
 javax/faces/convert/DateTimeConverter.java         |   624 +
 javax/faces/convert/DoubleConverter.java           |   156 +
 javax/faces/convert/EnumConverter.java             |   272 +
 javax/faces/convert/FacesConverter.java            |   122 +
 javax/faces/convert/FloatConverter.java            |   156 +
 javax/faces/convert/IntegerConverter.java          |   156 +
 javax/faces/convert/LongConverter.java             |   156 +
 javax/faces/convert/MessageFactory.java            |   389 +
 javax/faces/convert/NumberConverter.java           |   987 +
 javax/faces/convert/ShortConverter.java            |   156 +
 javax/faces/convert/package.html                   |    55 +
 .../el/CompositeComponentExpressionHolder.java     |    63 +
 javax/faces/el/EvaluationException.java            |   109 +
 javax/faces/el/MethodBinding.java                  |   111 +
 javax/faces/el/MethodNotFoundException.java        |   107 +
 javax/faces/el/PropertyNotFoundException.java      |   107 +
 javax/faces/el/PropertyResolver.java               |   242 +
 javax/faces/el/ReferenceSyntaxException.java       |   106 +
 javax/faces/el/ValueBinding.java                   |   151 +
 javax/faces/el/VariableResolver.java               |    76 +
 javax/faces/el/package.html                        |    54 +
 javax/faces/event/AbortProcessingException.java    |    94 +
 javax/faces/event/ActionEvent.java                 |    93 +
 javax/faces/event/ActionListener.java              |    83 +
 javax/faces/event/ActionListenerWrapper.java       |    72 +
 javax/faces/event/AjaxBehaviorEvent.java           |   117 +
 javax/faces/event/AjaxBehaviorListener.java        |    67 +
 javax/faces/event/BehaviorEvent.java               |    89 +
 javax/faces/event/BehaviorListener.java            |    59 +
 javax/faces/event/ComponentSystemEvent.java        |   145 +
 .../faces/event/ComponentSystemEventListener.java  |    70 +
 javax/faces/event/EventHierarchy.jpg               |   Bin 0 -> 140469 bytes
 javax/faces/event/ExceptionQueuedEvent.java        |    85 +
 javax/faces/event/ExceptionQueuedEventContext.java |   280 +
 javax/faces/event/FacesEvent.java                  |   160 +
 javax/faces/event/FacesListener.java               |    60 +
 javax/faces/event/ListenerFor.java                 |   182 +
 javax/faces/event/ListenersFor.java                |    81 +
 .../event/MethodExpressionActionListener.java      |   209 +
 .../event/MethodExpressionValueChangeListener.java |   204 +
 javax/faces/event/NamedEvent.java                  |   101 +
 javax/faces/event/PhaseEvent.java                  |   113 +
 javax/faces/event/PhaseId.java                     |   272 +
 javax/faces/event/PhaseListener.java               |    81 +
 javax/faces/event/PostAddToViewEvent.java          |   148 +
 .../faces/event/PostConstructApplicationEvent.java |    84 +
 .../faces/event/PostConstructCustomScopeEvent.java |    96 +
 javax/faces/event/PostConstructViewMapEvent.java   |    78 +
 javax/faces/event/PostKeepFlashValueEvent.java     |    78 +
 javax/faces/event/PostPutFlashValueEvent.java      |    78 +
 javax/faces/event/PostRestoreStateEvent.java       |    81 +
 javax/faces/event/PostValidateEvent.java           |    82 +
 javax/faces/event/PreClearFlashEvent.java          |    74 +
 javax/faces/event/PreDestroyApplicationEvent.java  |    83 +
 javax/faces/event/PreDestroyCustomScopeEvent.java  |    89 +
 javax/faces/event/PreDestroyViewMapEvent.java      |    76 +
 javax/faces/event/PreRemoveFlashValueEvent.java    |    78 +
 javax/faces/event/PreRemoveFromViewEvent.java      |   100 +
 javax/faces/event/PreRenderComponentEvent.java     |    80 +
 javax/faces/event/PreRenderViewEvent.java          |    91 +
 javax/faces/event/PreValidateEvent.java            |    82 +
 javax/faces/event/ScopeContext.java                |    99 +
 javax/faces/event/SystemEvent.java                 |   111 +
 javax/faces/event/SystemEventListener.java         |    81 +
 javax/faces/event/SystemEventListenerHolder.java   |    76 +
 javax/faces/event/ValueChangeEvent.java            |   139 +
 javax/faces/event/ValueChangeListener.java         |    71 +
 javax/faces/event/ViewMapListener.java             |    53 +
 javax/faces/event/package.html                     |    61 +
 javax/faces/flow/Flow.java                         |   247 +
 javax/faces/flow/FlowCallNode.java                 |    54 +
 javax/faces/flow/FlowHandler.java                  |   471 +
 javax/faces/flow/FlowHandlerFactory.java           |    72 +
 javax/faces/flow/FlowHandlerFactoryWrapper.java    |    80 +
 javax/faces/flow/FlowHierarchy.jpg                 |   Bin 0 -> 62558 bytes
 javax/faces/flow/FlowNode.java                     |    56 +
 javax/faces/flow/FlowScoped.java                   |    94 +
 javax/faces/flow/MethodCallNode.java               |    87 +
 javax/faces/flow/Parameter.java                    |    70 +
 javax/faces/flow/ReturnNode.java                   |    64 +
 javax/faces/flow/SwitchCase.java                   |    69 +
 javax/faces/flow/SwitchNode.java                   |    74 +
 javax/faces/flow/ViewNode.java                     |    62 +
 javax/faces/flow/builder/FlowBuilder.java          |   278 +
 javax/faces/flow/builder/FlowBuilderParameter.java |    67 +
 javax/faces/flow/builder/FlowCallBuilder.java      |    86 +
 javax/faces/flow/builder/FlowDefinition.java       |    65 +
 javax/faces/flow/builder/MethodCallBuilder.java    |   138 +
 .../faces/flow/builder/NavigationCaseBuilder.java  |   169 +
 javax/faces/flow/builder/NodeBuilder.java          |    62 +
 javax/faces/flow/builder/ReturnBuilder.java        |    76 +
 javax/faces/flow/builder/SwitchBuilder.java        |    85 +
 javax/faces/flow/builder/SwitchCaseBuilder.java    |    99 +
 javax/faces/flow/builder/ViewBuilder.java          |    53 +
 javax/faces/flow/builder/package.html              |    54 +
 javax/faces/flow/package.html                      |    54 +
 javax/faces/lifecycle/ClientWindow.java            |   245 +
 javax/faces/lifecycle/ClientWindowFactory.java     |    88 +
 javax/faces/lifecycle/ClientWindowWrapper.java     |    88 +
 javax/faces/lifecycle/Lifecycle.java               |   161 +
 javax/faces/lifecycle/LifecycleFactory.java        |   144 +
 javax/faces/lifecycle/LifecycleWrapper.java        |    99 +
 javax/faces/lifecycle/package.html                 |    54 +
 javax/faces/model/ArrayDataModel.java              |   222 +
 javax/faces/model/CollectionDataModel.java         |   222 +
 javax/faces/model/DataModel.java                   |   335 +
 javax/faces/model/DataModelEvent.java              |   121 +
 javax/faces/model/DataModelListener.java           |    65 +
 javax/faces/model/ListDataModel.java               |   225 +
 javax/faces/model/NoRowAvailableException.java     |    75 +
 javax/faces/model/ResultDataModel.java             |   244 +
 javax/faces/model/ResultSetDataModel.java          |   817 +
 javax/faces/model/ScalarDataModel.java             |   218 +
 javax/faces/model/SelectItem.java                  |   359 +
 javax/faces/model/SelectItemGroup.java             |   162 +
 javax/faces/model/package.html                     |    51 +
 javax/faces/package.html                           |    56 +
 javax/faces/render/ClientBehaviorRenderer.java     |   130 +
 javax/faces/render/FacesBehaviorRenderer.java      |   112 +
 javax/faces/render/FacesRenderer.java              |   135 +
 javax/faces/render/RenderKit.java                  |   278 +
 javax/faces/render/RenderKitFactory.java           |   141 +
 javax/faces/render/RenderKitWrapper.java           |   202 +
 javax/faces/render/Renderer.java                   |   264 +
 javax/faces/render/RendererWrapper.java            |   108 +
 javax/faces/render/ResponseStateManager.java       |   475 +
 javax/faces/render/package.html                    |    55 +
 javax/faces/validator/BeanValidator.java           |   502 +
 javax/faces/validator/DoubleRangeValidator.java    |   443 +
 javax/faces/validator/FacesValidator.java          |    98 +
 javax/faces/validator/LengthValidator.java         |   384 +
 javax/faces/validator/LongRangeValidator.java      |   441 +
 javax/faces/validator/MessageFactory.java          |   389 +
 .../faces/validator/MethodExpressionValidator.java |   199 +
 javax/faces/validator/RegexValidator.java          |   238 +
 javax/faces/validator/RequiredValidator.java       |    97 +
 javax/faces/validator/Validator.java               |   138 +
 javax/faces/validator/ValidatorException.java      |   141 +
 javax/faces/validator/ValueExpressionAnalyzer.java |   190 +
 javax/faces/validator/ValueReference.java          |    63 +
 javax/faces/validator/package.html                 |    52 +
 .../view/ActionSource2AttachedObjectHandler.java   |    54 +
 .../view/ActionSource2AttachedObjectTarget.java    |    52 +
 javax/faces/view/AttachedObjectHandler.java        |    81 +
 javax/faces/view/AttachedObjectTarget.java         |   108 +
 .../view/BehaviorHolderAttachedObjectHandler.java  |    57 +
 .../view/BehaviorHolderAttachedObjectTarget.java   |    51 +
 .../EditableValueHolderAttachedObjectHandler.java  |    56 +
 .../EditableValueHolderAttachedObjectTarget.java   |    52 +
 javax/faces/view/Location.java                     |   114 +
 javax/faces/view/StateManagementStrategy.java      |   198 +
 .../view/ValueHolderAttachedObjectHandler.java     |    54 +
 .../view/ValueHolderAttachedObjectTarget.java      |    52 +
 javax/faces/view/ViewDeclarationLanguage.java      |   641 +
 .../faces/view/ViewDeclarationLanguageFactory.java |   107 +
 .../faces/view/ViewDeclarationLanguageWrapper.java |   158 +
 javax/faces/view/ViewMetadata.java                 |   182 +
 javax/faces/view/ViewScoped.java                   |   124 +
 javax/faces/view/facelets/AttributeHandler.java    |    77 +
 javax/faces/view/facelets/BehaviorConfig.java      |    58 +
 javax/faces/view/facelets/BehaviorHandler.java     |    97 +
 javax/faces/view/facelets/ComponentConfig.java     |    86 +
 javax/faces/view/facelets/ComponentHandler.java    |   264 +
 .../view/facelets/CompositeFaceletHandler.java     |   106 +
 javax/faces/view/facelets/ConverterConfig.java     |    78 +
 javax/faces/view/facelets/ConverterHandler.java    |   111 +
 .../view/facelets/DelegatingMetaTagHandler.java    |   156 +
 javax/faces/view/facelets/Facelet.java             |    94 +
 javax/faces/view/facelets/FaceletCache.java        |   196 +
 javax/faces/view/facelets/FaceletCacheFactory.java |    63 +
 javax/faces/view/facelets/FaceletContext.java      |   201 +
 javax/faces/view/facelets/FaceletException.java    |   113 +
 javax/faces/view/facelets/FaceletHandler.java      |   114 +
 .../faces/view/facelets/Facelets.jpg               |   Bin
 .../facelets/FaceletsAttachedObjectHandler.java    |   110 +
 .../view/facelets/FaceletsResourceResolver.java    |    60 +
 javax/faces/view/facelets/FacetHandler.java        |    76 +
 javax/faces/view/facelets/MetaRule.java            |   127 +
 javax/faces/view/facelets/MetaRuleset.java         |   121 +
 javax/faces/view/facelets/MetaTagHandler.java      |   132 +
 javax/faces/view/facelets/Metadata.java            |    87 +
 javax/faces/view/facelets/MetadataTarget.java      |   122 +
 javax/faces/view/facelets/ResourceResolver.java    |   108 +
 javax/faces/view/facelets/Tag.java                 |   143 +
 javax/faces/view/facelets/TagAttribute.java        |   242 +
 .../faces/view/facelets/TagAttributeException.java |   126 +
 javax/faces/view/facelets/TagAttributes.java       |   142 +
 javax/faces/view/facelets/TagConfig.java           |    88 +
 javax/faces/view/facelets/TagDecorator.java        |   562 +
 javax/faces/view/facelets/TagException.java        |   110 +
 javax/faces/view/facelets/TagHandler.java          |   153 +
 javax/faces/view/facelets/TagHandlerDelegate.java  |    97 +
 .../view/facelets/TagHandlerDelegateFactory.java   |   118 +
 javax/faces/view/facelets/TextHandler.java         |    82 +
 javax/faces/view/facelets/ValidatorConfig.java     |    78 +
 javax/faces/view/facelets/ValidatorHandler.java    |   143 +
 javax/faces/view/facelets/package.html             |    80 +
 javax/faces/view/package.html                      |    59 +
 javax/faces/webapp/AttributeTag.java               |   173 +
 javax/faces/webapp/ConverterELTag.java             |   167 +
 javax/faces/webapp/ConverterTag.java               |   293 +
 javax/faces/webapp/FacesServlet.java               |   712 +
 javax/faces/webapp/FacetTag.java                   |   118 +
 javax/faces/webapp/MessageFactory.java             |   389 +
 .../webapp/PreJsf2ExceptionHandlerFactory.java     |   338 +
 javax/faces/webapp/TypedCollections.java           |   159 +
 javax/faces/webapp/UIComponentBodyTag.java         |    57 +
 javax/faces/webapp/UIComponentClassicTagBase.java  |  2133 ++
 javax/faces/webapp/UIComponentELTag.java           |   235 +
 javax/faces/webapp/UIComponentTag.java             |   301 +
 javax/faces/webapp/UIComponentTagBase.java         |   167 +
 javax/faces/webapp/ValidatorELTag.java             |   148 +
 javax/faces/webapp/ValidatorTag.java               |   275 +
 javax/faces/webapp/package.html                    |    55 +
 jsf-api/LICENSE.TXT                                |    96 -
 jsf-api/api.iml                                    |    23 -
 jsf-api/build-source.xml                           |   865 -
 jsf-api/build.xml                                  |   908 -
 jsf-api/doc/README.txt                             |    23 -
 jsf-api/doc/XMLSchema.dtd                          |   401 -
 jsf-api/doc/actionsource-props.xml                 |   124 -
 jsf-api/doc/actionsource2-props.xml                |    74 -
 jsf-api/doc/base-props.xml                         |    73 -
 jsf-api/doc/changed_added_2_0.png                  |   Bin 748 -> 0 bytes
 jsf-api/doc/changed_added_2_0.psd                  |   Bin 11434 -> 0 bytes
 jsf-api/doc/changed_added_2_0_cursor.png           |   Bin 9850 -> 0 bytes
 jsf-api/doc/changed_added_2_0_cursor.psd           |   Bin 176724 -> 0 bytes
 jsf-api/doc/changed_added_2_0_rev_a.png            |   Bin 748 -> 0 bytes
 jsf-api/doc/changed_added_2_0_rev_a_cursor.cur     |   Bin 2238 -> 0 bytes
 jsf-api/doc/changed_deleted_2_0.png                |   Bin 748 -> 0 bytes
 jsf-api/doc/changed_deleted_2_0.psd                |   Bin 12146 -> 0 bytes
 jsf-api/doc/changed_deleted_2_0_cursor.png         |   Bin 9965 -> 0 bytes
 jsf-api/doc/changed_deleted_2_0_cursor.psd         |   Bin 129006 -> 0 bytes
 jsf-api/doc/changed_deleted_2_0_rev_a.png          |   Bin 748 -> 0 bytes
 jsf-api/doc/changed_deleted_2_0_rev_a_cursor.cur   |   Bin 2238 -> 0 bytes
 jsf-api/doc/changed_modified_2_0.png               |   Bin 748 -> 0 bytes
 jsf-api/doc/changed_modified_2_0.psd               |   Bin 12072 -> 0 bytes
 jsf-api/doc/changed_modified_2_0_cursor.png        |   Bin 9948 -> 0 bytes
 jsf-api/doc/changed_modified_2_0_cursor.psd        |   Bin 113355 -> 0 bytes
 jsf-api/doc/changed_modified_2_0_rev_a.png         |   Bin 748 -> 0 bytes
 jsf-api/doc/changed_modified_2_0_rev_a_cursor.cur  |   Bin 2238 -> 0 bytes
 jsf-api/doc/column-props.xml                       |    90 -
 jsf-api/doc/command-button-props.xml               |   241 -
 jsf-api/doc/core-props.xml                         |    97 -
 jsf-api/doc/datatypes.dtd                          |   202 -
 jsf-api/doc/direct-link-props.xml                  |    70 -
 jsf-api/doc/editable-props.xml                     |   226 -
 jsf-api/doc/events-props-noclick.xml               |   191 -
 jsf-api/doc/events-props.xml                       |   205 -
 jsf-api/doc/events-valueChanged-click.xml          |    36 -
 jsf-api/doc/facelet-taglib_1_0.dtd                 |    70 -
 jsf-api/doc/focus-props.xml                        |   112 -
 jsf-api/doc/form-form-props.xml                    |   138 -
 jsf-api/doc/graphic-image-props.xml                |   140 -
 jsf-api/doc/i18n-props.xml                         |    83 -
 jsf-api/doc/image-button-props.xml                 |    96 -
 jsf-api/doc/input-props-nochange.xml               |   116 -
 jsf-api/doc/input-props.xml                        |   133 -
 jsf-api/doc/input-secret-props.xml                 |    69 -
 jsf-api/doc/input-textarea-props.xml               |    82 -
 jsf-api/doc/javaee_5.xsd                           |  2101 --
 jsf-api/doc/javaee_web_services_1_2.xsd            |   755 -
 jsf-api/doc/javaee_web_services_client_1_2.xsd     |   586 -
 jsf-api/doc/link-props.xml                         |   343 -
 jsf-api/doc/list-props.xml                         |    68 -
 jsf-api/doc/listbox-props.xml                      |    88 -
 jsf-api/doc/menu-props.xml                         |    77 -
 jsf-api/doc/message-message-props.xml              |   154 -
 jsf-api/doc/messages-messages-props.xml            |   170 -
 jsf-api/doc/not-jsf.gif                            |   Bin 4051 -> 0 bytes
 jsf-api/doc/output-format-props.xml                |    70 -
 jsf-api/doc/output-label-props.xml                 |    85 -
 jsf-api/doc/output-resource-props.xml              |    84 -
 jsf-api/doc/output-text-props.xml                  |    70 -
 jsf-api/doc/panel-grid-props.xml                   |    66 -
 jsf-api/doc/panel-group-props.xml                  |    95 -
 jsf-api/doc/selectmany-checkbox-props.xml          |   128 -
 jsf-api/doc/selectmany-props.xml                   |    87 -
 jsf-api/doc/selectone-props.xml                    |    70 -
 jsf-api/doc/selectone-radio-props.xml              |   105 -
 jsf-api/doc/standard-html-renderkit-base.xml       |  3469 ---
 jsf-api/doc/standard-html-renderkit.xml            | 31193 -------------------
 jsf-api/doc/table-props.xml                        |   270 -
 jsf-api/doc/text-props.xml                         |   112 -
 jsf-api/doc/uicolumn-props.xml                     |    57 -
 jsf-api/doc/uicommand-props.xml                    |    71 -
 jsf-api/doc/uicomponent-props.xml                  |   202 -
 jsf-api/doc/uidata-props.xml                       |   172 -
 jsf-api/doc/uiform-props.xml                       |    87 -
 jsf-api/doc/uigraphic-props.xml                    |    84 -
 jsf-api/doc/uiinput-props.xml                      |    58 -
 jsf-api/doc/uimessage-props.xml                    |   100 -
 jsf-api/doc/uimessages-props.xml                   |   118 -
 jsf-api/doc/uinamingcontainer-props.xml            |    57 -
 jsf-api/doc/uioutcometarget-props.xml              |    94 -
 jsf-api/doc/uioutput-props.xml                     |    58 -
 jsf-api/doc/uipanel-props.xml                      |    57 -
 jsf-api/doc/uiparameter-props.xml                  |    79 -
 jsf-api/doc/uiselectboolean-props.xml              |   120 -
 jsf-api/doc/uiselectitem-props.xml                 |   114 -
 jsf-api/doc/uiselectitems-props.xml                |    69 -
 jsf-api/doc/uiselectmany-props.xml                 |    71 -
 jsf-api/doc/uiselectone-props.xml                  |    56 -
 jsf-api/doc/uiviewroot-props.xml                   |    95 -
 jsf-api/doc/valueholder-props.xml                  |    97 -
 jsf-api/doc/web-facelettaglibrary_2_0.xsd          |   512 -
 jsf-api/doc/web-facesconfig_1_0.dtd                |   909 -
 jsf-api/doc/web-facesconfig_1_1.dtd                |   929 -
 jsf-api/doc/web-facesconfig_1_2.xsd                |  2074 --
 jsf-api/doc/web-facesconfig_2_0.xsd                |  2737 --
 jsf-api/doc/web-facesuicomponent_2_0.xsd           |   220 -
 jsf-api/doc/web-partialresponse_2_0.xsd            |   260 -
 jsf-api/doc/xml.xsd                                |    82 -
 jsf-api/interim-pom.xml                            |   329 -
 jsf-api/mojarra-jsf-api.bnd                        |    58 -
 .../src/main/java/javax/faces/FacesException.java  |   128 -
 .../src/main/java/javax/faces/FacesWrapper.java    |    56 -
 .../src/main/java/javax/faces/FactoryFinder.java   |   814 -
 .../main/java/javax/faces/LogStrings.properties    |    87 -
 .../main/java/javax/faces/LogStrings_de.properties |    87 -
 .../main/java/javax/faces/LogStrings_es.properties |    87 -
 .../main/java/javax/faces/LogStrings_fr.properties |    87 -
 .../main/java/javax/faces/LogStrings_ja.properties |    87 -
 .../main/java/javax/faces/LogStrings_ko.properties |    87 -
 .../java/javax/faces/LogStrings_pt_BR.properties   |    87 -
 .../java/javax/faces/LogStrings_zh_CN.properties   |    87 -
 .../java/javax/faces/LogStrings_zh_TW.properties   |    87 -
 .../src/main/java/javax/faces/Messages.properties  |   112 -
 .../main/java/javax/faces/Messages_de.properties   |   112 -
 .../main/java/javax/faces/Messages_en.properties   |   110 -
 .../main/java/javax/faces/Messages_es.properties   |   112 -
 .../main/java/javax/faces/Messages_fr.properties   |   112 -
 .../main/java/javax/faces/Messages_ja.properties   |   112 -
 .../main/java/javax/faces/Messages_ko.properties   |   112 -
 .../java/javax/faces/Messages_pt_BR.properties     |   112 -
 .../java/javax/faces/Messages_zh_CN.properties     |   112 -
 .../java/javax/faces/Messages_zh_TW.properties     |   112 -
 .../java/javax/faces/application/Application.java  |  1885 --
 .../faces/application/ApplicationFactory.java      |    92 -
 .../faces/application/ApplicationWrapper.java      |   730 -
 .../application/ConfigurableNavigationHandler.java |   109 -
 .../java/javax/faces/application/FacesMessage.java |   485 -
 .../javax/faces/application/NavigationCase.java    |   446 -
 .../javax/faces/application/NavigationHandler.java |   100 -
 .../java/javax/faces/application/ProjectStage.java |   105 -
 .../java/javax/faces/application/Resource.java     |   303 -
 .../faces/application/ResourceDependencies.java    |    77 -
 .../faces/application/ResourceDependency.java      |   158 -
 .../javax/faces/application/ResourceHandler.java   |   441 -
 .../faces/application/ResourceHandlerWrapper.java  |   159 -
 .../javax/faces/application/ResourceWrapper.java   |   134 -
 .../java/javax/faces/application/StateManager.java |   534 -
 .../faces/application/StateManagerWrapper.java     |   241 -
 .../faces/application/ViewExpiredException.java    |   161 -
 .../java/javax/faces/application/ViewHandler.java  |   545 -
 .../faces/application/ViewHandlerWrapper.java      |   301 -
 .../main/java/javax/faces/application/package.html |    30 -
 .../java/javax/faces/bean/ApplicationScoped.java   |    59 -
 .../main/java/javax/faces/bean/CustomScoped.java   |    68 -
 .../main/java/javax/faces/bean/ManagedBean.java    |   116 -
 .../java/javax/faces/bean/ManagedProperty.java     |    83 -
 .../src/main/java/javax/faces/bean/NoneScoped.java |    58 -
 .../main/java/javax/faces/bean/ReferencedBean.java |    65 -
 .../main/java/javax/faces/bean/RequestScoped.java  |    57 -
 .../main/java/javax/faces/bean/SessionScoped.java  |    57 -
 .../src/main/java/javax/faces/bean/ViewScoped.java |    57 -
 .../src/main/java/javax/faces/bean/package.html    |    46 -
 .../java/javax/faces/component/ActionSource.java   |   201 -
 .../java/javax/faces/component/ActionSource2.java  |    94 -
 .../faces/component/AttachedObjectListHolder.java  |   208 -
 .../faces/component/ComponentStateHelper.java      |   432 -
 .../javax/faces/component/ContextCallback.java     |    70 -
 .../javax/faces/component/EditableValueHolder.java |   286 -
 .../java/javax/faces/component/FacesComponent.java |    80 -
 .../faces/component/MethodBindingAdapterBase.java  |    66 -
 .../faces/component/MethodBindingValidator.java    |   211 -
 .../MethodBindingValueChangeListener.java          |   210 -
 .../javax/faces/component/NamingContainer.java     |    64 -
 .../javax/faces/component/PartialStateHolder.java  |    84 -
 .../javax/faces/component/SelectItemsIterator.java |   675 -
 .../java/javax/faces/component/SelectUtils.java    |   263 -
 .../java/javax/faces/component/StateHelper.java    |   170 -
 .../java/javax/faces/component/StateHolder.java    |   123 -
 .../main/java/javax/faces/component/UIColumn.java  |   142 -
 .../main/java/javax/faces/component/UICommand.java |   342 -
 .../java/javax/faces/component/UIComponent.java    |  2478 --
 .../javax/faces/component/UIComponentBase.java     |  3232 --
 .../main/java/javax/faces/component/UIData.java    |  1950 --
 .../main/java/javax/faces/component/UIForm.java    |   354 -
 .../main/java/javax/faces/component/UIGraphic.java |   269 -
 .../main/java/javax/faces/component/UIInput.java   |  1496 -
 .../main/java/javax/faces/component/UIMessage.java |   236 -
 .../java/javax/faces/component/UIMessages.java     |   248 -
 .../javax/faces/component/UINamingContainer.java   |   190 -
 .../javax/faces/component/UIOutcomeTarget.java     |   160 -
 .../main/java/javax/faces/component/UIOutput.java  |   268 -
 .../main/java/javax/faces/component/UIPanel.java   |    88 -
 .../java/javax/faces/component/UIParameter.java    |   181 -
 .../javax/faces/component/UISelectBoolean.java     |   236 -
 .../java/javax/faces/component/UISelectItem.java   |   271 -
 .../java/javax/faces/component/UISelectItems.java  |   143 -
 .../java/javax/faces/component/UISelectMany.java   |   697 -
 .../java/javax/faces/component/UISelectOne.java    |   173 -
 .../javax/faces/component/UIViewParameter.java     |   487 -
 .../java/javax/faces/component/UIViewRoot.java     |  1800 --
 .../java/javax/faces/component/UniqueIdVendor.java |    66 -
 .../faces/component/UpdateModelException.java      |    94 -
 .../java/javax/faces/component/ValueHolder.java    |   104 -
 .../faces/component/behavior/AjaxBehavior.java     |   732 -
 .../javax/faces/component/behavior/Behavior.java   |    94 -
 .../faces/component/behavior/BehaviorBase.java     |   258 -
 .../faces/component/behavior/ClientBehavior.java   |   143 -
 .../component/behavior/ClientBehaviorBase.java     |   199 -
 .../component/behavior/ClientBehaviorContext.java  |   254 -
 .../component/behavior/ClientBehaviorHint.java     |    56 -
 .../component/behavior/ClientBehaviorHolder.java   |   101 -
 .../faces/component/behavior/FacesBehavior.java    |    60 -
 .../javax/faces/component/behavior/package.html    |    11 -
 .../java/javax/faces/component/html/package.html   |     8 -
 .../main/java/javax/faces/component/package.html   |    16 -
 .../javax/faces/component/visit/VisitCallback.java |    70 -
 .../javax/faces/component/visit/VisitContext.java  |   238 -
 .../faces/component/visit/VisitContextFactory.java |    78 -
 .../faces/component/visit/VisitContextWrapper.java |    88 -
 .../javax/faces/component/visit/VisitHint.java     |    68 -
 .../javax/faces/component/visit/VisitResult.java   |    70 -
 .../java/javax/faces/component/visit/package.html  |    43 -
 .../java/javax/faces/context/ExceptionHandler.java |   182 -
 .../faces/context/ExceptionHandlerFactory.java     |    88 -
 .../faces/context/ExceptionHandlerWrapper.java     |   156 -
 .../java/javax/faces/context/ExternalContext.java  |  1848 --
 .../faces/context/ExternalContextFactory.java      |    97 -
 .../faces/context/ExternalContextWrapper.java      |   863 -
 .../java/javax/faces/context/FacesContext.java     |   778 -
 .../javax/faces/context/FacesContextFactory.java   |   123 -
 .../javax/faces/context/FacesContextWrapper.java   |   478 -
 .../src/main/java/javax/faces/context/Flash.java   |   378 -
 .../javax/faces/context/PartialResponseWriter.java |   370 -
 .../javax/faces/context/PartialViewContext.java    |   263 -
 .../faces/context/PartialViewContextFactory.java   |    88 -
 .../faces/context/PartialViewContextWrapper.java   |   182 -
 .../java/javax/faces/context/ResponseStream.java   |    50 -
 .../java/javax/faces/context/ResponseWriter.java   |   303 -
 .../javax/faces/context/ResponseWriterWrapper.java |   337 -
 .../src/main/java/javax/faces/context/package.html |    12 -
 .../javax/faces/convert/BigDecimalConverter.java   |   162 -
 .../javax/faces/convert/BigIntegerConverter.java   |   160 -
 .../java/javax/faces/convert/BooleanConverter.java |   152 -
 .../java/javax/faces/convert/ByteConverter.java    |   159 -
 .../javax/faces/convert/CharacterConverter.java    |   145 -
 .../main/java/javax/faces/convert/Converter.java   |   132 -
 .../javax/faces/convert/ConverterException.java    |   144 -
 .../javax/faces/convert/DateTimeConverter.java     |   620 -
 .../java/javax/faces/convert/DoubleConverter.java  |   152 -
 .../java/javax/faces/convert/EnumConverter.java    |   264 -
 .../java/javax/faces/convert/FacesConverter.java   |    96 -
 .../java/javax/faces/convert/FloatConverter.java   |   152 -
 .../java/javax/faces/convert/IntegerConverter.java |   152 -
 .../java/javax/faces/convert/LongConverter.java    |   152 -
 .../java/javax/faces/convert/NumberConverter.java  |   983 -
 .../java/javax/faces/convert/ShortConverter.java   |   152 -
 .../src/main/java/javax/faces/convert/package.html |    12 -
 .../el/CompositeComponentExpressionHolder.java     |    59 -
 .../java/javax/faces/el/EvaluationException.java   |   106 -
 .../main/java/javax/faces/el/MethodBinding.java    |   108 -
 .../javax/faces/el/MethodNotFoundException.java    |   104 -
 .../javax/faces/el/PropertyNotFoundException.java  |   104 -
 .../main/java/javax/faces/el/PropertyResolver.java |   239 -
 .../javax/faces/el/ReferenceSyntaxException.java   |   103 -
 .../src/main/java/javax/faces/el/ValueBinding.java |   148 -
 .../main/java/javax/faces/el/VariableResolver.java |    73 -
 jsf-api/src/main/java/javax/faces/el/package.html  |    12 -
 .../faces/event/AbortProcessingException.java      |    91 -
 .../main/java/javax/faces/event/ActionEvent.java   |    89 -
 .../java/javax/faces/event/ActionListener.java     |    70 -
 .../java/javax/faces/event/AjaxBehaviorEvent.java  |   113 -
 .../javax/faces/event/AjaxBehaviorListener.java    |    63 -
 .../main/java/javax/faces/event/BehaviorEvent.java |    86 -
 .../java/javax/faces/event/BehaviorListener.java   |    55 -
 .../javax/faces/event/ComponentSystemEvent.java    |    87 -
 .../faces/event/ComponentSystemEventListener.java  |    66 -
 .../main/java/javax/faces/event/EventHierarchy.jpg |   Bin 999248 -> 0 bytes
 .../javax/faces/event/ExceptionQueuedEvent.java    |    81 -
 .../faces/event/ExceptionQueuedEventContext.java   |   276 -
 .../main/java/javax/faces/event/FacesEvent.java    |   156 -
 .../main/java/javax/faces/event/FacesListener.java |    56 -
 .../main/java/javax/faces/event/ListenerFor.java   |   178 -
 .../main/java/javax/faces/event/ListenersFor.java  |    78 -
 .../event/MethodExpressionActionListener.java      |   233 -
 .../event/MethodExpressionValueChangeListener.java |   205 -
 .../main/java/javax/faces/event/NamedEvent.java    |    97 -
 .../main/java/javax/faces/event/PhaseEvent.java    |   109 -
 .../src/main/java/javax/faces/event/PhaseId.java   |   213 -
 .../main/java/javax/faces/event/PhaseListener.java |    77 -
 .../java/javax/faces/event/PostAddToViewEvent.java |   114 -
 .../faces/event/PostAddToViewNonPDLEvent.java      |    56 -
 .../faces/event/PostConstructApplicationEvent.java |    81 -
 .../faces/event/PostConstructCustomScopeEvent.java |    92 -
 .../faces/event/PostConstructViewMapEvent.java     |    74 -
 .../javax/faces/event/PostRestoreStateEvent.java   |    77 -
 .../java/javax/faces/event/PostValidateEvent.java  |    65 -
 .../faces/event/PreDestroyApplicationEvent.java    |    79 -
 .../faces/event/PreDestroyCustomScopeEvent.java    |    85 -
 .../javax/faces/event/PreDestroyViewMapEvent.java  |    72 -
 .../javax/faces/event/PreRemoveFromViewEvent.java  |    96 -
 .../javax/faces/event/PreRenderComponentEvent.java |    76 -
 .../java/javax/faces/event/PreRenderViewEvent.java |    87 -
 .../java/javax/faces/event/PreValidateEvent.java   |    66 -
 .../main/java/javax/faces/event/ScopeContext.java  |    95 -
 .../main/java/javax/faces/event/SystemEvent.java   |   105 -
 .../javax/faces/event/SystemEventListener.java     |    77 -
 .../faces/event/SystemEventListenerHolder.java     |    72 -
 .../java/javax/faces/event/ValueChangeEvent.java   |   135 -
 .../javax/faces/event/ValueChangeListener.java     |    67 -
 .../java/javax/faces/event/ViewMapListener.java    |    49 -
 .../src/main/java/javax/faces/event/package.html   |    18 -
 .../main/java/javax/faces/lifecycle/Lifecycle.java |   135 -
 .../javax/faces/lifecycle/LifecycleFactory.java    |   137 -
 .../main/java/javax/faces/lifecycle/package.html   |    12 -
 .../java/javax/faces/model/ArrayDataModel.java     |   222 -
 .../src/main/java/javax/faces/model/DataModel.java |   333 -
 .../java/javax/faces/model/DataModelEvent.java     |   117 -
 .../java/javax/faces/model/DataModelListener.java  |    61 -
 .../main/java/javax/faces/model/ListDataModel.java |   222 -
 .../javax/faces/model/NoRowAvailableException.java |    72 -
 .../java/javax/faces/model/ResultDataModel.java    |   241 -
 .../java/javax/faces/model/ResultSetDataModel.java |   813 -
 .../java/javax/faces/model/ScalarDataModel.java    |   218 -
 .../main/java/javax/faces/model/SelectItem.java    |   355 -
 .../java/javax/faces/model/SelectItemGroup.java    |   158 -
 .../src/main/java/javax/faces/model/package.html   |     8 -
 jsf-api/src/main/java/javax/faces/package.html     |    30 -
 .../javax/faces/render/ClientBehaviorRenderer.java |   126 -
 .../javax/faces/render/FacesBehaviorRenderer.java  |   108 -
 .../java/javax/faces/render/FacesRenderer.java     |   131 -
 .../main/java/javax/faces/render/RenderKit.java    |   276 -
 .../java/javax/faces/render/RenderKitFactory.java  |   134 -
 .../java/javax/faces/render/RenderKitWrapper.java  |   197 -
 .../src/main/java/javax/faces/render/Renderer.java |   252 -
 .../javax/faces/render/ResponseStateManager.java   |   333 -
 .../src/main/java/javax/faces/render/package.html  |    12 -
 .../java/javax/faces/validator/BeanValidator.java  |   490 -
 .../faces/validator/DoubleRangeValidator.java      |   436 -
 .../java/javax/faces/validator/FacesValidator.java |    88 -
 .../javax/faces/validator/LengthValidator.java     |   377 -
 .../javax/faces/validator/LongRangeValidator.java  |   434 -
 .../faces/validator/MethodExpressionValidator.java |   149 -
 .../java/javax/faces/validator/RegexValidator.java |   232 -
 .../javax/faces/validator/RequiredValidator.java   |    94 -
 .../main/java/javax/faces/validator/Validator.java |   136 -
 .../javax/faces/validator/ValidatorException.java  |   137 -
 .../faces/validator/ValueExpressionAnalyzer.java   |   186 -
 .../java/javax/faces/validator/ValueReference.java |    59 -
 .../main/java/javax/faces/validator/package.html   |     9 -
 .../view/ActionSource2AttachedObjectHandler.java   |    50 -
 .../view/ActionSource2AttachedObjectTarget.java    |    48 -
 .../javax/faces/view/AttachedObjectHandler.java    |    77 -
 .../javax/faces/view/AttachedObjectTarget.java     |   105 -
 .../view/BehaviorHolderAttachedObjectHandler.java  |    55 -
 .../view/BehaviorHolderAttachedObjectTarget.java   |    47 -
 .../EditableValueHolderAttachedObjectHandler.java  |    53 -
 .../EditableValueHolderAttachedObjectTarget.java   |    49 -
 .../src/main/java/javax/faces/view/Location.java   |   110 -
 .../javax/faces/view/StateManagementStrategy.java  |   161 -
 .../view/ValueHolderAttachedObjectHandler.java     |    51 -
 .../view/ValueHolderAttachedObjectTarget.java      |    49 -
 .../javax/faces/view/ViewDeclarationLanguage.java  |   508 -
 .../faces/view/ViewDeclarationLanguageFactory.java |    97 -
 .../main/java/javax/faces/view/ViewMetadata.java   |   122 -
 .../faces/view/facelets/AttributeHandler.java      |    72 -
 .../javax/faces/view/facelets/BehaviorConfig.java  |    56 -
 .../javax/faces/view/facelets/BehaviorHandler.java |    93 -
 .../javax/faces/view/facelets/ComponentConfig.java |    82 -
 .../faces/view/facelets/ComponentHandler.java      |   207 -
 .../view/facelets/CompositeFaceletHandler.java     |   105 -
 .../javax/faces/view/facelets/ConverterConfig.java |    74 -
 .../faces/view/facelets/ConverterHandler.java      |   107 -
 .../view/facelets/DelegatingMetaTagHandler.java    |   150 -
 .../javax/faces/view/facelets/FaceletContext.java  |   199 -
 .../faces/view/facelets/FaceletException.java      |   109 -
 .../javax/faces/view/facelets/FaceletHandler.java  |   113 -
 .../facelets/FaceletsAttachedObjectHandler.java    |   106 -
 .../javax/faces/view/facelets/FacetHandler.java    |    71 -
 .../java/javax/faces/view/facelets/MetaRule.java   |   123 -
 .../javax/faces/view/facelets/MetaRuleset.java     |   117 -
 .../javax/faces/view/facelets/MetaTagHandler.java  |   128 -
 .../java/javax/faces/view/facelets/Metadata.java   |    83 -
 .../javax/faces/view/facelets/MetadataTarget.java  |   118 -
 .../faces/view/facelets/ResourceResolver.java      |   100 -
 .../main/java/javax/faces/view/facelets/Tag.java   |   139 -
 .../javax/faces/view/facelets/TagAttribute.java    |   211 -
 .../faces/view/facelets/TagAttributeException.java |   122 -
 .../javax/faces/view/facelets/TagAttributes.java   |   109 -
 .../java/javax/faces/view/facelets/TagConfig.java  |    84 -
 .../javax/faces/view/facelets/TagDecorator.java    |    74 -
 .../javax/faces/view/facelets/TagException.java    |   106 -
 .../java/javax/faces/view/facelets/TagHandler.java |   148 -
 .../faces/view/facelets/TagHandlerDelegate.java    |    83 -
 .../view/facelets/TagHandlerDelegateFactory.java   |    95 -
 .../javax/faces/view/facelets/TextHandler.java     |    77 -
 .../javax/faces/view/facelets/ValidatorConfig.java |    74 -
 .../faces/view/facelets/ValidatorHandler.java      |   139 -
 .../java/javax/faces/view/facelets/package.html    |    37 -
 .../src/main/java/javax/faces/view/package.html    |    16 -
 .../main/java/javax/faces/webapp/AttributeTag.java |   169 -
 .../java/javax/faces/webapp/ConverterELTag.java    |   163 -
 .../main/java/javax/faces/webapp/ConverterTag.java |   289 -
 .../main/java/javax/faces/webapp/FacesServlet.java |   345 -
 .../src/main/java/javax/faces/webapp/FacetTag.java |   114 -
 .../webapp/PreJsf2ExceptionHandlerFactory.java     |   331 -
 .../javax/faces/webapp/UIComponentBodyTag.java     |    53 -
 .../faces/webapp/UIComponentClassicTagBase.java    |  1942 --
 .../java/javax/faces/webapp/UIComponentELTag.java  |   231 -
 .../java/javax/faces/webapp/UIComponentTag.java    |   297 -
 .../javax/faces/webapp/UIComponentTagBase.java     |   163 -
 .../java/javax/faces/webapp/ValidatorELTag.java    |   144 -
 .../main/java/javax/faces/webapp/ValidatorTag.java |   271 -
 .../src/main/java/javax/faces/webapp/package.html  |    13 -
 jsf-api/src/main/resources/jsf-api.css             |    78 -
 jsf-api/src/main/resources/jsf.js                  |  2247 --
 .../src/main/resources/managed-bean-overview.html  |    48 -
 .../resources/mojarra-jsf-api-probe-provider.xml   |    51 -
 jsf-api/src/main/resources/overview.html           |   181 -
 .../java/javax/faces/FactoryFinderTestCase.java    |   221 -
 .../java/javax/faces/FactoryFinderTestCase2.java   |   129 -
 .../src/test/java/javax/faces/Messages.properties  |    50 -
 jsf-api/src/test/java/javax/faces/TestUtil.java    |   207 -
 .../faces/component/NamingContainerTestCase.java   |   589 -
 .../faces/component/StateHolderSaverTestCase.java  |   132 -
 .../javax/faces/component/TestActionListener.java  |   127 -
 .../java/javax/faces/component/TestCommand.java    |    65 -
 .../faces/component/TestCommandActionListener.java |    85 -
 .../java/javax/faces/component/TestComponent.java  |   152 -
 .../faces/component/TestDataActionListener.java    |    92 -
 .../java/javax/faces/component/TestDataBean.java   |    70 -
 .../javax/faces/component/TestDataValidator.java   |   104 -
 .../component/TestDataValueChangeListener.java     |   100 -
 .../test/java/javax/faces/component/TestEvent.java |    69 -
 .../test/java/javax/faces/component/TestInput.java |    69 -
 .../javax/faces/component/TestInputValidator.java  |    88 -
 .../component/TestInputValueChangeListener.java    |    85 -
 .../java/javax/faces/component/TestListener.java   |   110 -
 .../javax/faces/component/TestNamingContainer.java |    88 -
 .../java/javax/faces/component/TestSelectMany.java |    54 -
 .../java/javax/faces/component/TestValidator.java  |   101 -
 .../faces/component/TestValueChangeListener.java   |   135 -
 .../TestValueChangeListenerWithBackReference.java  |   108 -
 .../javax/faces/component/UIColumnTestCase.java    |   147 -
 .../javax/faces/component/UICommandTestCase.java   |   586 -
 .../UIComponentBaseAttachedStateTestCase.java      |   323 -
 .../component/UIComponentBaseBehaviorTestCase.java |   278 -
 .../faces/component/UIComponentBaseTestCase.java   |  1872 --
 .../javax/faces/component/UIComponentTestCase.java |  2140 --
 .../javax/faces/component/UIDataHeaderBean.java    |    95 -
 .../java/javax/faces/component/UIDataTestCase.java |  2697 --
 .../javax/faces/component/UIDataTestCase_1.xml     |    96 -
 .../javax/faces/component/UIDataTestCase_2.xml     |    96 -
 .../javax/faces/component/UIDataTestCase_3.xml     |    96 -
 .../javax/faces/component/UIDataTestCase_4.xml     |    96 -
 .../javax/faces/component/UIDataTestCase_5.xml     |    68 -
 .../javax/faces/component/UIDataTestCase_6.xml     |    96 -
 .../javax/faces/component/UIDataTestCase_7.xml     |    96 -
 .../javax/faces/component/UIDataTestCase_8.xml     |    96 -
 .../faces/component/UIDataTestCase_9_withIds.xml   |   502 -
 .../component/UIDataTestCase_9_withoutIds.xml      |   502 -
 .../java/javax/faces/component/UIFormTestCase.java |   317 -
 .../javax/faces/component/UIGraphicTestCase.java   |   230 -
 .../UIInputAttachedObjectStateTestCase.java        |   173 -
 .../javax/faces/component/UIInputTestCase.java     |   682 -
 .../UIOutputAttachedObjectStateTestCase.java       |   153 -
 .../javax/faces/component/UIOutputTestCase.java    |   193 -
 .../javax/faces/component/UIPanelTestCase.java     |   148 -
 .../javax/faces/component/UIParameterTestCase.java |   241 -
 .../faces/component/UISelectBooleanTestCase.java   |   216 -
 .../javax/faces/component/UISelectItemSub.java     |    55 -
 .../faces/component/UISelectItemTestCase.java      |   349 -
 .../faces/component/UISelectItemsTestCase.java     |   191 -
 .../faces/component/UISelectManyTestCase.java      |   707 -
 .../javax/faces/component/UISelectOneTestCase.java |   461 -
 .../javax/faces/component/UIViewRootTestCase.java  |  1077 -
 .../faces/component/ValueHolderTestCaseBase.java   |   359 -
 .../test/java/javax/faces/event/PhaseIdTest.java   |    91 -
 .../mock/MockFacesContextFactoryExtender.java      |    51 -
 .../mock/MockFacesContextFactoryExtender2.java     |    51 -
 .../javax/faces/model/ArrayDataModelTestCase.java  |   100 -
 .../javax/faces/model/DataModelTestCaseBase.java   |   435 -
 .../javax/faces/model/ListDataModelTestCase.java   |   104 -
 .../javax/faces/model/ResultDataModelTestCase.java |   142 -
 .../faces/model/ResultSetDataModelTestCase.java    |   669 -
 .../javax/faces/model/ScalarDataModelTestCase.java |    98 -
 .../src/test/java/javax/faces/model/TestBean.java  |    48 -
 .../test/java/javax/faces/model/TestListener.java  |    88 -
 .../validator/DoubleRangeValidatorTestCase.java    |   156 -
 .../faces/validator/LengthValidatorTestCase.java   |   154 -
 .../validator/LongRangeValidatorTestCase.java      |   156 -
 .../faces/validator/RegexValidatorTestCase.java    |   104 -
 .../javax/faces/validator/ValidatorTestCase.java   |   179 -
 .../javax/faces/webapp/AttributeTagTestCase.java   |   268 -
 .../java/javax/faces/webapp/ConfigAttribute.java   |    61 -
 .../test/java/javax/faces/webapp/ConfigBase.java   |   144 -
 .../java/javax/faces/webapp/ConfigComponent.java   |    61 -
 .../java/javax/faces/webapp/ConfigConverter.java   |    61 -
 .../java/javax/faces/webapp/ConfigFeature.java     |   119 -
 .../javax/faces/webapp/ConfigFileTestCase.java     |   483 -
 .../java/javax/faces/webapp/ConfigProperty.java    |    61 -
 .../java/javax/faces/webapp/ConfigValidator.java   |    61 -
 .../javax/faces/webapp/ConverterTagTestCase.java   |   214 -
 .../java/javax/faces/webapp/FacetTagTestCase.java  |   186 -
 .../test/java/javax/faces/webapp/NamingTag.java    |    54 -
 .../java/javax/faces/webapp/TagTestCaseBase.java   |   191 -
 .../java/javax/faces/webapp/TestComponent.java     |   129 -
 .../test/java/javax/faces/webapp/TestInputTag.java |    87 -
 .../java/javax/faces/webapp/TestOutputTag.java     |    87 -
 .../src/test/java/javax/faces/webapp/TestTag.java  |   109 -
 .../javax/faces/webapp/UIComponentTagTestCase.java |   578 -
 .../javax/faces/webapp/ValidatorTagTestCase.java   |   214 -
 .../test/java/javax/faces/webapp/config-file-0.xml |    44 -
 .../test/java/javax/faces/webapp/config-file-1.xml |   318 -
 .../MethodBindingMethodExpressionAdapter.java      |   310 -
 .../MethodExpressionMethodBindingAdapter.java      |   324 -
 .../ValueBindingValueExpressionAdapter.java        |   288 -
 .../ValueExpressionValueBindingAdapter.java        |   316 -
 jsf-ri/DEBUGGING_CACTUS_TESTS.txt                  |    21 -
 jsf-ri/LICENSE-APACHE.txt                          |    42 -
 jsf-ri/LICENSE.TXT                                 |    96 -
 jsf-ri/THIRDPARTYLICENSEREADME.txt                 |   348 -
 jsf-ri/build-source.xml                            |   678 -
 jsf-ri/build-tests.xml                             |   524 -
 jsf-ri/build.xml                                   |   769 -
 jsf-ri/conf/basic/META-INF/faces-config.xml        |    42 -
 jsf-ri/conf/share/composite.taglib.xml             |  1710 -
 jsf-ri/conf/share/composite.tld                    |  1715 -
 jsf-ri/conf/share/error-include.xhtml              |   104 -
 jsf-ri/conf/share/facelet-dev-debug.xml            |   103 -
 jsf-ri/conf/share/facelet-dev-error.xml            |   107 -
 jsf-ri/conf/share/facelets_jsf_core.taglib.xml     |  2085 --
 jsf-ri/conf/share/facelets_jsf_core.tld            |  2474 --
 jsf-ri/conf/share/html_basic.taglib.xml            | 10465 -------
 .../javax.servlet.ServletContainerInitializer      |     1 -
 jsf-ri/conf/share/jsf_core.tld                     |  1643 -
 jsf-ri/conf/share/jstl-core.taglib.xml             |   292 -
 jsf-ri/conf/share/jstl-core.tld                    |   321 -
 jsf-ri/conf/share/jstl-fn.taglib.xml               |   173 -
 jsf-ri/conf/share/jstl-fn.tld                      |   241 -
 jsf-ri/conf/share/mojarra_ext.taglib.xml           |    64 -
 jsf-ri/conf/share/mojarra_ext.tld                  |   111 -
 .../share/tlddoc-resources/alltags-frame.html.xsl  |   103 -
 .../tlddoc-resources/alltags-noframe.html.xsl      |   103 -
 .../conf/share/tlddoc-resources/function.html.xsl  |   276 -
 .../conf/share/tlddoc-resources/help-doc.html.xsl  |   235 -
 jsf-ri/conf/share/tlddoc-resources/index.html.xsl  |    75 -
 .../share/tlddoc-resources/overview-frame.html.xsl |   114 -
 .../tlddoc-resources/overview-summary.html.xsl     |   208 -
 jsf-ri/conf/share/tlddoc-resources/stylesheet.css  |   461 -
 jsf-ri/conf/share/tlddoc-resources/tag.html.xsl    |   456 -
 .../conf/share/tlddoc-resources/tld-frame.html.xsl |   188 -
 .../share/tlddoc-resources/tld-summary.html.xsl    |   445 -
 .../conf/share/tlddoc-resources/tld1_1-tld1_2.xsl  |   153 -
 .../conf/share/tlddoc-resources/tld1_2-tld2_0.xsl  |   290 -
 .../conf/share/tlddoc-resources/tld2_0-tld2_1.xsl  |    70 -
 .../conf/share/tlddoc-resources/tld2_1-tld2_1.xsl  |    79 -
 jsf-ri/conf/share/ui.taglib.xml                    |  1026 -
 jsf-ri/conf/share/ui.tld                           |  1043 -
 jsf-ri/conf/share/xhtml/default.dtd                |   298 -
 jsf-ri/conf/test/cactus.properties                 |    15 -
 jsf-ri/conf/test/web.xml                           |   153 -
 jsf-ri/conf/xslt/facelets1_0-2_0toSchema.xsl       |    79 -
 jsf-ri/conf/xslt/jsf1_0-1_1toSchema.xsl            |    79 -
 jsf-ri/conf/xslt/merge-config.xsl                  |    53 -
 jsf-ri/conf/xslt/prune-tool-data.xsl               |    50 -
 jsf-ri/impl.iml                                    |  1141 -
 jsf-ri/maven.xml                                   |    92 -
 jsf-ri/mojarra-jsf-impl.bnd                        |    60 -
 jsf-ri/project.properties                          |     2 -
 jsf-ri/project.xml                                 |    71 -
 jsf-ri/resources/empty-faces-config.xml            |    43 -
 jsf-ri/resources/jsf-ri-config.xml                 |   300 -
 jsf-ri/resources/mojarra.js                        |   191 -
 .../src/main/java/com/sun/faces/RIConstants.java   |   109 -
 .../sun/faces/application/ActionListenerImpl.java  |   136 -
 .../faces/application/ApplicationAssociate.java    |   689 -
 .../faces/application/ApplicationFactoryImpl.java  |   132 -
 .../com/sun/faces/application/ApplicationImpl.java |  2412 --
 .../application/ApplicationResourceBundle.java     |   193 -
 .../faces/application/ApplicationStateInfo.java    |    91 -
 .../application/ByteArrayWebOutputStream.java      |   279 -
 .../application/ConverterPropertyEditorBase.java   |   129 -
 .../ConverterPropertyEditorFactory.java            |   648 -
 .../ConverterPropertyEditorFor_XXXX.java           |    56 -
 .../application/InjectionApplicationFactory.java   |   157 -
 .../sun/faces/application/NamedEventManager.java   |   112 -
 .../faces/application/NavigationHandlerImpl.java   |   800 -
 .../faces/application/ProjectStageJndiFactory.java |    92 -
 .../faces/application/PropertyEditorHelper.java    |   165 -
 .../sun/faces/application/StateManagerImpl.java    |   435 -
 .../com/sun/faces/application/ViewHandlerImpl.java |  1017 -
 .../application/ViewHandlerResponseWrapper.java    |   201 -
 .../com/sun/faces/application/WebPrintWriter.java  |   130 -
 .../faces/application/WebappLifecycleListener.java |   419 -
 .../application/annotation/AnnotationManager.java  |   452 -
 .../annotation/BehaviorConfigHandler.java          |   109 -
 .../annotation/ComponentConfigHandler.java         |   109 -
 .../annotation/ConfigAnnotationHandler.java        |    81 -
 .../annotation/ConverterConfigHandler.java         |   120 -
 .../application/annotation/ListenerForHandler.java |   109 -
 .../application/annotation/ListenerForScanner.java |    81 -
 .../annotation/ManagedBeanConfigHandler.java       |   309 -
 .../annotation/NamedEventConfigHandler.java        |   125 -
 .../annotation/RenderKitConfigHandler.java         |   152 -
 .../annotation/ResourceDependencyHandler.java      |   239 -
 .../annotation/ResourceDependencyScanner.java      |    81 -
 .../annotation/RuntimeAnnotationHandler.java       |    66 -
 .../sun/faces/application/annotation/Scanner.java  |    68 -
 .../annotation/ValidatorConfigHandler.java         |   130 -
 .../resource/ClasspathResourceHelper.java          |   220 -
 .../faces/application/resource/LibraryInfo.java    |   175 -
 .../faces/application/resource/ResourceCache.java  |   241 -
 .../application/resource/ResourceHandlerImpl.java  |   552 -
 .../faces/application/resource/ResourceHelper.java |   791 -
 .../faces/application/resource/ResourceImpl.java   |   429 -
 .../faces/application/resource/ResourceInfo.java   |   392 -
 .../application/resource/ResourceManager.java      |   536 -
 .../faces/application/resource/VersionInfo.java    |   132 -
 .../application/resource/WebappResourceHelper.java |   253 -
 .../view/FaceletViewHandlingStrategy.java          |  1684 -
 .../application/view/JspViewHandlingStrategy.java  |   451 -
 .../faces/application/view/MultiViewHandler.java   |   742 -
 .../view/StateManagementStrategyImpl.java          |   376 -
 .../view/ViewDeclarationLanguageFactoryImpl.java   |    83 -
 .../application/view/ViewHandlingStrategy.java     |   208 -
 .../view/ViewHandlingStrategyManager.java          |   125 -
 .../ViewHandlingStrategyNotFoundException.java     |    62 -
 .../faces/application/view/ViewMetadataImpl.java   |   116 -
 .../application/view/WriteBehindStateWriter.java   |   321 -
 .../component/ComponentResourceContainer.java      |    54 -
 .../component/CompositeComponentStackManager.java  |   478 -
 .../faces/component/behavior/AjaxBehaviors.java    |   219 -
 .../component/validator/ComponentValidators.java   |   347 -
 .../faces/component/visit/FullVisitContext.java    |   155 -
 .../faces/component/visit/PartialVisitContext.java |   450 -
 .../component/visit/VisitContextFactoryImpl.java   |    75 -
 .../com/sun/faces/config/AnnotationScanner.java    |   908 -
 .../java/com/sun/faces/config/ConfigManager.java   |  1095 -
 .../sun/faces/config/ConfigurationException.java   |    67 -
 .../com/sun/faces/config/ConfigureListener.java    |  1090 -
 .../main/java/com/sun/faces/config/DbfFactory.java |   573 -
 .../java/com/sun/faces/config/DocumentInfo.java    |    80 -
 .../sun/faces/config/DocumentOrderingWrapper.java  |   776 -
 .../java/com/sun/faces/config/FacesConfigInfo.java |   262 -
 .../com/sun/faces/config/FacesInitializer.java     |   160 -
 .../com/sun/faces/config/InitFacesContext.java     |   445 -
 .../main/java/com/sun/faces/config/Verifier.java   |   212 -
 .../com/sun/faces/config/WebConfiguration.java     |  1391 -
 .../BaseWebConfigResourceProvider.java             |   127 -
 .../MetaInfFaceletTaglibraryConfigProvider.java    |   144 -
 .../MetaInfFacesConfigResourceProvider.java        |   171 -
 .../MojarraFacesConfigResourceProvider.java        |    76 -
 .../WebFaceletTaglibResourceProvider.java          |    72 -
 .../WebFacesConfigResourceProvider.java            |   108 -
 .../config/processor/AbstractConfigProcessor.java  |   370 -
 .../processor/ApplicationConfigProcessor.java      |   847 -
 .../config/processor/BehaviorConfigProcessor.java  |   160 -
 .../config/processor/ComponentConfigProcessor.java |   160 -
 .../faces/config/processor/ConfigProcessor.java    |    86 -
 .../config/processor/ConverterConfigProcessor.java |   189 -
 .../processor/FaceletTaglibConfigProcessor.java    |   667 -
 .../config/processor/FactoryConfigProcessor.java   |   342 -
 .../config/processor/LifecycleConfigProcessor.java |   153 -
 .../processor/ManagedBeanConfigProcessor.java      |   528 -
 .../processor/NavigationConfigProcessor.java       |   376 -
 .../config/processor/RenderKitConfigProcessor.java |   372 -
 .../config/processor/ValidatorConfigProcessor.java |   193 -
 .../faces/context/AjaxExceptionHandlerImpl.java    |   252 -
 .../java/com/sun/faces/context/ApplicationMap.java |   155 -
 .../java/com/sun/faces/context/BaseContextMap.java |   356 -
 .../faces/context/ExceptionHandlerFactoryImpl.java |    85 -
 .../sun/faces/context/ExceptionHandlerImpl.java    |   310 -
 .../faces/context/ExternalContextFactoryImpl.java  |    84 -
 .../com/sun/faces/context/ExternalContextImpl.java |   976 -
 .../sun/faces/context/FacesContextFactoryImpl.java |   102 -
 .../com/sun/faces/context/FacesContextImpl.java    |   719 -
 .../com/sun/faces/context/InitParameterMap.java    |   136 -
 .../context/InjectionFacesContextFactory.java      |   185 -
 .../context/PartialViewContextFactoryImpl.java     |    63 -
 .../sun/faces/context/PartialViewContextImpl.java  |   551 -
 .../com/sun/faces/context/RequestCookieMap.java    |   180 -
 .../com/sun/faces/context/RequestHeaderMap.java    |   136 -
 .../sun/faces/context/RequestHeaderValuesMap.java  |   140 -
 .../java/com/sun/faces/context/RequestMap.java     |   154 -
 .../com/sun/faces/context/RequestParameterMap.java |   135 -
 .../faces/context/RequestParameterValuesMap.java   |   131 -
 .../java/com/sun/faces/context/SessionMap.java     |   228 -
 .../java/com/sun/faces/context/StateContext.java   |   338 -
 .../sun/faces/context/StringArrayValuesMap.java    |   130 -
 .../java/com/sun/faces/context/UrlBuilder.java     |   362 -
 .../java/com/sun/faces/context/flash/ELFlash.java  |  1461 -
 .../sun/faces/context/flash/FlashELResolver.java   |   397 -
 .../sun/faces/el/ChainAwareVariableResolver.java   |   108 -
 .../el/CompositeComponentAttributesELResolver.java |   422 -
 .../sun/faces/el/DummyPropertyResolverImpl.java    |   111 -
 .../main/java/com/sun/faces/el/ELConstants.java    |    78 -
 .../main/java/com/sun/faces/el/ELContextImpl.java  |   135 -
 .../com/sun/faces/el/ELContextListenerImpl.java    |    79 -
 jsf-ri/src/main/java/com/sun/faces/el/ELUtils.java |   832 -
 .../com/sun/faces/el/FacesCompositeELResolver.java |   189 -
 .../faces/el/FacesResourceBundleELResolver.java    |   211 -
 .../com/sun/faces/el/ImplicitObjectELResolver.java |   273 -
 .../faces/el/ImplicitObjectELResolverForJsp.java   |   198 -
 .../com/sun/faces/el/ManagedBeanELResolver.java    |   200 -
 .../sun/faces/el/PropertyResolverChainWrapper.java |   215 -
 .../com/sun/faces/el/PropertyResolverImpl.java     |   311 -
 .../java/com/sun/faces/el/ResourceELResolver.java  |   219 -
 .../sun/faces/el/ScopedAttributeELResolver.java    |   257 -
 .../sun/faces/el/VariableResolverChainWrapper.java |   167 -
 .../com/sun/faces/el/VariableResolverImpl.java     |    97 -
 .../java/com/sun/faces/ext/component/UIFocus.java  |    54 -
 .../sun/faces/ext/render/FocusHTMLRenderer.java    |    73 -
 .../faces/ext/taglib/CreditCardValidatorTag.java   |    59 -
 .../java/com/sun/faces/ext/taglib/FocusTag.java    |    96 -
 .../faces/ext/validator/CreditCardValidator.java   |   117 -
 .../faces/ext/validator/MojarraMessageFactory.java |   354 -
 .../faces/ext/validator/mojarraMessages.properties |    16 -
 .../ext/validator/mojarraMessages_en.properties    |    10 -
 .../main/java/com/sun/faces/facelets/Facelet.java  |    91 -
 .../java/com/sun/faces/facelets/FaceletCache.java  |   113 -
 .../sun/faces/facelets/FaceletContextImplBase.java |    84 -
 .../com/sun/faces/facelets/FaceletFactory.java     |   125 -
 .../java/com/sun/faces/facelets/StateWriter.java   |   176 -
 .../com/sun/faces/facelets/TemplateClient.java     |   100 -
 .../faces/facelets/compiler/AbstractUIHandler.java |    73 -
 .../facelets/compiler/AttributeInstruction.java    |   109 -
 .../facelets/compiler/CommentInstruction.java      |    86 -
 .../facelets/compiler/CompilationManager.java      |   505 -
 .../compiler/CompilationMessageHolder.java         |    68 -
 .../compiler/CompilationMessageHolderImpl.java     |    95 -
 .../faces/facelets/compiler/CompilationUnit.java   |   122 -
 .../com/sun/faces/facelets/compiler/Compiler.java  |   235 -
 .../CompilerPackageCompilationMessageHolder.java   |    44 -
 .../faces/facelets/compiler/EncodingHandler.java   |    91 -
 .../facelets/compiler/EndElementInstruction.java   |   120 -
 .../facelets/compiler/ImplementationUnit.java      |    85 -
 .../sun/faces/facelets/compiler/Instruction.java   |    68 -
 .../sun/faces/facelets/compiler/InterfaceUnit.java |    68 -
 .../compiler/LiteralAttributeInstruction.java      |    86 -
 .../compiler/LiteralCommentInstruction.java        |    82 -
 .../facelets/compiler/LiteralTextInstruction.java  |    81 -
 .../facelets/compiler/LiteralXMLInstruction.java   |    90 -
 .../faces/facelets/compiler/NamespaceHandler.java  |   116 -
 .../faces/facelets/compiler/NamespaceManager.java  |   131 -
 .../sun/faces/facelets/compiler/NamespaceUnit.java |    91 -
 .../sun/faces/facelets/compiler/RemoveUnit.java    |    77 -
 .../sun/faces/facelets/compiler/SAXCompiler.java   |   450 -
 .../facelets/compiler/StartElementInstruction.java |    82 -
 .../com/sun/faces/facelets/compiler/TagUnit.java   |   135 -
 .../faces/facelets/compiler/TextInstruction.java   |   104 -
 .../com/sun/faces/facelets/compiler/TextUnit.java  |   338 -
 .../faces/facelets/compiler/TrimmedTagUnit.java    |    67 -
 .../facelets/compiler/UIInstructionHandler.java    |   199 -
 .../faces/facelets/compiler/UIInstructions.java    |    88 -
 .../com/sun/faces/facelets/compiler/UILeaf.java    |   228 -
 .../sun/faces/facelets/compiler/UILiteralText.java |    80 -
 .../facelets/compiler/UILiteralTextHandler.java    |    97 -
 .../com/sun/faces/facelets/compiler/UIText.java    |   109 -
 .../sun/faces/facelets/compiler/UITextHandler.java |   127 -
 .../faces/facelets/compiler/XMLInstruction.java    |    89 -
 .../faces/facelets/component/RepeatRenderer.java   |   118 -
 .../com/sun/faces/facelets/component/UIRepeat.java |   965 -
 .../faces/facelets/el/CompositeFunctionMapper.java |    93 -
 .../faces/facelets/el/CompositeVariableMapper.java |    99 -
 .../el/ContextualCompositeMethodExpression.java    |   262 -
 .../el/ContextualCompositeValueExpression.java     |   278 -
 .../faces/facelets/el/DefaultFunctionMapper.java   |   264 -
 .../faces/facelets/el/DefaultVariableMapper.java   |   100 -
 .../java/com/sun/faces/facelets/el/ELText.java     |   425 -
 .../com/sun/faces/facelets/el/LegacyELContext.java |   271 -
 .../sun/faces/facelets/el/LegacyMethodBinding.java |   120 -
 .../sun/faces/facelets/el/LegacyValueBinding.java  |   152 -
 .../sun/faces/facelets/el/TagMethodExpression.java |   162 -
 .../sun/faces/facelets/el/TagValueExpression.java  |   194 -
 .../faces/facelets/el/VariableMapperWrapper.java   |   122 -
 .../sun/faces/facelets/impl/DefaultFacelet.java    |   411 -
 .../faces/facelets/impl/DefaultFaceletCache.java   |   252 -
 .../faces/facelets/impl/DefaultFaceletContext.java |   420 -
 .../faces/facelets/impl/DefaultFaceletFactory.java |   354 -
 .../facelets/impl/DefaultResourceResolver.java     |    85 -
 .../java/com/sun/faces/facelets/impl/IdMapper.java |   128 -
 .../sun/faces/facelets/tag/AbstractTagLibrary.java |   728 -
 .../faces/facelets/tag/BeanPropertyTagRule.java    |   143 -
 .../faces/facelets/tag/CompositeTagDecorator.java  |    97 -
 .../faces/facelets/tag/CompositeTagLibrary.java    |   216 -
 .../sun/faces/facelets/tag/IterationStatus.java    |   183 -
 .../sun/faces/facelets/tag/MetaRulesetImpl.java    |   231 -
 .../sun/faces/facelets/tag/MetaTagHandlerImpl.java |    87 -
 .../com/sun/faces/facelets/tag/MetadataImpl.java   |    81 -
 .../sun/faces/facelets/tag/MetadataTargetImpl.java |   123 -
 .../com/sun/faces/facelets/tag/MethodRule.java     |   168 -
 .../sun/faces/facelets/tag/TagAttributeImpl.java   |   486 -
 .../sun/faces/facelets/tag/TagAttributesImpl.java  |   204 -
 .../sun/faces/facelets/tag/TagHandlerFactory.java  |    82 -
 .../com/sun/faces/facelets/tag/TagHandlerImpl.java |    97 -
 .../com/sun/faces/facelets/tag/TagLibrary.java     |   125 -
 .../com/sun/faces/facelets/tag/TagLibraryImpl.java |   126 -
 .../com/sun/faces/facelets/tag/UserTagHandler.java |   169 -
 .../ActionSource2AttachedObjectTargetHandler.java  |    72 -
 .../ActionSource2AttachedObjectTargetImpl.java     |    62 -
 .../tag/composite/AttachedObjectTargetHandler.java |   126 -
 .../tag/composite/AttachedObjectTargetImpl.java    |   132 -
 .../facelets/tag/composite/AttributeHandler.java   |   149 -
 .../BehaviorHolderAttachedObjectTargetHandler.java |    72 -
 .../BehaviorHolderAttachedObjectTargetImpl.java    |   106 -
 .../tag/composite/BehaviorHolderWrapper.java       |   447 -
 .../tag/composite/CompositeComponentBeanInfo.java  |   117 -
 .../facelets/tag/composite/CompositeLibrary.java   |    93 -
 .../tag/composite/DeclareFacetHandler.java         |   146 -
 ...ableValueHolderAttachedObjectTargetHandler.java |    72 -
 ...ditableValueHolderAttachedObjectTargetImpl.java |    62 -
 .../facelets/tag/composite/ExtensionHandler.java   |    77 -
 .../tag/composite/ImplementationHandler.java       |    81 -
 .../tag/composite/InsertChildrenHandler.java       |   204 -
 .../facelets/tag/composite/InsertFacetHandler.java |   219 -
 .../facelets/tag/composite/InterfaceHandler.java   |   285 -
 .../facelets/tag/composite/PropertyHandler.java    |    71 -
 .../tag/composite/PropertyHandlerManager.java      |   326 -
 .../facelets/tag/composite/RelocateListener.java   |   113 -
 .../facelets/tag/composite/RenderFacetHandler.java |   136 -
 .../tag/composite/TypedPropertyHandler.java        |    63 -
 .../ValueHolderAttachedObjectTargetHandler.java    |    71 -
 .../ValueHolderAttachedObjectTargetImpl.java       |    62 -
 .../faces/facelets/tag/jsf/ActionSourceRule.java   |   170 -
 .../faces/facelets/tag/jsf/AttachedBehaviors.java  |    77 -
 .../tag/jsf/BehaviorTagHandlerDelegateImpl.java    |   194 -
 .../sun/faces/facelets/tag/jsf/ComponentRule.java  |   169 -
 .../faces/facelets/tag/jsf/ComponentSupport.java   |   458 -
 .../tag/jsf/ComponentTagHandlerDelegateImpl.java   |   507 -
 .../facelets/tag/jsf/CompositeComponentImpl.java   |    70 -
 .../tag/jsf/CompositeComponentTagHandler.java      |   613 -
 .../tag/jsf/CompositeComponentTagLibrary.java      |   203 -
 .../tag/jsf/ConverterTagHandlerDelegateImpl.java   |   153 -
 .../facelets/tag/jsf/EditableValueHolderRule.java  |   172 -
 .../faces/facelets/tag/jsf/RenderPropertyRule.java |   115 -
 .../tag/jsf/TagHandlerDelegateFactoryImpl.java     |    75 -
 .../tag/jsf/ValidatorTagHandlerDelegateImpl.java   |   239 -
 .../faces/facelets/tag/jsf/ValueHolderRule.java    |   171 -
 .../tag/jsf/core/ActionListenerHandler.java        |   218 -
 .../faces/facelets/tag/jsf/core/AjaxHandler.java   |   450 -
 .../facelets/tag/jsf/core/AttributeHandler.java    |   127 -
 .../tag/jsf/core/ConvertDateTimeHandler.java       |   163 -
 .../tag/jsf/core/ConvertDelegateHandler.java       |    98 -
 .../tag/jsf/core/ConvertNumberHandler.java         |   114 -
 .../faces/facelets/tag/jsf/core/CoreLibrary.java   |   141 -
 .../faces/facelets/tag/jsf/core/EventHandler.java  |   164 -
 .../faces/facelets/tag/jsf/core/FacetHandler.java  |   112 -
 .../facelets/tag/jsf/core/LoadBundleHandler.java   |   237 -
 .../facelets/tag/jsf/core/MetadataHandler.java     |   115 -
 .../tag/jsf/core/PhaseListenerHandler.java         |   226 -
 .../jsf/core/SetPropertyActionListenerHandler.java |   208 -
 .../tag/jsf/core/ValidateDelegateHandler.java      |    92 -
 .../tag/jsf/core/ValueChangeListenerHandler.java   |   205 -
 .../facelets/tag/jsf/core/VerbatimHandler.java     |    95 -
 .../faces/facelets/tag/jsf/core/ViewHandler.java   |   159 -
 .../facelets/tag/jsf/html/AbstractHtmlLibrary.java |    77 -
 .../tag/jsf/html/ComponentResourceDelegate.java    |   170 -
 .../tag/jsf/html/HtmlComponentHandler.java         |    78 -
 .../faces/facelets/tag/jsf/html/HtmlDecorator.java |   141 -
 .../faces/facelets/tag/jsf/html/HtmlLibrary.java   |   167 -
 .../tag/jsf/html/ScriptResourceDelegate.java       |    73 -
 .../tag/jsf/html/ScriptResourceHandler.java        |    57 -
 .../tag/jsf/html/StylesheetResourceDelegate.java   |    71 -
 .../tag/jsf/html/StylesheetResourceHandler.java    |    57 -
 .../sun/faces/facelets/tag/jsf/html/package.html   |     9 -
 .../faces/facelets/tag/jstl/core/CatchHandler.java |    91 -
 .../facelets/tag/jstl/core/ChooseHandler.java      |   110 -
 .../tag/jstl/core/ChooseOtherwiseHandler.java      |    78 -
 .../facelets/tag/jstl/core/ChooseWhenHandler.java  |    86 -
 .../facelets/tag/jstl/core/ForEachHandler.java     |   315 -
 .../faces/facelets/tag/jstl/core/IfHandler.java    |    97 -
 .../tag/jstl/core/IndexedValueExpression.java      |   184 -
 .../tag/jstl/core/IteratedValueExpression.java     |   161 -
 .../tag/jstl/core/IterationStatusExpression.java   |   169 -
 .../facelets/tag/jstl/core/JstlCoreLibrary.java    |    87 -
 .../tag/jstl/core/JstlIterationStatus.java         |    81 -
 .../tag/jstl/core/MappedValueExpression.java       |   212 -
 .../faces/facelets/tag/jstl/core/SetHandler.java   |   198 -
 .../faces/facelets/tag/jstl/fn/JstlFunction.java   |   328 -
 .../sun/faces/facelets/tag/ui/ComponentRef.java    |    72 -
 .../faces/facelets/tag/ui/ComponentRefHandler.java |    68 -
 .../faces/facelets/tag/ui/CompositionHandler.java  |   185 -
 .../sun/faces/facelets/tag/ui/DecorateHandler.java |   167 -
 .../sun/faces/facelets/tag/ui/DefineHandler.java   |   105 -
 .../sun/faces/facelets/tag/ui/IncludeHandler.java  |   114 -
 .../sun/faces/facelets/tag/ui/InsertHandler.java   |   120 -
 .../sun/faces/facelets/tag/ui/ParamHandler.java    |    98 -
 .../sun/faces/facelets/tag/ui/RepeatHandler.java   |   122 -
 .../tag/ui/SchemaCompliantRemoveHandler.java       |    58 -
 .../com/sun/faces/facelets/tag/ui/UIDebug.java     |   194 -
 .../com/sun/faces/facelets/tag/ui/UILibrary.java   |    92 -
 .../com/sun/faces/facelets/tag/ui/package.html     |     9 -
 .../com/sun/faces/facelets/util/Classpath.java     |   286 -
 .../java/com/sun/faces/facelets/util/DevTools.java |   444 -
 .../com/sun/faces/facelets/util/FastWriter.java    |   128 -
 .../sun/faces/facelets/util/FunctionLibrary.java   |   112 -
 .../java/com/sun/faces/facelets/util/Path.java     |   128 -
 .../sun/faces/facelets/util/ReflectionUtil.java    |   308 -
 .../java/com/sun/faces/facelets/util/Resource.java |   189 -
 .../faces/facelets/util/ResourceResolverProxy.java |    80 -
 .../java/com/sun/faces/io/Base64InputStream.java   |   353 -
 .../com/sun/faces/io/Base64OutputStreamWriter.java |   250 -
 .../java/com/sun/faces/io/FastStringWriter.java    |   154 -
 .../faces/lifecycle/ApplyRequestValuesPhase.java   |   100 -
 .../lifecycle/ELResolverInitPhaseListener.java     |   186 -
 .../faces/lifecycle/InvokeApplicationPhase.java    |   104 -
 .../sun/faces/lifecycle/LifecycleFactoryImpl.java  |   149 -
 .../com/sun/faces/lifecycle/LifecycleImpl.java     |   199 -
 .../main/java/com/sun/faces/lifecycle/Phase.java   |   263 -
 .../faces/lifecycle/ProcessValidationsPhase.java   |    98 -
 .../sun/faces/lifecycle/RenderResponsePhase.java   |   144 -
 .../com/sun/faces/lifecycle/RestoreViewPhase.java  |   351 -
 .../faces/lifecycle/UpdateModelValuesPhase.java    |   105 -
 .../java/com/sun/faces/mgbean/BeanBuilder.java     |   617 -
 .../java/com/sun/faces/mgbean/BeanManager.java     |   782 -
 .../main/java/com/sun/faces/mgbean/ErrorBean.java  |    81 -
 .../com/sun/faces/mgbean/ManagedBeanBuilder.java   |   626 -
 .../faces/mgbean/ManagedBeanCreationException.java |    70 -
 .../java/com/sun/faces/mgbean/ManagedBeanInfo.java |   305 -
 .../mgbean/ManagedBeanPreProcessingException.java  |   108 -
 .../sun/faces/mgbean/ManagedListBeanBuilder.java   |    82 -
 .../sun/faces/mgbean/ManagedMapBeanBuilder.java    |    83 -
 .../renderkit/ApplicationObjectInputStream.java    |   104 -
 .../java/com/sun/faces/renderkit/Attribute.java    |    90 -
 .../com/sun/faces/renderkit/ByteArrayGuard.java    |   221 -
 .../sun/faces/renderkit/ClientSideStateHelper.java |   568 -
 .../sun/faces/renderkit/RenderKitFactoryImpl.java  |   117 -
 .../com/sun/faces/renderkit/RenderKitImpl.java     |   425 -
 .../com/sun/faces/renderkit/RenderKitUtils.java    |  1781 --
 .../faces/renderkit/ResponseStateManagerImpl.java  |   153 -
 .../sun/faces/renderkit/SelectItemsIterator.java   |   647 -
 .../sun/faces/renderkit/ServerSideStateHelper.java |   440 -
 .../java/com/sun/faces/renderkit/StateHelper.java  |   259 -
 .../renderkit/html_basic/AjaxBehaviorRenderer.java |   286 -
 .../renderkit/html_basic/BaseTableRenderer.java    |   518 -
 .../faces/renderkit/html_basic/BodyRenderer.java   |   103 -
 .../faces/renderkit/html_basic/ButtonRenderer.java |   269 -
 .../renderkit/html_basic/CheckboxRenderer.java     |   172 -
 .../renderkit/html_basic/CommandLinkRenderer.java  |   272 -
 .../html_basic/CompositeFacetRenderer.java         |   100 -
 .../renderkit/html_basic/CompositeRenderer.java    |    86 -
 .../faces/renderkit/html_basic/FormRenderer.java   |   237 -
 .../faces/renderkit/html_basic/GridRenderer.java   |   262 -
 .../faces/renderkit/html_basic/GroupRenderer.java  |   154 -
 .../faces/renderkit/html_basic/HeadRenderer.java   |   106 -
 .../faces/renderkit/html_basic/HiddenRenderer.java |    94 -
 .../html_basic/HtmlBasicInputRenderer.java         |   246 -
 .../renderkit/html_basic/HtmlBasicRenderer.java    |   964 -
 .../renderkit/html_basic/HtmlResponseWriter.java   |  1225 -
 .../faces/renderkit/html_basic/ImageRenderer.java  |   124 -
 .../faces/renderkit/html_basic/LabelRenderer.java  |   200 -
 .../faces/renderkit/html_basic/LinkRenderer.java   |   130 -
 .../renderkit/html_basic/ListboxRenderer.java      |    71 -
 .../faces/renderkit/html_basic/MenuRenderer.java   |  1035 -
 .../renderkit/html_basic/MessageRenderer.java      |   286 -
 .../renderkit/html_basic/MessagesRenderer.java     |   266 -
 .../html_basic/OutcomeTargetButtonRenderer.java    |   159 -
 .../html_basic/OutcomeTargetLinkRenderer.java      |   205 -
 .../html_basic/OutcomeTargetRenderer.java          |   207 -
 .../renderkit/html_basic/OutputLinkRenderer.java   |   256 -
 .../html_basic/OutputMessageRenderer.java          |   179 -
 .../faces/renderkit/html_basic/RadioRenderer.java  |   225 -
 .../faces/renderkit/html_basic/ScriptRenderer.java |   121 -
 .../html_basic/ScriptStyleBaseRenderer.java        |   223 -
 .../faces/renderkit/html_basic/SecretRenderer.java |   133 -
 .../html_basic/SelectManyCheckboxListRenderer.java |   427 -
 .../renderkit/html_basic/StylesheetRenderer.java   |   106 -
 .../faces/renderkit/html_basic/TableRenderer.java  |   415 -
 .../faces/renderkit/html_basic/TextRenderer.java   |   209 -
 .../renderkit/html_basic/TextareaRenderer.java     |   115 -
 .../sun/faces/scripting/GroovySupportFilter.java   |    83 -
 .../com/sun/faces/scripting/ScriptManager.java     |    46 -
 .../scripting/groovy/ActionListenerProxy.java      |    96 -
 .../faces/scripting/groovy/ELResolverProxy.java    |   105 -
 .../sun/faces/scripting/groovy/GroovyHelper.java   |   117 -
 .../scripting/groovy/GroovyHelperFactory.java      |    79 -
 .../faces/scripting/groovy/GroovyHelperImpl.java   |   228 -
 .../scripting/groovy/GroovyScriptManager.java      |   170 -
 .../scripting/groovy/NavigationHandlerProxy.java   |    92 -
 .../faces/scripting/groovy/PhaseListenerProxy.java |    92 -
 .../sun/faces/scripting/groovy/RendererProxy.java  |   122 -
 .../faces/scripting/groovy/ViewHandlerProxy.java   |   169 -
 .../java/com/sun/faces/spi/AnnotationProvider.java |   128 -
 .../sun/faces/spi/AnnotationProviderFactory.java   |    97 -
 .../faces/spi/ConfigurationResourceProvider.java   |    62 -
 .../spi/ConfigurationResourceProviderFactory.java  |   110 -
 .../faces/spi/DiscoverableInjectionProvider.java   |    80 -
 .../faces/spi/FaceletConfigResourceProvider.java   |    73 -
 .../sun/faces/spi/FacesConfigResourceProvider.java |    75 -
 .../java/com/sun/faces/spi/InjectionProvider.java  |    90 -
 .../sun/faces/spi/InjectionProviderException.java  |    65 -
 .../sun/faces/spi/InjectionProviderFactory.java    |   449 -
 .../com/sun/faces/spi/SerializationProvider.java   |    92 -
 .../faces/spi/SerializationProviderFactory.java    |   215 -
 .../java/com/sun/faces/spi/ServiceFactory.java     |   173 -
 .../java/com/sun/faces/taglib/FacesValidator.java  |   364 -
 .../main/java/com/sun/faces/taglib/TagParser.java  |    78 -
 .../java/com/sun/faces/taglib/ValidatorInfo.java   |   154 -
 .../com/sun/faces/taglib/html_basic/ColumnTag.java |   166 -
 .../taglib/html_basic/CommandTagParserImpl.java    |   167 -
 .../taglib/html_basic/HtmlBasicValidator.java      |   154 -
 .../taglib/jsf_core/AbstractConverterTag.java      |   170 -
 .../taglib/jsf_core/AbstractValidatorTag.java      |   173 -
 .../faces/taglib/jsf_core/ActionListenerTag.java   |   248 -
 .../sun/faces/taglib/jsf_core/AttributeTag.java    |   180 -
 .../faces/taglib/jsf_core/ConvertDateTimeTag.java  |   315 -
 .../faces/taglib/jsf_core/ConvertNumberTag.java    |   427 -
 .../sun/faces/taglib/jsf_core/ConverterTag.java    |   182 -
 .../faces/taglib/jsf_core/CoreTagParserImpl.java   |   228 -
 .../sun/faces/taglib/jsf_core/CoreValidator.java   |   199 -
 .../sun/faces/taglib/jsf_core/IdTagParserImpl.java |   222 -
 .../sun/faces/taglib/jsf_core/LoadBundleTag.java   |   465 -
 .../faces/taglib/jsf_core/MaxMinValidatorTag.java  |    62 -
 .../sun/faces/taglib/jsf_core/ParameterTag.java    |   125 -
 .../faces/taglib/jsf_core/PhaseListenerTag.java    |   275 -
 .../faces/taglib/jsf_core/RegexValidatorTag.java   |    94 -
 .../sun/faces/taglib/jsf_core/SelectItemTag.java   |   221 -
 .../sun/faces/taglib/jsf_core/SelectItemsTag.java  |   154 -
 .../jsf_core/SetPropertyActionListenerImpl.java    |   133 -
 .../jsf_core/SetPropertyActionListenerTag.java     |   182 -
 .../com/sun/faces/taglib/jsf_core/SubviewTag.java  |   222 -
 .../taglib/jsf_core/ValidateDoubleRangeTag.java    |   170 -
 .../faces/taglib/jsf_core/ValidateLengthTag.java   |   164 -
 .../taglib/jsf_core/ValidateLongRangeTag.java      |   165 -
 .../sun/faces/taglib/jsf_core/ValidatorTag.java    |   180 -
 .../taglib/jsf_core/ValueChangeListenerTag.java    |   251 -
 .../com/sun/faces/taglib/jsf_core/VerbatimTag.java |   126 -
 .../com/sun/faces/taglib/jsf_core/ViewTag.java     |   418 -
 jsf-ri/src/main/java/com/sun/faces/util/Cache.java |   177 -
 .../java/com/sun/faces/util/CollectionsUtils.java  |    83 -
 .../java/com/sun/faces/util/ComponentStruct.java   |    87 -
 .../java/com/sun/faces/util/ConcurrentCache.java   |   105 -
 .../main/java/com/sun/faces/util/DebugUtil.java    |   377 -
 .../sun/faces/util/ExpiringConcurrentCache.java    |   189 -
 .../main/java/com/sun/faces/util/FacesLogger.java  |    94 -
 .../main/java/com/sun/faces/util/HtmlUtils.java    |  1236 -
 .../src/main/java/com/sun/faces/util/LRUMap.java   |    65 -
 .../main/java/com/sun/faces/util/MessageUtils.java |   396 -
 .../com/sun/faces/util/MojarraThreadFactory.java   |    81 -
 .../sun/faces/util/MultiKeyConcurrentHashMap.java  |  1212 -
 .../java/com/sun/faces/util/ReflectionUtils.java   |   479 -
 .../com/sun/faces/util/RequestStateManager.java    |   280 -
 jsf-ri/src/main/java/com/sun/faces/util/Timer.java |   114 -
 jsf-ri/src/main/java/com/sun/faces/util/Util.java  |   827 -
 .../vendor/WebContainerInjectionProvider.java      |   188 -
 .../resources/com/sun/faces/LogStrings.properties  |   147 -
 .../com/sun/faces/LogStrings_de.properties         |   145 -
 .../com/sun/faces/LogStrings_es.properties         |   145 -
 .../com/sun/faces/LogStrings_fr.properties         |   145 -
 .../com/sun/faces/LogStrings_ja.properties         |   145 -
 .../com/sun/faces/LogStrings_ko.properties         |   145 -
 .../com/sun/faces/LogStrings_pt_BR.properties      |   145 -
 .../com/sun/faces/LogStrings_zh_CN.properties      |   145 -
 .../com/sun/faces/LogStrings_zh_TW.properties      |   145 -
 .../com/sun/faces/resources/Messages.properties    |   181 -
 .../com/sun/faces/resources/Messages_de.properties |   181 -
 .../com/sun/faces/resources/Messages_en.properties |   181 -
 .../com/sun/faces/resources/Messages_es.properties |   181 -
 .../com/sun/faces/resources/Messages_fr.properties |   181 -
 .../com/sun/faces/resources/Messages_ja.properties |   181 -
 .../com/sun/faces/resources/Messages_ko.properties |   181 -
 .../sun/faces/resources/Messages_pt_BR.properties  |   181 -
 .../sun/faces/resources/Messages_zh_CN.properties  |   181 -
 .../sun/faces/resources/Messages_zh_TW.properties  |   181 -
 .../com/sun/faces/resources/Resources.properties   |    35 -
 .../com/sun/faces/standard-html-renderkit-impl.xml |   136 -
 .../com/sun/faces/web-facesconfig_1_1.xsd          |  2008 --
 .../faces/systest/AbsoluteOrderingTestCase.java    |    83 -
 .../java/com/sun/faces/systest/PhaseListenerA.java |    61 -
 .../java/com/sun/faces/systest/PhaseListenerB.java |    61 -
 .../java/com/sun/faces/systest/PhaseListenerC.java |    61 -
 .../java/com/sun/faces/systest/PhaseListenerD.java |    61 -
 .../com/sun/faces/systest/model/OrderingBean.java  |    79 -
 .../absolute-ordering/web/WEB-INF/faces-config.xml |    62 -
 .../web/WEB-INF/faces-configB.xml                  |    48 -
 .../absolute-ordering/web/WEB-INF/web.xml          |    66 -
 .../absolute-ordering/web/test.xhtml               |    50 -
 .../systest/AnnotationProcessingTestCase.java      |    84 -
 .../systest/model/AnnotationProcessingBean.java    |    65 -
 .../faces/systest/test/NotFoundWebInfClasses.java  |    43 -
 .../annotation-restrictions/web/WEB-INF/web.xml    |    73 -
 .../annotation-restrictions/web/test.xhtml         |    50 -
 jsf-ri/systest-per-webapp/build-tests.xml          |   208 -
 jsf-ri/systest-per-webapp/build.xml                |   301 -
 .../systest/clientside/AjaxMultiformTestCase.java  |   104 -
 .../faces/systest/clientside/AjaxRequestBean.java  |   116 -
 .../clientside-statesaving/web/WEB-INF/web.xml     |    86 -
 .../clientside-statesaving/web/ajaxMultiform.xhtml |    95 -
 .../systest/CommandLinkBackButtonTestCase.java     |   157 -
 .../com/sun/faces/systest/model/BackingBean.java   |    58 -
 .../web/WEB-INF/faces-config.xml                   |    73 -
 .../command-link-back-button/web/WEB-INF/web.xml   |    80 -
 .../command-link-back-button/web/buttonPressed.jsp |    88 -
 .../command-link-back-button/web/linkPressed.jsp   |    88 -
 .../command-link-back-button/web/test.jsp          |    98 -
 .../command-link-redirect/src/java/placeholder.txt |     1 -
 .../web/WEB-INF/faces-config.xml                   |   149 -
 .../command-link-redirect/web/WEB-INF/web.xml      |    80 -
 .../command-link-redirect/web/five.jsp             |   112 -
 .../command-link-redirect/web/four.jsp             |   112 -
 .../command-link-redirect/web/one.jsp              |   146 -
 .../command-link-redirect/web/three.jsp            |    95 -
 .../command-link-redirect/web/two.jsp              |    96 -
 .../systest/ConverterPropertyEditorTestCase.java   |   172 -
 .../src/java/test/Payment.java                     |    84 -
 .../src/java/test/PaymentConverter.java            |    90 -
 .../src/java/test/TestBean.java                    |    72 -
 .../web/WEB-INF/faces-config.xml                   |    90 -
 .../web/WEB-INF/sun-web.xml                        |    51 -
 .../converter-property-editor/web/WEB-INF/web.xml  |    79 -
 .../converter-property-editor/web/index.jsp        |    40 -
 .../converter-property-editor/web/selectmany.jsp   |    80 -
 .../web/selectmanyCheckbox.jsp                     |    80 -
 .../web/selectmanyListbox.jsp                      |    80 -
 .../converter-property-editor/web/selectone.jsp    |    81 -
 .../web/selectoneRadio.jsp                         |    81 -
 .../converter-property-editor/web/welcome.jsp      |    80 -
 .../com/sun/faces/systest/CoreTagsListener.java    |    78 -
 .../com/sun/faces/systest/CoreTagsTestCase.java    |   141 -
 .../core-tags/web/WEB-INF/web.xml                  |    85 -
 .../core-tags/web/converter_noval.jsp              |   104 -
 .../core-tags/web/listener_noval.jsp               |    95 -
 .../core-tags/web/validator_noval.jsp              |    92 -
 .../systest/DisableBeanValidatorTestCase.java      |   131 -
 .../disable-bean-validator/web/WEB-INF/web.xml     |    60 -
 .../disable-bean-validator/web/enable.xhtml        |    63 -
 .../disable-bean-validator/web/index.html          |    47 -
 .../disable-bean-validator/web/index.xhtml         |    62 -
 .../java/com/sun/faces/systest/UnicodeBean.java    |    58 -
 .../com/sun/faces/systest/UnicodeBeanFilter.java   |    77 -
 .../com/sun/faces/systest/UnicodeTestCase.java     |   179 -
 .../web/WEB-INF/faces-config.xml                   |    51 -
 .../disable-unicode-escaping/web/WEB-INF/web.xml   |    81 -
 .../web/indexISO8859_1.jsp                         |    72 -
 .../disable-unicode-escaping/web/indexUSASCII.jsp  |    72 -
 .../disable-unicode-escaping/web/indexUTF.jsp      |    72 -
 .../faces/systest/DocumentOrderingTestCase.java    |    83 -
 .../java/com/sun/faces/systest/PhaseListenerA.java |    61 -
 .../java/com/sun/faces/systest/PhaseListenerB.java |    61 -
 .../java/com/sun/faces/systest/PhaseListenerC.java |    61 -
 .../java/com/sun/faces/systest/PhaseListenerD.java |    61 -
 .../com/sun/faces/systest/model/OrderingBean.java  |    79 -
 .../document-ordering/web/WEB-INF/faces-config.xml |    56 -
 .../web/WEB-INF/faces-configB.xml                  |    48 -
 .../document-ordering/web/WEB-INF/web.xml          |    67 -
 .../document-ordering/web/test.xhtml               |    50 -
 .../java/com/sun/faces/systest/EvaluatorBean.java  |   265 -
 .../el-performance/web/WEB-INF/faces-config.xml    |   212 -
 .../el-performance/web/WEB-INF/web.xml             |    80 -
 .../el-performance/web/attribute-test.jsp          |   118 -
 .../systest-per-webapp/el-performance/web/test.jsp |   116 -
 .../faces/systest/EmptyStringAsNullTestCase.java   |   163 -
 .../src/java/com/sun/faces/systest/model/Bean.java |    99 -
 .../web/WEB-INF/faces-config.xml                   |    51 -
 .../empty-string-as-null/web/WEB-INF/web.xml       |    66 -
 .../empty-string-as-null/web/test.xhtml            |    62 -
 .../flash/src/java/com/sun/faces/model/Bean.java   |    95 -
 .../com/sun/faces/run_time_test/ResultSetBean.java |   183 -
 .../java/com/sun/faces/systest/FlashTestCase.java  |   319 -
 .../flash/web/WEB-INF/faces-config.xml             |    87 -
 .../systest-per-webapp/flash/web/WEB-INF/web.xml   |    73 -
 jsf-ri/systest-per-webapp/flash/web/flash10.xhtml  |    63 -
 jsf-ri/systest-per-webapp/flash/web/flash11.xhtml  |    63 -
 jsf-ri/systest-per-webapp/flash/web/flash12.xhtml  |    61 -
 jsf-ri/systest-per-webapp/flash/web/flash2.xhtml   |    98 -
 jsf-ri/systest-per-webapp/flash/web/flash3.xhtml   |   114 -
 jsf-ri/systest-per-webapp/flash/web/flash4.xhtml   |    77 -
 jsf-ri/systest-per-webapp/flash/web/flash5.xhtml   |    64 -
 jsf-ri/systest-per-webapp/flash/web/flash6.xhtml   |    59 -
 jsf-ri/systest-per-webapp/flash/web/flash7.xhtml   |    57 -
 jsf-ri/systest-per-webapp/flash/web/flash8.xhtml   |    59 -
 jsf-ri/systest-per-webapp/flash/web/flash9.xhtml   |    65 -
 jsf-ri/systest-per-webapp/flash/web/index.html     |    47 -
 jsf-ri/systest-per-webapp/flash/web/index.xhtml    |    89 -
 .../sun/faces/systest/InvalidMappingTestCase.java  |    85 -
 .../invalid-mapping/web/WEB-INF/web.xml            |    62 -
 .../invalid-mapping/web/test.jsp                   |    81 -
 .../com/sun/faces/systest/JarOrderingTestCase.java |   124 -
 .../jar-ordering/web/WEB-INF/web.xml               |    86 -
 .../systest-per-webapp/jar-ordering/web/test.jsp   |    85 -
 .../com/sun/faces/systest/JspFlashTestCase.java    |   191 -
 .../src/java/com/sun/faces/systest/model/Bean.java |    67 -
 .../jsp-flash/web/WEB-INF/faces-config.xml         |    86 -
 .../jsp-flash/web/WEB-INF/web.xml                  |    55 -
 .../jsp-flash/web/bottomPanel.jsp                  |    38 -
 jsf-ri/systest-per-webapp/jsp-flash/web/flash2.jsp |    97 -
 jsf-ri/systest-per-webapp/jsp-flash/web/flash3.jsp |   109 -
 jsf-ri/systest-per-webapp/jsp-flash/web/flash4.jsp |    71 -
 .../jsp-flash/web/home-flash.jsp                   |   127 -
 jsf-ri/systest-per-webapp/jsp-flash/web/index.html |    47 -
 .../jsp-flash/web/rightColumn.jsp                  |    47 -
 .../com/sun/faces/systest/LateBindingTestCase.java |   125 -
 .../src/java/com/sun/faces/systest/late/Bean.java  |   159 -
 .../com/sun/faces/systest/late/LBConverter.java    |    57 -
 .../com/sun/faces/systest/late/LBValidator.java    |    52 -
 .../systest-per-webapp/late-bindings/web/Test.jsp  |    67 -
 .../late-bindings/web/WEB-INF/faces-config.xml     |    60 -
 .../late-bindings/web/WEB-INF/web.xml              |    71 -
 .../faces/systest/NestedDatatablesTestCase.java    |   275 -
 .../com/sun/faces/systest/model/ActionBean.java    |    76 -
 .../java/com/sun/faces/systest/model/Bean62.java   |   178 -
 .../java/com/sun/faces/systest/model/BeanList.java |   129 -
 .../com/sun/faces/systest/model/InputBean.java     |   133 -
 .../systest/model/PrintTreePhaseListener.java      |    63 -
 .../src/java/com/tavve/webapps/nested/Port.java    |    70 -
 .../src/java/com/tavve/webapps/nested/Service.java |    89 -
 .../java/com/tavve/webapps/nested/TestBean.java    |   162 -
 .../src/java/test/NestedBean.java                  |    69 -
 .../nested-datatables/web/WEB-INF/faces-config.xml |   183 -
 .../nested-datatables/web/WEB-INF/web.xml          |    85 -
 .../nested-datatables/web/index.jsp                |    64 -
 .../nested-datatables/web/jsfri62.jsp              |    92 -
 .../nested-datatables/web/nested.jsp               |   113 -
 .../nested-datatables/web/nestedTest-jsfri159.jsp  |    97 -
 .../nested-datatables/web/test.jsp                 |   110 -
 .../nested-datatables/web/test2.jsp                |   121 -
 .../faces/systest/NestedLoadBundlesTestCase.java   |   155 -
 .../sun/faces/systest/model/BundleA_en.properties  |     1 -
 .../sun/faces/systest/model/BundleB_en.properties  |     1 -
 .../sun/faces/systest/model/BundleC_en.properties  |     1 -
 .../sun/faces/systest/model/BundleD_en.properties  |     1 -
 .../sun/faces/systest/model/BundleE_en.properties  |     1 -
 .../web/WEB-INF/faces-config.xml                   |    51 -
 .../nested-loadbundles/web/WEB-INF/web.xml         |    75 -
 .../nested-loadbundles/web/bar01.jsp               |    53 -
 .../nested-loadbundles/web/bar02.jsp               |    52 -
 .../nested-loadbundles/web/foo01.jsp               |    52 -
 .../nested-loadbundles/web/foo02.jsp               |    53 -
 .../nested-loadbundles/web/index.jsp               |   140 -
 .../systest/NeverUnwrapExceptionsTestCase.java     |   129 -
 .../faces/systest/model/CatchExceptionServlet.java |   100 -
 .../model/ThrowWrappedExceptionOnPropertyGet.java  |    57 -
 .../web/WEB-INF/faces-config.xml                   |    53 -
 .../never-unwrap-exceptions/web/WEB-INF/web.xml    |    79 -
 .../never-unwrap-exceptions/web/error.jsp          |    47 -
 .../never-unwrap-exceptions/web/test.jsp           |    85 -
 .../faces/systest/PropertyResolverJspTestCase.java |   108 -
 .../faces/systest/RegisteredPropertyResolver.java  |    91 -
 .../property-resolver-jsp/web/Test.jsp             |    52 -
 .../web/WEB-INF/faces-config.xml                   |    51 -
 .../property-resolver-jsp/web/WEB-INF/web.xml      |    65 -
 .../java/com/sun/faces/systest/NewApplication.java |   358 -
 .../sun/faces/systest/NewApplicationFactory.java   |    67 -
 .../com/sun/faces/systest/NewStateManager.java     |    55 -
 .../java/com/sun/faces/systest/NewViewHandler.java |    55 -
 .../sun/faces/systest/ReplaceApplicationBean.java  |    60 -
 .../faces/systest/ReplaceApplicationTestCase.java  |   132 -
 .../web/WEB-INF/faces-config.xml                   |   120 -
 .../replace-application/web/WEB-INF/web.xml        |    81 -
 .../replace-application/web/test.jsp               |    93 -
 .../sun/faces/systest/LifecycleFactoryImpl.java    |    85 -
 .../java/com/sun/faces/systest/NewLifecycle.java   |    53 -
 .../faces/systest/ReplaceLifecycleTestCase.java    |   140 -
 .../com/sun/faces/systest/SimplePhaseListener.java |    67 -
 .../replace-lifecycle/web/WEB-INF/faces-config.xml |    55 -
 .../replace-lifecycle/web/WEB-INF/web.xml          |    86 -
 .../replace-lifecycle/web/test.jsp                 |    85 -
 .../replace-lifecycle/web/test2.jsp                |    86 -
 .../java/com/sun/faces/systest/NewApplication.java |   450 -
 .../sun/faces/systest/NewApplicationFactory.java   |    67 -
 .../com/sun/faces/systest/NewStateManager.java     |   111 -
 .../java/com/sun/faces/systest/NewViewHandler.java |    55 -
 .../sun/faces/systest/ReplaceApplicationBean.java  |    60 -
 .../faces/systest/ReplaceStateManagerTestCase.java |   147 -
 .../web/WEB-INF/faces-config.xml                   |   120 -
 .../replace-statemanager/web/WEB-INF/web.xml       |    80 -
 .../replace-statemanager/web/test.jsp              |    95 -
 .../src/java/com/sun/faces/systest/Bean.java       |   113 -
 .../com/sun/faces/systest/NewVariableResolver.java |   110 -
 .../systest/ReplaceVariableResolverTestCase.java   |   130 -
 .../web/WEB-INF/faces-config.xml                   |    65 -
 .../replace-variableresolver/web/WEB-INF/web.xml   |    80 -
 .../replace-variableresolver/web/test.jsp          |    87 -
 .../replace-variableresolver/web/test1.jsp         |    87 -
 .../systest/ResourceLocalePrefixTestCase.java      |   138 -
 .../sun/faces/systest/resource/Messages.properties |     1 -
 .../faces/systest/resource/Messages_de.properties  |     1 -
 .../faces/systest/resource/Messages_en.properties  |     1 -
 .../faces/systest/resource/Messages_fr.properties  |     1 -
 .../web/WEB-INF/faces-config.xml                   |    55 -
 .../resource-locale-prefix/web/WEB-INF/web.xml     |    70 -
 .../web/resources/de/duke.gif                      |   Bin 1082 -> 0 bytes
 .../web/resources/en/duke.gif                      |   Bin 1067 -> 0 bytes
 .../web/resources/fr/duke.gif                      |   Bin 1073 -> 0 bytes
 .../resource-locale-prefix/web/test.jsp            |    55 -
 .../com/sun/faces/systest/StringConverter.java     |    65 -
 .../sun/faces/systest/StringConverterTestCase.java |   145 -
 .../string-converter/web/WEB-INF/faces-config.xml  |    56 -
 .../string-converter/web/WEB-INF/web.xml           |    66 -
 .../string-converter/web/index.jsp                 |    93 -
 .../systest/ViewExpiredExceptionTestCase.java      |    96 -
 .../view-expired/web/WEB-INF/web.xml               |    71 -
 .../systest-per-webapp/view-expired/web/error.jsp  |    44 -
 .../systest-per-webapp/view-expired/web/test.jsp   |    83 -
 .../sun/faces/systest/WcagDataTableTestCase.java   |   159 -
 .../faces/systest/model/WindowsCodePageData.java   |   105 -
 .../systest/model/WindowsCodePageDataBean.java     |   213 -
 .../wcag-datatable/web/WEB-INF/faces-config.xml    |    51 -
 .../wcag-datatable/web/WEB-INF/web.xml             |    66 -
 .../wcag-datatable/web/index.jsp                   |   156 -
 .../WriteAttributeScriptDisabledTestCase.java      |    93 -
 .../src/java/com/sun/faces/systest/model/Bean.java |    48 -
 .../web/WEB-INF/faces-config.xml                   |    51 -
 .../web/WEB-INF/web.xml                            |    67 -
 .../write-attribute-script-disabled/web/test.jsp   |    89 -
 .../WriteAttributeScriptEnabledTestCase.java       |    98 -
 .../src/java/com/sun/faces/systest/model/Bean.java |    48 -
 .../web/WEB-INF/faces-config.xml                   |    51 -
 .../web/WEB-INF/web.xml                            |    61 -
 .../write-attribute-script-enabled/web/test.jsp    |    89 -
 jsf-ri/systest/build-tests.xml                     |  1384 -
 jsf-ri/systest/build.properties.sample             |     2 -
 jsf-ri/systest/build.xml                           |   209 -
 jsf-ri/systest/nbproject/project.xml               |   100 -
 .../src/com/sun/faces/CustomMessages.properties    |    18 -
 .../src/com/sun/faces/CustomMessages_en.properties |     5 -
 .../src/com/sun/faces/CustomMessages_fr.properties |     5 -
 .../com/sun/faces/ajax/AjaxAllKeywordTestCase.java |   123 -
 .../src/com/sun/faces/ajax/AjaxAttrsTestCase.java  |   110 -
 .../src/com/sun/faces/ajax/AjaxBadXMLTestCase.java |    87 -
 .../src/com/sun/faces/ajax/AjaxEchoTestCase.java   |   295 -
 .../src/com/sun/faces/ajax/AjaxErrorTestCase.java  |   152 -
 .../src/com/sun/faces/ajax/AjaxEvalTestCase.java   |   102 -
 .../sun/faces/ajax/AjaxIncludedTextTestCase.java   |    96 -
 .../sun/faces/ajax/AjaxInsertDeleteTestCase.java   |   163 -
 .../com/sun/faces/ajax/AjaxMessageTestCase.java    |   173 -
 .../com/sun/faces/ajax/AjaxMultiformTestCase.java  |   103 -
 .../com/sun/faces/ajax/AjaxRedirectTestCase.java   |    98 -
 .../faces/ajax/AjaxRequestMultiRenderTestCase.java |   111 -
 .../sun/faces/ajax/AjaxRequestScriptTestCase.java  |    96 -
 .../com/sun/faces/ajax/AjaxRequestTestCase.java    |   502 -
 .../faces/ajax/AjaxRerenderOtherFormTestCase.java  |    90 -
 .../src/com/sun/faces/ajax/AjaxSelectTestCase.java |   166 -
 .../src/com/sun/faces/ajax/AjaxTableTestCase.java  |   118 -
 .../faces/ajax/AjaxTagEventAttributeTestCase.java  |   117 -
 .../faces/ajax/AjaxTagEventWrappingTestCase.java   |   201 -
 .../com/sun/faces/ajax/AjaxTagResolveTestCase.java |   121 -
 .../src/com/sun/faces/ajax/AjaxTagTestCase.java    |   646 -
 .../sun/faces/ajax/AjaxTagWrappingTestCase.java    |   136 -
 .../com/sun/faces/annotation/AnnotatedBean.java    |    69 -
 .../sun/faces/annotation/AnnotatedBehavior.java    |    54 -
 .../annotation/AnnotatedBehaviorRenderer.java      |    50 -
 .../sun/faces/annotation/AnnotatedComponent.java   |    52 -
 .../annotation/AnnotatedComponentSystemEvent.java  |    52 -
 .../annotation/AnnotatedComponentsTestCase.java    |   101 -
 .../sun/faces/annotation/AnnotatedConverter.java   |    60 -
 .../annotation/AnnotatedConverterForClass.java     |    60 -
 .../sun/faces/annotation/AnnotatedRenderer.java    |    48 -
 .../sun/faces/annotation/AnnotatedValidator.java   |    52 -
 .../annotation/AnnotatedValidatorDefault.java      |    56 -
 .../sun/faces/annotation/AnnotationTestBean.java   |   274 -
 .../AnotherAnnotatedComponentSystemEvent.java      |    52 -
 .../src/com/sun/faces/annotation/BaseBean.java     |    67 -
 .../faces/annotation/BaseBeanImplementation.java   |    53 -
 .../faces/annotation/CustomScopeAnnotatedBean.java |    48 -
 .../application/ResetUniqueRequestIdBean.java      |    69 -
 .../com/sun/faces/component/ComponentTestCase.java |    98 -
 .../faces/component/CompositeMetaDataTestCase.java |   108 -
 .../src/com/sun/faces/component/DynamicAdd.java    |   130 -
 .../sun/faces/component/GetClientIdELTestCase.java |    99 -
 .../composite/BootstrapCompositeComponent.java     |    93 -
 .../composite/ComponentResolverActionListener.java |    60 -
 .../src/com/sun/faces/composite/CompositeBean.java |   260 -
 .../composite/CompositeComponentMetadataUtils.java |   132 -
 .../composite/CompositeComponentsTestCase.java     |  1086 -
 ...ositeComponentsTestCaseWithEE6Dependencies.java |   136 -
 .../sun/faces/composite/DefaultActionTestCase.java |    96 -
 .../JavaBackedComponentDefaultAttrValues.java      |    73 -
 .../JavaTopLevelActionListenerComponent.java       |    59 -
 ...avaTopLevelActionListenerComponentTestCase.java |   100 -
 .../sun/faces/composite/JavaTopLevelComponent.java |    73 -
 .../composite/JavaTopLevelComponentTestCase.java   |   113 -
 .../PhaseListenerInCompositeComponent.java         |    59 -
 .../composite/ResourceDependencyComponent.java     |    48 -
 .../ResourceDependencyComponentTestCase.java       |   113 -
 .../sun/faces/composite/TimeWastingTagHandler.java |    60 -
 ...istenerSetPropertyActionListener01TestCase.java |   132 -
 .../com/sun/faces/event/DynamicAddTestCase.java    |   121 -
 .../com/sun/faces/event/PostAddToViewListener.java |    87 -
 .../sun/faces/event/PostRestoreStateListener.java  |    87 -
 .../event/VerifyBuildBeforeRestoreTestCase.java    |   101 -
 .../facelets/FaceletsTargetNotFoundTestCase.java   |   133 -
 .../com/sun/faces/facelets/FaceletsTestCase.java   |   402 -
 .../sun/faces/facelets/ImplicitFacetTestCase.java  |   120 -
 .../sun/faces/facelets/KeepMessagesTestCase.java   |   120 -
 .../src/com/sun/faces/facelets/RepeatBean.java     |    90 -
 .../com/sun/faces/facelets/UIRepeatTestCase.java   |   201 -
 .../src/com/sun/faces/facelets/csetTestCase.java   |   107 -
 .../src/com/sun/faces/groovy/GroovyTestCase.java   |    76 -
 .../com/sun/faces/htmlunit/AbstractTestCase.java   |   422 -
 .../src/com/sun/faces/jsf2jsp/Jsf2JspTestCase.java |   140 -
 .../jsptest/CommandLinkMultiFormTestCase.java      |   135 -
 .../faces/jsptest/CommandLinkNoFormTestCase.java   |   114 -
 .../faces/jsptest/CommandLinkOnClickTestCase.java  |   175 -
 .../com/sun/faces/jsptest/ConverterTestCase.java   |   254 -
 .../src/com/sun/faces/jsptest/ForEachTestCase.java |   172 -
 .../src/com/sun/faces/jsptest/FormElTestCase.java  |   110 -
 .../com/sun/faces/jsptest/FormInputTestCase.java   |   241 -
 .../src/com/sun/faces/jsptest/IdRefTestCase.java   |   202 -
 .../faces/jsptest/InvalidateSessionTestCase.java   |   117 -
 .../sun/faces/jsptest/JspIntegrationTestCase.java  |   407 -
 .../sun/faces/jsptest/JstlIntegrationTestCase.java |   907 -
 .../com/sun/faces/jsptest/ListenerTestCase.java    |   136 -
 .../src/com/sun/faces/jsptest/LocaleTestCase.java  |   109 -
 .../MissingActionListenerMethodTestCase.java       |    81 -
 .../com/sun/faces/jsptest/MissingViewTestCase.java |   105 -
 .../com/sun/faces/jsptest/PrependIdTestCase.java   |   123 -
 .../jsptest/SelectComponentValueTestCase.java      |   327 -
 .../faces/jsptest/SelectItemEscapeTestCase.java    |   121 -
 .../faces/jsptest/SelectManyMultiFormTestCase.java |   120 -
 .../com/sun/faces/jsptest/SetPropertyTestCase.java |   133 -
 .../src/com/sun/faces/jsptest/TagIvarTestCase.java |   106 -
 .../src/com/sun/faces/jsptest/TlvTestCase.java     |   112 -
 .../com/sun/faces/jsptest/ValidatorTestCase.java   |   152 -
 .../faces/jsptest/ValueChangeListenerTestCase.java |   200 -
 .../jsptest/ViewRootPhaseListenerTestCase.java     |   154 -
 .../src/com/sun/faces/jsptest/ViewTagTestCase.java |   126 -
 .../com/sun/faces/methodref/MethodRefTestCase.java |   272 -
 ...ibuteListenerMethodExpressionNoArgTestCase.java |   100 -
 .../src/com/sun/faces/pathtest/PathTestCase.java   |   139 -
 .../sun/faces/render/CommandButtonTestCase.java    |   102 -
 .../sun/faces/render/MessageRenderTestCase.java    |   116 -
 .../faces/render/OutputScriptStyleTestCase.java    |   222 -
 .../com/sun/faces/render/SelectStarTestCase.java   |   254 -
 .../com/sun/faces/systest/CheckboxTestCase.java    |   105 -
 .../com/sun/faces/systest/ChildrenComponent.java   |   111 -
 .../faces/systest/ChildrenComponentBodyTag.java    |    93 -
 .../sun/faces/systest/ChildrenComponentTag.java    |    80 -
 .../sun/faces/systest/ComponentMiscTestCase.java   |   139 -
 .../systest/ConditionalNavigationTestCase.java     |   108 -
 .../com/sun/faces/systest/DataTableTestCase.java   |   233 -
 .../src/com/sun/faces/systest/DuplicateIds04.java  |   186 -
 .../sun/faces/systest/DuplicateIds04TestCase.java  |   123 -
 .../com/sun/faces/systest/DynamicComponent.java    |   177 -
 .../com/sun/faces/systest/DynamicComponentTag.java |    80 -
 .../src/com/sun/faces/systest/FacetComponent.java  |    85 -
 .../com/sun/faces/systest/FacetComponentTag.java   |    92 -
 .../sun/faces/systest/FlashMessagesTestCase.java   |   102 -
 .../src/com/sun/faces/systest/FlashReaperBean.java |    75 -
 .../com/sun/faces/systest/FlashReaperTestCase.java |   114 -
 .../sun/faces/systest/FlashViewParamTestCase.java  |   115 -
 .../faces/systest/LinkTypeAttributeTestCase.java   |   116 -
 .../src/com/sun/faces/systest/NamingTag.java       |    70 -
 .../com/sun/faces/systest/NavigationTestCase.java  |   259 -
 .../sun/faces/systest/OutputTargetsTestCase.java   |   254 -
 .../com/sun/faces/systest/OutputVerbatimTag.java   |    91 -
 .../com/sun/faces/systest/RenderKitsTestCase.java  |   188 -
 .../faces/systest/ResourceRelocationTestCase.java  |   200 -
 .../systest/SelectManyCollectionTestCase.java      |   270 -
 ...neHideNoSelectionInSelectItemGroupTestCase.java |    52 -
 .../systest/SelectOneHideNoSelectionTestCase.java  |   163 -
 .../faces/systest/SelectOneManyEnumTestCase.java   |   190 -
 ...tOneValueExpressionHideNoSelectionTestCase.java |   109 -
 .../sun/faces/systest/SystemEventListenerImpl.java |    61 -
 .../sun/faces/systest/TestActionListener01.java    |    61 -
 .../src/com/sun/faces/systest/TestComponent.java   |   150 -
 .../src/com/sun/faces/systest/TestConverter.java   |    61 -
 .../src/com/sun/faces/systest/TestConverter01.java |    68 -
 .../src/com/sun/faces/systest/TestValidator.java   |    57 -
 .../src/com/sun/faces/systest/TestValidator01.java |    60 -
 .../sun/faces/systest/TestValueChangeListener.java |    57 -
 .../faces/systest/TestValueChangeListener01.java   |    61 -
 .../com/sun/faces/systest/ant/SystestClient.java   |  1554 -
 .../src/com/sun/faces/systest/el/ELTestCase.java   |   115 -
 .../sun/faces/systest/flash/FlashMessagesBean.java |    80 -
 .../implicitnav/ImplicitNavigationBean.java        |    73 -
 .../implicitnav/ImplicitNavigationTestCase.java    |   222 -
 .../lifecycle/ApplicationFactoryWrapper.java       |    62 -
 .../lifecycle/FacesContextFactoryWrapper.java      |    63 -
 .../systest/lifecycle/LifecycleFactoryWrapper.java |    71 -
 .../ManagedBeanLifecycleAnnotationTestCase.java    |   261 -
 .../systest/lifecycle/ReloadPhaseListenerImpl.java |    90 -
 .../systest/lifecycle/RenderKitFactoryWrapper.java |    72 -
 .../sun/faces/systest/model/AbstractTestBean.java  |    58 -
 .../sun/faces/systest/model/AddMessageBean.java    |    52 -
 .../src/com/sun/faces/systest/model/BookBean.java  |   102 -
 .../src/com/sun/faces/systest/model/BooksBean.java |    79 -
 .../com/sun/faces/systest/model/ConverterBean.java |    93 -
 .../faces/systest/model/CustomDatatableBean.java   |    94 -
 .../src/com/sun/faces/systest/model/EnumBean.java  |   109 -
 .../com/sun/faces/systest/model/EventTagBean.java  |   135 -
 .../com/sun/faces/systest/model/FaceletsBean.java  |    62 -
 .../com/sun/faces/systest/model/ForEachBean.java   |   108 -
 .../com/sun/faces/systest/model/FunctionBean.java  |    59 -
 .../sun/faces/systest/model/InterweavingBean.java  |    67 -
 .../com/sun/faces/systest/model/ListHolder.java    |    61 -
 .../com/sun/faces/systest/model/ListenerBean.java  |    66 -
 .../sun/faces/systest/model/ListenerCheckBean.java |    87 -
 .../src/com/sun/faces/systest/model/MethodRef.java |   167 -
 .../com/sun/faces/systest/model/NumberHolder.java  |    59 -
 .../model/PrintEventToRequestMapPhaseListener.java |   121 -
 .../sun/faces/systest/model/PropertyOrderBean.java |   101 -
 .../faces/systest/model/ResourceInjectionBean.java |    57 -
 .../sun/faces/systest/model/SelectItemsBean.java   |    83 -
 .../sun/faces/systest/model/SelectMany05Bean.java  |   356 -
 .../SelectMany05BeanWithNoSelectionValue.java      |    79 -
 .../com/sun/faces/systest/model/SpecialBean.java   |    58 -
 .../sun/faces/systest/model/SpecialConverter.java  |    65 -
 .../com/sun/faces/systest/model/StringHolder.java  |    57 -
 .../src/com/sun/faces/systest/model/TestBean.java  |   921 -
 .../src/com/sun/faces/systest/model/TestBean2.java |    56 -
 .../sun/faces/systest/model/TestBeanConverter.java |    55 -
 .../faces/systest/model/TestBeanEventClass.java    |    51 -
 .../systest/model/TestBeanPostConstructEvent.java  |    50 -
 .../systest/model/TestBeanPreDestroyEvent.java     |    47 -
 .../sun/faces/systest/model/TestBeanSubclass.java  |    58 -
 .../com/sun/faces/systest/model/TestListBox.java   |    70 -
 .../systest/model/TestValueChangeListener.java     |    69 -
 .../com/sun/faces/systest/model/ValidatorBean.java |    96 -
 .../systest/model/ValueChangeListenerBean.java     |    83 -
 .../ValueChangeSetPropertyActionListenerBean.java  |    68 -
 .../sun/faces/systest/model/ViewRootExtension.java |    55 -
 .../faces/systest/model/ajax/AjaxRequestBean.java  |   116 -
 .../sun/faces/systest/model/ajax/AjaxTable.java    |   105 -
 .../systest/model/ajax/AjaxTagValuesBean.java      |   108 -
 .../sun/faces/systest/model/ajax/AttrsBean.java    |    78 -
 .../sun/faces/systest/model/ajax/CountBean.java    |    81 -
 .../src/com/sun/faces/systest/model/ajax/Echo.java |    60 -
 .../sun/faces/systest/model/ajax/ErrorBean.java    |    75 -
 .../com/sun/faces/systest/model/ajax/EvalBean.java |    75 -
 .../com/sun/faces/systest/model/ajax/FailBean.java |    74 -
 .../faces/systest/model/ajax/InsertDeleteBean.java |   151 -
 .../faces/systest/model/ajax/InvalidXMLBean.java   |    79 -
 .../sun/faces/systest/model/ajax/RedirectBean.java |    63 -
 .../model/ajax/browser/BrowserAttributesBean.java  |   152 -
 .../systest/model/ajax/browser/EvalScriptBean.java |   229 -
 .../model/ajax/browser/SelectChangeBean.java       |    89 -
 .../systest/model/ajax/browser/UpdateRootBean.java |   418 -
 .../src/com/sun/faces/systest/render/Base64.java   |   416 -
 .../sun/faces/systest/render/ButtonRenderer.java   |   282 -
 .../faces/systest/render/CustomRenderKitImpl.java  |   239 -
 .../render/CustomResponseStateManagerImpl.java     |   267 -
 .../faces/systest/render/CustomResponseWriter.java |   584 -
 .../com/sun/faces/systest/render/FormRenderer.java |   357 -
 .../com/sun/faces/systest/render/TextRenderer.java |   361 -
 .../resources/ResourceBundle01_en.properties       |     2 -
 .../resources/ResourceBundle03_en.properties       |     2 -
 .../sun/faces/systest/resources/Resources_en.java  |    61 -
 .../sun/faces/systest/state/DynamicStateBean.java  |   155 -
 .../sun/faces/systest/state/DynamicStateBean2.java |   121 -
 .../faces/systest/state/DynamicStateTestCase.java  |   208 -
 .../com/sun/faces/systest/tags/EventTestCase.java  |   168 -
 .../faces/systest/viewparameters/NewsIndex.java    |    74 -
 .../faces/systest/viewparameters/NewsReader.java   |   108 -
 .../faces/systest/viewparameters/NewsStory.java    |    64 -
 .../viewparameters/ViewParametersTestCase.java     |   307 -
 jsf-ri/systest/web/Iterator02.jsp                  |    53 -
 jsf-ri/systest/web/ModelSelectItemConversion.jsp   |    84 -
 jsf-ri/systest/web/ProcessSaveRestoreStateTest.jsp |    66 -
 jsf-ri/systest/web/SelectManyConverterTest.jsp     |    95 -
 jsf-ri/systest/web/TCCI_subview01.jsp              |    52 -
 jsf-ri/systest/web/TCCI_subview02.jsp              |    48 -
 jsf-ri/systest/web/TCCI_subview03.jsp              |    48 -
 jsf-ri/systest/web/TCCI_subview04.jsp              |    52 -
 jsf-ri/systest/web/TCCI_subview05.jsp              |    48 -
 jsf-ri/systest/web/TCCI_subview06.jsp              |    48 -
 jsf-ri/systest/web/TestCoreValidatorFail.jsp       |    77 -
 jsf-ri/systest/web/TestCoreValidatorIfFail.jsp     |    68 -
 jsf-ri/systest/web/TestCoreValidatorIfSucceed.jsp  |    68 -
 .../systest/web/TestCoreValidatorIteratorFail.jsp  |    67 -
 .../web/TestCoreValidatorIteratorSucceed.jsp       |    70 -
 jsf-ri/systest/web/TestCoreValidatorSucceed.jsp    |    77 -
 .../systest/web/TestElValidatorActionRefFail.jsp   |    68 -
 .../web/TestElValidatorActionRefSucceed.jsp        |    67 -
 .../systest/web/TestElValidatorComponentFail.jsp   |    68 -
 .../web/TestElValidatorComponentSucceed.jsp        |    72 -
 jsf-ri/systest/web/TestElValidatorIdFail.jsp       |    68 -
 jsf-ri/systest/web/TestElValidatorIdSucceed.jsp    |    69 -
 jsf-ri/systest/web/TestElValidatorValueRefFail.jsp |    64 -
 .../systest/web/TestElValidatorValueRefSucceed.jsp |    63 -
 jsf-ri/systest/web/TestHtmlBasicValidatorFail.jsp  |    76 -
 .../systest/web/TestHtmlBasicValidatorSucceed.jsp  |    65 -
 .../web/TestValueChangeAndActionListenerNoArg.jsp  |    78 -
 .../TestValueChangeAndActionListenerNoArg.xhtml    |    78 -
 .../web/WEB-INF/composite-behavior.taglib.xml      |    55 -
 jsf-ri/systest/web/WEB-INF/faces-config.xml        |   806 -
 .../com/sun/faces/groovy/GroovyBacked.groovy       |    59 -
 .../groovy/com/sun/faces/groovy/SimpleBean.groovy  |    49 -
 jsf-ri/systest/web/WEB-INF/init-faces-config.xml   |    55 -
 jsf-ri/systest/web/WEB-INF/source1.taglib.xml      |    75 -
 jsf-ri/systest/web/WEB-INF/sun-web.xml             |    73 -
 jsf-ri/systest/web/WEB-INF/taglib.tld              |   226 -
 jsf-ri/systest/web/WEB-INF/tags/outputLink.tag     |     4 -
 jsf-ri/systest/web/WEB-INF/tags/source.xhtml       |    37 -
 .../WEB-INF/templates/compositeTestTemplate.xhtml  |    56 -
 .../WEB-INF/templates/templateCompTemplate.xhtml   |    56 -
 .../templates/templateDecorateTemplate.xhtml       |    59 -
 jsf-ri/systest/web/WEB-INF/test.jsp                |    49 -
 jsf-ri/systest/web/WEB-INF/web.xml.template        |   157 -
 jsf-ri/systest/web/ajax/ajaxAllKeyword1.xhtml      |    70 -
 jsf-ri/systest/web/ajax/ajaxAllKeyword2.xhtml      |    72 -
 jsf-ri/systest/web/ajax/ajaxAllKeyword3.xhtml      |    75 -
 jsf-ri/systest/web/ajax/ajaxAttrs.xhtml            |    56 -
 jsf-ri/systest/web/ajax/ajaxCount.xhtml            |    67 -
 jsf-ri/systest/web/ajax/ajaxEcho.xhtml             |    77 -
 jsf-ri/systest/web/ajax/ajaxEchoArea.xhtml         |    63 -
 jsf-ri/systest/web/ajax/ajaxError.xhtml            |    57 -
 jsf-ri/systest/web/ajax/ajaxError2.xhtml           |    57 -
 jsf-ri/systest/web/ajax/ajaxError3.xhtml           |    72 -
 jsf-ri/systest/web/ajax/ajaxEval.xhtml             |    56 -
 jsf-ri/systest/web/ajax/ajaxEvent.xhtml            |    86 -
 jsf-ri/systest/web/ajax/ajaxIncludedScript.xhtml   |    88 -
 jsf-ri/systest/web/ajax/ajaxIncludedText.xhtml     |    72 -
 jsf-ri/systest/web/ajax/ajaxInsertDelete.xhtml     |    67 -
 jsf-ri/systest/web/ajax/ajaxInvalidXML.xhtml       |    56 -
 jsf-ri/systest/web/ajax/ajaxMalformedXML.xhtml     |    56 -
 jsf-ri/systest/web/ajax/ajaxMessage.xhtml          |   115 -
 jsf-ri/systest/web/ajax/ajaxMultiform.xhtml        |    95 -
 jsf-ri/systest/web/ajax/ajaxProjectStage.xhtml     |    60 -
 jsf-ri/systest/web/ajax/ajaxRedirect.xhtml         |    56 -
 .../web/ajax/ajaxRequestDefaultsButton.xhtml       |    88 -
 .../ajax/ajaxRequestDefaultsButtonNoPrepend.xhtml  |    90 -
 .../systest/web/ajax/ajaxRequestDefaultsEdit.xhtml |    99 -
 .../ajax/ajaxRequestDefaultsEditNoPrepend.xhtml    |    99 -
 .../systest/web/ajax/ajaxRequestMultiRender.xhtml  |    73 -
 .../systest/web/ajax/ajaxRerenderOtherForm.xhtml   |    66 -
 jsf-ri/systest/web/ajax/ajaxSelect.xhtml           |    96 -
 jsf-ri/systest/web/ajax/ajaxTable.xhtml            |   124 -
 jsf-ri/systest/web/ajax/ajaxTagCount.xhtml         |    68 -
 .../systest/web/ajax/ajaxTagDefaultsButton.xhtml   |    89 -
 .../web/ajax/ajaxTagDefaultsButtonNoPrepend.xhtml  |    89 -
 jsf-ri/systest/web/ajax/ajaxTagDefaultsEdit.xhtml  |   100 -
 .../web/ajax/ajaxTagDefaultsEditNoPrepend.xhtml    |   100 -
 jsf-ri/systest/web/ajax/ajaxTagDisabled.xhtml      |    72 -
 jsf-ri/systest/web/ajax/ajaxTagEvent.xhtml         |    85 -
 .../systest/web/ajax/ajaxTagEventAttribute.xhtml   |    99 -
 jsf-ri/systest/web/ajax/ajaxTagEventWrapping.xhtml |   127 -
 jsf-ri/systest/web/ajax/ajaxTagKeywords.xhtml      |    88 -
 jsf-ri/systest/web/ajax/ajaxTagMulti.xhtml         |    85 -
 jsf-ri/systest/web/ajax/ajaxTagResolve.xhtml       |    94 -
 jsf-ri/systest/web/ajax/ajaxTagWrapping.xhtml      |   101 -
 jsf-ri/systest/web/ajax/browser/browser.xhtml      |    53 -
 .../web/ajax/browser/browserEvalScripts.xhtml      |    88 -
 .../web/ajax/browser/browserSelectChange.xhtml     |   113 -
 .../web/ajax/browser/browserUpdateAttribute.xhtml  |    82 -
 .../web/ajax/browser/browserUpdateView.xhtml       |   115 -
 jsf-ri/systest/web/ajax/redirecttarget.xhtml       |    53 -
 jsf-ri/systest/web/annotationtest.xhtml            |    49 -
 jsf-ri/systest/web/bar01.jsp                       |    48 -
 jsf-ri/systest/web/bar02.jsp                       |    48 -
 jsf-ri/systest/web/binding01.jsp                   |    57 -
 .../systest/web/clearApplicationMapProperty.xhtml  |    53 -
 jsf-ri/systest/web/commandLinkPrependId.jsp        |    70 -
 jsf-ri/systest/web/component.jsp                   |    61 -
 jsf-ri/systest/web/component01.jsp                 |    69 -
 jsf-ri/systest/web/component02.jsp                 |    52 -
 jsf-ri/systest/web/componentImplicitObject.jsp     |    58 -
 jsf-ri/systest/web/composite/action.xhtml          |    88 -
 jsf-ri/systest/web/composite/actionListener.xhtml  |    88 -
 jsf-ri/systest/web/composite/actionsource.xhtml    |   101 -
 .../systest/web/composite/addPhaseListener.xhtml   |    48 -
 .../systest/web/composite/attachedconverter.xhtml  |   113 -
 .../systest/web/composite/attachedvalidator.xhtml  |   113 -
 .../systest/web/composite/behavior/composite.xhtml |    52 -
 .../boostrapCompositeComponentMetadata.xhtml       |    64 -
 jsf-ri/systest/web/composite/childrenfacets.xhtml  |    69 -
 jsf-ri/systest/web/composite/clientId01.xhtml      |    99 -
 .../systest/web/composite/compActionWithArgs.xhtml |    63 -
 .../compAttributeResourceRelocation.xhtml          |    56 -
 .../web/composite/compAttributeWithArgs.xhtml      |    63 -
 .../composite/compositeInsertChildrenNesting.xhtml |    62 -
 .../compositeInsertChildrenNesting02.xhtml         |    57 -
 .../composite/compositeInsertFacetNesting.xhtml    |    66 -
 .../composite/compositeInsertFacetNesting02.xhtml  |    60 -
 .../compositionWithinCompositeUsingPage.xhtml      |    64 -
 jsf-ri/systest/web/composite/customAction.xhtml    |    88 -
 jsf-ri/systest/web/composite/decorate.xhtml        |    53 -
 .../systest/web/composite/defaultActionNext.xhtml  |    46 -
 .../web/composite/defaultActionUsingPage.xhtml     |    50 -
 .../defaultAttributeMethodExpression.xhtml         |    54 -
 .../defaultAttributeValuesUsingPage.xhtml          |    66 -
 .../web/composite/insertchildrenrequired01.xhtml   |    54 -
 .../web/composite/insertchildrenrequired02.xhtml   |    58 -
 .../web/composite/insertchildrenrequired03.xhtml   |    54 -
 .../web/composite/insertfacetrequired01.xhtml      |    54 -
 .../web/composite/insertfacetrequired02.xhtml      |    58 -
 .../web/composite/insertfacetrequired03.xhtml      |    54 -
 jsf-ri/systest/web/composite/invalidMeArgs.xhtml   |    63 -
 jsf-ri/systest/web/composite/invalidVeArgs.xhtml   |    63 -
 jsf-ri/systest/web/composite/issue1318.xhtml       |    56 -
 ...aTopLevelActionListenerComponentUsingPage.xhtml |    85 -
 .../web/composite/javaTopLevelComponent2.xhtml     |    50 -
 .../composite/javaTopLevelComponentUsingPage.xhtml |    76 -
 jsf-ri/systest/web/composite/jsr276-using.xhtml    |    71 -
 .../web/composite/methodExprNotRequired.xhtml      |    62 -
 .../systest/web/composite/methodExprRequired.xhtml |    62 -
 jsf-ri/systest/web/composite/nesting01.xhtml       |    53 -
 jsf-ri/systest/web/composite/nesting02.xhtml       |    55 -
 jsf-ri/systest/web/composite/nesting03.xhtml       |    55 -
 jsf-ri/systest/web/composite/nesting04.xhtml       |    56 -
 jsf-ri/systest/web/composite/nesting05.xhtml       |    53 -
 jsf-ri/systest/web/composite/nesting06.xhtml       |    53 -
 jsf-ri/systest/web/composite/nesting07.xhtml       |    58 -
 jsf-ri/systest/web/composite/nesting08.xhtml       |    57 -
 .../nestingCompositeExpressionTreeCreation.xhtml   |    57 -
 jsf-ri/systest/web/composite/nestingNav.xhtml      |    49 -
 .../programmaticDefaultAttributeValueAccess.xhtml  |    51 -
 .../web/composite/renderfacetrequired01.xhtml      |    54 -
 .../web/composite/renderfacetrequired02.xhtml      |    57 -
 .../web/composite/renderfacetrequired03.xhtml      |    54 -
 .../systest/web/composite/requiredAttribute.xhtml  |    62 -
 jsf-ri/systest/web/composite/requiredFacet.xhtml   |    62 -
 .../resourceDependencyComponentNextPage.xhtml      |    54 -
 .../resourceDependencyComponentUsingPage.xhtml     |    54 -
 jsf-ri/systest/web/composite/validator.xhtml       |    88 -
 .../web/composite/valueChangeListener.xhtml        |    88 -
 ...ChangeListenerSetPropertyActionListener01.xhtml |    74 -
 jsf-ri/systest/web/conditionalNav.xhtml            |    51 -
 jsf-ri/systest/web/config01.jsp                    |   111 -
 jsf-ri/systest/web/converter.jsp                   |    61 -
 jsf-ri/systest/web/converter01.jsp                 |    65 -
 jsf-ri/systest/web/converter02.jsp                 |    49 -
 jsf-ri/systest/web/converter03.jsp                 |   149 -
 jsf-ri/systest/web/converter04.jsp                 |   345 -
 jsf-ri/systest/web/converter05.jsp                 |   122 -
 jsf-ri/systest/web/converter06.jsp                 |   133 -
 jsf-ri/systest/web/duplicateIds01.jsp              |    59 -
 jsf-ri/systest/web/duplicateIds02.jsp              |    52 -
 jsf-ri/systest/web/duplicateIds03.jsp              |    56 -
 jsf-ri/systest/web/duplicateIds04.jsp              |    62 -
 jsf-ri/systest/web/duplicateIds05.jsp              |    52 -
 jsf-ri/systest/web/dynamicComponents.xhtml         |    65 -
 jsf-ri/systest/web/dynamicComponents00.xhtml       |    64 -
 jsf-ri/systest/web/dynamicComponents01.xhtml       |    69 -
 jsf-ri/systest/web/dynamicComponents02.xhtml       |    66 -
 jsf-ri/systest/web/eagerbean.jsp                   |    60 -
 jsf-ri/systest/web/elfunction.xhtml                |    50 -
 jsf-ri/systest/web/enum-converter-1.jsp            |    89 -
 jsf-ri/systest/web/enum-converter.jsp              |    85 -
 jsf-ri/systest/web/enum01.jsp                      |    52 -
 jsf-ri/systest/web/escape_test.jsp                 |    81 -
 jsf-ri/systest/web/eventTag.xhtml                  |    75 -
 jsf-ri/systest/web/eventTag01.xhtml                |    54 -
 jsf-ri/systest/web/eventTag02.xhtml                |    63 -
 jsf-ri/systest/web/eventTagInvalid.xhtml           |    54 -
 jsf-ri/systest/web/examineViewRoot.jsp             |    66 -
 jsf-ri/systest/web/external01.jsp                  |    96 -
 jsf-ri/systest/web/external02.jsp                  |    96 -
 jsf-ri/systest/web/external03.jsp                  |    96 -
 jsf-ri/systest/web/facelets/Client1.xhtml          |    41 -
 jsf-ri/systest/web/facelets/Client2.xhtml          |    37 -
 jsf-ri/systest/web/facelets/Template1.xhtml        |    42 -
 jsf-ri/systest/web/facelets/Template2.xhtml        |    41 -
 .../web/facelets/componentELAtBuildTime.xhtml      |    63 -
 .../systest/web/facelets/compositionnotfound.xhtml |    60 -
 .../facelets/conditionalCCAttributeRendering.xhtml |    59 -
 jsf-ri/systest/web/facelets/csetTagBody.xhtml      |    55 -
 jsf-ri/systest/web/facelets/decoratenotfound.xhtml |    61 -
 jsf-ri/systest/web/facelets/forEach.xhtml          |    53 -
 jsf-ri/systest/web/facelets/frag1.xhtml            |     8 -
 jsf-ri/systest/web/facelets/frag2.xhtml            |     8 -
 jsf-ri/systest/web/facelets/implicitFacet01.xhtml  |    98 -
 jsf-ri/systest/web/facelets/includenotfound.xhtml  |    53 -
 jsf-ri/systest/web/facelets/issue1313.xhtml        |    80 -
 jsf-ri/systest/web/facelets/keepMessages.xhtml     |    65 -
 jsf-ri/systest/web/facelets/messagePage.xhtml      |    56 -
 .../web/facelets/setpropertyactionlistener1.xhtml  |    60 -
 .../systest/web/facelets/sourcefromdtdconfig.xhtml |    48 -
 jsf-ri/systest/web/facelets/templateComp.xhtml     |    57 -
 jsf-ri/systest/web/facelets/templateDecorate.xhtml |    56 -
 .../systest/web/facelets/templateDecoration2.xhtml |    43 -
 jsf-ri/systest/web/facelets/uirepeat.xhtml         |    68 -
 jsf-ri/systest/web/facelets/uirepeat2.xhtml        |    60 -
 jsf-ri/systest/web/facelets/uirepeat3.xhtml        |    59 -
 jsf-ri/systest/web/facelets/uirepeat4.xhtml        |   106 -
 .../systest/web/facelets/validatorDisabled.xhtml   |    82 -
 .../systest/web/facelets/viewPhaseListeners.xhtml  |    54 -
 jsf-ri/systest/web/facelets/when.xhtml             |    75 -
 jsf-ri/systest/web/facesResponse.jsp               |    56 -
 jsf-ri/systest/web/factoryFinder.jsp               |    60 -
 jsf-ri/systest/web/failure.xhtml                   |    42 -
 jsf-ri/systest/web/flash/flashKeepMessages01.xhtml |    54 -
 jsf-ri/systest/web/flash/flashKeepMessages02.xhtml |    51 -
 jsf-ri/systest/web/flash01.xhtml                   |    76 -
 jsf-ri/systest/web/flash02.xhtml                   |    63 -
 jsf-ri/systest/web/flashReaper.xhtml               |    15 -
 jsf-ri/systest/web/foo01.jsp                       |    48 -
 jsf-ri/systest/web/foo02.jsp                       |    48 -
 jsf-ri/systest/web/forEach01.jsp                   |   112 -
 jsf-ri/systest/web/forEach02.jsp                   |    89 -
 jsf-ri/systest/web/forEach03.jsp                   |   149 -
 jsf-ri/systest/web/forEach03Include.jsp            |    53 -
 jsf-ri/systest/web/forEach04.jsp                   |    59 -
 jsf-ri/systest/web/frag1.jsp                       |    37 -
 jsf-ri/systest/web/frag2.jsp                       |    37 -
 jsf-ri/systest/web/golden/escape_test.txt          |    45 -
 jsf-ri/systest/web/golden/factoryFinder.txt        |    23 -
 jsf-ri/systest/web/golden/hello-mismatch.txt       |     2 -
 jsf-ri/systest/web/golden/hello.txt                |     2 -
 .../web/golden/include-import-interweaving.txt     |   191 -
 jsf-ri/systest/web/golden/interweaving01.txt       |    31 -
 jsf-ri/systest/web/golden/interweaving02.txt       |    31 -
 jsf-ri/systest/web/golden/interweaving03.txt       |    34 -
 jsf-ri/systest/web/golden/interweaving04.txt       |    27 -
 jsf-ri/systest/web/golden/interweaving05.txt       |    31 -
 jsf-ri/systest/web/golden/interweaving06.txt       |    57 -
 jsf-ri/systest/web/golden/interweaving07.txt       |    58 -
 jsf-ri/systest/web/golden/interweaving08.txt       |    28 -
 jsf-ri/systest/web/golden/interweaving09.txt       |    29 -
 jsf-ri/systest/web/golden/interweaving10.txt       |    29 -
 jsf-ri/systest/web/golden/interweaving11.txt       |    27 -
 jsf-ri/systest/web/golden/interweaving12.txt       |    25 -
 jsf-ri/systest/web/golden/managed04.txt            |    23 -
 .../web/golden/regression/AreaTextRowsAttrTest.txt |    16 -
 .../web/golden/regression/InjectUserDefJS.txt      |    15 -
 .../regression/SelectOneManySizeAttrTest.txt       |    18 -
 jsf-ri/systest/web/golden/renderkit02A.txt         |    14 -
 jsf-ri/systest/web/golden/renderkit03A.txt         |    14 -
 jsf-ri/systest/web/golden/resourceBundle02.txt     |     4 -
 jsf-ri/systest/web/golden/resourceBundle03.txt     |    13 -
 jsf-ri/systest/web/golden/resourceBundle04.txt     |     9 -
 jsf-ri/systest/web/golden/resourceInjection01.txt  |    16 -
 .../systest/web/golden/standard/autocomplete.txt   |    21 -
 jsf-ri/systest/web/golden/standard/component01.txt |    14 -
 jsf-ri/systest/web/golden/standard/converter02.txt |     7 -
 jsf-ri/systest/web/golden/standard/converter05.txt |    18 -
 jsf-ri/systest/web/golden/standard/converter06.txt |    68 -
 .../web/golden/standard/dtablecolumnclasses.txt    |   206 -
 jsf-ri/systest/web/golden/standard/messages01.txt  |    32 -
 jsf-ri/systest/web/golden/standard/messages02.txt  |    44 -
 .../web/golden/standard/pgridcolumnclasses.txt     |   187 -
 .../systest/web/golden/standard/selectmany02.txt   |    23 -
 .../systest/web/golden/standard/selectmany03.txt   |    23 -
 .../systest/web/golden/standard/selectmany04.txt   |    12 -
 jsf-ri/systest/web/golden/subview01.txt            |    55 -
 jsf-ri/systest/web/golden/subview02.txt            |    31 -
 jsf-ri/systest/web/golden/subview03.txt            |    54 -
 jsf-ri/systest/web/golden/subview04.txt            |    62 -
 jsf-ri/systest/web/golden/subview05.txt            |    60 -
 jsf-ri/systest/web/golden/subview06.txt            |    63 -
 jsf-ri/systest/web/golden/taglib/attributeTest.txt |    24 -
 .../web/golden/taglib/commandButton_param_test.txt |    25 -
 .../web/golden/taglib/commandButton_test.txt       |    21 -
 .../golden/taglib/commandLink_multiform_test.txt   |    23 -
 .../systest/web/golden/taglib/commandLink_test.txt |    21 -
 .../web/golden/taglib/command_button_test.txt      |    25 -
 .../web/golden/taglib/command_link_test.txt        |    28 -
 jsf-ri/systest/web/golden/verbatim_test.txt        |    51 -
 jsf-ri/systest/web/groovy/groovy.xhtml             |    52 -
 jsf-ri/systest/web/hello.jsp                       |    39 -
 jsf-ri/systest/web/ignore/hello-mismatch.txt       |     1 -
 jsf-ri/systest/web/ignore/ignoreIfContains.txt     |     1 -
 .../web/ignore/taglib/commandButton_test.txt       |     1 -
 .../ignore/taglib/commandLink_multiform_test.txt   |     2 -
 .../systest/web/ignore/taglib/commandLink_test.txt |     2 -
 .../web/ignore/taglib/command_button_test.txt      |     1 -
 .../web/ignore/taglib/command_link_test.txt        |     1 -
 jsf-ri/systest/web/immediate01.jsp                 |    74 -
 .../web/implicitnav/implicitNavEmptyString.xhtml   |    59 -
 .../web/implicitnav/implicitNavRedirect.xhtml      |    55 -
 .../web/implicitnav/implicitNavRedirect02.xhtml    |    52 -
 jsf-ri/systest/web/implicitnav/page01.xhtml        |    62 -
 jsf-ri/systest/web/implicitnav/page02.xhtml        |    57 -
 jsf-ri/systest/web/implicitnav/page03.xhtml        |    58 -
 jsf-ri/systest/web/implicitnav/page04.xhtml        |    57 -
 jsf-ri/systest/web/include-import-interweaving.jsp |   134 -
 jsf-ri/systest/web/include12.jsp                   |    44 -
 jsf-ri/systest/web/index.html                      |    39 -
 jsf-ri/systest/web/input01.jsp                     |    64 -
 jsf-ri/systest/web/interweaving01.jsp              |    63 -
 jsf-ri/systest/web/interweaving02.jsp              |    65 -
 jsf-ri/systest/web/interweaving03.jsp              |    54 -
 jsf-ri/systest/web/interweaving04.jsp              |    67 -
 jsf-ri/systest/web/interweaving05.jsp              |    77 -
 jsf-ri/systest/web/interweaving06.jsp              |    60 -
 jsf-ri/systest/web/interweaving07.jsp              |    61 -
 jsf-ri/systest/web/interweaving08.jsp              |    62 -
 jsf-ri/systest/web/interweaving09.jsp              |    63 -
 jsf-ri/systest/web/interweaving10.jsp              |    62 -
 jsf-ri/systest/web/interweaving11.jsp              |    67 -
 jsf-ri/systest/web/interweaving12.jsp              |    50 -
 jsf-ri/systest/web/jsf2jsp/ajax-gives-500.jspx     |    64 -
 jsf-ri/systest/web/jsf2jsp/body-gives-500.jspx     |    71 -
 jsf-ri/systest/web/jsf2jsp/button-gives-500.jspx   |    58 -
 ...ton-parameter-children-gives-hidden-fields.jspx |    70 -
 jsf-ri/systest/web/jsf2jsp/event-gives-500.jspx    |    67 -
 jsf-ri/systest/web/jsf2jsp/head-gives-500.jspx     |    75 -
 jsf-ri/systest/web/jsf2jsp/link-gives-500.jspx     |    58 -
 jsf-ri/systest/web/jsf2jsp/metadata-gives-500.jspx |    68 -
 .../web/jsf2jsp/outputScript-gives-500.jspx        |    68 -
 .../web/jsf2jsp/outputStylesheet-gives-500.jspx    |    68 -
 .../web/jsf2jsp/resource-ELResolver-gives-500.jspx |    59 -
 jsf-ri/systest/web/jsf2jsp/resources.jspx          |    59 -
 .../web/jsf2jsp/selectManyJsf2Features.jspx        |   240 -
 jsf-ri/systest/web/jsp/addComponent.jsp            |    68 -
 jsf-ri/systest/web/jsp/commandLinkOnClickFalse.jsp |    72 -
 jsf-ri/systest/web/jsp/commandLinkOnClickTrue.jsp  |    72 -
 jsf-ri/systest/web/jsp/form-input-00.jsp           |    55 -
 jsf-ri/systest/web/jsp/form-input-01.jsp           |    55 -
 jsf-ri/systest/web/jsp/form-input-02.jsp           |    99 -
 jsf-ri/systest/web/jsp/formEl.jsp                  |    75 -
 jsf-ri/systest/web/jsp/jsp-dynamic-00.jsp          |    57 -
 jsf-ri/systest/web/jsp/jsp-dynamic-01.jsp          |    60 -
 jsf-ri/systest/web/jsp/jsp-include-00.jsp          |    57 -
 jsf-ri/systest/web/jsp/jsp-include-01.jsp          |    60 -
 jsf-ri/systest/web/jsp/jsp-include-02.jsp          |    60 -
 jsf-ri/systest/web/jsp/jsp-include-03.jsp          |    68 -
 jsf-ri/systest/web/jsp/jsp-include-04.jsp          |    68 -
 jsf-ri/systest/web/jsp/jsp-setProperty-01.jsp      |    73 -
 jsf-ri/systest/web/jsp/jstl-choose-00.jsp          |    55 -
 jsf-ri/systest/web/jsp/jstl-choose-01.jsp          |    71 -
 jsf-ri/systest/web/jsp/jstl-choose-02.jsp          |    77 -
 jsf-ri/systest/web/jsp/jstl-foreach-00.jsp         |    56 -
 jsf-ri/systest/web/jsp/jstl-foreach-01.jsp         |    85 -
 jsf-ri/systest/web/jsp/jstl-if-00.jsp              |    55 -
 jsf-ri/systest/web/jsp/jstl-if-01.jsp              |    60 -
 jsf-ri/systest/web/jsp/jstl-if-02.jsp              |    72 -
 jsf-ri/systest/web/jsp/jstl-if-03.jsp              |    62 -
 jsf-ri/systest/web/jsp/jstl-if-04.jsp              |    69 -
 jsf-ri/systest/web/jsp/jstl-if-05.jsp              |    69 -
 jsf-ri/systest/web/jsp/jstl-import-00.jsp          |    55 -
 jsf-ri/systest/web/jsp/jstl-import-01.jsp          |    60 -
 jsf-ri/systest/web/jsp/jstl-import-01a.jsp         |    42 -
 jsf-ri/systest/web/jsp/jstl-import-01b.jsp         |    42 -
 jsf-ri/systest/web/jsp/jstl-import-02.jsp          |    60 -
 jsf-ri/systest/web/jsp/jstl-import-02a.jsp         |    46 -
 jsf-ri/systest/web/jsp/jstl-import-02b.jsp         |    47 -
 jsf-ri/systest/web/jsp/jstl-import-03.jsp          |    68 -
 jsf-ri/systest/web/jsp/jstl-import-03a.jsp         |    47 -
 jsf-ri/systest/web/jsp/jstl-import-03b.jsp         |    47 -
 jsf-ri/systest/web/jsp/jstl-import-03c.jsp         |    47 -
 jsf-ri/systest/web/jsp/jstl-import-04.jsp          |    75 -
 jsf-ri/systest/web/jsp/jstl-import-04a.jsp         |    49 -
 jsf-ri/systest/web/jsp/jstl-import-04b.jsp         |    50 -
 jsf-ri/systest/web/jsp/jstl-import-04c.jsp         |    50 -
 jsf-ri/systest/web/jsp/missing-view.jsp            |    67 -
 jsf-ri/systest/web/jsp/prependId.jsp               |   141 -
 jsf-ri/systest/web/jsp/selectBooleanValue.jsp      |   113 -
 jsf-ri/systest/web/jsp/selectManyInvalidValue.jsp  |    81 -
 jsf-ri/systest/web/jsp/selectManyMismatchValue.jsp |    78 -
 jsf-ri/systest/web/jsp/selectManyNoValue.jsp       |    78 -
 jsf-ri/systest/web/jsp/selectManyTypeInts.jsp      |    76 -
 jsf-ri/systest/web/jsp/selectOneInvalidValue.jsp   |    81 -
 jsf-ri/systest/web/jsp/selectOneNoValue.jsp        |    79 -
 jsf-ri/systest/web/jsp/selectOneRadioTypeInt.jsp   |    63 -
 .../systest/web/jsp/selectOneRadioTypeInteger.jsp  |    62 -
 jsf-ri/systest/web/jsp/selectOneTypeInt.jsp        |    76 -
 .../web/jsp/testMissingActionListenerMethod.jsp    |    57 -
 jsf-ri/systest/web/jsp/tlvTest01.jsp               |    67 -
 jsf-ri/systest/web/jsp/verbatim-one-test.jsp       |    68 -
 jsf-ri/systest/web/jsp/verbatim-test.jsp           |    69 -
 jsf-ri/systest/web/jsp/verbatim-two-test.jsp       |    70 -
 jsf-ri/systest/web/listener.jsp                    |   141 -
 jsf-ri/systest/web/listenerTagListenersBinding.jsp |    81 -
 .../web/listenerTagListenersBindingType.jsp        |    81 -
 jsf-ri/systest/web/listenerTagListenersType.jsp    |    81 -
 jsf-ri/systest/web/managed01.jsp                   |   134 -
 jsf-ri/systest/web/managed02.jsp                   |   129 -
 jsf-ri/systest/web/managed03.jsp                   |    60 -
 jsf-ri/systest/web/managed04.jsp                   |    64 -
 jsf-ri/systest/web/managed07.jsp                   |    69 -
 jsf-ri/systest/web/managed08.jsp                   |   107 -
 jsf-ri/systest/web/message01.jsp                   |   116 -
 jsf-ri/systest/web/message02.jsp                   |   101 -
 jsf-ri/systest/web/message03.jsp                   |   126 -
 jsf-ri/systest/web/message04.jsp                   |   127 -
 jsf-ri/systest/web/methodref01.jsp                 |    93 -
 jsf-ri/systest/web/methodref02.jsp                 |   108 -
 jsf-ri/systest/web/phaseListener01.jsp             |    91 -
 jsf-ri/systest/web/phaseListener01A.jsp            |    45 -
 jsf-ri/systest/web/positiveTagFile.jsp             |    94 -
 jsf-ri/systest/web/redirect.jsp                    |    55 -
 jsf-ri/systest/web/redirect1.jsp                   |    56 -
 .../web/regression/AreaTextRowsAttrTest.jsp        |    57 -
 jsf-ri/systest/web/regression/InjectUserDefJS.jsp  |    60 -
 .../web/regression/SelectOneManySizeAttrTest.jsp   |    61 -
 .../web/regression/uninstallListeners.xhtml        |    54 -
 .../web/regression/verifyBuildBeforeRestore.xhtml  |    59 -
 .../systest/web/render/commandButtonButton.xhtml   |    70 -
 jsf-ri/systest/web/render/messageRender.xhtml      |   104 -
 jsf-ri/systest/web/render/outputScriptQuery.xhtml  |    54 -
 .../web/render/outputScriptStyleNested.xhtml       |   164 -
 .../systest/web/render/selectStarNoSelection.jspx  |   170 -
 .../systest/web/render/selectStarNoSelection.xhtml |   160 -
 .../selectStarSelectionHideNoSelection.xhtml       |   160 -
 jsf-ri/systest/web/renderkit-default-clear.jsp     |    47 -
 jsf-ri/systest/web/renderkit-default.jsp           |    47 -
 jsf-ri/systest/web/renderkit01.jsp                 |   168 -
 jsf-ri/systest/web/renderkit02.jsp                 |    92 -
 jsf-ri/systest/web/renderkit02A.jsp                |    46 -
 jsf-ri/systest/web/renderkit03.jsp                 |    86 -
 jsf-ri/systest/web/renderkit03A.jsp                |    46 -
 jsf-ri/systest/web/renderkit04.jsp                 |    59 -
 jsf-ri/systest/web/renderkit05.jsp                 |    59 -
 jsf-ri/systest/web/renderkit06.jsp                 |    59 -
 jsf-ri/systest/web/replaceViewRoot.jsp             |    60 -
 jsf-ri/systest/web/resourceBundle01.jsp            |    37 -
 jsf-ri/systest/web/resourceBundle02.jsp            |    40 -
 jsf-ri/systest/web/resourceBundle03.jsp            |    49 -
 jsf-ri/systest/web/resourceBundle04.jsp            |    45 -
 jsf-ri/systest/web/resourceInjection01.jsp         |    57 -
 jsf-ri/systest/web/resourcerelocation.xhtml        |    56 -
 jsf-ri/systest/web/resourcerelocation2.xhtml       |    56 -
 jsf-ri/systest/web/resourcerelocation3.xhtml       |    51 -
 jsf-ri/systest/web/resourcerelocation4.xhtml       |    51 -
 jsf-ri/systest/web/resources/ajax/echo1.js         |    56 -
 jsf-ri/systest/web/resources/ajax/eval.js          |     3 -
 .../systest/web/resources/ajax/evalTestFile.xhtml  |    60 -
 .../web/resources/ajax/evalTestInline.xhtml        |    72 -
 jsf-ri/systest/web/resources/case1.js              |     3 -
 jsf-ri/systest/web/resources/case11.css            |     3 -
 jsf-ri/systest/web/resources/case12.css            |     3 -
 jsf-ri/systest/web/resources/case14.css            |     3 -
 jsf-ri/systest/web/resources/case3.js              |     3 -
 jsf-ri/systest/web/resources/case4.js              |     3 -
 jsf-ri/systest/web/resources/case6.js              |     3 -
 jsf-ri/systest/web/resources/case9.css             |     3 -
 .../composite/actionListenerWrapper1.xhtml         |    66 -
 .../composite/actionListenerWrapper2.xhtml         |    66 -
 .../composite/actionListenerWrapper3.xhtml         |    66 -
 .../composite/actionListenerWrapper4.xhtml         |    66 -
 .../web/resources/composite/actionSource1.xhtml    |    60 -
 .../web/resources/composite/actionSource2.xhtml    |    60 -
 .../web/resources/composite/actionSource3.xhtml    |    61 -
 .../web/resources/composite/actionSource4.xhtml    |    63 -
 .../web/resources/composite/actionWrapper1.xhtml   |    66 -
 .../web/resources/composite/actionWrapper2.xhtml   |    66 -
 .../web/resources/composite/actionWrapper3.xhtml   |    66 -
 .../web/resources/composite/actionWrapper4.xhtml   |    66 -
 .../web/resources/composite/addPhaseListener.xhtml |    63 -
 .../web/resources/composite/argAction.xhtml        |    68 -
 .../resources/composite/ccParentExpression.xhtml   |    66 -
 .../web/resources/composite/cc_template.xhtml      |    14 -
 .../resources/composite/childrenAndFacets.xhtml    |    73 -
 jsf-ri/systest/web/resources/composite/compA.xhtml |    56 -
 .../composite/compAttributeWithArgs.xhtml          |    65 -
 jsf-ri/systest/web/resources/composite/compB.xhtml |    56 -
 jsf-ri/systest/web/resources/composite/compD.xhtml |    59 -
 jsf-ri/systest/web/resources/composite/compE.xhtml |    55 -
 .../web/resources/composite/compWithArgs.xhtml     |    65 -
 .../composite/componentWithMetadata.xhtml          |   185 -
 .../resources/composite/compositeComponentEL.xhtml |    63 -
 .../composite/compositionWithinComposite.xhtml     |    60 -
 .../composite/conditionalAttributeRendering.xhtml  |    60 -
 .../web/resources/composite/converter1.xhtml       |    60 -
 .../web/resources/composite/converter2.xhtml       |    60 -
 .../web/resources/composite/converter3.xhtml       |    61 -
 .../web/resources/composite/converter4.xhtml       |    63 -
 .../web/resources/composite/customAction.xhtml     |    62 -
 .../resources/composite/customActionListener.xhtml |    62 -
 .../resources/composite/customActionWrapper1.xhtml |    66 -
 .../resources/composite/customActionWrapper2.xhtml |    66 -
 .../resources/composite/customActionWrapper3.xhtml |    66 -
 .../resources/composite/customActionWrapper4.xhtml |    66 -
 .../resources/composite/customCustomAction.xhtml   |    62 -
 .../web/resources/composite/customValidator.xhtml  |    62 -
 .../composite/customValueChangeListener.xhtml      |    62 -
 .../systest/web/resources/composite/decorate.xhtml |    60 -
 .../web/resources/composite/defaultAction.xhtml    |    52 -
 .../systest/web/resources/composite/facetA.xhtml   |    58 -
 .../systest/web/resources/composite/facetB.xhtml   |    60 -
 .../systest/web/resources/composite/facetD.xhtml   |    60 -
 .../systest/web/resources/composite/facetE.xhtml   |    57 -
 .../web/resources/composite/groovyBacked.xhtml     |    53 -
 .../web/resources/composite/inlinedStyle1.xhtml    |    67 -
 .../web/resources/composite/inlinedStyle2.xhtml    |    80 -
 .../composite/inlinedStyleAndScript.xhtml          |    68 -
 .../composite/insertChildrenRequiredFalse.xhtml    |    60 -
 .../composite/insertChildrenRequiredTrue.xhtml     |    60 -
 .../composite/insertFacetRequiredFalse.xhtml       |    63 -
 .../composite/insertFacetRequiredTrue.xhtml        |    60 -
 .../web/resources/composite/invalidMeArgs.xhtml    |    64 -
 .../web/resources/composite/invalidVeArgs.xhtml    |    64 -
 .../javaBackedComponentDefaultAttrValues.xhtml     |    72 -
 .../javaTopLevelActionListenerComponent.xhtml      |    83 -
 .../composite/javaTopLevelComponent.xhtml          |    98 -
 .../web/resources/composite/jsr276Correct01.xhtml  |    72 -
 .../resources/composite/jsr276Incorrect01.xhtml    |    70 -
 .../web/resources/composite/meDefaults.xhtml       |    84 -
 .../systest/web/resources/composite/myaction.xhtml |    62 -
 .../systest/web/resources/composite/nesting.xhtml  |    60 -
 .../systest/web/resources/composite/nesting1.xhtml |    63 -
 .../web/resources/composite/nesting10.xhtml        |    60 -
 .../web/resources/composite/nesting11.xhtml        |    72 -
 .../systest/web/resources/composite/nesting2.xhtml |    61 -
 .../systest/web/resources/composite/nesting3.xhtml |    61 -
 .../systest/web/resources/composite/nesting4.xhtml |    62 -
 .../systest/web/resources/composite/nesting5.xhtml |    63 -
 .../systest/web/resources/composite/nesting6.xhtml |    64 -
 .../systest/web/resources/composite/nesting7.xhtml |    84 -
 .../systest/web/resources/composite/nesting8.xhtml |    69 -
 .../systest/web/resources/composite/nesting9.xhtml |    67 -
 .../web/resources/composite/notrequired.xhtml      |    60 -
 .../composite/renderFacetRequiredFalse.xhtml       |    58 -
 .../composite/renderFacetRequiredTrue.xhtml        |    58 -
 .../systest/web/resources/composite/required.xhtml |    60 -
 .../web/resources/composite/required01.xhtml       |    61 -
 .../web/resources/composite/requiredFacet.xhtml    |    61 -
 .../composite/resourceDependencyComponent.xhtml    |    74 -
 .../web/resources/composite/showClientId01.xhtml   |    65 -
 .../web/resources/composite/validator1.xhtml       |    60 -
 .../web/resources/composite/validator2.xhtml       |    60 -
 .../web/resources/composite/validator3.xhtml       |    61 -
 .../web/resources/composite/validator4.xhtml       |    63 -
 .../resources/composite/validatorWrapper1.xhtml    |    66 -
 .../resources/composite/validatorWrapper2.xhtml    |    66 -
 .../resources/composite/validatorWrapper3.xhtml    |    66 -
 .../resources/composite/validatorWrapper4.xhtml    |    66 -
 .../valueChangeSetPropertyActionListener.xhtml     |    64 -
 .../resources/composite/valueChangeWrapper1.xhtml  |    66 -
 .../resources/composite/valueChangeWrapper2.xhtml  |    66 -
 .../resources/composite/valueChangeWrapper3.xhtml  |    66 -
 .../resources/composite/valueChangeWrapper4.xhtml  |    66 -
 .../systest/web/resources/composite/wrapper.xhtml  |    62 -
 .../web/resources/ezbehaviors/compositeTest.xhtml  |    86 -
 jsf-ri/systest/web/resources/simple.css            |     3 -
 jsf-ri/systest/web/resources/simple.js             |     3 -
 jsf-ri/systest/web/resources/simple2.js            |     3 -
 .../systest/web/resources/vLibrary/2_0/duke-nv.gif |   Bin 1073 -> 0 bytes
 .../web/resources/vLibrary/2_0/duke.gif/1_0.gif    |   Bin 1073 -> 0 bytes
 .../web/resources/vLibrary/2_0/duke.gif/1_1.gif    |   Bin 1073 -> 0 bytes
 .../web/resources/vLibrary/2_0/duke2.gif/1_1       |   Bin 1073 -> 0 bytes
 jsf-ri/systest/web/selectItemEscape.jsp            |   112 -
 jsf-ri/systest/web/session-invalidator.jsp         |    91 -
 jsf-ri/systest/web/setApplicationMapProperty.xhtml |    53 -
 jsf-ri/systest/web/standard/autocomplete.jsp       |    58 -
 .../web/standard/checkboxSubmittedValue.xhtml      |    55 -
 jsf-ri/systest/web/standard/clinknoform.jsp        |    59 -
 jsf-ri/systest/web/standard/component01.jsp        |    94 -
 .../systest/web/standard/dtablecolumnclasses.jsp   |   261 -
 jsf-ri/systest/web/standard/dtablemultiforms.jsp   |    62 -
 jsf-ri/systest/web/standard/dtablerowclasses.jsp   |    78 -
 .../web/standard/dtablevarnotoverwritten.jsp       |    53 -
 .../systest/web/standard/dtablewithemptybody.jsp   |   102 -
 .../systest/web/standard/linkTypeAttribute.xhtml   |    51 -
 jsf-ri/systest/web/standard/messages01.jsp         |   103 -
 jsf-ri/systest/web/standard/messages02.jsp         |   112 -
 jsf-ri/systest/web/standard/nav1.xhtml             |    49 -
 jsf-ri/systest/web/standard/nav2.xhtml             |    49 -
 jsf-ri/systest/web/standard/outcometarget01.xhtml  |    88 -
 jsf-ri/systest/web/standard/pgridcolumnclasses.jsp |   191 -
 .../selectOneLiteralHideNoSelectionOption.xhtml    |   173 -
 ...ralHideNoSelectionOptionInSelectItemGroup.xhtml |   161 -
 ...ctOneValueExpressionHideNoSelectionOption.xhtml |    76 -
 jsf-ri/systest/web/standard/selectmany01.jsp       |    62 -
 jsf-ri/systest/web/standard/selectmany02.jsp       |    61 -
 jsf-ri/systest/web/standard/selectmany03.jsp       |    60 -
 jsf-ri/systest/web/standard/selectmany04.jsp       |    53 -
 jsf-ri/systest/web/standard/selectmany05.xhtml     |   229 -
 jsf-ri/systest/web/standard/selectonemanyenum.jsp  |    93 -
 jsf-ri/systest/web/state/dynamicAddition.xhtml     |    81 -
 jsf-ri/systest/web/state/dynamicAddition2.xhtml    |    55 -
 .../web/state/dynamicAdditionDeletion.xhtml        |    53 -
 .../state/dynamicAdditionTransientSubTree.xhtml    |    54 -
 jsf-ri/systest/web/state/dynamicDeletion.xhtml     |    81 -
 jsf-ri/systest/web/subview01.jsp                   |    65 -
 jsf-ri/systest/web/subview02.jsp                   |    71 -
 jsf-ri/systest/web/subview03.jsp                   |    64 -
 jsf-ri/systest/web/subview04.jsp                   |    70 -
 jsf-ri/systest/web/subview05.jsp                   |    60 -
 jsf-ri/systest/web/subview06.jsp                   |    63 -
 jsf-ri/systest/web/subviewIterator01.jsp           |    56 -
 jsf-ri/systest/web/subviewIterator02.jsp           |    53 -
 jsf-ri/systest/web/success.xhtml                   |    42 -
 jsf-ri/systest/web/tag-ivars1.jsp                  |    76 -
 jsf-ri/systest/web/tag-ivars2.jsp                  |    73 -
 jsf-ri/systest/web/taglib/attributeTest.jsp        |    64 -
 .../web/taglib/commandButton_param_test.jsp        |    69 -
 jsf-ri/systest/web/taglib/commandButton_test.jsp   |    59 -
 .../web/taglib/commandLink_multiform_test.jsp      |    74 -
 jsf-ri/systest/web/taglib/commandLink_test.jsp     |    60 -
 jsf-ri/systest/web/taglib/command_button_test.jsp  |    58 -
 jsf-ri/systest/web/taglib/command_link_test.jsp    |    60 -
 jsf-ri/systest/web/test01.jsp                      |    50 -
 jsf-ri/systest/web/validator.jsp                   |    61 -
 jsf-ri/systest/web/validator01.jsp                 |    66 -
 jsf-ri/systest/web/validator02.jsp                 |   133 -
 jsf-ri/systest/web/validator03.jsp                 |   118 -
 jsf-ri/systest/web/validator04.jsp                 |   103 -
 jsf-ri/systest/web/validator05.xhtml               |    65 -
 jsf-ri/systest/web/valueBinding01.jsp              |    71 -
 jsf-ri/systest/web/valueBinding02.jsp              |    73 -
 jsf-ri/systest/web/valueBinding03.jsp              |    73 -
 jsf-ri/systest/web/valueBinding04.jsp              |    73 -
 jsf-ri/systest/web/valueBinding05.jsp              |    73 -
 jsf-ri/systest/web/valueBinding06.jsp              |    73 -
 jsf-ri/systest/web/valueBinding07.jsp              |    75 -
 jsf-ri/systest/web/valueChangeListener.jsp         |    93 -
 jsf-ri/systest/web/valueChangeListener02.jsp       |    60 -
 jsf-ri/systest/web/verbatim_test.jsp               |    84 -
 jsf-ri/systest/web/viewLocale.jsp                  |    72 -
 jsf-ri/systest/web/viewParameters/events.xhtml     |    39 -
 jsf-ri/systest/web/viewParameters/page01.xhtml     |    72 -
 jsf-ri/systest/web/viewParameters/page02.xhtml     |   104 -
 jsf-ri/systest/web/viewParameters/page03.xhtml     |    62 -
 jsf-ri/systest/web/viewParameters/template.xhtml   |    54 -
 jsf-ri/systest/web/viewTagListeners.jsp            |    82 -
 .../com/sun/faces/AdapterPropertyResolver.java     |   107 -
 jsf-ri/test/com/sun/faces/CustomSystemEvent.java   |    49 -
 jsf-ri/test/com/sun/faces/CustomerBean.java        |   128 -
 .../test/com/sun/faces/SystemEventListener1.java   |    55 -
 .../test/com/sun/faces/SystemEventListener2.java   |    55 -
 jsf-ri/test/com/sun/faces/TestActionListener.java  |    45 -
 jsf-ri/test/com/sun/faces/TestBean.java            |    62 -
 jsf-ri/test/com/sun/faces/TestComponent.java       |    52 -
 jsf-ri/test/com/sun/faces/TestConverter.java       |    47 -
 jsf-ri/test/com/sun/faces/TestELResolver.java      |    95 -
 jsf-ri/test/com/sun/faces/TestExceptionBean.java   |    61 -
 jsf-ri/test/com/sun/faces/TestFirstConverter.java  |    45 -
 jsf-ri/test/com/sun/faces/TestFirstValidator.java  |    45 -
 jsf-ri/test/com/sun/faces/TestForm.java            |    49 -
 jsf-ri/test/com/sun/faces/TestMessages.properties  |     6 -
 .../test/com/sun/faces/TestNavigationHandler.java  |    45 -
 .../com/sun/faces/TestOldVariableResolver.java     |    65 -
 .../test/com/sun/faces/TestPropertyResolver.java   |   101 -
 .../sun/faces/TestResourceBundle2_de.properties    |     2 -
 .../com/sun/faces/TestResourceBundle_de.properties |     4 -
 .../com/sun/faces/TestResourceBundle_en.properties |     9 -
 jsf-ri/test/com/sun/faces/TestSecondConverter.java |    45 -
 jsf-ri/test/com/sun/faces/TestSecondValidator.java |    45 -
 .../test/com/sun/faces/TestVariableResolver.java   |    65 -
 jsf-ri/test/com/sun/faces/TestViewHandler.java     |    45 -
 .../faces/application/ActionListenerTestImpl.java  |    41 -
 .../faces/application/DeprStateManagerImpl.java    |   507 -
 jsf-ri/test/com/sun/faces/application/NavBean.java |    49 -
 .../application/NavigationHandlerTestImpl.java     |    41 -
 .../application/PropertyResolverTestImpl.java      |    58 -
 .../faces/application/TestActionListenerImpl.java  |   200 -
 .../com/sun/faces/application/TestAdapters.java    |   638 -
 .../faces/application/TestApplicationEvents.java   |   563 -
 .../application/TestApplicationFactoryImpl.java    |   139 -
 .../sun/faces/application/TestApplicationImpl.java |   968 -
 .../application/TestApplicationImpl_Config.java    |   609 -
 .../sun/faces/application/TestFacesMessage.java    |   171 -
 .../application/TestHASDeprStateManagerImpl.java   |   146 -
 .../faces/application/TestHAStateManagerImpl.java  |   152 -
 .../com/sun/faces/application/TestInjection.java   |   213 -
 .../application/TestJSF2NavigationHandler.java     |   302 -
 .../faces/application/TestNavigationHandler.java   |   464 -
 .../faces/application/TestStateManagerImpl.java    |   355 -
 .../sun/faces/application/TestViewHandlerImpl.java |   645 -
 .../application/VariableResolverTestImpl.java      |    47 -
 .../sun/faces/application/ViewHandlerTestImpl.java |    41 -
 .../resource/TestResourceHandlerImpl.java          |  1032 -
 .../application/resource/TestResourceImpl.java     |   497 -
 .../application/resource/TestResourceManager.java  |   426 -
 .../sun/faces/component/visit/TestTreeVisit.java   |   181 -
 .../component/visit/TestTreeWithUIDataVisit.java   |   269 -
 .../component/visit/TestTreeWithUIRepeatVisit.java |   201 -
 .../com/sun/faces/config/ClaimConfiguration.java   |    53 -
 .../faces/config/ConfigureListenerTestCase.java    |  1001 -
 .../sun/faces/config/NewCustomerFormHandler.java   |   136 -
 .../test/com/sun/faces/config/NonManagedBean.java  |    43 -
 jsf-ri/test/com/sun/faces/config/SimpleBean.java   |   103 -
 .../com/sun/faces/config/SimplePhaseListener.java  |    72 -
 .../com/sun/faces/config/StoreServletContext.java  |   351 -
 .../test/com/sun/faces/config/TestComponent.java   |    52 -
 .../com/sun/faces/config/TestConfigListener.java   |    87 -
 .../test/com/sun/faces/config/TestConverter.java   |    48 -
 .../sun/faces/config/TestFacesConfigOrdering.java  |   650 -
 .../com/sun/faces/config/TestFactoryInjection.java |   874 -
 .../sun/faces/config/TestManagedBeanFactory.java   |  1104 -
 jsf-ri/test/com/sun/faces/config/TestRenderer.java |    48 -
 .../test/com/sun/faces/config/TestValidator.java   |    48 -
 .../sun/faces/context/TestExceptionHandler.java    |   394 -
 .../context/TestExternalContextFactoryImpl.java    |   117 -
 .../sun/faces/context/TestExternalContextImpl.java |  1811 --
 .../faces/context/TestFacesContextFactoryImpl.java |   137 -
 .../sun/faces/context/TestFacesContextImpl.java    |   714 -
 .../test/com/sun/faces/convert/TestConverters.java |   989 -
 jsf-ri/test/com/sun/faces/el/ElBean.java           |   291 -
 .../el/TestFacesResourceBundleELResolver.java      |   210 -
 .../com/sun/faces/el/TestMethodExpressionImpl.java |   169 -
 jsf-ri/test/com/sun/faces/el/TestMethodRef.java    |   168 -
 .../com/sun/faces/el/TestNestedELResolver.java     |   210 -
 .../com/sun/faces/el/TestPropertyResolverImpl.java |   779 -
 .../com/sun/faces/el/TestResourceELResolver.java   |   117 -
 .../com/sun/faces/el/TestValueBindingImpl.java     |  1141 -
 .../sun/faces/el/TestValueBindingImpl_Model.java   |   341 -
 .../com/sun/faces/el/TestValueExpressionImpl.java  |  1177 -
 .../faces/el/TestValueExpressionImpl_Model.java    |   344 -
 .../com/sun/faces/el/TestVariableResolverImpl.java |   303 -
 jsf-ri/test/com/sun/faces/el/impl/Bean1.java       |   456 -
 jsf-ri/test/com/sun/faces/el/impl/Bean2.java       |   104 -
 jsf-ri/test/com/sun/faces/el/impl/Bean2Editor.java |    80 -
 .../com/sun/faces/el/impl/PageContextImpl.jsp12    |   330 -
 .../com/sun/faces/el/impl/PageContextImpl.jsp2     |   338 -
 jsf-ri/test/com/sun/faces/el/impl/TestELImpl.java  |   720 -
 .../com/sun/faces/el/impl/TestUnifiedELImpl.java   |   717 -
 .../test/com/sun/faces/el/impl/beans/Factory.java  |   100 -
 .../com/sun/faces/el/impl/beans/PrivateBean1a.java |    68 -
 .../com/sun/faces/el/impl/beans/PrivateBean2b.java |    70 -
 .../com/sun/faces/el/impl/beans/PrivateBean2c.java |    67 -
 .../com/sun/faces/el/impl/beans/PrivateBean2d.java |    69 -
 .../com/sun/faces/el/impl/beans/PublicBean1.java   |    69 -
 .../com/sun/faces/el/impl/beans/PublicBean1b.java  |    69 -
 .../com/sun/faces/el/impl/beans/PublicBean2a.java  |    70 -
 .../sun/faces/el/impl/beans/PublicInterface2.java  |    67 -
 jsf-ri/test/com/sun/faces/io/TestIO.java           |   184 -
 .../lifecycle/TestApplyRequestValuesPhase.java     |   249 -
 .../lifecycle/TestInvokeApplicationPhase.java      |   115 -
 .../faces/lifecycle/TestLifecycleFactoryImpl.java  |   160 -
 .../com/sun/faces/lifecycle/TestLifecycleImpl.java |   547 -
 .../faces/lifecycle/TestLifecycleImpl_initial.java |   156 -
 jsf-ri/test/com/sun/faces/lifecycle/TestPhase.java |   155 -
 .../com/sun/faces/lifecycle/TestProcessEvents.java |   373 -
 .../lifecycle/TestProcessValidationsPhase.java     |   178 -
 .../faces/lifecycle/TestRenderResponsePhase.java   |   220 -
 .../faces/lifecycle/TestRestoreViewFromPage.java   |   158 -
 .../sun/faces/lifecycle/TestRestoreViewPhase.java  |   316 -
 .../sun/faces/lifecycle/TestSaveStateInPage.java   |   263 -
 .../lifecycle/TestUpdateModelValuesPhase.java      |   308 -
 .../com/sun/faces/mock/MockServletContext.java     |   401 -
 .../com/sun/faces/renderkit/TestContentTypes.java  |   159 -
 .../com/sun/faces/renderkit/TestRenderKit.java     |   519 -
 .../sun/faces/renderkit/TestRenderKitFactory.java  |   197 -
 .../sun/faces/renderkit/TestRenderKitUtils.java    |    97 -
 .../html_basic/HtmlResponseWriterTest.java         |   139 -
 .../renderkit/html_basic/MenuRendererTestCase.java |   165 -
 .../renderkit/html_basic/TestComponentType.java    |   123 -
 .../html_basic/TestHtmlResponseWriter.java         |   599 -
 .../html_basic/TestRendererConversions.java        |   177 -
 .../renderkit/html_basic/TestRenderers_1.java      |   643 -
 .../renderkit/html_basic/TestRenderers_2.java      |  1419 -
 .../renderkit/html_basic/TestRenderers_3.java      |   462 -
 .../renderkit/html_basic/TestRenderers_4.java      |   279 -
 .../groovy/MojarraGroovyClassLoaderTest.java       |   103 -
 .../com/sun/faces/taglib/TestCoreValidator.java    |    48 -
 .../sun/faces/taglib/TestHtmlBasicValidator.java   |    48 -
 jsf-ri/test/com/sun/faces/taglib/TlvTestCase.java  |   102 -
 .../taglib/jsf_core/TestCoreTagsVBEnabled.java     |   235 -
 .../faces/taglib/jsf_core/TestLoadBundleTag.java   |   203 -
 .../faces/taglib/jsf_core/TestValidatorTags.java   |   282 -
 .../com/sun/faces/taglib/jsf_core/TestViewTag.java |   217 -
 .../com/sun/faces/util/MultiThreadTestRunner.java  |   144 -
 jsf-ri/test/com/sun/faces/util/TestHtmlUtils.java  |   164 -
 .../test/com/sun/faces/util/TestLRUMap_local.java  |   113 -
 .../com/sun/faces/util/TestMessageFactoryImpl.java |   191 -
 jsf-ri/test/com/sun/faces/util/TestUtil.java       |   404 -
 jsf-ri/test/com/sun/faces/util/TestUtil_local.java |   102 -
 .../test/com/sun/faces/util/TestUtil_messages.java |   303 -
 jsf-ri/test/com/sun/faces/util/TreeStructure.java  |   167 -
 jsf-ri/test/debugrunner.bat                        |    73 -
 jsf-ri/web/test/CorrectRenderersResponse           |    54 -
 jsf-ri/web/test/CorrectRenderersResponse_2         |    11 -
 jsf-ri/web/test/CorrectRenderersResponse_3         |    32 -
 jsf-ri/web/test/CorrectRenderersResponse_4         |    24 -
 jsf-ri/web/test/Faces_Basic.jsf                    |    64 -
 jsf-ri/web/test/Faces_Basic.uiml                   |   123 -
 jsf-ri/web/test/Faces_Basic_correct_jsp            |    65 -
 jsf-ri/web/test/Faces_Basic_correct_uiml           |    65 -
 jsf-ri/web/test/Faces_Basic_correct_xul_tree       |    97 -
 jsf-ri/web/test/Faces_Basic_uiml.jsf               |    64 -
 jsf-ri/web/test/GenericPhase_correct               |     3 -
 jsf-ri/web/test/RenderResponse_correct             |   748 -
 jsf-ri/web/test/RestoreView_correct                |    11 -
 jsf-ri/web/test/SaveState_correct                  |    55 -
 jsf-ri/web/test/TestCoreTagVBEnabled.jsp           |   120 -
 jsf-ri/web/test/TestLifecycleImpl.html             |    20 -
 jsf-ri/web/test/TestLifecycleImpl_initial_correct  |    24 -
 jsf-ri/web/test/TestRenderKit_correct              |     7 -
 jsf-ri/web/test/TestRenderResponsePhase.jsp        |   917 -
 jsf-ri/web/test/TestRendererAttributes_correct     |  6395 ----
 jsf-ri/web/test/TestRenderersFromJsp.jsp           |    79 -
 jsf-ri/web/test/TestRenderersFromJsp_correct       |    38 -
 jsf-ri/web/test/TestSaveState.jsp                  |   119 -
 jsf-ri/web/test/TestValidatorTags.jsp              |   169 -
 jsf-ri/web/test/TestViewHandlerImpl_correct        |    24 -
 jsf-ri/web/test/TestViewTag.jsp                    |    78 -
 jsf-ri/web/test/TestViewTag2.jsp                   |    66 -
 jsf-ri/web/test/WEB-INF/config-lists-and-maps.xml  |   134 -
 jsf-ri/web/test/WEB-INF/embed-config.xml           |    72 -
 jsf-ri/web/test/WEB-INF/extra-config.xml           |    72 -
 jsf-ri/web/test/WEB-INF/faces-config-1.0.xml       |   422 -
 jsf-ri/web/test/WEB-INF/faces-config-empty.xml     |    45 -
 jsf-ri/web/test/WEB-INF/faces-config.xml           |   483 -
 jsf-ri/web/test/WEB-INF/faces-navigation-2.xml     |    88 -
 jsf-ri/web/test/WEB-INF/faces-navigation.xml       |   319 -
 jsf-ri/web/test/WEB-INF/navigation-cases-2.xml     |    94 -
 jsf-ri/web/test/WEB-INF/navigation-cases.xml       |   294 -
 jsf-ri/web/test/WEB-INF/none-scoped-beans.xml      |    73 -
 jsf-ri/web/test/WEB-INF/renderkit1.xml             |    49 -
 jsf-ri/web/test/WEB-INF/webinfAbsolute1.xml        |    49 -
 jsf-ri/web/test/WEB-INF/webinfAbsolute2.xml        |    50 -
 jsf-ri/web/test/WEB-INF/webinfAbsolute3.xml        |    44 -
 jsf-ri/web/test/components.jsp                     |   216 -
 .../config-with-failing-property-conversion.xml    |    60 -
 jsf-ri/web/test/config1.xml                        |    73 -
 jsf-ri/web/test/config2.xml                        |    57 -
 jsf-ri/web/test/duke.gif                           |   Bin 1073 -> 0 bytes
 jsf-ri/web/test/evaluationTests.txt                |   940 -
 jsf-ri/web/test/evaluationTestsOutput.txt          |  2028 --
 jsf-ri/web/test/greeting.jsp                       |    56 -
 jsf-ri/web/test/locale-config.xml                  |    56 -
 jsf-ri/web/test/locale-config1.xml                 |    56 -
 jsf-ri/web/test/locale-config2.xml                 |    56 -
 jsf-ri/web/test/parserTests.txt                    |   117 -
 jsf-ri/web/test/parserTestsOutput.txt              |   194 -
 jsf-ri/web/test/resources/duke-nv.gif              |   Bin 1073 -> 0 bytes
 jsf-ri/web/test/resources/duke.gif/1_0.gif         |   Bin 1073 -> 0 bytes
 jsf-ri/web/test/resources/duke.gif/1_1.gif         |   Bin 1073 -> 0 bytes
 jsf-ri/web/test/resources/nvLibrary/duke-nv.gif    |   Bin 1073 -> 0 bytes
 .../web/test/resources/nvLibrary/duke.gif/1_0.gif  |   Bin 1073 -> 0 bytes
 .../web/test/resources/nvLibrary/duke.gif/1_1.gif  |   Bin 1073 -> 0 bytes
 .../test/resources/nvLibrary/images/duke-nv.gif    |   Bin 1073 -> 0 bytes
 jsf-ri/web/test/resources/simple-with-el.css       |     6 -
 jsf-ri/web/test/resources/simple.css               |     2 -
 jsf-ri/web/test/resources/simple.txt               |     1 -
 jsf-ri/web/test/resources/vLibrary/2_0/duke-nv.gif |   Bin 1073 -> 0 bytes
 .../test/resources/vLibrary/2_0/duke.gif/1_0.gif   |   Bin 1073 -> 0 bytes
 .../test/resources/vLibrary/2_0/duke.gif/1_1.gif   |   Bin 1073 -> 0 bytes
 .../web/test/resources/vLibrary/2_0/duke2.gif/1_1  |   Bin 1073 -> 0 bytes
 jsf-ri/web/test/runtime-components.xml             |    53 -
 jsf-ri/web/test/test.xhtml                         |    49 -
 jsf-ri/web/test/testWhile.jsp                      |    62 -
 jsf-tools/COPYRIGHT                                |     8 -
 jsf-tools/LICENSE.html                             |   195 -
 .../conf/FaceletsHtmlBasicTaglib21.properties      |   133 -
 jsf-tools/conf/HtmlBasicTaglib12.properties        |   148 -
 jsf-tools/conf/HtmlBasicTaglib21.properties        |   133 -
 jsf-tools/conf/TAG-DEF-12.txt                      |    55 -
 jsf-tools/conf/TAG-DEF-21.txt                      |   111 -
 jsf-tools/doc/mockup/DEFAULT/CommandLink.html      |   169 -
 .../doc/mockup/DEFAULT/renderkit-summary.html      |   217 -
 jsf-tools/doc/mockup/allrenderers-frame.html       |    61 -
 jsf-tools/doc/mockup/index.html                    |    24 -
 jsf-tools/doc/mockup/stylesheet.css                |    65 -
 jsf-tools/doc/standard-html-components.xsl         |    45 -
 .../doc/standard-html-renderkit-specification.xsl  |   429 -
 .../com/sun/faces/ant/AbstractGeneratorTask.java   |   101 -
 .../com/sun/faces/ant/AttributeManagerGenTask.java |    56 -
 .../java/com/sun/faces/ant/ComponentGenTask.java   |    61 -
 .../java/com/sun/faces/ant/FaceletsTLDGenTask.java |    58 -
 .../com/sun/faces/ant/RenderkitDocGenTask.java     |    63 -
 .../main/java/com/sun/faces/ant/TaglibGenTask.java |    77 -
 .../main/java/com/sun/faces/ant/ValidateTask.java  |   254 -
 .../java/com/sun/faces/config/DigesterFactory.java |   487 -
 .../sun/faces/config/beans/ApplicationBean.java    |   303 -
 .../com/sun/faces/config/beans/AttributeBean.java  |   158 -
 .../sun/faces/config/beans/AttributeHolder.java    |    85 -
 .../com/sun/faces/config/beans/ComponentBean.java  |   155 -
 .../com/sun/faces/config/beans/ConverterBean.java  |   144 -
 .../sun/faces/config/beans/DescriptionBean.java    |    62 -
 .../sun/faces/config/beans/DisplayNameBean.java    |    62 -
 .../sun/faces/config/beans/FacesConfigBean.java    |   327 -
 .../com/sun/faces/config/beans/FactoryBean.java    |    99 -
 .../com/sun/faces/config/beans/FeatureBean.java    |   143 -
 .../java/com/sun/faces/config/beans/IconBean.java  |    68 -
 .../com/sun/faces/config/beans/LifecycleBean.java  |    89 -
 .../sun/faces/config/beans/ListEntriesBean.java    |    84 -
 .../sun/faces/config/beans/ListEntriesHolder.java  |    67 -
 .../com/sun/faces/config/beans/ListEntryBean.java  |    68 -
 .../sun/faces/config/beans/LocaleConfigBean.java   |    87 -
 .../sun/faces/config/beans/ManagedBeanBean.java    |   154 -
 .../faces/config/beans/ManagedPropertyBean.java    |    98 -
 .../com/sun/faces/config/beans/MapEntriesBean.java |    85 -
 .../sun/faces/config/beans/MapEntriesHolder.java   |    67 -
 .../com/sun/faces/config/beans/MapEntryBean.java   |    73 -
 .../sun/faces/config/beans/NavigationCaseBean.java |    79 -
 .../sun/faces/config/beans/NavigationRuleBean.java |    79 -
 .../sun/faces/config/beans/NullValueHolder.java    |    67 -
 .../com/sun/faces/config/beans/PropertyBean.java   |   188 -
 .../com/sun/faces/config/beans/PropertyHolder.java |    85 -
 .../sun/faces/config/beans/ReferencedBeanBean.java |    68 -
 .../com/sun/faces/config/beans/RenderKitBean.java  |   117 -
 .../com/sun/faces/config/beans/RendererBean.java   |   141 -
 .../sun/faces/config/beans/ResourceBundleBean.java |    97 -
 .../com/sun/faces/config/beans/ValidatorBean.java  |   127 -
 .../sun/faces/config/rules/ApplicationRule.java    |   172 -
 .../com/sun/faces/config/rules/AttributeRule.java  |   232 -
 .../com/sun/faces/config/rules/ComponentRule.java  |   206 -
 .../com/sun/faces/config/rules/ConverterRule.java  |   206 -
 .../sun/faces/config/rules/DescriptionRule.java    |   185 -
 .../faces/config/rules/DescriptionTextRule.java    |   270 -
 .../sun/faces/config/rules/DisplayNameRule.java    |   192 -
 .../sun/faces/config/rules/FacesConfigRule.java    |   181 -
 .../sun/faces/config/rules/FacesConfigRuleSet.java |   558 -
 .../com/sun/faces/config/rules/FactoryRule.java    |   172 -
 .../com/sun/faces/config/rules/FeatureRule.java    |   128 -
 .../java/com/sun/faces/config/rules/IconRule.java  |   185 -
 .../com/sun/faces/config/rules/LifecycleRule.java  |   172 -
 .../sun/faces/config/rules/ListEntriesRule.java    |   214 -
 .../sun/faces/config/rules/LocaleConfigRule.java   |   173 -
 .../sun/faces/config/rules/ManagedBeanRule.java    |   285 -
 .../faces/config/rules/ManagedPropertyRule.java    |   284 -
 .../com/sun/faces/config/rules/MapEntriesRule.java |   214 -
 .../com/sun/faces/config/rules/MapEntryRule.java   |   166 -
 .../sun/faces/config/rules/NavigationCaseRule.java |   166 -
 .../sun/faces/config/rules/NavigationRuleRule.java |   197 -
 .../com/sun/faces/config/rules/NullValueRule.java  |   140 -
 .../com/sun/faces/config/rules/PropertyRule.java   |   235 -
 .../sun/faces/config/rules/ReferencedBeanRule.java |   195 -
 .../com/sun/faces/config/rules/RenderKitRule.java  |   195 -
 .../com/sun/faces/config/rules/RendererRule.java   |   227 -
 .../sun/faces/config/rules/ResourceBundleRule.java |   163 -
 .../com/sun/faces/config/rules/ValidatorRule.java  |   197 -
 .../com/sun/faces/generate/AbstractGenerator.java  |   484 -
 .../faces/generate/AttributeManagerGenerator.java  |   334 -
 .../java/com/sun/faces/generate/Generator.java     |    54 -
 .../java/com/sun/faces/generate/GeneratorUtil.java |   330 -
 .../sun/faces/generate/HtmlComponentGenerator.java |   656 -
 .../sun/faces/generate/HtmlTaglib12Generator.java  |   832 -
 .../sun/faces/generate/HtmlTaglib21Generator.java  |   317 -
 .../com/sun/faces/generate/JspTLD12Generator.java  |   348 -
 .../com/sun/faces/generate/JspTLD21Generator.java  |   395 -
 .../com/sun/faces/generate/JspTLDGenerator.java    |   448 -
 .../generate/JspToFaceletsTLD21Generator.java      |   432 -
 .../com/sun/faces/generate/PropertyManager.java    |   227 -
 .../generate/RenderKitSpecificationGenerator.java  |   537 -
 .../java/com/sun/faces/tools/GlassfishUpdater.java |   405 -
 .../main/java/com/sun/faces/util/ToolsUtil.java    |   145 -
 .../src/main/resources/JsfToolsMessages.properties |    35 -
 .../main/resources/JsfToolsMessages_de.properties  |    35 -
 .../main/resources/JsfToolsMessages_es.properties  |    35 -
 .../main/resources/JsfToolsMessages_fr.properties  |    35 -
 .../com/sun/faces/ToolsLogStrings.properties       |    28 -
 .../generate/facesdoc/allrenderers-frame.bottom    |     2 -
 .../faces/generate/facesdoc/allrenderers-frame.top |    16 -
 .../com/sun/faces/generate/facesdoc/index.html     |    23 -
 .../generate/facesdoc/renderkit-summary.bottom     |     5 -
 .../faces/generate/facesdoc/renderkit-summary.top  |    18 -
 .../com/sun/faces/generate/facesdoc/stylesheet.css |   111 -
 jsf-tools/template-src/MessageFactory.java         |   383 -
 jsf-tools/template-src/StateHolderSaver.java       |   132 -
 jsf-tools/template-src/TypedCollections.java       |   155 -
 jsf-tools/tools.iml                                |    13 -
 last-taglib-generation                             |     0
 legal/jsf-cddl/BINARY_LICENSE.txt                  |    85 -
 legal/jsf-cddl/CDDLGPLHeader.txt                   |    35 -
 legal/jsf-cddl/COPYRIGHT                           |    80 -
 legal/jsf-cddl/LICENSE.txt                         |   263 -
 nbproject/project.xml                              |    93 -
 password.txt                                       |     1 -
 3574 files changed, 253887 insertions(+), 478779 deletions(-)

diff --git a/.classpath b/.classpath
deleted file mode 100644
index 9677631..0000000
--- a/.classpath
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="lib" path="dependencies/glassfish/lib/appserv-rt.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry excluding="**/.svn" kind="src" path="jsf-ri/src/main/java" />
-	<classpathentry excluding="**/.svn" kind="src" path="jsf-api/src/test/java"/>
-	<classpathentry excluding="**/.svn" kind="src" path="jsf-api/src/main/java"/>
-	<classpathentry kind="src" path="jsf-ri/systest/src"/>
-	<classpathentry kind="src" path="jsf-ri/build/generate"/>
-	<classpathentry kind="src" path="jsf-ri/test"/>
-        <classpathentry kind="src" path="jsf-tools/src/main/java"/>
-	<classpathentry kind="lib" path="common/lib/ant-contrib.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/aspectjrt-1.2.1.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/cactus-1.7.2.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/cactus-ant-1.7.2.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/cargo-0.5.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/httpunit-1.6.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/jasper-compiler-4.1.30.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/jasper-runtime-4.1.30.jar"/>
-	<classpathentry kind="lib" path="dependencies/jakarta-cactus-13-1.7.2/lib/org.mortbay.jetty-4.2.17.jar"/>
-	<classpathentry kind="lib" path="lib/cactus-1.7.1-javaee5.jar"/>
-	<classpathentry kind="lib" path="lib/jsf-extensions-test-time.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/jsp-api-2.1.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/jsr250-api-1.0.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/jstl-1.2.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/junit-3.8.1.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/maven-repository-importer-1.2.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/tlddoc-1.3.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/commons-codec-1.3.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/commons-collections-3.2.1.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/commons-lang-2.4.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/commons-logging-1.1.1.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/htmlunit-2.4.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/htmlunit-core-js-2.4.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/nekohtml-1.9.11.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/xercesImpl-2.8.1.jar"/>
-	<classpathentry kind="lib" path="dependencies/htmlunit-2.4/lib/xml-apis-1.3.04.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/validation-api-1.0.0.GA.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/groovy-all-1.6.4.jar"/>
-	<classpathentry excluding="**/.svn" kind="src" path="jsf-api/build/generate"/>
-	<classpathentry kind="lib" path="lib/javax.servlet.jar"/>
-	<classpathentry kind="lib" path="dependencies/glassfish/lib/javaee.jar"/>
-	<classpathentry kind="lib" path="dependencies/glassfish/lib/ant/lib/ant.jar"/>
-	<classpathentry kind="lib" path="dependencies/jars/commons-digester-1.7.jar"/>
-	<classpathentry kind="output" path="trash/build"/>
-</classpath>
diff --git a/.project b/.project
deleted file mode 100644
index 7c9436f..0000000
--- a/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>Mojarra</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 8addcdd..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,266 +0,0 @@
-COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
-
-1. Definitions.
-
-1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
-
-1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
-
-1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
-
-1.4. "Executable" means the Covered Software in any form other than Source Code.
-
-1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
-
-1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
-
-1.7. "License" means this document.
-
-1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
-
-1.9. "Modifications" means the Source Code and Executable form of any of the following:
-
-A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
-
-B. Any new file that contains any part of the Original Software or previous Modification; or
-
-C. Any new file that is contributed or otherwise made available under the terms of this License.
-
-1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
-
-1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
-
-1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
-
-1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outsta [...]
-
-2. License Grants.
-
-2.1. The Initial Developer Grant.
-
-Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
-
-(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
-
-(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
-
-(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
-
-(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
-
-2.2. Contributor Grant.
-
-Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
-
-(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
-
-(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
-
-(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-
-(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
-
-3. Distribution Obligations.
-
-3.1. Availability of Source Code.
-
-Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software i [...]
-
-3.2. Modifications.
-
-The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
-
-3.3. Required Notices.
-
-You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
-
-3.4. Application of Additional Terms.
-
-You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients� rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such [...]
-
-3.5. Distribution of Executable Versions.
-
-You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient�s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form u [...]
-
-3.6. Larger Works.
-
-You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
-
-4. Versions of the License.
-
-4.1. New Versions.
-
-Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
-
-4.2. Effect of New Versions.
-
-You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which [...]
-
-4.3. Modified Versions.
-
-When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
-
-5. DISCLAIMER OF WARRANTY.
-
-COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE [...]
-
-6. TERMINATION.
-
-6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
-
-6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights gr [...]
-
-6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
-
-7. LIMITATION OF LIABILITY.
-
-UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL O [...]
-
-8. U.S. GOVERNMENT END USERS.
-
-The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. � 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth he [...]
-
-9. MISCELLANEOUS.
-
-This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction�s conflict-of-law provisions. Any litigation  [...]
-
-10. RESPONSIBILITY FOR CLAIMS.
-
-As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
-
-NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
-
-The GNU General Public License (GPL) Version 2, June 1991
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library Genera [...]
-
-When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and modification follow.
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. ( [...]
-
-Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
-
-1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
-
-a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
-
-b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
-
-c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is i [...]
-
-These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose p [...]
-
-Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
-
-3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
-
-a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major co [...]
-
-If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
-
-4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
-
-5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works ba [...]
-
-6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
-
-7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not dist [...]
-
-If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/dono [...]
-
-This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
-
-9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
-
-10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  [...]
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO  [...]
-
-END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
-
-To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
-
-One line to give the program's name and a brief idea of what it does.
-
-Copyright (C)
-
-This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
-
-Gnomovision version 69, Copyright (C) year name of author
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
-
-Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-signature of Ty Coon, 1 April 1989
-Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
-
-"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
-
-Certain source files distributed by Sun Microsystems, Inc. are subject to the following clarification and special exception to the GPL Version 2, but only where Sun has expressly included in the particular source file's header the words
-"Sun designates this particular file as subject to the "Classpath" exception as provided by Sun in the License file that accompanied this code."
-
-Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination.
-
-As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.? An independent module is a module which is not derived from or based on th [...]
diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3b3e39a
--- /dev/null
+++ b/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Archiver-Version: Plexus Archiver
+Created-By: Apache Maven
+Built-By: hudson
+Build-Jdk: 1.6.0_31
+
diff --git a/Mojarra-2.0.ipr b/Mojarra-2.0.ipr
deleted file mode 100644
index 0e51565..0000000
--- a/Mojarra-2.0.ipr
+++ /dev/null
@@ -1,1340 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="AntConfiguration">
-    <defaultAnt bundledAnt="true" />
-    <buildFile url="file://$PROJECT_DIR$/build.xml">
-      <additionalClassPath />
-      <antReference projectDefault="true" />
-      <customJdkName value="" />
-      <maximumHeapSize value="128" />
-      <maximumStackSize value="32" />
-      <properties />
-    </buildFile>
-    <buildFile url="file://$PROJECT_DIR$/jsf-api/build.xml">
-      <additionalClassPath />
-      <antReference projectDefault="true" />
-      <customJdkName value="" />
-      <maximumHeapSize value="128" />
-      <maximumStackSize value="32" />
-      <properties />
-    </buildFile>
-    <buildFile url="file://$PROJECT_DIR$/jsf-ri/build.xml">
-      <additionalClassPath />
-      <antReference projectDefault="true" />
-      <customJdkName value="" />
-      <maximumHeapSize value="128" />
-      <maximumStackSize value="32" />
-      <properties />
-    </buildFile>
-    <buildFile url="file://$PROJECT_DIR$/jsf-demo/build.xml">
-      <additionalClassPath />
-      <antReference projectDefault="true" />
-      <customJdkName value="" />
-      <maximumHeapSize value="128" />
-      <maximumStackSize value="32" />
-      <properties />
-    </buildFile>
-  </component>
-  <component name="ArtifactManager">
-    <artifact type="exploded-war" name="impl:el-performance exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/el-performance" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/el-performance" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:helloworld exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/helloworld" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/helloworld" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:cactus-test exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/cactus-test" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/cactus-test" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:templateDemo exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/templateDemo" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/templateDemo" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:view-expired exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/view-expired" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/view-expired" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:replace-variableresolver exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/replace-variableresolver" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/replace-variableresolver" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:guessNumber exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/guessNumber" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/guessNumber" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:guessNumber2.0 exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/guessNumber2.0" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/guessNumber2.0" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:command-link-back-button exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/command-link-back-button" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/command-link-back-button" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:characterCombat exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/characterCombat" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/characterCombat" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:wcag-datatable exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/wcag-datatable" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/wcag-datatable" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:string-converter exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/string-converter" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/string-converter" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:property-resolver-jsp exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/property-resolver-jsp" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/property-resolver-jsp" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:ezcomp00 exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/ezcomp00" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/ezcomp00" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:ezcomp02 exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/ezcomp02" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/ezcomp02" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:stock exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/stock" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/stock" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:late-bindings exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/late-bindings" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/late-bindings" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:ezcomp01 exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/ezcomp01" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/ezcomp01" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:ezcomp03 exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/ezcomp03" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/ezcomp03" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:ajax-request exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/ajax-request" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/ajax-request" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:nested-loadbundles exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/nested-loadbundles" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/nested-loadbundles" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:components exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/components" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/components" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:webtier-sample exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/webtier-sample" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/webtier-sample" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:Web exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/Web" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/Web" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:mojarra_ext exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/mojarra_ext" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/mojarra_ext" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:never-unwrap-exceptions exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/never-unwrap-exceptions" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/never-unwrap-exceptions" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:standard exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/standard" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/standard" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:converter-property-editor exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/converter-property-editor" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/converter-property-editor" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:carstore exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/carstore" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/carstore" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:replace-statemanager exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/replace-statemanager" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/replace-statemanager" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:replace-lifecycle exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/replace-lifecycle" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/replace-lifecycle" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:systest exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/systest" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/systest" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:command-link-redirect exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/command-link-redirect" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/command-link-redirect" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:write-attribute-script-enabled exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/write-attribute-script-enabled" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/write-attribute-script-enabled" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:invalid-mapping exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/invalid-mapping" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/invalid-mapping" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:jar-ordering exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/jar-ordering" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/jar-ordering" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:helloDuke exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/helloDuke" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/helloDuke" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:empty-string-as-null exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/empty-string-as-null" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/empty-string-as-null" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:j2meDemo exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/j2meDemo" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/j2meDemo" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:ajax-queue exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/ajax-queue" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/ajax-queue" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:nested-datatables exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/nested-datatables" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/nested-datatables" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:disable-unicode-escaping exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/disable-unicode-escaping" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/disable-unicode-escaping" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:head-body exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/head-body" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/head-body" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:core-tags exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/core-tags" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/core-tags" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:renderkits exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/renderkits" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/renderkits" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="demo:nonjsp exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="demo/web/nonjsp" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="demo/web/nonjsp" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:replace-application exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/replace-application" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/replace-application" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:write-attribute-script-disabled exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/write-attribute-script-disabled" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/write-attribute-script-disabled" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-    <artifact type="exploded-war" name="impl:resource-locale-prefix exploded">
-      <root id="root">
-        <element id="javaee-facet-resources" facet="impl/web/resource-locale-prefix" />
-        <element id="directory" name="WEB-INF">
-          <element id="directory" name="classes">
-            <element id="javaee-facet-classes" facet="impl/web/resource-locale-prefix" />
-          </element>
-        </element>
-      </root>
-    </artifact>
-  </component>
-  <component name="BuildJarProjectSettings">
-    <option name="BUILD_JARS_ON_MAKE" value="false" />
-  </component>
-  <component name="CCaseConfig">
-    <option name="checkoutReserved" value="false" />
-    <option name="markExternalChangeAsUpToDate" value="true" />
-    <option name="checkInUseHijack" value="true" />
-    <option name="useUcmModel" value="true" />
-    <option name="isOffline" value="false" />
-    <option name="synchOutside" value="false" />
-    <option name="isHistoryResticted" value="true" />
-    <option name="useIdenticalSwitch" value="true" />
-    <option name="synchActivitiesOnRefresh" value="true" />
-    <option name="lastScr" value="" />
-    <option name="scrTextFileName" value="" />
-    <option name="historyRevisionsNumber" value="4" />
-  </component>
-  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
-  <component name="CodeStyleProjectProfileManger">
-    <option name="PROJECT_PROFILE" />
-    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
-  </component>
-  <component name="CodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS">
-      <value>
-        <ADDITIONAL_INDENT_OPTIONS fileType="groovy">
-          <option name="INDENT_SIZE" value="2" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="gsp">
-          <option name="INDENT_SIZE" value="2" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="java">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="js">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="jsp">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="sql">
-          <option name="INDENT_SIZE" value="2" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="xml">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="yml">
-          <option name="INDENT_SIZE" value="2" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-      </value>
-    </option>
-  </component>
-  <component name="CompilerConfiguration">
-    <option name="DEFAULT_COMPILER" value="Javac" />
-    <option name="DEPLOY_AFTER_MAKE" value="0" />
-    <resourceExtensions>
-      <entry name=".+\.(properties|xml|html|dtd|tld)" />
-      <entry name=".+\.(gif|png|jpeg|jpg)" />
-    </resourceExtensions>
-    <wildcardResourcePatterns>
-      <entry name="?*.properties" />
-      <entry name="?*.xml" />
-      <entry name="?*.gif" />
-      <entry name="?*.png" />
-      <entry name="?*.jpeg" />
-      <entry name="?*.jpg" />
-      <entry name="?*.html" />
-      <entry name="?*.dtd" />
-      <entry name="?*.tld" />
-    </wildcardResourcePatterns>
-    <annotationProcessing enabled="false" useClasspath="true" />
-  </component>
-  <component name="CopyrightManager" default="">
-    <module2copyright />
-  </component>
-  <component name="CreatePatchCommitExecutor">
-    <option name="PATCH_PATH" value="" />
-    <option name="REVERSE_PATCH" value="false" />
-  </component>
-  <component name="DaemonCodeAnalyzer">
-    <disable_hints />
-  </component>
-  <component name="DebuggerManager">
-    <breakpoint_any>
-      <breakpoint>
-        <option name="NOTIFY_CAUGHT" value="true" />
-        <option name="NOTIFY_UNCAUGHT" value="true" />
-        <option name="ENABLED" value="false" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint>
-        <option name="NOTIFY_CAUGHT" value="true" />
-        <option name="NOTIFY_UNCAUGHT" value="true" />
-        <option name="ENABLED" value="false" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-    </breakpoint_any>
-    <breakpoint_rules />
-    <ui_properties />
-  </component>
-  <component name="DependenciesAnalyzeManager">
-    <option name="myForwardDirection" value="false" />
-  </component>
-  <component name="DependencyValidationManager">
-    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
-  </component>
-  <component name="DynamicManagerImpl">
-    <option name="containingClasses">
-      <map />
-    </option>
-  </component>
-  <component name="EclipseCompilerSettings">
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="true" />
-    <option name="DEPRECATION" value="false" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-    <option name="MAXIMUM_HEAP_SIZE" value="128" />
-  </component>
-  <component name="EclipseEmbeddedCompilerSettings">
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="true" />
-    <option name="DEPRECATION" value="false" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-    <option name="MAXIMUM_HEAP_SIZE" value="128" />
-  </component>
-  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
-  <component name="EntryPointsManager">
-    <entry_points version="2.0" />
-  </component>
-  <component name="ErrorOptionsConfigurable.UI">
-    <option name="proportions">
-      <SplitterProportionsDataImpl />
-    </option>
-  </component>
-  <component name="ExportToHTMLSettings">
-    <option name="PRINT_LINE_NUMBERS" value="false" />
-    <option name="OPEN_IN_BROWSER" value="false" />
-    <option name="OUTPUT_DIRECTORY" />
-  </component>
-  <component name="FacetAutodetectingManager">
-    <autodetection-disabled>
-      <facet-type id="web">
-        <modules>
-          <module name="demo" />
-          <module name="impl" />
-        </modules>
-      </facet-type>
-      <facet-type id="jsf">
-        <modules>
-          <module name="demo">
-            <files>
-              <file url="file://$PROJECT_DIR$/jsf-demo/ajax-queue/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ajax-queue/target/ajax-queue/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ajax-request/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ajax-request/target/ajax-request/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/carstore/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/characterCombat/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/components/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ezcomp00/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ezcomp01/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ezcomp02/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ezcomp02/target/jsf-ezcomp02/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/ezcomp03/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/guessNumber/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/guessNumber2.0/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/head-body/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/helloDuke/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/helloFacelet/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/j2meDemo/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/mojarra_ext/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/nonjsp/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/renderkits/src/conf/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/standard/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/stock/src/main/webapp/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/test/mappingDemo/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-demo/webtier-sample/web/WEB-INF/faces-config.xml" />
-            </files>
-          </module>
-          <module name="impl">
-            <files>
-              <file url="file://$PROJECT_DIR$/jsf-ri/conf/basic/META-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/command-link-back-button/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/command-link-redirect/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/el-performance/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/empty-string-as-null/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/late-bindings/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/nested-datatables/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/nested-loadbundles/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/property-resolver-jsp/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/replace-application/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/replace-lifecycle/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/replace-statemanager/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/replace-variableresolver/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/resource-locale-prefix/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/string-converter/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/wcag-datatable/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/faces-config.xml" />
-              <file url="file://$PROJECT_DIR$/jsf-ri/systest/web/WEB-INF/faces-config.xml" />
-            </files>
-          </module>
-        </modules>
-      </facet-type>
-      <facet-type id="jpa">
-        <modules>
-          <module name="demo" />
-        </modules>
-      </facet-type>
-    </autodetection-disabled>
-  </component>
-  <component name="GlobalLibrariesConfigurable.UI">
-    <option name="proportions">
-      <SplitterProportionsDataImpl>
-        <option name="proportions">
-          <list>
-            <option value="0.2" />
-          </list>
-        </option>
-      </SplitterProportionsDataImpl>
-    </option>
-  </component>
-  <component name="HierarchyBrowserManager">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="SORT_ALPHABETICALLY" value="false" />
-    <option name="HIDE_CLASSES_WHERE_METHOD_NOT_IMPLEMENTED" value="false" />
-  </component>
-  <component name="IdProvider" IDEtalkID="4342FAA4DD1D2DF02C7B099BD6601547" />
-  <component name="InspectionProjectProfileManager">
-    <profiles>
-      <profile version="1.0" is_locked="false">
-        <option name="myName" value="Project Default" />
-        <option name="myLocal" value="false" />
-        <inspection_tool class="CaughtExceptionImmediatelyRethrown" enabled="false" level="WARNING" enabled_by_default="false" />
-        <inspection_tool class="ComparatorNotSerializable" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="DuplicateThrows" enabled="false" level="WARNING" enabled_by_default="false" />
-        <inspection_tool class="EqualsAndHashcode" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="ExternalizableWithSerializationMethods" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="ForCanBeForeach" enabled="false" level="WARNING" enabled_by_default="false">
-          <option name="REPORT_INDEXED_LOOP" value="true" />
-        </inspection_tool>
-        <inspection_tool class="IteratorHasNextCallsIteratorNext" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="JavaDoc" enabled="false" level="WARNING" enabled_by_default="false">
-          <option name="TOP_LEVEL_CLASS_OPTIONS">
-            <value>
-              <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-              <option name="REQUIRED_TAGS" value="" />
-            </value>
-          </option>
-          <option name="INNER_CLASS_OPTIONS">
-            <value>
-              <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-              <option name="REQUIRED_TAGS" value="" />
-            </value>
-          </option>
-          <option name="METHOD_OPTIONS">
-            <value>
-              <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-              <option name="REQUIRED_TAGS" value="@return at param@throws or @exception" />
-            </value>
-          </option>
-          <option name="FIELD_OPTIONS">
-            <value>
-              <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-              <option name="REQUIRED_TAGS" value="" />
-            </value>
-          </option>
-          <option name="IGNORE_DEPRECATED" value="false" />
-          <option name="IGNORE_JAVADOC_PERIOD" value="true" />
-          <option name="myAdditionalJavadocTags" value="" />
-        </inspection_tool>
-        <inspection_tool class="NonSerializableFieldInSerializableClass" enabled="true" level="WARNING" enabled_by_default="true">
-          <option name="superClassString" value="java.awt.Component" />
-        </inspection_tool>
-        <inspection_tool class="NonSerializableObjectBoundToHttpSession" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="NonSerializableObjectPassedToObjectStream" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="NonSerializableWithSerialVersionUIDField" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="NonSerializableWithSerializationMethods" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="ReadObjectAndWriteObjectPrivate" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="ReadObjectInitialization" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="ReadResolveAndWriteReplaceProtected" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="SerialPersistentFieldsWithWrongSignature" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="SerialVersionUIDNotStaticFinal" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="SerializableInnerClassHasSerialVersionUIDField" enabled="true" level="WARNING" enabled_by_default="true">
-          <option name="superClassString" value="java.awt.Component" />
-        </inspection_tool>
-        <inspection_tool class="SerializableInnerClassWithNonSerializableOuterClass" enabled="true" level="WARNING" enabled_by_default="true">
-          <option name="superClassString" value="java.awt.Component" />
-        </inspection_tool>
-        <inspection_tool class="SerializableWithUnconstructableAncestor" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="SuspiciousMethodCalls" enabled="false" level="WARNING" enabled_by_default="false">
-          <option name="REPORT_CONVERTIBLE_METHOD_CALLS" value="true" />
-        </inspection_tool>
-        <inspection_tool class="TransientFieldInNonSerializableClass" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="TransientFieldNotInitialized" enabled="true" level="WARNING" enabled_by_default="true" />
-        <inspection_tool class="UnnecessaryUnboxing" enabled="false" level="WARNING" enabled_by_default="false" />
-        <inspection_tool class="UnusedMessageFormatParameter" enabled="false" level="WARNING" enabled_by_default="false" />
-      </profile>
-    </profiles>
-    <option name="PROJECT_PROFILE" value="Project Default" />
-    <option name="USE_PROJECT_PROFILE" value="true" />
-    <version value="1.0" />
-  </component>
-  <component name="JavacSettings">
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="DEPRECATION" value="true" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-    <option name="MAXIMUM_HEAP_SIZE" value="128" />
-  </component>
-  <component name="JavadocGenerationManager">
-    <option name="OUTPUT_DIRECTORY" />
-    <option name="OPTION_SCOPE" value="protected" />
-    <option name="OPTION_HIERARCHY" value="true" />
-    <option name="OPTION_NAVIGATOR" value="true" />
-    <option name="OPTION_INDEX" value="true" />
-    <option name="OPTION_SEPARATE_INDEX" value="true" />
-    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
-    <option name="OPTION_DEPRECATED_LIST" value="true" />
-    <option name="OTHER_OPTIONS" value="" />
-    <option name="HEAP_SIZE" />
-    <option name="LOCALE" />
-    <option name="OPEN_IN_BROWSER" value="true" />
-  </component>
-  <component name="JdkListConfigurable.UI">
-    <option name="proportions">
-      <SplitterProportionsDataImpl>
-        <option name="proportions">
-          <list>
-            <option value="0.2" />
-          </list>
-        </option>
-      </SplitterProportionsDataImpl>
-    </option>
-    <option name="lastEditedConfigurable" value="1.4" />
-  </component>
-  <component name="JikesSettings">
-    <option name="JIKES_PATH" value="" />
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="DEPRECATION" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="IS_EMACS_ERRORS_MODE" value="true" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-  </component>
-  <component name="ModuleEditorState">
-    <option name="LAST_EDITED_MODULE_NAME" />
-    <option name="LAST_EDITED_TAB_NAME" />
-  </component>
-  <component name="ModuleStructureConfigurable.UI">
-    <option name="proportions">
-      <SplitterProportionsDataImpl>
-        <option name="proportions">
-          <list>
-            <option value="0.2" />
-          </list>
-        </option>
-      </SplitterProportionsDataImpl>
-    </option>
-  </component>
-  <component name="Palette2">
-    <group name="Swing">
-      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
-      </item>
-      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
-      </item>
-      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
-        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
-        <initial-values>
-          <property name="text" value="Button" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="RadioButton" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="CheckBox" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="Label" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
-      </item>
-      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
-          <preferred-size width="-1" height="20" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
-      </item>
-      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
-      </item>
-    </group>
-  </component>
-  <component name="ProjectDetails">
-    <option name="projectName" value="Mojarra-2.0" />
-  </component>
-  <component name="ProjectDictionaryState">
-    <dictionary name="netdance">
-      <words>
-        <w>clickable</w>
-      </words>
-    </dictionary>
-  </component>
-  <component name="ProjectKey">
-    <option name="state" value="https://mojarra.dev.java.net/svn/mojarra/trunk/Mojarra-2.0.ipr" />
-  </component>
-  <component name="ProjectLevelVcsManager">
-    <OptionsSetting value="true" id="Add" />
-    <OptionsSetting value="true" id="Remove" />
-    <OptionsSetting value="true" id="Checkout" />
-    <OptionsSetting value="true" id="Update" />
-    <OptionsSetting value="true" id="Status" />
-    <OptionsSetting value="true" id="Edit" />
-    <ConfirmationsSetting value="0" id="Add" />
-    <ConfirmationsSetting value="0" id="Remove" />
-  </component>
-  <component name="ProjectLibrariesConfigurable.UI">
-    <option name="proportions">
-      <SplitterProportionsDataImpl>
-        <option name="proportions">
-          <list>
-            <option value="0.2" />
-          </list>
-        </option>
-      </SplitterProportionsDataImpl>
-    </option>
-  </component>
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/jsf-api/api.iml" filepath="$PROJECT_DIR$/jsf-api/api.iml" />
-      <module fileurl="file://$PROJECT_DIR$/common/common.iml" filepath="$PROJECT_DIR$/common/common.iml" />
-      <module fileurl="file://$PROJECT_DIR$/jsf-demo/demo.iml" filepath="$PROJECT_DIR$/jsf-demo/demo.iml" />
-      <module fileurl="file://$PROJECT_DIR$/jsf-ri/impl.iml" filepath="$PROJECT_DIR$/jsf-ri/impl.iml" />
-      <module fileurl="file://$PROJECT_DIR$/jsf-tools/tools.iml" filepath="$PROJECT_DIR$/jsf-tools/tools.iml" />
-      <module fileurl="file://$PROJECT_DIR$/updatecenter2/updatecenter2.iml" filepath="$PROJECT_DIR$/updatecenter2/updatecenter2.iml" />
-    </modules>
-  </component>
-  <component name="ProjectReloadState">
-    <option name="STATE" value="0" />
-  </component>
-  <component name="ProjectRootConfigurable.UI">
-    <option name="proportions">
-      <SplitterProportionsDataImpl>
-        <option name="proportions">
-          <collection>
-            <option value="0.16666667" />
-          </collection>
-        </option>
-      </SplitterProportionsDataImpl>
-    </option>
-    <option name="lastEditedConfigurable" value="Project 'Default (Template) Project'" />
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/out" />
-  </component>
-  <component name="ProjectStructureConfigurable.UI">
-    <option name="proportion" value="0.15" />
-    <option name="sideProportion" value="0.2" />
-    <option name="lastEditedConfigurable" value="Modules" />
-  </component>
-  <component name="ResourceManagerContainer">
-    <option name="myResourceBundles">
-      <value>
-        <list size="0" />
-      </value>
-    </option>
-  </component>
-  <component name="RmicSettings">
-    <option name="IS_EANABLED" value="false" />
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="GENERATE_IIOP_STUBS" value="false" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-  </component>
-  <component name="RunManager">
-    <configuration default="true" type="Applet" factoryName="Applet">
-      <module name="" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="HTML_FILE_NAME" />
-      <option name="HTML_USED" value="false" />
-      <option name="WIDTH" value="400" />
-      <option name="HEIGHT" value="300" />
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <option name="VM_PARAMETERS" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-    </configuration>
-    <configuration default="true" type="Remote" factoryName="Remote">
-      <option name="USE_SOCKET_TRANSPORT" value="true" />
-      <option name="SERVER_MODE" value="false" />
-      <option name="SHMEM_ADDRESS" value="javadebug" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="5005" />
-    </configuration>
-    <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
-      <module name="" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="ADDITIONAL_CLASS_PATH" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="wholeProject" />
-      </option>
-      <envs />
-    </configuration>
-    <configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false">
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="" />
-      <envs />
-    </configuration>
-    <list size="0" />
-    <configuration name="<template>" type="WebApp" default="true" selected="false">
-      <Host>localhost</Host>
-      <Port>5050</Port>
-    </configuration>
-  </component>
-  <component name="ScopeChooserConfigurable.UI">
-    <option name="proportions">
-      <SplitterProportionsDataImpl />
-    </option>
-  </component>
-  <component name="StarteamConfiguration">
-    <option name="SERVER" value="" />
-    <option name="PORT" value="49201" />
-    <option name="USER" value="" />
-    <option name="PASSWORD" value="" />
-    <option name="PROJECT" value="" />
-    <option name="VIEW" value="" />
-    <option name="ALTERNATIVE_WORKING_PATH" value="" />
-    <option name="LOCK_ON_CHECKOUT" value="false" />
-    <option name="UNLOCK_ON_CHECKIN" value="false" />
-  </component>
-  <component name="SvnBranchConfigurationManager">
-    <option name="myConfigurationMap">
-      <map>
-        <entry key="$PROJECT_DIR$">
-          <value>
-            <SvnBranchConfiguration>
-              <option name="branchUrls">
-                <list>
-                  <option value="https://mojarra.dev.java.net/svn/mojarra/branches" />
-                  <option value="https://mojarra.dev.java.net/svn/mojarra/tags" />
-                </list>
-              </option>
-              <option name="trunkUrl" value="https://mojarra.dev.java.net/svn/mojarra/trunk" />
-            </SvnBranchConfiguration>
-          </value>
-        </entry>
-      </map>
-    </option>
-    <option name="myVersion" value="124" />
-    <option name="mySupportsUserInfoFilter" value="true" />
-  </component>
-  <component name="SvnConfiguration">
-    <option name="USER" value="" />
-    <option name="PASSWORD" value="" />
-    <option name="LAST_MERGED_REVISION" />
-    <option name="UPDATE_RUN_STATUS" value="false" />
-    <option name="UPDATE_RECURSIVELY" value="true" />
-    <option name="MERGE_DRY_RUN" value="false" />
-    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
-    <myIsUseDefaultProxy>true</myIsUseDefaultProxy>
-  </component>
-  <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="svn" />
-  </component>
-  <component name="VssConfiguration">
-    <option name="CLIENT_PATH" value="" />
-    <option name="SRCSAFEINI_PATH" value="" />
-    <option name="USER_NAME" value="" />
-    <option name="PWD" value="" />
-    <CheckoutOptions>
-      <option name="COMMENT" value="" />
-      <option name="DO_NOT_GET_LATEST_VERSION" value="false" />
-      <option name="REPLACE_WRITABLE" value="false" />
-      <option name="RECURSIVE" value="false" />
-    </CheckoutOptions>
-    <CheckinOptions>
-      <option name="COMMENT" value="" />
-      <option name="KEEP_CHECKED_OUT" value="false" />
-      <option name="RECURSIVE" value="false" />
-    </CheckinOptions>
-    <AddOptions>
-      <option name="STORE_ONLY_LATEST_VERSION" value="false" />
-      <option name="CHECK_OUT_IMMEDIATELY" value="false" />
-    </AddOptions>
-    <UndocheckoutOptions>
-      <option name="MAKE_WRITABLE" value="false" />
-      <option name="REPLACE_LOCAL_COPY" value="0" />
-      <option name="RECURSIVE" value="false" />
-    </UndocheckoutOptions>
-    <GetOptions>
-      <option name="REPLACE_WRITABLE" value="0" />
-      <option name="MAKE_WRITABLE" value="false" />
-      <option name="ANSWER_NEGATIVELY" value="false" />
-      <option name="ANSWER_POSITIVELY" value="false" />
-      <option name="RECURSIVE" value="false" />
-      <option name="VERSION" />
-    </GetOptions>
-  </component>
-  <component name="WebServicesPlugin" addRequiredLibraries="true" />
-  <component name="XPathView.XPathProjectComponent">
-    <history />
-    <find-history />
-  </component>
-  <component name="com.intellij.jsf.UserDefinedFacesConfigs">
-    <option name="USER_DEFINED_CONFIGS">
-      <value>
-        <list size="0" />
-      </value>
-    </option>
-  </component>
-  <component name="libraryTable">
-    <library name="mojarra-build">
-      <CLASSES>
-        <root url="jar://$PROJECT_DIR$/lib/jsf-extensions-test-time.jar!/" />
-        <root url="jar://$PROJECT_DIR$/lib/cactus-1.7.1-javaee5.jar!/" />
-        <root url="jar://$PROJECT_DIR$/common/lib/ant-contrib.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/jsp-api-2.1.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/jstl-1.2.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/com-sun-commons-collections.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/com-sun-commons-beanutils.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/jsr250-api-1.0.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/junit-3.8.1.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/com-sun-commons-logging-api.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/com-sun-commons-digester.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/jars/groovy-all-1.5.5.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/htmlunit-2.4/lib/htmlunit-core-js-2.4.jar!/" />
-        <root url="jar://$PROJECT_DIR$/dependencies/htmlunit-2.4/lib/htmlunit-2.4.jar!/" />
-        <root url="jar://$PROJECT_DIR$/lib/javax.servlet.jar!/" />
-      </CLASSES>
-      <JAVADOC />
-      <SOURCES />
-    </library>
-  </component>
-</project>
-
diff --git a/build-source.xml b/build-source.xml
deleted file mode 100644
index 1dc0bc9..0000000
--- a/build-source.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ************ JSF build file ************************************** -->
-
-<project name="mojarra-source" default="main" basedir=".">
-
-    <!-- ************ Per user local properties ******************************* -->
-
-    <property file="build.properties"/>
-    <property environment="myenv"/>
-    <import file="${jsf.build.home}/common/ant/source-build-setup.xml"/>
-    <import file="${jsf.build.home}/common/ant/maven.xml"/>
-    <property name="tasks.home" value="${myenv.TASKS_HOME}"/>
-
-
-    <property name="LICENSEFILE"
-              value="${basedir}/legal/jsf-cddl/LICENSE.txt"/>
-
-    <target name="clean"
-            description="Clean build and distribution directories">
-        <echo>Cleaning up build area</echo>
-        <subant target="clean" inheritAll="false">
-             <property name="build.source" value="true"/>
-             <filelist dir="${api.dir}">
-                 <file name="build-source.xml"/>
-             </filelist>
-             <filelist dir="${impl.dir}">
-                 <file name="build-source.xml"/>
-             </filelist>
-         </subant>
-    </target>
-
-    <target name="main" description="Build Mojarra, including some dependencies">
-        <echo>Building JSF from source</echo>
-       <subant target="main" inheritAll="false">
-            <property name="build.source" value="true"/>
-            <filelist dir="${api.dir}">
-                <file name="build-source.xml"/>
-            </filelist>
-            <filelist dir="${impl.dir}">
-                <file name="build-source.xml"/>
-            </filelist>
-        </subant>
-    </target>
-
-</project>
-
-
diff --git a/build.properties.glassfish b/build.properties.glassfish
deleted file mode 100644
index 28bbb26..0000000
--- a/build.properties.glassfish
+++ /dev/null
@@ -1,163 +0,0 @@
-#
-# The contents of this file are subject to the terms
-# of the Common Development and Distribution License
-# (the License). You may not use this file except in
-# compliance with the License.
-# 
-# You can obtain a copy of the License at
-# https://javaserverfaces.dev.java.net/CDDL.html or
-# legal/CDDLv1.0.txt. 
-# See the License for the specific language governing
-# permission and limitations under the License.
-# 
-# When distributing Covered Code, include this CDDL
-# Header Notice in each file and include the License file
-# at legal/CDDLv1.0.txt.    
-# If applicable, add the following below the CDDL Header,
-# with the fields enclosed by brackets [] replaced by
-# your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# [Name of File] [ver.__] [Date]
-# 
-# Copyright 2005 Sun Microsystems Inc. All Rights Reserved
-#
-#
-# -----------------------------------------------------------------------------
-# build.properties.glassfish
-#
-# This build.properties allows for the building of 
-# javaserverfaces-sources against Glassfish.
-#
-# $Id: build.properties.glassfish,v 1.14 2008/04/02 20:00:03 rlubke Exp $
-# -----------------------------------------------------------------------------
-
-# --------------------------------------------------
-#   BUILD REQUIRES ANT 1.7.0 OR ABOVE
-# --------------------------------------------------
-
-# --------------------------------------------------
-# Set this to the directory in which the sources
-# were checked out into
-# --------------------------------------------------
-jsf.build.home=<SET CURRENT DIRECTORY>
-
-# --------------------------------------------------
-# Set the values for http.proxy.host and 
-# http.proxy.port if the build environment is
-# behind a firewall.  This is necessary in order
-# for the build system to download the required
-# dependencies.
-# --------------------------------------------------
-http.proxy.host=
-http.proxy.port=
-
-# --------------------------------------------------
-#    Container Name - a simple identifier which maps
-#      to the container.xml file in 
-#      ${jsf.build.home}/common/ant/${container.name}
-#
-#  For Glassfish V1/V2, use:      glassfish
-#  For GlassFish V3 Prelude, use: glassfishV3prelude
-#  For GlassFish V3, use:         glassfishV3
-# --------------------------------------------------
-container.name=glassfish
-
-# --------------------------------------------------
-#    Path to the web container installation.
-#    This is only necessary if running the unit tests
-#    Override the default value if testing against
-#    a different version is desirable.
-# --------------------------------------------------
-container.home=
-container.host=localhost
-container.port=8080
-
-# --------------------------------------------------
-#    Glassfish specific properties needed by
-#    ${jsf.build.home}/common/ant/glassfish/container.xml
-#
-#    These are used specifically for testing.  Override
-#    the defaults if desired.
-#
-#    glassfish.admin.user - administrative user
-#    glassfish.password.file - file containing the 
-#     ${admin.user}'s password.  This is a simple
-#     file consisting of:
-#        AS_ADMIN_PASSWORD=<password>
-#     The default password file will have the password
-#     of 'adminadmin'.
-#    glassfish.admin.host - host of the 
-#     Glassfish administrative server (usually
-#     the same as ${container.host} above.
-#    glassfish.admin.port - port number the
-#     Glassfish administrative server is listening
-#     on.  This defaults to 4848.
-#    glassfish.domain - the default Glassfish domain.
-# --------------------------------------------------
-glassfish.home=${container.home}
-glassfish.admin.user=admin
-glassfish.password.file=${jsf.build.home}/password.txt
-glassfish.admin.host=${container.host}
-glassfish.admin.port=4848
-glassfish.domain=domain1
-
-# --------------------------------------------------
-# Directory for pkg tools, downloaded from
-# http://wiki.updatecenter.java.net/Wiki.jsp?page=Download
-# Used for updatecenter2
-# Note: 2.1RR is the minimum required version
-# Be sure to specify the "pkg" directory under the distro
-# For example:
-# pkg.dir=/home/username/pkg/pkg
-# --------------------------------------------------
-pkg.dir=
-
-# --------------------------------------------------
-#    Compilation flags
-# --------------------------------------------------
-compile.deprecation=off
-compile.debug=true
-
-# --------------------------------------------------
-#    Java 'Endorsed' directory
-# --------------------------------------------------
-endorsed.dirs=
-
-# --------------------------------------------------
-#    Web application packaging
-#      - true: no dependent libraries packaged with
-#              applications
-#      - false: dependent libraries packaged with
-#               applications
-# --------------------------------------------------
-build.standalone=false
-
-# --------------------------------------------------
-#   Unit testing 
-#     - If 'yes', then the unit tests will stop 
-#       running if any failure occurs
-#     - If 'no', then the unit tests will run 
-#       through to completion regardless of errors
-# --------------------------------------------------
-halt.on.failure=yes
-
-
-# --------------------------------------------------
-#     Debugging control Flags 
-#
-# Define the arguments to give to the jvm to enable debugging
-# If this is commented out, no debugging arguments will be passed.
-# Make sure to uncomment the proper arguments for your platform.
-# --------------------------------------------------
-
-# --------------------------------------------------
-#    Unix
-# --------------------------------------------------
-#debug.jvm.args = -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
-
-# --------------------------------------------------
-#    Windows
-## -------------------------------------------------- 
-#debug.jvm.args = -Xdebug -Xrunjdwp:transport=dt_shmem,address=jdbconn,server=y,suspend=n
-
diff --git a/build.xml b/build.xml
deleted file mode 100644
index ce0a434..0000000
--- a/build.xml
+++ /dev/null
@@ -1,381 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ************ JSF build file ************************************** -->
-
-<project name="mojarra" default="main" basedir=".">
-
-    <!-- ************ Per user local properties ******************************* -->
-
-    <property file="build.properties"/>
-    <property environment="myenv"/>
-    <import file="${jsf.build.home}/common/ant/common.xml"/>
-    <property name="tasks.home" value="${myenv.TASKS_HOME}"/>
-    <property name="dist.dir" value="${basedir}/dist"/>
-    <property name="javaserverfaces-spec-eg.dir" value="${basedir}/../javaserverfaces-spec-eg-HEAD"/>
-
-
-    <property name="LICENSEFILE"
-              value="${basedir}/legal/jsf-cddl/LICENSE.txt"/>
-
-    <!-- ************ Compiler Defaults *************************************** -->
-
-
-    <!-- ************ Executable Targets ************************************** -->
-    
-    <macrodef name="call.modules">
-        <attribute name="target"/>
-        <sequential>
-            <subant target="@{target}" inheritAll="false">
-                <filelist dir="${api.dir}">
-                    <file name="build.xml"/>
-                </filelist>    
-                <filelist dir="${impl.dir}">
-                    <file name="build.xml"/>
-                </filelist>
-                <!-- taking jsf-demo out of the standard build/test loop
-                     as one can't build the current source bundle as jsf-demo
-                     isn't included
-                <filelist dir="${demo.dir}">
-                    <file name="build.xml"/>
-                </filelist>
-                     -->
-            </subant>
-        </sequential>
-    </macrodef>
-
-    <target name="clean"
-            description="Clean build and distribution directories">       
-        <delete file="mojarra-samples.zip"/>
-        <delete dir="${basedir}/build"/>
-        <delete dir="${dist.dir}"/>
-        <call.modules target="clean"/>        
-        <ant dir="jsf-demo" target="clean" />
-        <ant dir="updatecenter2" target="updatecenter2.clean" />
-        <antcall target="remove.netbeans.186761.hack" />
-    </target>  
-
-    <target name="modules.clean">
-      <call.modules target="clean"/>        
-    </target>
-
-    <target name="main" description="Build Mojarra">
-        <call.modules target="main"/>
-    </target>
-
-    <target name="impl" description="Just build jsf-ri">
-      <ant dir="jsf-ri" target="main" />
-    </target>
-
-    <target name="main.from.source" description="Build Mojarra, including some dependencies">
-       <subant target="main" inheritAll="false">
-            <property name="build.source" value="true"/>
-            <filelist dir="${api.dir}">
-                <file name="build.xml"/>
-            </filelist>
-            <filelist dir="${impl.dir}">
-                <file name="build.xml"/>
-            </filelist>
-        </subant>
-    </target>
-
-    <target name="test" description="Run API, Impl, and Demo automated tests">
-        <call.modules target="test"/>
-    </target>
-
-    <target name="test.with.container.refresh"
-            description="Stop the target container, deploy the build artifacts, restart the container and test">
-        <trycatch>
-            <try>
-                <container.stop/>
-                <antcall target="container.deploy"/>
-                <echo message="Successfully deployed JSF implementation to container." />
-                <echo message="About to start container." />
-                <container.start/>
-                <echo message="Successfully started container." />
-                <echo message="About to invoke tests." />
-                <call.modules target="test"/>
-                <echo message="Successfully invoked test." />
-            </try>
-            <finally>
-                <echo message="About to stop container." />
-                <container.stop/>
-            </finally>
-        </trycatch>
-    </target>
-
-    <target name="build.and.debug" depends="clean, main"
-            description="Clean, build, and deploy, restarting in debug mode">
-        <trycatch>
-                <try>
-                    <container.stop/>
-                    <antcall target="container.deploy"/>
-                    <container.debug/>
-                </try>
-        </trycatch>
-    </target>
-
-    <!-- Create the source distribution -->
-    <target name="jsf.source">                
-        <zip destfile="${dist.dir}/mojarra-${impl.version}-source.zip">
-
-            <zipfileset dir="${basedir}"
-                        excludes="**/*.class,
-                                  **/build.properties/**,
-                                  **/CVS/**,
-                                  **/build/javadocs/**,
-                                  **/build/managed-bean-javadocs/**,
-                                  **/build/classes/**,
-                                  **/build/lib/**,
-                                  **/build/generate/facesdoc/**,
-                                  **/build/generate/last-generation,
-                                  **/build/vdldocs/**,
-                                  **/build/generate/last-taglib-generation,
-                                  **/build/generate/conf/**,
-                                  **/build/TAG*txt,
-                                  **/dist/**,
-                                  **/www/**,
-                                  **/jsf-demo/**,
-                                  **/dependencies/**,
-                                  **/test-sqe/**,
-                                  **/contrib/**,
-                                  **/repo/**,
-                                  **/updatecenter2/**,
-                                  **/changebundle.txt,
-                                  **/newfiles.zip
-                                  **/HUDSON_INFORMATION.txt,
-                                  **/INTEGRATING_WITH_V3.txt,
-                                  **/PROMOTING_A_BUILD.txt,
-                                  **/TESTING_A_BUILD.txt,
-                                  **/docs/**"
-                        prefix="mojarra-${impl.version}-source"/>
-             <zipfileset dir="${basedir}"
-                        includes="${basedir}/build.xml" prefix="mojarra-${impl.version}-source"/>
-
-        </zip>
-        
-        <!-- create a special source bundle for GlassFish Java EE 5 docs -->
-        <mkdir dir="${basedir}/srctemp/jsf-${spec.version}-javadoc-src/jsf-api/src"/>
-            <copy todir="${basedir}/srctemp/jsf-${spec.version}-javadoc-src/jsf-api/src">
-                <fileset dir="${api.dir}/src" excludes="**/CVS/**"/>
-                <fileset dir="${api.dir}/build/generate" includes="**/javax/**"/>
-            </copy>
-            <jar destfile="${dist.dir}/glassfish-jsf-${impl.version}-src.jar"
-                 basedir="${basedir}/srctemp"/>
-        <delete dir="${basedir}/srctemp"/>
-    </target>
-
-   <target name="dist" description="Build distribution files"
-           depends="main">
-        
-        <mkdir dir="${dist.dir}" />
-
-        <ant dir="${demo.dir}" 
-             antfile="build.xml"
-             target="dist" 
-             inheritAll="false"/>
-
-        <copy file="${demo.dir}/mojarra-${impl.version}.zip"
-              tofile="${dist.dir}/mojarra-${impl.version}-binary.zip"/>
-       
-        <copy file="${demo.dir}/glassfish-jsf-${impl.version}.jar"
-              todir="${dist.dir}"/>
-
-        <delete file="${demo.dir}/glassfish-jsf-${impl.version}.jar"/>
-        <delete file="${demo.dir}/mojarra-${impl.version}.zip"/>
-
-        <ant target="jsf.source"/>
-
-   </target>
-
-   <target name="copy.spec.pdf" if="spec-eg-dir-available">
-       <echo message="Copying PDF spec for build: ${build.number} from ${javaserverfaces-spec-eg.dir} to ${spec.snapshot.dir}" />
-
-       <copy todir="${spec.snapshot.dir}" flatten="true">
-
-         <fileset dir="${javaserverfaces-spec-eg.dir}">
-
-           <include name="**/*${build.number}*.pdf" />
-
-         </fileset>
-
-       </copy>
-
-   </target>
-
-   <target name="deploy.spec.locally" if="spec-eg-dir-available">
-
-     <delete dir="${javaserverfaces-spec-eg.dir}/javadocs/spec-snapshot" />
-     <mkdir dir="${javaserverfaces-spec-eg.dir}/javadocs/spec-snapshot" />
-     <unzip src="${dist.dir}/jsf-spec-${spec.snapshot.version}-${build.number}.zip"
-            dest="${javaserverfaces-spec-eg.dir}/javadocs/spec-snapshot"
-            overwrite="true"/>
-     <move todir="${javaserverfaces-spec-eg.dir}/javadocs/spec-snapshot">
-       <fileset dir="${javaserverfaces-spec-eg.dir}/javadocs/spec-snapshot/jsf-spec-${spec.snapshot.version}-${build.number}">
-         <include name="**/*.*" />
-         <include name="**/*" />
-       </fileset>
-     </move>
-     <delete dir="${javaserverfaces-spec-eg.dir}/javadocs/spec-snapshot/jsf-spec-${spec.snapshot.version}-${build.number}" />
-
-   </target>
-
-   <target name="test.spec-eg-dir-available">
-       <available type="dir" file="${javaserverfaces-spec-eg.dir}"
-                  property="spec-eg-dir-available" />
-   </target>
-
-   <target name="build.spec.snapshot" depends="dist">
-
-       <available type="dir" file="${javaserverfaces-spec-eg.dir}"
-                  property="spec-eg-dir-available" />
-
-       <antcall target="copy.spec.pdf" />
-
-       <echo message="Unzipping ${demo.dir}/dist/docs/mojarra-${impl.version}-documentation.zip to ${spec.snapshot.dir}" />
-       <unzip src="${demo.dir}/dist/docs/mojarra-${impl.version}-documentation.zip"
-              dest="${spec.snapshot.dir}" overwrite="true"/>
-
-       <zip destfile="${dist.dir}/jsf-spec-${spec.snapshot.version}-${build.number}.zip">
-            <zipfileset dir="${spec.snapshot.dir}"
-                        prefix="jsf-spec-${spec.snapshot.version}-${build.number}"/>
-        </zip>
-
-       <antcall target="deploy.spec.locally" />
-
-  </target>
-
-    <target name="build.java.net"
-            depends="dist"/>
-
-    <target name="nightly" depends="build.java.net"
-            description="update nightly build">
-        <if>
-            <available
-                  file="${tasks.home}/javanettasks-1.0.13.jar"/>
-            <then>
-                <sequential>
-                    <taskdef
-                          resource="org/kohsuke/javanettasks.properties">
-                        <classpath>
-                            <pathelement
-                                  location="${tasks.home}/javanettasks-1.0.13.jar"/>
-                            <fileset dir="${tasks.home}/lib"
-                                     includes="*.jar"/>
-                        </classpath>
-                    </taskdef>
-
-                    <javaNetUpload projectName="javaserverfaces"
-                                   toFile="/2.0 Nightly/mojarra-${impl.version}-binary.zip"
-                                   fromFile="${dist.dir}/mojarra-${impl.version}-binary.zip"
-                                   fileDescription="Mojarra ${impl.version.number} nightly binary bundle."
-                                   overwrite="yes"/>
-
-
-                    <javaNetUpload projectName="javaserverfaces"
-                                   toFile="/2.0 Nightly/mojarra-${impl.version}-source.zip"
-                                   fromFile="${dist.dir}/mojarra-${impl.version}-source.zip"
-                                   fileDescription="Mojarra ${impl.version.number} nightly source bundle."
-                                   overwrite="yes"/>
-                    <echo message="Deploying jsf-api.jar snapshot to the java.net M2 repository..."/>
-                    <ant antfile="${api.dir}/build.xml" target="mvn.deploy.snapshot"/>
-                    <echo message="Deploying jsf-impl.jar snapshot to the java.net M2 repository..."/>
-                    <ant antfile="${impl.dir}/build.xml" target="mvn.deploy.snapshot"/>
-                </sequential>
-            </then>
-            <else>
-                <fail message="Javanettasks version 1.0.13 is not available at the location referred by TASKS_HOME (${tasks.home}).  Ensure that the TASKS_HOME environment variable is properly set."/>
-            </else>
-        </if>
-    </target>
-
-
-
-    <target name="build.samples.zip" depends="main" description="Build the demo distribution">
-
-        <ant dir="${demo.dir}"
-             antfile="build.xml"
-             target="main"
-             inheritAll="false"/>
-        <mkdir dir="samples"/>
-        <copy todir="${basedir}/samples/jsf-samples"
-              file="${demo.dir}/guessNumber/build/jsf-guessNumber.war"/>
-        <copy todir="${basedir}/samples/jsf-samples"
-              file="${demo.dir}/carstore/build/jsf-cardemo.war"/>
-        <copy todir="${basedir}/samples/jsf-samples"
-              file="${demo.dir}/components/build/jsf-components.war"/>
-        <copy todir="${basedir}/samples/jsf-samples"
-              file="${demo.dir}/webtier-sample/build/webtier-sample.war"/>
-        <copy todir="${basedir}/samples/jsf-samples"
-              file="${demo.dir}/renderkits/build/jsf-renderkits.war"/>
-
-        <copy toFile="${basedir}/samples/jsf-samples/README.html"
-              file="${impl.dir}/docs/samples.html"/>
-
-        <copy toFile="${basedir}/samples/jsf-samples/License.txt"
-              file="${LICENSEFILE}"/>
-        <zip destfile="${basedir}/mojarra-samples.zip"
-             basedir="${basedir}/samples"/>
-        <delete dir="samples"/>
-
-        <installerBuilder
-              classFile="${dist.dir}/mojarra-samples.class"
-              licenseFile="${LICENSEFILE}"
-              zipFile="${basedir}/mojarra-samples.zip"/>
-    </target>
-
-    <target name="updatecenter2" depends="main">
-      <copy file="jsf-api/build/lib/jsf-api.jar" todir="updatecenter2/lib"/>
-      <copy file="jsf-ri/build/lib/jsf-impl.jar" todir="updatecenter2/lib"/>
-    </target>
-
-    <target name="apply.netbeans.186761.hack">
-      <ant dir="jsf-api" target="apply.netbeans.186761.hack" />
-      <ant dir="jsf-ri" target="apply.netbeans.186761.hack" />
-    </target>
-
-    <target name="remove.netbeans.186761.hack">
-      <ant dir="jsf-api" target="remove.netbeans.186761.hack" />
-      <ant dir="jsf-ri" target="remove.netbeans.186761.hack" />
-    </target>
-
-
-</project>
-
-
diff --git a/com/sun/faces/RIConstants.java b/com/sun/faces/RIConstants.java
new file mode 100644
index 0000000..a234b0c
--- /dev/null
+++ b/com/sun/faces/RIConstants.java
@@ -0,0 +1,164 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces;
+
+import com.sun.faces.facelets.tag.jsf.core.CoreLibrary;
+import com.sun.faces.facelets.tag.jsf.html.HtmlLibrary;
+import com.sun.faces.facelets.tag.ui.UILibrary;
+import javax.faces.render.RenderKitFactory;
+
+/**
+ * This class contains literal strings used throughout the Faces RI.
+ */
+public class RIConstants {
+
+
+    /**
+     * Used to add uniqueness to the names.
+     */
+    public final static String FACES_PREFIX = "com.sun.faces.";
+
+    public final static String HTML_BASIC_RENDER_KIT = FACES_PREFIX +
+        RenderKitFactory.HTML_BASIC_RENDER_KIT;       
+
+    public static final String SAVESTATE_FIELD_DELIMITER = "~";
+    public static final String SAVESTATE_FIELD_MARKER = 
+          SAVESTATE_FIELD_DELIMITER 
+           + FACES_PREFIX 
+           + "saveStateFieldMarker" 
+           + SAVESTATE_FIELD_DELIMITER;
+
+    public static final String SAVED_STATE = FACES_PREFIX + "savedState";
+
+
+    /*
+    * <p>TLV Resource Bundle Location </p>
+    */
+    public static final String TLV_RESOURCE_LOCATION =
+        FACES_PREFIX + "resources.Resources";
+
+    public static final Object NO_VALUE = "";
+      
+    public static final String CORE_NAMESPACE = 
+            CoreLibrary.Namespace;
+    public static final String HTML_NAMESPACE = 
+            HtmlLibrary.Namespace;
+    
+    public static final String CORE_NAMESPACE_NEW = 
+            CoreLibrary.XMLNSNamespace;
+    public static final String HTML_NAMESPACE_NEW = 
+            HtmlLibrary.XMLNSNamespace;
+
+    public static final String FACELET_NAMESPACE = 
+        UILibrary.Namespace;
+    public static final String FACELET_NAMESPACE_NEW = 
+        UILibrary.XMLNSNamespace;
+
+    public static final Class[] EMPTY_CLASS_ARGS = new Class[0];
+    public static final Object[] EMPTY_METH_ARGS = new Object[0];
+
+    /**
+     *<p>ResponseWriter Content Types and Encoding</p>
+     */
+    public static final String HTML_CONTENT_TYPE = "text/html";
+    public static final String XHTML_CONTENT_TYPE = "application/xhtml+xml";
+    public static final String APPLICATION_XML_CONTENT_TYPE = "application/xml";
+    public static final String TEXT_XML_CONTENT_TYPE = "text/xml";
+    public static final String ALL_MEDIA = "*/*";
+    public static final String CHAR_ENCODING = "UTF-8";
+    public static final String FACELETS_ENCODING_KEY = "facelets.Encoding";
+    public static final String DEFAULT_LIFECYCLE = 
+          FACES_PREFIX + "DefaultLifecycle";
+    public static final String DEFAULT_STATEMANAGER =
+          FACES_PREFIX + "DefaultStateManager";
+
+    public static final String ERROR_PAGE_PRESENT_KEY_NAME = 
+	FACES_PREFIX + "errorPagePresent";
+
+    public static final String FACES_INITIALIZER_MAPPINGS_ADDED =
+          FACES_PREFIX + "facesInitializerMappingsAdded";
+
+    public static final String VIEWID_KEY_NAME = FACES_PREFIX + "viewId";
+
+    /**
+     * Marker used when saving the list of component adds and removes.
+     */
+    public static final String DYNAMIC_ACTIONS =
+            FACES_PREFIX + "DynamicActions";
+    
+    /**
+     * Marker attached to a component that has dynamic children.
+     */
+    public static final String DYNAMIC_CHILD_COUNT =
+            FACES_PREFIX + "DynamicChildCount";
+    
+    /**
+     * Marker attached to a component that was added dynamically.
+     */
+    public static final String DYNAMIC_COMPONENT =
+            FACES_PREFIX + "DynamicComponent";
+    
+    /**
+     * Present in the attrs of UIViewRoot iff the tree has one or more
+     * dynamic modifications
+     */
+    public static final String TREE_HAS_DYNAMIC_COMPONENTS =
+            FACES_PREFIX + "TreeHasDynamicComponents";
+    
+    public static final String FLOW_DEFINITION_ID_SUFFIX = "-flow.xml";
+    
+    public static final int FLOW_DEFINITION_ID_SUFFIX_LENGTH = FLOW_DEFINITION_ID_SUFFIX.length();
+    
+    public static final String FLOW_IN_JAR_PREFIX = "META-INF/flows";
+    
+    public static final int FLOW_IN_JAR_PREFIX_LENGTH = FLOW_IN_JAR_PREFIX.length();
+    
+    public static final String FLOW_DISCOVERY_CDI_HELPER_BEAN_NAME = "csfFLOWDISCOVERYCDIHELPER";
+    
+    public static final String JAVAEE_XMLNS = "http://xmlns.jcp.org/xml/ns/javaee";
+
+    private RIConstants() {
+
+        throw new IllegalStateException();
+        
+    }
+
+}
diff --git a/com/sun/faces/action/ActionLifecycle.java b/com/sun/faces/action/ActionLifecycle.java
new file mode 100644
index 0000000..0d35136
--- /dev/null
+++ b/com/sun/faces/action/ActionLifecycle.java
@@ -0,0 +1,93 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.action;
+
+import com.sun.faces.lifecycle.Phase;
+import com.sun.faces.lifecycle.RenderResponsePhase;
+import java.util.Arrays;
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseListener;
+import javax.faces.lifecycle.Lifecycle;
+
+public class ActionLifecycle extends Lifecycle {
+    
+    public static final String ACTION_LIFECYCLE = "com.sun.faces.action.ActionLifecycle";
+    
+    private final RenderResponsePhase renderResponsePhase;
+    private Phase actionPhase;
+    
+    public ActionLifecycle() {
+        renderResponsePhase = new RenderResponsePhase();
+        try {
+            Class phaseClass = Class.forName("com.sun.faces.action.ActionPhase");
+            actionPhase = (Phase) phaseClass.newInstance();
+        } catch(Throwable throwable) {  
+            actionPhase = null;
+        }
+    }
+
+    @Override
+    public void addPhaseListener(PhaseListener listener) {
+    }
+
+    @Override
+    public void execute(FacesContext context) throws FacesException {
+        if (actionPhase != null) {
+            actionPhase.doPhase(context, this, Arrays.asList(getPhaseListeners()).listIterator());
+        } else {
+            throw new FacesException("Unable to handle action");
+        }
+    }
+
+    @Override
+    public PhaseListener[] getPhaseListeners() {
+        return new PhaseListener[0];
+    }
+
+    @Override
+    public void removePhaseListener(PhaseListener listener) {
+    }
+
+    @Override
+    public void render(FacesContext context) throws FacesException {
+        renderResponsePhase.doPhase(context, this, Arrays.asList(getPhaseListeners()).listIterator());
+    }
+}
diff --git a/com/sun/faces/action/ActionLifecycleFactory.java b/com/sun/faces/action/ActionLifecycleFactory.java
new file mode 100644
index 0000000..a29e585
--- /dev/null
+++ b/com/sun/faces/action/ActionLifecycleFactory.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.action;
+
+import java.util.Iterator;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+
+public class ActionLifecycleFactory extends LifecycleFactory {
+
+    /**
+     * Stores the wrapped instance.
+     */
+    private final LifecycleFactory wrapped;
+    
+    /**
+     * Constructor.
+     * 
+     * @param wrapped the wrapped lifecycle factory.
+     */
+    public ActionLifecycleFactory(LifecycleFactory wrapped) {
+        this.wrapped = wrapped;
+        wrapped.addLifecycle(ActionLifecycle.ACTION_LIFECYCLE, new ActionLifecycle());
+    }
+    
+    /**
+     * Get the wrapped lifecycle factory.
+     * 
+     * @return the lifecycle factory. 
+     */
+    @Override
+    public LifecycleFactory getWrapped() {
+        return wrapped;
+    }
+    
+    /**
+     * Add the lifecycle.
+     * 
+     * @param lifecycleId the lifecycle id.
+     * @param lifecycle the lifecycle to add.
+     */
+    @Override
+    public void addLifecycle(String lifecycleId, Lifecycle lifecycle) {
+        wrapped.addLifecycle(lifecycleId, lifecycle);
+    }
+
+    /**
+     * Get the lifecycle.
+     * 
+     * @param lifecycleId the lifecycle id.
+     * @return the lifecycle.
+     */
+    @Override
+    public Lifecycle getLifecycle(String lifecycleId) {
+        return wrapped.getLifecycle(lifecycleId);
+    }
+
+    /**
+     * Get the lifecycle ids.
+     * 
+     * @return the lifecycle ids. 
+     */
+    @Override
+    public Iterator<String> getLifecycleIds() {
+        return wrapped.getLifecycleIds();
+    }
+}
diff --git a/com/sun/faces/action/ActionPhase.java b/com/sun/faces/action/ActionPhase.java
new file mode 100644
index 0000000..bd7c957
--- /dev/null
+++ b/com/sun/faces/action/ActionPhase.java
@@ -0,0 +1,206 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.action;
+
+import com.sun.faces.lifecycle.Phase;
+import java.util.Iterator;
+import java.util.Set;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.faces.FacesException;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+public class ActionPhase extends Phase {
+
+    private BeanManager beanManager;
+
+    public BeanManager getBeanManager() {
+
+        if (beanManager == null) {
+            Object result = null;
+
+            try {
+                InitialContext initialContext = new InitialContext();
+                result = initialContext.lookup("java:comp/BeanManager");
+            } catch (NamingException exception) {
+                try {
+                    InitialContext initialContext = new InitialContext();
+                    result = initialContext.lookup("java:comp/env/BeanManager");
+                } catch (NamingException exception2) {
+                }
+            }
+
+            if (result != null) {
+                beanManager = (BeanManager) result;
+            } else {
+                beanManager = null;
+            }
+        }
+
+        return beanManager;
+    }
+
+    @Override
+    public void execute(FacesContext context) throws FacesException {
+        /*
+         * 1. Find the bean + method that matches the correct @RequestMapping. 
+         */
+        Set<Bean<?>> beans = getBeanManager().getBeans(Object.class, new AnnotationLiteral<Any>() {
+        });
+        Iterator<Bean<?>> beanIterator = beans.iterator();
+        RequestMappingInfo current = null;
+
+        while (beanIterator.hasNext()) {
+            Bean<?> bean = beanIterator.next();
+            RequestMappingInfo info = findMethodRequestMapping(context, bean);
+
+            if (current == null) {
+                current = info;
+            } else if (info != null && info.getLength() > current.getLength()) {
+                current = info;
+            }
+        }
+
+        String viewId = null;
+
+        if (current != null) {
+            /*
+             * 2. Get an instance of that bean.
+             */
+            Instance instance = CDI.current().select(
+                    current.getBean().getBeanClass(), new AnnotationLiteral<Any>() {
+                    });
+
+            try {
+                /*
+                 * 3. Call the required method and capture its result.
+                 *
+                 * Currently assuming String invoke() signature, but that obviously
+                 * needs to be expanded.
+                 */
+                viewId = (String) current.getMethod().invoke(instance.get(), new Object[0]);
+            } catch (Throwable throwable) {
+                throw new FacesException(throwable);
+            }
+            if (context.getViewRoot() == null) {
+                UIViewRoot viewRoot = new UIViewRoot();
+                viewRoot.setRenderKitId("HTML_BASIC");
+                /*
+                 * 4. Set the resulting view id on the viewroot.
+                 */
+                viewRoot.setViewId(viewId);
+                context.setViewRoot(viewRoot);
+            }
+        }
+    }
+
+    @Override
+    public PhaseId getId() {
+        return PhaseId.ANY_PHASE;
+    }
+    
+    private RequestMappingInfo findMethodRequestMapping(FacesContext context, Bean<?> bean) {
+        RequestMappingInfo result = null;
+        Class clazz = bean.getBeanClass();
+        AnnotatedType annotatedType = beanManager.createAnnotatedType(clazz);
+        Set<AnnotatedMethod> annotatedMethodSet = annotatedType.getMethods();
+        for (AnnotatedMethod method : annotatedMethodSet) {
+            if (method.isAnnotationPresent(RequestMapping.class)) {
+                RequestMapping requestMapping = method.getAnnotation(RequestMapping.class);
+                String[] mappings = requestMapping.value();
+                String mapping = null;
+                for (String current : mappings) {
+                    String pathInfo = context.getExternalContext().getRequestPathInfo();
+                    if (pathInfo.equals(current)) {
+                        result = new RequestMappingInfo();
+                        result.setBean(bean);
+                        result.setMethod(method.getJavaMember());
+                        result.setRequestMapping(mapping);
+                        result.setMappingType(RequestMappingInfo.MappingType.EXACT);
+                        break;
+                    } else if (current.endsWith("*")) {
+                        current = current.substring(0, current.length() - 1);
+                        if (pathInfo.startsWith(current)) {
+                            if (result == null) {
+                                result = new RequestMappingInfo();
+                                result.setBean(bean);
+                                result.setMethod(method.getJavaMember());
+                                result.setRequestMapping(current);
+                                result.setMappingType(RequestMappingInfo.MappingType.PREFIX);
+                            } else if (current.length() > result.getLength()) {
+                                result.setBean(bean);
+                                result.setMethod(method.getJavaMember());
+                                result.setRequestMapping(current);
+                                result.setMappingType(RequestMappingInfo.MappingType.PREFIX);
+                            }
+                        }
+                    } else if (current.startsWith("*")) {
+                        current = current.substring(1);
+                        if (pathInfo.endsWith(current)) {
+                            result = new RequestMappingInfo();
+                            result.setBean(bean);
+                            result.setMethod(method.getJavaMember());
+                            result.setRequestMapping(current);
+                            result.setMappingType(RequestMappingInfo.MappingType.EXTENSION);
+                            break;
+                        }
+                    }
+                }
+            }
+            if (result != null &&
+                    (result.getMappingType().equals(RequestMappingInfo.MappingType.EXACT) ||
+                    (result.getMappingType().equals(RequestMappingInfo.MappingType.EXTENSION)))) {
+                break;
+            }
+        }
+        return result;
+    }
+    
+}
diff --git a/com/sun/faces/action/RequestMapping.java b/com/sun/faces/action/RequestMapping.java
new file mode 100644
index 0000000..d2adf66
--- /dev/null
+++ b/com/sun/faces/action/RequestMapping.java
@@ -0,0 +1,55 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.action;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+ at Documented
+ at Target(value = {METHOD, TYPE})
+ at Retention(value = RUNTIME)
+public @interface RequestMapping {
+
+    String[] value() default {};
+}
diff --git a/com/sun/faces/action/RequestMappingInfo.java b/com/sun/faces/action/RequestMappingInfo.java
new file mode 100644
index 0000000..eac688b
--- /dev/null
+++ b/com/sun/faces/action/RequestMappingInfo.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.action;
+
+import java.lang.reflect.Method;
+import javax.enterprise.inject.spi.Bean;
+
+class RequestMappingInfo {
+    private MappingType mappingType;
+
+    public void setMappingType(MappingType mappingType) {
+        this.mappingType = mappingType;
+    }
+
+    public MappingType getMappingType() {
+        return mappingType;
+    }
+
+    public enum MappingType {
+        EXACT,
+        PREFIX,
+        EXTENSION
+    }
+    
+    private String requestMapping;
+    private Bean<?> bean;
+    private Method method;
+
+    public int getLength() {
+        return requestMapping.length();
+    }
+
+    public Bean<?> getBean() {
+        return bean;
+    }
+
+    public Method getMethod() {
+        return method;
+    }
+
+    public void setBean(Bean<?> bean) {
+        this.bean = bean;
+    }
+
+    public void setMethod(Method method) {
+        this.method = method;
+    }
+
+    public void setRequestMapping(String requestMapping) {
+        this.requestMapping = requestMapping;
+    }
+}
diff --git a/com/sun/faces/application/ActionListenerImpl.java b/com/sun/faces/application/ActionListenerImpl.java
new file mode 100644
index 0000000..160d1d6
--- /dev/null
+++ b/com/sun/faces/application/ActionListenerImpl.java
@@ -0,0 +1,148 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.NavigationHandler;
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.MethodNotFoundException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.text.MessageFormat;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * This action listener implementation processes action events during the
+ * <em>Apply Request Values</em> or <em>Invoke Application</em>
+ * phase of the request processing lifecycle (depending upon the
+ * <code>immediate</code> property of the {@link ActionSource} that
+ * queued this event.  It invokes the specified application action method,
+ * and uses the logical outcome value to invoke the default navigation handler
+ * mechanism to determine which view should be displayed next.</p>
+ */
+public class ActionListenerImpl implements ActionListener {
+
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+
+    // --------------------------------------------- Methods From ActionListener
+
+ 
+
+    @SuppressWarnings("deprecation")
+    @Override
+    public void processAction(ActionEvent event) {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("processAction({0})",
+                                             event.getComponent().getId()));
+        }
+        UIComponent source = event.getComponent();
+        ActionSource actionSource = (ActionSource) source;
+        FacesContext context = FacesContext.getCurrentInstance();
+
+        Application application = context.getApplication();
+
+        Object invokeResult;
+        String outcome = null;
+        MethodBinding binding;
+
+        binding = actionSource.getAction();
+        if (binding != null) {
+            try {
+                if (null != (invokeResult = binding.invoke(context, null))) {
+                    outcome = invokeResult.toString();
+                }
+                // else, default to null, as assigned above.
+            } catch (MethodNotFoundException e) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE, e.getMessage(), e);
+                }
+                throw new FacesException
+                      (binding.getExpressionString() + ": " + e.getMessage(),
+                       e);
+            }
+            catch (EvaluationException e) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE, e.getMessage(), e);
+                }
+                throw new FacesException
+                      (binding.getExpressionString() + ": " + e.getMessage(),
+                       e);
+            }
+        }
+
+        // Retrieve the NavigationHandler instance..
+
+        NavigationHandler navHandler = application.getNavigationHandler();
+
+        // Invoke nav handling..
+        
+        String toFlowDocumentId = (String) source.getAttributes().get(ActionListener.TO_FLOW_DOCUMENT_ID_ATTR_NAME);
+        if (null == toFlowDocumentId) {
+            navHandler.handleNavigation(context,
+                    (null != binding) ?
+                    binding.getExpressionString() : null,
+                    outcome);
+        } else {
+            navHandler.handleNavigation(context,
+                    (null != binding) ?
+                    binding.getExpressionString() : null,
+                    outcome, toFlowDocumentId);
+        }
+
+        // Trigger a switch to Render Response if needed
+        context.renderResponse();
+
+    }
+
+}
diff --git a/com/sun/faces/application/ApplicationAssociate.java b/com/sun/faces/application/ApplicationAssociate.java
new file mode 100644
index 0000000..6ef9407
--- /dev/null
+++ b/com/sun/faces/application/ApplicationAssociate.java
@@ -0,0 +1,935 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.scripting.groovy.GroovyHelper;
+import com.sun.faces.application.resource.ResourceCache;
+import com.sun.faces.application.resource.ResourceManager;
+import com.sun.faces.application.annotation.AnnotationManager;
+import com.sun.faces.application.annotation.FacesComponentUsage;
+import com.sun.faces.config.ConfigManager;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.compiler.Compiler;
+import com.sun.faces.facelets.compiler.SAXCompiler;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.SystemEvent;
+import javax.faces.view.facelets.TagDecorator;
+import com.sun.faces.facelets.tag.composite.CompositeLibrary;
+import com.sun.faces.facelets.tag.jstl.core.JstlCoreLibrary;
+import com.sun.faces.facelets.tag.jstl.fn.JstlFunction;
+import com.sun.faces.facelets.tag.ui.UILibrary;
+import com.sun.faces.facelets.tag.jsf.core.CoreLibrary;
+import com.sun.faces.facelets.tag.jsf.html.HtmlLibrary;
+import com.sun.faces.facelets.util.ReflectionUtil;
+import com.sun.faces.facelets.util.FunctionLibrary;
+import com.sun.faces.facelets.util.DevTools;
+import javax.faces.view.facelets.ResourceResolver;
+import javax.faces.view.facelets.FaceletCache;
+import com.sun.faces.facelets.impl.DefaultResourceResolver;
+import com.sun.faces.facelets.impl.DefaultFaceletFactory;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.spi.InjectionProvider;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.*;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableLazyBeanValidation;
+import com.sun.faces.el.DemuxCompositeELResolver;
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.el.FacesCompositeELResolver;
+import com.sun.faces.el.VariableResolverChainWrapper;
+import com.sun.faces.facelets.PrivateApiFaceletCacheAdapter;
+import com.sun.faces.facelets.tag.jsf.PassThroughAttributeLibrary;
+import com.sun.faces.facelets.tag.jsf.PassThroughElementLibrary;
+import com.sun.faces.lifecycle.ELResolverInitPhaseListener;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import javax.el.CompositeELResolver;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.VariableResolver;
+import javax.faces.application.ProjectStage;
+import javax.faces.event.PreDestroyCustomScopeEvent;
+import javax.faces.event.ScopeContext;
+import javax.servlet.ServletContext;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.LinkedHashSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.NavigationCase;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.FacesComponent;
+import javax.faces.event.PostConstructApplicationEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.flow.FlowHandler;
+import javax.faces.flow.FlowHandlerFactory;
+import javax.faces.view.facelets.FaceletCacheFactory;
+import javax.faces.view.facelets.FaceletsResourceResolver;
+
+/**
+ * <p>Break out the things that are associated with the Application, but
+ * need to be present even when the user has replaced the Application
+ * instance.</p>
+ * <p/>
+ * <p>For example: the user replaces ApplicationFactory, and wants to
+ * intercept calls to createValueExpression() and createMethodExpression() for
+ * certain kinds of expressions, but allow the existing application to
+ * handle the rest.</p>
+ */
+
+public class ApplicationAssociate {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    private ApplicationImpl app = null;
+
+    /**
+     * Overall Map containing <code>from-view-id</code> key and
+     * <code>Set</code> of <code>NavigationCase</code>
+     * objects for that key; The <code>from-view-id</code> strings in
+     * this map will be stored as specified in the configuration file -
+     * some of them will have a trailing asterisk "*" signifying wild
+     * card, and some may be specified as an asterisk "*".
+     */
+    private Map<String, Set<NavigationCase>> navigationMap = null;
+    
+    /*
+     * The FacesComponentTagLibrary uses the information in this map 
+     * to help it fabricate tag handlers for components annotated with
+     * FacesComponent.
+     * Key: namespace
+     */
+    private Map<String, List<FacesComponentUsage>> facesComponentsByNamespace = null;
+
+    // Flag indicating that a response has been rendered.
+    private boolean responseRendered = false;
+
+    private static final String ASSOCIATE_KEY = RIConstants.FACES_PREFIX +
+         "ApplicationAssociate";
+
+    private static ThreadLocal<ApplicationAssociate> instance =
+        new ThreadLocal<ApplicationAssociate>() {
+            protected ApplicationAssociate initialValue() {
+                return (null);
+            }
+        };
+
+    private List<ELResolver> elResolversFromFacesConfig = null;
+
+    @SuppressWarnings("deprecation")
+    private VariableResolver legacyVRChainHead = null;
+
+    private VariableResolverChainWrapper legacyVRChainHeadWrapperForJsp = null;
+
+    private VariableResolverChainWrapper legacyVRChainHeadWrapperForFaces = null;
+
+    @SuppressWarnings("deprecation")
+    private PropertyResolver legacyPRChainHead = null;
+    private ExpressionFactory expressionFactory = null;
+
+    @SuppressWarnings("deprecation")
+    private PropertyResolver legacyPropertyResolver = null;
+
+    @SuppressWarnings("deprecation")
+    private VariableResolver legacyVariableResolver = null;
+    private FacesCompositeELResolver facesELResolverForJsp = null;
+
+    private InjectionProvider injectionProvider;
+    private ResourceCache resourceCache;
+
+    private String contextName;
+    private boolean requestServiced;
+    private boolean errorPagePresent;
+
+    private BeanManager beanManager;
+    private GroovyHelper groovyHelper;
+    private AnnotationManager annotationManager;
+    private boolean devModeEnabled;
+    private Compiler compiler;
+    private DefaultFaceletFactory faceletFactory;
+    private ResourceManager resourceManager;
+    private ApplicationStateInfo applicationStateInfo;
+
+    private PropertyEditorHelper propertyEditorHelper;
+
+    private NamedEventManager namedEventManager;
+    
+    private WebConfiguration webConfig;
+    
+    private FlowHandler flowHandler;
+    
+    private Map<String, String> definingDocumentIdsToTruncatedJarUrls;
+    
+    private long timeOfInstantiation;
+
+    public ApplicationAssociate(ApplicationImpl appImpl) {
+        app = appImpl;
+
+        propertyEditorHelper = new PropertyEditorHelper(appImpl);
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        if (ctx == null) {
+            throw new IllegalStateException(
+                    "ApplicationAssociate ctor not called in same callstack as ConfigureListener.contextInitialized()");
+        }
+        ExternalContext externalContext = ctx.getExternalContext();
+        if (null != externalContext.getApplicationMap().get(ASSOCIATE_KEY)) {
+            throw new IllegalStateException(
+                 MessageUtils.getExceptionMessageString(
+                      MessageUtils.APPLICATION_ASSOCIATE_EXISTS_ID));
+        }
+        Map<String, Object> appMap = externalContext.getApplicationMap();
+        appMap.put(ASSOCIATE_KEY, this);
+        //noinspection CollectionWithoutInitialCapacity
+        navigationMap = new ConcurrentHashMap<String, Set<NavigationCase>>();
+        injectionProvider = (InjectionProvider) ctx.getAttributes().get(ConfigManager.INJECTION_PROVIDER_KEY);
+        webConfig = WebConfiguration.getInstance(externalContext);
+        beanManager = new BeanManager(injectionProvider,
+                                      webConfig.isOptionEnabled(
+                                           EnableLazyBeanValidation));
+        // install the bean manager as a system event listener for custom
+        // scopes being destoryed.
+        app.subscribeToEvent(PreDestroyCustomScopeEvent.class,
+                             ScopeContext.class,
+                             beanManager);
+        annotationManager = new AnnotationManager();
+
+        groovyHelper = GroovyHelper.getCurrentInstance();
+
+        devModeEnabled = (appImpl.getProjectStage() == ProjectStage.Development);
+
+        if (!devModeEnabled) {
+            resourceCache = new ResourceCache();
+        }
+
+        resourceManager = new ResourceManager(appMap, resourceCache);
+        namedEventManager = new NamedEventManager();
+        applicationStateInfo = new ApplicationStateInfo();
+        
+        appImpl.subscribeToEvent(PostConstructApplicationEvent.class,
+                         Application.class, new PostConstructApplicationListener());
+        
+        definingDocumentIdsToTruncatedJarUrls = new ConcurrentHashMap<String, String>();
+        timeOfInstantiation = System.currentTimeMillis();
+    }
+
+    private Map<String, List<String>> resourceLibraryContracts;
+    
+    public void setResourceLibraryContracts(HashMap<String, List<String>> map) {
+        this.resourceLibraryContracts = map;
+    }
+    
+    private class PostConstructApplicationListener implements SystemEventListener {
+
+        @Override
+        public boolean isListenerForSource(Object source) {
+            return source instanceof Application;
+        }
+
+        @Override
+        public void processEvent(SystemEvent event) throws AbortProcessingException {
+            ApplicationAssociate.this.initializeFacelets();
+            
+            if (null == ApplicationAssociate.this.flowHandler) {
+                FlowHandlerFactory flowHandlerFactory = (FlowHandlerFactory) FactoryFinder.getFactory(FactoryFinder.FLOW_HANDLER_FACTORY);
+                ApplicationAssociate.this.flowHandler = flowHandlerFactory.createFlowHandler(FacesContext.getCurrentInstance());
+            }
+
+            FacesContext context = FacesContext.getCurrentInstance();
+            if (Util.isCDIAvailable(context.getExternalContext().getApplicationMap())) {
+                try {
+                    JavaFlowLoaderHelper flowLoader = new JavaFlowLoaderHelper();
+                    flowLoader.loadFlows(context, ApplicationAssociate.this.flowHandler);
+                } catch (IOException ex) {
+                    LOGGER.log(Level.SEVERE, null, ex);
+                }
+            }
+            // cause the Facelet VDL to be instantiated eagerly, so it can 
+            // become aware of the resource library contracts
+            
+            ViewHandler viewHandler = context.getApplication().getViewHandler();
+
+            // FindBugs: ignore the return value, this is just to get the 
+            // ctor called at this time.
+            viewHandler.getViewDeclarationLanguage(context, 
+                    RIConstants.FACES_PREFIX + "xhtml");
+
+        }
+        
+    }
+    
+    public void initializeFacelets() {
+        if (null != compiler) {
+            return;
+        }
+        
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        
+        if (!webConfig.isOptionEnabled(DisableFaceletJSFViewHandler)) {
+            Map<String, Object> appMap = ctx.getExternalContext().getApplicationMap();
+            compiler = createCompiler(appMap, webConfig);
+            faceletFactory = createFaceletFactory(ctx, compiler, webConfig);
+        }
+        
+    }
+
+    public static ApplicationAssociate getInstance(ExternalContext
+         externalContext) {
+        if (externalContext == null) {
+            return null;
+        }
+        Map applicationMap = externalContext.getApplicationMap();
+        return ((ApplicationAssociate)
+             applicationMap.get(ASSOCIATE_KEY));
+    }
+    
+    public long getTimeOfInstantiation() {
+        return timeOfInstantiation;
+    }
+
+    public static ApplicationAssociate getInstance(ServletContext context) {
+        if (context == null) {
+            return null;
+        }
+        return (ApplicationAssociate) context.getAttribute(ASSOCIATE_KEY);
+    }
+
+    public static void setCurrentInstance(ApplicationAssociate associate) {
+
+        if (associate == null) {
+            instance.remove();
+        } else {
+            instance.set(associate);
+        }
+        
+    }
+
+    public static ApplicationAssociate getCurrentInstance() {
+
+        ApplicationAssociate associate = instance.get();
+        if (associate == null) {
+            // Fallback to ExternalContext lookup
+            FacesContext fc = FacesContext.getCurrentInstance();
+            if (fc != null) {
+                ExternalContext extContext = fc.getExternalContext();
+                if (extContext != null) {
+                    return ApplicationAssociate.getInstance(extContext);
+                }
+            }
+        }
+
+        return associate;
+
+    }
+
+    public ApplicationStateInfo getApplicationStateInfo() {
+        return applicationStateInfo;
+    }
+
+
+    public ResourceManager getResourceManager() {
+        return resourceManager;
+    }
+
+    // Return the resource library contracts and mappings from the
+    // application configuration resources
+    public Map<String, List<String>> getResourceLibraryContracts() {
+        return resourceLibraryContracts;
+    }
+
+    public void setResourceManager(ResourceManager resourceManager) {
+        this.resourceManager = resourceManager;
+    }
+
+    public ResourceCache getResourceCache() {
+        return resourceCache;
+    }
+
+    public AnnotationManager getAnnotationManager() {
+        return annotationManager;
+    }
+
+    public Compiler getCompiler() {
+        if (null == compiler) {
+            initializeFacelets();
+        }
+        
+        
+        return compiler;
+    }
+
+    public boolean isErrorPagePresent() {
+        return errorPagePresent;
+    }
+
+    public void setErrorPagePresent(boolean errorPagePresent) {
+        this.errorPagePresent = errorPagePresent;
+    }
+
+    public DefaultFaceletFactory getFaceletFactory() {
+        return faceletFactory;
+    }
+
+    public static void clearInstance(ExternalContext
+         externalContext) {
+        Map applicationMap = externalContext.getApplicationMap();
+        ApplicationAssociate me = (ApplicationAssociate) applicationMap.get(ASSOCIATE_KEY);
+        if (null != me && null != me.resourceBundles) {
+            me.resourceBundles.clear();
+        }
+        applicationMap.remove(ASSOCIATE_KEY);
+    }
+
+    public static void clearInstance(ServletContext sc) {
+        ApplicationAssociate me = (ApplicationAssociate) sc.getAttribute(ASSOCIATE_KEY);
+        if (null != me && null != me.resourceBundles) {
+            me.resourceBundles.clear();
+        }
+        sc.removeAttribute(ASSOCIATE_KEY);    
+    }
+
+
+    public BeanManager getBeanManager() {
+        return beanManager;
+    }
+
+    public GroovyHelper getGroovyHelper() {
+        return groovyHelper;
+    }
+
+    public void initializeELResolverChains() {
+        // 1. initialize the chains with default values
+        if (null == app.compositeELResolver) {
+            app.compositeELResolver =
+                    new DemuxCompositeELResolver(
+                    FacesCompositeELResolver.ELResolverChainType.Faces);
+            ELUtils.buildFacesResolver(app.compositeELResolver, this);
+            ELResolverInitPhaseListener.populateFacesELResolverForJsp(app,
+                    this);
+        }
+    }
+
+    public void installProgrammaticallyAddedResolvers() {
+        // Ensure custom resolvers are inserted at the correct place.
+        VariableResolver vr = this.getLegacyVariableResolver();
+        if (null != vr) {
+            assert(null != this.getLegacyVRChainHeadWrapperForJsp());
+            this.getLegacyVRChainHeadWrapperForJsp().setWrapped(vr);
+            assert(null != this.getLegacyVRChainHeadWrapperForFaces());
+            this.getLegacyVRChainHeadWrapperForFaces().setWrapped(vr);
+        }
+    }
+
+    public boolean isDevModeEnabled() {
+        return devModeEnabled;
+    }
+
+    /**
+     * Obtain the PropertyEditorHelper instance for this app.
+     *
+     * @return The PropertyEditorHeler instance for this app.
+     */
+    public PropertyEditorHelper getPropertyEditorHelper() {
+        return propertyEditorHelper;
+    }
+
+    /**
+     * This method is called by <code>ConfigureListener</code> and will
+     * contain any <code>VariableResolvers</code> defined within
+     * faces-config configuration files.
+     *
+     * @param resolver VariableResolver
+     */
+    @SuppressWarnings("deprecation")
+    public void setLegacyVRChainHead(VariableResolver resolver) {
+        this.legacyVRChainHead = resolver;
+    }
+
+    @SuppressWarnings("deprecation")
+    public VariableResolver getLegacyVRChainHead() {
+        return legacyVRChainHead;
+    }
+
+    public VariableResolverChainWrapper getLegacyVRChainHeadWrapperForJsp() {
+        return legacyVRChainHeadWrapperForJsp;
+    }
+
+    public void setLegacyVRChainHeadWrapperForJsp(VariableResolverChainWrapper legacyVRChainHeadWrapper) {
+        this.legacyVRChainHeadWrapperForJsp = legacyVRChainHeadWrapper;
+    }
+
+    public VariableResolverChainWrapper getLegacyVRChainHeadWrapperForFaces() {
+        return legacyVRChainHeadWrapperForFaces;
+    }
+
+    public void setLegacyVRChainHeadWrapperForFaces(VariableResolverChainWrapper legacyVRChainHeadWrapperForFaces) {
+        this.legacyVRChainHeadWrapperForFaces = legacyVRChainHeadWrapperForFaces;
+    }
+
+    /**
+     * This method is called by <code>ConfigureListener</code> and will
+     * contain any <code>PropertyResolvers</code> defined within
+     * faces-config configuration files.
+     *
+     * @param resolver PropertyResolver
+     */
+    @SuppressWarnings("deprecation")
+    public void setLegacyPRChainHead(PropertyResolver resolver) {
+        this.legacyPRChainHead = resolver;
+    }
+
+    @SuppressWarnings("deprecation")
+    public PropertyResolver getLegacyPRChainHead() {
+        return legacyPRChainHead;
+    }
+
+    public FacesCompositeELResolver getFacesELResolverForJsp() {
+        return facesELResolverForJsp;
+    }
+    
+    public FlowHandler getFlowHandler() {
+        return flowHandler;
+    }
+    
+    public void setFlowHandler(FlowHandler flowHandler) {
+        this.flowHandler = flowHandler;
+    }
+
+    public void setFacesELResolverForJsp(FacesCompositeELResolver celr) {
+        facesELResolverForJsp = celr;
+    }
+
+    public void setELResolversFromFacesConfig(List<ELResolver> resolvers) {
+        this.elResolversFromFacesConfig = resolvers;
+    }
+
+    public List<ELResolver> getELResolversFromFacesConfig() {
+        return elResolversFromFacesConfig;
+    }
+
+    public void setExpressionFactory(ExpressionFactory expressionFactory) {
+        this.expressionFactory = expressionFactory;
+    }
+
+    public ExpressionFactory getExpressionFactory() {
+        return this.expressionFactory;
+    }
+
+    public CompositeELResolver getApplicationELResolvers() {
+        return app.getApplicationELResolvers();
+    }
+
+    public InjectionProvider getInjectionProvider() {
+        return injectionProvider;
+    }
+
+    public void setContextName(String contextName) {
+        this.contextName = contextName;
+    }
+
+    public String getContextName() {
+        return contextName;
+    }
+
+    /**
+     * Maintains the PropertyResolver called through
+     * Application.setPropertyResolver()
+     * @param resolver PropertyResolver
+     */
+    @SuppressWarnings("deprecation")
+    public void setLegacyPropertyResolver(PropertyResolver resolver) {
+        this.legacyPropertyResolver = resolver;
+    }
+
+    /**
+     * @return the PropertyResolver called through
+     * Application.getPropertyResolver()
+     */
+    @SuppressWarnings("deprecation")
+    public PropertyResolver getLegacyPropertyResolver() {
+        return legacyPropertyResolver;
+    }
+
+    /**
+     * Maintains the PropertyResolver called through
+     * Application.setVariableResolver()
+     * @param resolver VariableResolver
+     */
+    @SuppressWarnings("deprecation")
+    public void setLegacyVariableResolver(VariableResolver resolver) {
+        this.legacyVariableResolver = resolver;
+    }
+
+    /**
+     * @return the VariableResolver called through
+     * Application.getVariableResolver()
+     */
+    @SuppressWarnings("deprecation")
+    public VariableResolver getLegacyVariableResolver() {
+        return legacyVariableResolver;
+    }
+
+
+    /**
+     * Called by application code to indicate we've processed the
+     * first request to the application.
+     */
+    public void setRequestServiced() {
+        this.requestServiced = true;
+    }
+
+    /**
+     * @return <code>true</code> if we've processed a request, otherwise
+     *         <code>false</code>
+     */
+    public boolean hasRequestBeenServiced() {
+        return requestServiced;
+    }
+    
+    public void addFacesComponent(FacesComponentUsage facesComponentUsage) {
+        FacesComponent facesComponent = facesComponentUsage.getAnnotation();
+        assert(facesComponent.createTag());
+        if (null == facesComponentsByNamespace) {
+            facesComponentsByNamespace = new HashMap<String, List<FacesComponentUsage>>();
+        }
+
+        List<FacesComponentUsage> componentsInNamespace = null;
+        final String namespace = facesComponent.namespace();
+        
+        if (!facesComponentsByNamespace.containsKey(facesComponent.namespace())) {
+            componentsInNamespace = new ArrayList<FacesComponentUsage>();
+            facesComponentsByNamespace.put(namespace, componentsInNamespace);
+        } else {
+            componentsInNamespace = facesComponentsByNamespace.get(namespace);
+        }
+        componentsInNamespace.add(facesComponentUsage);
+
+    }
+    
+    public List<FacesComponentUsage> getComponentsForNamespace(String ns) {
+        List<FacesComponentUsage> result = Collections.emptyList();
+        if (null != facesComponentsByNamespace && facesComponentsByNamespace.containsKey(ns)) {
+            result = facesComponentsByNamespace.get(ns);
+        }
+       
+        return result;
+    }
+    
+    /**
+     * Add a navigation case to the internal case set.  If a case set
+     * does not already exist in the case list map containing this case
+     * (identified by <code>from-view-id</code>), start a new list,
+     * add the case to it, and store the set in the case set map.
+     * If a case set already exists, overwrite the previous case.
+     *
+     * @param navigationCase the navigation case containing navigation
+     *                       mapping information from the configuration file.
+     */
+    public void addNavigationCase(NavigationCase navigationCase) {
+
+        String fromViewId = navigationCase.getFromViewId();
+        Set<NavigationCase> caseSet = navigationMap.get(fromViewId);
+        if (caseSet == null) {
+            //noinspection CollectionWithoutInitialCapacity
+            caseSet = new LinkedHashSet<NavigationCase>();
+            caseSet.add(navigationCase);
+            navigationMap.put(fromViewId, caseSet);
+        } else {
+            // if there already is a case existing for the
+            // fromviewid/fromaction.fromoutcome combination,
+            // replace it ...  (last one wins).
+            caseSet.add(navigationCase);
+        }
+
+    }
+    
+    
+
+    public NamedEventManager getNamedEventManager() {
+        return namedEventManager;
+    }
+
+
+    /**
+     * Return a <code>Map</code> of navigation mappings loaded from
+     * the configuration system.  The key for the returned <code>Map</code>
+     * is <code>from-view-id</code>, and the value is a <code>List</code>
+     * of navigation cases.
+     *
+     * @return Map the map of navigation mappings.
+     */
+    public Map<String, Set<NavigationCase>> getNavigationCaseListMappings() {
+        if (navigationMap == null) {
+            return Collections.emptyMap();
+        }
+        return navigationMap;
+    }
+
+
+    public ResourceBundle getResourceBundle(FacesContext context,
+                                            String var) {
+        ApplicationResourceBundle bundle = resourceBundles.get(var);
+        if (bundle == null) {
+            return null;
+        }
+        UIViewRoot root;
+        // Start out with the default locale
+        Locale locale;
+        Locale defaultLocale = Locale.getDefault();
+        locale = defaultLocale;
+        // See if this FacesContext has a ViewRoot
+        root = context.getViewRoot();
+        if (null != root) {
+            locale = root.getLocale();
+            if (null == root.getLocale()){
+                // If the ViewRoot has no Locale, fall back to the default.
+                locale = defaultLocale;
+            }
+        }
+        assert (null != locale);
+        //ResourceBundleBean bean = resourceBundles.get(var);
+        return bundle.getResourceBundle(locale);
+
+    }
+
+    /**
+     * keys: <var> element from faces-config<p>
+     * <p/>
+     * values: ResourceBundleBean instances.
+     */
+
+    @SuppressWarnings({"CollectionWithoutInitialCapacity"})
+    Map<String, ApplicationResourceBundle> resourceBundles =
+         new HashMap<String, ApplicationResourceBundle>();
+
+    public void addResourceBundle(String var, ApplicationResourceBundle bundle) {
+        resourceBundles.put(var, bundle);
+    }
+
+    public Map<String, ApplicationResourceBundle> getResourceBundles() {
+        return resourceBundles;
+    }
+
+    // This is called by ViewHandlerImpl.renderView().
+    public void responseRendered() {
+        responseRendered = true;
+    }
+
+    public boolean isResponseRendered() {
+        return responseRendered;
+    }
+    
+    public boolean urlIsRelatedToDefiningDocumentInJar(URL candidateUrl, String definingDocumentId) {
+        boolean result = false;
+        String match = definingDocumentIdsToTruncatedJarUrls.get(definingDocumentId);
+        if (null != match) {
+            String candidate = candidateUrl.toExternalForm();
+            if (null != candidate && null != match) {
+                int i = candidate.lastIndexOf("/META-INF");
+                if (-1 == i) {
+                    throw new FacesException("Invalid url for application configuration resources file with respect to faces flows");
+                }
+                candidate = candidate.substring(0, i);
+                result = candidate.equals(match);
+            }
+        }
+        
+        return result;
+    }
+    
+    public void relateUrlToDefiningDocumentInJar(URL url, String definingDocumentId) {
+        String candidate = url.toExternalForm();
+        int i = candidate.lastIndexOf("/META-INF");
+        if (-1 == i) {
+            return;
+        }
+        candidate = candidate.substring(0, i);
+        
+        definingDocumentIdsToTruncatedJarUrls.put(definingDocumentId, candidate);
+    }
+
+
+    protected DefaultFaceletFactory createFaceletFactory(FacesContext ctx,
+            Compiler c, WebConfiguration webConfig) {
+
+        // refresh period
+        String refreshPeriod = webConfig.getOptionValue(FaceletsDefaultRefreshPeriod);
+        long period = Long.parseLong(refreshPeriod);
+
+        // resource resolver
+        ResourceResolver resolver = new DefaultResourceResolver(app.getResourceHandler());
+
+        String resolverName = webConfig.getOptionValue(FaceletsResourceResolver);
+        if (resolverName != null && resolverName.length() > 0) {
+            resolver = (ResourceResolver) 
+                    ReflectionUtil.decorateInstance(resolverName,
+                    ResourceResolver.class,
+                    resolver);
+        } else {
+        
+            Set<? extends Class> resourceResolvers = 
+                    ConfigManager.getAnnotatedClasses(ctx).get(FaceletsResourceResolver.class);
+            if ((null != resourceResolvers) && !resourceResolvers.isEmpty()) {
+                Class resolverClass = resourceResolvers.iterator().next();
+                if (1 < resourceResolvers.size() && LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, "Found more than one class " + 
+                        "annotated with FaceletsResourceResolver.  Will " + 
+                        "use {0} and ignore the others", resolverClass);
+                }
+                resolver = (ResourceResolver) 
+                        ReflectionUtil.decorateInstance(resolverClass,
+                        ResourceResolver.class,
+                        resolver);
+            } 
+        }
+        
+        FaceletCache cache = null;
+        String faceletCacheName = webConfig.getOptionValue(FaceletCache);
+        if (faceletCacheName != null && faceletCacheName.length() > 0) {
+            try {
+                com.sun.faces.facelets.FaceletCache privateApiCache =
+                        (com.sun.faces.facelets.FaceletCache)ReflectionUtil.forName(faceletCacheName)
+                                          .newInstance();
+                cache = new PrivateApiFaceletCacheAdapter(privateApiCache);
+            } catch(Exception e) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "Error Loading Facelet cache: " + faceletCacheName,
+                               e);
+                }
+            }
+        }
+        if (null == cache) {
+            FaceletCacheFactory cacheFactory = (FaceletCacheFactory)
+                    FactoryFinder.getFactory(FactoryFinder.FACELET_CACHE_FACTORY);
+            cache = cacheFactory.getFaceletCache();
+        }
+
+        // Resource.getResourceUrl(ctx,"/")
+        DefaultFaceletFactory toReturn = new DefaultFaceletFactory();
+        toReturn.init(c, resolver, period, cache);
+                
+        return toReturn;
+
+    }
+
+
+    protected Compiler createCompiler(Map<String, Object> appMap, WebConfiguration webConfig) {
+
+        Compiler c = new SAXCompiler();
+
+        // load decorators
+        String decParam = webConfig
+              .getOptionValue(FaceletsDecorators);
+        if (decParam != null) {
+            decParam = decParam.trim();
+            String[] decs = Util.split(appMap, decParam, ";");
+            TagDecorator decObj;
+            for (String decorator : decs) {
+                try {
+                    decObj = (TagDecorator) ReflectionUtil.forName(decorator)
+                          .newInstance();
+                    c.addTagDecorator(decObj);
+
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   "Successfully Loaded Decorator: {0}",
+                                   decorator);
+                    }
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "Error Loading Decorator: " + decorator,
+                                   e);
+                    }
+                }
+            }
+        }
+
+        // skip params?
+        c.setTrimmingComments(
+              webConfig.isOptionEnabled(
+                    BooleanWebContextInitParameter.FaceletsSkipComments));
+
+        c.addTagLibrary(new CoreLibrary());
+        c.addTagLibrary(new CoreLibrary(CoreLibrary.XMLNSNamespace));
+        c.addTagLibrary(new HtmlLibrary());
+        c.addTagLibrary(new HtmlLibrary(HtmlLibrary.XMLNSNamespace));
+        c.addTagLibrary(new UILibrary());
+        c.addTagLibrary(new UILibrary(UILibrary.XMLNSNamespace));
+        c.addTagLibrary(new JstlCoreLibrary());
+        c.addTagLibrary(new JstlCoreLibrary(JstlCoreLibrary.IncorrectNamespace));
+        c.addTagLibrary(new JstlCoreLibrary(JstlCoreLibrary.XMLNSNamespace));
+        c.addTagLibrary(new PassThroughAttributeLibrary());
+        c.addTagLibrary(new PassThroughElementLibrary());
+        c.addTagLibrary(new FunctionLibrary(JstlFunction.class, FunctionLibrary.Namespace));
+        c.addTagLibrary(new FunctionLibrary(JstlFunction.class, FunctionLibrary.XMLNSNamespace));
+        if (isDevModeEnabled()) {
+            c.addTagLibrary(new FunctionLibrary(DevTools.class, DevTools.Namespace));
+            c.addTagLibrary(new FunctionLibrary(DevTools.class, DevTools.NewNamespace));
+        }
+        c.addTagLibrary(new CompositeLibrary());
+        c.addTagLibrary(new CompositeLibrary(CompositeLibrary.XMLNSNamespace));
+
+        return c;
+
+    }
+
+
+}
diff --git a/com/sun/faces/application/ApplicationFactoryImpl.java b/com/sun/faces/application/ApplicationFactoryImpl.java
new file mode 100644
index 0000000..51ed3dc
--- /dev/null
+++ b/com/sun/faces/application/ApplicationFactoryImpl.java
@@ -0,0 +1,137 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.FacesLogger;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.text.MessageFormat;
+
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+
+/**
+ * <p><strong>ApplicationFactory</strong> is a factory object that creates
+ * (if needed) and returns {@link Application} instances.</p>
+ * <p/>
+ * <p>There must be one {@link ApplicationFactory} instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   ApplicationFactory factory = (ApplicationFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+ * </pre>
+ */
+public class ApplicationFactoryImpl extends ApplicationFactory {
+
+   // Log instance for this class
+    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
+    //
+    // Protected Constants
+    //
+
+    //
+    // Class Variables
+    //
+
+    // Attribute Instance Variables
+
+    private volatile Application application;
+
+    // Relationship Instance Variables
+
+    //
+    // Constructors and Initializers
+    //
+
+
+    /*
+     * Constructor
+     */
+    public ApplicationFactoryImpl() {
+        super();
+        application = null;
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE, "Created ApplicationFactory ");
+        }
+    }
+
+
+    /**
+     * <p>Create (if needed) and return an {@link Application} instance
+     * for this web application.</p>
+     */
+    public Application getApplication() {
+
+        if (application == null) {
+            application = new ApplicationImpl();
+            InjectionApplicationFactory.setApplicationInstance(application);
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine(MessageFormat.format("Created Application instance ''{0}''",
+                                                 application));
+            }
+        }
+        return application;
+    }
+
+
+    /**
+     * <p>Replace the {@link Application} instance that will be
+     * returned for this web application.</p>
+     *
+     * @param application The replacement {@link Application} instance
+     */
+    public synchronized void setApplication(Application application) {
+        if (application == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "application");
+            throw new NullPointerException(message);
+        }
+
+        this.application = application;
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine(MessageFormat.format("set Application Instance to ''{0}''", 
+                                             application.getClass().getName()));
+        }
+    }
+}
diff --git a/com/sun/faces/application/ApplicationImpl.java b/com/sun/faces/application/ApplicationImpl.java
new file mode 100644
index 0000000..2f3e383
--- /dev/null
+++ b/com/sun/faces/application/ApplicationImpl.java
@@ -0,0 +1,2559 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.spi.InjectionProviderException;
+
+import java.beans.*;
+import java.lang.reflect.Constructor;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.el.CompositeELResolver;
+import javax.el.ELContextListener;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
+import javax.el.MethodExpression;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.NavigationHandler;
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.DateTimeConverter;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.ReferenceSyntaxException;
+import javax.faces.el.ValueBinding;
+import javax.faces.el.VariableResolver;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionListener;
+import javax.faces.flow.FlowHandler;
+import javax.faces.validator.Validator;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DateTimeConverterUsesSystemTimezone;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.RegisterConverterPropertyEditors;
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.el.FacesCompositeELResolver;
+import com.sun.faces.el.PropertyResolverImpl;
+import com.sun.faces.el.VariableResolverImpl;
+import com.sun.faces.spi.InjectionProvider;
+import com.sun.faces.util.Cache;
+import com.sun.faces.util.Cache.Factory;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.ReflectionUtils;
+import com.sun.faces.util.Util;
+import java.util.HashSet;
+
+import java.util.LinkedHashSet;
+
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.event.SystemEventListenerHolder;
+import javax.faces.event.ExceptionQueuedEventContext;
+
+import java.util.List;
+import java.util.TimeZone;
+import java.util.LinkedHashMap;
+
+import javax.el.ValueExpression;
+import javax.faces.application.Resource;
+import javax.faces.render.RenderKit;
+import javax.faces.render.Renderer;
+import javax.faces.view.ViewDeclarationLanguage;
+
+
+/**
+ * <p><strong>Application</strong> represents a per-web-application
+ * singleton object where applications based on JavaServer Faces (or
+ * implementations wishing to provide extended functionality) can
+ * register application-wide singletons that provide functionality
+ * required by JavaServer Faces.
+ */
+public class ApplicationImpl extends Application {
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    private static final ELContextListener[] EMPTY_EL_CTX_LIST_ARRAY = { };
+
+    private static final Map<String,Class<?>[]> STANDARD_CONV_ID_TO_TYPE_MAP =
+         new HashMap<String,Class<?>[]>(8, 1.0f);
+    private static final Map<Class<?>,String> STANDARD_TYPE_TO_CONV_ID_MAP =
+         new HashMap<Class<?>,String>(16, 1.0f);
+
+    static {
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Byte", new Class[] { Byte.TYPE, Byte.class});
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Boolean", new Class[] { Boolean.TYPE, Boolean.class});
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Character", new Class[] { Character.TYPE, Character.class});
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Short", new Class[] { Short.TYPE, Short.class });
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Integer", new Class[] { Integer.TYPE, Integer.class });
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Long", new Class[] { Long.TYPE, Long.class });
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Float", new Class[] { Float.TYPE, Float.class });
+        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Double", new Class[] { Double.TYPE, Double.class });
+        for (Map.Entry<String,Class<?>[]> entry : STANDARD_CONV_ID_TO_TYPE_MAP.entrySet()) {
+            Class<?>[] types = entry.getValue();
+            String key = entry.getKey();
+            for (Class<?> clazz : types) {
+                STANDARD_TYPE_TO_CONV_ID_MAP.put(clazz, key);
+            }
+        }
+    }
+
+    // Relationship Instance Variables
+
+    private ApplicationAssociate associate = null;
+    private ProjectStage projectStage;
+
+    private volatile ActionListener actionListener = null;
+    private volatile NavigationHandler navigationHandler = null;
+    private volatile PropertyResolverImpl propertyResolver = null;
+    volatile VariableResolverImpl variableResolver = null;
+    private volatile ViewHandler viewHandler = null;
+    private volatile ResourceHandler resourceHandler;
+    private volatile StateManager stateManager = null;
+    private volatile ArrayList<Locale> supportedLocales = null;
+    private volatile Locale defaultLocale = null;
+    //
+    // This map stores reference expression | value binding instance
+    // mappings.
+    //
+    
+    //
+    // These four maps store store "identifier" | "class name"
+    // mappings.
+    //
+    private ApplicationInstanceFactoryMetadataMap<String,Object> behaviorMap = null;
+    private ApplicationInstanceFactoryMetadataMap<String,Object> componentMap = null;
+    private ApplicationInstanceFactoryMetadataMap<String,Object> converterIdMap = null;
+    private ApplicationInstanceFactoryMetadataMap<String,Object> validatorMap = null;
+
+    private Map<Class<?>,Object> converterTypeMap = null;
+    private Set<String> defaultValidatorIds = null;
+    private volatile Map<String,String> defaultValidatorInfo = null;
+    private volatile String messageBundle = null;
+
+    private List<ELContextListener> elContextListeners = null;
+    CompositeELResolver elResolvers = null;
+    FacesCompositeELResolver compositeELResolver = null;
+    private final SystemEventHelper systemEventHelper = new SystemEventHelper();
+    private final ComponentSystemEventHelper compSysEventHelper = new ComponentSystemEventHelper();
+    private boolean passDefaultTimeZone;
+    private boolean registerPropertyEditors;
+    private TimeZone systemTimeZone;
+
+    /**
+     * Constructor
+     */
+    public ApplicationImpl() {
+        super();
+        associate = new ApplicationAssociate(this);
+        componentMap = new ApplicationInstanceFactoryMetadataMap(new ConcurrentHashMap<String, Object>());
+        converterIdMap = new ApplicationInstanceFactoryMetadataMap(new ConcurrentHashMap<String, Object>());
+        converterTypeMap = new ConcurrentHashMap<Class<?>, Object>();
+        validatorMap = new ApplicationInstanceFactoryMetadataMap(new ConcurrentHashMap<String, Object>());
+        defaultValidatorIds = new LinkedHashSet<String>();
+        behaviorMap = new ApplicationInstanceFactoryMetadataMap(new ConcurrentHashMap<String, Object>());
+        elContextListeners = new CopyOnWriteArrayList<ELContextListener>();
+        propertyResolver = new PropertyResolverImpl();
+        variableResolver = new VariableResolverImpl();
+        elResolvers = new CompositeELResolver();
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        WebConfiguration webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
+        passDefaultTimeZone = webConfig.isOptionEnabled(DateTimeConverterUsesSystemTimezone);
+        registerPropertyEditors = webConfig.isOptionEnabled(RegisterConverterPropertyEditors);
+        if (passDefaultTimeZone) {
+            systemTimeZone = TimeZone.getDefault();
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, "Created Application instance ");
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#publishEvent(FacesContext, Class, Object)
+     */
+    @Override
+    public void publishEvent(FacesContext context,
+                             Class<? extends SystemEvent> systemEventClass,
+                             Object source) {
+
+        publishEvent(context, systemEventClass, null, source);
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#publishEvent(FacesContext, Class, Object)
+     */
+    @Override
+    public void publishEvent(FacesContext context,
+                             Class<? extends SystemEvent> systemEventClass,
+                             Class<?> sourceBaseType,
+                             Object source) {
+
+        Util.notNull("context", context);
+        Util.notNull("systemEventClass", systemEventClass);
+        Util.notNull("source", source);
+        if (!needsProcessing(context, systemEventClass)) {
+            return;
+        }
+        // source is not compatible with the provided base type.
+        // Log a warning that the types are incompatible and return. 
+        if (getProjectStage() == ProjectStage.Development
+              && sourceBaseType != null
+              && !sourceBaseType.isInstance(source)) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                           "jsf.application.publish.event.base_type_mismatch",
+                           new Object[] { source.getClass().getName(),
+                                          sourceBaseType.getName() });                
+            }
+            return;
+        }
+
+        try {
+            // The side-effect of calling invokeListenersFor
+            // will create a SystemEvent object appropriate to event/source
+            // combination.  This event will be passed on subsequent invocations
+            // of invokeListenersFor
+            SystemEvent event;
+
+            // Look for and invoke any listeners stored on the source instance.
+            event = invokeComponentListenersFor(systemEventClass, source);
+
+            // Look for and invoke any 'view' listeners 
+            event = invokeViewListenersFor(context, systemEventClass, event, source);
+
+            // look for and invoke any listeners stored on the application
+            // using source type.
+            event = invokeListenersFor(systemEventClass,
+                                       event,
+                                       source,
+                                       sourceBaseType,
+                                       true);
+
+            // look for and invoke any listeners not specific to the source class
+            invokeListenersFor(systemEventClass, event, source, null, false);
+        } catch (AbortProcessingException ape) {
+            context.getApplication().publishEvent(context,
+                                                  ExceptionQueuedEvent.class,
+                                                  new ExceptionQueuedEventContext(context, ape));
+        }
+
+    }
+
+
+    /**
+     * @see Application#subscribeToEvent(Class, Class, javax.faces.event.SystemEventListener)
+     */
+    @Override
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
+                                 Class<?> sourceClass,
+                                 SystemEventListener listener) {
+
+        Util.notNull("systemEventClass", systemEventClass);
+        Util.notNull("listener", listener);
+
+        Set<SystemEventListener> listeners =
+              getListeners(systemEventClass, sourceClass);
+        listeners.add(listener);
+
+    }
+
+
+    /**
+     * @see Application#subscribeToEvent(Class, javax.faces.event.SystemEventListener)
+     */
+    @Override
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
+                                 SystemEventListener listener) {
+
+        subscribeToEvent(systemEventClass, null, listener);
+
+    }
+
+
+    /**
+     * @see Application#unsubscribeFromEvent(Class, Class, javax.faces.event.SystemEventListener)
+     */
+    @Override
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
+                                     Class<?> sourceClass,
+                                     SystemEventListener listener) {
+
+        Util.notNull("systemEventClass", systemEventClass);
+        Util.notNull("listener", listener);
+
+        Set<SystemEventListener> listeners =
+              getListeners(systemEventClass, sourceClass);
+        if (listeners != null) {
+            listeners.remove(listener);
+        }
+
+    }
+
+    /**
+     * @see Application#unsubscribeFromEvent(Class, javax.faces.event.SystemEventListener)
+     */
+    @Override
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
+                                     SystemEventListener listener) {
+
+        unsubscribeFromEvent(systemEventClass, null, listener);
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#addELContextListener(javax.el.ELContextListener)
+     */
+    @Override
+    public void addELContextListener(ELContextListener listener) {
+        if (listener != null) {
+            elContextListeners.add(listener);
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#removeELContextListener(javax.el.ELContextListener)
+     */
+    @Override
+    public void removeELContextListener(ELContextListener listener) {
+        if (listener != null) {
+            elContextListeners.remove(listener);
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getELContextListeners()
+     */
+    @Override
+    public ELContextListener [] getELContextListeners() {
+        if (!elContextListeners.isEmpty()) {
+            return (elContextListeners.toArray(
+                       new ELContextListener[elContextListeners.size()]));
+        } else {
+            return (EMPTY_EL_CTX_LIST_ARRAY);
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getExpressionFactory()
+     */
+    @Override
+    public ExpressionFactory getExpressionFactory() {
+        return associate.getExpressionFactory();
+    }
+
+    @Override
+    public FlowHandler getFlowHandler() {
+        return associate.getFlowHandler();
+    }
+    
+    @Override
+    public synchronized void setFlowHandler(FlowHandler flowHandler) {
+
+        Util.notNull("flowHandler", flowHandler);
+
+        associate.setFlowHandler(flowHandler);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("set FlowHandler Instance to ''{0}''",
+                                             flowHandler.getClass().getName()));
+        }
+    }
+
+    
+
+
+    /**
+     * @see javax.faces.application.Application#evaluateExpressionGet(javax.faces.context.FacesContext, String, Class)
+     */
+    @Override
+    public <T> T evaluateExpressionGet(FacesContext context,
+                                       String expression,
+                                       Class<? extends T> expectedType) throws ELException {
+        ValueExpression ve = 
+          getExpressionFactory().createValueExpression(context.getELContext(), 
+                                                       expression,
+                                                       expectedType);
+        //noinspection unchecked
+        return (T)(ve.getValue(context.getELContext()));
+    }
+
+
+    @Override
+    public UIComponent createComponent(ValueExpression componentExpression,
+                                       FacesContext context,
+                                       String componentType)
+    throws FacesException {
+
+        Util.notNull("componentExpression", componentExpression);
+        Util.notNull("context", context);
+        Util.notNull("componentType", componentType);
+
+        return createComponentApplyAnnotations(context,
+                                               componentExpression,
+                                               componentType,
+                                               null,
+                                               true);
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getELResolver()
+     */
+    @Override
+    public ELResolver getELResolver() {
+
+        if (compositeELResolver == null) {
+            performOneTimeELInitialization();
+        }
+
+        return compositeELResolver;
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#addELResolver(javax.el.ELResolver)
+     */
+    @Override
+    public void addELResolver(ELResolver resolver) {
+
+        if (associate.hasRequestBeenServiced()) {
+            throw new IllegalStateException(
+                  MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "ELResolver"));
+        }
+
+        elResolvers.add(resolver);
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getProjectStage() 
+     */
+    @Override
+    public ProjectStage getProjectStage() {
+        
+        if (projectStage == null) {
+            WebConfiguration webConfig =
+                  WebConfiguration.getInstance(
+                        FacesContext.getCurrentInstance().getExternalContext());
+            String value = webConfig.getEnvironmentEntry(WebConfiguration.WebEnvironmentEntry.ProjectStage);
+            if (value != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               "ProjectStage configured via JNDI: {0}",
+                               value);
+                }
+            } else {
+                value = webConfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage);
+                if (value != null && LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                       "ProjectStage configured via servlet context init parameter: {0}", 
+                       value);
+                }
+            }
+            if (value != null) {
+                try {
+                    projectStage = ProjectStage.valueOf(value);
+                } catch (IllegalArgumentException iae) {
+                    if (LOGGER.isLoggable(Level.INFO)) {
+                        LOGGER.log(Level.INFO,
+                                   "Unable to discern ProjectStage for value {0}.",
+                                   value);
+                    }
+                }
+            }
+            if (projectStage == null) {
+                projectStage = ProjectStage.Production;
+            }
+            if (projectStage == ProjectStage.Development) {
+                subscribeToEvent(PostAddToViewEvent.class, new ValidateComponentNesting());
+            }
+           
+        }
+        return projectStage;
+
+    }
+
+    public CompositeELResolver getApplicationELResolvers() {
+        return elResolvers;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getActionListener()
+     */
+    public ActionListener getActionListener() {
+        return actionListener;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getViewHandler()
+     */
+    public ViewHandler getViewHandler() {
+        return viewHandler;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setViewHandler(javax.faces.application.ViewHandler)
+     */
+    public synchronized void setViewHandler(ViewHandler viewHandler) {
+
+        Util.notNull("viewHandler", viewHandler);
+
+        if (associate.hasRequestBeenServiced()) {
+            throw new IllegalStateException(
+                  MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "ViewHandler"));
+        }
+
+        this.viewHandler = viewHandler;
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, MessageFormat.format("set ViewHandler Instance to ''{0}''", viewHandler.getClass().getName()));
+        }
+
+    }
+
+    /**
+     * @see javax.faces.application.Application#getResourceHandler()
+     */
+    @Override
+    public ResourceHandler getResourceHandler() {
+
+        return resourceHandler;
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setResourceHandler(javax.faces.application.ResourceHandler)
+     */
+    @Override
+    public synchronized void setResourceHandler(ResourceHandler resourceHandler) {
+
+        Util.notNull("resourceHandler", resourceHandler);
+
+        if (associate.hasRequestBeenServiced()) {
+            throw new IllegalStateException(
+                  MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "ResourceHandler"));
+        }
+
+        this.resourceHandler = resourceHandler;
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                       "set ResourceHandler Instance to ''{0}''",
+                       resourceHandler.getClass().getName());
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getStateManager()
+     */
+    public StateManager getStateManager() {
+        return stateManager;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setStateManager(javax.faces.application.StateManager)
+     */
+    public synchronized void setStateManager(StateManager stateManager) {
+
+        Util.notNull("stateManager", stateManager);
+
+        if (associate.hasRequestBeenServiced()) {
+            throw new IllegalStateException(
+                  MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "StateManager"));
+        }
+
+        this.stateManager = stateManager;
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, MessageFormat.format("set StateManager Instance to ''{0}''",
+                                                        stateManager.getClass().getName()));
+        }
+
+    }
+
+
+    /**
+     * @see Application#setActionListener(javax.faces.event.ActionListener)
+     */
+    public synchronized void setActionListener(ActionListener actionListener) {
+
+        Util.notNull("actionListener", actionListener);
+
+        this.actionListener = actionListener;
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("set ActionListener Instance to ''{0}''",
+                                             actionListener.getClass().getName()));
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getNavigationHandler()
+     */
+    public NavigationHandler getNavigationHandler() {
+        return navigationHandler;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setNavigationHandler(javax.faces.application.NavigationHandler)
+     */
+    public synchronized void setNavigationHandler(NavigationHandler navigationHandler) {
+
+        Util.notNull("navigationHandler", navigationHandler);
+
+        this.navigationHandler = navigationHandler;
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("set NavigationHandler Instance to ''{0}''",
+                                             navigationHandler.getClass().getName()));
+        }
+    }
+
+    /**
+     * @see javax.faces.application.Application#setPropertyResolver(javax.faces.el.PropertyResolver)
+     */
+    @SuppressWarnings("deprecation")
+    public PropertyResolver getPropertyResolver() {
+        if (compositeELResolver == null) {
+            performOneTimeELInitialization();
+        }
+        return propertyResolver;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getResourceBundle(javax.faces.context.FacesContext, String)
+     */
+    @Override
+    public ResourceBundle getResourceBundle(FacesContext context, String var) {
+
+        Util.notNull("context", context);
+        Util.notNull("var", var);
+        return associate.getResourceBundle(context, var);
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setPropertyResolver(javax.faces.el.PropertyResolver)
+     */
+    @SuppressWarnings("deprecation")
+    public void setPropertyResolver(PropertyResolver resolver) {
+        // Throw Illegal State Exception if  a PropertyResolver is set after 
+        // a request has been processed.
+        if (associate.hasRequestBeenServiced()) {
+            throw new IllegalStateException(
+                    MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "PropertyResolver"));
+        }
+        if (resolver == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "resolver");
+            throw new NullPointerException(message);
+        }
+
+        propertyResolver.setDelegate(ELUtils.getDelegatePR(associate, true));
+        associate.setLegacyPropertyResolver(resolver);
+        propertyResolver = new PropertyResolverImpl();
+
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("set PropertyResolver Instance to ''{0}''", resolver.getClass().getName()));
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#createMethodBinding(String, Class[])
+     */
+    @SuppressWarnings("deprecation")
+    public MethodBinding createMethodBinding(String ref, Class<?> params[]) {
+
+        Util.notNull("ref", ref);
+
+        if (!(ref.startsWith("#{") && ref.endsWith("}"))) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.fine(MessageFormat.format("Expression ''{0}'' does not follow the syntax #{...}", ref));
+            }
+            throw new ReferenceSyntaxException(ref);
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        MethodExpression result;
+        try {
+            // return a MethodBinding that wraps a MethodExpression.
+            if (null == params) {
+                params = RIConstants.EMPTY_CLASS_ARGS;
+            }
+            result =
+                  getExpressionFactory().
+                        createMethodExpression(context.getELContext(), ref, null,
+                                               params);
+        } catch (ELException elex) {
+            throw new ReferenceSyntaxException(elex);
+        }
+        return (new MethodBindingMethodExpressionAdapter(result));
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#createValueBinding(String)
+     */
+    @SuppressWarnings("deprecation")
+    public ValueBinding createValueBinding(String ref)
+    throws ReferenceSyntaxException {
+
+        Util.notNull("ref", ref);
+        ValueExpression result;
+        FacesContext context = FacesContext.getCurrentInstance();
+         // return a ValueBinding that wraps a ValueExpression.
+         try {
+             result= getExpressionFactory().
+                     createValueExpression(context.getELContext(),ref,
+                     Object.class);     
+         } catch (ELException elex) {
+            throw new ReferenceSyntaxException(elex);
+         } 
+         return (new ValueBindingValueExpressionAdapter(result));
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getVariableResolver()
+     */
+    @SuppressWarnings("deprecation")
+    public VariableResolver getVariableResolver() {       
+        if (compositeELResolver == null) {
+            performOneTimeELInitialization();
+        }
+
+        return variableResolver;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setVariableResolver(javax.faces.el.VariableResolver)
+     */
+    @SuppressWarnings("deprecation")
+    public void setVariableResolver(VariableResolver resolver) {
+        Util.notNull("variableResolver", resolver);
+
+        if (associate.hasRequestBeenServiced()) {
+            throw new IllegalStateException(
+                    MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "VariableResolver"));
+        }
+
+        variableResolver.setDelegate(ELUtils.getDelegateVR(associate, true));
+        associate.setLegacyVariableResolver(resolver);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("set VariableResolver Instance to ''{0}''",
+                                             variableResolver.getClass().getName()));
+        }
+    }
+
+    /**
+     * @see javax.faces.application.Application#addBehavior(String, String)
+     */
+    public void addBehavior(String behaviorId, String behaviorClass) {
+
+        Util.notNull("behaviorId", behaviorId);
+        Util.notNull("behaviorClass", behaviorClass);
+
+        if (LOGGER.isLoggable(Level.FINE) && behaviorMap.containsKey(behaviorId)) {
+            LOGGER.log(Level.FINE,
+                       "behaviorId {0} has already been registered.  Replacing existing behavior class type {1} with {2}.",
+                       new Object[] { behaviorId, behaviorMap.get(behaviorId), behaviorClass });
+        }
+        behaviorMap.put(behaviorId, behaviorClass);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("added behavior of type ''{0}'' class ''{1}''",
+                                             behaviorId,
+                                             behaviorClass));
+        }
+
+    }
+
+    /**
+     * @see javax.faces.application.Application#createBehavior(String)
+     */
+    public Behavior createBehavior(String behaviorId) throws FacesException {
+
+        Util.notNull("behaviorId", behaviorId);
+        Behavior returnVal = (Behavior) newThing(behaviorId, behaviorMap);
+        if (returnVal == null) {
+            Object[] params = {behaviorId};
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                        "jsf.cannot_instantiate_behavior_error", params);
+            }
+            throw new FacesException(MessageUtils.getExceptionMessageString(
+                MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("created behavior of type ''{0}''",
+                                             behaviorId));
+        }
+        associate.getAnnotationManager().applyBehaviorAnnotations(FacesContext.getCurrentInstance(), returnVal);
+        return returnVal;
+    }
+
+    /**
+     * @see javax.faces.application.Application#getBehaviorIds()
+     */
+    public Iterator<String> getBehaviorIds() {
+
+        return behaviorMap.keySet().iterator();
+
+    }
+
+    /**
+     * @see javax.faces.application.Application#addComponent(java.lang.String, java.lang.String)
+     */
+    public void addComponent(String componentType, String componentClass) {
+
+        Util.notNull("componentType", componentType);
+        Util.notNull("componentType", componentClass);
+
+        if (LOGGER.isLoggable(Level.FINE) && componentMap.containsKey(componentType)) {
+            LOGGER.log(Level.FINE,
+                       "componentType {0} has already been registered.  Replacing existing component class type {1} with {2}.",
+                       new Object[] { componentType, componentMap.get(componentType), componentClass });
+        }
+        componentMap.put(componentType, componentClass);
+        
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("added component of type ''{0}'' and class ''{1}''",
+                                             componentType,
+                                             componentClass));
+        }
+        
+    }
+
+
+    public UIComponent createComponent(String componentType) throws FacesException {
+
+        Util.notNull("componentType", componentType);
+
+        return createComponentApplyAnnotations(FacesContext.getCurrentInstance(),
+                                               componentType,
+                                               null,
+                                               true);
+
+    }
+
+
+    @Override
+    public UIComponent createComponent(FacesContext context, Resource componentResource) throws FacesException {
+
+        // RELEASE_PENDING (rlubke,driscoll) this method needs review.
+
+        Util.notNull("context", context);
+        Util.notNull("componentResource", componentResource);
+
+        UIComponent result = null;
+
+        // use the application defined in the FacesContext as we may be calling
+        // overriden methods
+        Application app = context.getApplication();
+
+        ViewDeclarationLanguage pdl = app.getViewHandler().getViewDeclarationLanguage(context, context.getViewRoot().getViewId());
+        BeanInfo componentMetadata = pdl.getComponentMetadata(context,
+                                                              componentResource);
+        if (null != componentMetadata){
+            BeanDescriptor componentBeanDescriptor = componentMetadata.getBeanDescriptor();
+            
+            // Step 1.  See if the composite component author explicitly
+            // gave a componentType as part of the composite component metadata
+            ValueExpression ve = (ValueExpression)
+                  componentBeanDescriptor.getValue(UIComponent.COMPOSITE_COMPONENT_TYPE_KEY);
+            if (null != ve) {
+                String componentType = (String) ve.getValue(context.getELContext());
+                if (null != componentType && 0 < componentType.length()) {
+                    result = app.createComponent(componentType);
+                }
+            }
+        }
+
+
+        // Step 2. If that didn't work, if a script based resource can be 
+        // found for the scriptComponentResource,
+        // see if a component can be generated from it
+        if (null == result) {
+            Resource scriptComponentResource = pdl.getScriptComponentResource(context, componentResource);
+
+            if (null != scriptComponentResource) {
+                result = createComponentFromScriptResource(context,
+                        scriptComponentResource, componentResource);
+            }
+        }
+
+        // Step 3. Use the libraryName of the resource as the java package
+        // and use the resourceName as the class name.  See
+        // if a Java class can be loaded
+        if (null == result) {
+            String packageName = componentResource.getLibraryName();
+            String className = componentResource.getResourceName();
+            className = packageName + '.' + className.substring(0, className.lastIndexOf('.'));
+            try {
+                Class<?> clazz = (Class<?>) componentMap.get(className);
+                if (clazz == null) {
+                    clazz = Util.loadClass(className, this);
+                }
+                if (clazz != ComponentResourceClassNotFound.class) {
+                    if (!associate.isDevModeEnabled()) {
+                        componentMap.put(className, clazz);
+                    }
+                    result = (UIComponent) clazz.newInstance();
+                }
+            } catch (ClassNotFoundException ex) {
+                if (!associate.isDevModeEnabled()) {
+                    componentMap.put(className, ComponentResourceClassNotFound.class);
+                }
+            } catch (InstantiationException ie) {
+                throw new FacesException(ie);
+            } catch (IllegalAccessException iae) {
+                throw new FacesException(iae);
+            } catch (ClassCastException cce) {
+                throw new FacesException(cce);
+            } catch (Exception otherwise) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               otherwise.toString(),
+                               otherwise);
+                }
+            }
+        }
+
+        // Step 4. Use javax.faces.NamingContainer as the component type
+        if (null == result) {
+            result = app.createComponent("javax.faces.NamingContainer");
+        }
+
+        assert (null != result);
+
+        result.setRendererType("javax.faces.Composite");
+        Map<String, Object> attrs = result.getAttributes();
+        attrs.put(Resource.COMPONENT_RESOURCE_KEY,
+                componentResource);
+        attrs.put(UIComponent.BEANINFO_KEY,
+                componentMetadata);
+
+        associate.getAnnotationManager().applyComponentAnnotations(context, result);
+        pushDeclaredDefaultValuesToAttributesMap(context, componentMetadata, attrs, result);
+
+
+        return result;
+    }
+
+
+    /*
+     * This method makes it so that any cc:attribute elements that have
+     * a "default" attribute value have those values pushed into the
+     * composite component attribute map so that programmatic access 
+     * (as opposed to EL access) will find the attribute values.
+     *
+     */
+    private void pushDeclaredDefaultValuesToAttributesMap(FacesContext context,
+            BeanInfo componentMetadata, Map<String, Object> attrs, UIComponent component) {
+        PropertyDescriptor[] declaredAttributes = componentMetadata.getPropertyDescriptors();
+        Object defaultValue;
+        String key;
+        Collection<String> attributesWithDeclaredDefaultValues = null;
+
+        PropertyDescriptor[] pd = null;
+
+        for (PropertyDescriptor cur : declaredAttributes) {
+            defaultValue = cur.getValue("default");
+            if (null != defaultValue) {
+                key = cur.getName();
+                boolean isLiteralText = false;
+                if (defaultValue instanceof ValueExpression) {
+                    isLiteralText = ((ValueExpression)defaultValue).isLiteralText();
+                    if (isLiteralText) {
+                        defaultValue = ((ValueExpression)defaultValue).getValue(context.getELContext());
+                    }
+                }
+                // ensure this attribute is not a method-signature.  method-signature
+                // declared default values are handled in retargetMethodExpressions.
+                if (null == cur.getValue("method-signature") || null != cur.getValue("type")) {
+
+                    if (null == attributesWithDeclaredDefaultValues) {
+                        BeanDescriptor desc = componentMetadata.getBeanDescriptor();
+                        attributesWithDeclaredDefaultValues = (Collection<String>)
+                                desc.getValue(UIComponent.ATTRS_WITH_DECLARED_DEFAULT_VALUES);
+                        if (null == attributesWithDeclaredDefaultValues) {
+                            attributesWithDeclaredDefaultValues = new HashSet<String>();
+                            desc.setValue(UIComponent.ATTRS_WITH_DECLARED_DEFAULT_VALUES,
+                                    attributesWithDeclaredDefaultValues);
+                        }
+                    }
+                    attributesWithDeclaredDefaultValues.add(key);
+
+                    // Only store the attribute if it is literal text.  If it
+                    // is a ValueExpression, it will be handled explicitly in
+                    // CompositeComponentAttributesELResolver.ExpressionEvalMap.get().
+                    // If it is a MethodExpression, it will be dealt with in
+                    // retargetMethodExpressions.
+                    if (isLiteralText) {
+                        try {
+                            if (null == pd) {
+                                pd = Introspector.getBeanInfo(component.getClass()).getPropertyDescriptors();
+                            }
+                        } catch (IntrospectionException e) {
+                            throw new FacesException(e);
+                        }
+                        defaultValue = convertValueToTypeIfNecessary(key, defaultValue, pd);
+                        attrs.put(key, defaultValue);
+                    }
+                }
+            }
+        }
+    }
+    
+
+        
+
+    @SuppressWarnings("deprecation")
+    public UIComponent createComponent(ValueBinding componentBinding,
+                                       FacesContext context,
+                                       String componentType)
+    throws FacesException {
+
+        Util.notNull("componentBinding", componentBinding);
+        Util.notNull("context", context);
+        Util.notNull("componentType", componentType);
+
+        Object result;
+        boolean createOne = false;
+        try {
+            result = componentBinding.getValue(context);
+            if (result != null) {
+                createOne = (!(result instanceof UIComponent));
+            }
+
+            if (result == null || createOne) {
+                result = this.createComponentApplyAnnotations(context,
+                                                              componentType,
+                                                              null,
+                                                              false);
+                componentBinding.setValue(context, result);
+            }
+        } catch (Exception ex) {
+            throw new FacesException(ex);
+        }
+
+        return (UIComponent) result;
+
+    }
+
+
+    @Override
+    public UIComponent createComponent(ValueExpression componentExpression,
+                                       FacesContext context,
+                                       String componentType,
+                                       String rendererType) {
+
+        Util.notNull("componentExpression", componentExpression);
+        Util.notNull("context", context);
+        Util.notNull("componentType", componentType);
+
+        return createComponentApplyAnnotations(context,
+                                               componentExpression,
+                                               componentType,
+                                               rendererType,
+                                               true);
+
+    }
+
+
+    @Override
+    public UIComponent createComponent(FacesContext context,
+                                       String componentType,
+                                       String rendererType) {
+
+        Util.notNull("context", context);
+        Util.notNull("componentType", componentType);
+
+        return createComponentApplyAnnotations(context,
+                                               componentType,
+                                               rendererType,
+                                               true);
+
+    }
+
+    /**
+     * @see javax.faces.application.Application#getComponentTypes()
+     */
+    public Iterator<String> getComponentTypes() {
+
+        return componentMap.keySet().iterator();
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#addConverter(String, String)
+     */
+    public void addConverter(String converterId, String converterClass) {
+
+        Util.notNull("converterId", converterId);
+        Util.notNull("converterClass", converterClass);
+
+        if (LOGGER.isLoggable(Level.FINE) && converterIdMap.containsKey(converterId)) {
+            LOGGER.log(Level.FINE,
+                       "converterId {0} has already been registered.  Replacing existing converter class type {1} with {2}.",
+                       new Object[] { converterId, converterIdMap.get(converterId), converterClass });
+        }
+
+        converterIdMap.put(converterId, converterClass);
+
+        Class<?>[] types = STANDARD_CONV_ID_TO_TYPE_MAP.get(converterId);
+        if (types != null) {
+            for (Class<?> clazz : types) {
+                // go directly against map to prevent cyclic method calls
+                converterTypeMap.put(clazz, converterClass);
+                addPropertyEditorIfNecessary(clazz);
+            }
+        }
+        
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("added converter of type ''{0}'' and class ''{1}''",
+                                             converterId,
+                                             converterClass));
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#addConverter(Class, String)
+     */
+    public void addConverter(Class<?> targetClass, String converterClass) {
+
+        Util.notNull("targetClass", targetClass);
+        Util.notNull("converterClass", converterClass);
+
+        String converterId = STANDARD_TYPE_TO_CONV_ID_MAP.get(targetClass);
+        if (converterId != null) {
+            addConverter(converterId, converterClass);
+        } else {
+            if (LOGGER.isLoggable(Level.FINE) && converterTypeMap
+                  .containsKey(targetClass)) {
+                LOGGER.log(Level.FINE,
+                           "converter target class {0} has already been registered.  Replacing existing converter class type {1} with {2}.",
+                           new Object[]{
+                                 targetClass.getName(),
+                                 converterTypeMap.get(targetClass),
+                                 converterClass});
+            }
+            converterTypeMap.put(targetClass, converterClass);
+            addPropertyEditorIfNecessary(targetClass);
+        }                
+        
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("added converter of class type ''{0}''", converterClass));
+        }
+    }
+    
+    private final String [] STANDARD_BY_TYPE_CONVERTER_CLASSES = {
+      "java.math.BigDecimal",
+      "java.lang.Boolean",
+      "java.lang.Byte",
+      "java.lang.Character",
+      "java.lang.Double",
+      "java.lang.Float",
+      "java.lang.Integer",
+      "java.lang.Long",
+      "java.lang.Short",
+      "java.lang.Enum"
+    };
+
+    /**
+     * Helper method to convert a value to a type as defined in PropertyDescriptor(s)
+     * @param name
+     * @param value
+     * @param pd
+     * @return value
+     */
+    private Object convertValueToTypeIfNecessary(String name, Object value, PropertyDescriptor[] pd) {
+        for (PropertyDescriptor aPd : pd) {
+            if (aPd.getName().equals(name)) {
+                value = getExpressionFactory().coerceToType(value, aPd.getPropertyType());
+                break;
+            }
+        }
+        return value;
+    }
+
+    /**
+     * <p>To enable EL Coercion to use JSF Custom converters, this 
+     * method will call <code>PropertyEditorManager.registerEditor()</code>,
+     * passing the <code>ConverterPropertyEditor</code> class for the
+     * <code>targetClass</code> if the target class is not one of the standard
+     * by-type converter target classes.
+     * @param targetClass the target class for which a PropertyEditory may or
+     *  may not be created
+     */
+    
+    private void addPropertyEditorIfNecessary(Class<?> targetClass) {
+        
+        if (!registerPropertyEditors) {
+            return;
+        }
+
+        PropertyEditor editor = PropertyEditorManager.findEditor(targetClass);
+        if (null != editor) {
+            return;
+        }
+        String className = targetClass.getName();
+        // Don't add a PropertyEditor for the standard by-type converters.
+        if (targetClass.isPrimitive()) {
+            return;
+        }
+        for (String standardClass : STANDARD_BY_TYPE_CONVERTER_CLASSES) {
+            if (-1 != standardClass.indexOf(className)) {
+                return;
+            }
+        }
+        Class<?> editorClass = ConverterPropertyEditorFactory.getDefaultInstance().definePropertyEditorClassFor(targetClass);
+        if (editorClass != null) {
+            PropertyEditorManager.registerEditor(targetClass, editorClass);
+        } else {
+        	if (LOGGER.isLoggable(Level.WARNING)) {
+        		LOGGER.warning(MessageFormat.format("definePropertyEditorClassFor({0}) returned null.", targetClass.getName()));
+        	}
+        }
+    }
+
+    private void performOneTimeELInitialization() {
+        if (null != compositeELResolver) {
+            throw new IllegalStateException("Class invariant invalidated: " +
+                    "The Application instance's ELResolver is not null " +
+                    "and it should be.");
+        }
+        associate.initializeELResolverChains();
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#createConverter(String)
+     */
+    public Converter createConverter(String converterId) {
+
+        Util.notNull("converterId", converterId);
+        Converter returnVal = (Converter) newThing(converterId, converterIdMap);
+        if (returnVal == null) {
+            Object[] params = {converterId};
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                        "jsf.cannot_instantiate_converter_error", converterId);
+            }
+            throw new FacesException(MessageUtils.getExceptionMessageString(
+                MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("created converter of type ''{0}''", converterId));
+        }
+        if (passDefaultTimeZone && returnVal instanceof DateTimeConverter) {
+            ((DateTimeConverter) returnVal).setTimeZone(systemTimeZone);
+        }
+        associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
+        return returnVal;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#createConverter(Class)
+     */
+    public Converter createConverter(Class<?> targetClass) {
+
+        Util.notNull("targetClass", targetClass);
+        Converter returnVal = (Converter) newConverter(targetClass,
+                                                   converterTypeMap,targetClass);
+        if (returnVal != null) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
+                                                 returnVal.getClass().getName()));
+            }
+            if (passDefaultTimeZone
+                && returnVal instanceof DateTimeConverter) {
+                ((DateTimeConverter) returnVal).setTimeZone(systemTimeZone);
+            }
+            associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
+            return returnVal;
+        } 
+
+        //Search for converters registered to interfaces implemented by
+        //targetClass
+        Class<?>[] interfaces = targetClass.getInterfaces();
+        if (interfaces != null) {
+            for (int i = 0; i < interfaces.length; i++) {
+                returnVal = createConverterBasedOnClass(interfaces[i], targetClass);
+                if (returnVal != null) {
+                   if (LOGGER.isLoggable(Level.FINE)) {
+                       LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
+                                                        returnVal.getClass().getName()));
+                    }
+                    if (passDefaultTimeZone
+                        && returnVal instanceof DateTimeConverter) {
+                        ((DateTimeConverter) returnVal)
+                              .setTimeZone(systemTimeZone);
+                    }
+                    associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
+                    return returnVal;
+                }
+            }
+        }
+
+        //Search for converters registered to superclasses of targetClass
+        Class<?> superclass = targetClass.getSuperclass();
+        if (superclass != null) {
+            returnVal = createConverterBasedOnClass(superclass, targetClass);
+            if (returnVal != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
+                                                     returnVal.getClass().getName()));
+                }
+                if (passDefaultTimeZone
+                    && returnVal instanceof DateTimeConverter) {
+                    ((DateTimeConverter) returnVal).setTimeZone(systemTimeZone);
+                }
+                associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
+                return returnVal;
+            }
+        }
+
+        return returnVal;
+    }
+
+    protected Converter createConverterBasedOnClass(Class<?> targetClass,
+            Class<?> baseClass) {
+        
+        Converter returnVal = (Converter) newConverter(targetClass,
+                converterTypeMap, baseClass);
+        if (returnVal != null) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
+                                                 returnVal.getClass().getName()));
+            }
+            return returnVal;
+        } 
+
+        //Search for converters registered to interfaces implemented by
+        //targetClass
+        Class<?>[] interfaces = targetClass.getInterfaces();
+        if (interfaces != null) {
+            for (int i = 0; i < interfaces.length; i++) {
+                returnVal = createConverterBasedOnClass(interfaces[i], null);
+                if (returnVal != null) {
+                   if (LOGGER.isLoggable(Level.FINE)) {
+                       LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
+                                                        returnVal.getClass().getName()));
+                    }
+                    return returnVal;
+                }
+            }
+        }
+
+        //Search for converters registered to superclasses of targetClass
+        Class<?> superclass = targetClass.getSuperclass();
+        if (superclass != null) {
+            returnVal = createConverterBasedOnClass(superclass, targetClass);
+            if (returnVal != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
+                                                     returnVal.getClass().getName()));
+                }
+                return returnVal;
+            }
+        } 
+        return returnVal;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getConverterIds()
+     */
+    public Iterator<String> getConverterIds() {
+       
+        return converterIdMap.keySet().iterator();
+        
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getConverterTypes()
+     */
+    public Iterator<Class<?>> getConverterTypes() {
+                
+        return converterTypeMap.keySet().iterator();
+        
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getSupportedLocales()
+     */
+    public Iterator<Locale> getSupportedLocales() {
+
+            if (null != supportedLocales) {
+                return supportedLocales.iterator();
+            } else {
+                return Collections.<Locale>emptyList().iterator();
+            }
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setSupportedLocales(java.util.Collection)
+     */
+    public synchronized void setSupportedLocales(Collection<Locale> newLocales) {
+
+        Util.notNull("newLocales", newLocales);
+
+        supportedLocales = new ArrayList<Locale>(newLocales);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, MessageFormat.format("set Supported Locales ''{0}''",
+                                                        supportedLocales.toString()));
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getDefaultLocale()
+     */
+    public Locale getDefaultLocale() {
+        return defaultLocale;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setDefaultLocale(java.util.Locale)
+     */
+    public synchronized void setDefaultLocale(Locale locale) {
+
+        Util.notNull("locale", locale);
+
+        defaultLocale = locale;
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, (MessageFormat.format("set defaultLocale ''{0}''",
+                                                         defaultLocale.getClass().getName())));
+        }
+    }
+
+
+    protected String defaultRenderKitId = null;
+
+
+    /**
+     * @see javax.faces.application.Application#getDefaultRenderKitId()
+     */
+    public String getDefaultRenderKitId() {
+        return defaultRenderKitId;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#setDefaultRenderKitId(String)
+     */
+    public void setDefaultRenderKitId(String renderKitId) {
+        defaultRenderKitId = renderKitId;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#addValidator(String, String)
+     */
+    public void addValidator(String validatorId, String validatorClass) {
+
+        Util.notNull("validatorId", validatorId);
+        Util.notNull("validatorClass", validatorClass);
+
+        if (LOGGER.isLoggable(Level.FINE) && validatorMap.containsKey(validatorId)) {
+            LOGGER.log(Level.FINE,
+                       "validatorId {0} has already been registered.  Replacing existing validator class type {1} with {2}.",
+                       new Object[] { validatorId, validatorMap.get(validatorId), validatorClass });    
+        }
+
+        validatorMap.put(validatorId, validatorClass);
+        
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("added validator of type ''{0}'' class ''{1}''",
+                                             validatorId,
+                                             validatorClass));
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#createValidator(String)
+     */
+    public Validator createValidator(String validatorId) throws FacesException {
+
+        Util.notNull("validatorId", validatorId);
+        Validator returnVal = (Validator) newThing(validatorId, validatorMap);
+        if (returnVal == null) {
+            Object[] params = {validatorId};
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                        "jsf.cannot_instantiate_validator_error", params);
+            }
+            throw new FacesException(MessageUtils.getExceptionMessageString(
+                MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine(MessageFormat.format("created validator of type ''{0}''",
+                                             validatorId));
+        }
+        associate.getAnnotationManager().applyValidatorAnnotations(FacesContext.getCurrentInstance(), returnVal);
+        return returnVal;
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getValidatorIds()
+     */
+    public Iterator<String> getValidatorIds() {        
+        
+        return validatorMap.keySet().iterator();
+               
+    }
+
+    /**
+     * @see javax.faces.application.Application#addDefaultValidatorId(String)
+     */
+    public synchronized void addDefaultValidatorId(String validatorId) {
+
+        Util.notNull("validatorId", validatorId);
+        defaultValidatorInfo = null;
+        defaultValidatorIds.add(validatorId);
+
+    }
+
+    /**
+     * @see javax.faces.application.Application#getDefaultValidatorInfo() 
+     */
+    public Map<String,String> getDefaultValidatorInfo() {
+
+        if (defaultValidatorInfo == null) {
+            synchronized (this) {
+                if (defaultValidatorInfo == null) {
+                    defaultValidatorInfo = new LinkedHashMap<String, String>();
+                    if (!defaultValidatorIds.isEmpty()) {
+                        for (String id : defaultValidatorIds) {
+                            String validatorClass;
+                            Object result = validatorMap.get(id);
+                            if (null != result) {
+                                if (result instanceof Class) {
+                                    validatorClass = ((Class) result).getName();
+                                } else {
+                                    validatorClass = result.toString();
+                                }
+                                defaultValidatorInfo.put(id, validatorClass);
+                            }
+                        }
+
+                    }
+                }
+            }
+            defaultValidatorInfo =
+                  Collections.unmodifiableMap(defaultValidatorInfo);
+        }
+
+        return defaultValidatorInfo;
+
+    }
+
+    /**
+     * @see javax.faces.application.Application#setMessageBundle(String)
+     */
+    public synchronized void setMessageBundle(String messageBundle) {
+        Util.notNull("messageBundle", messageBundle);
+
+        this.messageBundle = messageBundle;
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, MessageFormat.format("set messageBundle ''{0}''",
+                                                        messageBundle));
+        }
+    }
+
+
+    /**
+     * @see javax.faces.application.Application#getMessageBundle()
+     */
+    public String getMessageBundle() {
+        return messageBundle;
+    }
+    
+    
+    /**
+     * <p>PRECONDITIONS: the values in the Map are either Strings
+     * representing fully qualified java class names, or java.lang.Class
+     * instances.</p>
+     * <p>ALGORITHM: Look in the argument map for a value for the argument
+     * key.  If found, if the value is instanceof String, assume the String
+     * specifies a fully qualified java class name and obtain the
+     * java.lang.Class instance for that String using Util.loadClass().
+     * Replace the String instance in the argument map with the Class
+     * instance.  If the value is instanceof Class, proceed.  Assert that the
+     * value is either instanceof java.lang.Class or java.lang.String.</p>
+     * <p>Now that you have a java.lang.class, call its newInstance and
+     * return it as the result of this method.</p>
+     *
+     * @param key Used to look up the value in the <code>Map</code>.
+     * @param map The <code>Map</code> that will be searched.
+     * @return The new object instance.
+     */
+    protected Object newThing(String key, ApplicationInstanceFactoryMetadataMap<String, Object> map) {
+        assert (key != null && map != null);
+
+        Object result;
+        Class<?> clazz;
+        Object value;
+
+        value = map.get(key);
+        if (value == null) {
+            return null;
+        }
+        assert (value instanceof String || value instanceof Class);
+        if (value instanceof String) {
+             String cValue = (String) value;
+             try {
+               clazz = Util.loadClass(cValue, value);
+                if (!associate.isDevModeEnabled()) {
+                    map.put(key, clazz);
+                } else {
+                  map.scanForAnnotations(key, clazz);
+                }
+                assert (clazz != null);
+             } catch (Exception e) {
+                 throw new FacesException(e.getMessage(), e);
+             }
+        } else {
+            clazz = (Class) value;
+        }
+        
+        try {
+            result = clazz.newInstance();
+        } catch (Throwable t) {
+            Throwable previousT;
+            do {
+                previousT = t;
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                	LOGGER.log(Level.SEVERE, "Unable to load class: ", t);
+                }
+            } while (null != (t = t.getCause()));
+            t = previousT;
+            
+            throw new FacesException((MessageUtils.getExceptionMessageString(
+                  MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID,
+                  clazz.getName())), t);
+        }
+
+        if (map.hasAnnotations(key)) {
+            InjectionProvider injectionProvider = associate.getInjectionProvider();
+            try {
+                injectionProvider.invokePostConstruct(result);
+            } catch (InjectionProviderException ex) {
+               LOGGER.log(Level.SEVERE, "Unable to invoke @PostConstruct annotated method on instance " + key, ex);
+               throw new FacesException(ex);
+            }
+
+            try {
+                injectionProvider.inject(result);
+            } catch (InjectionProviderException ex) {
+               LOGGER.log(Level.SEVERE, "Unable to inject instance" + key, ex);
+               throw new FacesException(ex);
+            }
+        }
+
+        return result;
+    }
+    
+    /**
+     * <p>The same as newThing except that a single argument constructor
+     * that accepts a Class is looked for before calling the no-arg version.</p>
+     *
+     * <p>PRECONDITIONS: the values in the Map are either Strings
+     * representing fully qualified java class names, or java.lang.Class
+     * instances.</p>
+     * <p>ALGORITHM: Look in the argument map for a value for the argument
+     * key.  If found, if the value is instanceof String, assume the String
+     * specifies a fully qualified java class name and obtain the
+     * java.lang.Class instance for that String using Util.loadClass().
+     * Replace the String instance in the argument map with the Class
+     * instance.  If the value is instanceof Class, proceed.  Assert that the
+     * value is either instanceof java.lang.Class or java.lang.String.</p>
+     * <p>Now that you have a java.lang.class, call its newInstance and
+     * return it as the result of this method.</p>
+     *
+     * @param key Used to look up the value in the <code>Map</code>.
+     * @param map The <code>Map</code> that will be searched.
+     * @param targetClass the target class for the single argument ctor
+     * @return The new object instance.
+     */
+    protected Object newConverter(Class<?> key, Map<Class<?>,Object> map, Class<?> targetClass) {
+        assert (key != null && map != null);
+
+        Object result = null;
+        Class<?> clazz;
+        Object value;
+
+        value = map.get(key);
+        if (value == null) {
+            return null;
+        }
+        assert (value instanceof String || value instanceof Class);
+        if (value instanceof String) {
+            String cValue = (String) value;
+             try {
+                clazz = Util.loadClass(cValue, value);
+                if (!associate.isDevModeEnabled()) {
+                    map.put(key, clazz);
+                }
+                assert (clazz != null);
+             } catch (Exception e) {
+                 throw new FacesException(e.getMessage(), e);
+             }
+        } else {
+            clazz = (Class) value;
+        }
+        
+        Constructor ctor = 
+              ReflectionUtils.lookupConstructor(clazz, Class.class);
+        Throwable cause = null;
+        if (ctor != null) {
+            try {
+                result = ctor.newInstance(targetClass);
+            } catch (Exception e) {
+                cause = e;
+            }
+        } else {
+            try {
+                result = clazz.newInstance();
+            } catch (Exception e) {
+                cause = e;
+            }
+        }       
+        
+        if (null != cause) {           
+            throw new FacesException((MessageUtils.getExceptionMessageString(
+                    MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID, 
+                    clazz.getName())), cause);
+            
+        }
+        return result;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    public static final String THIS_LIBRARY = 
+            "com.sun.faces.composite.this.library";
+
+    private UIComponent createComponentFromScriptResource(FacesContext context,
+                                                          Resource scriptComponentResource,
+                                                          Resource componentResource) {
+
+        UIComponent result = null;
+
+        String className = scriptComponentResource.getResourceName();
+        int lastDot = className.lastIndexOf('.');
+        className = className.substring(0, lastDot);
+
+        try {
+
+            Class<?> componentClass = (Class<?>) componentMap.get(className);
+            if (componentClass == null) {
+                componentClass = Util.loadClass(className, this);
+            }
+            if (!associate.isDevModeEnabled()) {
+                componentMap.put(className, componentClass);
+            }
+            result = (UIComponent) componentClass.newInstance();
+        } catch (IllegalAccessException ex) {
+        	if (LOGGER.isLoggable(Level.SEVERE)) {
+        		LOGGER.log(Level.SEVERE, null, ex);
+        	}
+        } catch (InstantiationException ex) {
+        	if (LOGGER.isLoggable(Level.SEVERE)) {
+        		LOGGER.log(Level.SEVERE, null, ex);
+        	}
+        } catch (ClassNotFoundException ex) {
+        	if (LOGGER.isLoggable(Level.SEVERE)) {
+        		LOGGER.log(Level.SEVERE, null, ex);
+        	}
+        }
+
+        if (result != null) {
+            // Make sure the resource is there for the annotation processor.
+            result.getAttributes().put(Resource.COMPONENT_RESOURCE_KEY, 
+                componentResource);
+            // In case there are any "this" references, 
+            // make sure they can be resolved.
+            context.getAttributes().put(THIS_LIBRARY,
+                    componentResource.getLibraryName());
+            try {
+                associate.getAnnotationManager()
+                        .applyComponentAnnotations(context, result);
+            }
+            finally {
+                context.getAttributes().remove(THIS_LIBRARY);
+            }
+        }
+
+        return result;
+        
+    }
+
+
+    /**
+     * Leveraged by {@link Application#createComponent(String)} and {@link Application#createComponent(javax.faces.context.FacesContext, String, String)}
+     * This method will apply any component and render annotations that may be present.
+     */
+    private UIComponent createComponentApplyAnnotations(FacesContext ctx,
+                                                        String componentType,
+                                                        String rendererType,
+                                                        boolean applyAnnotations) {
+
+        UIComponent c;
+        try {
+            c = (UIComponent) newThing(componentType, componentMap);
+        } catch (Exception ex) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           "jsf.cannot_instantiate_component_error",
+                           componentType);
+            }
+            throw new FacesException(ex);
+        }
+        if (c == null) {
+            Object[] params = {componentType};
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "jsf.cannot_instantiate_component_error",
+                               params);
+            }
+            throw new FacesException(MessageUtils.getExceptionMessageString(
+                    MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, MessageFormat.format("Created component with component type of ''{0}''",
+                                                        componentType));
+        }
+
+        if (applyAnnotations) {
+            applyAnnotations(ctx, rendererType, c);
+        }
+        return c;
+
+    }
+
+
+    /**
+     * Leveraged by {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String)} and
+     * {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String, String)}.
+     * This method will apply any component and render annotations that may be present.
+     */
+    private UIComponent createComponentApplyAnnotations(FacesContext ctx,
+                                                        ValueExpression componentExpression,
+                                                        String componentType,
+                                                        String rendererType,
+                                                        boolean applyAnnotations) {
+
+        UIComponent c;
+
+        try {
+            c = (UIComponent) componentExpression
+                  .getValue(ctx.getELContext());
+            
+            if (c == null) {
+                c = this.createComponentApplyAnnotations(ctx,
+                                                         componentType,
+                                                         rendererType,
+                                                         applyAnnotations);
+                componentExpression.setValue((ctx.getELContext()), c);
+            } else if (applyAnnotations) {
+                this.applyAnnotations(ctx, rendererType, c);
+            }
+        } catch (Exception ex) {
+            throw new FacesException(ex);
+        }
+
+        return c;
+
+    }
+
+
+    /**
+     * Process any annotations associated with this component/renderer.
+     */
+    private void applyAnnotations(FacesContext ctx,
+                                  String rendererType,
+                                  UIComponent c) {
+
+        if (c != null && ctx != null) {
+            associate.getAnnotationManager()
+                  .applyComponentAnnotations(ctx, c);
+            if (rendererType != null) {
+                RenderKit rk = ctx.getRenderKit();
+                Renderer r = null;
+                if (rk != null) {
+                    r = rk.getRenderer(c.getFamily(), rendererType);
+                    if (r != null) {
+                        c.setRendererType(rendererType);
+                        associate.getAnnotationManager()
+                           .applyRendererAnnotations(ctx, r, c);
+                    }
+                }
+                if ((rk == null || r == null) && LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                       "Unable to create Renderer with rendererType {0} for component with component type of {1}",
+                       new Object[] { rendererType, c.getFamily() });
+                }
+            }
+        }
+    }
+
+    /**
+     * @return the SystemEventListeners that should be used for the
+     * provided combination of SystemEvent and source.
+     */
+    private Set<SystemEventListener> getListeners(Class<? extends SystemEvent> systemEvent,
+                                                  Class<?> sourceClass) {
+
+        Set<SystemEventListener> listeners = null;
+        EventInfo sourceInfo =
+              systemEventHelper.getEventInfo(systemEvent, sourceClass);
+        if (sourceInfo != null) {
+            listeners = sourceInfo.getListeners();
+        }
+
+        return listeners;
+
+    }
+
+    private SystemEvent invokeViewListenersFor(FacesContext ctx,
+                                               Class<? extends SystemEvent> systemEventClass,
+                                               SystemEvent event,
+                                               Object source) {
+        SystemEvent result = event;
+
+        if (listenerInvocationGuard.isGuardSet(ctx, systemEventClass)) {
+            return result;
+        }
+        listenerInvocationGuard.setGuard(ctx, systemEventClass);
+
+
+        UIViewRoot root = ctx.getViewRoot();
+        try {
+            if (root != null) {
+                List<SystemEventListener> listeners = root.getViewListenersForEventClass(systemEventClass);
+                if (null == listeners) {
+                    return null;
+                }
+
+                EventInfo rootEventInfo =
+                        systemEventHelper.getEventInfo(systemEventClass,
+                        UIViewRoot.class);
+                // process view listeners
+                result = processListenersAccountingForAdds(listeners,
+                        event,
+                        source,
+                        rootEventInfo);
+            }
+        } finally {
+            listenerInvocationGuard.clearGuard(ctx, systemEventClass);
+        }
+        return result;
+
+    }
+
+    /*
+     * This class encapsulates the behavior to prevent infinite loops
+     * when the publishing of one event leads to the queueing of another
+     * event of the same type.  Special provision is made to allow the
+     * case where this guaring mechanims happens on a per-FacesContext,
+     * per-SystemEvent.class type basis.
+     */
+
+    private ReentrantLisneterInvocationGuard listenerInvocationGuard = new ReentrantLisneterInvocationGuard();
+
+    private class ReentrantLisneterInvocationGuard {
+
+        public boolean isGuardSet(FacesContext ctx, Class<? extends SystemEvent> systemEventClass) {
+            Boolean result;
+            Map<Class<? extends SystemEvent>, Boolean> data = getDataStructure(ctx);
+            result = data.get(systemEventClass);
+
+            return (null == result ? false : result);
+        }
+
+        public void setGuard(FacesContext ctx, Class<? extends SystemEvent> systemEventClass) {
+            Map<Class<? extends SystemEvent>, Boolean> data = getDataStructure(ctx);
+            data.put(systemEventClass, Boolean.TRUE);
+
+        }
+
+        public void clearGuard(FacesContext ctx, Class<? extends SystemEvent> systemEventClass) {
+            Map<Class<? extends SystemEvent>, Boolean> data = getDataStructure(ctx);
+            data.put(systemEventClass, Boolean.FALSE);
+            
+        }
+
+        private Map<Class<? extends SystemEvent>, Boolean> getDataStructure(FacesContext ctx) {
+            Map<Class<? extends SystemEvent>, Boolean> result = null;
+            Map<Object, Object> ctxMap = ctx.getAttributes();
+            final String IS_PROCESSING_LISTENERS_KEY =
+                    "com.sun.faces.application.ApplicationImpl.IS_PROCESSING_LISTENERS";
+
+            if (null == (result = (Map<Class<? extends SystemEvent>, Boolean>)
+                         ctxMap.get(IS_PROCESSING_LISTENERS_KEY))) {
+                result = new HashMap<Class<? extends SystemEvent>, Boolean>(12);
+                ctxMap.put(IS_PROCESSING_LISTENERS_KEY, result);
+            }
+
+            return result;
+        }
+
+    }
+
+    /**
+     * @return process any listeners for the specified SystemEventListenerHolder
+     *  and return any SystemEvent that may have been created as a side-effect
+     *  of processing the listeners.
+     */
+    private SystemEvent invokeComponentListenersFor(Class<? extends SystemEvent> systemEventClass,
+                                                    Object source) {
+
+        if (source instanceof SystemEventListenerHolder) {
+
+            List<SystemEventListener> listeners = ((SystemEventListenerHolder) source).getListenersForEventClass(systemEventClass);
+            if (null == listeners) {
+                return null;
+            }
+            EventInfo eventInfo =
+                  compSysEventHelper.getEventInfo(systemEventClass,
+                                                  source.getClass());
+            return processListeners(listeners,
+                                    null,
+                                    source,
+                                    eventInfo);
+        }
+        return null;
+
+    }
+
+    /**
+     * Traverse the <code>List</code> of listeners and invoke any that are relevent
+     * for the specified source.
+     *
+     * @throws javax.faces.event.AbortProcessingException propagated from the listener invocation
+     */
+    private SystemEvent invokeListenersFor(Class<? extends SystemEvent> systemEventClass,
+                                           SystemEvent event,
+                                           Object source,
+                                           Class<?> sourceBaseType,
+                                           boolean useSourceLookup)
+    throws AbortProcessingException {
+
+        EventInfo eventInfo = systemEventHelper.getEventInfo(systemEventClass,
+                                                             source,
+                                                             sourceBaseType,
+                                                             useSourceLookup);
+        if (eventInfo != null) {
+            Set<SystemEventListener> listeners = eventInfo.getListeners();
+            event = processListeners(listeners, event, source, eventInfo);
+        }
+
+        return event;
+
+    }
+
+    /**
+     * Iterate through and invoke the listeners.  If the passed event was
+     * <code>null</code>, create the event, and return it.
+     */
+    private SystemEvent processListeners(Collection<SystemEventListener> listeners,
+                                         SystemEvent event,
+                                         Object source,
+                                         EventInfo eventInfo) {
+
+          if (listeners != null && !listeners.isEmpty()) {
+            ArrayList<SystemEventListener> list = 
+                    new ArrayList<SystemEventListener>(listeners);
+            
+            for (SystemEventListener curListener : list) {
+                if (curListener != null && curListener.isListenerForSource(source)) {
+                    if (event == null) {
+                        event = eventInfo.createSystemEvent(source);
+                    }
+                    assert (event != null);
+                    if (event.isAppropriateListener(curListener)) {
+                        event.processListener(curListener);
+                    }
+                }
+            }
+        }
+
+        return event;
+
+    }
+
+    private SystemEvent processListenersAccountingForAdds(List<SystemEventListener> listeners,
+                                         SystemEvent event,
+                                         Object source,
+                                         EventInfo eventInfo) {
+
+          if (listeners != null && !listeners.isEmpty()) {
+
+              // copy listeners
+              // go thru copy completely
+              // compare copy to original
+              // if original differs from copy, make a new copy.
+              // The new copy consists of the original list - processed
+
+              SystemEventListener listenersCopy[] =
+                      new SystemEventListener[listeners.size()];
+              int i = 0;
+              for (i = 0; i < listenersCopy.length; i++) {
+                  listenersCopy[i] = listeners.get(i);
+              }
+
+              Map<SystemEventListener, Boolean> processedListeners =
+                      new HashMap<SystemEventListener, Boolean>(listeners.size());
+              boolean processedSomeEvents = false,
+                      originalDiffersFromCopy = false;
+
+              do {
+                  i = 0;
+                  originalDiffersFromCopy = false;
+                  if (0 < listenersCopy.length) {
+                      for (i = 0; i < listenersCopy.length; i++) {
+                          SystemEventListener curListener = listenersCopy[i];
+                          if (curListener != null && curListener.isListenerForSource(source)) {
+                              if (event == null) {
+                                  event = eventInfo.createSystemEvent(source);
+                              }
+                              assert (event != null);
+                              if (!processedListeners.containsKey(curListener)
+                                       && event.isAppropriateListener(curListener)) {
+                                  processedSomeEvents = true;
+                                  event.processListener(curListener);
+                                  processedListeners.put(curListener, Boolean.TRUE);
+                              }
+                          }
+                      }
+                      if (originalDiffersFromCopy(listeners, listenersCopy)) {
+                          originalDiffersFromCopy = true;
+                          listenersCopy = copyListWithExclusions(listeners, processedListeners);
+                      }
+                  }
+              } while (originalDiffersFromCopy && processedSomeEvents);
+        }
+
+        return event;
+
+    }
+
+    private boolean originalDiffersFromCopy(Collection<SystemEventListener> original,
+            SystemEventListener copy[]) {
+        boolean foundDifference = false;
+        int i = 0, originalLen = original.size(), copyLen = copy.length;
+
+        if (originalLen == copyLen) {
+            SystemEventListener originalItem, copyItem;
+            Iterator<SystemEventListener> iter = original.iterator();
+            while (iter.hasNext() && !foundDifference) {
+                originalItem = iter.next();
+                copyItem = copy[i++];
+                foundDifference = originalItem != copyItem;
+            }
+        } else {
+            foundDifference = true;
+        }
+
+        return foundDifference;
+    }
+
+    private SystemEventListener [] copyListWithExclusions(Collection<SystemEventListener> original,
+            Map<SystemEventListener, Boolean> excludes) {
+        SystemEventListener [] result = null,
+                temp = new SystemEventListener[original.size()];
+        int i = 0;
+        for (SystemEventListener cur : original) {
+            if (!excludes.containsKey(cur)) {
+                temp[i++] = cur;
+            }
+        }
+        result = new SystemEventListener[i];
+        System.arraycopy(temp, 0, result, 0, i);
+
+        return result;
+    }
+    
+	private boolean needsProcessing(FacesContext context, Class<? extends SystemEvent> systemEventClass) {
+		return context.isProcessingEvents() || ExceptionQueuedEvent.class.isAssignableFrom(systemEventClass);
+	}
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * Utility class for dealing with application events.
+     */
+    private static class SystemEventHelper {
+
+        private final Cache<Class<? extends SystemEvent>, SystemEventInfo> systemEventInfoCache;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        public SystemEventHelper() {
+
+            systemEventInfoCache =
+                  new Cache<Class<? extends SystemEvent>, SystemEventInfo>(
+                        new Factory<Class<? extends SystemEvent>, SystemEventInfo>() {
+                            public SystemEventInfo newInstance(final Class<? extends SystemEvent> arg)
+                                  throws InterruptedException {
+                                return new SystemEventInfo(arg);
+                            }
+                        }
+                  );
+
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        public EventInfo getEventInfo(Class<? extends SystemEvent> systemEventClass,
+                                      Class<?> sourceClass) {
+
+            EventInfo info = null;
+            SystemEventInfo systemEventInfo = systemEventInfoCache.get(systemEventClass);
+            if (systemEventInfo != null) {
+                info = systemEventInfo.getEventInfo(sourceClass);
+            }
+
+            return info;
+
+        }
+
+
+        public EventInfo getEventInfo(Class<? extends SystemEvent> systemEventClass,
+                                      Object source,
+                                      Class<?> sourceBaseType,
+                                      boolean useSourceForLookup) {
+
+            Class<?> sourceClass =
+                  ((useSourceForLookup) ?
+                       ((sourceBaseType != null)
+                                          ? sourceBaseType
+                                          : source.getClass())
+                                        : Void.class);
+            return getEventInfo(systemEventClass, sourceClass);
+
+        }
+
+
+    } // END SystemEventHelper
+
+
+    /**
+     * Utility class for dealing with {@link javax.faces.component.UIComponent} events.
+     */
+    private static class ComponentSystemEventHelper {
+
+        private Cache<Class<?>,Cache<Class<? extends SystemEvent>,EventInfo>> sourceCache;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        public ComponentSystemEventHelper() {
+
+            // Initialize the 'sources' cache for, ahem, readability...
+            // ~generics++
+            Factory<Class<?>, Cache<Class<? extends SystemEvent>, EventInfo>> eventCacheFactory =
+                  new Factory<Class<?>, Cache<Class<? extends SystemEvent>, EventInfo>>() {
+                      public Cache<Class<? extends SystemEvent>, EventInfo> newInstance(
+                            final Class<?> sourceClass)
+                            throws InterruptedException {
+                          Factory<Class<? extends SystemEvent>, EventInfo> eventInfoFactory =
+                                new Factory<Class<? extends SystemEvent>, EventInfo>() {
+                                    public EventInfo newInstance(final Class<? extends SystemEvent> systemEventClass)
+                                          throws InterruptedException {
+                                        return new EventInfo(systemEventClass, sourceClass);
+                                    }
+                                };
+                          return new Cache<Class<? extends SystemEvent>, EventInfo>(eventInfoFactory);
+                      }
+                  };
+            sourceCache = new Cache<Class<?>,Cache<Class<? extends SystemEvent>,EventInfo>>(eventCacheFactory);
+
+        }
+
+        // ------------------------------------------------------ Public Methods
+
+
+        public EventInfo getEventInfo(Class<? extends SystemEvent> systemEvent,
+                                      Class<?> sourceClass) {
+
+            Cache<Class<? extends SystemEvent>, EventInfo> eventsCache =
+                  sourceCache.get(sourceClass);
+            return eventsCache.get(systemEvent);
+
+        }
+
+    } // END ComponentSystemEventHelper
+
+
+    /**
+     * Simple wrapper class for application level SystemEvents.  It provides the
+     * structure to map a single SystemEvent to multiple sources which are
+     * represented by <code>SourceInfo</code> instances.
+     */
+    private static class SystemEventInfo {
+
+        private Cache<Class<?>,EventInfo> cache = new Cache<Class<?>,EventInfo>(
+              new Factory<Class<?>, EventInfo>() {
+                  public EventInfo newInstance(Class<?> arg)
+                        throws InterruptedException {
+                      return new EventInfo(systemEvent, arg);
+                  }
+              }
+        );
+        private Class<? extends SystemEvent> systemEvent;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        private SystemEventInfo(Class<? extends SystemEvent> systemEvent) {
+
+            this.systemEvent = systemEvent;
+
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        public EventInfo getEventInfo(Class<?> source) {
+
+            Class<?> sourceClass = ((source == null) ? Void.class : source);
+            return cache.get(sourceClass);
+
+        }
+
+    } // END SystemEventInfo
+
+
+    /**
+     * Represent a logical association between a SystemEvent and a Source.
+     * This call will contain the Listeners specific to this association
+     * as well as provide a method to construct new SystemEvents as required.
+     */
+    private static class EventInfo {
+        private Class<? extends SystemEvent> systemEvent;
+        private Class<?> sourceClass;
+        private Set<SystemEventListener> listeners;
+        private Constructor eventConstructor;
+        private Map<Class<?>,Constructor> constructorMap;
+
+        // -------------------------------------------------------- Constructors
+
+
+        public EventInfo(Class<? extends SystemEvent> systemEvent,
+                         Class<?> sourceClass) {
+
+            this.systemEvent = systemEvent;
+            this.sourceClass = sourceClass;
+            this.listeners = new CopyOnWriteArraySet<SystemEventListener>();
+            this.constructorMap = new HashMap<Class<?>,Constructor>();
+            if (!sourceClass.equals(Void.class)) {
+                eventConstructor = getEventConstructor(sourceClass);
+            }
+
+        }
+
+        // ------------------------------------------------------ Public Methods
+
+
+        public Set<SystemEventListener> getListeners() {
+
+            return listeners;
+
+        }
+
+
+        public SystemEvent createSystemEvent(Object source) {
+
+            Constructor toInvoke = getCachedConstructor(source.getClass());
+            if (toInvoke != null) {
+                try {
+                    return (SystemEvent) toInvoke.newInstance(source);
+                } catch (Exception e) {
+                    throw new FacesException(e);
+                }
+            }
+            return null;
+
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        private Constructor getCachedConstructor(Class<?> source) {
+
+            if (eventConstructor != null) {
+                return eventConstructor;
+            } else {
+                Constructor c = constructorMap.get(source);
+                if (c == null) {
+                    c = getEventConstructor(source);
+                    if (c != null) {
+                        constructorMap.put(source, c);
+                    }
+                }
+                return c;
+            }
+
+        }
+
+
+        private Constructor getEventConstructor(Class<?> source) {
+
+            Constructor ctor = null;
+            try {
+                return systemEvent.getDeclaredConstructor(source);
+            } catch (NoSuchMethodException ignored) {
+                Constructor[] ctors = systemEvent.getConstructors();
+                if (ctors != null) {
+                    for (Constructor c : ctors) {
+                        Class<?>[] params = c.getParameterTypes();
+                        if (params.length != 1) {
+                            continue;
+                        }
+                        if (params[0].isAssignableFrom(source)) {
+                            return c;
+                        }
+                    }
+                }
+                if (eventConstructor == null && LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                        "Unable to find Constructor within {0} that accepts {1} instances.",
+                        new Object[] { systemEvent.getName(), sourceClass.getName() });
+                }
+            }
+            return ctor;
+
+        }
+
+    } // END SourceInfo
+
+
+    private static final class ComponentResourceClassNotFound { }
+
+}
diff --git a/com/sun/faces/application/ApplicationInstanceFactoryMetadataMap.java b/com/sun/faces/application/ApplicationInstanceFactoryMetadataMap.java
new file mode 100644
index 0000000..ea0601c
--- /dev/null
+++ b/com/sun/faces/application/ApplicationInstanceFactoryMetadataMap.java
@@ -0,0 +1,84 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2011 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application;
+
+import com.sun.faces.util.MetadataWrapperMap;
+import com.sun.faces.util.Util;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ApplicationInstanceFactoryMetadataMap<K, V> extends MetadataWrapperMap<String, Object> {
+    public enum METADATA {
+        hasAnnotations
+    };
+
+    public ApplicationInstanceFactoryMetadataMap(Map<String, Object> toWrap) {
+        super(toWrap);
+    }
+
+    public boolean hasAnnotations(String key) {
+        boolean result = false;
+        Map<Object, Object> metadataForKey = getMetadata().get(key);
+        Object objResult = metadataForKey.get(METADATA.hasAnnotations);
+        if (null != objResult) {
+            result = (Boolean) objResult;
+        }
+
+        return result;
+    }
+
+    public void scanForAnnotations(String key, Class value) {
+        onPut(key, value);
+    }
+
+    @Override
+    protected Object onPut(String key, Object value) {
+        if (value instanceof Class) {
+            Map<Object, Object> metadataForKey = getMetadata().get(key);
+            if (null == metadataForKey) {
+                metadataForKey = new HashMap<Object, Object>();
+                getMetadata().put(key, metadataForKey);
+            }
+            metadataForKey.put(METADATA.hasAnnotations, (Boolean)
+                        Util.classHasAnnotations((Class) value));
+
+        }
+        return null;
+    }
+
+
+
+}
diff --git a/com/sun/faces/application/ApplicationResourceBundle.java b/com/sun/faces/application/ApplicationResourceBundle.java
new file mode 100644
index 0000000..aacc670
--- /dev/null
+++ b/com/sun/faces/application/ApplicationResourceBundle.java
@@ -0,0 +1,197 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.util.Util;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+
+/**
+ * <p>Contains an application level resource bundle
+ * name and its associated descriptions, if any.</p>
+ */
+public class ApplicationResourceBundle {
+
+    public static final String DEFAULT_KEY = "DEFAULT";
+
+    private final String baseName;
+    private final Map<String, String> displayNames;
+    private final Map<String, String> descriptions;
+    private volatile Map<Locale, ResourceBundle> resources;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>
+     *   Constructs a new ApplicationResourceBundle
+     * </p>
+     * @param baseName the base name of the <code>ResourceBundle</code>
+     * @param displayNames any display names that were associated
+     *  with the resource bundle definition in the configuration resource
+     * @param descriptions any descriptions that were associated
+     *  with the resource bundle definition in the configuration resource
+     */
+    public ApplicationResourceBundle(String baseName,
+                                     Map<String, String> displayNames,
+                                     Map<String, String> descriptions) {
+
+        if (baseName == null) {
+            // PENDING i18n
+            throw new IllegalArgumentException();
+        }
+        this.baseName = baseName;
+        this.displayNames = displayNames;
+        this.descriptions = descriptions;
+        this.resources = new HashMap<Locale, ResourceBundle>(4, 1.0f);
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @return the base name of the <code>ResourceBundle</code> associated with
+     *  this <code>ApplicationResourceBundle</code> instance
+     */
+    public String getBaseName() {
+
+        return baseName;
+
+    }
+
+
+    /**
+     * @param locale a <code>Locale</code>
+     * @return return the <code>ResourceBundle</code> associated with the
+     *  specified </code>locale</code>
+     */
+    public ResourceBundle getResourceBundle(Locale locale) {
+
+        if (locale == null) {
+            locale = Locale.getDefault();
+        }
+
+        ResourceBundle bundle = resources.get(locale);
+        if (bundle == null) {
+            ClassLoader loader = Util.getCurrentLoader(this);
+            synchronized(this) {
+                bundle = resources.get(locale);
+                if (bundle == null) {
+                    bundle = ResourceBundle.getBundle(baseName, locale, loader);
+                    resources.put(locale, bundle);
+                }
+            }
+        }
+
+        return bundle;
+
+    }
+
+
+    /**
+     * @param locale a <code>Locale</code>
+     * @return a text of a <code>display-name</code> element associated with the
+     *  specified </code>locale</code>
+     */
+    public String getDisplayName(Locale locale) {
+
+        String displayName = null;
+        if (displayNames != null) {
+            displayName = queryMap(locale, displayNames);            
+        }
+
+        return ((displayName != null) ? displayName : "");
+
+    }
+
+
+    /**
+     * @param locale a <code>Locale</code>
+     * @return a text of a <code>description</code> element associated with the
+     *  specified </code>locale</code>
+     */
+    public String getDescription(Locale locale) {
+
+        String description = null;
+        if (descriptions != null) {
+           description = queryMap(locale, descriptions);
+        }
+
+        return ((description != null) ? description : "");
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>
+     *  Lookup and return the text for the specified <code>Locale</code>
+     *   from within the specified <code>Map</code>.
+     * </p>
+     * @param locale <code>Locale</code> if interest
+     * @param map a map containing localized text keyed by <code>Locale</code>
+     * @return localized text, if any
+     */
+    private String queryMap(Locale locale, Map<String, String> map) {
+
+        if (locale == null) {
+            return map.get(DEFAULT_KEY);
+        } else {
+            String key = locale.toString();
+            String description = map.get(key);
+            if (description == null) {
+                return map.get(DEFAULT_KEY);
+            }
+        }
+
+        return null;
+
+    }
+
+}
diff --git a/com/sun/faces/application/ApplicationStateInfo.java b/com/sun/faces/application/ApplicationStateInfo.java
new file mode 100644
index 0000000..ae84b35
--- /dev/null
+++ b/com/sun/faces/application/ApplicationStateInfo.java
@@ -0,0 +1,101 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.config.WebConfiguration;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FullStateSavingViewIds;
+import com.sun.faces.util.MessageUtils;
+
+/**
+ * This class maintains per-application information pertaining
+ * to partail or full state saving as a whole or partial state saving
+ * with some views using full state saving.
+ */
+public class ApplicationStateInfo {
+
+    private boolean partialStateSaving;
+    private Set<String> fullStateViewIds;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ApplicationStateInfo() {
+
+        WebConfiguration config = WebConfiguration.getInstance();
+        partialStateSaving = config.isOptionEnabled(PartialStateSaving);
+
+        if (partialStateSaving) {
+            String[] viewIds = config.getOptionValue(FullStateSavingViewIds, ",");
+            fullStateViewIds = new HashSet<String>(viewIds.length, 1.0f);
+            fullStateViewIds.addAll(Arrays.asList(viewIds));
+        }
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * @param viewId the view ID to check
+     * @throws IllegalArgumentException if viewId is null
+     * @return <code>true</code> if partial state saving should be used for the
+     *  specified view ID, otherwise <code>false</code>
+     */
+    public boolean usePartialStateSaving(String viewId) {
+
+        if (viewId == null) {
+            throw new IllegalArgumentException(MessageUtils.getExceptionMessageString(
+                MessageUtils.NULL_VIEW_ID_ERROR_MESSAGE_ID));
+        }
+
+        return (partialStateSaving && !fullStateViewIds.contains(viewId));
+
+    }
+
+}
diff --git a/com/sun/faces/application/ByteArrayWebOutputStream.java b/com/sun/faces/application/ByteArrayWebOutputStream.java
new file mode 100644
index 0000000..87c83f6
--- /dev/null
+++ b/com/sun/faces/application/ByteArrayWebOutputStream.java
@@ -0,0 +1,283 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.util.FacesLogger;
+
+import javax.servlet.ServletOutputStream;
+import javax.faces.FacesException;
+import java.io.Writer;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.Charset;
+import java.nio.charset.CharacterCodingException;
+
+/**
+ * This steam converts byte content to character.  This implementation allows us
+ * to query whether or not the writer has been flushed or closed.  This is
+ * necessary to better mimic the actual Servlet response.
+ */
+class ByteArrayWebOutputStream extends ServletOutputStream {
+
+    public static final ServletOutputStream NOOP_STREAM = new NoOpOutputStream();
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    private DirectByteArrayOutputStream baos;
+    private boolean committed;
+
+    public ByteArrayWebOutputStream() {
+        baos = new DirectByteArrayOutputStream(1024);
+    }
+
+    public void write(int n) {
+        baos.write(n);
+    }
+
+    /**
+     * <p>It's important to not expose this as reset.</p>
+     */
+
+    public void resetByteArray() {
+        baos.reset();
+    }
+
+    public byte[] toByteArray() {
+        return baos.toByteArray();
+    }
+
+
+    /**
+     * Converts the buffered bytes into chars based on the
+     * specified encoding and writes them to the provided Writer.
+     *
+     * @param writer   target Writer
+     * @param encoding character encoding
+     */
+    public void writeTo(Writer writer, String encoding) {
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Converting buffered ServletOutputStream bytes"
+                    + " to chars using " + encoding);
+        }
+
+        ByteBuffer bBuff = baos.getByteBuffer();
+        CharsetDecoder decoder = Charset.forName(encoding).newDecoder();
+
+        try {
+            CharBuffer cBuff = decoder.decode(bBuff);
+            writer.write(cBuff.array());
+        } catch (CharacterCodingException cce) {
+            throw new FacesException(cce);
+        } catch (IOException ioe) {
+            throw new FacesException(ioe);
+        }
+    }
+
+
+    public boolean isCommitted() {
+        return committed;
+    }
+
+    @Override
+    public void close() throws IOException {
+        committed = true;
+    }
+
+    @Override
+    public void flush() throws IOException {
+        committed = true;
+    }
+
+    /**
+     * <p>Write the buffered bytes to the provided OutputStream.</p>
+     *
+     * @param stream the stream to write to
+     */
+    public void writeTo(OutputStream stream) {
+        try {
+            stream.write(baos.getByteBuffer().array());
+        } catch (IOException ioe) {
+            throw new FacesException(ioe);
+        }
+    }
+
+    private static class DirectByteArrayOutputStream extends ByteArrayOutputStream {
+
+        // -------------------------------------------------------- Constructors
+
+
+        public DirectByteArrayOutputStream(int initialCapacity) {
+            super(initialCapacity);
+        }
+
+        // ------------------------------------------------------- PublicMethods
+
+
+        /**
+         * Return the buffer backing this ByteArrayOutputStream as a
+         * ByteBuffer.
+         *
+         * @return buf wrapped in a ByteBuffer
+         */
+        public ByteBuffer getByteBuffer() {
+            return (ByteBuffer.wrap(buf, 0, count));
+        }
+
+    }
+
+
+    private static class NoOpOutputStream extends ServletOutputStream {
+
+        public void write(int b) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void write(byte b[]) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void write(byte b[], int off, int len) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void flush() throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void close() throws IOException {
+            // no-op
+        }
+
+        protected NoOpOutputStream() {
+            // no-op
+        }
+
+        @Override
+        public void print(String s) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void print(boolean b) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void print(char c) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void print(int i) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void print(long l) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void print(float v) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void print(double v) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println() throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println(String s) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println(boolean b) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println(char c) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println(int i) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println(long l) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println(float v) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void println(double v) throws IOException {
+            // no-op
+        }
+    }
+}
+
+
+
+
diff --git a/com/sun/faces/application/ConverterPropertyEditorBase.java b/com/sun/faces/application/ConverterPropertyEditorBase.java
new file mode 100644
index 0000000..cf07436
--- /dev/null
+++ b/com/sun/faces/application/ConverterPropertyEditorBase.java
@@ -0,0 +1,134 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.beans.PropertyEditorSupport;
+
+/**
+ * Abstract base for a {@link java.beans.PropertyEditor} that delegates to a
+ * faces Converter that was registered by-type in a faces-config descriptor.
+ * Concrete implementations (such as generated by {@link
+ * ConverterPropertyEditorFactory}) will override {@link #getTargetClass}. (This
+ * is based on the original ConverterPropertyEditor code).
+ */
+public abstract class ConverterPropertyEditorBase
+      extends PropertyEditorSupport {
+    /**
+     * Return the target class of the objects that are being edited. This is used
+     * as a key to find the appropriate {@link javax.faces.convert.Converter} from
+     * the Faces application.
+     *
+     * @return the target class.
+     */
+    protected abstract Class<?> getTargetClass();
+
+    /**
+     * Convert the <code>textValue</code> to an object of type {@link
+     * #getTargetClass} by delegating to a converter in the faces Application.
+     */
+    @Override
+    public void setAsText(String textValue) throws IllegalArgumentException {
+        try {
+            Object appAssociate = getPropertyEditorHelper();
+            // Get targetClass for the current ClassLoader
+            Class<?> targetClass = Thread.currentThread()
+                  .getContextClassLoader()
+                  .loadClass(getTargetClass().getName());
+            Object value = appAssociate.getClass()
+                  .getMethod("convertToObject", Class.class, String.class)
+                  .invoke(
+                        appAssociate, targetClass, textValue);
+            if (value != null) {
+                setValue(value);
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new IllegalStateException(
+                  "Unexpected Error attempting to use this ConverterPropertyEditor.  You're deployment environment may not support"
+                  + "ConverterPropertyEditors.  Try restarting your server or disabling "
+                  + "com.sun.faces.registerConverterPropertyEditors", e);
+        }
+    }
+
+    private Object getPropertyEditorHelper() throws Exception {
+        // Load the current
+        Class<?> facesContextClass =
+              Thread.currentThread().getContextClassLoader().loadClass(
+                    "com.sun.faces.application.ApplicationAssociate");
+        // get the current context version of this class in case
+        Object appAssociate =
+              facesContextClass.getMethod("getCurrentInstance").invoke(null);
+        if (appAssociate == null) {
+            throw new IllegalStateException(
+                  "Unable to find Deployed JSF Application.  You're deployment environment may not support"
+                  + "ConverterPropertyEditors.  Try restarting your server or turn off "
+                  + "com.sun.faces.registerConverterPropertyEditors");
+        }
+        Object propertyEditorHelper = appAssociate.getClass()
+              .getMethod("getPropertyEditorHelper").invoke(appAssociate);
+        return propertyEditorHelper;
+    }
+
+    /**
+     * Convert an object of type {@link #getTargetClass} to text by delegating to a
+     * converter obtained from the Faces Application.
+     */
+    @Override
+    public String getAsText() {
+        try {
+            Object application = getPropertyEditorHelper();
+            Class<?> targetClass = Thread.currentThread()
+                  .getContextClassLoader()
+                  .loadClass(getTargetClass().getName());
+            String text = (String) application.getClass()
+                  .getMethod("convertToString", Class.class, Object.class)
+                  .invoke(application, targetClass, getValue());
+            if (text != null) {
+                return text;
+            } else {
+                return super.getAsText();
+            }
+        } catch (Exception e) {
+            return super.getAsText();
+        }
+    }
+}
diff --git a/com/sun/faces/application/ConverterPropertyEditorFactory.java b/com/sun/faces/application/ConverterPropertyEditorFactory.java
new file mode 100644
index 0000000..4c35382
--- /dev/null
+++ b/com/sun/faces/application/ConverterPropertyEditorFactory.java
@@ -0,0 +1,659 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.lang.ref.WeakReference;
+import java.util.Map;
+import java.util.TreeSet;
+import java.util.WeakHashMap;
+import java.util.HashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * <p>
+ * Factory for dynamically generating PropertyEditor classes that extend
+ * {@link ConverterPropertyEditorBase} and replace any references to the target
+ * class from the template with a supplied target class.
+ * </p>
+ */
+public class ConverterPropertyEditorFactory {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    /**
+     * <p>
+     * Capture information extracted from a "template" PropertyEditor class, and
+     * perform manipulation of the byte codes in order to generate the bytes for
+     * a new PropertyEditor class.
+     * </p>
+     * <p>
+     * The new class bytes are generated by identifying UTF8Info entries in the
+     * constant pool of the template class, and replacing them with new UTF8
+     * constants to define a new class. The constants to be replaced are those
+     * for:
+     * <ul>
+     * <li>The name of the class itself
+     * (com/sun/faces/application/ConverterPropertyEditorFor_XXXX).</li>
+     * <li>The class name as a type reference
+     * (Lcom/sun/faces/application/ConverterPropertyEditorFor_XXXX;).</li>
+     * <li>The name of the <i>target class</i> that the editor will be
+     * manipulating (java/util/Date in the current template).</li>
+     * </ul>
+     * </p>
+     */
+    private static class ClassTemplateInfo {
+        /**
+         * Capture details of the location of a UTF8Info entry in the constant
+         * pool of the template class.
+         */
+        private static class Utf8InfoRef {
+            
+            /**
+             * The position of the constant in the byte array that defines the
+             * template class.
+             */
+            int index;
+            /**
+             * The number of bytes that the constant occupies in the byte array
+             * that defines the template class.
+             */
+            int length;
+
+            public Utf8InfoRef(int index, int length) {
+                super();               
+                this.index = index;
+                this.length = length;
+            }
+        }
+
+        /**
+         * Capture details of a single substitution to be made in the template
+         * class while generating the new class. Implements
+         * {@link java.lang.Comparable} so that the replacements can be ordered
+         * according to the order they appear in the source.
+         */
+        private static class Utf8InfoReplacement implements
+            Comparable<Utf8InfoReplacement> {
+            /**
+             * The utf8 constant reference from the template source.
+             */
+            Utf8InfoRef ref;
+            /**
+             * The bytes to replace the constant with (must also be a valid utf8
+             * constant pool entry).
+             */
+            byte[] replacement;
+
+            public Utf8InfoReplacement(Utf8InfoRef ref, String replacement) {
+                super();
+                this.ref = ref;
+                this.replacement = getUtf8InfoBytes(replacement);
+            }
+
+            /**
+             * Order by the index position of the source UTF8Info reference.
+             */
+            public int compareTo(Utf8InfoReplacement rhs) {
+                return ref.index - rhs.ref.index;
+            }
+        }
+
+        // The source template class on which to base the definition of the new
+        // PropertyEditor classes.
+        private Class<? extends ConverterPropertyEditorBase> templateClass;
+        // The bytes that define the source template class.
+        private byte[] templateBytes;
+        // The constant_pool_count from the template class bytecodes.
+        private int constant_pool_count;
+        // Reference to the class name utf8 constant
+        private Utf8InfoRef classNameConstant;
+        // Reference to the class name ref utf8 constant
+        private Utf8InfoRef classNameRefConstant;
+        // Reference to the target class name utf8 constant
+        private Utf8InfoRef targetClassConstant;
+
+        /**
+         * Default constructor uses the {@link ConverterPropertyEditorFor_XXXX}
+         * class as the source template.
+         */
+        public ClassTemplateInfo() {
+            this(ConverterPropertyEditorFor_XXXX.class);
+        }
+
+        /**
+         * Construct a template info instance based on the supplied class.
+         * 
+         * @param templateClass
+         *            is a "template" class (but not in the java generics sense)
+         *            which must extend {@link ConverterPropertyEditorBase} and
+         *            override the
+         *            {@link ConverterPropertyEditorBase#getTargetClass} method.
+         */
+        public ClassTemplateInfo(
+            Class<? extends ConverterPropertyEditorBase> templateClass) {
+            this.templateClass = templateClass;
+            try {
+                ConverterPropertyEditorBase tc = templateClass.newInstance();
+                Class<?> templateTargetClass = tc.getTargetClass();
+                loadTemplateBytes();
+                classNameConstant = findConstant(getVMClassName(templateClass));
+                classNameRefConstant = findConstant(
+                     new StringBuilder(64).append('L').append(getVMClassName(templateClass)).append(';').toString());
+                targetClassConstant = findConstant(getVMClassName(templateTargetClass));
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               "Unexected exception ClassTemplateInfo",
+                               e);
+                }
+            }
+        }
+
+        /**
+         * Check whether the <code>targetBytes</code> match the content of the
+         * <code>templateBytes</code> at the given <code>index</code>.
+         * 
+         * @param targetBytes
+         *            byte array to compare.
+         * @param index
+         *            the index into <code>templateBytes</code> at which to
+         *            compare.
+         * @return true if the bytes from <code>targetBytes</code> match the
+         *         bytes from <code>templateBytes</code>.
+         */
+        private boolean matchAtIndex(byte[] targetBytes, int index) {
+            if (index < 0 || index + targetBytes.length > templateBytes.length) {
+                return false;
+            }
+            for (int i = 0; i < targetBytes.length; ++i) {
+                if (targetBytes[i] != templateBytes[index + i]) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        /**
+         * Find an instance of UTF8Info in the source class's constant pool
+         * where the text matches the given argument.
+         * 
+         * @param text
+         *            the text that the UTF8Info must contain.
+         * @return A {@link Utf8InfoRef} instance refering to the matched
+         *         constant pool entry, or <code>null</code> if no match was
+         *         found.
+         */
+        private Utf8InfoRef findConstant(String text) {
+            byte[] utf8InfoBytes = getUtf8InfoBytes(text);
+            assert utf8InfoBytes[0] == 1;
+            int off = 10;
+            for (int i = 1; i < constant_pool_count
+                && off < templateBytes.length; ++i) {
+                if (matchAtIndex(utf8InfoBytes, off)) {
+                    return new Utf8InfoRef(off, utf8InfoBytes.length);
+                }
+                switch (templateBytes[off]) {
+                case 1:// CONSTANT_Utf8
+                {
+                    int len = (templateBytes[off + 1] & 0xff << 8)
+                        + (templateBytes[off + 2] & 0xff);
+                    off += 3 + len;
+                    break;
+                }
+                case 7:// CONSTANT_Class
+                case 8:// CONSTANT_String
+                    off += 3;
+                    break;
+                case 3:// CONSTANT_Integer
+                case 4:// CONSTANT_Float
+                case 9:// CONSTANT_Fieldref
+                case 10:// CONSTANT_Methodref
+                case 11:// CONSTANT_InterfaceMethodref
+                case 12:// CONSTANT_NameAndType
+                    off += 5;
+                    break;
+                case 5:// CONSTANT_Long
+                case 6:// CONSTANT_Double
+                    off += 9;
+                    break;
+                default:
+                    throw new IllegalArgumentException(
+                        "Unrecognized class file constant pool tag "
+                            + templateBytes[off]);
+                }
+            }
+            return null;
+        }
+
+        /**
+         * Obtain the bytes that define the given class by looking for the
+         * ".class" resource and loading the binary data.
+         * 
+         * @throws IOException if an error occurs loading the binary data
+         */
+        private void loadTemplateBytes() throws IOException {
+            String resourceName = '/'
+                + templateClass.getName().replace('.', '/') + ".class";
+            InputStream in = ConverterPropertyEditorFactory.class
+                .getResourceAsStream(resourceName);
+            if (in != null) {
+                try {
+                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                    byte[] buff = new byte[1024];
+                    int more;
+                    while ((more = in.read(buff)) > 0) {
+                        baos.write(buff, 0, more);
+                    }
+                    templateBytes = baos.toByteArray();
+                    // The bytes should start with the CAFEBABE "magic" header
+                    // for class files.
+                    assert templateBytes.length > 9;
+                    assert templateBytes[0] == (byte) 0xCA;
+                    assert templateBytes[1] == (byte) 0xFE;
+                    assert templateBytes[2] == (byte) 0xBA;
+                    assert templateBytes[3] == (byte) 0xBE;
+                    constant_pool_count = ((templateBytes[8] & 0xff) << 8)
+                        + (templateBytes[9] & 0xff);
+                } finally {
+                    in.close();
+                }
+            }
+        }
+
+        /**
+         * Generate a class name to use for the generated PropertyEditor class,
+         * based on the full name of the target class. This is done by replacing
+         * the "XXXX" in the template class name with a version of the target
+         * class name.
+         * 
+         * @param targetClass
+         *            The target class which the PropertyEditor will operate on.
+         * @param vmFormat
+         *            If true, the package name components will be '/'
+         *            separated. Otherwise they will be '.' separated.
+         * @return The full name to use for the generated PropertyEditor class.
+         */
+        public String generateClassNameFor(Class<?> targetClass,
+            boolean vmFormat) {
+            String name = targetClass.getName();
+            if (targetClass.isArray()) {                            
+                int idx = name.lastIndexOf('[');
+                int bracketCount = idx + 1;
+                int semiIdx = name.indexOf(';');
+                if (semiIdx == -1) {
+                    // primitive array
+                    name = PRIM_MAP.get(name.charAt(idx + 1));
+                } else {
+                    // Object array
+                    name = name.substring(idx + 2, semiIdx);
+                }
+                name += "Array" + bracketCount + 'd';                
+            }
+            Matcher m = UnderscorePattern.matcher(name);
+            // Replace existing underscores with one extra underscore.
+            name = m.replaceAll("$0_");
+            // Replace existing dots with a single underscore.
+            name = name.replace('.', '_');
+            if (vmFormat) {
+                return getVMClassName(templateClass).replace("XXXX", name);
+            } else {
+                return templateClass.getName().replace("XXXX", name);
+            }
+        }
+
+        /**
+         * Extract the original target class name from the generated
+         * PropertyEditor class name. (This is the reverse of
+         * {@link #generateClassNameFor}).
+         * 
+         * @param className
+         *            name of the generated PropertyEditor class.
+         * @return the target class name, or null if the given
+         *         <code>className</code> was not a generated PropertyEditor
+         *         name.
+         */
+        public String getTargetClassName(String className) {
+            String prefix = templateClass.getName().replace("XXXX", "");
+            if (className.startsWith(prefix)) {
+                String name = className.substring(prefix.length());
+                name = SingleUnderscorePattern.matcher(name)
+                    .replaceAll("$1.$2");
+                name = MultipleUnderscorePattern.matcher(name).replaceAll("$1");
+                return name;
+            }
+            return null;
+        }
+
+        /**
+         * Generate the bytes for a new class based on the
+         * <code>templateBytes</code>, but with all the replacements in
+         * <code>replacements</code> performed.
+         * 
+         * @param replacements one or more Utf8InfoReplacments
+         * @return the bytes for the new class definition.
+         */
+        private byte[] replaceInTemplate(Utf8InfoReplacement... replacements) {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            // Sort the replacements, and weed out any that have no source match
+            TreeSet<Utf8InfoReplacement> sorted = new TreeSet<Utf8InfoReplacement>();
+            for (Utf8InfoReplacement r : replacements) {
+                if (r.ref != null && r.replacement != null) {
+                    sorted.add(r);
+                }
+            }
+            // Now create the output bytes by applying the remaining
+            // replacements
+            int from = 0;
+            for (Utf8InfoReplacement r : sorted) {
+                baos.write(templateBytes, from, r.ref.index - from);
+                from = r.ref.index + r.ref.length;
+                baos.write(r.replacement, 0, r.replacement.length);
+            }
+            baos.write(templateBytes, from, templateBytes.length - from);
+            return baos.toByteArray();
+        }
+
+        /**
+         * @return the bytes for a new class with the given name and target
+         * class.
+         * 
+         * @param newClassName
+         *            the binary name of the new class.
+         * @param targetClassName
+         *            the binary name of the PropertyEditor's target class.
+         */
+        public byte[] generateClassBytesFor(String newClassName,
+            String targetClassName) {
+            return replaceInTemplate(new Utf8InfoReplacement(classNameConstant,
+                newClassName), new Utf8InfoReplacement(classNameRefConstant,
+                 new StringBuilder(32).append('L').append(newClassName).append(';').toString()), new Utf8InfoReplacement(
+                targetClassConstant, targetClassName));
+        }
+    }
+
+    /**
+     * <p>
+     * A custom class loader for the definition of the generated classes. When
+     * the generated class is loaded, it will need to be able to resolve both
+     * the base class ({@link ConverterPropertyEditorBase}) which comes from
+     * <code>myLoader</code> and the target class which comes from
+     * <code>targetLoader</code>. This class loader defines only the
+     * generated class, and delegates to the above two loaders for the rest.
+     * </p>
+     * <p>
+     * The {@link ConverterPropertyEditorFactory} will keep a cache of these
+     * class loaders (via weak references), one for each class loader that the
+     * target classes come from. That way the target class loader (which is
+     * likely to be a webapp specific loader) can be disposed of and replaced
+     * when the webapp is removed or reinstalled.
+     * </p>
+     */
+    private class DisposableClassLoader extends ClassLoader {
+        // The class loader which loaded the target class.
+        private ClassLoader targetLoader;
+        // The class loader which loaded the base class
+        private ClassLoader myLoader;
+
+        public DisposableClassLoader(ClassLoader targetLoader) {
+            super(targetLoader);
+            this.targetLoader = targetLoader;
+            this.myLoader = ConverterPropertyEditorBase.class.getClassLoader();
+        }
+
+        /**
+         * Override class loading to enable possible delegation to the two class
+         * loaders, rather than just to the parent.
+         */
+        @Override
+        protected synchronized Class<?> loadClass(String name, boolean resolve)
+            throws ClassNotFoundException {
+            // First, check if the class has already been loaded
+            Class c = findLoadedClass(name);
+            // Otherwise check if myLoader is able to load it ...
+            //noinspection ObjectEquality
+            if ((c == null) && (myLoader != null) && (myLoader != targetLoader)) {
+                try {
+                    c = myLoader.loadClass(name);
+                } catch (ClassNotFoundException ignored) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Ignoring ClassNotFoundException, continuing with parent ClassLoader.", ignored);
+                    }
+                }
+            }
+            // Otherwise go ahead with the targetLoader and with the dynamic
+            // class generation ...
+            if (c == null) {
+                c = super.loadClass(name, false);
+            }
+            if (resolve) {
+                resolveClass(c);
+            }
+            return c;
+        }
+
+        /**
+         * If <code>super.loadClass</code> is unable to locate a class, it
+         * will call this method to define it. If the <code>className</code>
+         * is a generated PropertyEditor class name, then create the new class.
+         * Otherwise call <code>super.findClass</code> which will throw a
+         * {@link ClassNotFoundException}.
+         */
+        @Override
+        protected Class<?> findClass(String className)
+            throws ClassNotFoundException {
+            String targetClassName = getTemplateInfo().getTargetClassName(
+                className);
+            if (targetClassName != null) {
+                // Need to generate an appropriate PropertyEditor class for the
+                // specified target class.
+                byte[] classBytes = getTemplateInfo().generateClassBytesFor(
+                    className.replace('.', '/'),
+                    targetClassName.replace('.', '/'));
+                Class editorClass = defineClass(className,
+                                                classBytes,
+                                                0,
+                                                classBytes.length);
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("Defined editorClass " + editorClass);
+                }
+                return editorClass;
+            }
+            // This will just cause ClassNotFoundException to be thrown.
+            return super.findClass(className);
+        }
+    }
+
+    private static final Pattern UnderscorePattern = Pattern.compile("_+");
+    private static final Pattern SingleUnderscorePattern = Pattern
+        .compile("([^_])_([^_])");
+    private static final Pattern MultipleUnderscorePattern = Pattern
+        .compile("_(_+)");
+    private static ConverterPropertyEditorFactory defaultInstance;
+    // Template information extracted from the source template class.
+    private ClassTemplateInfo templateInfo;
+    // Cache of DisposableClassLoaders keyed on the class loader of the target.
+    private Map<ClassLoader, WeakReference<DisposableClassLoader>> classLoaderCache;
+    
+    private static final Map<Character,String> PRIM_MAP =
+          new HashMap<Character,String>(8, 1.0f);
+    static {
+        PRIM_MAP.put('B', "byte");
+        PRIM_MAP.put('C', "char");
+        PRIM_MAP.put('S', "short");
+        PRIM_MAP.put('I', "int");
+        PRIM_MAP.put('F', "float");
+        PRIM_MAP.put('J', "long");
+        PRIM_MAP.put('D', "double");
+        PRIM_MAP.put('Z', "boolean");
+    }
+
+    /**
+     * Create a <code>ConverterPropertyEditorFactory</code> that uses the
+     * default template class ({@link ConverterPropertyEditorFor_XXXX}).
+     */
+    public ConverterPropertyEditorFactory() {
+        // Use the default template class
+        templateInfo = new ClassTemplateInfo();
+    }
+
+    /**
+     * Create a <code>ConverterPropertyEditorFactory</code> that uses the
+     * specified template class.
+     * 
+     * @param templateClass the template
+     */
+    public ConverterPropertyEditorFactory(
+        Class<? extends ConverterPropertyEditorBase> templateClass) {
+        templateInfo = new ClassTemplateInfo(templateClass);
+    }
+
+    /**
+     * @return the single default instance of this class (created with the
+     * default template class).
+     */
+    public static synchronized ConverterPropertyEditorFactory getDefaultInstance() {
+        if (defaultInstance == null) {
+            defaultInstance = new ConverterPropertyEditorFactory();
+        }
+        return defaultInstance;
+    }
+
+    private ClassTemplateInfo getTemplateInfo() {
+        return templateInfo;
+    }
+
+    /**
+     * Return a PropertyEditor class appropriate for editing the given
+     * <code>targetClass</code>. The new class will be defined from a
+     * DisposableClassLoader.
+     * 
+     * @param targetClass
+     *            the class of object that the returned property editor class
+     *            will be editing.
+     * @return the dynamically generated PropertyEditor class.
+     */
+    @SuppressWarnings("unchecked")
+    public Class<? extends ConverterPropertyEditorBase> definePropertyEditorClassFor(
+        final Class<?> targetClass) {
+        try {
+            String className = getTemplateInfo().generateClassNameFor(
+                targetClass, false);
+            if (classLoaderCache == null) {
+                // Use a WeakHashMap so as not to prevent the class loaders from
+                // being garbage collected.
+                //noinspection CollectionWithoutInitialCapacity
+                classLoaderCache = new WeakHashMap<ClassLoader, WeakReference<DisposableClassLoader>>();
+            }
+            DisposableClassLoader loader;
+            WeakReference<DisposableClassLoader> loaderRef = classLoaderCache
+                .get(targetClass.getClassLoader());
+            if (loaderRef == null || (loader = loaderRef.get()) == null) {
+                loader = (DisposableClassLoader) AccessController.doPrivileged(
+                      new PrivilegedAction() {
+                          public Object run() {
+                            return new DisposableClassLoader(targetClass.getClassLoader());    
+                          }
+                      });
+                if (loader == null) {
+                    return null;
+                }
+                classLoaderCache.put(targetClass.getClassLoader(),
+                    new WeakReference(loader));
+            }
+            return (Class<? extends ConverterPropertyEditorBase>) loader
+                .loadClass(className);
+        } catch (ClassNotFoundException e) {
+        	if (LOGGER.isLoggable(Level.WARNING)) {
+	            LOGGER.log(Level.WARNING,
+	                "definePropertyEditorClassFor: ClassNotFoundException: "
+	                    + e.getMessage(), e);
+        	}
+        }
+        return null;
+    }
+
+    /**
+     * @param c
+     *            the class to find the name of.
+     * @return the binary name of the class as used by the VM ('/' instead of
+     *         '.' as a package name separator).
+     */
+    private static String getVMClassName(Class<?> c) {
+        return c.getName().replace('.', '/');
+    }
+
+    /**
+     * Create a UTF8Info constant pool structure for the given text.
+     * 
+     * @param text
+     *            the text to create the UTF8 constant from.
+     * @return the bytes for the UTF8Info constant pool entry, including the
+     *         tag, length, and utf8 content.
+     */
+    private static byte[] getUtf8InfoBytes(String text) {
+        byte[] utf8;
+        try {
+            utf8 = text.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            // The DM_DEFAULT_ENCODING warning is acceptable here
+            // because we explicitly *want* to use the Java runtime's
+            // default encoding.
+            utf8 = text.getBytes();
+        }
+        byte[] info = new byte[utf8.length + 3];
+        info[0] = 1;
+        info[1] = (byte) ((utf8.length >> 8) & 0xff);
+        info[2] = (byte) (utf8.length & 0xff);
+        System.arraycopy(utf8, 0, info, 3, utf8.length);
+        return info;
+    }
+}
diff --git a/com/sun/faces/application/ConverterPropertyEditorFor_XXXX.java b/com/sun/faces/application/ConverterPropertyEditorFor_XXXX.java
new file mode 100644
index 0000000..2160769
--- /dev/null
+++ b/com/sun/faces/application/ConverterPropertyEditorFor_XXXX.java
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.util.Date;
+
+/**
+ * Default template class for the dynamic generation of target-class specific
+ * PropertyEditor implementations.
+ */
+public class ConverterPropertyEditorFor_XXXX extends
+    ConverterPropertyEditorBase {
+    @Override
+    protected Class<?> getTargetClass() {
+        // Doesn't really matter what this is, since it get's replaced when the
+        // concrete PropertyEditor class is generated (it can be any valid class
+        // reference that is not otherwise refered to in this class -- so don't
+        // make it ConverterPropertyEditorBase or
+        // ConverterPropertyEditorFor_XXXX).
+        return Date.class;
+    }
+}
diff --git a/com/sun/faces/application/InjectionApplicationFactory.java b/com/sun/faces/application/InjectionApplicationFactory.java
new file mode 100644
index 0000000..991cdaf
--- /dev/null
+++ b/com/sun/faces/application/InjectionApplicationFactory.java
@@ -0,0 +1,172 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.lang.reflect.Field;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.text.MessageFormat;
+
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.Application;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.util.Map;
+import javax.faces.FacesWrapper;
+
+/**
+ * This {@link javax.faces.application.ApplicationFactory} is responsible for injecting the
+ * default {@link Application} instance into the top-level {@link Application}
+ * as configured by the runtime.  Doing this allows us to preserve backwards
+ * compatibility as the API evolves without having the API rely on implementation
+ * specific details.
+ */
+public class InjectionApplicationFactory extends ApplicationFactory implements FacesWrapper<ApplicationFactory> {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    private ApplicationFactory delegate;
+    private Application defaultApplication;
+    private Field defaultApplicationField;
+    private volatile Application application;
+
+
+    // ------------------------------------------------------------ Constructors
+
+    public InjectionApplicationFactory() {
+    }
+
+    public InjectionApplicationFactory(ApplicationFactory delegate) {
+
+        Util.notNull("applicationFactory", delegate);
+        this.delegate = delegate;
+
+    }
+
+
+    // ----------------------------------------- Methods from ApplicationFactory
+
+
+    public Application getApplication() {
+
+        if (application == null) {
+            application = delegate.getApplication();
+            if (application == null) {
+                // No i18n here
+                String message = MessageFormat
+                      .format("Delegate ApplicationContextFactory, {0}, returned null when calling getApplication().",
+                              delegate.getClass().getName());
+                throw new IllegalStateException(message);
+            }
+            injectDefaultApplication();
+        }
+        return application;
+
+    }
+
+    
+    public synchronized void setApplication(Application application) {
+
+        this.application = application;
+        delegate.setApplication(application);
+        injectDefaultApplication();
+        
+    }
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    @Override
+    public ApplicationFactory getWrapped() {
+
+        return delegate;
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void injectDefaultApplication() {
+
+
+        if (defaultApplication == null) {
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            defaultApplication = InjectionApplicationFactory.
+                    removeApplicationInstance(ctx.getExternalContext().getApplicationMap());
+        }
+        if (defaultApplication != null) {
+            try {
+                if (defaultApplicationField == null) {
+                    defaultApplicationField =
+                          Application.class
+                                .getDeclaredField("defaultApplication");
+                    defaultApplicationField.setAccessible(true);
+                }
+                defaultApplicationField.set(application, defaultApplication);
+
+            } catch (NoSuchFieldException nsfe) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE, "Unable to find private field named 'defaultApplication' in javax.faces.application.Application.");
+                }
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, e.toString(), e);
+                }
+            }
+        }
+    }
+
+    // ------------------------------------------------- Package private Methods
+
+    static void setApplicationInstance(Application app) {
+        Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+        appMap.put(InjectionApplicationFactory.class.getName(), app);
+    }
+
+    static Application removeApplicationInstance(Map<String, Object> appMap) {
+        return (Application) appMap.remove(InjectionApplicationFactory.class.getName());
+    }
+
+}
diff --git a/com/sun/faces/application/JavaFlowLoaderHelper.java b/com/sun/faces/application/JavaFlowLoaderHelper.java
new file mode 100644
index 0000000..bee0435
--- /dev/null
+++ b/com/sun/faces/application/JavaFlowLoaderHelper.java
@@ -0,0 +1,119 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.flow.FlowDiscoveryCDIExtension;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Producer;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.Flow;
+import javax.faces.flow.FlowHandler;
+import javax.faces.flow.builder.FlowDefinition;
+
+class JavaFlowLoaderHelper {
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    
+    synchronized void loadFlows(FacesContext context, FlowHandler flowHandler) throws IOException {
+        BeanManager beanManager = (BeanManager) 
+                Util.getCDIBeanManager(context.getExternalContext().getApplicationMap());
+        Bean<?> extensionImpl = beanManager.resolve(beanManager.getBeans(FlowDiscoveryCDIExtension.class));
+        if (null == extensionImpl) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "Unable to obtain {0} from CDI implementation.  Flows described with {1} are unavailable.", 
+                        new String [] {
+                            FlowDiscoveryCDIExtension.class.getName(),
+                            FlowDefinition.class.getName()
+                        });
+            }
+            return;
+        }
+        javax.enterprise.context.spi.CreationalContext<?> creationalContext = beanManager.createCreationalContext(extensionImpl);
+        FlowDiscoveryCDIExtension myExtension = 
+                (FlowDiscoveryCDIExtension) beanManager.getReference(extensionImpl, 
+                FlowDiscoveryCDIExtension.class, creationalContext);
+        
+        List<Producer<Flow>> flowProducers = myExtension.getFlowProducers();
+        WebConfiguration config = WebConfiguration.getInstance();
+        if (!flowProducers.isEmpty()) {
+            enableClientWindowModeIfNecessary(context);
+        }
+        
+        for (Producer<Flow> cur : flowProducers) {
+            Flow toAdd = cur.produce(beanManager.<Flow>createCreationalContext(null));
+            if (null == toAdd) {
+                LOGGER.log(Level.SEVERE, "Flow producer method {0}() returned null.  Ignoring.", cur.toString());
+            } else {
+                flowHandler.addFlow(context, toAdd);
+                config.setHasFlows(true);
+            }
+        }
+        
+    }
+    
+    private void enableClientWindowModeIfNecessary(FacesContext context) {
+        
+        WebConfiguration config = WebConfiguration.getInstance(context.getExternalContext());
+        
+        String optionValue = config.getOptionValue(WebConfiguration.WebContextInitParameter.ClientWindowMode);
+        boolean clientWindowNeedsEnabling = false;
+        if ("none".equals(optionValue)) {
+            clientWindowNeedsEnabling = true;
+            String featureName = 
+                    WebConfiguration.WebContextInitParameter.ClientWindowMode.getQualifiedName();
+            LOGGER.log(Level.WARNING, 
+                    "{0} was set to none, but Faces Flows requires {0} is enabled.  Setting to ''url''.", new Object[]{featureName});
+        } else if (null == optionValue) {
+            clientWindowNeedsEnabling = true;
+        }
+        if (clientWindowNeedsEnabling) {
+            config.setOptionValue(WebConfiguration.WebContextInitParameter.ClientWindowMode, "url");
+        }
+    }
+}
diff --git a/com/sun/faces/application/MethodBindingMethodExpressionAdapter.java b/com/sun/faces/application/MethodBindingMethodExpressionAdapter.java
new file mode 100644
index 0000000..64bc158
--- /dev/null
+++ b/com/sun/faces/application/MethodBindingMethodExpressionAdapter.java
@@ -0,0 +1,313 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.io.Serializable;
+
+import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.MethodBinding;
+
+import javax.el.MethodExpression;
+import javax.el.MethodInfo;
+import javax.el.ELException;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+
+import java.util.Arrays;
+import java.lang.reflect.Method;
+
+/**
+ * <p>Wrap a MethodExpression instance and expose it as a MethodBinding</p>
+ *
+ */
+public class MethodBindingMethodExpressionAdapter extends MethodBinding implements StateHolder, 
+    Serializable {
+
+    private static final long serialVersionUID = 6351778415298720238L;
+
+    private MethodExpression methodExpression= null;
+    private boolean tranzient;
+
+    public MethodBindingMethodExpressionAdapter() {} // for StateHolder
+    
+    public MethodBindingMethodExpressionAdapter(MethodExpression methodExpression) {
+        this.methodExpression = methodExpression;    
+    }
+
+    public Object invoke(FacesContext context, Object params[])
+        throws javax.faces.el.EvaluationException, javax.faces.el.MethodNotFoundException {
+	assert(null != methodExpression);
+        if ( context == null ) {
+            throw new NullPointerException("FacesConext -> null");
+        }
+        
+	Object result = null;
+	try {
+	    result = methodExpression.invoke(context.getELContext(),
+					     params);
+	}
+	catch (javax.el.MethodNotFoundException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	catch (javax.el.PropertyNotFoundException e) {
+	    throw new EvaluationException(e);
+	}
+	catch (ELException e) {
+            Throwable cause = e.getCause();
+            if (cause == null) {
+                cause = e;
+            }
+            throw new EvaluationException(cause);
+	} catch (NullPointerException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	return result;
+    }
+
+    public Class getType(FacesContext context) throws javax.faces.el.MethodNotFoundException {
+	assert(null != methodExpression);
+	if (context == null) {
+	        throw new NullPointerException("FacesConext -> null");
+    }
+	Class result = null;
+        if ( context == null ) {
+            throw new NullPointerException();
+        }
+        
+	try {
+	    MethodInfo mi = 
+		methodExpression.getMethodInfo(context.getELContext());
+	    result = mi.getReturnType();
+	}
+	catch (javax.el.PropertyNotFoundException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	catch (javax.el.MethodNotFoundException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	catch (ELException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	return result;
+    }
+    
+   
+    public String getExpressionString() {
+	assert(null != methodExpression);
+        return methodExpression.getExpressionString();
+    }
+
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;       
+        }
+        if (other instanceof MethodBindingMethodExpressionAdapter) {
+            return methodExpression.equals(((MethodBindingMethodExpressionAdapter) other).getWrapped());                        
+        } else if (other instanceof MethodBinding) {
+            MethodBinding binding = (MethodBinding) other;
+            
+            // We'll need to do a little leg work to determine
+            // if the MethodBinding is equivalent to the 
+            // wrapped MethodExpression
+            String expr = binding.getExpressionString();
+            int idx = expr.indexOf('.');
+            String target = expr.substring(0, idx).substring(2);
+            String t = expr.substring(idx + 1);
+            String method = t.substring(0, (t.length() - 1));
+            
+            FacesContext context = FacesContext.getCurrentInstance();
+            ELContext elContext = context.getELContext();
+            MethodInfo controlInfo = methodExpression.getMethodInfo(elContext);
+            
+            // ensure the method names are the same
+            if (!controlInfo.getName().equals(method)) {
+                return false;
+            }
+            
+            // Using the target, create an expression and evaluate
+            // it.           
+            ExpressionFactory factory = context.getApplication().getExpressionFactory();
+            ValueExpression ve = factory.createValueExpression(elContext,
+                                                               "#{" + target + '}',
+                                                               Object.class);
+            if (ve == null) {
+                return false;                                                               
+            }
+            
+            Object result = ve.getValue(elContext);
+            
+            if (result == null) {
+                return false;
+            }
+            
+            // Get all of the methods with the matching name and try
+            // to find a match based on controlInfo's return and parameter
+            // types
+            Class type = binding.getType(context);
+            Method[] methods = result.getClass().getMethods();
+            for (Method meth : methods) {
+                if (meth.getName().equals(method)
+                     && type.equals(controlInfo.getReturnType())
+                     && Arrays.equals(meth.getParameterTypes(), 
+                                      controlInfo.getParamTypes())) {
+                    return true;                      
+                }
+            }
+        }
+        
+        return false;
+        
+    }
+
+    public int hashCode() {
+	assert(null != methodExpression);
+
+	return methodExpression.hashCode();
+    }
+
+
+    public boolean isTransient() {
+        return this.tranzient;
+    }
+    
+    public void setTransient(boolean tranzient) {
+        this.tranzient = tranzient;
+    }
+    
+    public Object saveState(FacesContext context){
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (methodExpression instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped methodExpression
+		stateStruct[0] = ((StateHolder)methodExpression).saveState(context);
+		// save the class name of the methodExpression impl
+		stateStruct[1] = methodExpression.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = methodExpression;
+	    }
+	}
+
+	return result;
+	
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof MethodExpression)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    MethodExpression result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (MethodExpression) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		methodExpression = result;
+	    }
+	}
+	else {
+	    methodExpression = (MethodExpression) state;
+	}
+    }
+    
+    public MethodExpression getWrapped() {
+        return methodExpression;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, true, loader);
+    }
+ 
+
+
+}
diff --git a/com/sun/faces/application/MethodExpressionMethodBindingAdapter.java b/com/sun/faces/application/MethodExpressionMethodBindingAdapter.java
new file mode 100644
index 0000000..ac8c3aa
--- /dev/null
+++ b/com/sun/faces/application/MethodExpressionMethodBindingAdapter.java
@@ -0,0 +1,327 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import javax.el.MethodExpression;
+import javax.el.ELException;
+import javax.el.ELContext;
+import javax.el.MethodInfo;
+import javax.faces.el.MethodBinding;
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+
+import java.util.Arrays;
+import java.lang.reflect.Method;
+import java.io.Serializable;
+
+/**
+ * <p>Wrap a MethodBinding instance and expose it as a
+ * MethodExpression.</p>
+ */
+
+public class MethodExpressionMethodBindingAdapter extends MethodExpression implements Serializable, StateHolder {
+
+    private static final long serialVersionUID = 5639227653537610567L;
+
+    public MethodExpressionMethodBindingAdapter() {} // for StateHolder
+
+    private MethodBinding binding = null;
+
+    public MethodExpressionMethodBindingAdapter(MethodBinding binding) {
+	assert(null != binding);
+	this.binding = binding;
+    }
+
+    //
+    // Methods from MethodExpression
+    //
+
+    private transient MethodInfo info = null;
+
+    public MethodInfo getMethodInfo(ELContext context) throws ELException {
+	assert(null != binding);
+	
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+
+	if (null == info) {
+	    FacesContext facesContext = (FacesContext) 
+		context.getContext(FacesContext.class);
+	    if (null != facesContext) {
+		try {
+		    //PENDING - we should find a way to provide more information
+		    info = new MethodInfo(null, binding.getType(facesContext), null);
+		}
+		catch (Exception e) {
+		    throw new ELException(e);
+		}
+	    }
+	}
+		
+	return info;
+    }
+    
+    public Object invoke(ELContext context, Object[] params) throws ELException {
+	assert(null != binding);
+	
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+
+	Object result = null;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	if (null != facesContext) {
+	    try {
+		result = binding.invoke(facesContext, params);
+	    }
+	    catch (Exception e) {
+		throw new ELException(e);
+	    }
+	}
+	return result;
+    }
+
+    public String getExpressionString() {
+	assert(null != binding);
+	return binding.getExpressionString();
+	
+    }
+
+    public boolean isLiteralText() {
+        assert (binding != null);
+        String expr = binding.getExpressionString();
+        return (!(expr.startsWith("#{")
+            && expr.endsWith("}")));    
+    }
+
+    public boolean equals(Object other) {              
+        
+        if (other == this) {
+            return true;
+        }
+        
+        if (other instanceof MethodExpressionMethodBindingAdapter) {
+            MethodBinding ob = ((MethodExpressionMethodBindingAdapter) other).getWrapped();
+            return (binding.equals(ob));
+        } else if (other instanceof MethodExpression) {
+            MethodExpression expression = (MethodExpression) other;
+            
+            // We'll need to do a little leg work to determine
+            // if the MethodBinding is equivalent to the 
+            // wrapped MethodExpression
+            String expr = binding.getExpressionString();
+            int idx = expr.indexOf('.');
+            String target = expr.substring(0, idx).substring(2);
+            String t = expr.substring(idx + 1);
+            String method = t.substring(0, (t.length() - 1));
+            
+            FacesContext context = FacesContext.getCurrentInstance();
+            ELContext elContext = context.getELContext();
+            MethodInfo controlInfo = expression.getMethodInfo(elContext);
+            
+            // ensure the method names are the same
+            if (!controlInfo.getName().equals(method)) {
+                return false;
+            }
+            
+            // Using the target, create an expression and evaluate
+            // it.           
+            ExpressionFactory factory = context.getApplication().getExpressionFactory();
+            ValueExpression ve = factory.createValueExpression(elContext,
+                                                               "#{" + target + '}',
+                                                               Object.class);
+            if (ve == null) {
+                return false;
+            }                
+                                              
+            Object result = ve.getValue(elContext);
+            
+            if (result == null) {
+                return false;
+            }
+            
+            
+            // Get all of the methods with the matching name and try
+            // to find a match based on controlInfo's return and parameter
+            // types
+            Method[] methods = result.getClass().getMethods();
+            for (Method meth : methods) {
+                if (meth.getName().equals(method)
+                     && meth.getReturnType().equals(controlInfo.getReturnType())
+                     && Arrays.equals(meth.getParameterTypes(), 
+                                      controlInfo.getParamTypes())) {
+                    return true;                      
+                }
+            }
+        }
+        return false;
+        
+    }
+
+    public int hashCode() {
+	assert(null != binding);
+
+	return binding.hashCode();
+    }
+    
+    public String getDelimiterSyntax() {
+       // PENDING (visvan) Implementation
+        return "";
+    }
+    
+    // 
+    // Methods from StateHolder
+    //
+
+    
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (binding instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped binding
+		stateStruct[0] = ((StateHolder)binding).saveState(context);
+		// save the class name of the binding impl
+		stateStruct[1] = binding.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = binding;
+	    }
+	}
+
+	return result;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof MethodBinding)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    MethodBinding result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (MethodBinding) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		binding = result;
+	    }
+	}
+	else {
+	    binding = (MethodBinding) state;
+	}
+    }
+
+    private boolean tranzient = false;
+
+    public boolean isTransient() {
+	return tranzient;
+    }
+
+    public void setTransient(boolean newTransientMethod) {
+	tranzient = newTransientMethod;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+         return Class.forName(name, true, loader);
+    }
+ 
+
+    // 
+    // methods used by classes aware of this class's wrapper nature
+    //
+
+    public MethodBinding getWrapped() {
+	return binding;
+    }
+
+}
diff --git a/com/sun/faces/application/NamedEventManager.java b/com/sun/faces/application/NamedEventManager.java
new file mode 100644
index 0000000..44244a4
--- /dev/null
+++ b/com/sun/faces/application/NamedEventManager.java
@@ -0,0 +1,116 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.util.Util;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.faces.FacesException;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.event.PostValidateEvent;
+import javax.faces.event.PreValidateEvent;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.PreRenderComponentEvent;
+import javax.faces.event.PreRenderViewEvent;
+import javax.faces.event.SystemEvent;
+
+/**
+ * Note: New, relevant spec'd ComponentSystemEvents must be added to the constructor
+ */
+public class NamedEventManager {
+
+    private Map<String, Class<? extends SystemEvent>> namedEvents =
+            new ConcurrentHashMap<String, Class<? extends SystemEvent>>();
+    private Map<String, Set<Class<? extends SystemEvent>>> duplicateNames =
+             new ConcurrentHashMap<String, Set<Class<? extends SystemEvent>>>();
+
+    public NamedEventManager() {
+        namedEvents.put("javax.faces.event.PreRenderComponent", PreRenderComponentEvent.class);
+        namedEvents.put("javax.faces.event.PreRenderView", PreRenderViewEvent.class);
+        namedEvents.put("javax.faces.event.PostAddToView", PostAddToViewEvent.class);
+        namedEvents.put("javax.faces.event.PreValidate", PreValidateEvent.class);
+        namedEvents.put("javax.faces.event.PostValidate", PostValidateEvent.class);
+        namedEvents.put("preRenderComponent", PreRenderComponentEvent.class);
+        namedEvents.put("preRenderView", PreRenderViewEvent.class);
+        namedEvents.put("postAddToView", PostAddToViewEvent.class);
+        namedEvents.put("preValidate", PreValidateEvent.class);
+        namedEvents.put("postValidate", PostValidateEvent.class);
+    }
+
+    public void addNamedEvent(String name, Class<? extends SystemEvent> event) {
+        namedEvents.put(name, event);
+    }
+
+    public Class<? extends SystemEvent> getNamedEvent(String name) {
+        Class<? extends SystemEvent> namedEvent = namedEvents.get(name);
+        if (namedEvent == null) {
+            try {
+                namedEvent = Util.loadClass(name, this);
+            } catch (ClassNotFoundException ex) {
+                throw new FacesException ("An unknown event type was specified:  " + name, ex);
+            }
+        }
+        if (!ComponentSystemEvent.class.isAssignableFrom(namedEvent)) {
+                throw new ClassCastException();
+        }
+
+        return namedEvent;
+    }
+
+    public void addDuplicateName(String name, Class<? extends SystemEvent> event) {
+        Class<? extends SystemEvent> registeredEvent = namedEvents.remove(name);
+        Set<Class<? extends SystemEvent>> events = duplicateNames.get(name);
+        if (events == null) {
+            events = new HashSet<Class<? extends SystemEvent>>();
+            duplicateNames.put(name, events);
+        }
+        events.add(event);
+        if (registeredEvent != null) {
+            events.add(registeredEvent);
+        }
+    }
+
+    public boolean isDuplicateNamedEvent(String name) {
+        return (namedEvents.get(name) != null) || (duplicateNames.get(name) != null);
+    }
+}
diff --git a/com/sun/faces/application/NavigationHandlerImpl.java b/com/sun/faces/application/NavigationHandlerImpl.java
new file mode 100644
index 0000000..3b430b0
--- /dev/null
+++ b/com/sun/faces/application/NavigationHandlerImpl.java
@@ -0,0 +1,1554 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.InitFacesContext;
+import com.sun.faces.flow.FlowHandlerImpl;
+import com.sun.faces.flow.FlowImpl;
+import com.sun.faces.flow.builder.MutableNavigationCase;
+import javax.faces.FacesException;
+import javax.faces.application.NavigationCase;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialViewContext;
+import java.util.*;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.application.ConfigurableNavigationHandler;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIViewAction;
+import javax.faces.context.Flash;
+import javax.faces.flow.FlowCallNode;
+import javax.faces.flow.Flow;
+import javax.faces.flow.FlowHandler;
+import javax.faces.flow.FlowNode;
+import javax.faces.flow.MethodCallNode;
+import javax.faces.flow.Parameter;
+import javax.faces.flow.ReturnNode;
+import javax.faces.flow.SwitchCase;
+import javax.faces.flow.SwitchNode;
+import javax.faces.flow.ViewNode;
+
+/**
+ * <p><strong>NavigationHandlerImpl</strong> is the class that implements
+ * default navigation handling. Refer to section 7.4.2 of the specification for
+ * more details.
+ * PENDING: Make independent of ApplicationAssociate. 
+ */
+
+public class NavigationHandlerImpl extends ConfigurableNavigationHandler {
+
+    // Log instance for this class
+    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
+
+    /**
+     * <code>Map</code> containing configured navigation cases.
+     */
+    private volatile Map<String, NavigationInfo> navigationMaps;
+
+
+    /**
+     * Flag indicated the current mode.
+     */
+    private boolean development;
+    private static final Pattern REDIRECT_EQUALS_TRUE = Pattern.compile("(.*)(faces-redirect=true)(.*)");
+    private static final Pattern INCLUDE_VIEW_PARAMS_EQUALS_TRUE = Pattern.compile("(.*)(includeViewParams=true)(.*)");
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * This constructor uses the current <code>ApplicationAssociate</code>
+     * instance to obtain the navigation mappings used to make
+     * navigational decisions.
+     */
+    public NavigationHandlerImpl() {
+
+        super();
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE, "Created NavigationHandler instance ");
+        }
+        ApplicationAssociate associate = ApplicationAssociate.getInstance(
+              FacesContext.getCurrentInstance().getExternalContext());
+        if (associate != null) {
+            development = associate.isDevModeEnabled();
+        }
+
+    }
+
+
+    // ------------------------------ Methods from ConfigurableNavigationHandler
+
+
+    /**
+     * @see javax.faces.application.ConfigurableNavigationHandler#getNavigationCase(javax.faces.context.FacesContext, String, String)
+     */
+    @Override
+    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
+
+        return getNavigationCase(context, fromAction, outcome, "");
+        
+    }
+
+    @Override
+    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome, String toFlowDocumentId) {
+        Util.notNull("context", context);
+        Util.notNull("toFlowDocumentId", toFlowDocumentId);
+        NavigationCase result = null;
+        CaseStruct caseStruct = getViewId(context, fromAction, outcome, toFlowDocumentId);
+        if (null != caseStruct) {
+            result = caseStruct.navCase;
+        }
+        
+        return result;
+        
+    }
+    
+    
+
+
+    /**
+     * @see javax.faces.application.ConfigurableNavigationHandler#getNavigationCases()
+     */
+    @Override
+    public Map<String, Set<NavigationCase>> getNavigationCases() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        Map<String, Set<NavigationCase>> result = getNavigationMap(context);
+
+        return result;
+
+    }
+
+    @Override
+    public void inspectFlow(FacesContext context, Flow flow) {
+        initializeNavigationFromFlow(context, flow);
+    }
+
+    // ------------------------------------------ Methods from NavigationHandler
+    @Override
+    public void handleNavigation(FacesContext context,
+                                 String fromAction,
+                                 String outcome) {
+        this.handleNavigation(context, fromAction, outcome, "");
+    }
+
+    @Override
+    public void handleNavigation(FacesContext context, String fromAction, String outcome, String toFlowDocumentId) {
+        Util.notNull("context", context);
+
+        CaseStruct caseStruct = getViewId(context, fromAction, outcome, toFlowDocumentId);
+        if (caseStruct != null) {
+            ExternalContext extContext = context.getExternalContext();
+            ViewHandler viewHandler = Util.getViewHandler(context);
+            assert (null != viewHandler);
+            Flash flash = extContext.getFlash();
+            boolean isUIViewActionBroadcastAndViewdsDiffer = false;
+            if (UIViewAction.isProcessingBroadcast(context)) {
+                flash.setKeepMessages(true);
+                String viewIdBefore = context.getViewRoot().getViewId();
+                viewIdBefore = (null == viewIdBefore) ? "" : viewIdBefore;
+                String viewIdAfter = caseStruct.navCase.getToViewId(context);
+                viewIdAfter = (null == viewIdAfter) ? "" : viewIdAfter;
+                isUIViewActionBroadcastAndViewdsDiffer = !viewIdBefore.equals(viewIdAfter);
+            } 
+            if (caseStruct.navCase.isRedirect() || isUIViewActionBroadcastAndViewdsDiffer) {
+                
+                // perform a 302 redirect.
+                String redirectUrl =
+                      viewHandler.getRedirectURL(context,
+                                                 caseStruct.viewId,
+                                                 SharedUtils.evaluateExpressions(context, caseStruct.navCase.getParameters()),
+                                                 caseStruct.navCase.isIncludeViewParams());
+                try {
+                    if (logger.isLoggable(Level.FINE)) {
+                        logger.log(Level.FINE, "Redirecting to path {0} for outcome {1}and viewId {2}", new Object[]{redirectUrl, outcome, caseStruct.viewId});
+                    }
+                    // encode the redirect to ensure session state
+                    // is maintained
+                    updateRenderTargets(context, caseStruct.viewId);
+                    flash.setRedirect(true);
+                    extContext.redirect(redirectUrl);
+                } catch (java.io.IOException ioe) {
+                    if (logger.isLoggable(Level.FINE)) {
+                        logger.log(Level.FINE,"jsf.redirect_failed_error",
+                                   redirectUrl);
+                    }
+                    throw new FacesException(ioe.getMessage(), ioe);
+                }
+                context.responseComplete();
+               if (logger.isLoggable(Level.FINE)) {
+                   logger.log(Level.FINE, "Response complete for {0}", caseStruct.viewId);
+               }
+            } else {
+                UIViewRoot newRoot = viewHandler.createView(context,
+                                                            caseStruct.viewId);
+                updateRenderTargets(context, caseStruct.viewId);
+                context.setViewRoot(newRoot);
+                FlowHandler flowHandler = context.getApplication().getFlowHandler();
+                if (null != flowHandler && !isDidTransition(context)) {
+                    flowHandler.transition(context, 
+                            caseStruct.currentFlow, caseStruct.newFlow, 
+                            caseStruct.facesFlowCallNode, caseStruct.viewId);
+                    setDidTransition(context, false);
+                }
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE, "Set new view in FacesContext for {0}", caseStruct.viewId);
+                }
+            }
+            clearViewMapIfNecessary(context, caseStruct.viewId);
+        } 
+    }
+    
+    // --------------------------------------------------------- Private Methods
+    private static final String ROOT_NAVIGATION_MAP_ID = NavigationHandlerImpl.class.getName() + ".NAVIGATION_MAP";
+    
+    private Map<String, Set<NavigationCase>> getRootNavigationMap(FacesContext context) {
+        Map<String, Set<NavigationCase>> result = null;
+        NavigationInfo info = null;
+        if (null == navigationMaps) {
+            createNavigationMaps();
+            result = navigationMaps.get(ROOT_NAVIGATION_MAP_ID).ruleSet;
+        } else {
+            info = navigationMaps.get(ROOT_NAVIGATION_MAP_ID);
+            if (null == info.ruleSet) {
+                result = Collections.emptyMap();
+            } else {
+                result = info.ruleSet;
+            }
+            
+        }
+        return result;
+    }
+    
+    private Map<String, Set<NavigationCase>> getNavigationMap(FacesContext context) {
+        Map<String, Set<NavigationCase>> result = null;
+        NavigationInfo info = null;
+        if (null == navigationMaps) {
+            createNavigationMaps();
+            result = navigationMaps.get(ROOT_NAVIGATION_MAP_ID).ruleSet;
+        } else {
+            FlowHandler fh = context.getApplication().getFlowHandler();
+            if (null != fh) {
+                Flow currentFlow = fh.getCurrentFlow(context);
+                if (null != currentFlow) {
+                    info = navigationMaps.get(currentFlow.getDefiningDocumentId() + currentFlow.getId());
+                    // We are in a flow, but there are no navigation rules for 
+                    // this flow.
+                    if (null == info) {
+                        return Collections.emptyMap();
+                    }
+                }
+            }
+            if (null == info) {
+                info = navigationMaps.get(ROOT_NAVIGATION_MAP_ID);
+            }
+            if (null == info.ruleSet) {
+                result = Collections.emptyMap();
+            } else {
+                result = info.ruleSet;
+            }
+        }
+        
+        return result;
+    }
+    
+    private void createNavigationMaps() {
+        if (null == navigationMaps) {
+            Map<String, NavigationInfo> maps = new ConcurrentHashMap<String, NavigationInfo>();
+            NavigationMap result = new NavigationMap();
+            NavigationInfo info = new NavigationInfo();
+            info.ruleSet = result;
+            maps.put(ROOT_NAVIGATION_MAP_ID, info);
+            navigationMaps = maps;
+        }
+    }
+    
+    private Map<String, Set<NavigationCase>> getRootNavigationMap() {
+        createNavigationMaps();
+        return navigationMaps.get(ROOT_NAVIGATION_MAP_ID).ruleSet;
+    }
+    
+    private Set<String> getWildCardMatchList(FacesContext context) {
+        Set<String> result = Collections.emptySet();
+        NavigationInfo info = null;
+        FlowHandler fh = context.getApplication().getFlowHandler();
+        if (null != fh) {
+            Flow currentFlow = fh.getCurrentFlow(context);
+            if (null != currentFlow) {
+                info = navigationMaps.get(currentFlow.getDefiningDocumentId() + currentFlow.getId());
+            }
+        }
+        if (null == info) {
+            info = navigationMaps.get(ROOT_NAVIGATION_MAP_ID);
+        }
+        if (null != info.ruleSet && null != info.ruleSet.wildcardMatchList) {
+            result = info.ruleSet.wildcardMatchList;
+        }
+        return result;
+    }
+    
+    private NavigationInfo getNavigationInfo(FacesContext context, String toFlowDocumentId, String flowId) {
+        NavigationInfo result = null;
+        assert(null != navigationMaps);
+        result = navigationMaps.get(toFlowDocumentId + flowId);
+        if (null == result) {
+            FlowHandler fh = context.getApplication().getFlowHandler();
+            if (null != fh) {
+                Flow currentFlow = fh.getCurrentFlow(context);
+                if (null != currentFlow) {
+                    result = navigationMaps.get(currentFlow.getDefiningDocumentId() + currentFlow.getId());
+                }
+            }
+        }
+        
+        return result;
+    }
+
+    private void initializeNavigationFromAssociate() {
+
+        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
+        if (associate != null) {
+            Map<String,Set<NavigationCase>> m = associate.getNavigationCaseListMappings();
+            Map<String, Set<NavigationCase>> rootMap = getRootNavigationMap();
+            if (m != null) {
+                rootMap.putAll(m);
+            }
+        }
+
+    }
+    
+    private void initializeNavigationFromFlow(FacesContext context, Flow toInspect) {
+        
+        if (context instanceof InitFacesContext) {
+            createNavigationMaps();
+            initializeNavigationFromFlowNonThreadSafe(toInspect);
+        } else {
+            // PENDING: When JAVASERVERFACES-2580 is done, the eager case will
+            // no longer be necessary and can be removed.
+
+            assert(null != navigationMaps);
+            initializeNavigationFromFlowThreadSafe(toInspect);
+        }
+        
+    }
+    
+    private void initializeNavigationFromFlowNonThreadSafe(Flow toInspect) {
+        String fullyQualifiedFlowId = toInspect.getDefiningDocumentId() + toInspect.getId();
+        // Is there an existing NavigationMap for this flowId
+        if (navigationMaps.containsKey(fullyQualifiedFlowId)) {
+            if (logger.isLoggable(Level.INFO)) {
+                logger.log(Level.INFO, "PENDING(edburns): merge existing map");
+            }
+            
+        } else {
+            Map<String, Set<NavigationCase>> navRules = toInspect.getNavigationCases();
+            Map<String, SwitchNode> switches = toInspect.getSwitches();
+
+            if (!navRules.isEmpty() || !switches.isEmpty()) {
+                NavigationInfo info = new NavigationInfo();
+                if (!switches.isEmpty()) {
+                    info.switches = new ConcurrentHashMap<String, SwitchNode>();
+                    for (Map.Entry<String, SwitchNode> cur : switches.entrySet()) {
+                        info.switches.put(cur.getKey(), cur.getValue());
+                    }
+                }
+                if (!navRules.isEmpty()) {
+                    info.ruleSet = new NavigationMap();
+                    info.ruleSet.putAll(navRules);
+                }
+                navigationMaps.put(fullyQualifiedFlowId, info);
+            }
+        }
+        
+    }
+    
+    private void initializeNavigationFromFlowThreadSafe(Flow toInspect) {
+        synchronized (this) {
+            initializeNavigationFromFlowNonThreadSafe(toInspect);
+        }
+    }
+    
+    /**
+     * Calls <code>clear()</code> on the ViewMap (if available) if the view
+     * ID of the UIViewRoot differs from <code>newId</code>
+     */
+    private void clearViewMapIfNecessary(FacesContext facesContext, String newId) {
+        UIViewRoot root = facesContext.getViewRoot();
+
+        if (root != null && !root.getViewId().equals(newId)) {
+            Map<String, Object> viewMap = root.getViewMap(false);
+            if (viewMap != null) {
+                viewMap.clear();
+            }
+        }
+    }
+    
+    private void updateRenderTargets(FacesContext ctx, String newId) {
+
+        if (ctx.getViewRoot() == null || !ctx.getViewRoot().getViewId().equals(newId)) {
+            PartialViewContext pctx = ctx.getPartialViewContext();
+            if (!pctx.isRenderAll()) {
+                pctx.setRenderAll(true);
+            }
+        }
+
+    }
+
+
+    /**
+     * This method uses helper methods to determine the new <code>view</code> identifier.
+     * Refer to section 7.4.2 of the specification for more details.
+     *
+     * @param ctx the @{link FacesContext} for the current request
+     * @param fromAction The action reference string
+     * @param outcome    The outcome string
+     * @return The <code>view</code> identifier.
+     */
+    private CaseStruct getViewId(FacesContext ctx,
+                                 String fromAction,
+                                 String outcome, String toFlowDocumentId) {
+
+        if (navigationMaps == null) {
+            synchronized (this) {
+                initializeNavigationFromAssociate();
+            }
+        }
+
+        UIViewRoot root = ctx.getViewRoot();
+
+        
+        String viewId = (root != null ? root.getViewId() : null);
+        
+        // if viewIdToTest is not null, use its value to find
+        // a navigation match, otherwise look for a match
+        // based soley on the fromAction and outcome
+        CaseStruct caseStruct = null;
+        Map<String, Set<NavigationCase>> navMap = getNavigationMap(ctx);
+        
+        if (viewId != null) {
+            caseStruct = findExactMatch(ctx, viewId, fromAction, outcome, toFlowDocumentId, navMap);
+
+            if (caseStruct == null) {
+                caseStruct = findWildCardMatch(ctx, viewId, fromAction, outcome, toFlowDocumentId, navMap);
+            }
+        }
+
+        if (caseStruct == null) {
+            caseStruct = findDefaultMatch(ctx, fromAction, outcome, toFlowDocumentId, navMap);
+        }
+        
+        // If the preceding steps found a match, but it was a flow call...
+        if (null != caseStruct && caseStruct.isFlowEntryFromExplicitRule) {
+            // Override the toFlowDocumentId with the value from the navigation-case, if present
+            toFlowDocumentId = (null != caseStruct.navCase.getToFlowDocumentId()) ? caseStruct.navCase.getToFlowDocumentId() : toFlowDocumentId;
+            // and try to call into the flow
+            caseStruct = findFacesFlowCallMatch(ctx, fromAction, outcome, toFlowDocumentId);
+        }
+        
+        // If we still don't have a match, see if this is a viewNode
+        if (null == caseStruct && null != fromAction && null != outcome) {
+            caseStruct = findViewNodeMatch(ctx, fromAction, outcome, toFlowDocumentId);
+        }
+
+        // If we still don't have a match, see if this is a switch
+        if (null == caseStruct && null != fromAction && null != outcome) {
+            caseStruct = findSwitchMatch(ctx, fromAction, outcome, toFlowDocumentId);
+        }
+
+        // If we still don't have a match, see if this is a method-call
+        if (null == caseStruct && null != fromAction && null != outcome) {
+            caseStruct = findMethodCallMatch(ctx, fromAction, outcome);
+        }
+        
+        // If we still don't have a match, see if this is a faces-flow-call
+        if (null == caseStruct && null != outcome) {
+            caseStruct = findFacesFlowCallMatch(ctx, fromAction, outcome, toFlowDocumentId);
+        }
+
+        // If we still don't have a match, see if this is a flow-return
+        if (null == caseStruct && null != outcome) {
+            caseStruct = findReturnMatch(ctx, fromAction, outcome);
+        }
+
+        // If the navigation rules do not have a match...
+        if (caseStruct == null && outcome != null && viewId != null) {
+            // Treat empty string equivalent to null outcome.  JSF 2.0 Rev a
+            // Changelog issue C063.
+            if (0 == outcome.length()) {
+                outcome = null;
+            } else {
+                caseStruct = findImplicitMatch(ctx, viewId, fromAction, outcome,
+                        toFlowDocumentId);
+            }
+        }
+        
+        // If we still don't have a match...
+        if (caseStruct == null && outcome != null && viewId != null) {
+
+            FlowHandler flowHandler = ctx.getApplication().getFlowHandler();
+            if (null != flowHandler) {
+
+                Flow currentFlow = null;
+                Flow newFlow = null;
+                currentFlow = flowHandler.getCurrentFlow(ctx);
+                if (null != currentFlow) {
+                    caseStruct = findRootNavigationMapAbandonedFlowMatch(ctx, viewId, fromAction, outcome, toFlowDocumentId);
+                }
+            }
+            
+        }
+        
+        // no navigation case found
+        if (caseStruct == null && outcome != null && development) {
+            String key;
+            Object[] params;
+            if (fromAction == null) {
+                key = MessageUtils.NAVIGATION_NO_MATCHING_OUTCOME_ID;
+                params = new Object[] { viewId, outcome };
+            } else {
+                key = MessageUtils.NAVIGATION_NO_MATCHING_OUTCOME_ACTION_ID;
+                params = new Object[] { viewId, fromAction, outcome };
+            }
+            FacesMessage m = MessageUtils.getExceptionMessage(key, params);
+            m.setSeverity(FacesMessage.SEVERITY_WARN);
+            ctx.addMessage(null, m);
+        }
+        return caseStruct;
+    }
+
+
+    /**
+     * This method finds the List of cases for the current <code>view</code> identifier.
+     * After the cases are found, the <code>from-action</code> and <code>from-outcome</code>
+     * values are evaluated to determine the new <code>view</code> identifier.
+     * Refer to section 7.4.2 of the specification for more details.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param viewId     The current <code>view</code> identifier.
+     * @param fromAction The action reference string.
+     * @param outcome    The outcome string.
+     * @return The <code>view</code> identifier.
+     */
+    private CaseStruct findExactMatch(FacesContext ctx,
+                                      String viewId,
+                                      String fromAction,
+                                      String outcome, String toFlowDocumentId,
+                                      Map<String, Set<NavigationCase>> navMap) {
+
+        Set<NavigationCase> caseSet = navMap.get(viewId);
+
+        if (caseSet == null) {
+            return null;
+        }
+
+        // We've found an exact match for the viewIdToTest.  Now we need to evaluate
+        // from-action/outcome in the following order:
+        // 1) elements specifying both from-action and from-outcome
+        // 2) elements specifying only from-outcome
+        // 3) elements specifying only from-action
+        // 4) elements where both from-action and from-outcome are null
+        
+        CaseStruct result = determineViewFromActionOutcome(ctx, caseSet, fromAction, outcome, toFlowDocumentId);
+        if (null != result) {
+            FlowHandler flowHandler = ctx.getApplication().getFlowHandler();
+            if (null != flowHandler) {
+                result.currentFlow = flowHandler.getCurrentFlow(ctx);
+                result.newFlow = result.currentFlow;
+            }
+        }
+
+        return result;
+    }
+
+
+    /**
+     * This method traverses the wild card match List (containing <code>from-view-id</code>
+     * strings and finds the List of cases for each <code>from-view-id</code> string.
+     * Refer to section 7.4.2 of the specification for more details.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param viewId     The current <code>view</code> identifier.
+     * @param fromAction The action reference string.
+     * @param outcome    The outcome string.
+     * @return The <code>view</code> identifier.
+     */
+
+    private CaseStruct findWildCardMatch(FacesContext ctx,
+                                         String viewId,
+                                         String fromAction,
+                                         String outcome, String toFlowDocumentId,
+                                      Map<String, Set<NavigationCase>> navMap) {
+        CaseStruct result = null;
+
+        for (String fromViewId : getWildCardMatchList(ctx)) {
+            // See if the entire wildcard string (without the trailing "*" is
+            // contained in the incoming viewIdToTest.  
+            // Ex: /foobar is contained with /foobarbaz
+            // If so, then we have found our largest pattern match..
+            // If not, then continue on to the next case;
+
+            if (!viewId.startsWith(fromViewId)) {
+                continue;
+            }
+
+            // Append the trailing "*" so we can do our map lookup;
+
+            String wcFromViewId = new StringBuilder(32).append(fromViewId).append('*').toString();
+            Set<NavigationCase> ccaseSet = navMap.get(wcFromViewId);
+
+            if (ccaseSet == null) {
+                return null;
+            }
+
+            // If we've found a match, then we need to evaluate
+            // from-action/outcome in the following order:
+            // 1) elements specifying both from-action and from-outcome
+            // 2) elements specifying only from-outcome
+            // 3) elements specifying only from-action
+            // 4) elements where both from-action and from-outcome are null
+
+            result = determineViewFromActionOutcome(ctx,
+                                                    ccaseSet,
+                                                    fromAction,
+                                                    outcome, toFlowDocumentId);
+            if (result != null) {
+                break;
+            }
+        }
+        if (null != result) {
+            FlowHandler flowHandler = ctx.getApplication().getFlowHandler();
+            if (null != flowHandler) {
+                result.currentFlow = flowHandler.getCurrentFlow(ctx);
+                result.newFlow = result.currentFlow;
+            }
+        }
+        
+        return result;
+    }
+
+
+    /**
+     * This method will extract the cases for which a <code>from-view-id</code> is
+     * an asterisk "*".
+     * Refer to section 7.4.2 of the specification for more details.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param fromAction The action reference string.
+     * @param outcome    The outcome string.
+     * @return The <code>view</code> identifier.
+     */
+
+    private CaseStruct findDefaultMatch(FacesContext ctx,
+                                        String fromAction,
+                                        String outcome, String toFlowDocumentId,
+                                      Map<String, Set<NavigationCase>> navMap) {
+        
+        Set<NavigationCase> caseSet = navMap.get("*");
+
+        if (caseSet == null) {
+            return null;
+        }
+
+        // We need to evaluate from-action/outcome in the follow
+        // order:  1)elements specifying both from-action and from-outcome
+        // 2) elements specifying only from-outcome
+        // 3) elements specifying only from-action
+        // 4) elements where both from-action and from-outcome are null
+
+        CaseStruct result = determineViewFromActionOutcome(ctx, caseSet, fromAction, outcome, toFlowDocumentId);
+        
+        if (null != result) {
+            FlowHandler flowHandler = ctx.getApplication().getFlowHandler();
+            if (null != flowHandler) {
+                result.currentFlow = flowHandler.getCurrentFlow(ctx);
+                result.newFlow = result.currentFlow;
+            }
+        }
+        
+        return result;
+    }
+    
+    private CaseStruct findRootNavigationMapAbandonedFlowMatch(FacesContext ctx,
+                                         String viewId,
+                                         String fromAction,
+                                         String outcome, String toFlowDocumentId) {
+        CaseStruct caseStruct = null;
+        Map<String, Set<NavigationCase>> navMap = getRootNavigationMap(ctx);
+        
+        if (viewId != null) {
+            caseStruct = findExactMatch(ctx, viewId, fromAction, outcome, toFlowDocumentId, navMap);
+            
+            if (caseStruct == null) {
+                caseStruct = findWildCardMatch(ctx, viewId, fromAction, outcome, toFlowDocumentId, navMap);
+            }
+        }
+        
+        if (caseStruct == null) {
+            caseStruct = findDefaultMatch(ctx, fromAction, outcome, toFlowDocumentId, navMap);
+        }
+        
+        if (null != caseStruct) {
+            caseStruct.newFlow = FlowImpl.ABANDONED_FLOW;
+        }
+        
+        return caseStruct;
+    }
+    
+
+    /**
+     * <p>
+     * Create a navigation case based on content within the outcome.
+     * </p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @param viewId of the {@link UIViewRoot} for the current request
+     * @param fromAction the navigation action
+     * @param outcome the navigation outcome
+     * @return a CaseStruct representing the the navigation result based
+     *  on the provided input
+     */
+    private CaseStruct findImplicitMatch(FacesContext context,
+                                         String viewId,
+                                         String fromAction,
+                                         String outcome,
+                                         String flowDefiningDocumentId) {
+
+        // look for an implicit match.
+        String viewIdToTest = outcome;
+        String currentViewId = viewId;
+        Map<String, List<String>> parameters = null;
+        boolean isRedirect = false;
+        boolean isIncludeViewParams = false;
+        CaseStruct result = null;
+
+        int questionMark = viewIdToTest.indexOf('?');
+        String queryString;
+        if (-1 != questionMark) {
+            int viewIdLen = viewIdToTest.length();
+            if (viewIdLen <= (questionMark+1)) {
+                if (logger.isLoggable(Level.SEVERE)) {
+                    logger.log(Level.SEVERE, "jsf.navigation_invalid_query_string",
+                            viewIdToTest);
+                }
+                if (development) {
+                    String key;
+                    Object[] params;
+                    key = MessageUtils.NAVIGATION_INVALID_QUERY_STRING_ID;
+                    params = new Object[]{viewIdToTest};
+                    FacesMessage m = MessageUtils.getExceptionMessage(key, params);
+                    m.setSeverity(FacesMessage.SEVERITY_WARN);
+                    context.addMessage(null, m);
+                }
+                queryString = null;
+                viewIdToTest = viewIdToTest.substring(0, questionMark);
+            } else {
+                queryString = viewIdToTest.substring(questionMark + 1);
+                viewIdToTest = viewIdToTest.substring(0, questionMark);
+
+                Matcher m = REDIRECT_EQUALS_TRUE.matcher(queryString);
+                if (m.find()) {
+                    isRedirect = true;
+                    queryString = queryString.replace(m.group(2), "");
+                }
+                m = INCLUDE_VIEW_PARAMS_EQUALS_TRUE.matcher(queryString);
+                if (m.find()) {
+                    isIncludeViewParams = true;
+                    queryString = queryString.replace(m.group(2), "");
+                }
+            }
+
+            if (queryString != null && queryString.length() > 0) {
+                Map<String, Object> appMap = context.getExternalContext().getApplicationMap();
+
+                String[] queryElements = Util.split(appMap, queryString, "&|&");
+                for (int i = 0, len = queryElements.length; i < len; i ++) {
+                    String[] elements = Util.split(appMap, queryElements[i], "=");
+                    if (elements.length == 2) {
+                        if (parameters == null) {
+                            parameters = new LinkedHashMap<String,List<String>>(len / 2, 1.0f);
+                            List<String> values = new ArrayList<String>(2);
+                            values.add(elements[1]);
+                            parameters.put(elements[0], values);
+                        } else {
+                            List<String> values = parameters.get(elements[0]);
+                            if (values == null) {
+                                values = new ArrayList<String>(2);
+                                parameters.put(elements[0], values);
+                            }
+                            values.add(elements[1]);
+                        }
+                    }
+                }
+            }
+        }
+
+        // If the viewIdToTest needs an extension, take one from the currentViewId.
+        if (viewIdToTest.lastIndexOf('.') == -1) {
+            int idx = currentViewId.lastIndexOf('.');
+            if (idx != -1) {
+                viewIdToTest = viewIdToTest + currentViewId.substring(idx);
+            }
+        }
+
+        if (!viewIdToTest.startsWith("/")) {
+            int lastSlash = currentViewId.lastIndexOf("/");
+            if (lastSlash != -1) {
+                currentViewId = currentViewId.substring(0, lastSlash + 1);
+                viewIdToTest = currentViewId + viewIdToTest;
+            } else {
+                viewIdToTest = "/" + viewIdToTest;
+            }
+        }
+
+        ViewHandler viewHandler = Util.getViewHandler(context);
+        FlowHandler flowHandler = context.getApplication().getFlowHandler();
+        Flow currentFlow = null;
+        Flow newFlow = null;
+
+        if (null != flowHandler) {
+            
+            currentFlow = flowHandler.getCurrentFlow(context);
+            newFlow = currentFlow;
+            // If we are in a flow, use the implicit rules to ensure the view 
+            // is within that flow.  This means viewIdToTest must start with
+            // the current flow id
+            if (null != currentFlow && null != viewIdToTest && 
+                !viewIdToTest.startsWith("/" + currentFlow.getId())) {
+                // ... it must be out of the current flow.  
+                // If this is a flow return...
+                if (FlowHandler.NULL_FLOW.equals(flowDefiningDocumentId)) {
+                    // treat it as such
+                    newFlow = null;
+                    viewIdToTest = null;
+                } else {
+                    // otherwise Make sure the current flow is marked as abandoned.
+                    newFlow = FlowImpl.ABANDONED_FLOW;
+                }
+
+            }            
+        }
+        if (null != viewIdToTest) {
+            viewIdToTest = viewHandler.deriveViewId(context, viewIdToTest);
+        }
+        
+        if (null == result && null != viewIdToTest) {
+            result = new CaseStruct();
+            result.viewId = viewIdToTest;
+            // If this navigation case does not involve flows, make sure
+            // to convey that fact.
+            if (null == newFlow && null == currentFlow && 
+                !FlowHandlerImpl.NULL_FLOW.equals(flowDefiningDocumentId)) {
+                flowDefiningDocumentId = null;
+            }
+            result.navCase = new NavigationCase(currentViewId,
+                                                    fromAction,
+                                                    outcome,
+                                                    null,
+                                                    viewIdToTest,
+                                                    flowDefiningDocumentId,
+                                                    parameters,
+                                                    isRedirect,
+                                                    isIncludeViewParams);
+        }
+        if (null != result) {
+            result.currentFlow = currentFlow;
+            result.newFlow = newFlow;
+        }
+        
+
+        return result;
+
+    }
+    
+    private CaseStruct findSwitchMatch(FacesContext context, String fromAction, 
+                                       String outcome, String toFlowDocumentId) {
+        CaseStruct result = null;
+        NavigationInfo info = getNavigationInfo(context, toFlowDocumentId, fromAction);
+        FlowHandler flowHandler = context.getApplication().getFlowHandler();
+        
+        if (null != flowHandler && 
+            null != info && null != info.switches && !info.switches.isEmpty()) {
+            SwitchNode switchNode = info.switches.get(outcome);
+            if (null != switchNode) {
+                List<SwitchCase> cases = switchNode.getCases();
+                for (SwitchCase cur : cases) {
+                    if (cur.getCondition(context)) {
+                        outcome = cur.getFromOutcome();
+                        Flow newFlow = flowHandler.getFlow(context, toFlowDocumentId, 
+                                fromAction);
+                        // If this outcome corresponds to an existing flow...
+                        if (null != newFlow) {
+                            result = synthesizeCaseStruct(context, newFlow, fromAction, outcome);
+                        } else {
+                            newFlow = flowHandler.getCurrentFlow(context);
+                            if (null != newFlow) {
+                                result = synthesizeCaseStruct(context, newFlow, fromAction, outcome);
+                            }
+                        }
+                        if (null != result) {
+                            break;
+                        }
+                    }
+                }
+                if (null == result) {
+                    outcome = switchNode.getDefaultOutcome(context);
+                    if (null != outcome) {
+                        Flow currentFlow = flowHandler.getCurrentFlow(context);
+                        if (null != currentFlow) {
+                            result = synthesizeCaseStruct(context, currentFlow, fromAction, outcome);
+                            if (null != result) {
+                                result.currentFlow = currentFlow;
+                                result.newFlow = currentFlow;
+                            }
+                        }
+                    }
+                }
+            }
+            
+        }
+        
+        return result;
+    }
+    
+    private CaseStruct synthesizeCaseStruct(FacesContext context, Flow flow, String fromAction, String outcome) {
+        CaseStruct result = null;
+        
+        FlowNode node = flow.getNode(outcome);
+        if (null != node) {
+            if (node instanceof ViewNode) {
+                result = new CaseStruct();
+                result.viewId = ((ViewNode)node).getVdlDocumentId();
+                result.navCase = new MutableNavigationCase(fromAction, 
+                        fromAction, outcome, null, result.viewId, 
+                        flow.getDefiningDocumentId(), null, false, false);
+            } else if (node instanceof ReturnNode) {
+                String fromOutcome = ((ReturnNode)node).getFromOutcome(context);
+                FlowHandler flowHandler = context.getApplication().getFlowHandler();
+                try {
+                    flowHandler.pushReturnMode(context);
+                    result = getViewId(context, fromAction, fromOutcome, FlowHandler.NULL_FLOW);
+                    // We are in a return node, but no result can be found from that
+                    // node.  Show the last displayed viewId from the preceding flow.
+                    if (null == result) {
+                        Flow precedingFlow = flowHandler.getCurrentFlow(context);
+                        if (null != precedingFlow) {
+                            String toViewId = flowHandler.getLastDisplayedViewId(context);
+                            if (null != toViewId) {
+                                result = new CaseStruct();
+                                result.viewId = toViewId;
+                                result.navCase = new MutableNavigationCase(context.getViewRoot().getViewId(),
+                                        fromAction,
+                                        outcome,
+                                        null,
+                                        toViewId,
+                                        FlowHandler.NULL_FLOW,                            
+                                        null,
+                                        false,
+                                        false);
+                                
+                            }
+                        }
+                    } else {
+                        result.newFlow = FlowImpl.SYNTHESIZED_RETURN_CASE_FLOW;
+                    }
+                }
+                finally {
+                    flowHandler.popReturnMode(context);
+                }
+                
+            }
+        } else {
+            // See if there is an implicit match within this flow, using outcome
+            // to derive a view id within this flow.
+            String currentViewId = outcome;
+            // If the viewIdToTest needs an extension, take one from the currentViewId.
+            String currentExtension;
+            int idx = currentViewId.lastIndexOf('.');
+            if (idx != -1) {
+                currentExtension = currentViewId.substring(idx);
+            } else {
+                // PENDING, don't hard code XHTML here, look it up from configuration
+                currentExtension = ".xhtml";
+            }
+            String viewIdToTest = "/" + flow.getId() + "/" + outcome + currentExtension;
+            ViewHandler viewHandler = Util.getViewHandler(context);
+            viewIdToTest = viewHandler.deriveViewId(context, viewIdToTest);
+            if (null != viewIdToTest) {
+                result = new CaseStruct();
+                result.viewId = viewIdToTest;
+                result.navCase = new MutableNavigationCase(fromAction, 
+                        fromAction, outcome, null, result.viewId, 
+                        null, false, false);
+            }
+            
+        }
+        return result;
+    }
+    
+    private CaseStruct findMethodCallMatch(FacesContext context, String fromAction, String outcome) {
+        CaseStruct result = null;
+        FlowHandler flowHandler = context.getApplication().getFlowHandler();
+        if (null == flowHandler) {
+            return null;
+        }
+        Flow currentFlow = flowHandler.getCurrentFlow(context);
+        if (null != currentFlow) {
+            FlowNode node = currentFlow.getNode(outcome);
+            if (node instanceof MethodCallNode) {
+                MethodCallNode methodCallNode = (MethodCallNode) node;
+                MethodExpression me = methodCallNode.getMethodExpression();
+                if (null != me) {
+                    List<Parameter> paramList= methodCallNode.getParameters();
+                    Object[] params = null;
+                    if (null != paramList) {
+                        params = new Object[paramList.size()];
+                        int i = 0;
+                        ELContext elContext = context.getELContext();
+                        for (Parameter cur : paramList) {
+                            params[i++] = cur.getValue().getValue(elContext);
+                        }
+                    }
+                    
+                    Object invokeResult = me.invoke(context.getELContext(), params);
+                    if (null == invokeResult) {
+                        ValueExpression ve = methodCallNode.getOutcome();
+                        if (null != ve) {
+                            invokeResult  = ve.getValue(context.getELContext());
+                        }
+                    }
+                    outcome = invokeResult.toString();
+                    result = synthesizeCaseStruct(context, currentFlow, fromAction, outcome);
+                    if (null != result) {
+                        // Here we need to detect the case when the
+                        // synthesizeCaseStruct() ended up hitting a <flow-return>.
+                        // In this case, we must ensure the new flow of null
+                        // is honored.
+                        result.currentFlow = currentFlow;
+                        if (result.newFlow == FlowImpl.SYNTHESIZED_RETURN_CASE_FLOW) {
+                            result.newFlow = null;
+                        } else {
+                            result.newFlow = currentFlow;
+                        }
+                    }
+                }
+            }
+        }
+        
+
+        return result;
+    }
+    
+    private CaseStruct findFacesFlowCallMatch(FacesContext context, 
+            String fromAction, String outcome, String toFlowDocumentId) {
+        CaseStruct result = null;
+
+        FlowHandler flowHandler = context.getApplication().getFlowHandler();
+        if (null == flowHandler) {
+            return null;
+        }
+        Flow currentFlow = flowHandler.getCurrentFlow(context);
+        Flow newFlow = null;
+        FlowCallNode facesFlowCallNode = null;
+        if (null != currentFlow) {
+            FlowNode node = currentFlow.getNode(outcome);
+            if (node instanceof FlowCallNode) {
+                facesFlowCallNode = (FlowCallNode) node;
+                String flowId = facesFlowCallNode.getCalledFlowId(context);
+                String flowDocumentId = facesFlowCallNode.getCalledFlowDocumentId(context);
+
+                if (null != flowId) {
+                    newFlow = flowHandler.getFlow(context, flowDocumentId, flowId);
+                    if (null != newFlow) {
+                        String startNodeId = newFlow.getStartNodeId();
+                        result = synthesizeCaseStruct(context, newFlow, fromAction, startNodeId);
+                        if (null == result) {
+                            assert(null != currentFlow);
+                            // If no CaseStruct can be synthesized, we must execute the
+                            // navigation handler algorithm to try to find the CaseStruct
+                            // for the start node.  However, in order to do that, we
+                            // must enter the new flow.  To preserve the intergity
+                            // of the state machine, we enter the flow now, and mark
+                            // that we must not enter it later.
+                            try {
+                                setDidTransition(context, true);
+                                flowHandler.transition(context, currentFlow, newFlow, null, startNodeId);
+                                result = getViewId(context, fromAction, startNodeId, toFlowDocumentId);
+                            }
+                            finally {
+                                if (null == result) {
+                                    // If we did not find a CaseStruct, preserve the 
+                                    // integrity of the state machine by transitioning 
+                                    // out of the flow.
+                                    flowHandler.transition(context, newFlow, currentFlow, null, outcome);
+                                    setDidTransition(context, false);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            // See if we are trying to enter a flow.
+            newFlow = flowHandler.getFlow(context, toFlowDocumentId, outcome);
+            if (null != newFlow) {
+                String startNodeId = newFlow.getStartNodeId();
+                result = synthesizeCaseStruct(context, newFlow, fromAction, startNodeId);
+                if (null == result) {
+                    assert(null == currentFlow);
+                    // If no CaseStruct can be synthesized, we must execute the
+                    // navigation handler algorithm to try to find the CaseStruct
+                    // for the start node.  However, in order to do that, we
+                    // must enter the new flow.  To preserve the intergity
+                    // of the state machine, we enter the flow now, and mark
+                    // that we must not enter it later.
+                    try {
+                        setDidTransition(context, true);
+                        flowHandler.transition(context, null, newFlow, null, startNodeId);
+                        result = getViewId(context, fromAction, startNodeId, toFlowDocumentId);
+                    }
+                    finally {
+                        if (null == result) {
+                            // If we did not find a CaseStruct, preserve the 
+                            // integrity of the state machine by transitioning 
+                            // out of the flow.
+                            flowHandler.transition(context, newFlow, null, null, outcome);
+                            setDidTransition(context, false);
+                        }
+                    }
+                } else if (!outcome.equals(startNodeId) && null != result.navCase) {
+                    ((MutableNavigationCase)result.navCase).setFromOutcome(outcome);
+                }
+            } 
+        }
+        if (null != result) {
+            result.currentFlow = currentFlow;
+            result.newFlow = newFlow;
+            result.facesFlowCallNode = facesFlowCallNode;
+        }
+        
+        return result;
+    }  
+    
+    private static final String DID_TRANSITION_FLAG = RIConstants.FACES_PREFIX + "NavigationHandlerDidTransition";
+    
+    private boolean isDidTransition(FacesContext context) {
+        boolean result = context.getAttributes().containsKey(DID_TRANSITION_FLAG);
+        
+        return result;
+    }
+    
+    private void setDidTransition(FacesContext context, boolean value) {
+        Map<Object,Object> contextMap = context.getAttributes();
+        if (value) {
+            contextMap.put(DID_TRANSITION_FLAG, Boolean.TRUE);
+        } else {
+            contextMap.remove(DID_TRANSITION_FLAG);
+        }
+        
+    }
+    
+    private CaseStruct findViewNodeMatch(FacesContext context, 
+            String fromAction, String outcome, String toFlowDocumentId) {
+        CaseStruct result = null;
+
+        FlowHandler flowHandler = context.getApplication().getFlowHandler();
+        if (null == flowHandler) {
+            return null;
+        }
+        Flow currentFlow = flowHandler.getCurrentFlow(context);
+        if (null != currentFlow) {
+            FlowNode node = currentFlow.getNode(outcome);
+            if (null != node) {
+                if (node instanceof ViewNode) {
+                    result = synthesizeCaseStruct(context, currentFlow, fromAction, outcome);
+                }
+            }
+        }
+        if (null != result) {
+            result.currentFlow = currentFlow;
+            result.newFlow = currentFlow;
+            result.facesFlowCallNode = null;
+        }
+        
+        return result;
+    }  
+    
+    
+    
+    private CaseStruct findReturnMatch(FacesContext context, 
+            String fromAction, String outcome) {
+        CaseStruct result = null;
+        FlowHandler flowHandler = context.getApplication().getFlowHandler();
+        if (null == flowHandler) {
+            return null;
+        }
+        Flow currentFlow = flowHandler.getCurrentFlow(context);
+        if (null != currentFlow) {
+            // If so, see if the outcome is one of this flow's 
+            // faces-flow-return nodes.
+            ReturnNode returnNode = currentFlow.getReturns().get(outcome);
+            if (null != returnNode) {
+                String fromOutcome = returnNode.getFromOutcome(context);
+                try {
+                    flowHandler.pushReturnMode(context);
+                    result = getViewId(context, fromAction, fromOutcome, FlowHandler.NULL_FLOW);
+                    // We are in a return node, but no result can be found from that
+                    // node.  Show the last displayed viewId from the preceding flow.
+                    if (null == result) {
+                        Flow precedingFlow = flowHandler.getCurrentFlow(context);
+                        if (null != precedingFlow) {
+                            String toViewId = flowHandler.getLastDisplayedViewId(context);
+                            if (null != toViewId) {
+                                result = new CaseStruct();
+                                result.viewId = toViewId;
+                                result.navCase = new NavigationCase(context.getViewRoot().getViewId(),
+                                        fromAction,
+                                        outcome,
+                                        null,
+                                        toViewId,
+                                        FlowHandler.NULL_FLOW,                            
+                                        null,
+                                        false,
+                                        false);
+                                
+                            }
+                        }
+                    }
+                }
+                finally {
+                    flowHandler.popReturnMode(context);
+                }
+            }
+        }
+        if (null != result) {
+            result.currentFlow = currentFlow;
+            result.newFlow = null;
+        }
+
+        return result;
+    }
+
+    
+    /**
+     * This method will attempt to find the <code>view</code> identifier based on action reference
+     * and outcome.  Refer to section 7.4.2 of the specification for more details.
+     * @param ctx the {@link FacesContext} for the current request
+     * @param caseSet   The list of navigation cases.
+     * @param fromAction The action reference string.
+     * @param outcome    The outcome string.
+     * @return The <code>view</code> identifier.
+     */
+    private CaseStruct determineViewFromActionOutcome(FacesContext ctx,
+                                                      Set<NavigationCase> caseSet,
+                                                      String fromAction,
+                                                      String outcome,
+                                                      String toFlowDocumentId) {
+
+        CaseStruct result = new CaseStruct();
+        boolean match = false;
+        for (NavigationCase cnc : caseSet) {
+            String cncFromAction = cnc.getFromAction();
+            String cncFromOutcome = cnc.getFromOutcome();
+            boolean cncHasCondition = cnc.hasCondition();
+            String cncToViewId = cnc.getToViewId(ctx);
+           
+            if ((cncFromAction != null) && (cncFromOutcome != null)) {
+                if ((cncFromAction.equals(fromAction)) &&
+                    (cncFromOutcome.equals(outcome))) {
+                    result.viewId = cncToViewId;
+                    result.navCase = cnc;
+                    match = true;
+                }
+            } else if ((cncFromAction == null) && (cncFromOutcome != null)) {
+                if (cncFromOutcome.equals(outcome)) {
+                    result.viewId = cncToViewId;
+                    result.navCase = cnc;
+                    match = true;
+                }
+            } else if ((cncFromAction != null) && (cncFromOutcome == null)) {
+                if (cncFromAction.equals(fromAction) && (outcome != null || cncHasCondition)) {
+                    result.viewId = cncToViewId;
+                    result.navCase = cnc;
+                    match = true;
+                }
+            } else if ((cncFromAction == null) && (cncFromOutcome == null)) {
+                if (outcome != null || cncHasCondition) {
+                    result.viewId = cncToViewId;
+                    result.navCase = cnc;
+                    match = true;
+                }
+            }
+
+            if (match) {
+                if (cncHasCondition && Boolean.FALSE.equals(cnc.getCondition(ctx))) {
+                    match = false;
+                } else {
+                    toFlowDocumentId = (null != cnc.getToFlowDocumentId()) ? cnc.getToFlowDocumentId() : toFlowDocumentId;
+                    if (null != toFlowDocumentId) {
+                        FlowHandler fh = ctx.getApplication().getFlowHandler();
+                        if (null != outcome) {
+                            result.isFlowEntryFromExplicitRule = null != fh.getFlow(ctx, toFlowDocumentId, outcome);
+                        }
+                    }
+                    return result;
+                }
+            }
+        }
+
+        return null;
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private static class CaseStruct {
+        String viewId;
+        NavigationCase navCase;
+        Flow currentFlow;
+        Flow newFlow;
+        FlowCallNode facesFlowCallNode;
+        boolean isFlowEntryFromExplicitRule = false;
+    }
+    
+    private static final class NavigationInfo {
+        private NavigationMap ruleSet;
+        private Map<String, SwitchNode> switches;
+    }
+
+
+    private static final class NavigationMap extends AbstractMap<String,Set<NavigationCase>> {
+
+        private HashMap<String,Set<NavigationCase>> navigationMap =
+              new HashMap<String,Set<NavigationCase>>();
+        private TreeSet<String> wildcardMatchList =
+              new TreeSet<String>(new Comparator<String>() {
+                  public int compare(String fromViewId1, String fromViewId2) {
+                      return -(fromViewId1.compareTo(fromViewId2));
+                  }
+              });
+
+
+        // ---------------------------------------------------- Methods from Map
+
+
+        @Override
+        public int size() {
+            return navigationMap.size();
+        }
+
+
+        @Override
+        public boolean isEmpty() {
+            return navigationMap.isEmpty();
+        }
+
+        
+        @Override
+        public Set<NavigationCase> put(String key, Set<NavigationCase> value) {
+            if (key == null) {
+                throw new IllegalArgumentException(key);
+            }
+            if (value == null) {
+                throw new IllegalArgumentException();
+            }
+            updateWildcards(key);
+            Set<NavigationCase> existing = navigationMap.get(key);
+            if (existing == null) {
+                navigationMap.put(key, value);
+                return null;
+            } else {
+                existing.addAll(value);
+                return existing;
+            }
+
+        }
+
+        @Override
+        public void putAll(Map<? extends String, ? extends Set<NavigationCase>> m) {
+            if (m == null) {
+                return;
+            }
+            for (Map.Entry<? extends String, ? extends Set<NavigationCase>> entry : m.entrySet()) {
+                String key = entry.getKey();
+                updateWildcards(key);
+                Set<NavigationCase> existing = navigationMap.get(key);
+                if (existing == null) {
+                    navigationMap.put(key, entry.getValue());
+                } else {
+                    existing.addAll(entry.getValue());
+                }
+            }
+        }
+
+
+        @Override
+        public Set<String> keySet() {
+            return new AbstractSet<String>() {
+
+                @Override
+                public Iterator<String> iterator() {
+                    return new Iterator<String>() {
+
+                        Iterator<Map.Entry<String,Set<NavigationCase>>> i = entrySet().iterator();
+
+                        @Override
+                        public boolean hasNext() {
+                            return i.hasNext();
+                        }
+
+                        @Override
+                        public String next() {
+                            return i.next().getKey();
+                        }
+
+                        @Override
+                        public void remove() {
+                            throw new UnsupportedOperationException();
+                        }
+                    };
+                }
+
+                @Override
+                public int size() {
+                    return NavigationMap.this.size();
+                }
+            };
+        }
+
+        @Override
+        public Collection<Set<NavigationCase>> values() {
+            return new AbstractCollection<Set<NavigationCase>>() {
+
+                @Override
+                public Iterator<Set<NavigationCase>> iterator() {
+                    return new Iterator<Set<NavigationCase>>() {
+
+                        Iterator<Map.Entry<String,Set<NavigationCase>>> i = entrySet().iterator();
+
+                        @Override
+                        public boolean hasNext() {
+                            return i.hasNext();
+                        }
+
+                        @Override
+                        public Set<NavigationCase> next() {
+                            return i.next().getValue();
+                        }
+
+                        @Override
+                        public void remove() {
+                            throw new UnsupportedOperationException();
+                        }
+                    };
+                }
+
+                @Override
+                public int size() {
+                    return NavigationMap.this.size();
+                }
+            };
+        }
+
+        @Override
+        public Set<Entry<String, Set<NavigationCase>>> entrySet() {
+            return new AbstractSet<Entry<String, Set<NavigationCase>>>() {
+
+                @Override
+                public Iterator<Entry<String, Set<NavigationCase>>> iterator() {
+
+                    return new Iterator<Entry<String,Set<NavigationCase>>>() {
+
+                        Iterator<Entry<String, Set<NavigationCase>>> i =
+                              navigationMap.entrySet().iterator();
+
+                        @Override
+                        public boolean hasNext() {
+                            return i.hasNext();
+                        }
+
+                        @Override
+                        public Entry<String, Set<NavigationCase>> next() {
+                            return i.next();
+                        }
+
+                        @Override
+                        public void remove() {
+                            throw new UnsupportedOperationException();
+                        }
+                    };
+                }
+
+                @Override
+                public int size() {
+                    return NavigationMap.this.size();
+                }
+            };
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+        private void updateWildcards(String fromViewId) {
+
+            if (!navigationMap.containsKey(fromViewId)) {
+                if (fromViewId.endsWith("*")) {
+                    wildcardMatchList.add(fromViewId.substring(0, fromViewId.lastIndexOf('*')));
+                }
+            }
+            
+        }
+
+    }
+}
diff --git a/com/sun/faces/application/ProjectStageJndiFactory.java b/com/sun/faces/application/ProjectStageJndiFactory.java
new file mode 100644
index 0000000..d547825
--- /dev/null
+++ b/com/sun/faces/application/ProjectStageJndiFactory.java
@@ -0,0 +1,96 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.util.Hashtable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.naming.spi.ObjectFactory;
+import javax.naming.Name;
+import javax.naming.Context;
+import javax.naming.Reference;
+import javax.naming.RefAddr;
+import javax.faces.application.ProjectStage;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * Allows configuring ProjectStage at a server (or in GlassFish's case domain)
+ * level.  This allows for the concept of development and test servers where
+ * each application doesn't need to be individually configured, but will instead
+ * rely on global JNDI configuration instead.
+ */
+public class ProjectStageJndiFactory implements ObjectFactory {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    /**
+     * Lookup the configured stage by looking for the parameter <code>stage<code>.
+     * If the value of <code>stage</code> cannot be determined, the default
+     * {@link javax.faces.application.ProjectStage#Production} is returned.
+     *
+     * @see ObjectFactory#getObjectInstance(Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable)
+     */
+    public Object getObjectInstance(Object obj,
+                                    Name name,
+                                    Context nameCtx,
+                                    Hashtable<?, ?> environment)
+    throws Exception {
+
+        if (obj != null && obj instanceof Reference) {
+            Reference ref = (Reference) obj;
+            RefAddr addr = ref.get("stage");
+            if (addr != null) {
+                String val = (String) addr.getContent();
+                if (val != null) {
+                    return val.trim();
+                }
+            } else {
+            	if (LOGGER.isLoggable(Level.WARNING)) {
+            		LOGGER.warning("'stage' property not defined.  Defaulting to Production");
+            	}
+            }
+        }
+        return ProjectStage.Production.toString();
+
+    }
+}
diff --git a/com/sun/faces/application/PropertyEditorHelper.java b/com/sun/faces/application/PropertyEditorHelper.java
new file mode 100644
index 0000000..7583312
--- /dev/null
+++ b/com/sun/faces/application/PropertyEditorHelper.java
@@ -0,0 +1,169 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+
+import com.sun.faces.util.MessageFactory;
+import com.sun.faces.util.RequestStateManager;
+
+/**
+ * Helper class to aid the ConverterPropertyEditorBase in converting
+ * properties.
+ *
+ * @author Mike Youngstrom
+ */
+public class PropertyEditorHelper {
+
+    private Application app;
+
+    public PropertyEditorHelper(Application app) {
+        this.app = app;
+    }
+
+    /**
+     * Convert the <code>textValue</code> to an object of type targetClass by
+     * delegating to a converter.
+     */
+    public Object convertToObject(Class<?> targetClass, String textValue) {
+        UIComponent component = getComponent();
+        Converter converter = app.createConverter(targetClass);
+        if (null == converter) {
+            // PENDING(edburns): I18N
+            FacesException e = new FacesException(
+                  "Cannot create Converter to convert value "
+                  + textValue
+                  + " to instance of target class "
+                  + targetClass.getName()
+                  + '.');
+            throw e;
+        }
+        FacesContext currentInstance = FacesContext.getCurrentInstance();
+        try {
+            return converter.getAsObject(currentInstance, component, textValue);
+        } catch (ConverterException ce) {
+            addConversionErrorMessage(currentInstance, component, ce);
+            return null;
+        }
+    }
+
+    /**
+     * Convert an object of type targetClass to text by delegating to a converter
+     * obtained from the Faces application.
+     */
+    public String convertToString(Class<?> targetClass, Object value) {
+        UIComponent component = getComponent();
+        Converter converter = app.createConverter(targetClass);
+        if (null == converter) {
+            // PENDING(edburns): I18N
+            throw new FacesException("Cannot create Converter to convert "
+                                     + targetClass.getName()
+                                     + " value "
+                                     + value
+                                     + " to string.");
+        }
+        FacesContext currentInstance = FacesContext.getCurrentInstance();
+        try {
+            return converter.getAsString(currentInstance, component, value);
+        } catch (ConverterException ce) {
+            addConversionErrorMessage(currentInstance, component, ce);
+            return null;
+        }
+    }
+
+    /**
+     * Return the {@link javax.faces.component.UIComponent} that is currently being
+     * processed.
+     *
+     * @return the current component, or null.
+     */
+    protected UIComponent getComponent() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return ((UIComponent) RequestStateManager
+                  .get(context, RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME));
+        }
+        return null;
+    }
+
+    /**
+     * Add a conversion error message in the case of a PropertyEditor based
+     * conversion error.
+     *
+     * @param context
+     * @param component
+     * @param ce
+     */
+    protected void addConversionErrorMessage(FacesContext context,
+                                             UIComponent component,
+                                             ConverterException ce) {
+        String converterMessageString = null;
+        FacesMessage message;
+        UIInput input;
+        if (component instanceof UIInput) {
+            input = (UIInput) component;
+            converterMessageString = input.getConverterMessage();
+            input.setValid(false);
+        }
+        if (null != converterMessageString) {
+            message =
+                  new FacesMessage(FacesMessage.SEVERITY_ERROR, converterMessageString, converterMessageString);
+        } else {
+            message = ce.getFacesMessage();
+            if (message == null) {
+                message = MessageFactory
+                      .getMessage(context, UIInput.CONVERSION_MESSAGE_ID);
+                if (message.getDetail() == null) {
+                    message.setDetail(ce.getMessage());
+                }
+            }
+        }
+        context.addMessage(component != null
+                           ? component.getClientId(context) : null, message);
+	}
+}
diff --git a/com/sun/faces/application/SharedUtils.java b/com/sun/faces/application/SharedUtils.java
new file mode 100644
index 0000000..0a7da14
--- /dev/null
+++ b/com/sun/faces/application/SharedUtils.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+class SharedUtils {
+
+    /*
+    * Determine whether String is a mixed value binding expression or not.
+    */
+    static boolean isMixedExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        // if it doesn't start and end with delimiters
+        return (!(expression.startsWith("#{") && expression.endsWith("}")))
+                  && isExpression(expression);
+
+    }
+
+
+    /*
+    * Determine whether String is a value binding expression or not.
+    */
+    static boolean isExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        //check to see if attribute has an expression
+        int start = expression.indexOf("#{");
+        return start != -1 && expression.indexOf('}', start+2) != -1;
+    }
+
+    static Map<String, List<String>> evaluateExpressions(FacesContext context, Map<String, List<String>> map) {
+        if (map != null && !map.isEmpty()) {
+            Map<String, List<String>> ret = new HashMap<String, List<String>>(map.size());
+            for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+                ret.put(entry.getKey(), evaluateExpressions(context, entry.getValue()));
+            }
+            
+            return ret;
+        }
+        
+        return map;
+    }
+     
+    static List<String> evaluateExpressions(FacesContext context, List<String> values) {
+         if (!values.isEmpty()) {
+             List<String> ret = new ArrayList<String>(values.size());
+             Application app = context.getApplication();
+             for (String val : values) {
+                 if (val != null) {
+                     String value = val.trim();
+                     if (isExpression(value)) {
+                         value = app.evaluateExpressionGet(context,
+                                                           value,
+                                                           String.class);
+                     }
+                     ret.add(value);
+                 }
+             }
+             
+             return ret;
+         }
+         return values;
+     }
+
+
+
+}
+
+     
+
diff --git a/com/sun/faces/application/StateManagerImpl.java b/com/sun/faces/application/StateManagerImpl.java
new file mode 100644
index 0000000..7f03191
--- /dev/null
+++ b/com/sun/faces/application/StateManagerImpl.java
@@ -0,0 +1,146 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application;
+
+import com.sun.faces.application.view.JspStateManagementStrategy;
+import java.io.IOException;
+import java.util.Map;
+import javax.faces.application.StateManager;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.render.RenderKit;
+import javax.faces.render.ResponseStateManager;
+import javax.faces.view.StateManagementStrategy;
+import javax.faces.view.ViewDeclarationLanguage;
+
+/**
+ * <p> A
+ * <code>StateManager</code> implementation to meet the requirements of the
+ * specification. </p>
+ */
+public class StateManagerImpl extends StateManager {
+
+    /**
+     * Save the view.
+     *
+     * @param context the Faces context.
+     * @return the saved view.
+     */
+    @Override
+    public Object saveView(FacesContext context) {
+        Object result = null;
+
+        if (context != null && !context.getViewRoot().isTransient()) {
+            UIViewRoot viewRoot = context.getViewRoot();
+            StateManagementStrategy strategy = null;
+            String viewId = viewRoot.getViewId();
+
+            ViewDeclarationLanguage vdl =
+                    context.getApplication().getViewHandler().
+                    getViewDeclarationLanguage(context, viewId);
+
+            if (vdl != null) {
+                strategy = vdl.getStateManagementStrategy(context, viewId);
+            }
+
+            Map<Object, Object> contextAttributes = context.getAttributes();
+
+            try {
+                contextAttributes.put(StateManager.IS_SAVING_STATE, Boolean.TRUE);
+
+                if (strategy != null) {
+                    result = strategy.saveView(context);
+                } else {
+                    strategy = new JspStateManagementStrategy(context);
+                    result = strategy.saveView(context);
+                }
+            } finally {
+                contextAttributes.remove(StateManager.IS_SAVING_STATE);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Write out the state.
+     *
+     * @param context the Faces context.
+     * @param state the state.
+     * @throws IOException when an I/O error occurs.
+     */
+    @Override
+    public void writeState(FacesContext context, Object state) throws IOException {
+        RenderKit rk = context.getRenderKit();
+        ResponseStateManager rsm = rk.getResponseStateManager();
+        rsm.writeState(context, state);
+    }
+
+    /**
+     * Restores the view.
+     * 
+     * @param context the Faces context.
+     * @param viewId the view id.
+     * @param renderKitId the render kit id.
+     * @return the view root.
+     * @see StateManager#restoreView(javax.faces.context.FacesContext, java.lang.String, java.lang.String) 
+     */
+    public UIViewRoot restoreView(FacesContext context, String viewId, String renderKitId) {
+        UIViewRoot result;
+        StateManagementStrategy strategy = null;
+
+        ViewDeclarationLanguage vdl =
+                context.getApplication().getViewHandler().
+                getViewDeclarationLanguage(context, viewId);
+
+        if (vdl != null) {
+            strategy = vdl.getStateManagementStrategy(context, viewId);
+        }
+
+        if (strategy != null) {
+            result = strategy.restoreView(context, viewId, renderKitId);
+        } else {
+            strategy = new JspStateManagementStrategy(context);
+            result = strategy.restoreView(context, viewId, renderKitId);
+        }
+
+        return result;
+    }
+}
diff --git a/com/sun/faces/application/ValidateComponentNesting.java b/com/sun/faces/application/ValidateComponentNesting.java
new file mode 100644
index 0000000..bc8a53f
--- /dev/null
+++ b/com/sun/faces/application/ValidateComponentNesting.java
@@ -0,0 +1,114 @@
+package com.sun.faces.application;
+
+import java.util.EnumSet;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.ActionSource;
+import javax.faces.component.ActionSource2;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
+import javax.faces.component.UIViewAction;
+import javax.faces.component.UIViewParameter;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+
+
+import com.sun.faces.util.MessageUtils;
+
+/**
+ * <p>ValidateFormComponentNesting performs component tree validation to assure {@link ActionSource}
+ * , {@link ActionSource2} and {@link EditableValueHolder} components are placed inside a form.
+ * ValidateFormComponentNesting is installed automatically if {@link ProjectStage#Development} is
+ * active. </p>
+ * 
+ * @author dueni
+ * 
+ */
+public class ValidateComponentNesting implements SystemEventListener {
+
+    @Override
+    public boolean isListenerForSource(Object source) {
+        return (source instanceof UIViewRoot);
+    }
+
+    /**
+     * Process PostAddToViewEvent on UIViewRoot to validate form - action/input nesting.
+     */
+    @Override
+    public void processEvent(SystemEvent event) throws AbortProcessingException {
+        UIComponent root = (UIComponent) event.getSource();
+        FacesContext jsf = FacesContext.getCurrentInstance();
+        EnumSet<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+        VisitContext visitContext = VisitContext.createVisitContext(jsf, null, hints);
+
+        root.visitTree(visitContext, new ValidateFormNestingCallback());
+    }
+
+    static class ValidateFormNestingCallback implements VisitCallback {
+
+        // report missing form problem only once
+        boolean reportedOmittedFormOnce = false;
+
+        // report missing metadata problem only once
+        boolean reportedOmittedMetadataOnce = false;
+
+        @Override
+        public VisitResult visit(VisitContext context, UIComponent target) {
+            // default result: continue tree walk
+            VisitResult result = VisitResult.ACCEPT;
+
+            if (target instanceof UIForm || target.getFamily().endsWith("Form")
+                            || UIViewRoot.METADATA_FACET_NAME.equals(target.getId())) {
+                // stop tree walk if component is of type UIForm or component family ends on "Form"
+                // or if the component is the UIPanel with id METADATA_FACET_NAME 
+                result = VisitResult.REJECT;
+            } else if (target instanceof UIViewParameter || target instanceof UIViewAction) {
+                if (reportedOmittedMetadataOnce) {
+                    // report first detected problem only, then stop tree walk
+                    result = VisitResult.COMPLETE;
+                }
+                addOmittedMessage(context.getFacesContext(), target.getClientId(context
+                                .getFacesContext()), MessageUtils.MISSING_METADATA_ERROR);
+                reportedOmittedMetadataOnce = true;
+
+            } else if (target instanceof EditableValueHolder || target instanceof ActionSource
+                            || target instanceof ActionSource2) {
+                if (reportedOmittedFormOnce) {
+                    // report first detected problem only, then stop tree walk
+                    result = VisitResult.COMPLETE;
+                }
+                // if we find ActionSource, ActionSource2 or EditableValueHolder, that component
+                // must be outside of a form add warning message
+                addOmittedMessage(context.getFacesContext(), target.getClientId(context
+                                .getFacesContext()), MessageUtils.MISSING_FORM_ERROR);
+                reportedOmittedFormOnce = true;
+
+            }
+            return result;
+        }
+    }
+
+    /**
+     * method for adding a message regarding missing ancestor to context
+     * 
+     * @param ctx
+     * @param clientId
+     */
+    private static void addOmittedMessage(FacesContext jsf, String clientId, String key) {
+        Object[] params = new Object[] {};
+
+        FacesMessage m = MessageUtils.getExceptionMessage(key, params);
+        m.setSeverity(FacesMessage.SEVERITY_WARN);
+        jsf.addMessage(clientId, m);
+    }
+
+}
diff --git a/com/sun/faces/application/ValueBindingValueExpressionAdapter.java b/com/sun/faces/application/ValueBindingValueExpressionAdapter.java
new file mode 100644
index 0000000..6e670ca
--- /dev/null
+++ b/com/sun/faces/application/ValueBindingValueExpressionAdapter.java
@@ -0,0 +1,291 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.io.Serializable;
+
+import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyNotFoundException;
+import javax.faces.el.ValueBinding;
+
+import javax.el.ValueExpression;
+import javax.el.ELException;
+
+/**
+ * <p>Wrap a ValueExpression instance and expose it as a ValueBinding</p>
+ *
+ * @author Jacob Hookom
+ */
+public class ValueBindingValueExpressionAdapter extends ValueBinding implements StateHolder, 
+    Serializable {
+
+    private static final long serialVersionUID = 7410146713650507654L;
+
+    private ValueExpression valueExpression= null;
+    private boolean tranzient;
+
+    public ValueBindingValueExpressionAdapter() {} // for StateHolder
+    
+    public ValueBindingValueExpressionAdapter(ValueExpression valueExpression) {
+        this.valueExpression = valueExpression;    
+    }
+    
+   
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#getExpressionString()
+     */
+    public String getExpressionString() {
+	assert(null != valueExpression);
+        return valueExpression.getExpressionString();
+    }
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#getType(javax.faces.context.FacesContext)
+     */
+    public Class getType(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+            
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        Class result = null;
+        try {
+            result = valueExpression.getType(context.getELContext());
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        } 
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#getValue(javax.faces.context.FacesContext)
+     */
+    public Object getValue(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        Object result = null;
+        try {
+            result = valueExpression.getValue(context.getELContext());
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#isReadOnly(javax.faces.context.FacesContext)
+     */
+    public boolean isReadOnly(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+            
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        boolean result = false;
+        try {
+            result = valueExpression.isReadOnly(context.getELContext());
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+        return result;
+    }
+    
+    
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#setValue(javax.faces.context.FacesContext, java.lang.Object)
+     */
+    public void setValue(FacesContext context, Object value)
+            throws EvaluationException, PropertyNotFoundException {
+            
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        try {
+            valueExpression.setValue(context.getELContext(), value);
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (javax.el.PropertyNotWritableException pnwe) {
+            throw new PropertyNotFoundException(pnwe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+    }
+    
+    public boolean isTransient() {
+        return this.tranzient;
+    }
+    
+    public void setTransient(boolean tranzient) {
+        this.tranzient = tranzient;
+    }
+    
+    public Object saveState(FacesContext context){
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (valueExpression instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped valueExpression
+		stateStruct[0] = ((StateHolder)valueExpression).saveState(context);
+		// save the class name of the valueExpression impl
+		stateStruct[1] = valueExpression.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = valueExpression;
+	    }
+	}
+
+	return result;
+	
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof ValueExpression)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    ValueExpression result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (ValueExpression) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		valueExpression = result;
+	    }
+	}
+	else {
+	    valueExpression = (ValueExpression) state;
+	}
+    }
+    
+    public boolean equals(Object other) {
+    
+        if (other == this) {
+            return true;
+        }
+        
+        if (other instanceof ValueBindingValueExpressionAdapter) {
+            ValueExpression expr = 
+                ((ValueBindingValueExpressionAdapter) other).getWrapped();
+            return (valueExpression.equals(expr));
+        } else if (other instanceof ValueBinding) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ValueBinding otherVB = (ValueBinding) other;
+            Class type = otherVB.getType(context);
+            if (type != null) {
+                return type.equals(valueExpression.getType(context.getELContext()));               
+            }            
+        }
+        return false;
+        
+    }
+
+    public int hashCode() {    
+        assert(null != valueExpression);
+        return valueExpression.hashCode();
+    }
+    
+    public ValueExpression getWrapped() {
+        return valueExpression;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, true, loader);
+    }
+ 
+
+
+}
diff --git a/com/sun/faces/application/ValueExpressionValueBindingAdapter.java b/com/sun/faces/application/ValueExpressionValueBindingAdapter.java
new file mode 100644
index 0000000..06e214b
--- /dev/null
+++ b/com/sun/faces/application/ValueExpressionValueBindingAdapter.java
@@ -0,0 +1,320 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import javax.el.ValueExpression;
+import javax.el.ELException;
+import javax.el.ELContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+
+import java.io.Serializable;
+
+/**
+ * <p>Wrap a ValueBinding instance and expose it as a
+ * ValueExpression.</p>
+ */
+
+public class ValueExpressionValueBindingAdapter extends ValueExpression implements Serializable, StateHolder {
+
+    private static final long serialVersionUID = 2990621816592041196L;
+
+    public ValueExpressionValueBindingAdapter() {}
+
+    private ValueBinding binding = null;
+
+    public ValueExpressionValueBindingAdapter(ValueBinding binding) {
+	assert(null != binding);
+	this.binding = binding;
+    }
+
+    //
+    // Methods from ValueExpression
+    //
+
+    public Object getValue(ELContext context) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	Object result = null;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    result = binding.getValue(facesContext);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+	return result;
+    }
+
+    public void setValue(ELContext context, Object value) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    binding.setValue(facesContext, value);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+    }
+
+
+    public boolean isReadOnly(ELContext context) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	boolean result = false;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    result = binding.isReadOnly(facesContext);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+	return result;
+    }
+
+    public Class<?> getType(ELContext context) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	Class result = null;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    result = binding.getType(facesContext);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+	return result;
+    }
+
+    /**
+     * <p>Always return <code>false</code> since we can't possibly know
+     * if this is a literal text binding or not.</p>
+     */
+
+    public boolean isLiteralText() {
+	return false;
+    }
+    
+    public Class<?> getExpectedType() {
+	assert(null != binding);
+	Class result = null;
+	FacesContext context = FacesContext.getCurrentInstance();
+	try {
+	    Object value = binding.getValue(context);
+	    result = value.getClass();
+	}
+	catch (Throwable e) {
+	    result = null;
+	}
+	return result;
+    }
+
+    public String getExpressionString() {
+	assert(null != binding);
+	return binding.getExpressionString();
+	
+    }
+
+    public boolean equals(Object other) {
+    
+        if (other == this) {
+            return true;
+        }
+        
+        if (other instanceof ValueExpressionValueBindingAdapter) {
+            ValueBinding vb = 
+                ((ValueExpressionValueBindingAdapter) other).getWrapped();
+            return (binding.equals(vb));
+        } else if (other instanceof ValueExpression) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ValueExpression otherVE = (ValueExpression) other;
+            Class type = binding.getType(context);
+            if (type != null) {
+                return type.equals(otherVE.getType(context.getELContext()));
+            }            
+        }
+        return false;
+        
+    }
+
+    public int hashCode() {
+	assert(null != binding);
+
+	return binding.hashCode();
+    }
+    
+    public String getDelimiterSyntax() {
+        // PENDING (visvan) Implementation
+        return "";
+    }
+    
+    // 
+    // Methods from StateHolder
+    //
+
+    
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (binding instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped binding
+		stateStruct[0] = ((StateHolder)binding).saveState(context);
+		// save the class name of the binding impl
+		stateStruct[1] = binding.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = binding;
+	    }
+	}
+
+	return result;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof ValueBinding)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    ValueBinding result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (ValueBinding) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		binding = result;
+	    }
+	}
+	else {
+	    binding = (ValueBinding) state;
+	}
+    }
+
+    private boolean tranzient = false;
+
+    public boolean isTransient() {
+	return tranzient;
+    }
+
+    public void setTransient(boolean newTransientValue) {
+	tranzient = newTransientValue;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, true, loader);
+    }
+ 
+
+    // 
+    // methods used by classes aware of this class's wrapper nature
+    //
+
+    public ValueBinding getWrapped() {
+	return binding;
+    }
+
+}
diff --git a/com/sun/faces/application/ViewHandlerImpl.java b/com/sun/faces/application/ViewHandlerImpl.java
new file mode 100644
index 0000000..13bb989
--- /dev/null
+++ b/com/sun/faces/application/ViewHandlerImpl.java
@@ -0,0 +1,1028 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ViewHandlerImpl.java
+
+package com.sun.faces.application;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import com.sun.faces.io.FastStringWriter;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.RequestStateManager;
+
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.ResponseStateManager;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.jstl.core.Config;
+
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.net.MalformedURLException;
+
+/**
+ * <p>
+ * This is the default implementation for JSF 1.2.
+ * </p>
+ * <p>
+ * While this class isn't used by the 2.0 runtime, it's kept for binary
+ * compatibility with those that extend from this class directly.
+ * </p>
+ *
+ * @deprecated Refer to {@link com.sun.faces.application.view.MultiViewHandler}
+ */
+public class ViewHandlerImpl extends ViewHandler {
+
+    // Log instance for this class
+    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
+
+    private ApplicationAssociate associate;
+    private String[] configuredExtensions;
+    private int bufSize = -1;
+
+    public ViewHandlerImpl() {
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE,"Created ViewHandler instance ");
+        }
+        WebConfiguration config = WebConfiguration.getInstance();
+        String defaultSuffixConfig =
+              config.getOptionValue(WebConfiguration.WebContextInitParameter.DefaultSuffix);
+        Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+        configuredExtensions = Util.split(appMap, defaultSuffixConfig, " ");
+    }
+    
+
+    /**
+     * Do not call the default implementation of {@link ViewHandler#initView(javax.faces.context.FacesContext)}
+     * if the {@link javax.faces.context.ExternalContext#getRequestCharacterEncoding()} returns a
+     * <code>non-null</code> result.
+     *
+     * @see ViewHandler#initView(javax.faces.context.FacesContext)
+     */
+    @Override
+    public void initView(FacesContext context) throws FacesException {
+
+        if (context.getExternalContext().getRequestCharacterEncoding() == null) {
+            super.initView(context);
+        }
+        
+    }
+
+
+    public void renderView(FacesContext context,
+            UIViewRoot viewToRender) throws IOException,
+            FacesException {
+
+        // suppress rendering if "rendered" property on the component is
+        // false
+        if (!viewToRender.isRendered()) {
+            return;
+        }
+
+        ExternalContext extContext = context.getExternalContext();
+        ServletRequest request = (ServletRequest) extContext.getRequest();
+        ServletResponse response = (ServletResponse) extContext.getResponse();
+
+        try {
+            if (executePageToBuildView(context, viewToRender)) {
+                response.flushBuffer();
+                ApplicationAssociate associate = getAssociate(context);
+                if (associate != null) {
+                    associate.responseRendered();
+                }
+                return;
+            }
+        } catch (IOException e) {
+            throw new FacesException(e);
+        }
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE, "Completed building view for : \n" +
+                    viewToRender.getViewId());
+        }
+
+        // set up the ResponseWriter
+
+        RenderKitFactory renderFactory = (RenderKitFactory)
+        FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        RenderKit renderKit =
+                renderFactory.getRenderKit(context, viewToRender.getRenderKitId());
+
+        ResponseWriter oldWriter = context.getResponseWriter();
+
+        if (bufSize == -1) {
+            WebConfiguration webConfig =
+                  WebConfiguration
+                        .getInstance(context.getExternalContext());
+            try {
+                bufSize = Integer
+                      .parseInt(webConfig.getOptionValue(
+                            WebContextInitParameter.ResponseBufferSize));
+            } catch (NumberFormatException nfe) {
+                bufSize = Integer
+                      .parseInt(WebContextInitParameter.ResponseBufferSize.getDefaultValue());
+            }
+        }
+
+
+        WriteBehindStateWriter stateWriter =
+              new WriteBehindStateWriter(response.getWriter(),
+                                         context,
+                                         bufSize);
+        ResponseWriter newWriter;
+        if (null != oldWriter) {
+            newWriter = oldWriter.cloneWithWriter(stateWriter);
+        } else {
+            newWriter = renderKit.createResponseWriter(stateWriter,
+                                                       null,
+                                                       request.getCharacterEncoding());
+        }
+        context.setResponseWriter(newWriter);
+
+        try {
+            newWriter.startDocument();
+
+            doRenderView(context, viewToRender);
+
+            newWriter.endDocument();
+
+            // replace markers in the body content and write it to response.
+
+            // flush directly to the response
+            if (stateWriter.stateWritten()) {
+                stateWriter.flushToWriter();
+            }
+        }
+        finally {
+            
+            // clear the ThreadLocal reference.
+            stateWriter.release();
+            
+            if (null != oldWriter) {
+                context.setResponseWriter(oldWriter);
+            }
+        }
+
+        // write any AFTER_VIEW_CONTENT to the response
+        // side effect: AFTER_VIEW_CONTENT removed
+        Map<String, Object> stateMap = RequestStateManager.getStateMap(context);
+        ViewHandlerResponseWrapper wrapper = (ViewHandlerResponseWrapper)
+                stateMap.remove(RequestStateManager.AFTER_VIEW_CONTENT);
+
+        if (null != wrapper) {
+            wrapper.flushToWriter(response.getWriter(),
+                    response.getCharacterEncoding());
+        }
+
+        response.flushBuffer();
+
+    }
+
+    /**
+     * <p>This is a separate method to account for handling the content
+     * after the view tag.</p>
+     *
+     * <p>Create a new ResponseWriter around this response's Writer.
+     * Set it into the FacesContext, saving the old one aside.</p>
+     *
+     * <p>call encodeBegin(), encodeChildren(), encodeEnd() on the
+     * argument <code>UIViewRoot</code>.</p>
+     *
+     * <p>Restore the old ResponseWriter into the FacesContext.</p>
+     *
+     * <p>Write out the after view content to the response's writer.</p>
+     *
+     * <p>Flush the response buffer, and remove the after view content
+     * from the request scope.</p>
+     *
+     * @param context the <code>FacesContext</code> for the current request
+     * @param viewToRender the view to render
+     * @throws IOException if an error occurs rendering the view to the client
+     * @throws FacesException if some error occurs within the framework
+     *  processing
+     */
+
+    private void doRenderView(FacesContext context,
+                              UIViewRoot viewToRender)
+    throws IOException, FacesException {
+
+        ApplicationAssociate associate = getAssociate(context);
+
+        if (null != associate) {
+            associate.responseRendered();
+        }
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE, "About to render view " + viewToRender.getViewId());
+        }
+
+        viewToRender.encodeAll(context);
+    }
+
+
+    public UIViewRoot restoreView(FacesContext context, String viewId) {
+        if (context == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+
+        ExternalContext extContext = context.getExternalContext();
+
+        String mapping = Util.getFacesMapping(context);
+        UIViewRoot viewRoot = null;
+
+        if (mapping != null) {
+            if (!Util.isPrefixMapped(mapping)) {
+                viewId = convertViewId(context, viewId);
+            } else {
+                viewId = normalizeRequestURI(viewId, mapping);
+            }
+        }
+
+        // maping could be null if a non-faces request triggered
+        // this response.
+        if (extContext.getRequestPathInfo() == null && mapping != null &&
+            Util.isPrefixMapped(mapping)) {
+            // this was probably an initial request
+            // send them off to the root of the web application
+            try {
+                context.responseComplete();
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE, "Response Complete for" + viewId);
+                }
+                extContext.redirect(extContext.getRequestContextPath());
+            } catch (IOException ioe) {
+                throw new FacesException(ioe);
+            }
+        } else {
+            // this is necessary to allow decorated impls.
+            ViewHandler outerViewHandler =
+                    context.getApplication().getViewHandler();
+            String renderKitId =
+                    outerViewHandler.calculateRenderKitId(context);
+            viewRoot = Util.getStateManager(context).restoreView(context,
+                                                                 viewId,
+                                                                 renderKitId);
+        }
+
+        return viewRoot;
+    }
+
+
+    public UIViewRoot createView(FacesContext context, String viewId) {
+        if (context == null) {
+            String message = MessageUtils.getExceptionMessageString
+                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+
+        UIViewRoot result = (UIViewRoot)
+                context.getApplication().createComponent(UIViewRoot.COMPONENT_TYPE);
+
+        if (viewId != null) {
+            String mapping = Util.getFacesMapping(context);
+
+            if (mapping != null) {
+                if (!Util.isPrefixMapped(mapping)) {
+                   viewId = convertViewId(context, viewId);
+                } else {
+                    viewId = normalizeRequestURI(viewId, mapping);
+                    if (!Util.isPortletRequest(context) && viewId.equals(mapping)) {
+                        // The request was to the FacesServlet only - no
+                        // path info
+                        // on some containers this causes a recursion in the
+                        // RequestDispatcher and the request appears to hang.
+                        // If this is detected, return status 404
+                        send404Error(context);
+                    }
+                }
+            }
+
+            result.setViewId(viewId);
+        }
+
+        Locale locale = null;
+        String renderKitId = null;
+
+        // use the locale from the previous view if is was one which will be
+        // the case if this is called from NavigationHandler. There wouldn't be
+        // one for the initial case.
+        if (context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+            renderKitId = context.getViewRoot().getRenderKitId();
+        }
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE, "Created new view for " + viewId);
+        }
+        // PENDING(): not sure if we should set the RenderKitId here.
+        // The UIViewRoot ctor sets the renderKitId to the default
+        // one.
+        // if there was no locale from the previous view, calculate the locale
+        // for this view.
+        if (locale == null) {
+            locale =
+                context.getApplication().getViewHandler().calculateLocale(
+                    context);
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Locale for this view as determined by calculateLocale "
+                            + locale.toString());
+            }
+        } else {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Using locale from previous view "
+                            + locale.toString());
+            }
+        }
+
+        if (renderKitId == null) {
+            renderKitId =
+                context.getApplication().getViewHandler().calculateRenderKitId(
+                    context);
+           if (logger.isLoggable(Level.FINE)) {
+               logger.fine(
+               "RenderKitId for this view as determined by calculateRenderKitId "
+               + renderKitId);
+            }
+        } else {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Using renderKitId from previous view "
+                            + renderKitId);
+            }
+        }
+
+        result.setLocale(locale);
+        result.setRenderKitId(renderKitId);
+
+        return result;
+    }
+
+    /**
+     * Execute the target view.  If the HTTP status code range is
+     * not 2xx, then return true to indicate the response should be
+     * immediately flushed by the caller so that conditions such as 404
+     * are properly handled.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param viewToExecute the view to build
+     * @return <code>true</code> if the response should be immediately flushed
+     *  to the client, otherwise <code>false</code>
+     * @throws IOException if an error occurs executing the page
+     */
+    private boolean executePageToBuildView(FacesContext context,
+                                        UIViewRoot viewToExecute)
+    throws IOException {
+
+        if (null == context) {
+            String message = MessageUtils.getExceptionMessageString
+                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+        if (null == viewToExecute) {
+            String message = MessageUtils.getExceptionMessageString
+                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "viewToExecute");
+            throw new NullPointerException(message);
+        }
+
+        ExternalContext extContext = context.getExternalContext();
+        Map<String, Object> stateMap = RequestStateManager.getStateMap(context);
+
+
+        if ("/*".equals(stateMap.get(RequestStateManager.INVOCATION_PATH))) {
+            throw new FacesException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.FACES_SERVLET_MAPPING_INCORRECT_ID));
+        }
+
+        String requestURI = viewToExecute.getViewId();
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("About to execute view " + requestURI);
+        }
+
+        // update the JSTL locale attribute in request scope so that JSTL
+        // picks up the locale from viewRoot. This attribute must be updated
+        // before the JSTL setBundle tag is called because that is when the
+        // new LocalizationContext object is created based on the locale.
+        if (extContext.getRequest() instanceof ServletRequest) {
+            Config.set((ServletRequest)
+            extContext.getRequest(),
+                       Config.FMT_LOCALE, context.getViewRoot().getLocale());
+        }
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("Before dispacthMessage to viewId " + requestURI);
+        }
+
+        // save the original response
+        Object originalResponse = extContext.getResponse();
+
+        // replace the response with our wrapper
+        ViewHandlerResponseWrapper wrapped = getWrapper(extContext);
+        extContext.setResponse(wrapped);
+
+        // build the view by executing the page
+        extContext.dispatch(requestURI);
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("After dispacthMessage to viewId " + requestURI);
+        }
+
+        // replace the original response
+        extContext.setResponse(originalResponse);
+
+        // Follow the JSTL 1.2 spec, section 7.4,
+        // on handling status codes on a forward
+        if (wrapped.getStatus() < 200 || wrapped.getStatus() > 299) {
+            // flush the contents of the wrapper to the response
+            // this is necessary as the user may be using a custom
+            // error page - this content should be propagated
+            wrapped.flushContentToWrappedResponse();
+            return true;
+        }
+
+        // Put the AFTER_VIEW_CONTENT into request scope
+        // temporarily
+        stateMap.put(RequestStateManager.AFTER_VIEW_CONTENT,
+                                wrapped);
+
+        return false;
+
+    }
+
+
+    public Locale calculateLocale(FacesContext context) {
+
+        if (context == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+
+        Locale result = null;
+        // determine the locales that are acceptable to the client based on the
+        // Accept-Language header and the find the best match among the
+        // supported locales specified by the client.
+        Iterator<Locale> locales = context.getExternalContext().getRequestLocales();
+        while (locales.hasNext()) {
+            Locale perf = locales.next();
+            result = findMatch(context, perf);
+            if (result != null) {
+                break;
+            }
+        }
+        // no match is found.
+        if (result == null) {
+            if (context.getApplication().getDefaultLocale() == null) {
+                result = Locale.getDefault();
+            } else {
+                result = context.getApplication().getDefaultLocale();
+            }
+        }
+        return result;
+    }
+
+
+    public String calculateRenderKitId(FacesContext context) {
+
+        if (context == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+
+        Map<String,String> requestParamMap = context.getExternalContext()
+            .getRequestParameterMap();
+        String result = requestParamMap.get(
+            ResponseStateManager.RENDER_KIT_ID_PARAM);
+
+        if (result == null) {
+            result = context.getApplication().getDefaultRenderKitId();
+            if (null == result) {
+                result = RenderKitFactory.HTML_BASIC_RENDER_KIT;
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * Attempts to find a matching locale based on <code>pref</code> and
+     * list of supported locales, using the matching algorithm
+     * as described in JSTL 8.3.2.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param pref the preferred locale
+     * @return the Locale based on pref and the matching alogritm specified
+     *  in JSTL 8.3.2
+     */
+    protected Locale findMatch(FacesContext context, Locale pref) {
+        Locale result = null;
+        Iterator<Locale> it = context.getApplication().getSupportedLocales();
+        while (it.hasNext()) {
+            Locale supportedLocale = it.next();
+
+            if (pref.equals(supportedLocale)) {
+                // exact match
+                result = supportedLocale;
+                break;
+            } else {
+                // Make sure the preferred locale doesn't have country
+                // set, when doing a language match, For ex., if the
+                // preferred locale is "en-US", if one of supported
+                // locales is "en-UK", even though its language matches
+                // that of the preferred locale, we must ignore it.
+                if (pref.getLanguage().equals(supportedLocale.getLanguage()) &&
+                     supportedLocale.getCountry().length() == 0) {
+                    result = supportedLocale;
+                }
+            }
+        }
+        // if it's not in the supported locales,
+        if (null == result) {
+            Locale defaultLocale = context.getApplication().getDefaultLocale();
+            if (defaultLocale != null) {
+                if ( pref.equals(defaultLocale)) {
+                    // exact match
+                    result = defaultLocale;
+                } else {
+                    // Make sure the preferred locale doesn't have country
+                    // set, when doing a language match, For ex., if the
+                    // preferred locale is "en-US", if one of supported
+                    // locales is "en-UK", even though its language matches
+                    // that of the preferred locale, we must ignore it.
+                    if (pref.getLanguage().equals(defaultLocale.getLanguage()) &&
+                         defaultLocale.getCountry().length() == 0) {
+                        result = defaultLocale;
+                    }
+                }
+            }
+        }
+
+        return result;
+    }
+
+
+    public void writeState(FacesContext context) throws IOException {
+        if (context == null) {
+           String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("Begin writing marker for viewId " +
+                        context.getViewRoot().getViewId());
+        }
+
+        WriteBehindStateWriter writer = WriteBehindStateWriter.getCurrentInstance();
+        if (writer != null) {
+            writer.writingState();
+        }
+        context.getResponseWriter().write(RIConstants.SAVESTATE_FIELD_MARKER);
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("End writing marker for viewId " +
+                        context.getViewRoot().getViewId());
+        }
+
+    }
+
+
+    public String getActionURL(FacesContext context, String viewId) {
+
+        if (context == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+        if (viewId == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "viewId");
+            throw new NullPointerException(message);
+        }
+
+        if (0 == viewId.length() || viewId.charAt(0) != '/') {
+            String message =
+                  MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_VIEW_ID_ID,
+                        viewId);
+            if (logger.isLoggable(Level.SEVERE)) {
+                logger.log(Level.SEVERE, "jsf.illegal_view_id_error", viewId);
+            }
+        throw new IllegalArgumentException(message);
+        }
+
+        // Acquire the context path, which we will prefix on all results
+        ExternalContext extContext = context.getExternalContext();
+        String contextPath = extContext.getRequestContextPath();
+
+        // Acquire the mapping used to execute this request (if any)
+        String mapping = Util.getFacesMapping(context);
+
+        // If no mapping can be identified, just return a server-relative path
+        if (mapping == null) {
+            return (contextPath + viewId);
+        }
+
+        // Deal with prefix mapping
+        if (Util.isPrefixMapped(mapping)) {
+            if (mapping.equals("/*")) {
+                return (contextPath + viewId);
+            } else {
+                return (contextPath + mapping + viewId);
+            }
+        }
+
+        // Deal with extension mapping
+        for (String extension : configuredExtensions) {
+            if (viewId.endsWith(extension)) {
+                return (contextPath + viewId.substring(0, viewId.lastIndexOf('.')) + mapping);
+            }
+        }
+        return (contextPath + viewId);
+
+    }
+
+
+    public String getResourceURL(FacesContext context, String path) {
+        ExternalContext extContext = context.getExternalContext();
+        if (path.charAt(0) == '/' && !path.startsWith(extContext.getRequestContextPath())) {
+            return (extContext.getRequestContextPath() + path);
+        } else {
+            return path;
+        }
+
+    }
+
+
+    /**
+     * <p>if the specified mapping is a prefix mapping, and the provided
+     * request URI (usually the value from <code>ExternalContext.getRequestServletPath()</code>)
+     * starts with <code>mapping + '/'</code>, prune the mapping from the
+     * URI and return it, otherwise, return the original URI.
+     * @param uri the servlet request path
+     * @param mapping the FacesServlet mapping used for this request
+     * @return the URI without additional FacesServlet mappings
+     * @since 1.2
+     */
+    private String normalizeRequestURI(String uri, String mapping) {
+
+        if (mapping == null || !Util.isPrefixMapped(mapping)) {
+            return uri;
+        } else {
+            int length = mapping.length() + 1;
+            StringBuilder builder = new StringBuilder(length);
+            builder.append(mapping).append('/');
+            String mappingMod = builder.toString();
+            boolean logged = false;
+            while (uri.startsWith(mappingMod)) {
+                if (!logged && logger.isLoggable(Level.WARNING)) {
+                    logged = true;
+                    logger.log(Level.WARNING,
+                               "jsf.viewhandler.requestpath.recursion",
+                               new Object[] {uri, mapping});
+                }
+                uri = uri.substring(length - 1);
+            }
+            return uri;
+        }
+    }
+
+    private void send404Error(FacesContext context) {
+        HttpServletResponse response = (HttpServletResponse)
+             context.getExternalContext().getResponse();
+        try {
+            context.responseComplete();
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+        } catch (IOException ioe) {
+            throw new FacesException(ioe);
+        }
+    }
+
+
+    /**
+     * <p>Adjust the viewID per the requirements of {@link #renderView}.</p>
+     *
+     * @param context current {@link FacesContext}
+     * @param viewId  incoming view ID
+     * @return the view ID with an altered suffix mapping (if necessary)
+     */
+    private String convertViewId(FacesContext context, String viewId) {
+
+        // if the viewId doesn't already use the above suffix,
+        // replace or append.
+        StringBuilder buffer = new StringBuilder(viewId);
+        for (String ext : configuredExtensions) {
+            if (viewId.endsWith(ext)) {
+                return viewId;
+            }
+            int extIdx = viewId.lastIndexOf('.');
+            if (extIdx != -1) {
+                buffer.replace(extIdx, viewId.length(), ext);
+            } else {
+                // no extension in the provided viewId, append the suffix
+                buffer.append(ext);
+            }
+            String convertedViewId = buffer.toString();
+            try {
+                if (context.getExternalContext().getResource(convertedViewId) != null) {
+                    return convertedViewId;
+                } else {
+                    // reset the buffer to check for the next extension
+                    buffer.setLength(0);
+                    buffer.append(viewId);
+                }
+            } catch (MalformedURLException e) {
+                if (logger.isLoggable(Level.SEVERE)) {
+                    logger.log(Level.SEVERE,
+                               e.toString(),
+                               e);
+                }
+            }
+        }
+
+        // unable to find any resource match that the default ViewHandler
+        // can deal with.  Return the viewId as it was passed.  There is
+        // probably another ViewHandler in the stack that will handle this.
+        return viewId;
+    }
+
+
+    private ApplicationAssociate getAssociate(FacesContext context) {
+        if (associate == null) {
+            associate = ApplicationAssociate.getInstance(context.getExternalContext());
+        }
+        return associate;
+    }
+
+
+    private static ViewHandlerResponseWrapper getWrapper(ExternalContext extContext) {
+        Object response = extContext.getResponse();
+        if (response instanceof HttpServletResponse) {
+            return new ViewHandlerResponseWrapper((HttpServletResponse) response);
+        }
+        throw new IllegalArgumentException();
+
+    }
+
+    // ----------------------------------------------------------- Inner Classes
+
+    /**
+     * Thanks to the Facelets folks for some of the concepts incorporated
+     * into this class.
+     */
+    private static final class WriteBehindStateWriter extends Writer {
+        // length of the state marker
+        private static final int STATE_MARKER_LEN =
+              RIConstants.SAVESTATE_FIELD_MARKER.length();
+
+        private static final ThreadLocal<WriteBehindStateWriter> CUR_WRITER =
+             new ThreadLocal<WriteBehindStateWriter>();
+        private Writer out;
+        private Writer orig;
+        private FastStringWriter fWriter;
+        private boolean stateWritten;
+        private int bufSize;
+        private char[] buf;
+        private FacesContext context;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        public WriteBehindStateWriter(Writer out, FacesContext context, int bufSize) {
+            this.out = out;
+            this.orig = out;
+            this.context = context;
+            this.bufSize = bufSize;
+            this.buf = new char[bufSize];
+            CUR_WRITER.set(this);
+        }
+
+
+        // ------------------------------------------------- Methods from Writer
+
+
+
+        public void write(int c) throws IOException {
+            out.write(c);
+        }
+
+
+        public void write(char cbuf[]) throws IOException {
+            out.write(cbuf);
+        }
+
+
+        public void write(String str) throws IOException {
+            out.write(str);
+        }
+
+
+        public void write(String str, int off, int len) throws IOException {
+            out.write(str, off, len);
+        }
+
+
+        public void write(char cbuf[], int off, int len) throws IOException {
+            out.write(cbuf, off, len);
+        }
+
+
+        public void flush() throws IOException {
+            // no-op
+        }
+
+
+        public void close() throws IOException {
+           // no-op
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        public static WriteBehindStateWriter getCurrentInstance() {
+            return CUR_WRITER.get();
+        }
+
+
+        public void release() {
+            CUR_WRITER.remove();
+        }
+
+
+        public void writingState() {
+            if (!stateWritten) {
+                this.stateWritten = true;
+                out = fWriter = new FastStringWriter(1024);
+            }
+        }
+
+        public boolean stateWritten() {
+            return stateWritten;
+        }
+
+        /**
+         * <p> Write directly from our FastStringWriter to the provided
+         * writer.</p>
+         * @throws IOException if an error occurs
+         */
+        public void flushToWriter() throws IOException {
+            // Save the state to a new instance of StringWriter to
+            // avoid multiple serialization steps if the view contains
+            // multiple forms.
+            StateManager stateManager = Util.getStateManager(context);
+            ResponseWriter origWriter = context.getResponseWriter();
+            FastStringWriter state =
+                  new FastStringWriter((stateManager.isSavingStateInClient(
+                        context)) ? bufSize : 128);
+            context.setResponseWriter(origWriter.cloneWithWriter(state));
+            stateManager.writeState(context, stateManager.saveView(context));
+            context.setResponseWriter(origWriter);
+            StringBuilder builder = fWriter.getBuffer();
+            // begin writing...
+            int totalLen = builder.length();
+            StringBuilder stateBuilder = state.getBuffer();
+            int stateLen = stateBuilder.length();
+            int pos = 0;
+            int tildeIdx = getNextDelimiterIndex(builder, pos);
+            while (pos < totalLen) {
+                if (tildeIdx != -1) {
+                    if (tildeIdx > pos && (tildeIdx - pos) > bufSize) {
+                        // there's enough content before the first ~
+                        // to fill the entire buffer
+                        builder.getChars(pos, (pos + bufSize), buf, 0);
+                        orig.write(buf);
+                        pos += bufSize;
+                    } else {
+                        // write all content up to the first '~'
+                        builder.getChars(pos, tildeIdx, buf, 0);
+                        int len = (tildeIdx - pos);
+                        orig.write(buf, 0, len);
+                        // now check to see if the state saving string is
+                        // at the begining of pos, if so, write our
+                        // state out.
+                        if (builder.indexOf(
+                              RIConstants.SAVESTATE_FIELD_MARKER,
+                              pos) == tildeIdx) {
+                            // buf is effectively zero'd out at this point
+                            int statePos = 0;
+                            while (statePos < stateLen) {
+                                if ((stateLen - statePos) > bufSize) {
+                                    // enough state to fill the buffer
+                                    stateBuilder.getChars(statePos,
+                                                          (statePos + bufSize),
+                                                          buf,
+                                                          0);
+                                    orig.write(buf);
+                                    statePos += bufSize;
+                                } else {
+                                    int slen = (stateLen - statePos);
+                                    stateBuilder.getChars(statePos,
+                                                          stateLen,
+                                                          buf,
+                                                          0);
+                                    orig.write(buf, 0, slen);
+                                    statePos += slen;
+                                }
+
+                            }
+                             // push us past the last '~' at the end of the marker
+                            pos += (len + STATE_MARKER_LEN);
+                            tildeIdx = getNextDelimiterIndex(builder, pos);
+                        } else {
+                            pos = tildeIdx;
+                            tildeIdx = getNextDelimiterIndex(builder,
+                                                             tildeIdx + 1);
+
+                        }
+                    }
+                } else {
+                    // we've written all of the state field markers.
+                    // finish writing content
+                    if (totalLen - pos > bufSize) {
+                        // there's enough content to fill the buffer
+                        builder.getChars(pos, (pos + bufSize), buf, 0);
+                        orig.write(buf);
+                        pos += bufSize;
+                    } else {
+                        // we're near the end of the response
+                        builder.getChars(pos, totalLen, buf, 0);
+                        int len = (totalLen - pos);
+                        orig.write(buf, 0, len);
+                        pos += (len + 1);
+                    }
+                }
+            }
+
+            // all state has been written.  Have 'out' point to the
+            // response so that all subsequent writes will make it to the
+            // browser.
+            out = orig;
+        }
+
+        private static int getNextDelimiterIndex(StringBuilder builder,
+                                                 int offset) {
+            return builder.indexOf(RIConstants.SAVESTATE_FIELD_DELIMITER,
+                                   offset);
+        }
+
+    }
+
+
+}
diff --git a/com/sun/faces/application/ViewHandlerResponseWrapper.java b/com/sun/faces/application/ViewHandlerResponseWrapper.java
new file mode 100644
index 0000000..9562b5d
--- /dev/null
+++ b/com/sun/faces/application/ViewHandlerResponseWrapper.java
@@ -0,0 +1,205 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ViewHandlerResponseWrapper.java 
+
+package com.sun.faces.application;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+
+
+/**
+ * <p>This class is used by {@link javax.faces.application.ViewHandler#createView} to obtain the
+ * text that exists after the <f:view> tag.</p>
+ */
+
+public class ViewHandlerResponseWrapper extends HttpServletResponseWrapper {
+
+    private ByteArrayWebOutputStream basos;
+    private WebPrintWriter pw ;
+    private CharArrayWriter caw;
+    private int status = HttpServletResponse.SC_OK;
+
+
+    public ViewHandlerResponseWrapper(HttpServletResponse wrapped) {
+        super(wrapped);
+    }
+
+
+    @Override
+    public void sendError(int sc, String msg) throws IOException {
+        super.sendError(sc, msg);
+        status = sc;
+    }
+
+    @Override
+    public void sendError(int sc) throws IOException {
+        super.sendError(sc);
+        status = sc;
+    }
+
+    @Override
+    public void setStatus(int sc) {
+        super.setStatus(sc);
+        status = sc;
+    }
+
+    @Override
+    public void setStatus(int sc, String sm) {
+        super.setStatus(sc, sm);
+        status = sc;
+    }
+
+
+    public int getStatus() {
+        return status;
+    }
+
+    public boolean isBytes() {
+        return (null != basos);
+    }
+
+    public boolean isChars() {
+        return (null != caw);
+    }
+
+    public byte[] getBytes() {
+        byte[] result = null;
+        if (null != basos) {
+            result = basos.toByteArray();
+        }
+        return result;
+    }
+
+    public char[] getChars() {
+        char[] result = null;
+        if (null != caw) {
+            result = caw.toCharArray();
+        }
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        String result = "null";
+        if (null != caw) {
+            result = caw.toString();
+        } else if (null != basos) {
+            result = basos.toString();
+        }
+        return result;
+    }
+
+    public void flushContentToWrappedResponse() throws IOException {
+        ServletResponse wrapped = this.getResponse();
+        if (null != caw) {
+            pw.flush();
+            caw.writeTo(wrapped.getWriter());
+            caw.reset();
+        } else if (null != basos) {
+            try {
+                basos.writeTo(wrapped.getWriter(),
+                              wrapped.getCharacterEncoding());
+            } catch (IllegalStateException ise) {
+                basos.writeTo(wrapped.getOutputStream());
+            }           
+            basos.resetByteArray();
+        }
+
+    }
+    
+    public void flushToWriter(Writer writer, String encoding) throws IOException {
+        if (null != caw) {
+            pw.flush();
+            caw.writeTo(writer);
+            caw.reset();
+        } else if (null != basos) {
+            basos.writeTo(writer, encoding);
+            basos.resetByteArray();
+        }
+        writer.flush();
+    }
+
+    public void resetBuffers() throws IOException {
+        if (null != caw) {
+            caw.reset();
+        } else if (null != basos) {
+            basos.resetByteArray();
+        }
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        if (pw != null && (!pw.isComitted() && !isCommitted())) {
+            throw new IllegalStateException();
+        } else if (pw != null && (pw.isComitted() || isCommitted())) {
+            return ByteArrayWebOutputStream.NOOP_STREAM;
+        }
+        if (null == basos) {
+            basos = new ByteArrayWebOutputStream();
+        }
+        return basos;
+    }
+
+    @Override
+    public PrintWriter getWriter() throws IOException {
+        if (basos != null && (!basos.isCommitted() && !isCommitted())) {
+            throw new IllegalStateException();
+        } else if (basos != null && (basos.isCommitted() || isCommitted())) {
+            return new WebPrintWriter(WebPrintWriter.NOOP_WRITER);
+        }
+        if (null == pw) {
+            caw = new CharArrayWriter(1024);
+            pw = new WebPrintWriter(caw);
+        }
+
+        return pw;
+    }
+
+
+} // end of class ViewHandlerResponseWrapper
diff --git a/com/sun/faces/application/WebPrintWriter.java b/com/sun/faces/application/WebPrintWriter.java
new file mode 100644
index 0000000..e5b6877
--- /dev/null
+++ b/com/sun/faces/application/WebPrintWriter.java
@@ -0,0 +1,134 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+
+/**
+ * A simple PrintWriter implementation to allow us to query
+ * whether or not the writer has been flushed or closed.  This is necessary
+ * to better mimic the actual Servlet response.
+ */
+public class WebPrintWriter extends PrintWriter {
+
+    public static final Writer NOOP_WRITER = new NoOpWriter();
+    private boolean committed;
+
+    public WebPrintWriter(Writer delegate) {
+        super(delegate);
+    }
+
+    @Override
+    public void close() {
+        committed = true;
+    }
+
+    @Override
+    public void flush() {
+        committed = true;
+    }
+
+    public boolean isComitted() {
+        return committed;
+    }
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class NoOpWriter extends Writer {
+
+        public NoOpWriter() {}
+
+        public void write(char cbuf[], int off, int len) throws IOException {
+            // no-op
+        }
+
+        public void flush() throws IOException {
+            // no-op
+        }
+
+        public void close() throws IOException {
+            // no-op
+        }
+
+        protected NoOpWriter(Object lock) {
+            // no-op
+        }
+
+        @Override
+        public void write(int c) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void write(char cbuf[]) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void write(String str) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public void write(String str, int off, int len) throws IOException {
+            // no-op
+        }
+
+        @Override
+        public Writer append(CharSequence csq) throws IOException {
+            return this;
+        }
+
+        @Override
+        public Writer append(CharSequence csq, int start, int end)
+        throws IOException {
+            return this;
+        }
+
+        @Override
+        public Writer append(char c) throws IOException {
+            return this;
+        }
+    }
+}
diff --git a/com/sun/faces/application/WebappLifecycleListener.java b/com/sun/faces/application/WebappLifecycleListener.java
new file mode 100644
index 0000000..1f21aba
--- /dev/null
+++ b/com/sun/faces/application/WebappLifecycleListener.java
@@ -0,0 +1,409 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application;
+
+import com.sun.faces.application.view.ViewScopeManager;
+import com.sun.faces.config.InitFacesContext;
+import com.sun.faces.config.WebConfiguration;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextAttributeEvent;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestAttributeEvent;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.http.HttpSessionEvent;
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.flow.FlowCDIContext;
+import com.sun.faces.io.FastStringWriter;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+
+/**
+ * <p>Central location for web application lifecycle events.<p>  
+ * <p>The main purpose of this class is detect when we
+ * should be invoking methods marked with the
+ * <code>@PreDestroy</code> annotation.</p>
+ */
+public class WebappLifecycleListener {
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    
+    private ServletContext servletContext;
+    private ApplicationAssociate applicationAssociate;
+    private List<HttpSession> activeSessions;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public WebappLifecycleListener() { }
+
+    public WebappLifecycleListener(ServletContext servletContext) {
+
+        this.servletContext = servletContext;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+    /**
+     * The request is about to go out of scope of the web application.
+     *
+     * @param event the notification event
+     */
+    public void requestDestroyed(ServletRequestEvent event) {
+
+        try {
+            ServletRequest request = event.getServletRequest();
+            for (Enumeration e = request.getAttributeNames(); e.hasMoreElements();) {
+                String beanName = (String) e.nextElement();
+                handleAttributeEvent(beanName,
+                        request.getAttribute(beanName),
+                        ELUtils.Scope.REQUEST);
+            }
+            WebConfiguration config = WebConfiguration.getInstance(event.getServletContext());
+            if (config.isOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.EnableAgressiveSessionDirtying)) {
+                syncSessionScopedBeans(request);
+            }
+        } catch (Throwable t) {
+            FacesContext context = new InitFacesContext(event.getServletContext());
+            ExceptionQueuedEventContext eventContext =
+                    new ExceptionQueuedEventContext(context, t);
+            context.getApplication().publishEvent(context,
+                    ExceptionQueuedEvent.class, eventContext);
+            context.getExceptionHandler().handle();
+        }
+        finally {
+            ApplicationAssociate.setCurrentInstance(null);
+        }
+    }
+
+    /**
+     * The request is about to come into scope of the web application.
+     *
+     * @param event the notification event
+     */
+    public void requestInitialized(ServletRequestEvent event) {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        if (facesContext instanceof InitFacesContext) {
+            InitFacesContext initFacesContext = (InitFacesContext) facesContext;
+            initFacesContext.releaseCurrentInstance();
+        }
+        ApplicationAssociate.setCurrentInstance(getAssociate());
+    }
+
+    /**
+     * Notfication that a session has been created.
+     * @param event the notification event
+     */
+    public void sessionCreated(HttpSessionEvent event) {
+        ApplicationAssociate associate = getAssociate();
+        // PENDING this should only create a new list if in dev mode
+         if (associate != null && associate.isDevModeEnabled()) {
+            if (activeSessions == null) {
+                activeSessions = new ArrayList<HttpSession>();
+            }
+            activeSessions.add(event.getSession());
+        }
+    }
+
+
+
+    /**
+     * Notification that a session is about to be invalidated.
+     *
+     * @param event the notification event
+     */
+    public void sessionDestroyed(HttpSessionEvent event) {        
+        if (activeSessions != null) {
+            activeSessions.remove(event.getSession());
+        }
+                
+        if (Util.isCDIAvailable(servletContext)) {
+            FlowCDIContext.sessionDestroyed(event);
+        }
+
+        ViewScopeManager manager = (ViewScopeManager) servletContext.getAttribute(ViewScopeManager.VIEW_SCOPE_MANAGER);
+        if (manager != null) {
+            manager.sessionDestroyed(event);
+        }
+    }
+
+    /**
+     * Notification that an existing attribute has been removed from the
+     * servlet request. Called after the attribute is removed.
+     * @param event the notification event
+     */
+    public void attributeRemoved(ServletRequestAttributeEvent event) {
+        handleAttributeEvent(event.getName(),
+                             event.getValue(),
+                             ELUtils.Scope.REQUEST);
+    }
+
+    /**
+     * Notification that an attribute was replaced on the
+     * servlet request. Called after the attribute is replaced.
+     *
+     * @param event the notification event
+     */
+    public void attributeReplaced(ServletRequestAttributeEvent event) {
+        String attrName = event.getName();
+        Object newValue = event.getServletRequest().getAttribute(attrName);
+
+        // perhaps a bit paranoid, but since the javadocs are a bit vague,
+        // only handle the event if oldValue and newValue are not the
+        // exact same object
+        //noinspection ObjectEquality
+        if (event.getValue() != newValue) {
+            handleAttributeEvent(attrName,
+                                 event.getValue(),
+                                 ELUtils.Scope.REQUEST);
+        }
+    }
+    
+
+    /**
+     * Notification that an attribute has been removed from a session.
+     * Called after the attribute is removed.
+     *
+     * @param event the nofication event
+     */
+    public void attributeRemoved(HttpSessionBindingEvent event) {
+        handleAttributeEvent(event.getName(),
+                             event.getValue(),
+                             ELUtils.Scope.SESSION);
+    }
+
+    /**
+     * Notification that an attribute has been replaced in a session.
+     * Called after the attribute is replaced.
+     *
+     * @param event the notification event
+     */
+    public void attributeReplaced(HttpSessionBindingEvent event) {
+        HttpSession session = event.getSession();
+        String attrName = event.getName();
+        Object newValue = session.getAttribute(attrName);
+
+        // perhaps a bit paranoid, but since the javadocs are a bit vague,
+        // only handle the event if oldValue and newValue are not the
+        // exact same object
+        //noinspection ObjectEquality
+        if (event.getValue() != newValue) {
+            handleAttributeEvent(attrName,
+                                 event.getValue(),
+                                 ELUtils.Scope.SESSION);
+        }
+
+    }
+
+
+    /**
+     * Notification that an existing attribute has been removed from the servlet context.
+     * Called after the attribute is removed.
+     *
+     * @param event the notification event
+     */
+    public void attributeRemoved(ServletContextAttributeEvent event) {
+        handleAttributeEvent(event.getName(),
+                             event.getValue(),
+                             ELUtils.Scope.APPLICATION);
+    }
+
+    /**
+     * Notification that an attribute on the servlet context has been replaced.
+     * Called after the attribute is replaced.
+     *
+     * @param event the notification event
+     */
+    public void attributeReplaced(ServletContextAttributeEvent event) {
+        ServletContext context = event.getServletContext();
+        String attrName = event.getName();
+        Object newValue = context.getAttribute(attrName);
+
+        // perhaps a bit paranoid, but since the javadocs are a bit vague,
+        // only handle the event if oldValue and newValue are not the
+        // exact same object
+        //noinspection ObjectEquality
+        if (event.getValue() != newValue) {
+            handleAttributeEvent(attrName,
+                                 event.getValue(),
+                                 ELUtils.Scope.APPLICATION);
+        }
+    }
+
+    private void handleAttributeEvent(String beanName,
+                                      Object bean,
+                                      ELUtils.Scope scope) {
+
+        ApplicationAssociate associate = getAssociate();
+        try {
+            if (associate != null) {
+                BeanManager beanManager = associate.getBeanManager();
+                if (beanManager != null && beanManager.isManaged(beanName)) {
+                    beanManager.destroy(beanName, bean);
+                }              
+            }
+        } catch (Exception e) {
+            String className = e.getClass().getName();
+            String message = e.getMessage();            
+            if (message == null) {
+                message = "";
+            }
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.log(Level.INFO,
+                           "jsf.config.listener.predestroy.error",
+                           new Object[]{
+                                 className,
+                                 beanName,
+                                 scope,
+                                 message});
+            }
+            if (LOGGER.isLoggable(Level.FINE)) {
+                FastStringWriter writer = new FastStringWriter(128);
+                e.printStackTrace(new PrintWriter(writer));
+                LOGGER.fine(writer.toString());
+            }
+        }
+
+    } // END handleAttributeEvent
+
+    /**
+     * Notification that the web application initialization
+     * process is starting.
+     * All ServletContextListeners are notified of context
+     * initialization before any filter or servlet in the web
+     * application is initialized.
+     *
+     * @param event the notification event
+     */
+    public void contextInitialized(ServletContextEvent event) {
+        if (this.servletContext == null) {
+            this.servletContext = event.getServletContext();
+        }
+    }
+
+    /**
+     * Notification that the servlet context is about to be shut down.
+     * All servlets and filters have been destroy()ed before any
+     * ServletContextListeners are notified of context
+     * destruction.
+     *
+     * @param event the nofication event
+     */
+    public void contextDestroyed(ServletContextEvent event) {
+        
+        for (Enumeration e = servletContext.getAttributeNames(); e.hasMoreElements(); ) {
+            String beanName = (String)e.nextElement();
+            handleAttributeEvent(beanName, 
+                                 servletContext.getAttribute(beanName), 
+                                 ELUtils.Scope.APPLICATION);
+        }
+        this.applicationAssociate = null;
+
+    }
+
+
+    public List<HttpSession> getActiveSessions() {
+        return new ArrayList<HttpSession>(activeSessions);
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private ApplicationAssociate getAssociate() {
+
+        if (applicationAssociate == null) {
+            applicationAssociate = ApplicationAssociate.getInstance(servletContext);
+        }
+
+        return applicationAssociate;
+    }
+
+
+    /**
+     * This method ensures that session scoped managed beans will be
+     * synchronized properly in a clustered environment.
+     *
+     * @param request the current <code>ServletRequest</code>
+     */
+    private void syncSessionScopedBeans(ServletRequest request) {
+
+        if (request instanceof HttpServletRequest) {
+            HttpSession session = ((HttpServletRequest) request).getSession(false);
+            if (session != null) {
+                ApplicationAssociate associate = getAssociate();
+                if (associate == null) {
+                    return;
+                }
+                BeanManager manager = associate.getBeanManager();
+                if (manager != null) {
+                    for (Enumeration e = session.getAttributeNames();
+                         e.hasMoreElements();) {
+                        String name = (String) e.nextElement();
+                        if (manager.isManaged(name)) {
+                            session
+                                  .setAttribute(name, session.getAttribute(name));
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+} // END WebappLifecycleListener
diff --git a/com/sun/faces/application/annotation/AnnotationManager.java b/com/sun/faces/application/annotation/AnnotationManager.java
new file mode 100644
index 0000000..9491852
--- /dev/null
+++ b/com/sun/faces/application/annotation/AnnotationManager.java
@@ -0,0 +1,483 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Collection;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.component.behavior.ClientBehaviorBase;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.RenderKit;
+import javax.faces.render.Renderer;
+import javax.faces.validator.Validator;
+
+import com.sun.faces.util.FacesLogger;
+import javax.faces.event.SystemEvent;
+
+/**
+ * This class represents the central point for annotation handling within a
+ * web application.
+ */
+public class AnnotationManager {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    private static final Scanner RESOURCE_DEPENDENCY_SCANNER = new ResourceDependencyScanner();
+    private static final Scanner LISTENER_FOR_SCANNER = new ListenerForScanner();
+    /*
+     * This code is the prototype implementation for @EJB, @Resource, ..... support.
+     * 
+    private static final Scanner EJB_SCANNER = new DelegatedEJBScanner();
+    private static final Scanner RESOURCE_SCANNER = new DelegatedResourceScanner();
+    private static final Scanner WEBSERVICE_REF_SCANNER = new DelegatedWebServiceRefScanner();
+    private static final Scanner PERSISTENCE_UNIT_SCANNER = new DelegatedPersistenceUnitScanner();
+    private static final Scanner PERSISTENCE_CONTEXT_SCANNER = new DelegatedPersistenceContextScanner();
+    */
+
+    /**
+     * {@link Scanner} instances to be used against {@link Behavior} classes.
+     */
+    private static final Scanner[] BEHAVIOR_SCANNERS = {
+          RESOURCE_DEPENDENCY_SCANNER /*,
+          EJB_SCANNER,
+          RESOURCE_SCANNER,
+          WEBSERVICE_REF_SCANNER,
+          PERSISTENCE_UNIT_SCANNER,
+          PERSISTENCE_CONTEXT_SCANNER */
+    };
+
+    /**
+     * {@link Scanner} instances to be used against {@link ClientBehaviorRenderer} classes.
+     */
+    private static final Scanner[] CLIENT_BEHAVIOR_RENDERER_SCANNERS = {
+          RESOURCE_DEPENDENCY_SCANNER /*,
+          EJB_SCANNER,
+          RESOURCE_SCANNER,
+          WEBSERVICE_REF_SCANNER,
+          PERSISTENCE_UNIT_SCANNER,
+          PERSISTENCE_CONTEXT_SCANNER */
+    };
+
+    /**
+     * {@link Scanner} instances to be used against {@link UIComponent} classes.
+     */
+    private static final Scanner[] UICOMPONENT_SCANNERS = {
+          RESOURCE_DEPENDENCY_SCANNER,
+          LISTENER_FOR_SCANNER /*,
+          EJB_SCANNER,
+          RESOURCE_SCANNER,
+          WEBSERVICE_REF_SCANNER,
+          PERSISTENCE_UNIT_SCANNER,
+          PERSISTENCE_CONTEXT_SCANNER */
+    };
+
+    /**
+     * {@link Scanner} instances to be used against {@link Validator} classes.
+     */
+    private static final Scanner[] VALIDATOR_SCANNERS = {
+          RESOURCE_DEPENDENCY_SCANNER /*,
+          EJB_SCANNER,
+          RESOURCE_SCANNER,
+          WEBSERVICE_REF_SCANNER,
+          PERSISTENCE_UNIT_SCANNER,
+          PERSISTENCE_CONTEXT_SCANNER */
+    };
+
+    /**
+     * {@link Scanner} instances to be used against {@link Converter} classes.
+     */
+    private static final Scanner[] CONVERTER_SCANNERS = {
+          RESOURCE_DEPENDENCY_SCANNER /*,
+          EJB_SCANNER,
+          RESOURCE_SCANNER,
+          WEBSERVICE_REF_SCANNER,
+          PERSISTENCE_UNIT_SCANNER,
+          PERSISTENCE_CONTEXT_SCANNER */
+    };
+
+    /**
+     * {@link Scanner} instances to be used against {@link Renderer} classes.
+     */
+    private static final Scanner[] RENDERER_SCANNERS = {
+          RESOURCE_DEPENDENCY_SCANNER,
+          LISTENER_FOR_SCANNER
+    };
+
+    private static final Scanner[] EVENTS_SCANNERS = {
+          RESOURCE_DEPENDENCY_SCANNER
+    };
+
+    /**
+     * Enum of the different processing targets and their associated
+     * {@link Scanner}s
+     */
+    private enum ProcessingTarget {
+        Behavior(BEHAVIOR_SCANNERS),
+        ClientBehaviorRenderer(CLIENT_BEHAVIOR_RENDERER_SCANNERS),
+        UIComponent(UICOMPONENT_SCANNERS),
+        Validator(VALIDATOR_SCANNERS),
+        Converter(CONVERTER_SCANNERS),
+        Renderer(RENDERER_SCANNERS),
+        SystemEvent(EVENTS_SCANNERS);
+
+
+        @SuppressWarnings({"NonSerializableFieldInSerializableClass"})
+        private Scanner[] scanners;
+        ProcessingTarget(Scanner[] scanners) {
+            this.scanners = scanners;
+        }
+
+    }
+
+    /**
+     * The backing cache for all annotation metadata.
+     */
+    private ConcurrentMap<Class<?>,Future<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>>> cache;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Construct a new AnnotationManager instance.
+     */
+    public AnnotationManager() {
+
+        cache = new ConcurrentHashMap<Class<?>,Future<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>>>(40, .75f, 32);
+
+    }
+
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>
+     * Apply the configuration metadata contained with in the <code>Collection</code>
+     * of annotated classes.
+     * </p>
+     *
+     * @param ctx FacesContext available during application initialization
+     * @param annotatedClasses <code>Collection</code> of class names known
+     *  to contain one or more Faces configuration annotations
+     */
+    public void applyConfigAnnotations(FacesContext ctx,
+                                      Class<? extends Annotation> annotationType,
+                                      Set<? extends Class> annotatedClasses) {
+
+        if (annotatedClasses != null && !annotatedClasses.isEmpty()) {
+            ConfigAnnotationHandler handler =
+                  getConfigAnnotationHandlers().get(annotationType);
+            if (handler == null) {
+                throw new IllegalStateException("Internal Error: No ConfigAnnotationHandler for type: " + annotationType);
+            }
+            for (Class<?> clazz : annotatedClasses) {
+                handler.collect(clazz, clazz.getAnnotation(annotationType));
+            }
+            // metadata collected, now push the configuration to the system
+            handler.push(ctx);
+        }
+        
+    }
+
+    /**
+     * Apply annotations relevant to {@link javax.faces.component.behavior.Behavior} instances.
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @param b the target <code>Behavior</code> to process
+     */
+    public void applyBehaviorAnnotations(FacesContext ctx, Behavior b) {
+
+        applyAnnotations(ctx, b.getClass(), ProcessingTarget.Behavior, b);
+        if (b instanceof ClientBehaviorBase) {
+            ClientBehaviorBase clientBehavior = (ClientBehaviorBase) b;
+            String rendererType = clientBehavior.getRendererType();
+            RenderKit renderKit = ctx.getRenderKit();
+            if( null != rendererType && null != renderKit){
+                ClientBehaviorRenderer behaviorRenderer = renderKit.getClientBehaviorRenderer(rendererType);
+                if(null != behaviorRenderer){
+                    applyClientBehaviorRendererAnnotations(ctx, behaviorRenderer);
+                }
+            }
+        }
+
+    }
+
+    /**
+     * Apply annotations relevant to {@link javax.faces.render.ClientBehaviorRenderer} instances.
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @param b the target <code>ClientBehaviorRenderer</code> to process
+     */
+    public void applyClientBehaviorRendererAnnotations(FacesContext ctx, ClientBehaviorRenderer b) {
+
+        applyAnnotations(ctx, b.getClass(), ProcessingTarget.ClientBehaviorRenderer, b);
+
+    }
+    
+    /**
+     * Apply annotations relevant to {@link javax.faces.component.UIComponent} instances.
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @param c the target <code>UIComponent</code> to process
+     */
+    public void applyComponentAnnotations(FacesContext ctx, UIComponent c) {
+
+        applyAnnotations(ctx, c.getClass(), ProcessingTarget.UIComponent, c);
+
+    }
+
+
+    /**
+     * Apply annotations relevant to {@link javax.faces.validator.Validator} instances.
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @param v the target <code>Validator</code> to process
+     */
+    public void applyValidatorAnnotations(FacesContext ctx, Validator v) {
+
+        applyAnnotations(ctx, v.getClass(), ProcessingTarget.Validator, v);
+
+    }
+
+
+    /**
+     * Apply annotations relevant to {@link javax.faces.convert.Converter} instances.
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @param c the target <code>Converter</code> to process
+     */
+    public void applyConverterAnnotations(FacesContext ctx, Converter c) {
+
+        applyAnnotations(ctx, c.getClass(), ProcessingTarget.Converter, c);
+
+    }
+
+
+    /**
+     * Apply annotations relevent to {@link javax.faces.render.Renderer} instances.
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @param r the <code>Renderer</code> to process
+     * @param c the <code>UIComponent</code> instances that is associated with this
+     *  <code>Renderer</code>
+     */
+    public void applyRendererAnnotations(FacesContext ctx, Renderer r, UIComponent c) {
+
+        applyAnnotations(ctx, r.getClass(), ProcessingTarget.Renderer, r, c);
+
+    }
+
+    public void applySystemEventAnnotations(FacesContext ctx, SystemEvent e) {
+        applyAnnotations(ctx, e.getClass(), ProcessingTarget.SystemEvent, e);
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * @return a new <code>Map</code> which maps the types of annotations to
+     *  a specific <code>ConfigAnnotationHandler</code>.  Note that each invocation
+     *  of this method constructs a new <code>Map</code> with new
+     *  <code>ConfigAnnotationhandler</code> instances as they are not thread
+     *  safe.
+     */
+    private Map<Class<? extends Annotation>,ConfigAnnotationHandler> getConfigAnnotationHandlers() {
+
+        ConfigAnnotationHandler[] handlers = {
+              new ComponentConfigHandler(),
+              new ConverterConfigHandler(),
+              new ValidatorConfigHandler(),
+              new BehaviorConfigHandler(),
+              new RenderKitConfigHandler(),
+              new ManagedBeanConfigHandler(),
+              new NamedEventConfigHandler()
+        };
+        Map<Class<? extends Annotation>,ConfigAnnotationHandler> handlerMap =
+              new HashMap<Class<? extends Annotation>,ConfigAnnotationHandler>();
+        for (ConfigAnnotationHandler handler : handlers) {
+            Collection<Class<? extends Annotation>> handledClasses = handler.getHandledAnnotations();
+            for (Class<? extends Annotation> handled : handledClasses) {
+                handlerMap.put(handled, handler);
+            }
+        }
+
+        return handlerMap;
+
+    }
+    
+
+    /**
+     * Apply all annotations associated with <code>targetClass</code>
+     *
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @param targetClass class of the <code>processingTarget</code>
+     * @param processingTarget the type of component that is being processed
+     * @param params one or more parameters to be passed to each {@link RuntimeAnnotationHandler}
+     */
+    private void applyAnnotations(FacesContext ctx,
+                                  Class<?> targetClass,
+                                  ProcessingTarget processingTarget,
+                                  Object... params) {
+
+        Map<Class<? extends Annotation>, RuntimeAnnotationHandler> map = getHandlerMap(targetClass, processingTarget);
+        if (map != null && !map.isEmpty()) {
+            for (RuntimeAnnotationHandler handler : map.values()) {
+                handler.apply(ctx, params);
+            }
+        }
+
+    }
+
+
+    /**
+     * Helper method to look up cached annotation metadata.
+     * @param targetClass class of the <code>processingTarget</code>
+     * @param processingTarget the type of component being processed
+     * @return a Map keyed by Annotation class with an AnnotationHandler as the
+     *  value
+     */
+    private Map<Class<? extends Annotation>, RuntimeAnnotationHandler> getHandlerMap(Class<?> targetClass,
+                                                                              ProcessingTarget processingTarget) {
+
+        while (true) {
+            Future<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>> f =
+                  cache.get(targetClass);
+            if (f == null) {
+                ProcessAnnotationsTask t =
+                      new ProcessAnnotationsTask(targetClass, processingTarget.scanners);
+                FutureTask<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>> ft =
+                      new FutureTask<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>>(t);
+                f = cache.putIfAbsent(targetClass, ft);
+                if (f == null) {
+                    f = ft;
+                    ft.run();
+                }
+            }
+            try {
+                return f.get();
+            } catch (CancellationException ce) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST,
+                               ce.toString(),
+                               ce);
+                }
+                cache.remove(targetClass);
+            } catch (InterruptedException ie) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST,
+                               ie.toString(),
+                               ie);
+                }
+                cache.remove(targetClass);
+            } catch (ExecutionException ee) {
+                throw new FacesException(ee);
+            }
+        }
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * This <code>Callable</code> will leverage the provided <code>Scanner</code>s
+     * to build a mapping between a particular annotation type and an
+     * <code>AnnotationHandler</code> for that type.
+     */
+    private static final class ProcessAnnotationsTask
+          implements Callable<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>> {
+
+        @SuppressWarnings({"unchecked"})
+        private static final Map<Class<? extends Annotation>, RuntimeAnnotationHandler> EMPTY =
+              Collections.EMPTY_MAP;
+        private Class<?> clazz;
+        private Scanner[] scanners;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+
+        public ProcessAnnotationsTask(Class<?> clazz, Scanner[] scanners) {
+
+            this.clazz = clazz;
+            this.scanners = scanners;
+
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        public Map<Class<? extends Annotation>, RuntimeAnnotationHandler> call() throws Exception {
+
+            Map<Class<? extends Annotation>, RuntimeAnnotationHandler> map = null;
+            for (Scanner scanner : scanners) {
+                    RuntimeAnnotationHandler handler = scanner.scan(clazz);
+                    if (handler != null) {
+                        if (map == null) {
+                            map = new HashMap<Class<? extends Annotation>, RuntimeAnnotationHandler>(2, 1.0f);
+                        }
+                        map.put(scanner.getAnnotation(), handler);
+                    }
+                }
+
+            return ((map != null) ? map : EMPTY);
+            
+        }
+
+    } // END ProcessAnnotationsTask
+}
diff --git a/com/sun/faces/application/annotation/BehaviorConfigHandler.java b/com/sun/faces/application/annotation/BehaviorConfigHandler.java
new file mode 100644
index 0000000..47d8672
--- /dev/null
+++ b/com/sun/faces/application/annotation/BehaviorConfigHandler.java
@@ -0,0 +1,113 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+import javax.faces.application.Application;
+import javax.faces.component.behavior.FacesBehavior;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p>
+ * <code>ConfigAnnotationHandler</code> for {@link FacesBehavior} annotated
+ * classes.
+ * </p>
+ */
+public class BehaviorConfigHandler implements ConfigAnnotationHandler {
+
+    private static final Collection<Class<? extends Annotation>> HANDLES;
+    static {
+        Collection<Class<? extends Annotation>> handles =
+              new ArrayList<Class<? extends Annotation>>(1);
+        handles.add(FacesBehavior.class);
+        HANDLES = Collections.unmodifiableCollection(handles);
+    }
+
+    private Map<String,String> behaviors;
+
+
+    // ------------------------------------- Methods from ComponentConfigHandler
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
+     */
+    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
+
+        return HANDLES;
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
+     */
+    public void collect(Class<?> target, Annotation annotation) {
+
+        if (behaviors == null) {
+            behaviors = new HashMap<String,String>();
+        }
+        behaviors.put(((FacesBehavior) annotation).value(), target.getName());
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
+     */
+    public void push(FacesContext ctx) {
+
+        if (behaviors != null) {
+            Application app = ctx.getApplication();
+            for (Map.Entry<String,String> entry : behaviors.entrySet()) {
+                app.addBehavior(entry.getKey(), entry.getValue());
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/application/annotation/ComponentConfigHandler.java b/com/sun/faces/application/annotation/ComponentConfigHandler.java
new file mode 100644
index 0000000..df82b74
--- /dev/null
+++ b/com/sun/faces/application/annotation/ComponentConfigHandler.java
@@ -0,0 +1,124 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.application.ApplicationAssociate;
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.FacesComponent;
+import javax.faces.application.Application;
+
+/**
+ * <p>
+ * <code>ConfigAnnotationHandler</code> for {@link FacesComponent} annotated
+ * classes.
+ * </p>
+ */
+public class ComponentConfigHandler implements ConfigAnnotationHandler {
+
+    private static final Collection<Class<? extends Annotation>> HANDLES;
+    static {
+        Collection<Class<? extends Annotation>> handles =
+              new ArrayList<Class<? extends Annotation>>(1);
+        handles.add(FacesComponent.class);
+        HANDLES = Collections.unmodifiableCollection(handles);
+    }
+
+    // key: componentId 
+    private Map<String,FacesComponentUsage> components;
+
+
+    // ------------------------------------- Methods from ComponentConfigHandler
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations() 
+     */
+    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
+
+        return HANDLES;
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
+     */
+    public void collect(Class<?> target, Annotation annotation) {
+
+        if (components == null) {
+            components = new HashMap<String,FacesComponentUsage>();
+        }
+        String value = ((FacesComponent) annotation).value();
+        if (null == value || 0 == value.length()) {
+            value = target.getSimpleName();
+            value = Character.toLowerCase(value.charAt(0)) + value.substring(1);
+        }
+        components.put(value,new FacesComponentUsage(target, (FacesComponent) annotation));
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
+     */
+    public void push(FacesContext ctx) {
+
+        if (components != null) {
+            Application app = ctx.getApplication();
+            ApplicationAssociate appAss = ApplicationAssociate.getCurrentInstance();
+            for (Map.Entry<String, FacesComponentUsage> entry : components.entrySet()) {
+                if (entry.getValue().getAnnotation().createTag()) {
+                    appAss.addFacesComponent(entry.getValue());
+                }
+                app.addComponent(entry.getKey(), entry.getValue().getTarget().getName());
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/application/annotation/ConfigAnnotationHandler.java b/com/sun/faces/application/annotation/ConfigAnnotationHandler.java
new file mode 100644
index 0000000..1cfd95c
--- /dev/null
+++ b/com/sun/faces/application/annotation/ConfigAnnotationHandler.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * Implementations of the interface will be called during application
+ * initialization to process any configuration annotations within the
+ * web application.
+ */
+public interface ConfigAnnotationHandler {
+
+    /**
+     * @return a <code>Collection</code> of annotations handled by this
+     *  ConfigAnnotationHandler implementation
+     */
+    public Collection<Class<? extends Annotation>> getHandledAnnotations();
+
+
+    /**
+     * <p>
+     * Collect metadata based on the provided <code>Class</code> and
+     * <code>Annotation</code> to be processed later by {@link #push(javax.faces.context.FacesContext)}.
+     * </p>
+     *
+     * <p>
+     * NOTE: This method may be called more than once.
+     * </p>
+     *
+     *
+     * @param target annotated class
+     * @param annotation <code>Annotation</code> to process
+     */
+    public void collect(Class<?> target, Annotation annotation);
+
+
+    /**
+     * <code>Push<code> the configuration based on the collected metadata
+     * to the current application.
+     */
+    public void push(FacesContext ctx);    
+
+}
diff --git a/com/sun/faces/application/annotation/ConverterConfigHandler.java b/com/sun/faces/application/annotation/ConverterConfigHandler.java
new file mode 100644
index 0000000..0bc5352
--- /dev/null
+++ b/com/sun/faces/application/annotation/ConverterConfigHandler.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.util.FacesLogger;
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+import javax.faces.convert.FacesConverter;
+
+/**
+ * <p>
+ * <code>ConfigAnnotationHandler</code> for {@link FacesConverter} annotated
+ * classes.
+ * </p>
+ */
+public class ConverterConfigHandler implements ConfigAnnotationHandler {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    
+    private static final Collection<Class<? extends Annotation>> HANDLES;
+    
+    static {
+        Collection<Class<? extends Annotation>> handles =
+              new ArrayList<Class<? extends Annotation>>(1);
+        handles.add(FacesConverter.class);
+        HANDLES = Collections.unmodifiableCollection(handles);
+    }
+
+    private Map<Object,String> converters;
+
+
+    // ------------------------------------- Methods from ComponentConfigHandler
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
+     */
+    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
+
+        return HANDLES;
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
+     */
+    @Override
+    public void collect(Class<?> target, Annotation annotation) {
+
+        if (converters == null) {
+            converters = new HashMap<Object,String>();
+        }
+        Object key;
+        FacesConverter converterAnnotation = (FacesConverter) annotation;
+        
+        if (converterAnnotation.value().length() > 0 &&
+                converterAnnotation.forClass() != null &&
+                converterAnnotation.forClass() != Object.class) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING, "@FacesConverter is using both value and forClass, only value will be applied.");
+            }
+        }
+        
+        if (0 == converterAnnotation.value().length()) {
+            key = converterAnnotation.forClass();
+        } else {
+            key = converterAnnotation.value();
+        }
+        converters.put(key, target.getName());
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
+     */
+    public void push(FacesContext ctx) {
+
+        if (converters != null) {
+            Application app = ctx.getApplication();
+            for (Map.Entry<Object, String> entry : converters.entrySet()) {
+                if (entry.getKey() instanceof Class) {
+                    app.addConverter((Class) entry.getKey(), entry.getValue());
+                } else {
+                    app.addConverter((String) entry.getKey(), entry.getValue());
+                }
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/application/annotation/DelegatedEJBScanner.java b/com/sun/faces/application/annotation/DelegatedEJBScanner.java
new file mode 100644
index 0000000..c3350fc
--- /dev/null
+++ b/com/sun/faces/application/annotation/DelegatedEJBScanner.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <code>Scanner</code> implementation responsible for EJB annotations.
+ *
+ * <p> Note this will delegate down to the EJBScanner so we can fail gracefully
+ * when JavaEE is not available. </p>
+ */
+public class DelegatedEJBScanner implements Scanner {
+
+    private Scanner delegate;
+
+    public DelegatedEJBScanner() {
+        try {
+            delegate = new EJBScanner();
+        } catch (Throwable throwable) {
+            throwable.printStackTrace(System.err);
+        }
+    }
+
+    /**
+     * Delegate to the actual EJB scanner.
+     *
+     * @return the annotation.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        if (delegate != null) {
+            return delegate.getAnnotation();
+        }
+        return null;
+    }
+
+    /**
+     * Delegate to the actual EBJ scanner.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        if (delegate != null) {
+            return delegate.scan(clazz);
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/application/annotation/DelegatedPersistenceContextScanner.java b/com/sun/faces/application/annotation/DelegatedPersistenceContextScanner.java
new file mode 100644
index 0000000..1d7966f
--- /dev/null
+++ b/com/sun/faces/application/annotation/DelegatedPersistenceContextScanner.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <code>Scanner</code> implementation responsible for PersistenceContext
+ * annotations.
+ *
+ * <p> Note this will delegate down to the PersistenceContextScanner so we can fail
+ * gracefully when JavaEE is not available. </p>
+ */
+public class DelegatedPersistenceContextScanner implements Scanner {
+
+    private Scanner delegate;
+
+    public DelegatedPersistenceContextScanner() {
+        try {
+            delegate = new PersistenceContextScanner();
+        } catch (Throwable throwable) {
+            throwable.printStackTrace(System.err);
+        }
+    }
+
+    /**
+     * Delegate to the actual PersistenceContext scanner.
+     *
+     * @return the annotation.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        if (delegate != null) {
+            return delegate.getAnnotation();
+        }
+        return null;
+    }
+
+    /**
+     * Delegate to the actual EBJ scanner.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        if (delegate != null) {
+            return delegate.scan(clazz);
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/application/annotation/DelegatedPersistenceUnitScanner.java b/com/sun/faces/application/annotation/DelegatedPersistenceUnitScanner.java
new file mode 100644
index 0000000..0d270a2
--- /dev/null
+++ b/com/sun/faces/application/annotation/DelegatedPersistenceUnitScanner.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <code>Scanner</code> implementation responsible for PersistenceUnit
+ * annotations.
+ *
+ * <p> Note this will delegate down to the PersistenceUnitScanner so we can fail
+ * gracefully when JavaEE is not available. </p>
+ */
+public class DelegatedPersistenceUnitScanner implements Scanner {
+
+    private Scanner delegate;
+
+    public DelegatedPersistenceUnitScanner() {
+        try {
+            delegate = new PersistenceUnitScanner();
+        } catch (Throwable throwable) {
+            throwable.printStackTrace(System.err);
+        }
+    }
+
+    /**
+     * Delegate to the actual PersistenceUnit scanner.
+     *
+     * @return the annotation.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        if (delegate != null) {
+            return delegate.getAnnotation();
+        }
+        return null;
+    }
+
+    /**
+     * Delegate to the actual EBJ scanner.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        if (delegate != null) {
+            return delegate.scan(clazz);
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/application/annotation/DelegatedResourceScanner.java b/com/sun/faces/application/annotation/DelegatedResourceScanner.java
new file mode 100644
index 0000000..10ab5be
--- /dev/null
+++ b/com/sun/faces/application/annotation/DelegatedResourceScanner.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <code>Scanner</code> implementation responsible for link Resource
+ * annotations.
+ *
+ * <p> Note this will delegate down to the ResourceScanner so we can fail
+ * gracefully when JavaEE is not available. </p>
+ */
+public class DelegatedResourceScanner implements Scanner {
+
+    private Scanner delegate;
+
+    public DelegatedResourceScanner() {
+        try {
+            delegate = new ResourceScanner();
+        } catch (Throwable throwable) {
+            throwable.printStackTrace(System.err);
+        }
+    }
+
+    /**
+     * Delegate to the actual Resource scanner.
+     *
+     * @return the annotation.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        if (delegate != null) {
+            return delegate.getAnnotation();
+        }
+        return null;
+    }
+
+    /**
+     * Delegate to the actual EBJ scanner.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        if (delegate != null) {
+            return delegate.scan(clazz);
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/application/annotation/DelegatedWebServiceRefScanner.java b/com/sun/faces/application/annotation/DelegatedWebServiceRefScanner.java
new file mode 100644
index 0000000..9a8fcf0
--- /dev/null
+++ b/com/sun/faces/application/annotation/DelegatedWebServiceRefScanner.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <code>Scanner</code> implementation responsible for {@link WebServiceRef}
+ * annotations.
+ *
+ * <p> Note this will delegate down to the WebServiceRefScanner so we can fail
+ * gracefully when JavaEE is not available. </p>
+ */
+class DelegatedWebServiceRefScanner implements Scanner {
+
+    private Scanner delegate;
+
+    public DelegatedWebServiceRefScanner() {
+        try {
+            delegate = new WebServiceRefScanner();
+        } catch (Throwable throwable) {
+            throwable.printStackTrace(System.err);
+        }
+    }
+
+    /**
+     * Delegate to the actual WebServiceRef scanner.
+     *
+     * @return the annotation.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        if (delegate != null) {
+            return delegate.getAnnotation();
+        }
+        return null;
+    }
+
+    /**
+     * Delegate to the actual EBJ scanner.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        if (delegate != null) {
+            return delegate.scan(clazz);
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/application/annotation/EJBHandler.java b/com/sun/faces/application/annotation/EJBHandler.java
new file mode 100644
index 0000000..cbcdebd
--- /dev/null
+++ b/com/sun/faces/application/annotation/EJBHandler.java
@@ -0,0 +1,103 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import javax.faces.context.FacesContext;
+import javax.ejb.EJB;
+
+/**
+ * {@link RuntimeAnnotationHandler} responsible for processing EJB annotations.
+ */
+class EJBHandler extends JndiHandler implements RuntimeAnnotationHandler {
+
+    private static final String JAVA_MODULE = "java:module/";
+    private Field[] fields;
+    private EJB[] fieldAnnotations;
+    private Method[] methods;
+    private EJB[] methodAnnotations;
+
+    public EJBHandler(
+            Field[] fields, EJB[] fieldAnnotations,
+            Method[] methods, EJB[] methodAnnotations) {
+        this.fields = fields;
+        this.fieldAnnotations = fieldAnnotations;
+        this.methods = methods;
+        this.methodAnnotations = methodAnnotations;
+    }
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    @Override
+    public void apply(FacesContext ctx, Object... params) {
+        Object object = params[0];
+        for (int i = 0; i < fields.length; i++) {
+            applyToField(ctx, fields[0], fieldAnnotations[0], object);
+        }
+
+        for (int i = 0; i < methods.length; i++) {
+            applyToMethod(ctx, methods[i], methodAnnotations[i], object);
+        }
+    }
+
+    private void applyToField(FacesContext facesContext, Field field, EJB ejb, Object instance) {
+        Object value;
+        if (ejb.lookup() != null && !"".equals(ejb.lookup().trim())) {
+            value = lookup(facesContext, ejb.lookup());
+        } else if (ejb.name() != null && !"".equals(ejb.name().trim())) {
+            value = lookup(facesContext, JAVA_COMP_ENV + ejb.name());
+        } else {
+            value = lookup(facesContext, JAVA_MODULE + field.getType().getSimpleName());
+        }
+        setField(facesContext, field, instance, value);
+    }
+
+    private void applyToMethod(FacesContext facesContext, Method method, EJB ejb, Object instance) {
+        if (method.getName().startsWith("set")) {
+            Object value = null;
+            if (ejb.lookup() != null && !"".equals(ejb.lookup().trim())) {
+                value = lookup(facesContext, ejb.lookup());
+            } else if (ejb.name() != null && !"".equals(ejb.name().trim())) {
+                value = lookup(facesContext, JAVA_COMP_ENV + ejb.name());
+            }
+            invokeMethod(facesContext, method, instance, value);
+        }
+    }
+}
diff --git a/com/sun/faces/application/annotation/EJBScanner.java b/com/sun/faces/application/annotation/EJBScanner.java
new file mode 100644
index 0000000..d1f43c4
--- /dev/null
+++ b/com/sun/faces/application/annotation/EJBScanner.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.util.Util;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import javax.ejb.EJB;
+
+/**
+ * <code>Scanner</code> implementation responsible for EJB annotations.
+ */
+class EJBScanner implements Scanner {
+
+    /**
+     * Get the annotation we handle.
+     *
+     * @return the annotation we handle.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        return EJB.class;
+    }
+
+    /**
+     * Scan the specified class for the given annotation.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     * @todo Make sure we get all the fields, handle method and class based injection, handle EJBs.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        Util.notNull("clazz", clazz);
+        EJBHandler handler = null;
+
+        ArrayList<EJB> fieldAnnotations = new ArrayList<EJB>();
+        ArrayList<Field> fields = new ArrayList<Field>();
+
+        for (Field field : clazz.getDeclaredFields()) {
+            EJB fieldAnnotation = field.getAnnotation(EJB.class);
+            if (fieldAnnotation != null) {
+                fieldAnnotations.add(fieldAnnotation);
+                fields.add(field);
+            }
+        }
+        
+        ArrayList<EJB> methodAnnotations = new ArrayList<EJB>();
+        ArrayList<Method> methods = new ArrayList<Method>();
+
+        for (Method method : clazz.getDeclaredMethods()) {
+            EJB methodAnnotation = method.getAnnotation(EJB.class);
+            if (methodAnnotation != null) {
+                methodAnnotations.add(methodAnnotation);
+                methods.add(method);
+            }
+        }
+        if (!fieldAnnotations.isEmpty() || !methodAnnotations.isEmpty()) {
+            handler = new EJBHandler(
+                    fields.toArray(new Field[0]), (EJB[]) fieldAnnotations.toArray(new EJB[0]),
+                    methods.toArray(new Method[0]), (EJB[]) methodAnnotations.toArray(new EJB[0]));
+        }
+        return handler;
+    }
+}
diff --git a/com/sun/faces/application/annotation/FacesComponentUsage.java b/com/sun/faces/application/annotation/FacesComponentUsage.java
new file mode 100644
index 0000000..a6ec139
--- /dev/null
+++ b/com/sun/faces/application/annotation/FacesComponentUsage.java
@@ -0,0 +1,65 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application.annotation;
+
+import javax.faces.component.FacesComponent;
+
+public class FacesComponentUsage {
+    private Class<?> target;
+    private FacesComponent annotation;
+    
+    public FacesComponentUsage(Class<?> target, FacesComponent annotation) {
+        this.target = target;
+        this.annotation = annotation;
+    }
+
+    public FacesComponent getAnnotation() {
+        return annotation;
+    }
+
+    public Class<?> getTarget() {
+        return target;
+    }
+    
+    
+}
+
+    
diff --git a/com/sun/faces/application/annotation/JndiHandler.java b/com/sun/faces/application/annotation/JndiHandler.java
new file mode 100644
index 0000000..84e2489
--- /dev/null
+++ b/com/sun/faces/application/annotation/JndiHandler.java
@@ -0,0 +1,167 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.FacesContext;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+/**
+ * An abstract RuntimeAnnotationHandler that is capable of dealing with JNDI.
+ */
+public abstract class JndiHandler implements RuntimeAnnotationHandler {
+
+    /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = Logger.getLogger(JndiHandler.class.getName());
+    /**
+     * Stores the java:comp/env/ prefix
+     */
+    protected static final String JAVA_COMP_ENV = "java:comp/env/";
+
+    /**
+     * Look up the given object using its JNDI name.
+     *
+     * @param facesContext the Faces context.
+     * @param name the JNDI name.
+     * @return the object, or null if an error occurs.
+     */
+    public Object lookup(FacesContext facesContext, String name) {
+        Object object = null;
+        try {
+            InitialContext context = new InitialContext();
+            object = context.lookup(name);
+        } catch (NamingException ne) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING, "Unable to lookup: " + name, ne);
+            }
+            if (facesContext.isProjectStage(ProjectStage.Development)) {
+                facesContext.addMessage(null, new FacesMessage("Unable to lookup: " + name, "Unable to lookup: " + name));
+            }
+        }
+        return object;
+    }
+
+    /**
+     * Set the field.
+     *
+     * @param facesContext the Faces context.
+     * @param field the field.
+     * @param instance the instance.
+     * @param value the value.
+     */
+    public void setField(FacesContext facesContext, Field field, Object instance, Object value) {
+        synchronized (instance) {
+            try {
+                boolean fieldAccessible = true;
+                if (!field.isAccessible()) {
+                    field.setAccessible(true);
+                    fieldAccessible = false;
+                }
+                field.set(instance, value);
+                if (!fieldAccessible) {
+                    field.setAccessible(false);
+                }
+            } catch (IllegalArgumentException iae) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, "Unable to set field: " + field.getName(), iae);
+                }
+                if (facesContext.isProjectStage(ProjectStage.Development)) {
+                    facesContext.addMessage(null, new FacesMessage("Unable to set field: " + field.getName(), "Unable to set field: " + field.getName()));
+                }
+            } catch (IllegalAccessException iae) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, "Unable to set field: " + field.getName(), iae);
+                }
+                if (facesContext.isProjectStage(ProjectStage.Development)) {
+                    facesContext.addMessage(null, new FacesMessage("Unable to set field: " + field.getName(), "Unable to set field: " + field.getName()));
+                }
+            }
+        }
+    }
+
+    /**
+     * Invoke the method.
+     * 
+     * @param facesContext the Faces context.
+     * @param method the method.
+     * @param instance the instance.
+     * @param value the value.
+     */
+    protected void invokeMethod(FacesContext facesContext, Method method, Object instance, Object value) {
+        synchronized (instance) {
+            try {
+                boolean accessible = method.isAccessible();
+                method.setAccessible(false);
+                method.invoke(instance, value);
+                method.setAccessible(accessible);
+            } catch (InvocationTargetException ite) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, "Unable to call method: " + method.getName(), ite);
+                }
+                if (facesContext.isProjectStage(ProjectStage.Development)) {
+                    facesContext.addMessage(null, new FacesMessage("Unable to call method: " + method.getName(), "Unable to call method: " + method.getName()));
+                }
+            } catch (IllegalArgumentException iae) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, "Unable to call method: " + method.getName(), iae);
+                }
+                if (facesContext.isProjectStage(ProjectStage.Development)) {
+                    facesContext.addMessage(null, new FacesMessage("Unable to call method: " + method.getName(), "Unable to call method: " + method.getName()));
+                }
+            } catch (IllegalAccessException iae) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, "Unable to call method: " + method.getName(), iae);
+                }
+                if (facesContext.isProjectStage(ProjectStage.Development)) {
+                    facesContext.addMessage(null, new FacesMessage("Unable to call method: " + method.getName(), "Unable to call method: " + method.getName()));
+                }
+            }
+        }
+    }
+}
diff --git a/com/sun/faces/application/annotation/ListenerForHandler.java b/com/sun/faces/application/annotation/ListenerForHandler.java
new file mode 100644
index 0000000..0890674
--- /dev/null
+++ b/com/sun/faces/application/annotation/ListenerForHandler.java
@@ -0,0 +1,113 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import javax.faces.application.Application;
+import javax.faces.event.ListenerFor;
+import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.event.SystemEventListener;
+
+/**
+ * {@link RuntimeAnnotationHandler} responsible for processing {@link ListenerFor} annotations.
+ */
+class ListenerForHandler implements RuntimeAnnotationHandler {
+
+    private ListenerFor[] listenersFor;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ListenerForHandler(ListenerFor[] listenersFor) {
+
+        this.listenersFor = listenersFor;
+
+    }
+
+
+    // ----------------------------------- Methods from RuntimeAnnotationHandler
+
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    public void apply(FacesContext ctx, Object... params) {
+
+        Object listener;
+        UIComponent target;
+        if (params.length == 2) {
+            // handling @ListenerFor on a Renderer
+            listener = params[0];
+            target = (UIComponent) params[1];
+        } else {
+            // handling @ListenerFor on a UIComponent
+            listener = params[0];
+            target = (UIComponent) params[0];
+        }
+
+        if (listener instanceof ComponentSystemEventListener) {
+            for (int i = 0, len = listenersFor.length; i < len; i++) {
+                    target.subscribeToEvent(listenersFor[i].systemEventClass(),
+                                            (ComponentSystemEventListener) listener);
+            }
+        }
+	else if (listener instanceof SystemEventListener) {
+	    Class sourceClassValue = null;
+	    Application app = ctx.getApplication();
+            for (int i = 0, len = listenersFor.length; i < len; i++) {
+		sourceClassValue = listenersFor[i].sourceClass();
+		if (sourceClassValue == Void.class) {
+		    app.subscribeToEvent(listenersFor[i].systemEventClass(), 
+					 (SystemEventListener) listener); 
+                }
+                else {
+		    app.subscribeToEvent(listenersFor[i].systemEventClass(), 
+					 listenersFor[i].sourceClass(),
+					 (SystemEventListener) listener); 
+                    
+                }
+	    }
+	}
+
+
+    }
+
+}
diff --git a/com/sun/faces/application/annotation/ListenerForScanner.java b/com/sun/faces/application/annotation/ListenerForScanner.java
new file mode 100644
index 0000000..1426e4c
--- /dev/null
+++ b/com/sun/faces/application/annotation/ListenerForScanner.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+import javax.faces.event.ListenerFor;
+import javax.faces.event.ListenersFor;
+
+import com.sun.faces.util.Util;
+
+/**
+ * <code>Scanner</code> implementation responsible for {@link ListenerFor} annotations.
+ */
+class ListenerForScanner implements Scanner {
+
+
+    // ---------------------------------------------------- Methods from Scanner
+
+
+    public Class<? extends Annotation> getAnnotation() {
+
+        return ListenerFor.class;
+
+    }
+
+
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+
+        Util.notNull("clazz", clazz);
+
+        ListenerForHandler handler = null;
+        ListenerFor listenerFor = clazz.getAnnotation(ListenerFor.class);
+        if (listenerFor != null) {
+            handler = new ListenerForHandler(new ListenerFor[] { listenerFor });
+        } else {
+            ListenersFor listenersFor = clazz.getAnnotation(ListenersFor.class);
+            if (listenersFor != null) {
+                handler = new ListenerForHandler(listenersFor.value());
+            }
+        }
+
+        return handler;
+
+    }
+    
+}
diff --git a/com/sun/faces/application/annotation/ManagedBeanConfigHandler.java b/com/sun/faces/application/annotation/ManagedBeanConfigHandler.java
new file mode 100644
index 0000000..cf68d43
--- /dev/null
+++ b/com/sun/faces/application/annotation/ManagedBeanConfigHandler.java
@@ -0,0 +1,309 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.LinkedHashMap;
+import javax.faces.bean.*;
+import javax.faces.context.FacesContext;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.mgbean.ManagedBeanInfo;
+
+/**
+ * <p>
+ * <code>ConfigAnnotationHandler</code> for {@link ManagedBean} annotated
+ * classes.
+ * </p>
+ */
+public class ManagedBeanConfigHandler implements ConfigAnnotationHandler {
+
+    private static final Class<?>[] SCOPES = {
+          RequestScoped.class,
+          ViewScoped.class,
+          SessionScoped.class,
+          ApplicationScoped.class,
+          NoneScoped.class,
+          CustomScoped.class
+    };
+
+    private static final Collection<Class<? extends Annotation>> HANDLES;
+    static {
+        Collection<Class<? extends Annotation>> handles =
+              new ArrayList<Class<? extends Annotation>>(2);
+        handles.add(ManagedBean.class);
+        HANDLES = Collections.unmodifiableCollection(handles);
+    }
+
+    private Map<Class<?>,Annotation> managedBeans;
+
+
+    // ------------------------------------ Methods from ConfigAnnotationHandler
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
+     */
+    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
+
+        return HANDLES;
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
+     */
+    public void collect(Class<?> target, Annotation annotation) {
+
+        if (managedBeans == null) {
+            managedBeans = new HashMap<Class<?>,Annotation>();
+        }
+        managedBeans.put(target, annotation);
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
+     */
+    public void push(FacesContext ctx) {
+
+        if (managedBeans != null) {
+            ApplicationAssociate associate =
+                  ApplicationAssociate.getInstance(ctx.getExternalContext());
+            if (associate != null) {
+                BeanManager manager = associate.getBeanManager();
+                for (Map.Entry<Class<?>,Annotation> entry : managedBeans.entrySet()) {
+                    process(manager, entry.getKey(), entry.getValue());
+                }
+            }
+        }
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void process(BeanManager manager,
+                         Class<?> annotatedClass,
+                         Annotation annotation) {
+
+            manager.register(getBeanInfo(annotatedClass,
+                                         (ManagedBean) annotation));
+    }
+
+
+    private ManagedBeanInfo getBeanInfo(Class<?> annotatedClass,
+                                        ManagedBean metadata) {
+
+        String name = getName(metadata, annotatedClass);
+        String scope = getScope(annotatedClass);
+        boolean eager = metadata.eager();
+        
+        Map<String,Field> annotatedFields = new LinkedHashMap<String,Field>();
+        //Map<String, Method> annotatedMethods = new LinkedHashMap<String,Method>();
+        collectAnnotatedFields(annotatedClass, annotatedFields);
+        //collectAnnotatedMethods(annotatedClass,
+        //                        annotatedMethods,
+        //                        annotatedFields.keySet());
+
+        List<ManagedBeanInfo.ManagedProperty> properties = null;
+
+        if (!annotatedFields.isEmpty()) {
+            properties = new ArrayList<ManagedBeanInfo.ManagedProperty>(annotatedFields.size());
+            for (Map.Entry<String,Field> entry : annotatedFields.entrySet()) {
+                Field f = entry.getValue();
+                ManagedProperty property = f.getAnnotation(ManagedProperty.class);
+                ManagedBeanInfo.ManagedProperty propertyInfo =
+                          new ManagedBeanInfo.ManagedProperty(entry.getKey(),
+                                                              f.getType().getName(),
+                                                              property.value(),
+                                                              null,
+                                                              null);
+                properties.add(propertyInfo);
+            }
+        }
+        /*
+        if (!annotatedMethods.isEmpty()) {
+            if (properties == null) {
+                properties = new ArrayList<ManagedBeanInfo.ManagedProperty>(annotatedMethods.size());
+                for (Map.Entry<String,Method> entry : annotatedMethods.entrySet()) {
+                    Method m = entry.getValue();
+                    ManagedProperty property = m.getAnnotation(ManagedProperty.class);
+                    String alias = property.name();
+                    if (alias != null && alias.length() == 0) {
+                        alias = null;
+                    }
+                    ManagedBeanInfo.ManagedProperty propertyInfo =
+                          new ManagedBeanInfo.ManagedProperty(alias,
+                                                              entry.getKey(),
+                                                              m.getParameterTypes()[0].getName(),
+                                                              property.value(),
+                                                              null,
+                                                              null);
+                    properties.add(propertyInfo);
+                }
+            }
+        }
+        */
+
+        return new ManagedBeanInfo(name,
+                                   annotatedClass.getName(),
+                                   scope,
+                                   eager,
+                                   null,
+                                   null,
+                                   properties,
+                                   null);
+
+    }
+
+
+//    private void collectAnnotatedMethods(Class<?> baseClass,
+//                                         Map<String,Method> annotatedMethods,
+//                                         Set<String> annotatedFields) {
+//
+//        Method[] methods = baseClass.getDeclaredMethods();
+//        for (Method method : methods) {
+//            ManagedProperty property = method.getAnnotation(ManagedProperty.class);
+//            if (property != null) {
+//
+//                if (!method.getName().startsWith("set")
+//                    || method.getParameterTypes().length != 1) {
+//                    continue;
+//                }
+//                StringBuilder sb =
+//                      new StringBuilder(method.getName().substring(3));
+//                char c = sb.charAt(0);
+//                sb.deleteCharAt(0);
+//                sb.insert(0, Character.toLowerCase(c));
+//                String propName = sb.toString();
+//
+//                if (!annotatedFields.contains(propName) && !annotatedMethods.containsKey(propName)) {
+//                    annotatedMethods.put(propName, method);
+//                }
+//            }
+//        }
+//        Class<?> superClass = baseClass.getSuperclass();
+//        if (!Object.class.equals(superClass)) {
+//            collectAnnotatedMethods(superClass, annotatedMethods, annotatedFields);
+//        }
+//    }
+
+
+    private void collectAnnotatedFields(Class<?> baseClass, Map<String,Field> annotatedFields) {
+
+        Field[] fields = baseClass.getDeclaredFields();
+        for (Field field : fields) {
+            ManagedProperty property = field.getAnnotation(ManagedProperty.class);
+            if (property != null) {
+                String propName = property.name();
+                if (propName == null || propName.length() == 0) {
+                    propName = field.getName();
+                }
+                // if the field has already been collected, don't replace the existing
+                // value as that value represents an override.
+                if (!annotatedFields.containsKey(propName)) {
+                    annotatedFields.put(propName, field);
+                }
+            }
+        }
+        Class<?> superClass = baseClass.getSuperclass();
+        if (!Object.class.equals(superClass)) {
+            collectAnnotatedFields(superClass, annotatedFields);
+        }
+
+    }
+
+
+    private String getScope(Class<?> annotatedClass) {
+
+        for (Class<?> scope : SCOPES) {
+            //noinspection unchecked
+            Annotation a = annotatedClass.getAnnotation((Class<? extends Annotation>) scope);
+            if (a != null) {
+                if (a instanceof RequestScoped) {
+                    return "request";
+                } else if (a instanceof ViewScoped) {
+                    return "view";
+                } if (a instanceof SessionScoped) {
+                    return "session";
+                } else if (a instanceof ApplicationScoped) {
+                    return "application";
+                } else if (a instanceof NoneScoped) {
+                    return "none";
+                } else if (a instanceof CustomScoped) {
+                    return ((CustomScoped) a).value();
+                }
+            }
+        }
+
+        return "request";
+
+    }
+
+
+    private String getName(ManagedBean managedBean, Class<?> annotatedClass) {
+
+        String name = managedBean.name();
+
+        if (name.length() == 0) {
+            String t = annotatedClass.getName();
+            name = t.substring(t.lastIndexOf('.') + 1);
+            char[] nameChars = name.toCharArray();
+            nameChars[0] = Character.toLowerCase(nameChars[0]);
+            name = new String(nameChars);
+        }
+
+        return name;
+
+    }
+
+
+}
diff --git a/com/sun/faces/application/annotation/NamedEventConfigHandler.java b/com/sun/faces/application/annotation/NamedEventConfigHandler.java
new file mode 100644
index 0000000..800ae4c
--- /dev/null
+++ b/com/sun/faces/application/annotation/NamedEventConfigHandler.java
@@ -0,0 +1,129 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.NamedEventManager;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import javax.faces.context.FacesContext;
+import javax.faces.event.NamedEvent;
+import javax.faces.event.SystemEvent;
+
+/**
+ * This class handles the processing the NamedEvent annotation.  For each class
+ * with this annotation, the following logic is applied:
+ * <ol>
+ *      <li>Get the unqualified class name (e.g., UserLoginEvent)</li>
+ *      <li>Strip off the trailing "Event", if present (e.g., UserLogin)</li>
+ *      <li>Convert the first character to lower-case (e.g., userLogin)</li>
+ *      <li>Prepend the package name to the lower-cased name</li>
+ *      <li>If the <code>shortName</code> attribute is specified, register the
+ *          event by that name as well.</li>
+ * </ol>
+ */
+public class NamedEventConfigHandler implements ConfigAnnotationHandler {
+
+    private Map<Class<?>, Annotation> namedEvents;
+    private static final Collection<Class<? extends Annotation>> HANDLES;
+
+
+    static {
+        Collection<Class<? extends Annotation>> handles =
+                new ArrayList<Class<? extends Annotation>>(2);
+        handles.add(NamedEvent.class);
+        HANDLES = Collections.unmodifiableCollection(handles);
+    }
+
+    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
+        return HANDLES;
+    }
+
+    public void collect(Class<?> target, Annotation annotation) {
+        if (namedEvents == null) {
+            namedEvents = new HashMap<Class<?>, Annotation>();
+        }
+        namedEvents.put(target, annotation);
+    }
+
+    public void push(FacesContext ctx) {
+        if (namedEvents != null) {
+            ApplicationAssociate associate =
+                    ApplicationAssociate.getInstance(ctx.getExternalContext());
+            if (associate != null) {
+                NamedEventManager nem = associate.getNamedEventManager();
+                for (Map.Entry<Class<?>, Annotation> entry : namedEvents.entrySet()) {
+                    process(nem, entry.getKey(), entry.getValue());
+                }
+            }
+        }
+    }
+
+    // --------------------------------------------------------- Private Methods
+    /*
+     */
+    private void process(NamedEventManager nem,
+            Class<?> annotatedClass,
+            Annotation annotation) {
+        String name = annotatedClass.getSimpleName();
+        int index = name.lastIndexOf("Event");
+        if (index > -1) {
+            name = name.substring(0, index);
+        }
+
+        name = annotatedClass.getPackage().getName() + ("." + name.charAt(0)).toLowerCase() + name.substring(1);
+        nem.addNamedEvent(name, (Class<? extends SystemEvent>) annotatedClass);
+
+        String shortName = ((NamedEvent) annotation).shortName();
+
+        if (!"".equals(shortName)) {
+            if (nem.isDuplicateNamedEvent(shortName)) {
+                nem.addDuplicateName(shortName, (Class<? extends SystemEvent>) annotatedClass);
+            } else {
+                nem.addNamedEvent(shortName, (Class<? extends SystemEvent>) annotatedClass);
+            }
+        }
+    }
+}
diff --git a/com/sun/faces/application/annotation/PersistenceContextHandler.java b/com/sun/faces/application/annotation/PersistenceContextHandler.java
new file mode 100644
index 0000000..bd02056
--- /dev/null
+++ b/com/sun/faces/application/annotation/PersistenceContextHandler.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import javax.faces.context.FacesContext;
+import javax.persistence.PersistenceContext;
+
+/**
+ * {@link RuntimeAnnotationHandler} responsible for processing annotations.
+ */
+class PersistenceContextHandler extends JndiHandler implements RuntimeAnnotationHandler {
+
+    private Method[] methods;
+    private PersistenceContext[] methodAnnotations;
+    private Field[] fields;
+    private PersistenceContext[] fieldAnnotations;
+
+    public PersistenceContextHandler(
+            Method[] methods, PersistenceContext[] methodAnnotations,
+            Field[] fields, PersistenceContext[] fieldAnnotations) {
+        this.methods = methods;
+        this.methodAnnotations = methodAnnotations;
+        this.fields = fields;
+        this.fieldAnnotations = fieldAnnotations;
+    }
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    @Override
+    public void apply(FacesContext ctx, Object... params) {
+        Object object = params[0];
+        for (int i = 0; i < fields.length; i++) {
+            applyToField(ctx, fields[i], fieldAnnotations[i], object);
+        }
+
+        for (int i = 0; i < methods.length; i++) {
+            applyToMethod(ctx, methods[i], methodAnnotations[i], object);
+        }
+    }
+
+    private void applyToMethod(FacesContext facesContext, Method method, PersistenceContext unit, Object instance) {
+        if (method.getName().startsWith("set")) {
+            Object value = null;
+            if (unit.name() != null && !"".equals(unit.name().trim())) {
+                value = lookup(facesContext, JAVA_COMP_ENV + unit.name());
+            }
+            invokeMethod(facesContext, method, instance, value);
+        }
+    }
+
+    private void applyToField(FacesContext facesContext, Field field, PersistenceContext unit, Object instance) {
+        Object value;
+        if (unit.name() != null && !"".equals(unit.name().trim())) {
+            value = lookup(facesContext, JAVA_COMP_ENV + unit.name());
+        } else {
+            value = lookup(facesContext, field.getType().getSimpleName());
+        }
+        setField(facesContext, field, instance, value);
+    }
+}
diff --git a/com/sun/faces/application/annotation/PersistenceContextScanner.java b/com/sun/faces/application/annotation/PersistenceContextScanner.java
new file mode 100644
index 0000000..6eaf36a
--- /dev/null
+++ b/com/sun/faces/application/annotation/PersistenceContextScanner.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.util.Util;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import javax.persistence.PersistenceContext;
+
+/**
+ * <code>Scanner</code> implementation responsible for {@link PersistenceContext} annotations.
+ */
+class PersistenceContextScanner implements Scanner {
+
+    /**
+     * Get the annotation we handle.
+     *
+     * @return the annotation we handle.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        return PersistenceContext.class;
+    }
+
+    /**
+     * Scan the specified class for the given annotation.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     * @todo Make sure we get all the fields, handle method and class based injection, handle PersistenceContexts.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        Util.notNull("clazz", clazz);
+        PersistenceContextHandler handler = null;
+
+        ArrayList<PersistenceContext> fieldAnnotations = new ArrayList<PersistenceContext>();
+        ArrayList<Field> fields = new ArrayList<Field>();
+
+        for (Field field : clazz.getDeclaredFields()) {
+            PersistenceContext fieldAnnotation = field.getAnnotation(PersistenceContext.class);
+            if (fieldAnnotation != null) {
+                fieldAnnotations.add(fieldAnnotation);
+                fields.add(field);
+            }
+        }
+        
+        ArrayList<PersistenceContext> methodAnnotations = new ArrayList<PersistenceContext>();
+        ArrayList<Method> methods = new ArrayList<Method>();
+        for (Method method : clazz.getDeclaredMethods()) {
+            PersistenceContext methodAnnotation = method.getAnnotation(PersistenceContext.class);
+            if (methodAnnotation != null) {
+                methodAnnotations.add(methodAnnotation);
+                methods.add(method);
+            }
+        }
+        
+        if (!fieldAnnotations.isEmpty() || !methodAnnotations.isEmpty()) {
+            handler = new PersistenceContextHandler(
+                    methods.toArray(new Method[0]), methodAnnotations.toArray(new PersistenceContext[0]),
+                    fields.toArray(new Field[0]), fieldAnnotations.toArray(new PersistenceContext[0]));
+        }
+        return handler;
+    }
+}
diff --git a/com/sun/faces/application/annotation/PersistenceUnitHandler.java b/com/sun/faces/application/annotation/PersistenceUnitHandler.java
new file mode 100644
index 0000000..885cecc
--- /dev/null
+++ b/com/sun/faces/application/annotation/PersistenceUnitHandler.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import javax.faces.context.FacesContext;
+import javax.persistence.PersistenceUnit;
+
+/**
+ * {@link RuntimeAnnotationHandler} responsible for processing
+ * {@link PersistenceUnit} annotations.
+ */
+class PersistenceUnitHandler extends JndiHandler implements RuntimeAnnotationHandler {
+
+    private Method[] methods;
+    private PersistenceUnit[] methodAnnotations;
+    private Field[] fields;
+    private PersistenceUnit[] fieldAnnotations;
+
+    public PersistenceUnitHandler(
+            Method[] methods, PersistenceUnit[] methodAnnotations,
+            Field[] fields, PersistenceUnit[] fieldAnnotations) {
+        this.methods = methods;
+        this.methodAnnotations = methodAnnotations;
+        this.fields = fields;
+        this.fieldAnnotations = fieldAnnotations;
+    }
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    @Override
+    public void apply(FacesContext ctx, Object... params) {
+        Object object = params[0];
+        for (int i = 0; i < fields.length; i++) {
+            applyToField(ctx, fields[i], fieldAnnotations[i], object);
+        }
+        
+        for (int i=0; i<methods.length; i++) {
+            applyToMethod(ctx, methods[i], methodAnnotations[i], object);
+        }
+    }
+
+    private void applyToMethod(FacesContext facesContext, Method method, PersistenceUnit unit, Object instance) {
+        if (method.getName().startsWith("set")) {
+            Object value = null;
+            if (unit.name() != null && !"".equals(unit.name().trim())) {
+                value = lookup(facesContext, JAVA_COMP_ENV + unit.name());
+            }
+            invokeMethod(facesContext, method, instance, value);
+        }
+    }
+
+    private void applyToField(FacesContext facesContext, Field field, PersistenceUnit unit, Object instance) {
+        Object value;
+        if (unit.name() != null && !"".equals(unit.name().trim())) {
+            value = lookup(facesContext, JAVA_COMP_ENV + unit.name());
+        } else {
+            value = lookup(facesContext, field.getType().getSimpleName());
+        }
+        setField(facesContext, field, instance, value);
+    }
+}
diff --git a/com/sun/faces/application/annotation/PersistenceUnitScanner.java b/com/sun/faces/application/annotation/PersistenceUnitScanner.java
new file mode 100644
index 0000000..8f55740
--- /dev/null
+++ b/com/sun/faces/application/annotation/PersistenceUnitScanner.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.util.Util;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import javax.persistence.PersistenceUnit;
+
+/**
+ * <code>Scanner</code> implementation responsible for {@link PersistenceUnit} annotations.
+ */
+class PersistenceUnitScanner implements Scanner {
+
+    /**
+     * Get the annotation we handle.
+     *
+     * @return the annotation we handle.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        return PersistenceUnit.class;
+    }
+
+    /**
+     * Scan the specified class for the given annotation.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     * @todo Make sure we get all the fields, handle method and class based injection, handle PersistenceUnits.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        Util.notNull("clazz", clazz);
+        PersistenceUnitHandler handler = null;
+
+        ArrayList<PersistenceUnit> fieldAnnotations = new ArrayList<PersistenceUnit>();
+        ArrayList<Field> fields = new ArrayList<Field>();
+
+        for (Field field : clazz.getDeclaredFields()) {
+            PersistenceUnit fieldAnnotation = field.getAnnotation(PersistenceUnit.class);
+            if (fieldAnnotation != null) {
+                fieldAnnotations.add(fieldAnnotation);
+                fields.add(field);
+            }
+        }
+        
+        ArrayList<PersistenceUnit> methodAnnotations = new ArrayList<PersistenceUnit>();
+        ArrayList<Method> methods = new ArrayList<Method>();
+        for (Method method : clazz.getDeclaredMethods()) {
+            PersistenceUnit methodAnnotation = method.getAnnotation(PersistenceUnit.class);
+            if (methodAnnotation != null) {
+                methodAnnotations.add(methodAnnotation);
+                methods.add(method);
+            }
+        }
+        
+        if (!fieldAnnotations.isEmpty() || !methodAnnotations.isEmpty()) {
+            handler = new PersistenceUnitHandler(
+                    methods.toArray(new Method[0]), methodAnnotations.toArray(new PersistenceUnit[0]),
+                    fields.toArray(new Field[0]), fieldAnnotations.toArray(new PersistenceUnit[0]));
+        }
+        return handler;
+    }
+}
diff --git a/com/sun/faces/application/annotation/RenderKitConfigHandler.java b/com/sun/faces/application/annotation/RenderKitConfigHandler.java
new file mode 100644
index 0000000..d02436c
--- /dev/null
+++ b/com/sun/faces/application/annotation/RenderKitConfigHandler.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+import javax.faces.context.FacesContext;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.FacesBehaviorRenderer;
+import javax.faces.render.FacesRenderer;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.RenderKit;
+import javax.faces.render.Renderer;
+import javax.faces.FactoryFinder;
+import javax.faces.FacesException;
+
+/**
+ * <p> <code>ConfigAnnotationHandler</code> {@link FacesRenderer} annotated classes.</p>
+ */
+public class RenderKitConfigHandler implements ConfigAnnotationHandler {
+
+    private static final Collection<Class<? extends Annotation>> HANDLES;
+
+    static {
+        Collection<Class<? extends Annotation>> handles =
+              new ArrayList<Class<? extends Annotation>>(2);
+        handles.add(FacesRenderer.class);
+        handles.add(FacesBehaviorRenderer.class);
+        HANDLES = Collections.unmodifiableCollection(handles);
+    }
+
+    Map<Class<?>, Annotation> annotatedRenderers;
+
+    // ------------------------------------- Methods from ComponentConfigHandler
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
+     */
+    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
+
+        return HANDLES;
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
+     */
+    public void collect(Class<?> target, Annotation annotation) {
+
+        if (annotatedRenderers == null) {
+            annotatedRenderers = new HashMap<Class<?>, Annotation>();
+        }
+        annotatedRenderers.put(target,  annotation);
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
+     */
+    public void push(FacesContext ctx) {
+
+
+        if (annotatedRenderers != null) {
+            RenderKitFactory rkf = (RenderKitFactory) FactoryFinder
+            .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+			for (Map.Entry<Class<?>, Annotation> entry : annotatedRenderers
+					.entrySet()) {
+				Class<?> rClass = entry.getKey();
+				if (entry.getValue() instanceof FacesRenderer) {
+					FacesRenderer ra = (FacesRenderer) entry.getValue();
+					try {
+						RenderKit rk = rkf.getRenderKit(ctx, ra.renderKitId());
+						if (rk == null) {
+							throw new IllegalStateException(
+									"Error processing annotated Renderer "
+											+ ra.toString()
+											+ " on class "
+											+ rClass.getName()
+											+ ".  Unable to find specified RenderKit.");
+						}
+						rk.addRenderer(ra.componentFamily(), ra.rendererType(),
+								(Renderer) rClass.newInstance());
+					} catch (Exception e) {
+						throw new FacesException(e);
+					}
+				} else if (entry.getValue() instanceof FacesBehaviorRenderer) {
+					FacesBehaviorRenderer bra = (FacesBehaviorRenderer) entry
+							.getValue();
+					try {
+						RenderKit rk = rkf.getRenderKit(ctx, bra.renderKitId());
+						if (rk == null) {
+							throw new IllegalStateException(
+									"Error processing annotated ClientBehaviorRenderer "
+											+ bra.toString()
+											+ " on class "
+											+ rClass.getName()
+											+ ".  Unable to find specified RenderKit.");
+						}
+						rk.addClientBehaviorRenderer(bra.rendererType(),
+								(ClientBehaviorRenderer) rClass.newInstance());
+					} catch (Exception e) {
+						throw new FacesException(e);
+					}
+				}
+			}
+		}
+
+    }
+
+}
diff --git a/com/sun/faces/application/annotation/ResourceDependencyHandler.java b/com/sun/faces/application/annotation/ResourceDependencyHandler.java
new file mode 100644
index 0000000..2d9ac58
--- /dev/null
+++ b/com/sun/faces/application/annotation/ResourceDependencyHandler.java
@@ -0,0 +1,243 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.HashSet;
+
+import javax.el.ValueExpression;
+import javax.faces.application.ResourceDependency;
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.util.RequestStateManager;
+
+/**
+ * {@link RuntimeAnnotationHandler} responsible for processing {@link ResourceDependency} annotations.
+ */
+class ResourceDependencyHandler implements RuntimeAnnotationHandler {
+
+    private ResourceDependency[] dependencies;
+    private Map<ResourceDependency,Expressions> expressionsMap;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ResourceDependencyHandler(ResourceDependency[] dependencies) {
+
+        this.dependencies = dependencies;
+        Map<Object, Object> attrs = FacesContext.getCurrentInstance().getAttributes();
+        expressionsMap = new HashMap<ResourceDependency,Expressions>(dependencies.length, 1.0f);
+        for (ResourceDependency dep : dependencies) {
+            Expressions exprs = new Expressions();
+            exprs.name = dep.name();
+            String lib = dep.library();
+            if (lib.length() > 0) {
+                // Take special action to resolve the "this" library name
+                if ("this".equals(lib)) {
+                    String thisLibrary = (String)
+                            attrs.get(com.sun.faces.application.ApplicationImpl.THIS_LIBRARY);
+                    assert(null != thisLibrary);
+                    lib = thisLibrary;
+                }
+
+                exprs.library = lib;
+            }
+            String tgt = dep.target();
+            if (tgt.length() > 0) {
+                exprs.target = tgt;
+            }
+            expressionsMap.put(dep, exprs);
+        }
+
+    }
+
+
+    // ----------------------------------- Methods from RuntimeAnnotationHandler
+    
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    public void apply(FacesContext ctx, Object... params) {
+
+        for (ResourceDependency dep : dependencies) {
+            if (!hasBeenProcessed(ctx, dep)) {
+                pushResourceToRoot(ctx, createComponentResource(ctx, dep));
+                markProcssed(ctx, dep);
+            }
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * Adds the specified {@link UIComponent} as a component resource to the
+     * {@link javax.faces.component.UIViewRoot}
+     * @param ctx the {@link FacesContext} for the current request
+     * @param c the component resource
+     */
+    private void pushResourceToRoot(FacesContext ctx, UIComponent c) {
+
+        ctx.getViewRoot().addComponentResource(ctx, c, (String) c .getAttributes().get("target"));
+
+    }
+
+
+    /**
+     * Determines of the specified {@link ResourceDependency} has already been
+     * previously processed.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param dep the {@link ResourceDependency} in question
+     * @return <code>true</code> if the {@link ResourceDependency} has been
+     *  processed, otherwise <code>false</code>
+     */
+    @SuppressWarnings({"unchecked"})
+    private boolean hasBeenProcessed(FacesContext ctx, ResourceDependency dep) {
+
+        Set<ResourceDependency> dependencies = (Set<ResourceDependency>)
+              RequestStateManager.get(ctx, RequestStateManager.PROCESSED_RESOURCE_DEPENDENCIES);
+        return ((dependencies != null) && dependencies.contains(dep));
+
+    }
+
+
+    /**
+     * Construct a new component resource based off the provided {@link ValueExpression}s.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param dep the ResourceDependency that the component resource will be
+     *  constructed from
+     * @return a new component resource based of the provided annotation
+     */
+    private UIComponent createComponentResource(FacesContext ctx, ResourceDependency dep) {
+
+        Expressions exprs = expressionsMap.get(dep);
+        Application app = ctx.getApplication();
+        String resname = exprs.getName(ctx);
+        UIComponent c = ctx.getApplication().createComponent("javax.faces.Output");
+        c.setRendererType(app.getResourceHandler().getRendererTypeForResourceName(resname));
+        Map<String,Object> attrs = c.getAttributes();
+        attrs.put("name", resname);
+        if (exprs.library != null) {
+            attrs.put("library", exprs.getLibrary(ctx));
+        }
+        if (exprs.target != null) {
+            attrs.put("target", exprs.getTarget(ctx));
+        }
+        return c;
+
+    }
+
+
+    /**
+     * Indicates that the specified ResourceDependency has been processed.
+     * @param ctx the {@link FacesContext} for the current request
+     * @param dep the {@link ResourceDependency}
+     */
+    @SuppressWarnings({"unchecked"})
+    private void markProcssed(FacesContext ctx, ResourceDependency dep) {
+
+        Set<ResourceDependency> dependencies = (Set<ResourceDependency>)
+              RequestStateManager.get(ctx, RequestStateManager.PROCESSED_RESOURCE_DEPENDENCIES);
+        if (dependencies == null) {
+            dependencies = new HashSet<ResourceDependency>(6);
+            RequestStateManager.set(ctx, RequestStateManager.PROCESSED_RESOURCE_DEPENDENCIES, dependencies);
+        }
+        dependencies.add(dep);
+        
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * This helper class hides expression evaluation complexity.
+     */
+    private static final class Expressions {
+
+        ValueExpression nameExpression;
+        ValueExpression libraryExpression;
+        ValueExpression targetExpression;
+        String name;
+        String library;
+        String target;
+
+        String getName(FacesContext ctx) {
+            if (nameExpression == null) {
+                nameExpression = ELUtils.createValueExpression(name, String.class);
+            }
+            return (String) nameExpression.getValue(ctx.getELContext());
+        }
+
+        String getLibrary(FacesContext ctx) {
+            if (library != null) {
+                if (libraryExpression == null) {
+                    libraryExpression = ELUtils.createValueExpression(library, String.class);
+                }
+                return (String) libraryExpression.getValue(ctx.getELContext());
+            }
+            return null;
+        }
+
+        String getTarget(FacesContext ctx) {
+            if (target != null) {
+                if (targetExpression == null) {
+                    targetExpression = ELUtils.createValueExpression(target, String.class);
+                }
+                return (String) targetExpression.getValue(ctx.getELContext());
+            }
+            return null;
+        }
+
+
+    }
+
+
+}
diff --git a/com/sun/faces/application/annotation/ResourceDependencyScanner.java b/com/sun/faces/application/annotation/ResourceDependencyScanner.java
new file mode 100644
index 0000000..007c926
--- /dev/null
+++ b/com/sun/faces/application/annotation/ResourceDependencyScanner.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+import javax.faces.application.ResourceDependencies;
+import javax.faces.application.ResourceDependency;
+
+import com.sun.faces.util.Util;
+
+/**
+ * <code>Scanner</code> implementation responsible for {@link ResourceDependency} annotations.
+ */
+class ResourceDependencyScanner implements Scanner {
+
+
+    // ---------------------------------------------------- Methods from Scanner
+
+
+    public Class<? extends Annotation> getAnnotation() {
+
+        return ResourceDependency.class;
+
+    }
+
+
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+
+        Util.notNull("clazz", clazz);
+
+        ResourceDependencyHandler handler = null;
+        ResourceDependency dep = clazz.getAnnotation(ResourceDependency.class);
+        if (dep != null) {
+            handler = new ResourceDependencyHandler(new ResourceDependency[] { dep });
+        } else {
+            ResourceDependencies deps = clazz.getAnnotation(ResourceDependencies.class);
+            if (deps != null) {
+                handler = new ResourceDependencyHandler(deps.value());
+            }
+        }
+
+        return handler;
+        
+    }
+    
+}
diff --git a/com/sun/faces/application/annotation/ResourceHandler.java b/com/sun/faces/application/annotation/ResourceHandler.java
new file mode 100644
index 0000000..9e8ce95
--- /dev/null
+++ b/com/sun/faces/application/annotation/ResourceHandler.java
@@ -0,0 +1,109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import javax.annotation.Resource;
+import javax.faces.context.FacesContext;
+
+/**
+ * {@link RuntimeAnnotationHandler} responsible for processing Resource
+ * annotations.
+ */
+class ResourceHandler extends JndiHandler {
+
+    private Field[] fields;
+    private Resource[] fieldAnnotations;
+    private Method[] methods;
+    private Resource[] methodAnnotations;
+
+    public ResourceHandler(
+            Field[] fields, Resource[] fieldAnnotations,
+            Method[] methods, Resource[] methodAnnotations) {
+        this.fields = fields;
+        this.fieldAnnotations = fieldAnnotations;
+        this.methods = methods;
+        this.methodAnnotations = methodAnnotations;
+    }
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    @Override
+    public void apply(FacesContext ctx, Object... params) {
+        Object object = params[0];
+        for (int i = 0; i < fields.length; i++) {
+            applyToField(ctx, fields[0], fieldAnnotations[0], object);
+        }
+
+        for (int i = 0; i < methods.length; i++) {
+            applyToMethod(ctx, methods[i], methodAnnotations[i], object);
+        }
+    }
+
+    private void applyToField(FacesContext facesContext, Field field, Resource resource, Object instance) {
+        Object value;
+        /*
+         if (resource.lookup() != null && !"".equals(resource.lookup().trim())) {
+         value = lookup(facesContext, resource.lookup());
+         } else
+         */
+        if (resource.name() != null && !"".equals(resource.name().trim())) {
+            value = lookup(facesContext, JAVA_COMP_ENV + resource.name());
+        } else {
+            value = lookup(facesContext, field.getName());
+        }
+        setField(facesContext, field, instance, value);
+    }
+
+    private void applyToMethod(FacesContext facesContext, Method method, Resource resource, Object instance) {
+        if (method.getName().startsWith("set")) {
+            Object value = null;
+            /*
+             if (resource.lookup() != null && !"".equals(resource.lookup().trim())) {
+             value = lookup(facesContext, resource.lookup());
+             } else
+             */
+            if (resource.name() != null && !"".equals(resource.name().trim())) {
+                value = lookup(facesContext, JAVA_COMP_ENV + resource.name());
+            }
+            invokeMethod(facesContext, method, instance, value);
+        }
+    }
+}
diff --git a/com/sun/faces/application/annotation/ResourceScanner.java b/com/sun/faces/application/annotation/ResourceScanner.java
new file mode 100644
index 0000000..96dcaea
--- /dev/null
+++ b/com/sun/faces/application/annotation/ResourceScanner.java
@@ -0,0 +1,106 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.util.Util;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import javax.annotation.Resource;
+
+/**
+ * <code>Scanner</code> implementation responsible for Resource annotations.
+ */
+class ResourceScanner implements Scanner {
+
+    /**
+     * Get the annotation we handle.
+     *
+     * @return the annotation we handle.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        return Resource.class;
+    }
+
+    /**
+     * Scan the specified class for the given annotation.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     * @todo Make sure we get all the fields, handle method and class based
+     * injection.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        Util.notNull("clazz", clazz);
+        ResourceHandler handler = null;
+
+        ArrayList<Resource> fieldAnnotations = new ArrayList<Resource>();
+        ArrayList<Field> fields = new ArrayList<Field>();
+
+        for (Field field : clazz.getDeclaredFields()) {
+            Resource fieldAnnotation = field.getAnnotation(Resource.class);
+            if (fieldAnnotation != null) {
+                fieldAnnotations.add(fieldAnnotation);
+                fields.add(field);
+            }
+        }
+
+        ArrayList<Resource> methodAnnotations = new ArrayList<Resource>();
+        ArrayList<Method> methods = new ArrayList<Method>();
+
+        for (Method method : clazz.getDeclaredMethods()) {
+            Resource methodAnnotation = method.getAnnotation(Resource.class);
+            if (methodAnnotation != null) {
+                methodAnnotations.add(methodAnnotation);
+                methods.add(method);
+            }
+        }
+
+        if (!fieldAnnotations.isEmpty() || !methodAnnotations.isEmpty()) {
+            handler = new ResourceHandler(
+                    fields.toArray(new Field[0]), (Resource[]) fieldAnnotations.toArray(new Resource[0]),
+                    methods.toArray(new Method[0]), (Resource[]) methodAnnotations.toArray(new Resource[0]));
+        }
+        return handler;
+    }
+}
diff --git a/com/sun/faces/application/annotation/RuntimeAnnotationHandler.java b/com/sun/faces/application/annotation/RuntimeAnnotationHandler.java
new file mode 100644
index 0000000..af93051
--- /dev/null
+++ b/com/sun/faces/application/annotation/RuntimeAnnotationHandler.java
@@ -0,0 +1,69 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * Implementations of this class provide basic caching and processing of
+ * of {@link java.lang.annotation.Annotation} instances.
+ */
+interface RuntimeAnnotationHandler {
+
+    /**
+     * <p>Apply the {@link java.lang.annotation.Annotation}(s). The act
+     * of doing so should affect the JSF runtime in some fashion (see the spec
+     * for the specific annotation types).</p>
+     *
+     * <p>
+     * <em>NOTE</em>: when adding new types of components that can be annotated,
+     * the fact that we expose varargs here should be hidden.  Type-safe methods
+     * should be added to {@link AnnotationManager} to clarify the contract.
+     * </p>
+     *
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current
+     *  request
+     * @param params one or more arguments to the handler instance.  The type
+     *  and number may vary.
+     */
+    public void apply(FacesContext ctx, Object... params);
+    
+}
diff --git a/com/sun/faces/application/annotation/Scanner.java b/com/sun/faces/application/annotation/Scanner.java
new file mode 100644
index 0000000..6908667
--- /dev/null
+++ b/com/sun/faces/application/annotation/Scanner.java
@@ -0,0 +1,72 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <p>Instances of this interface are responsible for scanning a <code>Class</code>
+ * for a specific annotation types.</p>
+ *
+ * <p>Scanner implementations <em>must</em> be thread safe.</p>
+ */
+interface Scanner {
+
+    /**
+     * @return the {@link java.lang.annotation.Annotation} this <code>Scanner</code>
+     *  is responsible for handling.  <em>NOTE</em>: while a particular <code>Scanner</code>
+     *  instance may handle a plural version of an <code>Annotation</code> in
+     *  additional to a singular, this method must return the singular version
+     *  only.
+     */
+    public Class<? extends Annotation> getAnnotation();
+
+    
+    /**
+     * Scan the target class for the {@link java.lang.annotation.Annotation}s this scanner handles.
+     * @param clazz the target class
+     * @return a new {@link RuntimeAnnotationHandler} instance capable of processing the
+     *  annotations defined on this class.  If no relevant {@link java.lang.annotation.Annotation}s
+     *  are found, return <code>null</code>.
+     */
+    public RuntimeAnnotationHandler scan(Class<?> clazz);
+    
+}
diff --git a/com/sun/faces/application/annotation/ValidatorConfigHandler.java b/com/sun/faces/application/annotation/ValidatorConfigHandler.java
new file mode 100644
index 0000000..98a8ef1
--- /dev/null
+++ b/com/sun/faces/application/annotation/ValidatorConfigHandler.java
@@ -0,0 +1,139 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.annotation;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+import javax.faces.validator.FacesValidator;
+
+/**
+ * <p>
+ * <code>ConfigAnnotationHandler</code> for {@link FacesValidator} annotated
+ * classes.
+ * </p>
+ */
+public class ValidatorConfigHandler implements ConfigAnnotationHandler {
+
+    private static final Collection<Class<? extends Annotation>> HANDLES;
+    static {
+        Collection<Class<? extends Annotation>> handles =
+              new ArrayList<Class<? extends Annotation>>(1);
+        handles.add(FacesValidator.class);
+        HANDLES = Collections.unmodifiableCollection(handles);
+    }
+
+    private Map<ValidatorInfo,String> validators;
+
+
+    // ------------------------------------- Methods from ComponentConfigHandler
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
+     */
+    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
+
+        return HANDLES;
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
+     */
+    public void collect(Class<?> target, Annotation annotation) {
+
+        if (validators == null) {
+            validators = new HashMap<ValidatorInfo,String>();
+        }
+        FacesValidator validatorAnnotation = (FacesValidator) annotation;
+        String value = ((FacesValidator) annotation).value();
+        if (null == value || 0 == value.length()) {
+            value = target.getSimpleName();
+            value = Character.toLowerCase(value.charAt(0)) + value.substring(1);
+        }
+        ValidatorInfo info = new ValidatorInfo(value, validatorAnnotation.isDefault());
+        validators.put(info, target.getName());
+
+    }
+
+
+    /**
+     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
+     */
+    public void push(FacesContext ctx) {
+
+        if (validators != null) {
+            Application app = ctx.getApplication();
+            for (Map.Entry<ValidatorInfo,String> entry : validators.entrySet()) {
+                app.addValidator(entry.getKey().validatorId, entry.getValue());
+                if (entry.getKey().isDefault) {
+                    app.addDefaultValidatorId(entry.getKey().validatorId);
+                }
+            }
+        }
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private static class ValidatorInfo {
+
+        final String validatorId;
+        final boolean isDefault;
+
+        ValidatorInfo(String validatorId, boolean isDefault) {
+            this.validatorId = validatorId;
+            this.isDefault = isDefault;
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/application/annotation/WebServiceRefHandler.java b/com/sun/faces/application/annotation/WebServiceRefHandler.java
new file mode 100644
index 0000000..da43e4f
--- /dev/null
+++ b/com/sun/faces/application/annotation/WebServiceRefHandler.java
@@ -0,0 +1,109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import javax.faces.context.FacesContext;
+import javax.xml.ws.WebServiceRef;
+
+/**
+ * {@link RuntimeAnnotationHandler} responsible for processing {@link WebServiceRef}
+ * annotations.
+ */
+class WebServiceRefHandler extends JndiHandler implements RuntimeAnnotationHandler {
+
+    private Field[] fields;
+    private WebServiceRef[] fieldAnnotations;
+    private Method[] methods;
+    private WebServiceRef[] methodAnnotations;
+
+    public WebServiceRefHandler(
+            Field[] fields, WebServiceRef[] fieldAnnotations,
+            Method[] methods, WebServiceRef[] methodAnnotations) {
+        this.fields = fields;
+        this.fieldAnnotations = fieldAnnotations;
+        this.methods = methods;
+        this.methodAnnotations = methodAnnotations;
+    }
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    @Override
+    public void apply(FacesContext ctx, Object... params) {
+        Object object = params[0];
+        for (int i = 0; i < fields.length; i++) {
+            applyToField(ctx, fields[0], fieldAnnotations[0], object);
+        }
+
+        for (int i=0; i<methods.length; i++) {
+            applyToMethod(ctx, methods[i], methodAnnotations[i], object);
+        }
+    }
+
+    private void applyToField(FacesContext facesContext, Field field, WebServiceRef ref, Object instance) {
+        Object value = null;
+        /*
+        if (ref.lookup() != null && !"".equals(ref.lookup().trim())) {
+            value = lookup(facesContext, ref.lookup());
+        } else 
+        */
+        if (ref.name() != null && !"".equals(ref.name().trim())) {
+            value = lookup(facesContext, JAVA_COMP_ENV + ref.name());
+        } else {
+            value = lookup(facesContext, field.getName());
+        }
+        setField(facesContext, field, instance, value);
+    }
+
+    private void applyToMethod(FacesContext facesContext, Method method, WebServiceRef ref, Object instance) {
+        if (method.getName().startsWith("set")) {
+            Object value = null;
+            /*
+            if (ref.lookup() != null && !"".equals(ref.lookup().trim())) {
+                value = lookup(facesContext, ref.lookup());
+            } else 
+            */
+            if (ref.name() != null && !"".equals(ref.name().trim())) {
+                value = lookup(facesContext, JAVA_COMP_ENV + ref.name());
+            }
+            invokeMethod(facesContext, method, instance, value);
+        }
+    }
+}
diff --git a/com/sun/faces/application/annotation/WebServiceRefScanner.java b/com/sun/faces/application/annotation/WebServiceRefScanner.java
new file mode 100644
index 0000000..09cb5e8
--- /dev/null
+++ b/com/sun/faces/application/annotation/WebServiceRefScanner.java
@@ -0,0 +1,109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.annotation;
+
+import com.sun.faces.util.Util;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import javax.xml.ws.WebServiceRef;
+
+/**
+ * <code>Scanner</code> implementation responsible for {@link WebServiceRef} annotations.
+ */
+class WebServiceRefScanner implements Scanner {
+
+    /**
+     * Get the annotation we handle.
+     *
+     * @return the annotation we handle.
+     */
+    @Override
+    public Class<? extends Annotation> getAnnotation() {
+        return WebServiceRef.class;
+    }
+
+    /**
+     * Scan the specified class for the given annotation.
+     *
+     * @param clazz the class.
+     * @return the runtime annotation handler.
+     * @todo Make sure we get all the fields, handle method and class based injection, handle WebServiceRefs.
+     */
+    @Override
+    public RuntimeAnnotationHandler scan(Class<?> clazz) {
+        Util.notNull("clazz", clazz);
+        WebServiceRefHandler handler = null;
+
+        ArrayList<WebServiceRef> classAnnotations = new ArrayList<WebServiceRef>();
+        WebServiceRef classAnnotation = clazz.getAnnotation(WebServiceRef.class);
+        if (classAnnotation != null) {
+            classAnnotations.add(classAnnotation);
+        }
+        ArrayList<WebServiceRef> fieldAnnotations = new ArrayList<WebServiceRef>();
+        ArrayList<Field> fields = new ArrayList<Field>();
+
+        for (Field field : clazz.getDeclaredFields()) {
+            WebServiceRef fieldAnnotation = field.getAnnotation(WebServiceRef.class);
+            if (fieldAnnotation != null) {
+                fieldAnnotations.add(fieldAnnotation);
+                fields.add(field);
+            }
+        }
+        
+        ArrayList<WebServiceRef> methodAnnotations = new ArrayList<WebServiceRef>();
+        ArrayList<Method> methods = new ArrayList<Method>();
+        for (Method method : clazz.getDeclaredMethods()) {
+            WebServiceRef methodAnnotation = method.getAnnotation(WebServiceRef.class);
+            if (methodAnnotation != null) {
+                methodAnnotations.add(methodAnnotation);
+                methods.add(method);
+            }
+        }
+        
+        if (!classAnnotations.isEmpty() || !fieldAnnotations.isEmpty()) {
+            handler = new WebServiceRefHandler(
+                    fields.toArray(new Field[0]), (WebServiceRef[]) fieldAnnotations.toArray(new WebServiceRef[0]),
+                    methods.toArray(new Method[0]), (WebServiceRef[]) methodAnnotations.toArray(new WebServiceRef[0]));
+        }
+        return handler;
+    }
+}
diff --git a/com/sun/faces/application/resource/ClasspathResourceHelper.java b/com/sun/faces/application/resource/ClasspathResourceHelper.java
new file mode 100644
index 0000000..4f61178
--- /dev/null
+++ b/com/sun/faces/application/resource/ClasspathResourceHelper.java
@@ -0,0 +1,409 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.faces.component.UIViewRoot;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.util.Util;
+
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.CacheResourceModificationTimestamp;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableMissingResourceLibraryDetection;
+
+
+/**
+ * <p>
+ * A {@link ResourceHelper} implementation for finding/serving resources
+ * found on the classpath within the <code>META-INF/resources directory.
+ * </p>
+ *
+ * @since 2.0
+ */
+public class ClasspathResourceHelper extends ResourceHelper {
+
+
+    private static final String BASE_RESOURCE_PATH = "META-INF/resources";
+    private boolean cacheTimestamp;
+    private volatile ZipDirectoryEntryScanner libraryScanner;
+    private boolean enableMissingResourceLibraryDetection;
+
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ClasspathResourceHelper() {
+
+        WebConfiguration webconfig = WebConfiguration.getInstance();
+        cacheTimestamp = webconfig.isOptionEnabled(CacheResourceModificationTimestamp);
+        enableMissingResourceLibraryDetection =
+                webconfig.isOptionEnabled(EnableMissingResourceLibraryDetection);
+
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ClasspathResourceHelper other = (ClasspathResourceHelper) obj;
+        if (this.cacheTimestamp != other.cacheTimestamp) {
+            return false;
+        }
+        if (this.enableMissingResourceLibraryDetection != other.enableMissingResourceLibraryDetection) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 67 * hash + (this.cacheTimestamp ? 1 : 0);
+        hash = 67 * hash + (this.enableMissingResourceLibraryDetection ? 1 : 0);
+        return hash;
+    }
+
+    
+
+    // --------------------------------------------- Methods from ResourceHelper
+
+
+    /**
+     * @see com.sun.faces.application.resource.ResourceHelper#getBaseResourcePath()
+     */
+    public String getBaseResourcePath() {
+
+        return BASE_RESOURCE_PATH;
+
+    }
+
+    @Override
+    public String getBaseContractsPath() {
+        return WebConfiguration.META_INF_CONTRACTS_DIR;
+    }
+    
+    /**
+     * @see ResourceHelper#getNonCompressedInputStream(com.sun.faces.application.resource.ResourceInfo, javax.faces.context.FacesContext)
+     */
+    protected InputStream getNonCompressedInputStream(ResourceInfo resource, FacesContext ctx) throws IOException {
+
+        InputStream in = null;
+        
+        if (ctx.isProjectStage(ProjectStage.Development)) {
+            ClassLoader loader = Util.getCurrentLoader(getClass());
+            String path = resource.getPath();
+            if (loader.getResource(path) != null) {
+                in = loader.getResource(path).openStream();
+            }
+            if (in == null && getClass().getClassLoader().getResource(path) != null) {
+                in = getClass().getClassLoader().getResource(path).openStream();
+            }
+        } else {        
+            ClassLoader loader = Util.getCurrentLoader(getClass());
+            String path = resource.getPath();
+            in = loader.getResourceAsStream(path);
+            if (in == null) {
+                in = getClass().getClassLoader().getResourceAsStream(path);
+            }
+        }
+        return in;
+    }
+
+
+    /**
+     * @see ResourceHelper#getURL(com.sun.faces.application.resource.ResourceInfo, javax.faces.context.FacesContext)
+     */
+    public URL getURL(ResourceInfo resource, FacesContext ctx) {
+
+        ClassLoader loader = Util.getCurrentLoader(this.getClass());
+        URL url = loader.getResource(resource.getPath());
+        if (url == null) {
+            // try using this class' loader (necessary when running in OSGi)
+            url = this.getClass().getClassLoader().getResource(resource.getPath());
+        }
+        return url;
+
+    }
+
+    
+    /**
+     * @see ResourceHelper#findLibrary(String, String, String, javax.faces.context.FacesContext)
+     */
+    public LibraryInfo findLibrary(String libraryName,
+                                   String localePrefix,
+                                   String contract, FacesContext ctx) {
+
+        ClassLoader loader = Util.getCurrentLoader(this);
+        String basePath;
+        if (localePrefix == null) {
+            basePath = getBasePath(contract) + '/' + libraryName + '/';
+        } else {
+            basePath = getBasePath(contract)
+                       + '/'
+                       + localePrefix
+                       + '/'
+                       + libraryName
+                       + '/';
+        }
+
+        URL basePathURL = loader.getResource(basePath);
+        if (basePathURL == null) {
+            // try using this class' loader (necessary when running in OSGi)
+            basePathURL = this.getClass().getClassLoader().getResource(basePath);
+            if (basePathURL == null) {
+                return null;
+            }
+        }
+
+        return new LibraryInfo(libraryName, null, localePrefix, contract, this);
+        
+    }
+
+    public LibraryInfo findLibraryWithZipDirectoryEntryScan(String libraryName,
+                                                            String localePrefix,
+                                                            String contract, FacesContext ctx, boolean forceScan) {
+
+        ClassLoader loader = Util.getCurrentLoader(this);
+        String basePath;
+        if (localePrefix == null) {
+            basePath = getBasePath(contract) + '/' + libraryName + '/';
+        } else {
+            basePath = getBasePath(contract)
+                       + '/'
+                       + localePrefix
+                       + '/'
+                       + libraryName
+                       + '/';
+        }
+
+        URL basePathURL = loader.getResource(basePath);
+        if (basePathURL == null) {
+            // try using this class' loader (necessary when running in OSGi)
+            basePathURL = this.getClass().getClassLoader().getResource(basePath);
+            if (basePathURL == null) {
+                if (null != localePrefix && libraryName.equals("javax.faces")) {
+                    return null;
+                }
+                if (enableMissingResourceLibraryDetection || forceScan) {
+                    if (null == libraryScanner) {
+                        libraryScanner = new ZipDirectoryEntryScanner();
+                    }
+                    if (!libraryScanner.libraryExists(libraryName, localePrefix)) {
+                        return null;
+                    }
+                }
+            }
+        }
+
+        return new LibraryInfo(libraryName, null, localePrefix, contract, this);
+    }
+
+
+
+    /**
+     * @see ResourceHelper#findResource(LibraryInfo, String, String, boolean, javax.faces.context.FacesContext)
+     */
+    public ResourceInfo findResource(LibraryInfo library,
+                                     String resourceName,
+                                     String localePrefix,
+                                     boolean compressable,
+                                     FacesContext ctx) {
+
+        resourceName = trimLeadingSlash(resourceName);
+        ContractInfo [] outContract = new ContractInfo[1];
+        outContract[0] = null;
+        String [] outBasePath = new String[1];
+        outBasePath[0] = null;
+        
+        ClassLoader loader = Util.getCurrentLoader(this);
+        URL basePathURL = findPathConsideringContracts(loader, library, resourceName, 
+                localePrefix, outContract, outBasePath, ctx);
+        String basePath = outBasePath[0];
+        if (null == basePathURL) {
+            basePath = deriveBasePath(library, resourceName, localePrefix);
+            basePathURL = loader.getResource(basePath);
+        }
+
+        if (null == basePathURL) {
+            // try using this class' loader (necessary when running in OSGi)
+            basePathURL = this.getClass().getClassLoader().getResource(basePath);
+            if (basePathURL == null) {
+                // Try it without the localePrefix
+                if (library != null) {
+                    basePath = library.getPath(null) + '/' + resourceName;
+                } else {
+                    basePath = getBaseResourcePath() + '/' + resourceName;
+                }
+                basePathURL = loader.getResource(basePath);
+                if (basePathURL == null) {
+                    // try using this class' loader (necessary when running in OSGi)
+                    basePathURL = this.getClass().getClassLoader().getResource(basePath);
+                    if (basePathURL == null) {
+                        return null;
+                    }
+                }
+
+                localePrefix = null;
+            }
+        }
+
+        ClientResourceInfo value;
+
+        if (library != null) {
+            value = new ClientResourceInfo(library,
+                                     outContract[0],
+                                     resourceName,
+                                     null,
+                                     compressable,
+                                     resourceSupportsEL(resourceName, library.getName(), ctx),
+                                     ctx.isProjectStage(ProjectStage.Development),
+                                     cacheTimestamp);
+        } else {
+            value = new ClientResourceInfo(outContract[0],
+                                     resourceName,
+                                     null,
+                                     localePrefix,
+                                     this,
+                                     compressable,
+                                     resourceSupportsEL(resourceName, null, ctx),
+                                     ctx.isProjectStage(ProjectStage.Development),
+                                     cacheTimestamp);
+        }
+        
+        if (value.isCompressable()) {
+            value = handleCompression(value);
+        }
+        return value;
+
+    }
+    
+    private String deriveBasePath(LibraryInfo library,
+            String resourceName,
+            String localePrefix) {
+        String basePath = null;
+        if (library != null) {
+            basePath = library.getPath(localePrefix) + '/' + resourceName;
+        } else {
+            if (localePrefix == null) {
+                basePath = getBaseResourcePath() + '/' + resourceName;
+            } else {
+                basePath = getBaseResourcePath()
+                        + '/'
+                        + localePrefix
+                        + '/'
+                        + resourceName;
+            }
+        }            
+        return basePath;
+    }
+
+    private URL findPathConsideringContracts(ClassLoader loader, 
+                                     LibraryInfo library,
+                                     String resourceName,
+                                     String localePrefix,
+                                     ContractInfo [] outContract,
+                                     String [] outBasePath,
+                                     FacesContext ctx) {
+        UIViewRoot root = ctx.getViewRoot();
+        List<String> contracts = null;
+        URL result = null;
+        
+        if (library != null) {
+        	contracts = new ArrayList<String>(1);
+        	contracts.add(library.getContract());
+        } else if (root == null) {
+            String contractName = ctx.getExternalContext().getRequestParameterMap()
+                  .get("con");
+            if (null != contractName && 0 < contractName.length()) {
+                contracts = new ArrayList<String>();
+                contracts.add(contractName);
+            } else {
+                return null;
+            }
+        } else {
+       		contracts = ctx.getResourceLibraryContracts();
+        }
+
+        String basePath = null;
+        
+        for (String curContract : contracts) {
+        
+            if (library != null) {
+                // PENDING(fcaputo) no need to iterate over the contracts, if we have a library
+                basePath = library.getPath(localePrefix) + '/' + resourceName;
+            } else {
+                if (localePrefix == null) {
+                    basePath = getBaseContractsPath() + '/' + curContract + '/' + resourceName;
+                } else {
+                    basePath = getBaseContractsPath()
+                            + '/' + curContract 
+                            + '/'
+                            + localePrefix
+                            + '/'
+                            + resourceName;
+                }
+            }
+            
+            if (null != (result = loader.getResource(basePath))) {
+                outContract[0] = new ContractInfo(curContract);
+                outBasePath[0] = basePath;
+                break;
+            } else {
+                basePath = null;
+            }
+        }
+            
+        return result;
+    }
+
+}
diff --git a/com/sun/faces/application/resource/ClientResourceInfo.java b/com/sun/faces/application/resource/ClientResourceInfo.java
new file mode 100644
index 0000000..72f4a6d
--- /dev/null
+++ b/com/sun/faces/application/resource/ClientResourceInfo.java
@@ -0,0 +1,322 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import java.io.File;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * <p/>
+ * <code>ClientResourceInfo</code> is a simple wrapper class for information
+ * pertainant to building a complete resource path using a Library.
+ * <p/>
+ */
+public class ClientResourceInfo extends ResourceInfo {
+
+    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
+    private static final String COMPRESSED_CONTENT_DIRECTORY =
+          "jsf-compressed";
+    boolean cacheTimestamp;
+    boolean isDevStage;
+    String compressedPath;
+    boolean compressible;
+    boolean supportsEL;
+    private volatile long lastModified = Long.MIN_VALUE;
+
+
+    /**
+     * Constructs a new <code>ClientResourceInfo</code> using the specified details.
+     * The {@link ResourceHelper} of the resource will be the same as the
+     * {@link ResourceHelper} of the {@link LibraryInfo}.
+     * @param library the library containing this resource
+     * @param name the resource name
+     * @param version the version of this resource (if any)
+     * @param compressible if this resource should be compressed
+     * @param supportsEL <code>true</code> if this resource may contain
+     *   EL expressions
+     * @param isDevStage true if this context is development stage
+     * @param cacheTimestamp <code>true</code> if the modification time of the
+     *  resource should be cached.  The value of this parameter will be ignored
+     *  when {@link #isDevStage} is <code>true</code>
+     */
+    public ClientResourceInfo(LibraryInfo library,
+                        ContractInfo contract,
+                        String name,
+                        VersionInfo version,
+                        boolean compressible,
+                        boolean supportsEL,
+                        boolean isDevStage,
+                        boolean cacheTimestamp) {
+        super(library, contract, name, version);
+        this.compressible = compressible;
+        this.supportsEL = supportsEL;
+        this.isDevStage = isDevStage;
+        this.cacheTimestamp = (!isDevStage && cacheTimestamp);
+        initPath(isDevStage);
+    }
+
+    /**
+     * Constructs a new <code>ClientResourceInfo</code> using the specified details.
+     * @param name the resource name
+     * @param version the version of the resource
+     * @param localePrefix the locale prefix for this resource (if any)
+     * @param helper helper the helper class for this resource
+     * @param compressible if this resource should be compressed
+     * @param supportsEL <code>true</code> if this resource may contain
+     *   EL expressions
+     * @param isDevStage true if this context is development stage
+     * @param cacheTimestamp <code>true</code> if the modification time of the
+     *  resource should be cached.  The value of this parameter will be ignored
+     *  when {@link #isDevStage} is <code>true</code>
+     */
+    ClientResourceInfo(ContractInfo contract,
+                 String name,
+                 VersionInfo version,
+                 String localePrefix,
+                 ResourceHelper helper,
+                 boolean compressible,
+                 boolean supportsEL,
+                 boolean isDevStage,
+                 boolean cacheTimestamp) {
+        super(contract, name, version, helper);
+        this.name = name;
+        this.version = version;
+        this.localePrefix = localePrefix;
+        this.helper = helper;
+        this.compressible = compressible;
+        this.supportsEL = supportsEL;
+        this.isDevStage = isDevStage;
+        this.cacheTimestamp = (!isDevStage && cacheTimestamp);
+        initPath(isDevStage);
+    }
+    
+    ClientResourceInfo(ClientResourceInfo other, boolean copyLocalePrefix) {
+        super(other, copyLocalePrefix);
+        this.cacheTimestamp = other.cacheTimestamp;
+        this.compressedPath = other.compressedPath;
+        this.compressible = other.compressible;
+        this.isDevStage = other.isDevStage;
+        this.lastModified = other.lastModified;
+        this.supportsEL = other.supportsEL;
+        initPath(isDevStage);
+    }
+    
+    public void copy(ClientResourceInfo other) {
+        super.copy(other);
+        this.cacheTimestamp = other.cacheTimestamp;
+        this.compressedPath = other.compressedPath;
+        this.compressible = other.compressible;
+        this.isDevStage = other.isDevStage;
+        this.lastModified = other.lastModified;
+        this.supportsEL = other.supportsEL;
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+    /**
+     * @return the path to which the compressed bits for this resource
+     *  reside.  If this resource isn't compressible and this method is called,
+     *  it will return <code>null</code>
+     */
+    public String getCompressedPath() {
+        return compressedPath;
+    }
+
+    /**
+     * @return <code>true</code> if this resource should be compressed,
+     *  otherwise <code>false</code>
+     */
+    public boolean isCompressable() {
+        return compressible;
+    }
+
+    /**
+     * @return <code>true</code> if the this resource may contain EL expressions
+     *  that should be evaluated, otherwise, return <code>false</code>
+     */
+    public boolean supportsEL() {
+        return supportsEL;
+    }
+
+    /**
+     * Disables EL evaluation for this resource. 
+     */
+    public void disableEL() {
+        this.supportsEL = false;
+    }
+
+    /**
+     * Returns the time this resource was last modified.
+     * If {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#CacheResourceModificationTimestamp}
+     * is true, the value will be cached for the lifetime if this <code>ClientResourceInfo</code>
+     * instance.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     *
+     * @return the time this resource was last modified (number of milliseconds
+     *  since January 1, 1970 GMT).
+     *
+     */
+    public long getLastModified(FacesContext ctx) {
+
+        if (cacheTimestamp) {
+            if (lastModified == Long.MIN_VALUE) {
+                synchronized (this) {
+                    if (lastModified == Long.MIN_VALUE) {
+                        lastModified = helper.getLastModified(this, ctx);
+                    }
+                }
+            }
+            return lastModified;
+        } else {
+            return helper.getLastModified(this, ctx);
+        }
+        
+    }
+
+    @Override
+    public String toString() {
+        return "ResourceInfo{" +
+               "name='" + name + '\'' +
+               ", version=\'" + ((version != null) ? version : "NONE") + '\'' +
+               ", libraryName='" + libraryName + '\'' +
+               ", contractInfo='" + (contract != null ? contract.contract : "NONE") + '\'' +
+               ", libraryVersion='" + ((library != null) ? library.getVersion() : "NONE") + '\'' +
+               ", localePrefix='" + ((localePrefix != null) ? localePrefix : "NONE") + '\'' +
+               ", path='" + path + '\'' +
+               ", compressible='" + compressible + '\'' +
+               ", compressedPath=" + compressedPath +
+               '}';
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * Create the full path to the resource.  If the resource can be compressed,
+     * setup the compressedPath ivar so that the path refers to the
+     * directory refereneced by the context attribute <code>javax.servlet.context.tempdir</code>.  
+     */
+    private void initPath(boolean isDevStage) {
+
+        StringBuilder sb = new StringBuilder(32);
+        if (library != null) {
+            sb.append(library.getPath());
+        } else {
+            if (null != contract) {
+                sb.append(helper.getBaseContractsPath());
+                sb.append("/").append(contract);
+            } else {
+                sb.append(helper.getBaseResourcePath());
+            }
+        }
+        if (library == null && localePrefix != null) {
+            sb.append('/').append(localePrefix);
+        }
+        // Specialcasing for handling jsf.js in uncompressed state
+        if (isDevStage && "javax.faces".equals(libraryName) && "jsf.js".equals(name)) {
+            sb.append('/').append("jsf-uncompressed.js");
+        } else {
+            sb.append('/').append(name);
+        }
+        if (version != null) {
+            sb.append('/').append(version.getVersion());
+            String extension = version.getExtension();
+            if (extension != null) {
+                sb.append('.').append(extension);    
+            }
+        }
+        path = sb.toString();
+
+        if (compressible && !supportsEL) { // compression for static resources
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            File servletTmpDir = (File) ctx.getExternalContext()
+                  .getApplicationMap().get("javax.servlet.context.tempdir");
+            if (servletTmpDir == null || !servletTmpDir.isDirectory()) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               "File ({0}) referenced by javax.servlet.context.tempdir attribute is null, or was is not a directory.  Compression for {1} will be unavailable.",
+                               new Object[]{((servletTmpDir == null)
+                                             ? "null"
+                                             : servletTmpDir.toString()),
+                                            path});
+                }
+                compressible = false;
+            } else {
+                String tPath = ((path.charAt(0) == '/') ? path : '/' + path);
+                File newDir = new File(servletTmpDir, COMPRESSED_CONTENT_DIRECTORY
+                                                      + tPath);
+
+                try {
+                    if (!newDir.exists()) {
+                        if (newDir.mkdirs()) {
+                            compressedPath = newDir.getCanonicalPath();
+                        } else {
+                            compressible = false;
+                            if (LOGGER.isLoggable(Level.WARNING)) {
+                                LOGGER.log(Level.WARNING,
+                                           "jsf.application.resource.unable_to_create_compression_directory",
+                                           newDir.getCanonicalPath());
+                            }
+                        }
+                    } else {
+                        compressedPath = newDir.getCanonicalPath();
+                    }
+                } catch (Exception e) {
+                	if (LOGGER.isLoggable(Level.SEVERE)) {
+	                    LOGGER.log(Level.SEVERE,
+	                               e.toString(),
+	                               e);
+                	}
+                    compressible = false;
+                }
+            }
+        }
+        
+    }
+
+}
diff --git a/com/sun/faces/application/resource/ContractInfo.java b/com/sun/faces/application/resource/ContractInfo.java
new file mode 100644
index 0000000..498f24f
--- /dev/null
+++ b/com/sun/faces/application/resource/ContractInfo.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application.resource;
+
+public final class ContractInfo {
+    
+    private static final long serialVersionUID = 6585532979916457692L;
+    
+    String contract;
+
+    public ContractInfo(String contract) {
+        this.contract = contract;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ContractInfo other = (ContractInfo) obj;
+        if ((this.contract == null) ? (other.contract != null) : !this.contract.equals(other.contract)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 29 * hash + (this.contract != null ? this.contract.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public String toString() {
+        return contract;
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/application/resource/FaceletLibraryInfo.java b/com/sun/faces/application/resource/FaceletLibraryInfo.java
new file mode 100644
index 0000000..980d81b
--- /dev/null
+++ b/com/sun/faces/application/resource/FaceletLibraryInfo.java
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application.resource;
+
+import java.net.URL;
+
+public class FaceletLibraryInfo extends LibraryInfo {
+    
+    private URL url;
+
+    public FaceletLibraryInfo(String name, VersionInfo version, String localePrefix, String contract, ResourceHelper helper, URL url) {
+        super(name, version, localePrefix, contract, helper);
+        this.url = url;
+    }
+
+    public URL getUrl() {
+        return url;
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/application/resource/FaceletResourceInfo.java b/com/sun/faces/application/resource/FaceletResourceInfo.java
new file mode 100644
index 0000000..5cea50f
--- /dev/null
+++ b/com/sun/faces/application/resource/FaceletResourceInfo.java
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application.resource;
+
+import java.net.URL;
+
+public class FaceletResourceInfo extends ResourceInfo {
+
+    FaceletResourceInfo(ContractInfo contract, String name, VersionInfo version, 
+            ResourceHelper helper, URL url) {
+        super(contract, name, version, helper);
+        this.url = url;
+    }
+    
+    private URL url;
+
+    public URL getUrl() {
+        return url;
+    }
+    
+    
+}
diff --git a/com/sun/faces/application/resource/FaceletWebappResourceHelper.java b/com/sun/faces/application/resource/FaceletWebappResourceHelper.java
new file mode 100644
index 0000000..2c85b65
--- /dev/null
+++ b/com/sun/faces/application/resource/FaceletWebappResourceHelper.java
@@ -0,0 +1,253 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application.resource;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.NoSuchElementException;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.Flow;
+import javax.faces.flow.FlowHandler;
+
+public class FaceletWebappResourceHelper extends ResourceHelper {
+    
+    private final String webAppContractsDirectory;
+    private static final String META_INF_CONTRACTS_DIR = WebConfiguration.META_INF_CONTRACTS_DIR;
+
+    public FaceletWebappResourceHelper() {
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        webAppContractsDirectory = webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        return obj instanceof FaceletWebappResourceHelper;
+    }
+
+    @Override
+    public int hashCode() {
+        return 3;
+    }
+    
+    
+
+    @Override
+    public LibraryInfo findLibrary(String libraryName, String localePrefix, String contract, FacesContext ctx) {
+        LibraryInfo result = null;
+
+        try {
+            String path = libraryName;
+            // prepend the leading '/' if necessary.
+            if ('/' != path.charAt(0)) {
+                path = "/" + path;
+            }
+            if(contract != null) {
+                path = webAppContractsDirectory + '/' + contract + path;
+            }
+            if ('/' != path.charAt(0)) {
+                path = "/" + path;
+            }
+            URL url = Resource.getResourceUrl(ctx, path);
+            // By definition, FaceletWebappResourceHelper only deals with files
+            // in the web app root, not in the resource directories
+            if (null != url && -1 == url.getPath().indexOf("/META-INF/")) {
+                result = new FaceletLibraryInfo(libraryName, null, localePrefix, contract, this, url);
+            }
+        } catch (MalformedURLException ex) {
+            throw new FacesException(ex);
+        }
+        
+        
+        return result;
+    }
+
+    @Override
+    public ResourceInfo findResource(LibraryInfo library, String resourceName, String localePrefix, boolean compressable, FacesContext ctx) {
+        FaceletResourceInfo result = null;
+        try {
+            String path = resourceName;
+            if (null != library) {
+                path = library.getPath() + "/" + resourceName;
+            } else {
+                // prepend the leading '/' if necessary.
+                if ('/' != path.charAt(0)) {
+                    path = "/" + path;
+                }
+            }
+            
+            List<String> contracts = ctx.getResourceLibraryContracts();
+            ContractInfo [] outContract = new ContractInfo[1];
+            outContract[0] = null;
+            boolean doNotCache = false;
+
+            URL url = null;
+            // if the library is not null, we must not consider contracts here!
+            if (library == null && !contracts.isEmpty()) {
+                url = findResourceInfoConsideringContracts(ctx, resourceName,
+                        outContract,
+                        contracts);
+            }
+            if (null == url) {
+                url = Resource.getResourceUrl(ctx, path);
+            }
+            
+            if (null == url) {
+                ClassLoader cl = Util.getCurrentLoader(this);
+                Enumeration<URL> matches = cl.getResources(RIConstants.FLOW_IN_JAR_PREFIX + resourceName);
+                try {
+                    url = matches.nextElement();
+                } catch (NoSuchElementException nsee) {
+                    url = null;
+                }
+                if (null != url && matches.hasMoreElements()) {
+                    boolean keepGoing = true;
+                    FacesContext context = FacesContext.getCurrentInstance();
+                    Application application = context.getApplication();
+                    FlowHandler fh = application.getFlowHandler();
+                    Flow currentFlow = fh.getCurrentFlow(context);
+                    do {
+                        if (null != currentFlow && 0 < currentFlow.getDefiningDocumentId().length()) {
+                            String definingDocumentId = currentFlow.getDefiningDocumentId();
+                            ExternalContext extContext = context.getExternalContext();
+                            ApplicationAssociate associate = ApplicationAssociate.getInstance(extContext);
+                            if (associate.urlIsRelatedToDefiningDocumentInJar(url, definingDocumentId)) {
+                                keepGoing = false;
+                                doNotCache = true;
+                            } else {
+                                if (matches.hasMoreElements()) {
+                                    url = matches.nextElement();
+                                } else {
+                                    keepGoing = false;
+                                }
+                            }
+                        } else {
+                            keepGoing = false;
+                        }
+                    } while (keepGoing);
+                }
+            }
+            
+            if (null != url) {
+                result = new FaceletResourceInfo(outContract[0], resourceName, null, this, url);
+                if (doNotCache) {
+                    result.setDoNotCache(doNotCache);
+                }
+            }
+        } catch (IOException ex) {
+            throw new FacesException(ex);
+        } 
+        
+        return result;
+    }
+    
+    private URL findResourceInfoConsideringContracts(FacesContext ctx,
+            String baseResourceName,
+            ContractInfo [] outContract,
+            List<String> contracts) throws MalformedURLException {
+        URL url = null;
+        String resourceName;
+        
+        for (String curContract : contracts) {
+            if (baseResourceName.startsWith("/")) {
+                resourceName = webAppContractsDirectory + "/" + curContract + baseResourceName;
+            } else {
+                resourceName = webAppContractsDirectory + "/" + curContract + "/" + baseResourceName;
+            }
+            url = Resource.getResourceUrl(ctx, resourceName);
+            if (null != url) {
+                outContract[0] = new ContractInfo(curContract);
+                break;
+            } else {
+                if (baseResourceName.startsWith("/")) {
+                    resourceName = META_INF_CONTRACTS_DIR + "/" + curContract + baseResourceName;
+                } else {
+                    resourceName = META_INF_CONTRACTS_DIR + "/" + curContract + "/" + baseResourceName;
+                }
+                url = Util.getCurrentLoader(this).getResource(resourceName);
+                if (null != url) {
+                    outContract[0] = new ContractInfo(curContract);
+                    break;
+                }                
+            }
+            
+        }
+        
+        return url;
+    }
+    
+    
+
+    
+
+    @Override
+    public String getBaseResourcePath() {
+        return "";
+    }
+
+    @Override
+    public String getBaseContractsPath() {
+        return webAppContractsDirectory;
+    }
+
+    @Override
+    protected InputStream getNonCompressedInputStream(ResourceInfo info, FacesContext ctx) throws IOException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public URL getURL(ResourceInfo resource, FacesContext ctx) {
+        return ((FaceletResourceInfo)resource).getUrl();
+    }
+
+
+    
+}
diff --git a/com/sun/faces/application/resource/LibraryInfo.java b/com/sun/faces/application/resource/LibraryInfo.java
new file mode 100644
index 0000000..2083fb8
--- /dev/null
+++ b/com/sun/faces/application/resource/LibraryInfo.java
@@ -0,0 +1,234 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+/**
+ * <p>
+ * <code>LibraryInfo</code> is a simple wrapper class for information pertinent to building
+ * a complete resource path using a Library and/or Contract.
+ * <p>
+ */
+public class LibraryInfo {
+
+    private String name;
+    private VersionInfo version;
+    private String localePrefix;
+    private String contract;
+    private ResourceHelper helper;
+    private String path;
+    private String nonLocalizedPath;
+
+    /**
+     * Constructs a new <code>LibraryInfo</code> using the specified details.
+     * @param name the name of the library
+     * @param version the version of the library, if any
+     * @param contract
+     * @param helper the helper class for this resource
+     */
+    LibraryInfo(String name,
+                VersionInfo version,
+                String localePrefix,
+                String contract, ResourceHelper helper) {
+        this.name = name;
+        this.version = version;
+        this.localePrefix = localePrefix;
+        this.contract = contract;
+        this.helper = helper;
+        initPath();
+    }
+    
+    LibraryInfo(LibraryInfo other, boolean copyLocalePrefix) {
+        this.name = other.name;
+        this.version = other.version;
+        if (copyLocalePrefix) {
+            this.contract = other.contract;
+            
+            // http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-548 http://java.net/jira/browse/JAVASERVERFACES-2348
+            this.localePrefix = other.localePrefix;
+        }
+        this.helper = other.helper;
+        initPath();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        if (this == obj) {
+            return true;
+        }
+        final LibraryInfo other = (LibraryInfo) obj;
+        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
+            return false;
+        }
+        if (this.version != other.version && (this.version == null || !this.version.equals(other.version))) {
+            return false;
+        }
+        if ((this.localePrefix == null) ? (other.localePrefix != null) : !this.localePrefix.equals(other.localePrefix)) {
+            return false;
+        }
+        if ((this.contract == null) ? (other.contract != null) : !this.contract.equals(other.contract)) {
+            return false;
+        }
+        if ((this.path == null) ? (other.path != null) : !this.path.equals(other.path)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 37 * hash + (this.name != null ? this.name.hashCode() : 0);
+        hash = 37 * hash + (this.version != null ? this.version.hashCode() : 0);
+        hash = 37 * hash + (this.localePrefix != null ? this.localePrefix.hashCode() : 0);
+        hash = 37 * hash + (this.contract != null ? this.contract.hashCode() : 0);
+        hash = 37 * hash + (this.path != null ? this.path.hashCode() : 0);
+        return hash;
+    }
+
+
+
+    /**
+     * @return return the library name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * @return return the version of the library, or <code>null</code>
+     *  if the library isn't versioned.
+     */
+    public VersionInfo getVersion() {
+        return version;
+    }
+
+    /**
+     * @return return the {@link ResourceHelper} for this resource
+     */
+    public ResourceHelper getHelper() {
+        return helper;
+    }
+
+    /**
+     * @return the base path of the library.
+     */
+    public String getPath() {
+        return path;
+    }
+    
+    public String getPath(String localePrefix) {
+        String result = null;
+        if (null == localePrefix) {
+            result = nonLocalizedPath;
+        } else {
+            result = path;
+        }
+        return result;
+    }
+    
+    /**
+     * @return the Locale prefix, if any.
+     */
+    public String getLocalePrefix() {
+        return localePrefix;
+    }
+    
+    /**
+     * @return active contract or null
+     */
+    public String getContract() {
+		return contract;
+	}
+
+    public String toString() {
+        return "LibraryInfo{" +
+               "name='" + (name != null ? name : "NONE") + '\'' +
+               ", version=" + ((version != null) ? version : "NONE") + '\'' +
+               ", localePrefix='" + ((localePrefix != null) ? localePrefix : "NONE") + '\'' +
+               ", contract='" + ((contract != null) ? contract : "NONE") + '\'' +
+               ", path='" + path + '\'' +
+               '}';
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * Construct the full path to the base directory of the library's resources.
+     */
+    private void initPath() {
+
+        StringBuilder builder = new StringBuilder(64),
+                      noLocaleBuilder = new StringBuilder(64);
+
+        appendBasePath(builder);
+        appendBasePath(noLocaleBuilder);
+
+        if (localePrefix != null) {
+            builder.append('/').append(localePrefix);
+        }
+        if (name != null) {
+	        builder.append('/').append(name);
+	        noLocaleBuilder.append('/').append(name);
+        }
+        if (version != null) {
+            builder.append('/').append(version.getVersion());
+            noLocaleBuilder.append('/').append(version.getVersion());
+        }
+        path = builder.toString();
+        nonLocalizedPath = noLocaleBuilder.toString();
+    }
+
+    private void appendBasePath(StringBuilder builder) {
+        if (contract == null) {
+            builder.append(helper.getBaseResourcePath());
+        } else {
+            builder.append(helper.getBaseContractsPath()).append('/').append(contract);
+        }
+    }
+
+}
diff --git a/com/sun/faces/application/resource/Resource.java b/com/sun/faces/application/resource/Resource.java
new file mode 100644
index 0000000..3414db9
--- /dev/null
+++ b/com/sun/faces/application/resource/Resource.java
@@ -0,0 +1,192 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.application.resource;
+
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * @author Roland Huss
+ * 
+ */
+public final class Resource {
+
+    protected final static Logger log = FacesLogger.FACELETS_FACTORY.getLogger();
+
+    /**
+     * Get an URL of an internal resource. First,
+     * {@link javax.faces.context.ExternalContext#getResource(String)} is
+     * checked for an non-null URL return value. In the case of a null return
+     * value (as it is the case for Weblogic 8.1 for a packed war), a URL with a
+     * special URL handler is constructed, which can be used for
+     * <em>opening</em> a serlvet resource later. Internally, this special URL
+     * handler will call {@link ServletContext#getResourceAsStream(String)} when
+     * an inputstream is requested. This works even on Weblogic 8.1
+     * 
+     * @param ctx
+     *            the faces context from which to retrieve the resource
+     * @param path
+     *            an URL path
+     * 
+     * @return an url representing the URL and on which getInputStream() can be
+     *         called to get the resource
+     * @throws MalformedURLException
+     */
+    static URL getResourceUrl(FacesContext ctx, String path)
+            throws MalformedURLException {
+        final ExternalContext externalContext = ctx.getExternalContext();
+        URL url = externalContext.getResource(path);
+        if (log.isLoggable(Level.FINE)) {
+            log.fine("Resource-Url from external context: " + url);
+        }
+        // This might happen on Servlet container which doesnot return
+        // anything
+        // for getResource() (like weblogic 8.1 for packaged wars) we
+        // are trying
+        // to use an own URL protocol in order to use
+        // ServletContext.getResourceAsStream()
+        // when opening the url
+        if (url == null && resourceExist(externalContext, path)) {
+            url = getUrlForResourceAsStream(externalContext, path);
+        }
+        return url;
+    }
+
+    // This method could be used above to provide a 'fail fast' if a
+    // resource
+    // doesnt exist. Otherwise, the URL will fail on the first access.
+    private static boolean resourceExist(ExternalContext externalContext,
+            String path) {
+        if ("/".equals(path)) {
+            // The root context exists always
+            return true;
+        }
+        Object ctx = externalContext.getContext();
+        if (ctx instanceof ServletContext) {
+            ServletContext servletContext = (ServletContext) ctx;
+            InputStream stream = servletContext.getResourceAsStream(path);
+            if (stream != null) {
+                try {
+                    stream.close();
+                } catch (IOException e) {
+                    if (log.isLoggable(Level.FINEST)) {
+                        log.log(Level.FINEST, "Closing stream", e);
+                    }
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    // Construct URL with special URLStreamHandler for proxying
+    // ServletContext.getResourceAsStream()
+    private static URL getUrlForResourceAsStream(
+            final ExternalContext externalContext, String path)
+            throws MalformedURLException {
+        URLStreamHandler handler = new URLStreamHandler() {
+            protected URLConnection openConnection(URL u) throws IOException {
+                final String file = u.getFile();
+                return new URLConnection(u) {
+                    public void connect() throws IOException {
+                    }
+
+                    public InputStream getInputStream() throws IOException {
+                        if (log.isLoggable(Level.FINE)) {
+                            log.fine("Opening internal url to " + file);
+                        }
+                        Object ctx = externalContext.getContext();
+                        // Or maybe fetch the external context afresh ?
+                        // Object ctx =
+                        // FacesContext.getCurrentInstance().getExternalContext().getContext();
+
+                        if (ctx instanceof ServletContext) {
+                            ServletContext servletContext = (ServletContext) ctx;
+                            InputStream stream = servletContext
+                                    .getResourceAsStream(file);
+                            if (stream == null) {
+                                throw new FileNotFoundException(
+                                        "Cannot open resource " + file);
+                            }
+                            return stream;
+                        } else {
+                            throw new IOException(
+                                    "Cannot open resource for an context of "
+                                            + (ctx != null ? ctx.getClass()
+                                                    : null));
+                        }
+                    }
+                };
+            }
+        };
+        return new URL("internal", null, 0, path, handler);
+    }
+}
diff --git a/com/sun/faces/application/resource/ResourceCache.java b/com/sun/faces/application/resource/ResourceCache.java
new file mode 100644
index 0000000..94c5df9
--- /dev/null
+++ b/com/sun/faces/application/resource/ResourceCache.java
@@ -0,0 +1,245 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.servlet.ServletContext;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.MultiKeyConcurrentHashMap;
+
+/**
+ * <p>
+ * This is the caching mechanism for caching ResourceInfo instances to
+ * offset the cost of looking up the resource.
+ * </p>
+ *
+ * <p>
+ * This cache uses a background thread to check for modifications to the underlying
+ * webapp or JAR files containing resources.  This check is periodic, configurable
+ * via context init param <code>com.sun.faces.resourceUpdateCheckPeriod</code>.  Through
+ * this config option, the cache can also be made static or completely disabled.
+ * If the value of of this option is <code>0</code>, then no check will be made
+ * making the cache static.  If value of this option is <code>less than 0</code>,
+ * then no caching will be perfomed.  Otherwise, the value of the option will
+ * be the number of minutes between modification checks.
+ * </p>
+ */
+public class ResourceCache {
+
+    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
+
+
+    /**
+     * The <code>ResourceInfo<code> cache.
+     */
+    private MultiKeyConcurrentHashMap<Object,ResourceInfoCheckPeriodProxy> resourceCache;
+
+
+    /**
+     * Resource check period in minutes.
+     */
+    private long checkPeriod;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Constructs a new ResourceCache.
+     */
+    public ResourceCache() {
+
+        WebConfiguration config = WebConfiguration.getInstance();
+        assert (config != null);
+        ServletContext sc = config.getServletContext();
+        long period = getCheckPeriod(config);
+        checkPeriod = ((period != -1) ? period * 1000L * 60L : -1);
+        resourceCache = new MultiKeyConcurrentHashMap<Object,ResourceInfoCheckPeriodProxy>(30);
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                       "ResourceCache constructed for {0}.  Check period is {1} minutes.",
+                       new Object[] { getServletContextIdentifier(sc), checkPeriod });
+        }
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * Add the {@link ResourceInfo} to the internal cache.
+     *
+     * @param info resource metadata
+     *
+     * @param contracts the contracts
+     * @return previous value associated with specified key, or null
+     *  if there was no mapping for key
+     */
+    public ResourceInfo add(ResourceInfo info, List<String> contracts) {
+
+        Util.notNull("info", info);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                       "Caching ResourceInfo: {0}",
+                       info.toString());
+        }
+        ResourceInfoCheckPeriodProxy proxy =
+              resourceCache.putIfAbsent(info.name,
+                                        info.libraryName,
+                                        info.localePrefix,
+                                        contracts,
+                                        new ResourceInfoCheckPeriodProxy(info, checkPeriod));
+        return ((proxy != null) ? proxy.getResourceInfo() : null);
+
+    }
+
+
+    /**
+     * @param name the resource name
+     * @param libraryName the library name
+     * @param localePrefix the locale prefix
+     * @param contracts the contracts
+     * @return the {@link ResourceInfo} associated with <code>key<code>
+     *  if any.
+     */
+    public ResourceInfo get(String name, String libraryName, String localePrefix, List<String> contracts) {
+
+        Util.notNull("name", name);
+
+        ResourceInfoCheckPeriodProxy proxy =
+              resourceCache.get(name, libraryName, localePrefix, contracts);
+        if (proxy != null && proxy.needsRefreshed()) {
+            resourceCache.remove(name, libraryName, localePrefix, contracts);
+            return null;
+        } else {
+            return ((proxy != null) ? proxy.getResourceInfo() : null);
+        }
+
+    }
+
+
+    /**
+     * <p>Empty the cache.</p>
+     */
+    public void clear() {
+
+        resourceCache.clear();
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, "Cache Cleared");
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private Long getCheckPeriod(WebConfiguration webConfig) {
+
+        String val = webConfig.getOptionValue(WebContextInitParameter.ResourceUpdateCheckPeriod);
+        try {
+            return (Long.parseLong(val));
+        } catch (NumberFormatException nfe) {
+            return Long.parseLong(WebContextInitParameter.ResourceUpdateCheckPeriod.getDefaultValue());
+        }
+
+    }
+
+
+    private static String getServletContextIdentifier(ServletContext context) {
+
+        if (context.getMajorVersion() == 2 && context.getMinorVersion() < 5) {
+            return context.getServletContextName();
+        } else {
+            return context.getContextPath();
+        }
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private static final class ResourceInfoCheckPeriodProxy {
+
+        private ResourceInfo resourceInfo;
+        private Long checkTime;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        public ResourceInfoCheckPeriodProxy(ResourceInfo resourceInfo,
+                                            long checkPeriod) {
+
+            this.resourceInfo = resourceInfo;
+            if (checkPeriod != -1L && (!(resourceInfo.getHelper() instanceof ClasspathResourceHelper))) {
+                checkTime = System.currentTimeMillis() + checkPeriod;
+            }
+        }
+
+        private boolean needsRefreshed() {
+
+            return (checkTime != null
+                       && (checkTime < System.currentTimeMillis()));
+
+        }
+
+
+        private ResourceInfo getResourceInfo() {
+
+            return resourceInfo;
+
+        }
+
+    } // END ResourceInfoCheckPeriodProxy
+
+
+} // END ResourceCache
diff --git a/com/sun/faces/application/resource/ResourceHandlerImpl.java b/com/sun/faces/application/resource/ResourceHandlerImpl.java
new file mode 100644
index 0000000..62733e0
--- /dev/null
+++ b/com/sun/faces/application/resource/ResourceHandlerImpl.java
@@ -0,0 +1,659 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.config.WebConfiguration;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.*;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.RequestStateManager;
+import com.sun.faces.util.Util;
+
+import javax.faces.application.ProjectStage;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+
+/**
+ * This is the default implementation of {@link ResourceHandler}.
+ */
+public class ResourceHandlerImpl extends ResourceHandler {
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    ResourceManager manager;
+    List<Pattern> excludePatterns;
+    private long creationTime;
+    private long maxAge;
+    private WebConfiguration webconfig;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Creates a new instance of ResourceHandlerImpl
+     */
+    public ResourceHandlerImpl() {
+
+        creationTime = System.currentTimeMillis();
+        webconfig = WebConfiguration.getInstance();
+        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
+        manager = ApplicationAssociate.getInstance(extContext).getResourceManager();
+        initExclusions(extContext.getApplicationMap());
+        initMaxAge();
+
+    }
+
+
+    // ------------------------------------------- Methods from Resource Handler
+
+
+    /**
+     * @see ResourceHandler#createResource(String)
+     */
+    public Resource createResource(String resourceName) {
+
+        Util.notNull("resourceName", resourceName);
+
+        return createResource(resourceName, null, null);
+
+    }
+
+    @Override
+    public Resource createViewResource(FacesContext facesContext, String resourceName) {
+
+        Util.notNull("resourceName", resourceName);
+
+        boolean development = facesContext.isProjectStage(ProjectStage.Development);
+
+        String ctype = getContentType(facesContext, resourceName);
+        ResourceInfo info = manager.findResource(null,
+                                                 resourceName,
+                                                 ctype,
+                                                 true,
+                                                 facesContext);
+        if (info == null) {
+            // prevent message from being when we're dealing with
+            // groovy is present and Application.createComponent()
+            // tries to resolve a .groovy file as backing UIComponent.
+            if (!development && "application/x-groovy".equals(ctype)) {
+                return null;
+            }
+            logMissingResource(facesContext, resourceName, null, null);
+            return null;
+        } else {
+            return new ResourceImpl(info, ctype, creationTime, maxAge);
+        }
+    }
+    
+    
+
+    /**
+     * @see ResourceHandler#createResourceFromId(String)
+     */
+    @Override
+    public Resource createResourceFromId(String resourceId) {
+        Util.notNull("resourceId", resourceId);
+        FacesContext ctx = FacesContext.getCurrentInstance();
+
+        boolean development = ctx.isProjectStage(ProjectStage.Development);
+        
+        ResourceInfo info = manager.findResource(resourceId);
+        String ctype = getContentType(ctx, resourceId);
+        if (info == null) {
+            // prevent message from being when we're dealing with
+            // groovy is present and Application.createComponent()
+            // tries to resolve a .groovy file as backing UIComponent.
+            if (!development && "application/x-groovy".equals(ctype)) {
+                return null;
+            }
+            logMissingResource(ctx, resourceId, null);
+            return null;
+        } else {
+            return new ResourceImpl(info, ctype, creationTime, maxAge);
+        }
+        
+    }
+    
+    
+
+
+    /**
+     * @see ResourceHandler#createResource(String, String)
+     */
+    public Resource createResource(String resourceName, String libraryName) {
+
+        Util.notNull("resourceName", resourceName);
+
+        return createResource(resourceName, libraryName, null);
+
+    }
+
+
+    /**
+     * @see ResourceHandler#createResource(String, String, String)
+     */
+    public Resource createResource(String resourceName,
+                                   String libraryName,
+                                   String contentType) {
+
+        Util.notNull("resourceName", resourceName);
+        FacesContext ctx = FacesContext.getCurrentInstance();
+
+        boolean development = ctx.isProjectStage(ProjectStage.Development);
+
+        String ctype = ((contentType != null)
+                        ? contentType
+                        : getContentType(ctx, resourceName));
+        ResourceInfo info = manager.findResource(libraryName,
+                                                 resourceName,
+                                                 ctype,
+                                                 ctx);
+        if (info == null) {
+            // prevent message from being when we're dealing with
+            // groovy is present and Application.createComponent()
+            // tries to resolve a .groovy file as backing UIComponent.
+            if (!development && "application/x-groovy".equals(ctype)) {
+                return null;
+            }
+            logMissingResource(ctx, resourceName, libraryName, null);
+            return null;
+        } else {
+            return new ResourceImpl(info, ctype, creationTime, maxAge);
+        }
+
+    }
+
+    @Override
+    public boolean libraryExists(String libraryName) {
+
+        if (libraryName.contains("../")) {
+            return false;
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        // PENDING(fcaputo) do we need to iterate over the contracts here? I don't think so.
+        LibraryInfo info = manager.findLibrary(libraryName, null, null, context);
+        if (null == info) {
+            info = manager.findLibraryOnClasspathWithZipDirectoryEntryScan(libraryName, null, null, context, true);
+
+        }
+        return (info != null);
+
+    }
+    
+    /**
+     * @see ResourceHandler#isResourceRequest(javax.faces.context.FacesContext)
+     */
+    public boolean isResourceRequest(FacesContext context) {
+
+        Boolean isResourceRequest = (Boolean)
+              RequestStateManager.get(context,
+                                      RequestStateManager.RESOURCE_REQUEST);
+        if (isResourceRequest == null) {
+            String resourceId = normalizeResourceRequest(context);
+            isResourceRequest = (resourceId != null
+                                 ? resourceId.startsWith(RESOURCE_IDENTIFIER)
+                                 : Boolean.FALSE);
+            RequestStateManager.set(context,
+                                    RequestStateManager.RESOURCE_REQUEST,
+                                    isResourceRequest);
+        }
+
+        return (isResourceRequest);
+
+    }
+
+    @Override
+    public String getRendererTypeForResourceName(String resourceName) {
+        String rendererType = null;
+        
+        String contentType = getContentType(FacesContext.getCurrentInstance(),
+                                            resourceName);
+        if (null != contentType) {
+            contentType = contentType.toLowerCase();
+            if (-1 != contentType.indexOf("javascript")) {
+                rendererType = "javax.faces.resource.Script";
+            }
+            else if (-1 != contentType.indexOf("css")) {
+                rendererType = "javax.faces.resource.Stylesheet";
+            }
+        }
+        return rendererType;
+    }
+    
+    
+
+
+
+    /**
+     * @see javax.faces.application.ResourceHandler#handleResourceRequest(javax.faces.context.FacesContext)
+     */
+    public void handleResourceRequest(FacesContext context) throws IOException {
+
+        String resourceId = normalizeResourceRequest(context);
+        // handleResourceRequest called for a non-resource request,
+        // bail out.
+        if (resourceId == null) {
+            return;
+        }
+        
+        ExternalContext extContext = context.getExternalContext();
+
+        if (isExcluded(resourceId)) {
+            extContext.setResponseStatus(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
+
+        assert (null != resourceId);
+        assert (resourceId.startsWith(RESOURCE_IDENTIFIER));
+
+        Resource resource = null;
+        String resourceName = null;
+        String libraryName = null;
+        if (ResourceHandler.RESOURCE_IDENTIFIER.length() < resourceId.length()) {
+            resourceName = resourceId.substring(RESOURCE_IDENTIFIER.length() + 1);
+            assert(resourceName != null);
+            libraryName = context.getExternalContext().getRequestParameterMap()
+                  .get("ln");
+            
+            if ((libraryName != null && !(libraryName.charAt(0) == '.')) || libraryName == null) {
+                resource = context.getApplication().getResourceHandler().createResource(resourceName, libraryName);
+            }
+        }
+
+        if (resource != null) {
+            if (resource.userAgentNeedsUpdate(context)) {
+                ReadableByteChannel resourceChannel = null;
+                WritableByteChannel out = null;
+                ByteBuffer buf = allocateByteBuffer();
+                try {
+                    InputStream in = resource.getInputStream();
+                    if (in == null) {
+                        send404(context, resourceName, libraryName, true);
+                        return;
+                    }
+                    resourceChannel =
+                          Channels.newChannel(in);
+                    out = Channels.newChannel(extContext.getResponseOutputStream());
+                    extContext.setResponseBufferSize(buf.capacity());
+                    String contentType = resource.getContentType();
+                    if (contentType != null) {
+                        extContext.setResponseContentType(resource.getContentType());
+                    }
+                    handleHeaders(context, resource);
+
+                    int size = 0;
+                    for (int thisRead = resourceChannel.read(buf), totalWritten = 0;
+                         thisRead != -1;
+                         thisRead = resourceChannel.read(buf)) {
+
+                        buf.rewind();
+                        buf.limit(thisRead);
+                        do {
+                            totalWritten += out.write(buf);
+                        } while (totalWritten < size);
+                        buf.clear();
+                        size += thisRead;
+
+                    }
+
+                    if (!extContext.isResponseCommitted()) {
+                        extContext.setResponseContentLength(size);
+                    }
+
+                } catch (IOException ioe) {
+                    send404(context, resourceName, libraryName, ioe, true);
+                } finally {
+                    if (out != null) {
+                        try {
+                            out.close();
+                        } catch (IOException ignored) {
+                            // Maybe log a warning here?
+                        }
+                    }
+                    if (resourceChannel != null) {
+                        resourceChannel.close();
+                    }
+                }
+            } else {
+                send304(context);
+            }
+
+        } else {
+            // already logged elsewhere
+            send404(context, resourceName, libraryName, false);
+        }
+
+    }
+
+
+    private void send404(FacesContext ctx,
+                         String resourceName,
+                         String libraryName,
+                         boolean logMessage) {
+
+        send404(ctx, resourceName, libraryName, null, logMessage);
+
+    }
+
+
+    private void send404(FacesContext ctx,
+                         String resourceName,
+                         String libraryName,
+                         Throwable t,
+                         boolean logMessage) {
+
+        ctx.getExternalContext().setResponseStatus(HttpServletResponse.SC_NOT_FOUND);
+        if (logMessage) {
+            logMissingResource(ctx, resourceName, libraryName, t);
+        }
+
+
+    }
+
+
+    private void send304(FacesContext ctx) {
+
+        ctx.getExternalContext().setResponseStatus(HttpServletResponse.SC_NOT_MODIFIED);
+
+    }
+
+
+
+    // ------------------------------------------------- Package Private Methods
+
+
+    /**
+     * This method is leveraged by {@link ResourceImpl} to detemine if a resource
+     * has been upated.  In short, a resource has been updated if the timestamp
+     * is newer than the timestamp of the ResourceHandler creation time.
+     * @return the time when the ResourceHandler was instantiated (in milliseconds)
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    long getCreationTime() {
+
+        return creationTime;
+
+    }
+
+
+    /**
+     * This method is here soley for the purpose of unit testing and will
+     * not be invoked during normal runtime.
+     * @param creationTime the time in milliseconds
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    void setCreationTime(long creationTime) {
+
+        this.creationTime = creationTime;
+
+    }
+
+
+    /**
+     * Utility method leveraged by ResourceImpl to reduce the cost of
+     * looking up the WebConfiguration per-instance.
+     * @return the {@link WebConfiguration} for this application
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    WebConfiguration getWebConfig() {
+
+        return webconfig;
+        
+    }
+
+    
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * Log a message indicating a particular resource (reference by name and/or
+     * library) could not be found.  If this was due to an exception, the exception
+     * provided will be logged as well.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param resourceName the resource name
+     * @param libraryName the resource library
+     * @param t the exception caught when attempting to find the resource
+     */
+    private void logMissingResource(FacesContext ctx,
+                                    String resourceName,
+                                    String libraryName,
+                                    Throwable t) {
+
+        Level level;
+        if (!ctx.isProjectStage(ProjectStage.Production)) {
+            level = Level.WARNING;
+        } else {
+            level = ((t != null) ? Level.WARNING : Level.FINE);
+        }
+
+        if (libraryName != null) {
+            if (LOGGER.isLoggable(level)) {
+                LOGGER.log(level,
+                           "jsf.application.resource.unable_to_serve_from_library",
+                           new Object[]{resourceName, libraryName});
+                if (t != null) {
+                    LOGGER.log(level, "", t);
+                }
+            }
+        } else {
+            if (LOGGER.isLoggable(level)) {
+                LOGGER.log(level,
+                           "jsf.application.resource.unable_to_serve",
+                           new Object[]{resourceName});
+                if (t != null) {
+                    LOGGER.log(level, "", t);
+                }
+            }
+        }
+
+    }
+
+    /**
+     * Log a message indicating a particular resource (reference by name and/or
+     * library) could not be found.  If this was due to an exception, the exception
+     * provided will be logged as well.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param resourceName the resource name
+     * @param libraryName the resource library
+     * @param t the exception caught when attempting to find the resource
+     */
+    private void logMissingResource(FacesContext ctx,
+                                    String resourceId,
+                                    Throwable t) {
+
+        Level level;
+        if (!ctx.isProjectStage(ProjectStage.Production)) {
+            level = Level.WARNING;
+        } else {
+            level = ((t != null) ? Level.WARNING : Level.FINE);
+        }
+
+        if (LOGGER.isLoggable(level)) {
+                LOGGER.log(level,
+                           "jsf.application.resource.unable_to_serve",
+                           new Object[]{resourceId});
+                if (t != null) {
+                    LOGGER.log(level, "", t);
+                }
+        }
+
+    }
+
+
+    /**
+     * @param resourceName the resource of interest.  The resourceName in question
+     *  may consist of zero or more path elements such that resourceName could
+     *  be something like path1/path2/resource.jpg or resource.jpg
+     * @return the content type for this resource
+     */
+    private String getContentType(FacesContext ctx, String resourceName) {
+
+        return ctx.getExternalContext().getMimeType(resourceName);
+
+    }
+
+
+    /**
+     * Normalize the request path to exclude JSF invocation information.
+     * If the FacesServlet servicing this request was prefix mapped, then
+     * the path to the FacesServlet will be removed.
+     * If the FacesServlet servicing this request was extension mapped, then
+     * the extension will be trimmed off.
+     * @param context the <code>FacesContext</code> for the current request
+     * @return the request path without JSF invocation information
+     */
+    private String normalizeResourceRequest(FacesContext context) {
+
+        String path;
+        String facesServletMapping = Util.getFacesMapping(context);
+        // If it is extension mapped
+        if (!Util.isPrefixMapped(facesServletMapping)) {
+            path = context.getExternalContext().getRequestServletPath();
+            // strip off the extension
+            int i = path.lastIndexOf(".");
+            if (0 < i) {
+                path = path.substring(0, i);
+            }
+        } else {
+            path = context.getExternalContext().getRequestPathInfo();
+        }
+        return path;
+
+    }
+
+
+    /**
+     * @param resourceId the normalized request path as returned by
+     *  {@link #normalizeResourceRequest(javax.faces.context.FacesContext)}
+     * @return <code>true</code> if the request matces an excluded resource,
+     *  otherwise <code>false</code>
+     */
+    private boolean isExcluded(String resourceId) {
+        for (Pattern pattern : excludePatterns) {
+            if (pattern.matcher(resourceId).matches()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    /**
+     * Initialize the exclusions for this application.
+     * If no explicit exclusions are configured, the defaults of
+     * <ul>
+     * <li>.class</li>
+     * <li>.properties</li>
+     * <li>.xhtml</li>
+     * <li>.jsp</li>
+     * <li>.jspx</li>
+     * <ul>
+     * will be used.
+     */
+    private void initExclusions(Map<String, Object> appMap) {
+
+        String excludesParam = webconfig
+              .getOptionValue(ResourceExcludes);
+        String[] patterns = Util.split(appMap, excludesParam, " ");
+        excludePatterns = new ArrayList<Pattern>(patterns.length);
+        for (String pattern : patterns) {
+            excludePatterns.add(Pattern.compile(".*\\" + pattern));
+        }
+        
+    }
+
+    private void initMaxAge() {
+
+        maxAge = Long.parseLong(webconfig.getOptionValue(DefaultResourceMaxAge));
+
+    }
+
+
+    private void handleHeaders(FacesContext ctx,
+                               Resource resource) {
+
+        ExternalContext extContext = ctx.getExternalContext();
+        for (Map.Entry<String, String> cur :
+             resource.getResponseHeaders().entrySet()) {
+                extContext.setResponseHeader(cur.getKey(), cur.getValue());
+        }
+
+    }
+
+    private ByteBuffer allocateByteBuffer() {
+
+        int size;
+        try {
+            size = Integer.parseInt(webconfig.getOptionValue(ResourceBufferSize));
+        } catch (NumberFormatException nfe) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                           "jsf.application.resource.invalid_resource_buffer_size",
+                           new Object[] {
+                               webconfig.getOptionValue(ResourceBufferSize),
+                               ResourceBufferSize.getQualifiedName(),
+                               ResourceBufferSize.getDefaultValue()
+                           });
+            }
+            size = Integer.parseInt(ResourceBufferSize.getDefaultValue());
+        }
+        return ByteBuffer.allocate(size);
+
+    }
+}
diff --git a/com/sun/faces/application/resource/ResourceHelper.java b/com/sun/faces/application/resource/ResourceHelper.java
new file mode 100644
index 0000000..c0f1043
--- /dev/null
+++ b/com/sun/faces/application/resource/ResourceHelper.java
@@ -0,0 +1,869 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ByteArrayInputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.zip.GZIPOutputStream;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpServletResponse;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.MessageUtils;
+
+/**
+ * <p>
+ * Implementations of this class contain the knowledge for finding and serving
+ * web application resources.
+ * <p>
+ *
+ * @since 2.0
+ */
+public abstract class ResourceHelper {
+
+    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
+
+    /**
+     * This pattern represents a version for a library.
+     * Examples:
+     *   1_1
+     *   1_11
+     *   1_11_1
+     *   1_11_1_2
+     */
+    private static final Pattern LIBRARY_VERSION_PATTERN =
+          Pattern.compile("^(\\d+)(_\\d+)+");
+
+    /**
+     * This pattern represents a version for a resource.
+     * Examples:
+     *   1_1.jpg
+     *   1_11.323
+     *   1_11_1.gif
+     *   1_11_1_2.txt
+     *   1_1
+     *   1_11
+     *   1_11_1
+     *   1_11_1_2
+     *
+     *  The extension is optional.
+     */
+    private static final Pattern RESOURCE_VERSION_PATTERN =
+          Pattern.compile("^((?:\\d+)(?:_\\d+)+)[\\.]?(\\w+)?");
+
+    /**
+     * Arbitrary file name to write the compressed bits to.
+     */
+    private static final String COMPRESSED_CONTENT_FILENAME =
+          "compressed-content";
+
+    private static final String[] EL_CONTENT_TYPES = {
+          "text/css",
+    };
+
+    static {
+        Arrays.sort(EL_CONTENT_TYPES);
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @return the base path in which resources will be stored
+     */
+    public abstract String getBaseResourcePath();
+    
+    public abstract String getBaseContractsPath();
+
+    protected String getBasePath(String contract) {
+        if(contract == null) {
+            return getBaseResourcePath();
+        }
+        return getBaseContractsPath() + '/' + contract;
+    }
+
+
+    /**
+     * <p>
+     * If the resource is compressable, return an InputStream to read the
+     * compressed content, otherwise, call {@link #getNonCompressedInputStream(ResourceInfo, javax.faces.context.FacesContext)}
+     * to return the content of the original resource.
+     * </p>
+     * <p>
+     * Implementation Note:  If any exception occurs trying to return a stream
+     * to the compressed content, log the exception, and instead try to return
+     * a stream to the original content.
+     * </p>
+     * @param toStream the resource to obtain an InputStream to
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @return an <code>InputStream</code> to the resource, or
+     *  <code>null</code> if no resource is found
+     * @throws IOException if an error occurs obtaining the stream
+     */
+    public InputStream getInputStream(ResourceInfo toStream, FacesContext ctx)
+    throws IOException {
+
+        // PENDING(edburns): this is a sub-optimal implementation choice
+        // done in the interest of prototyping.  It's never a good idea 
+        // to do a switch statement based on the type of an object.
+        
+        InputStream in = null;
+        
+        if (toStream instanceof ClientResourceInfo) {
+            ClientResourceInfo resource = (ClientResourceInfo) toStream;
+        
+            in = getInputStreamFromClientInfo(resource, ctx);
+            if (null == in) {
+                ClientResourceInfo resourceWithoutLocalePrefix = 
+                        new ClientResourceInfo(resource, false);
+                in = getInputStreamFromClientInfo(resourceWithoutLocalePrefix, ctx);
+                if (null != in) {
+                    resource.copy(resourceWithoutLocalePrefix);
+                }
+            }
+        
+        } 
+//        else {
+//            // PENDING(edburns): get the input stream from the facelet ResourceInfo.
+//        }
+        return in;
+
+    }
+    
+    private InputStream getInputStreamFromClientInfo(ClientResourceInfo resource,
+            FacesContext ctx) throws IOException {
+        InputStream in = null;
+        
+        if (resource.isCompressable() && clientAcceptsCompression(ctx)) {
+            if (!resource.supportsEL()) {
+                try {
+                    String path = resource.getCompressedPath();
+                    in = new BufferedInputStream(
+                            new FileInputStream(path
+                            + File.separatorChar
+                            + COMPRESSED_CONTENT_FILENAME));
+                } catch (IOException ioe) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                ioe.getMessage(),
+                                ioe);
+                    }
+                    // return null so that the override code will try to serve
+                    // the non-compressed content
+                    in = null;
+                }
+            } else {
+                InputStream temp = null;
+                try {
+                    // using dynamic compression here
+                    temp = new BufferedInputStream(
+                            new ELEvaluatingInputStream(ctx,
+                                    resource,
+                                    getNonCompressedInputStream(resource,
+                            ctx)));
+                    byte[] buf = new byte[512];
+                    ByteArrayOutputStream baos = new ByteArrayOutputStream(512);
+                    OutputStream out = new GZIPOutputStream(baos);
+                    for (int read = temp.read(buf); read != -1; read = temp.read(buf)) {
+                        out.write(buf, 0, read);
+                    }
+                    out.flush();
+                    out.close();
+                    in = new BufferedInputStream(
+                            new ByteArrayInputStream(baos.toByteArray()));
+                    
+                } catch (IOException ioe) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                ioe.getMessage(),
+                                ioe);
+                    }
+                } finally {
+                    if (temp != null) {
+                        try {
+                            temp.close();
+                        } catch (IOException ioe) {
+                            if (LOGGER.isLoggable(Level.FINEST)) {
+                                LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        
+        if (in == null) {
+            if (resource.supportsEL()) {
+                return new BufferedInputStream(
+                        new ELEvaluatingInputStream(ctx,
+                                resource,
+                                getNonCompressedInputStream(resource,
+                        ctx)));
+            } else {
+                in = getNonCompressedInputStream(resource, ctx);
+            }
+        }
+        return in;
+    }
+
+
+    /**
+     * @param resource the resource to obtain a URL reference to
+     * @param ctx the {@link FacesContext} for the current request
+     * @return a URL to the specified resource, otherwise <code>null</code>
+     *  if no resource is found
+     */
+    public abstract URL getURL(ResourceInfo resource, FacesContext ctx);
+
+
+    /**
+     * Search for the specified library/localPrefix combination in an
+     * implementation dependent manner.
+     *
+     * @param libraryName the name of the library
+     * @param localePrefix the logicial identifier for a locale specific library.
+     *  if no localePrefix is configured, pass <code>null</code>
+     * @param contract the name of the contract
+     *@param ctx the {@link javax.faces.context.FacesContext} for the current request  @return a {@link LibraryInfo} if a matching library based off the inputs
+     *  can be found, otherwise returns <code>null</code>
+     */
+    public abstract LibraryInfo findLibrary(String libraryName,
+                                            String localePrefix,
+                                            String contract, FacesContext ctx);
+
+
+    /**
+     * <p>
+     * Search for the specified resource based in the library/localePrefix/resourceName
+     * combination in an implementation dependent manner.
+     * </p>
+     * <p>
+     * If the resource is found, and is compressable, call {@link #handleCompression(com.sun.faces.application.resource.ClientResourceInfo)}
+     * to compress the content.
+     * </p>
+     *
+     * @param library the library this resource should be a part of.  If the
+     *  the resource that is being searched for isn't part of a library, then
+     *  pass <code>null</code>
+     * @param resourceName the name of the resource that is being searched for
+     * @param localePrefix the logicial identifier for a locale specific library.
+     *  if no localePrefix is configured, pass <code>null</code>
+     * @param compressable <code>true</code> if the resource can be compressed
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     * @return a {@link ResourceInfo} if a matching resource based off the inputs
+     *  can be found, otherwise returns <code>null</code>
+     */
+    public abstract ResourceInfo findResource(LibraryInfo library,
+                                              String resourceName,
+                                              String localePrefix,
+                                              boolean compressable,
+                                              FacesContext ctx);
+
+
+    /**
+     * <p>
+     * The default implementation of this method will call through to
+     * {@link ResourceHelper#getURL(ResourceInfo, javax.faces.context.FacesContext)}
+     * and leverage the URL to obtain the date information of the resource and
+     * return the value of <code>URLConnection.getLastModified()</code>
+     * </p>
+     * @param resource the resource in question
+     * @param ctx the {@link FacesContext} for the current request
+     * @return the date of the resource in milliseconds (since epoch),
+     *  or <code>0</code> if the date cannot be determined
+     */
+    public long getLastModified(ResourceInfo resource, FacesContext ctx) {
+        
+        URL url = getURL(resource, ctx);
+        // resource may have been deleted.
+        if (url == null) {
+            return 0;
+        }
+        return Util.getLastModified(url);
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * If a {@link ResourceInfo} is not compressable, {@link #getInputStream(ResourceInfo, javax.faces.context.FacesContext)}
+     * will call this method to return a stream to the actual resource.
+     *
+     * @param info  the resource to obtain an InputStream to
+     * @param ctx the {@link FacesContext} for the current request
+     * @return an InputStream to the resource
+     * @throws IOException if an error occurs obtaining the stream
+     */
+    protected abstract InputStream getNonCompressedInputStream(ResourceInfo info,
+                                                               FacesContext ctx)
+    throws IOException;
+
+
+    /**
+     * <p>
+     * Given a collection of path names:
+     * </p>
+     * <pre>
+     *   1.1, scripts, images, 1.2
+     * </pre>
+     * <p>
+     * this method will pick out the directories that represent a library or
+     * resource version and return the latest version found, if any.
+     * </p>
+     *
+     * @param resourcePaths a collection of paths (consisting of single path
+     *  elements)
+     * @param isResource <code>true</code> if the version being looked up
+     *  is for a reource, otherwise, pass <code>false</code> if the version
+     *  is a library version
+     * @return the latest version or if no version can be detected, otherwise
+     *  this method returns <code>null</code>
+     */
+    protected VersionInfo getVersion(Collection<String> resourcePaths, boolean isResource) {
+
+        List<VersionInfo> versionedPaths = new ArrayList<VersionInfo>(resourcePaths.size());
+        for (String p : resourcePaths) {
+            VersionInfo vp = getVersion(p, isResource);
+            if (vp != null) {
+                versionedPaths.add(vp);
+            }
+        }
+        VersionInfo version = null;
+        if (!versionedPaths.isEmpty()) {
+            Collections.sort(versionedPaths);
+            version = versionedPaths.get(versionedPaths.size() - 1);
+        }
+        return version;
+
+    }
+
+
+    /**
+     * Utility method to compress the content of the original resource
+     * to the temporary directory specified by {@link com.sun.faces.application.resource.ClientResourceInfo#getCompressedPath()}.
+     *
+     * @param info the resource to be compressed
+     * @return <code>true</code> if compression succeeded <em>and</em> the compressed
+     *  result is smaller than the original content, otherwise <code>false</code>
+     * @throws IOException if any error occur reading/writing
+     */
+    protected boolean compressContent(ClientResourceInfo info)
+    throws IOException {
+
+        InputStream source = null;
+        OutputStream dest = null;
+        try {
+            URL url = info.getHelper()
+                  .getURL(info, FacesContext.getCurrentInstance());
+            URLConnection conn = url.openConnection();
+            conn.setUseCaches(false);
+            conn.connect();
+            source = conn.getInputStream();
+            byte[] buf = new byte[512];
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            dest = new GZIPOutputStream(baos);
+            int totalRead = 0;
+            for (int len = source.read(buf); len != -1; len = source.read(buf)) {
+                dest.write(buf, 0, len);
+                totalRead += len;
+            }
+            dest.flush();
+            try {
+                dest.close();
+            } catch (IOException ioe) { 
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                }
+            }
+
+            if (baos.size() < totalRead) {
+                String outputFile = info.getCompressedPath()
+                                + File.separatorChar
+                                + COMPRESSED_CONTENT_FILENAME;
+                dest = new FileOutputStream(outputFile);
+                dest.write(baos.toByteArray());
+                dest.flush();                
+                return true;
+            }
+            return false;
+        } finally {
+            if (source != null) {
+                try {
+                    source.close();
+                } catch (IOException ioe) { 
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                    }
+                }
+            }
+            if (dest != null) {
+                try {
+                    dest.close();
+                } catch (IOException ioe) { 
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * <p>
+     * This method attempt to verify that the user agent can accept a gzip
+     * encoded response by interrogating the <code>Accept-Encoding</code>
+     * requester header.  If it is determined safe to send a gzip encoded
+     * response, send the <code>Content-Encoding</code> header with a value
+     * of <code>gzip</code>.</p>
+     *
+     * <p>
+     * See <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html>RFC 2616, sec. 14</a>
+     * for details on the accept-encoding header.
+     * </p>
+     *
+     * <p>
+     * Implementation Note:  It is safe to cast to a <code>HttpServletResponse</code>
+     * as this method will only be called when handling a resource request.  Resource
+     * serving is outside of the JSF and Portlet lifecycle.
+     * </p>
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @return <code>true</code> if compressed content can be sent to the client,
+     *  otherwise <code>false</code>
+     */
+    protected boolean clientAcceptsCompression(FacesContext ctx) {
+
+        ExternalContext extCtx = ctx.getExternalContext();
+        Object response = extCtx.getResponse();
+        if (response instanceof HttpServletResponse) {
+            String[] values =
+                  extCtx.getRequestHeaderValuesMap().get("accept-encoding");
+            boolean gzipFound = false;
+            for (String value : values) {
+                if (value.contains("gzip;q=0")) {
+                    // gzip compression not accepted by the user-agent
+                    return false;
+                }
+                if (value.contains("gzip")) {
+                    // gzip compression explicitly listed as supported
+                    // by the user agent.  Break here as we don't need to continue.
+                    gzipFound = true;
+                    break;
+                }
+                if (value.contains("*")
+                      && (!value.contains("*;q=0,") && !value.endsWith("*;q=0"))) {
+                    // gzip not explictly listed, but client sent *
+                    // meaning gzip is implicitly acceptable
+                    // keep looping to ensure we don't come across a
+                    // *;q=0 value.
+                    gzipFound = true;
+                }
+            }                                               
+            
+            if (gzipFound) {
+                ((HttpServletResponse) response)
+                      .setHeader("Content-Encoding", "gzip");
+                return true;
+            }
+        }
+
+        return false;
+
+    }
+
+
+    /**
+     * <p>
+     * Utility method to peform the necessary actions to compress content.
+     * </p>
+     *
+     * <p>
+     * Implmentation Note:  If an exception occurs while compressing the content,
+     * log the IOException and rebuilt the {@link ResourceInfo} as non-compressable.
+     * </p>
+     *
+     * @param resource the resource to compression
+     * @return the ResourceInfo after compression is complete.  If compression
+     *  was successful, this should be the same instance.  If compression was
+     *  not successful, it will be a different instance than what was passed.
+     */
+    protected ClientResourceInfo handleCompression(ClientResourceInfo resource) {
+
+        try {
+            if (!resource.supportsEL() && !compressContent(resource)) {
+                resource = rebuildAsNonCompressed(resource);
+            }
+        } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           ioe.getMessage(),
+                           ioe);
+            }
+            resource = rebuildAsNonCompressed(resource);
+        }
+        return resource;
+
+    }
+
+
+    protected boolean resourceSupportsEL(String resourceName, String libraryName, FacesContext ctx) {
+
+        ExternalContext extContext = ctx.getExternalContext();
+        String contentType = extContext.getMimeType(resourceName);
+        boolean result = (contentType != null
+                   && (Arrays.binarySearch(EL_CONTENT_TYPES, contentType) >= 0)) ||
+                (null != resourceName && null != libraryName && 
+                "javax.faces".equals(libraryName) && "jsf.js".equals(resourceName));
+        return result;
+
+    }
+    
+    /**
+     * @param s input String
+     * @return the String without a leading slash if it has one.
+     */
+    protected String trimLeadingSlash(String s) {
+
+        if (s.charAt(0) == '/') {
+            return s.substring(1);
+        } else {
+            return s;
+        }
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private ClientResourceInfo rebuildAsNonCompressed(ClientResourceInfo resource) {
+
+        LibraryInfo library = resource.getLibraryInfo();
+        ClientResourceInfo ret;
+        if (library != null) {
+            ret = new ClientResourceInfo(resource.library,
+                                   resource.contract,
+                                   resource.name,
+                                   resource.version,
+                                   false,
+                                   resource.supportsEL,
+                                   resource.isDevStage,
+                                   resource.cacheTimestamp);
+        } else {
+            ret = new ClientResourceInfo(resource.contract, 
+                                   resource.name,
+                                   resource.version,
+                                   resource.localePrefix,
+                                   this,
+                                   false,
+                                   resource.supportsEL,
+                                   resource.isDevStage,
+                                   resource.cacheTimestamp);
+        }
+        return ret;
+
+    }
+
+    /**
+     * @param pathElement the path element to verify
+     * @param isResource <code>true</code> if the version being looked up
+     *  is for a reource, otherwise, pass <code>false</code> if the version
+     *  is a library version
+     * @return <code>true</code> if this path element represents a version
+     *  (i.e. matches {@link #LIBRARY_VERSION_PATTERN}), otherwise
+     *  returns <code>false</code>
+     */
+    private VersionInfo getVersion(String pathElement, boolean isResource) {
+
+        Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+        String[] pathElements = Util.split(appMap, pathElement, "/");
+        String path = pathElements[pathElements.length - 1];
+
+        String extension = null;
+        if (isResource) {
+            Matcher m = RESOURCE_VERSION_PATTERN.matcher(path);
+            return ((m.matches())
+                    ? new VersionInfo(m.group(1), m.group(2))
+                    : null);
+        } else {
+            return ((LIBRARY_VERSION_PATTERN.matcher(path).matches())
+                    ? new VersionInfo(path, extension)
+                    : null);
+        }
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private static final class ELEvaluatingInputStream extends InputStream {
+
+        // Premature optimization is the root of all evil.  Blah blah.
+        private List<Integer> buf = new ArrayList<Integer>(1024);
+        private boolean failedExpressionTest = false;
+        private boolean writingExpression = false;
+        private InputStream inner;
+        private ClientResourceInfo info;
+        private FacesContext ctx;
+        private boolean expressionEvaluated;
+        private boolean endOfStreamReached;
+
+        // ---------------------------------------------------- Constructors
+
+
+        public ELEvaluatingInputStream(FacesContext ctx,
+                                       ClientResourceInfo info,
+                                       InputStream inner) {
+
+            this.inner = inner;
+            this.info = info;
+            this.ctx = ctx;
+
+        }
+
+
+        // ------------------------------------------------ Methods from InputStream
+
+
+        @Override
+        public int read() throws IOException {
+            if (null == inner) {
+                return -1;
+            }
+            
+            int i;
+            char c;
+
+            if (failedExpressionTest) {
+                i = nextRead;
+                nextRead = -1;
+                failedExpressionTest = false;
+            } else if (writingExpression) {
+                if (0 < buf.size()) {
+                    i = buf.remove(0);
+                } else {
+                    writingExpression = false;
+                    i = inner.read();
+                }
+            } else {
+                // Read a character.
+                i = inner.read();
+                c = (char) i;
+                // If it *might* be an expression...
+                if (c == '#') {
+                    // read another character.
+                    i = inner.read();
+                    c = (char) i;
+                    // If it's '{', assume we have an expression.
+                    if (c == '{') {
+                        // read it into the buffer, and evaluate it into the
+                        // same buffer.
+                        readExpressionIntoBufferAndEvaluateIntoBuffer();
+                        // set the flag so that we need to return content
+                        // from the buffer.
+                        writingExpression = true;
+                        // Make sure to swallow the '{'.
+                        i = this.read();
+                    } else {
+                        // It's not an expression, we need to return '#',
+                        i = (int) '#';
+                        // then return whatever we just read, on the
+                        // *next* read;
+                        nextRead = (int) c;
+                        failedExpressionTest = true;
+                    }
+                }
+            }
+
+            if (i == -1) {
+                endOfStreamReached = true;
+            }
+
+            return i;
+        }
+
+
+        private int nextRead = -1;
+
+
+        private void readExpressionIntoBufferAndEvaluateIntoBuffer()
+              throws IOException {
+            int i;
+            char c;
+            do {
+                i = inner.read();
+                c = (char) i;
+                if (c == '}') {
+                    evaluateExpressionIntoBuffer();
+                } else {
+                    buf.add(i);
+                }
+            } while (c != '}' && i != -1);
+        }
+
+        /*
+        * At this point, we know that getBuf() returns a List<Integer>
+        * that contains the bytes of the expression.
+        * Turn it into a String, turn the String into a ValueExpression,
+        * evaluate it, store the toString() of it in
+        * expressionResult;
+        */
+        private void evaluateExpressionIntoBuffer() {
+            char chars[] = new char[buf.size()];
+            for (int i = 0, len = buf.size(); i < len; i++) {
+                chars[i] = (char) (int) buf.get(i);
+            }
+            String expressionBody = new String(chars);
+            int colon;
+            // If this expression contains a ":"
+            if (-1 != (colon = expressionBody.indexOf(":"))) {
+                // Make sure it contains only one ":"
+                if (!isPropertyValid(expressionBody)) {
+                    String message =
+                          MessageUtils
+                                .getExceptionMessageString(MessageUtils.INVALID_RESOURCE_FORMAT_COLON_ERROR,
+                                                           expressionBody);
+                    throw new ELException(message);
+                }
+                Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+
+                String[] parts = Util.split(appMap, expressionBody, ":");
+                if (null == parts[0] || null == parts[1]) {
+                    String message =
+                          MessageUtils
+                                .getExceptionMessageString(MessageUtils.INVALID_RESOURCE_FORMAT_NO_LIBRARY_NAME_ERROR,
+                                                           expressionBody);
+                    throw new ELException(message);
+
+                }
+                try {
+                    int mark = parts[0].indexOf("[") + 2;
+                    char quoteMark = parts[0].charAt(mark - 1);
+                    parts[0] = parts[0].substring(mark, colon);
+                    if (parts[0].equals("this")) {
+                        LibraryInfo libInfo = info.getLibraryInfo();
+                        if (null != libInfo) {
+                            parts[0] = libInfo.getName();
+                        } else if (null != info.getContract()) {
+                            parts[0] = info.getContract();
+                        } else {
+                            throw new NullPointerException("Resource expression is not a library or resource library contract");
+                        }
+                        
+                        mark = parts[1].indexOf("]") - 1;
+                        parts[1] = parts[1].substring(0, mark);
+                        expressionBody = "resource[" + quoteMark + parts[0] +
+                                         ":" + parts[1] + quoteMark + "]";
+                    }
+                }
+                catch (Exception e) {
+                    String message =
+                          MessageUtils
+                                .getExceptionMessageString(MessageUtils.INVALID_RESOURCE_FORMAT_ERROR,
+                                                           expressionBody);
+                    throw new ELException(message);
+
+                }
+            }
+            ELContext elContext = ctx.getELContext();
+            expressionEvaluated = true;
+            ValueExpression ve =
+                  ctx.getApplication().getExpressionFactory().
+                        createValueExpression(elContext, "#{" + expressionBody +
+                                                         "}", String.class);
+            Object value = ve.getValue(elContext);
+            String expressionResult = ((value != null) ? value.toString() : "");
+            buf.clear();
+            for (int i = 0, len = expressionResult.length(); i < len; i++) {
+                buf.add((int) expressionResult.charAt(i));
+            }
+        }
+
+
+        @Override
+        public void close() throws IOException {
+
+            if (endOfStreamReached && !expressionEvaluated) {
+                info.disableEL();
+            }
+            inner.close();
+            super.close();
+
+        }
+
+        
+        private boolean isPropertyValid(String property) {
+            int idx = property.indexOf(':');
+            return (property.indexOf(':', idx + 1) == -1);
+        }
+
+    } // END ELEvaluatingInputStream
+
+}
diff --git a/com/sun/faces/application/resource/ResourceImpl.java b/com/sun/faces/application/resource/ResourceImpl.java
new file mode 100644
index 0000000..f5d82b7
--- /dev/null
+++ b/com/sun/faces/application/resource/ResourceImpl.java
@@ -0,0 +1,472 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.Collections;
+import java.util.logging.Logger;
+
+import javax.faces.application.Resource;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.util.FacesLogger;
+import java.util.logging.Level;
+
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.ProjectStage;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Default implementation of {@link javax.faces.application.Resource}.
+ * The ResourceImpl instance itself has the same lifespan as the
+ * request, however, the ResourceInfo instances that back this object
+ * are cached by the ResourceManager to reduce the time spent scanning
+ * for resources.
+ */
+public class ResourceImpl extends Resource implements Externalizable {
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    /* HTTP Date format required by the HTTP/1.1 RFC */
+    private static final String RFC1123_DATE_PATTERN =
+          "EEE, dd MMM yyyy HH:mm:ss zzz";
+
+    private static final String IF_MODIFIED_SINCE = "If-Modified-Since";
+
+    private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
+
+
+    /* The meta data on the resource */
+    private transient ResourceInfo resourceInfo;
+
+    /*
+     * Response headers that need to be added by the ResourceManager
+     * implementation.
+     */
+    private transient Map<String,String> responseHeaders;
+
+    
+    /**
+     * Time when this application was started.  This is used to generate
+     * expiration headers.
+     */
+    private long initialTime;
+
+
+    /**
+     * Lifespan of this resource for caching purposes.
+     */
+    private long maxAge;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Necessary for serialization.
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    public ResourceImpl() { }
+
+
+    /**
+     * Creates a new instance of ResourceBase
+     */
+    public ResourceImpl(ResourceInfo resourceInfo,
+                        String contentType,
+                        long initialTime,
+                        long maxAge) {
+
+        this.resourceInfo = resourceInfo;
+        super.setResourceName(resourceInfo.getName());
+        super.setLibraryName(resourceInfo.getLibraryInfo() != null
+                             ? resourceInfo.getLibraryInfo().getName()
+                             : null);
+        super.setContentType(contentType);
+        this.initialTime = initialTime;
+        this.maxAge = maxAge;
+
+    }
+
+    @Override
+    public boolean equals(Object o) {
+
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        ResourceImpl resource = (ResourceImpl) o;
+
+        return resourceInfo.equals(resource.resourceInfo);
+
+    }
+
+    @Override
+    public int hashCode() {
+
+        return resourceInfo.hashCode();
+
+    }
+
+
+    // --------------------------------------------------- Methods from Resource
+
+
+    /**
+     * @see javax.faces.application.Resource#getInputStream()
+     */
+    public InputStream getInputStream() throws IOException {
+		initResourceInfo();
+        return resourceInfo.getHelper().getInputStream(resourceInfo,
+                                                       FacesContext.getCurrentInstance());
+
+    }
+    
+
+
+    /**
+     * @see javax.faces.application.Resource#getURL()
+     */
+    public URL getURL() {
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        return resourceInfo.getHelper().getURL(resourceInfo, ctx);
+    }
+
+
+    /**
+     * <p>
+     * Implementation note.  Any values added to getResponseHeaders()
+     * will only be visible across multiple calls to this method when
+     * servicing a resource request (i.e. {@link ResourceHandler#isResourceRequest(javax.faces.context.FacesContext)}
+     * returns <code>true</code>).  If we're not servicing a resource request,
+     * an empty Map will be returned and the values added are effectively thrown
+     * away.
+     * </p>
+     * 
+     * @see javax.faces.application.Resource#getResponseHeaders()
+     */
+    public Map<String, String> getResponseHeaders() {
+
+        if (isResourceRequest()) {
+            if (responseHeaders == null)
+            responseHeaders = new HashMap<String, String>(6, 1.0f);
+
+            long expiresTime;
+            FacesContext ctx = FacesContext.getCurrentInstance();
+
+            if (ctx.isProjectStage(ProjectStage.Development)) {
+                expiresTime = new Date().getTime();
+            } else {
+                expiresTime = new Date().getTime() + maxAge;
+            }
+            SimpleDateFormat format =
+                  new SimpleDateFormat(RFC1123_DATE_PATTERN, Locale.US);
+            format.setTimeZone(GMT);
+            responseHeaders.put("Expires", format.format(new Date(expiresTime)));
+
+            URL url = getURL();
+            InputStream in = null;
+            try {
+                URLConnection conn = url.openConnection();
+                conn.setUseCaches(false);
+                conn.connect();
+                in = conn.getInputStream();
+                long lastModified = Util.getLastModified(url);
+                long contentLength = conn.getContentLength();
+                if (lastModified == 0) {
+                    lastModified = initialTime;
+                }
+                responseHeaders.put("Last-Modified", format.format(new Date(lastModified)));
+                if (lastModified != 0 && contentLength != -1) {
+                    responseHeaders.put("ETag", "W/\""
+                                    + contentLength
+                                    + '-'
+                                    + lastModified
+                                    + '"');
+                }
+            } catch (IOException ioe) { 
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                }
+            } finally {
+                if (in != null) {
+                    try {
+                        in.close();
+                    } catch (IOException ioe) { 
+                        if (LOGGER.isLoggable(Level.FINEST)) {
+                            LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                        }
+                    }
+                }
+            }
+            return responseHeaders;
+        } else {
+            return Collections.emptyMap();
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Resource#getRequestPath()
+     */
+    public String getRequestPath() {
+
+        String uri;
+        FacesContext context = FacesContext.getCurrentInstance();
+        String facesServletMapping = Util.getFacesMapping(context);
+        // If it is extension mapped
+        if (Util.isPrefixMapped(facesServletMapping)) {
+            uri = facesServletMapping + ResourceHandler.RESOURCE_IDENTIFIER + '/' +
+                  getResourceName();
+        } else {
+            uri = ResourceHandler.RESOURCE_IDENTIFIER + '/' + getResourceName() +
+                  facesServletMapping;
+        }
+        boolean queryStarted = false;
+        if (null != getLibraryName()) {
+            queryStarted = true;
+            uri += "?ln=" + getLibraryName();
+        }
+        String version = "";
+        initResourceInfo();
+        if (resourceInfo.getLibraryInfo() != null && resourceInfo.getLibraryInfo().getVersion() != null) {
+            version += resourceInfo.getLibraryInfo().getVersion().toString();
+        }
+        if (resourceInfo.getVersion() != null) {
+            version += resourceInfo.getVersion().toString();
+        }
+        if (version.length() > 0) {
+            uri += ((queryStarted) ? "&v=" : "?v=") + version;
+            queryStarted = true;
+        }
+        String localePrefix = resourceInfo.getLocalePrefix();
+        if (localePrefix != null) {
+            uri += ((queryStarted) ? "&loc=" : "?loc=") + localePrefix;
+            queryStarted = true;
+        }
+        
+        String contract = resourceInfo.getContract();
+        if (contract != null) {
+            uri += ((queryStarted) ? "&con=" : "?con=") + contract;
+            queryStarted = true;
+        }
+        
+        if ("jsf.js".equals(getResourceName()) && "javax.faces".equals(getLibraryName())) {
+            ProjectStage stage = context.getApplication().getProjectStage();
+            switch (stage) {
+                case Development:
+                    uri += ((queryStarted) ? "&stage=Development" : "?stage=Development" );
+                    break;
+                case SystemTest:
+                    uri += ((queryStarted) ? "&stage=SystemTest" : "?stage=SystemTest" );
+                    break;
+                case UnitTest:
+                    uri += ((queryStarted) ? "&stage=UnitTest" : "?stage=UnitTest" );
+                    break;
+                default:
+                    assert(stage.equals(ProjectStage.Production));
+            }
+        }
+
+        uri = context.getApplication().getViewHandler()
+              .getResourceURL(context,
+                              uri);
+
+        return uri;
+
+    }
+
+
+    /**
+     * @see javax.faces.application.Resource#userAgentNeedsUpdate(javax.faces.context.FacesContext)
+     */
+    public boolean userAgentNeedsUpdate(FacesContext context) {
+        
+        // PENDING(edburns): this is a sub-optimal implementation choice
+        // done in the interest of prototyping.  It's never a good idea 
+        // to do a switch statement based on the type of an object.
+        
+        if (resourceInfo instanceof FaceletResourceInfo) {
+            return true;
+        }
+
+        // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
+        // 14.25 If-Modified-Since
+
+        // if the requested variant has not been modified since the time
+        // specified in this field, an entity will not be returned from the
+        // server; instead, a 304 (not modified) response will be returned
+        // without any message-body.
+
+        // A date which is later than the server's current time is
+        // invalid.
+
+        Map<String,String> requestHeaders =
+              context.getExternalContext().getRequestHeaderMap();
+
+        if (requestHeaders.containsKey(IF_MODIFIED_SINCE)) {
+            initResourceInfo();
+            /*
+             * Make sure that we strip the milliseconds out of what comes back
+             * from the getLastModified call for a resource as the 
+             * 'If-Modified-Since' header does not use milliseconds.
+             */
+            long lastModifiedOfResource = (((ClientResourceInfo)resourceInfo).getLastModified(context) / 1000) * 1000;
+            long lastModifiedHeader = getIfModifiedHeader(context.getExternalContext());
+            if (0 == lastModifiedOfResource) {
+                long startupTime = ApplicationAssociate.getInstance(context.getExternalContext()).getTimeOfInstantiation();
+                return startupTime > lastModifiedHeader;
+            } else {
+                return lastModifiedOfResource > lastModifiedHeader;
+            }
+        }
+        return true;
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /*
+     * This method should only be called if the 'If-Modified-Since' header
+     * is present in the request header map.
+     */
+    private long getIfModifiedHeader(ExternalContext extcontext) {
+
+        Object request = extcontext.getRequest();
+        if (request instanceof HttpServletRequest) {
+            // try to use the container where we can.  V3 for instance
+            // has a FastHttpDateFormat format/parse implementation
+            // which is more than likely more performant than SimpleDateFormat
+            // (otherwise, why would it be there?).
+            return ((HttpServletRequest) request).getDateHeader(IF_MODIFIED_SINCE);
+        } else {
+            SimpleDateFormat format =
+                  new SimpleDateFormat(RFC1123_DATE_PATTERN, Locale.US);
+            try {
+                Date ifModifiedSinceDate = format.parse(extcontext.getRequestHeaderMap().get(IF_MODIFIED_SINCE));
+                return ifModifiedSinceDate.getTime();
+            } catch (ParseException ex) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.application.resource.invalid_if_modified_since_header",
+                               new Object[]{
+                                     extcontext.getRequestHeaderMap().get(IF_MODIFIED_SINCE)
+                               });
+                    if (ex != null) {
+                        LOGGER.log(Level.WARNING, "", ex);
+                    }
+                }
+                return -1;
+            }
+        }
+
+    }
+
+
+    // --------------------------------------------- Methods from Externalizable
+
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        out.writeObject(getResourceName());
+        out.writeObject(getLibraryName());
+        out.writeObject(getContentType());
+        out.writeLong(initialTime);
+        out.writeLong(maxAge);
+
+    }
+
+    public void readExternal(ObjectInput in)
+    throws IOException, ClassNotFoundException {
+
+        setResourceName((String) in.readObject());
+        setLibraryName((String) in.readObject());
+        setContentType((String) in.readObject());
+        initialTime = in.readLong();
+        maxAge = in.readLong();
+    }
+
+    private void initResourceInfo(){
+        if(resourceInfo!=null){
+            return;
+        }
+        ResourceManager manager =
+                ApplicationAssociate.getInstance(FacesContext.getCurrentInstance().getExternalContext()).getResourceManager();
+        resourceInfo = manager.findResource(getLibraryName(),
+                getResourceName(),
+                getContentType(),
+                FacesContext.getCurrentInstance());
+    }
+	
+    // --------------------------------------------------------- Private Methods
+
+
+    private boolean isResourceRequest() {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        return (ctx.getApplication().getResourceHandler().isResourceRequest(ctx));
+
+    }
+
+}
diff --git a/com/sun/faces/application/resource/ResourceInfo.java b/com/sun/faces/application/resource/ResourceInfo.java
new file mode 100644
index 0000000..fe6e6d4
--- /dev/null
+++ b/com/sun/faces/application/resource/ResourceInfo.java
@@ -0,0 +1,204 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application.resource;
+
+public class ResourceInfo {
+    
+    ResourceHelper helper;
+    LibraryInfo library;
+    ContractInfo contract;
+    String libraryName;
+    String localePrefix;
+    String name;
+    String path;
+    VersionInfo version;
+    boolean doNotCache = false;
+
+    public ResourceInfo(LibraryInfo library, 
+            ContractInfo contract,
+            String name, 
+            VersionInfo version) {
+        this.contract = contract;
+        this.library = library;
+        this.helper = library.getHelper();
+        this.localePrefix = library.getLocalePrefix();
+        this.name = name;
+        this.version = version;
+        this.libraryName = library.getName();
+        
+    }
+    
+    public ResourceInfo(ContractInfo contract, String name, VersionInfo version, ResourceHelper helper) {
+        this.contract = contract;
+        this.name = name;
+        this.version = version;
+        this.helper = helper;
+    }
+    
+    public ResourceInfo(ResourceInfo other, boolean copyLocalePrefix) {
+        this.helper = other.helper;
+        this.library = new LibraryInfo(other.library, copyLocalePrefix);
+        this.libraryName = library.getName();
+        if (copyLocalePrefix) {
+            this.localePrefix = other.localePrefix;
+        }
+        this.name = other.name;
+        this.path = other.path;
+        this.version = other.version;
+    }
+    
+    public void copy(ResourceInfo other) {
+        this.helper = other.helper;
+        this.library = other.library;
+        this.libraryName = other.libraryName;
+        this.localePrefix = other.localePrefix;
+        this.name = other.name;
+        this.path = other.path;
+        this.version = other.version;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ResourceInfo other = (ResourceInfo) obj;
+        if (this.helper != other.helper && (this.helper == null || !this.helper.equals(other.helper))) {
+            return false;
+        }
+        if (this.library != other.library && (this.library == null || !this.library.equals(other.library))) {
+            return false;
+        }
+        if ((this.libraryName == null) ? (other.libraryName != null) : !this.libraryName.equals(other.libraryName)) {
+            return false;
+        }
+        if ((this.localePrefix == null) ? (other.localePrefix != null) : !this.localePrefix.equals(other.localePrefix)) {
+            return false;
+        }
+        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
+            return false;
+        }
+        if ((this.path == null) ? (other.path != null) : !this.path.equals(other.path)) {
+            return false;
+        }
+        if (this.version != other.version && (this.version == null || !this.version.equals(other.version))) {
+            return false;
+        }
+        if (this.doNotCache != other.doNotCache) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 17 * hash + (this.helper != null ? this.helper.hashCode() : 0);
+        hash = 17 * hash + (this.library != null ? this.library.hashCode() : 0);
+        hash = 17 * hash + (this.libraryName != null ? this.libraryName.hashCode() : 0);
+        hash = 17 * hash + (this.localePrefix != null ? this.localePrefix.hashCode() : 0);
+        hash = 17 * hash + (this.name != null ? this.name.hashCode() : 0);
+        hash = 17 * hash + (this.path != null ? this.path.hashCode() : 0);
+        hash = 17 * hash + (this.version != null ? this.version.hashCode() : 0);
+        hash = 17 * hash + (this.doNotCache ? 1 : 0);
+        return hash;
+    }
+
+    public boolean isDoNotCache() {
+        return doNotCache;
+    }
+
+    public void setDoNotCache(boolean doNotCache) {
+        this.doNotCache = doNotCache;
+    }
+    
+    /**
+     * @return return the {@link ResourceHelper} for this resource
+     */
+    public ResourceHelper getHelper() {
+        return helper;
+    }
+
+    /**
+     * @return the Library associated with this resource, if any.
+     */
+    public LibraryInfo getLibraryInfo() {
+        return library;
+    }
+
+    /**
+     * @return the Locale prefix, if any.
+     */
+    public String getLocalePrefix() {
+        return localePrefix;
+    }
+
+    /**
+     * @return return the library name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * @return the full path (including the library, if any) of the
+     *  resource.
+     */
+    public String getPath() {
+        return path;
+    }
+    
+    public String getContract() {
+        return (null != contract) ? contract.toString() : null;
+    }
+
+    /**
+     * @return return the version of the resource, or <code>null</code> if the
+     *         resource isn't versioned.
+     */
+    public VersionInfo getVersion() {
+        return version;
+    }
+    
+}
diff --git a/com/sun/faces/application/resource/ResourceManager.java b/com/sun/faces/application/resource/ResourceManager.java
new file mode 100644
index 0000000..0587e08
--- /dev/null
+++ b/com/sun/faces/application/resource/ResourceManager.java
@@ -0,0 +1,715 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import javax.faces.application.ProjectStage;
+import javax.faces.application.ResourceHandler;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.config.WebConfiguration;
+
+/**
+ * This class is used to lookup {@link ResourceInfo} instances
+ * and cache any that are successfully looked up to reduce the
+ * computational overhead with the scanning/version checking.
+ *
+ * @since 2.0
+ */
+public class ResourceManager {
+
+    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
+
+    /**
+     * {@link Pattern} for valid mime types to configure compression.
+     */
+    private static final Pattern CONFIG_MIMETYPE_PATTERN =
+          Pattern.compile("[a-z-]*/[a-z0-9.\\*-]*");
+    
+    private ResourceHelper faceletResourceHelper = new FaceletWebappResourceHelper();
+
+    /**
+     * {@link ResourceHelper} used for looking up webapp-based resources.
+     */
+    private ResourceHelper webappHelper = new WebappResourceHelper();
+
+    /**
+     * {@link ResourceHelper} used for looking up classpath-based resources.
+     */
+    private ClasspathResourceHelper classpathHelper = new ClasspathResourceHelper();
+
+    /**
+     * Cache for storing {@link ResourceInfo} instances to reduce the cost
+     * of the resource lookups.
+     */
+    private ResourceCache cache;
+
+    /**
+     * Patterns used to find {@link ResourceInfo} instances that may have their
+     * content compressed.
+     */
+    private List<Pattern> compressableTypes;
+
+    /**
+     * This lock is used to ensure the lookup of compressable {@link ResourceInfo}
+     * instances are atomic to prevent theading issues when writing the compressed
+     * content during a lookup.
+     */
+    private ReentrantLock lock = new ReentrantLock();
+
+
+    // ------------------------------------------------------------ Constructors
+
+    /*
+     * This ctor is only ever called by test code.
+     */
+
+    public ResourceManager(ResourceCache cache) {
+
+        this.cache = cache;
+        Map<String, Object> throwAwayMap = new HashMap<String, Object>();
+        initCompressableTypes(throwAwayMap);
+
+    }
+
+    /**
+     * Constructs a new <code>ResourceManager</code>.  Note:  if the current
+     * {@link ProjectStage} is {@link ProjectStage#Development} caching or
+     * {@link ResourceInfo} instances will not occur.
+     */
+    public ResourceManager(Map<String, Object> appMap, ResourceCache cache) {
+
+        this.cache = cache;
+        initCompressableTypes(appMap);
+
+    }
+
+
+    // ------------------------------------------------------ Public Methods
+
+
+    /**
+     * <p>
+     * Attempt to lookup a {@link ResourceInfo} based on the specified
+     * <code>libraryName<code> and <code>resourceName</code>
+     * </p>
+     *
+     * <p>
+     * Implementation Note:  Synchronization is necessary when looking up
+     * compressed resources.  This ensures the atomicity of the content
+     * being compressed.  As such, the cost of doing this is low as once
+     * the resource is in the cache, the lookup won't be performed again
+     * until the cache is cleared.  That said, it's not a good idea
+     * to have caching disabled in a production environment if leveraging
+     * compression.
+     *
+     * If the resource isn't compressable, then we don't worry about creating
+     * a few extra copies of ResourceInfo until the cache is populated.
+     * </p>
+     *
+     * @param libraryName the name of the library (if any)
+     * @param resourceName the name of the resource
+     * @param contentType the content type of the resource.  This will be
+     *  used to determine if the resource is compressable
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current
+     *  request
+     *  
+     * @return a {@link ResourceInfo} if a resource if found matching the
+     *  provided arguments, otherwise, return <code>null</code>
+     */
+    public ResourceInfo findResource(String libraryName,
+                                     String resourceName,
+                                     String contentType,
+                                     FacesContext ctx) {
+
+        return findResource(libraryName, resourceName, contentType, false, ctx);
+    }
+    
+    public ResourceInfo findResource(String libraryName,
+                                     String resourceName,
+                                     String contentType,
+                                     boolean isViewResource,
+                                     FacesContext ctx) {
+        
+        String localePrefix = getLocalePrefix(ctx);
+        List<String> contracts = getResourceLibraryContracts(ctx);
+        ResourceInfo info =
+              getFromCache(resourceName, libraryName, localePrefix, contracts);
+        if (info == null) {
+            boolean compressable = isCompressable(contentType, ctx);
+            if (compressable) {
+                lock.lock();
+                try {
+                    info = getFromCache(resourceName, libraryName, localePrefix, contracts);
+                    if (info == null) {
+                        info = doLookup(libraryName,
+                                        resourceName,
+                                        localePrefix,
+                                        compressable,
+                                        isViewResource,
+                                        contracts,
+                                        ctx);
+                        if (info != null) {
+                            addToCache(info, contracts);
+                        }
+                    }
+                } finally {
+                    lock.unlock();
+                }
+            } else {
+                info = doLookup(libraryName,
+                                resourceName,
+                                localePrefix,
+                                compressable,
+                                isViewResource,
+                                contracts,
+                                ctx);
+                
+                if (null == info && null != contracts) {
+                    // If the library name is equal to one of the contracts,
+                    // assume the resource to be found is within that contract
+                    for (String cur : contracts) {
+                        if (cur.equals(libraryName)) {
+                            libraryName = null;
+                            break;
+                        }
+                    }
+                    info = doLookup(libraryName,
+                            resourceName,
+                            localePrefix,
+                            compressable,
+                            isViewResource,
+                            contracts,
+                            ctx);
+                }
+
+                if (info != null && (!info.isDoNotCache())) {
+                    addToCache(info, contracts);
+                }
+            }
+
+        }
+
+        return info;
+
+    }
+
+
+    // ----------------------------------------------------- Private Methods
+
+
+    /**
+     * Attempt to look up the Resource based on the provided details.
+     *
+     * @param libraryName the name of the library (if any)
+     * @param resourceName the name of the resource
+     * @param localePrefix the locale prefix for this resource (if any)
+     * @param compressable if this resource can be compressed
+     * @param isViewResource 
+     * @param contracts the contracts to consider
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current
+*  request
+     *
+     * @return a {@link ResourceInfo} if a resource if found matching the
+     *  provided arguments, otherwise, return <code>null</code>
+     */
+    private ResourceInfo doLookup(String libraryName,
+                                  String resourceName,
+                                  String localePrefix,
+                                  boolean compressable,
+                                  boolean isViewResource,
+                                  List<String> contracts,
+                                  FacesContext ctx) {
+        // loop over the contracts as described in deriveResourceIdConsideringLocalePrefixAndContracts in the spec
+        LibraryInfo library = null;
+        for (String contract : contracts) {
+            ResourceInfo info = getResourceInfo(libraryName, resourceName, localePrefix, contract, compressable, isViewResource, ctx, library);
+            if(info != null) {
+                return info;
+            }
+        }
+        return getResourceInfo(libraryName, resourceName, localePrefix, null, compressable, isViewResource, ctx, library);
+
+    }
+
+    private ResourceInfo getResourceInfo(String libraryName, String resourceName, String localePrefix, String contract, boolean compressable, boolean isViewResource, FacesContext ctx, LibraryInfo library) {
+        if (libraryName != null && !nameContainsForbiddenSequence(libraryName)) {
+            library = findLibrary(libraryName, localePrefix, contract, ctx);
+            if (library == null && localePrefix != null) {
+                // no localized library found.  Try to find
+                // a library that isn't localized.
+                library = findLibrary(libraryName, null, contract, ctx);
+            }
+            if (library == null) {
+                // If we don't have one by now, perhaps it's time to
+                // consider scanning directories.
+                library = findLibraryOnClasspathWithZipDirectoryEntryScan(libraryName, localePrefix, contract, ctx, false);
+                if (library == null && localePrefix != null) {
+                    // no localized library found.  Try to find
+                    // a library that isn't localized.
+                    library = findLibraryOnClasspathWithZipDirectoryEntryScan(libraryName, null, contract, ctx, false);
+                }
+                if (null == library) {
+                    return null;
+                }
+            }
+        } else if (nameContainsForbiddenSequence(libraryName)) {
+            return null;
+        }
+
+        String resName = trimLeadingSlash(resourceName);
+        if (nameContainsForbiddenSequence(resName)) {
+            return null;
+        }
+
+        ResourceInfo info =
+              findResource(library, resourceName, localePrefix, compressable, isViewResource,ctx);
+        if (info == null && localePrefix != null) {
+            // no localized resource found, try to find a
+            // resource that isn't localized
+            info = findResource(library, resourceName, null, compressable, isViewResource, ctx);
+        }
+
+        // If no resource has been found so far, and we have a library that
+        // was found in the webapp filesystem, see if there is a matching
+        // library on the classpath.  If one is found, try to find a matching
+        // resource in that library.
+        if (info == null
+                && library != null
+                && library.getHelper() instanceof WebappResourceHelper) {
+            LibraryInfo altLibrary = classpathHelper.findLibrary(libraryName, localePrefix, contract, ctx);
+            if (altLibrary != null) {
+                VersionInfo originalVersion = library.getVersion();
+                VersionInfo altVersion = altLibrary.getVersion();
+                if (originalVersion == null && altVersion == null) {
+                    library = altLibrary;
+                } else if (originalVersion == null && altVersion != null) {
+                    library = null;
+                } else if (originalVersion != null && altVersion == null) {
+                    library = null;
+                } else if (originalVersion.compareTo(altVersion) == 0) {
+                    library = altLibrary;
+                }
+
+            }
+
+            if (library != null) {
+                info = findResource(library, resourceName, localePrefix, compressable, isViewResource, ctx);
+                if (info == null && localePrefix != null) {
+                    // no localized resource found, try to find a
+                    // resource that isn't localized
+                    info = findResource(library, resourceName, null, compressable, isViewResource, ctx);
+                }
+            }
+
+        }
+        return info;
+    }
+
+    /**
+     * @param s input String
+     * @return the String without a leading slash if it has one.
+     */
+    private String trimLeadingSlash(String s) {
+
+        if (s.charAt(0) == '/') {
+            return s.substring(1);
+        } else {
+            return s;
+        }
+
+    }
+    
+    private static boolean nameContainsForbiddenSequence(String name) {
+        boolean result = false;
+        if (name != null) {
+        name = name.toLowerCase();
+
+        result = name.startsWith("./..") ||
+                 name.startsWith("..") ||
+                 name.contains("../") ||
+                 name.contains("..\\") ||
+                 name.startsWith("/") ||
+                 name.startsWith("\\") ||
+
+                 name.contains("..%2f") ||
+                 name.contains("..%5c") ||
+                 name.startsWith("%2f") ||
+                 name.startsWith("%5c") ||
+
+                 name.contains("..\\u002f") ||
+                 name.contains("..\\u005c") ||
+                 name.startsWith("\\u002f") ||
+                 name.startsWith("\\u005c")
+                 ;
+        }
+        return result;
+    }
+
+
+    /**
+     *
+     * @param name the resource name
+     * @param library the library name
+     * @param localePrefix the Locale prefix
+     * @param contracts
+     * @return the {@link ResourceInfo} from the cache or <code>null</code>
+     *  if no cached entry is found
+     */
+    private ResourceInfo getFromCache(String name,
+                                      String library,
+                                      String localePrefix, List<String> contracts) {
+
+        if (cache == null) {
+            return null;
+        }
+        return cache.get(name, library, localePrefix, contracts);
+
+    }
+
+
+    /**
+     * Adds the the specified {@link ResourceInfo} to the cache.
+     * @param info the @{link ResourceInfo} to add.
+     * @param contracts the contracts
+     */
+    private void addToCache(ResourceInfo info, List<String> contracts) {
+
+        if (cache == null) {
+            return;
+        }
+        cache.add(info, contracts);
+
+    }
+
+    /**
+     * <p> Attempt to lookup and return a {@link LibraryInfo} based on the
+     * specified <code>arguments</code>.
+     * <p/>
+     * <p> The lookup process will first search the file system of the web
+     * application *within the resources directory*.  
+     * If the library is not found, then it processed to
+     * searching the classpath, if not found there, search from the webapp root
+     * *excluding* the resources directory.</p>
+     * <p/>
+     * <p> If a library is found, this method will return a {@link
+     * LibraryInfo} instance that contains the name, version, and {@link
+     * ResourceHelper}.</p>
+     *
+     *
+     * @param libraryName the library to find
+     * @param localePrefix the prefix for the desired locale
+     * @param contract the contract to use
+     *@param ctx         the {@link javax.faces.context.FacesContext} for the current request
+     *  @return the Library instance for the specified library
+     */
+     LibraryInfo findLibrary(String libraryName,
+                             String localePrefix,
+                             String contract, FacesContext ctx) {
+
+        LibraryInfo library = webappHelper.findLibrary(libraryName, localePrefix, contract, ctx);
+        
+        if (library == null) {
+            library = classpathHelper.findLibrary(libraryName, localePrefix, contract, ctx);
+        }
+        
+        if (library == null) {
+            library = faceletResourceHelper.findLibrary(libraryName, localePrefix, contract, ctx);
+        }
+
+        // if not library is found at this point, let the caller deal with it
+        return library;
+    }
+
+     LibraryInfo findLibraryOnClasspathWithZipDirectoryEntryScan(String libraryName,
+                                                                 String localePrefix,
+                                                                 String contract, FacesContext ctx, boolean forceScan) {
+         return classpathHelper.findLibraryWithZipDirectoryEntryScan(libraryName, localePrefix, contract, ctx, forceScan);
+     }
+
+   /**
+     * <p> Attempt to lookup and return a {@link ResourceInfo} based on the
+     * specified <code>arguments</code>.
+     * <p/>
+     * <p> The lookup process will first search the file system of the web
+     * application.  If the library is not found, then it processed to
+     * searching the classpath.</p>
+     * <p/>
+     * <p> If a library is found, this method will return a {@link
+     * LibraryInfo} instance that contains the name, version, and {@link
+     * ResourceHelper}.</p>
+     *
+     * @param library the library the resource should be found in
+     * @param resourceName the name of the resource
+     * @param localePrefix the prefix for the desired locale
+     * @param compressable <code>true</code> if the resource can be compressed
+     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
+     *
+     * @return the Library instance for the specified library
+     */
+    private ResourceInfo findResource(LibraryInfo library,
+                                      String resourceName,
+                                      String localePrefix,
+                                      boolean compressable,
+                                      boolean skipToFaceletResourceHelper,
+                                      FacesContext ctx) {
+
+        if (library != null) {
+            return library.getHelper().findResource(library,
+                                                    resourceName,
+                                                    localePrefix,
+                                                    compressable,
+                                                    ctx);
+        } else {
+            ResourceInfo resource = null;
+            
+            if (!skipToFaceletResourceHelper) {
+                resource = webappHelper.findResource(null,
+                        resourceName,
+                        localePrefix,
+                        compressable,
+                        ctx);
+            }
+            if (resource == null && !skipToFaceletResourceHelper) {
+                resource = classpathHelper.findResource(null,
+                                                        resourceName,
+                                                        localePrefix,
+                                                        compressable, 
+                                                        ctx);
+            }
+            if (resource == null) {
+                resource = faceletResourceHelper.findResource(library, 
+                    resourceName, 
+                    localePrefix, 
+                    compressable, 
+                    ctx);
+            }
+            return resource;
+        }
+
+    }
+    
+    ResourceInfo findResource(String resourceId) {
+        // PENDING(fcaputo) do we need to handle contracts here?
+        String libraryName = null;
+        String resourceName = null;
+        int end = 0, start = 0;
+        if (-1 != (end = resourceId.lastIndexOf("/"))) {
+            resourceName = resourceId.substring(end+1);
+            if (-1 != (start = resourceId.lastIndexOf("/", end - 1))) {
+                libraryName = resourceId.substring(start+1, end);
+            } else {
+                libraryName = resourceId.substring(0, end);
+            }
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        LibraryInfo info = this.findLibrary(libraryName, null, null, context);
+        ResourceInfo resourceInfo = this.findResource(info, resourceName, libraryName, true, false, context);
+        
+        return resourceInfo;
+    }
+
+
+    /**
+     * <p>
+     * Obtains the application configured message resources for the current
+     * request locale.  If a ResourceBundle is found and contains the key
+     * <code>javax.faces.resource.localePrefix</code>, use the value associated
+     * with that key as the prefix for locale specific resources.
+     * </p>
+     *
+     * <p>
+     * For example, say the request locale is en_US, and
+     * <code>javax.faces.resourceLocalePrefix</code> is found with a value of
+     * <code>en</code>, a resource path within a web application might look like
+     * <code>/resources/en/corp/images/greetings.jpg</code>
+     * </p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @return the localePrefix based on the current request, or <code>null</code>
+     *  if no prefix can be determined
+     */
+    private String getLocalePrefix(FacesContext context) {
+
+        String localePrefix = null;
+        String appBundleName = context.getApplication().getMessageBundle();
+        if (null != appBundleName) {
+        	
+            Locale locale = null;
+            if (context.getViewRoot() != null) {
+                locale = context.getViewRoot().getLocale();
+            } else {
+                locale = context.getApplication().getViewHandler().calculateLocale(context);
+            }
+            
+                try {
+                    ResourceBundle appBundle =
+                          ResourceBundle.getBundle(appBundleName,
+                                                   locale,
+                                                   Util.getCurrentLoader(ResourceManager.class));
+                    localePrefix =
+                          appBundle
+                                .getString(ResourceHandler.LOCALE_PREFIX);
+                } catch (MissingResourceException mre) { 
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Ignoring missing resource", mre);
+                    }
+                }
+        }
+        return localePrefix;
+
+    }
+
+    private List<String> getResourceLibraryContracts(FacesContext context) {
+        UIViewRoot viewRoot = context.getViewRoot();
+        if(viewRoot == null) {
+
+            if(context.getApplication().getResourceHandler().isResourceRequest(context)) {
+                // it is a resource request. look at the parameter con=.
+
+                String param = context.getExternalContext().getRequestParameterMap().get("con");
+                if(param != null && param.trim().length() > 0) {
+                    return Arrays.asList(param);
+                }
+            }
+            // PENDING(edburns): calculate the contracts!
+            return Collections.emptyList();
+        }
+        return context.getResourceLibraryContracts();
+    }
+
+
+    /**
+     * @param contentType content-type in question
+     * @param ctx the @{link FacesContext} for the current request
+     * @return <code>true</code> if this resource can be compressed, otherwise
+     *  <code>false</code>
+     */
+    private boolean isCompressable(String contentType, FacesContext ctx) {
+
+        // No compression when developing.
+        if (contentType == null || ctx.isProjectStage(ProjectStage.Development)) {
+            return false;
+        } else {
+            if (compressableTypes != null && !compressableTypes.isEmpty()) {
+                for (Pattern p : compressableTypes) {
+                    boolean matches = p.matcher(contentType).matches();
+                    if (matches) {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+
+    }
+
+
+    /**
+     * Init <code>compressableTypes</code> from the configuration.
+     */
+    private void initCompressableTypes(Map<String, Object> appMap) {
+
+        WebConfiguration config = WebConfiguration.getInstance();
+        String value = config.getOptionValue(WebConfiguration.WebContextInitParameter.CompressableMimeTypes);
+        if (value != null && value.length() > 0) {
+            String[] values = Util.split(appMap, value, ",");
+            if (values != null) {
+                for (String s : values) {
+                    String pattern = s.trim();
+                    if (!isPatternValid(pattern)) {
+                        continue;
+                    }
+                    if (pattern.endsWith("/*")) {
+                        pattern = pattern.substring(0, pattern.indexOf("/*"));
+                        pattern += "/[a-z0-9.-]*";
+                    }
+                    if (compressableTypes == null) {
+                        compressableTypes = new ArrayList<Pattern>(values.length);
+                    }
+                    try {
+                        compressableTypes.add(Pattern.compile(pattern));
+                    } catch (PatternSyntaxException pse) {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            // PENDING i18n
+                            LOGGER.log(Level.WARNING,
+                                       "jsf.resource.mime.type.configration.invalid",
+                                       new Object[] { pattern, pse.getPattern()});
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * @param input input mime-type pattern from the configuration
+     * @return <code>true</code> if the input matches the expected pattern,
+     *  otherwise <code>false</code>
+     */
+    private boolean isPatternValid(String input) {
+
+        return (CONFIG_MIMETYPE_PATTERN.matcher(input).matches());
+
+    }
+
+
+}
diff --git a/com/sun/faces/application/resource/VersionInfo.java b/com/sun/faces/application/resource/VersionInfo.java
new file mode 100644
index 0000000..253d3c3
--- /dev/null
+++ b/com/sun/faces/application/resource/VersionInfo.java
@@ -0,0 +1,136 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+/**
+ * Metadata pertaining to versions.
+ */
+public class VersionInfo implements Comparable {
+
+    private String version;
+    private String extension;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Constructs a new VersionInfo instance.
+     * @param version the version
+     * @param extension the extension (only pertains to versioned resources,
+     *  not libraries, and thus may be <code>null</code>)
+     */
+    public VersionInfo(String version, String extension) {
+        this.version = version;
+        this.extension = extension;
+    }
+
+    
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @return the version
+     */
+    public String getVersion() {
+
+        return version;
+
+    }
+
+    /**
+     * @return the extension of the resource at processing time, or null
+     *  if this version is associated with a library
+     */
+    public String getExtension() {
+
+        return extension;
+
+    }
+
+
+    @Override
+    public String toString() {
+
+        return version;
+
+    }
+
+
+    @Override
+    public int hashCode() {
+
+        return (version.hashCode() ^ ((extension != null)
+                                      ? extension.hashCode()
+                                      : 0));
+
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+
+        if (obj == null || !(obj instanceof VersionInfo)) {
+            return false;
+        }
+        if (this == obj) {
+            return true;
+        }
+        VersionInfo passed = (VersionInfo) obj;
+        boolean versionsEqual = this.version.equals(passed.version);
+        boolean extensionEqual;
+        if (this.extension == null) {
+            extensionEqual = (passed.extension == null);
+        } else {
+            extensionEqual = this.extension.equals(passed.extension);
+        }
+        return (versionsEqual && extensionEqual);
+
+    }
+
+
+    // ------------------------------------------------- Methods from Comparable
+
+
+    public int compareTo(Object o) {
+        assert(o instanceof VersionInfo);
+        VersionInfo c = (VersionInfo) o;
+        return (this.version.compareTo(c.version));
+    }
+}
diff --git a/com/sun/faces/application/resource/WebappResourceHelper.java b/com/sun/faces/application/resource/WebappResourceHelper.java
new file mode 100644
index 0000000..0d14cca
--- /dev/null
+++ b/com/sun/faces/application/resource/WebappResourceHelper.java
@@ -0,0 +1,371 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.faces.component.UIViewRoot;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.util.FacesLogger;
+
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.CacheResourceModificationTimestamp;
+
+/**
+ * <p>
+ * A {@link ResourceHelper} implementation for finding/serving resources
+ * found within <code><contextroot>/resources</code> directory of a
+ * web application.
+ * </p>
+ *
+ * @since 2.0
+ */
+public class WebappResourceHelper extends ResourceHelper {
+
+    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
+
+    private String BASE_RESOURCE_PATH;
+    
+    private String BASE_CONTRACTS_PATH;
+
+    private boolean cacheTimestamp;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public WebappResourceHelper() {
+
+        WebConfiguration webconfig = WebConfiguration.getInstance();
+        cacheTimestamp = webconfig.isOptionEnabled(CacheResourceModificationTimestamp);
+        BASE_RESOURCE_PATH = webconfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppResourcesDirectory);
+        BASE_CONTRACTS_PATH = webconfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory);
+
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final WebappResourceHelper other = (WebappResourceHelper) obj;
+        if ((this.BASE_RESOURCE_PATH == null) ? (other.BASE_RESOURCE_PATH != null) : !this.BASE_RESOURCE_PATH.equals(other.BASE_RESOURCE_PATH)) {
+            return false;
+        }
+        if ((this.BASE_CONTRACTS_PATH == null) ? (other.BASE_CONTRACTS_PATH != null) : !this.BASE_CONTRACTS_PATH.equals(other.BASE_CONTRACTS_PATH)) {
+            return false;
+        }
+        if (this.cacheTimestamp != other.cacheTimestamp) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 37 * hash + (this.BASE_RESOURCE_PATH != null ? this.BASE_RESOURCE_PATH.hashCode() : 0);
+        hash = 37 * hash + (this.BASE_CONTRACTS_PATH != null ? this.BASE_CONTRACTS_PATH.hashCode() : 0);
+        hash = 37 * hash + (this.cacheTimestamp ? 1 : 0);
+        return hash;
+    }
+
+    
+
+    // --------------------------------------------- Methods from ResourceHelper
+
+
+    /**
+     * @see com.sun.faces.application.resource.ResourceHelper#getBaseResourcePath()
+     */
+    public String getBaseResourcePath() {
+
+        return BASE_RESOURCE_PATH;
+
+    }
+
+    @Override
+    public String getBaseContractsPath() {
+        return BASE_CONTRACTS_PATH;
+    }
+    
+    /**
+     * @see ResourceHelper#getNonCompressedInputStream(com.sun.faces.application.resource.ResourceInfo, javax.faces.context.FacesContext) 
+     */
+    protected InputStream getNonCompressedInputStream(ResourceInfo resource, FacesContext ctx)
+    throws IOException {
+
+        return ctx.getExternalContext().getResourceAsStream(resource.getPath());
+
+    }
+
+
+    /**
+     * @see ResourceHelper#getURL(com.sun.faces.application.resource.ResourceInfo, javax.faces.context.FacesContext) 
+     */
+    public URL getURL(ResourceInfo resource, FacesContext ctx) {
+
+        try {
+            return ctx.getExternalContext().getResource(resource.getPath());
+        } catch (MalformedURLException e) {
+            return null;
+        }
+
+    }
+    
+    
+
+
+    /**
+     * @see ResourceHelper#findLibrary(String, String, String, javax.faces.context.FacesContext)
+     */
+    public LibraryInfo findLibrary(String libraryName,
+                                   String localePrefix,
+                                   String contract, FacesContext ctx) {
+
+        String path;
+
+        if (localePrefix == null) {
+            path = getBasePath(contract) + '/' + libraryName;
+        } else {
+            path = getBasePath(contract)
+                   + '/'
+                   + localePrefix
+                   + '/'
+                   + libraryName;
+        }
+        Set<String> resourcePaths =
+              ctx.getExternalContext().getResourcePaths(path);
+        // it could be possible that there exists an empty directory
+        // that is representing the library, but if it's empty, treat it
+        // as non-existant and return null.
+        if (resourcePaths != null && !resourcePaths.isEmpty()) {
+            VersionInfo version = getVersion(resourcePaths, false);
+                return new LibraryInfo(libraryName, version, localePrefix, contract, this);
+        }
+
+        return null;
+    }
+
+
+    /**
+     * @see ResourceHelper#findResource(LibraryInfo, String, String, boolean, javax.faces.context.FacesContext)
+     */
+    public ResourceInfo findResource(LibraryInfo library,
+                                     String resourceName,
+                                     String localePrefix,
+                                     boolean compressable,
+                                     FacesContext ctx) {
+        
+        resourceName = trimLeadingSlash(resourceName);
+        ContractInfo [] outContract = new ContractInfo[1];
+        outContract[0] = null;
+        
+        String basePath = findPathConsideringContracts(library, resourceName, 
+                localePrefix, outContract, ctx);
+        
+        if (null == basePath) {
+        
+            if (library != null) {
+                // PENDING(fcaputo) no need to iterate over the contracts, if we have a library
+                basePath = library.getPath(localePrefix) + '/' + resourceName;
+            } else {
+                if (localePrefix == null) {
+                    basePath = getBaseResourcePath() + '/' + resourceName;
+                } else {
+                    basePath = getBaseResourcePath()
+                            + '/'
+                            + localePrefix
+                            + '/'
+                            + resourceName;
+                }
+            }
+            
+            // first check to see if the resource exists, if not, return null.  Let
+            // the caller decide what to do.
+            try {
+                if (ctx.getExternalContext().getResource(basePath) == null) {
+                    return null;
+                }
+            } catch (MalformedURLException e) {
+                throw new FacesException(e);
+            }
+        }
+
+        // we got to hear, so we know the resource exists (either as a directory
+        // or file)
+        Set<String> resourcePaths =
+              ctx.getExternalContext().getResourcePaths(basePath);
+        // if getResourcePaths returns null or an empty set, this means that we have
+        // a non-directory resource, therefor, this resource isn't versioned.
+        ClientResourceInfo value;
+        if (resourcePaths == null || resourcePaths.size() == 0) {
+            if (library != null) {
+                value = new ClientResourceInfo(library,
+                                         outContract[0],
+                                         resourceName,
+                                         null,
+                                         compressable,
+                                         resourceSupportsEL(resourceName, library.getName(), ctx),
+                                         ctx.isProjectStage(ProjectStage.Development),
+                                         cacheTimestamp);
+            } else {
+                value = new ClientResourceInfo(outContract[0], 
+                                         resourceName,
+                                         null,
+                                         localePrefix,
+                                         this,
+                                         compressable,
+                                         resourceSupportsEL(resourceName, null, ctx),
+                                         ctx.isProjectStage(ProjectStage.Development),
+                                         cacheTimestamp);
+            }
+        } else {
+            // ok, subdirectories exist, so find the latest 'version' directory
+            VersionInfo version = getVersion(resourcePaths, true);
+            if (version == null && LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                        "jsf.application.resource.unable_to_determine_resource_version.",
+                        resourceName);
+            }
+            if (library != null) {
+                value = new ClientResourceInfo(library,
+                                         outContract[0],
+                                         resourceName,
+                                         version,
+                                         compressable,
+                                         resourceSupportsEL(resourceName, library.getName(), ctx),
+                                         ctx.isProjectStage(ProjectStage.Development),
+                                         cacheTimestamp);
+            } else {
+                value = new ClientResourceInfo(outContract[0], 
+                                         resourceName,
+                                         version,
+                                         localePrefix,
+                                         this,
+                                         compressable,
+                                         resourceSupportsEL(resourceName, null, ctx),
+                                         ctx.isProjectStage(ProjectStage.Development),
+                                         cacheTimestamp);
+            }
+        }
+
+        if (value.isCompressable()) {
+            value = handleCompression(value);
+        }
+        return value;
+
+    }
+
+    private String findPathConsideringContracts(LibraryInfo library,
+                                     String resourceName,
+                                     String localePrefix,
+                                     ContractInfo [] outContract,
+                                     FacesContext ctx) {
+        UIViewRoot root = ctx.getViewRoot();
+        List<String> contracts = null;
+
+        if (library != null) {
+        	  contracts = new ArrayList<String>(1);
+        	  contracts.add(library.getContract());
+        } else if (root == null) {
+            String contractName = ctx.getExternalContext().getRequestParameterMap()
+                  .get("con");
+            if (null != contractName && 0 < contractName.length()) {
+                contracts = new ArrayList<String>();
+                contracts.add(contractName);
+            } else {
+                return null;
+            }
+        } else {
+        	contracts = ctx.getResourceLibraryContracts();
+        }
+
+        String basePath = null;
+        
+        for (String curContract : contracts) {
+        
+            if (library != null) {
+                // PENDING(fcaputo) no need to iterate over the contracts, if we have a library
+                basePath = library.getPath(localePrefix) + '/' + resourceName;
+            } else {
+                if (localePrefix == null) {
+                    basePath = getBaseContractsPath() + '/' + curContract + '/' + resourceName;
+                } else {
+                    basePath = getBaseContractsPath()
+                            + '/' + curContract 
+                            + '/'
+                            + localePrefix
+                            + '/'
+                            + resourceName;
+                }
+            }
+            
+            try {
+                if (ctx.getExternalContext().getResource(basePath) != null) {
+                    outContract[0] = new ContractInfo(curContract);
+                    break;
+                } else {
+                    basePath = null;
+                }
+            } catch (MalformedURLException e) {
+                throw new FacesException(e);
+            }
+        }
+            
+        return basePath;
+    }
+
+}
diff --git a/com/sun/faces/application/resource/ZipDirectoryEntryScanner.java b/com/sun/faces/application/resource/ZipDirectoryEntryScanner.java
new file mode 100644
index 0000000..60d75da
--- /dev/null
+++ b/com/sun/faces/application/resource/ZipDirectoryEntryScanner.java
@@ -0,0 +1,127 @@
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.resource;
+
+import com.sun.faces.util.FacesLogger;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+
+
+class ZipDirectoryEntryScanner {
+
+    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
+    private static final String prefix = "META-INF/resources";
+    private static final int prefixLen = prefix.length();
+    Map<String, Boolean> resourceLibraries;
+
+
+    ZipDirectoryEntryScanner() {
+        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
+        Set<String> webInfLibJars = extContext.getResourcePaths("/WEB-INF/lib");
+        resourceLibraries = new ConcurrentHashMap<String, Boolean>();
+        ZipInputStream zis = null;
+        ZipEntry ze = null;
+        String entryName = null;
+        if (null != webInfLibJars) {
+            for (String cur : webInfLibJars) {
+                zis = new ZipInputStream(extContext.getResourceAsStream(cur));
+                try {
+                    while (null != (ze = zis.getNextEntry())) {
+                        entryName = ze.getName();
+                        if (entryName.startsWith(prefix) && prefixLen < entryName.length()) {
+                            entryName = entryName.substring(prefixLen + 1);
+                            if (!entryName.endsWith("/")) {
+                                // Assume this code is only reached if the zip entry
+                                // is NOT a 'directory' entry.
+                                int i = entryName.lastIndexOf("/");
+                                if (-1 != i) {
+                                    entryName = entryName.substring(0, i);
+                                    if (!resourceLibraries.containsKey(entryName)) {
+                                        resourceLibraries.put(entryName, Boolean.TRUE);
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                } catch (IOException ioe) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, "Unable to inspect resource library " + cur, ioe);
+                    }
+                }
+            }
+        }
+
+        // remove the optional local prefix entries
+        Iterator<String> iter = resourceLibraries.keySet().iterator();
+        String cur;
+        while (iter.hasNext()) {
+            cur = iter.next();
+            if (cur.contains("/")) {
+                iter.remove();
+            }
+        }
+    }
+
+    boolean libraryExists(String libraryName, String localePrefix) {
+        boolean result = false;
+        if (null != localePrefix) {
+            result = resourceLibraries.containsKey(localePrefix + "/" + libraryName);
+        } else {
+            result = resourceLibraries.containsKey(libraryName);
+        }
+        return result;
+    }
+
+
+
+}
diff --git a/com/sun/faces/application/view/FaceletFullStateManagementStrategy.java b/com/sun/faces/application/view/FaceletFullStateManagementStrategy.java
new file mode 100644
index 0000000..a1955b4
--- /dev/null
+++ b/com/sun/faces/application/view/FaceletFullStateManagementStrategy.java
@@ -0,0 +1,897 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import com.sun.faces.context.StateContext;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.ComponentStruct;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.EnumSet;
+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 java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.FacesException;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.render.ResponseStateManager;
+import javax.faces.view.StateManagementStrategy;
+import static com.sun.faces.RIConstants.DYNAMIC_ACTIONS;
+import static com.sun.faces.RIConstants.DYNAMIC_COMPONENT;
+import javax.faces.application.ViewHandler;
+import javax.faces.view.ViewDeclarationLanguage;
+
+/**
+ * A state management strategy for FSS.
+ *
+ * @author Manfred Riem (manfred.riem at oracle.com)
+ */
+public class FaceletFullStateManagementStrategy extends StateManagementStrategy {
+
+    /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = FacesLogger.APPLICATION_VIEW.getLogger();
+    /**
+     * Stores the skip hint.
+     */
+    private static String SKIP_ITERATION_HINT = "javax.faces.visit.SKIP_ITERATION";
+    /**
+     * Stores the class map.
+     */
+    private Map<String, Class<?>> classMap;
+    /**
+     * Are we in development mode.
+     */
+    private boolean isDevelopmentMode;
+
+    /**
+     * Constructor.
+     */
+    public FaceletFullStateManagementStrategy() {
+        this(FacesContext.getCurrentInstance());
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param context the Faces context.
+     */
+    public FaceletFullStateManagementStrategy(FacesContext context) {
+        isDevelopmentMode = context.isProjectStage(ProjectStage.Development);
+        classMap = new ConcurrentHashMap<String, Class<?>>(32);
+    }
+
+    /**
+     * Capture the child.
+     *
+     * @param tree the tree.
+     * @param parent the parent.
+     * @param c the component.
+     */
+    private void captureChild(List<TreeNode> tree, int parent, UIComponent c) {
+
+        if (!c.isTransient() && !c.getAttributes().containsKey(DYNAMIC_COMPONENT)) {
+            TreeNode n = new TreeNode(parent, c);
+            int pos = tree.size();
+            tree.add(n);
+            captureRest(tree, pos, c);
+        }
+    }
+
+    /**
+     * Capture the facet.
+     *
+     * @param tree the tree.
+     * @param parent the parent.
+     * @param name the facet name.
+     * @param c the component.
+     */
+    private void captureFacet(List<TreeNode> tree, int parent, String name, UIComponent c) {
+
+        if (!c.isTransient() && !c.getAttributes().containsKey(DYNAMIC_COMPONENT)) {
+            FacetNode n = new FacetNode(parent, name, c);
+            int pos = tree.size();
+            tree.add(n);
+            captureRest(tree, pos, c);
+        }
+    }
+
+    /**
+     * Capture the rest.
+     *
+     * @param tree the tree.
+     * @param pos the position.
+     * @param c the component.
+     */
+    private void captureRest(List<TreeNode> tree, int pos, UIComponent c) {
+
+        int sz = c.getChildCount();
+        if (sz > 0) {
+            List<UIComponent> child = c.getChildren();
+            for (int i = 0; i < sz; i++) {
+                captureChild(tree, pos, child.get(i));
+            }
+        }
+
+        sz = c.getFacetCount();
+        if (sz > 0) {
+            for (Map.Entry<String, UIComponent> entry : c.getFacets().entrySet()) {
+                captureFacet(tree, pos, entry.getKey(), entry.getValue());
+            }
+        }
+    }
+
+    /**
+     * Find the given component in the component tree.
+     *
+     * @param context the Faces context.
+     * @param clientId the client id of the component to find.
+     */
+    private UIComponent locateComponentByClientId(final FacesContext context, final UIComponent subTree, final String clientId) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "FaceletFullStateManagementStrategy.locateComponentByClientId", clientId);
+        }
+
+        final List<UIComponent> found = new ArrayList<UIComponent>();
+        UIComponent result = null;
+
+        try {
+            context.getAttributes().put(SKIP_ITERATION_HINT, true);
+            Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+
+            VisitContext visitContext = VisitContext.createVisitContext(context, null, hints);
+            subTree.visitTree(visitContext, new VisitCallback() {
+
+                public VisitResult visit(VisitContext visitContext, UIComponent component) {
+                    VisitResult result = VisitResult.ACCEPT;
+                    if (component.getClientId(visitContext.getFacesContext()).equals(clientId)) {
+                        /*
+                         * If the client id matches up we have found our match.
+                         */
+                        found.add(component);
+                        result = VisitResult.COMPLETE;
+                    } else if (component instanceof UIForm) {
+                        /*
+                         * If the component is a UIForm and it is prepending its
+                         * id then we can short circuit out of here if the the
+                         * client id of the component we are trying to find does
+                         * not begin with the id of the UIForm.
+                         */
+                        UIForm form = (UIForm) component;
+                        if (form.isPrependId() && !clientId.startsWith(form.getClientId(visitContext.getFacesContext()))) {
+                            result = VisitResult.REJECT;
+                        }
+                    } else if (component instanceof NamingContainer
+                            && !clientId.startsWith(component.getClientId(visitContext.getFacesContext()))) {
+                        /*
+                         * If the component is a naming container then assume it
+                         * is prepending its id so if our client id we are
+                         * looking for does not start with the naming container
+                         * id we can skip visiting this tree.
+                         */
+                        result = VisitResult.REJECT;
+                    }
+
+                    return result;
+                }
+            });
+        } finally {
+            context.getAttributes().remove(SKIP_ITERATION_HINT);
+        }
+
+        if (!found.isEmpty()) {
+            result = found.get(0);
+        }
+        return result;
+    }
+
+    /**
+     * Create a new component instance.
+     *
+     * @param n the tree node.
+     * @return the UI component.
+     * @throws FacesException when a serious error occurs.
+     */
+    private UIComponent newInstance(TreeNode n) throws FacesException {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "FaceletFullStateManagementStrategy.newInstance", n.componentType);
+        }
+
+        try {
+            Class<?> t = ((classMap != null) ? classMap.get(n.componentType) : null);
+            if (t == null) {
+                t = Util.loadClass(n.componentType, n);
+                if (t != null && classMap != null) {
+                    classMap.put(n.componentType, t);
+                } else {
+                    if (!isDevelopmentMode) {
+                        throw new NullPointerException();
+                    }
+                }
+            }
+
+            assert (t != null);
+            UIComponent c = (UIComponent) t.newInstance();
+            c.setId(n.id);
+
+            return c;
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+    }
+
+    /**
+     * Methods that takes care of pruning and re-adding an action to the dynamic
+     * action list.
+     *
+     * <p>
+     * If you remove a component, re-add it to the same parent and then remove
+     * it again, you only have to capture the FIRST remove. Similarly if you add
+     * a component, remove it, and then re-add it to the same parent you only
+     * need to capture the LAST add. </p>
+     *
+     * @param dynamicActionList the dynamic action list.
+     * @param struct the component struct to add.
+     */
+    private void pruneAndReAddToDynamicActions(List<ComponentStruct> dynamicActionList, ComponentStruct struct) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletFullStateManagementStrategy.pruneAndReAddToDynamicActions");
+        }
+
+        int firstIndex = dynamicActionList.indexOf(struct);
+        if (firstIndex == -1) {
+            dynamicActionList.add(struct);
+        } else {
+            int lastIndex = dynamicActionList.lastIndexOf(struct);
+            if (lastIndex == -1 || lastIndex == firstIndex) {
+                dynamicActionList.add(struct);
+            } else {
+                if (ComponentStruct.ADD.equals(struct.action)) {
+                    dynamicActionList.remove(lastIndex);
+                    dynamicActionList.remove(firstIndex);
+                    dynamicActionList.add(struct);
+                }
+                if (ComponentStruct.REMOVE.equals(struct.action)) {
+                    dynamicActionList.remove(lastIndex);
+                }
+            }
+        }
+    }
+
+    /**
+     * Restore the component state.
+     *
+     * @param context the Faces context.
+     * @param state the component state.
+     */
+    private void restoreComponentState(final FacesContext context, final HashMap<String, Object> state) {
+
+        final StateContext stateContext = StateContext.getStateContext(context);
+        final UIViewRoot viewRoot = context.getViewRoot();
+
+        try {
+            context.getAttributes().put(SKIP_ITERATION_HINT, true);
+            Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+            VisitContext visitContext = VisitContext.createVisitContext(context, null, hints);
+
+            viewRoot.visitTree(visitContext, new VisitCallback() {
+
+                public VisitResult visit(VisitContext visitContext, UIComponent component) {
+                    VisitResult result = VisitResult.ACCEPT;
+
+                    String cid = component.getClientId(context);
+                    Object stateObj = state.get(cid);
+
+                    if (stateObj != null && !stateContext.componentAddedDynamically(component)) {
+                        boolean restoreStateNow = true;
+                        if (stateObj instanceof StateHolderSaver) {
+                            restoreStateNow = !((StateHolderSaver) stateObj).componentAddedDynamically();
+                        }
+                        if (restoreStateNow) {
+                            try {
+                                component.restoreState(context, stateObj);
+                            } catch (Exception e) {
+                                throw new FacesException(e);
+                            }
+                        }
+                    }
+
+                    return result;
+                }
+            });
+        } finally {
+            context.getAttributes().remove(SKIP_ITERATION_HINT);
+        }
+    }
+
+    /**
+     * Restore the list of dynamic actions and replay them.
+     *
+     * @param context the Faces context.
+     * @param stateContext the state context.
+     * @param stateMap the state.
+     * @param viewRoot the view root.
+     */
+    private void restoreDynamicActions(FacesContext context, StateContext stateContext, HashMap<String, Object> state) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletFullStateManagementStrategy.restoreDynamicActions");
+        }
+
+        UIViewRoot viewRoot = context.getViewRoot();
+        List<Object> savedActions = (List<Object>) viewRoot.getAttributes().get(DYNAMIC_ACTIONS);
+        List<ComponentStruct> actions = stateContext.getDynamicActions();
+
+        if (savedActions != null && !savedActions.isEmpty()) {
+            for (Object object : savedActions) {
+                ComponentStruct action = new ComponentStruct();
+                action.restoreState(context, object);
+                if (ComponentStruct.ADD.equals(action.action)) {
+                    restoreDynamicAdd(context, state, action);
+                }
+                if (ComponentStruct.REMOVE.equals(action.action)) {
+                    restoreDynamicRemove(context, action);
+                }
+                pruneAndReAddToDynamicActions(actions, action);
+            }
+        }
+    }
+
+    /**
+     * Method that takes care of restoring a dynamic add.
+     *
+     * @param context the Faces context.
+     * @param state the state.
+     * @param struct the component struct.
+     */
+    private void restoreDynamicAdd(FacesContext context, Map<String, Object> state, ComponentStruct struct) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletFullStateManagementStrategy.restoreDynamicAdd");
+        }
+
+        UIComponent parent = locateComponentByClientId(context, context.getViewRoot(), struct.parentClientId);
+
+        if (parent != null) {
+            UIComponent child = locateComponentByClientId(context, parent, struct.clientId);
+
+            /*
+             * If Facelets engine restored the child before us we are going to
+             * use it, but we need to remove it before we can add it in the
+             * correct place.
+             */
+            if (child != null) {
+                if (struct.facetName == null) {
+                    parent.getChildren().remove(child);
+                } else {
+                    parent.getFacets().remove(struct.facetName);
+                }
+            }
+
+            /*
+             * The child was not build previously, so we are going to check if
+             * the component was saved in the state.
+             */
+            if (child == null) {
+                StateHolderSaver saver = (StateHolderSaver) state.get(struct.clientId);
+                if (saver != null) {
+                    child = (UIComponent) saver.restore(context);
+                }
+            }
+
+            /*
+             * Are we adding =BACK= in a component that was not in the state,
+             * because it was added by the initial buildView and removed by
+             * another dynamic action?
+             */
+            StateContext stateContext = StateContext.getStateContext(context);
+            if (child == null) {
+                child = stateContext.getDynamicComponents().get(struct.clientId);
+            }
+
+            /*
+             * Now if we have the child we are going to add it back in.
+             */
+            if (child != null) {
+                if (struct.facetName != null) {
+                    parent.getFacets().put(struct.facetName, child);
+                } else {
+                    int childIndex = -1;
+                    if (child.getAttributes().containsKey(DYNAMIC_COMPONENT)) {
+                        childIndex = (Integer) child.getAttributes().get(DYNAMIC_COMPONENT);
+                    }
+                    child.setId(struct.id);
+                    if (childIndex >= parent.getChildCount() || childIndex == -1) {
+                        parent.getChildren().add(child);
+                    } else {
+                        parent.getChildren().add(childIndex, child);
+                    }
+                    child.getClientId();
+                }
+                child.getAttributes().put(DYNAMIC_COMPONENT, child.getParent().getChildren().indexOf(child));
+                stateContext.getDynamicComponents().put(struct.clientId, child);
+            }
+        }
+    }
+
+    /**
+     * Method that takes care of restoring a dynamic remove.
+     *
+     * @param context the Faces context.
+     * @param struct the component struct.
+     */
+    private void restoreDynamicRemove(FacesContext context, ComponentStruct struct) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletFullStateManagementStrategy.restoreDynamicRemove");
+        }
+
+        UIComponent child = locateComponentByClientId(context, context.getViewRoot(), struct.clientId);
+        if (child != null) {
+            StateContext stateContext = StateContext.getStateContext(context);
+            stateContext.getDynamicComponents().put(struct.clientId, child);
+            UIComponent parent = child.getParent();
+            parent.getChildren().remove(child);
+        }
+    }
+
+    /**
+     * Restore the component tree.
+     *
+     * @param context the Faces context.
+     * @param renderKitId the render kit id.
+     * @param tree the saved tree.
+     * @return the view root.
+     * @throws FacesException when a serious error occurs.
+     */
+    private UIViewRoot restoreTree(FacesContext context, String renderKitId, Object[] tree) throws FacesException {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "FaceletFullStateManagementStrategy.restoreTree", renderKitId);
+        }
+
+        UIComponent c;
+        FacetNode fn;
+        TreeNode tn;
+        for (int i = 0; i < tree.length; i++) {
+            if (tree[i] instanceof FacetNode) {
+                fn = (FacetNode) tree[i];
+                c = newInstance(fn);
+                tree[i] = c;
+                if (i != fn.parent) {
+                    ((UIComponent) tree[fn.parent]).getFacets().put(fn.facetName, c);
+                }
+
+            } else {
+                tn = (TreeNode) tree[i];
+                c = newInstance(tn);
+                tree[i] = c;
+                if (i != tn.parent) {
+                    ((UIComponent) tree[tn.parent]).getChildren().add(c);
+                } else {
+                    assert (c instanceof UIViewRoot);
+                    UIViewRoot viewRoot = (UIViewRoot) c;
+                    context.setViewRoot(viewRoot);
+                    viewRoot.setRenderKitId(renderKitId);
+                }
+            }
+        }
+
+        return (UIViewRoot) tree[0];
+    }
+
+    /**
+     * Restore the view.
+     *
+     * @param context the Faces context.
+     * @param viewId the view id.
+     * @param renderKitId the render kit id.
+     * @return the view root.
+     */
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId, String renderKitId) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "FaceletFullStateManagementStrategy.restoreView", new Object[]{viewId, renderKitId});
+        }
+
+        UIViewRoot result = null;
+
+        ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
+        Object[] state = (Object[]) rsm.getState(context, viewId);
+
+        if (state != null && state.length >= 2) {
+            /*
+             * Restore the component tree.
+             */
+            if (state[0] != null) {
+                result = restoreTree(context, renderKitId, ((Object[]) state[0]).clone());
+                context.setViewRoot(result);
+            }
+
+            if (result != null) {
+                StateContext stateContext = StateContext.getStateContext(context);
+                stateContext.startTrackViewModifications(context, result);
+                stateContext.setTrackViewModifications(false);
+
+                try {
+                    HashMap<String, Object> stateMap = (HashMap<String, Object>) state[1];
+                    if (stateMap != null) {
+                        /*
+                         * Restore the component state.
+                         */
+                        restoreComponentState(context, stateMap);
+
+                        /**
+                         * Restore the dynamic actions.
+                         */
+                        restoreDynamicActions(context, stateContext, stateMap);
+                    }
+                } finally {
+                    stateContext.setTrackViewModifications(true);
+                }
+            }
+        }
+
+        /*
+         * Make sure the library contracts get setup as well.
+         */
+        ViewHandler viewHandler = context.getApplication().getViewHandler();
+        ViewDeclarationLanguage vdl = viewHandler.getViewDeclarationLanguage(context, viewId);
+        context.setResourceLibraryContracts(vdl.calculateResourceLibraryContracts(context, viewId));
+
+        return result;
+    }
+
+    /**
+     * Save the component state.
+     *
+     * @param context the Faces context.
+     * @return the saved state.
+     */
+    private Object saveComponentState(FacesContext context) {
+
+        final HashMap<String, Object> stateMap = new HashMap<String, Object>();
+        final StateContext stateContext = StateContext.getStateContext(context);
+        final UIViewRoot viewRoot = context.getViewRoot();
+        final FacesContext finalContext = context;
+
+        context.getAttributes().put(SKIP_ITERATION_HINT, true);
+        Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+        VisitContext visitContext = VisitContext.createVisitContext(context, null, hints);
+
+        try {
+            viewRoot.visitTree(visitContext, new VisitCallback() {
+
+                public VisitResult visit(VisitContext context, UIComponent component) {
+                    VisitResult result = VisitResult.ACCEPT;
+                    Object stateObj;
+                    if (!component.isTransient()) {
+                        if (stateContext.componentAddedDynamically(component)) {
+                            component.getAttributes().put(DYNAMIC_COMPONENT, new Integer(getProperChildIndex(component)));
+                            stateObj = new StateHolderSaver(finalContext, component);
+                        } else {
+                            stateObj = component.saveState(finalContext);
+                        }
+                        if (stateObj != null) {
+                            stateMap.put(component.getClientId(finalContext), stateObj);
+                        }
+                    } else {
+                        result = VisitResult.REJECT;
+                    }
+                    return result;
+                }
+            });
+        } finally {
+            context.getAttributes().remove(SKIP_ITERATION_HINT);
+        }
+
+        return stateMap;
+    }
+
+    /**
+     * Save the dynamic actions.
+     *
+     * @param context the Faces context.
+     * @param stateContext the state context.
+     * @param stateMap the state.
+     */
+    private void saveDynamicActions(FacesContext context, StateContext stateContext, UIViewRoot viewRoot) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletFullStateManagementStrategy.saveDynamicActions");
+        }
+
+        List<ComponentStruct> actions = stateContext.getDynamicActions();
+        HashMap<String, UIComponent> componentMap = stateContext.getDynamicComponents();
+
+        if (actions != null) {
+            List<Object> savedActions = new ArrayList<Object>(actions.size());
+            for (ComponentStruct action : actions) {
+                UIComponent component = componentMap.get(action.clientId);
+                if (component == null && context.isProjectStage(ProjectStage.Development)) {
+                    LOGGER.log(
+                            Level.WARNING,
+                            "Unable to save dynamic action with clientId ''{0}'' because the UIComponent cannot be found",
+                            action.clientId);
+                }
+                if (component != null) {
+                    savedActions.add(action.saveState(context));
+                }
+            }
+            viewRoot.getAttributes().put(DYNAMIC_ACTIONS, savedActions);
+        }
+    }
+
+    /**
+     * Save the view.
+     *
+     * @param context the Faces context.
+     * @return the saved view.
+     */
+    @Override
+    public Object saveView(FacesContext context) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletFullStateManagementStrategy.saveView");
+        }
+
+        Object[] result;
+        UIViewRoot viewRoot = context.getViewRoot();
+
+        /*
+         * Check uniqueness.
+         */
+        Util.checkIdUniqueness(context, viewRoot, new HashSet<String>(viewRoot.getChildCount() << 1));
+
+        /**
+         * Save the dynamic actions.
+         */
+        StateContext stateContext = StateContext.getStateContext(context);
+        saveDynamicActions(context, stateContext, viewRoot);
+
+        /*
+         * Save the component state.
+         */
+        Object state = saveComponentState(context);
+
+        /*
+         * Save the tree structure.
+         */
+        List<TreeNode> treeList = new ArrayList<TreeNode>(32);
+        captureChild(treeList, 0, viewRoot);
+        Object[] tree = treeList.toArray();
+
+        result = new Object[]{tree, state};
+        StateContext.release(context);
+        return result;
+    }
+
+    /**
+     * Inner class used to store a facet in the saved component tree.
+     */
+    private static final class FacetNode extends TreeNode {
+
+        /**
+         * Stores the serial version UID.
+         */
+        private static final long serialVersionUID = -3777170310958005106L;
+        /**
+         * Stores the facet name.
+         */
+        public String facetName;
+
+        /**
+         * Constructor.
+         */
+        public FacetNode() {
+        }
+
+        /**
+         * Constructor.
+         *
+         * @param parent the parent.
+         * @param name the facet name.
+         * @param c the component.
+         */
+        public FacetNode(int parent, String name, UIComponent c) {
+
+            super(parent, c);
+            this.facetName = name;
+        }
+
+        /**
+         * Read the facet node in.
+         *
+         * @param in the object input.
+         * @throws IOException when an I/O error occurs.
+         * @throws ClassNotFoundException when the class could not be found.
+         */
+        @Override
+        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+
+            super.readExternal(in);
+            this.facetName = in.readUTF();
+
+        }
+
+        /**
+         * Write the facet node out.
+         *
+         * @param out the object output.
+         * @throws IOException when an I/O error occurs.
+         */
+        @Override
+        public void writeExternal(ObjectOutput out) throws IOException {
+
+            super.writeExternal(out);
+            out.writeUTF(this.facetName);
+
+        }
+    }
+
+    /**
+     * Inner class used to store a node in the saved component tree.
+     */
+    private static class TreeNode implements Externalizable {
+
+        /**
+         * Stores the serial version UID.
+         */
+        private static final long serialVersionUID = -835775352718473281L;
+        /**
+         * Stores the NULL_ID constant.
+         */
+        private static final String NULL_ID = "";
+        /**
+         * Stores the component type.
+         */
+        public String componentType;
+        /**
+         * Stores the id.
+         */
+        public String id;
+        /**
+         * Stores the parent.
+         */
+        public int parent;
+
+        /**
+         * Constructor.
+         */
+        public TreeNode() {
+        }
+
+        /**
+         * Constructor.
+         *
+         * @param parent the parent.
+         * @param c the component.
+         */
+        public TreeNode(int parent, UIComponent c) {
+
+            this.parent = parent;
+            this.id = c.getId();
+            this.componentType = c.getClass().getName();
+
+        }
+
+        /**
+         * Read the tree node in.
+         *
+         * @param in the object input.
+         * @throws IOException when an I/O error occurs.
+         * @throws ClassNotFoundException when the class could not be found.
+         */
+        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+
+            this.parent = in.readInt();
+            this.componentType = in.readUTF();
+            this.id = in.readUTF();
+            if (id.length() == 0) {
+                id = null;
+            }
+        }
+
+        /**
+         * Write the tree node out.
+         *
+         * @param out the object output.
+         * @throws IOException when an I/O error occurs.
+         */
+        public void writeExternal(ObjectOutput out) throws IOException {
+
+            out.writeInt(this.parent);
+            out.writeUTF(this.componentType);
+            if (this.id != null) {
+                out.writeUTF(this.id);
+            } else {
+                out.writeUTF(NULL_ID);
+            }
+        }
+    }
+
+    /**
+     * Helper method that determines what the index of the given child component
+     * will be taking transient siblings into account.
+     *
+     * @param component the UI component.
+     * @return the calculated index.
+     */
+    private int getProperChildIndex(UIComponent component) {
+        int result = -1;
+
+        if (component.getParent().getChildren().indexOf(component) != -1) {
+            UIComponent parent = component.getParent();
+            int index = 0;
+            Iterator<UIComponent> iterator = parent.getChildren().iterator();
+            while (iterator.hasNext()) {
+                UIComponent child = iterator.next();
+                if (child == component) {
+                    break;
+                } else {
+                    if (!child.isTransient()) {
+                        index++;
+                    }
+                }
+            }
+            if (index == 0 && !parent.getChildren().isEmpty()
+                    && parent.getChildren().get(0).isTransient()) {
+                index = -1;
+            }
+            result = index;
+        }
+
+        return result;
+    }
+}
diff --git a/com/sun/faces/application/view/FaceletPartialStateManagementStrategy.java b/com/sun/faces/application/view/FaceletPartialStateManagementStrategy.java
new file mode 100644
index 0000000..b401ec5
--- /dev/null
+++ b/com/sun/faces/application/view/FaceletPartialStateManagementStrategy.java
@@ -0,0 +1,535 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import com.sun.faces.context.StateContext;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.ComponentStruct;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import java.util.ArrayList;
+import java.util.EnumSet;
+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 java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.FacesException;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.render.ResponseStateManager;
+import javax.faces.view.StateManagementStrategy;
+import static com.sun.faces.RIConstants.DYNAMIC_ACTIONS;
+import static com.sun.faces.RIConstants.DYNAMIC_COMPONENT;
+import javax.faces.application.ProjectStage;
+
+/**
+ * The state management strategy for PSS.
+ *
+ * @author Manfred Riem (manfred.riem at oracle.com)
+ */
+public class FaceletPartialStateManagementStrategy extends StateManagementStrategy {
+
+    /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = FacesLogger.APPLICATION_VIEW.getLogger();
+    /**
+     * Stores the skip hint.
+     */
+    private static String SKIP_ITERATION_HINT = "javax.faces.visit.SKIP_ITERATION";
+
+    /**
+     * Constructor.
+     */
+    public FaceletPartialStateManagementStrategy() {
+        this(FacesContext.getCurrentInstance());
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param context the Faces context.
+     */
+    public FaceletPartialStateManagementStrategy(FacesContext context) {
+    }
+
+    /**
+     * Find the given component in the component tree.
+     *
+     * @param context the Faces context.
+     * @param clientId the client id of the component to find.
+     */
+    private UIComponent locateComponentByClientId(final FacesContext context, final UIComponent subTree, final String clientId) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "FaceletPartialStateManagementStrategy.locateComponentByClientId", clientId);
+        }
+
+        final List<UIComponent> found = new ArrayList<UIComponent>();
+        UIComponent result = null;
+
+        try {
+            context.getAttributes().put(SKIP_ITERATION_HINT, true);
+            Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+
+            VisitContext visitContext = VisitContext.createVisitContext(context, null, hints);
+            subTree.visitTree(visitContext, new VisitCallback() {
+
+                public VisitResult visit(VisitContext visitContext, UIComponent component) {
+                    VisitResult result = VisitResult.ACCEPT;
+                    if (component.getClientId(visitContext.getFacesContext()).equals(clientId)) {
+                        /*
+                         * If the client id matches up we have found our match.
+                         */
+                        found.add(component);
+                        result = VisitResult.COMPLETE;
+                    } else if (component instanceof UIForm) {
+                        /*
+                         * If the component is a UIForm and it is prepending its
+                         * id then we can short circuit out of here if the the
+                         * client id of the component we are trying to find does
+                         * not begin with the id of the UIForm.
+                         */
+                        UIForm form = (UIForm) component;
+                        if (form.isPrependId() && !clientId.startsWith(form.getClientId(visitContext.getFacesContext()))) {
+                            result = VisitResult.REJECT;
+                        }
+                    } else if (component instanceof NamingContainer &&
+                        !clientId.startsWith(component.getClientId(visitContext.getFacesContext()))) {
+                        /*
+                         * If the component is a naming container then assume it
+                         * is prepending its id so if our client id we are
+                         * looking for does not start with the naming container
+                         * id we can skip visiting this tree.
+                         */
+                        result = VisitResult.REJECT;
+                    }
+
+                    return result;
+                }
+            });
+        } finally {
+            context.getAttributes().remove(SKIP_ITERATION_HINT);
+        }
+
+        if (!found.isEmpty()) {
+            result = found.get(0);
+        }
+        return result;
+    }
+
+    /**
+     * Methods that takes care of pruning and re-adding an action to the dynamic
+     * action list.
+     *
+     * <p> If you remove a component, re-add it to the same parent and then
+     * remove it again, you only have to capture the FIRST remove. Similarly if
+     * you add a component, remove it, and then re-add it to the same parent you
+     * only need to capture the LAST add. </p>
+     *
+     * @param dynamicActionList the dynamic action list.
+     * @param struct the component struct to add.
+     */
+    private void pruneAndReAddToDynamicActions(List<ComponentStruct> dynamicActionList, ComponentStruct struct) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletPartialStateManagementStrategy.pruneAndReAddToDynamicActions");
+        }
+
+        int firstIndex = dynamicActionList.indexOf(struct);
+        if (firstIndex == -1) {
+            dynamicActionList.add(struct);
+        } else {
+            int lastIndex = dynamicActionList.lastIndexOf(struct);
+            if (lastIndex == -1 || lastIndex == firstIndex) {
+                dynamicActionList.add(struct);
+            } else {
+                if (ComponentStruct.ADD.equals(struct.action)) {
+                    dynamicActionList.remove(lastIndex);
+                    dynamicActionList.remove(firstIndex);
+                    dynamicActionList.add(struct);
+                }
+                if (ComponentStruct.REMOVE.equals(struct.action)) {
+                    dynamicActionList.remove(lastIndex);
+                }
+            }
+        }
+    }
+
+    /**
+     * Restore the list of dynamic actions and replay them.
+     *
+     * @param context the Faces context.
+     * @param stateContext the state context.
+     * @param stateMap the state.
+     * @param viewRoot the view root.
+     */
+    private void restoreDynamicActions(FacesContext context, StateContext stateContext, Map<String, Object> stateMap) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletPartialStateManagementStrategy.restoreDynamicActions");
+        }
+
+        List<Object> savedActions = (List<Object>) stateMap.get(DYNAMIC_ACTIONS);
+        List<ComponentStruct> actions = stateContext.getDynamicActions();
+
+        if (savedActions != null && !savedActions.isEmpty()) {
+            for (Object object : savedActions) {
+                ComponentStruct action = new ComponentStruct();
+                action.restoreState(context, object);
+                if (ComponentStruct.ADD.equals(action.action)) {
+                    restoreDynamicAdd(context, stateMap, action);
+                }
+                if (ComponentStruct.REMOVE.equals(action.action)) {
+                    restoreDynamicRemove(context, action);
+                }
+                pruneAndReAddToDynamicActions(actions, action);
+            }
+        }
+    }
+
+    /**
+     * Method that takes care of restoring a dynamic add.
+     *
+     * @param context the Faces context.
+     * @param state the state.
+     * @param struct the component struct.
+     */
+    private void restoreDynamicAdd(FacesContext context, Map<String, Object> state, ComponentStruct struct) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletPartialStateManagementStrategy.restoreDynamicAdd");
+        }
+
+        UIComponent parent = locateComponentByClientId(context, context.getViewRoot(), struct.parentClientId);
+
+        if (parent != null) {
+            UIComponent child = locateComponentByClientId(context, parent, struct.clientId);
+
+            /*
+             * If Facelets engine restored the child before us we are going to
+             * use it, but we need to remove it before we can add it in the
+             * correct place.
+             */
+            if (child != null) {
+                if (struct.facetName == null) {
+                    parent.getChildren().remove(child);
+                } else {
+                    parent.getFacets().remove(struct.facetName);
+                }
+            }
+
+            /*
+             * The child was not build previously, so we are going to check if
+             * the component was saved in the state.
+             */
+            if (child == null) {
+                StateHolderSaver saver = (StateHolderSaver) state.get(struct.clientId);
+                if (saver != null) {
+                    child = (UIComponent) saver.restore(context);
+                }
+            }
+
+            /*
+             * Are we adding =BACK= in a component that was not in the state,
+             * because it was added by the initial buildView and removed by
+             * another dynamic action?
+             */
+            StateContext stateContext = StateContext.getStateContext(context);
+            if (child == null) {
+                child = stateContext.getDynamicComponents().get(struct.clientId);
+            }
+
+            /*
+             * Now if we have the child we are going to add it back in.
+             */
+            if (child != null) {
+                if (struct.facetName != null) {
+                    parent.getFacets().put(struct.facetName, child);
+                } else {
+                    int childIndex = -1;
+                    if (child.getAttributes().containsKey(DYNAMIC_COMPONENT)) {
+                        childIndex = (Integer) child.getAttributes().get(DYNAMIC_COMPONENT);
+                    }
+                    child.setId(struct.id);
+                    if (childIndex >= parent.getChildCount() || childIndex == -1) {
+                        parent.getChildren().add(child);
+                    } else {
+                        parent.getChildren().add(childIndex, child);
+                    }
+                    child.getClientId();
+                }
+                child.getAttributes().put(DYNAMIC_COMPONENT, child.getParent().getChildren().indexOf(child));
+                stateContext.getDynamicComponents().put(struct.clientId, child);
+            }
+        }
+    }
+
+    /**
+     * Method that takes care of restoring a dynamic remove.
+     *
+     * @param context the Faces context.
+     * @param struct the component struct.
+     */
+    private void restoreDynamicRemove(FacesContext context, ComponentStruct struct) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletPartialStateManagementStrategy.restoreDynamicRemove");
+        }
+
+        UIComponent child = locateComponentByClientId(context, context.getViewRoot(), struct.clientId);
+        if (child != null) {
+            StateContext stateContext = StateContext.getStateContext(context);
+            stateContext.getDynamicComponents().put(struct.clientId, child);
+            UIComponent parent = child.getParent();
+            parent.getChildren().remove(child);
+        }
+    }
+
+    /**
+     * Restore the view.
+     *
+     * @param context the Faces context.
+     * @param viewId the view id.
+     * @param renderKitId the render kit id.
+     * @return the view root.
+     */
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId, String renderKitId) {
+
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "FaceletPartialStateManagementStrategy.restoreView", new Object[]{viewId, renderKitId});
+        }
+
+        ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
+        boolean processingEvents = context.isProcessingEvents();
+        UIViewRoot viewRoot = context.getViewRoot();
+
+        Object[] rawState = (Object[]) rsm.getState(context, viewId);
+        if (rawState == null) {
+            return null;
+        }
+
+        final Map<String, Object> state = (Map<String, Object>) rawState[1];
+        final StateContext stateContext = StateContext.getStateContext(context);
+
+        if (state != null) {
+            try {
+                stateContext.setTrackViewModifications(false);
+
+                context.getAttributes().put(SKIP_ITERATION_HINT, true);
+                Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION, VisitHint.EXECUTE_LIFECYCLE);
+                VisitContext visitContext = VisitContext.createVisitContext(context, null, hints);
+                viewRoot.visitTree(visitContext, new VisitCallback() {
+
+                    public VisitResult visit(VisitContext context, UIComponent target) {
+                        VisitResult result = VisitResult.ACCEPT;
+                        String cid = target.getClientId(context.getFacesContext());
+                        Object stateObj = state.get(cid);
+                        if (stateObj != null && !stateContext.componentAddedDynamically(target)) {
+                            boolean restoreStateNow = true;
+                            if (stateObj instanceof StateHolderSaver) {
+                                restoreStateNow = !((StateHolderSaver) stateObj).componentAddedDynamically();
+                            }
+                            if (restoreStateNow) {
+                                try {
+                                    target.restoreState(context.getFacesContext(), stateObj);
+                                } catch (Exception e) {
+                                    String msg =
+                                            MessageUtils.getExceptionMessageString(
+                                            MessageUtils.PARTIAL_STATE_ERROR_RESTORING_ID,
+                                            cid,
+                                            e.toString());
+                                    throw new FacesException(msg, e);
+                                }
+                            }
+                        }
+
+                        return result;
+                    }
+                });
+                restoreDynamicActions(context, stateContext, state);
+            } finally {
+                stateContext.setTrackViewModifications(true);
+                context.getAttributes().remove(SKIP_ITERATION_HINT);
+            }
+        } else {
+            viewRoot = null;
+        }
+        context.setProcessingEvents(processingEvents);
+        return viewRoot;
+    }
+
+    /**
+     * Save the dynamic actions.
+     *
+     * @param context the Faces context.
+     * @param stateContext the state context.
+     * @param stateMap the state.
+     */
+    private void saveDynamicActions(FacesContext context, StateContext stateContext, Map<String, Object> stateMap) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletPartialStateManagementStrategy.saveDynamicActions");
+        }
+
+        List<ComponentStruct> actions = stateContext.getDynamicActions();
+        HashMap<String, UIComponent> componentMap = stateContext.getDynamicComponents();
+        
+        if (actions != null) {
+            List<Object> savedActions = new ArrayList<Object>(actions.size());
+            for (ComponentStruct action : actions) {
+                UIComponent component = componentMap.get(action.clientId);
+                if (component == null && context.isProjectStage(ProjectStage.Development)) {
+                    LOGGER.log(
+                            Level.WARNING,
+                            "Unable to save dynamic action with clientId ''{0}'' because the UIComponent cannot be found",
+                            action.clientId);
+                }
+                if (component != null) {
+                    savedActions.add(action.saveState(context));
+                }
+            }
+            stateMap.put(DYNAMIC_ACTIONS, savedActions);
+        }
+    }
+
+    /**
+     * Save the view.
+     *
+     * @param context the Faces context.
+     * @return the saved view.
+     */
+    @Override
+    public Object saveView(FacesContext context) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("FaceletPartialStateManagementStrategy.saveView");
+        }
+
+        if (context == null) {
+            return null;
+        }
+
+        UIViewRoot viewRoot = context.getViewRoot();
+        if (viewRoot.isTransient()) {
+            return null;
+        }
+
+        Util.checkIdUniqueness(context, viewRoot, new HashSet<String>(viewRoot.getChildCount() << 1));
+
+        final Map<String, Object> stateMap = new HashMap<String, Object>();
+        final StateContext stateContext = StateContext.getStateContext(context);
+
+        context.getAttributes().put(SKIP_ITERATION_HINT, true);
+        Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+        VisitContext visitContext = VisitContext.createVisitContext(context, null, hints);
+        final FacesContext finalContext = context;
+
+        try {
+            viewRoot.visitTree(visitContext, new VisitCallback() {
+
+                public VisitResult visit(VisitContext context, UIComponent target) {
+                    VisitResult result = VisitResult.ACCEPT;
+                    Object stateObj;
+                    if (!target.isTransient()) {
+                        if (stateContext.componentAddedDynamically(target)) {
+                            target.getAttributes().put(DYNAMIC_COMPONENT, new Integer(getProperChildIndex(target)));
+                            stateObj = new StateHolderSaver(finalContext, target);
+                        } else {
+                            stateObj = target.saveState(context.getFacesContext());
+                        }
+                        if (stateObj != null) {
+                            stateMap.put(target.getClientId(context.getFacesContext()), stateObj);
+                        }
+                    } else {
+                        return VisitResult.REJECT;
+                    }
+                    return result;
+                }
+            });
+        } finally {
+            context.getAttributes().remove(SKIP_ITERATION_HINT);
+        }
+
+        saveDynamicActions(context, stateContext, stateMap);
+        StateContext.release(context);
+        return new Object[]{null, stateMap};
+    }
+
+    /**
+     * Helper method that determines what the index of the given child component
+     * will be taking transient siblings into account.
+     *
+     * @param component the UI component.
+     * @return the calculated index.
+     */
+    private int getProperChildIndex(UIComponent component) {
+        int result = -1;
+
+        if (component.getParent().getChildren().indexOf(component) != -1) {
+            UIComponent parent = component.getParent();
+            int index = 0;
+            Iterator<UIComponent> iterator = parent.getChildren().iterator();
+            while (iterator.hasNext()) {
+                UIComponent child = iterator.next();
+                if (child == component) {
+                    break;
+                } else {
+                    if (!child.isTransient()) {
+                        index++;
+                    }
+                }
+            }
+            if (index == 0 && !parent.getChildren().isEmpty() &&
+                    parent.getChildren().get(0).isTransient()) {
+                index = -1;
+            }
+            result = index;
+        }
+
+        return result;
+    }
+}
diff --git a/com/sun/faces/application/view/FaceletViewHandlingStrategy.java b/com/sun/faces/application/view/FaceletViewHandlingStrategy.java
new file mode 100644
index 0000000..a659e4e
--- /dev/null
+++ b/com/sun/faces/application/view/FaceletViewHandlingStrategy.java
@@ -0,0 +1,2177 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.context.StateContext;
+import javax.faces.view.facelets.Facelet;
+import com.sun.faces.facelets.el.ContextualCompositeMethodExpression;
+import com.sun.faces.facelets.el.VariableMapperWrapper;
+import com.sun.faces.facelets.impl.DefaultFaceletFactory;
+import com.sun.faces.facelets.tag.composite.CompositeComponentBeanInfo;
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
+import com.sun.faces.facelets.tag.ui.UIDebug;
+import com.sun.faces.scripting.groovy.GroovyHelper;
+import com.sun.faces.util.Cache.Factory;
+import com.sun.faces.util.Cache;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.HtmlUtils;
+import com.sun.faces.util.RequestStateManager;
+import com.sun.faces.util.Util;
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.beans.PropertyDescriptor;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.el.ExpressionFactory;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.ActionSource2;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIPanel;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.MethodExpressionActionListener;
+import javax.faces.event.MethodExpressionValueChangeListener;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.render.RenderKit;
+import javax.faces.validator.MethodExpressionValidator;
+import javax.faces.view.ActionSource2AttachedObjectHandler;
+import javax.faces.view.ActionSource2AttachedObjectTarget;
+import javax.faces.view.AttachedObjectHandler;
+import javax.faces.view.AttachedObjectTarget;
+import javax.faces.view.BehaviorHolderAttachedObjectHandler;
+import javax.faces.view.BehaviorHolderAttachedObjectTarget;
+import javax.faces.view.EditableValueHolderAttachedObjectHandler;
+import javax.faces.view.EditableValueHolderAttachedObjectTarget;
+import javax.faces.view.StateManagementStrategy;
+import javax.faces.view.ValueHolderAttachedObjectHandler;
+import javax.faces.view.ValueHolderAttachedObjectTarget;
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.view.ViewDeclarationLanguageFactory;
+import javax.faces.view.ViewMetadata;
+import javax.faces.view.facelets.FaceletContext;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FaceletsBufferSize;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FaceletsViewMappings;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.StateSavingMethod;
+import com.sun.faces.util.ComponentStruct;
+import static javax.faces.application.StateManager.IS_BUILDING_INITIAL_STATE;
+import javax.faces.component.ContextCallback;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitResult;
+import static com.sun.faces.RIConstants.DYNAMIC_COMPONENT;
+import com.sun.faces.facelets.impl.XMLFrontMatterSaver;
+import com.sun.faces.renderkit.RenderKitUtils;
+import java.util.Collections;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import javax.faces.application.ProjectStage;
+import javax.faces.render.ResponseStateManager;
+
+/**
+ * This {@link ViewHandlingStrategy} handles Facelets/PDL-based views.
+ */
+public class FaceletViewHandlingStrategy extends ViewHandlingStrategy {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    private ViewDeclarationLanguageFactory vdlFactory;
+
+    private DefaultFaceletFactory faceletFactory;
+
+    // Array of viewId extensions that should be handled by Facelets
+    private String[] extensionsArray;
+
+    // Array of viewId prefixes that should be handled by Facelets
+    private String[] prefixesArray;
+    
+    public static final String IS_BUILDING_METADATA =
+          FaceletViewHandlingStrategy.class.getName() + ".IS_BUILDING_METADATA";
+    
+    public static final String RESOURCE_LIBRARY_CONTRACT_DATA_STRUCTURE_KEY = 
+              FaceletViewHandlingStrategy.class.getName() + ".RESOURCE_LIBRARY_CONTRACT_DATA_STRUCTURE";
+
+    private MethodRetargetHandlerManager retargetHandlerManager =
+          new MethodRetargetHandlerManager();
+
+
+    private boolean groovyAvailable;
+    private int responseBufferSize;
+    private boolean responseBufferSizeSet;
+    private boolean isTrinidadStateManager;
+
+    private Cache<Resource, BeanInfo> metadataCache;
+    private Map<String, List<String>> contractMappings;
+
+    /**
+     * Stores the skip hint.
+     */
+    private static String SKIP_ITERATION_HINT = "javax.faces.visit.SKIP_ITERATION";
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public FaceletViewHandlingStrategy() {
+
+        initialize();
+
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+    public static boolean isBuildingMetadata(FacesContext context) {
+        return context.getAttributes().containsKey(FaceletViewHandlingStrategy.IS_BUILDING_METADATA);
+    }
+
+    // ------------------------------------ Methods from ViewDeclarationLanguage
+
+    @Override
+    public StateManagementStrategy getStateManagementStrategy(FacesContext context, String viewId) {
+        StateManagementStrategy result;
+        
+        StateContext stateCtx = StateContext.getStateContext(context);
+        if (stateCtx.isPartialStateSaving(context, viewId)) {
+            result = new FaceletPartialStateManagementStrategy(context);
+        } else {
+            // Spec for this method says:
+            
+            // Implementations that provide the VDL for Facelets for JSF 2.0 
+            // and later must return non-null from this method.
+            
+            // Limit the specification violating change to the case where
+            // we are running in Trinidad.
+            // 
+            result = isTrinidadStateManager ? null : new JspStateManagementStrategy(context);
+        }
+        
+        return result;
+    }
+    
+    /*
+     * Called by Application._createComponent(Resource).
+     * 
+     * This method creates two temporary UIComponent instances to aid in
+     * the creation of the compcomp metadata.  These instances no longer
+     * needed after the method returns and can be safely garbage
+     * collected.
+     *
+     * PENDING(): memory analysis should be done to verify there are no
+     * memory leaks as a result of this implementation.
+
+     * The instances are
+
+     * 1. tmp: a javax.faces.NamingContainer to serve as the temporary
+     * top level component
+
+     * 2. facetComponent: a javax.faces.Panel to serve as the parent
+     * UIComponent that is passed to Facelets so that the <cc:interface>
+     * section can be parsed and understood.
+
+     * Per the compcomp spec, tmp has the compcomp Resource stored in
+     * its attr set under the key Resource.COMPONENT_RESOURCE_KEY.  tmp
+     * has the facetComponent added as its
+     * UIComponent.COMPOSITE_FACET_NAME facet.
+
+     */
+
+    @Override
+    public BeanInfo getComponentMetadata(FacesContext context, 
+            Resource ccResource) {
+
+        DefaultFaceletFactory factory = (DefaultFaceletFactory)
+                RequestStateManager.get(context, RequestStateManager.FACELET_FACTORY);
+        DefaultFaceletFactory ourFactory = (DefaultFaceletFactory) factory;
+        if (ourFactory.needsToBeRefreshed(ccResource.getURL())) {
+            metadataCache.remove(ccResource);
+        }
+
+        return metadataCache.get(ccResource);
+    }
+    
+    public BeanInfo createComponentMetadata(FacesContext context,
+            Resource ccResource) {
+
+        // PENDING this implementation is terribly wasteful.
+        // Must find a better way.
+        CompositeComponentBeanInfo result;
+        FaceletContext ctx = (FaceletContext)
+                context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+        DefaultFaceletFactory factory = (DefaultFaceletFactory)
+              RequestStateManager.get(context, RequestStateManager.FACELET_FACTORY);
+        VariableMapper orig = ctx.getVariableMapper();
+
+    // create tmp and facetComponent
+        UIComponent tmp = context.getApplication().createComponent("javax.faces.NamingContainer");
+        UIPanel facetComponent = (UIPanel)
+                context.getApplication().createComponent("javax.faces.Panel");
+
+    // PENDING I think this can be skipped because we don't render
+    // this component instance.
+        facetComponent.setRendererType("javax.faces.Group");
+
+    // PENDING This could possibly be skipped too.  However, I think
+    // this is important because other tag handlers, within
+    // <cc:interface> expect it will be there.
+        tmp.getFacets().put(UIComponent.COMPOSITE_FACET_NAME, facetComponent);
+        // We have to put the resource in here just so the classes that eventually
+        // get called by facelets have access to it.
+        tmp.getAttributes().put(Resource.COMPONENT_RESOURCE_KEY, 
+                ccResource);
+        
+        Facelet f;
+
+        try {
+            f = factory.getFacelet(context, ccResource.getURL());
+            VariableMapper wrapper = new VariableMapperWrapper(orig) {
+
+                @Override
+                public ValueExpression resolveVariable(String variable) {
+                    return super.resolveVariable(variable);
+                }
+                
+            };
+            ctx.setVariableMapper(wrapper);
+            context.getAttributes().put(IS_BUILDING_METADATA, Boolean.TRUE);
+
+        // Because mojarra currently requires a <cc:interface>
+        // element within the compcomp markup, we can rely on the
+        // fact that its tag handler, InterfaceHandler.apply(), is
+        // called.  In this method, we first imbue facetComponent
+        // with any config information present on the <cc:interface>
+        // element.
+
+        // Then we do the normal facelet thing:
+        // this.nextHandler.apply().  This causes any child tag
+        // handlers of the <cc:interface> to be called.  The
+        // compcomp spec says each such tag handler is responsible
+        // for adding to the compcomp metadata, referenced from the
+        // facetComponent parent.
+
+            f.apply(context, facetComponent);
+
+        // When f.apply() returns (and therefore
+        // InterfaceHandler.apply() returns), the compcomp metadata
+        // pointed to by facetComponent is fully populated.
+
+        } catch (Exception e) {
+            if (e instanceof FacesException) {
+                throw (FacesException) e;
+            } else {
+                throw new FacesException(e);
+            }
+        }
+        finally {
+            context.getAttributes().remove(IS_BUILDING_METADATA);
+            ctx.setVariableMapper(orig);
+        }
+    // we extract the compcomp metadata and return it, making sure
+    // to discard tmp and facetComponent.  The compcomp metadata
+    // should be cacheable and shareable across threads, but this is
+    // not yet implemented.
+        result = (CompositeComponentBeanInfo) 
+                tmp.getAttributes().get(UIComponent.BEANINFO_KEY);
+        
+        return result;
+    }
+
+    @Override
+    public ViewMetadata getViewMetadata(FacesContext context, String viewId) {
+        Util.notNull("context", context);
+        Util.notNull("viewId", viewId);
+
+        return new ViewMetadataImpl(viewId);
+
+    }
+    
+    /**
+     * @see javax.faces.view.ViewDeclarationLanguage#getScriptComponentResource(javax.faces.context.FacesContext, javax.faces.application.Resource)
+     */
+    public Resource getScriptComponentResource(FacesContext context,
+            Resource componentResource) {
+        Util.notNull("context", context);
+        Util.notNull("componentResource", componentResource);
+
+        if (!groovyAvailable) {
+            return null;
+        }
+        Resource result = null;
+
+        String resourceName = componentResource.getResourceName();
+        if (resourceName.endsWith(".xhtml")) {
+            resourceName = resourceName.substring(0, 
+                    resourceName.length() - 6) + ".groovy";
+            ResourceHandler resourceHandler = context.getApplication().getResourceHandler();
+            result = resourceHandler.createResource(resourceName, 
+                    componentResource.getLibraryName());
+        }
+        
+        return result;
+    }
+
+
+    /**
+     * @see javax.faces.view.ViewDeclarationLanguage#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
+     */
+    public void renderView(FacesContext ctx,
+                           UIViewRoot viewToRender)
+    throws IOException {
+
+        // suppress rendering if "rendered" property on the component is
+        // false
+        if (!viewToRender.isRendered()) {
+            return;
+        }
+
+        // log request
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Rendering View: " + viewToRender.getViewId());
+        }
+
+        WriteBehindStateWriter stateWriter = null;
+        try {
+            // Only build the view if this view has not yet been built.
+            if (!Util.isViewPopulated(ctx, viewToRender)) {
+                ViewDeclarationLanguage vdl = vdlFactory.getViewDeclarationLanguage(viewToRender.getViewId());
+                vdl.buildView(ctx, viewToRender);
+            }
+
+            // setup writer and assign it to the ctx
+            ResponseWriter origWriter = ctx.getResponseWriter();
+            if (origWriter == null) {
+                origWriter = createResponseWriter(ctx);
+            }
+
+            ExternalContext extContext = ctx.getExternalContext();
+            
+            /*
+             * Make sure we have a session here if we are using server state
+             * saving. The WriteBehindStateWriter needs an active session when
+             * it writes out state to a server session.
+             * 
+             * Note if you flag a view as transient then we won't acquire the
+             * session as you are stating it does not need one.
+             */
+            if (isServerStateSaving() && !viewToRender.isTransient()) {
+                getSession(ctx);
+            }            
+            
+            Writer outputWriter = extContext.getResponseOutputWriter();
+            stateWriter = new WriteBehindStateWriter(outputWriter,
+                                                     ctx,
+                                                     responseBufferSize);
+
+            ResponseWriter writer = origWriter.cloneWithWriter(stateWriter);
+            ctx.setResponseWriter(writer);
+
+            //  Don't call startDoc and endDoc on a partial response
+            if (ctx.getPartialViewContext().isPartialRequest()) {
+                viewToRender.encodeAll(ctx);
+                try {
+                    ctx.getExternalContext().getFlash().doPostPhaseActions(ctx);
+                } catch (UnsupportedOperationException uoe) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
+                    }
+                }
+            } else {
+                if (ctx.isProjectStage(ProjectStage.Development)) {
+                    FormOmittedChecker.check(ctx);
+                }
+                
+                // render the view to the response
+                String XMLDECL = Util.getXMLDECLFromFacesContextAttributes(ctx);
+                if (null != XMLDECL) {
+                    // Do not escape.
+                    writer.writePreamble(XMLDECL);
+                }
+
+                String DOCTYPE = Util.getDOCTYPEFromFacesContextAttributes(ctx);
+                if (null != DOCTYPE) {
+                    // Do not escape.
+                    writer.writeDoctype(DOCTYPE);
+                }
+                writer.startDocument();
+                viewToRender.encodeAll(ctx);
+                try {
+                    ctx.getExternalContext().getFlash().doPostPhaseActions(ctx);
+                } catch (UnsupportedOperationException uoe) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
+                    }
+                }
+                writer.endDocument();
+            }
+            // finish writing
+            writer.close();
+
+
+            boolean writtenState = stateWriter.stateWritten();
+            // flush to origWriter
+            if (writtenState) {
+                stateWriter.flushToWriter();
+            }
+
+        } catch (FileNotFoundException fnfe) {
+            this.handleFaceletNotFound(ctx,
+                                       viewToRender.getViewId(),
+                                       fnfe.getMessage());
+        } catch (Exception e) {
+            this.handleRenderException(ctx, e);
+        } finally {
+            if (stateWriter != null)
+                stateWriter.release();
+        }
+
+    }
+
+    /**
+     * Are we saving state server side?
+     * 
+     * @return true if we are, false otherwise.
+     */
+    private boolean isServerStateSaving() {
+        boolean result = false;
+        String stateMode = webConfig.getOptionValue(StateSavingMethod);
+        if (StateManager.STATE_SAVING_METHOD_SERVER.equals(stateMode)) {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * Get a session (if we are using server state saving).
+     * 
+     * @param context the Faces context.
+     * @return the session, or null if we are not using server state saving.
+     */
+    private HttpSession getSession(FacesContext context) {
+        HttpSession result = null;
+        Object sessionObj = context.getExternalContext().getSession(true);
+        if (sessionObj instanceof HttpSession) {
+            result = (HttpSession) sessionObj;
+        }
+        return result;
+    }
+    
+    /**
+     * <p>
+     * If {@link UIDebug#debugRequest(javax.faces.context.FacesContext)}} is <code>true</code>,
+     * simply return a new UIViewRoot(), otherwise, call the default logic.
+     * </p>
+     * @see ViewDeclarationLanguage#restoreView(javax.faces.context.FacesContext, java.lang.String) 
+     */
+    @Override
+    public UIViewRoot restoreView(FacesContext context,
+                                  String viewId) {
+        Util.notNull("context", context);
+        Util.notNull("viewId", viewId);
+
+        if (UIDebug.debugRequest(context)) {
+            context.getApplication().createComponent(UIViewRoot.COMPONENT_TYPE);
+        }
+                        
+        UIViewRoot viewRoot;
+        
+        /*
+         * Check if we are stateless.
+         */
+        ViewHandler outerViewHandler = context.getApplication().getViewHandler();
+        String renderKitId = outerViewHandler.calculateRenderKitId(context);
+        ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
+                
+        if (rsm.isStateless(context, viewId))  {
+            try {
+                ViewDeclarationLanguage vdl = vdlFactory.getViewDeclarationLanguage(viewId);
+                viewRoot = vdl.createView(context, viewId);
+                context.setViewRoot(viewRoot);
+                vdl.buildView(context, viewRoot);
+                return viewRoot;
+            } catch (IOException ioe) {
+                throw new FacesException(ioe);
+            }
+        }
+        
+        if (StateContext.getStateContext(context).isPartialStateSaving(context, viewId)) {
+            try {
+                context.setProcessingEvents(false);
+                ViewDeclarationLanguage vdl = vdlFactory.getViewDeclarationLanguage(viewId);
+                viewRoot = vdl.getViewMetadata(context, viewId).createMetadataView(context);
+                context.setViewRoot(viewRoot);
+                outerViewHandler = context.getApplication().getViewHandler();
+                renderKitId = outerViewHandler.calculateRenderKitId(context);
+                rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
+                Object[] rawState = (Object[]) rsm.getState(context, viewId);
+                if (rawState != null) {
+                    Map<String, Object> state = (Map<String, Object>) rawState[1];
+                    if (state != null) {
+                        String cid = viewRoot.getClientId(context);
+                        Object stateObj = state.get(cid);
+                        if (stateObj != null) {
+                            context.getAttributes().put("com.sun.faces.application.view.restoreViewScopeOnly", true);
+                            viewRoot.restoreState(context, stateObj);
+                            context.getAttributes().remove("com.sun.faces.application.view.restoreViewScopeOnly");
+                        }
+                    }
+                }
+                context.setProcessingEvents(true);
+                vdl.buildView(context, viewRoot);
+            } catch (IOException ioe) {
+                throw new FacesException(ioe);
+            }
+        }
+
+        UIViewRoot root = super.restoreView(context, viewId);
+        
+        ViewHandler viewHandler = context.getApplication().getViewHandler();
+        ViewDeclarationLanguage vdl = viewHandler.getViewDeclarationLanguage(context, viewId);
+        context.setResourceLibraryContracts(vdl.calculateResourceLibraryContracts(context, viewId));       
+        
+        StateContext stateCtx = StateContext.getStateContext(context);
+        stateCtx.startTrackViewModifications(context, root);
+        
+        return root;
+    }
+
+
+    /**
+     * @see ViewHandlingStrategy#retargetAttachedObjects(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.util.List)
+     */
+    @SuppressWarnings({"unchecked"})
+    @Override
+    public void retargetAttachedObjects(FacesContext context,
+                                        UIComponent topLevelComponent,
+                                        List<AttachedObjectHandler> handlers) {
+        Util.notNull("context", context);
+        Util.notNull("topLevelComponent", topLevelComponent);
+        Util.notNull("handlers", handlers);
+
+        //List<AttachedObjectHandler> handlers =
+        //      getAttachedObjectHandlers(topLevelComponent, false);
+
+        if (handlers == null || handlers.isEmpty()) {
+            return;
+        }
+        
+        BeanInfo componentBeanInfo = (BeanInfo) 
+                topLevelComponent.getAttributes().get(UIComponent.BEANINFO_KEY);
+        // PENDING(edburns): log error message if componentBeanInfo is null;
+        if (null == componentBeanInfo) {
+            return;
+        }
+        BeanDescriptor componentDescriptor = componentBeanInfo.getBeanDescriptor();
+        // There is an entry in targetList for each attached object in the 
+        // <composite:interface> section of the composite component.
+        List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
+                componentDescriptor.getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
+        // Each entry in targetList will vend one or more UIComponent instances
+        // that is to serve as the target of an attached object in the consuming
+        // page.
+        List<UIComponent> targetComponents;
+        String forAttributeValue, curTargetName;
+
+        // For each of the attached object handlers...
+        for (AttachedObjectHandler curHandler : handlers) {
+            // Get the name given to this attached object by the page author
+            // in the consuming page.
+            forAttributeValue = curHandler.getFor();
+            // For each of the attached objects in the <composite:interface> section
+            // of this composite component...
+            for (AttachedObjectTarget curTarget : targetList) {
+                // Get the name given to this attached object target by the
+                // composite component author
+                curTargetName = curTarget.getName();
+                targetComponents = curTarget.getTargets(topLevelComponent);
+
+                if (curHandler instanceof ActionSource2AttachedObjectHandler &&
+                    curTarget instanceof ActionSource2AttachedObjectTarget) {
+                    if (forAttributeValue.equals(curTargetName)) {
+                        for (UIComponent curTargetComponent : targetComponents) {
+                            retargetHandler(context, curHandler, curTargetComponent);
+                        }
+                        break;
+                    }
+                }
+                else if (curHandler instanceof EditableValueHolderAttachedObjectHandler &&
+                         curTarget instanceof EditableValueHolderAttachedObjectTarget) {
+                    if (forAttributeValue.equals(curTargetName)) {
+                        for (UIComponent curTargetComponent : targetComponents) {
+                            retargetHandler(context, curHandler, curTargetComponent);
+                        }
+                        break;
+                    }
+                }
+                else if (curHandler instanceof ValueHolderAttachedObjectHandler &&
+                         curTarget instanceof ValueHolderAttachedObjectTarget) {
+                    if (forAttributeValue.equals(curTargetName)) {
+                        for (UIComponent curTargetComponent : targetComponents) {
+                            retargetHandler(context, curHandler, curTargetComponent);
+                        }
+                        break;
+                    }
+                } else if(curHandler instanceof BehaviorHolderAttachedObjectHandler && 
+                        curTarget instanceof BehaviorHolderAttachedObjectTarget) {
+                    BehaviorHolderAttachedObjectHandler behaviorHandler = (BehaviorHolderAttachedObjectHandler) curHandler;
+                    BehaviorHolderAttachedObjectTarget behaviorTarget = (BehaviorHolderAttachedObjectTarget) curTarget;
+                    String eventName = behaviorHandler.getEventName();
+                    if((null !=eventName && eventName.equals(curTargetName))||(null ==eventName && behaviorTarget.isDefaultEvent())){
+                        for (UIComponent curTargetComponent : targetComponents) {
+                            retargetHandler(context, curHandler, curTargetComponent);
+                        }
+                    }
+                }
+
+
+            }
+        }
+    }
+
+
+    /**
+     * @see ViewHandlingStrategy#retargetMethodExpressions(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
+     */
+    @Override
+    public void retargetMethodExpressions(FacesContext context,
+                                          UIComponent topLevelComponent) {
+        Util.notNull("context", context);
+        Util.notNull("topLevelComponent", topLevelComponent);
+
+        BeanInfo componentBeanInfo = (BeanInfo) 
+                topLevelComponent.getAttributes().get(UIComponent.BEANINFO_KEY);
+        // PENDING(edburns): log error message if componentBeanInfo is null;
+        if (null == componentBeanInfo) {
+            return;
+        }
+
+        PropertyDescriptor attributes[] = componentBeanInfo.getPropertyDescriptors();
+
+        MethodMetadataIterator allMetadata = new MethodMetadataIterator(context, attributes);
+        for (CompCompInterfaceMethodMetadata metadata : allMetadata) {
+
+            String attrName = metadata.getName();
+            String[] targets = metadata.getTargets(context);
+
+            Object attrValue = topLevelComponent.getValueExpression(attrName);
+
+            // In all cases but one, the attrValue will be a ValueExpression.
+            // The only case when it will not be a ValueExpression is
+            // the case when the attrName is an action, and even then, it'll be a
+            // ValueExpression in all cases except when it's a literal string.
+            if (null == attrValue) {
+                Map<String, Object> attrs = topLevelComponent.getAttributes();
+                attrValue = (attrs.containsKey(attrName)) ?
+                    attrs.get(attrName) : metadata.getDefault();
+                if (attrValue == null) {
+                    if (metadata.isRequired(context)) {
+                        Object location = attrs.get(UIComponent.VIEW_LOCATION_KEY);
+                        if (location == null) {
+                            location = "";
+                        }
+                        throw new FacesException(
+                              // RELEASE_PENDING need a better message
+                              location.toString()
+                              + ": Unable to find attribute with name \""
+                              + attrName
+                              + "\" in top level component in consuming page, "
+                              + " or with default value in composite component.  "
+                              + "Page author or composite component author error.");
+                    } else {
+                        continue;
+                    }
+                }
+            }
+
+            String targetAttributeName = metadata.getTargetAttributeName(context);
+            UIComponent targetComp = null;
+            if (null != targetAttributeName) {
+                attrName = targetAttributeName;
+            }
+            if (targets != null) {
+                MethodRetargetHandler handler = retargetHandlerManager.getRetargetHandler(attrName);
+                if (handler != null) {
+                    for (String curTarget : targets) {
+                        targetComp = topLevelComponent.findComponent(curTarget);
+                        if (null == targetComp) {
+                            throw new FacesException(attrValue.toString()
+                                                     + " : Unable to re-target MethodExpression as inner component referenced by target id '"
+                                                     + curTarget
+                                                     + "' cannot be found.");
+                        }
+                        handler.retarget(context,
+                                         metadata,
+                                         attrValue,
+                                         targetComp);
+                    }
+                } else {
+                    // the developer has specified a target for a MethodExpression
+                    // but the attribute name doesn't match one action, actionListener,
+                    // validator, or valueChangeListener.  We can ignore the
+                    // target(s) in this case
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.compcomp.unecessary.targets.attribute",
+                                   new Object[] { getCompositeComponentName(topLevelComponent),
+                                                  attrName });
+                    }
+                    handler = retargetHandlerManager.getDefaultHandler();
+                    handler.retarget(context, metadata, attrValue, topLevelComponent);
+                }
+            } else {
+                MethodRetargetHandler handler = null;
+                if (null != targetAttributeName) {
+                    targetComp = topLevelComponent.findComponent(metadata.getName());
+                    handler = retargetHandlerManager.getRetargetHandler(attrName);
+                }
+                if (null == handler) {
+                    targetComp = topLevelComponent;
+                    handler = retargetHandlerManager.getDefaultHandler();
+                }
+                handler.retarget(context, metadata, attrValue, targetComp);
+            }
+
+            // clear out the ValueExpression that we've retargeted as a
+            // MethodExpression
+            topLevelComponent.setValueExpression(attrName, null);
+
+        }
+
+    }
+
+
+    /**
+     * @see ViewDeclarationLanguage#createView(javax.faces.context.FacesContext, java.lang.String)
+     */
+    @Override
+    public UIViewRoot createView(FacesContext ctx,
+                                 String viewId) {
+        Util.notNull("context", ctx);
+        Util.notNull("viewId", viewId);
+
+        if (UIDebug.debugRequest(ctx)) {
+            UIViewRoot root = (UIViewRoot)
+                  ctx.getApplication().createComponent(UIViewRoot.COMPONENT_TYPE);
+            root.setViewId(viewId);
+            return root;
+        }
+
+        UIViewRoot result = super.createView(ctx, viewId);
+        ViewHandler viewHandler = ctx.getApplication().getViewHandler();
+        ViewDeclarationLanguage vdl = viewHandler.getViewDeclarationLanguage(ctx, viewId);
+
+        ctx.setResourceLibraryContracts(vdl.calculateResourceLibraryContracts(ctx, viewId));
+        
+        return result;
+        
+    }
+
+    @Override
+    public UIComponent createComponent(FacesContext context, String taglibURI, String tagName, Map<String, Object> attributes) {
+        Util.notNull("context", context);
+        Util.notNull("taglibURI", taglibURI);
+        Util.notNull("tagName", tagName);
+        UIComponent result = null;
+        
+        DefaultFaceletFactory ff = associate.getFaceletFactory();
+        result = ff._createComponent(context, taglibURI, tagName, attributes);
+                
+        return result;
+    }
+    
+    @Override
+    public List<String> calculateResourceLibraryContracts(FacesContext context, String viewId) {
+        List<String> result = null;
+        String longestPattern = null;
+        if (null == contractMappings) {
+            return Collections.emptyList();
+        }
+        
+        String longestMatch = null;
+        for (Map.Entry<String, List<String>> mappings : contractMappings.entrySet()) {
+            String urlPattern = mappings.getKey();
+            if (urlPattern.endsWith("*")) { 
+                String prefix = urlPattern.substring(0, urlPattern.length() - 1);
+                if (viewId.startsWith(prefix)) {
+                    if (longestPattern == null) {
+                        longestPattern = urlPattern;
+                        longestMatch = prefix;
+                    } else if (longestMatch.length() < prefix.length()) {
+                        longestPattern = urlPattern;
+                        longestMatch = prefix;
+                    }
+                }
+            } else if (viewId.equals(urlPattern)) {
+                longestPattern = urlPattern;
+                break;
+            }
+        }
+        
+        if (longestPattern != null) {
+            result = contractMappings.get(longestPattern);
+        }
+        
+        if (result == null) {
+            result = contractMappings.get("*");
+        }
+        
+        return result;
+    }
+    
+
+    // --------------------------------------- Methods from ViewHandlingStrategy
+
+
+    /**
+     * @param viewId the view ID to check
+     * @return <code>true</code> if assuming a default configuration and the
+     *  view ID's extension is <code>.xhtml</code>  Otherwise try to match
+     *  the view ID based on the configured extendsion and prefixes.
+     *
+     * @see com.sun.faces.config.WebConfiguration.WebContextInitParameter#FaceletsViewMappings
+     */
+    @Override
+    public boolean handlesViewId(String viewId) {
+         if (viewId != null) {
+             
+             if (viewId.endsWith(RIConstants.FLOW_DEFINITION_ID_SUFFIX)) {
+                 return true;
+             }
+             
+            // If there's no extensions array or prefixes array, then
+            // assume defaults.  .xhtml extension is handled by
+            // the FaceletViewHandler and .jsp will be handled by
+            // the JSP view handler
+            if ((extensionsArray == null) && (prefixesArray == null)) {
+                return (viewId.endsWith(ViewHandler.DEFAULT_FACELETS_SUFFIX));
+            }
+
+            if (extensionsArray != null) {
+                for (String extension : extensionsArray) {
+                    if (viewId.endsWith(extension)) {
+                        return true;
+                    }
+                }
+            }
+
+            if (prefixesArray != null) {
+                for (String prefix : prefixesArray) {
+                    if (viewId.startsWith(prefix)) {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Mark the initial state if not already marked.
+     */
+    private void markInitialStateIfNotMarked(UIComponent component) {
+        if (!component.isTransient()) {
+            if (!component.getAttributes().containsKey(RIConstants.DYNAMIC_COMPONENT) && !component.initialStateMarked()) {
+                component.markInitialState();
+            }
+            for (Iterator<UIComponent> it = component.getFacetsAndChildren() ; it.hasNext() ; ) {
+                UIComponent child = it.next();
+                markInitialStateIfNotMarked(child);
+            }
+        }
+    }
+
+    /**
+     * Build the view.
+     * @param ctx the {@link FacesContext} for the current request
+     * @param view the {@link UIViewRoot} to populate based
+     *  of the Facelet template
+     * @throws IOException if an error occurs building the view.
+     */
+    @Override
+    public void buildView(FacesContext ctx, UIViewRoot view)
+    throws IOException {
+        StateContext stateCtx = StateContext.getStateContext(ctx);
+        if (Util.isViewPopulated(ctx, view)) {
+            Facelet f = faceletFactory.getFacelet(ctx, view.getViewId());
+            // Disable events from being intercepted by the StateContext by
+            // virute of re-applying the handlers. 
+            try {
+                stateCtx.setTrackViewModifications(false);
+                f.apply(ctx, view);
+                reapplyDynamicActions(ctx);
+                if (stateCtx.isPartialStateSaving(ctx, view.getViewId())) {
+                    markInitialStateIfNotMarked(view);
+                }
+            } finally {
+                stateCtx.setTrackViewModifications(true);
+            }
+            return;
+        }
+
+        view.setViewId(view.getViewId());
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Building View: " + view.getViewId());
+        }
+        if (faceletFactory == null) {
+            ApplicationAssociate associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
+            faceletFactory = associate.getFaceletFactory();
+            assert (faceletFactory != null);
+        }
+        RequestStateManager.set(ctx,
+                                RequestStateManager.FACELET_FACTORY,
+                                faceletFactory);
+        Facelet f = faceletFactory.getFacelet(ctx, view.getViewId());
+
+        // populate UIViewRoot
+        try {
+            ctx.getAttributes().put(IS_BUILDING_INITIAL_STATE, Boolean.TRUE);
+            stateCtx.setTrackViewModifications(false);
+            f.apply(ctx, view);
+            
+            if (f instanceof XMLFrontMatterSaver) {
+                XMLFrontMatterSaver frontMatterSaver = (XMLFrontMatterSaver) f;
+                String DOCTYPE = frontMatterSaver.getSavedDoctype();
+                if (null != DOCTYPE) {
+                    Util.saveDOCTYPEToFacesContextAttributes(DOCTYPE);
+                }
+                String XMLDECL = frontMatterSaver.getSavedXMLDecl();
+                if (null != XMLDECL) {
+                    Util.saveXMLDECLToFacesContextAttributes(XMLDECL);
+                }
+            }
+            
+            if (!stateCtx.isPartialStateSaving(ctx, view.getViewId())) {
+                reapplyDynamicActions(ctx);
+            }
+            
+            doPostBuildActions(ctx, view);
+        } finally {
+            ctx.getAttributes().remove(IS_BUILDING_INITIAL_STATE);
+        }
+        ctx.getApplication().publishEvent(ctx,
+                                          PostAddToViewEvent.class,
+                                          UIViewRoot.class,
+                                          view);
+        markInitialState(ctx, view);
+        
+        Util.setViewPopulated(ctx, view);
+
+    }
+
+    @Override
+    public boolean viewExists(FacesContext context, 
+                              String viewId) {
+        boolean result = false;
+        if (handlesViewId(viewId)) {
+            if (faceletFactory == null) {
+                faceletFactory = associate.getFaceletFactory();
+                assert (faceletFactory != null);
+            }
+            result = null != faceletFactory.getResourceResolver().resolveUrl(viewId);
+        }
+           
+        return result;
+        }
+
+    @Override 
+    public String getId() {
+        return FACELETS_VIEW_DECLARATION_LANGUAGE_ID;
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * Initialize the core Facelets runtime.
+     */
+    protected void initialize() {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Initializing FaceletViewHandlingStrategy");
+        }
+
+        this.initializeMappings();
+
+        groovyAvailable = GroovyHelper.isGroovyAvailable(FacesContext.getCurrentInstance());
+
+        metadataCache = new Cache<Resource, BeanInfo>(new Factory<Resource, BeanInfo>() {
+
+            public BeanInfo newInstance(Resource ccResource) throws InterruptedException {
+                FacesContext context = FacesContext.getCurrentInstance();
+                return FaceletViewHandlingStrategy.this.createComponentMetadata(context, ccResource);
+            }
+        });
+
+        try {
+            responseBufferSizeSet = webConfig.isSet(FaceletsBufferSize);
+            responseBufferSize =
+                  Integer.parseInt(webConfig.getOptionValue(FaceletsBufferSize));
+        } catch (NumberFormatException nfe) {
+            responseBufferSize = Integer.parseInt(FaceletsBufferSize.getDefaultValue());
+        }
+
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Initialization Successful");
+        }
+
+        vdlFactory = (ViewDeclarationLanguageFactory) FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        ExternalContext extContext = context.getExternalContext();
+        Map<String, Object> appMap = extContext.getApplicationMap();
+        Map<String, List<String>> contractDataStructure = 
+                (Map<String, List<String>>) 
+                appMap.remove(RESOURCE_LIBRARY_CONTRACT_DATA_STRUCTURE_KEY);
+        if (null != contractDataStructure && !contractDataStructure.isEmpty()) {
+            contractMappings = new ConcurrentHashMap<String, List<String>>();
+            for (Map.Entry<String, List<String>> cur : contractDataStructure.entrySet()) {
+                contractMappings.put(cur.getKey(), new CopyOnWriteArrayList<String>(cur.getValue()));
+                cur.getValue().clear();
+            }
+            contractDataStructure.clear();
+        }
+        if (null != context) {
+            StateManager stateManager = Util.getStateManager(context);
+            if (null != stateManager) {
+                isTrinidadStateManager = stateManager.getClass().getName().contains("trinidad");
+            }
+        }        
+    }
+
+
+    /**
+     * Initialize mappings, during the first request.
+     */
+    protected void initializeMappings() {
+
+        String viewMappings = webConfig.getOptionValue(FaceletsViewMappings);
+        if ((viewMappings != null) && (viewMappings.length() > 0)) {
+            Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+
+            String[] mappingsArray = Util.split(appMap, viewMappings, ";");
+
+            List<String> extensionsList = new ArrayList<String>(mappingsArray.length);
+            List<String> prefixesList = new ArrayList<String>(mappingsArray.length);
+
+            for (String aMappingsArray : mappingsArray) {
+                String mapping = aMappingsArray.trim();
+                int mappingLength = mapping.length();
+                if (mappingLength <= 1) {
+                    continue;
+                }
+
+                if (mapping.charAt(0) == '*') {
+                    extensionsList.add(mapping.substring(1));
+                } else if (mapping.charAt(mappingLength - 1) == '*') {
+                    prefixesList.add(mapping.substring(0, mappingLength - 1));
+                }
+            }
+
+            extensionsArray = new String[extensionsList.size()];
+            extensionsList.toArray(extensionsArray);
+
+            prefixesArray = new String[prefixesList.size()];
+            prefixesList.toArray(prefixesArray);
+        }
+    }
+
+
+    /**
+     * @param context the {@link FacesContext} for the current request
+     * @return a {@link ResponseWriter} for processing the request
+     * @throws IOException if the writer cannot be created
+     */
+    protected ResponseWriter createResponseWriter(FacesContext context)
+    throws IOException {
+
+        ExternalContext extContext = context.getExternalContext();
+        RenderKit renderKit = context.getRenderKit();
+        // Avoid a cryptic NullPointerException when the renderkit ID
+        // is incorrectly set
+        if (renderKit == null) {
+            String id = context.getViewRoot().getRenderKitId();
+            throw new IllegalStateException(
+                  "No render kit was available for id \"" + id + "\"");
+        }
+
+        if (responseBufferSizeSet) {
+            // set the buffer for content
+            extContext.setResponseBufferSize(responseBufferSize);
+        }
+
+
+        // get our content type
+        String contentType =
+              (String) context.getAttributes().get("facelets.ContentType");
+
+        // get the encoding
+        String encoding =
+              (String) context.getAttributes().get(RIConstants.FACELETS_ENCODING_KEY);
+
+        // Create a dummy ResponseWriter with a bogus writer,
+        // so we can figure out what content type the ReponseWriter
+        // is really going to ask for
+        ResponseWriter writer = renderKit.createResponseWriter(NullWriter.Instance,
+                                                               contentType,
+                                                               encoding);
+
+        contentType = getResponseContentType(context, writer.getContentType());
+        encoding = getResponseEncoding(context, writer.getCharacterEncoding());
+
+        // apply them to the response
+        char[] buffer = new char[1028];
+        HtmlUtils.writeTextForXML(writer, contentType, buffer);
+        String str = String.valueOf(buffer).trim();
+        extContext.setResponseContentType(str);
+        extContext.setResponseCharacterEncoding(encoding);
+
+        // Now, clone with the real writer
+        writer = writer.cloneWithWriter(extContext.getResponseOutputWriter());
+
+        return writer;
+
+    }
+
+
+    /**
+     * Handles the case where rendering throws an Exception.
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @param e the caught Exception
+     * @throws IOException if the custom debug content cannot be written
+     */
+    protected void handleRenderException(FacesContext context, Exception e)
+    throws IOException {
+
+        // always log
+        if (LOGGER.isLoggable(Level.SEVERE)) {
+            UIViewRoot root = context.getViewRoot();
+            StringBuffer sb = new StringBuffer(64);
+            sb.append("Error Rendering View");
+            if (root != null) {
+                sb.append('[');
+                sb.append(root.getViewId());
+                sb.append(']');
+            }
+            LOGGER.log(Level.SEVERE, sb.toString(), e);
+        }
+
+        if (e instanceof RuntimeException) {
+            throw (RuntimeException) e;
+        } else if (e instanceof IOException) {
+            throw (IOException) e;
+        } else {
+            throw new FacesException(e.getMessage(), e);
+        }
+
+    }
+
+
+    /**
+     * Handles the case where a Facelet cannot be found.
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @param viewId the view ID that was to be mapped to a Facelet
+     * @param message optional message to include in the 404
+     * @throws IOException if an error occurs sending the 404 to the client
+     */
+    protected void handleFaceletNotFound(FacesContext context,
+                                         String viewId,
+                                         String message)
+    throws IOException {
+
+        context.getExternalContext().responseSendError(HttpServletResponse.SC_NOT_FOUND,  ((message != null)
+                                                                  ? (viewId + ": " + message)
+                                                                  : viewId));
+        context.responseComplete();
+
+    }
+
+
+    /**
+     * @param context the {@link FacesContext} for the current request
+     * @param orig the original encoding
+     * @return the encoding to be used for this response
+     */
+    protected String getResponseEncoding(FacesContext context, String orig) {
+
+        String encoding = orig;
+
+
+        // 1. get it from request
+        encoding = context.getExternalContext().getRequestCharacterEncoding();
+
+        // 2. get it from the session
+        if (encoding == null) {
+            if (null != context.getExternalContext().getSession(false)) {
+                Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
+                encoding = (String) sessionMap.get(ViewHandler.CHARACTER_ENCODING_KEY);
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST,
+                            "Session specified alternate encoding {0}",
+                            encoding);
+                }
+            }
+        }
+
+        // see if we need to override the encoding
+        Map<Object,Object> ctxAttributes = context.getAttributes();
+
+
+        // 3. check the request attribute
+        if (ctxAttributes.containsKey(RIConstants.FACELETS_ENCODING_KEY)) {
+            encoding = (String) ctxAttributes.get(RIConstants.FACELETS_ENCODING_KEY);
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST,
+                           "Facelet specified alternate encoding {0}",
+                           encoding);
+            }
+            if (null != context.getExternalContext().getSession(false)) {
+                Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
+                sessionMap.put(ViewHandler.CHARACTER_ENCODING_KEY, encoding);
+            }
+        }
+
+        // 4. default it
+        if (encoding == null) {
+            if (null != orig && 0 < orig.length()) {
+                encoding = orig;
+            } else {
+                encoding = "UTF-8";
+            }
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "ResponseWriter created had a null CharacterEncoding, defaulting to {0}", orig);
+            }
+        }
+
+        return encoding;
+
+    }
+
+
+    /**
+     * @param context the {@link FacesContext} for the current request
+     * @param orig the original contentType
+     * @return the content type to be used for this response
+     */
+    protected String getResponseContentType(FacesContext context, String orig) {
+
+        String contentType = orig;
+
+        // see if we need to override the contentType
+        Map<Object,Object> m = context.getAttributes();
+        if (m.containsKey("facelets.ContentType")) {
+            contentType = (String) m.get("facelets.ContentType");
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.finest("Facelet specified alternate contentType '"
+                        + contentType + "'");
+            }
+        }
+
+        // safety check
+        if (contentType == null) {
+            contentType = "text/html";
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.finest("ResponseWriter created had a null ContentType, defaulting to text/html");
+            }
+        }
+
+        return contentType;
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    private String getCompositeComponentName(UIComponent compositeComponent) {
+
+        Resource resource =
+              (Resource) compositeComponent.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
+        String name = resource.getResourceName();
+        String library = resource.getLibraryName();
+
+        if (library != null) {
+            return "Composite Component: " + name + ", library: " + library;
+        } else {
+            return "Composite Component: " + name;
+        }
+
+    }
+
+     
+    private void doPostBuildActions(FacesContext ctx, UIViewRoot root) {
+        StateContext stateCtx = StateContext.getStateContext(ctx);
+//        if (stateCtx.isPartialStateSaving(ctx, root.getViewId())) {
+	    // lu4242            root.markInitialState();
+  //      }
+        stateCtx.startTrackViewModifications(ctx, root);
+    }
+
+     private void markInitialState(FacesContext ctx, UIViewRoot root)
+     {
+         StateContext stateCtx = StateContext.getStateContext(ctx);
+         if (stateCtx.isPartialStateSaving(ctx, root.getViewId())) {
+             try {
+                 ctx.getAttributes().put(IS_BUILDING_INITIAL_STATE, Boolean.TRUE);
+                 if (!root.isTransient()) {
+                     markInitialState(root);
+                 }
+             } finally {
+                 ctx.getAttributes().remove(IS_BUILDING_INITIAL_STATE);
+             }
+         }
+     }
+     
+     private void markInitialState(final UIComponent component)
+     {
+         component.markInitialState();
+         for (Iterator<UIComponent> it = component.getFacetsAndChildren() ; it.hasNext() ; ) {
+             UIComponent child = it.next();
+             if (!child.isTransient()) {
+                 markInitialState(child);
+             }
+         }
+     }    
+
+
+    private void retargetHandler(FacesContext context,
+                                 AttachedObjectHandler handler,
+                                 UIComponent targetComponent) {
+
+        if (UIComponent.isCompositeComponent(targetComponent)) {
+            // RELEASE_PENDING Not keen on calling CompositeComponentTagHandler here....
+            List<AttachedObjectHandler> nHandlers =
+                  CompositeComponentTagHandler
+                        .getAttachedObjectHandlers(targetComponent);
+            nHandlers.add(handler);
+            retargetAttachedObjects(context, targetComponent, nHandlers);
+        } else {
+            handler.applyAttachedObject(context, targetComponent);
+        }
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Provides iteration services over a composite component's
+     * MethodExpression-enabled <code>PropertyDescriptors</code>.
+     */
+    private static final class MethodMetadataIterator implements Iterable<CompCompInterfaceMethodMetadata>, Iterator<CompCompInterfaceMethodMetadata> {
+
+        private final PropertyDescriptor[] descriptors;
+        private FacesContext context;
+        private int curIndex = -1;
+
+        // -------------------------------------------------------- Constructors
+
+
+        MethodMetadataIterator(FacesContext context, PropertyDescriptor[] descriptors) {
+
+            this.context = context;
+            this.descriptors = descriptors;
+            if (descriptors != null && descriptors.length > 0) {
+                curIndex = 0;
+            }
+
+        }
+
+
+        // ----------------------------------------------- Methods from Iterable
+
+
+        public Iterator<CompCompInterfaceMethodMetadata> iterator() {
+            return this;
+        }
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            if (curIndex != -1 && curIndex < descriptors.length) {
+                int idx = curIndex;
+
+                while (idx < descriptors.length) {
+                    PropertyDescriptor pd = descriptors[idx];
+                    if (shouldSkip(pd)) {
+                        // this is a ValueExpression-enabled attribute and
+                        // should be ignored.
+                        idx++;
+                    } else {
+                        if (idx != curIndex) {
+                            // the PD that was found to be returned by the
+                            // next() call has a different offset from the
+                            // current index; update the current index.
+                            curIndex = idx;
+                        }
+                        return (curIndex < descriptors.length);
+                    }
+                }
+            }
+            return false;
+
+        }
+
+        public CompCompInterfaceMethodMetadata next() {
+
+
+            return new CompCompInterfaceMethodMetadata(descriptors[curIndex++]);
+
+        }
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+
+        }
+
+        private boolean shouldSkip(PropertyDescriptor pd) {
+            boolean result;
+            String name = pd.getName();
+            ValueExpression ve = (ValueExpression) pd.getValue("targetAttributeName");
+            String targetAttributeName = ((ve != null) ? (String) ve.getValue(context.getELContext()) : "");
+
+            boolean isSpecialAttributeName = Util.isSpecialAttributeName(name) ||
+                    Util.isSpecialAttributeName(targetAttributeName);
+            result = (!isSpecialAttributeName &&
+                     (pd.getValue("type") != null ||
+                      pd.getValue("method-signature") == null));
+
+            return result;
+        }
+
+    } // END MethodMetadataIterator
+
+
+    /**
+     * Utility class to encapsulate the ValueExpression evaluation of the various
+     * MethodExpression composite component properties.
+     */
+    private static final class CompCompInterfaceMethodMetadata {
+
+        private final PropertyDescriptor pd;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        CompCompInterfaceMethodMetadata(PropertyDescriptor pd) {
+
+            this.pd = pd;
+
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        /**
+         * @param ctx the <code>FacesContext</code> for the current request
+         * @return the <code>method-signature</code> for this attribute
+         */
+        public String getMethodSignature(FacesContext ctx) {
+
+            ValueExpression ms = (ValueExpression) pd.getValue("method-signature");
+            if (ms != null) {
+                return (String) ms.getValue(ctx.getELContext());
+            }
+            return null;
+
+        }
+
+
+        /**
+         * @param ctx the <code>FacesContext</code> for the current request
+         * @return an array of component targets to which a MethodExpression
+         *  should be retargeted
+         */
+        public String[] getTargets(FacesContext ctx) {
+
+            ValueExpression ts = (ValueExpression) pd.getValue("targets");
+            if (ts != null) {
+                String targets = (String) ts.getValue(ctx.getELContext());
+                if (targets != null) {
+                    return Util.split(ctx.getExternalContext().getApplicationMap(), targets, " ");
+                }
+            }
+
+            return null;
+
+        }
+
+        public String getTargetAttributeName(FacesContext ctx) {
+            ValueExpression ve = (ValueExpression) pd.getValue("targetAttributeName");
+            return ((ve != null) ? (String) ve.getValue(ctx.getELContext()) : null);
+
+        }
+
+
+        /**
+         * @param ctx the <code>FacesContext</code> for the current request
+         * @return <code>true<code> if this attribute is required to be present,
+         *  otherwise, returns <code>false</code>
+         */
+        public boolean isRequired(FacesContext ctx) {
+
+            ValueExpression rd = (ValueExpression) pd.getValue("required");
+            return ((rd != null) ? Boolean.valueOf(rd.getValue(ctx.getELContext()).toString()) : false);
+
+        }
+
+
+        /**
+         * @return the default value as designated by the composite component
+         *  author if no attribute was specified by the composite component
+         *  consumer.  This value may be a ValueExpression, or a literal.
+         */
+        public Object getDefault() {
+
+            return pd.getValue("default");
+
+        }
+
+
+        /**
+         * @return the composite component attribute name
+         */
+        public String getName() {
+
+            return pd.getName();
+
+        }
+
+    } // END CompCompInterfaceMethodMetadata
+
+
+    /**
+     * Managed the <code>MethodRetargetHandler</code> implementations for the
+     * current <code>MethodExpression</code> enabled component attributes:
+     * <ul>
+     *    <li>action</li>
+     *    <li>actionListener</li>
+     *    <li>validator</li>
+     *    <li>valueChangeListener</li>
+     * </ul>
+     *
+     * Instances of this object also provide a default handler that can be
+     * used to re-target <code>MethodExperssions</code> that don't match
+     * on of the four names described above.
+     */
+    private static final class MethodRetargetHandlerManager {
+
+        private Map<String,MethodRetargetHandler> handlerMap =
+              new HashMap<String,MethodRetargetHandler>(4, 1.0f);
+        private MethodRetargetHandler arbitraryHandler = new ArbitraryMethodRegargetHandler();
+
+        // -------------------------------------------------------- Constructors
+
+
+        MethodRetargetHandlerManager() {
+
+            MethodRetargetHandler[] handlers = {
+                  new ActionRegargetHandler(),
+                  new ActionListenerRegargetHandler(),
+                  new ValidatorRegargetHandler(),
+                  new ValueChangeListenerRegargetHandler()
+            };
+            for (MethodRetargetHandler h : handlers) {
+                handlerMap.put(h.getAttribute(), h);
+            }
+
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        /**
+         * Lookup/return a <code>MethodRetargetHandler</code> appropriate to the
+         * provided attribute name
+         * @param attrName the attribute name
+         * @return a <code>MethodRetargetHandler</code> that can properly handle
+         *  retargeting expressions for the specified attribute, or </code>null</code>
+         *  if there is no handler available.
+         */
+        private MethodRetargetHandler getRetargetHandler(String attrName) {
+
+            return handlerMap.get(attrName);
+
+        }
+
+
+        /**
+         * @return a <code>MethodRetargetHandler</code> that can retarget
+         * arbitrarily named MethodExpressions.
+         */
+        private MethodRetargetHandler getDefaultHandler() {
+
+            return arbitraryHandler;
+
+        }
+
+
+        // ------------------------------------------------------ Nested Classes
+
+
+        /**
+         * Base MethodRetargetHandler implementation.
+         */
+        private static abstract class AbstractRetargetHandler implements MethodRetargetHandler {
+
+            protected static final Class[] NO_ARGS = new Class[0];
+
+
+        } // END AbstractRetargetHandler
+
+
+        /**
+         * This handler is responsible for creating/retargeting MethodExpressions defined
+         * associated with the <code>action</code> attribute
+         */
+        private static final class ActionRegargetHandler extends AbstractRetargetHandler {
+
+            private static final String ACTION = "action";
+
+
+            // ------------------------------ Methods from MethodRetargetHandler
+
+
+            public void retarget(FacesContext ctx,
+                                 CompCompInterfaceMethodMetadata metadata,
+                                 Object sourceValue,
+                                 UIComponent target) {
+
+                String expr = (sourceValue instanceof ValueExpression)
+                                 ? ((ValueExpression) sourceValue).getExpressionString()
+                                 : sourceValue.toString();
+                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
+                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
+                                                               expr,
+                                                               Object.class,
+                                                               NO_ARGS);
+                ((ActionSource2) target)
+                      .setActionExpression(
+                            new ContextualCompositeMethodExpression(((sourceValue instanceof ValueExpression)
+                                                                     ? (ValueExpression) sourceValue
+                                                                        : null),
+                                                                    me));
+
+            }
+
+
+            public String getAttribute() {
+
+                return ACTION;
+
+            }
+
+        } // END ActionRegargetHandler
+
+
+        /**
+         * This handler is responsible for creating/retargeting MethodExpressions defined
+         * associated with the <code>actionListener</code> attribute
+         */
+        private static final class ActionListenerRegargetHandler extends AbstractRetargetHandler {
+
+            private static final String ACTION_LISTENER = "actionListener";
+            private static final Class[] ACTION_LISTENER_ARGS = new Class[] { ActionEvent.class };
+
+
+            // ------------------------------ Methods from MethodRetargetHandler
+
+
+            public void retarget(FacesContext ctx,
+                                 CompCompInterfaceMethodMetadata metadata,
+                                 Object sourceValue,
+                                 UIComponent target) {
+
+                ValueExpression ve = (ValueExpression) sourceValue;
+                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
+                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
+                                                               ve.getExpressionString(),
+                                                               Void.TYPE,
+                                                               ACTION_LISTENER_ARGS);
+                MethodExpression noArg = f.createMethodExpression(ctx.getELContext(),
+                                                                  ve.getExpressionString(),
+                                                                  Void.TYPE,
+                                                                  NO_ARGS);
+
+                ((ActionSource2) target).addActionListener(
+                      new MethodExpressionActionListener(
+                            new ContextualCompositeMethodExpression(ve,
+                                                                    me),
+                            new ContextualCompositeMethodExpression(ve,
+                                                                    noArg)));
+
+            }
+
+
+            public String getAttribute() {
+
+                return ACTION_LISTENER;
+
+            }
+
+        } // END ActionListenerRegargetHandler
+
+
+        /**
+         * This handler is responsible for creating/retargeting MethodExpressions defined
+         * associated with the <code>validator</code> attribute
+         */
+        private static final class ValidatorRegargetHandler extends AbstractRetargetHandler {
+
+            private static final String VALIDATOR = "validator";
+            private static final Class[] VALIDATOR_ARGS = new Class[]{
+                  FacesContext.class,
+                  UIComponent.class,
+                  Object.class
+            };
+
+
+            // ------------------------------ Methods from MethodRetargetHandler
+
+
+            public void retarget(FacesContext ctx,
+                                 CompCompInterfaceMethodMetadata metadata,
+                                 Object sourceValue,
+                                 UIComponent target) {
+
+                ValueExpression ve = (ValueExpression) sourceValue;
+                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
+                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
+                                                               ve.getExpressionString(),
+                                                               Void.TYPE,
+                                                               VALIDATOR_ARGS);
+
+                ((EditableValueHolder) target).addValidator(
+                      new MethodExpressionValidator(
+                            new ContextualCompositeMethodExpression(ve,
+                                                                    me)));
+
+            }
+
+
+            public String getAttribute() {
+
+                return VALIDATOR;
+
+            }
+
+        } // END ValidatorRegargetHandler
+
+
+        /**
+         * This handler is responsible for creating/retargeting MethodExpressions defined
+         * associated with the <code>valueChangeListener</code> attribute
+         */
+        private static final class ValueChangeListenerRegargetHandler extends AbstractRetargetHandler {
+
+            private static final String VALUE_CHANGE_LISTENER = "valueChangeListener";
+            private static final Class[] VALUE_CHANGE_LISTENER_ARGS = new Class[]{
+                  ValueChangeEvent.class
+            };
+
+
+            // ------------------------------ Methods from MethodRetargetHandler
+
+
+            public void retarget(FacesContext ctx,
+                                 CompCompInterfaceMethodMetadata metadata,
+                                 Object sourceValue,
+                                 UIComponent target) {
+
+                ValueExpression ve = (ValueExpression) sourceValue;
+                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
+                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
+                                                               ve.getExpressionString(),
+                                                               Void.TYPE,
+                                                               VALUE_CHANGE_LISTENER_ARGS);
+                MethodExpression noArg = f.createMethodExpression(ctx.getELContext(),
+                                                                  ve.getExpressionString(),
+                                                                  Void.TYPE,
+                                                                  NO_ARGS);
+
+                ((EditableValueHolder) target).addValueChangeListener(
+                      new MethodExpressionValueChangeListener(
+                            new ContextualCompositeMethodExpression(ve,
+                                                                    me),
+                            new ContextualCompositeMethodExpression(ve,
+                                                                    noArg)));
+
+            }
+
+
+            public String getAttribute() {
+                return VALUE_CHANGE_LISTENER;
+            }
+
+        } // END ValueChangeListenerRegargetHandler
+
+
+        /**
+         * This handler is responsible for creating/retargeting MethodExpressions defined
+         * using arbitrary attribute names.
+         */
+        private static final class ArbitraryMethodRegargetHandler extends AbstractRetargetHandler {
+
+
+            // ------------------------------ Methods from MethodRetargetHandler
+
+
+            public void retarget(FacesContext ctx, CompCompInterfaceMethodMetadata metadata, Object sourceValue, UIComponent target) {
+
+                ValueExpression ve = (ValueExpression) sourceValue;
+                ExpressionFactory f = ctx.getApplication()
+                      .getExpressionFactory();
+
+                // There is no explicit methodExpression property on
+                // an inner component to which this MethodExpression
+                // should be retargeted.  In this case, replace the
+                // ValueExpression with a method expresson.
+
+                // Pull apart the methodSignature to derive the
+                // expectedReturnType and expectedParameters
+
+                String methodSignature = metadata.getMethodSignature(ctx);
+                assert (null != methodSignature);
+                methodSignature = methodSignature.trim();
+                Class<?> expectedReturnType;
+                Class<?>[] expectedParameters = NO_ARGS;
+
+                // Get expectedReturnType
+                int j, i = methodSignature.indexOf(" ");
+                if (-1 != i) {
+                    String strValue = methodSignature.substring(0, i);
+                    try {
+                        expectedReturnType = Util.getTypeFromString(strValue.trim());
+                    } catch (ClassNotFoundException cnfe) {
+                        throw new FacesException(methodSignature
+                                                 + " : Unable to load type '"
+                                                 + strValue
+                                                 + '\'');
+                    }
+                } else {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.severe(
+                              "Unable to determine expected return type for " +
+                              methodSignature);
+                    }
+                    return;
+                }
+
+                // derive the arguments
+                i = methodSignature.indexOf("(");
+                if (-1 != i) {
+                    j = methodSignature.indexOf(")", i + 1);
+                    if (-1 != j) {
+                        String strValue = methodSignature.substring(i + 1, j);
+                        if (0 < strValue.length()) {
+                            String[] params = strValue.split(",");
+                            expectedParameters = new Class[params.length];
+                            boolean exceptionThrown = false;
+                            for (i = 0; i < params.length; i++) {
+                                try {
+                                    expectedParameters[i] =
+                                          Util.getTypeFromString(params[i].trim());
+                                } catch (ClassNotFoundException cnfe) {
+                                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                                        LOGGER.log(Level.SEVERE,
+                                                   "Unable to determine parameter type for "
+                                                   + methodSignature,
+                                                   cnfe);
+                                    }
+                                    exceptionThrown = true;
+                                    break;
+                                }
+                            }
+                            if (exceptionThrown) {
+                                return;
+                            }
+
+                        } else {
+                            expectedParameters = NO_ARGS;
+                        }
+                    }
+
+                }
+
+                assert (null != expectedReturnType);
+                assert (null != expectedParameters);
+
+                MethodExpression me = f
+                      .createMethodExpression(ctx.getELContext(),
+                                              ve.getExpressionString(),
+                                              expectedReturnType,
+                                              expectedParameters);
+                target.getAttributes().put(metadata.getName(),
+                                           new ContextualCompositeMethodExpression(
+                                                 ve,
+                                                 me));
+
+            }
+
+
+            public String getAttribute() {
+                return null;
+            }
+
+        } // END ArbitraryMethodRegargetHandler
+
+    } // END MethodRegargetHandlerManager
+
+
+    /**
+     * Implementations of this interface provide the <code>strategy</code> to
+     * properly retarget a method expression for a particular attribute.
+     */
+    private interface MethodRetargetHandler {
+
+        /**
+         * Constructs and retargets a <code>MethodExpression</code> as appropriate
+         * based on the provided arguments.
+         *
+         * @param ctx the <code>FacesContext</code> for the current request
+         * @param metadata the metadata describing the method to be retargeted
+         * @param sourceValue typically, this will be a ValueExpression, however,
+         *  there are cases where this could be provided as a literal.  It basically
+         *  represents the attribute value being passed to the composite component
+         * @param target the component that will be target of the method expression
+         */
+        void retarget(FacesContext ctx,
+                      CompCompInterfaceMethodMetadata metadata,
+                      Object sourceValue,
+                      UIComponent target);
+
+        /**
+         * @return the attribute name this <code>MethodRetargetHandler</code>
+         *  is designed to handle
+         */
+        String getAttribute();
+
+    } // END MethodRetargetHandler
+
+
+    /**
+     * Simple no-op writer.
+     */
+    protected static final class NullWriter extends Writer {
+
+        static final NullWriter Instance = new NullWriter();
+
+        public void write(char[] buffer) {
+        }
+
+        public void write(char[] buffer, int off, int len) {
+        }
+
+        public void write(String str) {
+        }
+
+        public void write(int c) {
+        }
+
+        public void write(String str, int off, int len) {
+        }
+
+        public void close() {
+        }
+
+        public void flush() {
+        }
+
+    } // END NullWriter
+
+    /**
+     * Find the given component in the component tree.
+     *
+     * @param context the Faces context.
+     * @param clientId the client id of the component to find.
+     */
+    private UIComponent locateComponentByClientId(final FacesContext context, final UIComponent parent, final String clientId) {
+        final List<UIComponent> found = new ArrayList<UIComponent>();
+        UIComponent result = null;
+
+        parent.invokeOnComponent(context, clientId, new ContextCallback() {
+
+            public void invokeContextCallback(FacesContext context, UIComponent target) {
+                found.add(target);
+            }
+        });
+
+        /*
+         * Since we did not find it the cheaper way we need to assume there is a
+         * UINamingContainer that does not prepend its ID. So we are going to
+         * walk the tree to find it.
+         */
+        if (found.isEmpty()) {
+            VisitContext visitContext = VisitContext.createVisitContext(context);
+            parent.visitTree(visitContext, new VisitCallback() {
+
+                public VisitResult visit(VisitContext visitContext, UIComponent component) {
+                    VisitResult result = VisitResult.ACCEPT;
+                    if (component.getClientId(visitContext.getFacesContext()).equals(clientId)) {
+                        found.add(component);
+                        result = VisitResult.COMPLETE;
+                        }
+                    return result;
+                }
+            });
+        }
+        if (!found.isEmpty()) {
+            result = found.get(0);
+        }
+        return result;
+    }
+
+    /**
+     * Reapply the dynamic actions after Facelets reapply.
+     *
+     * <p> Note a precondition to this method is that tracking view
+     * modifications is turned off during the execution of this method. The
+     * caller of this method is responsible for turning tracking view
+     * modifications off and on as required. </p>
+     *
+     * @param context the Faces context.
+     */
+    private void reapplyDynamicActions(FacesContext context) {
+        StateContext stateContext = StateContext.getStateContext(context);
+        List<ComponentStruct> actions = stateContext.getDynamicActions();
+        if (actions != null) {
+            for (ComponentStruct action : actions) {
+                if (ComponentStruct.REMOVE.equals(action.action)) {
+                    reapplyDynamicRemove(context, action);
+                }
+                if (ComponentStruct.ADD.equals(action.action)) {
+                    reapplyDynamicAdd(context, action);
+                }
+            }
+        }
+    }
+
+    /**
+     * Reapply the dynamic add after Facelets reapply.
+     *
+     * @param context the Faces context. 
+     * @param struct the component struct.
+     */
+    private void reapplyDynamicAdd(FacesContext context, ComponentStruct struct) {
+        UIComponent parent = locateComponentByClientId(context, context.getViewRoot(), struct.parentClientId);
+
+        if (parent != null) {
+            
+            UIComponent child = locateComponentByClientId(context, parent, struct.clientId);
+            StateContext stateContext = StateContext.getStateContext(context);
+
+            if (child == null) {
+                child = stateContext.getDynamicComponents().get(struct.clientId);
+            }
+
+            if (child != null) {
+                if (struct.facetName != null) {
+                    parent.getFacets().remove(struct.facetName);
+                    parent.getFacets().put(struct.facetName, child);
+                    child.getClientId();
+                } else {
+                    int childIndex = -1;
+                    if (child.getAttributes().containsKey(DYNAMIC_COMPONENT)) {
+                        childIndex = (Integer) child.getAttributes().get(DYNAMIC_COMPONENT);
+                    }
+                    child.setId(struct.id);
+                    if (childIndex >= parent.getChildCount() || childIndex == -1) {
+                        parent.getChildren().add(child);
+                    } else {
+                        parent.getChildren().add(childIndex, child);
+                    }
+                    child.getClientId();
+                    child.getAttributes().put(DYNAMIC_COMPONENT, child.getParent().getChildren().indexOf(child));
+                }
+                stateContext.getDynamicComponents().put(struct.clientId, child);
+            }
+        }
+    }
+
+    /**
+     * Reapply the dynamic remove after Facelets reapply.
+     *
+     * @param context the Faces context.
+     * @param struct the component struct.
+     */
+    private void reapplyDynamicRemove(FacesContext context, ComponentStruct struct) {
+        UIComponent child = locateComponentByClientId(context, context.getViewRoot(), struct.clientId);
+        if (child != null) {
+            StateContext stateContext = StateContext.getStateContext(context);
+            stateContext.getDynamicComponents().put(struct.clientId, child);
+            UIComponent parent = child.getParent();
+            parent.getChildren().remove(child);
+        }
+    }
+}
diff --git a/com/sun/faces/application/view/FormOmittedChecker.java b/com/sun/faces/application/view/FormOmittedChecker.java
new file mode 100644
index 0000000..7740261
--- /dev/null
+++ b/com/sun/faces/application/view/FormOmittedChecker.java
@@ -0,0 +1,160 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import com.sun.faces.util.MessageUtils;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Set;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.ActionSource;
+import javax.faces.component.ActionSource2;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+
+/**
+ * A convenience class that checks for omitted forms.
+ */
+class FormOmittedChecker {
+
+    /**
+     * Stores the skip hint.
+     */
+    private static String SKIP_ITERATION_HINT = "javax.faces.visit.SKIP_ITERATION";
+
+    /**
+     * Constructor.
+     */
+    private FormOmittedChecker() {
+    }
+
+    /**
+     * Check if omitted forms are present.
+     *
+     * @param context the Faces context.
+     */
+    public static void check(FacesContext context) {
+        final FacesContext finalContext = context;
+        UIViewRoot viewRoot = context.getViewRoot();
+        List<UIComponent> children = viewRoot.getChildren();
+
+        for (UIComponent child : children) {
+            try {
+                context.getAttributes().put(SKIP_ITERATION_HINT, true);
+                Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+
+                VisitContext visitContext = VisitContext.createVisitContext(context, null, hints);
+                child.visitTree(visitContext, new VisitCallback() {
+
+                    public VisitResult visit(VisitContext visitContext, UIComponent component) {
+                        VisitResult result = VisitResult.ACCEPT;
+
+                        if (isForm(component)) {
+                            result = VisitResult.REJECT;
+                        } else if (isInNeedOfForm(component)) {
+                            addFormOmittedMessage(finalContext);
+                        }
+                        return result;
+                    }
+                });
+            } finally {
+                context.getAttributes().remove(SKIP_ITERATION_HINT);
+            }
+        }
+    }
+
+    /**
+     * Is the component a form.
+     *
+     * <p> Note normally a form inherits from UIForm, but there might be some
+     * component libraries out there that might not honor that. So we check the
+     * component family to avoid warning in cases where 3rd party form component
+     * that does not extend UIForm (eg. tr:form) is used. </p>
+     *
+     * @param component the UI component.
+     * @return true if it is a form, false otherwise.
+     */
+    private static boolean isForm(UIComponent component) {
+        return (component instanceof UIForm || (component.getFamily() != null && component.getFamily().endsWith("Form")));
+    }
+
+    /**
+     * Is the component in need of a form.
+     *
+     * @param component the UI component.
+     * @return true if the component is in need of a form, false otherwise.
+     */
+    private static boolean isInNeedOfForm(UIComponent component) {
+        return (component instanceof ActionSource
+                || component instanceof ActionSource2
+                || component instanceof EditableValueHolder);
+    }
+
+    /**
+     * Add the form omitted message.
+     *
+     * @param context the Faces context.
+     */
+    private static void addFormOmittedMessage(FacesContext context) {
+        String key = MessageUtils.MISSING_FORM_ERROR;
+        Object[] parameters = new Object[]{};
+        boolean missingFormReported = false;
+
+        FacesMessage message = MessageUtils.getExceptionMessage(key, parameters);
+        List<FacesMessage> messages = context.getMessageList();
+        for (FacesMessage item : messages) {
+            if (item.getDetail().equals(message.getDetail())) {
+                missingFormReported = true;
+                break;
+            }
+        }
+        if (!missingFormReported) {
+            message.setSeverity(FacesMessage.SEVERITY_WARN);
+            context.addMessage(null, message);
+        }
+    }
+}
diff --git a/com/sun/faces/application/view/JspStateManagementStrategy.java b/com/sun/faces/application/view/JspStateManagementStrategy.java
new file mode 100644
index 0000000..c03e1aa
--- /dev/null
+++ b/com/sun/faces/application/view/JspStateManagementStrategy.java
@@ -0,0 +1,459 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.FacesException;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.render.ResponseStateManager;
+import javax.faces.view.StateManagementStrategy;
+
+/**
+ * A state management strategy for JSP.
+ *
+ * @author Manfred Riem (manfred.riem at oracle.com)
+ */
+public class JspStateManagementStrategy extends StateManagementStrategy {
+
+    /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = FacesLogger.APPLICATION_VIEW.getLogger();
+    /**
+     * Stores the class map.
+     */
+    private Map<String, Class<?>> classMap;
+    /**
+     * Are we in development mode.
+     */
+    private boolean isDevelopmentMode;
+
+    /**
+     * Constructor.
+     */
+    public JspStateManagementStrategy() {
+        this(FacesContext.getCurrentInstance());
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param context the Faces context.
+     */
+    public JspStateManagementStrategy(FacesContext context) {
+        isDevelopmentMode = context.isProjectStage(ProjectStage.Development);
+        classMap = new ConcurrentHashMap<String, Class<?>>(32);
+    }
+
+    /**
+     * Capture the child.
+     *
+     * @param tree the tree.
+     * @param parent the parent.
+     * @param c the component.
+     */
+    private void captureChild(List<TreeNode> tree, int parent, UIComponent c) {
+
+        if (!c.isTransient()) {
+            TreeNode n = new TreeNode(parent, c);
+            int pos = tree.size();
+            tree.add(n);
+            captureRest(tree, pos, c);
+        }
+    }
+
+    /**
+     * Capture the facet.
+     *
+     * @param tree the tree.
+     * @param parent the parent.
+     * @param name the facet name.
+     * @param c the component.
+     */
+    private void captureFacet(List<TreeNode> tree, int parent, String name, UIComponent c) {
+
+        if (!c.isTransient()) {
+            FacetNode n = new FacetNode(parent, name, c);
+            int pos = tree.size();
+            tree.add(n);
+            captureRest(tree, pos, c);
+        }
+    }
+
+    /**
+     * Capture the rest.
+     *
+     * @param tree the tree.
+     * @param pos the position.
+     * @param c the component.
+     */
+    private void captureRest(List<TreeNode> tree, int pos, UIComponent c) {
+
+        int sz = c.getChildCount();
+        if (sz > 0) {
+            List<UIComponent> child = c.getChildren();
+            for (int i = 0; i < sz; i++) {
+                captureChild(tree, pos, child.get(i));
+            }
+        }
+
+        sz = c.getFacetCount();
+        if (sz > 0) {
+            for (Map.Entry<String, UIComponent> entry : c.getFacets().entrySet()) {
+                captureFacet(tree, pos, entry.getKey(), entry.getValue());
+            }
+        }
+    }
+
+    /**
+     * Create a new component instance.
+     *
+     * @param n the tree node.
+     * @return the UI component.
+     * @throws FacesException when a serious error occurs.
+     */
+    private UIComponent newInstance(TreeNode n) throws FacesException {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "newInstance", n.componentType);
+        }
+
+        try {
+            Class<?> t = ((classMap != null) ? classMap.get(n.componentType) : null);
+            if (t == null) {
+                t = Util.loadClass(n.componentType, n);
+                if (t != null && classMap != null) {
+                    classMap.put(n.componentType, t);
+                } else {
+                    if (!isDevelopmentMode) {
+                        throw new NullPointerException();
+                    }
+                }
+            }
+
+            assert (t != null);
+            UIComponent c = (UIComponent) t.newInstance();
+            c.setId(n.id);
+
+            return c;
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+    /**
+     * Restore the component tree.
+     *
+     * @param renderKitId the render kit id.
+     * @param tree the saved tree.
+     * @return the view root.
+     * @throws FacesException when a serious error occurs.
+     */
+    private UIViewRoot restoreTree(FacesContext context,
+                                   String renderKitId,
+                                   Object[] tree) throws FacesException {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "restoreTree", renderKitId);
+        }
+
+        UIComponent c;
+        FacetNode fn;
+        TreeNode tn;
+        for (int i = 0; i < tree.length; i++) {
+            if (tree[i] instanceof FacetNode) {
+                fn = (FacetNode) tree[i];
+                c = newInstance(fn);
+                tree[i] = c;
+                if (i != fn.parent) {
+                    ((UIComponent) tree[fn.parent]).getFacets().put(fn.facetName, c);
+                }
+
+            } else {
+                tn = (TreeNode) tree[i];
+                c = newInstance(tn);
+                tree[i] = c;
+                if (i != tn.parent) {
+                    ((UIComponent) tree[tn.parent]).getChildren().add(c);
+                } else {
+                    assert (c instanceof UIViewRoot);
+                    UIViewRoot viewRoot = (UIViewRoot) c;
+                    context.setViewRoot(viewRoot);
+                    viewRoot.setRenderKitId(renderKitId);
+                }
+            }
+        }
+        return (UIViewRoot) tree[0];
+
+    }
+
+    /**
+     * Restore the view.
+     *
+     * @param context the Faces context.
+     * @param viewId the view id.
+     * @param renderKitId the render kit id.
+     * @return the view root.
+     */
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId, String renderKitId) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "restoreView", new Object[]{viewId, renderKitId});
+        }
+
+        UIViewRoot result = null;
+
+        ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
+        Object[] state = (Object[]) rsm.getState(context, viewId);
+
+        if (state != null && state.length >= 2) {
+            /*
+             * Restore the component tree.
+             */
+            if (state[0] != null) {
+                result = restoreTree(context, renderKitId, ((Object[]) state[0]).clone());
+                context.setViewRoot(result);
+            }
+            /*
+             * Restore the component state.
+             */
+            if (result != null && state[1] != null) {
+                result.processRestoreState(context, state[1]);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Save the view.
+     *
+     * @param context the Faces context.
+     * @return the saved view.
+     */
+    @Override
+    public Object saveView(FacesContext context) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("saveView");
+        }
+
+        Object[] result;
+        UIViewRoot viewRoot = context.getViewRoot();
+
+        /*
+         * Check uniqueness.
+         */
+        Util.checkIdUniqueness(context, viewRoot, new HashSet<String>(viewRoot.getChildCount() << 1));
+
+        /*
+         * Save the component state.
+         */
+        Object state = viewRoot.processSaveState(context);
+
+        /*
+         * Save the tree structure.
+         */
+        List<TreeNode> treeList = new ArrayList<TreeNode>(32);
+        captureChild(treeList, 0, viewRoot);
+        Object[] tree = treeList.toArray();
+
+        result = new Object[]{tree, state};
+        return result;
+    }
+
+    /**
+     * Inner class used to store a facet in the saved component tree.
+     */
+    private static final class FacetNode extends TreeNode {
+
+        /**
+         * Stores the serial version UID.
+         */
+        private static final long serialVersionUID = -3777170310958005106L;
+        /**
+         * Stores the facet name.
+         */
+        public String facetName;
+
+        /**
+         * Constructor.
+         */
+        public FacetNode() {
+        }
+
+        /**
+         * Constructor.
+         *
+         * @param parent the parent.
+         * @param name the facet name.
+         * @param c the component.
+         */
+        public FacetNode(int parent, String name, UIComponent c) {
+
+            super(parent, c);
+            this.facetName = name;
+        }
+
+        /**
+         * Read the facet node in.
+         *
+         * @param in the object input.
+         * @throws IOException when an I/O error occurs.
+         * @throws ClassNotFoundException when the class could not be found.
+         */
+        @Override
+        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+
+            super.readExternal(in);
+            this.facetName = in.readUTF();
+
+        }
+
+        /**
+         * Write the facet node out.
+         *
+         * @param out the object output.
+         * @throws IOException when an I/O error occurs.
+         */
+        @Override
+        public void writeExternal(ObjectOutput out) throws IOException {
+
+            super.writeExternal(out);
+            out.writeUTF(this.facetName);
+
+        }
+    }
+
+    /**
+     * Inner class used to store a node in the saved component tree.
+     */
+    private static class TreeNode implements Externalizable {
+
+        /**
+         * Stores the serial version UID.
+         */
+        private static final long serialVersionUID = -835775352718473281L;
+        /**
+         * Stores the NULL_ID constant.
+         */
+        private static final String NULL_ID = "";
+        /**
+         * Stores the component type.
+         */
+        public String componentType;
+        /**
+         * Stores the id.
+         */
+        public String id;
+        /**
+         * Stores the parent.
+         */
+        public int parent;
+
+        /**
+         * Constructor.
+         */
+        public TreeNode() {
+        }
+
+        /**
+         * Constructor.
+         *
+         * @param parent the parent.
+         * @param c the component.
+         */
+        public TreeNode(int parent, UIComponent c) {
+
+            this.parent = parent;
+            this.id = c.getId();
+            this.componentType = c.getClass().getName();
+
+        }
+
+        /**
+         * Read the tree node in.
+         *
+         * @param in the object input.
+         * @throws IOException when an I/O error occurs.
+         * @throws ClassNotFoundException when the class could not be found.
+         */
+        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+
+            this.parent = in.readInt();
+            this.componentType = in.readUTF();
+            this.id = in.readUTF();
+            if (id.length() == 0) {
+                id = null;
+            }
+        }
+
+        /**
+         * Write the tree node out.
+         *
+         * @param out the object output.
+         * @throws IOException when an I/O error occurs.
+         */
+        public void writeExternal(ObjectOutput out) throws IOException {
+
+            out.writeInt(this.parent);
+            out.writeUTF(this.componentType);
+            if (this.id != null) {
+                out.writeUTF(this.id);
+            } else {
+                out.writeUTF(NULL_ID);
+            }
+        }
+    }
+}
diff --git a/com/sun/faces/application/view/JspViewHandlingStrategy.java b/com/sun/faces/application/view/JspViewHandlingStrategy.java
new file mode 100644
index 0000000..8445072
--- /dev/null
+++ b/com/sun/faces/application/view/JspViewHandlingStrategy.java
@@ -0,0 +1,455 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import java.beans.BeanInfo;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.view.ViewMetadata;
+import javax.faces.application.Resource;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.jstl.core.Config;
+
+import com.sun.faces.application.ViewHandlerResponseWrapper;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.RequestStateManager;
+import com.sun.faces.util.Util;
+
+import javax.faces.view.StateManagementStrategy;
+
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.ResponseBufferSize;
+
+/**
+ * This {@link ViewHandlingStrategy} handles JSP-based views.
+ */
+public class JspViewHandlingStrategy extends ViewHandlingStrategy {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    private int responseBufferSize;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public JspViewHandlingStrategy() {
+
+        try {
+            responseBufferSize =
+                  Integer.parseInt(webConfig.getOptionValue(ResponseBufferSize));
+        } catch (NumberFormatException nfe) {
+            responseBufferSize = Integer
+                  .parseInt(ResponseBufferSize.getDefaultValue());
+        }
+
+    }
+
+
+
+    // ------------------------------------ Methods from ViewDeclarationLanguage
+    
+
+    /**
+     * <p>
+     * Not supported in JSP-based views.
+     * </p>
+     *
+     * @see javax.faces.view.ViewDeclarationLanguage#getComponentMetadata(javax.faces.context.FacesContext, javax.faces.application.Resource)
+     */
+    @Override
+    public BeanInfo getComponentMetadata(FacesContext context, Resource componentResource) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Not supported in JSP-based views.
+     * </p>
+     *
+     * @see javax.faces.view.ViewDeclarationLanguage#getViewMetadata(javax.faces.context.FacesContext, String)
+     */
+    @Override
+    public ViewMetadata getViewMetadata(FacesContext context, String viewId) {
+        return null;
+    }
+
+    
+    /**
+     * <p>
+     * Not supported in JSP-based views.
+     * </p>
+     *
+     * @see javax.faces.view.ViewDeclarationLanguage#getScriptComponentResource(javax.faces.context.FacesContext, javax.faces.application.Resource)
+     */
+    @Override
+    public Resource getScriptComponentResource(FacesContext context, Resource componentResource) {
+        throw new UnsupportedOperationException();
+    }
+
+
+    /**
+     * @see javax.faces.view.ViewDeclarationLanguage#buildView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
+     * @param context
+     * @param view
+     * @throws IOException
+     */
+    public void buildView(FacesContext context, UIViewRoot view)
+    throws IOException {
+
+        if (Util.isViewPopulated(context, view)) {
+            return;
+        }
+        try {
+            if (executePageToBuildView(context, view)) {
+                context.getExternalContext().responseFlushBuffer();
+                if (associate != null) {
+                    associate.responseRendered();
+                }
+                context.responseComplete();
+                return;
+            }
+        } catch (IOException e) {
+            throw new FacesException(e);
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, "Completed building view for : \n" +
+                                   view.getViewId());
+        }
+        context.getApplication().publishEvent(context,
+                                              PostAddToViewEvent.class,
+                                              UIViewRoot.class,
+                                              view);
+        Util.setViewPopulated(context, view);
+
+    }
+
+    /**
+     * @see javax.faces.view.ViewDeclarationLanguage#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
+     */
+    public void renderView(FacesContext context,
+                           UIViewRoot view)
+    throws IOException {
+
+        // suppress rendering if "rendered" property on the component is
+        // false
+        if (!view.isRendered() || context.getResponseComplete()) {
+            return;
+        }
+
+        ExternalContext extContext = context.getExternalContext();
+
+        if (!Util.isViewPopulated(context, view)) {
+            buildView(context, view);
+        }
+
+        // set up the ResponseWriter
+
+        RenderKitFactory renderFactory = (RenderKitFactory)
+              FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        RenderKit renderKit =
+              renderFactory.getRenderKit(context, view.getRenderKitId());
+
+        ResponseWriter oldWriter = context.getResponseWriter();
+
+        WriteBehindStateWriter stateWriter =
+              new WriteBehindStateWriter(extContext.getResponseOutputWriter(),
+                                         context,
+                                         responseBufferSize);
+        ResponseWriter newWriter;
+        if (null != oldWriter) {
+            newWriter = oldWriter.cloneWithWriter(stateWriter);
+        } else {
+            newWriter = renderKit.createResponseWriter(stateWriter,
+                                                       null,
+                                                       extContext.getRequestCharacterEncoding());
+        }
+        context.setResponseWriter(newWriter);
+
+        //  Don't call startDoc and endDoc on a partial response
+        if (context.getPartialViewContext().isPartialRequest()) {
+            doRenderView(context, view);
+            try {
+                extContext.getFlash().doPostPhaseActions(context);
+            } catch (UnsupportedOperationException uoe) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
+                }
+            }
+        } else {
+            // render the view to the response
+            newWriter.startDocument();
+            doRenderView(context, view);
+            try {
+                extContext.getFlash().doPostPhaseActions(context);
+            } catch (UnsupportedOperationException uoe) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
+                }
+            }
+            newWriter.endDocument();
+        }
+
+
+        // replace markers in the body content and write it to response.
+
+        // flush directly to the response
+        if (stateWriter.stateWritten()) {
+            stateWriter.flushToWriter();
+        }
+
+        // clear the ThreadLocal reference.
+        stateWriter.release();
+
+        if (null != oldWriter) {
+            context.setResponseWriter(oldWriter);
+        }
+
+        // write any AFTER_VIEW_CONTENT to the response
+        // side effect: AFTER_VIEW_CONTENT removed
+        ViewHandlerResponseWrapper wrapper = (ViewHandlerResponseWrapper)
+              RequestStateManager.remove(context, RequestStateManager.AFTER_VIEW_CONTENT);
+        if (null != wrapper) {
+            wrapper.flushToWriter(extContext.getResponseOutputWriter(),
+                                  extContext.getResponseCharacterEncoding());
+        }
+
+        extContext.responseFlushBuffer();
+
+    }
+
+    @Override
+    public StateManagementStrategy getStateManagementStrategy(FacesContext context, String viewId) {
+        return null;
+    }
+
+    // --------------------------------------- Methods from ViewHandlingStrategy
+
+    
+    /**
+     * This {@link ViewHandlingStrategy} <em>should</em> be the last one queried
+     * and as such we return <code>true</code>.
+     *
+     * @see com.sun.faces.application.view.ViewHandlingStrategy#handlesViewId(String)
+     */
+    @Override
+    public boolean handlesViewId(String viewId) {
+
+        return true;
+
+    }
+
+    @Override 
+    public String getId() {
+        return JSP_VIEW_DECLARATION_LANGUAGE_ID;
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * Execute the target view.  If the HTTP status code range is
+     * not 2xx, then return true to indicate the response should be
+     * immediately flushed by the caller so that conditions such as 404
+     * are properly handled.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param viewToExecute the view to build
+     * @return <code>true</code> if the response should be immediately flushed
+     *  to the client, otherwise <code>false</code>
+     * @throws java.io.IOException if an error occurs executing the page
+     */
+    private boolean executePageToBuildView(FacesContext context,
+                                        UIViewRoot viewToExecute)
+    throws IOException {
+
+        if (null == context) {
+            String message = MessageUtils.getExceptionMessageString
+                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+        if (null == viewToExecute) {
+            String message = MessageUtils.getExceptionMessageString
+                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "viewToExecute");
+            throw new NullPointerException(message);
+        }
+
+        ExternalContext extContext = context.getExternalContext();
+
+        if ("/*".equals(RequestStateManager.get(context, RequestStateManager.INVOCATION_PATH))) {
+            throw new FacesException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.FACES_SERVLET_MAPPING_INCORRECT_ID));
+        }
+
+        String requestURI = viewToExecute.getViewId();
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("About to execute view " + requestURI);
+        }
+
+        // update the JSTL locale attribute in request scope so that JSTL
+        // picks up the locale from viewRoot. This attribute must be updated
+        // before the JSTL setBundle tag is called because that is when the
+        // new LocalizationContext object is created based on the locale.
+        if (extContext.getRequest() instanceof ServletRequest) {
+            Config.set((ServletRequest)
+            extContext.getRequest(),
+                       Config.FMT_LOCALE, context.getViewRoot().getLocale());
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Before dispacthMessage to viewId " + requestURI);
+        }
+
+        // save the original response
+        Object originalResponse = extContext.getResponse();
+
+        // replace the response with our wrapper
+        ViewHandlerResponseWrapper wrapped = getWrapper(extContext);
+        extContext.setResponse(wrapped);
+
+        try
+        {
+
+          // build the view by executing the page
+          extContext.dispatch(requestURI);
+
+          if (LOGGER.isLoggable(Level.FINE)) {
+              LOGGER.fine("After dispacthMessage to viewId " + requestURI);
+          }
+        }
+        finally
+        {
+          // replace the original response
+          extContext.setResponse(originalResponse);
+        }
+
+        // Follow the JSTL 1.2 spec, section 7.4,
+        // on handling status codes on a forward
+        if (wrapped.getStatus() < 200 || wrapped.getStatus() > 299) {
+            // flush the contents of the wrapper to the response
+            // this is necessary as the user may be using a custom
+            // error page - this content should be propagated
+            wrapped.flushContentToWrappedResponse();
+            return true;
+        }
+
+        // Put the AFTER_VIEW_CONTENT into request scope
+        // temporarily
+        RequestStateManager.set(context,
+                                RequestStateManager.AFTER_VIEW_CONTENT,
+                                wrapped);
+
+        return false;
+
+    }
+
+
+     /**
+     * <p>This is a separate method to account for handling the content
+     * after the view tag.</p>
+     *
+     * <p>Create a new ResponseWriter around this response's Writer.
+     * Set it into the FacesContext, saving the old one aside.</p>
+     *
+     * <p>call encodeBegin(), encodeChildren(), encodeEnd() on the
+     * argument <code>UIViewRoot</code>.</p>
+     *
+     * <p>Restore the old ResponseWriter into the FacesContext.</p>
+     *
+     * <p>Write out the after view content to the response's writer.</p>
+     *
+     * <p>Flush the response buffer, and remove the after view content
+     * from the request scope.</p>
+     *
+     * @param context the <code>FacesContext</code> for the current request
+     * @param viewToRender the view to render
+     * @throws java.io.IOException if an error occurs rendering the view to the client
+     * @throws javax.faces.FacesException if some error occurs within the framework
+     *  processing
+     */
+    private void doRenderView(FacesContext context,
+                              UIViewRoot viewToRender)
+    throws IOException {
+
+        if (null != associate) {
+            associate.responseRendered();
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, "About to render view " + viewToRender.getViewId());
+        }
+
+        viewToRender.encodeAll(context);
+
+    }
+
+
+    /**
+     * <p>
+     * Simple utility method to wrap the current response with the
+     * {@link ViewHandlerResponseWrapper}.
+     * </p>
+     * @param extContext the {@link ExternalContext} for this request
+     * @return the current response wrapped with ViewHandlerResponseWrapper
+     */
+    private static ViewHandlerResponseWrapper getWrapper(ExternalContext extContext) {
+
+        Object response = extContext.getResponse();
+        if (response instanceof HttpServletResponse) {
+            return new ViewHandlerResponseWrapper((HttpServletResponse) response);
+        }
+        throw new IllegalArgumentException();
+
+    }
+
+}
+
diff --git a/com/sun/faces/application/view/MultiViewHandler.java b/com/sun/faces/application/view/MultiViewHandler.java
new file mode 100644
index 0000000..53af1c7
--- /dev/null
+++ b/com/sun/faces/application/view/MultiViewHandler.java
@@ -0,0 +1,836 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.application.ViewHandler;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.ResponseStateManager;
+import javax.servlet.http.HttpServletResponse;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.*;
+
+import java.util.concurrent.CopyOnWriteArraySet;
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIViewParameter;
+import javax.faces.component.UIViewRoot;
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.view.ViewDeclarationLanguageFactory;
+import javax.faces.view.ViewMetadata;
+
+/**
+ * This {@link ViewHandler} implementation handles both JSP-based and
+ * Facelets/PDL-based views.
+ */
+public class MultiViewHandler extends ViewHandler {
+
+    // Log instance for this class
+    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
+
+    private String[] configuredExtensions;
+    private Set<String> protectedViews;
+    private boolean extensionsSet;
+    
+    private ViewDeclarationLanguageFactory vdlFactory;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public MultiViewHandler() {
+
+        WebConfiguration config = WebConfiguration.getInstance();
+              
+        configuredExtensions = config.getOptionValue(WebConfiguration.WebContextInitParameter.DefaultSuffix, " ");
+        extensionsSet = config.isSet(WebConfiguration.WebContextInitParameter.DefaultSuffix);
+        vdlFactory = (ViewDeclarationLanguageFactory)
+                FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
+        protectedViews = new CopyOnWriteArraySet<String>();
+
+    }
+
+
+    // ------------------------------------------------ Methods from ViewHandler
+
+
+    /**
+     * Call the default implementation of {@link javax.faces.application.ViewHandler#initView(javax.faces.context.FacesContext)}
+     *
+     * @see javax.faces.application.ViewHandler#initView(javax.faces.context.FacesContext)
+     */
+    @Override
+    public void initView(FacesContext context) throws FacesException {
+        super.initView(context);
+    }
+
+
+    /**
+     * <p>
+     * Call {@link ViewDeclarationLanguage#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)}
+     * if the view can be rendered.
+     * </p>
+     *
+     * @see ViewHandler#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
+     */
+    public void renderView(FacesContext context, UIViewRoot viewToRender)
+    throws IOException, FacesException {
+
+        Util.notNull("context", context);
+        Util.notNull("viewToRender", viewToRender);
+
+        vdlFactory.getViewDeclarationLanguage(viewToRender.getViewId())
+              .renderView(context, viewToRender);
+
+    }
+
+
+    /**
+     * <p>
+     * Call {@link ViewDeclarationLanguage#restoreView(javax.faces.context.FacesContext, String)}.
+     * </p>
+     *
+     * @see ViewHandler#restoreView(javax.faces.context.FacesContext, String)   
+     */
+    public UIViewRoot restoreView(FacesContext context, String viewId) {
+
+        Util.notNull("context", context);
+        String actualViewId = derivePhysicalViewId(context, viewId, false);
+        return vdlFactory.getViewDeclarationLanguage(actualViewId)
+              .restoreView(context, actualViewId);
+
+    }
+
+    
+    /**
+     * <p>
+     * Derive the actual view ID (i.e. the physical resource) and call
+     * call {@link ViewDeclarationLanguage#createView(javax.faces.context.FacesContext, String)}.
+     * </p>
+     *
+     * @see ViewHandler#restoreView(javax.faces.context.FacesContext, String)
+     */
+    public UIViewRoot createView(FacesContext context, String viewId) {
+
+        Util.notNull("context", context);
+        String actualViewId = derivePhysicalViewId(context, viewId, false);
+        return vdlFactory.getViewDeclarationLanguage(actualViewId).createView(context,
+                                                                               actualViewId);
+
+    }
+
+
+    /**
+     * <p>
+     * This code is currently common to all {@link ViewHandlingStrategy} instances.
+     * </p>
+     *
+     * @see ViewHandler#calculateLocale(javax.faces.context.FacesContext)
+     */
+    public Locale calculateLocale(FacesContext context) {
+
+        Util.notNull("context", context);
+
+        Locale result = null;
+        // determine the locales that are acceptable to the client based on the
+        // Accept-Language header and the find the best match among the
+        // supported locales specified by the client.
+        Iterator<Locale> locales = context.getExternalContext().getRequestLocales();
+        while (locales.hasNext()) {
+            Locale perf = locales.next();
+            result = findMatch(context, perf);
+            if (result != null) {
+                break;
+            }
+        }
+        // no match is found.
+        if (result == null) {
+            if (context.getApplication().getDefaultLocale() == null) {
+                result = Locale.getDefault();
+            } else {
+                result = context.getApplication().getDefaultLocale();
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * <p>
+     * This code is currently common to all {@link ViewHandlingStrategy} instances.
+     * </p>
+     *
+     * @see ViewHandler#calculateRenderKitId(javax.faces.context.FacesContext)
+     */
+    public String calculateRenderKitId(FacesContext context) {
+
+        Util.notNull("context", context);
+
+        Map<String,String> requestParamMap = context.getExternalContext()
+            .getRequestParameterMap();
+        String result = requestParamMap.get(
+            ResponseStateManager.RENDER_KIT_ID_PARAM);
+
+        if (result == null) {
+            if (null ==
+                (result = context.getApplication().getDefaultRenderKitId())) {
+                result = RenderKitFactory.HTML_BASIC_RENDER_KIT;
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * <p>
+     * This code is currently common to all {@link ViewHandlingStrategy} instances.
+     * </p>
+     *
+     * @see ViewHandler#writeState(javax.faces.context.FacesContext)
+     */
+    public void writeState(FacesContext context) throws IOException {
+
+        Util.notNull("context", context);
+        if (!context.getPartialViewContext().isAjaxRequest()) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Begin writing marker for viewId " +
+                            context.getViewRoot().getViewId());
+            }
+
+            WriteBehindStateWriter writer =
+                  WriteBehindStateWriter.getCurrentInstance();
+            if (writer != null) {
+                writer.writingState();
+            }
+            context.getResponseWriter()
+                  .write(RIConstants.SAVESTATE_FIELD_MARKER);
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("End writing marker for viewId " +
+                            context.getViewRoot().getViewId());
+            }
+        }
+    }
+
+
+    /**
+     * <p>
+     * This code is currently common to all {@link ViewHandlingStrategy} instances.
+     * </p>
+     *
+     * @see ViewHandler#getActionURL(javax.faces.context.FacesContext, String)
+     */
+    public String getActionURL(FacesContext context, String viewId) {
+        String result = getActionURLWithoutViewProtection(context, viewId);
+        // http://java.net/jira/browse/JAVASERVERFACES-2204
+        // PENDING: this code is optimized to be fast to write.
+        // It must be optimized to be fast to run.
+        
+        // See git clone ssh://edburns@git.java.net/grizzly~git 1_9_36 for
+        // how grizzly does this.
+        ViewHandler viewHandler = context.getApplication().getViewHandler();
+        Set<String> urlPatterns = viewHandler.getProtectedViewsUnmodifiable();
+        // Implement section 12.1 of the Servlet spec.
+        boolean viewIdIsProtected = false;
+        for (String cur : urlPatterns) {
+            if (cur.equals(viewId)) {
+                viewIdIsProtected = true;
+            }
+            if (viewIdIsProtected) {
+                break;
+            }
+        }
+        if (viewIdIsProtected) {
+            StringBuilder builder = new StringBuilder(result);
+            // If the result already has a query string...
+            if (result.contains("?")) {
+                // ...assume it also has one or more parameters, and 
+                // append an additional parameter.
+                builder.append("&");
+            } else {
+                // Otherwise, this is the first parameter in the result.
+                builder.append("?");
+            }
+            
+            String rkId = viewHandler.calculateRenderKitId(context);
+            ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, rkId);
+            String tokenValue = rsm.getCryptographicallyStrongTokenFromSession(context);
+            builder.append(ResponseStateManager.NON_POSTBACK_VIEW_TOKEN_PARAM).
+                    append("=").append(tokenValue);
+            result = builder.toString();
+
+        }
+        
+        return result;
+    }
+
+    private String getActionURLWithoutViewProtection(FacesContext context, String viewId) {
+
+        Util.notNull("context", context);
+        Util.notNull("viewId", viewId);
+
+        if (0 == viewId.length() || viewId.charAt(0) != '/') {
+            String message =
+                  MessageUtils.getExceptionMessageString(
+                        MessageUtils.ILLEGAL_VIEW_ID_ID,
+                        viewId);
+            if (logger.isLoggable(Level.SEVERE)) {
+                logger.log(Level.SEVERE, "jsf.illegal_view_id_error", viewId);
+            }
+        throw new IllegalArgumentException(message);
+        }
+
+        // Acquire the context path, which we will prefix on all results
+        ExternalContext extContext = context.getExternalContext();
+        String contextPath = extContext.getRequestContextPath();
+
+        // Acquire the mapping used to execute this request (if any)
+        String mapping = Util.getFacesMapping(context);
+
+        // If no mapping can be identified, just return a server-relative path
+        if (mapping == null) {
+            return (contextPath + viewId);
+        }
+
+        // Deal with prefix mapping
+        if (Util.isPrefixMapped(mapping)) {
+            if (mapping.equals("/*")) {
+                return (contextPath + viewId);
+            } else {
+                return (contextPath + mapping + viewId);
+            }
+        }
+
+        // Deal with extension mapping
+        int period = viewId.lastIndexOf('.');
+        if (period < 0) {
+            return (contextPath + viewId + mapping);
+        } else if (!viewId.endsWith(mapping)) {
+
+            for (String ext : configuredExtensions) {
+                if (viewId.endsWith(ext)) {
+                    return (contextPath + viewId.substring(0, viewId.indexOf(ext)) + mapping);
+                }
+            }
+
+            return (contextPath + viewId.substring(0, period) + mapping);
+         
+        } else {
+            return (contextPath + viewId);
+        }
+
+    }
+
+
+    /**
+     * <p>
+     * This code is currently common to all {@link ViewHandlingStrategy} instances.
+     * </p>
+     *
+     * @see ViewHandler#getResourceURL(javax.faces.context.FacesContext, String)
+     */
+    public String getResourceURL(FacesContext context, String path) {
+
+        ExternalContext extContext = context.getExternalContext();
+        if (path.charAt(0) == '/') {
+            return (extContext.getRequestContextPath() + path);
+        } else {
+            return path;
+        }
+
+    }
+
+
+    @Override
+    public String getBookmarkableURL(FacesContext context,
+                                     String viewId,
+                                     Map<String,List<String>> parameters,
+                                     boolean includeViewParams) {
+
+        Map<String,List<String>> params;
+        if (includeViewParams) {
+            params = getFullParameterList(context, viewId, parameters);
+        } else {
+            params = parameters;
+        }
+        ExternalContext ectx = context.getExternalContext();
+        return ectx.encodeActionURL(ectx.encodeBookmarkableURL(Util.getViewHandler(context).getActionURL(context, viewId), params));
+
+    }
+
+    @Override
+    public void addProtectedView(String urlPattern) {
+        protectedViews.add(urlPattern);
+    }
+
+    @Override
+    public Set<String> getProtectedViewsUnmodifiable() {
+        return Collections.unmodifiableSet(protectedViews);
+    }
+
+    @Override
+    public boolean removeProtectedView(String urlPattern) {
+        return protectedViews.remove(urlPattern);
+    }
+
+    /**
+     * @see ViewHandler#getRedirectURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)
+     */
+    @Override
+    public String getRedirectURL(FacesContext context, String viewId, Map<String, List<String>> parameters, boolean includeViewParams) {
+
+        String encodingFromContext =
+              (String) context.getAttributes().get(RIConstants.FACELETS_ENCODING_KEY);
+        if (null == encodingFromContext) {
+            encodingFromContext = (String) context.getViewRoot().getAttributes().
+                    get(RIConstants.FACELETS_ENCODING_KEY);
+        }
+        
+        String responseEncoding = (null != encodingFromContext) ? encodingFromContext : context.getExternalContext().getResponseCharacterEncoding();
+
+        if (parameters != null) {
+            Map<String, List<String>> decodedParameters = new HashMap<String, List<String>>();
+            for (Map.Entry<String, List<String>> entry : parameters.entrySet()) {
+                String string = entry.getKey();
+                List<String> list = entry.getValue();
+                List<String> values = new ArrayList<String>();
+                for (Iterator<String> it = list.iterator(); it.hasNext();) {
+                    String value = it.next();
+                    try {
+                        value = URLDecoder.decode(value, responseEncoding);
+                    } catch(UnsupportedEncodingException e) {
+                        throw new RuntimeException("Unable to decode");
+                    }
+                    values.add(value);
+                }
+                decodedParameters.put(string, values);
+            }
+            parameters = decodedParameters;
+        }
+                
+        Map<String,List<String>> params;
+        if (includeViewParams) {
+            params = getFullParameterList(context, viewId, parameters);
+        } else {
+            params = parameters;
+        }
+        ExternalContext ectx = context.getExternalContext();
+        return ectx.encodeActionURL(ectx.encodeRedirectURL(Util.getViewHandler(context).getActionURL(context, viewId), params));
+
+    }
+
+    /**
+     * @see ViewHandler#getViewDeclarationLanguage(javax.faces.context.FacesContext, String)
+     */
+    @Override
+    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context,
+                                                              String viewId) {
+        return vdlFactory.getViewDeclarationLanguage(viewId);
+    }
+
+    @Override
+    public String deriveViewId(FacesContext context, String rawViewId) {
+
+        return derivePhysicalViewId(context, rawViewId, true);
+
+    }
+
+    @Override
+    public String deriveLogicalViewId(FacesContext context, String rawViewId) {
+
+        return derivePhysicalViewId(context, rawViewId, false);
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+        /**
+     * <p>if the specified mapping is a prefix mapping, and the provided
+     * request URI (usually the value from <code>ExternalContext.getRequestServletPath()</code>)
+     * starts with <code>mapping + '/'</code>, prune the mapping from the
+     * URI and return it, otherwise, return the original URI.
+     * @param uri the servlet request path
+     * @param mapping the FacesServlet mapping used for this request
+     * @return the URI without additional FacesServlet mappings
+     * @since 1.2
+     */
+    protected String normalizeRequestURI(String uri, String mapping) {
+
+        if (mapping == null || !Util.isPrefixMapped(mapping)) {
+            return uri;
+        } else {
+            int length = mapping.length() + 1;
+            StringBuilder builder = new StringBuilder(length);
+            builder.append(mapping).append('/');
+            String mappingMod = builder.toString();
+            boolean logged = false;
+            while (uri.startsWith(mappingMod)) {
+                if (!logged && logger.isLoggable(Level.WARNING)) {
+                    logged = true;
+                    logger.log(Level.WARNING,
+                               "jsf.viewhandler.requestpath.recursion",
+                               new Object[] {uri, mapping});
+                }
+                uri = uri.substring(length - 1);
+            }
+            return uri;
+        }
+
+    }
+
+
+    /**
+     * <p>Adjust the viewID per the requirements of {@link #renderView}.</p>
+     *
+     * @param context current {@link javax.faces.context.FacesContext}
+     * @param viewId  incoming view ID
+     * @return the view ID with an altered suffix mapping (if necessary)
+     */
+    protected String convertViewId(FacesContext context, String viewId) {
+
+        // if the viewId doesn't already use the above suffix,
+        // replace or append.
+        int extIdx = viewId.lastIndexOf('.');
+        int length = viewId.length();
+        StringBuilder buffer = new StringBuilder(length);
+
+        for (String ext : configuredExtensions) {
+            if (viewId.endsWith(ext)) {
+                return viewId;
+            }
+
+            appendOrReplaceExtension(viewId, ext, length, extIdx, buffer);
+
+            String convertedViewId = buffer.toString();
+
+            ViewDeclarationLanguage vdl = getViewDeclarationLanguage(context, convertedViewId);
+            
+            if (vdl.viewExists(context, convertedViewId)) {
+                // RELEASE_PENDING (rlubke,driscoll) cache the lookup
+                return convertedViewId;
+            }
+        }
+
+        // unable to find any resource match that the default ViewHandler
+        // can deal with.  Fall back to legacy (JSF 1.2) id conversion.
+        return legacyConvertViewId(viewId, length, extIdx, buffer);
+    }
+
+
+    protected String derivePhysicalViewId(FacesContext ctx,
+                                          String rawViewId,
+                                          boolean checkPhysical) {
+        if (rawViewId != null) {
+            String mapping = Util.getFacesMapping(ctx);
+            String viewId;
+            if (mapping != null) {
+                if (!Util.isPrefixMapped(mapping)) {
+                    viewId = convertViewId(ctx, rawViewId);
+                } else {
+                    viewId = normalizeRequestURI(rawViewId, mapping);
+                    if (viewId.equals(mapping)) {
+                        // The request was to the FacesServlet only - no
+                        // path info
+                        // on some containers this causes a recursion in the
+                        // RequestDispatcher and the request appears to hang.
+                        // If this is detected, return status 404
+                        send404Error(ctx);
+                    }
+
+                }
+
+                if (checkPhysical) {
+                    ViewDeclarationLanguage vdl = getViewDeclarationLanguage(ctx, viewId);
+                                                                                
+                    return (vdl.viewExists(ctx, viewId) ? viewId : null);
+                } else {
+                    return viewId;
+                }
+            }
+        }
+        return rawViewId;
+    }
+
+
+    protected Map<String,List<String>> getFullParameterList(FacesContext ctx,
+                                                            String viewId,
+                                                            Map<String,List<String>> existingParameters) {
+
+        Map<String,List<String>> copy;
+        if (existingParameters == null || existingParameters.isEmpty()) {
+            copy = new LinkedHashMap<String,List<String>>(4);
+        } else {
+          copy = new LinkedHashMap<String,List<String>>(existingParameters);
+        }
+        addViewParameters(ctx, viewId, copy);
+        return copy;
+
+    }
+
+
+    protected void addViewParameters(FacesContext ctx,
+                                     String viewId,
+                                     Map<String,List<String>> existingParameters) {
+
+        UIViewRoot currentRoot = ctx.getViewRoot();
+        String currentViewId = currentRoot.getViewId();
+        Collection<UIViewParameter> toViewParams = Collections.emptyList();
+        Collection<UIViewParameter> currentViewParams;
+        boolean currentIsSameAsNew = false;
+        currentViewParams = ViewMetadata.getViewParameters(currentRoot);
+
+        if (currentViewId.equals(viewId)) {
+            currentIsSameAsNew = true;
+            toViewParams = currentViewParams;
+        }
+        else {
+            ViewDeclarationLanguage pdl = getViewDeclarationLanguage(ctx, viewId);
+            ViewMetadata viewMetadata = pdl.getViewMetadata(ctx, viewId);
+            if (null != viewMetadata) {
+                UIViewRoot root = viewMetadata.createMetadataView(ctx);
+                toViewParams = ViewMetadata.getViewParameters(root);
+            }
+        }
+
+        if (toViewParams.isEmpty()) {
+            return;
+        }
+
+        for (UIViewParameter viewParam : toViewParams) {
+            String value = null;
+            // don't bother looking at view parameter if it's been overridden
+            if (existingParameters.containsKey(viewParam.getName())) {
+                continue;
+            }
+            
+            if (paramHasValueExpression(viewParam)) {
+                value = viewParam.getStringValueFromModel(ctx);
+            }
+
+            if (value == null) {
+                if (currentIsSameAsNew) {
+                    /*
+                     * Anonymous view parameter: get string value from UIViewParameter instance stored in current view.
+                     */
+                    value = viewParam.getStringValue(ctx);
+                }
+                else {
+                    /*
+                     * Or transfer string value from matching UIViewParameter instance stored in current view.
+                     */
+                    value = getStringValueToTransfer(ctx, viewParam, currentViewParams);
+                }
+            }
+            
+            if (value != null) {
+                List<String> existing = existingParameters.get(viewParam.getName());
+                if (existing == null) {
+                    existing = new ArrayList<String>(4);
+                    existingParameters.put(viewParam.getName(), existing);
+                }
+                existing.add(value);
+            }
+        }
+    }
+
+
+    /**
+     * Attempts to find a matching locale based on <code>pref</code> and
+     * list of supported locales, using the matching algorithm
+     * as described in JSTL 8.3.2.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param pref the preferred locale
+     * @return the Locale based on pref and the matching alogritm specified
+     *  in JSTL 8.3.2
+     */
+    protected Locale findMatch(FacesContext context, Locale pref) {
+
+        Locale result = null;
+        Iterator<Locale> it = context.getApplication().getSupportedLocales();
+        while (it.hasNext()) {
+            Locale supportedLocale = it.next();
+
+            if (pref.equals(supportedLocale)) {
+                // exact match
+                result = supportedLocale;
+                break;
+            } else {
+                // Make sure the preferred locale doesn't have country
+                // set, when doing a language match, For ex., if the
+                // preferred locale is "en-US", if one of supported
+                // locales is "en-UK", even though its language matches
+                // that of the preferred locale, we must ignore it.
+                if (pref.getLanguage().equals(supportedLocale.getLanguage()) &&
+                     supportedLocale.getCountry().length() == 0) {
+                    result = supportedLocale;
+                }
+            }
+        }
+        // if it's not in the supported locales,
+        if (null == result) {
+            Locale defaultLocale = context.getApplication().getDefaultLocale();
+            if (defaultLocale != null) {
+                if ( pref.equals(defaultLocale)) {
+                    // exact match
+                    result = defaultLocale;
+                } else {
+                    // Make sure the preferred locale doesn't have country
+                    // set, when doing a language match, For ex., if the
+                    // preferred locale is "en-US", if one of supported
+                    // locales is "en-UK", even though its language matches
+                    // that of the preferred locale, we must ignore it.
+                    if (pref.getLanguage().equals(defaultLocale.getLanguage()) &&
+                         defaultLocale.getCountry().length() == 0) {
+                        result = defaultLocale;
+                    }
+                }
+            }
+        }
+
+        return result;
+
+    }
+
+
+    /**
+     * <p>
+     * Send {@link HttpServletResponse#SC_NOT_FOUND} (404) to the client.
+     * </p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     */
+    protected void send404Error(FacesContext context) {
+
+        try {
+            context.responseComplete();
+            context.getExternalContext().responseSendError(HttpServletResponse.SC_NOT_FOUND, "");
+        } catch (IOException ioe) {
+            throw new FacesException(ioe);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static boolean paramHasValueExpression(UIViewParameter param) {
+
+        return (param.getValueExpression("value") != null);
+
+    }
+
+
+    private static String getStringValueToTransfer(FacesContext context,
+                                                   UIViewParameter param,
+                                                   Collection<UIViewParameter> viewParams) {
+
+        if (viewParams != null && !viewParams.isEmpty()) {
+            for (UIViewParameter candidate : viewParams) {
+                if ((null != candidate.getName() && null != param.getName()) &&
+                    candidate.getName().equals(param.getName())) {
+                    return candidate.getStringValue(context);
+                }
+            }
+        }
+
+        return param.getStringValue(context);
+    }
+
+    // Utility method used by viewId conversion.  Appends the extension
+    // if no extension is present.  Otherwise, replaces the extension.
+    private void appendOrReplaceExtension(String viewId,
+                                          String ext,
+                                          int    length,
+                                          int    extIdx,
+                                          StringBuilder buffer) {
+
+        buffer.setLength(0);
+        buffer.append(viewId);
+
+        if (extIdx != -1) {
+            buffer.replace(extIdx, length, ext);
+        } else {
+            // no extension in the provided viewId, append the suffix
+            buffer.append(ext);
+        }
+    }
+
+    private String legacyConvertViewId(String viewId,
+                                       int length,
+                                       int extIdx,
+                                       StringBuilder buffer) {
+
+        // In 1.2, the viewId was converted by replacing the extension
+        // with the single extension specified by javax.faces.DEFAULT_SUFFIX,
+        // which defaulted to ".jsp".  In 2.0, javax.faces.DEFAULT_SUFFIX
+        // may specify multiple extensions.  If javax.faces.DEFAULT_SUFFIX is
+        // explicitly set, we honor it and pick off the first specified
+        // extension.  If javax.faces.DEFAULT_SUFFIX is not explicitly set,
+        // we honor the default 1.2 behavior and use ".jsp" as the suffix.
+
+        String ext = (extensionsSet && 
+                       !(configuredExtensions.length == 0)) ?
+                          configuredExtensions[0] : ".jsp";
+
+        if (viewId.endsWith(ext)) {
+            return viewId;
+        }
+
+        appendOrReplaceExtension(viewId, ext, length, extIdx, buffer);
+
+        return buffer.toString();
+    }    
+}
diff --git a/com/sun/faces/application/view/StateHolderSaver.java b/com/sun/faces/application/view/StateHolderSaver.java
new file mode 100644
index 0000000..42b3e78
--- /dev/null
+++ b/com/sun/faces/application/view/StateHolderSaver.java
@@ -0,0 +1,180 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import java.io.Serializable;
+
+/**
+ * <p>Helper class for saving and restoring attached objects.</p>
+ */
+class StateHolderSaver implements Serializable {
+
+    private static final long serialVersionUID = 4866548262845392093L;
+
+    private String className = null;
+    private Serializable savedState = null;
+
+    public static final String DYNAMIC_COMPONENT =
+            "com.sun.faces.DynamicComponent";
+    
+    private enum StateHolderTupleIndices {
+        StateHolderSaverInstance,
+        ComponentAddedDynamically,
+        LastMember
+    };
+
+    public boolean componentAddedDynamically() {
+        boolean result = false;
+
+
+        // if the Object to save implemented Serializable but not
+        // StateHolder
+        if (null == className && null != savedState) {
+            return result;
+        }
+
+        // if the Object to save did not implement Serializable or
+        // StateHolder
+        if (className == null) {
+            return result;
+        }
+
+        // else the object to save did implement StateHolder
+
+        if (null != savedState) {
+            // don't need to check transient, since that was done on
+            // the saving side.
+            Serializable [] tuple = (Serializable []) savedState;
+            result = (Boolean) tuple[StateHolderTupleIndices.ComponentAddedDynamically.ordinal()];
+        }
+
+        return result;
+    }
+
+    public StateHolderSaver(FacesContext context, Object toSave) {
+        className = toSave.getClass().getName();
+
+        if (toSave instanceof StateHolder) {
+            // do not save an attached object that is marked transient.
+            if (!((StateHolder) toSave).isTransient()) {
+                Serializable [] tuple = new Serializable[StateHolderTupleIndices.LastMember.ordinal()];
+
+                tuple[StateHolderTupleIndices.StateHolderSaverInstance.ordinal()] =
+                      (Serializable) ((StateHolder) toSave).saveState(context);
+                if (toSave instanceof UIComponent) {
+                    tuple[StateHolderTupleIndices.ComponentAddedDynamically.ordinal()] = ((UIComponent)toSave).getAttributes().containsKey(DYNAMIC_COMPONENT) ? Boolean.TRUE : Boolean.FALSE;
+                }
+                savedState = tuple;
+            } else {
+                className = null;
+            }
+        } else if (toSave instanceof Serializable) {
+            savedState = (Serializable) toSave;
+            className = null;
+        }
+    }
+
+    /**
+     *
+     * @return the restored {@link StateHolder} instance.
+     */
+
+    public Object restore(FacesContext context) throws IllegalStateException {
+        Object result = null;
+        Class toRestoreClass;
+
+        // if the Object to save implemented Serializable but not
+        // StateHolder
+        if (null == className && null != savedState) {
+            return savedState;
+        }
+
+        // if the Object to save did not implement Serializable or
+        // StateHolder
+        if (className == null) {
+            return null;
+        }
+
+        // else the object to save did implement StateHolder
+
+        try {
+            toRestoreClass = loadClass(className, this);
+        }
+        catch (ClassNotFoundException e) {
+            throw new IllegalStateException(e);
+        }
+
+        if (null != toRestoreClass) {
+            try {
+                result = toRestoreClass.newInstance();
+            }
+            catch (InstantiationException e) {
+                throw new IllegalStateException(e);
+            }
+            catch (IllegalAccessException a) {
+                throw new IllegalStateException(a);
+            }
+        }
+
+        if (null != result && null != savedState &&
+            result instanceof StateHolder) {
+            // don't need to check transient, since that was done on
+            // the saving side.
+            Serializable [] tuple = (Serializable []) savedState;
+            ((StateHolder) result).restoreState(context, tuple[StateHolderTupleIndices.StateHolderSaverInstance.ordinal()]);
+        }
+        return result;
+    }
+
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, false, loader);
+    }
+}
diff --git a/com/sun/faces/application/view/ViewDeclarationLanguageFactoryImpl.java b/com/sun/faces/application/view/ViewDeclarationLanguageFactoryImpl.java
new file mode 100644
index 0000000..3e151ee
--- /dev/null
+++ b/com/sun/faces/application/view/ViewDeclarationLanguageFactoryImpl.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.view.ViewDeclarationLanguageFactory;
+
+/**
+ *
+ */
+public class ViewDeclarationLanguageFactoryImpl extends ViewDeclarationLanguageFactory {
+
+    public ViewDeclarationLanguageFactoryImpl() {
+    }
+
+    private ViewHandlingStrategyManager viewHandlingStrategy;
+
+
+    // ------------------------------------ Methods from ViewDeclarationLanguage
+
+
+    /**
+     * @see javax.faces.view.ViewDeclarationLanguageFactory#getViewDeclarationLanguage(String)
+     */
+    @Override
+    public ViewDeclarationLanguage getViewDeclarationLanguage(String viewId) {
+
+        return getViewHandlingStrategyManager().getStrategy(viewId);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private ViewHandlingStrategyManager getViewHandlingStrategyManager() {
+
+        if (viewHandlingStrategy == null) {
+            viewHandlingStrategy =
+                  new ViewHandlingStrategyManager();
+        }
+        return viewHandlingStrategy;
+
+    }
+    
+
+
+
+    
+
+}
diff --git a/com/sun/faces/application/view/ViewHandlingStrategy.java b/com/sun/faces/application/view/ViewHandlingStrategy.java
new file mode 100644
index 0000000..99283c5
--- /dev/null
+++ b/com/sun/faces/application/view/ViewHandlingStrategy.java
@@ -0,0 +1,212 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import java.io.IOException;
+import java.util.Locale;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ExternalContext;
+import javax.faces.view.ViewDeclarationLanguage;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+/**
+ * <p>
+ * This represents how a particular page description language
+ * is to be rendered/restored.
+ * <p>
+ */
+public abstract class ViewHandlingStrategy extends ViewDeclarationLanguage {
+
+    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
+
+    protected ApplicationAssociate associate;
+    protected WebConfiguration webConfig;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ViewHandlingStrategy() {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
+        associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
+
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @see ViewDeclarationLanguage#restoreView(javax.faces.context.FacesContext, String)
+     */
+    @Override
+    public UIViewRoot restoreView(FacesContext ctx,
+                                  String viewId) {
+
+        ExternalContext extContext = ctx.getExternalContext();
+
+        String mapping = Util.getFacesMapping(ctx);
+        UIViewRoot viewRoot = null;
+
+        // maping could be null if a non-faces request triggered
+        // this response.
+        if (extContext.getRequestPathInfo() == null && mapping != null &&
+            Util.isPrefixMapped(mapping)) {
+            // this was probably an initial request
+            // send them off to the root of the web application
+            try {
+                ctx.responseComplete();
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE, "Response Complete for" + viewId);
+                }
+                if (!extContext.isResponseCommitted()) {
+                    extContext.redirect(extContext.getRequestContextPath());
+                }
+            } catch (IOException ioe) {
+                throw new FacesException(ioe);
+            }
+        } else {
+            // this is necessary to allow decorated impls.
+            ViewHandler outerViewHandler =
+                  ctx.getApplication().getViewHandler();
+            String renderKitId =
+                  outerViewHandler.calculateRenderKitId(ctx);
+            viewRoot = Util.getStateManager(ctx).restoreView(ctx,
+                                                             viewId,
+                                                             renderKitId);
+        }
+
+        return viewRoot;
+        
+    }
+
+    
+    /**
+     * @see ViewDeclarationLanguage#createView(javax.faces.context.FacesContext, String)
+     */
+    @Override
+    public UIViewRoot createView(FacesContext ctx,
+                                 String viewId) {
+
+        Util.notNull("context", ctx);
+
+        UIViewRoot result = (UIViewRoot)
+              ctx.getApplication()
+                    .createComponent(UIViewRoot.COMPONENT_TYPE);
+
+        Locale locale = null;
+        String renderKitId = null;
+
+        // use the locale from the previous view if is was one which will be
+        // the case if this is called from NavigationHandler. There wouldn't be
+        // one for the initial case.
+        if (ctx.getViewRoot() != null) {
+            locale = ctx.getViewRoot().getLocale();
+            renderKitId = ctx.getViewRoot().getRenderKitId();
+        }
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE, "Created new view for " + viewId);
+        }
+        // PENDING(): not sure if we should set the RenderKitId here.
+        // The UIViewRoot ctor sets the renderKitId to the default
+        // one.
+        // if there was no locale from the previous view, calculate the locale
+        // for this view.
+        if (locale == null) {
+            locale = ctx.getApplication().getViewHandler().calculateLocale(ctx);
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine(
+                      "Locale for this view as determined by calculateLocale "
+                      + locale.toString());
+            }
+        } else {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Using locale from previous view "
+                            + locale.toString());
+            }
+        }
+
+        if (renderKitId == null) {
+            renderKitId =
+                  ctx.getApplication().getViewHandler()
+                        .calculateRenderKitId(ctx);
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine(
+                      "RenderKitId for this view as determined by calculateRenderKitId "
+                      + renderKitId);
+            }
+        } else {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Using renderKitId from previous view "
+                            + renderKitId);
+            }
+        }
+
+        result.setLocale(locale);
+        result.setRenderKitId(renderKitId);
+        result.setViewId(viewId);
+
+        return result;
+    }
+
+    /**
+     *
+     * @param viewId the view ID
+     * @return <code>true</code> if this <code>ViewHandlingStrategy</code>
+     *  handles the the view type represented by <code>viewId</code>
+     */
+    
+    public abstract boolean handlesViewId(String viewId);
+
+
+}
diff --git a/com/sun/faces/application/view/ViewHandlingStrategyManager.java b/com/sun/faces/application/view/ViewHandlingStrategyManager.java
new file mode 100644
index 0000000..3c8d29b
--- /dev/null
+++ b/com/sun/faces/application/view/ViewHandlingStrategyManager.java
@@ -0,0 +1,129 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import com.sun.faces.config.WebConfiguration;
+
+/**
+ * Interface for working with multiple {@link com.sun.faces.application.view.ViewHandlingStrategy}
+ * implementations.
+ */
+public class ViewHandlingStrategyManager {
+
+    // The strategies associate with this instance
+    private volatile ViewHandlingStrategy[] strategies;
+    
+
+    // ------------------------------------------------------------- Constructor
+
+
+    /**
+     * Be default, if {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#DisableFaceletJSFViewHandler}
+     * isn't enabled, the strategies available (in order) will be {@link FaceletViewHandlingStrategy}
+     * and {@link com.sun.faces.application.view.JspViewHandlingStrategy}.  Otherwise, only the
+     * {@link com.sun.faces.application.view.JspViewHandlingStrategy} will be available.
+     */
+    public ViewHandlingStrategyManager() {
+
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        boolean pdlDisabled = webConfig
+              .isOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler);
+        strategies = ((pdlDisabled)
+                      ? new ViewHandlingStrategy[] { new JspViewHandlingStrategy() }
+                      : new ViewHandlingStrategy[] { new FaceletViewHandlingStrategy(),
+                                                     new JspViewHandlingStrategy() });
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>
+     * Iterate through the available {@link com.sun.faces.application.view.ViewHandlingStrategy}
+     * implementations.  The first one to return true from {@link com.sun.faces.application.view.ViewHandlingStrategy#handlesViewId(String)}
+     * will be the {@link com.sun.faces.application.view.ViewHandlingStrategy} returned.
+     * <p>
+     *
+     * @param viewId the viewId to match a {@link com.sun.faces.application.view.ViewHandlingStrategy} to
+     *
+     * @throws ViewHandlingStrategyNotFoundException if no match is found.
+     *
+     * @return a {@link com.sun.faces.application.view.ViewHandlingStrategy} for
+     *  the specifed <code>viewId</code>
+     */
+    public ViewHandlingStrategy getStrategy(String viewId) {
+
+        for (ViewHandlingStrategy strategy : strategies) {
+            if (strategy.handlesViewId(viewId)) {
+                return strategy;
+            }
+        }
+        throw new ViewHandlingStrategyNotFoundException();
+        
+    }
+
+
+    /**
+     * @return the currently registered {@link com.sun.faces.application.view.ViewHandlingStrategy}
+     *  implementations.
+     */
+    public ViewHandlingStrategy[] getViewHandlingStrategies() {
+
+        return strategies.clone();
+
+    }
+
+
+    /**
+     * Update the {@link com.sun.faces.application.view.ViewHandlingStrategy} implementations
+     * to be applied when processing JSF requests.
+     * @param stratagies the new view handling strategies
+     */
+    public synchronized void setViewHandlingStrategies(ViewHandlingStrategy[] stratagies) {
+
+        this.strategies = stratagies.clone();
+        
+    }
+
+
+}
diff --git a/com/sun/faces/application/view/ViewHandlingStrategyNotFoundException.java b/com/sun/faces/application/view/ViewHandlingStrategyNotFoundException.java
new file mode 100644
index 0000000..0919299
--- /dev/null
+++ b/com/sun/faces/application/view/ViewHandlingStrategyNotFoundException.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import javax.faces.FacesException;
+
+/**
+ * Indicates that no {@link com.sun.faces.application.view.ViewHandlingStrategy}
+ * instances were found appropriate to a particulare view ID.
+ */
+public class ViewHandlingStrategyNotFoundException extends FacesException {
+
+    private static final long serialVersionUID = 542553047788916981L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+    /**
+     * @see FacesException#FacesException() 
+     */
+    public ViewHandlingStrategyNotFoundException() {
+
+        super();
+
+    }
+
+
+}
diff --git a/com/sun/faces/application/view/ViewMetadataImpl.java b/com/sun/faces/application/view/ViewMetadataImpl.java
new file mode 100644
index 0000000..808f7fe
--- /dev/null
+++ b/com/sun/faces/application/view/ViewMetadataImpl.java
@@ -0,0 +1,165 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import com.sun.faces.RIConstants;
+import javax.faces.view.facelets.Facelet;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.context.FacesFileNotFoundException;
+
+
+import com.sun.faces.facelets.impl.DefaultFaceletFactory;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import javax.faces.view.ViewMetadata;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.FacesException;
+import javax.faces.application.ViewHandler;
+
+
+/**
+ * @see javax.faces.view.ViewMetadata
+ */
+public class ViewMetadataImpl extends ViewMetadata {
+
+    private String viewId;
+    private DefaultFaceletFactory faceletFactory;
+    
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ViewMetadataImpl(String viewId) {
+
+        this.viewId = viewId;
+
+    }
+
+
+    // ----------------------------------------------- Methods from ViewMetadata
+
+
+    /**
+     * @see javax.faces.view.ViewMetadata#getViewId()
+     */
+    @Override
+    public String getViewId() {
+
+        return viewId;
+
+    }
+
+    /**
+     * @see javax.faces.view.ViewMetadata#createMetadataView(javax.faces.context.FacesContext)
+     */
+    @Override
+    public UIViewRoot createMetadataView(FacesContext context) {
+
+        UIViewRoot result = null;
+        UIViewRoot currentViewRoot = context.getViewRoot();
+        Map<String, Object> currentViewMapShallowCopy = Collections.emptyMap();
+        
+        try {
+            context.setProcessingEvents(false);
+            if (faceletFactory == null) {
+                ApplicationAssociate associate = ApplicationAssociate
+                      .getInstance(context.getExternalContext());
+                faceletFactory = associate.getFaceletFactory();
+                assert (faceletFactory != null);
+            }
+            ViewHandler vh = context.getApplication().getViewHandler();
+            result = vh.createView(context, viewId);
+
+            // Stash away view id before invoking handlers so that 
+            // StateContext.partialStateSaving() can determine the current
+            // view. 
+            context.getAttributes().put(RIConstants.VIEWID_KEY_NAME, viewId);
+            // If the currentViewRoot has a viewMap, make sure the entries are
+            // copied to the temporary UIViewRoot before invoking handlers.
+            if (null != currentViewRoot) {
+                Map<String, Object> currentViewMap = currentViewRoot.getViewMap(false);
+
+                if (null != currentViewMap && !currentViewMap.isEmpty()) {
+                    currentViewMapShallowCopy = new HashMap<String, Object>(currentViewMap);
+                    Map<String, Object> resultViewMap = result.getViewMap(true);
+                    resultViewMap.putAll(currentViewMapShallowCopy);
+                }
+            }
+            
+            // Only replace the current context's UIViewRoot if there is 
+            // one to replace.
+            if (null != currentViewRoot) {
+                // This clear's the ViewMap of the current UIViewRoot before
+                // setting the argument as the new UIViewRoot.
+                context.setViewRoot(result);
+            }
+
+            Facelet f = faceletFactory.getMetadataFacelet(context, result.getViewId());
+
+            f.apply(context, result);
+        } catch (FacesFileNotFoundException ffnfe) {
+            try {
+                context.getExternalContext().responseSendError(404, ffnfe.getMessage());
+            } catch(IOException ioe) {}
+            context.responseComplete();
+        } catch (IOException ioe) {
+            throw new FacesException(ioe);
+        } finally {
+            context.getAttributes().remove(RIConstants.VIEWID_KEY_NAME);
+            context.setProcessingEvents(true);
+            if (null != currentViewRoot) {
+                context.setViewRoot(currentViewRoot);
+                if (!currentViewMapShallowCopy.isEmpty()) {
+                    currentViewRoot.getViewMap(true).putAll(currentViewMapShallowCopy);
+                    currentViewMapShallowCopy.clear();
+                }
+            }
+            
+        }
+
+        return result;
+        
+    }
+
+}
diff --git a/com/sun/faces/application/view/ViewScopeContext.java b/com/sun/faces/application/view/ViewScopeContext.java
new file mode 100644
index 0000000..567e476
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopeContext.java
@@ -0,0 +1,174 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.ContextNotActiveException;
+import javax.enterprise.context.spi.Context;
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.view.ViewScoped;
+
+/**
+ * The CDI context for CDI ViewScoped beans.
+ */
+public class ViewScopeContext implements Context, Serializable {
+
+    /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = Logger.getLogger(ViewScopeContext.class.getName());
+    /**
+     * Stores the serial version UID.
+     */
+    private static final long serialVersionUID = -6245899073989073951L;
+
+    /**
+     * Constructor.
+     */
+    public ViewScopeContext() {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Creating ViewScope CDI context");
+        }
+    }
+
+    /**
+     * Assert the context is active, otherwise throw ContextNotActiveException.
+     */
+    @SuppressWarnings({"FinalPrivateMethod"})
+    private final void assertNotReleased() {
+        if (!isActive()) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "Trying to access ViewScope CDI context while it is not active");
+            }
+            throw new ContextNotActiveException();
+        }
+    }
+
+
+    /**
+     * Get the ViewScoped bean for the given contextual.
+     *
+     * @param <T> the type.
+     * @param contextual the contextual.
+     * @return the view scoped bean, or null if not found.
+     */
+    @Override
+    public <T> T get(Contextual<T> contextual) {
+        assertNotReleased();
+
+        T result = null;
+        
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        if (facesContext != null) {
+            ViewScopeManager manager = ViewScopeManager.getInstance(facesContext);
+            if (manager != null) {
+                result = manager.getContextManager().getBean(facesContext, contextual);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Get the existing instance of the ViewScoped bean for the given contextual
+     * or create a new one.
+     *
+     * @param <T> the type.
+     * @param contextual the contextual.
+     * @param creational the creational.
+     * @return the instance.
+     * @throws ContextNotActiveException when the context is not active.
+     */
+    @Override
+    public <T> T get(Contextual<T> contextual, CreationalContext<T> creational) {
+        assertNotReleased();
+
+        T result = get(contextual);
+
+        if (result == null) {
+            FacesContext facesContext = FacesContext.getCurrentInstance();
+            if (facesContext != null) {
+                ViewScopeManager manager = ViewScopeManager.getInstance(facesContext);
+                result = (T) manager.getContextManager().getBean(facesContext, contextual);
+                if (result == null) {
+                    result = (T) manager.getContextManager().createBean(facesContext, contextual, creational);
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Get the class of the scope object.
+     *
+     * @return the class.
+     */
+    @Override
+    public Class<? extends Annotation> getScope() {
+        return ViewScoped.class;
+    }
+
+    /**
+     * Determine if the context is active.
+     *
+     * @return true if there is a view root, false otherwise.
+     */
+    @Override
+    public boolean isActive() {
+        boolean result = false;
+
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        if (facesContext != null) {
+            UIViewRoot viewRoot = facesContext.getViewRoot();
+            if (viewRoot != null) {
+                result = true;
+            }
+        }
+
+        return result;
+    }
+}
diff --git a/com/sun/faces/application/view/ViewScopeContextManager.java b/com/sun/faces/application/view/ViewScopeContextManager.java
new file mode 100644
index 0000000..6962515
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopeContextManager.java
@@ -0,0 +1,386 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.PassivationCapable;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.inject.Named;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
+
+/**
+ * The manager that deals with CDI ViewScoped beans.
+ */
+public class ViewScopeContextManager {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION_VIEW.getLogger();
+    private boolean isCdiOneOneOrGreater;
+    private Class viewScopedCDIEventFireHelperImplClass;
+    /**
+     * Stores the constant to keep track of all the active view scope contexts.
+     */
+    private static final String ACTIVE_VIEW_CONTEXTS = "com.sun.faces.application.view.activeViewContexts";
+    /**
+     * Stores the constants to keep track of the active view maps.
+     */
+    private static final String ACTIVE_VIEW_MAPS = "com.sun.faces.application.view.activeViewMaps";
+    private final BeanManager beanManager;
+
+    public ViewScopeContextManager() {
+        isCdiOneOneOrGreater = Util.isCdiOneOneOrGreater();
+        try {
+            viewScopedCDIEventFireHelperImplClass = Class.forName("com.sun.faces.application.view.ViewScopedCDIEventFireHelperImpl");
+        } catch (ClassNotFoundException ex) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "CDI 1.1 events not enabled", ex);
+            }
+        }
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        beanManager = (BeanManager) Util.getCDIBeanManager(facesContext.getExternalContext().getApplicationMap());
+    }
+
+    /**
+     * Clear the current view map using the Faces context.
+     *
+     * @param facesContext the Faces context.
+     */
+    public void clear(FacesContext facesContext) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Clearing @ViewScoped CDI beans for current view map");
+        }
+        Map<String, Object> viewMap = facesContext.getViewRoot().getViewMap(false);
+        Map<String, ViewScopeContextObject> contextMap = getContextMap(facesContext, false);
+        if (contextMap != null) {
+            destroyBeans(viewMap, contextMap);
+        }
+    }
+
+    /**
+     * Clear the given view map.
+     *
+     * @param facesContext the Faces context.
+     * @param viewMap the given view map.
+     */
+    public void clear(FacesContext facesContext, Map<String, Object> viewMap) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Clearing @ViewScoped CDI beans for given view map: {0}");
+        }
+        Map<String, ViewScopeContextObject> contextMap = getContextMap(facesContext, viewMap);
+        if (contextMap != null) {
+            destroyBeans(viewMap, contextMap);
+        }
+    }
+
+    /**
+     * Create the bean.
+     *
+     * @param <T> the type.
+     * @param facesContext the faces context.
+     * @param contextual the contextual.
+     * @param creational the creational.
+     * @return the value or null if not found.
+     */
+    public <T> T createBean(FacesContext facesContext, Contextual<T> contextual, CreationalContext<T> creational) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Creating @ViewScoped CDI bean using contextual: {0}", contextual);
+        }
+
+        if (!(contextual instanceof PassivationCapable)) {
+            throw new IllegalArgumentException("ViewScoped bean " + contextual.toString() + " must be PassivationCapable, but is not.");
+        }
+            
+        T result = contextual.create(creational);
+
+        if (result != null) {
+            String name = getName(result);
+            facesContext.getViewRoot().getViewMap(true).put(name, result);
+            String passivationCapableId = ((PassivationCapable)contextual).getId();
+            
+            getContextMap(facesContext).put(passivationCapableId, 
+                    new ViewScopeContextObject(passivationCapableId, name));
+        }
+
+        return result;
+    }
+
+    /**
+     * Destroy the view scoped beans for the given view and context map.
+     *
+     * @param viewMap the view map.
+     * @param contextMap the context map.
+     */
+    private void destroyBeans(
+            Map<String, Object> viewMap, Map<String, ViewScopeContextObject> contextMap) {
+        ArrayList<String> removalNameList = new ArrayList<String>();
+
+        if (contextMap != null) {
+            for (Map.Entry<String, ViewScopeContextObject> entry : contextMap.entrySet()) {
+                String passivationCapableId = entry.getKey();
+                Contextual contextual = beanManager.getPassivationCapableBean(passivationCapableId);
+                
+                ViewScopeContextObject contextObject = entry.getValue();
+                CreationalContext creationalContext = beanManager.createCreationalContext(contextual);
+                // We can no longer get this from the contextObject. Instead we must call
+                // beanManager.createCreationalContext(contextual)
+                contextual.destroy(viewMap.get(contextObject.getName()), creationalContext);
+                removalNameList.add(contextObject.getName());
+            }
+
+            Iterator<String> removalNames = removalNameList.iterator();
+            while (removalNames.hasNext()) {
+                String name = removalNames.next();
+                viewMap.remove(name);
+            }
+        }
+    }
+
+    /**
+     * Get the value from the view map (or null if not found).
+     *
+     * @param <T> the type.
+     * @param facesContext the faces context.
+     * @param contextual the contextual.
+     * @return the value or null if not found.
+     */
+    public <T> T getBean(FacesContext facesContext, Contextual<T> contextual) {
+        T result = null;
+        Map<String, ViewScopeContextObject> contextMap = getContextMap(facesContext);
+
+        if (contextMap != null) {
+            if (!(contextual instanceof PassivationCapable)) {
+                throw new IllegalArgumentException("ViewScoped bean " + contextual.toString() + " must be PassivationCapable, but is not.");
+            }
+            
+            ViewScopeContextObject contextObject = contextMap.get(((PassivationCapable)contextual).getId());
+
+            if (contextObject != null) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Getting value for @ViewScoped bean with name: {0}", contextObject.getName());
+                }
+                result = (T) facesContext.getViewRoot().getViewMap(true).get(contextObject.getName());
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Get the context map.
+     *
+     * @param facesContext the Faces context.
+     * @return the context map.
+     */
+    private Map<String, ViewScopeContextObject> getContextMap(FacesContext facesContext) {
+        return getContextMap(facesContext, true);
+    }
+
+    /**
+     * Get the context map.
+     *
+     * @param facesContext the Faces context.
+     * @param create flag to indicate if we are creating the context map.
+     * @return the context map.
+     */
+    private Map<String, ViewScopeContextObject> getContextMap(FacesContext facesContext, boolean create) {
+        Map<String, ViewScopeContextObject> result = null;
+
+        ExternalContext externalContext = facesContext.getExternalContext();
+        if (externalContext != null) {
+            Map<String, Object> sessionMap = externalContext.getSessionMap();
+            Map<Object, Map<String, ViewScopeContextObject>> activeViewScopeContexts =
+                    (Map<Object, Map<String, ViewScopeContextObject>>) sessionMap.get(ACTIVE_VIEW_CONTEXTS);
+            Map<String, Object> viewMap = facesContext.getViewRoot().getViewMap(false);
+
+            if (activeViewScopeContexts == null && create) {
+                synchronized (sessionMap) {
+                    activeViewScopeContexts = new ConcurrentHashMap<Object, Map<String, ViewScopeContextObject>>();
+                    sessionMap.put(ACTIVE_VIEW_CONTEXTS, activeViewScopeContexts);
+                }
+            }
+
+            if (activeViewScopeContexts != null && create) {
+                synchronized (activeViewScopeContexts) {
+                    if (!activeViewScopeContexts.containsKey(System.identityHashCode(viewMap)) && create) {
+                        activeViewScopeContexts.put(System.identityHashCode(viewMap),
+                                new ConcurrentHashMap<String, ViewScopeContextObject>());
+                        // If we are distributable, this will result in a dirtying of the
+                        // session data, forcing replication.  If we are not distributable,
+                        // this is a no-op.
+                        sessionMap.put(ACTIVE_VIEW_CONTEXTS, activeViewScopeContexts);
+                        
+                    }
+                }
+            }
+
+            if (activeViewScopeContexts != null) {
+                result = activeViewScopeContexts.get(System.identityHashCode(viewMap));
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Get the context map.
+     *
+     * @param facesContext the Faces context.
+     * @param create flag to indicate if we are creating the context map.
+     * @return the context map.
+     */
+    private Map<String, ViewScopeContextObject> getContextMap(FacesContext facesContext, Map<String, Object> viewMap) {
+        Map<String, ViewScopeContextObject> result = null;
+
+        ExternalContext externalContext = facesContext.getExternalContext();
+        if (externalContext != null) {
+            Map<String, Object> sessionMap = externalContext.getSessionMap();
+            Map<Object, Map<String, ViewScopeContextObject>> activeViewScopeContexts =
+                    (Map<Object, Map<String, ViewScopeContextObject>>) sessionMap.get(ACTIVE_VIEW_CONTEXTS);
+
+            if (activeViewScopeContexts != null) {
+                result = activeViewScopeContexts.get(System.identityHashCode(viewMap));
+            }
+        }
+
+        return result;
+    }
+    
+    /**
+     * Get the name of the bean for the given object.
+     *
+     * @param instance the object.
+     * @return the name.
+     */
+    private String getName(Object instance) {
+        String name = instance.getClass().getSimpleName().substring(0, 1).toLowerCase()
+                + instance.getClass().getSimpleName().substring(1);
+
+        Named named = instance.getClass().getAnnotation(Named.class);
+        if (named != null && named.value() != null && !named.value().trim().equals("")) {
+            name = named.value();
+        }
+        return name;
+    }
+
+    /**
+     * Called when a session destroyed.
+     *
+     * @param hse the HTTP session event.
+     */
+    public void sessionDestroyed(HttpSessionEvent hse) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Cleaning up session for CDI @ViewScoped beans");
+        }
+
+        HttpSession session = hse.getSession();
+
+        Map<Object, Map<String, ViewScopeContextObject>> activeViewScopeContexts =
+                (Map<Object, Map<String, ViewScopeContextObject>>) session.getAttribute(ACTIVE_VIEW_CONTEXTS);
+
+        if (activeViewScopeContexts != null) {
+            Map<String, Object> activeViewMaps = (Map<String, Object>) session.getAttribute(ACTIVE_VIEW_MAPS);
+            if (activeViewMaps != null) {
+                Iterator<Object> activeViewMapsIterator = activeViewMaps.values().iterator();
+                while (activeViewMapsIterator.hasNext()) {
+                    Map<String, Object> instanceMap = (Map<String, Object>) activeViewMapsIterator.next();
+                    Map<String, ViewScopeContextObject> contextMap =
+                            activeViewScopeContexts.get(System.identityHashCode(instanceMap));
+                    destroyBeans(instanceMap, contextMap);
+                }
+            }
+
+            activeViewScopeContexts.clear();
+            session.removeAttribute(ACTIVE_VIEW_CONTEXTS);
+        }
+    }
+
+    public void fireInitializedEvent(FacesContext facesContext, UIViewRoot root) {
+        if (isCdiOneOneOrGreater && null != viewScopedCDIEventFireHelperImplClass) {
+            BeanManager beanManager = (BeanManager) Util.getCDIBeanManager(facesContext.getExternalContext().getApplicationMap());
+            if (null != beanManager) {
+                Set<Bean<?>> availableBeans = beanManager.getBeans(viewScopedCDIEventFireHelperImplClass);
+                if (null != availableBeans && !availableBeans.isEmpty()) {
+                    Bean<?> bean = beanManager.resolve(availableBeans);
+                    CreationalContext<?> creationalContext =
+                            beanManager.createCreationalContext(null);
+                    ViewScopedCDIEventFireHelper eventHelper =
+                            (ViewScopedCDIEventFireHelper) beanManager.getReference(bean, bean.getBeanClass(),
+                            creationalContext);
+                    eventHelper.fireInitializedEvent(root);
+                }
+            }
+
+        }
+
+    }
+
+    public void fireDestroyedEvent(FacesContext facesContext, UIViewRoot root) {
+        if (isCdiOneOneOrGreater && null != viewScopedCDIEventFireHelperImplClass) {
+            BeanManager beanManager = (BeanManager) Util.getCDIBeanManager(facesContext.getExternalContext().getApplicationMap());
+            if (null != beanManager) {
+                Set<Bean<?>> availableBeans = beanManager.getBeans(viewScopedCDIEventFireHelperImplClass);
+                if (null != availableBeans && !availableBeans.isEmpty()) {
+                    Bean<?> bean = beanManager.resolve(availableBeans);
+                    CreationalContext<?> creationalContext =
+                            beanManager.createCreationalContext(null);
+                    ViewScopedCDIEventFireHelper eventHelper =
+                            (ViewScopedCDIEventFireHelper) beanManager.getReference(bean, bean.getBeanClass(),
+                            creationalContext);
+                    eventHelper.fireDestroyedEvent(root);
+                }
+            }
+        }
+
+    }
+}
diff --git a/com/sun/faces/application/view/ViewScopeContextObject.java b/com/sun/faces/application/view/ViewScopeContextObject.java
new file mode 100644
index 0000000..cc61ebb
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopeContextObject.java
@@ -0,0 +1,94 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import java.io.Serializable;
+
+/**
+ * An object used by ViewScopeContext to keep track of contextual and creational
+ * context.
+ */
+class ViewScopeContextObject implements Serializable {
+    private static final long serialVersionUID = 370695657651519831L;
+
+    private String passivationCapableId; 
+
+    /**
+     * Stores the name.
+     */
+    private String name;
+
+    /**
+     * Constructor.
+     *
+     * @param passivationCapableId the return from PassivationCapable.getId().
+     * @param creationalContext the creational context.
+     */
+    public ViewScopeContextObject(String passivationCapableId, String name) {
+        this.passivationCapableId = passivationCapableId;
+        this.name = name;
+    }
+
+    public String getPassivationCapableId() {
+        return this.passivationCapableId;
+    }
+    
+    /*
+     * Get the name.
+     * 
+     * @return the name.
+     */
+    public String getName() {
+        return this.name;
+    }
+
+    public void setPassivationCapableId(String passivationCapableId) {
+        this.passivationCapableId = passivationCapableId;
+    }
+
+    /**
+     * Set the name.
+     *
+     * @param name the name.
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+}
diff --git a/com/sun/faces/application/view/ViewScopeEventListener.java b/com/sun/faces/application/view/ViewScopeEventListener.java
new file mode 100644
index 0000000..56ac81a
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopeEventListener.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.ViewMapListener;
+
+/**
+ * The ViewScope event listener.
+ *
+ * <p> To make it so the UIViewRoot.getViewMap is as independent as possible
+ * from implementation specific code we need to get notified when a view map is
+ * created or destroyed. This ViewMapListener is registered so we get notified
+ * of these events. </p>
+ *
+ * <p> See jsf-ri-config.xml for the actual registration of this listener. </p>
+ */
+public class ViewScopeEventListener implements ViewMapListener {
+
+    /**
+     * Handle the system event.
+     *
+     * @param se the system event.
+     * @throws AbortProcessingException
+     */
+    @Override
+    public void processEvent(SystemEvent se) throws AbortProcessingException {
+        ViewScopeManager.getInstance(FacesContext.getCurrentInstance()).processEvent(se);
+    }
+
+    /**
+     * Is listener for.
+     *
+     * @param source the source.
+     * @return true if UIViewRoot, false otherwise.
+     */
+    @Override
+    public boolean isListenerForSource(Object source) {
+        return (source instanceof UIViewRoot);
+    }
+}
diff --git a/com/sun/faces/application/view/ViewScopeExtension.java b/com/sun/faces/application/view/ViewScopeExtension.java
new file mode 100644
index 0000000..a7cfde2
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopeExtension.java
@@ -0,0 +1,145 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.cdi11.CDIUtil;
+import java.util.ServiceLoader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.faces.view.ViewScoped;
+
+/**
+ * The CDI extension that makes ViewScoped beans work in a CDI context.
+ */
+public class ViewScopeExtension implements Extension {
+
+   private boolean isCdiOneOneOrGreater = false;
+   private CDIUtil cdiUtil = null;
+
+   /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = FacesLogger.APPLICATION_VIEW.getLogger();
+
+    /**
+     * Constructor.
+     */
+    public ViewScopeExtension() {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("Constructor @ViewScoped CDI Extension called");
+        }
+        isCdiOneOneOrGreater = Util.isCdiOneOneOrGreater();
+    }
+
+    /**
+     * Processing bean.
+     *
+     * @param event the event.
+     */
+    public void processBean(@Observes ProcessBean<?> event) {
+        ViewScoped viewScoped = event.getAnnotated().getAnnotation(ViewScoped.class);
+        if (viewScoped != null && LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("Processing occurrence of @ViewScoped");
+        }
+
+    }
+    
+    public void beforeBeanDiscovery(@Observes final BeforeBeanDiscovery event, BeanManager beanManager) {
+        event.addScope(ViewScoped.class, true, true);
+    }
+
+    /**
+     * After bean discovery.
+     *
+     * @param event the event.
+     */
+    public void afterBeanDiscovery(@Observes final AfterBeanDiscovery event, BeanManager beanManager) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.finest("Adding @ViewScoped context to CDI runtime");
+        }
+        event.addContext(new ViewScopeContext());
+        
+
+       if (isCdiOneOneOrGreater) {
+           Class clazz = null;
+           try {
+               clazz = Class.forName("com.sun.faces.application.view.ViewScopedCDIEventFireHelperImpl");
+           } catch (ClassNotFoundException ex) {
+               if (LOGGER.isLoggable(Level.SEVERE)) {
+                   LOGGER.log(Level.SEVERE, "CDI 1.1 events not enabled", ex);
+               }
+               return;
+           }
+           
+           if (null == cdiUtil) {
+               ServiceLoader<CDIUtil> oneCdiUtil = ServiceLoader.load(CDIUtil.class);
+               for (CDIUtil oneAndOnly : oneCdiUtil) {
+                   if (null != cdiUtil) {
+                       String message = "Must only have one implementation of CDIUtil available";
+                       if (LOGGER.isLoggable(Level.SEVERE)) {
+                           LOGGER.log(Level.SEVERE, message);
+                       }
+                       throw new IllegalStateException(message);
+                   }
+                   cdiUtil = oneAndOnly;
+               }
+           }
+           
+           if (null != cdiUtil) {
+               Bean bean = cdiUtil.createHelperBean(beanManager, clazz);
+               event.addBean(bean);
+           } else if (LOGGER.isLoggable(Level.SEVERE)) {
+               LOGGER.log(Level.SEVERE, "Unable to obtain CDI 1.1 utilities for Mojarra");
+           }
+       }
+        
+    }
+    
+    
+}
diff --git a/com/sun/faces/application/view/ViewScopeManager.java b/com/sun/faces/application/view/ViewScopeManager.java
new file mode 100644
index 0000000..8b2b8fe
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopeManager.java
@@ -0,0 +1,406 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.config.WebConfiguration;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableDistributable;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.util.LRUMap;
+import com.sun.faces.util.Util;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostConstructViewMapEvent;
+import javax.faces.event.PreDestroyViewMapEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.ViewMapListener;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
+
+/**
+ * The manager that deals with non-CDI and CDI ViewScoped beans.
+ */
+public class ViewScopeManager implements HttpSessionListener, ViewMapListener {
+
+    /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = Logger.getLogger(ViewScopeManager.class.getName());
+    /**
+     * Stores the constants to keep track of the active view maps.
+     */
+    public static final String ACTIVE_VIEW_MAPS = "com.sun.faces.application.view.activeViewMaps";
+    /**
+     * Stores the constant for the maximum active view map size.
+     */
+    public static final String ACTIVE_VIEW_MAPS_SIZE = "com.sun.faces.application.view.activeViewMapsSize";
+    /**
+     * Stores the view map.
+     */
+    public static final String VIEW_MAP = "com.sun.faces.application.view.viewMap";
+    /**
+     * Stores the view map id.
+     */
+    public static final String VIEW_MAP_ID = "com.sun.faces.application.view.viewMapId";
+    /**
+     * Stores the constant to keep track of the ViewScopeManager.
+     */
+    public static final String VIEW_SCOPE_MANAGER = "com.sun.faces.application.view.viewScopeManager";
+    /**
+     * Stores the CDI context manager.
+     */
+    private ViewScopeContextManager contextManager;
+    
+    private boolean distributable;
+
+    /**
+     * Constructor.
+     */
+    public ViewScopeManager() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        try {
+            if (Util.isCDIAvailable(context.getExternalContext().getApplicationMap())) {
+                contextManager = new ViewScopeContextManager();
+            } else {
+                contextManager = null;
+            }
+        } catch (Exception exception) {
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.log(Level.INFO, "CDI @ViewScoped manager unavailable", exception);
+            }
+        }
+        WebConfiguration config = WebConfiguration.getInstance(context.getExternalContext());
+        distributable = config.isOptionEnabled(EnableDistributable);
+        
+    }
+
+    /**
+     * Clear the current view map using the Faces context.
+     *
+     * @param facesContext the Faces context.
+     */
+    public void clear(FacesContext facesContext) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Clearing @ViewScoped beans from current view map");
+        }
+
+        if (contextManager != null) {
+            contextManager.clear(facesContext);
+        }
+
+        destroyBeans(facesContext, facesContext.getViewRoot().getViewMap(false));
+    }
+
+    /**
+     * Clear the given view map.
+     *
+     * @param facesContext the Faces context.
+     * @param viewMap the view map.
+     */
+    public void clear(FacesContext facesContext, Map<String, Object> viewMap) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Clearing @ViewScoped beans from view map: {0}", viewMap);
+        }
+
+        if (contextManager != null) {
+            contextManager.clear(facesContext, viewMap);
+        }
+
+        destroyBeans(facesContext, viewMap);
+    }
+
+    /**
+     * Destroy the managed beans from the given view map.
+     *
+     * @param applicationAssociate the application associate.
+     * @param viewMap the view map.
+     */
+    private void destroyBeans(ApplicationAssociate applicationAssociate, Map<String, Object> viewMap) {
+        for (Map.Entry<String, Object> entry : viewMap.entrySet()) {
+            String name = entry.getKey();
+            Object bean = entry.getValue();
+
+            try {
+                if (applicationAssociate != null) {
+                    BeanManager beanManager = applicationAssociate.getBeanManager();
+                    if (beanManager != null && beanManager.isManaged(name)) {
+                        beanManager.destroy(name, bean);
+                    }
+                }
+            } catch (Exception exception) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, "Error calling @PreDestroy on bean with name: " + name, exception);
+                }
+            }
+        }
+    }
+
+    /**
+     * Destroy the managed beans from the given view map.
+     *
+     * @param facesContext the Faces Context.
+     * @param viewMap the view map.
+     */
+    public void destroyBeans(FacesContext facesContext, Map<String, Object> viewMap) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Destroying @ViewScoped beans from view map: {0}", viewMap);
+        }
+        ApplicationAssociate applicationAssociate = ApplicationAssociate.getInstance(facesContext.getExternalContext());
+        if (applicationAssociate != null) {
+            destroyBeans(applicationAssociate, viewMap);
+        }
+    }
+
+    /**
+     * Get the CDI context manager.
+     *
+     * @return the CDI context manager.
+     */
+    ViewScopeContextManager getContextManager() {
+        return this.contextManager;
+    }
+
+    /**
+     * Get our instance.
+     *
+     * @param facesContext the FacesContext.
+     */
+    public static ViewScopeManager getInstance(FacesContext facesContext) {
+        if (!facesContext.getExternalContext().getApplicationMap().containsKey(VIEW_SCOPE_MANAGER)) {
+            facesContext.getExternalContext().getApplicationMap().put(VIEW_SCOPE_MANAGER, new ViewScopeManager());
+        }
+        return (ViewScopeManager) facesContext.getExternalContext().getApplicationMap().get(VIEW_SCOPE_MANAGER);
+    }
+
+    /**
+     * Is a listener for the given source.
+     *
+     * @param source the source.
+     * @return true if UIViewRoot, false otherwise.
+     */
+    @Override
+    public boolean isListenerForSource(Object source) {
+        return (source instanceof UIViewRoot);
+    }
+
+    /**
+     * Process the system event.
+     *
+     * @param se the system event.
+     * @throws AbortProcessingException when processing needs to be aborter.
+     */
+    @Override
+    public void processEvent(SystemEvent se) throws AbortProcessingException {
+        if (se instanceof PreDestroyViewMapEvent) {
+            processPreDestroyViewMap(se);
+        }
+
+        if (se instanceof PostConstructViewMapEvent) {
+            processPostConstructViewMap(se);
+        }
+    }
+
+    /**
+     * Process the PostConstructViewMap system event.
+     *
+     * @param se the system event.
+     */
+    private void processPostConstructViewMap(SystemEvent se) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Handling PostConstructViewMapEvent");
+        }
+        
+        UIViewRoot viewRoot = (UIViewRoot) se.getSource();
+        Map<String, Object> viewMap = viewRoot.getViewMap(false);
+
+        if (viewMap != null) {            
+            FacesContext facesContext = FacesContext.getCurrentInstance();
+            
+            if (viewRoot.isTransient() && facesContext.isProjectStage(ProjectStage.Development)) {
+                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN,
+                    "@ViewScoped beans are not supported on stateless views",
+                    "@ViewScoped beans are not supported on stateless views");
+                facesContext.addMessage(viewRoot.getClientId(facesContext), message);                
+
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, "@ViewScoped beans are not supported on stateless views");
+                }
+            }
+            
+            Object session = facesContext.getExternalContext().getSession(true);
+
+            if (session != null) {
+                Map<String, Object> sessionMap = facesContext.getExternalContext().getSessionMap();
+                Integer size = (Integer) sessionMap.get(ACTIVE_VIEW_MAPS_SIZE);
+                if (size == null) {
+                    size = 25;
+                }
+
+                if (sessionMap.get(ACTIVE_VIEW_MAPS) == null) {
+                    sessionMap.put(ACTIVE_VIEW_MAPS, (Map<String, Object>) Collections.synchronizedMap(new LRUMap<String, Object>(size)));
+                }
+
+                Map<String, Object> viewMaps = (Map<String, Object>) sessionMap.get(ACTIVE_VIEW_MAPS);
+                synchronized (viewMaps) {
+                    String viewMapId = UUID.randomUUID().toString();
+                    while (viewMaps.containsKey(viewMapId)) {
+                        viewMapId = UUID.randomUUID().toString();
+                    }
+
+                    if (viewMaps.size() == size) {
+                        String eldestViewMapId = viewMaps.keySet().iterator().next();
+                        Map<String, Object> eldestViewMap = (Map<String, Object>) viewMaps.remove(eldestViewMapId);
+                        removeEldestViewMap(facesContext, eldestViewMap);
+                    }
+
+                    viewMaps.put(viewMapId, viewMap);
+                    viewRoot.getTransientStateHelper().putTransient(VIEW_MAP_ID, viewMapId);
+                    viewRoot.getTransientStateHelper().putTransient(VIEW_MAP, viewMap);
+                    if (distributable) {
+                        // If we are distributable, this will result in a dirtying of the
+                        // session data, forcing replication.  If we are not distributable,
+                        // this is a no-op.
+                        sessionMap.put(ACTIVE_VIEW_MAPS, viewMaps);
+                    }
+                }
+                if (null != contextManager) {
+                    contextManager.fireInitializedEvent(facesContext, viewRoot);
+                }
+            }
+        }
+    }
+
+    /**
+     * Process the PreDestroyViewMap system event.
+     *
+     * @param se the system event.
+     */
+    private void processPreDestroyViewMap(SystemEvent se) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Handling PreDestroyViewMapEvent");
+        }
+        
+        UIViewRoot viewRoot = (UIViewRoot) se.getSource();
+        Map<String, Object> viewMap = viewRoot.getViewMap(false);
+
+        if (viewMap != null && !viewMap.isEmpty()) {
+            FacesContext facesContext = FacesContext.getCurrentInstance();
+
+            if (contextManager != null) {
+                contextManager.clear(facesContext, viewMap);
+                contextManager.fireDestroyedEvent(facesContext, viewRoot);
+            }
+
+            
+            destroyBeans(facesContext, viewMap);
+
+        }
+    }
+
+    /**
+     * Create the associated data in the session (if any).
+     * 
+     * @param se the HTTP session event.
+     */
+    @Override
+    public void sessionCreated(HttpSessionEvent se) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Creating session for @ViewScoped beans");
+        }
+    }
+    
+    /**
+     * Destroy the associated data in the session.
+     *
+     * @param hse the HTTP session event.
+     */
+    @Override
+    public void sessionDestroyed(HttpSessionEvent hse) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Cleaning up session for @ViewScoped beans");
+        }
+
+        if (contextManager != null) {
+            contextManager.sessionDestroyed(hse);
+        }
+
+        HttpSession session = hse.getSession();
+        Map<String, Object> activeViewMaps = (Map<String, Object>) session.getAttribute(ACTIVE_VIEW_MAPS);
+        if (activeViewMaps != null) {
+            Iterator<Object> activeViewMapsIterator = activeViewMaps.values().iterator();
+            ApplicationAssociate applicationAssociate = ApplicationAssociate.getInstance(hse.getSession().getServletContext());
+            while (activeViewMapsIterator.hasNext()) {
+                Map<String, Object> viewMap = (Map<String, Object>) activeViewMapsIterator.next();
+                destroyBeans(applicationAssociate, viewMap);
+            }
+
+            activeViewMaps.clear();
+            session.removeAttribute(ACTIVE_VIEW_MAPS);
+            session.removeAttribute(ACTIVE_VIEW_MAPS_SIZE);
+        }
+    }
+
+    /**
+     * Remove the eldest view map from the active view maps.
+     *
+     * @param eldestViewMap the eldest view map.
+     */
+    private void removeEldestViewMap(FacesContext facesContext, Map<String, Object> eldestViewMap) {
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "Removing eldest view map: {0}", eldestViewMap);
+        }
+
+        if (contextManager != null) {
+            contextManager.clear(facesContext, eldestViewMap);
+        }
+
+        destroyBeans(facesContext, eldestViewMap);
+    }
+}
diff --git a/com/sun/faces/application/view/ViewScopedCDIEventFireHelper.java b/com/sun/faces/application/view/ViewScopedCDIEventFireHelper.java
new file mode 100644
index 0000000..649ab63
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopedCDIEventFireHelper.java
@@ -0,0 +1,49 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.application.view;
+
+import javax.faces.component.UIViewRoot;
+
+public interface ViewScopedCDIEventFireHelper {
+
+    void fireInitializedEvent(UIViewRoot root);
+
+    void fireDestroyedEvent(UIViewRoot root);
+}
diff --git a/com/sun/faces/application/view/ViewScopedCDIEventFireHelperImpl.java b/com/sun/faces/application/view/ViewScopedCDIEventFireHelperImpl.java
new file mode 100644
index 0000000..c47999e
--- /dev/null
+++ b/com/sun/faces/application/view/ViewScopedCDIEventFireHelperImpl.java
@@ -0,0 +1,68 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.application.view;
+
+import java.io.Serializable;
+import javax.enterprise.context.Destroyed;
+import javax.enterprise.context.Initialized;
+import javax.enterprise.event.Event;
+import javax.faces.component.UIViewRoot;
+import javax.faces.view.ViewScoped;
+import javax.inject.Inject;
+
+public class ViewScopedCDIEventFireHelperImpl implements Serializable, ViewScopedCDIEventFireHelper {
+    
+    private static final long serialVersionUID = 5777997951420156171L;
+    
+    @Inject @Initialized(ViewScoped.class) Event<UIViewRoot> viewScopeInitializedEvent;
+    @Inject @Destroyed(ViewScoped.class) Event<UIViewRoot> viewScopeDestroyedEvent;
+    
+    @Override
+    public void fireInitializedEvent(UIViewRoot root) {
+        viewScopeInitializedEvent.fire(root);
+    }
+    
+    @Override
+    public void fireDestroyedEvent(UIViewRoot root) {
+        viewScopeDestroyedEvent.fire(root);
+    }
+        
+}
diff --git a/com/sun/faces/application/view/WriteBehindStateWriter.java b/com/sun/faces/application/view/WriteBehindStateWriter.java
new file mode 100644
index 0000000..8aed41a
--- /dev/null
+++ b/com/sun/faces/application/view/WriteBehindStateWriter.java
@@ -0,0 +1,349 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.application.view;
+
+import java.io.Writer;
+import java.io.IOException;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.application.StateManager;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.util.Util;
+import com.sun.faces.io.FastStringWriter;
+
+/**
+ * Custom {@link Writer} to efficiently handle the state manager replacement
+ * marker written out by {@link MultiViewHandler#writeState(javax.faces.context.FacesContext)}.
+ */
+final class WriteBehindStateWriter extends Writer {
+
+    // length of the state marker
+    private static final int STATE_MARKER_LEN =
+          RIConstants.SAVESTATE_FIELD_MARKER.length();
+
+    private static final ThreadLocal<WriteBehindStateWriter> CUR_WRITER =
+          new ThreadLocal<WriteBehindStateWriter>();
+    private Writer out;
+    private Writer orig;
+    private FastStringWriter fWriter;
+    private boolean stateWritten;
+    private int bufSize;
+    private char[] buf;
+    private FacesContext context;
+
+
+    // -------------------------------------------------------- Constructors
+
+
+    /**
+     * Constructs a new <code>WriteBehindStateWriter</code> instance.
+     *
+     * @param out the writer we write non-buffered content to
+     * @param context the {@link FacesContext} for the current request
+     * @param bufSize the buffer size for post-processing buffered content
+     */
+    public WriteBehindStateWriter(Writer out,
+                                  FacesContext context,
+                                  int bufSize) {
+        this.out = out;
+        this.orig = out;
+        this.context = context;
+        this.bufSize = bufSize;
+        this.buf = new char[bufSize];
+        CUR_WRITER.set(this);
+        
+    }
+
+
+    // ------------------------------------------------- Methods from Writer
+
+
+    /**
+     * Writes directly to the current <code>out</code>.
+     *
+     * @see Writer#write(int)
+     */
+    public void write(int c) throws IOException {
+        out.write(c);
+    }
+
+
+    /**
+     * Writes directly to the current <code>out</code>.
+     *
+     * @see Writer#write(char[])
+     */
+    public void write(char cbuf[]) throws IOException {
+        out.write(cbuf);
+    }
+
+
+    /**
+     * Writes directly to the current <code>out</code>.
+     *
+     * @see Writer#write(String)
+     */
+    public void write(String str) throws IOException {
+        out.write(str);
+    }
+
+
+    /**
+     * Writes directly to the current <code>out</code>.
+     *
+     * @see Writer#write(String, int, int)
+     */
+    public void write(String str, int off, int len) throws IOException {
+        out.write(str, off, len);
+    }
+
+
+    /**
+     * Writes directly to the current <code>out</code>.
+     *
+     * @see Writer#write(char[], int, int)
+     */
+    public void write(char cbuf[], int off, int len) throws IOException {
+        out.write(cbuf, off, len);
+    }
+
+
+    /**
+     * This is a no-op.
+     */
+    public void flush() throws IOException {
+        // no-op
+    }
+
+
+    /**
+     * This is a no-op.
+     */
+    public void close() throws IOException {
+        // no-op
+    }
+
+
+    // ------------------------------------------------------ Public Methods
+
+
+    /**
+     * @return the <code>WriteBehindStateWriter</code> being used for processing
+     *  this request
+     */
+    public static WriteBehindStateWriter getCurrentInstance() {
+        return CUR_WRITER.get();
+    }
+
+
+    /**
+     * Clear the ThreadLocal state.
+     */
+    public void release() {
+        CUR_WRITER.remove();
+    }
+
+
+    /**
+     * When called, the original writer is backed up and replaced
+     * with a new FastStringWriter.  All content written after this method
+     * is called will then be buffered and written out later after the
+     * entire view has been rendered.
+     */
+    public void writingState() {
+        if (!stateWritten) {
+            this.stateWritten = true;
+            out = fWriter = new FastStringWriter(1024);
+        }
+    }
+
+    /**
+     * @return <code>true</code> if {@link #writingState()} has been called,
+     *  otherwise returns <code>false</code>
+     */
+    public boolean stateWritten() {
+        return stateWritten;
+    }
+
+
+    /**
+     * <p> Write directly from our FastStringWriter to the provided writer.</p>
+     *
+     * @throws IOException if an error occurs
+     */
+    public void flushToWriter() throws IOException {
+
+        // Save the state to a new instance of StringWriter to
+        // avoid multiple serialization steps if the view contains
+        // multiple forms.
+        StateManager stateManager = Util.getStateManager(context);
+        ResponseWriter origWriter = context.getResponseWriter();
+        StringBuilder stateBuilder = getState(stateManager, origWriter);
+        StringBuilder builder = fWriter.getBuffer();
+        // begin writing...
+        int totalLen = builder.length();
+        int stateLen = stateBuilder.length();
+        int pos = 0;
+        int tildeIdx = getNextDelimiterIndex(builder, pos);
+        while (pos < totalLen) {
+            if (tildeIdx != -1) {
+                if (tildeIdx > pos && (tildeIdx - pos) > bufSize) {
+                    // there's enough content before the first ~
+                    // to fill the entire buffer
+                    builder.getChars(pos, (pos + bufSize), buf, 0);
+                    orig.write(buf);
+                    pos += bufSize;
+                } else {
+                    // write all content up to the first '~'
+                    builder.getChars(pos, tildeIdx, buf, 0);
+                    int len = (tildeIdx - pos);
+                    orig.write(buf, 0, len);
+                    // now check to see if the state saving string is
+                    // at the begining of pos, if so, write our
+                    // state out.
+                    if (builder.indexOf(
+                          RIConstants.SAVESTATE_FIELD_MARKER,
+                          pos) == tildeIdx) {
+                        // buf is effectively zero'd out at this point
+                        int statePos = 0;
+                        while (statePos < stateLen) {
+                            if ((stateLen - statePos) > bufSize) {
+                                // enough state to fill the buffer
+                                stateBuilder.getChars(statePos,
+                                                      (statePos + bufSize),
+                                                      buf,
+                                                      0);
+                                orig.write(buf);
+                                statePos += bufSize;
+                            } else {
+                                int slen = (stateLen - statePos);
+                                stateBuilder.getChars(statePos,
+                                                      stateLen,
+                                                      buf,
+                                                      0);
+                                orig.write(buf, 0, slen);
+                                statePos += slen;
+                            }
+
+                        }
+                        // push us past the last '~' at the end of the marker
+                        pos += (len + STATE_MARKER_LEN);
+                        tildeIdx = getNextDelimiterIndex(builder, pos);
+                    } else {
+                        pos = tildeIdx;
+                        tildeIdx = getNextDelimiterIndex(builder,
+                                                         tildeIdx + 1);
+
+                    }
+                }
+                
+                stateBuilder = getState(stateManager, origWriter);
+                stateLen = stateBuilder.length();
+                
+            } else {
+                // we've written all of the state field markers.
+                // finish writing content
+                if (totalLen - pos > bufSize) {
+                    // there's enough content to fill the buffer
+                    builder.getChars(pos, (pos + bufSize), buf, 0);
+                    orig.write(buf);
+                    pos += bufSize;
+                } else {
+                    // we're near the end of the response
+                    builder.getChars(pos, totalLen, buf, 0);
+                    int len = (totalLen - pos);
+                    orig.write(buf, 0, len);
+                    pos += (len + 1);
+                }
+            }
+        }
+
+        // all state has been written.  Have 'out' point to the
+        // response so that all subsequent writes will make it to the
+        // browser.
+        out = orig;
+
+    }
+    
+    /**
+     * Get the state.
+     * 
+     * <p>
+     *  In JSF 2.2 it is required by the specification that the view state in
+     *  each h:form has a unique view state id. So we have to call this method
+     *  multiple times as each h:form needs to generate the view state string
+     *  for itself.
+     * </p>
+     * 
+     * @param stateManager the state manager.
+     * @param origWriter the original response writer.
+     * @return the state.
+     * @throws IOException when an I/O error occurs. 
+     */
+    private StringBuilder getState(StateManager stateManager, ResponseWriter origWriter) throws IOException {
+        FastStringWriter state =
+                new FastStringWriter((stateManager.isSavingStateInClient(
+                        context)) ? bufSize : 128);
+        context.setResponseWriter(origWriter.cloneWithWriter(state));
+        stateManager.writeState(context, stateManager.saveView(context));
+        context.setResponseWriter(origWriter);
+        StringBuilder stateBuilder = state.getBuffer();
+        return stateBuilder;
+    }
+
+
+    /**
+     * @param builder buffered content
+     * @param offset the offset to start the search from
+     * @return the index of the next delimiter, if any
+     */
+    private static int getNextDelimiterIndex(StringBuilder builder,
+                                             int offset) {
+
+        return builder.indexOf(RIConstants.SAVESTATE_FIELD_DELIMITER,
+                               offset);
+
+    }
+
+}
+
diff --git a/com/sun/faces/component/ComponentResourceContainer.java b/com/sun/faces/component/ComponentResourceContainer.java
new file mode 100644
index 0000000..649436e
--- /dev/null
+++ b/com/sun/faces/component/ComponentResourceContainer.java
@@ -0,0 +1,58 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.component;
+
+import javax.faces.component.UIPanel;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+
+public class ComponentResourceContainer extends UIPanel {
+
+    /**
+     * Take no action to prevent component resources from inadvertantly
+     * being rendered.
+     */
+    @Override
+    public void encodeAll(FacesContext context) throws IOException {
+        // no-op
+    }
+    
+}
diff --git a/com/sun/faces/component/CompositeComponentStackManager.java b/com/sun/faces/component/CompositeComponentStackManager.java
new file mode 100644
index 0000000..025b91a
--- /dev/null
+++ b/com/sun/faces/component/CompositeComponentStackManager.java
@@ -0,0 +1,483 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.component;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.view.Location;
+import javax.faces.application.Resource;
+import java.util.Stack;
+
+/**
+ * <p>
+ * <code>CompositeComponentStackManager</code> is responsible for managing the
+ * two different composite component stacks currently used by Mojarra.
+ * </p>
+ *
+ * <p>
+ * The stacks are identified by the {@link StackType} enum which has two elements,
+ * <code>TreeCreation<code> and <code>Evaluation</code>.
+ * </p>
+ *
+ * <p>
+ * The <code>TreeCreation</code> stack represents the composite components that
+ * have been pushed by the TagHandlers responsible for building the tree.
+ * </p>
+ *
+ * <p>
+ * The <code>Evaluation</code> stack is used by the EL in order to properly
+ * resolve nested composite component expressions.
+ * </p>
+ */
+public class CompositeComponentStackManager {
+
+
+    private static final String MANAGER_KEY =
+          CompositeComponentStackManager.class.getName();
+
+
+    public enum StackType {
+        TreeCreation,
+        Evaluation
+    }
+
+    private StackHandler treeCreation = new TreeCreationStackHandler();
+    private StackHandler runtime = new RuntimeStackHandler();
+
+    
+    // ------------------------------------------------------------ Constructors
+
+
+    private CompositeComponentStackManager() {
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @return the <code>CompositeComponentStackManager</code> for the current
+     *  request
+     */
+    public static CompositeComponentStackManager getManager(FacesContext ctx) {
+
+        CompositeComponentStackManager manager =
+              (CompositeComponentStackManager) ctx.getAttributes().get(MANAGER_KEY);
+        if (manager == null) {
+            manager = new CompositeComponentStackManager();
+            ctx.getAttributes().put(MANAGER_KEY, manager);
+        }
+
+        return manager;
+
+    }
+
+
+    /**
+     * <p>
+     * Pushes the specified composite component to the <code>Evaluation</code>
+     * stack.
+     * </p>
+     *
+     * @param compositeComponent the component to push
+     * @return <code>true</code> if the component was pushed, otherwise
+     *  returns <code>false</code>
+     */
+    public boolean push(UIComponent compositeComponent) {
+        return getStackHandler(StackType.Evaluation).push(compositeComponent);
+    }
+
+
+    /**
+     * <p>
+     * Pushes the specified composite component to the desired <code>StackType</code>
+     * stack.
+     * </p>
+     *
+     * @param compositeComponent the component to push
+     * @param stackType the stack to push to the component to
+     * @return <code>true</code> if the component was pushed, otherwise
+     *  returns <code>false</code>
+     */
+    public boolean push(UIComponent compositeComponent, StackType stackType) {
+        return getStackHandler(stackType).push(compositeComponent);
+    }
+
+
+    /**
+     * <p>
+     * Pushes a component derived by the push logic to the <code>Evaluation</code>
+     * stack.
+     * </p>
+     *
+     * @return <code>true</code> if the component was pushed, otherwise
+     *  returns <code>false</code>
+     */
+    public boolean push() {
+        return getStackHandler(StackType.Evaluation).push();
+    }
+
+
+    /**
+     * <p>
+     * Pushes a component derived by the push logic to the specified stack.
+     * </p>
+     *
+     * @param stackType the stack to push to the component to
+     *
+     * @return <code>true</code> if the component was pushed, otherwise
+     *  returns <code>false</code>
+     */
+    public boolean push(StackType stackType) {
+        return getStackHandler(stackType).push();
+    }
+
+
+    /**
+     * <p>
+     * Pops the top-level component from the stack.
+     * </p>
+     *
+     * @param stackType the stack to pop the top level component from
+     */
+    public void pop(StackType stackType) {
+        getStackHandler(stackType).pop();
+    }
+
+
+    /**
+     * <p>
+     * Pops the top-level component from the <code>Evaluation</code> stack.
+     * </p>
+     */
+    public void pop() {
+        getStackHandler(StackType.Evaluation).pop();
+    }
+
+
+    /**
+     * @return the top-level component from the <code>Evaluation</code> stack
+     *  without removing the element
+     */
+    public UIComponent peek() {
+        return getStackHandler(StackType.Evaluation).peek();
+    }
+
+
+    /**
+     * @param stackType the stack to push to the component to
+     * 
+     * @return the top-level component from the specified stack
+     *  without removing the element
+     */
+    public UIComponent peek(StackType stackType) {
+        return getStackHandler(stackType).peek();
+    }
+
+
+    public UIComponent getParentCompositeComponent(StackType stackType,
+                                                   FacesContext ctx,
+                                                   UIComponent forComponent) {
+        return getStackHandler(stackType).getParentCompositeComponent(ctx, forComponent);
+    }
+
+    public UIComponent findCompositeComponentUsingLocation(FacesContext ctx,
+                                                           Location location) {
+
+        StackHandler sh = getStackHandler(StackType.TreeCreation);
+        Stack<UIComponent> s = sh.getStack(false);
+        if (s != null) {
+            String path = location.getPath();
+            for (int i = s.size(); i > 0; i--) {
+                UIComponent cc = s.get(i - 1);
+                Resource r = (Resource) cc.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
+                if (path.endsWith('/' + r.getResourceName()) && path.contains(r.getLibraryName())) {
+                    return cc;
+                }
+            }
+        } else {
+            // runtime eval
+            String path = location.getPath();
+            UIComponent cc = UIComponent.getCurrentCompositeComponent(ctx);
+            while (cc != null) {
+                Resource r = (Resource) cc.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
+                if (path.endsWith('/' + r.getResourceName()) && path.contains(r.getLibraryName())) {
+                    return cc;
+                }
+                cc = UIComponent.getCompositeComponentParent(cc);
+            }
+        }
+        
+        // we could not find the composite component because the location was not found,
+        // this will happen if the #{cc} refers to a composite component one level up,
+        // so we are going after the current composite component.
+        //
+        return UIComponent.getCurrentCompositeComponent(ctx);
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private StackHandler getStackHandler(StackType type) {
+
+        StackHandler handler = null;
+        switch (type) {
+            case TreeCreation: handler = treeCreation; break;
+            case Evaluation: handler = runtime; break;
+        }
+        return handler;
+
+    }
+
+
+    // ------------------------------------------------------ Private Interfaces
+
+
+    private interface StackHandler {
+
+        boolean push(UIComponent compositeComponent);
+        boolean push();
+        void pop();
+        UIComponent peek();
+        UIComponent getParentCompositeComponent(FacesContext ctx, UIComponent forComponent);
+        void delete();
+        Stack<UIComponent> getStack(boolean create);
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private abstract class BaseStackHandler implements StackHandler {
+
+        protected Stack<UIComponent> stack;
+
+
+        // ------------------------------------------- Methods from StackHandler
+
+
+        public void delete() {
+
+            stack = null;
+
+        }
+
+
+        public Stack<UIComponent> getStack(boolean create) {
+
+            if (stack == null && create) {
+                stack = new Stack<UIComponent>();
+            }
+            return stack;
+
+        }
+
+
+        public UIComponent peek() {
+
+            if (stack != null && !stack.isEmpty()) {
+                return stack.peek();
+            }
+            return null;
+            
+        }
+
+    } // END BaseStackHandler
+
+
+    private final class RuntimeStackHandler extends BaseStackHandler {
+
+
+        // ------------------------------------------- Methods from StackHandler
+
+
+        public void delete() {
+
+            Stack s = getStack(false);
+            if (s != null) {
+                s.clear();
+            }
+
+        }
+
+
+        public void pop() {
+
+            Stack s = getStack(false);
+            if (s != null && !s.isEmpty()) {
+                s.pop();
+            }
+
+        }
+
+
+        public boolean push() {
+
+            return push(null);
+
+        }
+
+
+        public boolean push(UIComponent compositeComponent) {
+
+            Stack<UIComponent> tstack =
+                  CompositeComponentStackManager.this.treeCreation.getStack(false);
+            Stack<UIComponent> stack = getStack(false);
+            UIComponent ccp;
+            if (tstack != null) {
+                // We have access to the stack of composite components
+                // the tree creation process has made available.
+                // Since we can' reliably access the parent composite component
+                // of the current composite component, use the index of the
+                // current composite component within the stack to locate the
+                // parent.
+                ccp = compositeComponent;
+            } else {
+                // no tree creation stack available, so use the runtime stack.
+                // If the current stack isn't empty, then use the component
+                // on the stack as the current composite component.
+                stack = getStack(false);
+
+                if (compositeComponent == null) {
+                    if (stack != null && !stack.isEmpty()) {
+                        ccp = getCompositeParent(stack.peek());
+                    } else {
+                        ccp = getCompositeParent((UIComponent
+                              .getCurrentCompositeComponent(FacesContext.getCurrentInstance())));
+                    }
+                } else {
+                    ccp = compositeComponent;
+                }
+            }
+
+
+            if (ccp != null) {
+                if (stack == null) {
+                    stack = getStack(true);
+                }
+                stack.push(ccp);
+                return true;
+            }
+            return false;
+
+        }
+
+        public UIComponent getParentCompositeComponent(FacesContext ctx,
+                                                       UIComponent forComponent) {
+
+            return getCompositeParent(forComponent);
+
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        private UIComponent getCompositeParent(UIComponent comp) {
+
+            return UIComponent.getCompositeComponentParent(comp);
+
+        }
+
+    } // END RuntimeStackHandler
+
+
+    private final class TreeCreationStackHandler extends BaseStackHandler {
+
+
+        // ------------------------------------------- Methods from StackHandler
+
+
+        public void pop() {
+
+            Stack s = getStack(false);
+            if (s != null && !stack.isEmpty()) {
+                stack.pop();
+                if (stack.isEmpty()) {
+                    delete();
+                }
+            }
+
+        }
+
+
+        public boolean push() {
+
+            return false;
+
+        }
+
+
+        public boolean push(UIComponent compositeComponent) {
+
+            if (compositeComponent != null) {
+                assert (UIComponent.isCompositeComponent(compositeComponent));
+                Stack<UIComponent> s = getStack(true);
+                s.push(compositeComponent);
+                return true;
+            }
+            return false;
+
+        }
+
+
+        public UIComponent getParentCompositeComponent(FacesContext ctx, UIComponent forComponent) {
+
+            Stack<UIComponent> s = getStack(false);
+            if (s == null) {
+                return null;
+            } else {
+                int idx = s.indexOf(forComponent);
+                if (idx == 0) { // no parent
+                    return null;
+                }
+                return (s.get(idx - 1));
+            }
+        }
+        
+    } // END TreeCreationStackHandler
+
+
+
+}
diff --git a/com/sun/faces/component/PassthroughElement.java b/com/sun/faces/component/PassthroughElement.java
new file mode 100644
index 0000000..affaab8
--- /dev/null
+++ b/com/sun/faces/component/PassthroughElement.java
@@ -0,0 +1,358 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.component;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.ValueExpression;
+
+
+/**
+ * <p>Causes all child components of this component
+ * to be rendered.  This is useful in scenarios
+ * where a parent component is expecting a single
+ * component to be present, but the application
+ * wishes to render more than one.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.passthrough.Element</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class PassthroughElement extends javax.faces.component.UIPanel 
+    implements ClientBehaviorHolder {
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public PassthroughElement() {
+        super();
+        setRendererType("javax.faces.passthrough.Element");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Panel";
+
+
+    protected enum PropertyKeys {
+        onclick,
+        ondblclick,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        style,
+        styleClass,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+    }
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" property on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(
+        Arrays.asList("click","dblclick","keydown","keypress","keyup","mousedown","mousemove",
+        "mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    
+    }
+
+
+    public String getDefaultEventName() {
+        return "click";    
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get(
+            "javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/com/sun/faces/component/behavior/AjaxBehaviors.java b/com/sun/faces/component/behavior/AjaxBehaviors.java
new file mode 100644
index 0000000..a1e7907
--- /dev/null
+++ b/com/sun/faces/component/behavior/AjaxBehaviors.java
@@ -0,0 +1,224 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.component.behavior;
+
+import java.io.Serializable;
+
+import java.util.ArrayDeque;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.faces.application.Application;
+import javax.faces.component.behavior.AjaxBehavior;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorHint;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0">An instance of the class is used to 
+ * manage {@link AjaxBehavior} instances.</p>
+ *
+ * @since 2.0
+ */
+public class AjaxBehaviors implements Serializable {
+
+    private static final String AJAX_BEHAVIORS = "javax.faces.component.AjaxBehaviors";
+
+    private ArrayDeque<BehaviorInfo> behaviorStack = null;
+
+    public AjaxBehaviors() {
+        behaviorStack = new ArrayDeque<BehaviorInfo>();
+    }
+
+    // Returns the AjaxBehaviors instance, creating it if necessary.
+    public static AjaxBehaviors getAjaxBehaviors(FacesContext context,
+                                                 boolean createIfNull) {
+
+        Map<Object, Object> attrs = context.getAttributes();
+        AjaxBehaviors ajaxBehaviors = (AjaxBehaviors)attrs.get(AJAX_BEHAVIORS);
+
+        if ((ajaxBehaviors == null) && createIfNull) {
+            ajaxBehaviors = new AjaxBehaviors();
+            attrs.put(AJAX_BEHAVIORS, ajaxBehaviors);
+        }
+
+        return ajaxBehaviors;
+    }
+
+    // Adds AjaxBehaviors to the specified ClientBehaviorHolder
+    public void addBehaviors(FacesContext context,
+                             ClientBehaviorHolder behaviorHolder) {
+
+        if ((behaviorStack == null) || behaviorStack.isEmpty()){
+            return;
+        }
+
+        // Loop over pushed Behaviors and add to the ClientBehaviorHolder.
+        // Note that we add most recently pushed behaviors first.  That
+        // way the nearest behaviors take precedence.  Behaviors that were
+        // pushed earlier won't be added since we'll already have a 
+        // submitting behavior attached.
+        Iterator<BehaviorInfo> descendingIter = behaviorStack.descendingIterator();
+        while (descendingIter.hasNext()) {
+            descendingIter.next().addBehavior(context, behaviorHolder);
+        }
+    }
+
+
+    /**
+     * <p>Push the {@link AjaxBehavior} instance onto the <code>List</code>.</p>
+     *
+     * @param ajaxBehavior the {@link AjaxBehavior} instance
+     * @param eventName the name of the event that the behavior is associated
+     *     with.
+     *
+     * @since 2.0
+     */ 
+    public void pushBehavior(FacesContext context,
+                             AjaxBehavior ajaxBehavior,
+                             String eventName) {
+        behaviorStack.add(new BehaviorInfo(context, ajaxBehavior, eventName));
+    }
+
+    /**
+     * <p>Pop the last {@link AjaxBehavior} instance 
+     * from the <code>List</code>.</p>
+     *
+     * @since 2.0
+     */
+    public void popBehavior() {
+         if (behaviorStack.size() > 0) {
+             behaviorStack.removeLast();
+         }
+    }   
+
+    // Helper class for storing and creating/applying inherited
+    // AjaxBehaviors
+    public static class BehaviorInfo implements Serializable {
+        private String eventName;
+        private Object behaviorState;
+        private static final long serialVersionUID = -7679229822647712959L;
+
+        public BehaviorInfo(FacesContext context,
+                            AjaxBehavior ajaxBehavior,
+                            String eventName) {
+            this.eventName = eventName;
+
+            // We don't actually need the AjaxBehavior - just
+            // its state.
+            behaviorState = ajaxBehavior.saveState(context);
+        }
+
+        public void addBehavior(FacesContext context,
+                                ClientBehaviorHolder behaviorHolder) {
+
+            String myEventName = this.eventName;
+            if (myEventName == null) {
+                myEventName = behaviorHolder.getDefaultEventName();
+
+                // No event name, default or otherwise - we're done
+                if (myEventName == null) {
+                    return;
+                }
+            }
+
+            // We only add the 
+            if (shouldAddBehavior(behaviorHolder, myEventName)) {
+                ClientBehavior behavior = createBehavior(context);
+                behaviorHolder.addClientBehavior(myEventName, behavior);
+            }
+
+        }
+
+        // Tests whether we should add an AjaxBehavior to the specified
+        // ClientBehaviorHolder/event name.
+        private boolean shouldAddBehavior(ClientBehaviorHolder behaviorHolder,
+                                          String eventName) {
+
+            // First need to make sure that this ClientBehaviorHolder
+            // supports the specified event type.
+            if (!behaviorHolder.getEventNames().contains(eventName)) {
+                return false;
+            }
+
+            // Check for a submitting behavior already attached.
+            // If we've already got one, we don't add another.
+            Map<String,List<ClientBehavior>> allBehaviors =
+                behaviorHolder.getClientBehaviors();
+            List<ClientBehavior> eventBehaviors = allBehaviors.get(eventName);
+
+            if ((eventBehaviors == null) || (eventBehaviors.isEmpty())) {
+                return true;
+            }
+
+            for (ClientBehavior behavior : eventBehaviors) {
+                Set<ClientBehaviorHint> hints = behavior.getHints();
+
+                if (hints.contains(ClientBehaviorHint.SUBMITTING)) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        // Creates the AjaxBehavior
+        private ClientBehavior createBehavior(FacesContext context) {
+            Application application = context.getApplication();
+
+            // Re-create the instance via the Application
+            AjaxBehavior behavior = (AjaxBehavior)application.createBehavior(
+                                                    AjaxBehavior.BEHAVIOR_ID);
+
+            // And re-initialize its state
+            behavior.restoreState(context, behaviorState);
+
+            return behavior;
+        }
+
+        private BehaviorInfo() {
+        }
+    }
+
+}
diff --git a/com/sun/faces/component/validator/ComponentValidators.java b/com/sun/faces/component/validator/ComponentValidators.java
new file mode 100644
index 0000000..18216ae
--- /dev/null
+++ b/com/sun/faces/component/validator/ComponentValidators.java
@@ -0,0 +1,353 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.component.validator;
+
+
+import com.sun.faces.util.RequestStateManager;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.validator.Validator;
+import javax.faces.application.Application;
+import javax.faces.view.facelets.ValidatorHandler;
+import javax.faces.view.facelets.FaceletContext;
+import java.util.*;
+import javax.faces.event.PhaseId;
+
+/**
+ * <p>
+ * This class is responsible for adding default validators and/or validators
+ * that wrap multiple <code>EditableValueHolder</code> instances within the view.
+ * </p>
+ */
+public class ComponentValidators {
+
+
+    /**
+     * Key within the <code>FacesContext</code>'s attribute map under which
+     * a single <code>ComponentValidators</code> instance will be stored.
+     */
+    private static final String COMPONENT_VALIDATORS = "javax.faces.component.ComponentValidators";
+
+
+    /**
+     * Stack of <code>ValidatorInfo<code> instances.  Each instance represents
+     * a particular nesting level within the view.  As a nesting level is encountered,
+     * a <code>ValidatorInfo</code> will be pushed to the stack and all
+     * <code>EditableValueHolder</code> instances will be configured based on
+     * all <code>ValidatorInfo</code>s on the stack.  When the current nesting level
+     * is closed, the <code>ValidatorInfo</code> instance will be popped and thus
+     * have no impact on other <code>EditableValueHolder</code>s.
+     */
+    private LinkedList<ValidatorInfo> validatorStack = null;
+
+
+    // ------------------------------------------------------------ Constructors
+
+    
+    public ComponentValidators() {
+
+        validatorStack = new LinkedList<ValidatorInfo>();
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @param context the <code>FacesContext</code> for the current request
+     * @param createIfNull flag indicating whether or not a
+     *  <code>ComponentValidators</code> instance should be created or not
+     * @return a <code>ComponentValidators</code> instance for processing
+     *  a view request.  If <code>createIfNull</code> is <code>false</code>
+     *  and no <code>ComponentValidators</code> has been created, this method
+     *  will return <code>null</code>
+     */
+    public static ComponentValidators getValidators(FacesContext context,
+                                                    boolean createIfNull) {
+
+        Map<Object, Object> attrs = context.getAttributes();
+        ComponentValidators componentValidators = (ComponentValidators) attrs
+              .get(COMPONENT_VALIDATORS);
+
+        if ((componentValidators == null) && createIfNull) {
+            componentValidators = new ComponentValidators();
+            attrs.put(COMPONENT_VALIDATORS, componentValidators);
+        }
+
+        return componentValidators;
+    }
+
+
+    /**
+     * <p>
+     * Creates and installs default validators, if any, into the argument
+     * <code>EditableValueHolder</code>.  This method is merely a utility
+     * method to be called when there is no <code>ComponentValidators</code>
+     * available, or there are no <code>ValidatorInfo</code> instances on the
+     * stack.
+     * </p>
+     *
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param editableValueHolder the component receiving the <code>Validator</code>s
+     */
+    @SuppressWarnings({"unchecked"})
+    public static void addDefaultValidatorsToComponent(FacesContext ctx,
+                                                       EditableValueHolder editableValueHolder) {
+
+        if (!ctx.isPostback() || ctx.getCurrentPhaseId().equals(PhaseId.RESTORE_VIEW)) {
+            Set<String> keySet = ctx.getApplication().getDefaultValidatorInfo().keySet();
+            List<String> validatorIds = new ArrayList<String>(keySet.size());
+            Set<String> disabledValidatorIds = (Set<String>)
+                  RequestStateManager.remove(ctx, RequestStateManager.DISABLED_VALIDATORS);
+            for (String key : keySet) {
+                if (disabledValidatorIds != null && disabledValidatorIds.contains(key)) {
+                    continue;
+                }
+                validatorIds.add(key);
+            }
+
+            addValidatorsToComponent(ctx, validatorIds, editableValueHolder, null);
+        }
+    }
+
+
+    /**
+     * <p>
+     * Based on the <code>ValidatorInfo</code> instances present on the stack,
+     * configure the argument <code>EditableValueHolder</code> with <code>Validator</code>s
+     * created from the available info.
+     * </p>
+     *
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param editableValueHolder the component receiving the <code>Validator</code>s
+     */
+    @SuppressWarnings({"unchecked"})
+    public void addValidators(FacesContext ctx,
+                              EditableValueHolder editableValueHolder) {
+
+        if ((validatorStack == null) || validatorStack.isEmpty()) {
+            addDefaultValidatorsToComponent(ctx, editableValueHolder);
+            return;
+        }
+
+        Application application = ctx.getApplication();
+        Map<String, String> defaultValidatorInfo =
+              application.getDefaultValidatorInfo();
+        Set<String> keySet = defaultValidatorInfo.keySet();
+
+        List<String> validatorIds = new ArrayList<String>(keySet.size());
+        for (String key : keySet) {
+            validatorIds.add(key);
+        }
+
+        Set<String> disabledIds = (Set<String>)
+              RequestStateManager.remove(ctx,
+                                         RequestStateManager.DISABLED_VALIDATORS);
+        int count = validatorStack.size();
+        for (int i = count - 1; i >= 0; i--) {
+            ValidatorInfo info = validatorStack.get(i);
+            if (!info.isEnabled() || (disabledIds != null && disabledIds.contains(info.getValidatorId()))) {
+                if (validatorIds.contains(info.getValidatorId())) {
+                    validatorIds.remove(info.getValidatorId());
+                }
+            } else {
+                if (!validatorIds.contains(info.getValidatorId())) {
+                    validatorIds.add(info.getValidatorId());
+                }
+            }
+        }
+
+        // add the validators to the EditableValueHolder.
+        addValidatorsToComponent(ctx,
+                                 validatorIds,
+                                 editableValueHolder,
+                                 ((validatorStack == null || validatorStack.isEmpty())
+                                     ? null
+                                     : validatorStack));
+        
+    }
+
+
+    /**
+     * <p>
+     * Pushes the provided <code>ValidatorInfo</code> onto the stack.
+     * </p>
+     *
+     * @param info
+     */
+    public void pushValidatorInfo(ValidatorInfo info) {
+
+        validatorStack.add(info);
+
+    }
+
+
+    /**
+     * <p>
+     * Pops the last <code>ValidatorInfo</code> instance from the stack.
+     * </p>
+     */
+    public void popValidatorInfo() {
+
+        if (validatorStack.size() > 0) {
+            validatorStack.removeLast();
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>
+     * Install the validators, if not already present on the component,
+     * using the IDs included in <code>validatorIds</code>.
+     * </p>
+     *
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param validatorIds the validator IDs to be added to the
+     *  <code>EditableValueHolder</code>
+     * @param editableValueHolder the target component to which the validators
+     *  installed
+     * @param validatorStack current stack of ValidatorInfo instances
+     */
+    private static void addValidatorsToComponent(FacesContext ctx,
+                                                 Collection<String> validatorIds,
+                                                 EditableValueHolder editableValueHolder,
+                                                 LinkedList<ValidatorInfo> validatorStack) {
+
+        if (validatorIds == null || validatorIds.isEmpty()) {
+            return;
+        }
+
+        Application application = ctx.getApplication();
+        Map<String,String> defaultValidatorInfo =
+              application.getDefaultValidatorInfo();
+        Validator[] validators = editableValueHolder.getValidators();
+        // check to make sure that Validator instances haven't already
+        // been added.
+        for (Map.Entry<String,String> defaultValidator : defaultValidatorInfo.entrySet()) {
+            for (Validator validator : validators) {
+                if (defaultValidator.getValue().equals(validator.getClass().getName())) {
+                    validatorIds.remove(defaultValidator.getKey());
+                    break;
+                }
+            }
+        }
+
+        // we now have the complete List of Validator IDs to add to the
+        // target EditablValueHolder
+        for (String id : validatorIds) {
+            Validator v = application.createValidator(id);
+            // work backwards up the stack of ValidatorInfo to find the
+            // nearest matching ValidatorInfo to apply attributes
+            if (validatorStack != null) {
+                for (int i = validatorStack.size() - 1; i >= 0; i--) {
+                    ValidatorInfo info = validatorStack.get(i);
+                    if (id.equals(info.getValidatorId())) {
+                        info.applyAttributes(v);
+                        break;
+                    }
+                }
+            }
+            editableValueHolder.addValidator(v);
+        }
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Generic information container for a validator at a particular
+     * nesting Level.
+     */
+    public static class ValidatorInfo {
+
+        private String validatorId;
+        private boolean enabled;
+        private ValidatorHandler owner;
+        private FaceletContext ctx;
+
+
+        // ------------------------------------------------------------ Constructors
+
+
+        public ValidatorInfo(FaceletContext ctx,
+                             ValidatorHandler owner) {
+
+            this.owner = owner;
+            this.ctx = ctx;
+            this.validatorId = owner.getValidatorId(ctx);
+            this.enabled = !owner.isDisabled(ctx);
+
+        }
+
+
+        // -------------------------------------------------------------------------
+
+
+        public String getValidatorId() {
+
+            return validatorId;
+
+        }
+
+
+        public boolean isEnabled() {
+
+            return enabled;
+
+        }
+
+        public void applyAttributes(Validator v) {
+
+            owner.setAttributes(ctx, v);
+            
+        }
+
+    } // END ValidatorInfo
+    
+}
diff --git a/com/sun/faces/component/visit/FullVisitContext.java b/com/sun/faces/component/visit/FullVisitContext.java
new file mode 100644
index 0000000..9819e5b
--- /dev/null
+++ b/com/sun/faces/component/visit/FullVisitContext.java
@@ -0,0 +1,159 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.component.visit;
+
+import javax.faces.component.visit.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * <p class="changed_added_2_0">A VisitContext implementation that is 
+ * used when performing a full component tree visit.</p>
+ *
+ * RELEASE_PENDING
+ *
+ * @since 2.0
+ */
+public class FullVisitContext extends VisitContext {
+
+    /**
+     * Creates a FullVisitorContext instance.
+     * @param facesContext the FacesContext for the current request
+     * @throws NullPointerException  if {@code facesContext}
+     *                               is {@code null}
+     */    
+    public FullVisitContext(FacesContext facesContext) {
+        this(facesContext, null);
+    }
+
+    /**
+     * Creates a FullVisitorContext instance with the specified
+     * hints.
+     *
+     * @param facesContext the FacesContext for the current request
+     * @param hints a the VisitHints for this visit
+     * @throws NullPointerException  if {@code facesContext}
+     *                               is {@code null}
+     */    
+    public FullVisitContext(FacesContext facesContext,
+                            Set<VisitHint> hints) {
+
+        if (facesContext == null) {
+            throw new NullPointerException();
+        }
+
+        this.facesContext = facesContext;
+
+        // Copy and store hints - ensure unmodifiable and non-empty
+        EnumSet<VisitHint> hintsEnumSet = ((hints == null) || (hints.isEmpty()))
+                                          ? EnumSet.noneOf(VisitHint.class)
+                                          : EnumSet.copyOf(hints);
+
+        this.hints = Collections.unmodifiableSet(hintsEnumSet);
+    }
+
+    /**
+     * @see VisitContext#getFacesContext VisitContext.getFacesContext()
+     */
+    @Override
+    public FacesContext getFacesContext() {
+        return facesContext;
+    }
+
+    /**
+     * @see VisitContext#getIdsToVisit VisitContext.getIdsToVisit()
+     */
+    @Override
+    public Collection<String> getIdsToVisit() {
+
+        // We always visits all ids
+        return ALL_IDS;
+    }
+
+    /**
+     * @see VisitContext#getSubtreeIdsToVisit VisitContext.getSubtreeIdsToVisit()
+     */
+    @Override
+    public Collection<String> getSubtreeIdsToVisit(UIComponent component) {
+
+        // Make sure component is a NamingContainer
+        if (!(component instanceof NamingContainer)) {
+            throw new IllegalArgumentException("Component is not a NamingContainer: " + component);
+        }
+
+        // We always visits all ids
+        return ALL_IDS;
+    }
+
+    /**
+     * @see VisitContext#getHints VisitContext.getHints
+     */
+    @Override
+    public Set<VisitHint> getHints() {
+        return hints;
+    }
+
+    /**
+     * @see VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()
+     */
+    @Override
+    public VisitResult invokeVisitCallback(UIComponent component, 
+                                           VisitCallback callback) {
+
+        // Nothing interesting here - just invoke the callback.
+        // (PartialVisitContext.invokeVisitCallback() does all of the 
+        // interesting work.)
+        return callback.visit(this, component);
+    }
+
+    // The FacesContext for this request
+    private FacesContext facesContext;
+
+    // Our visit hints
+    private Set<VisitHint> hints;
+}
diff --git a/com/sun/faces/component/visit/PartialVisitContext.java b/com/sun/faces/component/visit/PartialVisitContext.java
new file mode 100644
index 0000000..c1d1ec9
--- /dev/null
+++ b/com/sun/faces/component/visit/PartialVisitContext.java
@@ -0,0 +1,458 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.component.visit;
+
+import javax.faces.component.visit.*;
+import java.util.AbstractCollection;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UINamingContainer;
+import javax.faces.component.NamingContainer;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * <p class="changed_added_2_0">A VisitContext implementation that is
+ * used when performing a partial component tree visit.</p>
+ *
+ * RELEASE_PENDING
+ * @since 2.0
+ */
+public class PartialVisitContext extends VisitContext {
+
+    /**
+     * Creates a PartialVisitorContext instance.
+     * @param facesContext the FacesContext for the current request
+     * @param clientIds the client ids of the components to visit
+     * @throws NullPointerException  if {@code facesContext}
+     *                               is {@code null}
+     */    
+    public PartialVisitContext(FacesContext facesContext,
+                               Collection<String> clientIds) {
+        this(facesContext, clientIds, null);
+    }
+
+    /**
+     * Creates a PartialVisitorContext instance with the specified hints.
+     * @param facesContext the FacesContext for the current request
+     * @param clientIds the client ids of the components to visit
+     * @param hints a the VisitHints for this visit
+     * @throws NullPointerException  if {@code facesContext}
+     *                               is {@code null}
+     */    
+    public PartialVisitContext(FacesContext facesContext,
+                               Collection<String> clientIds,
+                               Set<VisitHint> hints) {
+        if (facesContext == null) {
+            throw new NullPointerException();
+        }
+
+        this.facesContext = facesContext;
+
+        // Initialize our various collections
+        initializeCollections(clientIds);
+
+        // Copy and store hints - ensure unmodifiable and non-empty
+        EnumSet<VisitHint> hintsEnumSet = ((hints == null) || (hints.isEmpty()))
+                                          ? EnumSet.noneOf(VisitHint.class)
+                                          : EnumSet.copyOf(hints);
+
+        this.hints = Collections.unmodifiableSet(hintsEnumSet);
+    }
+
+    /**
+     * @see VisitContext#getFacesContext VisitContext.getFacesContext()
+     */
+    @Override
+    public FacesContext getFacesContext() {
+        return facesContext;
+    }
+
+    /**
+     * @see VisitContext#getHints VisitContext.getHints
+     */
+    @Override
+    public Set<VisitHint> getHints() {
+        return hints;
+    }
+
+    /**
+     * @see VisitContext#getIdsToVisit VisitContext.getIdsToVisit()
+     */
+    @Override
+    public Collection<String> getIdsToVisit() {
+
+        // We just return our clientIds collection.  This is
+        // the modifiable (but proxied) collection of all of
+        // the client ids to visit.
+        return clientIds;
+    }
+
+    public Collection<String> getUnvisitedClientIds() {
+        return unvisitedClientIds;
+    }
+
+    /**
+     * @see VisitContext#getSubtreeIdsToVisit VisitContext.getSubtreeIdsToVisit()
+     */
+    @Override
+    public Collection<String> getSubtreeIdsToVisit(UIComponent component) {
+
+        // Make sure component is a NamingContainer
+        if (!(component instanceof NamingContainer)) {
+            throw new IllegalArgumentException("Component is not a NamingContainer: " + component);
+        }
+
+        String clientId = component.getClientId();
+        Collection<String> ids = subtreeClientIds.get(clientId);
+
+        if (ids == null)
+          return Collections.emptyList();
+
+        return Collections.unmodifiableCollection(ids);     
+    }
+
+    /**
+     * @see VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()
+     */
+    @Override
+    public VisitResult invokeVisitCallback(UIComponent component, 
+                                           VisitCallback callback) {
+
+        // First sure that we should visit this component - ie.
+        // that this component is represented in our id set.
+        String clientId = getVisitId(component);
+
+        if (clientId == null) {
+            // Not visiting this component, but allow visit to
+            // continue into this subtree in case we've got
+            // visit targets there.
+            return VisitResult.ACCEPT;
+        }
+
+        // If we made it this far, the component matches one of
+        // client ids, so perform the visit.
+        VisitResult result = callback.visit(this, component);
+
+        // Remove the component from our "unvisited" collection
+        unvisitedClientIds.remove(clientId);
+
+        // If the unvisited collection is now empty, we are done.
+        // Return VisitResult.COMPLETE to terminate the visit.
+        if (unvisitedClientIds.isEmpty())
+            return VisitResult.COMPLETE;
+
+        // Otherwise, just return the callback's result 
+        return result;
+    }
+
+    // Called by CollectionProxy to notify PartialVisitContext that
+    // an new id has been added.
+    private void idAdded(String clientId) {
+
+        // An id to visit has been added, update our other
+        // collections to reflect this.
+
+        // Update the ids collection
+        ids.add(getIdFromClientId(clientId));
+
+        // Update the unvisited ids collection
+        unvisitedClientIds.add(clientId);
+
+        // Update the subtree ids collection
+        addSubtreeClientId(clientId);
+    }
+
+    // Called by CollectionProxy to notify PartialVisitContext that
+    // an id has been removed
+    private void idRemoved(String clientId) {
+
+        // An id to visit has been removed, update our other
+        // collections to reflect this.  Note that we don't
+        // update the ids collection, since we ids (non-client ids)
+        // may not be unique.
+
+        // Update the unvisited ids collection
+        unvisitedClientIds.remove(clientId);
+
+        // Update the subtree ids collection
+        removeSubtreeClientId(clientId);
+    }
+
+    // Called to initialize our various collections.
+    private void initializeCollections(Collection<String> clientIds) {
+
+        // We maintain 4 collections:
+        //
+        // 1. clientIds: contains all of the client ids to visit
+        // 2. ids: contains just ids (not client ids) to visit.
+        //    We use this to optimize our check to see whether a
+        //    particular component is in the visit set (ie. to
+        //    avoid having to compute the client id).
+        // 3. subtreeClientIds: contains client ids to visit broken
+        //    out by naming container subtree.  (Needed by
+        //    getSubtreeIdsToVisit()).
+        // 4. unvisitedClientIds: contains the client ids to visit that
+        //    have not yet been visited.
+        //
+        // We populate these now.
+        //
+        // Note that we use default HashSet/Map initial capacities, though
+        // perhaps we could pick more intelligent defaults.
+
+        // Initialize unvisitedClientIds collection
+        this.unvisitedClientIds = new HashSet<String>();
+
+        // Initialize ids collection
+        this.ids = new HashSet<String>();
+
+        // Intialize subtreeClientIds collection
+        this.subtreeClientIds = new HashMap<String,Collection<String>>();
+
+        // Initialize the clientIds collection.  Note that we proxy 
+        // this collection so that we can trap adds/removes and sync 
+        // up all of the other collections.
+        this.clientIds = new CollectionProxy<String>(new HashSet<String>());
+
+        // Finally, populate the clientIds collection.  This has the
+        // side effect of populating all of the other collections.       
+        this.clientIds.addAll(clientIds);
+    }
+
+    // Tests whether the specified component should be visited.
+    // If so, returns its client id.  If not, returns null.
+    private String getVisitId(UIComponent component) {
+
+        // We first check to see whether the component's id
+        // is in our id collection.  We do this before checking
+        // for the full client id because getting the full client id
+        // is more expensive than just getting the local id.
+        String id = component.getId();
+        if ((id != null) && !ids.contains(id))
+            return null;
+
+        // The id was a match - now check the client id.
+        // note that client id should never be null (should be
+        // generated even if id is null, so asserting this.)
+        String clientId = component.getClientId();
+        assert(clientId != null);
+
+        return clientIds.contains(clientId) ? clientId : null;
+    }
+
+
+    // Converts an client id into a plain old id by ripping
+    // out the trailing id segmetn.
+    private String getIdFromClientId(String clientId)
+    {
+        FacesContext facesContext = getFacesContext();
+        char separator = UINamingContainer.getSeparatorChar(facesContext);
+        int lastIndex = clientId.lastIndexOf(separator);
+
+        String id = null;
+
+        if (lastIndex < 0) {
+            id = clientId;
+        } else if (lastIndex < (clientId.length() - 1)) {
+            id = clientId.substring(lastIndex + 1);              
+        }
+ 
+        return id;
+    }
+
+    // Given a single client id, populate the subtree map with all possible
+    // subtree client ids
+    private void addSubtreeClientId(String clientId) {
+
+        FacesContext facesContext = getFacesContext();
+        char separator = UINamingContainer.getSeparatorChar(facesContext);
+
+
+        // Loop over the client id and find the substring corresponding to
+        // each ancestor NamingContainer client id.  For each ancestor
+        // NamingContainer, add an entry into the map for the full client
+        // id.
+
+        int length = clientId.length();
+
+        for (int i = 0; i < length; i++) {
+
+            if (clientId.charAt(i) == separator) {
+
+                // We found an ancestor NamingContainer client id - add 
+                // an entry to the map.
+                String namingContainerClientId = clientId.substring(0, i);
+
+                // Check to see whether we've already ids under this
+                // NamingContainer client id.  If not, create the 
+                // Collection for this NamingContainer client id and
+                // stash it away in our map
+                Collection<String> c = subtreeClientIds.get(namingContainerClientId);
+
+                if (c == null) {
+                    c = new ArrayList<String>();
+                    subtreeClientIds.put(namingContainerClientId, c);
+                }
+
+                // Stash away the client id
+                c.add(clientId);
+            }
+        }
+    }
+
+    // Given a single client id, remove any entries corresponding
+    // entries from our subtree collections
+    private void removeSubtreeClientId(String clientId) {
+
+        // Loop through each entry in the map and check to see whether
+        // the client id to remove should be contained in the corresponding
+        // collection - ie. whether the key (the NamingContainer client id)
+        // is present at the start of the client id to remove.
+        for (String key : subtreeClientIds.keySet()) {
+
+            if (clientId.startsWith(key)) {
+
+                // If the clientId starts with the key, we should
+                // have an entry for this clientId in the corresponding
+                // collection.  Remove it.
+                Collection<String> ids = subtreeClientIds.get(key);
+                ids.remove(clientId);
+            }
+        }
+    }
+
+
+    // Little proxy collection implementation.  We proxy the id
+    // collection so that we can detect modifications and update
+    // our internal state when ids to visit are added or removed.
+    private class CollectionProxy<E extends String> extends 
+        AbstractCollection<E> {
+
+        private CollectionProxy(Collection<E> wrapped) {
+            this.wrapped = wrapped;
+        }
+
+        @Override
+        public int size() {
+            return wrapped.size();
+        }
+
+        @Override
+        public Iterator<E> iterator() {
+            return new IteratorProxy<E>(wrapped.iterator());
+        }
+
+        @Override
+        public boolean add(E o) {
+          boolean added = wrapped.add(o);
+
+          if (added) {
+              idAdded(o);
+          }
+
+          return added;
+        }
+
+        private Collection<E> wrapped;
+    }
+
+    // Little proxy iterator implementation used by CollectionProxy
+    // so that we can catch removes.
+    private class IteratorProxy<E extends String> implements Iterator<E> {
+        private IteratorProxy(Iterator<E> wrapped) {
+            this.wrapped = wrapped;
+        }
+
+        public boolean hasNext() {
+            return wrapped.hasNext();
+        }
+
+        public E next() {
+            current = wrapped.next();
+
+            return current;
+        }
+
+        public void remove() {
+
+            if (current != null) {
+                idRemoved(current);
+            }
+
+            wrapped.remove();
+        }
+
+        private Iterator<E> wrapped;
+
+        private E current = null;
+    }
+
+    // The client ids to visit
+    private Collection<String> clientIds;
+
+    // The ids to visit
+    private Collection<String> ids;
+
+    // The client ids that have yet to be visited
+    private Collection<String> unvisitedClientIds;
+
+    // This map contains the information needed by getSubtreeIdsToVisit().
+    // The keys in this map are NamingContainer client ids.  The values
+    // are collections containing all of the client ids to visit within
+    // corresponding naming container.
+    private Map<String,Collection<String>> subtreeClientIds;
+
+    // The FacesContext for this request
+    private FacesContext facesContext;
+
+    // Our visit hints
+    private Set<VisitHint> hints;
+}
diff --git a/com/sun/faces/component/visit/VisitContextFactoryImpl.java b/com/sun/faces/component/visit/VisitContextFactoryImpl.java
new file mode 100644
index 0000000..6ffd2d3
--- /dev/null
+++ b/com/sun/faces/component/visit/VisitContextFactoryImpl.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.component.visit;
+
+import java.util.Collection;
+import java.util.Set;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitContextFactory;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p>
+ * Default implementation of {@link VisitContextFactory}.
+ * </p>
+ */
+public class VisitContextFactoryImpl extends VisitContextFactory {
+
+    public VisitContextFactoryImpl() {
+    }
+
+    @Override
+    public VisitContext getVisitContext(FacesContext context, 
+            Collection<String> ids, 
+            Set<VisitHint> hints) {
+        VisitContext result = null;
+
+        // If ids null (not empty), we create a FullVisitContext.
+        // Otherwise, we create a PartialVisitContext.  Note that
+        // an empty collection still means partial - the client
+        // can add ids to visit after they create the VisitContext.
+        if (null == ids) {
+            result = new FullVisitContext(context, hints);
+        }
+        else {
+            result = new PartialVisitContext(context, ids, hints);
+        }
+        
+        return result;
+    }
+
+    
+    
+}
diff --git a/com/sun/faces/config/AnnotationScanner.java b/com/sun/faces/config/AnnotationScanner.java
new file mode 100644
index 0000000..2bee0ae
--- /dev/null
+++ b/com/sun/faces/config/AnnotationScanner.java
@@ -0,0 +1,374 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import javax.faces.view.facelets.FaceletsResourceResolver;
+import java.util.ArrayList;
+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 com.sun.faces.scripting.ScriptManager;
+import com.sun.faces.scripting.groovy.GroovyHelper;
+import com.sun.faces.scripting.groovy.GroovyScriptManager;
+import com.sun.faces.spi.AnnotationProvider;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import javax.faces.bean.ManagedBean;
+import javax.faces.component.FacesComponent;
+import javax.faces.component.behavior.FacesBehavior;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.FacesConverter;
+import javax.faces.event.NamedEvent;
+import javax.faces.render.FacesBehaviorRenderer;
+import javax.faces.render.FacesRenderer;
+import javax.faces.validator.FacesValidator;
+import javax.servlet.ServletContext;
+import java.lang.annotation.Annotation;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.AnnotationScanPackages;
+
+
+/**
+ * This class is responsible for ensuring that the class file bytes of
+ * classes contained within the web application are scanned for any of the known
+ * Faces configuration Annotations:
+ * <ul>
+ *  <li>javax.faces.component.FacesBehavior</li>
+ *  <li>javax.faces.render.FacesBehaviorRenderer</li>
+ *  <li>javax.faces.component.FacesComponent</li>
+ *  <li>javax.faces.convert.FacesConverter</li>
+ *  <li>javax.faces.validator.FacesValidator</li>
+ *  <li>javax.faces.render.FacesRenderer</li>
+ *  <li>javax.faces.bean.ManagedBean</li>
+ *  <li>javax.faces.event.NamedEvent</li>
+ *  <li>javax.faces.view.facelets.FaceletsResourceResolver</li>
+ * </ul>
+ */
+public abstract class AnnotationScanner extends AnnotationProvider {
+
+
+    // <editor-fold defaultstate="collapsed" desc="data">
+
+    // <editor-fold defaultstate="collapsed" desc="private class vars">
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+    private static final String WILDCARD = "*";
+    
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="protected class vars">
+
+    protected static final Set<String> FACES_ANNOTATIONS;
+    protected static final Set<Class<? extends Annotation>> FACES_ANNOTATION_TYPE;
+
+    // </editor-fold>
+
+    static {
+        HashSet<String> annotations = new HashSet<String>(8, 1.0f);
+        // JAVASERVERFACES-1835 this collection has the same information twice.
+        // Once in javap -s format, and once as fully qualified Java class names.
+        Collections.addAll(annotations,
+                           "Ljavax/faces/component/FacesComponent;",
+                           "Ljavax/faces/convert/FacesConverter;",
+                           "Ljavax/faces/validator/FacesValidator;",
+                           "Ljavax/faces/render/FacesRenderer;",
+                           "Ljavax/faces/bean/ManagedBean;",
+                           "Ljavax/faces/event/NamedEvent;",
+                           "Ljavax/faces/component/behavior/FacesBehavior;",
+                           "Ljavax/faces/render/FacesBehaviorRenderer;",
+                           "Ljavax/faces/view/facelets/FaceletsResourceResolver;",
+                           "javax.faces.component.FacesComponent",
+                           "javax.faces.convert.FacesConverter",
+                           "javax.faces.validator.FacesValidator",
+                           "javax.faces.render.FacesRenderer",
+                           "javax.faces.bean.ManagedBean",
+                           "javax.faces.event.NamedEvent",
+                           "javax.faces.component.behavior.FacesBehavior",
+                           "javax.faces.render.FacesBehaviorRenderer",
+                           "javax.faces.view.facelets.FaceletsResourceResolver");
+        FACES_ANNOTATIONS = Collections.unmodifiableSet(annotations);
+        HashSet<Class<? extends Annotation>> annotationInstances =
+              new HashSet<Class<? extends Annotation>>(8, 1.0f);
+        Collections.addAll(annotationInstances,
+                           FacesComponent.class,
+                           FacesConverter.class,
+                           FacesValidator.class,
+                           FacesRenderer.class,
+                           ManagedBean.class,
+                           NamedEvent.class,
+                           FacesBehavior.class,
+                           FacesBehaviorRenderer.class,
+                           FaceletsResourceResolver.class);
+        FACES_ANNOTATION_TYPE = Collections.unmodifiableSet(annotationInstances);
+    }
+
+    private List<ScriptManager> scriptManagers = new ArrayList<ScriptManager>();
+    private boolean isAnnotationScanPackagesSet = false;
+    private String[] webInfClassesPackages;
+    private Map<String,String[]> classpathPackages;
+
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="constructors">
+
+    /**
+     * Creates a new <code>AnnotationScanner</code> instance.
+     *
+     * @param sc the <code>ServletContext</code> for the application to be
+     *  scanned
+     */
+    public AnnotationScanner(ServletContext sc) {
+        super(sc);
+
+        if (GroovyHelper.isGroovyAvailable(FacesContext.getCurrentInstance())) {
+            scriptManagers.add(new GroovyScriptManager(sc));
+        }
+
+        WebConfiguration webConfig = WebConfiguration.getInstance(sc);
+	initializeAnnotationScanPackages(sc, webConfig);
+
+    }
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="implementation details">
+
+    private void initializeAnnotationScanPackages(ServletContext sc, WebConfiguration webConfig) {
+        if (!webConfig.isSet(AnnotationScanPackages)) {
+            return;
+        }
+        isAnnotationScanPackagesSet = true;
+        classpathPackages = new HashMap<String,String[]>(4);
+        webInfClassesPackages = new String[0];
+        String[] options = webConfig.getOptionValue(AnnotationScanPackages, "\\s+");
+        List<String> packages = new ArrayList<String>(4);
+        for (String option : options) {
+            if (option.length() == 0) {
+                continue;
+            }
+            if (option.startsWith("jar:")) {
+                String[] parts = Util.split(sc, option, ":");
+                if (parts.length != 3) {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.annotation.scanner.configuration.invalid",
+                                   new String[] { AnnotationScanPackages.getQualifiedName(), option });
+                    }
+                } else {
+                    if (WILDCARD.equals(parts[1]) && !classpathPackages.containsKey(WILDCARD)) {
+                        classpathPackages.clear();
+                        classpathPackages.put(WILDCARD, normalizeJarPackages(Util.split(sc, parts[2], ",")));
+                    } else if (WILDCARD.equals(parts[1]) && classpathPackages.containsKey(WILDCARD)) {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING,
+                                       "jsf.annotation.scanner.configuration.duplicate.wildcard",
+                                       new String[] { AnnotationScanPackages.getQualifiedName(), option });
+                        }
+                    } else {
+                        if (!classpathPackages.containsKey(WILDCARD)) {
+                            classpathPackages.put(parts[1], normalizeJarPackages(Util.split(sc, parts[2], ",")));
+                        }
+                    }
+                }
+            } else {
+                if (WILDCARD.equals(option) && !packages.contains(WILDCARD)) {
+                    packages.clear();
+                    packages.add(WILDCARD);
+                } else {
+                    if (!packages.contains(WILDCARD)) {
+                        packages.add(option);
+                    }
+                }
+            }
+        }
+        webInfClassesPackages = packages.toArray(new String[packages.size()]);
+   }
+
+    private String[] normalizeJarPackages(String[] packages) {
+
+        if (packages.length == 0) {
+            return packages;
+        }
+        List<String> normalizedPackages = new ArrayList<String>(packages.length);
+        for (String pkg : packages) {
+            if (WILDCARD.equals(pkg)) {
+                normalizedPackages.clear();
+                normalizedPackages.add(WILDCARD);
+                break;
+            } else {
+                normalizedPackages.add(pkg);
+            }
+        }
+        return normalizedPackages.toArray(new String[normalizedPackages.size()]);
+
+    }
+
+    // </editor-fold>
+
+
+    // --------------------------------------------------------- Protected Methods
+
+    protected boolean processJar(String entry) {
+
+	// <editor-fold defaultstate="collapsed">
+
+        return (classpathPackages == null
+                  || (classpathPackages.containsKey(entry)
+                         || classpathPackages.containsKey(WILDCARD)));
+
+	// </editor-fold>
+
+    }
+
+    /**
+     * @param candidate the class that should be processed
+     * @return <code>true</code> if the class should be processed further,
+     *  otherwise, <code>false</code>
+     */
+    protected boolean processClass(String candidate) {
+
+	// <editor-fold defaultstate="collapsed">
+
+        return processClass(candidate, webInfClassesPackages);
+
+	// </editor-fold>
+    }
+
+    protected boolean processClass(String candidate, String [] packages) {
+
+	// <editor-fold defaultstate="collapsed">
+
+        if (packages == null) {
+            return true;
+        }
+
+        for (String packageName : packages) {
+            if (candidate.startsWith(packageName) || WILDCARD.equals(packageName)) {
+                return true;
+            }
+        }
+        return false;
+
+	// </editor-fold>
+    }
+
+
+    protected Map<Class<? extends Annotation>,Set<Class<?>>> processClassList(Set<String> classList) {
+
+	// <editor-fold defaultstate="collapsed">
+
+        Map<Class<? extends Annotation>,Set<Class<?>>> annotatedClasses = null;
+        if (classList.size() > 0) {
+            annotatedClasses = new HashMap<Class<? extends Annotation>,Set<Class<?>>>(6, 1.0f);
+            for (String className : classList) {
+                try {
+                    Class<?> clazz = Util.loadClass(className, this);
+                    Annotation[] annotations = clazz.getAnnotations();
+                    for (Annotation annotation : annotations) {
+                        Class<? extends Annotation> annoType =
+                              annotation.annotationType();
+                        if (FACES_ANNOTATION_TYPE.contains(annoType)) {
+                            Set<Class<?>> classes = annotatedClasses.get(annoType);
+                            if (classes == null) {
+                                classes = new HashSet<Class<?>>();
+                                annotatedClasses.put(annoType, classes);
+                            }
+                            classes.add(clazz);
+                        }
+                    }
+                } catch (ClassNotFoundException cnfe) {
+                    // shouldn't happen..
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "Unable to load annotated class: {0}",
+                                   className);
+                        LOGGER.log(Level.SEVERE, "", cnfe);
+                    }
+                } catch (NoClassDefFoundError ncdfe) {
+                    // this is more likely
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "Unable to load annotated class: {0}, reason: {1}",
+                                   new Object[] { className, ncdfe.toString()});
+                    }
+                }
+            }
+        }
+
+        return ((annotatedClasses != null)
+                ? annotatedClasses
+                : Collections.<Class<? extends Annotation>, Set<Class<?>>>emptyMap());
+
+	// </editor-fold>
+
+    }
+
+    protected void processScripts(Set<String> classList) {
+
+	// <editor-fold defaultstate="collapsed">
+
+        for (ScriptManager sm : scriptManagers) {
+            classList.addAll(sm.getScripts());
+        }
+
+	// </editor-fold>
+
+    }
+
+    protected boolean isAnnotationScanPackagesSet() {
+        return isAnnotationScanPackagesSet;
+    }
+
+    protected Map<String,String[]> getClasspathPackages() {
+        return classpathPackages;
+    }
+
+    protected String [] getWebInfClassesPackages() {
+        return webInfClassesPackages;
+    }
+
+}
diff --git a/com/sun/faces/config/ConfigManager.java b/com/sun/faces/config/ConfigManager.java
new file mode 100644
index 0000000..883e46c
--- /dev/null
+++ b/com/sun/faces/config/ConfigManager.java
@@ -0,0 +1,1332 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import com.sun.faces.RIConstants;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.ValidateFacesConfigFiles;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableThreading;
+import com.sun.faces.spi.ConfigurationResourceProvider;
+import com.sun.faces.spi.ConfigurationResourceProviderFactory;
+import com.sun.faces.spi.AnnotationProvider;
+import com.sun.faces.spi.AnnotationProviderFactory;
+import com.sun.faces.spi.HighAvailabilityEnabler;
+import static com.sun.faces.spi.ConfigurationResourceProviderFactory.ProviderType.*;
+import com.sun.faces.config.configprovider.MetaInfFacesConfigResourceProvider;
+import com.sun.faces.config.configprovider.MojarraFacesConfigResourceProvider;
+import com.sun.faces.config.configprovider.WebFacesConfigResourceProvider;
+import com.sun.faces.config.configprovider.MetaInfFaceletTaglibraryConfigProvider;
+import com.sun.faces.config.configprovider.WebAppFlowConfigResourceProvider;
+import com.sun.faces.config.configprovider.WebFaceletTaglibResourceProvider;
+import com.sun.faces.config.processor.ApplicationConfigProcessor;
+import com.sun.faces.config.processor.BehaviorConfigProcessor;
+import com.sun.faces.config.processor.ComponentConfigProcessor;
+import com.sun.faces.config.processor.ConfigProcessor;
+import com.sun.faces.config.processor.ConverterConfigProcessor;
+import com.sun.faces.config.processor.FactoryConfigProcessor;
+import com.sun.faces.config.processor.LifecycleConfigProcessor;
+import com.sun.faces.config.processor.ManagedBeanConfigProcessor;
+import com.sun.faces.config.processor.NavigationConfigProcessor;
+import com.sun.faces.config.processor.RenderKitConfigProcessor;
+import com.sun.faces.config.processor.ValidatorConfigProcessor;
+import com.sun.faces.config.processor.FaceletTaglibConfigProcessor;
+import com.sun.faces.config.processor.FacesConfigExtensionProcessor;
+import com.sun.faces.config.processor.FacesFlowDefinitionConfigProcessor;
+import com.sun.faces.config.processor.ProtectedViewsConfigProcessor;
+import com.sun.faces.config.processor.ResourceLibraryContractsConfigProcessor;
+import com.sun.faces.el.ELContextImpl;
+import com.sun.faces.spi.InjectionProvider;
+import com.sun.faces.spi.InjectionProviderFactory;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Timer;
+import com.sun.faces.util.Util;
+import org.xml.sax.InputSource;
+
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.event.PostConstructApplicationEvent;
+import javax.faces.application.Application;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamSource;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.Future;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.lang.annotation.Annotation;
+import java.net.URI;
+import java.util.Iterator;
+
+import java.util.ServiceLoader;
+import javax.el.ELContext;
+import javax.el.ELContextEvent;
+import javax.el.ELContextListener;
+import javax.faces.application.ApplicationConfigurationPopulator;
+import javax.faces.component.UIViewRoot;
+import javax.xml.validation.Schema;
+import org.w3c.dom.*;
+import org.xml.sax.SAXParseException;
+
+/**
+ * <p>
+ *  This class manages the initialization of each web application that uses
+ *  JSF.
+ * </p>
+ */
+public class ConfigManager {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    private static final Pattern JAR_PATTERN = Pattern.compile("(.*/(\\S*\\.jar)).*(/faces-config.xml|/*.\\.faces-config.xml)");
+
+    /**
+     * <p>
+     * A List of resource providers that search for faces-config documents.
+     * By default, this contains a provider for the Mojarra, and two other
+     * providers to satisfy the requirements of the specification.
+     * </p>
+     */
+    private static final List<ConfigurationResourceProvider> FACES_CONFIG_RESOURCE_PROVIDERS;
+
+    /**
+     * <p>
+     * A List of resource providers that search for faces-config documents.
+     * By default, this contains a provider for the Mojarra, and one other
+     * providers to satisfy the requirements of the specification.
+     * </p>
+     */
+    private static final List<ConfigurationResourceProvider> FACELET_TAGLIBRARY_RESOURCE_PROVIDERS;
+
+    /**
+     * <p>
+     *  The <code>ConfigManager</code> will multithread the calls to the
+     *  <code>ConfigurationResourceProvider</code>s as well as any calls
+     *  to parse a resources into a DOM.  By default, we'll use only 5 threads
+     *  per web application.
+     * </p>
+     */
+    private static final int NUMBER_OF_TASK_THREADS = 5;
+
+    /**
+     * <p>
+     *  There is only once instance of <code>ConfigManager</code>.
+     * <p>
+     */
+    private static final ConfigManager CONFIG_MANAGER = new ConfigManager();
+
+
+    /**
+     * The application-scoped key under which the Future responsible for annotation
+     * scanning is associated with.
+     */
+    private static final String ANNOTATIONS_SCAN_TASK_KEY =
+          ConfigManager.class.getName() + "_ANNOTATION_SCAN_TASK";
+
+
+    /**
+     * The initialization time FacesContext scoped key under which the
+     * InjectionProvider is stored.
+     */
+    public static final String INJECTION_PROVIDER_KEY =
+          ConfigManager.class.getName() + "_INJECTION_PROVIDER_TASK";
+
+
+    /**
+     * Name of the attribute added by ParseTask to indicate a
+     * {@link Document} instance as a representation of
+     * <code>/WEB-INF/faces-config.xml</code>.
+     */
+    public static final String WEB_INF_MARKER = "com.sun.faces.webinf";
+
+
+    /**
+     * <p>
+     *   Contains each <code>ServletContext</code> that we've initialized.
+     *   The <code>ServletContext</code> will be removed when the application
+     *   is destroyed.
+     * </p>
+     */
+    @SuppressWarnings({"CollectionWithoutInitialCapacity"})
+    private List<ServletContext> initializedContexts =
+         new CopyOnWriteArrayList<ServletContext>();
+
+    /**
+     * <p>
+     *  The chain of {@link ConfigProcessor} instances to processing of
+     *  faces-config documents.
+     * </p>
+     */
+    private static final ConfigProcessor FACES_CONFIG_PROCESSOR_CHAIN;
+
+
+    /**
+     * <p>
+     *  The chain of {@link ConfigProcessor} instances to processing of
+     *  facelet-taglib documents.
+     * </p>
+     */
+    private static final ConfigProcessor FACELET_TAGLIB_CONFIG_PROCESSOR_CHAIN;
+
+    /**
+     * Stylesheet to convert 1.0 and 1.1 based faces-config documents
+     * to our private 1.1 schema for validation.
+     */
+    private static final String FACES_TO_1_1_PRIVATE_XSL =
+          "/com/sun/faces/jsf1_0-1_1toSchema.xsl";
+
+    /**
+     * Stylesheet to convert 1.0 facelet-taglib documents
+     * from 1.0 to 2.0 for schema validation purposes.
+     */
+    private static final String FACELETS_TO_2_0_XSL =
+          "/com/sun/faces/facelets1_0-2_0toSchema.xsl";
+
+    private static final String FACES_CONFIG_1_X_DEFAULT_NS =
+          "http://java.sun.com/JSF/Configuration";
+
+    private static final String FACELETS_1_0_DEFAULT_NS =
+          "http://java.sun.com/JSF/Facelet";
+
+
+    static {
+
+        // initialize the resource providers for faces-config documents
+        List<ConfigurationResourceProvider> facesConfigProviders =
+          new ArrayList<ConfigurationResourceProvider>(3);
+        facesConfigProviders.add(new MojarraFacesConfigResourceProvider());
+        facesConfigProviders.add(new MetaInfFacesConfigResourceProvider());
+        facesConfigProviders.add(new WebAppFlowConfigResourceProvider());
+        facesConfigProviders.add(new WebFacesConfigResourceProvider());
+        FACES_CONFIG_RESOURCE_PROVIDERS = Collections.unmodifiableList(facesConfigProviders);
+
+        // initialize the resource providers for facelet-taglib documents
+        List<ConfigurationResourceProvider> faceletTaglibProviders =
+              new ArrayList<ConfigurationResourceProvider>(3);
+        faceletTaglibProviders.add(new MetaInfFaceletTaglibraryConfigProvider());
+        faceletTaglibProviders.add(new WebFaceletTaglibResourceProvider());
+        FACELET_TAGLIBRARY_RESOURCE_PROVIDERS = Collections.unmodifiableList(faceletTaglibProviders);
+
+        // initialize the config processors for faces-config documents
+        ConfigProcessor[] configProcessors = {
+             new FactoryConfigProcessor(),
+             new LifecycleConfigProcessor(),
+             new ApplicationConfigProcessor(),
+             new ComponentConfigProcessor(),
+             new ConverterConfigProcessor(),
+             new ValidatorConfigProcessor(),
+             new ManagedBeanConfigProcessor(),
+             new RenderKitConfigProcessor(),
+             new NavigationConfigProcessor(),
+             new BehaviorConfigProcessor(),
+             new FacesConfigExtensionProcessor(),
+             new ProtectedViewsConfigProcessor(),
+             new FacesFlowDefinitionConfigProcessor(),
+             new ResourceLibraryContractsConfigProcessor()
+        };
+        for (int i = 0; i < configProcessors.length; i++) {
+            ConfigProcessor p = configProcessors[i];
+            if ((i + 1) < configProcessors.length) {
+                p.setNext(configProcessors[i + 1]);
+            }
+        }
+        FACES_CONFIG_PROCESSOR_CHAIN = configProcessors[0];
+
+        // initialize the config processor for facelet-taglib documents
+        FACELET_TAGLIB_CONFIG_PROCESSOR_CHAIN = new FaceletTaglibConfigProcessor();
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @return a <code>ConfigManager</code> instance
+     */
+    public static ConfigManager getInstance() {
+
+        return CONFIG_MANAGER;
+
+    }
+    
+    private void initializeConfigProcessers(ServletContext sc) {
+        ConfigProcessor p = FACES_CONFIG_PROCESSOR_CHAIN;
+        do {
+            p.initializeClassMetadataMap(sc);
+            
+        } while (null != (p = p.getNext()));
+
+    }
+
+
+    /**
+     * <p>
+     *   This method bootstraps JSF based on the parsed configuration resources.
+     * </p>
+     *
+     * @param sc the <code>ServletContext</code> for the application that
+     *  requires initialization
+     */
+    public void initialize(ServletContext sc) {
+
+        if (!hasBeenInitialized(sc)) {
+            initializedContexts.add(sc);
+            initializeConfigProcessers(sc);
+            ExecutorService executor = null;
+            try {
+                WebConfiguration webConfig = WebConfiguration.getInstance(sc);
+                boolean validating = webConfig.isOptionEnabled(ValidateFacesConfigFiles);
+                if (useThreads(sc)) {
+                    executor = createExecutorService();
+                }
+
+                DocumentInfo[] facesDocuments =
+                      getConfigDocuments(sc,
+                                         getFacesConfigResourceProviders(),
+                                         executor,
+                                         validating);
+
+                FacesConfigInfo lastFacesConfigInfo =
+                      new FacesConfigInfo(facesDocuments[facesDocuments.length - 1]);
+
+                facesDocuments = sortDocuments(facesDocuments, lastFacesConfigInfo);
+                InitFacesContext context = (InitFacesContext) FacesContext.getCurrentInstance();
+
+                InjectionProvider containerConnector =
+                        InjectionProviderFactory.createInstance(context.getExternalContext());
+                context.getAttributes().put(INJECTION_PROVIDER_KEY, containerConnector);
+
+                boolean isFaceletsDisabled = false;
+                
+                // Don't perform the check unless lastFacesConfigInfo is indeed
+                // *the* WEB-INF/faces-config.xml
+                if (lastFacesConfigInfo.isWebInfFacesConfig()) {
+                    isFaceletsDisabled = 
+                            isFaceletsDisabled(webConfig, lastFacesConfigInfo);
+                }
+                if (!lastFacesConfigInfo.isWebInfFacesConfig() || !lastFacesConfigInfo.isMetadataComplete()) {
+                    // execute the Task responsible for finding annotation classes
+                    ProvideMetadataToAnnotationScanTask taskMetadata = new ProvideMetadataToAnnotationScanTask(facesDocuments, containerConnector);
+                    Future<Map<Class<? extends Annotation>,Set<Class<?>>>> annotationScan;
+                    if (executor != null) {
+                        annotationScan = executor.submit(new AnnotationScanTask(sc, context, taskMetadata));
+                        pushTaskToContext(sc, annotationScan);
+                    } else {
+                        annotationScan =
+                              new FutureTask<Map<Class<? extends Annotation>,Set<Class<?>>>>(new AnnotationScanTask(sc, context, taskMetadata));
+                        ((FutureTask) annotationScan).run();
+                    }
+                    pushTaskToContext(sc, annotationScan);
+                }
+
+                //see if the app is running in a HA enabled env               
+                if (containerConnector instanceof HighAvailabilityEnabler) {                   
+                    ((HighAvailabilityEnabler)containerConnector).enableHighAvailability(sc);
+                }
+
+                ServiceLoader<ApplicationConfigurationPopulator> populators = 
+                        ServiceLoader.load(ApplicationConfigurationPopulator.class);
+                Document newDoc;
+                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+                dbf.setNamespaceAware(true);
+                DocumentBuilder builder = dbf.newDocumentBuilder();
+                DOMImplementation domImpl = builder.getDOMImplementation();
+                List<DocumentInfo> programmaticDocuments = new ArrayList<DocumentInfo>();
+                DocumentInfo newDocInfo;
+                for (ApplicationConfigurationPopulator pop : populators) {
+                    newDoc = domImpl.createDocument(RIConstants.JAVAEE_XMLNS, "faces-config", null);
+                    Attr versionAttribute = newDoc.createAttribute("version");
+                    versionAttribute.setValue("2.2");
+                    newDoc.getDocumentElement().getAttributes().setNamedItem(versionAttribute);
+                    
+                    try {
+                        pop.populateApplicationConfiguration(newDoc);
+                        newDocInfo = new DocumentInfo(newDoc, null);
+                        programmaticDocuments.add(newDocInfo);
+                    } catch (Throwable e) {
+                        if (LOGGER.isLoggable(Level.INFO)) {
+                            LOGGER.log(Level.INFO, "{0} thrown when invoking {1}.populateApplicationConfigurationResources: {2}", 
+                                    new String [] {
+                                        e.getClass().getName(),
+                                        pop.getClass().getName(),
+                                        e.getMessage()
+                                    }
+                            );
+                        }
+                    }
+                }
+                if (!programmaticDocuments.isEmpty()) {
+                    DocumentInfo [] newDocumentInfo = new DocumentInfo[facesDocuments.length + programmaticDocuments.size()];
+                    System.arraycopy(facesDocuments, 0, newDocumentInfo, 0, facesDocuments.length);
+                    int i = facesDocuments.length;
+                    for (DocumentInfo cur : programmaticDocuments) {
+                        newDocumentInfo[i] = cur;
+                    }
+                    facesDocuments = newDocumentInfo;
+                }
+                
+                // process the ordered documents
+                FACES_CONFIG_PROCESSOR_CHAIN.process(sc, facesDocuments);
+                if (!isFaceletsDisabled) {
+                    FACELET_TAGLIB_CONFIG_PROCESSOR_CHAIN.process(
+                          sc, getConfigDocuments(sc,
+                                             getFaceletConfigResourceProviders(),
+                                             executor,
+                                             validating));
+                }
+
+            } catch (Exception e) {
+                // clear out any configured factories
+                releaseFactories();
+                Throwable t = e;
+                if (!(e instanceof ConfigurationException)) {
+                    t = new ConfigurationException("CONFIGURATION FAILED! " + t.getMessage(), t);
+                }
+                throw (ConfigurationException)t;
+            } finally {
+                if (executor != null) {
+                    executor.shutdown();
+                }
+                sc.removeAttribute(ANNOTATIONS_SCAN_TASK_KEY);
+            }
+        }
+
+        DbfFactory.removeSchemaMap(sc);
+    }
+    
+
+
+
+    /**
+     * <p>
+     *   This method will remove any information about the application.
+     * </p>
+     * @param sc the <code>ServletContext</code> for the application that
+     *  needs to be removed
+     */
+    public void destroy(ServletContext sc) {
+
+        releaseFactories();
+        initializedContexts.remove(sc);
+
+    }
+
+
+    /**
+     * @param sc the <code>ServletContext</code> for the application in question
+     * @return <code>true</code> if this application has already been initialized,
+     *  otherwise returns </code>fase</code>
+     */
+    public boolean hasBeenInitialized(ServletContext sc) {
+
+        return (initializedContexts.contains(sc));
+
+    }
+
+
+    /**
+     * @return the results of the annotation scan task
+     */
+    public static Map<Class<? extends Annotation>,Set<Class<?>>> getAnnotatedClasses(FacesContext ctx) {
+
+        Map<String, Object> appMap =
+              ctx.getExternalContext().getApplicationMap();
+        //noinspection unchecked
+        Future<Map<Class<? extends Annotation>,Set<Class<?>>>> scanTask =
+              (Future<Map<Class<? extends Annotation>,Set<Class<?>>>>) appMap.get(ANNOTATIONS_SCAN_TASK_KEY);
+        try {
+            return ((scanTask != null)
+                    ? scanTask.get()
+                    : Collections.<Class<? extends Annotation>,Set<Class<?>>>emptyMap());
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static boolean useThreads(ServletContext ctx) {
+
+        WebConfiguration config = WebConfiguration.getInstance(ctx);
+        return config.isOptionEnabled(EnableThreading);
+
+    }
+
+
+    private List<ConfigurationResourceProvider> getFacesConfigResourceProviders() {
+
+        return getConfigurationResourceProviders(FACES_CONFIG_RESOURCE_PROVIDERS,
+                                                 FacesConfig);
+
+    }
+
+
+    private List<ConfigurationResourceProvider> getFaceletConfigResourceProviders() {
+
+        return getConfigurationResourceProviders(FACELET_TAGLIBRARY_RESOURCE_PROVIDERS,
+                                                 FaceletConfig);
+
+    }
+
+
+    private List<ConfigurationResourceProvider> getConfigurationResourceProviders(List<ConfigurationResourceProvider> defaultProviders,
+                                                                                  ConfigurationResourceProviderFactory.ProviderType providerType) {
+
+        ConfigurationResourceProvider[] custom =
+              ConfigurationResourceProviderFactory.createProviders(providerType);
+        if (custom.length == 0) {
+            return defaultProviders;
+        } else {
+            List<ConfigurationResourceProvider> list = new ArrayList<ConfigurationResourceProvider>();
+            list.addAll(defaultProviders);
+            // insert the custom providers after the META-INF providers and
+            // before those that scan /WEB-INF
+            list.addAll((defaultProviders.size() - 1), Arrays.asList(custom));
+            return Collections.unmodifiableList(list);
+        }
+
+    }
+
+
+    /**
+     * <p>
+     * Sort the <code>faces-config</code> documents found on the classpath
+     * and those specified by the <code>javax.faces.CONFIG_FILES</code> context
+     * init parameter.
+     * </p>
+     *
+     * @param facesDocuments an array of <em>all</em> <code>faces-config</code>
+     *  documents
+     * @param webInfFacesConfig FacesConfigInfo representing the WEB-INF/faces-config.xml
+     *  for this app
+     *
+     * @return the sorted documents
+     */
+    private DocumentInfo[] sortDocuments(DocumentInfo[] facesDocuments,
+                                         FacesConfigInfo webInfFacesConfig) {
+
+
+        int len = (webInfFacesConfig.isWebInfFacesConfig()
+                     ? facesDocuments.length - 1
+                     : facesDocuments.length);
+
+        List<String> absoluteOrdering = webInfFacesConfig.getAbsoluteOrdering();
+
+        if (len > 1) {
+            List<DocumentOrderingWrapper> list =
+                  new ArrayList<DocumentOrderingWrapper>();
+            for (int i = 1; i < len; i++) {
+                list.add(new DocumentOrderingWrapper(facesDocuments[i]));
+            }
+            DocumentOrderingWrapper[] ordering =
+                  list.toArray(new DocumentOrderingWrapper[list.size()]);
+            if (absoluteOrdering == null) {
+                DocumentOrderingWrapper.sort(ordering);
+                // sorting complete, now update the appropriate locations within
+                // the original array with the sorted documentation.
+                for (int i = 1; i < len; i++) {
+                    facesDocuments[i] = ordering[i - 1].getDocument();
+                }
+                return facesDocuments;
+            } else {
+                DocumentOrderingWrapper[] result =
+                      DocumentOrderingWrapper.sort(ordering, absoluteOrdering);
+                DocumentInfo[] ret = new DocumentInfo[((webInfFacesConfig.isWebInfFacesConfig()) ? (result.length + 2) : (result.length + 1))];
+                for (int i = 1; i < len; i++) {
+                    ret[i] = result[i - 1].getDocument();
+                }
+                // add the impl specific config file
+                ret[0] = facesDocuments[0];
+                // add the WEB-INF if necessary
+                if (webInfFacesConfig.isWebInfFacesConfig()) {
+                    ret[ret.length - 1] = facesDocuments[facesDocuments.length - 1];
+                }
+                return ret;
+            }
+        }
+
+        return facesDocuments;
+    }
+
+
+    /**
+     * <p>
+     * Utility method to check if JSF 2.0 Facelets should be disabled.
+     * If it's not explicitly disabled by the context init parameter, then
+     * check the version of the WEB-INF/faces-config.xml document.  If the version
+     * is less than 2.0, then override the default value for the context init
+     * parameter so that other parts of the system that use that config option
+     * will know it has been disabled.
+     * </p>
+     *
+     * <p>
+     * NOTE:  Since this method overrides a configuration value, it should
+     * be called before *any* document parsing is performed the configuration
+     * value may be queried by the <code>ConfigParser</code>s.
+     * </p>
+     *
+     * @param webconfig configuration for this application
+     * @param facesConfigInfo object representing WEB-INF/faces-config.xml
+     * @return <code>true</code> if Facelets should be disabled
+     */
+    private boolean isFaceletsDisabled(WebConfiguration webconfig,
+                                       FacesConfigInfo facesConfigInfo) {
+
+        boolean isFaceletsDisabled = webconfig.isOptionEnabled(DisableFaceletJSFViewHandler);
+        if (!isFaceletsDisabled) {
+            // if not explicitly disabled, make a sanity check against
+            // /WEB-INF/faces-config.xml
+            isFaceletsDisabled = !facesConfigInfo.isVersionGreaterOrEqual(2.0);
+            webconfig.overrideContextInitParameter(DisableFaceletJSFViewHandler, isFaceletsDisabled);
+        }
+        return isFaceletsDisabled;
+
+    }
+
+
+    /**
+     * Push the provided <code>Future</code> to the specified <code>ServletContext</code>.
+     */
+    private void pushTaskToContext(ServletContext sc,
+                                   Future<Map<Class<? extends Annotation>,Set<Class<?>>>> scanTask) {
+
+        sc.setAttribute(ANNOTATIONS_SCAN_TASK_KEY, scanTask);
+
+    }
+
+
+    /**
+     * Publishes a {@link javax.faces.event.PostConstructApplicationEvent} event for the current
+     * {@link Application} instance.
+     */
+    void publishPostConfigEvent() {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        Application app = ctx.getApplication();
+        if (null == ((InitFacesContext)ctx).getELContext()) {
+            ELContext elContext = new ELContextImpl(app.getELResolver());
+            elContext.putContext(FacesContext.class, ctx);
+            UIViewRoot root = ctx.getViewRoot();
+            if (null != root) {
+                elContext.setLocale(root.getLocale());
+            }
+            ELContextListener[] listeners = app.getELContextListeners();
+            if (listeners.length > 0) {
+                ELContextEvent event = new ELContextEvent(elContext);
+                for (ELContextListener listener: listeners) {
+                    listener.contextCreated(event);
+                }
+            }
+            ((InitFacesContext)ctx).setELContext(elContext);
+        }
+        
+        app.publishEvent(ctx,
+                         PostConstructApplicationEvent.class,
+                         Application.class,
+                         app);
+
+    }
+
+
+    /**
+     * <p>
+     *   Obtains an array of <code>Document</code>s to be processed
+     *   by {@link ConfigManager#FACES_CONFIG_PROCESSOR_CHAIN}.
+     * </p>
+     *
+     * @param sc the <code>ServletContext</code> for the application to be
+     *  processed
+     * @param providers <code>List</code> of <code>ConfigurationResourceProvider</code>
+     *  instances that provide the URL of the documents to parse.
+     * @param executor the <code>ExecutorService</code> used to dispatch parse
+     *  request to
+     * @param validating flag indicating whether or not the documents
+     *  should be validated
+     * @return an array of <code>DocumentInfo</code>s
+     */
+    private static DocumentInfo[] getConfigDocuments(ServletContext sc,
+                                                 List<ConfigurationResourceProvider> providers,
+                                                 ExecutorService executor,
+                                                 boolean validating) {
+
+        List<FutureTask<Collection<URI>>> urlTasks =
+             new ArrayList<FutureTask<Collection<URI>>>(providers.size());
+        for (ConfigurationResourceProvider p : providers) {
+            FutureTask<Collection<URI>> t =
+                 new FutureTask<Collection<URI>>(new URITask(p, sc));
+            urlTasks.add(t);
+            if (executor != null) {
+                executor.execute(t);
+            } else {
+                t.run();
+            }
+        }
+
+        List<FutureTask<DocumentInfo>> docTasks =
+             new ArrayList<FutureTask<DocumentInfo>>(providers.size() << 1);
+
+        for (FutureTask<Collection<URI>> t : urlTasks) {
+            try {
+                Collection<URI> l = t.get();
+                for (URI u : l) {
+                    FutureTask<DocumentInfo> d =
+                         new FutureTask<DocumentInfo>(new ParseTask(sc, validating, u));
+                    docTasks.add(d);
+                    if (executor != null) {
+                        executor.execute(d);
+                    } else {
+                        d.run();
+                    }
+                }
+            } catch (InterruptedException ignored) {
+            } catch (Exception e) {
+                throw new ConfigurationException(e);
+            }
+        }
+
+        List<DocumentInfo> docs = new ArrayList<DocumentInfo>(docTasks.size());
+        for (FutureTask<DocumentInfo> t : docTasks) {
+            try {
+                docs.add(t.get());
+            } catch (ExecutionException e) {
+                throw new ConfigurationException(e);
+            } catch (InterruptedException ignored) { }
+        }
+
+        return docs.toArray(new DocumentInfo[docs.size()]);
+
+    }
+
+
+    /**
+     * Create a new <code>ExecutorService</code> with
+     * {@link #NUMBER_OF_TASK_THREADS} threads.
+     */
+    private static ExecutorService createExecutorService() {
+
+        int tc = Runtime.getRuntime().availableProcessors();
+        if (tc > NUMBER_OF_TASK_THREADS) {
+            tc = NUMBER_OF_TASK_THREADS;
+        }
+        return Executors.newFixedThreadPool(tc);
+
+    }
+
+
+//    /**
+//     * @param throwable Throwable
+//     * @return the root cause of this error
+//     */
+//    private Throwable unwind(Throwable throwable) {
+//
+//          Throwable t = null;
+//          if (throwable != null) {
+//              t =  unwind(throwable.getCause());
+//              if (t == null) {
+//                  t = throwable;
+//              }
+//          }
+//          return t;
+//
+//    }
+
+
+    /**
+     * Calls through to {@link javax.faces.FactoryFinder#releaseFactories()}
+     * ignoring any exceptions.
+     */
+    private void releaseFactories() {
+        try {
+            FactoryFinder.releaseFactories();
+        } catch (FacesException ignored) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "Exception thrown from FactoryFinder.releaseFactories()",
+                           ignored);
+            }
+        }
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+    private static final class ProvideMetadataToAnnotationScanTask {
+        DocumentInfo [] documentInfos;
+        InjectionProvider containerConnector;
+        Set<URI> uris = null;
+        Set<String> jarNames = null;
+
+        private ProvideMetadataToAnnotationScanTask(DocumentInfo [] documentInfos,
+                InjectionProvider containerConnector) {
+            this.documentInfos = documentInfos;
+            this.containerConnector = containerConnector;
+        }
+
+        private void initializeIvars() {
+            if (null != uris || null != jarNames) {
+                assert(null != uris && null != jarNames);
+                return;
+            }
+            uris = new HashSet<URI>(documentInfos.length);
+            jarNames = new HashSet<String>(documentInfos.length);
+            for (DocumentInfo docInfo : documentInfos) {
+                URI sourceURI = docInfo.getSourceURI();
+                Matcher m = JAR_PATTERN.matcher(sourceURI.toString());
+                if (m.matches()) {
+                    String jarName = m.group(2);
+                    if (!jarNames.contains(jarName)) {
+                        FacesConfigInfo configInfo = new FacesConfigInfo(docInfo);
+                        if (!configInfo.isMetadataComplete()) {
+                            uris.add(sourceURI);
+                            jarNames.add(jarName);
+                        }
+                    }
+                }
+            }
+        }
+
+        private Set<URI> getAnnotationScanURIs() {
+            initializeIvars();
+
+            return uris;
+
+        }
+
+        private Set<String> getJarNames() {
+            initializeIvars();
+
+            return jarNames;
+        }
+
+        private com.sun.faces.spi.AnnotationScanner getAnnotationScanner() {
+            com.sun.faces.spi.AnnotationScanner result = null;
+            if (this.containerConnector instanceof com.sun.faces.spi.AnnotationScanner) {
+                result = (com.sun.faces.spi.AnnotationScanner) this.containerConnector;
+            }
+            return result;
+        }
+    }
+
+
+    /**
+     * Scans the class files within a web application returning a <code>Set</code>
+     * of classes that have been annotated with a standard Faces annotation.
+     */
+    private static class AnnotationScanTask implements Callable<Map<Class<? extends Annotation>,Set<Class<?>>>> {
+
+        private ServletContext sc;
+        private InitFacesContext facesContext;
+        private AnnotationProvider provider;
+        private ProvideMetadataToAnnotationScanTask metadataGetter;
+
+        // -------------------------------------------------------- Constructors
+
+
+        public AnnotationScanTask(ServletContext sc, InitFacesContext facesContext, ProvideMetadataToAnnotationScanTask metadataGetter) {
+            this.facesContext = facesContext;
+            this.provider = AnnotationProviderFactory.createAnnotationProvider(sc);
+            this.metadataGetter = metadataGetter;
+
+        }
+
+
+        // ----------------------------------------------- Methods from Callable
+
+
+        public Map<Class<? extends Annotation>,Set<Class<?>>> call() throws Exception {
+
+            Timer t = Timer.getInstance();
+            if (t != null) {
+                t.startTiming();
+            }
+
+            // We are executing on a different thread.
+            facesContext.callSetCurrentInstance();
+            Set<URI> scanUris = null;
+            com.sun.faces.spi.AnnotationScanner annotationScanner =
+                    metadataGetter.getAnnotationScanner();
+
+            // This is where we discover what kind of InjectionProvider
+            // we have.
+            if (provider instanceof DelegatingAnnotationProvider &&
+                null != annotationScanner) {
+                // This InjectionProvider is capable of annotation scanning *and*
+                // injection.
+                ((DelegatingAnnotationProvider)provider).setAnnotationScanner(annotationScanner,
+                        metadataGetter.getJarNames());
+                scanUris = Collections.emptySet();
+            } else {
+                // This InjectionProvider is capable of annotation scanning only
+                scanUris = metadataGetter.getAnnotationScanURIs();
+            }
+            //AnnotationScanner scanner = new AnnotationScanner(sc);
+            Map<Class<? extends Annotation>,Set<Class<?>>> annotatedClasses =
+                  provider.getAnnotatedClasses(scanUris);
+
+            if (t != null) {
+                t.stopTiming();
+                t.logResult("Configuration annotation scan complete.");
+            }
+
+            return annotatedClasses;
+
+        }
+
+
+    } // END AnnotationScanTask
+
+
+    /**
+     * <p>
+     *  This <code>Callable</code> will be used by {@link ConfigManager#getConfigDocuments(javax.servlet.ServletContext, java.util.List, java.util.concurrent.ExecutorService, boolean)}.
+     *  It represents a single configuration resource to be parsed into a DOM.
+     * </p>
+     */
+    private static class ParseTask implements Callable<DocumentInfo> {
+        private static final String JAVAEE_SCHEMA_LEGACY_DEFAULT_NS =
+            "http://java.sun.com/xml/ns/javaee";
+        private static final String JAVAEE_SCHEMA_DEFAULT_NS =
+            "http://xmlns.jcp.org/xml/ns/javaee";
+        private static final String EMPTY_FACES_CONFIG =
+                "com/sun/faces/empty-faces-config.xml";
+        private ServletContext servletContext;
+        private URI documentURI;
+        private DocumentBuilderFactory factory;
+        private boolean validating;
+        
+        // -------------------------------------------------------- Constructors
+
+
+        /**
+         * <p>
+         *   Constructs a new ParseTask instance
+         * </p>
+         *
+         * @param servletContext the servlet context.
+         * @param validating whether or not we're validating
+         * @param documentURI a URL to the configuration resource to be parsed
+         * @throws Exception general error
+         */
+        public ParseTask(ServletContext servletContext, boolean validating, URI documentURI)
+        throws Exception {
+            this.servletContext = servletContext;
+            this.documentURI = documentURI;
+            this.validating = validating;
+
+        }
+
+
+        // ----------------------------------------------- Methods from Callable
+
+
+        /**
+         * @return the result of the parse operation (a DOM)
+         * @throws Exception if an error occurs during the parsing process
+         */
+        public DocumentInfo call() throws Exception {
+
+            try {
+                Timer timer = Timer.getInstance();
+                if (timer != null) {
+                    timer.startTiming();
+                }
+
+                Document d = getDocument();
+
+                if (timer != null) {
+                    timer.stopTiming();
+                    timer.logResult("Parse " + documentURI.toURL().toExternalForm());
+                }
+
+                return new DocumentInfo(d, documentURI);
+            } catch (Exception e) {
+                throw new ConfigurationException(MessageFormat.format(
+                     "Unable to parse document ''{0}'': {1}",
+                     documentURI.toURL().toExternalForm(),
+                     e.getMessage()), e);
+            }
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        /**
+         * @return <code>Document</code> based on <code>documentURI</code>.
+         * @throws Exception if an error occurs during the process of building a
+         *  <code>Document</code>
+         */
+        private Document getDocument() throws Exception {
+
+            Document returnDoc;
+            DocumentBuilder db = getNonValidatingBuilder();
+            URL documentURL = documentURI.toURL();
+            InputSource is = new InputSource(getInputStream(documentURL));
+                is.setSystemId(documentURI.toURL().toExternalForm());
+            Document doc = null;
+
+            try {
+                doc = db.parse(is);
+            } catch (SAXParseException spe) {
+                // [mojarra-1693]
+                // Test if this is a zero length or whitespace only faces-config.xml file.
+                // If so, just make an empty Document
+                InputStream stream = is.getByteStream();
+                stream.close();
+
+                is = new InputSource(getInputStream(documentURL));
+                stream = is.getByteStream();
+                if (streamIsZeroLengthOrEmpty(stream) &&
+                    documentURL.toExternalForm().endsWith("faces-config.xml")) {
+                    ClassLoader loader = this.getClass().getClassLoader();
+                    is = new InputSource(getInputStream(loader.getResource(EMPTY_FACES_CONFIG)));
+                    doc = db.parse(is);
+                } 
+
+            }
+
+            String documentNS = null;
+            if (null == doc) {
+                if (FacesFlowDefinitionConfigProcessor.uriIsFlowDefinition(documentURI)) {
+                    documentNS = RIConstants.JAVAEE_XMLNS;
+                    doc = FacesFlowDefinitionConfigProcessor.synthesizeEmptyFlowDefinition(documentURI);
+                }
+            } else {
+                documentNS = doc.getDocumentElement().getNamespaceURI();
+            }
+            
+            if (validating && documentNS != null) {
+                DOMSource domSource
+                     = new DOMSource(doc, documentURL.toExternalForm());
+
+                /*
+                 * If the Document in question is 1.2 (i.e. it has a namespace matching
+                 * JAVAEE_SCHEMA_DEFAULT_NS, then perform validation using the cached schema
+                 * and return.  Otherwise we assume a 1.0 or 1.1 faces-config in which case
+                 * we need to transform it to reference a special 1.1 schema before validating.
+                 */
+                Node documentElement = ((Document) domSource.getNode()).getDocumentElement();
+                if (JAVAEE_SCHEMA_DEFAULT_NS.equals(documentNS)) {
+                    Attr version = (Attr)
+                            documentElement.getAttributes().getNamedItem("version");
+                    Schema schema;
+                    if (version != null) {
+                        String versionStr = version.getValue();
+                        if ("2.2".equals(versionStr)) {
+                            if ("facelet-taglib".equals(documentElement.getLocalName())) {
+                                schema = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACELET_TAGLIB_22);
+                            } else {
+                                schema = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACES_22);
+                            }
+                        } else {
+                            throw new ConfigurationException("Unknown Schema version: " + versionStr);
+                        }
+                        DocumentBuilder builder = getBuilderForSchema(schema);
+                        if (builder.isValidating()) {
+                            builder.getSchema().newValidator().validate(domSource);
+                            returnDoc = ((Document) domSource.getNode());
+                        } else {
+                            returnDoc = ((Document) domSource.getNode());
+                        }
+                    } else {
+                        // this shouldn't happen, but...
+                        throw new ConfigurationException("No document version available.");
+                    }
+                } else if (JAVAEE_SCHEMA_LEGACY_DEFAULT_NS.equals(documentNS)) {
+                    Attr version = (Attr)
+                            documentElement.getAttributes().getNamedItem("version");
+                    Schema schema;
+                    if (version != null) {
+                        String versionStr = version.getValue();
+                        if ("2.0".equals(versionStr)) {
+                            if ("facelet-taglib".equals(documentElement.getLocalName())) {
+                                schema = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACELET_TAGLIB_20);
+                            } else {
+                                schema = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACES_20);
+                            }
+                        } else if ("2.1".equals(versionStr)) {
+                            if ("facelet-taglib".equals(documentElement.getLocalName())) {
+                                schema = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACELET_TAGLIB_20);
+                            } else {
+                                schema = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACES_21);
+                            }
+                        } else if ("1.2".equals(versionStr)) {
+                            schema = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACES_12);
+                        } else {
+                            throw new ConfigurationException("Unknown Schema version: " + versionStr);
+                        }
+                        DocumentBuilder builder = getBuilderForSchema(schema);
+                        if (builder.isValidating()) {
+                            builder.getSchema().newValidator().validate(domSource);
+                            returnDoc = ((Document) domSource.getNode());
+                        } else {
+                            returnDoc = ((Document) domSource.getNode());
+                        }
+                    } else {
+                        // this shouldn't happen, but...
+                        throw new ConfigurationException("No document version available.");
+                    }
+                } else {
+                    DOMResult domResult = new DOMResult();
+                    Transformer transformer = getTransformer(documentNS);
+                    transformer.transform(domSource, domResult);
+                    // copy the source document URI to the transformed result
+                    // so that processes that need to build URLs relative to the
+                    // document will work as expected.
+                    ((Document) domResult.getNode())
+                          .setDocumentURI(((Document) domSource
+                                .getNode()).getDocumentURI());
+                    Schema schemaToApply;
+                    if (FACES_CONFIG_1_X_DEFAULT_NS.equals(documentNS)) {
+                        schemaToApply = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACES_11);
+                    } else if (FACELETS_1_0_DEFAULT_NS.equals(documentNS)) {
+                        schemaToApply = DbfFactory.getSchema(servletContext, DbfFactory.FacesSchema.FACELET_TAGLIB_20);
+                    } else {
+                        throw new IllegalStateException();
+                    }
+                    DocumentBuilder builder = getBuilderForSchema(schemaToApply);
+                    if (builder.isValidating()) {
+                        builder.getSchema().newValidator().validate(new DOMSource(domResult.getNode()));
+                        returnDoc = (Document) domResult.getNode();
+                    } else {
+                        returnDoc = (Document) domResult.getNode();
+                    }
+                }
+            } else {
+                returnDoc = doc;
+            }
+
+            // mark this document as the parsed representation of the
+            // WEB-INF/faces-config.xml.  This is used later in the configuration
+            // processing.
+            if (documentURL.toExternalForm().contains("/WEB-INF/faces-config.xml")) {
+                Attr webInf = returnDoc.createAttribute(WEB_INF_MARKER);
+                webInf.setValue("true");
+                returnDoc.getDocumentElement().getAttributes().setNamedItem(webInf);
+            }
+            return returnDoc;
+
+        }
+
+        private boolean streamIsZeroLengthOrEmpty(InputStream is) throws IOException {
+            boolean isZeroLengthOrEmpty = (0 == is.available());
+            final int size = 1024;
+            byte[] b = new byte[size];
+            String s;
+            while (!isZeroLengthOrEmpty && -1 != is.read(b, 0, size)) {
+                s = (new String(b, RIConstants.CHAR_ENCODING)).trim();
+                isZeroLengthOrEmpty = 0 == s.length();
+                b[0] = 0;
+                for (int i = 1; i < size; i += i) {
+                    System.arraycopy(b, 0, b, i, ((size - i) < i) ? (size - i) : i);
+                }
+            }
+
+            return isZeroLengthOrEmpty;
+        }
+
+
+        /**
+         * Obtain a <code>Transformer</code> using the style sheet
+         * referenced by the <code>XSL</code> constant.
+         *
+         * @return a new Tranformer instance
+         * @throws Exception if a Tranformer instance could not be created
+         */
+        private static Transformer getTransformer(String documentNS)
+        throws Exception {
+
+            TransformerFactory factory = Util.createTransformerFactory();
+
+            String xslToApply;
+            if (FACES_CONFIG_1_X_DEFAULT_NS.equals(documentNS)) {
+                xslToApply = FACES_TO_1_1_PRIVATE_XSL;
+            } else if (FACELETS_1_0_DEFAULT_NS.equals(documentNS)) {
+                xslToApply = FACELETS_TO_2_0_XSL;
+            } else {
+                throw new IllegalStateException();
+            }
+            return factory
+                 .newTransformer(new StreamSource(getInputStream(ConfigManager
+                      .class.getResource(xslToApply))));
+
+        }
+
+
+        /**
+         * @return an <code>InputStream</code> to the resource referred to by
+         *         <code>url</code>
+         * @param url source <code>URL</code>
+         * @throws IOException if an error occurs
+         */
+        private static InputStream getInputStream(URL url) throws IOException {
+
+            URLConnection conn = url.openConnection();
+            conn.setUseCaches(false);
+            return new BufferedInputStream(conn.getInputStream());
+
+        }
+
+
+
+        private DocumentBuilder getNonValidatingBuilder() throws Exception {
+
+            DocumentBuilderFactory tFactory = DbfFactory.getFactory();
+            tFactory.setValidating(false);
+            DocumentBuilder tBuilder = tFactory.newDocumentBuilder();
+            tBuilder.setEntityResolver(DbfFactory.FACES_ENTITY_RESOLVER);
+            tBuilder.setErrorHandler(DbfFactory.FACES_ERROR_HANDLER);
+            return tBuilder;
+
+        }
+
+        private DocumentBuilder getBuilderForSchema(Schema schema)
+        throws Exception {
+            this.factory = DbfFactory.getFactory();
+
+            try {
+                factory.setSchema(schema);
+            } catch (UnsupportedOperationException upe) {
+                return getNonValidatingBuilder();
+            }
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            builder.setEntityResolver(DbfFactory.FACES_ENTITY_RESOLVER);
+            builder.setErrorHandler(DbfFactory.FACES_ERROR_HANDLER);
+            return builder;
+        }
+
+    } // END ParseTask
+
+
+    /**
+     * <p>
+     *  This <code>Callable</code> will be used by {@link ConfigManager#getConfigDocuments(javax.servlet.ServletContext, java.util.List, java.util.concurrent.ExecutorService, boolean)}.
+     *  It represents one or more URLs to configuration resources that require
+     *  processing.
+     * </p>
+     */
+    private static class URITask implements Callable<Collection<URI>> {
+
+        private ConfigurationResourceProvider provider;
+        private ServletContext sc;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        /**
+         * Constructs a new <code>URITask</code> instance.
+         * @param provider the <code>ConfigurationResourceProvider</code> from
+         *  which zero or more <code>URL</code>s will be returned
+         * @param sc the <code>ServletContext</code> of the current application
+         */
+        public URITask(ConfigurationResourceProvider provider,
+                       ServletContext sc) {
+            this.provider = provider;
+            this.sc = sc;
+        }
+
+
+        // ----------------------------------------------- Methods from Callable
+
+
+        /**
+         * @return zero or more <code>URL</code> instances
+         * @throws Exception if an Exception is thrown by the underlying
+         *  <code>ConfigurationResourceProvider</code> 
+         */
+        public Collection<URI> call() throws Exception {
+            Collection untypedCollection = provider.getResources(sc);
+            Iterator untypedCollectionIterator = untypedCollection.iterator();
+            Collection<URI> result = Collections.emptyList();
+            if (untypedCollectionIterator.hasNext()) {
+                Object cur = untypedCollectionIterator.next();
+                // account for older versions of the provider that return Collection<URL>.
+                if (cur instanceof URL) {
+                    result = new ArrayList<URI>(untypedCollection.size());
+                    result.add(new URI(((URL)cur).toExternalForm()));
+                    while (untypedCollectionIterator.hasNext()) {
+                        cur = untypedCollectionIterator.next();
+                        result.add(new URI(((URL)cur).toExternalForm()));
+                    }
+                } else {
+                    result = (Collection<URI>) untypedCollection;
+                }
+            }
+
+            return result;
+        }
+
+    } // END URITask
+
+
+}
diff --git a/com/sun/faces/config/ConfigurationException.java b/com/sun/faces/config/ConfigurationException.java
new file mode 100644
index 0000000..83e4a61
--- /dev/null
+++ b/com/sun/faces/config/ConfigurationException.java
@@ -0,0 +1,71 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import javax.faces.FacesException;
+
+/**
+ * <p>
+ *  This represents any configuration processing problems that could
+ *  occur.
+ * </p>
+ */
+public class ConfigurationException extends FacesException {
+
+     public ConfigurationException() {
+        super();
+    }
+
+
+    public ConfigurationException(String message) {
+        super(message);
+    }
+
+
+    public ConfigurationException(Throwable t) {
+        super(t);
+    }
+
+
+    public ConfigurationException(String message, Throwable t) {
+        super(message, t);
+    }
+}
diff --git a/com/sun/faces/config/ConfigureListener.java b/com/sun/faces/config/ConfigureListener.java
new file mode 100644
index 0000000..570512a
--- /dev/null
+++ b/com/sun/faces/config/ConfigureListener.java
@@ -0,0 +1,1138 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.config;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.WebappLifecycleListener;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableGroovyScripting;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableLazyBeanValidation;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableThreading;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.ForceLoadFacesConfigFiles;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.VerifyFacesConfigObjects;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.JavaxFacesProjectStage;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import com.sun.faces.el.ChainTypeCompositeELResolver;
+import com.sun.faces.el.ELContextImpl;
+import com.sun.faces.el.ELContextListenerImpl;
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.el.FacesCompositeELResolver;
+import com.sun.faces.mgbean.BeanBuilder;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.scripting.groovy.GroovyHelper;
+import com.sun.faces.scripting.groovy.GroovyHelperFactory;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.MojarraThreadFactory;
+import com.sun.faces.util.ReflectionUtils;
+import com.sun.faces.util.Timer;
+import com.sun.faces.util.Util;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PreDestroyApplicationEvent;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextAttributeEvent;
+import javax.servlet.ServletContextAttributeListener;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletRequestAttributeEvent;
+import javax.servlet.ServletRequestAttributeListener;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionAttributeListener;
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
+import javax.servlet.jsp.JspApplicationContext;
+import javax.servlet.jsp.JspFactory;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>Parse all relevant JavaServer Faces configuration resources, and
+ * configure the Reference Implementation runtime environment.</p>
+ * <p/>
+ */
+public class ConfigureListener implements ServletRequestListener,
+        HttpSessionListener,
+        ServletRequestAttributeListener,
+        HttpSessionAttributeListener,
+        ServletContextAttributeListener,
+        ServletContextListener {
+
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    private ScheduledThreadPoolExecutor webResourcePool;
+
+    protected WebappLifecycleListener webAppListener;
+    protected WebConfiguration webConfig;
+
+
+    // ------------------------------------------ ServletContextListener Methods
+
+
+    public void contextInitialized(ServletContextEvent sce) {
+        ServletContext context = sce.getServletContext();
+
+        Timer timer = Timer.getInstance();
+        if (timer != null) {
+            timer.startTiming();
+        }
+
+        ConfigManager configManager = ConfigManager.getInstance();
+        if (configManager.hasBeenInitialized(context)) {
+            return;
+        }
+
+        InitFacesContext initContext = new InitFacesContext(context);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                    MessageFormat.format(
+                            "ConfigureListener.contextInitialized({0})",
+                            getServletContextIdentifier(context)));
+        }
+
+        webConfig = WebConfiguration.getInstance(context);
+
+        // Check to see if the FacesServlet is present in the
+        // web.xml.   If it is, perform faces configuration as normal,
+        // otherwise, simply return.
+        Object mappingsAdded = context.getAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED);
+        if (mappingsAdded != null) {
+            context.removeAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED);
+        }
+
+        WebXmlProcessor webXmlProcessor = new WebXmlProcessor(context);
+        if (mappingsAdded == null) {
+            if (!webXmlProcessor.isFacesServletPresent()) {
+                if (!webConfig.isOptionEnabled(ForceLoadFacesConfigFiles)) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                "No FacesServlet found in deployment descriptor - bypassing configuration");
+                    }
+                    WebConfiguration.clear(context);
+                    InitFacesContext.cleanupInitMaps(context);
+                    return;
+                }
+            } else {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                            "FacesServlet found in deployment descriptor - processing configuration.");
+                }
+            }
+        }
+        
+        if (webXmlProcessor.isDistributablePresent()) {
+            webConfig.setOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.EnableDistributable, true);
+            context.setAttribute(WebConfiguration.BooleanWebContextInitParameter.EnableDistributable.getQualifiedName(), Boolean.TRUE);
+        }
+
+
+        // bootstrap of faces required
+        webAppListener = new WebappLifecycleListener(context);
+        webAppListener.contextInitialized(sce);
+        ReflectionUtils.initCache(Thread.currentThread().getContextClassLoader());
+        Throwable caughtThrowable = null;
+
+        try {
+
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.log(Level.INFO,
+                        "jsf.config.listener.version",
+                        getServletContextIdentifier(context));
+            }
+
+            if (webConfig.isOptionEnabled(VerifyFacesConfigObjects)) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.warning("jsf.config.verifyobjects.development_only");
+                }
+                // if we're verifying, force bean validation to occur at startup as well
+                webConfig.overrideContextInitParameter(EnableLazyBeanValidation, false);
+                Verifier.setCurrentInstance(new Verifier());
+            }
+            initScripting();
+            configManager.initialize(context);
+            if (shouldInitConfigMonitoring()) {
+                initConfigMonitoring(context);
+            }
+
+            // Step 7, verify that all the configured factories are available
+            // and optionall that configured objects can be created. 
+            Verifier v = Verifier.getCurrentInstance();
+            if (v != null && !v.isApplicationValid() && LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.severe("jsf.config.verifyobjects.failures_detected");
+                StringBuilder sb = new StringBuilder(128);
+                for (String m : v.getMessages()) {
+                    sb.append(m).append('\n');
+                }
+                LOGGER.severe(sb.toString());
+            }
+            registerELResolverAndListenerWithJsp(context, false);
+            ELContext elctx = new ELContextImpl(initContext.getApplication().getELResolver());
+            elctx.putContext(FacesContext.class, initContext);
+            initContext.setELContext(elctx);
+            ApplicationAssociate associate =
+                    ApplicationAssociate.getInstance(context);
+            if (associate != null) {
+                associate.setContextName(getServletContextIdentifier(context));
+                BeanManager manager = associate.getBeanManager();
+                List<String> eagerBeans = manager.getEagerBeanNames();
+                if (!eagerBeans.isEmpty()) {
+                    for (String name : eagerBeans) {
+                        manager.create(name, initContext);
+                    }
+                }
+                boolean isErrorPagePresent = webXmlProcessor.isErrorPagePresent();
+                associate.setErrorPagePresent(isErrorPagePresent);
+                context.setAttribute(RIConstants.ERROR_PAGE_PRESENT_KEY_NAME,
+                        isErrorPagePresent);
+
+            }
+
+            webConfig.doPostBringupActions();
+            configManager.publishPostConfigEvent();
+
+        } catch (Throwable t) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "Critical error during deployment: ", t);
+            }
+            caughtThrowable = t;
+
+        } finally {
+            Verifier.setCurrentInstance(null);
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                        "jsf.config.listener.version.complete");
+            }
+            if (timer != null) {
+                timer.stopTiming();
+                timer.logResult("Initialization of context " +
+                        getServletContextIdentifier(context));
+            }
+            if (null != caughtThrowable) {
+                throw new RuntimeException(caughtThrowable);
+            }
+        }
+    }
+
+
+    public void contextDestroyed(ServletContextEvent sce) {
+        ServletContext context = sce.getServletContext();
+
+        if (!ConfigManager.getInstance().hasBeenInitialized(context)) {
+            return;
+        }
+
+        InitFacesContext initContext = null;
+        try {
+            initContext = getInitFacesContext(context);
+            if (null == initContext) {
+                initContext = new InitFacesContext(context);
+            } else {
+                InitFacesContext.getThreadInitContextMap().put(Thread.currentThread(), initContext);
+            }
+
+            if (webAppListener != null) {
+                webAppListener.contextDestroyed(sce);
+                webAppListener = null;
+            }
+            if (webResourcePool != null) {
+                webResourcePool.shutdownNow();
+            }
+            GroovyHelper helper = GroovyHelper.getCurrentInstance(context);
+            if (helper != null) {
+                helper.setClassLoader();
+            }
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "ConfigureListener.contextDestroyed({0})",
+                           context.getServletContextName());
+            }
+            
+            ELContext elctx = new ELContextImpl(initContext.getApplication().getELResolver());
+            elctx.putContext(FacesContext.class, initContext);
+            initContext.setELContext(elctx);
+            Application app = initContext.getApplication();
+            app.publishEvent(initContext,
+                    PreDestroyApplicationEvent.class,
+                    Application.class,
+                    app);
+
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                        "Unexpected exception when attempting to tear down the Mojarra runtime",
+                        e);
+            }
+        } finally {
+            ApplicationAssociate.clearInstance(context);
+            ApplicationAssociate.setCurrentInstance(null);
+            // Release the initialization mark on this web application
+            ConfigManager.getInstance().destroy(context);
+            FactoryFinder.releaseFactories();
+            ReflectionUtils.clearCache(Thread.currentThread().getContextClassLoader());
+            WebConfiguration.clear(context);
+            InitFacesContext.cleanupInitMaps(context);
+        }
+
+    }
+
+
+    // ------------------------------------- Methods from ServletRequestListener
+
+
+    public void requestDestroyed(ServletRequestEvent event) {
+        if (webAppListener != null) {
+            webAppListener.requestDestroyed(event);
+        }
+    }
+
+
+    public void requestInitialized(ServletRequestEvent event) {
+        if (webAppListener != null) {
+            webAppListener.requestInitialized(event);
+        }
+    }
+
+
+    // ----------------------------------------- Methods from HttpSessionListener
+
+
+    public void sessionCreated(HttpSessionEvent event) {
+        if (webAppListener != null) {
+            webAppListener.sessionCreated(event);
+        }
+    }
+
+
+    public void sessionDestroyed(HttpSessionEvent event) {
+        if (webAppListener != null) {
+            webAppListener.sessionDestroyed(event);
+        }
+    }
+
+
+    // ---------------------------- Methods from ServletRequestAttributeListener
+
+
+    public void attributeAdded(ServletRequestAttributeEvent event) {
+        // ignored
+    }
+
+
+    public void attributeRemoved(ServletRequestAttributeEvent event) {
+        if (webAppListener != null) {
+            webAppListener.attributeRemoved(event);
+        }
+    }
+
+
+    public void attributeReplaced(ServletRequestAttributeEvent event) {
+        if (webAppListener != null) {
+            webAppListener.attributeReplaced(event);
+        }
+    }
+
+
+    // ------------------------------- Methods from HttpSessionAttributeListener
+
+
+    public void attributeAdded(HttpSessionBindingEvent event) {
+        // ignored
+    }
+
+
+    public void attributeRemoved(HttpSessionBindingEvent event) {
+        if (webAppListener != null) {
+            webAppListener.attributeRemoved(event);
+        }
+    }
+
+
+    public void attributeReplaced(HttpSessionBindingEvent event) {
+        if (webAppListener != null) {
+            webAppListener.attributeReplaced(event);
+        }
+    }
+
+
+    // ---------------------------- Methods from ServletContextAttributeListener
+
+
+    public void attributeAdded(ServletContextAttributeEvent event) {
+        // ignored
+    }
+
+    public void attributeRemoved(ServletContextAttributeEvent event) {
+        if (webAppListener != null) {
+            webAppListener.attributeRemoved(event);
+        }
+    }
+
+    public void attributeReplaced(ServletContextAttributeEvent event) {
+        if (webAppListener != null) {
+            webAppListener.attributeReplaced(event);
+        }
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    private boolean shouldInitConfigMonitoring() {
+
+        boolean development = isDevModeEnabled();
+        boolean threadingOptionSpecified = webConfig.isSet(EnableThreading);
+        if (development && !threadingOptionSpecified) {
+            return true;
+        }
+        boolean threadingOption = webConfig.isOptionEnabled(EnableThreading);
+        return (development && threadingOptionSpecified && threadingOption);
+
+    }
+
+    private void initConfigMonitoring(ServletContext context) {
+
+        //noinspection unchecked
+        Collection<URI> webURIs =
+                (Collection<URI>) context.getAttribute("com.sun.faces.webresources");
+        if (isDevModeEnabled() && webURIs != null && !webURIs.isEmpty()) {
+            webResourcePool = new ScheduledThreadPoolExecutor(1, new MojarraThreadFactory("WebResourceMonitor"));
+            webResourcePool.scheduleAtFixedRate(new WebConfigResourceMonitor(context, webURIs),
+                    2000,
+                    2000,
+                    TimeUnit.MILLISECONDS);
+        }
+        context.removeAttribute("com.sun.faces.webresources");
+
+    }
+
+    private void initScripting() {
+        if (webConfig.isOptionEnabled(EnableGroovyScripting)) {
+            GroovyHelper helper = GroovyHelperFactory.createHelper();
+            if (helper != null) {
+                helper.setClassLoader();
+            }
+        }
+    }
+
+
+    private boolean isDevModeEnabled() {
+
+        // interrogate the init parameter directly vs looking up the application
+        return "Development".equals(webConfig.getOptionValue(JavaxFacesProjectStage));
+
+    }
+
+
+    /**
+     * This method will be invoked {@link WebConfigResourceMonitor} when
+     * changes to any of the faces-config.xml files included in WEB-INF
+     * are modified.
+     */
+    private void reload(ServletContext sc) {
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.log(Level.INFO,
+                    "Reloading JSF configuration for context {0}",
+                    getServletContextIdentifier(sc));
+        }
+        GroovyHelper helper = GroovyHelper.getCurrentInstance();
+        if (helper != null) {
+            helper.setClassLoader();
+        }
+        // tear down the application
+        try {
+            // this will only be true in the automated test usage scenario
+            if (null != webAppListener) {
+                List<HttpSession> sessions = webAppListener.getActiveSessions();
+                if (sessions != null) {
+                    for (HttpSession session : sessions) {
+                        if (LOGGER.isLoggable(Level.INFO)) {
+                            LOGGER.log(Level.INFO,
+                                    "Invalidating Session {0}",
+                                    session.getId());
+                        }
+                        session.invalidate();
+                    }
+                }
+            }
+            ApplicationAssociate associate = ApplicationAssociate.getInstance(sc);
+            if (associate != null) {
+                BeanManager manager = associate.getBeanManager();
+                for (Map.Entry<String, BeanBuilder> entry : manager.getRegisteredBeans().entrySet()) {
+                    String name = entry.getKey();
+                    BeanBuilder bean = entry.getValue();
+                    if (ELUtils.Scope.APPLICATION.toString().equals(bean.getScope())) {
+                        if (LOGGER.isLoggable(Level.INFO)) {
+                            LOGGER.log(Level.INFO,
+                                    "Removing application scoped managed bean: {0}",
+                                    name);
+                        }
+                        sc.removeAttribute(name);
+                    }
+
+                }
+            }
+            // Release any allocated application resources
+            FactoryFinder.releaseFactories();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            FacesContext initContext = new InitFacesContext(sc);
+            ApplicationAssociate
+                    .clearInstance(initContext.getExternalContext());
+            ApplicationAssociate.setCurrentInstance(null);
+            // Release the initialization mark on this web application
+            ConfigManager.getInstance().destroy(sc);
+            initContext.release();
+            ReflectionUtils.clearCache(Thread.currentThread().getContextClassLoader());
+            WebConfiguration.clear(sc);
+        }
+
+        // bring the application back up, avoid re-registration of certain JSP
+        // artifacts.  No verification will be performed either to make this
+        // light weight.
+
+        // init a new WebAppLifecycleListener so that the cached ApplicationAssociate
+        // is removed.
+        webAppListener = new WebappLifecycleListener(sc);
+
+        FacesContext initContext = new InitFacesContext(sc);
+        ReflectionUtils
+                .initCache(Thread.currentThread().getContextClassLoader());
+
+        try {
+            ConfigManager configManager = ConfigManager.getInstance();
+            configManager.initialize(sc);
+
+
+            registerELResolverAndListenerWithJsp(sc, true);
+            ApplicationAssociate associate =
+                    ApplicationAssociate.getInstance(sc);
+            if (associate != null) {
+                Boolean errorPagePresent = (Boolean) sc.getAttribute(RIConstants.ERROR_PAGE_PRESENT_KEY_NAME);
+                if (null != errorPagePresent) {
+                    associate.setErrorPagePresent(errorPagePresent);
+                    associate.setContextName(getServletContextIdentifier(sc));
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            initContext.release();
+        }
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.log(Level.INFO,
+                    "Reload complete.",
+                    getServletContextIdentifier(sc));
+        }
+
+    }
+
+
+    private static String getServletContextIdentifier(ServletContext context) {
+        if (context.getMajorVersion() == 2 && context.getMinorVersion() < 5) {
+            return context.getServletContextName();
+        } else {
+            return context.getContextPath();
+        }
+    }
+
+
+    private static boolean isJspTwoOne(ServletContext context) {
+
+        // The following try/catch is a hack to work around
+        // a bug in Tomcat 6 where JspFactory.getDefaultFactory() will
+        // return null unless JspRuntimeContext has been loaded.
+        try {
+            Class.forName("org.apache.jasper.compiler.JspRuntimeContext");
+        } catch (ClassNotFoundException ignored) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Dected JSP 2.1", ignored);
+            }
+        }
+
+        if (JspFactory.getDefaultFactory() == null) {
+            return false;
+        }
+        try {
+            JspFactory.class.getMethod("getJspApplicationContext",
+                    ServletContext.class);
+        } catch (Exception e) {
+            return false;
+        }
+        try {
+            JspFactory.getDefaultFactory().getJspApplicationContext(context);
+        } catch (Throwable e) {
+            return false;
+        }
+        return true;
+
+    }
+
+    public void registerELResolverAndListenerWithJsp(ServletContext context, boolean reloaded) {
+
+        if (webConfig.isSet(WebContextInitParameter.ExpressionFactory)
+                || !isJspTwoOne(context)) {
+
+            // first try to load a factory defined in web.xml
+            if (!installExpressionFactory(context,
+                    webConfig.getOptionValue(
+                            WebContextInitParameter.ExpressionFactory))) {
+
+                throw new ConfigurationException(
+                        MessageUtils.getExceptionMessageString(
+                                MessageUtils.INCORRECT_JSP_VERSION_ID,
+                                WebContextInitParameter.ExpressionFactory.getDefaultValue(),
+                                WebContextInitParameter.ExpressionFactory.getQualifiedName()));
+
+            }
+
+        } else {
+
+            // JSP 2.1 specific check
+            if (JspFactory.getDefaultFactory().getJspApplicationContext(context) == null) {
+                return;
+            }
+
+            // register an empty resolver for now. It will be populated after the 
+            // first request is serviced.
+            FacesCompositeELResolver compositeELResolverForJsp =
+                    new ChainTypeCompositeELResolver(FacesCompositeELResolver.ELResolverChainType.JSP);
+            ApplicationAssociate associate =
+                    ApplicationAssociate.getInstance(context);
+            if (associate != null) {
+                associate.setFacesELResolverForJsp(compositeELResolverForJsp);
+            }
+
+            // get JspApplicationContext.
+            JspApplicationContext jspAppContext = JspFactory.getDefaultFactory()
+                    .getJspApplicationContext(context);
+
+            // cache the ExpressionFactory instance in ApplicationAssociate
+            if (associate != null) {
+                associate.setExpressionFactory(jspAppContext.getExpressionFactory());
+            }
+
+            // register compositeELResolver with JSP
+            try {
+                jspAppContext.addELResolver(compositeELResolverForJsp);
+            }
+            catch (IllegalStateException e) {
+                ApplicationFactory factory = (ApplicationFactory)
+                        FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+                Application app = factory.getApplication();
+                if (app.getProjectStage() != ProjectStage.UnitTest && !reloaded) {
+                    throw e;
+                }
+            }
+
+            // register JSF ELContextListenerImpl with Jsp
+            ELContextListenerImpl elContextListener = new ELContextListenerImpl();
+            jspAppContext.addELContextListener(elContextListener);
+        }
+    }
+
+    private boolean installExpressionFactory(ServletContext sc,
+                                             String elFactoryType) {
+
+        if (elFactoryType == null) {
+            return false;
+        }
+        try {
+            ExpressionFactory factory = (ExpressionFactory)
+                    Util.loadClass(elFactoryType, this).newInstance();
+            ApplicationAssociate associate =
+                    ApplicationAssociate.getInstance(sc);
+            if (associate != null) {
+                associate.setExpressionFactory(factory);
+            }
+            return true;
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.severe(MessageFormat.format("Unable to instantiate ExpressionFactory ''{0}''",
+                        elFactoryType));
+            }
+            return false;
+        }
+
+    }
+
+    private InitFacesContext getInitFacesContext(ServletContext context) {
+        Map initContextServletContext = InitFacesContext.getInitContextServletContextMap();
+        Set entries = initContextServletContext.entrySet();
+        InitFacesContext initContext = null;
+        for (Iterator iterator1 = entries.iterator(); iterator1.hasNext();) {
+            Map.Entry entry1 = (Map.Entry)iterator1.next();
+            Object initContextKey = entry1.getKey();
+            Object value1 = entry1.getValue();
+            if (context == value1) {
+                initContext =  (InitFacesContext)initContextKey;
+                break;
+            }
+        }
+        return initContext;
+    }
+
+    // ----------------------------------------------------------- Inner classes
+
+
+    /**
+     * <p>Processes a web application's deployment descriptor looking
+     * for a reference to <code>javax.faces.webapp.FacesServlet</code>.</p>
+     */
+    private static class WebXmlProcessor {
+
+        private static final String WEB_XML_PATH = "/WEB-INF/web.xml";
+        private static final String WEB_FRAGMENT_PATH = "META-INF/web-fragment.xml";
+
+        private boolean facesServletPresent;
+        private boolean errorPagePresent;
+        private boolean distributablePresent;
+
+
+        /**
+         * <p>When instantiated, the web.xml of the current application
+         * will be scanned looking for a references to the
+         * <code>FacesServlet</code>.  <code>isFacesServletPresent()</code>
+         * will return the appropriate value based on the scan.</p>
+         *
+         * @param context the <code>ServletContext</code> for the application
+         *                of interest
+         */
+        WebXmlProcessor(ServletContext context) {
+
+            if (context != null) {
+                scanForFacesServlet(context);
+            }
+
+        } // END WebXmlProcessor
+
+
+        /**
+         * @return <code>true</code> if the <code>WebXmlProcessor</code>
+         *         detected a <code>FacesServlet</code> entry, otherwise return
+         *         <code>false</code>.</p>
+         */
+        boolean isFacesServletPresent() {
+
+            return facesServletPresent;
+
+        } // END isFacesServletPresent
+
+
+        /**
+         * @return <code>true</code> if <code>WEB-INF/web.xml</code> contains
+         *         a <code><error-page></code> element.
+         */
+        boolean isErrorPagePresent() {
+
+            return errorPagePresent;
+
+        }
+
+        /*
+         * return true if <distributable /> is present in the web.xml or a fragment.
+         * 
+         */
+        public boolean isDistributablePresent() {
+            return distributablePresent;
+        }
+        
+        
+
+
+        /**
+         * <p>Parse the web.xml for the current application and scan
+         * for a FacesServlet entry, if found, set the
+         * <code>facesServletPresent</code> property to true.
+         *
+         * @param context the ServletContext instance for this application
+         */
+        private void scanForFacesServlet(ServletContext context) {
+            InputStream in = context.getResourceAsStream(WEB_XML_PATH);
+            if (in == null) {
+                if (context.getMajorVersion() < 3) {
+                    throw new ConfigurationException("no web.xml present");
+                }
+            }
+            SAXParserFactory factory = getConfiguredFactory();
+            if (in != null) {
+                try {
+                    SAXParser parser = factory.newSAXParser();
+                    parser.parse(in, new WebXmlHandler());
+                } catch (Exception e) {
+                    warnProcessingError(e, context);
+                    facesServletPresent = true;
+                    return;
+                } finally {
+                    if (in != null) {
+                        try {
+                            in.close();
+                        } catch (Exception ioe) {
+                            if (LOGGER.isLoggable(Level.FINEST)) {
+                                LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                            }
+                        }
+                    }
+                }
+            }
+            if (!facesServletPresent && context.getMajorVersion() >= 3) {
+                ClassLoader cl = Util.getCurrentLoader(this);
+                Enumeration<URL> urls;
+                try {
+                    urls = cl.getResources(WEB_FRAGMENT_PATH);
+                } catch (IOException ioe) {
+                    throw new ConfigurationException(ioe);
+                }
+                if (urls != null) {
+                    while (urls.hasMoreElements() && !facesServletPresent) {
+                        InputStream fragmentStream = null;
+                        try {
+                            URL url = urls.nextElement();
+                            URLConnection conn = url.openConnection();
+                            conn.setUseCaches(false);
+                            fragmentStream = conn.getInputStream();
+                            SAXParser parser = factory.newSAXParser();
+                            parser.parse(fragmentStream, new WebXmlHandler());
+                        } catch (Exception e) {
+                            warnProcessingError(e, context);
+                            facesServletPresent = true;
+                            return;
+                        } finally {
+                            if (fragmentStream != null) {
+                                try {
+                                    fragmentStream.close();
+                                } catch (IOException ioe) {
+                                    if (LOGGER.isLoggable(Level.WARNING)) {
+                                        LOGGER.log(Level.WARNING,
+                                                "Exception whil scanning for FacesServlet", ioe);                                
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+        } // END scanForFacesServlet
+
+        /**
+         * <p>Return a <code>SAXParserFactory</code> instance that is
+         * non-validating and is namespace aware.</p>
+         *
+         * @return configured <code>SAXParserFactory</code>
+         */
+        private SAXParserFactory getConfiguredFactory() {
+
+            SAXParserFactory factory = Util.createSAXParserFactory();
+            factory.setValidating(false);
+            factory.setNamespaceAware(true);
+            return factory;
+
+        } // END getConfiguredFactory
+
+
+        private void warnProcessingError(Exception e, ServletContext sc) {
+
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                        MessageFormat.format(
+                                "jsf.configuration.web.xml.parse.failed",
+                                getServletContextIdentifier(sc)),
+                        e);
+            }
+
+        }
+
+
+        /**
+         * <p>A simple SAX handler to process the elements of interested
+         * within a web application's deployment descriptor.</p>
+         */
+        private class WebXmlHandler extends DefaultHandler {
+
+            private static final String ERROR_PAGE = "error-page";
+            private static final String SERVLET_CLASS = "servlet-class";
+            private static final String FACES_SERVLET =
+                    "javax.faces.webapp.FacesServlet";
+
+            private boolean servletClassFound;
+            @SuppressWarnings({"StringBufferField"})
+            private StringBuffer content;
+
+            public InputSource resolveEntity(String publicId, String systemId)
+                    throws SAXException {
+
+                return new InputSource(new StringReader(""));
+
+            } // END resolveEntity
+
+
+            public void startElement(String uri, String localName,
+                                     String qName, Attributes attributes)
+                    throws SAXException {
+
+                if (!errorPagePresent && ERROR_PAGE.equals(localName)) {
+                    errorPagePresent = true;
+                    return;
+                }
+                if (!facesServletPresent) {
+                    if (SERVLET_CLASS.equals(localName)) {
+                        servletClassFound = true;
+                        //noinspection StringBufferWithoutInitialCapacity
+                        content = new StringBuffer();
+                    } else {
+                        servletClassFound = false;
+                    }
+                }
+                if ("distributable".equals(localName)) {
+                    distributablePresent = true;
+                }
+
+
+            } // END startElement
+
+
+            public void characters(char[] ch, int start, int length)
+                    throws SAXException {
+
+                if (servletClassFound && !facesServletPresent) {
+                    content.append(ch, start, length);
+                }
+
+            } // END characters
+
+
+            public void endElement(String uri, String localName, String qName)
+                    throws SAXException {
+
+                if (servletClassFound && !facesServletPresent && 
+                    FACES_SERVLET.equals(content.toString().trim())) {
+                    facesServletPresent = true;
+                }
+
+            } // END endElement
+
+        } // END WebXmlHandler
+
+    } // END WebXmlProcessor
+
+
+    private class WebConfigResourceMonitor implements Runnable {
+
+        private List<Monitor> monitors;
+        private ServletContext sc;
+
+        // -------------------------------------------------------- Constructors
+
+
+        public WebConfigResourceMonitor(ServletContext sc, Collection<URI> uris) {
+
+            assert (uris != null);
+            this.sc = sc;
+            for (URI uri : uris) {
+                if (monitors == null) {
+                    monitors = new ArrayList<Monitor>(uris.size());
+                }
+                try {
+                    Monitor m = new Monitor(uri);
+                    monitors.add(m);
+                } catch (IOException ioe) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.severe("Unable to setup resource monitor for "
+                                      + uri.toString()
+                                      + ".  Resource will not be monitored for changes.");
+                    }
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   ioe.toString(),
+                                   ioe);
+                    }
+                }
+            }
+
+        }
+
+
+        // ----------------------------------------------- Methods from Runnable
+
+        /**
+         * PENDING javadocs
+         */
+        public void run() {
+
+            assert (monitors != null);
+            boolean reloaded = false;
+            for (Iterator<Monitor> i = monitors.iterator(); i.hasNext(); ) {
+                Monitor m = i.next();
+                try {
+                    if (m.hasBeenModified()) {
+                        if (!reloaded) {
+                            reloaded = true;
+                        }
+                    }
+                } catch (IOException ioe) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.severe("Unable to access url "
+                                      + m.uri.toString()
+                                      + ".  Monitoring for this resource will no longer occur.");
+                    }
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   ioe.toString(),
+                                   ioe);
+                    }
+                    i.remove();
+                }
+            }
+            if (reloaded) {
+                reload(sc);
+            }
+
+        }
+
+
+        // ------------------------------------------------------- Inner Classes
+
+
+        private class Monitor {
+
+            private URI uri;
+            private long timestamp = -1;
+
+            // ---------------------------------------------------- Constructors
+
+
+            Monitor(URI uri) throws IOException {
+
+                this.uri = uri;
+                this.timestamp = getLastModified();
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.log(Level.INFO,
+                            "Monitoring {0} for modifications",
+                            uri.toURL().toExternalForm());
+                }
+
+            }
+
+
+            // ----------------------------------------- Package Private Methods
+
+
+            boolean hasBeenModified() throws IOException {
+                long temp = getLastModified();
+                if (timestamp < temp) {
+                    timestamp = temp;
+                    if (LOGGER.isLoggable(Level.INFO)) {
+                        LOGGER.log(Level.INFO,
+                                "{0} changed!",
+                                uri.toURL().toExternalForm());
+                    }
+                    return true;
+                }
+                return false;
+
+            }
+
+
+            // ------------------------------------------------- Private Methods
+
+
+            private long getLastModified() throws IOException {
+
+                InputStream in = null;
+                try {
+                    URLConnection conn = uri.toURL().openConnection();
+                    conn.connect();
+                    in = conn.getInputStream();
+                    return conn.getLastModified();
+                } finally {
+                    if (in != null) {
+                        try {
+                            in.close();
+                        } catch (IOException ignored) {
+                            if (LOGGER.isLoggable(Level.FINEST)) {
+                                LOGGER.log(Level.FINEST,
+                                        "Exception while closing stream", ignored);
+                            }
+                        }
+                    }
+                }
+
+            }
+
+        } // END Monitor
+
+    } // END WebConfigResourceMonitor
+
+}
+
diff --git a/com/sun/faces/config/DbfFactory.java b/com/sun/faces/config/DbfFactory.java
new file mode 100644
index 0000000..86bb208
--- /dev/null
+++ b/com/sun/faces/config/DbfFactory.java
@@ -0,0 +1,738 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import com.sun.faces.util.Util;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+import org.w3c.dom.ls.LSResourceResolver;
+import org.w3c.dom.ls.LSInput;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.File;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.MalformedURLException;
+import java.util.HashMap;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import javax.servlet.ServletContext;
+import com.sun.faces.util.FacesLogger;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.Map;
+
+
+/**
+ * <p>Create and configure DocumentBuilderFactory instances.</p>
+ */
+public class DbfFactory {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    private static final String AS_INSTALL_ROOT = "com.sun.aas.installRoot";
+
+    private static final String AS_SCHEMA_DIR =
+          System.getProperty(AS_INSTALL_ROOT)
+             + File.separatorChar
+             + "lib"
+             + File.separatorChar
+             + "schemas"
+             + File.separatorChar;
+
+    private static final String AS_DTD_DIR =
+          System.getProperty(AS_INSTALL_ROOT)
+             + File.separatorChar
+             + "lib"
+             + File.separatorChar
+             + "dtds"
+             + File.separatorChar;
+    
+    /**
+     * Location of the facelet-taglib 2.0 Schema
+     */
+    private static final String FACELET_TAGLIB_2_0_XSD =
+        "/com/sun/faces/web-facelettaglibrary_2_0.xsd";
+
+    /**
+     * Location of the facelet-taglib 2.2 Schema
+     */
+    private static final String FACELET_TAGLIB_2_2_XSD =
+        "/com/sun/faces/web-facelettaglibrary_2_2.xsd";
+
+    /**
+     * Location of the Faces 2.0 Schema
+     */
+    private static final String FACES_2_0_XSD =
+        "/com/sun/faces/web-facesconfig_2_0.xsd";
+
+    /**
+     * Location of the Faces 2.1 Schema
+     */
+    private static final String FACES_2_1_XSD =
+        "/com/sun/faces/web-facesconfig_2_1.xsd";
+
+     /**
+     * Location of the Faces 2.2 Schema
+     */
+    private static final String FACES_2_2_XSD =
+        "/com/sun/faces/web-facesconfig_2_2.xsd";
+
+    /**
+     * Location of the Faces 1.2 Schema
+     */
+    private static final String FACES_1_2_XSD =
+         "/com/sun/faces/web-facesconfig_1_2.xsd";
+
+
+    /**
+     * Location of the Faces private 1.1 Schema
+     */
+    private static final String FACES_1_1_XSD =
+         "/com/sun/faces/web-facesconfig_1_1.xsd";
+
+
+    /**
+     * Location of the facelet taglib xsd within GlassFish.
+     */
+    private static final String FACELET_TAGLIB_2_0_XSD_FILE =
+          AS_SCHEMA_DIR + "web-facelettaglibrary_2_0.xsd";
+
+    /**
+     * Location of the facelet taglib xsd within GlassFish.
+     */
+    private static final String FACELET_TAGLIB_2_2_XSD_FILE =
+          AS_SCHEMA_DIR + "web-facelettaglibrary_2_2.xsd";
+
+    /**
+     * Location of the faces 2.0 xsd within GlassFish.
+     */
+    private static final String FACES_2_0_XSD_FILE =
+          AS_SCHEMA_DIR + "web-facesconfig_2_0.xsd";
+
+    /**
+     * Location of the faces 2.1 xsd within GlassFish.
+     */
+    private static final String FACES_2_1_XSD_FILE =
+          AS_SCHEMA_DIR + "web-facesconfig_2_1.xsd";
+
+    /**
+     * Location of the faces 2.1 xsd within GlassFish.
+     */
+    private static final String FACES_2_2_XSD_FILE =
+          AS_SCHEMA_DIR + "web-facesconfig_2_2.xsd";
+
+    /**
+     * Location of the faces 1.2 xsd within GlassFish.
+     */
+    private static final String FACES_1_2_XSD_FILE =
+          AS_SCHEMA_DIR + "web-facesconfig_1_2.xsd";
+
+    /**
+     * EntityResolver
+     */
+    public static final EntityResolver FACES_ENTITY_RESOLVER =
+         new FacesEntityResolver();
+
+    /**
+     * The constant that points to the schema map (in the servlet context).
+     */
+    private static final String SCHEMA_MAP = "com.sun.faces.config.schemaMap";
+    
+    public enum FacesSchema {
+
+        FACES_20,
+        FACES_21,
+        FACES_22,
+        FACES_12,
+        FACES_11,
+        FACELET_TAGLIB_20,
+        FACELET_TAGLIB_22;        
+    }
+
+    /**
+     * ErrorHandler
+     */
+    public static final FacesErrorHandler FACES_ERROR_HANDLER =
+         new FacesErrorHandler();
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public static DocumentBuilderFactory getFactory() {
+
+        DocumentBuilderFactory factory = Util.createDocumentBuilderFactory();
+        factory.setNamespaceAware(true);
+        factory.setIgnoringComments(true);
+        factory.setIgnoringElementContentWhitespace(true);
+        return factory;
+
+    }   
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+   private static class FacesEntityResolver extends DefaultHandler implements LSResourceResolver {
+
+        /**
+         * <p>Contains associations between grammar name and the physical
+         * resource.</p>
+         */
+        private static final String[][] DTD_SCHEMA_INFO = {
+            {
+                "web-facesconfig_1_0.dtd",
+                "/com/sun/faces/web-facesconfig_1_0.dtd",
+                AS_DTD_DIR + "web-facesconfig_1_0.dtd"
+            },
+            {
+                "web-facesconfig_1_1.dtd",
+                "/com/sun/faces/web-facesconfig_1_1.dtd",
+                AS_DTD_DIR + "web-facesconfig_1_1.dtd"
+            },
+            {
+                "web-facesconfig_2_0.xsd",
+                 FACES_2_0_XSD,
+                 FACES_2_0_XSD_FILE
+            },
+            {
+                "web-facesconfig_2_1.xsd",
+                 FACES_2_1_XSD,
+                 FACES_2_1_XSD_FILE
+            },
+            {
+                "web-facesconfig_2_2.xsd",
+                 FACES_2_2_XSD,
+                 FACES_2_2_XSD_FILE
+            },
+            {
+                "facelet-taglib_1_0.dtd",
+                "/com/sun/faces/facelet-taglib_1_0.dtd",
+                null
+            },
+            {
+                "web-facelettaglibrary_2_0.xsd",
+                 FACELET_TAGLIB_2_0_XSD,
+                 FACELET_TAGLIB_2_0_XSD_FILE
+            },
+            {
+                "web-facesconfig_1_2.xsd",
+                FACES_1_2_XSD,
+                FACES_1_2_XSD_FILE
+            },
+            {
+                "web-facesconfig_1_1.xsd",
+                FACES_1_1_XSD,
+                null
+            },
+            {
+                "javaee_5.xsd",
+                "/com/sun/faces/javaee_5.xsd",
+                AS_SCHEMA_DIR + "javaee_5.xsd"
+            },
+            {
+                "javaee_6.xsd",
+                "/com/sun/faces/javaee_6.xsd",
+                AS_SCHEMA_DIR + "javaee_6.xsd"
+            },
+            {
+                "javaee_7.xsd",
+                "/com/sun/faces/javaee_7.xsd",
+                AS_SCHEMA_DIR + "javaee_7.xsd"
+            },
+            {
+                "javaee_web_services_client_1_2.xsd",
+                "/com/sun/faces/javaee_web_services_client_1_2.xsd",
+                AS_SCHEMA_DIR + "javaee_web_services_client_1_2.xsd"
+            },
+            {
+                "javaee_web_services_client_1_3.xsd",
+                "/com/sun/faces/javaee_web_services_client_1_3.xsd",
+                AS_SCHEMA_DIR + "javaee_web_services_client_1_3.xsd"
+            },
+            {
+                "javaee_web_services_client_1_4.xsd",
+                "/com/sun/faces/javaee_web_services_client_1_4.xsd",
+                AS_SCHEMA_DIR + "javaee_web_services_client_1_4.xsd"
+            },
+            {
+                "xml.xsd",
+                "/com/sun/faces/xml.xsd",
+                AS_SCHEMA_DIR + "xml.xsd"
+            },
+            {
+                "datatypes.dtd",
+                "/com/sun/faces/datatypes.dtd",
+                AS_SCHEMA_DIR + "datatypes.dtd"
+            },
+            {
+                "XMLSchema.dtd",
+                "/com/sun/faces/XMLSchema.dtd",
+                AS_SCHEMA_DIR + "XMLSchema.dtd"
+            }
+        };
+
+        /**
+         * <p>Contains mapping between grammar name and the local URL to the
+         * physical resource.</p>
+         */
+        private HashMap<String,String> entities =
+             new HashMap<String, String>(12, 1.0f);
+
+        // -------------------------------------------------------- Constructors
+
+
+        public FacesEntityResolver() {
+
+            // Add mappings between last segment of system ID and
+            // the expected local physical resource.  If the resource
+            // cannot be found, then rely on default entity resolution
+            // and hope a firewall isn't in the way or a proxy has
+            // been configured
+            for (String[] aDTD_SCHEMA_INFO : DTD_SCHEMA_INFO) {
+                URL url = this.getClass().getResource(aDTD_SCHEMA_INFO[1]);
+                if (url == null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   "jsf.config.cannot_resolve_entities",
+                                   new Object[]{
+                                        aDTD_SCHEMA_INFO[1],
+                                        aDTD_SCHEMA_INFO[0]
+                                   });
+                    }
+                    // the resource isn't available on the classpath, so
+                    // assume that we're running within a GF environment
+                    String path = aDTD_SCHEMA_INFO[2];
+                    if (path != null) {
+                        File f = new File(path);
+                        if (f.exists()) {
+                            try {
+                                url = f.toURI().toURL();
+                            } catch (MalformedURLException mue) {
+                                if (LOGGER.isLoggable(Level.SEVERE)) {
+                                    LOGGER.log(Level.SEVERE,
+                                               mue.toString(),
+                                               mue);
+                                }
+                            }
+                            if (url == null) {
+                                if (LOGGER.isLoggable(Level.FINE)) {
+                                    LOGGER.log(Level.FINE,
+                                               "jsf.config.cannot_resolve_entities",
+                                               new Object[]{
+                                                     aDTD_SCHEMA_INFO[1],
+                                                     aDTD_SCHEMA_INFO[2]
+                                               });
+                                }
+                            } else {
+                                entities.put(aDTD_SCHEMA_INFO[0], url.toString());
+                            }
+                        }
+
+                    }
+                } else {
+                    entities.put(aDTD_SCHEMA_INFO[0], url.toString());
+                }
+            }
+
+
+        } // END JsfEntityResolver
+
+
+        // ----------------------------------------- Methods from DefaultHandler
+
+
+        /**
+         * <p>Resolves the physical resource using the last segment of
+         * the <code>systemId</code>
+         * (e.g. http://java.sun.com/dtds/web-facesconfig_1_1.dtd,
+         * the last segment would be web-facesconfig_1_1.dtd).  If a mapping
+         * cannot be found for the segment, then defer to the
+         * <code>DefaultHandler</code> for resolution.</p>
+         */
+        public InputSource resolveEntity(String publicId, String systemId)
+        throws SAXException {
+
+            // publicId is ignored.  Resolution performed using
+            // the systemId.
+
+            // If no system ID, defer to superclass
+            if (systemId == null) {
+                InputSource result;
+                try {
+                    result = super.resolveEntity(publicId, null);
+                }
+                catch (Exception e) {
+                    throw new SAXException(e);
+                }
+                return result;
+            }
+
+            String grammarName =
+                systemId.substring(systemId.lastIndexOf('/') + 1);
+
+            String entityURL = entities.get(grammarName);
+
+            InputSource source;
+            if (entityURL == null) {
+                // we don't have a registered mapping, so defer to our
+                // superclass for resolution
+            	if (LOGGER.isLoggable(Level.FINE)) {
+            		LOGGER.log(Level.FINE, "Unknown entity, deferring to superclass.");
+            	}
+
+                try {
+                    source = super.resolveEntity(publicId, systemId);
+                }
+                catch (Exception e) {
+                    throw new SAXException(e);
+                }
+
+            } else {
+
+                try {
+                    source = new InputSource(new URL(entityURL).openStream());
+                } catch (Exception e) {
+                	if (LOGGER.isLoggable(Level.WARNING)) {
+	                    LOGGER.log(Level.WARNING,
+	                               "jsf.config.cannot_create_inputsource",
+	                               entityURL);
+                	}
+                    source = null;
+                }
+            }
+
+            // Set the System ID of the InputSource with the URL of the local
+            // resource - necessary to prevent parsing errors
+            if (source != null) {
+                source.setSystemId(entityURL);
+
+                if (publicId != null) {
+                    source.setPublicId(publicId);
+                }
+            }
+
+            return source;
+
+        } // END resolveEntity
+
+       public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) {
+           try {
+               InputSource source = resolveEntity(publicId, systemId);
+               if (source != null) {
+                   return new Input(source.getByteStream());
+               }               
+           } catch (Exception e) {
+               throw new ConfigurationException(e);
+           }
+           return null;
+       }
+
+
+    } // END FacesEntityResolver
+
+
+    private static class FacesErrorHandler implements ErrorHandler {
+        public void warning(SAXParseException exception) throws SAXException {
+            // do nothing
+        }
+
+        public void error(SAXParseException exception) throws SAXException {
+            throw exception;
+        }
+
+        public void fatalError(SAXParseException exception) throws SAXException {
+            throw exception;
+        }
+    } // END FacesErrorHandler
+
+
+    private static final class Input implements LSInput {
+        InputStream in;
+        public Input(InputStream in) {
+           this.in = in;
+        }
+        public Reader getCharacterStream() {
+            return null;
+        }
+
+        public void setCharacterStream(Reader characterStream) { }
+
+        public InputStream getByteStream() {
+            return in;
+        }
+
+        public void setByteStream(InputStream byteStream) { }
+
+        public String getStringData() {
+            return null;
+        }
+
+        public void setStringData(String stringData) { }
+
+        public String getSystemId() {
+            return null;
+        }
+
+        public void setSystemId(String systemId) { }
+
+        public String getPublicId() {
+            return null;
+        }
+
+        public void setPublicId(String publicId) { }
+
+        public String getBaseURI() {
+            return null;
+        }
+
+        public void setBaseURI(String baseURI) { }
+
+        public String getEncoding() {
+            return null;
+        }
+
+        public void setEncoding(String encoding) { }
+
+        public boolean getCertifiedText() {
+            return false;
+        }
+
+        public void setCertifiedText(boolean certifiedText) { }
+    }
+
+    /**
+     * Get the schema for the given schema id.
+     *
+     * @param servletContext the backing servlet context.
+     * @param schemaId the schema id.
+     * @return the schema, or null if not found.
+     */
+    public static Schema getSchema(ServletContext servletContext, FacesSchema schemaId) {
+        Map<FacesSchema, Schema> schemaMap = getSchemaMap(servletContext);
+        if (!schemaMap.containsKey(schemaId)) {
+            loadSchema(schemaMap, schemaId);
+        }
+        return schemaMap.get(schemaId);
+    }
+    
+    /**
+     * Get the schema map from the servlet context (or create it).
+     * 
+     * @param servletContext the servlet context.
+     * @return the schema map.
+     */
+    private static Map<FacesSchema, Schema> getSchemaMap(ServletContext servletContext) {
+        Map<FacesSchema, Schema> schemaMap = (Map<FacesSchema, Schema>)
+                servletContext.getAttribute(SCHEMA_MAP);
+        
+        if (schemaMap == null) {
+            synchronized(servletContext) {
+                schemaMap = Collections.synchronizedMap(
+                    new EnumMap<FacesSchema, Schema>(FacesSchema.class));
+                servletContext.setAttribute(SCHEMA_MAP, schemaMap);
+            }
+        }
+        
+        return schemaMap;
+    }
+    
+    /**
+     * Remove the schema map from the servlet context.
+     * 
+     * @param servletContext the servlet context.
+     */
+    public static void removeSchemaMap(ServletContext servletContext) {
+        servletContext.removeAttribute(SCHEMA_MAP);
+    }
+    
+    /**
+     * Load the schema for the given schema id.
+     * 
+     * @param schemaMap the schema map.
+     * @param schemaId the schema id.
+     */
+    private static void loadSchema(Map<FacesSchema, Schema> schemaMap, FacesSchema schemaId) {
+        URL url;
+        URLConnection conn;
+        InputStream in;
+        SchemaFactory factory;
+        File f;
+        Schema schema;
+
+        try {
+            switch (schemaId) {
+                case FACES_12:
+                    url = DbfFactory.class.getResource(FACES_1_2_XSD);
+                    if (url == null) {
+                        // try to load from the file
+                        f = new File(FACES_1_2_XSD_FILE);
+                        if (!f.exists()) {
+                            throw new IllegalStateException("Unable to find web-facesconfig_1_2.xsd");
+                        }
+                        url = f.toURI().toURL();
+                    }
+                    conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    in = conn.getInputStream();
+                    factory = Util.createSchemaFactory(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                    factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
+                    schema = factory.newSchema(new StreamSource(in));
+                    schemaMap.put(schemaId, schema);
+                    break;
+                case FACES_11:
+                    url = DbfFactory.class.getResource(FACES_1_1_XSD);
+                    conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    in = conn.getInputStream();
+                    factory = Util.createSchemaFactory(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                    factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
+                    schema = factory.newSchema(new StreamSource(in));
+                    schemaMap.put(schemaId, schema);
+                    break;
+                case FACES_21:
+                    url = DbfFactory.class.getResource(FACES_2_1_XSD);
+                    if (url == null) {
+                        // try to load from the file
+                        f = new File(FACES_2_1_XSD_FILE);
+                        if (!f.exists()) {
+                            throw new IllegalStateException("Unable to find web-facesconfig_2_1.xsd");
+                        }
+                        url = f.toURI().toURL();
+                    }
+                    conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    in = conn.getInputStream();
+                    factory = Util.createSchemaFactory(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                    factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
+                    schema = factory.newSchema(new StreamSource(in));
+                    schemaMap.put(schemaId, schema);
+                    break;
+                case FACES_22:
+                    url = DbfFactory.class.getResource(FACES_2_2_XSD);
+                    if (url == null) {
+                        // try to load from the file
+                        f = new File(FACES_2_2_XSD_FILE);
+                        if (!f.exists()) {
+                            throw new IllegalStateException("Unable to find web-facesconfig_2_2.xsd");
+                        }
+                        url = f.toURI().toURL();
+                    }
+                    conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    in = conn.getInputStream();
+                    factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                    factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
+                    schema = factory.newSchema(new StreamSource(in));
+                    schemaMap.put(schemaId, schema);
+                    break;
+                case FACES_20:
+                    url = DbfFactory.class.getResource(FACES_2_0_XSD);
+                    if (url == null) {
+                        // try to load from the file
+                        f = new File(FACES_2_0_XSD_FILE);
+                        if (!f.exists()) {
+                            throw new IllegalStateException("Unable to find web-facesconfig_2_0.xsd");
+                        }
+                        url = f.toURI().toURL();
+                    }
+                    conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    in = conn.getInputStream();
+                    factory = Util.createSchemaFactory(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                    factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
+                    schema = factory.newSchema(new StreamSource(in));
+                    schemaMap.put(schemaId, schema);
+                    break;
+                case FACELET_TAGLIB_20:
+                    url = DbfFactory.class.getResource(FACELET_TAGLIB_2_0_XSD);
+                    if (url == null) {
+                        // try to load from the file
+                        f = new File(FACELET_TAGLIB_2_0_XSD_FILE);
+                        if (!f.exists()) {
+                            throw new IllegalStateException("Unable to find web-facelettaglibrary_2_0.xsd");
+                        }
+                        url = f.toURI().toURL();
+                    }
+                    conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    in = conn.getInputStream();
+                    factory = Util.createSchemaFactory(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                    factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
+                    schema = factory.newSchema(new StreamSource(in));
+                    schemaMap.put(schemaId, schema);
+                    break;
+                case FACELET_TAGLIB_22:
+                    url = DbfFactory.class.getResource(FACELET_TAGLIB_2_2_XSD);
+                    if (url == null) {
+                        // try to load from the file
+                        f = new File(FACELET_TAGLIB_2_2_XSD_FILE);
+                        if (!f.exists()) {
+                            throw new IllegalStateException("Unable to find web-facelettaglibrary_2_2.xsd");
+                        }
+                        url = f.toURI().toURL();
+                    }
+                    conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    in = conn.getInputStream();
+                    factory = Util.createSchemaFactory(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                    factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
+                    schema = factory.newSchema(new StreamSource(in));
+                    schemaMap.put(schemaId, schema);
+                    break;
+                default:
+                    throw new ConfigurationException("Unrecognized Faces Version: " + schemaId.toString());
+            }
+        }
+        catch (Exception e) {
+            throw new ConfigurationException(e);
+        }        
+    }
+}
diff --git a/com/sun/faces/config/DelegateToGlassFishAnnotationScanner.java b/com/sun/faces/config/DelegateToGlassFishAnnotationScanner.java
new file mode 100644
index 0000000..1038bd3
--- /dev/null
+++ b/com/sun/faces/config/DelegateToGlassFishAnnotationScanner.java
@@ -0,0 +1,258 @@
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.config;
+
+import com.sun.faces.spi.InjectionProviderException;
+import com.sun.faces.util.FacesLogger;
+import static com.sun.faces.spi.AnnotationScanner.ScannedAnnotation;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+
+class DelegateToGlassFishAnnotationScanner extends AnnotationScanner {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+    private com.sun.faces.spi.AnnotationScanner annotationScanner = null;
+    Set<String> jarNamesWithoutMetadataComplete = null;
+
+    public DelegateToGlassFishAnnotationScanner(ServletContext sc) {
+        super(sc);
+    }
+
+    public void setAnnotationScanner(com.sun.faces.spi.AnnotationScanner containerConnector, Set<String> jarNamesWithoutMetadataComplete) {
+        this.annotationScanner = containerConnector;
+        this.jarNamesWithoutMetadataComplete = jarNamesWithoutMetadataComplete;
+    }
+
+    @Override
+    public Map<Class<? extends Annotation>, Set<Class<?>>> getAnnotatedClasses(Set<URI> uris) {
+
+        Set<String> classList = new HashSet<String>();
+
+        processAnnotations(classList);
+        processScripts(classList);
+
+        return processClassList(classList);
+    }
+
+    private Object getDeploymentContext(ExternalContext extContext) {
+        Object result = null;
+        Map<String, Object> appMap = extContext.getApplicationMap();
+
+        // This will work in GlassFish 3.1.1.
+        result = appMap.get("com.sun.enterprise.web.WebModule.DeploymentContext");
+
+        if (null == result) {
+            // Try the GlassFish 3.1 way.
+            Object defaultHabitat = appMap.get("org.glassfish.servlet.habitat");
+            if (null != defaultHabitat) {
+                try {
+                    Method getComponent = defaultHabitat.getClass().getDeclaredMethod("getComponent", Class.class);
+                    Class serverConfigLookupClass = Thread.currentThread().getContextClassLoader().loadClass("com.sun.enterprise.web.ServerConfigLookup");
+                    Object serverConfigLookup = getComponent.invoke(defaultHabitat, serverConfigLookupClass);
+                    
+                    Method getDeploymentContext = serverConfigLookupClass.getMethod("getDeploymentContext", ServletContext.class);
+                    result = getDeploymentContext.invoke(serverConfigLookup, extContext.getContext());
+                } catch(InvocationTargetException ite) { 
+                    Throwable targetException = ite.getTargetException();
+                    System.out.println(targetException);
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Problem getting deployment context information", e);
+                    }
+                }
+            }
+        
+        }
+
+        return result;
+    }
+
+    private String getCurrentWebModulePrefix(ExternalContext extContext) {
+        String result = null;
+        Object deploymentContext = getDeploymentContext(extContext);
+        if (null != deploymentContext) {
+            try {
+                // If this module is a war or an exploded war, then this will give the 
+                // prefix.
+                Method getSource = deploymentContext.getClass().getDeclaredMethod("getSource");
+                Object source = getSource.invoke(deploymentContext, (Object[]) null);
+                if (null != source) {
+                    Method getName = source.getClass().getDeclaredMethod("getName");
+                    if (null != getName) {
+                        result = (String) getName.invoke(source, (Object[]) null);
+                    }
+
+                }
+
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Problem in getCurrentWebModulePrefix", e);
+                }
+            }
+        }
+        if (null == result && null != deploymentContext) {
+            try {
+                // If this module is an ear, then this will give the prefix.
+                Method getModuleUri = deploymentContext.getClass().getMethod("getModuleUri");
+                if (null != getModuleUri) {
+                    result = (String) getModuleUri.invoke(deploymentContext, (Object[]) null);
+                    if (null != result && result.endsWith(".war")) {
+                        result = result.substring(0, result.length() - 4);
+                    }
+                }
+
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Problem in getCurrentWebModulePrefix", e);
+                }
+            }
+        }
+
+        if (null == result) {
+            result = extContext.getApplicationContextPath();
+        }
+
+        return result;
+    }
+
+    private void processAnnotations(Set<String> classList) {
+        try {
+            String archiveName = getCurrentWebModulePrefix(FacesContext.getCurrentInstance().getExternalContext());
+            Map<String, List<ScannedAnnotation>> classesByAnnotation =
+                    annotationScanner.getAnnotatedClassesInCurrentModule(this.sc);
+
+            for (String curAnnotationName : classesByAnnotation.keySet()) {
+                if (FACES_ANNOTATIONS.contains(curAnnotationName)) {
+                    for (ScannedAnnotation curAnnotation : classesByAnnotation.get(curAnnotationName)) {
+                        Collection<URI> definingUris = curAnnotation.getDefiningURIs();
+                        Iterator<URI> iter = definingUris.iterator();
+                        URI uri, jarUri = null;
+                        String uriString, nameOfJarInJarUri = null;
+                        boolean doAdd = false;
+                        while (!doAdd && iter.hasNext()) {
+                            uri = iter.next();
+                            uriString = uri.toASCIIString();
+
+                            // If the class is in the current web module
+                            boolean currentClassIsInCurrentWebModule =
+                                    (uriString.endsWith("WEB-INF/classes") || uriString.endsWith("WEB-INF/classes/"))
+                                    && uriString.contains(archiveName);
+                            // or it is from a jar that is *not* within a web module...
+                            boolean currentClassIsInJarNotInAnyWebModule =
+                                    uriString.endsWith(".jar")
+                                    && !uriString.contains(archiveName)
+                                    && !uriString.contains("WEB-INF/classes");
+                            if (currentClassIsInCurrentWebModule
+                                    || currentClassIsInJarNotInAnyWebModule) {
+                                doAdd = true;
+                            } else {
+                                for (String jarName : jarNamesWithoutMetadataComplete) {
+                                    if (uriString.contains(jarName)) {
+                                        doAdd = true;
+                                        jarUri = uri;
+                                        nameOfJarInJarUri = jarName;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                        if (doAdd) {
+                            // If the annotationScanPackages context param is set, we
+                            // may yet have to exclude the class
+                            String fqcn = curAnnotation.getFullyQualifiedClassName();
+                            if (isAnnotationScanPackagesSet()) {
+                                // If the class with the annotation was found 
+                                // in a jar file
+                                if (null != jarUri) {
+                                    // see if the jar file is in the list of jars to include
+                                    String[] allowedPackages =
+                                            (getClasspathPackages() != null
+                                            && getClasspathPackages().get(nameOfJarInJarUri) != null)
+                                            ? getClasspathPackages().get(nameOfJarInJarUri)
+                                            : new String[0];
+                                    if (0 == allowedPackages.length) {
+                                        doAdd = false;
+                                    }
+                                    for (String curPackage : allowedPackages) {
+                                        doAdd = fqcn.contains(curPackage);
+                                        if (doAdd) {
+                                            break;
+                                        }
+                                    }
+                                } else {
+                                    doAdd = processClass(fqcn);
+                                }
+
+                            }
+
+                            if (doAdd) {
+                                classList.add(fqcn);
+                            }
+                        }
+                    }
+                }
+
+            }
+
+        } catch (InjectionProviderException ex) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "Unable to use GlassFish to perform "
+                        + "annotation scanning.  Annotated artifacts will not "
+                        + "be declared to runtime.", ex);
+            }
+
+        }
+
+    }
+}
diff --git a/com/sun/faces/config/DelegatingAnnotationProvider.java b/com/sun/faces/config/DelegatingAnnotationProvider.java
new file mode 100644
index 0000000..d3346ae
--- /dev/null
+++ b/com/sun/faces/config/DelegatingAnnotationProvider.java
@@ -0,0 +1,103 @@
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import com.sun.faces.spi.AnnotationProvider;
+import java.lang.annotation.Annotation;
+import java.net.URI;
+import java.util.Map;
+import java.util.Set;
+import javax.servlet.ServletContext;
+
+
+
+/*
+ * This class is the default implementation of AnnotationProvider
+ * referenced by the AnnotationProviderFactory.  Unless someone
+ * manualy provides one via in META-INF/services, this is the one
+ * that will actually be instantiated and installed into Mojarra.
+
+ * This class actually delegates the real work to one of two kinds of
+ * com.sun.faces.config.AnnotationScanner subclasses.
+ * JavaClassScanningAnnotationScanner or
+ * DelegateToGlassFishAnnotationScanner.
+ *
+ */
+
+public class DelegatingAnnotationProvider extends AnnotationProvider {
+
+    private AnnotationScanner scanner = null;
+
+    public DelegatingAnnotationProvider(ServletContext sc) {
+        super(sc);
+    }
+
+    /*
+     * Called during annotation scanning.  If we already have a scanner
+     * reference, use it.  If not, create a
+     * JavaClassScanningAnnotationScanner and use it as the scanner.
+     */
+
+    @Override
+    public Map<Class<? extends Annotation>, Set<Class<?>>> getAnnotatedClasses(Set<URI> urls) {
+        if (null == scanner) {
+            scanner = new JavaClassScanningAnnotationScanner(sc);
+        }
+        return scanner.getAnnotatedClasses(urls);
+    }
+    
+    /*
+     * This will only be called if the InjectionProvider offered by the
+     * container implements com.sun.faces.spi.AnnotationScanner.  In
+     * this case, we know that we can safely use
+     * DelegateToGlassFishAnnotationScanner as our scanner reference.
+     */
+    public void setAnnotationScanner(com.sun.faces.spi.AnnotationScanner containerConnector, Set<String> jarNamesWithoutMetadataComplete) {
+        assert(null == scanner);
+        DelegateToGlassFishAnnotationScanner impl =
+                new DelegateToGlassFishAnnotationScanner(sc);
+        impl.setAnnotationScanner(containerConnector, jarNamesWithoutMetadataComplete);
+        scanner = impl;
+    }
+
+
+}
diff --git a/com/sun/faces/config/DocumentInfo.java b/com/sun/faces/config/DocumentInfo.java
new file mode 100644
index 0000000..481ca83
--- /dev/null
+++ b/com/sun/faces/config/DocumentInfo.java
@@ -0,0 +1,84 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import java.net.URI;
+import org.w3c.dom.Document;
+
+
+
+/**
+ * Associates a Document with a source URL.
+ */
+public class DocumentInfo {
+
+    private Document document;
+    private URI sourceURI;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public DocumentInfo(Document document, URI sourceURL) {
+
+        this.document = document;
+        this.sourceURI = sourceURL;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public Document getDocument() {
+
+        return document;
+
+    }
+
+
+    public URI getSourceURI() {
+
+        return sourceURI;
+
+    }
+    
+}
diff --git a/com/sun/faces/config/DocumentOrderingWrapper.java b/com/sun/faces/config/DocumentOrderingWrapper.java
new file mode 100644
index 0000000..2d671c9
--- /dev/null
+++ b/com/sun/faces/config/DocumentOrderingWrapper.java
@@ -0,0 +1,778 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.text.MessageFormat;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Timer;
+
+/**
+ * This class is used by the config system to order <code>faces-config</code>
+ * documents found on the classpath or configured explicitly via the
+ * <code>javax.faces.CONFIG_FILES</code> context init parameter.
+ */
+public class DocumentOrderingWrapper {
+
+    /**
+     * Logger for this class.
+     */
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * {@link Comparator} implementation to aid in sorting <code>faces-config</code>
+     * documents.
+     */
+    private static Comparator<DocumentOrderingWrapper> COMPARATOR =
+          new DocumentOrderingComparator();
+
+    /**
+     * This is the limit on the number of attempts made to sort the documents.
+     * Any attempt to exceed this limit will result in an Exception being thrown.
+     */
+    private static final int MAX_SORT_PASSED = 1000;
+
+    /**
+     * Constant for the <code>ordering</code> element.
+     */
+    private static final String ORDERING = "ordering";
+
+    /**
+     * Constant for the <code>before</code> element.
+     */
+    private static final String BEFORE = "before";
+
+    /**
+     * Constant for the <code>after</code> element.
+     */
+    private static final String AFTER = "after";
+
+    /**
+     * Constant for the <code>name</code> element.
+     */
+    private static final String NAME = "name";
+
+    /**
+     * Constant for the <code>others</code> element.
+     */
+    private static final String OTHERS = "others";
+
+    /**
+     * Others keyword for sorting.
+     */
+    private static final String OTHERS_KEY = DocumentOrderingWrapper.class.getName() + ".OTHERS_KEY";
+
+    /**
+     * Return code indicating that element <code>n</code> is to be swapped
+     * with <code>n + 1</code>
+     */
+    private static final int SWAP = -1;
+
+    /**
+     * Return code indicating that no swap needs to occur for the elements
+     * being compared.
+     */
+    private static final int DO_NOT_SWAP = 0;
+
+    /**
+     * The wrapped Document.
+     */
+    private DocumentInfo documentInfo;
+
+    /**
+     * The wrapped Document's ID.
+     */
+    private String id;
+
+    /**
+     * The wrapped Document's before IDs.
+     */
+    private String[] beforeIds;
+
+    /**
+     * The wrapped Document's before IDs.
+     */
+    private String[] afterIds;
+
+    // -------------------------------------------------------- Constructors
+
+
+    /**
+     * Constructs a new <code>DocumentOrderingWrapper</code> for the specified
+     * <code>Document<code>.
+     */
+    public DocumentOrderingWrapper(DocumentInfo document) {
+
+        this.documentInfo = document;
+        init();
+
+    }
+
+
+    // ------------------------------------------------------ Public Methods
+
+
+    /**
+     * @return the wrapped <code>Document</code>
+     */
+    public DocumentInfo getDocument() {
+
+        return documentInfo;
+
+    }
+
+
+    /**
+     * @return this <code>Document</code>'s ID, if any
+     */
+    public String getDocumentId() {
+
+        return id;
+
+    }
+
+
+    /**
+     * @return this <code>Document<code>'s before IDs, if any
+     */
+    public String[] getBeforeIds() {
+
+        return beforeIds;
+
+    }
+
+
+    /**
+     * @return this <code>Document</code>'s after IDs, if any
+     */
+    public String[] getAfterIds() {
+
+        return afterIds;
+
+    }
+
+
+    /**
+     * @return <code>true</code> if any before IDs are present, otherwise
+     *  <code>false</code>
+     */
+    public boolean isBeforeOrdered() {
+        return beforeIds.length != 0;
+    }
+
+
+    /**
+     * @return <code>true</code> if any after IDs are present, otherwise,
+     *  <code>false</code>
+     */
+    public boolean isAfterOrdered() {
+        return afterIds.length != 0;
+    }
+
+
+    /**
+     * @return <code>true</code> if this document has any before or after IDs,
+     *  otherwise <code>false</code>
+     */
+    public boolean isOrdered() {
+        return (isBeforeOrdered() || isAfterOrdered());
+    }
+
+
+    /**
+     * @return <code>true</code> if this document is before the specified
+     *  <code>id</code>, otherwise <code>false</code>
+     */
+    public boolean isBefore(String id) {
+
+        return (search(beforeIds, id));
+
+    }
+
+
+    /**
+     * @return <code>true</code> if this document is after the specified
+     *  <code>id</code>, otherwise <code>false</code>
+     */
+    public boolean isAfter(String id) {
+
+        return (search(afterIds, id));
+    }
+
+
+    /**
+     * @return <code>true</code> if this document is after others, otherwise
+     *  <code>false</code>
+     */
+    public boolean isAfterOthers() {
+
+        return (search(afterIds, OTHERS_KEY));
+
+    }
+
+
+    /**
+     * @return <code>true</code> if this document is before others, otherwise
+     *  <code>false</code>
+     */
+    public boolean isBeforeOthers() {
+
+         return (search(beforeIds, OTHERS_KEY));
+
+    }
+
+
+    @Override
+    public String toString() {
+        return "Document{" +
+               "id='" + id + '\'' +
+               ", beforeIds="
+               + (beforeIds == null ? null : Arrays.asList(beforeIds))
+               +
+               ", afterIds="
+               + (afterIds == null ? null : Arrays.asList(afterIds))
+               +
+               '}';
+    }
+
+
+    /**
+     * Sort the provided array of <code>Document</code>s per the order specified
+     * in the List represented by absoluteOrder.
+     * @param documents Documents to sort
+     * @param absoluteOrder the absolute order as specified in the /WEB-INF/faces-config.xml
+     * @return an array of DocumentOrderingWrappers that may be smaller than the
+     *  input array of wrappers.
+     */
+    public static DocumentOrderingWrapper[] sort(DocumentOrderingWrapper[] documents,
+                                                 List<String> absoluteOrder) {
+
+        List<DocumentOrderingWrapper> sourceList = new CopyOnWriteArrayList<DocumentOrderingWrapper>();
+        sourceList.addAll(Arrays.asList(documents));
+
+        List<DocumentOrderingWrapper> targetList = new ArrayList<DocumentOrderingWrapper>();
+        for (String name : absoluteOrder) {
+            if ("others".equals(name)) {
+                continue;
+            }
+            boolean found = false;
+            for (DocumentOrderingWrapper wrapper : sourceList) {
+                if (!found && name.equals(wrapper.getDocumentId())) {
+                    found = true;
+                    targetList.add(wrapper);
+                    sourceList.remove(wrapper);
+                } else if (found && name.equals(wrapper.getDocumentId())){
+                    // we've already processed a document with this name
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.configuration.absolute.order.duplicate.document",
+                                   new Object[] { name });
+                    }
+                    // only log this once
+                    break;
+                }
+            }
+            if (!found && LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                    "jsf.configuration.absolute.order.missing.document",
+                    new Object[] { name });
+            }
+        }
+
+        int othersIndex = absoluteOrder.indexOf("others");
+        if (othersIndex != -1) {
+            // any wrappers left in sourceList are considered others.
+            // start pushing them into targetList at the index
+            for (DocumentOrderingWrapper wrapper : sourceList) {
+                targetList.add(othersIndex, wrapper);
+            }
+        }
+
+        return targetList.toArray(new DocumentOrderingWrapper[targetList.size()]);
+        
+    }
+
+
+    /**
+     * Sort the provided array of <code>Document</code>s per the requirements
+     * of the 2.0 specification.  Note, that this method only provides partial
+     * ordering and not absolute ordering.
+     */
+    public static void sort(DocumentOrderingWrapper[] documents) {
+
+        Timer t = Timer.getInstance();
+        if (t != null) {
+            t.startTiming();
+        }
+        try {
+            enhanceOrderingData(documents);
+        } catch (CircularDependencyException re) {
+            String msg = "Circular dependencies detected!\nDocument Info\n==================\n";
+            for (DocumentOrderingWrapper w : documents) {
+                msg += ("  " + w.toString() + '\n');
+            }
+            throw new ConfigurationException(msg);
+        }
+
+        boolean doMore = true;
+        int numberOfPasses = 0;
+
+        while (doMore) {
+            numberOfPasses++;
+            if (numberOfPasses == MAX_SORT_PASSED) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    String msg = "Exceeded maximum number of attempts to sort the application's faces-config documents.\nDocument Info\n==================";
+                    for (DocumentOrderingWrapper w : documents) {
+                        msg += ("  " + w.toString() + '\n');
+                    }
+                    LOGGER.severe(msg);                    
+                }
+                throw new ConfigurationException("Exceeded maximum number of attempts to sort the faces-config documents.");
+            }
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "Starting sort pass number {0}...",
+                           numberOfPasses);
+            }
+            doMore = false;
+            for (int i = 0; i < documents.length - 1; i++) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               "Comparing {0}, {1}",
+                               new Object[] { documents[i].id, documents[i + 1].id });
+                }
+                if (COMPARATOR.compare(documents[i], documents[i + 1]) != DO_NOT_SWAP) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   "Swapping {0} with {1}",
+                                   new Object[] { documents[i].id, documents[i + 1].id });
+                    }
+                    DocumentOrderingWrapper temp = documents[i];
+                    documents[i] = documents[i + 1];
+                    documents[i + 1] = temp;
+                    doMore = true;
+                }
+            }
+
+            // compare first and last elements
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "Comparing {0}, {1}",
+                           new Object[]{documents[0].id, documents[documents.length - 1].id});
+            }
+            if (COMPARATOR.compare(documents[0], documents[documents.length - 1]) != DO_NOT_SWAP) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               "Swapping {0} with {1}",
+                               new Object[]{documents[0].id, documents[documents.length - 1].id});
+                }
+                DocumentOrderingWrapper temp = documents[0];
+                documents[0] = documents[documents.length - 1];
+                documents[documents.length - 1] = temp;
+                doMore = true;
+            }
+        }
+
+        if (t != null) {
+            t.stopTiming();
+            t.logResult("\"faces-config\" document sorting complete in " + numberOfPasses + '.');
+        }
+
+    }
+
+    // ----------------------------------------------------- Private Methods
+
+
+    /**
+     * Update before/after knowledge of all nodes in the array.
+     * Consider the case of A after B, B after C, C after D, and D
+     * with no ordering characteristics.
+     * When the code below executes, the before/after of specific nodes
+     * will be updated so that in the case of the example above we'd
+     * have:
+     *
+     *  A -> after B
+     *  B -> before A, after C
+     *  C -> before B, A after D
+     *  D -> before C, B, A
+     *
+     * So when an attempt is made to sort [A, B, C, D] the end
+     * result is [D, C, B, A]
+     * No extra enhancement of after ID information is necessary outside
+     * of the single node information due to the way the algorithm processes
+     * the array.
+     *
+     * This method also performs cyclic detection.  If, after updating the
+     * before/after information, the before/after information contains a
+     * reference to the document ID we're currently processing, throw an
+     * exception.
+     */
+    private static void enhanceOrderingData(DocumentOrderingWrapper[] wrappers)
+    throws CircularDependencyException {
+
+        for (int i = 0; i < wrappers.length; i++) {
+            DocumentOrderingWrapper w = wrappers[i];
+
+            // process before IDs other than 'others'
+            for (String id : w.getBeforeIds()) {
+                if (OTHERS_KEY.equals(id)) {
+                    continue;
+                }
+                for (int ii = 0; ii < wrappers.length; ii++) {
+                    DocumentOrderingWrapper other = wrappers[ii];
+                    if (id.equals(other.id)) {
+                        String[] afterIds = other.getAfterIds();
+                        if (Arrays.binarySearch(afterIds, w.id) < 0) {
+                            Set<String> newAfterIds = new HashSet<String>(afterIds.length + 1);
+                            newAfterIds.addAll(Arrays.asList(afterIds));
+                            newAfterIds.add(w.id);
+                            other.afterIds = newAfterIds
+                                  .toArray(new String[newAfterIds.size()]);
+                            Arrays.sort(other.afterIds);
+                        }
+
+                        String[] otherBeforeIds = other.getBeforeIds();
+                        if (otherBeforeIds.length > 0) {
+
+                            String[] currentBeforeIds = w.getBeforeIds();
+                            Set<String> newBeforeIds = new HashSet<String>();
+                            newBeforeIds.addAll(Arrays.asList(currentBeforeIds));
+                            for (String bid : otherBeforeIds) {
+                                if (OTHERS_KEY.equals(bid)) {
+                                    continue;
+                                }
+                                newBeforeIds.add(bid);
+                            }
+                            String[] temp = newBeforeIds.toArray(new String[newBeforeIds.size()]);
+                            Arrays.sort(temp);
+                            if (search(temp, w.id)) {
+                                throw new CircularDependencyException();
+                            }
+                            w.beforeIds = temp;
+                        }
+                    }
+                }
+
+            }
+
+            // process after IDs other than 'others'
+            for (String id : w.getAfterIds()) {
+                if (OTHERS_KEY.equals(id)) {
+                    continue;
+                }
+                for (int ii = 0; ii < wrappers.length; ii++) {
+                    DocumentOrderingWrapper other = wrappers[ii];
+                    if (id.equals(other.id)) {
+                        String[] beforeIds = other.getBeforeIds();
+                        if (Arrays.binarySearch(beforeIds, w.id) < 0) {
+                            Set<String> newBeforeIds =
+                                  new HashSet<String>(beforeIds.length + 1);
+                            newBeforeIds.addAll(Arrays.asList(beforeIds));
+                            newBeforeIds.add(w.id);
+                            other.beforeIds = newBeforeIds
+                                  .toArray(new String[newBeforeIds.size()]);
+                            Arrays.sort(other.beforeIds);
+                        }
+                        String[] otherAfterIds = other.getAfterIds();
+                        if (otherAfterIds.length > 0) {
+                            String[] currentAfterIds = w.getAfterIds();
+                            Set<String> newAfterIds = new HashSet<String>();
+                            newAfterIds.addAll(Arrays.asList(currentAfterIds));
+                            for (String bid : otherAfterIds) {
+                                if (OTHERS_KEY.equals(bid)) {
+                                    continue;
+                                }
+                                newAfterIds.add(bid);
+                            }
+                            String[] temp = newAfterIds.toArray(new String[newAfterIds.size()]);
+                            Arrays.sort(temp);
+                            if (search(temp, w.id)) {
+                                throw new CircularDependencyException();
+                            }
+                            w.afterIds = temp;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Simple helper method around <code>Arrays.binarySearch()</code>.
+     * @param ids an array of IDs
+     * @param id the ID to search for
+     * @return true if <code>ids</code> contains <code>id</code>
+     */
+    private static boolean search(String[] ids, String id) {
+
+        return (Arrays.binarySearch(ids, id) >= 0);
+
+    }
+
+
+    /**
+     * <p>
+     * Performs the initialization necessary to allow sorting of
+     * <code>faces-config</code> documents.
+     * </p>
+     */
+    private void init() {
+
+        Element documentElement = documentInfo.getDocument().getDocumentElement();
+        String namespace = documentElement.getNamespaceURI();
+        id = getDocumentName(documentElement);
+        NodeList orderingElements =
+              documentElement.getElementsByTagNameNS(namespace, ORDERING);
+
+        Set<String> beforeIds = null;
+        Set<String> afterIds = null;
+
+        if (orderingElements.getLength() > 0) {
+            for (int i = 0, len = orderingElements.getLength(); i < len; i++) {
+                Node orderingNode = orderingElements.item(i);
+                NodeList children = orderingNode.getChildNodes();
+                for (int j = 0, jlen = children.getLength(); j < jlen; j++) {
+                    Node n = children.item(j);
+                    if (beforeIds == null) {
+                        beforeIds = extractIds(n, BEFORE);
+                    }
+                    if (afterIds == null) {
+                        afterIds = extractIds(n, AFTER);
+                    }
+                }
+            }
+        }
+        this.beforeIds = ((beforeIds != null)
+                          ? beforeIds.toArray(new String[beforeIds.size()])
+                          : new String[0]);
+        this.afterIds = ((afterIds != null)
+                         ? afterIds.toArray(new String[afterIds.size()])
+                         : new String[0]);
+        Arrays.sort(this.beforeIds);
+        Arrays.sort(this.afterIds);
+
+        // ensure any ID defined in the 'before' array isn't present in the
+        // 'after' array and vice versa as a documents can't come before
+        // *and* after another.
+        checkDuplicates(this.beforeIds, this.afterIds);
+        checkDuplicates(this.afterIds, this.beforeIds);
+
+    }
+
+
+    private String getDocumentName(Element documentElement) {
+
+        NodeList children = documentElement.getChildNodes();
+        String documentName = "";
+        if (children != null && children.getLength() > 0) {
+            for (int i = 0, len = children.getLength(); i < len; i++) {
+                Node n = children.item(i);
+                if (NAME.equals(n.getLocalName())) {
+                    documentName = getNodeText(n);
+                    break;
+                }
+            }
+        }
+        return documentName;
+
+    }
+
+
+    /**
+     * Ensure the IDs in <code>source</code> aren't present in <code>searchTarget</code>.
+     */
+    private void checkDuplicates(String[] source, String[] searchTarget) {
+
+        for (String id : source) {
+            if (search(searchTarget, id)) {
+                String msg = MessageFormat.format("Document {0} is specified to come before and after {1}.",
+                                                  documentInfo.getDocument().getDocumentURI(),
+                                                  id);
+                throw new ConfigurationException(msg);
+            }
+        }
+
+    }
+
+
+    /**
+     * Extract and return a <code>Set</code> of IDs contained within the provided
+     * <code>Node</code>.
+     */
+    private Set<String> extractIds(Node n, String nodeName) {
+
+        Set<String> idsList = null;
+        if (nodeName.equals(n.getLocalName())) {
+            idsList = new HashSet<String>();
+            NodeList ids = n.getChildNodes();
+            for (int k = 0, klen = ids.getLength(); k < klen; k++) {
+                Node idNode = ids.item(k);
+                if (NAME.equals(idNode.getLocalName())) {
+                    String id = getNodeText(idNode);
+                    if (id != null) {
+                        idsList.add(id);
+                    }
+                } if (OTHERS.equals(idNode.getLocalName())) {
+                    if (id != null) {
+                        idsList.add(OTHERS_KEY);
+                    }
+                }
+            }
+        }
+        return idsList;
+
+    }
+
+
+    /**
+     * Return the textual content, if any, of the provided <code>Node</code>.
+     */
+    private String getNodeText(Node node) {
+
+        String res = null;
+        if (node != null) {
+            res = node.getTextContent();
+            if (res != null) {
+                res = res.trim();
+            }
+        }
+
+        return ((res != null && res.length() != 0) ? res : null);
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    @SuppressWarnings({"ComparatorNotSerializable"})
+    private static final class DocumentOrderingComparator implements Comparator<DocumentOrderingWrapper> {
+
+
+        // --------------------------------------------- Methods from Comparator
+
+
+        public int compare(DocumentOrderingWrapper wrapper1,
+                           DocumentOrderingWrapper wrapper2) {
+
+            String w1Id = wrapper1.id;
+            String w2Id = wrapper2.id;
+            boolean w1IsOrdered = wrapper1.isOrdered();
+            boolean w2IsOrdered = wrapper2.isOrdered();
+            if (w1IsOrdered && !w2IsOrdered) {
+                if (wrapper1.isAfterOrdered() && !wrapper1.isBeforeOthers()) {
+                    return SWAP;
+                }
+            }
+
+            boolean w2IsBeforeW1 = wrapper2.isBefore(w1Id);
+            boolean w1IsAfterW2 = wrapper1.isAfter(w2Id);
+
+            if (w2IsBeforeW1 || w1IsAfterW2) {
+                return SWAP; // move w2 before w1
+            }
+
+            // no explicit ID ordering.  Check others ordering
+            boolean w1IsAfterOthers = wrapper1.isAfterOthers();
+            if (w1IsAfterOthers && !wrapper1.isBefore(w2Id) && !(wrapper1.isAfterOthers() && wrapper2.isAfterOthers())) {
+                return SWAP;
+            }
+            boolean w2IsBeforeOthers = wrapper2.isBeforeOthers();
+            if (w2IsBeforeOthers && !wrapper2.isAfter(w1Id) && !(wrapper1.isBeforeOthers() && wrapper2.isBeforeOthers())) {
+                return SWAP;
+            }
+
+            return DO_NOT_SWAP;
+
+        }
+
+    } // END FacesConfigComparator
+
+    
+    @SuppressWarnings({"serial"})
+    private static final class CircularDependencyException extends Exception {
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        public CircularDependencyException() {
+
+            super();
+
+        }
+
+
+        public CircularDependencyException(String message) {
+
+            super(message);
+
+        }
+
+
+        public CircularDependencyException(String message, Throwable cause) {
+
+            super(message, cause);
+
+        }
+
+
+        public CircularDependencyException(Throwable cause) {
+
+            super(cause);
+
+        }
+
+    } // END CircularDependencyException
+}
diff --git a/com/sun/faces/config/FaceletsConfiguration.java b/com/sun/faces/config/FaceletsConfiguration.java
new file mode 100644
index 0000000..b318a4e
--- /dev/null
+++ b/com/sun/faces/config/FaceletsConfiguration.java
@@ -0,0 +1,195 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.faces.context.FacesContext;
+
+
+/*
+ * This read-only singleton class is vended by the WebConfiguration.
+ * It is queried from any point in the program that needs to take action based
+ * on configuration options pertaining to facelets.
+ *
+ */
+public class FaceletsConfiguration {
+
+    public static final String FACELETS_CONFIGURATION_ATTRIBUTE_NAME = "com.sun.faces.config.FaceletsConfiguration";
+
+    private static final String ESCAPE_INLINE_TEXT_ATTRIBUTE_NAME = "com.sun.faces.config.EscapeInlineText";
+
+//    private static final String CONSUME_COMMENTS_ATTRIBUTE_NAME = "com.sun.faces.config.ConsumeComments";
+
+    private static Pattern EXTENSION_PATTERN = Pattern.compile("\\.[^/]+$");
+
+    private WebConfiguration config;
+
+    private  Map<String, String> faceletsProcessingMappings;
+
+
+    public FaceletsConfiguration(WebConfiguration config) {
+        this.config = config;
+
+        faceletsProcessingMappings =
+                config.getFacesConfigOptionValue(WebConfiguration.WebContextInitParameter.FaceletsProcessingFileExtensionProcessAs);
+
+    }
+
+    public boolean isProcessCurrentDocumentAsFaceletsXhtml(String alias) {
+        // We want to write the XML declaration if and only if
+        // The SuppressXmlDeclaration context-param is NOT enabled
+        // and the file extension for the current file has a mapping
+        // with the value of XHTML
+        boolean currentModeIsXhtml = true;
+
+        String extension = getExtension(alias);
+
+        assert (null != faceletsProcessingMappings);
+        if (faceletsProcessingMappings.containsKey(extension)) {
+            String value = faceletsProcessingMappings.get(extension);
+            currentModeIsXhtml = value.equals("xhtml");
+        }
+
+        return currentModeIsXhtml;
+    }
+    
+    public boolean isOutputHtml5Doctype(String alias) {
+        boolean currentModeIsHtml5 = true;
+        
+        String extension = getExtension(alias);
+
+        assert (null != faceletsProcessingMappings);
+        if (faceletsProcessingMappings.containsKey(extension)) {
+            String value = faceletsProcessingMappings.get(extension);
+            currentModeIsHtml5 = value.equals("html5");
+        }
+        
+        
+        return currentModeIsHtml5;
+    }
+
+    public boolean isConsumeComments(String alias) {
+        boolean consumeComments = false;
+
+        String extension = getExtension(alias);
+
+        assert (null != faceletsProcessingMappings);
+        if (faceletsProcessingMappings.containsKey(extension)) {
+            String value = faceletsProcessingMappings.get(extension);
+            consumeComments = value.equals("xml") || value.equals("jspx");
+        }
+
+        return consumeComments;
+
+    }
+
+    public boolean isConsumeCDATA(String alias) {
+        boolean consumeCDATA = false;
+
+        String extension = getExtension(alias);
+
+        assert (null != faceletsProcessingMappings);
+        if (faceletsProcessingMappings.containsKey(extension)) {
+            String value = faceletsProcessingMappings.get(extension);
+            consumeCDATA = value.equals("jspx") || value.equals("xml");
+        }
+
+        return consumeCDATA;
+
+    }
+
+    public boolean isEscapeInlineText(FacesContext context) {
+        Boolean result = Boolean.TRUE;
+
+        result = (Boolean) context.getAttributes().get(ESCAPE_INLINE_TEXT_ATTRIBUTE_NAME);
+        if (null == result) {
+        
+            String extension = getExtension(context.getViewRoot().getViewId());
+
+            assert (null != faceletsProcessingMappings);
+            if (faceletsProcessingMappings.containsKey(extension)) {
+                String value = faceletsProcessingMappings.get(extension);
+                result = value.equals("xml") || value.equals("xhtml");
+            } else {
+                result = Boolean.TRUE;
+            }
+            context.getAttributes().put(ESCAPE_INLINE_TEXT_ATTRIBUTE_NAME,
+                    result);
+        }
+
+        return result;
+    }
+
+    public static FaceletsConfiguration getInstance(FacesContext context) {
+        FaceletsConfiguration result = null;
+        Map<Object, Object> attrs = context.getAttributes();
+        result = (FaceletsConfiguration) attrs.get(FaceletsConfiguration.FACELETS_CONFIGURATION_ATTRIBUTE_NAME);
+        if (null == result) {
+            WebConfiguration config = WebConfiguration.getInstance(context.getExternalContext());
+            result = config.getFaceletsConfiguration();
+            attrs.put(FaceletsConfiguration.FACELETS_CONFIGURATION_ATTRIBUTE_NAME, result);
+        }
+        return result;
+    }
+
+    public static FaceletsConfiguration getInstance() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        return FaceletsConfiguration.getInstance(context);
+    }
+
+    private static String getExtension(String alias) {
+        String ext = null;
+
+        if (alias != null) {
+            Matcher matcher = EXTENSION_PATTERN.matcher(alias);
+            if (matcher.find()) {
+                ext = alias.substring(matcher.start(), matcher.end());
+            }
+        }
+
+        return (ext == null) ? "xhtml": ext;
+    }
+
+
+}
diff --git a/com/sun/faces/config/FacesConfigInfo.java b/com/sun/faces/config/FacesConfigInfo.java
new file mode 100644
index 0000000..b0193af
--- /dev/null
+++ b/com/sun/faces/config/FacesConfigInfo.java
@@ -0,0 +1,264 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+
+import java.util.List;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * <p>
+ * Wrapper around the <code>/WEB-INF/faces-config.xml</code>, if present,
+ * to expose information relevant to the intialization of the runtime.
+ * </p>
+*/
+public class FacesConfigInfo {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    private static final String ABSOLUTE_ORDERING = "absolute-ordering";
+    private static final String ORDERING = "ordering";
+    private static final String NAME = "name";
+    private static final String OTHERS = "others";
+
+    private double version = 2.0;
+    private boolean isWebInfFacesConfig;
+    private boolean metadataComplete;
+    private List<String> absoluteOrdering;
+
+
+    // -------------------------------------------------------- Constructors
+
+
+    /**
+     * Creates a new <code>WebInfFacesConfig</code> document based
+     * on the provided <code>Document</code>.  If the <code>Document</code>
+     * does not represent the <code>WEB-INF/faces-config.xml</code> the
+     * {@link #isWebInfFacesConfig()} method will return <code>false</code>
+     *
+     * @param documentInfo DocumentInfo representing the <code>/WEB-INF/faces-config.xml</code>
+     */
+    public FacesConfigInfo(DocumentInfo documentInfo) {
+
+        Document document = documentInfo.getDocument();
+        isWebInfFacesConfig = isWebinfFacesConfig(document);
+        version = getVersion(document);
+        if (isWebInfFacesConfig && isVersionGreaterOrEqual(2.0)) {
+            extractOrdering(document);
+        }
+        metadataComplete = isMetadataComplete(document);
+
+    }
+
+
+    // ------------------------------------------------------ Public Methods
+
+
+    /**
+     * @param version version to check
+     * @return <code>true</code> if <code>version</code> is greater or
+     *  equal to the version of the <code>/WEB-INF/faces-config.xml</code>
+     */
+    public boolean isVersionGreaterOrEqual(double version) {
+
+        return (this.version >= version);
+
+    }
+
+
+    /**
+     * @return <code>true</code> if the <code>Document</code> provided at
+     *  construction time represents the <code>/WEB-INF/faces-config.xml</code>.
+     */
+    public boolean isWebInfFacesConfig() {
+
+        return isWebInfFacesConfig;
+
+    }
+
+
+    /**
+     * @return <code>true</code> if the <code>Document</code> provided at
+     *  construction time represents the <code>/WEB-INF/faces-config.xml and is
+     *  metadata complete.
+     */
+    public boolean isMetadataComplete() {
+
+        return metadataComplete;
+
+    }
+
+
+    /**
+     * @return a <code>List</code> of document names that in the order that
+     *  they should be processed.  The presense of the keyword "others" indicates
+     *  all documents not explicitly referenced by name in the list should be
+     *  places in the final parsing order at same location.  If there are multiple
+     *  documents that aren't named and the others element is present, the
+     *  order that these documents are inserted into the final list is unspecified
+     *  at this time.
+     */
+    public List<String> getAbsoluteOrdering()  {
+
+        return ((absoluteOrdering != null)
+                ? Collections.unmodifiableList(absoluteOrdering)
+                : null);
+
+    }
+
+
+    // ----------------------------------------------------- Private Methods
+
+
+    /**
+     * @param document document representing <code>WEB-INF/faces-config.xml</code>
+     * @return return the value of the version attribute of the provided document.
+     *  If no version attribute is specified, assume 1.1.
+     */
+    private double getVersion(Document document) {
+
+        String version = document.getDocumentElement()
+              .getAttributeNS(document.getNamespaceURI(), "version");
+        if (version != null && version.length() > 0) {
+            return Double.parseDouble(version);
+        } else {
+            return 1.1d;
+        }
+
+    }
+
+
+    /**
+     * @param document the <code>Document</code> to inspect
+     * @return <code>true</code> if the document represents the
+     *         <code>/WEB-INF/faces-config.xml</code>
+     */
+    private boolean isWebinfFacesConfig(Document document) {
+
+        String marker = document.getDocumentElement().getAttribute(ConfigManager.WEB_INF_MARKER);
+        return (marker != null && marker.length() > 0);
+
+    }
+
+
+    private boolean isMetadataComplete(Document document) {
+
+        if (isVersionGreaterOrEqual(2.0)) {
+            String metadataComplete = document.getDocumentElement()
+                  .getAttributeNS(document.getNamespaceURI(),
+                                  "metadata-complete");
+            return ((metadataComplete != null)
+                    ? Boolean.valueOf(metadataComplete)
+                    : false);
+        } else {
+            // not a 2.0 application, so annotation processing will not occur
+            return true;
+        }
+
+    }
+
+
+    private void extractOrdering(Document document) {
+
+        Element documentElement = document.getDocumentElement();
+        String namespace = documentElement.getNamespaceURI();
+
+        NodeList orderingElements =
+              documentElement.getElementsByTagNameNS(namespace, ORDERING);
+        if (orderingElements.getLength() > 0) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.warning("jsf.configuration.web.faces.config.contains.ordering");
+            }
+        }
+        
+        NodeList absoluteOrderingElements =
+              documentElement.getElementsByTagNameNS(namespace, ABSOLUTE_ORDERING);
+
+        if (absoluteOrderingElements.getLength() > 0) {
+            // according to the schema there, should be only one
+            if (absoluteOrderingElements.getLength() > 1) {
+                throw new IllegalStateException("Multiple 'absolute-ordering' elements found within WEB-INF/faces-config.xml");
+            }
+            Node absoluteOrderingNode = absoluteOrderingElements.item(0);
+            NodeList children = absoluteOrderingNode.getChildNodes();
+            absoluteOrdering = new ArrayList<String>(children.getLength());
+            for (int i = 0, len = children.getLength(); i < len; i++) {
+                Node n = children.item(i);
+                if (NAME.equals(n.getLocalName())) {
+                    absoluteOrdering.add(getNodeText(n));
+                } else if (OTHERS.equals(n.getLocalName())) {
+                    if (absoluteOrdering.contains("others")) {
+                        throw new IllegalStateException("'absolute-ordering' element defined with multiple 'others' child elements found within WEB-INF/faces-config.xml");
+                    }
+                    absoluteOrdering.add("others");
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Return the textual content, if any, of the provided <code>Node</code>.
+     */
+    private String getNodeText(Node node) {
+
+        String res = null;
+        if (node != null) {
+            res = node.getTextContent();
+            if (res != null) {
+                res = res.trim();
+            }
+        }
+
+        return ((res != null && res.length() != 0) ? res : null);
+
+    }
+
+} // END FacesConfigInfo
diff --git a/com/sun/faces/config/FacesInitializer.java b/com/sun/faces/config/FacesInitializer.java
new file mode 100644
index 0000000..da10339
--- /dev/null
+++ b/com/sun/faces/config/FacesInitializer.java
@@ -0,0 +1,166 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2009-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+
+import com.sun.faces.RIConstants;
+
+import javax.faces.application.ResourceDependencies;
+import javax.faces.application.ResourceDependency;
+import javax.faces.bean.ManagedBean;
+import javax.faces.component.FacesComponent;
+import javax.faces.component.UIComponent;
+import javax.faces.convert.FacesConverter;
+import javax.faces.convert.Converter;
+import javax.faces.event.ListenerFor;
+import javax.faces.event.ListenersFor;
+import javax.faces.render.FacesBehaviorRenderer;
+import javax.faces.render.Renderer;
+import javax.faces.validator.FacesValidator;
+import javax.faces.validator.Validator;
+import javax.faces.webapp.FacesServlet;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.annotation.HandlesTypes;
+import java.util.Set;
+import java.util.Map;
+import java.net.MalformedURLException;
+
+/**
+ * Adds mappings <em>/faces</em>, <em>*.jsf</em>, and <em>*.faces</em> for the
+ * FacesServlet (if it hasn't already been mapped) if the following conditions
+ * are met:
+ *
+ * <ul>
+ *    <li>
+ *       The <code>Set</code> of classes passed to this initializer is not
+ *       empty, or
+ *    </li>
+ *    <li>
+ *       /WEB-INF/faces-config.xml exists.
+ *    </li>
+ * </ul>
+ */
+ at SuppressWarnings({"UnusedDeclaration"})
+ at HandlesTypes({
+      ManagedBean.class,
+      FacesComponent.class,
+      FacesValidator.class,
+      FacesConverter.class,
+      FacesBehaviorRenderer.class,
+      ResourceDependency.class,
+      ResourceDependencies.class,
+      ListenerFor.class,
+      ListenersFor.class,
+      UIComponent.class,
+      Validator.class,
+      Converter.class,
+      Renderer.class
+
+})
+public class FacesInitializer implements ServletContainerInitializer {
+
+    // NOTE: Loggins should not be used with this class.
+
+    private static final String FACES_SERVLET_CLASS = FacesServlet.class.getName();
+
+    // -------------------------------- Methods from ServletContainerInitializer
+
+
+    public void onStartup(Set<Class<?>> classes, ServletContext servletContext)
+        throws ServletException {
+
+        if (shouldCheckMappings(classes, servletContext)) {
+            InitFacesContext initFacesContext = new InitFacesContext(servletContext);
+            if (null == initFacesContext) {
+                throw new ServletException("Unable to initialize Mojarra");
+            }
+
+            Map<String,? extends ServletRegistration> existing = servletContext.getServletRegistrations();
+            for (ServletRegistration registration : existing.values()) {
+                if (FACES_SERVLET_CLASS.equals(registration.getClassName())) {
+                    // FacesServlet has already been defined, so we're
+                    // not going to add additional mappings;
+                    return;
+                }
+            }
+            ServletRegistration reg =
+                  servletContext.addServlet("FacesServlet",
+                                            "javax.faces.webapp.FacesServlet");
+            reg.addMapping("/faces/*", "*.jsf", "*.faces");
+            servletContext.setAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED, Boolean.TRUE);
+
+            // The following line is temporary until we can solve an ordering
+            // issue in V3.  Right now the JSP container looks for a mapping
+            // of the FacesServlet in the web.xml.  If it's not present, then
+            // it assumes that the application isn't a faces application.  In this
+            // case the JSP container will not register the ConfigureListener
+            // definition from our TLD nor will it parse cause or JSP TLDs to
+            // be parsed.
+            servletContext.addListener(com.sun.faces.config.ConfigureListener.class);
+
+        }
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private boolean shouldCheckMappings(Set<Class<?>> classes,
+                                        ServletContext context) {
+
+        if (classes != null && !classes.isEmpty()) {
+            return true;
+        }
+
+        // no JSF specific parameters found, check for a WEB-INF/faces-config.xml
+        try {
+            return (context.getResource("/WEB-INF/faces-config.xml") != null);
+        } catch (MalformedURLException mue) {
+
+        }
+        
+        return false;
+
+    }
+}
diff --git a/com/sun/faces/config/InitFacesContext.java b/com/sun/faces/config/InitFacesContext.java
new file mode 100644
index 0000000..eaafeb7
--- /dev/null
+++ b/com/sun/faces/config/InitFacesContext.java
@@ -0,0 +1,703 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import com.sun.faces.RIConstants;
+import java.util.Map.Entry;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.Flash;
+import javax.faces.context.ResponseStream;
+import javax.faces.context.ResponseWriter;
+import javax.faces.component.UIViewRoot;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.FactoryFinder;
+import javax.faces.render.RenderKit;
+import javax.servlet.ServletContext;
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.FunctionMapper;
+import javax.el.VariableMapper;
+import java.util.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.sun.faces.context.ApplicationMap;
+import com.sun.faces.context.InitParameterMap;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A special, minimal implementation of FacesContext used at application initialization time.
+ * The ExternalContext returned by this FacesContext only exposes the ApplicationMap.
+ */
+public class InitFacesContext extends FacesContext {
+    
+    private static Logger LOGGER = FacesLogger.CONFIG.getLogger();
+    
+    private ServletContextAdapter ec;
+    private UIViewRoot viewRoot;
+    private FacesContext orig;
+    private Map<Object,Object> attributes;
+    private ELContext elContext = new ELContext() {
+        public ELResolver getELResolver() {
+            return null;
+        }
+
+        public FunctionMapper getFunctionMapper() {
+            return null;
+        }
+
+        public VariableMapper getVariableMapper() {
+            return null;
+        }
+    };
+
+    public InitFacesContext(ServletContext sc) {
+        ec = new ServletContextAdapter(sc);
+        orig = FacesContext.getCurrentInstance();
+        sc.setAttribute(INIT_FACES_CONTEXT_ATTR_NAME, this);
+        InitFacesContext.cleanupInitMaps(sc);
+        getThreadInitContextMap().put(Thread.currentThread(), this);
+        getInitContextServletContextMap().put(this, sc);
+    }
+    
+    public void reInitializeExternalContext(ServletContext sc) {
+        assert(Util.isUnitTestModeEnabled());
+        ec = new ServletContextAdapter(sc);
+    }
+    
+    private static final String INIT_FACES_CONTEXT_ATTR_NAME = RIConstants.FACES_PREFIX + "InitFacesContext";
+    
+    static InitFacesContext getInstance(ServletContext sc) {
+        InitFacesContext result = (InitFacesContext) sc.getAttribute(INIT_FACES_CONTEXT_ATTR_NAME);
+        if (null != result) {
+            result.callSetCurrentInstance();
+        }
+        
+        return result;
+    }
+
+    void callSetCurrentInstance() {
+        getThreadInitContextMap().put(Thread.currentThread(), this);
+    }
+
+    @Override
+    public Map<Object, Object> getAttributes() {
+        if (attributes == null) {
+            attributes = new HashMap<Object,Object>();
+        }
+        return attributes;
+    }
+
+    public Application getApplication() {
+        ApplicationFactory factory = (ApplicationFactory)
+                FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return factory.getApplication();
+    }
+
+    public Iterator<String> getClientIdsWithMessages() {
+        List<String> list = Collections.emptyList();
+        return list.iterator();
+    }
+
+    public ExternalContext getExternalContext() {
+        return ec;
+    }
+
+    public FacesMessage.Severity getMaximumSeverity() {
+        return FacesMessage.SEVERITY_INFO;
+    }
+
+    public Iterator<FacesMessage> getMessages() {
+        List<FacesMessage> list = Collections.emptyList();
+        return list.iterator();
+    }
+
+    public Iterator<FacesMessage> getMessages(String clientId) {
+        return getMessages();
+    }
+
+    public List<FacesMessage> getMessageList() {
+	return Collections.EMPTY_LIST;
+    }
+
+
+    public List<FacesMessage> getMessageList(String clientId) {
+	return Collections.EMPTY_LIST;
+    }
+
+
+    @Override
+    public boolean isProjectStage(ProjectStage stage) {
+        if (stage == null) {
+            throw new NullPointerException();
+        }
+        return stage.equals(getApplication().getProjectStage());
+    }
+
+    public RenderKit getRenderKit() {
+        return null;
+    }
+
+    public boolean getRenderResponse() {
+        return true;
+    }
+
+    public boolean getResponseComplete() {
+        return true;
+    }
+
+    @Override
+    public boolean isValidationFailed() {
+        return false;
+    }
+
+    public ResponseStream getResponseStream() {
+        return null;
+    }
+
+    public void setResponseStream(ResponseStream responseStream) { }
+
+    public ResponseWriter getResponseWriter() {
+        return null;
+    }
+
+    public void setResponseWriter(ResponseWriter responseWriter) { }
+
+    public UIViewRoot getViewRoot() {
+        if (viewRoot == null) {
+            viewRoot = new UIViewRoot();
+            viewRoot.setLocale(Locale.getDefault());
+            viewRoot.setViewId(RIConstants.FACES_PREFIX + "xhtml");
+        }
+        return viewRoot;
+    }
+
+    public void setViewRoot(UIViewRoot root) { }
+
+    public void addMessage(String clientId, FacesMessage message) { }
+
+    public void release() {
+        setCurrentInstance(orig);
+        if (null != ec) {
+            Map<String, Object> appMap = ec.getApplicationMap();
+            if (null != appMap && appMap instanceof ApplicationMap) {
+                if (null != ((ApplicationMap)appMap).getContext()) {
+                    appMap.remove(INIT_FACES_CONTEXT_ATTR_NAME);
+                }
+            }
+            ec.release();
+        }
+        
+        if (null != attributes) {
+            attributes.clear();
+            attributes = null;
+        }
+        elContext = null;
+        if (null != viewRoot) {
+            Map viewMap = viewRoot.getViewMap(false);
+            if (null != viewMap) {
+                viewMap.clear();
+            }
+        }
+        viewRoot = null;
+        orig = null;
+
+    }
+
+    public void renderResponse() { }
+
+    public void responseComplete() { }
+
+    @Override
+    public void validationFailed() { }
+
+    @Override
+    public ELContext getELContext() {
+       return elContext;
+    }
+
+    public void setELContext(ELContext elContext) {
+        this.elContext = elContext;        
+    }
+
+    /**
+     * Clean up entries from the threadInitContext and initContextServletContext maps 
+     * using a ServletContext.  First remove entry(s) with matching ServletContext from
+     * initContextSerlvetContext map.  Then remove entries from threadInitContext map
+     * where the entry value(s) match the initFacesContext (associated with the ServletContext).
+     */
+    public static void cleanupInitMaps(ServletContext context) {
+        Map <Thread, InitFacesContext>threadInitContext = InitFacesContext.getThreadInitContextMap();
+        Map <InitFacesContext, ServletContext>initContextServletContext =
+            InitFacesContext.getInitContextServletContextMap();
+        Set<Map.Entry<InitFacesContext, ServletContext>> entries = initContextServletContext.entrySet();
+        for (Iterator<Map.Entry<InitFacesContext, ServletContext>> iterator1 =
+            entries.iterator(); iterator1.hasNext();) {
+            Map.Entry<InitFacesContext, ServletContext> entry1 = (Map.Entry)iterator1.next();
+            Object initContextKey = entry1.getKey();
+            Object value1 = entry1.getValue();
+            if (context == value1) {
+                initContextServletContext.remove(initContextKey);
+                Set<Map.Entry<Thread, InitFacesContext>> threadEntries = threadInitContext.entrySet();
+                for (Iterator<Map.Entry<Thread, InitFacesContext>> iterator2 =
+                    threadEntries.iterator(); iterator2.hasNext();) {
+                    Map.Entry<Thread, InitFacesContext>  entry2 = (Map.Entry)iterator2.next();
+                    Object thread = entry2.getKey();
+                    Object initContextValue = entry2.getValue();
+                    if (initContextKey == initContextValue) {
+                        threadInitContext.remove(thread);
+                    }
+                }
+            }
+        }
+    }
+
+    public void releaseCurrentInstance() {
+        Map <Thread, InitFacesContext>threadInitContext = InitFacesContext.getThreadInitContextMap();
+        threadInitContext.remove(Thread.currentThread());
+        setCurrentInstance(null);
+    }
+
+    private static class ServletContextAdapter extends ExternalContext {
+
+        private ServletContext servletContext = null;
+        private ApplicationMap applicationMap = null;
+        private InitParameterMap initMap = null;
+        private boolean isEnableTransitionTimeNoOpFlash = WebConfiguration.BooleanWebContextInitParameter.EnableTransitionTimeNoOpFlash.getDefaultValue();
+    
+        public ServletContextAdapter(ServletContext sc) {
+            this.servletContext = sc;
+            
+            Object paramValue = sc.getInitParameter(WebConfiguration.BooleanWebContextInitParameter.EnableTransitionTimeNoOpFlash.getQualifiedName());
+            if (null != paramValue) {
+                isEnableTransitionTimeNoOpFlash = Boolean.parseBoolean(paramValue.toString());
+            }
+            
+        }
+
+        public void dispatch(String path) throws IOException {
+        }
+        
+        private void release() {
+            servletContext = null;
+            applicationMap = null;
+            initMap = null;
+        }
+
+        public String encodeActionURL(String url) {
+            return null;
+        }
+
+        public String encodeNamespace(String name) {
+            return null;
+        }
+
+
+        public String encodeResourceURL(String url) {
+            return null;
+        }
+
+        public Map<String, Object> getApplicationMap() {
+            if (applicationMap == null) {
+                applicationMap =
+                        new ApplicationMap(servletContext);
+            }
+            return applicationMap;
+        }
+
+        @Override
+        public Flash getFlash() {
+            if (isEnableTransitionTimeNoOpFlash) {
+                return new Flash() {
+                    
+                    @Override
+                    public void doPostPhaseActions(FacesContext ctx) {
+                        
+                    }
+                    
+                    @Override
+                    public void doPrePhaseActions(FacesContext ctx) {
+                        
+                    }
+                    
+                    @Override
+                    public boolean isKeepMessages() {
+                        return false;
+                    }
+                    
+                    @Override
+                    public boolean isRedirect() {
+                        return false;
+                    }
+                    
+                    @Override
+                    public void keep(String key) {
+                        
+                    }
+                    
+                    @Override
+                    public void putNow(String key, Object value) {
+                        
+                    }
+                    
+                    @Override
+                    public void setKeepMessages(boolean newValue) {
+                        
+                    }
+                    
+                    @Override
+                    public void setRedirect(boolean newValue) {
+                        
+                    }
+                    
+                    @Override
+                    public void clear() {
+                        
+                    }
+                    
+                    @Override
+                    public boolean containsKey(Object key) {
+                        return false;
+                    }
+                    
+                    @Override
+                    public boolean containsValue(Object value) {
+                        return false;
+                    }
+                    
+                    @Override
+                    public Set<Entry<String, Object>> entrySet() {
+                        return Collections.emptySet();
+                    }
+                    
+                    @Override
+                    public Object get(Object key) {
+                        return null;
+                    }
+                    
+                    @Override
+                    public boolean isEmpty() {
+                        return true;
+                    }
+                    
+                    @Override
+                    public Set<String> keySet() {
+                        return Collections.emptySet();
+                    }
+                    
+                    @Override
+                    public Object put(String key, Object value) {
+                        return null;
+                    }
+                    
+                    @Override
+                    public void putAll(Map<? extends String, ? extends Object> m) {
+                        
+                    }
+                    
+                    @Override
+                    public Object remove(Object key) {
+                        return null;
+                    }
+                    
+                    @Override
+                    public int size() {
+                        return 0;
+                    }
+                    
+                    @Override
+                    public Collection<Object> values() {
+                        return Collections.emptyList();
+                    }
+                    
+                    
+                };
+            } else {
+                return super.getFlash();
+            }
+        
+    }
+            
+            
+            
+        @Override
+        public String getApplicationContextPath() {
+            return servletContext.getContextPath();
+        }
+        
+        public String getAuthType() {
+            return null;
+        }
+
+        @Override
+        public String getMimeType(String file) {
+            return servletContext.getMimeType(file);
+        }
+
+        public Object getContext() {
+            return servletContext;
+        }
+
+	public String getContextName() { 
+	    return servletContext.getServletContextName();
+	}
+
+	
+
+        public String getInitParameter(String name) {
+            return servletContext.getInitParameter(name);
+        }
+
+        public Map<String,String> getInitParameterMap() {
+            if (initMap == null) {
+                initMap = new InitParameterMap(servletContext);
+            }
+            return initMap;
+        }
+
+        public String getRemoteUser() {
+            return null;
+        }
+
+
+        public Object getRequest() {
+            return null;
+        }
+
+        @Override
+        public void setRequest(Object request) {
+        }
+
+        public String getRequestContextPath() {
+            return null;
+        }
+
+        public Map<String,Object> getRequestCookieMap() {
+            return Collections.unmodifiableMap(Collections.<String,Object>emptyMap());
+        }
+
+        public Map<String,String> getRequestHeaderMap() {
+            return Collections.unmodifiableMap(Collections.<String,String>emptyMap());
+        }
+
+
+        public Map<String,String[]> getRequestHeaderValuesMap() {
+            return Collections.unmodifiableMap(Collections.<String,String[]>emptyMap());
+        }
+
+
+        public Locale getRequestLocale() {
+            return null;
+        }
+
+        public Iterator<Locale> getRequestLocales() {
+            return null;
+        }
+
+
+        public Map<String,Object> getRequestMap() {
+            return Collections.emptyMap();
+        }
+
+
+        public Map<String,String> getRequestParameterMap() {
+            return Collections.unmodifiableMap(Collections.<String,String>emptyMap());
+        }
+
+
+        public Iterator<String> getRequestParameterNames() {
+            return Collections.<String>emptyList().iterator();
+        }
+
+
+        public Map<String,String[]> getRequestParameterValuesMap() {
+            return Collections.unmodifiableMap(Collections.<String,String[]>emptyMap());
+        }
+
+
+        public String getRequestPathInfo() {
+            return null;
+        }
+
+
+        public String getRequestServletPath() {
+            return null;
+        }
+
+        @Override
+        public String getRequestContentType() {
+            return null;
+        }
+
+        @Override
+        public String getResponseContentType() {
+            return null;
+        }
+
+	public int getRequestContentLength() {
+	    return -1;
+	}
+
+        public URL getResource(String path) throws MalformedURLException {
+            return servletContext.getResource(path);
+        }
+
+
+        public InputStream getResourceAsStream(String path) {
+            return servletContext.getResourceAsStream(path);
+        }
+
+        public Set<String> getResourcePaths(String path) {
+            //noinspection unchecked
+            return servletContext.getResourcePaths(path);
+        }
+
+        public Object getResponse() {
+            return null;
+        }
+
+        @Override
+        public void setResponse(Object response) {
+        }
+
+        public Object getSession(boolean create) {
+            return null;
+        }
+
+        public Map<String,Object> getSessionMap() {
+            return Collections.emptyMap();
+        }
+
+        public java.security.Principal getUserPrincipal() {
+            return null;
+        }
+
+        public boolean isUserInRole(String role) {
+            return false;
+        }
+
+        public void log(String message) {
+            servletContext.log(message);
+        }
+
+        public void log(String message, Throwable exception) {
+            servletContext.log(message, exception);
+        }
+
+        public void redirect(String url) throws IOException {
+        }
+
+        @Override
+        public String getRequestCharacterEncoding() {
+            return null;
+        }
+
+        @Override
+        public void setRequestCharacterEncoding(String requestCharacterEncoding) throws UnsupportedEncodingException {
+
+        }
+
+        @Override
+        public String getResponseCharacterEncoding() {
+            return null;
+        }
+
+        @Override
+        public void setResponseCharacterEncoding(String responseCharacterEncoding) {
+        }
+
+        @Override
+        public void setResponseHeader(String name, String value) {
+        }
+
+        @Override
+        public void addResponseHeader(String name, String value) {
+        }
+
+        @Override
+        public String encodePartialActionURL(String url) {
+            return null; 
+        }
+
+
+    } // END ServletContextAdapter
+
+    static Map getThreadInitContextMap() {
+        ConcurrentHashMap threadInitContext = null;
+        try {
+            Field threadMap = FacesContext.class.getDeclaredField("threadInitContext");
+            threadMap.setAccessible(true);
+            threadInitContext = (ConcurrentHashMap)threadMap.get(null);
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Unable to get (thread, init context) map", e);
+            }
+        }
+        return threadInitContext;
+    }
+
+    static Map getInitContextServletContextMap() {
+        ConcurrentHashMap initContextServletContext = null;
+        try {
+            Field initContextMap = FacesContext.class.getDeclaredField("initContextServletContext");
+            initContextMap.setAccessible(true);
+            initContextServletContext = (ConcurrentHashMap)initContextMap.get(null);
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Unable to get (init context, servlet context) map", e);
+            }
+        }
+        return initContextServletContext;
+    }
+
+}
diff --git a/com/sun/faces/config/JavaClassScanningAnnotationScanner.java b/com/sun/faces/config/JavaClassScanningAnnotationScanner.java
new file mode 100644
index 0000000..9027b13
--- /dev/null
+++ b/com/sun/faces/config/JavaClassScanningAnnotationScanner.java
@@ -0,0 +1,727 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import com.sun.faces.RIConstants;
+import java.net.URI;
+import com.sun.faces.util.FacesLogger;
+
+import javax.servlet.ServletContext;
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.net.JarURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.util.*;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+/**
+ * This class is responsible for scanning the class file bytes of
+ * classes contained within the web application for any of the known
+ * Faces configuration Annotations:
+ * <ul>
+ *  <li>javax.faces.component.FacesBehavior</li>
+ *  <li>javax.faces.render.FacesBehaviorRenderer</li>
+ *  <li>javax.faces.component.FacesComponent</li>
+ *  <li>javax.faces.convert.FacesConverter</li>
+ *  <li>javax.faces.validator.FacesValidator</li>
+ *  <li>javax.faces.render.FacesRenderer</li>
+ *  <li>javax.faces.bean.ManagedBean</li>
+ *  <li>javax.faces.event.NamedEvent</li>
+ * </ul>
+ */
+public class JavaClassScanningAnnotationScanner extends AnnotationScanner {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    // Matcher.group(1) == the URL to the JAR file itself.
+    // Matcher.group(2) == the name of the JAR.
+    private static final Pattern JAR_PATTERN = Pattern.compile("(.*/(\\S*\\.jar)).*");
+
+    private static final String WEB_INF_CLASSES = "/WEB-INF/classes/";
+
+    private ClassFile classFileScanner;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Creates a new <code>AnnotationScanner</code> instance.
+     *
+     * @param sc the <code>ServletContext</code> for the application to be
+     *  scanned
+     */
+    public JavaClassScanningAnnotationScanner(ServletContext sc) {
+        super(sc);
+
+        classFileScanner = new ClassFile();
+        
+
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @return a <code>Map</code> of classes mapped to a specific annotation type.
+     *  If no annotations are present, or the application is considered
+     * <code>metadata-complete</code> <code>null</code> will be returned.
+     */
+    @Override
+    public Map<Class<? extends Annotation>,Set<Class<?>>> getAnnotatedClasses(Set<URI> uris) {
+
+        Set<String> classList = new HashSet<String>();
+
+        processWebInfClasses(sc, classList);
+        processClasspath(uris, classList);
+        processScripts(classList);
+
+        return processClassList(classList);
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    /**
+     * Scans for annotations on classes within JAR files on the classpath.
+     *
+     * @param uris to a faces-config documents that allow us to refer to
+     *  unique jar files on the classpath
+     * @param classList the <code>Set</code> to which annotated classes
+     *  will be added
+     */
+    private void processClasspath(Set<URI> uris, Set<String> classList) {
+
+        for (URI uri : uris) {
+            try {
+                Matcher m = JAR_PATTERN.matcher(uri.toString());
+                if (m.matches()) {
+                    String jarName = m.group(2);
+                    if (!processJar(jarName)) {
+                        continue;
+                    }
+                    StringBuilder sb = new StringBuilder(32);
+                    String us = m.group(1);
+                    if (!us.startsWith("jar:")) {
+                        sb.append("jar:");
+                    }
+                    if (us.startsWith("zip:")) {
+                    	sb.append("file:").append(us.substring(4));
+                    } else if (us.startsWith("bundle:")) {
+                    	sb.append("file:").append(us.substring(7));
+                    } else {
+                    	sb.append(us);
+                    }
+                    sb.append("!/");
+                    URL u = new URL(sb.toString());
+                    JarFile jarFile =
+                          ((JarURLConnection) u.openConnection()).getJarFile();
+                    processJarEntries(jarFile,
+                                      ((getClasspathPackages() != null)
+                                       ? getClasspathPackages().get(jarName)
+                                       : null),
+                                      classList);
+                } else {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.fine("Unable to match URL to a jar file: " + uri
+                              .toString());
+                    }
+                }
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "Unable to process annotations for url, {0}.  Reason: "
+                               + e.toString(),
+                               new Object[]{uri});
+                    LOGGER.log(Level.SEVERE, "", e);
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * Called by {@link ConstantPoolInfo} when processing the bytes of the
+     * class file.
+     *
+     * @param value the String value as provided from {@link ConstantPoolInfo}
+     * @return <code>true</code> if the value is one of the known
+     *  Faces annotations, otherwise <code>false</code>
+     */
+    private static boolean isAnnotation(String value) {
+
+        return FACES_ANNOTATIONS.contains(value);
+
+    }
+
+
+    /**
+     * Process the entries in the provided <code>JarFile</code> looking for
+     * class files that may be annotated with any of the Faces configuration
+     * annotations.
+     *
+     * @param jarFile the JAR to process
+     * @param allowedPackages the packages that should be scanned within the jar
+     * @param classList the <code>Set</code> to which annotated classes
+     *  will be added
+     */
+    private void processJarEntries(JarFile jarFile, String[] allowedPackages, Set<String> classList) {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                        "Scanning JAR {0} for annotations...",
+                        jarFile.getName());
+        }
+
+        for (Enumeration<JarEntry> entries = jarFile.entries(); entries.hasMoreElements(); ) {
+            JarEntry entry = entries.nextElement();
+            if (entry.isDirectory()) {
+                continue;
+            }
+
+            String name = entry.getName();
+            if (name.startsWith("META-INF")) {
+                continue;
+            }
+
+            if (name.endsWith(".class")) {
+                String cname = convertToClassName(name);
+                if (!processClass(cname, allowedPackages)) {
+                    continue;
+                }
+                ReadableByteChannel channel = null;
+                try {
+                    channel = Channels.newChannel(jarFile.getInputStream(entry));
+                    if (classFileScanner.containsAnnotation(channel)) {
+                        if (LOGGER.isLoggable(Level.FINE)) {
+                            LOGGER.log(Level.FINE,
+                                       "[JAR] Found annotated Class: {0}",
+                                       cname);
+                        }
+                        classList.add(cname);
+                    }
+                } catch (IOException e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "Unexpected exception scanning JAR {0} for annotations",
+                                   jarFile.getName());
+                        LOGGER.log(Level.SEVERE,
+                                   e.toString(),
+                                   e);
+                    }
+                } finally {
+                    if (channel != null) {
+                        try {
+                            channel.close();
+                        } catch (IOException ignored) {
+                            if (LOGGER.isLoggable(Level.FINE)) {
+                                LOGGER.log(Level.FINE,
+                                           ignored.toString(),
+                                           ignored);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * Scan <code>WEB-INF/classes</code> for classes that may be annotated
+     * with any of the Faces configuration annotations.
+     *
+     * @param sc the <code>ServletContext</code> for the application being
+     *  scanned
+     * @param classList the <code>Set</code> to which annotated classes
+     *  will be added
+     */
+    private void processWebInfClasses(ServletContext sc, Set<String> classList) {
+
+        processWebInfClasses(sc, WEB_INF_CLASSES, classList);
+
+    }
+
+
+    /**
+     * Scan <code>WEB-INF/classes</code> for classes that may be annotated
+     * with any of the Faces configuration annotations.
+     *
+     * @param sc the <code>ServletContext</code> for the application being
+     *  scanned
+     * @param path the path to start the scan from
+     * @param classList the <code>Set</code> to which annotated classes
+     *  will be added
+     */
+    private void processWebInfClasses(ServletContext sc,
+                                      String path,
+                                      Set<String> classList) {
+
+        //noinspection unchecked
+        Set<String> paths = sc.getResourcePaths(path);
+        processWebInfClasses(sc, paths, classList);
+
+    }
+
+
+    /**
+     * Scan <code>WEB-INF/classes</code> for classes that may be annotated
+     * with any of the Faces configuration annotations.
+     *
+     * @param sc the <code>ServletContext</code> for the application being
+     *  scanned
+     * @param paths a set of paths to process
+     * @param classList the <code>Set</code> to which annotated classes
+     *  will be added
+     */
+    private void processWebInfClasses(ServletContext sc,
+                                      Set<String> paths,
+                                      Set<String> classList) {
+
+        if (paths != null && !paths.isEmpty()) {
+            for (String pathElement : paths) {
+                if (pathElement.endsWith("/")) {
+                    processWebInfClasses(sc, pathElement, classList);
+                } else {
+                    if (pathElement.endsWith(".class")) {
+                        String cname = convertToClassName(WEB_INF_CLASSES,
+                                                              pathElement);
+                        if (!processClass(cname)) {
+                            continue;
+                        }
+                        if (containsAnnotation(sc, pathElement)) {
+                            if (LOGGER.isLoggable(Level.FINE)) {
+                                LOGGER.log(Level.FINE,
+                                           "[WEB-INF/classes] Found annotated Class: {0}",
+                                           cname);
+                            }
+                            classList.add(cname);
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * @param sc the <code>ServletContext</code> for the application being
+     *  scanned
+     * @param pathElement the full path to the classfile to be scanned
+     * @return <code>true</code> if the class contains one of the Faces
+     *  configuration annotations
+     */
+    private boolean containsAnnotation(ServletContext sc, String pathElement) {
+
+        ReadableByteChannel channel = null;
+        try {
+            URL url = sc.getResource(pathElement);
+            channel = Channels.newChannel(url.openStream());
+            return classFileScanner.containsAnnotation(channel);
+        } catch (MalformedURLException e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           e.toString(),
+                           e);
+            }
+        } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           ioe.toString(),
+                           ioe);
+            }
+        } finally {
+            if (channel != null) {
+                try {
+                    channel.close();
+                } catch (IOException ignored) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   ignored.toString(),
+                                   ignored);
+                    }
+                }
+            }
+        }
+        return false;
+
+    }
+
+
+    /**
+     * Utility method for converting paths to fully qualified class names.
+     *
+     * @param pathEntry a path entry to a class file
+     *
+     * @return a fully qualfied class name using dot notation
+     */
+    private String convertToClassName(String pathEntry) {
+
+        return convertToClassName(null, pathEntry);
+
+    }
+
+
+    /**
+     * Utility method for converting paths to fully qualified class names.
+     *
+     * @param prefix the prefix that should be stripped from the class name
+     *  before converting it
+     * @param pathEntry a path to a class file
+     *
+     * @return a fully qualfied class name using dot notation
+     */
+    private String convertToClassName(String prefix, String pathEntry) {
+
+        String className = pathEntry;
+
+        if (prefix != null) {
+            // remove the prefix
+            className = className.substring(prefix.length());
+        }
+        // remove the .class suffix
+        className = className.substring(0, (className.length() - 6));
+
+        return className.replace('/', '.');
+
+    }
+
+
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * This class is encapsulating binary .class file information as defined at
+     * http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html
+     * <p/>
+     * This is used by the annotation frameworks to quickly scan .class files
+     * for the presence of annotations. This avoid the annotation framework
+     * having to load each .class file in the class loader.
+     * <p/>
+     * Taken from the GlassFish V2 source base.
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    private static final class ClassFile {
+
+        private static final int magic = 0xCAFEBABE;
+
+        public static final int ACC_PUBLIC = 0x1;
+        public static final int ACC_PRIVATE = 0x2;
+        public static final int ACC_PROTECTED = 0x4;
+        public static final int ACC_STATIC = 0x8;
+        public static final int ACC_FINAL = 0x10;
+        public static final int ACC_SYNCHRONIZED = 0x20;
+        public static final int ACC_THREADSAFE = 0x40;
+        public static final int ACC_TRANSIENT = 0x80;
+        public static final int ACC_NATIVE = 0x100;
+        public static final int ACC_INTERFACE = 0x200;
+        public static final int ACC_ABSTRACT = 0x400;
+
+        public short majorVersion;
+        public short minorVersion;
+        public ConstantPoolInfo constantPool[];
+        public short accessFlags;
+        public ConstantPoolInfo thisClass;
+        public ConstantPoolInfo superClass;
+        public ConstantPoolInfo interfaces[];
+
+        /**
+         * bunch of stuff I really don't care too much for now.
+         * <p/>
+         * FieldInfo           fields[]; MethodInfo          methods[];
+         * AttributeInfo       attributes[];
+         */
+
+        ByteBuffer header;
+        ConstantPoolInfo constantPoolInfo = new ConstantPoolInfo();
+
+        // ------------------------------------------------------------ Constructors
+
+
+        /**
+         * Creates a new instance of ClassFile
+         */
+        public ClassFile() {
+            header = ByteBuffer.allocate(12000);
+        }
+
+        // ---------------------------------------------------------- Public Methods
+
+
+        public void setConstantPoolInfo(ConstantPoolInfo poolInfo) {
+            constantPoolInfo = poolInfo;
+        }
+
+
+        /**
+         * Read the input channel and initialize instance data structure.
+         *
+         * @param in a <code>ReadableByteChannel</code> that provides the bytes
+         *  of the classfile
+         *
+         * @return <code>true</code> if the bytes representing this classfile include
+         *  one of the annotations we're looking for.
+         *
+         * @throws IOException if an I/O error occurs while reading the class
+         */
+        public boolean containsAnnotation(ReadableByteChannel in)
+              throws IOException {
+
+            /**
+             * this is the .class file layout
+             *
+             ClassFile {
+             u4 magic;
+             u2 minor_version;
+             u2 major_version;
+             u2 constant_pool_count;
+             cp_info constant_pool[constant_pool_count-1];
+             u2 access_flags;
+             u2 this_class;
+             u2 super_class;
+             u2 interfaces_count;
+             u2 interfaces[interfaces_count];
+             u2 fields_count;
+             field_info fields[fields_count];
+             u2 methods_count;
+             method_info methods[methods_count];
+             u2 attributes_count;
+             attribute_info attributes[attributes_count];
+             }
+             **/
+            header.clear();
+            long read = (long) in.read(header);
+            if (read == -1) {
+                return false;
+            }
+            header.rewind();
+
+            if (header.getInt() != magic) {
+                return false;
+            }
+
+            minorVersion = header.getShort();
+            majorVersion = header.getShort();
+            int constantPoolSize = header.getShort();
+
+            return constantPoolInfo
+                  .containsAnnotation(constantPoolSize, header, in);
+
+        }
+
+    } // END ClassFile
+
+
+    private static class ConstantPoolInfo {
+
+        private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+        public static final byte CLASS = 7;
+        public static final int FIELDREF = 9;
+        public static final int METHODREF = 10;
+        public static final int STRING = 8;
+        public static final int INTEGER = 3;
+        public static final int FLOAT = 4;
+        public static final int LONG = 5;
+        public static final int DOUBLE = 6;
+        public static final int INTERFACEMETHODREF = 11;
+        public static final int NAMEANDTYPE = 12;
+        public static final int ASCIZ = 1;
+        public static final int UNICODE = 2;
+
+        byte[] bytes = new byte[Short.MAX_VALUE];
+
+
+        // ------------------------------------------------------------ Constructors
+
+
+        /**
+         * Creates a new instance of ConstantPoolInfo
+         */
+        public ConstantPoolInfo() {
+        }
+
+
+        // ---------------------------------------------------------- Public Methods
+
+
+        /**
+         * Read the input channel and initialize instance data structure.
+         *
+         * @param constantPoolSize the constant pool size for this class file
+         * @param buffer the ByteBuffer used to store the bytes from <code>in</code>
+         * @param in ReadableByteChannel from which the class file bytes are
+         *  read
+         *
+         * @return <code>true</code> if the bytes representing this classfile include
+         *  one of the annotations we're looking for.
+         *
+         * @throws IOException if an I/O error occurs while reading the class
+         */
+        public boolean containsAnnotation(int constantPoolSize,
+                                          final ByteBuffer buffer,
+                                          final ReadableByteChannel in)
+        throws IOException {
+
+            for (int i = 1; i < constantPoolSize; i++) {
+                if (!refill(buffer, in, 1)) {
+                    return true;
+                }
+                final byte type = buffer.get();
+                switch (type) {
+                    case ASCIZ:
+                    case UNICODE:
+                        if (!refill(buffer, in, 2)) {
+                            return true;
+                        }
+                        final short length = buffer.getShort();
+                        if (length < 0 || length > Short.MAX_VALUE) {
+                            return true;
+                        }
+                        if (length > buffer.capacity()) {
+                            return true;
+                        }
+                        if (!refill(buffer, in, length)) {
+                            return true;
+                        }
+                        buffer.get(bytes, 0, length);
+                        /* to speed up the process, I am comparing the first few
+                         * bytes to Ljava since all annotations are in the java
+                         * package, the reduces dramatically the number or String
+                         * construction
+                         */
+                        if (bytes[0] == 'L' && bytes[1] == 'j' && bytes[2] == 'a') {
+                            String stringValue;
+                            if (type == ASCIZ) {
+                                stringValue =
+                                      new String(bytes, 0, length, "US-ASCII");
+                            } else {
+                                stringValue = new String(bytes, 0, length, RIConstants.CHAR_ENCODING);
+                            }
+                            if (JavaClassScanningAnnotationScanner.isAnnotation(stringValue)) {
+                                return true;
+                            }
+                        }
+                        break;
+                    case CLASS:
+                    case STRING:
+                        if (!refill(buffer, in, 2)) {
+                            return true;
+                        }
+                        buffer.getShort();
+                        break;
+                    case FIELDREF:
+                    case METHODREF:
+                    case INTERFACEMETHODREF:
+                    case INTEGER:
+                    case FLOAT:
+                        if (!refill(buffer, in, 4)) {
+                            return true;
+                        }
+                        buffer.position(buffer.position() + 4);
+                        break;
+                    case LONG:
+                    case DOUBLE:
+                        if (!refill(buffer, in, 8)) {
+                            return true;
+                        }
+                        buffer.position(buffer.position() + 8);
+                        // for long, and double, they use 2 constantPool
+                        i++;
+                        break;
+                    case NAMEANDTYPE:
+                        if (!refill(buffer, in, 4)) {
+                            return true;
+                        }
+                        buffer.getShort();
+                        buffer.getShort();
+                        break;
+                    default:
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE,
+                                       "Unknow type constant pool {0} at position {1}",
+                                       new Object[]{type, i});
+                        }
+                        break;
+                }
+            }
+            return false;
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+        private boolean refill(ByteBuffer buffer,
+                               ReadableByteChannel in,
+                               int requestLen) throws IOException {
+            
+            int cap = buffer.capacity();
+            if (buffer.position() + requestLen > cap) {
+                buffer.compact();
+                int read = in.read(buffer);
+                if (read < 0) {
+                    return false;
+                }
+                buffer.rewind();
+            }
+            return true;
+
+        }
+
+    } // END ConstantPoolInfo
+
+}
diff --git a/com/sun/faces/config/Verifier.java b/com/sun/faces/config/Verifier.java
new file mode 100644
index 0000000..09d0454
--- /dev/null
+++ b/com/sun/faces/config/Verifier.java
@@ -0,0 +1,216 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * This class backs the <code>com.sun.faces.verifyObjects</code>
+ * feature which provides basic validation of Components,
+ * Converters, and Validators.
+ * <p>
+ */
+public class Verifier {
+
+    /**
+     * Thread local to share the <code>Verifier</code>.
+     */
+    private static final ThreadLocal<Verifier> VERIFIER =
+            new ThreadLocal<Verifier>();
+
+    /**
+     * Represent the current Faces object types we validate.
+     */
+    public enum ObjectType {
+        COMPONENT,
+        CONVERTER,
+        VALIDATOR,       
+        BEHAVIOR,       
+    }
+
+
+    /**
+     * Container for any messages that may be queued.
+     */
+    private List<String> messages;
+
+
+    // ------------------------------------------------------- Constructors
+
+
+    /**
+     * Construct a new <code>Verifier</code> instance.
+     */
+    Verifier() {
+
+        messages = new ArrayList<String>(4);
+        
+    }
+
+
+    // ------------------------------------------------- Public Methods
+
+
+    /**
+     * @return a <code>Verifier</code> for the current web application
+     * <em>if</em> <code>com.sun.faces.verifyObjects</code> is enabled
+     */
+    public static Verifier getCurrentInstance() {
+
+        return VERIFIER.get();
+
+    }
+
+
+    /**
+     * Set the <code>Verifier</code> for this thread (typically the
+     * same thread that is used to bootstrap the application).
+     * @param verifier the <code>Verifier</code> for this web application
+     */
+    public static void setCurrentInstance(Verifier verifier) {
+
+        if (verifier == null) {
+            VERIFIER.remove();
+        } else {
+            VERIFIER.set(verifier);
+        }
+
+    }
+
+
+    /**
+     * @return <code>true</code> if no messages were queued by the
+     *  validation process
+     */
+    public boolean isApplicationValid() {
+
+        return (messages.isEmpty());
+
+    }
+
+
+    /**
+     * @return a <code>List</code> of all failures found
+     */
+    public List<String> getMessages() {
+
+        return messages;
+
+    }
+
+
+    /**
+     * Validate the specified faces object by:
+     * <ul>
+     *   <li>
+     *     Ensure the class can be found and loaded
+     *   </li>
+     *   <li>
+     *     Ensure the object has a public, no-argument constructor
+     *   </li>
+     *   </li>
+     *    Ensure the object is an instance of the class represented
+     *    by <code>assignableTo</code>
+     * </ul>
+     * If any of these tests fail, queue a message to be displayed at a
+     * later point in time.
+     * @param type The type of Faces object we're validating
+     * @param className the class name of the Faces object we're validating
+     * @param assignableTo the type we expect <code>className</code> to
+     *  either implement or extend
+     */
+    public void validateObject(ObjectType type, String className, Class<?> assignableTo) {
+
+        // temporary hack until we can fix the stylesheets that create
+        // the runtime xml
+        if ("javax.faces.component.html.HtmlHead".equals(className)
+              || "javax.faces.component.html.HtmlBody".equals(className)) {
+            return;
+        }
+        Class<?> c = null;
+        try {
+            c = Util.loadClass(className, this);
+        } catch (ClassNotFoundException cnfe) {
+            messages.add(MessageUtils.getExceptionMessageString(
+                             MessageUtils.VERIFIER_CLASS_NOT_FOUND_ID,
+                             type,
+                             className));
+        } catch (NoClassDefFoundError ncdfe) {
+            messages.add(MessageUtils.getExceptionMessageString(
+                             MessageUtils.VERIFIER_CLASS_MISSING_DEP_ID,
+                             type,
+                             className,
+                             ncdfe.getMessage()));
+        }
+        if (c != null) {
+            try {
+                Constructor ctor = c.getConstructor(RIConstants.EMPTY_CLASS_ARGS);
+                if (!Modifier.isPublic(ctor.getModifiers())) {
+                     messages.add(MessageUtils.getExceptionMessageString(
+                                      MessageUtils.VERIFIER_CTOR_NOT_PUBLIC_ID,
+                                      type,
+                                      className));
+                }
+            } catch (NoSuchMethodException nsme) {
+                messages.add(MessageUtils.getExceptionMessageString(
+                                 MessageUtils.VERIFIER_NO_DEF_CTOR_ID,
+                                 type,
+                                 className));
+            }
+            if (!assignableTo.isAssignableFrom(c)) {
+                messages.add(MessageUtils.getExceptionMessageString(
+                                 MessageUtils.VERIFIER_WRONG_TYPE_ID,
+                                 type,
+                                 className));
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/config/WebConfiguration.java b/com/sun/faces/config/WebConfiguration.java
new file mode 100644
index 0000000..1255378
--- /dev/null
+++ b/com/sun/faces/config/WebConfiguration.java
@@ -0,0 +1,1659 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.view.FaceletViewHandlingStrategy;
+import com.sun.faces.facelets.util.Classpath;
+import com.sun.faces.lifecycle.HttpMethodRestrictionsPhaseListener;
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.ViewHandler;
+import javax.faces.application.StateManager;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletContext;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collections;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.faces.FactoryFinder;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIInput;
+import javax.faces.convert.Converter;
+import javax.faces.event.PhaseListener;
+import javax.faces.lifecycle.ClientWindow;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+import javax.faces.validator.BeanValidator;
+import javax.faces.view.facelets.ResourceResolver;
+import javax.faces.webapp.FacesServlet;
+
+
+/** Class Documentation */
+public class WebConfiguration {
+
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    // A Simple regular expression of allowable boolean values
+    private static final Pattern ALLOWABLE_BOOLEANS =
+          Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
+
+    // Key under which we store our WebConfiguration instance.
+    private static final String WEB_CONFIG_KEY =
+          "com.sun.faces.config.WebConfiguration";
+    
+    public static final String META_INF_CONTRACTS_DIR = "META-INF" + 
+            WebContextInitParameter.WebAppContractsDirectory.getDefaultValue();
+    
+    private static final int META_INF_CONTRACTS_DIR_LEN = META_INF_CONTRACTS_DIR.length();
+    
+    private static final String RESOURCE_CONTRACT_SUFFIX = "/" + ResourceHandler.RESOURCE_CONTRACT_XML;
+        
+    // Logging level.  Defaults to FINE
+    private Level loggingLevel = Level.FINE;
+
+    private Map<BooleanWebContextInitParameter, Boolean> booleanContextParameters =
+          new EnumMap<BooleanWebContextInitParameter, Boolean>(BooleanWebContextInitParameter.class);
+
+    private Map<WebContextInitParameter, String> contextParameters =
+          new EnumMap<WebContextInitParameter, String>(WebContextInitParameter.class);
+
+    private Map<WebContextInitParameter, Map<String, String>> facesConfigParameters =
+            new EnumMap<WebContextInitParameter, Map<String, String>>(WebContextInitParameter.class);
+
+    private Map<WebEnvironmentEntry, String> envEntries =
+          new EnumMap<WebEnvironmentEntry, String>(WebEnvironmentEntry.class);
+
+    private Map<WebContextInitParameter, String []> cachedListParams;
+
+    private Set<String> setParams = new HashSet<String>();
+
+    private ServletContext servletContext;
+
+    private ArrayList<DeferredLoggingAction> deferredLoggingActions;
+
+    private FaceletsConfiguration faceletsConfig;
+    
+    private boolean hasFlows;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private WebConfiguration(ServletContext servletContext) {
+
+        this.servletContext = servletContext;
+
+        String contextName = getServletContextName();
+
+        initSetList(servletContext);
+        processBooleanParameters(servletContext, contextName);
+        processInitParameters(servletContext, contextName);
+        if (canProcessJndiEntries()) {
+            processJndiEntries(contextName);
+        }
+        
+        // build the cache of list type params
+        cachedListParams = new HashMap<WebContextInitParameter, String []>(3);
+        getOptionValue(WebContextInitParameter.ResourceExcludes, " ");
+        getOptionValue(WebContextInitParameter.DefaultSuffix, " ");
+        getOptionValue(WebContextInitParameter.FaceletsViewMappings, ";");
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * Return the WebConfiguration instance for this application passing
+     * the result of FacesContext.getCurrentInstance().getExternalContext()
+     * to {@link #getInstance(javax.faces.context.ExternalContext)}.
+     * @return the WebConfiguration for this application or <code>null</code>
+     *  if no FacesContext is available.
+     */
+    public static WebConfiguration getInstance() {
+
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        return getInstance(facesContext.getExternalContext());
+
+    }
+
+
+    /**
+     * Return the WebConfiguration instance for this application.
+     * @param extContext the ExternalContext for this request
+     * @return the WebConfiguration for this application
+     */
+    public static WebConfiguration getInstance(ExternalContext extContext) {
+
+        WebConfiguration config = (WebConfiguration) extContext.getApplicationMap()
+              .get(WEB_CONFIG_KEY);
+        if (config == null) {
+            return getInstance((ServletContext) extContext.getContext());
+        } else {
+            return config;
+        }
+
+    }
+
+
+    /**
+     * Return the WebConfiguration instance for this application.
+     * @param servletContext the ServletContext
+     * @return the WebConfiguration for this application or <code>null</code>
+     *  if no WebConfiguration could be located
+     */
+    public static WebConfiguration getInstance(ServletContext servletContext) {
+
+        WebConfiguration webConfig = (WebConfiguration)
+              servletContext.getAttribute(WEB_CONFIG_KEY);
+
+        if (webConfig == null) {
+            webConfig = new WebConfiguration(servletContext);
+            servletContext.setAttribute(WEB_CONFIG_KEY, webConfig);
+        }
+        return webConfig;
+
+    }
+
+
+    /**
+     * @return The <code>ServletContext</code> originally used to construct
+     * this WebConfiguration instance
+     */
+    public ServletContext getServletContext() {
+
+        return servletContext;
+
+    }
+
+    public boolean isHasFlows() {
+        return hasFlows;
+    }
+
+    public void setHasFlows(boolean hasFlows) {
+        this.hasFlows = hasFlows;
+    }
+    
+    /**
+     * Obtain the value of the specified boolean parameter
+     * @param param the parameter of interest
+     * @return the value of the specified boolean parameter
+     */
+    public boolean isOptionEnabled(BooleanWebContextInitParameter param) {
+
+        if (booleanContextParameters.get(param) != null) {
+            return booleanContextParameters.get(param);
+        } else {
+            return param.getDefaultValue();
+        }
+
+    }
+
+
+    /**
+     * Obtain the value of the specified parameter
+     * @param param the parameter of interest
+     * @return the value of the specified parameter
+     */
+    public String getOptionValue(WebContextInitParameter param) {
+        String result = contextParameters.get(param);
+        
+        if (null == result) {
+            WebContextInitParameter alternate = param.getAlternate();
+            if (null != alternate) {
+                result = contextParameters.get(alternate);
+            }
+        }
+
+        return result;
+
+    }
+    
+    public void setOptionValue(WebContextInitParameter param, String value) {
+        contextParameters.put(param, value);
+    }
+    
+    public void setOptionEnabled(BooleanWebContextInitParameter param, boolean value) {
+        booleanContextParameters.put(param, value);
+    }
+
+    public FaceletsConfiguration getFaceletsConfiguration() {
+
+        if (null == faceletsConfig) {
+            faceletsConfig = new FaceletsConfiguration(this);
+        }
+        return faceletsConfig;
+
+    }
+
+    public Map<String, String> getFacesConfigOptionValue(WebContextInitParameter param, boolean create) {
+        Map<String, String> result = null;
+
+        assert(null != facesConfigParameters);
+
+        result = facesConfigParameters.get(param);
+        if (null == result) {
+            if (create) {
+                result = new ConcurrentHashMap<String, String>(3);
+                facesConfigParameters.put(param, result);
+            } else {
+                result = Collections.emptyMap();
+            }
+        }
+
+        return result;
+
+    }
+
+    public Map<String, String> getFacesConfigOptionValue(WebContextInitParameter param) {
+        return getFacesConfigOptionValue(param, false);
+    }
+
+    
+    public String[] getOptionValue(WebContextInitParameter param, String sep) {
+        String [] result;
+        
+        assert(null != cachedListParams);
+        if (null == (result = cachedListParams.get(param))) {
+            String value = getOptionValue(param);
+            if (null == value) {
+                result = new String[0];
+            } else {
+                Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+                result = Util.split(appMap, value, sep);
+            }
+            cachedListParams.put(param, result);
+        }
+        
+        return result;
+    }
+
+
+    /**
+     * Obtain the value of the specified env-entry
+     * @param entry the env-entry of interest
+     * @return the value of the specified env-entry
+     */
+    public String getEnvironmentEntry(WebEnvironmentEntry entry) {
+
+        return envEntries.get(entry);
+
+    }
+
+
+    /**
+     * @param param the init parameter of interest
+     * @return <code>true</code> if the parameter was explicitly set,
+     *  otherwise, <code>false</code>
+     */
+    public boolean isSet(WebContextInitParameter param) {
+
+        return isSet(param.getQualifiedName());
+
+    }
+
+
+    /**
+     * @param param the init parameter of interest
+     * @return <code>true</code> if the parameter was explicitly set,
+     *  otherwise, <code>false</code>
+     */
+    public boolean isSet(BooleanWebContextInitParameter param) {
+
+        return isSet(param.getQualifiedName());
+
+    }
+
+
+    /**
+     * @return the name of this application
+     */
+    public String getServletContextName() {
+
+        if (servletContext.getMajorVersion() == 2
+            && servletContext.getMinorVersion() <= 4) {
+            return servletContext.getServletContextName();
+        } else {
+            return servletContext.getContextPath();
+        }
+
+    }
+
+
+    public void overrideContextInitParameter(BooleanWebContextInitParameter param, boolean value) {
+
+        if (param == null) {
+            return;
+        }
+        boolean oldVal = booleanContextParameters.put(param, value);
+        if (LOGGER.isLoggable(Level.FINE) && oldVal != value) {
+            LOGGER.log(Level.FINE,
+                       "Overriding init parameter {0}.  Changing from {1} to {2}.",
+                       new Object[] { param.getQualifiedName(), oldVal, value});
+        }
+
+    }
+
+
+    public void overrideContextInitParameter(WebContextInitParameter param, String value) {
+
+        if (param == null || value == null || value.length() == 0) {
+            return;
+        }
+        value = value.trim();
+        String oldVal = contextParameters.put(param, value);
+        cachedListParams.remove(param);
+        if (oldVal != null && LOGGER.isLoggable(Level.FINE) && !(oldVal.equals(value))) {
+            LOGGER.log(Level.FINE,
+                "Overriding init parameter {0}.  Changing from {1} to {2}.",
+                new Object[]{param.getQualifiedName(),
+                             oldVal,
+                             value});
+        }
+    }
+
+    public void doPostBringupActions() {
+
+        if (deferredLoggingActions != null) {
+            for (DeferredLoggingAction loggingAction : deferredLoggingActions) {
+                loggingAction.log();
+            }
+        }
+
+        // add the HttpMethodRestrictionPhaseListener if the parameter is enabled.
+        boolean enabled = this.isOptionEnabled(BooleanWebContextInitParameter.EnableHttpMethodRestrictionPhaseListener);
+        if (enabled) {
+            LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+            Iterator<String> ids = factory.getLifecycleIds();
+            PhaseListener listener = null;
+            Lifecycle cur;
+
+            while (ids.hasNext()) {
+                cur = factory.getLifecycle(ids.next());
+                boolean foundExistingListenerInstance = false;
+                for (PhaseListener curListener : cur.getPhaseListeners()) {
+                    if (curListener instanceof HttpMethodRestrictionsPhaseListener) {
+                        foundExistingListenerInstance = true;
+                        break;
+                    }
+                }
+                if (!foundExistingListenerInstance) {
+                    if (null == listener) {
+                        listener = new HttpMethodRestrictionsPhaseListener();
+                    }
+                    cur.addPhaseListener(listener);
+                }
+            }
+        }
+
+        discoverResourceLibraryContracts();
+
+    }
+    
+    private void discoverResourceLibraryContracts() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        ExternalContext extContex = context.getExternalContext();
+        Set<String> foundContracts = new HashSet<String>();
+        Set<String> candidates;
+        
+        // Scan for "contractMappings" in the web app root
+        String contractsDirName = getOptionValue(WebContextInitParameter.WebAppContractsDirectory);
+        assert(null != contractsDirName);
+        candidates = extContex.getResourcePaths(contractsDirName);
+        if (null != candidates) {
+            int contractsDirNameLen = contractsDirName.length();
+            int end;
+            for (String cur : candidates) {
+                end = cur.length();
+                if (cur.endsWith("/")) {
+                    end--;
+                }
+                foundContracts.add(cur.substring(contractsDirNameLen + 1, end));
+            }
+        }
+        
+        // Scan for "META-INF" contractMappings in the classpath
+        try {
+            URL[] candidateURLs = Classpath.search(Util.getCurrentLoader(this),
+                                          META_INF_CONTRACTS_DIR,
+                                          RESOURCE_CONTRACT_SUFFIX,
+                    Classpath.SearchAdvice.FirstMatchOnly);
+            for (URL curURL : candidateURLs) {
+                String cur = curURL.toExternalForm();
+                
+                int i = cur.indexOf(META_INF_CONTRACTS_DIR) + META_INF_CONTRACTS_DIR_LEN + 1;
+                int j = cur.indexOf(RESOURCE_CONTRACT_SUFFIX);
+                if (i < j) {
+                    foundContracts.add(cur.substring(i,j));
+                }
+                
+            }
+        } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Unable to scan " + META_INF_CONTRACTS_DIR, ioe);
+            }
+        }
+        
+        
+        if (foundContracts.isEmpty()) {
+            return;
+        }
+        
+        Map<String, List<String>> contractMappings = new HashMap<String, List<String>>();
+        
+        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
+        Map<String, List<String>> contractsFromConfig = associate.getResourceLibraryContracts();
+        List<String> contractsToExpose;
+        
+        if (null != contractsFromConfig && !contractsFromConfig.isEmpty()) {
+            List<String> contractsFromMapping;
+            for (Map.Entry<String, List<String>> cur : contractsFromConfig.entrySet()) {
+                // Verify that the contractsToExpose in this mapping actually exist
+                // in the application.  If not, log a message.
+                contractsFromMapping = cur.getValue();
+                if (null == contractsFromMapping || contractsFromMapping.isEmpty()) {
+                    if (LOGGER.isLoggable(Level.CONFIG)) {
+                        LOGGER.log(Level.CONFIG, "resource library contract mapping for pattern {0} has no contracts.", cur.getKey());
+                    }
+                } else {
+                    contractsToExpose = new ArrayList<String>();
+                    for (String curContractFromMapping : contractsFromMapping) {
+                        if (foundContracts.contains(curContractFromMapping)) {
+                            contractsToExpose.add(curContractFromMapping);
+                        } else {
+                            if (LOGGER.isLoggable(Level.CONFIG)) {
+                                LOGGER.log(Level.CONFIG, "resource library contract mapping for pattern {0} exposes contract {1}, but that contract is not available to the application.", 
+                                        new String [] { cur.getKey(), curContractFromMapping });
+                            }
+                        }
+                    }
+                    if (!contractsToExpose.isEmpty()) {
+                        contractMappings.put(cur.getKey(), contractsToExpose);
+                    }
+                }
+            }
+        } else {
+            contractsToExpose = new ArrayList<String>();
+            contractsToExpose.addAll(foundContracts);
+            contractMappings.put("*", contractsToExpose);
+        }
+        extContex.getApplicationMap().put(FaceletViewHandlingStrategy.RESOURCE_LIBRARY_CONTRACT_DATA_STRUCTURE_KEY, 
+                contractMappings);
+        
+    }
+
+
+    // ------------------------------------------------- Package Private Methods
+
+
+    static void clear(ServletContext servletContext) {
+
+        servletContext.removeAttribute(WEB_CONFIG_KEY);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Is the configured value valid against the default boolean pattern.</p>
+     * @param param the boolean parameter
+     * @param value the configured value
+     * @return <code>true</code> if the value is valid,
+     *  otherwise <code>false</code>
+     */
+    private boolean isValueValid(BooleanWebContextInitParameter param,
+                                 String value) {
+
+        if (!ALLOWABLE_BOOLEANS.matcher(value).matches()) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                           "jsf.config.webconfig.boolconfig.invalidvalue",
+                           new Object[]{
+                                 value,
+                                 param.getQualifiedName(),
+                                 "true|false",
+                                 "true|false",
+                                 param.getDefaultValue()
+                           });
+            }
+            return false;
+        }
+
+        return true;
+
+    }
+
+
+    /**
+     * <p>Process all boolean context initialization parameters.</p>
+     * @param servletContext the ServletContext of interest
+     * @param contextName the context name
+     */
+    private void processBooleanParameters(ServletContext servletContext,
+                                          String contextName) {
+
+        // process boolean contxt parameters
+        for (BooleanWebContextInitParameter param : BooleanWebContextInitParameter
+              .values()) {
+            String strValue =
+                  servletContext.getInitParameter(param.getQualifiedName());
+            boolean value;
+
+            if (strValue != null && strValue.length() > 0 && param.isDeprecated()) {
+                BooleanWebContextInitParameter alternate = param.getAlternate();
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    if (alternate != null) {
+                        queueLoggingAction(new DeferredBooleanParameterLoggingAction(
+                              param,
+                              Level.WARNING,
+                              "jsf.config.webconfig.param.deprecated",
+                              new Object[]{
+                                    contextName,
+                                    param.getQualifiedName(),
+                                    alternate.getQualifiedName()}));
+
+                    } else {
+                        queueLoggingAction(new DeferredBooleanParameterLoggingAction(
+                              param,
+                              Level.WARNING,
+                              "jsf.config.webconfig.param.deprecated.no_replacement",
+                              new Object[]{
+                                    contextName,
+                                    param.getQualifiedName()}));
+
+                    }
+                }
+
+                if (alternate != null) {
+                    if (isValueValid(param, strValue)) {
+                        value = Boolean.valueOf(strValue);
+                    } else {
+                        value = param.getDefaultValue();
+                    }
+
+                    if (LOGGER.isLoggable(Level.INFO) && alternate != null) {
+                        queueLoggingAction(new DeferredBooleanParameterLoggingAction(
+                              param,
+                              Level.INFO,
+                              ((value)
+                               ? "jsf.config.webconfig.configinfo.reset.enabled"
+                               : "jsf.config.webconfig.configinfo.reset.disabled"),
+                              new Object[]{
+                                    contextName,
+                                    alternate.getQualifiedName()}));
+                    }
+
+                    booleanContextParameters.put(alternate, value);
+                }
+                continue;
+            }
+
+            if (!param.isDeprecated()) {
+                if (strValue == null) {
+                    value = param.getDefaultValue();
+                } else {
+                    if (isValueValid(param, strValue)) {
+                        value = Boolean.valueOf(strValue);
+                    } else {
+                        value = param.getDefaultValue();
+                    }
+                }
+
+                // first param processed should be
+                // com.sun.faces.displayConfiguration
+                if (BooleanWebContextInitParameter.DisplayConfiguration.equals(param) && value) {
+                    loggingLevel = Level.INFO;
+                }
+
+                if (LOGGER.isLoggable(loggingLevel)) {
+                    LOGGER.log(loggingLevel,
+                               ((value)
+                                ? "jsf.config.webconfig.boolconfiginfo.enabled"
+                                : "jsf.config.webconfig.boolconfiginfo.disabled"),
+                               new Object[]{contextName,
+                                            param.getQualifiedName()});
+                }
+
+                booleanContextParameters.put(param, value);
+            }
+
+        }
+
+    }
+
+
+    /**
+     * Adds all com.sun.faces init parameter names to a list.  This allows
+     * callers to determine if a parameter was explicitly set.
+     * @param servletContext the ServletContext of interest
+     */
+    private void initSetList(ServletContext servletContext) {
+
+        for (Enumeration e = servletContext.getInitParameterNames();
+              e.hasMoreElements(); ) {
+            String name = e.nextElement().toString();
+            if (name.startsWith("com.sun.faces") ||
+                  name.startsWith("javax.faces")) {
+                setParams.add(name);
+            }
+        }
+
+    }
+
+
+    /**
+     * @param name the param name
+     * @return <code>true</code> if the name was explicitly specified
+     */
+    private boolean isSet(String name) {
+
+        return setParams.contains(name);
+
+    }
+
+
+    /**
+     * <p>Process all non-boolean context initialization parameters.</p>
+     * @param servletContext the ServletContext of interest
+     * @param contextName the context name
+     */
+    private void processInitParameters(ServletContext servletContext,
+                                       String contextName) {
+
+        for (WebContextInitParameter param : WebContextInitParameter.values()) {
+            String value =
+                  servletContext.getInitParameter(param.getQualifiedName());
+
+            if (value != null && value.length() > 0 && param.isDeprecated()) {
+                WebContextInitParameter alternate = param.getAlternate();
+                DeprecationLoggingStrategy strategy = param.getDeprecationLoggingStrategy();
+                if (strategy == null || strategy.shouldBeLogged(this)) {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        if (alternate != null) {
+                            queueLoggingAction(new DeferredParameterLoggingAction(param, Level.WARNING,
+                                       "jsf.config.webconfig.param.deprecated",
+                                       new Object[]{
+                                             contextName,
+                                             param.getQualifiedName(),
+                                             alternate.getQualifiedName()}));
+
+                        } else {
+                            queueLoggingAction(new DeferredParameterLoggingAction(
+                                  param,
+                                  Level.WARNING,
+                                  "jsf.config.webconfig.param.deprecated.no_replacement",
+                                  new Object[]{
+                                        contextName,
+                                        param.getQualifiedName()}));
+                        }
+                    }
+                }
+
+                if (alternate != null) {
+                    queueLoggingAction(
+                          new DeferredParameterLoggingAction(param,
+                                                             Level.INFO,
+                                                             "jsf.config.webconfig.configinfo.reset",
+                                                             new Object[]{
+                                                                    contextName,
+                                                                    alternate.getQualifiedName(),
+                                                                    value}));
+
+                    contextParameters.put(alternate, value);
+                }
+                continue;
+            }
+
+            if ((value == null || value.length() == 0) && !param.isDeprecated()) {
+                value = param.getDefaultValue();
+            }
+            if (value == null || value.length() == 0) {
+                continue;
+            }
+
+            if (value.length() > 0) {
+                if (LOGGER.isLoggable(loggingLevel)) {
+                    LOGGER.log(loggingLevel,
+                               "jsf.config.webconfig.configinfo",
+                               new Object[]{contextName,
+                                            param.getQualifiedName(),
+                                            value});
+
+                }
+                contextParameters.put(param, value);
+            } else {
+                if (LOGGER.isLoggable(loggingLevel)) {
+                    LOGGER.log(loggingLevel,
+                               "jsf.config.webconfig.option.notconfigured",
+                               new Object[]{contextName,
+                                            param.getQualifiedName()});
+                }
+            }
+
+        }
+
+    }
+
+
+    /**
+     * <p>Process all JNDI entries.</p>
+     * @param contextName the context name
+     */
+    private void processJndiEntries(String contextName) {
+
+        Context initialContext = null;
+        try {
+            initialContext = new InitialContext();
+        } catch (NoClassDefFoundError nde) {
+          // on google app engine InitialContext is forbidden to use and GAE throws NoClassDefFoundError 
+          if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, nde.toString(), nde);
+          }
+        } catch (NamingException ne) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING, ne.toString(), ne);
+            }
+        }
+
+        if (initialContext != null) {
+            // process environment entries
+            for (WebEnvironmentEntry entry : WebEnvironmentEntry.values()) {
+                String entryName = entry.getQualifiedName();
+                String value = null;
+
+                try {
+                    value = (String) initialContext.lookup(entryName);
+                } catch (NamingException root) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.fine(root.toString());
+                    }
+                }
+
+                if (value != null) {
+                    if (LOGGER.isLoggable(Level.INFO)) {
+                        if (LOGGER
+                                .isLoggable(loggingLevel)) {
+                            LOGGER.log(loggingLevel,
+                                    "jsf.config.webconfig.enventryinfo",
+                                    new Object[]{contextName,
+                                        entryName,
+                                        value});
+                        }
+                    }
+                    envEntries.put(entry, value);
+                }
+            }
+            try {
+                Object beanManager = initialContext.lookup("java:comp/BeanManager");
+                if (null != beanManager) {
+                    Util.setCDIAvailable(servletContext, beanManager);
+                }
+            } catch (NamingException root) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine(root.toString());
+                }
+            }
+            // JAVASERVERFACES-2922 Martin Kouba
+            if (!Util.isCDIAvailable(servletContext)) {
+                try {
+                    Object beanManager = initialContext.lookup("java:comp/env/BeanManager");
+                    if (null != beanManager) {
+                        Util.setCDIAvailable(servletContext, beanManager);
+                    }
+                } catch (NamingException root) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.fine(root.toString());
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    public boolean canProcessJndiEntries() {
+
+        try {
+            Util.getCurrentLoader(this).loadClass("javax.naming.InitialContext");
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.fine(
+                      "javax.naming is unavailable.  JNDI entries related to Mojarra configuration will not be processed.");
+            }
+            return false;
+        }
+        return true;
+
+    }
+
+
+    private void queueLoggingAction(DeferredLoggingAction loggingAction) {
+
+        if (deferredLoggingActions == null) {
+            deferredLoggingActions = new ArrayList<DeferredLoggingAction>();
+        }
+        deferredLoggingActions.add(loggingAction);
+
+    }
+
+
+    // ------------------------------------------------------------------- Enums
+
+
+    /**
+     * <p>An <code>enum</code> of all non-boolean context initalization parameters
+     * recognized by the implementation.</p>
+     */
+    public enum WebContextInitParameter {
+
+
+        // implementation note:
+        // if a parameter is to be deprecated,
+        // then the <name>Deprecated enum element
+        // *must* appear after the one that is taking
+        // its place.  The reporting logic depends on this
+
+        ManagedBeanFactoryDecorator(
+              "com.sun.faces.managedBeanFactoryDecoratorClass",
+              ""
+        ),
+        StateSavingMethod(
+              StateManager.STATE_SAVING_METHOD_PARAM_NAME,
+              "server"
+        ),
+        FaceletsSuffix(
+                ViewHandler.FACELETS_SUFFIX_PARAM_NAME,
+                ViewHandler.DEFAULT_FACELETS_SUFFIX
+        ),
+        DefaultSuffix(
+              ViewHandler.DEFAULT_SUFFIX_PARAM_NAME,
+              ViewHandler.DEFAULT_SUFFIX
+        ),
+        JavaxFacesConfigFiles(
+              FacesServlet.CONFIG_FILES_ATTR,
+              ""
+        ),
+        JavaxFacesProjectStage(
+              ProjectStage.PROJECT_STAGE_PARAM_NAME,
+              "Production"
+        ),
+        AlternateLifecycleId(
+              FacesServlet.LIFECYCLE_ID_ATTR,
+              ""
+        ),
+        ResourceExcludes(
+            ResourceHandler.RESOURCE_EXCLUDES_PARAM_NAME,
+            ResourceHandler.RESOURCE_EXCLUDES_DEFAULT_VALUE + " .groovy"
+        ),
+        NumberOfViews(
+              "com.sun.faces.numberOfViewsInSession",
+              "15"
+        ),
+        NumberOfViewsDeprecated(
+              "com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION",
+              "15",
+              true,
+              NumberOfViews
+        ),
+        NumberOfLogicalViews(
+              "com.sun.faces.numberOfLogicalViews",
+              "15"
+        ),
+        NumberOfLogicalViewsDeprecated(
+              "com.sun.faces.NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION",
+              "15",
+              true,
+              NumberOfLogicalViews
+        ),
+        NumberOfConcurrentFlashUsers(
+              "com.sun.faces.numberOfConcerrentFlashUsers",
+              "5000"
+        ),
+        NumberOfFlashesBetweenFlashReapings(
+              "com.sun.faces.numberOfFlashesBetweenFlashReapings",
+              "5000"
+        ),
+        InjectionProviderClass(
+                "com.sun.faces.injectionProvider",
+                ""
+        ),
+        SerializationProviderClass(
+              "com.sun.faces.serializationProvider",
+              ""
+        ),
+        ResponseBufferSize(
+              "com.sun.faces.responseBufferSize",
+              "1024"
+        ),
+        FaceletsBufferSize(
+              ViewHandler.FACELETS_BUFFER_SIZE_PARAM_NAME,
+              "1024"
+        ),
+        FaceletsBufferSizeDeprecated(
+              "facelets.BUFFER_SIZE",
+              "1024",
+              true,
+              FaceletsBufferSize,
+              new FaceletsConfigParamLoggingStrategy()
+        ),
+        ClientStateWriteBufferSize(
+              "com.sun.faces.clientStateWriteBufferSize",
+              "8192"
+        ),
+        ResourceBufferSize(
+            "com.sun.faces.resourceBufferSize",
+            "2048"
+        ),
+        ExpressionFactory(
+              "com.sun.faces.expressionFactory",
+              "com.sun.el.ExpressionFactoryImpl"
+        ),
+        ClientStateTimeout(
+              "com.sun.faces.clientStateTimeout",
+              ""
+        ),
+        DefaultResourceMaxAge(
+              "com.sun.faces.defaultResourceMaxAge",
+              "604800000" // 7 days
+        ),
+        ResourceUpdateCheckPeriod(
+              "com.sun.faces.resourceUpdateCheckPeriod",
+              "5" // in minutes
+        ),
+        CompressableMimeTypes(
+              "com.sun.faces.compressableMimeTypes",
+              ""
+        ),
+        DisableUnicodeEscaping(
+            "com.sun.faces.disableUnicodeEscaping",
+            "auto"
+        ),
+        FaceletsDefaultRefreshPeriod(
+              ViewHandler.FACELETS_REFRESH_PERIOD_PARAM_NAME,
+              "2"
+        ),
+        FaceletsDefaultRefreshPeriodDeprecated(
+              "facelets.REFRESH_PERIOD",
+              "2",
+              true,
+              FaceletsDefaultRefreshPeriod,
+              new FaceletsConfigParamLoggingStrategy()
+        ),
+        FaceletsResourceResolver(
+              ResourceResolver.FACELETS_RESOURCE_RESOLVER_PARAM_NAME,
+              ""
+        ),
+        FaceletsResourceResolverDeprecated(
+              "facelets.RESOURCE_RESOLVER",
+              "",
+              true,
+              FaceletsResourceResolver,
+              new FaceletsConfigParamLoggingStrategy()
+        ),
+         FaceletsViewMappings(
+              ViewHandler.FACELETS_VIEW_MAPPINGS_PARAM_NAME,
+              ""
+        ),
+        FaceletsViewMappingsDeprecated(
+              "facelets.VIEW_MAPPINGS",
+              "",
+              true,
+              FaceletsViewMappings,
+              new FaceletsConfigParamLoggingStrategy()
+        ),
+        FaceletsLibraries(
+              ViewHandler.FACELETS_LIBRARIES_PARAM_NAME,
+              ""
+        ),
+        FaceletsLibrariesDeprecated(
+              "facelets.LIBRARIES",
+              "",
+              true,
+              FaceletsLibraries,
+              new FaceletsConfigParamLoggingStrategy()
+        ),
+        FaceletsDecorators(
+              ViewHandler.FACELETS_DECORATORS_PARAM_NAME,
+              ""
+        ),
+        FaceletsDecoratorsDeprecated(
+              "facelets.DECORATORS",
+              "",
+              true,
+              FaceletsDecorators,
+              new FaceletsConfigParamLoggingStrategy()
+        ),
+        DuplicateJARPattern(
+            "com.sun.faces.duplicateJARPattern",
+            ""
+        ),
+        ValidateEmptyFields(
+              UIInput.VALIDATE_EMPTY_FIELDS_PARAM_NAME,
+              "auto"
+        ),
+        FullStateSavingViewIds(
+              StateManager.FULL_STATE_SAVING_VIEW_IDS_PARAM_NAME,
+              ""
+        ),
+        AnnotationScanPackages(
+              "com.sun.faces.annotationScanPackages",
+              ""
+        ),
+        FaceletCache(
+            "com.sun.faces.faceletCache",
+            ""
+        ),
+        FaceletsProcessingFileExtensionProcessAs(
+                "",
+                ""
+        ),
+        ClientWindowMode(
+              ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME,
+              "none"
+        ),
+        WebAppResourcesDirectory(
+              ResourceHandler.WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME,
+              "/resources"
+        ),
+        WebAppContractsDirectory(
+              ResourceHandler.WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME,
+              "/contracts"
+        );
+
+
+
+        private String defaultValue;
+        private String qualifiedName;
+        private WebContextInitParameter alternate;
+        private boolean deprecated;
+        private DeprecationLoggingStrategy loggingStrategy;
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+        public String getDefaultValue() {
+
+            return defaultValue;
+
+        }
+
+
+        public String getQualifiedName() {
+
+            return qualifiedName;
+
+        }
+
+
+        DeprecationLoggingStrategy getDeprecationLoggingStrategy() {
+
+            return loggingStrategy;
+
+        }
+
+        
+    // ------------------------------------------------- Package Private Methods
+
+
+        WebContextInitParameter(String qualifiedName,
+                                String defaultValue) {
+
+            this(qualifiedName, defaultValue, false, null);
+
+        }
+
+
+        WebContextInitParameter(String qualifiedName,
+                                String defaultValue,
+                                boolean deprecated,
+                                WebContextInitParameter alternate) {
+
+            this.qualifiedName = qualifiedName;
+            this.defaultValue = defaultValue;
+            this.deprecated = deprecated;
+            this.alternate = alternate;
+
+        }
+
+
+        WebContextInitParameter(String qualifiedName,
+                                String defaultValue,
+                                boolean deprecated,
+                                WebContextInitParameter alternate,
+                                DeprecationLoggingStrategy loggingStrategy) {
+
+            this(qualifiedName, defaultValue, deprecated, alternate);
+            this.loggingStrategy = loggingStrategy;
+
+        }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+        private WebContextInitParameter getAlternate() {
+
+            return alternate;
+
+        }
+
+
+        private boolean isDeprecated() {
+
+            return deprecated;
+
+        }
+
+    }
+
+    /**
+     * <p>An <code>enum</code> of all boolean context initalization parameters
+     * recognized by the implementation.</p>
+     */
+    public enum BooleanWebContextInitParameter {
+
+
+        // implementation note:
+        // if a parameter is to be deprecated,
+        // then the <name>Deprecated enum element
+        // *must* appear after the one that is taking
+        // its place.  The reporting logic depends on this
+
+        DisplayConfiguration(
+              "com.sun.faces.displayConfiguration",
+              false
+        ),
+        ValidateFacesConfigFiles(
+              "com.sun.faces.validateXml",
+              false
+        ),
+        VerifyFacesConfigObjects(
+              "com.sun.faces.verifyObjects",
+              false
+        ),
+        ForceLoadFacesConfigFiles(
+              "com.sun.faces.forceLoadConfiguration",
+              false
+        ),
+        DisableArtifactVersioning(
+              "com.sun.faces.disableVersionTracking",
+              false,
+              true,
+              null
+        ),
+        DisableClientStateEncryption(
+              "com.sun.faces.disableClientStateEncryption",
+              false
+        ),
+        EnableClientStateDebugging(
+              "com.sun.faces.enableClientStateDebugging",
+              false
+        ),
+        EnableHtmlTagLibraryValidator(
+              "com.sun.faces.enableHtmlTagLibValidator",
+              false
+        ),
+        EnableCoreTagLibraryValidator(
+              "com.sun.faces.enableCoreTagLibValidator",
+              false
+        ),
+        PreferXHTMLContentType(
+              "com.sun.faces.preferXHTML",
+              false
+        ),
+        PreferXHTMLContextTypeDeprecated(
+              "com.sun.faces.PreferXHTML",
+              false,
+              true,
+              PreferXHTMLContentType
+        ),
+        CompressViewState(
+              "com.sun.faces.compressViewState",
+              true
+        ),
+        CompressViewStateDeprecated(
+              "com.sun.faces.COMPRESS_STATE",
+              true,
+              true,
+              CompressViewState
+        ),
+        CompressJavaScript(
+            "com.sun.faces.compressJavaScript",
+            true
+        ),
+        ExternalizeJavaScriptDeprecated(
+            "com.sun.faces.externalizeJavaScript",
+            true,
+            true,
+            null
+        ),
+        SendPoweredByHeader(
+              "com.sun.faces.sendPoweredByHeader",
+              false
+        ),
+        EnableJSStyleHiding(
+            "com.sun.faces.enableJSStyleHiding",
+             false
+        ),
+        EnableScriptInAttributeValue(
+            "com.sun.faces.enableScriptsInAttributeValues",
+             true
+        ),
+        WriteStateAtFormEnd(
+            "com.sun.faces.writeStateAtFormEnd",
+            true
+        ),
+        EnableLazyBeanValidation(
+             "com.sun.faces.enableLazyBeanValidation",
+             true
+        ),
+        EnableLoadBundle11Compatibility(
+             "com.sun.faces.enabledLoadBundle11Compatibility",
+             false
+        ),
+        EnableRestoreView11Compatibility(
+              "com.sun.faces.enableRestoreView11Compatibility",
+              false
+        ),
+        SerializeServerState(
+              StateManager.SERIALIZE_SERVER_STATE_PARAM_NAME,
+              false
+        ),
+        SerializeServerStateDeprecated(
+              "com.sun.faces.serializeServerState",
+              false,
+               true,
+                SerializeServerState
+        ),
+        EnableViewStateIdRendering(
+            "com.sun.faces.enableViewStateIdRendering",
+            true
+        ),
+        RegisterConverterPropertyEditors(
+            "com.sun.faces.registerConverterPropertyEditors",
+            false
+        ),
+        EnableGroovyScripting(
+            "com.sun.faces.enableGroovyScripting",
+            false
+        ),
+        DisableFaceletJSFViewHandler(
+              ViewHandler.DISABLE_FACELET_JSF_VIEWHANDLER_PARAM_NAME,
+              false
+        ),
+        DisableDefaultBeanValidator(
+                BeanValidator.DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME,
+                false),
+        DateTimeConverterUsesSystemTimezone(
+              Converter.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE_PARAM_NAME,
+              false
+        ),
+        EnableHttpMethodRestrictionPhaseListener(
+              "com.sun.faces.ENABLE_HTTP_METHOD_RESTRICTION_PHASE_LISTENER",
+              false
+        ),
+        FaceletsSkipComments(
+              ViewHandler.FACELETS_SKIP_COMMENTS_PARAM_NAME,
+              false
+        ),
+        FaceletsSkipCommentsDeprecated(
+              "facelets.SKIP_COMMENTS",
+              false,
+              true, 
+              FaceletsSkipComments,
+              new FaceletsConfigParamLoggingStrategy()
+        ),
+        PartialStateSaving(
+              StateManager.PARTIAL_STATE_SAVING_PARAM_NAME,
+              true
+        ),
+        GenerateUniqueServerStateIds(
+              "com.sun.faces.generateUniqueServerStateIds",
+              true
+        ),
+        AutoCompleteOffOnViewState(
+              "com.sun.faces.autoCompleteOffOnViewState",
+              true
+        ),
+        EnableThreading(
+              "com.sun.faces.enableThreading",
+              false
+        ),
+        AllowTextChildren(
+            "com.sun.faces.allowTextChildren",
+            false
+        ),
+        CacheResourceModificationTimestamp(
+              "com.sun.faces.cacheResourceModificationTimestamp",
+              false
+        ),
+        EnableAgressiveSessionDirtying(
+              "com.sun.faces.enableAgressiveSessionDirtying",
+              false
+        ),
+        EnableDistributable(
+              "com.sun.faces.enableDistributable",
+              false
+        ),
+        EnableMissingResourceLibraryDetection(
+              "com.sun.faces.enableMissingResourceLibraryDetection",
+              false
+        ),
+        DisableIdUniquenessCheck(
+            "com.sun.faces.disableIdUniquenessCheck",
+            false),
+        EnableTransitionTimeNoOpFlash(
+                "com.sun.faces.enableTransitionTimeNoOpFlash",
+                false),
+        NamespaceParameters(
+            "com.sun.faces.namespaceParameters",
+            false);
+
+        private BooleanWebContextInitParameter alternate;
+
+        private String qualifiedName;
+        private boolean defaultValue;
+        private boolean deprecated;
+        private DeprecationLoggingStrategy loggingStrategy;
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+        public boolean getDefaultValue() {
+
+            return defaultValue;
+
+        }
+
+
+        public String getQualifiedName() {
+
+            return qualifiedName;
+
+        }
+
+
+        DeprecationLoggingStrategy getDeprecationLoggingStrategy() {
+
+            return loggingStrategy;
+
+        }
+
+
+    // ------------------------------------------------- Package Private Methods
+
+
+        BooleanWebContextInitParameter(String qualifiedName,
+                                       boolean defaultValue) {
+
+            this(qualifiedName, defaultValue, false, null);
+
+        }
+
+
+        BooleanWebContextInitParameter(String qualifiedName,
+                                       boolean defaultValue,
+                                       boolean deprecated,
+                                       BooleanWebContextInitParameter alternate) {
+
+            this.qualifiedName = qualifiedName;
+            this.defaultValue = defaultValue;
+            this.deprecated = deprecated;
+            this.alternate = alternate;
+
+        }
+
+
+        BooleanWebContextInitParameter(String qualifiedName,
+                                      boolean defaultValue,
+                                      boolean deprecated,
+                                      BooleanWebContextInitParameter alternate,
+                                      DeprecationLoggingStrategy loggingStrategy) {
+
+            this(qualifiedName, defaultValue, deprecated, alternate);
+            this.loggingStrategy = loggingStrategy;
+
+        }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+        private BooleanWebContextInitParameter getAlternate() {
+
+            return alternate;
+
+        }
+
+
+        private boolean isDeprecated() {
+
+            return deprecated;
+
+        }
+
+    }
+
+    /**
+     * <p>An <code>enum</code> of all environment entries (specified in the
+     * web.xml) recognized by the implemenetation.</p>
+     */
+    public enum WebEnvironmentEntry {
+
+
+        ProjectStage(javax.faces.application.ProjectStage.PROJECT_STAGE_JNDI_NAME);
+
+        private static final String JNDI_PREFIX = "java:comp/env/";
+        private String qualifiedName;
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+         public String getQualifiedName() {
+
+            return qualifiedName;
+
+        }
+
+
+    // ------------------------------------------------- Package Private Methods
+
+
+        WebEnvironmentEntry(String qualifiedName) {
+
+            if (qualifiedName.startsWith(JNDI_PREFIX)) {
+                this.qualifiedName = qualifiedName;
+            } else {
+                this.qualifiedName = JNDI_PREFIX + qualifiedName;
+            }
+
+        }
+
+    }
+
+    /**
+     * <p>An <code>enum</code> of all possible values for the <code>disableUnicodeEscaping</code>
+     * configuration parameter.</p>
+     */
+    public enum DisableUnicodeEscaping {
+        True("true"),
+        False("false"),
+        Auto("auto");
+
+        private final String value;
+
+        DisableUnicodeEscaping(String value) {
+            this.value = value;
+        }
+
+        public static DisableUnicodeEscaping getByValue(String value)
+        {
+            for (DisableUnicodeEscaping disableUnicodeEscaping : DisableUnicodeEscaping.values()) {
+                if (disableUnicodeEscaping.value.equals(value)) {
+                    return disableUnicodeEscaping;
+                }
+            }
+
+            return null;
+        }
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private interface DeprecationLoggingStrategy {
+
+        boolean shouldBeLogged(WebConfiguration configuration);
+
+    }
+
+
+    private static class FaceletsConfigParamLoggingStrategy implements DeprecationLoggingStrategy {
+
+        public boolean shouldBeLogged(WebConfiguration configuration) {
+            return !configuration.isOptionEnabled(BooleanWebContextInitParameter.DisableFaceletJSFViewHandler);
+        }
+
+    } // END FaceletsConfigParamLoggingStrategy
+
+
+    private interface DeferredLoggingAction {
+
+        void log();
+
+    } // END DeferredLogginAction
+
+
+    private class DeferredParameterLoggingAction implements DeferredLoggingAction {
+
+        private WebContextInitParameter parameter;
+        private Level loggingLevel;
+        private String logKey;
+        private Object[] params;
+
+
+        DeferredParameterLoggingAction(WebContextInitParameter parameter,
+                                       Level loggingLevel,
+                                       String logKey,
+                                       Object[] params) {
+
+            this.parameter = parameter;
+            this.loggingLevel = loggingLevel;
+            this.logKey = logKey;
+            this.params = params;
+
+        }
+
+        public void log() {
+
+            if (WebConfiguration.LOGGER.isLoggable(loggingLevel)) {
+                DeprecationLoggingStrategy strategy = parameter.getDeprecationLoggingStrategy();
+                if (strategy != null && strategy.shouldBeLogged(WebConfiguration.this)) {
+                    WebConfiguration.LOGGER.log(loggingLevel, logKey, params);
+                }
+            }
+
+        }
+
+    } // END DeferredParameterLogginAction
+
+
+    private class DeferredBooleanParameterLoggingAction implements DeferredLoggingAction {
+
+        private BooleanWebContextInitParameter parameter;
+        private Level loggingLevel;
+        private String logKey;
+        private Object[] params;
+
+        DeferredBooleanParameterLoggingAction(BooleanWebContextInitParameter parameter,
+                                              Level loggingLevel,
+                                              String logKey,
+                                              Object[] params) {
+            this.parameter = parameter;
+            this.loggingLevel = loggingLevel;
+            this.logKey = logKey;
+            this.params = params;
+        }
+
+        public void log() {
+
+            if (WebConfiguration.LOGGER.isLoggable(loggingLevel)) {
+                DeprecationLoggingStrategy strategy = parameter.getDeprecationLoggingStrategy();
+                if (strategy != null && strategy.shouldBeLogged(WebConfiguration.this)) {
+                    WebConfiguration.LOGGER.log(loggingLevel, logKey, params);
+                }
+            }
+
+        }
+
+    } // END DeferredBooleanParameterLoggingAction
+
+} // END WebConfiguration
diff --git a/com/sun/faces/config/configprovider/BaseWebConfigResourceProvider.java b/com/sun/faces/config/configprovider/BaseWebConfigResourceProvider.java
new file mode 100644
index 0000000..b47c808
--- /dev/null
+++ b/com/sun/faces/config/configprovider/BaseWebConfigResourceProvider.java
@@ -0,0 +1,142 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.configprovider;
+
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Set;
+import java.util.LinkedHashSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.servlet.ServletContext;
+import javax.faces.FacesException;
+
+import com.sun.faces.config.WebConfiguration;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.JavaxFacesConfigFiles;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.spi.ConfigurationResourceProvider;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+/**
+ * 
+ */
+public abstract class BaseWebConfigResourceProvider implements
+      ConfigurationResourceProvider {
+
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+
+    // ------------------------------ Methods from ConfigurationResourceProvider
+
+
+    public Collection<URI> getResources(ServletContext context) {
+
+        WebConfiguration webConfig = WebConfiguration.getInstance(context);
+        String paths = webConfig.getOptionValue(getParameter());
+        Set<URI> urls = new LinkedHashSet<URI>(6);
+        if (paths != null) {
+            for (String token : Util.split(context, paths.trim(), getSeparatorRegex())) {
+                String path = token.trim();
+                if (!isExcluded(path) && path.length() != 0) {
+                    URI u = getContextURLForPath(context, path);
+                    if (u != null) {
+                        urls.add(u);
+                    } else {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING,
+                                       "jsf.config.web_resource_not_found",
+                                       new Object[] { path, JavaxFacesConfigFiles.getQualifiedName() });
+                        }
+                    }
+                }
+
+            }
+        }
+
+        return urls;
+        
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected abstract WebContextInitParameter getParameter();
+
+    protected abstract String[] getExcludedResources();
+
+    protected abstract String getSeparatorRegex();
+
+
+    protected URI getContextURLForPath(ServletContext context, String path) {
+
+        URI result = null;
+        try {
+            URL url = context.getResource(path);
+            if (null != url) {
+                String urlString = url.toExternalForm();
+                urlString = urlString.replaceAll(" ", "%20");
+                result = new URI(urlString);            
+            }
+        } catch (MalformedURLException mue) {
+            throw new FacesException(mue);
+        } catch (URISyntaxException use) {
+            throw new FacesException(use);
+        }
+        return result;
+
+    }
+
+
+    protected boolean isExcluded(String path) {
+
+        return (Arrays.binarySearch(getExcludedResources(), path) >= 0);
+
+    }
+
+}
diff --git a/com/sun/faces/config/configprovider/MetaInfFaceletTaglibraryConfigProvider.java b/com/sun/faces/config/configprovider/MetaInfFaceletTaglibraryConfigProvider.java
new file mode 100644
index 0000000..de80751
--- /dev/null
+++ b/com/sun/faces/config/configprovider/MetaInfFaceletTaglibraryConfigProvider.java
@@ -0,0 +1,172 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.configprovider;
+
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Set;
+import java.io.IOException;
+
+import javax.servlet.ServletContext;
+import javax.faces.FacesException;
+
+import com.sun.faces.facelets.util.Classpath;
+import com.sun.faces.util.Util;
+import com.sun.faces.spi.ConfigurationResourceProvider;
+import java.net.URI;
+
+/**
+ *
+ */
+public class MetaInfFaceletTaglibraryConfigProvider implements
+      ConfigurationResourceProvider {
+
+    private static final String SUFFIX = ".taglib.xml";
+    private static final String WEB_INF_CLASSES =
+          "/WEB-INF/classes/META-INF";
+
+    /**
+     * Array of taglib.xml files included with Facelets 1.1.x.  If they are
+     * on the classpath, we don't want to process them.
+     */
+    private static final String[] FACELET_CONFIG_FILES = {
+        "META-INF/jsf-core.taglib.xml",
+        "META-INF/jsf-html.taglib.xml",
+        "META-INF/jsf-ui.taglib.xml",
+        "META-INF/jstl-core.taglib.xml",
+        "META-INF/jstl-fn.taglib.xml"
+    };
+
+    private static final String[] BUILT_IN_TAGLIB_XML_FILES = {
+        "META-INF/mojarra_ext.taglib.xml"
+        
+    };
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    public Collection<URI> getResources(ServletContext context) {
+
+        try {
+            URL[] externalTaglibUrls = Classpath.search(Util.getCurrentLoader(this),
+                                          "META-INF/",
+                                          SUFFIX);
+            URL[] builtInTaglibUrls = new URL[BUILT_IN_TAGLIB_XML_FILES.length];
+            ClassLoader runtimeClassLoader = this.getClass().getClassLoader();
+            for (int i = 0; i < BUILT_IN_TAGLIB_XML_FILES.length; i++) {
+                builtInTaglibUrls[i] = runtimeClassLoader.getResource(BUILT_IN_TAGLIB_XML_FILES[i]);
+            }
+            URL[] urls = new URL[externalTaglibUrls.length + builtInTaglibUrls.length];
+            System.arraycopy(externalTaglibUrls, 0, urls, 0, externalTaglibUrls.length);
+            System.arraycopy(builtInTaglibUrls, 0, urls, externalTaglibUrls.length, builtInTaglibUrls.length);
+            // perform some 'correctness' checking.  If the user has
+            // removed the FaceletViewHandler from their configuration,
+            // but has left the jsf-facelets.jar in the classpath, we
+            // need to ignore the default configuration resouces from
+            // that JAR.
+            List<URI> urlsList = pruneURLs(urls);
+
+            // special case for finding taglib files in WEB-INF/classes/META-INF
+            Set paths = context.getResourcePaths(WEB_INF_CLASSES);
+            if (paths != null) {
+                for (Object path : paths) {
+                    String p = path.toString();
+                    if (p.endsWith(".taglib.xml")) {
+                        try {
+                            urlsList.add(new URI(context.getResource(p).toExternalForm()));
+                        } catch (URISyntaxException ex) {
+                            throw new FacesException(ex);
+                        }
+                    }
+                }
+            }
+            return urlsList;
+        } catch (IOException ioe) {
+            throw new FacesException("Error searching classpath from facelet-taglib documents", ioe);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private List<URI> pruneURLs(URL[] urls) {
+
+        List<URI> ret = null;
+        if (urls != null && urls.length > 0) {
+            for (URL url : urls) {
+                String u = url.toString();
+                boolean found = false;
+                for (String excludeName : FACELET_CONFIG_FILES) {
+                    if (u.contains(excludeName)) {
+                        found = true;
+                        break;
+                    }
+                }
+                if (!found) {
+                    if (ret == null) {
+                        ret = new ArrayList<URI>();
+                    }
+                    try {
+                        String urlString = url.toExternalForm();
+                        urlString = urlString.replaceAll(" ", "%20");
+                        ret.add(new URI(urlString));
+                    } catch (URISyntaxException ex) {
+                        throw new FacesException(ex);
+                    }
+                }
+            }
+        }
+
+        if (ret == null) {
+            ret = Collections.emptyList();
+        }
+        return ret;
+
+    }
+
+
+}
diff --git a/com/sun/faces/config/configprovider/MetaInfFacesConfigResourceProvider.java b/com/sun/faces/config/configprovider/MetaInfFacesConfigResourceProvider.java
new file mode 100644
index 0000000..7a3b82f
--- /dev/null
+++ b/com/sun/faces/config/configprovider/MetaInfFacesConfigResourceProvider.java
@@ -0,0 +1,188 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.configprovider;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.util.Classpath;
+import com.sun.faces.spi.ConfigurationResourceProvider;
+import java.net.URISyntaxException;
+
+import javax.faces.FacesException;
+import javax.servlet.ServletContext;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.Collection;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+/**
+ *
+ */
+public class MetaInfFacesConfigResourceProvider implements
+      ConfigurationResourceProvider {
+
+    /**
+     * <p>This <code>Pattern</code> will pick the the JAR file name if present
+     * within a URL.</p>
+     */
+    private static final Pattern JAR_PATTERN = Pattern.compile(".*/(\\S*\\.jar).*");
+
+    /**
+     * <p>The resource path for faces-config files included in the
+     * <code>META-INF</code> directory of JAR files.</p>
+     */
+    private static final String META_INF_RESOURCES =
+         "META-INF/faces-config.xml";
+
+    private static final String WEB_INF_CLASSES =
+          "/WEB-INF/classes/META-INF";
+
+
+    // ------------------------------ Methods From ConfigurationResourceProvider
+
+
+    /**
+     * @see com.sun.faces.spi.ConfigurationResourceProvider#getResources(javax.servlet.ServletContext)
+     */
+    public Collection<URI> getResources(ServletContext context) {
+
+        WebConfiguration webConfig = WebConfiguration.getInstance(context);
+        String duplicateJarPattern = webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.DuplicateJARPattern);
+        Pattern duplicatePattern = null;
+        if (duplicateJarPattern != null) {
+            duplicatePattern = Pattern.compile(duplicateJarPattern);
+        }
+        SortedMap<String, Set<URI>> sortedJarMap = new TreeMap<String, Set<URI>>();
+        //noinspection CollectionWithoutInitialCapacity
+        List<URI> unsortedResourceList = new ArrayList<URI>();
+
+        try {
+            for (URI uri : loadURLs(context)) {
+
+                String jarUrl = uri.toString();
+                String jarName = null;
+                Matcher m = JAR_PATTERN.matcher(jarUrl);
+                if (m.matches()) {
+                    jarName = m.group(1);
+                }
+                if (jarName != null) {
+                    if (duplicatePattern != null) {
+                        m = duplicatePattern.matcher(jarName);
+                        if (m.matches()) {
+                            jarName = m.group(1);
+                        }
+                    }
+
+                    Set<URI> uris = sortedJarMap.get(jarName);
+                    if (uris == null) {
+                        uris = new HashSet<URI>();
+                        sortedJarMap.put(jarName, uris);
+                    }
+                    uris.add(uri);
+                } else {
+                    unsortedResourceList.add(0, uri);
+                }
+            }
+        } catch (IOException e) {
+            throw new FacesException(e);
+        }
+        // Load the sorted resources first:
+        List<URI> result =
+              new ArrayList<URI>(sortedJarMap.size() + unsortedResourceList
+                    .size());
+        for (Map.Entry<String, Set<URI>> entry : sortedJarMap.entrySet()) {
+            result.addAll(entry.getValue());
+        }
+        // Then load the unsorted resources
+        result.addAll(unsortedResourceList);
+
+        return result;
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private Collection<URI> loadURLs(ServletContext context) throws IOException {
+
+        Set<URI> urls = new HashSet<URI>();
+        try {
+            for (Enumeration<URL> e = Util.getCurrentLoader(this).getResources(META_INF_RESOURCES); e.hasMoreElements();) {
+                String urlString = e.nextElement().toExternalForm();
+                urlString = urlString.replaceAll(" ", "%20");                
+                urls.add(new URI(urlString));
+            }
+            URL [] urlArray = Classpath.search("META-INF/", ".faces-config.xml");
+            for (URL cur : urlArray) {
+                String urlString = cur.toExternalForm();
+                urlString = urlString.replaceAll(" ", "%20");
+                urls.add(new URI(urlString));
+            }
+            // special case for finding taglib files in WEB-INF/classes/META-INF
+            Set paths = context.getResourcePaths(WEB_INF_CLASSES);
+            if (paths != null) {
+                for (Object path : paths) {
+                    String p = path.toString();
+                    if (p.endsWith(".taglib.xml")) {
+                        String urlString = context.getResource(p).toExternalForm();
+                        urlString = urlString.replaceAll(" ", "%20");
+                        urls.add(new URI(urlString));
+                    }
+                }
+            }
+        } catch (URISyntaxException ex) {
+            throw new IOException(ex);
+        }
+        return urls;
+        
+    }
+}
diff --git a/com/sun/faces/config/configprovider/MojarraFacesConfigResourceProvider.java b/com/sun/faces/config/configprovider/MojarraFacesConfigResourceProvider.java
new file mode 100644
index 0000000..a09c942
--- /dev/null
+++ b/com/sun/faces/config/configprovider/MojarraFacesConfigResourceProvider.java
@@ -0,0 +1,93 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.configprovider;
+
+import com.sun.faces.spi.ConfigurationResourceProvider;
+
+import java.net.URI;
+import java.net.URL;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import javax.faces.FacesException;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ */
+public class MojarraFacesConfigResourceProvider implements
+      ConfigurationResourceProvider {
+
+    private static final String JSF_RI_CONFIG =
+         "com/sun/faces/jsf-ri-runtime.xml";
+
+
+    // ------------------------------ Methods from ConfigurationResourceProvider
+
+
+    /**
+     * @see ConfigurationResourceProvider#getResources(javax.servlet.ServletContext)
+     */
+    public Collection<URI> getResources(ServletContext context) {
+
+        List<URI> list = new ArrayList<URI>(1);
+        // Don't use Util.getCurrentLoader().  This config resource should
+        // be available from the same classloader that loaded this instance.
+        // Doing so allows us to be more OSGi friendly.
+        ClassLoader loader = this.getClass().getClassLoader();
+        try {
+            URL url = loader.getResource(JSF_RI_CONFIG);
+            String urlStr = url.toExternalForm();
+            if (urlStr.contains(" ")) {
+                urlStr = urlStr.replaceAll(" ", "%20");
+            }
+
+            list.add(new URI(urlStr));
+        } catch (URISyntaxException ex) {
+            throw new FacesException(ex);
+        }
+        return list;
+
+    }
+
+}
diff --git a/com/sun/faces/config/configprovider/WebAppFlowConfigResourceProvider.java b/com/sun/faces/config/configprovider/WebAppFlowConfigResourceProvider.java
new file mode 100644
index 0000000..249420c
--- /dev/null
+++ b/com/sun/faces/config/configprovider/WebAppFlowConfigResourceProvider.java
@@ -0,0 +1,139 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.configprovider;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.spi.ConfigurationResourceProvider;
+
+import com.sun.faces.util.FacesLogger;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.servlet.ServletContext;
+
+/**
+ *
+ */
+public class WebAppFlowConfigResourceProvider implements
+      ConfigurationResourceProvider {
+    
+    private static final Logger logger = FacesLogger.CONFIG.getLogger();
+
+    // ------------------------------ Methods from ConfigurationResourceProvider
+
+
+    /**
+     * @see ConfigurationResourceProvider#getResources(javax.servlet.ServletContext)
+     */
+    @Override
+    public Collection<URI> getResources(ServletContext context) {
+
+        List<URI> list = Collections.emptyList();
+        Set<String> allPaths = context.getResourcePaths("/");
+        
+        if (null == allPaths) {
+            return list;
+        }
+        list = null;
+
+        for (String cur : allPaths) {
+            if (!cur.startsWith("/META-INF")) {
+                if (cur.equals("/WEB-INF/")) {
+                    Set<String> webInfPaths = context.getResourcePaths(cur);
+                    if (null != webInfPaths) {
+                        for (String webInfCur : webInfPaths) {
+                            if (!cur.equals("/WEB-INF/classes/") &&
+                                webInfCur.endsWith("/")) {
+                                list = inspectDirectory(context, webInfCur, list);
+                            }
+                        }
+                    }
+                } else if (cur.endsWith("/")) {
+                    list = inspectDirectory(context, cur, list);
+                }
+            }
+        }
+        
+        return (null == list) ? Collections.EMPTY_LIST : list;
+
+    }
+    
+    private List<URI> inspectDirectory(ServletContext context, String toInspect, List<URI> list) {
+        URL curUrl = null;
+        
+        Set<String> allPaths = context.getResourcePaths(toInspect);
+        if (null == allPaths) {
+            return list;
+        }
+        
+        for (String cur : allPaths) {
+            if (cur.endsWith(RIConstants.FLOW_DEFINITION_ID_SUFFIX)) {
+                if (null == list) {
+                    list = new ArrayList<URI>();
+                }
+                try {
+                    curUrl = context.getResource(cur);
+                    list.add(curUrl.toURI());
+                } catch (MalformedURLException ex) {
+                    if (logger.isLoggable(Level.SEVERE)) {
+                        logger.log(Level.SEVERE, "Unable to get resource for {0}" + cur, ex);
+                    }
+                } catch (URISyntaxException use) {
+                    if (logger.isLoggable(Level.SEVERE)) {
+                        logger.log(Level.SEVERE, "Unable to get URI for {0}" + curUrl.toExternalForm(), use);
+                    }
+                    
+                }
+            }
+        }
+        return list;
+    }
+
+}
diff --git a/com/sun/faces/config/configprovider/WebFaceletTaglibResourceProvider.java b/com/sun/faces/config/configprovider/WebFaceletTaglibResourceProvider.java
new file mode 100644
index 0000000..37f115a
--- /dev/null
+++ b/com/sun/faces/config/configprovider/WebFaceletTaglibResourceProvider.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.configprovider;
+
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FaceletsLibraries;
+
+/**
+ *
+ */
+public class WebFaceletTaglibResourceProvider extends BaseWebConfigResourceProvider {
+
+    private static final String SEPARATOR = ";";
+    private static final String[] EXCLUDES = {};
+
+
+    // ------------------------------ Methods from BaseWebConfigResourceProvider
+
+
+    protected WebContextInitParameter getParameter() {
+
+        return FaceletsLibraries;
+
+    }
+
+
+    protected String[] getExcludedResources() {
+
+        return EXCLUDES;
+
+    }
+
+    protected String getSeparatorRegex() {
+
+        return SEPARATOR;
+        
+    }
+}
diff --git a/com/sun/faces/config/configprovider/WebFacesConfigResourceProvider.java b/com/sun/faces/config/configprovider/WebFacesConfigResourceProvider.java
new file mode 100644
index 0000000..d37c67a
--- /dev/null
+++ b/com/sun/faces/config/configprovider/WebFacesConfigResourceProvider.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.configprovider;
+
+import java.net.URI;
+import java.util.Collection;
+
+import javax.servlet.ServletContext;
+
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.JavaxFacesConfigFiles;
+
+/**
+ *
+ */
+public class WebFacesConfigResourceProvider extends BaseWebConfigResourceProvider {
+
+
+    /**
+     * <p>The resource path for the faces configuration in the
+     * <code>WEB-INF</code> directory of an application.</p>
+     */
+    private static final String WEB_INF_RESOURCE =
+         "/WEB-INF/faces-config.xml";
+
+    private static final String[] EXCLUDES = { WEB_INF_RESOURCE };
+    private static final String SEPARATORS = ",|;";
+
+
+    // ------------------------------ Methods from ConfigurationResourceProvider
+
+
+    /**
+     * @see com.sun.faces.spi.ConfigurationResourceProvider#getResources(javax.servlet.ServletContext)
+     */
+    public Collection<URI> getResources(ServletContext context) {
+
+        Collection<URI> urls = super.getResources(context);
+
+        // Step 5, parse "/WEB-INF/faces-config.xml" if it exists
+        URI webFacesConfig = getContextURLForPath(context, WEB_INF_RESOURCE);
+        if (webFacesConfig != null) {
+            urls.add(webFacesConfig);
+        }
+
+        // PENDING (rlubke,driscoll) this is a temporary measure to prevent
+        // having to find the web-based configuration resources twice
+        context.setAttribute("com.sun.faces.webresources", urls);
+
+        return urls;
+        
+    }
+
+
+    // ------------------------------ Methods from BaseWebConfigResourceProvider
+
+
+    protected WebContextInitParameter getParameter() {
+
+        return JavaxFacesConfigFiles;
+
+    }
+
+    
+    protected String[] getExcludedResources() {
+
+        return EXCLUDES;
+
+    }
+
+    protected String getSeparatorRegex() {
+        return SEPARATORS;
+    }
+}
diff --git a/com/sun/faces/config/processor/AbstractConfigProcessor.java b/com/sun/faces/config/processor/AbstractConfigProcessor.java
new file mode 100644
index 0000000..97d6f82
--- /dev/null
+++ b/com/sun/faces/config/processor/AbstractConfigProcessor.java
@@ -0,0 +1,495 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.ApplicationResourceBundle;
+import com.sun.faces.application.ApplicationInstanceFactoryMetadataMap;
+import com.sun.faces.application.annotation.AnnotationManager;
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.ConfigManager;
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import com.sun.faces.util.ReflectionUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.scripting.groovy.RendererProxy;
+import com.sun.faces.scripting.groovy.NavigationHandlerProxy;
+import com.sun.faces.scripting.groovy.ELResolverProxy;
+import com.sun.faces.scripting.groovy.PhaseListenerProxy;
+import com.sun.faces.scripting.groovy.ViewHandlerProxy;
+import com.sun.faces.scripting.groovy.ActionListenerProxy;
+import com.sun.faces.spi.InjectionProvider;
+import com.sun.faces.spi.InjectionProviderException;
+import com.sun.faces.util.FacesLogger;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import javax.faces.FactoryFinder;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionListener;
+import javax.faces.event.PhaseListener;
+import javax.faces.render.Renderer;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.NavigationHandler;
+import javax.faces.application.ViewHandler;
+import javax.el.ELResolver;
+import javax.servlet.ServletContext;
+
+import java.lang.reflect.Constructor;
+import java.lang.annotation.Annotation;
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.FacesException;
+import javax.faces.application.ProjectStage;
+
+
+/**
+ * <p>
+ *   This is the base <code>ConfigProcessor</code> that all concrete
+ *   <code>ConfigProcessor</code> implementations should extend.
+ * </p> 
+ */
+public abstract class AbstractConfigProcessor implements ConfigProcessor {
+
+
+    private ConfigProcessor nextProcessor;  
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    // -------------------------------------------- Methods from ConfigProcessor
+    
+    public AbstractConfigProcessor() {
+    }
+
+    private ApplicationInstanceFactoryMetadataMap<String,Object> getClassMetadataMap(ServletContext sc) {
+        ApplicationInstanceFactoryMetadataMap<String,Object> classMetadataMap = 
+                (ApplicationInstanceFactoryMetadataMap<String,Object>) sc.getAttribute(getClassMetadataMapKey());
+        if (null == classMetadataMap) {
+            classMetadataMap = new ApplicationInstanceFactoryMetadataMap(new ConcurrentHashMap<String, Object>());
+            sc.setAttribute(getClassMetadataMapKey(), classMetadataMap);
+        }
+        
+        return classMetadataMap;
+    }
+
+    @Override
+    public void initializeClassMetadataMap(ServletContext sc) {
+        getClassMetadataMap(sc);
+    }
+    
+    protected String getClassMetadataMapKey() {
+        return this.getClass().getName() + CLASS_METADATA_MAP_KEY_SUFFIX;
+    }
+    
+    private static final String CLASS_METADATA_MAP_KEY_SUFFIX = ".METADATA";
+
+    /**
+     * @see ConfigProcessor#setNext(ConfigProcessor)
+     */
+    public void setNext(ConfigProcessor nextProcessor) {
+
+        this.nextProcessor = nextProcessor;
+        
+    }
+    
+    @Override
+    public ConfigProcessor getNext() {
+        return this.nextProcessor;
+    }
+    
+
+    /**
+     * @see ConfigProcessor#invokeNext(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void invokeNext(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        if (nextProcessor != null) {
+            nextProcessor.process(sc, documentInfos);
+        }
+        
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * @return return the Application instance for this context.
+     */
+    protected Application getApplication() {
+
+        ApplicationFactory afactory = (ApplicationFactory)
+             FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return afactory.getApplication();
+
+    }
+
+
+    /**
+     * <p>Return the text of the specified <code>Node</code>,
+     * if any.
+     * @param node the <code>Node</code>
+     * @return the text of the <code>Node</code>  If the length
+     *  of the text is zero, this method will return <code>null</code>
+     */
+    protected String getNodeText(Node node) {
+
+        String res = null;
+        if (node != null) {
+            res = node.getTextContent();
+            if (res != null) {
+                res = res.trim();
+            }
+        }
+
+        return ((res != null && res.length() != 0) ? res : null);
+
+    }
+
+
+    /**
+     * @return a <code>Map</code> of of textual values keyed off the values
+     * of any lang or xml:lang attributes specified on an attribute.  If no
+     * such attribute exists, then the key {@link ApplicationResourceBundle#DEFAULT_KEY}
+     * will be used (i.e. this represents the default Locale).
+     * @param list a list of nodes representing textual elements such as
+     *  description or display-name     
+     */
+    protected Map<String, String> getTextMap(List<Node> list) {
+
+        if (list != null && !list.isEmpty()) {
+            int len = list.size();
+            HashMap<String, String> names =
+                    new HashMap<String, String>(len, 1.0f);
+            for (int i = 0; i < len; i++) {
+                Node node = list.get(i);
+                String textValue = getNodeText(node);
+                if (textValue != null) {
+                    if (node.hasAttributes()) {
+                        NamedNodeMap attributes = node
+                                .getAttributes();
+                        String lang
+                                = getNodeText(attributes.getNamedItem(
+                                     "lang"));
+                        if (lang == null) {
+                            lang =
+                                    getNodeText(attributes.getNamedItem(
+                                         "xml:lang"));
+                        }
+                        if (lang != null) {
+                            names.put(lang, textValue);
+                        } else {                                                     
+                            names.put(ApplicationResourceBundle.DEFAULT_KEY,
+                                      textValue);
+                        }
+                    } else {
+                        names.put(ApplicationResourceBundle.DEFAULT_KEY,
+                                  textValue);
+                    }
+                }
+            }
+
+            return names;
+        }
+
+        return null;
+
+    }
+
+    protected Class<?> findRootType(ServletContext sc, String source,
+                                    Node sourceNode,
+                                    Class<?>[] ctorArguments) {
+
+        try {
+            Class<?> sourceClass = loadClass(sc, source, this, null);
+            for (Class<?> ctorArg : ctorArguments) {
+                if (ReflectionUtils.lookupConstructor(sourceClass, ctorArg) != null) {
+                    return ctorArg;
+                }
+            }
+        } catch (ClassNotFoundException cnfe) {
+            throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Unable to find class ''{0}''",
+                                                        source), sourceNode),
+                                                        cnfe);
+        }
+
+        return null;
+    }
+
+
+    protected Object createInstance(ServletContext sc, String className, Node source) {
+        return createInstance(sc, className, null, null, source);
+    }
+
+    protected Object createInstance(ServletContext sc, String className,
+                                    Class rootType,
+                                    Object root,
+                                    Node source) {
+        Class clazz;
+        Object returnObject = null;
+        if (className != null) {
+            try {
+                clazz = loadClass(sc, className, returnObject, null);
+                if (clazz != null) {
+                    if (isDevModeEnabled(sc)) {
+                        Class<?>[] interfaces = clazz.getInterfaces();
+                        if (interfaces != null) {
+                            for (Class<?> c : interfaces) {
+                                if ("groovy.lang.GroovyObject".equals(c.getName())) {
+                                    // all groovy classes will implement this interface
+                                    returnObject = createScriptProxy(rootType, className, root);
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    if (returnObject == null) {
+                        // Look for an adapter constructor if we've got
+                        // an object to adapt
+                        if ((rootType != null) && (root != null)) {
+                            Constructor construct =
+                                  ReflectionUtils.lookupConstructor(
+                                        clazz,
+                                        rootType);
+                            if (construct != null) {
+                                returnObject = construct.newInstance(root);
+                            }
+                        }
+                    }
+                    if (clazz != null && returnObject == null) {
+                        returnObject = clazz.newInstance();
+                    }
+                    
+                    ApplicationInstanceFactoryMetadataMap<String,Object>
+                            classMetadataMap = getClassMetadataMap(sc);
+
+                    if (classMetadataMap.hasAnnotations(className)) {
+                        InjectionProvider injectionProvider = (InjectionProvider) FacesContext.getCurrentInstance().getAttributes().get(ConfigManager.INJECTION_PROVIDER_KEY);
+
+                        try {
+                            injectionProvider.invokePostConstruct(returnObject);
+                        } catch (InjectionProviderException ex) {
+                            LOGGER.log(Level.SEVERE, "Unable to invoke @PostConstruct annotated method on instance " + className, ex);
+                            throw new FacesException(ex);
+                        }
+
+                        try {
+                            injectionProvider.inject(returnObject);
+                        } catch (InjectionProviderException ex) {
+                            LOGGER.log(Level.SEVERE, "Unable to inject instance" + className, ex);
+                            throw new FacesException(ex);
+                        }
+                    }
+                    
+                }
+
+            } catch (ClassNotFoundException cnfe) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Unable to find class ''{0}''",
+                                                        className),
+                                   source),
+                                   cnfe);
+            } catch (NoClassDefFoundError ncdfe) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Class ''{0}'' is missing a runtime dependency: {1}",
+                                                        className,
+                                                        ncdfe.toString()),
+                                   source),
+                                   ncdfe);
+            } catch (ClassCastException cce) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Class ''{0}'' is not an instance of ''{1}''",
+                                                        className,
+                                                        rootType),
+                                   source),
+                                   cce);
+            } catch (Exception e) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Unable to create a new instance of ''{0}'': {1}",
+                                                        className,
+                                                        e.toString()),
+                                   source), e);
+            }
+        }
+
+        return returnObject;
+        
+    }
+
+
+    protected Class<?> loadClass(ServletContext sc, String className,
+                                 Object fallback,
+                                 Class<?> expectedType)
+    throws ClassNotFoundException {
+        ApplicationInstanceFactoryMetadataMap<String,Object>
+                classMetadataMap = getClassMetadataMap(sc);
+
+        Class<?> clazz = (Class<?>) classMetadataMap.get(className);
+        if (null == clazz) {
+            try {
+                clazz =  Util.loadClass(className, fallback);
+                if (!this.isDevModeEnabled(sc)) {
+                    classMetadataMap.put(className, clazz);    
+                } else {
+                    classMetadataMap.scanForAnnotations(className, clazz);
+                }
+                assert (clazz != null);
+            } catch (Exception e) {
+                throw new FacesException(e.getMessage(), e);
+            }
+            
+        }
+        if (expectedType != null && !expectedType.isAssignableFrom(clazz)) {
+                throw new ClassCastException();
+        }
+        return clazz;
+        
+    }
+
+
+    protected void processAnnotations(Class<? extends Annotation> annotationType) {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        ApplicationAssociate associate =
+              ApplicationAssociate.getInstance(ctx.getExternalContext());
+        AnnotationManager manager = associate.getAnnotationManager();
+        manager.applyConfigAnnotations(ctx,
+                                      annotationType,
+                                      ConfigManager.getAnnotatedClasses(ctx).get(annotationType));
+        
+    }
+
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private String buildMessage(String cause, Node source) {
+
+        return MessageFormat.format("\n  Source Document: {0}\n  Cause: {1}",
+                                    source.getOwnerDocument().getDocumentURI(),
+                                    cause);
+
+    }
+
+
+    private Object createScriptProxy(Class<?> artifactType,
+                                     String scriptName,
+                                     Object root) {
+        if (Renderer.class.equals(artifactType)) {
+            return new RendererProxy(scriptName);
+        } else if (PhaseListener.class.equals(artifactType)) {
+            return new PhaseListenerProxy(scriptName);
+        } else if (ViewHandler.class.equals(artifactType)) {
+            return new ViewHandlerProxy(scriptName, (ViewHandler) root);
+        } else if (NavigationHandler.class.equals(artifactType)) {
+            return new NavigationHandlerProxy(scriptName, (NavigationHandler) root);
+        } else if (ActionListener.class.equals(artifactType)) {
+            return new ActionListenerProxy(scriptName, (ActionListener) root);
+        } else if (ELResolver.class.equals(artifactType)) {
+            return new ELResolverProxy(scriptName);
+        } else {
+            return null;
+        }
+    }
+
+
+    private boolean isDevModeEnabled(ServletContext sc) {
+        return getProjectStage(sc).equals(ProjectStage.Development);
+    }
+    
+    private ProjectStage getProjectStage(ServletContext sc) {
+        ProjectStage projectStage = null;
+        final String projectStageKey = AbstractConfigProcessor.class.getName() + ".PROJECTSTAGE";
+        projectStage = (ProjectStage) sc.getAttribute(projectStageKey);
+        
+        if (projectStage == null) {
+            WebConfiguration webConfig =
+                  WebConfiguration.getInstance(
+                        FacesContext.getCurrentInstance().getExternalContext());
+            String value = webConfig.getEnvironmentEntry(WebConfiguration.WebEnvironmentEntry.ProjectStage);
+            if (value != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               "ProjectStage configured via JNDI: {0}",
+                               value);
+                }
+            } else {
+                value = webConfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage);
+                if (value != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                               "ProjectStage configured via servlet context init parameter: {0}", 
+                               value);
+                    }
+                }
+            }
+            if (value != null) {
+                try {
+                    projectStage = ProjectStage.valueOf(value);
+                } catch (IllegalArgumentException iae) {
+                    if (LOGGER.isLoggable(Level.INFO)) {
+                        LOGGER.log(Level.INFO,
+                                   "Unable to discern ProjectStage for value {0}.",
+                                   value);
+                    }
+                }
+            }
+            if (projectStage == null) {
+                projectStage = ProjectStage.Production;
+            }
+            sc.setAttribute(projectStageKey, projectStage);
+        }
+        return projectStage;
+
+    }
+    
+
+
+}
diff --git a/com/sun/faces/config/processor/ApplicationConfigProcessor.java b/com/sun/faces/config/processor/ApplicationConfigProcessor.java
new file mode 100644
index 0000000..70d4874
--- /dev/null
+++ b/com/sun/faces/config/processor/ApplicationConfigProcessor.java
@@ -0,0 +1,901 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import javax.naming.InitialContext;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.LinkedHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.el.ELResolver;
+import javax.faces.application.Application;
+import javax.faces.application.ConfigurableNavigationHandler;
+import javax.faces.application.NavigationHandler;
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.VariableResolver;
+import javax.faces.event.ActionListener;
+import javax.faces.event.SystemEventListener;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.NamedEvent;
+import javax.servlet.ServletContext;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.ApplicationResourceBundle;
+import com.sun.faces.el.ChainAwareVariableResolver;
+import com.sun.faces.el.DummyPropertyResolverImpl;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.DocumentInfo;
+
+import java.util.LinkedHashSet;
+import java.util.Map;
+import javax.faces.validator.BeanValidator;
+import javax.validation.Validator;
+import javax.validation.Validation;
+import javax.validation.ValidatorFactory;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/application</code>.
+ * </p>
+ */
+public class ApplicationConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <code>/faces-config/application</code>
+     */
+    private static final String APPLICATION =
+         "application";
+
+    /**
+     * <code>/faces-config/application/action-listener</code>
+     */
+    private static final String ACTION_LISTENER
+         = "action-listener";
+
+    /**
+     * <code>/faces-config/application/default-render-kit-id
+     */
+    private static final String DEFAULT_RENDERKIT_ID
+         = "default-render-kit-id";
+
+    /**
+     * <code>/faces-config/application/default-validators</code>
+     */
+    private static final String DEFAULT_VALIDATORS
+        = "default-validators";
+
+    /**
+     * <code>/faces-config/application/default-validators/validator-id</code>
+     */
+    private static final String VALIDATOR_ID
+        = "validator-id";
+
+    /**
+     * <code>/faces-config/application/message-bundle
+     */
+    private static final String MESSAGE_BUNDLE
+         = "message-bundle";
+
+    /**
+     * <code>/faces-config/application/navigation-handler</code>
+     */
+    private static final String NAVIGATION_HANDLER
+         = "navigation-handler";
+
+    /**
+     * <code>/faces-config/application/view-handler</code>
+     */
+    private static final String VIEW_HANDLER
+         = "view-handler";
+
+    /**
+     * <code>/faces-config/application/state-manager</code>
+     */
+    private static final String STATE_MANAGER
+         = "state-manager";
+
+    /**
+     * <code>/faces-config/application/resource-handler</code>
+     */
+    private static final String RESOURCE_HANDLER
+         = "resource-handler";
+
+    /**
+     * <code>/faces-config/application/el-resolver</code>
+     */
+    private static final String EL_RESOLVER
+         = "el-resolver";
+
+    /**
+     * <code>/faces-config/application/property-resolver</code>
+     */
+    private static final String PROPERTY_RESOLVER
+         = "property-resolver";
+
+    /**
+     * <code>/faces-config/application/variable-resolver</code>
+     */
+    private static final String VARIABLE_RESOLVER
+         = "variable-resolver";
+
+    /**
+     * <code>/faces-config/application/locale-config/default-locale</code>
+     */
+    private static final String DEFAULT_LOCALE
+         = "default-locale";
+
+    /**
+     * <code>/faces-config/application/locale-config/supported-locale</code>
+     */
+    private static final String SUPPORTED_LOCALE
+         = "supported-locale";
+
+    /**
+     * <code>/faces-config/application/resource-bundle</code>
+     */
+    private static final String RESOURCE_BUNDLE
+         = "resource-bundle";
+
+    /**
+     * <code>/faces-config/application/resource-bundle/base-name</code>
+     */
+    private static final String BASE_NAME
+         = "base-name";
+
+    /**
+     * <code>/faces-config/application/resource-bundle/var</code>
+     */
+    private static final String VAR
+         = "var";
+
+    /**
+     * <code>/faces-config/application/resource-bundle/description</code>
+     */
+    private static final String RES_DESCRIPTIONS
+         = "description";
+
+    /**
+     * <code>/faces-config/application/resource-bundle/display-name</code>
+     */
+    private static final String RES_DISPLAY_NAMES
+         = "display-name";
+
+    /**
+     * <code>/faces-config/application/system-event-listener</code>
+     */
+    private static final String SYSTEM_EVENT_LISTENER
+         = "system-event-listener";
+
+    /**
+     * <code>/faces-config/application/system-event-listener/system-event-listener-class</code>
+     */
+    private static final String SYSTEM_EVENT_LISTENER_CLASS
+         = "system-event-listener-class";
+
+    /**
+     * <code>/faces-config/application/system-event-listener/system-event-class</code>
+     */
+    private static final String SYSTEM_EVENT_CLASS
+         = "system-event-class";
+
+    /**
+     * <code>/faces-config/application/system-event-listener/source-class</code>
+     */
+    private static final String SOURCE_CLASS
+         = "source-class";
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        Application app = getApplication();
+        ApplicationAssociate associate =
+              ApplicationAssociate.getInstance(
+                    FacesContext.getCurrentInstance().getExternalContext());
+        LinkedHashMap<String,Node> viewHandlers = new LinkedHashMap<String,Node>();
+        LinkedHashSet<String> defaultValidatorIds = null;
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format("Processing application elements for document: ''{0}''",
+                                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace =
+                 document.getDocumentElement().getNamespaceURI();
+            NodeList applicationElements = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, APPLICATION);
+            if (applicationElements != null
+                && applicationElements.getLength() > 0) {
+                for (int a = 0, asize = applicationElements.getLength();
+                     a < asize;
+                     a++) {
+                    Node appElement = applicationElements.item(a);
+                    NodeList children = ((Element) appElement)
+                         .getElementsByTagNameNS(namespace, "*");
+                    if (children != null && children.getLength() > 0) {
+                        for (int c = 0, csize = children.getLength();
+                             c < csize;
+                             c++) {
+                            Node n = children.item(c);
+                            if (MESSAGE_BUNDLE.equals(n.getLocalName())) {
+                                setMessageBundle(app, n);
+                            } else if (DEFAULT_RENDERKIT_ID.equals(n.getLocalName())) {
+                                setDefaultRenderKitId(app, n);
+                            } else if (ACTION_LISTENER.equals(n.getLocalName())) {
+                                addActionListener(sc, app, n);
+                            } else if (NAVIGATION_HANDLER.equals(n.getLocalName())) {
+                                setNavigationHandler(sc, app, n);
+                            } else if (VIEW_HANDLER.equals(n.getLocalName())) {
+                                String viewHandler = getNodeText(n);
+                                if (viewHandler != null) {
+                                    viewHandlers.put(viewHandler, n);
+                                }
+                            } else if (STATE_MANAGER.equals(n.getLocalName())) {
+                                setStateManager(sc, app, n);
+                            } else if (EL_RESOLVER.equals(n.getLocalName())) {
+                                addELResolver(sc, associate, n);
+                            } else if (PROPERTY_RESOLVER.equals(n.getLocalName())) {
+                                addPropertyResolver(sc, associate, n);
+                            } else if (VARIABLE_RESOLVER.equals(n.getLocalName())) {
+                                addVariableResolver(sc, associate, n);
+                            } else if (DEFAULT_LOCALE.equals(n.getLocalName())) {
+                                setDefaultLocale(app, n);
+                            } else if (SUPPORTED_LOCALE.equals(n.getLocalName())) {
+                                addSupportedLocale(app, n);
+                            } else if (RESOURCE_BUNDLE.equals(n.getLocalName())) {
+                                addResouceBundle(associate, n);
+                            } else if (RESOURCE_HANDLER.equals(n.getLocalName())) {
+                                setResourceHandler(sc, app, n);
+                            } else if (SYSTEM_EVENT_LISTENER.equals(n.getLocalName())) {
+                                addSystemEventListener(sc, app, n);
+                            } else if (DEFAULT_VALIDATORS.equals(n.getLocalName())) {
+                                if (defaultValidatorIds == null) {
+                                    defaultValidatorIds = new LinkedHashSet<String>();
+                                } else {
+                                    defaultValidatorIds.clear();
+                                }
+                            } else if (VALIDATOR_ID.equals(n.getLocalName())) {
+                                defaultValidatorIds.add(getNodeText(n));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        registerDefaultValidatorIds(app, defaultValidatorIds);
+
+        // perform any special processing for ViewHandlers...
+        processViewHandlers(sc, app, viewHandlers);
+
+        // process NamedEvent annotations, if any
+        processAnnotations(NamedEvent.class);
+
+        // continue processing...
+        invokeNext(sc, documentInfos);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    /**
+     * If defaultValidatorIds is null, then no <default-validators> element appeared in any configuration file.
+     * In that case, add javax.faces.Bean if Bean Validation is available. If the <default-validators> appeared
+     * at least once, don't add the default (and empty <default-validator> element disabled default validators)
+     */
+    private void registerDefaultValidatorIds(Application application, LinkedHashSet<String> defaultValidatorIds) {
+        if (defaultValidatorIds == null) {
+            defaultValidatorIds = new LinkedHashSet<String>();
+            if (isBeanValidatorAvailable()) {
+                WebConfiguration webConfig = WebConfiguration.getInstance();
+                if (!webConfig.isOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.DisableDefaultBeanValidator)) {
+                    defaultValidatorIds.add(BeanValidator.VALIDATOR_ID);
+                }
+            }
+        }
+
+        for (String validatorId : defaultValidatorIds) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                        MessageFormat.format(
+                        "Calling Application.addDefaultValidatorId({0})",
+                        validatorId));
+            }
+            application.addDefaultValidatorId(validatorId);
+        }
+    }
+
+    static boolean isBeanValidatorAvailable() {
+        
+        boolean result = false;
+        final String beansValidationAvailabilityCacheKey = 
+                "javax.faces.BEANS_VALIDATION_AVAILABLE";
+        Map<String,Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+        
+        if (appMap.containsKey(beansValidationAvailabilityCacheKey)) {
+            result = (Boolean) appMap.get(beansValidationAvailabilityCacheKey);
+        } else {
+            try {
+                Thread.currentThread().getContextClassLoader().loadClass("javax.validation.MessageInterpolator");
+                // Check if the Implementation is available.
+                Object cachedObject = appMap.get(BeanValidator.VALIDATOR_FACTORY_KEY);
+                if(cachedObject instanceof ValidatorFactory) {
+                    result = true;
+                } else {
+                    Context initialContext = null;
+                    try {
+                        initialContext = new InitialContext();
+                    } catch (NoClassDefFoundError nde) {
+                        // on google app engine InitialContext is forbidden to use and GAE throws NoClassDefFoundError 
+                        if (LOGGER.isLoggable(Level.FINE)) {
+                            LOGGER.log(Level.FINE, nde.toString(), nde);
+                        }
+                    } catch (NamingException ne) {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING, ne.toString(), ne);
+                        }
+                    }
+                    
+                    try {
+                        Object validatorFactory = initialContext.lookup("java:comp/ValidatorFactory");
+                        if (null != validatorFactory) {
+                            appMap.put(BeanValidator.VALIDATOR_FACTORY_KEY, validatorFactory);
+                            result = true;
+                        }
+                    } catch (NamingException root) {
+                        if (LOGGER.isLoggable(Level.FINE)) {
+                            String msg = "Could not build a default Bean Validator factory: " 
+                                    + root.getMessage();
+                            LOGGER.fine(msg);                       
+                        }
+                    }
+                    
+                    if (!result) {
+                        try {
+                            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
+                            Validator validator = factory.getValidator();
+                            appMap.put(BeanValidator.VALIDATOR_FACTORY_KEY, factory);
+                            result = true;
+                        } catch(Throwable throwable) {
+                        }
+                    }
+                }
+
+            } catch (Throwable t) { // CNFE or ValidationException or any other
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("Unable to load Beans Validation");
+                }
+            }
+            appMap.put(beansValidationAvailabilityCacheKey, result);
+        }
+        return result;
+    }
+
+    private void setMessageBundle(Application application,
+                                  Node messageBundle) {
+
+        if (messageBundle != null) {
+            String bundle = getNodeText(messageBundle);
+            if (bundle != null) {
+
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format(
+                                    "Calling Application.setMessageBundle({0})",
+                                    bundle));
+                }
+                application.setMessageBundle(bundle);
+            }
+        }
+
+    }
+
+
+    private void setDefaultRenderKitId(Application application,
+                                       Node defaultId) {
+
+        if (defaultId != null) {
+            String id = getNodeText(defaultId);
+            if (id != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format(
+                                    "Calling Application.setDefaultRenderKitId({0})",
+                                    id));
+                }
+                application.setDefaultRenderKitId(id);
+            }
+        }
+
+    }
+
+    private void addActionListener(ServletContext sc, Application application,
+                                   Node actionListener) {
+
+        if (actionListener != null) {
+
+            String listener = getNodeText(actionListener);
+            if (listener != null) {
+                Object instance = createInstance(sc, listener,
+                                                 ActionListener.class,
+                                                 application.getActionListener(),
+                                                 actionListener);
+                if (instance != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Calling Application.setActionListeners({0})",
+                                        listener));
+                    }
+                    application
+                         .setActionListener((ActionListener) instance);
+                }
+            }
+        }
+    }
+
+
+    private void setNavigationHandler(ServletContext sc, Application application,
+                                      Node navigationHandler) {
+
+        if (navigationHandler != null) {
+
+            String handler = getNodeText(navigationHandler);
+            if (handler != null) {
+                Class<?> rootType = findRootType(sc, handler,
+                                                 navigationHandler,
+                                                 new Class[] {
+                                                       ConfigurableNavigationHandler.class,
+                                                       NavigationHandler.class
+                                                     });
+                Object instance = createInstance(sc, handler,
+                                                 ((rootType != null) ? rootType : NavigationHandler.class),
+                                                 application.getNavigationHandler(),
+                                                 navigationHandler);
+                if (instance != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Calling Application.setNavigationHandlers({0})",
+                                        handler));
+                    }
+                    application
+                         .setNavigationHandler((NavigationHandler) instance);
+                }
+            }
+        }
+
+    }
+
+
+    private void setStateManager(ServletContext sc, Application application,
+                                 Node stateManager) {
+
+        if (stateManager != null) {
+            String manager = getNodeText(stateManager);
+            if (manager != null) {
+                Object instance = createInstance(sc, manager,
+                                                 StateManager.class,
+                                                 application.getStateManager(),
+                                                 stateManager);
+                if (instance != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Calling Application.setStateManagers({0})",
+                                        manager));
+                    }
+                    application.setStateManager((StateManager) instance);
+                }
+            }
+        }
+
+    }
+
+    private void setViewHandler(ServletContext sc, Application application,
+                                Node viewHandler) {
+
+        if (viewHandler != null) {
+            String handler = getNodeText(viewHandler);
+            if (handler != null) {
+                Object instance = createInstance(sc, handler,
+                                                 ViewHandler.class,
+                                                 application.getViewHandler(),
+                                                 viewHandler);
+                if (instance != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Calling Application.setViewHandler({0})",
+                                        handler));
+                    }
+                    application.setViewHandler((ViewHandler) instance);
+                }
+            }
+        }
+
+    }
+
+
+    private void addELResolver(ServletContext sc, ApplicationAssociate associate,
+                               Node elResolver) {
+
+        if (elResolver != null) {
+            if (associate != null) {
+                List<ELResolver> resolvers = associate
+                     .getELResolversFromFacesConfig();
+                if (resolvers == null) {
+                    //noinspection CollectionWithoutInitialCapacity
+                    resolvers = new ArrayList<ELResolver>();
+                    associate.setELResolversFromFacesConfig(resolvers);
+                }
+                String elResolverClass = getNodeText(elResolver);
+                if (elResolverClass != null) {
+                    Object elRes = createInstance(sc, elResolverClass,
+                                                  ELResolver.class,
+                                                  null,
+                                                  elResolver);
+                    if (elRes != null) {
+                        if (LOGGER.isLoggable(Level.FINE)) {
+                            LOGGER.log(Level.FINE,
+                                       MessageFormat.format(
+                                            "Adding ''{0}'' to ELResolver chain",
+                                            elResolverClass));
+                        }
+                        resolvers.add((ELResolver) elRes);
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    @SuppressWarnings("deprecation")
+    private void addPropertyResolver(ServletContext sc, ApplicationAssociate associate,
+                                     Node propertyResolver) {
+
+        if (propertyResolver != null) {
+            if (associate != null) {
+                Object resolverImpl = associate.getLegacyPRChainHead();
+                if (resolverImpl == null) {
+                    resolverImpl = new DummyPropertyResolverImpl();
+                }
+
+                String resolver = getNodeText(propertyResolver);
+                if (resolver != null) {
+                    resolverImpl = createInstance(sc, resolver,
+                                                  PropertyResolver.class,
+                                                  resolverImpl,
+                                                  propertyResolver);
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Adding ''{0}'' to PropertyResolver chain",
+                                        resolverImpl));
+                    }
+                }
+                if (resolverImpl != null) {
+                    associate
+                         .setLegacyPRChainHead((PropertyResolver) resolverImpl);
+                }
+            }
+        }
+
+    }
+
+
+    @SuppressWarnings("deprecation")
+    private void addVariableResolver(ServletContext sc, ApplicationAssociate associate,
+                                     Node variableResolver) {
+
+        if (variableResolver != null) {
+            if (associate != null) {
+                Object resolverImpl = associate.getLegacyVRChainHead();
+                if (resolverImpl == null) {
+                    resolverImpl = new ChainAwareVariableResolver();
+                }
+                String resolver = getNodeText(variableResolver);
+                if (resolver != null) {
+                    resolverImpl = createInstance(sc, resolver,
+                                                  VariableResolver.class,
+                                                  resolverImpl,
+                                                  variableResolver);
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Adding ''{0}'' to VariableResolver chain",
+                                        resolverImpl));
+                    }
+                }
+                if (resolverImpl != null) {
+                    associate
+                         .setLegacyVRChainHead((VariableResolver) resolverImpl);
+                }
+            }
+        }
+
+    }
+
+
+    private void setDefaultLocale(Application application,
+                                  Node defaultLocale) {
+        if (defaultLocale != null) {
+            String defLocale = getNodeText(defaultLocale);
+            if (defLocale != null) {
+                Locale def = Util.getLocaleFromString(defLocale);
+                if (def != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Setting default Locale to ''{0}''",
+                                        defLocale));
+                    }
+                    application.setDefaultLocale(def);
+                }
+            }
+        }
+    }
+
+
+    private void addSupportedLocale(Application application,
+                                    Node supportedLocale) {
+
+        if (supportedLocale != null) {
+            Set<Locale> sLocales = getCurrentLocales(application);
+            String locString = getNodeText(supportedLocale);
+            if (locString != null) {
+                Locale loc = Util.getLocaleFromString(locString);
+                if (loc != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Adding supported Locale ''{0}''",
+                                        locString));
+                    }
+                    sLocales.add(loc);
+                }
+                application.setSupportedLocales(sLocales);
+            }
+        }
+
+    }
+
+
+
+    private void addResouceBundle(ApplicationAssociate associate,
+                                  Node resourceBundle) {
+
+        if (resourceBundle != null) {
+            NodeList children = resourceBundle.getChildNodes();
+            if (children != null) {
+                String baseName = null;
+                String var = null;
+                List<Node> descriptions = null;
+                List<Node> displayNames = null;
+                for (int i = 0, size = children.getLength(); i < size; i++) {
+                    Node n = children.item(i);
+                    if (n.getNodeType() == Node.ELEMENT_NODE) {
+                        if (BASE_NAME.equals(n.getLocalName())) {
+                            baseName = getNodeText(n);
+                        } else if (VAR.equals(n.getLocalName())) {
+                            var = getNodeText(n);
+                        } else if (RES_DESCRIPTIONS.equals(n.getLocalName())) {
+                            if (descriptions == null) {
+                                descriptions = new ArrayList<Node>(2);
+                            }
+                            descriptions.add(n);
+                        } else if (RES_DISPLAY_NAMES.equals(n.getLocalName())) {
+                            if (displayNames == null) {
+                                displayNames = new ArrayList<Node>(2);
+                            }
+                            displayNames.add(n);
+                        }
+                    }
+                }
+                if ((baseName != null) && (var != null)) {
+                    associate.addResourceBundle(var,
+                                                new ApplicationResourceBundle(
+                                                     baseName,
+                                                     getTextMap(displayNames),
+                                                     getTextMap(descriptions)));
+                }
+            }
+        }
+    }
+
+
+    private Set<Locale> getCurrentLocales(Application application) {
+
+        //noinspection CollectionWithoutInitialCapacity
+        Set<Locale> supportedLocales = new HashSet<Locale>();
+        for (Iterator<Locale> i = application.getSupportedLocales();
+             i.hasNext();) {
+            supportedLocales.add(i.next());
+        }
+        return supportedLocales;
+
+    }
+
+
+    private void setResourceHandler(ServletContext sc, Application application, Node resourceHandler) {
+
+        if (resourceHandler != null) {
+            String handler = getNodeText(resourceHandler);
+            if (handler != null) {
+                Object instance = createInstance(sc, handler,
+                                                 ResourceHandler.class,
+                                                 application.getResourceHandler(),
+                                                 resourceHandler);
+                if (instance != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Calling Application.setResourceHandler({0})",
+                                        handler));
+                    }
+                    application.setResourceHandler((ResourceHandler) instance);
+                }
+            }
+        }
+    }
+
+
+    private void addSystemEventListener(ServletContext sc, Application application,
+                                        Node systemEventListener) {
+
+        NodeList children = systemEventListener.getChildNodes();
+        String listenerClass = null;
+        String eventClass = null;
+        String sourceClass = null;
+        for (int j = 0, len = children.getLength(); j < len; j++) {
+            Node n = children.item(j);
+            if (n.getNodeType() == Node.ELEMENT_NODE) {
+                if (SYSTEM_EVENT_LISTENER_CLASS.equals(n.getLocalName())) {
+                    listenerClass = getNodeText(n);
+                } else if (SYSTEM_EVENT_CLASS.equals(n.getLocalName())) {
+                    eventClass = getNodeText(n);
+                } else if (SOURCE_CLASS.equals(n.getLocalName())) {
+                    sourceClass = getNodeText(n);
+                }
+            }
+        }
+        if (listenerClass != null) {
+            SystemEventListener selInstance = (SystemEventListener)
+                  createInstance(sc, listenerClass,
+                                 SystemEventListener.class,
+                                 null,
+                                 systemEventListener);
+            if (selInstance != null) {
+                try {
+                    // If there is an eventClass, use it, otherwise use
+                    // SystemEvent.class
+                    //noinspection unchecked
+                    Class<? extends SystemEvent> eventClazz;
+                    
+                    if (eventClass != null) {
+                        eventClazz = (Class<? extends SystemEvent>) loadClass(sc, eventClass, this, null);
+                    } else {
+                        eventClazz = SystemEvent.class;
+                    }
+                    
+                    // If there is a sourceClass, use it, otherwise use null
+                    Class sourceClazz =
+                          (sourceClass != null && sourceClass.length() != 0)
+                          ? Util.loadClass(sourceClass, this.getClass())
+                          : null;
+                    application.subscribeToEvent(eventClazz,
+                                                 sourceClazz,
+                                                 selInstance);
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   "Subscribing for event {0} and source {1} using listener {2}",
+                                   new Object[]{
+                                         eventClazz.getName(),
+                                         ((sourceClazz != null) ? sourceClazz
+                                               .getName() : "ANY"),
+                                         selInstance.getClass().getName()
+                                   });
+                    }
+                } catch (ClassNotFoundException cnfe) {
+                    throw new ConfigurationException(cnfe);
+                }
+            }
+        }
+    }
+
+
+    private void processViewHandlers(ServletContext sc, Application app,
+                                     LinkedHashMap<String, Node> viewHandlers) {
+        // take special action on the ViewHandlers that have been
+        // configured for the application.  If any of the ViewHandlers
+        // is the FaceletViewHandler, don't install the 2.0
+        // FaceletViewHandler.  Make the application behave as 1.2
+        // unless they use our ViewHandler
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        if (!webConfig.isOptionEnabled(DisableFaceletJSFViewHandler)) {
+            if (viewHandlers.containsKey("com.sun.facelets.FaceletViewHandler")) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.application.legacy_facelet_viewhandler_detected",
+                               "com.sun.facelets.FaceletViewHandler");
+                }
+                webConfig.overrideContextInitParameter(DisableFaceletJSFViewHandler, true);
+            }
+        }
+        for (Node n : viewHandlers.values()) {
+            setViewHandler(sc, app, n);
+        }
+    }
+
+}
diff --git a/com/sun/faces/config/processor/BehaviorConfigProcessor.java b/com/sun/faces/config/processor/BehaviorConfigProcessor.java
new file mode 100644
index 0000000..f3e6d38
--- /dev/null
+++ b/com/sun/faces/config/processor/BehaviorConfigProcessor.java
@@ -0,0 +1,164 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.config.Verifier;
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.util.FacesLogger;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+import javax.faces.application.Application;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.component.behavior.FacesBehavior;
+import javax.servlet.ServletContext;
+import javax.xml.xpath.XPathExpressionException;
+import java.text.MessageFormat;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/behavior</code>.
+ * </p>
+ */
+public class BehaviorConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <p>/faces-config/behavior</p>
+     */
+    private static final String BEHAVIOR = "behavior";
+
+    /**
+     * <p>/faces-config/behavior/behavior-id</p>
+     */
+    private static final String BEHAVIOR_ID = "behavior-id";
+
+    /**
+     * <p>/faces-config/behavior/behavior-class</p>
+     */
+    private static final String BEHAVIOR_CLASS = "behavior-class";
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        // process annotated Behaviors first as Behaviors configured
+        // via config files take precedence
+        processAnnotations(FacesBehavior.class);
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing behavior elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList behaviors = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, BEHAVIOR);
+            if (behaviors != null && behaviors.getLength() > 0) {
+                addBehaviors(behaviors, namespace);
+            }
+        }
+        invokeNext(sc, documentInfos);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addBehaviors(NodeList behaviors, String namespace)
+    throws XPathExpressionException {
+
+        Application app = getApplication();
+        Verifier verifier = Verifier.getCurrentInstance();
+        for (int i = 0, size = behaviors.getLength(); i < size; i++) {
+            Node behavior = behaviors.item(i);
+
+            NodeList children = ((Element) behavior)
+                 .getElementsByTagNameNS(namespace, "*");
+            String behaviorId = null;
+            String behaviorClass = null;
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+                    if (BEHAVIOR_ID.equals(n.getLocalName())) {
+                        behaviorId = getNodeText(n);
+                    } else if (BEHAVIOR_CLASS.equals(n.getLocalName())) {
+                        behaviorClass = getNodeText(n);
+                    }
+                }
+            }
+
+            if (behaviorId != null && behaviorClass != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format(
+                                    "Calling Application.addBehavior({0},{1})",
+                                    behaviorId,
+                                    behaviorClass));
+                }
+                if (verifier != null) {
+                    verifier.validateObject(Verifier.ObjectType.BEHAVIOR,
+                                            behaviorClass,
+                                            Behavior.class);
+                }
+                app.addBehavior(behaviorId, behaviorClass);
+            }
+
+        }
+    }
+
+}
diff --git a/com/sun/faces/config/processor/ComponentConfigProcessor.java b/com/sun/faces/config/processor/ComponentConfigProcessor.java
new file mode 100644
index 0000000..c3b551c
--- /dev/null
+++ b/com/sun/faces/config/processor/ComponentConfigProcessor.java
@@ -0,0 +1,164 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.config.Verifier;
+import com.sun.faces.config.DocumentInfo;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Element;
+import org.w3c.dom.Document;
+
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.component.FacesComponent;
+import javax.servlet.ServletContext;
+import javax.xml.xpath.XPathExpressionException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.text.MessageFormat;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/component</code>.
+ * </p>
+ */
+public class ComponentConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+
+    /**
+     * <p>/faces-config/component</p>
+     */
+    private static final String COMPONENT = "component";
+
+    /**
+     * <p>/faces-config/component/component-type</p>
+     */
+    private static final String COMPONENT_TYPE = "component-type";
+
+    /**
+     * <p>/faces-config/component/component-class</p>
+     */
+    private static final String COMPONENT_CLASS = "component-class";
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])  @param sc
+     * @param documentInfos
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        // process annotated components first as components configured
+        // via config files take precedence
+        processAnnotations(FacesComponent.class);
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing component elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList components = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, COMPONENT);
+            if (components != null && components.getLength() > 0) {
+                addComponents(components, namespace);
+            }
+        }
+        invokeNext(sc, documentInfos);
+
+    }
+
+    
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addComponents(NodeList components, String namespace)
+    throws XPathExpressionException {
+
+        Application app = getApplication();
+        Verifier verifier = Verifier.getCurrentInstance();
+        for (int i = 0, size = components.getLength(); i < size; i++) {
+            Node componentNode = components.item(i);
+            NodeList children = ((Element) componentNode)
+                 .getElementsByTagNameNS(namespace, "*");
+            String componentType = null;
+            String componentClass = null;
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                if (COMPONENT_TYPE.equals(n.getLocalName())) {
+                    componentType = getNodeText(n);
+                } else if (COMPONENT_CLASS.equals(n.getLocalName())) {
+                    componentClass = getNodeText(n);
+                }
+            }
+
+            if (componentType != null && componentClass != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format(
+                                    "Calling Application.addComponent({0},{1})",
+                                    componentType,
+                                    componentClass));
+                }
+                if (verifier != null) {
+                    verifier.validateObject(Verifier.ObjectType.COMPONENT,
+                                            componentClass,
+                                            UIComponent.class);
+                }
+                app.addComponent(componentType, componentClass);
+            }
+        }
+    }
+
+}
diff --git a/com/sun/faces/config/processor/ConfigProcessor.java b/com/sun/faces/config/processor/ConfigProcessor.java
new file mode 100644
index 0000000..1e5633f
--- /dev/null
+++ b/com/sun/faces/config/processor/ConfigProcessor.java
@@ -0,0 +1,101 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.config.DocumentInfo;
+
+import javax.servlet.ServletContext;
+
+/**
+ * <p>
+ *  This interface provides a CoR structure for procesing JSF configuration
+ *  resources.
+ * </p>
+ */
+public interface ConfigProcessor {
+
+    /**
+     * <p>
+     *   Set the next <code>ConfigProcessor</code> to be invoked once
+     *   {@link ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])}
+     *   has completed.
+     * </p>
+     *
+     * @param nextProcessor the next processor in the chain to be invoked
+     */
+    public void setNext(ConfigProcessor nextProcessor);
+
+    /**
+     * <p>Return the next config processor in the chain, or null.</p>
+     * 
+     */
+    public ConfigProcessor getNext();
+    
+    /*
+     * Called to initialize the per-application metadata used by the ConfigProcessor
+     */
+    
+    public void initializeClassMetadataMap(ServletContext sc);
+
+    /**
+     * <p>
+     *  Process the array of <code>Document</code>s.
+     * </p>
+     *
+     * @param sc the <code>ServletContext</code> for the application being configured
+     * @param documentInfos  @throws Exception if an error occurs during processing
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception;
+
+
+    /**
+     * <p>
+     *  Invoke the <code>ConfigProcess</code> specified by
+     *  a call to {@link ConfigProcessor#setNext(ConfigProcessor)}, if any.
+     * </p>
+     * @param sc the <code>ServletContext</code> for the application being configured
+     * @param documentInfos  @throws Exception if an error occurs invoking the next processor
+     */
+    public void invokeNext(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception;
+
+}
diff --git a/com/sun/faces/config/processor/ConverterConfigProcessor.java b/com/sun/faces/config/processor/ConverterConfigProcessor.java
new file mode 100644
index 0000000..2d39d72
--- /dev/null
+++ b/com/sun/faces/config/processor/ConverterConfigProcessor.java
@@ -0,0 +1,193 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.Verifier;
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+import javax.faces.application.Application;
+import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
+import javax.servlet.ServletContext;
+
+import java.text.MessageFormat;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined
+ *  under <code>/faces-config/converter</code>.
+ * </p>
+ */
+public class ConverterConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <code>/faces-config/converter</code>
+     */
+    private static final String CONVERTER = "converter";
+
+    /**
+     * <code>/faces-config/converter/converter-id</code>
+     * (mutually exclusive with converter-for-class)
+     */
+    private static final String CONVERTER_ID
+         = "converter-id";
+
+    /**
+     * <code>/faces-config/converter/converter-for-class</code>
+     * (mutually exclusive with converter-id)
+     */
+    private static final String CONVERTER_FOR_CLASS
+         = "converter-for-class";
+
+    /**
+     * <code>/faces-config/converter/converter-class</code>
+     */
+    private static final String CONVERTER_CLASS
+         = "converter-class";
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        // process annotated converters first as converters configured
+        // via config files take precedence
+        processAnnotations(FacesConverter.class);
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing converter elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList nodes = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, CONVERTER);
+            if (nodes != null && nodes.getLength() > 0) {
+                addConverters(nodes, namespace);
+            }
+        }
+        invokeNext(sc, documentInfos);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addConverters(NodeList converters, String namespace) {
+
+        Application application = getApplication();
+        Verifier verifier = Verifier.getCurrentInstance();
+        for (int i = 0, size = converters.getLength(); i < size; i++) {
+            Node converter = converters.item(i);
+            NodeList children = ((Element) converter)
+                 .getElementsByTagNameNS(namespace, "*");
+            String converterId = null;
+            String converterClass = null;
+            String converterForClass = null;
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                if (CONVERTER_ID.equals(n.getLocalName())) {
+                    converterId = getNodeText(n);
+                } else if (CONVERTER_CLASS.equals(n.getLocalName())) {
+                    converterClass = getNodeText(n);
+                } else if (CONVERTER_FOR_CLASS.equals(n.getLocalName())) {
+                    converterForClass = getNodeText(n);
+                }
+            }
+
+            if (converterId != null && converterClass != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format(
+                                    "[Converter by ID] Calling Application.addConverter({0}, {1}",
+                                    converterId,
+                                    converterClass));
+                }
+                if (verifier != null) {
+                    verifier.validateObject(Verifier.ObjectType.CONVERTER,
+                                            converterClass,
+                                            Converter.class);
+                }
+                application.addConverter(converterId, converterClass);
+            } else if (converterClass != null && converterForClass != null) {
+                try {
+                    Class cfcClass = Util.loadClass(converterForClass,
+                                                    this.getClass());
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "[Converter for Class] Calling Application.addConverter({0}, {1}",
+                                        converterForClass,
+                                        converterClass));
+                    }
+                    if (verifier != null) {
+                        verifier.validateObject(Verifier.ObjectType.CONVERTER,
+                                converterClass,
+                                Converter.class);
+                    }
+                    application.addConverter(cfcClass, converterClass);
+                } catch (ClassNotFoundException cnfe) {
+                    throw new ConfigurationException(cnfe);
+                }
+            }
+        }
+    }
+
+}
diff --git a/com/sun/faces/config/processor/FaceletTaglibConfigProcessor.java b/com/sun/faces/config/processor/FaceletTaglibConfigProcessor.java
new file mode 100644
index 0000000..e63c96c
--- /dev/null
+++ b/com/sun/faces/config/processor/FaceletTaglibConfigProcessor.java
@@ -0,0 +1,694 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(resourceId):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.facelets.compiler.Compiler;
+import com.sun.faces.facelets.tag.TagLibrary;
+import com.sun.faces.facelets.tag.TagLibraryImpl;
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagLibrary;
+import com.sun.faces.facelets.util.ReflectionUtil;
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.DocumentInfo;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Element;
+import org.w3c.dom.Document;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.text.MessageFormat;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.lang.reflect.Method;
+
+import javax.faces.context.FacesContext;
+import javax.faces.FacesException;
+import javax.servlet.ServletContext;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-taglib</code>.
+ * </p>
+ */
+public class FaceletTaglibConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    
+    /**
+     * <p>
+     * /facelet-taglib/library-class
+     * </p>
+     */
+    private static final String LIBRARY_CLASS = "library-class";
+
+    /**
+     * <p>
+     * /facelet-taglib/namespace
+     * </p>
+     */
+    private static final String TAGLIB_NAMESPACE = "namespace";
+
+    /**
+     * <p>
+     * /facelet-taglib/tag
+     * </p>
+     */
+    private static final String TAG = "tag";
+
+    /**
+     * <p>
+     * /facelet-taglib/function
+     * </p>
+     */
+    private static final String FUNCTION = "function";
+
+    /**
+     * <p>
+     * /facelet-taglib/tag/tag-name
+     * </p>
+     */
+    private static final String TAG_NAME = "tag-name";
+
+    /**
+     * <p>
+     * /facelet-taglib/tag/component
+     * </p>
+     */
+    private static final String COMPONENT = "component";
+
+    /**
+     * <p>
+     * /facelet-taglib/tag/validator
+     * </p>
+     */
+    private static final String VALIDATOR = "validator";
+
+    /**
+     * <p>
+     * /facelet-taglib/tag/converter
+     * </p>
+     */
+    private static final String CONVERTER = "converter";
+
+    /**
+     * <p>
+     * /facelet-taglib/tag/behavior
+     * </p>
+     */
+    private static final String BEHAVIOR = "behavior";
+    /**
+     * <p>
+     * /facelet-taglib/tag/source
+     * </p>
+     */
+    private static final String SOURCE = "source";
+
+    /**
+     * <p>
+     * /facelet-taglib/tag/resource-id
+     * </p>
+     */
+    private static final String RESOURCE_ID = "resource-id";
+
+    /**
+     * <p>
+     *   <ul>
+     *     <li>/facelet-taglib/tag/tag-handler</li>
+     *     <li>/facelet-taglib/tag/converter/handler-class</li>
+     *     <li>/facelet-taglib/tag/validator/handler-class</li>
+     *     <li>/facelet-taglib/tag/component/handler-class</li>
+     *   </ul>
+     * </p>
+     */
+    private static final String HANDLER_CLASS = "handler-class";
+
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/validator/validator-id
+     * </p>
+     */
+    private static final String VALIDATOR_ID = "validator-id";
+
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/converter/converter-id
+     * </p>
+     */
+    private static final String CONVERTER_ID = "converter-id";
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/behavior/behavior-id
+     * </p>
+     */
+    private static final String BEHAVIOR_ID = "behavior-id";
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/component/component-type
+     * </p>
+     */
+    private static final String COMPONENT_TYPE = "component-type";
+
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/component/renderer-type
+     * </p>
+     */
+    private static final String RENDERER_TYPE = "renderer-type";
+
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/function/function-name
+     * </p>
+     */
+    private static final String FUNCTION_NAME = "function-name";
+
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/function/function-class
+     * </p>
+     */
+    private static final String FUNCTION_CLASS = "function-class";
+
+
+    /**
+     * <p>
+     *  /facelet-taglib/tag/function/function-signature
+     * </p>
+     */
+    private static final String FUNCTION_SIGNATURE = "function-signature";
+
+
+    /**
+     * <p>
+     *  /facelet-taglib/composite-library-name
+     * </p>
+     */
+    private static final String COMPOSITE_LIBRARY_NAME = "composite-library-name";
+
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        ApplicationAssociate associate =
+              ApplicationAssociate.getInstance(FacesContext.getCurrentInstance().getExternalContext());
+        assert (associate != null);
+        Compiler compiler = associate.getCompiler();
+
+        for (int i = 0, length = documentInfos.length; i < length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                 "Processing facelet-taglibrary document: ''{0}''",
+                                 documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace =
+                  document.getDocumentElement().getNamespaceURI();
+            Element documentElement = document.getDocumentElement();
+            NodeList libraryClass =
+                  documentElement
+                        .getElementsByTagNameNS(namespace, LIBRARY_CLASS);
+            if (libraryClass != null && libraryClass.getLength() > 0) {
+                processTaglibraryClass(sc, libraryClass, compiler);
+            } else {
+                processTagLibrary(sc, documentElement, namespace, compiler);
+            }
+        }
+
+        invokeNext(sc, documentInfos);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void processTaglibraryClass(ServletContext sc, NodeList libraryClass,
+                                        Compiler compiler) {
+
+        Node n = libraryClass.item(0);
+        String className = getNodeText(n);
+        TagLibrary taglib = (TagLibrary) createInstance(sc, className, n);
+        compiler.addTagLibrary(taglib);
+
+    }
+
+
+    private void processTagLibrary(ServletContext sc, Element documentElement,
+                                   String namespace,
+                                   Compiler compiler) {
+
+        NodeList children = documentElement.getChildNodes();
+        if (children != null && children.getLength() > 0) {
+            String taglibNamespace = null;
+            String compositeLibraryName = null;
+            for (int i = 0, ilen = children.getLength(); i < ilen; i++) {
+                Node n = children.item(i);
+                if (TAGLIB_NAMESPACE.equals(n.getLocalName())) {
+                    taglibNamespace = getNodeText(n);
+                } else if (COMPOSITE_LIBRARY_NAME.equals(n.getLocalName())) {
+                    compositeLibraryName = getNodeText(n);
+                }
+            }
+
+            TagLibraryImpl taglibrary;
+            if (compositeLibraryName != null) {
+                taglibrary = new CompositeComponentTagLibrary(taglibNamespace,
+                                                              compositeLibraryName);
+                compiler.addTagLibrary(taglibrary);
+            } else {
+                taglibrary = new TagLibraryImpl(taglibNamespace);
+
+            }
+            NodeList tags =
+                  documentElement.getElementsByTagNameNS(namespace, TAG);
+            processTags(sc, documentElement, tags, taglibrary);
+            NodeList functions =
+                  documentElement
+                        .getElementsByTagNameNS(namespace, FUNCTION);
+            processFunctions(sc, functions, taglibrary);
+            compiler.addTagLibrary(taglibrary);
+        }
+
+    }
+
+
+    private void processTags(ServletContext sc, Element documentElement,
+                             NodeList tags,
+                             TagLibraryImpl taglibrary) {
+
+        if (tags != null && tags.getLength() > 0) {
+            for (int i = 0, ilen = tags.getLength(); i < ilen; i++) {
+                Node tagNode = tags.item(i);
+                NodeList children = tagNode.getChildNodes();
+                String tagName = null;
+                NodeList component = null;
+                NodeList converter = null;
+                NodeList validator = null;
+                NodeList behavior = null;
+                Node source = null;
+                Node handlerClass = null;
+                for (int j = 0, jlen = children.getLength(); j < jlen; j++) {
+                    Node n = children.item(j);
+
+                    // process the nodes to see what children we have
+                    if (TAG_NAME.equals(n.getLocalName())) {
+                        tagName = getNodeText(n);
+                    } else if (COMPONENT.equals(n.getLocalName())) {
+                        component = n.getChildNodes();
+                    } else if (CONVERTER.equals(n.getLocalName())) {
+                        converter = n.getChildNodes();
+                    } else if (VALIDATOR.equals(n.getLocalName())) {
+                        validator = n.getChildNodes();
+                    } else if (BEHAVIOR.equals(n.getLocalName())) {
+                        behavior = n.getChildNodes();
+                    } else if (SOURCE.equals(n.getLocalName())) {
+                        source = n;
+                    } else if (HANDLER_CLASS.equals(n.getLocalName())) {
+                        handlerClass = n;
+                    }
+                }
+                if (component != null) {
+                    processComponent(sc, documentElement, component, taglibrary, tagName);
+                } else if (converter != null) {
+                    processConverter(sc, converter, taglibrary, tagName);
+                } else if (validator != null) {
+                    processValidator(sc, validator, taglibrary, tagName);
+                } else if (behavior != null) {
+                    processBehavior(sc, behavior, taglibrary, tagName);
+                } else if (source != null) {
+                    processSource(documentElement, source, taglibrary, tagName);
+                } else if (handlerClass != null) {
+                    processHandlerClass(sc, handlerClass, taglibrary, tagName);
+                }
+            }
+        }
+
+    }
+
+
+    private void processBehavior(ServletContext sc, NodeList behavior, TagLibraryImpl taglibrary,
+			String tagName) {
+        if (behavior != null && behavior.getLength() > 0) {
+            String behaviorId = null;
+            String handlerClass = null;
+            for (int i = 0, ilen = behavior.getLength(); i < ilen; i++) {
+                Node n = behavior.item(i);
+                if (BEHAVIOR_ID.equals(n.getLocalName())) {
+                    behaviorId = getNodeText(n);
+                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
+                    handlerClass = getNodeText(n);
+                }
+
+            }
+            if (handlerClass != null) {
+                try {
+                    Class<?> clazz = loadClass(sc, handlerClass, this, null);
+                    taglibrary.putBehavior(tagName, behaviorId, clazz);
+                } catch (ClassNotFoundException e) {
+                    throw new ConfigurationException(e);
+                }
+
+            } else {
+                taglibrary.putBehavior(tagName, behaviorId);
+            }
+        }
+
+    }
+
+
+    private void processHandlerClass(ServletContext sc, Node handlerClass,
+                                     TagLibraryImpl taglibrary,
+                                     String name) {
+
+        String className = getNodeText(handlerClass);
+        if (className == null) {
+            throw new ConfigurationException("The tag named "+name+" from namespace "+taglibrary.getNamespace()+" has a null handler-class defined");
+        }
+        try {
+            Class<?> clazz;
+            try {
+                clazz = loadClass(sc, className, this, null);
+                taglibrary.putTagHandler(name, clazz);
+            } catch (NoClassDefFoundError defNotFound) {
+                String message = defNotFound.toString();
+                if (message.contains("com/sun/facelets/")
+                    || message.contains("com.sun.facelets.")) {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.config.legacy.facelet.warning",
+                                   new Object[]{handlerClass,});
+                    }
+                } else {
+                    throw defNotFound;
+                }
+            }
+        } catch (ClassNotFoundException cnfe) {
+            throw new ConfigurationException(cnfe);
+        }
+
+    }
+
+
+    private void processSource(Element documentElement,
+                               Node source,
+                               TagLibraryImpl taglibrary,
+                               String name) {
+
+        String docURI = documentElement.getOwnerDocument().getDocumentURI();
+        String s = getNodeText(source);
+        try {
+            URL url = new URL(new URL(docURI), s);
+            taglibrary.putUserTag(name, url);
+        } catch (MalformedURLException e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+    private void processResourceId(Element documentElement,
+                               Node compositeSource,
+                               TagLibraryImpl taglibrary,
+                               String name) {
+
+        String resourceId = getNodeText(compositeSource);
+        taglibrary.putCompositeComponentTag(name, resourceId);
+
+    }
+
+    private void processValidator(ServletContext sc, NodeList validator,
+                                  TagLibraryImpl taglibrary,
+                                  String name) {
+
+        if (validator != null && validator.getLength() > 0) {
+            String validatorId = null;
+            String handlerClass = null;
+            for (int i = 0, ilen = validator.getLength(); i < ilen; i++) {
+                Node n = validator.item(i);
+                if (VALIDATOR_ID.equals(n.getLocalName())) {
+                    validatorId = getNodeText(n);
+                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
+                    handlerClass = getNodeText(n);
+                }
+
+            }
+            if (handlerClass != null) {
+                try {
+                    Class<?> clazz = loadClass(sc, handlerClass, this, null);
+                    taglibrary.putValidator(name, validatorId, clazz);
+                } catch (NoClassDefFoundError defNotFound) {
+                    String message = defNotFound.toString();
+                    if (message.contains("com/sun/facelets/")
+                        || message.contains("com.sun.facelets.")) {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING,
+                                       "jsf.config.legacy.facelet.warning",
+                                       new Object[]{handlerClass,});
+                        }
+                    } else {
+                        throw defNotFound;
+                    }
+                } catch (ClassNotFoundException e) {
+                    throw new ConfigurationException(e);
+                }
+
+            } else {
+                taglibrary.putValidator(name, validatorId);
+            }
+        }
+        
+    }
+
+    
+    private void processConverter(ServletContext sc, NodeList converter,
+                                  TagLibraryImpl taglibrary,
+                                  String name) {
+
+        if (converter != null && converter.getLength() > 0) {
+            String converterId = null;
+            String handlerClass = null;
+            for (int i = 0, ilen = converter.getLength(); i < ilen; i++) {
+                Node n = converter.item(i);
+
+                if (CONVERTER_ID.equals(n.getLocalName())) {
+                    converterId = getNodeText(n);
+                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
+                    handlerClass = getNodeText(n);
+                }
+
+            }
+            if (handlerClass != null) {
+                try {
+                    Class<?> clazz = loadClass(sc, handlerClass, this, null);
+                    taglibrary.putConverter(name, converterId, clazz);
+                } catch (NoClassDefFoundError defNotFound) {
+                    String message = defNotFound.toString();
+                    if (message.contains("com/sun/facelets/")
+                        || message.contains("com.sun.facelets.")) {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING,
+                                       "jsf.config.legacy.facelet.warning",
+                                       new Object[]{handlerClass,});
+                        }
+                    } else {
+                        throw defNotFound;
+                    }
+                } catch (ClassNotFoundException e) {
+                    throw new ConfigurationException(e);
+                }
+
+            } else {
+                taglibrary.putConverter(name, converterId);
+            }
+        }
+
+    }
+
+
+    private void processComponent(ServletContext sc, Element documentElement, NodeList component,
+                                  TagLibraryImpl taglibrary,
+                                  String name) {
+
+        if (component != null && component.getLength() > 0) {
+            String componentType = null;
+            String rendererType = null;
+            String handlerClass = null;
+            Node resourceId = null;
+            for (int i = 0, ilen = component.getLength(); i < ilen; i++) {
+                Node n = component.item(i);
+                if (COMPONENT_TYPE.equals(n.getLocalName())) {
+                    componentType = getNodeText(n);
+                } else if (RENDERER_TYPE.equals(n.getLocalName())) {
+                    rendererType = getNodeText(n);
+                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
+                    handlerClass = getNodeText(n);
+                }  else if (RESOURCE_ID.equals(n.getLocalName())) {
+                    resourceId = n;
+                }
+            }
+            if (handlerClass != null) {
+                try {
+                    Class<?> clazz = loadClass(sc, handlerClass, this, null);
+                    taglibrary.putComponent(name,
+                                            componentType,
+                                            rendererType,
+                                            clazz);
+                } catch (NoClassDefFoundError defNotFound) {
+                    String message = defNotFound.toString();
+                    if (message.contains("com/sun/facelets/")
+                        || message.contains("com.sun.facelets.")) {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING,
+                                       "jsf.config.legacy.facelet.warning",
+                                       new Object[]{handlerClass,});
+                        }
+                    } else {
+                        throw defNotFound;
+                    }
+                } catch (ClassNotFoundException e) {
+                    throw new ConfigurationException(e);
+                }
+            } else if (resourceId != null) {
+                processResourceId(documentElement, resourceId, taglibrary, name);
+            } else {
+                taglibrary.putComponent(name, componentType, rendererType);
+            }
+            
+        }
+
+    }
+
+
+    private void processFunctions(ServletContext sc, NodeList functions, TagLibraryImpl taglibrary) {
+
+        if (functions != null && functions.getLength() > 0) {
+            for (int i = 0, ilen = functions.getLength(); i < ilen; i++) {
+                NodeList children = functions.item(i).getChildNodes();
+                String functionName = null;
+                String functionClass = null;
+                String functionSignature = null;
+                for (int j = 0, jlen = children.getLength(); j < jlen; j++) {
+                    Node n = children.item(j);
+
+                    if (FUNCTION_NAME.equals(n.getLocalName())) {
+                        functionName = getNodeText(n);
+                    } else if (FUNCTION_CLASS.equals(n.getLocalName())) {
+                        functionClass = getNodeText(n);
+                    } else if (FUNCTION_SIGNATURE.equals(n.getLocalName())) {
+                        functionSignature = getNodeText(n);
+                    }
+                }
+                try {
+                    Class<?> clazz = loadClass(sc, functionClass, this, null);
+                    Method m = createMethod(clazz, functionSignature);
+                    taglibrary.putFunction(functionName, m);
+                } catch (Exception e) {
+                    throw new ConfigurationException(e);
+                }
+            }
+        }
+
+    }
+
+
+    private static Method createMethod(Class type, String signatureParam) throws Exception {
+        // formatted XML might cause \n\t characters - make sure we only have space characters left  
+        String signature = signatureParam.replaceAll("\\s+", " "); 
+        int pos = signature.indexOf(' ');
+        if (pos == -1) {
+            throw new Exception("Must Provide Return Type: " + signature);
+        } else {
+            int pos2 = signature.indexOf('(', pos + 1);
+            if (pos2 == -1) {
+                throw new Exception(
+                      "Must provide a method name, followed by '(': "
+                      + signature);
+            } else {
+                String mn = signature.substring(pos + 1, pos2).trim();
+                pos = signature.indexOf(')', pos2 + 1);
+                if (pos == -1) {
+                    throw new Exception("Must close parentheses, ')' missing: "
+                                        + signature);
+                } else {
+                    String[] ps = signature.substring(pos2 + 1, pos).trim().split(",");
+                    Class[] pc;
+                    if (ps.length == 1 && "".equals(ps[0])) {
+                        pc = new Class[0];
+                    } else {
+                        pc = new Class[ps.length];
+                        for (int i = 0; i < pc.length; i++) {
+                            pc[i] = ReflectionUtil.forName(ps[i].trim());
+                        }
+                    }
+                    try {
+                        return type.getMethod(mn, pc);
+                    } catch (NoSuchMethodException e) {
+                        throw new Exception("No Function Found on type: "
+                                            + type.getName()
+                                            + " with signature: "
+                                            + signature);
+                    }
+
+                }
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/config/processor/FacesConfigExtensionProcessor.java b/com/sun/faces/config/processor/FacesConfigExtensionProcessor.java
new file mode 100644
index 0000000..be14340
--- /dev/null
+++ b/com/sun/faces/config/processor/FacesConfigExtensionProcessor.java
@@ -0,0 +1,187 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.util.FacesLogger;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+import javax.servlet.ServletContext;
+
+import java.text.MessageFormat;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/factory</code>.
+ * </p>
+ */
+public class FacesConfigExtensionProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <code>/faces-config/faces-config-extension</code>
+     */
+    private static final String FACES_CONFIG_EXTENSION = "faces-config-extension";
+
+    /**
+     * <code>/faces-config/faces-config-extension/facelets-processing</code>
+     */
+    private static final String FACELETS_PROCESSING = "facelets-processing";
+
+    /**
+     * <code>/faces-config/faces-config-extension/facelets-processing/file-extension</code>
+     */
+    private static final String FILE_EXTENSION = "file-extension";
+
+    /**
+     * <code>/faces-config/faces-config-extension/facelets-processing/process-as</code>
+     */
+    private static final String PROCESS_AS = "process-as";
+
+    // ------------------------------------------------------------ Constructors
+
+    
+    public FacesConfigExtensionProcessor() { }
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing faces-config-extension elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList facesConfigExtensions = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, FACES_CONFIG_EXTENSION);
+            if (facesConfigExtensions != null && facesConfigExtensions.getLength() > 0) {
+                processFacesConfigExtensions(facesConfigExtensions,
+                                 namespace, documentInfos[i]);
+            }
+        }
+
+        // invoke the next config processor
+        invokeNext(sc, documentInfos);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void processFacesConfigExtensions(NodeList facesConfigExtensions,
+                                  String namespace, DocumentInfo info) {
+        WebConfiguration config = null;
+
+        for (int i = 0, size = facesConfigExtensions.getLength(); i < size; i++) {
+            Node facesConfigExtension = facesConfigExtensions.item(i);
+            NodeList children = ((Element) facesConfigExtension)
+                 .getElementsByTagNameNS(namespace, "*");
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                if (FACELETS_PROCESSING.equals(n.getLocalName())) {
+                    Node faceletsProcessing = n;
+                    NodeList faceletsProcessingChildren = ((Element) faceletsProcessing)
+                           .getElementsByTagNameNS(namespace, "*");
+                    String fileExtension = null, processAs = null;
+                    for (int fp = 0, fpsize = faceletsProcessingChildren.getLength(); fp < fpsize; fp++) {
+                        Node childOfInterset = faceletsProcessingChildren.item(fp);
+                        if (null == fileExtension &&
+                            FILE_EXTENSION.equals(childOfInterset.getLocalName())) {
+                            fileExtension = getNodeText(childOfInterset);
+                        } else if (null == processAs &&
+                                   PROCESS_AS.equals(childOfInterset.getLocalName())) {
+                            processAs = getNodeText(childOfInterset);
+                        } else {
+                            if (LOGGER.isLoggable(Level.WARNING)) {
+                                LOGGER.log(Level.WARNING,
+                                        MessageFormat.format(
+                                        "Processing faces-config-extension elements for document: ''{0}'', encountered unexpected configuration ''{1}'', ignoring and continuing",
+                                        info.getSourceURI(), getNodeText(childOfInterset)));
+                            }
+                        }
+
+                    }
+
+                    if (null != fileExtension && null != processAs) {
+                        if (null == config) {
+                            config = WebConfiguration.getInstance();
+                        }
+                        Map<String, String> faceletsProcessingMappings =
+                                config.getFacesConfigOptionValue(WebConfiguration.WebContextInitParameter.FaceletsProcessingFileExtensionProcessAs, true);
+                        faceletsProcessingMappings.put(fileExtension, processAs);
+
+                    } else {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING,
+                                    MessageFormat.format(
+                                    "Processing faces-config-extension elements for document: ''{0}'', encountered <facelets-processing> elemnet without expected children",
+                                    info.getSourceURI()));
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+
+}
diff --git a/com/sun/faces/config/processor/FacesConfigNamespaceContext.java b/com/sun/faces/config/processor/FacesConfigNamespaceContext.java
new file mode 100644
index 0000000..317b042
--- /dev/null
+++ b/com/sun/faces/config/processor/FacesConfigNamespaceContext.java
@@ -0,0 +1,64 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.config.processor;
+
+import java.util.Collections;
+import java.util.Iterator;
+import javax.xml.namespace.NamespaceContext;
+
+class FacesConfigNamespaceContext implements NamespaceContext {
+
+    @Override
+    public String getNamespaceURI(String prefix) {
+        return "http://xmlns.jcp.org/xml/ns/javaee";
+    }
+
+    @Override
+    public String getPrefix(String namespaceURI) {
+        return "ns1";
+    }
+
+    @Override
+    public Iterator getPrefixes(String namespaceURI) {
+        return Collections.emptyList().iterator();
+    }
+    
+}
diff --git a/com/sun/faces/config/processor/FacesFlowDefinitionConfigProcessor.java b/com/sun/faces/config/processor/FacesFlowDefinitionConfigProcessor.java
new file mode 100644
index 0000000..01bb552
--- /dev/null
+++ b/com/sun/faces/config/processor/FacesFlowDefinitionConfigProcessor.java
@@ -0,0 +1,853 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.config.processor;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.util.ReflectionUtil;
+import com.sun.faces.flow.FlowImpl;
+import com.sun.faces.flow.ParameterImpl;
+import com.sun.faces.flow.builder.FlowBuilderImpl;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostConstructApplicationEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.flow.FlowHandler;
+import javax.faces.flow.FlowHandlerFactory;
+import javax.faces.flow.FlowNode;
+import javax.faces.flow.Parameter;
+import javax.faces.flow.builder.FlowBuilder;
+import javax.faces.flow.builder.FlowCallBuilder;
+import javax.faces.flow.builder.MethodCallBuilder;
+import javax.faces.flow.builder.NavigationCaseBuilder;
+import javax.faces.flow.builder.SwitchBuilder;
+import javax.servlet.ServletContext;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/flow-definition</code>.
+ * </p>
+ */
+public class FacesFlowDefinitionConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+        
+    /**
+     * <code>/faces-config/flow-definition</code>
+     */
+    private static final String FACES_FLOW_DEFINITION = "flow-definition";
+    
+    public FacesFlowDefinitionConfigProcessor() {
+    }
+    
+    public static boolean uriIsFlowDefinition(URI uri) {
+        boolean result = false;
+        String path = uri.getPath();
+        String [] segments = path.split("/");
+        if (1 < segments.length) {
+            String flowName = segments[segments.length-2];
+            String definingName = segments[segments.length-1];
+            result = definingName.equals(flowName + "-flow.xml");
+        }
+        
+        return result;
+    }
+    
+    /*
+     * Implement the requirements of 11.4.3.3
+     * 
+     * @param uri
+     * @param toPopulate
+     * @return 
+     */
+    public static Document synthesizeEmptyFlowDefinition(URI uri) throws ParserConfigurationException {
+        Document newDoc = null;
+
+        String path = uri.getPath();
+        String [] segments = path.split("/");
+        if (segments.length < 2) {
+            return newDoc;
+        }
+        String flowName = segments[segments.length-2];
+        
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        dbf.setNamespaceAware(true);
+        DocumentBuilder builder = dbf.newDocumentBuilder();
+        DOMImplementation domImpl = builder.getDOMImplementation();
+        newDoc = domImpl.createDocument(RIConstants.JAVAEE_XMLNS, "faces-config", null);
+        Node documentElement = newDoc.getDocumentElement();
+        Attr versionAttribute = newDoc.createAttribute("version");
+        versionAttribute.setValue("2.2");
+        documentElement.getAttributes().setNamedItem(versionAttribute);
+        
+        Node facesConfig = newDoc.getFirstChild();
+        
+        Element flowDefinition = newDoc.createElementNS(RIConstants.JAVAEE_XMLNS, "flow-definition");
+        flowDefinition.setAttribute("id", flowName);
+        facesConfig.appendChild(flowDefinition);
+        final String flowReturnStr = flowName + "-return";
+        
+        Element flowReturn = newDoc.createElementNS(RIConstants.JAVAEE_XMLNS, "flow-return");
+        flowReturn.setAttribute("id", flowReturnStr);
+        flowDefinition.appendChild(flowReturn);
+        
+        Element fromOutcome = newDoc.createElementNS(RIConstants.JAVAEE_XMLNS, "from-outcome");
+        flowReturn.appendChild(fromOutcome);
+        fromOutcome.setTextContent("/" + flowReturnStr);
+        
+        return newDoc;
+    }
+    
+
+    @Override
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        WebConfiguration config = WebConfiguration.getInstance(sc);
+        FacesContext context = FacesContext.getCurrentInstance();
+        
+        for (int i = 0; i < documentInfos.length; i++) {
+            URI definingDocumentURI = documentInfos[i].getSourceURI();
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing factory elements for document: ''{0}''",
+                                definingDocumentURI));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList flowDefinitions = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, FACES_FLOW_DEFINITION);
+            if (flowDefinitions != null && flowDefinitions.getLength() > 0) {
+                config.setHasFlows(true);
+                
+                saveFlowDefinition(context, definingDocumentURI, document);
+            }
+        }
+        
+        if (config.isHasFlows()) {
+            String optionValue = config.getOptionValue(WebConfiguration.WebContextInitParameter.ClientWindowMode);
+            boolean clientWindowNeedsEnabling = false;
+            if ("none".equals(optionValue)) {
+                clientWindowNeedsEnabling = true;
+                String featureName = 
+                        WebConfiguration.WebContextInitParameter.ClientWindowMode.getQualifiedName();
+                LOGGER.log(Level.WARNING, 
+                        "{0} was set to none, but Faces Flows requires {0} is enabled.  Setting to ''url''.", new Object[]{featureName});
+            } else if (null == optionValue) {
+                clientWindowNeedsEnabling = true;
+            }
+            if (clientWindowNeedsEnabling) {
+                config.setOptionValue(WebConfiguration.WebContextInitParameter.ClientWindowMode, "url");
+            }
+            
+            context.getApplication().subscribeToEvent(PostConstructApplicationEvent.class,
+                    Application.class, new PerformDeferredFlowProcessing());
+        }
+        
+        invokeNext(sc, documentInfos);
+    }
+    
+    // <editor-fold defaultstate="collapsed" desc="Enable deferred processing of flow definitions">
+    
+    private static final String flowDefinitionListKey = RIConstants.FACES_PREFIX + "FacesFlowDefinitions";
+    
+    private void saveFlowDefinition(FacesContext context, 
+            URI definingDocumentURI,
+            Document flowDefinitions) {
+        Map<String, Object> appMap = context.getExternalContext().getApplicationMap();
+        List<FlowDefinitionDocument> def = (List<FlowDefinitionDocument>) appMap.get(flowDefinitionListKey);
+        if (null == def) {
+            def = new ArrayList<FlowDefinitionDocument>();
+            appMap.put(flowDefinitionListKey, def);
+        }
+        def.add(new FlowDefinitionDocument(definingDocumentURI, flowDefinitions));
+    }
+    
+    private List<FlowDefinitionDocument> getSavedFlowDefinitions(FacesContext context) {
+        Map<String, Object> appMap = context.getExternalContext().getApplicationMap();
+        List<FlowDefinitionDocument> def = (List<FlowDefinitionDocument>) appMap.get(flowDefinitionListKey);
+        return (null != def) ? def : Collections.EMPTY_LIST;
+    }
+    
+    private void clearSavedFlowDefinitions(FacesContext context) {
+        Map<String, Object> appMap = context.getExternalContext().getApplicationMap();
+        List<FlowDefinitionDocument> def = (List<FlowDefinitionDocument>) appMap.get(flowDefinitionListKey);
+        if (null != def) {
+            for (FlowDefinitionDocument cur : def) {
+                cur.clear();
+            }
+            def.clear();
+            appMap.remove(flowDefinitionListKey);
+        }
+    }
+    
+    private static class FlowDefinitionDocument {
+        URI definingDocumentURI;
+        Document flowDefinitions;
+
+        public FlowDefinitionDocument(URI definingDocumentURI, 
+                Document flowDefinitions) {
+            this.definingDocumentURI = definingDocumentURI;
+            this.flowDefinitions = flowDefinitions;
+        }
+        
+        public void clear() {
+            this.definingDocumentURI = null;
+            this.flowDefinitions = null;
+        }
+        
+    }
+    
+    private class PerformDeferredFlowProcessing implements SystemEventListener {
+
+        @Override
+        public boolean isListenerForSource(Object source) {
+            return source instanceof Application;
+        }
+
+        @Override
+        public void processEvent(SystemEvent event) throws AbortProcessingException {
+            FacesContext context = FacesContext.getCurrentInstance();
+            List<FlowDefinitionDocument> flowDefinitions = 
+                    FacesFlowDefinitionConfigProcessor.this.getSavedFlowDefinitions(context);
+            for (FlowDefinitionDocument cur: flowDefinitions) {
+                try {
+                    FacesFlowDefinitionConfigProcessor.this.
+                            processFacesFlowDefinitions(cur.definingDocumentURI, cur.flowDefinitions);
+                } catch (XPathExpressionException ex) {
+                    throw new FacesException(ex);
+                }
+            }
+            FacesFlowDefinitionConfigProcessor.this.clearSavedFlowDefinitions(context);
+        }
+    }
+    
+    // </editor-fold>
+    
+    private void processFacesFlowDefinitions(URI definingDocumentURI,
+            Document document) throws XPathExpressionException {
+        String namespace = document.getDocumentElement()
+                .getNamespaceURI();
+        NodeList flowDefinitions = document.getDocumentElement()
+                .getElementsByTagNameNS(namespace, FACES_FLOW_DEFINITION);
+        
+        if (0 == flowDefinitions.getLength()) {
+            return;
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        Application app = context.getApplication();
+        FlowHandler flowHandler = app.getFlowHandler();
+        if (null == flowHandler) {
+            FlowHandlerFactory flowHandlerFactory = (FlowHandlerFactory) FactoryFinder.getFactory(FactoryFinder.FLOW_HANDLER_FACTORY);
+            app.setFlowHandler(flowHandler = 
+                    flowHandlerFactory.createFlowHandler(context));
+        }
+        
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        xpath.setNamespaceContext(new FacesConfigNamespaceContext());
+        
+        String nameStr = "";
+        NodeList nameList = (NodeList) xpath.evaluate("./ns1:name/text()", 
+                document.getDocumentElement(), XPathConstants.NODESET);
+        if (null != nameList && 1 < nameList.getLength()) {
+            throw new XPathExpressionException("<faces-config> must have at most one <name> element.");
+        }
+        if (null != nameList && 1 == nameList.getLength()) {
+            nameStr = nameList.item(0).getNodeValue().trim();
+            if (0 < nameStr.length()) {
+                ApplicationAssociate associate = ApplicationAssociate.getInstance(context.getExternalContext());
+                try {
+                    associate.relateUrlToDefiningDocumentInJar(definingDocumentURI.toURL(), nameStr);
+                } catch (MalformedURLException ex) {
+                    throw new XPathExpressionException(ex);
+                }
+            }
+        }
+        
+        for (int c = 0, size = flowDefinitions.getLength(); c < size; c++) {
+            Node flowDefinition = flowDefinitions.item(c);
+            String flowId = getIdAttribute(flowDefinition);
+            
+            String uriStr = definingDocumentURI.toASCIIString();
+            if (uriStr.endsWith(RIConstants.FLOW_DEFINITION_ID_SUFFIX)) {
+                nameStr = "";
+            }
+            
+            FlowBuilderImpl flowBuilder = new FlowBuilderImpl(context);
+            flowBuilder.id(nameStr, flowId);
+            
+            processViews(xpath, flowDefinition, flowBuilder);
+            processNavigationRules(xpath, flowDefinition, flowBuilder);
+            processReturns(xpath, flowDefinition, flowBuilder);
+            processInboundParameters(xpath, flowDefinition, flowBuilder);
+            processFlowCalls(xpath, flowDefinition, flowBuilder);
+            processSwitches(xpath, flowDefinition, flowBuilder);
+            processMethodCalls(context, xpath, flowDefinition, flowBuilder);
+            processInitializerFinalizer(xpath, flowDefinition, flowBuilder);
+            
+            String startNodeId = processStartNode(xpath, flowDefinition, flowBuilder);
+            
+            if (null != startNodeId) {
+                FlowImpl toAdd = flowBuilder._getFlow();
+                FlowNode startNode = toAdd.getNode(startNodeId);
+                if (null == startNode) {
+                    throw new XPathExpressionException("Unable to find flow node with id " + startNodeId + " to mark as start node");
+                } else {
+                    toAdd.setStartNodeId(startNodeId);
+                }
+            } else {
+                flowBuilder.viewNode(flowId, "/" + flowId + "/" + flowId + ".xhtml").markAsStartNode();
+            }
+            flowHandler.addFlow(context, flowBuilder.getFlow());
+            
+        }
+        
+    }
+
+    private void processNavigationRules(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException{
+        // <editor-fold defaultstate="collapsed">
+        NodeList navRules = (NodeList) xpath.evaluate(".//ns1:navigation-rule", 
+                flowDefinition, XPathConstants.NODESET);
+        for (int i_navRule = 0; i_navRule < navRules.getLength(); i_navRule++) {
+            Node navRule = navRules.item(i_navRule);
+            NodeList fromViewIdList = (NodeList) 
+                    xpath.evaluate(".//ns1:from-view-id/text()", navRule, XPathConstants.NODESET);
+            if (1 != fromViewIdList.getLength()) {
+                throw new XPathExpressionException("Within <navigation-rule> must have exactly one <from-view-id>");
+            }
+            String fromViewId = fromViewIdList.item(0).getNodeValue().trim();
+            
+            NodeList navCases = (NodeList) 
+                    xpath.evaluate(".//ns1:navigation-case", navRule, XPathConstants.NODESET);
+            for (int i_navCase = 0; i_navCase < navCases.getLength(); i_navCase++) {
+                Node navCase = navCases.item(i_navCase);
+                NodeList toViewIdList = (NodeList) 
+                        xpath.evaluate(".//ns1:to-view-id/text()", navCase, XPathConstants.NODESET);
+                if (1 != toViewIdList.getLength()) {
+                    throw new XPathExpressionException("Within <navigation-case>, must have exactly one <to-view-id>");
+                }
+                String toViewId = toViewIdList.item(0).getNodeValue().trim();
+                
+                NavigationCaseBuilder ncb = flowBuilder.navigationCase();
+                ncb.fromViewId(fromViewId).toViewId(toViewId);
+                
+                {
+                    NodeList fromOutcomeList = (NodeList) 
+                            xpath.evaluate(".//ns1:from-outcome/text()", navCase, XPathConstants.NODESET);
+                    if (null != fromOutcomeList && 1 < fromOutcomeList.getLength()) {
+                        throw new XPathExpressionException("Within <navigation-case>, must have at most one <from-outcome>");
+                    }
+                    if (null != fromOutcomeList && 1 == fromOutcomeList.getLength()) {
+                        String fromOutcome = fromOutcomeList.item(0).getNodeValue().trim();
+                        ncb.fromOutcome(fromOutcome);
+                    }
+                }
+                 
+                {
+                    NodeList fromActionList = (NodeList) 
+                            xpath.evaluate(".//ns1:from-action/text()", navCase, XPathConstants.NODESET);
+                    if (null != fromActionList && 1 < fromActionList.getLength()) {
+                        throw new XPathExpressionException("Within <navigation-case>, must have at most one <from-action>");
+                    }
+                    if (null != fromActionList && 1 == fromActionList.getLength()) {
+                        String fromAction = fromActionList.item(0).getNodeValue().trim();
+                        ncb.fromAction(fromAction);
+                    }
+                }
+
+                {
+                    NodeList ifList = (NodeList) 
+                            xpath.evaluate(".//ns1:if/text()", navCase, XPathConstants.NODESET);
+                    if (null != ifList && 1 < ifList.getLength()) {
+                        throw new XPathExpressionException("Within <navigation-case>, must have zero or one <if>");
+                    }
+                    if (null != ifList && 1 == ifList.getLength()) {
+                        String ifStr = ifList.item(0).getNodeValue().trim();
+                        ncb.condition(ifStr);
+                    }
+
+                }
+                
+                {
+                    NodeList redirectList = (NodeList) 
+                            xpath.evaluate(".//ns1:redirect", navCase, XPathConstants.NODESET);
+                    if (null != redirectList && 1 < redirectList.getLength()) {
+                        throw new XPathExpressionException("Within <navigation-case>, must have zero or one <redirect>");
+                    }
+                    if (null != redirectList && 1 == redirectList.getLength()) {
+                        NavigationCaseBuilder.RedirectBuilder redirector = ncb.redirect();
+                        Node redirectNode = redirectList.item(0);
+                        String includeViewParams = getAttribute(redirectNode, "include-view-params");
+                        if (null != includeViewParams && "true".equalsIgnoreCase(includeViewParams)) {
+                            redirector.includeViewParams();
+                        }
+                        NodeList viewParamList = (NodeList) 
+                                xpath.evaluate(".//ns1:redirect-param", redirectNode, XPathConstants.NODESET);
+                        if (null != viewParamList) {
+                            for (int i_viewParam = 0; i_viewParam < viewParamList.getLength(); i_viewParam++) {
+                                Node viewParam = viewParamList.item(i_viewParam);
+                                NodeList nameList = (NodeList) 
+                                        xpath.evaluate(".//ns1:name/text()", viewParam, XPathConstants.NODESET);
+                                if (null == nameList || 1 != nameList.getLength()) {
+                                    throw new XPathExpressionException("Within <redirect-param> must have <name>.");
+                                }
+                                String nameStr = nameList.item(0).getNodeValue().trim();
+                                
+                                NodeList valueList = (NodeList) 
+                                        xpath.evaluate(".//ns1:value/text()", viewParam, XPathConstants.NODESET);
+                                if (null == valueList || 1 != valueList.getLength()) {
+                                    throw new XPathExpressionException("Within <redirect-param> must have <value>.");
+                                }
+                                String valueStr = valueList.item(0).getNodeValue().trim();
+                                redirector.parameter(nameStr, valueStr);
+                            }
+                        }
+                    }
+                }
+                
+                
+            }
+        }
+        // </editor-fold>
+    }
+    
+    private void processViews(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException{
+        // <editor-fold defaultstate="collapsed">
+        NodeList views = (NodeList) xpath.evaluate(".//ns1:view", 
+                flowDefinition, XPathConstants.NODESET);
+        for (int i_view = 0; i_view < views.getLength(); i_view++) {
+            Node viewNode = views.item(i_view);
+            String viewNodeId = getIdAttribute(viewNode);
+            NodeList vdlDocumentList = (NodeList) 
+                    xpath.evaluate(".//ns1:vdl-document/text()", viewNode, XPathConstants.NODESET);
+            if (1 != vdlDocumentList.getLength()) {
+                throw new XPathExpressionException("Within <view> exactly one child is allowed, and it must be a <vdl-document>");
+            }
+            String vdlDocumentStr = vdlDocumentList.item(0).getNodeValue().trim();
+            flowBuilder.viewNode(viewNodeId, vdlDocumentStr);
+        }        
+        // </editor-fold>
+    }
+
+    private void processReturns(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException{
+        // <editor-fold defaultstate="collapsed">
+
+        NodeList returns = (NodeList) xpath.evaluate(".//ns1:flow-return", 
+                flowDefinition, XPathConstants.NODESET);
+        for (int i_return = 0; i_return < returns.getLength(); i_return++) {
+            Node returnNode = returns.item(i_return);
+            NodeList fromOutcomeList = (NodeList) 
+                    xpath.evaluate(".//ns1:from-outcome/text()", returnNode, XPathConstants.NODESET);
+            String id = getIdAttribute(returnNode);
+            if (null != fromOutcomeList && 1 < fromOutcomeList.getLength()) {
+                throw new XPathExpressionException("Within <flow-return id=\"" + id + "\"> only one child is allowed, and it must be a <from-outcome>");
+            } 
+            if (null != fromOutcomeList && 1 == fromOutcomeList.getLength()) {
+                String fromOutcomeStr = fromOutcomeList.item(0).getNodeValue().trim();
+                flowBuilder.returnNode(id).fromOutcome(fromOutcomeStr);
+            }
+            
+        }
+        // </editor-fold>
+    }
+    
+    private void processInboundParameters(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException {
+        // <editor-fold defaultstate="collapsed">
+        NodeList inboundParameters = (NodeList) xpath.evaluate(".//ns1:inbound-parameter", 
+                flowDefinition, XPathConstants.NODESET);
+        for (int i_inbound = 0; i_inbound < inboundParameters.getLength(); i_inbound++) {
+            Node inboundParamNode = inboundParameters.item(i_inbound);
+            NodeList nameList = (NodeList) 
+                    xpath.evaluate(".//ns1:name/text()", inboundParamNode, XPathConstants.NODESET);
+            if (1 < nameList.getLength()) {
+                throw new XPathExpressionException("Within <inbound-parameter> only one <name> child is allowed");
+            }
+            String nameStr = nameList.item(0).getNodeValue().trim();
+            
+            NodeList valueList = (NodeList) 
+                    xpath.evaluate(".//ns1:value/text()", inboundParamNode, XPathConstants.NODESET);
+            if (1 < valueList.getLength()) {
+                throw new XPathExpressionException("Within <inbound-parameter> only one <value> child is allowed");
+            }
+            String valueStr = valueList.item(0).getNodeValue().trim();
+            flowBuilder.inboundParameter(nameStr, valueStr);
+        }
+        // </editor-fold>
+    }
+    
+    private void processFlowCalls(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException {
+        // <editor-fold defaultstate="collapsed">
+        NodeList flowCalls = (NodeList) xpath.evaluate(".//ns1:flow-call", 
+                flowDefinition, XPathConstants.NODESET);
+        for (int i_flowCall = 0; i_flowCall < flowCalls.getLength(); i_flowCall++) {
+            Node flowCallNode = flowCalls.item(i_flowCall);
+            String flowCallId = getIdAttribute(flowCallNode);
+            NodeList facesFlowRefList = (NodeList) 
+                    xpath.evaluate(".//ns1:flow-reference", 
+                    flowCallNode, XPathConstants.NODESET);
+            if (null == facesFlowRefList || 1 != facesFlowRefList.getLength()) {
+                throw new XPathExpressionException("Within <flow-call> must have exactly one <flow-reference>");
+            }
+            Node facesFlowRefNode = facesFlowRefList.item(0);
+
+            NodeList facesFlowIdList = (NodeList) 
+                    xpath.evaluate(".//ns1:flow-id/text()", 
+                    facesFlowRefNode, XPathConstants.NODESET);
+            if (null == facesFlowIdList || 1 != facesFlowIdList.getLength()) {
+                throw new XPathExpressionException("Within <flow-reference> must have exactly one <flow-id>");
+            }
+            
+            String destinationId = facesFlowIdList.item(0).getNodeValue().trim();
+            
+            NodeList definingDocumentIdList = (NodeList) 
+                    xpath.evaluate(".//ns1:flow-document-id/text()", 
+                    facesFlowRefNode, XPathConstants.NODESET);
+            if (null == definingDocumentIdList && 1 != definingDocumentIdList.getLength()) {
+                throw new XPathExpressionException("Within <flow-reference> must have at most one <flow-document-id>");
+            }
+            String definingDocumentId = "";
+            if (null != definingDocumentIdList && 1 == definingDocumentIdList.getLength()) {
+                definingDocumentId = definingDocumentIdList.item(0).getNodeValue().trim();
+            }
+            
+            FlowCallBuilder flowCallBuilder = flowBuilder.flowCallNode(flowCallId);
+                    
+            flowCallBuilder.flowReference(definingDocumentId, destinationId);
+            
+            NodeList outboundParameters = (NodeList) xpath.evaluate(".//ns1:outbound-parameter", 
+                    flowDefinition, XPathConstants.NODESET);
+            if (null != outboundParameters) {
+                for (int i_outbound = 0; i_outbound < outboundParameters.getLength(); i_outbound++) {
+                    Node outboundParamNode = outboundParameters.item(i_outbound);
+                    NodeList nameList = (NodeList) 
+                            xpath.evaluate(".//ns1:name/text()", outboundParamNode, XPathConstants.NODESET);
+                    if (1 < nameList.getLength()) {
+                        throw new XPathExpressionException("Within <outbound-parameter> only one <name> child is allowed");
+                    }
+                    String nameStr = nameList.item(0).getNodeValue().trim();
+                    
+                    NodeList valueList = (NodeList) 
+                            xpath.evaluate(".//ns1:value/text()", outboundParamNode, XPathConstants.NODESET);
+                    if (1 < valueList.getLength()) {
+                        throw new XPathExpressionException("Within <inbound-parameter> only one <value> child is allowed");
+                    }
+                    String valueStr = valueList.item(0).getNodeValue().trim();
+                    flowCallBuilder.outboundParameter(nameStr, valueStr);
+                }
+            }
+            
+        }
+        // </editor-fold>
+    }
+    
+    private void processSwitches(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException {
+        // <editor-fold defaultstate="collapsed">
+        NodeList switches = (NodeList) xpath.evaluate(".//ns1:switch", 
+                flowDefinition, XPathConstants.NODESET);
+        if (null == switches) {
+            return;
+        }
+        for (int i_switch = 0; i_switch < switches.getLength(); i_switch++) {
+            Node switchNode = switches.item(i_switch);
+            String switchId = getIdAttribute(switchNode);
+            SwitchBuilder switchBuilder = flowBuilder.switchNode(switchId);
+            NodeList cases = (NodeList) xpath.evaluate(".//ns1:case", 
+                    switchNode, XPathConstants.NODESET);
+            if (null != cases) {
+                for (int i_case = 0; i_case < cases.getLength(); i_case++) {
+                    Node caseNode = cases.item(i_case);
+                    NodeList ifList = (NodeList) 
+                            xpath.evaluate(".//ns1:if/text()", caseNode, XPathConstants.NODESET);
+                    if (1 < ifList.getLength()) {
+                        throw new XPathExpressionException("Within <case> only one <if> child is allowed");
+                    }
+                    String ifStr = ifList.item(0).getNodeValue().trim();
+
+                    NodeList fromOutcomeList = (NodeList) 
+                            xpath.evaluate(".//ns1:from-outcome/text()", caseNode, XPathConstants.NODESET);
+                    if (1 < fromOutcomeList.getLength()) {
+                        throw new XPathExpressionException("Within <case> only one <from-outcome> child is allowed");
+                    }
+                    String fromOutcomeStr = fromOutcomeList.item(0).getNodeValue().trim();
+                    
+                    switchBuilder.switchCase().condition(ifStr).fromOutcome(fromOutcomeStr);
+                }
+            }
+            
+            NodeList defaultOutcomeList = (NodeList) 
+                    xpath.evaluate(".//ns1:default-outcome/text()", switchNode, XPathConstants.NODESET);
+            if (null != defaultOutcomeList && 1 < defaultOutcomeList.getLength()) {
+                throw new XPathExpressionException("Within <switch> only one <default-outcome> child is allowed");
+            }
+            if (null != defaultOutcomeList) {
+                Node defaultOutcomeNode = defaultOutcomeList.item(0);
+                if (null != defaultOutcomeNode) {
+                    String defaultOutcomeStr = defaultOutcomeNode.getNodeValue().trim();
+                    switchBuilder.defaultOutcome(defaultOutcomeStr);
+                }
+            }
+        }
+        
+        
+        // </editor-fold>
+    }
+    
+    private void processMethodCalls(FacesContext context, XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException {
+        // <editor-fold defaultstate="collapsed">
+        NodeList methodCalls = (NodeList) xpath.evaluate(".//ns1:method-call", 
+                flowDefinition, XPathConstants.NODESET);
+        if (null == methodCalls) {
+            return;
+        }
+        for (int i_methodCall = 0; i_methodCall < methodCalls.getLength(); i_methodCall++) {
+            Node methodCallNode = methodCalls.item(i_methodCall);
+            String methodCallId = getIdAttribute(methodCallNode);
+            MethodCallBuilder methodCallBuilder = flowBuilder.methodCallNode(methodCallId);
+            NodeList methodList = (NodeList) 
+                    xpath.evaluate(".//ns1:method/text()", methodCallNode, XPathConstants.NODESET);
+            if (1 != methodList.getLength()) {
+                throw new XPathExpressionException("Within <method-call> exactly one <method> child is allowed");
+            }
+            String methodStr = methodList.item(0).getNodeValue().trim();
+            
+            NodeList params = (NodeList) xpath.evaluate(".//ns1:parameter", 
+                    methodCallNode, XPathConstants.NODESET);
+            if (null != params) {
+                List<Class> paramTypes = Collections.emptyList();
+                if (0 < params.getLength()) {
+                    paramTypes = new ArrayList<Class>();
+                    List<Parameter> paramList = new ArrayList<Parameter>();
+                    Parameter toAdd = null;
+                    ExpressionFactory ef = context.getApplication().getExpressionFactory();
+                    ELContext elContext = context.getELContext();
+                    ValueExpression ve = null;
+                    
+                    for (int i_param = 0; i_param < params.getLength(); i_param++) {
+                        Node param = params.item(i_param);
+                        NodeList valueList = (NodeList) 
+                                xpath.evaluate(".//ns1:value/text()", param, XPathConstants.NODESET);
+                        if (null == valueList || 1 != valueList.getLength()) {
+                            throw new XPathExpressionException("Within <parameter> exactly one <value> child is allowed");
+                        }
+                        String valueStr = valueList.item(0).getNodeValue().trim();
+                        String classStr = null;
+                        
+                        NodeList classList = (NodeList) 
+                                xpath.evaluate(".//ns1:class/text()", param, XPathConstants.NODESET);
+                        if (null != classList && 1 < classList.getLength()) {
+                            throw new XPathExpressionException("Within <parameter> at most one <class> child is allowed");
+                        }
+                        if (null != classList && 1 == classList.getLength()) {
+                            classStr = classList.item(0).getNodeValue().trim();
+                        }
+                        Class clazz = String.class; 
+                        if (null != classStr) {
+                            try {
+                                clazz = ReflectionUtil.forName(classStr);
+                            } catch (ClassNotFoundException e) {
+                                clazz = Object.class;
+                            }
+                        }
+                        
+                        ve = ef.createValueExpression(elContext, valueStr, clazz);
+                        toAdd = new ParameterImpl(classStr, ve);
+                        paramList.add(toAdd);
+                        paramTypes.add(clazz);
+                    }
+                    methodCallBuilder.parameters(paramList);
+                }
+                Class [] paramArray = new Class[paramTypes.size()];
+                paramTypes.toArray(paramArray);
+                methodCallBuilder.expression(methodStr, paramArray);
+            }
+            
+            NodeList defaultOutcomeList = (NodeList) 
+                    xpath.evaluate(".//ns1:default-outcome/text()", methodCallNode, XPathConstants.NODESET);
+            if (null != defaultOutcomeList && 1 < defaultOutcomeList.getLength()) {
+                throw new XPathExpressionException("Within <method-call> only one <default-outcome> child is allowed");
+            }
+            if (null != defaultOutcomeList) {
+                String defaultOutcomeStr = defaultOutcomeList.item(0).getNodeValue().trim();
+                methodCallBuilder.defaultOutcome(defaultOutcomeStr);
+            }
+            
+        }
+            
+        
+        // </editor-fold>
+    }
+    
+    private void processInitializerFinalizer(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException {
+        // <editor-fold defaultstate="collapsed">
+        NodeList initializerNodeList = (NodeList) 
+                xpath.evaluate(".//ns1:initializer/text()", flowDefinition, XPathConstants.NODESET);
+        if (1 < initializerNodeList.getLength()) {
+            throw new XPathExpressionException("At most one <initializer> is allowed.");
+        }
+        
+        if (1 == initializerNodeList.getLength()) {
+            String initializerStr = initializerNodeList.item(0).getNodeValue().trim();
+            flowBuilder.initializer(initializerStr);
+        }
+
+        NodeList finalizerNodeList = (NodeList) 
+                xpath.evaluate(".//ns1:finalizer/text()", flowDefinition, XPathConstants.NODESET);
+        if (1 < finalizerNodeList.getLength()) {
+            throw new XPathExpressionException("At most one <finalizer> is allowed.");
+        }
+        
+        if (1 == finalizerNodeList.getLength()) {
+            String finalizerStr = finalizerNodeList.item(0).getNodeValue().trim();
+            flowBuilder.finalizer(finalizerStr);
+        }
+        
+        // </editor-fold>
+        
+    }
+    
+    private String processStartNode(XPath xpath, Node flowDefinition, FlowBuilder flowBuilder) throws XPathExpressionException {
+        // <editor-fold defaultstate="collapsed">
+        String startNodeId = null;
+        NodeList startNodeList = (NodeList) xpath.evaluate(".//ns1:start-node/text()", 
+                flowDefinition, XPathConstants.NODESET);
+        if (1 < startNodeList.getLength()) {
+            throw new XPathExpressionException("Within <flow-definition> at most one <start-node> is allowed");
+        }
+        if (null != startNodeList && 1 == startNodeList.getLength()) {
+            startNodeId = startNodeList.item(0).getNodeValue().trim();
+        }
+        
+        return startNodeId;
+        // </editor-fold>
+    }
+    
+    protected String getAttribute(Node node, String attrName) {
+        // <editor-fold defaultstate="collapsed">
+        Util.notNull("flow definition element", node);
+        String result = null;
+        NamedNodeMap attrs = node.getAttributes();
+        
+        if (null != attrs) {
+            Attr idAttr = (Attr) attrs.getNamedItem(attrName);
+            if (null != idAttr) {
+                result = idAttr.getValue();
+            }
+        } 
+
+        return result;
+        // </editor-fold>
+    }
+    
+    protected String getIdAttribute(Node node) throws XPathExpressionException {
+        // <editor-fold defaultstate="collapsed">
+
+        Util.notNull("flow definition element", node);
+        String result = null;
+        NamedNodeMap attrs = node.getAttributes();
+        String localName = "";
+        boolean throwException = false;
+        
+        if (null != attrs) {
+            Attr idAttr = (Attr) attrs.getNamedItem("id");
+            if (null != idAttr) {
+                result = idAttr.getValue();
+                if (!idAttr.isId()) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Element {0} has an id attribute, but it is not declared as type xsd:id", node.getLocalName());
+                    }
+                }
+            } else {
+                localName = node.getLocalName();
+                throwException = true;
+            }
+        } else {
+            localName = node.getLocalName();
+            throwException = true;
+        }
+        
+        if (throwException) {
+            throw new XPathExpressionException("<" + localName + 
+                    "> must have an \"id\" attribute.");
+        }
+        
+        return result;
+        // </editor-fold>
+    }
+
+    
+}
diff --git a/com/sun/faces/config/processor/FactoryConfigProcessor.java b/com/sun/faces/config/processor/FactoryConfigProcessor.java
new file mode 100644
index 0000000..716b1c1
--- /dev/null
+++ b/com/sun/faces/config/processor/FactoryConfigProcessor.java
@@ -0,0 +1,380 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.application.InjectionApplicationFactory;
+import com.sun.faces.context.InjectionFacesContextFactory;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+import javax.faces.FactoryFinder;
+import javax.servlet.ServletContext;
+
+import java.text.MessageFormat;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.concurrent.atomic.AtomicInteger;
+
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/factory</code>.
+ * </p>
+ */
+public class FactoryConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <code>/faces-config/factory</code>
+     */
+    private static final String FACTORY = "factory";
+
+    /**
+     * <code>/faces-config/factory/application-factory</code>
+     */
+    private static final String APPLICATION_FACTORY = "application-factory";
+
+    /**
+     * <code>/faces-config/factory/exception-handler-factory</code>
+     */
+    private static final String EXCEPTION_HANDLER_FACTORY = "exception-handler-factory";
+
+    /**
+     * <code>/faces-config/factory/flash-factory</code>
+     */
+    private static final String FLASH_FACTORY = "flash-factory";
+    
+    /**
+     * <code>/faces-config/factory/visit-context-factory</code>
+     */
+    private static final String VISIT_CONTEXT_FACTORY = "visit-context-factory";
+
+    /**
+     * <code>/faces-config/factory/view-declaration-language-factory</code>
+     */
+    private static final String VIEW_DECLARATION_LANGUAGE_FACTORY = "view-declaration-language-factory";
+
+    /**
+     * <code>/faces-config/factory/tag-handler-helper-factory</code>
+     */
+    private static final String TAG_HANDLER_DELEGATE_FACTORY = "tag-handler-delegate-factory";
+
+    /**
+     * <code>/faces-config/factory/facelet-cache-factory</code>
+     */
+    private static final String FACELET_CACHE_FACTORY = "facelet-cache-factory";
+
+    /**
+     * <code>/faces-config/factory/faces-context-factory</code>
+     */
+    private static final String FACES_CONTEXT_FACTORY = "faces-context-factory";
+
+    /**
+     * <code>/faces-config/factory/client-window-factory</code>
+     */
+    private static final String CLIENT_WINDOW_FACTORY = "client-window-factory";
+
+    /**
+     * <code>/faces-config/factory/partial-view-context-factory</code>
+     */
+    private static final String PARTIAL_VIEW_CONTEXT_FACTORY = "partial-view-context-factory";
+
+    /**
+     * <code>faces-config/factory/lifecycle-factory</code>
+     */
+    private static final String LIFECYCLE_FACTORY = "lifecycle-factory";
+
+    /**
+     * <code>/faces-config/factory/render-kit-factory</code>
+     */
+    private static final String RENDER_KIT_FACTORY = "render-kit-factory";
+
+    /**
+     * <code>/faces-config/factory/external-context-factory</code>
+     */
+    private static final String EXTERNAL_CONTEXT_FACTORY = "external-context-factory";
+    
+    /**
+     * <code>/faces-config/factory/flow-handler-factory</code>
+     */
+    private static final String FLOW_HANDLER_FACTORY = "flow-handler-factory";
+
+    /**
+     * <code>Array of Factory names for post-configuration validation.</code>
+     */
+    private static final String[] FACTORY_NAMES = {
+          FactoryFinder.APPLICATION_FACTORY,
+          FactoryFinder.CLIENT_WINDOW_FACTORY,
+          FactoryFinder.EXCEPTION_HANDLER_FACTORY,
+          FactoryFinder.EXTERNAL_CONTEXT_FACTORY,
+          FactoryFinder.FACES_CONTEXT_FACTORY,          
+          FactoryFinder.FLASH_FACTORY,
+          FactoryFinder.LIFECYCLE_FACTORY,
+          FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+          FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY,
+          FactoryFinder.RENDER_KIT_FACTORY,
+          FactoryFinder.VISIT_CONTEXT_FACTORY,
+          FactoryFinder.FACELET_CACHE_FACTORY,
+          FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY,
+          FactoryFinder.FLOW_HANDLER_FACTORY,
+    };
+
+    private boolean validateFactories = true;
+
+
+    // ------------------------------------------------------------ Constructors
+
+    
+    public FactoryConfigProcessor() { }
+
+
+    // Only called by the cactus test code
+    public FactoryConfigProcessor(boolean validateFactories) {
+
+        this.validateFactories = validateFactories;
+
+    }
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        // track how many FacesContextFactory instances are being added
+        // for this application
+        AtomicInteger facesContextFactoryCount = new AtomicInteger(0);
+
+        // track how many ApplicationFactory instances are being added
+        // for this application
+        AtomicInteger applicationFactoryCount = new AtomicInteger(0);
+
+
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing factory elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList factories = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, FACTORY);
+            if (factories != null && factories.getLength() > 0) {
+                processFactories(factories,
+                                 namespace,
+                                 facesContextFactoryCount,
+                                 applicationFactoryCount);
+            }
+        }
+
+        // If there are more than one ApplicationFactory, FacesContextFactory,
+        // or ExternalContextFactory defined, we will push our Injection
+        // factories onto the factory list so that they are the top-level
+        // factory.  This allows us to inject the default instances into the
+        // custom Application, FacesContext, or ExternalContext
+        // implementations to get around version compatibility issues.
+        // This *must* be called *before* verifyFactoriesExist() as once that
+        // is called, we can't make any changes to the Factory delegation
+        // chain.
+        wrapFactories(applicationFactoryCount.get(),
+                      facesContextFactoryCount.get());
+        
+        // validate that we actually have factories at this point.
+        verifyFactoriesExist();
+
+        // invoke the next config processor
+        invokeNext(sc, documentInfos);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void processFactories(NodeList factories,
+                                  String namespace,
+                                  AtomicInteger fcCount,
+                                  AtomicInteger appCount) {
+
+        for (int i = 0, size = factories.getLength(); i < size; i++) {
+            Node factory = factories.item(i);
+            NodeList children = ((Element) factory)
+                 .getElementsByTagNameNS(namespace, "*");
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                if (APPLICATION_FACTORY.equals(n.getLocalName())) {
+                    appCount.incrementAndGet();
+                    setFactory(FactoryFinder.APPLICATION_FACTORY,
+                               getNodeText(n));
+                } else if (EXCEPTION_HANDLER_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY,
+                               getNodeText(n));
+                } else if (VISIT_CONTEXT_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.VISIT_CONTEXT_FACTORY,
+                               getNodeText(n));
+                } else if (LIFECYCLE_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.LIFECYCLE_FACTORY,
+                               getNodeText(n));
+                } else if (FLASH_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.FLASH_FACTORY,
+                               getNodeText(n));
+                } else if (CLIENT_WINDOW_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.CLIENT_WINDOW_FACTORY,
+                               getNodeText(n));
+                } else if (FACES_CONTEXT_FACTORY.equals(n.getLocalName())) {
+                    fcCount.incrementAndGet();
+                    setFactory(FactoryFinder.FACES_CONTEXT_FACTORY,
+                               getNodeText(n));
+                } else if (RENDER_KIT_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.RENDER_KIT_FACTORY,
+                               getNodeText(n));
+                } else if (VIEW_DECLARATION_LANGUAGE_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+                               getNodeText(n));
+                } else if (TAG_HANDLER_DELEGATE_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY,
+                               getNodeText(n));
+                } else if (FACELET_CACHE_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.FACELET_CACHE_FACTORY,
+                               getNodeText(n));
+                } else if (EXTERNAL_CONTEXT_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.EXTERNAL_CONTEXT_FACTORY,
+                               getNodeText(n));
+                } else if (PARTIAL_VIEW_CONTEXT_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY,
+                               getNodeText(n));
+                } else if (FLOW_HANDLER_FACTORY.equals(n.getLocalName())) {
+                    setFactory(FactoryFinder.FLOW_HANDLER_FACTORY,
+                               getNodeText(n));
+                }
+            }
+        }
+    }
+
+
+    private static void setFactory(String factoryName, String factoryImpl) {
+
+        if (factoryName != null && factoryImpl != null) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Calling FactoryFinder.setFactory({0}, {1})",
+                                factoryName,
+                                factoryImpl));
+            }
+            FactoryFinder.setFactory(factoryName, factoryImpl);
+        }
+
+    }
+
+        
+    private void verifyFactoriesExist() {
+
+        if (validateFactories) {
+            for (int i = 0, len = FACTORY_NAMES.length; i < len; i++) {
+                try {
+                    FactoryFinder.getFactory(FACTORY_NAMES[i]);
+                } catch (Exception e) {
+                    throw new ConfigurationException(
+                          MessageFormat.format("Factory ''{0}'' was not configured properly.",
+                                               FACTORY_NAMES[i]), e);
+                }
+            }
+        }
+
+    }
+
+
+    private void wrapFactories(int appCount, int fcCount) {
+
+        if (appCount > 1) {
+            addInjectionApplicationFactory();
+        }
+        if (fcCount > 1) {
+            addInjectionFacesContextFactory();
+        }
+
+    }
+
+
+    /**
+     * Add the InjectionApplicationFactory as the top-level ApplicationFactory
+     * so that the default instances, provided by {@link com.sun.faces.application.ApplicationFactoryImpl}
+     * can be injected into the actual top-level FacesContext instance (that which
+     * is returned by the InjectionFacesContextFactory's delegate).
+     */
+    private void addInjectionApplicationFactory() {
+
+        FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
+                                 InjectionApplicationFactory.class.getName());
+        
+    }
+
+
+    /**
+     * Add the InjectionFacesContextFactory as the top-level FacesContextFactory
+     * so that the default instances, provided by {@link com.sun.faces.context.FacesContextFactoryImpl}
+     * can be injected into the actual top-level FacesContext instance (that which
+     * is returned by the InjectionFacesContextFactory's delegate).
+     */
+    private void addInjectionFacesContextFactory() {
+
+        FactoryFinder.setFactory(FactoryFinder.FACES_CONTEXT_FACTORY,
+                                 InjectionFacesContextFactory.class.getName());
+
+    }
+
+
+}
diff --git a/com/sun/faces/config/processor/LifecycleConfigProcessor.java b/com/sun/faces/config/processor/LifecycleConfigProcessor.java
new file mode 100644
index 0000000..4204a52
--- /dev/null
+++ b/com/sun/faces/config/processor/LifecycleConfigProcessor.java
@@ -0,0 +1,157 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.config.DocumentInfo;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+import javax.faces.FactoryFinder;
+import javax.faces.event.PhaseListener;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+import javax.servlet.ServletContext;
+import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/lifecycle</code>.
+ * </p>
+ */
+public class LifecycleConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <p>/faces-config/lifecycle</p>
+     */
+    private static final String LIFECYCLE = "lifecycle";
+
+    /**
+     * <p>/faces-config/lifecycle/phase-listener</p>
+     */
+    private static final String PHASE_LISTENER = "phase-listener";
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        LifecycleFactory factory = (LifecycleFactory)
+             FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing lifecycle elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace =
+                 document.getDocumentElement().getNamespaceURI();
+            NodeList lifecycles = 
+                 document.getElementsByTagNameNS(namespace, LIFECYCLE);
+            if (lifecycles != null) {
+                for (int c = 0, csize = lifecycles.getLength(); c < csize; c++) {
+                    Node n = lifecycles.item(c);
+                    if (n.getNodeType() == Node.ELEMENT_NODE) {
+                        NodeList listeners = ((Element) n).getElementsByTagNameNS(namespace,
+                                                                                  PHASE_LISTENER);
+                        addPhaseListeners(sc, factory, listeners);
+                    }
+                }
+            }            
+        }
+        invokeNext(sc, documentInfos);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addPhaseListeners(ServletContext sc, LifecycleFactory factory,
+                                   NodeList phaseListeners) {
+
+        if (phaseListeners != null && phaseListeners.getLength() > 0) {
+            for (int i = 0, size = phaseListeners.getLength(); i < size; i++) {
+                Node plNode = phaseListeners.item(i);
+                String pl = getNodeText(plNode);
+                if (pl != null) {
+                    Object plInstance = createInstance(sc, pl,
+                                                       PhaseListener.class,
+                                                       null,
+                                                       plNode);
+                    if (plInstance != null) {
+                        for (Iterator t = factory.getLifecycleIds(); t.hasNext();)
+                        {
+                            String lfId = (String) t.next();
+                            Lifecycle lifecycle = factory.getLifecycle(lfId);
+                            if (LOGGER.isLoggable(Level.FINE)) {
+                                LOGGER.log(Level.FINE,
+                                           MessageFormat.format(
+                                                "Adding PhaseListener ''{0}'' to lifecycle ''{0}}",
+                                                pl,
+                                                lfId));
+                            }
+                            lifecycle.addPhaseListener((PhaseListener) plInstance);
+                        }
+                    }
+                } 
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/config/processor/ManagedBeanConfigProcessor.java b/com/sun/faces/config/processor/ManagedBeanConfigProcessor.java
new file mode 100644
index 0000000..c043f91
--- /dev/null
+++ b/com/sun/faces/config/processor/ManagedBeanConfigProcessor.java
@@ -0,0 +1,532 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.mgbean.ManagedBeanInfo;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.TypedCollections;
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.config.DocumentInfo;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Document;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.bean.ManagedBean;
+import javax.servlet.ServletContext;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/managed-bean</code>.
+ * </p>
+ */
+public class ManagedBeanConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <p>/faces-config/managed-bean</p>
+     */
+    private static final String MANAGED_BEAN =
+         "managed-bean";
+
+    /**
+     * <p>/faces-config/managed-bean/description</p>
+     */
+    private static final String DESCRIPTION =
+         "description";
+
+    /**
+     * <p>/faces-config/mananged-bean/managed-bean-name</p>
+     */
+    private static final String MGBEAN_NAME =
+         "managed-bean-name";
+
+    /**
+     * <p>/faces-config/managed-bean/mananged-bean-class</p>
+     */
+    private static final String MGBEAN_CLASS =
+         "managed-bean-class";
+
+    /**
+     * <p>/faces-config/managed-bean/managed-bean-scope</p>
+     */
+    private static final String MGBEAN_SCOPE =
+         "managed-bean-scope";
+
+    /**
+     * <p>/faces-config/managed-bean/managed-property</p>
+     */
+    private static final String MG_PROPERTY =
+         "managed-property";
+
+    /**
+     * <p>/faces-config/managed-bean/managed-property/property-name</p>
+     */
+    private static final String MG_PROPERTY_NAME =
+         "property-name";
+
+    /**
+     * <p>/faces-config/managed-bean/managed-property/property-class</p>
+     */
+    private static final String MG_PROPERTY_TYPE =
+         "property-class";
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/map-entries/map-entry/null-value</li>
+     *   <li>/faces-config/managed-bean/managed-property/null-value</li>
+     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry/null-value</li>
+     *   <li>/faces-config/managed-bean/list-entries/null-value</li>
+     *   <li>/faces-config/managed-bean/managed-property/list-entries/null-value</li>
+     * </ul>
+     * </p>
+     */
+    private static final String NULL_VALUE =
+         "null-value";
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/map-entries/map-entry/value</li>
+     *   <li>/faces-config/managed-bean/managed-property/value</li>
+     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry/value</li>
+     *   <li>/faces-config/managed-bean/list-entries/value</li>
+     *   <li>/faces-config/managed-bean/managed-property/list-entries/value</li>
+     * </ul>
+     * </p>
+     */
+    private static final String VALUE =
+         "value";
+
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry/key</li>
+     * </ul>
+     * </p>
+     */
+    private static final String KEY =
+          "key";
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/map-entries/key-class</li>
+     *   <li>/faces-config/managed-bean/managed-property/map-entries/key-class</li>
+     * </ul>
+     * </p>
+     */
+    private static final String MAP_KEY_CLASS =
+         "key-class";
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/map-entries/value-class</li>
+     *   <li>/faces-config/managed-bean/managed-property/map-entries/value-class</li>
+     *   <li>/faces-config/managed-bean/list-entries/value-class</li>
+     *   <li>/faces-config/managed-bean/managed-property/list-entries/value-class</li>
+     * </ul>
+     * </p>
+     */
+    private static final String VALUE_CLASS =
+         "value-class";
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/map-entries/map-entry</li>
+     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry</li>
+     * </ul>
+     * </p>
+     */
+    private static final String MAP_ENTRY =
+         "map-entry";
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/map-entries</li>
+     *   <li>/faces-config/managed-bean/managed-property/map-entries</li>
+     * </ul>
+     * </p>
+     */
+    private static final String MAP_ENTRIES =
+         "map-entries";
+
+    /**
+     * <p>Handles:
+     * <ul>
+     *   <li>/faces-config/managed-bean/list-entries</li>
+     *   <li>/faces-config/managed-bean/managed-property/list-entries</li>     
+     * </ul>
+     * </p>
+     */
+    private static final String LIST_ENTRIES =
+         "list-entries";
+
+
+    /**
+     * <p>
+     *  <code>eager</code> attribute defined in the managed-bean element.
+     * </p>
+     */
+    private static final String EAGER_ATTRIBUTE = "eager";
+
+
+    private static final String DEFAULT_SCOPE = "request";
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        // process annotated managed beans first as managed beans configured
+        // via config files take precedence
+        processAnnotations(ManagedBean.class);
+        
+        BeanManager beanManager =
+              ApplicationAssociate.getInstance(sc).getBeanManager();
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing managed-bean elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement().getNamespaceURI();
+            NodeList managedBeans = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, MANAGED_BEAN);
+            if (managedBeans != null && managedBeans.getLength() > 0) {
+                for (int m = 0, size = managedBeans.getLength();
+                     m < size;
+                     m++) {
+                    addManagedBean(beanManager,
+                                   managedBeans.item(m));
+                }
+
+            }
+        }
+        beanManager.preProcessesBeans();
+        invokeNext(sc, documentInfos);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addManagedBean(BeanManager beanManager,
+                                Node managedBean) {
+
+        NodeList children = managedBean.getChildNodes();
+        String beanName = null;
+        String beanClass = null;
+        String beanScope = null;
+        ManagedBeanInfo.ListEntry listEntry = null;
+        ManagedBeanInfo.MapEntry mapEntry = null;
+        List<Node> managedProperties = null;
+        List<Node> descriptions = null;
+
+        for (int i = 0, size = children.getLength(); i < size; i++) {
+            Node n = children.item(i);
+            if (n.getNodeType() == Node.ELEMENT_NODE) {
+                if (MGBEAN_NAME.equals(n.getLocalName())) {
+                    beanName = getNodeText(n);
+                } else if (MGBEAN_CLASS.equals(n.getLocalName())) {
+                    beanClass = getNodeText(n);
+                } else if (MGBEAN_SCOPE.equals(n.getLocalName())) {
+                    beanScope = getNodeText(n);
+                    if (beanScope == null) {
+                        beanScope = DEFAULT_SCOPE;
+                    }
+                } else if (LIST_ENTRIES.equals(n.getLocalName())) {
+                    listEntry = buildListEntry(n);
+                } else if (MAP_ENTRIES.equals(n.getLocalName())) {
+                    mapEntry = buildMapEntry(n);
+                } else if (MG_PROPERTY.equals(n.getLocalName())) {
+                    if (managedProperties == null) {
+                        managedProperties = new ArrayList<Node>(size);
+                    }
+                    managedProperties.add(n);
+                } else if (DESCRIPTION.equals(n.getLocalName())) {
+                    if (descriptions == null) {
+                        descriptions = new ArrayList<Node>(4);
+                    }
+                    descriptions.add(n);
+                }
+            }
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+	        LOGGER.log(Level.FINE,
+	                   "Begin processing managed bean ''{0}''",
+	                   beanName);
+        }
+
+
+        List<ManagedBeanInfo.ManagedProperty> properties = null;
+        if (managedProperties != null && !managedProperties.isEmpty()) {
+             properties = new ArrayList<ManagedBeanInfo.ManagedProperty>(
+                 managedProperties.size());
+            for (Node managedProperty : managedProperties) {
+                properties.add(buildManagedProperty(managedProperty));
+            }
+        }
+
+        beanManager.register(new ManagedBeanInfo(beanName,
+                                                 beanClass,
+                                                 beanScope,
+                                                 isEager(managedBean,
+                                                         beanName,
+                                                         beanScope),
+                                                 mapEntry,
+                                                 listEntry,
+                                                 properties,
+                                                 getTextMap(descriptions)));
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+	        LOGGER.log(Level.FINE,
+	                   "Completed processing bean ''{0}''",
+	                   beanName);
+        }
+
+    }
+
+
+    private ManagedBeanInfo.ListEntry buildListEntry(Node listEntry) {
+
+        if (listEntry != null) {
+            String valueClass = "java.lang.String";
+            List<String> values = null;
+            NodeList children = listEntry.getChildNodes();
+            for (int i = 0, size = children.getLength(); i < size; i++) {
+                Node child = children.item(i);
+                if (child.getNodeType() == Node.ELEMENT_NODE) {
+                    if (VALUE_CLASS.equals(child.getLocalName())) {
+                        valueClass = getNodeText(child);
+                    } else if (VALUE.equals(child.getLocalName())) {
+                        if (values == null) {
+                            values = new ArrayList<String>(size);
+                        }
+                        values.add(getNodeText(child));
+                    } else if (NULL_VALUE.equals(child.getLocalName())) {
+                        if (values == null) {
+                            values = new ArrayList<String>(size);
+                        }
+                        values.add(ManagedBeanInfo.NULL_VALUE);
+                    }
+                }
+            }
+
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Created ListEntry valueClass={1}, values={3}",
+                                valueClass,
+                                (values != null && !values.isEmpty())
+                                ? values.toString()
+                                : "none"));
+            }
+            return (new ManagedBeanInfo.ListEntry(valueClass,
+                                                  (values == null)
+                                                  ? TypedCollections.dynamicallyCastList(Collections.emptyList(), String.class)
+                                                  : values));
+        }
+
+        return null;
+
+    }
+
+
+    private ManagedBeanInfo.MapEntry buildMapEntry(Node mapEntry) {
+
+        if (mapEntry != null) {
+            String valueClass = "java.lang.String";
+            String keyClass = "java.lang.String";
+            Map<String, String> entries = null;
+            NodeList children = mapEntry.getChildNodes();
+            for (int i = 0, size = children.getLength(); i < size; i++) {
+                Node child = children.item(i);
+                if (child.getNodeType() == Node.ELEMENT_NODE) {
+                    if (VALUE_CLASS.equals(child.getLocalName())) {
+                        valueClass = getNodeText(child);
+                    } else if (MAP_KEY_CLASS.equals(child.getLocalName())) {
+                        keyClass = getNodeText(child);
+                    } else if (MAP_ENTRY.equals(child.getLocalName())) {
+                        if (entries == null) {
+                            entries = new LinkedHashMap<String,String>(8, 1.0f);
+                        }
+                        NodeList c = child.getChildNodes();
+                        String key = null;
+                        String value = null;
+                        for (int j = 0, jsize = c.getLength(); j < jsize; j++) {
+                            Node node = c.item(j);
+                            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                                if (KEY.equals(node.getLocalName())) {
+                                    key = getNodeText(node);
+                                } else if (VALUE.equals(node.getLocalName())) {
+                                    value = getNodeText(node);
+                                } else
+                                if (NULL_VALUE.equals(node.getLocalName())) {
+                                    value = ManagedBeanInfo.NULL_VALUE;
+                                }
+                            }
+                        }
+                        entries.put(key, value);
+                    }
+                }
+            }
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Created MapEntry keyClass={0}, valueClass={1}, entries={3}",
+                                keyClass,
+                                valueClass,
+                                (entries != null)
+                                ? entries.toString()
+                                : "none"));
+            }
+            return (new ManagedBeanInfo.MapEntry(keyClass,
+                                                 valueClass,
+                                                 entries));
+
+        }
+
+        return null;
+    }
+
+
+    private ManagedBeanInfo.ManagedProperty buildManagedProperty(Node managedProperty) {
+
+        if (managedProperty != null) {
+            String propertyName = null;
+            String propertyClass = null;
+            String value = null;
+            ManagedBeanInfo.MapEntry mapEntry = null;
+            ManagedBeanInfo.ListEntry listEntry = null;
+            NodeList children = managedProperty.getChildNodes();
+            for (int i = 0, size = children.getLength(); i < size; i++) {
+                Node child = children.item(i);
+                if (child.getNodeType() == Node.ELEMENT_NODE) {
+                    if (MG_PROPERTY_NAME.equals(child.getLocalName())) {
+                        propertyName = getNodeText(child);
+                    } else if (MG_PROPERTY_TYPE.equals(child.getLocalName())) {
+                        propertyClass = getNodeText(child);
+                    } else if (VALUE.equals(child.getLocalName())) {
+                        value = getNodeText(child);
+                    } else if (NULL_VALUE.equals(child.getLocalName())) {
+                        value = ManagedBeanInfo.NULL_VALUE;
+                    } else if (LIST_ENTRIES.equals(child.getLocalName())) {
+                        listEntry = buildListEntry(child);
+                    } else if (MAP_ENTRIES.equals(child.getLocalName())) {
+                        mapEntry = buildMapEntry(child);
+                    }
+                }
+            }
+
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Adding ManagedProperty propertyName={0}, propertyClass={1}, propertyValue={2}, hasMapEntry={3}, hasListEntry={4}",
+                                propertyName,
+                                ((propertyClass != null)
+                                 ? propertyClass
+                                 : "inferred"),
+                                value,
+                                (mapEntry != null),
+                                (listEntry != null)));
+            }
+            return new ManagedBeanInfo.ManagedProperty(propertyName,
+                                                       propertyClass,
+                                                       value,
+                                                       mapEntry,
+                                                       listEntry);
+        }
+
+        return null;
+    }
+
+
+    private boolean isEager(Node managedBean, String beanName, String scope) {
+
+        NamedNodeMap attributes = managedBean.getAttributes();
+        Node eagerNode = attributes.getNamedItem(EAGER_ATTRIBUTE);
+        boolean eager = false;
+        if (eagerNode != null) {
+            eager = Boolean.valueOf(getNodeText(eagerNode));
+            if (eager && (scope == null || !ELUtils.Scope.APPLICATION.toString().equals(scope))) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.configuration.illegal.eager.bean",
+                               new Object[]{beanName, scope});
+                }
+                eager = false;
+            }
+        }
+
+        return eager;
+
+    }
+   
+
+}
diff --git a/com/sun/faces/config/processor/NavigationConfigProcessor.java b/com/sun/faces/config/processor/NavigationConfigProcessor.java
new file mode 100644
index 0000000..a82c780
--- /dev/null
+++ b/com/sun/faces/config/processor/NavigationConfigProcessor.java
@@ -0,0 +1,389 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.application.ApplicationAssociate;
+import javax.faces.application.NavigationCase;
+import javax.faces.application.NavigationHandler;
+import javax.faces.application.ConfigurableNavigationHandler;
+
+import com.sun.faces.util.FacesLogger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.servlet.ServletContext;
+import javax.xml.xpath.XPathExpressionException;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.text.MessageFormat;
+
+import com.sun.faces.config.DocumentInfo;
+
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/managed-bean</code>.
+ * </p>
+ */
+public class NavigationConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <p>/faces-config/navigation-rule</p>
+     */
+    private static final String NAVIGATION_RULE = "navigation-rule";
+
+    /**
+     * <p>/faces-config/navigation-rule/from-view-id</p>
+     */
+    private static final String FROM_VIEW_ID = "from-view-id";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case</p>
+     */
+    private static final String NAVIGATION_CASE = "navigation-case";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case/from-action</p>
+     */
+    private static final String FROM_ACTION = "from-action";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case/from-outcome</p>
+     */
+    private static final String FROM_OUTCOME = "from-outcome";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case/if</p>
+     */
+    private static final String IF = "if";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case/to-view-id</p>
+     */
+    private static final String TO_VIEW_ID = "to-view-id";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case/to-flow-document-id</p>
+     */
+    private static final String TO_FLOW_DOCUMENT_ID = "to-flow-document-id";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case/redirect</p>
+     */
+    private static final String REDIRECT = "redirect";
+
+    /**
+     * <p>/faces-confg/navigation-rule/navigation-case/redirect/view-param</p>
+     */
+    private static final String VIEW_PARAM = "view-param";
+
+    /**
+     * <p>/faces-confg/navigation-rule/navigation-case/redirect/view-param/name</p>
+     */
+    private static final String VIEW_PARAM_NAME = "name";
+
+    /**
+     * <p>/faces-confg/navigation-rule/navigation-case/redirect/view-param/value</p>
+     */
+    private static final String VIEW_PARAM_VALUE = "value";
+
+    /**
+     * <p>/faces-config/navigation-rule/navigation-case/redirect[@include-page-params]</p>
+     */
+    private static final String INCLUDE_VIEW_PARAMS_ATTRIBUTE = "include-view-params";
+
+    /**
+     * <p>If <code>from-view-id</code> is not defined.<p>
+     */
+    private static final String FROM_VIEW_ID_DEFAULT = "*";
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        NavigationHandler handler = getApplication().getNavigationHandler();
+        for (DocumentInfo documentInfo : documentInfos) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                        MessageFormat.format(
+                                "Processing navigation-rule elements for document: ''{0}''",
+                                documentInfo.getSourceURI()));
+            }
+            Document document = documentInfo.getDocument();
+            String namespace = document.getDocumentElement()
+                    .getNamespaceURI();
+            NodeList navigationRules = document.getDocumentElement()
+                    .getElementsByTagNameNS(namespace, NAVIGATION_RULE);
+            if (navigationRules != null && navigationRules.getLength() > 0) {
+                addNavigationRules(navigationRules, handler, sc);
+            }
+
+        }
+        invokeNext(sc, documentInfos);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addNavigationRules(NodeList navigationRules,
+                                    NavigationHandler navHandler,
+                                    ServletContext sc)
+    throws XPathExpressionException {
+
+            for (int i = 0, size = navigationRules.getLength(); i < size; i++) {
+                Node navigationRule = navigationRules.item(i);
+                if ((!("flow-definition".equals(navigationRule.getParentNode().getLocalName()))) &&
+                    (navigationRule.getNodeType() == Node.ELEMENT_NODE)) {
+                    NodeList children = navigationRule.getChildNodes();
+                    String fromViewId = FROM_VIEW_ID_DEFAULT;
+                    List<Node> navigationCases = null;
+                    for (int c = 0, csize = children.getLength();
+                            c < csize;
+                            c++) {
+                        Node n = children.item(c);
+                        if (n.getNodeType() == Node.ELEMENT_NODE) {
+                            if (FROM_VIEW_ID.equals(n.getLocalName())) {
+                                String t = getNodeText(n);
+                                fromViewId = ((t == null)
+                                        ? FROM_VIEW_ID_DEFAULT
+                                        : t);
+                                if (!fromViewId.equals(FROM_VIEW_ID_DEFAULT) && fromViewId.charAt(0) != '/') {
+                                    if (LOGGER.isLoggable(Level.WARNING)) {
+                                        LOGGER.log(Level.WARNING,
+                                                "jsf.config.navigation.from_view_id_leading_slash",
+                                                new String[] { fromViewId });
+                                    }
+                                    fromViewId = '/' + fromViewId;
+                                }
+                            } else if (NAVIGATION_CASE.equals(n.getLocalName())) {
+                                if (navigationCases == null) {
+                                    navigationCases = new ArrayList<Node>(csize);
+                                }
+                                navigationCases.add(n);
+                            }
+                        }
+                    }
+                    
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                MessageFormat.format(
+                                "Processing navigation rule with 'from-view-id' of ''{0}''",
+                                fromViewId));
+                    }
+                    addNavigationCasesForRule(fromViewId,
+                            navigationCases,
+                            navHandler,
+                            sc);
+                }
+            }
+    }
+
+
+    private void addNavigationCasesForRule(String fromViewId,
+                                           List<Node> navigationCases,
+                                           NavigationHandler navHandler,
+                                           ServletContext sc) {
+
+        if (navigationCases != null && !navigationCases.isEmpty()) {
+            ApplicationAssociate associate =
+                 ApplicationAssociate.getInstance(sc);
+
+            for (Node navigationCase : navigationCases) {
+                if (navigationCase.getNodeType() != Node.ELEMENT_NODE) {
+                    continue;
+                }
+                NodeList children = navigationCase.getChildNodes();
+                String outcome = null;
+                String action = null;
+                String condition = null;
+                String toViewId = null;
+                String toFlowDocumentId = null;
+                Map<String,List<String>> parameters = null;
+                boolean redirect = false;
+                boolean includeViewParams = false;
+                for (int i = 0, size = children.getLength(); i < size; i++) {
+                    Node n = children.item(i);
+                    if (n.getNodeType() == Node.ELEMENT_NODE) {
+                        if (FROM_OUTCOME.equals(n.getLocalName())) {
+                            outcome = getNodeText(n);
+                        } else if (FROM_ACTION.equals(n.getLocalName())) {
+                            action = getNodeText(n);
+                        } else if (IF.equals(n.getLocalName())) {
+                            String expression = getNodeText(n);
+                            if (SharedUtils.isExpression(expression) && !SharedUtils.isMixedExpression(expression)) {
+                                condition = expression;
+                            }
+                            else {
+                                if (LOGGER.isLoggable(Level.WARNING)) {
+                                    LOGGER.log(Level.WARNING,
+                                               "jsf.config.navigation.if_invalid_expression",
+                                               new String[] { expression, fromViewId });
+                                }
+                            }
+                        } else if (TO_VIEW_ID.equals(n.getLocalName())) {
+                            String toViewIdString = getNodeText(n);
+                            if (toViewIdString.charAt(0) != '/' && toViewIdString.charAt(0) != '#') {
+                                if (LOGGER.isLoggable(Level.WARNING)) {
+                                    LOGGER.log(Level.WARNING,
+                                               "jsf.config.navigation.to_view_id_leading_slash",
+                                               new String[] { toViewIdString,
+                                                              fromViewId });
+                                }
+                                toViewId = '/' + toViewIdString;
+                            } else {
+                                toViewId = toViewIdString;
+                            }
+                        } else if (TO_FLOW_DOCUMENT_ID.equals(n.getLocalName())) {
+                            toFlowDocumentId = getNodeText(n);
+                        } else if (REDIRECT.equals(n.getLocalName())) {
+                            parameters = processParameters(n.getChildNodes());
+                            includeViewParams = isIncludeViewParams(n);
+                            redirect = true;
+                        }
+                    }
+                }
+
+                NavigationCase cnc =
+                     new NavigationCase(fromViewId,
+                                        action,
+                                        outcome,
+                                        condition,
+                                        toViewId,
+                                        toFlowDocumentId,
+                                        parameters,
+                                        redirect,
+                                        includeViewParams);
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format("Adding NavigationCase: {0}",
+                                                    cnc.toString()));
+                }
+
+                // if the top-level NavigationHandler is an instance of
+                // ConfigurableNavigationHandler, add the NavigationCases to
+                // that instance as well as adding them to the application associate.
+                // We have to add them to the ApplicationAssociate in the case
+                // where the top-level NavigationHandler may be custom and delegates
+                // to the default NavigationHandler implementation.  In 1.2, they
+                // could be guaranteed that the default implementation had all
+                // defined navigation mappings.
+                if (navHandler instanceof ConfigurableNavigationHandler) {
+                    ConfigurableNavigationHandler cnav = (ConfigurableNavigationHandler) navHandler;
+                    Set<NavigationCase> cases = cnav.getNavigationCases().get(fromViewId);
+                    if (cases == null) {
+                        cases = new LinkedHashSet<NavigationCase>();
+                        cnav.getNavigationCases().put(fromViewId, cases);
+                    }
+                    cases.add(cnc);
+                }
+                associate.addNavigationCase(cnc);
+                
+            }
+
+
+        }
+
+    }
+
+
+    private Map<String,List<String>> processParameters(NodeList children) {
+
+        Map<String,List<String>> parameters = null;
+
+        if (children.getLength() > 0) {
+            parameters = new LinkedHashMap<String,List<String>>(4, 1.0f);
+            for (int i = 0, size = children.getLength(); i < size; i++) {
+                Node n = children.item(i);
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+                    if (VIEW_PARAM.equals(n.getLocalName())) {
+                        String name = null;
+                        String value = null;
+                        NodeList params = n.getChildNodes();
+                        for (int j = 0, jsize = params.getLength(); j < jsize; j++) {
+                            Node pn = params.item(j);
+                            if (pn.getNodeType() == Node.ELEMENT_NODE) {
+                                if (VIEW_PARAM_NAME.equals(pn.getLocalName())) {
+                                    name = getNodeText(pn);
+                                }
+                                if (VIEW_PARAM_VALUE.equals(pn.getLocalName())) {
+                                    value = getNodeText(pn);
+                                }
+                            }
+                        }
+                        if (name != null) {
+                            List<String> values = parameters.get(name);
+                            if (values == null && value != null) {
+                                values = new ArrayList<String>(2);
+                                parameters.put(name, values);
+                            }
+                            if (values != null) {
+                                values.add(value);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return parameters;
+
+    }
+
+
+    private boolean isIncludeViewParams(Node n) {
+
+        return Boolean.valueOf(getNodeText(n.getAttributes().getNamedItem(INCLUDE_VIEW_PARAMS_ATTRIBUTE)));
+
+    }
+
+}
diff --git a/com/sun/faces/config/processor/ProtectedViewsConfigProcessor.java b/com/sun/faces/config/processor/ProtectedViewsConfigProcessor.java
new file mode 100644
index 0000000..63300fb
--- /dev/null
+++ b/com/sun/faces/config/processor/ProtectedViewsConfigProcessor.java
@@ -0,0 +1,168 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.util.FacesLogger;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+import javax.servlet.ServletContext;
+
+import java.text.MessageFormat;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.application.ViewHandler;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/protected-views</code>.
+ * </p>
+ */
+public class ProtectedViewsConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <code>/faces-config/protected-views</code>
+     */
+    private static final String PROTECTED_VIEWS = "protected-views";
+
+    /**
+     * <code>/faces-config/protected-views/url-pattern</code>
+     */
+    private static final String URL_PATTERN = "url-pattern";
+
+    // ------------------------------------------------------------ Constructors
+
+    
+    public ProtectedViewsConfigProcessor() { }
+
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing protected-views element for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList protectedViews = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, PROTECTED_VIEWS);
+            if (protectedViews != null && protectedViews.getLength() > 0) {
+                processProtectedViews(protectedViews,
+                                 namespace, documentInfos[i]);
+            }
+        }
+
+        // invoke the next config processor
+        invokeNext(sc, documentInfos);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void processProtectedViews(NodeList protectedViews,
+                                  String namespace, DocumentInfo info) {
+        WebConfiguration config = null;
+        ViewHandler viewHandler = null;
+
+        for (int i = 0, size = protectedViews.getLength(); i < size; i++) {
+            Node urlPatterns = protectedViews.item(i);
+            NodeList children = ((Element) urlPatterns)
+                 .getElementsByTagNameNS(namespace, "*");
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                String urlPattern = null;
+                if (URL_PATTERN.equals(n.getLocalName())) {
+                    urlPattern = getNodeText(n);
+                } else {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                MessageFormat.format(
+                                "Processing protected-views elements for document: ''{0}'', encountered unexpected configuration ''{1}'', ignoring and continuing",
+                                info.getSourceURI(), getNodeText(n)));
+                    }
+                }
+                
+                if (null != urlPattern) {
+                    if (null == config) {
+                        config = WebConfiguration.getInstance();
+                    }
+                    if (null == viewHandler) {
+                        FacesContext context = FacesContext.getCurrentInstance();
+                        viewHandler = context.getApplication().getViewHandler();
+                    }
+                    viewHandler.addProtectedView(urlPattern);
+                    
+                } else {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                MessageFormat.format(
+                                "Processing protected-views elements for document: ''{0}'', encountered <url-pattern> element without expected children",
+                                info.getSourceURI()));
+                    }
+                }
+            }
+        }
+
+    }
+
+
+}
diff --git a/com/sun/faces/config/processor/RenderKitConfigProcessor.java b/com/sun/faces/config/processor/RenderKitConfigProcessor.java
new file mode 100644
index 0000000..44bb2a3
--- /dev/null
+++ b/com/sun/faces/config/processor/RenderKitConfigProcessor.java
@@ -0,0 +1,376 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.DocumentInfo;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Element;
+
+import javax.faces.FactoryFinder;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.Renderer;
+import javax.faces.render.FacesRenderer;
+import javax.faces.render.FacesBehaviorRenderer;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.LinkedHashMap;
+import java.text.MessageFormat;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/render-kit</code>.
+ * </p>
+ */
+public class RenderKitConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();   
+
+    /**
+     * <p>/faces-config/render-kit</p>
+     */
+    private static final String RENDERKIT = "render-kit";
+
+    /**
+     * <p>/faces-config/render-kit/render-kit-id</p>
+     */
+    private static final String RENDERKIT_ID = "render-kit-id";
+
+    /**
+     * <p>/faces-config/render-kit/render-kit-class</p>
+     */
+    private static final String RENDERKIT_CLASS = "render-kit-class";
+
+    /**
+     * <p>/faces-config/render-kit/renderer</p>
+     */
+    private static final String RENDERER = "renderer";
+
+    /**
+     * <p>/faces-config/render-kit/renderer/component-family</p>
+     */
+    private static final String RENDERER_FAMILY = "component-family";
+
+    /**
+     * <p>/faces-config/render-kit/renderer/renderer-type</p>
+     */
+    private static final String RENDERER_TYPE = "renderer-type";
+
+    /**
+     * <p>/faces-config/render-kit/renderer/renderer-class</p>
+     */
+    private static final String RENDERER_CLASS = "renderer-class";
+
+    /**
+     * <p>/faces-config/render-kit/client-behavior-renderer</p>
+     */
+    private static final String CLIENT_BEHAVIOR_RENDERER = "client-behavior-renderer";
+
+    /**
+     * <p>/faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-type</p>
+     */
+    private static final String CLIENT_BEHAVIOR_RENDERER_TYPE = "client-behavior-renderer-type";
+
+    /**
+     * <p>/faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-class</p>
+     */
+    private static final String CLIENT_BEHAVIOR_RENDERER_CLASS = "client-behavior-renderer-class";
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        Map<String,Map<Document,List<Node>>> renderers =
+              new LinkedHashMap<String,Map<Document,List<Node>>>();
+        Map<String,Map<Document,List<Node>>> behaviorRenderers =
+              new LinkedHashMap<String,Map<Document,List<Node>>>();
+        RenderKitFactory rkf = (RenderKitFactory)
+             FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing render-kit elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement()
+                 .getNamespaceURI();
+            NodeList renderkits = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, RENDERKIT);
+
+            if (renderkits != null && renderkits.getLength() > 0) {
+                addRenderKits(sc, renderkits, document, renderers, behaviorRenderers, rkf);
+            }
+        }
+
+        // process annotated Renderers, ClientBehaviorRenderers first as Renderers configured
+        // via config files take precedence
+        processAnnotations(FacesRenderer.class);
+        processAnnotations(FacesBehaviorRenderer.class);
+
+        // now add the accumulated renderers to the RenderKits
+        for (Map.Entry<String,Map<Document,List<Node>>> entry : renderers.entrySet()) {
+            RenderKit rk = rkf.getRenderKit(null, entry.getKey());
+            if (rk == null) {
+                throw new ConfigurationException(
+                      MessageUtils.getExceptionMessageString(
+                            MessageUtils.RENDERER_CANNOT_BE_REGISTERED_ID,
+                            entry.getKey()));
+            }
+            
+            for (Map.Entry<Document,List<Node>> renderEntry : entry.getValue().entrySet()) {
+                addRenderers(sc, rk, renderEntry.getKey(), renderEntry.getValue());
+            }
+        }
+        // now add the accumulated behavior renderers to the RenderKits
+        for (Map.Entry<String,Map<Document,List<Node>>> entry : behaviorRenderers.entrySet()) {
+            RenderKit rk = rkf.getRenderKit(null, entry.getKey());
+            if (rk == null) {
+                throw new ConfigurationException(
+                      MessageUtils.getExceptionMessageString(
+                            MessageUtils.RENDERER_CANNOT_BE_REGISTERED_ID,
+                            entry.getKey()));
+            }
+            
+            for (Map.Entry<Document,List<Node>> renderEntry : entry.getValue().entrySet()) {
+                addClientBehaviorRenderers(sc, rk, renderEntry.getKey(), renderEntry.getValue());
+            }
+        }
+        invokeNext(sc, documentInfos);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addRenderKits(ServletContext sc, NodeList renderKits,
+                               Document owningDocument,
+                               Map<String,Map<Document,List<Node>>> renderers,
+                               Map<String,Map<Document,List<Node>>> behaviorRenderers,
+                               RenderKitFactory rkf) {
+
+        String namespace = owningDocument.getDocumentElement()
+                 .getNamespaceURI();
+        for (int i = 0, size = renderKits.getLength(); i < size; i++) {
+            Node renderKit = renderKits.item(i);
+            NodeList children = ((Element) renderKit)
+                 .getElementsByTagNameNS(namespace, "*");
+            String rkId = null;
+            String rkClass = null;
+            List<Node> renderersList =
+                 new ArrayList<Node>(children.getLength());
+            List<Node> behaviorRenderersList =
+                 new ArrayList<Node>(children.getLength());
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                if (RENDERKIT_ID.equals(n.getLocalName())) {
+                    rkId = getNodeText(n);
+                } else if (RENDERKIT_CLASS.equals(n.getLocalName())) {
+                    rkClass = getNodeText(n);
+                } else if (RENDERER.equals(n.getLocalName())) {
+                    renderersList.add(n);
+                } else if (CLIENT_BEHAVIOR_RENDERER.equals(n.getLocalName())) {
+                    behaviorRenderersList.add(n);
+                }
+            }
+
+            rkId = ((rkId == null)
+                    ? RenderKitFactory.HTML_BASIC_RENDER_KIT
+                    : rkId);
+
+            if (rkClass != null) {
+                RenderKit previous = rkf.getRenderKit(FacesContext.getCurrentInstance(), 
+                        rkId);
+                RenderKit rk = (RenderKit) createInstance(sc, rkClass,
+                                                          RenderKit.class,
+                                                          previous,
+                                                          renderKit);
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format(
+                                    "Calling RenderKitFactory.addRenderKit({0}, {1})",
+                                    rkId,
+                                    rkClass));
+                }
+                rkf.addRenderKit(rkId, rk);
+            }
+            Map<Document,List<Node>> existingRenderers = renderers.get(rkId);
+            if (existingRenderers != null) {
+                List<Node> list = existingRenderers.get(owningDocument);
+                if (list != null) {
+                    list.addAll(renderersList);
+                } else {
+                    existingRenderers.put(owningDocument, renderersList);
+                }
+            } else {
+                existingRenderers = new LinkedHashMap<Document,List<Node>>();
+                existingRenderers.put(owningDocument, renderersList);
+            }
+            renderers.put(rkId, existingRenderers);
+
+            Map<Document,List<Node>> existingBehaviorRenderers = behaviorRenderers.get(rkId);
+            if (existingBehaviorRenderers != null) {
+                List<Node> list = existingBehaviorRenderers.get(owningDocument);
+                if (list != null) {
+                    list.addAll(behaviorRenderersList);
+                } else {
+                    existingBehaviorRenderers.put(owningDocument, behaviorRenderersList);
+                }
+            } else {
+                existingBehaviorRenderers = new LinkedHashMap<Document,List<Node>>();
+                existingBehaviorRenderers.put(owningDocument, behaviorRenderersList);
+            }
+            behaviorRenderers.put(rkId, existingBehaviorRenderers);
+
+        }
+
+    }
+
+    private void addRenderers(ServletContext sc, RenderKit renderKit,
+                              Document owningDocument,
+                              List<Node> renderers) {
+
+        String namespace = owningDocument.getDocumentElement()
+                 .getNamespaceURI();
+        for (Node renderer : renderers) {
+            NodeList children = ((Element) renderer)
+                 .getElementsByTagNameNS(namespace, "*");
+            String rendererFamily = null;
+            String rendererType = null;
+            String rendererClass = null;
+            for (int i = 0, size = children.getLength(); i < size; i++) {
+                Node n = children.item(i);
+                if (RENDERER_FAMILY.equals(n.getLocalName())) {
+                    rendererFamily = getNodeText(n);
+                } else if (RENDERER_TYPE.equals(n.getLocalName())) {
+                    rendererType = getNodeText(n);
+                } else if (RENDERER_CLASS.equals(n.getLocalName())) {
+                    rendererClass = getNodeText(n);
+                }
+            }
+
+            if ((rendererFamily != null)
+                  && (rendererType != null)
+                  && (rendererClass != null)) {
+                Renderer r = (Renderer) createInstance(sc, rendererClass,
+                                                       Renderer.class,
+                                                       null,
+                                                       renderer);
+                if (r != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Calling RenderKit.addRenderer({0},{1}, {2}) for RenderKit ''{3}''",
+                                        rendererFamily,
+                                        rendererType,
+                                        rendererClass,
+                                        renderKit.getClass()));
+                    }
+                    renderKit.addRenderer(rendererFamily, rendererType, r);
+                }
+            }
+        }
+
+    }
+
+    private void addClientBehaviorRenderers(ServletContext sc, RenderKit renderKit,
+                              Document owningDocument,
+                              List<Node> behaviorRenderers) {
+
+        String namespace = owningDocument.getDocumentElement()
+                 .getNamespaceURI();
+        for (Node behaviorRenderer : behaviorRenderers) {
+            NodeList children = ((Element) behaviorRenderer)
+                 .getElementsByTagNameNS(namespace, "*");
+            String behaviorRendererType = null;
+            String behaviorRendererClass = null;
+            for (int i = 0, size = children.getLength(); i < size; i++) {
+                Node n = children.item(i);
+                if (CLIENT_BEHAVIOR_RENDERER_TYPE.equals(n.getLocalName())) {
+                    behaviorRendererType = getNodeText(n);
+                } else if (CLIENT_BEHAVIOR_RENDERER_CLASS.equals(n.getLocalName())) {
+                    behaviorRendererClass = getNodeText(n);
+                }
+            }
+
+            if ((behaviorRendererType != null)
+                  && (behaviorRendererClass != null)) {
+                ClientBehaviorRenderer r = (ClientBehaviorRenderer) createInstance(sc, behaviorRendererClass,
+                                                       ClientBehaviorRenderer.class,
+                                                       null,
+                                                       behaviorRenderer);                
+                if (r != null) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.log(Level.FINE,
+                                   MessageFormat.format(
+                                        "Calling RenderKit.addClientBehaviorRenderer({0},{1}, {2}) for RenderKit ''{2}''",
+                                        behaviorRendererType,
+                                        behaviorRendererClass,
+                                        renderKit.getClass()));
+                    }
+                    renderKit.addClientBehaviorRenderer(behaviorRendererType, r);
+                }
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/config/processor/ResourceLibraryContractsConfigProcessor.java b/com/sun/faces/config/processor/ResourceLibraryContractsConfigProcessor.java
new file mode 100644
index 0000000..133509e
--- /dev/null
+++ b/com/sun/faces/config/processor/ResourceLibraryContractsConfigProcessor.java
@@ -0,0 +1,205 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.config.processor;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.util.FacesLogger;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.servlet.ServletContext;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class ResourceLibraryContractsConfigProcessor extends AbstractConfigProcessor {
+
+    /**
+     * Stores the logger.
+     */
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+    /**
+     * <code>/faces-config/resource-library-contracts</code>
+     */
+    private static final String RESOURCE_LIBRARY_CONTRACTS = "resource-library-contracts";
+
+    /**
+     * Constructor.
+     */
+    public ResourceLibraryContractsConfigProcessor() {
+    }
+
+    /**
+     * Process the configuration documents.
+     *
+     * @param servletContext the servlet context.
+     * @param documentInfos the document info(s).
+     * @throws Exception when an error occurs.
+     */
+    @Override
+    public void process(ServletContext servletContext, DocumentInfo[] documentInfos) throws Exception {
+
+        HashMap<String, List<String>> map = new HashMap<String, List<String>>();
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE, MessageFormat.format(
+                        "Processing factory elements for document: ''{0}''",
+                        documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement().getNamespaceURI();
+            NodeList resourceLibraryContracts = document.getDocumentElement().getElementsByTagNameNS(namespace, RESOURCE_LIBRARY_CONTRACTS);
+            if (resourceLibraryContracts != null && resourceLibraryContracts.getLength() > 0) {
+                processResourceLibraryContracts(resourceLibraryContracts, map);
+            }
+
+        }
+
+        if (!map.isEmpty()) {
+            ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
+            associate.setResourceLibraryContracts(map);
+        }
+
+        invokeNext(servletContext, documentInfos);
+    }
+
+    /**
+     * Process the resource library contracts.
+     *
+     * @param resourceLibraryContracts the resource library contracts.
+     * @param map the set of resource library contracts.
+     */
+    private void processResourceLibraryContracts(NodeList resourceLibraryContracts, HashMap<String, List<String>> map) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        xpath.setNamespaceContext(new FacesConfigNamespaceContext());
+        for (int c = 0; c < resourceLibraryContracts.getLength(); c++) {
+            Node node = resourceLibraryContracts.item(c);
+            try {
+                NodeList mappings = (NodeList) xpath.evaluate(".//ns1:contract-mapping", node, XPathConstants.NODESET);
+                if (mappings != null) {
+                    for (int m = 0; m < mappings.getLength(); m++) {
+                        Node contractMapping = mappings.item(m);
+                        NodeList urlPatterns = (NodeList) xpath.evaluate(".//ns1:url-pattern/text()", contractMapping, XPathConstants.NODESET);
+                        if (urlPatterns != null) {
+                            for (int p = 0; p < urlPatterns.getLength(); p++) {
+                                String urlPattern = urlPatterns.item(p).getNodeValue().trim();
+
+                                if (LOGGER.isLoggable(Level.INFO)) {
+                                    LOGGER.log(Level.INFO, "Processing resource library contract mapping for url-pattern: {0}", urlPattern);
+                                }
+
+                                if (!map.containsKey(urlPattern)) {
+                                    /*
+                                     * If there is no urlPattern then add it to the list,
+                                     */
+                                    ArrayList<String> list = new ArrayList<String>();
+                                    NodeList contracts = (NodeList) xpath.evaluate(".//ns1:contracts/text()", contractMapping, XPathConstants.NODESET);
+                                    if (contracts != null && contracts.getLength() > 0) {
+                                        for (int j = 0; j < contracts.getLength(); j++) {
+                                            String[] contractStrings = contracts.item(j).getNodeValue().trim().split(",");
+                                            for (int k = 0; k < contractStrings.length; k++) {
+                                                if (!list.contains(contractStrings[k])) {
+                                                    if (LOGGER.isLoggable(Level.INFO)) {
+                                                        LOGGER.log(Level.INFO,
+                                                                "Added contract: {0} for url-pattern: {1}",
+                                                                new Object[]{contractStrings[k], urlPattern});
+                                                    }
+                                                    list.add(contractStrings[k]);
+                                                } else {
+                                                    /*
+                                                     * We found the contract again in the list for the specified url-pattern.
+                                                     */
+                                                    if (LOGGER.isLoggable(Level.INFO)) {
+                                                        LOGGER.log(Level.INFO,
+                                                                "Duplicate contract: {0} found for url-pattern: {1}",
+                                                                new Object[]{contractStrings[k], urlPattern});
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+
+                                    if (!list.isEmpty()) {
+                                        /*
+                                         * Now add the url-pattern and its contracts.
+                                         */
+                                        map.put(urlPattern, list);
+                                    } else {
+                                        /*
+                                         * The list was empty, log there were no contracts specified.
+                                         */
+                                        if (LOGGER.isLoggable(Level.INFO)) {
+                                            LOGGER.log(Level.INFO, "No contracts found for url-pattern: {0}", urlPattern);
+                                        }
+                                    }
+                                } else {
+                                    /*
+                                     * Otherwise log there is a duplicate url-pattern found.
+                                     */
+                                    if (LOGGER.isLoggable(Level.INFO)) {
+                                        LOGGER.log(Level.INFO, "Duplicate url-patern found: {0}, ignoring it", urlPattern);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            } catch (XPathExpressionException exception) {
+                /*
+                 * This particular exception will never happen since the 
+                 * above valid XPath expressions never change, but the XPath 
+                 * runtime defines it as a checked exception so we have to 
+                 * deal with it.
+                 */
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Unable to parse XPath expression", exception);
+                }
+            }
+        }
+    }
+}
diff --git a/com/sun/faces/config/processor/SharedUtils.java b/com/sun/faces/config/processor/SharedUtils.java
new file mode 100644
index 0000000..a484d86
--- /dev/null
+++ b/com/sun/faces/config/processor/SharedUtils.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+class SharedUtils {
+
+    /*
+    * Determine whether String is a mixed value binding expression or not.
+    */
+    static boolean isMixedExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        // if it doesn't start and end with delimiters
+        return (!(expression.startsWith("#{") && expression.endsWith("}")))
+                  && isExpression(expression);
+
+    }
+
+
+    /*
+    * Determine whether String is a value binding expression or not.
+    */
+    static boolean isExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        //check to see if attribute has an expression
+        int start = expression.indexOf("#{");
+        return start != -1 && expression.indexOf('}', start+2) != -1;
+    }
+
+    static Map<String, List<String>> evaluateExpressions(FacesContext context, Map<String, List<String>> map) {
+        if (map != null && !map.isEmpty()) {
+            Map<String, List<String>> ret = new HashMap<String, List<String>>(map.size());
+            for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+                ret.put(entry.getKey(), evaluateExpressions(context, entry.getValue()));
+            }
+            
+            return ret;
+        }
+        
+        return map;
+    }
+     
+    static List<String> evaluateExpressions(FacesContext context, List<String> values) {
+         if (!values.isEmpty()) {
+             List<String> ret = new ArrayList<String>(values.size());
+             Application app = context.getApplication();
+             for (String val : values) {
+                 if (val != null) {
+                     String value = val.trim();
+                     if (isExpression(value)) {
+                         value = app.evaluateExpressionGet(context,
+                                                           value,
+                                                           String.class);
+                     }
+                     ret.add(value);
+                 }
+             }
+             
+             return ret;
+         }
+         return values;
+     }
+
+
+
+}
+
+     
+
diff --git a/com/sun/faces/config/processor/ValidatorConfigProcessor.java b/com/sun/faces/config/processor/ValidatorConfigProcessor.java
new file mode 100644
index 0000000..2997389
--- /dev/null
+++ b/com/sun/faces/config/processor/ValidatorConfigProcessor.java
@@ -0,0 +1,197 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config.processor;
+
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.Verifier;
+import com.sun.faces.config.DocumentInfo;
+import com.sun.faces.util.FacesLogger;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
+
+import javax.faces.application.Application;
+import javax.faces.validator.Validator;
+import javax.faces.validator.FacesValidator;
+import javax.servlet.ServletContext;
+import javax.xml.xpath.XPathExpressionException;
+import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.validator.BeanValidator;
+
+/**
+ * <p>
+ *  This <code>ConfigProcessor</code> handles all elements defined under
+ *  <code>/faces-config/valiator</code>.
+ * </p>
+ */
+public class ValidatorConfigProcessor extends AbstractConfigProcessor {
+
+    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+    /**
+     * <p>/faces-config/validator</p>
+     */
+    private static final String VALIDATOR = "validator";
+
+    /**
+     * <p>/faces-config/component/validator-id</p>
+     */
+    private static final String VALIDATOR_ID = "validator-id";
+
+    /**
+     * <p>/faces-config/component/validator-class</p>
+     */
+    private static final String VALIDATOR_CLASS = "validator-class";
+    
+
+    // -------------------------------------------- Methods from ConfigProcessor
+
+
+    /**
+     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
+     */
+    public void process(ServletContext sc, DocumentInfo[] documentInfos)
+    throws Exception {
+
+        // process annotated Validators first as Validators configured
+        // via config files take precedence
+        processAnnotations(FacesValidator.class);
+
+        for (int i = 0; i < documentInfos.length; i++) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           MessageFormat.format(
+                                "Processing validator elements for document: ''{0}''",
+                                documentInfos[i].getSourceURI()));
+            }
+            Document document = documentInfos[i].getDocument();
+            String namespace = document.getDocumentElement().getNamespaceURI();
+            NodeList validators = document.getDocumentElement()
+                 .getElementsByTagNameNS(namespace, VALIDATOR);
+            if (validators != null && validators.getLength() > 0) {
+                addValidators(validators, namespace);
+            }
+        }
+        processDefaultValidatorIds();
+
+        invokeNext(sc, documentInfos);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+    private void processDefaultValidatorIds() {
+
+        Application app = getApplication();
+        Map<String,String> defaultValidatorInfo = app.getDefaultValidatorInfo();
+        for (Map.Entry<String,String> info : defaultValidatorInfo.entrySet()) {
+            String defaultValidatorId = info.getKey();
+            boolean found = false;
+            for (Iterator<String> registered = app.getValidatorIds(); registered.hasNext(); ) {
+                if (defaultValidatorId.equals(registered.next())) {
+                    found = true;
+                    break;
+                }
+            }
+            if (!found) {
+                String msg = MessageFormat.format("Default validator ''{0}'' does not reference a registered validator.", defaultValidatorId);
+                throw new ConfigurationException(msg);
+            }
+        }
+        
+    }
+
+    private void addValidators(NodeList validators, String namespace)
+    throws XPathExpressionException {
+
+        Application app = getApplication();
+        Verifier verifier = Verifier.getCurrentInstance();
+        for (int i = 0, size = validators.getLength(); i < size; i++) {
+            Node validator = validators.item(i);
+
+            NodeList children = ((Element) validator)
+                 .getElementsByTagNameNS(namespace, "*");
+            String validatorId = null;
+            String validatorClass = null;
+            for (int c = 0, csize = children.getLength(); c < csize; c++) {
+                Node n = children.item(c);
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+                    if (VALIDATOR_ID.equals(n.getLocalName())) {
+                        validatorId = getNodeText(n);
+                    } else if (VALIDATOR_CLASS.equals(n.getLocalName())) {
+                        validatorClass = getNodeText(n);
+                    }
+                }
+            }
+
+            if (validatorId != null && validatorClass != null) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                               MessageFormat.format(
+                                    "Calling Application.addValidator({0},{1})",
+                                    validatorId,
+                                    validatorClass));
+                }
+                
+                boolean doAdd = true;
+                if (validatorId.equals(BeanValidator.VALIDATOR_ID)) {
+                    doAdd = ApplicationConfigProcessor.isBeanValidatorAvailable();
+                }
+                
+                if (doAdd) {
+                    if (verifier != null) {
+                        verifier.validateObject(Verifier.ObjectType.VALIDATOR,
+                                validatorClass,
+                                Validator.class);
+                    }
+                    app.addValidator(validatorId, validatorClass);
+                }
+            }
+
+        }
+    }
+    
+}
diff --git a/com/sun/faces/context/AjaxExceptionHandlerImpl.java b/com/sun/faces/context/AjaxExceptionHandlerImpl.java
new file mode 100644
index 0000000..4d6a5bd
--- /dev/null
+++ b/com/sun/faces/context/AjaxExceptionHandlerImpl.java
@@ -0,0 +1,267 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.ExceptionHandlerWrapper;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialResponseWriter;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.event.PhaseId;
+
+import com.sun.faces.util.FacesLogger;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+
+/**
+ * <p>
+ * A specialized implementation of {@link ExceptionHandler} for JSF 2.0 that
+ * handles exceptions by writing error information to the 
+ * partial response.
+ * </p>
+ *
+ */
+public class AjaxExceptionHandlerImpl extends ExceptionHandlerWrapper {
+
+    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+    private static final String LOG_BEFORE_KEY =
+          "jsf.context.exception.handler.log_before";
+    private static final String LOG_AFTER_KEY =
+          "jsf.context.exception.handler.log_after";
+    private static final String LOG_KEY =
+          "jsf.context.exception.handler.log";
+
+    
+    private LinkedList<ExceptionQueuedEvent> unhandledExceptions;
+    private LinkedList<ExceptionQueuedEvent> handledExceptions;
+    private ExceptionQueuedEvent handled;
+    private ExceptionHandler exceptionHandler = null;
+
+
+    public AjaxExceptionHandlerImpl(ExceptionHandler handler) {
+        this.exceptionHandler = handler;
+    }
+
+    public ExceptionHandler getWrapped() {
+        return this.exceptionHandler;
+    }
+
+    /**
+     * @see ExceptionHandler#getHandledExceptionQueuedEvent() 
+     */
+    @Override
+    public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
+
+        return handled;
+
+    }
+
+    /**
+     * @see javax.faces.context.ExceptionHandlerWrapper#handle()
+     */
+    public void handle() throws FacesException {
+
+        for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext(); ) {
+            ExceptionQueuedEvent event = i.next();
+            ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
+            try {
+                Throwable t = context.getException();
+                if (isRethrown(t)) {
+                    handled = event;
+                    Throwable unwrapped = getRootCause(t);
+
+                    if (unwrapped != null) {
+                        handlePartialResponseError(context.getContext(), unwrapped);
+                    } else {
+                        if (t instanceof FacesException) {
+                            handlePartialResponseError(context.getContext(), t);
+                        } else {
+                            handlePartialResponseError(context.getContext(), 
+                                    new FacesException(t.getMessage(), t));
+                        }
+                    }
+                } else {
+                    log(context);
+                }
+
+            } finally {
+                if (handledExceptions == null) {
+                    handledExceptions = new LinkedList<ExceptionQueuedEvent>();
+                }
+                handledExceptions.add(event);
+                i.remove();
+            }
+        }
+    }
+
+    /**
+     * @see javax.faces.context.ExceptionHandlerWrapper#processEvent(javax.faces.event.SystemEvent)
+     */
+    public void processEvent(SystemEvent event) throws AbortProcessingException {
+
+        if (event != null) {
+            if (unhandledExceptions == null) {
+                unhandledExceptions = new LinkedList<ExceptionQueuedEvent>();
+            }
+            unhandledExceptions.add((ExceptionQueuedEvent) event);
+        }
+
+    }
+
+    /**
+     * @see javax.faces.context.ExceptionHandlerWrapper#getUnhandledExceptionQueuedEvents()
+     */
+    public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
+
+        return ((unhandledExceptions != null)
+                    ? unhandledExceptions
+                    : Collections.<ExceptionQueuedEvent>emptyList());
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExceptionHandlerWrapper#getHandledExceptionQueuedEvents()
+     */
+    public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
+
+        return ((handledExceptions != null)
+                    ? handledExceptions
+                    : Collections.<ExceptionQueuedEvent>emptyList());
+
+    }
+
+
+
+    // --------------------------------------------------------- Private Methods
+
+     private void handlePartialResponseError(FacesContext context, Throwable t) {
+         if (context.getResponseComplete()) {
+             return; // don't write anything if the response is complete
+         }
+         try {
+
+             ExternalContext extContext = context.getExternalContext();
+             extContext.setResponseContentType("text/xml");
+             extContext.addResponseHeader("Cache-Control", "no-cache");
+             PartialResponseWriter writer = context.getPartialViewContext().getPartialResponseWriter();
+
+             writer.startDocument();
+             writer.startError(t.getClass().toString());
+             String msg = "";
+             if (t.getCause() != null) {
+                 msg = t.getCause().getMessage();
+                 writer.write(((msg != null) ? msg : ""));
+             } else {
+                 msg = t.getMessage();
+                 writer.write(((msg != null) ? msg : ""));
+             }
+             writer.endError();
+             writer.endDocument();
+             
+             if (LOGGER.isLoggable(Level.SEVERE)) {
+                 StringWriter sw = new StringWriter();
+                 PrintWriter pw = new PrintWriter(sw);
+                 t.printStackTrace(pw);
+                 LOGGER.log(Level.SEVERE, sw.toString());
+             }
+             
+             context.responseComplete();
+         } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           ioe.toString(),
+                           ioe);
+            }
+         }
+     }
+
+    private boolean isRethrown(Throwable t) {
+
+        return (!(t instanceof AbortProcessingException));
+
+    }
+
+    private void log(ExceptionQueuedEventContext exceptionContext) {
+
+        UIComponent c = exceptionContext.getComponent();
+        boolean beforePhase = exceptionContext.inBeforePhase();
+        boolean afterPhase = exceptionContext.inAfterPhase();
+        PhaseId phaseId = exceptionContext.getPhaseId();
+        Throwable t = exceptionContext.getException();
+        String key = getLoggingKey(beforePhase, afterPhase);
+        if (LOGGER.isLoggable(Level.SEVERE)) {
+            LOGGER.log(Level.SEVERE,
+                       key,
+                       new Object[] { t.getClass().getName(),
+                                      phaseId.toString(),
+                                      ((c != null) ? c.getClientId(exceptionContext.getContext()) : ""),
+                                      t.getMessage()});
+            LOGGER.log(Level.SEVERE, t.getMessage(), t);
+        }
+
+    }
+
+    private String getLoggingKey(boolean beforePhase, boolean afterPhase) {
+        if (beforePhase) {
+            return LOG_BEFORE_KEY;
+        } else if (afterPhase) {
+            return LOG_AFTER_KEY;
+        } else {
+            return LOG_KEY;
+        }
+    }
+
+}
diff --git a/com/sun/faces/context/AjaxNoAjaxExceptionHandler.java b/com/sun/faces/context/AjaxNoAjaxExceptionHandler.java
new file mode 100644
index 0000000..84e0547
--- /dev/null
+++ b/com/sun/faces/context/AjaxNoAjaxExceptionHandler.java
@@ -0,0 +1,69 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.context;
+
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.ExceptionHandlerWrapper;
+import javax.faces.context.FacesContext;
+
+public class AjaxNoAjaxExceptionHandler extends ExceptionHandlerWrapper {
+    
+    private AjaxExceptionHandlerImpl ajaxExceptionHandlerImpl;
+    private ExceptionHandlerImpl exceptionHandlerImpl;
+
+    public AjaxNoAjaxExceptionHandler(AjaxExceptionHandlerImpl ajaxExceptionHandlerImpl, ExceptionHandlerImpl exceptionHandlerImpl) {
+        this.ajaxExceptionHandlerImpl = ajaxExceptionHandlerImpl;
+        this.exceptionHandlerImpl = exceptionHandlerImpl;
+    }
+
+    @Override
+    public ExceptionHandler getWrapped() {
+        FacesContext fc = FacesContext.getCurrentInstance();
+        if (null != fc && fc.getPartialViewContext().isAjaxRequest()) {
+            return ajaxExceptionHandlerImpl;
+        }
+        return exceptionHandlerImpl;
+        
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/context/AlwaysPuttingSessionMap.java b/com/sun/faces/context/AlwaysPuttingSessionMap.java
new file mode 100644
index 0000000..a9b7f90
--- /dev/null
+++ b/com/sun/faces/context/AlwaysPuttingSessionMap.java
@@ -0,0 +1,65 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.context;
+
+import javax.faces.application.ProjectStage;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+public class AlwaysPuttingSessionMap extends SessionMap {
+
+    public AlwaysPuttingSessionMap(HttpServletRequest request, ProjectStage stage) {
+        super(request, stage);
+    }
+
+    @Override
+    public Object put(String key, Object value) {
+        HttpSession session = getSession(true);
+        Object result = session.getAttribute(key);
+        session.setAttribute(key, value);
+        
+        return result;
+    }
+    
+    
+    
+    
+}
diff --git a/com/sun/faces/context/ApplicationMap.java b/com/sun/faces/context/ApplicationMap.java
new file mode 100644
index 0000000..38b8730
--- /dev/null
+++ b/com/sun/faces/context/ApplicationMap.java
@@ -0,0 +1,163 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Iterator;
+
+import javax.servlet.ServletContext;
+
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getApplicationMap()
+ */
+public class ApplicationMap extends BaseContextMap<Object> {
+
+    private final ServletContext servletContext;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ApplicationMap(ServletContext servletContext) {
+        this.servletContext = servletContext;
+    }
+    
+    public Object getContext() {
+        return this.servletContext;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public void clear() {
+        for (Enumeration e = servletContext.getAttributeNames();
+             e.hasMoreElements(); ) {
+            servletContext.removeAttribute((String) e.nextElement());
+        }
+    }
+
+
+    // Supported by maps if overridden
+    @Override
+    public void putAll(Map t) {
+        for (Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry entry = (Map.Entry) i.next();
+            servletContext.setAttribute((String) entry.getKey(),
+                                        entry.getValue());
+        }
+    }
+
+
+    @Override
+    public Object get(Object key) {
+        Util.notNull("key", key);
+        return servletContext.getAttribute(key.toString());
+    }
+
+
+    @Override
+    public Object put(String key, Object value) {
+        Util.notNull("key", key);
+        Object result = servletContext.getAttribute(key);
+        servletContext.setAttribute(key, value);
+        return (result);
+    }
+
+
+    @Override
+    public Object remove(Object key) {
+        if (key == null) {
+            return null;
+        }
+        String keyString = key.toString();
+        Object result = servletContext.getAttribute(keyString);
+        servletContext.removeAttribute(keyString);
+        return (result);
+    }
+
+
+    @Override
+    public boolean containsKey(Object key) {
+        return (servletContext.getAttribute(key.toString()) != null);
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null || !(obj instanceof ApplicationMap))
+                   && super.equals(obj);
+    }
+
+
+    @Override
+    public int hashCode() {
+        int hashCode = 7 * servletContext.hashCode();
+        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
+            hashCode += i.next().hashCode();
+        }
+        return hashCode;
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    @SuppressWarnings("unchecked")
+    protected Iterator<Map.Entry<String, Object>> getEntryIterator() {
+        return new EntryIterator(servletContext.getAttributeNames());
+    }
+
+    @SuppressWarnings("unchecked")
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(servletContext.getAttributeNames());
+    }
+
+    @SuppressWarnings("unchecked")
+    protected Iterator<Object> getValueIterator() {
+        return new ValueIterator(servletContext.getAttributeNames());
+    }
+
+} // END ApplicationMap
diff --git a/com/sun/faces/context/BaseContextMap.java b/com/sun/faces/context/BaseContextMap.java
new file mode 100644
index 0000000..e4620dd
--- /dev/null
+++ b/com/sun/faces/context/BaseContextMap.java
@@ -0,0 +1,360 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.AbstractMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.AbstractSet;
+import java.util.AbstractCollection;
+import java.util.Enumeration;
+
+/**
+ * <p>
+ * This is the base Map for all Map instances required by @{link ExternalContext}.
+ * </p>
+ */
+abstract class BaseContextMap<V> extends AbstractMap<String,V> {
+
+    private Set<Map.Entry<String, V>> entrySet;
+    private Set<String> keySet;
+    private Collection<V> values;
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    // Supported by maps if overridden
+    @Override
+    public void clear() {
+        throw new UnsupportedOperationException();
+    }
+
+
+    // Supported by maps if overridden
+    @Override
+    public void putAll(Map t) {
+        throw new UnsupportedOperationException();
+    }
+
+
+    public Set<Map.Entry<String, V>> entrySet() {
+        if (entrySet == null) {
+            entrySet = new EntrySet();
+        }
+
+        return entrySet;
+    }
+
+
+    @Override
+    public Set<String> keySet() {
+        if (keySet == null) {
+            keySet = new KeySet();
+        }
+
+        return keySet;
+    }
+
+
+    @Override
+    public Collection<V> values() {
+        if (values == null) {
+            values = new ValueCollection();
+        }
+
+        return values;
+    }
+
+
+    // Supported by maps if overridden
+    @Override
+    public V remove(Object key) {
+        throw new UnsupportedOperationException();
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected boolean removeKey(Object key) {
+        return (this.remove(key) != null);
+    }
+
+
+    protected boolean removeValue(Object value) {
+        boolean valueRemoved = false;
+        if (value == null) {
+            return false;
+        }
+        if (containsValue(value)) {
+            for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
+                Map.Entry e = (Map.Entry) i.next();
+                if (value.equals(e.getValue())) {
+                    valueRemoved = (remove(e.getKey()) != null);
+                }
+            }
+        }
+        return valueRemoved;
+    }
+
+
+    protected abstract Iterator<Map.Entry<String, V>> getEntryIterator();
+    protected abstract Iterator<String> getKeyIterator();
+    protected abstract Iterator<V> getValueIterator();
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    abstract class BaseSet<E> extends AbstractSet<E> {
+
+        public int size() {
+            int size = 0;
+            for (Iterator<E> i = iterator(); i.hasNext(); size++) {
+                i.next();
+            }
+            return size;
+        }
+
+    }
+
+
+    class EntrySet extends BaseSet<Map.Entry<String, V>> {
+
+        public Iterator<Map.Entry<String, V>> iterator() {
+            return getEntryIterator();
+        }
+
+        @Override
+        public boolean remove(Object o) {
+            return o instanceof Map.Entry
+                   && removeKey(((Map.Entry) o).getKey());
+        }
+
+    }
+
+
+    class KeySet extends BaseSet<String> {
+
+        public Iterator<String> iterator() {
+            return getKeyIterator();
+        }
+
+
+        @Override
+        public boolean contains(Object o) {
+            return BaseContextMap.this.containsKey(o);
+        }
+
+        @Override
+        public boolean remove(Object o) {
+            return o instanceof String && removeKey(o);
+        }
+    }
+
+
+    class ValueCollection extends AbstractCollection<V> {
+
+        public int size() {
+            int size = 0;
+            for (Iterator i = iterator(); i.hasNext(); size++) {
+                i.next();
+            }
+            return size;
+        }
+        
+        public Iterator<V> iterator() {
+            return getValueIterator();
+        }
+
+        @Override
+        public boolean remove(Object o) {
+            return removeValue(o);
+        }
+    }
+
+
+    abstract class BaseIterator<E> implements Iterator<E> {
+
+        protected Enumeration e;
+        protected String currentKey;
+        protected boolean removeCalled = false;
+
+        BaseIterator(Enumeration e) {
+            this.e = e;
+        }
+
+        public boolean hasNext() {
+            return e.hasMoreElements();
+        }
+
+        public String nextKey() {
+            removeCalled = false;
+            currentKey = (String) e.nextElement();
+            return currentKey;
+        }
+    }
+
+
+    class EntryIterator extends BaseIterator<Map.Entry<String,V>> {
+
+        EntryIterator(Enumeration e) {
+            super(e);
+        }
+
+        public void remove() {
+            if (currentKey != null && !removeCalled) {
+                removeCalled = true;
+                removeKey(currentKey);
+            } else {
+                throw new IllegalStateException();
+            }
+        }
+
+        public Map.Entry<String,V> next() {
+            nextKey();
+            return new Entry<V>(currentKey, get(currentKey));
+        }
+    }
+
+
+    class KeyIterator extends BaseIterator<String> {
+
+        KeyIterator(Enumeration e) {
+            super(e);
+        }
+
+        public void remove() {
+            if (currentKey != null && !removeCalled) {
+                removeCalled = true;
+                removeKey(currentKey);
+            } else {
+                throw new IllegalStateException();
+            }
+        }
+
+        public String next() {
+            return nextKey();
+        }
+    }
+
+
+    class ValueIterator extends BaseIterator<V> {
+
+        ValueIterator(Enumeration e) {
+            super(e);
+        }
+
+        public void remove() {
+            if (currentKey != null && !removeCalled) {
+                removeCalled = true;
+                removeValue(get(currentKey));
+            } else {
+                throw new IllegalStateException();
+            }
+        }
+
+        public V next() {
+            nextKey();
+            return get(currentKey);
+        }
+    }
+
+
+    static class Entry<V> implements Map.Entry<String,V> {
+
+        // immutable Entry
+        private final String key;
+        private final V value;
+
+
+        Entry(String key, V value) {
+            this.key = key;
+            this.value = value;
+        }
+
+
+        public String getKey() {
+            return key;
+        }
+
+
+        public V getValue() {
+            return value;
+        }
+
+
+        // No support of setting the value
+        public V setValue(V value) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public int hashCode() {
+            return ((key == null ? 0 : key.hashCode()) ^
+                (value == null ? 0 : value.hashCode()));
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null || !(obj instanceof Map.Entry)) {
+                return false;
+            }
+
+            Map.Entry input = (Map.Entry) obj;
+            Object inputKey = input.getKey();
+            Object inputValue = input.getValue();
+
+            if (inputKey == key ||
+                (inputKey != null && inputKey.equals(key))) {
+                if (inputValue == value ||
+                    (inputValue != null && inputValue.equals(value))) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+    
+}
diff --git a/com/sun/faces/context/ExceptionHandlerFactoryImpl.java b/com/sun/faces/context/ExceptionHandlerFactoryImpl.java
new file mode 100644
index 0000000..50bc213
--- /dev/null
+++ b/com/sun/faces/context/ExceptionHandlerFactoryImpl.java
@@ -0,0 +1,92 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.ExceptionHandlerFactory;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.application.ApplicationAssociate;
+
+/**
+ * Default ExceptionHandlerFactory implementation.
+ */
+public class ExceptionHandlerFactoryImpl extends ExceptionHandlerFactory {
+
+    private ApplicationAssociate associate;
+
+    // ------------------------------------ Methods from ExceptionHandlerFactory
+
+    public ExceptionHandlerFactoryImpl() {
+    }
+
+    
+    /**
+     * @see javax.faces.context.ExceptionHandlerFactory#getExceptionHandler()
+     */
+    public ExceptionHandler getExceptionHandler() {
+        FacesContext fc = FacesContext.getCurrentInstance();
+        ApplicationAssociate myAssociate = getAssociate(fc);
+
+        ExceptionHandler result = new AjaxNoAjaxExceptionHandler(
+                new AjaxExceptionHandlerImpl(new ExceptionHandlerImpl(Boolean.TRUE)),
+                new ExceptionHandlerImpl(((myAssociate != null) ? myAssociate.isErrorPagePresent() : Boolean.TRUE)));
+        return result;
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private ApplicationAssociate getAssociate(FacesContext ctx) {
+
+        if (associate == null) {
+            associate = ApplicationAssociate.getCurrentInstance();
+            if (associate == null) {
+                associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
+            }
+        }
+        return associate;
+
+    }
+
+}
diff --git a/com/sun/faces/context/ExceptionHandlerImpl.java b/com/sun/faces/context/ExceptionHandlerImpl.java
new file mode 100644
index 0000000..36d8ef1
--- /dev/null
+++ b/com/sun/faces/context/ExceptionHandlerImpl.java
@@ -0,0 +1,341 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.LinkedList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import javax.faces.FacesException;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.event.PhaseId;
+import javax.el.ELException;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.renderkit.RenderKitUtils;
+import javax.faces.context.ExternalContext;
+
+
+/**
+ * <p>
+ * The default implementation of {@link ExceptionHandler} for JSF 2.0.
+ * </p>
+ *
+ * <p>
+ * As an implementation note, if changes going forward are required here,
+ * review the <code>ExceptionHandler</code> implementation within
+ * <code>javax.faces.webapp.PreJsf2ExceptionHandlerFactory</code>.  The code
+ * is, in most cases, quite similar.
+ * </p>
+ *
+ */
+public class ExceptionHandlerImpl extends ExceptionHandler {
+
+    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+    private static final String LOG_BEFORE_KEY =
+          "jsf.context.exception.handler.log_before";
+    private static final String LOG_AFTER_KEY =
+          "jsf.context.exception.handler.log_after";
+    private static final String LOG_KEY =
+          "jsf.context.exception.handler.log";
+    
+    
+   public static final java.util.logging.Level INCIDENT_ERROR =
+           Level.parse(Integer.toString(Level.SEVERE.intValue() + 100));
+    
+    private LinkedList<ExceptionQueuedEvent> unhandledExceptions;
+    private LinkedList<ExceptionQueuedEvent> handledExceptions;
+    private ExceptionQueuedEvent handled;
+    private boolean errorPagePresent;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ExceptionHandlerImpl() {
+
+        this.errorPagePresent = true;
+
+    }
+
+    
+    public ExceptionHandlerImpl(boolean errorPagePresent) {
+
+        this.errorPagePresent = errorPagePresent;
+        
+    }
+
+
+    // ------------------------------------------- Methods from ExceptionHandler
+
+
+    public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
+
+        return handled;
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExceptionHandler#handle()
+     */
+    @SuppressWarnings({"ThrowableInstanceNeverThrown"})
+    public void handle() throws FacesException {
+
+        for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext(); ) {
+            ExceptionQueuedEvent event = i.next();
+            ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
+            try {
+                Throwable t = context.getException();
+                if (isRethrown(t)) {
+                    handled = event;
+                    Throwable unwrapped = getRootCause(t);
+                    if (unwrapped != null) {
+                        throwIt(context.getContext(),
+                                new FacesException(unwrapped.getMessage(), unwrapped));
+                    } else {
+                        if (t instanceof FacesException) {
+                            throwIt(context.getContext(), (FacesException) t);
+                        } else {
+                            throwIt(context.getContext(),
+                                    new FacesException(t.getMessage(), t));
+                        }
+                    }
+                    if (LOGGER.isLoggable(INCIDENT_ERROR)) {
+                        log(context);
+                    }
+                    
+                } else {
+                    log(context);
+                }
+
+            } finally {
+                if (handledExceptions == null) {
+                    handledExceptions = new LinkedList<ExceptionQueuedEvent>();
+                }
+                handledExceptions.add(event);
+                i.remove();               
+            }
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExceptionHandler#isListenerForSource(Object)
+     */
+    public boolean isListenerForSource(Object source) {
+
+        return (source instanceof ExceptionQueuedEventContext);
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)
+     */
+    public void processEvent(SystemEvent event) throws AbortProcessingException {
+
+        if (event != null) {
+            if (unhandledExceptions == null) {
+                unhandledExceptions = new LinkedList<ExceptionQueuedEvent>();
+            }
+            unhandledExceptions.add((ExceptionQueuedEvent) event);
+        }
+
+    }
+
+
+    /**
+     * @see ExceptionHandler#getRootCause(Throwable)
+     */
+    public Throwable getRootCause(Throwable t) {
+
+        if (t == null) {
+            return null;
+        }
+        if (shouldUnwrap(t.getClass())) {
+            Throwable root = t.getCause();
+            if (root != null) {
+                Throwable tmp = getRootCause(root);
+                if (tmp == null) {
+                    return root;
+                } else {
+                    return tmp;
+                }
+            } else {
+                return t;
+            }
+        }
+        return t;
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.ExceptionHandler#getUnhandledExceptionQueuedEvents()
+     */
+    public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
+
+        return ((unhandledExceptions != null)
+                    ? unhandledExceptions
+                    : Collections.<ExceptionQueuedEvent>emptyList());
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExceptionHandler#getHandledExceptionQueuedEvents()
+     */
+    public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
+
+        return ((handledExceptions != null)
+                    ? handledExceptions
+                    : Collections.<ExceptionQueuedEvent>emptyList());
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void throwIt(FacesContext ctx, FacesException fe) {
+
+        boolean isDevelopment = ctx.isProjectStage(ProjectStage.Development);
+        ExternalContext extContext = ctx.getExternalContext();
+        Throwable wrapped = fe.getCause();
+        try {
+            extContext.responseReset();
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.log(Level.INFO, "Exception when handling error trying to reset the response.", wrapped);
+            }
+        }
+        if (null != wrapped && wrapped instanceof FacesFileNotFoundException) {
+            extContext.setResponseStatus(404);
+         } else {
+            extContext.setResponseStatus(500);
+         }
+
+        if (isDevelopment && !errorPagePresent) {
+            // RELEASE_PENDING_2_1
+            // thThe error page here will be text/html which means not all device
+            // types are going to render this properly.  This should be addressed
+            // in 2.1
+            RenderKitUtils.renderHtmlErrorPage(ctx, fe);
+        } else {
+            if (isDevelopment) {
+                // store the view root where the exception occurred into the
+                // request scope so that the error page can display that component
+                // tree and not the one rendering the errorpage
+                ctx.getExternalContext().getRequestMap().put("com.sun.faces.error.view", ctx.getViewRoot());
+            }
+            throw fe;
+        }
+    }
+
+
+    /**
+     * @param c <code>Throwable</code> implementation class
+     * @return <code>true</code> if <code>c</code> is FacesException.class or
+     *  ELException.class
+     */
+    private boolean shouldUnwrap(Class<? extends Throwable> c) {
+
+        return (FacesException.class.equals(c) || ELException.class.equals(c));
+
+    }
+
+    
+    private boolean isRethrown(Throwable t) {
+
+        return (!(t instanceof AbortProcessingException));
+
+    }
+
+    private void log(ExceptionQueuedEventContext exceptionContext) {
+
+        UIComponent c = exceptionContext.getComponent();
+        boolean beforePhase = exceptionContext.inBeforePhase();
+        boolean afterPhase = exceptionContext.inAfterPhase();
+        PhaseId phaseId = exceptionContext.getPhaseId();
+        Throwable t = exceptionContext.getException();
+        String key = getLoggingKey(beforePhase, afterPhase);
+        // If both SEVERE and INCIDENT_ERROR are loggable, just use
+        // INCIDENT ERROR, otherwise just use SEVERE.
+        Level level = LOGGER.isLoggable(INCIDENT_ERROR) && LOGGER.isLoggable(Level.SEVERE) ? INCIDENT_ERROR : Level.SEVERE;
+        
+        if (LOGGER.isLoggable(level)) {
+            LOGGER.log(level,
+                       key,
+                       new Object[] { t.getClass().getName(),
+                                      phaseId.toString(),
+                                      ((c != null) ? c.getClientId(exceptionContext.getContext()) : ""),
+                                      t.getMessage()});
+            if (t.getMessage() != null) {
+                LOGGER.log(level, t.getMessage(), t);
+            } else {
+                LOGGER.log(level, "No associated message", t);
+            }
+        }
+        
+    }
+
+    private String getLoggingKey(boolean beforePhase, boolean afterPhase) {
+        if (beforePhase) {
+            return LOG_BEFORE_KEY;
+        } else if (afterPhase) {
+            return LOG_AFTER_KEY;
+        } else {
+            return LOG_KEY;
+        }
+    }
+
+}
diff --git a/com/sun/faces/context/ExternalContextFactoryImpl.java b/com/sun/faces/context/ExternalContextFactoryImpl.java
new file mode 100644
index 0000000..2cd4cbf
--- /dev/null
+++ b/com/sun/faces/context/ExternalContextFactoryImpl.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+
+import com.sun.faces.util.Util;
+
+import javax.faces.FacesException;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.ExternalContextFactory;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+public class ExternalContextFactoryImpl extends ExternalContextFactory {
+
+    public static final String DEFAULT_EXTERNAL_CONTEXT_KEY =
+          ExternalContextFactoryImpl.class.getName() + "_KEY";
+
+    public ExternalContextFactoryImpl() {
+    }
+
+    // ---------------------------------------- Methods from ExternalContextFactory
+
+
+    public ExternalContext getExternalContext(Object servletContext,
+                                        Object request,
+                                        Object response)
+
+    throws FacesException {
+
+        Util.notNull("servletContext", servletContext);
+        Util.notNull("request", request);
+        Util.notNull("response", response);
+
+        ExternalContext extContext = 
+              new ExternalContextImpl((ServletContext) servletContext,
+                                      (ServletRequest) request,
+                                      (ServletResponse) response);
+
+        if (request instanceof ServletRequest) {
+            ((ServletRequest) request).setAttribute(DEFAULT_EXTERNAL_CONTEXT_KEY, extContext);
+        }
+
+        return extContext;
+
+    }
+
+    // The testcase for this class is TestExternalContextFactory.java
+
+}
diff --git a/com/sun/faces/context/ExternalContextImpl.java b/com/sun/faces/context/ExternalContextImpl.java
new file mode 100644
index 0000000..c5f139a
--- /dev/null
+++ b/com/sun/faces/context/ExternalContextImpl.java
@@ -0,0 +1,1176 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import com.sun.faces.RIConstants;
+import java.io.OutputStream;
+import javax.faces.FacesException;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.Flash;
+import javax.faces.context.PartialResponseWriter;
+import javax.faces.context.ResponseWriter;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.Cookie;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import com.sun.faces.config.WebConfiguration;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.SendPoweredByHeader;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableDistributable;
+import com.sun.faces.util.TypedCollections;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.context.flash.ELFlash;
+import javax.faces.FactoryFinder;
+import javax.faces.context.FlashFactory;
+import javax.faces.lifecycle.ClientWindow;
+import javax.faces.render.ResponseStateManager;
+
+/**
+ * <p>This implementation of {@link ExternalContext} is specific to the
+ * servlet implementation.
+ */
+public class ExternalContextImpl extends ExternalContext {
+
+    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+
+    private ServletContext servletContext = null;
+    private ServletRequest request = null;
+    private ServletResponse response = null;
+    private ClientWindow clientWindow = null;
+
+    private Map<String,Object> applicationMap = null;
+    private Map<String,Object> sessionMap = null;
+    private Map<String,Object> requestMap = null;
+    private Map<String,String> requestParameterMap = null;
+    private Map<String,String[]> requestParameterValuesMap = null;
+    private Map<String,String> requestHeaderMap = null;
+    private Map<String,String[]> requestHeaderValuesMap = null;
+    private Map<String,Object> cookieMap = null;
+    private Map<String,String> initParameterMap = null;
+    private Map<String,String> fallbackContentTypeMap = null;
+    private Flash flash;
+    private boolean distributable;
+
+    private enum ALLOWABLE_COOKIE_PROPERTIES {
+        domain,
+        maxAge,
+        path,
+        secure,
+        httpOnly
+    }
+
+    static final Class theUnmodifiableMapClass =
+        Collections.unmodifiableMap(new HashMap<Object,Object>()).getClass();
+
+
+    // ------------------------------------------------------------ Constructors
+
+    
+    public ExternalContextImpl(ServletContext sc,
+                               ServletRequest request,
+                               ServletResponse response) {
+
+        // Validate the incoming parameters
+        Util.notNull("sc", sc);
+        Util.notNull("request", request);
+        Util.notNull("response", response);
+
+        // Save references to our context, request, and response
+        this.servletContext = sc;
+        this.request = request;        
+        this.response = response;
+        WebConfiguration config = WebConfiguration.getInstance(sc);
+        if (config.isOptionEnabled(SendPoweredByHeader)) {
+            ((HttpServletResponse) response).addHeader("X-Powered-By", "JSF/2.2");
+        }
+        distributable = config.isOptionEnabled(EnableDistributable);
+        fallbackContentTypeMap = new HashMap<String,String>(3, 1.0f);
+        fallbackContentTypeMap.put("js", "text/javascript");
+        fallbackContentTypeMap.put("css", "text/css");
+        fallbackContentTypeMap.put("groovy", "application/x-groovy");
+        fallbackContentTypeMap.put("properties", "text/plain");
+        
+    }
+
+
+    // -------------------------------------------- Methods from ExternalContext
+
+
+    /**
+     * @see ExternalContext#getSession(boolean)
+     */
+    public Object getSession(boolean create) {
+        return (((HttpServletRequest) request).getSession(create));
+    }
+
+    @Override
+    public String getSessionId(boolean create) {
+        HttpSession session = null;
+        String id = null;
+        
+        session = (HttpSession)getSession(create);
+        if (null != session) {
+            id = session.getId();
+        }
+        return id;
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#getContext()
+     */
+    public Object getContext() {
+        return this.servletContext;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getContextName()
+     */
+    public String getContextName() {
+
+        if (servletContext.getMajorVersion() >= 3
+            || (servletContext.getMajorVersion() == 2
+                && servletContext.getMinorVersion() == 5)) {
+            return this.servletContext.getServletContextName();
+        } else {
+            // for servlet 2.4 support
+            return servletContext.getServletContextName();
+        }
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequest()
+     */
+    public Object getRequest() {
+        return this.request;
+    }
+    
+    /**
+     * @see ExternalContext#setRequest(Object)
+     */
+    public void setRequest(Object request) {
+        if (request instanceof ServletRequest) {
+            this.request = (ServletRequest) request;
+            requestHeaderMap = null;
+            requestHeaderValuesMap = null;
+            requestHeaderValuesMap = null;
+            requestMap = null;
+            requestParameterMap = null;
+            requestParameterValuesMap = null;
+        }
+    }
+
+
+    /**
+     * @see ExternalContext#setRequestCharacterEncoding(String)
+     */
+    public void setRequestCharacterEncoding(String encoding) throws UnsupportedEncodingException {
+        request.setCharacterEncoding(encoding);
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResponse()
+     */
+    public Object getResponse() {
+        return this.response;
+    }
+
+
+    /**
+     * @see ExternalContext#setResponse(Object)
+     */
+    public void setResponse(Object response) {
+        if (response instanceof ServletResponse) {
+            this.response = (ServletResponse) response;
+        }
+    }
+
+    @Override
+    public ClientWindow getClientWindow() {
+        return clientWindow;
+    }
+
+    @Override
+    public void setClientWindow(ClientWindow window) {
+        this.clientWindow = window;
+    }
+
+    /**
+     * @see ExternalContext#setResponseCharacterEncoding(String)
+     */
+    public void setResponseCharacterEncoding(String encoding) {
+        response.setCharacterEncoding(encoding);
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getApplicationMap()
+     */
+    public Map<String,Object> getApplicationMap() {
+        if (applicationMap == null) {
+            applicationMap = new ApplicationMap(servletContext);
+        }
+        return applicationMap;
+    }
+
+    @Override
+    public String getApplicationContextPath() {
+        return this.servletContext.getContextPath();
+    }
+    
+    /**
+     * @see javax.faces.context.ExternalContext#getSessionMap()
+     */
+    public Map<String,Object> getSessionMap() {
+        if (sessionMap == null) {
+            if (distributable) {
+                sessionMap = new AlwaysPuttingSessionMap((HttpServletRequest) request,
+                        FacesContext.getCurrentInstance()
+                        .getApplication().getProjectStage());
+            } else {
+                sessionMap = new SessionMap((HttpServletRequest) request,
+                        FacesContext.getCurrentInstance()
+                        .getApplication().getProjectStage());
+            }
+        }
+        return sessionMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestMap()
+     */
+    public Map<String,Object> getRequestMap() {
+        if (requestMap == null) {
+            requestMap = new RequestMap(this.request);
+        }
+        return requestMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestHeaderMap()
+     */
+    public Map<String,String> getRequestHeaderMap() {
+        if (null == requestHeaderMap) {
+            requestHeaderMap = 
+                Collections.unmodifiableMap(
+                    new RequestHeaderMap((HttpServletRequest) request));
+        }
+        return requestHeaderMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestHeaderValuesMap()
+     */
+    public Map<String,String[]> getRequestHeaderValuesMap() {
+        if (null == requestHeaderValuesMap) {
+            requestHeaderValuesMap = 
+                Collections.unmodifiableMap(
+                    new RequestHeaderValuesMap((HttpServletRequest) request));
+        }
+        return requestHeaderValuesMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestCookieMap()
+     */
+    public Map<String,Object> getRequestCookieMap() {
+        if (null == cookieMap) {
+            cookieMap =
+                Collections.unmodifiableMap(
+                    new RequestCookieMap((HttpServletRequest) request));
+        }
+        return cookieMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getInitParameterMap()
+     */
+    public Map<String,String> getInitParameterMap() {
+        if (null == initParameterMap) {
+            initParameterMap = 
+                Collections.unmodifiableMap(
+                    new InitParameterMap(servletContext));
+        }
+        return initParameterMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestParameterMap()
+     */
+    public Map<String,String> getRequestParameterMap() {
+        if (null == requestParameterMap) {
+            requestParameterMap = 
+                Collections.unmodifiableMap(
+                    new RequestParameterMap(request));
+        }
+        return requestParameterMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestParameterValuesMap()
+     */
+    public Map<String,String[]> getRequestParameterValuesMap() {
+        if (null == requestParameterValuesMap) {
+            requestParameterValuesMap = 
+                Collections.unmodifiableMap(
+                    new RequestParameterValuesMap(request));
+        }
+        return requestParameterValuesMap;
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestParameterNames()
+     */
+    public Iterator<String> getRequestParameterNames() {
+        final Enumeration namEnum = request.getParameterNames();
+
+        return new Iterator<String>() {
+            public boolean hasNext() {
+                return namEnum.hasMoreElements();
+            }
+
+
+            public String next() {
+                return (String) namEnum.nextElement();
+            }
+
+
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+        };
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestLocale()
+     */
+    public Locale getRequestLocale() {
+        return request.getLocale();
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestLocales()
+     */
+    public Iterator<Locale> getRequestLocales() {
+        return (new LocalesIterator(request.getLocales()));
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestPathInfo()
+     */
+    public String getRequestPathInfo() {
+        return (((HttpServletRequest) request).getPathInfo());
+    }
+
+
+    /**
+     * @see ExternalContext#getRealPath(String)
+     */
+    @Override
+    public String getRealPath(String path) {
+        return servletContext.getRealPath(path);
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestContextPath()
+     */
+    public String getRequestContextPath() {
+        return (((HttpServletRequest) request).getContextPath());
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestServletPath()
+     */
+    public String getRequestServletPath() {
+        return (((HttpServletRequest) request).getServletPath());
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestCharacterEncoding()
+     */
+    @Override
+    public String getRequestCharacterEncoding() {
+        return (request.getCharacterEncoding());
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestContentType()
+     */
+    @Override
+    public String getRequestContentType() {
+        return (request.getContentType());
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestContentLength()
+     */
+    @Override
+    public int getRequestContentLength() {
+        return (request.getContentLength());
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResponseCharacterEncoding()
+     */
+    @Override
+    public String getResponseCharacterEncoding() {
+        return (response.getCharacterEncoding());
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResponseContentType()
+     */
+    public String getResponseContentType() {
+        return (response.getContentType());
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getInitParameter(String)
+     */
+    public String getInitParameter(String name) {
+        if (name == null) {
+            throw new NullPointerException("Init parameter name cannot be null");
+        }
+        return servletContext.getInitParameter(name);
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResourcePaths(String)
+     */
+    public Set<String> getResourcePaths(String path) {
+        if (null == path) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "path");
+            throw new NullPointerException(message);
+        }
+        return TypedCollections.dynamicallyCastSet(servletContext.getResourcePaths(path), String.class);
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResourceAsStream(String)
+     */
+    public InputStream getResourceAsStream(String path) {
+        if (null == path) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "path");
+            throw new NullPointerException(message);
+        }
+        return servletContext.getResourceAsStream(path);
+    }
+
+
+    /**
+     * @see ExternalContext#getResource(String)
+     */
+    public URL getResource(String path) {
+        if (null == path) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "path");
+            throw new NullPointerException(message);
+        }
+        URL url;
+        try {
+            url = servletContext.getResource(path);
+        } catch (MalformedURLException e) {
+            return null;
+        }
+        return url;
+    }
+
+
+    /**
+     * @see ExternalContext#encodeActionURL(String)
+     */
+    public String encodeActionURL(String url) {
+        Util.notNull("url", url);
+        FacesContext context = FacesContext.getCurrentInstance();
+        ClientWindow  cw = context.getExternalContext().getClientWindow();
+        boolean appendClientWindow = false;
+        if (null != cw) {
+            appendClientWindow = cw.isClientWindowRenderModeEnabled(context);
+        }
+        if (appendClientWindow && -1 == url.indexOf(ResponseStateManager.CLIENT_WINDOW_URL_PARAM)) {
+            if (null != cw) {
+                String clientWindowId = cw.getId();
+                StringBuilder builder = new StringBuilder(url);
+                int q = url.indexOf(UrlBuilder.QUERY_STRING_SEPARATOR);
+                if (-1 == q) {
+                    builder.append(UrlBuilder.QUERY_STRING_SEPARATOR);
+                } else {
+                    builder.append(UrlBuilder.PARAMETER_PAIR_SEPARATOR);
+                }
+                builder.append(ResponseStateManager.CLIENT_WINDOW_URL_PARAM).append(UrlBuilder.PARAMETER_NAME_VALUE_SEPARATOR).append(clientWindowId);
+    
+                Map<String, String> additionalParams = cw.getQueryURLParameters(context);
+                if (null != additionalParams) {
+                    for (Map.Entry<String, String> cur : additionalParams.entrySet()) {
+                        builder.append(UrlBuilder.PARAMETER_NAME_VALUE_SEPARATOR);
+                        builder.append(cur.getKey()).
+                                append(UrlBuilder.PARAMETER_NAME_VALUE_SEPARATOR).
+                                append(cur.getValue());                        
+                    }
+                }
+                url = builder.toString();
+            }
+        }
+        // If we have a query string, append it
+        return ((HttpServletResponse) response).encodeURL(url);
+    }
+
+
+    /**
+     * @see ExternalContext#encodeResourceURL(String)
+     */
+    public String encodeResourceURL(String url) {
+        if (null == url) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "url");
+            throw new NullPointerException(message);
+        }
+
+        return ((HttpServletResponse) response).encodeURL(url);
+    }
+
+
+    /**
+     * @see ExternalContext#encodeNamespace(String)
+     */
+    public String encodeNamespace(String name) {
+        return name; // Do nothing for servlets
+    }
+
+
+    /**
+     * @see ExternalContext#dispatch(String)
+     */
+    public void dispatch(String requestURI) throws IOException, FacesException {
+        RequestDispatcher requestDispatcher = request.getRequestDispatcher(
+            requestURI);
+        if (requestDispatcher == null) {
+            ((HttpServletResponse) response).
+                    sendError(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
+        try {
+            requestDispatcher.forward(this.request, this.response);
+        } catch (ServletException se) {
+            throw new FacesException(se);
+        }
+    }
+
+
+    /**
+     * @see ExternalContext#redirect(String)
+     */
+    public void redirect(String requestURI) throws IOException {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        doLastPhaseActions(ctx, true);
+
+        if (ctx.getPartialViewContext().isPartialRequest()) {
+            if (getSession(true) instanceof HttpSession &&
+                ctx.getResponseComplete()) {
+                throw new IllegalStateException();
+            }
+            PartialResponseWriter pwriter;
+            ResponseWriter writer = ctx.getResponseWriter();
+            if (writer instanceof PartialResponseWriter) {
+                pwriter = (PartialResponseWriter) writer;
+            } else {
+                pwriter = ctx.getPartialViewContext().getPartialResponseWriter();
+            }
+            setResponseContentType("text/xml");
+            setResponseCharacterEncoding("UTF-8");
+            addResponseHeader("Cache-Control", "no-cache");
+//            pwriter.writePreamble("<?xml version='1.0' encoding='UTF-8'?>\n");
+            pwriter.startDocument();
+            pwriter.redirect(requestURI);
+            pwriter.endDocument();
+        } else {
+            ((HttpServletResponse) response).sendRedirect(requestURI);
+        }
+        ctx.responseComplete();
+        
+    }
+
+
+    /**
+     * @see ExternalContext#log(String)
+     */
+    public void log(String message) {
+        if (null == message) {
+            String msg = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "message");
+            throw new NullPointerException(msg);
+        }
+        servletContext.log(message);
+    }
+
+
+    /**
+     * @see ExternalContext#log(String, Throwable)
+     */
+    public void log(String message, Throwable throwable) {
+        if (null == message) {
+            String msg = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "message");
+            throw new NullPointerException(msg);
+        }
+        if (null == throwable) {
+            String msg = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "throwable");
+            throw new NullPointerException(msg);
+        }
+        servletContext.log(message, throwable);
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getAuthType()
+     */
+    public String getAuthType() {
+        return ((HttpServletRequest) request).getAuthType();
+    }
+
+    /**
+     * @see ExternalContext#getMimeType(String)
+     */
+    @Override
+    public String getMimeType(String file) {
+
+        String mimeType = servletContext.getMimeType(file);
+        if (mimeType == null) {
+            mimeType = getFallbackMimeType(file);
+        }
+        if (mimeType == null && LOGGER.isLoggable(Level.WARNING)) {
+            LOGGER.log(Level.WARNING,
+                       "jsf.externalcontext.no.mime.type.found",
+                       new Object[] { file });
+        }
+        return mimeType;
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRemoteUser()
+     */
+    public String getRemoteUser() {
+        return ((HttpServletRequest) request).getRemoteUser();
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getUserPrincipal()
+     */
+    public java.security.Principal getUserPrincipal() {
+        return ((HttpServletRequest) request).getUserPrincipal();
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#isUserInRole(String)
+     */
+    public boolean isUserInRole(String role) {
+        if (null == role) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "role");
+            throw new NullPointerException(message);
+        }
+        return ((HttpServletRequest) request).isUserInRole(role);
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#invalidateSession()
+     */
+    @Override
+    public void invalidateSession() {
+
+        HttpSession session = ((HttpServletRequest) request).getSession(false);
+        if (session != null) {
+            session.invalidate();
+        }
+
+    }
+
+
+    /**
+     * @see ExternalContext#addResponseCookie(String, String, java.util.Map)
+     * @param name
+     * @param value
+     * @param properties
+     */
+    @Override
+    public void addResponseCookie(String name,
+                                  String value,
+                                  Map<String,Object> properties) {
+
+        HttpServletResponse res = (HttpServletResponse) response;
+
+        Cookie cookie = new Cookie(name, value);
+        if (properties != null && properties.size() != 0) {
+            for (Map.Entry<String,Object> entry : properties.entrySet()) {
+                String key = entry.getKey();
+                ALLOWABLE_COOKIE_PROPERTIES p = ALLOWABLE_COOKIE_PROPERTIES.valueOf(key);
+                Object v = entry.getValue();
+                switch (p) {
+                    case domain:
+                        cookie.setDomain((String) v);
+                        break;
+                    case maxAge:
+                        cookie.setMaxAge((Integer) v);
+                        break;
+                    case path:
+                        cookie.setPath((String) v);
+                        break;
+                    case secure:
+                        cookie.setSecure((Boolean) v);
+                        break;
+                    case httpOnly:
+                        cookie.setHttpOnly((Boolean) v);
+                        break;
+                    default:
+                        throw new IllegalStateException(); // shouldn't happen
+                }
+            }
+        }
+        res.addCookie(cookie);
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResponseOutputStream()
+     */
+    @Override
+    public OutputStream getResponseOutputStream() throws IOException {
+
+        return response.getOutputStream();
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResponseOutputWriter()
+     */
+    @Override
+    public Writer getResponseOutputWriter() throws IOException {
+
+        return response.getWriter();
+        
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestScheme()
+     */
+    @Override
+    public String getRequestScheme() {
+
+        return request.getScheme();
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestServerName()
+     */
+    @Override
+    public String getRequestServerName() {
+
+        return request.getServerName();
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#getRequestServerPort()
+     */
+    @Override
+    public int getRequestServerPort() {
+
+        return request.getServerPort();
+
+    }
+
+
+    /**
+     * @see ExternalContext#setResponseContentType(String)
+     */
+    @Override
+    public void setResponseContentType(String contentType) {
+
+        response.setContentType(contentType);
+        
+    }
+
+
+    /**
+     * @see ExternalContext#setResponseHeader(String, String)
+     */
+    @Override
+    public void setResponseHeader(String name, String value) {
+
+        ((HttpServletResponse) response).setHeader(name, value);
+        
+    }
+
+
+    /**
+     * @see ExternalContext#addResponseHeader(String, String)
+     */
+    @Override
+    public void addResponseHeader(String name, String value) {
+
+        ((HttpServletResponse) response).addHeader(name, value);
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#setResponseBufferSize(int)
+     */
+    @Override
+    public void setResponseBufferSize(int size) {
+
+        response.setBufferSize(size);
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#isResponseCommitted()
+     */
+    @Override
+    public boolean isResponseCommitted() {
+
+        return response.isCommitted();
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#responseReset()
+     */
+    @Override
+    public void responseReset() {
+
+        response.reset();
+
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#responseSendError(int, String)
+     */
+    @Override
+    public void responseSendError(int statusCode, String message) throws IOException {
+
+        if (message == null) {
+            ((HttpServletResponse) response).sendError(statusCode);
+        } else {
+            ((HttpServletResponse) response).sendError(statusCode, message);
+        }
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.ExternalContext#setResponseStatus(int)
+     */
+    @Override
+    public void setResponseStatus(int statusCode) {
+
+        ((HttpServletResponse) response).setStatus(statusCode);
+
+    }
+
+    
+    /**
+     * @see javax.faces.context.ExternalContext#responseFlushBuffer()
+     */
+    @Override
+    public void responseFlushBuffer() throws IOException {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        if (facesContext != null) {
+            doLastPhaseActions(facesContext, false);
+        }
+
+        response.flushBuffer();
+
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#setResponseContentLength(int)
+     */
+    @Override
+    public void setResponseContentLength(int length) {
+
+        response.setContentLength(length);
+
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#setSessionMaxInactiveInterval(int)
+     */
+    @Override
+    public void setSessionMaxInactiveInterval(int interval) {
+
+        HttpSession session = ((HttpServletRequest) request).getSession();
+	session.setMaxInactiveInterval(interval);
+
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#getResponseBufferSize()
+     */
+    @Override
+    public int getResponseBufferSize() {
+
+        return response.getBufferSize();
+
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#getSessionMaxInactiveInterval()
+\     */
+    @Override
+    public int getSessionMaxInactiveInterval() {
+
+        HttpSession session = ((HttpServletRequest) request).getSession();
+	return session.getMaxInactiveInterval();
+
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#isSecure()
+     * @return boolean
+     */
+    @Override
+    public boolean isSecure() {
+        return ((HttpServletRequest) request).isSecure();
+    }
+
+    @Override
+    public String encodeBookmarkableURL(String baseUrl,
+                                        Map<String, List<String>> parameters) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        String encodingFromContext =
+              (String) context.getAttributes().get(RIConstants.FACELETS_ENCODING_KEY);
+        if (null == encodingFromContext) {
+            encodingFromContext = (String) context.getViewRoot().getAttributes().
+                    get(RIConstants.FACELETS_ENCODING_KEY);
+        }
+        
+        String currentResponseEncoding = (null != encodingFromContext) ? encodingFromContext : getResponseCharacterEncoding();
+
+        UrlBuilder builder = new UrlBuilder(baseUrl, currentResponseEncoding);
+        builder.addParameters(parameters);
+        return builder.createUrl();
+
+    }
+
+    @Override
+    public String encodeRedirectURL(String baseUrl,
+                                    Map<String, List<String>> parameters) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        String encodingFromContext =
+              (String) context.getAttributes().get(RIConstants.FACELETS_ENCODING_KEY);
+        if (null == encodingFromContext) {
+            encodingFromContext = (String) context.getViewRoot().getAttributes().
+                    get(RIConstants.FACELETS_ENCODING_KEY);
+        }
+        
+        String currentResponseEncoding = (null != encodingFromContext) ? encodingFromContext : getResponseCharacterEncoding();
+
+        UrlBuilder builder = new UrlBuilder(baseUrl, currentResponseEncoding);
+        builder.addParameters(parameters);
+        return builder.createUrl();
+        
+    }
+
+    /**
+     * @see javax.faces.context.ExternalContext#encodePartialActionURL(String)
+     */
+    @Override
+    public String encodePartialActionURL(String url) {
+        if (null == url) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "url");
+            throw new NullPointerException(message);
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        String encodingFromContext =
+              (String) context.getAttributes().get(RIConstants.FACELETS_ENCODING_KEY);
+        if (null == encodingFromContext) {
+            encodingFromContext = (String) context.getViewRoot().getAttributes().
+                    get(RIConstants.FACELETS_ENCODING_KEY);
+        }
+        
+        String currentResponseEncoding = (null != encodingFromContext) ? encodingFromContext : getResponseCharacterEncoding();
+        
+        UrlBuilder builder = new UrlBuilder(url, currentResponseEncoding);
+        return ((HttpServletResponse) response).encodeURL(builder.createUrl());
+    }
+
+    @Override
+    public Flash getFlash() {
+        if (null == flash) {
+            FlashFactory ff = (FlashFactory) FactoryFinder.getFactory(FactoryFinder.FLASH_FACTORY);
+            flash = ff.getFlash(true);
+        }
+        return flash;
+    }
+
+    private void doLastPhaseActions(FacesContext context, 
+            boolean outgoingResponseIsRedirect) {
+        Map<Object, Object> attrs = context.getAttributes();
+        try {
+            attrs.put(ELFlash.ACT_AS_DO_LAST_PHASE_ACTIONS, outgoingResponseIsRedirect);
+            getFlash().doPostPhaseActions(context);
+        } finally {
+            attrs.remove(ELFlash.ACT_AS_DO_LAST_PHASE_ACTIONS);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    public String getFallbackMimeType(String file) {
+
+        if (file == null || file.length() == 0) {
+            return null;
+        }
+        int idx = file.lastIndexOf('.');
+        if (idx == -1) {
+            return null;
+        }
+        String extension = file.substring(idx + 1);
+        if (extension.length() == 0) {
+            return null;
+        }
+        return fallbackContentTypeMap.get(extension);
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class LocalesIterator implements Iterator<Locale> {
+
+        public LocalesIterator(Enumeration locales) {
+            this.locales = locales;
+        }
+
+
+        private Enumeration locales;
+
+
+        public boolean hasNext() {
+            return locales.hasMoreElements();
+        }
+
+
+        public Locale next() {
+            return (Locale) locales.nextElement();
+        }
+
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+}
+
diff --git a/com/sun/faces/context/FacesContextFactoryImpl.java b/com/sun/faces/context/FacesContextFactoryImpl.java
new file mode 100644
index 0000000..11b2a83
--- /dev/null
+++ b/com/sun/faces/context/FacesContextFactoryImpl.java
@@ -0,0 +1,126 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+
+import com.sun.faces.config.WebConfiguration;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving;
+import com.sun.faces.util.Util;
+
+import java.util.Map;
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExceptionHandlerFactory;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.ExternalContextFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.context.FacesContextFactory;
+import javax.faces.lifecycle.Lifecycle;
+
+public class FacesContextFactoryImpl extends FacesContextFactory {
+
+    
+
+    private final ExceptionHandlerFactory exceptionHandlerFactory;
+    private final ExternalContextFactory externalContextFactory;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public FacesContextFactoryImpl() {
+
+        exceptionHandlerFactory = (ExceptionHandlerFactory)
+              FactoryFinder.getFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY);
+        externalContextFactory = (ExternalContextFactory)
+              FactoryFinder.getFactory(FactoryFinder.EXTERNAL_CONTEXT_FACTORY);
+
+    }
+
+
+    // ---------------------------------------- Methods from FacesContextFactory
+
+
+    @Override
+    public FacesContext getFacesContext(Object sc,
+                                        Object request,
+                                        Object response,
+                                        Lifecycle lifecycle)
+    throws FacesException {
+
+        Util.notNull("sc", sc);
+        Util.notNull("request", request);
+        Util.notNull("response", response);
+        Util.notNull("lifecycle", lifecycle);
+        ExternalContext extContext;
+        
+        FacesContext ctx =
+              new FacesContextImpl(
+                  extContext = externalContextFactory.getExternalContext(sc, request, response),
+                  lifecycle);
+
+        ctx.setExceptionHandler(exceptionHandlerFactory.getExceptionHandler());
+        WebConfiguration webConfig = WebConfiguration.getInstance(extContext);
+
+        savePerRequestInitParams(ctx, webConfig);
+        return ctx;
+        
+    }
+    
+    /*
+     * Copy the value of any init params that must be checked during
+     * this request to our FacesContext attribute map.  
+     */
+    private void savePerRequestInitParams(FacesContext context, WebConfiguration webConfig) {
+        String val = context.getExternalContext().getInitParameter(UIComponent.HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);
+        boolean setCurrentComponent = Boolean.valueOf(val);
+        Map<Object, Object> attrs = context.getAttributes();
+        attrs.put(UIComponent.HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME, 
+                setCurrentComponent ? Boolean.TRUE : Boolean.FALSE);
+        attrs.put(PartialStateSaving, webConfig.isOptionEnabled(PartialStateSaving) ?
+                Boolean.TRUE : Boolean.FALSE);
+        
+    }
+
+    // The testcase for this class is TestSerlvetFacesContextFactory.java
+
+} // end of class FacesContextFactoryImpl
diff --git a/com/sun/faces/context/FacesContextImpl.java b/com/sun/faces/context/FacesContextImpl.java
new file mode 100644
index 0000000..d90729b
--- /dev/null
+++ b/com/sun/faces/context/FacesContextImpl.java
@@ -0,0 +1,789 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import javax.el.ELContext;
+import javax.el.ELContextListener;
+import javax.el.ELContextEvent;
+import javax.faces.FactoryFinder;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.event.PhaseId;
+import javax.faces.application.*;
+import javax.faces.application.FacesMessage.Severity;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialViewContext;
+import javax.faces.context.ResponseStream;
+import javax.faces.context.ResponseWriter;
+import javax.faces.context.PartialViewContextFactory;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.HashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.sun.faces.el.ELContextImpl;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+public class FacesContextImpl extends FacesContext {
+
+    private static final String POST_BACK_MARKER =
+          FacesContextImpl.class.getName() + "_POST_BACK";
+
+    // Queried by InjectionFacesContextFactory
+    private static final ThreadLocal<FacesContext> DEFAULT_FACES_CONTEXT =
+          new ThreadLocal<FacesContext>();
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+
+    private boolean released;
+
+    // BE SURE TO ADD NEW IVARS TO THE RELEASE METHOD
+    private ResponseStream responseStream = null;
+    private ResponseWriter responseWriter = null;
+    private ExternalContext externalContext = null;
+    private Application application = null;
+    private UIViewRoot viewRoot = null;
+    private ELContext elContext = null;
+    private RenderKitFactory rkFactory;
+    private RenderKit lastRk;
+    private String lastRkId;
+    private Severity maxSeverity;
+    private boolean renderResponse = false;
+    private boolean responseComplete = false;
+    private boolean validationFailed = false;
+    private Map<Object, Object> attributes;
+    private List<String> resourceLibraryContracts;
+    private PhaseId currentPhaseId;
+    private PartialViewContext partialViewContext = null;
+    private ExceptionHandler exceptionHandler = null;
+
+    /**
+     * Store mapping of clientId to ArrayList of FacesMessage instances.  The
+     * null key is used to represent FacesMessage instances that are not
+     * associated with a clientId instance.
+     */
+    private Map<String, List<FacesMessage>> componentMessageLists;
+
+
+    public FacesContextImpl(ExternalContext ec, Lifecycle lifecycle) {
+        Util.notNull("ec", ec);
+        Util.notNull("lifecycle", lifecycle);
+        this.externalContext = ec;
+        setCurrentInstance(this);
+        DEFAULT_FACES_CONTEXT.set(this);
+        rkFactory = (RenderKitFactory)
+              FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+    }
+
+
+    // ---------------------------------------------- Methods from FacesContext
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getExternalContext()
+     */
+    @Override
+    public ExternalContext getExternalContext() {
+        assertNotReleased();
+        return externalContext;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getApplication()
+     */
+    @Override
+    public Application getApplication() {
+        assertNotReleased();
+        if (null != application) {
+            return application;
+        }
+        ApplicationFactory aFactory =
+              (ApplicationFactory) FactoryFinder.getFactory(
+                    FactoryFinder.APPLICATION_FACTORY);
+        application = aFactory.getApplication();
+        assert (null != application);
+        return application;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getExceptionHandler()
+     */
+    @Override
+    public ExceptionHandler getExceptionHandler() {
+        return exceptionHandler;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#setExceptionHandler(javax.faces.context.ExceptionHandler)
+     */
+    @Override
+    public void setExceptionHandler(ExceptionHandler exceptionHandler) {
+        this.exceptionHandler = exceptionHandler;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getPartialViewContext()
+     */
+    @Override
+    public PartialViewContext getPartialViewContext() {
+
+        assertNotReleased();
+        if (partialViewContext == null) {
+            PartialViewContextFactory f = (PartialViewContextFactory)
+                  FactoryFinder.getFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY);
+            partialViewContext = f.getPartialViewContext(FacesContext.getCurrentInstance());
+        }
+        return partialViewContext;
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#isPostback()
+     */
+    @Override
+    public boolean isPostback() {
+
+        assertNotReleased();
+        Boolean postback = (Boolean) this.getAttributes().get(POST_BACK_MARKER);
+        if (postback == null) {
+            RenderKit rk = this.getRenderKit();
+            if (rk != null) {
+                postback = rk.getResponseStateManager().isPostback(this);
+            } else {
+                // ViewRoot hasn't been set yet, so calculate the RK
+                ViewHandler vh = this.getApplication().getViewHandler();
+                String rkId = vh.calculateRenderKitId(this);
+                postback = RenderKitUtils.getResponseStateManager(this, rkId)
+                      .isPostback(this);
+            }
+            this.getAttributes().put(POST_BACK_MARKER, postback);
+        }
+
+        return postback;
+
+    }
+
+    /**
+     * @see javax.faces.context.FacesContext#isReleased()
+     */
+    @Override
+    public boolean isReleased() {
+        return released;
+    }
+
+    /**
+     * @see javax.faces.context.FacesContext#getAttributes()
+     */
+    @Override
+    public Map<Object, Object> getAttributes() {
+
+        assertNotReleased();
+        if (attributes == null) {
+            attributes = new HashMap<Object, Object>();
+        }
+        return attributes;
+
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getELContext()
+     */
+    @Override
+    public ELContext getELContext() {
+        assertNotReleased();
+        if (elContext == null) {
+            Application app = getApplication();
+            elContext = new ELContextImpl(app.getELResolver());
+            elContext.putContext(FacesContext.class, FacesContext.getCurrentInstance());
+            UIViewRoot root = this.getViewRoot();
+            if (null != root) {
+                elContext.setLocale(root.getLocale());
+            }
+            ELContextListener[] listeners = app.getELContextListeners();
+            if (listeners.length > 0) {
+                ELContextEvent event = new ELContextEvent(elContext);
+                for (ELContextListener listener: listeners) {
+                    listener.contextCreated(event);
+                }
+            }
+        }
+        return elContext;
+        
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getClientIdsWithMessages()
+     */
+    @Override
+    public Iterator<String> getClientIdsWithMessages() {
+        assertNotReleased();
+        return ((componentMessageLists == null)
+                ? Collections.<String>emptyList().iterator()
+                : componentMessageLists.keySet().iterator());
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getMaximumSeverity()
+     */
+    @Override
+    public Severity getMaximumSeverity() {
+        assertNotReleased();
+        Severity result = null;
+        if (componentMessageLists != null
+            && !(componentMessageLists.isEmpty())) {
+            for (Iterator<FacesMessage> i =
+                  new ComponentMessagesIterator(componentMessageLists);
+                 i.hasNext();) {
+                Severity severity = i.next().getSeverity();
+                if (result == null || severity.compareTo(result) > 0) {
+                    result = severity;
+                }
+                if (result == FacesMessage.SEVERITY_FATAL) {
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getMessageList()
+     */
+    @Override
+    public List<FacesMessage> getMessageList() {
+
+        assertNotReleased();
+
+        if (null == componentMessageLists) {
+            return Collections
+                  .unmodifiableList(Collections.<FacesMessage>emptyList());
+        } else {
+            List<FacesMessage> messages = new ArrayList<FacesMessage>();
+            for (List<FacesMessage> list : componentMessageLists.values()) {
+                messages.addAll(list);
+            }
+            return Collections.unmodifiableList(messages);
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getMessageList(String)
+     */
+    @Override
+    public List<FacesMessage> getMessageList(String clientId) {
+
+        assertNotReleased();
+
+        if (null == componentMessageLists) {
+            return Collections
+                  .unmodifiableList(Collections.<FacesMessage>emptyList());
+        } else {
+            List<FacesMessage> list = componentMessageLists.get(clientId);
+            return Collections.unmodifiableList((list != null)
+                                                ? list
+                                                : Collections.<FacesMessage>emptyList());
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getMessages()
+     */
+    @Override
+    public Iterator<FacesMessage> getMessages() {
+        assertNotReleased();
+        if (null == componentMessageLists) {
+            List<FacesMessage> emptyList = Collections.emptyList();
+            return (emptyList.iterator());
+        }
+
+        if (componentMessageLists.size() > 0) {
+            return new ComponentMessagesIterator(componentMessageLists);
+        } else {
+            List<FacesMessage> emptyList = Collections.emptyList();
+            return (emptyList.iterator());
+        }
+    }
+
+    /**
+     * @see FacesContext#getMessages(String)
+     */
+    @Override
+    public Iterator<FacesMessage> getMessages(String clientId) {
+        assertNotReleased();
+
+        // If no messages have been enqueued at all,
+        // return an empty List Iterator
+        if (null == componentMessageLists) {
+            List<FacesMessage> emptyList = Collections.emptyList();
+            return (emptyList.iterator());
+        }
+
+        List<FacesMessage> list = componentMessageLists.get(clientId);
+        if (list == null) {
+            List<FacesMessage> emptyList = Collections.emptyList();
+            return (emptyList.iterator());
+        }
+        return (list.iterator());
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getRenderKit()
+     */
+    @Override
+    public RenderKit getRenderKit() {
+        assertNotReleased();
+        UIViewRoot vr = getViewRoot();
+        if (vr == null) {
+            return (null);
+        }
+        String renderKitId = vr.getRenderKitId();
+
+        if (renderKitId == null) {
+            return null;
+        }
+
+        if (renderKitId.equals(lastRkId)) {
+            return lastRk;
+        } else {
+            lastRk = rkFactory.getRenderKit(this, renderKitId);
+            if (lastRk == null) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, "Unable to locate renderkit "
+                            + "instance for render-kit-id {0}.  Using {1} instead.",
+                            new String[]{renderKitId,
+                                RenderKitFactory.HTML_BASIC_RENDER_KIT});
+                }
+            }
+            lastRkId = renderKitId;
+            return lastRk;
+        }
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getResponseStream()
+     */
+    @Override
+    public ResponseStream getResponseStream() {
+        assertNotReleased();
+        return responseStream;
+    }
+
+
+    /**
+     * @see FacesContext#setResponseStream(javax.faces.context.ResponseStream)
+     */
+    @Override
+    public void setResponseStream(ResponseStream responseStream) {
+        assertNotReleased();
+        Util.notNull("responseStrean", responseStream);
+        this.responseStream = responseStream;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getViewRoot()
+     */
+    @Override
+    public UIViewRoot getViewRoot() {
+        assertNotReleased();
+        return viewRoot;
+    }
+
+
+    /**
+     * @see FacesContext#setViewRoot(javax.faces.component.UIViewRoot)
+     */
+    @Override
+    public void setViewRoot(UIViewRoot root) {
+        assertNotReleased();
+        Util.notNull("root", root);
+
+        if (viewRoot != null && !viewRoot.equals(root)) {
+            Map<String, Object> viewMap = viewRoot.getViewMap(false);
+            if (viewMap != null) {
+                viewRoot.getViewMap().clear();
+            }
+        }
+
+        viewRoot = root;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getResponseWriter()
+     */
+    @Override
+    public ResponseWriter getResponseWriter() {
+        assertNotReleased();
+        return responseWriter;
+    }
+
+
+    /**
+     * @see FacesContext#setResponseWriter(javax.faces.context.ResponseWriter)
+     */
+    @Override
+    public void setResponseWriter(ResponseWriter responseWriter) {
+        assertNotReleased();
+        Util.notNull("responseWriter", responseWriter);
+        this.responseWriter = responseWriter;
+    }
+
+    /**
+     * @see FacesContext#addMessage(String, javax.faces.application.FacesMessage)
+     */
+    @Override
+    public void addMessage(String clientId, FacesMessage message) {
+        assertNotReleased();
+        // Validate our preconditions
+        Util.notNull("message", message);
+
+        if (maxSeverity == null) {
+            maxSeverity = message.getSeverity();
+        } else {
+            Severity sev = message.getSeverity();
+            if (sev.getOrdinal() > maxSeverity.getOrdinal()) {
+                maxSeverity = sev;
+            }
+        }
+
+        if (componentMessageLists == null) {
+            componentMessageLists =
+                  new LinkedHashMap<String, List<FacesMessage>>();
+        }
+
+        // Add this message to our internal queue
+        List<FacesMessage> list = componentMessageLists.get(clientId);
+        if (list == null) {
+            list = new ArrayList<FacesMessage>();
+            componentMessageLists.put(clientId, list);
+        }
+        list.add(message);
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Adding Message[sourceId=" +
+                        (clientId != null ? clientId : "<<NONE>>") +
+                        ",summary=" + message.getSummary() + ")");
+        }
+
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#getCurrentPhaseId()
+     */
+    @Override
+    public PhaseId getCurrentPhaseId() {
+
+        assertNotReleased();
+        return currentPhaseId;
+
+    }
+    
+    
+
+
+    /**
+     * @see javax.faces.context.FacesContext#setCurrentPhaseId(javax.faces.event.PhaseId)
+     */
+    @Override
+    public void setCurrentPhaseId(PhaseId currentPhaseId) {
+
+        assertNotReleased();
+        this.currentPhaseId = currentPhaseId;
+
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#release()
+     */
+    @Override
+    public void release() {
+
+        released = true;
+        externalContext = null;
+        responseStream = null;
+        responseWriter = null;
+        componentMessageLists = null;
+        renderResponse = false;
+        responseComplete = false;
+        validationFailed = false;
+        viewRoot = null;
+        maxSeverity = null;
+        application = null;
+        currentPhaseId = null;
+        if (attributes != null) {
+            attributes.clear();
+            attributes = null;
+        }
+        if (null != resourceLibraryContracts) {
+            resourceLibraryContracts.clear();
+            resourceLibraryContracts = null;
+        }
+        if (partialViewContext != null) {
+            partialViewContext.release();
+        }
+        partialViewContext = null;
+        exceptionHandler = null;
+        elContext = null;
+        rkFactory = null;
+        lastRk = null;
+        lastRkId = null;
+
+        // PENDING(edburns): write testcase that verifies that release
+        // actually works.  This will be important to keep working as
+        // ivars are added and removed on this class over time.
+
+        // Make sure to clear our ThreadLocal instance.
+        setCurrentInstance(null);
+
+        // remove our private ThreadLocal instance.
+        DEFAULT_FACES_CONTEXT.remove();
+
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#renderResponse()
+     */
+    @Override
+    public void renderResponse() {
+        assertNotReleased();
+        renderResponse = true;
+    }
+
+
+    /**
+     * @see javax.faces.context.FacesContext#responseComplete()
+     */
+    @Override
+    public void responseComplete() {
+        assertNotReleased();
+        responseComplete = true;
+    }
+
+    /**
+     * @see javax.faces.context.FacesContext#validationFailed()
+     */
+    @Override
+    public void validationFailed() {
+        assertNotReleased();
+        validationFailed = true;
+    }
+
+    /**
+     * @see javax.faces.context.FacesContext#getRenderResponse()
+     */
+    @Override
+    public boolean getRenderResponse() {
+        assertNotReleased();
+        return renderResponse;
+    }
+
+    @Override
+    public List<String> getResourceLibraryContracts() {
+        assertNotReleased();
+        return (null == resourceLibraryContracts) ? Collections.EMPTY_LIST : resourceLibraryContracts;
+    }
+
+    @Override
+    public void setResourceLibraryContracts(List<String> contracts) {
+        assertNotReleased();
+        if (null == contracts || contracts.isEmpty()) {
+            if (null != resourceLibraryContracts) {
+                resourceLibraryContracts.clear();
+                resourceLibraryContracts = null;
+            }
+        } else {
+            resourceLibraryContracts = new ArrayList<String>(contracts);
+        }
+        
+    }
+
+    
+
+    /**
+     * @see javax.faces.context.FacesContext#getResponseComplete()
+     */
+    @Override
+    public boolean getResponseComplete() {
+        assertNotReleased();
+        return responseComplete;
+    }
+
+    /**
+     * @see javax.faces.context.FacesContext#isValidationFailed()
+     */
+    @Override
+    public boolean isValidationFailed() {
+        assertNotReleased();
+        return validationFailed;
+    }
+
+    // --------------------------------------------------------- Public Methods
+
+
+    public static FacesContext getDefaultFacesContext() {
+
+        return DEFAULT_FACES_CONTEXT.get();
+
+    }
+
+    // -------------------------------------------------------- Private Methods
+
+
+    @SuppressWarnings({"FinalPrivateMethod"})
+    private final void assertNotReleased() {
+        if (released) {
+            throw new IllegalStateException();
+        }
+    }
+
+    
+    // ---------------------------------------------------------- Inner Classes
+
+
+    private static final class ComponentMessagesIterator
+          implements Iterator<FacesMessage> {
+
+
+        private Map<String, List<FacesMessage>> messages;
+        private int outerIndex = -1;
+        private int messagesSize;
+        private Iterator<FacesMessage> inner;
+        private Iterator<String> keys;
+
+        // ------------------------------------------------------- Constructors
+
+
+        ComponentMessagesIterator(Map<String, List<FacesMessage>> messages) {
+
+            this.messages = messages;
+            messagesSize = messages.size();
+            keys = messages.keySet().iterator();
+
+        }
+
+        // ---------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            if (outerIndex == -1) {
+                // pop our first List, if any;
+                outerIndex++;
+                inner = messages.get(keys.next()).iterator();
+
+            }
+            while (!inner.hasNext()) {
+                outerIndex++;
+                if ((outerIndex) < messagesSize) {
+                    inner = messages.get(keys.next()).iterator();
+                } else {
+                    return false;
+                }
+            }
+            return inner.hasNext();
+
+        }
+
+        public FacesMessage next() {
+
+            if (outerIndex >= messagesSize) {
+                throw new NoSuchElementException();
+            }
+            if (inner != null && inner.hasNext()) {
+                return inner.next();
+            } else {
+                // call this.hasNext() to properly initialize/position 'inner'
+                if (!this.hasNext()) {
+                    throw new NoSuchElementException();
+                } else {
+                    return inner.next();
+                }
+            }
+
+        }
+
+        public void remove() {
+
+            if (outerIndex == -1) {
+                throw new IllegalStateException();
+            }
+            inner.remove();
+
+        }
+
+    } // END ComponentMessagesIterator
+
+    // The testcase for this class is TestFacesContextImpl.java
+    // The testcase for this class is TestFacesContextImpl_Model.java
+
+} // end of class FacesContextImpl
diff --git a/com/sun/faces/context/FacesFileNotFoundException.java b/com/sun/faces/context/FacesFileNotFoundException.java
new file mode 100644
index 0000000..80eb99d
--- /dev/null
+++ b/com/sun/faces/context/FacesFileNotFoundException.java
@@ -0,0 +1,71 @@
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.io.FileNotFoundException;
+
+
+/*
+ * This exception thrown in cases when a resource is not found entirely
+ * due to error originating in the user agent, as opposed to an error
+ * originating due to the server side code.  For example it is thrown
+ * when the user agent requests a non-existent Facelet page.  It is not
+ * thrown when a Facelet template client cannot load it's template.
+ * 
+ * The default ExceptionHandler looks for the existence of this
+ * exception as a way to tell when it should send an HTTP 404 status
+ * code, or an HTTP 500 status code.
+
+ */
+public class FacesFileNotFoundException extends FileNotFoundException {
+    private static final long serialVersionUID = 7593137790944497673L;
+
+    public FacesFileNotFoundException(String s) {
+        super(s);
+    }
+
+    public FacesFileNotFoundException() {
+    }
+
+
+
+}
diff --git a/com/sun/faces/context/InitParameterMap.java b/com/sun/faces/context/InitParameterMap.java
new file mode 100644
index 0000000..31808a3
--- /dev/null
+++ b/com/sun/faces/context/InitParameterMap.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.servlet.ServletContext;
+
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getInitParameterMap()  
+ */
+public class InitParameterMap extends BaseContextMap<String> {
+
+    private final ServletContext servletContext;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public InitParameterMap(ServletContext newServletContext) {
+        servletContext = newServletContext;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public String get(Object key) {
+        Util.notNull("key", key);
+        String keyString = key.toString();
+        return servletContext.getInitParameter(keyString);
+    }
+
+
+    @Override
+    public Set<Map.Entry<String,String>> entrySet() {
+        return Collections.unmodifiableSet(super.entrySet());
+    }
+
+
+    @Override
+    public Set<String> keySet() {
+        return Collections.unmodifiableSet(super.keySet());
+    }
+
+
+    @Override
+    public Collection<String> values() {
+        return Collections.unmodifiableCollection(super.values());
+    }
+
+
+    @Override
+    public boolean containsKey(Object key) {
+        return (servletContext.getInitParameter(key.toString()) != null);
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null ||
+                 !(obj.getClass()
+                   == ExternalContextImpl
+                       .theUnmodifiableMapClass)) && super.equals(obj);
+    }
+
+
+    @Override
+    public int hashCode() {
+        int hashCode = 7 * servletContext.hashCode();
+        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
+            hashCode += i.next().hashCode();
+        }
+        return hashCode;
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    protected Iterator<Map.Entry<String,String>> getEntryIterator() {
+        return new EntryIterator(servletContext.getInitParameterNames());
+    }
+
+
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(servletContext.getInitParameterNames());
+    }
+
+
+    protected Iterator<String> getValueIterator() {
+        return new ValueIterator(servletContext.getInitParameterNames());
+    }
+
+} // END InitParameterMap
diff --git a/com/sun/faces/context/InjectionFacesContextFactory.java b/com/sun/faces/context/InjectionFacesContextFactory.java
new file mode 100644
index 0000000..ed2a2ab
--- /dev/null
+++ b/com/sun/faces/context/InjectionFacesContextFactory.java
@@ -0,0 +1,191 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.lang.reflect.Field;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.text.MessageFormat;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContextFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.FacesException;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import javax.faces.FacesWrapper;
+import javax.servlet.ServletRequest;
+
+/**
+ * This {@link FacesContextFactory} is responsible for injecting the
+ * default {@link FacesContext} instance into the top-level {@link FacesContext}
+ * as configured by the runtime.  Doing this allows us to preserve backwards
+ * compatibility as the API evolves without having the API rely on implementation
+ * specific details.  
+ */
+public class InjectionFacesContextFactory extends FacesContextFactory implements FacesWrapper<FacesContextFactory> {
+
+    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+    private FacesContextFactory delegate;
+    private Field defaultFacesContext;
+    private Field defaultExternalContext;
+
+
+
+    // ------------------------------------------------------------ Constructors
+
+    public InjectionFacesContextFactory() {
+    }
+
+    public InjectionFacesContextFactory(FacesContextFactory delegate) {
+
+        Util.notNull("facesContextFactory", delegate);
+        this.delegate = delegate;
+         try {
+            defaultFacesContext = FacesContext.class.getDeclaredField("defaultFacesContext");
+            defaultFacesContext.setAccessible(true);
+        } catch (NoSuchFieldException nsfe) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE, "Unable to find private field named 'defaultFacesContext' in javax.faces.context.FacesContext.");
+            }
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, e.toString(), e);
+            }
+            defaultFacesContext = null;
+        }
+        try {
+            defaultExternalContext = ExternalContext.class.getDeclaredField("defaultExternalContext");
+            defaultExternalContext.setAccessible(true);
+        } catch (NoSuchFieldException nsfe) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE, "Unable to find private field named 'defaultExternalContext' in javax.faces.context.ExternalContext.");
+            }
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, e.toString(), e);
+            }
+            defaultExternalContext = null;
+        }
+
+    }
+
+
+    // ---------------------------------------- Methods from FacesContextFactory
+
+
+    public FacesContext getFacesContext(Object context,
+                                        Object request,
+                                        Object response,
+                                        Lifecycle lifecycle)
+    throws FacesException {
+
+        FacesContext ctx = delegate.getFacesContext(context,
+                                                    request,
+                                                    response,
+                                                    lifecycle);
+        if (ctx == null) {
+            // No i18n here
+            String message = MessageFormat
+                  .format("Delegate FacesContextFactory, {0}, returned null when calling getFacesContext().",
+                          delegate.getClass().getName());
+            throw new IllegalStateException(message);
+        }
+        injectDefaults(ctx, request);
+        return ctx;
+
+    }
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    @Override
+    public FacesContextFactory getWrapped() {
+
+        return delegate;
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void injectDefaults(FacesContext target, Object request) {
+
+        if (defaultFacesContext != null) {
+            FacesContext defaultFC =
+                  FacesContextImpl.getDefaultFacesContext();
+            if (defaultFC != null) {
+                try {
+                    defaultFacesContext.set(target, defaultFC);
+                } catch (IllegalAccessException e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, e.toString(), e);
+                    }
+                }
+            }
+        }
+        if (defaultExternalContext != null) {
+            ExternalContext defaultExtContext = null;
+            if (request instanceof ServletRequest) {
+                ServletRequest reqObj = (ServletRequest) request;
+                defaultExtContext = (ExternalContext) reqObj.getAttribute(ExternalContextFactoryImpl.DEFAULT_EXTERNAL_CONTEXT_KEY);
+                if (defaultExtContext != null) {
+                    reqObj.removeAttribute(ExternalContextFactoryImpl.DEFAULT_EXTERNAL_CONTEXT_KEY);
+                }
+            }
+            if (defaultExtContext != null) {
+                try {
+                    defaultExternalContext.set(target.getExternalContext(), defaultExtContext);
+                } catch (IllegalAccessException e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, e.toString(), e);
+                    }
+                }
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/context/PartialViewContextFactoryImpl.java b/com/sun/faces/context/PartialViewContextFactoryImpl.java
new file mode 100644
index 0000000..81c998d
--- /dev/null
+++ b/com/sun/faces/context/PartialViewContextFactoryImpl.java
@@ -0,0 +1,69 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import javax.faces.context.PartialViewContextFactory;
+import javax.faces.context.PartialViewContext;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p>
+ * Factory to vend the default <code>PartialViewContext</code> instance.
+ * </p>
+ */
+public class PartialViewContextFactoryImpl extends PartialViewContextFactory {
+
+    public PartialViewContextFactoryImpl() {
+    }
+
+    // ---------------------------------- Methods from PartialViewContextFactory
+
+
+    /**
+     * @see PartialViewContextFactory#getPartialViewContext(javax.faces.context.FacesContext)
+     */
+    public PartialViewContext getPartialViewContext(FacesContext context) {
+
+        return new PartialViewContextImpl(context);
+
+    }
+    
+}
diff --git a/com/sun/faces/context/PartialViewContextImpl.java b/com/sun/faces/context/PartialViewContextImpl.java
new file mode 100644
index 0000000..6c08164
--- /dev/null
+++ b/com/sun/faces/context/PartialViewContextImpl.java
@@ -0,0 +1,650 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import com.sun.faces.component.visit.PartialVisitContext;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialResponseWriter;
+import javax.faces.context.PartialViewContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.event.PhaseId;
+
+import java.io.Writer;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Arrays;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import javax.faces.FactoryFinder;
+import static javax.faces.FactoryFinder.VISIT_CONTEXT_FACTORY;
+import javax.faces.component.visit.VisitContextFactory;
+import javax.faces.component.visit.VisitContextWrapper;
+import javax.faces.lifecycle.ClientWindow;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+
+ public class PartialViewContextImpl extends PartialViewContext {
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+
+    private boolean released;
+
+    // BE SURE TO ADD NEW IVARS TO THE RELEASE METHOD
+    private PartialResponseWriter partialResponseWriter;
+    private List<String> executeIds;
+    private Collection<String> renderIds;
+    private Boolean ajaxRequest;
+    private Boolean partialRequest;
+    private Boolean renderAll;
+    private FacesContext ctx;
+    private boolean processingPhases = false;
+
+    private static final String ORIGINAL_WRITER = "com.sun.faces.ORIGINAL_WRITER";
+
+
+    // ----------------------------------------------------------- Constructors
+
+
+    public PartialViewContextImpl(FacesContext ctx) {
+        this.ctx = ctx;
+    }
+
+
+    // ---------------------------------------------- Methods from PartialViewContext
+
+    /**
+     * @see javax.faces.context.PartialViewContext#isAjaxRequest()
+     */
+    @Override
+    public boolean isAjaxRequest() {
+
+        assertNotReleased();
+        if (ajaxRequest == null) {
+            ajaxRequest = "partial/ajax".equals(ctx.
+                getExternalContext().getRequestHeaderMap().get("Faces-Request"));
+            if (!ajaxRequest) {
+                ajaxRequest = "partial/ajax".equals(ctx.getExternalContext().getRequestParameterMap().
+                    get("Faces-Request"));
+            }
+        }
+        return ajaxRequest;
+
+    }
+
+    /**
+     * @see javax.faces.context.PartialViewContext#isPartialRequest()
+     */
+    @Override
+    public boolean isPartialRequest() {
+
+        assertNotReleased();
+        if (partialRequest == null) {
+            partialRequest = isAjaxRequest() ||
+                    "partial/process".equals(ctx.
+                    getExternalContext().getRequestHeaderMap().get("Faces-Request"));
+        }
+        return partialRequest;
+
+    }
+
+
+    /**
+     * @see javax.faces.context.PartialViewContext#isExecuteAll()
+     */
+    @Override
+    public boolean isExecuteAll() {
+
+        assertNotReleased();
+        String execute = ctx.
+            getExternalContext().getRequestParameterMap()
+                .get(PARTIAL_EXECUTE_PARAM_NAME);
+        return (ALL_PARTIAL_PHASE_CLIENT_IDS.equals(execute));
+
+    }
+
+    /**
+     * @see javax.faces.context.PartialViewContext#isRenderAll()
+     */
+    @Override
+    public boolean isRenderAll() {
+
+        assertNotReleased();
+        if (renderAll == null) {
+            String render = ctx.
+                getExternalContext().getRequestParameterMap()
+                    .get(PARTIAL_RENDER_PARAM_NAME);
+            renderAll = (ALL_PARTIAL_PHASE_CLIENT_IDS.equals(render));
+        }
+
+        return renderAll;
+
+    }
+    
+    /**
+     * @see javax.faces.context.PartialViewContext#setRenderAll(boolean) 
+     */
+    @Override
+    public void setRenderAll(boolean renderAll) {
+
+        this.renderAll = renderAll;
+
+    }
+
+    @Override
+    public boolean isResetValues() {
+        Object value = ctx.getExternalContext().getRequestParameterMap().get(RESET_VALUES_PARAM_NAME);
+        return (null != value && "true".equals(value)) ? true : false;
+    }
+
+    @Override
+    public void setPartialRequest(boolean isPartialRequest) {
+        this.partialRequest = isPartialRequest;
+    }
+
+
+    /**
+     * @see javax.faces.context.PartialViewContext#getExecuteIds()
+     */
+    @Override
+    public Collection<String> getExecuteIds() {
+
+        assertNotReleased();
+        if (executeIds != null) {
+            return executeIds;
+        }
+        executeIds = populatePhaseClientIds(PARTIAL_EXECUTE_PARAM_NAME);
+
+        // include the view parameter facet ID if there are other execute IDs
+        // to process
+        if (!executeIds.isEmpty()) {
+            UIViewRoot root = ctx.getViewRoot();
+            if (root.getFacetCount() > 0) {
+                if (root.getFacet(UIViewRoot.METADATA_FACET_NAME) != null) {
+                    executeIds.add(0, UIViewRoot.METADATA_FACET_NAME);   
+                }
+            }
+        }
+        return executeIds;
+
+    }
+
+    /**
+     * @see javax.faces.context.PartialViewContext#getRenderIds()
+     */
+    @Override
+    public Collection<String> getRenderIds() {
+
+        assertNotReleased();
+        if (renderIds != null) {
+            return renderIds;
+        }
+        renderIds = populatePhaseClientIds(PARTIAL_RENDER_PARAM_NAME);
+        return renderIds;
+
+    }
+
+    /**
+     * @see PartialViewContext#processPartial(javax.faces.event.PhaseId) 
+     */
+    @Override
+    public void processPartial(PhaseId phaseId) {
+        PartialViewContext pvc = ctx.getPartialViewContext();
+        Collection <String> myExecuteIds = pvc.getExecuteIds();
+        Collection <String> myRenderIds = pvc.getRenderIds();
+        UIViewRoot viewRoot = ctx.getViewRoot();
+
+        if (phaseId == PhaseId.APPLY_REQUEST_VALUES ||
+            phaseId == PhaseId.PROCESS_VALIDATIONS ||
+            phaseId == PhaseId.UPDATE_MODEL_VALUES) {
+
+            // Skip this processing if "none" is specified in the render list,
+            // or there were no execute phase client ids.
+
+            if (myExecuteIds == null || myExecuteIds.isEmpty()) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                        "No execute and render identifiers specified.  Skipping component processing.");
+                }
+                return;
+            }
+
+            try {
+                processComponents(viewRoot, phaseId, myExecuteIds, ctx);
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.log(Level.INFO,
+                           e.toString(),
+                           e);
+                }
+                throw new FacesException(e);
+            }
+
+            // If we have just finished APPLY_REQUEST_VALUES phase, install the
+            // partial response writer.  We want to make sure that any content
+            // or errors generated in the other phases are written using the
+            // partial response writer.
+            //
+            if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
+                PartialResponseWriter writer = pvc.getPartialResponseWriter();
+                ctx.setResponseWriter(writer);
+            }
+
+        } else if (phaseId == PhaseId.RENDER_RESPONSE) {
+
+            try {
+                //
+                // We re-enable response writing.
+                //
+                PartialResponseWriter writer = pvc.getPartialResponseWriter();
+                ResponseWriter orig = ctx.getResponseWriter();
+                ctx.getAttributes().put(ORIGINAL_WRITER, orig);
+                ctx.setResponseWriter(writer);
+
+                ExternalContext exContext = ctx.getExternalContext();
+                exContext.setResponseContentType("text/xml");
+                exContext.addResponseHeader("Cache-Control", "no-cache");
+                
+//                String encoding = writer.getCharacterEncoding( );
+//                if( encoding == null ) {
+//                    encoding = "UTF-8";
+//                }
+//                writer.writePreamble("<?xml version='1.0' encoding='" + encoding + "'?>\n");
+                writer.startDocument();
+                
+                if (isResetValues()) {
+                    viewRoot.resetValues(ctx, myRenderIds);
+                }
+                
+                if (isRenderAll()) {
+                    renderAll(ctx, viewRoot);
+                    renderState(ctx);
+                    writer.endDocument();
+                    return;
+                }
+
+                // Skip this processing if "none" is specified in the render list,
+                // or there were no render phase client ids.
+                if (myRenderIds != null && !myRenderIds.isEmpty()) {
+                    processComponents(viewRoot, phaseId, myRenderIds, ctx);
+                }
+
+                renderState(ctx);
+
+                writer.endDocument();
+            } catch (IOException ex) {
+                this.cleanupAfterView();
+            } catch (RuntimeException ex) {
+                this.cleanupAfterView();
+                // Throw the exception
+                throw ex;
+            }
+        }
+    }
+
+    /**
+     * @see javax.faces.context.PartialViewContext#getPartialResponseWriter()
+     */
+    @Override
+    public PartialResponseWriter getPartialResponseWriter() {
+        assertNotReleased();
+        if (partialResponseWriter == null) {
+            partialResponseWriter = new DelayedInitPartialResponseWriter(this);
+        }
+        return partialResponseWriter;
+    }
+
+    /**
+     * @see javax.faces.context.PartialViewContext#release()
+     */
+    public void release() {
+        
+        released = true;
+        ajaxRequest = null;
+        renderAll = null;
+        partialResponseWriter = null;
+        executeIds = null;
+        renderIds = null;
+        ctx = null;
+        partialRequest = null;
+
+    }
+
+    // -------------------------------------------------------- Private Methods
+
+
+
+    private List<String> populatePhaseClientIds(String parameterName) {
+
+        Map<String,String> requestParamMap =
+              ctx.getExternalContext().getRequestParameterMap();
+
+        String param = requestParamMap.get(parameterName);
+        if (param == null) {
+            return new ArrayList<String>();
+        } else {
+            Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+            String[] pcs = Util.split(appMap, param, "[ \t]+");
+            return ((pcs != null && pcs.length != 0)
+                    ? new ArrayList<String>(Arrays.asList(pcs))
+                    : new ArrayList<String>());
+        }
+        
+    }
+
+    // Process the components specified in the phaseClientIds list
+    private void processComponents(UIComponent component, PhaseId phaseId,
+        Collection<String> phaseClientIds, FacesContext context) throws IOException {
+
+        // We use the tree visitor mechanism to locate the components to
+        // process.  Create our (partial) VisitContext and the
+        // VisitCallback that will be invoked for each component that
+        // is visited.  Note that we use the SKIP_UNRENDERED hint as we
+        // only want to visit the rendered subtree.
+        EnumSet<VisitHint> hints = EnumSet.of(VisitHint.SKIP_UNRENDERED, VisitHint.EXECUTE_LIFECYCLE);
+        VisitContextFactory visitContextFactory = (VisitContextFactory) 
+                FactoryFinder.getFactory(VISIT_CONTEXT_FACTORY);
+        VisitContext visitContext = visitContextFactory.getVisitContext(context, phaseClientIds, hints);
+        PhaseAwareVisitCallback visitCallback =
+            new PhaseAwareVisitCallback(ctx, phaseId);
+        component.visitTree(visitContext, visitCallback);
+
+        PartialVisitContext partialVisitContext = unwrapPartialVisitContext(visitContext);
+        if (partialVisitContext != null) {
+            if (LOGGER.isLoggable(Level.FINER) && !partialVisitContext.getUnvisitedClientIds().isEmpty()) {
+                Collection<String> unvisitedClientIds = partialVisitContext.getUnvisitedClientIds();
+                String message;
+                StringBuilder builder = new StringBuilder();
+                for (String cur : unvisitedClientIds) {
+                    builder.append(cur).append(" ");
+                }
+                LOGGER.log(Level.FINER,
+                        "jsf.context.partial_visit_context_unvisited_children",
+                        new Object[]{builder.toString()});
+            }
+        }    
+    }
+
+    /**
+     * Unwraps {@link PartialVisitContext} from a chain of {@link VisitContextWrapper}s.
+     *
+     * If no {@link PartialVisitContext} is found in the chain, null is returned instead.
+     * 
+     * @param visitContext the visit context.
+     * @return the (unwrapped) partial visit context.
+     */
+    private static PartialVisitContext unwrapPartialVisitContext(VisitContext visitContext) {
+        if (visitContext == null) {
+            return null;
+        }
+        if (visitContext instanceof PartialVisitContext) {
+            return (PartialVisitContext) visitContext;
+        }
+        if (visitContext instanceof VisitContextWrapper) {
+            return unwrapPartialVisitContext(((VisitContextWrapper) visitContext).getWrapped());
+        }
+        return null;
+    }
+    
+    private void renderAll(FacesContext context, UIViewRoot viewRoot) throws IOException {
+        // If this is a "render all via ajax" request,
+        // make sure to wrap the entire page in a <render> elemnt
+        // with the special viewStateId of VIEW_ROOT_ID.  This is how the client
+        // JavaScript knows how to replace the entire document with
+        // this response.
+        PartialViewContext pvc = context.getPartialViewContext();
+        PartialResponseWriter writer = pvc.getPartialResponseWriter();
+        
+        if (!Util.isPortletRequest(context)) {
+            writer.startUpdate(PartialResponseWriter.RENDER_ALL_MARKER);
+            if (viewRoot.getChildCount() > 0) {
+                for (UIComponent uiComponent : viewRoot.getChildren()) {
+                    uiComponent.encodeAll(context);
+                }
+            }
+            writer.endUpdate();
+        }
+        else {
+            /*
+             * If we have a portlet request, start rendering at the view root.
+             */
+            writer.startUpdate(viewRoot.getClientId(ctx));
+            viewRoot.encodeBegin(context);
+            if (viewRoot.getChildCount() > 0) {
+                for (UIComponent uiComponent : viewRoot.getChildren()) {
+                    uiComponent.encodeAll(context);
+                }
+            }
+            viewRoot.encodeEnd(context);
+            writer.endUpdate();
+        }
+    }
+
+    private void renderState(FacesContext context) throws IOException {
+        // Get the view state and write it to the response..
+        PartialViewContext pvc = context.getPartialViewContext();
+        PartialResponseWriter writer = pvc.getPartialResponseWriter();
+        String viewStateId = Util.getViewStateId(context);
+
+        writer.startUpdate(viewStateId);
+        String state = context.getApplication().getStateManager().getViewState(context);
+        writer.write(state);
+        writer.endUpdate();
+
+        ClientWindow window = context.getExternalContext().getClientWindow();
+        if (null != window) {
+            String clientWindowId = Util.getClientWindowId(context);
+            writer.startUpdate(clientWindowId);
+            writer.write(window.getId());
+            writer.endUpdate();
+        }
+    }
+
+    private PartialResponseWriter createPartialResponseWriter() {
+
+        ExternalContext extContext = ctx.getExternalContext();
+        String encoding = extContext.getRequestCharacterEncoding();
+        extContext.setResponseCharacterEncoding(encoding);
+        ResponseWriter responseWriter = null;
+        Writer out = null;
+        try {
+            out = extContext.getResponseOutputWriter();
+        } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           ioe.toString(),
+                           ioe);
+            }
+        }
+
+        if (out != null) {
+            UIViewRoot viewRoot = ctx.getViewRoot();
+            if (viewRoot != null) {
+                responseWriter =
+                    ctx.getRenderKit().createResponseWriter(out,
+                    "text/xml", encoding);
+            } else {
+                RenderKitFactory factory = (RenderKitFactory)
+                    FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+                RenderKit renderKit = factory.getRenderKit(ctx, RenderKitFactory.HTML_BASIC_RENDER_KIT);
+                responseWriter = renderKit.createResponseWriter(out, "text/xml", encoding);
+            }
+        }
+        if (responseWriter instanceof PartialResponseWriter)  {
+            return (PartialResponseWriter) responseWriter;
+        } else {
+            return new PartialResponseWriter(responseWriter);
+        }
+
+    }
+
+    private void cleanupAfterView() {
+        ResponseWriter orig = (ResponseWriter) ctx.getAttributes().
+            get(ORIGINAL_WRITER);
+        assert(null != orig);
+        // move aside the PartialResponseWriter
+        ctx.setResponseWriter(orig);
+    }
+
+
+    @SuppressWarnings({"FinalPrivateMethod"})
+    private final void assertNotReleased() {
+        if (released) {
+            throw new IllegalStateException();
+        }
+    }
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class PhaseAwareVisitCallback implements VisitCallback {
+
+        private PhaseId curPhase;
+        private FacesContext ctx;
+
+        private PhaseAwareVisitCallback(FacesContext ctx, PhaseId curPhase) {
+            this.ctx = ctx;
+            this.curPhase = curPhase;
+        }  
+
+
+        public VisitResult visit(VisitContext context, UIComponent comp) {
+            try {
+
+                if (curPhase == PhaseId.APPLY_REQUEST_VALUES) {
+
+                    // RELEASE_PENDING handle immediate request(s)
+                    // If the user requested an immediate request
+                    // Make sure to set the immediate flag here.
+
+                    comp.processDecodes(ctx);
+                } else if (curPhase == PhaseId.PROCESS_VALIDATIONS) {
+                    comp.processValidators(ctx);
+                } else if (curPhase == PhaseId.UPDATE_MODEL_VALUES) {
+                    comp.processUpdates(ctx);
+                } else if (curPhase == PhaseId.RENDER_RESPONSE) {
+                    PartialResponseWriter writer = ctx.getPartialViewContext().getPartialResponseWriter();
+                    writer.startUpdate(comp.getClientId(ctx));
+                    // do the default behavior...
+                    comp.encodeAll(ctx);
+                    writer.endUpdate();
+                } else {
+                    throw new IllegalStateException("I18N: Unexpected " +
+                                                    "PhaseId passed to " +
+                                              " PhaseAwareContextCallback: " +
+                                                    curPhase.toString());
+                }
+            }
+            catch (IOException ex) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.severe(ex.toString());
+                }
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE,
+                    ex.toString(),
+                    ex);
+                }
+                throw new FacesException(ex);
+            }
+
+            // Once we visit a component, there is no need to visit
+            // its children, since processDecodes/Validators/Updates and
+            // encodeAll() already traverse the subtree.  We return
+            // VisitResult.REJECT to supress the subtree visit.
+            return VisitResult.REJECT;
+        }
+    }
+
+
+     /**
+      * Delays the actual construction of the PartialResponseWriter <em>until</em>
+      * content is going to actually be written.
+      */
+    private static final class DelayedInitPartialResponseWriter extends PartialResponseWriter {
+
+        private ResponseWriter writer;
+        private PartialViewContextImpl ctx;
+
+        // -------------------------------------------------------- Constructors
+
+
+        public DelayedInitPartialResponseWriter(PartialViewContextImpl ctx) {
+
+            super(null);
+            this.ctx = ctx;
+            ExternalContext extCtx = ctx.ctx.getExternalContext();
+            extCtx.setResponseContentType("text/xml");
+            extCtx.setResponseCharacterEncoding(extCtx.getRequestCharacterEncoding());
+
+        }
+
+
+        // ---------------------------------- Methods from PartialResponseWriter
+
+
+        @Override
+        public ResponseWriter getWrapped() {
+
+            if (writer == null) {
+                writer = ctx.createPartialResponseWriter();
+            }
+            return writer;
+
+        }
+         
+    } // END DelayedInitPartialResponseWriter
+
+} 
diff --git a/com/sun/faces/context/RequestCookieMap.java b/com/sun/faces/context/RequestCookieMap.java
new file mode 100644
index 0000000..777d3e0
--- /dev/null
+++ b/com/sun/faces/context/RequestCookieMap.java
@@ -0,0 +1,184 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.Cookie;
+
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getRequestCookieMap()  
+ */
+public class RequestCookieMap extends BaseContextMap<Object> {
+
+    private final HttpServletRequest request;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RequestCookieMap(HttpServletRequest newRequest) {
+        this.request = newRequest;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public Object get(Object key) {
+        Util.notNull("key", key);
+
+        Cookie[] cookies = request.getCookies();
+        if (null == cookies) {
+            return null;
+        }
+
+        String keyString = key.toString();
+        Object result = null;
+
+        for (int i = 0; i < cookies.length; i++) {
+            if (cookies[i].getName().equals(keyString)) {
+                result = cookies[i];
+                break;
+            }
+        }
+        return result;
+    }
+
+
+    @Override
+    public Set<Map.Entry<String,Object>> entrySet() {
+        return Collections.unmodifiableSet(super.entrySet());
+    }
+
+
+    @Override
+    public Set<String> keySet() {
+        return Collections.unmodifiableSet(super.keySet());
+    }
+
+
+    @Override
+    public Collection<Object> values() {
+        return Collections.unmodifiableCollection(super.values());
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null ||
+                 !(obj.getClass()
+                   == ExternalContextImpl
+                       .theUnmodifiableMapClass)) && super.equals(obj);
+    }
+
+
+    @Override
+    public int hashCode() {
+        int hashCode = 7 * request.hashCode();
+        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
+            hashCode += i.next().hashCode();
+        }
+        return hashCode;
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    protected Iterator<Map.Entry<String,Object>> getEntryIterator() {
+        return new EntryIterator(
+                new CookieArrayEnumerator(request.getCookies()));
+    }
+
+
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(
+                new CookieArrayEnumerator(request.getCookies()));
+    }
+
+
+    protected Iterator<Object> getValueIterator() {
+        return new ValueIterator(
+            new CookieArrayEnumerator(request.getCookies()));
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class CookieArrayEnumerator implements Enumeration {
+
+        Cookie[] cookies;
+        int curIndex = -1;
+        int upperBound;
+
+        public CookieArrayEnumerator(Cookie[] cookies) {
+            this.cookies = cookies;
+            upperBound = ((this.cookies != null) ? this.cookies.length : -1);
+        }
+
+        public boolean hasMoreElements() {
+            return (curIndex + 2 <= upperBound);
+        }
+
+        public Object nextElement() {
+            curIndex++;
+            if (curIndex < upperBound) {
+                return cookies[curIndex].getName();
+            } else {
+                throw new NoSuchElementException();
+            }
+        }
+        
+    }
+
+} // END RequestCookiesMap
diff --git a/com/sun/faces/context/RequestHeaderMap.java b/com/sun/faces/context/RequestHeaderMap.java
new file mode 100644
index 0000000..722a313
--- /dev/null
+++ b/com/sun/faces/context/RequestHeaderMap.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getRequestHeaderMap()  
+ */
+public class RequestHeaderMap extends BaseContextMap<String> {
+
+    private final HttpServletRequest request;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RequestHeaderMap(HttpServletRequest request) {
+        this.request = request;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public String get(Object key) {
+        Util.notNull("key", key);
+
+        return (request.getHeader(key.toString()));
+    }
+
+
+    @Override
+    public Set<Map.Entry<String,String>> entrySet() {
+        return Collections.unmodifiableSet(super.entrySet());
+    }
+
+
+    @Override
+    public Set<String> keySet() {
+        return Collections.unmodifiableSet(super.keySet());
+    }
+
+
+    @Override
+    public Collection<String> values() {
+        return Collections.unmodifiableCollection(super.values());
+    }
+
+
+    @Override
+    public boolean containsKey(Object key) {
+        return (request.getHeader(key.toString()) != null);
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null ||
+                 !(obj.getClass()
+                   == ExternalContextImpl
+                       .theUnmodifiableMapClass)) && super.equals(obj);
+    }
+
+
+    @Override
+    public int hashCode() {
+        int hashCode = 7 * request.hashCode();
+        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
+            hashCode += i.next().hashCode();
+        }
+        return hashCode;
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    protected Iterator<Map.Entry<String,String>> getEntryIterator() {
+        return new EntryIterator(request.getHeaderNames());
+    }
+
+
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(request.getHeaderNames());
+    }
+
+
+    protected Iterator<String> getValueIterator() {
+        return new ValueIterator(request.getHeaderNames());
+    }
+
+} // END RequestHeaderMap
diff --git a/com/sun/faces/context/RequestHeaderValuesMap.java b/com/sun/faces/context/RequestHeaderValuesMap.java
new file mode 100644
index 0000000..ca2b715
--- /dev/null
+++ b/com/sun/faces/context/RequestHeaderValuesMap.java
@@ -0,0 +1,144 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getRequestHeaderValuesMap()
+ */
+public class RequestHeaderValuesMap extends StringArrayValuesMap {
+
+    private final HttpServletRequest request;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RequestHeaderValuesMap(HttpServletRequest request) {
+        this.request = request;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public boolean containsKey(Object key) {
+        return (request.getHeaders(key.toString()) != null);
+    }
+
+
+    @Override
+    public String[] get(Object key) {
+        Util.notNull("key", key);
+
+        List<String> valuesList = new ArrayList<String>();
+        Enumeration valuesEnum = this.request.getHeaders(key.toString());
+        while (valuesEnum.hasMoreElements()) {
+            valuesList.add((String) valuesEnum.nextElement());
+        }
+
+        return valuesList.toArray(new String[valuesList.size()]);
+    }
+
+
+    @Override
+    public Set<Map.Entry<String,String[]>> entrySet() {
+        return Collections.unmodifiableSet(super.entrySet());
+    }
+
+
+    @Override
+    public Set<String> keySet() {
+        return Collections.unmodifiableSet(super.keySet());
+    }
+
+
+    @Override
+    public Collection<String[]> values() {
+        return Collections.unmodifiableCollection(super.values());
+    }
+
+
+    @Override
+    public int hashCode() {
+        return hashCode(request);
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+       return !(obj == null || !(obj.getClass()
+                   == ExternalContextImpl
+                       .theUnmodifiableMapClass))
+               && super.equals(obj);
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+    protected Iterator<Map.Entry<String,String[]>> getEntryIterator() {
+        return new EntryIterator(request.getHeaderNames());
+    }
+
+
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(request.getHeaderNames());
+    }
+
+
+    protected Iterator<String[]> getValueIterator() {
+        return new ValueIterator(request.getHeaderNames());
+    }
+
+} // END RequestHeaderValuesMap
diff --git a/com/sun/faces/context/RequestMap.java b/com/sun/faces/context/RequestMap.java
new file mode 100644
index 0000000..f66bd76
--- /dev/null
+++ b/com/sun/faces/context/RequestMap.java
@@ -0,0 +1,158 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Iterator;
+
+import javax.servlet.ServletRequest;
+
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getRequestMap() 
+ */
+public class RequestMap extends BaseContextMap<Object> {
+
+    private final ServletRequest request;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RequestMap(ServletRequest request) {
+        this.request = request;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public void clear() {
+        for (Enumeration e = request.getAttributeNames();
+             e.hasMoreElements(); ) {
+            request.removeAttribute((String) e.nextElement());
+        }
+    }
+
+
+    // Supported by maps if overridden
+    @Override
+    public void putAll(Map t) {
+        for (Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry entry = (Map.Entry) i.next();
+            request.setAttribute((String) entry.getKey(),
+                                        entry.getValue());
+        }
+    }
+
+
+    @Override
+    public Object get(Object key) {
+        Util.notNull("key", key);
+        return request.getAttribute(key.toString());
+    }
+
+
+    @Override
+    public Object put(String key, Object value) {
+        Util.notNull("key", key);
+        Object result = request.getAttribute(key);
+        request.setAttribute(key, value);
+        return (result);
+    }
+
+
+    @Override
+    public Object remove(Object key) {
+        if (key == null) {
+            return null;
+        }
+        String keyString = key.toString();
+        Object result = request.getAttribute(keyString);
+        request.removeAttribute(keyString);
+        return (result);
+    }
+
+
+    @Override
+    public boolean containsKey(Object key) {
+        return (request.getAttribute(key.toString()) != null);
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null || !(obj instanceof RequestMap))
+               && super.equals(obj);
+    }
+
+
+    @Override
+    public int hashCode() {
+        int hashCode = 7 * request.hashCode();
+        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
+            hashCode += i.next().hashCode();
+        }
+        return hashCode;
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    protected Iterator<Map.Entry<String,Object>> getEntryIterator() {
+        return new EntryIterator(request.getAttributeNames());
+    }
+
+
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(request.getAttributeNames());
+    }
+
+
+    protected Iterator<Object> getValueIterator() {
+        return new ValueIterator(request.getAttributeNames());
+    }
+
+} // END RequestMap
diff --git a/com/sun/faces/context/RequestParameterMap.java b/com/sun/faces/context/RequestParameterMap.java
new file mode 100644
index 0000000..5f729f5
--- /dev/null
+++ b/com/sun/faces/context/RequestParameterMap.java
@@ -0,0 +1,189 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.faces.application.Application;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletRequest;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getRequestParameterMap() 
+ */
+public class RequestParameterMap extends BaseContextMap<String> {
+
+    private String namingContainerId;
+    private final boolean namespaceParameters;
+    private final ServletRequest request;
+    private boolean inspectedParameterNames = false;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RequestParameterMap(ServletRequest request) {
+        this.request = request;
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        namespaceParameters = webConfig.isOptionEnabled(
+                  BooleanWebContextInitParameter.NamespaceParameters);
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public String get(Object key) {
+        Util.notNull("key", key);
+        if (!inspectedParameterNames) {
+            inspectedParameterNames = true;
+            request.getParameterNames();
+        }
+    	String mapKey = key.toString();
+        String mapValue = null;
+        if (namespaceParameters) {
+            mapValue = request.getParameter(getNamingContainerId() + mapKey);
+        }
+        if (mapValue == null) {
+        	mapValue = request.getParameter(mapKey);
+        }
+        return mapValue;
+    }
+
+
+    @Override
+    public Set<Map.Entry<String,String>> entrySet() {
+        return Collections.unmodifiableSet(super.entrySet());
+    }
+
+
+    @Override
+    public Set<String> keySet() {
+        return Collections.unmodifiableSet(super.keySet());
+    }
+
+
+    protected String getNamingContainerId() {
+        if (null == namingContainerId) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            UIViewRoot viewRoot = context.getViewRoot();
+            if (viewRoot == null) {
+                Application application = context.getApplication();
+                viewRoot = (UIViewRoot) application.createComponent(UIViewRoot.COMPONENT_TYPE);
+            }
+            if (viewRoot instanceof NamingContainer) {
+                namingContainerId = viewRoot.getContainerClientId(context);
+            } else {
+                namingContainerId = "";
+            }
+        }
+        return namingContainerId;
+    }
+
+
+    @Override
+    public Collection<String> values() {
+        return Collections.unmodifiableCollection(super.values());
+    }
+
+
+    @Override
+    public boolean containsKey(Object key) {    	
+    	boolean containsKey = false;
+    	String mapKey = key.toString();
+        if (namespaceParameters) {
+            containsKey = (request.getParameter(getNamingContainerId() + mapKey) != null);
+        }
+        if (!containsKey) {
+        	containsKey = (request.getParameter(mapKey) != null);
+        }
+        return containsKey;
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null ||
+                 !(obj.getClass()
+                   == ExternalContextImpl
+                       .theUnmodifiableMapClass)) && super.equals(obj);
+    }
+
+
+    @Override
+    public int hashCode() {
+        int hashCode = 7 * request.hashCode();
+        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
+            hashCode += i.next().hashCode();
+        }
+        return hashCode;
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    protected Iterator<Map.Entry<String,String>> getEntryIterator() {
+        return new EntryIterator(request.getParameterNames());
+    }
+
+
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(request.getParameterNames());
+    }
+
+    
+    protected Iterator<String> getValueIterator() {
+        return new ValueIterator(request.getParameterNames());
+    }
+
+} // END RequestParameterMap
diff --git a/com/sun/faces/context/RequestParameterValuesMap.java b/com/sun/faces/context/RequestParameterValuesMap.java
new file mode 100644
index 0000000..73a3e80
--- /dev/null
+++ b/com/sun/faces/context/RequestParameterValuesMap.java
@@ -0,0 +1,135 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.servlet.ServletRequest;
+
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getRequestParameterValuesMap()  
+ */
+public class RequestParameterValuesMap extends StringArrayValuesMap {
+
+    private final ServletRequest request;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RequestParameterValuesMap(ServletRequest request) {
+        this.request = request;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public String[] get(Object key) {
+        Util.notNull("key", key);
+        return request.getParameterValues(key.toString());
+    }
+
+
+    @Override
+    public boolean containsKey(Object key) {
+        return (request.getParameterValues(key.toString()) != null);
+    }
+
+
+    @Override
+    public Set<Map.Entry<String,String[]>> entrySet() {
+        return Collections.unmodifiableSet(super.entrySet());
+    }
+
+
+    @Override
+    public Set<String> keySet() {
+        return Collections.unmodifiableSet(super.keySet());
+    }
+
+
+    @Override
+    public Collection<String[]> values() {
+        return Collections.unmodifiableCollection(super.values());
+    }
+
+
+    @Override
+    public int hashCode() {
+        return hashCode(request);
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null || !(obj.getClass()
+                   == ExternalContextImpl
+                       .theUnmodifiableMapClass))
+               && super.equals(obj);
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    protected Iterator<Map.Entry<String, String[]>> getEntryIterator() {
+        return new EntryIterator(request.getParameterNames());
+    }
+
+
+    protected Iterator<String> getKeyIterator() {
+        return new KeyIterator(request.getParameterNames());
+    }
+
+
+    protected Iterator<String[]> getValueIterator() {
+        return new ValueIterator(request.getParameterNames());
+    }
+
+} // END RequestParameterValuesMap
diff --git a/com/sun/faces/context/SessionMap.java b/com/sun/faces/context/SessionMap.java
new file mode 100644
index 0000000..ff0bb4c
--- /dev/null
+++ b/com/sun/faces/context/SessionMap.java
@@ -0,0 +1,240 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.Collections;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.io.Serializable;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.faces.application.ProjectStage;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+/**
+ * @see javax.faces.context.ExternalContext#getSessionMap()  
+ */
+public class SessionMap extends BaseContextMap<Object> {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    private final HttpServletRequest request;
+    private final ProjectStage stage;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public SessionMap(HttpServletRequest request, ProjectStage stage) {
+        this.request = request;
+        this.stage = stage;
+    }
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public void clear() {
+        HttpSession session = getSession(false);
+        if (session != null) {
+            for (Enumeration e = session.getAttributeNames();
+                 e.hasMoreElements();) {
+                String name = (String) e.nextElement();
+                session.removeAttribute(name);
+            }
+        }
+    }
+
+
+    // Supported by maps if overridden
+    @Override
+    public void putAll(Map t) {
+        HttpSession session = getSession(true);
+        for (Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry entry = (Map.Entry) i.next();
+            Object v = entry.getValue();
+            Object k = entry.getKey();
+            if (ProjectStage.Development.equals(stage) && !(v instanceof Serializable)) {
+            	if (LOGGER.isLoggable(Level.WARNING)) {
+	                LOGGER.log(Level.WARNING,
+	                           "jsf.context.extcontext.sessionmap.nonserializable",
+	                           new Object[] { k, v.getClass().getName() });
+            	}
+            }
+            //noinspection NonSerializableObjectBoundToHttpSession
+            session.setAttribute((String) k, v);
+        }
+    }
+
+
+    @Override
+    public Object get(Object key) {
+        Util.notNull("key", key);
+        HttpSession session = getSession(false);
+        return ((session != null) ? session.getAttribute(key.toString()) : null);
+
+    }
+
+
+    @Override
+    public Object put(String key, Object value) {
+        Util.notNull("key", key);
+        HttpSession session = getSession(true);
+        Object result = session.getAttribute(key);
+        if (value != null && ProjectStage.Development.equals(stage) && !(value instanceof Serializable)) {
+        	if (LOGGER.isLoggable(Level.WARNING)) {
+	            LOGGER.log(Level.WARNING,
+	                       "jsf.context.extcontext.sessionmap.nonserializable",
+	                       new Object[]{key, value.getClass().getName()});
+        	}
+        }
+        //noinspection NonSerializableObjectBoundToHttpSession
+        boolean doSet = true;
+        if (null != value && null != result) {
+            int valCode = System.identityHashCode(value);
+            int resultCode = System.identityHashCode(result);
+            doSet = valCode != resultCode;
+        }
+        if (doSet) {
+            session.setAttribute(key, value);
+        }
+        return (result);
+    }
+
+
+    @Override
+    public Object remove(Object key) {
+        if (key == null) {
+            return null;
+        }
+        HttpSession session = getSession(false);
+        if (session != null) {
+            String keyString = key.toString();
+            Object result = session.getAttribute(keyString);
+            session.removeAttribute(keyString);
+            return (result);
+        }
+        return null;
+    }
+
+
+    @Override
+    public boolean containsKey(Object key) {
+        HttpSession session = getSession(false);
+        return ((session != null)
+                && session.getAttribute(key.toString()) != null);
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+        return !(obj == null || !(obj instanceof SessionMap))
+               && super.equals(obj);
+    }
+
+
+    @Override
+    public int hashCode() {
+        HttpSession session = getSession(false);
+        int hashCode =
+              7 * ((session != null) ? session.hashCode() : super.hashCode());
+        if (session != null) {
+            for (Iterator i = entrySet().iterator(); i.hasNext();) {
+                hashCode += i.next().hashCode();
+            }
+        }
+        return hashCode;
+    }
+
+
+    // --------------------------------------------- Methods from BaseContextMap
+
+
+    @SuppressWarnings("unchecked")
+    protected Iterator<Map.Entry<String,Object>> getEntryIterator() {
+        HttpSession session = getSession(false);
+        if (session != null) {
+            return new EntryIterator(session.getAttributeNames());
+        } else {
+            Map<String,Object> empty = Collections.emptyMap();
+            return empty.entrySet().iterator();
+        }
+    }
+
+
+    @SuppressWarnings("unchecked")
+    protected Iterator<String> getKeyIterator() {
+        HttpSession session = getSession(false);
+        if (session != null) {
+            return new KeyIterator(session.getAttributeNames());
+        } else {
+            Map<String,Object> empty = Collections.emptyMap();
+            return empty.keySet().iterator();
+        }
+    }
+
+
+    @SuppressWarnings("unchecked")
+    protected Iterator<Object> getValueIterator() {
+        HttpSession session = getSession(false);
+         if (session != null) {
+            return new ValueIterator(session.getAttributeNames());
+        } else {
+            Map<String,Object> empty = Collections.emptyMap();
+            return empty.values().iterator();
+        }
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    protected HttpSession getSession(boolean createNew) {
+        return request.getSession(createNew);
+    }
+
+} // END SessionMap
diff --git a/com/sun/faces/context/StateContext.java b/com/sun/faces/context/StateContext.java
new file mode 100644
index 0000000..789adea
--- /dev/null
+++ b/com/sun/faces/context/StateContext.java
@@ -0,0 +1,780 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.ApplicationStateInfo;
+import com.sun.faces.util.ComponentStruct;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.event.PreRemoveFromViewEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Map.Entry;
+import java.util.Set;
+import static com.sun.faces.RIConstants.DYNAMIC_CHILD_COUNT;
+import static com.sun.faces.RIConstants.DYNAMIC_COMPONENT;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MostlySingletonSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.logging.Logger;
+import javax.faces.FacesException;
+
+/**
+ * Context for dealing with partial state saving mechanics.
+ */
+public class StateContext {
+
+
+    private static final String KEY = StateContext.class.getName() + "_KEY";
+    
+    // Expando attribute used to mark dynamic UIComponents that have had their
+    // ComponentSupport.MARK_CREATED expando removed.
+    private static final String MARK_CREATED_REMOVED =
+            StateContext.class.getName() + "_MARK_CREATED_REMOVED";
+    
+    private boolean partial;
+    private boolean partialLocked;
+    private boolean trackMods = true;
+    private AddRemoveListener modListener;
+    private ApplicationStateInfo stateInfo;
+    private WeakReference<UIViewRoot> viewRootRef = new WeakReference<UIViewRoot>(null);
+
+    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private StateContext(ApplicationStateInfo stateInfo) {
+
+        this.stateInfo = stateInfo;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+    /**
+     * Release the state context.
+     * 
+     * @param facesContext the Faces context.
+     */
+    public static void release(FacesContext facesContext) {
+        StateContext stateContext = (StateContext) facesContext.getAttributes().get(KEY);
+        UIViewRoot viewRoot = facesContext.getViewRoot();
+        if (viewRoot != null && stateContext.modListener != null) {
+            viewRoot.unsubscribeFromViewEvent(PostAddToViewEvent.class, stateContext.modListener);
+            viewRoot.unsubscribeFromViewEvent(PreRemoveFromViewEvent.class, stateContext.modListener);
+        }
+        facesContext.getAttributes().remove(KEY);
+    }
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @return <code>StateContext</code> for this request
+     */
+    public static StateContext getStateContext(FacesContext ctx) {
+
+        StateContext stateCtx = (StateContext) ctx.getAttributes().get(KEY);
+        if (stateCtx == null) {
+            ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
+            ApplicationStateInfo info = associate.getApplicationStateInfo();
+            stateCtx = new StateContext(info);
+            ctx.getAttributes().put(KEY, stateCtx);
+        }
+        return stateCtx;
+
+    }
+
+    /**
+     * @param ctx FacesContext.
+     * @param viewId the view ID to check or null if viewId is unknown.
+     * @return <code>true</code> if partial state saving should be used for the
+     *  specified view ID, otherwise <code>false</code>
+     */
+    public boolean isPartialStateSaving(FacesContext ctx, String viewId) {
+        // track UIViewRoot changes
+        UIViewRoot root = ctx.getViewRoot();
+        UIViewRoot refRoot = viewRootRef.get();
+        if (root != refRoot) {
+          // set weak reference to current viewRoot
+          this.viewRootRef = new WeakReference<UIViewRoot>(root);
+
+          // On first call in restore phase, viewRoot is null, so we treat the first 
+          // change to not null not as a changing viewRoot.
+          if (refRoot != null) {
+            // view root changed in request processing - force usage of a 
+            // new AddRemoveListener instance for the new viewId ...
+            modListener = null;
+            // ... and also force check for partial state saving for the new viewId
+            partialLocked = false;
+          }
+        }
+
+        if (!partialLocked) {
+                  if (viewId == null) {
+                          if (root != null) {
+                                  viewId = root.getViewId();
+                          } else {
+                                  // View root has not yet been initialized.  Check to see whether
+                                  // the target view id has been stashed away for us.
+                                  viewId = (String)ctx.getAttributes().get(RIConstants.VIEWID_KEY_NAME);
+                                }
+                  }
+        
+                  partial = stateInfo.usePartialStateSaving(viewId);
+                  partialLocked = true;
+        }
+        return partial;
+
+    }
+
+
+    /**
+     * @return <code>true</code> if view modifications outside of the initial
+     *  construction of the view are being tracked.
+     */
+    public boolean trackViewModifications() {
+
+        return trackMods;
+
+    }
+
+
+    /**
+     * Installs a <code>SystemEventListener</code> on the <code>UIViewRoot</code>
+     * to track components added to or removed from the view.
+     */
+    public void startTrackViewModifications(FacesContext ctx, UIViewRoot root) {
+        if (modListener == null) {
+            if (root != null) {
+                modListener = createAddRemoveListener(ctx, root);
+                root.subscribeToViewEvent(PostAddToViewEvent.class, modListener);
+                root.subscribeToViewEvent(PreRemoveFromViewEvent.class, modListener);
+            } else {
+                LOGGER.warning("Unable to attach AddRemoveListener to UIViewRoot because it is null");
+            }
+        }
+        setTrackViewModifications(true);        
+    }
+
+
+    /**
+     * Toggles the current modification tracking status.
+     * 
+     * @param trackMods if <code>true</code> and the listener installed by 
+     * {@link #startTrackViewModifications(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot) 
+     * is present, then view modifications will be tracked.  If 
+     * <code>false</code>, then modification events will be ignored.
+     */
+    public void setTrackViewModifications(boolean trackMods) {
+
+        this.trackMods = trackMods;
+
+    }
+
+
+    /**
+     * @param c the UIComponent to check
+     * @return <code>true</code> if the component was added after the initial
+     *  view construction
+     */
+    public boolean componentAddedDynamically(UIComponent c) {
+        return c.getAttributes().containsKey(DYNAMIC_COMPONENT);
+    }
+
+    public int getIndexOfDynamicallyAddedChildInParent(UIComponent c) {
+        int result = -1;
+        Map<String, Object> attrs = c.getAttributes();
+        if (attrs.containsKey(DYNAMIC_COMPONENT)) {
+            result = (Integer) attrs.get(DYNAMIC_COMPONENT);
+        }
+        return result;
+    }
+
+    public boolean hasOneOrMoreDynamicChild(UIComponent parent) {
+        return parent.getAttributes().containsKey(DYNAMIC_CHILD_COUNT);
+    }
+
+    private int incrementDynamicChildCount(FacesContext context, UIComponent parent) {
+        int result;
+        Map<String, Object> attrs = parent.getAttributes();
+        Integer cur = (Integer) attrs.get(DYNAMIC_CHILD_COUNT);
+        if (null != cur) {
+            result = cur++;
+        } else {
+            result = 1;
+        }
+        attrs.put(DYNAMIC_CHILD_COUNT, (Integer) result);
+        context.getViewRoot().getAttributes().put(RIConstants.TREE_HAS_DYNAMIC_COMPONENTS, Boolean.TRUE);
+
+        return result;
+    }
+
+    private int decrementDynamicChildCount(FacesContext context, UIComponent parent) {
+        int result = 0;
+        Map<String, Object> attrs = parent.getAttributes();
+        Integer cur = (Integer) attrs.get(DYNAMIC_CHILD_COUNT);
+        if (null != cur) {
+            result = (0 < cur) ? cur-- : 0;
+
+        }
+        if (0 == result && null != cur){
+            attrs.remove(DYNAMIC_CHILD_COUNT);
+        }
+        context.getViewRoot().getAttributes().put(RIConstants.TREE_HAS_DYNAMIC_COMPONENTS, Boolean.TRUE);
+
+        return result;
+    }
+
+    /**
+     * Get the dynamic list (of adds and removes).
+     */
+    public List<ComponentStruct> getDynamicActions() {
+        return ((modListener != null) ? modListener.getDynamicActions() : null);
+    }
+
+    /**
+     * Get the hash map of dynamic components.
+     * 
+     * @return the hash map of dynamic components.
+     */
+    public HashMap<String, UIComponent> getDynamicComponents() {
+        return ((modListener != null) ? modListener.getDynamicComponents() : null);
+    }
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private AddRemoveListener createAddRemoveListener(FacesContext context, UIViewRoot root) {
+        return isPartialStateSaving(context, root.getViewId()) ?
+                new DynamicAddRemoveListener(context) :
+                new StatelessAddRemoveListener(context);
+    }
+
+    abstract private class AddRemoveListener implements SystemEventListener {
+ 
+        /**
+         * Stores the state context we work for,
+         */
+        private StateContext stateCtx;
+
+        /**
+         * Constructor.
+         * 
+         * @param context the Faces context. 
+         */
+        protected AddRemoveListener(FacesContext context) {
+            stateCtx = StateContext.getStateContext(context);
+        }
+
+        /**
+         * Get the list of adds/removes.
+         * 
+         * @return the list of adds/removes.
+         */
+        abstract public List<ComponentStruct> getDynamicActions();
+
+        /**
+         * Get the hash map of dynamic components.
+         * 
+         * @return the hash map of dynamic components.
+         */
+        abstract public HashMap<String, UIComponent> getDynamicComponents();
+        
+        /**
+         * Process the add/remove event.
+         * 
+         * @param event the add/remove event.
+         * @throws AbortProcessingException when processing should be aborted.
+         */
+        public void processEvent(SystemEvent event)
+              throws AbortProcessingException {
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            if (event instanceof PreRemoveFromViewEvent) {
+                if (stateCtx.trackViewModifications()) {
+                    handleRemove(ctx, ((PreRemoveFromViewEvent) event).getComponent());
+                    ctx.getViewRoot().getAttributes().put(RIConstants.TREE_HAS_DYNAMIC_COMPONENTS, Boolean.TRUE);
+                }
+            } else {
+                if (stateCtx.trackViewModifications()) {
+                    handleAdd(ctx, ((PostAddToViewEvent) event).getComponent());
+                    ctx.getViewRoot().getAttributes().put(RIConstants.TREE_HAS_DYNAMIC_COMPONENTS, Boolean.TRUE);
+                }
+            }
+        }
+
+        /**
+         * Are we listening for these particular changes.
+         * 
+         * <p>
+         *  Note we are only interested in UIComponent adds/removes that are
+         *  not the UIViewRoot itself.
+         * </p>
+         * 
+         * @param source the source object we might be listening for.
+         * @return true if the source is OK, false otherwise.
+         */
+        public boolean isListenerForSource(Object source) {
+            return (source instanceof UIComponent && !(source instanceof UIViewRoot));
+        }
+        
+        /**
+         * Handle the remove.
+         * 
+         * @param context the Faces context.
+         * @param component the UI component to add to the list as a REMOVE.
+         */
+        abstract protected void handleRemove(FacesContext context, UIComponent component);
+
+        /**
+         * Handle the add.
+         * 
+         * @param context the Faces context.
+         * @param component the UI component to add to the list as an ADD.
+         */
+        abstract protected void handleAdd(FacesContext context, UIComponent component);
+    }
+
+    public class NoopAddRemoveListener extends AddRemoveListener {
+
+        // This is silly.  We should be able to use Colletions.emptyMap(),
+        // but cannot as StateContext.getDynamicComponents() API returns a
+        // HashMap instead of a Map.
+        private HashMap emptyComponentsMap = new HashMap();
+
+        public NoopAddRemoveListener(FacesContext context) {
+            super(context);
+        }
+
+        @Override
+        public List<ComponentStruct> getDynamicActions() {
+            return Collections.emptyList();
+        }
+
+        @Override
+        public HashMap<String, UIComponent> getDynamicComponents() {
+            return emptyComponentsMap;
+        }
+
+        @Override
+        protected void handleRemove(FacesContext context, UIComponent component) {
+        }
+
+        @Override
+        protected void handleAdd(FacesContext context, UIComponent component) {
+        }
+    }
+ 
+    /**
+     * An AddRemoveListener that implements the new dynamic component
+     * strategy where no state is managed by the listener itself.  Instead,
+     * we use expando attributes on the dynamic components (and their parents)
+     * to track/preserve the dynamic nature of these components.
+     */
+    public class StatelessAddRemoveListener extends NoopAddRemoveListener {
+        
+        public StatelessAddRemoveListener(FacesContext context) {
+            super(context);
+        }
+ 
+        private boolean thisEventCorrespondsToSubtreeRootRemove(FacesContext context, UIComponent c) {
+            boolean result = false;
+            if (null != c) {
+                c = c.getParent();
+                if (null != c) {
+                    result = c.isInView();
+                }
+            }
+            
+            return result;
+        }
+        
+        private boolean thisEventCorrespondsToSubtreeRootAdd(FacesContext context, UIComponent c) {
+            boolean result = false;
+            Map<Object, Object> contextMap = context.getAttributes();
+            UIViewRoot root = context.getViewRoot();
+            UIComponent originalComponent = c;
+            if (null != c) {
+                Collection<UIComponent> dynamics = getDynamicComponentCollection(contextMap);
+                if (!dynamics.contains(c)) {
+                    c = c.getParent();
+                    while (null != c && !dynamics.contains(c)) {
+                        c = c.getParent();
+                    }
+                    if (null == c || root.equals(c)) {
+                        dynamics.add(originalComponent);
+                        result = true;
+                    }
+                }
+            }
+            
+            return result;
+        }
+        
+        private static final String DYNAMIC_COMPONENT_ADD_COLLECTION = 
+                RIConstants.FACES_PREFIX + "DynamicComponentSubtreeRoots";
+        
+        private Collection<UIComponent> getDynamicComponentCollection(Map<Object, Object> contextMap) {
+            Collection<UIComponent> result = (Collection<UIComponent>) contextMap.get(DYNAMIC_COMPONENT_ADD_COLLECTION);
+            if (null == result) {
+                result = new HashSet<UIComponent>();
+                contextMap.put(DYNAMIC_COMPONENT_ADD_COLLECTION, result);
+            }
+            return result;
+        }
+        
+        @Override
+        protected void handleRemove(FacesContext context, UIComponent component) {
+            if (!thisEventCorrespondsToSubtreeRootRemove(context, component)) {
+                return;
+            }
+            
+            Map<String, Object> attrs = component.getAttributes();
+
+            // If the component is a tag-created child, we remove its
+            // MARK_CREATED expando so that it will now be treated as
+            // a dynamic/non-tag created component.
+            String tagId = (String)attrs.remove(ComponentSupport.MARK_CREATED);
+            if (tagId != null) {
+                // Actually, we don't just remove the MARK_CREATED - we need
+                // to stash it away so that we can restore it later if the
+                // component happens to be re-added to its original parent.
+                attrs.put(MARK_CREATED_REMOVED, tagId);
+                childRemovedFromParent(component.getParent(), tagId);
+            }
+        }
+        
+        private void childRemovedFromParent(UIComponent parent, String childTagId) {
+            if (parent !=null) {
+                Collection<String> removedChildrenIds = getPreviouslyRemovedChildren(parent);                
+                removedChildrenIds.add(childTagId);
+                
+                markChildrenModified(parent);
+            }
+        }
+
+        private Collection<String> getPreviouslyRemovedChildren(UIComponent parent) {
+            Map<String, Object> attrs = parent.getAttributes();
+            Collection<String> removedChildrenIds = (Collection<String>)
+                    attrs.get(ComponentSupport.REMOVED_CHILDREN);
+            
+            if (removedChildrenIds == null) {
+                removedChildrenIds = new MostlySingletonSet<String>();
+                attrs.put(ComponentSupport.REMOVED_CHILDREN, removedChildrenIds);
+            }
+
+            return removedChildrenIds;
+        }
+
+        private void markChildrenModified(UIComponent parent) {
+          parent.getAttributes().put(ComponentSupport.MARK_CHILDREN_MODIFIED, true); 
+        }
+
+        @Override
+        protected void handleAdd(FacesContext context, UIComponent component) {
+            if (!thisEventCorrespondsToSubtreeRootAdd(context, component)) {
+                return;
+            }
+            
+            Map<String, Object> attrs = component.getAttributes();
+            String tagId = (String)attrs.get(MARK_CREATED_REMOVED);
+            
+            if (childAddedToSameParentAsBefore(component, tagId)) {
+                
+                // Restore MARK_CREATED if the added component was originally
+                // created as a tag-based child of this parent.
+                attrs.remove(MARK_CREATED_REMOVED);
+                attrs.put(ComponentSupport.MARK_CREATED, tagId);
+            }
+            
+            markChildrenModified(component.getParent());
+        }
+
+        // Handles the addition of a new child to the parent.  Returns true
+        // if the child was previously removed from this parent.
+        private boolean childAddedToSameParentAsBefore(UIComponent parent, String childTagId) {
+            if (parent != null) {
+                Map<String, Object> attrs = parent.getAttributes();
+                Collection<String> removedChildrenIds = (Collection<String>)
+                        attrs.get(ComponentSupport.REMOVED_CHILDREN);
+                if ((removedChildrenIds != null) && removedChildrenIds.remove(childTagId)) {
+                    if (removedChildrenIds.isEmpty()) {
+                        attrs.remove(ComponentSupport.REMOVED_CHILDREN);
+                    }
+                    return true;
+                }
+            }
+            
+            return false;
+        }
+    }
+
+    /**
+     * A system event listener which is used to listen for changes on the 
+     * component tree after restore view and before rendering out the view.
+     */
+    public class DynamicAddRemoveListener extends AddRemoveListener {
+
+        /**
+         * Stores the list of adds/removes.
+         */
+        private List<ComponentStruct> dynamicActions;
+        /**
+         * Stores the hash map of dynamic components.
+         */
+        private transient HashMap<String, UIComponent> dynamicComponents;
+
+        /**
+         * Constructor.
+         * 
+         * @param context the Faces context. 
+         */
+        public DynamicAddRemoveListener(FacesContext context) {
+            super(context);
+        }
+
+        /**
+         * Get the list of adds/removes.
+         * 
+         * @return the list of adds/removes.
+         */
+        @Override
+        public List<ComponentStruct> getDynamicActions() {
+            synchronized(this) {
+                if (dynamicActions == null) {
+                    dynamicActions = new ArrayList<ComponentStruct>();
+                }
+            }
+            return dynamicActions;
+        }
+
+        /**
+         * Get the hash map of dynamic components.
+         * 
+         * @return the hash map of dynamic components.
+         */
+        @Override
+        public HashMap<String, UIComponent> getDynamicComponents() {
+            synchronized(this) {
+                if (dynamicComponents == null) {
+                    dynamicComponents = new HashMap<String, UIComponent>();
+                }
+            }
+            return dynamicComponents;
+        }
+        
+        /**
+         * Handle the remove.
+         * 
+         * @param context the Faces context.
+         * @param component the UI component to add to the list as a REMOVE.
+         */
+        @Override
+        protected void handleRemove(FacesContext context, UIComponent component) {
+            if (component.isInView()) {
+                decrementDynamicChildCount(context, component.getParent());
+                ComponentStruct struct = new ComponentStruct();
+                struct.action = ComponentStruct.REMOVE;
+                struct.clientId = component.getClientId(context);
+                struct.id = component.getId();
+                handleAddRemoveWithAutoPrune(component, struct);
+            }            
+        }
+
+        /**
+         * Handle the add.
+         * 
+         * @param context the Faces context.
+         * @param component the UI component to add to the list as an ADD.
+         */
+        @Override
+        protected void handleAdd(FacesContext context, UIComponent component) {
+            if (component.getParent() != null && component.getParent().isInView()) {
+                String id = component.getId();
+
+                /*
+                * Since adding a component, can mean you are really reparenting 
+                * it, we need to make sure the OLD clientId is not cached, we do 
+                * that by setting the id.
+                */
+                if (id != null) {
+                    component.setId(id);
+                }
+
+                String facetName = findFacetNameForComponent(component);
+                if (facetName != null) {
+                    incrementDynamicChildCount(context, component.getParent());
+                    component.clearInitialState();
+                    component.getAttributes().put(DYNAMIC_COMPONENT, component.getParent().getChildren().indexOf(component));
+                    ComponentStruct struct = new ComponentStruct();
+                    struct.action = ComponentStruct.ADD;
+                    struct.facetName = facetName;
+                    struct.parentClientId = component.getParent().getClientId(context);
+                    struct.clientId = component.getClientId(context);
+                    struct.id = component.getId();
+                    handleAddRemoveWithAutoPrune(component, struct);
+                }
+                else {
+                    incrementDynamicChildCount(context, component.getParent());
+                    component.clearInitialState();
+                    component.getAttributes().put(DYNAMIC_COMPONENT, component.getParent().getChildren().indexOf(component));
+                    ComponentStruct struct = new ComponentStruct();
+                    struct.action = ComponentStruct.ADD;
+                    struct.parentClientId = component.getParent().getClientId(context);
+                    struct.clientId = component.getClientId(context);
+                    struct.id = component.getId();
+                    handleAddRemoveWithAutoPrune(component, struct);
+                }
+            }
+        }
+
+        /**
+         * Return the facet name for the given component or null if the
+         * component is not the value of a facets map entry.
+         * 
+         * @param component the component to look for in the facets map entry value.
+         * @return the facet name or null if the component is not the value of a facets map entry.
+         */
+        private String findFacetNameForComponent(UIComponent component) {
+            Set<Entry<String, UIComponent>> entrySet = component.getParent().getFacets().entrySet();
+            Iterator<Entry<String, UIComponent>> entries = entrySet.iterator();
+            while (entries.hasNext()) {
+                Entry<String, UIComponent> candidate = entries.next();
+                if (component == candidate.getValue()) {
+                    return candidate.getKey();
+                }
+            }
+            return null;
+        }
+        
+        /**
+         * Methods that takes care of pruning and adding an action to the 
+         * dynamic action list.
+         *
+         * <pre>
+         *  If you add a component and the dynamic action list does not contain
+         *  the component yet then add it to the dynamic action list, regardless
+         *  whether or not if was an ADD or REMOVE.
+         * </pre>
+         * 
+         * <pre>
+         *  Else if you add a component and it is already in the dynamic action 
+         *  list and it is the only action for that client id in the dynamic 
+         *  action list then:
+         *   1) If the previous action was an ADD then
+         *      a) If the current action is a REMOVE then remove the component 
+         *         out of the dynamic action list.
+         *      b) If the current action is an ADD then throw a FacesException.
+         *   2) If the previous action was a REMOVE then
+         *      a) If the current action is an ADD then add it to the dynamic
+         *         action list.
+         *      b) If the current action is a REMOVE then throw a FacesException.
+         * </pre>
+         * 
+         * <pre>
+         *  Else if a REMOVE and ADD where captured before then:
+         *   1) If the current action is REMOVE then remove the last dynamic 
+         *      action out of the dynamic action list.
+         *   2) If the current action is ADD then throw a FacesException.
+         * </pre>
+         * 
+         * @param component the UI component.
+         * @param struct the dynamic action.
+         */
+        private void handleAddRemoveWithAutoPrune(UIComponent component, ComponentStruct struct) {
+
+            List<ComponentStruct> actionList = getDynamicActions();
+            HashMap<String, UIComponent> componentMap = getDynamicComponents();
+            
+            int firstIndex = actionList.indexOf(struct);
+            if (firstIndex == -1) {
+                actionList.add(struct);
+                componentMap.put(struct.clientId, component);
+            } else {
+                int lastIndex = actionList.lastIndexOf(struct);
+                if (lastIndex == firstIndex) {
+                    ComponentStruct previousStruct = actionList.get(firstIndex);
+                    if (ComponentStruct.ADD.equals(previousStruct.action)) {
+                        if (ComponentStruct.ADD.equals(struct.action)) {
+                            throw new FacesException("Cannot add the same component twice: " + struct.clientId);
+                        }
+                        if (ComponentStruct.REMOVE.equals(struct.action)) {
+                            actionList.remove(firstIndex);
+                            componentMap.remove(struct.clientId);
+                        }
+                    }
+                    if (ComponentStruct.REMOVE.equals(previousStruct.action)) {
+                        if (ComponentStruct.ADD.equals(struct.action)) {
+                            actionList.add(struct);
+                            componentMap.put(struct.clientId, component);                            
+                        }
+                        if (ComponentStruct.REMOVE.equals(struct.action)) {
+                            throw new FacesException("Cannot remove the same component twice: " + struct.clientId);
+                        }
+                    }
+                } else {
+                    if (ComponentStruct.ADD.equals(struct.action)) {
+                        throw new FacesException("Cannot add the same component twice: " + struct.clientId);
+                    }
+                    if (ComponentStruct.REMOVE.equals(struct.action)) {
+                        actionList.remove(lastIndex);
+                    }
+                }
+            }
+        }
+
+    } // END AddRemoveListener
+
+} // END StateContext
diff --git a/com/sun/faces/context/StateHolderSaver.java b/com/sun/faces/context/StateHolderSaver.java
new file mode 100644
index 0000000..2f2a480
--- /dev/null
+++ b/com/sun/faces/context/StateHolderSaver.java
@@ -0,0 +1,180 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import java.io.Serializable;
+
+/**
+ * <p>Helper class for saving and restoring attached objects.</p>
+ */
+class StateHolderSaver implements Serializable {
+
+    private static final long serialVersionUID = 146780782953074472L;
+
+    private String className = null;
+    private Serializable savedState = null;
+
+    public static final String DYNAMIC_COMPONENT =
+            "com.sun.faces.DynamicComponent";
+    
+    private enum StateHolderTupleIndices {
+        StateHolderSaverInstance,
+        ComponentAddedDynamically,
+        LastMember
+    };
+
+    public boolean componentAddedDynamically() {
+        boolean result = false;
+
+
+        // if the Object to save implemented Serializable but not
+        // StateHolder
+        if (null == className && null != savedState) {
+            return result;
+        }
+
+        // if the Object to save did not implement Serializable or
+        // StateHolder
+        if (className == null) {
+            return result;
+        }
+
+        // else the object to save did implement StateHolder
+
+        if (null != savedState) {
+            // don't need to check transient, since that was done on
+            // the saving side.
+            Serializable [] tuple = (Serializable []) savedState;
+            result = (Boolean) tuple[StateHolderTupleIndices.ComponentAddedDynamically.ordinal()];
+        }
+
+        return result;
+    }
+
+    public StateHolderSaver(FacesContext context, Object toSave) {
+        className = toSave.getClass().getName();
+
+        if (toSave instanceof StateHolder) {
+            // do not save an attached object that is marked transient.
+            if (!((StateHolder) toSave).isTransient()) {
+                Serializable [] tuple = new Serializable[StateHolderTupleIndices.LastMember.ordinal()];
+
+                tuple[StateHolderTupleIndices.StateHolderSaverInstance.ordinal()] =
+                      (Serializable) ((StateHolder) toSave).saveState(context);
+                if (toSave instanceof UIComponent) {
+                    tuple[StateHolderTupleIndices.ComponentAddedDynamically.ordinal()] = ((UIComponent)toSave).getAttributes().containsKey(DYNAMIC_COMPONENT) ? Boolean.TRUE : Boolean.FALSE;
+                }
+                savedState = tuple;
+            } else {
+                className = null;
+            }
+        } else if (toSave instanceof Serializable) {
+            savedState = (Serializable) toSave;
+            className = null;
+        }
+    }
+
+    /**
+     *
+     * @return the restored {@link StateHolder} instance.
+     */
+
+    public Object restore(FacesContext context) throws IllegalStateException {
+        Object result = null;
+        Class toRestoreClass;
+
+        // if the Object to save implemented Serializable but not
+        // StateHolder
+        if (null == className && null != savedState) {
+            return savedState;
+        }
+
+        // if the Object to save did not implement Serializable or
+        // StateHolder
+        if (className == null) {
+            return null;
+        }
+
+        // else the object to save did implement StateHolder
+
+        try {
+            toRestoreClass = loadClass(className, this);
+        }
+        catch (ClassNotFoundException e) {
+            throw new IllegalStateException(e);
+        }
+
+        if (null != toRestoreClass) {
+            try {
+                result = toRestoreClass.newInstance();
+            }
+            catch (InstantiationException e) {
+                throw new IllegalStateException(e);
+            }
+            catch (IllegalAccessException a) {
+                throw new IllegalStateException(a);
+            }
+        }
+
+        if (null != result && null != savedState &&
+            result instanceof StateHolder) {
+            // don't need to check transient, since that was done on
+            // the saving side.
+            Serializable [] tuple = (Serializable []) savedState;
+            ((StateHolder) result).restoreState(context, tuple[StateHolderTupleIndices.StateHolderSaverInstance.ordinal()]);
+        }
+        return result;
+    }
+
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, false, loader);
+    }
+}
diff --git a/com/sun/faces/context/StringArrayValuesMap.java b/com/sun/faces/context/StringArrayValuesMap.java
new file mode 100644
index 0000000..a1079ae
--- /dev/null
+++ b/com/sun/faces/context/StringArrayValuesMap.java
@@ -0,0 +1,134 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import java.util.Map;
+import java.util.Arrays;
+import java.util.Set;
+
+/**
+ * <p>
+ * This is the base Map for those Maps that need to return <code>String[]</code>
+ * values.
+ * <p>
+ */
+abstract class StringArrayValuesMap extends BaseContextMap<String[]> {
+
+
+    // -------------------------------------------------------- Methods from Map
+
+
+    @Override
+    public boolean containsValue(Object value) {
+
+        if (value == null || !value.getClass().isArray()) {
+            return false;
+        }
+
+        Set entrySet = entrySet();
+        for (Object anEntrySet : entrySet) {
+            Map.Entry entry = (Map.Entry) anEntrySet;
+            // values will be arrays
+            if (Arrays.equals((Object[]) value, (Object[]) entry.getValue())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    @Override
+    public boolean equals(Object obj) {
+
+        if (obj == null ||
+            !(obj.getClass() == ExternalContextImpl.theUnmodifiableMapClass)) {
+            return false;
+        }
+        Map objMap = (Map) obj;
+
+        if (this.size() != objMap.size()) {
+            return false;
+        }
+        String[] thisKeys = keySet().toArray(new String[this.size()]);
+        Object[] objKeys = objMap.keySet().toArray();
+
+        Arrays.sort(thisKeys);
+        Arrays.sort(objKeys);
+
+        if (!(Arrays.equals(thisKeys, objKeys))) {
+            return false;
+        } else {
+            for (Object key : thisKeys) {
+                Object[] thisVal = this.get(key);
+                Object[] objVal = (Object[]) objMap.get(key);
+                if (!(Arrays.equals(thisVal, objVal))) {
+                    return false;
+                }
+            }
+        }
+
+        return true;
+
+    }
+
+
+    @Override
+    public int hashCode() {
+        return this.hashCode(this);
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected int hashCode(Object someObject) {
+        int hashCode = 7 * someObject.hashCode();
+         for (Object o : entrySet()) {
+             Map.Entry entry = (Map.Entry) o;
+             hashCode += entry.getKey().hashCode();
+             hashCode +=
+                   (Arrays.hashCode((Object[]) entry.getValue()));
+         }
+        return hashCode;
+    }
+
+
+}
diff --git a/com/sun/faces/context/UrlBuilder.java b/com/sun/faces/context/UrlBuilder.java
new file mode 100644
index 0000000..ba16f83
--- /dev/null
+++ b/com/sun/faces/context/UrlBuilder.java
@@ -0,0 +1,379 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context;
+
+import com.sun.faces.util.Util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import javax.faces.context.FacesContext;
+import javax.faces.lifecycle.ClientWindow;
+import javax.faces.render.ResponseStateManager;
+
+/**
+ * <p>The <strong>UrlBuilder</strong> provides a convenient way to assemble a URL. It
+ * follows the standard Builder Pattern. A seed URL is provided, which is broken
+ * into parts to allow for dynamic assembly. When the URL is to be build, a call
+ * to createUrl() assembles the parts into a relative URL. This class should
+ * be extended if the developer wishes to have it deal with absolute URLs.</p>
+ * 
+ * <p>Note that this class is optimized to parse the query string lazily so as
+ * to avoid unnecessary work if the seed URL differs little from the URL to be
+ * built.</p>
+ */
+class UrlBuilder {
+    public static final String QUERY_STRING_SEPARATOR = "?";
+    public static final String PARAMETER_PAIR_SEPARATOR = "&";
+    public static final String PARAMETER_NAME_VALUE_SEPARATOR = "=";
+    public static final String FRAGMENT_SEPARATOR = "#";
+    public static final String DEFAULT_ENCODING = "UTF-8";
+
+	private static final List<String> NULL_LIST = Arrays.asList((String) null);
+
+    private StringBuilder url;
+    private String path;
+    private String queryString;
+    private String fragment;
+    private Map<String, List<String>> parameters;
+    private String encoding;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public UrlBuilder(String url, String encoding) {
+        if (url == null || url.trim().length() == 0) {
+            throw new IllegalArgumentException("Url cannot be empty");
+        }
+        this.url = new StringBuilder(url.length() * 2);
+        extractSegments(url);
+        this.encoding = encoding;
+        // PERF TL lookup per-instance
+    }
+
+
+    public UrlBuilder(String url) {
+        this(url, DEFAULT_ENCODING);
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public UrlBuilder addParameters(String name, List<String> values) {
+        if (name == null || name.trim().length() == 0) {
+            throw new IllegalArgumentException("Parameter name cannot be empty");
+        }
+        parseQueryString();
+        addValuesToParameter(name.trim(), values, true);
+
+        return this;
+    }
+
+
+    public UrlBuilder addParameters(Map<String, List<String>> params) {
+        if (params != null && !params.isEmpty()) {
+            parseQueryString();
+            for (Map.Entry<String, List<String>> entry : params.entrySet()) {
+                if (entry.getKey() == null || entry.getKey().trim().length() == 0) {
+                    throw new IllegalArgumentException("Parameter name cannot be empty");
+                }
+                List<String> values = entry.getValue();
+                List<String> retValues = values;
+                addValuesToParameter(entry.getKey().trim(), retValues, true);
+            }
+        }
+
+        return this;
+    }
+
+
+    public UrlBuilder setPath(String path) {
+        if (path == null || path.trim().length() == 0) {
+            throw new IllegalArgumentException("Path cannot be empty");
+        }
+        this.path = path;
+        return this;
+    }
+
+
+    /**
+     * Setting a query string consecutively will replace all but the last one. Otherwise,
+     * the name/value pairs in the query string contribute to the parameters already established.
+     */
+    public UrlBuilder setQueryString(String queryString) {
+        this.queryString = queryString;
+        cleanQueryString();
+        return this;
+    }
+
+
+    /**
+     * The fragment is appended at the end of the url after a hash mark. It represents
+     * the fragement of the document that should be brought into focus when the document
+     * is rendered. Setting the fragment replaces the previous value.
+     */
+    public UrlBuilder setFragment(String fragment) {
+        this.fragment = fragment;
+        cleanFragment();
+        return this;
+    }
+
+
+    public String createUrl() {
+        appendPath();
+        appendQueryString();
+        appendFragment();
+        return url.toString();
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected String getPath() {
+        return path;
+    }
+
+
+    protected Map<String, List<String>> getParameters() {
+        parseQueryString();
+        return parameters;
+    }
+
+
+    protected void parseQueryString() {
+        if (parameters == null) {
+            parameters = new LinkedHashMap<String, List<String>>();
+        }
+
+        // if query string is null, then it has been parsed into parameters
+        if (queryString == null) {
+            return;
+        }
+        
+        Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+
+        String[] pairs = Util.split(appMap, queryString, PARAMETER_PAIR_SEPARATOR);
+        for (String pair : pairs) {
+            String[] nameAndValue = Util.split(appMap, pair, PARAMETER_NAME_VALUE_SEPARATOR);
+            // ignore malformed pair
+            if (nameAndValue.length != 2
+                || nameAndValue[0].trim().length() == 0) {
+                continue;
+            }
+
+            addValueToParameter(nameAndValue[0], nameAndValue[1], false);
+        }
+
+        queryString = null;
+    }
+
+
+    protected void appendPath() {
+        url.append(path);
+    }
+
+
+    protected void appendQueryString() {
+        boolean hasQueryString = false;
+        if (parameters != null) {
+            // parse residual query string
+            parseQueryString();
+            String nextSeparatorChar = QUERY_STRING_SEPARATOR;
+            for (Map.Entry<String, List<String>> param : parameters.entrySet()) {
+                for (String value : param.getValue()) {
+                    url.append(nextSeparatorChar);
+                    url.append(param.getKey());
+                    url.append(PARAMETER_NAME_VALUE_SEPARATOR);
+                    url.append(value);
+                    nextSeparatorChar = PARAMETER_PAIR_SEPARATOR;
+                }
+            }
+            hasQueryString = true;
+        }
+        else if (queryString != null) {
+            url.append(QUERY_STRING_SEPARATOR).append(queryString);
+            hasQueryString = true;
+        }
+        
+        FacesContext context = FacesContext.getCurrentInstance();
+        ClientWindow  cw = context.getExternalContext().getClientWindow();
+        boolean appendClientWindow = false;
+        if (null != cw) {
+            appendClientWindow = cw.isClientWindowRenderModeEnabled(context);
+        }
+        if (appendClientWindow && -1 == url.indexOf(ResponseStateManager.CLIENT_WINDOW_URL_PARAM)) {
+            if (null != cw) {
+                String clientWindow = cw.getId();
+                if (!hasQueryString) {
+                    url.append(QUERY_STRING_SEPARATOR);
+                } else {
+                    url.append(PARAMETER_PAIR_SEPARATOR);
+                }
+                url.append(ResponseStateManager.CLIENT_WINDOW_URL_PARAM).append(PARAMETER_NAME_VALUE_SEPARATOR).append(clientWindow);
+    
+                Map<String, String> additionalParams = cw.getQueryURLParameters(context);
+                if (null != additionalParams) {
+                    for (Map.Entry<String, String> cur : additionalParams.entrySet()) {
+                        url.append(PARAMETER_NAME_VALUE_SEPARATOR);
+                        url.append(cur.getKey()).
+                                append(UrlBuilder.PARAMETER_NAME_VALUE_SEPARATOR).
+                                append(cur.getValue());                        
+                    }
+                }
+            }
+        }
+        
+    }
+
+
+    protected void appendFragment() {
+        if (fragment != null) {
+            url.append(FRAGMENT_SEPARATOR).append(fragment);
+        }
+    }
+
+
+    protected void extractSegments(String url) {
+        int fragmentIndex = url.indexOf(FRAGMENT_SEPARATOR);
+        if (fragmentIndex != -1) {
+           fragment = url.substring(fragmentIndex + 1);
+           cleanFragment();
+           url = url.substring(0, fragmentIndex);
+        }
+
+        int queryStringIndex = url.indexOf(QUERY_STRING_SEPARATOR);
+        if (queryStringIndex != -1) {
+            queryString = url.substring(queryStringIndex + 1);
+            cleanQueryString();
+            path = url.substring(0, queryStringIndex);
+        }
+        else {
+            path = url;
+        }
+    }
+
+
+    protected void addValueToParameter(String name, String value, boolean replace) {
+        List<String> values = new ArrayList<String>(value == null ? 0 : 1);
+        if (value != null) {
+            values.add(value);
+        }
+        addValuesToParameter(name, values, replace);
+    }
+
+
+    protected void addValuesToParameter(String name, List<String> valuesRef, boolean replace) {
+        List<String> values = new ArrayList<String>();
+        if (valuesRef != null) {
+            for (Iterator<String> it = valuesRef.iterator(); it.hasNext();) {
+                String string = it.next();
+                    if (encoding != null) {
+                        try {
+                            values.add(URLEncoder.encode(string, encoding));
+                        } catch (UnsupportedEncodingException ex) {
+                            throw new RuntimeException(ex);
+                        }
+                    }
+                    else {
+                        values.add(string);
+                    }
+            }
+            values.removeAll(NULL_LIST);
+        }
+
+        if (replace) {
+            parameters.put(name, values);
+        }
+        else {
+            List<String> currentValues = parameters.get(name);
+            if (currentValues == null) {
+                currentValues = new ArrayList<String>(1);
+                parameters.put(name, currentValues);
+            }
+            currentValues.addAll(values);
+        }
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void cleanFragment() {
+        if (fragment != null) {
+            String f = fragment;
+            f = f.trim();
+            if (f.startsWith(FRAGMENT_SEPARATOR)) {
+                f = f.substring(1);
+            }
+
+            if (f.length() == 0) {
+                f = null;
+            }
+
+            fragment = f;
+        }
+    }
+
+    
+    private void cleanQueryString() {
+        if (queryString != null) {
+            String q = queryString;
+            q = q.trim();
+            if (q.startsWith(QUERY_STRING_SEPARATOR)) {
+                q = q.substring(1);
+            }
+
+            if (q.length() == 0) {
+                q = null;
+            }
+            queryString = q;
+        }
+    }
+
+}
diff --git a/com/sun/faces/context/flash/ELFlash.java b/com/sun/faces/context/flash/ELFlash.java
new file mode 100644
index 0000000..904ee3c
--- /dev/null
+++ b/com/sun/faces/context/flash/ELFlash.java
@@ -0,0 +1,1663 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context.flash;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableDistributable;
+import com.sun.faces.facelets.tag.ui.UIDebug;
+import com.sun.faces.util.ByteArrayGuardAESCTR;
+import com.sun.faces.util.FacesLogger;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.security.InvalidKeyException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+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 java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.Flash;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PostKeepFlashValueEvent;
+import javax.faces.event.PostPutFlashValueEvent;
+import javax.faces.event.PreClearFlashEvent;
+import javax.faces.event.PreRemoveFlashValueEvent;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>How this implementation works</p>
+
+ * <p>This class is an application singleton.  It has one ivar, 
+ * innerMap.  Entries are added to and removed from this map as needed
+ * according to how the flash scope is defined in the spec.  This
+ * implementation never touches the session, nor does it cause the
+ * session to be created.</p>
+
+ * <p>Most of the hairy logic is encapsulated with in the inner class
+ * PreviousNextFlashInfoManager.  An instance of this class is
+ * obtained by calling one of the variants of getCurrentFlashManager().
+ * When the instance is no longer needed for this request, call
+ * releaseCurrentFlashManager().</p>
+
+ * <p>Two very important methods are getPhaseMapForWriting() and
+ * getPhaseMapForReading().  These methods are the basis for the
+ * Map implementation methods.  Methods that need to write to the map
+ * use getPhaseMapForWriting(), those that need to read use
+ * getPhaseMapForReading().  These methods allow for the laziness that
+ * allows us to only incur a cost when the flash is actually written
+ * to.</p>
+
+ * <p>The operation of this class is intimately tied to the request
+ * processing lifecycle.  Let's break down every run thru the request
+ * processing lifecycle into two parts called "previous" and "next".  We
+ * use the names "previous" and "next" to indicate the persistence and
+ * timing of the data that is stored in the flash.  Consider two runs
+ * through the requset processing lifecle: N and N+1.  On request N,
+ * there is no "previous" request.  On Request N, any writes to the
+ * flash that happen during RENDER RESPONSE go to the "next" flash map.
+ * This means they are available for the ENTIRE run though the request
+ * processing lifecycle on request N+1.  Any entries put into the "next"
+ * flash map on request N will be expired at the end of request N+1.
+ * Now, when we get into request N+1 what was considered "next" on
+ * request N, is now called "previous" from the perspective of request
+ * N+1.  Any reads from the flash during request N+1 come from the
+ * "previous" map.  Any writes to the flash before RENDER RESPONSE go to
+ * the "previous" map.  Any writes to the flash during RENDER RESPNOSE
+ * go to the "next" map.</p>
+ */
+
+public class ELFlash extends Flash {
+
+    // <editor-fold defaultstate="collapsed" desc="ivars">
+
+    /**
+     * <p>Keys in this map are the string version of sequence numbers
+     * obtained via calls to {@link #getNewSequenceNumber}.  Values are
+     * the actual Map instances that back the actual Map methods on this
+     * class.  All writes to and reads from this map are done by the
+     * {@link PreviousNextFlashInfoManager} inner class.</p>
+     * 
+     */
+    private Map<String,Map<String, Object>> flashInnerMap = null;
+
+    private final AtomicLong sequenceNumber = new AtomicLong(0);
+
+    private int numberOfConcurentFlashUsers = Integer.
+     parseInt(WebContextInitParameter.NumberOfConcurrentFlashUsers.getDefaultValue());
+
+    private long numberOfFlashesBetweenFlashReapings = Long.
+     parseLong(WebContextInitParameter.NumberOfFlashesBetweenFlashReapings.getDefaultValue());
+    
+    private final boolean distributable;
+    
+    private ByteArrayGuardAESCTR guard;
+    
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="class vars">
+    
+    private static final String ELEMENT_TYPE_MISMATCH = "element-type-mismatch";
+    
+    private static final Logger LOGGER = FacesLogger.FLASH.getLogger();
+
+    /**
+     * <p>These constants are referenced from other source files in this
+     * package.  This one is a disambiguator prefix.</p>
+     */
+    static final String PREFIX = "csfcf";
+
+    /**
+     * <p>This constant is used as the key in the application map that
+     * stores the singleton ELFlash instance.</p>
+     */
+    static final String FLASH_ATTRIBUTE_NAME = PREFIX + "f";
+    
+    /**
+     * <p>This constant is used as the name of the cookie sent to the
+     * client.  The cookie is used to allow the flash scope to
+     * be used to support POST REDIRECT GET navigation.</p>
+     */
+    static final String FLASH_COOKIE_NAME = PREFIX + "c";
+
+
+    /**
+     * <p>This constant is used as the key the request map used, in the
+     * FlashELResolver, to convey the name of the property being
+     * accessed via 'now'.</p>
+     */
+    static final String FLASH_NOW_REQUEST_KEY = FLASH_ATTRIBUTE_NAME + "n";
+
+    private enum CONSTANTS {
+
+	/**
+	 * The key in the FacesContext attributes map (hereafter
+	 * referred to as contextMap) for the request scoped {@link
+	 * PreviousNextFlashInfoManager}.
+	 */
+
+        RequestFlashManager,
+
+	/**
+	 * At the beginning of every phase, we save the value of the
+	 * facesContext.getResponseComplete() into the contextMap under
+	 * this key.  We check this value after the phase to see if this
+	 * is the phase where the user called responseComplete().  This
+	 * is important to cover cases when the user does some funny
+	 * lifecycle stuff.
+	 */
+
+        SavedResponseCompleteFlagValue,
+
+        /**
+	 * This is used as the key in the flash itself to store the messages
+	 * if they are being tracked.
+	 */
+
+        FacesMessageAttributeName,
+
+        /**
+	 * This is used as the key in the flash itself to track whether or not
+	 * messages are being saved across request/response boundaries.
+	 */
+
+        KeepAllMessagesAttributeName,
+
+        /**
+         * This key is used in the contextMap to indicate that the next
+         * get should be treated as a keep.
+         *
+         */
+        KeepFlagAttributeName,
+
+        /**
+         * This key is used in the contextMap to prevent setting the cookie
+         * twice.
+         */
+        DidWriteCookieAttributeName,
+        
+        /**
+         * Force setMaxAge(0)
+         */
+        ForceSetMaxAgeZero,
+
+    }
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Constructors and instance accessors">
+
+    /** Creates a new instance of ELFlash */
+    private ELFlash(ExternalContext extContext) {
+        flashInnerMap = new ConcurrentHashMap<String,Map<String, Object>>();
+        WebConfiguration config = WebConfiguration.getInstance(extContext);
+        String value;
+        try {
+            value = config.getOptionValue(WebContextInitParameter.NumberOfConcurrentFlashUsers);
+            numberOfConcurentFlashUsers = Integer.parseInt(value);
+        } catch (NumberFormatException nfe) {
+	    if (LOGGER.isLoggable(Level.WARNING)) {
+		LOGGER.log(Level.WARNING, "Unable to set number of concurrent flash users.  Defaulting to {0}", numberOfConcurentFlashUsers);
+	    }
+
+        }
+
+        try {
+            value = config.getOptionValue(WebContextInitParameter.NumberOfFlashesBetweenFlashReapings);
+            numberOfFlashesBetweenFlashReapings = Long.parseLong(value);
+        } catch (NumberFormatException nfe) {
+	    if (LOGGER.isLoggable(Level.WARNING)) {
+		LOGGER.log(Level.WARNING, "Unable to set number flashes between flash repaings.  Defaulting to {0}", numberOfFlashesBetweenFlashReapings);
+	    }
+
+        }
+        
+        distributable = config.isOptionEnabled(EnableDistributable);
+        
+        guard = new ByteArrayGuardAESCTR();
+
+    }
+
+    /**
+     * <p>Returns the flash <code>Map</code> for this application.  This is
+     * a convenience method that calls
+     * <code>FacesContext.getCurrentInstance()</code> and then calls the
+     * overloaded <code>getFlash()</code> that takes a
+     * <code>FacesContext</code> with it.</p>
+     * 
+     * @return The flash <code>Map</code> for this session.
+     */
+    
+    public static Map<String,Object> getFlash() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        return getFlash(context.getExternalContext(), true);
+    }
+
+    /**
+     *
+     * @param extContext the <code>ExternalContext</code> for this request.
+     *
+     * @param create <code>true</code> to create a new instance for this request if 
+     * necessary; <code>false</code> to return <code>null</code> if there's no 
+     * instance in the current <code>session</code>.
+     * 
+     * @return The flash <code>Map</code> for this session.
+     */
+    
+    static ELFlash getFlash(ExternalContext extContext, boolean create) {
+        Map<String, Object> appMap = extContext.getApplicationMap();
+        ELFlash flash = (ELFlash) 
+            appMap.get(FLASH_ATTRIBUTE_NAME);
+        if (null == flash && create) {
+            synchronized (extContext.getContext()) {
+                if (null == (flash = (ELFlash)
+                        appMap.get(FLASH_ATTRIBUTE_NAME))) {
+                    flash = new ELFlash(extContext);
+                    appMap.put(FLASH_ATTRIBUTE_NAME, flash);
+                }
+            }            
+        }
+            
+        // If we are in a clustered environment, store a helper to ensure
+        // our innerMap gets successfully replicated
+        if (null != appMap.get(EnableDistributable.getQualifiedName())) {
+            synchronized (extContext.getContext()) {            
+                SessionHelper sessionHelper = 
+                        SessionHelper.getInstance(extContext);
+                if (null == sessionHelper) {
+                    sessionHelper = new SessionHelper();
+                }
+                sessionHelper.update(extContext, flash);
+            }
+        }
+        return flash;
+    }
+    
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Abstract class overrides">
+
+    
+    public boolean isKeepMessages() {
+        boolean result = false;
+        Map<String, Object> phaseMap;
+
+        if (null != (phaseMap = loggingGetPhaseMapForReading(false))) {
+            Object value = phaseMap.get(CONSTANTS.KeepAllMessagesAttributeName.toString());
+            result = (null != value) ? (Boolean) value : false;
+        }
+        
+        return result;
+    }
+    
+    
+    public void setKeepMessages(boolean newValue) {
+
+        loggingGetPhaseMapForWriting(false).put(CONSTANTS.KeepAllMessagesAttributeName.toString(),
+                Boolean.valueOf(newValue));
+
+    }
+    
+    
+    public boolean isRedirect() {
+        boolean result = false;
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        Map<Object, Object> contextMap = context.getAttributes();
+        PreviousNextFlashInfoManager flashManager;
+        if (null != (flashManager = getCurrentFlashManager(contextMap, false))) {
+            result = flashManager.getPreviousRequestFlashInfo().isIsRedirect();
+        }
+
+        return result;
+    }
+    
+
+    // PENDING(edburns): I'm going to make an entry to the errata.  This
+    // method can't be implemented because the decision of whether or
+    // not to redirect is made by the navigationHandler.
+    public void setRedirect(boolean newValue) {
+    }
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Map overrides">
+
+    
+    @SuppressWarnings(ELEMENT_TYPE_MISMATCH)
+    public Object get(Object key) {
+        Object result = null;
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (null != key) {
+            if (key.equals("keepMessages")) {
+                result = this.isKeepMessages();
+            } else if (key.equals("redirect")) {
+                result = this.isRedirect();
+            } else {
+                if (isKeepFlagSet(context)) {
+                    result = getPhaseMapForReading().get(key);
+                    keep(key.toString());
+                    clearKeepFlag(context);
+                    return result;
+                }
+
+            }
+
+        }
+        
+        if (null == result) {
+            result = getPhaseMapForReading().get(key);
+        }
+        if (distributable) {
+            SessionHelper sessionHelper = 
+                    SessionHelper.getInstance(context.getExternalContext());
+            assert(null != sessionHelper);
+            sessionHelper.update(context.getExternalContext(), this);
+        }
+
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "get({0}) = {1}", new Object [] { key, result});
+        }
+
+        return result;
+    }
+
+
+    public Object put(String key, Object value) {
+        Boolean b = null;
+        Object result = null;
+        boolean wasSpecialPut = false;
+
+        if (null != key) {
+            if (key.equals("keepMessages")) {
+                this.setKeepMessages(b = Boolean.parseBoolean((String) value));
+                wasSpecialPut = true;
+            }
+            if (key.equals("redirect")) {
+                this.setRedirect(b = Boolean.parseBoolean((String) value));
+                wasSpecialPut = true;
+            }
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (!wasSpecialPut) {
+            result = (null == b) ? getPhaseMapForWriting().put(key, value) : b;
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "put({0},{1})", new Object [] { key, value});
+            }
+            context.getApplication().publishEvent(context, PostPutFlashValueEvent.class, key);
+        }
+        if (distributable) {
+            SessionHelper sessionHelper = 
+                    SessionHelper.getInstance(context.getExternalContext());
+            assert(null != sessionHelper);
+            sessionHelper.update(context.getExternalContext(), this);
+        }
+        
+        return result;
+    }
+
+    @SuppressWarnings(ELEMENT_TYPE_MISMATCH)
+    public Object remove(Object key) {
+        Object result = null;
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getApplication().publishEvent(context, PreRemoveFlashValueEvent.class, key);
+        result = getPhaseMapForWriting().remove(key);
+
+        return result;
+    }
+
+    
+    @SuppressWarnings(ELEMENT_TYPE_MISMATCH)
+    public boolean containsKey(Object key) {
+        boolean result = false;
+
+        result = getPhaseMapForReading().containsKey(key);
+
+        return result;
+    }
+
+    
+    public boolean containsValue(Object value) {
+        boolean result = false;
+
+        result = getPhaseMapForReading().containsValue(value);
+
+        return result;
+    }
+
+    
+    public void putAll(Map<? extends String, ?> t) {
+
+        getPhaseMapForWriting().putAll(t);
+
+    }
+
+    
+    public Collection<Object> values() {
+        Collection<Object> result = null;
+
+        result = getPhaseMapForReading().values();
+
+        return result;
+    }
+
+    
+    public int size() {
+        int result = 0;
+
+        result = getPhaseMapForReading().size();
+
+        return result;
+    }
+
+    
+    public void clear() {
+
+        getPhaseMapForWriting().clear();
+
+    }
+
+    
+    @SuppressWarnings({"CloneDoesntCallSuperClone"})
+    @Override
+    protected Object clone() throws CloneNotSupportedException {
+        throw new CloneNotSupportedException();
+    }
+
+    
+    public Set<Map.Entry<String, Object>> entrySet() {
+        Set<Map.Entry<String, Object>> 
+                readingMapEntrySet = getPhaseMapForReading().entrySet(),
+                writingMapEntrySet = getPhaseMapForWriting().entrySet(),
+                result = null;
+
+        result = new HashSet<Map.Entry<String, Object>>();
+        result.addAll(readingMapEntrySet);
+        result.addAll(writingMapEntrySet);
+
+        return result;
+    }
+
+    
+    public boolean isEmpty() {
+        boolean 
+                readingMapIsEmpty = getPhaseMapForReading().isEmpty(),
+                writingMapIsEmpty = getPhaseMapForWriting().isEmpty(),
+                result = false;
+
+        result = readingMapIsEmpty && writingMapIsEmpty;
+
+        return result;
+    }
+
+    
+    public Set<String> keySet() {
+        Set<String>
+                readingMapKeySet = getPhaseMapForReading().keySet(),
+                writingMapKeySet = getPhaseMapForWriting().keySet(),
+                result = null;
+
+        result = new HashSet<String>();
+        result.addAll(readingMapKeySet);
+        result.addAll(writingMapKeySet);
+
+        return result;
+    }
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Flash overrides">
+
+    
+    public void keep(String key) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
+        Map<Object, Object> contextMap = context.getAttributes();
+        PreviousNextFlashInfoManager flashManager;
+        if (null != (flashManager = getCurrentFlashManager(contextMap, true))) {
+            Object toKeep;
+
+            if (null == (toKeep = requestMap.remove(key))) {
+                FlashInfo flashInfo = null;
+                if (null != (flashInfo = flashManager.getPreviousRequestFlashInfo())) {
+                    toKeep = flashInfo.getFlashMap().remove(key);
+                }
+            }
+
+            if (null != toKeep) {
+                getPhaseMapForWriting().put(key, toKeep);
+                context.getApplication().publishEvent(context, PostKeepFlashValueEvent.class, key);
+
+            }
+        }
+
+
+    }
+
+    
+    public void putNow(String key, Object value) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        Map<Object, Object> contextMap = context.getAttributes();
+        PreviousNextFlashInfoManager flashManager;
+        if (null != (flashManager = getCurrentFlashManager(contextMap, true))) {
+            FlashInfo flashInfo = null;
+            if (null != (flashInfo = flashManager.getPreviousRequestFlashInfo())) {
+                flashInfo.getFlashMap().put(key, value);
+            }
+        }
+    }
+    
+    public void doPrePhaseActions(FacesContext context) {
+        PhaseId currentPhase = context.getCurrentPhaseId();
+        Map<Object, Object> contextMap = context.getAttributes();
+        contextMap.put(CONSTANTS.SavedResponseCompleteFlagValue,
+                context.getResponseComplete());
+
+        if (currentPhase.equals(PhaseId.RESTORE_VIEW)) {
+            Cookie cookie = null;
+
+            if (null != (cookie = getCookie(context.getExternalContext()))) {
+                getCurrentFlashManager(context, contextMap, cookie);
+            }
+
+            if (this.isKeepMessages()) {
+                this.restoreAllMessages(context);
+            }
+        }
+    }
+
+    public void doPostPhaseActions(FacesContext context) {
+        if (context.getAttributes().containsKey(ACT_AS_DO_LAST_PHASE_ACTIONS)) {
+            Boolean outgoingResponseIsRedirect = 
+                    (Boolean) context.getAttributes().get(ACT_AS_DO_LAST_PHASE_ACTIONS);
+            doLastPhaseActions(context, outgoingResponseIsRedirect);
+            return;
+        }
+        
+        PhaseId currentPhase = context.getCurrentPhaseId();
+        Map<Object, Object> contextMap = context.getAttributes();
+        boolean
+                responseCompleteJustSetTrue = responseCompleteWasJustSetTrue(context, contextMap),
+                lastPhaseForThisRequest = responseCompleteJustSetTrue ||
+                                          currentPhase == PhaseId.RENDER_RESPONSE;
+        if (lastPhaseForThisRequest) {
+            doLastPhaseActions(context, false);
+        }
+    }
+    
+    public static final String ACT_AS_DO_LAST_PHASE_ACTIONS = 
+            ELFlash.class.getPackage().getName() + ".ACT_AS_DO_LAST_PHASE_ACTIONS";
+
+    /**
+     * <p>This is the most magic of methods.  There are several scenarios
+     * in which this method can be called, but the first time it is
+     * called for a request it takes action, while on subsequent times
+     * it returns without taking action.  This is due to the call to
+     * {@link #releaseCurrentFlashManager}.  After this call, any calls
+     * to {@link #getCurrentFlashManager} will return null.</p>
+
+     * <p>Scenario 1: normal request ending.  This will be called after
+     * the RENDER_RESPONSE phase executes.  outgoingResponseIsRedirect will be false.</p>
+
+     * <p>Scenario 2: navigationHandler asks extContext for redirect.
+     * In this case, extContext calls this method directly,
+     * outgoingResponseIsRedirect will be true.</p>
+
+     * <p>Scenario 3: extContext.flushBuffer(): As far as I can tell,
+     * this is only called in the JSP case, but it's good to call it
+     * from there anyway, because we need to write our cookie before the
+     * response is committed.  outgoingResponseIsRedirect is false.</p>
+
+     * <p>Scenario 4: after rendering the response in JSP, but before
+     * the buffer is flushed.  In the JSP case, I've found this necessary
+     * because the call to extContext.flushBuffer() is too late, the
+     * response has already been committed by that
+     * point. outgoingResponseIsRedirect is false.</p>
+     */
+
+    public void doLastPhaseActions(FacesContext context, boolean outgoingResponseIsRedirect) {
+        Map<Object, Object> contextMap = context.getAttributes();
+        PreviousNextFlashInfoManager flashManager = getCurrentFlashManager(contextMap, false);
+        if (null == flashManager) {
+            return;
+        }
+        if (this.isKeepMessages()) {
+            this.saveAllMessages(context);
+        }
+        releaseCurrentFlashManager(contextMap);
+
+	// What we do in this if-else statement has consequences for
+	// PreviousNextFlashInfoManager.decode().
+        
+        if (outgoingResponseIsRedirect) {
+            FlashInfo previousRequestFlashInfo = flashManager.getPreviousRequestFlashInfo();
+	    // Next two methods are VITALLY IMPORTANT!
+            previousRequestFlashInfo.setIsRedirect(true);
+            flashManager.expireNext_MovePreviousToNext();
+        } else {
+            FlashInfo flashInfo = flashManager.getPreviousRequestFlashInfo();
+            if (null != flashInfo && flashInfo.getLifetimeMarker() ==
+                LifetimeMarker.SecondTimeThru) {
+                flashManager.expirePrevious();
+            }
+        }
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "---------------------------------------");
+        }
+
+
+        setCookie(context, flashManager, flashManager.encode());
+
+    }
+
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="Helpers">
+    
+    void setFlashInnerMap(Map<String,Map<String, Object>> flashInnerMap) {
+        this.flashInnerMap = flashInnerMap;
+    }
+    
+    Map<String, Map<String,Object>> getFlashInnerMap() {
+        return flashInnerMap;
+    }
+    
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("[\n");
+        for (Map.Entry<String, Object> entry : this.entrySet()) {
+            builder.append("{").append(entry.getKey()).append(", ").append(entry.getValue()).append("}\n");
+        }
+        builder.append("]\n");
+        return builder.toString();
+    }
+
+    private void maybeWriteCookie(FacesContext context,
+            PreviousNextFlashInfoManager flashManager) {
+        FlashInfo flashInfo = flashManager.getPreviousRequestFlashInfo();
+        if (null != flashInfo && flashInfo.getLifetimeMarker() ==
+            LifetimeMarker.SecondTimeThru) {
+            PreviousNextFlashInfoManager copiedFlashManager =
+                    flashManager.copyWithoutInnerMap();
+            copiedFlashManager.expirePrevious();
+            setCookie(context, flashManager,
+                    copiedFlashManager.encode());
+        }
+    }
+
+
+    static void setKeepFlag(FacesContext context) {
+        context.getAttributes().put(CONSTANTS.KeepFlagAttributeName, Boolean.TRUE);
+    }
+
+    void clearKeepFlag(FacesContext context) {
+        context.getAttributes().remove(CONSTANTS.KeepFlagAttributeName);
+    }
+
+    boolean isKeepFlagSet(FacesContext context) {
+        return Boolean.TRUE ==
+                context.getAttributes().get(CONSTANTS.KeepFlagAttributeName);
+    }
+
+
+
+    private long getNewSequenceNumber() {
+        long result = sequenceNumber.incrementAndGet();
+
+        if (0 == result % numberOfFlashesBetweenFlashReapings) {
+            reapFlashes();
+        }
+
+        if (result == Long.MAX_VALUE) {
+            result = 1;
+            sequenceNumber.set(1);
+        }
+
+        return result;
+    }
+
+    private void reapFlashes() {
+
+        if (flashInnerMap.size() < numberOfConcurentFlashUsers) {
+            return;
+        }
+        
+        Set<String> keys = flashInnerMap.keySet();
+            long
+                    sequenceNumberToTest,
+                    currentSequenceNumber = sequenceNumber.get();
+        Map<String, Object> curFlash;
+        for (String cur : keys) {
+            sequenceNumberToTest = Long.parseLong(cur);
+            if (numberOfConcurentFlashUsers < currentSequenceNumber - sequenceNumberToTest) {
+                if (null != (curFlash = flashInnerMap.get(cur))) {
+                    curFlash.clear();
+                }
+                flashInnerMap.remove(cur);
+            }
+        }
+        if (distributable) {
+            ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
+            SessionHelper sessionHelper = SessionHelper.getInstance(extContext);
+            if (null != sessionHelper) {
+                sessionHelper.remove(extContext);
+                sessionHelper = new SessionHelper();
+                sessionHelper.update(extContext, this);
+            }
+        }        
+    }
+
+    private boolean responseCompleteWasJustSetTrue(FacesContext context,
+            Map<Object, Object> contextMap) {
+        boolean result = false;
+
+        // If it was false, but it's now true, return true
+        result = (Boolean.FALSE == contextMap.get(CONSTANTS.SavedResponseCompleteFlagValue) &&
+                 context.getResponseComplete());
+
+        return result;
+    }
+
+    private static String getLogPrefix(FacesContext context) {
+        StringBuilder result = new StringBuilder();
+        ExternalContext extContext = context.getExternalContext();
+        Object request = extContext.getRequest();
+        if (request instanceof HttpServletRequest) {
+            result.append(((HttpServletRequest)request).getMethod()).append(" ");
+        }
+        UIViewRoot root = context.getViewRoot();
+        if (null != root) {
+            String viewId = root.getViewId();
+            if (null != viewId) {
+                result.append(viewId).append(" ");
+            }
+        }
+
+        return result.toString();
+    }
+
+    private Map<String, Object> loggingGetPhaseMapForWriting(boolean loggingEnabled) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        Map<String, Object> result = null;
+        PhaseId currentPhase = context.getCurrentPhaseId();
+        Map<Object, Object> contextMap = context.getAttributes();
+
+        PreviousNextFlashInfoManager flashManager;
+        if (null != (flashManager = getCurrentFlashManager(contextMap, true))) {
+            FlashInfo flashInfo;
+            boolean isDebugLog = loggingEnabled && LOGGER.isLoggable(Level.FINEST);
+
+            if (currentPhase.getOrdinal() < PhaseId.RENDER_RESPONSE.getOrdinal()) {
+                flashInfo = flashManager.getPreviousRequestFlashInfo();
+                if (isDebugLog) {
+                    LOGGER.log(Level.FINEST, "{0}previous[{1}]",
+                            new Object[]{getLogPrefix(context),
+                                flashInfo.getSequenceNumber()});
+                }
+            } else {
+                flashInfo = flashManager.getNextRequestFlashInfo(this, true);
+                if (isDebugLog) {
+                    LOGGER.log(Level.FINEST, "{0}next[{1}]",
+                            new Object[]{getLogPrefix(context),
+                                flashInfo.getSequenceNumber()});
+                }
+                maybeWriteCookie(context, flashManager);
+            }
+            result = flashInfo.getFlashMap();
+        }
+
+        return result;
+
+    }
+
+    /**
+     * <p>If the current phase is earlier than RENDER_RESPONSE, return
+     * the map for the "previous" request.  Otherwise, return the map
+     * for the "next" request.  Note that we use
+     * getCurrentFlashManager(contextMap,true).  This is because if this
+     * method is being called, we know we actually need the map, so we
+     * have to ensure the underlying data structure is present before
+     * trying to access it.</p>
+     */
+
+    private Map<String, Object> getPhaseMapForWriting() {
+        return loggingGetPhaseMapForWriting(true);
+    }
+
+
+    private Map<String, Object> loggingGetPhaseMapForReading(boolean loggingEnabled) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        Map<String, Object> result = Collections.emptyMap();
+        Map<Object, Object> contextMap = context.getAttributes();
+
+        PreviousNextFlashInfoManager flashManager;
+        if (null != (flashManager = getCurrentFlashManager(contextMap, false))) {
+            FlashInfo flashInfo;
+
+            if (null != (flashInfo = flashManager.getPreviousRequestFlashInfo())) {
+                boolean isDebugLog = loggingEnabled && LOGGER.isLoggable(Level.FINEST);
+                if (isDebugLog) {
+                    LOGGER.log(Level.FINEST, "{0}previous[{1}]",
+                            new Object[]{getLogPrefix(context),
+                                flashInfo.getSequenceNumber()});
+                }
+
+                result = flashInfo.getFlashMap();
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * <p>Always return the map for the "previous" request.  Note that
+     * we use getCurrentFlashManager(contextMap,false).  This is because
+     * if this method is being called, and there is pre-existing data in
+     * the flash from a previous write, then the
+     * PreviousNextFlashInfoManager will already have been created.  If
+     * there is not pre-existing data, we don't create the
+     * PreviousNextFlashInfoManager, and therefore just return the empty
+     * map.</p>
+     */
+
+    private Map<String, Object> getPhaseMapForReading() {
+        return loggingGetPhaseMapForReading(true);
+    }
+
+    void saveAllMessages(FacesContext context) {
+        // take no action on the GET that comes after a REDIRECT
+        Map<Object, Object> contextMap = context.getAttributes();
+        PreviousNextFlashInfoManager flashManager;
+        if (null == (flashManager = getCurrentFlashManager(contextMap, true))) {
+            return;
+        }
+        if (flashManager.getPreviousRequestFlashInfo().isIsRedirect()) {
+            return;
+        }
+
+        Iterator<String> messageClientIds = context.getClientIdsWithMessages();
+        List<FacesMessage> facesMessages;
+        Map<String, List<FacesMessage>> allFacesMessages = null;
+        Iterator<FacesMessage> messageIter;
+        String curMessageId;
+
+        // Save all the FacesMessages into a Map, which we store in the flash.
+
+        // Step 1, go through the FacesMessage instances for each clientId
+        // in the messageClientIds list.
+        while (messageClientIds.hasNext()) {
+            curMessageId = messageClientIds.next();
+            // Get the messages for this clientId
+            messageIter = context.getMessages(curMessageId);
+            facesMessages = new ArrayList<FacesMessage>();
+            while (messageIter.hasNext()) {
+                facesMessages.add(messageIter.next());
+            }
+            // Add the list to the map
+            if (null == allFacesMessages) {
+                allFacesMessages = new HashMap<String, List<FacesMessage>>();
+            }
+            allFacesMessages.put(curMessageId, facesMessages);
+        }
+        facesMessages = null;
+
+        // Step 2, go through the FacesMessages that do not have a client
+        // id associated with them.
+        messageIter = context.getMessages(null);
+        // Make sure to overwrite the previous facesMessages list
+        facesMessages = new ArrayList<FacesMessage>();
+        while (messageIter.hasNext()) {
+            facesMessages.add(messageIter.next());
+        }
+        if (null != facesMessages) {
+            // Add the list to the map
+            if (null == allFacesMessages) {
+                allFacesMessages = new HashMap<String, List<FacesMessage>>();
+            }
+            allFacesMessages.put(null, facesMessages);
+        }
+        getPhaseMapForWriting().put(CONSTANTS.FacesMessageAttributeName.toString(),
+                allFacesMessages);
+
+    }
+
+    @SuppressWarnings(ELEMENT_TYPE_MISMATCH)
+    void restoreAllMessages(FacesContext context) {
+        Map<String, List<FacesMessage>> allFacesMessages;
+        Map<String, Object> phaseMap = getPhaseMapForReading();
+        List<FacesMessage> facesMessages;
+
+
+        if (null != (allFacesMessages = (Map<String, List<FacesMessage>>)
+                phaseMap.get(CONSTANTS.FacesMessageAttributeName.toString()))) {
+            for (Map.Entry<String, List<FacesMessage>> cur : allFacesMessages.entrySet()) {
+                if (null != (facesMessages = allFacesMessages.get(cur.getKey()))) {
+                    for (FacesMessage curMessage : facesMessages) {
+                        context.addMessage(cur.getKey(), curMessage);
+                    }
+                }
+            }
+            phaseMap.remove(CONSTANTS.FacesMessageAttributeName.toString());
+        }
+    }
+
+
+    /**
+     * <p>Return the cookie that came from the browser, if any.</p>
+     */
+    private Cookie getCookie(ExternalContext extContext) {
+        Cookie result = null;
+
+        result = (Cookie) extContext.getRequestCookieMap().get(FLASH_COOKIE_NAME);
+
+        return result;
+    }
+
+    /** 
+     * <p>Set the cookie iff the response was not yet committed.  If the response
+     * was committed, log a warning.</p>
+     */
+
+    private void setCookie(FacesContext context, 
+            PreviousNextFlashInfoManager flashManager,
+            Cookie toSet) {
+        Map<Object, Object> contextMap = context.getAttributes();
+        ExternalContext extContext = context.getExternalContext();
+        if (contextMap.containsKey(CONSTANTS.DidWriteCookieAttributeName)) {
+            return;
+        }
+        FlashInfo
+                nextFlash = flashManager.getNextRequestFlashInfo(),
+                prevFlash = flashManager.getPreviousRequestFlashInfo();
+        if (context.getAttributes().containsKey(CONSTANTS.ForceSetMaxAgeZero)) {
+            removeCookie(extContext, toSet);
+            return;
+        }
+
+        // Don't try to write the cookie unless there is data in the flash.
+        if ((null != nextFlash && !nextFlash.getFlashMap().isEmpty()) ||
+            (null != prevFlash && !prevFlash.getFlashMap().isEmpty())) {
+            if (extContext.isResponseCommitted()) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                            "jsf.externalcontext.flash.response.already.committed");
+                }
+            } else {
+                Map<String, Object> properties = new HashMap();
+                Object val;
+                
+                if (null != (val = toSet.getComment())) {
+                    properties.put("comment", val);
+                }
+                if (null != (val = toSet.getDomain())) {
+                    properties.put("domain", val);
+                }
+                if (null != (val = toSet.getMaxAge())) {
+                    properties.put("maxAge", val);
+                }
+                if (extContext.isSecure()) {
+                    properties.put("secure", Boolean.TRUE);
+                } else if (null != (val = toSet.getSecure())) {
+                    properties.put("secure", val);
+                }
+                if (null != (val = toSet.getPath())) {
+                    properties.put("path", val);
+                }
+                properties.put("httpOnly", Boolean.TRUE);
+                extContext.addResponseCookie(toSet.getName(), toSet.getValue(), 
+                        !properties.isEmpty() ? properties : null);
+                properties = null;
+            }
+            contextMap.put(CONSTANTS.DidWriteCookieAttributeName, Boolean.TRUE);
+        } else {
+            removeCookie(extContext, toSet);
+        }
+    }
+    
+    private void removeCookie(ExternalContext extContext, Cookie toRemove) {
+        if (extContext.isResponseCommitted()) {
+            return;
+        }
+        Map<String, Object> properties = new HashMap();
+        Object val;
+        toRemove.setMaxAge(0);
+        
+        if (null != (val = toRemove.getComment())) {
+            properties.put("comment", val);
+        }
+        if (null != (val = toRemove.getDomain())) {
+            properties.put("domain", val);
+        }
+        if (null != (val = toRemove.getMaxAge())) {
+            properties.put("maxAge", val);
+        }
+        if (extContext.isSecure()) {
+            properties.put("secure", Boolean.TRUE);
+        } else if (null != (val = toRemove.getSecure())) {
+            properties.put("secure", val);
+        }
+        if (null != (val = toRemove.getPath())) {
+            properties.put("path", val);
+        }
+        properties.put("httpOnly", Boolean.TRUE);
+        extContext.addResponseCookie(toRemove.getName(), toRemove.getValue(), 
+                !properties.isEmpty() ? properties : null);
+        properties = null;           
+        
+    }
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Inner classes">
+
+    private enum LifetimeMarker {
+
+        // these must be unique
+        
+        FirstTimeThru("f"),
+        SecondTimeThru("s"),
+        IsRedirect("r"),
+        IsNormal("n");
+
+        private static char FIRST_TIME_THRU = 'f';
+        private static char SECOND_TIME_THRU = 's';
+        private static char IS_REDIRECT = 'r';
+        private static char IS_NORMAL = 'n';
+
+        private String name;
+
+        private LifetimeMarker(String name) {
+            this.name = name;
+        }
+
+        @Override
+        public String toString() {
+            return name;
+        }
+        
+        public char encode() {
+            return name.charAt(0);
+        }
+
+        public static LifetimeMarker decode(char c) {
+            LifetimeMarker result = FirstTimeThru;
+
+            if (FIRST_TIME_THRU == c) {
+                result = FirstTimeThru;
+            } else if (SECOND_TIME_THRU == c) {
+                result = SecondTimeThru;
+            } else if (IS_REDIRECT == c) {
+                result = IsRedirect;
+            } else if (IS_NORMAL == c) {
+                result = IsNormal;
+            } else {
+                throw new IllegalStateException("class invariant failed: invalid lifetime marker");
+            }
+
+            return result;
+        }
+                
+    }
+
+    private void releaseCurrentFlashManager(Map<Object, Object> contextMap) {
+        contextMap.remove(CONSTANTS.RequestFlashManager);
+    }
+
+    /**
+     * <p>Called when you need to get access to the flashManager.  If
+     * argument create is true, and no instance of the FlashManager
+     * exists for this request, create it and store it in the
+     * contextMap.</p>
+     */
+    private PreviousNextFlashInfoManager getCurrentFlashManager(Map<Object, Object> contextMap,
+            boolean create) {
+        PreviousNextFlashInfoManager result = (PreviousNextFlashInfoManager)
+                contextMap.get(CONSTANTS.RequestFlashManager);
+
+        if (null == result && create) {
+            result = new PreviousNextFlashInfoManager(guard, flashInnerMap);
+            result.initializeBaseCase(this);
+            contextMap.put(CONSTANTS.RequestFlashManager, result);
+
+        }
+        return result;
+    }
+
+    /**
+     * <p>Called on the preRestoreView phase if the browser sent us a
+     * cookie.  If no instance of the FlashManager exists for this
+     * request, create it and store it in the contextMap.</p>
+     */
+    private PreviousNextFlashInfoManager getCurrentFlashManager(FacesContext context,
+            Map<Object, Object> contextMap,
+            Cookie cookie) {
+        PreviousNextFlashInfoManager result = (PreviousNextFlashInfoManager)
+                contextMap.get(CONSTANTS.RequestFlashManager);
+
+        if (null == result) {
+            result = new PreviousNextFlashInfoManager(guard, flashInnerMap);
+            try {
+                result.decode(context, this, cookie);
+                contextMap.put(CONSTANTS.RequestFlashManager, result);
+            } catch (InvalidKeyException ike) {
+                contextMap.put(CONSTANTS.ForceSetMaxAgeZero, Boolean.TRUE);
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    result = getCurrentFlashManager(contextMap, true);
+                    LOGGER.log(Level.SEVERE,
+                            "jsf.externalcontext.flash.bad.cookie",
+                            new Object [] { ike.getMessage() });
+                }
+                
+            }
+
+        }
+        return result;
+    }
+
+    /**
+     * <p>On any given request, there are actually two maps behind the
+     * flash.  Which one is actually used on a given Map method depends
+     * on the current lifecycle phase at the time the method is invoked.
+     * There is a "next" map, and a "previous" map.  This class manages
+     * the complexities of dealing with these two maps, and does so by
+     * relying on another inner class, FlashInfo.</p>
+
+     * <p>The "next" map is used in only one case, which happens to be a
+     * VERY common case: write operations to the flash that happen
+     * during render response.</p>
+
+     * <p>The "previous" map is used for write operations that happen
+     * before render response, and for all read operations.</p>
+
+     * <p>This class knows how to "decode" its state from an incoming
+     * cookie, written by a previous call to "encode".</p>
+
+     * <p>See the docs for FlashInfo for more information.</p>
+     */
+
+    private static final class PreviousNextFlashInfoManager {
+
+        private FlashInfo previousRequestFlashInfo;
+
+        private FlashInfo nextRequestFlashInfo;
+
+        private boolean incomingCookieCameFromRedirect = false;
+
+        private Map<String,Map<String, Object>> innerMap;
+        
+        private ByteArrayGuardAESCTR guard;
+
+        private PreviousNextFlashInfoManager(ByteArrayGuardAESCTR guard) {
+            this.guard = guard;
+        }
+
+        private PreviousNextFlashInfoManager(ByteArrayGuardAESCTR guard, Map<String,Map<String, Object>> innerMap) {
+            this.guard = guard;
+            this.innerMap = innerMap;
+        }
+
+        protected PreviousNextFlashInfoManager copyWithoutInnerMap() {
+            PreviousNextFlashInfoManager result = new PreviousNextFlashInfoManager(guard);
+            result.innerMap = Collections.emptyMap();
+            if (null != previousRequestFlashInfo) {
+                result.previousRequestFlashInfo = (FlashInfo)
+                     this.previousRequestFlashInfo.copyWithoutInnerMap();
+            }
+            if (null != nextRequestFlashInfo) {
+                result.nextRequestFlashInfo = (FlashInfo)
+                     this.nextRequestFlashInfo.copyWithoutInnerMap();
+            }
+            result.incomingCookieCameFromRedirect = this.incomingCookieCameFromRedirect;
+
+            return result;
+        }
+
+
+
+        @Override
+        public String toString() {
+            String result = null;
+
+            result = "previousRequestSequenceNumber: " +
+                    ((null != previousRequestFlashInfo) ? previousRequestFlashInfo.getSequenceNumber() : "null") +
+                    " nextRequestSequenceNumber: " +
+                    ((null != nextRequestFlashInfo) ? nextRequestFlashInfo.getSequenceNumber() : "null");
+
+            return result;
+        }
+
+        void initializeBaseCase(ELFlash flash) {
+            Map<String, Object> flashMap = null;
+
+            previousRequestFlashInfo = new FlashInfo(flash.getNewSequenceNumber(),
+                    LifetimeMarker.FirstTimeThru, false);
+            innerMap.put(previousRequestFlashInfo.getSequenceNumber() + "",
+                    flashMap = new HashMap<String, Object>());
+            previousRequestFlashInfo.setFlashMap(flashMap);
+
+            nextRequestFlashInfo = new FlashInfo(flash.getNewSequenceNumber(),
+                    LifetimeMarker.FirstTimeThru, false);
+            innerMap.put(nextRequestFlashInfo.getSequenceNumber() + "",
+                    flashMap = new HashMap<String, Object>());
+            nextRequestFlashInfo.setFlashMap(flashMap);
+        }
+
+        void expirePrevious() {
+            // expire previous
+            if (null != previousRequestFlashInfo) {
+                Map<String, Object> flashMap;
+                // clear the old map
+                if (null != (flashMap = previousRequestFlashInfo.getFlashMap())) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "{0} expire previous[{1}]",
+                                new Object[]{getLogPrefix(FacesContext.getCurrentInstance()),
+                                    previousRequestFlashInfo.getSequenceNumber()});
+
+                    }
+                    FacesContext context = FacesContext.getCurrentInstance();
+                    context.getApplication().publishEvent(context, PreClearFlashEvent.class, 
+                            flashMap);
+                    flashMap.clear();
+                }
+                // remove it from the flash
+                innerMap.remove(previousRequestFlashInfo.getSequenceNumber() + "");
+                previousRequestFlashInfo = null;
+            }
+        }
+
+        void expireNext_MovePreviousToNext() {
+            if (null != nextRequestFlashInfo) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "{0} expire next[{1}], move previous to next",
+                            new Object[]{getLogPrefix(FacesContext.getCurrentInstance()),
+                                nextRequestFlashInfo.getSequenceNumber()});
+
+                }
+                Map<String, Object> flashMap = nextRequestFlashInfo.getFlashMap();
+                                
+                FacesContext context = FacesContext.getCurrentInstance();
+                context.getApplication().publishEvent(context, PreClearFlashEvent.class, 
+                        flashMap);
+                
+                // clear the old map
+                flashMap.clear();
+                // remove it from the flash
+                innerMap.remove(nextRequestFlashInfo.getSequenceNumber() + "");
+                nextRequestFlashInfo = null;
+            }
+
+            nextRequestFlashInfo = previousRequestFlashInfo;
+            previousRequestFlashInfo = null;
+        }
+
+	/**
+	 * <p>Decode the state of the PreviousNextFlashInfoManager from
+	 * a Cookie.  This entire method is wrapped in a try-catch block
+	 * to prevent any errors from malformed cookies from polluting
+	 * the system.  When any error occurs, the flash is not usable
+	 * for this request, and a nice error message is logged.</p>
+
+	 * <p>This method is where the LifetimeMarker is incremented,
+	 * UNLESS the incoming request is the GET after the REDIRECT
+	 * after POST, in which case we don't increment it because the
+	 * system will expire the entries in the doLastPhaseActions.</p>
+	 *
+	 */
+
+        void decode(FacesContext context, ELFlash flash, Cookie cookie) throws InvalidKeyException {
+            String temp;
+            String value;
+            
+            String urlDecodedValue = null;
+            
+            try {
+                urlDecodedValue = URLDecoder.decode(cookie.getValue(), "UTF-8");
+            } catch (UnsupportedEncodingException uee) {
+                urlDecodedValue = cookie.getValue();
+            }
+            
+            value = guard.decrypt(urlDecodedValue);
+            
+            try {
+                int i = value.indexOf("_");
+
+                // IMPORTANT: what was "next" when the cookie was
+                // encoded is now "previous".  Therefore decode "next" first.
+                temp = value.substring(0, i++);
+
+                if (0 < temp.length()) {
+                    nextRequestFlashInfo = new FlashInfo();
+                    nextRequestFlashInfo.decode(temp);
+                }
+                // invariant we must always have something after the _
+                previousRequestFlashInfo = new FlashInfo();
+                previousRequestFlashInfo.decode(value.substring(i));
+
+		// handle the consequences of action taken on doLastPhaseActions
+                if (previousRequestFlashInfo.isIsRedirect()) {
+                    this.setIncomingCookieCameFromRedirect(true);
+                    previousRequestFlashInfo.setIsRedirect(false);
+                } else {
+                    // Don't make the flash older on debug requests
+                    if (!UIDebug.debugRequest(context)) {
+                        previousRequestFlashInfo.setLifetimeMarker(LifetimeMarker.SecondTimeThru);
+                        nextRequestFlashInfo = null;
+                    }
+                }
+                Map<String, Object> flashMap;
+                // If the browser sent a cookie that is valid, but
+                // doesn't correspond to a map in memory...
+                if (null == (flashMap = innerMap.get(previousRequestFlashInfo.getSequenceNumber() + ""))) {
+                    // create a new map
+                    previousRequestFlashInfo = new FlashInfo();
+                    previousRequestFlashInfo.setSequenceNumber(flash.getNewSequenceNumber());
+                    previousRequestFlashInfo.setLifetimeMarker(LifetimeMarker.FirstTimeThru);
+                    previousRequestFlashInfo.setIsRedirect(false);
+                    // put it in the flash
+                    innerMap.put(previousRequestFlashInfo.getSequenceNumber() + "",
+                            flashMap = new HashMap<String, Object>());
+                }
+                previousRequestFlashInfo.setFlashMap(flashMap);
+                if (null != nextRequestFlashInfo) {
+                    if (null == (flashMap = innerMap.get(nextRequestFlashInfo.getSequenceNumber() + ""))) {
+                        // create a new map
+                        nextRequestFlashInfo = new FlashInfo();
+                        nextRequestFlashInfo.setSequenceNumber(flash.getNewSequenceNumber());
+                        nextRequestFlashInfo.setLifetimeMarker(LifetimeMarker.FirstTimeThru);
+                        nextRequestFlashInfo.setIsRedirect(false);
+                        // put it in the flash
+                        innerMap.put(nextRequestFlashInfo.getSequenceNumber() + "",
+                                flashMap = new HashMap<String, Object>());
+                    }
+                    nextRequestFlashInfo.setFlashMap(flashMap);
+                }
+            } catch (Throwable t) {
+                context.getAttributes().put(CONSTANTS.ForceSetMaxAgeZero, Boolean.TRUE);
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                            "jsf.externalcontext.flash.bad.cookie",
+                            new Object [] { value });
+                }
+            }
+
+        }
+
+	/**
+	 * <p>Encode the current state of the
+	 * PreviousNextFlashInfoManager to the cookie.</p>
+	 */
+        Cookie encode() {
+            Cookie result = null;
+
+            String value = ((null != previousRequestFlashInfo) ? previousRequestFlashInfo.encode() : "")  + "_" +
+                           ((null != nextRequestFlashInfo) ? nextRequestFlashInfo.encode() : "");
+            String encryptedValue = guard.encrypt(value);
+            try {
+                result = new Cookie(FLASH_COOKIE_NAME, URLEncoder.encode(encryptedValue, "UTF-8"));
+            } catch (UnsupportedEncodingException uee) {
+                result = new Cookie(FLASH_COOKIE_NAME, encryptedValue);
+            }
+                
+            if (1 == value.length()) {
+                result.setMaxAge(0);
+            }            
+            String requestContextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
+            if (requestContextPath.isEmpty()) {
+                requestContextPath = "/";
+            }
+            result.setPath(requestContextPath);
+            return result;
+        }
+
+        FlashInfo getPreviousRequestFlashInfo() {
+            return previousRequestFlashInfo;
+        }
+
+        void setPreviousRequestFlashInfo(FlashInfo thisRequestFlashInfo) {
+            this.previousRequestFlashInfo = thisRequestFlashInfo;
+        }
+
+        FlashInfo getNextRequestFlashInfo() {
+            return nextRequestFlashInfo;
+        }
+
+        FlashInfo getNextRequestFlashInfo(ELFlash flash, boolean create) {
+            if (create && null == nextRequestFlashInfo) {
+                nextRequestFlashInfo = new FlashInfo();
+                nextRequestFlashInfo.setSequenceNumber(flash.getNewSequenceNumber());
+                nextRequestFlashInfo.setLifetimeMarker(LifetimeMarker.FirstTimeThru);
+                nextRequestFlashInfo.setIsRedirect(false);
+                // put it in the flash
+                Map<String, Object> flashMap = null;
+                innerMap.put(nextRequestFlashInfo.getSequenceNumber() + "",
+                        flashMap = new HashMap<String, Object>());
+                nextRequestFlashInfo.setFlashMap(flashMap);
+            }
+            return nextRequestFlashInfo;
+        }
+
+        void setNextRequestFlashInfo(FlashInfo nextRequestFlashInfo) {
+            this.nextRequestFlashInfo = nextRequestFlashInfo;
+        }
+
+        boolean isIncomingCookieCameFromRedirect() {
+            return incomingCookieCameFromRedirect;
+        }
+
+        void setIncomingCookieCameFromRedirect(boolean incomingCookieCameFromRedirect) {
+            this.incomingCookieCameFromRedirect = incomingCookieCameFromRedirect;
+        }
+
+    }
+
+    /**
+     * <p>Encapsulate one of the two maps that back the flash for the
+     * current request.</p>
+     */
+    private static final class FlashInfo {
+
+	/**
+	 * <p>Set to true by the Flash when the extContext tells us
+	 * there is a redirect.</p>
+	 */
+        private boolean isRedirect;
+
+	/**
+	 * <p>How many times has this map been through the lifecycle?</p>
+	 */
+        private LifetimeMarker lifetimeMarker;
+
+	/**
+	 * <p>Application Unique key in the innerMap.</p>
+	 */
+
+        private long sequenceNumber;
+
+	/**
+	 * <p>The Map that stores the data. This map itself is stored in
+	 * innerMap under the key given by the value of
+	 * sequenceNumber.</p>
+	 */
+        private Map<String, Object> flashMap;
+
+        private FlashInfo() {
+
+        }
+
+        FlashInfo(long sequenceNumber, LifetimeMarker lifetimeMarker,
+                boolean isRedirect) {
+            setSequenceNumber(sequenceNumber);
+            setLifetimeMarker(lifetimeMarker);
+            setIsRedirect(isRedirect);
+        }
+
+        FlashInfo copyWithoutInnerMap()  {
+            FlashInfo result = new FlashInfo(this.sequenceNumber, 
+                    this.lifetimeMarker, this.isRedirect);
+
+            return result;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            final FlashInfo other = (FlashInfo) obj;
+            if (this.isRedirect != other.isRedirect) {
+                return false;
+            }
+            if (this.lifetimeMarker != other.lifetimeMarker && (this.lifetimeMarker == null || !this.lifetimeMarker.equals(other.lifetimeMarker))) {
+                return false;
+            }
+            if (this.sequenceNumber != other.sequenceNumber) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hash = 7;
+            hash = 71 * hash + (this.isRedirect ? 1 : 0);
+            hash = 71 * hash + (this.lifetimeMarker != null ? this.lifetimeMarker.hashCode() : 0);
+            hash = 71 * hash + (int) (this.sequenceNumber ^ (this.sequenceNumber >>> 32));
+            return hash;
+        }
+
+        
+
+        void decode(String value) {
+            if (null == value || 0 == value.length()) {
+
+                // PENDING(edburns): REMOVE THIS
+                return;
+            }
+
+            int i = value.indexOf('X');
+
+            // decode the sequence number
+            setSequenceNumber(Long.parseLong(value.substring(0, i++)));
+
+            // decode the lifetime marker
+            setLifetimeMarker(LifetimeMarker.decode(value.charAt(i++)));
+            
+            // decode the redirect flag
+            setIsRedirect(LifetimeMarker.IsRedirect ==
+                    LifetimeMarker.decode(value.charAt(i++)));
+        }
+
+        String encode() {
+            String value = null;
+
+            // The cookie value is an encoding of the sequence number, the
+            // lifetime marker, and the redirect flag
+            if (isIsRedirect()) {
+                value = Long.toString(getSequenceNumber()) + "X" +
+                        getLifetimeMarker().encode() +
+                        LifetimeMarker.IsRedirect.encode();
+            } else {
+                value = Long.toString(getSequenceNumber()) + "X" +
+                        getLifetimeMarker().encode() +
+                        LifetimeMarker.IsNormal.encode();
+            }
+
+            return value;
+        }
+
+        boolean isIsRedirect() {
+            return isRedirect;
+        }
+
+        void setIsRedirect(boolean isRedirect) {
+            this.isRedirect = isRedirect;
+        }
+
+        long getSequenceNumber() {
+            return sequenceNumber;
+        }
+
+        void setSequenceNumber(long sequenceNumber) {
+            this.sequenceNumber = sequenceNumber;
+        }
+
+        LifetimeMarker getLifetimeMarker() {
+            return lifetimeMarker;
+        }
+
+        void setLifetimeMarker(LifetimeMarker lifetimeMarker) {
+            this.lifetimeMarker = lifetimeMarker;
+        }
+
+        Map<String, Object> getFlashMap() {
+            return flashMap;
+        }
+
+        void setFlashMap(Map<String, Object> flashMap) {
+            this.flashMap = flashMap;
+        }
+
+        
+
+    }
+
+    // </editor-fold>
+
+
+}
diff --git a/com/sun/faces/context/flash/FlashELResolver.java b/com/sun/faces/context/flash/FlashELResolver.java
new file mode 100644
index 0000000..7ab3b61
--- /dev/null
+++ b/com/sun/faces/context/flash/FlashELResolver.java
@@ -0,0 +1,398 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.context.flash;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.el.PropertyNotWritableException;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import java.beans.FeatureDescriptor;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.faces.FactoryFinder;
+import javax.faces.context.Flash;
+import javax.faces.context.FlashFactory;
+
+/**
+ * <p>Provide a feature semantically identical to the <a target="_"
+ * href="http://api.rubyonrails.com/classes/ActionController/Flash.html">
+ * "flash" concept in Ruby on Rails</a>.</p>
+ * <p/>
+ * <p>The feature is exposed to users via a custom
+ * <code>ELResolver</code> which introduces a new implicit object,
+ * <code>flash</code>.  The flash functions as <code>Map</code> and
+ * can be used in <code>getValue( )</code> or <code>setValue(
+ * )</code> expressions.</p>
+ * <p/>
+ * <p>Usage</p>
+ * <p/>
+ * <ul>
+ * <p/>
+ * <p>Consider three JSF views: viewA, viewB, and viewC.  The user
+ * first views viewA, then clicks a button and is shown viewB, where
+ * she clicks a button and is shown viewC.  If values are stored
+ * into the flash during the rendering or postback phases of viewA,
+ * they are available to during the rendering phase of viewB, but
+ * are not available during the rendering or postback phases of
+ * viewC.  In other words, values stored into the flash on "this"
+ * request are accessible for the "next" request, but not
+ * thereafter.</p>
+ * <p/>
+ * <p>There are three ways to access the flash.</p>
+ * <p/>
+ * <ol>
+ * <p/>
+ * <li><p>Using an EL Expression, such as using
+ * <code>#{flash.foo}</code> as the value of an attribute in a JSP
+ * page.</p></li>
+ * <p/>
+ * <li><p>Using the EL API, such as:</p>
+ * <p/>
+ * <p><code><pre>
+ * FacesContext context = FacesContext.getCurrentInstance();
+ * ValueExpression flashExpression = context.getApplication().
+ *    createValueExpression(context.getELContext(), "#{flash.foo}",
+ *                          null, Object.class);
+ * flashExpression.setValue(context.getELContext(), "Foo's new value");
+ * </pre></code></p>
+ * <p/>
+ * </li>
+ * <p/>
+ * <li><p>Using getting the {@link ELFlash} directly, such as:</p>
+ * <p/>
+ * <p><code><pre>
+ * Map<String,Object> flash = ELFlash.getFlash();
+ * flash.put("foo", "Foo's new value");
+ * </pre></code></p>
+ * <p/>
+ * </li>
+ * <p/>
+ * </ol>
+ * <p/>
+ * <p>The main entry point to this feature is the first one.  This
+ * library includes a simple custom tag, <code><a target="_"
+ * href="../../../../tlddoc/jsfExt/set.html">jsfExt:set</a></code>, that
+ * evaluates an expression and sets its value into another expression.
+ * <code>jsfExt:set</code> can be used to store values into the flash
+ * from JSP pages, like this:</p>
+ * <p/>
+ * <p><code><jsfExt:set var="#{flash.foo}" value="fooValue"
+ * /></code></p>
+ * <p/>
+ * <p>or this:</p>
+ * <p/>
+ * <p><code><jsfExt:set var="#{flash.keep.bar}" value="#{user.name}"
+ * /></code></p>
+ * <p/>
+ * <p>or even this:</p>
+ * <p/>
+ * <p><code><pre>
+ * <jsfExt:set var="#{flash.now.baz}" value="#{cookie.userCookie}" />
+ * <p/>
+ * <h:outputText value="#{flash.now.baz}" />
+ * <p/>
+ * </pre></code></p>
+ * <p/>
+ * </ul>
+ * <p/>
+ * <p>Related Classes</p>
+ * <p/>
+ * <p>The complete list of classes that make up this feature is</p>
+ * <p/>
+ * <ul><code>
+ * <p/>
+ * <li><p>FlashELResolver</p></li>
+ * <p/>
+ * <li><p>{@link ELFlash}</p></li>
+ * <p/>
+ * </code></ul>
+ */
+
+public class FlashELResolver extends ELResolver {
+
+    /**
+     * <p>Not intended for manual invocation.  Only called by the JSF
+     * Runtime.</p>
+     */
+
+    public FlashELResolver() {
+
+    }
+
+    // ------------------------------------------------------ Manifest Constants
+
+    private static final String FLASH_VARIABLE_NAME = "flash";
+
+    private static final String FLASH_NOW_VARIABLE_NAME = "now";
+
+    private static final String FLASH_KEEP_VARIABLE_NAME = "keep";
+
+    // ------------------------------------------------ VariableResolver Methods
+
+    /**
+     * <p>Hook into the EL resolution process to introduce the
+     * <code>flash</code> implicit object.  If
+     * <code>property</code> is <code>null</code>, take no action
+     * and return <code>null</code>.  if <code>base</code> is null, return null.
+     * If
+     * <code>base</code> is an instance of <code>ELFlash</code> and
+     * property is the literal string "keep", set a ThreadLocal property
+     * that will be inspected by the flash on the next link in the
+     * resolution chain and return the <code>ELFlash</code> instance.
+     * If <code>base</code> is an instance of <code>ELFlash</code> and
+     * <code>property</code> is the literal string "now", return the
+     * result of calling <code>getRequestMap( )</code> on the
+     * <code>ExternalContext</code> for the <code>FacesContext</code>
+     * for this request.  Call <code>setPropertyResolved(true)</code> on
+     * the <code>ELContext</code> where appropriate.</p>
+     *
+     * @throws PropertyNotFoundException if <code>property</code> is
+     *                                   <code>null</code>.
+     */
+
+  public Object getValue(ELContext elContext, Object base, Object property)
+  {
+    if (null == property)
+    {
+      // take no action.
+      return null;
+    }
+
+    Object result = null;
+
+    if (null == base)
+    {
+      return null;
+    }
+    // If the base argument is the flash itself...
+    else if (base instanceof Flash)
+    {
+        FacesContext facesContext =
+                (FacesContext) elContext.getContext(FacesContext.class);
+        ExternalContext extCtx = facesContext.getExternalContext();
+        
+        // and the property argument is "keep"...
+        if (property.toString().equals(FLASH_KEEP_VARIABLE_NAME))
+        {
+            elContext.setPropertyResolved(true);
+          
+            // then this is a request to promote the value
+            // "property", which is assumed to have been previously
+            // stored in request scope via the "flash.now"
+            // expression, to flash scope.
+            result = base;
+            // Set a flag so the flash itself can look in the request
+            // and promote the value to the next request
+            FlashFactory ff = (FlashFactory) 
+                    FactoryFinder.getFactory(FactoryFinder.FLASH_FACTORY);
+            ff.getFlash(true);
+            ELFlash.setKeepFlag(facesContext);
+        }
+        // Otherwise, if base is the flash, and property is "now"...
+        else if (property.toString().equals(FLASH_NOW_VARIABLE_NAME))
+        {
+            // PENDING(edburns): use FacesContext.getAttributes() instead of 
+            // request scope.
+            Map<String, Object> requestMap = extCtx.getRequestMap();
+            requestMap.put(ELFlash.FLASH_NOW_REQUEST_KEY, property);
+            elContext.setPropertyResolved(true);
+            result = requestMap;
+        }
+        else
+        {
+            result = null;
+        }
+    }
+
+    return result;
+  }
+
+    /**
+     * <p>Return the valid <code>Class</code> for a future set
+     * operation, which will always be <code>null</code> because sets
+     * happen via the <code>MapELResolver</code> operating on the {@link
+     * ELFlash} instance as a <code>Map</code>.</p>
+     *
+     * @throws PropertyNotFoundException if property is <code>null</code>.
+     */
+
+    public Class<?> getType(ELContext elContext,
+                            Object base,
+                            Object property) {
+
+        if (null != base) {
+            return null;
+        }
+        if (null == property) {
+            String message = " base " + base + " property " + property;
+            throw new PropertyNotFoundException(message);
+        }
+        if (property.toString().equals(FLASH_VARIABLE_NAME)) {
+            elContext.setPropertyResolved(true);
+        }
+
+        return null;
+    }
+
+    /**
+     * <p>This method will throw
+     * <code>PropertyNotWritableException</code> if called with a
+     * <code>null</code> <code>base</code> and a <code>property</code>
+     * value equal to the literal string "flash".  This is because set
+     * operations normally go through the <code>MapELResolver</code> via
+     * the <code>ELFlash</code> <code>Map</code>.</p>
+     * <p/>
+     * <p>In other words, do not call this method directly to set a
+     * value into the flash!  The only way to access the flash is either
+     * through JSP or via the EL API.</p>
+     *
+     * @throws PropertyNotFoundException    if <code>base</code> is
+     *                                      <code>null</code> and <code>property</code> is <code>null</code>.
+     * @throws PropertyNotWritableException if <code>base</code> is
+     *                                      <code>null</code> and <code>property</code> is the literal string
+     *                                      "flash".
+     */
+
+    public void setValue(ELContext elContext,
+                         Object base,
+                         Object property,
+                         Object value) {
+        if (null != base) {
+            return;
+        }
+        if (null == property) {
+            String message = " base " + base + " property " + property;
+            throw new PropertyNotFoundException(message);
+        }
+        if (property.toString().equals(FLASH_VARIABLE_NAME)) {
+            elContext.setPropertyResolved(true);
+            throw new PropertyNotWritableException(property.toString());
+        }
+
+    }
+
+    /**
+     * <p>Returns <code>true</code> because write operations take place
+     * via the <code>MapELResolver</code> on the actual {@link ELFlash}
+     * instance.</p>
+     *
+     * @throws PropertyNotFoundException if <code>base</code> is
+     *                                   <code>null</code> and <code>property</code> is <code>null</code>.
+     */
+
+    public boolean isReadOnly(ELContext elContext,
+                              Object base,
+                              Object property) {
+        if (base != null) {
+            return false;
+        }
+        if (property == null) {
+            String message = " base " + base + " property " + property;
+            throw new PropertyNotFoundException(message);
+        }
+
+        if (property.toString().equals(FLASH_VARIABLE_NAME)) {
+            elContext.setPropertyResolved(true);
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * <p>Returns an iterator of <code>FeatureDescriptors</code> for the
+     * current contents of the flash.</p>
+     */
+
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext elContext,
+                                                             Object base) {
+        if (null != base) {
+            return null;
+        }
+        Iterator<FeatureDescriptor> result = null;
+        Map<String, Object> flash;
+        FacesContext facesContext =
+                (FacesContext) elContext.getContext(FacesContext.class);
+        ExternalContext extCtx = facesContext.getExternalContext();
+
+        //noinspection unchecked
+        if (null != (flash = extCtx.getFlash())) {
+            Iterator<Map.Entry<String, Object>> iter = flash.entrySet().iterator();
+            Map.Entry<String, Object> cur;
+            ArrayList<FeatureDescriptor> fds;
+            FeatureDescriptor fd;
+            if (iter.hasNext()) {
+                fds = new ArrayList<FeatureDescriptor>(flash.size());
+                while (iter.hasNext()) {
+                    cur = iter.next();
+                    fd = new FeatureDescriptor();
+                    fd.setName(cur.getKey());
+                    fds.add(fd);
+                }
+                result = fds.iterator();
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * <p>If <code>base</code> is non-<code>null</code> and is the
+     * literal string "flash", return <code>Object.class</code>.</p>
+     */
+
+    public Class<?> getCommonPropertyType(ELContext context,
+                                          Object base) {
+        Class<?> result = null;
+        if (null != base) {
+            if (FLASH_VARIABLE_NAME.equals(base.toString())) {
+                result = Object.class;
+            }
+        }
+        return result;
+    }
+
+
+}
diff --git a/com/sun/faces/context/flash/FlashFactoryImpl.java b/com/sun/faces/context/flash/FlashFactoryImpl.java
new file mode 100644
index 0000000..c76761e
--- /dev/null
+++ b/com/sun/faces/context/flash/FlashFactoryImpl.java
@@ -0,0 +1,63 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.context.flash;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.Flash;
+import javax.faces.context.FlashFactory;
+
+public class FlashFactoryImpl extends FlashFactory {
+
+    public FlashFactoryImpl() {
+    }
+
+    @Override
+    public Flash getFlash(boolean create) {
+        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
+        Flash result = ELFlash.getFlash(context, create);
+        
+        return result;
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/context/flash/SessionHelper.java b/com/sun/faces/context/flash/SessionHelper.java
new file mode 100644
index 0000000..c86b31a
--- /dev/null
+++ b/com/sun/faces/context/flash/SessionHelper.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.context.flash;
+
+import java.io.Serializable;
+import java.util.Map;
+import javax.faces.context.ExternalContext;
+import javax.servlet.http.HttpSessionActivationListener;
+import javax.servlet.http.HttpSessionEvent;
+
+class SessionHelper implements Serializable, HttpSessionActivationListener {
+    
+    private static final long serialVersionUID = -4146679754778263071L;
+    
+    static final String FLASH_SESSIONACTIVATIONLISTENER_ATTRIBUTE_NAME = 
+            ELFlash.FLASH_ATTRIBUTE_NAME + "FSAL";
+
+    private static final String FLASH_INNER_MAP_KEY = ELFlash.FLASH_ATTRIBUTE_NAME + "FIM";
+    private boolean didPassivate;
+    
+    static SessionHelper getInstance(ExternalContext extContext) {
+        return (SessionHelper) 
+                extContext.getSessionMap().get(FLASH_SESSIONACTIVATIONLISTENER_ATTRIBUTE_NAME);
+    }
+
+    void update(ExternalContext extContext,
+            ELFlash flash) {
+        Map<String, Object> sessionMap = extContext.getSessionMap();
+        if (didPassivate) {
+            Map<String, Map<String, Object>> flashInnerMap = 
+                    (Map<String, Map<String, Object>>) sessionMap.get(FLASH_INNER_MAP_KEY);
+            flash.setFlashInnerMap(flashInnerMap);
+            didPassivate = false;
+        } else {
+            sessionMap.put(FLASH_SESSIONACTIVATIONLISTENER_ATTRIBUTE_NAME, this);
+            sessionMap.put(FLASH_INNER_MAP_KEY, flash.getFlashInnerMap());
+        }
+    }
+    
+    void remove(ExternalContext extContext) {
+        Map<String, Object> sessionMap = extContext.getSessionMap();
+        sessionMap.remove(FLASH_SESSIONACTIVATIONLISTENER_ATTRIBUTE_NAME);
+        sessionMap.remove(FLASH_INNER_MAP_KEY);
+    }
+    
+    
+    @Override
+    public void sessionDidActivate(HttpSessionEvent hse) {
+        didPassivate = true;
+    }
+
+    @Override
+    public void sessionWillPassivate(HttpSessionEvent hse) {
+        didPassivate = true;
+
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/el/ChainAwareVariableResolver.java b/com/sun/faces/el/ChainAwareVariableResolver.java
new file mode 100644
index 0000000..51a8ae8
--- /dev/null
+++ b/com/sun/faces/el/ChainAwareVariableResolver.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.el.ELResolver;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.VariableResolver;
+
+import com.sun.faces.util.RequestStateManager;
+import com.sun.faces.el.FacesCompositeELResolver.ELResolverChainType;
+
+/**
+ * <p> This special VariableResolver serves as the "original"
+ * VariableResolver that is passed to the one-arg ctor for the
+ * <b>first</b> custom VariableResolver that is encountered during
+ * application configuration.  Subsequent VariableResolver instances get
+ * passed the previous VariableResolver instance, per section 10.4.5 of
+ * the spec. </p>
+ *
+ * <p>The "specialness" of this VariableResolver is found in its {@link
+ * #resolveVariable} method, which delegates to the head of the
+ * "correct" ELResolver chain based on the context in which this
+ * expression is being evaluated.  If the expression being evaluated
+ * originated in a JSP page, the <code>Application</code>'s
+ * <code>ExpressionFactory</code> is used to create a
+ * <code>ValueExpression</code>, which is then evaluated to resolve the
+ * variable.  This will cause the ELResolver chain described in section
+ * 5.6.1 of the spec to be used.  If the expression being evaluated
+ * originated in a programmatic API call, the <code>Application</code>'s
+ * <code>ELResolver</code> is used to resolve the variable.  This will
+ * cause the ELResolver chain described in section 5.6.2 of the spec to
+ * be used.</p>
+ */
+
+ at SuppressWarnings("deprecation")
+public class ChainAwareVariableResolver extends VariableResolver {
+
+    public ChainAwareVariableResolver() {
+
+    }
+
+
+    //
+    // Relationship Instance Variables
+    // 
+
+    /**
+     * See the class javadocs.
+     */
+    public Object resolveVariable(FacesContext context, String name)
+            throws EvaluationException {
+        Object result = null;
+        ELResolverChainType type = ELResolverChainType.Faces;
+        Object valueObject = RequestStateManager.get(context,
+                                                     RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
+        if (null != valueObject && 
+            valueObject instanceof ELResolverChainType) {
+            type = (ELResolverChainType) valueObject;
+        }
+        if (ELResolverChainType.JSP == type) {
+            ValueExpression ve = context.getApplication().getExpressionFactory()
+                  .createValueExpression(context.getELContext(),
+                                         "#{" + name + "}", Object.class);
+            result = ve.getValue(context.getELContext());
+        } else if (ELResolverChainType.Faces == type) {
+            ELResolver elr = context.getApplication().getELResolver();
+            result = elr.getValue(context.getELContext(), null, name);
+        }
+
+        return result;
+    }
+}
diff --git a/com/sun/faces/el/ChainTypeCompositeELResolver.java b/com/sun/faces/el/ChainTypeCompositeELResolver.java
new file mode 100644
index 0000000..0f10406
--- /dev/null
+++ b/com/sun/faces/el/ChainTypeCompositeELResolver.java
@@ -0,0 +1,227 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import com.sun.faces.util.RequestStateManager;
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+import java.util.Map;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.faces.context.FacesContext;
+
+/**
+ * Maintains an ordered composite list of child <code>ELResolver for JSF</code>.
+ *
+ */
+public final class ChainTypeCompositeELResolver extends FacesCompositeELResolver
+{
+  @Override
+  public void addRootELResolver(ELResolver elResolver)
+  {
+    _wrapped.addRootELResolver(elResolver);
+  }
+
+  public void addPropertyELResolver(ELResolver elResolver)
+  {
+    _wrapped.addPropertyELResolver(elResolver);
+  }
+
+  public void add(ELResolver elResolver)
+  {
+    _wrapped.add(elResolver);    
+  }
+
+  @Override
+  public Object getValue(ELContext context, Object base, Object property) throws ELException
+  {      
+    FacesContext ctx = getFacesContext(context);
+    if (ctx == null)
+    {
+      return null;
+    }
+
+    Map<String,Object> stateMap = 
+	RequestStateManager.getStateMap(ctx);
+    
+    stateMap.put(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME,
+		 _chainType);
+    Object result = null;
+    try {
+        result = _wrapped.getValue(context, base, property);
+    } finally {
+        stateMap.remove(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
+    }
+    
+    return result;
+  }
+  
+  @Override
+  public Class<?> getType(ELContext context, Object base, Object property) throws ELException
+  {
+
+    FacesContext ctx = getFacesContext(context);
+    
+    if (ctx == null)
+    {
+      return null;
+    }
+    
+    Map<String,Object> stateMap =
+	RequestStateManager.getStateMap(ctx);
+
+    stateMap.put(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME,
+		 _chainType);
+    Class<?> result = null;
+    try {
+        result = _wrapped.getType(context, base, property);
+    } finally {
+        stateMap.remove(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
+    }
+
+    return result;
+  }
+  
+  @Override
+  public void setValue(ELContext context, Object base, Object property, Object val)
+    throws ELException
+  {
+    FacesContext ctx = getFacesContext(context);
+    if (ctx == null)
+    {
+      return;
+    }
+    
+    Map<String,Object> stateMap =
+	RequestStateManager.getStateMap(ctx);
+
+    stateMap.put(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME,
+		 _chainType);
+    try {
+        _wrapped.setValue(context, base, property, val);
+    } finally {
+        stateMap.remove(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
+    }
+  }
+    
+  @Override
+  public boolean isReadOnly(ELContext context, Object base, Object property) throws ELException
+  {
+    FacesContext ctx = getFacesContext(context);
+    if (ctx == null)
+    {
+      return false;
+    }
+    
+    Map<String,Object> stateMap =
+	RequestStateManager.getStateMap(ctx);
+
+    stateMap.put(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME,
+		 _chainType);
+    boolean result = false;
+    try {
+        result = _wrapped.isReadOnly(context, base, property);
+    } finally {
+        stateMap.remove(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
+    }
+    
+    return result;
+  }
+  
+  @Override
+  public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base)
+  {
+    FacesContext ctx = getFacesContext(context);
+    Iterator<FeatureDescriptor> result = null;
+    if (ctx != null) {
+        Map<String,Object> stateMap =
+            RequestStateManager.getStateMap(ctx);
+
+        stateMap.put(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME,
+                     _chainType);
+        try {
+            result = _wrapped.getFeatureDescriptors(context, base);
+        } finally {
+            stateMap.remove(RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
+        }
+    }
+    return result;
+  }
+   
+  @Override
+  public ELResolverChainType getChainType()
+  {
+    return _chainType;
+  }
+    
+  private final FacesCompositeELResolver _wrapped;
+  private final ELResolverChainType _chainType;
+
+  /**
+   * <p>Guarantee that this instance knows of what chain it is a
+   * member.</p>
+   * @param chainType the ELResolverChainType
+   */
+  public ChainTypeCompositeELResolver(ELResolverChainType chainType)
+  {
+    _wrapped = new DemuxCompositeELResolver(chainType);
+    _chainType = chainType;
+  }
+
+  public ChainTypeCompositeELResolver(FacesCompositeELResolver delegate)
+  {
+    _wrapped = delegate;
+    _chainType = delegate.getChainType();
+  }
+
+  /**
+   * @param elContext context for the current expression evaluation
+   * @return the <code>FacesContext</code> associated with this expression
+   *  evaluation
+   */
+  private FacesContext getFacesContext(ELContext elContext) {
+
+      return (FacesContext) elContext.getContext(FacesContext.class);
+
+  }
+}
+
diff --git a/com/sun/faces/el/CompositeComponentAttributesELResolver.java b/com/sun/faces/el/CompositeComponentAttributesELResolver.java
new file mode 100644
index 0000000..2c4e3c9
--- /dev/null
+++ b/com/sun/faces/el/CompositeComponentAttributesELResolver.java
@@ -0,0 +1,479 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.logging.Logger;
+
+import javax.el.ELResolver;
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.el.MethodExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.CompositeComponentExpressionHolder;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.component.CompositeComponentStackManager;
+import static com.sun.faces.component.CompositeComponentStackManager.StackType.TreeCreation;
+import static com.sun.faces.component.CompositeComponentStackManager.StackType.Evaluation;
+import com.sun.faces.util.FacesLogger;
+
+import java.beans.BeanInfo;
+import java.beans.PropertyDescriptor;
+
+/**
+ * <p>
+ * This {@link ELResolver} will handle the resolution of <code>attrs</code>
+ * when processing a composite component instance.
+ * </p>
+ */
+public class CompositeComponentAttributesELResolver extends ELResolver {
+    
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
+
+    /**
+     * Implicit object related only to the cc implicitObject.
+     */
+    private static final String COMPOSITE_COMPONENT_ATTRIBUTES_NAME = "attrs";
+
+    /**
+     * Implicit object related only to the cc implicit object
+     * and refers to the composite component parent (if any).
+     */
+    private static final String COMPOSITE_COMPONENT_PARENT_NAME = "parent";
+
+    /**
+     * Key to which we store the mappings between composite component instances
+     * and their ExpressionEvalMap.
+     */
+    private static final String EVAL_MAP_KEY =
+          CompositeComponentAttributesELResolver.class.getName() + "_EVAL_MAP";
+
+
+    // ------------------------------------------------- Methods from ELResolver
+
+
+    /**
+     * <p>
+     * If <code>base</code> is a composite component and <code>property</code>
+     * is <code>attrs</code>, return a new <code>ExpressionEvalMap</code>
+     * which wraps the composite component's attributes map.
+     * </p>
+     *
+     * <p>
+     * The <code>ExpressionEvalMap</code> simple evaluates any {@link ValueExpression}
+     * instances stored in the composite component's attribute map and returns
+     * the result.
+     * </p>
+     *
+     * <p>
+     * If <code>base</code> is a composite component and <code>property</code>
+     * is <code>parent</code> attempt to resolve the composite componet parent
+     * of the current composite component by calling
+     * {@link UIComponent#getCompositeComponentParent(javax.faces.component.UIComponent)})
+     * and returning that value.
+     * </p>
+     *
+     * @see javax.el.ELResolver#getValue(javax.el.ELContext, Object, Object)
+     * @see com.sun.faces.el.CompositeComponentAttributesELResolver.ExpressionEvalMap
+     */
+    public Object getValue(ELContext context, Object base, Object property) {
+
+        Util.notNull("context", context);
+
+        if (base != null
+            && (base instanceof UIComponent)
+            && UIComponent.isCompositeComponent((UIComponent) base)
+            && property != null) {
+
+            String propertyName = property.toString();
+            if (COMPOSITE_COMPONENT_ATTRIBUTES_NAME.equals(propertyName)) {
+                UIComponent c = (UIComponent) base;
+                context.setPropertyResolved(true);
+                FacesContext ctx = (FacesContext)
+                      context.getContext(FacesContext.class);
+                return getEvalMapFor(c, ctx);
+            }
+
+            if (COMPOSITE_COMPONENT_PARENT_NAME.equals(propertyName)) {
+                UIComponent c = (UIComponent) base;
+                context.setPropertyResolved(true);
+                FacesContext ctx = (FacesContext)
+                      context.getContext(FacesContext.class);
+                CompositeComponentStackManager m =
+                      CompositeComponentStackManager.getManager(ctx);
+                UIComponent ccp = m.getParentCompositeComponent(TreeCreation,
+                                                                ctx,
+                                                                c);
+                if (ccp == null) {
+                    ccp = m.getParentCompositeComponent(Evaluation,
+                                                        ctx,
+                                                        c);
+                }
+                return ccp;
+            }
+        }
+
+        return null;
+
+    }
+
+
+    /**
+     * <p>
+     * Readonly, so return <code>null</code>.
+     * </p>
+     *
+     * @see ELResolver#getType(javax.el.ELContext, Object, Object)
+     */
+    public Class<?> getType(ELContext context, Object base, Object property) {
+        Util.notNull("context", context);
+        if (!(base instanceof ExpressionEvalMap && property instanceof String)) {
+            return null;
+        }
+        Class<?> exprType = null;
+        Class<?> metaType = null;
+
+        ExpressionEvalMap evalMap = (ExpressionEvalMap) base;
+        ValueExpression ve = evalMap.getExpression((String) property);
+        if (ve != null) {
+            exprType = ve.getType(context);
+        }
+
+        if (!"".equals(property)) {
+            FacesContext facesContext = (FacesContext) context.getContext(FacesContext.class);
+            UIComponent cc = UIComponent.getCurrentCompositeComponent(facesContext);
+            BeanInfo metadata = (BeanInfo) cc.getAttributes().get(UIComponent.BEANINFO_KEY);
+            assert(null != metadata);
+            PropertyDescriptor[] attributes = metadata.getPropertyDescriptors();
+            if (null != attributes) {
+                for (PropertyDescriptor cur : attributes) {
+                    if (property.equals(cur.getName())) {
+                        Object type = cur.getValue("type");
+                        if (null != type) {
+                            assert(type instanceof Class);
+                            metaType = (Class) type;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        if (metaType != null) {
+            // override exprType only if metaType is narrower:
+            if (exprType == null || exprType.isAssignableFrom(metaType)) {
+                context.setPropertyResolved(true);
+                return metaType;
+            }
+        }
+        return exprType;
+    }
+    
+    /**
+     * <p>
+     * This is a no-op.
+     * </p>
+     *
+     * @see ELResolver#setValue(javax.el.ELContext, Object, Object, Object)
+     */
+    public void setValue(ELContext context,
+                         Object base,
+                         Object property,
+                         Object value) {
+
+        Util.notNull("context", context);
+
+    }
+
+
+    /**
+     * <p>
+     * Readonly, so return <code>true</code>
+     * </p>
+     *
+     * @see javax.el.ELResolver#isReadOnly(javax.el.ELContext, Object, Object)
+     */
+    public boolean isReadOnly(ELContext context, Object base, Object property) {
+
+        Util.notNull("context", context);
+        return true;
+
+    }
+
+
+    /**
+     * <p>
+     * This <code>ELResolver</code> currently returns no feature descriptors
+     * as we have no way to effectively iterate over the UIComponent
+     * attributes Map.
+     * </p>
+     *
+     * @see javax.el.ELResolver#getFeatureDescriptors(javax.el.ELContext, Object)
+     */
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
+                                                             Object base) {
+
+        Util.notNull("context", context);
+        return null;
+
+    }
+
+
+    /**
+     * <p>
+     * <code>attrs<code> is considered a <code>String</code> property.
+     * </p>
+     *
+     * @see javax.el.ELResolver#getCommonPropertyType(javax.el.ELContext, Object)
+     */
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+
+        Util.notNull("context", context);
+        return String.class;
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>
+     * Creates (if necessary) and caches an <code>ExpressionEvalMap</code>
+     * instance associated with the owning {@link UIComponent}
+     * </p>
+     *
+     * @param c the owning {@link UIComponent}
+     * @param ctx the {@link FacesContext} for the current request
+     * @return an <code>ExpressionEvalMap</code> for the specified component
+     */
+    public Map<String,Object> getEvalMapFor(UIComponent c, FacesContext ctx) {
+
+        Map<Object, Object> ctxAttributes = ctx.getAttributes();
+        //noinspection unchecked
+        Map<UIComponent,Map<String,Object>> topMap =
+              (Map<UIComponent,Map<String,Object>>) ctxAttributes.get(EVAL_MAP_KEY);
+        Map<String,Object> evalMap = null;
+        if (topMap == null) {
+            topMap = new HashMap<UIComponent,Map<String,Object>>();
+            ctxAttributes.put(EVAL_MAP_KEY, topMap);
+            evalMap = new ExpressionEvalMap(ctx, c);
+            topMap.put(c, evalMap);
+        }
+        else {
+            evalMap = topMap.get(c);
+            if (evalMap == null) {
+                evalMap = new ExpressionEvalMap(ctx, c);
+                topMap.put(c, evalMap);
+            } else {
+        	// JAVASERVERFACES-2508 - running as Portlet2 FacesContext must be updated for rendering, or 
+        	// ExpressionEvalMap would have to be reconstructed for the second Portlet phase
+        	((ExpressionEvalMap)evalMap).updateFacesContext(ctx);
+            }
+        }
+        return evalMap;
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Simple Map implementation to evaluate any <code>ValueExpression</code>
+     * stored directly within the provided attributes map.
+     */
+    private static final class ExpressionEvalMap
+    implements Map<String,Object>, CompositeComponentExpressionHolder {
+
+        private Map<String,Object> attributesMap;
+        private PropertyDescriptor[] declaredAttributes;
+        private Map<Object, Object> declaredDefaultValues;
+        private FacesContext ctx;
+        private UIComponent cc;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        ExpressionEvalMap(FacesContext ctx, UIComponent cc) {
+
+            this.cc = cc;
+            this.attributesMap = cc.getAttributes();
+            BeanInfo metadata = (BeanInfo) this.attributesMap.get(UIComponent.BEANINFO_KEY);
+            if (null != metadata) {
+                this.declaredAttributes = metadata.getPropertyDescriptors();
+                this.declaredDefaultValues = new HashMap<Object, Object>(5);
+            }
+            this.ctx = ctx;
+
+        }
+
+
+        // --------------------- Methods from CompositeComponentExpressionHolder
+
+
+        public ValueExpression getExpression(String name) {
+            Object ve = cc.getValueExpression(name);
+            return ((ve instanceof ValueExpression) ? (ValueExpression) ve : null);
+        }
+
+
+        // ---------------------------------------------------- Methods from Map
+
+
+        public int size() {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean isEmpty() {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean containsKey(Object key) {
+            boolean result = attributesMap.containsKey(key);
+            if (!result) {
+                result = null != getDeclaredDefaultValue(key);
+            }
+            return result;
+        }
+
+        public boolean containsValue(Object value) {
+            throw new UnsupportedOperationException();
+        }
+
+
+
+        public Object get(Object key) {
+            Object v = attributesMap.get(key);
+            if (v == null) {
+                v = getDeclaredDefaultValue(key);
+                if (v != null) {
+                    return ((ValueExpression) v).getValue(ctx.getELContext());
+                }
+            }
+            if (v != null && v instanceof MethodExpression) {
+                return v;
+            }
+            return v;
+        }
+
+        public Object put(String key, Object value) {
+            // Unlinke AttributesMap.get() which will obtain a value from
+            // a ValueExpression, AttributesMap.put(), when passed a value,
+            // will never call ValueExpression.setValue(), so we have to take
+            // matters into our own hands...
+            ValueExpression ve = cc.getValueExpression(key);
+            if (ve != null) {
+                ve.setValue(ctx.getELContext(), value);
+            } else {
+                attributesMap.put(key, value);
+            }
+            return null;
+        }
+
+        public Object remove(Object key) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void putAll(Map<? extends String,?> t) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void clear() {
+            throw new UnsupportedOperationException();
+        }
+
+        public Set<String> keySet() {
+            throw new UnsupportedOperationException();
+        }
+
+        public Collection<Object> values() {
+            throw new UnsupportedOperationException();
+        }
+
+        public Set<Map.Entry<String,Object>> entrySet() {
+            throw new UnsupportedOperationException();
+        }
+
+        private Object getDeclaredDefaultValue(Object key) {
+            Object result = null;
+
+            // If it's not in the cache...
+            if (!declaredDefaultValues.containsKey(key)) {
+                // iterate through the property descriptors...
+                boolean found = false;
+                for (PropertyDescriptor cur : declaredAttributes) {
+                    // and if you find a match...
+                    if (cur.getName().equals(key)) {
+                        found = true;
+                        // put it in the cache, returning the value.
+                        declaredDefaultValues.put(key, result = cur.getValue("default"));
+                        break;
+                    }
+                }
+                // Otherwise, if no attribute was declared
+                if (!found) {
+                    // put null into the cache for future lookups.
+                    declaredDefaultValues.put(key, null);
+                }
+            } else {
+                // It's in the cache, just return the value.
+                result = declaredDefaultValues.get(key);
+            }
+
+            return result;
+        }
+        
+        public void updateFacesContext(FacesContext ctx) {
+        	if (this.ctx != ctx) {
+        		this.ctx = ctx;
+        	}
+        }
+    }
+}
diff --git a/com/sun/faces/el/DemuxCompositeELResolver.java b/com/sun/faces/el/DemuxCompositeELResolver.java
new file mode 100644
index 0000000..e780cb0
--- /dev/null
+++ b/com/sun/faces/el/DemuxCompositeELResolver.java
@@ -0,0 +1,414 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import java.beans.FeatureDescriptor;
+
+import java.util.Iterator;
+
+import java.util.NoSuchElementException;
+
+import javax.el.ELResolver;
+import javax.el.ELContext;
+import javax.el.ELException;
+
+/**
+ * Maintains an ordered composite list of child <code>ELResolver for JSF</code>.
+ *
+ */
+public class DemuxCompositeELResolver extends FacesCompositeELResolver
+{
+  private final ELResolverChainType _chainType;
+  
+  private ELResolver[] _rootELResolvers = new ELResolver[2];
+  private ELResolver[] _propertyELResolvers = new ELResolver[2];
+  private ELResolver[] _allELResolvers = new ELResolver[2];
+
+  private int _rootELResolverCount = 0;
+  private int _propertyELResolverCount = 0;
+  private int _allELResolverCount = 0;
+
+  public DemuxCompositeELResolver(ELResolverChainType chainType)
+  {
+    if (chainType == null)
+      throw new NullPointerException();
+    
+    _chainType = chainType;
+  }
+  
+  public ELResolverChainType getChainType()
+  {
+    return _chainType;
+  }
+  
+  private void _addAllELResolver(ELResolver elResolver)
+  {
+    if (elResolver == null)
+      throw new NullPointerException();
+    
+    // grow array, if necessary
+    if (_allELResolverCount == _allELResolvers.length)
+    {
+      ELResolver[] biggerResolvers = new ELResolver[_allELResolverCount * 2];
+      System.arraycopy(_allELResolvers, 0, biggerResolvers, 0, _allELResolverCount);
+      _allELResolvers = biggerResolvers;
+    }
+    
+    // assign new resolver to end
+    _allELResolvers[_allELResolverCount] = elResolver;
+    _allELResolverCount++;    
+  }
+
+  private void _addRootELResolver(ELResolver elResolver)
+  {
+    if (elResolver == null)
+      throw new NullPointerException();
+    
+    // grow array, if necessary
+    if (_rootELResolverCount == _rootELResolvers.length)
+    {
+      ELResolver[] biggerResolvers = new ELResolver[_rootELResolverCount * 2];
+      System.arraycopy(_rootELResolvers, 0, biggerResolvers, 0, _rootELResolverCount);
+      _rootELResolvers = biggerResolvers;
+    }
+    
+    // assign new resolver to end
+    _rootELResolvers[_rootELResolverCount] = elResolver;
+    _rootELResolverCount++;    
+  }
+  
+  public void _addPropertyELResolver(ELResolver elResolver)
+  {
+    if (elResolver == null)
+      throw new NullPointerException();
+    
+    // grow array, if necessary
+    if (_propertyELResolverCount == _propertyELResolvers.length)
+    {
+      ELResolver[] biggerResolvers = new ELResolver[_propertyELResolverCount * 2];
+      System.arraycopy(_propertyELResolvers, 0, biggerResolvers, 0, _propertyELResolverCount);
+      _propertyELResolvers = biggerResolvers;
+    }
+    
+    // assign new resolver to end
+    _propertyELResolvers[_propertyELResolverCount] = elResolver;
+    _propertyELResolverCount++;
+  }
+
+  public void addRootELResolver(ELResolver elResolver)
+  {
+    // pass ELResolver to CompositeELResolver so that J2EE6 invoke() method works.  Once we can
+    // have a compile dependency on J2EE6, we can override invoke() ourselves and remove this.
+    super.add(elResolver);
+    
+    _addRootELResolver(elResolver);
+    _addAllELResolver(elResolver);
+  }
+
+  public void addPropertyELResolver(ELResolver elResolver)
+  {
+    // pass ELResolver to CompositeELResolver so that J2EE6 invoke() method works.  Once we can
+    // have a compile dependency on J2EE6, we can override invoke() ourselves and remove this.
+    super.add(elResolver);
+    
+    _addPropertyELResolver(elResolver);
+    _addAllELResolver(elResolver);
+  }
+  
+  public void add(ELResolver elResolver)
+  {
+    // pass ELResolver to CompositeELResolver so that J2EE6 invoke() method works.  Once we can
+    // have a compile dependency on J2EE6, we can override invoke() ourselves and remove this.
+    super.add(elResolver);
+
+    _addRootELResolver(elResolver);
+    _addPropertyELResolver(elResolver);
+    _addAllELResolver(elResolver);
+  }
+
+  private Object _getValue(
+    int resolverCount,
+    ELResolver[] resolvers,
+    ELContext context,
+    Object base,
+    Object property) throws ELException
+  {
+    for (int i = 0; i < resolverCount; i++)
+    {
+      Object result = resolvers[i].getValue(context, base, property);
+      
+      if (context.isPropertyResolved())
+        return result;
+    }
+    
+    return null;
+  }
+  
+  public Object getValue(ELContext context, Object base, Object property) throws ELException
+  {
+    context.setPropertyResolved(false);
+    
+    int resolverCount;
+    ELResolver[] resolvers;
+    
+    if (base == null)
+    {
+      resolverCount = _rootELResolverCount;
+      resolvers     = _rootELResolvers;
+    }
+    else
+    {
+      resolverCount = _propertyELResolverCount;
+      resolvers     = _propertyELResolvers;
+    }
+    
+    return _getValue(resolverCount, resolvers, context, base, property);      
+  }
+
+  private Class<?> _getType(
+    int resolverCount,
+    ELResolver[] resolvers,
+    ELContext context,
+    Object base,
+    Object property) throws ELException
+  {
+    for (int i = 0; i < resolverCount; i++)
+    {
+      Class<?> type = resolvers[i].getType(context, base, property);
+      
+      if (context.isPropertyResolved())
+        return type;
+    }
+    
+    return null;
+  }
+
+  public Class<?> getType(ELContext context, Object base, Object property) throws ELException
+  {
+    context.setPropertyResolved(false);
+
+    int resolverCount;
+    ELResolver[] resolvers;
+    
+    if (base == null)
+    {
+      resolverCount = _rootELResolverCount;
+      resolvers     = _rootELResolvers;
+    }
+    else
+    {
+      resolverCount = _propertyELResolverCount;
+      resolvers     = _propertyELResolvers;
+    }
+    
+    return _getType(resolverCount, resolvers, context, base, property);      
+  }
+
+  private void _setValue(
+    int resolverCount,
+    ELResolver[] resolvers,
+    ELContext context,
+    Object base,
+    Object property,
+    Object val) throws ELException
+  {
+    for (int i = 0; i < resolverCount; i++)
+    {
+      resolvers[i].setValue(context, base, property, val);
+      
+      if (context.isPropertyResolved())
+        return;
+    }
+  }
+
+  public void setValue(ELContext context, Object base, Object property, Object val)
+    throws ELException
+  {
+    context.setPropertyResolved(false);
+
+    int resolverCount;
+    ELResolver[] resolvers;
+    
+    if (base == null)
+    {
+      resolverCount = _rootELResolverCount;
+      resolvers     = _rootELResolvers;
+    }
+    else
+    {
+      resolverCount = _propertyELResolverCount;
+      resolvers     = _propertyELResolvers;
+    }
+
+    _setValue(resolverCount, resolvers, context, base, property, val);          
+  }
+  
+  private boolean _isReadOnly(
+    int resolverCount,
+    ELResolver[] resolvers,
+    ELContext context,
+    Object base,
+    Object property) throws ELException
+  {
+    for (int i = 0; i < resolverCount; i++)
+    {
+      boolean isReadOnly = resolvers[i].isReadOnly(context, base, property);
+      
+      if (context.isPropertyResolved())
+        return isReadOnly;
+    }
+    
+    return false;        
+  }
+
+  @Override
+  public boolean isReadOnly(ELContext context, Object base, Object property)
+    throws ELException
+  {
+    context.setPropertyResolved(false);
+
+    int resolverCount;
+    ELResolver[] resolvers;
+    
+    if (base == null)
+    {
+      resolverCount = _rootELResolverCount;
+      resolvers     = _rootELResolvers;
+    }
+    else
+    {
+      resolverCount = _propertyELResolverCount;
+      resolvers     = _propertyELResolvers;
+    }
+
+    return _isReadOnly(resolverCount, resolvers, context, base, property);      
+  }
+  
+  public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base)
+  {
+    return new DescriptorIterator(context, base, _allELResolvers, _allELResolverCount);
+  }
+  
+  private final static class DescriptorIterator implements Iterator<FeatureDescriptor>
+  {
+    // snapshot the ELResolver array to avoid using a non-static inner class that needs to
+    // make function calls
+    public DescriptorIterator(
+      ELContext context,
+      Object base,
+      ELResolver[] resolvers,
+      int resolverCount)
+    {
+      _context       = context;
+      _base          = base;
+      _resolvers     = resolvers;
+      _resolverCount = resolverCount;
+    }
+   
+    public boolean hasNext()
+    {
+      do
+      {
+          // A null return does *not* mean hasNext() should return false.
+        Iterator<FeatureDescriptor> currIterator = _getCurrIterator();
+
+        if (null != currIterator) {
+            if (currIterator.hasNext()) {
+                return true;
+            } else {
+                _currIterator = null;
+                _currResolverIndex++;
+            }
+        } else {
+            if (_currResolverIndex < _resolverCount) {
+                continue;
+            } else {
+                return false;
+            }
+        }
+      
+      } while (true);
+    }
+    
+    private Iterator<FeatureDescriptor> _getCurrIterator()
+    {
+      Iterator<FeatureDescriptor> currIterator = _currIterator;
+      
+      if (currIterator == null)
+      {
+        if (_currResolverIndex < _resolverCount)
+        {
+          currIterator = _resolvers[_currResolverIndex].getFeatureDescriptors(_context, _base);
+          _currResolverIndex++;
+          _currIterator = currIterator;
+        }
+      }
+      
+      return currIterator;
+    }
+
+    public FeatureDescriptor next()
+    {
+      if (hasNext())
+        return _getCurrIterator().next();
+      else
+        throw new NoSuchElementException();    
+    }
+
+    public void remove()
+    {
+      throw new UnsupportedOperationException();
+    }
+    
+    private final ELContext _context;
+    private final Object    _base;
+    private final ELResolver[] _resolvers;
+    private final int _resolverCount;
+    private int _currResolverIndex;
+    private Iterator<FeatureDescriptor> _currIterator;
+  }
+    
+  public Class<?> getCommonPropertyType(ELContext context, Object base)
+  {
+    return null;
+  }
+}
+
diff --git a/com/sun/faces/el/DummyPropertyResolverImpl.java b/com/sun/faces/el/DummyPropertyResolverImpl.java
new file mode 100644
index 0000000..975c9b9
--- /dev/null
+++ b/com/sun/faces/el/DummyPropertyResolverImpl.java
@@ -0,0 +1,115 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyNotFoundException;
+import javax.faces.el.PropertyResolver;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * Default propertyResolver implementation that gets the ELContext from the 
+ * argument FacesContext and calls setPropertyResolved(false) on it. This is
+ * provided to ensure that the legacy property resolvers continue to work with
+ * unfied EL API
+ */
+ at SuppressWarnings("deprecation")
+public class DummyPropertyResolverImpl extends PropertyResolver {
+    
+    public Object getValue(Object base, Object property)
+        throws EvaluationException, PropertyNotFoundException {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getELContext().setPropertyResolved(false);
+        return null;
+    }
+
+
+    public Object getValue(Object base, int index)
+        throws EvaluationException, PropertyNotFoundException {
+       FacesContext context = FacesContext.getCurrentInstance();
+       context.getELContext().setPropertyResolved(false);
+       return null;         
+    }
+
+
+    public void setValue(Object base, Object property, Object value)
+        throws EvaluationException, PropertyNotFoundException {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getELContext().setPropertyResolved(false);
+    }
+
+    public void setValue(Object base, int index, Object value)
+        throws EvaluationException, PropertyNotFoundException {
+       FacesContext context = FacesContext.getCurrentInstance();
+       context.getELContext().setPropertyResolved(false);
+    }
+
+    public boolean isReadOnly(Object base, Object property)
+        throws EvaluationException, PropertyNotFoundException {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getELContext().setPropertyResolved(false);        
+        return false;
+    }
+
+    public boolean isReadOnly(Object base, int index)
+        throws EvaluationException, PropertyNotFoundException {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getELContext().setPropertyResolved(false);        
+        return false;        
+    }
+
+
+    public Class getType(Object base, Object property)
+        throws EvaluationException, PropertyNotFoundException {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getELContext().setPropertyResolved(false);        
+        return null;         
+    }
+
+    public Class getType(Object base, int index)
+        throws EvaluationException, PropertyNotFoundException {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getELContext().setPropertyResolved(false);        
+        return null;
+    }
+    
+}
diff --git a/com/sun/faces/el/ELConstants.java b/com/sun/faces/el/ELConstants.java
new file mode 100644
index 0000000..4a53e4a
--- /dev/null
+++ b/com/sun/faces/el/ELConstants.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+/**
+ * @author jhook
+ */
+public interface ELConstants {
+    public static final int APPLICATION = 0;
+
+    public static final int APPLICATION_SCOPE = 1;
+
+    public static final int COMPOSITE_COMPONENT = 2;
+
+    public static final int COMPONENT = 3;
+
+    public static final int COOKIE = 4;
+
+    public static final int FACES_CONTEXT = 5;
+
+    public static final int FLASH = 6;
+
+    public static final int FACES_FLOW = 7;
+
+    public static final int HEADER = 8;
+
+    public static final int HEADER_VALUES = 9;
+
+    public static final int INIT_PARAM = 10;
+
+    public static final int PARAM = 11;
+
+    public static final int PARAM_VALUES = 12;
+
+    public static final int REQUEST = 13;
+
+    public static final int REQUEST_SCOPE = 14;
+
+    public static final int RESOURCE = 15;
+
+    public static final int SESSION = 16;
+
+    public static final int SESSION_SCOPE = 17;
+
+    public static final int VIEW = 18;
+
+    public static final int VIEW_SCOPE = 19;
+    
+    
+}
diff --git a/com/sun/faces/el/ELContextImpl.java b/com/sun/faces/el/ELContextImpl.java
new file mode 100644
index 0000000..c24da92
--- /dev/null
+++ b/com/sun/faces/el/ELContextImpl.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.FunctionMapper;
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import java.util.Map;
+import java.util.HashMap;
+import java.lang.reflect.Method;
+
+/**
+ * Concrete implementation of {@link javax.el.ELContext}.
+ * ELContext's constructor is protected to control creation of ELContext
+ * objects through their appropriate factory methods.  This version of
+ * ELContext forces construction through FacesContextImpl.
+ *
+ */
+public class ELContextImpl extends ELContext {
+    
+    private FunctionMapper functionMapper = new NoopFunctionMapper();
+    private VariableMapper variableMapper;
+    private ELResolver resolver;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Constructs a new ELContext associated with the given ELResolver.
+     * @param resolver the ELResolver to return from {@link #getELResolver()} 
+     */
+    public ELContextImpl(ELResolver resolver) {
+        this.resolver = resolver;
+    }
+
+
+    // -------------------------------------------------- Methods from ELContext
+
+
+    public FunctionMapper getFunctionMapper() {        
+        return functionMapper;
+    }
+
+    public VariableMapper getVariableMapper() {
+        if (variableMapper == null) {
+            variableMapper = new VariableMapperImpl();
+        }
+        return variableMapper;
+    }
+
+    public ELResolver getELResolver() {
+        return resolver;
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void setFunctionMapper(FunctionMapper functionMapper) {
+
+        this.functionMapper = functionMapper;
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class VariableMapperImpl extends VariableMapper {
+
+        private Map<String,ValueExpression> variables;
+
+        public VariableMapperImpl() {
+
+            //noinspection CollectionWithoutInitialCapacity
+            variables = new HashMap<String,ValueExpression>();
+
+        }
+
+        public ValueExpression resolveVariable(String s) {
+            return variables.get(s);
+        }
+
+        public ValueExpression setVariable(String s, ValueExpression valueExpression) {
+            return (variables.put(s, valueExpression));
+        }
+    }
+
+
+    private static class NoopFunctionMapper extends FunctionMapper {
+
+        public Method resolveFunction(String s, String s1) {
+            return null;
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/el/ELContextListenerImpl.java b/com/sun/faces/el/ELContextListenerImpl.java
new file mode 100644
index 0000000..9da8446
--- /dev/null
+++ b/com/sun/faces/el/ELContextListenerImpl.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.faces.context.FacesContext;
+import javax.el.ELContext;
+import javax.el.ELContextListener;
+import javax.el.ELContextEvent;
+
+public class ELContextListenerImpl implements ELContextListener {
+    
+    public ELContextListenerImpl() {
+    }
+    
+    /**
+     * Invoked when a new <code>ELContext</code> has been created.
+     *
+     * @param ece the notification event.
+     */
+    public void contextCreated(ELContextEvent ece) {
+        
+        
+        FacesContext context = FacesContext.getCurrentInstance();
+        if ( context == null) {
+            return;
+        }
+        ELContext source = (ELContext)ece.getSource();
+        // Register FacesContext with JSP
+        source.putContext(FacesContext.class, context);
+        
+        // dispatch the event to any JSF applications interested in
+        // the event.
+        ELContextListener[] listeners = 
+            context.getApplication().getELContextListeners();
+        if ( listeners == null) {
+            return;
+        }
+        for (int i = 0; i < listeners.length; ++i) {
+            ELContextListener elcl = listeners[i];
+            elcl.contextCreated(new ELContextEvent(source));
+        }
+    }
+    
+}
diff --git a/com/sun/faces/el/ELUtils.java b/com/sun/faces/el/ELUtils.java
new file mode 100644
index 0000000..d7a1a84
--- /dev/null
+++ b/com/sun/faces/el/ELUtils.java
@@ -0,0 +1,840 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.context.flash.FlashELResolver;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.util.MessageUtils;
+
+import com.sun.faces.util.ReflectionUtils;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.el.ArrayELResolver;
+import javax.el.BeanELResolver;
+import javax.el.CompositeELResolver;
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.ListELResolver;
+import javax.el.MapELResolver;
+import javax.el.ResourceBundleELResolver;
+import javax.el.ValueExpression;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.ReferenceSyntaxException;
+import javax.faces.el.VariableResolver;
+import javax.faces.component.UIViewRoot;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.el.ExpressionFactory;
+
+/**
+ * <p>Utility class for EL related methods.</p>
+ */
+public class ELUtils {
+
+    /**
+     * Helps to determine if a EL expression represents a composite component
+     * EL expression.
+     */
+    private static final Pattern COMPOSITE_COMPONENT_EXPRESSION =
+          Pattern.compile(".(?:[ ]+|[\\[{,(])cc[.].+[}]");
+
+    /**
+     * Used to determine if EL method arguments are being passed to a
+     * composite component lookup expression.
+     *
+     * For example:
+     *
+     *    #{cc.attrs.label('foo')}
+     *
+     * is illegal, while:
+     *
+     *    #{cc.attrs.bean.label('foo')}
+     *
+     * is legal.
+     */
+    private static final Pattern COMPOSITE_COMPONENT_LOOKUP_WITH_ARGS =
+          Pattern.compile("(?:[ ]+|[\\[{,(])cc[.]attrs[.]\\w+[(].+[)]");
+
+
+    /**
+     * Use to determine if an expression being considered as a
+     * MethodExpression is a simple lookup (i.e. #{cc.attrs.myaction}).
+     */
+    private static final Pattern METHOD_EXPRESSION_LOOKUP =
+          Pattern.compile(".[{]cc[.]attrs[.]\\w+[}]");
+
+    private static final String APPLICATION_SCOPE = "applicationScope";
+    private static final String SESSION_SCOPE = "sessionScope";
+    private static final String REQUEST_SCOPE = "requestScope";
+    private static final String VIEW_SCOPE = "viewScope";
+    private static final String COOKIE_IMPLICIT_OBJ = "cookie";
+    private static final String FACES_CONTEXT_IMPLICIT_OBJ = "facesContext";
+    private static final String HEADER_IMPLICIT_OBJ = "header";
+    private static final String HEADER_VALUES_IMPLICIT_OBJ = "headerValues";
+    private static final String INIT_PARAM_IMPLICIT_OBJ = "initParam";
+    private static final String PARAM_IMPLICIT_OBJ = "param";
+    private static final String PARAM_VALUES_IMPLICIT_OBJ = "paramValues";
+    private static final String VIEW_IMPLICIT_OBJ = "view";
+
+    public enum Scope {
+        NONE("none"),
+        REQUEST("request"),
+        VIEW("view"),
+        SESSION("session"),
+        APPLICATION("application");
+
+        String scope;
+        Scope(String scope) {
+            this.scope = scope;
+        }
+
+        public String toString() {
+            return scope;
+        }
+
+    }
+
+    public static final ArrayELResolver ARRAY_RESOLVER = new ArrayELResolver();
+
+    public static final BeanELResolver BEAN_RESOLVER = new BeanELResolver();
+
+    public static final FacesResourceBundleELResolver FACES_BUNDLE_RESOLVER =
+        new FacesResourceBundleELResolver();
+
+    public static final ImplicitObjectELResolverForJsp IMPLICIT_JSP_RESOLVER =
+        new ImplicitObjectELResolverForJsp();
+
+    public static final ImplicitObjectELResolver IMPLICIT_RESOLVER =
+        new ImplicitObjectELResolver();
+    
+    public static final FlashELResolver FLASH_RESOLVER = 
+        new FlashELResolver();
+
+    public static final ListELResolver LIST_RESOLVER = new ListELResolver();
+
+    public static final ManagedBeanELResolver MANAGED_BEAN_RESOLVER =
+        new ManagedBeanELResolver();
+
+    public static final MapELResolver MAP_RESOLVER = new MapELResolver();
+
+    public static final ResourceBundleELResolver BUNDLE_RESOLVER =
+        new ResourceBundleELResolver();
+
+    public static final ScopedAttributeELResolver SCOPED_RESOLVER =
+        new ScopedAttributeELResolver();
+
+    public static final ResourceELResolver RESOURCE_RESOLVER =
+          new ResourceELResolver();
+
+    public static final CompositeComponentAttributesELResolver COMPOSITE_COMPONENT_ATTRIBUTES_EL_RESOLVER =
+          new CompositeComponentAttributesELResolver();
+
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private ELUtils() {
+
+        throw new IllegalStateException();
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public static boolean isCompositeComponentExpr(String expression) {
+
+        // TODO we should be trying to re-use the Matcher by calling
+        // m.reset(expression);
+        Matcher m = COMPOSITE_COMPONENT_EXPRESSION.matcher(expression);
+        return m.find();
+
+    }
+
+
+    public static boolean isCompositeComponentMethodExprLookup(String expression) {
+
+        Matcher m = METHOD_EXPRESSION_LOOKUP.matcher(expression);
+        return m.matches();
+
+    }
+
+
+    public static boolean isCompositeComponentLookupWithArgs(String expression) {
+
+        // TODO we should be trying to re-use the Matcher by calling
+        // m.reset(expression);
+        Matcher m = COMPOSITE_COMPONENT_LOOKUP_WITH_ARGS.matcher(expression);
+        return m.find();
+        
+    }
+
+
+    /**
+     * <p>Create the <code>ELResolver</code> chain for programmatic EL calls.</p>
+     * @param composite a <code>CompositeELResolver</code>
+     * @param associate our ApplicationAssociate
+     */
+    public static void buildFacesResolver(FacesCompositeELResolver composite,
+                                          ApplicationAssociate associate) {
+
+        if (associate == null) {
+            String message = MessageUtils.getExceptionMessageString
+                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "associate");
+            throw new NullPointerException(message);
+        }
+
+        if (composite == null) {
+            String message = MessageUtils.getExceptionMessageString
+                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "composite");
+            throw new NullPointerException(message);
+        }
+
+        composite.addRootELResolver(IMPLICIT_RESOLVER);
+        composite.add(FLASH_RESOLVER);
+        composite.addPropertyELResolver(COMPOSITE_COMPONENT_ATTRIBUTES_EL_RESOLVER);
+        addELResolvers(composite, associate.getELResolversFromFacesConfig());
+        addVariableResolvers(composite, FacesCompositeELResolver.ELResolverChainType.Faces,
+                associate);
+        addPropertyResolvers(composite, associate);
+        composite.add(associate.getApplicationELResolvers());
+        composite.addRootELResolver(MANAGED_BEAN_RESOLVER);
+        composite.addPropertyELResolver(RESOURCE_RESOLVER);
+        composite.addPropertyELResolver(BUNDLE_RESOLVER);
+        composite.addRootELResolver(FACES_BUNDLE_RESOLVER);
+        addEL3_0_Resolvers(composite, associate);
+        composite.addPropertyELResolver(MAP_RESOLVER);
+        composite.addPropertyELResolver(LIST_RESOLVER);
+        composite.addPropertyELResolver(ARRAY_RESOLVER);
+        composite.addPropertyELResolver(BEAN_RESOLVER);
+        composite.addRootELResolver(SCOPED_RESOLVER);
+
+    }
+    
+    private static void addEL3_0_Resolvers(FacesCompositeELResolver composite, 
+            ApplicationAssociate associate) {
+        ExpressionFactory ef = associate.getExpressionFactory();
+        Method getStreamELResolverMethod = ReflectionUtils.lookupMethod(ExpressionFactory.class, 
+                "getStreamELResolver", RIConstants.EMPTY_CLASS_ARGS);
+        if (null != getStreamELResolverMethod) {
+            try {
+                ELResolver streamELResolver = (ELResolver) 
+                        getStreamELResolverMethod.invoke(ef, (Object[]) null);
+                composite.addRootELResolver(streamELResolver);
+                // Assume that if we have getStreamELResolver, then we must have
+                // javax.el.staticFieldELResolver
+                composite.addRootELResolver((ELResolver)
+                        ReflectionUtils.newInstance("javax.el.StaticFieldELResolver"));
+                
+            } catch (Throwable t) {
+                // This is normal on containers that do not have these ELResolvers
+            }
+        }
+    }
+
+
+    /**
+     * <p>Create the <code>ELResolver</code> chain for JSP.</p>
+     * @param composite a <code>CompositeELResolver</code>
+     * @param associate our ApplicationAssociate
+     */
+    public static void buildJSPResolver(FacesCompositeELResolver composite,
+                                        ApplicationAssociate associate) {
+
+        if (associate == null) {
+            String message = MessageUtils.getExceptionMessageString
+                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "associate");
+            throw new NullPointerException(message);
+        }
+
+        if (composite == null) {
+            String message = MessageUtils.getExceptionMessageString
+                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "composite");
+            throw new NullPointerException(message);
+        }
+
+        composite.addRootELResolver(IMPLICIT_JSP_RESOLVER);
+        composite.add(FLASH_RESOLVER);
+        composite.addRootELResolver(MANAGED_BEAN_RESOLVER);
+        composite.addPropertyELResolver(RESOURCE_RESOLVER);
+        composite.addRootELResolver(FACES_BUNDLE_RESOLVER);
+        addELResolvers(composite, associate.getELResolversFromFacesConfig());
+        addVariableResolvers(composite, FacesCompositeELResolver.ELResolverChainType.JSP,
+	                associate);
+        addPropertyResolvers(composite, associate);
+        composite.add(associate.getApplicationELResolvers());
+
+    }
+
+
+    public static Object evaluateValueExpression(ValueExpression expression,
+                                                 ELContext elContext) {
+
+           if (expression.isLiteralText()) {
+               return expression.getExpressionString();
+           } else {
+               return expression.getValue(elContext);
+           }
+
+       }
+
+
+    /**
+     * @param associate the <code>ApplicationAssociate</code>
+     * @param provideDefault whether or not to return a
+     *  <code>DummpyPropertyResolverImpl</code>
+     * @return the <code>PropertyResolver</code>s set via
+     *  {@link javax.faces.application.Application#setPropertyResolver(javax.faces.el.PropertyResolver)}
+     *  or, if that is <code>null</code>, return the <code>PropertyResolver</code>
+     *  chain from the parsed configuration resources.  If either of those are
+     *  null, and <code>provideDefault</code> is <code>true</code>,
+     *  return the <code>DummyPropertyResolverImpl</code>.
+     */
+    @SuppressWarnings("deprecation")
+    public static PropertyResolver getDelegatePR(ApplicationAssociate associate,
+                                                 boolean provideDefault)  {
+
+        PropertyResolver pr = associate.getLegacyPropertyResolver();
+        if (pr == null) {
+            pr = associate.getLegacyPRChainHead();
+            if (pr == null && provideDefault) {
+                pr = new DummyPropertyResolverImpl();
+            }
+        }
+
+        return pr;
+
+    }
+
+
+    /**
+     * @param associate the <code>ApplicationAssociate</code>
+     * @param provideDefault whether or not to return a
+     *  <code>DummpyPropertyResolverImpl</code>
+     * @return the <code>VariableResolver</code>s set via
+     *  {@link javax.faces.application.Application#setVariableResolver(javax.faces.el.VariableResolver)}
+     *  or, if that is <code>null</code>, return the <code>VariableResolver</code>
+     *  chain from the parsed configuration resources.  If either of those are
+     *  null, , and <code>provideDefault</code> is <code>true</code>,
+     *  return the <code>ChainAwareVariableResolver</code>.
+     */
+    @SuppressWarnings("deprecation")
+    public static VariableResolver getDelegateVR(ApplicationAssociate associate,
+                                                 boolean provideDefault) {
+
+        VariableResolver vr = associate.getLegacyVariableResolver();
+        if (vr == null) {
+            vr = associate.getLegacyVRChainHead();
+            if (vr == null && provideDefault) {
+                vr = new ChainAwareVariableResolver();
+            }
+        }
+
+        return vr;
+
+    }
+
+
+    /**
+     * @param expressionString the expression string, with delimiters
+     *                         intact.
+     * @return a List of expressions from the expressionString
+     * @throws ReferenceSyntaxException if the expression string is invalid
+     */
+    @SuppressWarnings("deprecation")
+    public static List<String> getExpressionsFromString(String expressionString)
+    throws ReferenceSyntaxException {
+
+        if (null == expressionString) {
+            return Collections.emptyList();
+        }
+        //noinspection CollectionWithoutInitialCapacity
+        List<String> result = new ArrayList<String>();
+        int i, j, len = expressionString.length(), cur = 0;
+        while (cur < len &&
+             -1 != (i = expressionString.indexOf("#{", cur))) {
+            if (-1 == (j = expressionString.indexOf('}', i + 2))) {
+                throw new ReferenceSyntaxException(
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.INVALID_EXPRESSION_ID,
+                          expressionString));
+            }
+            cur = j + 1;
+            result.add(expressionString.substring(i, cur));
+        }
+        return result;
+
+    }
+        
+
+    /**
+     * <p>This method is used by the ManagedBeanFactory to ensure that
+     * properties set by an expression point to an object with an
+     * accepted lifespan.</p>
+     *
+     * <p>get the scope of the expression. Return <code>null</code> if
+     * it isn't scoped</p>
+     *
+     * <p>For example, the expression:
+     * <code>sessionScope.TestBean.one</code> should return "session"
+     * as the scope.</p>
+     *
+     * @param valueBinding the expression
+     *
+     * @param outString an allocated String Array into which we put the
+     * first segment.
+     *
+     * @return the scope of the expression
+     *
+     * @throws ReferenceSyntaxException if valueBinding is syntactically invalid
+     */
+    @SuppressWarnings("deprecation")
+    public static ELUtils.Scope getScope(String valueBinding, String[] outString)
+         throws ReferenceSyntaxException {
+
+        if (valueBinding == null || 0 == valueBinding.length()) {
+            return null;
+        }
+        valueBinding = stripBracketsIfNecessary(valueBinding);
+
+        int segmentIndex = getFirstSegmentIndex(valueBinding);
+
+        //examine first segment and see if it is a scope
+        String identifier = valueBinding;
+
+        if (segmentIndex > 0) {
+            //get first segment designated by a "." or "["
+            identifier = valueBinding.substring(0, segmentIndex);
+        }
+
+        //check to see if the identifier is a named scope.
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        ExternalContext ec = context.getExternalContext();
+
+        if (null != outString) {
+            outString[0] = identifier;
+        }
+        if (REQUEST_SCOPE.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+        if (VIEW_SCOPE.equalsIgnoreCase(identifier)) {
+            return Scope.VIEW;
+        }
+        if (SESSION_SCOPE.equalsIgnoreCase(identifier)) {
+            return Scope.SESSION;
+        }
+        if (APPLICATION_SCOPE.equalsIgnoreCase(identifier)) {
+            return Scope.APPLICATION;
+        }
+
+        // handle implicit objects
+        if (INIT_PARAM_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.APPLICATION;
+        }
+        if (COOKIE_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+        if (FACES_CONTEXT_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+        if (HEADER_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+        if (HEADER_VALUES_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+        if (PARAM_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+        if (PARAM_VALUES_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+        if (VIEW_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
+            return Scope.REQUEST;
+        }
+
+        Map<String,Object> requestMap = ec.getRequestMap();
+        if (requestMap != null && requestMap.containsKey(identifier)) {
+            return Scope.REQUEST;
+        }
+
+        UIViewRoot root = context.getViewRoot();
+        if (root != null) {
+            Map<String, Object> viewMap = root.getViewMap(false);
+            if (viewMap != null && viewMap.containsKey(identifier)) {
+                return Scope.VIEW;
+            }
+        }
+
+        Map<String,Object> sessionMap = ec.getSessionMap();
+        if (sessionMap != null && sessionMap.containsKey(identifier)) {
+            return Scope.SESSION;
+        }
+
+        Map<String,Object> appMap = ec.getApplicationMap();
+        if (appMap != null && appMap.containsKey(identifier)) {
+            return Scope.APPLICATION;
+        }
+       
+        //not present in any scope
+        return null;
+
+    }
+
+
+    /**
+     * Create a <code>ValueExpression</code> with the expected type of
+     * <code>Object.class</code>
+     * @param expression an EL expression
+     * @return a new <code>ValueExpression</code> instance based off the
+     *  provided <code>valueRef</code>
+     */
+    public static ValueExpression createValueExpression(String expression) {
+
+       return createValueExpression(expression, Object.class);
+
+    }
+
+
+    public static ValueExpression createValueExpression(String expression,
+                                                        Class<?> expectedType) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        return context.getApplication().getExpressionFactory().
+            createValueExpression(context.getELContext(),
+                                  expression,
+                                  expectedType);
+    }
+
+
+    public static Object coerce(Object value, Class<?> toType) {
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        return context.getApplication().getExpressionFactory().coerceToType(value, toType);
+
+    }
+
+
+    public static Scope getScope(String scope) {
+
+        for (Scope s : Scope.values()) {
+            if (s.toString().equals(scope)) {
+                return s;
+            }
+        }
+        return null;
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Add the <code>ELResolvers</code> from the provided list
+     * to the target <code>CompositeELResolver</code>.</p>
+     *
+     * @param target the <code>CompositeELResolver</code> to which
+     *  the <code>ELResolver</code>s will be added.
+     * @param resolvers a <code>List</code> of <code>ELResolver</code>s
+     */
+    private static void addELResolvers(CompositeELResolver target,
+                                       List<ELResolver> resolvers) {
+
+        if (resolvers != null && !resolvers.isEmpty()) {
+            for (ELResolver resolver : resolvers) {
+                target.add(resolver);
+            }
+        }
+
+    }
+
+
+    /**
+     * <p>Add any <code>PropertyResolver</code>s to the specified
+     * <code>CompositeELResolver</code>.</p>
+     * @param target the <code>CompositeELResolver</code> to which
+     *  the <code>PropertyResolver</code>s will be added.
+     * @param associate our ApplicationAssociate
+     */
+    @SuppressWarnings("deprecation")
+    private static void addPropertyResolvers(CompositeELResolver target,
+                                             ApplicationAssociate associate) {
+
+        PropertyResolver pr = getDelegatePR(associate, false);
+        if (pr != null) {
+            target.add(new PropertyResolverChainWrapper(pr));
+        }
+
+    }
+
+
+    /**
+     * <p>Add any <code>VariableResolver</code>s to the specified
+     * <code>CompositeELResolver</code>.</p>
+     * @param target the <code>CompositeELResolver</code> to which
+     *  the <code>VariableResolver</code>s will be added.
+     * @param associate our ApplicationAssociate
+     */
+    @SuppressWarnings("deprecation")
+    private static void addVariableResolvers(FacesCompositeELResolver target,
+                                             FacesCompositeELResolver.ELResolverChainType chainType,
+                                             ApplicationAssociate associate) {
+
+        VariableResolver vr = getDelegateVR(associate, true);
+        if (vr != null) {
+            VariableResolverChainWrapper vrChainWrapper = new VariableResolverChainWrapper(vr);
+            target.addRootELResolver(vrChainWrapper);
+            if (chainType == FacesCompositeELResolver.ELResolverChainType.JSP) {
+                associate.setLegacyVRChainHeadWrapperForJsp(vrChainWrapper);
+            } else {
+                associate.setLegacyVRChainHeadWrapperForFaces(vrChainWrapper);
+            }
+        }
+
+    }
+
+
+    /**
+     * <p/>
+     * The the first segment of a String tokenized by a "." or "["
+     *
+     * @param valueBinding the expression from which the first segment
+     *  will be obtained
+     * @return index of the first occurrence of . or [
+     */
+    private static int getFirstSegmentIndex(String valueBinding) {
+
+        int segmentIndex = valueBinding.indexOf('.');
+        int bracketIndex = valueBinding.indexOf('[');
+
+        //there is no "." in the valueBinding so take the bracket value
+        if (segmentIndex < 0) {
+            segmentIndex = bracketIndex;
+        } else {
+            //if there is a bracket proceed
+            if (bracketIndex > 0) {
+                //if the bracket index is before the "." then
+                //get the bracket index
+                if (segmentIndex > bracketIndex) {
+                    segmentIndex = bracketIndex;
+                }
+            }
+        }
+        return segmentIndex;
+
+    }
+
+
+    @SuppressWarnings("deprecation")
+    private static String stripBracketsIfNecessary(String expression)
+    throws ReferenceSyntaxException {
+
+        assert (null != expression);
+
+        // look for invalid expressions
+        if (expression.charAt(0) == '#') {
+            if (expression.charAt(1) != '{') {
+                throw new ReferenceSyntaxException(MessageUtils.getExceptionMessageString(
+                    MessageUtils.INVALID_EXPRESSION_ID,
+                    expression));
+            }
+            int len = expression.length();
+            if (expression.charAt(len - 1) != '}') {
+                throw new ReferenceSyntaxException(MessageUtils.getExceptionMessageString(
+                    MessageUtils.INVALID_EXPRESSION_ID,
+                    expression));
+            }
+            expression = expression.substring(2, len - 1);
+        }
+
+        return expression;
+
+    }
+
+
+    public static Scope getScopeForExpression(String expression) {
+
+        if (SharedUtils.isMixedExpression(expression)) {
+            return (getNarrowestScopeFromExpression(expression));
+        } else {
+            return (getScopeForSingleExpression(expression));
+        }
+
+    }
+
+
+    @SuppressWarnings("deprecation")
+    public static boolean hasValidLifespan(Scope expressionScope, Scope beanScope)
+         throws EvaluationException {
+
+        //if the managed bean's scope is "none" but the scope of the
+        //referenced object is not "none", scope is invalid
+        if (beanScope == Scope.NONE) {
+            return expressionScope == Scope.NONE;
+        }
+
+        //if the managed bean's scope is "request" it is able to refer
+        //to objects in any scope
+        if (beanScope == Scope.REQUEST) {
+            return true;
+        }
+        
+        //if the managed bean's scope is "view" it is able to refer to 
+        //objects in other "view", "session", "application" or "none" scopes.
+        if (beanScope == Scope.VIEW) {
+            return expressionScope != Scope.REQUEST;
+        }
+
+        //if the managed bean's scope is "session" it is able to refer
+        //to objects in other "session", "application", or "none" scopes
+        if (beanScope == Scope.SESSION) {
+            return !(expressionScope == Scope.REQUEST
+                     || expressionScope == Scope.VIEW);
+        }
+
+        //if the managed bean's scope is "application" it is able to refer
+        //to objects in other "application", or "none" scopes
+        if (beanScope == Scope.APPLICATION) {
+            return !(expressionScope == Scope.REQUEST
+                     || expressionScope == Scope.VIEW
+                     || expressionScope == Scope.SESSION);
+        }
+
+        //the managed bean is required to be in either "request", "view",
+        // "session", "application", or "none" scopes. One of the previous decision
+        //statements must be true.
+        //noinspection ConstantConditions
+        assert (false);
+        return false;
+    }
+
+
+    @SuppressWarnings("deprecation")
+    public static ELUtils.Scope getScopeForSingleExpression(String value)
+         throws EvaluationException {
+        String[] firstSegment = new String[1];
+        ELUtils.Scope valueScope = ELUtils.getScope(value, firstSegment);
+
+        if (null == valueScope) {
+            // Perhaps the bean hasn't been created yet.  See what its
+            // scope would be when it is created.
+            if (firstSegment[0] != null) {
+                BeanManager manager =
+                     ApplicationAssociate.getCurrentInstance().getBeanManager();
+
+                if (manager.isManaged(firstSegment[0])) {
+                    valueScope = ELUtils.getScope(manager.getBuilder(firstSegment[0]).getScope());
+                }
+            } else {
+                // we are referring to a bean that doesn't exist in the
+                // configuration file.  Give it a wide scope...
+                valueScope = Scope.APPLICATION;
+            }
+        }
+        return valueScope;
+    }
+
+
+    @SuppressWarnings("deprecation")
+    public static Scope getNarrowestScopeFromExpression(String expression)
+         throws ReferenceSyntaxException {
+        // break the argument expression up into its component
+        // expressions, ignoring literals.
+        List<String> expressions = ELUtils.getExpressionsFromString(expression);
+
+        int shortestScope = Scope.NONE.ordinal();
+        Scope result = Scope.NONE;
+        for (String expr : expressions) {
+        // loop over the expressions
+
+            Scope lScope = getScopeForSingleExpression(expr);
+            // don't consider none
+            if (null == lScope || lScope == Scope.NONE) {
+                continue;
+            }
+
+            int currentScope = lScope.ordinal();
+
+            // if we have no basis for comparison
+            if (Scope.NONE.ordinal() == shortestScope) {
+                shortestScope = currentScope;
+                result = lScope;
+            } else {
+                // we have a basis for comparison
+                if (currentScope < shortestScope) {
+                    shortestScope = currentScope;
+                    result = lScope;
+                }
+            }
+        }
+        return result;
+    }
+
+
+    public static boolean isScopeValid(String scopeName) {
+        if (scopeName == null) {
+            return false;
+        }
+        for (Scope scope : Scope.values()) {
+            if (scopeName.equals(scope.toString())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    
+}
diff --git a/com/sun/faces/el/FacesCompositeELResolver.java b/com/sun/faces/el/FacesCompositeELResolver.java
new file mode 100644
index 0000000..71897f7
--- /dev/null
+++ b/com/sun/faces/el/FacesCompositeELResolver.java
@@ -0,0 +1,71 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.el.ELResolver;
+import javax.el.CompositeELResolver;
+
+/**
+ * Maintains an ordered composite list of child <code>ELResolver for JSF</code>.
+ *
+ */
+public abstract class FacesCompositeELResolver extends CompositeELResolver
+{
+  /**
+   * <p><b>JSP</b> indicates this CompositeELResolver instance is the
+   * JSP chain, specified in section 5.6.1 of the spec.</p>
+   *
+   * <p><b>Faces</b> indicates this CompositeELResolver instance is the
+   * JSF chain, specified in section 5.6.2 of the spec.</p>
+   */
+
+  public enum ELResolverChainType {
+      JSP,
+      Faces
+  }
+
+  public abstract ELResolverChainType getChainType();
+
+  public abstract void addRootELResolver(ELResolver elResolver);
+
+  public abstract void addPropertyELResolver(ELResolver elResolver);
+}
+
diff --git a/com/sun/faces/el/FacesResourceBundleELResolver.java b/com/sun/faces/el/FacesResourceBundleELResolver.java
new file mode 100644
index 0000000..90d299c
--- /dev/null
+++ b/com/sun/faces/el/FacesResourceBundleELResolver.java
@@ -0,0 +1,215 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.ApplicationResourceBundle;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.el.PropertyNotWritableException;
+import javax.faces.application.Application;
+import javax.faces.context.FacesContext;
+import java.beans.FeatureDescriptor;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+
+/**
+ * @author edburns
+ */
+public class FacesResourceBundleELResolver extends ELResolver {
+
+    /** Creates a new instance of FacesResourceBundleELResolver */
+    public FacesResourceBundleELResolver() {
+    }
+
+    public Object getValue(ELContext context, Object base, Object property) {
+        if (null != base) {
+            return null;
+        }
+        if (null == property) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+        FacesContext facesContext = (FacesContext)
+           context.getContext(FacesContext.class);
+        Application app = facesContext.getApplication();
+
+        ResourceBundle result =
+              app.getResourceBundle(facesContext, property.toString());
+        if (null != result) {
+            context.setPropertyResolved(true);
+        }
+
+        return result;
+    }
+
+
+
+    public Class<?> getType(ELContext context, Object base, Object property)
+        throws ELException {
+
+        if (null != base) {
+            return null;
+        }
+
+        if (null == property) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+
+        FacesContext facesContext = (FacesContext)
+           context.getContext(FacesContext.class);
+        Application app = facesContext.getApplication();
+
+        ResourceBundle result =
+              app.getResourceBundle(facesContext, property.toString());
+        if (null != result) {
+            context.setPropertyResolved(true);
+            return ResourceBundle.class;
+        }
+
+        return null;
+
+    }
+
+    public void  setValue(ELContext context, Object base, Object property,
+        Object val) throws ELException {
+        String message;
+
+        if (base == null && property == null) {
+            message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+
+        FacesContext facesContext = (FacesContext)
+           context.getContext(FacesContext.class);
+        Application app = facesContext.getApplication();
+
+        ResourceBundle result =
+              app.getResourceBundle(facesContext, property.toString());
+        if (null != result) {
+            context.setPropertyResolved(true);
+            message = MessageUtils.getExceptionMessageString
+                (MessageUtils.OBJECT_IS_READONLY);
+            message = message + " base " + base + " property " + property;
+            throw new PropertyNotWritableException(message);
+        }
+
+
+    }
+
+    public boolean isReadOnly(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return false;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+        FacesContext facesContext = (FacesContext)
+           context.getContext(FacesContext.class);
+        Application app = facesContext.getApplication();
+
+        ResourceBundle result =
+              app.getResourceBundle(facesContext, property.toString());
+        if (null != result) {
+            context.setPropertyResolved(true);
+            return true;
+        }
+
+        return false;
+    }
+
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
+
+        if (base != null) {
+            return null;
+        }
+
+        ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
+
+        FacesContext facesContext =
+            (FacesContext) context.getContext(FacesContext.class);
+        ApplicationAssociate associate =
+            ApplicationAssociate.getCurrentInstance();
+        Map<String, ApplicationResourceBundle> rbMap = associate.getResourceBundles();
+        if (rbMap == null) {
+            return list.iterator();
+        }
+        // iterate over the list of managed beans
+        for (Iterator<Map.Entry<String,ApplicationResourceBundle>> i = rbMap.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry<String,ApplicationResourceBundle> entry = i.next();
+            String var = entry.getKey();
+            ApplicationResourceBundle bundle = entry.getValue();
+            if ( bundle != null) {
+                Locale curLocale = Util.getLocaleFromContextOrSystem(facesContext);
+
+                String description = bundle.getDescription(curLocale);
+                String displayName = bundle.getDisplayName(curLocale);
+
+                list.add(Util.getFeatureDescriptor(var,
+                    displayName, description, false, false, true,
+                    ResourceBundle.class, Boolean.TRUE));
+            }
+        }
+        return list.iterator();
+    }
+    
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        if (base != null) {
+            return null;
+        }
+        return String.class;
+    }
+
+}
diff --git a/com/sun/faces/el/ImplicitObjectELResolver.java b/com/sun/faces/el/ImplicitObjectELResolver.java
new file mode 100644
index 0000000..49b83f4
--- /dev/null
+++ b/com/sun/faces/el/ImplicitObjectELResolver.java
@@ -0,0 +1,317 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import java.beans.FeatureDescriptor;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.el.PropertyNotWritableException;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.component.CompositeComponentStackManager;
+import java.util.HashMap;
+import javax.faces.flow.FlowHandler;
+
+public class ImplicitObjectELResolver extends ELResolver implements ELConstants{
+
+    protected static final Map<String, Integer> IMPLICIT_OBJECTS;
+
+    static
+    {
+        String[] implictNames = new String[]{
+        "application", "applicationScope", "cc", "component", "cookie", "facesContext",
+        "flash",
+        "flowScope",
+        "header", "headerValues", "initParam", "param", "paramValues",
+        "request", "requestScope", "resource", "session", "sessionScope", 
+        "view", "viewScope" };
+        int nameCount = implictNames.length;
+
+        Map<String, Integer> implicitObjects = new HashMap<String, Integer>((int) (nameCount * 1.5f));
+
+        for (int nameIndex = 0; nameIndex < nameCount; nameIndex++) {
+            implicitObjects.put(implictNames[nameIndex], nameIndex);
+        }
+
+        IMPLICIT_OBJECTS = implicitObjects;
+  }
+
+    public ImplicitObjectELResolver() {
+    }
+
+    public Object getValue(ELContext context,Object base, Object property)
+            throws ELException {
+        // variable resolution is a special case of property resolution
+        // where the base is null.
+        if (base != null) {
+            return null;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+
+        if (index == null) {
+            return null;
+        } else {
+            FacesContext facesContext = (FacesContext) context.getContext(FacesContext.class);
+            ExternalContext extCtx = facesContext.getExternalContext();
+	            switch (index) {
+                case APPLICATION:
+                    context.setPropertyResolved(true);
+                    return extCtx.getContext();
+                case APPLICATION_SCOPE:
+                    context.setPropertyResolved(true);
+                    return extCtx.getApplicationMap();
+                case COMPOSITE_COMPONENT:
+                    // The following five lines violate the specification.
+                    // The specification states that the 'cc' implicit object
+                    // always evaluates to the current composite component,
+                    // however, this isn't desirable behavior when passing
+                    // attributes between nested composite components, so we
+                    // need to alter the behavior so that the components behave
+                    // as the user would expect.
+                    /* BEGIN DEVIATION */
+                    CompositeComponentStackManager manager =
+                          CompositeComponentStackManager.getManager(facesContext);
+                    Object o = manager.peek();
+                    /* END DEVIATION */
+                    if (o == null) {
+                        o = UIComponent.getCurrentCompositeComponent(facesContext);
+                    }
+                    context.setPropertyResolved(o != null);
+                    return o;
+                case COMPONENT:
+                    UIComponent c = UIComponent.getCurrentComponent(facesContext);
+                    context.setPropertyResolved(c != null);
+                    return c;
+                case COOKIE:
+                    context.setPropertyResolved(true);
+                    return extCtx.getRequestCookieMap();
+                case FACES_CONTEXT:
+                    context.setPropertyResolved(true);
+                    return facesContext;
+                case FLASH:
+                    context.setPropertyResolved(true);
+                    return facesContext.getExternalContext().getFlash();
+                case FACES_FLOW:
+                    FlowHandler flowHandler = facesContext.getApplication().getFlowHandler();
+                    if (null != flowHandler) {
+                        Map<Object, Object> flowScope = flowHandler.getCurrentFlowScope();
+                        if (null != flowScope) {
+                            context.setPropertyResolved(true);
+                        }
+                        return flowScope;
+                    }
+                case HEADER:
+                    context.setPropertyResolved(true);
+                    return extCtx.getRequestHeaderMap();
+                case HEADER_VALUES:
+                    context.setPropertyResolved(true);
+                    return extCtx.getRequestHeaderValuesMap();
+                case INIT_PARAM:
+                    context.setPropertyResolved(true);
+                    return extCtx.getInitParameterMap();
+                case PARAM:
+                    context.setPropertyResolved(true);
+                    return extCtx.getRequestParameterMap();
+                case PARAM_VALUES:
+                    context.setPropertyResolved(true);
+                    return extCtx.getRequestParameterValuesMap();
+                case REQUEST:
+                    context.setPropertyResolved(true);
+                    return extCtx.getRequest();
+                case REQUEST_SCOPE:
+                    context.setPropertyResolved(true);
+                    return extCtx.getRequestMap();
+                case RESOURCE:
+                    context.setPropertyResolved(true);
+                    return facesContext.getApplication().getResourceHandler();
+                case SESSION:
+                    context.setPropertyResolved(true);
+                    return extCtx.getSession(true);
+                case SESSION_SCOPE:
+                    context.setPropertyResolved(true);
+                    return extCtx.getSessionMap();
+                case VIEW:
+                    context.setPropertyResolved(true);
+                    return facesContext.getViewRoot();
+                case VIEW_SCOPE:
+                    UIViewRoot root = facesContext.getViewRoot();
+                    if (root != null) {
+                        context.setPropertyResolved(true);
+                        return facesContext.getViewRoot().getViewMap();
+                    }
+                default:
+                    return null;
+            }
+        }
+    }
+
+    public void  setValue(ELContext context, Object base, Object property,
+                          Object val) throws ELException {
+        if (base != null) {
+            return;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+        if (index != null) {
+            throw new PropertyNotWritableException((String) property);
+        }
+    }
+
+    public boolean isReadOnly(ELContext context, Object base, Object property)
+        throws ELException{
+        if (base != null) {
+            return false;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+
+        if (index != null) {
+            context.setPropertyResolved(true);
+            return true;
+        }
+        return false;
+    }
+
+    public Class<?> getType(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return null;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+
+        if (index != null) {
+            context.setPropertyResolved(true);
+        }
+        return null;
+    }
+
+    @Override
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
+        if (base != null) {
+            return null;
+        }
+        ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>(14);
+        list.add(Util.getFeatureDescriptor("application", "application",
+                                           "application",false, false, true, Object.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("applicationScope", "applicationScope",
+                                           "applicationScope",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("cc", "cc",
+                                           "cc",false, false, true, UIComponent.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("component", "component",
+                                           "component",false, false, true, UIComponent.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("cookie", "cookie",
+                                           "cookie",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("facesContext", "facesContext",
+                                           "facesContext",false, false, true, FacesContext.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("flash", "flash",
+                                           "flash",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("flowScope", "flowScope",
+                                           "flowScope",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("view", "view",
+                                           "root",false, false, true, UIViewRoot.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("header", "header",
+                                           "header",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("headerValues", "headerValues",
+                                           "headerValues",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("initParam", "initParam",
+                                           "initParam",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("param", "param",
+                                           "param",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("paramValues", "paramValues",
+                                           "paramValues",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("request", "request",
+                                           "request",false, false, true, Object.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("requestScope", "requestScope",
+                                           "requestScope",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("resource", "resource",
+                                           "resource",false, false, true, Object.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("session", "session",
+                                           "session",false, false, true, Object.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("sessionScope", "sessionScope",
+                                           "sessionScope",false, false, true, Map.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("viewScope", "viewScope",
+                                           "viewScope",false, false, true, Map.class, Boolean.TRUE));
+
+        return list.iterator();
+
+    }
+
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        if (base != null) {
+            return null;
+        }
+        return String.class;
+    }
+
+}
diff --git a/com/sun/faces/el/ImplicitObjectELResolverForJsp.java b/com/sun/faces/el/ImplicitObjectELResolverForJsp.java
new file mode 100644
index 0000000..55fcc1f
--- /dev/null
+++ b/com/sun/faces/el/ImplicitObjectELResolverForJsp.java
@@ -0,0 +1,208 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import java.beans.FeatureDescriptor;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.PropertyNotFoundException;
+import javax.el.PropertyNotWritableException;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.util.MessageUtils;
+
+public class ImplicitObjectELResolverForJsp extends ImplicitObjectELResolver {
+
+    public ImplicitObjectELResolverForJsp() {
+    }
+
+    public Object getValue(ELContext context,Object base, Object property)
+            throws ELException {
+        // variable resolution is a special case of property resolution
+        // where the base is null.
+        if (base != null) {
+            return null;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+        
+        if (index == null)
+        {
+          return null;
+        }
+ 
+        FacesContext facesContext =
+          (FacesContext)context.getContext(FacesContext.class);
+       
+        switch (index.intValue()) {
+            case FACES_CONTEXT:
+                context.setPropertyResolved(true);
+                return facesContext;
+            case FLASH:
+                context.setPropertyResolved(true);
+                return facesContext.getExternalContext().getFlash();
+            case VIEW:
+                context.setPropertyResolved(true);
+                return facesContext.getViewRoot();
+            case VIEW_SCOPE:
+                context.setPropertyResolved(true);
+                return facesContext.getViewRoot().getViewMap();
+            case RESOURCE:
+                context.setPropertyResolved(true);
+                return facesContext.getApplication().getResourceHandler();
+            default:
+                return null;
+        }
+
+    }
+
+    public Class<?> getType(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return null;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+        
+        if (index == null) {
+            return null;
+        }
+        switch (index) {
+            case FACES_CONTEXT:
+            case VIEW:
+                context.setPropertyResolved(true);
+                return null;
+            default:
+                return null;
+        }
+    }
+
+    public void  setValue(ELContext context, Object base, Object property,
+                          Object val) throws ELException {
+        if (base != null) {
+            return;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+        if (index == null) {
+            return;
+        }
+        switch (index) {
+            case FACES_CONTEXT:
+                throw new PropertyNotWritableException(MessageUtils.getExceptionMessageString
+                (MessageUtils.OBJECT_IS_READONLY, "facesContext"));
+            case VIEW:
+                throw new PropertyNotWritableException(MessageUtils.getExceptionMessageString
+                (MessageUtils.OBJECT_IS_READONLY, "view"));
+            default:
+        }
+    }
+
+    public boolean isReadOnly(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return false;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+        // return value will be ignored unless context.propertyResolved is
+        // set to true.
+        Integer index = IMPLICIT_OBJECTS.get(property.toString());
+        if (index == null) {
+            return false;
+        }
+        switch (index) {
+            case FACES_CONTEXT:
+                context.setPropertyResolved(true);
+                return true;
+            case VIEW:
+                context.setPropertyResolved(true);
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
+        if (base != null) {
+            return null;
+        }
+
+        ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>(2);
+        list.add(Util.getFeatureDescriptor("facesContext", "facesContext",
+                                           "facesContext",false, false, true, FacesContext.class, Boolean.TRUE));
+        list.add(Util.getFeatureDescriptor("view", "view",
+                                           "root",false, false, true, UIViewRoot.class, Boolean.TRUE));
+        return list.iterator();
+
+    }
+
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        if (base != null) {
+            return null;
+        }
+        return String.class;
+    }
+
+}
diff --git a/com/sun/faces/el/ManagedBeanELResolver.java b/com/sun/faces/el/ManagedBeanELResolver.java
new file mode 100644
index 0000000..2f60f41
--- /dev/null
+++ b/com/sun/faces/el/ManagedBeanELResolver.java
@@ -0,0 +1,267 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * $Id: ManagedBeanELResolver.java,v 1.19.4.6 2010/04/13 19:38:42 rogerk Exp $
+ */
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * 
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.mgbean.BeanBuilder;
+import com.sun.faces.mgbean.BeanManager;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.faces.context.FacesContext;
+import java.beans.FeatureDescriptor;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import javax.faces.context.ExternalContext;
+
+public class ManagedBeanELResolver extends ELResolver {
+
+    public ManagedBeanELResolver() {
+    }
+
+    public Object getValue(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return null;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        return resolveBean(context, property, true);
+
+    }
+
+
+    public Class<?> getType(ELContext context, Object base, Object property)
+        throws ELException {
+
+        if (base == null && property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        return null;
+
+    }
+
+    public void setValue(ELContext context,
+                         Object base,
+                         Object property,
+                         Object val)
+    throws ELException {
+
+        if (base == null && property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        if (base == null) {
+            // create the bean if it doesn't exist.  We won't mark the property
+            // as resolved in this case, since the spec requires us to actually
+            // wait to set the value until the ScopeAttributeELResolved so that
+            // implicit scopes with higher priority than this one have a crack
+            // at resolving the bean first
+            resolveBean(context, property, false);
+        }
+
+    }
+
+    public boolean isReadOnly(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return false;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+
+        return false;
+    }
+
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
+
+        if (base != null) {
+            return null;
+        }
+
+        FacesContext facesContext =
+            (FacesContext) context.getContext(FacesContext.class);
+        BeanManager beanManager = getBeanManager();
+        if (beanManager == null || beanManager.getRegisteredBeans().isEmpty()) {
+            List<FeatureDescriptor> l = Collections.emptyList();
+            return l.iterator();
+        }
+
+        Map<String,BeanBuilder> beans = beanManager.getRegisteredBeans();
+        List<FeatureDescriptor> list =
+             new ArrayList<FeatureDescriptor>(beans.size());
+        // iterate over the list of managed beans
+        for (Map.Entry<String,BeanBuilder> bean : beans.entrySet()) {
+            String beanName = bean.getKey();
+            BeanBuilder builder = bean.getValue();
+            String loc = Util.getLocaleFromContextOrSystem(facesContext).toString();
+            Map<String,String> descriptions = builder.getDescriptions();
+
+            String description = null;
+            if (descriptions != null) {
+                description = descriptions.get(loc);
+                if (description == null) {
+                    description = descriptions.get("DEFAULT");
+                }
+            }
+            list.add(Util.getFeatureDescriptor(beanName,
+                                               beanName,
+                                               (description == null) ? "" : description,
+                                               false,
+                                               false,
+                                               true,
+                                               builder.getBeanClass(),
+                                               Boolean.TRUE));
+        }
+
+        return list.iterator();
+    }
+
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        if (base != null) {
+            return null;
+        }
+        return Object.class;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static BeanManager getBeanManager() {
+
+        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
+        return ((associate != null) ? associate.getBeanManager() : null);
+
+    }
+
+    private Object resolveBean(ELContext context, Object property, boolean markAsResolvedIfCreated) {
+        Object result = null;
+        BeanManager manager = getBeanManager();
+        if (manager != null) {
+            String beanName = property.toString();
+            BeanBuilder builder = manager.getBuilder(beanName);
+            if (builder != null) {
+                FacesContext facesContext = (FacesContext)
+                    context.getContext(FacesContext.class);
+
+                // JAVASERVERFACES-2989: Make sure to check request, session, and application.
+                ExternalContext extContext = facesContext.getExternalContext();
+                if (extContext.getRequestMap().containsKey(beanName)) {
+                    return null;
+                } else if (null != extContext.getSession(false) &&
+                           extContext.getSessionMap().containsKey(beanName)) {
+                    return null;
+                } else if (extContext.getApplicationMap().containsKey(beanName)) {
+                    return null;
+                }                
+                
+                result = manager.getBeanFromScope(beanName, builder, facesContext);
+                if (result == null) {
+                        result = manager.create(beanName, builder, facesContext);
+                }
+                context.setPropertyResolved(markAsResolvedIfCreated && (result != null));
+            }
+        }
+
+        return result;
+    }
+
+
+}
diff --git a/com/sun/faces/el/PropertyResolverChainWrapper.java b/com/sun/faces/el/PropertyResolverChainWrapper.java
new file mode 100644
index 0000000..d319315
--- /dev/null
+++ b/com/sun/faces/el/PropertyResolverChainWrapper.java
@@ -0,0 +1,218 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyResolver;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+import java.util.List;
+
+public class PropertyResolverChainWrapper extends ELResolver {
+
+    @SuppressWarnings("deprecation")
+    private PropertyResolver legacyPR = null;
+    
+    @SuppressWarnings("deprecation")
+    public PropertyResolverChainWrapper(PropertyResolver propertyResolver) {
+        this.legacyPR = propertyResolver;
+    }
+
+    @Override
+    @SuppressWarnings("deprecation")
+    public Object getValue(ELContext context, Object base, Object property) 
+        throws ELException {
+        if (base == null || property == null) {
+            return null;
+        }        
+        Object result;
+        context.setPropertyResolved(true);
+        FacesContext facesContext = (FacesContext) 
+            context.getContext(FacesContext.class);
+        ELContext jsfEL = facesContext.getELContext();
+        jsfEL.setPropertyResolved(true);
+        if (base instanceof List || base.getClass().isArray()) {
+            Object indexObj = facesContext.getApplication().getExpressionFactory().
+                    coerceToType(property, Integer.class);
+            int index = ((Integer)indexObj).intValue();
+            try {
+                result = legacyPR.getValue(base, index);
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }
+        } else {
+            try {
+                result = legacyPR.getValue(base, property);               
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }    
+        }
+        context.setPropertyResolved(jsfEL.isPropertyResolved());
+        return result;
+    }
+
+    @Override
+    @SuppressWarnings("deprecation")
+    public Class<?> getType(ELContext context, Object base, Object property) 
+        throws ELException {
+        if (base == null || property == null) {
+            return null;
+        }
+        
+        Class result;
+        context.setPropertyResolved(true);
+        FacesContext facesContext = (FacesContext)
+                context.getContext(FacesContext.class);
+        ELContext jsfEL = facesContext.getELContext();
+        jsfEL.setPropertyResolved(true);
+        if (base instanceof List || base.getClass().isArray()) {
+            Object indexObj = facesContext.getApplication().getExpressionFactory().
+                    coerceToType(property, Integer.class);
+            int index = ((Integer)indexObj).intValue();
+            try {
+                result = legacyPR.getType(base, index);               
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }
+        } else {
+            try {
+                result = legacyPR.getType(base, property);                
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }    
+        }
+        context.setPropertyResolved(jsfEL.isPropertyResolved());
+        return result;
+    }
+
+    @Override
+    @SuppressWarnings("deprecation")
+    public void  setValue(ELContext context, Object base, Object property,
+        Object val) throws ELException {
+        if (base == null || property == null) {
+            return;
+        }       
+
+        context.setPropertyResolved(true);
+        FacesContext facesContext = (FacesContext)
+            context.getContext(FacesContext.class);
+        ELContext jsfEL = facesContext.getELContext();
+        jsfEL.setPropertyResolved(true);
+        if (base instanceof List || base.getClass().isArray()) {
+            Object indexObj = facesContext.getApplication().getExpressionFactory().
+                    coerceToType(property, Integer.class);
+            int index = ((Integer)indexObj).intValue();            
+            try {
+                legacyPR.setValue(base, index, val);
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }
+        } else {
+            try {
+                legacyPR.setValue(base, property, val);
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }    
+        }
+        context.setPropertyResolved(jsfEL.isPropertyResolved());
+    }
+
+    @Override
+    @SuppressWarnings("deprecation")
+    public boolean isReadOnly(ELContext context, Object base, Object property) 
+        throws ELException {
+        if (base == null || property == null) {
+            return false;
+        }      
+        boolean result;
+        context.setPropertyResolved(true);
+        FacesContext facesContext = (FacesContext)
+            context.getContext(FacesContext.class);
+        ELContext jsfEL = facesContext.getELContext();
+        jsfEL.setPropertyResolved(true);
+        if (base instanceof List || base.getClass().isArray()) {
+            Object indexObj = facesContext.getApplication().getExpressionFactory().
+                    coerceToType(property, Integer.class);
+            int index = ((Integer)indexObj).intValue();
+            try {
+                result = legacyPR.isReadOnly(base, index);                
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }
+        } else {
+            try {
+                result = legacyPR.isReadOnly(base, property);                
+            } catch (EvaluationException ex) {
+                context.setPropertyResolved(false);
+                throw new ELException(ex);
+            }    
+        }
+        context.setPropertyResolved(jsfEL.isPropertyResolved());
+        return result;
+    }
+
+    @Override
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, 
+                                                             Object base) {
+        return null;
+    }
+
+    @Override
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        if ( base == null ) {
+            return Object.class;
+        }
+        return null;
+    }
+
+}
diff --git a/com/sun/faces/el/PropertyResolverImpl.java b/com/sun/faces/el/PropertyResolverImpl.java
new file mode 100644
index 0000000..91bf41f
--- /dev/null
+++ b/com/sun/faces/el/PropertyResolverImpl.java
@@ -0,0 +1,315 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.el.ELException;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyNotFoundException;
+import javax.faces.el.PropertyResolver;
+
+import java.lang.reflect.Array;
+import java.util.List;
+
+import com.sun.faces.util.MessageUtils;
+
+/**
+ * <p>
+ * Concrete implementation of <code>PropertyResolver</code>.
+ * </p>
+ */
+ at SuppressWarnings("deprecation")
+public class PropertyResolverImpl extends PropertyResolver {
+
+
+    private PropertyResolver delegate;
+
+
+    // ------------------------------------------- Methods from PropertyResolver
+
+
+    // Specified by javax.faces.el.PropertyResolver.getType(Object,int)
+    public Class getType(Object base, int index)
+        throws EvaluationException, PropertyNotFoundException{
+
+        // validates base != null and index >= 0
+        assertInput(base, index);
+
+        if (delegate != null) {
+            return delegate.getType(base, index);
+        }
+
+        Class<?> type = base.getClass();
+        try {
+            if (type.isArray()) {
+                Array.get(base, index);
+                return type.getComponentType();
+            } else if (base instanceof List) {
+                Object value = ((List) base).get(index);
+                return (value != null) ? value.getClass() : null;
+            } else {
+                throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
+                        base));
+            }
+        } catch (ArrayIndexOutOfBoundsException aioobe) {
+            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
+                        base,
+                        index,
+                        Array.getLength(base)));
+        } catch (IndexOutOfBoundsException ioobe) {
+           throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
+                        base,
+                        index,
+                        ((List)base).size()));
+        }
+    }
+
+    // Specified by javax.faces.el.PropertyResolver.getType(Object,String)
+    public Class getType(Object base, Object property) {
+
+        assertInput(base, property);
+
+        if (delegate != null) {
+            return delegate.getType(base, property);
+        }
+
+        try {
+            FacesContext context = FacesContext.getCurrentInstance();
+            return context.getApplication().getELResolver().getType(context.getELContext(), base,property);
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+    }
+
+    // Specified by javax.faces.el.PropertyResolver.getValue(Object,int)
+    public Object getValue(Object base, int index) {
+
+        // validates base and index
+        if (base == null) {
+            return null;
+        }
+
+        if (delegate != null) {
+            return delegate.getValue(base, index);
+        }
+
+        if (base.getClass().isArray()) {
+            try {
+                return Array.get(base, index);
+            } catch (ArrayIndexOutOfBoundsException aioobe) {
+                return null;
+            }
+        } else if (base instanceof List) {
+            try {
+                return ((List) base).get(index);
+            } catch (IndexOutOfBoundsException ioobe) {
+                return null;
+            }
+        } else {
+            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
+                        base));
+        }
+
+    }
+
+    // Specified by javax.faces.el.PropertyResolver.getValue(Object,String)
+    public Object getValue(Object base, Object property) {
+
+        if (delegate != null) {
+            return delegate.getValue(base, property);
+        }
+
+        try {
+            FacesContext context = FacesContext.getCurrentInstance();
+            return context.getApplication().getELResolver().getValue(context.getELContext(), base,property);
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+    }
+
+    // Specified by javax.faces.el.PropertyResolver.isReadOnly(Object,int)
+    public boolean isReadOnly(Object base, int index) {
+
+        // validate input
+        assertInput(base, index);
+
+        if (delegate != null) {
+            return delegate.isReadOnly(base, index);
+        }
+
+        if (base instanceof List || base.getClass().isArray()) {
+            return false;
+        } else {
+            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
+                        base));
+        }
+    }
+
+    // Specified by javax.faces.el.PropertyResolver.isReadOnly(Object,String)
+    public boolean isReadOnly(Object base, Object property) {
+
+        if (delegate != null) {
+            return delegate.isReadOnly(base, property);
+        }
+
+        try {
+            FacesContext context = FacesContext.getCurrentInstance();
+            return context.getApplication().getELResolver().isReadOnly(context.getELContext(), base,property);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+    }
+
+    // Specified by javax.faces.el.PropertyResolver.setValue(Object,int,Object)
+    public void setValue(Object base, int index, Object value) {
+
+        // validate input
+        assertInput(base, index);
+
+        if (delegate != null) {
+            delegate.setValue(base, index, value);
+            return;
+        }
+        
+        FacesContext context = FacesContext.getCurrentInstance();
+        Class<?> type = base.getClass();
+        if (type.isArray()) {
+            try {
+                Array.set(base, index, (context.getApplication().
+                    getExpressionFactory()).coerceToType(value, type
+                        .getComponentType()));
+            }
+            catch (ArrayIndexOutOfBoundsException aioobe) {
+                throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
+                        base,
+                        index,
+                        Array.getLength(base)));
+            }
+        } else if (base instanceof List) {
+            try {
+                // Inherently not type safe, but nothing can be done about it.
+                //noinspection unchecked
+                ((List) base).set(index, value);
+            } catch (IndexOutOfBoundsException ioobe) {
+                throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
+                        base,
+                        index,
+                        ((List)base).size()));
+            }
+        } else {
+           throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
+                        base));
+        }
+    }
+
+    // Specified by
+    // javax.faces.el.PropertyResolver.setValue(Object,String,Object)
+    public void setValue(Object base, Object property, Object value) {
+
+        if (delegate != null) {
+            delegate.setValue(base, property, value);
+            return;
+        }
+
+        try {
+            FacesContext context = FacesContext.getCurrentInstance();
+            context.getApplication().getELResolver().setValue(context.getELContext(), base,property, value);
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (javax.el.PropertyNotWritableException pnwe) {
+            throw new PropertyNotFoundException(pnwe);
+        }
+        catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void setDelegate(PropertyResolver delegate) {
+
+        this.delegate = delegate;
+
+    }
+
+    protected static void assertInput(Object base, Object property)
+            throws PropertyNotFoundException {
+        if (base == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base");
+            throw new PropertyNotFoundException(message);
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
+            throw new PropertyNotFoundException(message);
+        }
+    }
+
+    protected static void assertInput(Object base, int index)
+            throws PropertyNotFoundException {
+        if (base == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base");
+            throw new PropertyNotFoundException(message);
+        }
+        if (index < 0) {
+            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
+                        MessageUtils.EL_OUT_OF_BOUNDS_ERROR_ID,
+                        base,
+                        index));
+        }
+    }
+}
diff --git a/com/sun/faces/el/ResourceELResolver.java b/com/sun/faces/el/ResourceELResolver.java
new file mode 100644
index 0000000..64daa73
--- /dev/null
+++ b/com/sun/faces/el/ResourceELResolver.java
@@ -0,0 +1,225 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+
+/**
+ * ELResolver to resolve expressions like the following:
+ * <ul>
+ *   <li>#{resource['library:resource']}</li>
+ *   <li>#{resource['resource']}
+ * </ul>
+ */
+public class ResourceELResolver extends ELResolver {
+
+
+    // ------------------------------------------------- Methods from ELResolver
+
+
+    /**
+     * If base and property are not <code>null</code> and base is
+     * an instance of {@link ResourceHandler}, perform the following:
+     * <ul>
+     * <li>
+     * If <code>property</code> doesn't contain <code>:</code> treat <code>property</code>
+     * as the resource name and pass <code>property</code> to {@link ResourceHandler#createResource(String)}
+     * </li>
+     * <li>
+     * If <code>property</code> contains a single <code>:</code> treat the content
+     * before the <code>:</code> as the library name, and the content after the
+     * <code>:</code> to be the resource name and pass both to {@link javax.faces.application.ResourceHandler#createResource(String, String)}
+     * </li>
+     * <li>
+     * If <code>property</code> contains more than one <code>:</code> then throw
+     * a <code>ELException</code>
+     * </li>
+     * <li>
+     * If one of the above steps resulted in the creation of a {@link Resource}
+     * instance, call <code>ELContext.setPropertyResolved(true)</code> and return
+     * the result of {@link javax.faces.application.Resource#getRequestPath()}
+     * </li>
+     * </ul>
+     * @see ELResolver#getValue(javax.el.ELContext, Object, Object)
+     */
+    public Object getValue(ELContext context, Object base, Object property) {
+        if (base == null && property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+        Object ret = null;
+        if (base instanceof ResourceHandler) {
+            ResourceHandler handler = (ResourceHandler) base;
+            String prop = property.toString();
+            Resource res;
+            if (!prop.contains(":")) {
+                res = handler.createResource(prop);
+            } else {
+                if (!isPropertyValid(prop)) {
+                    // RELEASE_PENDING i18n
+                    throw new ELException("Invalid resource format.  Property " + prop + " contains more than one colon (:)");
+                }
+                Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+
+                String[] parts = Util.split(appMap, prop, ":");
+                
+                // If the enclosing entity for this expression is itself 
+                // a resource, the "this" syntax for the library name must
+                // be supported.
+                if (null != parts[0] && parts[0].equals("this")) {
+                    FacesContext facesContext = FacesContext.getCurrentInstance();
+                    UIComponent currentComponent = UIComponent.getCurrentCompositeComponent(facesContext);
+                    Resource componentResource = (Resource)
+                                currentComponent.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
+                    if (null != componentResource) {
+                        String libName = null;
+                        if (null != (libName = componentResource.getLibraryName())) {
+                            parts[0] = libName;
+                        }
+                    }
+                    
+                }
+                
+                res = handler.createResource(parts[1], parts[0]);
+            }
+            if (res != null) {
+                ret = res.getRequestPath();
+            }
+            context.setPropertyResolved(true);
+        }
+        return ret;
+    }
+
+
+    /**
+     * @return <code>null</code> as this resolver only performs lookups
+     * @throws PropertyNotFoundException if base and property are null
+     */
+    public Class<?> getType(ELContext context, Object base, Object property) {
+        if (base == null && property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+        return null;
+    }
+
+
+    /**
+     * This is basically a no-op.
+     * @throws PropertyNotFoundException if base and property are null
+     */
+    public void setValue(ELContext context,
+                         Object base,
+                         Object property,
+                         Object value) {
+        if (base == null && property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+    }
+
+
+    /**
+     * @return <code>false</code> (basically ignored by the EL system)
+     * @throws PropertyNotFoundException if base and property are null
+     */
+    public boolean isReadOnly(ELContext context, Object base, Object property) {
+        if (base == null && property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+
+        return false;
+    }
+
+
+    /**
+     * @return <code>null</code> - there is no way to query the
+     *  <code>ResourceManager</code> for all known resources
+     */
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
+                                                             Object base) {
+
+        return null;
+
+    }
+
+
+    /**
+     * @return <code>String.class</code> - getType() expects String properties
+     */
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+
+        return String.class;
+
+    }
+
+    
+    // --------------------------------------------------------- Private Methods
+
+
+    private boolean isPropertyValid(String property) {
+
+        int idx = property.indexOf(':');
+        return (property.indexOf(':', idx + 1) == -1);
+
+    }
+
+
+}
diff --git a/com/sun/faces/el/ScopedAttributeELResolver.java b/com/sun/faces/el/ScopedAttributeELResolver.java
new file mode 100644
index 0000000..f25739b
--- /dev/null
+++ b/com/sun/faces/el/ScopedAttributeELResolver.java
@@ -0,0 +1,259 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.beans.FeatureDescriptor;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.Map;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIViewRoot;
+
+import javax.el.ELException;
+import javax.el.PropertyNotFoundException;
+import javax.el.ELContext;
+import javax.el.ELResolver;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.mgbean.BeanManager;
+
+public class ScopedAttributeELResolver extends ELResolver {
+
+    public ScopedAttributeELResolver() {
+    }
+
+    public Object getValue(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return null;
+        }
+        if ( property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+        context.setPropertyResolved(true);
+        String attribute = property.toString();
+        FacesContext facesContext = (FacesContext)
+            context.getContext(FacesContext.class);
+        ExternalContext ec = facesContext.getExternalContext();
+
+        // check request
+        Object result = ec.getRequestMap().get(attribute);
+        if (result != null) {
+            return result;
+        }
+
+        // check UIViewRoot
+        UIViewRoot root = facesContext.getViewRoot();
+        if (root != null) {
+            Map<String, Object> viewMap = root.getViewMap(false);
+            if (viewMap != null) {
+                result = viewMap.get(attribute);
+            }
+        }
+        if (result != null) {
+            return result;
+        }
+
+        // check session
+        result = ec.getSessionMap().get(attribute);
+        if (result != null) {
+            return result;
+        }
+
+        // check application
+        result = ec.getApplicationMap().get(attribute);
+        if (result != null) {
+            return result;
+        }
+
+        // if we get to this point, nothing was found in the standard scopes.
+        // If the attribute refers to an entity handled by the BeanManager
+        // try getting the value from there as the value may be in a custom
+        // scope.
+        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
+        if (associate != null) {
+            BeanManager manager = associate.getBeanManager();
+            if (manager != null && manager.isManaged(attribute)) {
+                return manager.getBeanFromScope(attribute, facesContext);
+            }
+        }
+
+        return null;
+        
+    }
+
+
+    public Class<?> getType(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return null;
+        }
+        if ( property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+
+        context.setPropertyResolved(true);
+        return Object.class;
+    }
+
+    public void  setValue(ELContext context, Object base, Object property,
+                          Object val) throws ELException {
+        if (base != null) {
+            return;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+
+        context.setPropertyResolved(true);
+
+        String attribute = (String) property;
+        FacesContext facesContext = (FacesContext)
+            context.getContext(FacesContext.class);
+        ExternalContext ec = facesContext.getExternalContext();
+        if ((ec.getRequestMap().get(attribute)) != null) {
+            ec.getRequestMap().put(attribute, val);
+        } else if ((facesContext.getViewRoot()) != null && (facesContext.getViewRoot().getViewMap().get(attribute)) != null) {
+            facesContext.getViewRoot().getViewMap().put(attribute, val);
+        } else if ((ec.getSessionMap().get(attribute)) != null) {
+            ec.getSessionMap().put(attribute, val);
+        } else if ((ec.getApplicationMap().get(attribute)) != null) {
+            ec.getApplicationMap().put(attribute, val);
+        } else {
+            // if the property doesn't exist in any of the scopes, put it in
+            // request scope.
+            ec.getRequestMap().put(attribute, val);
+        }
+
+    }
+
+    public boolean isReadOnly(ELContext context, Object base, Object property)
+        throws ELException {
+        if (base != null) {
+            return false;
+        }
+        if (property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+        context.setPropertyResolved(true);
+        return false;
+    }
+
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
+
+       ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
+
+       FacesContext facesContext = (FacesContext)
+           context.getContext(FacesContext.class);
+       ExternalContext ec = facesContext.getExternalContext();
+
+       // add attributes in request scope.
+       Set<Entry<String,Object>> attrs = ec.getRequestMap().entrySet();
+        for (Entry<String, Object> entry : attrs) {
+            String attrName = entry.getKey();
+            Object attrValue = entry.getValue();
+            list.add(Util.getFeatureDescriptor(attrName, attrName,
+                                               "request scope attribute", false, false, true, attrValue.getClass(),
+                                               Boolean.TRUE));
+        }
+        
+       // add attributes in view scope.
+        UIViewRoot root = facesContext.getViewRoot();
+        if (root != null) {
+            Map<String, Object> viewMap = root.getViewMap(false);
+            if (viewMap != null && viewMap.size() != 0) {
+                attrs = viewMap.entrySet();
+                for (Entry<String, Object> entry : attrs) {
+                    String attrName = entry.getKey();
+                    Object attrValue = entry.getValue();
+                    list.add(Util.getFeatureDescriptor(attrName, attrName,
+                                                       "view scope attribute", false, false, true, attrValue.getClass(),
+                                                       Boolean.TRUE));
+                }
+            }
+        }
+        
+
+       // add attributes in session scope.
+       attrs = ec.getSessionMap().entrySet();
+        for (Entry<String, Object> entry : attrs) {
+            String attrName = entry.getKey();
+            Object attrValue = entry.getValue();
+            list.add(Util.getFeatureDescriptor(attrName, attrName,
+                                               "session scope attribute", false, false, true, attrValue.getClass(),
+                                               Boolean.TRUE));
+        }
+
+       // add attributes in application scope.
+       attrs = ec.getApplicationMap().entrySet();
+       for (Entry<String, Object> entry : attrs) {
+            String attrName = entry.getKey();
+            Object attrValue = entry.getValue();
+            list.add(Util.getFeatureDescriptor(attrName, attrName,
+                                               "application scope attribute", false, false, true, attrValue.getClass(),
+                                               Boolean.TRUE));
+        }
+
+       return list.iterator();
+    }
+
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        if (base != null) {
+            return null;
+        }
+        return Object.class;
+    }
+
+}
diff --git a/com/sun/faces/el/SharedUtils.java b/com/sun/faces/el/SharedUtils.java
new file mode 100644
index 0000000..fb48843
--- /dev/null
+++ b/com/sun/faces/el/SharedUtils.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+class SharedUtils {
+
+    /*
+    * Determine whether String is a mixed value binding expression or not.
+    */
+    static boolean isMixedExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        // if it doesn't start and end with delimiters
+        return (!(expression.startsWith("#{") && expression.endsWith("}")))
+                  && isExpression(expression);
+
+    }
+
+
+    /*
+    * Determine whether String is a value binding expression or not.
+    */
+    static boolean isExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        //check to see if attribute has an expression
+        int start = expression.indexOf("#{");
+        return start != -1 && expression.indexOf('}', start+2) != -1;
+    }
+
+    static Map<String, List<String>> evaluateExpressions(FacesContext context, Map<String, List<String>> map) {
+        if (map != null && !map.isEmpty()) {
+            Map<String, List<String>> ret = new HashMap<String, List<String>>(map.size());
+            for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+                ret.put(entry.getKey(), evaluateExpressions(context, entry.getValue()));
+            }
+            
+            return ret;
+        }
+        
+        return map;
+    }
+     
+    static List<String> evaluateExpressions(FacesContext context, List<String> values) {
+         if (!values.isEmpty()) {
+             List<String> ret = new ArrayList<String>(values.size());
+             Application app = context.getApplication();
+             for (String val : values) {
+                 if (val != null) {
+                     String value = val.trim();
+                     if (isExpression(value)) {
+                         value = app.evaluateExpressionGet(context,
+                                                           value,
+                                                           String.class);
+                     }
+                     ret.add(value);
+                 }
+             }
+             
+             return ret;
+         }
+         return values;
+     }
+
+
+
+}
+
+     
+
diff --git a/com/sun/faces/el/VariableResolverChainWrapper.java b/com/sun/faces/el/VariableResolverChainWrapper.java
new file mode 100644
index 0000000..77b7582
--- /dev/null
+++ b/com/sun/faces/el/VariableResolverChainWrapper.java
@@ -0,0 +1,199 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.VariableResolver;
+
+import java.beans.FeatureDescriptor;
+import java.util.*;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.RequestStateManager;
+
+public class VariableResolverChainWrapper extends ELResolver {
+    
+    @SuppressWarnings("deprecation")
+    private VariableResolver legacyVR = null;
+
+    @SuppressWarnings("deprecation")
+    public VariableResolverChainWrapper(VariableResolver variableResolver) {
+        this.legacyVR = variableResolver;
+    }
+
+    public void setWrapped(VariableResolver newVR) {
+        this.legacyVR = newVR;
+    }
+
+    @Override
+    @SuppressWarnings("deprecation")
+    public Object getValue(ELContext context, Object base, Object property)
+        throws ELException {
+
+        // Don't call into the chain unless it's been decorated.
+        if (legacyVR instanceof ChainAwareVariableResolver) {
+            return null;
+        }
+
+        if (base != null) {
+            return null;
+        }
+        if ( base == null && property == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
+            throw new PropertyNotFoundException(message);
+        }
+        context.setPropertyResolved(true);
+        Object result = null;
+        
+        FacesContext facesContext = (FacesContext)
+            context.getContext(FacesContext.class);
+        String propString = property.toString();
+        Map<String,Object> stateMap = RequestStateManager.getStateMap(facesContext);
+        try {
+        // If we are already in the midst of an expression evaluation
+        // that touched this resolver...
+            //noinspection unchecked
+            List<String> varNames = (List<String>) stateMap.get(RequestStateManager.REENTRANT_GUARD);
+            if (varNames != null
+                 && !varNames.isEmpty()
+                 && varNames.contains(propString)) {
+                // take no action and return.
+                context.setPropertyResolved(false);
+                return null;
+            }
+            // Make sure subsequent calls don't take action.
+            if (varNames == null) {
+                varNames = new ArrayList<String>();
+                stateMap.put(RequestStateManager.REENTRANT_GUARD, varNames);
+            }
+            varNames.add(propString);
+            
+            result = legacyVR.resolveVariable(facesContext,
+                                              propString);
+        } catch (EvaluationException ex) {
+            context.setPropertyResolved(false);
+            throw new ELException(ex);
+        } finally {
+            // Make sure to remove the guard after the call returns
+            //noinspection unchecked
+            List<String> varNames = (List<String>) stateMap.get(RequestStateManager.REENTRANT_GUARD);
+            if (varNames != null && !varNames.isEmpty()) {
+                varNames.remove(propString);
+            }
+            // Make sure that the ELContext "resolved" indicator is set 
+            // in accordance wth the result of the resolution.
+            context.setPropertyResolved(result != null);
+        }
+        return result;
+    }
+
+    @Override
+    public Class<?> getType(ELContext context, Object base, Object property)
+        throws ELException {
+
+        // Don't call into the chain unless it's been decorated.
+        if (legacyVR instanceof ChainAwareVariableResolver) {
+            return null;
+        }
+
+        Object result = getValue(context, base, property);
+        context.setPropertyResolved(result != null);
+        if (result != null) {
+            return result.getClass();
+        }
+        return null;
+    }
+
+    @Override
+    public void  setValue(ELContext context, Object base, Object property,
+                          Object val) throws ELException {
+        // Don't call into the chain unless it's been decorated.
+        if (legacyVR instanceof ChainAwareVariableResolver) {
+            return;
+        }
+
+        if (null == base && null == property) {
+            throw new PropertyNotFoundException();
+        }
+    }
+
+    @Override
+    public boolean isReadOnly(ELContext context, Object base, Object property)
+        throws ELException {
+
+        // Don't call into the chain unless it's been decorated.
+        if (legacyVR instanceof ChainAwareVariableResolver) {
+            return false;
+        }
+
+        if (null == base && null == property) {
+        throw new PropertyNotFoundException();
+    }
+        return false;
+    }
+
+    @Override
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, 
+                                                             Object base) {
+        return null;
+    }
+
+    @Override
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+
+        // Don't call into the chain unless it's been decorated.
+        if (legacyVR instanceof ChainAwareVariableResolver) {
+            return null;
+        }
+        
+        if ( base == null ) {
+            return String.class;
+        }
+        return null;
+    }
+
+}
diff --git a/com/sun/faces/el/VariableResolverImpl.java b/com/sun/faces/el/VariableResolverImpl.java
new file mode 100644
index 0000000..35dff24
--- /dev/null
+++ b/com/sun/faces/el/VariableResolverImpl.java
@@ -0,0 +1,105 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.el;
+
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.VariableResolver;
+import javax.el.ELException;
+
+import com.sun.faces.util.MessageUtils;
+
+/**
+ * <p>
+ * Concrete implementation of <code>VariableResolver</code>.
+ * </p>
+ */
+ at SuppressWarnings("deprecation")
+public class VariableResolverImpl extends VariableResolver {
+
+    private VariableResolver delegate;
+
+    // ------------------------------------------- Methods from VariableResolver
+
+    // Specified by javax.faces.el.VariableResolver.resolveVariable()
+    public Object resolveVariable(FacesContext context, String name)
+            throws EvaluationException {
+
+        if (context == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+        if (name == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name");
+            throw new NullPointerException(message);
+        }
+
+        Object result;
+
+        if (delegate != null) {
+            result = delegate.resolveVariable(context, name);
+        } else {
+            try {
+                result = context.getApplication().getELResolver().getValue(context.getELContext(), null, name);
+            } catch (ELException elex) {
+                throw new EvaluationException(elex);
+            }
+        }
+        return result;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void setDelegate(VariableResolver delegate) {
+
+        this.delegate = delegate;
+
+    }
+
+    public VariableResolver getDelegate() {
+        return this.delegate;
+    }
+}
diff --git a/com/sun/faces/ext/component/UIFocus.java b/com/sun/faces/ext/component/UIFocus.java
new file mode 100644
index 0000000..20e111a
--- /dev/null
+++ b/com/sun/faces/ext/component/UIFocus.java
@@ -0,0 +1,58 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.ext.component;
+
+import javax.faces.component.UIComponentBase;
+
+/**
+ * Component to set a focus on a given field.
+ * 
+ * @author driscoll
+ */
+public class UIFocus extends UIComponentBase {
+    
+    private static final String FAMILY = "FocusFamily";
+            
+    @Override
+    public String getFamily() {
+        return FAMILY;
+    }
+}  
diff --git a/com/sun/faces/ext/render/FocusHTMLRenderer.java b/com/sun/faces/ext/render/FocusHTMLRenderer.java
new file mode 100644
index 0000000..5458238
--- /dev/null
+++ b/com/sun/faces/ext/render/FocusHTMLRenderer.java
@@ -0,0 +1,77 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.ext.render;
+
+import java.io.IOException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+
+/**
+ * Renderer class that emits HTML and JavaScript to set the focus to a given field.
+ * 
+ * @author driscoll
+ */
+public class FocusHTMLRenderer extends Renderer {
+    
+    
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
+        String forID = (String) component.getAttributes().get("for");
+        ResponseWriter writer = context.getResponseWriter();
+        // XXX - I'd still like to get the parentID, but need to add a check if it's a form or not...
+        //UIComponent parentComponent = component.getParent();
+        //String parentID = parentComponent.getClientId(context);
+        //String targetID = parentID+":"+forID;
+        String targetID = forID;
+        writer.startElement("script", component);
+        writer.writeAttribute("type", "text/javascript", null);
+        writer.writeText("setFocus('",null);
+        writer.writeText(targetID, null);
+        writer.writeText("');\n",null);
+        writer.writeText("function setFocus(elementId) { var element = " +
+                "document.getElementById(elementId); if (element && element.focus) " +
+                "{ element.focus(); } }",null);
+        writer.endElement("script");        
+    }
+
+}
diff --git a/com/sun/faces/ext/taglib/CreditCardValidatorTag.java b/com/sun/faces/ext/taglib/CreditCardValidatorTag.java
new file mode 100644
index 0000000..3c8508a
--- /dev/null
+++ b/com/sun/faces/ext/taglib/CreditCardValidatorTag.java
@@ -0,0 +1,64 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.ext.taglib;
+
+import com.sun.faces.ext.validator.CreditCardValidator;
+import javax.faces.application.Application;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.faces.webapp.ValidatorELTag;
+
+
+/**
+ * Tag for the Regular Expression Validator.
+ * @author driscoll
+ */
+public class CreditCardValidatorTag extends ValidatorELTag {
+
+    @Override
+    protected Validator createValidator() {
+        
+        Application app = FacesContext.getCurrentInstance().getApplication();
+        CreditCardValidator validator =
+                (CreditCardValidator) app.createValidator("com.sun.faces.ext.validator.CreditCardValidator");
+        return validator;
+    }
+}
diff --git a/com/sun/faces/ext/taglib/FocusTag.java b/com/sun/faces/ext/taglib/FocusTag.java
new file mode 100644
index 0000000..b77b4b1
--- /dev/null
+++ b/com/sun/faces/ext/taglib/FocusTag.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.ext.taglib;
+
+import javax.faces.webapp.UIComponentELTag;
+import javax.faces.component.UIComponent;
+import javax.el.ValueExpression;
+
+
+/**
+ * Tag to set focus to a given field.  Uses a single attribute, for, which is
+ * the id of the field which should receive the focus.
+ * 
+ * @author driscoll
+ */
+public class FocusTag extends UIComponentELTag {
+    
+    private static final String COMPONENT_TYPE = "com.sun.faces.ext.focus";
+    private static final String RENDERER_TYPE = "com.sun.faces.ext.render.FocusHTMLRenderer";
+    
+    public ValueExpression forID = null;
+
+
+    // Associate the component type.
+    @Override
+    public String getComponentType() {
+        return COMPONENT_TYPE;
+    }
+    
+    
+    @Override
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+
+        // set forID
+        if (forID != null) {
+            if (!forID.isLiteralText()) {
+                component.setValueExpression("for", forID);
+            } else {
+                component.getAttributes().put("for", forID.getExpressionString());
+            }
+        }
+    }
+
+
+    // We'll render our own content
+    @Override
+    public String getRendererType() {
+        return RENDERER_TYPE;
+    }
+
+    @Override
+    public void release() {
+        super.release();
+        forID = null;
+    }
+
+    public void setFor(ValueExpression forID) {
+        this.forID = forID;
+    }
+    
+}
diff --git a/com/sun/faces/ext/validator/CreditCardValidator.java b/com/sun/faces/ext/validator/CreditCardValidator.java
new file mode 100644
index 0000000..1b76c5a
--- /dev/null
+++ b/com/sun/faces/ext/validator/CreditCardValidator.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.ext.validator;
+
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.application.FacesMessage;
+import java.util.Locale;
+import java.io.Serializable;
+
+/**
+ * A Validator that checks against a Regular Expression (which is the pattern 
+ * property).  The pattern must resolve to a String that follows the java.util.regex
+ * standards.  
+ * @author driscoll
+ */
+public class CreditCardValidator implements Validator, Serializable {
+
+    /**
+     * Validate a String against a regular expression pattern...  The full regex
+     * pattern must be matched in order to pass the validation.
+     * @param context Context of this request
+     * @param component The component wrapping this validator 
+     * @param obj A string which will be compared to the pattern property of this validator.  Must be a string.
+     */
+    public void validate(FacesContext context, UIComponent component, Object obj) {
+
+        FacesMessage fmsg;
+
+        Locale locale = context.getViewRoot().getLocale();
+
+        if (obj == null) {
+            return;
+        }
+        if (!(obj instanceof String)) {
+            fmsg = MojarraMessageFactory.getMessage(locale,
+                    "com.sun.faces.ext.validator.creditcardValidator.NOT_STRING",
+                    (Object) null);
+            throw new ValidatorException(fmsg);
+        }
+
+        String input = (String) obj;
+
+        if (!input.matches("^[0-9\\ \\-]*$")) {
+            fmsg = MojarraMessageFactory.getMessage(locale,
+                    "com.sun.faces.ext.validator.creditcardValidator.INVALID_CHARS",
+                    (Object) null);
+            throw new ValidatorException(fmsg);
+        }
+
+        if (!luhnCheck(stripNonDigit(input))) {
+            fmsg = MojarraMessageFactory.getMessage(locale,
+                    "com.sun.faces.ext.validator.creditcardValidator.INVALID_NUMBER",
+                    (Object) null);
+            throw new ValidatorException(fmsg);            
+        }
+    }
+
+    private String stripNonDigit(String s) {
+        return s.replaceAll(" ", "").replaceAll("-", "");
+    }
+
+    private boolean luhnCheck(String number) {
+        int sum = 0;
+
+        boolean timestwo = false;
+        for (int i = number.length() - 1; i >= 0; i--) {
+            int n = Integer.parseInt(number.substring(i, i + 1));
+            if (timestwo) {
+                n *= 2;
+                if (n > 9) {
+                    n = (n % 10) + 1;
+                }
+            }
+            sum += n;
+            timestwo = !timestwo;
+        }
+        return sum % 10 == 0;
+    }
+
+
+}
diff --git a/com/sun/faces/ext/validator/MojarraMessageFactory.java b/com/sun/faces/ext/validator/MojarraMessageFactory.java
new file mode 100644
index 0000000..5b85a4d
--- /dev/null
+++ b/com/sun/faces/ext/validator/MojarraMessageFactory.java
@@ -0,0 +1,367 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.ext.validator;
+
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * 
+ * <p>supported filters: <code>package</code> and
+ * <code>protection</code>.</p>
+ */
+class MojarraMessageFactory {
+
+    private static final Logger LOGGER = Logger.getLogger(MojarraMessageFactory.class.getPackage().getName());
+    
+    private MojarraMessageFactory() {
+    }
+
+    /**
+     * @see #getMessage(String, Object...)
+     * @param FacesMessage.Serverity set a custom severity
+     */
+    protected static FacesMessage getMessage(String messageId,
+            FacesMessage.Severity severity,
+            Object... params) {
+        FacesMessage message = getMessage(messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+    /**
+     * @see #getMessage(Locale, String, Object...)
+     * @param FacesMessage.Serverity set a custom severity
+     */
+    protected static FacesMessage getMessage(Locale locale,
+            String messageId,
+            FacesMessage.Severity severity,
+            Object... params) {
+        FacesMessage message = getMessage(locale, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+    /**
+     * @see #getMessage(FacesContext, String, Object...)
+     * @param FacesMessage.Serverity set a custom severity
+     */
+    protected static FacesMessage getMessage(FacesContext context,
+            String messageId,
+            FacesMessage.Severity severity,
+            Object... params) {
+        FacesMessage message = getMessage(context, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+    /**
+     * <p>This version of getMessage() is used for localizing implementation
+     * specific messages.</p>
+     *
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+    protected static FacesMessage getMessage(String messageId,
+            Object... params) {
+        Locale locale = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        // context.getViewRoot() may not have been initialized at this point.
+        if (context != null && context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+        } else {
+            locale = Locale.getDefault();
+        }
+
+        return getMessage(locale, messageId, params);
+    }
+
+    /**
+     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+     *
+     * @param locale    - the target <code>Locale</code>
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+    protected static FacesMessage getMessage(Locale locale,
+            String messageId,
+            Object... params) {
+        String summary = null;
+        String detail = null;
+        ResourceBundle bundle;
+        String bundleName;
+
+        // see if we have a user-provided bundle
+        if (null != (bundleName = getApplication().getMessageBundle())) {
+            if (null !=
+                    (bundle =
+                    ResourceBundle.getBundle(bundleName, locale,
+                    getCurrentLoader(bundleName)))) {
+                // see if we have a hit
+                try {
+                    summary = bundle.getString(messageId);
+                    detail = bundle.getString(messageId + "_detail");
+                } catch (MissingResourceException e) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Unable to get resource", e);
+                    }
+                }
+            }
+        }
+
+        // we couldn't find a summary in the user-provided bundle
+        if (null == summary) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle("com.sun.faces.ext.validator.mojarraMessages",
+                    locale,
+                    getCurrentLoader(bundleName));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+                // we couldn't find a summary anywhere!  Return null
+                if (null == summary) {
+                    return null;
+                }
+                detail = bundle.getString(messageId + "_detail");
+            } catch (MissingResourceException e) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Unable to get resource", e);
+                }
+            }
+        }
+        // At this point, we have a summary and a bundle.     
+        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
+        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
+        return (ret);
+    }
+
+    /**
+     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+    protected static FacesMessage getMessage(FacesContext context,
+            String messageId,
+            Object... params) {
+
+        if (context == null || messageId == null) {
+            throw new NullPointerException(" context " + context + " messageId " + messageId);
+        }
+        Locale locale;
+        // viewRoot may not have been initialized at this point.
+        if (context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+        } else {
+            locale = Locale.getDefault();
+        }
+
+        if (null == locale) {
+            throw new NullPointerException(" locale is null ");
+        }
+
+        FacesMessage message = getMessage(locale, messageId, params);
+        if (message != null) {
+            return message;
+        }
+        locale = Locale.getDefault();
+        return (getMessage(locale, messageId, params));
+    }
+
+    /**
+     * <p>Returns the <code>label</code> property from the specified
+     * component.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param component - the component of interest
+     *
+     * @return the label, if any, of the component
+     */
+    protected static Object getLabel(FacesContext context,
+            UIComponent component) {
+
+        Object o = component.getAttributes().get("label");
+        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
+            o = component.getValueExpression("label");
+        }
+        // Use the "clientId" if there was no label specified.
+        if (o == null) {
+            o = component.getClientId(context);
+        }
+        return o;
+    }
+
+    protected static Application getApplication() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return (FacesContext.getCurrentInstance().getApplication());
+        }
+        ApplicationFactory afactory = (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return (afactory.getApplication());
+    }
+
+    protected static ClassLoader getCurrentLoader(Object fallbackClass) {
+        ClassLoader loader =
+                Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return loader;
+    }
+
+    /**
+     * This class overrides FacesMessage to provide the evaluation
+     * of binding expressions in addition to Strings.
+     * It is often the case, that a binding expression may reference
+     * a localized property value that would be used as a 
+     * substitution parameter in the message.  For example:
+     *  <code>#{bundle.userLabel}</code>
+     * "bundle" may not be available until the page is rendered.
+     * The "late" binding evaluation in <code>getSummary</code> and 
+     * <code>getDetail</code> allow the expression to be evaluated
+     * when that property is available.
+     */
+    static class BindingFacesMessage extends FacesMessage {
+
+        BindingFacesMessage(
+                Locale locale,
+                String messageFormat,
+                String detailMessageFormat,
+                // array of parameters, both Strings and ValueBindings
+                Object[] parameters) {
+
+            super(messageFormat, detailMessageFormat);
+            this.locale = locale;
+            this.parameters = parameters;
+            if (parameters != null) {
+                resolvedParameters = new Object[parameters.length];
+            }
+        }
+
+        @Override
+        public String getSummary() {
+            String pattern = super.getSummary();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        @Override
+        public String getDetail() {
+            String pattern = super.getDetail();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        private void resolveBindings() {
+            FacesContext context = null;
+            if (parameters != null) {
+                for (int i = 0; i < parameters.length; i++) {
+                    Object o = parameters[i];
+                    if (o instanceof ValueBinding) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueBinding) o).getValue(context);
+                    }
+                    if (o instanceof ValueExpression) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueExpression) o).getValue(context.getELContext());
+                    }
+                    // to avoid 'null' appearing in message
+                    if (o == null) {
+                        o = "";
+                    }
+                    resolvedParameters[i] = o;
+                }
+            }
+        }
+
+        private String getFormattedString(String msgtext, Object[] params) {
+            String localizedStr = null;
+
+            if (params == null || msgtext == null) {
+                return msgtext;
+            }
+            StringBuffer b = new StringBuffer(100);
+            MessageFormat mf = new MessageFormat(msgtext);
+            if (locale != null) {
+                mf.setLocale(locale);
+                b.append(mf.format(params));
+                localizedStr = b.toString();
+            }
+            return localizedStr;
+        }
+        private Locale locale;
+        private Object[] parameters;
+        private Object[] resolvedParameters;
+    }
+} // end of class MojarraMessageFactory
diff --git a/com/sun/faces/ext/validator/mojarraMessages.properties b/com/sun/faces/ext/validator/mojarraMessages.properties
new file mode 100644
index 0000000..96eb16f
--- /dev/null
+++ b/com/sun/faces/ext/validator/mojarraMessages.properties
@@ -0,0 +1,56 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+# comment
+
+com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET=Regex pattern must be set.
+com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
+com.sun.faces.ext.validator.regexValidator.NOT_STRING=Validator may only be set on String values.
+com.sun.faces.ext.validator.regexValidator.NOT_STRING_detail=Validator may only be set on String values.
+com.sun.faces.ext.validator.regexValidator.NOT_MATCHED=Regex Pattern not matched
+com.sun.faces.ext.validator.regexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
+com.sun.faces.ext.validator.regexValidator.EXP_ERROR=Error in regular expression.
+com.sun.faces.ext.validator.regexValidator.EXP_ERROR_detail=Error in regular expression, ''{0}''
+com.sun.faces.ext.validator.creditcardValidator.NOT_STRING=Only string values can be validated.
+com.sun.faces.ext.validator.creditcardValidator.NOT_STRING_detail=Only string values can be validated.
+com.sun.faces.ext.validator.creditcardValidator.INVALID_CHARS=Invalid characters in value.
+com.sun.faces.ext.validator.creditcardValidator.INVALID_CHARS_detail=Invalid characters in value - only numbers, spaces and dashes are allowed.
+com.sun.faces.ext.validator.creditcardValidator.INVALID_NUMBER=Not a valid credit card number.
+com.sun.faces.ext.validator.creditcardValidator.INVALID_NUMBER_detail=Not a valid credit card number.
diff --git a/com/sun/faces/ext/validator/mojarraMessages_en.properties b/com/sun/faces/ext/validator/mojarraMessages_en.properties
new file mode 100644
index 0000000..6d374e6
--- /dev/null
+++ b/com/sun/faces/ext/validator/mojarraMessages_en.properties
@@ -0,0 +1,50 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+# comment
+
+com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET=Regex pattern must be set.
+com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
+com.sun.faces.ext.validator.regexValidator.NOT_STRING=Validator may only be set on String values.
+com.sun.faces.ext.validator.regexValidator.NOT_STRING_detail=Validator may only be set on String values.
+com.sun.faces.ext.validator.regexValidator.NOT_MATCHED=Regex Pattern not matched
+com.sun.faces.ext.validator.regexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
+com.sun.faces.ext.validator.regexValidator.EXP_ERROR=Error in regular expression.
+com.sun.faces.ext.validator.regexValidator.EXP_ERROR_detail=Error in regular expression, ''{0}''
diff --git a/com/sun/faces/facelets/FaceletCache.java b/com/sun/faces/facelets/FaceletCache.java
new file mode 100644
index 0000000..43c8ee0
--- /dev/null
+++ b/com/sun/faces/facelets/FaceletCache.java
@@ -0,0 +1,116 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets;
+
+import java.io.IOException;
+
+import java.net.URL;
+
+ at Deprecated
+public abstract class FaceletCache<V> {
+    
+    /**
+     * Factory interface for creating Facelets.
+     */
+    @Deprecated
+    public interface InstanceFactory<V> {
+        public V newInstance(final URL key) throws IOException;
+    }
+    
+    /**
+     * Retrieves a cached Facelet
+     * @param url URL for the Facelet being retrieved
+     * @return cached Facelet instance, If no instance is available,
+     * it will be created using the Facelet InstanceFactory and stored in the cache
+     */
+    public abstract V getFacelet(URL url) throws IOException;
+
+    /**
+     * Determines whether a cached Facelet instance exists for this URL
+     * @param url URL for the Facelet
+     * @return true if a cached instance exists, false otherwise
+     */
+    public abstract boolean isFaceletCached(URL url);
+
+    /**
+     * Retrieves a cached Metadata Facelet
+     * @param url URL for the Metadata Facelet being retrieved
+     * @return cached Metadata Facelet instance, If no instance is available,
+     * it will be created using the Metadata Facelet InstanceFactory and stored in the cache
+     */
+    public abstract V getMetadataFacelet(URL url) throws IOException;
+
+    /**
+     * Determines whether a cached Metadata Facelet instance exists for this URL
+     * @param url URL for the Metadata Facelet
+     * @return true if a cached instance exists, false otherwise
+     */
+    public abstract boolean isMetadataFaceletCached(URL url);
+    
+    /**
+     * Initializes this cache instance.
+     * @param faceletFactory <code>InstanceFactory</code> for creating Facelet instances
+     * @param metafaceletFactory <code>InstanceFactory</code> for creating Metadata Facelet instances
+     */
+    public final void init(InstanceFactory<V> faceletFactory, InstanceFactory<V> metafaceletFactory) {
+        _faceletFactory = faceletFactory;
+        _metafaceletFactory = metafaceletFactory;
+    }
+    
+    /**
+     * Retrieves InstanceFactory for creating Facelets
+     * @return factory for creating Facelets
+     */
+    protected final InstanceFactory<V> getFaceletInstanceFactory() {
+        return _faceletFactory;
+    }
+    
+    /**
+     * Retrieves InstanceFactory for creating Metadata Facelets
+     * @return factory for creating MetadataFacelets
+     */
+    protected final InstanceFactory<V> getMetadataFaceletInstanceFactory() {
+        return _metafaceletFactory;
+    }
+
+    private InstanceFactory<V> _faceletFactory;
+    private InstanceFactory<V> _metafaceletFactory;
+}
diff --git a/com/sun/faces/facelets/FaceletContextImplBase.java b/com/sun/faces/facelets/FaceletContextImplBase.java
new file mode 100644
index 0000000..d54379e
--- /dev/null
+++ b/com/sun/faces/facelets/FaceletContextImplBase.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets;
+
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.FaceletException;
+import java.io.IOException;
+
+/**
+ *
+ * @author edburns
+ */
+public abstract class FaceletContextImplBase extends FaceletContext {
+    
+    /**
+     * Push the passed TemplateClient onto the stack for Definition Resolution
+     * @param client
+     * @see TemplateClient
+     */
+    public abstract void pushClient(TemplateClient client);
+    
+    /**
+     * Pop the last added TemplateClient
+     * @see TemplateClient
+     */
+    public abstract void popClient(TemplateClient client);
+    
+    
+    public abstract void extendClient(TemplateClient client);
+    
+    /**
+     * This method will walk through the TemplateClient stack to resolve and
+     * apply the definition for the passed name.
+     * If it's been resolved and applied, this method will return true.
+     * 
+     * @param parent the UIComponent to apply to
+     * @param name name or null of the definition you want to apply
+     * @return true if successfully applied, otherwise false
+     * @throws IOException
+     * @throws FaceletException
+     * @throws FacesException
+     * @throws ELException
+     */
+    public abstract boolean includeDefinition(UIComponent parent, String name) throws IOException, FaceletException, FacesException, ELException ;
+    
+
+}
diff --git a/com/sun/faces/facelets/PrivateApiFaceletCacheAdapter.java b/com/sun/faces/facelets/PrivateApiFaceletCacheAdapter.java
new file mode 100644
index 0000000..4d6b852
--- /dev/null
+++ b/com/sun/faces/facelets/PrivateApiFaceletCacheAdapter.java
@@ -0,0 +1,113 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets;
+
+import com.sun.faces.facelets.FaceletCache.InstanceFactory;
+import java.io.IOException;
+import java.net.URL;
+import javax.faces.view.facelets.FaceletCache;
+import javax.faces.view.facelets.FaceletCache.MemberFactory;
+
+public class PrivateApiFaceletCacheAdapter<V> extends FaceletCache<V> {
+
+    private com.sun.faces.facelets.FaceletCache<V> privateApi;
+
+    public PrivateApiFaceletCacheAdapter(com.sun.faces.facelets.FaceletCache<V> privateApi) {
+        this.privateApi = privateApi;
+    }
+
+    @Override
+    public V getFacelet(URL url) throws IOException {
+        return privateApi.getFacelet(url);
+    }
+
+    @Override
+    public V getViewMetadataFacelet(URL url) throws IOException {
+        return privateApi.getMetadataFacelet(url);
+    }
+
+    @Override
+    public boolean isFaceletCached(URL url) {
+        return privateApi.isFaceletCached(url);
+    }
+
+    @Override
+    public boolean isViewMetadataFaceletCached(URL url) {
+        return privateApi.isMetadataFaceletCached(url);
+    }
+
+    private MemberFactory<V> memberFactory;
+    private MemberFactory<V> metadataMemberFactory;
+
+    @Override
+    public void setMemberFactories(final MemberFactory<V> faceletFactory, 
+            final MemberFactory<V> viewMetadataFaceletFactory) {
+        InstanceFactory<V> instanceFactory = new InstanceFactory<V>() {
+
+            public V newInstance(URL key) throws IOException {
+                return faceletFactory.newInstance(key);
+            }
+
+        };
+        InstanceFactory<V> metadataInstanceFactory = new InstanceFactory<V>() {
+
+            public V newInstance(URL key) throws IOException {
+                return viewMetadataFaceletFactory.newInstance(key);
+            }
+
+        };
+
+        privateApi.init(instanceFactory, metadataInstanceFactory);
+    }
+
+    @Override
+    public MemberFactory<V> getMemberFactory() {
+        return memberFactory;
+    }
+
+    @Override
+    public MemberFactory<V> getMetadataMemberFactory() {
+        return metadataMemberFactory;
+    }
+
+
+
+}
diff --git a/com/sun/faces/facelets/StateWriter.java b/com/sun/faces/facelets/StateWriter.java
new file mode 100644
index 0000000..bb009d4
--- /dev/null
+++ b/com/sun/faces/facelets/StateWriter.java
@@ -0,0 +1,178 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets;
+
+import com.sun.faces.facelets.util.FastWriter;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * A class for handling state insertion.  Content is written
+ * directly to "out" until an attempt to write state;  at that
+ * point, it's redirected into a buffer that can be picked through
+ * in theory, this buffer should be very small, since it only
+ * needs to be enough to contain all the content after the close
+ * of the first (and, hopefully, only) form.
+ * <p>
+ * Potential optimizations:
+ * <ul>
+ * <li>If we created a new FastWriter at each call to writingState(),
+ * and stored a List of them, then we'd know that state tokens could
+ * only possibly be near the start of each buffer (and might not be there
+ * at all).  (There might be a close-element before the state token). Then,
+ * we'd only need to check the start of the buffer for the state token;
+ * if it's there, write out the real state, then blast the rest of the
+ * buffer out.  This wouldn't even require toString(), which for
+ * large buffers is expensive.  However, this optimization is only
+ * going to be especially meaningful for the multi-form case.
+ * </li>
+ * <li>More of a FastWriter optimization than a StateWriter, but:
+ *  it is far faster to create a set of small 1K buffers than constantly
+ *  reallocating one big buffer.</li>
+ * </ul>
+ *
+ * @author Adam Winer
+ */
+final class StateWriter extends Writer {
+
+    private int initialSize;
+    private Writer out;
+    private FastWriter fast;
+    private boolean writtenState;
+    
+    static public StateWriter getCurrentInstance() {
+        return (StateWriter) CURRENT_WRITER.get();
+    }
+
+    public StateWriter(Writer initialOut, int initialSize) {
+        if (initialSize < 0) {
+            throw new IllegalArgumentException("Initial Size cannot be less than 0");
+        }
+        
+        this.initialSize = initialSize;
+        this.out = initialOut;
+
+        CURRENT_WRITER.set(this);
+    }
+
+    /**
+     * Mark that state is about to be written.  Contrary to what you'd expect,
+     * we cannot and should not assume that this location is really going
+     * to have state;  it is perfectly legit to have a ResponseWriter that
+     * filters out content, and ignores an attempt to write out state
+     * at this point.  So, we have to check after the fact to see
+     * if there really are state markers.
+     */
+    public void writingState() {
+        if (!this.writtenState) {
+            this.writtenState = true;
+            this.out = this.fast = new FastWriter(this.initialSize);
+        }
+    }
+
+    public boolean isStateWritten() {
+        return this.writtenState;
+    }
+
+    public void close() throws IOException {
+        // do nothing
+    }
+
+    public void flush() throws IOException {
+        // do nothing
+    }
+    
+    public void write(char[] cbuf, int off, int len) throws IOException {
+        this.out.write(cbuf, off, len);
+    }
+
+    public void write(char[] cbuf) throws IOException {
+        this.out.write(cbuf);
+    }
+
+    public void write(int c) throws IOException {
+        this.out.write(c);
+    }
+
+    public void write(String str, int off, int len) throws IOException {
+        this.out.write(str, off, len);
+    }
+
+    public void write(String str) throws IOException {
+        this.out.write(str);
+    }
+    
+    public String getAndResetBuffer() {
+        if (!this.writtenState) {
+            throw new IllegalStateException(
+                     "Did not write state;  no buffer is available");
+        }
+
+        String result = this.fast.toString();
+        this.fast.reset();
+        return result;
+    }
+  
+    public void release() {
+        CURRENT_WRITER.set(null);
+    }
+
+    static private final ThreadLocal CURRENT_WRITER = new ThreadLocal();
+}
diff --git a/com/sun/faces/facelets/TemplateClient.java b/com/sun/faces/facelets/TemplateClient.java
new file mode 100644
index 0000000..e679e15
--- /dev/null
+++ b/com/sun/faces/facelets/TemplateClient.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import java.io.IOException;
+
+/**
+ * FaceletHandlers can implement this contract and push themselves into the
+ * FaceletContext for participating in templating. Templates will attempt to
+ * resolve content for a specified name until one of the TemplatClients return
+ * 'true'.
+ * 
+ * @author Jacob Hookom
+ */
+public interface TemplateClient {
+
+    /**
+     * This contract is much like the normal FaceletHandler.apply method, but it
+     * takes in an optional String name which tells this instance what
+     * fragment/definition it's looking for. If you are a match, apply your
+     * logic to the passed UIComponent and return true, otherwise do nothing and
+     * return false.
+     * 
+     * @param ctx
+     *            the FaceletContext of <i>your</i> instance, not the
+     *            templates'
+     * @param parent
+     *            current UIComponent instance to be applied
+     * @param name
+     *            the String name or null if the whole body should be included
+     * @return true if this client matched/applied the definition for the passed
+     *         name
+     * @throws IOException
+     * @throws FacesException
+     * @throws FaceletException
+     * @throws ELException
+     */
+    public boolean apply(FaceletContext ctx, UIComponent parent, String name)
+            throws IOException;
+    
+}
diff --git a/com/sun/faces/facelets/compiler/AbstractUIHandler.java b/com/sun/faces/facelets/compiler/AbstractUIHandler.java
new file mode 100644
index 0000000..ee909b2
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/AbstractUIHandler.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.FaceletHandler;
+import javax.faces.view.facelets.TextHandler;
+
+public abstract class AbstractUIHandler implements FaceletHandler, TextHandler {
+
+    public void addComponent(FaceletContext ctx,
+                             UIComponent parent,
+                             UIComponent c) {
+        ComponentSupport.addComponent(ctx, parent, c);
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/AttributeInstruction.java b/com/sun/faces/facelets/compiler/AttributeInstruction.java
new file mode 100644
index 0000000..2c6fc2b
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/AttributeInstruction.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+
+import com.sun.faces.facelets.el.ELText;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+
+final class AttributeInstruction implements Instruction {
+    private final String alias;
+
+    private final String attr;
+
+    private final ELText txt;
+    
+
+    public AttributeInstruction(String alias, String attr, ELText txt) {
+        this.alias = alias;
+        this.attr  = attr;
+        this.txt   = txt;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        ResponseWriter out = context.getResponseWriter();
+        try {
+            ELContext elContext = context.getELContext();
+            String val = txt.toString(elContext);
+            if (val != null && val.length() != 0) {
+                out.writeAttribute(attr, val, null);
+            }
+        } catch (ELException e) {
+            throw new ELException(this.alias + ": " + e.getMessage(), e.getCause());
+        } catch (Exception e) {
+            throw new ELException(this.alias + ": " + e.getMessage(), e);
+        }
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        ELText nt = this.txt.apply(factory, ctx);
+        if (nt == this.txt) {
+            return this;
+        }
+
+        return new AttributeInstruction(alias, attr, nt);
+    }
+
+    public boolean isLiteral() {
+        return txt.isLiteral();
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/CommentInstruction.java b/com/sun/faces/facelets/compiler/CommentInstruction.java
new file mode 100644
index 0000000..5125979
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/CommentInstruction.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.ELText;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+
+final class CommentInstruction implements Instruction {
+    private final ELText text;
+
+    public CommentInstruction(ELText text) {
+        this.text = text;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        ELContext elContext = context.getELContext();
+        context.getResponseWriter().writeComment(this.text.toString(elContext));
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        ELText t = this.text.apply(factory, ctx);
+        return new CommentInstruction(t);
+    }
+
+    public boolean isLiteral() {
+        return false;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/CompilationManager.java b/com/sun/faces/facelets/compiler/CompilationManager.java
new file mode 100644
index 0000000..6520e45
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/CompilationManager.java
@@ -0,0 +1,551 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.tag.TagAttributesImpl;
+import com.sun.faces.facelets.tag.TagLibrary;
+import com.sun.faces.facelets.tag.composite.CompositeLibrary;
+import com.sun.faces.facelets.tag.composite.ImplementationHandler;
+import com.sun.faces.facelets.tag.composite.InterfaceHandler;
+import com.sun.faces.facelets.tag.ui.ComponentRefHandler;
+import com.sun.faces.facelets.tag.ui.CompositionHandler;
+import com.sun.faces.facelets.tag.ui.UILibrary;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.view.facelets.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Stack;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Compilation unit for managing the creation of a single FaceletHandler based
+ * on events from an XML parser.
+ * 
+ * @see {@link com.sun.faces.facelets.compiler.Compiler}
+ * 
+ * @author Jacob Hookom
+ */
+final class CompilationManager {
+
+    private final static Logger log = FacesLogger.FACELETS_COMPILER.getLogger();
+
+    private final Compiler compiler;
+
+    private final TagLibrary tagLibrary;
+
+    private final TagDecorator tagDecorator;
+
+    private final NamespaceManager namespaceManager;
+
+    private final Stack<CompilationUnit> units;
+
+    private int tagId;
+
+    private boolean finished;
+    
+    private final String alias;
+    
+    private CompilationMessageHolder messageHolder = null;
+
+    private WebConfiguration config;
+    
+    public CompilationManager(String alias, Compiler compiler) {
+        
+        // this is our alias
+        this.alias = alias;
+
+        // grab compiler state
+        this.compiler = compiler;
+        this.tagDecorator = compiler.createTagDecorator();
+        this.tagLibrary = compiler.createTagLibrary(this.getCompilationMessageHolder());
+
+        // namespace management
+        this.namespaceManager = new NamespaceManager();
+
+        // tag uids
+        this.tagId = 0;
+
+        // for composition use
+        this.finished = false;
+
+        // our compilationunit stack
+        this.units = new Stack<CompilationUnit>();
+        this.units.push(new CompilationUnit());
+
+        config = WebConfiguration.getInstance();
+        
+    }
+        
+    private InterfaceUnit interfaceUnit;
+    private InterfaceUnit getInterfaceUnit() {
+        return interfaceUnit;
+    }
+    
+    public CompilationMessageHolder getCompilationMessageHolder() {
+        if (null == messageHolder) {
+            messageHolder = new CompilationMessageHolderImpl();
+        }
+        return messageHolder;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public WebConfiguration getWebConfiguration() {
+        return config;
+    }
+    
+    public void setCompilationMessageHolder(CompilationMessageHolder messageHolder) {
+        this.messageHolder = messageHolder;
+    }
+
+    private void setInterfaceUnit(InterfaceUnit interfaceUnit) {
+        this.interfaceUnit = interfaceUnit;
+    }
+    
+    public void writeInstruction(String value) {
+        if (this.finished) {
+            return;
+        }
+
+        // don't carelessly add empty tags
+        if (value.length() == 0) {
+            return;
+        }
+
+        TextUnit unit;
+        if (this.currentUnit() instanceof TextUnit) {
+            unit = (TextUnit) this.currentUnit();
+        } else {
+            unit = new TextUnit(this.alias, this.nextTagId());
+            this.startUnit(unit);
+        }
+        unit.writeInstruction(value);
+    }
+
+    public void writeText(String value) {
+
+        if (this.finished) {
+            return;
+        }
+
+        // don't carelessly add empty tags
+        if (value.length() == 0) {
+            return;
+        }
+
+        TextUnit unit;
+        if (this.currentUnit() instanceof TextUnit) {
+            unit = (TextUnit) this.currentUnit();
+        } else {
+            unit = new TextUnit(this.alias, this.nextTagId());
+            this.startUnit(unit);
+        }
+        unit.write(value);
+    }
+
+    public void writeComment(String text) {
+        if (this.compiler.isTrimmingComments())
+            return; 
+
+        if (this.finished) {
+            return;
+        }
+          
+        // don't carelessly add empty tags
+        if (text.length() == 0) {
+            return;
+        }
+          
+        TextUnit unit;
+        if (this.currentUnit() instanceof TextUnit) {
+            unit = (TextUnit) this.currentUnit();
+        } else {
+            unit = new TextUnit(this.alias, this.nextTagId());
+            this.startUnit(unit);
+        }
+          
+        unit.writeComment(text);
+    }
+
+    public void writeWhitespace(String text) {
+        if (!this.compiler.isTrimmingWhitespace()) {
+            this.writeText(text);
+        }
+    }
+
+    private String nextTagId() {
+        return Integer.toHexString(Math.abs(this.alias.hashCode() ^ 13 * this.tagId++));
+    }
+
+    public void pushTag(Tag orig) {
+
+        if (this.finished) {
+            return;
+        }
+
+        if (log.isLoggable(Level.FINE)) {
+            log.fine("Tag Pushed: " + orig);
+        }
+
+        Tag t = this.tagDecorator.decorate(orig);
+        String[] qname = this.determineQName(t);
+        t = this.trimAttributes(t);
+
+        boolean handled = false;
+
+        if (isTrimmed(qname[0], qname[1])) {
+        	if (log.isLoggable(Level.FINE)) {
+        		log.fine("Composition Found, Popping Parent Tags");
+        	}
+           
+            CompilationUnit viewRootUnit = getViewRootUnitFromStack(units);
+            this.units.clear();
+            NamespaceUnit nsUnit = this.namespaceManager
+                    .toNamespaceUnit(this.tagLibrary);
+            this.units.push(nsUnit);
+            if (viewRootUnit != null) {
+                this.currentUnit().addChild(viewRootUnit);
+            }
+            this.startUnit(new TrimmedTagUnit(this.tagLibrary, qname[0], qname[1], t, this
+                    .nextTagId()));
+            if (log.isLoggable(Level.FINE)) {
+            	log.fine("New Namespace and [Trimmed] TagUnit pushed");
+            }
+        } else if (isImplementation(qname[0], qname[1])) {
+        	if (log.isLoggable(Level.FINE)) {
+        		log.fine("Composite Component Implementation Found, Popping Parent Tags");
+        	}
+
+            // save aside the InterfaceUnit
+            InterfaceUnit iface = getInterfaceUnit();
+            if (null == iface) {
+                throw new TagException(orig, "Unable to find interface for implementation.");
+            }
+
+            // Cleare the parent tags
+            this.units.clear();
+            NamespaceUnit nsUnit = this.namespaceManager
+                    .toNamespaceUnit(this.tagLibrary);
+            this.units.push(nsUnit);
+            this.currentUnit().addChild(iface);
+            this.startUnit(new ImplementationUnit(this.tagLibrary, qname[0], qname[1], t, this
+                    .nextTagId()));
+            if (log.isLoggable(Level.FINE)) {
+            	log.fine("New Namespace and ImplementationUnit pushed");
+            }
+            
+        } else if (isRemove(qname[0], qname[1])) {
+            this.units.push(new RemoveUnit());
+        } else if (this.tagLibrary.containsTagHandler(qname[0], qname[1])) {
+            if (isInterface(qname[0], qname[1])) {
+                InterfaceUnit iface = new InterfaceUnit(this.tagLibrary, qname[0], qname[1], t, this.nextTagId());
+                setInterfaceUnit(iface);
+                this.startUnit(iface);
+            } else {
+                this.startUnit(new TagUnit(this.tagLibrary, qname[0], qname[1], t, this.nextTagId()));
+            }
+        } else if (this.tagLibrary.containsNamespace(qname[0], t)) {
+            throw new TagException(orig, "Tag Library supports namespace: "+qname[0]+", but no tag was defined for name: "+qname[1]);
+        } else {
+            TextUnit unit;
+            if (this.currentUnit() instanceof TextUnit) {
+                unit = (TextUnit) this.currentUnit();
+            } else {
+                unit = new TextUnit(this.alias, this.nextTagId());
+                this.startUnit(unit);
+            }
+            unit.startTag(t);
+        }
+    }
+
+    public void popTag() {
+
+        if (this.finished) {
+            return;
+        }
+
+        CompilationUnit unit = this.currentUnit();
+
+        if (unit instanceof TextUnit) {
+            TextUnit t = (TextUnit) unit;
+            if (t.isClosed()) {
+                this.finishUnit();
+            } else {
+                t.endTag();
+                return;
+            }
+        }
+
+        unit = this.currentUnit();
+        if (unit instanceof TagUnit) {
+            TagUnit t = (TagUnit) unit;
+            if (t instanceof TrimmedTagUnit) {
+                this.finished = true;
+                return;
+            }
+        }
+
+        this.finishUnit();
+    }
+
+    public void popNamespace(String ns) {
+        this.namespaceManager.popNamespace(ns);
+        if (this.currentUnit() instanceof NamespaceUnit) {
+            this.finishUnit();
+        }
+    }
+
+
+    public void pushNamespace(String prefix, String uri) {
+
+        if (log.isLoggable(Level.FINE)) {
+            log.fine("Namespace Pushed " + prefix + ": " + uri);
+        }
+
+        boolean alreadyPresent = this.namespaceManager.getNamespace(prefix) != null;
+        this.namespaceManager.pushNamespace(prefix, uri);
+        NamespaceUnit unit;
+        if (this.currentUnit() instanceof NamespaceUnit && !alreadyPresent) {
+            unit = (NamespaceUnit) this.currentUnit();
+        } else {
+            unit = new NamespaceUnit(this.tagLibrary);
+            this.startUnit(unit);
+        }
+        unit.setNamespace(prefix, uri);
+    }
+
+    public FaceletHandler createFaceletHandler() {
+        return ((CompilationUnit) this.units.get(0)).createFaceletHandler();
+    }
+
+    private CompilationUnit currentUnit() {
+        if (!this.units.isEmpty()) {
+            return (CompilationUnit) this.units.peek();
+        }
+        return null;
+    }
+
+    private void finishUnit() {
+        CompilationUnit unit = this.units.pop();
+        unit.finishNotify(this);
+
+        if (log.isLoggable(Level.FINE)) {
+            log.fine("Finished Unit: " + unit);
+        }
+    }
+
+//    private CompilationUnit searchUnits(Class type) {
+//        CompilationUnit unit = null;
+//        int i = this.units.size();
+//        while (unit == null && --i >= 0) {
+//            if (type.isAssignableFrom(this.units.get(i).getClass())) {
+//                unit = (CompilationUnit) this.units.get(i);
+//            }
+//        }
+//        return unit;
+//    }
+
+    private void startUnit(CompilationUnit unit) {
+
+        if (log.isLoggable(Level.FINE)) {
+            log.fine("Starting Unit: " + unit + " and adding it to parent: "
+                    + this.currentUnit());
+        }
+
+        this.currentUnit().addChild(unit);
+        this.units.push(unit);
+        unit.startNotify(this);
+    }
+
+    private Tag trimAttributes(Tag tag) {
+        Tag t = this.trimJSFCAttribute(tag);
+        t = this.trimNSAttributes(t);
+        return t;
+    }
+
+    protected static boolean isRemove(String ns, String name) {
+        return (UILibrary.Namespace.equals(ns) || UILibrary.XMLNSNamespace.equals(ns))
+                && "remove".equals(name);
+    }
+
+    // edburns: This is the magic line that tells the system to trim out the 
+    // extra content above and below the tag.
+    protected static boolean isTrimmed(String ns, String name) {
+        boolean matchInUILibrary = (UILibrary.Namespace.equals(ns) || UILibrary.XMLNSNamespace.equals(ns)) && 
+                (CompositionHandler.Name.equals(name) || 
+                ComponentRefHandler.Name.equals(name));
+        return matchInUILibrary;
+    }
+
+    protected static boolean isImplementation(String ns, String name) {
+        boolean matchInCompositeLibrary = (CompositeLibrary.Namespace.equals(ns) || CompositeLibrary.XMLNSNamespace.equals(ns)) && 
+                (ImplementationHandler.Name.equals(name));
+        return matchInCompositeLibrary;
+    }
+
+    protected static boolean isInterface(String ns, String name) {
+        boolean matchInCompositeLibrary = (CompositeLibrary.Namespace.equals(ns) || CompositeLibrary.XMLNSNamespace.equals(ns)) && 
+                (InterfaceHandler.Name.equals(name));
+        return matchInCompositeLibrary;
+    }
+
+    private String[] determineQName(Tag tag) {
+        TagAttribute attr = tag.getAttributes().get("jsfc");
+        if (attr != null) {
+            if (log.isLoggable(Level.FINE)) {
+                log.fine(attr + " JSF Facelet Compile Directive Found");
+            }
+            String value = attr.getValue();
+            String namespace, localName;
+            int c = value.indexOf(':');
+            if (c == -1) {
+                namespace = this.namespaceManager.getNamespace("");
+                localName = value;
+            } else {
+                String prefix = value.substring(0, c);
+                namespace = this.namespaceManager.getNamespace(prefix);
+                if (namespace == null) {
+                    throw new TagAttributeException(tag, attr,
+                            "No Namespace matched for: " + prefix);
+                }
+                localName = value.substring(c + 1);
+            }
+            return new String[] { namespace, localName };
+        } else {
+            return new String[] { tag.getNamespace(), tag.getLocalName() };
+        }
+    }
+
+    private Tag trimJSFCAttribute(Tag tag) {
+        TagAttribute attr = tag.getAttributes().get("jsfc");
+        if (attr != null) {
+            TagAttribute[] oa = tag.getAttributes().getAll();
+            TagAttribute[] na = new TagAttribute[oa.length - 1];
+            int p = 0;
+            for (int i = 0; i < oa.length; i++) {
+                if (!"jsfc".equals(oa[i].getLocalName())) {
+                    na[p++] = oa[i];
+                }
+            }
+            return new Tag(tag, new TagAttributesImpl(na));
+        }
+        return tag;
+    }
+
+    private Tag trimNSAttributes(Tag tag) {
+        TagAttribute[] attr = tag.getAttributes().getAll();
+        int remove = 0;
+        for (int i = 0; i < attr.length; i++) {
+            if (attr[i].getQName().startsWith("xmlns")
+                    && this.tagLibrary.containsNamespace(attr[i].getValue(), null)) {
+                remove |= 1 << i;
+                if (log.isLoggable(Level.FINE)) {
+                    log.fine(attr[i] + " Namespace Bound to TagLibrary");
+                }
+            }
+        }
+        if (remove == 0) {
+            return tag;
+        } else {
+            List attrList = new ArrayList(attr.length);
+            int p = 0;
+            for (int i = 0; i < attr.length; i++) {
+                p = 1 << i;
+                if ((p & remove) == p) {
+                    continue;
+                }
+                attrList.add(attr[i]);
+            }
+            attr = (TagAttribute[]) attrList.toArray(new TagAttribute[attrList
+                    .size()]);
+            return new Tag(tag.getLocation(), tag.getNamespace(), tag
+                    .getLocalName(), tag.getQName(), new TagAttributesImpl(attr));
+        }
+    }
+
+    /**
+     * 
+     * @param units the compilation units.
+     * @return Get the view 
+     */
+    private CompilationUnit getViewRootUnitFromStack(Stack<CompilationUnit> units) {
+        CompilationUnit result = null;
+        Iterator<CompilationUnit> iterator = units.iterator();
+        while(iterator.hasNext()) {
+            CompilationUnit compilationUnit = iterator.next();
+            if (compilationUnit instanceof TagUnit) {
+                TagUnit tagUnit = (TagUnit) compilationUnit;
+                String ns = tagUnit.getTag().getNamespace();
+                if ((ns.equals(RIConstants.CORE_NAMESPACE) || ns.equals(RIConstants.CORE_NAMESPACE_NEW)) &&
+                        tagUnit.getTag().getLocalName().equals("view")) {
+                    result = tagUnit;
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/CompilationMessageHolder.java b/com/sun/faces/facelets/compiler/CompilationMessageHolder.java
new file mode 100644
index 0000000..869d692
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/CompilationMessageHolder.java
@@ -0,0 +1,72 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import java.util.List;
+
+/*
+ * The CompilationManager vends one of these
+ * to store compilation messages for later use.  During page compilation,
+ * if any messages need to be shown to the user, they will be 
+ * added using this interface.  If, during page execution, 
+ * the messages turn out not to be needed, as is the case with
+ * a foreign xml element nested within a <composite:extension> element,
+ * this interface can be used to remove the messages.
+ * 
+ * Currently the messages are keyed by namespace prefix.
+ * 
+ * The EncodingHandler class is always the outermost FaceletHandler in any 
+ * Facelet compilation unit.  Therefore, this handler is used
+ * to anchor the implementation of the CompilationMessageHolder so
+ * other tags can access it.  See EncodingHandler for how to do it.
+ * 
+ */
+public interface CompilationMessageHolder {
+    
+    public List<FacesMessage> getNamespacePrefixMessages(FacesContext context, String prefix);
+    
+    public void removeNamespacePrefixMessages(String prefix);
+    
+    public void processCompilationMessages(FacesContext context);
+
+}
diff --git a/com/sun/faces/facelets/compiler/CompilationMessageHolderImpl.java b/com/sun/faces/facelets/compiler/CompilationMessageHolderImpl.java
new file mode 100644
index 0000000..d969f44
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/CompilationMessageHolderImpl.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import java.util.*;
+
+/**
+ *
+ * @author edburns
+ */
+public class CompilationMessageHolderImpl implements CompilerPackageCompilationMessageHolder {
+    
+    private Map<String, List<FacesMessage>> messageListMap;
+    private CompilationManager compilationManager;
+
+
+    private Map<String, List<FacesMessage>> getMessageListMap() {
+        if (null == messageListMap) {
+            messageListMap = new HashMap<String, List<FacesMessage>>();
+        }
+        return messageListMap;
+    }
+    
+    public List<FacesMessage> getNamespacePrefixMessages(FacesContext context,
+            String prefix) {
+        List<FacesMessage> result = null;
+        Map<String, List<FacesMessage>> map = getMessageListMap();
+        if (null == (result = map.get(prefix))) {
+            result = new ArrayList<FacesMessage>();
+            map.put(prefix, result);
+        }
+        
+        return result;
+    }
+
+    public void processCompilationMessages(FacesContext context) {
+        Map<String, List<FacesMessage>> map = getMessageListMap();
+        Collection<List<FacesMessage>> values = map.values();
+        for (List<FacesMessage> curList : values) {
+            for (FacesMessage curMessage : curList) {
+                context.addMessage(null, curMessage);
+            }
+        }
+    }
+
+    public void removeNamespacePrefixMessages(String prefix) {
+        Map<String, List<FacesMessage>> map = getMessageListMap();
+        map.remove(prefix);
+    }
+
+    public CompilationManager getCurrentCompositeComponentCompilationManager() {
+        return compilationManager;
+    }
+
+    public void setCurrentCompositeComponentCompilationManager(CompilationManager manager) {
+        this.compilationManager = manager;
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/CompilationUnit.java b/com/sun/faces/facelets/compiler/CompilationUnit.java
new file mode 100644
index 0000000..b77ed10
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/CompilationUnit.java
@@ -0,0 +1,125 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.CompositeFaceletHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.FaceletHandler;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: CompilationUnit.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+class CompilationUnit {
+
+    protected final static FaceletHandler LEAF = new FaceletHandler() {
+        public void apply(FaceletContext ctx, UIComponent parent)
+                throws IOException {
+        }
+        public String toString() {
+            return "FaceletHandler Tail";
+        }
+    };
+
+    private List children;
+
+    public CompilationUnit() {
+    }
+
+    protected void startNotify(CompilationManager manager) {
+
+    }
+
+    protected void finishNotify(CompilationManager manager) {
+        
+    }
+
+    public void addChild(CompilationUnit unit) {
+        if (this.children == null) {
+            this.children = new ArrayList();
+        }
+        this.children.add(unit);
+    }
+
+    public FaceletHandler createFaceletHandler() {
+        return this.getNextFaceletHandler();
+    }
+
+    protected final FaceletHandler getNextFaceletHandler() {
+        if (this.children == null || this.children.size() == 0) {
+            return LEAF;
+        }
+        if (this.children.size() == 1) {
+            CompilationUnit u = (CompilationUnit) this.children.get(0);
+            return u.createFaceletHandler();
+        }
+        FaceletHandler[] fh = new FaceletHandler[this.children.size()];
+        for (int i = 0; i < fh.length; i++) {
+            fh[i] = ((CompilationUnit) this.children.get(i))
+                    .createFaceletHandler();
+        }
+        return new CompositeFaceletHandler(fh);
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/Compiler.java b/com/sun/faces/facelets/compiler/Compiler.java
new file mode 100644
index 0000000..54cd146
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/Compiler.java
@@ -0,0 +1,239 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.CompositeTagDecorator;
+import com.sun.faces.facelets.tag.CompositeTagLibrary;
+import com.sun.faces.facelets.tag.TagLibrary;
+import com.sun.faces.facelets.util.ReflectionUtil;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletException;
+import javax.faces.view.facelets.FaceletHandler;
+import javax.faces.view.facelets.TagDecorator;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A Compiler instance may handle compiling multiple sources
+ * 
+ * @author Jacob Hookom
+ * @version $Id: Compiler.java 11242 2012-12-19 16:03:38Z mriem $
+ */
+public abstract class Compiler {
+
+    protected final static Logger log = FacesLogger.FACELETS_COMPILER.getLogger();
+
+    public final static String EXPRESSION_FACTORY = "compiler.ExpressionFactory";
+
+    private static final TagLibrary EMPTY_LIBRARY = new CompositeTagLibrary(
+            new TagLibrary[0]);
+
+    private static final TagDecorator EMPTY_DECORATOR = new CompositeTagDecorator(
+            new TagDecorator[0]);
+
+    private boolean validating = false;
+
+    private boolean trimmingWhitespace = false;
+
+    private boolean trimmingComments = false;
+
+    private final List libraries = new ArrayList();
+
+    private final List decorators = new ArrayList();
+
+    private final Map features = new HashMap();
+
+
+    /**
+     * 
+     */
+    public Compiler() {
+        
+    }
+
+    public final FaceletHandler compile(URL src, String alias)
+    throws IOException {
+        //if (!this.initialized)
+        //    this.initialize();
+        return this.doCompile(src, alias);
+    }
+
+    public final FaceletHandler metadataCompile(URL src, String alias)
+    throws IOException {
+
+        return this.doMetadataCompile(src, alias);
+    }
+
+    protected abstract FaceletHandler doMetadataCompile(URL src, String alias)
+    throws IOException;
+
+    protected abstract FaceletHandler doCompile(URL src, String alias)
+    throws IOException;
+
+    public final TagDecorator createTagDecorator() {
+        if (this.decorators.size() > 0) {
+            return new CompositeTagDecorator((TagDecorator[]) this.decorators
+                    .toArray(new TagDecorator[this.decorators.size()]));
+        }
+        return EMPTY_DECORATOR;
+    }
+
+    public final void addTagDecorator(TagDecorator decorator) {
+        Util.notNull("decorator", decorator);
+        if (!this.decorators.contains(decorator)) {
+            this.decorators.add(decorator);
+        }
+    }
+
+    public final ExpressionFactory createExpressionFactory() {
+        ExpressionFactory el = null;
+        el = (ExpressionFactory) this.featureInstance(EXPRESSION_FACTORY);
+        if (el == null) {
+            try {
+                el = FacesContext.getCurrentInstance().getApplication()
+                        .getExpressionFactory();
+                if (el == null) {
+                	if (log.isLoggable(Level.WARNING)) {
+	                    log.warning("No default ExpressionFactory from Faces Implementation, attempting to load from Feature["
+	                                + EXPRESSION_FACTORY + "]");
+                	}
+                }
+            } catch (Exception e) {
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST, "Unable to get ExpressionFactory because of: ", e);
+                }
+            }
+        }
+        if (el == null) {
+            this.features.put(EXPRESSION_FACTORY, "com.sun.el.ExpressionFactoryImpl");
+            el = (ExpressionFactory) this.featureInstance(EXPRESSION_FACTORY);
+        }
+        return el;
+    }
+
+    private final Object featureInstance(String name) {
+        String type = (String) this.features.get(name);
+        if (type != null) {
+            try {
+                return ReflectionUtil.forName(type).newInstance();
+            } catch (Throwable t) {
+                throw new FaceletException("Could not instantiate feature["
+                        + name + "]: " + type);
+            }
+        }
+        return null;
+    }
+
+    public final TagLibrary createTagLibrary(CompilationMessageHolder unit) {
+        if (this.libraries.size() > 0) {
+            return new CompositeTagLibrary((TagLibrary[]) this.libraries
+                    .toArray(new TagLibrary[this.libraries.size()]), unit);
+        }
+        return EMPTY_LIBRARY;
+    }
+
+    public final void addTagLibrary(TagLibrary library) {
+        Util.notNull("library", library);
+        if (!this.libraries.contains(library)) {
+            this.libraries.add(library);
+        }
+    }
+
+    public final void setFeature(String name, String value) {
+        this.features.put(name, value);
+    }
+
+    public final String getFeature(String name) {
+        return (String) this.features.get(name);
+    }
+
+    public final boolean isTrimmingComments() {
+        return this.trimmingComments;
+    }
+
+    public final void setTrimmingComments(boolean trimmingComments) {
+        this.trimmingComments = trimmingComments;
+    }
+
+    public final boolean isTrimmingWhitespace() {
+        return this.trimmingWhitespace;
+    }
+
+    public final void setTrimmingWhitespace(boolean trimmingWhitespace) {
+        this.trimmingWhitespace = trimmingWhitespace;
+    }
+
+    public final boolean isValidating() {
+        return this.validating;
+    }
+
+    public final void setValidating(boolean validating) {
+        this.validating = validating;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/CompilerPackageCompilationMessageHolder.java b/com/sun/faces/facelets/compiler/CompilerPackageCompilationMessageHolder.java
new file mode 100644
index 0000000..703b3e7
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/CompilerPackageCompilationMessageHolder.java
@@ -0,0 +1,48 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+interface CompilerPackageCompilationMessageHolder extends CompilationMessageHolder {
+    
+
+    CompilationManager getCurrentCompositeComponentCompilationManager();
+    void setCurrentCompositeComponentCompilationManager(CompilationManager manager);
+}
diff --git a/com/sun/faces/facelets/compiler/EncodingHandler.java b/com/sun/faces/facelets/compiler/EncodingHandler.java
new file mode 100644
index 0000000..d5b5fc5
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/EncodingHandler.java
@@ -0,0 +1,101 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.RIConstants;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.FaceletHandler;
+import java.io.IOException;
+import java.util.Map;
+import javax.faces.context.FacesContext;
+
+public class EncodingHandler implements FaceletHandler {
+
+    private final FaceletHandler next;
+    private final String encoding;
+    private final CompilationMessageHolder messageHolder;
+    
+    public EncodingHandler(FaceletHandler next, String encoding,
+            CompilationMessageHolder messageHolder) {
+        this.next = next;
+        this.encoding = encoding;
+        this.messageHolder = messageHolder;
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        FacesContext context = ctx.getFacesContext();
+        Map<Object,Object> ctxAttributes = context.getAttributes();
+        ctxAttributes.put("facelets.compilationMessages", this.messageHolder);
+        this.next.apply(ctx, parent);
+        ctxAttributes.remove("facelets.compilationMessages");
+        this.messageHolder.processCompilationMessages(ctx.getFacesContext());
+        if (!ctxAttributes.containsKey(RIConstants.FACELETS_ENCODING_KEY)) {
+            ctx.getFacesContext().getAttributes().put(RIConstants.FACELETS_ENCODING_KEY, this.encoding);
+        }
+    }
+    
+    public static CompilationMessageHolder getCompilationMessageHolder(FaceletContext ctx) {
+
+        return (CompilationMessageHolder) ctx.getFacesContext().getAttributes().get("facelets.compilationMessages");
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/EndElementInstruction.java b/com/sun/faces/facelets/compiler/EndElementInstruction.java
new file mode 100644
index 0000000..1aebdec
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/EndElementInstruction.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.MessageUtils;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+import java.util.List;
+
+final class EndElementInstruction implements Instruction {
+
+    private static final String HEAD_ELEMENT = "head";
+    private static final String BODY_ELEMENT = "body";
+
+    private final String element;
+
+    public EndElementInstruction(String element) {
+        this.element = element;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        if (HEAD_ELEMENT.equalsIgnoreCase(this.element)) {
+            warnUnhandledResources(context, HEAD_ELEMENT);
+        }
+        if (BODY_ELEMENT.equalsIgnoreCase(this.element)) {
+            warnUnhandledResources(context, BODY_ELEMENT);
+            RenderKitUtils.renderUnhandledMessages(context);
+        }
+        context.getResponseWriter().endElement(this.element);
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        return this;
+    }
+
+    public boolean isLiteral() {
+        return true;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    private void warnUnhandledResources(FacesContext ctx, String target) {
+
+        UIViewRoot root = ctx.getViewRoot();
+        if (root != null) {
+            List<UIComponent> headResources =
+                  root.getComponentResources(ctx, target);
+            if (headResources != null && !headResources.isEmpty()) {
+                FacesMessage m =
+                      MessageUtils.getExceptionMessage(MessageUtils.NO_RESOURCE_TARGET_AVAILABLE,
+                                                       target);
+                ctx.addMessage(null, m);
+            }
+        }
+
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/ImplementationUnit.java b/com/sun/faces/facelets/compiler/ImplementationUnit.java
new file mode 100644
index 0000000..1ecdbef
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/ImplementationUnit.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.TagLibrary;
+
+import javax.faces.view.facelets.Tag;
+
+class ImplementationUnit extends TrimmedTagUnit {
+
+    public ImplementationUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
+        super(library, namespace, name, tag, id);
+    }
+
+    @Override
+    protected void finishNotify(CompilationManager manager) {
+        ((CompilerPackageCompilationMessageHolder)manager.getCompilationMessageHolder()).
+                setCurrentCompositeComponentCompilationManager(null);
+        super.finishNotify(manager);
+    }
+
+    @Override
+    protected void startNotify(CompilationManager manager) {
+        super.startNotify(manager);
+        ((CompilerPackageCompilationMessageHolder)manager.getCompilationMessageHolder()).
+                setCurrentCompositeComponentCompilationManager(manager);
+    }
+
+
+
+}
diff --git a/com/sun/faces/facelets/compiler/Instruction.java b/com/sun/faces/facelets/compiler/Instruction.java
new file mode 100644
index 0000000..c208cb7
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/Instruction.java
@@ -0,0 +1,70 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+
+interface Instruction {
+    public void write(FacesContext context) throws IOException;
+    public Instruction apply(ExpressionFactory factory, ELContext ctx);
+    public boolean isLiteral();
+}
diff --git a/com/sun/faces/facelets/compiler/InterfaceUnit.java b/com/sun/faces/facelets/compiler/InterfaceUnit.java
new file mode 100644
index 0000000..6704d1f
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/InterfaceUnit.java
@@ -0,0 +1,71 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.TagLibrary;
+
+import javax.faces.view.facelets.Tag;
+
+final class InterfaceUnit extends TagUnit {
+
+    public InterfaceUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
+        super(library, namespace, name, tag, id);
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/LiteralAttributeInstruction.java b/com/sun/faces/facelets/compiler/LiteralAttributeInstruction.java
new file mode 100644
index 0000000..a17fff5
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/LiteralAttributeInstruction.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+
+
+final class LiteralAttributeInstruction implements Instruction {
+    private final String attr;
+
+    private final String text;
+
+    public LiteralAttributeInstruction(String attr, String text) {
+        this.attr = attr;
+        this.text = text;
+    }
+
+    public void write(FacesContext context) throws IOException {
+      context.getResponseWriter().writeAttribute(this.attr, this.text, null);
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        return this;
+    }
+
+    public boolean isLiteral() {
+        return true;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/LiteralCommentInstruction.java b/com/sun/faces/facelets/compiler/LiteralCommentInstruction.java
new file mode 100644
index 0000000..426af9c
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/LiteralCommentInstruction.java
@@ -0,0 +1,84 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+
+final class LiteralCommentInstruction implements Instruction {
+    private final String text;
+
+    public LiteralCommentInstruction(String text) {
+        this.text = text;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        context.getResponseWriter().writeComment(this.text);
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        return this;
+    }
+
+    public boolean isLiteral() {
+        return true;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/LiteralTextInstruction.java b/com/sun/faces/facelets/compiler/LiteralTextInstruction.java
new file mode 100644
index 0000000..066785b
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/LiteralTextInstruction.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.config.FaceletsConfiguration;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+
+final class LiteralTextInstruction implements Instruction {
+    private final String text;
+
+    public LiteralTextInstruction(String text) {
+        this.text = text;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        if (FaceletsConfiguration.getInstance(context).isEscapeInlineText(context)) {
+            context.getResponseWriter().writeText(this.text, null);
+        } else {
+            context.getResponseWriter().write(this.text);
+        }
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        return this;
+    }
+
+    public boolean isLiteral() {
+        return true;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/LiteralXMLInstruction.java b/com/sun/faces/facelets/compiler/LiteralXMLInstruction.java
new file mode 100644
index 0000000..17ecc2b
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/LiteralXMLInstruction.java
@@ -0,0 +1,93 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+
+final class LiteralXMLInstruction implements Instruction {
+
+    private final static char[] STOP = new char[0];
+    
+    private final char[] instruction;
+    private final int len;
+    
+    public LiteralXMLInstruction(String literal) {
+        this.instruction = literal.toCharArray();
+        this.len = this.instruction.length;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        ResponseWriter rw = context.getResponseWriter();
+        rw.writeText(STOP, 0, 0); // hack to get closing elements
+        rw.write(this.instruction, 0, this.len);
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        return this;
+    }
+
+    public boolean isLiteral() {
+        return true;
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/NamespaceHandler.java b/com/sun/faces/facelets/compiler/NamespaceHandler.java
new file mode 100644
index 0000000..e21afd8
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/NamespaceHandler.java
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.CompositeFunctionMapper;
+import com.sun.faces.facelets.tag.TagLibrary;
+import com.sun.faces.el.ELContextImpl;
+
+import javax.el.FunctionMapper;
+import javax.el.ELContext;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.FaceletHandler;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+final class NamespaceHandler extends FunctionMapper implements FaceletHandler {
+
+    private final TagLibrary library;
+    private final Map ns;
+    private FaceletHandler next;
+    
+    public NamespaceHandler(FaceletHandler next, TagLibrary library, Map ns) {
+        this.library = library;
+        this.ns = ns;
+        this.next = next;
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        FunctionMapper orig = ctx.getFunctionMapper();
+        pushMapper(ctx.getFacesContext(), this);
+        ctx.setFunctionMapper(new CompositeFunctionMapper(this, orig));
+        try {
+            next.apply(ctx, parent);
+        } finally {
+            ctx.setFunctionMapper(orig);
+        }
+    }
+
+    public Method resolveFunction(String prefix, String localName) {
+        String uri = (String) this.ns.get(prefix);
+        if (uri != null) {
+            return this.library.createFunction(uri, localName);
+        }
+        return null;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void pushMapper(FacesContext ctx, FunctionMapper mapper) {
+
+        ELContext elContext = ctx.getELContext();
+        if (elContext instanceof ELContextImpl) {
+            ((ELContextImpl) elContext).setFunctionMapper(mapper);
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/NamespaceManager.java b/com/sun/faces/facelets/compiler/NamespaceManager.java
new file mode 100644
index 0000000..78dc876
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/NamespaceManager.java
@@ -0,0 +1,135 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.TagLibrary;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: NamespaceManager.java 10788 2012-10-02 16:21:29Z mriem $
+ */
+final class NamespaceManager {
+
+    private final static class NS {
+        public final String prefix;
+
+        public final String namespace;
+
+        public NS(String prefix, String ns) {
+            this.prefix = prefix;
+            this.namespace = ns;
+        }
+    }
+
+    private final List namespaces;
+
+    /**
+     * 
+     */
+    public NamespaceManager() {
+        this.namespaces = new ArrayList();
+    }
+
+    public void reset() {
+        this.namespaces.clear();
+    }
+
+    public void pushNamespace(String prefix, String namespace) {
+        NS ns = new NS(prefix, namespace);
+        this.namespaces.add(0, ns);
+    }
+
+    public String getNamespace(String prefix) {
+        NS ns = null;
+        for (int i = 0; i < this.namespaces.size(); i++) {
+            ns = (NS) this.namespaces.get(i);
+            if (ns.prefix.equals(prefix)) {
+                return ns.namespace;
+            }
+        }
+        return null;
+    }
+
+    public void popNamespace(String prefix) {
+        NS ns = null;
+        for (int i = 0; i < this.namespaces.size(); i++) {
+            ns = (NS) this.namespaces.get(i);
+            if (ns.prefix.equals(prefix)) {
+                this.namespaces.remove(i);
+                return;
+            }
+        }
+    }
+    
+    public NamespaceUnit toNamespaceUnit(TagLibrary library) {
+        NamespaceUnit unit = new NamespaceUnit(library);
+        if (this.namespaces.size() > 0) {
+            NS ns = null;
+            for (int i = this.namespaces.size() - 1; i >= 0; i--) {
+                ns = (NS) this.namespaces.get(i);
+                unit.setNamespace(ns.prefix, ns.namespace);
+            }
+        }
+        return unit;
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/NamespaceUnit.java b/com/sun/faces/facelets/compiler/NamespaceUnit.java
new file mode 100644
index 0000000..0950d4c
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/NamespaceUnit.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.TagLibrary;
+
+import javax.faces.view.facelets.FaceletHandler;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: NamespaceUnit.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+final class NamespaceUnit extends CompilationUnit {
+
+    private final Map ns = new HashMap();
+    private final TagLibrary library;
+    
+    public NamespaceUnit(TagLibrary library) {
+        this.library = library;
+    }
+
+    public FaceletHandler createFaceletHandler() {
+        FaceletHandler next = this.getNextFaceletHandler();
+        return new NamespaceHandler(next, this.library, this.ns);
+    }
+    
+    public void setNamespace(String prefix, String uri) {
+        this.ns.put(prefix, uri);
+    }
+    
+    public void addChild(CompilationUnit unit) {
+        super.addChild(unit);
+    }
+    
+
+}
diff --git a/com/sun/faces/facelets/compiler/RemoveUnit.java b/com/sun/faces/facelets/compiler/RemoveUnit.java
new file mode 100644
index 0000000..f763ea3
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/RemoveUnit.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.faces.view.facelets.FaceletHandler;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: RemoveUnit.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+final class RemoveUnit extends CompilationUnit {
+
+    public RemoveUnit() {
+        super();
+    }
+
+    public void addChild(CompilationUnit unit) {
+        // do nothing
+    }
+
+    public FaceletHandler createFaceletHandler() {
+        return LEAF;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/SAXCompiler.java b/com/sun/faces/facelets/compiler/SAXCompiler.java
new file mode 100644
index 0000000..fb64b6a
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/SAXCompiler.java
@@ -0,0 +1,533 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.FaceletsConfiguration;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.tag.TagAttributeImpl;
+import com.sun.faces.facelets.tag.TagAttributesImpl;
+import com.sun.faces.util.Util;
+import org.xml.sax.*;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.faces.view.Location;
+import javax.faces.view.facelets.*;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+/**
+ * Compiler implementation that uses SAX
+ * 
+ * @author Jacob Hookom
+ * @see Compiler
+ * @version $Id: SAXCompiler.java 12577 2013-10-04 16:26:14Z mriem $
+ */
+public final class SAXCompiler extends Compiler {
+    
+    private final static Pattern XmlDeclaration = Pattern.compile("^<\\?xml.+?version=['\"](.+?)['\"](.+?encoding=['\"]((.+?))['\"])?.*?\\?>");
+
+    private static class CompilationHandler extends DefaultHandler implements
+            LexicalHandler {
+
+        protected final String alias;
+
+        protected boolean inDocument = false;
+
+        protected Locator locator;
+
+        protected final CompilationManager unit;
+
+        public CompilationHandler(CompilationManager unit, String alias) {
+            this.unit = unit;
+            this.alias = alias;
+        }
+
+        public void characters(char[] ch, int start, int length)
+                throws SAXException {
+            if (this.inDocument) {
+                this.unit.writeText(new String(ch, start, length));
+            }
+        }
+
+        public void comment(char[] ch, int start, int length)
+                throws SAXException {
+            if (this.inDocument) {
+                if (!unit.getWebConfiguration().getFaceletsConfiguration().isConsumeComments(alias)) {
+                    this.unit.writeComment(new String(ch, start, length));
+                }
+            }
+        }
+
+        protected TagAttributesImpl createAttributes(Attributes attrs) {
+            int len = attrs.getLength();
+            TagAttributeImpl[] ta = new TagAttributeImpl[len];
+            for (int i = 0; i < len; i++) {
+                ta[i] = new TagAttributeImpl(this.createLocation(),
+                        attrs.getURI(i), attrs.getLocalName(i), attrs
+                                .getQName(i), attrs.getValue(i));
+            }
+            return new TagAttributesImpl(ta);
+        }
+
+        protected Location createLocation() {
+            Location result = null;
+            if (null != locator) {
+                result = new Location(this.alias, this.locator.getLineNumber(),
+                    this.locator.getColumnNumber());
+            } else {
+                if (log.isLoggable(Level.SEVERE)) {
+                    log.log(Level.SEVERE, "Unable to create Location due to null locator instance variable.");
+                }
+            }
+            return result;
+        }
+
+        public void endCDATA() throws SAXException {
+            if (this.inDocument) {
+                if (!unit.getWebConfiguration().getFaceletsConfiguration().isConsumeCDATA(alias)) {
+                    this.unit.writeInstruction("]]>");
+                }
+            }
+        }
+
+        public void endDocument() throws SAXException {
+            super.endDocument();
+        }
+
+        public void endDTD() throws SAXException {
+            this.inDocument = true;
+        }
+
+        public void endElement(String uri, String localName, String qName)
+                throws SAXException {
+            
+            this.unit.popTag();
+        }
+
+        public void endEntity(String name) throws SAXException {
+        }
+
+        public void endPrefixMapping(String prefix) throws SAXException {
+            this.unit.popNamespace(prefix);
+        }
+
+        public void fatalError(SAXParseException e) throws SAXException {
+            if (this.locator != null) {
+            throw new SAXException("Error Traced[line: "
+                    + this.locator.getLineNumber() + "] " + e.getMessage());
+            } else {
+                throw e;
+            }
+        }
+
+        public void ignorableWhitespace(char[] ch, int start, int length)
+                throws SAXException {
+            if (this.inDocument) {
+                this.unit.writeWhitespace(new String(ch, start, length));
+            }
+        }
+
+        public InputSource resolveEntity(String publicId, String systemId)
+                throws SAXException {
+            String dtd = "com/sun/faces/xhtml/default.dtd";
+            /*if ("-//W3C//DTD XHTML 1.0 Transitional//EN".equals(publicId)) {
+                dtd = "xhtml1-transitional.dtd";
+            } else if (systemId != null && systemId.startsWith("file:/")) {
+                return new InputSource(systemId);
+            }*/
+            URL url = this.getClass().getClassLoader().getResource(dtd);
+            return new InputSource(url.toString());
+        }
+
+        public void setDocumentLocator(Locator locator) {
+            this.locator = locator;
+        }
+
+        public void startCDATA() throws SAXException {
+            if (this.inDocument) {
+                if (!unit.getWebConfiguration().getFaceletsConfiguration().isConsumeCDATA(alias)) {
+                    this.unit.writeInstruction("<![CDATA[");
+                }
+            }
+        }
+
+        public void startDocument() throws SAXException {
+            this.inDocument = true;
+        }
+
+        public void startDTD(String name, String publicId, String systemId)
+                throws SAXException {
+            // If there is a process-as value for the extension, only allow
+            // the PI to be written if its value is xhtml
+            FaceletsConfiguration facelets = this.unit.getWebConfiguration().getFaceletsConfiguration();
+            boolean processAsXhtml =
+                    facelets.isProcessCurrentDocumentAsFaceletsXhtml(alias);
+
+
+            if (this.inDocument && (processAsXhtml || facelets.isOutputHtml5Doctype(alias))) {
+                boolean isHtml5 = facelets.isOutputHtml5Doctype(alias);
+                // If we're in an ajax request, this is unnecessary and bugged
+                // RELEASE_PENDING - this is a hack, and should probably not be here -
+                // but the alternative is to somehow figure out how *not* to escape the "<!"
+                // within the cdata of the ajax response.  Putting the PENDING in here to
+                // remind me to have rlubke take a look.  But I'm stumped.
+                StringBuffer sb = new StringBuffer(64);
+                sb.append("<!DOCTYPE ").append(name);
+                if (!isHtml5 && publicId != null) {
+                    sb.append(" PUBLIC \"").append(publicId).append("\"");
+                    if (systemId != null) {
+                        sb.append(" \"").append(systemId).append("\"");
+                    }
+                } else if (!isHtml5 && systemId != null) {
+                    sb.append(" SYSTEM \"").append(systemId).append("\"");
+                }
+                sb.append(">\n");
+                // It is essential to save the doctype here because this is the 
+                // *only* time we will have access to it.
+                Util.saveDOCTYPEToFacesContextAttributes(sb.toString());
+            }
+            this.inDocument = false;
+        }
+
+        public void startElement(String uri, String localName, String qName,
+                Attributes attributes) throws SAXException {
+
+            TagAttributes tagAttrs = this.createAttributes(attributes);
+            Tag tag = new Tag(this.createLocation(), uri, localName, qName, tagAttrs);
+            tagAttrs.setTag(tag);
+            this.unit.pushTag(tag);
+            
+        }
+
+        public void startEntity(String name) throws SAXException {
+        }
+
+        public void startPrefixMapping(String prefix, String uri)
+                throws SAXException {
+            this.unit.pushNamespace(prefix, uri);
+        }
+
+        public void processingInstruction(String target, String data)
+                throws SAXException {
+            if (this.inDocument) {
+
+                // If there is a process-as value for the extension, only allow
+                // the PI to be written if its value is xhtml
+                boolean processAsXhtml =
+                        this.unit.getWebConfiguration().getFaceletsConfiguration().isProcessCurrentDocumentAsFaceletsXhtml(alias);
+
+                if (processAsXhtml) {
+                    StringBuffer sb = new StringBuffer(64);
+                    sb.append("<?").append(target).append(' ').append(data).append(
+                            "?>\n");
+                    this.unit.writeInstruction(sb.toString());
+                }
+            }
+        }
+    }
+
+
+    private static class MetadataCompilationHandler extends CompilationHandler {
+
+        private static final String METADATA_HANDLER = "metadata";
+        private boolean processingMetadata = false;
+        private boolean metadataProcessed = false;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        public MetadataCompilationHandler(CompilationManager unit, String alias) {
+
+            super(unit, alias);
+
+        }
+
+
+        // ------------------------------------- Methods from CompilationHandler
+
+
+        @Override
+        public void characters(char[] ch, int start, int length)
+        throws SAXException {
+            if (!metadataProcessed) {
+                if (processingMetadata) {
+                    // PENDING consider optimizing this to be a no-op
+                    // on whitespace, but don't instantiate the String 
+                    // just to test that.
+                    this.unit.writeText(new String(ch, start, length));
+                }
+            }
+
+        }
+
+        @Override
+        public void comment(char[] ch, int start, int length)
+        throws SAXException {
+            // no-op
+        }
+
+        @Override
+        public void endCDATA() throws SAXException {
+            // no-op
+        }
+
+        @Override
+        public void ignorableWhitespace(char[] ch, int start, int length)
+        throws SAXException {
+           // no-op
+        }
+
+        @Override
+        public void startCDATA() throws SAXException {
+            // no-op
+        }
+
+        @Override
+        public void startDTD(String name, String publicId, String systemId)
+        throws SAXException {
+            // no-op
+        }
+
+        @Override
+        public void startEntity(String name) throws SAXException {
+            // no-op
+        }
+
+        @Override
+        public void processingInstruction(String target, String data)
+        throws SAXException {
+            // no-op
+        }
+
+
+
+        @Override
+        public void startElement(String uri, String localName, String qName, Attributes attributes)
+        throws SAXException {
+
+            if (!metadataProcessed) {
+                if (!processingMetadata && 
+                        (RIConstants.CORE_NAMESPACE.equals(uri) ||
+                         RIConstants.CORE_NAMESPACE_NEW.equals(uri)                      
+                        )) {
+                    if (METADATA_HANDLER.equals(localName)) {
+                        processingMetadata = true;
+                    }
+                }
+                if (processingMetadata) {
+                    super.startElement(uri, localName, qName, attributes);
+                }
+            } 
+            if ((localName.equals("view") && 
+                    (RIConstants.CORE_NAMESPACE.equals(uri) || RIConstants.CORE_NAMESPACE_NEW.equals(uri)))) {
+                super.startElement(uri, localName, qName, attributes);
+            }
+        }
+
+        @Override
+        public void endElement(String uri, String localName, String qName)
+        throws SAXException {
+
+            if (!metadataProcessed) {
+                if (processingMetadata) {
+                    super.endElement(uri, localName, qName);
+                }
+                if (processingMetadata && 
+                        (RIConstants.CORE_NAMESPACE.equals(uri) ||
+                         RIConstants.CORE_NAMESPACE_NEW.equals(uri)
+                        )) {
+                    if (METADATA_HANDLER.equals(localName)) {
+                        processingMetadata = false;
+                        metadataProcessed = true;
+                    }
+                }
+            }
+            if ((localName.equals("view") && 
+                    (RIConstants.CORE_NAMESPACE.equals(uri) || RIConstants.CORE_NAMESPACE_NEW.equals(uri)))) {
+                super.endElement(uri, localName, qName);
+            }
+        }
+
+    }
+
+    public SAXCompiler() {
+        super();
+    }
+
+    public FaceletHandler doCompile(URL src, String alias) throws IOException {
+
+        CompilationManager mgr = new CompilationManager(alias, this);
+        CompilationHandler handler = new CompilationHandler(mgr, alias);
+        return doCompile(mgr, handler, src, alias);
+
+    }
+
+    public FaceletHandler doMetadataCompile(URL src, String alias)
+    throws IOException {
+
+        CompilationManager mgr = new CompilationManager("metadata/" + alias, this);
+        CompilationHandler handler = new MetadataCompilationHandler(mgr, alias);
+        return doCompile(mgr, handler, src, alias);
+    }
+
+    protected FaceletHandler doCompile(CompilationManager mngr,
+                                       CompilationHandler handler,
+                                       URL src,
+                                       String alias)
+    throws IOException {
+
+        InputStream is = null;
+        String encoding = getEncoding();
+        try {
+            is = new BufferedInputStream(src.openStream(), 1024);
+            writeXmlDecl(is, encoding, mngr);
+            SAXParser parser = this.createSAXParser(handler);
+            parser.parse(is, handler);
+        } catch (SAXException e) {
+            throw new FaceletException("Error Parsing " + alias + ": "
+                    + e.getMessage(), e.getCause());
+        } catch (ParserConfigurationException e) {
+            throw new FaceletException("Error Configuring Parser " + alias
+                    + ": " + e.getMessage(), e.getCause());
+        } catch (FaceletException e) {
+            throw e;
+        } finally {
+            if (is != null) {
+                is.close();
+            }
+        }
+        FaceletHandler result = new EncodingHandler(mngr.createFaceletHandler(), encoding,
+                mngr.getCompilationMessageHolder());
+        mngr.setCompilationMessageHolder(null);
+
+        return result;
+
+    }
+    
+    private String getEncoding() {
+        String result;
+        String encodingFromRequest = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (null != context) {
+            ExternalContext extContext = context.getExternalContext();
+            encodingFromRequest = extContext.getRequestCharacterEncoding();
+        }
+        result = (null != encodingFromRequest) ? encodingFromRequest : RIConstants.CHAR_ENCODING;
+        
+        return result;
+    }
+
+    protected static void writeXmlDecl(InputStream is, String encoding, CompilationManager mngr)
+            throws IOException {
+        is.mark(128);
+        try {
+            byte[] b = new byte[128];
+            if (is.read(b) > 0) {
+                String r = new String(b, encoding);
+                Matcher m = XmlDeclaration.matcher(r);
+                if (m.find()) {
+                    WebConfiguration config = mngr.getWebConfiguration();
+                    FaceletsConfiguration faceletsConfig = config.getFaceletsConfiguration();
+                    boolean currentModeIsXhtml = faceletsConfig.isProcessCurrentDocumentAsFaceletsXhtml(mngr.getAlias());
+
+                    // We want to write the XML declaration if and only if
+                    // the file extension for the current file has a mapping
+                    // with the value of XHTML
+                    if (currentModeIsXhtml) {
+                        Util.saveXMLDECLToFacesContextAttributes(m.group(0) + "\n");
+                    }
+                }
+            }
+        } finally {
+            is.reset();
+        }
+    }
+
+    private SAXParser createSAXParser(CompilationHandler handler)
+            throws SAXException, ParserConfigurationException {
+        SAXParserFactory factory = Util.createSAXParserFactory();
+        factory.setNamespaceAware(true);
+        factory.setFeature("http://xml.org/sax/features/namespace-prefixes",
+                true);
+        factory.setFeature("http://xml.org/sax/features/validation", this
+                .isValidating());
+        factory.setValidating(this.isValidating());
+        SAXParser parser = factory.newSAXParser();
+        XMLReader reader = parser.getXMLReader();
+        reader.setProperty("http://xml.org/sax/properties/lexical-handler",
+                handler);
+        reader.setErrorHandler(handler);
+        reader.setEntityResolver(handler);
+        return parser;
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/StartElementInstruction.java b/com/sun/faces/facelets/compiler/StartElementInstruction.java
new file mode 100644
index 0000000..7172f09
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/StartElementInstruction.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+
+final class StartElementInstruction implements Instruction {
+    private final String element;
+
+    public StartElementInstruction(String element) {
+        this.element = element;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        context.getResponseWriter().startElement(this.element, null);
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        return this;
+    }
+
+    public boolean isLiteral() {
+        return true;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/TagUnit.java b/com/sun/faces/facelets/compiler/TagUnit.java
new file mode 100644
index 0000000..87aad41
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/TagUnit.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.facelets.tag.TagLibrary;
+
+import javax.faces.view.facelets.FaceletException;
+import javax.faces.view.facelets.FaceletHandler;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagConfig;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: TagUnit.java 12012 2013-06-19 23:01:19Z edburns $
+ */
+class TagUnit extends CompilationUnit implements TagConfig {
+
+    private final TagLibrary library;
+
+    private final String id;
+
+    private final Tag tag;
+    
+    private final String namespace;
+    
+    private final String name;
+
+    public TagUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
+        this.library = library;
+        this.tag = tag;
+        this.namespace = namespace;
+        this.name = name;
+        this.id = id;
+    }
+
+    /*
+     * special case if you have a ui:composition tag.  If and only if the
+     * composition is on the same facelet page as the
+     * composite:implementation, throw a FacesException with a helpful error
+     * message.
+     * */
+
+    @Override
+    protected void startNotify(CompilationManager manager) {
+        if (this.name.equals("composition") && (this.namespace.equals(RIConstants.FACELET_NAMESPACE) || this.namespace.equals(RIConstants.FACELET_NAMESPACE))) {
+            CompilerPackageCompilationMessageHolder messageHolder =
+                    (CompilerPackageCompilationMessageHolder) manager.getCompilationMessageHolder();
+            CompilationManager compositeComponentCompilationManager = messageHolder.
+                getCurrentCompositeComponentCompilationManager();
+            if (manager.equals(compositeComponentCompilationManager)) {
+                // PENDING I18N
+                String messageStr = 
+                        "Because the definition of ui:composition causes any " +
+                        "parent content to be ignored, it is invalid to use " +
+                        "ui:composition directly inside of a composite component. " +
+                        "Consider ui:decorate instead.";
+                throw new FaceletException(messageStr);
+            }
+        }
+    }
+
+    public FaceletHandler createFaceletHandler() {
+        return this.library.createTagHandler(this.namespace, this.name, this);
+    }
+
+    public FaceletHandler getNextHandler() {
+        return this.getNextFaceletHandler();
+    }
+
+    public Tag getTag() {
+        return this.tag;
+    }
+
+    public String getTagId() {
+        return this.id;
+    }
+
+    public String toString() {
+        return this.tag.toString();
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/TextInstruction.java b/com/sun/faces/facelets/compiler/TextInstruction.java
new file mode 100644
index 0000000..836a330
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/TextInstruction.java
@@ -0,0 +1,107 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+
+import com.sun.faces.facelets.el.ELText;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+
+final class TextInstruction implements Instruction {
+    private final ELText txt;
+    
+    private final String alias;
+
+    public TextInstruction(String alias, ELText txt) {
+        this.alias = alias;
+        this.txt = txt;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        ResponseWriter out = context.getResponseWriter();
+        try {
+            ELContext elContext = context.getELContext();
+            txt.writeText(out, elContext);
+            //out.writeText(txt.toString(elContext), null);
+        } catch (ELException e) {
+            throw new ELException(this.alias + ": " + e.getMessage(), e.getCause());
+        } catch (Exception e) {
+            throw new ELException(this.alias + ": " + e.getMessage(), e);
+        }
+    }
+
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        ELText nt = this.txt.apply(factory, ctx);
+        if (nt == this.txt) {
+            return this;
+        }
+
+        return new TextInstruction(alias, nt);
+    }
+
+    public boolean isLiteral() {
+        return txt.isLiteral();
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/TextUnit.java b/com/sun/faces/facelets/compiler/TextUnit.java
new file mode 100644
index 0000000..6834184
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/TextUnit.java
@@ -0,0 +1,342 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.ELText;
+
+import javax.el.ELException;
+import javax.faces.view.facelets.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: TextUnit.java 12736 2013-12-20 16:41:31Z edburns $
+ */
+final class TextUnit extends CompilationUnit {
+
+    private final StringBuffer buffer;
+
+    private final StringBuffer textBuffer;
+
+    private final List instructionBuffer;
+
+    private final Stack tags;
+
+    private final List children;
+
+    private boolean startTagOpen;
+
+    private final String alias;
+
+    private final String id;
+    
+    public TextUnit(String alias, String id) {
+        this.alias = alias;
+        this.id = id;
+        this.buffer = new StringBuffer();
+        this.textBuffer = new StringBuffer();
+        this.instructionBuffer = new ArrayList();
+        this.tags = new Stack();
+        this.children = new ArrayList();
+        this.startTagOpen = false;
+    }
+
+    public FaceletHandler createFaceletHandler() {
+        this.flushBufferToConfig(true);
+
+        if (this.children.size() == 0) {
+            return LEAF;
+        }
+
+        FaceletHandler[] h = new FaceletHandler[this.children.size()];
+        Object obj;
+        for (int i = 0; i < h.length; i++) {
+            obj = this.children.get(i);
+            if (obj instanceof FaceletHandler) {
+                h[i] = (FaceletHandler) obj;
+            } else {
+                h[i] = ((CompilationUnit) obj).createFaceletHandler();
+            }
+        }
+        if (h.length == 1) {
+            return h[0];
+        }
+        return new CompositeFaceletHandler(h);
+    }
+
+    private void addInstruction(Instruction instruction) {
+        this.flushTextBuffer(false);
+        this.instructionBuffer.add(instruction);
+    }
+
+    private void flushTextBuffer(boolean child) {
+        if (this.textBuffer.length() > 0) {
+            String s = this.textBuffer.toString();
+
+            if (child) {
+                s = trimRight(s);
+            }
+            if (s.length() > 0) {
+                ELText txt = ELText.parse(s, alias);
+                if (txt != null) {
+                    if (txt.isLiteral()) {
+                        this.instructionBuffer.add(new LiteralTextInstruction(
+                                txt.toString()));
+                    } else {
+                        this.instructionBuffer.add(new TextInstruction(
+                                this.alias, txt));
+                    }
+                }
+            }
+
+        }
+        this.textBuffer.setLength(0);
+    }
+
+    public void write(String text) {
+        this.finishStartTag();
+        this.textBuffer.append(text);
+        this.buffer.append(text);
+    }
+
+    public void writeInstruction(String text) {
+        this.finishStartTag();
+        ELText el = ELText.parse(text);
+        if (el.isLiteral()) {
+            this.addInstruction(new LiteralXMLInstruction(text));
+        } else {
+            this.addInstruction(new XMLInstruction(el));
+        }
+        this.buffer.append(text);
+    }
+
+    public void writeComment(String text) {
+        this.finishStartTag();
+
+        ELText el = ELText.parse(text);
+        if (el.isLiteral()) {
+            this.addInstruction(new LiteralCommentInstruction(text));
+        } else {
+            this.addInstruction(new CommentInstruction(el));
+        }
+
+        this.buffer.append("<!--" + text + "-->");
+    }
+
+    public void startTag(Tag tag) {
+
+        // finish any previously written tags
+        this.finishStartTag();
+
+        // push this tag onto the stack
+        this.tags.push(tag);
+
+        // write it out
+        this.buffer.append('<');
+        this.buffer.append(tag.getQName());
+
+        this.addInstruction(new StartElementInstruction(tag.getQName()));
+
+        TagAttribute[] attrs = tag.getAttributes().getAll();
+        if (attrs.length > 0) {
+            for (int i = 0; i < attrs.length; i++) {
+                String qname = attrs[i].getQName();
+                String value = attrs[i].getValue();
+                this.buffer.append(' ').append(qname).append("=\"").append(
+                        value).append("\"");
+
+                ELText txt = ELText.parse(value);
+                if (txt != null) {
+                    if (txt.isLiteral()) {
+                        this.addInstruction(new LiteralAttributeInstruction(
+                                qname, txt.toString()));
+                    } else {
+                        this.addInstruction(new AttributeInstruction(
+                                this.alias, qname, txt));
+                    }
+                }
+            }
+        }
+
+        // notify that we have an open tag
+        this.startTagOpen = true;
+    }
+
+    private void finishStartTag() {
+        if (this.tags.size() > 0 && this.startTagOpen) {
+            this.buffer.append(">");
+            this.startTagOpen = false;
+        }
+    }
+
+    public void endTag() {
+        Tag tag = (Tag) this.tags.pop();
+
+        this.addInstruction(new EndElementInstruction(tag.getQName()));
+
+        if (this.startTagOpen) {
+            this.buffer.append("/>");
+            this.startTagOpen = false;
+        } else {
+            this.buffer.append("</").append(tag.getQName()).append('>');
+        }
+    }
+
+    public void addChild(CompilationUnit unit) {
+        // if we are adding some other kind of unit
+        // then we need to capture our buffer into a UITextHandler
+        this.finishStartTag();
+        this.flushBufferToConfig(true);
+        this.children.add(unit);
+    }
+
+    protected void flushBufferToConfig(boolean child) {
+
+//        // NEW IMPLEMENTATION
+//        if (true) {
+
+            this.flushTextBuffer(child);
+
+            int size = this.instructionBuffer.size();
+            if (size > 0) {
+                try {
+                    String s = this.buffer.toString();
+                    if (child)
+                        s = trimRight(s);
+                    ELText txt = ELText.parse(s);
+                    if (txt != null) {
+                        Instruction[] instructions = (Instruction[]) this.instructionBuffer
+                                .toArray(new Instruction[size]);
+                        this.children.add(new UIInstructionHandler(this.alias,
+                                                                   this.id,
+                                                                   instructions,
+                                                                   txt));
+                        this.instructionBuffer.clear();
+                    }
+
+                } catch (ELException e) {
+                    if (this.tags.size() > 0) {
+                        throw new TagException((Tag) this.tags.peek(), e
+                                .getMessage());
+                    } else {
+                        throw new ELException(this.alias + ": "
+                                + e.getMessage(), e.getCause());
+                    }
+                }
+            }
+
+//            // KEEP THESE SEPARATE SO LOGIC DOESN'T GET FUBARED
+//        } else if (this.buffer.length() > 0) {
+//            String s = this.buffer.toString();
+//            if (s.trim().length() > 0) {
+//                if (child) {
+//                    s = trimRight(s);
+//                }
+//                if (s.length() > 0) {
+//                    try {
+//                        ELText txt = ELText.parse(s);
+//                        if (txt != null) {
+//                            if (txt.isLiteral()) {
+//                                this.children.add(new UILiteralTextHandler(txt
+//                                        .toString()));
+//                            } else {
+//                                this.children.add(new UITextHandler(this.alias,
+//                                        txt));
+//                            }
+//                        }
+//                    } catch (ELException e) {
+//                        if (this.tags.size() > 0) {
+//                            throw new TagException((Tag) this.tags.peek(), e
+//                                    .getMessage());
+//                        } else {
+//                            throw new ELException(this.alias + ": "
+//                                    + e.getMessage(), e.getCause());
+//                        }
+//                    }
+//                }
+//            }
+//        }
+
+        // ALWAYS CLEAR FOR BOTH IMPL
+        this.buffer.setLength(0);
+    }
+
+    public boolean isClosed() {
+        return this.tags.empty();
+    }
+
+    private static String trimRight(String s) {
+        int i = s.length() - 1;
+        while (i >= 0) {
+            if (Character.isWhitespace(s.charAt(i))) {
+                i--;
+            } else {
+                return s;
+            }
+        }
+        return "";
+    }
+
+    public String toString() {
+        return "TextUnit[" + this.children.size() + "]";
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/TrimmedTagUnit.java b/com/sun/faces/facelets/compiler/TrimmedTagUnit.java
new file mode 100644
index 0000000..a931517
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/TrimmedTagUnit.java
@@ -0,0 +1,71 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.TagLibrary;
+
+import javax.faces.view.facelets.Tag;
+
+class TrimmedTagUnit extends TagUnit {
+
+    public TrimmedTagUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
+        super(library, namespace, name, tag, id);
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/UIInstructionHandler.java b/com/sun/faces/facelets/compiler/UIInstructionHandler.java
new file mode 100644
index 0000000..4726594
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/UIInstructionHandler.java
@@ -0,0 +1,203 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.ELText;
+import com.sun.faces.facelets.impl.IdMapper;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.facelets.util.FastWriter;
+
+import javax.el.ELException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UniqueIdVendor;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * @author Adam Winer
+ * @version $Id: UIInstructionHandler.java 13280 2014-05-23 21:33:52Z edburns $
+ */
+final class UIInstructionHandler extends AbstractUIHandler {
+
+    private final String alias;
+
+    private final String id;
+
+    private final ELText txt;
+    
+    private final Instruction[] instructions;
+
+    private final int length;
+  
+    private final boolean literal;
+
+    public UIInstructionHandler(String alias, String id, Instruction[] instructions, ELText txt) {
+        this.alias = alias;
+        this.id = id;
+        this.instructions = instructions;
+        this.txt = txt;
+        this.length = txt.toString().length();
+
+        boolean literal = true;
+        int size = instructions.length;
+
+        for (int i = 0; i < size; i++) {
+            Instruction ins = this.instructions[i];
+            if (!ins.isLiteral()) {
+                literal = false;
+                break;
+            }
+        }
+
+        this.literal = literal;
+    }
+
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        if (parent != null) {
+            // our id
+            String id = ctx.generateUniqueId(this.id);
+            FacesContext context = ctx.getFacesContext();
+            
+            // grab our component
+            UIComponent c = ComponentSupport.findUIInstructionChildByTagId(context, parent, id);
+            boolean componentFound = false;
+            boolean suppressEvents = false;
+            if (c != null) {
+                componentFound = true;
+                suppressEvents = ComponentSupport.suppressViewModificationEvents(ctx.getFacesContext());
+                // mark all children for cleaning 
+                ComponentSupport.markForDeletion(c);
+            } else {
+                Instruction[] applied;
+                if (this.literal) {
+                    applied = this.instructions;
+                } else {
+                    int size = this.instructions.length;
+                    applied = new Instruction[size];
+                    // Create a new list with all of the necessary applied
+                    // instructions
+                    Instruction ins;
+                    for (int i = 0; i < size; i++) {
+                        ins = this.instructions[i];
+                        applied[i] = ins.apply(ctx.getExpressionFactory(), ctx);
+                    }
+                }
+
+                c = new UIInstructions(txt, applied);
+                // mark it owned by a facelet instance
+                String uid;
+                IdMapper mapper = IdMapper.getMapper(ctx.getFacesContext());
+                String mid = ((mapper != null) ? mapper.getAliasedId(id) : id);
+                UIComponent ancestorNamingContainer = parent.getNamingContainer();
+                if (null != ancestorNamingContainer &&
+                        ancestorNamingContainer instanceof UniqueIdVendor) {
+                    uid = ((UniqueIdVendor) ancestorNamingContainer).createUniqueId(ctx.getFacesContext(), mid);
+                } else {
+                    uid = ComponentSupport.getViewRoot(ctx, parent).createUniqueId(ctx.getFacesContext(), mid);
+                }
+                
+                c.setId(uid);
+                c.getAttributes().put(ComponentSupport.MARK_CREATED, id);
+            }
+            // finish cleaning up orphaned children
+            if (componentFound) {
+                ComponentSupport.finalizeForDeletion(c);
+                if (suppressEvents) {
+                    context.setProcessingEvents(false);
+                }
+                parent.getChildren().remove(c);
+                if (suppressEvents) {
+                    context.setProcessingEvents(true);
+                }
+            }
+
+            // add the component
+            if (componentFound && suppressEvents) {
+                context.setProcessingEvents(false);
+            }
+            this.addComponent(ctx, parent, c);
+            if (componentFound && suppressEvents) {
+                context.setProcessingEvents(true);
+            }
+        }
+    }
+
+    public String toString() {
+        return this.txt.toString();
+    }
+
+    public String getText() {
+        return this.txt.toString();
+    }
+
+    public String getText(FaceletContext ctx) {
+        Writer writer = new FastWriter(this.length);
+        try {
+            this.txt.apply(ctx.getExpressionFactory(), ctx).write(writer, ctx);
+        } catch (IOException e) {
+            throw new ELException(this.alias + ": "+ e.getMessage(), e.getCause());
+        }
+        return writer.toString();
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/UIInstructions.java b/com/sun/faces/facelets/compiler/UIInstructions.java
new file mode 100644
index 0000000..a4daef7
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/UIInstructions.java
@@ -0,0 +1,92 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.ELText;
+
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+import java.util.Arrays;
+
+public final class UIInstructions extends UILeaf {
+
+    transient private final ELText txt;
+
+    transient private final Instruction[] instructions;
+
+    public UIInstructions(ELText txt, Instruction[] instructions) {
+        this.txt = txt;
+        this.instructions = instructions;
+    }
+
+    public void encodeBegin(FacesContext context) throws IOException {
+        if (this.isRendered()) {
+            int size = this.instructions.length;
+            for (int i = 0; i < size; i++) {
+                this.instructions[i].write(context);
+            }
+        }
+    }
+
+    public String toString() {
+        return (this.txt != null) ? this.txt.toString() : "UIInstructions["
+                + Arrays.asList(instructions) + "]";
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/UILeaf.java b/com/sun/faces/facelets/compiler/UILeaf.java
new file mode 100644
index 0000000..728a0cc
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/UILeaf.java
@@ -0,0 +1,232 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.FacesListener;
+import javax.faces.render.Renderer;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+ at SuppressWarnings({"deprecation"})
+public class UILeaf extends UIComponentBase {
+    
+    private final static Map<String,UIComponent> facets = new HashMap<String,UIComponent>(0, 1.0f){
+    
+        public void putAll(Map map) {
+            // do nothing
+        }
+    
+        public UIComponent put(String name, UIComponent value) {
+            return null;
+        }
+    };
+    
+    private UIComponent parent;
+    private boolean returnLocalTransient = true;
+
+    public ValueBinding getValueBinding(String binding) {
+        return null;
+    }
+
+    public void setValueBinding(String name, ValueBinding binding) {
+        // do nothing
+    }
+
+    public ValueExpression getValueExpression(String name) {
+        return null;
+    }
+
+    public void setValueExpression(String name, ValueExpression arg1) {
+        // do nothing
+    }
+
+    public String getFamily() {
+        return "facelets.LiteralText";
+    }
+
+    public UIComponent getParent() {
+        return this.parent;
+    }
+
+    public void setParent(UIComponent parent) {
+        this.parent = parent;
+                }
+
+    public String getRendererType() {
+        return null;
+    }
+
+    public void setRendererType(String rendererType) {
+        // do nothing
+    }
+
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+    public List<UIComponent> getChildren() {
+        return Collections.emptyList();
+    }
+
+    public int getChildCount() {
+        return 0;
+    }
+
+    public UIComponent findComponent(String id) {
+        return null;
+    }
+
+    public Map<String,UIComponent> getFacets() {
+        return facets;
+    }
+
+    public int getFacetCount() {
+        return 0;
+    }
+
+    public UIComponent getFacet(String name) {
+        return null;
+    }
+
+    public Iterator<UIComponent> getFacetsAndChildren() {
+        return Collections.<UIComponent>emptyList().iterator();
+    }
+
+    public void broadcast(FacesEvent event) throws AbortProcessingException {
+        // do nothing
+    }
+
+    public void decode(FacesContext faces) {
+        // do nothing
+    }
+
+    public void encodeBegin(FacesContext faces) throws IOException {
+        // do nothing
+    }
+
+    public void encodeChildren(FacesContext faces) throws IOException {
+        // do nothing
+    }
+
+    public void encodeEnd(FacesContext faces) throws IOException {
+        // do nothing
+    }
+
+    public void encodeAll(FacesContext faces) throws IOException {
+        this.encodeBegin(faces);
+    }
+
+    protected void addFacesListener(FacesListener faces) {
+        // do nothing
+    }
+
+    protected FacesListener[] getFacesListeners(Class faces) {
+        return null;
+    }
+
+    protected void removeFacesListener(FacesListener faces) {
+        // do nothing
+    }
+
+    public void queueEvent(FacesEvent event) {
+        // do nothing
+    }
+
+    public void processDecodes(FacesContext faces) {
+        // do nothing
+    }
+
+    public void processValidators(FacesContext faces) {
+        // do nothing
+    }
+
+    public void processUpdates(FacesContext faces) {
+        // do nothing
+    }
+
+    protected FacesContext getFacesContext() {
+        return FacesContext.getCurrentInstance();
+    }
+
+    protected Renderer getRenderer(FacesContext faces) {
+        return null;
+    }
+
+
+    public boolean isTransient() {
+        return ((returnLocalTransient) || super.isTransient());
+    }
+
+    public void setTransient(boolean tranzient) {
+        returnLocalTransient = false;
+        super.setTransient(tranzient);
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/UILiteralText.java b/com/sun/faces/facelets/compiler/UILiteralText.java
new file mode 100644
index 0000000..b787a16
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/UILiteralText.java
@@ -0,0 +1,83 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+
+public final class UILiteralText extends UILeaf {
+    
+    private final String text;
+    
+    public UILiteralText(String text) {
+        this.text = text;
+    }
+
+    public void encodeBegin(FacesContext faces) throws IOException {
+        if (this.isRendered()) {
+            ResponseWriter writer = faces.getResponseWriter();
+            writer.write(this.text);
+        }
+    }
+    public String toString() {
+        return this.text;
+    }
+
+}
diff --git a/com/sun/faces/facelets/compiler/UILiteralTextHandler.java b/com/sun/faces/facelets/compiler/UILiteralTextHandler.java
new file mode 100644
index 0000000..52e93d4
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/UILiteralTextHandler.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UniqueIdVendor;
+import javax.faces.view.facelets.FaceletContext;
+import java.io.IOException;
+
+final class UILiteralTextHandler extends AbstractUIHandler {
+    
+    protected final String txtString;
+    
+    public UILiteralTextHandler(String txtString) {
+        this.txtString = txtString;
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        if (parent != null) {
+            UIComponent c = new UILiteralText(this.txtString);
+            String uid;
+            UIComponent ancestorNamingContainer = parent.getNamingContainer();
+            if (null != ancestorNamingContainer &&
+                    ancestorNamingContainer instanceof UniqueIdVendor) {
+                uid = ((UniqueIdVendor) ancestorNamingContainer).createUniqueId(ctx.getFacesContext(), null);
+            } else {
+                uid = ComponentSupport.getViewRoot(ctx, parent).createUniqueId();
+            }
+            c.setId(uid);
+            this.addComponent(ctx, parent, c);
+        }
+    }
+
+    public String getText() {
+        return this.txtString;
+    }
+
+    public String getText(FaceletContext ctx) {
+        return this.txtString;
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/UIText.java b/com/sun/faces/facelets/compiler/UIText.java
new file mode 100644
index 0000000..634c316
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/UIText.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.ELText;
+
+import javax.el.ELException;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: UIText.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public final class UIText extends UILeaf {
+
+    private final ELText txt;
+    
+    private final String alias;
+
+    public UIText(String alias, ELText txt) {
+        this.txt = txt;
+        this.alias = alias;
+    }
+
+    public String getFamily() {
+        return null;
+    }
+
+    public void encodeBegin(FacesContext context) throws IOException {
+        if (this.isRendered()) {
+            ResponseWriter out = context.getResponseWriter();
+            try {
+                txt.write(out, context.getELContext());
+            } catch (ELException e) {
+                throw new ELException(this.alias + ": " + e.getMessage(),
+                                      e.getCause());
+            } catch (Exception e) {
+                throw new ELException(this.alias + ": " + e.getMessage(), e);
+            }
+        }
+    }
+
+    public String getRendererType() {
+        return null;
+    }
+
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+    public String toString() {
+        return this.txt.toString();
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/UITextHandler.java b/com/sun/faces/facelets/compiler/UITextHandler.java
new file mode 100644
index 0000000..0508242
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/UITextHandler.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.ELText;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.facelets.util.FastWriter;
+
+import javax.el.ELException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UniqueIdVendor;
+import javax.faces.view.facelets.FaceletContext;
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: UITextHandler.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+final class UITextHandler extends AbstractUIHandler {
+
+    private final ELText txt;
+    
+    private final String alias;
+    
+    private final int length;
+
+    public UITextHandler(String alias, ELText txt) {
+        this.alias = alias;
+        this.txt = txt;
+        this.length = txt.toString().length();
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+    throws IOException {
+        if (parent != null) {
+            try {
+                ELText nt = this.txt.apply(ctx.getExpressionFactory(), ctx);
+                UIComponent c = new UIText(this.alias, nt);
+                String uid;
+                UIComponent ancestorNamingContainer = parent.getNamingContainer();
+                if (null != ancestorNamingContainer &&
+                        ancestorNamingContainer instanceof UniqueIdVendor) {
+                    uid = ((UniqueIdVendor) ancestorNamingContainer).createUniqueId(ctx.getFacesContext(), null);
+                } else {
+                    uid = ComponentSupport.getViewRoot(ctx, parent).createUniqueId();
+                }
+                
+                c.setId(uid);
+                this.addComponent(ctx, parent, c);
+            } catch (Exception e) {
+                throw new ELException(this.alias + ": "+ e.getMessage(), e.getCause());
+            }
+        }
+    }
+
+    public String toString() {
+        return this.txt.toString();
+    }
+
+    public String getText() {
+        return this.txt.toString();
+    }
+
+    public String getText(FaceletContext ctx) {
+        Writer writer = new FastWriter(this.length);
+        try {
+            this.txt.apply(ctx.getExpressionFactory(), ctx).write(writer, ctx);
+        } catch (IOException e) {
+            throw new ELException(this.alias + ": "+ e.getMessage(), e.getCause());
+        }
+        return writer.toString();
+    }
+}
diff --git a/com/sun/faces/facelets/compiler/XMLInstruction.java b/com/sun/faces/facelets/compiler/XMLInstruction.java
new file mode 100644
index 0000000..c83bb15
--- /dev/null
+++ b/com/sun/faces/facelets/compiler/XMLInstruction.java
@@ -0,0 +1,92 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.compiler;
+
+import com.sun.faces.facelets.el.ELText;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+
+public class XMLInstruction implements Instruction {
+    
+    private final static char[] STOP = new char[0];
+    
+    private final ELText text;
+    
+    public XMLInstruction(ELText text) {
+        this.text = text;
+    }
+
+    public void write(FacesContext context) throws IOException {
+        ResponseWriter rw = context.getResponseWriter();
+        rw.writeText(STOP, 0, 0); // hack to get closing elements
+        this.text.write(rw, context.getELContext());
+    }
+
+    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
+        return new XMLInstruction(text.apply(factory, ctx));
+    }
+
+    public boolean isLiteral() {
+        return false;
+    }
+}
diff --git a/com/sun/faces/facelets/component/RepeatRenderer.java b/com/sun/faces/facelets/component/RepeatRenderer.java
new file mode 100644
index 0000000..935a7d2
--- /dev/null
+++ b/com/sun/faces/facelets/component/RepeatRenderer.java
@@ -0,0 +1,121 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.component;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+
+
+public class RepeatRenderer extends Renderer {
+
+    public RepeatRenderer() {
+        super();
+    }
+
+    public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
+        
+    }
+
+    public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
+        if (component.getChildCount() > 0) {
+            Map a = component.getAttributes();
+            String tag = (String) a.get("alias.element");
+            if (tag != null) {
+                ResponseWriter out = context.getResponseWriter();
+                out.startElement(tag, component);
+                String[] attrs = (String[]) a.get("alias.attributes");
+                String attr;
+                if (attrs != null) {
+                    for (int i = 0; i < attrs.length; i++) {
+                        attr = attrs[i];
+                        if ("styleClass".equals(attr)) {
+                            attr = "class";
+                        }
+                        out.writeAttribute(attr, a.get(attrs[i]), attrs[i]);
+                    }
+                }
+            }
+            
+            Iterator itr = component.getChildren().iterator();
+            UIComponent c;
+            while (itr.hasNext()) {
+                c = (UIComponent) itr.next();
+                c.encodeAll(context);
+            }
+            
+            if (tag != null) {
+                context.getResponseWriter().endElement(tag);
+            }
+        }
+    }
+
+    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
+      
+    }
+    
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+}
diff --git a/com/sun/faces/facelets/component/UIRepeat.java b/com/sun/faces/facelets/component/UIRepeat.java
new file mode 100644
index 0000000..67c6209
--- /dev/null
+++ b/com/sun/faces/facelets/component/UIRepeat.java
@@ -0,0 +1,1122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.component;
+
+import com.sun.faces.facelets.tag.IterationStatus;
+
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.ContextCallback;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
+import javax.faces.component.UINamingContainer;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.FacesListener;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PostValidateEvent;
+import javax.faces.event.PreValidateEvent;
+import javax.faces.model.ArrayDataModel;
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+import javax.faces.model.ResultSetDataModel;
+import javax.faces.model.ScalarDataModel;
+import javax.faces.render.Renderer;
+import java.io.IOException;
+import java.io.Serializable;
+import java.sql.ResultSet;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import java.util.concurrent.ConcurrentHashMap;
+import static javax.faces.component.UINamingContainer.getSeparatorChar;
+
+
+public class UIRepeat extends UINamingContainer {
+
+    public static final String COMPONENT_TYPE = "facelets.ui.Repeat";
+
+    public static final String COMPONENT_FAMILY = "facelets";
+
+    private final static DataModel EMPTY_MODEL =
+          new ListDataModel<Object>(Collections.emptyList());
+
+    // our data
+    private Object value;
+
+    private transient DataModel model;
+
+    // variables
+    private String var;
+
+    private String varStatus;
+
+    private int index = -1;
+
+    private Integer begin;
+    private Integer end;
+    private Integer step;
+    private Integer size;
+    
+    private Map<String, SavedState> initialChildState;
+    private String initialClientId;
+
+    public UIRepeat() {
+        this.setRendererType("facelets.ui.Repeat");
+    }
+
+    public String getFamily() {
+        return COMPONENT_FAMILY;
+    }
+
+    public void setEnd(Integer end) {
+        this.end = end;
+    }
+
+    public Integer getEnd() {
+
+        if (this.end != null) {
+            return end;
+        }
+        ValueExpression ve = this.getValueExpression("end");
+        if (ve != null) {
+            return (Integer) ve.getValue(getFacesContext().getELContext());
+        }
+        return null;
+
+    }
+
+    public void setSize(Integer size) {
+        this.size = size;
+    }
+
+    public Integer getSize() {
+
+        if (this.size != null) {
+            return size;
+        }
+        ValueExpression ve = this.getValueExpression("size");
+        if (ve != null) {
+            return (Integer) ve.getValue(getFacesContext().getELContext());
+        }
+        return null;
+
+    }
+
+    public void setOffset(Integer offset) {
+        this.begin = offset;
+    }
+
+    public Integer getOffset() {
+
+        if (this.begin != null) {
+            return this.begin;
+        }
+        ValueExpression ve = this.getValueExpression("offset");
+        if (ve != null) {
+            return (Integer) ve.getValue(getFacesContext().getELContext());
+        }
+        return null;
+
+    }
+
+
+    public void setBegin(Integer begin) {
+        this.begin = begin;
+    }
+
+    public Integer getBegin() {
+
+        if (this.begin != null) {
+            return this.begin;
+        }
+        ValueExpression ve = this.getValueExpression("begin");
+        if (ve != null) {
+            return (Integer) ve.getValue(getFacesContext().getELContext());
+        }
+        return null;
+
+    }
+
+    public void setStep(Integer step) {
+        this.step = step;
+    }
+
+    public Integer getStep() {
+
+        if (this.step != null) {
+            return this.step;
+        }
+        ValueExpression ve = this.getValueExpression("step");
+        if (ve != null) {
+            return (Integer) ve.getValue(getFacesContext().getELContext());
+        }
+        return null;
+
+    }
+
+
+    public String getVar() {
+        return this.var;
+    }
+
+    public void setVar(String var) {
+        this.var = var;
+    }
+
+    public String getVarStatus() {
+        return varStatus;
+    }
+
+    public void setVarStatus(String varStatus) {
+        this.varStatus = varStatus;
+    }
+
+    private void resetDataModel() {
+        if (this.isNestedInIterator()) {
+            this.setDataModel(null);
+        }
+    }
+
+    private void setDataModel(DataModel model) {
+        //noinspection unchecked
+        this.model = model;
+    }
+
+    private DataModel getDataModel() {
+        if (this.model == null) {
+            Object val = this.getValue();
+            if (val == null) {
+                this.model = EMPTY_MODEL;
+            } else if (val instanceof DataModel) {
+                //noinspection unchecked
+                this.model = (DataModel<Object>) val;
+            } else if (val instanceof List) {
+                //noinspection unchecked
+                this.model = new ListDataModel<Object>((List<Object>) val);
+            } else if (Object[].class.isAssignableFrom(val.getClass())) {
+                this.model = new ArrayDataModel<Object>((Object[]) val);
+            } else if (val instanceof ResultSet) {
+                this.model = new ResultSetDataModel((ResultSet) val);
+            } else {
+                this.model = new ScalarDataModel<Object>(val);
+            }
+        }
+        return this.model;
+    }
+
+    public Object getValue() {
+        if (this.value == null) {
+            ValueExpression ve = this.getValueExpression("value");
+            if (ve != null) {
+                return ve.getValue(getFacesContext().getELContext());
+            }
+        }
+        return this.value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    private transient StringBuffer buffer;
+
+    private StringBuffer getBuffer() {
+        if (this.buffer == null) {
+            this.buffer = new StringBuffer();
+        }
+        this.buffer.setLength(0);
+        return this.buffer;
+    }
+
+    public String getClientId(FacesContext faces) {
+        String id = super.getClientId(faces);
+        if (this.index >= 0) {
+            id = this.getBuffer().append(id).append(
+                    getSeparatorChar(faces)).append(this.index)
+                    .toString();
+        }
+        return id;
+    }
+
+    private transient Object origValueOfVar;
+    private transient Object origValueOfVarStatus;
+
+    private void captureOrigValue(FacesContext ctx) {
+        if (this.var != null || this.varStatus != null) {
+            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
+            if (this.var != null) {
+                this.origValueOfVar = attrs.get(this.var);
+            }
+            if (this.varStatus != null) {
+                this.origValueOfVarStatus = attrs.get(this.varStatus);
+            }
+        }
+    }
+
+    private void restoreOrigValue(FacesContext ctx) {
+        if (this.var != null || this.varStatus != null) {
+            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
+            if (this.var != null) {
+                if (this.origValueOfVar != null) {
+                    attrs.put(this.var, this.origValueOfVar);
+                } else {
+                    attrs.remove(this.var);
+                }
+            }
+            if (this.varStatus != null) {
+                if (this.origValueOfVarStatus != null) {
+                    attrs.put(this.varStatus, this.origValueOfVarStatus);
+                } else {
+                    attrs.remove(this.varStatus);
+                }
+            }
+        }
+    }
+
+    private Map<String,SavedState> childState;
+
+    private Map<String,SavedState> getChildState() {
+        if (this.childState == null) {
+            this.childState = new HashMap<String,SavedState>();
+        }
+        return this.childState;
+    }
+    
+    private void clearChildState() {
+    	this.childState = null;
+    }
+
+    private void saveChildState(FacesContext ctx) {
+        if (this.getChildCount() > 0) {
+
+            for (UIComponent uiComponent : this.getChildren()) {
+                this.saveChildState(ctx, uiComponent);
+            }
+        }
+    }
+
+    private void removeChildState(FacesContext ctx) {
+        if (this.getChildCount() > 0) {
+
+            for (UIComponent uiComponent : this.getChildren()) {
+                this.removeChildState(ctx, uiComponent);
+            }
+            
+            if (this.childState != null) {
+                this.childState.remove(this.getClientId(ctx));
+            }
+        }
+    }
+
+    private void removeChildState(FacesContext faces, UIComponent c) {
+        String id = c.getId();
+        c.setId(id);        
+        
+        Iterator itr = c.getFacetsAndChildren();
+        while (itr.hasNext()) {
+            removeChildState(faces, (UIComponent) itr.next());
+        }
+        if (this.childState != null) {
+            this.childState.remove(c.getClientId(faces));
+        }
+    }
+    
+    private void saveChildState(FacesContext faces, UIComponent c) {
+
+        if (c instanceof EditableValueHolder && !c.isTransient()) {
+            String clientId = c.getClientId(faces);
+            SavedState ss = this.getChildState().get(clientId);
+            if (ss == null) {
+                ss = new SavedState();
+                this.getChildState().put(clientId, ss);
+            }
+            ss.populate((EditableValueHolder) c);
+        }
+
+        // continue hack
+        Iterator itr = c.getFacetsAndChildren();
+        while (itr.hasNext()) {
+            saveChildState(faces, (UIComponent) itr.next());
+        }
+    }
+
+    private void restoreChildState(FacesContext ctx) {
+        if (this.getChildCount() > 0) {
+
+            for (UIComponent uiComponent : this.getChildren()) {
+                this.restoreChildState(ctx, uiComponent);
+            }
+        }
+    }
+
+    private void restoreChildState(FacesContext faces, UIComponent c) {
+        // reset id
+        String id = c.getId();
+        c.setId(id);
+
+        // hack
+        if (c instanceof EditableValueHolder) {
+            EditableValueHolder evh = (EditableValueHolder) c;
+            String clientId = c.getClientId(faces);
+            SavedState ss = this.getChildState().get(clientId);
+            if (ss != null) {
+                ss.apply(evh);
+            } else {
+                String childId = clientId.substring(initialClientId.length() + 1);
+                childId = childId.substring(childId.indexOf(getSeparatorChar(faces)) + 1);
+                childId = initialClientId + getSeparatorChar(faces) + childId;
+                if (initialChildState.containsKey(childId)) {
+                    SavedState initialState = initialChildState.get(childId);
+                    initialState.apply(evh);
+                } else {
+                    NullState.apply(evh);
+                }
+            }
+        }
+
+        // continue hack
+        Iterator itr = c.getFacetsAndChildren();
+        while (itr.hasNext()) {
+            restoreChildState(faces, (UIComponent) itr.next());
+        }
+    }
+
+    private boolean keepSaved(FacesContext context) {
+
+        return (hasErrorMessages(context) || isNestedInIterator());
+
+    }
+
+    private boolean hasErrorMessages(FacesContext context) {
+
+        FacesMessage.Severity sev = context.getMaximumSeverity();
+        return (sev != null && (FacesMessage.SEVERITY_ERROR.compareTo(sev) <= 0));
+        
+    }
+
+    
+    private boolean isNestedInIterator() {
+        UIComponent parent = this.getParent();
+        while (parent != null) {
+            if (parent instanceof UIData || parent instanceof UIRepeat) {
+                return true;
+            }
+            parent = parent.getParent();
+        }
+        return false;
+    }
+
+    /**
+     * Save the initial child state.
+     * 
+     * <p>
+     *  In order to be able to restore each row to a pristine condition if NO
+     *  state was necessary to be saved for a given row we need to store the
+     *  initial state (a.k.a the state of the skeleton) so we can restore the
+     *  skeleton as if it was just created by the page markup.
+     * </p>
+     * 
+     * @param facesContext the Faces context. 
+     */
+    private void saveInitialChildState(FacesContext facesContext) {
+        index = -1;
+        initialChildState = new ConcurrentHashMap<String, SavedState>();
+        initialClientId = getClientId(facesContext);
+        if (getChildCount() > 0) {
+            for (UIComponent child : getChildren()) {
+                saveInitialChildState(facesContext, child);
+            }
+        }
+    }
+
+    /**
+     * Recursively create the initial state for the given component.
+     * 
+     * @param facesContext the Faces context.
+     * @param component the UI component to save the state for.
+     * @see #saveInitialChildState(javax.faces.context.FacesContext) 
+     */
+    private void saveInitialChildState(FacesContext facesContext, UIComponent component) {
+        if (component instanceof EditableValueHolder && !component.isTransient()) {
+            String clientId = component.getClientId(facesContext);
+            SavedState state = new SavedState();
+            initialChildState.put(clientId, state);
+            state.populate((EditableValueHolder) component);
+        }
+
+        Iterator<UIComponent> iterator = component.getFacetsAndChildren();
+        while (iterator.hasNext()) {
+            saveChildState(facesContext, iterator.next());
+        }
+    }
+
+    private void setIndex(FacesContext ctx, int index) {
+
+        DataModel localModel = getDataModel();
+        
+        if (index == -1 && initialChildState == null) {
+            saveInitialChildState(ctx);
+        }
+        
+        // save child state
+        if (this.index != -1 && localModel.isRowAvailable()) {
+            this.saveChildState(ctx);
+        } else if (this.index >= 0 && this.childState != null) {
+            this.removeChildState(ctx);
+        }
+
+        this.index = index;
+        localModel.setRowIndex(index);
+
+        if (this.index != -1 && this.var != null && localModel.isRowAvailable()) {
+            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
+            attrs.put(var, localModel.getRowData());
+        }
+
+        // restore child state
+        if (this.index != -1 && localModel.isRowAvailable()) {
+            this.restoreChildState(ctx);
+        }
+    }
+
+    private void updateIterationStatus(FacesContext ctx, IterationStatus status) {
+        if (this.varStatus != null) {
+            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
+            attrs.put(varStatus, status);
+        }
+    }
+
+    private boolean isIndexAvailable() {
+        return this.getDataModel().isRowAvailable();
+    }
+
+    public void process(FacesContext faces, PhaseId phase) {
+
+        // stop if not rendered
+        if (!this.isRendered())
+            return;
+
+        // clear datamodel
+        this.resetDataModel();
+
+        // We must clear the child state if we just entered the Render Phase, and there are no error messages
+        if (PhaseId.RENDER_RESPONSE.equals(phase) && !hasErrorMessages(faces)) {
+        	this.clearChildState();
+        }
+
+        // reset index
+        this.captureOrigValue(faces);        
+        this.setIndex(faces, -1);
+
+        try {
+            // has children
+            if (this.getChildCount() > 0) {
+                Iterator itr;
+                UIComponent c;
+
+                Integer begin = this.getBegin();
+                Integer step = this.getStep();
+                Integer end = this.getEnd();
+                Integer offset = this.getOffset();
+
+                if (null != offset && offset > 0) {
+                    begin = offset;
+                }
+
+                Integer size = this.getSize();
+                if (null != size) {
+                    end = size;
+                }
+
+                // grab renderer
+                String rendererType = getRendererType();
+                Renderer renderer = null;
+                if (rendererType != null) {
+                    renderer = getRenderer(faces);
+                }
+
+                int rowCount = getDataModel().getRowCount();
+                int i = ((begin != null) ? begin : 0);
+                int e = ((end != null) ? end : rowCount);
+                int s = ((step != null) ? step : 1);
+                validateIterationControlValues(rowCount, i, e);
+                if (null != size && size > 0) {
+                    e = size - 1;
+                }
+
+                this.setIndex(faces, i);
+                this.updateIterationStatus(faces, new IterationStatus(true, (i + s > e || rowCount == 1), i, begin, end, step));
+                while (i <= e && this.isIndexAvailable()) {
+
+                    if (PhaseId.RENDER_RESPONSE.equals(phase)
+                            && renderer != null) {
+                        renderer.encodeChildren(faces, this);
+                    } else {
+                        itr = this.getChildren().iterator();
+                        while (itr.hasNext()) {
+                            c = (UIComponent) itr.next();
+                            if (PhaseId.APPLY_REQUEST_VALUES.equals(phase)) {
+                                c.processDecodes(faces);
+                            } else if (PhaseId.PROCESS_VALIDATIONS
+                                    .equals(phase)) {
+                                c.processValidators(faces);
+                            } else if (PhaseId.UPDATE_MODEL_VALUES
+                                    .equals(phase)) {
+                                c.processUpdates(faces);
+                            } else if (PhaseId.RENDER_RESPONSE.equals(phase)) {
+                                c.encodeAll(faces);
+                            }
+                        }
+                    }
+                    i += s;
+                    this.setIndex(faces, i);
+                    this.updateIterationStatus(faces, new IterationStatus(false, i + s >= e, i, begin, end, step));
+                }
+            }
+        } catch (IOException e) {
+            throw new FacesException(e);
+        } finally {
+            this.setIndex(faces, -1);
+            this.restoreOrigValue(faces);
+        }
+
+        /*
+         * Once rendering is done we need to make sure the child components
+         * are not still having client ids that use an index.
+         */
+        if (PhaseId.RENDER_RESPONSE.equals(phase)) {
+            resetClientIds(this);
+        }
+    }
+    
+    private void resetClientIds(UIComponent component) {
+        Iterator<UIComponent> iterator = component.getFacetsAndChildren();
+        while(iterator.hasNext()) {
+            UIComponent child = iterator.next();
+            resetClientIds(child);
+            child.setId(child.getId());
+        }
+    }
+
+     public boolean invokeOnComponent(FacesContext faces, String clientId,
+            ContextCallback callback) throws FacesException {
+        String id = super.getClientId(faces);
+        if (clientId.equals(id)) {
+            this.pushComponentToEL(faces, this);
+            try {
+                callback.invokeContextCallback(faces, this);
+            }
+            finally {
+                this.popComponentFromEL(faces);
+            }
+            return true;
+        } else if (clientId.startsWith(id)) {
+            int prevIndex = this.index;
+            int idxStart = clientId.indexOf(getSeparatorChar(faces), id
+                    .length());
+            if (idxStart != -1
+                    && Character.isDigit(clientId.charAt(idxStart + 1))) {
+                int idxEnd = clientId.indexOf(getSeparatorChar(faces),
+                        idxStart+1);
+                if (idxEnd != -1) {
+                    int newIndex = Integer.parseInt(clientId.substring(
+                            idxStart+1, idxEnd));
+                    boolean found = false;
+                    try {
+                        this.captureOrigValue(faces);
+                        this.setIndex(faces,newIndex);
+                        if (this.isIndexAvailable()) {
+                            found = super.invokeOnComponent(faces, clientId,
+                                    callback);
+                        }
+                    } finally {
+                        this.setIndex(faces, prevIndex);
+                        this.restoreOrigValue(faces);
+                    }
+                    return found;
+                }
+            } else {
+                return super.invokeOnComponent(faces, clientId, callback);
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean visitTree(VisitContext context, VisitCallback callback) {
+        // First check to see whether we are visitable.  If not
+        // short-circuit out of this subtree, though allow the
+        // visit to proceed through to other subtrees.
+        if (!isVisitable(context)) {
+            return false;
+        }
+        
+        FacesContext facesContext = context.getFacesContext();
+        boolean visitRows = requiresRowIteration(context);
+
+        int oldRowIndex = -1;
+        if (visitRows) {
+            oldRowIndex = getDataModel().getRowIndex();
+            setIndex(facesContext, -1);
+        }
+
+        this.setDataModel(null);
+
+        // Push ourselves to EL
+        pushComponentToEL(facesContext, null);
+
+        try {
+
+            // Visit ourselves.  Note that we delegate to the
+            // VisitContext to actually perform the visit.
+            VisitResult result = context.invokeVisitCallback(this, callback);
+
+            // If the visit is complete, short-circuit out and end the visit
+            if (result == VisitResult.COMPLETE) {
+                return true;
+            }
+
+            // Visit children, short-circuiting as necessary
+            if ((result == VisitResult.ACCEPT) && doVisitChildren(context)) {
+
+                // And finally, visit rows
+                if (!visitRows) {
+                    // visit rows without model access
+                    for (UIComponent kid : getChildren()) {
+                        if (kid.visitTree(context, callback)) {
+                            return true;
+                        }
+                    }
+                } else {
+                    if (visitChildren(context, callback)) {
+                        return true;
+                    }
+                }
+            }
+        }
+        finally {
+            // Clean up - pop EL and restore old row index
+            popComponentFromEL(facesContext);
+            if (visitRows) {
+                setIndex(facesContext, oldRowIndex);
+            }
+        }
+
+        // Return false to allow the visit to continue
+        return false;
+    }
+
+    private boolean requiresRowIteration(VisitContext ctx) {
+
+        return !ctx.getHints().contains(VisitHint.SKIP_ITERATION);
+
+    }
+
+    // Tests whether we need to visit our children as part of
+    // a tree visit
+    private boolean doVisitChildren(VisitContext context) {
+
+        // Just need to check whether there are any ids under this
+        // subtree.  Make sure row index is cleared out since
+        // getSubtreeIdsToVisit() needs our row-less client id.
+        //
+        // We only need to position if row iteration is actually needed.
+        //
+        if (requiresRowIteration(context)) {
+            setIndex(context.getFacesContext(), -1);
+        }
+        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
+        assert(idsToVisit != null);
+
+        // All ids or non-empty collection means we need to visit our children.
+        return (!idsToVisit.isEmpty());
+
+    }
+
+
+    private void validateIterationControlValues(int rowCount,
+                                                int begin,
+                                                int end) {
+
+        if (rowCount == 0) {
+            return;
+        }
+        // PENDING i18n
+        if (begin > rowCount) {
+            throw new FacesException("Iteration start index is greater than the number of available rows.");
+        }
+        if (begin > end) {
+            throw new FacesException("Iteration start index is greater than the end index.");
+        }
+        if (end > rowCount) {
+            throw new FacesException("Iteration end index is greater than the number of available rows.");
+        }
+    }
+
+
+    private boolean visitChildren(VisitContext context, VisitCallback callback) {
+
+        Integer begin = this.getBegin();
+        Integer end = this.getEnd();
+        Integer step = this.getStep();
+
+        int rowCount = getDataModel().getRowCount();
+        int i = ((begin != null) ? begin : 0);
+        int e = ((end != null) ? end : rowCount);
+        int s = ((step != null) ? step : 1);
+        validateIterationControlValues(rowCount, i, e);
+        FacesContext faces = context.getFacesContext();
+        this.setIndex(faces, i);
+        this.updateIterationStatus(faces,
+                                   new IterationStatus(true,
+                                                       (i + s > e || rowCount == 1),
+                                                       i,
+                                                       begin,
+                                                       end,
+                                                       step));
+        while (i < e && this.isIndexAvailable()) {
+
+            this.setIndex(faces, i);
+            this.updateIterationStatus(faces,
+                                       new IterationStatus(false,
+                                                           i + s >= e,
+                                                           i,
+                                                           begin,
+                                                           end,
+                                                           step));
+            for (UIComponent kid : getChildren()) {
+                if (kid.visitTree(context, callback)) {
+                    return true;
+                }
+            }
+            i += s;
+        }
+
+
+        return false;
+    }
+
+
+    public void processDecodes(FacesContext faces) {
+        if (!this.isRendered())
+            return;
+        this.setDataModel(null);
+        if (!this.keepSaved(faces)) this.childState = null;
+        this.process(faces, PhaseId.APPLY_REQUEST_VALUES);
+        this.decode(faces);
+    }
+
+    public void processUpdates(FacesContext faces) {
+        if (!this.isRendered()) return;
+        this.resetDataModel();
+        this.process(faces, PhaseId.UPDATE_MODEL_VALUES);
+    }
+
+    public void processValidators(FacesContext faces) {
+        if (!this.isRendered()) return;
+        this.resetDataModel();
+        Application app = faces.getApplication();
+        app.publishEvent(faces, PreValidateEvent.class, this);
+        this.process(faces, PhaseId.PROCESS_VALIDATIONS);
+        app.publishEvent(faces, PostValidateEvent.class, this);
+    }
+
+    private final static SavedState NullState = new SavedState();
+
+    // from RI
+    private final static class SavedState implements Serializable {
+
+        private Object submittedValue;
+
+        private static final long serialVersionUID = 2920252657338389849L;
+
+        Object getSubmittedValue() {
+            return (this.submittedValue);
+        }
+
+        void setSubmittedValue(Object submittedValue) {
+            this.submittedValue = submittedValue;
+        }
+
+        private boolean valid = true;
+
+        boolean isValid() {
+            return (this.valid);
+        }
+
+        void setValid(boolean valid) {
+            this.valid = valid;
+        }
+
+        private Object value;
+
+        Object getValue() {
+            return (this.value);
+        }
+
+        public void setValue(Object value) {
+            this.value = value;
+        }
+
+        private boolean localValueSet;
+
+        boolean isLocalValueSet() {
+            return (this.localValueSet);
+        }
+
+        public void setLocalValueSet(boolean localValueSet) {
+            this.localValueSet = localValueSet;
+        }
+
+        public String toString() {
+            return ("submittedValue: " + submittedValue + " value: " + value
+                    + " localValueSet: " + localValueSet);
+        }
+
+        public void populate(EditableValueHolder evh) {
+            this.value = evh.getLocalValue();
+            this.valid = evh.isValid();
+            this.submittedValue = evh.getSubmittedValue();
+            this.localValueSet = evh.isLocalValueSet();
+        }
+
+        public void apply(EditableValueHolder evh) {
+            evh.setValue(this.value);
+            evh.setValid(this.valid);
+            evh.setSubmittedValue(this.submittedValue);
+            evh.setLocalValueSet(this.localValueSet);
+        }
+
+    }
+
+    private static final class IndexedEvent extends FacesEvent {
+
+        private static final long serialVersionUID = 1L;
+        
+        private final FacesEvent target;
+
+        private final int index;
+
+        public IndexedEvent(UIRepeat owner, FacesEvent target, int index) {
+            super(owner);
+            this.target = target;
+            this.index = index;
+        }
+
+        public PhaseId getPhaseId() {
+            return (this.target.getPhaseId());
+        }
+
+        public void setPhaseId(PhaseId phaseId) {
+            this.target.setPhaseId(phaseId);
+        }
+
+        public boolean isAppropriateListener(FacesListener listener) {
+            return this.target.isAppropriateListener(listener);
+        }
+
+        public void processListener(FacesListener listener) {
+            UIRepeat owner = (UIRepeat) this.getComponent();
+            int prevIndex = owner.index;
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            try {
+                owner.setIndex(ctx,this.index);
+                if (owner.isIndexAvailable()) {
+                    this.target.processListener(listener);
+                }
+            } finally {
+                owner.setIndex(ctx,prevIndex);
+            }
+        }
+
+        public int getIndex() {
+            return index;
+        }
+
+        public FacesEvent getTarget() {
+            return target;
+        }
+
+    }
+
+    public void broadcast(FacesEvent event) throws AbortProcessingException {
+        if (event instanceof IndexedEvent) {
+            IndexedEvent idxEvent = (IndexedEvent) event;
+            this.resetDataModel();
+            int prevIndex = this.index;
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            FacesEvent target = idxEvent.getTarget();
+            UIComponent source = target.getComponent();
+            UIComponent compositeParent = null;
+            try {
+                int rowCount = getDataModel().getRowCount();
+                int idx = idxEvent.getIndex();
+                this.setIndex(ctx, idx);
+                Integer begin = this.getBegin();
+                Integer end = this.getEnd();
+                Integer step = this.getStep();
+                int b = ((begin != null) ? begin : 0);
+                int e = ((end != null) ? end : rowCount);
+                int s = ((step != null) ? step : 1);
+                this.updateIterationStatus(ctx,
+                                           new IterationStatus(idx == b,
+                                                               (idx + s >= e || rowCount == 1),
+                                                               idx,
+                                                               begin,
+                                                               end,
+                                                               step));
+                if (this.isIndexAvailable()) {
+                    if (!UIComponent.isCompositeComponent(source)) {
+                        compositeParent = UIComponent
+                              .getCompositeComponentParent(source);
+                    }
+                    if (compositeParent != null) {
+                        compositeParent.pushComponentToEL(ctx, null);
+                    }
+                    source.pushComponentToEL(ctx, null);
+                    source.broadcast(target);
+
+                }
+            } finally {
+                source.popComponentFromEL(ctx);
+                if (compositeParent != null) {
+                    compositeParent.popComponentFromEL(ctx);
+                }
+                this.updateIterationStatus(ctx, null);
+                this.setIndex(ctx, prevIndex);
+            }
+        } else {
+            super.broadcast(event);
+        }
+    }
+
+    public void queueEvent(FacesEvent event) {
+        super.queueEvent(new IndexedEvent(this, event, this.index));
+    }
+
+    public void restoreState(FacesContext faces, Object object) {
+        if (faces == null) {
+            throw new NullPointerException();
+        }
+        if (object == null) {
+            return;
+        }
+        Object[] state = (Object[]) object;
+        super.restoreState(faces, state[0]);
+        //noinspection unchecked
+        this.childState = (Map<String,SavedState>) state[1];
+        this.begin = (Integer) state[2];
+        this.end = (Integer) state[3];
+        this.step = (Integer) state[4];
+        this.var = (String) state[5];
+        this.varStatus = (String) state[6];
+        this.value = state[7];
+    }
+
+    public Object saveState(FacesContext faces) {
+        resetClientIds(this);
+        
+        if (faces == null) {
+            throw new NullPointerException();
+        }
+        Object[] state = new Object[8];
+        state[0] = super.saveState(faces);
+        state[1] = this.childState;
+        state[2] = this.begin;
+        state[3] = this.end;
+        state[4] = this.step;
+        state[5] = this.var;
+        state[6] = this.varStatus;
+        state[7] = this.value;
+        return state;
+    }
+
+    public void encodeChildren(FacesContext faces) throws IOException {
+        if (!isRendered()) {
+            return;
+        }
+        this.setDataModel(null);
+        if (!this.keepSaved(faces)) {
+            this.childState = null;
+        }
+        this.process(faces, PhaseId.RENDER_RESPONSE);
+    }
+
+    public boolean getRendersChildren() {
+        if (getRendererType() != null) {
+            Renderer renderer = getRenderer(getFacesContext());
+            if (renderer != null) {
+                return renderer.getRendersChildren();
+            }
+        }
+        return true;
+    }
+}
diff --git a/com/sun/faces/facelets/el/CompositeFunctionMapper.java b/com/sun/faces/facelets/el/CompositeFunctionMapper.java
new file mode 100644
index 0000000..e3d61c5
--- /dev/null
+++ b/com/sun/faces/facelets/el/CompositeFunctionMapper.java
@@ -0,0 +1,96 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.FunctionMapper;
+import java.lang.reflect.Method;
+
+/**
+ * Composite FunctionMapper that attempts to load the Method from the first
+ * FunctionMapper, then the second if <code>null</code>.
+ * 
+ * @see javax.el.FunctionMapper
+ * @see java.lang.reflect.Method
+ * 
+ * @author Jacob Hookom
+ * @version $Id: CompositeFunctionMapper.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public final class CompositeFunctionMapper extends FunctionMapper {
+
+    private final FunctionMapper fn0;
+
+    private final FunctionMapper fn1;
+
+    public CompositeFunctionMapper(FunctionMapper fn0, FunctionMapper fn1) {
+        this.fn0 = fn0;
+        this.fn1 = fn1;
+    }
+
+    /**
+     * @see javax.el.FunctionMapper#resolveFunction(java.lang.String, java.lang.String)
+     */
+    public Method resolveFunction(String prefix, String name) {
+        Method m = this.fn0.resolveFunction(prefix, name);
+        if (m == null) {
+            return this.fn1.resolveFunction(prefix, name);
+        }
+        return m;
+    }
+
+}
diff --git a/com/sun/faces/facelets/el/CompositeVariableMapper.java b/com/sun/faces/facelets/el/CompositeVariableMapper.java
new file mode 100644
index 0000000..916e1f0
--- /dev/null
+++ b/com/sun/faces/facelets/el/CompositeVariableMapper.java
@@ -0,0 +1,103 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+
+/**
+ * Composite VariableMapper that attempts to load the ValueExpression from the first
+ * VariableMapper, then the second if <code>null</code>.
+ * 
+ * @see javax.el.VariableMapper
+ * @see javax.el.ValueExpression
+ * 
+ * @author Jacob Hookom
+ * @version $Id: CompositeVariableMapper.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public final class CompositeVariableMapper extends VariableMapper {
+
+    private final VariableMapper var0;
+
+    private final VariableMapper var1;
+
+    public CompositeVariableMapper(VariableMapper var0, VariableMapper var1) {
+        this.var0 = var0;
+        this.var1 = var1;
+    }
+
+    /**
+     * @see javax.el.VariableMapper#resolveVariable(java.lang.String)
+     */
+    public ValueExpression resolveVariable(String name) {
+        ValueExpression ve = this.var0.resolveVariable(name);
+        if (ve == null) {
+            return this.var1.resolveVariable(name);
+        }
+        return ve;
+    }
+
+    /**
+     * @see javax.el.VariableMapper#setVariable(java.lang.String, javax.el.ValueExpression)
+     */
+    public ValueExpression setVariable(String name, ValueExpression expression) {
+        return this.var0.setVariable(name, expression);
+    }
+
+}
diff --git a/com/sun/faces/facelets/el/ContextualCompositeMethodExpression.java b/com/sun/faces/facelets/el/ContextualCompositeMethodExpression.java
new file mode 100644
index 0000000..8118bab
--- /dev/null
+++ b/com/sun/faces/facelets/el/ContextualCompositeMethodExpression.java
@@ -0,0 +1,339 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import com.sun.faces.component.CompositeComponentStackManager;
+
+import com.sun.faces.util.FacesLogger;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.el.MethodInfo;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.MethodNotFoundException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.validator.ValidatorException;
+import javax.faces.view.Location;
+
+/**
+ * <p>
+ * This specialized <code>MethodExpression</code> enables the evaluation of
+ * composite component expressions.  Instances of this expression will be created
+ * when {@link com.sun.faces.facelets.tag.TagAttributeImpl#getValueExpression(javax.faces.view.facelets.FaceletContext, Class)}
+ * is invoked and the expression represents a composite component expression (i.e. #{cc.[properties]}).
+ * </p>
+ *
+ * <p>
+ * It's important to note that these <code>MethodExpression</code>s are context
+ * sensitive in that they leverage the location in which they were referenced
+ * in order to push the proper composite component to the evaluation context
+ * prior to evaluating the expression itself.
+ * </p>
+ *
+ * Here's an example:
+ *
+ * <pre>
+ * Using Page test.xhtml
+ * ---------------------------------
+ *    <ez:comp1 do="#{bean.action}" />
+ *
+ *
+ * comp1.xhtml
+ * ---------------------------------
+ * <composite:interface>
+ *    <composite:attribute name="do" method-signature="String f()" required="true" />
+ * </composite:interface>
+ * <composite:implementation>
+ *    <ez:nesting>
+ *       <h:commandButton value="Click Me!" action="#{cc.attrs.do} />
+ *    </ez:nesting>
+ * </composite:implementation>
+ *
+ * nesting.xhtml
+ * ---------------------------------
+ * <composite:interface />
+ * <composite:implementation>
+ *    <composite:insertChildren>
+ * </composite:implementation>
+ * </pre>
+ *
+ * When <code>commandButton</code> is clicked, the <code>ContextualCompositeMethodExpression</code>
+ * first is looked up by {@link com.sun.faces.facelets.tag.TagAttributeImpl.AttributeLookupMethodExpression}
+ * which results an instance of <code>ContextualCompositeMethodExpression</code>.
+ * When this <code>ContextualCompositeMethodExpression is invoked, the {@link javax.faces.view.Location}
+ * object necessary to find the proper composite component will be derived from
+ * source <code>ValueExpression</code> provided at construction time.  Using the
+ * derived {@link javax.faces.view.Location}, we can find the composite component
+ * that matches 'owns' the template in which the expression was defined in by
+ * comparing the path of the Location with the name and library of the {@link javax.faces.application.Resource}
+ * instance associated with each composite component.  If a matching composite
+ * component is found, it will be made available to the EL by calling {@link CompositeComponentStackManager#push(javax.faces.component.UIComponent)}.
+ * </p>
+ */
+public class ContextualCompositeMethodExpression extends MethodExpression {
+
+    private static final long serialVersionUID = -6281398928485392830L;
+    
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.FACELETS_EL.getLogger();
+
+    private final MethodExpression delegate;
+    private final ValueExpression source;
+    private final Location location;
+    private String ccClientId;
+
+
+    // -------------------------------------------------------- Constructors
+
+
+    public ContextualCompositeMethodExpression(ValueExpression source,
+                                               MethodExpression delegate) {
+
+        this.delegate = delegate;
+        this.source = source;
+        this.location = null;
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        UIComponent cc = UIComponent.getCurrentCompositeComponent(ctx);
+        cc.subscribeToEvent(PostAddToViewEvent.class, new SetClientIdListener(this));
+    }
+
+
+    public ContextualCompositeMethodExpression(Location location,
+                                               MethodExpression delegate) {
+
+
+        this.delegate = delegate;
+        this.location = location;
+        this.source = null;
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        UIComponent cc = UIComponent.getCurrentCompositeComponent(ctx);
+        cc.subscribeToEvent(PostAddToViewEvent.class, new SetClientIdListener(this));
+    }
+
+
+    // ------------------------------------------- Methods from MethodExpression
+
+
+    public MethodInfo getMethodInfo(ELContext elContext) {
+
+        return delegate.getMethodInfo(elContext);
+
+    }
+
+    public Object invoke(ELContext elContext, Object[] objects) {
+
+        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
+        try {
+            boolean pushed = pushCompositeComponent(ctx);
+            try {
+                return delegate.invoke(elContext, objects);
+            } finally {
+                if (pushed) {
+                    popCompositeComponent(ctx);
+                }
+            }
+        } catch (ELException ele) {
+            /*
+             * If we got a validator exception it is actually correct to 
+             * immediately bubble it up. 
+             */
+            if (ele.getCause() != null && ele.getCause() instanceof ValidatorException) {
+                throw (ValidatorException) ele.getCause();
+            }
+            
+            if (source != null && ele instanceof MethodNotFoundException) {
+                // special handling when an ELException handling.  This is necessary
+                // when there are multiple levels of composite component nesting.
+                // When this happens, we need to evaluate the source expression
+                // to find and invoke the MethodExpression at the next highest
+                // nesting level.  Is there a cleaner way to detect this case?
+                try {
+                    Object fallback = source.getValue(elContext);
+                    if (fallback != null && fallback instanceof MethodExpression) {
+                        return ((MethodExpression) fallback).invoke(elContext, objects);
+
+                    }
+
+                } catch(ELException ex) {
+                    
+                    /*
+                     * If we got a validator exception it is actually correct to 
+                     * immediately bubble it up. 
+                     */
+                    if (ex.getCause() != null && ex.getCause() instanceof ValidatorException) {
+                        throw (ValidatorException) ex.getCause();
+                    }
+                    
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING, ele.toString());
+                        LOGGER.log(Level.WARNING,
+                            "jsf.facelets.el.method.expression.invoke.error: {0} {1}",
+                                   new Object[] { ex.toString(),
+                                                  source.getExpressionString() });
+                    }
+                    
+                    if (!(ex instanceof MethodNotFoundException)) {
+                        throw ex;
+                    }
+                }
+            }
+            throw ele;
+        }
+
+    }
+
+
+    // ------------------------------------------------- Methods from Expression
+
+
+    public String getExpressionString() {
+
+        return delegate.getExpressionString();
+
+    }
+
+
+    @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"})
+    public boolean equals(Object o) {
+
+        return delegate.equals(o);
+
+    }
+
+
+    public int hashCode() {
+
+        return delegate.hashCode();
+
+    }
+
+
+    public boolean isLiteralText() {
+
+        return delegate.isLiteralText();
+
+    }
+
+
+    // ----------------------------------------------------- Private Methods
+
+
+    private boolean pushCompositeComponent(FacesContext ctx) {
+
+        CompositeComponentStackManager manager =
+              CompositeComponentStackManager.getManager(ctx);
+        UIComponent foundCc = null;
+
+        if (location != null) {
+            foundCc = manager.findCompositeComponentUsingLocation(ctx, location);
+        } else {
+            // We need to obtain the Location of the source expression in order
+            // to find the composite component that needs to be available within
+            // the evaluation stack.
+            if (source instanceof TagValueExpression) {
+                ValueExpression orig = ((TagValueExpression) source).getWrapped();
+                if (orig instanceof ContextualCompositeValueExpression) {
+                    foundCc = manager.findCompositeComponentUsingLocation(ctx, ((ContextualCompositeValueExpression) orig).getLocation());
+                }
+            }
+        }
+        if (null == foundCc) {
+            foundCc = ctx.getViewRoot().findComponent(ccClientId);
+        }
+
+        return manager.push(foundCc);
+    }
+
+
+    private void popCompositeComponent(FacesContext ctx) {
+
+        CompositeComponentStackManager manager =
+              CompositeComponentStackManager.getManager(ctx);
+        manager.pop();
+
+    }
+
+    private class SetClientIdListener implements ComponentSystemEventListener {
+
+        private ContextualCompositeMethodExpression ccME;
+        
+        public SetClientIdListener() {
+        }
+        
+        public SetClientIdListener(ContextualCompositeMethodExpression ccME) {
+            this.ccME = ccME;
+        }
+
+        @Override
+        public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
+            ccME.ccClientId = event.getComponent().getClientId();
+            event.getComponent().unsubscribeFromEvent(PostAddToViewEvent.class, this);
+        }
+    }
+
+} // END ContextualCompositeMethodExpression
diff --git a/com/sun/faces/facelets/el/ContextualCompositeValueExpression.java b/com/sun/faces/facelets/el/ContextualCompositeValueExpression.java
new file mode 100644
index 0000000..e92e15d
--- /dev/null
+++ b/com/sun/faces/facelets/el/ContextualCompositeValueExpression.java
@@ -0,0 +1,283 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import com.sun.faces.component.CompositeComponentStackManager;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.view.Location;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p>
+ * This specialized <code>ValueExpression</code> enables the evaluation of
+ * composite component expressions.  Instances of this expression will be
+ * created when {@link com.sun.faces.facelets.tag.TagAttributeImpl#getValueExpression(javax.faces.view.facelets.FaceletContext, Class)}
+ * is invoked and the expression represents a composite component expression (i.e. #{cc.[properties]}).
+ * </p>
+ *
+ * <p>
+ * It's important to note that these <code>ValueExpression</code>s are context
+ * sensitive in that they leverage the location in which they were referenced
+ * in order to push the proper composite component to the evaluation context
+ * prior to evaluating the expression itself.
+ * </p>
+ *
+ * Here's an example:
+ *
+ * <pre>
+ * Using Page test.xhtml
+ * ---------------------------------
+ *    <ez:comp1 greeting="Hello!" />
+ *
+ *
+ * comp1.xhtml
+ * ---------------------------------
+ * <composite:interface>
+ *    <composite:attribute name="greeting" type="java.lang.String" required="true" />
+ * </composite:interface>
+ * <composite:implementation>
+ *    <ez:nesting>
+ *       <h:outputText value="#{cc.attrs.greetings}" />
+ *    </ez:nesting>
+ * </composite:implementation>
+ *
+ * nesting.xhtml
+ * ---------------------------------
+ * <composite:interface />
+ * <composite:implementation>
+ *    <composite:insertChildren>
+ * </composite:implementation>
+ * </pre>
+ *
+ * <p>
+ * In the above example, there will be two composite components available to
+ * the runtime: <code>ez:comp1</code> and <code>ez:nesting</code>.
+ * </p>
+ *
+ * <p>
+ * When <h:outputText value="#{cc.attrs.greeting}" />, prior to attempting
+ * to evaluate the expression, the {@link Location} object will be used to
+ * find the composite component that 'owns' the template in which
+ * the expression was defined in by comparing the path of the Location with the
+ * name and library of the {@link javax.faces.application.Resource} instance associated
+ * with each composite component.  If a matching composite component is found,
+ * it will be made available to the EL by calling {@link CompositeComponentStackManager#push(javax.faces.component.UIComponent)}.
+ * </p>
+ */
+public final class ContextualCompositeValueExpression extends ValueExpression {
+    
+    private static final long serialVersionUID = -2637560875633456679L;
+
+    private ValueExpression originalVE;
+    private Location location;
+
+
+    // ---------------------------------------------------- Constructors
+
+
+    /* For serialization purposes */
+    public ContextualCompositeValueExpression() { }
+
+
+    public ContextualCompositeValueExpression(Location location,
+                                              ValueExpression originalVE) {
+
+        this.originalVE = originalVE;
+        this.location = location;
+
+    }
+
+
+    // ------------------------------------ Methods from ValueExpression
+
+
+    public Object getValue(ELContext elContext) {
+
+        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
+        boolean pushed = pushCompositeComponent(ctx);
+        try {
+            return originalVE.getValue(elContext);
+        } finally {
+            if (pushed) {
+                popCompositeComponent(ctx);
+            }
+        }
+
+    }
+
+    public void setValue(ELContext elContext, Object o) {
+
+        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
+         boolean pushed = pushCompositeComponent(ctx);
+        try {
+            originalVE.setValue(elContext, o);
+        } finally {
+            if (pushed) {
+                popCompositeComponent(ctx);
+            }
+        }
+
+    }
+
+    public boolean isReadOnly(ELContext elContext) {
+
+        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
+        boolean pushed = pushCompositeComponent(ctx);
+        try {
+            return originalVE.isReadOnly(elContext);
+        } finally {
+            if (pushed) {
+                popCompositeComponent(ctx);
+            }
+        }
+
+    }
+
+    public Class<?> getType(ELContext elContext) {
+
+        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
+        boolean pushed = pushCompositeComponent(ctx);
+        try {
+            return originalVE.getType(elContext);
+        } finally {
+            if (pushed) {
+                popCompositeComponent(ctx);
+            }
+        }
+
+    }
+
+    public Class<?> getExpectedType() {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        boolean pushed = pushCompositeComponent(ctx);
+        try {
+            return originalVE.getExpectedType();
+        } finally {
+            if (pushed) {
+                popCompositeComponent(ctx);
+            }
+        }
+
+    }
+
+
+    // --------------------------------------------- Methods from Expression
+
+
+    public String getExpressionString() {
+        return originalVE.getExpressionString();
+    }
+
+    @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"})
+    public boolean equals(Object o) {
+        return originalVE.equals(o);
+    }
+
+    public int hashCode() {
+        return originalVE.hashCode();
+    }
+
+    public boolean isLiteralText() {
+        return originalVE.isLiteralText();
+    }
+
+    @Override
+    public String toString() {
+        return originalVE.toString();
+    }
+
+
+    // ------------------------------------------------------ Public Methods
+
+
+    /**
+     * @return the {@link Location} of this <code>ValueExpression</code>
+     */
+    public Location getLocation() {
+        return location;
+    }
+
+
+    // ----------------------------------------------------- Private Methods
+
+
+    private boolean pushCompositeComponent(FacesContext ctx) {
+
+        CompositeComponentStackManager manager =
+              CompositeComponentStackManager.getManager(ctx);
+        UIComponent cc = manager.findCompositeComponentUsingLocation(ctx, location);
+        return manager.push(cc);
+
+    }
+
+
+    private void popCompositeComponent(FacesContext ctx) {
+
+        CompositeComponentStackManager manager =
+              CompositeComponentStackManager.getManager(ctx);
+        manager.pop();
+
+    }
+
+
+} // END ContextualCompositeValueExpression
diff --git a/com/sun/faces/facelets/el/DefaultFunctionMapper.java b/com/sun/faces/facelets/el/DefaultFunctionMapper.java
new file mode 100644
index 0000000..21dc5ac
--- /dev/null
+++ b/com/sun/faces/facelets/el/DefaultFunctionMapper.java
@@ -0,0 +1,267 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import com.sun.faces.facelets.util.ReflectionUtil;
+
+import javax.el.FunctionMapper;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Default implementation of the FunctionMapper
+ *
+ * @author Jacob Hookom
+ * @version $Id: DefaultFunctionMapper.java 8641 2010-10-04 20:54:50Z edburns $
+ * @see java.lang.reflect.Method
+ * @see javax.el.FunctionMapper
+ */
+public final class DefaultFunctionMapper extends FunctionMapper implements
+                                                                Externalizable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Map functions = null;
+
+    /*
+      * (non-Javadoc)
+      *
+      * @see javax.el.FunctionMapper#resolveFunction(java.lang.String,
+      *      java.lang.String)
+      */
+    public Method resolveFunction(String prefix, String localName) {
+        if (this.functions != null) {
+            Function f = (Function) this.functions
+                  .get(prefix + ":" + localName);
+            return f.getMethod();
+        }
+        return null;
+    }
+
+    public void addFunction(String prefix, String localName, Method m) {
+        if (this.functions == null) {
+            this.functions = new HashMap();
+        }
+        Function f = new Function(prefix, localName, m);
+        synchronized (this) {
+            this.functions.put(prefix + ":" + localName, f);
+        }
+    }
+
+    /*
+      * (non-Javadoc)
+      *
+      * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
+      */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(this.functions);
+    }
+
+    /*
+      * (non-Javadoc)
+      *
+      * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
+      */
+    public void readExternal(ObjectInput in) throws IOException,
+                                                    ClassNotFoundException {
+        this.functions = (Map) in.readObject();
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer(128);
+        sb.append("FunctionMapper[\n");
+        for (Iterator itr = this.functions.values().iterator();
+             itr.hasNext();) {
+            sb.append(itr.next()).append('\n');
+        }
+        sb.append(']');
+        return sb.toString();
+    }
+
+    private static class Function implements Externalizable {
+
+        private static final long serialVersionUID = 1L;
+
+        protected transient Method m;
+
+        protected String owner;
+
+        protected String name;
+
+        protected String[] types;
+
+        protected String prefix;
+
+        protected String localName;
+
+        /**
+         *
+         */
+        public Function(String prefix, String localName, Method m) {
+            if (localName == null) {
+                throw new NullPointerException("LocalName cannot be null");
+            }
+            if (m == null) {
+                throw new NullPointerException("Method cannot be null");
+            }
+            this.prefix = prefix;
+            this.localName = localName;
+            this.m = m;
+        }
+
+        public Function() {
+            // for serialization
+        }
+
+        /*
+           * (non-Javadoc)
+           *
+           * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
+           */
+        public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeUTF((this.prefix != null) ? this.prefix : "");
+            out.writeUTF(this.localName);
+            out.writeUTF(this.m.getDeclaringClass().getName());
+            out.writeUTF(this.m.getName());
+            out.writeObject(ReflectionUtil.toTypeNameArray(this.m
+                  .getParameterTypes()));
+        }
+
+        /*
+           * (non-Javadoc)
+           *
+           * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
+           */
+        public void readExternal(ObjectInput in) throws IOException,
+                                                        ClassNotFoundException {
+
+            this.prefix = in.readUTF();
+            if ("".equals(this.prefix)) {
+                this.prefix = null;
+            }
+            this.localName = in.readUTF();
+            this.owner = in.readUTF();
+            this.name = in.readUTF();
+            this.types = (String[]) in.readObject();
+        }
+
+        public Method getMethod() {
+            if (this.m == null) {
+                try {
+                    Class t = ReflectionUtil.forName(this.owner);
+                    Class[] p = ReflectionUtil.toTypeArray(this.types);
+                    this.m = t.getMethod(this.name, p);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            return this.m;
+        }
+
+        public boolean matches(String prefix, String localName) {
+            if (this.prefix != null) {
+                if (prefix == null) {
+                    return false;
+                }
+                if (!this.prefix.equals(prefix)) {
+                    return false;
+                }
+            }
+            return this.localName.equals(localName);
+        }
+
+        /*
+           * (non-Javadoc)
+           *
+           * @see java.lang.Object#equals(java.lang.Object)
+           */
+        public boolean equals(Object obj) {
+            if (obj instanceof Function) {
+                return this.hashCode() == obj.hashCode();
+            }
+            return false;
+        }
+
+        /*
+           * (non-Javadoc)
+           *
+           * @see java.lang.Object#hashCode()
+           */
+        public int hashCode() {
+            return (this.prefix + this.localName).hashCode();
+        }
+
+        public String toString() {
+            StringBuffer sb = new StringBuffer(32);
+            sb.append("Function[");
+            if (this.prefix != null) {
+                sb.append(this.prefix).append(':');
+            }
+            sb.append(this.name).append("] ");
+            sb.append(this.m);
+            return sb.toString();
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/el/DefaultVariableMapper.java b/com/sun/faces/facelets/el/DefaultVariableMapper.java
new file mode 100644
index 0000000..163f721
--- /dev/null
+++ b/com/sun/faces/facelets/el/DefaultVariableMapper.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Default instance of a VariableMapper backed by a Map
+ * 
+ * @see javax.el.VariableMapper
+ * @see javax.el.ValueExpression
+ * @see java.util.Map
+ * 
+ * @author Jacob Hookom
+ * @version $Id: DefaultVariableMapper.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public final class DefaultVariableMapper extends VariableMapper {
+
+    private Map vars;
+
+    public DefaultVariableMapper() {
+        super();
+    }
+
+    /**
+     * @see javax.el.VariableMapper#resolveVariable(java.lang.String)
+     */
+    public ValueExpression resolveVariable(String name) {
+        if (this.vars != null) {
+            return (ValueExpression) this.vars.get(name);
+        }
+        return null;
+    }
+
+    /**
+     * @see javax.el.VariableMapper#setVariable(java.lang.String, javax.el.ValueExpression)
+     */
+    public ValueExpression setVariable(String name, ValueExpression expression) {
+        if (this.vars == null) {
+            this.vars = new HashMap();
+        }
+        return (ValueExpression) this.vars.put(name, expression);
+    }
+
+}
diff --git a/com/sun/faces/facelets/el/ELText.java b/com/sun/faces/facelets/el/ELText.java
new file mode 100644
index 0000000..52323ad
--- /dev/null
+++ b/com/sun/faces/facelets/el/ELText.java
@@ -0,0 +1,485 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import com.sun.faces.el.ELUtils;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.sun.faces.util.HtmlUtils;
+import com.sun.faces.util.MessageUtils;
+import javax.faces.context.FacesContext;
+import javax.faces.view.Location;
+
+/**
+ * Handles parsing EL Strings in accordance with the EL-API Specification. The
+ * parser accepts either <code>${..}</code> or <code>#{..}</code>.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ELText.java 12773 2014-01-14 18:34:24Z mriem $
+ */
+public class ELText {
+
+    private static final class LiteralValueExpression extends ValueExpression {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1L;
+
+        private final String text;
+
+        public LiteralValueExpression(String text) {
+            this.text = text;
+        }
+
+        public boolean isLiteralText() {
+            return false;
+        }
+
+        public int hashCode() {
+            return 0;
+        }
+
+        public String getExpressionString() {
+            return this.text;
+        }
+
+        public boolean equals(Object obj) {
+            return false;
+        }
+
+        public void setValue(ELContext context, Object value) {
+        }
+
+        public boolean isReadOnly(ELContext context) {
+            return false;
+        }
+
+        public Object getValue(ELContext context) {
+            return null;
+        }
+
+        public Class getType(ELContext context) {
+            return null;
+        }
+
+        public Class getExpectedType() {
+            return null;
+        }
+
+    }
+
+    private static final class ELTextComposite extends ELText {
+        private final ELText[] txt;
+
+        public ELTextComposite(ELText[] txt) {
+            super(null);
+            this.txt = txt;
+        }
+
+        public void write(Writer out, ELContext ctx) throws ELException,
+                IOException {
+            for (int i = 0; i < this.txt.length; i++) {
+                this.txt[i].write(out, ctx);
+            }
+        }
+
+        public void writeText(ResponseWriter out, ELContext ctx)
+                throws ELException, IOException {
+            for (int i = 0; i < this.txt.length; i++) {
+                this.txt[i].writeText(out, ctx);
+            }
+        }
+
+        public String toString(ELContext ctx) {
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < this.txt.length; i++) {
+                sb.append(this.txt[i].toString(ctx));
+            }
+            return sb.toString();
+        }
+
+        /*
+         * public String toString(ELContext ctx) { StringBuffer sb = new
+         * StringBuffer(); for (int i = 0; i < this.txt.length; i++) {
+         * sb.append(this.txt[i].toString(ctx)); } return sb.toString(); }
+         */
+
+        public String toString() {
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < this.txt.length; i++) {
+                sb.append(this.txt[i].toString());
+            }
+            return sb.toString();
+        }
+
+        public boolean isLiteral() {
+            return false;
+        }
+
+        public ELText apply(ExpressionFactory factory, ELContext ctx) {
+            int len = this.txt.length;
+            ELText[] nt = new ELText[len];
+            for (int i = 0; i < len; i++) {
+                nt[i] = this.txt[i].apply(factory, ctx);
+            }
+            return new ELTextComposite(nt);
+        }
+    }
+
+    private static final class ELTextVariable extends ELText {
+        private final ValueExpression ve;
+
+        public ELTextVariable(ValueExpression ve) {
+            super(ve.getExpressionString());
+            this.ve = ve;
+        }
+
+        public boolean isLiteral() {
+            return false;
+        }
+
+        public ELText apply(ExpressionFactory factory, ELContext ctx) {
+            ELText result = null;
+            if (this.ve instanceof ContextualCompositeValueExpression) {
+                result = new ELTextVariable(ve);
+            } else {
+                result = new ELTextVariable(factory.createValueExpression(ctx,
+                    this.ve.getExpressionString(), String.class));
+            }
+            
+            return result;
+        }
+
+        public void write(Writer out, ELContext ctx) throws ELException,
+                IOException {
+            Object v = this.ve.getValue(ctx);
+            if (v != null) {
+                char[] buffer = new char[1028];
+                HtmlUtils.writeTextForXML(out, v.toString(), buffer);
+            }
+        }
+
+        public String toString(ELContext ctx) throws ELException {
+            Object v = this.ve.getValue(ctx);
+            if (v != null) {
+                return v.toString();
+            }
+
+            return null;
+        }
+
+        public void writeText(ResponseWriter out, ELContext ctx)
+                throws ELException, IOException {
+            Object v = this.ve.getValue(ctx);
+            if (v != null) {
+                out.writeText(v.toString(), null);
+            }
+        }
+    }
+
+    protected final String literal;
+
+    public ELText(String literal) {
+        this.literal = literal;
+    }
+
+    /**
+     * If it's literal text
+     * 
+     * @return true if the String is literal (doesn't contain <code>#{..}</code>
+     *         or <code>${..}</code>)
+     */
+    public boolean isLiteral() {
+        return true;
+    }
+
+    /**
+     * Return an instance of <code>this</code> that is applicable given the
+     * ELContext and ExpressionFactory state.
+     * 
+     * @param factory
+     *            the ExpressionFactory to use
+     * @param ctx
+     *            the ELContext to use
+     * @return an ELText instance
+     */
+    public ELText apply(ExpressionFactory factory, ELContext ctx) {
+        return this;
+    }
+
+    /**
+     * Allow this instance to write to the passed Writer, given the ELContext
+     * state
+     * 
+     * @param out
+     *            Writer to write to
+     * @param ctx
+     *            current ELContext state
+     * @throws ELException
+     * @throws IOException
+     */
+    public void write(Writer out, ELContext ctx) throws ELException,
+            IOException {
+        out.write(this.literal);
+    }
+
+    public void writeText(ResponseWriter out, ELContext ctx)
+            throws ELException, IOException {
+        out.writeText(this.literal, null);
+    }
+
+    /**
+     * Evaluates the ELText to a String
+     * 
+     * @param ctx
+     *            current ELContext state
+     * @throws ELException
+     * @return the evaluated String
+     */
+    public String toString(ELContext ctx) throws ELException {
+        return this.literal;
+    }
+
+    public String toString() {
+        return this.literal;
+    }
+
+    /**
+     * Parses the passed string to determine if it's literal or not
+     * 
+     * @param in
+     *            input String
+     * @return true if the String is literal (doesn't contain <code>#{..}</code>
+     *         or <code>${..}</code>)
+     */
+    public static boolean isLiteral(String in) {
+        ELText txt = parse(in);
+        return txt == null || txt.isLiteral();
+    }
+
+    /**
+     * Factory method for creating an unvalidated ELText instance. NOTE: All
+     * expressions in the passed String are treated as
+     * {@link com.sun.faces.facelets.el.ELText.LiteralValueExpression}, with one
+     * exception: composite component expressions.  These are treated as
+     * ContextualCompositeValueExpressions.
+     * 
+     * @param in
+     *            String to parse
+     * @return ELText instance that knows if the String was literal or not
+     * @throws javax.el.ELException
+     */
+    public static ELText parse(String in) throws ELException {
+        return parse(null, null, in);
+    }
+    
+    public static ELText parse(String in, String alias) throws ELException {
+        return parse(null, null, in, alias);
+    }
+    
+    public static ELText parse(ExpressionFactory fact, ELContext ctx, String in)
+            throws ELException {
+        return parse(null, null, in, null);
+    }    
+
+    /**
+     * Factory method for creating a validated ELText instance. When an
+     * Expression is hit, it will use the ExpressionFactory to create a
+     * ValueExpression instance, resolving any functions at that time. <p/>
+     * Variables and properties will not be evaluated.
+     * 
+     * @param fact
+     *            ExpressionFactory to use
+     * @param ctx
+     *            ELContext to validate against
+     * @param in
+     *            String to parse
+     * @return ELText that can be re-applied later
+     * @throws javax.el.ELException
+     */
+    public static ELText parse(ExpressionFactory fact, ELContext ctx, String in,
+            String alias)
+            throws ELException {
+        char[] ca = in.toCharArray();
+        int i = 0;
+        char c = 0;
+        int len = ca.length;
+        int end = len - 1;
+        boolean esc = false;
+        int vlen = 0;
+
+        StringBuffer buff = new StringBuffer(128);
+        List text = new ArrayList();
+        ELText t = null;
+        ValueExpression ve = null;
+
+        while (i < len) {
+            c = ca[i];
+            if ('\\' == c) {
+                esc = !esc;
+                if (esc && i < end && (ca[i + 1] == '$' || ca[i + 1] == '#')) {
+                    i++;
+                    continue;
+                }
+            } else if (!esc && ('$' == c || '#' == c)) {
+                if (i < end) {
+                    if ('{' == ca[i + 1]) {
+                        if (buff.length() > 0) {
+                            text.add(new ELText(buff.toString()));
+                            buff.setLength(0);
+                        }
+                        vlen = findVarLength(ca, i);
+                        if (ctx != null && fact != null) {
+                            ve = fact.createValueExpression(ctx, new String(ca,
+                                    i, vlen), String.class);
+                            t = new ELTextVariable(ve);
+                        } else {
+                            String expr = new String(ca, i, vlen);
+                            if (null != alias && ELUtils.isCompositeComponentExpr(expr)) {
+                                if (ELUtils.isCompositeComponentLookupWithArgs(expr)) {
+                                    String message =
+                                            MessageUtils.getExceptionMessageString(MessageUtils.ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR);
+                                    throw new ELException(message);
+                                }    
+                                FacesContext context = FacesContext.getCurrentInstance();
+                                ELContext elContext = context.getELContext();
+                                ValueExpression delegate = 
+                                        context.getApplication().getExpressionFactory().
+                                        createValueExpression(elContext, expr, Object.class);
+                                Location location = new Location(alias, -1, -1);                                
+                                ve = new ContextualCompositeValueExpression(location,
+                                                                            delegate);
+                                
+                            } else {
+                                ve = new LiteralValueExpression(expr);
+                            }
+                            t = new ELTextVariable(ve);
+                        }
+                        text.add(t);
+                        i += vlen;
+                        continue;
+                    }
+                }
+            }
+            esc = false;
+            buff.append(c);
+            i++;
+        }
+
+        if (buff.length() > 0) {
+            text.add(new ELText(buff.toString()));
+            buff.setLength(0);
+        }
+
+        if (text.isEmpty()) {
+            return new ELText("");
+        } else if (text.size() == 1) {
+            return (ELText) text.get(0);
+        } else {
+            ELText[] ta = (ELText[]) text.toArray(new ELText[text.size()]);
+            return new ELTextComposite(ta);
+        }
+    }
+
+    private static int findVarLength(char[] ca, int s) throws ELException {
+        int i = s;
+        int len = ca.length;
+        char c = 0;
+        int str = 0;
+        int nested = 0;
+        boolean insideString = false;
+        while (i < len) {
+            c = ca[i];
+            if ('\\' == c && i<len-1) {
+                i++;
+            } else if ('\'' == c || '"' == c) {
+                if (str == c) {
+                    insideString = false;
+                    str = 0;
+                } else {
+                    insideString = true;
+                    str = c;
+                }
+            } else if ('{' == c && !insideString) {
+                nested++;
+            } else if (str == 0 && ('}' == c)) {
+                if (nested > 1) {
+                    nested--;
+                } else {
+                    return i - s + 1;
+                }
+            } else if ('}' == c && !insideString) {
+                nested--;
+            }
+            i++;
+        }
+        throw new ELException("EL Expression Unbalanced: ... "
+                + new String(ca, s, i - s));
+    }
+
+}
diff --git a/com/sun/faces/facelets/el/LegacyELContext.java b/com/sun/faces/facelets/el/LegacyELContext.java
new file mode 100644
index 0000000..5c80350
--- /dev/null
+++ b/com/sun/faces/facelets/el/LegacyELContext.java
@@ -0,0 +1,274 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.*;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyNotFoundException;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.VariableResolver;
+import java.lang.reflect.Method;
+import java.util.*;
+
+/**
+ * 
+ * 
+ * @author Jacob Hookom
+ * @version $Id: LegacyELContext.java 10784 2012-10-02 15:51:00Z mriem $
+ * @deprecated
+ */
+public final class LegacyELContext extends ELContext {
+
+    private static final String[] IMPLICIT_OBJECTS = new String[] {
+            "application", "applicationScope", "cookie", "facesContext",
+            "header", "headerValues", "initParam", "param", "paramValues",
+            "request", "requestScope", "session", "sessionScope", "view" };
+
+    private final static FunctionMapper functions = new EmptyFunctionMapper();
+
+    private final FacesContext faces;
+
+    private final ELResolver resolver;
+
+    private final VariableMapper variables;
+
+    public LegacyELContext(FacesContext faces) {
+        this.faces = faces;
+        this.resolver = new LegacyELResolver();
+        this.variables = new DefaultVariableMapper();
+    }
+
+    public ELResolver getELResolver() {
+        return this.resolver;
+    }
+
+    public FunctionMapper getFunctionMapper() {
+        return functions;
+    }
+
+    public VariableMapper getVariableMapper() {
+        return this.variables;
+    }
+    
+    public FacesContext getFacesContext() {
+        return this.faces;
+    }
+
+    private final class LegacyELResolver extends ELResolver {
+
+        public Class getCommonPropertyType(ELContext context, Object base) {
+            return Object.class;
+        }
+
+        public Iterator getFeatureDescriptors(ELContext context, Object base) {
+            return Collections.EMPTY_LIST.iterator();
+        }
+
+        private VariableResolver getVariableResolver() {
+            return faces.getApplication().getVariableResolver();
+        }
+
+        private PropertyResolver getPropertyResolver() {
+            return faces.getApplication().getPropertyResolver();
+        }
+
+        public Class getType(ELContext context, Object base, Object property) {
+            if (property == null) {
+                return null;
+            }
+            try {
+                context.setPropertyResolved(true);
+                if (base == null) {
+                    Object obj = this.getVariableResolver().resolveVariable(
+                            faces, property.toString());
+                    return (obj != null) ? obj.getClass() : null;
+                } else {
+                    if (base instanceof List || base.getClass().isArray()) {
+                        return this.getPropertyResolver().getType(base,
+                                Integer.parseInt(property.toString()));
+                    } else {
+                        return this.getPropertyResolver().getType(base,
+                                property);
+                    }
+                }
+            } catch (PropertyNotFoundException e) {
+                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
+                        .getCause());
+            } catch (EvaluationException e) {
+                throw new ELException(e.getMessage(), e.getCause());
+            }
+        }
+
+        public Object getValue(ELContext context, Object base, Object property) {
+            if (property == null) {
+                return null;
+            }
+            try {
+                context.setPropertyResolved(true);
+                if (base == null) {
+                    return this.getVariableResolver().resolveVariable(faces,
+                            property.toString());
+                } else {
+                    if (base instanceof List || base.getClass().isArray()) {
+                        return this.getPropertyResolver().getValue(base,
+                                Integer.parseInt(property.toString()));
+                    } else {
+                        return this.getPropertyResolver().getValue(base,
+                                property);
+                    }
+                }
+            } catch (PropertyNotFoundException e) {
+                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
+                        .getCause());
+            } catch (EvaluationException e) {
+                throw new ELException(e.getMessage(), e.getCause());
+            }
+        }
+
+        public boolean isReadOnly(ELContext context, Object base,
+                Object property) {
+            if (property == null) {
+                return true;
+            }
+            try {
+                context.setPropertyResolved(true);
+                if (base == null) {
+                    return false; // what can I do?
+                } else {
+                    if (base instanceof List || base.getClass().isArray()) {
+                        return this.getPropertyResolver().isReadOnly(base,
+                                Integer.parseInt(property.toString()));
+                    } else {
+                        return this.getPropertyResolver().isReadOnly(base,
+                                property);
+                    }
+                }
+            } catch (PropertyNotFoundException e) {
+                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
+                        .getCause());
+            } catch (EvaluationException e) {
+                throw new ELException(e.getMessage(), e.getCause());
+            }
+        }
+
+        public void setValue(ELContext context, Object base, Object property,
+                Object value) {
+            if (property == null) {
+                throw new PropertyNotWritableException("Null Property");
+            }
+            try {
+                context.setPropertyResolved(true);
+                if (base == null) {
+                    if (Arrays.binarySearch(IMPLICIT_OBJECTS, property
+                            .toString()) >= 0) {
+                        throw new PropertyNotWritableException(
+                                "Implicit Variable Not Setable: " + property);
+                    } else {
+                        Map scope = this.resolveScope(property.toString());
+                        this.getPropertyResolver().setValue(scope, property,
+                                value);
+                    }
+                } else {
+                    if (base instanceof List || base.getClass().isArray()) {
+                        this.getPropertyResolver().setValue(base,
+                                Integer.parseInt(property.toString()), value);
+                    } else {
+                        this.getPropertyResolver().setValue(base, property,
+                                value);
+                    }
+                }
+            } catch (PropertyNotFoundException e) {
+                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
+                        .getCause());
+            } catch (EvaluationException e) {
+                throw new ELException(e.getMessage(), e.getCause());
+            }
+
+        }
+
+        private Map resolveScope(String var) {
+            ExternalContext ext = faces.getExternalContext();
+
+            // cycle through the scopes to find a match, if no
+            // match is found, then return the requestScope
+            Map map = ext.getRequestMap();
+            if (!map.containsKey(var)) {
+                map = ext.getSessionMap();
+                if (!map.containsKey(var)) {
+                    map = ext.getApplicationMap();
+                    if (!map.containsKey(var)) {
+                        map = ext.getRequestMap();
+                    }
+                }
+            }
+            return map;
+        }
+    }
+
+    private final static class EmptyFunctionMapper extends FunctionMapper {
+
+        public Method resolveFunction(String prefix, String localName) {
+            return null;
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/el/LegacyMethodBinding.java b/com/sun/faces/facelets/el/LegacyMethodBinding.java
new file mode 100644
index 0000000..5f55408
--- /dev/null
+++ b/com/sun/faces/facelets/el/LegacyMethodBinding.java
@@ -0,0 +1,123 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.ELException;
+import javax.el.MethodExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.MethodNotFoundException;
+import java.io.Serializable;
+
+/**
+ * For legacy ActionSources
+ * 
+ * @author Jacob Hookom
+ * @version $Id: LegacyMethodBinding.java 8641 2010-10-04 20:54:50Z edburns $
+ * @deprecated
+ */
+public final class LegacyMethodBinding extends
+        MethodBinding implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private final MethodExpression m;
+
+    public LegacyMethodBinding(MethodExpression m) {
+        this.m = m;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.el.MethodBinding#getType(javax.faces.context.FacesContext)
+     */
+    public Class getType(FacesContext context)
+            throws MethodNotFoundException {
+        try {
+            return m.getMethodInfo(context.getELContext()).getReturnType();
+        } catch (javax.el.MethodNotFoundException e) {
+            throw new MethodNotFoundException(e.getMessage(), e.getCause());
+        } catch (ELException e) {
+            throw new EvaluationException(e.getMessage(), e.getCause());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.el.MethodBinding#invoke(javax.faces.context.FacesContext,
+     *      java.lang.Object[])
+     */
+    public Object invoke(FacesContext context, Object[] params)
+            throws EvaluationException, MethodNotFoundException {
+        try {
+            return m.invoke(context.getELContext(), params);
+        } catch (javax.el.MethodNotFoundException e) {
+            throw new MethodNotFoundException(e.getMessage(), e.getCause());
+        } catch (ELException e) {
+            throw new EvaluationException(e.getMessage(), e.getCause());
+        }
+    }
+
+    public String getExpressionString() {
+        return m.getExpressionString();
+    }
+}
diff --git a/com/sun/faces/facelets/el/LegacyValueBinding.java b/com/sun/faces/facelets/el/LegacyValueBinding.java
new file mode 100644
index 0000000..0235390
--- /dev/null
+++ b/com/sun/faces/facelets/el/LegacyValueBinding.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.PropertyNotWritableException;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyNotFoundException;
+import javax.faces.el.ValueBinding;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/**
+ * 
+ * 
+ * @author Jacob Hookom
+ * @version $Id: LegacyValueBinding.java 8641 2010-10-04 20:54:50Z edburns $
+ * @deprecated
+ */
+public final class LegacyValueBinding extends ValueBinding implements Externalizable {
+
+    private static final long serialVersionUID = 1L;
+    
+    private ValueExpression delegate;
+    
+    public LegacyValueBinding() {
+        super();
+    }
+    
+    public LegacyValueBinding(ValueExpression ve) {
+        this.delegate = ve;
+    }
+
+    public Object getValue(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+        ELContext ctx = context.getELContext();
+        try {
+            return this.delegate.getValue(ctx);
+        } catch (javax.el.PropertyNotFoundException e) {
+            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
+        } catch (ELException e) {
+            throw new EvaluationException(e.getMessage(), e.getCause());
+        }
+    }
+
+    public void setValue(FacesContext context, Object value)
+            throws EvaluationException, PropertyNotFoundException {
+        ELContext ctx = context.getELContext();
+        try {
+            this.delegate.setValue(ctx, value);
+        } catch (PropertyNotWritableException e) {
+            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
+        } catch (javax.el.PropertyNotFoundException e) {
+            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
+        } catch (ELException e) {
+            throw new EvaluationException(e.getMessage(), e.getCause());
+        }
+    }
+
+    public boolean isReadOnly(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+        ELContext ctx = context.getELContext();
+        try {
+            return this.delegate.isReadOnly(ctx);
+        } catch (javax.el.PropertyNotFoundException e) {
+            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
+        } catch (ELException e) {
+            throw new EvaluationException(e.getMessage(), e.getCause());
+        }
+    }
+
+    public Class getType(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+        ELContext ctx = context.getELContext();
+        try {
+            return this.delegate.getType(ctx);
+        } catch (javax.el.PropertyNotFoundException e) {
+            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
+        } catch (ELException e) {
+            throw new EvaluationException(e.getMessage(), e.getCause());
+        }
+    }
+
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        this.delegate = (ValueExpression) in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(this.delegate);
+    }
+
+    public String getExpressionString() {
+        return this.delegate.getExpressionString();
+    }
+}
diff --git a/com/sun/faces/facelets/el/TagMethodExpression.java b/com/sun/faces/facelets/el/TagMethodExpression.java
new file mode 100644
index 0000000..1caf169
--- /dev/null
+++ b/com/sun/faces/facelets/el/TagMethodExpression.java
@@ -0,0 +1,165 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.*;
+import javax.faces.view.facelets.TagAttribute;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/**
+ * 
+ * 
+ * @author Jacob Hookom
+ * @version $Id: TagMethodExpression.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public final class TagMethodExpression extends MethodExpression implements
+        Externalizable {
+    
+    private static final long serialVersionUID = 1L;
+    
+    private String attr;
+    private MethodExpression orig;
+
+    public TagMethodExpression() {
+        super();
+    }
+    
+    public TagMethodExpression(TagAttribute attr, MethodExpression orig) {
+        this.attr = attr.toString();
+        this.orig = orig;
+    }
+
+    public MethodInfo getMethodInfo(ELContext context) {
+        try {
+            return this.orig.getMethodInfo(context);
+        } catch (PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(this.attr + ": " + pnfe.getMessage(), pnfe.getCause());
+        } catch (MethodNotFoundException mnfe) {
+            throw new MethodNotFoundException(this.attr + ": " + mnfe.getMessage(), mnfe.getCause());
+        } catch (ELException e) {
+            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
+        }
+    }
+
+    public Object invoke(ELContext context, Object[] params) {
+        try {
+            return this.orig.invoke(context, params);
+        } catch (PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(this.attr + ": " + pnfe.getMessage(), pnfe.getCause());
+        } catch (MethodNotFoundException mnfe) {
+            throw new MethodNotFoundException(this.attr + ": " + mnfe.getMessage(), mnfe.getCause());
+        } catch (ELException e) {
+            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
+        }
+    }
+
+    public String getExpressionString() {
+        return this.orig.getExpressionString();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        TagMethodExpression that = (TagMethodExpression) o;
+
+        if (attr != null ? !attr.equals(that.attr) : that.attr != null) {
+            return false;
+        }
+        if (orig != null ? !orig.equals(that.orig) : that.orig != null) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = attr != null ? attr.hashCode() : 0;
+        result = 31 * result + (orig != null ? orig.hashCode() : 0);
+        return result;
+    }
+
+    public boolean isLiteralText() {
+        return this.orig.isLiteralText();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(this.orig);
+        out.writeUTF(this.attr);
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+            ClassNotFoundException {
+        this.orig = (MethodExpression) in.readObject();
+        this.attr = in.readUTF();
+    }
+
+    public String toString() {
+        return this.attr + ": " + this.orig;
+    }
+}
diff --git a/com/sun/faces/facelets/el/TagValueExpression.java b/com/sun/faces/facelets/el/TagValueExpression.java
new file mode 100644
index 0000000..bd814f0
--- /dev/null
+++ b/com/sun/faces/facelets/el/TagValueExpression.java
@@ -0,0 +1,197 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.*;
+import javax.faces.view.facelets.TagAttribute;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/**
+ * 
+ * 
+ * @author Jacob Hookom
+ * @version $Id: TagValueExpression.java 9219 2011-07-25 20:54:43Z dueni $
+ */
+public final class TagValueExpression extends ValueExpression implements
+        Externalizable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ValueExpression orig;
+
+    private String attr;
+
+    public TagValueExpression() {
+        super();
+    }
+
+    public TagValueExpression(TagAttribute attr, ValueExpression orig) {
+        this.attr = attr.toString();
+        this.orig = orig;
+    }
+
+    public Class getExpectedType() {
+        return this.orig.getExpectedType();
+    }
+
+    public Class getType(ELContext context) {
+        try {
+            return this.orig.getType(context);
+        } catch (PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(this.attr + ": "
+                    + pnfe.getMessage(), pnfe);
+        } catch (ELException e) {
+            throw new ELException(this.attr + ": " + e.getMessage(), e);
+        }
+    }
+
+    public Object getValue(ELContext context) {
+        try {
+            return this.orig.getValue(context);
+        } catch (PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(this.attr + ": "
+                    + pnfe.getMessage(), pnfe);
+        } catch (ELException e) {
+            throw new ELException(this.attr + ": " + e.getMessage(), e);
+        }
+    }
+
+    public boolean isReadOnly(ELContext context) {
+        try {
+            return this.orig.isReadOnly(context);
+        } catch (PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(this.attr + ": "
+                    + pnfe.getMessage(), pnfe);
+        } catch (ELException e) {
+            throw new ELException(this.attr + ": " + e.getMessage(), e);
+        }
+    }
+
+    public void setValue(ELContext context, Object value) {
+        try {
+            this.orig.setValue(context, value);
+        } catch (PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(this.attr + ": "
+                    + pnfe.getMessage(), pnfe);
+        } catch (PropertyNotWritableException pnwe) {
+            throw new PropertyNotWritableException(this.attr + ": "
+                    + pnwe.getMessage(), pnwe);
+        } catch (ELException e) {
+            throw new ELException(this.attr + ": " + e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        TagValueExpression that = (TagValueExpression) o;
+
+        if (attr != null ? !attr.equals(that.attr) : that.attr != null) {
+            return false;
+        }
+        if (orig != null ? !orig.equals(that.orig) : that.orig != null) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = orig != null ? orig.hashCode() : 0;
+        result = 31 * result + (attr != null ? attr.hashCode() : 0);
+        return result;
+    }
+
+    public String getExpressionString() {
+        return this.orig.getExpressionString();
+    }
+
+    public boolean isLiteralText() {
+        return this.orig.isLiteralText();
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+            ClassNotFoundException {
+        this.orig = (ValueExpression) in.readObject();
+        this.attr = in.readUTF();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(this.orig);
+        out.writeUTF(this.attr);
+    }
+
+    public ValueExpression getWrapped() {
+        return orig;
+    }
+
+    public String toString() {
+        return this.attr;
+    }
+}
diff --git a/com/sun/faces/facelets/el/VariableMapperWrapper.java b/com/sun/faces/facelets/el/VariableMapperWrapper.java
new file mode 100644
index 0000000..d4c0df7
--- /dev/null
+++ b/com/sun/faces/facelets/el/VariableMapperWrapper.java
@@ -0,0 +1,125 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.el;
+
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Utility class for wrapping another VariableMapper with a new context,
+ * represented by a {@link java.util.Map Map}. Modifications occur to the Map
+ * instance, but resolve against the wrapped VariableMapper if the Map doesn't
+ * contain the ValueExpression requested.
+ *
+ * @author Jacob Hookom
+ * @version $Id: VariableMapperWrapper.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public class VariableMapperWrapper extends VariableMapper {
+
+    private final VariableMapper target;
+
+    private Map vars;
+
+    /**
+     *
+     */
+    public VariableMapperWrapper(VariableMapper orig) {
+        super();
+        this.target = orig;
+    }
+
+    /**
+     * First tries to resolve agains the inner Map, then the wrapped
+     * ValueExpression.
+     *
+     * @see javax.el.VariableMapper#resolveVariable(java.lang.String)
+     */
+    public ValueExpression resolveVariable(String variable) {
+        ValueExpression ve = null;
+        try {
+            if (this.vars != null) {
+                ve = (ValueExpression) this.vars.get(variable);
+            }
+            if (ve == null) {
+                return this.target.resolveVariable(variable);
+            }
+            return ve;
+        } catch (StackOverflowError e) {
+            throw new ELException("Could not Resolve Variable [Overflow]: "
+                                  + variable, e);
+        }
+    }
+
+    /**
+     * Set the ValueExpression on the inner Map instance.
+     *
+     * @see javax.el.VariableMapper#setVariable(java.lang.String,
+     *      javax.el.ValueExpression)
+     */
+    public ValueExpression setVariable(String variable,
+                                       ValueExpression expression) {
+        if (this.vars == null) {
+            this.vars = new HashMap();
+        }
+        return (ValueExpression) this.vars.put(variable, expression);
+	}
+}
diff --git a/com/sun/faces/facelets/impl/DefaultFacelet.java b/com/sun/faces/facelets/impl/DefaultFacelet.java
new file mode 100644
index 0000000..6e32daa
--- /dev/null
+++ b/com/sun/faces/facelets/impl/DefaultFacelet.java
@@ -0,0 +1,442 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.impl;
+
+import javax.faces.view.facelets.Facelet;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import javax.el.ExpressionFactory;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.FaceletHandler;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Default Facelet implementation.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: DefaultFacelet.java 11724 2013-03-11 20:16:53Z mriem $
+ */
+final class DefaultFacelet extends Facelet implements XMLFrontMatterSaver {
+
+    private static final Logger log = FacesLogger.FACELETS_FACELET.getLogger();
+
+    private final static String APPLIED_KEY = "com.sun.faces.facelets.APPLIED";
+    private static final String JAVAX_FACES_ERROR_XHTML = "javax.faces.error.xhtml";
+
+    private final String alias;
+
+    private final ExpressionFactory elFactory;
+
+    private final DefaultFaceletFactory factory;
+
+    private final long createTime;
+
+    private final long refreshPeriod;
+
+    private final FaceletHandler root;
+
+    private final URL src;
+
+    private IdMapper mapper;
+    
+    private String savedDoctype;
+    
+    private String savedXMLDecl;
+
+    public DefaultFacelet(DefaultFaceletFactory factory,
+                          ExpressionFactory el,
+                          URL src,
+                          String alias,
+                          FaceletHandler root) {
+
+        this.factory = factory;
+        this.elFactory = el;
+        this.src = src;
+        this.root = root;
+        this.alias = alias;
+        this.mapper = factory.idMappers.get(alias);
+        this.createTime = System.currentTimeMillis();
+        this.refreshPeriod = this.factory.getRefreshPeriod();
+
+        String DOCTYPE = Util.getDOCTYPEFromFacesContextAttributes(FacesContext.getCurrentInstance());
+        if (null != DOCTYPE) {
+            // This will happen on the request that causes the facelets to be compiled
+            this.setSavedDoctype(DOCTYPE);
+        }        
+
+        String XMLDECL = Util.getXMLDECLFromFacesContextAttributes(FacesContext.getCurrentInstance());
+        if (null != XMLDECL) {
+            // This will happen on the request that causes the facelets to be compiled
+            this.setSavedXMLDecl(XMLDECL);
+        }        
+        
+    }
+
+    /**
+     * @see com.sun.faces.facelets.Facelet#apply(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
+     */
+    public void apply(FacesContext facesContext, UIComponent parent)
+        throws IOException {
+
+        IdMapper idMapper = IdMapper.getMapper(facesContext);
+        boolean mapperSet = false;
+        if (idMapper == null) {
+            IdMapper.setMapper(facesContext, this.mapper);
+            mapperSet = true;
+        }
+        
+        DefaultFaceletContext ctx = new DefaultFaceletContext(facesContext, this);
+        this.refresh(parent);
+        ComponentSupport.markForDeletion(parent);
+        this.root.apply(ctx, parent);
+        ComponentSupport.finalizeForDeletion(parent);
+        this.markApplied(parent);
+
+        if (mapperSet) {
+            IdMapper.setMapper(facesContext, null);
+        }
+
+
+    }
+
+    private void refresh(UIComponent c) {
+        if (this.refreshPeriod > 0) {
+
+            // finally remove any children marked as deleted
+            int sz = c.getChildCount();
+            if (sz > 0) {
+                List cl = c.getChildren();
+                ApplyToken token;
+                while (--sz >= 0) {
+                    UIComponent cc = (UIComponent) cl.get(sz);
+                    if (!cc.isTransient()) {
+                        token = (ApplyToken) cc.getAttributes().get(APPLIED_KEY);
+                        if (token != null && token.time < this.createTime
+                                && token.alias.equals(this.alias)) {
+                            if (log.isLoggable(Level.INFO)) {
+                                DateFormat df = SimpleDateFormat.getTimeInstance();
+                                log.info("Facelet[" + this.alias
+                                        + "] was modified @ "
+                                        + df.format(new Date(this.createTime))
+                                        + ", flushing component applied @ "
+                                        + df.format(new Date(token.time)));
+                            }
+                            cl.remove(sz);
+                        }
+                    }
+                }
+            }
+
+            // remove any facets marked as deleted
+            if (c.getFacets().size() > 0) {
+                Collection col = c.getFacets().values();
+                UIComponent fc;
+                ApplyToken token;
+                for (Iterator itr = col.iterator(); itr.hasNext();) {
+                    fc = (UIComponent) itr.next();
+                    if (!fc.isTransient()) {
+                        token = (ApplyToken) fc.getAttributes().get(APPLIED_KEY);
+                        if (token != null && token.time < this.createTime
+                                && token.alias.equals(this.alias)) {
+                            if (log.isLoggable(Level.INFO)) {
+                                DateFormat df = SimpleDateFormat.getTimeInstance();
+                                log.info("Facelet[" + this.alias
+                                        + "] was modified @ "
+                                        + df.format(new Date(this.createTime))
+                                        + ", flushing component applied @ "
+                                        + df.format(new Date(token.time)));
+                            }
+                            itr.remove();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void markApplied(UIComponent parent) {
+        if (this.refreshPeriod > 0) {
+            Iterator itr = parent.getFacetsAndChildren();
+            ApplyToken token =
+                  new ApplyToken(this.alias,
+                                 System.currentTimeMillis() + this.refreshPeriod);
+            while (itr.hasNext()) {
+                UIComponent c = (UIComponent) itr.next();
+                if (!c.isTransient()) {
+                    Map<String,Object> attr = c.getAttributes();
+                    if (!attr.containsKey(APPLIED_KEY)) {
+                        attr.put(APPLIED_KEY, token);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Return the alias name for error messages and logging
+     * 
+     * @return alias name
+     */
+    public String getAlias() {
+        return this.alias;
+    }
+
+    /**
+     * Return this Facelet's ExpressionFactory instance
+     * 
+     * @return internal ExpressionFactory instance
+     */
+    public ExpressionFactory getExpressionFactory() {
+        return this.elFactory;
+    }
+
+    /**
+     * The time when this Facelet was created, NOT the URL source code
+     * 
+     * @return final timestamp of when this Facelet was created
+     */
+    public long getCreateTime() {
+        return this.createTime;
+    }
+
+    /**
+     * Delegates resolution to DefaultFaceletFactory reference. Also, caches
+     * URLs for relative paths.
+     * 
+     * @param path
+     *            a relative url path
+     * @return URL pointing to destination
+     * @throws IOException
+     *             if there is a problem creating the URL for the path specified
+     */
+    private URL getRelativePath(String path) throws IOException {
+        return this.factory.resolveURL(this.src, path);
+    }
+
+    /**
+     * The URL this Facelet was created from.
+     * 
+     * @return the URL this Facelet was created from
+     */
+    public URL getSource() {
+        return this.src;
+    }
+
+    /**
+     * Given the passed FaceletContext, apply our child FaceletHandlers to the
+     * passed parent
+     * 
+     * @see FaceletHandler#apply(FaceletContext, UIComponent)
+     * @param ctx
+     *            the FaceletContext to use for applying our FaceletHandlers
+     * @param parent
+     *            the parent component to apply changes to
+     * @throws IOException
+     * @throws FacesException
+     * @throws FaceletException
+     * @throws ELException
+     */
+    private void include(DefaultFaceletContext ctx, UIComponent parent)
+    throws IOException  {
+        this.refresh(parent);
+        this.root.apply(new DefaultFaceletContext(ctx, this), parent);
+        this.markApplied(parent);
+    }
+
+    /**
+     * Used for delegation by the DefaultFaceletContext. First pulls the URL
+     * from {@link #getRelativePath(String) getRelativePath(String)}, then
+     * calls
+     * {@link #include(DefaultFaceletContext, javax.faces.component.UIComponent, String)}.
+     * 
+     * @see FaceletContext#includeFacelet(UIComponent, String)
+     * @param ctx
+     *            FaceletContext to pass to the included Facelet
+     * @param parent
+     *            UIComponent to apply changes to
+     * @param path
+     *            relative path to the desired Facelet from the FaceletContext
+     * @throws IOException
+     * @throws FacesException
+     * @throws FaceletException
+     * @throws ELException
+     */
+    public void include(DefaultFaceletContext ctx, UIComponent parent, String path)
+    throws IOException {
+        URL url;
+        if (path.equals(JAVAX_FACES_ERROR_XHTML)) {
+            if (isDevelopment(ctx)) {
+                // try using this class' ClassLoader
+                url = getErrorFacelet(DefaultFacelet.class.getClassLoader());
+                if (url == null) {
+                    url = getErrorFacelet(Util.getCurrentLoader(this));
+                }
+            } else {
+                return;
+            }
+        } else {
+            url = this.getRelativePath(path);
+        }
+        this.include(ctx, parent, url);
+    }
+
+    /**
+     * Grabs a DefaultFacelet from referenced DefaultFaceletFacotry
+     * 
+     * @see DefaultFaceletFactory#getFacelet(URL)
+     * @param ctx
+     *            FaceletContext to pass to the included Facelet
+     * @param parent
+     *            UIComponent to apply changes to
+     * @param url
+     *            URL source to include Facelet from
+     * @throws IOException
+     * @throws FacesException
+     * @throws FaceletException
+     * @throws ELException
+     */
+    public void include(DefaultFaceletContext ctx, UIComponent parent, URL url)
+    throws IOException {
+        DefaultFacelet f = (DefaultFacelet) this.factory.getFacelet(ctx.getFacesContext(), url);
+        f.include(ctx, parent);
+    }
+
+    private static class ApplyToken implements Externalizable {
+        public String alias;
+
+        public long time;
+
+        @SuppressWarnings({"UnusedDeclaration"})
+        public ApplyToken() { } // For Serialization
+
+        public ApplyToken(String alias, long time) {
+            this.alias = alias;
+            this.time = time;
+        }
+
+        public void readExternal(ObjectInput in) throws IOException,
+                ClassNotFoundException {
+            this.alias = in.readUTF();
+            this.time = in.readLong();
+        }
+
+        public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeUTF(this.alias);
+            out.writeLong(this.time);
+        }
+    }
+
+    public String toString() {
+        return this.alias;
+    }
+    
+    // ---------------------------------------------------------- Helper Methods
+
+    @Override
+    public String getSavedDoctype() {
+        return savedDoctype;
+    }
+
+    @Override
+    public void setSavedDoctype(String savedDoctype) {
+        this.savedDoctype = savedDoctype;
+    }
+
+    @Override
+    public String getSavedXMLDecl() {
+        return savedXMLDecl;
+    }
+
+    @Override
+    public void setSavedXMLDecl(String savedXMLDecl) {
+        this.savedXMLDecl = savedXMLDecl;
+    }
+    
+    
+    
+    // --------------------------------------------------------- Private Methods
+
+
+    private boolean isDevelopment(FaceletContext ctx) {
+
+        return ctx.getFacesContext().isProjectStage(ProjectStage.Development);
+
+    }
+
+
+    private URL getErrorFacelet(ClassLoader loader) {
+
+        return loader.getResource("META-INF/error-include.xhtml");
+
+    }
+}
diff --git a/com/sun/faces/facelets/impl/DefaultFaceletCache.java b/com/sun/faces/facelets/impl/DefaultFaceletCache.java
new file mode 100644
index 0000000..07cf7f5
--- /dev/null
+++ b/com/sun/faces/facelets/impl/DefaultFaceletCache.java
@@ -0,0 +1,253 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.impl;
+
+
+import javax.faces.view.facelets.FaceletCache;
+import com.sun.faces.util.ConcurrentCache;
+import com.sun.faces.util.ExpiringConcurrentCache;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import javax.faces.FacesException;
+import java.io.IOException;
+
+import java.net.URL;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.logging.Logger;
+
+
+/**
+ * Default FaceletCache implementation.
+ */
+final class DefaultFaceletCache extends FaceletCache<DefaultFacelet> {
+
+    private final static Logger LOGGER = FacesLogger.FACELETS_FACTORY.getLogger();
+    
+    /**
+     *Constructor
+     * @param refreshPeriod cache refresh period (in seconds).
+     * 0 means 'always refresh', negative value means 'never refresh'
+     */
+    DefaultFaceletCache(final long refreshPeriod) {
+
+        // We will be delegating object storage to the ExpiringCocurrentCache
+        // Create Factory objects here for the cache. The objects will be delegating to our
+        // own instance factories
+        
+        final boolean checkExpiry = (refreshPeriod > 0);
+
+        ConcurrentCache.Factory<URL, Record> faceletFactory =
+            new ConcurrentCache.Factory<URL, Record>() {
+            public Record newInstance(final URL key) throws IOException {
+                // Make sure that the expensive timestamp retrieval is not done
+                // if no expiry check is going to be performed
+                long lastModified = checkExpiry ? Util.getLastModified(key) : 0;
+                return new Record(System.currentTimeMillis(), lastModified,
+                                  getMemberFactory().newInstance(key), refreshPeriod);
+            }
+        };
+
+        ConcurrentCache.Factory<URL, Record> metadataFaceletFactory =
+            new ConcurrentCache.Factory<URL, Record>() {
+            public Record newInstance(final URL key) throws IOException {
+                // Make sure that the expensive timestamp retrieval is not done
+                // if no expiry check is going to be performed
+                long lastModified = checkExpiry ? Util.getLastModified(key) : 0;
+                return new Record(System.currentTimeMillis(), lastModified,
+                                  getMetadataMemberFactory().newInstance(key), refreshPeriod);
+            }
+        };
+
+        // No caching if refreshPeriod is 0
+        if (refreshPeriod == 0) {
+            _faceletCache = new NoCache(faceletFactory);
+            _metadataFaceletCache = new NoCache(metadataFaceletFactory);
+        } else {
+            ExpiringConcurrentCache.ExpiryChecker<URL, Record> checker = 
+                (refreshPeriod > 0) ? new ExpiryChecker() : new NeverExpired();
+            _faceletCache =
+                    new ExpiringConcurrentCache<URL, Record>(faceletFactory,
+                                                             checker);
+            _metadataFaceletCache =
+                    new ExpiringConcurrentCache<URL, Record>(metadataFaceletFactory,
+                                                             checker);
+        }
+    }
+
+    @Override
+    public DefaultFacelet getFacelet(URL url) throws IOException {
+        com.sun.faces.util.Util.notNull("url", url);
+        DefaultFacelet f = null;
+        
+        try {
+            f =  _faceletCache.get(url).getFacelet();
+        } catch (ExecutionException e) {
+            _unwrapIOException(e);
+        }
+        return f;
+    }
+
+    @Override
+    public boolean isFaceletCached(URL url) {
+        com.sun.faces.util.Util.notNull("url", url);
+
+        return _faceletCache.containsKey(url);
+    }
+
+
+    @Override
+    public DefaultFacelet getViewMetadataFacelet(URL url) throws IOException {
+        com.sun.faces.util.Util.notNull("url", url);
+
+        DefaultFacelet f = null;
+        
+        try {
+            f = _metadataFaceletCache.get(url).getFacelet();
+        } catch (ExecutionException e) {
+            _unwrapIOException(e);
+        }
+        return f;
+    }
+
+    @Override
+    public boolean isViewMetadataFaceletCached(URL url) {
+        com.sun.faces.util.Util.notNull("url", url);
+
+        return _metadataFaceletCache.containsKey(url);
+    }
+
+    private void _unwrapIOException(ExecutionException e) throws IOException {
+        Throwable t = e.getCause();
+        if (t instanceof IOException) {
+            throw (IOException)t;
+        }
+        if (t.getCause() instanceof IOException) {
+            throw (IOException)t.getCause();
+        }
+        if (t instanceof RuntimeException) {
+            throw (RuntimeException)t;
+        }
+        throw new FacesException(t);
+    }
+    
+    private final ConcurrentCache<URL, Record> _faceletCache;
+    private final ConcurrentCache<URL, Record> _metadataFaceletCache;
+
+    /**
+     * This class holds the Facelet instance and its original URL's last modified time. It also produces
+     * the time when the next expiry check should be performed
+     */
+    private static class Record {
+        Record(long creationTime, long lastModified, DefaultFacelet facelet, long refreshInterval) {
+            _facelet = facelet;
+            _creationTime = creationTime;
+            _lastModified = lastModified;
+            _refreshInterval = refreshInterval;
+            
+            // There is no point in calculaing the next refresh time if we are refreshing always/never
+            _nextRefreshTime = (_refreshInterval > 0) ? new AtomicLong(creationTime + refreshInterval) : null;
+        }
+
+        DefaultFacelet getFacelet() {
+            return _facelet;
+        }
+
+        long getLastModified() {
+            return _lastModified;
+        }
+        
+        long getNextRefreshTime() {
+            // There is no point in calculaing the next refresh time if we are refreshing always/never
+            return (_refreshInterval > 0) ? _nextRefreshTime.getAndAdd(_refreshInterval) : 0;
+        }
+        
+        private final long _lastModified;
+        private final long _refreshInterval;
+        private final long _creationTime;
+        private final AtomicLong _nextRefreshTime;
+        private final DefaultFacelet _facelet;
+    }
+
+    private static class ExpiryChecker implements ExpiringConcurrentCache.ExpiryChecker<URL, Record> {
+
+        public boolean isExpired(URL url, Record record) {
+            // getNextRefreshTime() incremenets the next refresh time atomically
+            long ttl = record.getNextRefreshTime();
+            if (System.currentTimeMillis() > ttl) {
+                long lastModified = Util.getLastModified(url);
+                // The record is considered expired if its original last modified time
+                // is older than the URL's current last modified time
+                return (lastModified > record.getLastModified());
+            }
+            return false;
+        }
+    }
+    
+    private static class NeverExpired implements ExpiringConcurrentCache.ExpiryChecker<URL, Record> {
+        public boolean isExpired(URL key, Record value) {
+            return false;
+        }
+    }
+
+    /**
+     * ConcurrentCache implementation that does no caching (always creates new instances)
+     */
+    private static class NoCache extends ConcurrentCache<URL, Record> {
+        public NoCache(ConcurrentCache.Factory<URL, Record> f) {
+            super(f);
+        }
+
+        public Record get(final URL key) throws ExecutionException {
+            try {
+                return this.getFactory().newInstance(key);
+            } catch (Exception e) {
+                throw new ExecutionException(e);
+            }
+        }
+
+        public boolean containsKey(final URL key) {
+            return false;
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/impl/DefaultFaceletContext.java b/com/sun/faces/facelets/impl/DefaultFaceletContext.java
new file mode 100644
index 0000000..370f411
--- /dev/null
+++ b/com/sun/faces/facelets/impl/DefaultFaceletContext.java
@@ -0,0 +1,423 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.impl;
+
+import javax.faces.view.facelets.Facelet;
+import com.sun.faces.facelets.FaceletContextImplBase;
+import com.sun.faces.facelets.TemplateClient;
+import com.sun.faces.facelets.el.DefaultVariableMapper;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
+import javax.el.FunctionMapper;
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import java.io.IOException;
+import java.net.URL;
+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;
+
+/**
+ * Default FaceletContext implementation.
+ * 
+ * A single FaceletContext is used for all Facelets involved in an invocation of
+ * {@link com.sun.faces.facelets.Facelet#apply(FacesContext, UIComponent) Facelet#apply(FacesContext, UIComponent)}.
+ * This means that included Facelets are treated the same as the JSP include
+ * directive.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: DefaultFaceletContext.java,v 1.4.4.3 2006/03/25 01:01:53 jhook
+ *          Exp $
+ */
+final class DefaultFaceletContext extends FaceletContextImplBase {
+
+    private final FacesContext faces;
+
+    private final ELContext ctx;
+
+    private final DefaultFacelet facelet;
+    private final List<Facelet> faceletHierarchy;
+
+    private VariableMapper varMapper;
+
+    private FunctionMapper fnMapper;
+
+    private final Map<String,Integer> ids;
+    private final Map<Integer,Integer> prefixes;
+    private String prefix;
+    private final StringBuilder uniqueIdBuilder=new StringBuilder(30);
+
+
+    public DefaultFaceletContext(DefaultFaceletContext ctx,
+            DefaultFacelet facelet) {
+        this.ctx = ctx.ctx;
+        this.clients = ctx.clients;
+        this.faces = ctx.faces;
+        this.fnMapper = ctx.fnMapper;
+        this.ids = ctx.ids;
+        this.prefixes = ctx.prefixes;
+        this.varMapper = ctx.varMapper;
+        this.faceletHierarchy = new ArrayList<Facelet>(ctx.faceletHierarchy.size()+1);
+        this.faceletHierarchy.addAll(ctx.faceletHierarchy);
+        this.faceletHierarchy.add(facelet);
+        this.facelet=facelet;
+        this.faces.getAttributes().put(FaceletContext.FACELET_CONTEXT_KEY,
+                this);
+    }
+
+    public DefaultFaceletContext(FacesContext faces, DefaultFacelet facelet) {
+        this.ctx = faces.getELContext();
+        this.ids = new HashMap<String,Integer>();
+        this.prefixes = new HashMap<Integer,Integer>();
+        this.clients = new ArrayList<TemplateManager>(5);
+        this.faces = faces;
+        this.faceletHierarchy = new ArrayList<Facelet>(1);
+        this.faceletHierarchy.add(facelet);
+        this.facelet = facelet;
+        this.varMapper = this.ctx.getVariableMapper();
+        if (this.varMapper == null) {
+            this.varMapper = new DefaultVariableMapper();
+        }
+        this.fnMapper = this.ctx.getFunctionMapper();
+        this.faces.getAttributes().put(FaceletContext.FACELET_CONTEXT_KEY,
+                this);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#getFacesContext()
+     */
+    public FacesContext getFacesContext() {
+        return this.faces;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#getExpressionFactory()
+     */
+    public ExpressionFactory getExpressionFactory() {
+        return this.facelet.getExpressionFactory();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#setVariableMapper(javax.el.VariableMapper)
+     */
+    public void setVariableMapper(VariableMapper varMapper) {
+        // Assert.param("varMapper", varMapper);
+        this.varMapper = varMapper;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#setFunctionMapper(javax.el.FunctionMapper)
+     */
+    public void setFunctionMapper(FunctionMapper fnMapper) {
+        // Assert.param("fnMapper", fnMapper);
+        this.fnMapper = fnMapper;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#includeFacelet(javax.faces.component.UIComponent,
+     *      java.lang.String)
+     */
+    public void includeFacelet(UIComponent parent, String relativePath)
+            throws IOException, FacesException, ELException {
+        this.facelet.include(this, parent, relativePath);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ELContext#getFunctionMapper()
+     */
+    public FunctionMapper getFunctionMapper() {
+        return this.fnMapper;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ELContext#getVariableMapper()
+     */
+    public VariableMapper getVariableMapper() {
+        return this.varMapper;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ELContext#getContext(java.lang.Class)
+     */
+    public Object getContext(Class key) {
+        return this.ctx.getContext(key);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ELContext#putContext(java.lang.Class, java.lang.Object)
+     */
+    public void putContext(Class key, Object contextObject) {
+        this.ctx.putContext(key, contextObject);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#generateUniqueId(java.lang.String)
+     */
+    public String generateUniqueId(String base) {
+
+        if(prefix==null) {
+            StringBuilder builder = new StringBuilder(faceletHierarchy.size()*30);
+            for(int i=0; i< faceletHierarchy.size(); i++) {
+                DefaultFacelet facelet = (DefaultFacelet) faceletHierarchy.get(i);
+                builder.append(facelet.getAlias());
+            }
+            Integer prefixInt = builder.toString().hashCode();
+
+            Integer cnt = prefixes.get(prefixInt);
+            if(cnt==null) {
+                this.prefixes.put(prefixInt, 0);
+                prefix = prefixInt.toString();
+            } else {
+                int i=cnt.intValue()+1;
+                this.prefixes.put(prefixInt, i);
+                prefix = prefixInt + "_" +i;
+            }
+        }
+
+        Integer cnt = this.ids.get(base);
+        if (cnt == null) {
+            this.ids.put(base, 0);
+            uniqueIdBuilder.delete(0,uniqueIdBuilder.length());
+            uniqueIdBuilder.append(prefix);
+            uniqueIdBuilder.append("_");
+            uniqueIdBuilder.append(base);
+            return uniqueIdBuilder.toString();
+        } else {
+            int i = cnt.intValue() + 1;
+            this.ids.put(base, i);
+            uniqueIdBuilder.delete(0,uniqueIdBuilder.length());
+            uniqueIdBuilder.append(prefix);
+            uniqueIdBuilder.append("_");
+            uniqueIdBuilder.append(base);
+            uniqueIdBuilder.append("_");            
+            uniqueIdBuilder.append(i);
+            return uniqueIdBuilder.toString();
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#getAttribute(java.lang.String)
+     */
+    public Object getAttribute(String name) {
+        if (this.varMapper != null) {
+            ValueExpression ve = this.varMapper.resolveVariable(name);
+            if (ve != null) {
+                return ve.getValue(this);
+            }
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#setAttribute(java.lang.String,
+     *      java.lang.Object)
+     */
+    public void setAttribute(String name, Object value) {
+        if (this.varMapper != null) {
+            if (value == null) {
+                this.varMapper.setVariable(name, null);
+            } else {
+                this.varMapper.setVariable(name, this.facelet
+                        .getExpressionFactory().createValueExpression(value,
+                                Object.class));
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.faces.view.facelets.FaceletContext#includeFacelet(javax.faces.component.UIComponent,
+     *      java.net.URL)
+     */
+    public void includeFacelet(UIComponent parent, URL absolutePath)
+            throws IOException, FacesException, ELException {
+        this.facelet.include(this, parent, absolutePath);
+    }
+
+    public ELResolver getELResolver() {
+        return this.ctx.getELResolver();
+    }
+
+    private final List<TemplateManager> clients;
+
+    public void popClient(TemplateClient client) {
+        if (!this.clients.isEmpty()) {
+            Iterator itr = this.clients.iterator();
+            while (itr.hasNext()) {
+                if (itr.next().equals(client)) {
+                    itr.remove();
+                    return;
+                }
+            }
+        }
+        throw new IllegalStateException(client + " not found");
+    }
+
+    public void pushClient(final TemplateClient client) {
+        this.clients.add(0, new TemplateManager(this.facelet, client, true));
+    }
+
+    public void extendClient(final TemplateClient client) {
+        this.clients.add(new TemplateManager(this.facelet, client, false));
+    }
+
+    public boolean includeDefinition(UIComponent parent, String name)
+    throws IOException {
+        boolean found = false;
+        TemplateManager client;
+
+        for (int i = 0, size = this.clients.size(); i < size && !found; i++) {
+            client = this.clients.get(i);
+            //noinspection EqualsBetweenInconvertibleTypes
+            if (client.equals(this.facelet))
+                continue;            
+            found = client.apply(this, parent, name);            
+        }
+
+        return found;
+    }
+
+    private final static class TemplateManager implements TemplateClient {
+        private final DefaultFacelet owner;
+
+        private final TemplateClient target;
+        
+        private final boolean root;
+
+        private final Set<String> names = new HashSet<String>();
+
+        public TemplateManager(DefaultFacelet owner, TemplateClient target, boolean root) {
+            this.owner = owner;
+            this.target = target;
+            this.root = root;
+        }
+
+        public boolean apply(FaceletContext ctx, UIComponent parent, String name)
+        throws IOException {
+
+            String testName = (name != null) ? name : "facelets._NULL_DEF_";
+            if (this.names.contains(testName)) {
+                return false;
+            } else {
+                this.names.add(testName);
+                boolean found = this.target.apply(new DefaultFaceletContext(
+                        (DefaultFaceletContext) ctx, this.owner), parent, name);
+                this.names.remove(testName);
+                return found;
+            }
+        }
+
+        
+        @Override
+        public boolean equals(Object o) {
+            // System.out.println(this.owner.getAlias() + " == " +
+            // ((DefaultFacelet) o).getAlias());
+            return this.owner == o || this.target == o;
+        }
+
+        public boolean isRoot() {
+            return this.root;
+        }
+    }
+
+
+    public boolean isPropertyResolved() {
+        return this.ctx.isPropertyResolved();
+    }
+
+    public void setPropertyResolved(boolean resolved) {
+        this.ctx.setPropertyResolved(resolved);
+    }
+}
diff --git a/com/sun/faces/facelets/impl/DefaultFaceletFactory.java b/com/sun/faces/facelets/impl/DefaultFaceletFactory.java
new file mode 100644
index 0000000..4686aad
--- /dev/null
+++ b/com/sun/faces/facelets/impl/DefaultFaceletFactory.java
@@ -0,0 +1,541 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.impl;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.context.FacesFileNotFoundException;
+import java.net.MalformedURLException;
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.Facelet;
+import javax.faces.view.facelets.FaceletCache;
+import com.sun.faces.facelets.compiler.Compiler;
+import com.sun.faces.util.Cache;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import javax.faces.view.facelets.FaceletCacheFactory;
+import javax.faces.view.facelets.FaceletHandler;
+import javax.faces.view.facelets.ResourceResolver;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Method;
+import java.net.URL;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * Default FaceletFactory implementation.
+ *
+ * @author Jacob Hookom
+ * @version $Id: DefaultFaceletFactory.java,v 1.10 2007/04/09 01:13:17 youngm
+ *          Exp $
+ */
+public class DefaultFaceletFactory {
+
+    protected final static Logger log = FacesLogger.FACELETS_FACTORY.getLogger();
+
+    private Compiler compiler;
+
+    // We continue to use a ResourceResolver just in case someone
+    // provides a custom one.  The DefaultResourceResolver simply uses
+    // the ResourceHandler to do its work.
+    private ResourceResolver resolver;
+
+    private  URL baseUrl;
+    
+    private long refreshPeriod;
+
+    private FaceletCache<DefaultFacelet> cache;
+
+    private ConcurrentMap<String, FaceletCache<DefaultFacelet>> cachePerContract;
+
+    Cache<String,IdMapper> idMappers;
+    
+
+
+    // ------------------------------------------------------------ Constructors
+
+    public DefaultFaceletFactory() {
+        this.compiler = null;
+        this.resolver = null;
+        this.refreshPeriod = -1;
+        this.cache = null;
+        this.baseUrl = null;
+    }
+    
+    
+    public DefaultFaceletFactory(Compiler compiler, ResourceResolver resolver)
+    throws IOException {
+
+        this(compiler, resolver, -1, null);
+
+    }
+
+
+    public DefaultFaceletFactory(Compiler compiler,
+                                 ResourceResolver resolver,
+                                 long refreshPeriod) {
+        this(compiler, resolver, refreshPeriod, null);
+    }
+
+    public DefaultFaceletFactory(Compiler compiler,
+                                 ResourceResolver resolver,
+                                 long refreshPeriod,
+                                 FaceletCache cache) {
+        this.init(compiler, resolver, refreshPeriod, cache);
+    }
+    
+    public final void init(Compiler compiler,
+            ResourceResolver resolver,
+            long refreshPeriod,
+            FaceletCache cache) {
+        Util.notNull("compiler", compiler);
+        Util.notNull("resolver", resolver);
+        this.compiler = compiler;
+        this.cachePerContract = new ConcurrentHashMap<String, FaceletCache<DefaultFacelet>>();
+        this.resolver = resolver;
+        this.baseUrl = resolver.resolveUrl("/");
+        this.idMappers = new Cache<String,IdMapper>(new IdMapperFactory());
+        // this.location = url;
+        refreshPeriod = (refreshPeriod >= 0) ? refreshPeriod * 1000 : -1;
+        this.refreshPeriod = refreshPeriod;
+        if (log.isLoggable(Level.FINE)) {
+            log.log(Level.FINE, "Using ResourceResolver: {0}", resolver);
+            log.log(Level.FINE, "Using Refresh Period: {0}", refreshPeriod);
+        }
+        
+        // We can cast to the FaceletCache<DefaultFacelet> here because we know
+        // that the Generics information is only used at compile time, and all cache
+        // implementations will be using instance factories provided by us and returning DefaultFacelet
+        this.cache = initCache((FaceletCache<DefaultFacelet>)cache);
+    }
+
+    private FaceletCache<DefaultFacelet> initCache(FaceletCache<DefaultFacelet> cache) {
+
+        if(cache == null) {
+            FaceletCacheFactory cacheFactory = (FaceletCacheFactory)
+                    FactoryFinder.getFactory(FactoryFinder.FACELET_CACHE_FACTORY);
+            cache = cacheFactory.getFaceletCache();
+        }
+
+        // Create instance factories for the  cache, so that the cache can
+        // create Facelets and Metadata Facelets
+        FaceletCache.MemberFactory<DefaultFacelet> faceletFactory =
+            new FaceletCache.MemberFactory<DefaultFacelet>() {
+                public DefaultFacelet newInstance(final URL key) throws IOException {
+                    return createFacelet(key);
+                }
+            };
+        FaceletCache.MemberFactory<DefaultFacelet> metadataFaceletFactory =
+            new FaceletCache.MemberFactory<DefaultFacelet>() {
+                public DefaultFacelet newInstance(final URL key) throws IOException {
+                    return createMetadataFacelet(key);
+                }
+            };
+        try {
+            // We must call this method using reflection because it is protected.
+            Method m = FaceletCache.class.getDeclaredMethod("setMemberFactories", FaceletCache.MemberFactory.class, FaceletCache.MemberFactory.class);
+            m.setAccessible(true);
+            m.invoke(cache, faceletFactory, metadataFaceletFactory);
+        } catch (Exception ex) {
+            if (log.isLoggable(Level.SEVERE)) {
+                log.log(Level.SEVERE, null, ex);
+            }
+            throw new FacesException(ex);
+        }
+        return cache;
+    }
+
+    /*
+      * (non-Javadoc)
+      *
+      * @see com.sun.facelets.FaceletFactory#getResourceResolver
+      */
+    public ResourceResolver getResourceResolver() {
+        return resolver;
+    }
+
+    
+    /*
+      * (non-Javadoc)
+      *
+      * @see com.sun.facelets.FaceletFactory#getFacelet(java.lang.String)
+      */
+    public Facelet getFacelet(FacesContext context, String uri) throws IOException {
+
+        return this.getFacelet(context, resolveURL(uri));
+
+    }
+
+
+    public Facelet getMetadataFacelet(FacesContext context, String uri) throws IOException {
+
+        return this.getMetadataFacelet(context, resolveURL(uri));
+
+    }
+
+
+    /**
+     * Resolves a path based on the passed URL. If the path starts with '/', then
+     * resolve the path against {@link javax.faces.context.ExternalContext#getResource(java.lang.String)
+     * javax.faces.context.ExternalContext#getResource(java.lang.String)}.
+     * Otherwise create a new URL via {@link URL#URL(java.net.URL,
+     * java.lang.String) URL(URL, String)}.
+     *
+     * @param source base to resolve from
+     * @param path   relative path to the source
+     *
+     * @return resolved URL
+     *
+     * @throws IOException
+     */
+    public URL resolveURL(URL source, String path) throws IOException {
+        // PENDING(FCAPUTO): always go to the resolver to make resource libary contracts work with relative urls
+        if (path.startsWith("/")) {
+            URL url = this.resolver.resolveUrl(path);
+            if (url == null) {
+                throw new FacesFileNotFoundException(path
+                                                + " Not Found in ExternalContext as a Resource");
+            }
+            return url;
+        } else {
+            return new URL(source, path);
+        }
+    }
+
+    /**
+     * Create a Facelet from the passed URL. This method checks if the cached
+     * Facelet needs to be refreshed before returning. If so, uses the passed URL
+     * to build a new instance;
+     *
+     * @param url source url
+     *
+     * @return Facelet instance
+     *
+     * @throws IOException
+     * @throws FaceletException
+     * @throws FacesException
+     * @throws ELException
+     */
+    public Facelet getFacelet(FacesContext context, URL url) throws IOException {
+        
+        Facelet result = getCache(context).getFacelet(url);
+
+        DefaultFacelet _facelet = null;
+        if (result instanceof DefaultFacelet) {
+            _facelet = (DefaultFacelet) result;
+            String docType = _facelet.getSavedDoctype();
+            if (null != docType) {
+                Util.saveDOCTYPEToFacesContextAttributes(docType);
+            }
+            
+            String xmlDecl = _facelet.getSavedXMLDecl();
+            if (null != xmlDecl) {
+                Util.saveXMLDECLToFacesContextAttributes(xmlDecl);
+            }
+        }
+
+        return result;
+        
+    }
+
+    public Facelet getMetadataFacelet(FacesContext context, URL url) throws IOException {
+        return getCache(context).getViewMetadataFacelet(url);
+    }
+
+    public boolean needsToBeRefreshed(URL url) {
+        if(!cache.isFaceletCached(url)) {
+            return true;
+        }
+        if (cachePerContract == null) {
+            return false;
+        }
+        // PENDING(FCAPUTO) not sure, if this is what we want.
+        for (FaceletCache<DefaultFacelet> faceletCache : cachePerContract.values()) {
+            if(!faceletCache.isFaceletCached(url)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private FaceletCache<DefaultFacelet> getCache(FacesContext context) {
+        List<String> contracts = context.getResourceLibraryContracts();
+        if(!contracts.isEmpty()) {
+            StringBuilder builder = new StringBuilder();
+            for (int i=0; i<contracts.size(); i++) {
+                builder.append(contracts.get(i));
+                if (i + 1 != contracts.size()) {
+                    builder.append(",");
+                }
+            }
+            String contractsKey = builder.toString();
+            FaceletCache<DefaultFacelet> faceletCache = cachePerContract.get(contractsKey);
+            if(faceletCache == null) {
+                // PENDING(FCAPUTO) we don't support com.sun.faces.config.WebConfiguration.WebContextInitParameter#FaceletCache for contracts
+                faceletCache = initCache(null);
+                cachePerContract.putIfAbsent(contractsKey, faceletCache);
+                faceletCache = cachePerContract.get(contractsKey);
+            }
+            return faceletCache;
+        }
+        return this.cache;
+    }
+
+    private URL resolveURL(String uri) throws IOException {
+        // PENDING(FCAPUTO) Deactivated caching for resource library contracts. If we still want to cache it, we need a cache per contract libraries list.
+        //         But the ResourceHandler caches on his own (using ResourceManager).
+        URL url = this.resolveURL(this.baseUrl, uri);
+        if (url == null) {
+            throw new IOException("'" + uri + "' not found.");
+        }
+        return url;
+    }
+
+    public UIComponent _createComponent(FacesContext context, String taglibURI, String tagName, 
+    Map<String, Object> attributes) {
+        // PENDING(FCAPUTO) does this work for resource library contracts? I think so.
+        UIComponent result = null;
+        Application app = context.getApplication();
+        ExternalContext extContext = context.getExternalContext();
+        File tmpDir = (File) extContext.getApplicationMap().get("javax.servlet.context.tempdir");
+        File tempFile = null;
+        OutputStreamWriter osw = null;
+        try {
+            
+            // create a temporary file in that directory
+            tempFile = File.createTempFile("mojarra", ".tmp", tmpDir);
+            osw = new OutputStreamWriter(new FileOutputStream(tempFile), RIConstants.CHAR_ENCODING);
+            osw.append("<?xml version='1.0' encoding='");
+            osw.append(RIConstants.CHAR_ENCODING);
+            osw.append("' ?>");
+            osw.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
+            osw.append("<html xmlns=\"http://www.w3.org/1999/xhtml\"\n");
+            osw.append("      xmlns:j=\"").append(taglibURI).append("\">");
+            osw.append("  <j:").append(tagName).append(" ");
+            if (null != attributes && !attributes.isEmpty()) {
+                for (Map.Entry<String,Object> attr : attributes.entrySet()) {
+                    osw.append(attr.getKey()).append("=\"").append(attr.getValue().toString()).append("\"").append(" ");
+                }
+            }
+            String tempId = context.getViewRoot().createUniqueId(context, tagName);
+            osw.append(" id=\"").append(tempId).append("\" />");
+            osw.append("</html>");
+            try {
+                osw.flush();
+                osw.close();
+            } catch (IOException ex) {
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST, "Flushing and closing stream", ex);
+                }
+            }
+                  
+            URL fabricatedFaceletPage = tempFile.toURI().toURL();
+            Facelet f = createFacelet(fabricatedFaceletPage);
+            UIComponent tmp = (UIComponent)
+                    app.createComponent("javax.faces.NamingContainer");
+            tmp.setId(context.getViewRoot().createUniqueId());
+            f.apply(context, tmp);
+                result = tmp.findComponent(tempId);
+            tmp.getChildren().clear();
+            osw = null;
+            
+        } catch (MalformedURLException mue) {
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST, "Invalid URL", mue);
+            }
+        } catch (IOException ioe) {
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST, "I/O error", ioe);
+            }
+        } finally {
+            if (null != osw) {
+                try {
+                    osw.close();
+                } catch (IOException ioe) {
+                    if (log.isLoggable(Level.FINEST)) {
+                        log.log(Level.FINEST, "Closing stream", ioe);
+                    }
+                }
+            }
+            if (null != tempFile) {
+                boolean successful = tempFile.delete();
+                if (!successful && log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST, "Unable to delete temporary file.");
+                }
+            }
+        }
+        
+        try {
+            byte [] faceletPage = "facelet".getBytes(RIConstants.CHAR_ENCODING);
+            ByteArrayInputStream bais = new ByteArrayInputStream(faceletPage);
+        } catch (UnsupportedEncodingException uee) {
+            if (log.isLoggable(Level.SEVERE)) {
+                log.log(Level.SEVERE, "Unsupported encoding when creating component for " + tagName + " in " + taglibURI,
+                        uee);
+            }
+        }
+              
+        if (null != result) {
+            result.setId(null);        
+        }
+        return result;
+    }
+    
+    
+
+
+    /**
+     * Uses the internal Compiler reference to build a Facelet given the passed
+     * URL.
+     *
+     * @param url source
+     *
+     * @return a Facelet instance
+     *
+     * @throws IOException
+     * @throws FaceletException
+     * @throws FacesException
+     * @throws ELException
+     */
+    private DefaultFacelet createFacelet(URL url) throws IOException {
+        if (log.isLoggable(Level.FINE)) {
+            log.fine("Creating Facelet for: " + url);
+        }
+        String escapedBaseURL = Pattern.quote(this.baseUrl.getFile());
+        String alias = '/' + url.getFile().replaceFirst(escapedBaseURL, "");
+        try {
+            FaceletHandler h = this.compiler.compile(url, alias);
+            return new DefaultFacelet(this,
+                                      this.compiler.createExpressionFactory(),
+                                      url,
+                                      alias,
+                                      h);
+        } catch (FileNotFoundException fnfe) {
+            throw new FileNotFoundException("Facelet "
+                                            + alias
+                                            + " not found at: "
+                                            + url.toExternalForm());
+        }
+    }
+
+    private DefaultFacelet createMetadataFacelet(URL url) throws IOException {
+
+        if (log.isLoggable(Level.FINE)) {
+            log.fine("Creating Metadata Facelet for: " + url);
+        }
+        String escapedBaseURL = Pattern.quote(this.baseUrl.getFile());
+        String alias = '/' + url.getFile().replaceFirst(escapedBaseURL, "");
+        try {
+            FaceletHandler h = this.compiler.metadataCompile(url, alias);
+            return new DefaultFacelet(this,
+                                      this.compiler.createExpressionFactory(),
+                                      url,
+                                      alias,
+                                      h);
+        } catch (FileNotFoundException fnfe) {
+            throw new FileNotFoundException("Facelet "
+                                            + alias
+                                            + " not found at: "
+                                            + url.toExternalForm());
+        }
+
+    }
+
+
+    public long getRefreshPeriod() {
+        return this.refreshPeriod;
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private static final class IdMapperFactory implements Cache.Factory<String,IdMapper> {
+
+
+        // ------------------------------------------ Methods from Cache.Factory
+
+
+        public IdMapper newInstance(String arg) throws InterruptedException {
+
+            return new IdMapper();
+
+        }
+
+    }    
+    
+}
diff --git a/com/sun/faces/facelets/impl/DefaultResourceResolver.java b/com/sun/faces/facelets/impl/DefaultResourceResolver.java
new file mode 100644
index 0000000..156c5d4
--- /dev/null
+++ b/com/sun/faces/facelets/impl/DefaultResourceResolver.java
@@ -0,0 +1,90 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.impl;
+
+import javax.faces.view.facelets.ResourceResolver;
+import java.net.URL;
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.ViewResource;
+import javax.faces.context.FacesContext;
+
+public class DefaultResourceResolver extends ResourceResolver {
+    
+    private ResourceHandler resourceHandler = null;
+
+    public DefaultResourceResolver(ResourceHandler resourceHandler) {
+        super();
+        this.resourceHandler = resourceHandler;
+    }
+
+    public URL resolveUrl(String path) {
+        ViewResource faceletResource = resourceHandler.createViewResource(FacesContext.getCurrentInstance(), path);
+        URL result = null;
+        if (null != faceletResource) {
+            result = faceletResource.getURL();
+        }
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "DefaultResourceResolver";
+    }
+
+}
diff --git a/com/sun/faces/facelets/impl/FaceletCacheFactoryImpl.java b/com/sun/faces/facelets/impl/FaceletCacheFactoryImpl.java
new file mode 100644
index 0000000..8dedf05
--- /dev/null
+++ b/com/sun/faces/facelets/impl/FaceletCacheFactoryImpl.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.impl;
+
+import com.sun.faces.config.WebConfiguration;
+import javax.faces.view.facelets.FaceletCache;
+import javax.faces.view.facelets.FaceletCacheFactory;
+
+
+
+public class FaceletCacheFactoryImpl extends FaceletCacheFactory {
+
+    public FaceletCacheFactoryImpl() {
+    }
+
+    @Override
+    public FaceletCache getFaceletCache() {
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        String refreshPeriod = webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.FaceletsDefaultRefreshPeriod);
+        long period = Long.parseLong(refreshPeriod) * 1000;
+        FaceletCache<DefaultFacelet> result = new DefaultFaceletCache(period);
+        return result;
+
+    }
+
+
+
+}
diff --git a/com/sun/faces/facelets/impl/IdMapper.java b/com/sun/faces/facelets/impl/IdMapper.java
new file mode 100644
index 0000000..c473735
--- /dev/null
+++ b/com/sun/faces/facelets/impl/IdMapper.java
@@ -0,0 +1,131 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.impl;
+
+import com.sun.faces.util.Cache;
+import com.sun.faces.util.Util;
+
+import javax.faces.context.FacesContext;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Used to provide aliases to Facelets generated unique IDs with tend to be
+ * womewhat long.
+ */
+public class IdMapper {
+
+    private static final String KEY = IdMapper.class.getName();
+
+    private Cache<String,String> idCache = new Cache<String,String>(new IdGen());
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    IdMapper() { }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public String getAliasedId(String id) {
+
+        return idCache.get(id);
+
+    }
+
+
+    public static void setMapper(FacesContext ctx, IdMapper mapper) {
+
+        Util.notNull("ctx", ctx);
+        if (mapper == null) {
+            ctx.getAttributes().remove(KEY);
+        } else {
+            ctx.getAttributes().put(KEY, mapper);
+        }
+
+    }
+
+
+    public static IdMapper getMapper(FacesContext ctx) {
+
+        Util.notNull("ctx", ctx);
+        return ((IdMapper) ctx.getAttributes().get(KEY));
+
+    }
+
+    
+    // ---------------------------------------------------------- Nested Classes
+
+    private static final class IdGen implements Cache.Factory<String,String> {
+
+        private AtomicInteger counter = new AtomicInteger(0);
+
+
+        // ------------------------------------------ Methods from Cache.Factory
+
+
+        public String newInstance(String arg) throws InterruptedException {
+
+            return 't' + Integer.toString(counter.incrementAndGet());
+
+        }
+
+    }
+}
diff --git a/com/sun/faces/facelets/impl/XMLFrontMatterSaver.java b/com/sun/faces/facelets/impl/XMLFrontMatterSaver.java
new file mode 100644
index 0000000..5041291
--- /dev/null
+++ b/com/sun/faces/facelets/impl/XMLFrontMatterSaver.java
@@ -0,0 +1,53 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.facelets.impl;
+
+public interface XMLFrontMatterSaver {
+    
+    public String getSavedDoctype();
+
+    public void setSavedDoctype(String savedDoctype);
+    
+    public String getSavedXMLDecl();
+    
+    public void setSavedXMLDecl(String savedXmlDecl);
+    
+}
diff --git a/com/sun/faces/facelets/tag/AbstractTagLibrary.java b/com/sun/faces/facelets/tag/AbstractTagLibrary.java
new file mode 100644
index 0000000..1bd6b19
--- /dev/null
+++ b/com/sun/faces/facelets/tag/AbstractTagLibrary.java
@@ -0,0 +1,776 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.view.facelets.*;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.view.Location;
+
+/**
+ * Base class for defining TagLibraries in Java
+ * 
+ * @author Jacob Hookom
+ */
+public abstract class AbstractTagLibrary implements TagLibrary {
+
+    private static class ValidatorConfigWrapper implements ValidatorConfig {
+
+        private final TagConfig parent;
+        private final String validatorId;
+        
+        public ValidatorConfigWrapper(TagConfig parent, String validatorId) {
+            this.parent = parent;
+            this.validatorId = validatorId;
+        }
+        
+        public String getValidatorId() {
+            return this.validatorId;
+        }
+
+        public FaceletHandler getNextHandler() {
+            return this.parent.getNextHandler();
+        }
+
+        public Tag getTag() {
+            return this.parent.getTag();
+        }
+
+        public String getTagId() {
+            return this.parent.getTagId();
+        }  
+    }
+    
+    private static class ConverterConfigWrapper implements ConverterConfig {
+        private final TagConfig parent;
+        private final String converterId;
+        
+        public ConverterConfigWrapper(TagConfig parent, String converterId) {
+            this.parent = parent;
+            this.converterId = converterId;
+        }
+        
+        public String getConverterId() {
+            return this.converterId;
+        }
+        public FaceletHandler getNextHandler() {
+            return this.parent.getNextHandler();
+        }
+        public Tag getTag() {
+            return this.parent.getTag();
+        }
+        public String getTagId() {
+            return this.parent.getTagId();
+        }
+    }
+    
+    private static final class BehaviorConfigWrapper implements BehaviorConfig {
+        private final TagConfig parent;
+        private final String behaviorId;
+		/**
+		 * <p class="changed_added_2_0"></p>
+		 * @param parent
+		 * @param behaviorId
+		 */
+		public BehaviorConfigWrapper(TagConfig parent, String behaviorId) {
+			this.parent = parent;
+			this.behaviorId = behaviorId;
+		}
+		/**
+		 * <p class="changed_added_2_0"></p>
+		 * @return the behaviorId
+		 */
+		public String getBehaviorId() {
+			return behaviorId;
+		}
+		/**
+		 * <p class="changed_added_2_0"></p>
+		 * @return
+		 * @see javax.faces.view.facelets.TagConfig#getNextHandler()
+		 */
+		public FaceletHandler getNextHandler() {
+			return parent.getNextHandler();
+		}
+		/**
+		 * <p class="changed_added_2_0"></p>
+		 * @return
+		 * @see javax.faces.view.facelets.TagConfig#getTag()
+		 */
+		public Tag getTag() {
+			return parent.getTag();
+		}
+		/**
+		 * <p class="changed_added_2_0"></p>
+		 * @return
+		 * @see javax.faces.view.facelets.TagConfig#getTagId()
+		 */
+		public String getTagId() {
+			return parent.getTagId();
+		}
+        
+    	
+    }
+    
+    private static class HandlerFactory implements TagHandlerFactory {
+        private final static Class[] CONSTRUCTOR_SIG = new Class[] { TagConfig.class };
+
+        protected final Class handlerType;
+
+        public HandlerFactory(Class handlerType) {
+            this.handlerType = handlerType;
+        }
+
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+                ELException {
+            try {
+                return (TagHandler) this.handlerType.getConstructor(
+                        CONSTRUCTOR_SIG).newInstance(new Object[] { cfg });
+            } catch (InvocationTargetException ite) {
+                Throwable t = ite.getCause();
+                if (t instanceof FacesException) {
+                    throw (FacesException) t;
+                } else if (t instanceof ELException) {
+                    throw (ELException) t;
+                } else {
+                    throw new FacesException("Error Instantiating: "
+                            + this.handlerType.getName(), t);
+                }
+            } catch (Exception e) {
+                throw new FacesException("Error Instantiating: "
+                        + this.handlerType.getName(), e);
+            }
+        }
+    }
+
+    protected static class ComponentConfigWrapper implements ComponentConfig {
+
+        protected final TagConfig parent;
+
+        protected final String componentType;
+
+        protected final String rendererType;
+
+        public ComponentConfigWrapper(TagConfig parent, String componentType,
+                String rendererType) {
+            this.parent = parent;
+            this.componentType = componentType;
+            this.rendererType = rendererType;
+        }
+
+        public String getComponentType() {
+            return this.componentType;
+        }
+
+        public String getRendererType() {
+            return this.rendererType;
+        }
+
+        public FaceletHandler getNextHandler() {
+            return this.parent.getNextHandler();
+        }
+
+        public Tag getTag() {
+            return this.parent.getTag();
+        }
+
+        public String getTagId() {
+            return this.parent.getTagId();
+        }
+    }
+
+    private static class UserTagFactory implements TagHandlerFactory {
+        protected final URL location;
+
+        public UserTagFactory(URL location) {
+            this.location = location;
+        }
+
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+                ELException {
+            return new UserTagHandler(cfg, this.location);
+        }
+    }
+
+    private static class CompositeComponentTagFactory implements TagHandlerFactory {
+        protected final String resourceId;
+
+        public CompositeComponentTagFactory(String resourceId) {
+            this.resourceId = resourceId;
+        }
+
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+                ELException {
+            ComponentConfig componentConfig = 
+                    new ComponentConfigWrapper(cfg, 
+                    "javax.faces.NamingContainer",
+                    "javax.faces.Composite");
+            ResourceHandler resourceHandler = 
+                    FacesContext.getCurrentInstance().getApplication().getResourceHandler();
+            TagHandler result = null;
+            // Use the naming convention to extract the library name and
+            // component name from the resourceId.
+            Resource resource = resourceHandler.createResourceFromId(resourceId);
+            if (null != resource) {
+                result = new CompositeComponentTagHandler(resource, componentConfig);
+            } else {
+                Location loc = new Location(resourceId, 0, 0);
+                Tag tag = new Tag(loc, "", "", "", null);
+                throw new TagException(tag, "Cannot create composite component tag handler for composite-source element in taglib.xml file");
+            }
+            return result;
+        }
+    }
+
+    private static class ComponentHandlerFactory implements TagHandlerFactory {
+
+        protected final String componentType;
+
+        protected final String renderType;
+
+        public ComponentHandlerFactory(String componentType, String renderType) {
+            this.componentType = componentType;
+            this.renderType = renderType;
+        }
+
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+                ELException {
+            ComponentConfig ccfg = new ComponentConfigWrapper(cfg,
+                    this.componentType, this.renderType);
+            return new ComponentHandler(ccfg);
+        }
+    }
+
+    private static class UserComponentHandlerFactory implements
+            TagHandlerFactory {
+
+        private final static Class[] CONS_SIG = new Class[] { ComponentConfig.class };
+
+        protected final String componentType;
+
+        protected final String renderType;
+
+        protected final Class type;
+
+        protected final Constructor constructor;
+
+        public UserComponentHandlerFactory(String componentType,
+                String renderType, Class type) {
+            this.componentType = componentType;
+            this.renderType = renderType;
+            this.type = type;
+            try {
+                this.constructor = this.type.getConstructor(CONS_SIG);
+            } catch (Exception e) {
+                throw new FaceletException(
+                        "Must have a Constructor that takes in a ComponentConfig",
+                        e);
+            }
+        }
+
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+                ELException {
+            try {
+                ComponentConfig ccfg = new ComponentConfigWrapper(cfg,
+                        this.componentType, this.renderType);
+                return (TagHandler) this.constructor
+                        .newInstance(new Object[] { ccfg });
+            } catch (InvocationTargetException e) {
+                throw new FaceletException(e.getCause().getMessage(), e.getCause().getCause());
+            } catch (Exception e) {
+                throw new FaceletException("Error Instantiating ComponentHandler: "+this.type.getName(), e);
+            }
+        }
+    }
+
+    private static class ValidatorHandlerFactory implements TagHandlerFactory {
+
+        protected final String validatorId;
+
+        public ValidatorHandlerFactory(String validatorId) {
+            this.validatorId = validatorId;
+        }
+
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+                ELException {
+            return new ValidatorHandler(new ValidatorConfigWrapper(cfg, this.validatorId));
+        }
+    }
+
+    private static class ConverterHandlerFactory implements TagHandlerFactory {
+
+        protected final String converterId;
+
+        public ConverterHandlerFactory(String converterId) {
+            this.converterId = converterId;
+        }
+
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+                ELException {
+            return new ConverterHandler(new ConverterConfigWrapper(cfg, this.converterId));
+        }
+    }
+    
+    private static final class BehaviorHandlerFactory implements TagHandlerFactory {
+    	private final String behaviorId;
+
+		/**
+		 * <p class="changed_added_2_0"></p>
+		 * @param behaviorId
+		 */
+		public BehaviorHandlerFactory(String behaviorId) {
+			this.behaviorId = behaviorId;
+		}
+    	
+		public TagHandler createHandler(TagConfig cfg) throws FacesException,
+				ELException {
+			return new BehaviorHandler(new BehaviorConfigWrapper(cfg,behaviorId));
+		}
+    }
+
+    private static class UserConverterHandlerFactory implements TagHandlerFactory {
+        private final static Class[] CONS_SIG = new Class[] { ConverterConfig.class };
+        
+        protected final String converterId;
+        
+        protected final Class type;
+
+        protected final Constructor constructor;
+        
+        public UserConverterHandlerFactory(String converterId, Class type) {
+            this.converterId = converterId;
+            this.type = type;
+            try {
+                this.constructor = this.type.getConstructor(CONS_SIG);
+            } catch (Exception e) {
+                throw new FaceletException(
+                        "Must have a Constructor that takes in a ConverterConfig",
+                        e);
+            }
+        }
+        
+        public TagHandler createHandler(TagConfig cfg) throws FacesException,
+        ELException {
+            try {
+                ConverterConfig ccfg = new ConverterConfigWrapper(cfg,
+                        this.converterId);
+                return (TagHandler) this.constructor
+                        .newInstance(new Object[] { ccfg });
+            } catch (InvocationTargetException e) {
+                throw new FaceletException(e.getCause().getMessage(), e.getCause().getCause());
+            } catch (Exception e) {
+                throw new FaceletException("Error Instantiating ConverterHandler: "+this.type.getName(), e);
+            }
+        }
+    }
+    
+    private static class UserValidatorHandlerFactory implements
+			TagHandlerFactory {
+		private final static Class[] CONS_SIG = new Class[] { ValidatorConfig.class };
+
+		protected final String validatorId;
+
+		protected final Class type;
+
+		protected final Constructor constructor;
+
+		public UserValidatorHandlerFactory(String validatorId, Class type) {
+			this.validatorId = validatorId;
+			this.type = type;
+			try {
+				this.constructor = this.type.getConstructor(CONS_SIG);
+			} catch (Exception e) {
+				throw new FaceletException(
+						"Must have a Constructor that takes in a ValidatorConfig",
+						e);
+			}
+		}
+
+		public TagHandler createHandler(TagConfig cfg) throws FacesException,
+				ELException {
+			try {
+				ValidatorConfig ccfg = new ValidatorConfigWrapper(cfg,
+						this.validatorId);
+				return (TagHandler) this.constructor
+						.newInstance(new Object[] { ccfg });
+			} catch (InvocationTargetException e) {
+				throw new FaceletException(e.getCause().getMessage(), e
+						.getCause().getCause());
+			} catch (Exception e) {
+				throw new FaceletException(
+						"Error Instantiating ValidatorHandler: "
+								+ this.type.getName(), e);
+			}
+		}
+	}
+ 
+    private static class UserBehaviorHandlerFactory implements
+			TagHandlerFactory {
+		private final static Class[] CONS_SIG = new Class[] { BehaviorConfig.class };
+
+		protected final String behaviorId;
+
+		protected final Class type;
+
+		protected final Constructor constructor;
+
+		public UserBehaviorHandlerFactory(String behaviorId, Class type) {
+			this.behaviorId = behaviorId;
+			this.type = type;
+			try {
+				this.constructor = this.type.getConstructor(CONS_SIG);
+			} catch (Exception e) {
+				throw new FaceletException(
+						"Must have a Constructor that takes in a BehaviorConfig",
+						e);
+			}
+		}
+
+		public TagHandler createHandler(TagConfig cfg) throws FacesException,
+				ELException {
+			try {
+				BehaviorConfig ccfg = new BehaviorConfigWrapper(cfg,
+						this.behaviorId);
+				return (TagHandler) this.constructor
+						.newInstance(new Object[] { ccfg });
+			} catch (InvocationTargetException e) {
+				throw new FaceletException(e.getCause().getMessage(), e
+						.getCause().getCause());
+			} catch (Exception e) {
+				throw new FaceletException(
+						"Error Instantiating BehaviorHandler: "
+								+ this.type.getName(), e);
+			}
+		}
+	}
+        
+    private final Map factories;
+
+    private final String namespace;
+
+    private final Map functions;
+
+    public AbstractTagLibrary(String namespace) {
+        this.namespace = namespace;
+        this.factories = new HashMap();
+        this.functions = new HashMap();
+    }
+
+    /**
+     * Add a ComponentHandlerImpl with the specified componentType and rendererType,
+     * aliased by the tag name.
+     * 
+     * @see javax.faces.application.Application#createComponent(java.lang.String)
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param componentType
+     *            componentType to use
+     * @param rendererType
+     *            rendererType to use
+     */
+    protected final void addComponent(String name, String componentType,
+            String rendererType) {
+        this.factories.put(name, new ComponentHandlerFactory(componentType,
+                rendererType));
+    }
+
+    /**
+     * Add a ComponentHandlerImpl with the specified componentType and rendererType,
+     * aliased by the tag name. The Facelet will be compiled with the specified
+     * HandlerType (which must extend AbstractComponentHandler).
+     * 
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param componentType
+     *            componentType to use
+     * @param rendererType
+     *            rendererType to use
+     * @param handlerType
+     *            a Class that extends ComponentHandler
+     */
+    protected final void addComponent(String name, String componentType,
+            String rendererType, Class handlerType) {
+        this.factories.put(name, new UserComponentHandlerFactory(componentType,
+                rendererType, handlerType));
+    }
+
+    /**
+     * Add a ConverterHandler for the specified converterId
+     * 
+     * @see ConverterHandler
+     * @see javax.faces.application.Application#createConverter(java.lang.String)
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param converterId
+     *            id to pass to Application instance
+     */
+    protected final void addConverter(String name, String converterId) {
+        this.factories.put(name, new ConverterHandlerFactory(converterId));
+    }
+    
+    /**
+     * Add a ConverterHandler for the specified converterId of a TagHandler type
+     * 
+     * @see ConverterHandler
+     * @see ConverterConfig
+     * @see javax.faces.application.Application#createConverter(java.lang.String)
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param converterId
+     *            id to pass to Application instance
+     * @param type
+     *            TagHandler type that takes in a ConverterConfig
+     */
+    protected final void addConverter(String name, String converterId, Class type) {
+        this.factories.put(name, new UserConverterHandlerFactory(converterId, type));
+    }
+
+    /**
+     * Add a ValidatorHandler for the specified validatorId
+     * 
+     * @see ValidatorHandler
+     * @see javax.faces.application.Application#createValidator(java.lang.String)
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param validatorId
+     *            id to pass to Application instance
+     */
+    protected final void addValidator(String name, String validatorId) {
+        this.factories.put(name, new ValidatorHandlerFactory(validatorId));
+    }
+    
+    /**
+     * Add a ValidatorHandler for the specified validatorId
+     * 
+     * @see ValidatorHandler
+     * @see ValidatorConfig
+     * @see javax.faces.application.Application#createValidator(java.lang.String)
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param validatorId
+     *            id to pass to Application instance
+     * @param type
+     *            TagHandler type that takes in a ValidatorConfig
+     */
+    protected final void addValidator(String name, String validatorId, Class type) {
+        this.factories.put(name, new UserValidatorHandlerFactory(validatorId, type));
+    }
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     * @param name
+     * @param behaviorId
+     */
+    protected final void addBehavior(String name, String behaviorId){
+		this.factories.put(name, new BehaviorHandlerFactory(behaviorId));
+	}
+
+    protected final void addBehavior(String name, String behaviorId, Class type) {
+        this.factories.put(name, new UserBehaviorHandlerFactory(behaviorId, type));
+    }
+	/**
+     * Use the specified HandlerType in compiling Facelets. HandlerType must
+     * extend TagHandler.
+     * 
+     * @see TagHandler
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param handlerType
+     *            must extend TagHandler
+     */
+    protected final void addTagHandler(String name, Class handlerType) {
+        this.factories.put(name, new HandlerFactory(handlerType));
+    }
+
+    /**
+     * Add a UserTagHandler specified a the URL source.
+     * 
+     * @see UserTagHandler
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param source source where the Facelet (Tag) source is
+     */
+    protected final void addUserTag(String name, URL source) {
+        this.factories.put(name, new UserTagFactory(source));
+    }
+    
+    /**
+     * Add a CompositeComponentTagHandler for the specified resource.
+     * 
+     * @see UserTagHandler
+     * @param name
+     *            name to use, "foo" would be <my:foo />
+     * @param resourceId source where the Facelet (Tag) source is
+     */
+    protected final void addCompositeComponentTag(String name, String resourceId) {
+        this.factories.put(name, new CompositeComponentTagFactory(resourceId));
+    }
+    
+    
+    /**
+     * Add a Method to be used as a Function at Compilation.
+     * 
+     * @see javax.el.FunctionMapper
+     * 
+     * @param name (suffix) of function name
+     * @param method method instance 
+     */
+    protected final void addFunction(String name, Method method) {
+        this.functions.put(name, method);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.TagLibrary#containsNamespace(java.lang.String)
+     */
+    public boolean containsNamespace(String ns, Tag t) {
+        return this.namespace.equals(ns);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.TagLibrary#containsTagHandler(java.lang.String,
+     *      java.lang.String)
+     */
+    public boolean containsTagHandler(String ns, String localName) {
+        if (this.namespace.equals(ns)) {
+            if (this.factories.containsKey(localName)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.TagLibrary#createTagHandler(java.lang.String,
+     *      java.lang.String, com.sun.facelets.TagConfig)
+     */
+    public TagHandler createTagHandler(String ns, String localName,
+            TagConfig tag) throws FacesException {
+        if (this.namespace.equals(ns)) {
+            TagHandlerFactory f = (TagHandlerFactory) this.factories
+                    .get(localName);
+            if (f != null) {
+                return f.createHandler(tag);
+            }
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.TagLibrary#containsFunction(java.lang.String,
+     *      java.lang.String)
+     */
+    public boolean containsFunction(String ns, String name) {
+        if (this.namespace.equals(ns)) {
+            return this.functions.containsKey(name);
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.TagLibrary#createFunction(java.lang.String,
+     *      java.lang.String)
+     */
+    public Method createFunction(String ns, String name) {
+        if (this.namespace.equals(ns)) {
+            return (Method) this.functions.get(name);
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object obj) {
+        return (obj instanceof TagLibrary && obj.hashCode() == this.hashCode());
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    public int hashCode() {
+        return this.namespace.hashCode();
+    }
+
+    public String getNamespace() {
+        return namespace;
+    }
+}
diff --git a/com/sun/faces/facelets/tag/BeanPropertyTagRule.java b/com/sun/faces/facelets/tag/BeanPropertyTagRule.java
new file mode 100644
index 0000000..896b072
--- /dev/null
+++ b/com/sun/faces/facelets/tag/BeanPropertyTagRule.java
@@ -0,0 +1,146 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import javax.faces.view.facelets.*;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: BeanPropertyTagRule.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+final class BeanPropertyTagRule extends MetaRule {
+    
+    final static class LiteralPropertyMetadata extends Metadata {
+        
+        private final Method method;
+
+        private final TagAttribute attribute;
+
+        private Object[] value;
+
+        public LiteralPropertyMetadata(Method method, TagAttribute attribute) {
+            this.method = method;
+            this.attribute = attribute;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            if (value == null) {
+                String str = this.attribute.getValue();
+                value = new Object[] { ctx.getExpressionFactory().coerceToType(str,
+                        method.getParameterTypes()[0]) };
+            }
+            try {
+                method.invoke(instance, this.value);
+            } catch (InvocationTargetException e) {
+                throw new TagAttributeException(this.attribute, e.getCause());
+            } catch (Exception e) {
+                throw new TagAttributeException(this.attribute, e);
+            }
+        }
+
+    }
+    
+    final static class DynamicPropertyMetadata extends Metadata {
+
+        private final Method method;
+
+        private final TagAttribute attribute;
+
+        private final Class type;
+
+        public DynamicPropertyMetadata(Method method, TagAttribute attribute) {
+            this.method = method;
+            this.type = method.getParameterTypes()[0];
+            this.attribute = attribute;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            try {
+                this.method.invoke(instance, new Object[] { this.attribute
+                        .getObject(ctx, this.type) });
+            } catch (InvocationTargetException e) {
+                throw new TagAttributeException(this.attribute, e.getCause());
+            } catch (Exception e) {
+                throw new TagAttributeException(this.attribute, e);
+            }
+        }
+    }
+    
+    public final static BeanPropertyTagRule Instance = new BeanPropertyTagRule();
+
+    public Metadata applyRule(String name, TagAttribute attribute,
+            MetadataTarget meta) {
+        Method m = meta.getWriteMethod(name);
+
+        // if the property is writable
+        if (m != null) {
+            if (attribute.isLiteral()) {
+                return new LiteralPropertyMetadata(m, attribute);
+            } else {
+                return new DynamicPropertyMetadata(m, attribute);
+            }
+        }
+
+        return null;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/CompositeTagDecorator.java b/com/sun/faces/facelets/tag/CompositeTagDecorator.java
new file mode 100644
index 0000000..2a07423
--- /dev/null
+++ b/com/sun/faces/facelets/tag/CompositeTagDecorator.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.util.Util;
+
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagDecorator;
+
+/**
+ * A TagDecorator that is composed of 1 or more TagDecorator instances. It uses
+ * the chain of responsibility pattern to stop processing if any of the
+ * TagDecorators return a value other than null.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: CompositeTagDecorator.java 10664 2012-09-20 05:53:15Z edburns $
+ */
+public final class CompositeTagDecorator implements TagDecorator {
+
+    private final TagDecorator[] decorators;
+
+    private final DefaultTagDecorator defaultTagDecorator;
+
+    public CompositeTagDecorator(TagDecorator[] decorators) {
+        Util.notNull("decorators", decorators);
+        this.decorators = decorators;
+        this.defaultTagDecorator = new DefaultTagDecorator();
+    }
+
+    /**
+     * Uses the chain of responsibility pattern to stop processing if any of
+     * the TagDecorators return a value other than null.
+     */
+    public Tag decorate(Tag tag) {
+        // eliminate the jsf: attributes
+        Tag noJsfAttributes = defaultTagDecorator.decorate(tag);
+        if(noJsfAttributes != null) {
+            // pass the converted tag to the other decorators
+            tag = noJsfAttributes;
+        }
+
+        Tag t = null;
+        for (int i = 0; i < this.decorators.length; i++) {
+            t = this.decorators[i].decorate(tag);
+            if (t != null) {
+                return t;
+            }
+        }
+        return tag;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/CompositeTagLibrary.java b/com/sun/faces/facelets/tag/CompositeTagLibrary.java
new file mode 100644
index 0000000..316528f
--- /dev/null
+++ b/com/sun/faces/facelets/tag/CompositeTagLibrary.java
@@ -0,0 +1,229 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.facelets.compiler.CompilationMessageHolder;
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagLibrary;
+import com.sun.faces.facelets.tag.jsf.FacesComponentTagLibrary;
+import com.sun.faces.facelets.tag.jsf.LazyTagLibrary;
+import com.sun.faces.util.Util;
+
+import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * A TagLibrary that is composed of 1 or more TagLibrary children. Uses the
+ * chain of responsibility pattern to stop searching as soon as one of the
+ * children handles the requested method.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: CompositeTagLibrary.java 9670 2012-02-13 22:55:54Z edburns $
+ */
+public final class CompositeTagLibrary implements TagLibrary {
+
+    private TagLibrary[] libraries;
+    private CompilationMessageHolder messageHolder;
+
+    public CompositeTagLibrary(TagLibrary[] libraries, CompilationMessageHolder unit) {
+        Util.notNull("libraries", libraries);
+        this.libraries = libraries;
+        this.messageHolder = unit;
+    }
+
+    public CompositeTagLibrary(TagLibrary[] libraries) {
+        this(libraries, null);
+    }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.tag.TagLibrary#containsNamespace(java.lang.String)
+     */
+    public boolean containsNamespace(String ns, Tag t) {
+        boolean result = true;
+        for (int i = 0; i < this.libraries.length; i++) {
+            if (this.libraries[i].containsNamespace(ns, null)) {
+                return true;
+            }
+        }
+        // PENDING: this is a terribly inefficient impl.  Needs refactoring.
+        LazyTagLibrary lazyLibraries [] = new LazyTagLibrary[2];
+        lazyLibraries[0] = new CompositeComponentTagLibrary(ns);
+        lazyLibraries[1] = new FacesComponentTagLibrary(ns);
+        LazyTagLibrary toTest = null;
+        for (int i = 0; i < lazyLibraries.length; i++) {
+            if (lazyLibraries[i].tagLibraryForNSExists(ns)) {
+                toTest = lazyLibraries[i];
+                break;
+            }
+        }
+        if (null != toTest) {
+            TagLibrary [] librariesPlusOne = new TagLibrary[libraries.length+1];
+            System.arraycopy(this.libraries, 0, librariesPlusOne, 
+                    0, libraries.length);
+            librariesPlusOne[libraries.length] = toTest;
+            for (int i = 0; i < this.libraries.length; i++) {
+                libraries[i] = null;
+            }
+            libraries = librariesPlusOne;
+            return true;
+        }
+        else {
+            FacesContext context = FacesContext.getCurrentInstance();
+            if (context.isProjectStage(ProjectStage.Development)) {
+                if (null != t &&
+                    !ns.equals("http://www.w3.org/1999/xhtml")) {
+                    // messageHolder will only be null in the case of the private 
+                    // EMPTY_LIBRARY class variable of the Compiler class.
+                    // This code will never be called on that CompositeTagLibrary
+                    // instance.
+                    assert(null != this.messageHolder);
+                    String prefix = getPrefixFromTag(t);
+                    if (null != prefix) {
+                        List<FacesMessage> prefixMessages = this.messageHolder.getNamespacePrefixMessages(context, prefix);
+                        prefixMessages.add(new FacesMessage(FacesMessage.SEVERITY_WARN,
+                                "Warning: This page calls for XML namespace " + ns +
+                                " declared with prefix " + prefix + 
+                                " but no taglibrary exists for that namespace.", ""));
+                    }
+                }
+            }
+        }
+        return false;
+    }
+    
+    private String getPrefixFromTag(Tag t) {
+        String result = t.getQName();
+        if (null != result) {
+            int i;
+            if (-1 != (i = result.indexOf(":"))) {
+                result = result.substring(0, i);
+            }
+        }
+        return result;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.tag.TagLibrary#containsTagHandler(java.lang.String,
+     *      java.lang.String)
+     */
+    public boolean containsTagHandler(String ns, String localName) {
+        for (int i = 0; i < this.libraries.length; i++) {
+            if (this.libraries[i].containsTagHandler(ns, localName)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.tag.TagLibrary#createTagHandler(java.lang.String,
+     *      java.lang.String, com.sun.facelets.tag.TagConfig)
+     */
+    public TagHandler createTagHandler(String ns, String localName,
+            TagConfig tag) throws FacesException {
+        for (int i = 0; i < this.libraries.length; i++) {
+            if (this.libraries[i].containsTagHandler(ns, localName)) {
+                return this.libraries[i].createTagHandler(ns, localName, tag);
+            }
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.tag.TagLibrary#containsFunction(java.lang.String,
+     *      java.lang.String)
+     */
+    public boolean containsFunction(String ns, String name) {
+        for (int i = 0; i < this.libraries.length; i++) {
+            if (this.libraries[i].containsFunction(ns, name)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.tag.TagLibrary#createFunction(java.lang.String,
+     *      java.lang.String)
+     */
+    public Method createFunction(String ns, String name) {
+        for (int i = 0; i < this.libraries.length; i++) {
+            if (this.libraries[i].containsFunction(ns, name)) {
+                return this.libraries[i].createFunction(ns, name);
+            }
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/facelets/tag/DefaultTagDecorator.java b/com/sun/faces/facelets/tag/DefaultTagDecorator.java
new file mode 100644
index 0000000..96b03e2
--- /dev/null
+++ b/com/sun/faces/facelets/tag/DefaultTagDecorator.java
@@ -0,0 +1,315 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDLGPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.facelets.tag.jsf.PassThroughAttributeLibrary;
+import com.sun.faces.facelets.tag.jsf.PassThroughElementLibrary;
+import com.sun.faces.facelets.tag.jsf.html.HtmlLibrary;
+
+import javax.faces.render.Renderer;
+import javax.faces.view.Location;
+import javax.faces.view.facelets.FaceletException;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributes;
+import javax.faces.view.facelets.TagDecorator;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A simple tag decorator to enable jsf: syntax
+ */
+class DefaultTagDecorator implements TagDecorator {
+
+    private static enum Mapper {
+        a(
+                new ElementConverter("h:commandLink", "jsf:action"),
+                new ElementConverter("h:commandLink", "jsf:actionListener"),
+                new ElementConverter("h:outputLink", "jsf:value"),
+                new ElementConverter("h:link", "jsf:outcome")),
+
+        img("h:graphicImage"), body("h:body"), head("h:head"), label("h:outputLabel"), script("h:outputScript"),
+        link("h:outputStylesheet"),
+
+        form("h:form"), textarea("h:inputTextarea"),
+        // TODO if we want the name of the button to become the id, we have to do .id("name")
+        button(new ElementConverter("h:button", "jsf:outcome"), new ElementConverter("h:commandButton")),
+
+        select(new ElementConverter("h:selectManyListbox", "multiple").id("name"),
+                // TODO this is a little bit ugly to handle the name as if it were jsf:id. we should not support this
+                new ElementConverter("h:selectOneListbox").id("name")),
+
+        input(new ElementConverter("h:inputText", "type")
+                // TODO this is a little bit ugly to handle the name as if it were jsf:id. we should not support this
+                .id("name")
+                .map("hidden", "inputHidden")
+                .map("password", "inputSecret")
+                .map("number", "inputText")
+                .map("search", "inputText")
+                .map("email", "inputText")
+                .map("datetime", "inputText")
+                .map("date", "inputText")
+                .map("month", "inputText")
+                .map("week", "inputText")
+                .map("time", "inputText")
+                .map("datetime-local", "inputText")
+                .map("range", "inputText")
+                .map("color", "inputText")
+                .map("url", "inputText")
+                .map("checkbox", "selectBooleanCheckbox")
+                .map("file", "inputFile")
+                .map("submit", "commandButton")
+                .map("reset", "commandButton")
+                .map("button", "button"));
+
+        private ElementConverter elementConverter;
+
+        private Mapper(final ElementConverter... elementConverters) {
+            if (elementConverters.length == 1) {
+                this.elementConverter = elementConverters[0];
+            } else {
+                this.elementConverter = new ElementConverter() {
+                    @Override
+                    public Tag decorate(Tag tag) {
+                        for (ElementConverter converter : elementConverters) {
+                            Tag decorated = converter.decorate(tag);
+                            if (decorated != null) {
+                                return decorated;
+                            }
+                        }
+                        return null;
+                    }
+                };
+            }
+        }
+
+        private Mapper(String faceletTag) {
+            elementConverter = new ElementConverter(faceletTag);
+        }
+    }
+
+    private static enum Namespace {
+        p(PassThroughAttributeLibrary.Namespace),
+        jsf(PassThroughElementLibrary.Namespace),
+        h(HtmlLibrary.Namespace);
+
+        private String uri;
+
+        Namespace(String uri) {
+            this.uri = uri;
+        }
+    }
+
+    private ElementConverter defaultElementConverter = new ElementConverter("jsf:element");
+
+    public Tag decorate(Tag tag) {
+        String ns = tag.getNamespace();
+        if (!hasJsfAttribute(tag)) {
+            // return immediately, if we have no jsf: attribute
+            return null;
+        }
+        // we only handle html tags!
+        if (!("".equals(ns) || "http://www.w3.org/1999/xhtml".equals(ns))) {
+            throw new FaceletException("Elements with namespace " +
+                    ns + " may not have attributes in namespace " +
+                    Namespace.jsf.uri + "." +
+                    " Namespace " + Namespace.jsf.uri +
+                    " is intended for otherwise non-JSF-aware markup, such as <input type=\"text\" jsf:id >" +
+                    " It is not valid to have <h:commandButton jsf:id=\"button\" />.");
+        }
+        for (Mapper mapper : Mapper.values()) {
+            if (tag.getLocalName().equals(mapper.name())) {
+                return mapper.elementConverter.decorate(tag);
+            }
+        }
+
+        return defaultElementConverter.decorate(tag);
+    }
+
+    private boolean hasJsfAttribute(Tag tag) {
+        for (String ns : tag.getAttributes().getNamespaces()) {
+            if (Namespace.jsf.uri.equals(ns)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static class ElementConverter implements TagDecorator {
+        private String localName;
+        private Namespace namespace;
+        private String arbiterAttributeName;
+        private String arbiterAttributeNamespace = "";
+        private Map<String, String> additionalMappings = new HashMap<String, String>();
+        private String otherHtmlIdAttribute;
+
+        private ElementConverter() {
+            super();
+        }
+
+        private ElementConverter(String faceletsTag) {
+            this(faceletsTag, null);
+        }
+
+        private ElementConverter(String faceletsTag, String arbiterAttributeName) {
+            String[] strings = faceletsTag.split(":");
+            this.namespace = Namespace.valueOf(strings[0]);
+            this.localName = strings[1];
+            this.arbiterAttributeName = arbiterAttributeName;
+
+            if (arbiterAttributeName != null && arbiterAttributeName.indexOf(':') > 0) {
+                strings = arbiterAttributeName.split(":");
+                this.arbiterAttributeNamespace = Namespace.valueOf(strings[0]).uri;
+                this.arbiterAttributeName = strings[1];
+            }
+        }
+
+        private ElementConverter map(String arbiterAttributeValue, String faceletsTagLocalName) {
+            additionalMappings.put(arbiterAttributeValue, faceletsTagLocalName);
+            return this;
+        }
+
+        private ElementConverter id(String otherHtmlIdAttribute) {
+            this.otherHtmlIdAttribute = otherHtmlIdAttribute;
+            return this;
+        }
+
+        public Tag decorate(Tag tag) {
+            if (arbiterAttributeName == null) {
+                // no arbiter
+                return convertTag(tag, namespace, localName);
+            }
+
+            TagAttribute arbiterAttribute = tag.getAttributes().get(arbiterAttributeNamespace, arbiterAttributeName);
+
+            if (arbiterAttribute == null) {
+                // no arbiter
+                return null;//convertTag(tag, namespace, localName);
+            }
+
+            // PENDING 
+            /**
+             if (!arbiterAttribute.isLiteral()) {
+             // TODO should we throw an exception here?
+             }
+             **/
+
+            String myLocalName = additionalMappings.get(arbiterAttribute.getValue());
+
+            if (myLocalName == null) {
+                myLocalName = this.localName;
+            }
+
+            return convertTag(tag, namespace, myLocalName);
+        }
+
+        protected Tag convertTag(Tag tag, Namespace namespace, String localName) {
+            Location location = tag.getLocation();
+            String ns = namespace.uri;
+            String qName = namespace.name() + ":" + localName;
+
+            TagAttributes attributes = convertAttributes(tag.getAttributes());
+
+            Tag converted = new Tag(location, ns, localName, qName, attributes);
+
+            for (TagAttribute tagAttribute : attributes.getAll()) {
+                // set the correct tag
+                tagAttribute.setTag(converted);
+            }
+
+            return converted;
+        }
+
+        protected TagAttributes convertAttributes(TagAttributes original) {
+            Map<String, TagAttribute> attributes = new HashMap<String, TagAttribute>();
+            TagAttribute elementName = createElementName(original.getTag());
+            attributes.put(elementName.getQName(), elementName);
+
+            for (TagAttribute attribute : original.getAll()) {
+                TagAttribute converted = convertTagAttribute(attribute);
+                // avoid duplicates
+                attributes.put(converted.getQName(), converted);
+            }
+
+            return new TagAttributesImpl(attributes.values().toArray(new TagAttribute[attributes.size()]));
+        }
+
+        private TagAttribute createElementName(Tag tag) {
+            Location location = tag.getLocation();
+            String ns = Namespace.p.uri;
+            String myLocalName = Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY;
+            String qName = "p:" + myLocalName;
+            String value = tag.getLocalName();
+
+            return new TagAttributeImpl(location, ns, myLocalName, qName, value);
+        }
+
+
+        protected TagAttribute convertTagAttribute(TagAttribute attribute) {
+            Location location = attribute.getLocation();
+            String ns = attribute.getNamespace();
+            String myLocalName = attribute.getLocalName();
+            String qName;
+            String value = attribute.getValue();
+
+            if (Namespace.jsf.uri.equals(attribute.getNamespace())) {
+                // make this a component attribute
+                qName = myLocalName;
+                ns = "";
+            } else {
+                if (ns.length() != 0 && !ns.equals(attribute.getTag().getNamespace())) {
+                    // the attribute has a different namespace than the tag. preserve it.
+                    return attribute;
+                }
+                if (attribute.getLocalName().equals(otherHtmlIdAttribute)) {
+                    // special case for input name
+                    qName = "id";
+                    myLocalName = "id";
+                } else {
+                    // make this a pass through attribute
+                    qName = "p:" + myLocalName;
+                    ns = Namespace.p.uri;
+                }
+            }
+            return new TagAttributeImpl(location, ns, myLocalName, qName, value);
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/IterationStatus.java b/com/sun/faces/facelets/tag/IterationStatus.java
new file mode 100644
index 0000000..e74dd0e
--- /dev/null
+++ b/com/sun/faces/facelets/tag/IterationStatus.java
@@ -0,0 +1,186 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import java.io.Serializable;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: IterationStatus.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public class IterationStatus implements Serializable {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    private final int index;
+    private final boolean first;
+    private final boolean last;
+    private final Integer begin;
+    private final Integer end;
+    private final Integer step;
+    private final boolean even;
+    private final Object current;
+    private final int iterationCount;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Constructor used for ui:repeat.
+     */
+    public IterationStatus(boolean first,
+                           boolean last,
+                           int index,
+                           Integer begin,
+                           Integer end,
+                           Integer step) {
+        this(first, last, index, begin, end, step, null, 0);
+    }
+
+
+    /**
+     * Constructor used for c:forEach varStatus
+     */
+    public IterationStatus(boolean first,
+                           boolean last,
+                           int index,
+                           Integer begin,
+                           Integer end,
+                           Integer step,
+                           Object current,
+                           int iterationCount) {
+        this.index = index;
+        this.begin = begin;
+        this.end = end;
+        this.step = step;
+        this.first = first;
+        this.last = last;
+        this.current = current;
+        int iBegin = ((begin != null) ? begin : 0);
+        int iStep = ((step != null) ? step : 1);
+        this.even = ((index - iBegin) / iStep) % 2 == 0;
+        this.iterationCount = iterationCount;
+    }
+
+
+    // ---------------------------------------------- Methods from LoopTagStatus
+
+
+    public boolean isFirst() {
+        return this.first;
+    }
+
+    public boolean isLast() {
+        return this.last;
+    }
+
+    public Integer getBegin() {
+        return begin;
+    }
+
+    public Integer getEnd() {
+        return end;
+    }
+
+    public int getIndex() {
+        return index;
+    }
+
+    public Integer getStep() {
+        return step;
+    }
+
+    public Object getCurrent() {
+        return current;
+    }
+
+    public int getCount() {
+        return iterationCount;
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public boolean isEven() {
+        return even;
+    }
+
+    public boolean isOdd() {
+        return !even;
+    }
+
+    @Override
+    public String toString() {
+        return "IterationStatus{" +
+               "index=" + index +
+               ", first=" + first +
+               ", last=" + last +
+               ", begin=" + begin +
+               ", end=" + end +
+               ", step=" + step +
+               ", even=" + even +
+               ", current=" + current +
+               ", iterationCount=" + iterationCount +
+               '}';
+    }
+}
diff --git a/com/sun/faces/facelets/tag/MetaRulesetImpl.java b/com/sun/faces/facelets/tag/MetaRulesetImpl.java
new file mode 100644
index 0000000..d394118
--- /dev/null
+++ b/com/sun/faces/facelets/tag/MetaRulesetImpl.java
@@ -0,0 +1,239 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import javax.faces.view.facelets.*;
+import java.beans.IntrospectionException;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.lang.ref.WeakReference;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: MetaRulesetImpl.java 12514 2013-09-10 17:00:23Z mriem $
+ */
+public class MetaRulesetImpl extends MetaRuleset {
+
+    private final static Logger LOGGER = FacesLogger.FACELETS_META.getLogger();
+    private final static WeakHashMap<Class, WeakReference<MetadataTarget>> metadata =
+          new WeakHashMap<Class, WeakReference<MetadataTarget>>();
+
+    private final Tag tag;
+    private final Class type;
+    private final Map<String,TagAttribute> attributes;
+    private final List<Metadata> mappers;
+    private final List<MetaRule> rules;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public MetaRulesetImpl(Tag tag, Class<?> type) {
+
+        this.tag = tag;
+        this.type = type;
+        this.attributes = new HashMap<String,TagAttribute>();
+        this.mappers = new ArrayList<Metadata>();
+        this.rules = new ArrayList<MetaRule>();
+
+        // setup attributes
+        TagAttribute[] attrs = this.tag.getAttributes().getAll();
+        for (int i = 0; i < attrs.length; i++) {
+            if (attrs[i].getLocalName().equals("class")) {
+                attributes.put("styleClass", attrs[i]);
+            } else {
+                attributes.put(attrs[i].getLocalName(), attrs[i]);
+            }
+        }
+
+        // add default rules
+        this.rules.add(BeanPropertyTagRule.Instance);
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public MetaRuleset ignore(String attribute) {
+
+        Util.notNull("attribute", attribute);
+        this.attributes.remove(attribute);
+        return this;
+
+    }
+
+
+    public MetaRuleset alias(String attribute, String property) {
+
+        Util.notNull("attribute", attribute);
+        Util.notNull("property", property);
+        TagAttribute attr = this.attributes.remove(attribute);
+        if (attr != null) {
+            this.attributes.put(property, attr);
+        }
+        return this;
+
+    }
+
+    public MetaRuleset add(Metadata mapper) {
+
+        Util.notNull("mapper", mapper);
+        if (!this.mappers.contains(mapper)) {
+            this.mappers.add(mapper);
+        }
+        return this;
+
+    }
+
+    public MetaRuleset addRule(MetaRule rule) {
+
+        Util.notNull("rule", rule);
+        this.rules.add(rule);
+        return this;
+
+    }
+
+
+     public Metadata finish() {
+
+        if (!this.attributes.isEmpty()) {
+            if (this.rules.isEmpty()) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    for (Iterator<TagAttribute> itr = this.attributes.values().iterator(); itr.hasNext(); ) {
+                        LOGGER.severe(itr.next() + " Unhandled by MetaTagHandler for type "+this.type.getName());
+                    }
+                }
+            } else {
+                MetadataTarget target = this.getMetadataTarget();
+                // now iterate over attributes
+                int ruleEnd = this.rules.size() - 1;
+                for (Map.Entry<String,TagAttribute> entry : attributes.entrySet()) {
+                    Metadata data = null;
+                    int i = ruleEnd;
+                    while (data == null && i >= 0) {
+                        MetaRule rule = this.rules.get(i);
+                        data = rule.applyRule(entry.getKey(), entry.getValue(), target);
+                        i--;
+                    }
+                    if (data == null) {
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.severe(entry.getValue() + " Unhandled by MetaTagHandler for type "+this.type.getName());
+                        }
+                    } else {
+                        this.mappers.add(data);
+                    }
+                }
+            }
+        }
+
+        if (this.mappers.isEmpty()) {
+            return NONE;
+        } else {
+            return new MetadataImpl(this.mappers.toArray(new Metadata[this.mappers.size()]));
+        }
+
+    }
+
+    public MetaRuleset ignoreAll() {
+
+        this.attributes.clear();
+        return this;
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected MetadataTarget getMetadataTarget() {
+        WeakReference<MetadataTarget> metaRef = metadata.get(type);
+        MetadataTarget meta = metaRef == null ? null : metaRef.get();
+        if (meta == null) {
+            try {
+                meta = new MetadataTargetImpl(type);
+            } catch (IntrospectionException e) {
+                throw new TagException(this.tag,
+                        "Error Creating TargetMetadata", e);
+            }
+            metadata.put(type, new WeakReference<MetadataTarget>(meta));
+        }
+        return meta;
+
+    }
+
+
+
+    // --------------------------------------------------------- Private Methods
+
+    
+    private final static Metadata NONE = new Metadata() {
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            // do nothing
+        }
+
+    };
+
+}
diff --git a/com/sun/faces/facelets/tag/MetaTagHandlerImpl.java b/com/sun/faces/facelets/tag/MetaTagHandlerImpl.java
new file mode 100644
index 0000000..4186740
--- /dev/null
+++ b/com/sun/faces/facelets/tag/MetaTagHandlerImpl.java
@@ -0,0 +1,90 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.util.Util;
+
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.MetaTagHandler;
+import javax.faces.view.facelets.TagConfig;
+
+/**
+ * A base tag for wiring state to an object instance based on rules populated at
+ * the time of creating a MetaRuleset.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: MetaTagHandlerImpl.java 10324 2012-07-24 14:46:42Z mriem $
+ */
+public abstract class MetaTagHandlerImpl extends MetaTagHandler {
+
+    public MetaTagHandlerImpl(TagConfig config) {
+        super(config);
+    }
+
+    /**
+     * Extend this method in order to add your own rules.
+     * 
+     * @param type
+     */
+    protected MetaRuleset createMetaRuleset(Class type) {
+        Util.notNull("type", type);
+        return new MetaRulesetImpl(this.tag, type);
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/MetadataImpl.java b/com/sun/faces/facelets/tag/MetadataImpl.java
new file mode 100644
index 0000000..4f8ec00
--- /dev/null
+++ b/com/sun/faces/facelets/tag/MetadataImpl.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.Metadata;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: MetadataImpl.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+final class MetadataImpl extends Metadata {
+
+    private final Metadata[] mappers;
+    private final int size;
+    
+    public MetadataImpl(Metadata[] mappers) {
+        this.mappers = mappers;
+        this.size = mappers.length;
+    }
+
+    public void applyMetadata(FaceletContext ctx, Object instance) {
+        for (int i = 0; i < size; i++) {
+            this.mappers[i].applyMetadata(ctx, instance);
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/MetadataTargetImpl.java b/com/sun/faces/facelets/tag/MetadataTargetImpl.java
new file mode 100644
index 0000000..ed9beca
--- /dev/null
+++ b/com/sun/faces/facelets/tag/MetadataTargetImpl.java
@@ -0,0 +1,127 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import javax.faces.view.facelets.MetadataTarget;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: MetadataTargetImpl.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public class MetadataTargetImpl extends MetadataTarget {
+
+    private final Map pd;
+    private final Class type;
+    
+    
+    public MetadataTargetImpl(Class type) throws IntrospectionException {
+        this.type = type;
+        this.pd = new HashMap();
+        BeanInfo info = Introspector.getBeanInfo(type);
+        PropertyDescriptor[] pda = info.getPropertyDescriptors();
+        for (int i = 0; i < pda.length; i++) {
+            this.pd.put(pda[i].getName(), pda[i]);
+        }
+    }
+
+    public PropertyDescriptor getProperty(String name) {
+        return (PropertyDescriptor) this.pd.get(name);
+    }
+
+    public boolean isTargetInstanceOf(Class type) {
+        return type.isAssignableFrom(this.type);
+    }
+
+    public Class getTargetClass() {
+        return this.type;
+    }
+
+    public Class getPropertyType(String name) {
+        PropertyDescriptor pd = this.getProperty(name);
+        if (pd != null) {
+            return pd.getPropertyType();
+        }
+        return null;
+    }
+
+    public Method getWriteMethod(String name) {
+        PropertyDescriptor pd = this.getProperty(name);
+        if (pd != null) {
+            return pd.getWriteMethod();
+        }
+        return null;
+    }
+
+    public Method getReadMethod(String name) {
+        PropertyDescriptor pd = this.getProperty(name);
+        if (pd != null) {
+            return pd.getReadMethod();
+        }
+        return null;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/MethodRule.java b/com/sun/faces/facelets/tag/MethodRule.java
new file mode 100644
index 0000000..5466fec
--- /dev/null
+++ b/com/sun/faces/facelets/tag/MethodRule.java
@@ -0,0 +1,172 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.facelets.el.LegacyMethodBinding;
+
+import javax.el.MethodExpression;
+import javax.faces.el.MethodBinding;
+import javax.faces.view.facelets.*;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Optional Rule for binding Method[Binding|Expression] properties
+ * 
+ * @author Mike Kienenberger
+ * @author Jacob Hookom
+ */
+public final class MethodRule extends MetaRule {
+
+    private final String methodName;
+
+    private final Class returnTypeClass;
+
+    private final Class[] params;
+
+    public MethodRule(String methodName, Class returnTypeClass, Class[] params) {
+        this.methodName = methodName;
+        this.returnTypeClass = returnTypeClass;
+        this.params = params;
+    }
+
+    public Metadata applyRule(String name, TagAttribute attribute,
+            MetadataTarget meta) {
+        if (!name.equals(this.methodName))
+            return null;
+
+        if (MethodBinding.class.equals(meta.getPropertyType(name))) {
+            Method method = meta.getWriteMethod(name);
+            if (method != null) {
+                return new MethodBindingMetadata(method, attribute,
+                        this.returnTypeClass, this.params);
+            }
+        } else if (MethodExpression.class.equals(meta.getPropertyType(name))) {
+            Method method = meta.getWriteMethod(name);
+            if (method != null) {
+                return new MethodExpressionMetadata(method, attribute,
+                        this.returnTypeClass, this.params);
+            }
+        }
+
+        return null;
+    }
+
+    private static class MethodBindingMetadata extends Metadata {
+        private final Method _method;
+
+        private final TagAttribute _attribute;
+
+        private Class[] _paramList;
+
+        private Class _returnType;
+
+        public MethodBindingMetadata(Method method, TagAttribute attribute,
+                Class returnType, Class[] paramList) {
+            _method = method;
+            _attribute = attribute;
+            _paramList = paramList;
+            _returnType = returnType;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            MethodExpression expr = _attribute.getMethodExpression(ctx,
+                    _returnType, _paramList);
+
+            try {
+                _method.invoke(instance, new LegacyMethodBinding(expr) );
+            } catch (InvocationTargetException e) {
+                throw new TagAttributeException(_attribute, e.getCause());
+            } catch (Exception e) {
+                throw new TagAttributeException(_attribute, e);
+            }
+        }
+    }
+
+    private static class MethodExpressionMetadata extends Metadata {
+        private final Method _method;
+
+        private final TagAttribute _attribute;
+
+        private Class[] _paramList;
+
+        private Class _returnType;
+
+        public MethodExpressionMetadata(Method method, TagAttribute attribute,
+                Class returnType, Class[] paramList) {
+            _method = method;
+            _attribute = attribute;
+            _paramList = paramList;
+            _returnType = returnType;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            MethodExpression expr = _attribute.getMethodExpression(ctx,
+                    _returnType, _paramList);
+
+            try {
+                _method.invoke(instance, expr );
+            } catch (InvocationTargetException e) {
+                throw new TagAttributeException(_attribute, e.getCause());
+            } catch (Exception e) {
+                throw new TagAttributeException(_attribute, e);
+            }
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/tag/TagAttributeImpl.java b/com/sun/faces/facelets/tag/TagAttributeImpl.java
new file mode 100644
index 0000000..6b7cab4
--- /dev/null
+++ b/com/sun/faces/facelets/tag/TagAttributeImpl.java
@@ -0,0 +1,516 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.facelets.el.ContextualCompositeMethodExpression;
+import com.sun.faces.facelets.el.ELText;
+import com.sun.faces.facelets.el.TagMethodExpression;
+import com.sun.faces.facelets.el.TagValueExpression;
+import com.sun.faces.facelets.el.ContextualCompositeValueExpression;
+import com.sun.faces.util.MessageUtils;
+import static com.sun.faces.util.MessageUtils.ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR;
+import com.sun.faces.util.Util;
+
+import javax.el.ELException;
+import javax.el.ExpressionFactory;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.el.MethodInfo;
+import javax.el.ELContext;
+import javax.faces.view.Location;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+import javax.faces.FacesException;
+
+/**
+ * Representation of a Tag's attribute in a Facelet File
+ * 
+ * @author Jacob Hookom
+ * @version $Id: TagAttributeImpl.java 11838 2013-04-02 19:09:10Z mriem $
+ */
+public class TagAttributeImpl extends TagAttribute {
+
+    private final boolean literal;
+
+    private final String localName;
+
+    private final Location location;
+
+    private final String namespace;
+
+    private final String qName;
+
+    private final String value;
+
+    private String string;
+    
+    private Tag tag;
+    
+    public TagAttributeImpl() {
+        this.literal = false;
+        this.localName = null;
+        this.location = null;
+        this.namespace = null;
+        this.qName = null;
+        this.value = null;
+        this.string = null;
+        this.tag = null;
+    } 
+
+    public TagAttributeImpl(Location location, String ns, String localName,
+            String qName, String value) {
+        this.location = location;
+        this.namespace = ns;
+        this.localName = (null == localName || 0 == localName.length()) ? qName : localName;
+        this.qName = qName;
+        this.value = value;
+        try {
+            this.literal = ELText.isLiteral(this.value);
+        } catch (ELException e) {
+            throw new TagAttributeException(this, e);
+        }
+    }
+
+    /**
+     * If literal, return
+     * {@link Boolean#getBoolean(java.lang.String) Boolean.getBoolean(java.lang.String)}
+     * passing our value, otherwise call
+     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
+     * 
+     * @see Boolean#getBoolean(java.lang.String)
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return boolean value
+     */
+    @Override
+    public boolean getBoolean(FaceletContext ctx) {
+        if (this.literal) {
+            return Boolean.valueOf(this.value);
+        } else {
+            Boolean bool = (Boolean) this.getObject(ctx, Boolean.class);
+            if (bool == null) {
+                bool = false;
+            }
+            return bool;
+        }
+    }
+
+    /**
+     * If literal, call
+     * {@link Integer#parseInt(java.lang.String) Integer.parseInt(String)},
+     * otherwise call
+     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
+     * 
+     * @see Integer#parseInt(java.lang.String)
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return int value
+     */
+    @Override
+    public int getInt(FaceletContext ctx) {
+        if (this.literal) {
+            return Integer.parseInt(this.value);
+        } else {
+            return ((Number) this.getObject(ctx, Integer.class)).intValue();
+        }
+    }
+
+    /**
+     * Local name of this attribute
+     * 
+     * @return local name of this attribute
+     */
+    @Override
+    public String getLocalName() {
+        return this.localName;
+    }
+
+    /**
+     * The location of this attribute in the FaceletContext
+     * 
+     * @return the TagAttributeImpl's location
+     */
+    @Override
+    public Location getLocation() {
+        return this.location;
+    }
+
+    /**
+     * Create a MethodExpression, using this attribute's value as the expression
+     * String.
+     * 
+     * @see ExpressionFactory#createMethodExpression(javax.el.ELContext,
+     *      java.lang.String, java.lang.Class, java.lang.Class[])
+     * @see MethodExpression
+     * @param ctx
+     *            FaceletContext to use
+     * @param type
+     *            expected return type
+     * @param paramTypes
+     *            parameter type
+     * @return a MethodExpression instance
+     */
+    @Override
+    public MethodExpression getMethodExpression(FaceletContext ctx,
+                                                Class type,
+                                                Class[] paramTypes) {
+
+        MethodExpression result;
+
+        try {
+            ExpressionFactory f = ctx.getExpressionFactory();
+            if (ELUtils.isCompositeComponentLookupWithArgs(this.value)) {
+                String message =
+                      MessageUtils.getExceptionMessageString(ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR);
+                throw new TagAttributeException(this, message);
+            }
+            // Determine if this is a composite component attribute lookup.
+            // If so, look for a MethodExpression under the attribute key
+            if (ELUtils.isCompositeComponentMethodExprLookup(this.value)) {
+                result = new AttributeLookupMethodExpression(getValueExpression(ctx, MethodExpression.class));
+            } else if (ELUtils.isCompositeComponentExpr(this.value)) {
+                MethodExpression delegate = new TagMethodExpression(this,
+                                                 f.createMethodExpression(ctx,
+                                                                          this.value,
+                                                                          type,
+                                                                          paramTypes));
+                result = new ContextualCompositeMethodExpression(getLocation(), delegate);
+            } else {
+                result = new TagMethodExpression(this,
+                                                 f.createMethodExpression(ctx,
+                                                                          this.value,
+                                                                          type,
+                                                                          paramTypes));
+            }
+        } catch (Exception e) {
+            if (e instanceof TagAttributeException) {
+                throw (TagAttributeException) e;
+            } else {
+                throw new TagAttributeException(this, e);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * The resolved Namespace for this attribute
+     * 
+     * @return resolved Namespace
+     */
+    @Override
+    public String getNamespace() {
+        return this.namespace;
+    }
+
+    /**
+     * Delegates to getObject with Object.class as a param
+     * 
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return Object representation of this attribute's value
+     */
+    @Override
+    public Object getObject(FaceletContext ctx) {
+        return this.getObject(ctx, Object.class);
+    }
+
+    /**
+     * The qualified name for this attribute
+     * 
+     * @return the qualified name for this attribute
+     */
+    @Override
+    public String getQName() {
+        return this.qName;
+    }
+
+    @Override
+    public Tag getTag() {
+        return this.tag;
+    }
+    
+    public void setTag(Tag tag) {
+        this.tag = tag;
+    }
+
+    /**
+     * Return the literal value of this attribute
+     * 
+     * @return literal value
+     */
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    /**
+     * If literal, then return our value, otherwise delegate to getObject,
+     * passing String.class.
+     * 
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return String value of this attribute
+     */
+    @Override
+    public String getValue(FaceletContext ctx) {
+        if (this.literal) {
+            return this.value;
+        } else {
+            return (String) this.getObject(ctx, String.class);
+        }
+    }
+
+    /**
+     * If literal, simply coerce our String literal value using an
+     * ExpressionFactory, otherwise create a ValueExpression and evaluate it.
+     * 
+     * @see ExpressionFactory#coerceToType(java.lang.Object, java.lang.Class)
+     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
+     *      java.lang.String, java.lang.Class)
+     * @see ValueExpression
+     * @param ctx
+     *            FaceletContext to use
+     * @param type
+     *            expected return type
+     * @return Object value of this attribute
+     */
+    @Override
+    public Object getObject(FaceletContext ctx, Class type) {
+        if (this.literal) {
+            if (String.class.equals(type)) {
+                return this.value;
+            } else {
+                try {
+                    return ctx.getExpressionFactory().coerceToType(this.value,
+                            type);
+                } catch (Exception e) {
+                    throw new TagAttributeException(this, e);
+                }
+            }
+        } else {
+            ValueExpression ve = this.getValueExpression(ctx, type);
+            try {
+                return ve.getValue(ctx);
+            } catch (Exception e) {
+                throw new TagAttributeException(this, e);
+            }
+        }
+    }
+
+    /**
+     * Create a ValueExpression, using this attribute's literal value and the
+     * passed expected type.
+     * 
+     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
+     *      java.lang.String, java.lang.Class)
+     * @see ValueExpression
+     * @param ctx
+     *            FaceletContext to use
+     * @param type
+     *            expected return type
+     * @return ValueExpression instance
+     */
+    @Override
+    public ValueExpression getValueExpression(FaceletContext ctx, Class type) {
+        return getValueExpression(ctx, this.value, type);
+    }
+
+    /**
+     * If this TagAttributeImpl is literal (not #{..} or ${..})
+     * 
+     * @return true if this attribute is literal
+     */
+    @Override
+    public boolean isLiteral() {
+        return this.literal;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        if (this.string == null) {
+            this.string = this.location + " " + this.qName + "=\"" + this.value
+                    + "\"";
+        }
+        return this.string;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    public ValueExpression getValueExpression(FaceletContext ctx, String expr, Class type) {
+        try {
+            ExpressionFactory f = ctx.getExpressionFactory();
+            ValueExpression delegate = f.createValueExpression(ctx,
+                                                               expr,
+                                                               type);
+            if (ELUtils.isCompositeComponentExpr(expr)) {
+                if (ELUtils.isCompositeComponentLookupWithArgs(expr)) {
+                    String message =
+                          MessageUtils.getExceptionMessageString(ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR);
+                    throw new TagAttributeException(this, message);
+                }
+                return new TagValueExpression(this,
+                                              new ContextualCompositeValueExpression(getLocation(),
+                                                                                delegate));
+            } else {
+                return new TagValueExpression(this, delegate);
+            }
+        } catch (Exception e) {
+            throw new TagAttributeException(this, e);
+        }
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    private static class AttributeLookupMethodExpression extends MethodExpression {
+
+        private ValueExpression lookupExpression;
+
+
+        public AttributeLookupMethodExpression(ValueExpression lookupExpression) {
+
+            Util.notNull("lookupExpression", lookupExpression);
+            this.lookupExpression = lookupExpression;
+
+        }
+
+        @SuppressWarnings({"UnusedDeclaration"})
+        public AttributeLookupMethodExpression() {} // for serialization
+
+        @Override
+        public MethodInfo getMethodInfo(ELContext elContext) {
+
+            Util.notNull("elContext", elContext);
+            Object result = lookupExpression.getValue(elContext);
+            if (result != null && result instanceof MethodExpression) {
+                return ((MethodExpression) result).getMethodInfo(elContext);
+            }
+
+            return null;
+
+        }
+
+        @Override
+        public Object invoke(ELContext elContext, Object[] args) {
+
+            Util.notNull("elContext", elContext);
+
+            Object result = lookupExpression.getValue(elContext);
+            if (result == null) {
+                throw new FacesException("Unable to resolve composite component from using page using EL expression '" + lookupExpression.getExpressionString() + '\'');
+            }
+            if (!(result instanceof MethodExpression)) {
+                throw new FacesException("Successfully resolved expression '" + lookupExpression.getExpressionString() + "', but the value is not a MethodExpression");
+            }
+
+            return ((MethodExpression) result).invoke(elContext, args);
+
+        }
+
+        @Override
+        public String getExpressionString() {
+
+            return lookupExpression.getExpressionString();
+
+        }
+
+        @Override
+        public boolean equals(Object otherObj) {
+
+            boolean result = false;
+            if (otherObj instanceof AttributeLookupMethodExpression) {
+                AttributeLookupMethodExpression other =
+                        (AttributeLookupMethodExpression) otherObj;
+                result = lookupExpression.getExpressionString().equals(other.lookupExpression.getExpressionString());
+            }
+            return result;
+
+        }
+
+        @Override
+        public boolean isLiteralText() {
+
+            return lookupExpression.isLiteralText();
+
+        }
+
+        @Override
+        public int hashCode() {
+
+            return lookupExpression.hashCode();
+
+        }
+
+    } // END AttributeLookupMethodExpression
+}
diff --git a/com/sun/faces/facelets/tag/TagAttributesImpl.java b/com/sun/faces/facelets/tag/TagAttributesImpl.java
new file mode 100644
index 0000000..88890ac
--- /dev/null
+++ b/com/sun/faces/facelets/tag/TagAttributesImpl.java
@@ -0,0 +1,223 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributes;
+import java.util.*;
+import javax.faces.view.facelets.Tag;
+
+/**
+ * A set of TagAttributesImpl, usually representing all attributes on a Tag.
+ * 
+ * @see javax.faces.view.facelets.TagAttribute
+ * @author Jacob Hookom
+ * @version $Id: TagAttributesImpl.java 10331 2012-07-25 13:26:07Z mriem $
+ */
+public final class TagAttributesImpl extends TagAttributes {
+    private final static TagAttribute[] EMPTY = new TagAttribute[0];
+
+    private final TagAttribute[] attrs;
+
+    private final String[] ns;
+
+    private final List nsattrs;
+    
+    private Tag tag;
+
+    /**
+     * 
+     */
+    public TagAttributesImpl(TagAttribute[] attrs) {
+        this.attrs = attrs;
+
+        // grab namespaces
+        int i = 0;
+        Set set = new HashSet();
+        for (i = 0; i < this.attrs.length; i++) {
+            set.add(this.attrs[i].getNamespace());
+        }
+        this.ns = (String[]) set.toArray(new String[set.size()]);
+        Arrays.sort(ns);
+
+        // assign attrs
+        this.nsattrs = new ArrayList();
+        for (i = 0; i < ns.length; i++) {
+            nsattrs.add(i, new ArrayList());
+        }
+        int nsIdx = 0;
+        for (i = 0; i < this.attrs.length; i++) {
+            nsIdx = Arrays.binarySearch(ns, this.attrs[i].getNamespace());
+            ((List) nsattrs.get(nsIdx)).add(this.attrs[i]);
+        }
+        for (i = 0; i < ns.length; i++) {
+            List r = (List) nsattrs.get(i);
+            nsattrs.set(i, r.toArray(new TagAttribute[r.size()]));
+        }
+    }
+
+    /**
+     * Return an array of all TagAttributesImpl in this set
+     * 
+     * @return a non-null array of TagAttributesImpl
+     */
+    @Override
+    public TagAttribute[] getAll() {
+        return this.attrs;
+    }
+
+    /**
+     * Using no namespace, find the TagAttribute
+     * 
+     * @see #get(String, String)
+     * @param localName
+     *            tag attribute name
+     * @return the TagAttribute found, otherwise null
+     */
+    @Override
+    public TagAttribute get(String localName) {
+        return get("", localName);
+    }
+
+    /**
+     * Find a TagAttribute that matches the passed namespace and local name.
+     * 
+     * @param ns
+     *            namespace of the desired attribute
+     * @param localName
+     *            local name of the attribute
+     * @return a TagAttribute found, otherwise null
+     */
+    @Override
+    public TagAttribute get(String ns, String localName) {
+        if (ns != null && localName != null) {
+            int idx = Arrays.binarySearch(this.ns, ns);
+            if (idx >= 0) {
+                TagAttribute[] uia = (TagAttribute[]) this.nsattrs.get(idx);
+                for (int i = 0; i < uia.length; i++) {
+                    if (localName.equals(uia[i].getLocalName())) {
+                        return uia[i];
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Get all TagAttributesImpl for the passed namespace
+     * 
+     * @param namespace
+     *            namespace to search
+     * @return a non-null array of TagAttributesImpl
+     */
+    @Override
+    public TagAttribute[] getAll(String namespace) {
+        int idx = 0;
+        if (namespace == null) {
+            idx = Arrays.binarySearch(this.ns, "");
+        } else {
+            idx = Arrays.binarySearch(this.ns, namespace);
+        }
+        if (idx >= 0) {
+            return (TagAttribute[]) this.nsattrs.get(idx);
+        }
+        return EMPTY;
+    }
+
+    /**
+     * A list of Namespaces found in this set
+     * 
+     * @return a list of Namespaces found in this set
+     */
+    @Override
+    public String[] getNamespaces() {
+        return this.ns;
+    }
+
+    @Override
+    public Tag getTag() {
+        return this.tag;
+    }
+    
+    public void setTag(Tag tag) {
+        this.tag = tag;
+        for (TagAttribute cur : attrs) {
+            cur.setTag(tag);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < this.attrs.length; i++) {
+            sb.append(this.attrs[i]);
+            sb.append(' ');
+        }
+        if (sb.length() > 1) {
+            sb.setLength(sb.length() - 1);
+        }
+        return sb.toString();
+    }
+}
diff --git a/com/sun/faces/facelets/tag/TagHandlerFactory.java b/com/sun/faces/facelets/tag/TagHandlerFactory.java
new file mode 100644
index 0000000..8b00cce
--- /dev/null
+++ b/com/sun/faces/facelets/tag/TagHandlerFactory.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+
+/**
+ * Delegate class for TagLibraries
+ * 
+ * @see TagLibrary
+ * @author Jacob Hookom
+ * @version $Id: TagHandlerFactory.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+interface TagHandlerFactory {
+    /**
+     * A new TagHandler instantiated with the passed TagConfig
+     * 
+     * @param cfg
+     *            TagConfiguration information
+     * @return a new TagHandler
+     * @throws FacesException
+     * @throws ELException
+     */
+    public TagHandler createHandler(TagConfig cfg) throws FacesException,
+            ELException;
+}
diff --git a/com/sun/faces/facelets/tag/TagHandlerImpl.java b/com/sun/faces/facelets/tag/TagHandlerImpl.java
new file mode 100644
index 0000000..fb34f28
--- /dev/null
+++ b/com/sun/faces/facelets/tag/TagHandlerImpl.java
@@ -0,0 +1,101 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import javax.faces.view.facelets.CompositeFaceletHandler;
+import javax.faces.view.facelets.FaceletHandler;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ *
+ * @author edburns
+ */
+public abstract class TagHandlerImpl extends TagHandler {
+
+    public TagHandlerImpl(TagConfig config) {
+        super(config);
+    }
+    
+    /**
+     * Searches child handlers, starting at the 'nextHandler' for all
+     * instances of the passed type.  This process will stop searching
+     * a branch if an instance is found.
+     * 
+     * @param type Class type to search for
+     * @return iterator over instances of FaceletHandlers of the matching type
+     */
+    protected final Iterator findNextByType(Class type) {
+        List found = new ArrayList();
+        if (type.isAssignableFrom(this.nextHandler.getClass())) {
+            found.add(this.nextHandler);
+        } else if (this.nextHandler instanceof CompositeFaceletHandler) {
+            FaceletHandler[] h = ((CompositeFaceletHandler) this.nextHandler).getHandlers();
+            for (int i = 0; i < h.length; i++) {
+                if (type.isAssignableFrom(h[i].getClass())) {
+                    found.add(h[i]);
+                }
+            }
+        }
+        return found.iterator();
+    }
+    
+    public final static Iterator findNextByType(FaceletHandler nextHandler,
+            Class type) {
+        List found = new ArrayList();
+        if (type.isAssignableFrom(nextHandler.getClass())) {
+            found.add(nextHandler);
+        } else if (nextHandler instanceof CompositeFaceletHandler) {
+            FaceletHandler[] h = ((CompositeFaceletHandler) nextHandler).getHandlers();
+            for (int i = 0; i < h.length; i++) {
+                if (type.isAssignableFrom(h[i].getClass())) {
+                    found.add(h[i]);
+                }
+            }
+        }
+        return found.iterator();
+        
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/TagLibrary.java b/com/sun/faces/facelets/tag/TagLibrary.java
new file mode 100644
index 0000000..c241434
--- /dev/null
+++ b/com/sun/faces/facelets/tag/TagLibrary.java
@@ -0,0 +1,127 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import javax.faces.FacesException;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+import java.lang.reflect.Method;
+
+/**
+ * A library of Tags associated with one or more namespaces.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: TagLibrary.java 10303 2012-07-19 17:54:12Z mriem $
+ */
+public interface TagLibrary {
+
+    /**
+     * true if the namespace is used in this library
+     * 
+     * @param ns
+     *            namespace
+     * @param t the tag instance currently active at the time
+     * this method is called.  May be null
+
+     */
+    public boolean containsNamespace(String ns, Tag t);
+
+    /**
+     * If this library contains a TagHandler for the namespace and local name true if handled by this library
+     * 
+     * @param ns
+     *            namespace
+     * @param localName
+     *            local name
+     */
+    public boolean containsTagHandler(String ns, String localName);
+
+    /**
+     * Create a new instance of a TagHandler, using the passed TagConfig
+     * 
+     * @param ns
+     *            namespace
+     * @param localName
+     *            local name
+     * @param tag
+     *            configuration information
+     * @return a new TagHandler instance
+     * @throws FacesException
+     */
+    public TagHandler createTagHandler(String ns, String localName,
+            TagConfig tag) throws FacesException;
+
+    /**
+     * If this library contains the specified function name
+     * 
+     * @param ns namespace
+     * @param name function name
+     * @return true if handled
+     */
+    public boolean containsFunction(String ns, String name);
+
+    /**
+     * Return a Method instance for the passed namespace and name
+     * 
+     * @param ns namespace
+     * @param name function name
+     */
+    public Method createFunction(String ns, String name);
+}
diff --git a/com/sun/faces/facelets/tag/TagLibraryImpl.java b/com/sun/faces/facelets/tag/TagLibraryImpl.java
new file mode 100644
index 0000000..e3c8c6d
--- /dev/null
+++ b/com/sun/faces/facelets/tag/TagLibraryImpl.java
@@ -0,0 +1,135 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.util.Util;
+
+import java.lang.reflect.Method;
+import java.net.URL;
+
+/**
+ * Concrete implementation for defining Facelet tag libraries in Java.
+ */
+public class TagLibraryImpl extends AbstractTagLibrary {
+        public TagLibraryImpl(String namespace) {
+            super(namespace);
+        }
+
+        public void putConverter(String name, String id) {
+            Util.notNull("name", name);
+            Util.notNull("id", id);
+            this.addConverter(name, id);
+        }
+
+        public void putConverter(String name, String id, Class handlerClass) {
+            Util.notNull("name", name);
+            Util.notNull("id", id);
+            Util.notNull("handlerClass", handlerClass);
+            this.addConverter(name, id, handlerClass);
+        }
+
+
+        public void putValidator(String name, String id) {
+            Util.notNull("name", name);
+            Util.notNull("id", id);
+            this.addValidator(name, id);
+        }
+
+
+        public void putValidator(String name, String id, Class handlerClass) {
+            Util.notNull("name", name);
+            Util.notNull("id", id);
+            Util.notNull("handlerClass", handlerClass);
+            this.addValidator(name, id, handlerClass);
+        }
+
+        public void putBehavior(String name, String id) {
+            Util.notNull("name", name);
+            Util.notNull("id", id);
+            this.addBehavior(name, id);
+        }
+
+        public void putBehavior(String name, String id, Class handlerClass) {
+            Util.notNull("name", name);
+            Util.notNull("id", id);
+            Util.notNull("handlerClass", handlerClass);
+            this.addBehavior(name, id, handlerClass);
+        }
+
+        public void putTagHandler(String name, Class type) {
+            Util.notNull("name", name);
+            Util.notNull("type", type);
+            this.addTagHandler(name, type);
+        }
+
+        public void putComponent(String name, String componentType,
+                String rendererType) {
+            Util.notNull("name", name);
+            Util.notNull("componentType", componentType);
+            this.addComponent(name, componentType, rendererType);
+        }
+
+        public void putComponent(String name, String componentType,
+                String rendererType, Class handlerClass) {
+            Util.notNull("name", name);
+            Util.notNull("handlerClass", handlerClass);
+            this.addComponent(name, componentType, rendererType, handlerClass);
+        }
+
+
+        public void putUserTag(String name, URL source) {
+            Util.notNull("name", name);
+            Util.notNull("source", source);
+            this.addUserTag(name, source);
+        }
+
+        public void putCompositeComponentTag(String name, String resourceId) {
+            Util.notNull("name", name);
+            Util.notNull("resourceId", resourceId);
+            this.addCompositeComponentTag(name, resourceId);
+        }
+
+        public void putFunction(String name, Method method) {
+            Util.notNull("name", name);
+            Util.notNull("method", method);
+            this.addFunction(name, method);
+        }
+    }
diff --git a/com/sun/faces/facelets/tag/UserTagHandler.java b/com/sun/faces/facelets/tag/UserTagHandler.java
new file mode 100644
index 0000000..163f0a5
--- /dev/null
+++ b/com/sun/faces/facelets/tag/UserTagHandler.java
@@ -0,0 +1,172 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag;
+
+import com.sun.faces.facelets.FaceletContextImplBase;
+import com.sun.faces.facelets.TemplateClient;
+import com.sun.faces.facelets.el.VariableMapperWrapper;
+import com.sun.faces.facelets.tag.ui.DefineHandler;
+
+import javax.el.VariableMapper;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * A Tag that is specified in a FaceletFile. Takes all attributes specified and
+ * sets them on the FaceletContext before including the targeted Facelet file.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: UserTagHandler.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+final class UserTagHandler extends TagHandlerImpl implements TemplateClient {
+
+    protected final TagAttribute[] vars;
+
+    protected final URL location;
+
+    protected final Map handlers;
+
+    /**
+     * @param config
+     */
+    public UserTagHandler(TagConfig config, URL location) {
+        super(config);
+        this.vars = this.tag.getAttributes().getAll();
+        this.location = location;
+                Iterator itr = this.findNextByType(DefineHandler.class);
+        if (itr.hasNext()) {
+            handlers = new HashMap();
+
+            DefineHandler d = null;
+            while (itr.hasNext()) {
+                d = (DefineHandler) itr.next();
+                this.handlers.put(d.getName(), d);
+            }
+        } else {
+            handlers = null;
+        }
+    }
+
+    /**
+     * Iterate over all TagAttributes and set them on the FaceletContext's
+     * VariableMapper, then include the target Facelet. Finally, replace the old
+     * VariableMapper.
+     * 
+     * @see TagAttribute#getValueExpression(FaceletContext, Class)
+     * @see VariableMapper
+     * @see javax.faces.view.facelets.FaceletHandler#apply(javax.faces.view.facelets.FaceletContext, javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctxObj, UIComponent parent)
+    throws IOException {
+        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
+        VariableMapper orig = ctx.getVariableMapper();
+        
+        // setup a variable map
+        if (this.vars.length > 0) {
+            VariableMapper varMapper = new VariableMapperWrapper(orig);
+            for (int i = 0; i < this.vars.length; i++) {
+                varMapper.setVariable(this.vars[i].getLocalName(), this.vars[i]
+                        .getValueExpression(ctx, Object.class));
+            }
+            ctx.setVariableMapper(varMapper);
+        }
+        
+        // eval include
+        try {
+            ctx.pushClient(this);
+            ctx.includeFacelet(parent, this.location);
+        } catch (FileNotFoundException e) {
+            throw new TagException(this.tag, e.getMessage());
+        } finally {
+            
+            // make sure we undo our changes
+            ctx.popClient(this);
+            ctx.setVariableMapper(orig);
+        }
+    }
+
+    public boolean apply(FaceletContext ctx, UIComponent parent, String name)
+    throws IOException {
+        if (name != null) {
+            if (this.handlers == null) {
+                return false;
+            }
+            DefineHandler handler = (DefineHandler) this.handlers.get(name);
+            if (handler != null) {
+                handler.applyDefinition(ctx, parent);
+                return true;
+            } else {
+                return false;
+            }
+        } else {
+             this.nextHandler.apply(ctx, parent);
+             return true;
+         }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetHandler.java b/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetHandler.java
new file mode 100644
index 0000000..44e8c26
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetHandler.java
@@ -0,0 +1,75 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.view.facelets.TagConfig;
+
+public class ActionSource2AttachedObjectTargetHandler extends AttachedObjectTargetHandler {
+    
+    public ActionSource2AttachedObjectTargetHandler(TagConfig config) {
+        super(config);
+    }
+    
+
+    @Override
+    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
+        return new ActionSource2AttachedObjectTargetImpl();
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetImpl.java b/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetImpl.java
new file mode 100644
index 0000000..5766222
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetImpl.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.view.ActionSource2AttachedObjectTarget;
+
+
+public class ActionSource2AttachedObjectTargetImpl extends AttachedObjectTargetImpl implements ActionSource2AttachedObjectTarget {
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/AttachedObjectTargetHandler.java b/com/sun/faces/facelets/tag/composite/AttachedObjectTargetHandler.java
new file mode 100644
index 0000000..84edf86
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/AttachedObjectTargetHandler.java
@@ -0,0 +1,129 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.application.view.FaceletViewHandlingStrategy;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.view.AttachedObjectTarget;
+import javax.faces.view.facelets.*;
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.io.IOException;
+import java.util.List;
+
+
+public abstract class AttachedObjectTargetHandler extends TagHandlerImpl {
+    
+    private TagAttribute name = null;
+    private TagAttribute targets = null;
+
+    public AttachedObjectTargetHandler(TagConfig config) {
+        super(config);
+        this.name = this.getRequiredAttribute("name");
+        this.targets = this.getAttribute("targets");
+    }
+    
+    abstract AttachedObjectTargetImpl newAttachedObjectTargetImpl();
+    
+    public void apply(FaceletContext ctx, UIComponent parent)
+    throws IOException {
+
+        assert(ctx.getFacesContext().getAttributes().containsKey(FaceletViewHandlingStrategy.IS_BUILDING_METADATA));
+        
+        // only process if it's been created
+        if (null == parent || 
+            (null == (parent = parent.getParent())) ||
+            !(ComponentHandler.isNew(parent))) {
+            return;
+        }
+
+        BeanInfo componentBeanInfo = (BeanInfo)
+                parent.getAttributes().get(UIComponent.BEANINFO_KEY);
+        if (null == componentBeanInfo) {
+            throw new TagException(this.tag, "Error: I have an EditableValueHolder tag, but no enclosing composite component");
+        }
+        BeanDescriptor componentDescriptor = componentBeanInfo.getBeanDescriptor();
+        if (null == componentDescriptor) {
+            throw new TagException(this.tag, "Error: I have an EditableValueHolder tag, but no enclosing composite component");
+        }
+
+        List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
+                componentDescriptor.getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
+        AttachedObjectTargetImpl target = newAttachedObjectTargetImpl();
+        targetList.add(target);
+        
+        ValueExpression ve = name.getValueExpression(ctx, String.class);
+        String strValue = (String) ve.getValue(ctx);
+        if (null != strValue) {
+            target.setName(strValue);
+        }
+
+        if (null != targets) {
+            ve = targets.getValueExpression(ctx, String.class);
+            target.setTargetsList(ve);
+        }
+        
+        this.nextHandler.apply(ctx, parent);
+        
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/AttachedObjectTargetImpl.java b/com/sun/faces/facelets/tag/composite/AttachedObjectTargetImpl.java
new file mode 100644
index 0000000..be0b3c1
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/AttachedObjectTargetImpl.java
@@ -0,0 +1,137 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.util.Util;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UINamingContainer;
+import javax.faces.context.FacesContext;
+import javax.faces.view.AttachedObjectTarget;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+public class AttachedObjectTargetImpl implements AttachedObjectTarget {
+
+    private String name = null;
+    public String getName() {
+        return name;
+    }
+
+    void setName(String name) {
+        this.name = name;
+    }
+
+    public List<UIComponent> getTargets(UIComponent topLevelComponent) {
+        assert(null != name);
+
+        List<UIComponent> result;
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        if (null != targetsList) {
+            String targetsListStr = (String) targetsList.getValue(ctx.getELContext());
+            Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+            String[] targetArray = Util.split(appMap, targetsListStr, " ");
+            result = new ArrayList<UIComponent>(targetArray.length);
+            for (int i = 0, len = targetArray.length; i < len; i++) {
+                UIComponent comp = topLevelComponent.findComponent(
+                      augmentSearchId(ctx, topLevelComponent, targetArray[i]));
+                if (null != comp) {
+                    result.add(comp);
+                }
+            }
+        }
+        else {
+            result = new ArrayList<UIComponent>(1);
+            UIComponent comp = topLevelComponent.findComponent(
+                  augmentSearchId(ctx, topLevelComponent, name));
+            if (null != comp) {
+                result.add(comp);
+            }
+        }
+        return result;
+
+    }
+
+    private ValueExpression targetsList;
+
+    void setTargetsList(ValueExpression targetsList) {
+        this.targetsList = targetsList;
+    }
+
+
+    // if the current composite component ID is the same as the target ID,
+    // we'll need to make the ID passed to findComponent be a combination
+    // of the two so we find the correct component.  If we don't do this,
+    // we end with a StackOverFlowException as 'c' will be what is found
+    // and not the child of 'c'.
+    private String augmentSearchId(FacesContext ctx,
+                                   UIComponent c,
+                                   String targetId) {
+
+        if (targetId.equals(c.getId())) {
+            return targetId + UINamingContainer.getSeparatorChar(ctx) + targetId;
+        }
+        return targetId;
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/AttributeHandler.java b/com/sun/faces/facelets/tag/composite/AttributeHandler.java
new file mode 100644
index 0000000..6e9b127
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/AttributeHandler.java
@@ -0,0 +1,239 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.util.ReflectionUtil;
+import com.sun.faces.util.FacesLogger;
+import java.lang.reflect.Method;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.*;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.el.ELContext;
+import javax.faces.context.FacesContext;
+
+
+public class AttributeHandler extends TagHandlerImpl {
+    
+    private final Logger LOGGER = FacesLogger.TAGLIB.getLogger();    
+
+    private static final String[] COMPOSITE_ATTRIBUTE_ATTRIBUTES = {
+          "required",
+          "targets",
+          "targetAttributeName",
+          "default",
+          "displayName",
+          "preferred",
+          "hidden",
+          "expert",
+          "shortDescription",
+          "method-signature",
+          "type",
+          
+    };
+
+    private static final PropertyHandlerManager ATTRIBUTE_MANAGER =
+          PropertyHandlerManager.getInstance(COMPOSITE_ATTRIBUTE_ATTRIBUTES);
+
+
+    private TagAttribute name;
+
+
+    public AttributeHandler(TagConfig config) {
+        super(config);
+        this.name = this.getRequiredAttribute("name");
+    }
+    
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        // only process if it's been created
+        if (null == parent || 
+            (null == (parent = parent.getParent())) ||
+            !(ComponentHandler.isNew(parent))) {
+            return;
+        }
+        
+
+        Map<String, Object> attrs = parent.getAttributes();
+        
+        CompositeComponentBeanInfo componentBeanInfo =
+              (CompositeComponentBeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
+        assert(null != componentBeanInfo);
+        List<PropertyDescriptor> declaredAttributes = 
+                componentBeanInfo.getPropertyDescriptorsList();
+
+        // Get the value of required the name propertyDescriptor
+        ValueExpression ve = name.getValueExpression(ctx, String.class);
+        String strValue = (String) ve.getValue(ctx);
+
+        // Search the propertyDescriptors for one for this attribute
+        for (PropertyDescriptor cur: declaredAttributes) {
+            if (strValue.endsWith(cur.getName())) {
+                // If we have a match, no need to waste time
+                // duplicating and replacing it.
+                return;
+            }
+        }
+
+        PropertyDescriptor propertyDescriptor;
+        try {
+            propertyDescriptor = new CCAttributePropertyDescriptor(strValue, null, null);
+            declaredAttributes.add(propertyDescriptor);
+        } catch (IntrospectionException ex) {
+            throw new  TagException(tag, "Unable to create property descriptor for property " + strValue, ex);
+        }
+
+        TagAttribute defaultTagAttribute = null;
+        PropertyHandler defaultHandler = null;
+        for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
+            String attributeName = tagAttribute.getLocalName();
+            if("default".equals(attributeName)) {
+                // store the TagAttribute and the PropertyHandler for later
+                // execution, as the handler for the default-attribute requires,
+                // that the PropertyHandler for 'type' - if it exists - has been
+                // applied first.
+                defaultTagAttribute = tagAttribute;
+                defaultHandler = ATTRIBUTE_MANAGER.getHandler(ctx, "default");
+            } else {
+                PropertyHandler handler =
+                        ATTRIBUTE_MANAGER.getHandler(ctx, attributeName);
+                if (handler != null) {
+                    handler.apply(ctx, attributeName, propertyDescriptor,
+                            tagAttribute);
+                }
+            }
+        }
+        if(defaultHandler!=null) {
+            // If the 'default'-attribute of cc:attribute was set, apply the
+            // previously stored PropertyHandler (see above) now, as now it is
+            // guaranteed that if a 'type'-attribute existed, that its handler
+            // was already applied
+            try {
+                defaultHandler.apply(ctx, "default", propertyDescriptor,
+                        defaultTagAttribute);
+            } catch (IllegalArgumentException ex) {
+                // If the type (according to the type-attribute) can not be
+                // found, the DefaultPropertyHandler will wrapp the
+                // ClassNotFoundException into an IllegalArgumentException,
+                // which is unwrapped into a TagException here.
+                throw new TagException(tag, 
+                        "'type' could not be resolved: " + ex.getCause(),
+                        ex.getCause());
+            }
+        }
+        
+        this.nextHandler.apply(ctx, parent);
+        
+    }
+    
+    private class CCAttributePropertyDescriptor extends PropertyDescriptor {
+
+        public CCAttributePropertyDescriptor(String propertyName, Method readMethod, Method writeMethod) throws IntrospectionException {
+            super(propertyName, readMethod, writeMethod);
+        }
+
+        @Override
+        public Object getValue(String attributeName) {
+            Object result = super.getValue(attributeName);
+            if ("type".equals(attributeName)) {
+                if ((null != result) && !(result instanceof Class)) {
+                    FacesContext context = FacesContext.getCurrentInstance();
+                    ELContext elContext = context.getELContext();
+                    String classStr = (String) ((ValueExpression)result).getValue(elContext);
+                    if (null != classStr) {
+                        try {
+                            result = ReflectionUtil.forName(classStr);
+
+                            this.setValue(attributeName, result);
+                        } catch (ClassNotFoundException ex) {
+                            classStr = "java.lang." + classStr;
+                            boolean throwException = false;
+                            try {
+                                result = ReflectionUtil.forName(classStr);
+                                
+                                this.setValue(attributeName, result);
+                            } catch (ClassNotFoundException ex2) {
+                                throwException = true;
+                            }
+                            if (throwException) {
+                                String message = "Unable to obtain class for " + classStr;
+                                if (LOGGER.isLoggable(Level.INFO)) {
+                                    LOGGER.log(Level.INFO, message, ex);
+                                }
+                                throw new TagAttributeException(tag, name, message, ex);
+                            }
+                        }
+                    }
+                    
+                }
+            }
+            return result;
+        }
+        
+        
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetHandler.java b/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetHandler.java
new file mode 100644
index 0000000..136bd54
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetHandler.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+
+
+public class BehaviorHolderAttachedObjectTargetHandler extends
+      AttachedObjectTargetHandler {
+
+    public BehaviorHolderAttachedObjectTargetHandler(TagConfig config) {
+        super(config);
+    }
+
+    /* (non-Javadoc)
+      * @see com.sun.faces.facelets.tag.composite.AttachedObjectTargetHandler#newAttachedObjectTargetImpl()
+      */
+    @Override
+    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
+        BehaviorHolderAttachedObjectTargetImpl target = new BehaviorHolderAttachedObjectTargetImpl();
+        TagAttribute event = this.getAttribute("event");
+        FaceletContext ctx = null;
+
+        if (null != event) {
+            if (!event.isLiteral()) {
+                FacesContext facesContext = FacesContext.getCurrentInstance();
+                ctx = (FaceletContext) facesContext.getAttributes()
+                  .get(FaceletContext.FACELET_CONTEXT_KEY);
+                String eventStr = (String)event.getValueExpression(ctx, String.class).getValue(ctx);
+                target.setEvent(eventStr);
+            } else {
+                target.setEvent(event.getValue());
+            }
+        }
+        TagAttribute defaultAttr = this.getAttribute("default");
+        if (null != defaultAttr) {
+            if (null == ctx) {
+                FacesContext facesContext = FacesContext.getCurrentInstance();
+                ctx = (FaceletContext) facesContext.getAttributes()
+                  .get(FaceletContext.FACELET_CONTEXT_KEY);
+            }
+            target.setDefaultEvent(defaultAttr.getBoolean(ctx));
+        }
+        return target;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetImpl.java b/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetImpl.java
new file mode 100644
index 0000000..ccb6e19
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetImpl.java
@@ -0,0 +1,110 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.BehaviorHolderAttachedObjectTarget;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class BehaviorHolderAttachedObjectTargetImpl extends
+      AttachedObjectTargetImpl implements BehaviorHolderAttachedObjectTarget {
+
+    private String event;
+
+    private boolean defaultEvent;
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     */
+    public BehaviorHolderAttachedObjectTargetImpl() {
+
+    }
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     *
+     * @return the event
+     */
+    public String getEvent() {
+        return event;
+    }
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     *
+     * @param event the event to set
+     */
+    public void setEvent(String event) {
+        this.event = event;
+    }
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     *
+     * @return the defaultEvent
+     */
+    public boolean isDefaultEvent() {
+        return defaultEvent;
+    }
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     *
+     * @param defaultEvent the defaultEvent to set
+     */
+    public void setDefaultEvent(boolean defaultEvent) {
+        this.defaultEvent = defaultEvent;
+    }
+
+    @Override
+    public List<UIComponent> getTargets(UIComponent topLevelComponent) {
+        List<UIComponent> targets = super.getTargets(topLevelComponent);
+        List<UIComponent> wrappedTargets = new ArrayList<UIComponent>(targets.size());
+        for (UIComponent component : targets) {
+            wrappedTargets
+                  .add(new BehaviorHolderWrapper(component, getName(), getEvent()));
+		}
+		return wrappedTargets;
+	}
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/BehaviorHolderWrapper.java b/com/sun/faces/facelets/tag/composite/BehaviorHolderWrapper.java
new file mode 100644
index 0000000..913a2d8
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/BehaviorHolderWrapper.java
@@ -0,0 +1,456 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.component.ContextCallback;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.*;
+import javax.faces.render.Renderer;
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * <p class="changed_added_2_0"></p>
+ */
+public class BehaviorHolderWrapper extends UIComponent implements
+      ClientBehaviorHolder {
+
+    private final UIComponent parent;
+    private final String virtualEvent;
+    private final String event;
+
+    public BehaviorHolderWrapper(UIComponent parent, String virtualEvent, String event) {
+        this.parent = parent;
+        this.virtualEvent = virtualEvent;
+        this.event = event;
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#broadcast(javax.faces.event.FacesEvent)
+     */
+    public void broadcast(FacesEvent event) throws AbortProcessingException {
+        parent.broadcast(event);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#decode(javax.faces.context.FacesContext)
+     */
+    public void decode(FacesContext context) {
+        parent.decode(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#encodeBegin(javax.faces.context.FacesContext)
+     */
+    public void encodeBegin(FacesContext context) throws IOException {
+        parent.encodeBegin(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#encodeChildren(javax.faces.context.FacesContext)
+     */
+    public void encodeChildren(FacesContext context) throws IOException {
+        parent.encodeChildren(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#encodeEnd(javax.faces.context.FacesContext)
+     */
+    public void encodeEnd(FacesContext context) throws IOException {
+        parent.encodeEnd(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#findComponent(java.lang.String)
+     */
+    public UIComponent findComponent(String expr) {
+        return parent.findComponent(expr);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getAttributes()
+     */
+    public Map<String, Object> getAttributes() {
+        return parent.getAttributes();
+    }
+
+    @Override
+    public Map<String, Object> getPassThroughAttributes(boolean create) {
+        return parent.getPassThroughAttributes(create);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getChildCount()
+     */
+    public int getChildCount() {
+        return parent.getChildCount();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getChildren()
+     */
+    public List<UIComponent> getChildren() {
+        return parent.getChildren();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getClientId(javax.faces.context.FacesContext)
+     */
+    public String getClientId(FacesContext context) {
+        return parent.getClientId(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getFacet(java.lang.String)
+     */
+    public UIComponent getFacet(String name) {
+        return parent.getFacet(name);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getFacets()
+     */
+    public Map<String, UIComponent> getFacets() {
+        return parent.getFacets();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getFacetsAndChildren()
+     */
+    public Iterator<UIComponent> getFacetsAndChildren() {
+        return parent.getFacetsAndChildren();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getFamily()
+     */
+    public String getFamily() {
+        return parent.getFamily();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getId()
+     */
+    public String getId() {
+        return parent.getId();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getParent()
+     */
+    public UIComponent getParent() {
+        return parent.getParent();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getRendererType()
+     */
+    public String getRendererType() {
+        return parent.getRendererType();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getRendersChildren()
+     */
+    public boolean getRendersChildren() {
+        return parent.getRendersChildren();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getValueBinding(java.lang.String)
+     * @deprecated
+     */
+    public ValueBinding getValueBinding(String name) {
+        return parent.getValueBinding(name);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#getValueExpression(java.lang.String)
+     */
+    public ValueExpression getValueExpression(String name) {
+        return parent.getValueExpression(name);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#invokeOnComponent(javax.faces.context.FacesContext, java.lang.String, javax.faces.component.ContextCallback)
+     */
+    public boolean invokeOnComponent(FacesContext context,
+                                     String clientId,
+                                     ContextCallback callback)
+    throws FacesException {
+        return parent.invokeOnComponent(context, clientId, callback);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#isInView()
+     */
+    public boolean isInView() {
+        return parent.isInView();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#isRendered()
+     */
+    public boolean isRendered() {
+        return parent.isRendered();
+    }
+
+    /**
+     * @see javax.faces.component.StateHolder#isTransient()
+     */
+    public boolean isTransient() {
+        return parent.isTransient();
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#processDecodes(javax.faces.context.FacesContext)
+     */
+    public void processDecodes(FacesContext context) {
+        parent.processDecodes(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#processEvent(javax.faces.event.ComponentSystemEvent)
+     */
+    public void processEvent(ComponentSystemEvent event)
+          throws AbortProcessingException {
+        parent.processEvent(event);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#processRestoreState(javax.faces.context.FacesContext, java.lang.Object)
+     */
+    public void processRestoreState(FacesContext context, Object state) {
+        parent.processRestoreState(context, state);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#processSaveState(javax.faces.context.FacesContext)
+     */
+    public Object processSaveState(FacesContext context) {
+        return parent.processSaveState(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#processUpdates(javax.faces.context.FacesContext)
+     */
+    public void processUpdates(FacesContext context) {
+        parent.processUpdates(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#processValidators(javax.faces.context.FacesContext)
+     */
+    public void processValidators(FacesContext context) {
+        parent.processValidators(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#queueEvent(javax.faces.event.FacesEvent)
+     */
+    public void queueEvent(FacesEvent event) {
+        parent.queueEvent(event);
+    }
+
+    /**
+     * @see javax.faces.component.StateHolder#restoreState(javax.faces.context.FacesContext, java.lang.Object)
+     */
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        parent.restoreState(context, state);
+    }
+
+    /**
+     * @see javax.faces.component.StateHolder#saveState(javax.faces.context.FacesContext)
+     */
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        return parent.saveState(context);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#setId(java.lang.String)
+     */
+    public void setId(String id) {
+        parent.setId(id);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#setParent(javax.faces.component.UIComponent)
+     */
+    public void setParent(UIComponent parent) {
+        parent.setParent(parent);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#setRendered(boolean)
+     */
+    public void setRendered(boolean rendered) {
+        parent.setRendered(rendered);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#setRendererType(java.lang.String)
+     */
+    public void setRendererType(String rendererType) {
+        parent.setRendererType(rendererType);
+    }
+
+    /**
+     * @see javax.faces.component.StateHolder#setTransient(boolean)
+     */
+    public void setTransient(boolean newTransientValue) {
+        parent.setTransient(newTransientValue);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#setValueBinding(java.lang.String, javax.faces.el.ValueBinding)
+     * @deprecated
+     */
+    public void setValueBinding(String name, ValueBinding binding) {
+        parent.setValueBinding(name, binding);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#setValueExpression(java.lang.String, javax.el.ValueExpression)
+     */
+    public void setValueExpression(String name, ValueExpression binding) {
+        parent.setValueExpression(name, binding);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#subscribeToEvent(java.lang.Class, javax.faces.event.ComponentSystemEventListener)
+     */
+    public void subscribeToEvent(Class<? extends SystemEvent> eventClass,
+                                 ComponentSystemEventListener componentListener) {
+        parent.subscribeToEvent(eventClass, componentListener);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#unsubscribeFromEvent(java.lang.Class, javax.faces.event.ComponentSystemEventListener)
+     */
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass,
+                                     ComponentSystemEventListener componentListener) {
+        parent.unsubscribeFromEvent(eventClass, componentListener);
+    }
+
+    /**
+     * @see javax.faces.component.UIComponent#visitTree(javax.faces.component.visit.VisitContext, javax.faces.component.visit.VisitCallback)
+     */
+    public boolean visitTree(VisitContext context, VisitCallback callback) {
+        return parent.visitTree(context, callback);
+    }
+
+    @Override
+    protected void addFacesListener(FacesListener listener) {
+        // no-op
+    }
+
+    @Override
+    protected FacesContext getFacesContext() {
+        return FacesContext.getCurrentInstance();
+    }
+
+    @Override
+    protected FacesListener[] getFacesListeners(Class clazz) {
+        return new FacesListener[0];
+    }
+
+    @Override
+    protected Renderer getRenderer(FacesContext context) {
+        return null;
+    }
+
+    @Override
+    protected void removeFacesListener(FacesListener listener) {
+        // no-op
+    }
+
+    public void addClientBehavior(String eventName, ClientBehavior behavior) {
+        if (parent instanceof ClientBehaviorHolder) {
+            ClientBehaviorHolder parentHolder = (ClientBehaviorHolder) parent;
+            if (virtualEvent.equals(eventName)) {
+                parentHolder.addClientBehavior(event, behavior);
+            }
+        } else {
+            throw new FacesException(
+                  "Unable to attach behavior to non-ClientBehaviorHolder parent:"
+                  + parent);
+        }
+
+    }
+
+    public Map<String, List<ClientBehavior>> getClientBehaviors() {
+        if (parent instanceof ClientBehaviorHolder) {
+            ClientBehaviorHolder parentHolder = (ClientBehaviorHolder) parent;
+            Map<String, List<ClientBehavior>> behaviors = new HashMap<String, List<ClientBehavior>>(
+                  1);
+            behaviors.put(virtualEvent, parentHolder.getClientBehaviors().get(event));
+            return Collections.unmodifiableMap(behaviors);
+        } else {
+            throw new FacesException(
+                  "Unable to get behaviors from non-ClientBehaviorHolder parent:"
+                  + parent);
+        }
+    }
+
+    public String getDefaultEventName() {
+        return virtualEvent;
+    }
+
+    public Collection<String> getEventNames() {
+        return Collections.singleton(virtualEvent);
+    }
+
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/CompositeComponentBeanInfo.java b/com/sun/faces/facelets/tag/composite/CompositeComponentBeanInfo.java
new file mode 100644
index 0000000..5271dec
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/CompositeComponentBeanInfo.java
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.beans.PropertyDescriptor;
+import java.beans.SimpleBeanInfo;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class CompositeComponentBeanInfo extends SimpleBeanInfo implements BeanInfo, Externalizable {
+
+    private BeanDescriptor descriptor = null;
+
+    @Override
+    public BeanDescriptor getBeanDescriptor() {
+        return descriptor;
+    }
+
+    public void setBeanDescriptor(BeanDescriptor newDescriptor) {
+        descriptor = newDescriptor;
+    }
+
+    @Override
+    public PropertyDescriptor[] getPropertyDescriptors() {
+        List<PropertyDescriptor> list = getPropertyDescriptorsList();
+        PropertyDescriptor [] result = new PropertyDescriptor[list.size()];
+        list.toArray(result);
+        return result;
+    }
+
+    private List<PropertyDescriptor> propertyDescriptors;
+    public List<PropertyDescriptor> getPropertyDescriptorsList() {
+
+        if (null == propertyDescriptors) {
+            propertyDescriptors = new ArrayList<PropertyDescriptor>();
+        }
+        return propertyDescriptors;
+    }
+
+
+    // ----------------------------------------------Methods From Externalizable
+
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        out.writeObject(descriptor.getBeanClass());
+
+    }
+
+
+    public void readExternal(ObjectInput in)
+    throws IOException, ClassNotFoundException {
+
+        descriptor = new BeanDescriptor((Class) in.readObject());
+
+    }
+}
diff --git a/com/sun/faces/facelets/tag/composite/CompositeLibrary.java b/com/sun/faces/facelets/tag/composite/CompositeLibrary.java
new file mode 100644
index 0000000..06a3dc8
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/CompositeLibrary.java
@@ -0,0 +1,102 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.tag.AbstractTagLibrary;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: CompositeLibrary.java 12012 2013-06-19 23:01:19Z edburns $
+ */
+public final class CompositeLibrary extends AbstractTagLibrary {
+
+    public final static String Namespace = "http://java.sun.com/jsf/composite";
+    public final static String XMLNSNamespace = "http://xmlns.jcp.org/jsf/composite";
+
+    public final static CompositeLibrary Instance = new CompositeLibrary();
+
+    public CompositeLibrary() {
+        this(Namespace);
+    }
+    
+    public CompositeLibrary(String namespace) {
+        super(namespace);
+
+        // The interface section
+        this.addTagHandler("interface", InterfaceHandler.class);
+        
+        // Things that go insead of the interface section
+        this.addTagHandler("attribute", AttributeHandler.class);
+        this.addTagHandler("extension", ExtensionHandler.class);
+        this.addTagHandler("editableValueHolder", EditableValueHolderAttachedObjectTargetHandler.class);
+        this.addTagHandler("actionSource", ActionSource2AttachedObjectTargetHandler.class);
+        this.addTagHandler("valueHolder", ValueHolderAttachedObjectTargetHandler.class);
+        this.addTagHandler("clientBehavior", BehaviorHolderAttachedObjectTargetHandler.class);
+        this.addTagHandler("facet", DeclareFacetHandler.class);
+        
+        // The implementation section
+        this.addTagHandler("implementation", ImplementationHandler.class);
+        
+        // Things that go inside of the implementation section
+        this.addTagHandler("insertChildren", InsertChildrenHandler.class);
+        this.addTagHandler("insertFacet", InsertFacetHandler.class);
+        this.addComponent("renderFacet", "javax.faces.Output",
+                "javax.faces.CompositeFacet", RenderFacetHandler.class);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/composite/DeclareFacetHandler.java b/com/sun/faces/facelets/tag/composite/DeclareFacetHandler.java
new file mode 100644
index 0000000..ffa7c13
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/DeclareFacetHandler.java
@@ -0,0 +1,149 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.*;
+import java.beans.BeanDescriptor;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class DeclareFacetHandler extends TagHandlerImpl {
+
+    private static final String[] ATTRIBUTES = {
+          "required",
+          "displayName",
+          "expert",
+          "hidden",
+          "preferred",
+          "shortDescription",
+          "default"
+    };
+
+    private static final PropertyHandlerManager ATTRIBUTE_MANAGER =
+          PropertyHandlerManager.getInstance(ATTRIBUTES);
+
+    private TagAttribute name = null;
+
+
+
+    public DeclareFacetHandler(TagConfig config) {
+        super(config);
+        this.name = this.getRequiredAttribute("name");
+
+        
+    }
+    
+    @SuppressWarnings({"unchecked"})
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        // only process if it's been created
+        if (null == parent || 
+            (null == (parent = parent.getParent())) ||
+            !(ComponentHandler.isNew(parent))) {
+            return;
+        }
+        
+        Map<String, Object> componentAttrs = parent.getAttributes();
+
+        CompositeComponentBeanInfo componentBeanInfo = (CompositeComponentBeanInfo)
+                componentAttrs.get(UIComponent.BEANINFO_KEY);
+
+        // Get the value of required the name propertyDescriptor
+        ValueExpression ve = name.getValueExpression(ctx, String.class);
+        String strValue = (String) ve.getValue(ctx);
+        BeanDescriptor componentBeanDescriptor = componentBeanInfo.getBeanDescriptor();
+        
+        Map<String, PropertyDescriptor> facetDescriptors = (Map<String, PropertyDescriptor>) 
+                   componentBeanDescriptor.getValue(UIComponent.FACETS_KEY);
+        
+        if (facetDescriptors == null) {
+            facetDescriptors = new HashMap<String, PropertyDescriptor>();
+            componentBeanDescriptor.setValue(UIComponent.FACETS_KEY, 
+                    facetDescriptors);
+        }
+
+        PropertyDescriptor propertyDescriptor;
+        try {
+            propertyDescriptor = new PropertyDescriptor(strValue, null, null);
+        } catch (IntrospectionException ex) {
+            throw new  TagException(tag, "Unable to create property descriptor for facet" + strValue, ex);
+        }
+        facetDescriptors.put(strValue, propertyDescriptor);
+        
+        for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
+            String attributeName = tagAttribute.getLocalName();
+            PropertyHandler handler = ATTRIBUTE_MANAGER.getHandler(ctx, attributeName);
+            if (handler != null) {
+                handler.apply(ctx, attributeName, propertyDescriptor, tagAttribute);
+            }
+
+        }
+        
+        this.nextHandler.apply(ctx, parent);
+        
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetHandler.java b/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetHandler.java
new file mode 100644
index 0000000..a1fc6fb
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetHandler.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.view.facelets.TagConfig;
+
+
+public class EditableValueHolderAttachedObjectTargetHandler extends AttachedObjectTargetHandler {
+    
+    public EditableValueHolderAttachedObjectTargetHandler(TagConfig config) {
+        super(config);
+    }
+    
+
+    @Override
+    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
+        return new EditableValueHolderAttachedObjectTargetImpl();
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetImpl.java b/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetImpl.java
new file mode 100644
index 0000000..f74ffa7
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetImpl.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.view.EditableValueHolderAttachedObjectTarget;
+
+
+public class EditableValueHolderAttachedObjectTargetImpl extends AttachedObjectTargetImpl implements EditableValueHolderAttachedObjectTarget {
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/ExtensionHandler.java b/com/sun/faces/facelets/tag/composite/ExtensionHandler.java
new file mode 100644
index 0000000..7b5c725
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/ExtensionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.compiler.CompilationMessageHolder;
+import com.sun.faces.facelets.compiler.EncodingHandler;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+import java.io.IOException;
+
+
+public class ExtensionHandler extends TagHandler {
+
+    public ExtensionHandler(TagConfig tagConfig) {
+        super(tagConfig);
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        // extract a prefix from the child content
+        if (null != nextHandler) {
+            String content = this.nextHandler.toString().trim();
+            if (content.startsWith("<")) {
+                int i;
+                if (-1 != (i = content.indexOf(":"))) {
+                    content = content.substring(1, i);
+                    CompilationMessageHolder messageHolder = EncodingHandler.getCompilationMessageHolder(ctx);
+                    // remove any compilation messages pertaining to this prefix
+                    if (null != messageHolder) {
+                        messageHolder.removeNamespacePrefixMessages(content);
+                    }
+                }
+            }
+        }
+
+    }
+    
+    
+    
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/ImplementationHandler.java b/com/sun/faces/facelets/tag/composite/ImplementationHandler.java
new file mode 100644
index 0000000..5909d67
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/ImplementationHandler.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.application.view.FaceletViewHandlingStrategy;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+
+public class ImplementationHandler extends TagHandlerImpl {
+
+    public final static String Name = "implementation";
+
+    
+    public ImplementationHandler(TagConfig config) {
+        super(config);
+    }
+    
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        if (!FaceletViewHandlingStrategy.isBuildingMetadata(ctx.getFacesContext())) {
+            this.nextHandler.apply(ctx, parent);
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/InsertChildrenHandler.java b/com/sun/faces/facelets/tag/composite/InsertChildrenHandler.java
new file mode 100644
index 0000000..1bff263
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/InsertChildrenHandler.java
@@ -0,0 +1,224 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import javax.faces.view.Location;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.application.Resource;
+import java.io.IOException;
+import java.util.List;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+/**
+ * This <code>TagHandler</code> is responsible for relocating children
+ * defined within a composite component to a component within the
+ * composite component's <code>composite:implementation</code> section.
+ */
+public class InsertChildrenHandler extends TagHandlerImpl {
+
+    private final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+    private static final String REQUIRED_ATTRIBUTE = "required";
+
+    // This attribute is not required.  If not defined, then assume the facet
+    // isn't necessary.
+    private TagAttribute required;
+
+    
+    // ------------------------------------------------------------ Constructors
+
+
+    public InsertChildrenHandler(TagConfig config) {
+
+        super(config);
+        required = getAttribute(REQUIRED_ATTRIBUTE);
+
+    }
+
+
+    // ------------------------------------------------- Methods from TagHandler
+
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+          throws IOException {
+
+        UIComponent compositeParent =
+              UIComponent.getCurrentCompositeComponent(ctx.getFacesContext());
+        if (compositeParent != null) {
+            int count = parent.getChildCount();
+            compositeParent.subscribeToEvent(PostAddToViewEvent.class,
+                                             new RelocateChildrenListener(ctx,
+                                                                          parent,
+                                                                          count,
+                                                                          this.tag.getLocation()));
+        }
+
+    }
+
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private class RelocateChildrenListener extends RelocateListener {
+
+
+        private FaceletContext ctx;
+        private UIComponent component;
+        private int idx;
+        private Location location;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        RelocateChildrenListener(FaceletContext ctx,
+                                 UIComponent component,
+                                 int idx,
+                                 Location location) {
+
+            this.ctx = ctx;
+            this.component = component;
+            if (!component.getAttributes().containsKey("idx")) {
+                component.getAttributes().put("idx", idx);
+            }
+            this.idx = idx;
+            this.location = location;
+
+        }
+
+        // --------------------------- Methods from ComponentSystemEventListener
+
+
+        public void processEvent(ComponentSystemEvent event)
+        throws AbortProcessingException {
+
+            UIComponent compositeParent = event.getComponent();
+            if (compositeParent == null) {
+                return;
+            }
+
+            // ensure we're working with the expected composite component as
+            // nesting levels may mask this.
+            Resource resource = getBackingResource(compositeParent);
+            while (compositeParent != null && !resourcesMatch(resource, location)) {
+                compositeParent = UIComponent.getCompositeComponentParent(compositeParent);
+                if (compositeParent != null) {
+                    resource = getBackingResource(compositeParent);
+                }
+            }
+
+            if (compositeParent == null) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.composite.component.insertchildren.missing.template",
+                               location.toString());
+                }
+                return;
+            }
+
+            if (compositeParent.getChildCount() == 0 && isRequired()) {
+                throwRequiredException(ctx, compositeParent);
+            }
+
+            List<UIComponent> compositeChildren = compositeParent.getChildren();
+            List<UIComponent> parentChildren = component.getChildren();
+
+            //store the new parent's info per child in the old parent's attr map
+            //<child id, new parent>
+            for (UIComponent c : compositeChildren) {
+                String key =  (String)c.getAttributes().get(ComponentSupport.MARK_CREATED);
+                String value = component.getId();
+                if (key != null && value != null) {
+                    compositeParent.getAttributes().put(key, value);
+                }
+            }
+
+            if (parentChildren.size() < getIdx()) {
+                parentChildren.addAll(compositeChildren);
+            } else {
+                parentChildren.addAll(getIdx(), compositeChildren);
+            }
+
+            
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+        private int getIdx() {
+            Integer idx = (Integer) component.getAttributes().get("idx");
+            return ((idx != null) ? idx : this.idx);
+        }
+
+        private void throwRequiredException(FaceletContext ctx,
+                                        UIComponent compositeParent) {
+
+            throw new TagException(tag,
+                                   "Unable to find any children components "
+                                     + "nested within parent composite component with id '"
+                                     + compositeParent .getClientId(ctx.getFacesContext())
+                                     + '\'');
+
+        }
+
+
+        private boolean isRequired() {
+
+            return ((required != null) && required.getBoolean(ctx));
+
+        }
+
+
+    } // END RelocateChildrenListener
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/InsertFacetHandler.java b/com/sun/faces/facelets/tag/composite/InsertFacetHandler.java
new file mode 100644
index 0000000..b7fb6b3
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/InsertFacetHandler.java
@@ -0,0 +1,233 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import javax.faces.view.Location;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.application.Resource;
+import java.io.IOException;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * This <code>TagHandler</code> is responsible for relocating Facets
+ * defined within a composite component to a component within the
+ * composite component's <code>composite:implementation</code> section.
+ */
+public class InsertFacetHandler extends TagHandlerImpl {
+
+    private final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+    
+    // Supported attribute names
+    private static final String NAME_ATTRIBUTE = "name";
+
+    private static final String REQUIRED_ATTRIBUTE = "required";
+
+    // Attributes
+
+    // This attribute is required.
+    private TagAttribute name;
+
+    // This attribute is not required.  If it's not defined or false,
+    // then the facet associated with name need not be present in the
+    // using page.
+    private TagAttribute required;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public InsertFacetHandler(TagConfig config) {
+
+        super(config);
+        name = getRequiredAttribute(NAME_ATTRIBUTE);
+        required = getAttribute(REQUIRED_ATTRIBUTE);
+
+    }
+
+
+    // ------------------------------------------------- Methods from TagHandler
+
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+          throws IOException {
+
+        UIComponent compositeParent =
+              UIComponent.getCurrentCompositeComponent(ctx.getFacesContext());
+
+
+        if (compositeParent != null) {
+            compositeParent.subscribeToEvent(PostAddToViewEvent.class,
+                                             new RelocateFacetListener(ctx,
+                                                                       parent,
+                                                                       this.tag.getLocation()));
+        }
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private class RelocateFacetListener extends RelocateListener {
+
+
+        private FaceletContext ctx;
+        private UIComponent component;
+        private Location location;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        RelocateFacetListener(FaceletContext ctx,
+                              UIComponent component,
+                              Location location) {
+
+            this.ctx = ctx;
+            this.component = component;
+            this.location = location;
+
+        }
+
+        // --------------------------- Methods from ComponentSystemEventListener
+
+
+        public void processEvent(ComponentSystemEvent event)
+        throws AbortProcessingException {
+
+            UIComponent compositeParent = event.getComponent();
+            if (compositeParent == null) {
+                return;
+            }
+
+            // ensure we're working with the expected composite component as
+            // nesting levels may mask this.
+            Resource resource = getBackingResource(compositeParent);
+            while (compositeParent != null && !resourcesMatch(resource, location)) {
+                compositeParent = UIComponent.getCompositeComponentParent(compositeParent);
+                if (compositeParent != null) {
+                    resource = getBackingResource(compositeParent);
+                }
+            }
+
+            if (compositeParent == null) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.composite.component.insertfacet.missing.template",
+                               location.toString());
+                }
+                return;
+            }
+            boolean req = isRequired();
+            String facetName = name.getValue(ctx);
+            if (compositeParent.getFacetCount() == 0 && req) {
+                throwRequiredException(ctx, facetName, compositeParent);
+            }
+
+            Map<String, UIComponent> facets = compositeParent.getFacets();
+            UIComponent facet = facets.remove(facetName);
+            if (facet == null) {
+                facet = compositeParent.getParent().getFacets().remove(facetName);
+            }
+            if (facet != null) {
+                component.getFacets().put(facetName, facet);
+
+                String key = (String)facet.getAttributes().get(ComponentSupport.MARK_CREATED);
+               
+                String value = component.getId();
+                if (key != null && value != null) {
+                    //store the new parent's info per child in the old parent's attr map
+                    compositeParent.getAttributes().put(key, value);
+                }
+
+            } else {
+                // In the case of full state saving, the compositeParent won't
+                // have the facet to be relocated as its own - it will have already
+                // been made a facet of the target component, so we need
+                // to only throw the Exception if required, and the target component
+                // doesn't have the facet defined
+                if (req && component.getFacets().get(facetName) == null) {
+                    throwRequiredException(ctx, facetName, compositeParent);
+                }
+            }
+         
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        private void throwRequiredException(FaceletContext ctx,
+                                            String facetName,
+                                            UIComponent compositeParent) {
+
+            throw new TagException(tag,
+                                   "Unable to find facet named '"
+                                   + facetName
+                                   + "' in parent composite component with id '"
+                                   + compositeParent .getClientId(ctx.getFacesContext())
+                                   + '\'');
+
+        }
+
+
+        private boolean isRequired() {
+
+            return ((required != null) && required.getBoolean(ctx));
+
+        }
+
+    } // END RelocateFacetListener
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/InterfaceHandler.java b/com/sun/faces/facelets/tag/composite/InterfaceHandler.java
new file mode 100644
index 0000000..c6640cd
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/InterfaceHandler.java
@@ -0,0 +1,287 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.application.view.FaceletViewHandlingStrategy;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+
+import javax.faces.application.Resource;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.AttachedObjectTarget;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.beans.PropertyDescriptor;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+import javax.el.ValueExpression;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagException;
+
+public class InterfaceHandler extends TagHandlerImpl {
+
+    private final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+    private static final String[] ATTRIBUTES_DEV = {
+          "displayName",
+          "expert",
+          "hidden",
+          "preferred",
+          "shortDescription",
+          "name",
+          "componentType"
+    };
+
+
+
+    private static final PropertyHandlerManager INTERFACE_HANDLERS =
+          PropertyHandlerManager.getInstance(ATTRIBUTES_DEV);
+
+
+
+    public final static String Name = "interface";
+
+    
+    public InterfaceHandler(TagConfig config) {
+        super(config);
+    }
+    
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        FacesContext context = ctx.getFacesContext();
+        // only process if it's been created
+        // Do not process if we're simply building metadata
+        if (FaceletViewHandlingStrategy.isBuildingMetadata(context)) {
+            imbueComponentWithMetadata(ctx, parent);
+            this.nextHandler.apply(ctx, parent);
+        } else {
+            if (ProjectStage.Development == context.getApplication().getProjectStage()) {
+                validateComponent(context, parent);
+            }
+        }
+    }
+    
+    private void validateComponent(FacesContext context, UIComponent ccParent) throws TagException {
+        UIComponent cc = ccParent.getParent();
+        if (null == cc) {
+            String clientId = ccParent.getClientId(context);
+
+            throw new TagException(tag, MessageUtils.getExceptionMessageString(
+                    MessageUtils.COMPONENT_NOT_FOUND_ERROR_MESSAGE_ID,
+                    clientId + ".getParent()"));
+        }
+        Tag usingPageTag = ComponentSupport.getTagForComponent(context, cc);
+        Map<String, Object> attrs = cc.getAttributes();
+        BeanInfo componentMetadata = (BeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
+
+        if (null == componentMetadata) {
+            String clientId = ccParent.getClientId(context);
+
+            throw new TagException(usingPageTag, MessageUtils.getExceptionMessageString(
+                    MessageUtils.MISSING_COMPONENT_METADATA, clientId));
+        }
+
+        PropertyDescriptor[] declaredAttributes = componentMetadata.getPropertyDescriptors();
+        String key;
+        Object requiredValue;
+        boolean found = false, required = false;
+        StringBuffer buf = null;
+        String attrMessage = "", facetMessage = "";
+
+        // Traverse the attributes of this component
+        for (PropertyDescriptor cur : declaredAttributes) {
+            required = false;
+            requiredValue = cur.getValue("required");
+            if (null != requiredValue) {
+                if (requiredValue instanceof ValueExpression) {
+                    requiredValue = ((ValueExpression) requiredValue).getValue(context.getELContext());
+                    required = Boolean.parseBoolean(requiredValue.toString());
+                }
+            }
+            if (required) {
+                key = cur.getName();
+                found = false;
+                // Is the attribute a method expression?
+                if (null != cur.getValue("method-signature") && null == cur.getValue("type")) {
+                    // Yes, look for it as an EL expression.
+                    found = (null != cc.getValueExpression(key));
+                } else {
+                    // No, look for it as an actual attribute
+                    found = attrs.containsKey(key);
+                    // Special case: nested composite components
+                    if (!found) {
+                        // Check if an EL expression was given.
+                        found = (null!=cc.getValueExpression(key));
+                    }
+                }
+                if (!found) {
+                    if (null == buf) {
+                        buf = new StringBuffer();
+                        buf.append(key);
+                    } else {
+                        buf.append(", " + key);
+                    }
+                }
+            }
+        }
+        if (null != buf) {
+            attrMessage = MessageUtils.getExceptionMessageString(MessageUtils.MISSING_COMPONENT_ATTRIBUTE_VALUE,
+                    buf.toString());
+        }
+
+        buf = null;
+
+        // Traverse the declared facets
+        Map<String, PropertyDescriptor> declaredFacets =
+                (Map<String, PropertyDescriptor>) componentMetadata.getBeanDescriptor().getValue(UIComponent.FACETS_KEY);
+        if (null != declaredFacets) {
+            for (PropertyDescriptor cur : declaredFacets.values()) {
+                required = false;
+                requiredValue = cur.getValue("required");
+                if (null != requiredValue) {
+                    if (requiredValue instanceof ValueExpression) {
+                        requiredValue = ((ValueExpression) requiredValue).getValue(context.getELContext());
+                        required = Boolean.parseBoolean(requiredValue.toString());
+                    }
+                }
+                if (required) {
+                    key = cur.getName();
+                    if (!cc.getFacets().containsKey(key)) {
+                        if (null == buf) {
+                            buf = new StringBuffer();
+                            buf.append(key);
+                        } else {
+                            buf.append(", " + key);
+                        }
+                    }
+                }
+            }
+        }
+        if (null != buf) {
+            facetMessage = MessageUtils.getExceptionMessageString(MessageUtils.MISSING_COMPONENT_FACET,
+                    buf.toString());
+        }
+
+        if (0 < attrMessage.length() || 0 < facetMessage.length()) {
+            throw new TagException(usingPageTag, attrMessage + " " + facetMessage);
+        }
+    }
+    
+    @SuppressWarnings({"unchecked"})
+    private void imbueComponentWithMetadata(FaceletContext ctx, UIComponent parent) {
+        // only process if it's been created
+        if (null == parent || 
+            (null == (parent = parent.getParent())) ||
+            !(ComponentHandler.isNew(parent))) {
+            return;
+        }
+        
+        Map<String, Object> attrs = parent.getAttributes();
+
+        CompositeComponentBeanInfo componentBeanInfo =
+              (CompositeComponentBeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
+
+        if (componentBeanInfo == null) {
+        
+            componentBeanInfo = new CompositeComponentBeanInfo();
+            attrs.put(UIComponent.BEANINFO_KEY, componentBeanInfo);
+            BeanDescriptor componentDescriptor = new BeanDescriptor(parent.getClass());
+            // PENDING(edburns): Make sure attributeNames() returns the right content
+            // per the javadocs for ViewDeclarationLanguage.getComponentMetadata()
+            componentBeanInfo.setBeanDescriptor(componentDescriptor);
+
+            for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
+                String attributeName = tagAttribute.getLocalName();
+                PropertyHandler handler = INTERFACE_HANDLERS.getHandler(ctx, attributeName);
+                if (handler != null) {
+                    handler.apply(ctx,
+                                  attributeName,
+                                  componentDescriptor,
+                                  tagAttribute);
+                }
+
+            }
+
+            List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
+              componentDescriptor.getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
+            if (null == targetList) {
+                targetList = new ArrayList<AttachedObjectTarget>();
+                componentDescriptor.setValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY,
+                        targetList);
+            }
+
+            Resource componentResource =
+                    (Resource) attrs.get(Resource.COMPONENT_RESOURCE_KEY);
+            if (null == componentResource) {
+                throw new NullPointerException("Unable to find Resource for composite component");
+            }
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/PropertyHandler.java b/com/sun/faces/facelets/tag/composite/PropertyHandler.java
new file mode 100644
index 0000000..0e70fa9
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/PropertyHandler.java
@@ -0,0 +1,73 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import java.beans.FeatureDescriptor;
+
+
+interface PropertyHandler {
+
+    void apply(FaceletContext ctx,
+               String propName,
+               FeatureDescriptor target,
+               TagAttribute attribute);
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/PropertyHandlerManager.java b/com/sun/faces/facelets/tag/composite/PropertyHandlerManager.java
new file mode 100644
index 0000000..ad82975
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/PropertyHandlerManager.java
@@ -0,0 +1,370 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import com.sun.faces.facelets.el.TagValueExpression;
+import com.sun.faces.util.Util;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.component.UIComponent;
+import javax.faces.application.ProjectStage;
+import javax.el.ValueExpression;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Arrays;
+import java.beans.FeatureDescriptor;
+
+
+class PropertyHandlerManager {
+    
+    private static final Map<String,PropertyHandler> ALL_HANDLERS =
+          new HashMap<String,PropertyHandler>(12, 1.0f);
+    static {
+        ALL_HANDLERS.put("targets", new StringValueExpressionPropertyHandler());
+        ALL_HANDLERS.put("targetAttributeName", new StringValueExpressionPropertyHandler());
+        ALL_HANDLERS.put("method-signature", new StringValueExpressionPropertyHandler());
+        ALL_HANDLERS.put("type", new StringValueExpressionPropertyHandler());
+        ALL_HANDLERS.put("default", new DefaultPropertyHandler());
+        ALL_HANDLERS.put("displayName", new DisplayNamePropertyHandler());
+        ALL_HANDLERS.put("shortDescription", new ShortDescriptionPropertyHandler());
+        ALL_HANDLERS.put("expert", new ExpertPropertyHandler());
+        ALL_HANDLERS.put("hidden", new HiddenPropertyHandler());
+        ALL_HANDLERS.put("preferred", new PreferredPropertyHandler());
+        ALL_HANDLERS.put("required", new BooleanValueExpressionPropertyHandler());
+        ALL_HANDLERS.put("name", new NamePropertyHandler());
+        ALL_HANDLERS.put("componentType", new ComponentTypePropertyHandler());
+    }
+
+    private static final String[] DEV_ONLY_ATTRIBUTES = {
+          "displayName",
+          "shortDescription",
+          "export",
+          "hidden",
+          "preferred"
+    };
+    static {
+        Arrays.sort(DEV_ONLY_ATTRIBUTES);
+    }
+
+    private Map<String,PropertyHandler> managedHandlers;
+    private PropertyHandler genericHandler =
+          new ObjectValueExpressionPropertyHandler();
+
+
+    // -------------------------------------------------------- Constructors
+
+
+    private PropertyHandlerManager(Map<String,PropertyHandler> managedHandlers) {
+
+        this.managedHandlers = managedHandlers;
+
+    }
+
+
+    // ------------------------------------------------- Package Private Methods
+
+
+    static PropertyHandlerManager getInstance(String[] attributes) {
+
+        
+        Map<String,PropertyHandler> handlers =
+              new HashMap<String,PropertyHandler>(attributes.length, 1.0f);
+        for (String attribute : attributes) {
+            handlers.put(attribute, ALL_HANDLERS.get(attribute));
+        }
+
+        return new PropertyHandlerManager(handlers);
+
+    }
+
+
+    PropertyHandler getHandler(FaceletContext ctx, String name) {
+
+        if (!ctx.getFacesContext().isProjectStage(ProjectStage.Development)) {
+            if (Arrays.binarySearch(DEV_ONLY_ATTRIBUTES, name) >= 0) {
+                return null;
+            }
+        }
+        
+        PropertyHandler h = managedHandlers.get(name);
+        return ((h != null) ? h : genericHandler);
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+    
+    
+    private abstract static class BooleanFeatureDescriptorPropertyHandler
+          implements TypedPropertyHandler {
+
+        public Class<?> getEvalType() {
+            return Boolean.class;
+        }
+
+    } // END BooleanFeatureDescriptorPropertyHandler
+    
+    
+    private abstract static class StringFeatureDescriptorPropertyHandler
+          implements TypedPropertyHandler {
+
+        public Class<?> getEvalType() {
+            return String.class;
+        }
+
+    } // END StringPropertyDescriptionPropertyHandler
+
+    
+    private abstract static class TypedValueExpressionPropertyHandler
+          implements TypedPropertyHandler {
+
+        public void apply(FaceletContext ctx,
+                          String propName,
+                          FeatureDescriptor target,
+                          TagAttribute attribute) {
+
+            target.setValue(propName,
+                            attribute.getValueExpression(ctx, getEvalType()));
+
+        }
+
+        public abstract Class<?> getEvalType();
+
+    } // END TypeValueExpressionPropertyHandler
+
+    
+    private static final class NamePropertyHandler 
+          extends StringFeatureDescriptorPropertyHandler {
+
+        public void apply(FaceletContext ctx, 
+                          String propName, 
+                          FeatureDescriptor target, 
+                          TagAttribute attribute) {
+            
+            ValueExpression ve = attribute.getValueExpression(ctx, getEvalType());
+            String v = (String) ve.getValue(ctx);
+            if (v != null) {
+                target.setShortDescription((String) ve.getValue(ctx));
+            }
+            
+        }
+    }
+
+    
+    private static final class ShortDescriptionPropertyHandler
+          extends StringFeatureDescriptorPropertyHandler {
+
+        public void apply(FaceletContext ctx, 
+                          String propName, 
+                          FeatureDescriptor target, 
+                          TagAttribute attribute) {
+
+            ValueExpression ve = attribute.getValueExpression(ctx, getEvalType());
+            String v = (String) ve.getValue(ctx);
+            if (v != null) {
+                target.setShortDescription((String) ve.getValue(ctx));
+            }
+
+        }
+
+    } // END ShortDescriptionPropertyHandler
+    
+
+    private static class StringValueExpressionPropertyHandler
+          extends TypedValueExpressionPropertyHandler {
+
+        public Class<?> getEvalType() {
+            return String.class;
+        }
+
+    } // END StringValueExpressionPropertyHandler
+
+
+    private static class ObjectValueExpressionPropertyHandler
+          extends TypedValueExpressionPropertyHandler {
+
+        @Override
+        public Class<?> getEvalType() {
+            return Object.class;
+        }
+
+    } // END ObjectValueExpressionPropertyHandler
+
+    /**
+     * This PropertyHandler will apply the default-value of a cc:attribute
+     * tag, taking an eventually provided type into account.
+     */
+    private static class DefaultPropertyHandler
+            implements PropertyHandler {
+
+        public void apply(FaceletContext ctx,
+                String propName,
+                FeatureDescriptor target,
+                TagAttribute attribute) {
+
+            // try to get the type from the 'type'-attribute and default to
+            // Object.class, if no type-attribute was set.
+            Class<?> type = Object.class;
+            Object obj = target.getValue("type");
+            if ((null != obj) && !(obj instanceof Class)) {
+                TagValueExpression typeVE = (TagValueExpression) obj;
+                Object value = typeVE.getValue(ctx);
+                if (value instanceof Class<?>) {
+                    type = (Class<?>) value;
+                } else if (value != null) {
+                    try {
+                        type = Util.loadClass(String.valueOf(value), this);
+                    } catch (ClassNotFoundException ex) {
+                        // Wrap the ClassNotFoundException into a
+                        // RuntimeException, so that it can be unwrapped in the
+                        // caller
+                        throw new IllegalArgumentException(ex);
+                    }
+                }
+            } else {
+                type = null != obj ? (Class) obj : Object.class;
+            }
+            target.setValue(propName, attribute.getValueExpression(ctx, type));
+        }
+        
+    }
+
+    private static class ComponentTypePropertyHandler
+          extends StringValueExpressionPropertyHandler {
+
+        @Override
+        public void apply(FaceletContext ctx,
+                          String propName,
+                          FeatureDescriptor target,
+                          TagAttribute attribute) {
+            super.apply(ctx,
+                        UIComponent.COMPOSITE_COMPONENT_TYPE_KEY,
+                        target,
+                        attribute);
+
+        }
+
+    } // END ComponentTypePropertyHandler
+    
+
+    private static final class PreferredPropertyHandler
+          extends BooleanFeatureDescriptorPropertyHandler {
+
+        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
+
+            ValueExpression ve = attribute
+                  .getValueExpression(ctx, getEvalType());
+            target.setPreferred((Boolean) ve.getValue(ctx));
+
+        }
+
+    } // END PreferredPropertyHandler
+
+    
+    private static final class HiddenPropertyHandler
+          extends BooleanFeatureDescriptorPropertyHandler {
+
+        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
+
+            ValueExpression ve = attribute
+                  .getValueExpression(ctx, getEvalType());
+            target.setHidden((Boolean) ve.getValue(ctx));
+
+        }
+
+    } // END HiddenPropertyHandler
+    
+
+    private static final class ExpertPropertyHandler
+          extends BooleanFeatureDescriptorPropertyHandler {
+
+        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
+
+            ValueExpression ve = attribute
+                  .getValueExpression(ctx, getEvalType());
+            target.setExpert((Boolean) ve.getValue(ctx));
+
+        }
+
+    } // END ExpertPropertyHandler
+
+    
+    private static final class DisplayNamePropertyHandler
+          extends StringFeatureDescriptorPropertyHandler {
+
+        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
+
+            ValueExpression ve = attribute
+                  .getValueExpression(ctx, getEvalType());
+            target.setDisplayName((String) ve.getValue(ctx));
+        }
+
+    } // END DisplayNamePropertyHandler
+
+    
+    private static class BooleanValueExpressionPropertyHandler
+          extends TypedValueExpressionPropertyHandler {
+
+        public Class<?> getEvalType() {
+            return Boolean.class;
+        }
+
+    } // END BooleanValueExpressionPropertyHandler
+    
+}
diff --git a/com/sun/faces/facelets/tag/composite/RelocateListener.java b/com/sun/faces/facelets/tag/composite/RelocateListener.java
new file mode 100644
index 0000000..e777fa6
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/RelocateListener.java
@@ -0,0 +1,117 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.context.FacesContext;
+import javax.faces.view.Location;
+import javax.faces.application.Resource;
+
+/**
+ * Base class for listeners used to relocate children and facets within the context
+ * of composite components.
+ */
+abstract class RelocateListener implements ComponentSystemEventListener, StateHolder {
+
+
+    // ------------------------------------------------ Methods from StateHolder
+
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        return null;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+    }
+
+    public boolean isTransient() {
+        return true;
+    }
+
+    public void setTransient(boolean newTransientValue) {
+        // no-op
+    }
+
+
+    // ----------------------------------------------------- Private Methods
+
+
+
+    /**
+     * @return the <code>Resource</code> instance that was used to create
+     *         the argument composite component.
+     */
+    protected Resource getBackingResource(UIComponent component) {
+
+        assert (UIComponent.isCompositeComponent(component));
+        Resource resource = (Resource) component.getAttributes()
+              .get(Resource.COMPONENT_RESOURCE_KEY);
+        if (resource == null) {
+            throw new IllegalStateException(
+                  "Backing resource information not found in composite component attribute map");
+        }
+        return resource;
+
+    }
+
+
+    /**
+     * @return <code>true</code> if the argument handler is from the same
+     *         template source as the argument <code>Resource</code> otherwise
+     *         <code>false</code>
+     */
+    protected boolean resourcesMatch(Resource compositeResource,
+                                     Location handlerLocation) {
+
+        String resName = compositeResource.getResourceName();
+        return (handlerLocation.getPath().contains(resName));
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/RenderFacetHandler.java b/com/sun/faces/facelets/tag/composite/RenderFacetHandler.java
new file mode 100644
index 0000000..0b09e4f
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/RenderFacetHandler.java
@@ -0,0 +1,136 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.*;
+import java.util.Map;
+
+
+public class RenderFacetHandler extends ComponentHandler {
+
+    // Supported attribute names
+    private static final String NAME_ATTRIBUTE = "name";
+    private static final String REQUIRED_ATTRIBUTE = "required";
+
+    // Attributes
+
+    // This attribute is required.
+    TagAttribute name;
+
+    // This attribute is not required.  If not defined, then assume the facet
+    // isn't necessary.
+    TagAttribute required;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RenderFacetHandler(ComponentConfig config) {
+        super(config);
+        name = this.getRequiredAttribute(NAME_ATTRIBUTE);
+        required = this.getAttribute(REQUIRED_ATTRIBUTE);
+    }
+
+
+    // ------------------------------------------------- Methods from TagHandler
+
+
+    @Override
+    public void onComponentPopulated(FaceletContext ctx, UIComponent c, UIComponent parent) {
+
+        UIComponent compositeParent =
+              UIComponent.getCurrentCompositeComponent(ctx.getFacesContext());
+        if (compositeParent == null) {
+            return;
+        }
+        boolean requiredValue =
+              ((this.required != null) && this.required.getBoolean(ctx));
+        String nameValue = this.name.getValue(ctx);
+
+        if (compositeParent.getFacetCount() == 0 && requiredValue) {
+            throwRequiredException(ctx, nameValue, compositeParent);
+        }
+
+        Map<String,UIComponent> facetMap = compositeParent.getFacets();
+        c.getAttributes().put(UIComponent.FACETS_KEY, nameValue);
+        if (requiredValue && !facetMap.containsKey(nameValue)) {
+            throwRequiredException(ctx, nameValue, compositeParent);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void throwRequiredException(FaceletContext ctx,
+                                        String name,
+                                        UIComponent compositeParent) {
+
+        throw new TagException(this.tag,
+                               "Unable to find facet named '"
+                               + name
+                               + "' in parent composite component with id '"
+                               + compositeParent .getClientId(ctx.getFacesContext())
+                               + '\'');
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/TypedPropertyHandler.java b/com/sun/faces/facelets/tag/composite/TypedPropertyHandler.java
new file mode 100644
index 0000000..e6c5a62
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/TypedPropertyHandler.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+
+interface TypedPropertyHandler extends PropertyHandler {
+
+    Class<?> getEvalType();
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetHandler.java b/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetHandler.java
new file mode 100644
index 0000000..cbad47a
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetHandler.java
@@ -0,0 +1,75 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.view.facelets.TagConfig;
+
+public class ValueHolderAttachedObjectTargetHandler extends AttachedObjectTargetHandler {
+    
+    public ValueHolderAttachedObjectTargetHandler(TagConfig config) {
+        super(config);
+    }
+    
+
+    @Override
+    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
+        return new ValueHolderAttachedObjectTargetImpl();
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetImpl.java b/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetImpl.java
new file mode 100644
index 0000000..0deff4b
--- /dev/null
+++ b/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetImpl.java
@@ -0,0 +1,65 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.composite;
+
+import javax.faces.view.ValueHolderAttachedObjectTarget;
+
+public class ValueHolderAttachedObjectTargetImpl extends AttachedObjectTargetImpl implements ValueHolderAttachedObjectTarget {
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/ActionSourceRule.java b/com/sun/faces/facelets/tag/jsf/ActionSourceRule.java
new file mode 100644
index 0000000..0f343af
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/ActionSourceRule.java
@@ -0,0 +1,187 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.el.LegacyMethodBinding;
+
+import javax.el.ExpressionFactory;
+import javax.el.MethodExpression;
+import javax.faces.component.ActionSource;
+import javax.faces.component.ActionSource2;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.MethodExpressionActionListener;
+import javax.faces.view.facelets.*;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ActionSourceRule.java 11952 2013-05-09 15:54:28Z mriem $
+ */
+final class ActionSourceRule extends MetaRule {
+
+    public final static Class[] ACTION_SIG = new Class[0];
+
+    public final static Class[] ACTION_LISTENER_SIG = new Class[] { ActionEvent.class };
+    public final static Class[] ACTION_LISTENER_ZEROARG_SIG = new Class[] { };
+
+    final static class ActionMapper extends Metadata {
+
+        private final TagAttribute attr;
+
+        public ActionMapper(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((ActionSource) instance).setAction(new LegacyMethodBinding(
+                    this.attr.getMethodExpression(ctx, Object.class,
+                            ActionSourceRule.ACTION_SIG)));
+        }
+    }
+
+    final static class ActionMapper2 extends Metadata {
+
+        private final TagAttribute attr;
+
+        public ActionMapper2(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((ActionSource2) instance).setActionExpression(this.attr
+                    .getMethodExpression(ctx, Object.class,
+                            ActionSourceRule.ACTION_SIG));
+        }
+
+    }
+
+    final static class ActionListenerMapper extends Metadata {
+
+        private final TagAttribute attr;
+
+        public ActionListenerMapper(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((ActionSource) instance)
+                    .setActionListener(new LegacyMethodBinding(this.attr
+                            .getMethodExpression(ctx, null,
+                                    ActionSourceRule.ACTION_LISTENER_SIG)));
+        }
+
+    }
+
+    final static class ActionListenerMapper2 extends Metadata {
+
+        private final TagAttribute attr;
+
+        public ActionListenerMapper2(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            
+            ExpressionFactory expressionFactory = ctx.getExpressionFactory();
+
+            MethodExpression methodExpressionOneArg = attr.getMethodExpression(
+                ctx, null, ActionSourceRule.ACTION_LISTENER_SIG);
+            
+            MethodExpression methodExpressionZeroArg = 
+                    expressionFactory.createMethodExpression(
+                        ctx, methodExpressionOneArg.getExpressionString(), 
+                        Void.class, ActionSourceRule.ACTION_LISTENER_ZEROARG_SIG);            
+            
+            ((ActionSource2) instance)
+                    .addActionListener(new MethodExpressionActionListener(
+                            methodExpressionOneArg, methodExpressionZeroArg));
+
+        }
+
+    }
+
+    public final static ActionSourceRule Instance = new ActionSourceRule();
+
+    public ActionSourceRule() {
+        super();
+    }
+
+    public Metadata applyRule(String name, TagAttribute attribute,
+            MetadataTarget meta) {
+        if (meta.isTargetInstanceOf(ActionSource.class)) {
+
+            if ("action".equals(name)) {
+                if (meta.isTargetInstanceOf(ActionSource2.class)) {
+                    return new ActionMapper2(attribute);
+                } else {
+                    return new ActionMapper(attribute);
+                }
+            }
+
+            if ("actionListener".equals(name)) {
+                if (meta.isTargetInstanceOf(ActionSource2.class)) {
+                    return new ActionListenerMapper2(attribute);
+                } else {
+                    return new ActionListenerMapper(attribute);
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/AttachedBehaviors.java b/com/sun/faces/facelets/tag/jsf/AttachedBehaviors.java
new file mode 100644
index 0000000..633b908
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/AttachedBehaviors.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.BehaviorHandler;
+import javax.faces.view.facelets.TagHandler;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * <p class="changed_added_2_0">This class holds collection of {@link BehaviorHandler} instances, attached to the composite component.
+ *  Descendant components from that composite uses that collection to substitute actual instance</p>
+ * @author asmirnov at exadel.com
+ *
+ */
+ at SuppressWarnings("serial")
+public class AttachedBehaviors implements Serializable {
+	
+	private Map<String, TagHandler> behaviors = new HashMap<String, TagHandler>();
+	public static final String COMPOSITE_BEHAVIORS_KEY = "javax.faces.view.ClientBehaviors";
+	
+	public void add(String eventName, TagHandler owner){
+		behaviors.put(eventName, owner);
+	}
+
+	public TagHandler get(String value) {
+		return behaviors.get(value);		
+	}
+
+	public static AttachedBehaviors getAttachedBehaviorsHandler(UIComponent component) {
+		Map<String, Object> attributes = component.getAttributes();
+		AttachedBehaviors handler = (AttachedBehaviors) attributes.get(AttachedBehaviors.COMPOSITE_BEHAVIORS_KEY);
+		if(null == handler){
+			handler = new AttachedBehaviors();
+			attributes.put(AttachedBehaviors.COMPOSITE_BEHAVIORS_KEY, handler);
+		}
+		return handler;
+	}
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/BehaviorTagHandlerDelegateImpl.java b/com/sun/faces/facelets/tag/jsf/BehaviorTagHandlerDelegateImpl.java
new file mode 100644
index 0000000..f2fd4bf
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/BehaviorTagHandlerDelegateImpl.java
@@ -0,0 +1,200 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.tag.MetaRulesetImpl;
+import com.sun.faces.util.Util;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.view.AttachedObjectHandler;
+import javax.faces.view.AttachedObjectTarget;
+import javax.faces.view.BehaviorHolderAttachedObjectTarget;
+import javax.faces.view.facelets.*;
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ *
+ * @author edburns
+ */
+class BehaviorTagHandlerDelegateImpl extends TagHandlerDelegate implements AttachedObjectHandler {
+    
+    private BehaviorHandler owner;
+
+    public BehaviorTagHandlerDelegateImpl(BehaviorHandler owner) {
+        this.owner = owner;
+    }
+    
+    @Override
+    public void apply(FaceletContext ctx, UIComponent parent)
+        throws IOException {
+        // only process if it's been created
+        if (parent == null || !(parent.getParent() == null)) {
+            return;
+        }
+        ComponentSupport.copyPassthroughAttributes(ctx, parent, owner.getTag());
+        
+        if (UIComponent.isCompositeComponent(parent)) {
+            // Check composite component event name:
+            BeanInfo componentBeanInfo = (BeanInfo) parent.getAttributes().get(
+                  UIComponent.BEANINFO_KEY);
+            if (null == componentBeanInfo) {
+                throw new TagException(
+                      owner.getTag(),
+                      "Error: enclosing composite component does not have BeanInfo attribute");
+            }
+            BeanDescriptor componentDescriptor = componentBeanInfo
+                  .getBeanDescriptor();
+            if (null == componentDescriptor) {
+                throw new TagException(
+                      owner.getTag(),
+                      "Error: enclosing composite component BeanInfo does not have BeanDescriptor");
+            }
+            List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
+                  componentDescriptor
+                        .getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
+            if (null == targetList) {
+                throw new TagException(
+                      owner.getTag(),
+                      "Error: enclosing composite component does not support behavior events");
+            }
+            String eventName = owner.getEventName();
+            boolean supportedEvent = false;
+            for (AttachedObjectTarget target : targetList) {
+                if (target instanceof BehaviorHolderAttachedObjectTarget) {
+                    BehaviorHolderAttachedObjectTarget behaviorTarget = (BehaviorHolderAttachedObjectTarget) target;
+                    if ((null != eventName && eventName.equals(behaviorTarget.getName()))
+                        || (null == eventName && behaviorTarget.isDefaultEvent())) {
+                        supportedEvent = true;
+                        break;
+                    }
+                }
+            }
+            if (supportedEvent) {
+                CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
+                      .add(owner);
+            } else {
+                throw new TagException(
+                      owner.getTag(),
+                      "Error: enclosing composite component does not support event "
+                      + eventName);
+            }
+
+        } else if (parent instanceof ClientBehaviorHolder) {
+            owner.applyAttachedObject(ctx.getFacesContext(), parent);
+        }  else {
+            throw new TagException(owner.getTag(), "Parent not an instance of ClientBehaviorHolder: " + parent);
+        }
+
+    }
+    
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+        // cast to the ClientBehaviorHolder.
+        ClientBehaviorHolder behaviorHolder = (ClientBehaviorHolder) parent;
+        ValueExpression bindingExpr=null;
+        Behavior behavior=null;
+        if (null != owner.getBinding()){
+            bindingExpr = owner.getBinding().getValueExpression(ctx, Behavior.class);
+            behavior = (Behavior) bindingExpr.getValue(ctx);
+        }
+        if (null == behavior){
+            if (null != owner.getBehaviorId()){
+                behavior = ctx.getFacesContext().getApplication().createBehavior(owner.getBehaviorId());
+                if (null == behavior){
+                    throw new TagException(owner.getTag(),
+                            "No Faces behavior defined for Id "+owner.getBehaviorId());
+                }
+                if (null != bindingExpr){
+                    bindingExpr.setValue(ctx, behavior);
+                }
+            } else {
+                throw new TagException(owner.getTag(),"No behaviorId defined");
+            }
+        }
+        owner.setAttributes(ctx, behavior);
+
+        if (behavior instanceof ClientBehavior) {
+            behaviorHolder.addClientBehavior(getEventName(behaviorHolder), (ClientBehavior)behavior);
+        }
+    }
+
+    
+	
+    public MetaRuleset createMetaRuleset(Class type) {
+        Util.notNull("type", type);
+        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
+        m = m.ignore("event");
+        return m.ignore("binding").ignore("for");
+    }
+    
+    public String getFor() {
+        String result = null;
+        TagAttribute attr = owner.getTagAttribute("for");
+        
+        if (null != attr) {
+            result = attr.getValue();
+        }
+        return result;
+        
+    }
+    
+    private String getEventName(ClientBehaviorHolder holder){
+        String eventName;
+        if (null != owner.getEvent()){
+            eventName = owner.getEvent().getValue();
+        } else {
+            eventName = holder.getDefaultEventName();
+        }
+        if (null == eventName){
+            throw new TagException(owner.getTag(), "The event name is not defined");
+        }
+        return eventName;
+    }
+    
+}
diff --git a/com/sun/faces/facelets/tag/jsf/ComponentRule.java b/com/sun/faces/facelets/tag/jsf/ComponentRule.java
new file mode 100644
index 0000000..f03b138
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/ComponentRule.java
@@ -0,0 +1,172 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.el.LegacyValueBinding;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ComponentRule.java 10664 2012-09-20 05:53:15Z edburns $
+ */
+final class ComponentRule extends MetaRule {
+
+    final static class LiteralAttributeMetadata extends Metadata {
+
+        private final String name;
+        private final String value;
+        
+        public LiteralAttributeMetadata(String name, String value) {
+            this.value = value;
+            this.name = name;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((UIComponent) instance).getAttributes().put(this.name, this.value);
+        }
+    }
+    
+    final static class ValueExpressionMetadata extends Metadata {
+
+        private final String name;
+
+        private final TagAttribute attr;
+
+        private final Class type;
+
+        public ValueExpressionMetadata(String name, Class type,
+                TagAttribute attr) {
+            this.name = name;
+            this.attr = attr;
+            this.type = type;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((UIComponent) instance).setValueExpression(this.name, this.attr
+                    .getValueExpression(ctx, this.type));
+        }
+
+    }
+
+    final static class ValueBindingMetadata extends Metadata {
+
+        private final String name;
+
+        private final TagAttribute attr;
+
+        private final Class type;
+
+        public ValueBindingMetadata(String name, Class type, TagAttribute attr) {
+            this.name = name;
+            this.attr = attr;
+            this.type = type;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((UIComponent) instance).setValueBinding(this.name,
+                    new LegacyValueBinding(this.attr.getValueExpression(ctx,
+                            this.type)));
+        }
+
+    }
+
+    private final static Logger log = FacesLogger.FACELETS_COMPONENT.getLogger();
+
+    public final static ComponentRule Instance = new ComponentRule();
+
+    public ComponentRule() {
+        super();
+    }
+
+    public Metadata applyRule(String name, TagAttribute attribute,
+            MetadataTarget meta) {
+        if (meta.isTargetInstanceOf(UIComponent.class)) {
+
+            // if component and dynamic, then must set expression
+            if (!attribute.isLiteral()) {
+                Class type = meta.getPropertyType(name);
+                if (type == null) {
+                    type = Object.class;
+                }
+                return new ValueExpressionMetadata(name, type, attribute);
+            } else if (meta.getWriteMethod(name) == null) {
+
+                // this was an attribute literal, but not property
+                warnAttr(attribute, meta.getTargetClass(), name);
+
+                return new LiteralAttributeMetadata(name, attribute.getValue());
+            }
+        }
+        return null;
+    }
+
+    private static void warnAttr(TagAttribute attr, Class type, String n) {
+        if (log.isLoggable(Level.FINER)) {
+            log.finer(attr + " Property '" + n + "' is not on type: "
+                    + type.getName());
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/ComponentSupport.java b/com/sun/faces/facelets/tag/jsf/ComponentSupport.java
new file mode 100644
index 0000000..ccc4131
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/ComponentSupport.java
@@ -0,0 +1,577 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.context.StateContext;
+import com.sun.faces.facelets.tag.jsf.core.FacetHandler;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving;
+import com.sun.faces.util.Util;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIPanel;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+import javax.faces.view.facelets.Tag;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import javax.faces.event.PhaseId;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ComponentSupport.java 13340 2014-06-06 04:21:20Z edburns $
+ */
+public final class ComponentSupport {
+
+    private final static String MARK_DELETED = "com.sun.faces.facelets.MARK_DELETED";
+    public final static String MARK_CREATED = "com.sun.faces.facelets.MARK_ID";
+
+    // Expando boolean attribute used to identify parent components that have had
+    // a dynamic child addition or removal.
+    public final static String MARK_CHILDREN_MODIFIED = "com.sun.faces.facelets.MARK_CHILDREN_MODIFIED";
+    
+    // Expando Collection<String> attribute used to identify tagIds of child components that
+    // have been removed from a parent component.
+    public final static String REMOVED_CHILDREN = "com.sun.faces.facelets.REMOVED_CHILDREN";
+
+    private final static String IMPLICIT_PANEL = "com.sun.faces.facelets.IMPLICIT_PANEL";
+
+    /**
+     * Key to a FacesContext scoped Map where the keys are UIComponent instances and the
+     * values are Tag instances.
+     */
+    public static final String COMPONENT_TO_TAG_MAP_NAME = "com.sun.faces.facelets.COMPONENT_TO_LOCATION_MAP";
+    
+    /**
+     * Used in conjunction with markForDeletion where any UIComponent marked
+     * will be removed.
+     * 
+     * @param c
+     *            UIComponent to finalize
+     */
+    public static void finalizeForDeletion(UIComponent c) {
+        // remove any existing marks of deletion
+        c.getAttributes().remove(MARK_DELETED);
+
+        // finally remove any children marked as deleted
+        int sz = c.getChildCount();
+        if (sz > 0) {
+            UIComponent cc = null;
+            List cl = c.getChildren();
+            while (--sz >= 0) {
+                cc = (UIComponent) cl.get(sz);
+                if (cc.getAttributes().containsKey(MARK_DELETED)) {
+                    cl.remove(sz);
+                }
+            }
+        }
+
+        Map<String, UIComponent> facets = c.getFacets();
+        // remove any facets marked as deleted
+        if (facets.size() > 0) {
+            Set<Entry<String, UIComponent>> col = facets.entrySet();
+            UIComponent fc;
+            Entry<String, UIComponent> curEntry;
+            for (Iterator<Entry<String, UIComponent>> itr = col.iterator(); itr.hasNext();) {
+                curEntry = itr.next();
+                fc = curEntry.getValue();
+                Map<String, Object> attrs = fc.getAttributes();
+                if (attrs.containsKey(MARK_DELETED)) {
+                    itr.remove();
+                } else if (attrs.containsKey(IMPLICIT_PANEL) &&
+                           !curEntry.getKey().equals(UIViewRoot.METADATA_FACET_NAME)) {
+                    List<UIComponent> implicitPanelChildren = fc.getChildren();
+                    UIComponent innerChild;
+                    for (Iterator<UIComponent> innerItr = implicitPanelChildren.iterator();
+                         innerItr.hasNext();) {
+                        innerChild = innerItr.next();
+                        if (innerChild.getAttributes().containsKey(MARK_DELETED)) {
+                            innerItr.remove();
+                        }
+
+                    }
+                }
+            }
+        }
+    }
+
+    public static Tag setTagForComponent(FacesContext context, UIComponent c, Tag t) {
+        Map<Object, Object> contextMap = context.getAttributes();
+        Map<Integer, Tag> componentToTagMap;
+        componentToTagMap = (Map<Integer, Tag>)
+                contextMap.get(COMPONENT_TO_TAG_MAP_NAME);
+        if (null == componentToTagMap) {
+            componentToTagMap = new HashMap<Integer, Tag>();
+            contextMap.put(COMPONENT_TO_TAG_MAP_NAME, componentToTagMap);
+        }
+        return componentToTagMap.put((Integer) System.identityHashCode(c), t);
+    }
+
+    public static Tag getTagForComponent(FacesContext context, UIComponent c) {
+        Tag result = null;
+        Map<Object, Object> contextMap = context.getAttributes();
+        Map<Integer, Tag> componentToTagMap;
+        componentToTagMap = (Map<Integer, Tag>)
+                contextMap.get(COMPONENT_TO_TAG_MAP_NAME);
+        if (null != componentToTagMap) {
+            result = componentToTagMap.get((Integer) System.identityHashCode(c));
+        }
+
+        return result;
+    }
+    
+
+    /**
+     * A lighter-weight version of UIComponent's findChild.
+     * 
+     * @param parent
+     *            parent to start searching from
+     * @param id
+     *            to match to
+     * @return UIComponent found or null
+     */
+    public static UIComponent findChild(UIComponent parent, String id) {
+        int sz = parent.getChildCount();
+        if (sz > 0) {
+            UIComponent c = null;
+            List cl = parent.getChildren();
+            while (--sz >= 0) {
+                c = (UIComponent) cl.get(sz);
+                if (id.equals(c.getId())) {
+                    return c;
+                }
+            }
+        }
+        return null;
+    }
+    
+    // Obvious performance optimization.  First, assume this method
+    // is only called from UIInstructionHandler.apply().  With that assumption
+    // in place a few optimizations can be had on the cheap.
+    
+    // If this method is called on an initial page 
+    // render it will always return null, so we can just return 
+    // null in that case without any iteration.  
+    
+    // If this method is called during RestoreView, it will always return null
+    // so we can just return null in that case without any iteration.  
+    
+    // If PartialStateSaving is false, the UIInstruction components will
+    // never be in the tree at this point, so we can return null and skip iterating.
+    
+    public static UIComponent findUIInstructionChildByTagId(FacesContext context, UIComponent parent, String id) {
+        UIComponent result = null;
+        if (!context.isPostback() || context.getCurrentPhaseId().equals(PhaseId.RESTORE_VIEW)) {
+            return null;
+        }
+        Map<Object, Object> attrs = context.getAttributes();
+        if (attrs.containsKey(PartialStateSaving)) {
+            if ((Boolean)attrs.get(PartialStateSaving)) {
+                result = findChildByTagId(context, parent, id);
+            }
+        }
+
+        
+        return result;
+    }
+    
+    /**
+     * By TagId, find Child
+     * 
+     * @param parent the parent UI component
+     * @param id the id
+     * @return the UI component
+     */
+    public static UIComponent findChildByTagId(FacesContext context, UIComponent parent, String id) {
+        if (!context.isPostback() || context.getCurrentPhaseId().equals(PhaseId.RESTORE_VIEW)) {
+            return null;
+        }
+        UIComponent c = null;
+        UIViewRoot root = context.getViewRoot();
+        boolean hasDynamicComponents = (null != root && 
+                root.getAttributes().containsKey(RIConstants.TREE_HAS_DYNAMIC_COMPONENTS));
+        String cid = null;
+        List<UIComponent> components;
+        String facetName = getFacetName(parent);
+        if (null != facetName) {
+            c = parent.getFacet(facetName);
+            // We will have a facet name, but no corresponding facet in the
+            // case of facets with composite components.  In this case,
+            // we must do the brute force search.
+            if (null != c) {
+                cid = (String) c.getAttributes().get(MARK_CREATED);
+                if (id.equals(cid)) {
+                    return c;
+                }
+            } 
+        }
+        if (0 < parent.getFacetCount()) {
+            components = new ArrayList<UIComponent>();
+            components.addAll(parent.getFacets().values());
+            components.addAll(parent.getChildren());
+        } else {
+            components = parent.getChildren();
+        }
+
+        int len = components.size();
+        for (int i = 0; i < len; i++) {
+            c = components.get(i);
+            cid = (String) c.getAttributes().get(MARK_CREATED);
+            if (id.equals(cid)) {
+                return c;
+            }
+            if (c instanceof UIPanel && c.getAttributes().containsKey(IMPLICIT_PANEL)) {
+                for (UIComponent c2 : c.getChildren()) {
+                    cid = (String) c2.getAttributes().get(MARK_CREATED);
+                    if (id.equals(cid)) {
+                        return c2;
+                    }
+                }
+            }
+            if (hasDynamicComponents) {
+                /*
+                 * Make sure we look for the child recursively it might have moved
+                 * into a different parent in the parent hierarchy. Note currently
+                 * we are only looking down the tree. Maybe it would be better
+                 * to use the VisitTree API instead.
+                 */
+                UIComponent foundChild = findChildByTagId(context, c, id);
+                if (foundChild != null) {
+                    return foundChild;
+                }
+            }
+        }
+
+        return null;
+    }
+    
+    /**
+     * According to JSF 1.2 tag specs, this helper method will use the
+     * TagAttribute passed in determining the Locale intended.
+     * 
+     * @param ctx
+     *            FaceletContext to evaluate from
+     * @param attr
+     *            TagAttribute representing a Locale
+     * @return Locale found
+     * @throws TagAttributeException
+     *             if the Locale cannot be determined
+     */
+    public static Locale getLocale(FaceletContext ctx, TagAttribute attr)
+            throws TagAttributeException {
+        Object obj = attr.getObject(ctx);
+        if (obj instanceof Locale) {
+            return (Locale) obj;
+        }
+        if (obj instanceof String) {
+            String s = (String) obj;
+            try {
+                return Util.getLocaleFromString(s);
+            }
+            catch(IllegalArgumentException iae) {
+                throw new TagAttributeException(attr, "Invalid Locale Specified: " + s);
+            }
+        } else {
+            throw new TagAttributeException(attr,
+                    "Attribute did not evaluate to a String or Locale: " + obj);
+        }
+    }
+
+    /**
+     * Tries to walk up the parent to find the UIViewRoot, if not found, then go
+     * to FaceletContext's FacesContext for the view root.
+     * 
+     * @param ctx
+     *            FaceletContext
+     * @param parent
+     *            UIComponent to search from
+     * @return UIViewRoot instance for this evaluation
+     */
+    public static UIViewRoot getViewRoot(FaceletContext ctx,
+            UIComponent parent) {
+        UIComponent c = parent;
+        do {
+            if (c instanceof UIViewRoot) {
+                return (UIViewRoot) c;
+            } else {
+                c = c.getParent();
+            }
+        } while (c != null);
+        return ctx.getFacesContext().getViewRoot();
+    }
+
+    /**
+     * Marks all direct children and Facets with an attribute for deletion.
+     * 
+     * @see #finalizeForDeletion(UIComponent)
+     * @param c
+     *            UIComponent to mark
+     */
+    public static void markForDeletion(UIComponent c) {
+        // flag this component as deleted
+        c.getAttributes().put(MARK_DELETED, Boolean.TRUE);
+
+        // mark all children to be deleted
+        int sz = c.getChildCount();
+        if (sz > 0) {
+            UIComponent cc = null;
+            List cl = c.getChildren();
+            while (--sz >= 0) {
+                cc = (UIComponent) cl.get(sz);
+                if (cc.getAttributes().containsKey(MARK_CREATED)) {
+                    cc.getAttributes().put(MARK_DELETED, Boolean.TRUE);
+                }
+            }
+        }
+
+        // mark all facets to be deleted
+        if (c.getFacets().size() > 0) {
+            Collection col = c.getFacets().values();
+            UIComponent fc;
+            for (Iterator itr = col.iterator(); itr.hasNext();) {
+                fc = (UIComponent) itr.next();
+                Map<String, Object> attrs = fc.getAttributes();
+                if (attrs.containsKey(MARK_CREATED)) {
+                    attrs.put(MARK_DELETED, Boolean.TRUE);
+                } else if (attrs.containsKey(IMPLICIT_PANEL)) {
+                    List<UIComponent> implicitPanelChildren = fc.getChildren();
+                    Map<String, Object> innerAttrs = null;
+                    for (UIComponent cur : implicitPanelChildren) {
+                        innerAttrs = cur.getAttributes();
+                        if (innerAttrs.containsKey(MARK_CREATED)) {
+                            innerAttrs.put(MARK_DELETED, Boolean.TRUE);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    
+    public static void encodeRecursive(FacesContext context,
+            UIComponent viewToRender) throws IOException, FacesException {
+        if (viewToRender.isRendered()) {
+            viewToRender.encodeBegin(context);
+            if (viewToRender.getRendersChildren()) {
+                viewToRender.encodeChildren(context);
+            } else if (viewToRender.getChildCount() > 0) {
+                Iterator kids = viewToRender.getChildren().iterator();
+                while (kids.hasNext()) {
+                    UIComponent kid = (UIComponent) kids.next();
+                    encodeRecursive(context, kid);
+                }
+            }
+            viewToRender.encodeEnd(context);
+        }
+    }
+    
+    public static void removeTransient(UIComponent c) {
+        UIComponent d, e;
+        if (c.getChildCount() > 0) {
+            for (Iterator itr = c.getChildren().iterator(); itr.hasNext();) {
+                d = (UIComponent) itr.next();
+                if (d.getFacets().size() > 0) {
+                    for (Iterator jtr = d.getFacets().values().iterator(); jtr
+                            .hasNext();) {
+                        e = (UIComponent) jtr.next();
+                        if (e.isTransient()) {
+                            jtr.remove();
+                        } else {
+                            removeTransient(e);
+                        }
+                    }
+                }
+                if (d.isTransient()) {
+                    itr.remove();
+                } else {
+                    removeTransient(d);
+                }
+            }
+        }
+        if (c.getFacets().size() > 0) {
+            for (Iterator itr = c.getFacets().values().iterator(); itr
+                    .hasNext();) {
+                d = (UIComponent) itr.next();
+                if (d.isTransient()) {
+                    itr.remove();
+                } else {
+                    removeTransient(d);
+                }
+            }
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0">Add the child component to the parent. If the parent is a facet,
+     * check to see whether the facet is already defined. If it is, wrap the existing component
+     * in a panel group, if it's not already, then add the child to the panel group. If the facet
+     * does not yet exist, make the child the facet.</p>
+     */
+    public static void addComponent(FaceletContext ctx, UIComponent parent, UIComponent child) {
+
+        String facetName = getFacetName(parent);
+        if (facetName == null) {
+            if (child.getAttributes().containsKey(RIConstants.DYNAMIC_COMPONENT)) {
+                int childIndex = (Integer) child.getAttributes().get(RIConstants.DYNAMIC_COMPONENT);
+                if (childIndex >= parent.getChildCount() || childIndex == -1) {
+                    parent.getChildren().add(child);
+                } else {
+                    parent.getChildren().add(childIndex, child);
+                }                
+            } else {
+                parent.getChildren().add(child);
+            }
+        } else {
+            UIComponent existing = parent.getFacets().get(facetName);
+            if (existing != null && existing != child) {
+                if (existing.getAttributes().get(ComponentSupport.IMPLICIT_PANEL) == null) {
+                    // move existing component under a panel group
+                    UIComponent panelGroup = ctx.getFacesContext().getApplication().createComponent(UIPanel.COMPONENT_TYPE);
+                    parent.getFacets().put(facetName, panelGroup);
+                    Map<String, Object> attrs = panelGroup.getAttributes();
+                    attrs.put(ComponentSupport.IMPLICIT_PANEL, true);
+                    panelGroup.getChildren().add(existing);
+                    existing = panelGroup;
+                }
+                if (existing.getAttributes().get(ComponentSupport.IMPLICIT_PANEL) != null) {
+                    // we have a panel group, so add the new component to it
+                    existing.getChildren().add(child);
+                } else {
+                    parent.getFacets().put(facetName, child);
+                }
+            } else {
+                parent.getFacets().put(facetName, child);
+            }
+        }
+    }
+
+    public static String getFacetName(UIComponent parent) {
+        return (String) parent.getAttributes().get(FacetHandler.KEY);
+    }
+
+    public static boolean suppressViewModificationEvents(FacesContext ctx) {
+
+        // NO UIViewRoot means this was called during restore view -
+        // no need to suppress events at that time
+        UIViewRoot root = ctx.getViewRoot();
+        if (root != null) {
+            String viewId = root.getViewId();
+            if (viewId != null) {
+                StateContext stateCtx = StateContext.getStateContext(ctx);
+                return stateCtx.isPartialStateSaving(ctx, viewId);
+            }
+        }
+        return false;
+
+    }
+    
+    public static void copyPassthroughAttributes(FaceletContext ctx, UIComponent c, Tag t) {
+        
+        if (null == c || null == t) {
+            return;
+        }
+        
+        TagAttribute[] passthroughAttrs = t.getAttributes().getAll(PassThroughAttributeLibrary.Namespace);
+        if (null != passthroughAttrs && 0 < passthroughAttrs.length) {
+            Map<String, Object> componentPassthroughAttrs = c.getPassThroughAttributes(true);
+            Object attrValue = null;
+            for (TagAttribute cur : passthroughAttrs) {
+                attrValue = (cur.isLiteral()) ? cur.getValue(ctx) : cur.getValueExpression(ctx, Object.class);
+                componentPassthroughAttrs.put(cur.getLocalName(), attrValue);
+            }
+        }
+    }
+
+    // --------------------------------------------------------- private classes
+
+
+//    private static UIViewRoot getViewRoot(FacesContext ctx, UIComponent parent) {
+//
+//        if (parent instanceof UIViewRoot) {
+//            return (UIViewRoot) parent;
+//        }
+//        UIViewRoot root = ctx.getViewRoot();
+//        if (root != null) {
+//            return root;
+//        }
+//        UIComponent c = parent.getParent();
+//        while (c != null) {
+//            if (c instanceof UIViewRoot) {
+//                root = (UIViewRoot) c;
+//                break;
+//            } else {
+//                c = c.getParent();
+//            }
+//        }
+//
+//        return root;
+//
+//    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/ComponentTagHandlerDelegateImpl.java b/com/sun/faces/facelets/tag/jsf/ComponentTagHandlerDelegateImpl.java
new file mode 100644
index 0000000..1a868c8
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/ComponentTagHandlerDelegateImpl.java
@@ -0,0 +1,647 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.component.behavior.AjaxBehaviors;
+import com.sun.faces.component.validator.ComponentValidators;
+import com.sun.faces.component.CompositeComponentStackManager;
+import com.sun.faces.context.StateContext;
+import com.sun.faces.facelets.impl.IdMapper;
+import com.sun.faces.facelets.tag.MetaRulesetImpl;
+import com.sun.faces.facelets.tag.jsf.core.FacetHandler;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import javax.el.ValueExpression;
+import javax.faces.application.Application;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.*;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagException;
+import javax.faces.view.facelets.TagHandlerDelegate;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static com.sun.faces.RIConstants.DYNAMIC_COMPONENT;
+import static com.sun.faces.component.CompositeComponentStackManager.StackType.TreeCreation;
+import java.util.Collection;
+
+public class ComponentTagHandlerDelegateImpl extends TagHandlerDelegate {
+    
+    private ComponentHandler owner;
+    
+    private final static Logger log = FacesLogger.FACELETS_COMPONENT.getLogger();
+    
+    private final TagAttribute binding;
+
+    protected String componentType;
+
+    protected final TagAttribute id;
+
+    private final String rendererType;
+    
+    private CreateComponentDelegate createCompositeComponentDelegate;
+
+
+    public ComponentTagHandlerDelegateImpl(ComponentHandler owner) {
+        this.owner = owner;
+        ComponentConfig config = owner.getComponentConfig();
+        this.componentType = config.getComponentType();
+        this.rendererType = config.getRendererType();
+        this.id = owner.getTagAttribute("id");
+        this.binding = owner.getTagAttribute("binding");
+        
+    }
+
+    /**
+     * Method handles UIComponent tree creation in accordance with the JSF 1.2
+     * spec.
+     * <ol>
+     * <li>First determines this UIComponent's id by calling
+     * {@link javax.faces.view.facelets.ComponentHandler#getTagId()}.</li>
+     * <li>Search the parent for an existing UIComponent of the id we just
+     * grabbed</li>
+     * <li>If found, {@link com.sun.faces.facelets.tag.jsf.ComponentSupport#markForDeletion(javax.faces.component.UIComponent) mark}
+     * its children for deletion.</li>
+     * <li>If <i>not</i> found, call
+     * {@link #createComponent(FaceletContext) createComponent}.
+     * <ol>
+     * <li>Only here do we apply
+     * {@link com.sun.faces.facelets.tag.MetaTagHandlerImpl#setAttributes(FaceletContext, Object)}</li>
+     * <li>Set the UIComponent's id</li>
+     * <li>Set the RendererType of this instance</li>
+     * </ol>
+     * </li>
+     * <li>Now apply the nextHandler, passing the UIComponent we've
+     * created/found.</li>
+     * <li>Now add the UIComponent to the passed parent</li>
+     * <li>Lastly, if the UIComponent already existed (found), then
+     * {@link ComponentSupport#finalizeForDeletion(UIComponent) finalize} for deletion.</li>
+     * </ol>
+     *
+     * @throws TagException
+     *             if the UIComponent parent is null
+     */
+    
+    @Override
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        FacesContext context = ctx.getFacesContext();
+
+        // make sure our parent is not null
+        if (parent == null) {
+            throw new TagException(owner.getTag(), "Parent UIComponent was null");
+        }
+
+        // our id
+        String id = ctx.generateUniqueId(owner.getTagId());
+
+        // grab our component
+        UIComponent c = findChild(ctx, parent, id);
+        if (null == c &&
+            context.isPostback() &&
+            UIComponent.isCompositeComponent(parent) &&
+            parent.getAttributes().get(id) != null) {
+            c = findReparentedComponent(ctx, parent, id);
+        }
+        else {
+            /**
+             * If we found a child that is dynamic, the actual parent might 
+             * have changed, so we need to remove it from the actual parent.
+             * The reapplyDynamicActions will then replay the actions and
+             * will make sure it ends up in the correct order.
+             */
+            if (c != null && c.getParent() != parent && 
+                c.getAttributes().containsKey(DYNAMIC_COMPONENT)) {
+                c.getParent().getChildren().remove(c);
+            }
+        }
+        
+        boolean componentFound = false;
+        boolean parentModified = false;
+        if (c != null) {
+            componentFound = true;
+            doExistingComponentActions(ctx, id, c);
+        } else if (suppressRemovedChild(parent, id)) {
+            return;
+        } else {
+            //hook method
+            c = owner.createComponent(ctx);
+            if (c == null) {
+                c = this.createComponent(ctx);
+            }
+            
+            doNewComponentActions(ctx, id, c);
+            assignUniqueId(ctx, parent, id, c);
+
+            // hook method
+            owner.onComponentCreated(ctx, c, parent);
+        }
+
+       CompositeComponentStackManager ccStackManager =
+              CompositeComponentStackManager.getManager(context);
+        boolean compcompPushed = pushComponentToEL(ctx, c, ccStackManager);
+
+        if (ProjectStage.Development == context.getApplication().getProjectStage()) {
+            ComponentSupport.setTagForComponent(context, c, this.owner.getTag());
+        }
+
+        // If this this a naming container, stop generating unique Ids
+        // for the repeated tags
+        boolean isNaming = false;
+        if (c instanceof NamingContainer) {
+            isNaming = true;
+            IterationIdManager.startNamingContainer(ctx);
+        }
+        try {
+            // first allow c to get populated
+            owner.applyNextHandler(ctx, c);
+        } finally {
+            if (isNaming)
+            {
+                IterationIdManager.stopNamingContainer(ctx);
+            }
+        }
+
+        // finish cleaning up orphaned children
+        if (componentFound) {
+               parentModified = isParentChildrenModified(parent);
+               doOrphanedChildCleanup(ctx, parent, c, parentModified);
+            }
+
+        this.privateOnComponentPopulated(ctx, c);
+        owner.onComponentPopulated(ctx, c, parent);
+        // add to the tree afterwards
+        // this allows children to determine if it's
+        // been part of the tree or not yet
+        addComponentToView(ctx, parent, c, componentFound, parentModified);
+        ComponentSupport.copyPassthroughAttributes(ctx, c, owner.getTag());
+        adjustIndexOfDynamicChildren(context, c);
+        popComponentFromEL(ctx, c, ccStackManager, compcompPushed);
+    }
+
+    // Tests whether the component associated with the specified tagId was
+    // a child of the parent component that has been dynamically removed.  If
+    // so, we want to suppress re-creation of this child
+    private boolean suppressRemovedChild(UIComponent parent, String childTagId) {
+        Collection<String> removedChildren = (Collection<String>)
+                parent.getAttributes().get(ComponentSupport.REMOVED_CHILDREN);
+        return ((removedChildren != null) && removedChildren.contains(childTagId));
+    }
+    
+    // Tests whether the specified parent component has had any dynamic 
+    // child additions or removals.  If so, we avoid re-ordering its children
+    // during tag re-execution, since we want to preserve the dynamically
+    // specified order.
+    private boolean isParentChildrenModified(UIComponent parent) {
+        return (parent.getAttributes().get(ComponentSupport.MARK_CHILDREN_MODIFIED) != null);    
+    }
+ 
+    private void adjustIndexOfDynamicChildren(FacesContext context, 
+            UIComponent parent) {
+        StateContext stateContext = StateContext.getStateContext(context);
+        if (!stateContext.hasOneOrMoreDynamicChild(parent)) {
+            return;
+        }
+
+        List<UIComponent> children = parent.getChildren();
+        List<UIComponent> dynamicChildren = Collections.emptyList();
+
+        for (UIComponent cur : children) {
+            if (stateContext.componentAddedDynamically(cur)) {
+                if (dynamicChildren.isEmpty()) {
+                    dynamicChildren = new ArrayList<UIComponent>(children.size());
+                }
+                dynamicChildren.add(cur);
+            }
+        }
+        
+        // First remove all the dynamic children, this puts the non-dynamic children at
+        // their original position 
+        for (UIComponent cur : dynamicChildren) {
+            int i = stateContext.getIndexOfDynamicallyAddedChildInParent(cur);
+            if (-1 != i) {
+                children.remove(cur);
+            }
+        }
+        
+        // Now that the non-dynamic children are in the correct position add the dynamic children
+        // back in.
+        for (UIComponent cur : dynamicChildren) {
+            int i = stateContext.getIndexOfDynamicallyAddedChildInParent(cur);
+            if (-1 != i) {
+                if (i < children.size()) {
+                    children.add(i, cur);
+                } else {
+                    children.add(cur);
+                }
+            }
+        }
+    }
+
+    @Override
+    public MetaRuleset createMetaRuleset(Class type) {
+        Util.notNull("type", type);
+        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
+
+        // ignore standard component attributes
+        m.ignore("binding").ignore("id");
+        
+        // add auto wiring for attributes
+        m.addRule(ComponentRule.Instance);
+        
+        // if it's an ActionSource
+        if (ActionSource.class.isAssignableFrom(type)) {
+            m.addRule(ActionSourceRule.Instance);
+        }
+        
+        // if it's a ValueHolder
+        if (ValueHolder.class.isAssignableFrom(type)) {
+            m.addRule(ValueHolderRule.Instance);
+            
+            // if it's an EditableValueHolder
+            if (EditableValueHolder.class.isAssignableFrom(type)) {
+                m.ignore("submittedValue");
+                m.ignore("valid");
+                m.addRule(EditableValueHolderRule.Instance);
+            }
+        }
+
+        // if it's a selectone or selectmany
+        if (UISelectOne.class.isAssignableFrom(type) || UISelectMany.class.isAssignableFrom(type)) {
+            m.addRule(RenderPropertyRule.Instance);
+        }
+        
+        return m;
+    }
+
+
+        // ------------------------------------------------------- Protected Methods
+
+
+    private void addComponentToView(FaceletContext ctx,
+                                    UIComponent parent,
+                                    UIComponent c,
+                                    boolean componentFound,
+                                    boolean parentModified) {
+        if (!componentFound || !parentModified) {
+            addComponentToView(ctx, parent, c, componentFound);   
+        }
+    }
+
+    protected void addComponentToView(FaceletContext ctx,
+                                      UIComponent parent,
+                                      UIComponent c,
+                                      boolean componentFound) {
+
+        FacesContext context = ctx.getFacesContext();
+        boolean suppressEvents = ComponentSupport.suppressViewModificationEvents(context);
+        boolean compcomp = UIComponent.isCompositeComponent(c);
+
+        if (suppressEvents && componentFound && !compcomp) {
+            context.setProcessingEvents(false);
+        }
+
+        ComponentSupport.addComponent(ctx, parent, c);
+
+        if (suppressEvents && componentFound && !compcomp) {
+            context.setProcessingEvents(true);
+        }
+
+    }
+
+
+    protected boolean pushComponentToEL(FaceletContext ctx,
+                                        UIComponent c,
+                                        CompositeComponentStackManager ccStackManager) {
+
+        c.pushComponentToEL(ctx.getFacesContext(), c);
+        boolean compcompPushed = false;
+
+        if (UIComponent.isCompositeComponent(c)) {
+            compcompPushed = ccStackManager.push(c, TreeCreation);
+        }
+        return compcompPushed;
+
+    }
+
+
+    protected void popComponentFromEL(FaceletContext ctx,
+                                      UIComponent c,
+                                      CompositeComponentStackManager ccStackManager,
+                                      boolean compCompPushed) {
+
+        c.popComponentFromEL(ctx.getFacesContext());
+        if (compCompPushed) {
+            ccStackManager.pop(TreeCreation);
+        }
+
+    }
+
+    private void doOrphanedChildCleanup(FaceletContext ctx,
+                                          UIComponent parent,
+                                          UIComponent c,
+                                          boolean parentModified) {
+        if (parentModified) {
+            ComponentSupport.finalizeForDeletion(c);
+        } else {
+            doOrphanedChildCleanup(ctx, parent, c);
+        }
+    }
+
+    protected void doOrphanedChildCleanup(FaceletContext ctx,
+                                          UIComponent parent,
+                                          UIComponent c) {
+
+        ComponentSupport.finalizeForDeletion(c);
+        if (getFacetName(parent) == null) {
+            FacesContext context = ctx.getFacesContext();
+            boolean suppressEvents =
+                  ComponentSupport.suppressViewModificationEvents(context);
+
+            if (suppressEvents) {
+                // if the component has already been found, it will be removed
+                // and added back to the view.  We don't want to publish events
+                // for this case.
+                context.setProcessingEvents(false);
+            }
+            // suppress the remove event for this case since it will be re-added
+            parent.getChildren().remove(c);
+            if (suppressEvents) {
+                // re-enable event processing
+                context.setProcessingEvents(true);
+            }
+        }
+
+    }
+
+
+    protected void assignUniqueId(FaceletContext ctx,
+                                  UIComponent parent,
+                                  String id,
+                                  UIComponent c) {
+
+        // If the id is specified as a literal, and the component is being
+        // repeated (by c:forEach, for example), use generated unique ids
+        // after the first instance 
+        
+        if (this.id != null && !(this.id.isLiteral() && IterationIdManager.registerLiteralId(ctx, this.id.getValue()))) {
+            c.setId(this.id.getValue(ctx));
+        } else {
+            UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
+            if (root != null) {
+                String uid;
+                IdMapper mapper = IdMapper.getMapper(ctx.getFacesContext());
+                String mid = ((mapper != null) ? mapper.getAliasedId(id) : id);
+                UIComponent ancestorNamingContainer = parent
+                      .getNamingContainer();
+                if (null != ancestorNamingContainer &&
+                    ancestorNamingContainer instanceof UniqueIdVendor) {
+                    uid = ((UniqueIdVendor) ancestorNamingContainer)
+                          .createUniqueId(ctx.getFacesContext(), mid);
+                } else {
+                    uid = root.createUniqueId(ctx.getFacesContext(), mid);
+                }
+                c.setId(uid);
+            }
+
+        }
+
+        if (this.rendererType != null) {
+            c.setRendererType(this.rendererType);
+        }
+
+    }
+
+
+    protected void doNewComponentActions(FaceletContext ctx,
+                                         String id,
+                                         UIComponent c) {
+
+        if (log.isLoggable(Level.FINE)) {
+            log.fine(owner.getTag() + " Component["+id+"] Created: "
+                    + c.getClass().getName());
+        }
+        // If this is NOT a composite component...
+        if (null == createCompositeComponentDelegate) {
+            // set the attributes and properties into the UIComponent instance.
+            owner.setAttributes(ctx, c);
+        }
+        // otherwise, allow the composite component code to do it.
+
+        // mark it owned by a facelet instance
+        c.getAttributes().put(ComponentSupport.MARK_CREATED, id);
+
+        if (ctx.getFacesContext().isProjectStage(ProjectStage.Development)) {
+            // inject the location into the component
+            c.getAttributes().put(UIComponent.VIEW_LOCATION_KEY,
+                                  owner.getTag().getLocation());
+        }
+
+    }
+
+
+    protected void doExistingComponentActions(FaceletContext ctx, String id, UIComponent c) {
+
+        // mark all children for cleaning
+        if (log.isLoggable(Level.FINE)) {
+            log.fine(owner.getTag()
+                     + " Component["
+                     + id
+                     + "] Found, marking children for cleanup");
+        }
+        ComponentSupport.markForDeletion(c);
+        
+        if (this.id != null){
+            /*
+             * Note that registerLiteralId() needs to be called here regardless of whether we keep the code for 
+             * reapplying Ids below.
+             * This makes IterationIdManager aware of all literal Ids on the page, so that it can ensure Id uniqueness for components
+             * added during postback.
+             */
+            boolean autoGenerated = (this.id.isLiteral() && IterationIdManager.registerLiteralId(ctx, this.id.getValue()));
+            
+            /*
+             * Repply the id, for the case when the component tree was changed, and the id's are set explicitly.
+             */
+            if (!autoGenerated) {
+                c.setId(this.id.getValue(ctx));
+            }
+        }
+    }
+
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    protected UIComponent findChild(FaceletContext ctx,
+                                    UIComponent parent,
+                                    String tagId) {
+
+        return ComponentSupport.findChildByTagId(ctx.getFacesContext(), parent, tagId);
+
+    }
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    protected UIComponent findReparentedComponent(FaceletContext ctx,
+                                    UIComponent parent,
+                                    String tagId) {
+        UIComponent facet = parent.getFacets().get(UIComponent.COMPOSITE_FACET_NAME);
+        if (facet != null) {
+            UIComponent newParent = facet.findComponent(
+               (String)parent.getAttributes().get(tagId));
+            if (newParent != null)
+                return ComponentSupport.findChildByTagId(ctx.getFacesContext(), newParent, tagId);
+        }
+        return null;
+    }
+
+    // ------------------------------------------------- Package Private Methods
+
+    
+    void setCreateCompositeComponentDelegate(CreateComponentDelegate createComponentDelegate) {
+        this.createCompositeComponentDelegate = createComponentDelegate;
+    }
+
+
+
+    /**
+     * If the binding attribute was specified, use that in conjuction with our
+     * componentType String variable to call createComponent on the Application,
+     * otherwise just pass the componentType String.
+     * <p />
+     * If the binding was used, then set the ValueExpression "binding" on the
+     * created UIComponent.
+     * 
+     * @see Application#createComponent(javax.faces.el.ValueBinding,
+     *      javax.faces.context.FacesContext, java.lang.String)
+     * @see Application#createComponent(java.lang.String)
+     * @param ctx
+     *            FaceletContext to use in creating a component
+     * @return
+     */
+    private UIComponent createComponent(FaceletContext ctx) {
+        
+        if (null != createCompositeComponentDelegate) {
+            return createCompositeComponentDelegate.createComponent(ctx);
+        }
+        
+        UIComponent c;
+        FacesContext faces = ctx.getFacesContext();
+        Application app = faces.getApplication();
+        if (this.binding != null) {
+            ValueExpression ve = this.binding.getValueExpression(ctx,
+                                                                 Object.class);
+            c = app.createComponent(ve, faces, this.componentType, this.rendererType);
+            if (c != null) {
+                // Make sure the component supports 1.2
+                c.setValueExpression("binding", ve);
+            }
+        } else {
+            c = app.createComponent(faces, this.componentType, this.rendererType);
+        }
+        return c;
+    }
+
+    /*
+     * Internal hook that allows us to perform common processing for all
+     * components after they are populated.  At the moment, the only common
+     * processing we need to perform is applying wrapping AjaxBehaviors,
+     * if any exist.
+     */
+    private void privateOnComponentPopulated(FaceletContext ctx, UIComponent c) {
+
+        if (c instanceof ClientBehaviorHolder) {
+            FacesContext context = ctx.getFacesContext();
+            AjaxBehaviors ajaxBehaviors = AjaxBehaviors.getAjaxBehaviors(context, false);
+            if (ajaxBehaviors != null) {
+                ajaxBehaviors.addBehaviors(context, (ClientBehaviorHolder)c);
+            }
+        }
+        if (c instanceof EditableValueHolder) {
+            processValidators(ctx.getFacesContext(), (EditableValueHolder) c);
+        }
+    }
+
+
+    /**
+     * Process default validatior/wrapping validation information and install
+     * <code>Validators</code> based off the result.
+     */
+    private void processValidators(FacesContext ctx,
+                                   EditableValueHolder editableValueHolder) {
+
+        ComponentValidators componentValidators =
+              ComponentValidators.getValidators(ctx, false);
+        if (componentValidators != null) {
+            // process any elements on the stack.  
+            componentValidators.addValidators(ctx, editableValueHolder);
+        } else {
+            // no custom handling required, so add the default validators
+            ComponentValidators.addDefaultValidatorsToComponent(ctx, editableValueHolder);
+        }
+
+    }
+
+    /**
+     * @return the Facet name we are scoped in, otherwise null
+     */
+    private String getFacetName(UIComponent parent) {
+        return (String) parent.getAttributes().get(FacetHandler.KEY);
+    }
+
+
+
+
+    interface CreateComponentDelegate {
+
+        public UIComponent createComponent(FaceletContext ctx);
+        public void setCompositeComponent(FacesContext context, UIComponent cc);
+        public UIComponent getCompositeComponent(FacesContext context);
+        
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/CompositeComponentImpl.java b/com/sun/faces/facelets/tag/jsf/CompositeComponentImpl.java
new file mode 100644
index 0000000..637a294
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/CompositeComponentImpl.java
@@ -0,0 +1,74 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import javax.faces.component.UINamingContainer;
+
+
+public class CompositeComponentImpl extends UINamingContainer {
+    
+    public static final String TYPE = "javax.faces.NamingContainer";
+
+    @Override
+    public String getFamily() {
+        return TYPE;
+    }
+    
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/CompositeComponentTagHandler.java b/com/sun/faces/facelets/tag/jsf/CompositeComponentTagHandler.java
new file mode 100644
index 0000000..e3b017d
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/CompositeComponentTagHandler.java
@@ -0,0 +1,656 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.facelets.util.ReflectionUtil;
+import com.sun.faces.facelets.el.VariableMapperWrapper;
+import com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.CreateComponentDelegate;
+import com.sun.faces.facelets.tag.MetaRulesetImpl;
+import com.sun.faces.facelets.tag.MetadataTargetImpl;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+import java.beans.BeanDescriptor;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import javax.faces.FacesException;
+import javax.faces.application.Resource;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIPanel;
+import javax.faces.component.ActionSource;
+import javax.faces.component.ValueHolder;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UISelectOne;
+import javax.faces.component.UISelectMany;
+import javax.faces.context.FacesContext;
+import javax.faces.view.AttachedObjectHandler;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.Metadata;
+import javax.faces.view.facelets.MetadataTarget;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.MetaRule;
+import java.beans.PropertyDescriptor;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import javax.faces.FactoryFinder;
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.view.ViewDeclarationLanguageFactory;
+
+/**
+ * <p>
+ * Facelet handler responsible for, building the component tree representation
+ * of a composite component based on the metadata contained in the composite
+ * interface and implementation sections of the composite component template.
+ * </p>
+ */
+public class CompositeComponentTagHandler extends ComponentHandler implements CreateComponentDelegate {
+
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+    private Resource ccResource;
+    private TagAttribute binding;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public CompositeComponentTagHandler(Resource ccResource, ComponentConfig config) {
+        super(config);
+        this.ccResource = ccResource;
+        this.binding = config.getTag().getAttributes().get("binding");
+        ((ComponentTagHandlerDelegateImpl)this.getTagHandlerDelegate()).setCreateCompositeComponentDelegate(this);
+    }
+
+
+    // ------------------------------------ Methods from CreateComponentDelegate
+    
+
+
+    public UIComponent createComponent(FaceletContext ctx) {
+        
+        FacesContext context = ctx.getFacesContext();
+        UIComponent cc;
+        // we have to handle the binding here, as Application doesn't
+        // expose a method to do so with Resource.
+        if (binding != null) {
+            ValueExpression ve = binding.getValueExpression(ctx, UIComponent.class);
+            cc = (UIComponent) ve.getValue(ctx);
+            if (cc != null && !UIComponent.isCompositeComponent(cc)) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "jsf.compcomp.binding.eval.non.compcomp",
+                               binding.toString());
+                }
+                cc = null;
+            }
+            if (cc == null) {
+                cc = context.getApplication().createComponent(context, ccResource);
+                cc.setValueExpression("binding", ve);
+                ve.setValue(ctx, cc);
+            }
+        } else {
+            cc = context.getApplication().createComponent(context, ccResource);
+        }
+        context.getViewRoot().getAttributes().put(RIConstants.TREE_HAS_DYNAMIC_COMPONENTS, Boolean.TRUE);
+        setCompositeComponent(context, cc);
+
+        return cc;
+
+    }
+
+
+    // ------------------------------------------- Methods from ComponentHandler
+
+    
+    @Override
+    public void applyNextHandler(FaceletContext ctx, UIComponent c) throws IOException, FacesException, ELException {
+
+        // attributes need to be applied before any action is taken on
+        // nested children handlers or the composite component handlers
+        // as there may be an expression evaluated at tree creation time
+        // that needs access to these attributes
+        setAttributes(ctx, c);
+
+        // Allow any nested elements that reside inside the markup element
+        // for this tag to get applied
+        super.applyNextHandler(ctx, c);
+
+        // Apply the facelet for this composite component
+        applyCompositeComponent(ctx, c);
+
+        // Allow any PDL declared attached objects to be retargeted
+        if (ComponentHandler.isNew(c)) {
+            FacesContext context = ctx.getFacesContext();
+            String viewId = context.getViewRoot().getViewId();
+            // PENDING(rlubke): performance
+            ViewDeclarationLanguageFactory factory = (ViewDeclarationLanguageFactory)
+                    FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
+
+            ViewDeclarationLanguage vdl = factory.getViewDeclarationLanguage(viewId);
+            vdl.retargetAttachedObjects(context, c,
+                    getAttachedObjectHandlers(c, false));
+            vdl.retargetMethodExpressions(context, c);
+            getAttachedObjectHandlers(c).clear();
+
+//            getAttachedObjectHandlers(c, false).clear();
+        }
+
+    }
+    
+    
+    // The value of this string, prepended to this.tagId, is used as a
+    // key in the FacesContext attributes map, the value for which is
+    // the UIComponent that formerly was stored in an instance variable called
+    // cc.
+    private static final String ccInstanceVariableStandinKey = CompositeComponentTagHandler.class.getName() + "_";
+
+    @Override
+    public void setCompositeComponent(FacesContext context, UIComponent cc) {
+        Map contextMap = context.getAttributes();
+        String key = ccInstanceVariableStandinKey + this.tagId;
+        if (!contextMap.containsKey(key)) {
+            contextMap.put(key, cc);
+        }
+    }
+
+    public UIComponent getCompositeComponent(FacesContext context) {
+        Map contextMap = context.getAttributes();
+        String key = ccInstanceVariableStandinKey + this.tagId;
+        UIComponent result = (UIComponent) contextMap.get(key);
+
+        return result;
+    }
+    
+    /**
+     * Specialized implementation to prevent caching of the MetaRuleset when
+     * ProjectStage is Development.
+     */
+    @Override
+    public void setAttributes(FaceletContext ctx, Object instance) {
+
+        if (instance != null) {
+            if (ctx.getFacesContext().isProjectStage(ProjectStage.Development)) {
+                Metadata meta = createMetaRuleset(instance.getClass()).finish();
+                meta.applyMetadata(ctx, instance);
+            } else {
+                super.setAttributes(ctx, instance);
+            }
+        }
+
+    }
+
+
+    /**
+     * This is basically a copy of what's define in ComponentTagHandlerDelegateImpl
+     * except for the MetaRuleset implementation that's being used.
+     *
+     * This also allows us to treat composite component's backed by custom component
+     * implementation classes based on their type.
+     *
+     * @param type the <code>Class</code> for which the
+     * <code>MetaRuleset</code> must be created.
+     *
+     */
+    @Override
+    protected MetaRuleset createMetaRuleset(Class type) {
+
+        Util.notNull("type", type);
+        FacesContext context = FacesContext.getCurrentInstance();
+        UIComponent cc = getCompositeComponent(context);
+        if (null == cc) {        
+            FaceletContext faceletContext = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+            cc = createComponent(faceletContext);
+            setCompositeComponent(context, cc);
+            
+        }
+        MetaRuleset m = new CompositeComponentMetaRuleset(getTag(), type, (BeanInfo) cc.getAttributes().get(UIComponent.BEANINFO_KEY));
+
+        // ignore standard component attributes
+        m.ignore("binding").ignore("id");
+
+        m.addRule(CompositeComponentRule.Instance);
+
+        // if it's an ActionSource
+        if (ActionSource.class.isAssignableFrom(type)) {
+            m.addRule(ActionSourceRule.Instance);
+        }
+
+        // if it's a ValueHolder
+        if (ValueHolder.class.isAssignableFrom(type)) {
+            m.addRule(ValueHolderRule.Instance);
+
+            // if it's an EditableValueHolder
+            if (EditableValueHolder.class.isAssignableFrom(type)) {
+                m.ignore("submittedValue");
+                m.ignore("valid");
+                m.addRule(EditableValueHolderRule.Instance);
+            }
+        }
+
+        // if it's a selectone or selectmany
+        if (UISelectOne.class.isAssignableFrom(type) || UISelectMany.class.isAssignableFrom(type)) {
+            m.addRule(RenderPropertyRule.Instance);
+        }
+
+        return m;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public static List<AttachedObjectHandler> getAttachedObjectHandlers(UIComponent component) {
+
+        return getAttachedObjectHandlers(component, true);
+
+    }
+    
+    
+    /**
+     * <p class="changed_added_2_2">The key in the value set of the
+     * <em>composite component <code>BeanDescriptor</code></em>, the
+     * value for which is a
+     * <code>List<AttachedObjectHandler></code>.</p>
+     */
+    private static final String ATTACHED_OBJECT_HANDLERS_KEY =
+            "javax.faces.view.AttachedObjectHandlers";
+    
+
+    @SuppressWarnings({"unchecked"})
+    public static List<AttachedObjectHandler> getAttachedObjectHandlers(UIComponent component,
+                                                                        boolean create) {
+        Map<String, Object> attrs = component.getAttributes();
+        List<AttachedObjectHandler> result = (List<AttachedObjectHandler>)
+              attrs.get(ATTACHED_OBJECT_HANDLERS_KEY);
+
+        if (result == null) {
+            if (create) {
+                result = new ArrayList<AttachedObjectHandler>();
+                attrs.put(ATTACHED_OBJECT_HANDLERS_KEY, result);
+            } else {
+                result = Collections.EMPTY_LIST;
+            }
+        }
+        return result;
+
+    }
+
+
+
+    // --------------------------------------------------------- Private Methods
+
+    
+    private void applyCompositeComponent(FaceletContext ctx, UIComponent c)
+    throws IOException {
+
+        FacesContext facesContext = ctx.getFacesContext();
+        VariableMapper orig = ctx.getVariableMapper();
+        
+        UIPanel facetComponent;
+        if (ComponentHandler.isNew(c)) {
+            facetComponent = (UIPanel)
+            facesContext.getApplication().createComponent("javax.faces.Panel");
+            facetComponent.setRendererType("javax.faces.Group");
+            c.getFacets().put(UIComponent.COMPOSITE_FACET_NAME, facetComponent);
+        }                                                                                 
+        else {
+            facetComponent = (UIPanel) 
+                    c.getFacets().get(UIComponent.COMPOSITE_FACET_NAME);
+        }
+        assert(null != facetComponent);
+        
+        try {            
+            VariableMapper wrapper = new VariableMapperWrapper(orig) {
+
+                @Override
+                public ValueExpression resolveVariable(String variable) {
+                    return super.resolveVariable(variable);
+            }
+            
+            };
+            ctx.setVariableMapper(wrapper);
+            
+            /*
+             * We need to use includeFacelet because our facelet component map
+             * expects each Facelet component to generate a unique id (MARK_ID).
+             */
+            ctx.includeFacelet(facetComponent, ccResource.getURL());
+        } finally {
+            ctx.setVariableMapper(orig);
+        }
+    }
+
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Specialized MetaRulesetImpl to return CompositeMetadataTarget for component
+     * attribute handling.
+     */
+    private static final class CompositeComponentMetaRuleset extends MetaRulesetImpl {
+
+        private BeanInfo compBeanInfo;
+        private Class<?> type;
+
+        public CompositeComponentMetaRuleset(Tag tag,
+                                             Class<?> type,
+                                             BeanInfo compBeanInfo) {
+
+            super(tag, type);
+            this.compBeanInfo = compBeanInfo;
+            this.type = type;
+
+        }
+
+        @Override
+        protected MetadataTarget getMetadataTarget() {
+            try {
+                return new CompositeMetadataTarget(type, compBeanInfo);
+            } catch (IntrospectionException ie) {
+                throw new FacesException(ie);
+            }
+        }
+
+
+        // ------------------------------------------------------ Nested Classes
+
+
+        /**
+         * This class is responsible for creating ValueExpression instances with
+         * the expected type based off the following:
+         *
+         *  - if the composite:attribute metadata is present, then use the type
+         *    if specified by the author, or default to Object.class
+         *  - if no composite:attribute is specified, then attempt to return the
+         *    type based off the bean info for this component
+         */
+        private static final class CompositeMetadataTarget extends MetadataTargetImpl {
+
+            private BeanInfo compBeanInfo;
+
+
+            // ---------------------------------------------------- Construcrors
+
+
+            public CompositeMetadataTarget(Class<?> type, BeanInfo compBeanInfo)
+            throws IntrospectionException {
+
+                super(type);
+                this.compBeanInfo = compBeanInfo;
+
+            }
+
+
+            // --------------------------------- Methods from MetadataTargetImpl
+
+
+            @Override
+            public Class getPropertyType(String name) {
+                PropertyDescriptor compDescriptor = findDescriptor(name);
+                if (compDescriptor != null) {
+                    // composite:attribute declaration...
+                    Object obj = compDescriptor.getValue("type");
+                    if ((null != obj) && !(obj instanceof Class)) {
+                        ValueExpression typeVE = (ValueExpression) obj;
+                        String className = (String) typeVE.getValue(FacesContext.getCurrentInstance().getELContext());
+                        if (className != null) {
+                            className = prefix(className);
+                            try {
+                                return ReflectionUtil.forName(className);
+                            } catch (ClassNotFoundException cnfe) {
+                                throw new FacesException(cnfe);
+                            }
+                        } else {
+                            return Object.class;
+                        }
+                    } else {
+                        return (Class) obj;
+                    }
+                } else {
+                    // defer to the default processing which will inspect the
+                    // PropertyDescriptor of the UIComponent type
+                    return super.getPropertyType(name);
+                }
+            }
+
+
+            // ------------------------------------------------- Private Methods
+
+
+            private PropertyDescriptor findDescriptor(String name) {
+
+                for (PropertyDescriptor pd : compBeanInfo.getPropertyDescriptors()) {
+
+                    if (pd.getName().equals(name)) {
+                        return pd;
+                    }
+
+                }
+                return null;
+
+            }
+
+
+            private String prefix(String className) {
+
+                if (className.indexOf('.') == -1
+                    && Character.isUpperCase(className.charAt(0))) {
+                    return ("java.lang." + className);
+                } else {
+                    return className;
+                }
+
+            }
+        }
+
+    } // END CompositeComponentMetaRuleset
+
+
+    /**
+     * <code>MetaRule</code> for populating the ValueExpression map of a
+     * composite component.
+     */
+    private static class CompositeComponentRule extends MetaRule {
+
+        private static final CompositeComponentRule Instance = new CompositeComponentRule();
+
+
+        // ------------------------------------------ Methods from ComponentRule
+
+
+        public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget meta) {
+
+            if (meta.isTargetInstanceOf(UIComponent.class)) {
+                Class type = meta.getPropertyType(name);
+                if (type == null) {
+                    type = Object.class;
+                }
+
+                if (!attribute.isLiteral()) {
+                    return new CompositeExpressionMetadata(name, type, attribute);
+                } else {
+                    return new LiteralAttributeMetadata(name, type, attribute);
+                }
+            }
+            return null;
+
+        }
+
+
+        // ------------------------------------------------------ Nested Classes
+
+
+        /**
+         * For literal expressions, coerce the literal value to the type
+         * as provided to the constructor prior to setting the value into
+         * the component's attribute map.
+         */
+        private static final class LiteralAttributeMetadata extends Metadata {
+
+            private String name;
+            private Class<?> type;
+            private TagAttribute attribute;
+
+
+            // ---------------------------------------------------- Constructors
+
+
+            public LiteralAttributeMetadata(String name,
+                                            Class<?> type,
+                                            TagAttribute attribute) {
+
+                this.name = name;
+                this.type = type;
+                this.attribute = attribute;
+                
+            }
+
+
+            // ------------------------------------------- Methods from Metadata
+
+
+            public void applyMetadata(FaceletContext ctx, Object instance) {
+
+                UIComponent c = (UIComponent) instance;
+                Object value = attribute.getObject(ctx,type);
+                // don't set the attributes value in the components attributemap
+                // if it is null, as this will throw a NullPointerException.
+                if(value!=null) {
+                    c.getAttributes().put(name, value);
+                }
+
+            }
+
+        } // END LiteralAttributeMetadata
+
+
+        /**
+         * CompositeExpressionMetadata sets up specialized wrapper ValueExpression
+         * instances around the source ValueExpression that, when evaluated,
+         * will cause the parent composite component of the currently available
+         * composite component to be pushed onto a stack that the
+         * ImplicitObjectELResolver will check for.
+         */
+        private static final class CompositeExpressionMetadata extends Metadata {
+
+            private String name;
+            private Class<?> type;
+            private TagAttribute attr;
+
+
+            // ---------------------------------------------------- Constructors
+
+
+            public CompositeExpressionMetadata(String name,
+                                               Class<?> type,
+                                               TagAttribute attr) {
+                this.name = name;
+                this.type = type;
+                this.attr = attr;
+
+
+            }
+
+            // ------------------------------------------- Methods from Metadata
+
+
+            public void applyMetadata(FaceletContext ctx, Object instance) {
+
+                ValueExpression ve = attr.getValueExpression(ctx, type);
+                UIComponent cc = (UIComponent) instance;
+                assert (UIComponent.isCompositeComponent(cc));
+                Map<String, Object> attrs = cc.getAttributes();
+                BeanInfo componentMetadata = (BeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
+                BeanDescriptor desc = componentMetadata.getBeanDescriptor();
+                Collection<String> attributesWithDeclaredDefaultValues = (Collection<String>)
+                        desc.getValue(UIComponent.ATTRS_WITH_DECLARED_DEFAULT_VALUES);
+                if (null != attributesWithDeclaredDefaultValues &&
+                        attributesWithDeclaredDefaultValues.contains(name) && attrs.containsKey(name)) {
+                    // It is necessary to remove the value from the attribute
+                    // map because the ELexpression transparancy doesn't know
+                    // about the value's existence.
+                    attrs.remove(name);
+                }
+                cc.setValueExpression(name, ve);
+
+            }
+
+
+        } // END CompositeExpressionMetadata
+
+
+    } // END CompositeComponentRule
+    
+}
diff --git a/com/sun/faces/facelets/tag/jsf/CompositeComponentTagLibrary.java b/com/sun/faces/facelets/tag/jsf/CompositeComponentTagLibrary.java
new file mode 100644
index 0000000..061f4f7
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/CompositeComponentTagLibrary.java
@@ -0,0 +1,256 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.tag.composite.CompositeLibrary;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableMissingResourceLibraryDetection;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.FacesException;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+public class CompositeComponentTagLibrary extends LazyTagLibrary {
+    
+    private static final Logger LOGGER = FacesLogger.FACELETS_COMPONENT.getLogger();
+
+    public CompositeComponentTagLibrary(String ns) {
+        super(ns);
+        if (null == ns) {
+            throw new NullPointerException();
+        }
+        this.ns = ns;
+        this.init();
+    }
+    
+    public CompositeComponentTagLibrary(String ns, String compositeLibraryName) {
+        super(ns);
+        if (null == ns) {
+            throw new NullPointerException();
+        }
+        this.ns = ns;
+        if (null == compositeLibraryName) {
+            throw new NullPointerException();
+        }
+        this.compositeLibraryName = compositeLibraryName;
+        this.init();
+        
+    }
+
+    private void init() {
+        WebConfiguration webconfig = WebConfiguration.getInstance();
+        enableMissingResourceLibraryDetection =
+                webconfig.isOptionEnabled(EnableMissingResourceLibraryDetection);
+    }
+    
+    private String ns = null;
+    private String compositeLibraryName;
+    private boolean enableMissingResourceLibraryDetection;
+
+    public boolean containsTagHandler(String ns, String localName) {
+        boolean result = false;
+
+        Resource ccResource = null;
+                        
+        if (null != (ccResource = 
+                getCompositeComponentResource(ns, localName))) {
+            InputStream componentStream = null;
+            try {
+                componentStream = ccResource.getInputStream();
+                result = (componentStream != null);
+            } catch (IOException ex) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, ex.toString(), ex);
+                }
+            } finally {
+                try {
+                    if (result) {
+                        componentStream.close();
+                    }
+                } catch (IOException ex) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, ex.toString(), ex);
+                    }
+                } 
+            }
+        }
+        return result || super.containsTagHandler(ns, localName);
+    }
+    
+    private Resource getCompositeComponentResource(String ns, String localName) {
+        Resource ccResource = null;
+        if (ns.equals(this.ns)) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            String libraryName = getCompositeComponentLibraryName(this.ns);
+            if (null != libraryName) {
+                String ccName = localName + ".xhtml";
+                // PENDING: there has to be a cheaper way to test for existence
+                ResourceHandler resourceHandler = context.getApplication().getResourceHandler();
+                ccResource = resourceHandler.
+                        createResource(ccName, libraryName);
+            }
+        }
+        return ccResource;
+    }
+
+
+    public TagHandler createTagHandler(String ns, String localName, TagConfig tag) throws FacesException {
+
+        TagHandler result = super.createTagHandler(ns, localName, tag);
+
+        if (result == null) {
+            ComponentConfig componentConfig =
+                  new ComponentConfigWrapper(tag, CompositeComponentImpl.TYPE, null);
+            result = new CompositeComponentTagHandler(
+                  getCompositeComponentResource(ns, localName),
+                  componentConfig);
+        }
+
+        return result;
+    }
+    
+    private static final String NS_COMPOSITE_COMPONENT_PREFIX = 
+            CompositeLibrary.Namespace + "/";
+    private static final String XMLNS_COMPOSITE_COMPONENT_PREFIX = 
+            CompositeLibrary.XMLNSNamespace + "/";
+    
+    @Override
+    public boolean tagLibraryForNSExists(String toTest) {
+        boolean result = false;
+        
+        String resourceId = null;
+        if (null != (resourceId = getCompositeComponentLibraryName(toTest))) {
+            if (enableMissingResourceLibraryDetection) {
+                result = FacesContext.getCurrentInstance().getApplication().
+                        getResourceHandler().libraryExists(resourceId);
+            } else {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE, "Skipping call to libraryExists().  Please set context-param {0} to true to verify if library {1} actually exists", new Object[]{EnableMissingResourceLibraryDetection.getQualifiedName(), toTest});
+                }
+                result = true;
+            }
+        }
+        
+        return result;
+    }
+    
+    public static boolean scriptComponentForResourceExists(FacesContext context,
+            Resource componentResource) {
+        boolean result = false;
+
+        Resource scriptComponentResource = context.getApplication().getViewHandler().getViewDeclarationLanguage(context, context.getViewRoot().getViewId()).getScriptComponentResource(context, 
+                componentResource);
+        InputStream is = null;
+        try {
+            is = scriptComponentResource.getInputStream();
+            result = (null != scriptComponentResource) && (null != is);
+        } catch (IOException ex) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, ex.toString(), ex);
+            }
+        } finally {
+                try {
+                    if (null != is) {
+                        is.close();
+                    }
+                } catch (IOException ex) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, ex.toString(), ex);
+                    }
+                } 
+            }
+        
+        return result;
+    }
+    
+    private String getCompositeComponentLibraryName(String toTest) {
+        String resourceId = null;
+        if (null != compositeLibraryName) {
+            resourceId = compositeLibraryName;
+        }
+        else {
+            int resourceIdIndex;
+            if (-1 != (resourceIdIndex = toTest.indexOf(NS_COMPOSITE_COMPONENT_PREFIX))) {
+                resourceIdIndex += NS_COMPOSITE_COMPONENT_PREFIX.length();
+                if (resourceIdIndex < toTest.length()) {
+                    resourceId = toTest.substring(resourceIdIndex);
+                }
+            }
+            if (-1 != (resourceIdIndex = toTest.indexOf(XMLNS_COMPOSITE_COMPONENT_PREFIX))) {
+                resourceIdIndex += XMLNS_COMPOSITE_COMPONENT_PREFIX.length();
+                if (resourceIdIndex < toTest.length()) {
+                    resourceId = toTest.substring(resourceIdIndex);
+                }
+            }
+        }
+        
+        return resourceId;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/ConverterTagHandlerDelegateImpl.java b/com/sun/faces/facelets/tag/jsf/ConverterTagHandlerDelegateImpl.java
new file mode 100644
index 0000000..31ac89b
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/ConverterTagHandlerDelegateImpl.java
@@ -0,0 +1,163 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.tag.MetaRulesetImpl;
+import com.sun.faces.util.Util;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.view.AttachedObjectHandler;
+import javax.faces.view.facelets.*;
+import java.io.IOException;
+
+
+/**
+ *
+ * @author edburns
+ */
+public class ConverterTagHandlerDelegateImpl extends TagHandlerDelegate implements AttachedObjectHandler {
+
+    private ConverterHandler owner;
+    
+    public ConverterTagHandlerDelegateImpl(ConverterHandler owner) {
+        this.owner = owner;
+    }
+    
+    @Override
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        // only process if it's been created
+        if (parent == null || !(parent.getParent() == null)) {
+            return;
+        }
+        ComponentSupport.copyPassthroughAttributes(ctx, parent, owner.getTag());
+        if (parent instanceof ValueHolder) {
+            owner.applyAttachedObject(ctx.getFacesContext(), parent);
+        } else if (UIComponent.isCompositeComponent(parent)) {
+            if (null == owner.getFor()) {
+                // PENDING(): I18N
+                throw new TagException(owner.getTag(),
+                        "converter tags nested within composite components must have a non-null \"for\" attribute");
+            }
+            // Allow the composite component to know about the target
+            // component.
+            CompositeComponentTagHandler.getAttachedObjectHandlers(parent).add(owner);
+        } else {
+            throw new TagException(owner.getTag(),
+                    "Parent not an instance of ValueHolder: " + parent);
+        }
+    }
+    
+    public MetaRuleset createMetaRuleset(Class type) {
+        Util.notNull("type", type);
+        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
+
+        return m.ignore("binding").ignore("for");
+    }
+    
+    public String getFor() {
+        String result = null;
+        TagAttribute attr = owner.getTagAttribute("for");
+        
+        if (null != attr) {
+            if (attr.isLiteral()) {
+                result = attr.getValue();
+            } else {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                result = (String)attr.getValueExpression(ctx, String.class).getValue(ctx);
+            }
+        }
+        return result;
+        
+    }
+    
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+        // cast to a ValueHolder
+        ValueHolder vh = (ValueHolder) parent;
+        ValueExpression ve = null;
+        Converter c = null;
+        if (owner.getBinding() != null) {
+            ve = owner.getBinding().getValueExpression(ctx, Converter.class);
+            c = (Converter) ve.getValue(ctx);
+        }
+        if (c == null) {
+            c = this.createConverter(ctx);
+            if (ve != null) {
+                ve.setValue(ctx, c);
+            }
+        }
+        if (c == null) {
+            throw new TagException(owner.getTag(), "No Converter was created");
+        }
+        owner.setAttributes(ctx, c);
+        vh.setConverter(c);
+        Object lv = vh.getLocalValue();
+        FacesContext faces = ctx.getFacesContext();
+        if (lv instanceof String) {
+            vh.setValue(c.getAsObject(faces, parent, (String) lv));
+        }
+    }
+
+    /**
+     * Create a Converter instance
+     * 
+     * @param ctx
+     *            FaceletContext to use
+     * @return Converter instance, cannot be null
+     */
+    private Converter createConverter(FaceletContext ctx) {
+        if (owner.getConverterId(ctx) == null) {
+            throw new TagException(
+                    owner.getTag(),
+                    "Default behavior invoked of requiring a converter-id passed in the constructor, must override ConvertHandler(ConverterConfig)");
+        }
+        return ctx.getFacesContext().getApplication().createConverter(owner.getConverterId(ctx));
+    }
+
+    
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/EditableValueHolderRule.java b/com/sun/faces/facelets/tag/jsf/EditableValueHolderRule.java
new file mode 100644
index 0000000..3fc1b1e
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/EditableValueHolderRule.java
@@ -0,0 +1,176 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.el.LegacyMethodBinding;
+
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.MethodExpressionValueChangeListener;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.validator.MethodExpressionValidator;
+import javax.faces.view.facelets.*;
+
+/**
+ * 
+ * @author Jacob Hookom
+ */
+public final class EditableValueHolderRule extends MetaRule {
+
+    final static class LiteralValidatorMetadata extends Metadata {
+
+        private final String validatorId;
+
+        public LiteralValidatorMetadata(String validatorId) {
+            this.validatorId = validatorId;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((EditableValueHolder) instance).addValidator(ctx.getFacesContext()
+                    .getApplication().createValidator(this.validatorId));
+        }
+    }
+
+    final static class ValueChangedExpressionMetadata extends Metadata {
+        private final TagAttribute attr;
+
+        public ValueChangedExpressionMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((EditableValueHolder) instance)
+                    .addValueChangeListener(new MethodExpressionValueChangeListener(
+                            this.attr.getMethodExpression(ctx, null,
+                                    VALUECHANGE_SIG)));
+        }
+    }
+
+    final static class ValueChangedBindingMetadata extends Metadata {
+        private final TagAttribute attr;
+
+        public ValueChangedBindingMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((EditableValueHolder) instance)
+                    .setValueChangeListener(new LegacyMethodBinding(this.attr
+                            .getMethodExpression(ctx, null, VALUECHANGE_SIG)));
+        }
+    }
+
+    final static class ValidatorExpressionMetadata extends Metadata {
+        private final TagAttribute attr;
+
+        public ValidatorExpressionMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((EditableValueHolder) instance)
+                    .addValidator(new MethodExpressionValidator(this.attr
+                            .getMethodExpression(ctx, null, VALIDATOR_SIG)));
+        }
+    }
+
+    final static class ValidatorBindingMetadata extends Metadata {
+        private final TagAttribute attr;
+
+        public ValidatorBindingMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((EditableValueHolder) instance)
+                    .setValidator(new LegacyMethodBinding(this.attr
+                            .getMethodExpression(ctx, null, VALIDATOR_SIG)));
+        }
+    }
+
+    private final static Class[] VALIDATOR_SIG = new Class[] {
+            FacesContext.class, UIComponent.class, Object.class };
+
+    private final static Class[] VALUECHANGE_SIG = new Class[] { ValueChangeEvent.class };
+
+    public final static EditableValueHolderRule Instance = new EditableValueHolderRule();
+
+    public Metadata applyRule(String name, TagAttribute attribute,
+            MetadataTarget meta) {
+
+        if (meta.isTargetInstanceOf(EditableValueHolder.class)) {
+
+            if ("validator".equals(name)) {
+                if (attribute.isLiteral()) {
+                    return new LiteralValidatorMetadata(attribute.getValue());
+                } else {
+                    return new ValidatorExpressionMetadata(attribute);
+                }
+            }
+
+            if ("valueChangeListener".equals(name)) {
+                return new ValueChangedExpressionMetadata(attribute);
+            }
+
+        }
+        return null;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/FacesComponentTagLibrary.java b/com/sun/faces/facelets/tag/jsf/FacesComponentTagLibrary.java
new file mode 100644
index 0000000..b5934e2
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/FacesComponentTagLibrary.java
@@ -0,0 +1,161 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.application.annotation.FacesComponentUsage;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.util.List;
+import java.util.logging.Logger;
+import javax.faces.FacesException;
+import javax.faces.component.FacesComponent;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+
+public class FacesComponentTagLibrary extends LazyTagLibrary {
+    
+    private static final Logger LOGGER = FacesLogger.FACELETS_COMPONENT.getLogger();
+
+    private ApplicationAssociate appAss;
+    
+    
+    public FacesComponentTagLibrary(String ns) {
+        super(ns);
+        if (null == ns) {
+            throw new NullPointerException();
+        }
+        appAss = ApplicationAssociate.getCurrentInstance();
+    }
+
+
+    @Override
+    public boolean containsTagHandler(String ns, String localName) {
+        Util.notNull("namespace", ns);
+        Util.notNull("tagName", localName);
+        
+        if (!ns.equals(this.getNamespace())) {
+            return false;
+        }
+        
+        // Check the cache maintained by our superclass...
+        boolean containsTagHandler = super.containsTagHandler(ns, localName);
+        if (!containsTagHandler) {
+            FacesComponentUsage matchingFacesComponentUsage = 
+                    findFacesComponentUsageForLocalName(ns, localName);
+            containsTagHandler = null != matchingFacesComponentUsage;
+            
+        }
+        return containsTagHandler;
+    }
+    
+    private FacesComponentUsage findFacesComponentUsageForLocalName(String ns, String localName) {
+        FacesComponentUsage result = null;
+        
+        Util.notNull("namespace", ns);
+        Util.notNull("tagName", localName);
+        
+        if (!ns.equals(this.getNamespace())) {
+            return result;
+        }
+        List<FacesComponentUsage> componentsForNamespace = appAss.getComponentsForNamespace(ns);
+        String tagName;
+        for (FacesComponentUsage cur: componentsForNamespace) {
+            FacesComponent curFacesComponent = cur.getAnnotation();
+            tagName = curFacesComponent.tagName();
+            // if the current entry has an explicitly declared tagName...
+            if (null != tagName && 0 < tagName.length()) {
+                // compare it to the argument tagName
+                if (localName.equals(tagName)) {
+                    result = cur;
+                    break;
+                }
+            } else if (null != tagName) {
+                tagName = cur.getTarget().getSimpleName();
+                tagName = tagName.substring(0, 1).toLowerCase() + tagName.substring(1);
+                if (localName.equals(tagName)) {
+                    result = cur;
+                    break;
+                }
+            }
+        }
+        
+        return result;
+    }
+
+    @Override
+    public TagHandler createTagHandler(String ns, String localName, TagConfig tag) throws FacesException {
+        assert(containsTagHandler(ns, localName));
+        TagHandler result = super.createTagHandler(ns, localName, tag);
+        if (null == result) {
+            FacesComponentUsage facesComponentUsage = 
+                    findFacesComponentUsageForLocalName(ns, localName);
+            String componentType = facesComponentUsage.getAnnotation().value();
+
+            if (null == componentType || 0 == componentType.length()) {
+                componentType = facesComponentUsage.getTarget().getSimpleName();
+                componentType = Character.toLowerCase(componentType.charAt(0)) + 
+                        componentType.substring(1);
+            }
+            
+            UIComponent throwAwayComponent = FacesContext.getCurrentInstance().
+                    getApplication().createComponent(componentType);
+            String rendererType = throwAwayComponent.getRendererType();
+            super.addComponent(localName, componentType, rendererType);
+            result = super.createTagHandler(ns, localName, tag);
+        }
+        return result;
+    }
+
+    @Override
+    public boolean tagLibraryForNSExists(String ns) {
+        boolean result = false;
+        List<FacesComponentUsage> componentsForNamespace = appAss.getComponentsForNamespace(ns);
+        
+        result = !componentsForNamespace.isEmpty();
+        
+        return result;
+    }
+
+    
+}
diff --git a/com/sun/faces/facelets/tag/jsf/IterationIdManager.java b/com/sun/faces/facelets/tag/jsf/IterationIdManager.java
new file mode 100644
index 0000000..6178703
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/IterationIdManager.java
@@ -0,0 +1,71 @@
+package com.sun.faces.facelets.tag.jsf;
+
+import java.util.Deque;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Set;
+
+import javax.faces.view.facelets.FaceletContext;
+
+public class IterationIdManager {
+    
+    /**
+     * Registers a literal Id with this manager and determines whether the same Id has been seen before
+     * @param ctx Facelets Context
+     * @param id literal Id
+     * @return true if the same Id is already being tracked, false otherwise
+     */
+    public static boolean registerLiteralId(FaceletContext ctx, String id) {
+        Set<String> trackedIds = _getStackOfTrackedIds(ctx).peek();
+        
+        if (trackedIds == null) {
+            return false;
+        }
+        
+        if (trackedIds.contains(id)) {
+            return true;
+        }
+        
+        trackedIds.add(id);
+        return false;
+    }
+    
+    public static void startIteration(FaceletContext ctx) {
+        Deque<Set<String>> stack = _getStackOfTrackedIds(ctx);
+        
+        // Reuse existing set of Ids if we are already tracking them for the parent iteration
+        Set<String> current = stack.peek();
+        
+        if (current == null) {
+           current = new HashSet<String>();
+        }
+        
+        stack.push(current);
+    }
+    
+    public static void stopIteration(FaceletContext ctx) {
+        _getStackOfTrackedIds(ctx).pop();
+    }
+    
+    public static void startNamingContainer(FaceletContext ctx) {
+        // Push null on the stack to suspend Id tracking
+        _getStackOfTrackedIds(ctx).push(null);
+    }
+    
+    public static void stopNamingContainer(FaceletContext ctx) {
+        _getStackOfTrackedIds(ctx).pop();
+    }
+    
+    
+    private static Deque<Set<String>> _getStackOfTrackedIds(FaceletContext ctx) {
+        Deque<Set<String>> stack = (Deque<Set<String>>)ctx.getAttribute(_STACK_OF_TRACKED_IDS);
+        if (stack == null) {
+            stack = new LinkedList<Set<String>>();
+            ctx.setAttribute(_STACK_OF_TRACKED_IDS, stack);
+        }
+        return stack;
+    }
+        
+    
+    private static final String _STACK_OF_TRACKED_IDS = "com.sun.faces.facelets.tag.js._TRACKED_IDS"; 
+}
diff --git a/com/sun/faces/facelets/tag/jsf/LazyTagLibrary.java b/com/sun/faces/facelets/tag/jsf/LazyTagLibrary.java
new file mode 100644
index 0000000..326c3e5
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/LazyTagLibrary.java
@@ -0,0 +1,53 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.tag.TagLibraryImpl;
+
+public abstract class LazyTagLibrary extends TagLibraryImpl {
+
+    public LazyTagLibrary(String namespace) {
+        super(namespace);
+    }
+
+    public abstract boolean tagLibraryForNSExists(String toTest);
+    
+}
diff --git a/com/sun/faces/facelets/tag/jsf/PassThroughAttributeLibrary.java b/com/sun/faces/facelets/tag/jsf/PassThroughAttributeLibrary.java
new file mode 100644
index 0000000..66e22f1
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/PassThroughAttributeLibrary.java
@@ -0,0 +1,55 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.tag.AbstractTagLibrary;
+
+
+public final class PassThroughAttributeLibrary extends AbstractTagLibrary {
+
+    public final static String Namespace = "http://xmlns.jcp.org/jsf/passthrough";
+
+    public final static PassThroughAttributeLibrary Instance = new PassThroughAttributeLibrary();
+
+    public PassThroughAttributeLibrary() {
+        super(Namespace);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/PassThroughElementComponentHandler.java b/com/sun/faces/facelets/tag/jsf/PassThroughElementComponentHandler.java
new file mode 100644
index 0000000..decdbf5
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/PassThroughElementComponentHandler.java
@@ -0,0 +1,107 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.util.Util;
+import java.util.Map;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.render.Renderer;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagException;
+
+public class PassThroughElementComponentHandler extends ComponentHandler {
+    
+    private final TagAttribute elementName;
+    
+    protected final TagAttribute getRequiredPassthroughAttribute(String localName)
+            throws TagException {
+        TagAttribute attr = this.tag.getAttributes().get(PassThroughAttributeLibrary.Namespace, localName);
+        if (attr == null) {
+            throw new TagException(this.tag, "Attribute '" + localName
+                    + "' is required");
+        }
+        return attr;
+    }
+    
+    
+
+    public PassThroughElementComponentHandler(ComponentConfig config) {
+        super(config);
+        
+        elementName = this.getRequiredPassthroughAttribute(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY);
+    }
+    
+    @Override
+    public UIComponent createComponent(FaceletContext ctx) {
+        UIComponent result = null;
+        try {
+            Class clazz = Util.loadClass("com.sun.faces.component.PassthroughElement", this);
+            result = (UIComponent)clazz.newInstance();
+        } catch (ClassNotFoundException cnfe) {
+            throw new FacesException(cnfe);
+        } catch (IllegalAccessException iae) {
+            throw new FacesException(iae);
+        } catch (InstantiationException ie) {
+            throw new FacesException(ie);
+        }
+        
+        return result;
+    }
+
+    @Override
+    public void onComponentCreated(FaceletContext ctx, UIComponent c, UIComponent parent) {
+        if (parent.getParent() == null) {
+            Map<String,Object> passThroughAttrs = c.getPassThroughAttributes(true);
+            Object attrValue;
+            attrValue = (this.elementName.isLiteral()) ? this.elementName.getValue(ctx) : this.elementName.getValueExpression(ctx, Object.class);
+            passThroughAttrs.put(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY, attrValue);
+        }
+        
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/facelets/tag/jsf/PassThroughElementLibrary.java b/com/sun/faces/facelets/tag/jsf/PassThroughElementLibrary.java
new file mode 100644
index 0000000..95188d5
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/PassThroughElementLibrary.java
@@ -0,0 +1,58 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.tag.AbstractTagLibrary;
+
+
+public final class PassThroughElementLibrary extends AbstractTagLibrary {
+
+    public final static String Namespace = "http://xmlns.jcp.org/jsf";
+
+    public final static PassThroughElementLibrary Instance = new PassThroughElementLibrary();
+
+    public PassThroughElementLibrary() {
+        super(Namespace);
+        
+        this.addComponent("element", "javax.faces.Panel",
+                "javax.faces.passthrough.Element", PassThroughElementComponentHandler.class);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/RenderPropertyRule.java b/com/sun/faces/facelets/tag/jsf/RenderPropertyRule.java
new file mode 100644
index 0000000..aae3dab
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/RenderPropertyRule.java
@@ -0,0 +1,119 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import javax.faces.component.UIInput;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.MetaRule;
+import javax.faces.view.facelets.Metadata;
+import javax.faces.view.facelets.MetadataTarget;
+import javax.faces.view.facelets.TagAttribute;
+import java.util.Map;
+
+public final class RenderPropertyRule extends MetaRule {
+
+
+    final static class HideNoSelectionLiteralMetadata extends Metadata {
+        private final String hideOption;
+
+        public HideNoSelectionLiteralMetadata(String hideOption) {
+            this.hideOption = hideOption;
+        }
+
+        @Override
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            Map<String, Object> attributes = ((UIInput) instance).getAttributes();
+            attributes.put("hideNoSelectionOption", Boolean.valueOf(hideOption));
+        }
+    }
+
+
+    final static class HideNoSelectionExpressionMetadata extends Metadata {
+        private final TagAttribute attr;
+
+        public HideNoSelectionExpressionMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        @Override
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((UIComponent) instance).setValueExpression("hideNoSelectionOption",
+                                                        attr.getValueExpression(ctx, Boolean.class));
+        }
+    }
+
+    public final static RenderPropertyRule Instance = new RenderPropertyRule();
+
+    @Override
+    public Metadata applyRule(String name, TagAttribute attribute,
+                              MetadataTarget meta) {
+
+
+        if ("hideNoSelectionOption".equals(name)) {
+            if (attribute.isLiteral()) {
+                return new HideNoSelectionLiteralMetadata(attribute.getValue());
+            } else {
+                return new HideNoSelectionExpressionMetadata(attribute);
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/TagHandlerDelegateFactoryImpl.java b/com/sun/faces/facelets/tag/jsf/TagHandlerDelegateFactoryImpl.java
new file mode 100644
index 0000000..ffa493e
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/TagHandlerDelegateFactoryImpl.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.tag.jsf.html.ScriptResourceDelegate;
+import com.sun.faces.facelets.tag.jsf.html.ScriptResourceHandler;
+import com.sun.faces.facelets.tag.jsf.html.StylesheetResourceDelegate;
+import com.sun.faces.facelets.tag.jsf.html.StylesheetResourceHandler;
+
+import javax.faces.view.facelets.*;
+
+public class TagHandlerDelegateFactoryImpl extends TagHandlerDelegateFactory {
+
+    public TagHandlerDelegateFactoryImpl() {
+    }
+
+    @Override
+    public TagHandlerDelegate createComponentHandlerDelegate(ComponentHandler owner) {
+        if (owner instanceof StylesheetResourceHandler) {
+            return new StylesheetResourceDelegate(owner);
+        } else if (owner instanceof ScriptResourceHandler) {
+            return new ScriptResourceDelegate(owner);
+        } else {
+            return new ComponentTagHandlerDelegateImpl(owner);
+        }
+    }
+
+    @Override
+    public TagHandlerDelegate createValidatorHandlerDelegate(ValidatorHandler owner) {
+        return new ValidatorTagHandlerDelegateImpl(owner);
+    }
+
+    @Override
+    public TagHandlerDelegate createConverterHandlerDelegate(ConverterHandler owner) {
+        return new ConverterTagHandlerDelegateImpl(owner);
+    }
+
+    @Override
+    public TagHandlerDelegate createBehaviorHandlerDelegate(BehaviorHandler owner) {
+        return new BehaviorTagHandlerDelegateImpl(owner);
+    }
+    
+    
+}
diff --git a/com/sun/faces/facelets/tag/jsf/ValidatorTagHandlerDelegateImpl.java b/com/sun/faces/facelets/tag/jsf/ValidatorTagHandlerDelegateImpl.java
new file mode 100644
index 0000000..1d7b5ec
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/ValidatorTagHandlerDelegateImpl.java
@@ -0,0 +1,262 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.component.validator.ComponentValidators;
+import com.sun.faces.facelets.tag.MetaRulesetImpl;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.RequestStateManager;
+
+import javax.el.ValueExpression;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.faces.view.AttachedObjectHandler;
+import javax.faces.view.facelets.*;
+import java.io.IOException;
+import java.util.Set;
+import java.util.HashSet;
+
+public class ValidatorTagHandlerDelegateImpl extends TagHandlerDelegate implements AttachedObjectHandler {
+
+    protected final ValidatorHandler owner;
+    private final boolean wrapping;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ValidatorTagHandlerDelegateImpl(ValidatorHandler owner) {
+
+        this.owner = owner;
+        wrapping = isWrapping();
+
+
+    }
+
+
+    // ----------------------------------------- Methods from TagHandlerDelegate
+
+
+    @Override
+    public void apply(FaceletContext ctx, UIComponent parent)
+    throws IOException {
+
+        ComponentSupport.copyPassthroughAttributes(ctx, parent, owner.getTag());
+        if (wrapping) {
+            applyWrapping(ctx, parent);
+        } else {
+            applyNested(ctx, parent);
+        }
+
+    }
+
+
+    @Override
+    public MetaRuleset createMetaRuleset(Class type) {
+
+        Util.notNull("type", type);
+        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
+        
+        return m.ignore("binding").ignore("disabled").ignore("for");
+
+    }
+    
+
+    // -------------------------------------- Methods from AttachedObjectHandler
+
+
+    @SuppressWarnings({"unchecked"})
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+
+        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+        EditableValueHolder evh = (EditableValueHolder) parent;
+        if (owner.isDisabled(ctx)) {
+            Set<String> disabledIds = (Set<String>)
+                  RequestStateManager.get(context, RequestStateManager.DISABLED_VALIDATORS);
+            if (disabledIds == null) {
+                disabledIds = new HashSet<String>(3);
+                RequestStateManager.set(context,
+                                        RequestStateManager.DISABLED_VALIDATORS,
+                                        disabledIds);
+            }
+            disabledIds.add(owner.getValidatorId(ctx));
+            return;
+        }
+
+        ValueExpression ve = null;
+        Validator v = null;
+        if (owner.getBinding() != null) {
+            ve = owner.getBinding().getValueExpression(ctx, Validator.class);
+            v = (Validator) ve.getValue(ctx);
+        }
+        if (v == null) {
+            v = this.createValidator(ctx);
+            if (ve != null) {
+                ve.setValue(ctx, v);
+            }
+        }
+        if (v == null) {
+            throw new TagException(owner.getTag(), "No Validator was created");
+        }
+        owner.setAttributes(ctx, v);
+        
+        Validator[] validators = evh.getValidators();
+        boolean found = false;
+        
+        for (Validator validator : validators) {
+            if (validator.getClass().equals(v.getClass())) {
+                found = true;
+                break;
+            }
+        }
+        
+        if (!found) {
+            evh.addValidator(v);
+        }
+    }
+
+
+    public String getFor() {
+
+        String result = null;
+        TagAttribute attr = owner.getTagAttribute("for");
+        
+        if (null != attr) {
+            if (attr.isLiteral()) {
+                result = attr.getValue();
+            } else {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                result = (String)attr.getValueExpression(ctx, String.class).getValue(ctx);
+            }
+        }
+        return result;
+        
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected ComponentValidators.ValidatorInfo createValidatorInfo(FaceletContext ctx) {
+
+        return new ComponentValidators.ValidatorInfo(ctx, owner);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    // Tests whether the valiator tag is wrapping other tags.
+    private boolean isWrapping() {
+
+        // Would be nice if there was some easy way to determine whether
+        // we are a leaf handler.  However, even leaf handlers have a
+        // non-null nextHandler - the CompilationUnit.LEAF instance.
+        // We assume that if we've got a TagHandler or CompositeFaceletHandler
+        // as our nextHandler, we are not a leaf.
+        return ((owner.getValidatorConfig().getNextHandler() instanceof TagHandler) ||
+                (owner.getValidatorConfig().getNextHandler() instanceof CompositeFaceletHandler));
+        
+    }
+
+
+    private void applyWrapping(FaceletContext ctx,
+                               UIComponent parent) throws IOException {
+
+        ComponentValidators validators = ComponentValidators.getValidators(ctx.getFacesContext(), true);
+        validators.pushValidatorInfo(createValidatorInfo(ctx));
+        owner.getValidatorConfig().getNextHandler().apply(ctx, parent);
+        validators.popValidatorInfo();
+
+    }
+
+
+    private void applyNested(FaceletContext ctx,
+                             UIComponent parent) {
+
+        // only process if it's been created
+        if (!ComponentHandler.isNew(parent)) {
+            return;
+        }
+
+        if (parent instanceof EditableValueHolder) {
+            applyAttachedObject(ctx.getFacesContext(), parent);
+        } else if (UIComponent.isCompositeComponent(parent)) {
+            if (null == owner.getFor()) {
+                // PENDING(): I18N
+                throw new TagException(owner.getTag(),
+                                       "validator tags nested within composite components must have a non-null \"for\" attribute");
+            }
+            // Allow the composite component to know about the target
+            // component.
+            CompositeComponentTagHandler.getAttachedObjectHandlers(parent).add(owner);
+        } else {
+            throw new TagException(owner.getTag(),
+                    "Parent not an instance of EditableValueHolder: " + parent);
+        }
+
+    }
+
+    
+    /**
+     * Template method for creating a Validator instance
+     * 
+     * @param ctx
+     *            FaceletContext to use
+     * @return a new Validator instance
+     */
+    private Validator createValidator(FaceletContext ctx) {
+
+        String id = owner.getValidatorId(ctx);
+        if (id == null) {
+            throw new TagException(
+                    owner.getTag(),
+                    "A validator id was not specified. Typically the validator id is set in the constructor ValidateHandler(ValidatorConfig)");
+        }
+        return ctx.getFacesContext().getApplication().createValidator(id);
+
+    }
+
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/ValueHolderRule.java b/com/sun/faces/facelets/tag/jsf/ValueHolderRule.java
new file mode 100644
index 0000000..726db39
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/ValueHolderRule.java
@@ -0,0 +1,175 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf;
+
+import com.sun.faces.facelets.el.LegacyValueBinding;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectBoolean;
+import javax.faces.component.ValueHolder;
+import javax.faces.convert.Converter;
+import javax.faces.view.facelets.*;
+
+/**
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ValueHolderRule.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+final class ValueHolderRule extends MetaRule {
+
+    final static class LiteralConverterMetadata extends Metadata {
+
+        private final String converterId;
+
+        public LiteralConverterMetadata(String converterId) {
+            this.converterId = converterId;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((ValueHolder) instance).setConverter(ctx.getFacesContext()
+                    .getApplication().createConverter(this.converterId));
+        }
+    }
+
+    final static class DynamicConverterMetadata extends Metadata {
+
+        private final TagAttribute attr;
+
+        public DynamicConverterMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((UIComponent) instance).setValueBinding("converter",
+                    new LegacyValueBinding(attr.getValueExpression(ctx,
+                            Converter.class)));
+        }
+    }
+
+    final static class DynamicConverterMetadata2 extends Metadata {
+
+        private final TagAttribute attr;
+
+        public DynamicConverterMetadata2(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((UIComponent) instance).setValueExpression("converter", attr
+                    .getValueExpression(ctx, Converter.class));
+        }
+    }
+
+    final static class DynamicValueExpressionMetadata extends Metadata {
+
+        private final TagAttribute attr;
+
+        public DynamicValueExpressionMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            UIComponent c = (UIComponent) instance;
+            c.setValueExpression("value", attr.getValueExpression(ctx, ((c instanceof UISelectBoolean)
+                                                                        ? Boolean.class
+                                                                        : Object.class)));
+        }
+    }
+
+    final static class DynamicValueBindingMetadata extends Metadata {
+
+        private final TagAttribute attr;
+
+        public DynamicValueBindingMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            ((UIComponent) instance).setValueBinding("value",
+                    new LegacyValueBinding(attr.getValueExpression(ctx,
+                            Object.class)));
+        }
+    }
+
+    public final static ValueHolderRule Instance = new ValueHolderRule();
+
+    public Metadata applyRule(String name, TagAttribute attribute,
+            MetadataTarget meta) {
+        if (meta.isTargetInstanceOf(ValueHolder.class)) {
+
+            if ("converter".equals(name)) {
+                if (attribute.isLiteral()) {
+                    return new LiteralConverterMetadata(attribute.getValue());
+                } else {
+                    return new DynamicConverterMetadata2(attribute);
+                }
+            }
+
+            if ("value".equals(name)) {
+                //if (attribute.isLiteral()) {
+                //    return new LiteralValueMetadata(attribute.getValue());
+                //} else {
+                return new DynamicValueExpressionMetadata(attribute);
+                //}
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandler.java b/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandler.java
new file mode 100644
index 0000000..9ce9352
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandler.java
@@ -0,0 +1,182 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.util.ReflectionUtil;
+
+import javax.el.ValueExpression;
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+import javax.faces.view.ActionSource2AttachedObjectHandler;
+import javax.faces.view.facelets.*;
+import java.io.Serializable;
+
+/**
+ * Register an ActionListener instance on the UIComponent associated with the
+ * closest parent UIComponent custom action. <p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/actionListener.html">tag
+ * documentation</a>.
+ *
+ * @author Jacob Hookom
+ * @see javax.faces.event.ActionListener
+ * @see javax.faces.component.ActionSource
+ */
+public final class ActionListenerHandler extends ActionListenerHandlerBase
+      implements ActionSource2AttachedObjectHandler {
+
+    private final static class LazyActionListener
+          implements ActionListener, Serializable {
+
+        private static final long serialVersionUID = -9202120013153262119L;
+
+        private final String type;
+        private final ValueExpression binding;
+
+        public LazyActionListener(String type, ValueExpression binding) {
+            this.type = type;
+            this.binding = binding;
+        }
+
+        public void processAction(ActionEvent event)
+              throws AbortProcessingException {
+            ActionListener instance = null;
+            FacesContext faces = FacesContext.getCurrentInstance();
+            if (faces == null) {
+                return;
+            }
+            if (this.binding != null) {
+                instance = (ActionListener) binding
+                      .getValue(faces.getELContext());
+            }
+            if (instance == null && this.type != null) {
+                try {
+                    instance = (ActionListener) ReflectionUtil
+                          .forName(this.type).newInstance();
+                } catch (Exception e) {
+                    throw new AbortProcessingException(
+                          "Couldn't Lazily instantiate ValueChangeListener",
+                          e);
+                }
+                if (this.binding != null) {
+                    binding.setValue(faces.getELContext(), instance);
+                }
+            }
+            if (instance != null) {
+                instance.processAction(event);
+            }
+        }
+    }
+
+    private final TagAttribute binding;
+
+    private String listenerType;
+
+    private final TagAttribute typeAttribute;
+
+    /**
+     * @param config
+     */
+    public ActionListenerHandler(TagConfig config) {
+        super(config);
+        this.binding = this.getAttribute("binding");
+        this.typeAttribute = this.getAttribute("type");
+        if (null != this.typeAttribute) {
+            String stringType = null;
+            if (!this.typeAttribute.isLiteral()) {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                stringType = (String) this.typeAttribute.getValueExpression(ctx, String.class).getValue(ctx);
+            } else {
+                stringType = this.typeAttribute.getValue();
+            }
+            checkType(stringType);
+            this.listenerType = stringType;
+        } else {
+            this.listenerType = null;
+        }
+    }
+
+
+    @Override
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+        FaceletContext ctx = (FaceletContext) context.getAttributes()
+              .get(FaceletContext.FACELET_CONTEXT_KEY);
+        ActionSource as = (ActionSource) parent;
+        ValueExpression b = null;
+        if (this.binding != null) {
+            b = this.binding.getValueExpression(ctx, ActionListener.class);
+        }
+        ActionListener listener = new LazyActionListener(this.listenerType, b);
+        as.addActionListener(listener);
+    }
+
+
+    private void checkType(String type) {
+        try {
+            ReflectionUtil.forName(type);
+        } catch (ClassNotFoundException e) {
+            throw new TagAttributeException(typeAttribute,
+                "Couldn't qualify ActionListener", e);
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandlerBase.java b/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandlerBase.java
new file mode 100644
index 0000000..aab27f8
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandlerBase.java
@@ -0,0 +1,145 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
+
+import javax.faces.application.Resource;
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.ActionSource2AttachedObjectHandler;
+import javax.faces.view.facelets.*;
+import java.io.IOException;
+
+/**
+ * Register an ActionListener instance on the UIComponent associated with the
+ * closest parent UIComponent custom action. <p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/actionListener.html">tag
+ * documentation</a>.
+ *
+ * @author Jacob Hookom
+ * @see javax.faces.event.ActionListener
+ * @see javax.faces.component.ActionSource
+ */
+public abstract class ActionListenerHandlerBase extends TagHandlerImpl
+      implements ActionSource2AttachedObjectHandler {
+
+    /**
+     * @param config
+     */
+    public ActionListenerHandlerBase(TagConfig config) {
+        super(config);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+          throws IOException {
+        if (null == parent || !(ComponentHandler.isNew(parent))) {
+            return;
+        }
+
+        if (parent instanceof ActionSource) {
+            applyAttachedObject(ctx.getFacesContext(), parent);
+        } else if (parent.getAttributes()
+              .containsKey(Resource.COMPONENT_RESOURCE_KEY)) {
+            if (null == getFor()) {
+                // PENDING(): I18N
+                throw new TagException(this.tag,
+                                       "actionListener tags nested within composite components must have a non-null \"for\" attribute");
+            }
+            // Allow the composite component to know about the target
+            // component.
+            CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
+                  .add(this);
+
+        } else {
+            throw new TagException(this.tag,
+                                   "Parent is not of type ActionSource, type is: "
+                                   + parent);
+        }
+    }
+
+    public abstract void applyAttachedObject(FacesContext context, UIComponent parent);
+
+
+    public String getFor() {
+        String result = null;
+        TagAttribute attr = this.getAttribute("for");
+
+        if (null != attr) {
+            if (attr.isLiteral()) {
+                result = attr.getValue();
+            } else {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                result = (String)attr.getValueExpression(ctx, String.class).getValue(ctx);
+            }
+        }
+        return result;
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/AjaxHandler.java b/com/sun/faces/facelets/tag/jsf/core/AjaxHandler.java
new file mode 100644
index 0000000..024e6d9
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/AjaxHandler.java
@@ -0,0 +1,468 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.component.behavior.AjaxBehaviors;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
+
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.MethodNotFoundException;
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.component.behavior.AjaxBehavior;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.AjaxBehaviorEvent;
+import javax.faces.event.AjaxBehaviorListener;
+import javax.faces.view.AttachedObjectTarget;
+import javax.faces.view.BehaviorHolderAttachedObjectHandler;
+import javax.faces.view.BehaviorHolderAttachedObjectTarget;
+import javax.faces.view.facelets.*;
+import java.beans.BeanDescriptor;
+import java.beans.BeanInfo;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TreeSet;
+
+
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Enable</span>
+ * one or more components in the view
+ * to perform Ajax operations.  This tag handler must create an instance
+ * of {@link javax.faces.component.behavior.AjaxBehavior} using the tag attribute
+ * values.  <div class="changed_modified_2_2">The <code>events</code> attribute for
+ * this tag that can be a <code>ValueExpression</code> must be evaluated at tag
+ * execution time since the event name is used in the process of <code>Behavior</code>
+ * creation.</div>  If this tag is nested within a single
+ * {@link ClientBehaviorHolder} component:
+ * <ul>
+ * <li>If the <code>events</code> attribute value is not specified, 
+ * obtain the default event name by calling {@link ClientBehaviorHolder#getDefaultEventName}.
+ * If that returns <code>null</code> throw an <code>exception</code>.</li>
+ * <li>If the <code>events</code> attribute value is specified, ensure it
+ * that it exists in the <code>Collection</code> returned from a call to
+ * {@link ClientBehaviorHolder#getEventNames} and throw an <code>exception</code> if
+ * it doesn't exist.</li>
+ * <li>Add the {@link AjaxBehavior} instance to the {@link ClientBehaviorHolder}
+ * component by calling {@link ClientBehaviorHolder#addClientBehavior} passing <code>event</code>
+ * and the {@link AjaxBehavior} instance.</li> 
+ * </ul>
+ * <br/><br/>
+ * Check for the existence of the Ajax resource by calling 
+ * <code>UIViewRoot.getComponentResources()</code>.  If
+ * the Ajax resource does not exist, create a <code>UIOutput</code> component
+ * instance and set the renderer type to <code>javax.faces.resource.Script</code>.
+ * Set the the following attributes in the component's attribute <code>Map</code>:
+ * <code>library</code> with the value <code>javax.faces</code> and 
+ * <code>name</code> with the value <code>jsf.js</code>.  Install the component
+ * resource using <code>UIViewRoot.addComponentResource()</code> and specifying
+ * <code>head</code> as the <code>target</code> argument.</p> 
+ *
+ * If this tag has component children, add the {@link AjaxBehavior} to 
+ * {@link AjaxBehaviors} by calling {@link AjaxBehaviors#pushBehavior}. As 
+ * subsequent child components that implement the {@link ClientBehaviorHolder} interface 
+ * are evaluated this {@link AjaxBehavior} instance must be added as a behavior to
+ * the component.
+ * </p>
+ * @version $Id: AjaxHandler.java 5369 2008-09-08 19:53:45Z rogerk $
+ */
+public final class AjaxHandler extends TagHandlerImpl implements BehaviorHolderAttachedObjectHandler {
+
+    private final TagAttribute event;
+    private final TagAttribute execute;
+    private final TagAttribute render;
+    private final TagAttribute onevent;
+    private final TagAttribute onerror;
+    private final TagAttribute disabled;
+    private final TagAttribute immediate;
+    private final TagAttribute resetValues;
+    private final TagAttribute listener;
+    private final TagAttribute delay;
+
+    private final boolean wrapping;
+
+    /**
+     * @param config
+     */
+    public AjaxHandler(TagConfig config) {
+        super(config);
+        this.event = this.getAttribute("event");
+        this.execute = this.getAttribute("execute");
+        this.render = this.getAttribute("render");
+        this.onevent = this.getAttribute("onevent");
+        this.onerror = this.getAttribute("onerror");
+        this.disabled = this.getAttribute("disabled");
+        this.immediate = this.getAttribute("immediate");
+        this.resetValues = this.getAttribute("resetValues");
+        this.listener = this.getAttribute("listener");
+        this.delay = this.getAttribute("delay");
+
+        this.wrapping = isWrapping();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+          throws IOException {
+
+        String eventName = getEventName();
+
+        if (this.wrapping) {
+            applyWrapping(ctx, parent, eventName);
+        }  else {
+            applyNested(ctx, parent, eventName);
+        }
+    }
+    
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+        applyAttachedObject(ctx, parent, getEventName());
+    }
+
+    /* (non-Javadoc)
+     * @see javax.faces.view.AttachedObjectHandler#getFor()
+     */
+    public String getFor() {
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see javax.faces.view.BehaviorHolderAttachedObjectHandler#getEventName()
+     */
+    public String getEventName() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+        return (this.event != null) ? this.event.getValue(ctx) : null;
+    }
+
+    // Tests whether the <f:ajax> is wrapping other tags.
+    private boolean isWrapping() {
+
+        // Would be nice if there was some easy way to determine whether
+        // we are a leaf handler.  However, even leaf handlers have a
+        // non-null nextHandler - the CompilationUnit.LEAF instance.
+        // We assume that if we've got a TagHandler or CompositeFaceletHandler
+        // as our nextHandler, we are not a leaf.
+        return ((this.nextHandler instanceof TagHandler) || 
+                (this.nextHandler instanceof CompositeFaceletHandler));
+    }
+
+    // Applies a wrapping AjaxHandler by pushing/popping the AjaxBehavior
+    // to the AjaxBeahviors object.
+    private void applyWrapping(FaceletContext ctx, 
+                               UIComponent parent,
+                               String eventName) throws IOException {
+
+        // In the wrapping case, we assume that some wrapped component
+        // is going to be Ajax enabled and install the Ajax resource.
+        installAjaxResourceIfNecessary();
+
+        AjaxBehavior ajaxBehavior = createAjaxBehavior(ctx, eventName);
+
+        // We leverage AjaxBehaviors to support the wrapping case.  We
+        // push/pop the AjaxBehavior instance on AjaxBehaviors so that
+        // child tags will have access to it.
+        FacesContext context = ctx.getFacesContext();
+        AjaxBehaviors ajaxBehaviors = AjaxBehaviors.getAjaxBehaviors(context, true);
+        ajaxBehaviors.pushBehavior(context, ajaxBehavior, eventName); 
+
+        nextHandler.apply(ctx, parent);
+
+        ajaxBehaviors.popBehavior();
+    }
+
+    // Applies a nested AjaxHandler by adding the AjaxBehavior to the
+    // parent component.
+    private void applyNested(FaceletContext ctx, 
+                             UIComponent parent,
+                             String eventName) {
+        
+        if (!ComponentHandler.isNew(parent)) {
+            return;
+        }
+
+        // Composite component case
+        if (UIComponent.isCompositeComponent(parent)) {
+            // Check composite component event name:
+            boolean tagApplied = false;
+            if (parent instanceof ClientBehaviorHolder) {
+                applyAttachedObject(ctx, parent, eventName);  // error here will propagate up
+                tagApplied = true;
+            }
+            BeanInfo componentBeanInfo = (BeanInfo) parent.getAttributes().get(
+                  UIComponent.BEANINFO_KEY);
+            if (null == componentBeanInfo) {
+                throw new TagException(
+                      tag,
+                      "Error: enclosing composite component does not have BeanInfo attribute");
+            }
+            BeanDescriptor componentDescriptor = componentBeanInfo.getBeanDescriptor();
+            if (null == componentDescriptor) {
+                throw new TagException(
+                      tag,
+                      "Error: enclosing composite component BeanInfo does not have BeanDescriptor");
+            }
+            List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
+                  componentDescriptor
+                        .getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
+            if (null == targetList && !tagApplied) {
+                throw new TagException(
+                      tag,
+                      "Error: enclosing composite component does not support behavior events");
+            }
+            boolean supportedEvent = false;
+            for (AttachedObjectTarget target : targetList) {
+                if (target instanceof BehaviorHolderAttachedObjectTarget) {
+                    BehaviorHolderAttachedObjectTarget behaviorTarget = (BehaviorHolderAttachedObjectTarget) target;
+                    if ((null != eventName && eventName.equals(behaviorTarget.getName()))
+                        || (null == eventName && behaviorTarget.isDefaultEvent())) {
+                        supportedEvent = true;
+                        break;
+                    }
+                }
+            }
+            if (supportedEvent) {
+                CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
+                      .add(this);
+            } else {
+                if (!tagApplied) {
+                    throw new TagException(
+                            tag,
+                            "Error: enclosing composite component does not support event "
+                            + eventName);
+                }
+            }
+        } else if (parent instanceof ClientBehaviorHolder) {
+            applyAttachedObject(ctx, parent, eventName);
+        } else {
+            throw new TagException(this.tag,
+                                   "Unable to attach <f:ajax> to non-ClientBehaviorHolder parent");
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     * @param ctx
+     * @param parent
+     * @param eventName
+     */
+    private void applyAttachedObject(FaceletContext ctx,
+                                     UIComponent parent,
+                                     String eventName) {
+        ClientBehaviorHolder bHolder = (ClientBehaviorHolder) parent;
+
+        if (null == eventName) {
+            eventName = bHolder.getDefaultEventName();
+            if (null == eventName) {
+                throw new TagException(this.tag,
+                    "Event attribute could not be determined: "
+                        + eventName);
+            }
+        } else {
+            Collection<String> eventNames = bHolder.getEventNames();
+            if (!eventNames.contains(eventName)) {
+                throw new TagException(this.tag, 
+                    getUnsupportedEventMessage(eventName, eventNames, parent));
+            }
+        }
+
+        AjaxBehavior ajaxBehavior = createAjaxBehavior(ctx, eventName);
+        bHolder.addClientBehavior(eventName, ajaxBehavior);
+        installAjaxResourceIfNecessary();
+    }
+
+    // Construct our AjaxBehavior from tag parameters.
+    private AjaxBehavior createAjaxBehavior(FaceletContext ctx, String eventName) {
+        Application application = ctx.getFacesContext().getApplication();
+        AjaxBehavior behavior = (AjaxBehavior)application.createBehavior(
+                                                  AjaxBehavior.BEHAVIOR_ID);
+
+        setBehaviorAttribute(ctx, behavior, this.onevent, String.class);
+        setBehaviorAttribute(ctx, behavior, this.onerror, String.class);
+        setBehaviorAttribute(ctx, behavior, this.disabled, Boolean.class);
+        setBehaviorAttribute(ctx, behavior, this.immediate, Boolean.class);
+        setBehaviorAttribute(ctx, behavior, this.resetValues, Boolean.class);
+        setBehaviorAttribute(ctx, behavior, this.execute, Object.class);
+        setBehaviorAttribute(ctx, behavior, this.render, Object.class);
+        setBehaviorAttribute(ctx, behavior, this.delay, String.class);
+
+        if (null != listener) {
+            behavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(
+                this.listener.getMethodExpression(ctx, Object.class, new Class[] { AjaxBehaviorEvent.class }),
+                this.listener.getMethodExpression(ctx, Object.class, new Class[] { })));
+        }
+
+        return behavior;
+    }
+
+    // Sets the value from the TagAttribute on the behavior
+    private void setBehaviorAttribute(FaceletContext ctx,
+                                      AjaxBehavior behavior,
+                                      TagAttribute attr,
+                                      Class type) {
+
+        if (attr != null) {
+            behavior.setValueExpression(attr.getLocalName(),
+                                        attr.getValueExpression(ctx, type));
+        }    
+    }
+
+    // Only install the Ajax resource if it doesn't exist.
+    // The resource component will be installed with the target "head".
+    //
+    private void installAjaxResourceIfNecessary() {
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (RenderKitUtils.hasScriptBeenRendered(context)) {
+            // Already included, return
+            return;
+        }
+
+        final String name = "jsf.js";
+        final String library = "javax.faces";
+
+        if (RenderKitUtils.hasResourceBeenInstalled(context, name, library)) {
+            RenderKitUtils.setScriptAsRendered(context);
+            return;
+        }
+        UIOutput output = new UIOutput();
+        output.setRendererType("javax.faces.resource.Script");
+        output.getAttributes().put("name", name);
+        output.getAttributes().put("library", library);
+        context.getViewRoot().addComponentResource(context, output, "head");
+
+        // Set the context to record script as included
+        RenderKitUtils.setScriptAsRendered(context);
+
+    }
+
+    // Returns an error message for the case where the <f:ajax> event
+    // attribute specified an unknown/unsupported event.
+    private String getUnsupportedEventMessage(String             eventName,
+                                              Collection<String> eventNames,
+                                              UIComponent        parent) {
+        StringBuilder builder = new StringBuilder(100);
+        builder.append("'");
+        builder.append(eventName);
+        builder.append("' is not a supported event for ");
+        builder.append(parent.getClass().getSimpleName());
+        builder.append(".  Please specify one of these supported event names: ");
+
+        // Might as well sort the event names for a cleaner error message.
+        Collection<String> sortedEventNames = new TreeSet<String>(eventNames);
+        Iterator<String> iter = sortedEventNames.iterator();
+
+        boolean hasNext = iter.hasNext();
+        while (hasNext) {
+            builder.append(iter.next());
+
+            hasNext = iter.hasNext();
+
+            if (hasNext) {
+                builder.append(", ");
+            }
+        }
+
+        builder.append(".");
+
+        return builder.toString();
+    }
+}
+
+class AjaxBehaviorListenerImpl implements AjaxBehaviorListener, Serializable {
+    private static final long serialVersionUID = -6056525197409773897L;
+
+    private MethodExpression oneArgListener;
+    private MethodExpression noArgListener;
+
+    // Necessary for state saving
+    public AjaxBehaviorListenerImpl() {}
+
+    public AjaxBehaviorListenerImpl(MethodExpression oneArg, MethodExpression noArg) {
+        this.oneArgListener = oneArg;
+        this.noArgListener = noArg;
+    }
+
+    public void processAjaxBehavior(AjaxBehaviorEvent event) throws AbortProcessingException {
+        final ELContext elContext = FacesContext.getCurrentInstance().getELContext();
+        try{
+            noArgListener.invoke(elContext, new Object[]{});
+        } catch (MethodNotFoundException mnfe) {
+            // Attempt to call public void method(AjaxBehaviorEvent event)
+            oneArgListener.invoke(elContext, new Object[]{event});
+        } catch (IllegalArgumentException iae) {
+            // Attempt to call public void method(AjaxBehaviorEvent event)
+            oneArgListener.invoke(elContext, new Object[]{event});
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/AttributeHandler.java b/com/sun/faces/facelets/tag/jsf/core/AttributeHandler.java
new file mode 100644
index 0000000..00f97ac
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/AttributeHandler.java
@@ -0,0 +1,131 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import java.io.IOException;
+
+/**
+ * Sets the specified name and attribute on the parent UIComponent. If the
+ * "value" specified is not a literal, it will instead set the ValueExpression
+ * on the UIComponent.
+ * <p />
+ * See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/attribute.html">tag
+ * documentation</a>.
+ * 
+ * @see javax.faces.component.UIComponent#getAttributes()
+ * @see javax.faces.component.UIComponent#setValueExpression(java.lang.String,
+ *      javax.el.ValueExpression)
+ * @author Jacob Hookom
+ */
+public final class AttributeHandler extends TagHandlerImpl 
+    implements javax.faces.view.facelets.AttributeHandler {
+
+    private final TagAttribute name;
+
+    private final TagAttribute value;
+
+    /**
+     * @param config
+     */
+    public AttributeHandler(TagConfig config) {
+        super(config);
+        this.name = this.getRequiredAttribute("name");
+        this.value = this.getRequiredAttribute("value");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        if (parent == null) {
+            throw new TagException(this.tag, "Parent UIComponent was null");
+        }
+
+        // only process if the parent is new to the tree
+        if (parent.getParent() == null) {
+            String n = getAttributeName(ctx);
+            if (!parent.getAttributes().containsKey(n)) {
+                if (this.value.isLiteral()) {
+                    parent.getAttributes().put(n, this.value.getValue());
+                } else {
+                    parent.setValueExpression(n, this.value.getValueExpression(ctx, Object.class));
+                }
+            }
+        }
+    }
+
+
+    // javax.faces.view.facelets.tag.AttributeHandler.getAttributeName()
+    // implementation.
+    public String getAttributeName(FaceletContext ctxt) {
+        return this.name.getValue(ctxt);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/AttributesHandler.java b/com/sun/faces/facelets/tag/jsf/core/AttributesHandler.java
new file mode 100644
index 0000000..eeb7872
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/AttributesHandler.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import java.io.IOException;
+import java.util.Map;
+import javax.el.ValueExpression;
+
+public final class AttributesHandler extends TagHandlerImpl 
+    implements javax.faces.view.facelets.AttributeHandler {
+
+    private final TagAttribute value;
+
+    public AttributesHandler(TagConfig config) {
+        super(config);
+        this.value = this.getRequiredAttribute("value");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        if (parent == null) {
+            throw new TagException(this.tag, "Parent UIComponent was null");
+        }
+
+        // only process if the parent is new to the tree
+        if (parent.getParent() == null) {
+            
+            Map<String, Object> tagAttrs = (Map<String, Object>) this.value.getObject(ctx, Map.class);
+            for (Map.Entry<String, Object> cur : tagAttrs.entrySet()) {
+                String n = cur.getKey();
+                Object curVal = cur.getValue();
+                if (!parent.getAttributes().containsKey(n)) {
+                    
+                    if (curVal instanceof ValueExpression) {
+                        parent.setValueExpression(n, (ValueExpression) curVal);
+                    } else {
+                        parent.getAttributes().put(n, curVal);
+                    }
+                    
+                }
+            }
+            
+            
+        }
+    }
+
+
+    // javax.faces.view.facelets.tag.AttributeHandler.getAttributeName()
+    // implementation.
+    public String getAttributeName(FaceletContext ctxt) {
+        return "value";
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ConvertDateTimeHandler.java b/com/sun/faces/facelets/tag/jsf/core/ConvertDateTimeHandler.java
new file mode 100644
index 0000000..c5c0744
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ConvertDateTimeHandler.java
@@ -0,0 +1,163 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.convert.Converter;
+import javax.faces.convert.DateTimeConverter;
+import javax.faces.view.facelets.*;
+import java.util.TimeZone;
+
+/**
+ * Register a DateTimeConverter instance on the UIComponent associated with the
+ * closest parent UIComponent custom action. <p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/convertDateTime.html">tag
+ * documentation</a>.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ConvertDateTimeHandler.java 10320 2012-07-24 03:05:00Z mriem $
+ */
+public final class ConvertDateTimeHandler extends ConverterHandler {
+
+    private final TagAttribute dateStyle;
+
+    private final TagAttribute locale;
+
+    private final TagAttribute pattern;
+
+    private final TagAttribute timeStyle;
+
+    private final TagAttribute timeZone;
+
+    private final TagAttribute type;
+
+    /**
+     * @param config
+     */
+    public ConvertDateTimeHandler(ConverterConfig config) {
+        super(config);
+        this.dateStyle = this.getAttribute("dateStyle");
+        this.locale = this.getAttribute("locale");
+        this.pattern = this.getAttribute("pattern");
+        this.timeStyle = this.getAttribute("timeStyle");
+        this.timeZone = this.getAttribute("timeZone");
+        this.type = this.getAttribute("type");
+    }
+
+    /**
+     * Returns a new DateTimeConverter
+     * 
+     * @see DateTimeConverter
+     */
+    protected Converter createConverter(FaceletContext ctx)
+            throws FacesException, ELException, FaceletException {
+        return ctx.getFacesContext().getApplication().createConverter(DateTimeConverter.CONVERTER_ID);
+
+    }
+
+    /**
+     * Implements tag spec, see taglib documentation.
+     */
+    @Override
+    public void setAttributes(FaceletContext ctx, Object obj) {
+        DateTimeConverter c = (DateTimeConverter) obj;
+        if (this.locale != null) {
+            c.setLocale(ComponentSupport.getLocale(ctx, this.locale));
+        }
+        if (this.pattern != null) {
+            c.setPattern(this.pattern.getValue(ctx));
+        } else {
+            if (this.type != null) {
+                c.setType(this.type.getValue(ctx));
+            }
+            if (this.dateStyle != null) {
+                c.setDateStyle(this.dateStyle.getValue(ctx));
+            }
+            if (this.timeStyle != null) {
+                c.setTimeStyle(this.timeStyle.getValue(ctx));
+            }
+        }
+        
+        if (this.timeZone != null) {
+            Object t = this.timeZone.getObject(ctx);
+            if(t != null) {
+	            if (t instanceof TimeZone) {
+	                c.setTimeZone((TimeZone) t);
+	            } else if (t instanceof String) {
+	                TimeZone tz = TimeZone.getTimeZone((String) t);
+	                c.setTimeZone(tz);
+	            } else {
+	                throw new TagAttributeException(
+	                        this.tag,
+	                        this.timeZone,
+	                        "Illegal TimeZone, must evaluate to either a java.util.TimeZone or String, is type: "
+	                                + t.getClass());
+	            }
+            }
+        }
+    }
+
+    @Override
+    public MetaRuleset createMetaRuleset(Class type) {
+        return super.createMetaRuleset(type).ignoreAll();
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ConvertDelegateHandler.java b/com/sun/faces/facelets/tag/jsf/core/ConvertDelegateHandler.java
new file mode 100644
index 0000000..9f78391
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ConvertDelegateHandler.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.convert.Converter;
+import javax.faces.view.facelets.*;
+
+/**
+ * Register a named Converter instance on the UIComponent associated with the
+ * closest parent UIComponent custom action. <p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/converter.html">tag
+ * documentation</a>.
+ * 
+ * @author Jacob Hookom
+ */
+public final class ConvertDelegateHandler extends ConverterHandler {
+
+    private final TagAttribute converterId;
+
+    /**
+     * @param config
+     */
+    public ConvertDelegateHandler(ConverterConfig config) {
+        super(config);
+        this.converterId = this.getAttribute("converterId");
+    }
+
+    /**
+     * Uses the specified "converterId" to pull an instance from the Application
+     * 
+     * @see javax.faces.application.Application#createComponent(java.lang.String)
+     */
+    protected Converter createConverter(FaceletContext ctx)
+            throws FacesException, ELException, FaceletException {
+        return ctx.getFacesContext().getApplication().createConverter(
+                this.converterId.getValue(ctx));
+    }
+
+    protected MetaRuleset createMetaRuleset(Class type) {
+        return super.createMetaRuleset(type).ignoreAll();
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ConvertNumberHandler.java b/com/sun/faces/facelets/tag/jsf/core/ConvertNumberHandler.java
new file mode 100644
index 0000000..3cbb1ad
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ConvertNumberHandler.java
@@ -0,0 +1,117 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.convert.Converter;
+import javax.faces.convert.NumberConverter;
+import javax.faces.view.facelets.*;
+
+/**
+ * Register a NumberConverter instance on the UIComponent associated with the
+ * closest parent UIComponent custom action. <p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/convertNumber.html">tag
+ * documentation</a>.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ConvertNumberHandler.java 10337 2012-07-25 18:51:59Z mriem $
+ */
+public final class ConvertNumberHandler extends ConverterHandler {
+
+    private final TagAttribute locale;
+
+    /**
+     * @param config
+     */
+    public ConvertNumberHandler(ConverterConfig config) {
+        super(config);
+        this.locale = this.getAttribute("locale");
+    }
+
+    /**
+     * Returns a new NumberConverter
+     * 
+     * @see NumberConverter
+     */
+    protected Converter createConverter(FaceletContext ctx)
+            throws FacesException, ELException, FaceletException {
+        return ctx.getFacesContext().getApplication().createConverter(NumberConverter.CONVERTER_ID);
+    }
+
+    /* (non-Javadoc)
+     * @see com.sun.facelets.tag.ObjectHandler#setAttributes(com.sun.facelets.FaceletContext, java.lang.Object)
+     */
+    @Override
+    public void setAttributes(FaceletContext ctx, Object obj) {
+        super.setAttributes(ctx, obj);
+        NumberConverter c = (NumberConverter) obj;
+        if (this.locale != null) {
+            c.setLocale(ComponentSupport.getLocale(ctx, this.locale));
+        }
+    }
+
+    @Override
+    public MetaRuleset createMetaRuleset(Class type) {
+        return super.createMetaRuleset(type).ignore("locale");
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/CoreLibrary.java b/com/sun/faces/facelets/tag/jsf/core/CoreLibrary.java
new file mode 100644
index 0000000..0642ec6
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/CoreLibrary.java
@@ -0,0 +1,160 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.AbstractTagLibrary;
+
+import javax.faces.component.UIParameter;
+import javax.faces.component.UISelectItem;
+import javax.faces.component.UISelectItems;
+import javax.faces.component.UIViewAction;
+import javax.faces.component.UIViewParameter;
+import javax.faces.convert.DateTimeConverter;
+import javax.faces.convert.NumberConverter;
+import javax.faces.validator.*;
+
+/**
+ * For Tag details, see JSF Core <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/tld-summary.html">taglib
+ * documentation</a>.
+ *
+ * @author Jacob Hookom
+ * @version $Id: CoreLibrary.java 13288 2014-05-28 15:02:00Z edburns $
+ */
+public final class CoreLibrary extends AbstractTagLibrary {
+
+    public final static String Namespace =    "http://java.sun.com/jsf/core";
+    public final static String XMLNSNamespace = "http://xmlns.jcp.org/jsf/core";
+
+    public final static CoreLibrary Instance = new CoreLibrary();
+
+    public CoreLibrary() {
+        this(Namespace);
+    }
+    
+    public CoreLibrary(String namespace) {
+        super(namespace);
+        
+        this.addTagHandler("actionListener", ActionListenerHandler.class);
+
+        this.addTagHandler("ajax", AjaxHandler.class);
+
+        this.addTagHandler("attribute", AttributeHandler.class);
+
+        this.addTagHandler("attributes", AttributesHandler.class);
+
+        this.addTagHandler("passThroughAttribute", PassThroughAttributeHandler.class);
+
+        this.addTagHandler("passThroughAttributes", PassThroughAttributesHandler.class);
+
+        this.addConverter("convertDateTime", DateTimeConverter.CONVERTER_ID, ConvertDateTimeHandler.class);
+
+        this.addConverter("convertNumber", NumberConverter.CONVERTER_ID, ConvertNumberHandler.class);
+
+        this.addConverter("converter", null, ConvertDelegateHandler.class);
+
+        this.addTagHandler("event", EventHandler.class);
+
+        this.addTagHandler("facet", FacetHandler.class);
+
+        this.addTagHandler("metadata", MetadataHandler.class);
+
+        this.addTagHandler("loadBundle", LoadBundleHandler.class);
+
+        this.addTagHandler("resetValues", ResetValuesHandler.class);
+
+        this.addComponent("viewParam", UIViewParameter.COMPONENT_TYPE, null);
+        
+        this.addComponent("viewAction", UIViewAction.COMPONENT_TYPE, null);
+
+        this.addComponent("param", UIParameter.COMPONENT_TYPE, null);
+        
+        this.addTagHandler("phaseListener", PhaseListenerHandler.class);
+
+        this.addComponent("selectItem", UISelectItem.COMPONENT_TYPE, null);
+
+        this.addComponent("selectItems", UISelectItems.COMPONENT_TYPE, null);
+        
+        this.addTagHandler("setPropertyActionListener", SetPropertyActionListenerHandler.class);
+        
+        this.addComponent("subview", "javax.faces.NamingContainer", null);
+        
+        this.addValidator("validateBean", BeanValidator.VALIDATOR_ID);
+        
+        this.addValidator("validateLength", LengthValidator.VALIDATOR_ID);
+        
+        this.addValidator("validateLongRange", LongRangeValidator.VALIDATOR_ID);
+        
+        this.addValidator("validateDoubleRange", DoubleRangeValidator.VALIDATOR_ID);
+
+        this.addValidator("validateRegex", RegexValidator.VALIDATOR_ID);
+        
+        this.addValidator("validateRequired", RequiredValidator.VALIDATOR_ID);
+
+        this.addValidator("validator", null, ValidateDelegateHandler.class);
+
+        this.addTagHandler("valueChangeListener",
+                ValueChangeListenerHandler.class);
+
+        this.addTagHandler("view", ViewHandler.class);
+        
+        this.addComponent("verbatim", "javax.faces.HtmlOutputText",
+                          "javax.faces.Text", VerbatimHandler.class);       
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/EventHandler.java b/com/sun/faces/facelets/tag/jsf/core/EventHandler.java
new file mode 100644
index 0000000..f97ee8c
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/EventHandler.java
@@ -0,0 +1,171 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.application.ApplicationAssociate;
+
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.MethodNotFoundException;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.event.SystemEvent;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+import java.io.IOException;
+import java.io.Serializable;
+import javax.faces.component.UIViewRoot;
+import javax.faces.event.PreRenderViewEvent;
+
+/**
+ * This is the TagHandler for the f:event tag.
+ */
+public class EventHandler extends TagHandler {
+    protected final TagAttribute type;
+    protected final TagAttribute listener;
+
+    public EventHandler(TagConfig config) {
+        super(config);
+        this.type = this.getRequiredAttribute("type");
+        this.listener = this.getRequiredAttribute("listener");
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        if (ComponentHandler.isNew(parent)) {
+            Class<? extends SystemEvent> eventClass = getEventClass(ctx);
+            UIViewRoot viewRoot = ctx.getFacesContext().getViewRoot();
+            // ensure that f:event can be used anywhere on the page for preRenderView,
+            // not just as a direct child of the viewRoot
+            if (null != viewRoot && PreRenderViewEvent.class == eventClass &&
+                parent != viewRoot) {
+                parent = viewRoot;
+            }
+            if (eventClass != null) {
+                parent.subscribeToEvent(eventClass,
+                        new DeclarativeSystemEventListener(
+                            listener.getMethodExpression(ctx, Object.class, new Class[] { ComponentSystemEvent.class }),
+                            listener.getMethodExpression(ctx, Object.class, new Class[] { })));
+            }
+        }
+    }
+
+    protected Class<? extends SystemEvent> getEventClass(FaceletContext ctx) {
+        String eventType = (String) this.type.getValueExpression(ctx, String.class).getValue(ctx);
+        if (eventType == null) {
+            throw new FacesException("Attribute 'type' can not be null");
+        }
+
+        return ApplicationAssociate.getInstance(ctx.getFacesContext().getExternalContext())
+                .getNamedEventManager().getNamedEvent(eventType);
+    }
+
+}
+
+
+class DeclarativeSystemEventListener implements ComponentSystemEventListener, Serializable {
+
+    private static final long serialVersionUID = 8945415935164238908L;
+
+    private MethodExpression oneArgListener;
+    private MethodExpression noArgListener;
+
+    // Necessary for state saving
+    public DeclarativeSystemEventListener() {}
+
+    public DeclarativeSystemEventListener(MethodExpression oneArg, MethodExpression noArg) {
+        this.oneArgListener = oneArg;
+        this.noArgListener = noArg;
+    }
+
+    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
+        final ELContext elContext = FacesContext.getCurrentInstance().getELContext();
+        try{
+            noArgListener.invoke(elContext, new Object[]{});
+        } catch (MethodNotFoundException mnfe) {
+            // Attempt to call public void method(ComponentSystemEvent event)
+            oneArgListener.invoke(elContext, new Object[]{event});
+        } catch (IllegalArgumentException iae) {
+            // Attempt to call public void method(ComponentSystemEvent event)
+            oneArgListener.invoke(elContext, new Object[]{event});
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        DeclarativeSystemEventListener that = (DeclarativeSystemEventListener) o;
+
+        if (noArgListener != null
+            ? !noArgListener.equals(that.noArgListener)
+            : that.noArgListener != null) {
+            return false;
+        }
+        if (oneArgListener != null
+            ? !oneArgListener.equals(that.oneArgListener)
+            : that.oneArgListener != null) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = oneArgListener != null ? oneArgListener.hashCode() : 0;
+        result = 31 * result + (noArgListener != null
+                                ? noArgListener.hashCode()
+                                : 0);
+        return result;
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/FacetHandler.java b/com/sun/faces/facelets/tag/jsf/core/FacetHandler.java
new file mode 100644
index 0000000..cefcc65
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/FacetHandler.java
@@ -0,0 +1,115 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import java.io.IOException;
+
+/**
+ * Register a named facet on the UIComponent associated with the closest parent
+ * UIComponent custom action. <p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/facet.html">tag
+ * documentation</a>.
+ *
+ * @author Jacob Hookom
+ * @version $Id: FacetHandler.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public final class FacetHandler extends TagHandlerImpl
+    implements javax.faces.view.facelets.FacetHandler {
+
+    public static final String KEY = "facelets.FACET_NAME";
+
+    protected final TagAttribute name;
+
+    public FacetHandler(TagConfig config) {
+        super(config);
+        this.name = this.getRequiredAttribute("name");
+    }
+
+    /*
+      * (non-Javadoc)
+      *
+      * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+      *      javax.faces.component.UIComponent)
+      */
+    public void apply(FaceletContext ctx, UIComponent parent)
+          throws IOException {
+        if (parent == null) {
+            throw new TagException(this.tag, "Parent UIComponent was null");
+        }
+        parent.getAttributes().put(KEY, getFacetName(ctx));
+        try {
+            this.nextHandler.apply(ctx, parent);
+        } finally {
+            parent.getAttributes().remove(KEY);
+        }
+    }
+
+    // javax.faces.view.facelets.tag.FacetHandler.getFacetName()
+    // implementation
+    public String getFacetName(FaceletContext ctxt) {
+        return this.name.getValue(ctxt);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/LoadBundleHandler.java b/com/sun/faces/facelets/tag/jsf/core/LoadBundleHandler.java
new file mode 100644
index 0000000..1402b42
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/LoadBundleHandler.java
@@ -0,0 +1,238 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * Load a resource bundle localized for the Locale of the current view, and
+ * expose it (as a Map) in the request attributes of the current request. <p/>
+ * See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/loadBundle.html">tag
+ * documentation</a>.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: LoadBundleHandler.java 10340 2012-07-26 14:35:52Z mriem $
+ */
+public final class LoadBundleHandler extends TagHandlerImpl {
+
+    private final static class ResourceBundleMap implements Map {
+        private final static class ResourceEntry implements Map.Entry {
+
+            protected final String key;
+
+            protected final String value;
+
+            public ResourceEntry(String key, String value) {
+                this.key = key;
+                this.value = value;
+            }
+
+            public Object getKey() {
+                return this.key;
+            }
+
+            public Object getValue() {
+                return this.value;
+            }
+
+            public Object setValue(Object value) {
+                throw new UnsupportedOperationException();
+            }
+
+            public int hashCode() {
+                return this.key.hashCode();
+            }
+
+            public boolean equals(Object obj) {
+                return (obj instanceof ResourceEntry && this.hashCode() == obj
+                        .hashCode());
+            }
+        }
+
+        protected final ResourceBundle bundle;
+
+        public ResourceBundleMap(ResourceBundle bundle) {
+            this.bundle = bundle;
+        }
+
+        public void clear() {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean containsKey(Object key) {
+            try {
+                bundle.getString(key.toString());
+                return true;
+            } catch (MissingResourceException e) {
+                return false;
+            }
+        }
+
+        public boolean containsValue(Object value) {
+            throw new UnsupportedOperationException();
+        }
+
+        public Set entrySet() {
+            Enumeration e = this.bundle.getKeys();
+            Set s = new HashSet();
+            String k;
+            while (e.hasMoreElements()) {
+                k = (String) e.nextElement();
+                s.add(new ResourceEntry(k, this.bundle.getString(k)));
+            }
+            return s;
+        }
+
+        public Object get(Object key) {
+        	try {
+        		return this.bundle.getObject((String) key);
+        	} catch( java.util.MissingResourceException mre ) {
+        		return "???"+key+"???";
+        	}
+        }
+
+        public boolean isEmpty() {
+            return false;
+        }
+
+        public Set keySet() {
+            Enumeration e = this.bundle.getKeys();
+            Set s = new HashSet();
+            while (e.hasMoreElements()) {
+                s.add(e.nextElement());
+            }
+            return s;
+        }
+
+        public Object put(Object key, Object value) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void putAll(Map t) {
+            throw new UnsupportedOperationException();
+        }
+
+        public Object remove(Object key) {
+            throw new UnsupportedOperationException();
+        }
+
+        public int size() {
+            return this.keySet().size();
+        }
+
+        public Collection values() {
+            Enumeration e = this.bundle.getKeys();
+            Set s = new HashSet();
+            while (e.hasMoreElements()) {
+                s.add(this.bundle.getObject((String) e.nextElement()));
+            }
+            return s;
+        }
+    }
+
+    private final TagAttribute basename;
+
+    private final TagAttribute var;
+
+    /**
+     * @param config
+     */
+    public LoadBundleHandler(TagConfig config) {
+        super(config);
+        this.basename = this.getRequiredAttribute("basename");
+        this.var = this.getRequiredAttribute("var");
+    }
+
+    /**
+     * See taglib documentation.
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
+        ResourceBundle bundle = null;
+        try {
+            String name = this.basename.getValue(ctx);
+            ClassLoader cl = Thread.currentThread().getContextClassLoader();
+            if (root != null && root.getLocale() != null) {
+                bundle = ResourceBundle.getBundle(name, root.getLocale(), cl);
+            } else {
+                bundle = ResourceBundle
+                        .getBundle(name, Locale.getDefault(), cl);
+            }
+        } catch (Exception e) {
+            throw new TagAttributeException(this.tag, this.basename, e);
+        }
+        ResourceBundleMap map = new ResourceBundleMap(bundle);
+        FacesContext faces = ctx.getFacesContext();
+        faces.getExternalContext().getRequestMap().put(this.var.getValue(ctx),
+                map);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/MetadataHandler.java b/com/sun/faces/facelets/tag/jsf/core/MetadataHandler.java
new file mode 100644
index 0000000..032480e
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/MetadataHandler.java
@@ -0,0 +1,121 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIPanel;
+import javax.faces.component.UIViewRoot;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>
+ * This is a specialized <code>FacetHandler</code> to enable
+ * <code>f:metadata</code> support.
+ *
+ * </p>
+ */
+public class MetadataHandler extends TagHandlerImpl {
+
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public MetadataHandler(TagConfig config) {
+        super(config);
+    }
+
+
+    // ------------------------------------------------- Methods from TagHandler
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+          throws IOException {
+
+        Util.notNull("parent", parent);
+        UIViewRoot root;
+        if (parent instanceof UIViewRoot) {
+            root = (UIViewRoot) parent;
+        } else {
+            root = ctx.getFacesContext().getViewRoot();
+        }
+        if (root == null) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "jsf.metadata.uiviewroot.unavailable");
+            }
+            return;
+        }
+
+        UIComponent facetComponent = null;
+        if (root.getFacetCount() > 0) {
+              facetComponent = root.getFacets().get(UIViewRoot.METADATA_FACET_NAME);
+        }
+        if (facetComponent == null) {
+            root.getAttributes().put(FacetHandler.KEY,
+                                       UIViewRoot.METADATA_FACET_NAME);
+            try {
+                this.nextHandler.apply(ctx, root);
+            } finally {
+                root.getAttributes().remove(FacetHandler.KEY);
+            }
+            facetComponent = root.getFacets().get(UIViewRoot.METADATA_FACET_NAME);
+            if (facetComponent != null && !(facetComponent instanceof UIPanel)) {
+                Application app = ctx.getFacesContext().getApplication();
+                UIComponent panelGroup = app.createComponent(UIPanel.COMPONENT_TYPE);
+                panelGroup.getChildren().add(facetComponent);
+                root.getFacets().put(UIViewRoot.METADATA_FACET_NAME, panelGroup);
+                facetComponent = panelGroup;
+            }
+            if (null != facetComponent) {
+                facetComponent.setId(UIViewRoot.METADATA_FACET_NAME);
+            }
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/PassThroughAttributeHandler.java b/com/sun/faces/facelets/tag/jsf/core/PassThroughAttributeHandler.java
new file mode 100644
index 0000000..169eec5
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/PassThroughAttributeHandler.java
@@ -0,0 +1,129 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import java.io.IOException;
+import java.util.Map;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+
+/**
+ * Sets the specified name and attribute on the parent UIComponent. If the
+ * "value" specified is not a literal, it will instead set the ValueExpression
+ * on the UIComponent.
+ * <p />
+ * See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/attribute.html">tag
+ * documentation</a>.
+ * 
+ * @see javax.faces.component.UIComponent#getAttributes()
+ * @see javax.faces.component.UIComponent#setValueExpression(java.lang.String,
+ *      javax.el.ValueExpression)
+ * @author Jacob Hookom
+ */
+public final class PassThroughAttributeHandler extends TagHandlerImpl 
+    implements javax.faces.view.facelets.AttributeHandler {
+
+    private final TagAttribute name;
+
+    private final TagAttribute value;
+
+    /**
+     * @param config
+     */
+    public PassThroughAttributeHandler(TagConfig config) {
+        super(config);
+        this.name = this.getRequiredAttribute("name");
+        this.value = this.getRequiredAttribute("value");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        if (parent == null) {
+            throw new TagException(this.tag, "Parent UIComponent was null");
+        }
+
+        // only process if the parent is new to the tree
+        if (parent.getParent() == null) {
+            Map<String,Object> passThroughAttrs = parent.getPassThroughAttributes(true);
+            String attrName;
+            Object attrValue;
+            attrName = this.name.getValue(ctx);
+            attrValue = (this.value.isLiteral()) ? this.value.getValue(ctx) : this.value.getValueExpression(ctx, Object.class);
+            passThroughAttrs.put(attrName, attrValue);
+        }
+    }
+
+
+    // javax.faces.view.facelets.tag.AttributeHandler.getAttributeName()
+    // implementation.
+    public String getAttributeName(FaceletContext ctxt) {
+        return this.name.getValue(ctxt);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/PassThroughAttributesHandler.java b/com/sun/faces/facelets/tag/jsf/core/PassThroughAttributesHandler.java
new file mode 100644
index 0000000..3949771
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/PassThroughAttributesHandler.java
@@ -0,0 +1,103 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import java.io.IOException;
+import java.util.Map;
+
+public final class PassThroughAttributesHandler extends TagHandlerImpl 
+    implements javax.faces.view.facelets.AttributeHandler {
+
+    private final TagAttribute value;
+
+    public PassThroughAttributesHandler(TagConfig config) {
+        super(config);
+        this.value = this.getRequiredAttribute("value");
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        if (parent == null) {
+            throw new TagException(this.tag, "Parent UIComponent was null");
+        }
+
+        // only process if the parent is new to the tree
+        if (parent.getParent() == null) {
+            Map<String, Object> componentPassThroughAttrs = parent.getPassThroughAttributes(true);
+            Map<String, Object> tagPassThroughAttrs = (Map<String, Object>) this.value.getObject(ctx, Map.class);
+            for (Map.Entry<String, Object> cur : tagPassThroughAttrs.entrySet()) {
+                componentPassThroughAttrs.put(cur.getKey(), cur.getValue());
+            }
+        }
+    }
+
+
+    // javax.faces.view.facelets.tag.AttributeHandler.getAttributeName()
+    // implementation.
+    public String getAttributeName(FaceletContext ctxt) {
+        return "value";
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/PhaseListenerHandler.java b/com/sun/faces/facelets/tag/jsf/core/PhaseListenerHandler.java
new file mode 100644
index 0000000..cda5b06
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/PhaseListenerHandler.java
@@ -0,0 +1,230 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.facelets.util.ReflectionUtil;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.faces.view.facelets.*;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+
+public class PhaseListenerHandler extends TagHandlerImpl {
+
+    private final static class LazyPhaseListener implements PhaseListener,
+                                                            Serializable {
+
+        private static final long serialVersionUID = -6496143057319213401L;
+
+        private final String type;
+
+        private final ValueExpression binding;
+
+        public LazyPhaseListener(String type, ValueExpression binding) {
+            this.type = type;
+            this.binding = binding;
+        }
+
+        private PhaseListener getInstance() {
+            PhaseListener instance = null;
+            FacesContext faces = FacesContext.getCurrentInstance();
+            if (faces == null) {
+                return null;
+            }
+            if (this.binding != null) {
+                instance = (PhaseListener) binding.getValue(faces
+                      .getELContext());
+            }
+            if (instance == null && type != null) {
+                try {
+                    instance = (PhaseListener) ReflectionUtil.forName(
+                          this.type).newInstance();
+                } catch (Exception e) {
+                    throw new AbortProcessingException(
+                          "Couldn't Lazily instantiate PhaseListener", e);
+                }
+                if (this.binding != null) {
+                    binding.setValue(faces.getELContext(), instance);
+                }
+            }
+            return instance;
+        }
+
+        public void afterPhase(PhaseEvent event) {
+            PhaseListener pl = this.getInstance();
+            if (pl != null) {
+                pl.afterPhase(event);
+            }
+        }
+
+        public void beforePhase(PhaseEvent event) {
+            PhaseListener pl = this.getInstance();
+            if (pl != null) {
+                pl.beforePhase(event);
+            }
+        }
+
+        public PhaseId getPhaseId() {
+            PhaseListener pl = this.getInstance();
+            return (pl != null) ? pl.getPhaseId() : PhaseId.ANY_PHASE;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+
+            LazyPhaseListener that = (LazyPhaseListener) o;
+
+            if (binding != null
+                ? !binding.equals(that.binding)
+                : that.binding != null) {
+                return false;
+            }
+            if (type != null ? !type.equals(that.type) : that.type != null) {
+                return false;
+            }
+
+            return true;
+
+        }
+
+        @Override
+        public int hashCode() {
+
+            int result = type != null ? type.hashCode() : 0;
+            result = 31 * result + (binding != null ? binding.hashCode() : 0);
+            return result;
+
+        }
+
+    }
+
+    private final TagAttribute binding;
+
+    private final String listenerType;
+
+    private final TagAttribute typeAttribute;
+
+    public PhaseListenerHandler(TagConfig config) {
+        super(config);
+        this.binding = this.getAttribute("binding");
+        this.typeAttribute = this.getAttribute("type");
+        if (null != this.typeAttribute) {
+            String stringType = null;
+            if (!this.typeAttribute.isLiteral()) {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                stringType = (String) this.typeAttribute.getValueExpression(ctx, String.class).getValue(ctx);
+            } else {
+                stringType = this.typeAttribute.getValue();
+            }
+            checkType(stringType);
+            this.listenerType = stringType;
+        } else {
+            this.listenerType = null;
+        }
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+          throws IOException {
+        if (ComponentHandler.isNew(parent)) {
+            UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
+            if (root == null) {
+                throw new TagException(this.tag, "UIViewRoot not available");
+            }
+            ValueExpression b = null;
+            if (this.binding != null) {
+                b = this.binding.getValueExpression(ctx, PhaseListener.class);
+            }
+
+            PhaseListener pl = new LazyPhaseListener(this.listenerType, b);
+
+            List<PhaseListener> listeners = root.getPhaseListeners();
+            if (!listeners.contains(pl)) {
+                root.addPhaseListener(pl);
+            }
+        }
+    }
+
+    private void checkType(String type) {
+        try {
+            ReflectionUtil.forName(type);
+        } catch (ClassNotFoundException e) {
+            throw new TagAttributeException(typeAttribute,
+                "Couldn't qualify ActionListener", e);
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ResetValuesHandler.java b/com/sun/faces/facelets/tag/jsf/core/ResetValuesHandler.java
new file mode 100644
index 0000000..bb5feee
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ResetValuesHandler.java
@@ -0,0 +1,154 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+import javax.faces.view.ActionSource2AttachedObjectHandler;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
+import javax.faces.component.UIViewRoot;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+
+public final class ResetValuesHandler extends ActionListenerHandlerBase
+      implements ActionSource2AttachedObjectHandler {
+    
+    private final TagAttribute render;
+
+    // Pattern used for execute/render string splitting
+    private static Pattern SPLIT_PATTERN = Pattern.compile(" ");
+    
+    
+    private final static class LazyActionListener
+          implements ActionListener, Serializable {
+        Collection<String> render;
+
+        private static final long serialVersionUID = -5676209243297546166L;
+
+        public LazyActionListener(Collection<String> render) {
+            this.render = new ArrayList<String>(render);
+        }
+
+        public void processAction(ActionEvent event)
+              throws AbortProcessingException {
+            FacesContext context = FacesContext.getCurrentInstance();
+            UIViewRoot root = context.getViewRoot();
+            root.resetValues(context, render);
+        }
+    }
+
+    /**
+     * @param config
+     */
+    public ResetValuesHandler(TagConfig config) {
+        super(config);
+        this.render = this.getAttribute("render");
+    }
+
+
+    @Override
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+        FaceletContext ctx = (FaceletContext) context.getAttributes()
+              .get(FaceletContext.FACELET_CONTEXT_KEY);
+        ActionSource as = (ActionSource) parent;
+        String renderStr = (String) render.getObject(ctx, String.class);
+        ActionListener listener = new LazyActionListener(toList(renderStr));
+        as.addActionListener(listener);
+    }
+    
+    // Converts the specified object to a List<String>
+    private static List<String> toList(String strValue) {
+
+        
+        // If the value contains no spaces, we can optimize.
+        // This is worthwhile, since the execute/render lists
+        // will often only contain a single value.
+        if (strValue.indexOf(' ') == -1) {
+            return Collections.singletonList(strValue);
+        }
+        
+        // We're stuck splitting up the string.
+        String[] values = SPLIT_PATTERN.split(strValue);
+        if ((values == null) || (values.length == 0)) {
+            return null;
+        }
+        
+        // Note that we could create a Set out of the values if
+        // we care about removing duplicates.  However, the
+        // presence of duplicates does not real harm.  They will
+        // be consolidated during the partial view traversal.  So,
+        // just create an list - garbage in, garbage out.
+        return Collections.unmodifiableList(Arrays.asList(values));
+    
+    }
+    
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/SetPropertyActionListenerHandler.java b/com/sun/faces/facelets/tag/jsf/core/SetPropertyActionListenerHandler.java
new file mode 100644
index 0000000..82dd937
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/SetPropertyActionListenerHandler.java
@@ -0,0 +1,216 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.el.LegacyValueBinding;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.component.ActionSource;
+import javax.faces.component.ActionSource2;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+import javax.faces.view.facelets.*;
+import java.io.IOException;
+import java.io.Serializable;
+import javax.faces.view.ActionSource2AttachedObjectHandler;
+
+public class SetPropertyActionListenerHandler extends TagHandlerImpl implements ActionSource2AttachedObjectHandler {
+
+    private final TagAttribute value;
+
+    private final TagAttribute target;
+
+    public SetPropertyActionListenerHandler(TagConfig config) {
+        super(config);
+        this.value = this.getRequiredAttribute("value");
+        this.target = this.getRequiredAttribute("target");
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+
+        if (null == parent || !(ComponentHandler.isNew(parent))) {
+            return;
+        }
+        if (parent instanceof ActionSource) {
+            applyAttachedObject(ctx.getFacesContext(), parent);
+        } else if (UIComponent.isCompositeComponent(parent)) {
+            if (null == getFor()) {
+                // PENDING(): I18N
+                throw new TagException(this.tag,
+                                       "actionListener tags nested within composite components must have a non-null \"for\" attribute");
+            }
+            // Allow the composite component to know about the target
+            // component.
+            CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
+                  .add(this);
+
+        } else {
+            throw new TagException(this.tag,
+                                   "Parent is not of type ActionSource, type is: "
+                                   + parent);
+        }
+
+    }
+
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+        FaceletContext ctx = (FaceletContext) context.getAttributes()
+              .get(FaceletContext.FACELET_CONTEXT_KEY);
+
+        ActionSource src = (ActionSource) parent;
+        ValueExpression valueExpr = this.value.getValueExpression(ctx,
+                    Object.class);
+        ValueExpression targetExpr = this.target.getValueExpression(
+                ctx, Object.class);
+
+        ActionListener listener;
+
+        if (src instanceof ActionSource2) {
+            listener = new SetPropertyListener(valueExpr, targetExpr);
+        } else {
+            listener = new LegacySetPropertyListener(
+                    new LegacyValueBinding(valueExpr),
+                    new LegacyValueBinding(targetExpr));
+        }
+
+        src.addActionListener(listener);
+    }
+
+
+    public String getFor() {
+        String result = null;
+        TagAttribute attr = this.getAttribute("for");
+
+        if (null != attr) {
+            if (attr.isLiteral()) {
+                result = attr.getValue();
+            } else {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                result = (String)attr.getValueExpression(ctx, String.class).getValue(ctx);
+            }
+        }
+        return result;
+    }
+
+
+
+    private static class LegacySetPropertyListener implements ActionListener,
+            Serializable {
+
+        private ValueBinding value;
+
+        private ValueBinding target;
+
+        public LegacySetPropertyListener() {
+        };
+
+        public LegacySetPropertyListener(ValueBinding value, ValueBinding target) {
+            this.value = value;
+            this.target = target;
+        }
+
+        public void processAction(ActionEvent evt)
+                throws AbortProcessingException {
+            FacesContext faces = FacesContext.getCurrentInstance();
+            Object valueObj = this.value.getValue(faces);
+            this.target.setValue(faces, valueObj);
+        }
+
+    }
+
+    private static class SetPropertyListener implements ActionListener,
+            Serializable {
+
+        private ValueExpression value;
+
+        private ValueExpression target;
+
+        public SetPropertyListener() {
+        };
+
+        public SetPropertyListener(ValueExpression value, ValueExpression target) {
+            this.value = value;
+            this.target = target;
+        }
+
+        public void processAction(ActionEvent evt)
+                throws AbortProcessingException {
+            FacesContext faces = FacesContext.getCurrentInstance();
+            ELContext el = faces.getELContext();
+            Object valueObj = this.value.getValue(el);
+             if (valueObj != null) {
+                ExpressionFactory factory =
+                      faces.getApplication().getExpressionFactory();
+                valueObj = factory.coerceToType(valueObj, target.getType(el));
+            }
+            this.target.setValue(el, valueObj);
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ValidateDelegateHandler.java b/com/sun/faces/facelets/tag/jsf/core/ValidateDelegateHandler.java
new file mode 100644
index 0000000..45749cd
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ValidateDelegateHandler.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import javax.faces.view.facelets.*;
+
+/**
+ * Register a named Validator instance on the UIComponent associated with the
+ * closest parent UIComponent custom action.<p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/validator.html">tag
+ * documentation</a>.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ValidateDelegateHandler.java 10356 2012-07-27 15:17:09Z mriem $
+ */
+public final class ValidateDelegateHandler extends ValidatorHandler {
+
+    private final TagAttribute validatorId;
+
+    public ValidateDelegateHandler(ValidatorConfig config) {
+        super(config);
+        this.validatorId = this.getAttribute("validatorId");
+    }
+
+    /**
+     * Resolve the validator id from the attribute "validatorId", which is then used to create a new
+     * Validator instance from the Application.
+     * 
+     * @see javax.faces.application.Application#createValidator(java.lang.String)
+     */
+    protected String getValidator(FaceletContext ctx) {
+        return ((validatorId != null) ? this.validatorId.getValue(ctx) : null);
+    }
+
+    protected MetaRuleset createMetaRuleset(Class type) {
+        return super.createMetaRuleset(type).ignoreAll();
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ValueChangeListenerHandler.java b/com/sun/faces/facelets/tag/jsf/core/ValueChangeListenerHandler.java
new file mode 100644
index 0000000..e8b97a0
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ValueChangeListenerHandler.java
@@ -0,0 +1,222 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
+import com.sun.faces.facelets.util.ReflectionUtil;
+
+import javax.el.ValueExpression;
+import javax.faces.application.Resource;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
+import javax.faces.view.EditableValueHolderAttachedObjectHandler;
+import javax.faces.view.facelets.*;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * Register an ValueChangeListener instance on the UIComponent associated with
+ * the closest parent UIComponent custom action.<p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/valueChangeListener.html">tag
+ * documentation</a>.
+ * 
+ * @author Jacob Hookom
+ */
+public final class ValueChangeListenerHandler extends TagHandlerImpl implements EditableValueHolderAttachedObjectHandler {
+
+    private static class LazyValueChangeListener implements
+                                                 ValueChangeListener,
+                                                 Serializable {
+
+        private static final long serialVersionUID = 7613811124326963180L;
+
+        private final String type;
+
+        private final ValueExpression binding;
+
+        public LazyValueChangeListener(String type, ValueExpression binding) {
+            this.type = type;
+            this.binding = binding;
+        }
+
+        public void processValueChange(ValueChangeEvent event)
+              throws AbortProcessingException {
+            ValueChangeListener instance = null;
+            FacesContext faces = FacesContext.getCurrentInstance();
+            if (faces == null) {
+                return;
+            }
+            if (this.binding != null) {
+                instance = (ValueChangeListener) binding
+                      .getValue(faces.getELContext());
+            }
+            if (instance == null && this.type != null) {
+                try {
+                    instance = (ValueChangeListener) ReflectionUtil
+                          .forName(this.type).newInstance();
+                } catch (Exception e) {
+                    throw new AbortProcessingException(
+                          "Couldn't Lazily instantiate ValueChangeListener",
+                          e);
+                }
+                if (this.binding != null) {
+                    binding.setValue(faces.getELContext(), instance);
+                }
+            }
+            if (instance != null) {
+                instance.processValueChange(event);
+            }
+        }
+    }
+
+    private final TagAttribute binding;
+
+    private final String listenerType;
+
+    private final TagAttribute typeAttribute;
+
+    public ValueChangeListenerHandler(TagConfig config) {
+        super(config);
+        this.binding = this.getAttribute("binding");
+        this.typeAttribute = this.getAttribute("type");
+        if (null != this.typeAttribute) {
+            String stringType = null;
+            if (!this.typeAttribute.isLiteral()) {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                stringType = (String) this.typeAttribute.getValueExpression(ctx, String.class).getValue(ctx);
+            } else {
+                stringType = this.typeAttribute.getValue();
+            }
+            checkType(stringType);
+            this.listenerType = stringType;
+        } else {
+            this.listenerType = null;
+        }
+    }
+
+    /**
+     * See taglib documentation.
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        // only process if it's been created
+        if (parent == null || !(ComponentHandler.isNew(parent))) {
+            return;
+        }
+
+        if (parent instanceof EditableValueHolder) {
+            applyAttachedObject(ctx.getFacesContext(), parent);
+        } else if (parent.getAttributes().containsKey(Resource.COMPONENT_RESOURCE_KEY)) {
+            // Allow the composite component to know about the target
+            // component.
+            CompositeComponentTagHandler.getAttachedObjectHandlers(parent).add(this);
+        } else {
+            throw new TagException(this.tag,
+                    "Parent is not of type EditableValueHolder, type is: " + parent);
+        }
+    }
+        
+    public void applyAttachedObject(FacesContext context, UIComponent parent) {
+        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+        EditableValueHolder evh = (EditableValueHolder) parent;
+        ValueExpression b = null;
+        if (this.binding != null) {
+            b = this.binding.getValueExpression(ctx, ValueChangeListener.class);
+        }
+        ValueChangeListener listener = new LazyValueChangeListener(
+                this.listenerType, b);
+        evh.addValueChangeListener(listener);
+    }
+        
+    public String getFor() {
+        String result = null;
+        TagAttribute attr = this.getAttribute("for");
+
+        if (null != attr) {
+            if (attr.isLiteral()) {
+                result = attr.getValue();
+            } else {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                result = (String)attr.getValueExpression(ctx, String.class).getValue(ctx);
+            }
+        }
+        return result;
+
+    }
+
+    private void checkType(String type) {
+        try {
+            ReflectionUtil.forName(type);
+        } catch (ClassNotFoundException e) {
+            throw new TagAttributeException(typeAttribute,
+                "Couldn't qualify ActionListener", e);
+        }
+    }
+
+
+        
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/VerbatimHandler.java b/com/sun/faces/facelets/tag/jsf/core/VerbatimHandler.java
new file mode 100644
index 0000000..a10a8cc
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/VerbatimHandler.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TextHandler;
+import java.util.Iterator;
+
+/**
+ * Handler for f:verbatim
+ * 
+ * @author Adam Winer
+ */
+public final class VerbatimHandler extends ComponentHandler {
+    public VerbatimHandler(ComponentConfig config) {
+        super(config);
+    }
+
+    @Override
+    public void onComponentCreated(FaceletContext ctx, UIComponent c, UIComponent parent) {
+        StringBuffer content = new StringBuffer();
+        Iterator iter = TagHandlerImpl.findNextByType(this.nextHandler,
+                TextHandler.class);
+        while (iter.hasNext()) {
+            TextHandler text = (TextHandler) iter.next();
+            content.append(text.getText(ctx));
+        }
+
+        c.getAttributes().put("value", content.toString());
+        c.getAttributes().put("escape", Boolean.FALSE);
+        c.setTransient(true);
+    }
+
+    @Override
+    public void applyNextHandler(FaceletContext ctx, UIComponent c) {
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jsf/core/ViewHandler.java b/com/sun/faces/facelets/tag/jsf/core/ViewHandler.java
new file mode 100644
index 0000000..5f1486a
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/core/ViewHandler.java
@@ -0,0 +1,228 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.core;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+
+import com.sun.faces.util.FacesLogger;
+import javax.el.MethodExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.event.PhaseEvent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.TagAttributeException;
+
+/**
+ * Container for all JavaServer Faces core and custom component actions used on
+ * a page. <p/> See <a target="_new"
+ * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/view.html">tag
+ * documentation</a>.
+ * 
+ * @author Jacob Hookom
+ * @version $Id: ViewHandler.java 12782 2014-01-22 21:13:16Z mriem $
+ */
+public final class ViewHandler extends TagHandlerImpl {
+    
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+    private final static Class[] LISTENER_SIG = new Class[] { PhaseEvent.class };
+
+    private final TagAttribute locale;
+
+    private final TagAttribute renderKitId;
+    
+    private final TagAttribute contentType;
+    
+    private final TagAttribute encoding;
+
+    private final TagAttribute beforePhase;
+
+    private final TagAttribute afterPhase;
+    
+    private final TagAttribute transientFlag;
+    
+    /**
+     * Stores the contracts tag attribute.
+     */
+    private final TagAttribute contracts;
+
+    /**
+     * @param config
+     */
+    public ViewHandler(TagConfig config) {
+        super(config);
+        this.locale = this.getAttribute("locale");
+        this.renderKitId = this.getAttribute("renderKitId");
+        this.contentType = this.getAttribute("contentType");
+        this.encoding = this.getAttribute("encoding");
+        TagAttribute testForNull = this.getAttribute("beforePhase");
+        this.beforePhase = (null == testForNull) ? 
+                         this.getAttribute("beforePhaseListener") : testForNull;
+        testForNull = this.getAttribute("afterPhase");
+        this.afterPhase = (null == testForNull) ?
+                         this.getAttribute("afterPhaseListener") : testForNull;
+        this.contracts = this.getAttribute("contracts");
+        this.transientFlag = this.getAttribute("transient");
+    }
+
+    /**
+     * See taglib documentation.
+     */
+    @Override
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
+        if (root != null) {
+            if (this.renderKitId != null) {
+                String v = this.renderKitId.getValue(ctx);
+                root.setRenderKitId(v);
+            }
+            if (this.contentType != null) {
+                String v = this.contentType.getValue(ctx);
+                ctx.getFacesContext().getAttributes().put("facelets.ContentType", v);
+            }
+            if (this.encoding != null) {
+                String v = this.encoding.getValue(ctx);
+                ctx.getFacesContext().getAttributes().put(RIConstants.FACELETS_ENCODING_KEY, v);
+                root.getAttributes().put(RIConstants.FACELETS_ENCODING_KEY, v);
+            }
+            if (this.beforePhase != null) {
+                MethodExpression m = this.beforePhase
+                        .getMethodExpression(ctx, null, LISTENER_SIG);
+                root.setBeforePhaseListener(m);
+            }
+            if (this.afterPhase != null) {
+                MethodExpression m = this.afterPhase
+                        .getMethodExpression(ctx, null, LISTENER_SIG);
+                root.setAfterPhaseListener(m);
+            }
+
+            if (this.contracts != null) {
+                /*
+                 * JAVASERVERFACES-3139: We are relaxing when the contracts
+                 * attribute can be used. In Development mode we will still 
+                 * blurb a message that the user is not using it at the top
+                 * level, which could cause problems.
+                 */
+                if (ctx.getFacesContext().getAttributes().containsKey("com.sun.faces.uiCompositionCount") &&
+                        LOGGER.isLoggable(Level.INFO) && 
+                        ctx.getFacesContext().getApplication().getProjectStage().equals(ProjectStage.Development)) {
+                        LOGGER.log(Level.INFO, "f:view contracts attribute found, but not used at top level");
+                }
+                String contractsValue = this.contracts.getValue(ctx);
+                if (contractsValue != null) {
+                    List<String> contractList = Arrays.asList(contractsValue.split(","));
+                    ctx.getFacesContext().setResourceLibraryContracts(contractList);
+                }
+            }
+            
+            if (this.transientFlag != null) {
+                Boolean b = Boolean.valueOf(this.transientFlag.getValue(ctx));
+                root.setTransient(b);
+            }
+
+            String viewId = root.getViewId();
+
+            // At this point in the lifecycle we should have a non-null/empty
+            // view id.  The partial state saving check below requires this.
+            assert(null != viewId);
+            assert(0 < viewId.length());
+
+        }
+
+        /*
+         * Fixes https://java.net/jira/browse/JAVASERVERFACES-3021.
+         * 
+         * The rational behind moving this here is that we need to make sure
+         * we establish the locale in all cases.
+         */
+        if (this.locale != null && root != null) {
+            try {
+                root.setLocale(ComponentSupport.getLocale(ctx, this.locale));
+            } catch (TagAttributeException tae) {
+                Object result = this.locale.getObject(ctx);
+                if (null == result) {
+                    Locale l = Locale.getDefault();
+                    // Special case for bugdb 13582626
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING, 
+                                "Using {0} for locale because expression {1} returned null.", 
+                                new Object[]{l, this.locale.toString()});
+                    }
+                    root.setLocale(l);
+                }
+            }
+        }        
+
+        this.nextHandler.apply(ctx, parent);
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/AbstractHtmlLibrary.java b/com/sun/faces/facelets/tag/jsf/html/AbstractHtmlLibrary.java
new file mode 100644
index 0000000..53b9ccb
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/AbstractHtmlLibrary.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import com.sun.faces.facelets.tag.AbstractTagLibrary;
+
+/**
+ * @author Jacob Hookom
+ */
+public abstract class AbstractHtmlLibrary extends AbstractTagLibrary {
+
+    /**
+     * @param namespace
+     */
+    public AbstractHtmlLibrary(String namespace) {
+        super(namespace);
+    }
+
+    public void addHtmlComponent(String name, String componentType,
+            String rendererType) {
+        super.addComponent(name, componentType, rendererType,
+                HtmlComponentHandler.class);
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/ComponentResourceDelegate.java b/com/sun/faces/facelets/tag/jsf/html/ComponentResourceDelegate.java
new file mode 100644
index 0000000..e074466
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/ComponentResourceDelegate.java
@@ -0,0 +1,174 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+import com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributes;
+import java.util.List;
+
+import static com.sun.faces.facelets.tag.jsf.ComponentSupport.MARK_CREATED;
+
+/**
+ * This class overrides key methods from <code>ComponentTagHandlerDelegateImpl</code>
+ * in order to properly find existing component resources as well as properly handling
+ * the case when this concrete implementations of this class are applied more than
+ * once for a particular request.
+ */
+public abstract class ComponentResourceDelegate extends ComponentTagHandlerDelegateImpl {
+
+    private TagAttributes attributes;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ComponentResourceDelegate(ComponentHandler owner) {
+
+        super(owner);
+        this.attributes = owner.getTag().getAttributes();
+
+    }
+
+
+    // ----------------------------------------- Methods from TagHandlerDelegate
+
+
+    @Override
+    protected UIComponent findChild(FaceletContext ctx,
+                                    UIComponent parent,
+                                    String tagId) {
+
+        // If we have a target for this particular component, we need to
+        // query the UIViewRoot's component resources, otherwise defer
+        // to our super class.
+        String target = getLocationTarget(ctx);
+        if (target != null) {
+            final UIViewRoot root = ctx.getFacesContext().getViewRoot();
+            List<UIComponent> resources =
+                  root.getComponentResources(ctx.getFacesContext(), target);
+            for (UIComponent c : resources) {
+                String cid = (String) c.getAttributes().get(MARK_CREATED);
+                if (tagId.equals(cid)) {
+                    return c;
+                }
+            }
+            return null;
+        } else {
+            return super.findChild(ctx, parent, tagId);
+        }
+
+    }
+
+
+    @Override protected void addComponentToView(FaceletContext ctx,
+                                                UIComponent parent,
+                                                UIComponent c,
+                                                boolean componentFound) {
+
+        if (!componentFound) {
+            // default to the existing logic which will add the component
+            // in-place.  An event will be fired to move the component
+            // as a UIViewRoot component resource
+            super.addComponentToView(ctx, parent, c, componentFound);
+        } else {
+            // when re-applying we supress events for existing components,
+            // so if we simply relied on the default logic, the resources
+            // wouldn't be be moved.  We'll do it manually instead.
+            String target = getLocationTarget(ctx);
+            if (target != null) {
+                final UIViewRoot root = ctx.getFacesContext().getViewRoot();
+                root.addComponentResource(ctx.getFacesContext(), c, target);
+            } else {
+                super.addComponentToView(ctx, parent, c, componentFound);
+            }
+        }
+
+    }
+
+
+
+
+    protected void doOrphanedChildCleanup(FaceletContext ctx,
+                                          UIComponent parent,
+                                          UIComponent c) {
+
+        FacesContext context = ctx.getFacesContext();
+        boolean suppressEvents =
+              ComponentSupport.suppressViewModificationEvents(context);
+        if (suppressEvents) {
+            // if the component has already been found, it will be removed
+            // and added back to the view.  We don't want to publish events
+            // for this case.
+            context.setProcessingEvents(false);
+        }
+
+        ComponentSupport.finalizeForDeletion(c);
+        UIViewRoot root = context.getViewRoot();
+        root.removeComponentResource(context, c, getLocationTarget(ctx));
+
+        if (suppressEvents) {
+            // restore the original state
+            context.setProcessingEvents(true);
+        }
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected abstract String getLocationTarget(FaceletContext ctx);
+
+
+    protected TagAttribute getAttribute(String name) {
+
+        return attributes.get(name);
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/HtmlComponentHandler.java b/com/sun/faces/facelets/tag/jsf/html/HtmlComponentHandler.java
new file mode 100644
index 0000000..8e75186
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/HtmlComponentHandler.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.MetaRuleset;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: HtmlComponentHandler.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public class HtmlComponentHandler extends ComponentHandler {
+
+    /**
+     * @param config
+     */
+    public HtmlComponentHandler(ComponentConfig config) {
+        super(config);
+    }
+
+    protected MetaRuleset createMetaRuleset(Class type) {
+        return super.createMetaRuleset(type).alias("class", "styleClass");
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/HtmlDecorator.java b/com/sun/faces/facelets/tag/jsf/html/HtmlDecorator.java
new file mode 100644
index 0000000..90df2c7
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/HtmlDecorator.java
@@ -0,0 +1,149 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import com.sun.faces.facelets.tag.TagAttributesImpl;
+
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributes;
+import javax.faces.view.facelets.TagDecorator;
+
+
+/**
+ * @author Jacob Hookom
+ */
+public final class HtmlDecorator implements TagDecorator {
+
+    public final static String XhtmlNamespace = "http://www.w3.org/1999/xhtml";
+
+    public final static HtmlDecorator Instance = new HtmlDecorator();
+    
+    /**
+     * 
+     */
+    public HtmlDecorator() {
+        super();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.tag.TagDecorator#decorate(com.sun.facelets.tag.Tag)
+     */
+    public Tag decorate(Tag tag) {
+        if (XhtmlNamespace.equals(tag.getNamespace())) {
+            String n = tag.getLocalName();
+            if ("a".equals(n)) {
+                return new Tag(tag.getLocation(), HtmlLibrary.Namespace,
+                        "commandLink", tag.getQName(), tag.getAttributes());
+            }
+            if ("form".equals(n)) {
+                return new Tag(tag.getLocation(), HtmlLibrary.Namespace,
+                        "form", tag.getQName(), tag.getAttributes());
+            }
+            if ("input".equals(n)) {
+                TagAttribute attr = tag.getAttributes().get("type");
+                if (attr != null) {
+                    String t = attr.getValue();
+                    TagAttributes na = removeType(tag.getAttributes());
+                    if ("text".equals(t)) {
+                        return new Tag(tag.getLocation(),
+                                HtmlLibrary.Namespace, "inputText", tag
+                                        .getQName(), na);
+                    }
+                    if ("password".equals(t)) {
+                        return new Tag(tag.getLocation(),
+                                HtmlLibrary.Namespace, "inputSecret", tag
+                                        .getQName(), na);
+                    }
+                    if ("hidden".equals(t)) {
+                        return new Tag(tag.getLocation(),
+                                HtmlLibrary.Namespace, "inputHidden", tag
+                                        .getQName(), na);
+                    }
+                    if ("submit".equals(t)) {
+                        return new Tag(tag.getLocation(),
+                                HtmlLibrary.Namespace, "commandButton", tag
+                                        .getQName(), na);
+                    }
+                    if ("file".equals(t)) {
+                        return new Tag(tag.getLocation(),
+                                HtmlLibrary.Namespace, "inputFile", tag
+                                        .getQName(), na);
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    private TagAttributes removeType(TagAttributes attrs) {
+        TagAttribute[] o = attrs.getAll();
+        TagAttribute[] a = new TagAttribute[o.length - 1];
+        int p = 0;
+        for (int i = 0; i < o.length; i++) {
+            if (!"type".equals(o[i].getLocalName())) {
+                a[p++] = o[i];
+            }
+        }
+        return new TagAttributesImpl(a);
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/HtmlLibrary.java b/com/sun/faces/facelets/tag/jsf/html/HtmlLibrary.java
new file mode 100644
index 0000000..dd81d6d
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/HtmlLibrary.java
@@ -0,0 +1,188 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class HtmlLibrary extends AbstractHtmlLibrary {
+
+    public final static String Namespace = "http://java.sun.com/jsf/html";
+    public final static String XMLNSNamespace = "http://xmlns.jcp.org/jsf/html";
+
+    public final static HtmlLibrary Instance = new HtmlLibrary();
+
+    public HtmlLibrary() {
+        this(Namespace);
+    }
+    
+    public HtmlLibrary(String namespace) {
+        super(namespace);
+        
+        this.addHtmlComponent("body", "javax.faces.OutputBody",
+                "javax.faces.Body");
+
+        this.addHtmlComponent("button", "javax.faces.HtmlOutcomeTargetButton",
+                "javax.faces.Button");
+
+        this.addHtmlComponent("column", "javax.faces.Column", null);
+
+        this.addHtmlComponent("commandButton", "javax.faces.HtmlCommandButton",
+                "javax.faces.Button");
+
+        this.addHtmlComponent("commandLink", "javax.faces.HtmlCommandLink",
+                "javax.faces.Link");
+
+        this.addHtmlComponent("dataTable", "javax.faces.HtmlDataTable",
+                "javax.faces.Table");
+
+        this.addHtmlComponent("form", "javax.faces.HtmlForm",
+                "javax.faces.Form");
+
+        this.addHtmlComponent("graphicImage", "javax.faces.HtmlGraphicImage",
+                "javax.faces.Image");
+
+        this.addHtmlComponent("head", "javax.faces.Output",
+                "javax.faces.Head");
+
+        this.addHtmlComponent("html", "javax.faces.Output",
+                "javax.faces.Html");
+
+        this.addHtmlComponent("doctype", "javax.faces.Output",
+                "javax.faces.Doctype");
+
+        this.addHtmlComponent("inputFile", "javax.faces.HtmlInputFile",
+                "javax.faces.File");
+
+        this.addHtmlComponent("inputHidden", "javax.faces.HtmlInputHidden",
+                "javax.faces.Hidden");
+
+        this.addHtmlComponent("inputSecret", "javax.faces.HtmlInputSecret",
+                "javax.faces.Secret");
+
+        this.addHtmlComponent("inputText", "javax.faces.HtmlInputText",
+                "javax.faces.Text");
+
+        this.addHtmlComponent("inputTextarea", "javax.faces.HtmlInputTextarea",
+                "javax.faces.Textarea");
+
+        this.addHtmlComponent("link", "javax.faces.HtmlOutcomeTargetLink",
+                "javax.faces.Link");
+
+        this.addHtmlComponent("message", "javax.faces.HtmlMessage",
+                "javax.faces.Message");
+
+        this.addHtmlComponent("messages", "javax.faces.HtmlMessages",
+                "javax.faces.Messages");
+
+        this.addHtmlComponent("outputFormat", "javax.faces.HtmlOutputFormat",
+                "javax.faces.Format");
+
+        this.addHtmlComponent("outputLabel", "javax.faces.HtmlOutputLabel",
+                "javax.faces.Label");
+
+        this.addHtmlComponent("outputLink", "javax.faces.HtmlOutputLink",
+                "javax.faces.Link");
+
+        this.addHtmlComponent("outputText", "javax.faces.HtmlOutputText",
+                "javax.faces.Text");
+        
+        this.addComponent("outputScript",
+                          "javax.faces.Output",
+                          "javax.faces.resource.Script",
+                          ScriptResourceHandler.class);
+
+        this.addComponent("outputStylesheet",
+                          "javax.faces.Output",
+                          "javax.faces.resource.Stylesheet",
+                          StylesheetResourceHandler.class);
+
+        this.addHtmlComponent("panelGrid", "javax.faces.HtmlPanelGrid",
+                "javax.faces.Grid");
+
+        this.addHtmlComponent("panelGroup", "javax.faces.HtmlPanelGroup",
+                "javax.faces.Group");
+
+        this.addHtmlComponent("selectBooleanCheckbox",
+                              "javax.faces.HtmlSelectBooleanCheckbox",
+                              "javax.faces.Checkbox");
+
+        this.addHtmlComponent("selectManyCheckbox",
+                "javax.faces.HtmlSelectManyCheckbox", "javax.faces.Checkbox");
+
+        this.addHtmlComponent("selectManyListbox",
+                "javax.faces.HtmlSelectManyListbox", "javax.faces.Listbox");
+
+        this.addHtmlComponent("selectManyMenu",
+                "javax.faces.HtmlSelectManyMenu", "javax.faces.Menu");
+
+        this.addHtmlComponent("selectOneListbox",
+                "javax.faces.HtmlSelectOneListbox", "javax.faces.Listbox");
+
+        this.addHtmlComponent("selectOneMenu", "javax.faces.HtmlSelectOneMenu",
+                "javax.faces.Menu");
+
+        this.addHtmlComponent("selectOneRadio",
+                "javax.faces.HtmlSelectOneRadio", "javax.faces.Radio");
+
+        this.addHtmlComponent("title", "javax.faces.Output",
+                "javax.faces.Title");
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/ScriptResourceDelegate.java b/com/sun/faces/facelets/tag/jsf/html/ScriptResourceDelegate.java
new file mode 100644
index 0000000..d08f99d
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/ScriptResourceDelegate.java
@@ -0,0 +1,77 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+
+/**
+ * <code>ComponentResourceDelegate</code> for script references.
+ */
+public class ScriptResourceDelegate extends ComponentResourceDelegate {
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ScriptResourceDelegate(ComponentHandler owner) {
+
+        super(owner);
+
+    }
+
+
+    // ----------------------------------- Methods from ComponentResourceDelegate
+
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @return the current value of the "target" attribute of the component
+     *  associated with this delegate
+     */
+    @Override protected String getLocationTarget(FaceletContext ctx) {
+
+        TagAttribute attr = getAttribute("target");
+        return ((attr != null) ? attr.getValue(ctx) : null);
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/ScriptResourceHandler.java b/com/sun/faces/facelets/tag/jsf/html/ScriptResourceHandler.java
new file mode 100644
index 0000000..4a00c06
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/ScriptResourceHandler.java
@@ -0,0 +1,61 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+
+/**
+ * <code>ComponentHandler</code> for <code>h:outputScript</code> references.
+ */
+public class ScriptResourceHandler extends ComponentHandler {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ScriptResourceHandler(ComponentConfig config) {
+
+        super(config);
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceDelegate.java b/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceDelegate.java
new file mode 100644
index 0000000..3eecc5b
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceDelegate.java
@@ -0,0 +1,75 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+
+/**
+ * <code>ComponentResourceDelegate</code> for stylesheet references.
+ */
+public class StylesheetResourceDelegate extends ComponentResourceDelegate {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public StylesheetResourceDelegate(ComponentHandler owner) {
+        super(owner);
+    }
+
+
+    // ----------------------------------- Methods from ComponentResourceDelegate
+
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @return <code>head</code> as external stylesheet references
+     *  are only valid in the head of a document, this method returns
+     *  <code>head</code>
+     */
+    @Override protected String getLocationTarget(FaceletContext ctx) {
+
+        return "head";
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceHandler.java b/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceHandler.java
new file mode 100644
index 0000000..cfe6ca7
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceHandler.java
@@ -0,0 +1,61 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jsf.html;
+
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+
+/**
+ * <code>ComponentHandler</code> for <code>h:outputStylesheet</code> references.
+ */
+public class StylesheetResourceHandler extends ComponentHandler {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public StylesheetResourceHandler(ComponentConfig config) {
+
+        super(config);
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jsf/html/package.html b/com/sun/faces/facelets/tag/jsf/html/package.html
new file mode 100644
index 0000000..17368c7
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jsf/html/package.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+</head>
+<body bgcolor="white">
+Tag Library for <b><a target="_new" href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/h/tld-summary.html">http://java.sun.com/jsf/html</a></b>.
+See JSF HTML Tag Javadocs for attributes/functionality.
+</body>
+</html>
diff --git a/com/sun/faces/facelets/tag/jstl/core/CatchHandler.java b/com/sun/faces/facelets/tag/jstl/core/CatchHandler.java
new file mode 100644
index 0000000..b5101b6
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/CatchHandler.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class CatchHandler extends TagHandlerImpl {
+
+    private final TagAttribute var;
+
+    /**
+     * @param config
+     */
+    public CatchHandler(TagConfig config) {
+        super(config);
+        this.var = this.getAttribute("var");
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        try {
+            this.nextHandler.apply(ctx, parent);
+        } catch (Exception e) {
+            if (this.var != null) {
+                ctx.setAttribute(this.var.getValue(ctx), e);
+            }
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/ChooseHandler.java b/com/sun/faces/facelets/tag/jstl/core/ChooseHandler.java
new file mode 100644
index 0000000..a262d8a
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/ChooseHandler.java
@@ -0,0 +1,114 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class ChooseHandler extends TagHandlerImpl {
+    
+    private final ChooseOtherwiseHandler otherwise;
+    private final ChooseWhenHandler[] when;
+    
+    public ChooseHandler(TagConfig config) {
+        super(config);
+        
+        List whenList = new ArrayList();
+        Iterator itr = this.findNextByType(ChooseWhenHandler.class);
+        while (itr.hasNext()) {
+            whenList.add(itr.next());
+        }
+        if (whenList.isEmpty()) {
+            throw new TagException(this.tag, "Choose Tag must have one or more When Tags");
+        }
+        this.when = (ChooseWhenHandler[]) whenList.toArray(new ChooseWhenHandler[whenList.size()]);
+        
+        itr = this.findNextByType(ChooseOtherwiseHandler.class);
+        if (itr.hasNext()) {
+            this.otherwise = (ChooseOtherwiseHandler) itr.next();
+        } else {
+            this.otherwise = null;
+        }
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        for (int i = 0; i < this.when.length; i++) {
+            if (this.when[i].isTestTrue(ctx)) {
+                this.when[i].apply(ctx, parent);
+                return;
+            }
+        }
+        if (this.otherwise != null) {
+            this.otherwise.apply(ctx, parent);
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/ChooseOtherwiseHandler.java b/com/sun/faces/facelets/tag/jstl/core/ChooseOtherwiseHandler.java
new file mode 100644
index 0000000..87f8edf
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/ChooseOtherwiseHandler.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class ChooseOtherwiseHandler extends TagHandlerImpl {
+
+    public ChooseOtherwiseHandler(TagConfig config) {
+        super(config);
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        this.nextHandler.apply(ctx, parent);
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/ChooseWhenHandler.java b/com/sun/faces/facelets/tag/jstl/core/ChooseWhenHandler.java
new file mode 100644
index 0000000..db2e6ea
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/ChooseWhenHandler.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class ChooseWhenHandler extends TagHandlerImpl {
+
+    private final TagAttribute test;
+    
+    public ChooseWhenHandler(TagConfig config) {
+        super(config);
+        this.test = this.getRequiredAttribute("test");
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        this.nextHandler.apply(ctx, parent);
+    }
+    
+    public boolean isTestTrue(FaceletContext ctx) {
+        return this.test.getBoolean(ctx);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/ForEachHandler.java b/com/sun/faces/facelets/tag/jstl/core/ForEachHandler.java
new file mode 100644
index 0000000..8f2fb2e
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/ForEachHandler.java
@@ -0,0 +1,326 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.facelets.tag.jsf.ComponentSupport;
+
+import com.sun.faces.facelets.tag.jsf.IterationIdManager;
+
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.util.*;
+
+/**
+ * @author Jacob Hookom
+ * @author Andrew Robinson
+ */
+public final class ForEachHandler extends TagHandlerImpl {
+
+    private static class ArrayIterator implements Iterator {
+
+        protected final Object array;
+
+        protected int i;
+
+        protected final int len;
+
+        public ArrayIterator(Object src) {
+            this.i = 0;
+            this.array = src;
+            this.len = Array.getLength(src);
+        }
+
+        public boolean hasNext() {
+            return this.i < this.len;
+        }
+
+        public Object next() {
+            try {
+                return Array.get(this.array, this.i++);
+            } catch (ArrayIndexOutOfBoundsException ioob) {
+                throw new NoSuchElementException();
+            }
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    private final TagAttribute begin;
+
+    private final TagAttribute end;
+
+    private final TagAttribute items;
+
+    private final TagAttribute step;
+
+    private final TagAttribute tranzient;
+
+    private final TagAttribute var;
+
+    private final TagAttribute varStatus;
+
+    /**
+     * @param config
+     */
+    public ForEachHandler(TagConfig config) {
+        super(config);
+        this.items = this.getAttribute("items");
+        this.var = this.getAttribute("var");
+        this.begin = this.getAttribute("begin");
+        this.end = this.getAttribute("end");
+        this.step = this.getAttribute("step");
+        this.varStatus = this.getAttribute("varStatus");
+        this.tranzient = this.getAttribute("transient");
+
+        if (this.items == null && this.begin != null && this.end == null) {
+            throw new TagAttributeException(
+                    this.tag,
+                    this.begin,
+                    "If the 'items' attribute is not specified, but the 'begin' attribute is, then the 'end' attribute is required");
+        }
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        
+        int s = this.getBegin(ctx);
+        int e = this.getEnd(ctx);
+        int m = this.getStep(ctx);
+        Integer sO = this.begin != null ? s : null;
+        Integer eO = this.end != null ? e : null;
+        Integer mO = this.step != null ? m : null;
+        
+        boolean t = this.getTransient(ctx);
+        Object src = null;
+        ValueExpression srcVE = null;
+        if (this.items != null) {
+            srcVE = this.items.getValueExpression(ctx, Object.class);
+            src = srcVE.getValue(ctx);
+        } else {
+            byte[] b = new byte[e + 1];
+            for (int i = 0; i < b.length; i++) {
+                b[i] = (byte) i;
+            }
+            src = b;
+        }
+        if (src != null) {
+            Iterator itr = this.toIterator(src);
+            if (itr != null) {
+                int i = 0;
+
+                // move to start
+                while (i < s && itr.hasNext()) {
+                    itr.next();
+                    i++;
+                }
+
+                String v = this.getVarName(ctx);
+                String vs = this.getVarStatusName(ctx);
+                VariableMapper vars = ctx.getVariableMapper();
+                ValueExpression ve = null;
+                ValueExpression vO = this.capture(v, vars);
+                ValueExpression vsO = this.capture(vs, vars);
+                int mi = 0;
+                Object value = null;
+                int count = 0;
+                
+                IterationIdManager.startIteration(ctx);
+                
+                try {
+                    boolean first = true;
+                    while (i <= e && itr.hasNext()) {
+                        count++;
+                        value = itr.next();
+
+                        // set the var
+                        if (v != null) {
+                            if (t || srcVE == null) {
+                                ctx.setAttribute(v, value);
+                            } else {
+                                ve = this.getVarExpr(srcVE, src, value, i, s);
+                                vars.setVariable(v, ve);
+                            }
+                        }
+
+                        // set the varStatus
+                        if (vs != null) {
+                            JstlIterationStatus itrS = new JstlIterationStatus(first, !itr.hasNext(),i, sO, eO, mO, value, count);
+                            if (t || srcVE == null) {
+                                ctx.setAttribute(vs, itrS);
+                            } else {
+                                ve = new IterationStatusExpression(itrS);
+                                vars.setVariable(vs, ve);
+                            }
+                        }
+
+
+                        // execute body
+                        this.nextHandler.apply(ctx, parent);
+
+                        // increment steps
+                        mi = 1;
+                        while (mi < m && itr.hasNext()) {
+                            itr.next();
+                            mi++;
+                            i++;
+                        }
+                        i++;
+                        
+                        first = false;
+                    }
+                } finally {
+                    if (v != null) {
+                        vars.setVariable(v, vO);
+                    }
+                    if (vs != null) {
+                        vars.setVariable(vs, vsO);
+                    }
+                    IterationIdManager.stopIteration(ctx);
+                }
+            }
+        }
+    }
+
+    private ValueExpression capture(String name, VariableMapper vars) {
+        if (name != null) {
+            return vars.setVariable(name, null);
+        }
+        return null;
+    }
+
+    private int getBegin(FaceletContext ctx) {
+        if (this.begin != null) {
+            return this.begin.getInt(ctx);
+        }
+        return 0;
+    }
+
+    private int getEnd(FaceletContext ctx) {
+        if (this.end != null) {
+            return this.end.getInt(ctx);
+        }
+        return Integer.MAX_VALUE - 1; //hotspot bug in the JVM
+    }
+
+    private int getStep(FaceletContext ctx) {
+        if (this.step != null) {
+            return this.step.getInt(ctx);
+        }
+        return 1;
+    }
+
+    private boolean getTransient(FaceletContext ctx) {
+        if (this.tranzient != null) {
+            return this.tranzient.getBoolean(ctx);
+        }
+        return false;
+    }
+
+    private ValueExpression getVarExpr(ValueExpression ve, Object src,
+            Object value, int i, int start) {
+        if (src instanceof List || src.getClass().isArray()) {
+            return new IndexedValueExpression(ve, i);
+        } else if (src instanceof Map && value instanceof Map.Entry) {
+            return new MappedValueExpression(ve, (Map.Entry) value);
+        } else if (src instanceof Collection) {
+            return new IteratedValueExpression(ve, start, i);
+        }
+        throw new IllegalStateException("Cannot create VE for: " + src);
+    }
+
+    private String getVarName(FaceletContext ctx) {
+        if (this.var != null) {
+            return this.var.getValue(ctx);
+        }
+        return null;
+    }
+
+    private String getVarStatusName(FaceletContext ctx) {
+        if (this.varStatus != null) {
+            return this.varStatus.getValue(ctx);
+        }
+        return null;
+    }
+
+    private Iterator toIterator(Object src) {
+        if (src == null) {
+            return null;
+        } else if (src instanceof Collection) {
+            return ((Collection) src).iterator();
+        } else if (src instanceof Map) {
+            return ((Map) src).entrySet().iterator();
+        } else if (src.getClass().isArray()) {
+            return new ArrayIterator(src);
+        } else {
+            throw new TagAttributeException(this.tag, this.items,
+                    "Must evaluate to a Collection, Map, Array, or null.");
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/IfHandler.java b/com/sun/faces/facelets/tag/jstl/core/IfHandler.java
new file mode 100644
index 0000000..8397b99
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/IfHandler.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class IfHandler extends TagHandlerImpl {
+
+    private final TagAttribute test;
+
+    private final TagAttribute var;
+
+    /**
+     * @param config
+     */
+    public IfHandler(TagConfig config) {
+        super(config);
+        this.test = this.getRequiredAttribute("test");
+        this.var = this.getAttribute("var");
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException, FacesException, ELException {
+        boolean b = this.test.getBoolean(ctx);
+        if (this.var != null) {
+            ctx.setAttribute(var.getValue(ctx), b);
+        }
+        if (b) {
+            this.nextHandler.apply(ctx, parent);
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/IndexedValueExpression.java b/com/sun/faces/facelets/tag/jstl/core/IndexedValueExpression.java
new file mode 100644
index 0000000..d8da6ab
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/IndexedValueExpression.java
@@ -0,0 +1,187 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class IndexedValueExpression extends ValueExpression {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    private final Integer i;
+
+    private final ValueExpression orig;
+
+    /**
+     * 
+     */
+    public IndexedValueExpression(ValueExpression orig, int i) {
+        this.i = i;
+        this.orig = orig;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
+     */
+    public Object getValue(ELContext context) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(false);
+            return context.getELResolver().getValue(context, base, i);
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
+     *      java.lang.Object)
+     */
+    public void setValue(ELContext context, Object value) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(false);
+            context.getELResolver().setValue(context, base, i, value);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
+     */
+    public boolean isReadOnly(ELContext context) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(false);
+            return context.getELResolver().isReadOnly(context, base, i);
+        }
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
+     */
+    public Class getType(ELContext context) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(false);
+            return context.getELResolver().getType(context, base, i);
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getExpectedType()
+     */
+    public Class getExpectedType() {
+        return Object.class;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#getExpressionString()
+     */
+    public String getExpressionString() {
+        return this.orig.getExpressionString();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#equals(java.lang.Object)
+     */
+    public boolean equals(Object obj) {
+        return this.orig.equals(obj);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#hashCode()
+     */
+    public int hashCode() {
+        return this.orig.hashCode();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#isLiteralText()
+     */
+    public boolean isLiteralText() {
+        return false;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/IteratedValueExpression.java b/com/sun/faces/facelets/tag/jstl/core/IteratedValueExpression.java
new file mode 100644
index 0000000..d6752f3
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/IteratedValueExpression.java
@@ -0,0 +1,190 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import java.util.Collection;
+import java.util.Iterator;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.PropertyNotWritableException;
+import javax.el.ValueExpression;
+
+public final class IteratedValueExpression extends ValueExpression {
+
+    private static final long serialVersionUID = 1L;
+
+    private ValueExpression orig;
+
+    private int start;
+    private int index;
+
+    public IteratedValueExpression(ValueExpression orig, int start, int index) {
+        this.orig = orig;
+        this.start = start;
+        this.index = index;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
+     */
+    public Object getValue(ELContext context) {
+        Collection collection = (Collection) orig.getValue(context);
+        Iterator iterator = collection.iterator();
+        Object result = null;
+        int i = start;
+        if (i != 0) {
+            while(i != 0) {
+                result = iterator.next();
+                if (!iterator.hasNext()) {
+                    throw new ELException("Unable to position start");
+                }
+                i--;
+            }
+        } else {
+            result = iterator.next();
+        }
+        while(i < index) {
+            if (!iterator.hasNext()) {
+                throw new ELException("Unable to get given value");
+            }
+            i++;
+            result = iterator.next();
+        }
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
+     *      java.lang.Object)
+     */
+    public void setValue(ELContext context, Object value) {
+        context.setPropertyResolved(false);
+        throw new PropertyNotWritableException();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
+     */
+    public boolean isReadOnly(ELContext context) {
+        context.setPropertyResolved(false);
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
+     */
+    public Class getType(ELContext context) {
+        context.setPropertyResolved(false);
+        return Object.class;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.ValueExpression#getExpectedType()
+     */
+    public Class getExpectedType() {
+        return Object.class;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.Expression#getExpressionString()
+     */
+    public String getExpressionString() {
+        return this.orig.getExpressionString();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.Expression#equals(java.lang.Object)
+     */
+    public boolean equals(Object obj) {
+        return this.orig.equals(obj);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.Expression#hashCode()
+     */
+    public int hashCode() {
+        return this.orig.hashCode();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see javax.el.Expression#isLiteralText()
+     */
+    public boolean isLiteralText() {
+        return false;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/IterationStatusExpression.java b/com/sun/faces/facelets/tag/jstl/core/IterationStatusExpression.java
new file mode 100644
index 0000000..e631e58
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/IterationStatusExpression.java
@@ -0,0 +1,178 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.IterationStatus;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: IterationStatusExpression.java 12360 2013-08-07 21:28:56Z edburns $
+ */
+public final class IterationStatusExpression extends ValueExpression {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    private final IterationStatus status;
+
+    /**
+     * 
+     */
+    public IterationStatusExpression(IterationStatus status) {
+        this.status = status;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
+     */
+    public Object getValue(ELContext context) {
+        return this.status;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
+     *      java.lang.Object)
+     */
+    public void setValue(ELContext context, Object value) {
+        throw new UnsupportedOperationException("Cannot set IterationStatus");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
+     */
+    public boolean isReadOnly(ELContext context) {
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
+     */
+    public Class getType(ELContext context) {
+        return IterationStatus.class;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getExpectedType()
+     */
+    public Class getExpectedType() {
+        return IterationStatus.class;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#getExpressionString()
+     */
+    public String getExpressionString() {
+        return this.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final IterationStatusExpression other = (IterationStatusExpression) obj;
+        if (this.status != other.status && (this.status == null || !this.status.equals(other.status))) {
+            return false;
+        }
+        return true;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#hashCode()
+     */
+    public int hashCode() {
+        return this.status.hashCode();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#isLiteralText()
+     */
+    public boolean isLiteralText() {
+        return true;
+    }
+
+    public String toString() {
+        return this.status.toString();
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/JstlCoreLibrary.java b/com/sun/faces/facelets/tag/jstl/core/JstlCoreLibrary.java
new file mode 100644
index 0000000..1f5e0cc
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/JstlCoreLibrary.java
@@ -0,0 +1,109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.AbstractTagLibrary;
+
+/**
+ * The JSTL c library.
+ *
+ * @author Jacob Hookom
+ */
+public final class JstlCoreLibrary extends AbstractTagLibrary {
+
+    /**
+     * Stores the default namespace.
+     */
+    public final static String Namespace = "http://java.sun.com/jsp/jstl/core";
+    public final static String IncorrectNamespace = "http://java.sun.com/jstl/core";
+    public final static String XMLNSNamespace = "http://xmlns.jcp.org/jsp/jstl/core";
+
+    /**
+     * Default constructor.
+     */
+    public JstlCoreLibrary() {
+        super(Namespace);
+        this.addTagHandler("if", IfHandler.class);
+        this.addTagHandler("forEach", ForEachHandler.class);
+        this.addTagHandler("catch", CatchHandler.class);
+        this.addTagHandler("choose", ChooseHandler.class);
+        this.addTagHandler("when", ChooseWhenHandler.class);
+        this.addTagHandler("otherwise", ChooseOtherwiseHandler.class);
+        this.addTagHandler("set", SetHandler.class);
+    }
+
+    /**
+     * Constructor.
+     *
+     * <p> This constructor is used to allow the namespace
+     * 'http://java.sun.com/jstl/core' to be used as another way to resolve to
+     * the JSTL c library. This is used for backwards compatibility. </p>
+     *
+     * @param namespace the namespace.
+     */
+    public JstlCoreLibrary(String namespace) {
+        super(namespace);
+        this.addTagHandler("if", IfHandler.class);
+        this.addTagHandler("forEach", ForEachHandler.class);
+        this.addTagHandler("catch", CatchHandler.class);
+        this.addTagHandler("choose", ChooseHandler.class);
+        this.addTagHandler("when", ChooseWhenHandler.class);
+        this.addTagHandler("otherwise", ChooseOtherwiseHandler.class);
+        this.addTagHandler("set", SetHandler.class);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/JstlIterationStatus.java b/com/sun/faces/facelets/tag/jstl/core/JstlIterationStatus.java
new file mode 100644
index 0000000..3610e10
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/JstlIterationStatus.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2009-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.IterationStatus;
+
+import javax.servlet.jsp.jstl.core.LoopTagStatus;
+
+public class JstlIterationStatus extends IterationStatus implements
+      LoopTagStatus {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public JstlIterationStatus(boolean first,
+                               boolean last,
+                               int index,
+                               Integer begin,
+                               Integer end,
+                               Integer step) {
+        super(first,
+              last,
+              index,
+              begin,
+              end,
+              step);
+    }
+
+    public JstlIterationStatus(boolean first,
+                               boolean last,
+                               int index,
+                               Integer begin,
+                               Integer end,
+                               Integer step,
+                               Object current,
+                               int iterationCount) {
+        super(first,
+              last,
+              index,
+              begin,
+              end,
+              step,
+              current,
+              iterationCount);
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/MappedValueExpression.java b/com/sun/faces/facelets/tag/jstl/core/MappedValueExpression.java
new file mode 100644
index 0000000..3f70131
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/MappedValueExpression.java
@@ -0,0 +1,215 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * @author Jacob Hookom
+ * @version $Id: MappedValueExpression.java 8641 2010-10-04 20:54:50Z edburns $
+ */
+public final class MappedValueExpression extends ValueExpression {
+
+    private final static class Entry implements Map.Entry, Serializable {
+
+        private final Map src;
+        private final Object key;
+
+        public Entry(Map src, Object key) {
+            this.src = src;
+            this.key = key;
+        }
+
+        public Object getKey() {
+            return key;
+        }
+
+        public Object getValue() {
+            return src.get(key);
+        }
+
+        public Object setValue(Object value) {
+            return src.put(key, value);
+        }
+
+    }
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    private final Object key;
+
+    private final ValueExpression orig;
+
+    /**
+     * 
+     */
+    public MappedValueExpression(ValueExpression orig, Map.Entry entry) {
+        this.orig = orig;
+        this.key = entry.getKey();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
+     */
+    public Object getValue(ELContext context) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(true);
+            return new Entry((Map) base, key);
+            
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
+     *      java.lang.Object)
+     */
+    public void setValue(ELContext context, Object value) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(false);
+            context.getELResolver().setValue(context, base, key, value);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
+     */
+    public boolean isReadOnly(ELContext context) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(false);
+            return context.getELResolver().isReadOnly(context, base, key);
+        }
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
+     */
+    public Class getType(ELContext context) {
+        Object base = this.orig.getValue(context);
+        if (base != null) {
+            context.setPropertyResolved(false);
+            return context.getELResolver().getType(context, base, key);
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.ValueExpression#getExpectedType()
+     */
+    public Class getExpectedType() {
+        return Object.class;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#getExpressionString()
+     */
+    public String getExpressionString() {
+        return this.orig.getExpressionString();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#equals(java.lang.Object)
+     */
+    public boolean equals(Object obj) {
+        return this.orig.equals(obj);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.el.Expression#hashCode()
+     */
+    public int hashCode() {
+        return 0;
+    }
+
+    /*
+     * (non-Javadoc)eturn new Map.Entry<K, V>
+     * 
+     * @see javax.el.Expression#isLiteralText()
+     */
+    public boolean isLiteralText() {
+        return false;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/jstl/core/SetHandler.java b/com/sun/faces/facelets/tag/jstl/core/SetHandler.java
new file mode 100644
index 0000000..3809930
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/core/SetHandler.java
@@ -0,0 +1,195 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.core;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.*;
+import java.io.IOException;
+import java.util.Iterator;
+
+/**
+ * Simplified implementation of c:set
+ * 
+ * @author Jacob Hookom
+ * @version $Id: SetHandler.java 12550 2013-09-17 14:48:29Z mriem $
+ */
+public class SetHandler extends TagHandlerImpl {
+
+    private final TagAttribute var;
+    
+    private final TagAttribute value;
+
+
+    
+    private final TagAttribute target;
+    
+    private final TagAttribute property;
+    
+    private final TagAttribute scope;
+    
+    public SetHandler(TagConfig config) {
+        super(config);
+        this.value = this.getAttribute("value");
+        this.var = this.getAttribute("var");
+        this.target = this.getAttribute("target");
+        this.property = this.getAttribute("property");
+        this.scope = this.getAttribute("scope");
+        
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+
+        StringBuilder bodyValue = new StringBuilder();
+
+        Iterator iter = TagHandlerImpl.findNextByType(this.nextHandler,
+                TextHandler.class);
+        while (iter.hasNext()) {
+            TextHandler text = (TextHandler) iter.next();
+            bodyValue.append(text.getText(ctx));
+        }
+
+        // true if either a value in body or value attr
+        boolean valSet = bodyValue.length() > 0 || (value != null && value.getValue().length() >0);
+
+        // Apply precedence algorithm for attributes.  The JstlCoreTLV doesn't
+        // seem to enforce much in the way of this, so I edburns needs to check
+        // with an authority on the matter, probabyl Kin-Man Chung
+        
+        ValueExpression veObj;
+        ValueExpression lhs;
+        String expr;
+
+        if (this.value != null) {
+            veObj = this.value.getValueExpression(ctx, Object.class);
+        } else {
+
+            veObj = ctx.getExpressionFactory().createValueExpression(
+                    ctx.getFacesContext().getELContext(),bodyValue.toString(),Object.class);
+        }
+
+        // Otherwise, if var is set, ignore the other attributes
+        if (this.var != null) {
+            String scopeStr, varStr = this.var.getValue(ctx);
+            
+            // If scope is set, check for validity
+            if (null != this.scope) {
+                if (0 == this.scope.getValue().length()) {
+                    throw new TagException(tag, "zero length scope attribute set");
+                }
+                
+                if (this.scope.isLiteral()) {
+                    scopeStr = this.scope.getValue();
+                } else {
+                    scopeStr = this.scope.getValue(ctx);
+                }
+                if (scopeStr.equals("page")) {
+                    throw new TagException(tag, "page scope does not exist in JSF, consider using view scope instead.");
+                }
+                if (scopeStr.equals("request") || scopeStr.equals("session") ||
+                        scopeStr.equals("application") || scopeStr.equals("view")) {
+                    scopeStr = scopeStr + "Scope";
+                }
+                // otherwise, assume it's a valid scope.  With custom scopes,
+                // it may be.
+                // Conjure up an expression
+                expr = "#{" + scopeStr +"." + varStr + "}";
+                lhs = ctx.getExpressionFactory().
+                        createValueExpression(ctx, expr, Object.class);
+                lhs.setValue(ctx, veObj.getValue(ctx));
+            }
+            else {
+                ctx.getVariableMapper().setVariable(varStr, veObj);
+            }
+        } else  {
+           
+            // Otherwise, target, property and value must be set
+            if ((null == this.target || null == this.target.getValue() ||
+                 this.target.getValue().length() <= 0) ||
+                (null == this.property || null == this.property.getValue() ||
+                 this.property.getValue().length() <= 0) || !valSet) {
+
+                throw new TagException(tag, "when using this tag either one of var and value, or (target, property, value) must be set.");
+            }
+            // Ensure that target is an expression
+            if (this.target.isLiteral()) {
+                throw new TagException(tag, "value of target attribute must be an expression");
+            }
+            // Get the value of property
+            String propertyStr = null;
+            if (this.property.isLiteral()) {
+                propertyStr = this.property.getValue();
+            } else {
+                propertyStr = this.property.getValue(ctx);
+            }
+            ValueExpression targetVe = this.target.getValueExpression(ctx, Object.class);
+            Object targetValue = targetVe.getValue(ctx);
+            ctx.getFacesContext().getELContext().getELResolver().setValue(ctx, 
+                    targetValue, propertyStr, veObj.getValue(ctx));
+            
+        }
+    }
+
+    // Swallow children - if they're text, we've already handled them.
+    protected void applyNextHandler(FaceletContext ctx, UIComponent c) {
+    }
+}
diff --git a/com/sun/faces/facelets/tag/jstl/fn/JstlFunction.java b/com/sun/faces/facelets/tag/jstl/fn/JstlFunction.java
new file mode 100644
index 0000000..8cdbf4a
--- /dev/null
+++ b/com/sun/faces/facelets/tag/jstl/fn/JstlFunction.java
@@ -0,0 +1,320 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.jstl.fn;
+
+import java.lang.reflect.Array;
+import java.util.*;
+
+/**
+ * Implementations of JSTL Functions
+ * 
+ * @author Jacob Hookom
+ */
+public final class JstlFunction {
+
+    private JstlFunction() {
+    }
+
+    public static boolean contains(String name, String searchString) {
+        if (name == null) {
+            name = "";
+        }
+        if (searchString == null) {
+            searchString = "";
+        }
+        return name.contains(searchString);
+    }
+
+    public static boolean containsIgnoreCase(String name, String searchString) {
+        if (name == null) {
+            name = "";
+        }
+        if (searchString == null) {
+            searchString = "";
+        }
+        return name.toLowerCase().contains(searchString.toLowerCase());
+    }
+
+    public static boolean endsWith(String name, String searchString) {
+        if (name == null) {
+            name = "";
+        }
+        if (searchString == null) {
+            searchString = "";
+        }
+        return name.endsWith(searchString);
+    }
+
+    public static String escapeXml(String value) {
+        if (value == null || value.length() == 0) {
+            value = "";
+        }
+        StringBuilder b = new StringBuilder(value.length());
+        for (int i = 0, len = value.length(); i < len; i++) {
+            char c = value.charAt(i);
+            if (c == '<') {
+                b.append("<");
+            } else if (c == '>') {
+                b.append(">");
+            } else if (c == '\'') {
+                b.append("'");
+            } else if (c == '"') {
+                b.append(""");
+            } else if (c == '&') {
+                b.append("&");
+            } else {
+                b.append(c);
+            }
+        }
+        return b.toString();
+    }
+
+    public static int indexOf(String name, String searchString) {
+        if (name == null) {
+            name = "";
+        }
+        if (searchString == null) {
+            searchString = "";
+        }
+        return name.indexOf(searchString);
+    }
+
+    public static String join(String[] a, String delim) {
+        if (a == null|| a.length == 0) {
+            return "";
+        }
+        boolean skipDelim = false;
+        if (delim == null || delim.length() == 0) {
+            skipDelim = true;
+        }
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0, len = a.length, delimCount = (len - 1); i < len; i++) {
+            sb.append(a[i]);
+            if (!skipDelim && (i < delimCount)) {
+                sb.append(delim);
+            }
+        }
+        return sb.toString();
+    }
+
+    public static int length(Object obj) {
+        if (obj == null) {
+            return 0;
+        }
+        if (obj instanceof Collection) {
+            return ((Collection) obj).size();
+        }
+        if (obj.getClass().isArray()) {
+            return Array.getLength(obj);
+        }
+        if (obj instanceof String) {
+            return ((String) obj).length();
+        }
+        if (obj instanceof Map) {
+            return ((Map) obj).size();
+        }
+        if (obj instanceof Enumeration) {
+            Enumeration e = (Enumeration) obj;
+            int count = 0;
+            while (e.hasMoreElements()) {
+                e.nextElement();
+                count++;
+            }
+            return count;
+        }
+        if (obj instanceof Iterator) {
+            Iterator i = (Iterator) obj;
+            int count = 0;
+            while (i.hasNext()) {
+                i.next();
+                count++;
+            }
+            return count;
+        }
+        throw new IllegalArgumentException("Object type not supported: "
+                + obj.getClass().getName());
+    }
+    
+    public static String replace(String value, String before, String after) {
+        if (value == null) {
+            value = "";
+        }
+        if (before == null) {
+            before = "";
+        }
+        if (before.length() == 0) {
+            return value;
+        }
+        if (value.length() == 0) {
+            return "";
+        }
+        if (after == null) {
+            after = "";
+        }
+
+        return value.replaceAll(before, after);
+    }
+    
+    public static String[] split(String value, String d) {
+        if (value == null) {
+            value = "";
+        }
+        if (value.length() == 0) {
+            return new String[]{ "" };
+        }
+        if (d == null) {
+            d = "";
+        }
+        if (d.length() == 0) {
+            return new String[] { value };
+        }
+
+        List<String> tokens = new ArrayList<String>();
+        for (StringTokenizer st = new StringTokenizer(value, d); st.hasMoreTokens(); ) {
+            tokens.add(st.nextToken());
+        }
+
+        return tokens.toArray(new String[tokens.size()]);
+    }
+    
+    public static boolean startsWith(String value, String p) {
+        if (value == null) {
+            value = "";
+        }
+        if (p == null) {
+            p = "";
+        }
+        return value.startsWith(p);
+    }
+    
+    public static String substring(String v, int s, int e) {
+        if (v == null) {
+            v = "";
+        }
+        if (s >= v.length()) {
+            return "";            
+        }
+        if (s < 0) {
+            s = 0;
+        }
+        if (e < 0 || e >= v.length()) {
+            e = v.length();
+        }
+        if (e < s) {
+            return "";
+        }
+        return v.substring(s, e);
+    }
+    
+    public static String substringAfter(String v, String p) {
+        if (v == null) {
+            v = "";
+        }
+        if (v.length() == 0) {
+            return "";
+        }
+        if (p == null) {
+            p = "";
+        }
+        int i = v.indexOf(p);
+        if (i == -1) {
+            return "";
+        }
+        return v.substring(i+p.length());
+    }
+    
+    public static String substringBefore(String v, String s) {
+        if (v == null) {
+            v = "";
+        }
+        if (v.length() == 0) {
+            return "";
+        }
+        if (s == null) {
+            s = "";
+        }
+        int i = v.indexOf(s);
+        if (i == -1) {
+            return "";
+        }
+        return v.substring(0, i);
+    }
+    
+    public static String toLowerCase(String v) {
+        if (v == null || v.length() == 0) {
+            return "";
+        }
+        return v.toLowerCase();
+    }
+    
+    public static String toUpperCase(String v) {
+        if (v == null || v.length() == 0) {
+            return "";
+        }
+        return v.toUpperCase();
+    }
+    
+    public static String trim(String v) {
+        if (v == null || v.length() == 0) {
+            return "";
+        }
+        return v.trim();
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/ui/ComponentRef.java b/com/sun/faces/facelets/tag/ui/ComponentRef.java
new file mode 100644
index 0000000..f303fa1
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/ComponentRef.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import javax.faces.component.UIComponentBase;
+
+public final class ComponentRef extends UIComponentBase {
+
+    public final static String COMPONENT_TYPE = "facelets.ui.ComponentRef";
+    public final static String COMPONENT_FAMILY = "facelets";
+    
+    public ComponentRef() {
+        super();
+    }
+
+    public String getFamily() {
+        return COMPONENT_FAMILY;
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/ui/ComponentRefHandler.java b/com/sun/faces/facelets/tag/ui/ComponentRefHandler.java
new file mode 100644
index 0000000..b6afc70
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/ComponentRefHandler.java
@@ -0,0 +1,72 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+
+public final class ComponentRefHandler extends ComponentHandler {
+
+    public final static String Name = "component";
+    
+    public ComponentRefHandler(ComponentConfig config) {
+        super(config);
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/ui/CompositionHandler.java b/com/sun/faces/facelets/tag/ui/CompositionHandler.java
new file mode 100644
index 0000000..371f555
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/CompositionHandler.java
@@ -0,0 +1,217 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.FaceletContextImplBase;
+import com.sun.faces.facelets.TemplateClient;
+import com.sun.faces.facelets.el.VariableMapperWrapper;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.util.FacesLogger;
+
+import javax.el.VariableMapper;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.context.FacesContext;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class CompositionHandler extends TagHandlerImpl implements
+        TemplateClient {
+
+    private static final Logger log = FacesLogger.FACELETS_COMPOSITION.getLogger();
+
+
+    public final static String Name = "composition";
+
+    protected final TagAttribute template;
+
+    protected final Map handlers;
+
+    protected final ParamHandler[] params;
+
+    /**
+     * @param config
+     */
+    public CompositionHandler(TagConfig config) {
+        super(config);
+        this.template = this.getAttribute("template");
+        if (this.template != null) {
+            this.handlers = new HashMap();
+            Iterator itr = this.findNextByType(DefineHandler.class);
+            DefineHandler d = null;
+            while (itr.hasNext()) {
+                d = (DefineHandler) itr.next();
+                this.handlers.put(d.getName(), d);
+                if (log.isLoggable(Level.FINE)) {
+                    log.fine(tag + " found Define[" + d.getName() + "]");
+                }
+            }
+            List paramC = new ArrayList();
+            itr = this.findNextByType(ParamHandler.class);
+            while (itr.hasNext()) {
+                paramC.add(itr.next());
+            }
+            if (paramC.size() > 0) {
+                this.params = new ParamHandler[paramC.size()];
+                for (int i = 0; i < this.params.length; i++) {
+                    this.params[i] = (ParamHandler) paramC.get(i);
+                }
+            } else {
+                this.params = null;
+            }
+        } else {
+            this.params = null;
+            this.handlers = null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctxObj, UIComponent parent)
+            throws IOException {
+        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
+
+        if (this.template != null) {
+
+            FacesContext facesContext = ctx.getFacesContext();
+            Integer compositionCount = (Integer) facesContext.getAttributes().get("com.sun.faces.uiCompositionCount");
+            if (compositionCount == null) {
+                compositionCount = 1;
+            } else {
+                compositionCount++;
+            }
+            facesContext.getAttributes().put("com.sun.faces.uiCompositionCount", compositionCount);
+            
+            VariableMapper orig = ctx.getVariableMapper();
+            if (this.params != null) {
+                VariableMapper vm = new VariableMapperWrapper(orig);
+                ctx.setVariableMapper(vm);
+                for (int i = 0; i < this.params.length; i++) {
+                    this.params[i].apply(ctx, parent);
+                }
+            }
+
+            ctx.extendClient(this);
+            String path = null;
+            try {
+                path = this.template.getValue(ctx);
+                if (path.trim().length() == 0) {
+                    throw new TagAttributeException(this.tag, this.template, "Invalid path : " + path);
+                }
+                WebConfiguration webConfig = WebConfiguration.getInstance(); 
+                if (path.startsWith(webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory))) {
+                    throw new TagAttributeException(this.tag, this.template, "Invalid path, contract resources cannot be accessed this way : " + path);
+                }
+                ctx.includeFacelet(parent, path);
+            } catch (IOException e) {
+                if (log.isLoggable(Level.FINE)) {
+                    log.log(Level.FINE, e.toString(), e);
+                }
+                throw new TagAttributeException(this.tag, this.template, "Invalid path : " + path);
+            } finally {
+                ctx.popClient(this);
+                ctx.setVariableMapper(orig);
+                
+                compositionCount = (Integer) facesContext.getAttributes().get("com.sun.faces.uiCompositionCount");
+                compositionCount--;
+                
+                if (compositionCount == 0) {
+                    facesContext.getAttributes().remove("com.sun.faces.uiCompositionCount");
+                } else {
+                    facesContext.getAttributes().put("com.sun.faces.uiCompositionCount", compositionCount);
+                }
+            }
+        } else {
+            this.nextHandler.apply(ctx, parent);
+        }
+    }
+
+    public boolean apply(FaceletContext ctx, UIComponent parent, String name)
+          throws IOException {
+        if (name != null) {
+            if (this.handlers == null) {
+                return false;
+            }
+            DefineHandler handler = (DefineHandler) this.handlers.get(name);
+            if (handler != null) {
+                handler.applyDefinition(ctx, parent);
+                return true;
+            } else {
+                return false;
+            }
+        } else {
+            this.nextHandler.apply(ctx, parent);
+            return true;
+        }
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/ui/DecorateHandler.java b/com/sun/faces/facelets/tag/ui/DecorateHandler.java
new file mode 100644
index 0000000..1cd4886
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/DecorateHandler.java
@@ -0,0 +1,179 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.FaceletContextImplBase;
+import com.sun.faces.facelets.TemplateClient;
+import com.sun.faces.facelets.el.VariableMapperWrapper;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.util.FacesLogger;
+
+import javax.el.VariableMapper;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class DecorateHandler extends TagHandlerImpl implements TemplateClient {
+
+    private static final Logger log = FacesLogger.FACELETS_DECORATE.getLogger();
+    
+    private final TagAttribute template;
+
+    private final Map handlers;
+    
+    private final ParamHandler[] params;
+
+    /**
+     * @param config
+     */
+    public DecorateHandler(TagConfig config) {
+        super(config);
+        this.template = this.getRequiredAttribute("template");
+        this.handlers = new HashMap();
+
+        Iterator itr = this.findNextByType(DefineHandler.class);
+        DefineHandler d = null;
+        while (itr.hasNext()) {
+            d = (DefineHandler) itr.next();
+            this.handlers.put(d.getName(), d);
+            if (log.isLoggable(Level.FINE)) {
+                log.fine(tag + " found Define[" + d.getName() + "]");
+            }
+        }
+        List paramC = new ArrayList();
+        itr = this.findNextByType(ParamHandler.class);
+        while (itr.hasNext()) {
+            paramC.add(itr.next());
+        }
+        if (paramC.size() > 0) {
+            this.params = new ParamHandler[paramC.size()];
+            for (int i = 0; i < this.params.length; i++) {
+                this.params[i] = (ParamHandler) paramC.get(i);
+            }
+        } else {
+            this.params = null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctxObj, UIComponent parent)
+            throws IOException {
+        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
+        VariableMapper orig = ctx.getVariableMapper();
+        if (this.params != null) {
+            VariableMapper vm = new VariableMapperWrapper(orig);
+            ctx.setVariableMapper(vm);
+            for (int i = 0; i < this.params.length; i++) {
+                this.params[i].apply(ctx, parent);
+            }
+        }
+
+        ctx.pushClient(this);
+        String path = null;
+        try {
+            path = this.template.getValue(ctx);
+            if (path.trim().length() == 0) {
+                throw new TagAttributeException(this.tag, this.template, "Invalid path : " + path);
+            }
+            WebConfiguration webConfig = WebConfiguration.getInstance(); 
+            if (path.startsWith(webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory))) {
+                throw new TagAttributeException(this.tag, this.template, "Invalid path, contract resources cannot be accessed this way : " + path);
+            }
+            ctx.includeFacelet(parent, path);
+        } catch (IOException e) {
+            if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, e.toString(), e);
+            }
+            throw new TagAttributeException(this.tag, this.template, "Invalid path : " + path);
+        } finally {
+            ctx.setVariableMapper(orig);
+            ctx.popClient(this);
+        }
+    }
+
+    public boolean apply(FaceletContext ctx, UIComponent parent, String name) throws IOException {
+        if (name != null) {
+            DefineHandler handler = (DefineHandler) this.handlers.get(name);
+            if (handler != null) {
+                handler.applyDefinition(ctx, parent);
+                return true;
+            } else {
+                return false;
+            }
+        } else {
+            this.nextHandler.apply(ctx, parent);
+            return true;
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/tag/ui/DefineHandler.java b/com/sun/faces/facelets/tag/ui/DefineHandler.java
new file mode 100644
index 0000000..008014d
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/DefineHandler.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class DefineHandler extends TagHandlerImpl {
+
+    private final String name;
+
+    /**
+     * @param config
+     */
+    public DefineHandler(TagConfig config) {
+        super(config);
+        TagAttribute attr = this.getRequiredAttribute("name");
+        if (!attr.isLiteral()) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+            name = (String) attr.getValueExpression(ctx, String.class).getValue(ctx);
+        } else {
+            name = attr.getValue();
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        // no-op
+    	//this.nextHandler.apply(ctx, parent);
+    }
+    
+    public void applyDefinition(FaceletContext ctx, UIComponent parent)
+    		throws IOException {
+    	this.nextHandler.apply(ctx, parent);
+    }
+
+    public String getName() {
+        return this.name;
+    }
+}
diff --git a/com/sun/faces/facelets/tag/ui/IncludeHandler.java b/com/sun/faces/facelets/tag/ui/IncludeHandler.java
new file mode 100644
index 0000000..16cfc03
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/IncludeHandler.java
@@ -0,0 +1,134 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.el.VariableMapperWrapper;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+import com.sun.faces.util.FacesLogger;
+
+import javax.el.VariableMapper;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.view.facelets.TagException;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class IncludeHandler extends TagHandlerImpl {
+
+    private static final Logger log = FacesLogger.FACELETS_INCLUDE.getLogger();
+
+    private final TagAttribute src;
+
+    /**
+     * @param config
+     */
+    public IncludeHandler(TagConfig config) {
+        super(config);
+        TagAttribute attr = null;
+        attr = this.getAttribute("src");
+        if (null == attr) {
+            attr = this.getAttribute("file");
+        }
+        if (null == attr) {
+            attr = this.getAttribute("page");
+        }
+        if (null == attr) {
+            throw new TagException(this.tag, "Attribute 'src', 'file' or 'page' is required");
+        }
+        this.src = attr;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        String path = this.src.getValue(ctx);
+        if (path == null || path.length() == 0) {
+            return;
+        }
+        VariableMapper orig = ctx.getVariableMapper();
+        ctx.setVariableMapper(new VariableMapperWrapper(orig));
+        try {
+            this.nextHandler.apply(ctx, null);
+            WebConfiguration webConfig = WebConfiguration.getInstance();
+            if (path.startsWith(webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory))) {
+                throw new TagAttributeException(this.tag, this.src, "Invalid src, contract resources cannot be accessed this way : " + path);
+            }
+            ctx.includeFacelet(parent, path);
+        } catch (IOException e) {
+            if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, e.toString(), e);
+            }
+            throw new TagAttributeException(this.tag, this.src, "Invalid path : " + path);
+        } finally {
+            ctx.setVariableMapper(orig);
+        }
+    }
+}
diff --git a/com/sun/faces/facelets/tag/ui/InsertHandler.java b/com/sun/faces/facelets/tag/ui/InsertHandler.java
new file mode 100644
index 0000000..77344eb
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/InsertHandler.java
@@ -0,0 +1,127 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.facelets.FaceletContextImplBase;
+import com.sun.faces.facelets.TemplateClient;
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class InsertHandler extends TagHandlerImpl implements TemplateClient {
+
+    private final String name;
+
+    /**
+     * @param config
+     */
+    public InsertHandler(TagConfig config) {
+        super(config);
+        TagAttribute attr = this.getAttribute("name");
+        if (attr != null) {
+            if (!attr.isLiteral()) {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
+                this.name = (String) attr.getValueExpression(ctx, String.class).getValue(ctx);
+            } else {
+                this.name = attr.getValue();
+            }
+        } else {
+            this.name = null;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctxObj, UIComponent parent)
+            throws IOException {
+        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
+        
+        ctx.extendClient(this);
+        boolean found = false;
+        try {
+            found = ctx.includeDefinition(parent, this.name);
+        } finally {
+            ctx.popClient(this);
+        }
+        if (!found) {
+            this.nextHandler.apply(ctx, parent);
+        }
+    }
+
+    public boolean apply(FaceletContext ctx, UIComponent parent, String name) throws IOException {
+        if (this.name != null && this.name.equals(name)) {
+            this.nextHandler.apply(ctx, parent);
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/com/sun/faces/facelets/tag/ui/ParamHandler.java b/com/sun/faces/facelets/tag/ui/ParamHandler.java
new file mode 100644
index 0000000..d9e5173
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/ParamHandler.java
@@ -0,0 +1,102 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.facelets.tag.TagHandlerImpl;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagConfig;
+import java.io.IOException;
+
+/**
+ * @author Jacob Hookom
+ */
+public class ParamHandler extends TagHandlerImpl {
+
+    private final TagAttribute name;
+
+    private final TagAttribute value;
+
+    /**
+     * @param config
+     */
+    public ParamHandler(TagConfig config) {
+        super(config);
+        this.name = this.getRequiredAttribute("name");
+        this.value = this.getRequiredAttribute("value");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+     *      javax.faces.component.UIComponent)
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+            throws IOException {
+        String nameStr = this.name.getValue(ctx);
+        ValueExpression valueVE = this.value.getValueExpression(ctx,
+                Object.class);
+        ctx.getVariableMapper().setVariable(nameStr, valueVE);
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/ui/RepeatHandler.java b/com/sun/faces/facelets/tag/ui/RepeatHandler.java
new file mode 100644
index 0000000..3f6ce9c
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/RepeatHandler.java
@@ -0,0 +1,142 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.util.FacesLogger;
+import javax.faces.component.UIComponent;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.Metadata;
+import javax.faces.view.facelets.TagAttribute;
+
+public class RepeatHandler extends ComponentHandler {
+
+    private static final Logger log = FacesLogger.FACELETS_COMPOSITION.getLogger();
+    
+    public RepeatHandler(ComponentConfig config) {
+        super(config);
+    }
+
+    @Override
+    protected MetaRuleset createMetaRuleset(Class type) {
+        MetaRuleset meta = super.createMetaRuleset(type);
+        String myNamespace = this.tag.getNamespace();
+
+        if ((!UILibrary.Namespace.equals(myNamespace)) &&
+            (!UILibrary.XMLNSNamespace.equals(myNamespace))) {
+            meta.add(new TagMetaData(type));
+        }
+        
+        meta.alias("class", "styleClass");
+
+        return meta;
+    }
+
+    private class TagMetaData extends Metadata {
+
+        private final String[] attrs;
+
+        public TagMetaData(Class type) {
+            Set s = new HashSet();
+            TagAttribute[] ta = tag.getAttributes().getAll();
+            for (int i = 0; i < ta.length; i++) {
+                if ("class".equals(ta[i].getLocalName())) {
+                    s.add("styleClass");
+                } else {
+                    s.add(ta[i].getLocalName());
+                }
+            }
+            try {
+                PropertyDescriptor[] pd = Introspector.getBeanInfo(type)
+                        .getPropertyDescriptors();
+                for (int i = 0; i < pd.length; i++) {
+                    if (pd[i].getWriteMethod() != null) {
+                        s.remove(pd[i].getName());
+                    }
+                }
+            } catch (Exception e) {
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST, "Unable to get bean info", e);
+                }
+            }
+            this.attrs = (String[]) s.toArray(new String[s.size()]);
+        }
+
+        @Override
+        public void applyMetadata(FaceletContext ctx, Object instance) {
+            UIComponent c = (UIComponent) instance;
+            Map localAttrs = c.getAttributes();
+            localAttrs.put("alias.element", tag.getQName());
+            if (this.attrs.length > 0) {
+                localAttrs.put("alias.attributes", this.attrs);
+            }
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/tag/ui/SchemaCompliantRemoveHandler.java b/com/sun/faces/facelets/tag/ui/SchemaCompliantRemoveHandler.java
new file mode 100644
index 0000000..0ac7fd3
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/SchemaCompliantRemoveHandler.java
@@ -0,0 +1,62 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import java.io.IOException;
+import javax.faces.component.UIComponent;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.FaceletException;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+
+public class SchemaCompliantRemoveHandler extends TagHandler {
+
+    public SchemaCompliantRemoveHandler(TagConfig config) {
+        super(config);
+    }
+
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        throw new FaceletException("Error: The Facelet parser is responsible for handling the <ui:remove> element.  This TagHandler implementation is only provided to allow the ui.taglib.xml file to be compliant with web-facelettaglibrary_2_2.xsd.  If you are seeing this exception, there is something wrong with how the JSF runtime is configuring its Facelets compiler.");
+    }
+
+
+
+}
diff --git a/com/sun/faces/facelets/tag/ui/UIDebug.java b/com/sun/faces/facelets/tag/ui/UIDebug.java
new file mode 100644
index 0000000..4165a9a
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/UIDebug.java
@@ -0,0 +1,207 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.facelets.util.DevTools;
+import com.sun.faces.facelets.util.FastWriter;
+
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class UIDebug extends UIComponentBase {
+
+    public final static String COMPONENT_TYPE = "facelets.ui.Debug";
+    public final static String COMPONENT_FAMILY = "facelets";
+    private static long nextId = System.currentTimeMillis();
+    private final static String KEY = "facelets.ui.DebugOutput";
+    public final static String DEFAULT_HOTKEY = "D";
+    private String hotkey = DEFAULT_HOTKEY;
+
+    public UIDebug() {
+        super();
+        this.setTransient(true);
+        this.setRendererType(null);
+    }
+
+    public String getFamily() {
+        return COMPONENT_FAMILY;
+    }
+
+    public List getChildren() {
+        return new ArrayList() {
+
+            public boolean add(Object o) {
+                throw new IllegalStateException("<ui:debug> does not support children");
+            }
+
+            public void add(int index, Object o) {
+                throw new IllegalStateException("<ui:debug> does not support children");
+            }
+        };
+    }
+
+    public void encodeBegin(FacesContext facesContext) throws IOException {
+        
+        if (isRendered()) {
+            pushComponentToEL(facesContext, this);
+            String actionId = facesContext.getApplication().getViewHandler().getActionURL(facesContext, facesContext.getViewRoot().getViewId());
+
+            StringBuffer sb = new StringBuffer(512);
+            sb.append("//<![CDATA[\n");
+            sb.append("function faceletsDebug(URL) {");
+            sb.append("day = new Date();");
+            sb.append("id = day.getTime();");
+            sb.append("eval(\"page\" + id + \" = window.open(URL, '\" + id + \"', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=800,height=600,left = 240,top = 212');\"); };");
+            sb.append("(function() { if (typeof jsfFaceletsDebug === 'undefined') { var jsfFaceletsDebug = false; } if (!jsfFaceletsDebug) {");
+            sb.append("var faceletsOrigKeyup = document.onkeyup;");
+            sb.append("document.onkeyup = function(e) { if (window.event) e = window.event; if (String.fromCharCode(e.keyCode) == '" + this.getHotkey() + "' & e.shiftKey & e.ctrlKey) faceletsDebug('");
+            sb.append(actionId);
+            sb.append(actionId.indexOf('?') == -1 ? '?' : '&');
+            sb.append(KEY);
+            sb.append('=');
+            sb.append(writeDebugOutput(facesContext));
+            sb.append("'); jsfFaceletsDebug = true; if (faceletsOrigKeyup) faceletsOrigKeyup(e); };\n");
+            sb.append("}})();");
+            sb.append("//]]>\n");
+
+            ResponseWriter writer = facesContext.getResponseWriter();
+            writer.startElement("span", this);
+            writer.writeAttribute("id", getClientId(facesContext), "id");
+            writer.startElement("script", this);
+            writer.writeAttribute("language", "javascript", "language");
+            writer.writeAttribute("type", "text/javascript", "type");
+            writer.writeText(sb.toString(), this, null);
+            writer.endElement("script");
+            writer.endElement("span");
+        }
+    }
+
+    private static String writeDebugOutput(FacesContext faces) throws IOException {
+        FastWriter fw = new FastWriter();
+        DevTools.debugHtml(fw, faces);
+
+        Map session = faces.getExternalContext().getSessionMap();
+        Map debugs = (Map) session.get(KEY);
+        if (debugs == null) {
+            debugs = new LinkedHashMap() {
+
+                protected boolean removeEldestEntry(Map.Entry eldest) {
+                    return (this.size() > 5);
+                }
+            };
+        }
+        session.put(KEY, debugs);
+        String id = "" + nextId++;
+        debugs.put(id, fw.toString());
+        return id;
+    }
+
+    private static String fetchDebugOutput(FacesContext faces, String id) {
+        Map session = faces.getExternalContext().getSessionMap();
+        Map debugs = (Map) session.get(KEY);
+        if (debugs != null) {
+            return (String) debugs.get(id);
+        }
+        return null;
+    }
+
+    public static boolean debugRequest(FacesContext faces) {
+        String id = (String) faces.getExternalContext().getRequestParameterMap().get(KEY);
+        if (id != null) {
+            Object resp = faces.getExternalContext().getResponse();
+            if (!faces.getResponseComplete()
+                    && resp instanceof HttpServletResponse) {
+                try {
+                    HttpServletResponse httpResp = (HttpServletResponse) resp;
+                    String page = fetchDebugOutput(faces, id);
+                    if (page != null) {
+                        httpResp.setContentType("text/html");
+                        httpResp.getWriter().write(page);
+                    } else {
+                        httpResp.setContentType("text/plain");
+                        httpResp.getWriter().write("No Debug Output Available");
+                    }
+                    httpResp.flushBuffer();
+                    faces.responseComplete();
+                } catch (IOException e) {
+                    return false;
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public String getHotkey() {
+        return this.hotkey;
+    }
+
+    public void setHotkey(String hotkey) {
+        this.hotkey = (hotkey != null) ? hotkey.toUpperCase() : "";
+    }
+}
diff --git a/com/sun/faces/facelets/tag/ui/UILibrary.java b/com/sun/faces/facelets/tag/ui/UILibrary.java
new file mode 100644
index 0000000..6489757
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/UILibrary.java
@@ -0,0 +1,101 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.tag.ui;
+
+import com.sun.faces.facelets.component.UIRepeat;
+import com.sun.faces.facelets.tag.AbstractTagLibrary;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class UILibrary extends AbstractTagLibrary {
+
+    public final static String Namespace = "http://java.sun.com/jsf/facelets";
+    public final static String XMLNSNamespace = "http://xmlns.jcp.org/jsf/facelets";
+
+    public final static UILibrary Instance = new UILibrary();
+
+    public UILibrary() {
+        this(Namespace);
+    }
+    
+    public UILibrary(String namespace) {
+        super(namespace);
+        
+        this.addTagHandler("include", IncludeHandler.class);
+
+        this.addTagHandler("composition", CompositionHandler.class);
+        
+        this.addComponent("component", ComponentRef.COMPONENT_TYPE, null, ComponentRefHandler.class);
+        
+        this.addComponent("fragment", ComponentRef.COMPONENT_TYPE, null, ComponentRefHandler.class);
+
+        this.addTagHandler("define", DefineHandler.class);
+
+        this.addTagHandler("insert", InsertHandler.class);
+
+        this.addTagHandler("param", ParamHandler.class);
+
+        this.addTagHandler("decorate", DecorateHandler.class);
+        
+        this.addComponent("repeat", UIRepeat.COMPONENT_TYPE, null, RepeatHandler.class);
+        
+        this.addComponent("debug", UIDebug.COMPONENT_TYPE, null);     
+    }
+}
diff --git a/com/sun/faces/facelets/tag/ui/package.html b/com/sun/faces/facelets/tag/ui/package.html
new file mode 100644
index 0000000..cfe24f3
--- /dev/null
+++ b/com/sun/faces/facelets/tag/ui/package.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+</head>
+<body bgcolor="white">
+Tag Library for <b>http://java.sun.com/jsf/ui</b>.
+See JSF Core Tag Javadocs for attributes/functionality.
+</body>
+</html>
diff --git a/com/sun/faces/facelets/util/Classpath.java b/com/sun/faces/facelets/util/Classpath.java
new file mode 100644
index 0000000..f171e0f
--- /dev/null
+++ b/com/sun/faces/facelets/util/Classpath.java
@@ -0,0 +1,354 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLDecoder;
+import java.util.Enumeration;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+/**
+ * @author Jacob Hookom
+ * @author Roland Huss
+ * @author Ales Justin (ales.justin at jboss.org)
+ */
+public final class Classpath {
+
+    // discard any urls that begin with rar: and sar:
+    // or end with their counterparts
+    // as these should not be looked at for JSF related content.
+    private static final String [] PREFIXES_TO_EXCLUDE = {
+        "rar:",
+        "sar:"
+    };
+    private static final String [] EXTENSIONS_TO_EXCLUDE = {
+        ".rar",
+        ".sar"
+    };
+
+    /**
+     *
+     */
+    public Classpath() {
+        super();
+    }
+    
+    public enum SearchAdvice {
+        FirstMatchOnly,
+        AllMatches
+    };
+
+    public static URL[] search(String prefix, String suffix)
+          throws IOException {
+        return search(Thread.currentThread().getContextClassLoader(), prefix,
+                      suffix, SearchAdvice.AllMatches);
+    }
+    
+    public static URL[] search(ClassLoader cl, String prefix, String suffix) 
+            throws IOException {
+        return search(cl, prefix, suffix, SearchAdvice.AllMatches);
+    }
+
+    public static URL[] search(ClassLoader cl, String prefix, String suffix,
+            SearchAdvice advice)
+          throws IOException {
+        Enumeration[] e = new Enumeration[]{
+              cl.getResources(prefix),
+              cl.getResources(prefix + "MANIFEST.MF")
+        };
+        Set all = new LinkedHashSet();
+        URL url;
+        URLConnection conn;
+        JarFile jarFile;
+        for (int i = 0, s = e.length; i < s; ++i) {
+            while (e[i].hasMoreElements()) {
+                url = (URL) e[i].nextElement();
+                // Defensive programming.  Due to issue 13045 this collection
+                // can contain URLs that have their spaces incorrectly escaped
+                // by having %20 replaced with %2520.  This quick conditional 
+                // check catches this particular case and averts it.
+                String str = url.getPath();
+                if (-1 != str.indexOf("%2520")) {
+                    str = url.toExternalForm();
+                    str = str.replace("%2520", "%20");
+                    url = new URL(str);
+                }
+                conn = url.openConnection();
+                conn.setUseCaches(false);
+                if (conn instanceof JarURLConnection) {
+                    jarFile = ((JarURLConnection) conn).getJarFile();
+                } else {
+                    jarFile = getAlternativeJarFile(url);
+                }
+                if (jarFile != null) {
+                    searchJar(cl, all, jarFile, prefix, suffix, advice);
+                } else {
+                    boolean searchDone =
+                          searchDir(all, new File(URLDecoder.decode(url.getFile(), "UTF-8")), suffix);
+                    if (!searchDone) {
+                        searchFromURL(all, prefix, suffix, url);
+                    }
+                }
+            }
+        }
+        URL[] urlArray = (URL[]) all.toArray(new URL[all.size()]);
+        return urlArray;
+    }
+
+    private static boolean searchDir(Set result, File file, String suffix)
+          throws IOException {
+        if (file.exists() && file.isDirectory()) {
+            File[] fc = file.listFiles();
+            String path;
+            URL src;
+            // protect against Windows JDK bugs for listFiles -
+            // if it's null (even though it shouldn't be) return false
+            if (fc == null) return false;
+
+            for (int i = 0; i < fc.length; i++) {
+                path = fc[i].getAbsolutePath();
+                if (fc[i].isDirectory()) {
+                    searchDir(result, fc[i], suffix);
+                } else if (path.endsWith(suffix)) {
+                    // result.add(new URL("file:/" + path));
+                    result.add(fc[i].toURL());
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Search from URL. Fall back on prefix tokens if not able to read from
+     * original url param.
+     *
+     * @param result the result urls
+     * @param prefix the current prefix
+     * @param suffix the suffix to match
+     * @param url    the current url to start search
+     *
+     * @throws IOException for any error
+     */
+    private static void searchFromURL(Set result, String prefix, String suffix,
+                                      URL url) throws IOException {
+        boolean done = false;
+        InputStream is = getInputStream(url);
+        if (is != null) {
+            ZipInputStream zis;
+            if (is instanceof ZipInputStream) {
+                zis = (ZipInputStream) is;
+            } else {
+                zis = new ZipInputStream(is);
+            }
+            try {
+                ZipEntry entry = zis.getNextEntry();
+                // initial entry should not be null
+                // if we assume this is some inner jar
+                done = (entry != null);
+                while (entry != null) {
+                    String entryName = entry.getName();
+                    if (entryName.endsWith(suffix)) {
+                        String urlString = url.toExternalForm();
+                        result.add(new URL(urlString + entryName));
+                    }
+                    entry = zis.getNextEntry();
+                }
+            } finally {
+                zis.close();
+            }
+        }
+        if (!done && prefix.length() > 0) {
+            // we add '/' at the end since join adds it as well
+            String urlString = url.toExternalForm() + "/";
+            String[] split = prefix.split("/");
+            prefix = join(split, true);
+            String end = join(split, false);
+            int p = urlString.lastIndexOf(end);
+            urlString = urlString.substring(0, p);
+            for (String cur : PREFIXES_TO_EXCLUDE) {
+                if (urlString.startsWith(cur)) {
+                    return;
+                }
+            }
+            url = new URL(urlString);
+            searchFromURL(result, prefix, suffix, url);
+        }
+    }
+
+    /**
+     * Join tokens, exlude last if param equals true.
+     *
+     * @param tokens      the tokens
+     * @param excludeLast do we exclude last token
+     *
+     * @return joined tokens
+     */
+    private static String join(String[] tokens, boolean excludeLast) {
+        StringBuffer join = new StringBuffer();
+        for (int i = 0; i < tokens.length - (excludeLast ? 1 : 0); i++) {
+            join.append(tokens[i]).append("/");
+        }
+        return join.toString();
+    }
+
+    /**
+     * Open input stream from url. Ignore any errors.
+     *
+     * @param url the url to open
+     *
+     * @return input stream or null if not possible
+     */
+    private static InputStream getInputStream(URL url) {
+        try {
+            return url.openStream();
+        } catch (Throwable t) {
+            return null;
+        }
+    }
+
+    /**
+     * For URLs to JARs that do not use JarURLConnection - allowed by the servlet
+     * spec - attempt to produce a JarFile object all the same. Known servlet
+     * engines that function like this include Weblogic and OC4J. This is not a
+     * full solution, since an unpacked WAR or EAR will not have JAR "files" as
+     * such.
+     */
+    private static JarFile getAlternativeJarFile(URL url) throws IOException {
+        String urlFile = url.getFile();
+        return getAlternativeJarFile(urlFile);
+    }
+    
+    static JarFile getAlternativeJarFile(String urlFile) throws IOException {
+        JarFile result = null;
+        // Trim off any suffix - which is prefixed by "!/" on Weblogic
+        int bangSlash = urlFile.indexOf("!/");
+        // Try the less safe "!", used on OC4J
+        int bang = urlFile.indexOf('!');
+        int separatorIndex = -1;
+        
+        // if either are found, take the first one.
+        if (-1 != bangSlash || -1 != bang) {
+            if (bangSlash < bang) {
+                separatorIndex = bangSlash;
+            } else {
+                separatorIndex = bang;
+            }
+        }
+
+        if (separatorIndex != -1) {
+            String jarFileUrl = urlFile.substring(0, separatorIndex);
+            // And trim off any "file:" prefix.
+            if (jarFileUrl.startsWith("file:")) {
+                jarFileUrl = jarFileUrl.substring("file:".length());
+                jarFileUrl = URLDecoder.decode(jarFileUrl, "UTF-8");
+            }
+            boolean foundExclusion = false;
+            for (int i = 0; i < PREFIXES_TO_EXCLUDE.length; i++) {
+                if (jarFileUrl.startsWith(PREFIXES_TO_EXCLUDE[i]) ||
+                    jarFileUrl.endsWith(EXTENSIONS_TO_EXCLUDE[i])) {
+                    foundExclusion = true;
+                    break;
+                }
+            }
+            if (!foundExclusion) {
+                result = new JarFile(jarFileUrl);
+            }
+
+            return result;
+        }
+        return null;
+    }
+
+    private static void searchJar(ClassLoader cl, Set result, JarFile file,
+                                  String prefix, String suffix, SearchAdvice advice)
+          throws IOException {
+        Enumeration e = file.entries();
+        JarEntry entry;
+        String name;
+        while (e.hasMoreElements()) {
+            try {
+                entry = (JarEntry) e.nextElement();
+            } catch (Throwable t) {
+                continue;
+            }
+            name = entry.getName();
+            if (name.startsWith(prefix) && name.endsWith(suffix)) {
+                Enumeration e2 = cl.getResources(name);
+                while (e2.hasMoreElements()) {
+					result.add(e2.nextElement());
+                                        if (advice == SearchAdvice.FirstMatchOnly) {
+                                            return;
+                                        }
+				}
+			}
+		}
+	}
+
+}
diff --git a/com/sun/faces/facelets/util/DevTools.java b/com/sun/faces/facelets/util/DevTools.java
new file mode 100644
index 0000000..e239825
--- /dev/null
+++ b/com/sun/faces/facelets/util/DevTools.java
@@ -0,0 +1,459 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.util;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.util.Util;
+
+import javax.el.Expression;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.Flash;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.ValueBinding;
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.*;
+import java.lang.reflect.Method;
+import java.text.DateFormat;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>
+ * Utility class for displaying Facelet error/debug information.
+ * </p>
+ *
+ * <p>
+ * The public static methods of this class are exposed as EL functions under
+ * the namespace <code>http://java.sun.com/mojarra/private/functions</code>
+ * </p>
+ *
+ *
+ */
+public final class DevTools {
+    
+    public final static String Namespace = "http://java.sun.com/mojarra/private/functions";
+    public final static String NewNamespace = "http://xmlns.jcp.org/mojarra/private/functions";
+
+    private static final Logger LOGGER = Logger.getLogger(DevTools.class.getPackage().getName());
+    
+    private final static String TS = "<";
+    
+    private static final String ERROR_TEMPLATE = "META-INF/facelet-dev-error.xml";
+    
+    private static String[] ERROR_PARTS;
+    
+    private static final String DEBUG_TEMPLATE = "META-INF/facelet-dev-debug.xml";
+    
+    private static String[] DEBUG_PARTS;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private DevTools() {
+        throw new IllegalStateException();
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+     public static void debugHtml(Writer writer, FacesContext faces, Throwable e) throws IOException {
+
+         init();
+         Date now = new Date();
+         for (String ERROR_PART : ERROR_PARTS) {
+             if ("message".equals(ERROR_PART)) {
+                 writeMessage(writer, e);
+             } else if ("trace".equals(ERROR_PART)) {
+                 writeException(writer, e);
+             } else if ("now".equals(ERROR_PART)) {
+                 writer.write(DateFormat.getDateTimeInstance().format(now));
+             } else if ("tree".equals(ERROR_PART)) {
+                 writeComponent(writer, faces.getViewRoot());
+             } else if ("vars".equals(ERROR_PART)) {
+                 writeVariables(writer, faces);
+             } else {
+                 writer.write(ERROR_PART);
+             }
+         }
+
+    }
+
+
+    public static void writeMessage(Writer writer, Throwable e)
+    throws IOException {
+
+        if (e != null) {
+            String msg = e.getMessage();
+            if (msg != null) {
+                writer.write(msg.replaceAll("<", TS));
+            } else {
+                writer.write(e.getClass().getName());
+            }
+        }
+
+    }
+
+
+    public static void writeException(Writer writer, Throwable e)
+    throws IOException {
+
+        if (e != null) {
+            StringWriter str = new StringWriter(256);
+            PrintWriter pstr = new PrintWriter(str);
+            e.printStackTrace(pstr);
+            pstr.close();
+            writer.write(str.toString().replaceAll("<", TS));
+        }
+
+    }
+
+
+    public static void debugHtml(Writer writer, FacesContext faces)
+    throws IOException {
+
+        // PENDING - this and debugHtml(Writer, FacesContext, Exception) should
+        //           be refactored to share code.
+        init();
+        Date now = new Date();
+        for (String DEBUG_PART : DEBUG_PARTS) {
+            if ("message".equals(DEBUG_PART)) {
+                writer.write(faces.getViewRoot().getViewId());
+            } else if ("now".equals(DEBUG_PART)) {
+                writer.write(DateFormat.getDateTimeInstance().format(now));
+            } else if ("tree".equals(DEBUG_PART)) {
+                writeComponent(writer, faces.getViewRoot());
+            } else if ("vars".equals(DEBUG_PART)) {
+                writeVariables(writer, faces);
+            } else {
+                writer.write(DEBUG_PART);
+            }
+        }
+
+    }
+
+    
+    public static void writeVariables(Writer writer, FacesContext faces)
+    throws IOException {
+
+        ExternalContext ctx = faces.getExternalContext();
+        writeVariables(writer, ctx.getRequestParameterMap(), "Request Parameters");
+        if (faces.getViewRoot() != null) {
+            Map<String, Object> viewMap = faces.getViewRoot().getViewMap(false);
+            if (viewMap != null) {
+                writeVariables(writer, viewMap, "View Attributes");
+            } else {
+                writeVariables(writer, Collections.<String,Object>emptyMap(), "View Attributes");
+            }
+        } else {
+            writeVariables(writer, Collections.<String,Object>emptyMap(), "View Attributes");
+        }
+        writeVariables(writer, ctx.getRequestMap(), "Request Attributes");
+        Flash flash = ctx.getFlash();
+        try {
+            flash = ctx.getFlash();
+        } catch (UnsupportedOperationException uoe) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Flash not supported", uoe);
+            }
+        }
+        if (flash != null) {
+            writeVariables(writer, flash, "Flash Attributes");
+        } else {
+            writeVariables(writer, Collections.<String,Object>emptyMap(), "Flash Attributes");
+        }
+        if (ctx.getSession(false) != null) {
+            writeVariables(writer, ctx.getSessionMap(), "Session Attributes");
+        } else {
+            writeVariables(writer, Collections.<String,Object>emptyMap(), "Session Attributes");
+        }
+        writeVariables(writer, ctx.getApplicationMap(), "Application Attributes");
+
+    }
+
+
+    public static void writeComponent(Writer writer, UIComponent c)
+    throws IOException {
+
+        writer.write("<dl style=\"color: #006;\"><dt style=\"border: 1px solid #DDD; padding: 4px; border-left: 2px solid #666; font-family: 'Courier New', Courier, mono; font-size: small;");
+        if (c != null) {
+            if (isText(c)) {
+                writer.write("color: #999;");
+            }
+        }
+        writer.write("\">");
+        if (c == null) {
+            return;
+        }
+
+        boolean hasChildren = c.getChildCount() > 0 || c.getFacets().size() > 0;
+
+        writeStart(writer, c, hasChildren);
+        writer.write("</dt>");
+        if (hasChildren) {
+            if (c.getFacets().size() > 0) {
+                for (Map.Entry entry : c.getFacets().entrySet()) {
+                    writer.write(
+                          "<dd style=\"margin-top: 2px; margin-bottom: 2px;\">");
+                    writer.write(
+                          "<span style=\"font-family: 'Trebuchet MS', Verdana, Arial, Sans-Serif; font-size: small;\">");
+                    writer.write((String) entry.getKey());
+                    writer.write("</span>");
+                    writeComponent(writer, (UIComponent) entry.getValue());
+                    writer.write("</dd>");
+                }
+            }
+            if (c.getChildCount() > 0) {
+                for (UIComponent child : c.getChildren()) {
+                    writer.write(
+                          "<dd style=\"margin-top: 2px; margin-bottom: 2px;\">");
+                    writeComponent(writer, child);
+                    writer.write("</dd>");
+                }
+            }
+            writer.write("<dt style=\"border: 1px solid #DDD; padding: 4px; border-left: 2px solid #666; font-family: 'Courier New', Courier, mono; font-size: small;\">");
+            writeEnd(writer, c);
+            writer.write("</dt>");
+        }
+        writer.write("</dl>");
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static void init() throws IOException {
+
+        if (ERROR_PARTS == null) {
+            ERROR_PARTS = splitTemplate(ERROR_TEMPLATE);
+        }
+        
+        if (DEBUG_PARTS == null) {
+            DEBUG_PARTS = splitTemplate(DEBUG_TEMPLATE);
+        }
+
+    }
+
+
+    private static String[] splitTemplate(String rsc) throws IOException {
+
+        ClassLoader loader = Util.getCurrentLoader(DevTools.class);
+        InputStream is = loader.getResourceAsStream(rsc);
+        if (is == null) {
+            loader = DevTools.class.getClassLoader();
+            is = loader.getResourceAsStream(rsc);
+            if (is == null) {
+                throw new FileNotFoundException(rsc);
+            }
+        }
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        byte[] buff = new byte[512];
+        int read;
+        while ((read = is.read(buff)) != -1) {
+            baos.write(buff, 0, read);
+        }
+        String str = baos.toString(RIConstants.CHAR_ENCODING);
+        return str.split("@@");
+
+    }
+    
+
+
+
+    
+    private static void writeVariables(Writer writer, Map<String,?> vars, String caption) throws IOException {
+
+        writer.write("<table style=\"border: 1px solid #CCC; border-collapse: collapse; border-spacing: 0px; width: 100%; text-align: left;\"><caption style=\"text-align: left; padding: 10px 0; font-size: large;\">");
+        writer.write(caption);
+        writer.write("</caption><thead stype=\"padding: 2px; color: #030; background-color: #F9F9F9;\"><tr style=\"padding: 2px; color: #030; background-color: #F9F9F9;\"><th style=\"padding: 2px; color: #030; background-color: #F9F9F9;width: 10%; \">Name</th><th style=\"padding: 2px; color: #030; background-color: #F9F9F9;width: 90%; \">Value</th></tr></thead><tbody style=\"padding: 10px 6px;\">");
+        boolean written = false;
+        if (!vars.isEmpty()) {
+            SortedMap<String,Object> map = new TreeMap<String,Object>(vars);
+            for (Map.Entry<String,Object> entry : map.entrySet()) {
+                String key = entry.getKey();
+                if (key.indexOf('.') == -1) {
+                    writer.write(
+                          "<tr style=\"padding: 10px 6px;\"><td style=\"padding: 10px 6px;\">");
+                    writer.write(key.replaceAll("<", TS));
+                    writer.write("</td><td>");
+                    writer.write(entry.getValue() == null
+                                 ? "null"
+                                 : entry.getValue().toString()
+                                       .replaceAll("<", TS));
+                    writer.write("</td></tr>");
+                    written = true;
+                }
+            }
+        }
+        if (!written) {
+            writer.write("<tr style=\"padding: 10px 6px;\"><td colspan=\"2\" style=\"padding: 10px 6px;\"><em>None</em></td></tr>");
+        }
+        writer.write("</tbody></table>");
+
+    }
+    
+
+    
+    private static void writeEnd(Writer writer, UIComponent c) throws IOException {
+
+        if (!isText(c)) {
+            writer.write(TS);
+            writer.write('/');
+            writer.write(getName(c));
+            writer.write('>');
+        }
+
+    }
+    
+    private final static String[] IGNORE = new String[] { "parent", "rendererType" };
+    
+    private static void writeAttributes(Writer writer, UIComponent c) {
+
+        try {
+            BeanInfo info = Introspector.getBeanInfo(c.getClass());
+            PropertyDescriptor[] pd = info.getPropertyDescriptors();
+            for (PropertyDescriptor aPd : pd) {
+                if (aPd.getWriteMethod() != null
+                    && Arrays.binarySearch(IGNORE, aPd.getName()) < 0) {
+                    Method m = aPd.getReadMethod();
+                    try {
+                        Object v = m.invoke(c);
+                        if (v != null) {
+                            if (v instanceof Collection
+                                || v instanceof Map
+                                || v instanceof Iterator) {
+                                continue;
+                            }
+                            writer.write(" ");
+                            writer.write(aPd.getName());
+                            writer.write("=\"");
+                            String str;
+                            if (v instanceof Expression) {
+                                str = ((Expression) v).getExpressionString();
+                            } else if (v instanceof ValueBinding) {
+                                str = ((ValueBinding) v).getExpressionString();
+                            } else if (v instanceof MethodBinding) {
+                                str = ((MethodBinding) v).getExpressionString();
+                            } else {
+                                str = v.toString();
+                            }
+                            writer.write(str.replaceAll("<", TS));
+                            writer.write("\"");
+                        }
+                    } catch (Exception e) {
+                        if (LOGGER.isLoggable(Level.FINEST)) {
+                            LOGGER.log(Level.FINEST, "Error writing out attribute", e);
+                        }
+                    }
+                }
+            }
+
+            ValueBinding binding = c.getValueBinding("binding");
+            if (binding != null) {
+                writer.write(" binding=\"");
+                writer.write(binding.getExpressionString().replaceAll("<", TS));
+                writer.write("\"");
+            }
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Error writing out attributes", e);
+            }
+        }
+
+    }
+    
+    private static void writeStart(Writer writer, UIComponent c, boolean children) throws IOException {
+
+        if (isText(c)) {
+            String str = c.toString().trim();
+            writer.write(str.replaceAll("<", TS));
+        } else {
+            writer.write(TS);
+            writer.write(getName(c));
+            writeAttributes(writer, c);
+            if (children) {
+                writer.write('>');
+            } else {
+                writer.write("/>");
+            }
+        }
+
+    }
+    
+    private static String getName(UIComponent c) {
+
+        String nm = c.getClass().getName();
+        return nm.substring(nm.lastIndexOf('.') + 1);
+
+    }
+    
+    private static boolean isText(UIComponent c) {
+
+        return (c.getClass().getName().startsWith("com.sun.faces.facelets.compiler"));
+
+    }
+
+}
diff --git a/com/sun/faces/facelets/util/FastWriter.java b/com/sun/faces/facelets/util/FastWriter.java
new file mode 100644
index 0000000..45899f9
--- /dev/null
+++ b/com/sun/faces/facelets/util/FastWriter.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.util;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class FastWriter extends Writer {
+    
+    private char[] buff;
+    private int size;
+    
+    public FastWriter() {
+        this(1024);
+    }
+    
+    public FastWriter(int initialSize) {
+        if (initialSize < 0) {
+            throw new IllegalArgumentException("Initial Size cannot be less than 0");
+        }
+        this.buff = new char[initialSize];
+    }
+
+    public void close() throws IOException {
+        // do nothing
+    }
+
+    public void flush() throws IOException {
+        // do nothing
+    }
+    
+    private void overflow(int len) {
+        if (this.size + len > this.buff.length) {
+            char[] next = new char[(this.size + len) * 2];
+            System.arraycopy(this.buff, 0, next, 0, this.size);
+            this.buff = next;    
+        }
+    }
+
+    public void write(char[] cbuf, int off, int len) throws IOException {
+        overflow(len);
+        System.arraycopy(cbuf, off, this.buff, this.size, len);
+        this.size += len;
+    }
+
+    public void write(char[] cbuf) throws IOException {
+        this.write(cbuf, 0, cbuf.length);
+    }
+
+    public void write(int c) throws IOException {
+        this.overflow(1);
+        this.buff[this.size] = (char) c;
+        this.size++;
+    }
+
+    public void write(String str, int off, int len) throws IOException {
+        this.write(str.toCharArray(), off, len);
+    }
+
+    public void write(String str) throws IOException {
+        this.write(str.toCharArray(), 0, str.length());
+    }
+    
+    public void reset() {
+        this.size = 0;
+    }
+
+    public String toString() {
+        return new String(this.buff, 0, this.size);
+    }
+}
diff --git a/com/sun/faces/facelets/util/FunctionLibrary.java b/com/sun/faces/facelets/util/FunctionLibrary.java
new file mode 100644
index 0000000..4ffe6fb
--- /dev/null
+++ b/com/sun/faces/facelets/util/FunctionLibrary.java
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.util;
+
+import com.sun.faces.facelets.tag.TagLibrary;
+import com.sun.faces.util.Util;
+
+import javax.faces.FacesException;
+import javax.faces.view.facelets.Tag;
+import javax.faces.view.facelets.TagConfig;
+import javax.faces.view.facelets.TagHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>This <code>TagLibrary</code> exposes the <code>public static</code>
+ * methods defined on the <code>functionsClass</code> provided to the constructor
+ * as EL functions.</p>
+ */
+public class FunctionLibrary implements TagLibrary {
+    
+    public final static String Namespace = "http://java.sun.com/jsp/jstl/functions";
+    public final static String XMLNSNamespace = "http://xmlns.jcp.org/jsp/jstl/functions";
+    
+
+    private String _namespace;
+    private Map<String,Method> functions;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public FunctionLibrary(Class<?> functionsClass, String namespace) {
+
+        Util.notNull("functionsClass", functionsClass);
+        Util.notNull("namespace", namespace);
+
+        this._namespace = namespace;
+
+        try {
+            Method[] methods = functionsClass.getMethods();
+            functions = new HashMap<String, Method>(methods.length, 1.0f);
+            for (Method method : methods) {
+                if (Modifier.isStatic(method.getModifiers())
+                    && Modifier.isPublic(method.getModifiers())) {
+                    functions.put(method.getName(), method);
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    // ------------------------------------------------- Methods from TagLibrary
+
+    public boolean containsNamespace(String ns, Tag t) {
+        return _namespace.equals(ns);
+    }
+
+    public boolean containsTagHandler(String ns, String localName) {
+        return false;
+    }
+
+    public TagHandler createTagHandler(String ns, String localName,
+            TagConfig tag) throws FacesException {
+        return null;
+    }
+
+    public boolean containsFunction(String ns, String name) {
+        return _namespace.equals(ns) && this.functions.containsKey(name);
+    }
+
+    public Method createFunction(String ns, String name) {
+        if (_namespace.equals(ns)) {
+            return this.functions.get(name);
+        }
+        return null;
+    }
+    
+}
diff --git a/com/sun/faces/facelets/util/Path.java b/com/sun/faces/facelets/util/Path.java
new file mode 100644
index 0000000..c29f8a4
--- /dev/null
+++ b/com/sun/faces/facelets/util/Path.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.util;
+
+/**
+ * @author Jacob Hookom
+ */
+public final class Path {
+
+    public static String normalize(String path) {
+        if (path.length() == 0)
+            return path;
+        String n = path;
+        boolean abs = false;
+        while (n.indexOf('\\') >= 0) {
+            n = n.replace('\\', '/');
+        }
+        if (n.charAt(0) != '/') {
+            n = '/' + n;
+            abs = true;
+        }
+        int idx = 0;
+        while (true) {
+            idx = n.indexOf("%20");
+            if (idx == -1) {
+                break;
+            }
+            n = n.substring(0, idx) + " " + n.substring(idx + 3);
+        }
+        while (true) {
+            idx = n.indexOf("/./");
+            if (idx == -1) {
+                break;
+            }
+            n = n.substring(0, idx) + n.substring(idx + 2);
+        }
+        if (abs) {
+            n = n.substring(1);
+        }
+        return n;
+    }
+
+    public static String relative(String ctx, String path) {
+        if (path.length() == 0) {
+            return context(ctx);
+        }
+        String c = context(normalize(ctx));
+        String p = normalize(path);
+        p = c + p;
+
+        int idx = 0;
+        while (true) {
+            idx = p.indexOf("/../");
+            if (idx == -1) {
+                break;
+            }
+            int s = p.lastIndexOf('/', idx - 3);
+            if (s == -1) {
+                break;
+            }
+            p = p.substring(0, s) + p.substring(idx + 3);
+        }
+        return p;
+    }
+
+    public static String context(String path) {
+        int idx = path.lastIndexOf('/');
+        if (idx == -1) {
+            return "/";
+        }
+        return path.substring(0, idx + 1);
+    }
+
+}
diff --git a/com/sun/faces/facelets/util/ReflectionUtil.java b/com/sun/faces/facelets/util/ReflectionUtil.java
new file mode 100644
index 0000000..7a5dd78
--- /dev/null
+++ b/com/sun/faces/facelets/util/ReflectionUtil.java
@@ -0,0 +1,328 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.faces.facelets.util;
+
+import com.sun.faces.config.ConfigurationException;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import com.sun.faces.util.ReflectionUtils;
+import com.sun.faces.util.Util;
+
+import javax.faces.view.facelets.ResourceResolver;
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.text.MessageFormat;
+import java.util.Arrays;
+
+public class ReflectionUtil {
+
+    private static final String[] PRIMITIVE_NAMES = new String[] { "boolean",
+            "byte", "char", "double", "float", "int", "long", "short", "void" };
+
+    private static final Class[] PRIMITIVES = new Class[] { boolean.class,
+            byte.class, char.class, double.class, float.class, int.class,
+            long.class, short.class, Void.TYPE };
+
+    /**
+     * 
+     */
+    private ReflectionUtil() {
+        super();
+    }
+
+    public static Class forName(String name) throws ClassNotFoundException {
+        if (null == name || "".equals(name)) {
+            return null;
+        }
+        Class c = forNamePrimitive(name);
+        if (c == null) {
+            if (name.endsWith("[]")) {
+                String nc = name.substring(0, name.length() - 2);
+                c = Class.forName(nc, false, Thread.currentThread().getContextClassLoader());
+                c = Array.newInstance(c, 0).getClass();
+            } else {
+                c = Class.forName(name, false, Thread.currentThread().getContextClassLoader());
+            }
+        }
+        return c;
+    }
+
+    protected static Class forNamePrimitive(String name) {
+        if (name.length() <= 8) {
+            int p = Arrays.binarySearch(PRIMITIVE_NAMES, name);
+            if (p >= 0) {
+                return PRIMITIVES[p];
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Converts an array of Class names to Class types
+     * 
+     * @param s the array of class names.
+     * @return the array of classes.
+     * @throws ClassNotFoundException
+     */
+    public static Class[] toTypeArray(String[] s) throws ClassNotFoundException {
+        if (s == null)
+            return null;
+        Class[] c = new Class[s.length];
+        for (int i = 0; i < s.length; i++) {
+            c[i] = forName(s[i]);
+        }
+        return c;
+    }
+
+    /**
+     * Converts an array of Class types to Class names
+     * 
+     * @param c the array of classes.
+     * @return the array of class names.
+     */
+    public static String[] toTypeNameArray(Class[] c) {
+        if (c == null)
+            return null;
+        String[] s = new String[c.length];
+        for (int i = 0; i < c.length; i++) {
+            s[i] = c[i].getName();
+        }
+        return s;
+    }
+
+//    /*
+//     * Get a public method form a public class or interface of a given method.
+//     * Note that if the base is an instance of a non-public class that
+//     * implements a public interface,  calling Class.getMethod() with the base
+//     * will not find the method.  To correct this, a version of the
+//     * same method must be found in a superclass or interface.
+//     **/
+//
+//    static private Method getMethod(Class cl, String methodName,
+//                                    Class[] paramTypes) {
+//
+//        Method m = null;
+//        try {
+//            m = cl.getMethod(methodName, paramTypes);
+//        } catch (NoSuchMethodException ex) {
+//            return null;
+//        }
+//
+//        Class dclass  = m.getDeclaringClass();
+//        if (Modifier.isPublic(dclass.getModifiers())) {
+//            return m;
+//        }
+//
+//        Class[] intf = dclass.getInterfaces();
+//        for (int i = 0; i < intf.length; i++) {
+//            m = getMethod(intf[i], methodName, paramTypes);
+//            if (m != null) {
+//                return m;
+//            }
+//        }
+//        Class c = dclass.getSuperclass();
+//        if (c != null) {
+//            m = getMethod(c, methodName, paramTypes);
+//            if (m != null) {
+//                return m;
+//            }
+//        }
+//        return null;
+//    }
+
+    protected static final String paramString(Class[] types) {
+        if (types != null) {
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < types.length; i++) {
+                sb.append(types[i].getName()).append(", ");
+            }
+            if (sb.length() > 2) {
+                sb.setLength(sb.length() - 2);
+            }
+            return sb.toString();
+        }
+        return null;
+    }
+    
+    public static Object decorateInstance(Class clazz,
+                                    Class rootType,
+                                    Object root) {
+        Object returnObject = null;
+        try {
+            if (isDevModeEnabled()) {
+                Class<?>[] interfaces = clazz.getInterfaces();
+                if (interfaces != null) {
+                    for (Class<?> c : interfaces) {
+                        if ("groovy.lang.GroovyObject"
+                                .equals(c.getName())) {
+                            // all groovy classes will implement this interface
+                            returnObject =
+                                    createScriptProxy(rootType, clazz.getName(), root);
+                            break;
+                        }
+                    }
+                }
+            }
+            if (returnObject == null) {
+                // Look for an adapter constructor if we've got
+                // an object to adapt
+                if ((rootType != null) && (root != null)) {
+                    Constructor construct =
+                            ReflectionUtils.lookupConstructor(
+                            clazz,
+                            rootType);
+                    if (construct != null) {
+                        returnObject = construct.newInstance(root);
+                    }
+                }
+            }
+            if (clazz != null && returnObject == null) {
+                returnObject = clazz.newInstance();
+            }
+        }
+        catch (Exception e) {
+            throw new ConfigurationException(
+                    buildMessage(MessageFormat.format("Unable to create a new instance of ''{0}'': {1}",
+                    clazz.getName(),
+                    e.toString())), e);
+        }
+        return returnObject;
+
+    }
+    
+    public static Object decorateInstance(String className,
+                                    Class rootType,
+                                    Object root) {
+        Class clazz;
+        Object returnObject = null;
+        if (className != null) {
+            try {
+                clazz = loadClass(className, returnObject, null);
+                if (clazz != null) {
+                    returnObject = decorateInstance(clazz, rootType, root);
+                }
+
+            } catch (ClassNotFoundException cnfe) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Unable to find class ''{0}''",
+                                                        className)));
+            } catch (NoClassDefFoundError ncdfe) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Class ''{0}'' is missing a runtime dependency: {1}",
+                                                        className,
+                                                        ncdfe.toString())));
+            } catch (ClassCastException cce) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Class ''{0}'' is not an instance of ''{1}''",
+                                                        className,
+                                                        rootType)));
+            } catch (Exception e) {
+                throw new ConfigurationException(
+                      buildMessage(MessageFormat.format("Unable to create a new instance of ''{0}'': {1}",
+                                                        className,
+                                                        e.toString())), e);
+            }
+        }
+
+        return returnObject;
+        
+    }
+    
+    // --------------------------------------------------------- Private Methods
+
+
+    private static String buildMessage(String cause) {
+
+        return MessageFormat.format("\n  Source Document: {0}\n  Cause: {1}",
+                                    "web.xml",
+                                    cause);
+
+    }
+    
+    
+    private static Class<?> loadClass(String className,
+                                 Object fallback,
+                                 Class<?> expectedType)
+    throws ClassNotFoundException {
+
+        Class<?> clazz = Util.loadClass(className, fallback);
+        if (expectedType != null && !expectedType.isAssignableFrom(clazz)) {
+                throw new ClassCastException();
+        }
+        return clazz;
+        
+    }
+    
+    private static boolean isDevModeEnabled() {
+        WebConfiguration webconfig = WebConfiguration.getInstance();
+        return (webconfig != null
+                  && "Development".equals(webconfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage)));
+    }
+    
+    private static Object createScriptProxy(Class<?> artifactType,
+                                     String scriptName,
+                                     Object root) {
+        if (ResourceResolver.class.equals(artifactType)) {
+            return new ResourceResolverProxy(scriptName, (ResourceResolver) root);
+        }
+        return null;
+    }
+    
+    
+}
diff --git a/com/sun/faces/facelets/util/ResourceResolverProxy.java b/com/sun/faces/facelets/util/ResourceResolverProxy.java
new file mode 100644
index 0000000..423818c
--- /dev/null
+++ b/com/sun/faces/facelets/util/ResourceResolverProxy.java
@@ -0,0 +1,84 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.facelets.util;
+
+import com.sun.faces.scripting.groovy.GroovyHelper;
+
+import javax.faces.FacesException;
+import javax.faces.view.facelets.ResourceResolver;
+import java.net.URL;
+
+/**
+ *
+ * @author edburns
+ */
+class ResourceResolverProxy extends ResourceResolver {
+    
+    private String scriptName;
+    private ResourceResolver delegate;
+    
+
+    public ResourceResolverProxy(String scriptName, ResourceResolver delegate) {
+        this.scriptName = scriptName;
+        this.delegate = delegate;
+    }
+
+    @Override
+    public URL resolveUrl(String path) {
+        return getGroovyDelegate().resolveUrl(path);
+    }
+    
+    
+    // --------------------------------------------------------- Private Methods
+
+
+    private ResourceResolver getGroovyDelegate() {
+
+        try {
+            return ((ResourceResolver) GroovyHelper.newInstance(scriptName,
+                    ResourceResolver.class, delegate));
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/flow/FlowCDIContext.java b/com/sun/faces/flow/FlowCDIContext.java
new file mode 100644
index 0000000..047da6b
--- /dev/null
+++ b/com/sun/faces/flow/FlowCDIContext.java
@@ -0,0 +1,509 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.flow;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import java.io.Serializable;
+import javax.faces.flow.FlowScoped;
+import java.lang.annotation.Annotation;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.ContextNotActiveException;
+import javax.enterprise.context.spi.Context;
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeShutdown;
+import javax.enterprise.inject.spi.PassivationCapable;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.Flow;
+import javax.faces.flow.FlowHandler;
+import javax.faces.lifecycle.ClientWindow;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
+
+public class FlowCDIContext implements Context, Serializable {
+    
+    private static final long serialVersionUID = -7144653402477623609L;
+    private static final String FLOW_SCOPE_MAP_KEY = RIConstants.FACES_PREFIX + "FLOW_SCOPE_MAP";
+    private static final Logger LOGGER = FacesLogger.FLOW.getLogger();
+    
+    private transient Map<Contextual<?>, FlowBeanInfo> flowIds;
+
+    static class FlowBeanInfo {
+        String definingDocumentId;
+        String id;
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            final FlowBeanInfo other = (FlowBeanInfo) obj;
+            if ((this.definingDocumentId == null) ? (other.definingDocumentId != null) : !this.definingDocumentId.equals(other.definingDocumentId)) {
+                return false;
+            }
+            if ((this.id == null) ? (other.id != null) : !this.id.equals(other.id)) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hash = 7;
+            hash = 79 * hash + (this.definingDocumentId != null ? this.definingDocumentId.hashCode() : 0);
+            hash = 79 * hash + (this.id != null ? this.id.hashCode() : 0);
+            return hash;
+        }
+
+        @Override
+        public String toString() {
+            return "FlowBeanInfo{" + "definingDocumentId=" + definingDocumentId + ", id=" + id + '}';
+        }
+        
+        
+    }
+    
+    // This should be vended from a factory for decoration purposes.
+    
+    FlowCDIContext(Map<Contextual<?>, FlowBeanInfo> flowIds) {
+        this.flowIds = new ConcurrentHashMap<Contextual<?>, FlowBeanInfo>(flowIds);
+    }
+    
+    private static final String PER_SESSION_BEAN_MAP_LIST = FlowCDIContext.class.getPackage().getName() + ".PER_SESSION_BEAN_MAP_LIST";
+    private static final String PER_SESSION_CREATIONAL_LIST = FlowCDIContext.class.getPackage().getName() + ".PER_SESSION_CREATIONAL_LIST";
+    
+    // -------------------------------------------------------- Private Methods
+    
+    // <editor-fold defaultstate="collapsed" desc="Private helpers">  
+    
+    /*
+     * Encapsulate access to the two maps we need to provide.
+     * 
+     */
+    private static class FlowScopeMapHelper {
+        // <editor-fold defaultstate="collapsed">  
+        private transient final String flowBeansForClientWindowKey;
+        private transient final String creationalForClientWindowKey;
+        private transient final Map<String, Object> sessionMap;
+        
+        private FlowScopeMapHelper(FacesContext facesContext) {
+            ExternalContext extContext = facesContext.getExternalContext();
+            this.sessionMap = extContext.getSessionMap();
+            Flow currentFlow = getCurrentFlow(facesContext);
+            if (null != currentFlow) {
+                ClientWindow curWindow = facesContext.getExternalContext().getClientWindow();
+                if (null == curWindow) { 
+                    throw new IllegalStateException("Unable to obtain current ClientWindow.  Is the ClientWindow feature enabled?");
+                }
+                final String clientWindow = currentFlow.getClientWindowFlowId(curWindow);
+                
+                flowBeansForClientWindowKey = clientWindow + "_beans";
+                creationalForClientWindowKey = clientWindow + "_creational";
+            } else {
+                flowBeansForClientWindowKey = creationalForClientWindowKey = null;
+            }
+            
+        }
+        
+        private void createMaps() {
+            getFlowScopedBeanMapForCurrentFlow();
+            getFlowScopedCreationalMapForCurrentFlow();
+        }
+        
+        private boolean isFlowExists() {
+            return (null != flowBeansForClientWindowKey && null != creationalForClientWindowKey);
+        }
+
+        public String getCreationalForClientWindowKey() {
+            return creationalForClientWindowKey;
+        }
+        
+        public String getFlowBeansForClientWindowKey() {
+            return flowBeansForClientWindowKey;
+        }
+        
+        private Map<String, Object> getFlowScopedBeanMapForCurrentFlow() {
+            if (null == flowBeansForClientWindowKey && null == creationalForClientWindowKey) {
+                return Collections.emptyMap();
+            }
+            Map<String, Object> result;
+            result = (Map<String, Object>) sessionMap.get(flowBeansForClientWindowKey);
+            if (null == result) {
+                result = new ConcurrentHashMap<String, Object>();
+                sessionMap.put(flowBeansForClientWindowKey, result);
+                ensureBeanMapCleanupOnSessionDestroyed(sessionMap, flowBeansForClientWindowKey);
+            }
+            return result;
+        }
+        
+        private Map<String, CreationalContext<?>> getFlowScopedCreationalMapForCurrentFlow() {
+            if (null == flowBeansForClientWindowKey && null == creationalForClientWindowKey) {
+                return Collections.emptyMap();
+            }
+            Map<String, CreationalContext<?>> result;
+            result = (Map<String, CreationalContext<?>>) sessionMap.get(creationalForClientWindowKey);
+            if (null == result) {
+                result = new ConcurrentHashMap<String, CreationalContext<?>>();
+                sessionMap.put(creationalForClientWindowKey, result);
+                ensureCreationalCleanupOnSessionDestroyed(sessionMap, creationalForClientWindowKey);
+            }
+            return result;
+        }
+        
+        private void updateSession() {
+            if (null == flowBeansForClientWindowKey && null == creationalForClientWindowKey) {
+                return;
+            }
+            sessionMap.put(flowBeansForClientWindowKey, getFlowScopedBeanMapForCurrentFlow());
+            sessionMap.put(creationalForClientWindowKey, getFlowScopedCreationalMapForCurrentFlow());
+            Object obj = sessionMap.get(PER_SESSION_BEAN_MAP_LIST);
+            if (null != obj) {
+                sessionMap.put(PER_SESSION_BEAN_MAP_LIST, obj);
+            }
+            obj = sessionMap.get(PER_SESSION_CREATIONAL_LIST);
+            if (null != obj) {
+                sessionMap.put(PER_SESSION_CREATIONAL_LIST, obj);
+            }
+        }
+        // </editor-fold>
+    }
+        
+    private static void ensureBeanMapCleanupOnSessionDestroyed(Map<String, Object> sessionMap, String flowBeansForClientWindow) {
+        List<String> beanMapList = (List<String>) sessionMap.get(PER_SESSION_BEAN_MAP_LIST);
+        if (null == beanMapList) {
+            beanMapList = new ArrayList<String>();
+            sessionMap.put(PER_SESSION_BEAN_MAP_LIST, beanMapList);
+        }
+        beanMapList.add(flowBeansForClientWindow);
+    }
+    
+    private static void ensureCreationalCleanupOnSessionDestroyed(Map<String, Object> sessionMap, String creationalForClientWindow) {
+        List<String> beanMapList = (List<String>) sessionMap.get(PER_SESSION_CREATIONAL_LIST);
+        if (null == beanMapList) {
+            beanMapList = new ArrayList<String>();
+            sessionMap.put(PER_SESSION_CREATIONAL_LIST, beanMapList);
+        }
+        beanMapList.add(creationalForClientWindow);
+    }
+    
+    @SuppressWarnings({"FinalPrivateMethod"})
+    private final void assertNotReleased() {
+        if (!isActive()) {
+            throw new IllegalStateException();
+        }
+    }
+    
+    private Flow getCurrentFlow() {
+        Flow result = null;
+        
+        FacesContext context = FacesContext.getCurrentInstance();
+        result = getCurrentFlow(context);
+        
+        return result;
+    }
+    
+    private static Flow getCurrentFlow(FacesContext context) {
+        FlowHandler flowHandler = context.getApplication().getFlowHandler();
+        if (null == flowHandler) {
+            return null;
+        }
+        
+        Flow result = flowHandler.getCurrentFlow(context);
+        
+        return result;
+        
+    }
+    
+    // </editor-fold>    
+
+    // <editor-fold defaultstate="collapsed" desc="Called from code not related to flow">       
+    
+    /*
+     * Called from WebappLifecycleListener.sessionDestroyed()
+     */
+    
+    public static void sessionDestroyed(HttpSessionEvent hse) {
+        HttpSession session = hse.getSession();
+        
+        List<String> beanMapList = (List<String>) session.getAttribute(PER_SESSION_BEAN_MAP_LIST);
+        if (null != beanMapList) {
+            for (String cur : beanMapList) {
+                Map<Contextual<?>, Object> beanMap = 
+                        (Map<Contextual<?>, Object>) session.getAttribute(cur);
+                beanMap.clear();
+                session.removeAttribute(cur);
+            }
+            session.removeAttribute(PER_SESSION_BEAN_MAP_LIST);
+            beanMapList.clear();
+        }
+        
+        List<String> creationalList = (List<String>) session.getAttribute(PER_SESSION_CREATIONAL_LIST);
+        if (null != creationalList) {
+            for (String cur : creationalList) {
+                Map<Contextual<?>, CreationalContext<?>> beanMap = 
+                        (Map<Contextual<?>, CreationalContext<?>>) session.getAttribute(cur);
+                beanMap.clear();
+                session.removeAttribute(cur);
+            }
+            session.removeAttribute(PER_SESSION_CREATIONAL_LIST);
+            creationalList.clear();
+        }
+        
+        
+    }
+    
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Called from code related to flow">  
+    
+    static Map<Object, Object> getCurrentFlowScopeAndUpdateSession() {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        FlowScopeMapHelper mapHelper = new FlowScopeMapHelper(facesContext);
+        return getCurrentFlowScopeAndUpdateSession(mapHelper);
+
+    }
+    
+    private static Map<Object, Object> getCurrentFlowScopeAndUpdateSession(FlowScopeMapHelper mapHelper) {
+        Map<String, Object> flowScopedBeanMap = mapHelper.getFlowScopedBeanMapForCurrentFlow();
+        Map<Object, Object> result = null;
+        if (mapHelper.isFlowExists()) {
+            result = (Map<Object, Object>) flowScopedBeanMap.get(FLOW_SCOPE_MAP_KEY);
+            if (null == result) {
+                result = new ConcurrentHashMap<Object, Object>();
+                flowScopedBeanMap.put(FLOW_SCOPE_MAP_KEY, result);
+            }
+        }
+        mapHelper.updateSession();
+        return result; 
+    }
+        
+    static void flowExited() {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        FlowScopeMapHelper mapHelper = new FlowScopeMapHelper(facesContext);
+        Map<String, Object> flowScopedBeanMap = mapHelper.getFlowScopedBeanMapForCurrentFlow();
+        Map<String, CreationalContext<?>> creationalMap = mapHelper.getFlowScopedCreationalMapForCurrentFlow();
+        assert(!flowScopedBeanMap.isEmpty());
+        assert(!creationalMap.isEmpty());
+        List<String> flowScopedBeansToRemove = new ArrayList<String>();
+        BeanManager beanManager = (BeanManager) Util.getCDIBeanManager(facesContext.getExternalContext().getApplicationMap());
+        
+        for (Entry<String, Object> entry : flowScopedBeanMap.entrySet()) {
+            String passivationCapableId = entry.getKey();
+            if (FLOW_SCOPE_MAP_KEY.equals(passivationCapableId)) {
+                continue;
+            }
+            Contextual owner = beanManager.getPassivationCapableBean(passivationCapableId);
+            Object bean = entry.getValue();
+            CreationalContext creational = creationalMap.get(passivationCapableId);
+            
+            owner.destroy(bean, creational);
+            flowScopedBeansToRemove.add(passivationCapableId);
+        }
+        
+        for (String cur : flowScopedBeansToRemove) {
+            flowScopedBeanMap.remove(cur);
+            creationalMap.remove(cur);
+        }
+        mapHelper.updateSession();
+        
+        if (Util.isCdiOneOneOrGreater()) {
+            Class flowCDIEventFireHelperImplClass = null;
+            try {
+                flowCDIEventFireHelperImplClass = Class.forName("com.sun.faces.flow.FlowCDIEventFireHelperImpl");
+            } catch (ClassNotFoundException ex) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, "CDI 1.1 events not enabled", ex);
+                }
+            }
+            
+            if (null != flowCDIEventFireHelperImplClass) {
+                Set<Bean<?>> availableBeans = beanManager.getBeans(flowCDIEventFireHelperImplClass);
+                if (null != availableBeans && !availableBeans.isEmpty()) {
+                    Bean<?> bean = beanManager.resolve(availableBeans);
+                    CreationalContext<?> creationalContext =
+                            beanManager.createCreationalContext(null);
+                    FlowCDIEventFireHelper eventHelper = 
+                            (FlowCDIEventFireHelper)  beanManager.getReference(bean, bean.getBeanClass(),
+                            creationalContext);
+                    eventHelper.fireDestroyedEvent(getCurrentFlow(facesContext));
+                }
+            }
+        }
+    }
+    
+    static void flowEntered() {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        FlowScopeMapHelper mapHelper = new FlowScopeMapHelper(facesContext);
+        mapHelper.createMaps();
+        
+        getCurrentFlowScopeAndUpdateSession(mapHelper);
+        
+        if (Util.isCdiOneOneOrGreater()) {
+            Class flowCDIEventFireHelperImplClass = null;
+            try {
+                flowCDIEventFireHelperImplClass = Class.forName("com.sun.faces.flow.FlowCDIEventFireHelperImpl");
+            } catch (ClassNotFoundException ex) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, "CDI 1.1 events not enabled", ex);
+                }
+            }
+            if (null != flowCDIEventFireHelperImplClass) {
+                BeanManager beanManager = (BeanManager) Util.getCDIBeanManager(facesContext.getExternalContext().getApplicationMap());
+                Set<Bean<?>> availableBeans = beanManager.getBeans(flowCDIEventFireHelperImplClass);
+                if (null != availableBeans && !availableBeans.isEmpty()) {
+                    Bean<?> bean = beanManager.resolve(availableBeans);
+                    CreationalContext<?> creationalContext =
+                            beanManager.createCreationalContext(null);
+                    FlowCDIEventFireHelper eventHelper = 
+                            (FlowCDIEventFireHelper)  beanManager.getReference(bean, bean.getBeanClass(),
+                            creationalContext);
+                    eventHelper.fireInitializedEvent(getCurrentFlow(facesContext));
+                }
+            }
+        }
+    }
+
+// </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="spi.Context implementation">       
+    
+    @Override
+    public <T> T get(Contextual<T> contextual, CreationalContext<T> creational) {
+        assertNotReleased();
+        
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        FlowScopeMapHelper mapHelper = new FlowScopeMapHelper(facesContext);
+        T result = get(mapHelper, contextual);
+        
+        if (null == result) {
+            Map<String, Object> flowScopedBeanMap = mapHelper.getFlowScopedBeanMapForCurrentFlow();
+            Map<String, CreationalContext<?>> creationalMap = mapHelper.getFlowScopedCreationalMapForCurrentFlow();
+            
+            String passivationCapableId = ((PassivationCapable)contextual).getId();
+
+            synchronized (flowScopedBeanMap) {
+                result = (T) flowScopedBeanMap.get(passivationCapableId);
+                if (null == result) {
+                    
+                    FlowHandler flowHandler = facesContext.getApplication().getFlowHandler();
+                    
+                    if (null == flowHandler) {
+                        return null;
+                    }
+                    
+                    FlowBeanInfo fbi = flowIds.get(contextual);
+                    if (!flowHandler.isActive(facesContext, fbi.definingDocumentId, fbi.id)) {
+                        throw new ContextNotActiveException("Request to activate bean in flow '" + fbi + "', but that flow is not active.");
+                    }
+
+                    
+                    result = contextual.create(creational);
+                    
+                    if (null != result) {
+                        flowScopedBeanMap.put(passivationCapableId, result);
+                        creationalMap.put(passivationCapableId, creational);
+                        mapHelper.updateSession();
+                    }
+                }
+            }
+        }
+        mapHelper = null;
+        
+        return result;
+
+    }
+    
+    @Override
+    public <T> T get(Contextual<T> contextual) {
+        assertNotReleased();
+        if (!(contextual instanceof PassivationCapable)) {
+            throw new IllegalArgumentException("FlowScoped bean " + contextual.toString() + " must be PassivationCapable, but is not.");
+        }
+        FlowScopeMapHelper mapHelper = new FlowScopeMapHelper(FacesContext.getCurrentInstance());
+        T result = get(mapHelper, contextual);
+        mapHelper = null;
+
+        return result;
+    }
+    
+    private <T> T get(FlowScopeMapHelper mapHelper, Contextual<T> contextual) {
+        assertNotReleased();
+        if (!(contextual instanceof PassivationCapable)) {
+            throw new IllegalArgumentException("FlowScoped bean " + contextual.toString() + " must be PassivationCapable, but is not.");
+        }
+        String passivationCapableId = ((PassivationCapable)contextual).getId();
+        return (T) mapHelper.getFlowScopedBeanMapForCurrentFlow().get(passivationCapableId);
+    }
+    
+    @Override
+    public Class<? extends Annotation> getScope() {
+        return FlowScoped.class;
+    }
+    
+    @Override
+    public boolean isActive() {
+        return null != getCurrentFlow();
+    }
+    
+    void beforeShutdown(@Observes final BeforeShutdown event, BeanManager beanManager) {
+    }
+    
+    // </editor-fold>
+    
+}
diff --git a/com/sun/faces/flow/FlowCDIEventFireHelper.java b/com/sun/faces/flow/FlowCDIEventFireHelper.java
new file mode 100644
index 0000000..f270bba
--- /dev/null
+++ b/com/sun/faces/flow/FlowCDIEventFireHelper.java
@@ -0,0 +1,51 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import javax.faces.flow.Flow;
+
+public interface FlowCDIEventFireHelper {
+    
+    void fireInitializedEvent(Flow currentFlow);
+    void fireDestroyedEvent(Flow currentFlow);
+    
+    
+}
diff --git a/com/sun/faces/flow/FlowCDIEventFireHelperImpl.java b/com/sun/faces/flow/FlowCDIEventFireHelperImpl.java
new file mode 100644
index 0000000..e0d47aa
--- /dev/null
+++ b/com/sun/faces/flow/FlowCDIEventFireHelperImpl.java
@@ -0,0 +1,68 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import java.io.Serializable;
+import javax.enterprise.context.Destroyed;
+import javax.enterprise.context.Initialized;
+import javax.enterprise.event.Event;
+import javax.faces.flow.Flow;
+import javax.faces.flow.FlowScoped;
+import javax.inject.Inject;
+
+public class FlowCDIEventFireHelperImpl implements Serializable, FlowCDIEventFireHelper {
+    
+    private static final long serialVersionUID = -5689195252450178355L;
+    
+    @Inject @Initialized(FlowScoped.class) Event<Flow> flowInitializedEvent;
+    @Inject @Destroyed(FlowScoped.class) Event<Flow> flowDestroyedEvent;
+    
+    @Override
+    public void fireInitializedEvent(Flow currentFlow) {
+        flowInitializedEvent.fire(currentFlow);
+    }
+    
+    @Override
+    public void fireDestroyedEvent(Flow currentFlow) {
+        flowDestroyedEvent.fire(currentFlow);
+    }
+        
+}
diff --git a/com/sun/faces/flow/FlowCDIExtension.java b/com/sun/faces/flow/FlowCDIExtension.java
new file mode 100644
index 0000000..e3ccb63
--- /dev/null
+++ b/com/sun/faces/flow/FlowCDIExtension.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+
+package com.sun.faces.flow;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.cdi11.CDIUtil;
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.concurrent.ConcurrentHashMap;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.faces.flow.FlowScoped;
+
+public class FlowCDIExtension implements Extension {
+
+
+   private Map<Contextual<?>, FlowCDIContext.FlowBeanInfo> flowScopedBeanFlowIds;
+   private boolean isCdiOneOneOrGreater = false;
+   private CDIUtil cdiUtil = null;
+
+   private static final Logger LOGGER = FacesLogger.FLOW.getLogger();
+
+   public FlowCDIExtension() {
+       flowScopedBeanFlowIds = new ConcurrentHashMap<Contextual<?>, FlowCDIContext.FlowBeanInfo>();
+       isCdiOneOneOrGreater = Util.isCdiOneOneOrGreater();
+   }
+   
+   public void processBean(@Observes ProcessBean<?> event) {
+       FlowScoped flowScoped = event.getAnnotated().getAnnotation(FlowScoped.class);
+       if (null != flowScoped) {
+           FlowCDIContext.FlowBeanInfo fbi = new FlowCDIContext.FlowBeanInfo();
+           fbi.definingDocumentId = flowScoped.definingDocumentId();
+           fbi.id = flowScoped.value();
+           flowScopedBeanFlowIds.put(event.getBean(), fbi);
+       }
+   }
+   
+   public void beforeBeanDiscovery(@Observes final BeforeBeanDiscovery event, BeanManager beanManager) {
+       event.addScope(FlowScoped.class, true, true);
+   }
+
+   void afterBeanDiscovery(@Observes final AfterBeanDiscovery event, BeanManager beanManager) {
+       event.addContext(new FlowCDIContext(flowScopedBeanFlowIds));
+       flowScopedBeanFlowIds.clear();
+       
+       if (isCdiOneOneOrGreater) {
+           Class clazz = null;
+           try {
+               clazz = Class.forName("com.sun.faces.flow.FlowCDIEventFireHelperImpl");
+           } catch (ClassNotFoundException ex) {
+               if (LOGGER.isLoggable(Level.SEVERE)) {
+                   LOGGER.log(Level.SEVERE, "CDI 1.1 events not enabled", ex);
+               }
+               return;
+           }
+           if (null == cdiUtil){
+               ServiceLoader<CDIUtil> oneCdiUtil = ServiceLoader.load(CDIUtil.class);
+               for (CDIUtil oneAndOnly : oneCdiUtil) {
+                   if (null != cdiUtil) {
+                       String message = "Must only have one implementation of CDIUtil available";
+                       if (LOGGER.isLoggable(Level.SEVERE)) {
+                           LOGGER.log(Level.SEVERE, message);
+                       }
+                       throw new IllegalStateException(message);
+                   }
+                   cdiUtil = oneAndOnly;
+               }
+               
+           }
+           if (null != cdiUtil) {
+               Bean bean = cdiUtil.createHelperBean(beanManager, clazz);
+               event.addBean(bean);
+           } else if (LOGGER.isLoggable(Level.SEVERE)) {
+               LOGGER.log(Level.SEVERE, "Unable to obtain CDI 1.1 utilities for Mojarra");
+           }
+           
+       }
+       
+   }
+   
+}
diff --git a/com/sun/faces/flow/FlowCallNodeImpl.java b/com/sun/faces/flow/FlowCallNodeImpl.java
new file mode 100644
index 0000000..f9793fa
--- /dev/null
+++ b/com/sun/faces/flow/FlowCallNodeImpl.java
@@ -0,0 +1,165 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.FlowCallNode;
+import javax.faces.flow.Parameter;
+
+public class FlowCallNodeImpl extends FlowCallNode implements Serializable {
+    private static final long serialVersionUID = 543332738561754405L;
+    
+    private final String id;
+    private final ValueExpression calledFlowIdVE;
+    
+    private final ValueExpression calledFlowDocumentIdVE;
+    
+    private Map<String, Parameter> _outboundParameters;
+    private Map<String, Parameter> outboundParameters;
+
+    public FlowCallNodeImpl(String id, 
+            String calledFlowDocumentId, 
+            String calledFlowId, 
+            List<Parameter> outboundParametersFromConfig) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        this.id = id;
+        
+        if (null != calledFlowDocumentId) {
+            this.calledFlowDocumentIdVE = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), calledFlowDocumentId, String.class);
+        } else {
+            this.calledFlowDocumentIdVE = null;
+        }
+        
+        if (null != calledFlowId) {
+            this.calledFlowIdVE = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), calledFlowId, String.class);
+        } else {
+            this.calledFlowIdVE = null;
+        }
+        
+        _outboundParameters = new ConcurrentHashMap<String, Parameter>();            
+        if (null != outboundParametersFromConfig) {
+            for (Parameter cur : outboundParametersFromConfig) {
+                _outboundParameters.put(cur.getName(), cur);
+            }
+        }
+        outboundParameters = Collections.unmodifiableMap(_outboundParameters);
+        
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final FlowCallNodeImpl other = (FlowCallNodeImpl) obj;
+        if ((this.id == null) ? (other.id != null) : !this.id.equals(other.id)) {
+            return false;
+        }
+        if (this.calledFlowIdVE != other.calledFlowIdVE && (this.calledFlowIdVE == null || !this.calledFlowIdVE.equals(other.calledFlowIdVE))) {
+            return false;
+        }
+        if (this.calledFlowDocumentIdVE != other.calledFlowDocumentIdVE && (this.calledFlowDocumentIdVE == null || !this.calledFlowDocumentIdVE.equals(other.calledFlowDocumentIdVE))) {
+            return false;
+        }
+        if (this._outboundParameters != other._outboundParameters && (this._outboundParameters == null || !this._outboundParameters.equals(other._outboundParameters))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 59 * hash + (this.id != null ? this.id.hashCode() : 0);
+        hash = 59 * hash + (this.calledFlowIdVE != null ? this.calledFlowIdVE.hashCode() : 0);
+        hash = 59 * hash + (this.calledFlowDocumentIdVE != null ? this.calledFlowDocumentIdVE.hashCode() : 0);
+        hash = 59 * hash + (this._outboundParameters != null ? this._outboundParameters.hashCode() : 0);
+        return hash;
+    }
+    
+    
+    
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String getCalledFlowDocumentId(FacesContext context) {
+        String result = null;
+        
+        if (null != calledFlowDocumentIdVE) {
+            result = (String) calledFlowDocumentIdVE.getValue(context.getELContext());
+        }
+        
+        return result;
+    }
+
+    @Override
+    public String getCalledFlowId(FacesContext context) {
+        String result = null;
+        
+        if (null != calledFlowIdVE) {
+            result = (String) calledFlowIdVE.getValue(context.getELContext());
+        }
+        
+        return result;
+    }
+
+    public Map<String, Parameter> _getOutboundParameters() {
+        return _outboundParameters;
+    }
+
+    @Override
+    public Map<String, Parameter> getOutboundParameters() {
+        return _outboundParameters;
+    }
+}
diff --git a/com/sun/faces/flow/FlowDiscoveryCDIExtension.java b/com/sun/faces/flow/FlowDiscoveryCDIExtension.java
new file mode 100644
index 0000000..d7e744e
--- /dev/null
+++ b/com/sun/faces/flow/FlowDiscoveryCDIExtension.java
@@ -0,0 +1,118 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+
+package com.sun.faces.flow;
+
+import com.sun.faces.util.FacesLogger;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessProducer;
+import javax.enterprise.inject.spi.Producer;
+import javax.faces.flow.Flow;
+import javax.faces.flow.builder.FlowDefinition;
+
+/*
+ *  This is the hook into the bootstrapping of the entire feature.  
+ *
+ *  Use the CDI anntation scanning feature to find all beans annotated
+ *  with @FlowDefinition.  The scanning work done here is leveraged
+ *  in FlowDiscoveryCDIHelper.discoverFlows().
+ *
+ *  Use BeforeBeanDiscovery to manually register an application scoped
+ *  bean FlowDiscoveryCDIHelper.  I would rather not do this, but I
+ *  couldn't get the system to find this bean in any other way.  I think
+ *  this may have something to do with CDI being told not to scan within
+ *  javax.faces.jar, or something like that.
+ *
+ *  Use AfterBeanDiscovery to add a custom Context.  This is necessary
+ *  because it was the only way I found that actually worked that let me
+ *  pass in the results of the scanning into something I could invoke in
+ *  when processing the JSF PostConstructApplicationEvent.
+ *
+ *  Use ProcessBean to build up a tuple for each bean annotated with
+ *  @FlowDefinition { definingClass, flow-id, defining-document-id }.  A
+ *  data structure containing all the tuples is passed to
+ *  FlowDiscoveryCDIContext.
+ * 
+ */
+
+public class FlowDiscoveryCDIExtension implements Extension {
+
+
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.FLOW.getLogger();
+    private List<Producer<Flow>> flowProducers;
+    
+    public FlowDiscoveryCDIExtension() {
+        flowProducers = new CopyOnWriteArrayList<Producer<Flow>>();
+        
+    }
+    
+    public List<Producer<Flow>> getFlowProducers() {
+        return flowProducers;
+    }
+    
+    void beforeBeanDiscovery(@Observes final BeforeBeanDiscovery event, BeanManager beanManager) {
+        AnnotatedType flowDiscoveryHelper = beanManager.createAnnotatedType(FlowDiscoveryCDIHelper.class);
+        event.addAnnotatedType(flowDiscoveryHelper);
+        
+    }
+    
+    <T> void findFlowDefiners(@Observes ProcessProducer<T, Flow> pp) {
+    	if (pp.getAnnotatedMember().isAnnotationPresent(FlowDefinition.class)) {
+            flowProducers.add(pp.getProducer());
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE, "Discovered Flow Producer {0}", pp.getProducer().toString());
+            }
+
+    	}
+    }
+    
+    
+}
diff --git a/com/sun/faces/flow/FlowDiscoveryCDIHelper.java b/com/sun/faces/flow/FlowDiscoveryCDIHelper.java
new file mode 100644
index 0000000..b3f7f83
--- /dev/null
+++ b/com/sun/faces/flow/FlowDiscoveryCDIHelper.java
@@ -0,0 +1,77 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import com.sun.faces.flow.builder.FlowBuilderImpl;
+import com.sun.faces.RIConstants;
+import java.io.Serializable;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.builder.FlowBuilder;
+import javax.faces.flow.builder.FlowBuilderParameter;
+import javax.inject.Named;
+
+/*
+ * This is an application scoped bean named with a well-defined,
+ * but Mojarra private, name.  ApplicationAssociate.loadFlowsFromJars()
+ * uses this class to cause any flows defined in this way to be 
+ * built using the FlowBuilder API.
+ * 
+ * A better way is to @Inject the extension directly but this doesn't
+ * seem to work in the version of weld we have.
+ */
+
+ at Named(RIConstants.FLOW_DISCOVERY_CDI_HELPER_BEAN_NAME)
+ at Dependent
+public class FlowDiscoveryCDIHelper implements Serializable {
+    
+public FlowDiscoveryCDIHelper() {
+    }
+    
+    @Produces @FlowBuilderParameter
+    FlowBuilder createFlowBuilder() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        FlowBuilder result = new FlowBuilderImpl(context);
+        return result;
+    }
+    
+}
diff --git a/com/sun/faces/flow/FlowDiscoveryInfo.java b/com/sun/faces/flow/FlowDiscoveryInfo.java
new file mode 100644
index 0000000..cd78634
--- /dev/null
+++ b/com/sun/faces/flow/FlowDiscoveryInfo.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+public class FlowDiscoveryInfo {
+    
+    private Class definingClass;
+    private String id;
+    private String definingDocument;
+
+    public String getDefiningDocument() {
+        return definingDocument;
+    }
+
+    public void setDefiningDocument(String definingDocument) {
+        this.definingDocument = definingDocument;
+    }
+
+    public FlowDiscoveryInfo(Class definingClass, String id, String definingDocument) {
+        this.definingClass = definingClass;
+        this.id = id;
+        this.definingDocument = definingDocument;
+    }
+    
+    
+
+    public Class getDefiningClass() {
+        return definingClass;
+    }
+
+    public void setDefiningClass(Class definingClass) {
+        this.definingClass = definingClass;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+}
diff --git a/com/sun/faces/flow/FlowHandlerFactoryImpl.java b/com/sun/faces/flow/FlowHandlerFactoryImpl.java
new file mode 100644
index 0000000..0d81c52
--- /dev/null
+++ b/com/sun/faces/flow/FlowHandlerFactoryImpl.java
@@ -0,0 +1,61 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.flow;
+
+import javax.faces.context.FacesContext;
+import javax.faces.flow.FlowHandler;
+import javax.faces.flow.FlowHandlerFactory;
+
+public class FlowHandlerFactoryImpl extends FlowHandlerFactory {
+
+    public FlowHandlerFactoryImpl() {
+    }
+
+    /**
+     * Create the flow handler.
+     * 
+     * @param context the Faces context.
+     * @return the flow handler.
+     */
+    @Override
+    public FlowHandler createFlowHandler(FacesContext context) {
+        return new FlowHandlerImpl();
+    }
+}
diff --git a/com/sun/faces/flow/FlowHandlerImpl.java b/com/sun/faces/flow/FlowHandlerImpl.java
new file mode 100644
index 0000000..4e1450f
--- /dev/null
+++ b/com/sun/faces/flow/FlowHandlerImpl.java
@@ -0,0 +1,558 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import com.sun.faces.util.Util;
+import java.io.Serializable;
+import java.text.MessageFormat;
+import java.util.ArrayDeque;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.application.ConfigurableNavigationHandler;
+import javax.faces.application.NavigationHandler;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.FlowCallNode;
+import javax.faces.flow.Flow;
+import javax.faces.flow.FlowHandler;
+import javax.faces.flow.Parameter;
+
+public class FlowHandlerImpl extends FlowHandler {
+    
+    public static final String ABANDONED_FLOW = "javax.faces.flow.AbandonedFlow";
+
+    public FlowHandlerImpl() {
+        flowFeatureIsEnabled = false;
+        flows = new ConcurrentHashMap<String, Map<String, Flow>>();
+        flowsByFlowId = new ConcurrentHashMap<String, List<Flow>>();
+    }
+    
+    private boolean flowFeatureIsEnabled;
+
+    // key: definingDocumentId, value: Map<flowId, Flow>
+    private Map<String, Map<String, Flow>> flows;
+    
+    // key: flowId, List<Flow>
+    private Map<String, List<Flow>> flowsByFlowId;
+
+    @Override
+    public Map<Object, Object> getCurrentFlowScope() {
+        return FlowCDIContext.getCurrentFlowScopeAndUpdateSession();
+    }
+    
+    @Override
+    public Flow getFlow(FacesContext context, String definingDocumentId, String id) {
+        Util.notNull("context", context);
+        Util.notNull("definingDocumentId", definingDocumentId);
+        Util.notNull("id", id);
+        Flow result = null;
+        Map<String, Flow> mapsForDefiningDocument = flows.get(definingDocumentId);
+        
+        if (null != mapsForDefiningDocument) {
+            result = mapsForDefiningDocument.get(id);
+        }
+        
+        return result;
+    }
+
+    @Override
+    public void addFlow(FacesContext context, Flow toAdd) {
+        Util.notNull("context", context);
+        Util.notNull("toAdd", toAdd);
+
+        String id = toAdd.getId();
+        if (null == id || 0 == id.length()) {
+            throw new IllegalArgumentException("The id of the flow may not be null or zero-length.");
+        }
+        String definingDocumentId = toAdd.getDefiningDocumentId();
+        if (null == definingDocumentId) {
+            throw new IllegalArgumentException("The definingDocumentId of the flow may not be null.");
+        }
+        Map<String, Flow> mapsForDefiningDocument = flows.get(definingDocumentId);
+        if (null == mapsForDefiningDocument) {
+            mapsForDefiningDocument = new ConcurrentHashMap<String, Flow>();
+            flows.put(toAdd.getDefiningDocumentId(), mapsForDefiningDocument);
+        }
+        
+        Flow oldFlow = mapsForDefiningDocument.put(id, toAdd);
+        if (null != oldFlow) {
+            String message = MessageFormat.format("Flow with id \"{0}\" and definingDocumentId \"{1}\" already exists.", 
+                    id, definingDocumentId);
+            throw new IllegalStateException(message);
+        }
+
+        // Make it possible for the "transition" method to map from view nodes
+        // to flow instances.
+        List<Flow> flowsWithId = flowsByFlowId.get(id);
+        if (null == flowsWithId) {
+            flowsWithId = new CopyOnWriteArrayList<Flow>();
+            flowsByFlowId.put(id, flowsWithId);
+        }
+        flowsWithId.add(toAdd);
+        
+        NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
+        if (navigationHandler instanceof ConfigurableNavigationHandler) {
+            ((ConfigurableNavigationHandler)navigationHandler).inspectFlow(context, toAdd);
+        }
+        flowFeatureIsEnabled = true;
+    }
+
+    @Override
+    public boolean isActive(FacesContext context, String definingDocumentId, 
+                            String id) {
+        Util.notNull("context", context);
+        Util.notNull("definingDocumentId", definingDocumentId);
+        Util.notNull("id", id);
+        boolean result = false;
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        for (Flow cur : flowStack) {
+            if (id.equals(cur.getId()) &&
+                definingDocumentId.equals(cur.getDefiningDocumentId())) {
+                result = true;
+                break;
+            }
+        }
+        
+        return result;
+    }
+    
+    
+    
+    
+    @Override
+    public Flow getCurrentFlow(FacesContext context) {
+        Util.notNull("context", context);
+        
+        if (!flowFeatureIsEnabled) {
+            return null;
+        }
+        Flow result = null;
+        // If there is no session, there cannot possibly be a flow, so
+        // don't create one just to check.
+        if (null == context.getExternalContext().getSession(false)) {
+            return null;
+        }
+        
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        int returnDepth = flowStack.getReturnDepth();
+        if (flowStack.size() <= returnDepth) {
+            return null;
+        }
+        if (0 < returnDepth) {
+            Iterator<Flow> stackIter = flowStack.iterator();
+            int i = 0;
+            stackIter.next();
+            if (stackIter.hasNext()) {
+                do {
+                    result = stackIter.next();
+                    i++;
+                } while (i < returnDepth);
+            }
+        } else {
+            result = getFlowStack(context).peekFirst();
+        }
+        return result;
+    }
+
+    @Override
+    public String getLastDisplayedViewId(FacesContext context) {
+        Util.notNull("context", context);
+        String result = null;
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        result = flowStack.peekLastDisplayedViewId();
+        return result;
+    }
+    
+    public static final String FLOW_RETURN_DEPTH_PARAM_NAME = "jffrd";
+    
+    public int getAndClearReturnModeDepth(FacesContext context) {
+        int result = 0;
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        result = flowStack.getAndClearMaxReturnDepth(context);
+        
+        return result;
+    }
+
+    @Override
+    public void pushReturnMode(FacesContext context) {
+        Util.notNull("context", context);
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        flowStack.pushReturnMode();
+    }
+
+    @Override
+    public void popReturnMode(FacesContext context) {
+        Util.notNull("context", context);
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        flowStack.popReturnMode();
+    }
+    // We need a method that takes a view id of a view that is in a flow
+    // and makes the system "enter" the flow.
+    
+    @Override
+    @SuppressWarnings(value="")
+    public void transition(FacesContext context, Flow sourceFlow, 
+                           Flow targetFlow, FlowCallNode outboundCallNode,
+                           String toViewId) {
+        Util.notNull("context", context);
+        Util.notNull("toViewId", toViewId);
+        if (!flowFeatureIsEnabled) {
+           return;
+        }
+        
+        // there has to be a better way to structure this logic
+        if (!flowsEqual(sourceFlow, targetFlow)) {
+            // Do we have an outboundCallNode?
+            Map<String, Object> evaluatedParams = null;
+            if (null != outboundCallNode) {
+                Map<String, Parameter> outboundParameters = outboundCallNode.getOutboundParameters();
+                Map<String, Parameter> inboundParameters = targetFlow.getInboundParameters();
+                // Are we passing parameters?
+                if (null != outboundParameters && !outboundParameters.isEmpty() &&
+                        null != inboundParameters && !inboundParameters.isEmpty()) {
+                    
+                    ELContext elContext = context.getELContext();
+                    String curName;
+                    // for each outbound parameter...
+                    for (Map.Entry<String, Parameter> curOutbound : outboundParameters.entrySet()) {
+                        curName = curOutbound.getKey();
+                        if (inboundParameters.containsKey(curName)) {
+                            if (null == evaluatedParams) {
+                                evaluatedParams = new HashMap<String, Object>();
+                            }
+                            // Evaluate it and put it in the temporary map.
+                            // It is necessary to do this before the flow
+                            // transition because EL expressions may refer to
+                            // things in the current flow scope.
+                            evaluatedParams.put(curName, curOutbound.getValue().getValue().getValue(elContext));
+                        }
+                    }
+                }
+            }
+            
+            performPops(context, sourceFlow, targetFlow);
+            if (null != targetFlow && !targetFlow.equals(FlowImpl.ABANDONED_FLOW)) {
+                pushFlow(context, targetFlow, toViewId);
+            }
+            // Now the new flow is active, it's time to evaluate the inbound
+            // parameters.
+            if (null != evaluatedParams) {
+                Map<String, Parameter> inboundParameters = targetFlow.getInboundParameters();
+                ELContext elContext = context.getELContext();
+                String curName;
+                ValueExpression toSet;
+                for (Map.Entry<String, Object> curOutbound : evaluatedParams.entrySet()) {
+                    curName = curOutbound.getKey();
+                    assert(inboundParameters.containsKey(curName));
+                    toSet = inboundParameters.get(curName).getValue();
+                    toSet.setValue(elContext, curOutbound.getValue());
+                }
+            }
+        } 
+    }
+
+    @Override
+    public void clientWindowTransition(FacesContext context) {
+        Map<String, String> requestParamMap = context.getExternalContext().getRequestParameterMap();
+        String toFlowDocumentId = requestParamMap.get(TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME);
+        String flowId = requestParamMap.get(FLOW_ID_REQUEST_PARAM_NAME);
+        if (null != toFlowDocumentId) {
+            // don't use *this*, due to decoration
+            FlowHandler fh = context.getApplication().getFlowHandler();
+            Flow sourceFlow = fh.getCurrentFlow(context);
+            Flow targetFlow = null;            
+            FlowCallNode flowCallNode = null;
+            // if this is not a return...
+            if (null != flowId && !FlowHandler.NULL_FLOW.equals(toFlowDocumentId)) {
+                targetFlow = fh.getFlow(context, toFlowDocumentId, flowId);
+                if (null != targetFlow && null != sourceFlow) {
+                    flowCallNode = sourceFlow.getFlowCall(targetFlow);
+                }
+            } else {
+                String maxReturnDepthStr = requestParamMap.get(FLOW_RETURN_DEPTH_PARAM_NAME);
+                int maxReturnDepth = Integer.valueOf(maxReturnDepthStr).intValue();
+                FlowDeque<Flow> flowStack = getFlowStack(context);
+                flowStack.setMaxReturnDepth(context, maxReturnDepth);
+            }
+            
+            fh.transition(context, sourceFlow, targetFlow, flowCallNode, context.getViewRoot().getViewId());
+            
+        }
+    }
+    
+    private void performPops(FacesContext context, Flow sourceFlow, Flow targetFlow) {
+        // case 0: sourceFlow is null.  There must be nothing to pop.
+        if (null == sourceFlow) {
+            assert(null == peekFlow(context));
+            return;
+        }
+                
+        // case 1: target is null
+        if (null == targetFlow) {
+            FlowDeque<Flow> flowStack = getFlowStack(context);
+            int maxReturns = flowStack.getAndClearMaxReturnDepth(context);
+            for (int i=0; i < maxReturns; i++) {
+                popFlow(context);
+            }
+            return;
+        } 
+        
+        if (FlowImpl.ABANDONED_FLOW.equals(targetFlow)) {
+            FlowDeque<Flow> flowStack = getFlowStack(context);
+            int depth = flowStack.size();
+            for (int i=0; i<depth; i++) {
+                popFlow(context);
+            }
+            return;
+        }
+        
+        // case 3: neither source nor target are null.  If source does not
+        // have a call that calls target, we must pop source.
+        if (null == sourceFlow.getFlowCall(targetFlow)) {
+            popFlow(context);            
+        }
+
+    }
+    
+    /*
+     * The Flow.equals() method alone is insufficient because we need to account
+     * for the case where one or the other or both operands may be null.
+     * 
+     */
+    private boolean flowsEqual(Flow flow1, Flow flow2) {
+        boolean result = false;
+        if (flow1 == flow2) {
+            result = true;
+        } else if ((null == flow1) || (null == flow2)) {
+            result = false;
+        } else {
+            result = flow1.equals(flow2);
+        }
+        return result;
+    }
+    
+    
+    // <editor-fold defaultstate="collapsed" desc="Helper Methods">
+    
+    private void pushFlow(FacesContext context, Flow toPush, String lastDisplayedViewId) {
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        flowStack.addFirst(toPush, lastDisplayedViewId);
+        FlowCDIContext.flowEntered();
+        MethodExpression me  = toPush.getInitializer();
+        if (null != me) {
+            me.invoke(context.getELContext(), null);
+        }
+        forceSessionUpdateForFlowStack(context, flowStack);
+    }
+    
+    private Flow peekFlow(FacesContext context) {
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        return flowStack.peekFirst();
+    }
+    
+    private Flow popFlow(FacesContext context) {
+        FlowDeque<Flow> flowStack = getFlowStack(context);
+        Flow currentFlow = peekFlow(context);
+        if (null != currentFlow) {
+            callFinalizer(context, currentFlow);
+        }
+        Flow result = flowStack.pollFirst();
+        forceSessionUpdateForFlowStack(context, flowStack);
+        return result;
+        
+    }
+    
+    private void callFinalizer(FacesContext context, Flow currentFlow) {
+        MethodExpression me  = currentFlow.getFinalizer();
+        if (null != me) {
+            me.invoke(context.getELContext(), null);
+        }
+        FlowCDIContext.flowExited();
+    }
+    
+    private FlowDeque<Flow> getFlowStack(FacesContext context) {
+        FlowDeque<Flow> result = null;
+        ExternalContext extContext = context.getExternalContext();
+        String sessionKey = extContext.getClientWindow().getId() + "_flowStack";
+        Map<String, Object> sessionMap = extContext.getSessionMap();
+        result = (FlowDeque<Flow>) sessionMap.get(sessionKey);
+        if (null == result) {
+            result = new FlowDeque<Flow>(sessionKey);
+            sessionMap.put(sessionKey, result);
+        }
+        
+        return result;
+    }
+    
+    private void forceSessionUpdateForFlowStack(FacesContext context, FlowDeque<Flow> stack) {
+        ExternalContext extContext = context.getExternalContext();
+        Map<String, Object> sessionMap = extContext.getSessionMap();
+        sessionMap.put(stack.getSessionKey(), stack);
+    }
+    
+    private static class FlowDeque<E> implements Iterable<E>, Serializable {
+        
+        private static final long serialVersionUID = 7915803727932706270L;
+        
+        private int returnDepth = 0;
+        private ArrayDeque<E> data;
+        private static class RideAlong implements Serializable {
+            String lastDisplayedViewId;
+
+            public RideAlong(String lastDisplayedViewId) {
+                this.lastDisplayedViewId = lastDisplayedViewId;
+            }
+            
+        }
+        private ArrayDeque<RideAlong> rideAlong;
+        private final String sessionKey;
+
+        public FlowDeque(final String sessionKey) {
+            data = new ArrayDeque<E>();
+            rideAlong = new ArrayDeque<RideAlong>();
+            this.sessionKey = sessionKey;
+        }
+        
+        public String getSessionKey() {
+            return sessionKey;
+        }
+        
+        public int size() {
+            return data.size();
+        }
+
+        @Override
+        public Iterator<E> iterator() {
+            return data.iterator();
+        }
+        
+        public void addFirst(E e, String lastDisplayedViewId) {
+            rideAlong.addFirst(new RideAlong(lastDisplayedViewId));
+            data.addFirst(e);
+        }
+        
+        public E pollFirst() {
+            rideAlong.pollFirst();
+            return data.pollFirst();
+        }
+        
+        public E peekFirst() {
+            return data.peekFirst();
+        }
+        
+        public String peekLastDisplayedViewId() {
+            String result = null;
+            RideAlong helper = null;
+            int myReturnDepth = this.getReturnDepth();
+            if (0 < myReturnDepth) {
+                Iterator<RideAlong> stackIter = rideAlong.iterator();
+                stackIter.next();
+                int i = 0;
+                if (stackIter.hasNext()) {
+                    do {
+                        helper = stackIter.next();
+                        i++;
+                    } while (i < myReturnDepth);
+                }
+            } else {
+                helper = rideAlong.peekFirst();
+            }
+            
+            if (null != helper) {
+                result = helper.lastDisplayedViewId;
+            }
+            
+            return result;
+        }
+        
+        public int getReturnDepth() {
+            return returnDepth;
+        }
+        
+        private void setMaxReturnDepth(FacesContext context, int value) {
+            Map<Object, Object> attrs = context.getAttributes();
+            attrs.put(FLOW_RETURN_DEPTH_PARAM_NAME, value);
+        }
+        
+        private int getAndClearMaxReturnDepth(FacesContext context) {
+            Map<Object, Object> attrs = context.getAttributes();
+            int result = 0;
+            if (attrs.containsKey(FLOW_RETURN_DEPTH_PARAM_NAME)) {
+              result = ((Integer)attrs.remove(FLOW_RETURN_DEPTH_PARAM_NAME)).intValue();
+            } 
+            return result;
+        }
+        
+        private void incrementMaxReturnDepth() {
+            FacesContext context = FacesContext.getCurrentInstance();
+            Map<Object, Object> attrs = context.getAttributes();
+            if (!attrs.containsKey(FLOW_RETURN_DEPTH_PARAM_NAME)) {
+                attrs.put(FLOW_RETURN_DEPTH_PARAM_NAME, (Integer) 1);
+            } else {
+                Integer cur = (Integer) attrs.get(FLOW_RETURN_DEPTH_PARAM_NAME);
+                attrs.put(FLOW_RETURN_DEPTH_PARAM_NAME, (Integer) cur + 1);
+            }
+            
+        }
+        
+        public void pushReturnMode() {
+            this.incrementMaxReturnDepth();
+            this.returnDepth++;
+        }
+        
+        public void popReturnMode() {
+            this.returnDepth--;
+        }
+
+
+        
+    }
+        
+    // </editor-fold>
+    
+}
diff --git a/com/sun/faces/flow/FlowImpl.java b/com/sun/faces/flow/FlowImpl.java
new file mode 100644
index 0000000..fd81a62
--- /dev/null
+++ b/com/sun/faces/flow/FlowImpl.java
@@ -0,0 +1,405 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import com.sun.faces.util.Util;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import javax.el.MethodExpression;
+import javax.faces.application.NavigationCase;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.FlowCallNode;
+import javax.faces.flow.Flow;
+import javax.faces.flow.FlowHandler;
+import javax.faces.flow.FlowNode;
+import javax.faces.flow.MethodCallNode;
+import javax.faces.flow.Parameter;
+import javax.faces.flow.ReturnNode;
+import javax.faces.flow.SwitchNode;
+import javax.faces.flow.ViewNode;
+import javax.faces.lifecycle.ClientWindow;
+
+public class FlowImpl extends Flow implements Serializable {
+
+    private static final long serialVersionUID = 5287030395068302998L;
+
+    public static final Flow SYNTHESIZED_RETURN_CASE_FLOW = new FlowImpl(FlowHandler.NULL_FLOW);
+    
+    public static final Flow ABANDONED_FLOW = new FlowImpl(FlowHandlerImpl.ABANDONED_FLOW);
+
+    // <editor-fold defaultstate="collapsed" desc="Instance variables">    
+    
+    private String id;
+    private String definingDocumentId;
+    private String startNodeId;
+    private ConcurrentHashMap<String, Set<NavigationCase>> _navigationCases;
+    private Map<String, Set<NavigationCase>> navigationCases;
+    private CopyOnWriteArrayList<ViewNode> _views;
+    private List<ViewNode> views;
+    private CopyOnWriteArrayList<MethodCallNode> _methodCalls;
+    private List<MethodCallNode> methodCalls;
+    private ConcurrentHashMap<String, Parameter> _inboundParameters;
+    private Map<String,Parameter> inboundParameters;
+    private ConcurrentHashMap<String, ReturnNode> _returns;
+    private Map<String, ReturnNode> returns;
+    private ConcurrentHashMap<String, SwitchNode> _switches;
+    private Map<String, SwitchNode> switches;
+    private ConcurrentHashMap<String, FlowCallNode> _facesFlowCalls;
+    private Map<String, FlowCallNode> facesFlowCalls;
+    private ConcurrentHashMap<String, FlowCallNode> _facesFlowCallsByTargetFlowId;
+    private MethodExpression initializer;
+    private MethodExpression finalizer;
+    private boolean hasBeenInitialized = false;
+    
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="Constructors">       
+
+    public FlowImpl() {
+        _inboundParameters = new ConcurrentHashMap<String, Parameter>();
+        inboundParameters = Collections.unmodifiableMap(_inboundParameters);
+        _returns = new ConcurrentHashMap<String, ReturnNode>();
+        returns = Collections.unmodifiableMap(_returns);
+        _switches = new ConcurrentHashMap<String, SwitchNode>();
+        switches = Collections.unmodifiableMap(_switches);
+        _facesFlowCalls = new ConcurrentHashMap<String, FlowCallNode>();
+        facesFlowCalls = Collections.unmodifiableMap(_facesFlowCalls);
+        _facesFlowCallsByTargetFlowId = new ConcurrentHashMap<String, FlowCallNode>();
+        _views = new CopyOnWriteArrayList<ViewNode>();
+        views = Collections.unmodifiableList(_views);
+        _navigationCases = new ConcurrentHashMap<String, Set<NavigationCase>>();
+        navigationCases = Collections.unmodifiableMap(_navigationCases);
+        _methodCalls = new CopyOnWriteArrayList<MethodCallNode>();
+        methodCalls = Collections.unmodifiableList(_methodCalls);
+    }
+    
+    private FlowImpl(String id) {
+        this.id = id;
+        definingDocumentId = null;
+        startNodeId = null;
+        _navigationCases = null;
+        navigationCases = null;
+        _views = null;
+        views = null;
+        _methodCalls = null;
+        methodCalls = null;
+        _inboundParameters = null;
+        inboundParameters = null;
+        _returns = null;
+        returns = null;
+        _switches = null;
+        switches = null;
+        _facesFlowCalls = null;
+        facesFlowCalls = null;
+        _facesFlowCallsByTargetFlowId = null;
+        initializer = null;
+        finalizer = null;
+        hasBeenInitialized = true;
+    }    
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Object helpers">       
+        
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Flow other = (Flow) obj;
+        if ((this.id == null) ? (other.getId() != null) : !this.id.equals(other.getId())) {
+            return false;
+        }
+        if ((this.startNodeId == null) ? (other.getStartNodeId() != null) : !this.startNodeId.equals(other.getStartNodeId())) {
+            return false;
+        }
+        if (this._views != other.getViews() && (this._views == null || !this._views.equals(other.getViews()))) {
+            return false;
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (null != context) {
+            if (this._returns != other.getReturns() && (this._returns == null || !this._returns.equals(other.getReturns()))) {
+                return false;
+            }
+            if (this.initializer != other.getInitializer() && (this.initializer == null || !this.initializer.equals(other.getInitializer()))) {
+                return false;
+            }
+            if (this.finalizer != other.getFinalizer() && (this.finalizer == null || !this.finalizer.equals(other.getFinalizer()))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 59 * hash + (this.id != null ? this.id.hashCode() : 0);
+        hash = 59 * hash + (this.startNodeId != null ? this.startNodeId.hashCode() : 0);
+        hash = 59 * hash + (this._views != null ? this._views.hashCode() : 0);
+        hash = 59 * hash + (this._returns != null ? this._returns.hashCode() : 0);
+        hash = 59 * hash + (this.initializer != null ? this.initializer.hashCode() : 0);
+        hash = 59 * hash + (this.finalizer != null ? this.finalizer.hashCode() : 0);
+        return hash;
+    }
+
+    // </editor-fold>
+    
+   
+    // <editor-fold defaultstate="collapsed" desc="Simple properties">       
+
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String getDefiningDocumentId() {
+        return definingDocumentId;
+    }
+
+    public void setId(String definingDocumentId, String id) {
+        Util.notNull("definingDocumentId", definingDocumentId);
+        Util.notNull("flowId", id);
+        this.id = id;
+        this.definingDocumentId = definingDocumentId;
+    }
+
+    @Override
+    public String getStartNodeId() {
+        return startNodeId;
+    }
+
+    public void setStartNodeId(String defaultNodeId) {
+        this.startNodeId = defaultNodeId;
+    }
+
+    @Override
+    public MethodExpression getFinalizer() {
+        return finalizer;
+    }
+
+    public void setFinalizer(MethodExpression finalizer) {
+        this.finalizer = finalizer;
+    }
+
+    @Override
+    public MethodExpression getInitializer() {
+        return initializer;
+    }
+
+    public void setInitializer(MethodExpression initializer) {
+        this.initializer = initializer;
+    }
+    
+    @Override
+    public Map<String, Parameter> getInboundParameters() {
+        return inboundParameters;
+    }    
+    
+    public Map<String, Parameter> _getInboundParameters() {
+        return _inboundParameters;
+    }    
+    
+    // </editor-fold>
+
+    
+    // <editor-fold defaultstate="collapsed" desc="Graph properties">       
+
+    @Override
+    public List<ViewNode> getViews() {
+        return views;
+    }
+
+    public List<ViewNode> _getViews() {
+        return _views;
+    }
+
+    @Override
+    public Map<String,ReturnNode> getReturns() {
+        return returns;
+    }
+    
+    public Map<String,ReturnNode> _getReturns() {
+        return _returns;
+    }
+
+    @Override
+    public Map<String,SwitchNode> getSwitches() {
+        return switches;
+    }
+    
+    public Map<String,SwitchNode> _getSwitches() {
+        return _switches;
+    }
+
+    @Override
+    public Map<String,FlowCallNode> getFlowCalls() {
+        return facesFlowCalls;
+    }
+
+    public Map<String,FlowCallNode> _getFlowCalls() {
+        return _facesFlowCalls;
+    }
+
+    @Override
+    public Map<String, Set<NavigationCase>> getNavigationCases() {
+        return navigationCases;
+    }
+    
+    public Map<String, Set<NavigationCase>> _getNavigationCases() {
+        return _navigationCases;
+    }
+    
+    @Override
+    public FlowCallNode getFlowCall(Flow targetFlow) {
+        String targetFlowId = targetFlow.getId();
+        if (!hasBeenInitialized) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            this.init(context);
+        }
+        FlowCallNode result = _facesFlowCallsByTargetFlowId.get(targetFlowId);
+        
+        return result;
+    }
+
+    @Override
+    public List<MethodCallNode> getMethodCalls() {
+        return methodCalls;
+    }
+
+    public List<MethodCallNode> _getMethodCalls() {
+        return _methodCalls;
+    }
+
+    // </editor-fold>
+
+    
+    // <editor-fold defaultstate="collapsed" desc="Graph navigation">       
+    
+    @Override
+    public FlowNode getNode(String nodeId) {
+        List<ViewNode> myViews = getViews();
+        FlowNode result = null;
+        
+        if (null != myViews) {
+            for (ViewNode cur : myViews) {
+                if (nodeId.equals(cur.getId())) {
+                    result = cur;
+                    break;
+                }
+            }
+        }
+        if (null == result) {
+            Map<String, SwitchNode> mySwitches = getSwitches();
+            result = mySwitches.get(nodeId);
+        }
+        if (null == result) {
+            List<MethodCallNode> myMethods = getMethodCalls();
+            for (MethodCallNode cur : myMethods) {
+                if (nodeId.equals(cur.getId())) {
+                    result = cur;
+                    break;
+                }
+            }
+        }
+        if (null == result) {
+            Map<String, FlowCallNode> myCalls = getFlowCalls();
+            result = myCalls.get(nodeId);
+        }
+        
+        if (null == result) {
+            Map<String, ReturnNode> myReturns = getReturns();
+            result = myReturns.get(nodeId);
+        }
+        
+        return result;
+        
+    }
+    
+    // </editor-fold>
+
+    
+    // <editor-fold defaultstate="collapsed" desc="Outside interaction">       
+    
+    
+    @Override
+    public String getClientWindowFlowId(ClientWindow curWindow) {
+        String result = null;
+
+        result = curWindow.getId() + "_" + getId();
+        
+        return result;
+    }
+    
+    // </editor-fold>
+    
+    
+    // <editor-fold defaultstate="collapsed" desc="Helpers">
+    
+    public void init(FacesContext context) {
+        if (hasBeenInitialized) {
+            return;
+        }
+        hasBeenInitialized = true;
+        
+        // Populate lookup data structures.
+        FlowCallNode curNode = null;
+        String curTargetFlowId = null;
+        for (Map.Entry<String,FlowCallNode> cur : _facesFlowCalls.entrySet()) {
+            curNode = cur.getValue();
+            curTargetFlowId = curNode.getCalledFlowId(context);
+            _facesFlowCallsByTargetFlowId.put(curTargetFlowId, curNode);
+        }
+    }
+    
+    // </editor-fold>
+    
+}
diff --git a/com/sun/faces/flow/MethodCallNodeImpl.java b/com/sun/faces/flow/MethodCallNodeImpl.java
new file mode 100644
index 0000000..9040138
--- /dev/null
+++ b/com/sun/faces/flow/MethodCallNodeImpl.java
@@ -0,0 +1,159 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+
+import com.sun.faces.facelets.util.ReflectionUtil;
+import com.sun.faces.util.FacesLogger;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.MethodCallNode;
+import javax.faces.flow.Parameter;
+
+public class MethodCallNodeImpl extends MethodCallNode implements Serializable {
+
+    private static final long serialVersionUID = -5400138716176841428L;
+    
+    private final String id;
+    
+    private static final Logger LOGGER = FacesLogger.FLOW.getLogger();
+    
+    public MethodCallNodeImpl(String id) {
+        this.id = id;
+        _parameters = new CopyOnWriteArrayList<Parameter>();            
+    }
+    
+    public MethodCallNodeImpl(FacesContext context, String id, 
+            String methodExpressionString,
+            String defaultOutcomeString,
+            List<Parameter> parametersFromConfig) {
+        this(id);
+        if (null != parametersFromConfig) {
+            _parameters.addAll(parametersFromConfig);
+        }
+        parameters = Collections.unmodifiableList(_parameters);
+        
+        ExpressionFactory ef = context.getApplication().getExpressionFactory();
+        Class [] paramTypes = new Class[0];
+        if (0 < parameters.size()) {
+            paramTypes = new Class[parameters.size()];
+            int i = 0;
+            for (Parameter cur : parameters) {
+                if (null != cur.getName()) {
+                    try {
+                        paramTypes[i] = ReflectionUtil.forName(cur.getName());
+                    } catch (ClassNotFoundException cnfe) {
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE, "parameter " + cur.getName() + 
+                                    "incorrect type", cnfe);
+                        }
+                        paramTypes[i] = null;
+                    }
+                } else {
+                    paramTypes[i] = String.class;
+                }
+                i++;
+            }
+        }
+        ELContext elContext = context.getELContext();
+        methodExpression = ef.createMethodExpression(elContext, 
+                methodExpressionString, null, paramTypes);
+        
+        if (null != defaultOutcomeString) {
+            outcome = ef.createValueExpression(elContext, defaultOutcomeString, 
+                    Object.class);
+        }
+        
+    }
+    
+    private MethodExpression methodExpression;
+    
+    private ValueExpression outcome;
+
+    private List<Parameter> _parameters;
+    private List<Parameter> parameters;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public List<Parameter> getParameters() {
+        return parameters;
+    }
+    
+    public List<Parameter> _getParameters() {
+        if (null == parameters) {
+            parameters = Collections.unmodifiableList(_parameters);
+        }
+        return _parameters;
+    }
+
+    @Override
+    public MethodExpression getMethodExpression() {
+        return methodExpression;
+    }
+    
+    public void setMethodExpression(MethodExpression methodExpression) {
+        this.methodExpression = methodExpression;
+    }
+    
+    @Override
+    public ValueExpression getOutcome() {
+        return outcome;
+    }
+
+    public void setOutcome(ValueExpression outcome) {
+        this.outcome = outcome;
+    }
+    
+    
+}
diff --git a/com/sun/faces/flow/ParameterImpl.java b/com/sun/faces/flow/ParameterImpl.java
new file mode 100644
index 0000000..c95e4d5
--- /dev/null
+++ b/com/sun/faces/flow/ParameterImpl.java
@@ -0,0 +1,83 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import java.io.Serializable;
+import javax.el.ValueExpression;
+import javax.faces.flow.Parameter;
+
+public class ParameterImpl extends Parameter implements Serializable {
+    
+    private static final long serialVersionUID = -5433802753213440653L;
+
+    private String name;
+    private ValueExpression value;
+    
+    public ParameterImpl() {
+        
+    }
+
+    public ParameterImpl(String name, ValueExpression value) {
+        this.name = name;
+        this.value = value;
+    }
+    
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public ValueExpression getValue() {
+        return value;
+    }
+
+    public void setValue(ValueExpression value) {
+        this.value = value;
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/flow/ReturnNodeImpl.java b/com/sun/faces/flow/ReturnNodeImpl.java
new file mode 100644
index 0000000..bb73aca
--- /dev/null
+++ b/com/sun/faces/flow/ReturnNodeImpl.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import com.sun.faces.util.Util;
+import java.io.Serializable;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.ReturnNode;
+
+public class ReturnNodeImpl extends ReturnNode implements Serializable {
+    
+    private static final long serialVersionUID = 7159675814039078231L;
+    
+    private final String id;
+    private ValueExpression fromOutcome;
+
+    public ReturnNodeImpl(String id) {
+        this.id = id;
+        this.fromOutcome = null;
+    }
+
+    @Override
+    public String getFromOutcome(FacesContext context) {
+        Util.notNull("context", context);
+        String result = null;
+        
+        if (null != fromOutcome) {
+            Object objResult = fromOutcome.getValue(context.getELContext());
+            result = (null != objResult) ? objResult.toString() : null;
+        }
+        return result;
+    }
+    
+    public void setFromOutcome(String fromOutcome) {
+        if (null == fromOutcome) {
+            this.fromOutcome = null;
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        ExpressionFactory eFactory = context.getApplication().getExpressionFactory();
+        this.fromOutcome = eFactory.createValueExpression(context.getELContext(), 
+                fromOutcome, Object.class);
+        
+    }
+    
+    public void setFromOutcome(ValueExpression fromOutcome) {
+        this.fromOutcome = fromOutcome;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+    
+    
+    
+    
+    
+}
diff --git a/com/sun/faces/flow/SwitchCaseImpl.java b/com/sun/faces/flow/SwitchCaseImpl.java
new file mode 100644
index 0000000..9d8fac8
--- /dev/null
+++ b/com/sun/faces/flow/SwitchCaseImpl.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import java.io.Serializable;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.SwitchCase;
+
+public class SwitchCaseImpl extends SwitchCase implements Serializable {
+    
+    private static final long serialVersionUID = -8982500105361921446L;
+
+    // This is the id of the <return> or <switch>
+    private String enclosingId;
+    private String fromOutcome;
+    private String condition;
+    private ValueExpression conditionExpr;
+
+    public ValueExpression getConditionExpression () {
+        return conditionExpr;
+    }
+
+    @Override
+    public Boolean getCondition(FacesContext context) {
+        if (conditionExpr == null && condition != null) {
+            ExpressionFactory factory =
+                  context.getApplication().getExpressionFactory();
+            conditionExpr = factory.createValueExpression(context.getELContext(),
+                                                          condition,
+                                                          Boolean.class);
+        }
+
+        return ((conditionExpr != null)
+                ? (Boolean) conditionExpr.getValue(context.getELContext())
+                : Boolean.FALSE);
+    }
+    
+    public void setCondition(String condition) {
+        this.condition = condition;
+    }
+
+    public void setConditionExpression(ValueExpression conditionExpression) {
+        this.conditionExpr = conditionExpression;
+    }
+    
+    @Override
+    public String getFromOutcome() {
+        return fromOutcome;
+    }
+    
+    public void setFromOutcome(String fromOutcome) {
+        this.fromOutcome = fromOutcome;
+    }
+
+    public String getEnclosingId() {
+        return enclosingId;
+    }
+
+    public void setEnclosingId(String returnId) {
+        this.enclosingId = returnId;
+    }
+
+    
+}
diff --git a/com/sun/faces/flow/SwitchNodeImpl.java b/com/sun/faces/flow/SwitchNodeImpl.java
new file mode 100644
index 0000000..a2ca94f
--- /dev/null
+++ b/com/sun/faces/flow/SwitchNodeImpl.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.SwitchCase;
+import javax.faces.flow.SwitchNode;
+
+public class SwitchNodeImpl extends SwitchNode implements Serializable {
+    
+    private static final long serialVersionUID = -9203493858518714933L;
+        
+    private final String id;
+    private ValueExpression defaultOutcome;
+    private CopyOnWriteArrayList<SwitchCase> _cases;
+    private List<SwitchCase> cases;
+
+    public SwitchNodeImpl(String id) {
+        this.id = id;
+        
+        this.defaultOutcome = null;
+        _cases = new CopyOnWriteArrayList<SwitchCase>();
+        cases = Collections.unmodifiableList(_cases);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final SwitchNodeImpl other = (SwitchNodeImpl) obj;
+        if ((this.id == null) ? (other.id != null) : !this.id.equals(other.id)) {
+            return false;
+        }
+        if (this.defaultOutcome != other.defaultOutcome && (this.defaultOutcome == null || !this.defaultOutcome.equals(other.defaultOutcome))) {
+            return false;
+        }
+        if (this._cases != other._cases && (this._cases == null || !this._cases.equals(other._cases))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 47 * hash + (this.id != null ? this.id.hashCode() : 0);
+        hash = 47 * hash + (this.defaultOutcome != null ? this.defaultOutcome.hashCode() : 0);
+        hash = 47 * hash + (this._cases != null ? this._cases.hashCode() : 0);
+        return hash;
+    }
+    
+    @Override
+    public String getId() {
+        return id;
+    }
+        
+    @Override
+    public List<SwitchCase> getCases() {
+        return cases;
+    }
+
+    public List<SwitchCase> _getCases() {
+        return _cases;
+    }
+
+    @Override
+    public String getDefaultOutcome(FacesContext context) {
+        String result = null;
+        
+        if (null != defaultOutcome) {
+            Object objResult = defaultOutcome.getValue(context.getELContext());
+            result = (null != objResult) ? objResult.toString() : null;
+        }
+        return result;
+    }
+    
+    public void setDefaultOutcome(String defaultOutcome) {
+        if (null == defaultOutcome) {
+            this.defaultOutcome = null;
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        ExpressionFactory eFactory = context.getApplication().getExpressionFactory();
+        this.defaultOutcome = eFactory.createValueExpression(context.getELContext(), 
+                defaultOutcome, Object.class);
+    }
+    
+    public void setDefaultOutcome(ValueExpression defaultOutcome) {
+        this.defaultOutcome = defaultOutcome;
+    }
+
+    
+}
diff --git a/com/sun/faces/flow/ViewNodeImpl.java b/com/sun/faces/flow/ViewNodeImpl.java
new file mode 100644
index 0000000..f86b1cf
--- /dev/null
+++ b/com/sun/faces/flow/ViewNodeImpl.java
@@ -0,0 +1,79 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow;
+
+import java.io.Serializable;
+import javax.faces.flow.ViewNode;
+
+public class ViewNodeImpl extends ViewNode implements Serializable {
+    
+    private static final long serialVersionUID = -7577859001307479164L;
+    
+    private final String id;
+    private final String vdlDocumentId;
+
+    public ViewNodeImpl(String id, String vdlDocumentIdIn) {
+        this.id = id;
+        
+        int i = vdlDocumentIdIn.indexOf("META-INF/flows");
+        
+        if (-1 != i) { 
+            vdlDocumentIdIn = vdlDocumentIdIn.substring(i + 14);
+        } else if (vdlDocumentIdIn.startsWith("/WEB-INF")) {
+            vdlDocumentIdIn = vdlDocumentIdIn.substring(8);
+        } else if (vdlDocumentIdIn.startsWith("WEB-INF")) {
+            vdlDocumentIdIn = vdlDocumentIdIn.substring(7);
+        }
+        this.vdlDocumentId = vdlDocumentIdIn;
+        
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+    
+    @Override
+    public String getVdlDocumentId() {
+        return vdlDocumentId;
+    }
+    
+}
diff --git a/com/sun/faces/flow/builder/FlowBuilderImpl.java b/com/sun/faces/flow/builder/FlowBuilderImpl.java
new file mode 100644
index 0000000..d5a5d7b
--- /dev/null
+++ b/com/sun/faces/flow/builder/FlowBuilderImpl.java
@@ -0,0 +1,209 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.flow.FlowImpl;
+import com.sun.faces.flow.ParameterImpl;
+import com.sun.faces.util.Util;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.Flow;
+import javax.faces.flow.builder.FlowBuilder;
+import javax.faces.flow.builder.FlowCallBuilder;
+import javax.faces.flow.builder.MethodCallBuilder;
+import javax.faces.flow.builder.NavigationCaseBuilder;
+import javax.faces.flow.builder.ReturnBuilder;
+import javax.faces.flow.builder.SwitchBuilder;
+import javax.faces.flow.builder.ViewBuilder;
+
+public class FlowBuilderImpl extends FlowBuilder {
+    
+    private FlowImpl flow;
+    private ExpressionFactory expressionFactory;
+    private ELContext elContext;
+    private FacesContext context;
+    private boolean didInit;
+    private boolean hasId;
+    
+    public FlowBuilderImpl(FacesContext context) {
+        flow = new FlowImpl();
+        this.context = context;
+        this.expressionFactory = context.getApplication().getExpressionFactory();
+        this.elContext = context.getELContext();
+        this.didInit = false;
+        this.hasId = false;
+
+    }
+    
+    // <editor-fold defaultstate="collapsed" desc="Create Flow Nodes">   
+
+    @Override
+    public NavigationCaseBuilder navigationCase() {
+        return new NavigationCaseBuilderImpl(this);
+    }
+
+    @Override
+    public ViewBuilder viewNode(String viewNodeId, String vdlDocumentId) {
+        Util.notNull("viewNodeId", viewNodeId);
+        Util.notNull("vdlDocumentId", vdlDocumentId);
+        ViewBuilder result = new ViewBuilderImpl(this, viewNodeId, vdlDocumentId);
+        return result;
+    }
+
+    @Override
+    public SwitchBuilder switchNode(String switchNodeId) {
+        Util.notNull("switchNodeId", switchNodeId);
+        return new SwitchBuilderImpl(this, switchNodeId);
+    }
+    
+    @Override
+    public ReturnBuilder returnNode(String returnNodeId) {
+        Util.notNull("returnNodeId", returnNodeId);
+        return new ReturnBuilderImpl(this, returnNodeId);
+    }
+    
+    @Override
+    public MethodCallBuilder methodCallNode(String methodCallNodeId) {
+        Util.notNull("methodCallNodeId", methodCallNodeId);
+        return new MethodCallBuilderImpl(this, methodCallNodeId);
+    }
+    
+    @Override
+    public FlowCallBuilder flowCallNode(String flowCallNodeId) {
+        return new FlowCallBuilderImpl(this, flowCallNodeId);
+    }
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Flow-wide Settings">     
+    
+    @Override
+    public FlowBuilder id(String definingDocumentId, String flowId) {
+        Util.notNull("definingDocumentId", definingDocumentId);
+        Util.notNull("flowId", flowId);
+        flow.setId(definingDocumentId, flowId);
+        this.hasId = true;
+        return this;
+    }
+    
+    @Override
+    public FlowBuilder initializer(MethodExpression methodExpression) {
+        Util.notNull("methodExpression", methodExpression);
+        flow.setInitializer(methodExpression);
+        return this;
+    }
+
+    @Override
+    public FlowBuilder initializer(String methodExpression) {
+        Util.notNull("methodExpression", methodExpression);
+        MethodExpression me = expressionFactory.createMethodExpression(elContext, methodExpression, null, new Class[] {});
+        flow.setInitializer(me);
+        return this;
+    }
+    
+    @Override
+    public FlowBuilder finalizer(MethodExpression methodExpression) {
+        flow.setFinalizer(methodExpression);
+        return this;
+    }
+
+    @Override
+    public FlowBuilder finalizer(String methodExpression) {
+        MethodExpression me = expressionFactory.createMethodExpression(elContext, methodExpression, null, new Class[] {});
+        flow.setFinalizer(me);
+        return this;
+    }
+    
+    @Override
+    public FlowBuilder inboundParameter(String name, ValueExpression value) {
+        ParameterImpl param = new ParameterImpl(name, value);
+        flow._getInboundParameters().put(name, param);
+        
+        return this;
+    }
+
+    @Override
+    public FlowBuilder inboundParameter(String name, String value) {
+        ValueExpression ve = expressionFactory.createValueExpression(elContext, value, Object.class);
+        inboundParameter(name, ve);
+        return this;
+    }
+
+    // </editor-fold>
+        
+    @Override
+    public Flow getFlow() {
+        if (!hasId) {
+            throw new IllegalStateException("Flow must have a defining document id and flow id.");
+        }
+        if (!didInit) {
+            flow.init(context);
+            String startNodeId = flow.getStartNodeId();
+            if (null == startNodeId) {
+                String flowId = flow.getId();
+                this.viewNode(flowId, "/" + flowId + "/" + flowId + ".xhtml").markAsStartNode();
+            }
+            didInit = true;
+        }
+        return flow;
+    }
+    
+    public FlowImpl _getFlow() {
+        return flow;
+    }
+    
+    // <editor-fold defaultstate="collapsed" desc="Package private helpers">
+    
+    ExpressionFactory getExpressionFactory() {
+        return expressionFactory;
+    }
+    
+    ELContext getELContext() {
+        return elContext;
+    }
+    
+    // </editor-fold>
+
+    
+}
diff --git a/com/sun/faces/flow/builder/FlowCallBuilderImpl.java b/com/sun/faces/flow/builder/FlowCallBuilderImpl.java
new file mode 100644
index 0000000..4132e4b
--- /dev/null
+++ b/com/sun/faces/flow/builder/FlowCallBuilderImpl.java
@@ -0,0 +1,115 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.flow.FlowCallNodeImpl;
+import com.sun.faces.flow.ParameterImpl;
+import com.sun.faces.util.Util;
+import java.util.Map;
+import javax.el.ValueExpression;
+import javax.faces.flow.FlowCallNode;
+import javax.faces.flow.builder.FlowCallBuilder;
+
+public class FlowCallBuilderImpl extends FlowCallBuilder {
+    
+    private FlowBuilderImpl root;
+    private String flowCallNodeId;
+    private String flowDocumentId;
+    private String flowId;
+    
+
+    public FlowCallBuilderImpl(FlowBuilderImpl root, String id) {
+        this.root = root;
+        this.flowCallNodeId = id;
+    }
+
+    @Override
+    public FlowCallBuilder flowReference(String flowDocumentId, String flowId) {
+        Util.notNull("flowDocumentId", flowDocumentId);
+        Util.notNull("flowId", flowId);
+        this.flowDocumentId = flowDocumentId;
+        this.flowId = flowId;
+        getFlowCall();
+        return this;
+    }
+    
+    private FlowCallNodeImpl getFlowCall() {
+        Util.notNull("flowCallNodeId", flowCallNodeId);
+        Util.notNull("flowwDocumentId", flowDocumentId);
+        Util.notNull("flowId", flowId);
+        
+        Map<String, FlowCallNode> flowCalls = root._getFlow()._getFlowCalls();
+        FlowCallNodeImpl flowCall = (FlowCallNodeImpl) flowCalls.get(flowCallNodeId);
+        if (null == flowCall) {
+            flowCall = new FlowCallNodeImpl(flowCallNodeId, flowDocumentId, flowId, null);
+            flowCalls.put(flowCallNodeId, flowCall);
+        }
+        return flowCall;
+    }
+
+    @Override
+    public FlowCallBuilder outboundParameter(String name, ValueExpression value) {
+        Util.notNull("name", name);
+        Util.notNull("value", value);
+        ParameterImpl param = new ParameterImpl(name, value);
+        FlowCallNodeImpl flowCall = getFlowCall();
+        flowCall._getOutboundParameters().put(name, param);
+        return this;
+    }
+
+    @Override
+    public FlowCallBuilder outboundParameter(String name, String value) {
+        Util.notNull("name", name);
+        Util.notNull("value", value);
+        ValueExpression ve = root.getExpressionFactory().createValueExpression(root.getELContext(), value, Object.class);
+        outboundParameter(name, ve);
+        return this;
+    }
+
+    @Override
+    public FlowCallBuilder markAsStartNode() {
+        root._getFlow().setStartNodeId(flowCallNodeId);
+        return this;
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/flow/builder/MethodCallBuilderImpl.java b/com/sun/faces/flow/builder/MethodCallBuilderImpl.java
new file mode 100644
index 0000000..8324a86
--- /dev/null
+++ b/com/sun/faces/flow/builder/MethodCallBuilderImpl.java
@@ -0,0 +1,117 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.flow.MethodCallNodeImpl;
+import java.util.List;
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.flow.Parameter;
+import javax.faces.flow.builder.MethodCallBuilder;
+
+public class MethodCallBuilderImpl extends MethodCallBuilder {
+    
+    private FlowBuilderImpl root;
+    private String methodCallId;
+    private MethodCallNodeImpl methodCallNode;
+    private static final Class[] EMPTY_ARGS = new Class[0];
+
+    public MethodCallBuilderImpl(FlowBuilderImpl root, String id) {
+        this.root = root;
+        this.methodCallId = id;
+        this.methodCallNode = new MethodCallNodeImpl(id);
+        this.root._getFlow()._getMethodCalls().add(methodCallNode);
+                
+    }
+
+    @Override
+    public MethodCallBuilder defaultOutcome(String outcome) {
+        ELContext elc = root.getELContext();
+        ValueExpression ve = root.getExpressionFactory().createValueExpression(elc, outcome, String.class);
+        methodCallNode.setOutcome(ve);
+        return this;
+    }
+
+    @Override
+    public MethodCallBuilder defaultOutcome(ValueExpression ve) {
+        methodCallNode.setOutcome(ve);
+        return this;
+    }
+
+    @Override
+    public MethodCallBuilder expression(String methodExpression) {
+        ELContext elc = root.getELContext();
+        MethodExpression me = root.getExpressionFactory().createMethodExpression(elc, methodExpression, null, EMPTY_ARGS);
+        methodCallNode.setMethodExpression(me);
+        return this;
+    }
+
+    @Override
+    public MethodCallBuilder expression(String methodExpression, Class[] paramTypes) {
+        ELContext elc = root.getELContext();
+        MethodExpression me = root.getExpressionFactory().createMethodExpression(elc, methodExpression, null, paramTypes);
+        methodCallNode.setMethodExpression(me);
+        return this;
+    }
+
+    @Override
+    public MethodCallBuilder parameters(List<Parameter> parameters) {
+        methodCallNode._getParameters().addAll(parameters);
+        return this;
+    }
+    
+    @Override
+    public MethodCallBuilder expression(MethodExpression me) {
+        methodCallNode.setMethodExpression(me);
+        return this;
+    }
+
+    @Override
+    public MethodCallBuilder markAsStartNode() {
+        root._getFlow().setStartNodeId(methodCallId);
+        return this;
+    }
+    
+    
+    
+    
+}
diff --git a/com/sun/faces/flow/builder/MutableNavigationCase.java b/com/sun/faces/flow/builder/MutableNavigationCase.java
new file mode 100644
index 0000000..0080906
--- /dev/null
+++ b/com/sun/faces/flow/builder/MutableNavigationCase.java
@@ -0,0 +1,339 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.flow.builder;
+
+import java.util.Collections;
+import javax.faces.application.*;
+import java.util.Map;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><strong class="changed_modified_2_2">
+ * NavigationCase</strong>
+ * represents a <code><navigation-case></code> in the navigation
+ * rule base, as well as the <span class="changed_modified_2_2"><code><from-view-id></code> with
+ * which this <code><navigation-case></code> is a sibling</span>.</p>
+ *
+ * @since 2.0
+ */
+public class MutableNavigationCase extends NavigationCase {
+
+    private String fromViewId;
+    private String fromAction;
+    private String fromOutcome;
+    private String condition;
+    private String toViewId;
+    private String toFlowDocumentId;
+    private Map<String,List<String>> parameters;
+    private boolean redirect;
+    private boolean includeViewParams;
+
+    private ValueExpression toViewIdExpr;
+    private ValueExpression conditionExpr;
+    private String toString;
+    private int hashCode;
+
+
+    // ------------------------------------------------------------ Constructors
+
+    public MutableNavigationCase() {
+        this(null, null, null, null, null, null, null, false, false);
+        parameters = new ConcurrentHashMap<String, List<String>>();
+    }
+    
+    public MutableNavigationCase(String fromViewId,
+                          String fromAction,
+                          String fromOutcome,
+                          String condition,
+                          String toViewId,
+                          String toFlowDocumentId,
+                          Map<String,List<String>> parameters,
+                          boolean redirect,
+                          boolean includeViewParams) {
+        super(fromViewId, fromAction, fromOutcome, condition, toViewId, toFlowDocumentId, parameters, redirect, includeViewParams);
+
+        this.fromViewId = fromViewId;
+        this.fromAction = fromAction;
+        this.fromOutcome = fromOutcome;
+        this.condition = condition;
+        this.toViewId = toViewId;
+        this.toFlowDocumentId = toFlowDocumentId;
+        this.parameters = (null != parameters) ? parameters : new ConcurrentHashMap<String, List<String>>();
+        this.redirect = redirect;
+        this.includeViewParams = includeViewParams;
+
+    }
+
+    public MutableNavigationCase(String fromViewId, 
+                        String fromAction, String fromOutcome, String condition, String toViewId, 
+                        String toFlowDocumentId, boolean redirect, boolean includeViewParams) {
+        super(fromViewId, fromAction, fromOutcome, condition, toViewId, toFlowDocumentId, Collections.EMPTY_MAP, redirect, includeViewParams);
+
+        this.fromViewId = fromViewId;
+        this.fromAction = fromAction;
+        this.fromOutcome = fromOutcome;
+        this.condition = condition;
+        this.toViewId = toViewId;
+        this.toFlowDocumentId = toFlowDocumentId;
+        this.parameters = Collections.emptyMap();
+        this.redirect = redirect;
+        this.includeViewParams = includeViewParams;
+        
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+    @Override
+    public String getFromViewId() {
+
+        return fromViewId;
+
+    }
+    
+    public void setFromViewId(String fromViewId) {
+        this.fromViewId = fromViewId;
+    }
+
+
+    @Override
+    public String getFromAction() {
+
+        return fromAction;
+
+    }
+    
+    public void setFromAction(String fromAction) {
+        this.fromAction = fromAction;
+    }
+
+
+    @Override
+    public String getFromOutcome() {
+
+        return fromOutcome;
+
+    }
+    
+    public void setFromOutcome(String fromOutcome) {
+        this.fromOutcome = fromOutcome;
+    }
+
+    @Override
+    public String getToViewId(FacesContext context) {
+
+        if (toViewIdExpr == null) {
+            ExpressionFactory factory =
+                  context.getApplication().getExpressionFactory();
+            toViewIdExpr = factory.createValueExpression(context.getELContext(),
+                                                         toViewId,
+                                                         String.class);
+        }
+        String result = (String) toViewIdExpr.getValue(context.getELContext());
+        if (result.charAt(0) != '/') {
+            result = '/' + result;
+        }
+
+        return result;
+
+    }
+    
+    public void setToViewId(String toViewId) {
+        this.toViewId = toViewId;
+        toViewIdExpr = null;
+    }
+
+    @Override
+    public String getToFlowDocumentId() {
+
+        return toFlowDocumentId;
+
+    }
+    
+    public void setToFlowDocumentId(String toFlowDocumentId) {
+        this.toFlowDocumentId = toFlowDocumentId;
+    }
+    
+    @Override
+    public boolean hasCondition() {
+
+        return (condition != null);
+
+    }
+
+    @Override
+    public Boolean getCondition(FacesContext context) {
+
+        if (conditionExpr == null && condition != null) {
+            ExpressionFactory factory =
+                  context.getApplication().getExpressionFactory();
+            conditionExpr = factory.createValueExpression(context.getELContext(),
+                                                          condition,
+                                                          Boolean.class);
+        }
+
+        return ((conditionExpr != null)
+                ? (Boolean) conditionExpr.getValue(context.getELContext())
+                : null);
+
+    }
+    
+    public void setCondition(String condition) {
+        this.condition = condition;
+        this.conditionExpr = null;
+    }
+    
+    public void setConditionExpression(ValueExpression conditionExpression) {
+        this.conditionExpr = conditionExpression;
+    }
+
+    @Override
+    public Map<String, List<String>> getParameters() {
+
+        return parameters;
+
+    }
+    
+    @Override
+    public boolean isRedirect() {
+
+        return redirect;
+
+    }
+    
+    public void setRedirect(boolean redirect) {
+        this.redirect = redirect;
+    }
+    
+
+
+    @Override
+    public boolean isIncludeViewParams() {
+
+        return includeViewParams;
+
+    }
+    
+    public void setIncludeViewParams(boolean includeViewParams) {
+        this.includeViewParams = includeViewParams;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MutableNavigationCase other = (MutableNavigationCase) obj;
+        if ((this.fromViewId == null) ? (other.fromViewId != null) : !this.fromViewId.equals(other.fromViewId)) {
+            return false;
+        }
+        if ((this.fromAction == null) ? (other.fromAction != null) : !this.fromAction.equals(other.fromAction)) {
+            return false;
+        }
+        if ((this.fromOutcome == null) ? (other.fromOutcome != null) : !this.fromOutcome.equals(other.fromOutcome)) {
+            return false;
+        }
+        if ((this.condition == null) ? (other.condition != null) : !this.condition.equals(other.condition)) {
+            return false;
+        }
+        if ((this.toViewId == null) ? (other.toViewId != null) : !this.toViewId.equals(other.toViewId)) {
+            return false;
+        }
+        if ((this.toFlowDocumentId == null) ? (other.toFlowDocumentId != null) : !this.toFlowDocumentId.equals(other.toFlowDocumentId)) {
+            return false;
+        }
+        if (this.parameters != other.parameters && (this.parameters == null || !this.parameters.equals(other.parameters))) {
+            return false;
+        }
+        if (this.redirect != other.redirect) {
+            return false;
+        }
+        if (this.includeViewParams != other.includeViewParams) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 29 * hash + (this.fromViewId != null ? this.fromViewId.hashCode() : 0);
+        hash = 29 * hash + (this.fromAction != null ? this.fromAction.hashCode() : 0);
+        hash = 29 * hash + (this.fromOutcome != null ? this.fromOutcome.hashCode() : 0);
+        hash = 29 * hash + (this.condition != null ? this.condition.hashCode() : 0);
+        hash = 29 * hash + (this.toViewId != null ? this.toViewId.hashCode() : 0);
+        hash = 29 * hash + (this.toFlowDocumentId != null ? this.toFlowDocumentId.hashCode() : 0);
+        hash = 29 * hash + (this.parameters != null ? this.parameters.hashCode() : 0);
+        hash = 29 * hash + (this.redirect ? 1 : 0);
+        hash = 29 * hash + (this.includeViewParams ? 1 : 0);
+        return hash;
+    }
+    
+
+
+    @Override
+    public String toString() {
+
+        if (toString == null) {
+            StringBuilder sb = new StringBuilder(64);
+            sb.append("NavigationCase{");
+            sb.append("fromViewId='").append(fromViewId).append('\'');
+            sb.append(", fromAction='").append(fromAction).append('\'');
+            sb.append(", fromOutcome='").append(fromOutcome).append('\'');
+            sb.append(", if='").append(condition).append('\'');
+            sb.append(", toViewId='").append(toViewId).append('\'');
+            sb.append(", faces-redirect=").append(redirect);
+            sb.append(", includeViewParams=").append(includeViewParams).append('\'');
+            sb.append(", parameters=").append(((parameters != null) ? parameters.toString() : ""));
+            sb.append('}');
+            toString = sb.toString();
+        }
+        return toString;
+
+    }
+ 
+}
diff --git a/com/sun/faces/flow/builder/NavigationCaseBuilderImpl.java b/com/sun/faces/flow/builder/NavigationCaseBuilderImpl.java
new file mode 100644
index 0000000..f188469
--- /dev/null
+++ b/com/sun/faces/flow/builder/NavigationCaseBuilderImpl.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.util.Util;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+import javax.el.ValueExpression;
+import javax.faces.application.NavigationCase;
+import javax.faces.flow.builder.NavigationCaseBuilder;
+
+public class NavigationCaseBuilderImpl extends NavigationCaseBuilder {
+    
+    private FlowBuilderImpl root;
+    private MutableNavigationCase navCase;
+
+    public NavigationCaseBuilderImpl(FlowBuilderImpl root) {
+        navCase = new MutableNavigationCase();
+        this.root = root;
+    }
+    
+    @Override
+    public NavigationCaseBuilder toFlowDocumentId(String toFlowDocumentId) {
+        Util.notNull("toFlowDocumentId", toFlowDocumentId);
+        navCase.setToFlowDocumentId(toFlowDocumentId);
+        return this;
+    }
+
+    @Override
+    public NavigationCaseBuilder fromAction(String fromAction) {
+        Util.notNull("fromAction", fromAction);
+        navCase.setFromAction(fromAction);
+        return this;
+    }
+
+    @Override
+    public NavigationCaseBuilder fromOutcome(String fromOutcome) {
+        Util.notNull("fromOutcome", fromOutcome);
+        navCase.setFromOutcome(fromOutcome);
+        return this;
+    }
+
+    @Override
+    public NavigationCaseBuilder fromViewId(String fromViewId) {
+        Util.notNull("fromViewId", fromViewId);
+        navCase.setFromViewId(fromViewId);
+        Map<String,Set<NavigationCase>> rules = root._getFlow()._getNavigationCases();
+        Set<NavigationCase> cases = rules.get(fromViewId);
+        if (null == cases) {
+            cases = new CopyOnWriteArraySet<NavigationCase>();
+            rules.put(fromViewId, cases);
+        }
+        cases.add(navCase);
+        return this;
+    }
+
+    @Override
+    public NavigationCaseBuilder toViewId(String toViewId) {
+        Util.notNull("toViewId", toViewId);
+        navCase.setToViewId(toViewId);
+        return this;
+    }
+
+    @Override
+    public NavigationCaseBuilder condition(String condition) {
+        Util.notNull("condition", condition);
+        navCase.setCondition(condition);
+        return this;
+    }
+
+    @Override
+    public NavigationCaseBuilder condition(ValueExpression condition) {
+        Util.notNull("condition", condition);
+        navCase.setConditionExpression(condition);
+        return this;
+    }
+
+    @Override
+    public RedirectBuilder redirect() {
+        navCase.setRedirect(true);
+        return new RedirectBuilderImpl();
+    }
+
+    private class RedirectBuilderImpl extends NavigationCaseBuilder.RedirectBuilder {
+
+        public RedirectBuilderImpl() {
+        }
+
+        @Override
+        public RedirectBuilder parameter(String name, String value) {
+            Util.notNull("name", name);
+            Util.notNull("value", value);
+            Map<String, List<String>> redirectParams = NavigationCaseBuilderImpl.this.navCase.getParameters();
+            List<String> values = redirectParams.get(name);
+            if (null == values) {
+                values = new CopyOnWriteArrayList<String>();
+                redirectParams.put(name, values);
+            }
+            values.add(value);
+            return this;
+        }
+
+        @Override
+        public RedirectBuilder includeViewParams() {
+            NavigationCaseBuilderImpl.this.navCase.isIncludeViewParams();
+            return this;
+        }
+    
+        
+        
+        
+    }
+    
+    
+}
diff --git a/com/sun/faces/flow/builder/ReturnBuilderImpl.java b/com/sun/faces/flow/builder/ReturnBuilderImpl.java
new file mode 100644
index 0000000..7b658c1
--- /dev/null
+++ b/com/sun/faces/flow/builder/ReturnBuilderImpl.java
@@ -0,0 +1,83 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.flow.ReturnNodeImpl;
+import com.sun.faces.util.Util;
+import javax.el.ValueExpression;
+import javax.faces.flow.builder.ReturnBuilder;
+
+public class ReturnBuilderImpl extends ReturnBuilder {
+    
+    private FlowBuilderImpl root;
+    String id;
+
+    public ReturnBuilderImpl(FlowBuilderImpl root, String id) {
+        this.root = root;
+        this.id = id;
+    }
+
+    @Override
+    public ReturnBuilder markAsStartNode() {
+        root._getFlow().setStartNodeId(id);
+        return this;
+    }
+    
+    @Override
+    public ReturnBuilder fromOutcome(String outcome) {
+        Util.notNull("outcome", outcome);
+        ReturnNodeImpl returnNode = new ReturnNodeImpl(id);
+        returnNode.setFromOutcome(outcome);
+        root._getFlow()._getReturns().put(id, returnNode);
+        return this;
+    }
+
+    @Override
+    public ReturnBuilder fromOutcome(ValueExpression outcome) {
+        Util.notNull("outcome", outcome);
+        ReturnNodeImpl returnNode = new ReturnNodeImpl(id);
+        returnNode.setFromOutcome(outcome);
+        root._getFlow()._getReturns().put(id, returnNode);
+
+        return this;
+    }
+
+}
diff --git a/com/sun/faces/flow/builder/SwitchBuilderImpl.java b/com/sun/faces/flow/builder/SwitchBuilderImpl.java
new file mode 100644
index 0000000..d88cc09
--- /dev/null
+++ b/com/sun/faces/flow/builder/SwitchBuilderImpl.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.flow.SwitchNodeImpl;
+import com.sun.faces.util.Util;
+import javax.el.ValueExpression;
+import javax.faces.flow.builder.SwitchBuilder;
+import javax.faces.flow.builder.SwitchCaseBuilder;
+
+public class SwitchBuilderImpl extends SwitchBuilder {
+    
+    private FlowBuilderImpl root;
+    private String switchId;
+    private SwitchNodeImpl switchNode;
+    private SwitchCaseBuilderImpl switchCaseBuilder;
+
+    
+    SwitchBuilderImpl(FlowBuilderImpl root, String id) {
+        this.root = root;
+        this.switchId = id;
+        this.switchNode = new SwitchNodeImpl(id);
+        root._getFlow()._getSwitches().put(id, switchNode);
+        this.switchCaseBuilder = new SwitchCaseBuilderImpl(this);
+    }
+
+    @Override
+    public SwitchCaseBuilder defaultOutcome(String outcome) {
+        Util.notNull("outcome", outcome);
+        switchNode.setDefaultOutcome(outcome);
+        return switchCaseBuilder;
+    }
+
+    @Override
+    public SwitchCaseBuilder defaultOutcome(ValueExpression outcome) {
+        Util.notNull("outcome", outcome);
+        switchNode.setDefaultOutcome(outcome);
+        return switchCaseBuilder;
+    }
+
+    @Override
+    public SwitchBuilderImpl markAsStartNode() {
+        root._getFlow().setStartNodeId(switchId);
+        return this;
+    }
+
+    @Override
+    public SwitchCaseBuilder switchCase() {
+        return switchCaseBuilder.switchCase();
+    }
+    
+    FlowBuilderImpl getRoot() {
+        return root;
+    }
+    
+    SwitchNodeImpl getSwitchNode() {
+        return switchNode;
+    }
+    
+    
+}
diff --git a/com/sun/faces/flow/builder/SwitchCaseBuilderImpl.java b/com/sun/faces/flow/builder/SwitchCaseBuilderImpl.java
new file mode 100644
index 0000000..9e25436
--- /dev/null
+++ b/com/sun/faces/flow/builder/SwitchCaseBuilderImpl.java
@@ -0,0 +1,91 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.flow.SwitchCaseImpl;
+import com.sun.faces.util.Util;
+import javax.el.ValueExpression;
+import javax.faces.flow.builder.SwitchCaseBuilder;
+
+public class SwitchCaseBuilderImpl extends SwitchCaseBuilder {
+    
+    private SwitchBuilderImpl root;
+    private SwitchCaseImpl myCase;
+
+    public SwitchCaseBuilderImpl(SwitchBuilderImpl root) {
+        this.root = root;
+        this.myCase = null;
+    }
+    
+    public SwitchCaseImpl getNavigationCase() {
+        return myCase;
+    }
+
+    @Override
+    public SwitchCaseBuilder switchCase() {
+        SwitchCaseBuilderImpl result = new SwitchCaseBuilderImpl(root);
+        result.myCase = new SwitchCaseImpl();
+        root.getSwitchNode()._getCases().add(result.myCase);
+        return result;
+    }
+    
+    @Override
+    public SwitchCaseBuilder condition(ValueExpression expression) {
+        Util.notNull("expression", expression);
+        myCase.setConditionExpression(expression);
+        return this;
+    }
+
+    @Override
+    public SwitchCaseBuilder condition(String expression) {
+        Util.notNull("expression", expression);
+        myCase.setCondition(expression);
+        return this;
+    }
+
+    @Override
+    public SwitchCaseBuilder fromOutcome(String outcome) {
+        Util.notNull("outcome", outcome);
+        myCase.setFromOutcome(outcome);
+        return this;
+    }
+
+}
diff --git a/com/sun/faces/flow/builder/ViewBuilderImpl.java b/com/sun/faces/flow/builder/ViewBuilderImpl.java
new file mode 100644
index 0000000..da2ef9d
--- /dev/null
+++ b/com/sun/faces/flow/builder/ViewBuilderImpl.java
@@ -0,0 +1,68 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.flow.builder;
+
+import com.sun.faces.flow.ViewNodeImpl;
+import java.util.List;
+import javax.faces.flow.ViewNode;
+import javax.faces.flow.builder.ViewBuilder;
+
+public class ViewBuilderImpl extends ViewBuilder {
+    
+    private FlowBuilderImpl root;
+    private ViewNodeImpl viewNode;
+
+    public ViewBuilderImpl(FlowBuilderImpl root, String viewNodeId, String vdlDocumentId) {
+        this.root = root;
+        
+        List<ViewNode> viewNodes = root._getFlow()._getViews();
+        viewNode = new ViewNodeImpl(viewNodeId, vdlDocumentId);
+        viewNodes.add(viewNode);
+    }
+    
+    @Override
+    public ViewBuilder markAsStartNode() {
+        root._getFlow().setStartNodeId(viewNode.getId());
+        return this;
+    }
+    
+    
+}
diff --git a/com/sun/faces/io/Base64InputStream.java b/com/sun/faces/io/Base64InputStream.java
new file mode 100644
index 0000000..7acd420
--- /dev/null
+++ b/com/sun/faces/io/Base64InputStream.java
@@ -0,0 +1,358 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (base64 @ miginfocom . com)
+ * All rights reserved.
+ */
+
+package com.sun.faces.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+
+/**
+ * <p>A slight spin on the standard ByteArrayInputStream.  This
+ * one accepts only a Base64 encoded String in the constructor argument</p>
+ * which decodes into a <code>byte[]</code> to be read from by
+ * other stream.</p>
+ */
+public class Base64InputStream extends InputStream {
+
+
+    private static final int[] IA = new int[256];
+    private static final char[] CA =
+          "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+                .toCharArray();
+
+    static {
+        Arrays.fill(IA, -1);
+        for (int i = 0, iS = CA.length; i < iS; i++) {
+            IA[CA[i]] = i;
+        }
+        IA['='] = 0;
+    }
+
+    /**
+     * An array of bytes that was provided
+     * by the creator of the stream. Elements <code>buf[0]</code>
+     * through <code>buf[count-1]</code> are the
+     * only bytes that can ever be read from the
+     * stream;  element <code>buf[pos]</code> is
+     * the next byte to be read.
+     */
+    protected byte buf[];
+
+    /**
+     * The index of the next character to read from the input stream buffer.
+     * This value should always be nonnegative
+     * and not larger than the value of <code>count</code>.
+     * The next byte to be read from the input stream buffer
+     * will be <code>buf[pos]</code>.
+     */
+    protected int pos;
+
+    /**
+     * The currently marked position in the stream.
+     * ByteArrayInputStream objects are marked at position zero by
+     * default when constructed.  They may be marked at another
+     * position within the buffer by the <code>mark()</code> method.
+     * The current buffer position is set to this point by the
+     * <code>reset()</code> method.
+     * <p/>
+     * If no mark has been set, then the value of mark is the offset
+     * passed to the constructor (or 0 if the offset was not supplied).
+     *
+     * @since JDK1.1
+     */
+    protected int mark = 0;
+
+    /**
+     * The index one greater than the last valid character in the input
+     * stream buffer.
+     * This value should always be nonnegative
+     * and not larger than the length of <code>buf</code>.
+     * It  is one greater than the position of
+     * the last byte within <code>buf</code> that
+     * can ever be read  from the input stream buffer.
+     */
+    protected int count;
+
+    /**
+     * Creates a <code>Base64InputStream</code>.
+     *
+     * @param encodedString the Base64 encoded String
+     */
+    public Base64InputStream(String encodedString) {
+        this.buf = decode(encodedString);
+        this.pos = 0;
+        this.count = buf.length;
+    }
+
+
+    /**
+     * Reads the next byte of data from this input stream. The value
+     * byte is returned as an <code>int</code> in the range
+     * <code>0</code> to <code>255</code>. If no byte is available
+     * because the end of the stream has been reached, the value
+     * <code>-1</code> is returned.
+     * <p/>
+     * This <code>read</code> method
+     * cannot block.
+     *
+     * @return the next byte of data, or <code>-1</code> if the end of the
+     *         stream has been reached.
+     */
+    public int read() {
+        return (pos < count) ? (buf[pos++] & 0xff) : -1;
+    }
+
+    /**
+     * Reads up to <code>len</code> bytes of data into an array of bytes
+     * from this input stream.
+     * If <code>pos</code> equals <code>count</code>,
+     * then <code>-1</code> is returned to indicate
+     * end of file. Otherwise, the  number <code>k</code>
+     * of bytes read is equal to the smaller of
+     * <code>len</code> and <code>count-pos</code>.
+     * If <code>k</code> is positive, then bytes
+     * <code>buf[pos]</code> through <code>buf[pos+k-1]</code>
+     * are copied into <code>b[off]</code>  through
+     * <code>b[off+k-1]</code> in the manner performed
+     * by <code>System.arraycopy</code>. The
+     * value <code>k</code> is added into <code>pos</code>
+     * and <code>k</code> is returned.
+     * <p/>
+     * This <code>read</code> method cannot block.
+     *
+     * @param b   the buffer into which the data is read.
+     * @param off the start offset of the data.
+     * @param len the maximum number of bytes read.
+     *
+     * @return the total number of bytes read into the buffer, or
+     *         <code>-1</code> if there is no more data because the end of
+     *         the stream has been reached.
+     */
+    @Override
+    public int read(byte b[], int off, int len) {
+        if (b == null) {
+            throw new NullPointerException();
+        } else if ((off < 0) || (off > b.length) || (len < 0) ||
+                   ((off + len) > b.length) || ((off + len) < 0)) {
+            throw new IndexOutOfBoundsException();
+        }
+        if (pos >= count) {
+            return -1;
+        }
+        if (pos + len > count) {
+            len = count - pos;
+        }
+        if (len <= 0) {
+            return 0;
+        }
+        System.arraycopy(buf, pos, b, off, len);
+        pos += len;
+        return len;
+    }
+
+    /**
+     * Skips <code>n</code> bytes of input from this input stream. Fewer
+     * bytes might be skipped if the end of the input stream is reached.
+     * The actual number <code>k</code>
+     * of bytes to be skipped is equal to the smaller
+     * of <code>n</code> and  <code>count-pos</code>.
+     * The value <code>k</code> is added into <code>pos</code>
+     * and <code>k</code> is returned.
+     *
+     * @param n the number of bytes to be skipped.
+     *
+     * @return the actual number of bytes skipped.
+     */
+    @Override
+    public long skip(long n) {
+        if (pos + n > count) {
+            n = count - pos;
+        }
+        if (n < 0) {
+            return 0;
+        }
+        pos += n;
+        return n;
+    }
+
+    /**
+     * Returns the number of bytes that can be read from this input
+     * stream without blocking.
+     * The value returned is
+     * <code>count - pos</code>,
+     * which is the number of bytes remaining to be read from the input buffer.
+     *
+     * @return the number of bytes that can be read from the input stream
+     *         without blocking.
+     */
+    @Override
+    public int available() {
+        return count - pos;
+    }
+
+    /**
+     * Tests if this <code>InputStream</code> supports mark/reset. The
+     * <code>markSupported</code> method of <code>ByteArrayInputStream</code>
+     * always returns <code>true</code>.
+     *
+     * @since JDK1.1
+     */
+    @Override
+    public boolean markSupported() {
+        return true;
+    }
+
+    /**
+     * Set the current marked position in the stream.
+     * ByteArrayInputStream objects are marked at position zero by
+     * default when constructed.  They may be marked at another
+     * position within the buffer by this method.
+     * <p/>
+     * If no mark has been set, then the value of the mark is the
+     * offset passed to the constructor (or 0 if the offset was not
+     * supplied).
+     * <p/>
+     * <p> Note: The <code>readAheadLimit</code> for this class
+     * has no meaning.
+     *
+     * @since JDK1.1
+     */
+    @Override
+    public void mark(int readAheadLimit) {
+        mark = pos;
+    }
+
+    /**
+     * Resets the buffer to the marked position.  The marked position
+     * is 0 unless another position was marked or an offset was specified
+     * in the constructor.
+     */
+    @Override
+    public void reset() {
+        pos = mark;
+    }
+
+    /**
+     * Closing a <tt>ByteArrayInputStream</tt> has no effect. The methods in
+     * this class can be called after the stream has been closed without
+     * generating an <tt>IOException</tt>.
+     * <p/>
+     */
+    @Override
+    public void close() throws IOException {
+    }
+
+    /**
+     * <p>Base64 decodes the source string.  NOTE:  This method doesn't
+     *  consider line breaks</p>
+     * @param source a Base64 encoded string
+     * @return the bytes of the decode process
+     */
+    private byte[] decode(String source) {
+        // Check special case
+        int sLen = source.length();
+        if (sLen == 0) {
+            return new byte[0];
+        }
+
+        int sIx = 0, eIx =
+              sLen - 1;    // Start and end index after trimming.
+
+        // Trim illegal chars from start
+        while (sIx < eIx && IA[source.charAt(sIx) & 0xff] < 0) {
+            sIx++;
+        }
+
+        // Trim illegal chars from end
+        while (eIx > 0 && IA[source.charAt(eIx) & 0xff] < 0)
+            eIx--;
+
+        // get the padding count (=) (0, 1 or 2)
+        int pad = source.charAt(eIx) == '='
+                  ? (source.charAt(eIx - 1) == '=' ? 2 : 1)
+                  : 0;  // Count '=' at end.
+        int cCnt = eIx - sIx
+                   + 1;   // Content count including possible separators
+        int sepCnt =
+              sLen > 76 ? (source.charAt(76) == '\r' ? cCnt / 78 : 0) << 1 : 0;
+
+        int len = ((cCnt - sepCnt) * 6 >> 3)
+                  - pad; // The number of decoded bytes
+        byte[] dArr =
+              new byte[len];       // Preallocate byte[] of exact length
+
+        // Decode all but the last 0 - 2 bytes.
+        int d = 0;
+        for (int eLen = (len / 3) * 3; d < eLen;) {
+            // Assemble three bytes into an int from four "valid" characters.
+            int i = IA[source.charAt(sIx++)] << 18
+                    | IA[source.charAt(sIx++)] << 12
+                    | IA[source.charAt(sIx++)] << 6
+                    | IA[source.charAt(sIx++)];
+
+            // Add the bytes
+            dArr[d++] = (byte) (i >> 16);
+            dArr[d++] = (byte) (i >> 8);
+            dArr[d++] = (byte) i;
+
+        }
+
+        if (d < len) {
+            // Decode last 1-3 bytes (incl '=') into 1-3 bytes
+            int i = 0;
+            for (int j = 0; sIx <= eIx - pad; j++)
+                i |= IA[source.charAt(sIx++)] << (18 - j * 6);
+
+            for (int r = 16; d < len; r -= 8)
+                dArr[d++] = (byte) (i >> r);
+        }
+
+        return dArr;
+    }
+
+    // Test Case: com.sun.faces.io.TestIO
+
+} // END Base64InputStream
diff --git a/com/sun/faces/io/Base64OutputStreamWriter.java b/com/sun/faces/io/Base64OutputStreamWriter.java
new file mode 100644
index 0000000..8885114
--- /dev/null
+++ b/com/sun/faces/io/Base64OutputStreamWriter.java
@@ -0,0 +1,255 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (base64 @ miginfocom . com)
+ * All rights reserved.
+ */
+
+package com.sun.faces.io;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+
+/**
+ * <p>Provides a mechanism to accept and Base64 encode bytes into
+ * chars which will be flushed to the provided writer as the
+ * internal buffer fills.</p> 
+ */
+public class Base64OutputStreamWriter extends OutputStream {
+
+    /** 
+     * The buffer where data is stored. 
+     */
+    private byte[] buf;
+
+    /**
+     * <p>The Base64 encoded bytes as chars; essentially the output
+     * buffer</p>
+     */
+    private char[] chars;
+
+    /** 
+     * The number of valid bytes in the buffer. 
+     */
+    private int count;
+
+    /**
+     * <p>The current position within <code>chars</code>
+     */
+    private int encCount;
+
+    /**
+     * <p>Tracks the total number of characters written.</p>
+     */
+    private int totalCharsWritten;
+
+    /**
+     * The writer we'll flush the bytes to instead of growing
+     * the array.
+     */
+    private Writer writer;
+
+    private static final char[] CA =
+          "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+                .toCharArray();
+
+
+    /**
+     * Creates a new byte array output stream, with a buffer capacity of
+     * the specified size, in bytes.
+     *
+     * @param size   the initial size.
+     * @param writer the writer we'll flush to once
+     *               we reach our capacity
+     *
+     * @throws IllegalArgumentException if size is negative.
+     */
+    public Base64OutputStreamWriter(int size, Writer writer) {
+        if (size < 0) {
+            throw new IllegalArgumentException("Negative initial size: "
+                                               + size);
+        }
+       
+        buf = new byte[size];
+        chars = new char[size];
+        totalCharsWritten = 0;
+        this.writer = writer;
+    }
+
+    /**
+     * Writes the specified byte to this byte array output stream.
+     *
+     * @param b the byte to be written.
+     */
+    public void write(int b) throws IOException {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Writes <code>len</code> bytes from the specified byte array
+     * starting at offset <code>off</code> to this byte array output stream.
+     *
+     * @param b   the data.
+     * @param off the start offset in the data.
+     * @param len the number of bytes to write.
+     */
+    @Override
+    public void write(byte b[], int off, int len) throws IOException {
+        if ((off < 0) || (off > b.length) || (len < 0) ||
+            ((off + len) > b.length) || ((off + len) < 0)) {
+            throw new IndexOutOfBoundsException();
+        } else if (len == 0) {
+            return;
+        }
+
+        if ((count + len) > buf.length) {
+            encodePendingBytes(false);
+        }
+        System.arraycopy(b, off, buf, count, len);
+        count += len;
+    }
+
+    /**
+     * <p>Calls through to {@link #write(byte[], int, int)}/</p> 
+     * @param b the bytes to write
+     * @throws IOException if an error occurs
+     */
+    @Override 
+    public void write(byte b[]) throws IOException {
+        write(b, 0, b.length);
+    }
+
+    /** Closing <tt>Base64OutputStreamWriter</tt> does nothing. */
+    @Override
+    public void close() throws IOException {
+
+    }
+
+    /**
+     * <p>Encodes the remaining bytes and flushes the <code>char[]</code>
+     * to the wrapped <code>Writer</code>.</p>
+     *
+     * @throws IOException if an error occurs writing the remaining bytes
+     */
+    public void finish() throws IOException {
+        encodePendingBytes(true);        
+    }
+
+
+    /**
+     * @return the total number of characters written
+     */
+    public int getTotalCharsWritten() {
+        return totalCharsWritten;
+    }
+
+
+    /**
+     * <p>Base64 encode any bytes found in <code>buf</code> and 
+     * store the result as characters in <code>chars</code>.  This method
+     * will automatically write the contents of <code>chars</code> when
+     * necessary.
+     * @param pad flag to signal we're finalizing the encoding processes.
+     * @throws IOException if an error occurs 
+     */
+    private void encodePendingBytes(boolean pad) throws IOException {
+        int eLen = (count / 3) * 3;         // Length of even 24-bits.
+        for (int s = 0; s < eLen;) {
+            // Copy next three bytes into lower 24 bits of int, paying attension to sign.
+            int i = (buf[s++] & 0xff) << 16
+                    | (buf[s++] & 0xff) << 8
+                    | (buf[s++] & 0xff);
+
+            if ((encCount + 4) > chars.length) {
+                // we're full, so write the encoded chars
+                // and reset the pointer
+                drainCharBuffer();
+            }
+            // Encode the int into four chars               
+            chars[encCount++] = CA[(i >>> 18) & 0x3f];
+            chars[encCount++] = CA[(i >>> 12) & 0x3f];
+            chars[encCount++] = CA[(i >>> 6) & 0x3f];
+            chars[encCount++] = CA[i & 0x3f];
+
+        }
+
+        int left = (count - eLen);
+
+        if (!pad) {
+            // push the non-encoded bytes to the beginning of the byte array
+            // and set count to the end of those bytes
+            System.arraycopy(buf, eLen, buf, 0, left);
+            count = left;
+        } else {
+            drainCharBuffer();
+            // pad if necessary
+            if (left > 0) {
+                // Prepare the int
+                int i = ((buf[eLen] & 0xff) << 10) | (left == 2
+                                                      ? ((buf[count - 1]
+                                                          & 0xff) << 2)
+                                                      : 0);
+
+                // write last four chars
+                writer.write(CA[i >> 12]);
+                writer.write(CA[(i >>> 6) & 0x3f]);
+                writer.write(left == 2 ? CA[i & 0x3f] : '=');
+                writer.write('=');
+            }
+        }
+    }
+
+    /**
+     * <p>Write the contents of <code>chars</code> to the
+     * wrapped <code>Writer</code> and reset <code>encCount</code>
+     * to zero.</p>
+     * @throws IOException if an error occurs
+     */
+    private void drainCharBuffer() throws IOException {
+        writer.write(chars, 0, encCount);
+        totalCharsWritten += encCount;
+        encCount = 0;
+    }
+
+    // Test Case: com.sun.faces.io.TestIO
+
+} // END Base64OutputStreamWriter
diff --git a/com/sun/faces/io/FastStringWriter.java b/com/sun/faces/io/FastStringWriter.java
new file mode 100644
index 0000000..cc37e85
--- /dev/null
+++ b/com/sun/faces/io/FastStringWriter.java
@@ -0,0 +1,158 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.io;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * <p>This is based on {@link java.io.StringWriter} but backed by a
+ * {@link StringBuilder} instead.</p>
+ * <p/>
+ * <p>This class is not thread safe.</p>
+ */
+public class FastStringWriter extends Writer {
+
+    protected StringBuilder builder;
+
+    // ------------------------------------------------------------ Constructors
+
+    /**
+     * <p>Constructs a new <code>FastStringWriter</code> instance
+     * using the default capacity of <code>16</code>.</p>
+     */
+    public FastStringWriter() {
+        builder = new StringBuilder();
+    }
+
+    /**
+     * <p>Constructs a new <code>FastStringWriter</code> instance
+     * using the specified <code>initialCapacity</code>.</p>
+     *
+     * @param initialCapacity specifies the initial capacity of the buffer
+     *
+     * @throws IllegalArgumentException if initialCapacity is less than zero
+     */
+    public FastStringWriter(int initialCapacity) {
+        if (initialCapacity < 0) {
+            throw new IllegalArgumentException();
+        }
+        builder = new StringBuilder(initialCapacity);
+    }
+
+    // ----------------------------------------------------- Methods from Writer
+
+    /**
+     * <p>Write a portion of an array of characters.</p>
+     *
+     * @param cbuf Array of characters
+     * @param off  Offset from which to start writing characters
+     * @param len  Number of characters to write
+     *
+     * @throws IOException
+     */
+    public void write(char cbuf[], int off, int len) throws IOException {
+        if ((off < 0) || (off > cbuf.length) || (len < 0) ||
+            ((off + len) > cbuf.length) || ((off + len) < 0)) {
+            throw new IndexOutOfBoundsException();
+        } else if (len == 0) {
+            return;
+        }
+        builder.append(cbuf, off, len);
+    }
+
+    /**
+     * <p>This is a no-op.</p>
+     *
+     * @throws IOException
+     */
+    public void flush() throws IOException {
+    }
+
+    /**
+     * <p>This is a no-op.</p>
+     *
+     * @throws IOException
+     */
+    public void close() throws IOException {
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+    /**
+     * Write a string.
+     *
+     * @param str String to be written
+     */
+    public void write(String str) {
+        builder.append(str);
+    }
+
+    /**
+     * Write a portion of a string.
+     *
+     * @param str A String
+     * @param off Offset from which to start writing characters
+     * @param len Number of characters to write
+     */
+    public void write(String str, int off, int len) {
+        builder.append(str.substring(off, off + len));
+    }
+
+    /**
+     * Return the <code>StringBuilder</code> itself.
+     *
+     * @return StringBuilder holding the current buffer value.
+     */
+    public StringBuilder getBuffer() {
+        return builder;
+    }
+
+    /** @return the buffer's current value as a string. */
+    public String toString() {
+        return builder.toString();
+    }
+
+    public void reset() {
+        builder.setLength(0);
+    }
+
+}
diff --git a/com/sun/faces/lifecycle/ApplyRequestValuesPhase.java b/com/sun/faces/lifecycle/ApplyRequestValuesPhase.java
new file mode 100644
index 0000000..d01681f
--- /dev/null
+++ b/com/sun/faces/lifecycle/ApplyRequestValuesPhase.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.lifecycle;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * ApplyRequestValuesPhase executes <code>processDecodes</code> on each
+ * component in the tree so that it may update it's current value from the
+ * information included in the current request (parameters, headers, c
+ * cookies and so on.)
+ */
+public class ApplyRequestValuesPhase extends Phase {
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void execute(FacesContext facesContext) throws FacesException {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Entering ApplyRequestValuesPhase");
+        }
+
+        UIComponent component = facesContext.getViewRoot();
+        assert (null != component);
+
+        try {
+            component.processDecodes(facesContext);
+        } catch (RuntimeException re) {
+            String exceptionMessage = re.getMessage();
+            if (null != exceptionMessage) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,exceptionMessage, re);
+                }
+            }
+            throw new FacesException(exceptionMessage, re);
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Exiting ApplyRequestValuesPhase");
+        }
+
+    }
+
+
+    public PhaseId getId() {
+
+        return PhaseId.APPLY_REQUEST_VALUES;
+
+    }
+
+
+    // The testcase for this class is TestApplyRequestValuesPhase.java
+
+} // end of class ApplyRequestValuesPhase
diff --git a/com/sun/faces/lifecycle/ClientWindowFactoryImpl.java b/com/sun/faces/lifecycle/ClientWindowFactoryImpl.java
new file mode 100644
index 0000000..15d9b99
--- /dev/null
+++ b/com/sun/faces/lifecycle/ClientWindowFactoryImpl.java
@@ -0,0 +1,102 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.lifecycle;
+
+import com.sun.faces.config.WebConfiguration;
+import java.util.Map;
+import javax.faces.application.Application;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostConstructApplicationEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.lifecycle.ClientWindow;
+import javax.faces.lifecycle.ClientWindowFactory;
+
+public class ClientWindowFactoryImpl extends ClientWindowFactory {
+    
+    private boolean isClientWindowEnabled = false;
+    private WebConfiguration config = null;
+
+    public ClientWindowFactoryImpl() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getApplication().subscribeToEvent(PostConstructApplicationEvent.class,
+                         Application.class, new PostConstructApplicationListener());
+    }
+    
+    public ClientWindowFactoryImpl(boolean ignored) {
+        isClientWindowEnabled = false;
+    }
+    
+    private class PostConstructApplicationListener implements SystemEventListener {
+
+        @Override
+        public boolean isListenerForSource(Object source) {
+            return source instanceof Application;
+        }
+
+        @Override
+        public void processEvent(SystemEvent event) throws AbortProcessingException {
+            ClientWindowFactoryImpl.this.postConstructApplicationInitialization();
+        }
+        
+    }
+    
+    private void postConstructApplicationInitialization() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        ExternalContext extContext = context.getExternalContext();
+        config = WebConfiguration.getInstance(extContext);
+        String optionValue = config.getOptionValue(WebConfiguration.WebContextInitParameter.ClientWindowMode);
+        
+        isClientWindowEnabled = (null != optionValue) && "url".equals(optionValue);
+    }
+    
+    
+    @Override
+    public ClientWindow getClientWindow(FacesContext context) {
+        if (!isClientWindowEnabled) {
+            return null;
+        }
+        
+        return new ClientWindowImpl();
+    }
+}
diff --git a/com/sun/faces/lifecycle/ClientWindowImpl.java b/com/sun/faces/lifecycle/ClientWindowImpl.java
new file mode 100644
index 0000000..35a263c
--- /dev/null
+++ b/com/sun/faces/lifecycle/ClientWindowImpl.java
@@ -0,0 +1,101 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.lifecycle;
+
+import java.util.Map;
+import javax.faces.component.UINamingContainer;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.lifecycle.ClientWindow;
+import javax.faces.render.ResponseStateManager;
+
+public class ClientWindowImpl extends ClientWindow {
+    
+    String id;
+
+    public ClientWindowImpl() {
+    }
+
+    @Override
+    public Map<String, String> getQueryURLParameters(FacesContext context) {
+        return null;
+    }
+    
+    
+
+    @Override
+    public void decode(FacesContext context) {
+        Map<String, String> requestParamMap = context.getExternalContext().getRequestParameterMap();
+        if (isClientWindowRenderModeEnabled(context)) {
+            id = requestParamMap.get(ResponseStateManager.CLIENT_WINDOW_URL_PARAM);
+        }
+        // The hidden field always takes precedence, if present.
+        if (requestParamMap.containsKey(ResponseStateManager.CLIENT_WINDOW_PARAM)) {
+            id = requestParamMap.get(ResponseStateManager.CLIENT_WINDOW_PARAM);
+        }
+        if (null == id) {
+            id = calculateClientWindow(context);
+        }
+    }
+    
+    private String calculateClientWindow(FacesContext context) {
+        synchronized(context.getExternalContext().getSession(true)) {
+            final String clientWindowCounterKey = "com.sun.faces.lifecycle.ClientWindowCounterKey";
+            ExternalContext extContext = context.getExternalContext();
+            Map<String, Object> sessionAttrs = extContext.getSessionMap();
+            Integer counter = (Integer) sessionAttrs.get(clientWindowCounterKey);
+            if (null == counter) {
+                counter = Integer.valueOf(0);
+            }
+            char sep = UINamingContainer.getSeparatorChar(context);
+            id = extContext.getSessionId(true) + sep +
+                    + counter;
+
+            sessionAttrs.put(clientWindowCounterKey, ++counter);
+        }
+        return id;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+}
diff --git a/com/sun/faces/lifecycle/ELResolverInitPhaseListener.java b/com/sun/faces/lifecycle/ELResolverInitPhaseListener.java
new file mode 100644
index 0000000..21b959a
--- /dev/null
+++ b/com/sun/faces/lifecycle/ELResolverInitPhaseListener.java
@@ -0,0 +1,212 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.lifecycle;
+
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.el.ELUtils;
+
+import com.sun.faces.el.FacesCompositeELResolver;
+
+import javax.faces.FactoryFinder;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.application.Application;
+
+/**
+ * <p>This class is used to register the JSF <code>ELResolver</code>
+ * stack with the JSP container.</p>
+ *
+ * <p>We overload it a bit to set a bit on the ApplicationAssociate
+ * stating we've processed a request to indicate the appliation is fully
+ * initialized.</p>
+ * 
+ * <p>After the first request, this <code>PhaseListener</code> will remove
+ * itself from all registered lifecycle instances registered with the 
+ * application.</p>
+ * @since 1.2
+ */
+public class ELResolverInitPhaseListener implements PhaseListener {
+
+
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+    private boolean postInitCompleted;
+
+    private boolean preInitCompleted;
+
+    // ---------------------------------------------- Methods From PhaseListener
+
+    /**
+     * <p>Handle a notification that the processing for a particular
+     * phase has just been completed.</p>
+     *
+     * <p>When invoked, this phase listener will remove itself
+     * as a registered <code>PhaseListener</code> with all
+     * <code>Lifecycle</code> instances.
+     */
+    public synchronized void afterPhase(PhaseEvent event) {
+
+        if (!postInitCompleted && PhaseId.RENDER_RESPONSE.equals(event.getPhaseId())) {
+            ApplicationAssociate associate =
+                 ApplicationAssociate.getInstance(
+                      event.getFacesContext().getExternalContext());
+            associate.setRequestServiced();
+            LifecycleFactory factory = (LifecycleFactory)
+                  FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+            // remove ourselves from the list of listeners maintained by
+            // the lifecycle instances
+            for(Iterator<String> i = factory.getLifecycleIds(); i.hasNext(); ) {
+                Lifecycle lifecycle = factory.getLifecycle(i.next());
+                lifecycle.removePhaseListener(this);
+            }
+            postInitCompleted = true;
+        }
+
+    }
+
+
+    /**
+     * <p>Handle a notification that the processing for a particular
+     * phase of the request processing lifecycle is about to begin.</p>
+     *
+     * <p>The implementation of this method currently calls through to
+     * {@link #populateFacesELResolverForJsp(javax.faces.context.FacesContext)}.<p/>
+     */
+
+    public synchronized void beforePhase(PhaseEvent event) {
+
+        if (!preInitCompleted) {
+            ApplicationAssociate associate =
+                 ApplicationAssociate.getInstance(
+                      FacesContext.getCurrentInstance().getExternalContext());
+            associate.setRequestServiced();
+            associate.initializeELResolverChains();
+            associate.installProgrammaticallyAddedResolvers();
+            preInitCompleted = true;
+
+        }
+
+    }
+
+
+    /**
+     * <p>Return the identifier of the request processing phase during
+     * which this listener is interested in processing {@link javax.faces.event.PhaseEvent}
+     * events.  Legal values are the singleton instances defined by the
+     * {@link javax.faces.event.PhaseId} class, including <code>PhaseId.ANY_PHASE</code>
+     * to indicate an interest in being notified for all standard phases.</p>
+     *
+     * <p>We return <code>PhaseId.ANY_PHASE</code>.
+     */
+    public PhaseId getPhaseId() {
+
+        return PhaseId.ANY_PHASE;
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * Populate the FacesCompositeELResolver stack registered with JSP
+     * if a request is being processed for the very first time. At the
+     * application initialiazation time, an empty CompositeELResolver is
+     * registered with JSP because ELResolvers can be added until the first
+     * request is serviced.
+     *
+     * @param context - the <code>FacesContext</code> for the current request
+     */
+    protected void populateFacesELResolverForJsp(FacesContext context) {
+
+        ApplicationAssociate appAssociate =
+              ApplicationAssociate.getInstance(context.getExternalContext());
+        populateFacesELResolverForJsp(context.getApplication(), appAssociate);
+
+    }
+
+    public static void populateFacesELResolverForJsp(Application app,
+            ApplicationAssociate appAssociate) {
+        FacesCompositeELResolver compositeELResolverForJsp =
+              appAssociate.getFacesELResolverForJsp();
+        if (compositeELResolverForJsp == null) {
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.log(Level.INFO,
+                           "jsf.lifecycle.initphaselistener.resolvers_not_registered",
+                           new Object[] { appAssociate.getContextName() });
+            }
+            return;
+        }
+
+        ELUtils.buildJSPResolver(compositeELResolverForJsp, appAssociate);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                       "jsf.lifecycle.initphaselistener.resolvers_registered",
+                       new Object[] { appAssociate.getContextName() });
+        }
+
+    }
+
+    public static void removeELResolverInitPhaseListener() {
+        LifecycleFactory factory = (LifecycleFactory)
+                FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+        // remove ourselves from the list of listeners maintained by
+        // the lifecycle instances
+        for (Iterator<String> i = factory.getLifecycleIds(); i.hasNext();) {
+            Lifecycle lifecycle = factory.getLifecycle(i.next());
+            for (PhaseListener cur : lifecycle.getPhaseListeners()) {
+                if (cur instanceof ELResolverInitPhaseListener) {
+                    lifecycle.removePhaseListener(cur);
+                }
+            }
+        }
+
+    }
+
+} // END InitializingPhaseListener
diff --git a/com/sun/faces/lifecycle/HttpMethodRestrictionsPhaseListener.java b/com/sun/faces/lifecycle/HttpMethodRestrictionsPhaseListener.java
new file mode 100644
index 0000000..c9c7778
--- /dev/null
+++ b/com/sun/faces/lifecycle/HttpMethodRestrictionsPhaseListener.java
@@ -0,0 +1,79 @@
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.lifecycle;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.servlet.http.HttpServletRequest;
+
+
+public class HttpMethodRestrictionsPhaseListener implements PhaseListener {
+    
+    public HttpMethodRestrictionsPhaseListener() {
+    }
+    
+    public void afterPhase(PhaseEvent event) {
+    }
+
+    public void beforePhase(PhaseEvent event) {
+        FacesContext context = event.getFacesContext();
+        ExternalContext extContext = context.getExternalContext();
+        
+        Object requestObj = extContext.getRequest();
+        if (requestObj instanceof HttpServletRequest) {
+            String method = ((HttpServletRequest)requestObj).getMethod();
+            if (method.equals("OPTIONS")) {
+                context.responseComplete();
+            }
+        }
+
+    }
+
+    public PhaseId getPhaseId() {
+        return PhaseId.RESTORE_VIEW;
+    }
+    
+    
+    
+}
diff --git a/com/sun/faces/lifecycle/InvokeApplicationPhase.java b/com/sun/faces/lifecycle/InvokeApplicationPhase.java
new file mode 100644
index 0000000..3ed3b75
--- /dev/null
+++ b/com/sun/faces/lifecycle/InvokeApplicationPhase.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// InvokeApplicationPhase.java
+
+package com.sun.faces.lifecycle;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * <B>Lifetime And Scope</B> <P> Same lifetime and scope as
+ * DefaultLifecycleImpl.
+ *
+ */
+
+public class InvokeApplicationPhase extends Phase {
+
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void execute(FacesContext facesContext) throws FacesException {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Entering InvokeApplicationsPhase");
+        }
+
+        UIViewRoot root = facesContext.getViewRoot();
+        assert (null != root);
+
+        try {
+            root.processApplication(facesContext);
+        } catch (RuntimeException re) {
+            String exceptionMessage = re.getMessage();
+            if (null != exceptionMessage) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, exceptionMessage, re);
+                }
+            }
+            throw new FacesException(exceptionMessage, re);
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Exiting InvokeApplicationsPhase");
+        }
+
+    }
+
+
+    public PhaseId getId() {
+
+        return PhaseId.INVOKE_APPLICATION;
+
+    }
+
+
+// The testcase for this class is TestInvokeApplicationPhase.java
+
+} // end of class InvokeApplicationPhase
diff --git a/com/sun/faces/lifecycle/LifecycleFactoryImpl.java b/com/sun/faces/lifecycle/LifecycleFactoryImpl.java
new file mode 100644
index 0000000..f78303a
--- /dev/null
+++ b/com/sun/faces/lifecycle/LifecycleFactoryImpl.java
@@ -0,0 +1,154 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// LifecycleFactoryImpl.java
+
+package com.sun.faces.lifecycle;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import javax.faces.FacesException;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.context.FacesContext;
+
+/**
+ * <B>LifecycleFactoryImpl</B> is the stock implementation of Lifecycle
+ * in the JSF RI. <P>
+ *
+ * @see	javax.faces.lifecycle.LifecycleFactory
+ */
+
+public class LifecycleFactoryImpl extends LifecycleFactory {
+
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+    protected ConcurrentHashMap<String,Lifecycle> lifecycleMap = null;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public LifecycleFactoryImpl() {
+        super();
+        lifecycleMap = new ConcurrentHashMap<String,Lifecycle>();
+
+        // We must have an implementation under this key.
+        lifecycleMap.put(LifecycleFactory.DEFAULT_LIFECYCLE,
+                         new LifecycleImpl(FacesContext.getCurrentInstance()));
+//        lifecycleMap.put(ActionLifecycle.ACTION_LIFECYCLE,
+//                         new ActionLifecycle());
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Created Default Lifecycle");
+        }
+    }
+
+
+    // -------------------------------------------------- Methods from Lifecycle
+
+
+    public void addLifecycle(String lifecycleId, Lifecycle lifecycle) {
+        if (lifecycleId == null) {
+            throw new NullPointerException(
+                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "lifecycleId"));
+        }
+        if (lifecycle == null) {
+            throw new NullPointerException(
+                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "lifecycle"));
+        }
+        if (null != lifecycleMap.get(lifecycleId)) {
+            Object params[] = {lifecycleId};
+            String message =
+                MessageUtils.getExceptionMessageString(MessageUtils.LIFECYCLE_ID_ALREADY_ADDED_ID,
+                                         params);
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.warning(MessageUtils.getExceptionMessageString(
+                        MessageUtils.LIFECYCLE_ID_ALREADY_ADDED_ID,params));
+            }
+            throw new IllegalArgumentException(message);
+        }
+        lifecycleMap.put(lifecycleId, lifecycle);
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("addedLifecycle: " + lifecycleId + " " + lifecycle);
+        }
+    }
+
+
+    public Lifecycle getLifecycle(String lifecycleId) throws FacesException {
+
+        if (null == lifecycleId) {
+            throw new NullPointerException(
+                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "lifecycleId"));
+        }
+
+        if (null == lifecycleMap.get(lifecycleId)) {
+            Object[] params = {lifecycleId};
+            String message =
+                MessageUtils.getExceptionMessageString(
+                    MessageUtils.CANT_CREATE_LIFECYCLE_ERROR_MESSAGE_ID,
+                    params);
+            throw new IllegalArgumentException(message);
+        }
+
+        Lifecycle result = lifecycleMap.get(lifecycleId);
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("getLifecycle: " + lifecycleId + " " + result);
+        }
+        return result;
+    }
+
+
+    public Iterator<String> getLifecycleIds() {
+        return lifecycleMap.keySet().iterator();
+    }
+
+
+
+// The testcase for this class is TestLifecycleFactoryImpl.java 
+
+
+} // end of class LifecycleFactoryImpl
diff --git a/com/sun/faces/lifecycle/LifecycleImpl.java b/com/sun/faces/lifecycle/LifecycleImpl.java
new file mode 100644
index 0000000..12feb4f
--- /dev/null
+++ b/com/sun/faces/lifecycle/LifecycleImpl.java
@@ -0,0 +1,283 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.lifecycle;
+
+import com.sun.faces.util.Util;
+
+import com.sun.faces.config.WebConfiguration;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseListener;
+import javax.faces.lifecycle.Lifecycle;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import javax.faces.application.Application;
+import javax.faces.context.ExternalContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostConstructApplicationEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.lifecycle.ClientWindow;
+import javax.faces.lifecycle.ClientWindowFactory;
+
+/**
+ * <p><b>LifecycleImpl</b> is the stock implementation of the standard
+ * Lifecycle in the JavaServer Faces RI.</p>
+ */
+
+public class LifecycleImpl extends Lifecycle {
+
+
+    // -------------------------------------------------------- Static Variables
+
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+
+    // ------------------------------------------------------ Instance Variables
+
+    // The Phase instance for the render() method
+    private Phase response = new RenderResponsePhase();
+
+    // The set of Phase instances that are executed by the execute() method
+    // in order by the ordinal property of each phase
+    private Phase[] phases = {
+        null, // ANY_PHASE placeholder, not a real Phase
+        new RestoreViewPhase(),
+        new ApplyRequestValuesPhase(),
+        new ProcessValidationsPhase(),
+        new UpdateModelValuesPhase(),
+        new InvokeApplicationPhase(),
+        response
+    };
+
+    // List for registered PhaseListeners
+    private List<PhaseListener> listeners =
+          new CopyOnWriteArrayList<PhaseListener>();
+    private boolean isClientWindowEnabled = false;
+    private WebConfiguration config;
+    
+    public LifecycleImpl() {
+        
+    }
+
+    public LifecycleImpl(FacesContext context) {
+        ExternalContext extContext = context.getExternalContext();
+        config = WebConfiguration.getInstance(extContext);
+        context.getApplication().subscribeToEvent(PostConstructApplicationEvent.class,
+                         Application.class, new PostConstructApplicationListener());
+        
+    }
+    
+    private class PostConstructApplicationListener implements SystemEventListener {
+
+        public boolean isListenerForSource(Object source) {
+            return source instanceof Application;
+        }
+
+        public void processEvent(SystemEvent event) throws AbortProcessingException {
+            LifecycleImpl.this.postConstructApplicationInitialization();
+        }
+        
+    }
+    
+    private void postConstructApplicationInitialization() {
+        String optionValue = config.getOptionValue(WebConfiguration.WebContextInitParameter.ClientWindowMode);
+        isClientWindowEnabled = (null != optionValue) && !optionValue.equals(WebConfiguration.WebContextInitParameter.ClientWindowMode.getDefaultValue());
+    }
+
+    // ------------------------------------------------------- Lifecycle Methods
+
+    @Override
+    public void attachWindow(FacesContext context) {
+        if (!isClientWindowEnabled) {
+            return;
+        }
+        if (context == null) {
+            throw new NullPointerException
+                (MessageUtils.getExceptionMessageString
+                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
+        }
+
+        ExternalContext extContext = context.getExternalContext();
+        ClientWindow myWindow = extContext.getClientWindow();
+        if (null == myWindow) {
+            myWindow = createClientWindow(context);
+            if (null != myWindow) {
+                myWindow.decode(context);
+                extContext.setClientWindow(myWindow);
+            }
+        }
+        
+        
+        // If you need to do the "send down the HTML" trick, be sure to
+        // mark responseComplete true after doing so.  That way
+        // the remaining lifecycle methods will not execute.
+        
+    }
+
+    private ClientWindow createClientWindow(FacesContext context) {
+        ClientWindowFactory clientWindowFactory = null;
+
+        if (Util.isUnitTestModeEnabled()) {
+            clientWindowFactory = new ClientWindowFactoryImpl(false);
+        } else {
+            clientWindowFactory = (ClientWindowFactory)
+                FactoryFinder.getFactory(FactoryFinder.CLIENT_WINDOW_FACTORY);
+        }
+
+        return clientWindowFactory.getClientWindow(context);
+    }
+
+    // Execute the phases up to but not including Render Response
+    public void execute(FacesContext context) throws FacesException {
+
+        if (context == null) {
+            throw new NullPointerException
+                (MessageUtils.getExceptionMessageString
+                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("execute(" + context + ")");
+        }
+
+        for (int i = 1, len = phases.length -1 ; i < len; i++) { // Skip ANY_PHASE placeholder
+
+            if (context.getRenderResponse() ||
+                context.getResponseComplete()) {
+                break;
+            }
+
+            phases[i].doPhase(context, this, listeners.listIterator());
+
+        }
+
+    }
+
+
+    // Execute the Render Response phase
+    public void render(FacesContext context) throws FacesException {
+
+        if (context == null) {
+            throw new NullPointerException
+                (MessageUtils.getExceptionMessageString
+                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("render(" + context + ")");
+        }
+
+        if (!context.getResponseComplete()) {
+            response.doPhase(context, this, listeners.listIterator());
+        }
+
+    }
+
+
+    // Add a new PhaseListener to the set of registered listeners
+    public void addPhaseListener(PhaseListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException
+                  (MessageUtils.getExceptionMessageString
+                        (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "listener"));
+        }
+
+        if (listeners == null) {
+            listeners = new CopyOnWriteArrayList<PhaseListener>();
+        }
+
+        if (listeners.contains(listener)) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.lifecycle.duplicate_phase_listener_detected",
+                           listener.getClass().getName());
+            }
+        } else {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "addPhaseListener({0},{1})",
+                           new Object[]{
+                                 listener.getPhaseId().toString(),
+                                 listener.getClass().getName()});
+            }
+            listeners.add(listener);
+        }
+
+    }
+
+
+    // Return the set of PhaseListeners that have been registered
+    public PhaseListener[] getPhaseListeners() {
+
+        return listeners.toArray(new PhaseListener[listeners.size()]);
+
+    }
+
+
+    // Remove a registered PhaseListener from the set of registered listeners
+    public void removePhaseListener(PhaseListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException
+                  (MessageUtils.getExceptionMessageString
+                        (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "listener"));
+        }
+
+        if (listeners.remove(listener) && LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                       "removePhaseListener({0})",
+                       new Object[]{listener.getClass().getName()});
+        }
+
+    }
+        
+}
diff --git a/com/sun/faces/lifecycle/Phase.java b/com/sun/faces/lifecycle/Phase.java
new file mode 100644
index 0000000..6d7c505
--- /dev/null
+++ b/com/sun/faces/lifecycle/Phase.java
@@ -0,0 +1,267 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.lifecycle;
+
+import java.util.ListIterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.faces.context.Flash;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.lifecycle.Lifecycle;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Timer;
+import com.sun.faces.util.RequestStateManager;
+
+
+/**
+ * <p>A <strong>Phase</strong> is a single step in the processing of a
+ * JavaServer Faces request throughout its entire {@link javax.faces.lifecycle.Lifecycle}.
+ * Each <code>Phase</code> performs the required transitions on the state
+ * information in the {@link FacesContext} associated with this request.
+ */
+
+public abstract class Phase {
+
+    private static final Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * Performs PhaseListener processing and invokes the execute method
+     * of the Phase.
+     * @param context the FacesContext for the current request
+     * @param lifecycle the lifecycle for this request
+     */
+    public void doPhase(FacesContext context,
+                        Lifecycle lifecycle,
+                        ListIterator<PhaseListener> listeners) {
+
+        context.setCurrentPhaseId(getId());
+        PhaseEvent event = null;
+        if (listeners.hasNext()) {
+            event = new PhaseEvent(context, this.getId(), lifecycle);
+        }
+
+        // start timing - include before and after phase processing
+        Timer timer = Timer.getInstance();
+        if (timer != null) {
+            timer.startTiming();
+        }
+
+        try {
+            handleBeforePhase(context, listeners, event);
+            if (!shouldSkip(context)) {
+                execute(context);
+            }
+        } catch (Throwable e) {
+            queueException(context, e);
+        } finally {
+            try {
+                handleAfterPhase(context, listeners, event);
+            } catch (Throwable e) {
+                queueException(context, e);
+            }
+            // stop timing
+            if (timer != null) {
+                timer.stopTiming();
+                timer.logResult(
+                      "Execution time for phase (including any PhaseListeners) -> "
+                      + this.getId().toString());
+            }
+
+            context.getExceptionHandler().handle();
+        }
+
+    }
+
+
+     /**
+     * <p>Perform all state transitions required by the current phase of the
+     * request processing {@link javax.faces.lifecycle.Lifecycle} for a
+     * particular request. </p>
+     *
+     * @param context FacesContext for the current request being processed
+     * @throws FacesException if a processing error occurred while
+     *                        executing this phase
+     */
+    public abstract void execute(FacesContext context) throws FacesException;
+
+
+    /**
+     * @return the current {@link javax.faces.lifecycle.Lifecycle}
+     * <strong>Phase</strong> identifier.
+     */
+    public abstract PhaseId getId();
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+     protected void queueException(FacesContext ctx, Throwable t) {
+
+        queueException(ctx, t, null);
+
+    }
+
+
+    protected void queueException(FacesContext ctx, Throwable t, String booleanKey) {
+
+        ExceptionQueuedEventContext extx = new ExceptionQueuedEventContext(ctx, t);
+        if (booleanKey != null) {
+            extx.getAttributes().put(booleanKey, Boolean.TRUE);
+        }
+        ctx.getApplication().publishEvent(ctx, ExceptionQueuedEvent.class, extx);
+
+    }
+
+
+    /**
+     * Handle <code>afterPhase</code> <code>PhaseListener</code> events.
+     * @param context the FacesContext for the current request
+     * @param listenersIterator a ListIterator for the PhaseListeners that need
+     *  to be invoked
+     * @param event the event to pass to each of the invoked listeners
+     */
+    protected void handleAfterPhase(FacesContext context,
+                                    ListIterator<PhaseListener> listenersIterator,
+                                    PhaseEvent event) {
+
+        try {
+            Flash flash = context.getExternalContext().getFlash();
+            flash.doPostPhaseActions(context);
+        } catch (UnsupportedOperationException uoe) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                 LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
+            }    
+        }
+        while (listenersIterator.hasPrevious()) {
+            PhaseListener listener = listenersIterator.previous();
+            if (this.getId().equals(listener.getPhaseId()) ||
+                PhaseId.ANY_PHASE.equals(listener.getPhaseId())) {
+                try {
+                    listener.afterPhase(event);
+                } catch (Exception e) {
+                    queueException(context,
+                                   e,
+                                   ExceptionQueuedEventContext.IN_AFTER_PHASE_KEY);
+                    return;
+                }
+            }
+        }
+
+    }
+
+
+     /**
+     * Handle <code>beforePhase</code> <code>PhaseListener</code> events.
+     * @param context the FacesContext for the current request
+     * @param listenersIterator a ListIterator for the PhaseListeners that need
+     *  to be invoked
+     * @param event the event to pass to each of the invoked listeners
+     */
+     protected void handleBeforePhase(FacesContext context,
+                                      ListIterator<PhaseListener> listenersIterator,
+                                      PhaseEvent event) {
+
+         try {
+            Flash flash = context.getExternalContext().getFlash();
+            flash.doPrePhaseActions(context);
+         } catch (UnsupportedOperationException uoe) {
+             if (LOGGER.isLoggable(Level.FINE)) {
+                 LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
+             }
+         }
+         RequestStateManager.clearAttributesForPhase(context,
+                                                     context.getCurrentPhaseId());
+         while (listenersIterator.hasNext()) {
+             PhaseListener listener = listenersIterator.next();
+             if (this.getId().equals(listener.getPhaseId()) ||
+                 PhaseId.ANY_PHASE.equals(listener.getPhaseId())) {
+                 try {
+                     listener.beforePhase(event);
+                 } catch (Exception e) {
+                     queueException(context,
+                                    e,
+                                    ExceptionQueuedEventContext.IN_BEFORE_PHASE_KEY);
+                     // move the iterator pointer back one
+                     if (listenersIterator.hasPrevious()) {
+                         listenersIterator.previous();
+                     }
+                     return;
+                 }
+             }
+         }
+
+     }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * @param context the FacesContext for the current request
+     * @return <code>true</code> if <code>FacesContext.responseComplete()</code>
+     *  or <code>FacesContext.renderResponse()</code> and the phase is not
+     *  RENDER_RESPONSE, otherwise return <code>false</code>
+     */
+    private boolean shouldSkip(FacesContext context) {
+
+        if (context.getResponseComplete()) {
+            return (true);
+        } else if (context.getRenderResponse() &&
+                   !PhaseId.RENDER_RESPONSE.equals(this.getId())) {
+            return (true);
+        } else {
+            return (false);
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/lifecycle/ProcessValidationsPhase.java b/com/sun/faces/lifecycle/ProcessValidationsPhase.java
new file mode 100644
index 0000000..88935f6
--- /dev/null
+++ b/com/sun/faces/lifecycle/ProcessValidationsPhase.java
@@ -0,0 +1,102 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.lifecycle;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * ProcessValidationsPhase executes <code>processValidators</code> on each
+ * component in the tree.
+ */
+public class ProcessValidationsPhase extends Phase {
+
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void execute(FacesContext facesContext) throws FacesException {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Entering ProcessValidationsPhase");
+        }
+        UIComponent component = facesContext.getViewRoot();
+        assert (null != component);
+
+        try {
+            component.processValidators(facesContext);
+        } catch (RuntimeException re) {
+            String exceptionMessage = re.getMessage();
+            if (null != exceptionMessage) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, exceptionMessage, re);
+                }
+            }
+            throw new FacesException(exceptionMessage, re);
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Exiting ProcessValidationsPhase");
+        }
+
+    }
+
+
+    public PhaseId getId() {
+
+        return PhaseId.PROCESS_VALIDATIONS;
+
+    }
+
+
+// The testcase for this class is TestProcessValidationsPhase.java
+
+} // end of class ProcessValidationsPhase
diff --git a/com/sun/faces/lifecycle/RenderResponsePhase.java b/com/sun/faces/lifecycle/RenderResponsePhase.java
new file mode 100644
index 0000000..65dd287
--- /dev/null
+++ b/com/sun/faces/lifecycle/RenderResponsePhase.java
@@ -0,0 +1,147 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// RenderResponsePhase.java
+
+package com.sun.faces.lifecycle;
+
+
+import javax.faces.FacesException;
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.application.ViewHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.DebugUtil;
+
+import javax.faces.event.PreRenderViewEvent;
+
+
+/**
+ * <B>Lifetime And Scope</B> <P> Same lifetime and scope as
+ * DefaultLifecycleImpl.
+ *
+ */
+
+public class RenderResponsePhase extends Phase {
+
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void execute(FacesContext facesContext) throws FacesException {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Entering RenderResponsePhase");
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("About to render view " +
+                 facesContext.getViewRoot().getViewId());
+        }
+        // For requests intended to produce a partial response, we need prohibit
+        // writing any content outside of the view itself (f:view).
+        facesContext.getPartialViewContext();
+        
+        try {
+
+            ViewHandler vh = facesContext.getApplication().getViewHandler();
+
+            ViewDeclarationLanguage vdl =
+                  vh.getViewDeclarationLanguage(facesContext,
+                                                    facesContext.getViewRoot().getViewId());
+            if (vdl != null) {
+                vdl.buildView(facesContext, facesContext.getViewRoot());
+            }
+
+            boolean viewIdsUnchanged;
+            do {
+                String beforePublishViewId = facesContext.getViewRoot().getViewId();
+                // the before render event on the view root is a special case to keep door open for navigation
+                // this must be called *after* PDL.buildView() and before VH.renderView()
+                facesContext.getApplication().publishEvent(facesContext,
+                                                           PreRenderViewEvent.class,
+                                                           facesContext.getViewRoot());
+                String afterPublishViewId = facesContext.getViewRoot().getViewId();
+                viewIdsUnchanged = beforePublishViewId == null && afterPublishViewId == null ||
+                        (beforePublishViewId != null && afterPublishViewId != null) &&
+                        beforePublishViewId.equals(afterPublishViewId);
+                if (facesContext.getResponseComplete()) {
+                    return;
+                }
+            } while (!viewIdsUnchanged);
+            
+            //render the view
+            vh.renderView(facesContext, facesContext.getViewRoot());
+
+        } catch (IOException e) {
+            throw new FacesException(e.getMessage(), e);
+        }
+
+        if (LOGGER.isLoggable(Level.FINEST)) {
+            LOGGER.log(Level.FINEST, "+=+=+=+=+=+= View structure printout for " + facesContext.getViewRoot().getViewId());
+            DebugUtil.printTree(facesContext.getViewRoot(), LOGGER, Level.FINEST);
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Exiting RenderResponsePhase");
+        }
+
+    }
+
+
+    public PhaseId getId() {
+
+        return PhaseId.RENDER_RESPONSE;
+
+    }
+
+
+// The testcase for this class is TestRenderResponsePhase.java
+
+} // end of class RenderResponsePhase
diff --git a/com/sun/faces/lifecycle/RestoreViewPhase.java b/com/sun/faces/lifecycle/RestoreViewPhase.java
new file mode 100644
index 0000000..f1d48c1
--- /dev/null
+++ b/com/sun/faces/lifecycle/RestoreViewPhase.java
@@ -0,0 +1,535 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// RestoreViewPhase.java
+
+package com.sun.faces.lifecycle;
+
+import java.util.EnumSet;
+import java.util.ListIterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.Set;
+
+import javax.faces.FacesException;
+import javax.faces.application.ViewExpiredException;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.faces.lifecycle.Lifecycle;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Map;
+import javax.faces.application.ProtectedViewException;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.context.ExternalContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostRestoreStateEvent;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.flow.FlowHandler;
+import javax.faces.render.ResponseStateManager;
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.view.ViewMetadata;
+
+/**
+ * <B>Lifetime And Scope</B> <P> Same lifetime and scope as
+ * DefaultLifecycleImpl.
+ *
+ */
+
+public class RestoreViewPhase extends Phase {
+
+    private static final String WEBAPP_ERROR_PAGE_MARKER =
+            "javax.servlet.error.message";
+
+    private static final Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+    private WebConfiguration webConfig;
+
+    private static String SKIP_ITERATION_HINT =
+        "javax.faces.visit.SKIP_ITERATION";
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public PhaseId getId() {
+
+        return PhaseId.RESTORE_VIEW;
+
+    }
+
+
+    public void doPhase(FacesContext context,
+                        Lifecycle lifecycle,
+                        ListIterator<PhaseListener> listeners) {
+
+        Util.getViewHandler(context).initView(context);
+        super.doPhase(context, lifecycle, listeners);
+
+        // Notify View Root after phase listener (if registered)
+        notifyAfter(context, lifecycle);
+    }
+
+    /**
+     * PRECONDITION: the necessary factories have been installed in the
+     * ServletContext attr set. <P>
+     * <p/>
+     * POSTCONDITION: The facesContext has been initialized with a tree.
+     */
+
+    public void execute(FacesContext facesContext) throws FacesException {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Entering RestoreViewPhase");
+        }
+        if (null == facesContext) {
+            throw new FacesException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_CONTEXT_ERROR_MESSAGE_ID));
+        }
+        
+        // If an app had explicitely set the tree in the context, use that;
+        //
+        UIViewRoot viewRoot = facesContext.getViewRoot();
+        if (viewRoot != null) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.fine("Found a pre created view in FacesContext");
+            }
+            facesContext.getViewRoot().setLocale(
+                 facesContext.getExternalContext().getRequestLocale());
+
+            // do per-component actions
+            deliverPostRestoreStateEvent(facesContext);
+
+            if (!facesContext.isPostback()) {
+                facesContext.renderResponse();
+            }
+            return;
+        }
+        FacesException thrownException = null;
+
+        try {
+
+            // Reconstitute or create the request tree
+            Map requestMap = facesContext.getExternalContext().getRequestMap();
+            String viewId = (String)
+              requestMap.get("javax.servlet.include.path_info");
+            if (viewId == null) {
+                viewId = facesContext.getExternalContext().getRequestPathInfo();
+            }
+
+            // It could be that this request was mapped using
+            // a prefix mapping in which case there would be no
+            // path_info.  Query the servlet path.
+            if (viewId == null) {
+                viewId = (String)
+                  requestMap.get("javax.servlet.include.servlet_path");
+            }
+
+            if (viewId == null) {
+                viewId = facesContext.getExternalContext().getRequestServletPath();
+            }
+
+            if (viewId == null) {
+                throw new FacesException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_REQUEST_VIEW_ERROR_MESSAGE_ID));
+            }
+
+            ViewHandler viewHandler = Util.getViewHandler(facesContext);
+
+            boolean isPostBack = (facesContext.isPostback() && !isErrorPage(facesContext));
+            if (isPostBack) {
+                facesContext.setProcessingEvents(false);
+                // try to restore the view
+                viewRoot = viewHandler.restoreView(facesContext, viewId);
+                if (viewRoot == null) {
+                    if (is11CompatEnabled(facesContext)) {
+                        // 1.1 -> create a new view and flag that the response should
+                        //        be immediately rendered
+                        if (LOGGER.isLoggable(Level.FINE)) {
+                            LOGGER.fine("Postback: recreating a view for " + viewId);
+                        }
+                        viewRoot = viewHandler.createView(facesContext, viewId);
+                        facesContext.renderResponse();
+
+                    } else {
+                        Object[] params = {viewId};
+                        throw new ViewExpiredException(
+                                MessageUtils.getExceptionMessageString(
+                                MessageUtils.RESTORE_VIEW_ERROR_MESSAGE_ID,
+                                params),
+                                viewId);
+                    }
+                }
+
+                facesContext.setViewRoot(viewRoot);
+                facesContext.setProcessingEvents(true);
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("Postback: restored view for " + viewId);
+                }
+            } else {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("New request: creating a view for " + viewId);
+                }
+                
+                String derivedViewId = viewHandler.deriveLogicalViewId(facesContext, viewId);
+                ViewDeclarationLanguage vdl = viewHandler.getViewDeclarationLanguage(facesContext, derivedViewId);
+                
+                maybeTakeProtectedViewAction(facesContext, viewHandler, vdl, viewId);
+                    
+                ViewMetadata metadata  = null;
+                if (vdl != null) {
+                    // If we have one, get the ViewMetadata...
+                    metadata = vdl.getViewMetadata(facesContext, viewId);
+                    
+                    if (metadata != null) { // perhaps it's not supported
+                        // and use it to create the ViewRoot.  This will have, at most
+                        // the UIViewRoot and its metadata facet.
+                        viewRoot = metadata.createMetadataView(facesContext);
+                        
+                        // Only skip to render response if there is no metadata
+                        if (!ViewMetadata.hasMetadata(viewRoot)) {
+                            facesContext.renderResponse();
+                        }
+                    }
+                } 
+                if (null == vdl || null == metadata) {
+                    facesContext.renderResponse();
+                }
+
+                if (null == viewRoot) {
+                    viewRoot = (Util.getViewHandler(facesContext)).
+                        createView(facesContext, viewId);
+                }
+                facesContext.setViewRoot(viewRoot);
+                assert (null != viewRoot);
+            }
+        } catch (Throwable fe) {
+            if (fe instanceof FacesException) {
+              thrownException = (FacesException) fe;
+            } else {
+              thrownException = new FacesException(fe);
+            }
+        } finally {
+            if (null == thrownException) {
+                FlowHandler flowHandler = facesContext.getApplication().getFlowHandler();
+                if (null != flowHandler) {
+                    flowHandler.clientWindowTransition(facesContext);
+                }
+                
+                deliverPostRestoreStateEvent(facesContext);
+            } else {
+                throw thrownException;
+            }
+        }
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Exiting RestoreViewPhase");
+        }
+
+    }
+    
+    private void maybeTakeProtectedViewAction(FacesContext context, 
+            ViewHandler viewHandler, 
+            ViewDeclarationLanguage vdl, String viewId) {
+        // http://java.net/jira/browse/JAVASERVERFACES-2204
+        // PENDING: this code is optimized to be fast to write.
+        // It must be optimized to be fast to run.
+        
+        // See git clone ssh://edburns@git.java.net/grizzly~git 1_9_36 for
+        // how grizzly does this.
+        
+        Set<String> urlPatterns = viewHandler.getProtectedViewsUnmodifiable();
+        // Implement section 12.1 of the Servlet spec.
+        boolean currentViewIsProtected = isProtectedView(viewId, urlPatterns);       
+        if (currentViewIsProtected) {
+            ExternalContext extContext = context.getExternalContext();
+            Map<String, String> headers = extContext.getRequestHeaderMap();
+            
+            //Check the token
+            String rkId = viewHandler.calculateRenderKitId(context);
+            ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, rkId);
+            String incomingSecretKeyValue = extContext.getRequestParameterMap().
+                get(ResponseStateManager.NON_POSTBACK_VIEW_TOKEN_PARAM);
+            String correctSecretKeyValue = rsm.getCryptographicallyStrongTokenFromSession(context);
+            if (null == incomingSecretKeyValue || 
+                !correctSecretKeyValue.equals(incomingSecretKeyValue)) {
+                throw new ProtectedViewException();
+            }
+            String sep = "/";
+            // Check the referer header
+            if (headers.containsKey("Referer")) {
+                String referer = headers.get("Referer");
+                boolean refererIsInProtectedSet = isProtectedView(referer, urlPatterns);
+                if (!refererIsInProtectedSet) {
+                    boolean refererOriginatesInThisWebapp = false;
+                    try {
+                        refererOriginatesInThisWebapp = originatesInWebapp(context, referer, vdl);
+                    } catch(URISyntaxException ue) {
+                        throw new ProtectedViewException(ue);    
+                    }
+                    if (!refererOriginatesInThisWebapp) {
+                        String message = FacesLogger.LIFECYCLE.interpolateMessage(context, 
+                            "jsf.lifecycle.invalid.referer", new String [] { referer, viewId });
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE, message);
+                        }
+                        throw new ProtectedViewException(message);                
+                    }
+                }
+            }
+            // Check the origin header
+            if (headers.containsKey("Origin")) {
+                String origin = headers.get("Origin");
+                boolean originIsInProtectedSet = isProtectedView(origin, urlPatterns);
+                if (!originIsInProtectedSet) {
+                    boolean originOriginatesInThisWebapp = false;
+                    try {
+                        originOriginatesInThisWebapp = originatesInWebapp(context, origin, vdl);
+                    } catch(URISyntaxException ue) {
+                        throw new ProtectedViewException(ue);    
+                    }
+                    if (!originOriginatesInThisWebapp) {
+                        String message = FacesLogger.LIFECYCLE.interpolateMessage(context, 
+                            "jsf.lifecycle.invalid.origin", new String [] { origin, viewId });
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE, message);
+                        }
+                        throw new ProtectedViewException(message);                
+                    }
+                }
+            }
+        }
+    }
+    
+    private boolean isProtectedView(String viewToCheck, Set<String>urlPatterns) {
+        boolean isProtected = false;
+        for (String cur : urlPatterns) {
+            if (cur.equals(viewToCheck)) {
+                isProtected = true;
+                break;
+            }
+        }       
+        return isProtected;
+    }
+    
+    private boolean originatesInWebapp(FacesContext context, String view, ViewDeclarationLanguage vdl) throws URISyntaxException {
+        boolean doesOriginate = false;
+        ExternalContext extContext = context.getExternalContext();
+        String sep = "/";
+        URI uri = null;
+        String path = null;
+        boolean isAbsoluteURI = view.matches("^[a-z]+://.*");
+        if (!isAbsoluteURI) {
+            URI absoluteURI = null;
+            URI relativeURI = null;
+            String base = extContext.getRequestScheme() + ":" +
+                sep + sep + extContext.getRequestServerName() +
+                ":" + extContext.getRequestServerPort();
+                absoluteURI = new URI(base);
+                relativeURI = new URI(view);
+                uri = absoluteURI.resolve(relativeURI);  
+        }
+        boolean hostsMatch = false,
+            portsMatch = false,
+            contextPathsMatch = false,
+            originatesInThisWebapp = false;
+            
+        if (null == uri) {
+            uri = new URI(view);
+        }
+        if (null == uri.getHost()) {
+            hostsMatch = false;
+        } else {
+            hostsMatch = uri.getHost().equals(extContext.getRequestServerName());    
+        }
+        if (-1 == uri.getPort()) {
+            portsMatch = false;
+        } else {
+            portsMatch = uri.getPort() == extContext.getRequestServerPort();
+        }
+        path = uri.getPath();
+        contextPathsMatch = path.contains(extContext.getApplicationContextPath());
+            
+        doesOriginate = hostsMatch && portsMatch && contextPathsMatch;
+        
+        if (!doesOriginate) {
+            // Last chance view originates in this web app.
+            int idx = path.lastIndexOf(sep);
+            if (-1 != idx) {
+                path = path.substring(idx);
+            } 
+            if (null == path || !vdl.viewExists(context, path)) {
+                doesOriginate = false;
+            }    else {
+                doesOriginate = true;
+            }
+        }
+        return doesOriginate;      
+    }
+    
+    private void deliverPostRestoreStateEvent(FacesContext facesContext) throws FacesException {
+        UIViewRoot root = facesContext.getViewRoot();
+        final PostRestoreStateEvent postRestoreStateEvent = new PostRestoreStateEvent(root);
+        try {
+            // PENDING: This is included for those component frameworks that don't utilize the
+            // new VisitHint(s) yet - but still wish to know that they should be non-iterating
+            // during state saving.  It should be removed at some point.
+            facesContext.getAttributes().put(SKIP_ITERATION_HINT, true);
+            facesContext.getApplication().publishEvent(facesContext, PostRestoreStateEvent.class, root);
+
+            Set<VisitHint> hints = EnumSet.of(VisitHint.SKIP_ITERATION);
+            VisitContext visitContext = VisitContext.createVisitContext(facesContext, null, hints);
+            root.visitTree(visitContext, new VisitCallback() {
+
+                        public VisitResult visit(VisitContext context, UIComponent target) {
+                            postRestoreStateEvent.setComponent(target);
+                            target.processEvent(postRestoreStateEvent);
+                            //noinspection ReturnInsideFinallyBlock
+                            return VisitResult.ACCEPT;
+                        }
+                    });
+        } catch (AbortProcessingException e) {
+            facesContext.getApplication().publishEvent(facesContext,
+                    ExceptionQueuedEvent.class,
+                    new ExceptionQueuedEventContext(facesContext,
+                    e,
+                    null,
+                    PhaseId.RESTORE_VIEW));
+        } finally {
+            // PENDING: This is included for those component frameworks that don't utilize the
+            // new VisitHint(s) yet - but still wish to know that they should be non-iterating
+            // during state saving.  It should be removed at some point.
+            facesContext.getAttributes().remove(SKIP_ITERATION_HINT);
+        }
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+    /**
+     * Notify afterPhase listener that is registered on the View Root.
+     * @param context the FacesContext for the current request
+     * @param lifecycle lifecycle instance
+     */
+    private void notifyAfter(FacesContext context, Lifecycle lifecycle) {
+        UIViewRoot viewRoot = context.getViewRoot();
+        if (null == viewRoot) {
+            return;
+        }
+        MethodExpression afterPhase = viewRoot.getAfterPhaseListener();
+        if (null != afterPhase) {
+            try {
+                PhaseEvent event = new PhaseEvent(context, PhaseId.RESTORE_VIEW, lifecycle);
+                afterPhase.invoke(context.getELContext(), new Object[]{event});
+            }
+            catch (Exception e) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "severe.component.unable_to_process_expression",
+                               new Object[] { afterPhase.getExpressionString(),
+                               ("afterPhase")});
+                }
+                return;
+            }
+        }
+    }
+
+
+    /**
+     * The Servlet specification states that if an error occurs
+     * in the application and there is a matching error-page declaration,
+     * the that original request the cause the error is forwarded
+     * to the error page.
+     *
+     * If the error occurred during a post-back and a matching
+     * error-page definition was found, then an attempt to restore
+     * the error view would be made as the javax.faces.ViewState
+     * marker would still be in the request parameters.
+     *
+     * Use this method to determine if the current request is
+     * an error page to avoid the above condition.
+     *
+     * @param context the FacesContext for the current request
+     * @return <code>true</code> if <code>WEBAPP_ERROR_PAGE_MARKER</code>
+     *  is found in the request, otherwise return <code>false</code>
+     */
+    private static boolean isErrorPage(FacesContext context) {
+
+        return (context.getExternalContext().
+                    getRequestMap().get(WEBAPP_ERROR_PAGE_MARKER) != null);
+
+    }
+
+
+    private WebConfiguration getWebConfig(FacesContext context) {
+
+        if (webConfig == null) {
+            webConfig = WebConfiguration.getInstance(context.getExternalContext());
+        }
+        return webConfig;
+
+    }
+
+    private boolean is11CompatEnabled(FacesContext context) {
+
+        return (getWebConfig(context).isOptionEnabled(
+              BooleanWebContextInitParameter.EnableRestoreView11Compatibility));
+        
+    }
+
+    // The testcase for this class is TestRestoreViewPhase.java
+
+} // end of class RestoreViewPhase
diff --git a/com/sun/faces/lifecycle/UpdateModelValuesPhase.java b/com/sun/faces/lifecycle/UpdateModelValuesPhase.java
new file mode 100644
index 0000000..d9157cd
--- /dev/null
+++ b/com/sun/faces/lifecycle/UpdateModelValuesPhase.java
@@ -0,0 +1,109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.lifecycle;
+
+import com.sun.faces.util.FacesLogger;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
+
+
+/**
+ * UpdateModelValuesPhase executes <code>processUpdates</code> on each
+ * component in the tree so that it may have a chance to update its model value.
+ */
+public class UpdateModelValuesPhase extends Phase {
+
+
+    // Log instance for this class
+    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void execute(FacesContext facesContext) {
+
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Entering UpdateModelValuesPhase");
+        }
+        UIComponent component = facesContext.getViewRoot();
+        assert (null != component);
+        String exceptionMessage = null;
+
+        try {
+            component.processUpdates(facesContext);
+        } catch (IllegalStateException e) {
+            exceptionMessage = e.getMessage();
+        } catch (FacesException fe) {
+            exceptionMessage = fe.getMessage();
+        }
+
+        // Just log the exception.  Any exception occurring from
+        // processUpdates should have been stored as a message
+        // on FacesContext.
+        if (exceptionMessage != null) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.warning(exceptionMessage);
+            }
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.fine("Exiting UpdateModelValuesPhase");
+        }
+
+    }
+
+
+    public PhaseId getId() {
+
+        return PhaseId.UPDATE_MODEL_VALUES;
+
+    }
+
+
+// The testcase for this class is TestUpdateModelValuesPhase.java
+
+} // end of class UpdateModelValuesPhase
diff --git a/com/sun/faces/mgbean/BeanBuilder.java b/com/sun/faces/mgbean/BeanBuilder.java
new file mode 100644
index 0000000..3d5345c
--- /dev/null
+++ b/com/sun/faces/mgbean/BeanBuilder.java
@@ -0,0 +1,591 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.application.ApplicationAssociate;
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.spi.InjectionProvider;
+import com.sun.faces.spi.InjectionProviderException;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>Abstract builder for creating and populating JSF managed beans.</p>
+ */
+public abstract class BeanBuilder {
+
+    private static Logger LOGGER = FacesLogger.MANAGEDBEAN.getLogger();
+
+    private List<String> messages;
+    private List<String> references;
+    private boolean isInjectible;
+    private boolean baked;
+
+    private Class<?> beanClass;
+    protected final ManagedBeanInfo beanInfo;
+
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**     
+     * @param beanInfo the managed bean metadata
+     */
+    public BeanBuilder(ManagedBeanInfo beanInfo) {
+
+        this.beanInfo = beanInfo;
+        
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public Object build(InjectionProvider injectionProvider,
+                        FacesContext context) {
+
+        Object bean = newBeanInstance();
+        injectResources(bean, injectionProvider);
+        buildBean(bean, context);
+        invokePostConstruct(bean, injectionProvider);
+        return bean;
+
+    }
+
+
+    public void destroy(InjectionProvider injectionProvider,
+                          Object bean) {
+
+        if (isInjectible) {
+            try {
+                injectionProvider.invokePreDestroy(bean);
+            } catch (InjectionProviderException ipe) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, ipe.getMessage(), ipe);
+                }
+            }
+        }
+
+    }
+
+
+    public boolean hasMessages() {
+
+        return (messages != null && !messages.isEmpty());
+
+    }
+
+
+    public List<String> getMessages() {
+
+        return messages;
+
+    }
+
+    public String getScope() {
+
+        return beanInfo.getScope();
+
+    }
+
+
+    public boolean isBaked() {
+
+        return baked;
+
+    }
+
+
+    public Map<String,String> getDescriptions() {
+
+        return beanInfo.getDescriptions();
+        
+    }
+
+
+    public Class<?> getBeanClass() {
+
+        return loadBeanClass();
+
+    }
+
+    public ManagedBeanInfo getManagedBeanInfo() {
+
+        return beanInfo;
+        
+    }
+
+    
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected abstract void buildBean(Object bean, FacesContext context);
+
+
+
+    protected void baked() {
+        baked = true;
+    }
+
+    protected Object newBeanInstance() {
+
+        try {
+            return loadBeanClass().newInstance();
+        } catch (Exception e) {
+            String message = MessageUtils.getExceptionMessageString(
+                 MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID,
+                 beanInfo.getClassName());
+            throw new ManagedBeanCreationException(message, e);
+        }
+
+    }
+    
+
+
+    protected void injectResources(Object bean,
+                                   InjectionProvider injectionProvider) {
+
+        if (isInjectible) {
+            try {
+                injectionProvider.inject(bean);
+            } catch (InjectionProviderException ipe) {
+                String message =
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.MANAGED_BEAN_INJECTION_ERROR_ID,
+                          beanInfo.getName());
+                throw new ManagedBeanCreationException(message, ipe);
+            }
+        }
+
+    }
+
+
+    protected void invokePostConstruct(Object bean,
+                                       InjectionProvider injectionProvider) {
+
+        if (isInjectible) {
+            try {
+                injectionProvider.invokePostConstruct(bean);
+            } catch (InjectionProviderException ipe) {
+                String message =
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.MANAGED_BEAN_INJECTION_ERROR_ID,
+                          beanInfo.getName());
+                throw new ManagedBeanCreationException(message, ipe);
+            }
+        }
+
+    }
+
+
+    protected Class loadClass(String className)  {
+        Class valueType = String.class;
+        if (null != className && 0 < className.length()) {
+            if (className.equals(Boolean.TYPE.getName())) {
+                valueType = Boolean.TYPE;
+            } else if (className.equals(Byte.TYPE.getName())) {
+                valueType = Byte.TYPE;
+            } else if (className.equals(Double.TYPE.getName())) {
+                valueType = Double.TYPE;
+            } else if (className.equals(Float.TYPE.getName())) {
+                valueType = Float.TYPE;
+            } else if (className.equals(Integer.TYPE.getName())) {
+                valueType = Integer.TYPE;
+            } else if (className.equals(Character.TYPE.getName())) {
+                valueType = Character.TYPE;
+            } else if (className.equals(Short.TYPE.getName())) {
+                valueType = Short.TYPE;
+            } else if (className.equals(Long.TYPE.getName())) {
+                valueType = Long.TYPE;
+            } else {
+                try {
+                    valueType = Util.loadClass(className, this);
+                } catch (ClassNotFoundException cnfe) {
+                    String message =
+                         MessageUtils.getExceptionMessageString(
+                              MessageUtils.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR_ID,
+                              className,
+                              beanInfo.getName());
+                    throw new ManagedBeanPreProcessingException(message);
+                } catch (NoClassDefFoundError ncdfe) {
+                    String message =
+                         MessageUtils.getExceptionMessageString(
+                              MessageUtils.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR_ID,
+                              className,
+                              beanInfo.getName(),
+                              ncdfe.getMessage());
+                    throw new ManagedBeanPreProcessingException(message);
+                }
+            }
+        }
+        return valueType;
+    }
+
+
+    protected Map<Expression,Expression> getBakedMap(String keyClass,
+                                                     String valueClass,
+                                                     Map<String,String> mapEntries) {
+
+        if (mapEntries == null || mapEntries.isEmpty()) {
+            return new LinkedHashMap<Expression,Expression>(4, 1.0f);
+        }
+        Class<?> keyClazz = loadClass(keyClass);
+        Class<?> valueClazz = loadClass(valueClass);
+        Map<Expression,Expression> target = new
+             LinkedHashMap<Expression,Expression>(mapEntries.size(), 1.0f);
+        for (Map.Entry<String,String> m : mapEntries.entrySet()) {
+            String sk = m.getKey();
+            String sv = m.getValue();
+
+            target.put(new Expression(sk, keyClazz),
+                           (!sv.equals(ManagedBeanInfo.NULL_VALUE))
+                           ? new Expression(sv, valueClazz)
+                           : null);
+        }
+
+        return target;
+        
+    }
+
+
+    protected List<Expression> getBakedList(String valueClass,
+                                            List<String> entries) {
+
+        Class<?> valueClazz = loadClass(valueClass);
+
+        //noinspection StringBufferWithoutInitialCapacity
+        List<Expression> target = new ArrayList<Expression>(entries.size());
+        for (String item : entries) {
+            target.add((!ManagedBeanInfo.NULL_VALUE.equals(item))
+                       ? new Expression(item, valueClazz)
+                       : null);
+        }
+
+        return target;
+
+    }
+
+
+    protected void initMap(Map<Expression,Expression> source,
+                           Map target,
+                           FacesContext context) {
+
+        for (Map.Entry<Expression,Expression> entry
+               : source.entrySet()) {
+            Expression k = entry.getKey();
+            Expression v = entry.getValue();
+            //noinspection unchecked
+            target.put(k.evaluate(context.getELContext()),
+                  (v != null) ? v.evaluate(context.getELContext()) : null);
+        }
+        
+    }
+
+
+    protected void initList(List<Expression> source,
+                            List target,
+                            FacesContext context) {
+
+        for (int i = 0, size = source.size(); i < size; i++) {
+            Expression value = source.get(i);
+            //noinspection unchecked
+            target.add((value != null)
+                       ? value.evaluate(context.getELContext())
+                       : null);
+        }
+
+    }
+
+
+    // ------------------------------------------------- Package Private Methods
+
+
+    void queueMessage(String message) {
+        if (messages == null) {
+            messages = new ArrayList<String>(4);
+        }
+        messages.add(message);
+    }
+
+
+    void queueMessages(List<String> messages) {
+        if (this.messages == null) {
+            this.messages = messages;
+        } else {
+            this.messages.addAll(messages);
+        }
+    }
+
+    /**
+     * Performs sanity checking of the <code>ManagedBeanInfo</code>
+     * instance provided when the <code>BeanBuilder</code> instance
+     * was created.  If any issues are found, queue messages which will
+     * be logged when first baked and exposed as exceptions at runtime
+     * per the spec.
+     */
+    void bake() {
+
+        loadBeanClass();
+        validateScope();
+
+    }
+
+
+    List<String> getReferences() {
+
+        return references;
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private Class<?> loadBeanClass() {
+        if (beanClass == null) {
+           String className = beanInfo.getClassName();
+            Class<?> clazz = loadClass(className);
+            ApplicationAssociate associate =
+                  ApplicationAssociate.getCurrentInstance();
+
+            if (!associate.isDevModeEnabled()) {
+                beanClass = clazz;
+            }
+
+            // validate the bean class is public and has a public
+            // no-arg ctor
+            int classModifiers = clazz.getModifiers();
+            if (!Modifier.isPublic(classModifiers)) {
+                String message =
+                      MessageUtils.getExceptionMessageString(
+                            MessageUtils.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR_ID,
+                            className,
+                            beanInfo.getName());
+                queueMessage(message);
+            }
+            if (Modifier.isInterface(classModifiers)
+                || Modifier.isAbstract(classModifiers)) {
+                String message =
+                      MessageUtils.getExceptionMessageString(
+                            MessageUtils.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR_ID,
+                            className,
+                            beanInfo.getName());
+                queueMessage(message);
+            }
+
+            try {
+                Constructor ctor =
+                      clazz.getConstructor(RIConstants.EMPTY_CLASS_ARGS);
+                if (!Modifier.isPublic(ctor.getModifiers())) {
+                    String message =
+                          MessageUtils.getExceptionMessageString(
+                                MessageUtils.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR_ID,
+                                className,
+                                beanInfo.getName());
+                    queueMessage(message);
+                }
+            } catch (NoSuchMethodException nsme) {
+                String message =
+                      MessageUtils.getExceptionMessageString(
+                            MessageUtils.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR_ID,
+                            className,
+                            beanInfo.getName());
+                queueMessage(message);
+            }
+
+            if (!hasMessages()) {
+                // class is ok, scan for annotations
+                this.isInjectible = Util.classHasAnnotations(clazz);
+            }
+            return clazz;
+        }
+        return beanClass;
+    }
+
+
+    private void validateScope() {
+
+        String scope = beanInfo.getScope();
+        if (!ELUtils.isScopeValid(scope)) {
+            // custom scope - make sure it's valid
+            if (!SharedUtils.isExpression(scope)) {
+                String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_INVALID_SCOPE_ERROR_ID,
+                         beanInfo.getName());
+                throw new ManagedBeanPreProcessingException(message);
+            }
+        }
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * This is a holder class for ValueExpressions.  It will try to perform
+     * static lifespan checking of the expression per the specification.  If
+     * it is unable to determine the scope of the expression, validation will
+     * be deferred to runtime.
+     */
+    protected class Expression {
+
+        private String expressionString;
+        private Class<?> expectedType;
+        private ValueExpression ve;
+        private boolean validateLifespanRuntime = false;
+        private String[] segment = new String[1];
+
+        // -------------------------------------------------------- Constructors
+
+
+        public Expression(String expressionString,
+                          Class<?> expectedType) {
+
+            this.expressionString = expressionString;
+            this.expectedType = expectedType;
+
+            if (SharedUtils.isExpression(this.expressionString)) {
+                List<String> expressions = ELUtils.getExpressionsFromString(this.expressionString);
+                if (!expressions.isEmpty()) {
+                    for (String expression : expressions) {
+                        ELUtils.getScope(expression, segment);
+                        if (segment[0] != null) {
+                            if (references == null) {
+                                references = new ArrayList<String>(4);
+                            }
+                            if (!references.contains(segment[0])) {
+                                references.add(segment[0]);
+                            }
+                        }
+                        segment[0] = null;
+                    }
+                }
+                if (!SharedUtils.isExpression(beanInfo.getScope())) {
+                    ELUtils.Scope expressionScope = ELUtils
+                          .getNarrowestScopeFromExpression(this.expressionString);
+                    if (expressionScope != null) {
+                        // expression scope isn't null which means we have enough
+                        // information to statically validate.
+                        validateLifespan(expressionScope,
+                                         validateLifespanRuntime);
+                    } else {
+                        validateLifespanRuntime = true;
+                    }
+                }
+            } else {
+                if (this.expressionString != null) {
+                    this.expressionString =
+                          "#{\""
+                          + this.expressionString.replaceAll("[\\\\\"]",
+                                                             "\\\\$0")
+                          + "\"}";
+                }
+            }
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        public Object evaluate(ELContext context) {
+            if (this.expressionString == null) {
+                return null;
+            }
+            if (validateLifespanRuntime) {
+                ELUtils.Scope expScope =
+                     ELUtils.getScope(this.expressionString, segment);
+                validateLifespan(expScope, true);
+            }
+            if (ve == null) {
+                ve = ((expectedType.isPrimitive())
+                      ? ELUtils.createValueExpression(expressionString, expectedType)
+                      : ELUtils.createValueExpression(expressionString, Object.class));
+            }
+            if (expectedType.isPrimitive()) {
+                return ve.getValue(context);
+            } else {
+                Object tmpval = ve.getValue(context);
+                return ((tmpval != null) ? ELUtils.coerce(tmpval, expectedType) : null);
+            }
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        private void validateLifespan(ELUtils.Scope expressionScope, boolean runtime) {
+            if (ELUtils.isScopeValid(beanInfo.getScope())) {
+                if (!ELUtils.hasValidLifespan(expressionScope,
+                                              ELUtils.getScope(beanInfo.getScope()))) {
+                    String message = MessageUtils.getExceptionMessageString(
+                          MessageUtils.INVALID_SCOPE_LIFESPAN_ERROR_MESSAGE_ID,
+                          this.expressionString,
+                          expressionScope,
+                          beanInfo.getName(),
+                          beanInfo.getScope());
+                    if (runtime) {
+                        throw new ManagedBeanCreationException(message);
+                    } else {
+                        queueMessage(message);
+                    }
+                }
+            }
+
+        }
+
+    } // END Expression
+}
diff --git a/com/sun/faces/mgbean/BeanManager.java b/com/sun/faces/mgbean/BeanManager.java
new file mode 100644
index 0000000..7f2692c
--- /dev/null
+++ b/com/sun/faces/mgbean/BeanManager.java
@@ -0,0 +1,789 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Locale;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.context.FacesContext;
+import javax.faces.event.*;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.FunctionMapper;
+import javax.el.VariableMapper;
+
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.spi.InjectionProvider;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+
+/**
+ * <p>Main interface for dealing with JSF managed beans</p>
+ */
+public class BeanManager implements SystemEventListener {
+
+    private static final Logger LOGGER = FacesLogger.MANAGEDBEAN.getLogger();
+
+    @SuppressWarnings({"CollectionWithoutInitialCapacity"})
+    private Map<String,BeanBuilder> managedBeans =
+         new HashMap<String,BeanBuilder>();
+    private InjectionProvider injectionProvider;
+    private boolean configPreprocessed;
+    private boolean lazyBeanValidation;
+    private List<String> eagerBeans = new ArrayList<String>(4);
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public BeanManager(InjectionProvider injectionProvider,
+                       boolean lazyBeanValidation) {
+
+        this.injectionProvider = injectionProvider;
+        this.lazyBeanValidation = lazyBeanValidation;
+
+    }
+
+
+    public BeanManager(InjectionProvider injectionProvider,
+                       Map<String,BeanBuilder> managedBeans,
+                       boolean lazyBeanValidation) {
+
+        this(injectionProvider, lazyBeanValidation);
+        this.managedBeans = managedBeans;
+
+    }
+
+
+    // ---------------------------------------- Methods from SystemEventListener
+
+
+    /**
+     * <p>
+     * Invoke PreDestroy methods on any managed beans within the provided scope.
+     * </p>
+     *
+     * @param event the {@link ScopeContext}
+     *
+     * @throws AbortProcessingException
+     */
+    public void processEvent(SystemEvent event)
+    throws AbortProcessingException {
+
+        ScopeContext scopeContext = ((PreDestroyCustomScopeEvent) event).getContext();
+        Map<String,Object> scope = scopeContext.getScope();
+        for (Map.Entry<String,Object> entry : scope.entrySet()) {
+            String name = entry.getKey();
+            if (isManaged(name)) {
+                BeanBuilder builder = getBuilder(name);
+                builder.destroy(injectionProvider, entry.getValue());
+            }
+        }
+
+
+    }
+
+
+    /**
+     * @see SystemEventListener#isListenerForSource(Object)
+     */
+    public boolean isListenerForSource(Object source) {
+
+        return (source instanceof ScopeContext);
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public void register(ManagedBeanInfo beanInfo) {
+        BeanBuilder builder;
+        if (beanInfo.hasListEntry()) {
+            if (beanInfo.hasMapEntry() || beanInfo.hasManagedProperties()) {
+                String message =
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.MANAGED_BEAN_AS_LIST_CONFIG_ERROR_ID,
+                          beanInfo.getName());
+                builder = new ErrorBean(beanInfo, message);
+                //addBean(beanInfo.getName(), new ErrorBean(beanInfo, message));
+            } else {
+                builder = new ManagedListBeanBuilder(beanInfo);
+                //addBean(beanInfo.getName(),
+                //        new ManagedListBeanBuilder(beanInfo));
+            }
+        } else if (beanInfo.hasMapEntry()) {
+            if (beanInfo.hasManagedProperties()) {
+                String message =
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.MANAGED_BEAN_AS_MAP_CONFIG_ERROR_ID,
+                          beanInfo.getName());
+                builder = new ErrorBean(beanInfo, message);
+                //addBean(beanInfo.getName(), new ErrorBean(beanInfo, message));
+            } else {
+                builder = new ManagedMapBeanBuilder(beanInfo);
+                //addBean(beanInfo.getName(), new ManagedMapBeanBuilder(beanInfo));
+            }
+        } else {
+            builder = new ManagedBeanBuilder(beanInfo);
+            //addBean(beanInfo.getName(), new ManagedBeanBuilder(beanInfo));
+        }
+
+        addBean(beanInfo.getName(), builder);
+        if (beanInfo.isEager()) {
+            eagerBeans.add(beanInfo.getName());
+        }
+
+    }
+
+    
+    public List<String> getEagerBeanNames() {
+
+        return eagerBeans;
+
+    }
+
+
+    public Map<String,BeanBuilder> getRegisteredBeans() {
+
+        return managedBeans;
+
+    }
+
+
+     public boolean isManaged(String name) {
+
+        return (managedBeans != null && managedBeans.containsKey(name));
+
+    }
+
+
+    public BeanBuilder getBuilder(String name) {
+
+        if (managedBeans != null) {
+            return managedBeans.get(name);
+        }
+        return null;
+
+    }
+
+
+    /**
+     * This should only be called during application init
+     */
+    public void preProcessesBeans() {
+
+        if (!configPreprocessed && !lazyBeanValidation) {
+            configPreprocessed = true;
+            for (Map.Entry<String, BeanBuilder> entry : managedBeans
+                 .entrySet()) {
+                preProcessBean(entry.getKey(), entry.getValue());
+            }
+        }
+
+    }
+
+
+    public boolean isBeanInScope(String name, BeanBuilder builder, FacesContext context) {
+        return ScopeManager.isInScope(name, builder.getScope(), context);
+
+    }
+
+
+    public Object getBeanFromScope(String name, BeanBuilder builder, FacesContext context) {
+        return ScopeManager.getFromScope(name, builder.getScope(), context);
+    }
+
+    public Object getBeanFromScope(String name, FacesContext context) {
+
+        String scope = this.getBuilder(name).getScope();
+        return ScopeManager.getFromScope(name, scope, context);
+
+    }
+
+
+
+
+    // ------------------------------------------------------- Lifecycle Methods
+
+    public Object create(String name, FacesContext facesContext) {
+        return create(name, managedBeans.get(name), facesContext);
+    }
+    
+    public Object create(String name, BeanBuilder builder, FacesContext facesContext) {
+        if (builder != null) {
+            if (lazyBeanValidation && !builder.isBaked()) {
+                preProcessBean(name, builder);
+            }
+            if (builder.hasMessages()) {
+                throw new ManagedBeanCreationException(buildMessage(name,
+                                                                    builder.getMessages(),
+                                                                    true));
+            } else {
+                return createAndPush(name, builder, facesContext);
+            }
+        }
+
+        return null;
+
+    }
+
+
+
+    public void destroy(String beanName, Object bean) {
+
+        BeanBuilder builder = managedBeans.get(beanName);
+        if (builder != null) {
+            builder.destroy(injectionProvider, bean);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void addBean(String beanName, BeanBuilder builder) {
+
+        if (configPreprocessed) {
+            preProcessBean(beanName, builder);
+        }
+        if (LOGGER.isLoggable(Level.WARNING) && managedBeans.containsKey(beanName)) {
+            LOGGER.log(Level.WARNING,
+                       "jsf.managed.bean.duplicate",
+                       new Object[] { beanName,
+                                      managedBeans.get(beanName).beanInfo.getClassName(),
+                                      builder.beanInfo.getClassName() });
+        }
+        managedBeans.put(beanName, builder);
+
+    }
+
+
+    private void validateReferences(BeanBuilder builder,
+                                    List<String> references,
+                                    List<String> messages) {
+
+        List<String> refs = builder.getReferences();
+        if (refs != null) {
+            for (String ref : refs) {
+                if (isManaged(ref)) {
+                    if (references.contains(ref)) {
+                        StringBuilder sb = new StringBuilder(64);
+                        String[] ra =
+                             references.toArray(new String[references.size()]);
+                        for (String reference : ra) {
+                            sb.append(reference);
+                            sb.append(" -> ");
+                        }
+                        sb.append(ref);
+
+                        String message = MessageUtils
+                             .getExceptionMessageString(MessageUtils.CYCLIC_REFERENCE_ERROR_ID,
+                                                        ra[0],
+                                                        sb.toString());
+                        messages.add(message);
+                    } else {
+                        BeanBuilder b = getBuilder(ref);
+                        // If the bean has no references, then it's not
+                        // a target for cyclic detection.  
+                        if (b.getReferences() != null) {
+                            references.add(ref);
+                            validateReferences(b, references, messages);
+                            references.remove(ref);
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    private synchronized void preProcessBean(String beanName,
+                                             BeanBuilder builder) {
+        if (!builder.isBaked()) {
+            try {
+                builder.bake();
+
+                // preProcess any dependent beans
+                List<String> propRefs = builder.getReferences();
+                if (propRefs != null) {
+                    for (String reference : propRefs) {
+                        if (isManaged(reference)) {
+                            BeanBuilder b = getBuilder(reference);
+                            preProcessBean(reference, b);
+                        }
+                    }
+                }
+
+                //noinspection CollectionWithoutInitialCapacity
+                List<String> refs = new ArrayList<String>();
+                refs.add(beanName);
+                //noinspection CollectionWithoutInitialCapacity
+                ArrayList<String> messages = new ArrayList<String>();
+                validateReferences(builder, refs, messages);
+                if (!messages.isEmpty()) {
+                    builder.queueMessages(messages);
+                }
+
+                if (builder.hasMessages()) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   buildMessage(beanName,
+                                                builder.getMessages(),
+                                                false));
+                    }
+                }
+            } catch (ManagedBeanPreProcessingException mbpe) {
+                if (ManagedBeanPreProcessingException.Type.CHECKED
+                     .equals(mbpe.getType())) {
+                    builder.queueMessage(mbpe.getMessage());
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   buildMessage(beanName,
+                                                builder.getMessages(),
+                                                false));
+                    }
+                } else {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR_ID,
+                         beanName);
+                    throw new ManagedBeanPreProcessingException(message, mbpe);
+                }
+            }
+        }
+
+    }
+
+    private Object createAndPush(String name,
+                                 BeanBuilder builder,
+                                 FacesContext facesContext) {
+
+        Object bean = builder.build(injectionProvider, facesContext);
+        ScopeManager.pushToScope(name, bean, builder.getScope(), facesContext);
+        return bean;
+
+    }
+
+
+    private String buildMessage(String name, List<String> messages,
+                                boolean runtime) {
+
+        StringBuilder sb = new StringBuilder(128);
+        if (runtime) {
+        sb.append(MessageUtils.getExceptionMessageString(
+             MessageUtils.MANAGED_BEAN_PROBLEMS_ERROR_ID, name));
+        } else {
+            sb.append(MessageUtils.getExceptionMessageString(
+                 MessageUtils.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR_ID, name));
+        }
+        for (String message : messages) {
+            sb.append("\n     - ").append(message);
+        }
+        return sb.toString();
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class ScopeManager {
+
+        private static final ConcurrentMap<String,ScopeHandler> handlerMap =
+             new ConcurrentHashMap<String,ScopeHandler>(5);
+        
+        static {
+            handlerMap.put(ELUtils.Scope.REQUEST.toString(), new RequestScopeHandler());
+            handlerMap.put(ELUtils.Scope.VIEW.toString(), new ViewScopeHandler());
+            handlerMap.put(ELUtils.Scope.SESSION.toString(), new SessionScopeHandler());
+            handlerMap.put(ELUtils.Scope.APPLICATION.toString(), new ApplicationScopeHandler());
+            handlerMap.put(ELUtils.Scope.NONE.toString(), new NoneScopeHandler());
+        }
+
+
+        static void pushToScope(String name,
+                                Object bean,
+                                String customScope,
+                                FacesContext context) {
+
+            ScopeHandler handler = getScopeHandler(customScope, context);
+            handler.handle(name, bean, context);
+
+        }
+
+
+        static boolean isInScope(String name,
+                                 String customScope,
+                                 FacesContext context) {
+
+            ScopeHandler handler = getScopeHandler(customScope, context);
+            return handler.isInScope(name, context);
+
+        }
+
+        static Object getFromScope(String name,
+                                   String customScope,
+                                   FacesContext context) {
+
+            ScopeHandler handler = getScopeHandler(customScope, context);
+            return handler.getFromScope(name, context);
+
+        }
+
+        private static ScopeHandler getScopeHandler(String customScope,
+                                                    FacesContext context) {
+
+            ScopeHandler handler = handlerMap.get(customScope);
+            if (handler == null) {
+                ExpressionFactory factory = context.getApplication().getExpressionFactory();
+                ValueExpression ve =
+                    factory.createValueExpression(context.getELContext(),
+                                                  customScope,
+                                                  Map.class);
+                handler = new CustomScopeHandler(ve);
+                handlerMap.putIfAbsent(customScope, handler);
+            }
+            return handler;
+
+        }
+
+        private interface ScopeHandler {
+
+            void handle(String name, Object bean, FacesContext context);
+
+            boolean isInScope(String name, FacesContext context);
+
+            Object getFromScope(String name, FacesContext context);
+
+        }
+
+        private static class NoneScopeHandler implements ScopeHandler {
+
+            public void handle(String name, Object bean, FacesContext context) {
+                // no-op
+            }
+
+            public boolean isInScope(String name, FacesContext context) {
+                return false;
+            }
+
+            public Object getFromScope(String name, FacesContext context) {
+                return null;
+            }
+        }
+
+        private static class RequestScopeHandler implements ScopeHandler {
+
+            public void handle(String name, Object bean, FacesContext context) {
+
+                context.getExternalContext().getRequestMap().put(name, bean);
+
+            }
+
+            public boolean isInScope(String name, FacesContext context) {
+
+                return context.getExternalContext().getRequestMap().containsKey(name);
+
+            }
+
+            public Object getFromScope(String name, FacesContext context) {
+
+                return context.getExternalContext().getRequestMap().get(name);
+
+            }
+
+        } // END RequestScopeHandler
+
+
+        private static class ViewScopeHandler implements ScopeHandler {
+
+            public void handle(String name, Object bean, FacesContext context) {
+
+                Map<String, Object> viewMap = context.getViewRoot().getViewMap();
+                
+                if (viewMap != null) {
+                    viewMap.put(name, bean);
+                }
+            }
+
+            public boolean isInScope(String name, FacesContext context) {
+
+                Map<String,Object> viewMap = context.getViewRoot().getViewMap(false);
+                return ((viewMap != null) && viewMap.containsKey(name));
+
+            }
+
+            public Object getFromScope(String name, FacesContext context) {
+
+                Map<String,Object> viewMap = context.getViewRoot().getViewMap(false);
+                return ((viewMap != null) ? viewMap.get(name) : null);
+
+            }
+
+        } // END ViewScopeHandler
+        
+
+        private static class SessionScopeHandler implements ScopeHandler  {
+
+            public void handle(String name, Object bean, FacesContext context) {
+
+                synchronized (context.getExternalContext().getSession(true)) {
+                    context.getExternalContext().getSessionMap().put(name, bean);
+                }
+
+            }
+
+            public boolean isInScope(String name, FacesContext context) {
+
+                return context.getExternalContext().getSessionMap().containsKey(name);
+
+            }
+
+            public Object getFromScope(String name, FacesContext context) {
+
+                return context.getExternalContext().getSessionMap().get(name);
+
+            }
+
+        } // END SessionScopeHandler
+
+
+        private static class ApplicationScopeHandler implements ScopeHandler {
+
+            public void handle(String name, Object bean, FacesContext context) {
+
+                synchronized (context.getExternalContext().getContext()) {
+                    context.getExternalContext().getApplicationMap().put(name, bean);
+                }
+
+            }
+
+            public boolean isInScope(String name, FacesContext context) {
+
+                return context.getExternalContext().getApplicationMap().containsKey(name);
+
+            }
+
+
+            public Object getFromScope(String name, FacesContext context) {
+
+                return context.getExternalContext().getApplicationMap().get(name);
+
+            }
+
+        } // END ApplicationScopeHandler
+
+
+        private static class CustomScopeHandler implements ScopeHandler {
+
+            private ValueExpression scope;
+
+            CustomScopeHandler(ValueExpression scope) {
+                this.scope = scope;
+            }
+
+            public void handle(String name, Object bean, FacesContext context) {
+
+                Map scopeMap = (Map) scope.getValue(getELContext(context));
+                
+                // IMPLEMENTATION PENDING.  I've added this to the Frame doc:
+                
+                /**
+                 * The runtime must must allow the value of this element to be 
+                 * an EL ValueExpression. If so, and the expression evaluates to
+                 * null, an informative error message including the expression 
+                 * string and the name of the bean must be logged. If the
+                 * expression evaluates to a Map, that Map is used as the
+                 * scope into which the bean will be stored. If storing the 
+                 * bean into the Map causes an Exception, the exception is 
+                 * allowed to flow up to the ExceptionHandler. If the 
+                 * ValueExpression does not evaluate to a Map, a
+                 * FacesException must be thrown with a message that includes 
+                 * the expression string, the toString() of the value, and 
+                 * the type of the value.
+                 * 
+                 */
+                
+                if (scopeMap != null) {
+                    synchronized (this) {
+                        //noinspection unchecked
+                        scopeMap.put(name, bean);
+                    }
+                } else {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.managed.bean.custom.scope.eval.null",
+                                   new Object[] { scope.getExpressionString() });
+                    }
+                }
+            }
+
+            public boolean isInScope(String name, FacesContext context) {
+
+                Map scopeMap = (Map) scope.getValue(getELContext(context));
+                if (scopeMap != null) {
+                    return scopeMap.containsKey(name);
+                } else {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.managed.bean.custom.scope.eval.null.existence",
+                                   new Object[] { scope.getExpressionString() });
+                    }
+                    // since the scope evaluated to null, return true to prevent
+                    // the managed bean from being needlessly created
+                    return true;
+                }
+            }
+
+            public Object getFromScope(String name, FacesContext context) {
+
+                Map scopeMap = (Map) scope.getValue(getELContext(context));
+                if (scopeMap != null) {
+                    return scopeMap.get(name);
+                } else {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.managed.bean.custom.scope.eval.null.existence",
+                                   new Object[] { scope.getExpressionString() });
+                    }
+                    return null;
+                }
+            }
+
+
+            // ------------------------------------------------- Private Methods
+
+
+            private ELContext getELContext(FacesContext ctx) {
+
+                return new CustomScopeELContext(ctx.getELContext());
+
+            }
+
+
+            // -------------------------------------------------- Nested Classes
+
+
+            /**
+             * We have to use a different ELContext when evaluating the expressions
+             * for the custom scopes as we don't want to cause the resolved
+             * flag on the original ELContext to be changed.  
+             */
+            private static final class CustomScopeELContext extends ELContext {
+
+                private ELContext delegate;
+
+                // ------------------------------------------------ Constructors
+
+
+                public CustomScopeELContext(ELContext delegate) {
+
+                    this.delegate = delegate;
+
+                }
+
+                // -------------------------------------- Methods from ELContext
+
+
+                @Override
+                public void putContext(Class aClass, Object o) {
+
+                    delegate.putContext(aClass, o);
+
+                }
+
+                @Override
+                public Object getContext(Class aClass) {
+
+                    return delegate.getContext(aClass);
+
+                }
+
+                @Override
+                public Locale getLocale() {
+
+                    return delegate.getLocale();
+
+                }
+
+                @Override
+                public void setLocale(Locale locale) {
+
+                    delegate.setLocale(locale);
+
+                }
+
+                @Override
+                public ELResolver getELResolver() {
+
+                    return delegate.getELResolver();
+
+                }
+
+                @Override
+                public FunctionMapper getFunctionMapper() {
+
+                    return delegate.getFunctionMapper();
+
+                }
+
+                @Override
+                public VariableMapper getVariableMapper() {
+
+                    return delegate.getVariableMapper();
+
+                }
+            }
+
+        } // END CustomScopeHandler
+    }
+
+}
diff --git a/com/sun/faces/mgbean/ErrorBean.java b/com/sun/faces/mgbean/ErrorBean.java
new file mode 100644
index 0000000..d8b5ec5
--- /dev/null
+++ b/com/sun/faces/mgbean/ErrorBean.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import javax.faces.context.FacesContext;
+import java.util.List;
+
+/**
+ * <p>This doesn't really do anything, aside from being a place holder
+ * if the managed bean is configured incorrectly.</p>
+ */
+public class ErrorBean extends BeanBuilder {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ErrorBean(ManagedBeanInfo beanInfo, String message) {
+        super(beanInfo);
+        if (message == null || message.length() == 0) {
+            throw new IllegalArgumentException();
+        }
+        queueMessage(message);
+    }
+
+    
+    public ErrorBean(ManagedBeanInfo beanInfo, List<String> messages) {
+        super(beanInfo);
+        if (messages == null || messages.isEmpty()) {
+            throw new IllegalArgumentException();
+        }
+        queueMessages(messages);
+    }
+
+
+    // ------------------------------------------------ Methods from BeanBuilder
+
+    @Override
+    synchronized void bake() {
+        // no-op
+    }
+
+
+    protected void buildBean(Object bean, FacesContext context) {
+        // no-op
+    }
+}
diff --git a/com/sun/faces/mgbean/ManagedBeanBuilder.java b/com/sun/faces/mgbean/ManagedBeanBuilder.java
new file mode 100644
index 0000000..d5fa77d
--- /dev/null
+++ b/com/sun/faces/mgbean/ManagedBeanBuilder.java
@@ -0,0 +1,630 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.util.MessageUtils;
+
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Array;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>This builder creates standard managed beans, i.e. beans
+ * that aren't List or Map instances.</p>
+ */
+public class ManagedBeanBuilder extends BeanBuilder {
+
+    private List<BakedProperty> properties;
+
+    private enum PropertyType {
+        MAP,
+        LIST,
+        BEAN
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ManagedBeanBuilder(ManagedBeanInfo beanInfo) {
+
+        super(beanInfo);
+
+    }
+
+
+    // ------------------------------------------------ Methods from BeanBuilder
+
+
+    @Override
+    void bake() {
+        if (!isBaked()) {
+            super.bake();
+            if (beanInfo.hasManagedProperties()) {
+                properties =
+                     new ArrayList<BakedProperty>(beanInfo.getManagedProperties().size());
+                String propertyName = null;
+                try {
+                    for (ManagedBeanInfo.ManagedProperty property
+                         : beanInfo.getManagedProperties()) {
+                        propertyName = property.getPropertyName();
+                        switch (getPropertyType(property)) {
+                            case MAP:
+                                bakeMapProperty(property);
+                                break;
+                            case LIST:
+                                bakeListProperty(property);
+                                break;
+                            default:
+                                bakeBeanProperty(property);
+                        }
+                    }
+                } catch (Exception e) {
+                    if (e instanceof ManagedBeanPreProcessingException) {
+                        throw (ManagedBeanPreProcessingException) e;
+                    } else {
+                        String message = MessageUtils
+                             .getExceptionMessageString(MessageUtils.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR_ID,
+                                                        propertyName);
+                        throw new ManagedBeanPreProcessingException(message,
+                                                                    e,
+                                                                    ManagedBeanPreProcessingException.Type.UNCHECKED);
+                    }
+                }
+            }
+            baked();
+            Introspector.flushFromCaches(getBeanClass());
+        }
+    }
+
+
+    protected void buildBean(Object bean, FacesContext context) {
+
+        if (properties != null) {
+            for (BakedProperty property : properties) {
+                property.set(bean, context);
+            }
+        }
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private PropertyType getPropertyType(ManagedBeanInfo.ManagedProperty property) {
+
+        if (property.hasListEntry()) {
+            if (property.hasMapEntry() || property.hasPropertyValue()) {
+                String message =
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR_ID,
+                          property.getPropertyName(),
+                          beanInfo.getName());
+                throw new ManagedBeanPreProcessingException(message);
+            }
+
+            return PropertyType.LIST;
+        }
+        if (property.hasMapEntry()) {
+
+            if (property.hasPropertyValue()) {
+                String message =
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR_ID,
+                          property.getPropertyName(),
+                          beanInfo.getName());
+                throw new ManagedBeanPreProcessingException(message);
+            }
+            return PropertyType.MAP;
+        }
+
+        return PropertyType.BEAN;
+
+    }
+
+
+    private void bakeMapProperty(ManagedBeanInfo.ManagedProperty property) {
+
+        ManagedBeanInfo.MapEntry rawEntry = property.getMapEntry();
+        Map<Expression,Expression> mapEntries =
+             getBakedMap(rawEntry.getKeyClass(),
+                         rawEntry.getValueClass(),
+                         rawEntry.getEntries());
+
+        // Find property setter and validate.
+        PropertyDescriptor pd =
+             getPropertyDescriptor(property.getPropertyName());
+        if (pd == null) {
+            String message = MessageUtils.getExceptionMessageString(
+                 MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
+                 property.getPropertyName(),
+                 beanInfo.getName());
+            queueMessage(message);
+        } else {
+            if (pd.getWriteMethod() != null) {
+                Class<?>[] params = pd.getWriteMethod().getParameterTypes();
+                if (!Map.class.isAssignableFrom(params[0])) {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR_ID,
+                         property.getPropertyName(),
+                         beanInfo.getName());
+                    queueMessage(message);
+                }
+            } else {
+                // no write method, let's hope there is a read method that returns
+                // a non-null map
+                if (pd.getReadMethod() == null) {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
+                         property.getPropertyName(),
+                         beanInfo.getName());
+                    queueMessage(message);
+                } else {
+                    Class<?> returnType = pd.getReadMethod().getReturnType();
+                    if (!Map.class.isAssignableFrom(returnType)) {
+                        String message = MessageUtils.getExceptionMessageString(
+                             MessageUtils.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR_ID,
+                             property.getPropertyName(),
+                             beanInfo.getName());
+                        queueMessage(message);
+                    }
+                }
+            }
+        }
+
+        if (!this.hasMessages()) {
+            // all clear - create the BakedMapProperty and add it to the properties
+            // map
+            BakedMapProperty baked = new BakedMapProperty(mapEntries, pd);
+            properties.add(baked);
+        }
+        
+    }
+
+
+    private void bakeListProperty(ManagedBeanInfo.ManagedProperty property) {
+
+        ManagedBeanInfo.ListEntry rawEntry = property.getListEntry();
+        List<Expression> listEntry = getBakedList(rawEntry.getValueClass(),
+                                                  rawEntry.getValues());
+
+        PropertyDescriptor pd =
+             getPropertyDescriptor(property.getPropertyName());
+        if (pd == null) {
+            String message = MessageUtils.getExceptionMessageString(
+                 MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
+                 property.getPropertyName(),
+                 beanInfo.getName());
+            queueMessage(message);
+        } else {
+            if (pd.getReadMethod() == null) {
+                // a null read method means we create a new List or
+                // array and pass it to the bean.  Validate that the
+                // setter takes either an array or List.
+                if (pd.getWriteMethod() == null) {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
+                         property.getPropertyName(),
+                         beanInfo.getName());
+                    queueMessage(message);
+                } else {
+                    Class<?>[] params = pd.getWriteMethod().getParameterTypes();
+                    if (params.length != 1) {
+                        String message = MessageUtils.getExceptionMessageString(
+                             MessageUtils.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR_ID,
+                             property.getPropertyName(),
+                             beanInfo.getName());
+                        queueMessage(message);
+                    } else {
+                        if (!params[0].isArray() && !List.class.isAssignableFrom(params[0])) {
+                            String message = MessageUtils
+                                     .getExceptionMessageString(
+                                          MessageUtils.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR_ID,
+                                          property.getPropertyName(),
+                                          beanInfo.getName());
+                                queueMessage(message);
+                        }
+                    }
+                }
+            } else {
+                // a getter exists.  ensure it returns a List or array.
+                // if it returns an array, ensure a setter exists
+                Class<?> retType = pd.getReadMethod().getReturnType();
+                if (retType.isArray()) {
+                    if (pd.getWriteMethod() == null) {
+                        String message = MessageUtils
+                             .getExceptionMessageString(
+                                  MessageUtils.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR_ID,
+                                  property.getPropertyName(),
+                                  beanInfo.getName());
+                        queueMessage(message);
+                    }
+                    // validate setter
+                } else {
+                    if (!List.class.isAssignableFrom(retType)) {
+                        String message = MessageUtils.getExceptionMessageString(
+                             MessageUtils.MANAGED_BEAN_LIST_GETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR_ID,
+                             property.getPropertyName(),
+                             beanInfo.getName());
+                        queueMessage(message);
+                    }
+                }
+            }
+
+        }
+
+        if (!this.hasMessages()) {
+            BakedListProperty baked = new BakedListProperty(listEntry,
+                                                            pd);
+            properties.add(baked);
+        }
+
+    }
+
+
+    private void bakeBeanProperty(ManagedBeanInfo.ManagedProperty property) {
+
+        String className = property.getPropertyClass();
+        PropertyDescriptor pd =
+                 getPropertyDescriptor(property.getPropertyName());
+
+        if (pd == null || pd.getWriteMethod() == null) {
+            if (!UIComponent.class.isAssignableFrom(getBeanClass())) {
+                String message = MessageUtils.getExceptionMessageString(
+                     MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
+                     property.getPropertyName(),
+                     beanInfo.getName());
+                queueMessage(message);
+            }           
+        } else {
+            Method method = pd.getWriteMethod();
+            Class<?>[] param = method.getParameterTypes();
+            if (param.length != 1) {
+                String message = MessageUtils.getExceptionMessageString(
+                     MessageUtils.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR_ID,
+                     property.getPropertyName(),
+                     beanInfo.getName());
+                queueMessage(message);
+            }
+        }
+
+        Expression value = null;
+        if (pd != null) {
+            Class<?> propertyClass;
+            if (className != null) {
+                propertyClass = loadClass(className);
+            } else {
+                propertyClass = pd.getPropertyType();
+            }
+
+            if (className != null) {
+                if (!pd.getWriteMethod().getParameterTypes()[0]
+                     .isAssignableFrom(propertyClass)) {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR_ID,
+                         property.getPropertyName(),
+                         beanInfo.getName(),
+                         property.getPropertyClass());
+                    queueMessage(message);
+                }
+            }
+
+            String propertyValue = property.getPropertyValue();
+            if (!ManagedBeanInfo.NULL_VALUE.equals(propertyValue)) {
+                value = new Expression(propertyValue, propertyClass);
+            }
+        } else {
+            String propertyValue = property.getPropertyValue();
+            if (!ManagedBeanInfo.NULL_VALUE.equals(propertyValue)) {
+                value = new Expression(propertyValue, String.class);
+            }
+        }
+
+        if (!this.hasMessages()) {
+            BakedBeanProperty baked
+                 = new BakedBeanProperty(property.getPropertyName(),
+                                         pd,
+                                         value);
+            properties.add(baked);
+        }
+
+    }
+
+
+    private PropertyDescriptor getPropertyDescriptor(String propertyName) {
+
+        try {
+            BeanInfo beanInfo = Introspector.getBeanInfo(getBeanClass());
+            PropertyDescriptor pds[] = beanInfo.getPropertyDescriptors();
+            for (PropertyDescriptor pd : pds) {
+                if (propertyName.equals(pd.getName())) {
+                    return pd;
+                }
+            }
+        } catch (IntrospectionException ie) {
+            String message = MessageUtils.getExceptionMessageString(
+                 MessageUtils.MANAGED_BEAN_INTROSPECTION_ERROR_ID,
+                 beanInfo.getName());
+            throw new ManagedBeanPreProcessingException(message);
+        }
+
+        return null;
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static interface BakedProperty {
+
+        abstract void set(Object bean, FacesContext context);
+
+    } // END BakedProperty
+
+    private class BakedMapProperty implements BakedProperty {
+
+        Map<Expression,Expression> mapEntries;
+        PropertyDescriptor pd;
+
+        BakedMapProperty(Map<Expression,Expression> mapEntries,
+                         PropertyDescriptor pd) {
+
+            this.mapEntries = mapEntries;
+            this.pd = pd;
+
+        }
+
+        public void set(Object bean, FacesContext context) {
+
+            Method readMethod = pd.getReadMethod();
+            Map target = null;
+            boolean mapReturned = false;
+            if (readMethod != null) {
+                // see if a Map already exists, if so, we'll
+                // add the config entries to the existing
+                try {
+                    target = (Map) readMethod.invoke(bean,
+                                                     RIConstants.EMPTY_METH_ARGS);
+                    mapReturned = (target != null);
+                } catch (Exception ignored) {
+                    // ignored
+                }
+            }
+            if (target == null) {
+                //noinspection CollectionWithoutInitialCapacity
+                target = new HashMap();
+            }
+            initMap(mapEntries, target, context);
+
+            if (!mapReturned) {
+                Method writeMethod = pd.getWriteMethod();
+                try {
+                    writeMethod.invoke(bean, target);
+                } catch (Exception e) {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
+                         pd.getName(),
+                         beanInfo.getName());
+                    throw new ManagedBeanPreProcessingException(message, e);
+                }
+            }
+        }
+
+    } // END BakedMapProperty
+
+
+    private class BakedListProperty implements BakedProperty {
+
+        private List<Expression> listEntries;
+        private PropertyDescriptor pd;        
+
+
+        BakedListProperty(List<Expression> listEntries,
+                          PropertyDescriptor pd) {
+
+            this.listEntries = listEntries;
+            this.pd = pd;           
+            
+        }
+
+
+        public void set(Object bean, FacesContext context) {
+
+            // check to see if there is a value returned by
+            // the getter, if any.
+            Method readMethod = pd.getReadMethod();
+            Object temp = null;
+            if (readMethod != null) {
+                try {
+                    temp = readMethod.invoke(bean, RIConstants.EMPTY_METH_ARGS);
+                } catch (Exception ignored) {
+                    // ignored
+                }
+            }
+
+            List target = null;
+            if (temp != null) {
+                if (temp.getClass().isArray()) {
+                    for (int i = 0, len = Array.getLength(temp); i < len; i++) {
+                        if (target == null) {
+                            target = new ArrayList(len);
+                        }
+                        //noinspection unchecked
+                        target.add(Array.get(temp, i));
+                    }
+                } else {
+                    target = (List) temp;
+                }
+            }
+            if (target == null) {
+                //noinspection CollectionWithoutInitialCapacity
+                target = new ArrayList();
+            }
+            ExpressionFactory expFactory =
+                 context.getApplication().getExpressionFactory();
+            initList(listEntries, target, context);
+
+            // handle the case where the getter returned a non-null value
+            if (temp != null && !temp.getClass().isArray()) {
+                // the returned object was a List - no action
+                // necessary
+                return;
+            } else if (temp != null) {
+
+                // getter returned an array.  Converter the List
+                // 'target' to an array and call the setter
+                Class<?> arrayType = temp.getClass().getComponentType();
+                Object result = Array.newInstance(arrayType, target.size());
+                for (int i = 0, len = target.size(); i < len; i++) {
+                    Array.set(result,
+                              i,
+                              expFactory.coerceToType(target.get(i),
+                                                      arrayType));
+                }
+                try {
+                    pd.getWriteMethod().invoke(bean, result);
+                } catch (Exception e) {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
+                         pd.getName(),
+                         beanInfo.getName());
+                    throw new ManagedBeanCreationException(message, e);
+                }
+            } else {
+                // no value returned from the getter.
+                Method writeMethod = pd.getWriteMethod();
+                Class<?>[] param = writeMethod.getParameterTypes();
+
+                if (param[0].isArray()) {
+                    Class<?> arrayType = param[0].getComponentType();
+                    Object result = Array.newInstance(arrayType, target.size());
+                    for (int i = 0, len = target.size(); i < len; i++) {
+                        Array.set(result,
+                                  i,
+                                  expFactory.coerceToType(target.get(i),
+                                                          arrayType));
+                    }
+                    try {
+                        writeMethod.invoke(bean, result);
+                    } catch (Exception e) {
+                        String message = MessageUtils.getExceptionMessageString(
+                             MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
+                             pd.getName(),
+                             beanInfo.getName());
+                        throw new ManagedBeanCreationException(message, e);
+                    }
+                } else {
+                    try {
+                        writeMethod.invoke(bean, target);
+                    } catch (Exception e) {
+                        String message = MessageUtils.getExceptionMessageString(
+                             MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
+                             pd.getName(),
+                             beanInfo.getName());
+                        throw new ManagedBeanCreationException(message, e);
+                    }
+                }
+            }
+        }
+
+
+    } // END BakedListProperty
+
+
+    private class BakedBeanProperty implements BakedProperty {
+
+        private String propertyName;
+        private PropertyDescriptor pd;
+        private Expression value;
+
+        BakedBeanProperty(String propertyName,
+                          PropertyDescriptor pd,
+                          Expression value) {
+
+            this.propertyName = propertyName;
+            this.pd = pd;
+            this.value = value;
+
+        }
+
+
+        public void set(Object bean, FacesContext context) {
+
+            if (pd != null) {
+                Method writeMethod = pd.getWriteMethod();
+                try {
+                    writeMethod.invoke(bean,
+                                       ((value != null)
+                                        ? value.evaluate(context.getELContext())
+                                        : null));
+                } catch (Exception e) {
+                    String message = MessageUtils.getExceptionMessageString(
+                         MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
+                         pd.getName(),
+                         beanInfo.getName());
+                    throw new ManagedBeanCreationException(message, e);
+                }
+            } else {
+                // no PropertyDescriptor means this bean is a UIComponent
+                ((UIComponent) bean).getAttributes()
+                     .put(propertyName, ((value != null)
+                                           ? value
+                          .evaluate(context.getELContext())
+                                           : ""));
+            }
+
+        }
+        
+    } // END BakedBeanProperty
+
+}
diff --git a/com/sun/faces/mgbean/ManagedBeanCreationException.java b/com/sun/faces/mgbean/ManagedBeanCreationException.java
new file mode 100644
index 0000000..3b162db
--- /dev/null
+++ b/com/sun/faces/mgbean/ManagedBeanCreationException.java
@@ -0,0 +1,74 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import javax.faces.FacesException;
+
+/**
+ * <p>Indicates an error in the ManagedBean, be it a user error or runtime error.</p>
+ */
+public class ManagedBeanCreationException extends FacesException {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ManagedBeanCreationException() {
+        super();
+    }
+
+
+    public ManagedBeanCreationException(String message) {
+        super(message);
+    }
+
+
+    public ManagedBeanCreationException(Throwable t) {
+        super(t);
+    }
+
+
+    public ManagedBeanCreationException(String message, Throwable t) {
+        super(message, t);  
+    }
+
+
+}
diff --git a/com/sun/faces/mgbean/ManagedBeanInfo.java b/com/sun/faces/mgbean/ManagedBeanInfo.java
new file mode 100644
index 0000000..b26361d
--- /dev/null
+++ b/com/sun/faces/mgbean/ManagedBeanInfo.java
@@ -0,0 +1,309 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import java.util.List;
+import java.util.Map;
+
+import com.sun.faces.el.ELUtils;
+
+/**
+ * This class represents the parsed metadata for a <code>managed-bean</code>
+ * entry within a faces-config.xml.
+ */
+public class ManagedBeanInfo {
+
+    public static final String NULL_VALUE = "null_value";
+    
+    private String name;
+    private String className;
+    private String beanScope;
+    boolean eager;
+    private ManagedBeanInfo.MapEntry mapEntry;
+    private ManagedBeanInfo.ListEntry listEntry;
+    private List<ManagedBeanInfo.ManagedProperty> managedProperties;
+    private Map<String,String> descriptions;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ManagedBeanInfo(String name,
+                           String className,
+                           String beanScope,
+                           ManagedBeanInfo.MapEntry mapEntry,
+                           ManagedBeanInfo.ListEntry listEntry,
+                           List<ManagedBeanInfo.ManagedProperty> managedProperties,
+                           Map<String,String> descriptions) {
+
+        this(name,
+             className,
+             beanScope,
+             false,
+             mapEntry,
+             listEntry,
+             managedProperties,
+             descriptions);
+
+    }
+
+
+    public ManagedBeanInfo(String name,
+                           String className,
+                           String beanScope,
+                           boolean eager,
+                           ManagedBeanInfo.MapEntry mapEntry,
+                           ManagedBeanInfo.ListEntry listEntry,
+                           List<ManagedBeanInfo.ManagedProperty> managedProperties,
+                           Map<String,String> descriptions) {
+
+        this.name = name;
+        this.className = className;
+        this.beanScope = beanScope;
+        this.eager = eager;
+        this.mapEntry = mapEntry;
+        this.listEntry = listEntry;
+        this.managedProperties = managedProperties;
+        this.descriptions = descriptions;
+
+        if (eager && !ELUtils.Scope.APPLICATION.toString().equals(beanScope)) {
+            this.eager = false;
+        }
+        
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public String getName() {
+        return name;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public String getScope() {
+        return beanScope;
+    }
+
+    public boolean isEager() {
+        return eager;
+    }
+
+    public boolean hasMapEntry() {
+        return (mapEntry != null);
+    }
+
+    public MapEntry getMapEntry() {
+        return mapEntry;
+    }
+
+    public boolean hasListEntry() {
+        return (listEntry != null);
+    }
+
+    public ListEntry getListEntry() {
+        return listEntry;
+    }
+
+    public boolean hasManagedProperties() {
+        return (managedProperties != null);
+    }
+
+    public List<ManagedBeanInfo.ManagedProperty> getManagedProperties() {
+        return managedProperties;    
+    }
+
+    public Map<String,String> getDescriptions() {
+        return descriptions;
+    }
+
+    public ManagedBeanInfo clone(String name,
+                                 String scope,
+                                 boolean eager,
+                                 ManagedBeanInfo source) {
+
+        return new ManagedBeanInfo(name,
+                                   source.className,
+                                   scope,
+                                   eager,
+                                   source.mapEntry,
+                                   source.listEntry,
+                                   source.managedProperties,
+                                   source.descriptions);
+
+    }
+
+    
+    // ----------------------------------------------------------- Inner Classes
+
+
+    public static class MapEntry {
+
+        private String keyClass;
+        private String valueClass;
+        private Map<String, String> entries;
+
+        public MapEntry(String keyClass,
+                        String valueClass,
+                        Map<String,String> entries) {
+
+            this.keyClass = keyClass;
+            this.valueClass = valueClass;
+            this.entries = entries;
+
+        }
+
+        public String getKeyClass() {
+            return keyClass;
+        }
+
+        public String getValueClass() {
+            return valueClass;
+        }
+
+        public Map<String,String> getEntries() {
+            return entries;
+        }
+
+    }
+
+
+    public static class ListEntry {
+
+        private String valueClass;
+        private List<String> values;
+
+        public ListEntry(String valueClass,
+                         List<String> values) {
+
+            this.valueClass = valueClass;
+            this.values = values;
+
+        }
+
+        public String getValueClass() {
+            return valueClass;
+        }
+
+        public List<String> getValues() {
+            return values;
+        }
+
+    }
+
+
+    public static class ManagedProperty {
+
+        private String propertyAlias;
+        private String propertyName;
+        private String propertyClass;
+        private String propertyValue;
+        private ManagedBeanInfo.MapEntry mapEntry;
+        private ManagedBeanInfo.ListEntry listEntry;
+
+        public ManagedProperty(String propertyName,
+                               String propertyClass,
+                               String propertyValue,
+                               ManagedBeanInfo.MapEntry mapEntry,
+                               ManagedBeanInfo.ListEntry listEntry) {
+
+            this.propertyName = propertyName;
+            this.propertyClass = propertyClass;
+            this.propertyValue = propertyValue;
+            this.mapEntry = mapEntry;
+            this.listEntry = listEntry;
+
+        }
+
+        public ManagedProperty(String propertyAlias,
+                               String propertyName,
+                               String propertyClass,
+                               String propertyValue,
+                               ManagedBeanInfo.MapEntry mapEntry,
+                               ManagedBeanInfo.ListEntry listEntry) {
+
+            this(propertyName, propertyClass, propertyValue, mapEntry, listEntry);
+            this.propertyAlias = propertyAlias;
+
+        }
+
+        public String getPropertyAlias() {
+            return propertyAlias;
+        }
+
+        public String getPropertyName() {
+            return propertyName;
+        }
+
+        public String getPropertyClass() {
+            return propertyClass;
+        }
+
+        public boolean hasPropertyValue() {
+            return (propertyValue != null);
+        }
+
+        public String getPropertyValue() {
+            return propertyValue;
+        }                
+
+        public boolean hasMapEntry() {
+            return (mapEntry != null);
+        }
+
+        public ManagedBeanInfo.MapEntry getMapEntry() {
+            return mapEntry;
+        }
+
+        public boolean hasListEntry() {
+            return (listEntry != null);
+        }
+
+        public ManagedBeanInfo.ListEntry getListEntry() {
+            return listEntry;
+        }
+
+    }
+}
+
diff --git a/com/sun/faces/mgbean/ManagedBeanPreProcessingException.java b/com/sun/faces/mgbean/ManagedBeanPreProcessingException.java
new file mode 100644
index 0000000..3ca9f6b
--- /dev/null
+++ b/com/sun/faces/mgbean/ManagedBeanPreProcessingException.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import javax.faces.FacesException;
+
+/**
+ * <p>Represents errors from managed bean pre-processing.
+ */
+public class ManagedBeanPreProcessingException extends FacesException {
+
+    public enum Type {
+        CHECKED,
+        UNCHECKED
+    }
+
+    private Type type = Type.CHECKED;
+
+    // ------------------------------------------------------------ Constructors
+
+    public ManagedBeanPreProcessingException() {
+        super();
+    }
+
+
+    public ManagedBeanPreProcessingException(Type type) {
+        super();
+        this.type = type;
+    }
+
+
+    public ManagedBeanPreProcessingException(String message) {
+        super(message);
+    }
+
+
+    public ManagedBeanPreProcessingException(String message, Type type) {
+        super(message);
+        this.type = type;
+    }
+
+
+    public ManagedBeanPreProcessingException(Throwable t) {
+        super(t);
+    }
+
+
+    public ManagedBeanPreProcessingException(Throwable t, Type type) {
+        super(t);
+        this.type = type;
+    }
+
+
+    public ManagedBeanPreProcessingException(String message, Throwable t) {
+        super(message, t);
+    }
+
+
+    public ManagedBeanPreProcessingException(String message, Throwable t, Type type) {
+        super(message, t);
+        this.type = type;
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public Type getType() {
+
+        return type;
+
+    }
+
+}
diff --git a/com/sun/faces/mgbean/ManagedListBeanBuilder.java b/com/sun/faces/mgbean/ManagedListBeanBuilder.java
new file mode 100644
index 0000000..0f411d4
--- /dev/null
+++ b/com/sun/faces/mgbean/ManagedListBeanBuilder.java
@@ -0,0 +1,86 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import javax.faces.context.FacesContext;
+import java.util.List;
+
+/**
+ * <p>This builder builds beans that are defined as <code>List</code>
+ * instances.</p>
+ */
+public class ManagedListBeanBuilder extends BeanBuilder {
+
+    private List<Expression> values;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ManagedListBeanBuilder(ManagedBeanInfo beanInfo) {
+
+        super(beanInfo);
+
+    }
+
+
+    // ------------------------------------------------ Methods from BeanBuilder
+
+    
+    @Override
+    void bake() {
+
+        if (!isBaked()) {
+            super.bake();
+            ManagedBeanInfo.ListEntry entry = beanInfo.getListEntry();
+            values = getBakedList(entry.getValueClass(), entry.getValues());
+            baked();
+        }
+
+    }
+
+
+    protected void buildBean(Object bean, FacesContext context) {
+
+        initList(values, (List) bean, context);
+
+    }
+}
diff --git a/com/sun/faces/mgbean/ManagedMapBeanBuilder.java b/com/sun/faces/mgbean/ManagedMapBeanBuilder.java
new file mode 100644
index 0000000..e69909c
--- /dev/null
+++ b/com/sun/faces/mgbean/ManagedMapBeanBuilder.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import javax.faces.context.FacesContext;
+import java.util.Map;
+
+/**
+ * <p>This builder builds beans that are defined as <code>Map</code>
+ * instances.</p>
+ */
+public class ManagedMapBeanBuilder extends BeanBuilder {
+
+    private Map<Expression,Expression> mapEntries;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ManagedMapBeanBuilder(ManagedBeanInfo beanInfo) {
+
+        super(beanInfo);
+        
+    }
+
+
+    // ------------------------------------------------ Methods from BeanBuilder
+
+
+    @Override
+    void bake() {
+
+        if (!isBaked()) {
+            super.bake();
+            ManagedBeanInfo.MapEntry entry = beanInfo.getMapEntry();
+            mapEntries = getBakedMap(entry.getKeyClass(),
+                                     entry.getValueClass(),
+                                     entry.getEntries());
+            baked();
+        }
+
+    }
+
+
+    protected void buildBean(Object bean, FacesContext context) {
+
+        initMap(mapEntries, (Map) bean, context);
+        
+    }
+}
diff --git a/com/sun/faces/mgbean/SharedUtils.java b/com/sun/faces/mgbean/SharedUtils.java
new file mode 100644
index 0000000..55cb25e
--- /dev/null
+++ b/com/sun/faces/mgbean/SharedUtils.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.mgbean;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+class SharedUtils {
+
+    /*
+    * Determine whether String is a mixed value binding expression or not.
+    */
+    static boolean isMixedExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        // if it doesn't start and end with delimiters
+        return (!(expression.startsWith("#{") && expression.endsWith("}")))
+                  && isExpression(expression);
+
+    }
+
+
+    /*
+    * Determine whether String is a value binding expression or not.
+    */
+    static boolean isExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        //check to see if attribute has an expression
+        int start = expression.indexOf("#{");
+        return start != -1 && expression.indexOf('}', start+2) != -1;
+    }
+
+    static Map<String, List<String>> evaluateExpressions(FacesContext context, Map<String, List<String>> map) {
+        if (map != null && !map.isEmpty()) {
+            Map<String, List<String>> ret = new HashMap<String, List<String>>(map.size());
+            for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+                ret.put(entry.getKey(), evaluateExpressions(context, entry.getValue()));
+            }
+            
+            return ret;
+        }
+        
+        return map;
+    }
+     
+    static List<String> evaluateExpressions(FacesContext context, List<String> values) {
+         if (!values.isEmpty()) {
+             List<String> ret = new ArrayList<String>(values.size());
+             Application app = context.getApplication();
+             for (String val : values) {
+                 if (val != null) {
+                     String value = val.trim();
+                     if (isExpression(value)) {
+                         value = app.evaluateExpressionGet(context,
+                                                           value,
+                                                           String.class);
+                     }
+                     ret.add(value);
+                 }
+             }
+             
+             return ret;
+         }
+         return values;
+     }
+
+
+
+}
+
+     
+
diff --git a/com/sun/faces/renderkit/ApplicationObjectInputStream.java b/com/sun/faces/renderkit/ApplicationObjectInputStream.java
new file mode 100644
index 0000000..b498b3c
--- /dev/null
+++ b/com/sun/faces/renderkit/ApplicationObjectInputStream.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * An ObjectInputStream that can deserialize objects relative to the current
+ * application's class loader.  In particular, this class works around 
+ * deserialization problems when the JSF JARs are shared (i.e. the 
+ * classloader has no access to application objects).
+ */
+public class ApplicationObjectInputStream extends ObjectInputStream {
+
+    // Taken from ObjectInputStream to resolve primitive types
+    private static final Map<String,Class<?>> PRIMITIVE_CLASSES =
+          new HashMap<String,Class<?>>(9, 1.0F);
+
+    static {
+        PRIMITIVE_CLASSES.put("boolean", boolean.class);
+        PRIMITIVE_CLASSES.put("byte", byte.class);
+        PRIMITIVE_CLASSES.put("char", char.class);
+        PRIMITIVE_CLASSES.put("short", short.class);
+        PRIMITIVE_CLASSES.put("int", int.class);
+        PRIMITIVE_CLASSES.put("long", long.class);
+        PRIMITIVE_CLASSES.put("float", float.class);
+        PRIMITIVE_CLASSES.put("double", double.class);
+        PRIMITIVE_CLASSES.put("void", void.class);
+    }
+   
+    public ApplicationObjectInputStream() throws IOException, 
+            SecurityException {
+        super();
+    }
+    
+    public ApplicationObjectInputStream(InputStream in) throws IOException {
+        super(in);
+    } 
+
+    protected Class<?> resolveClass(ObjectStreamClass desc)
+    throws IOException, ClassNotFoundException {
+        
+        // When the container is about to call code associated with a 
+        // particular web application, it sets the context classloader to the 
+        // web app class loader. We make use of that here to locate any classes 
+        // that the UIComponent may hold references to.  This won't cause a 
+        // problem to locate classes in the system class loader because 
+        // class loaders can look up the chain and not down the chain.
+        String name = desc.getName();
+        try {
+            return Class.forName(name,
+                                 true,
+                                 Thread.currentThread().getContextClassLoader());
+        } catch (ClassNotFoundException cnfe) {
+            Class<?> c = PRIMITIVE_CLASSES.get(name);
+            if (c != null) {
+                return c;
+            }
+            throw cnfe;
+        }
+
+    }
+} 
+    
diff --git a/com/sun/faces/renderkit/Attribute.java b/com/sun/faces/renderkit/Attribute.java
new file mode 100644
index 0000000..82965b8
--- /dev/null
+++ b/com/sun/faces/renderkit/Attribute.java
@@ -0,0 +1,94 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+/**
+ * <p class="changed_added_2_0"></p>
+ * @author asmirnov at exadel.com
+ *
+ */
+public class Attribute implements Comparable<Attribute> {
+	
+	private final String name;
+	
+	private final String[] events;
+
+	/**
+	 * <p class="changed_added_2_0"></p>
+	 * @param name
+	 * @param events
+	 */
+	public Attribute(String name, String[] events) {
+		this.name = name;
+		this.events = events;
+	}
+
+	public static Attribute attr(String name) {
+		return new Attribute(name,null);
+	}
+
+	public static Attribute attr(String name, String... events) {
+		return new Attribute(name,events);
+	}
+
+	/**
+	 * <p class="changed_added_2_0"></p>
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <p class="changed_added_2_0"></p>
+	 * @return the events
+	 */
+	public String[] getEvents() {
+		return events;
+	}
+
+	public int compareTo(Attribute o) {
+		// Compare attributes by name for a fast search in the RenderKitUtils methods.
+		return this.getName().compareTo(o.getName());
+	}
+	
+	
+}
diff --git a/com/sun/faces/renderkit/AttributeManager.java b/com/sun/faces/renderkit/AttributeManager.java
new file mode 100644
index 0000000..a9c3577
--- /dev/null
+++ b/com/sun/faces/renderkit/AttributeManager.java
@@ -0,0 +1,664 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.util.CollectionsUtils;
+import java.util.Map;
+import static com.sun.faces.renderkit.Attribute.*;
+import static com.sun.faces.util.CollectionsUtils.*;
+
+/**
+ * This class contains mappings between the standard components
+ * and the passthrough attributes associated with them.
+ */
+public class AttributeManager {
+
+    private static Map<String,Attribute[]> ATTRIBUTE_LOOKUP=CollectionsUtils.<String,Attribute[]>map()
+        .add("CommandButton",ar(
+            attr("accesskey")
+            ,attr("alt")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onchange","change")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("CommandLink",ar(
+            attr("accesskey")
+            ,attr("charset")
+            ,attr("coords")
+            ,attr("dir")
+            ,attr("hreflang")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("rel")
+            ,attr("rev")
+            ,attr("role")
+            ,attr("shape")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+            ,attr("type")
+        ))
+        .add("DataTable",ar(
+            attr("bgcolor")
+            ,attr("border")
+            ,attr("cellpadding")
+            ,attr("cellspacing")
+            ,attr("dir")
+            ,attr("frame")
+            ,attr("lang")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("role")
+            ,attr("rules")
+            ,attr("style")
+            ,attr("summary")
+            ,attr("title")
+            ,attr("width")
+        ))
+        .add("FormForm",ar(
+            attr("accept")
+            ,attr("dir")
+            ,attr("enctype")
+            ,attr("lang")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onreset")
+            ,attr("onsubmit")
+            ,attr("role")
+            ,attr("style")
+            ,attr("target")
+            ,attr("title")
+        ))
+        .add("GraphicImage",ar(
+            attr("alt")
+            ,attr("dir")
+            ,attr("height")
+            ,attr("lang")
+            ,attr("longdesc")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("role")
+            ,attr("style")
+            ,attr("title")
+            ,attr("usemap")
+            ,attr("width")
+        ))
+        .add("InputFile",ar(
+            attr("accesskey")
+            ,attr("alt")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("maxlength")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("size")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("InputSecret",ar(
+            attr("accesskey")
+            ,attr("alt")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("maxlength")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("size")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("InputText",ar(
+            attr("accesskey")
+            ,attr("alt")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("maxlength")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("size")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("InputTextarea",ar(
+            attr("accesskey")
+            ,attr("cols")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("rows")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("MessageMessage",ar(
+            attr("dir")
+            ,attr("lang")
+            ,attr("role")
+            ,attr("style")
+            ,attr("title")
+        ))
+        .add("MessagesMessages",ar(
+            attr("dir")
+            ,attr("lang")
+            ,attr("role")
+            ,attr("style")
+            ,attr("title")
+        ))
+        .add("OutcomeTargetButton",ar(
+            attr("accesskey")
+            ,attr("alt")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("OutcomeTargetLink",ar(
+            attr("accesskey")
+            ,attr("charset")
+            ,attr("coords")
+            ,attr("dir")
+            ,attr("hreflang")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("rel")
+            ,attr("rev")
+            ,attr("role")
+            ,attr("shape")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+            ,attr("type")
+        ))
+        .add("OutputFormat",ar(
+            attr("dir")
+            ,attr("lang")
+            ,attr("role")
+            ,attr("style")
+            ,attr("title")
+        ))
+        .add("OutputLabel",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("OutputLink",ar(
+            attr("accesskey")
+            ,attr("charset")
+            ,attr("coords")
+            ,attr("dir")
+            ,attr("hreflang")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click","action")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("rel")
+            ,attr("rev")
+            ,attr("role")
+            ,attr("shape")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+            ,attr("type")
+        ))
+        .add("OutputText",ar(
+            attr("dir")
+            ,attr("lang")
+            ,attr("role")
+            ,attr("style")
+            ,attr("title")
+        ))
+        .add("PanelGrid",ar(
+            attr("bgcolor")
+            ,attr("border")
+            ,attr("cellpadding")
+            ,attr("cellspacing")
+            ,attr("dir")
+            ,attr("frame")
+            ,attr("lang")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("role")
+            ,attr("rules")
+            ,attr("style")
+            ,attr("summary")
+            ,attr("title")
+            ,attr("width")
+        ))
+        .add("PanelGroup",ar(
+            attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("style")
+        ))
+        .add("SelectBooleanCheckbox",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onchange","change")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("SelectManyCheckbox",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onchange","change")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("SelectManyListbox",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("SelectManyMenu",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("SelectOneListbox",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("SelectOneMenu",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("style")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("SelectOneRadio",ar(
+            attr("accesskey")
+            ,attr("dir")
+            ,attr("lang")
+            ,attr("onblur","blur")
+            ,attr("onchange","change")
+            ,attr("ondblclick","dblclick")
+            ,attr("onfocus","focus")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onselect","select")
+            ,attr("role")
+            ,attr("tabindex")
+            ,attr("title")
+        ))
+        .add("OutputBody",ar(
+            attr("dir")
+            ,attr("lang")
+            ,attr("onclick","click")
+            ,attr("ondblclick","dblclick")
+            ,attr("onkeydown","keydown")
+            ,attr("onkeypress","keypress")
+            ,attr("onkeyup","keyup")
+            ,attr("onload","load")
+            ,attr("onmousedown","mousedown")
+            ,attr("onmousemove","mousemove")
+            ,attr("onmouseout","mouseout")
+            ,attr("onmouseover","mouseover")
+            ,attr("onmouseup","mouseup")
+            ,attr("onunload","unload")
+            ,attr("role")
+            ,attr("style")
+            ,attr("title")
+            ,attr("xmlns")
+        ))
+        .add("OutputDoctype",ar(
+            attr("public")
+            ,attr("rootElement")
+            ,attr("system")
+        ))
+        .add("OutputHead",ar(
+            attr("dir")
+            ,attr("lang")
+            ,attr("xmlns")
+        ))
+        .fix();
+    public enum Key {
+        COMMANDBUTTON("CommandButton"),
+        COMMANDLINK("CommandLink"),
+        DATATABLE("DataTable"),
+        FORMFORM("FormForm"),
+        GRAPHICIMAGE("GraphicImage"),
+        INPUTFILE("InputFile"),
+        INPUTSECRET("InputSecret"),
+        INPUTTEXT("InputText"),
+        INPUTTEXTAREA("InputTextarea"),
+        MESSAGEMESSAGE("MessageMessage"),
+        MESSAGESMESSAGES("MessagesMessages"),
+        OUTCOMETARGETBUTTON("OutcomeTargetButton"),
+        OUTCOMETARGETLINK("OutcomeTargetLink"),
+        OUTPUTFORMAT("OutputFormat"),
+        OUTPUTLABEL("OutputLabel"),
+        OUTPUTLINK("OutputLink"),
+        OUTPUTTEXT("OutputText"),
+        PANELGRID("PanelGrid"),
+        PANELGROUP("PanelGroup"),
+        SELECTBOOLEANCHECKBOX("SelectBooleanCheckbox"),
+        SELECTMANYCHECKBOX("SelectManyCheckbox"),
+        SELECTMANYLISTBOX("SelectManyListbox"),
+        SELECTMANYMENU("SelectManyMenu"),
+        SELECTONELISTBOX("SelectOneListbox"),
+        SELECTONEMENU("SelectOneMenu"),
+        SELECTONERADIO("SelectOneRadio"),
+        OUTPUTBODY("OutputBody"),
+        OUTPUTDOCTYPE("OutputDoctype"),
+        OUTPUTHEAD("OutputHead");
+        private String key;
+        Key(String key) {
+            this.key = key;
+        }
+        public String value() {
+            return this.key;
+        }
+    }
+
+
+    public static Attribute[] getAttributes(Key key) {
+        return ATTRIBUTE_LOOKUP.get(key.value());
+    }
+}
diff --git a/com/sun/faces/renderkit/ByteArrayGuard.java b/com/sun/faces/renderkit/ByteArrayGuard.java
new file mode 100644
index 0000000..38b43f7
--- /dev/null
+++ b/com/sun/faces/renderkit/ByteArrayGuard.java
@@ -0,0 +1,253 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.faces.FacesException;
+import java.security.SecureRandom;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.sun.faces.util.FacesLogger;
+import javax.crypto.spec.SecretKeySpec;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.xml.bind.DatatypeConverter;
+
+/**
+ * <p>This utility class is to provide both encryption and
+ * decryption <code>Ciphers</code> to <code>ResponseStateManager</code>
+ * implementations wishing to provide encryption support.</p>
+ * 
+ * <p>The algorithm used to encrypt byte array is AES with CBC.</p>
+ *  
+ * <p>Original author Inderjeet Singh, J2EE Blue Prints Team. Modified to suit JSF
+ * needs.</p> 
+ */
+public final class ByteArrayGuard {
+
+
+     // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.RENDERKIT.getLogger();
+
+    private static final int MAC_LENGTH = 32;
+    private static final int KEY_LENGTH = 128;
+    private static final int IV_LENGTH = 16;
+
+    private static final String KEY_ALGORITHM = "AES";
+    private static final String CIPHER_CODE = "AES/CBC/PKCS5Padding";
+    private static final String MAC_CODE = "HmacSHA256";
+    private SecretKey sk;
+
+    // ------------------------------------------------------------ Constructors
+
+    public ByteArrayGuard() {
+
+        try {
+            setupKeyAndMac();
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) { 
+                LOGGER.log(Level.SEVERE,
+                           "Unexpected exception initializing encryption."
+                           + "  No encryption will be performed.",
+                           e);
+            }
+            System.err.println("ERROR: Initializing Ciphers");
+        }
+    }
+
+    // ---------------------------------------------------------- Public Methods    
+
+
+    /**
+     * This method:
+     *    Encrypts bytes using a cipher.  
+     *    Generates MAC for intialization vector of the cipher
+     *    Generates MAC for encrypted data
+     *    Returns a byte array consisting of the following concatenated together:
+     *       |MAC for cnrypted Data | MAC for Init Vector | Encrypted Data |
+     * @param bytes The byte array to be encrypted.
+     * @return the encrypted byte array.
+     */
+    public byte[] encrypt(byte[] bytes) {
+        byte[] securedata = null;
+        try {
+            // Generate IV
+            SecureRandom rand = new SecureRandom();
+            byte[] iv = new byte[16];
+            rand.nextBytes(iv);
+            IvParameterSpec ivspec = new IvParameterSpec(iv);
+            Cipher encryptCipher = Cipher.getInstance(CIPHER_CODE);
+            encryptCipher.init(Cipher.ENCRYPT_MODE, sk, ivspec);
+            Mac encryptMac = Mac.getInstance(MAC_CODE);
+            encryptMac.init(sk);
+            encryptMac.update(iv);
+            // encrypt the plaintext
+            byte[] encdata = encryptCipher.doFinal(bytes);
+            byte[] macBytes = encryptMac.doFinal(encdata);
+            byte[] tmp = concatBytes(macBytes, iv);
+            securedata = concatBytes(tmp, encdata);
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           "Unexpected exception initializing encryption."
+                           + "  No encryption will be performed.",
+                           e);
+            }
+            return null;
+        }
+        return securedata;
+    }
+
+    /**
+     * This method decrypts the provided byte array.
+     * The decryption is only performed if the regenerated MAC
+     * is the same as the MAC for the received value.
+     * @param bytes Encrypted byte array to be decrypted.
+     * @return Decrypted byte array.
+     */
+    public byte[] decrypt(byte[] bytes) {
+        try {
+            // Extract MAC
+            byte[] macBytes = new byte[MAC_LENGTH];
+            System.arraycopy(bytes, 0, macBytes, 0, macBytes.length);
+
+            // Extract IV
+            byte[] iv = new byte[IV_LENGTH];
+            System.arraycopy(bytes, macBytes.length, iv, 0, iv.length);
+
+            // Extract encrypted data
+            byte[] encdata = new byte[bytes.length - macBytes.length - iv.length];
+            System.arraycopy(bytes, macBytes.length + iv.length, encdata, 0, encdata.length);
+
+            IvParameterSpec ivspec = new IvParameterSpec(iv);
+            Cipher decryptCipher = Cipher.getInstance(CIPHER_CODE);
+            decryptCipher.init(Cipher.DECRYPT_MODE, sk, ivspec);
+
+            // verify MAC by regenerating it and comparing it with the received value
+            Mac decryptMac = Mac.getInstance(MAC_CODE);
+            decryptMac.init(sk);
+            decryptMac.update(iv);
+            decryptMac.update(encdata);
+            byte[] macBytesCalculated = decryptMac.doFinal();
+            if (areArrayEqualsConstantTime(macBytes, macBytesCalculated)) {
+                // continue only if the MAC was valid
+                // System.out.println("Valid MAC found!");
+                byte[] plaindata = decryptCipher.doFinal(encdata);
+                return plaindata;
+            } else {
+                System.err.println("ERROR: MAC did not verify!");
+                return null;
+            }
+        } catch (Exception e) {
+            System.err.println("ERROR: Decrypting:"+e.getCause());
+            return null; // Signal to JSF runtime
+        }
+    }
+
+    private boolean areArrayEqualsConstantTime(byte[] array1, byte[] array2) {
+        boolean result = true;
+        for(int i=0; i<array1.length; i++) {
+            if (array1[i] != array2[i]) {
+                result = false;
+            }
+        }
+        return result;
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+    /**
+     * Generates secret key.
+     * Initializes MAC(s).
+     */
+    private void setupKeyAndMac() {
+
+        /*
+         * Lets see if an encoded key was given to the application, if so use
+         * it and skip the code to generate it.
+         */
+        try {
+            InitialContext context = new InitialContext();
+            String encodedKeyArray = (String) context.lookup("java:comp/env/jsf/ClientSideSecretKey");
+            byte[] keyArray = DatatypeConverter.parseBase64Binary(encodedKeyArray);
+            sk = new SecretKeySpec(keyArray, KEY_ALGORITHM);
+        }
+        catch(NamingException exception) {
+            if (LOGGER.isLoggable(Level.FINEST)) { 
+                LOGGER.log(Level.FINEST, "Unable to find the encoded key.", exception);
+            }
+        }
+        
+        if (sk == null) {
+            try {
+                KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
+                kg.init(KEY_LENGTH);   // 256 if you're using the Unlimited Policy Files
+                sk = kg.generateKey(); 
+//                System.out.print("SecretKey: " + DatatypeConverter.printBase64Binary(sk.getEncoded()));
+
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+    }
+
+    /**
+     * This method concatenates two byte arrays
+     * @return a byte array of array1||array2
+     * @param array1 first byte array to be concatenated
+     * @param array2 second byte array to be concatenated
+     */
+    private static byte[] concatBytes(byte[] array1, byte[] array2) {
+        byte[] cBytes = new byte[array1.length + array2.length];
+        try {
+            System.arraycopy(array1, 0, cBytes, 0, array1.length);
+            System.arraycopy(array2, 0, cBytes, array1.length, array2.length);
+        } catch(Exception e) {
+            throw new FacesException(e);
+        }
+        return cBytes;
+    }    
+}
\ No newline at end of file
diff --git a/com/sun/faces/renderkit/ClientSideStateHelper.java b/com/sun/faces/renderkit/ClientSideStateHelper.java
new file mode 100644
index 0000000..9bb96e3
--- /dev/null
+++ b/com/sun/faces/renderkit/ClientSideStateHelper.java
@@ -0,0 +1,686 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import com.sun.faces.RIConstants;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.AutoCompleteOffOnViewState;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableViewStateIdRendering;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.NamespaceParameters;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.ClientStateTimeout;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.ClientStateWriteBufferSize;
+
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InvalidClassException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+
+import javax.faces.FacesException;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.ResponseStateManager;
+
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.io.Base64InputStream;
+import com.sun.faces.io.Base64OutputStreamWriter;
+import com.sun.faces.util.DebugObjectOutputStream;
+import com.sun.faces.util.DebugUtil;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+/**
+ * <p>
+ * This <code>StateHelper</code> provides the functionality associated with client-side state saving.
+ * </p>
+ */
+public class ClientSideStateHelper extends StateHelper {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    /**
+     * <p>
+     * Enabled encryption of view state.  Encryption is disabled by default.
+     * </p>
+     */
+    private ByteArrayGuard guard;
+
+    /**
+     * <p>
+     * Flag indicating whether or not client view state will be manipulated
+     * for and checked against a configured timeout value.
+     * </p>
+     *
+     * <p>
+     * This flag is configured via the <code>WebContextInitParameter.ClientStateTimeout</code>
+     * configuration option of <code>WebConfiguration</code> and is disabled by
+     * default.
+     * </p>
+     *
+     * @see {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateTimeout}
+     */
+    private boolean stateTimeoutEnabled;
+
+    /**
+     * <p>
+     * If <code>stateTimeoutEnabled</code> is <code>true</code> this value will
+     * represent the time in seconds that a particular client view state is
+     * valid for.
+     * </p>
+     *
+     * @see {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateTimeout}
+     */
+    private long stateTimeout;
+
+    /**
+     * <p>
+     * Client state is generally large, so this allows some tuning to control
+     * the buffer that's used to write the client state.
+     * </p>
+     *
+     * <p>
+     * The value specified must be divisable by two as the buffer is split
+     * between character and bytes (due to how client state is written).  By
+     * default, the buffer size is 8192 (per request).
+     * </p>
+     *
+     * @see {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateWriteBufferSize}
+     */
+    private int csBuffSize;
+    
+    
+    private boolean debugSerializedState;
+
+
+    /**
+     * Flag determining whether or not javax.faces.ViewState should be namespaced.
+     */
+    protected boolean namespaceParameters;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Construct a new <code>ClientSideStateHelper</code> instance.
+     */
+    public ClientSideStateHelper() {
+
+        init();
+        
+    }
+
+
+    // ------------------------------------------------ Methods from StateHelper
+
+
+    /**
+     * <p>
+     * Writes the view state as a String generated by Base64 encoding the
+     * Java Serialziation representation of the provided <code>state</code>
+     * </p>
+     *
+     * <p>If <code>stateCapture</code> is <code>null</code>, the Base64 encoded
+     * state will be written to the client as a hidden field using the <code>ResponseWriter</code>
+     * from the provided <code>FacesContext</code>.</p>
+     *
+     * <p>If <code>stateCapture</code> is not <code>null</code>, the Base64 encoded
+     * state will be appended to the provided <code>StringBuilder</code> without any markup
+     * included or any content written to the client.
+     *
+     * @see StateHelper#writeState(javax.faces.context.FacesContext, java.lang.Object, java.lang.StringBuilder)
+     */
+    public void writeState(FacesContext ctx,
+                           Object state,
+                           StringBuilder stateCapture) throws IOException {
+
+        if (stateCapture != null) {
+            doWriteState(ctx, state, new StringBuilderWriter(stateCapture));
+        } else {
+            ResponseWriter writer = ctx.getResponseWriter();
+
+            writer.startElement("input", null);
+            writer.writeAttribute("type", "hidden", null);
+            String viewStateParam = ResponseStateManager.VIEW_STATE_PARAM;
+            
+            if (namespaceParameters) {
+                UIViewRoot viewRoot = ctx.getViewRoot();
+                if (viewRoot instanceof NamingContainer) {
+                    String namingContainerId = viewRoot.getContainerClientId(ctx);
+                    if (namingContainerId != null) {
+                        viewStateParam = namingContainerId + viewStateParam;
+                    }
+                }
+            }
+            writer.writeAttribute("name", viewStateParam, null);
+            if (webConfig.isOptionEnabled(EnableViewStateIdRendering)) {
+                String viewStateId = Util.getViewStateId(ctx);
+                writer.writeAttribute("id", viewStateId, null);
+            }
+            StringBuilder stateBuilder = new StringBuilder();
+            doWriteState(ctx, state, new StringBuilderWriter(stateBuilder));
+            writer.writeAttribute("value", stateBuilder.toString(), null);
+            if (webConfig.isOptionEnabled(AutoCompleteOffOnViewState)) {
+                writer.writeAttribute("autocomplete", "off", null);
+            }
+            writer.endElement("input");
+
+            writeClientWindowField(ctx, writer);
+            writeRenderKitIdField(ctx, writer);
+        }
+    }
+
+
+    /**
+     * <p>Inspects the incoming request parameters for the standardized state
+     * parameter name.  In this case, the parameter value will be a Base64 encoded
+     * string previously encoded by ServerSideStateHelper#writeState(FacesContext, Object, StringBuilder).</p>
+     *
+     * <p>The string will be Base64-decoded and the state reconstructed using standard
+     * Java serialization.</p>
+     *
+     * @see StateHelper#getState(javax.faces.context.FacesContext, java.lang.String)
+     */
+    public Object getState(FacesContext ctx, String viewId) throws IOException {
+
+        String stateString = getStateParamValue(ctx);
+        
+        if (stateString == null) {
+            return null;
+        }
+        
+        if ("stateless".equals(stateString)) {
+            return "stateless";
+        }
+
+        return doGetState(stateString);
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * Rebuilds the view state from the Base64 included String included
+     * with the request.
+     *
+     * @param stateString the Base64 encoded view state
+     * @return the view state reconstructed from <code>stateString</code>
+     */
+    protected Object doGetState(String stateString) {
+        
+        if ("stateless".equals(stateString)) {
+            return null;
+        }
+        
+        ObjectInputStream ois = null;
+        InputStream bis = new Base64InputStream(stateString);
+        try {
+            if (guard != null) {
+                byte[] bytes = stateString.getBytes(RIConstants.CHAR_ENCODING);
+                int numRead = bis.read(bytes, 0, bytes.length);
+                byte[] decodedBytes = new byte[numRead];
+                bis.reset();
+                bis.read(decodedBytes, 0, decodedBytes.length);
+
+                bytes = guard.decrypt(decodedBytes);
+                if (bytes == null) return null;
+                bis = new ByteArrayInputStream(bytes);
+            }
+
+
+            if (compressViewState) {
+                bis = new GZIPInputStream(bis);
+            }
+            
+            ois = serialProvider.createObjectInputStream(bis);
+
+            long stateTime = 0;
+            if (stateTimeoutEnabled) {
+                try {
+                    stateTime = ois.readLong();
+                } catch (IOException ioe) {
+                    // we've caught an exception trying to read the time
+                    // marker.  This most likely means a view that has been
+                    // around before upgrading to the release that included
+                    // this feature.  So, no marker, return null now to
+                    // cause a ViewExpiredException
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.fine("Client state timeout is enabled, but unable to find the "
+                              + "time marker in the serialized state.  Assuming state "
+                              + "to be old and returning null.");
+                    }
+                    return null;
+                }
+            }
+            Object structure = ois.readObject();
+            Object state = ois.readObject();
+            if (stateTime != 0 && hasStateExpired(stateTime)) {
+                // return null if state has expired.  This should cause
+                // a ViewExpiredException to be thrown
+                return null;
+            }
+
+            return new Object[] { structure, state };
+
+        } catch (java.io.OptionalDataException ode) {
+        	if (LOGGER.isLoggable(Level.SEVERE)) {
+        		LOGGER.log(Level.SEVERE, ode.getMessage(), ode);
+        	}
+            throw new FacesException(ode);
+        } catch (ClassNotFoundException cnfe) {
+        	if (LOGGER.isLoggable(Level.SEVERE)) {
+        		LOGGER.log(Level.SEVERE, cnfe.getMessage(), cnfe);
+        	}
+            throw new FacesException(cnfe);
+        } catch (InvalidClassException ice) {
+            /*
+             * Thrown when the JSF runtime is trying to deserialize a client-side
+             * state that has been saved with a previous version of Mojarra. Instead
+             * of blowing up, force a ViewExpiredException.
+             */
+            return null;
+        } catch (IOException iox) {
+        	if (LOGGER.isLoggable(Level.SEVERE)) {
+        		LOGGER.log(Level.SEVERE, iox.getMessage(), iox);
+        	}
+            throw new FacesException(iox);
+        } finally {
+            if (ois != null) {
+                try {
+                    ois.close();
+                } catch (IOException ioe) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Serializes and Base64 encodes the provided <code>state</code> to the
+     * provided <code>writer</code>/
+     *
+     * @param facesContext the Faces context.
+     * @param state view state
+     * @param writer the <code>Writer</code> to write the content to
+     * @throws IOException if an error occurs writing the state to the client
+     */
+    protected void doWriteState(FacesContext facesContext, Object state, Writer writer)
+    throws IOException {
+        
+        if (facesContext.getViewRoot().isTransient()) {
+            writer.write("stateless");
+            writer.flush();
+            return;
+        }
+        
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        OutputStream base = null;
+        if (compressViewState) {
+            base = new GZIPOutputStream(baos, csBuffSize);
+        } else {
+            base = baos;
+        }
+
+        ObjectOutputStream oos = null;
+
+        try {
+            oos = serialProvider
+                .createObjectOutputStream(new BufferedOutputStream(base));
+
+            if (stateTimeoutEnabled) {
+                oos.writeLong(System.currentTimeMillis());
+
+            }
+
+            Object[] stateToWrite = (Object[]) state;
+
+
+            if (debugSerializedState) {
+                ByteArrayOutputStream discard = new ByteArrayOutputStream();
+                DebugObjectOutputStream out =
+                        new DebugObjectOutputStream(discard);
+                try {
+                        out.writeObject(stateToWrite[0]);
+                } catch (Exception e) {
+                    throw new FacesException(
+                            "Serialization error. Path to offending instance: " 
+                            + out.getStack(), e);
+                }            
+
+            }
+
+            //noinspection NonSerializableObjectPassedToObjectStream
+                oos.writeObject(stateToWrite[0]);
+
+            if (debugSerializedState) {
+                ByteArrayOutputStream discard = new ByteArrayOutputStream();
+
+                DebugObjectOutputStream out =
+                        new DebugObjectOutputStream(discard);
+                try {
+                        out.writeObject(stateToWrite[1]);
+                } catch (Exception e) {
+                    DebugUtil.printState((Map)stateToWrite[1], LOGGER);
+                    throw new FacesException(
+                            "Serialization error. Path to offending instance: " 
+                            + out.getStack(), e);
+                }            
+
+            }
+
+            //noinspection NonSerializableObjectPassedToObjectStream
+                oos.writeObject(stateToWrite[1]);
+
+            oos.flush();
+            oos.close();
+            oos = null;
+
+            // get bytes for encrypting
+            byte[] bytes = baos.toByteArray();
+
+            if (guard != null) {
+                // this will MAC
+                bytes = guard.encrypt(bytes);
+            }
+
+            // Base 64 encode
+            Base64OutputStreamWriter bos =
+                new Base64OutputStreamWriter(bytes.length, writer);
+            bos.write(bytes, 0, bytes.length);
+            bos.finish();
+
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "Client State: total number of characters written: {0}",
+                           bos.getTotalCharsWritten());
+            }
+        } finally {
+            if (oos != null) {
+                try {
+                    oos.close();
+                } catch (IOException ioe) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * <p>If the {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateTimeout} init parameter
+     * is set, calculate the elapsed time between the time the client state was
+     * written and the time this method was invoked during restore.  If the client
+     * state has expired, return <code>true</code>.  If the client state hasn't expired,
+     * or the init parameter wasn't set, return <code>false</code>.
+     * @param stateTime the time in milliseconds that the state was written
+     *  to the client
+     * @return <code>false</code> if the client state hasn't timed out, otherwise
+     *  return <code>true</code>
+     */
+    protected boolean hasStateExpired(long stateTime) {
+
+        if (stateTimeoutEnabled) {
+            long elapsed = (System.currentTimeMillis() - stateTime) / 60000;
+            return (elapsed > stateTimeout);
+        } else {
+            return false;
+        }
+
+    }
+
+
+    /**
+     * <p>
+     * Initialze the various configuration options for client-side
+     * sate saving.
+     * </p>
+     */
+    protected void init() {
+
+        if (webConfig.canProcessJndiEntries() &&
+        		!webConfig.isSet(BooleanWebContextInitParameter.DisableClientStateEncryption)) {
+            guard = new ByteArrayGuard();
+        } else {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE, "jsf.config.webconfig.enventry.clientencrypt");
+        }
+
+        }
+
+        stateTimeoutEnabled = webConfig.isSet(ClientStateTimeout);
+        if (stateTimeoutEnabled) {
+            String timeout = webConfig.getOptionValue(ClientStateTimeout);
+            try {
+                stateTimeout = Long.parseLong(timeout);
+            } catch (NumberFormatException nfe) {
+                stateTimeout = Long.parseLong(ClientStateTimeout.getDefaultValue());
+            }
+        }
+
+
+        String size = webConfig.getOptionValue(
+              ClientStateWriteBufferSize);
+        String defaultSize =
+              ClientStateWriteBufferSize.getDefaultValue();
+        try {
+            csBuffSize = Integer.parseInt(size);
+            if (csBuffSize % 2 != 0) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.renderkit.resstatemgr.clientbuf_div_two",
+                               new Object[]{
+                                     ClientStateWriteBufferSize.getQualifiedName(),
+                                     size,
+                                     defaultSize});
+                }
+                csBuffSize = Integer.parseInt(defaultSize);
+            } else {
+                csBuffSize /= 2;
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("Using client state buffer size of "
+                                + csBuffSize);
+                }
+            }
+        } catch (NumberFormatException nfe) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                           "jsf.renderkit.resstatemgr.clientbuf_not_integer",
+                           new Object[]{
+                                 ClientStateWriteBufferSize.getQualifiedName(),
+                                 size,
+                                 defaultSize});
+            }
+            csBuffSize = Integer.parseInt(defaultSize);
+        }
+
+        debugSerializedState = webConfig.isOptionEnabled(BooleanWebContextInitParameter.EnableClientStateDebugging);
+
+        namespaceParameters = webConfig.isOptionEnabled(NamespaceParameters);
+
+    }
+
+    /**
+     * Is stateless.
+     * 
+     * @param facesContext the Faces context.
+     * @param viewId the view id.
+     * @return true if stateless, false otherwise.
+     * @throws IllegalStateException when the request was not a postback.
+     */
+    @Override
+    public boolean isStateless(FacesContext facesContext, String viewId) throws IllegalStateException {
+        if (facesContext.isPostback()) {
+            Object stateObject;
+
+            try {
+                stateObject = getState(facesContext, viewId);
+            } catch(IOException ioe) {
+                throw new IllegalStateException("Cannot determine whether or not the request is stateless", ioe);
+            }
+            if (stateObject instanceof String && "stateless".equals((String) stateObject)) {
+                return true;
+            }
+
+            return false;
+        }
+        
+        throw new IllegalStateException("Cannot determine whether or not the request is stateless");
+    }
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * A simple <code>Writer</code> implementation to encapsulate a
+     * <code>StringBuilder</code> instance.
+     */
+    protected static final class StringBuilderWriter extends Writer {
+
+        private StringBuilder sb;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        protected StringBuilderWriter(StringBuilder sb) {
+
+            this.sb = sb;
+
+        }
+
+
+        // ------------------------------------------------- Methods from Writer
+
+
+        @Override
+        public void write(int c) throws IOException {
+
+            sb.append((char) c);
+
+        }
+
+
+        @Override
+        public void write(char cbuf[]) throws IOException {
+
+            sb.append(cbuf);
+
+        }
+
+
+        @Override
+        public void write(String str) throws IOException {
+
+            sb.append(str);
+
+        }
+
+
+        @Override
+        public void write(String str, int off, int len) throws IOException {
+
+            sb.append(str.toCharArray(), off, len);
+
+        }
+
+
+        @Override
+        public Writer append(CharSequence csq) throws IOException {
+
+            sb.append(csq);
+            return this;
+
+        }
+
+
+        @Override
+        public Writer append(CharSequence csq, int start, int end)
+        throws IOException {
+
+            sb.append(csq, start, end);
+            return this;
+
+        }
+
+        @Override
+        public Writer append(char c) throws IOException {
+
+            sb.append(c);
+            return this;
+
+        }
+
+        public void write(char cbuf[], int off, int len) throws IOException {
+
+            sb.append(cbuf, off, len);
+
+        }
+
+        public void flush() throws IOException {
+
+            //no-op
+
+        }
+
+        public void close() throws IOException {
+
+            //no-op
+
+        }
+
+    } // END StringBuilderWriter
+}
diff --git a/com/sun/faces/renderkit/RenderKitFactoryImpl.java b/com/sun/faces/renderkit/RenderKitFactoryImpl.java
new file mode 100644
index 0000000..565baa1
--- /dev/null
+++ b/com/sun/faces/renderkit/RenderKitFactoryImpl.java
@@ -0,0 +1,121 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import javax.faces.context.FacesContext;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.sun.faces.util.MessageUtils;
+
+
+public class RenderKitFactoryImpl extends RenderKitFactory {
+
+//
+// Protected Constants
+//
+    protected String renderKitId;
+    protected String className;
+    protected ConcurrentHashMap<String,RenderKit> renderKits;
+
+//
+// Class Variables
+//
+
+// Attribute Instance Variables
+
+// Relationship Instance Variables
+
+//
+// Constructors and Initializers
+//
+    /**
+     * Constructor registers default Render kit.
+     */
+    public RenderKitFactoryImpl() {
+        super();
+        renderKits = new ConcurrentHashMap<String, RenderKit>();
+        addRenderKit(HTML_BASIC_RENDER_KIT, new RenderKitImpl());
+    }
+
+
+    public void addRenderKit(String renderKitId, RenderKit renderKit) {
+
+        if (renderKitId == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKitId");
+            throw new NullPointerException(message);
+        }
+        if (renderKit == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKit");
+            throw new NullPointerException(message);
+        }
+        
+        renderKits.put(renderKitId, renderKit);
+       
+    }
+
+
+    public RenderKit getRenderKit(FacesContext context, String renderKitId) {
+
+        if (renderKitId == null) {
+            String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKitId");
+            throw new NullPointerException(message);
+        }
+        //PENDING (rogerk) do something with FacesContext ...
+        //
+        // If an instance already exists, return it.
+        //       
+
+        return renderKits.get(renderKitId);
+    }
+
+
+    public Iterator<String> getRenderKitIds() {
+        return (renderKits.keySet().iterator());
+    }
+
+}
diff --git a/com/sun/faces/renderkit/RenderKitImpl.java b/com/sun/faces/renderkit/RenderKitImpl.java
new file mode 100644
index 0000000..60491a1
--- /dev/null
+++ b/com/sun/faces/renderkit/RenderKitImpl.java
@@ -0,0 +1,437 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// RenderKitImpl.java
+
+package com.sun.faces.renderkit;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseStream;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.RenderKit;
+import javax.faces.render.Renderer;
+import javax.faces.render.ResponseStateManager;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.DisableUnicodeEscaping;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableJSStyleHiding;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableScriptInAttributeValue;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.PreferXHTMLContentType;
+import com.sun.faces.renderkit.html_basic.HtmlResponseWriter;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * <B>RenderKitImpl</B> is a class ...
+ * <p/>
+ * <B>Lifetime And Scope</B> <P>
+ *
+ */
+
+public class RenderKitImpl extends RenderKit {
+
+    private static final Logger LOGGER = FacesLogger.RENDERKIT.getLogger();
+
+    private static final String[] SUPPORTED_CONTENT_TYPES_ARRAY =
+         new String[]{
+              RIConstants.HTML_CONTENT_TYPE,
+              RIConstants.XHTML_CONTENT_TYPE,
+              RIConstants.APPLICATION_XML_CONTENT_TYPE,
+              RIConstants.TEXT_XML_CONTENT_TYPE
+         };
+
+    private static final String SUPPORTED_CONTENT_TYPES =
+         RIConstants.HTML_CONTENT_TYPE + ','
+              + RIConstants.XHTML_CONTENT_TYPE + ','
+              + RIConstants.APPLICATION_XML_CONTENT_TYPE + ','
+              + RIConstants.TEXT_XML_CONTENT_TYPE;
+
+
+    /**
+     * Keys are String renderer family.  Values are HashMaps.  Nested
+     * HashMap keys are Strings for the rendererType, and values are the
+     * Renderer instances themselves.
+     */
+
+    private ConcurrentHashMap<String, HashMap<String, Renderer>> rendererFamilies =
+         new ConcurrentHashMap<String, HashMap<String, Renderer>>();
+
+    /**
+     * For Behavior Renderers:
+     * Keys are Strings for the behaviorRendererType, and values are the 
+     * behaviorRenderer instances themselves.
+     */
+
+    private ConcurrentHashMap<String, ClientBehaviorRenderer> behaviorRenderers = 
+        new ConcurrentHashMap<String, ClientBehaviorRenderer>();
+
+
+    private ResponseStateManager responseStateManager =
+         new ResponseStateManagerImpl();
+
+    private WebConfiguration webConfig;
+
+    public RenderKitImpl() {
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        webConfig = WebConfiguration.getInstance(context.getExternalContext());
+
+    }
+    
+    public void addRenderer(String family,
+                            String rendererType,
+                            Renderer renderer) {
+
+        Util.notNull("family", family);
+        Util.notNull("rendererType", rendererType);
+        Util.notNull("renderer", renderer);
+
+        HashMap<String,Renderer> renderers = rendererFamilies.get(family);
+        if (renderers == null) {
+            renderers = new HashMap<String,Renderer>();
+            rendererFamilies.put(family, renderers);
+        }
+
+        if (LOGGER.isLoggable(Level.FINE) && renderers.containsKey(rendererType)) {
+            LOGGER.log(Level.FINE,
+                       "rendererType {0} has already been registered for family {1}.  Replacing existing renderer class type {2} with {3}.",
+                       new Object[] { rendererType, family, renderers.get(rendererType).getClass().getName(), renderer.getClass().getName() });
+        }
+        renderers.put(rendererType, renderer);
+
+    }
+
+
+    public Renderer getRenderer(String family, String rendererType) {
+
+        Util.notNull("family", family);
+        Util.notNull("rendererType", rendererType);
+
+        assert(rendererFamilies != null);
+
+        HashMap<String,Renderer> renderers = rendererFamilies.get(family);
+        return ((renderers != null) ? renderers.get(rendererType) : null);
+
+    }
+
+    public void addClientBehaviorRenderer(String behaviorRendererType,
+                                          ClientBehaviorRenderer behaviorRenderer) {
+
+        Util.notNull("behaviorRendererType", behaviorRendererType);
+        Util.notNull("behaviorRenderer", behaviorRenderer);
+
+        if (LOGGER.isLoggable(Level.FINE) && behaviorRenderers.containsKey(behaviorRendererType)) {
+            LOGGER.log(Level.FINE,
+                       "behaviorRendererType {0} has already been registered.  Replacing existing behavior renderer class type {1} with {2}.",
+                       new Object[] { behaviorRendererType, behaviorRenderers.get(behaviorRendererType).getClass().getName(), behaviorRenderer.getClass().getName() });
+        }
+        behaviorRenderers.put(behaviorRendererType, behaviorRenderer);
+    
+    }
+
+    public ClientBehaviorRenderer getClientBehaviorRenderer(String behaviorRendererType) {
+
+        Util.notNull("behaviorRendererType", behaviorRendererType);
+        
+        return ((behaviorRenderers != null) ? behaviorRenderers.get(behaviorRendererType) : null);
+            
+    }   
+
+    public Iterator<String> getClientBehaviorRendererTypes() {
+        if (null == behaviorRenderers) {
+            Set<String> empty = Collections.emptySet();
+            return empty.iterator();
+        }
+        return behaviorRenderers.keySet().iterator();
+    }
+
+
+    public synchronized ResponseStateManager getResponseStateManager() {
+        if (responseStateManager == null) {
+            responseStateManager = new ResponseStateManagerImpl();
+        }
+        return responseStateManager;
+    }
+
+
+    public ResponseWriter createResponseWriter(Writer writer,
+                                               String desiredContentTypeList,
+                                               String characterEncoding) {
+        if (writer == null) {
+            return null;
+        }
+        String contentType = null;
+        boolean contentTypeNullFromResponse = false;
+        FacesContext context = FacesContext.getCurrentInstance();
+
+        // Step 1: Check the content type passed into this method 
+        if (null != desiredContentTypeList) {
+            contentType = findMatch(
+                 desiredContentTypeList,
+                 SUPPORTED_CONTENT_TYPES_ARRAY);
+        }
+
+        // Step 2: Check the response content type
+        if (null == desiredContentTypeList) {
+            desiredContentTypeList =
+                 context.getExternalContext().getResponseContentType();
+            if (null != desiredContentTypeList) {
+                contentType = findMatch(
+                     desiredContentTypeList,
+                     SUPPORTED_CONTENT_TYPES_ARRAY);
+                if (null == contentType) {
+                    contentTypeNullFromResponse = true;
+                }
+            }
+        }
+
+        // Step 3: Check the Accept Header content type
+        // Evaluate the accept header in accordance with HTTP specification - 
+        // Section 14.1
+        // Preconditions for this (1 or 2):
+        //  1. content type was not specified to begin with
+        //  2. an unsupported content type was retrieved from the response 
+        if (null == desiredContentTypeList || contentTypeNullFromResponse) {
+            String[] typeArray =
+                 context.getExternalContext().getRequestHeaderValuesMap().get("Accept");
+            if (typeArray.length > 0) {
+                StringBuffer buff = new StringBuffer();
+                buff.append(typeArray[0]);
+                for (int i = 1, len = typeArray.length; i < len; i++) {
+                    buff.append(',');
+                    buff.append(typeArray[i]);
+                }
+                desiredContentTypeList = buff.toString();
+            }
+
+            if (null != desiredContentTypeList) {
+                desiredContentTypeList =
+                      RenderKitUtils.determineContentType(desiredContentTypeList,
+                                                          SUPPORTED_CONTENT_TYPES,
+                                                          ((preferXhtml())
+                                                              ? RIConstants.XHTML_CONTENT_TYPE
+                                                              : null));
+                if (null != desiredContentTypeList) {
+                    contentType = findMatch(
+                         desiredContentTypeList,
+                         SUPPORTED_CONTENT_TYPES_ARRAY);
+                }
+            }
+        }
+
+        // Step 4: Default to text/html
+        if (contentType == null) {
+            if (null == desiredContentTypeList) {
+                contentType = getDefaultContentType();
+            } else {
+                String[] desiredContentTypes =
+                      contentTypeSplit(desiredContentTypeList);
+                for (String desiredContentType : desiredContentTypes) {
+                    if (RIConstants.ALL_MEDIA.equals(desiredContentType.trim())) {
+                        contentType = getDefaultContentType();
+                    }
+                }
+            }
+        }
+
+        if (null == contentType) {
+            throw new IllegalArgumentException(MessageUtils.getExceptionMessageString(
+                 MessageUtils.CONTENT_TYPE_ERROR_MESSAGE_ID));
+        }
+
+        if (characterEncoding == null) {
+            characterEncoding = RIConstants.CHAR_ENCODING;
+        }
+
+        boolean scriptHiding = webConfig.isOptionEnabled(EnableJSStyleHiding);
+        boolean scriptInAttributes = webConfig.isOptionEnabled( EnableScriptInAttributeValue);
+        WebConfiguration.DisableUnicodeEscaping escaping =
+              WebConfiguration.DisableUnicodeEscaping.getByValue(
+                    webConfig.getOptionValue(DisableUnicodeEscaping));
+        boolean isPartial = context.getPartialViewContext().isPartialRequest();
+        return new HtmlResponseWriter(writer,
+                                      contentType,
+                                      characterEncoding,
+                                      scriptHiding,
+                                      scriptInAttributes,
+                                      escaping,
+                                      isPartial);
+    }
+
+
+    private boolean preferXhtml() {
+
+        return webConfig.isOptionEnabled(PreferXHTMLContentType);
+
+    }
+
+
+    private String getDefaultContentType() {
+
+        return ((preferXhtml())
+                ? RIConstants.XHTML_CONTENT_TYPE
+                : RIConstants.HTML_CONTENT_TYPE);
+
+    }
+
+
+    private String[] contentTypeSplit(String contentTypeString) {
+        Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+        String[] result = Util.split(appMap, contentTypeString, ",");
+        for (int i = 0; i < result.length; i++) {
+            int semicolon = result[i].indexOf(";");
+            if (-1 != semicolon) {
+                result[i] = result[i].substring(0, semicolon);
+            }
+        }
+        return result;
+    }
+
+    // Helper method that returns the content type if the desired content type is found in the
+    // array of supported types. 
+
+    private String findMatch(String desiredContentTypeList,
+                             String[] supportedTypes) {
+
+        String contentType = null;
+        String[] desiredTypes = contentTypeSplit(desiredContentTypeList);
+
+        // For each entry in the desiredTypes array, look for a match in
+        // the supportedTypes array
+        for (int i = 0, ilen = desiredTypes.length; i < ilen; i++) {
+            String curDesiredType = desiredTypes[i];
+            for (int j = 0, jlen = supportedTypes.length; j < jlen; j++) {
+                String curContentType = supportedTypes[j].trim();
+                if (curDesiredType.contains(curContentType)) {
+                    if (curContentType.contains(RIConstants.HTML_CONTENT_TYPE)) {
+                        contentType = RIConstants.HTML_CONTENT_TYPE;
+                    } else
+                    if (curContentType.contains(RIConstants.XHTML_CONTENT_TYPE) ||
+                         curContentType.contains(RIConstants.APPLICATION_XML_CONTENT_TYPE) ||
+                         curContentType.contains(RIConstants.TEXT_XML_CONTENT_TYPE)) {
+                        contentType = RIConstants.XHTML_CONTENT_TYPE;
+                    }
+                    break;
+                }
+            }
+            if (null != contentType) {
+                break;
+            }
+        }
+        return contentType;
+    }
+
+
+    public ResponseStream createResponseStream(OutputStream out) {
+        final OutputStream output = out;
+        return new ResponseStream() {
+            public void write(int b) throws IOException {
+                output.write(b);
+            }
+
+
+            public void write(byte b[]) throws IOException {
+                output.write(b);
+            }
+
+
+            public void write(byte b[], int off, int len) throws IOException {
+                output.write(b, off, len);
+            }
+
+
+            public void flush() throws IOException {
+                output.flush();
+            }
+
+
+            public void close() throws IOException {
+                output.close();
+            }
+        };
+    }
+
+
+    /**
+     * @see javax.faces.render.RenderKit#getComponentFamilies()
+     */
+    @Override
+    public Iterator<String> getComponentFamilies() {
+
+        return rendererFamilies.keySet().iterator();
+
+    }
+
+
+    /**
+     * @see javax.faces.render.RenderKit#getRendererTypes(String)  
+     */
+    @Override
+    public Iterator<String> getRendererTypes(String componentFamily) {
+
+        Map<String,Renderer> family = rendererFamilies.get(componentFamily);
+        if (family != null) {
+            return family.keySet().iterator();
+        } else {
+            Set<String> empty = Collections.emptySet();
+            return empty.iterator();
+        }
+
+    }
+
+    // The test for this class is in TestRenderKit.java
+
+} // end of class RenderKitImpl
+
diff --git a/com/sun/faces/renderkit/RenderKitUtils.java b/com/sun/faces/renderkit/RenderKitUtils.java
new file mode 100644
index 0000000..50a9b7e
--- /dev/null
+++ b/com/sun/faces/renderkit/RenderKitUtils.java
@@ -0,0 +1,1897 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.math.BigDecimal;
+
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.ProjectStage;
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.behavior.*;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.context.ExternalContext;
+import javax.faces.model.SelectItem;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.ResponseStateManager;
+import javax.faces.render.Renderer;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.facelets.util.DevTools;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.RequestStateManager;
+
+import javax.faces.component.*;
+import javax.faces.component.html.HtmlMessages;
+
+/**
+ * <p>A set of utilities for use in {@link RenderKit}s.</p>
+ */
+public class RenderKitUtils {
+
+    /**
+     * <p>The prefix to append to certain attributes when renderking
+     * <code>XHTML Transitional</code> content.
+     */
+    private static final String XHTML_ATTR_PREFIX = "xml:";
+
+
+    /**
+     * <p><code>Boolean</code> attributes to be rendered
+     * using <code>XHMTL</code> semantics.
+     */
+    private static final String[] BOOLEAN_ATTRIBUTES = {
+          "disabled", "ismap", "readonly"
+    };
+
+
+    /**
+     * <p>An array of attributes that must be prefixed by
+     * {@link #XHTML_ATTR_PREFIX} when rendering
+     * <code>XHTML Transitional</code> content.
+     */
+    private static final String[] XHTML_PREFIX_ATTRIBUTES = {
+          "lang"
+    };
+
+    /**
+     * <p>The maximum number of content type parts.
+     * For example: for the type: "text/html; level=1; q=0.5"
+     * The parts of this type would be:
+     *      "text" - type
+     *      "html; level=1" - subtype
+     *      "0.5" - quality value
+     *      "1" - level value </p>
+     */
+    private final static int MAX_CONTENT_TYPE_PARTS = 4;
+
+    /**
+     * The character that is used to delimit content types
+     * in an accept String.</p>
+     */
+    private final static String CONTENT_TYPE_DELIMITER = ",";
+
+    /**
+     * The character that is used to delimit the type and
+     * subtype portions of a content type in an accept String.
+     * Example: text/html </p>
+     */
+    private final static String CONTENT_TYPE_SUBTYPE_DELIMITER = "/";
+
+    /**
+     * This represents the base package that can leverage the
+     * <code>attributesThatAreSet</code> List for optimized attribute
+     * rendering.
+     *
+     * IMPLEMENTATION NOTE:  This must be kept in sync with the array
+     * in UIComponentBase$AttributesMap and HtmlComponentGenerator.
+     *
+     * Hopefully JSF 2.0 will remove the need for this.
+     */
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+
+    /**
+     * IMPLEMENTATION NOTE:  This must be kept in sync with the Key
+     * in UIComponentBase$AttributesMap and HtmlComponentGenerator.
+     *
+     * Hopefully JSF 2.0 will remove the need for this.
+     */
+    private static final String ATTRIBUTES_THAT_ARE_SET_KEY =
+        UIComponentBase.class.getName() + ".attributesThatAreSet";
+
+
+    protected static final Logger LOGGER = FacesLogger.RENDERKIT.getLogger();
+    
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private RenderKitUtils() {
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Return the {@link RenderKit} for the current request.</p>
+     * @param context the {@link FacesContext} of the current request
+     * @return the {@link RenderKit} for the current request.
+     */
+    public static RenderKit getCurrentRenderKit(FacesContext context) {
+
+        RenderKitFactory renderKitFactory = (RenderKitFactory)
+              FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        return renderKitFactory.getRenderKit(context,
+                                             context
+                                                   .getViewRoot().getRenderKitId());
+
+    }
+
+
+    /**
+     * <p>Obtain and return the {@link ResponseStateManager} for
+     * the specified #renderKitId.</p>
+     *
+     * @param context the {@link FacesContext} of the current request
+     * @param renderKitId {@link RenderKit} ID
+     * @return the {@link ResponseStateManager} for the specified
+     *  #renderKitId
+     * @throws FacesException if an exception occurs while trying
+     *  to obtain the <code>ResponseStateManager</code>
+     */
+    public static ResponseStateManager getResponseStateManager(
+          FacesContext context, String renderKitId)
+          throws FacesException {
+
+        assert (null != renderKitId);
+        assert (null != context);
+
+        RenderKit renderKit = context.getRenderKit();
+        if (renderKit == null) {
+            // check request scope for a RenderKitFactory implementation
+            RenderKitFactory factory = (RenderKitFactory)
+                  RequestStateManager.get(context, RequestStateManager.RENDER_KIT_IMPL_REQ);
+            if (factory != null) {
+                renderKit = factory.getRenderKit(context, renderKitId);
+            } else {
+                factory = (RenderKitFactory)
+                      FactoryFinder
+                            .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+                if (factory == null) {
+                    throw new FacesException("Unable to locate RenderKitFactory for " + FactoryFinder.RENDER_KIT_FACTORY);
+                } else {
+                    RequestStateManager.set(context,
+                                            RequestStateManager.RENDER_KIT_IMPL_REQ,
+                                            factory);
+                }
+                renderKit = factory.getRenderKit(context, renderKitId);
+                if (renderKit == null) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, "Unable to locate renderkit "
+                                + "instance for render-kit-id {0}.  Using {1} instead.",
+                                new String [] { renderKitId,
+                                  RenderKitFactory.HTML_BASIC_RENDER_KIT} );
+                    }
+                    renderKitId = RenderKitFactory.HTML_BASIC_RENDER_KIT;
+                    UIViewRoot root = context.getViewRoot();
+                    if (null != root) {
+                        root.setRenderKitId(renderKitId);
+                    }
+                }
+                renderKit = factory.getRenderKit(context, renderKitId);
+                if (renderKit == null) {
+                    throw new FacesException("Unable to locate renderkit instance for render-kit-id " + renderKitId);
+                }
+            }
+        }
+        return renderKit.getResponseStateManager();
+
+    }
+
+    /**
+     * <p>Return a List of {@link javax.faces.model.SelectItem}
+     * instances representing the available options for this component,
+     * assembled from the set of {@link javax.faces.component.UISelectItem}
+     * and/or {@link javax.faces.component.UISelectItems} components that are
+     * direct children of this component.  If there are no such children, an
+     * empty <code>Iterator</code> is returned.</p>
+     *
+     * @param context The {@link javax.faces.context.FacesContext} for the current request.
+     *                If null, the UISelectItems behavior will not work.
+     * @param component the component
+     * @throws IllegalArgumentException if <code>context</code>
+     *                                  is <code>null</code>
+     * @return a List of the select items for the specified component
+     */
+    public static SelectItemsIterator<SelectItem> getSelectItems(FacesContext context,
+                                                     UIComponent component) {
+
+        Util.notNull("context", context);
+        Util.notNull("component", component);
+
+        return new SelectItemsIterator(context, component);
+        
+    }
+
+
+
+    /**
+     * <p>Render any "passthru" attributes, where we simply just output the
+     * raw name and value of the attribute.  This method is aware of the
+     * set of HTML4 attributes that fall into this bucket.  Examples are
+     * all the javascript attributes, alt, rows, cols, etc. </p>
+     *
+     * @param context the FacesContext for this request
+     * @param writer writer the {@link javax.faces.context.ResponseWriter} to be used when writing
+     *  the attributes
+     * @param component the component
+     * @param attributes an array of attributes to be processed
+     * @throws IOException if an error occurs writing the attributes
+     */
+    public static void renderPassThruAttributes(FacesContext context,
+                                                ResponseWriter writer,
+                                                UIComponent component,
+                                                Attribute[] attributes)
+    throws IOException {
+
+        assert (null != context);
+        assert (null != writer);
+        assert (null != component);
+
+        Map<String, List<ClientBehavior>> behaviors = null;
+
+        if (component instanceof ClientBehaviorHolder) {
+            behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
+        }
+
+        // Don't render behavior scripts if component is disabled
+        if ((null != behaviors) && 
+            (behaviors.size() > 0) &&
+            Util.componentIsDisabled(component)) {
+            behaviors = null;
+        }
+
+        renderPassThruAttributes(context, writer, component, attributes, behaviors);
+    }
+
+    /**
+     * <p>Render any "passthru" attributes, where we simply just output the
+     * raw name and value of the attribute.  This method is aware of the
+     * set of HTML4 attributes that fall into this bucket.  Examples are
+     * all the javascript attributes, alt, rows, cols, etc. </p>
+     *
+     * @param context the FacesContext for this request
+     * @param writer writer the {@link javax.faces.context.ResponseWriter} to be used when writing
+     *  the attributes
+     * @param component the component
+     * @param attributes an array of attributes to be processed
+     * @param behaviors the behaviors for this component, or null if
+     *   component is not a ClientBehaviorHolder
+     * @throws IOException if an error occurs writing the attributes
+     */
+    public static void renderPassThruAttributes(FacesContext context,
+                                                ResponseWriter writer,
+                                                UIComponent component,
+                                                Attribute[] attributes,
+                                                Map<String, List<ClientBehavior>> behaviors)
+    throws IOException {
+
+        assert (null != writer);
+        assert (null != component);
+
+        if (behaviors == null) {
+            behaviors = Collections.emptyMap();
+        }
+
+        if (canBeOptimized(component, behaviors)) {
+            //noinspection unchecked
+            List<String> setAttributes = (List<String>)
+              component.getAttributes().get(ATTRIBUTES_THAT_ARE_SET_KEY);
+            if (setAttributes != null) {
+                renderPassThruAttributesOptimized(context,
+                                                  writer,
+                                                  component,
+                                                  attributes,
+                                                  setAttributes,
+                                                  behaviors);
+            }
+        } else {
+
+            // this block should only be hit by custom components leveraging
+            // the RI's rendering code, or in cases where we have behaviors
+            // attached to multiple events.  We make no assumptions and loop
+            // through
+            renderPassThruAttributesUnoptimized(context,
+                                                writer,
+                                                component,
+                                                attributes,
+                                                behaviors);
+        }
+    }
+    
+    // Renders the onchange handler for input components.  Handles
+    // chaining together the user-provided onchange handler with
+    // any Behavior scripts.
+    public static void renderOnchange(FacesContext context, UIComponent component, boolean incExec)
+        throws IOException {
+
+        final String handlerName = "onchange";
+        final Object userHandler = component.getAttributes().get(handlerName);
+        String behaviorEventName = "valueChange";
+        if (component instanceof ClientBehaviorHolder) {
+            Map behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
+            if (null != behaviors && behaviors.containsKey("change")) {
+                behaviorEventName = "change";
+            }
+        }
+
+
+        List<ClientBehaviorContext.Parameter> params;
+        if (!incExec) {
+            params = Collections.emptyList();
+        } else {
+            params = new LinkedList<ClientBehaviorContext.Parameter>();
+            params.add(new ClientBehaviorContext.Parameter("incExec",true));
+        }
+        renderHandler(context,
+                      component,
+                      params,
+                      handlerName,
+                      userHandler,
+                      behaviorEventName,
+                      null,
+                      false,
+                      incExec);
+    }
+
+    // Renders onclick handler for SelectRaidio and SelectCheckbox
+    public static void renderSelectOnclick(FacesContext context, UIComponent component, boolean incExec)
+        throws IOException {
+
+        final String handlerName = "onclick";
+        final Object userHandler = component.getAttributes().get(handlerName);
+        String behaviorEventName = "valueChange";
+        if (component instanceof ClientBehaviorHolder) {
+            Map behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
+            if (null != behaviors && behaviors.containsKey("click")) {
+                behaviorEventName = "click";
+            }
+        }
+
+        List<ClientBehaviorContext.Parameter> params;
+        if (!incExec) {
+            params = Collections.emptyList();
+        } else {
+            params = new LinkedList<ClientBehaviorContext.Parameter>();
+            params.add(new ClientBehaviorContext.Parameter("incExec",true));
+        }
+        renderHandler(context,
+                      component,
+                      params,
+                      handlerName,
+                      userHandler,
+                      behaviorEventName,
+                      null,
+                      false,
+                      incExec);
+    }
+
+    // Renders the onclick handler for command buttons.  Handles
+    // chaining together the user-provided onclick handler, any
+    // Behavior scripts, plus the default button submit script.
+    public static void renderOnclick(FacesContext context, 
+                                     UIComponent component,
+                                     Collection<ClientBehaviorContext.Parameter> params,
+                                     String submitTarget,
+                                     boolean needsSubmit)
+        throws IOException {
+
+        final String handlerName = "onclick";
+        final Object userHandler = component.getAttributes().get(handlerName);
+        String behaviorEventName = "action";
+        if (component instanceof ClientBehaviorHolder) {
+            Map behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
+            if (null != behaviors && behaviors.containsKey("click")) {
+                behaviorEventName = "click";
+            }
+        }
+
+        renderHandler(context,
+                      component,
+                      params,
+                      handlerName,
+                      userHandler,
+                      behaviorEventName,
+                      submitTarget,
+                      needsSubmit,
+                      false);
+    }
+
+    public static String prefixAttribute(final String attrName,
+                                         final ResponseWriter writer) {
+
+        return (prefixAttribute(attrName,
+             RIConstants.XHTML_CONTENT_TYPE.equals(writer.getContentType())));
+
+    }
+
+
+    public static String prefixAttribute(final String attrName,
+                                         boolean isXhtml) {
+        if (isXhtml) {
+            if (Arrays.binarySearch(XHTML_PREFIX_ATTRIBUTES, attrName) > -1) {
+                return XHTML_ATTR_PREFIX + attrName;
+            } else {
+                return attrName;
+            }
+        } else {
+            return attrName;
+        }
+
+    }
+
+
+    /**
+     * <p>Renders the attributes from {@link #BOOLEAN_ATTRIBUTES}
+     * using <code>XHMTL</code> semantics (i.e., disabled="disabled").</p>
+     *
+     * @param writer writer the {@link ResponseWriter} to be used when writing
+     *  the attributes
+     * @param component the component
+     * @throws IOException if an error occurs writing the attributes
+     */
+    public static void renderXHTMLStyleBooleanAttributes(ResponseWriter writer,
+                                                         UIComponent component)
+          throws IOException {
+
+        assert (writer != null);
+        assert (component != null);
+
+        List<String> excludedAttributes = null;
+
+        renderXHTMLStyleBooleanAttributes(writer, component, excludedAttributes);
+    }
+    
+    /**
+     * <p>Renders the attributes from {@link #BOOLEAN_ATTRIBUTES}
+     * using <code>XHMTL</code> semantics (i.e., disabled="disabled").</p>
+     *
+     * @param writer writer the {@link ResponseWriter} to be used when writing
+     *  the attributes
+     * @param component the component
+     * @param excludedAttributes a <code>List</code> of attributes that are to be excluded from rendering
+     * @throws IOException if an error occurs writing the attributes
+     */
+    public static void renderXHTMLStyleBooleanAttributes(ResponseWriter writer,
+                                                         UIComponent component,
+                                                         List excludedAttributes)
+        throws IOException {
+
+        assert (writer != null);
+        assert (component != null);
+
+        Map attrMap = component.getAttributes();
+        for (String attrName : BOOLEAN_ATTRIBUTES) {
+            if (isExcludedAttribute(attrName, excludedAttributes)) {
+                continue;
+            }
+            Object val = attrMap.get(attrName);
+            if (val == null) {
+                continue;
+            }
+
+            if (Boolean.valueOf(val.toString())) {
+                writer.writeAttribute(attrName,
+                                      true,
+                                      attrName);
+            }
+        }
+
+    }
+
+    /**
+     * <p>Given an accept String from the client, and a <code>String</code>
+     * of server supported content types, determine the best qualified
+     * content type for the client.  If no match is found, or either of the
+     * arguments are <code>null</code>,  <code>null</code> is returned.</p>
+     *
+     * @param accept The client accept String
+     * @param serverSupportedTypes The types that the server supports
+     * @param preferredType The preferred content type if another type is found
+     *        with the same highest quality factor.
+     * @return The content type <code>String</code>
+     */
+    public static String determineContentType(String accept, String serverSupportedTypes, String preferredType) {
+        String contentType = null;
+
+        if (null == accept || null == serverSupportedTypes) {
+            return contentType;
+        }
+
+        String[][] clientContentTypes = buildTypeArrayFromString(accept);
+        String[][] serverContentTypes = buildTypeArrayFromString(serverSupportedTypes);
+        String[][] preferredContentType = buildTypeArrayFromString(preferredType);
+        String[][] matchedInfo = findMatch(clientContentTypes, serverContentTypes, preferredContentType);
+
+        // if best match exits and best match is not some wildcard,
+        // return best match
+        if ((matchedInfo[0][1] != null) && !(matchedInfo[0][2].equals("*"))) {
+            contentType = matchedInfo[0][1] + CONTENT_TYPE_SUBTYPE_DELIMITER + matchedInfo[0][2];
+        }
+
+        return contentType;
+    }
+
+
+    /**
+     * @param contentType the content type in question
+     * @return <code>true</code> if the content type is a known XML-based
+     *  content type, otherwise, <code>false</code>
+     */
+    public static boolean isXml(String contentType) {
+        return (RIConstants.XHTML_CONTENT_TYPE.equals(contentType)
+                || RIConstants.APPLICATION_XML_CONTENT_TYPE.equals(contentType)
+                || RIConstants.TEXT_XML_CONTENT_TYPE.equals(contentType));
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    
+    /**
+     * @param component the UIComponent in question
+     * @return <code>true</code> if the component is within the
+     *  <code>javax.faces.component</code> or <code>javax.faces.component.html</code>
+     *  packages, otherwise return <code>false</code>
+     */
+    private static boolean canBeOptimized(UIComponent component,
+                                          Map<String, List<ClientBehavior>> behaviors) {
+        assert(component != null);
+        assert(behaviors != null);
+
+        String name = component.getClass().getName();
+        if (name != null && name.startsWith(OPTIMIZED_PACKAGE)) {
+
+            // If we've got behaviors attached to multiple events
+            // it is difficult to optimize, so fall back to the
+            // non-optimized code path.  Behaviors attached to 
+            // multiple event handlers should be a fairly rare case.
+            return (behaviors.size() < 2);
+        }
+
+        return false;
+    }
+
+
+    /**
+     * <p>For each attribute in <code>setAttributes</code>, perform a binary
+     * search against the array of <code>knownAttributes</code>  If a match is found
+     * and the value is not <code>null</code>, render the attribute.
+     * @param context the {@link FacesContext} of the current request
+     * @param writer the current writer
+     * @param component the component whose attributes we're rendering
+     * @param knownAttributes an array of pass-through attributes supported by
+     *  this component
+     * @param setAttributes a <code>List</code> of attributes that have been set
+     *  on the provided component
+     * @param behaviors the non-null behaviors map for this request.
+     * @throws IOException if an error occurs during the write
+     */
+    private static void renderPassThruAttributesOptimized(FacesContext context,
+                                                          ResponseWriter writer,
+                                                          UIComponent component,
+                                                          Attribute[] knownAttributes, 
+                                                          List<String> setAttributes,
+                                                          Map<String,List<ClientBehavior>> behaviors)
+    throws IOException {
+
+        // We should only come in here if we've got zero or one behavior event
+        assert((behaviors != null) && (behaviors.size() < 2));
+        String behaviorEventName = getSingleBehaviorEventName(behaviors);
+        boolean renderedBehavior = false;
+
+        Collections.sort(setAttributes);
+        boolean isXhtml =
+              RIConstants.XHTML_CONTENT_TYPE.equals(writer.getContentType());
+        Map<String, Object> attrMap = component.getAttributes();
+        for (String name : setAttributes) {
+
+            // Note that this search can be optimized by switching from
+            // an array to a Map<String, Attribute>.  This would change
+            // the search time from O(log n) to O(1).
+            int index = Arrays.binarySearch(knownAttributes, Attribute.attr(name));
+            if (index >= 0) {
+                Object value =
+                      attrMap.get(name);
+                if (value != null && shouldRenderAttribute(value)) {
+
+                    Attribute attr = knownAttributes[index];
+
+                    if (isBehaviorEventAttribute(attr, behaviorEventName)) {
+                        renderHandler(context,
+                                      component,
+                                      null,
+                                      name,
+                                      value,
+                                      behaviorEventName,
+                                      null,
+                                      false,
+                                      false);
+
+                        renderedBehavior = true;
+                    } else {
+                        writer.writeAttribute(prefixAttribute(name, isXhtml),
+                                              value,
+                                              name);
+                    }
+                }
+            }
+        }
+
+        // We did not render out the behavior as part of our optimized
+        // attribute rendering.  Need to manually render it out now.
+        if ((behaviorEventName != null) && !renderedBehavior) {
+
+            // Note that we can optimize this search by providing
+            // an event name -> Attribute inverse look up map.
+            // This would change the search time from O(n) to O(1).
+            for (int i = 0; i < knownAttributes.length; i++) {
+                Attribute attr = knownAttributes[i];
+                String[] events = attr.getEvents();
+                if ((events != null) &&
+                    (events.length > 0) &&
+                    (behaviorEventName.equals(events[0]))) {
+
+                        renderHandler(context, 
+                                      component,
+                                      null,
+                                      attr.getName(),
+                                      null,
+                                      behaviorEventName,
+                                      null,
+                                      false,
+                                      false);
+                }
+            }
+ 
+
+        }
+    }
+
+    /**
+     * <p>Loops over all known attributes and attempts to render each one.
+     * @param context the {@link FacesContext} of the current request
+     * @param writer the current writer
+     * @param component the component whose attributes we're rendering
+     * @param knownAttributes an array of pass-through attributes supported by
+     *  this component
+     * @param behaviors the non-null behaviors map for this request.
+     * @throws IOException if an error occurs during the write
+     */
+    private static void renderPassThruAttributesUnoptimized(FacesContext context,
+                                                            ResponseWriter writer,
+                                                            UIComponent component,
+                                                            Attribute[] knownAttributes, 
+                                                            Map<String,List<ClientBehavior>> behaviors)
+    throws IOException {
+
+        boolean isXhtml = RIConstants.XHTML_CONTENT_TYPE.equals(writer.getContentType());
+
+        Map<String, Object> attrMap = component.getAttributes();
+
+        for (Attribute attribute : knownAttributes) {
+            String attrName = attribute.getName();
+            String[] events = attribute.getEvents();
+            boolean hasBehavior = ((events != null) &&
+                                   (events.length > 0) &&
+                                   (behaviors.containsKey(events[0])));
+
+            Object value = attrMap.get(attrName);
+
+            if (value != null && shouldRenderAttribute(value) && !hasBehavior) {
+                writer.writeAttribute(prefixAttribute(attrName, isXhtml),
+                                      value,
+                                      attrName);
+            } else if (hasBehavior) {
+
+                // If we've got a behavior for this attribute,
+                // we may need to chain scripts together, so use 
+                // renderHandler().
+                renderHandler(context, 
+                              component, 
+                              null,
+                              attrName,
+                              value,
+                              events[0],
+                              null,
+                              false,
+                              false);
+            }
+        }
+    }
+
+    /**
+     * <p>Determines if an attribute should be rendered based on the
+     * specified #attributeVal.</p>
+     *
+     * @param attributeVal the attribute value
+     * @return <code>true</code> if and only if #attributeVal is
+     *  an instance of a wrapper for a primitive type and its value is
+     *  equal to the default value for that type as given in the specification.
+     */
+    private static boolean shouldRenderAttribute(Object attributeVal) {
+
+        if (attributeVal instanceof String) {
+            return true;
+        } else if (attributeVal instanceof Boolean &&
+            Boolean.FALSE.equals(attributeVal)) {
+            return false;
+        } else if (attributeVal instanceof Integer &&
+                   (Integer) attributeVal == Integer.MIN_VALUE) {
+            return false;
+        } else if (attributeVal instanceof Double &&
+                   (Double) attributeVal == Double.MIN_VALUE) {
+            return false;
+        } else if (attributeVal instanceof Character &&
+                   (Character) attributeVal
+                   == Character
+                         .MIN_VALUE) {
+            return false;
+        } else if (attributeVal instanceof Float &&
+                   (Float) attributeVal == Float.MIN_VALUE) {
+            return false;
+        } else if (attributeVal instanceof Short &&
+                   (Short) attributeVal == Short.MIN_VALUE) {
+            return false;
+        } else if (attributeVal instanceof Byte &&
+                   (Byte) attributeVal == Byte.MIN_VALUE) {
+            return false;
+        } else if (attributeVal instanceof Long &&
+                   (Long) attributeVal == Long.MIN_VALUE) {
+            return false;
+        }
+        return true;
+
+    }
+
+    /**
+     * <p>This method expects a <code>List</code> of attribute names that are to
+     * be excluded from rendering.  A <code>Renderer</code> may include an attribute name in this
+     * list for exclusion. For example, <code>h:link</code> may use the <code>disabled</code>
+     * attribute with a value of <code>true</code>.  However we don't want <code>disabled</code>
+     * passed through and rendered on the <code>span</code> element as it is invalid HTML.</p>
+     *
+     * @param attributeName the attribute name that is to be tested for exclusion
+     * @param excludedAttributes the list of attribute names that are to be excluded from rendering
+     * @return <code>true</code> if the attribute name is not in the exclude list.
+     */
+    private static boolean isExcludedAttribute(String attributeName, List excludedAttributes) {
+        if (null == excludedAttributes) {
+            return false;
+        }
+        if (excludedAttributes.contains(attributeName)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * <p>This method builds a two element array structure as follows:
+     * Example:
+     *     Given the following accept string:
+     *       text/html; level=1, text/plain; q=0.5
+     *     [0][0] 1  (quality is 1 if none specified)
+     *     [0][1] "text"  (type)
+     *     [0][2] "html; level=1" (subtype)
+     *     [0][3] 1 (level, if specified; null if not)
+     *
+     *     [1][0] .5
+     *     [1][1] "text"
+     *     [1][2] "plain"
+     *     [1][3] (level, if specified; null if not)
+     *
+     * The array is used for comparison purposes in the findMatch method.</p>
+     *
+     * @param accept An accept <code>String</code>
+     * @return an two dimensional array containing content-type/quality info
+     */
+    private static String[][] buildTypeArrayFromString(String accept) {
+        // return if empty
+        if ((accept == null) || (accept.length() == 0)) {
+            return new String[0][0];
+        }
+        // some helper variables
+        StringBuilder typeSubType;
+        String type;
+        String subtype;
+        String level = null;
+        String quality = null;
+        Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+
+        // Parse "types"
+        String[] types = Util.split(appMap, accept, CONTENT_TYPE_DELIMITER);
+        String[][] arrayAccept = new String[types.length][MAX_CONTENT_TYPE_PARTS];
+        int index = -1;
+        for (int i=0; i<types.length; i++) {
+            String token = types[i].trim();
+            index += 1;
+            // Check to see if our accept string contains the delimiter that is used
+            // to add uniqueness to a type/subtype, and/or delimits a qualifier value:
+            //    Example: text/html;level=1,text/html;level=2; q=.5
+            if (token.contains(";")) {
+                String[] typeParts = Util.split(appMap, token, ";");
+                typeSubType = new StringBuilder(typeParts[0].trim());
+                for (int j=1; j<typeParts.length; j++) {
+                    quality = "not set";
+                    token = typeParts[j].trim();
+                    // if "level" is present, make sure it gets included in the "type/subtype"
+                    if (token.contains("level")) {
+                        typeSubType.append(';').append(token);
+                        String[] levelParts = Util.split(appMap, token, "=");
+                        level = levelParts[0].trim();
+                        if (level.equalsIgnoreCase("level")) {
+                            level = levelParts[1].trim();
+                        }
+                    } else {
+                        quality = token;
+                        String[] qualityParts = Util.split(appMap, quality, "=");
+                        quality = qualityParts[0].trim();
+                        if (quality.equalsIgnoreCase("q")) {
+                            quality = qualityParts[1].trim();
+                            break;
+                        } else {
+                            quality = "not set"; // to identifiy that no quality was supplied
+                        }
+                    }
+                }
+            } else {
+                typeSubType = new StringBuilder(token);
+                quality = "not set"; // to identifiy that no quality was supplied
+            }
+            // now split type and subtype
+            if (typeSubType.indexOf(CONTENT_TYPE_SUBTYPE_DELIMITER) >= 0) {
+                String[] typeSubTypeParts = Util.split(appMap, typeSubType.toString(), CONTENT_TYPE_SUBTYPE_DELIMITER);
+                // Apparently there are user-agents that send invalid
+                // Accept headers containing no subtype (i.e. text/).
+                // For those cases, assume "*" for the subtype.
+                if (typeSubTypeParts.length == 1) {
+                    type = typeSubTypeParts[0].trim();
+                    subtype = "*";
+                } else {
+                    type = typeSubTypeParts[0].trim();
+                    subtype = typeSubTypeParts[1].trim();
+                }
+
+            } else {
+                type = typeSubType.toString();
+                subtype = "";
+            }
+            // check quality and assign values
+            if ("not set".equals(quality)) {
+                if (type.equals("*") && subtype.equals("*")) {
+                    quality = "0.01";
+                } else if (!type.equals("*") && subtype.equals("*")) {
+                    quality = "0.02";
+                } else if (type.equals("*") && subtype.length() == 0) {
+                    quality = "0.01";
+                } else {
+                    quality = "1";
+                }
+            }
+            arrayAccept[index][0] = quality;
+            arrayAccept[index][1] = type;
+            arrayAccept[index][2] = subtype;
+            arrayAccept[index][3] = level;
+        }
+        return (arrayAccept);
+    }
+
+    /**
+     * <p>For each server supported type, compare client (browser) specified types.
+     * If a match is found, keep track of the highest quality factor.
+     * The end result is that for all matches, only the one with the highest
+     * quality will be returned.</p>
+     *
+     * @param clientContentTypes An <code>array</code> of accept <code>String</code>
+     * information for the client built from @{link #buildTypeArrayFromString}.
+     * @param serverSupportedContentTypes An <code>array</code> of accept <code>String</code>
+     * information for the server supported types built from @{link #buildTypeArrayFromString}.
+     * @param preferredContentType An <code>array</code> of preferred content type information.
+     * @return An <code>array</code> containing the parts of the preferred content type for the
+     * client.  The information is stored as outlined in @{link #buildTypeArrayFromString}.
+     */
+    private static String[][] findMatch(String[][] clientContentTypes,
+                                        String[][] serverSupportedContentTypes,
+                                        String[][] preferredContentType) {
+
+        List<String[]> resultList = new ArrayList<String[]>(serverSupportedContentTypes.length);
+
+        // the highest quality
+        double highestQFactor = 0;
+        // the record with the highest quality
+        int idx = 0;
+        for (int sidx = 0, slen = serverSupportedContentTypes.length; sidx < slen; sidx++) {
+            // get server type
+            String serverType = serverSupportedContentTypes[sidx][1];
+            if (serverType != null) {
+                for (int cidx = 0, clen = clientContentTypes.length; cidx < clen; cidx++) {
+                    // get browser type
+                    String browserType = clientContentTypes[cidx][1];
+                    if (browserType != null) {
+                        // compare them and check for wildcard
+                        if ((browserType.equalsIgnoreCase(serverType)) || (browserType.equals("*"))) {
+                            // types are equal or browser type is wildcard - compare subtypes
+                            if ((clientContentTypes[cidx][2].equalsIgnoreCase(
+                                serverSupportedContentTypes[sidx][2])) ||
+                                (clientContentTypes[cidx][2].equals("*"))) {
+                                // subtypes are equal or browser subtype is wildcard
+                                // found match: multiplicate qualities and add to result array
+                                // if there was a level associated, this gets higher precedence, so
+                                // factor in the level in the calculation.
+                                double cLevel = 0.0;
+                                double sLevel = 0.0;
+                                if (clientContentTypes[cidx][3] != null) {
+                                    cLevel = (Double.parseDouble(clientContentTypes[cidx][3]))*.10;
+                                }
+                                if (serverSupportedContentTypes[sidx][3] != null) {
+                                    sLevel = (Double.parseDouble(serverSupportedContentTypes[sidx][3]))*.10;
+                                }
+                                double cQfactor = Double.parseDouble(clientContentTypes[cidx][0]) + cLevel;
+                                double sQfactor = Double.parseDouble(serverSupportedContentTypes[sidx][0]) + sLevel;
+                                double resultQuality = cQfactor * sQfactor;
+
+                                String[] curResult = new String[MAX_CONTENT_TYPE_PARTS];
+                                resultList.add(curResult);
+                                curResult[0] = String.valueOf(resultQuality);
+
+                                if (clientContentTypes[cidx][2].equals("*")) {
+                                    // browser subtype is wildcard
+                                    // return type and subtype (wildcard)
+                                    curResult[1] = clientContentTypes[cidx][1];
+                                    curResult[2] = clientContentTypes[cidx][2];
+                                } else {
+                                    // return server type and subtype
+                                    curResult[1] = serverSupportedContentTypes[sidx][1];
+                                    curResult[2] = serverSupportedContentTypes[sidx][2];
+                                    curResult[3] = serverSupportedContentTypes[sidx][3];
+                                }
+                                // check if this was the highest factor
+                                if (resultQuality > highestQFactor) {
+                                    idx = resultList.size() - 1;
+                                    highestQFactor = resultQuality;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // First, determine if we have a type that has the highest quality factor that
+        // also matches the preferred type (if there is one):
+        String[][] match = new String[1][3];
+        if (preferredContentType.length != 0 && preferredContentType[0][0] != null) {
+            BigDecimal highestQual = BigDecimal.valueOf(highestQFactor);
+            for (int i = 0, len = resultList.size(); i < len; i++) {
+                String[] result = resultList.get(i);
+                if ((BigDecimal.valueOf(Double.parseDouble(result[0])).compareTo(highestQual) == 0)
+                    && (result[1]).equals(preferredContentType[0][1])
+                    && (result[2]).equals(preferredContentType[0][2])) {
+                    match[0][0] = result[0];
+                    match[0][1] = result[1];
+                    match[0][2] = result[2];
+                    return match;
+                }
+            }
+        }
+
+        if (!resultList.isEmpty()) {
+            String[] fallBack = resultList.get(idx);
+            match[0][0] = fallBack[0];
+            match[0][1] = fallBack[1];
+            match[0][2] = fallBack[2];
+        }
+
+        return match;
+    }
+
+    /**
+     * <p>Replaces all occurrences of <code>-</code> with <code>$_</code>.</p>
+     *
+     * @param origIdentifier the original identifer that needs to be
+     *  'ECMA-ized'
+     * @return an ECMA valid identifer
+     */
+    public static String createValidECMAIdentifier(String origIdentifier) {
+        return origIdentifier.replace("-", "$_");
+    }
+
+
+    /**
+     * <p>Renders the Javascript necessary to add and remove request
+     * parameters to the current form.</p>
+     * @param context the <code>FacesContext</code> for the current request
+     * @throws java.io.IOException if an error occurs writing to the response
+     */
+    public static void renderJsfJs(FacesContext context) throws IOException {
+
+
+        if (hasScriptBeenRendered(context)) {
+            // Already included, return
+            return;
+        }
+
+        final String name = "jsf.js";
+        final String library = "javax.faces";
+
+        if (hasResourceBeenInstalled(context, name, library)) {
+            setScriptAsRendered(context);
+            return;
+        }
+        // Since we've now determined that it's not in the page, we need to add it.
+
+        ResourceHandler handler = context.getApplication().getResourceHandler();
+        Resource resource = handler.createResource(name, library);
+        ResponseWriter writer = context.getResponseWriter();
+        writer.write('\n');
+        writer.startElement("script", null);
+        writer.writeAttribute("type", "text/javascript", null);
+        writer.writeAttribute("src", ((resource != null) ? resource.getRequestPath() : ""), null);
+        writer.endElement("script");
+        writer.append('\r');
+        writer.append('\n');
+
+        // Set the context to record script as included
+        setScriptAsRendered(context);
+    }
+
+
+    public static boolean hasResourceBeenInstalled(FacesContext ctx,
+                                                   String name,
+                                                   String library) {
+
+        UIViewRoot viewRoot = ctx.getViewRoot();
+        ListIterator iter = (viewRoot.getComponentResources(ctx, "head")).listIterator();
+        while (iter.hasNext()) {
+            UIComponent resource = (UIComponent)iter.next();
+            String rname = (String)resource.getAttributes().get("name");
+            String rlibrary = (String)resource.getAttributes().get("library");
+            if (name.equals(rname) && library.equals(rlibrary)) {
+                // Set the context to record script as included
+                return true;
+            }
+        }
+        iter = (viewRoot.getComponentResources(ctx, "body")).listIterator();
+        while (iter.hasNext()) {
+            UIComponent resource = (UIComponent)iter.next();
+            String rname = (String)resource.getAttributes().get("name");
+            String rlibrary = (String)resource.getAttributes().get("library");
+            if (name.equals(rname) && library.equals(rlibrary)) {
+                // Set the context to record script as included
+                return true;
+            }
+        }
+        iter = (viewRoot.getComponentResources(ctx, "form")).listIterator();
+        while (iter.hasNext()) {
+            UIComponent resource = (UIComponent)iter.next();
+            String rname = (String)resource.getAttributes().get("name");
+            String rlibrary = (String)resource.getAttributes().get("library");
+            if (name.equals(rname) && library.equals(rlibrary)) {
+                // Set the context to record script as included
+                return true;
+            }
+        }
+
+        return false;
+
+    }
+
+
+    public static void renderUnhandledMessages(FacesContext ctx) {
+
+        if (ctx.isProjectStage(ProjectStage.Development)) {
+            Application app = ctx.getApplication();
+            HtmlMessages messages = (HtmlMessages) app.createComponent(HtmlMessages.COMPONENT_TYPE);
+            messages.setId("javax_faces_developmentstage_messages");
+            Renderer messagesRenderer = ctx.getRenderKit().getRenderer(HtmlMessages.COMPONENT_FAMILY, "javax.faces.Messages");
+            messages.setErrorStyle("Color: red");
+            messages.setWarnStyle("Color: orange");
+            messages.setInfoStyle("Color: blue");
+            messages.setFatalStyle("Color: red");
+            messages.setTooltip(true);
+            messages.setTitle("Project Stage[Development]: Unhandled Messages");
+            messages.setRedisplay(false);
+            try {
+                messagesRenderer.encodeBegin(ctx, messages);
+                messagesRenderer.encodeEnd(ctx, messages);
+            } catch (IOException ioe) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, ioe.toString(), ioe);
+                }
+            }
+        } else {
+            Iterator<String> clientIds = ctx.getClientIdsWithMessages();
+            int messageCount = 0;
+            if (clientIds.hasNext()) {
+                //Display each message possibly not displayed.
+                StringBuilder builder = new StringBuilder();
+                while (clientIds.hasNext()) {
+                    String clientId = clientIds.next();
+                    Iterator<FacesMessage> messages =
+                          ctx.getMessages(clientId);
+                    while (messages.hasNext()) {
+                        FacesMessage message = messages.next();
+                        if (message.isRendered()) {
+                            continue;
+                        }
+                        messageCount++;
+                        builder.append("\n");
+                        builder.append("sourceId=").append(clientId);
+                        builder.append("[severity=(")
+                              .append(message.getSeverity());
+                        builder.append("), summary=(")
+                              .append(message.getSummary());
+                        builder.append("), detail=(")
+                              .append(message.getDetail()).append(")]");
+                    }
+                }
+                if (messageCount > 0) {
+                	if (LOGGER.isLoggable(Level.INFO)) {
+                		LOGGER.log(Level.INFO, "jsf.non_displayed_message", builder.toString());
+                	}
+                }
+            }
+        }
+
+    }
+
+    public static  void renderHtmlErrorPage(FacesContext ctx, FacesException fe) {
+
+        ExternalContext extContext = ctx.getExternalContext();
+        if (!extContext.isResponseCommitted()) {
+            extContext.setResponseContentType("text/html; charset=UTF-8");
+            try {
+                Writer w = extContext.getResponseOutputWriter();
+                if (ctx.isProjectStage(ProjectStage.Development)) {
+                    DevTools.debugHtml(w, ctx, fe.getCause());
+                } else {
+                    w.write("Please see your server log for the actual error");
+                }
+                w.flush();
+            } catch (IOException ioe) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "Unable to generate Facelets error page.",
+                               ioe);
+                }
+            }
+            ctx.responseComplete();
+        } else {
+        	if (LOGGER.isLoggable(Level.WARNING)) {
+	            LOGGER.log(Level.WARNING,
+	                       "jsf.facelets.error.page.response.committed");
+        	}
+        	if (LOGGER.isLoggable(Level.SEVERE)) {
+        		LOGGER.log(Level.SEVERE, fe.toString(), fe);
+        	}
+        }
+
+    }
+
+    // Check the request parameters to see whether an action event has
+    // been triggered either via jsf.ajax.request() or via a submitting
+    // behavior.
+    public static boolean isPartialOrBehaviorAction(FacesContext context,
+                                                    String clientId) {
+        if ((clientId == null) || (clientId.length() == 0)) {
+            return false;
+        }
+
+        ExternalContext external = context.getExternalContext();
+        Map<String, String> params = external.getRequestParameterMap();
+
+        String source = params.get("javax.faces.source");
+        if (!clientId.equals(source)) {
+            return false;
+        }
+
+        // First check for a Behavior action event.
+        String behaviorEvent = params.get("javax.faces.behavior.event");
+        if (null != behaviorEvent) {
+            return ("action".equals(behaviorEvent));
+        }
+
+        // Not a Behavior-related request.  Check for jsf.ajax.request()
+        // request params.
+        String partialEvent = params.get("javax.faces.partial.event");
+
+        return ("click".equals(partialEvent));
+    }
+
+
+   /**
+     * <p>Utility method to return the client ID of the parent form.</p>
+     *
+     * @param component typically a command component
+     * @param context   the <code>FacesContext</code> for the current request
+     *
+     * @return the client ID of the parent form, if any
+     */
+    public static String getFormClientId(UIComponent component,
+                                   FacesContext context) {
+        UIForm form = getForm(component, context);
+        if (form != null) {
+            return form.getClientId(context);
+        }
+
+        return null;
+    }
+
+    
+       /**
+     * <p>Utility method to return the client ID of the parent form.</p>
+     *
+     * @param component typically a command component
+     * @param context   the <code>FacesContext</code> for the current request
+     *
+     * @return the parent form, if any
+     */
+    public static UIForm getForm(UIComponent component,
+                                   FacesContext context) {
+
+        UIComponent parent = component.getParent();
+        while (parent != null) {
+            if (parent instanceof UIForm) {
+                break;
+            }
+            parent = parent.getParent();
+        }
+        
+        UIForm form = (UIForm) parent;
+        if (form != null) {
+            return form;
+        }
+
+        return null;
+    }
+    
+    /**
+     * @param context the <code>FacesContext</code> for the current request
+     *
+     * @return <code>true</code> If the <code>add/remove</code> javascript
+     *         has been rendered, otherwise <code>false</code>
+     */
+    public static boolean hasScriptBeenRendered(FacesContext context) {
+
+        return RequestStateManager.containsKey(context, RequestStateManager.SCRIPT_STATE);
+
+    }
+
+
+    /**
+     * <p>Set a flag to indicate that the <code>add/remove</code> javascript
+     * has been rendered for the current form.
+     *
+     * @param context the <code>FacesContext</code> of the current request
+     */
+    public static void setScriptAsRendered(FacesContext context) {
+
+        RequestStateManager.set(context,
+                                RequestStateManager.SCRIPT_STATE,
+                                Boolean.TRUE);
+
+    }
+
+
+    /**
+     * <p>
+     * Determine the path value of an image value for a component such as
+     * UIGraphic or UICommand.
+     * </p>
+     *
+     * @param context the {@link FacesContext} for the current request.
+     * @param component the component to obtain the image information from
+     * @param attrName the attribute name that needs to be queried if the
+     *  name and library attributes are not specified
+     *
+     * @return the encoded path to the image source
+     */
+    public static String getImageSource(FacesContext context, UIComponent component, String attrName) {
+
+        String resName = (String) component.getAttributes().get("name");
+        ResourceHandler handler = context.getApplication().getResourceHandler();
+        if (resName != null) {
+            String libName = (String) component.getAttributes().get("library");
+            WebConfiguration webConfig = WebConfiguration.getInstance();
+
+            if (libName == null && resName.startsWith(webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory))) {
+                if (context.isProjectStage(ProjectStage.Development)) {
+                    String msg = "Illegal path, direct contract references are not allowed: " + resName;
+                    context.addMessage(component.getClientId(context),
+                                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                        msg,
+                                                        msg));
+                }
+                return "RES_NOT_FOUND";
+            }
+
+            Resource res = handler.createResource(resName, libName);
+            if (res == null) {
+                if (context.isProjectStage(ProjectStage.Development)) {
+                    String msg = "Unable to find resource " + (libName == null ? "" : libName + ", ") + resName;
+                    context.addMessage(component.getClientId(context),
+                                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                        msg,
+                                                        msg));
+                }
+                return "RES_NOT_FOUND";
+            } else {
+            	String requestPath = res.getRequestPath();
+            	return context.getExternalContext().encodeResourceURL(requestPath);
+            }
+        } else {
+            
+            String value = (String) component.getAttributes().get(attrName);
+            if (value == null || value.length() == 0) {
+                return "";
+            }
+            WebConfiguration webConfig = WebConfiguration.getInstance();
+            if (value.startsWith(webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory))) {
+                if (context.isProjectStage(ProjectStage.Development)) {
+                    String msg = "Illegal path, direct contract references are not allowed: " + value;
+                    context.addMessage(component.getClientId(context),
+                                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                        msg,
+                                                        msg));
+                }
+                return "RES_NOT_FOUND";
+            }
+            
+            if (handler.isResourceURL(value)) {
+                return value;
+            } else {
+                value = context.getApplication().getViewHandler().
+                      getResourceURL(context, value);
+                return (context.getExternalContext().encodeResourceURL(value));
+            }
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+
+    // Appends a script to a jsf.util.chain() call
+    private static void appendScriptToChain(StringBuilder builder, 
+                                               String script) {
+
+        if ((script == null) || (script.length() == 0)) {
+            return;
+        }
+
+        if (builder.length() == 0) {
+            builder.append("jsf.util.chain(this,event,");
+        }
+
+        if (builder.charAt(builder.length() - 1) != ',')
+            builder.append(',');
+
+        appendQuotedValue(builder, script);
+    }
+
+    // Appends an name/value property pair to a JSON object.  Assumes
+    // object has already been opened by the caller.  The value will
+    // be quoted (ie. wrapped in single quotes and escaped appropriately).
+    public static void appendProperty(StringBuilder builder, 
+                                      String name,
+                                      Object value) {
+        appendProperty(builder, name, value, true);
+    }
+
+    // Appends an name/value property pair to a JSON object.  Assumes
+    // object has already been opened by the caller.
+    public static void appendProperty(StringBuilder builder, 
+                                      String name,
+                                      Object value,
+                                      boolean quoteValue) {
+
+        if ((null == name) || (name.length() == 0))
+            throw new IllegalArgumentException();
+
+
+        char lastChar = builder.charAt(builder.length() - 1);
+        if ((lastChar != ',') && (lastChar != '{'))
+            builder.append(',');
+
+        RenderKitUtils.appendQuotedValue(builder, name);
+        builder.append(":");
+
+        if (value == null) {
+            builder.append("''");
+        } else if (quoteValue) {
+            RenderKitUtils.appendQuotedValue(builder, value.toString());
+        } else {
+            builder.append(value.toString());
+        }
+    }
+
+    // Append a script to the chain, escaping any single quotes, since
+    // our script content is itself nested within single quotes.
+    private static void appendQuotedValue(StringBuilder builder, 
+                                          String script) {
+
+        builder.append("'");
+
+        int length = script.length();
+
+        for (int i = 0; i < length; i++) {
+            char c = script.charAt(i);
+
+            if (c == '\'' || c == '\\') {
+                builder.append('\\');
+            } 
+
+            builder.append(c);
+        }
+
+        builder.append("'");
+    }
+
+    // Appends one or more behavior scripts a jsf.util.chain() call
+    private static boolean appendBehaviorsToChain(StringBuilder builder,
+                                                  FacesContext context, 
+                                                  UIComponent component,
+                                                  List<ClientBehavior> behaviors,
+                                                  String behaviorEventName,
+                                                  Collection<ClientBehaviorContext.Parameter> params) {
+
+        if ((behaviors == null) || (behaviors.isEmpty())) {
+            return false;
+        }
+
+        ClientBehaviorContext bContext = createClientBehaviorContext(context,
+                                                         component,
+                                                         behaviorEventName,
+                                                         params);
+
+        boolean submitting = false;
+
+        for (ClientBehavior behavior : behaviors) {
+            String script = behavior.getScript(bContext);
+            if ((script != null) && (script.length() > 0)) {
+                appendScriptToChain(builder, script);
+
+                if (isSubmitting(behavior)) {
+                    submitting = true;
+               }
+            }
+        }
+
+        return submitting;
+    }
+
+    // Given a behaviors Map with a single entry, returns the event name
+    // for that entry.  Or, if no entries, returns null.  Used by 
+    // renderPassThruAttributesOptimized.
+    private static String getSingleBehaviorEventName(Map<String, List<ClientBehavior>> behaviors) {
+        assert(behaviors != null);
+
+        int size = behaviors.size();
+        if (size == 0) {
+            return null;
+        }
+
+        // If we made it this far, we should have a single
+        // entry in the behaviors map.
+        assert(size == 1);
+
+        Iterator<String> keys = behaviors.keySet().iterator();
+        assert(keys.hasNext());
+
+        return keys.next();
+    }
+
+    // Tests whether the specified Attribute matches to specified
+    // behavior event name.  Used by renderPassThruAttributesOptimized.
+    private static boolean isBehaviorEventAttribute(Attribute attr,
+                                                    String behaviorEventName) {
+
+      String[] events = attr.getEvents();
+
+      return ((behaviorEventName != null) &&
+              (events != null) &&
+              (events.length > 0) &&
+              (behaviorEventName.equals(events[0])));
+    }
+
+    // Ensures that the user-specified DOM event handler script
+    // is non-empty, and trimmed if necessary.
+    private static String getNonEmptyUserHandler(Object handlerObject) {
+
+        String handler = null;
+
+        if (null != handlerObject) {
+            handler = handlerObject.toString();
+            handler = handler.trim();
+
+            if (handler.length() == 0)
+                handler = null;
+        }
+
+        return handler;
+    }
+
+    // Returns the Behaviors for the specified component/event name,
+    // or null if no Behaviors are available
+    private static List<ClientBehavior> getClientBehaviors(UIComponent component,
+                                               String behaviorEventName) {
+
+        if (component instanceof ClientBehaviorHolder) {
+            ClientBehaviorHolder bHolder = (ClientBehaviorHolder)component;
+            Map <String, List <ClientBehavior>> behaviors = bHolder.getClientBehaviors();
+            if (null != behaviors) {
+                return behaviors.get(behaviorEventName);
+            }
+        }
+
+        return null;
+    }
+
+    // Returns a submit handler - ie. a script that calls
+    // mojara.jsfcljs()
+    private static String getSubmitHandler(FacesContext context,
+                                           UIComponent component,
+                                           Collection<ClientBehaviorContext.Parameter> params,
+                                           String submitTarget,
+                                           boolean preventDefault) {
+
+        StringBuilder builder = new StringBuilder(256);
+
+        String formClientId = getFormClientId(component, context);
+        String componentClientId = component.getClientId(context);
+
+        builder.append("mojarra.jsfcljs(document.getElementById('");
+        builder.append(formClientId);
+        builder.append("'),{");
+
+        appendProperty(builder, componentClientId, componentClientId);
+
+        if ((null != params) && (!params.isEmpty())) {
+            for (ClientBehaviorContext.Parameter param : params) {
+                appendProperty(builder, param.getName(), param.getValue());
+            }
+        }
+
+        builder.append("},'");
+
+        if (submitTarget != null) {
+            builder.append(submitTarget);
+        }
+
+        builder.append("')");
+
+        if (preventDefault) {
+            builder.append(";return false");
+        }
+
+        return builder.toString();
+    }
+
+    // Chains together a number of Behavior scripts with a user handler
+    // script.
+    private static String getChainedHandler(FacesContext context,
+                                            UIComponent component,
+                                            List<ClientBehavior> behaviors,
+                                            Collection<ClientBehaviorContext.Parameter> params,
+                                            String behaviorEventName,
+                                            String userHandler,
+                                            String submitTarget,
+                                            boolean needsSubmit) {
+
+
+        // Hard to pre-compute builder initial capacity
+        StringBuilder builder = new StringBuilder(100);
+
+        appendScriptToChain(builder, userHandler);
+
+        boolean  submitting = appendBehaviorsToChain(builder,
+                                                     context,
+                                                     component, 
+                                                     behaviors, 
+                                                     behaviorEventName,
+                                                     params);
+    
+
+
+        boolean hasParams = ((null != params) && !params.isEmpty());
+
+        // If we've got parameters but we didn't render a "submitting"
+        // behavior script, we need to explicitly render a submit script.
+        if (!submitting && (hasParams || needsSubmit)) {
+            String submitHandler = getSubmitHandler(context, 
+                                                    component,
+                                                    params,
+                                                    submitTarget,
+                                                    false);
+
+            appendScriptToChain(builder, submitHandler);
+
+            // We are now submitting since we've rendered a submit script.
+            submitting = true;
+        }
+
+        if (builder.length() == 0) {
+            return null;
+        }
+
+        builder.append(")");
+
+        // If we're submitting (either via a behavior, or by rendering
+        // a submit script), we need to return false to prevent the
+        // default button/link action.
+        if (submitting &&
+                ("action".equals(behaviorEventName) ||
+                 "click".equals(behaviorEventName))) {
+            builder.append(";return false");
+        }
+
+        return builder.toString();
+    }
+
+    // Returns the script for a single Behavior
+    private static String getSingleBehaviorHandler(FacesContext context,
+                                                   UIComponent component,
+                                                   ClientBehavior behavior,
+                                                   Collection<ClientBehaviorContext.Parameter> params,
+                                                   String behaviorEventName,
+                                                   String submitTarget,
+                                                   boolean needsSubmit) {
+
+        ClientBehaviorContext bContext = createClientBehaviorContext(context,
+                                                         component,
+                                                         behaviorEventName,
+                                                         params);
+
+        String script = behavior.getScript(bContext);
+
+        boolean preventDefault = ((needsSubmit || isSubmitting(behavior)) &&
+                                  (component instanceof ActionSource || component instanceof ActionSource2));
+
+         if (script == null) {
+             if (needsSubmit) {
+                 script = getSubmitHandler(context, 
+                                           component,
+                                           params,
+                                           submitTarget,
+                                           preventDefault);
+             }
+         }
+         else if (preventDefault) {
+             script = script +  ";return false";
+         }
+
+         return script;
+    }
+
+    // Creates a ClientBehaviorContext with the specified properties.
+    private static ClientBehaviorContext createClientBehaviorContext(FacesContext context,
+                                                         UIComponent component,
+                                                         String behaviorEventName,
+                                                         Collection<ClientBehaviorContext.Parameter> params) {
+
+    return ClientBehaviorContext.createClientBehaviorContext(context,
+                                                 component,
+                                                 behaviorEventName,
+                                                 null,
+                                                 params);
+    }
+
+    // Tests whether the specified behavior is submitting
+    private static boolean isSubmitting(ClientBehavior behavior) {
+        return behavior.getHints().contains(ClientBehaviorHint.SUBMITTING);
+    }
+
+    /**
+     * Renders a handler script, which may require chaining together
+     * the user-specified event handler, any scripts required by attached 
+     * Behaviors, and also possibly the mojarra.jsfcljs() "submit" script.
+     * @param context the FacesContext for this request.
+     * @param component the UIComponent that we are rendering
+     * @param params any parameters that should be included by "submitting"
+     *        scripts.
+     * @param handlerName the name of the handler attribute to render (eg.
+     *        "onclick" or "ommouseover")
+     * @param handlerValue the user-specified value for the handler attribute
+     * @param behaviorEventName the name of the behavior event that corresponds
+     *        to this handler (eg. "action" or "mouseover").
+     * @param needsSubmit indicates whether the mojarra.jsfcljs() 
+     *        "submit" script is required by the component.  Most components 
+     *        do not need this, either because they submit themselves
+     *        (eg. commandButton), or because they do not perform submits
+     *        (eg. non-command components).  This flag is mainly here for
+     *        the commandLink case, where we need to render the submit
+     *        script to make the link submit.
+     */
+    private static void renderHandler(FacesContext context,
+                                      UIComponent component,
+                                      Collection<ClientBehaviorContext.Parameter> params,
+                                      String handlerName,
+                                      Object handlerValue,
+                                      String behaviorEventName,
+                                      String submitTarget,
+                                      boolean needsSubmit,
+                                      boolean includeExec)
+        throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        String userHandler = getNonEmptyUserHandler(handlerValue);
+        List<ClientBehavior> behaviors = getClientBehaviors(component, behaviorEventName);
+
+        // Don't render behavior scripts if component is disabled
+        if ((null != behaviors) && 
+            (behaviors.size() > 0) && 
+             Util.componentIsDisabled(component)) {
+            behaviors = null;
+        }
+
+        if (params == null) {
+            params = Collections.emptyList();
+        }
+        String handler = null;
+        switch (getHandlerType(behaviors, params, userHandler, needsSubmit, includeExec)) {
+        
+            case USER_HANDLER_ONLY:
+                handler = userHandler;
+                break;
+
+            case SINGLE_BEHAVIOR_ONLY:
+                handler = getSingleBehaviorHandler(context, 
+                                                   component,
+                                                   behaviors.get(0),
+                                                   params,
+                                                   behaviorEventName,
+                                                   submitTarget,
+                                                   needsSubmit);
+                break;
+
+            case SUBMIT_ONLY:
+                handler = getSubmitHandler(context, 
+                                           component,
+                                           params,
+                                           submitTarget,
+                                           true);
+                break;
+
+            case CHAIN:
+                handler = getChainedHandler(context,
+                                            component,
+                                            behaviors,
+                                            params,
+                                            behaviorEventName,
+                                            userHandler,
+                                            submitTarget,
+                                            needsSubmit);
+                break;
+            default:
+                assert(false);
+        }
+
+
+        writer.writeAttribute(handlerName, handler, null);
+    }
+
+
+    // Determines the type of handler to render based on what sorts of
+    // scripts we need to render/chain.
+    private static HandlerType getHandlerType(List<ClientBehavior> behaviors,
+                                              Collection<ClientBehaviorContext.Parameter> params,
+                                              String userHandler,
+                                              boolean needsSubmit,
+                                              boolean includeExec) {
+
+        if ((behaviors == null) || (behaviors.isEmpty())) {
+
+            // No behaviors and no params means user handler only,
+            // if we have a param only because of includeExec while having
+            // no behaviors, also, user handler only
+            if ((params.isEmpty() && !needsSubmit) || includeExec)
+                return HandlerType.USER_HANDLER_ONLY;
+
+            // We've got params.  If we've also got a user handler, we need 
+            // to chain.  Otherwise, we only render the submit script.
+            return (userHandler == null) ? HandlerType.SUBMIT_ONLY :
+                                           HandlerType.CHAIN;
+        }
+
+
+        // We've got behaviors.  See if we can optimize for the single
+        // behavior case.  We can only do this if we don't have a user
+        // handler.
+        if ((behaviors.size() == 1) && (userHandler == null)) {
+            ClientBehavior behavior = behaviors.get(0);
+
+            // If we've got a submitting behavior, then it will handle
+            // submitting the params.  If not, then we need to use
+            // a submit script to handle the params.
+            if (isSubmitting(behavior) || ((params.isEmpty()) && !needsSubmit))
+                return HandlerType.SINGLE_BEHAVIOR_ONLY;            
+        }
+
+        return HandlerType.CHAIN;
+    }
+
+    // Little utility enum that we use to identify the type of
+    // handler that we are going to render.
+    private static enum HandlerType {
+
+        // Indicates that we only have a user handler - nothing else
+        USER_HANDLER_ONLY,
+
+        // Indicates that we only have a single behavior - no chaining
+        SINGLE_BEHAVIOR_ONLY,
+
+        // Indicates that we only render the mojarra.jsfcljs() script
+       SUBMIT_ONLY,
+
+        // Indicates that we've got a chain
+        CHAIN
+    }
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+} // END RenderKitUtils
diff --git a/com/sun/faces/renderkit/ResponseStateManagerImpl.java b/com/sun/faces/renderkit/ResponseStateManagerImpl.java
new file mode 100644
index 0000000..a7d9ae8
--- /dev/null
+++ b/com/sun/faces/renderkit/ResponseStateManagerImpl.java
@@ -0,0 +1,170 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import java.io.IOException;
+
+import javax.faces.FacesException;
+import javax.faces.application.StateManager;
+import javax.faces.context.FacesContext;
+import javax.faces.render.ResponseStateManager;
+
+import com.sun.faces.config.WebConfiguration;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.StateSavingMethod;
+import com.sun.faces.util.RequestStateManager;
+
+
+/**
+ * <p>A <code>ResonseStateManager</code> implementation
+ * for the default HTML render kit.
+ */
+public class ResponseStateManagerImpl extends ResponseStateManager {
+
+    private StateHelper helper;
+
+    public ResponseStateManagerImpl() {
+
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        String stateMode =
+              webConfig.getOptionValue(StateSavingMethod);
+        helper = ((StateManager.STATE_SAVING_METHOD_CLIENT.equalsIgnoreCase(stateMode)
+                   ? new ClientSideStateHelper()
+                   : new ServerSideStateHelper()));
+
+    }
+
+
+    // --------------------------------------- Methods from ResponseStateManager
+
+
+    /**
+     * @see ResponseStateManager#isPostback(javax.faces.context.FacesContext) 
+     */
+    @Override
+    public boolean isPostback(FacesContext context) {
+
+        return context.getExternalContext().getRequestParameterMap().
+              containsKey(ResponseStateManager.VIEW_STATE_PARAM);
+
+    }
+
+    @Override
+    public String getCryptographicallyStrongTokenFromSession(FacesContext context) {
+        return helper.getCryptographicallyStrongTokenFromSession(context);
+    }
+
+    /**
+     * @see ResponseStateManager#getState(javax.faces.context.FacesContext, java.lang.String) 
+     */
+    @Override
+    public Object getState(FacesContext context, String viewId) {
+
+        Object state =
+              RequestStateManager.get(context, RequestStateManager.FACES_VIEW_STATE);
+        if (state == null) {
+            try {
+                state = helper.getState(context, viewId);
+                if (state != null) {
+                    RequestStateManager.set(context,
+                                            RequestStateManager.FACES_VIEW_STATE,
+                                            state);
+                }
+            } catch (IOException e) {
+                throw new FacesException(e);
+            }
+        }
+        return state;
+
+    }
+
+
+    /**
+     * @see ResponseStateManager#writeState(javax.faces.context.FacesContext, java.lang.Object) 
+     */
+    @Override
+    public void writeState(FacesContext context, Object state)
+          throws IOException {
+
+        helper.writeState(context, state, null);
+
+    }
+
+
+    /**
+     * @see ResponseStateManager#getViewState(javax.faces.context.FacesContext, java.lang.Object) 
+     */
+    @Override
+    public String getViewState(FacesContext context, Object state) {
+
+        StringBuilder sb = new StringBuilder(32);
+        try {
+            helper.writeState(context, state, sb);
+        } catch (IOException e) {
+            throw new FacesException(e);
+        }
+        return sb.toString();
+
+    }
+
+
+    @SuppressWarnings({"deprecation"})
+    @Override
+    public Object getTreeStructureToRestore(FacesContext context, String viewId) {
+
+        Object[] state = (Object[]) getState(context, viewId);
+        if (state != null) {
+            return state[0];
+        }
+        return null;
+
+    }
+
+    /**
+     * @param facesContext the Faces context.
+     * @param viewId the view id.
+     * @return true if "stateless" was found, false otherwise.
+     * @throws IllegalStateException when the request is not a postback.
+     */
+    @Override
+    public boolean isStateless(FacesContext facesContext, String viewId) {
+        return helper.isStateless(facesContext, viewId);
+    }
+} 
diff --git a/com/sun/faces/renderkit/SelectItemsIterator.java b/com/sun/faces/renderkit/SelectItemsIterator.java
new file mode 100644
index 0000000..8481eca
--- /dev/null
+++ b/com/sun/faces/renderkit/SelectItemsIterator.java
@@ -0,0 +1,680 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Map;
+import java.util.ListIterator;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Array;
+
+import javax.faces.model.SelectItem;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectItem;
+import javax.faces.component.UISelectItems;
+import javax.faces.component.UISelectMany;
+import javax.faces.component.UISelectOne;
+
+
+/**
+ * <p>Package private class for iterating over the set of {@link SelectItem}s
+ * for a parent {@link UISelectMany} or {@link UISelectOne}.</p>
+ *
+ * // RELEASE_PENDING (rlubke,driscoll) performanc review
+ */
+public final class SelectItemsIterator<T extends SelectItem> implements Iterator<SelectItem> {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct an iterator instance for the specified parent component.</p>
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param parent The parent {@link UIComponent} whose children will be
+     *  processed
+     */
+    public SelectItemsIterator(FacesContext ctx, UIComponent parent) {
+
+        kids = parent.getChildren().listIterator();
+        this.ctx = ctx;
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    /**
+     * <p>Iterator over the SelectItem elements pointed at by a
+     * <code>UISelectItems</code> component, or <code>null</code>.</p>
+     */
+    private ComponentAwareSelectItemIterator<SelectItem> items;
+
+
+    /**
+     * <p>Iterator over the children of the parent component.</p>
+     */
+    private ListIterator<UIComponent> kids;
+
+
+    /**
+     * Expose single SelectItems via an Iterator.  This iterator will be
+     * reset/reused for each individual SelectItem instance encountered.
+     */
+    private SingleElementIterator singleItemIterator;
+
+
+    /**
+     * The {@link FacesContext} for the current request.
+     */
+    private FacesContext ctx;
+
+
+    // -------------------------------------------------------- Iterator Methods
+
+
+    /**
+     * <p>Return <code>true</code> if the iteration has more elements.</p>
+     */
+    public boolean hasNext() {
+
+        if (items != null) {
+            if (items.hasNext()) {
+                return (true);
+            } else {
+                items = null;
+            }
+        }
+        Object next = findNextValidChild();
+        while (next != null) {
+            initializeItems(next);
+            if (items != null) {
+                return true;
+            } else {
+                next = findNextValidChild();
+            }
+        }
+        return false;
+
+    }
+
+
+    /**
+     * <p>Return the next element in the iteration.</p>
+     *
+     * @throws NoSuchElementException if there are no more elements
+     */
+    @SuppressWarnings({"unchecked"})
+    public SelectItem next() {
+
+        if (!hasNext()) {
+            throw new NoSuchElementException();
+        }
+        if (items != null) {
+            return (items.next());
+        }
+        return next();
+
+    }
+    
+    public UIComponent currentSelectComponent() {
+        UIComponent result = items.currentSelectComponent();
+        
+        return result;
+    }
+
+
+    /**
+     * <p>Throw UnsupportedOperationException.</p>
+     */
+    public void remove() {
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>
+     * Initializes the <code>items</code> instance variable with an
+     * <code>Iterator</code> appropriate to the UISelectItem(s) value.
+     * </p>
+     */
+    private void initializeItems(Object kid) {
+
+        if (kid instanceof UISelectItem) {
+            UISelectItem ui = (UISelectItem) kid;
+            SelectItem item = (SelectItem) ui.getValue();
+            if (item == null) {
+                item = new SelectItem(ui.getItemValue(),
+                                      ui.getItemLabel(),
+                                      ui.getItemDescription(),
+                                      ui.isItemDisabled(),
+                                      ui.isItemEscaped(),
+                                      ui.isNoSelectionOption());
+            }
+            updateSingeItemIterator(ui, item);
+            items = singleItemIterator;
+        } else if (kid instanceof UISelectItems) {
+            UISelectItems ui = (UISelectItems) kid;
+            Object value = ui.getValue();
+            if (value != null) {
+                if (value instanceof SelectItem) {
+                    updateSingeItemIterator(ui, (SelectItem) value);
+                    items = singleItemIterator;
+                } else if (value.getClass().isArray()) {
+                    items = new ArrayIterator(ctx, (UISelectItems) kid, value);
+                } else if (value instanceof Iterable) {
+                    items = new IterableItemIterator(ctx,
+                                                     (UISelectItems) kid,
+                                                     (Iterable<?>) value);
+                } else if (value instanceof Map) {
+                    items = new MapIterator((Map) value, ui.getParent());
+                } else {
+                    throw new IllegalArgumentException();
+                }
+            }
+            if (items != null && !items.hasNext()) {
+                items = null;
+            }
+        } 
+
+    }
+
+
+    /**
+     * @return the next valid child for processing
+     */
+    private Object findNextValidChild() {
+
+        if (kids.hasNext()) {
+            Object next = kids.next();
+            while (kids.hasNext() && !(next instanceof UISelectItem || next instanceof UISelectItems)) {
+                next = kids.next();
+            }
+            if (next instanceof UISelectItem || next instanceof UISelectItems) {
+                return next;
+            }
+        }
+        return null;
+
+    }
+
+
+    /**
+     * Update the <code>singleItemIterator</code> with the provided
+     * <code>item</code>
+     * @param item the {@link SelectItem} to expose as an Iterator
+     */
+    private void updateSingeItemIterator(UIComponent selectComponent, SelectItem item) {
+
+        if (singleItemIterator == null) {
+            singleItemIterator = new SingleElementIterator();
+        }
+        singleItemIterator.updateItem(selectComponent, item);
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Exposes single {@link SelectItem} instances as an Iterator.
+     */
+    private static final class SingleElementIterator implements ComponentAwareSelectItemIterator<SelectItem> {
+
+        private SelectItem item;
+        private transient UIComponent selectComponent;
+        private boolean nextCalled;
+
+
+        // ----------------------------------------------- Methods from ComponentAwareSelectItemIterator
+
+        public UIComponent currentSelectComponent() {
+            return selectComponent;
+        }
+        
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return !nextCalled;
+
+        }
+
+
+        public SelectItem next() {
+
+            if (nextCalled) {
+                throw new NoSuchElementException();
+            }
+            nextCalled = true;
+            return item;
+
+        }
+
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        private void updateItem(UIComponent selectComponent, SelectItem item) {
+
+            this.item = item;
+            this.selectComponent = selectComponent;
+            nextCalled = false;
+
+        }
+
+    } // END SingleElementIterator
+
+
+    /**
+     * Iterates over a <code>Map</code> of values exposing each entry as a SelectItem.
+     * Note that this will do so re-using the same SelectItem but changing
+     * the value and label as appropriate.
+     */
+    private static final class MapIterator implements ComponentAwareSelectItemIterator<SelectItem> {
+
+        private SelectItem item = new SelectItem();
+        private Iterator iterator;
+        private transient UIComponent parent;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        private MapIterator(Map map, UIComponent parent) {
+
+            this.iterator = map.entrySet().iterator();
+            this.parent = parent;
+        }
+
+
+        // ----------------------------------------------- Methods from ComponentAwareSelectItemIterator
+
+        public UIComponent currentSelectComponent() {
+            return parent;
+        }
+        
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return iterator.hasNext();
+
+        }
+
+
+        public SelectItem next() {
+
+            Map.Entry entry = (Map.Entry) iterator.next();
+            Object key = entry.getKey();
+            Object value = entry.getValue();
+            item.setLabel(((key != null) ? key.toString() : value.toString()));
+            item.setValue(((value != null) ? value : ""));
+            return item;
+            
+        }
+
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+
+        }
+
+    } // END MapIterator
+
+
+    /**
+     * <p>
+     * Base class to support iterating over Collections or Arrays that may
+     * or may not contain <code>SelectItem</code> instances.
+     * </p>
+     */
+    private static abstract class GenericObjectSelectItemIterator implements ComponentAwareSelectItemIterator<SelectItem> {
+
+        /**
+         * SelectItem that is updated based on the current Object being
+         * iterated over.
+         */
+        private GenericObjectSelectItem genericObjectSI;
+
+        /**
+         * The source <code>UISelectItems</code>.
+         */
+        protected transient UISelectItems sourceComponent;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        protected GenericObjectSelectItemIterator(UISelectItems sourceComponent) {
+
+            this.sourceComponent = sourceComponent;
+
+        }
+
+        // -------------------------------------------------------- Constructors
+
+        public UIComponent currentSelectComponent() {
+            return sourceComponent;
+        }
+        
+        // --------------------------------------------------- Protected Methods
+
+
+        protected SelectItem getSelectItemFor(FacesContext ctx, Object value) {
+
+            if (genericObjectSI == null) {
+                genericObjectSI = new GenericObjectSelectItem(sourceComponent);
+            }
+
+            genericObjectSI.updateItem(ctx, value);
+            return genericObjectSI;
+            
+        }
+
+
+        // ------------------------------------------------------ Nested Classes
+
+
+        /**
+         * A <code>SelectItem</code> implementation to support generating
+         * unique <code>SelectItem</code> values based on <code>ValueExpressions</code>
+         * from the owning {@link UISelectItems} instance.
+         */
+        @SuppressWarnings({"serial"})
+        private static final class GenericObjectSelectItem extends SelectItem {
+
+
+            private static final String VAR = "var";
+            private static final String ITEM_VALUE = "itemValue";
+            private static final String ITEM_LABEL = "itemLabel";
+            private static final String ITEM_DESCRIPTION = "itemDescription";
+            private static final String ITEM_ESCAPED = "itemLabelEscaped";
+            private static final String ITEM_DISABLED = "itemDisabled";
+            private static final String NO_SELECTION_OPTION = "noSelectionOption";
+            private static final String NO_SELECTION_VALUE = "noSelectionValue";
+
+            /**
+             * The request-scoped variable under which the current object
+             * will be exposed.
+             */
+            private String var;
+
+            private UISelectItems sourceComponent;
+
+            // -------------------------------------------------------- Constructors
+
+
+            private GenericObjectSelectItem(UISelectItems sourceComponent) {
+
+                var = (String) sourceComponent.getAttributes().get(VAR);
+                this.sourceComponent = sourceComponent;
+
+            }
+
+            // ----------------------------------------------------- Private Methods
+
+
+            /**
+             * Updates the <code>SelectItem</code> properties based on the
+             * current value.
+             *
+             * @param ctx the {@link FacesContext} for the current request
+             * @param value the value to build the updated values from
+             */
+            private void updateItem(FacesContext ctx, Object value) {
+
+                Map<String, Object> reqMap =
+                      ctx.getExternalContext().getRequestMap();
+                Object oldVarValue = null;
+                if (var != null) {
+                    oldVarValue = reqMap.put(var, value);
+                }
+                try {
+                    Map<String,Object> attrs = sourceComponent.getAttributes();
+                    Object itemValueResult = attrs.get(ITEM_VALUE);
+                    Object itemLabelResult = attrs.get(ITEM_LABEL);
+                    Object itemDescriptionResult = attrs.get(ITEM_DESCRIPTION);
+                    Object itemEscapedResult = attrs.get(ITEM_ESCAPED);
+                    Object itemDisabledResult = attrs.get(ITEM_DISABLED);
+                    Object noSelectionValueResult = attrs.get(NO_SELECTION_VALUE);
+                    Object noSelectionOptionResult = attrs.get(NO_SELECTION_OPTION);
+                    setValue(((itemValueResult != null) ? itemValueResult : value));
+                    setLabel(((itemLabelResult != null)
+                                  ? itemLabelResult.toString()
+                                  : value.toString()));
+                    setDescription(((itemDescriptionResult != null)
+                                        ? itemDescriptionResult.toString()
+                                        : null));
+                    setEscape(((itemEscapedResult != null)
+                                   ? Boolean.valueOf(itemEscapedResult.toString())
+                                   : true));
+                    setDisabled(((itemDisabledResult != null)
+                                     ? Boolean.valueOf(itemDisabledResult.toString())
+                                     : false));
+                    if (null != noSelectionOptionResult) {
+                        setNoSelectionOption(Boolean.valueOf(noSelectionOptionResult.toString()));
+                    } else if (null != noSelectionValueResult) {
+                        setNoSelectionOption(getValue().equals(noSelectionValueResult));
+                    }
+                } finally {
+                    if (var != null) {
+                        if (oldVarValue != null) {
+                            reqMap.put(var, oldVarValue);
+                        } else {
+                            reqMap.remove(var);
+                        }
+                    }
+                }
+
+            }
+
+
+            // --------------------------------------- Methods from Serializable
+
+
+            private void writeObject(ObjectOutputStream out) throws IOException {
+
+                throw new NotSerializableException();
+
+            }
+
+
+            private void readObject(ObjectInputStream in) throws IOException {
+
+                throw new NotSerializableException();
+
+            }
+
+        } // END GenericObjectSelectItem
+
+    } // END GenericObjectSelectItemIterator
+
+    private static interface ComponentAwareSelectItemIterator<E extends Object> extends Iterator<E> {
+        public UIComponent currentSelectComponent();
+    }
+
+    /**
+     * Handles arrays of <code>SelectItem</code>s, generic Objects,
+     * or combintations of both.
+     *
+     * A single <code>GenericObjectSelectItem</code> will be leverage for any
+     * non-<code>SelectItem</code> objects encountered.
+     */
+    private static final class ArrayIterator extends GenericObjectSelectItemIterator {
+
+
+        private FacesContext ctx;
+        private Object array;
+        private int count;
+        private int index;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        private ArrayIterator(FacesContext ctx,
+                              UISelectItems sourceComponent,
+                              Object array) {
+
+            super(sourceComponent);
+            this.ctx = ctx;
+            this.array = array;
+            count = Array.getLength(array);
+
+        }
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return (index < count);
+
+        }
+
+        public SelectItem next() {
+
+            if (index >= count) {
+                throw new NoSuchElementException();
+            }
+
+            Object item = Array.get(array, index++);
+            if (item instanceof SelectItem) {
+                return (SelectItem) item;
+            } else {
+                return getSelectItemFor(ctx, item);
+            }
+
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+
+    } // END ArrayIterator
+
+
+    /**
+     * Handles Collections of <code>SelectItem</code>s, generic Objects,
+     * or combintations of both.
+     *
+     * A single <code>GenericObjectSelectItem</code> will be leverage for any
+     * non-<code>SelectItem</code> objects encountered.
+     */
+    private static final class IterableItemIterator extends GenericObjectSelectItemIterator {
+
+
+        private FacesContext ctx;
+        private Iterator<?> iterator;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        private IterableItemIterator(FacesContext ctx,
+                                     UISelectItems sourceComponent,
+                                     Iterable<?> iterable) {
+
+            super(sourceComponent);
+            this.ctx = ctx;
+            this.iterator = iterable.iterator();
+
+        }
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return iterator.hasNext();
+
+        }
+
+
+        public SelectItem next() {
+
+            Object item = iterator.next();
+            if (item instanceof SelectItem) {
+                return (SelectItem) item;
+            } else {
+                return getSelectItemFor(ctx, item);
+            }
+
+        }
+
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+            
+        }
+
+    } // END CollectionItemIterator
+
+
+}
diff --git a/com/sun/faces/renderkit/ServerSideStateHelper.java b/com/sun/faces/renderkit/ServerSideStateHelper.java
new file mode 100644
index 0000000..919558b
--- /dev/null
+++ b/com/sun/faces/renderkit/ServerSideStateHelper.java
@@ -0,0 +1,525 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.zip.GZIPOutputStream;
+import java.util.zip.GZIPInputStream;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.FacesException;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIViewRoot;
+
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.SerializeServerStateDeprecated;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.SerializeServerState;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.GenerateUniqueServerStateIds;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.TypedCollections;
+import com.sun.faces.util.LRUMap;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.RequestStateManager;
+
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.AutoCompleteOffOnViewState;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableViewStateIdRendering;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.NamespaceParameters;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.NumberOfLogicalViews;
+import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.NumberOfViews;
+import com.sun.faces.config.WebConfiguration;
+import java.util.Collections;
+import javax.faces.render.ResponseStateManager;
+
+/**
+ * <p>
+ * This <code>StateHelper</code> provides the functionality associated with server-side state saving,
+ * though in actuallity, it is a hybrid between client and server.
+ * </p>
+ */
+public class ServerSideStateHelper extends StateHelper {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    /**
+     * Key to store the <code>AtomicInteger</code> used to generate
+     * unique state map keys.
+     */
+    public static final String STATEMANAGED_SERIAL_ID_KEY =
+          ServerSideStateHelper.class.getName() + ".SerialId";
+
+    /**
+     * The top level attribute name for storing the state structures within
+     * the session.
+     */
+    public static final String LOGICAL_VIEW_MAP =
+          ServerSideStateHelper.class.getName() + ".LogicalViewMap";
+
+    /**
+     * The number of logical views as configured by the user.
+     */
+    protected final Integer numberOfLogicalViews;
+
+
+    /**
+     * The number of views as configured by the user.
+     */
+    protected final Integer numberOfViews;
+
+
+    /**
+     * Flag determining how server state IDs are generated.
+     */
+    protected boolean generateUniqueStateIds;
+
+
+    /**
+     * Flag determining whether or not javax.faces.ViewState should be namespaced.
+     */
+    protected boolean namespaceParameters;
+
+
+    /**
+     * Used to generate unique server state IDs.
+     */
+    protected final Random random;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Construct a new <code>ServerSideStateHelper</code> instance.
+     */
+    public ServerSideStateHelper() {
+
+        numberOfLogicalViews = getIntegerConfigValue(NumberOfLogicalViews);
+        numberOfViews = getIntegerConfigValue(NumberOfViews);
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        generateUniqueStateIds =
+              webConfig.isOptionEnabled(GenerateUniqueServerStateIds);
+        if (generateUniqueStateIds) {
+            random = new Random(System.nanoTime() + webConfig.getServletContext().hashCode());
+        } else {
+            random = null;
+        }
+        namespaceParameters = webConfig.isOptionEnabled(NamespaceParameters);
+
+    }
+
+
+    // ------------------------------------------------ Methods from StateHelper
+
+
+    /**
+     * <p>
+     * Stores the provided state within the session obtained from the provided
+     * <code>FacesContext</code>
+     * </p>
+     *
+     * <p>If <code>stateCapture</code> is <code>null</code>, the composite
+     * key used to look up the actual and logical views will be written to
+     * the client as a hidden field using the <code>ResponseWriter</code>
+     * from the provided <code>FacesContext</code>.</p>
+     *
+     * <p>If <code>stateCapture</code> is not <code>null</code>, the composite
+     * key will be appended to the <code>StringBuilder<code> without any markup
+     * included or any content written to the client.
+     */
+    public void writeState(FacesContext ctx,
+                           Object state,
+                           StringBuilder stateCapture)
+    throws IOException {
+
+        Util.notNull("context", ctx);
+
+        String id;
+        
+        UIViewRoot viewRoot = ctx.getViewRoot();
+
+        if (!viewRoot.isTransient()) {
+            if (!ctx.getAttributes().containsKey("com.sun.faces.ViewStateValue")) {
+                Util.notNull("state", state);
+                Object[] stateToWrite = (Object[]) state;
+                ExternalContext externalContext = ctx.getExternalContext();
+                Object sessionObj = externalContext.getSession(true);
+                Map<String, Object> sessionMap = externalContext.getSessionMap();
+
+                //noinspection SynchronizationOnLocalVariableOrMethodParameter
+                synchronized (sessionObj) {
+                    Map<String, Map> logicalMap = TypedCollections.dynamicallyCastMap(
+                          (Map) sessionMap
+                                .get(LOGICAL_VIEW_MAP), String.class, Map.class);
+                    if (logicalMap == null) {
+                        logicalMap = Collections.synchronizedMap(new LRUMap<String, Map>(numberOfLogicalViews));
+                        sessionMap.put(LOGICAL_VIEW_MAP, logicalMap);
+                    }
+
+                    Object structure = stateToWrite[0];
+                    Object savedState = handleSaveState(stateToWrite[1]);
+
+                    String idInLogicalMap = (String)
+                              RequestStateManager.get(ctx, RequestStateManager.LOGICAL_VIEW_MAP);
+                    if (idInLogicalMap == null) {
+                        idInLogicalMap = ((generateUniqueStateIds)
+                                              ? createRandomId()
+                                              : createIncrementalRequestId(ctx));
+                    }
+                    String idInActualMap = null;
+                    if(ctx.getPartialViewContext().isPartialRequest()){
+                        // If partial request, do not change actual view Id, because page not actually changed.
+                        // Otherwise partial requests will soon overflow cache with values that would be never used.
+                        idInActualMap = (String) RequestStateManager.get(ctx, RequestStateManager.ACTUAL_VIEW_MAP);
+                    }
+                    if (null == idInActualMap) {
+                            idInActualMap = ((generateUniqueStateIds) ? createRandomId()
+                                                        : createIncrementalRequestId(ctx));
+                    }
+                    Map<String, Object[]> actualMap =
+                          TypedCollections.dynamicallyCastMap(
+                                logicalMap.get(idInLogicalMap), String.class, Object[].class);
+                    if (actualMap == null) {
+                        actualMap = new LRUMap<String, Object[]>(numberOfViews);
+                        logicalMap.put(idInLogicalMap, actualMap);
+                    }
+
+                    id = idInLogicalMap + ':' + idInActualMap;
+
+                    Object[] stateArray = actualMap.get(idInActualMap);
+                    // reuse the array if possible
+                    if (stateArray != null) {
+                        stateArray[0] = structure;
+                        stateArray[1] = savedState;
+                    } else {
+                        actualMap.put(idInActualMap, new Object[]{ structure, savedState });
+                    }
+
+                    // always call put/setAttribute as we may be in a clustered environment.
+                    sessionMap.put(LOGICAL_VIEW_MAP, logicalMap);
+                    ctx.getAttributes().put("com.sun.faces.ViewStateValue", id);
+                }
+            } else {
+                id = (String) ctx.getAttributes().get("com.sun.faces.ViewStateValue");
+            }
+        } else {
+            id = "stateless";
+        }
+        
+        if (stateCapture != null) {
+            stateCapture.append(id);
+        } else {
+            ResponseWriter writer = ctx.getResponseWriter();
+
+            writer.startElement("input", null);
+            writer.writeAttribute("type", "hidden", null);
+
+            String viewStateParam = ResponseStateManager.VIEW_STATE_PARAM;
+            
+            if ((namespaceParameters) && (viewRoot instanceof NamingContainer)) {
+                String namingContainerId = viewRoot.getContainerClientId(ctx);
+                if (namingContainerId != null) {
+            	    viewStateParam = namingContainerId + viewStateParam;
+                }
+            }
+            writer.writeAttribute("name", viewStateParam, null);
+            if (webConfig.isOptionEnabled(EnableViewStateIdRendering)) {
+                String viewStateId = Util.getViewStateId(ctx);
+                writer.writeAttribute("id", viewStateId, null);
+            }
+            writer.writeAttribute("value", id, null);
+            if (webConfig.isOptionEnabled(AutoCompleteOffOnViewState)) {
+                writer.writeAttribute("autocomplete", "off", null);
+            }
+            writer.endElement("input");
+
+            writeClientWindowField(ctx, writer); 
+            writeRenderKitIdField(ctx, writer);
+        }
+    }
+
+
+    /**
+     * <p>Inspects the incoming request parameters for the standardized state
+     * parameter name.  In this case, the parameter value will be the composite
+     * ID generated by ServerSideStateHelper#writeState(FacesContext, Object, StringBuilder).</p>
+     *
+     * <p>The composite key will be used to find the appropriate view within the
+     * session obtained from the provided <code>FacesContext</code>
+     */
+    public Object getState(FacesContext ctx, String viewId) {
+
+        String compoundId = getStateParamValue(ctx);
+        
+        if (compoundId == null) {
+            return null;
+        }
+        
+        if ("stateless".equals(compoundId)) {
+            return "stateless";
+        }
+
+        int sep = compoundId.indexOf(':');
+        assert (sep != -1);
+        assert (sep < compoundId.length());
+
+        String idInLogicalMap = compoundId.substring(0, sep);
+        String idInActualMap = compoundId.substring(sep + 1);
+
+        ExternalContext externalCtx = ctx.getExternalContext();
+        Object sessionObj = externalCtx.getSession(false);
+
+        // stop evaluating if the session is not available
+        if (sessionObj == null) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "Unable to restore server side state for view ID {0} as no session is available",
+                           viewId);
+            }
+            return null;
+        }
+
+        //noinspection SynchronizationOnLocalVariableOrMethodParameter
+        synchronized (sessionObj) {
+            Map logicalMap = (Map) externalCtx.getSessionMap() .get(LOGICAL_VIEW_MAP);
+            if (logicalMap != null) {
+                Map actualMap = (Map) logicalMap.get(idInLogicalMap);
+                if (actualMap != null) {
+                    RequestStateManager.set(ctx,
+                                            RequestStateManager.LOGICAL_VIEW_MAP,
+                                            idInLogicalMap);
+                    Object[] state = (Object[]) actualMap.get(idInActualMap);
+                    Object[] restoredState = new Object[2];
+                    
+                    restoredState[0] = state[0];
+                    restoredState[1] = state[1];
+                    
+                    if(state != null){
+                        RequestStateManager.set(ctx,
+                                                RequestStateManager.ACTUAL_VIEW_MAP,
+                                                idInActualMap);
+                        if (state.length == 2 && state[1] != null) {
+                            restoredState[1] = handleRestoreState(state[1]);
+                        }
+                    }
+
+                    return restoredState;
+                }
+            }
+        }
+
+        return null;
+        
+    }
+
+   
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * <p>Utility method for obtaining the <code>Integer</code> based configuration
+     * values used to change the behavior of the <code>ServerSideStateHelper</code>.
+     * @param param the paramter to parse
+     * @return the Integer representation of the parameter value
+     */
+    protected Integer getIntegerConfigValue(WebContextInitParameter param) {
+
+        String noOfViewsStr = webConfig.getOptionValue(param);
+        Integer value = null;
+        try {
+            value = Integer.valueOf(noOfViewsStr);
+        } catch (NumberFormatException nfe) {
+            String defaultValue = param.getDefaultValue();
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                           "jsf.state.server.cannot.parse.int.option",
+                           new Object[] { param.getQualifiedName(),
+                                          defaultValue} );
+            }
+            try {
+                value = Integer.valueOf(defaultValue);
+            } catch (NumberFormatException ne) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINEST, "Unable to convert number", ne);
+                }
+            }
+        }
+
+        return value;
+
+    }
+
+
+    /**
+     * @param state the object returned from <code>UIView.processSaveState</code>
+     * @return If {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#SerializeServerStateDeprecated} is
+     *  <code>true</code>, serialize and return the state, otherwise, return
+     *  <code>state</code> unchanged.
+     */
+    protected Object handleSaveState(Object state) {
+
+        if (webConfig.isOptionEnabled(SerializeServerStateDeprecated) || webConfig.isOptionEnabled(SerializeServerState)) {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
+            ObjectOutputStream oas = null;
+            try {
+                oas = serialProvider
+                      .createObjectOutputStream(((compressViewState)
+                                                 ? new GZIPOutputStream(baos, 1024)
+                                                 : baos));
+                //noinspection NonSerializableObjectPassedToObjectStream
+                oas.writeObject(state);
+                oas.flush();
+            } catch (Exception e) {
+                throw new FacesException(e);
+            } finally {
+                if (oas != null) {
+                    try {
+                        oas.close();
+                    } catch (IOException ioe) { 
+                        if (LOGGER.isLoggable(Level.FINEST)) {
+                            LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                        }
+                    }
+                }
+            }
+            return baos.toByteArray();
+        } else {
+            return state;
+        }
+
+    }
+
+
+    /**
+     * @param state the state as it was stored in the session
+     * @return an object that can be passed to <code>UIViewRoot.processRestoreState</code>.
+     *  If {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#SerializeServerStateDeprecated} de-serialize the
+     *  state prior to returning it, otherwise return <code>state</code> as is.
+     */
+    protected Object handleRestoreState(Object state) {
+
+        if (webConfig.isOptionEnabled(SerializeServerStateDeprecated) || webConfig.isOptionEnabled(SerializeServerState)) {
+            ByteArrayInputStream bais = new ByteArrayInputStream((byte[]) state);
+            ObjectInputStream ois = null;
+            try {
+                ois = serialProvider
+                      .createObjectInputStream(((compressViewState)
+                                                ? new GZIPInputStream(bais, 1024)
+                                                : bais));
+                return ois.readObject();
+            } catch (Exception e) {
+                throw new FacesException(e);
+            } finally {
+                if (ois != null) {
+                    try {
+                        ois.close();
+                    } catch (IOException ioe) { 
+                        if (LOGGER.isLoggable(Level.FINEST)) {
+                            LOGGER.log(Level.FINEST, "Closing stream", ioe);
+                        }
+                    }
+                }
+            }
+        } else {
+            return state;
+        }
+
+    }
+
+
+     /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @return a unique ID for building the keys used to store
+     *  views within a session
+     */
+    private String createIncrementalRequestId(FacesContext ctx) {
+
+        Map<String, Object> sm = ctx.getExternalContext().getSessionMap();
+        AtomicInteger idgen =
+              (AtomicInteger) sm.get(STATEMANAGED_SERIAL_ID_KEY);
+        if (idgen == null) {
+            idgen = new AtomicInteger(1);
+        }
+
+        // always call put/setAttribute as we may be in a clustered environment.
+        sm.put(STATEMANAGED_SERIAL_ID_KEY, idgen);
+        return (UIViewRoot.UNIQUE_ID_PREFIX + idgen.getAndIncrement());
+
+    }
+
+
+    private String createRandomId() {
+
+        return Long.valueOf(random.nextLong()).toString();
+
+    }
+
+    /**
+     * Is stateless.
+     * 
+     * @param facesContext the Faces context.
+     * @param viewId the view id.
+     * @return true if stateless, false otherwise.
+     * @throws IllegalStateException when the request was not a postback.
+     */
+    @Override
+    public boolean isStateless(FacesContext facesContext, String viewId) throws IllegalStateException {
+        if (facesContext.isPostback()) {
+            Object stateObject = getState(facesContext, viewId);
+            if (stateObject instanceof String && "stateless".equals((String) stateObject)) {
+                return true;
+            }
+
+            return false;
+        }
+        
+        throw new IllegalStateException("Cannot determine whether or not the request is stateless");
+    }
+}
diff --git a/com/sun/faces/renderkit/StateHelper.java b/com/sun/faces/renderkit/StateHelper.java
new file mode 100644
index 0000000..b243540
--- /dev/null
+++ b/com/sun/faces/renderkit/StateHelper.java
@@ -0,0 +1,336 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit;
+
+
+import javax.faces.lifecycle.ClientWindow;
+
+import com.sun.faces.RIConstants;
+
+import java.io.IOException;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.ResponseStateManager;
+import javax.faces.render.RenderKitFactory;
+
+import com.sun.faces.spi.SerializationProviderFactory;
+import com.sun.faces.spi.SerializationProvider;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.util.Util;
+
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.CompressViewState;
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.AutoCompleteOffOnViewState;
+
+
+/**
+ * Common code for the default <code>StateHelper</code> implementations.
+ */
+public abstract class StateHelper {
+
+    /**
+     * <p>
+     * The first portion of the hidden state field.
+     * </p>
+     *
+     */
+    protected static final char[] STATE_FIELD_START =
+          ("<input type=\"hidden\" name=\""
+           + ResponseStateManager.VIEW_STATE_PARAM
+           + "\" id=\"").toCharArray();
+
+    /**
+     * <p>
+     * The second portion of the hidden state field.
+     * </p>
+     *
+     */
+    protected static final char[] FIELD_MIDDLE =
+          ("\" value=\"").toCharArray();
+
+    /**
+     * <p>
+     * The end of the hidden state field.
+     * </p>
+     */
+    protected static final char[] FIELD_END =
+          "\" />".toCharArray();
+
+    /**
+     * <p>
+     * The end of the hidden state field.
+     * </p>
+     */
+    protected static final char[] STATE_FIELD_AUTOCOMPLETE_END =
+          "\" autocomplete=\"off\" />".toCharArray();
+
+    /**
+     * <p>
+     * Factory for serialization streams.  These are pluggable via
+     * the WebConfiguration.WebContextInitParameter#SerializationProviderClass.
+     * </p>
+     */
+    protected SerializationProvider serialProvider;
+
+    /**
+     * <p>
+     * Access to the context init parameters that configure this application.
+     * </p>
+     */
+    protected WebConfiguration webConfig;
+
+
+    /**
+     * <p>
+     * Flag indicating whether or not view state should be compressed to reduce
+     * the memory/bandwidth footprint.  This option is common to both types
+     * of state saving.
+     * </p>
+     */
+    protected boolean compressViewState;
+
+
+    /**
+     * This will be used the by the different <code>StateHelper</code> implementations
+     * when writing the start of the state field.
+     */
+    protected char[] stateFieldStart;
+    
+    /**
+     * This will be used by the different <code>StateHelper</code> implementations
+     * when writing the middle of the state or viewId fields.
+     */
+    
+    protected char[] fieldMiddle;
+
+
+    /**
+     * This will be used the by the different <code>StateHelper</code> implementations
+     * when writing the end of the state or viewId field.  This value of this field is
+     * determined by the value of the {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#AutoCompleteOffOnViewState}<code>
+     */
+    protected char[] fieldEnd;
+
+    
+    /**
+     * Flag determining whether or not javax.faces.ViewState should be namespaced.
+     */
+    protected boolean namespaceParameters;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Constructs a new <code>StateHelper</code> instance.
+     */
+    public StateHelper() {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        serialProvider = SerializationProviderFactory
+              .createInstance(ctx.getExternalContext());
+        webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
+        compressViewState = webConfig.isOptionEnabled(CompressViewState);
+        stateFieldStart = STATE_FIELD_START;
+        fieldMiddle = FIELD_MIDDLE;
+        fieldEnd = (webConfig.isOptionEnabled(AutoCompleteOffOnViewState)
+                           ? STATE_FIELD_AUTOCOMPLETE_END
+                           : FIELD_END);
+
+
+        if (serialProvider == null) {
+            serialProvider = SerializationProviderFactory
+                  .createInstance(FacesContext
+                        .getCurrentInstance().getExternalContext());
+        }
+        namespaceParameters =
+                webConfig.isOptionEnabled(
+                     BooleanWebContextInitParameter.NamespaceParameters);
+
+    }
+    
+    private String createCryptographicallyStrongToken() {
+        // PENDING: http://java.net/jira/browse/JAVASERVERFACES-2204
+        String result = "" + System.currentTimeMillis();
+        
+        return result;
+    }
+    
+    private static final String TOKEN_NAME = RIConstants.FACES_PREFIX + "TOKEN";
+    
+    public String getCryptographicallyStrongTokenFromSession(FacesContext context) {
+        String result = (String) 
+                context.getExternalContext().getSessionMap().get(TOKEN_NAME);
+        if (null == result) {
+            result = createCryptographicallyStrongToken();
+            context.getExternalContext().getSessionMap().put(TOKEN_NAME, result);
+        }
+        return result;
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>
+     * Functionally similar to ResponseStateManager#writeState(FacesContext, Object)
+     * with an option to write the state directly to the provided <code>StringBuilder</code>
+     * without sending any markup to the client.
+     * </p>
+     *
+     * @see ResponseStateManager#writeState(javax.faces.context.FacesContext, java.lang.Object) 
+     */
+    public abstract void writeState(FacesContext ctx,
+                                    Object state,
+                                    StringBuilder stateCapture)
+    throws IOException;
+
+
+    /**
+     * @see javax.faces.render.ResponseStateManager#getState(javax.faces.context.FacesContext, String)
+     */
+    public abstract Object getState(FacesContext ctx, String viewId)
+    throws IOException;
+
+    
+    /**
+     * @see javax.faces.render.ResponseStateManager#isStateless(javax.faces.context.FacesContext, String)
+     */
+    public abstract boolean isStateless(FacesContext ctx, String viewId) throws IllegalStateException;
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * <p>Get our view state from this request</p>
+     *
+     * @param context the <code>FacesContext</code> for the current request
+     *
+     * @return the view state from this request
+     */
+    protected static String getStateParamValue(FacesContext context) {
+
+        String pValue = context.getExternalContext().getRequestParameterMap().
+              get(ResponseStateManager.VIEW_STATE_PARAM);
+        if (pValue != null && pValue.length() == 0) {
+            pValue = null;
+        }
+        return pValue;
+
+    }
+
+
+    /**
+     * <p>
+     * If a custom <code>RenderKit</code> is used, write out the ID
+     * of the <code>RenderKit</code> out as a hidden field.  This will be used
+     * when restoring the view state.
+     * </p>
+     * @param context the <code>FacesContext</code> for the current request
+     * @param writer the <code>ResponseWriter</code> to write to
+     * @throws IOException if an error occurs writing to the client
+     */
+    protected void writeRenderKitIdField(FacesContext context,
+                                         ResponseWriter writer)
+    throws IOException {
+
+        String result = context.getViewRoot().getRenderKitId();
+        String defaultRkit = context.getApplication().getDefaultRenderKitId();
+        if (null == defaultRkit) {
+            defaultRkit = RenderKitFactory.HTML_BASIC_RENDER_KIT;
+        }
+
+        if (result != null
+            && !defaultRkit.equals(result)) {
+            writer.startElement("input", context.getViewRoot());
+            writer.writeAttribute("type", "hidden", "type");
+            String renderKitIdParam = ResponseStateManager.RENDER_KIT_ID_PARAM;
+            UIViewRoot viewRoot = context.getViewRoot();
+            if ((namespaceParameters) && (viewRoot instanceof NamingContainer)) {
+                String namingContainerId = viewRoot.getContainerClientId(context);
+                if (namingContainerId != null) {
+                	renderKitIdParam = namingContainerId + renderKitIdParam;
+                }
+            }
+            writer.writeAttribute("name",
+                                  renderKitIdParam,
+                                  "name");
+            writer.writeAttribute("value",
+                                  result,
+                                  "value");
+            writer.endElement("input");
+        }
+
+    }
+    
+    /**
+     * Write the client window state field.
+     * 
+     * @param context the Faces context.
+     * @param writer the response writer.
+     * @throws IOException when an I/O error occurs.
+     */
+    protected void writeClientWindowField(FacesContext context, ResponseWriter writer) throws IOException {
+        ClientWindow window = context.getExternalContext().getClientWindow();
+        if (null != window) {       
+            writer.startElement("input", null);
+            writer.writeAttribute("type", "hidden", null);
+            String clientWindowParam = ResponseStateManager.CLIENT_WINDOW_PARAM;
+            UIViewRoot viewRoot = context.getViewRoot();
+            if ((namespaceParameters) && (viewRoot instanceof NamingContainer)) {
+                String namingContainerId = viewRoot.getContainerClientId(context);
+                if (namingContainerId != null) {
+                	clientWindowParam = namingContainerId + clientWindowParam;
+                }
+            }
+            writer.writeAttribute("name", clientWindowParam, null);
+            writer.writeAttribute("id", Util.getClientWindowId(context), null);
+            writer.writeAttribute("value", window.getId(), null);
+            if (webConfig.isOptionEnabled(AutoCompleteOffOnViewState)) {
+                writer.writeAttribute("autocomplete", "off", null);
+            }
+            writer.endElement("input");
+        }        
+    }
+}
diff --git a/com/sun/faces/renderkit/html_basic/AjaxBehaviorRenderer.java b/com/sun/faces/renderkit/html_basic/AjaxBehaviorRenderer.java
new file mode 100644
index 0000000..c154e6d
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/AjaxBehaviorRenderer.java
@@ -0,0 +1,343 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.util.FacesLogger;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.component.ActionSource;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UINamingContainer;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.behavior.AjaxBehavior;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AjaxBehaviorEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.render.ClientBehaviorRenderer;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/*
+ *<b>AjaxBehaviorRenderer</b> renders Ajax behavior for a component.
+ * It also  
+ */
+
+public class AjaxBehaviorRenderer extends ClientBehaviorRenderer  {
+    
+    // Log instance for this class
+    protected static final Logger logger = FacesLogger.RENDERKIT.getLogger();
+
+    /**
+     * Flag determining whether or not javax.faces.ViewState should be namespaced.
+     */
+    protected transient boolean namespaceParameters;
+
+    public AjaxBehaviorRenderer() {
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        namespaceParameters =
+             webConfig.isOptionEnabled(
+                  BooleanWebContextInitParameter.NamespaceParameters);
+    }
+
+    // ------------------------------------------------------ Rendering Methods
+
+    @Override
+    public String getScript(ClientBehaviorContext behaviorContext,
+                            ClientBehavior behavior) {
+        if (!(behavior instanceof AjaxBehavior)) {
+            // TODO: use MessageUtils for this error message?
+            throw new IllegalArgumentException(
+                "Instance of javax.faces.component.behavior.AjaxBehavior required: " + behavior);
+        }
+
+        if (((AjaxBehavior)behavior).isDisabled()) {
+            return null;
+        }
+        return buildAjaxCommand(behaviorContext, (AjaxBehavior)behavior, namespaceParameters);
+    }
+
+
+    @Override
+    public void decode(FacesContext context,
+                       UIComponent component,
+                       ClientBehavior behavior) {
+        if (null == context || null == component || null == behavior) {
+            throw new NullPointerException();
+        }
+
+        if (!(behavior instanceof AjaxBehavior)) {
+            // TODO: use MessageUtils for this error message?
+            throw new IllegalArgumentException(
+                "Instance of javax.faces.component.behavior.AjaxBehavior required: " + behavior);
+        }
+
+        AjaxBehavior ajaxBehavior = (AjaxBehavior)behavior;
+
+        // First things first - if AjaxBehavior is disabled, we are done.
+        if (ajaxBehavior.isDisabled()) {
+            return;
+        }        
+
+        component.queueEvent(createEvent(component, ajaxBehavior));
+
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("This command resulted in form submission " +
+                " AjaxBehaviorEvent queued.");
+            logger.log(Level.FINE,
+                "End decoding component {0}", component.getId());
+        }
+
+
+    }
+
+    // Creates an AjaxBehaviorEvent for the specified component/behavior
+    private static AjaxBehaviorEvent createEvent(UIComponent component,
+                                                 AjaxBehavior ajaxBehavior) {
+
+        AjaxBehaviorEvent event = new AjaxBehaviorEvent(component, ajaxBehavior);
+
+        PhaseId phaseId = isImmediate(component, ajaxBehavior) ?
+                              PhaseId.APPLY_REQUEST_VALUES :
+                              PhaseId.INVOKE_APPLICATION;
+
+        event.setPhaseId(phaseId);
+
+        return event;
+    }
+
+
+    // Tests whether we should perform immediate processing.  Note
+    // that we "inherit" immediate from the parent if not specified
+    // on the behavior.
+    private static boolean isImmediate(UIComponent component,
+                                       AjaxBehavior ajaxBehavior) {
+
+        boolean immediate = false;
+
+        if (ajaxBehavior.isImmediateSet()) {
+            immediate = ajaxBehavior.isImmediate();
+        } else if (component instanceof EditableValueHolder) {
+            immediate = ((EditableValueHolder)component).isImmediate();
+        } else if (component instanceof ActionSource) {
+            immediate = ((ActionSource)component).isImmediate();
+        }
+
+        return immediate;
+    }
+
+    private static String buildAjaxCommand(ClientBehaviorContext behaviorContext,
+                                           AjaxBehavior ajaxBehavior,
+                                           boolean namespaceParameters) {
+
+        // First things first - if AjaxBehavior is disabled, we are done.
+        if (ajaxBehavior.isDisabled()) {
+            return null;
+        }        
+
+        UIComponent component = behaviorContext.getComponent();
+        String eventName = behaviorContext.getEventName();
+
+        StringBuilder ajaxCommand = new StringBuilder(256);
+        Collection<String> execute = ajaxBehavior.getExecute();
+        Collection<String> render = ajaxBehavior.getRender();
+        String onevent = ajaxBehavior.getOnevent();
+        String onerror = ajaxBehavior.getOnerror();
+        String sourceId = behaviorContext.getSourceId();
+        String delay = ajaxBehavior.getDelay();
+        Boolean resetValues = null;
+        if (ajaxBehavior.isResetValuesSet()) {
+            resetValues = ajaxBehavior.isResetValues();
+        }
+        Collection<ClientBehaviorContext.Parameter> params = behaviorContext.getParameters();
+
+        // Needed workaround for SelectManyCheckbox - if execute doesn't have sourceId,
+        // we need to add it - otherwise, we use the default, which is sourceId:child, which
+        // won't work.
+        ClientBehaviorContext.Parameter foundparam = null;
+        for (ClientBehaviorContext.Parameter param : params) {
+            if (param.getName().equals("incExec") && (Boolean)param.getValue()) {
+                foundparam = param;
+            }
+        }
+        if (foundparam != null && !execute.contains(sourceId)) {
+                execute = new LinkedList<String>(execute);
+                execute.add(component.getClientId());
+        }
+        if (foundparam != null) {
+            try {
+                // And since this is a hack, we now try to remove the param
+                params.remove(foundparam);
+            } catch (UnsupportedOperationException uoe) {
+                if (logger.isLoggable(Level.FINEST)) {
+                    logger.log(Level.FINEST, "Unsupported operation", uoe);
+                }
+            }
+        }
+
+        ajaxCommand.append("mojarra.ab(");
+
+        if (sourceId == null) {
+            ajaxCommand.append("this");
+        } else {
+            ajaxCommand.append("'");
+            ajaxCommand.append(sourceId);
+            ajaxCommand.append("'");
+        }
+
+        ajaxCommand.append(",event,'");
+        ajaxCommand.append(eventName);
+        ajaxCommand.append("',");
+
+        appendIds(component, ajaxCommand, execute);
+        ajaxCommand.append(",");
+        appendIds(component, ajaxCommand, render);
+        
+        String namingContainerId = null;
+        if (namespaceParameters) {
+            FacesContext context = behaviorContext.getFacesContext();
+            UIViewRoot viewRoot = context.getViewRoot();
+            if (viewRoot instanceof NamingContainer) {
+                namingContainerId = viewRoot.getContainerClientId(context);
+            }
+        }
+
+        if ((namingContainerId != null) || (onevent != null) || (onerror != null) || (delay != null) || 
+                (resetValues != null) || !params.isEmpty())  {
+
+            ajaxCommand.append(",{");
+
+            if (namingContainerId != null) {
+                // the literal string must exactly match the corresponding value 
+                // in jsf.js.
+                RenderKitUtils.appendProperty(ajaxCommand, "com.sun.faces.namingContainerId", namingContainerId, true);
+            }
+
+            if (onevent != null) {
+                RenderKitUtils.appendProperty(ajaxCommand, "onevent", onevent, false);
+            }
+
+            if (onerror != null) {
+                RenderKitUtils.appendProperty(ajaxCommand, "onerror", onerror, false);
+            }
+            
+            if (delay != null) {
+                RenderKitUtils.appendProperty(ajaxCommand, "delay", delay, true);
+            }
+            
+            if (resetValues != null) {
+                RenderKitUtils.appendProperty(ajaxCommand, "resetValues", resetValues, false);
+            }
+
+            if (!params.isEmpty()) {
+                for (ClientBehaviorContext.Parameter param : params) {
+                    RenderKitUtils.appendProperty(ajaxCommand, 
+                                                  param.getName(),
+                                                  param.getValue());
+                }
+            }
+             
+            ajaxCommand.append("}");
+        }
+
+        ajaxCommand.append(")");
+
+        return ajaxCommand.toString();
+    }
+
+    // Appends an ids argument to the ajax command
+    private static void appendIds(UIComponent component,
+                                  StringBuilder builder,
+                                  Collection<String> ids) {
+
+        if ((null == ids) || ids.isEmpty()) {
+            builder.append('0');
+            return;
+        }
+
+        builder.append("'");
+
+        boolean first = true;
+
+        for (String id : ids) {
+            if (id.trim().length() == 0) {
+                continue;
+            }
+            if (!first) {
+                builder.append(' ');
+            } else {
+                first = false;
+            }
+
+            if (id.equals("@all") || id.equals("@none") ||
+                id.equals("@form") || id.equals("@this")) {
+                builder.append(id);
+            } else {
+                builder.append(getResolvedId(component, id));
+            }
+        }
+
+        builder.append("'");
+    }
+
+    // Returns the resolved (client id) for a particular id.
+    private static String getResolvedId(UIComponent component, String id) {
+
+        UIComponent resolvedComponent = component.findComponent(id);
+        if (resolvedComponent == null) {
+            if (id.charAt(0) == UINamingContainer.getSeparatorChar(FacesContext.getCurrentInstance())) {
+                return id.substring(1);
+            }
+            return id;
+        }
+
+        return resolvedComponent.getClientId();
+    }
+}
diff --git a/com/sun/faces/renderkit/html_basic/BaseTableRenderer.java b/com/sun/faces/renderkit/html_basic/BaseTableRenderer.java
new file mode 100644
index 0000000..b899442
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/BaseTableRenderer.java
@@ -0,0 +1,523 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIColumn;
+import javax.faces.component.UIData;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.Util;
+
+/**
+ * Base class for concrete Grid and Table renderers.
+ */
+public abstract class BaseTableRenderer extends HtmlBasicRenderer {
+
+
+    // ------------------------------------------------------- Protected Methods
+
+    /**
+     * Called to render the opening/closing <code>thead</code> elements
+     * and any content nested between.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    protected abstract void renderHeader(FacesContext context,
+                                         UIComponent table,
+                                         ResponseWriter writer)
+    throws IOException;
+
+
+    /**
+     * Called to render the opening/closing <code>tfoot</code> elements
+     * and any content nested between.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    protected abstract void renderFooter(FacesContext context,
+                                         UIComponent table,
+                                         ResponseWriter writer)
+    throws IOException;
+
+
+    /**
+     * Call to render the content that should be included between opening
+     * and closing <code>tr</code> elements.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param row the current row (if any - an implmenetation may not need this)
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    protected abstract void renderRow(FacesContext context,
+                                      UIComponent table,
+                                      UIComponent row,
+                                      ResponseWriter writer)
+    throws IOException;
+
+
+    /**
+     * Renders the start of a table and applies the value of
+     * <code>styleClass</code> if available and renders any
+     * pass through attributes that may be specified.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @param attributes pass-through attributes that the component
+     *  supports
+     * @throws IOException if content cannot be written
+     */
+    protected void renderTableStart(FacesContext context,
+                                    UIComponent table,
+                                    ResponseWriter writer,
+                                    Attribute[] attributes)
+    throws IOException {
+
+        writer.startElement("table", table);
+        writeIdAttributeIfNecessary(context, writer, table);
+        String styleClass = (String) table.getAttributes().get("styleClass");
+        if (styleClass != null) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                table,
+                                                attributes);
+        writer.writeText("\n", table, null);
+
+    }
+
+
+    /**
+     * Renders the closing <code>table</code> element.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    protected void renderTableEnd(FacesContext context,
+                                  UIComponent table,
+                                  ResponseWriter writer)
+    throws IOException {
+
+        writer.endElement("table");
+        writer.writeText("\n", table, null);
+
+    }
+
+
+    /**
+     * Renders the caption of the table applying the values of
+     * <code>captionClass</code> as the class and <code>captionStyle</code>
+     * as the style if either are present.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    protected void renderCaption(FacesContext context,
+                                 UIComponent table,
+                                 ResponseWriter writer) throws IOException {
+
+        UIComponent caption = getFacet(table, "caption");
+        if (caption != null) {
+            String captionClass =
+                  (String) table.getAttributes().get("captionClass");
+            String captionStyle = (String)
+                  table.getAttributes().get("captionStyle");
+            writer.startElement("caption", table);
+            if (captionClass != null) {
+                writer.writeAttribute("class", captionClass, "captionClass");
+            }
+            if (captionStyle != null) {
+                writer.writeAttribute("style", captionStyle, "captionStyle");
+            }
+            encodeRecursive(context, caption);
+            writer.endElement("caption");
+        }
+        
+    }
+
+
+    /**
+     * Renders the starting <code>tbody</code> element.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    protected void renderTableBodyStart(FacesContext context,
+                                        UIComponent table,
+                                        ResponseWriter writer)
+    throws IOException {
+
+            writer.startElement("tbody", table);
+            writer.writeText("\n", table, null);
+
+    }
+
+
+    /**
+     * Renders the closing <code>tbody</code> element.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    protected void renderTableBodyEnd(FacesContext context,
+                                      UIComponent table,
+                                      ResponseWriter writer)
+    throws IOException {
+
+        writer.endElement("tbody");
+        writer.writeText("\n", table, null);
+
+    }
+
+
+    /**
+     * Renders the starting <code>tr</code> element applying any values
+     * from the <code>rowClasses</code> attribute.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    protected void renderRowStart(FacesContext context,
+                                  UIComponent table,
+                                  ResponseWriter writer)
+          throws IOException {
+
+        TableMetaInfo info = getMetaInfo(context, table);
+        writer.startElement("tr", table);
+        if (info.rowClasses.length > 0) {
+            writer.writeAttribute("class", info.getCurrentRowClass(),
+                                  "rowClasses");
+        }
+        writer.writeText("\n", table, null);
+
+    }
+
+
+    /**
+     * Renders the closing <code>rt</code> element.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @param writer the current writer
+     * @throws IOException if content cannot be written
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    protected void renderRowEnd(FacesContext context,
+                                UIComponent table,
+                                ResponseWriter writer)
+    throws IOException {
+
+        writer.endElement("tr");
+        writer.writeText("\n", table, null);
+
+    }
+
+
+    /**
+     * Returns a <code>TableMetaInfo</code> object containing details such
+     * as row and column classes, columns, and a mechanism for scrolling through
+     * the row/column classes.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table that's being rendered
+     * @return the <code>TableMetaInfo</code> for provided table
+     */
+    protected TableRenderer.TableMetaInfo getMetaInfo(FacesContext context,
+                                                      UIComponent table) {
+
+        String key = createKey(table);
+        Map<Object,Object> attributes = context.getAttributes();
+        TableRenderer.TableMetaInfo info = (TableRenderer.TableMetaInfo)
+              attributes.get(key);
+        if (info == null) {
+            info = new TableRenderer.TableMetaInfo(table);
+            attributes.put(key, info);
+        }
+        return info;
+
+    }
+
+
+    /**
+     * Removes the cached TableMetaInfo from the specified component.
+     * @param context the <code>FacesContext</code> for the current request
+     * @param table the table from which the TableMetaInfo will be removed
+     */
+    protected void clearMetaInfo(FacesContext context, UIComponent table) {
+
+        context.getAttributes().remove(createKey(table));
+
+    }
+
+
+    /**
+     * Creates a unique key based on the provided <code>UIComponent</code> with
+     *  which the TableMetaInfo can be looked up.
+     *
+     * @param table the table that's being rendered
+     * @return a unique key to store the metadata in the request and still have
+     *  it associated with a specific component.
+     */
+    protected String createKey(UIComponent table) {
+
+        return TableMetaInfo.KEY + '_' + table.hashCode();
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    protected static class TableMetaInfo {
+
+        private static final String[] EMPTY_STRING_ARRAY = new String[0];
+        public static final String KEY = TableMetaInfo.class.getName();
+
+        public final String[] rowClasses;
+        public final String[] columnClasses;
+        public final List<UIColumn> columns;
+        public final boolean hasHeaderFacets;
+        public final boolean hasFooterFacets;
+        public final int columnCount;
+        public int columnStyleCounter;
+        public int rowStyleCounter;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        public TableMetaInfo(UIComponent table) {
+            rowClasses = getRowClasses(table);
+            columnClasses = getColumnClasses(table);
+            columns = getColumns(table);
+            columnCount = columns.size();
+            hasHeaderFacets = hasFacet("header", columns);
+            hasFooterFacets = hasFacet("footer", columns);
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        /**
+         * Reset the counter used to apply column styles.
+         */
+        public void newRow() {
+
+            columnStyleCounter = 0;
+
+        }
+
+
+        /**
+         * Obtain the column class based on the current counter.  Calling this
+         * method automatically moves the pointer to the next style.  If the
+         * counter is larger than the number of total classes, the counter will
+         * be reset.
+         * @return the current style
+         */
+        public String getCurrentColumnClass() {
+
+            String style = null;
+            if (columnStyleCounter < columnClasses.length
+                 && columnStyleCounter <= columnCount) {
+                style = columnClasses[columnStyleCounter++];
+            }
+            return ((style != null && style.length() > 0) ? style : null);
+
+        }
+
+
+        /**
+         * Obtain the row class based on the current counter.  Calling this
+         * method automatically moves the pointer to the next style.  If the
+         * counter is larger than the number of total classes, the counter will
+         * be reset.
+         * @return the current style
+         */
+        public String getCurrentRowClass() {
+            String style = rowClasses[rowStyleCounter++];
+            if (rowStyleCounter >= rowClasses.length) {
+                rowStyleCounter = 0;
+            }
+            return style;
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        /**
+         * <p>Return an array of stylesheet classes to be applied to each column in
+         * the table in the order specified. Every column may or may not have a
+         * stylesheet.</p>
+         *
+         * @param table {@link javax.faces.component.UIComponent} component being rendered
+         *
+         * @return an array of column classes
+         */
+        private static String[] getColumnClasses(UIComponent table) {
+
+            String values = (String) table.getAttributes().get("columnClasses");
+            if (values == null) {
+                return EMPTY_STRING_ARRAY;
+            }
+            Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+            return Util.split(appMap, values.trim(), ",");
+
+        }
+
+
+        /**
+         * <p>Return an Iterator over the <code>UIColumn</code> children of the
+         * specified <code>UIData</code> that have a <code>rendered</code> property
+         * of <code>true</code>.</p>
+         *
+         * @param table the table from which to extract children
+         *
+         * @return the List of all UIColumn children
+         */
+        private static List<UIColumn> getColumns(UIComponent table) {
+
+            if (table instanceof UIData) {
+                int childCount = table.getChildCount();
+                if (childCount > 0) {
+                    List<UIColumn> results =
+                          new ArrayList<UIColumn>(childCount);
+                    for (UIComponent kid : table.getChildren()) {
+                        if ((kid instanceof UIColumn) && kid.isRendered()) {
+                            results.add((UIColumn) kid);
+                        }
+                    }
+                    return results;
+                } else {
+                    return Collections.emptyList();
+                }
+            } else {
+                int count;
+                Object value = table.getAttributes().get("columns");
+                if ((value != null) && (value instanceof Integer)) {
+                    count = ((Integer) value);
+                } else {
+                    count = 2;
+                }
+                if (count < 1) {
+                    count = 1;
+                }
+                List<UIColumn> result = new ArrayList<UIColumn>(count);
+                for (int i = 0; i < count; i++) {
+                    result.add(new UIColumn());
+                }
+                return result;
+            }
+
+        }
+
+
+        /**
+         * <p>Return the number of child <code>UIColumn</code> components nested in
+         * the specified <code>UIData</code> that have a facet with the specified
+         * name.</p>
+         *
+         * @param name    Name of the facet being analyzed
+         * @param columns the columns to search
+         *
+         * @return the number of columns associated with the specified Facet name
+         */
+        private static boolean hasFacet(String name, List<UIColumn> columns) {
+
+            if (!columns.isEmpty()) {
+                for (UIColumn column : columns) {
+                    if (column.getFacetCount() > 0) {
+                        if (column.getFacets().containsKey(name)) {
+                            return true;
+                        }
+                    }
+                }
+            }
+            return false;
+
+        }
+
+
+        /**
+         * <p>Return an array of stylesheet classes to be applied to each row in the
+         * table, in the order specified.  Every row may or may not have a
+         * stylesheet.</p>
+         *
+         * @param table {@link javax.faces.component.UIComponent} component being rendered
+         *
+         * @return an array of row classes
+         */
+        private static String[] getRowClasses(UIComponent table) {
+
+            String values = (String) table.getAttributes().get("rowClasses");
+            if (values == null) {
+                return (EMPTY_STRING_ARRAY);
+            }
+            Map<String, Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+            return Util.split(appMap, values.trim(), ",");
+
+        }
+
+    } // END UIDataMetaInfo
+}
diff --git a/com/sun/faces/renderkit/html_basic/BodyRenderer.java b/com/sun/faces/renderkit/html_basic/BodyRenderer.java
new file mode 100644
index 0000000..893a447
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/BodyRenderer.java
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.ListIterator;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+
+/**
+ * <p>This <code>Renderer</code> is responsible for rendering
+ * the standard HTML body element as well as rendering any resources
+ * that should be output before the <code>body</code> tag is closed.</p>
+ */
+public class BodyRenderer extends HtmlBasicRenderer {
+
+    private static final Attribute[] BODY_ATTRIBUTES =
+             AttributeManager.getAttributes(AttributeManager.Key.OUTPUTBODY);
+
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+        // no-op
+    }
+
+    /**
+     * Encode the beginning.
+     * 
+     * @param context the Faces context.
+     * @param component the UI component.
+     * @throws IOException when an I/O error occurs.
+     */
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+        ResponseWriter writer = context.getResponseWriter();
+        writer.startElement("body", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        String styleClass = (String) component.getAttributes().get("styleClass");
+        if (styleClass != null && styleClass.length() != 0) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                BODY_ATTRIBUTES);
+    }
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+        // no-op
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+        ResponseWriter writer = context.getResponseWriter();
+        UIViewRoot viewRoot = context.getViewRoot();
+        ListIterator iter = (viewRoot.getComponentResources(context, "body")).listIterator();
+        while (iter.hasNext()) {
+            UIComponent resource = (UIComponent)iter.next();
+            resource.encodeAll(context);
+        }
+        RenderKitUtils.renderUnhandledMessages(context);
+        writer.endElement("body");
+    }
+    
+    /**
+     * Do we render our children.
+     * 
+     * @return false.
+     */
+    @Override
+    public boolean getRendersChildren() {
+        return false;
+    }
+}
diff --git a/com/sun/faces/renderkit/html_basic/ButtonRenderer.java b/com/sun/faces/renderkit/html_basic/ButtonRenderer.java
new file mode 100644
index 0000000..e2a59bc
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/ButtonRenderer.java
@@ -0,0 +1,283 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ButtonRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+
+import javax.faces.component.UICommand;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.event.ActionEvent;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/**
+ * <B>ButtonRenderer</B> is a class that renders the current value of
+ * <code>UICommand<code> as a Button.
+ */
+
+public class ButtonRenderer extends HtmlBasicRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.COMMANDBUTTON);
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldDecode(component)) {
+            return;
+        }
+
+        String clientId = decodeBehaviors(context, component);
+
+        if (wasClicked(context, component, clientId) && !isReset(component)) {
+            component.queueEvent(new ActionEvent(component));
+
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("This command resulted in form submission " +
+                            " ActionEvent queued.");
+                logger.log(Level.FINE,
+                           "End decoding component {0}",
+                           component.getId());
+            }
+        }
+
+    }
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        // Which button type (SUBMIT, RESET, or BUTTON) should we generate?
+        String type = getButtonType(component);
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String label = "";
+        Object value = ((UICommand) component).getValue();
+        if (value != null) {
+            label = value.toString();
+        }
+
+        /*
+         * If we have any parameters and the button type is submit or button, 
+         * then render Javascript to use later.
+         * RELEASE_PENDING this logic is slightly wrong - we should buffer the user onclick, and use it later.
+         * Leaving it for when we decide how to do script injection.
+         */
+
+        Collection<ClientBehaviorContext.Parameter> params = getBehaviorParameters(component);
+        if ( !params.isEmpty() && (type.equals("submit") || type.equals("button"))) {
+           RenderKitUtils.renderJsfJs(context);
+        }
+
+
+
+        String imageSrc = (String) component.getAttributes().get("image");
+        writer.startElement("input", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        String clientId = component.getClientId(context);
+        if (imageSrc != null) {
+            writer.writeAttribute("type", "image", "type");
+            writer.writeURIAttribute("src", RenderKitUtils.getImageSource(context, component, "image"), "image");
+            writer.writeAttribute("name", clientId, "clientId");
+        } else {
+            writer.writeAttribute("type", type, "type");
+            writer.writeAttribute("name", clientId, "clientId");
+            writer.writeAttribute("value", label, "value");
+        }
+
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES,
+                                                getNonOnClickBehaviors(component));
+
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+
+        String styleClass = (String)
+              component.getAttributes().get("styleClass");
+        if (styleClass != null && styleClass.length() > 0) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+
+        RenderKitUtils.renderOnclick(context, 
+                                     component, 
+                                     params,
+                                     null,
+                                     false);
+
+        // PENDING(edburns): Prior to i_spec_1111, this element 
+        // was rendered unconditionally
+
+        if(component.getChildCount() == 0) {
+            writer.endElement("input");
+        }
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        // PENDING(edburns): Prior to i_spec_1111, this element 
+        // was rendered unconditionally
+
+        if(component.getChildCount() > 0) {
+            context.getResponseWriter().endElement("input");
+        }
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Determine if this component was activated on the client side.</p>
+     *
+     * @param context the <code>FacesContext</code> for the current request
+     * @param component the component of interest
+     * @param clientId the client id, if it has been retrieved, otherwise null
+     * @return <code>true</code> if this component was in fact activated,
+     *  otherwise <code>false</code>
+     */
+    private static boolean wasClicked(FacesContext context,
+                                      UIComponent component,
+                                      String clientId) {
+
+        // Was our command the one that caused this submission?
+        // we don' have to worry about getting the value from request parameter
+        // because we just need to know if this command caused the submission. We
+        // can get the command name by calling currentValue. This way we can
+        // get around the IE bug.
+
+        if (clientId == null) {
+            clientId = component.getClientId(context);
+        }
+
+        Map<String, String> requestParameterMap = context.getExternalContext()
+              .getRequestParameterMap();
+        if (requestParameterMap.get(clientId) == null) {
+
+            // Check to see whether we've got an action event
+            // as a result of a partial/behavior postback.
+            if (RenderKitUtils.isPartialOrBehaviorAction(context, clientId)) {
+                return true;
+            }
+
+            StringBuilder builder = new StringBuilder(clientId);
+            String xValue = builder.append(".x").toString();
+            builder.setLength(clientId.length());
+            String yValue = builder.append(".y").toString();
+            return (requestParameterMap.get(xValue) != null
+                    && requestParameterMap.get(yValue) != null);
+        }
+        return true;
+
+    }
+
+    /**
+     * @param component the component of interest
+     * @return <code>true</code> if the button represents a <code>reset</code>
+     *  button, otherwise <code>false</code>
+     */
+    private static boolean isReset(UIComponent component) {
+
+        return ("reset".equals(component.getAttributes().get("type")));
+
+    }
+
+    /**
+     * <p>If the component's type attribute is null or not equal
+     * to <code>reset</code>, <code>submit</code> or <code>button</code>,
+     * default to <code>submit</code>.
+     * @param component the component of interest
+     * @return the type for this button
+     */
+    private static String getButtonType(UIComponent component) {
+
+        String type = (String) component.getAttributes().get("type");
+        if (type == null || (!"reset".equals(type) &&
+                !"submit".equals(type) && !"button".equals(type))) {
+            type = "submit";
+            // This is needed in the decode method
+            component.getAttributes().put("type", type);
+        }
+        return type;
+
+    }
+
+    // Returns the Behaviors map, but only if it contains some entry other
+    // than those handled by renderOnclick().  This helps us optimize
+    // renderPassThruAttributes() in the very common case where the
+    // button only contains an "action" (or "click") Behavior.  In that
+    // we pass a null Behaviors map into renderPassThruAttributes(),
+    // which allows us to take a more optimized code path.
+    private static Map<String, List<ClientBehavior>> getNonOnClickBehaviors(UIComponent component) {
+
+        return getPassThruBehaviors(component, "click", "action");
+    }
+
+} // end of class ButtonRenderer
diff --git a/com/sun/faces/renderkit/html_basic/CheckboxRenderer.java b/com/sun/faces/renderkit/html_basic/CheckboxRenderer.java
new file mode 100644
index 0000000..b720c6d
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/CheckboxRenderer.java
@@ -0,0 +1,176 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// CheckboxRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.logging.Level;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.convert.ConverterException;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+
+/**
+ * <B>CheckboxRenderer</B> is a class that renders the current value of
+ * <code>UISelectBoolean<code> as a checkbox.
+ */
+
+public class CheckboxRenderer extends HtmlBasicInputRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.SELECTBOOLEANCHECKBOX);
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldDecode(component)) {
+            return;
+        }
+
+        String clientId = decodeBehaviors(context, component);
+
+        if (clientId == null) {
+            clientId = component.getClientId(context);
+        }
+        assert(clientId != null);
+        // Convert the new value
+
+        Map<String, String> requestParameterMap = context.getExternalContext()
+              .getRequestParameterMap();
+        boolean isChecked = isChecked(requestParameterMap.get(clientId));
+        setSubmittedValue(component, isChecked);
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE,
+                       "new value after decoding: {0}",
+                       isChecked);
+        }
+
+    }
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+
+    @Override
+    public Object getConvertedValue(FacesContext context,
+                                    UIComponent component,
+                                    Object submittedValue)
+    throws ConverterException {
+
+        return ((submittedValue instanceof Boolean)
+                ? submittedValue
+                : Boolean.valueOf(submittedValue.toString()));
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected void getEndTextToRender(FacesContext context,
+                                      UIComponent component,
+                                      String currentValue) throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        String styleClass;
+
+        writer.startElement("input", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        writer.writeAttribute("type", "checkbox", "type");
+        writer.writeAttribute("name", component.getClientId(context),
+                              "clientId");
+
+        if (Boolean.valueOf(currentValue)) { 
+            writer.writeAttribute("checked", Boolean.TRUE, "value");
+        }
+        if (null != (styleClass = (String)
+              component.getAttributes().get("styleClass"))) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES,
+                                                getNonOnClickSelectBehaviors(component));
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+
+        RenderKitUtils.renderSelectOnclick(context, component, false);
+
+        writer.endElement("input");
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    /**
+     * @param value the submitted value
+     * @return "true" if the component was checked, otherise "false"
+     */
+    private static boolean isChecked(String value) {
+
+        return "on".equalsIgnoreCase(value)
+               || "yes".equalsIgnoreCase(value)
+               || "true".equalsIgnoreCase(value);
+
+    }
+
+} // end of class CheckboxRenderer
diff --git a/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java b/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java
new file mode 100644
index 0000000..1d3579c
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java
@@ -0,0 +1,276 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// CommandLinkRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+
+import javax.faces.component.UICommand;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.event.ActionEvent;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.MessageUtils;
+
+
+/**
+ * <B>CommandLinkRenderer</B> is a class that renders the current value of
+ * <code>UICommand<code> as a HyperLink that acts like a Button.
+ */
+
+public class CommandLinkRenderer extends LinkRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.COMMANDLINK);
+
+
+    private static final String SCRIPT_STATE = RIConstants.FACES_PREFIX +
+                                               "scriptState";
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldDecode(component)) {
+            return;
+        }
+
+        String clientId = decodeBehaviors(context, component);
+
+        if (wasClicked(context, component, clientId)) {
+            component.queueEvent(new ActionEvent(component));
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("This commandLink resulted in form submission " +
+                            " ActionEvent queued.");
+
+            }
+        }
+
+    }
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        boolean componentDisabled =
+              Boolean.TRUE.equals(component.getAttributes().get("disabled"));
+
+        String formClientId = RenderKitUtils.getFormClientId(component, context);
+
+        if (componentDisabled || formClientId == null) {
+            renderAsDisabled(context, component);
+        } else {
+            RenderKitUtils.renderJsfJs(context);
+            renderAsActive(context, component);
+        }
+
+    }
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncodeChildren(component)) {
+            return;
+        }
+
+        if (component.getChildCount() > 0) {
+            for (UIComponent kid : component.getChildren()) {
+                encodeRecursive(context, kid);
+            }
+        }
+        
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        String formClientId = RenderKitUtils.getFormClientId(component, context);
+        if (formClientId == null) {
+            writer.write(MessageUtils.getExceptionMessageString(
+                  MessageUtils.COMMAND_LINK_NO_FORM_MESSAGE_ID));
+            writer.endElement("span");
+            return;
+        }
+
+        if (Boolean.TRUE.equals(component.getAttributes().get("disabled"))) {
+            writer.endElement("span");
+        } else {
+            writer.endElement("a");
+        }
+
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+
+        return true;
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected Object getValue(UIComponent component) {
+
+        return ((UICommand) component).getValue();       
+
+    }
+
+    /*
+     * Render the necessary Javascript for the link.
+     * Note that much of this code is shared with CommandButtonRenderer.renderOnClick
+     * RELEASE_PENDING: Consolidate this code into a utility method, if possible.
+     */
+    protected void renderAsActive(FacesContext context, UIComponent command)
+          throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        String formClientId = RenderKitUtils.getFormClientId(command, context);
+        if (formClientId == null) {
+            return;
+        }
+
+        //make link act as if it's a button using javascript        
+        writer.startElement("a", command);
+        writeIdAttributeIfNecessary(context, writer, command);
+        writer.writeAttribute("href", "#", "href");
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                command,
+                                                ATTRIBUTES,
+                                                getNonOnClickBehaviors(command));
+
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, command);
+
+        String target = (String) command.getAttributes().get("target");
+        if (target != null) {
+            target = target.trim();
+        } else {
+            target = "";
+        }
+
+        Collection<ClientBehaviorContext.Parameter> params = getBehaviorParameters(command);
+        RenderKitUtils.renderOnclick(context, 
+                                     command,
+                                     params,
+                                     target,
+                                     true);
+
+        writeCommonLinkAttributes(writer, command);
+
+        // render the current value as link text.
+        writeValue(command, writer);
+        writer.flush();
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+    private static boolean wasClicked(FacesContext context,
+                                      UIComponent component,
+                                      String clientId) {
+
+        Map<String,String> requestParamMap =
+              context.getExternalContext().getRequestParameterMap();
+
+        if (clientId == null) {
+            clientId = component.getClientId(context);
+        }
+
+        // Fire an action event if we've had a traditional (non-Ajax)
+        // postback, or if we've had a partial or behavior-based postback.
+        return (requestParamMap.containsKey(clientId) ||
+                RenderKitUtils.isPartialOrBehaviorAction(context, clientId));
+    }
+
+    // Returns the Behaviors map, but only if it contains some entry other
+    // than those handled by renderOnclick().  This helps us optimize
+    // renderPassThruAttributes() in the very common case where the
+    // link only contains an "action" (or "click") Behavior.  In that
+    // we pass a null Behaviors map into renderPassThruAttributes(),
+    // which allows us to take a more optimized code path.
+    private static Map<String, List<ClientBehavior>> getNonOnClickBehaviors(UIComponent component) {
+
+        return getPassThruBehaviors(component, "click", "action");
+    }
+
+
+} // end of class CommandLinkRenderer
diff --git a/com/sun/faces/renderkit/html_basic/CompositeFacetRenderer.java b/com/sun/faces/renderkit/html_basic/CompositeFacetRenderer.java
new file mode 100644
index 0000000..b45d185
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/CompositeFacetRenderer.java
@@ -0,0 +1,103 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.render.Renderer;
+
+/**
+ * <p>
+ * This <code>Renderer</code> is responsible for rendering the content of a
+ * facet defined within the <em>using page</em> template in the desired location
+ * within the composite component implementation section.
+ * </p>
+ */
+public class CompositeFacetRenderer extends Renderer {
+
+    private static final Logger logger = FacesLogger.RENDERKIT.getLogger();
+
+
+    // --------------------------------------------------- Methods from Renderer
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+    throws IOException {
+
+        Util.notNull("context", context);
+        Util.notNull("component", component);
+
+        String facetName = (String)
+              component.getAttributes().get(UIComponent.FACETS_KEY);
+        if (null == facetName) {
+            return;
+        }
+
+        UIComponent currentCompositeComponent = UIComponent
+              .getCurrentCompositeComponent(context);
+        if (null != currentCompositeComponent) {
+            UIComponent facet = currentCompositeComponent.getFacet(facetName);
+            if (null != facet) {
+                facet.encodeAll(context);
+            } else {
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE,
+                               "Could not find facet named {0}",
+                               facetName);
+                }
+            }
+        }
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/CompositeRenderer.java b/com/sun/faces/renderkit/html_basic/CompositeRenderer.java
new file mode 100644
index 0000000..2480e4b
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/CompositeRenderer.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.util.Util;
+
+import java.io.IOException;
+import java.util.Map;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.render.Renderer;
+
+/**
+ * <p>
+ * This <code>Renderer</code> is responsible for rendering the children
+ * defined within the composite implementation section of a composite component
+ * template.
+ * </p>
+ */
+public class CompositeRenderer extends Renderer {
+
+
+    // --------------------------------------------------- Methods from Renderer
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
+
+        Util.notNull("context", context);
+        Util.notNull("component", component);
+
+        Map<String,UIComponent> facets = component.getFacets();
+        UIComponent compositeRoot = facets.get(UIComponent.COMPOSITE_FACET_NAME);
+        if (null == compositeRoot) {
+            throw new IOException("PENDING_I18N: Unable to find composite " + 
+                    " component root for composite component with id " + 
+                    component.getId() + " and class " + 
+                    component.getClass().getName());
+        }
+        compositeRoot.encodeAll(context);
+
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/DoctypeRenderer.java b/com/sun/faces/renderkit/html_basic/DoctypeRenderer.java
new file mode 100644
index 0000000..680d984
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/DoctypeRenderer.java
@@ -0,0 +1,93 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+
+public class DoctypeRenderer extends Renderer {
+
+    private static final Attribute[] DOCTYPE_ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTDOCTYPE);
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+        // no-op
+    }
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+        ResponseWriter writer = context.getResponseWriter();
+        Map<String, Object> attrs = component.getAttributes();
+        writer.append("<!DOCTYPE ");
+        writer.append(attrs.get("rootElement").toString());
+        if (attrs.containsKey("public")) {
+            writer.append(" PUBLIC \"").append((String)attrs.get("public")).append("\"");
+        }
+        if (attrs.containsKey("system")) {
+            writer.append(" \"").append((String)attrs.get("system")).append("\"");
+        }
+        writer.append(">");
+    }
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+        // no-op
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+        context.getResponseWriter();
+    }
+
+    
+}
diff --git a/com/sun/faces/renderkit/html_basic/FileRenderer.java b/com/sun/faces/renderkit/html_basic/FileRenderer.java
new file mode 100644
index 0000000..b0ec917
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/FileRenderer.java
@@ -0,0 +1,147 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// FileRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.renderkit.RenderKitUtils;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.ConverterException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.Part;
+
+public class FileRenderer extends TextRenderer {
+
+   // ---------------------------------------------------------- Public Methods
+
+	@Override
+	public void decode(FacesContext context, UIComponent component) {
+
+		rendererParamsNotNull(context, component);
+
+        if (!shouldDecode(component)) {
+            return;
+        }
+
+        String clientId = decodeBehaviors(context, component);
+
+        if (clientId == null) {
+            clientId = component.getClientId(context);
+        }
+
+        assert(clientId != null);
+        ExternalContext externalContext = context.getExternalContext();
+        Map<String, String> requestMap = externalContext.getRequestParameterMap();
+        
+        if (requestMap.containsKey(clientId)) {
+            setSubmittedValue(component, requestMap.get(clientId));
+        }
+
+        HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
+        try {
+            Collection<Part> parts = request.getParts();
+            for (Part cur : parts) {
+                if (clientId.equals(cur.getName())) {
+                    component.setTransient(true);
+                    setSubmittedValue(component, cur);
+                }
+            }
+        } catch (IOException ioe) {
+            throw new FacesException(ioe);
+        } catch (ServletException se) {
+            throw new FacesException(se);
+        }
+            
+    }
+    
+    // If we are in Project Stage Development mode, the parent form 
+    // must have an enctype of "multipart/form-data" for this component.
+    // If not, produce a message.
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+        if (context.isProjectStage(ProjectStage.Development)) {
+            boolean produceMessage = false;
+            UIForm form = RenderKitUtils.getForm(component, context);
+            if (null != form) {
+                String encType = (String)form.getAttributes().get("enctype");
+                if (null == encType || !encType.equals("multipart/form-data")) {
+                    produceMessage = true;
+                } 
+            } else {
+                produceMessage = true;
+            }
+            
+            if (produceMessage) {
+                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN,
+                    "File upload component requires a form with an enctype of multipart/form-data",
+                    "File upload component requires a form with an enctype of multipart/form-data");
+                context.addMessage(component.getClientId(context), message);   
+            }       
+        }
+        super.encodeBegin(context, component);
+    }
+
+    @Override
+    public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue) throws ConverterException {
+        if (submittedValue instanceof Part) {
+            Part part = (Part) submittedValue;
+            if ((part.getHeader("content-disposition") == null || part.getHeader("content-disposition").endsWith("filename=\"\"")) && part.getSize() <= 0) {
+                return null;
+            }
+        }
+        return submittedValue;
+    }
+        
+        
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/FormRenderer.java b/com/sun/faces/renderkit/html_basic/FormRenderer.java
new file mode 100644
index 0000000..8871228
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/FormRenderer.java
@@ -0,0 +1,257 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// FormRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.logging.Level;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/** <B>FormRenderer</B> is a class that renders a <code>UIForm<code> as a Form. */
+
+public class FormRenderer extends HtmlBasicRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.FORMFORM);
+
+    /**
+     * Flag determining whether or not javax.faces.ViewState should be namespaced.
+     */
+    protected transient boolean namespaceParameters;
+
+    private boolean writeStateAtEnd;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public FormRenderer() {
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        writeStateAtEnd =
+             webConfig.isOptionEnabled(
+                  BooleanWebContextInitParameter.WriteStateAtFormEnd);
+        namespaceParameters =
+                webConfig.isOptionEnabled(
+                     BooleanWebContextInitParameter.NamespaceParameters);
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+
+        rendererParamsNotNull(context, component);
+
+        String clientId = decodeBehaviors(context, component);
+
+        if (clientId == null) {
+            clientId = component.getClientId(context);
+        }
+                
+        // Was our form the one that was submitted?  If so, we need to set
+        // the indicator accordingly..
+        Map<String, String> requestParameterMap = context.getExternalContext()
+              .getRequestParameterMap();
+        if (requestParameterMap.containsKey(clientId)) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.log(Level.FINE,
+                           "UIForm with client ID {0}, submitted",
+                           clientId);
+            }
+            ((UIForm) component).setSubmitted(true);
+        } else {
+            ((UIForm) component).setSubmitted(false);
+        }
+
+    }
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        String clientId = component.getClientId(context);
+        // since method and action are rendered here they are not added
+        // to the pass through attributes in Util class.
+        writer.write('\n');
+        writer.startElement("form", component);
+        writer.writeAttribute("id", clientId, "clientId");
+        writer.writeAttribute("name", clientId, "name");
+        writer.writeAttribute("method", "post", null);
+        writer.writeAttribute("action", getActionStr(context), null);
+        String styleClass =
+              (String) component.getAttributes().get("styleClass");
+        if (styleClass != null) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+        String acceptcharset = (String)
+              component.getAttributes().get("acceptcharset");
+        if (acceptcharset != null) {
+            writer.writeAttribute("accept-charset", acceptcharset,
+                                  "acceptcharset");
+        }
+
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+        writer.writeText("\n", component, null);
+
+        // this hidden field will be checked in the decode method to
+        // determine if this form has been submitted.         
+        writer.startElement("input", null);
+        writer.writeAttribute("type", "hidden", "type");
+        writer.writeAttribute("name", clientId,
+                              "clientId");
+        writer.writeAttribute("value", clientId, "value");
+        writer.endElement("input");
+        writer.write('\n');
+        
+        UIViewRoot viewRoot = context.getViewRoot();
+
+        // Write out special hhidden field for partial submits
+        String viewId = viewRoot.getViewId();
+        String actionURL =
+            context.getApplication().getViewHandler().getActionURL(context, viewId);
+        ExternalContext externalContext = context.getExternalContext();
+        String encodedActionURL = externalContext.encodeActionURL(actionURL);
+        String encodedPartialActionURL = externalContext.encodePartialActionURL(actionURL);
+        if (encodedPartialActionURL != null && 
+            (!encodedPartialActionURL.equals(encodedActionURL))) {
+            writer.startElement("input", null);
+            writer.writeAttribute("type", "hidden", "type");
+            String attributeName = "javax.faces.encodedURL";
+            
+            if (namespaceParameters && (viewRoot instanceof NamingContainer)) {
+                String namingContainerId = viewRoot.getContainerClientId(context);
+                if (namingContainerId != null) {
+                    attributeName = namingContainerId + attributeName;
+                }
+            }
+            writer.writeAttribute("name", attributeName, null);
+            writer.writeAttribute("value", encodedPartialActionURL, "value");
+            writer.endElement("input");
+            writer.write('\n');
+        }
+
+        if (!writeStateAtEnd) {
+            context.getApplication().getViewHandler().writeState(context);
+            writer.write('\n');
+        }
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        // Render the end tag for form
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        
+        // Render ay resources that have been targeted for this form.
+
+        UIViewRoot viewRoot = context.getViewRoot();
+        ListIterator iter = (viewRoot.getComponentResources(context, "form")).listIterator();
+        while (iter.hasNext()) {
+            UIComponent resource = (UIComponent)iter.next();
+            resource.encodeAll(context);
+        }
+        
+        // Render the end tag for form
+        if (writeStateAtEnd) {
+            context.getApplication().getViewHandler().writeState(context);
+        }
+        
+        writer.writeText("\n", component, null);
+        writer.endElement("form");
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * @param context FacesContext for the response we are creating
+     *
+     * @return Return the value to be rendered as the <code>action</code> attribute
+     *  of the form generated for this component.
+     */
+    private static String getActionStr(FacesContext context) {
+
+        String viewId = context.getViewRoot().getViewId();
+        String actionURL =
+              context.getApplication().getViewHandler().
+                    getActionURL(context, viewId);
+        return (context.getExternalContext().encodeActionURL(actionURL));
+
+    }
+
+} // end of class FormRenderer
diff --git a/com/sun/faces/renderkit/html_basic/GridRenderer.java b/com/sun/faces/renderkit/html_basic/GridRenderer.java
new file mode 100644
index 0000000..4824f8f
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/GridRenderer.java
@@ -0,0 +1,266 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+
+/**
+ * <B>GridRenderer</B> is a class that renders <code>UIPanel</code> component
+ * as a "Grid".
+ */
+
+public class GridRenderer extends BaseTableRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.PANELGRID);
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        // Render the beginning of this panel
+        ResponseWriter writer = context.getResponseWriter();
+        renderTableStart(context, component, writer, ATTRIBUTES);
+
+        // render the caption facet (if present)
+        renderCaption(context, component, writer);
+
+        // Render the header facet (if any)
+        renderHeader(context, component, writer);
+
+        // Render the footer facet (if any)
+        renderFooter(context, component, writer);
+
+    }
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncodeChildren(component)) {
+            return;
+        }
+
+        // Set up the variables we will need
+        ResponseWriter writer = context.getResponseWriter();
+        TableMetaInfo info = getMetaInfo(context, component);
+        int columnCount = info.columns.size();
+        boolean open = false;
+        int i = 0;
+
+        // Render our children, starting a new row as needed
+        renderTableBodyStart(context, component, writer);
+        boolean rowRendered = false;
+        for (Iterator<UIComponent> kids = getChildren(component);
+             kids.hasNext();) {
+
+            UIComponent child = kids.next();
+            if (!child.isRendered()) {
+                continue;
+            }
+            if ((i % columnCount) == 0) {
+                if (open) {
+                    renderRowEnd(context, component, writer);
+                }
+                renderRowStart(context, component, writer);
+                rowRendered = true;
+                open = true;
+                info.newRow();
+            }
+            renderRow(context, component, child, writer);
+            i++;
+        }
+        if (open) {
+           renderRowEnd(context, component, writer);
+        }
+        if (!rowRendered) {
+            this.renderEmptyTableRow(writer, component);
+        }
+        renderTableBodyEnd(context, component, writer);
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        // Render the ending of this panel
+        renderTableEnd(context, component, context.getResponseWriter());
+
+        clearMetaInfo(context, component);
+
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+
+        return true;
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected void renderRow(FacesContext context,
+                             UIComponent table,
+                             UIComponent child,
+                             ResponseWriter writer)
+    throws IOException {
+
+        TableMetaInfo info = getMetaInfo(context, table);
+        writer.startElement("td", table);
+        String columnClass = info.getCurrentColumnClass();
+        if (columnClass != null) {
+            writer.writeAttribute("class",
+                                  columnClass,
+                                  "columns");
+        }
+        encodeRecursive(context, child);
+        writer.endElement("td");
+        writer.writeText("\n", table, null);
+
+    }
+
+
+    protected void renderHeader(FacesContext context,
+                                UIComponent table,
+                                ResponseWriter writer) throws IOException {
+
+        TableMetaInfo info = getMetaInfo(context, table);
+        UIComponent header = getFacet(table, "header");
+        String headerClass =
+              (String) table.getAttributes().get("headerClass");
+        if (header != null) {
+            writer.startElement("thead", table);
+            writer.writeText("\n", table, null);
+            writer.startElement("tr", header);
+            writer.startElement("th", header);
+            if (headerClass != null) {
+                writer.writeAttribute("class", headerClass, "headerClass");
+            }
+            writer.writeAttribute("colspan",
+                                  String.valueOf(info.columns.size()),
+                                  null);
+            writer.writeAttribute("scope", "colgroup", null);
+            encodeRecursive(context, header);
+            writer.endElement("th");
+            writer.endElement("tr");
+            writer.writeText("\n", table, null);
+            writer.endElement("thead");
+            writer.writeText("\n", table, null);
+        }
+
+    }
+
+
+    protected void renderFooter(FacesContext context,
+                                UIComponent table,
+                                ResponseWriter writer) throws IOException {
+
+        TableMetaInfo info = getMetaInfo(context, table);
+        UIComponent footer = getFacet(table, "footer");
+        String footerClass =
+              (String) table.getAttributes().get("footerClass");
+        if (footer != null) {
+            writer.startElement("tfoot", table);
+            writer.writeText("\n", table, null);
+            writer.startElement("tr", footer);
+            writer.startElement("td", footer);
+            if (footerClass != null) {
+                writer.writeAttribute("class", footerClass, "footerClass");
+            }
+            writer.writeAttribute("colspan",
+                                  String.valueOf(info.columns.size()),
+                                  null);
+            encodeRecursive(context, footer);
+            writer.endElement("td");
+            writer.endElement("tr");
+            writer.writeText("\n", table, null);
+            writer.endElement("tfoot");
+            writer.writeText("\n", table, null);
+        }
+
+    }
+
+
+    // ------------------------------------------------------- Private Methods
+
+
+    private void renderEmptyTableRow(final ResponseWriter writer,
+            final UIComponent component) throws IOException {
+
+        writer.startElement("tr", component);
+        writer.startElement("td", component);
+        writer.endElement("td");
+        writer.endElement("tr");
+
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/GroupRenderer.java b/com/sun/faces/renderkit/html_basic/GroupRenderer.java
new file mode 100644
index 0000000..abc8f78
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/GroupRenderer.java
@@ -0,0 +1,167 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+/**
+ * Arbitrary grouping "renderer" that simply renders its children
+ * recursively in the <code>encodeEnd()</code> method.
+ *
+ */
+public class GroupRenderer extends HtmlBasicRenderer {
+
+private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.PANELGROUP);
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+        // Render a span around this group if necessary
+        String style = (String) component.getAttributes().get("style");
+        String styleClass = (String) component.getAttributes().get("styleClass");
+        ResponseWriter writer = context.getResponseWriter();
+
+        if (divOrSpan(component)) {
+            if (("block".equals(component.getAttributes().get("layout")))) {
+                writer.startElement("div", component);
+            } else {
+                writer.startElement("span", component);
+            }
+            writeIdAttributeIfNecessary(context, writer, component);
+            if (styleClass != null) {
+                writer.writeAttribute("class", styleClass, "styleClass");
+            }
+            // JAVASERVERFACES-3270: do not manually render "style" as it is handled
+            // in renderPassThruAttributes().
+        }
+        
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+
+    }
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncodeChildren(component)) {
+            return;
+        }
+
+        // Render our children recursively
+        Iterator<UIComponent> kids = getChildren(component);
+        while (kids.hasNext()) {
+            encodeRecursive(context, kids.next());
+        }
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        // Close our span element if necessary
+        ResponseWriter writer = context.getResponseWriter();
+        if (divOrSpan(component)) {
+            if ("block".equals(component.getAttributes().get("layout"))) {
+                writer.endElement("div");
+            } else {
+                writer.endElement("span");
+            }
+        }
+
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+
+        return true;
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * @param component <code>UIComponent</code> for this group
+     *
+     * @return <code>true</code> if we need to render a div or span element
+     *  around this group.
+     */
+    private boolean divOrSpan(UIComponent component) {
+
+        return (shouldWriteIdAttribute(component) ||
+            (component.getAttributes().get("style") != null) ||
+            (component.getAttributes().get("styleClass") != null));
+
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/HeadRenderer.java b/com/sun/faces/renderkit/html_basic/HeadRenderer.java
new file mode 100644
index 0000000..af75415
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/HeadRenderer.java
@@ -0,0 +1,118 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.config.FaceletsConfiguration;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+
+/**
+ * /**
+ * <p>This <code>Renderer</code> is responsible for rendering
+ * the standard HTML head elements as well as rendering any resources
+ * that should be output before the <code>head</code> tag is closed.</p>
+ */
+public class HeadRenderer extends Renderer {
+
+    private static final Attribute[] HEAD_ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTHEAD);
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+        // no-op
+    }
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+        ResponseWriter writer = context.getResponseWriter();
+        writer.startElement("head", component);
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                HEAD_ATTRIBUTES);
+        WebConfiguration webConfig = WebConfiguration.getInstance(context.getExternalContext());
+        FaceletsConfiguration faceletsConfig = webConfig.getFaceletsConfiguration();
+        if (faceletsConfig.isOutputHtml5Doctype(context.getViewRoot().getViewId())) {
+            String clientId = component.getClientId(context);
+            writer.writeAttribute("id", clientId, "clientId");
+        }
+    }
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+        // no-op
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+        ResponseWriter writer = context.getResponseWriter();
+        encodeHeadResources(context);
+        writer.endElement("head");
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private void encodeHeadResources(FacesContext context)
+    throws IOException {
+
+        UIViewRoot viewRoot = context.getViewRoot();
+        for (UIComponent resource : viewRoot.getComponentResources(context, "head")) {
+            resource.encodeAll(context);
+        }
+
+    }
+    
+}
diff --git a/com/sun/faces/renderkit/html_basic/HiddenRenderer.java b/com/sun/faces/renderkit/html_basic/HiddenRenderer.java
new file mode 100644
index 0000000..d622e53
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/HiddenRenderer.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// HiddenRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+/**
+ * <B>HiddenRenderer</B> is a class that renders the current value of
+ * <code>UIInput<code> component as a HTML hidden variable.
+ */
+public class HiddenRenderer extends HtmlBasicInputRenderer {
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected void getEndTextToRender(FacesContext context,
+                                      UIComponent component,
+                                      String currentValue)
+          throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        writer.startElement("input", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        writer.writeAttribute("type", "hidden", "type");
+        String clientId = component.getClientId(context);
+        writer.writeAttribute("name", clientId, "clientId");
+
+        // render default text specified
+        if (currentValue != null) {
+            writer.writeAttribute("value", currentValue, "value");
+        }
+        writer.endElement("input");
+
+    }
+
+    // The testcase for this class is TestRenderers_3.java 
+
+} // end of class HiddenRenderer
+
+
diff --git a/com/sun/faces/renderkit/html_basic/HtmlBasicInputRenderer.java b/com/sun/faces/renderkit/html_basic/HtmlBasicInputRenderer.java
new file mode 100644
index 0000000..1a464ad
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/HtmlBasicInputRenderer.java
@@ -0,0 +1,250 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// HtmlBasicInputRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+
+import javax.el.ValueExpression;
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.component.ValueHolder;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+
+import com.sun.faces.util.MessageFactory;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.RequestStateManager;
+
+/**
+ * <B>HtmlBasicInputRenderer</B> is a base class for implementing renderers
+ * that support UIInput type components
+ */
+
+public abstract class HtmlBasicInputRenderer extends HtmlBasicRenderer {
+
+
+    private boolean hasStringConverter = false;
+
+    private boolean hasStringConverterSet = false;
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public Object getConvertedValue(FacesContext context, UIComponent component,
+                                    Object submittedValue)
+          throws ConverterException {
+
+        String newValue = (String) submittedValue;
+        // if we have no local value, try to get the valueExpression.
+        ValueExpression valueExpression = component.getValueExpression("value");
+        Converter converter = null;
+
+        // If there is a converter attribute, use it to to ask application
+        // instance for a converter with this identifer.
+        if (component instanceof ValueHolder) {
+            converter = ((ValueHolder) component).getConverter();
+        }
+
+        if (null == converter && null != valueExpression) {
+            Class converterType = valueExpression.getType(context.getELContext());
+            // if converterType is null, assume the modelType is "String".
+            if (converterType == null ||
+                converterType == Object.class) {
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE,
+                               "No conversion necessary for value {0} of component {1}",
+                               new Object[]{
+                                     submittedValue,
+                                     component.getId() });
+                }
+                return newValue;
+            }
+
+            // If the converterType is a String, and we don't have a 
+            // converter-for-class for java.lang.String, assume the type is 
+            // "String".
+            if (converterType == String.class && !hasStringConverter(context)) {
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE,
+                               "No conversion necessary for value {0} of component {1}",
+                               new Object[]{
+                                     submittedValue,
+                                     component.getId()});
+                }
+                return newValue;
+            }
+            // if getType returns a type for which we support a default
+            // conversion, acquire an appropriate converter instance.
+
+            try {
+                Application application = context.getApplication();
+                converter = application.createConverter(converterType);
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE,
+                               "Created converter ({0}) for type {1} for component {2}.",
+                               new Object[] {
+                                     converter.getClass().getName(),
+                                     converterType.getClass().getName(),
+                                     component.getId() });
+                }
+            } catch (Exception e) {
+                if (logger.isLoggable(Level.SEVERE)) {
+                    logger.log(Level.SEVERE,
+                               "Could not instantiate converter for type {0}: {1}",
+                               new Object[] {
+                                     converterType,
+                                     e.toString() });
+                    logger.log(Level.SEVERE, "", e);
+                }
+                return (null);
+            }
+        } else if (converter == null) {
+            // if there is no valueExpression and converter attribute set,
+            // assume the modelType as "String" since we have no way of
+            // figuring out the type. So for the selectOne and
+            // selectMany, converter has to be set if there is no
+            // valueExpression attribute set on the component.
+            if (logger.isLoggable(Level.FINE)) {
+                logger.log(Level.FINE,
+                            "No conversion necessary for value {0} of component {1}",
+                            new Object[] {
+                                  submittedValue,
+                                  component.getId() });
+                logger.fine(" since there is no explicitly registered converter "
+                            + "and the component value is not bound to a model property");
+            }
+            return newValue;
+        }
+
+        if (converter != null) {
+            // If the conversion eventually falls to needing to use EL type coercion,
+            // make sure our special ConverterPropertyEditor knows about this value.
+            RequestStateManager.set(context,
+                                    RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
+                                    component);
+            return converter.getAsObject(context, component, newValue);
+        } else {
+            // throw converter exception.
+            Object[] params = {
+                  newValue,
+                  "null Converter"
+            };
+
+            throw new ConverterException(MessageFactory.getMessage(
+                  context, MessageUtils.CONVERSION_ERROR_MESSAGE_ID, params));
+        }
+
+    }
+
+
+    @Override
+    public void setSubmittedValue(UIComponent component, Object value) {
+
+        if (component instanceof UIInput) {
+            ((UIInput) component).setSubmittedValue(value);
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Set submitted value " + value + " on component ");
+            }
+        }
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected Object getValue(UIComponent component) {
+
+        if (component instanceof ValueHolder) {
+            Object value = ((ValueHolder) component).getValue();
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("component.getValue() returned " + value);
+            }
+            return value;
+        }
+
+        return null;
+
+    }
+
+    // Returns the Behaviors map, but only if it contains some entry other
+    // than those handled by renderOnchange().  This helps us optimize
+    // renderPassThruAttributes() in the very common case where the
+    // button only contains an "valueChange" (or "change") Behavior.  In that
+    // we pass a null Behaviors map into renderPassThruAttributes(),
+    // which allows us to take a more optimized code path.
+    protected static Map<String, List<ClientBehavior>> getNonOnChangeBehaviors(UIComponent component) {
+        return getPassThruBehaviors(component, "change", "valueChange");
+    }
+
+    // Returns the Behaviors map, but only if it contains some entry other
+    // than those handled by renderOnchange().  This helps us optimize
+    // renderPassThruAttributes() in the very common case where the
+    // button only contains an "valueChange" (or "change") Behavior.  In that
+    // we pass a null Behaviors map into renderPassThruAttributes(),
+    // which allows us to take a more optimized code path.
+    protected static Map<String, List<ClientBehavior>> getNonOnClickSelectBehaviors(UIComponent component) {
+        return getPassThruBehaviors(component, "click", "valueChange");
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+    private boolean hasStringConverter(FacesContext context) {
+
+        if (!hasStringConverterSet) {
+            hasStringConverter = (null !=
+                                  context.getApplication()
+                                        .createConverter(String.class));
+            hasStringConverterSet = true;
+        }
+        return hasStringConverter;
+
+    }
+
+} // end of class HtmlBasicInputRenderer
diff --git a/com/sun/faces/renderkit/html_basic/HtmlBasicRenderer.java b/com/sun/faces/renderkit/html_basic/HtmlBasicRenderer.java
new file mode 100644
index 0000000..9c15469
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/HtmlBasicRenderer.java
@@ -0,0 +1,970 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// HtmlBasicRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.component.UIParameter;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.ValueHolder;
+import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.render.Renderer;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+
+/**
+ * <B>HtmlBasicRenderer</B> is a base class for implementing renderers
+ * for HtmlBasicRenderKit.
+ */
+
+public abstract class HtmlBasicRenderer extends Renderer {   
+
+
+    // Log instance for this class
+    protected static final Logger logger = FacesLogger.RENDERKIT.getLogger();
+
+    protected static final Param[] EMPTY_PARAMS = new Param[0];
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public HtmlBasicRenderer() {
+
+        super();
+
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public String convertClientId(FacesContext context, String clientId) {
+
+        return clientId;
+
+    }
+
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldDecode(component)) {
+            return;
+        }
+
+        String clientId = decodeBehaviors(context, component);
+
+        if (!(component instanceof UIInput)) {
+            // decode needs to be invoked only for components that are
+            // instances or subclasses of UIInput.
+            if (logger.isLoggable(Level.FINE)) {
+                logger.log(Level.FINE,
+                           "No decoding necessary since the component {0} is not an instance or a sub class of UIInput",
+                           component.getId());
+            }
+            return;
+        }
+
+        if (clientId == null) {
+            clientId = component.getClientId(context);
+        }
+
+        assert(clientId != null);
+        Map<String, String> requestMap =
+              context.getExternalContext().getRequestParameterMap();
+        // Don't overwrite the value unless you have to!
+        String newValue = requestMap.get(clientId);
+        if (newValue != null) {
+            setSubmittedValue(component, newValue);
+            if (logger.isLoggable(Level.FINE)) {
+                logger.log(Level.FINE,
+                           "new value after decoding {0}",
+                           newValue);
+            }
+        }
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+       rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String currentValue = getCurrentValue(context, component);
+        if (logger.isLoggable(Level.FINE)) {
+            logger.log(Level.FINE,
+                       "Value to be rendered {0}",
+                       currentValue);
+        }
+        getEndTextToRender(context, component, currentValue);
+
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+
+        return true;
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    // Decodes Behaviors if any match the behavior source/event.
+    // As a convenience, returns component id, but only if it
+    // was retrieved.  This allows us to avoid duplicating
+    // calls to getClientId(), which can be expensive for 
+    // deep component trees.
+    protected final String decodeBehaviors(FacesContext context, 
+                                           UIComponent component)  {
+
+        if (!(component instanceof ClientBehaviorHolder)) {
+            return null;
+        }
+
+        ClientBehaviorHolder holder = (ClientBehaviorHolder)component;
+        Map<String, List<ClientBehavior>> behaviors = holder.getClientBehaviors();
+        if (behaviors.isEmpty()) {
+            return null;
+        }
+
+        ExternalContext external = context.getExternalContext();
+        Map<String, String> params = external.getRequestParameterMap();
+        String behaviorEvent = params.get("javax.faces.behavior.event");
+
+        if (null != behaviorEvent) {
+            List<ClientBehavior> behaviorsForEvent = behaviors.get(behaviorEvent);
+
+            if (behaviorsForEvent != null && behaviorsForEvent.size() > 0) {
+               String behaviorSource = params.get("javax.faces.source");
+               String clientId = component.getClientId();
+               if (isBehaviorSource(context, behaviorSource, clientId)) {
+                   for (ClientBehavior behavior: behaviorsForEvent) {
+                       behavior.decode(context, component);
+                   }
+               }
+
+               return clientId;
+            }
+        }
+
+        return null;
+    }
+
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param behaviorSourceId the ID of the behavior source
+     * @param componentClientId the client ID of the component being decoded
+     * @return <code>true</code> if the behavior source is for the component
+     *  being decoded, otherwise <code>false</code>
+     */
+    protected boolean isBehaviorSource(FacesContext ctx,
+                                       String behaviorSourceId,
+                                       String componentClientId) {
+
+        return (behaviorSourceId != null && behaviorSourceId.equals(componentClientId));
+
+    }
+
+
+    /**
+     * <p>Conditionally augment an id-reference value.</p>
+     * <p>If the <code>forValue</code> doesn't already include a generated
+     * suffix, but the id of the <code>fromComponent</code> does include a
+     * generated suffix, then append the suffix from the
+     * <code>fromComponent</code> to the <code>forValue</code>.
+     * Otherwise just return the <code>forValue</code> as is.</p>
+     *
+     * @param forValue      - the basic id-reference value.
+     * @param fromComponent - the component that holds the
+     *                      code>forValue</code>.
+     *
+     * @return the (possibly augmented) <code>forValue<code>.
+     */
+    protected String augmentIdReference(String forValue,
+                                        UIComponent fromComponent) {
+
+        int forSuffix = forValue.lastIndexOf(UIViewRoot.UNIQUE_ID_PREFIX);
+        if (forSuffix <= 0) {
+            // if the for-value doesn't already have a suffix present
+            String id = fromComponent.getId();
+            if (id != null) {
+                int idSuffix = id.lastIndexOf(UIViewRoot.UNIQUE_ID_PREFIX);
+                if (idSuffix > 0) {
+                    // but the component's own id does have a suffix
+                    if (logger.isLoggable(Level.FINE)) {
+                        logger.fine("Augmenting for attribute with " +
+                                    id.substring(idSuffix) +
+                                    " suffix from Id attribute");
+                    }
+                    forValue += id.substring(idSuffix);
+                }
+            }
+        }
+        return forValue;
+
+    }
+
+
+    /**
+     * <p>Render nested child components by invoking the encode methods
+     * on those components, but only when the <code>rendered</code>
+     * property is <code>true</code>.</p>
+     *
+     * @param context FacesContext for the current request
+     * @param component the component to recursively encode
+     *
+     * @throws IOException if an error occurrs during the encode process
+     */
+    protected void encodeRecursive(FacesContext context, UIComponent component)
+          throws IOException {
+
+        // suppress rendering if "rendered" property on the component is
+        // false.
+        if (!component.isRendered()) {
+            return;
+        }
+
+        // Render this component and its children recursively
+        component.encodeBegin(context);
+        if (component.getRendersChildren()) {
+            component.encodeChildren(context);
+        } else {
+            Iterator<UIComponent> kids = getChildren(component);
+            while (kids.hasNext()) {
+                UIComponent kid = kids.next();
+                encodeRecursive(context, kid);
+            }
+        }
+        component.encodeEnd(context);
+
+    }
+
+
+    /**
+     * @param component <code>UIComponent</code> for which to extract children
+     *
+     * @return an Iterator over the children of the specified
+     *  component, selecting only those that have a
+     *  <code>rendered</code> property of <code>true</code>.
+     */
+    protected Iterator<UIComponent> getChildren(UIComponent component) {
+
+        int childCount = component.getChildCount();
+        if (childCount > 0) {
+            return component.getChildren().iterator();
+        } else {
+            return Collections.<UIComponent>emptyList().iterator();
+        }
+
+    }
+
+
+    /**
+     * @param context the FacesContext for the current request
+     * @param component the UIComponent whose value we're interested in
+     *
+     * @return the value to be rendered and formats it if required. Sets to
+     *  empty string if value is null.
+     */
+    protected String getCurrentValue(FacesContext context,
+                                     UIComponent component) {
+
+        if (component instanceof UIInput) {
+            Object submittedValue = ((UIInput) component).getSubmittedValue();
+            if (submittedValue != null) {
+                // value may not be a String...
+                return submittedValue.toString();
+            }
+        }
+
+        String currentValue = null;
+        Object currentObj = getValue(component);
+        if (currentObj != null) {
+            currentValue = getFormattedValue(context, component, currentObj);
+        }
+        return currentValue;
+
+    }
+
+
+    /**
+     * Renderers override this method to write appropriate HTML content into
+     * the buffer.
+     *
+     * @param context the FacesContext for the current request
+     * @param component the UIComponent of interest
+     * @param currentValue <code>component</code>'s current value
+     *
+     * @throws IOException if an error occurs rendering the text
+     */
+    protected void getEndTextToRender(FacesContext context,
+                                      UIComponent component,
+                                      String currentValue) throws IOException {
+
+        // no-op unless overridden
+
+    }
+
+
+    /**
+     * @param component Component from which to return a facet
+     * @param name      Name of the desired facet
+     *
+     * @return the specified facet from the specified component, but
+     *  <strong>only</strong> if its <code>rendered</code> property is
+     *  set to <code>true</code>.
+     */
+    protected UIComponent getFacet(UIComponent component, String name) {
+
+        UIComponent facet = null;
+        if (component.getFacetCount() > 0) {
+            facet = component.getFacet(name);
+            if ((facet != null) && !facet.isRendered()) {
+                facet = null;
+            }
+        }
+        return (facet);
+
+    }
+
+
+    /**
+     * Locates the component identified by <code>forComponent</code>
+     *
+     * @param context the FacesContext for the current request
+     * @param forComponent - the component to search for
+     * @param component    - the starting point in which to begin the search
+     *
+     * @return the component with the the <code>id</code that matches
+     *         <code>forComponent</code> otheriwse null if no match is found.
+     */
+    protected UIComponent getForComponent(FacesContext context,
+                                          String forComponent,
+                                          UIComponent component) {
+
+        if (null == forComponent || forComponent.length() == 0) {
+            return null;
+        }
+
+        UIComponent result = null;
+        UIComponent currentParent = component;
+        try {
+            // Check the naming container of the current 
+            // component for component identified by
+            // 'forComponent'
+            while (currentParent != null) {
+                // If the current component is a NamingContainer,
+                // see if it contains what we're looking for.
+                result = currentParent.findComponent(forComponent);
+                if (result != null) {
+                    break;
+                }
+                // if not, start checking further up in the view
+                currentParent = currentParent.getParent();
+            }
+
+            // no hit from above, scan for a NamingContainer
+            // that contains the component we're looking for from the root.    
+            if (result == null) {
+                result =
+                      findUIComponentBelow(context.getViewRoot(), forComponent);
+            }
+        } catch (Exception e) {
+            if (logger.isLoggable(Level.FINEST)) {
+                logger.log(Level.FINEST, "Unable to find for component", e);
+            }
+        }
+        // log a message if we were unable to find the specified
+        // component (probably a misconfigured 'for' attribute
+        if (result == null) {
+            if (logger.isLoggable(Level.WARNING)) {
+                logger.warning(MessageUtils.getExceptionMessageString(
+                      MessageUtils.COMPONENT_NOT_FOUND_IN_VIEW_WARNING_ID,
+                      forComponent));
+            }
+        }
+        return result;
+
+    }
+
+    /**
+     * Overloads getFormattedValue to take a advantage of a previously
+     * obtained converter.
+     * @param context the FacesContext for the current request
+     * @param component UIComponent of interest
+     * @param currentValue the current value of <code>component</code>
+     * @param converter the component's converter
+     * @return the currentValue after any associated Converter has been
+     *  applied
+     *
+     * @throws ConverterException if the value cannot be converted
+     */
+    protected String getFormattedValue(FacesContext context,
+                                       UIComponent component,
+                                       Object currentValue,
+                                       Converter converter)
+          throws ConverterException {
+
+        // formatting is supported only for components that support
+        // converting value attributes.
+        if (!(component instanceof ValueHolder)) {
+            if (currentValue != null) {
+                return currentValue.toString();
+            }
+            return null;
+        }
+
+        if (converter == null) {
+            // If there is a converter attribute, use it to to ask application
+            // instance for a converter with this identifer.
+            converter = ((ValueHolder) component).getConverter();
+        }
+
+        if (converter == null) {
+            // if value is null and no converter attribute is specified, then
+            // return a zero length String.
+            if(currentValue == null) {
+        	return "";
+            }
+            // Do not look for "by-type" converters for Strings
+            if (currentValue instanceof String) {
+                return (String) currentValue;
+            }
+
+            // if converter attribute set, try to acquire a converter
+            // using its class type.
+
+            Class converterType = currentValue.getClass();
+            converter = Util.getConverterForClass(converterType, context);
+
+            // if there is no default converter available for this identifier,
+            // assume the model type to be String.
+            if (converter == null) {
+                return currentValue.toString();
+            }
+        }
+
+        return converter.getAsString(context, component, currentValue);
+    }
+
+
+    /**
+     * @param context the FacesContext for the current request
+     * @param component UIComponent of interest
+     * @param currentValue the current value of <code>component</code>
+     *
+     * @return the currentValue after any associated Converter has been
+     *  applied
+     *
+     * @throws ConverterException if the value cannot be converted
+     */
+    protected String getFormattedValue(FacesContext context,
+                                       UIComponent component,
+                                       Object currentValue)
+          throws ConverterException {
+
+        return getFormattedValue(context, component, currentValue, null);
+
+    }
+
+
+    protected Iterator getMessageIter(FacesContext context,
+                                      String forComponent,
+                                      UIComponent component) {
+
+        Iterator messageIter;
+        // Attempt to use the "for" attribute to locate 
+        // messages.  Three possible scenarios here:
+        // 1. valid "for" attribute - messages returned
+        //    for valid component identified by "for" expression.
+        // 2. zero length "for" expression - global errors
+        //    not associated with any component returned
+        // 3. no "for" expression - all messages returned.
+        if (null != forComponent) {
+            if (forComponent.length() == 0) {
+                messageIter = context.getMessages(null);
+            } else {
+                UIComponent result = getForComponent(context, forComponent,
+                                                     component);
+                if (result == null) {
+                    messageIter = Collections.EMPTY_LIST.iterator();
+                } else {
+                    messageIter =
+                          context.getMessages(result.getClientId(context));
+                }
+            }
+        } else {
+            messageIter = context.getMessages();
+        }
+        return messageIter;
+
+    }
+
+
+    /**
+     * @param command the command which may have parameters
+     *
+     * @return an array of parameters
+     */
+    protected Param[] getParamList(UIComponent command) {
+
+        if (command.getChildCount() > 0) {
+            ArrayList<Param> parameterList = new ArrayList<Param>();
+
+            for (UIComponent kid : command.getChildren()) {
+                if (kid instanceof UIParameter) {
+                    UIParameter uiParam = (UIParameter) kid;
+                    if (!uiParam.isDisable()) {
+                        Object value = uiParam.getValue();
+                        Param param = new Param(uiParam.getName(),
+                                                (value == null ? null :
+                                                 value.toString()));
+                        parameterList.add(param);
+                    }
+                }
+            }
+            return parameterList.toArray(new Param[parameterList.size()]);
+        } else {
+            return EMPTY_PARAMS;
+        }
+
+
+    }
+
+    /**
+     * Collections parameters for use with Behavior script rendering.
+     * Similar to getParamList(), but returns a collection of 
+     * ClientBehaviorContext.Parameter instances.
+     *
+     * @param command the command which may have parameters
+     *
+     * @return a collection of ClientBehaviorContext.Parameter instances.
+     */
+    protected Collection<ClientBehaviorContext.Parameter> getBehaviorParameters(
+        UIComponent command) {
+
+        ArrayList<ClientBehaviorContext.Parameter> params = null;
+        int childCount = command.getChildCount();
+
+        if (childCount > 0) {
+
+            for (UIComponent kid : command.getChildren()) {
+                if (kid instanceof UIParameter) {
+                    UIParameter uiParam = (UIParameter) kid;
+                    String name = uiParam.getName();
+                    Object value = uiParam.getValue();
+
+                    if ((name != null) && (name.length() > 0)) {
+
+                        if (params == null) {
+                            params = new ArrayList<ClientBehaviorContext.Parameter>(childCount);
+                        }
+
+                        params.add(new ClientBehaviorContext.Parameter(name, value));
+                    }
+                }
+            }
+        }
+
+        return (params == null) ? Collections.<ClientBehaviorContext.Parameter>emptyList() : params;
+
+    }
+
+
+    protected Object getValue(UIComponent component) {
+
+        // Make sure this method isn't being called except 
+        // from subclasses that override getValue()!
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * Renderers override this method to store the previous value
+     * of the associated component.
+     *
+     * @param component the target component to which the submitted value
+     *  will be set
+     * @param value the value to set
+     */
+    protected void setSubmittedValue(UIComponent component, Object value) {
+
+        // no-op unless overridden
+
+    }
+
+
+    /**
+     * @param component the component of interest
+     *
+     * @return true if this renderer should render an id attribute.
+     */
+    protected boolean shouldWriteIdAttribute(UIComponent component) {
+
+        // By default we only write the id attribute if:
+        //
+        // - We have a non-auto-generated id, or...
+        // - We have client behaviors.
+        //
+        // We assume that if client behaviors are present, they
+        // may need access to the id (AjaxBehavior certainly does).
+
+        String id;
+        return (null != (id = component.getId()) &&
+                    (!id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX) ||
+                        ((component instanceof ClientBehaviorHolder) &&
+                          !((ClientBehaviorHolder)component).getClientBehaviors().isEmpty())));
+    }
+
+
+    protected String writeIdAttributeIfNecessary(FacesContext context,
+                                                 ResponseWriter writer,
+                                                 UIComponent component) {
+
+        String id = null;
+        if (shouldWriteIdAttribute(component)) {
+            try {
+                writer.writeAttribute("id", id = component.getClientId(context),
+                                      "id");
+            } catch (IOException e) {
+                if (logger.isLoggable(Level.WARNING)) {
+                    String message = MessageUtils.getExceptionMessageString
+                          (MessageUtils.CANT_WRITE_ID_ATTRIBUTE_ERROR_MESSAGE_ID,
+                           e.getMessage());
+                    logger.warning(message);
+                }
+            }
+        }
+        return id;
+
+    }
+
+    protected void rendererParamsNotNull(FacesContext context,
+                                         UIComponent component) {
+
+        Util.notNull("context", context);
+        Util.notNull("component", component);
+        
+    }
+
+
+    protected boolean shouldEncode(UIComponent component) {
+
+        // suppress rendering if "rendered" property on the component is
+        // false.
+        if (!component.isRendered()) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.log(Level.FINE,
+                           "End encoding component {0} since rendered attribute is set to false",
+                           component.getId());
+            }
+            return false;
+        }
+        return true;
+
+    }
+
+
+    protected boolean shouldDecode(UIComponent component) {
+
+        if (Util.componentIsDisabledOrReadonly(component)) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.log(Level.FINE,
+                           "No decoding necessary since the component {0} is disabled or read-only",
+                           component.getId());
+            }
+            return false;
+        }
+        return true;
+
+    }
+
+    protected boolean shouldEncodeChildren(UIComponent component) {
+
+        // suppress rendering if "rendered" property on the component is
+        // false.
+        if (!component.isRendered()) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.log(Level.FINE,
+                            "Children of component {0} will not be encoded since this component's rendered attribute is false",
+                            component.getId());
+            }
+            return false;
+        }
+        return true;
+
+    }
+
+    /**
+     * When rendering pass thru attributes, we need to take any
+     * attached Behaviors into account.  The presence of a non-empty
+     * Behaviors map can cause us to switch from optimized pass thru
+     * attribute rendering to the unoptimized code path.  However,
+     * in two very common cases - attaching action behaviors to 
+     * commands and attaching value change behaviors to editable value
+     * holders - the behaviors map is populated with behaviors that
+     * are not handled by the pass thru attribute code - ie. the
+     * behaviors are handled locally by the renderer.
+     *
+     * In order to optimize such cases, we check to see whether the
+     * component's behaviors map actually contains behaviors only 
+     * for these non-pass thru attributes.  If so, we can pass a
+     * null behavior map into renderPassThruAttributes(), thus ensuring
+     * that we can take advantage of the optimized pass thru rendering
+     * logic.
+     *
+     * Note that in all cases where we use this method, we actually have
+     * two behavior events that we want to check for - a low-level/dom
+     * event (eg. "click", or "change") plus a high-level component
+     * event (eg. "action", or "valueChange").
+     *
+     * @param component the component that we are rendering
+     * @param domEventName the name of the dom-level event
+     * @param componentEventName the name of the component-level event
+     */
+    protected static Map<String, List<ClientBehavior>> getPassThruBehaviors(
+        UIComponent component,
+        String domEventName,
+        String componentEventName) {
+
+        if (!(component instanceof ClientBehaviorHolder)) {
+            return null;
+        }
+
+        Map<String, List<ClientBehavior>> behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
+
+        int size = behaviors.size();
+
+        if ((size == 1) || (size == 2)) {
+            boolean hasDomBehavior = behaviors.containsKey(domEventName);
+            boolean hasComponentBehavior = behaviors.containsKey(componentEventName);
+
+            // If the behavior map only contains behaviors for non-pass
+            // thru attributes, return null.
+            if (((size == 1) && (hasDomBehavior || hasComponentBehavior)) ||
+                ((size == 2) && hasDomBehavior && hasComponentBehavior)) {
+                return null;
+            }
+        }
+
+        return behaviors;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Recursively searches for {@link NamingContainer}s from the
+     * given start point looking for the component with the <code>id</code>
+     * specified by <code>forComponent</code>.
+     *
+     * @param startPoint   - the starting point in which to begin the search
+     * @param forComponent - the component to search for
+     *
+     * @return the component with the the <code>id</code that matches
+     *         <code>forComponent</code> otheriwse null if no match is found.
+     */
+    private static UIComponent findUIComponentBelow(UIComponent startPoint,
+                                                    String forComponent) {
+
+        UIComponent retComp = null;
+        if (startPoint.getChildCount() > 0) {
+            List<UIComponent> children = startPoint.getChildren();
+            for (int i = 0, size = children.size(); i < size; i++) {
+                UIComponent comp = children.get(i);
+
+                if (comp instanceof NamingContainer) {
+                    try {
+                        retComp = comp.findComponent(forComponent);
+                    } catch (IllegalArgumentException iae) {
+                        continue;
+                    }
+                }
+
+                if (retComp == null) {
+                    if (comp.getChildCount() > 0) {
+                        retComp = findUIComponentBelow(comp, forComponent);
+                    }
+                }
+
+                if (retComp != null) {
+                    break;
+                }
+            }
+        }
+        return retComp;
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * <p>Simple class to encapsulate the name and value of a
+     * <code>UIParameter</code>.
+     */
+    public static class Param {
+
+
+        public String name;
+        public String value;
+
+        
+        // -------------------------------------------------------- Constructors
+
+
+        public Param(String name, String value) {
+
+            this.name = name;
+            this.value = value;
+
+        }
+
+    }
+
+
+    /**
+     * Structure to hold common info used by Select* components
+     * to reduce the number of times component attributes are evaluated
+     * when rendering options.
+     */
+    public static class OptionComponentInfo {
+
+        String disabledClass;
+        String enabledClass;
+        String selectedClass;
+        String unselectedClass;
+        boolean disabled;
+        boolean hideNoSelection;
+
+        public OptionComponentInfo(String disabledClass,
+                                   String enabledClass,
+                                   boolean disabled,
+                                   boolean hideNoSelection) {
+
+            this(disabledClass, enabledClass, null, null, disabled, hideNoSelection);
+
+        }
+
+
+        public OptionComponentInfo(String disabledClass,
+                                   String enabledClass,
+                                   String unselectedClass,
+                                   String selectedClass,
+                                   boolean disabled,
+                                   boolean hideNoSelection) {
+
+            this.disabledClass = disabledClass;
+            this.enabledClass = enabledClass;
+            this.unselectedClass = unselectedClass;
+            this.selectedClass = selectedClass;
+            this.disabled = disabled;
+            this.hideNoSelection = hideNoSelection;
+            
+        }
+
+        public String getDisabledClass() {
+            return disabledClass;
+        }
+
+        public String getEnabledClass() {
+            return enabledClass;
+        }
+
+        public boolean isDisabled() {
+            return disabled;
+        }
+
+        public boolean isHideNoSelection() {
+            return hideNoSelection;
+        }
+
+        public String getSelectedClass() {
+            return selectedClass;
+        }
+
+        public String getUnselectedClass() {
+            return unselectedClass;
+        }
+        
+    }
+    
+
+} // end of class HtmlBasicRenderer
diff --git a/com/sun/faces/renderkit/html_basic/HtmlResponseWriter.java b/com/sun/faces/renderkit/html_basic/HtmlResponseWriter.java
new file mode 100644
index 0000000..66b5106
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/HtmlResponseWriter.java
@@ -0,0 +1,1400 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.io.FastStringWriter;
+import com.sun.faces.util.HtmlUtils;
+import com.sun.faces.util.MessageUtils;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.el.ValueExpression;
+import javax.faces.context.ExternalContext;
+import javax.faces.render.Renderer;
+
+
+/**
+ * <p><strong>HtmlResponseWriter</strong> is an Html specific implementation
+ * of the <code>ResponseWriter</code> abstract class.
+ * Kudos to Adam Winer (Oracle) for much of this code.
+ */
+public class HtmlResponseWriter extends ResponseWriter {
+
+
+    // Content Type for this Writer.
+    //
+    private String contentType = "text/html";
+
+    // Character encoding of that Writer - this may be null
+    // if the encoding isn't known.
+    //
+    private String encoding = null;
+
+    // Writer to use for output;
+    //
+    private Writer writer = null;
+
+    // True when we need to close a start tag
+    //
+    private boolean closeStart;
+
+    // Configuration flag regarding disableUnicodeEscaping
+    //
+    private WebConfiguration.DisableUnicodeEscaping disableUnicodeEscaping;
+
+    //Flag to escape Unicode
+    //
+    private boolean escapeUnicode;
+
+    // Flag to escape ISO-8859-1 codes
+    //
+    private boolean escapeIso;
+
+    // True when we shouldn't be escaping output (basically,
+    // inside of <script> and <style> elements).   Note
+    // that this will *not* be set for CDATA blocks - that's
+    // instead the writingCdata flag
+    //
+    private boolean dontEscape;
+
+    // flag to indicate we're writing a CDATA section
+    private boolean writingCdata;
+
+    // flat to indicate the current element is CDATA
+    private boolean isCdata;
+
+    // flag to indicate that we're writing a 'script' or 'style' element
+    private boolean isScript;
+
+    // flag to indicate that we're writing a 'style' element
+    private boolean isStyle;
+
+    // flag to indicate if we are within a script element
+    private boolean withinScript;
+
+    // flag to indicate if we are within a style element
+    private boolean withinStyle;
+
+    // flag to indicate that we're writing a 'src' attribute as part of
+    // 'script' or 'style' element
+    private boolean scriptOrStyleSrc;
+
+    // flag to indicate if this is a partial response
+    private boolean isPartial;
+
+    // flag to indicate if the content type is XHTML
+    private boolean isXhtml;
+
+    // HtmlResponseWriter to use when buffering is required
+    private Writer origWriter;
+
+    // Keep one instance of the script buffer per Writer
+    private FastStringWriter scriptBuffer;
+
+    // Keep one instance of attributesBuffer to buffer the writing
+    // of all attributes for a particular element to reduce the number
+    // of writes
+    private FastStringWriter attributesBuffer;
+    
+    // Enables hiding of inlined script and style
+    // elements from old browsers
+    private Boolean isScriptHidingEnabled;
+
+    // Enables scripts to be included in attribute values
+    private Boolean isScriptInAttributeValueEnabled;
+
+    // Internal buffer used when outputting properly escaped information
+    // using HtmlUtils class.
+    //
+    private char[] buffer = new char[1028];
+
+    // Internal buffer used when outputting properly escaped CData information.
+    //
+    private final static int cdataBufferSize = 1024;
+    private char[] cdataBuffer = new char[cdataBufferSize];
+    private int cdataBufferLength = 0;
+    // Secondary cdata buffer, used for writeText
+    private final static int cdataTextBufferSize = 128;
+    private char[] cdataTextBuffer = new char[cdataTextBufferSize];
+    
+    private Map<String, Object> passthroughAttributes;
+
+    // Internal buffer for to store the result of String.getChars() for
+    // values passed to the writer as String to reduce the overhead
+    // of String.charAt().  This buffer will be grown, if necessary, to
+    // accomodate larger values.
+    private char[] textBuffer = new char[128];
+
+    private char[] charHolder = new char[1];
+
+    private LinkedList<String> elementNames;
+
+    private static final String BREAKCDATA = "]]><![CDATA[";
+    private static final char[] ESCAPEDSINGLEBRACKET = ("]"+BREAKCDATA).toCharArray();
+    private static final char[] ESCAPEDLT= ("<"+BREAKCDATA).toCharArray();
+    private static final char[] ESCAPEDSTART= ("<"+BREAKCDATA+"![").toCharArray();
+    private static final char[] ESCAPEDEND= ("]"+BREAKCDATA+"]>").toCharArray();
+
+    private static final int CLOSEBRACKET = (int)']';
+    private static final int LT = (int)'<';
+
+    static final Pattern CDATA_START_SLASH_SLASH;
+
+    static final Pattern CDATA_END_SLASH_SLASH;
+
+    static final Pattern CDATA_START_SLASH_STAR;
+
+    static final Pattern CDATA_END_SLASH_STAR;
+
+    static {
+        // At the beginning of a line, match // followed by any amount of
+        // whitespace, followed by <![CDATA[
+        CDATA_START_SLASH_SLASH = Pattern.compile("^//\\s*\\Q<![CDATA[\\E");
+
+        // At the end of a line, match // followed by any amout of whitespace,
+        // followed by ]]>
+        CDATA_END_SLASH_SLASH = Pattern.compile("//\\s*\\Q]]>\\E$");
+
+        // At the beginning of a line, match /* followed by any amout of
+        // whitespace, followed by <![CDATA[, followed by any amount of whitespace,
+        // followed by */
+        CDATA_START_SLASH_STAR = Pattern.compile("^/\\*\\s*\\Q<![CDATA[\\E\\s*\\*/");
+
+        // At the end of a line, match /* followed by any amount of whitespace,
+        // followed by ]]> followed by any amount of whitespace, followed by */
+        CDATA_END_SLASH_STAR = Pattern.compile("/\\*\\s*\\Q]]>\\E\\s*\\*/$");
+
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * Constructor sets the <code>ResponseWriter</code> and
+     * encoding, and enables script hiding by default.
+     *
+     * @param writer      the <code>ResponseWriter</code>
+     * @param contentType the content type.
+     * @param encoding    the character encoding.
+     *
+     * @throws javax.faces.FacesException the encoding is not recognized.
+     */
+    public HtmlResponseWriter(Writer writer,
+                              String contentType,
+                              String encoding)
+    throws FacesException {
+        this(writer, contentType, encoding, null, null, null, false);
+    }
+
+    /**
+     * <p>Constructor sets the <code>ResponseWriter</code> and
+     * encoding.</p>
+     *
+     * <p>The argument configPrefs is a map of configurable prefs that affect
+     * this instance's behavior.  Supported keys are:</p>
+     *
+     * <p>BooleanWebContextInitParameter.EnableJSStyleHiding: <code>true</code>
+     * if the writer should attempt to hide JS from older browsers</p>
+     *
+     * @param writer      the <code>ResponseWriter</code>
+     * @param contentType the content type.
+     * @param encoding    the character encoding.
+     *
+     * @throws javax.faces.FacesException the encoding is not recognized.
+     */
+    public HtmlResponseWriter(Writer writer,
+                              String contentType,
+                              String encoding,
+                              Boolean isScriptHidingEnabled,
+                              Boolean isScriptInAttributeValueEnabled,
+                              WebConfiguration.DisableUnicodeEscaping disableUnicodeEscaping,
+                              boolean isPartial)
+    throws FacesException {
+
+        this.writer = writer;
+
+        if (null != contentType) {
+            this.contentType = contentType;
+        }
+
+        this.encoding = encoding;
+
+        // init those configuration parameters not yet initialized
+        WebConfiguration webConfig = null;
+        if (isScriptHidingEnabled == null) {
+            webConfig = getWebConfiguration(webConfig);
+            isScriptHidingEnabled = (null == webConfig) ? BooleanWebContextInitParameter.EnableJSStyleHiding.getDefaultValue() :
+                                webConfig.isOptionEnabled(
+                                BooleanWebContextInitParameter.EnableJSStyleHiding);
+        }
+
+        if (isScriptInAttributeValueEnabled == null) {
+            webConfig = getWebConfiguration(webConfig);
+            isScriptInAttributeValueEnabled = (null == webConfig) ? BooleanWebContextInitParameter.EnableScriptInAttributeValue.getDefaultValue() :
+                             webConfig.isOptionEnabled(
+                             BooleanWebContextInitParameter.EnableScriptInAttributeValue);
+        }
+
+        if (disableUnicodeEscaping == null) {
+            webConfig = getWebConfiguration(webConfig);
+            disableUnicodeEscaping =
+                    WebConfiguration.DisableUnicodeEscaping.getByValue(
+                        (null == webConfig) ? WebConfiguration.WebContextInitParameter.DisableUnicodeEscaping.getDefaultValue() :
+                                webConfig.getOptionValue(
+                                 WebConfiguration.WebContextInitParameter.DisableUnicodeEscaping));
+            if (disableUnicodeEscaping == null) {
+                disableUnicodeEscaping = WebConfiguration.DisableUnicodeEscaping.False;
+            }
+        }
+
+        // and store them for later use
+        this.isPartial = isPartial;
+        this.isScriptHidingEnabled = isScriptHidingEnabled;
+        this.isScriptInAttributeValueEnabled = isScriptInAttributeValueEnabled;
+        this.disableUnicodeEscaping = disableUnicodeEscaping;
+
+        this.attributesBuffer = new FastStringWriter(128);
+
+        // Check the character encoding
+        if (!HtmlUtils.validateEncoding(encoding)) {
+            throw new IllegalArgumentException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.ENCODING_ERROR_MESSAGE_ID));
+        }
+
+        String charsetName = encoding.toUpperCase();
+
+        switch (disableUnicodeEscaping)
+        {
+            case True:
+                // html escape noting (except the dangerous characters like "<>'" etc
+                escapeUnicode = false;
+                escapeIso = false;
+                break;
+            case False:
+                // html escape any non-ascii character
+                escapeUnicode = true;
+                escapeIso = true;
+                break;
+            case Auto:
+                // is stream capable of rendering unicode, do not escape
+                escapeUnicode = !HtmlUtils.isUTFencoding(charsetName);
+                // is stream capable of rendering unicode or iso-8859-1, do not escape
+                escapeIso = !HtmlUtils.isISO8859_1encoding(charsetName) && !HtmlUtils.isUTFencoding(charsetName);
+                break;
+        }
+    }
+
+    private WebConfiguration getWebConfiguration(WebConfiguration webConfig) {
+        if (webConfig != null)
+        {
+            return webConfig;
+        }
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (null != context) {
+            ExternalContext extContext = context.getExternalContext();
+            if (null != extContext) {
+                webConfig = WebConfiguration.getInstance(extContext);
+            }
+        }
+        return webConfig;
+    }
+
+    // -------------------------------------------------- Methods From Closeable
+
+
+    /** Methods From <code>java.io.Writer</code> */
+
+    public void close() throws IOException {
+
+        closeStartIfNecessary();
+        writer.close();
+
+    }
+
+    // -------------------------------------------------- Methods From Flushable
+
+
+    /**
+     * Flush any buffered output to the contained writer.
+     *
+     * @throws IOException if an input/output error occurs.
+     */
+    public void flush() throws IOException {
+
+        // NOTE: Internal buffer's contents (the ivar "buffer") is
+        // written to the contained writer in the HtmlUtils class - see
+        // HtmlUtils.flushBuffer method; Buffering is done during
+        // writeAttribute/writeText - otherwise, output is written
+        // directly to the writer (ex: writer.write(....)..
+        //
+        // close any previously started element, if necessary
+        closeStartIfNecessary();
+
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /** @return the content type such as "text/html" for this ResponseWriter. */
+    public String getContentType() {
+
+        return contentType;
+
+    }
+
+
+    /**
+     * <p>Create a new instance of this <code>ResponseWriter</code> using
+     * a different <code>Writer</code>.
+     *
+     * @param writer The <code>Writer</code> that will be used to create
+     *               another <code>ResponseWriter</code>.
+     */
+    public ResponseWriter cloneWithWriter(Writer writer) {
+
+        try {
+            HtmlResponseWriter responseWriter =  new HtmlResponseWriter(writer,
+                                          getContentType(),
+                                          getCharacterEncoding(),
+                                          isScriptHidingEnabled,
+                                          isScriptInAttributeValueEnabled,
+                                          disableUnicodeEscaping,
+                                          isPartial);
+            responseWriter.dontEscape = this.dontEscape;
+            responseWriter.writingCdata = this.writingCdata;
+            return responseWriter;
+            
+        } catch (FacesException e) {
+            // This should never happen
+            throw new IllegalStateException();
+        }
+
+    }
+
+
+    /** Output the text for the end of a document. */
+    public void endDocument() throws IOException {
+
+        writer.flush();
+
+    }
+
+
+    /**
+     * <p>Write the end of an element. This method will first
+     * close any open element created by a call to
+     * <code>startElement()</code>.
+     *
+     * @param name Name of the element to be ended
+     *
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>name</code>
+     *                              is <code>null</code>
+     */
+    public void endElement(String name) throws IOException {
+
+        if (name == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
+        }
+
+        // Keep track when we are exiting a script or style element
+        // for escaping purposes.
+
+        if ("script".equalsIgnoreCase(name)) {
+            withinScript = false;
+        }
+
+        if ("style".equalsIgnoreCase(name)) {
+            withinStyle = false;
+        }
+
+        // always turn escaping back on once an element ends
+        if (!withinScript && !withinStyle) {
+            dontEscape = false;
+        }
+
+        isXhtml = getContentType().equals(
+            RIConstants.XHTML_CONTENT_TYPE);
+
+        if (isScriptOrStyle(name)
+             && !scriptOrStyleSrc
+             && writer instanceof FastStringWriter) {
+            String result = ((FastStringWriter) writer).getBuffer().toString();
+            writer = origWriter;
+
+            if (result != null) {
+                String trim = result.trim();
+                if (isXhtml) {
+                    if (isScript) {
+                        Matcher
+                            cdataStartSlashSlash =
+                              CDATA_START_SLASH_SLASH.matcher(trim),
+                            cdataEndSlashSlash =
+                              CDATA_END_SLASH_SLASH.matcher(trim),
+                            cdataStartSlashStar =
+                              CDATA_START_SLASH_STAR.matcher(trim),
+                            cdataEndSlashStar =
+                              CDATA_END_SLASH_STAR.matcher(trim);
+                        int trimLen = trim.length(), start, end;
+                        // case 1 start is // end is //
+                        if (cdataStartSlashSlash.find() &&
+                            cdataEndSlashSlash.find()) {
+                            start = cdataStartSlashSlash.end() - cdataStartSlashSlash.start();
+                            end = trimLen - (cdataEndSlashSlash.end() - cdataEndSlashSlash.start());
+                            writer.write(trim.substring(start, end));
+                        }
+                        // case 2 start is // end is /* */
+                        else if ((null != cdataStartSlashSlash.reset() && cdataStartSlashSlash.find()) &&
+                                 cdataEndSlashStar.find()) {
+                            start = cdataStartSlashSlash.end() - cdataStartSlashSlash.start();
+                            end = trimLen - (cdataEndSlashStar.end() - cdataEndSlashStar.start());
+                            writer.write(trim.substring(start, end));
+                        }
+                        // case 3 start is /* */ end is /* */
+                        else if (cdataStartSlashStar.find() &&
+                                 (null != cdataEndSlashStar.reset() && cdataEndSlashStar.find())) {
+                            start = cdataStartSlashStar.end() - cdataStartSlashStar.start();
+                            end = trimLen - (cdataEndSlashStar.end() - cdataEndSlashStar.start());
+                            writer.write(trim.substring(start, end));
+                        }
+                        // case 4 start is /* */ end is //
+                        else if ((null != cdataStartSlashStar.reset() && cdataStartSlashStar.find()) &&
+                                 (null != cdataEndSlashStar.reset() && cdataEndSlashSlash.find())) {
+                            start = cdataStartSlashStar.end() - cdataStartSlashStar.start();
+                            end = trimLen - (cdataEndSlashSlash.end() - cdataEndSlashSlash.start());
+                            writer.write(trim.substring(start, end));
+                        }
+                        // case 5 no commented out cdata present.
+                        else {
+                            writer.write(result);
+                        }
+                    } else {
+                        if (trim.startsWith("<![CDATA[") && trim.endsWith("]]>")) {
+                            writer.write(trim.substring(9, trim.length() - 3));
+                        } else {
+                            writer.write(result);
+                        }
+                    }
+                } else {
+                    if (trim.startsWith("<!--") && trim.endsWith("//-->")) {
+                        writer.write(trim.substring(4, trim.length() - 5));
+                    } else {
+                        writer.write(result);
+                    }
+                }
+            }
+            if (isXhtml) {
+                if (!writingCdata) {
+                    if (isScript) {
+                        writer.write("\n//]]>\n");
+                    } else {
+                        writer.write("\n]]>\n");
+                    }
+                }
+            } else {
+                if (isScriptHidingEnabled) {
+                    writer.write("\n//-->\n");
+                }
+            }
+        }
+        isScript = false;
+        isStyle = false;
+        
+        dontEscape = false;
+        
+        if ("cdata".equalsIgnoreCase(name)) {
+            endCDATA();
+            return;
+        }
+        // See if we need to close the start of the last element
+        if (closeStart) {
+            boolean isEmptyElement = HtmlUtils.isEmptyElement(name);
+
+            // Tricky: we need to use the writer ivar here, rather than the
+            // one from the FacesContext because we don't want
+            // spurious /> characters to appear in the output.
+            if (isEmptyElement) {
+                flushAttributes();
+                writer.write(" />");
+                closeStart = false;
+                popElementName(name);
+                return;
+            }
+            flushAttributes();
+            writer.write('>');
+            closeStart = false;
+        }
+
+        writer.write("</");
+        writer.write(popElementName(name));
+        writer.write('>');
+
+    }
+
+
+    /**
+     * @return the character encoding, such as "ISO-8859-1" for this
+     *         ResponseWriter.  Refer to:
+     *         <a href="http://www.iana.org/assignments/character-sets">theIANA</a>
+     *         for a list of character encodings.
+     */
+    public String getCharacterEncoding() {
+
+        return encoding;
+
+    }
+
+
+    /**
+     * <p>Write the text that should begin a response.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     */
+    public void startDocument() throws IOException {
+
+        // do nothing;
+
+    }
+
+
+    /**
+     * <p>Write the start of an element, up to and including the
+     * element name.  Clients call <code>writeAttribute()</code> or
+     * <code>writeURIAttribute()</code> methods to add attributes after
+     * calling this method.
+     *
+     * @param name                Name of the starting element
+     * @param componentForElement The UIComponent instance that applies to this
+     *                            element.  This argument may be <code>null</code>.
+     *
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>name</code>
+     *                              is <code>null</code>
+     */
+    public void startElement(String name, UIComponent componentForElement)
+          throws IOException {
+
+        if (name == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
+        }
+
+        // Keep track if we are in either a script or style element so we
+        // know we do not want to escape.
+
+        if ("script".equalsIgnoreCase(name)) {
+            withinScript = true;
+        }
+
+        if ("style".equalsIgnoreCase(name)) {
+            withinStyle = true;
+        }
+
+        closeStartIfNecessary();
+        isScriptOrStyle(name);
+        scriptOrStyleSrc = false;
+        if ("cdata".equalsIgnoreCase(name)) {
+            isCdata = true;
+            startCDATA();
+            return;
+        } else if (writingCdata) {
+            // starting an element within a cdata section,
+            // keep escaping disabled
+            isCdata = false;
+            writingCdata = true;
+        }
+
+        if (null != componentForElement) {
+            Map<String, Object> passThroughAttrs = componentForElement.getPassThroughAttributes(false);
+            if (null != passThroughAttrs && !passThroughAttrs.isEmpty()) {
+                considerPassThroughAttributes(passThroughAttrs);
+            }
+        }
+
+        writer.write('<');
+        String elementName = pushElementName(name);
+        writer.write(elementName);
+        
+        closeStart = true;
+
+    }
+
+
+    /**
+     * Starts a CDATA block.  Nested blocks are not allowed.
+     *
+     * @since 2.0
+     * @throws IOException on a read/write error
+     * @throws IllegalStateException If startCDATA is called a second time before endCDATA.
+     */
+    // RELEASE_PENDING_2_1 edburns, rogerk - need to expand on this description.
+    public void startCDATA() throws IOException {
+        if (writingCdata) {
+            throw new IllegalStateException("CDATA tags may not nest");
+        }
+        closeStartIfNecessary();        
+        writingCdata = true;
+        writer.write("<![CDATA[");
+        closeStart = false;
+    }
+
+    /**
+     * Closes the CDATA block.
+     *
+     * @since 2.0
+     * @throws IOException
+     */
+    // RELEASE_PENDING_2_1 edburns, rogerk - need to expand on this description.
+    public void endCDATA() throws IOException {
+        closeStartIfNecessary();
+        writer.write("]]>");
+        writingCdata = false;
+    }
+
+    @Override
+    public void write(char[] cbuf) throws IOException {
+        closeStartIfNecessary();
+        writer.write(cbuf);
+    }
+
+    @Override
+    public void write(int c) throws IOException {
+        closeStartIfNecessary();
+        writer.write(c);
+    }
+
+    @Override
+    public void write(String str) throws IOException {
+        closeStartIfNecessary();
+        writer.write(str);
+    }
+
+    @Override
+    public void write(char[] cbuf, int off, int len) throws IOException {
+        closeStartIfNecessary();
+        writer.write(cbuf, off, len);
+    }
+
+    @Override
+    public void write(String str, int off, int len) throws IOException {
+        closeStartIfNecessary();
+        writer.write(str, off, len);
+    }
+
+
+    /**
+     * <p>Write a properly escaped attribute name and the corresponding
+     * value.  The value text will be converted to a String if
+     * necessary.  This method may only be called after a call to
+     * <code>startElement()</code>, and before the opened element has been
+     * closed.</p>
+     *
+     * @param name                  Attribute name to be added
+     * @param value                 Attribute value to be added
+     * @param componentPropertyName The name of the component property to
+     *                              which this attribute argument applies.  This argument may be
+     *                              <code>null</code>.
+     *
+     * @throws IllegalStateException if this method is called when there
+     *                               is no currently open element
+     * @throws IOException           if an input/output error occurs
+     * @throws NullPointerException  if <code>name</code> is <code>null</code>
+     */
+    public void writeAttribute(String name, Object value,
+                               String componentPropertyName)
+          throws IOException {
+
+        if (name == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
+        }
+        if (value == null) {
+            return;
+        }
+
+        if (isCdata) {
+            return;
+        }
+        
+        if (containsPassThroughAttribute(name)) {
+            return;
+        }
+
+        if (name.equalsIgnoreCase("src") && isScriptOrStyle()) {
+            scriptOrStyleSrc = true;
+        }
+
+        Class valueClass = value.getClass();
+
+        // Output Boolean values specially
+        if (valueClass == Boolean.class) {
+            if (Boolean.TRUE.equals(value)) {
+                // NOTE:  HTML 4.01 states that boolean attributes
+                //        may legally take a single value which is the
+                //        name of the attribute itself or appear using
+                //        minimization.
+                //  http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.3.4.2
+                attributesBuffer.write(' ');
+                attributesBuffer.write(name);
+                attributesBuffer.write("=\"");
+                attributesBuffer.write(name);
+                attributesBuffer.write('"');
+            }
+        } else {
+            attributesBuffer.write(' ');
+            attributesBuffer.write(name);
+            attributesBuffer.write("=\"");
+            // write the attribute value
+            String val = value.toString();
+            ensureTextBufferCapacity(val);
+            HtmlUtils.writeAttribute(attributesBuffer,
+                                     escapeUnicode,
+                                     escapeIso,
+                                     buffer,
+                                     val,
+                                     textBuffer,
+                                     isScriptInAttributeValueEnabled);
+            attributesBuffer.write('"');
+        }
+
+    }
+
+
+    /**
+     * <p>Write a comment string containing the specified text.
+     * The text will be converted to a String if necessary.
+     * If there is an open element that has been created by a call
+     * to <code>startElement()</code>, that element will be closed
+     * first.</p>
+     *
+     * @param comment Text content of the comment
+     *
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>comment</code>
+     *                              is <code>null</code>
+     */
+    public void writeComment(Object comment) throws IOException {
+
+        if (comment == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID));
+        }
+
+        if (writingCdata) {
+            return;
+        }
+
+        closeStartIfNecessary();
+        // Don't include a trailing space after the '<!--'
+        // or a leading space before the '-->' to support
+        // IE conditional commentsoth
+        writer.write("<!--");
+        String str = comment.toString();
+        ensureTextBufferCapacity(str);
+        HtmlUtils.writeText(writer, true, true, buffer, str, textBuffer);
+        writer.write("-->");
+
+    }
+
+
+    /**
+     * <p>Write a properly escaped single character, If there
+     * is an open element that has been created by a call to
+     * <code>startElement()</code>, that element will be closed first.</p>
+     * <p/>
+     * <p>All angle bracket occurrences in the argument must be escaped
+     * using the &gt; &lt; syntax.</p>
+     *
+     * @param text Text to be written
+     *
+     * @throws IOException if an input/output error occurs
+     */
+    public void writeText(char text) throws IOException {
+
+        closeStartIfNecessary();
+        if (dontEscape) {
+            writer.write(text);
+        } else if (isPartial || !writingCdata) {
+            charHolder[0] = text;
+            HtmlUtils.writeText(writer, escapeUnicode, escapeIso, buffer, charHolder);
+        } else {  // if writingCdata
+            assert writingCdata;
+            charHolder[0] = text;
+            writeEscaped(charHolder, 0, 1);
+        }
+
+    }
+
+
+    /**
+     * <p>Write properly escaped text from a character array.
+     * The output from this command is identical to the invocation:
+     * <code>writeText(c, 0, c.length)</code>.
+     * If there is an open element that has been created by a call to
+     * <code>startElement()</code>, that element will be closed first.</p>
+     * </p>
+     * <p/>
+     * <p>All angle bracket occurrences in the argument must be escaped
+     * using the &gt; &lt; syntax.</p>
+     *
+     * @param text Text to be written
+     *
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>text</code>
+     *                              is <code>null</code>
+     */
+    public void writeText(char text[]) throws IOException {
+
+        if (text == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
+        }
+        closeStartIfNecessary();
+
+        if (dontEscape) {
+            writer.write(text);
+        } else if (isPartial || !writingCdata) {
+            HtmlUtils.writeText(writer, escapeUnicode, escapeIso, buffer, text);
+        } else { // if writingCdata
+            assert writingCdata;
+            writeEscaped(text, 0, text.length);
+        }
+
+    }
+
+
+    /**
+     * <p>Write a properly escaped object. The object will be converted
+     * to a String if necessary.  If there is an open element
+     * that has been created by a call to <code>startElement()</code>,
+     * that element will be closed first.</p>
+     *
+     * @param text                  Text to be written
+     * @param componentPropertyName The name of the component property to
+     *                              which this text argument applies.  This argument may be <code>null</code>.
+     *
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>text</code>
+     *                              is <code>null</code>
+     */
+    public void writeText(Object text, String componentPropertyName)
+          throws IOException {
+
+        if (text == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
+        }
+        closeStartIfNecessary();
+        String textStr = text.toString();
+
+        if (dontEscape) {
+            writer.write(textStr);
+        } else if (isPartial || !writingCdata) {
+            ensureTextBufferCapacity(textStr);
+            HtmlUtils.writeText(writer,
+                                escapeUnicode,
+                                escapeIso,
+                                buffer,
+                                textStr,
+                                textBuffer);
+        } else { // if writingCdata
+            assert writingCdata;
+            int textLen = textStr.length();
+            if (textLen > cdataTextBufferSize) {
+                writeEscaped(textStr.toCharArray(), 0, textLen);
+            } else if (textLen >= 16) { // >16, < cdataTextBufferSize
+                textStr.getChars(0, textLen, cdataTextBuffer, 0);
+                writeEscaped(cdataTextBuffer, 0, textLen);
+            } else { // <16
+                for (int i=0; i < textLen;  i++)  {
+                    cdataTextBuffer[i] = textStr.charAt(i);
+                }
+                writeEscaped(cdataTextBuffer, 0, textLen);
+            }
+        }
+    }
+
+
+    /**
+     * <p>Write properly escaped text from a character array.
+     * If there is an open element that has been created by a call
+     * to <code>startElement()</code>, that element will be closed
+     * first.</p>
+     * <p/>
+     * <p>All angle bracket occurrences in the argument must be escaped
+     * using the &gt; &lt; syntax.</p>
+     *
+     * @param text Text to be written
+     * @param off  Starting offset (zero-relative)
+     * @param len  Number of characters to be written
+     *
+     * @throws IndexOutOfBoundsException if the calculated starting or
+     *                                   ending position is outside the bounds of the character array
+     * @throws IOException               if an input/output error occurs
+     * @throws NullPointerException      if <code>text</code>
+     *                                   is <code>null</code>
+     */
+    public void writeText(char text[], int off, int len)
+          throws IOException {
+
+        if (text == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
+        }
+        if (off < 0 || off > text.length || len < 0 || len > text.length) {
+            throw new IndexOutOfBoundsException();
+        }
+        closeStartIfNecessary();
+
+        // optimize away zero length write, called by Facelets to close tags
+        if (len == 0) return;
+
+        if (dontEscape) {
+            writer.write(text, off, len);
+        } else if (isPartial || !writingCdata) {
+            HtmlUtils.writeText(writer, escapeUnicode, escapeIso, buffer, text, off, len);
+        } else { // if (writingCdata)
+            assert writingCdata;
+            writeEscaped(text, off, len);
+        }
+
+    }
+
+
+    /**
+     * <p>Write a properly encoded URI attribute name and the corresponding
+     * value. The value text will be converted to a String if necessary).
+     * This method may only be called after a call to
+     * <code>startElement()</code>, and before the opened element has been
+     * closed.</p>
+     *
+     * @param name                  Attribute name to be added
+     * @param value                 Attribute value to be added
+     * @param componentPropertyName The name of the component property to
+     *                              which this attribute argument applies.  This argument may be
+     *                              <code>null</code>.
+     *
+     * @throws IllegalStateException if this method is called when there
+     *                               is no currently open element
+     * @throws IOException           if an input/output error occurs
+     * @throws NullPointerException  if <code>name</code> or
+     *                               <code>value</code> is <code>null</code>
+     */
+    public void writeURIAttribute(String name, Object value,
+                                  String componentPropertyName)
+          throws IOException {
+        if (null != name && containsPassThroughAttribute(name)) {
+            return;
+        }
+        writeURIAttributeIgnoringPassThroughAttributes(name, value, 
+                componentPropertyName, false);
+
+    }
+    
+    private void writeURIAttributeIgnoringPassThroughAttributes(String name, Object value,
+            String componentPropertyName, boolean isPassthrough) throws IOException {
+        
+        if (name == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
+        }
+        if (value == null) {
+            throw new NullPointerException(MessageUtils.getExceptionMessageString(
+                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "value"));
+        }
+
+        if (isCdata) {
+            return;
+        }
+        
+        if (name.equals(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY)) {
+            return;
+        }
+
+        if (name.equalsIgnoreCase("src") && isScriptOrStyle()) {
+            scriptOrStyleSrc = true;
+        }
+
+        attributesBuffer.write(' ');
+        attributesBuffer.write(name);
+        attributesBuffer.write("=\"");
+
+        String stringValue = value.toString();
+        ensureTextBufferCapacity(stringValue);
+        // Javascript URLs should not be URL-encoded
+        if (stringValue.startsWith("javascript:") || isPassthrough) {
+            HtmlUtils.writeAttribute(attributesBuffer,
+                                     escapeUnicode,
+                                     escapeIso,
+                                     buffer,
+                                     stringValue,
+                                     textBuffer,
+                                     isScriptInAttributeValueEnabled);
+        } else {
+            HtmlUtils.writeURL(attributesBuffer,
+                               stringValue,
+                               textBuffer,
+                               encoding);
+        }
+
+        attributesBuffer.write('"');
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+    private void ensureTextBufferCapacity(String source) {
+        int len = source.length();
+        if (textBuffer.length < len) {
+            textBuffer = new char[len * 2];
+        }
+        if (buffer.length < len) {
+            buffer = new char[len * 2];
+        }
+    }
+
+    /**
+     * This method automatically closes a previous element (if not
+     * already closed).
+     * @throws IOException if an error occurs writing
+     */
+    private void closeStartIfNecessary() throws IOException {
+
+        if (closeStart) {
+            flushAttributes();
+            writer.write('>');
+            closeStart = false;
+            if (isScriptOrStyle() && !scriptOrStyleSrc) {
+                isXhtml = getContentType().equals(
+                     RIConstants.XHTML_CONTENT_TYPE);
+                if (isXhtml) {
+                    if (!writingCdata) {
+                        if (isScript) {
+                            writer.write("\n//<![CDATA[\n");
+                        } else {
+                            writer.write("\n<![CDATA[\n");
+                        }
+                    }
+                } else {
+                    if (isScriptHidingEnabled) {
+                        writer.write("\n<!--\n");
+                    }
+                }
+                origWriter = writer;
+                if (scriptBuffer == null) {
+                    scriptBuffer = new FastStringWriter(1024);
+                }
+                scriptBuffer.reset();
+                writer = scriptBuffer;
+                isScript = false;
+                isStyle = false;
+            }
+        }
+
+    }
+    
+    private void considerPassThroughAttributes(Map<String, Object> toCopy) {
+        assert(null != toCopy && !toCopy.isEmpty());
+        
+        if (null != passthroughAttributes) {
+            throw new IllegalStateException("Error, this method should only be called once per instance.");
+        }
+        passthroughAttributes = new ConcurrentHashMap<String, Object>(toCopy);
+    }
+    
+    private boolean containsPassThroughAttribute(String attrName) {
+        boolean result = false;
+        if (null != passthroughAttributes) {
+            result = passthroughAttributes.containsKey(attrName);
+        }
+        return result;
+    }
+
+
+    private void flushAttributes() throws IOException {
+        boolean hasPassthroughAttributes = 
+                null != passthroughAttributes && !passthroughAttributes.isEmpty();
+        
+        if (hasPassthroughAttributes) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            for (Map.Entry<String, Object> entry : passthroughAttributes.entrySet()) {
+                Object valObj = entry.getValue();
+                String val = getAttributeValue(context, valObj);
+                String key = entry.getKey();
+                if (val != null) {
+                    writeURIAttributeIgnoringPassThroughAttributes(key, val, key, true);
+                }
+            }
+        }
+
+
+        // a little complex, but the end result is, potentially, two
+        // fewer temp objects created per call.
+        StringBuilder b = attributesBuffer.getBuffer();
+        int totalLength = b.length();
+        if (totalLength != 0) {
+            int curIdx = 0;
+            while (curIdx < totalLength) {
+                if ((totalLength - curIdx) > buffer.length) {
+                    int end = curIdx + buffer.length;
+                    b.getChars(curIdx, end, buffer, 0);
+                    writer.write(buffer);
+                    curIdx += buffer.length;
+                } else {
+                    int len = totalLength - curIdx;
+                    b.getChars(curIdx, curIdx + len, buffer, 0);
+                    writer.write(buffer, 0, len);
+                    curIdx += len;
+                }
+            }
+            attributesBuffer.reset();
+        }
+        
+        if (hasPassthroughAttributes) {
+            passthroughAttributes.clear();
+            passthroughAttributes = null;
+        }
+        
+    }
+
+    private String getAttributeValue(FacesContext context, Object valObj) {
+        String val;
+        if (valObj instanceof ValueExpression) {
+            Object result = ((ValueExpression) valObj).getValue(context.getELContext());
+            val = result != null ? result.toString() : null;
+        } else {
+            val = valObj.toString();
+        }
+        return val;
+    }
+
+    private String pushElementName(String original) {
+        
+        if (original.equals("option")) {
+            return original;
+        }
+        
+        String name = getElementName(original);
+
+        if(passthroughAttributes != null) {
+            passthroughAttributes.remove(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY);
+            if(passthroughAttributes.isEmpty()) {
+                passthroughAttributes = null;
+            }
+        }
+
+        if(!original.equals(name) || elementNames != null) {
+            if(elementNames == null) {
+                elementNames = new LinkedList<String>();
+            }
+            elementNames.push(name);
+        }
+        return name;
+    }
+
+    private String popElementName(String original) {
+        if(elementNames == null || elementNames.isEmpty()) {
+            return original;
+        }
+        return elementNames.pop();
+    }
+
+    private String getElementName(String name) {
+        if(containsPassThroughAttribute(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY)) {
+            FacesContext context = FacesContext.getCurrentInstance();
+
+            String elementName = getAttributeValue(context, passthroughAttributes.get(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY));
+            if(elementName != null && elementName.trim().length() > 0) {
+                return elementName;
+            }
+        }
+        return name;
+    }
+
+    private boolean isScriptOrStyle(String name) {
+        if ("script".equalsIgnoreCase(name)) {
+            isScript = true;
+            dontEscape = true;
+        } else if ("style".equalsIgnoreCase(name)) {
+            isStyle = true;
+            dontEscape = true;
+        } else {
+            isScript = false;
+            isStyle = false;
+            if (!withinScript && !withinStyle) {
+                dontEscape = false;
+            }
+        }
+
+        return (isScript || isStyle);
+    }
+
+    private boolean isScriptOrStyle() {
+        return (isScript || isStyle);
+    }
+
+/*
+ *  Method to escape all CDATA instances in a character array, then write to writer.
+ *
+ * This method looks for occurrences of "<![" and "]]>"
+ */
+private void writeEscaped(char cbuf[], int offset, int length) throws IOException {
+    if (cbuf == null || cbuf.length == 0 || length == 0) {
+        return;
+    }
+
+   if (offset < 0 || length < 0 || offset + length > cbuf.length ) {
+        throw new IndexOutOfBoundsException("off < 0 || len < 0 || off + len > cbuf.length");
+   }
+
+    // Single char case
+    if (length == 1) {
+        if (cbuf[offset] == '<') {
+            appendBuffer(ESCAPEDLT);
+        } else if (cbuf[offset] == ']') {
+            appendBuffer(ESCAPEDSINGLEBRACKET);
+        } else {
+            appendBuffer(cbuf[offset]);
+        }
+        flushBuffer();
+        return;
+    }
+    // two char case
+    if (length == 2) {
+        if (cbuf[offset] == '<' && cbuf[offset + 1] == '!') {
+            appendBuffer(ESCAPEDLT);
+            appendBuffer(cbuf[offset + 1]);
+        } else if (cbuf[offset] == ']' && cbuf[offset + 1] == ']') {
+            appendBuffer(ESCAPEDSINGLEBRACKET);
+            appendBuffer(ESCAPEDSINGLEBRACKET);
+        } else {
+            appendBuffer(cbuf[offset]);
+            appendBuffer(cbuf[offset + 1]);
+        }
+        flushBuffer();
+        return;
+    }
+    // > 2 char case
+    boolean last = false;
+    for (int i = offset; i < length - 2; i++) {
+        if (cbuf[i] == '<' && cbuf[i + 1] == '!' && cbuf[i + 2] == '[') {
+            appendBuffer(ESCAPEDSTART);
+            i += 2;
+        } else if (cbuf[i] == ']' && cbuf[i + 1] == ']' && cbuf[i + 2] == '>') {
+            appendBuffer(ESCAPEDEND);
+            i += 2;
+        } else {
+            appendBuffer(cbuf[i]);
+        }
+        if (i == (offset + length - 1)) {
+            last = true;
+        }
+    }
+    // if we didn't look at the last characters, look at them now
+    if (!last) {
+        if (cbuf[offset + length - 2] == '<') {
+            appendBuffer(ESCAPEDLT);
+        } else if (cbuf[offset + length - 2] == ']') {
+            appendBuffer(ESCAPEDSINGLEBRACKET);
+        } else {
+            appendBuffer(cbuf[offset + length - 2]);
+        }
+        if (cbuf[offset + length - 1] == '<') {
+            appendBuffer(ESCAPEDLT);
+        } else if (cbuf[offset + length - 1] == ']') {
+            appendBuffer(ESCAPEDSINGLEBRACKET);
+        } else {
+            appendBuffer(cbuf[offset + length - 1]);
+        }
+    }
+    flushBuffer();
+}
+
+/*
+ *  append a character array to the cdatabuffer
+ */
+private void appendBuffer(char[] cbuf) throws IOException {
+    if (cbuf.length + cdataBufferLength >= cdataBufferSize) {
+        flushBuffer();
+    }
+    if (cbuf.length >= cdataBufferSize) {  // bigger than the buffer, direct write
+        writer.write(cbuf);
+    }
+    System.arraycopy(cbuf, 0, cdataBuffer, cdataBufferLength, cbuf.length);
+    cdataBufferLength = cdataBufferLength + cbuf.length;
+}
+/*
+ * append a character to the cdatabuffer
+ */
+private void appendBuffer(char c) throws IOException {
+    if (cdataBufferLength + 1 >= cdataBufferSize) {
+        flushBuffer();
+    }
+    cdataBuffer[cdataBufferLength] = c;
+    cdataBufferLength++;
+}
+
+/*
+ * flush the cdatabuffer to the writer
+ */
+private void flushBuffer() throws IOException {
+    if (cdataBufferLength == 0) {
+        return;
+    }
+    writer.write(cdataBuffer, 0, cdataBufferLength);
+    cdataBufferLength = 0;
+}
+}
diff --git a/com/sun/faces/renderkit/html_basic/ImageRenderer.java b/com/sun/faces/renderkit/html_basic/ImageRenderer.java
new file mode 100644
index 0000000..f59bd2c
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/ImageRenderer.java
@@ -0,0 +1,128 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ImageRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.logging.Level;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/**
+ * <B>ImageRenderer</B> is a class that handles the rendering of the graphic
+ * ImageTag
+ *
+ */
+
+public class ImageRenderer extends HtmlBasicRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.GRAPHICIMAGE);
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        writer.startElement("img", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        writer.writeURIAttribute("src", RenderKitUtils.getImageSource(context, component, "value"), "value");
+        // if we're writing XHTML and we have a null alt attribute
+        if (writer.getContentType().equals(RIConstants.XHTML_CONTENT_TYPE) &&
+            null == component.getAttributes().get("alt")) {
+            // write out an empty alt
+            writer.writeAttribute("alt", "", "alt");
+        }
+
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+        String styleClass;
+        if (null != (styleClass = (String)
+              component.getAttributes().get("styleClass"))) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+        writer.endElement("img");
+        if (logger.isLoggable(Level.FINER)) {
+            logger.log(Level.FINER,
+                       "End encoding component " + component.getId());
+        }
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    // The testcase for this class is TestRenderers_2.java
+
+} // end of class ImageRenderer
+
diff --git a/com/sun/faces/renderkit/html_basic/LabelRenderer.java b/com/sun/faces/renderkit/html_basic/LabelRenderer.java
new file mode 100644
index 0000000..3690777
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/LabelRenderer.java
@@ -0,0 +1,203 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// LabelRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.logging.Level;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UINamingContainer;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/** <p><B>LabelRenderer</B> renders Label element.<p>. */
+public class LabelRenderer extends HtmlBasicInputRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTLABEL);
+
+
+    private static final String RENDER_END_ELEMENT =
+          "com.sun.faces.RENDER_END_ELEMENT";
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String forClientId = null;
+        String forValue = (String) component.getAttributes().get("for");
+        if (forValue != null) {
+            forValue = augmentIdReference(forValue, component);
+            UIComponent forComponent = getForComponent(context, forValue, component);
+            if (forComponent == null) {
+                // it could that the component hasn't been created yet. So
+                // construct the clientId for component.
+                forClientId = getForComponentClientId(component, context,
+                                                      forValue);
+            } else {
+                forClientId = forComponent.getClientId(context);
+            }
+        }
+
+        // set a temporary attribute on the component to indicate that
+        // label end element needs to be rendered.
+        component.getAttributes().put(RENDER_END_ELEMENT, "yes");
+        writer.startElement("label", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        if (forClientId != null) {
+            writer.writeAttribute("for", forClientId, "for");
+        }
+
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+        String styleClass = (String)
+            component.getAttributes().get("styleClass");
+        if (null != styleClass) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+
+        // render the curentValue as label text if specified.
+        String value = getCurrentValue(context, component);
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("Value to be rendered " + value);
+        }
+        if (value != null && value.length() != 0) {
+            Object val = component.getAttributes().get("escape");
+            boolean escape = (val != null) && Boolean.valueOf(val.toString());
+
+            if (escape) {
+                writer.writeText(value, component, "value");
+            } else {
+                writer.write(value);
+            }
+        }
+        writer.flush();
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        // render label end element if RENDER_END_ELEMENT is set.
+        String render = (String) component.getAttributes().get(
+              RENDER_END_ELEMENT);
+        if ("yes".equals(render)) {
+            component.getAttributes().remove(RENDER_END_ELEMENT);
+            ResponseWriter writer = context.getResponseWriter();
+            assert(writer != null);
+            writer.endElement("label");
+        }
+
+    }
+
+    // ------------------------------------------------------- Private Methods
+
+
+    /**
+     * Builds and returns the clientId of the component that is
+     * represented by the forValue. Since the component has not been created
+     * yet, invoking <code>getClientId(context)</code> is not possible.
+     *
+     * @param component UIComponent that represents the label
+     * @param context   FacesContext for this request
+     * @param forValue  String representing the "id" of the component
+     *                  that this label represents.
+     *
+     * @return String clientId of the component represented by the forValue.
+     */
+    protected String getForComponentClientId(UIComponent component,
+                                             FacesContext context,
+                                             String forValue) {
+
+        String result = null;
+        // ASSUMPTION: The component for which this acts as the label
+        // as well ths label component are part of the same form.
+        // locate the nearest NamingContainer and get its clientId.
+        UIComponent parent = component.getParent();
+        while (parent != null) {
+            if (parent instanceof NamingContainer) {
+                break;
+            }
+            parent = parent.getParent();
+        }
+        if (parent == null) {
+            return result;
+        }
+        String parentClientId = parent.getClientId(context);
+        // prepend the clientId of the nearest container to the forValue.
+        result = parentClientId + UINamingContainer.getSeparatorChar(context) + forValue;
+        return result;
+
+    }
+
+    // The testcase for this class is TestRenderResponsePhase.java
+
+} // end of class LabelRenderer
diff --git a/com/sun/faces/renderkit/html_basic/LinkRenderer.java b/com/sun/faces/renderkit/html_basic/LinkRenderer.java
new file mode 100644
index 0000000..36cd5d1
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/LinkRenderer.java
@@ -0,0 +1,134 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// LinkRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.logging.Level;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+
+/**
+ * <B>LinkRenderer</B> acts as superclass for CommandLinkRenderer and
+ * OutputLinkRenderer.
+ */
+
+public abstract class LinkRenderer extends HtmlBasicRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.COMMANDLINK);
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected abstract void renderAsActive(FacesContext context,
+                                           UIComponent component)
+          throws IOException;
+
+
+    protected void renderAsDisabled(FacesContext context, UIComponent component)
+          throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        writer.startElement("span", component);
+        String writtenId =
+              writeIdAttributeIfNecessary(context, writer, component);
+        if (null != writtenId) {
+            writer.writeAttribute("name", writtenId, "name");
+        }
+
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+
+        writeCommonLinkAttributes(writer, component);
+        writeValue(component, writer);
+        writer.flush();
+
+    }
+
+
+    protected void writeCommonLinkAttributes(ResponseWriter writer,
+                                             UIComponent component)
+          throws IOException {
+
+        // handle styleClass
+        String styleClass = (String)
+              component.getAttributes().get("styleClass");
+        if (styleClass != null) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+
+    }
+
+
+    protected void writeValue(UIComponent component, ResponseWriter writer)
+          throws IOException {
+
+        Object v = getValue(component);
+        String label = null;
+        if (v != null) {
+            label = v.toString();
+        }        
+
+        if (label != null && label.length() != 0) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Value to be rendered " + label);
+            }
+            writer.writeText(label, component, null);
+        }
+
+    }
+
+} // end of class LinkRenderer
diff --git a/com/sun/faces/renderkit/html_basic/ListboxRenderer.java b/com/sun/faces/renderkit/html_basic/ListboxRenderer.java
new file mode 100644
index 0000000..9c1b0ce
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/ListboxRenderer.java
@@ -0,0 +1,75 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * (C) Copyright International Business Machines Corp., 2001,2002
+ * The source code for this program is not published or otherwise
+ * divested of its trade secrets, irrespective of what has been
+ * deposited with the U. S. Copyright Office.   
+ */
+
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+
+import javax.faces.context.ResponseWriter;
+
+/**
+ * <B>ListRenderer</B> is a class that renders the current value of
+ * <code>UISelectOne<code> or <code>UISelectMany<code> component as a list of
+ * options.
+ */
+
+public class ListboxRenderer extends MenuRenderer {
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected void writeDefaultSize(ResponseWriter writer, int itemCount)
+          throws IOException {
+
+        // If size not specified, default to number of items
+        writer.writeAttribute("size", itemCount, "size");
+
+    }
+
+} // end of class ListboxRenderer
diff --git a/com/sun/faces/renderkit/html_basic/MenuRenderer.java b/com/sun/faces/renderkit/html_basic/MenuRenderer.java
new file mode 100644
index 0000000..80dce8a
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/MenuRenderer.java
@@ -0,0 +1,1042 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * (C) Copyright International Business Machines Corp., 2001,2002
+ * The source code for this program is not published or otherwise
+ * divested of its trade secrets, irrespective of what has been
+ * deposited with the U. S. Copyright Office.
+ */
+
+// MenuRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.Queue;
+import java.util.LinkedList;
+import java.util.logging.Level;
+
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectMany;
+import javax.faces.component.UISelectOne;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.model.SelectItem;
+import javax.faces.model.SelectItemGroup;
+import javax.faces.FacesException;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.io.FastStringWriter;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.renderkit.SelectItemsIterator;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.RequestStateManager;
+import com.sun.faces.util.ReflectionUtils;
+
+/**
+ * <B>MenuRenderer</B> is a class that renders the current value of
+ * <code>UISelectOne<code> or <code>UISelectMany<code> component as a list of
+ * menu options.
+ */
+
+public class MenuRenderer extends HtmlBasicInputRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.SELECTMANYMENU);
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public Object convertSelectManyValue(FacesContext context,
+                                         UISelectMany uiSelectMany,
+                                         String[] newValues)
+          throws ConverterException {
+
+        // if we have no local value, try to get the valueExpression.
+        ValueExpression valueExpression =
+              uiSelectMany.getValueExpression("value");
+
+        Object result = newValues; // default case, set local value
+        boolean throwException = false;
+
+        // If we have a ValueExpression
+        if (null != valueExpression) {
+            Class modelType = valueExpression.getType(context.getELContext());
+            // Does the valueExpression resolve properly to something with
+            // a type?
+            if (modelType != null) {
+                result = convertSelectManyValuesForModel(context,
+                                                         uiSelectMany,
+                                                         modelType,
+                                                         newValues);
+            }
+            // If it could not be converted, as a fall back try the type of
+            // the valueExpression's current value covering some edge cases such
+            // as where the current value came from a Map.
+            if(result == null) {
+                Object value = valueExpression.getValue(context.getELContext());
+                if(value != null) {
+                    result = convertSelectManyValuesForModel(context,
+                                                             uiSelectMany,
+                                                             value.getClass(),
+                                                             newValues);
+                }
+            }
+            if(result == null) {
+                throwException = true;
+            }
+        } else {
+            // No ValueExpression, just use Object array.
+            result = convertSelectManyValues(context, uiSelectMany,
+                                             Object[].class,
+                                             newValues);
+        }
+        if (throwException) {
+            StringBuffer values = new StringBuffer();
+            if (null != newValues) {
+                for (int i = 0; i < newValues.length; i++) {
+                    if (i == 0) {
+                        values.append(newValues[i]);
+                    } else {
+                        values.append(' ').append(newValues[i]);
+                    }
+                }
+            }
+            Object[] params = {
+                  values.toString(),
+                  valueExpression.getExpressionString()
+            };
+            throw new ConverterException
+                  (MessageUtils.getExceptionMessage(MessageUtils.CONVERSION_ERROR_MESSAGE_ID,
+                                                    params));
+        }
+
+        // At this point, result is ready to be set as the value
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("SelectMany Component  " + uiSelectMany.getId() +
+                        " convertedValues " + result);
+        }
+        return result;
+
+    }
+
+
+    public Object convertSelectOneValue(FacesContext context,
+                                        UISelectOne uiSelectOne,
+                                        String newValue)
+          throws ConverterException {
+
+        if (RIConstants.NO_VALUE.equals(newValue)) {
+            return null;
+        }
+        if (newValue == null) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("No conversion necessary for SelectOne Component  "
+                            + uiSelectOne.getId()
+                            + " since the new value is null ");
+            }
+            return null;
+        }
+
+        Object convertedValue =
+              super.getConvertedValue(context, uiSelectOne, newValue);
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("SelectOne Component  " + uiSelectOne.getId() +
+                        " convertedValue " + convertedValue);
+        }
+        return convertedValue;
+
+    }
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldDecode(component)) {
+            return;
+        }
+
+        String clientId = decodeBehaviors(context, component);
+
+        if (clientId == null) {
+            clientId = component.getClientId(context);
+        }
+        assert(clientId != null);
+        // currently we assume the model type to be of type string or
+        // convertible to string and localized by the application.
+        if (component instanceof UISelectMany) {
+            Map<String, String[]> requestParameterValuesMap =
+                  context.getExternalContext().
+                        getRequestParameterValuesMap();
+            if (requestParameterValuesMap.containsKey(clientId)) {
+                String newValues[] = requestParameterValuesMap.
+                      get(clientId);
+                setSubmittedValue(component, newValues);
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.fine("submitted values for UISelectMany component "
+                                +
+                                component.getId()
+                                + " after decoding "
+                                + Arrays.toString(newValues));
+                }
+            } else {
+                // Use the empty array, not null, to distinguish
+                // between an deselected UISelectMany and a disabled one
+                setSubmittedValue(component, new String[0]);
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.fine("Set empty array for UISelectMany component " +
+                                component.getId() + " after decoding ");
+                }
+            }
+        } else {
+            // this is a UISelectOne
+            Map<String, String> requestParameterMap =
+                  context.getExternalContext().
+                        getRequestParameterMap();
+            if (requestParameterMap.containsKey(clientId)) {
+                String newValue = requestParameterMap.get(clientId);
+                setSubmittedValue(component, newValue);
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.fine("submitted value for UISelectOne component "
+                                +
+                                component.getId()
+                                + " after decoding "
+                                + newValue);
+                }
+
+            } else {
+                // there is no value, but this is different from a null
+                // value.
+                setSubmittedValue(component, RIConstants.NO_VALUE);
+            }
+        }
+
+    }
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        renderSelect(context, component);
+
+    }
+
+
+    @Override
+    public Object getConvertedValue(FacesContext context, UIComponent component,
+                                    Object submittedValue)
+          throws ConverterException {
+
+        if (component instanceof UISelectMany) {
+            // need to set the 'TARGET_COMPONENT_ATTRIBUTE_NAME' request attr so the
+            // coerce-value call in the jsf-api UISelectMany.matchValue will work
+            // (need a better way to determine the currently processing UIComponent ...)
+            RequestStateManager.set(context,
+                                    RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
+                                    component);
+            return convertSelectManyValue(context,
+                                          ((UISelectMany) component),
+                                          (String[]) submittedValue);
+        } else {
+            return convertSelectOneValue(context,
+                                         ((UISelectOne) component),
+                                         (String) submittedValue);
+        }
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /*
+     * Converts the provided string array and places them into the correct provided model type.
+     */
+    protected Object convertSelectManyValuesForModel(FacesContext context,
+                                                     UISelectMany uiSelectMany,
+                                                     Class modelType,
+                                                     String[] newValues) {
+
+        if (modelType.isArray()) {
+            return convertSelectManyValues(context,
+                                           uiSelectMany,
+                                           modelType,
+                                           newValues);
+        } else if (Collection.class.isAssignableFrom(modelType)) {
+            Object[] values = (Object[]) convertSelectManyValues(context,
+                                                                 uiSelectMany,
+                                                                 Object[].class,
+                                                                 newValues);
+
+            Collection targetCollection = null;
+
+            // see if the collectionType hint is available, if so, use that
+            Object collectionTypeHint = uiSelectMany.getAttributes().get("collectionType");
+            if (collectionTypeHint != null) {
+                targetCollection = createCollectionFromHint(collectionTypeHint);
+            } else {
+                // try to get a new Collection to store the values based
+                // by trying to create a clone
+                Collection currentValue = (Collection) uiSelectMany.getValue();
+                if (currentValue != null) {
+                    targetCollection = cloneValue(currentValue);
+                }
+
+                // No cloned instance so if the modelType happens to represent a
+                // concrete type (probably not the norm) try to reflect a
+                // no-argument constructor and invoke if available.
+                if (targetCollection == null) {
+                    //noinspection unchecked
+                    targetCollection =
+                          createCollection(currentValue, modelType);
+                }
+
+                // No suitable instance to work with, make our best guess
+                // based on the type.
+                if (targetCollection == null) {
+                    //noinspection unchecked
+                    targetCollection = bestGuess(modelType, values.length);
+                }
+            }
+
+            //noinspection ManualArrayToCollectionCopy
+            for (Object v : values) {
+                //noinspection unchecked
+                targetCollection.add(v);
+            }
+
+            return targetCollection;
+        } else if (Object.class.equals(modelType)) {
+            return convertSelectManyValues(context,
+                                           uiSelectMany,
+                                           Object[].class,
+                                           newValues);
+        } else {
+            throw new FacesException("Target model Type is no a Collection or Array");
+        }
+        
+    }
+
+
+
+
+    protected Object convertSelectManyValues(FacesContext context,
+                                             UISelectMany uiSelectMany,
+                                             Class arrayClass,
+                                             String[] newValues)
+          throws ConverterException {
+
+        Object result;
+        Converter converter;
+        int len = (null != newValues ? newValues.length : 0);
+
+        Class elementType = arrayClass.getComponentType();
+
+        // Optimization: If the elementType is String, we don't need
+        // conversion.  Just return newValues.
+        if (elementType.equals(String.class)) {
+            return newValues;
+        }
+
+        try {
+            result = Array.newInstance(elementType, len);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+
+        // bail out now if we have no new values, returning our
+        // oh-so-useful zero-length array.
+        if (null == newValues) {
+            return result;
+        }
+
+        // obtain a converter.
+
+        // attached converter takes priority
+        if (null == (converter = uiSelectMany.getConverter())) {
+            // Otherwise, look for a by-type converter
+            if (null == (converter = Util.getConverterForClass(elementType,
+                                                               context))) {
+                // if that fails, and the attached values are of Object type,
+                // we don't need conversion.
+                if (elementType.equals(Object.class)) {
+                    return newValues;
+                }
+                StringBuffer valueStr = new StringBuffer();
+                for (int i = 0; i < len; i++) {
+                    if (i == 0) {
+                        valueStr.append(newValues[i]);
+                    } else {
+                        valueStr.append(' ').append(newValues[i]);
+                    }
+                }
+                Object[] params = {
+                      valueStr.toString(),
+                      "null Converter"
+                };
+
+                throw new ConverterException(MessageUtils.getExceptionMessage(
+                      MessageUtils.CONVERSION_ERROR_MESSAGE_ID, params));
+            }
+        }
+
+        assert(null != result);
+        if (elementType.isPrimitive()) {
+            for (int i = 0; i < len; i++) {
+                if (elementType.equals(Boolean.TYPE)) {
+                    Array.setBoolean(result, i,
+                                     ((Boolean) converter.getAsObject(context,
+                                                                      uiSelectMany,
+                                                                      newValues[i])));
+                } else if (elementType.equals(Byte.TYPE)) {
+                    Array.setByte(result, i,
+                                  ((Byte) converter.getAsObject(context,
+                                                                uiSelectMany,
+                                                                newValues[i])));
+                } else if (elementType.equals(Double.TYPE)) {
+                    Array.setDouble(result, i,
+                                    ((Double) converter.getAsObject(context,
+                                                                    uiSelectMany,
+                                                                    newValues[i])));
+                } else if (elementType.equals(Float.TYPE)) {
+                    Array.setFloat(result, i,
+                                   ((Float) converter.getAsObject(context,
+                                                                  uiSelectMany,
+                                                                  newValues[i])));
+                } else if (elementType.equals(Integer.TYPE)) {
+                    Array.setInt(result, i,
+                                 ((Integer) converter.getAsObject(context,
+                                                                  uiSelectMany,
+                                                                  newValues[i])));
+                } else if (elementType.equals(Character.TYPE)) {
+                    Array.setChar(result, i,
+                                  ((Character) converter.getAsObject(context,
+                                                                     uiSelectMany,
+                                                                     newValues[i])));
+                } else if (elementType.equals(Short.TYPE)) {
+                    Array.setShort(result, i,
+                                   ((Short) converter.getAsObject(context,
+                                                                  uiSelectMany,
+                                                                  newValues[i])));
+                } else if (elementType.equals(Long.TYPE)) {
+                    Array.setLong(result, i,
+                                  ((Long) converter.getAsObject(context,
+                                                                uiSelectMany,
+                                                                newValues[i])));
+                }
+            }
+        } else {
+            for (int i = 0; i < len; i++) {
+                if (logger.isLoggable(Level.FINE)) {
+                    Object converted = converter.getAsObject(context,
+                                                             uiSelectMany,
+                                                             newValues[i]);
+                    logger.fine("String value: " + newValues[i] +
+                                " converts to : " + converted);
+                }
+                Array.set(result, i, converter.getAsObject(context,
+                                                           uiSelectMany,
+                                                           newValues[i]));
+            }
+        }
+        return result;
+
+    }
+
+
+    protected boolean renderOption(FacesContext context,
+                                   UIComponent component,
+                                   UIComponent selectComponent,
+                                   Converter converter,
+                                   SelectItem curItem,
+                                   Object currentSelections,
+                                   Object[] submittedValues,
+                                   OptionComponentInfo optionInfo) throws IOException {
+
+        Object valuesArray;
+        Object itemValue;
+        String valueString = getFormattedValue(context, component,
+                                               curItem.getValue(), converter);
+        boolean containsValue;
+        if (submittedValues != null) {
+            containsValue = containsaValue(submittedValues);
+            if (containsValue) {
+                valuesArray = submittedValues;
+                itemValue = valueString;
+            } else {
+                valuesArray = currentSelections;
+                itemValue = curItem.getValue();
+            }
+        } else {
+            valuesArray = currentSelections;
+            itemValue = curItem.getValue();
+        }
+
+        boolean isSelected = isSelected(context, component, itemValue, valuesArray, converter);
+        if (optionInfo.isHideNoSelection()
+                && curItem.isNoSelectionOption()
+                && currentSelections != null
+                && !isSelected) {
+            return false;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert (writer != null);
+        writer.writeText("\t", component, null);
+        writer.startElement("option", (null != selectComponent) ? selectComponent : component);
+        writer.writeAttribute("value", valueString, "value");
+
+        if (isSelected) {
+            writer.writeAttribute("selected", true, "selected");
+        }
+
+        // if the component is disabled, "disabled" attribute would be rendered
+        // on "select" tag, so don't render "disabled" on every option.
+        if ((!optionInfo.isDisabled()) && curItem.isDisabled()) {
+            writer.writeAttribute("disabled", true, "disabled");
+        }
+
+        String labelClass;
+        if (optionInfo.isDisabled() || curItem.isDisabled()) {
+            labelClass = optionInfo.getDisabledClass();
+        } else {
+            labelClass = optionInfo.getEnabledClass();
+        }
+        if (labelClass != null) {
+            writer.writeAttribute("class", labelClass, "labelClass");
+        }
+
+        if (curItem.isEscape()) {
+            String label = curItem.getLabel();
+            if (label == null) {
+                label = valueString;
+            }
+            writer.writeText(label, component, "label");
+        } else {
+            writer.write(curItem.getLabel());
+        }
+        writer.endElement("option");
+        writer.writeText("\n", component, null);
+        return true;
+    }
+
+
+    protected void writeDefaultSize(ResponseWriter writer, int itemCount)
+          throws IOException {
+
+        // if size is not specified default to 1.
+        writer.writeAttribute("size", "1", "size");
+
+    }
+
+
+    protected boolean containsaValue(Object valueArray) {
+
+        if (null != valueArray) {
+            int len = Array.getLength(valueArray);
+            for (int i = 0; i < len; i++) {
+                Object value = Array.get(valueArray, i);
+                if (value != null && !(value.equals(RIConstants.NO_VALUE))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+
+    }
+
+
+    protected Object getCurrentSelectedValues(UIComponent component) {
+
+        if (component instanceof UISelectMany) {
+            UISelectMany select = (UISelectMany) component;
+            Object value = select.getValue();
+            if (value == null) {
+                return null;
+            } else if (value instanceof Collection) {
+                return ((Collection) value).toArray();
+            } else if (value.getClass().isArray()) {
+                if (Array.getLength(value) == 0) {
+                    return null;
+                }
+            } else if (!value.getClass().isArray()) {
+                logger.warning(
+                    "The UISelectMany value should be an array or a collection type, the actual type is " +
+                    value.getClass().getName());
+            }
+
+            return value;
+        }
+
+        UISelectOne select = (UISelectOne) component;
+        Object val = select.getValue();
+        if (val != null) {
+            return new Object[] { val };
+        }
+        return null;
+
+    }
+
+
+    // To derive a selectOne type component from this, override
+    // these methods.
+    protected String getMultipleText(UIComponent component) {
+
+        if (component instanceof UISelectMany) {
+            return " multiple ";
+        }
+        return "";
+
+    }
+
+    protected Object[] getSubmittedSelectedValues(UIComponent component) {
+
+        if (component instanceof UISelectMany) {
+            UISelectMany select = (UISelectMany) component;
+            return (Object[]) select.getSubmittedValue();
+        }
+
+        UISelectOne select = (UISelectOne) component;
+        Object val = select.getSubmittedValue();
+        if (val != null) {
+            return new Object[] { val };
+        }
+        return null;
+
+    }
+
+
+    protected boolean isSelected(FacesContext context,
+                                 UIComponent component,
+                                 Object itemValue,
+                                 Object valueArray,
+                                 Converter converter) {
+
+        if (itemValue == null && valueArray == null) {
+            return true;
+        }
+        if (null != valueArray) {
+            if (!valueArray.getClass().isArray()) {
+                logger.warning("valueArray is not an array, the actual type is " +
+                    valueArray.getClass());
+                return valueArray.equals(itemValue);
+            }
+            int len = Array.getLength(valueArray);
+            for (int i = 0; i < len; i++) {
+                Object value = Array.get(valueArray, i);
+                if (value == null && itemValue == null) {
+                    return true;
+                } else {
+                    if ((value == null) ^ (itemValue == null)) {
+                        continue;
+                    }
+                    Object compareValue;
+                    if (converter == null) {
+                        compareValue = coerceToModelType(context,
+                                                        itemValue,
+                                                        value.getClass());
+                    } else {
+                        compareValue = itemValue;
+                        if (compareValue instanceof String && !(value instanceof String)) {
+                            // type mismatch between the time and the value we're
+                            // comparing.  Invoke the Converter.
+                            compareValue = converter.getAsObject(context,
+                                                                component,
+                                                                (String) compareValue);
+                        }
+                    }
+
+                    if (value.equals(compareValue)) {
+                        return (true);
+                    }
+                }
+            }
+        }
+        return false;
+
+    }
+
+
+    protected int renderOptions(FacesContext context,
+                                UIComponent component,
+                                SelectItemsIterator<SelectItem> items)
+    throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        Converter converter = null;
+        if(component instanceof ValueHolder) {
+            converter = ((ValueHolder)component).getConverter();
+        }
+        int count = 0;
+        Object currentSelections = getCurrentSelectedValues(component);
+        Object[] submittedValues = getSubmittedSelectedValues(component);
+        Map<String,Object> attributes = component.getAttributes();
+        boolean componentDisabled = Util.componentIsDisabled(component);
+
+        OptionComponentInfo optionInfo =
+              new OptionComponentInfo((String) attributes.get("disabledClass"),
+                                      (String) attributes.get("enabledClass"),
+                                      componentDisabled,
+                                      isHideNoSelection(component));
+        RequestStateManager.set(context,
+                                RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
+                                component);
+        while (items.hasNext()) {
+            SelectItem item = items.next();
+            UIComponent selectComponent = items.currentSelectComponent();
+
+            if (item instanceof SelectItemGroup) {
+                // render OPTGROUP
+                writer.startElement("optgroup", (null != selectComponent) ? selectComponent : component);
+                writer.writeAttribute("label", item.getLabel(), "label");
+
+                // if the component is disabled, "disabled" attribute would be rendered
+                // on "select" tag, so don't render "disabled" on every option.
+                if ((!componentDisabled) && item.isDisabled()) {
+                    writer.writeAttribute("disabled", true, "disabled");
+                }
+                count++;
+                // render options of this group.
+                SelectItem[] itemsArray =
+                      ((SelectItemGroup) item).getSelectItems();
+                for (int i = 0; i < itemsArray.length; ++i) {
+                    if (renderOption(context,
+                                     component,
+                                     selectComponent,
+                                     converter,
+                                     itemsArray[i],
+                                     currentSelections,
+                                     submittedValues,
+                                     optionInfo)) {
+                        count++;
+                    }
+                }
+                writer.endElement("optgroup");
+            } else {
+                if (renderOption(context,
+                                 component,
+                                 selectComponent,
+                                 converter,
+                                 item,
+                                 currentSelections,
+                                 submittedValues,
+                                 optionInfo)) {
+                    count ++;
+                }
+            }
+        }
+
+        return count;
+
+    }
+
+
+    // Render the "select" portion..
+    //
+    protected void renderSelect(FacesContext context,
+                                UIComponent component) throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        if (logger.isLoggable(Level.FINER)) {
+            logger.log(Level.FINER, "Rendering 'select'");
+        }
+        writer.startElement("select", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        writer.writeAttribute("name", component.getClientId(context),
+                              "clientId");
+        // render styleClass attribute if present.
+        String styleClass;
+        if (null !=
+            (styleClass =
+                  (String) component.getAttributes().get("styleClass"))) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+        if (!getMultipleText(component).equals("")) {
+            writer.writeAttribute("multiple", true, "multiple");
+        }
+
+        // Determine how many option(s) we need to render, and update
+        // the component's "size" attribute accordingly;  The "size"
+        // attribute will be rendered as one of the "pass thru" attributes
+        SelectItemsIterator<SelectItem> items = RenderKitUtils.getSelectItems(context, component);
+
+        // render the options to a buffer now so that we can determine
+        // the size
+        FastStringWriter bufferedWriter = new FastStringWriter(128);
+        context.setResponseWriter(writer.cloneWithWriter(bufferedWriter));
+        int count = renderOptions(context, component, items);
+        context.setResponseWriter(writer);
+        // If "size" is *not* set explicitly, we have to default it correctly
+        Integer size = (Integer) component.getAttributes().get("size");
+        if (size == null || size == Integer.MIN_VALUE) {
+            size = count;
+        }
+        writeDefaultSize(writer, size);
+
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES,
+                                                getNonOnChangeBehaviors(component));
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer,
+                                                         component);
+
+        RenderKitUtils.renderOnchange(context, component, false);
+
+        // Now, write the buffered option content
+        writer.write(bufferedWriter.toString());
+        
+        writer.endElement("select");
+
+    }
+
+    protected Object coerceToModelType(FacesContext ctx,
+                                       Object value,
+                                       Class itemValueType) {
+
+        Object newValue;
+        try {
+            ExpressionFactory ef = ctx.getApplication().getExpressionFactory();
+            newValue = ef.coerceToType(value, itemValueType);
+        } catch (ELException ele) {
+            newValue = value;
+        } catch (IllegalArgumentException iae) {
+            // If coerceToType fails, per the docs it should throw
+            // an ELException, however, GF 9.0 and 9.0u1 will throw
+            // an IllegalArgumentException instead (see GF issue 1527).
+            newValue = value;
+        }
+
+        return newValue;
+
+    }
+
+
+    /**
+     * @param collection a Collection instance
+     *
+     * @return a new <code>Collection</code> instance or null if the instance
+     *         cannot be created
+     */
+    protected Collection createCollection(Collection collection,
+                                          Class<? extends Collection> fallBackType) {
+
+        Class<? extends Collection> lookupClass =
+              ((collection != null) ? collection.getClass() : fallBackType);
+
+        if (!lookupClass.isInterface()
+             && !Modifier.isAbstract(lookupClass.getModifiers())) {
+            try {
+                return lookupClass.newInstance();
+            } catch (Exception e) {
+                if (logger.isLoggable(Level.SEVERE)) {
+                    logger.log(Level.SEVERE,
+                               "Unable to create new Collection instance for type "
+                               + lookupClass.getName(),
+                               e);
+                }
+            }
+        }
+
+        return null;
+
+    }
+
+
+    /**
+     * <p>
+     * Utility method to invoke the the <code>clone</code> method on the provided
+     * value.
+     * </p>
+     *
+     * @param value the value to clone
+     * @return the result of invoking <code>clone()</code> or <code>null</code>
+     *  if the value could not be cloned or does not implement the
+     *  {@link Cloneable} interface
+     */
+    protected Collection cloneValue(Object value) {
+
+        if (value instanceof Cloneable) {
+            // even though Clonable marks an instance of a Class as being
+            // safe to call .clone(), .clone() by default is protected.
+            // The Collection classes that do implement Clonable do so at variable
+            // locations within the class hierarchy, so we're stuck having to
+            // use reflection.
+            Method clone =
+                  ReflectionUtils.lookupMethod(value.getClass(), "clone");
+            if (clone != null) {
+                try {
+                    Collection c = (Collection) clone.invoke(value);
+                    c.clear();
+                    return c;
+                } catch (Exception e) {
+                    if (logger.isLoggable(Level.SEVERE)) {
+                        logger.log(Level.SEVERE,
+                                   "Unable to clone collection type: {0}",
+                                   value.getClass().getName());
+                        logger.log(Level.SEVERE, e.toString(), e);
+                    }
+                }
+            } else {
+                // no public clone method
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.log(Level.FINE,
+                               "Type {0} implements Cloneable, but has no public clone method.",
+                               value.getClass().getName());
+                }
+            }
+        }
+
+        return null;
+
+    }
+
+
+    /**
+     * @param type the target model type
+     * @param initialSize the initial size of the <code>Collection</code>
+     * @return a <code>Collection</code> instance that best matches
+     *  <code>type</code>
+     */
+    protected Collection bestGuess(Class<? extends Collection> type,
+                                   int initialSize) {
+
+        if (SortedSet.class.isAssignableFrom(type)) {
+            return new TreeSet();
+        } else if (Queue.class.isAssignableFrom(type)) {
+           return new LinkedList(); 
+        } else if (Set.class.isAssignableFrom(type)) {
+            return new HashSet(initialSize);
+        } else {
+            // this covers the where type is List or Collection
+            return new ArrayList(initialSize);
+        }
+
+    }
+
+
+    /**
+     * <p>
+     * Create a collection from the provided hint.
+     * @param collectionTypeHint the Collection type as either a String or Class
+     * @return a new Collection instance
+     */
+    protected Collection createCollectionFromHint(Object collectionTypeHint) {
+
+        Class<? extends Collection> collectionType;
+        if (collectionTypeHint instanceof Class) {
+            //noinspection unchecked
+            collectionType = (Class<? extends Collection>) collectionTypeHint;
+        } else if (collectionTypeHint instanceof String) {
+            try {
+                //noinspection unchecked
+                collectionType = Util.loadClass((String) collectionTypeHint,
+                                                this);
+            } catch (ClassNotFoundException cnfe) {
+                throw new FacesException(cnfe);
+            }
+        } else {
+            // RELEASE_PENDING (i18n)
+            throw new FacesException(
+                  "'collectionType' should resolve to type String or Class.  Found: "
+                  + collectionTypeHint.getClass().getName());
+        }
+
+        Collection c = createCollection(null, collectionType);
+        if (c == null) {
+            // RELEASE_PENDING (i18n)
+            throw new FacesException("Unable to create collection type " + collectionType);
+        }
+        return c;
+
+    }
+
+
+    protected boolean isHideNoSelection(UIComponent component) {
+
+        Object result = component.getAttributes().get("hideNoSelectionOption");
+        return ((result != null) ? (Boolean) result : false);
+
+    }
+
+} // end of class MenuRenderer
diff --git a/com/sun/faces/renderkit/html_basic/MessageRenderer.java b/com/sun/faces/renderkit/html_basic/MessageRenderer.java
new file mode 100644
index 0000000..5f0bf85
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/MessageRenderer.java
@@ -0,0 +1,290 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// MessageRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.logging.Level;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIMessage;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/**
+ * <p><B>MessageRenderer</B> handles rendering for the Message<p>.
+ *
+ */
+
+public class MessageRenderer extends HtmlBasicRenderer {
+
+
+    private OutputMessageRenderer omRenderer = null;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public MessageRenderer() {
+
+        omRenderer = new OutputMessageRenderer();
+
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (component instanceof UIOutput) {
+            omRenderer.encodeBegin(context, component);
+        }
+
+    }
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (component instanceof UIOutput) {
+            omRenderer.encodeChildren(context, component);
+        }
+
+    }
+
+
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (component instanceof UIOutput) {
+            omRenderer.encodeEnd(context, component);
+            return;
+        }
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        //  If id is user specified, we must render
+        boolean mustRender = shouldWriteIdAttribute(component);
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        UIMessage message = (UIMessage) component;
+
+        String clientId = message.getFor();
+        //"for" attribute required for Message. Should be taken care of
+        //by TLD in JSP case, but need to cover non-JSP case.
+        if (clientId == null) {
+            if (logger.isLoggable(Level.WARNING)) {
+                logger.warning("'for' attribute cannot be null");
+            }
+            return;
+        }
+
+        clientId = augmentIdReference(clientId, component);
+        Iterator messageIter = getMessageIter(context, clientId, component);
+
+
+        assert(messageIter != null);
+        if (!messageIter.hasNext()) {
+            if (mustRender) {
+                // no message to render, but must render anyway
+                writer.startElement("span", component);
+                writeIdAttributeIfNecessary(context, writer, component);
+                writer.endElement("span");
+            } // otherwise, return without rendering
+            return;
+        }
+        FacesMessage curMessage = (FacesMessage) messageIter.next();
+        if (curMessage.isRendered() && !message.isRedisplay()) {
+            return;
+        }
+        curMessage.rendered();
+
+        String severityStyle = null;
+        String severityStyleClass = null;
+        boolean showSummary = message.isShowSummary();
+        boolean showDetail = message.isShowDetail();
+
+        // make sure we have a non-null value for summary and
+        // detail.
+        String summary = (null != (summary = curMessage.getSummary())) ?
+                  summary : "";
+        // Default to summary if we have no detail
+        String detail = (null != (detail = curMessage.getDetail())) ?
+                 detail : summary;
+
+        if (curMessage.getSeverity() == FacesMessage.SEVERITY_INFO) {
+            severityStyle =
+                  (String) component.getAttributes().get("infoStyle");
+            severityStyleClass = (String)
+                  component.getAttributes().get("infoClass");
+        } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_WARN) {
+            severityStyle =
+                  (String) component.getAttributes().get("warnStyle");
+            severityStyleClass = (String)
+                  component.getAttributes().get("warnClass");
+        } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_ERROR) {
+            severityStyle =
+                  (String) component.getAttributes().get("errorStyle");
+            severityStyleClass = (String)
+                  component.getAttributes().get("errorClass");
+        } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_FATAL) {
+            severityStyle =
+                  (String) component.getAttributes().get("fatalStyle");
+            severityStyleClass = (String)
+                  component.getAttributes().get("fatalClass");
+        }
+
+        String style = (String) component.getAttributes().get("style");
+        String styleClass = (String) component.getAttributes().get("styleClass");
+        String dir = (String) component.getAttributes().get("dir");
+        String lang = (String) component.getAttributes().get("lang");
+        String title = (String) component.getAttributes().get("title");
+
+        // if we have style and severityStyle
+        if ((style != null) && (severityStyle != null)) {
+            // severityStyle wins
+            style = severityStyle;
+        }
+        // if we have no style, but do have severityStyle
+        else if ((style == null) && (severityStyle != null)) {
+            // severityStyle wins
+            style = severityStyle;
+        }
+
+        // if we have styleClass and severityStyleClass
+        if ((styleClass != null) && (severityStyleClass != null)) {
+            // severityStyleClass wins
+            styleClass = severityStyleClass;
+        }
+        // if we have no styleClass, but do have severityStyleClass
+        else if ((styleClass == null) && (severityStyleClass != null)) {
+            // severityStyleClass wins
+            styleClass = severityStyleClass;
+        }
+
+        //Done intializing local variables. Move on to rendering.
+
+        boolean wroteSpan = false;
+        if (styleClass != null
+             || style != null
+             || dir != null
+             || lang != null
+             || title != null
+             || mustRender) {
+            writer.startElement("span", component);
+            writeIdAttributeIfNecessary(context, writer, component);
+
+            wroteSpan = true;
+            if (style != null) {               
+                writer.writeAttribute("style", style, "style");
+            }
+            if (styleClass != null) {
+                writer.writeAttribute("class", styleClass, "styleClass");
+            }
+            if (dir != null) {
+                writer.writeAttribute("dir", dir, "dir");
+            }
+            if (lang != null) {
+                writer.writeAttribute(RenderKitUtils.prefixAttribute("lang", writer),
+                     lang,
+                     "lang");
+            }
+            if (title != null) {
+                writer.writeAttribute("title", title, "title");
+            }
+
+        }
+
+        Object val = component.getAttributes().get("tooltip");
+        boolean isTooltip = (val != null) && Boolean.valueOf(val.toString());
+
+        boolean wroteTooltip = false;
+        if ((showSummary || showDetail) && isTooltip) {
+
+            if (!wroteSpan) {
+                writer.startElement("span", component);
+            }            
+            if (title == null || title.length() == 0) {
+                writer.writeAttribute("title", detail, "title");
+            }
+            writer.flush();
+            writer.writeText("\t", component, null);
+            wroteTooltip = true;
+        } else if (wroteSpan) {
+            writer.flush();
+        }
+
+        if (showSummary) {
+            writer.writeText("\t", component, null);
+            writer.writeText(summary, component, null);
+            writer.writeText(" ", component, null);
+        }
+        if (showDetail) {
+            writer.writeText(detail, component, null);
+        }
+
+        if (wroteSpan || wroteTooltip) {
+            writer.endElement("span");
+        }
+
+    }
+
+} // end of class MessageRenderer
+
+
diff --git a/com/sun/faces/renderkit/html_basic/MessagesRenderer.java b/com/sun/faces/renderkit/html_basic/MessagesRenderer.java
new file mode 100644
index 0000000..54af633
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/MessagesRenderer.java
@@ -0,0 +1,270 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// MessagesRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIMessages;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/**
+ * <p><B>MessagesRenderer</B> handles rendering for the Messages<p>.
+ *
+ */
+
+public class MessagesRenderer extends HtmlBasicRenderer {
+
+
+     private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.MESSAGESMESSAGES);
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        //  If id is user specified, we must render
+        boolean mustRender = shouldWriteIdAttribute(component);
+
+        UIMessages messages = (UIMessages) component;
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String clientId = ((UIMessages) component).getFor();
+        // if no clientId was included
+        if (clientId == null) {
+            // and the author explicitly only wants global messages
+            if (messages.isGlobalOnly()) {
+                // make it so only global messages get displayed.
+                clientId = "";
+            }
+        }
+
+        //"for" attribute optional for Messages
+        Iterator messageIter = getMessageIter(context, clientId, component);
+
+        assert(messageIter != null);
+        
+        if (!messageIter.hasNext()) {
+            if (mustRender) {
+                // no message to render, but must render anyway
+                // but if we're writing the dev stage messages,
+                // only write it if messages exist
+                if ("javax_faces_developmentstage_messages".equals(component.getId())) {
+                    return;
+                }
+                writer.startElement("div", component);
+                writeIdAttributeIfNecessary(context, writer, component);
+                writer.endElement("div");
+            } // otherwise, return without rendering
+            return;
+        }
+
+        String layout = (String) component.getAttributes().get("layout");
+        boolean showSummary = messages.isShowSummary();
+        boolean showDetail = messages.isShowDetail();
+        String styleClass = (String) component.getAttributes().get(
+              "styleClass");
+
+        boolean wroteTable = false;
+
+        //For layout attribute of "table" render as HTML table.
+        //If layout attribute is not present, or layout attribute
+        //is "list", render as HTML list. 
+        if ((layout != null) && (layout.equals("table"))) {
+            writer.startElement("table", component);
+            wroteTable = true;
+        } else {
+            writer.startElement("ul", component);
+        }
+
+        //Render "table" or "ul" level attributes.
+        writeIdAttributeIfNecessary(context, writer, component);
+        if (null != styleClass) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+        // style is rendered as a passthru attribute
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+
+        while (messageIter.hasNext()) {
+            FacesMessage curMessage = (FacesMessage) messageIter.next();
+            if (curMessage.isRendered() && !messages.isRedisplay()) {
+                continue;
+            }
+            curMessage.rendered();
+
+            String severityStyle = null;
+            String severityStyleClass = null;
+
+            // make sure we have a non-null value for summary and
+            // detail.
+            String summary = (null != (summary = curMessage.getSummary())) ?
+                      summary : "";
+            // Default to summary if we have no detail
+            String detail = (null != (detail = curMessage.getDetail())) ?
+                     detail : summary;
+
+
+            if (curMessage.getSeverity() == FacesMessage.SEVERITY_INFO) {
+                severityStyle =
+                      (String) component.getAttributes().get("infoStyle");
+                severityStyleClass = (String)
+                      component.getAttributes().get("infoClass");
+            } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_WARN) {
+                severityStyle =
+                      (String) component.getAttributes().get("warnStyle");
+                severityStyleClass = (String)
+                      component.getAttributes().get("warnClass");
+            } else
+            if (curMessage.getSeverity() == FacesMessage.SEVERITY_ERROR) {
+                severityStyle =
+                      (String) component.getAttributes().get("errorStyle");
+                severityStyleClass = (String)
+                      component.getAttributes().get("errorClass");
+            } else
+            if (curMessage.getSeverity() == FacesMessage.SEVERITY_FATAL) {
+                severityStyle =
+                      (String) component.getAttributes().get("fatalStyle");
+                severityStyleClass = (String)
+                      component.getAttributes().get("fatalClass");
+            }
+
+            //Done intializing local variables. Move on to rendering.
+
+            if (wroteTable) {
+                writer.startElement("tr", component);
+            } else {
+                writer.startElement("li", component);
+            }
+
+            if (severityStyle != null) {
+                writer.writeAttribute("style", severityStyle, "style");
+            }
+            if (severityStyleClass != null) {
+                styleClass = severityStyleClass;
+                writer.writeAttribute("class", styleClass, "styleClass");
+            }
+
+            if (wroteTable) {
+                writer.startElement("td", component);
+            }
+
+            Object val = component.getAttributes().get("tooltip");
+            boolean isTooltip = (val != null) && Boolean.valueOf(val.toString());
+
+            boolean wroteTooltip = false;
+            if (isTooltip) {
+                writer.startElement("span", component);
+                String title = (String) component.getAttributes().get("title");
+                if (title == null || title.length() == 0) {
+                    writer.writeAttribute("title", detail, "title");
+                }
+                writer.flush();
+                writer.writeText("\t", component, null);
+                wroteTooltip = true;
+            }
+
+            if (showSummary) {
+                writer.writeText("\t", component, null);
+                writer.writeText(summary, component, null);
+                writer.writeText(" ", component, null);
+            }
+            if (showDetail) {
+                writer.writeText(detail, component, null);
+            }
+
+            if (wroteTooltip) {
+                writer.endElement("span");
+            }
+
+            //close table row if present
+            if (wroteTable) {
+                writer.endElement("td");
+                writer.endElement("tr");
+            } else {
+                writer.endElement("li");
+            }
+
+        } //messageIter
+
+        //close table if present
+        if (wroteTable) {
+            writer.endElement("table");
+        } else {
+            writer.endElement("ul");
+        }
+
+    }
+
+} // end of class MessagesRenderer
+
+
diff --git a/com/sun/faces/renderkit/html_basic/OutcomeTargetButtonRenderer.java b/com/sun/faces/renderkit/html_basic/OutcomeTargetButtonRenderer.java
new file mode 100644
index 0000000..4ab432b
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/OutcomeTargetButtonRenderer.java
@@ -0,0 +1,161 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.faces.application.NavigationCase;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+public class OutcomeTargetButtonRenderer extends OutcomeTargetRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+        AttributeManager.getAttributes(AttributeManager.Key.COMMANDBUTTON);
+
+
+    // --------------------------------------------------- Methods from Renderer
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+    throws IOException {
+
+        rendererParamsNotNull(context, component);
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        writer.startElement("input", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+
+        String imageSrc = (String) component.getAttributes().get("image");
+        if (imageSrc != null) {
+            writer.writeAttribute("type", "image", "type");
+            writer.writeURIAttribute("src", RenderKitUtils.getImageSource(context, component, "image"), "image");
+        }
+        else {
+            writer.writeAttribute("type", "button", "type");
+        }
+
+        String label = getLabel(component);
+
+        if (!Util.componentIsDisabled(component)) {
+            NavigationCase navCase = getNavigationCase(context, component);
+
+            if (navCase == null) {
+                // QUESTION should this only be added in development mode?
+                label += MessageUtils.getExceptionMessageString(MessageUtils.OUTCOME_TARGET_BUTTON_NO_MATCH);
+                writer.writeAttribute("disabled", "true", "disabled");
+            }
+            else {
+                String hrefVal = getEncodedTargetURL(context, component, navCase);
+                hrefVal += getFragment(component);
+                writer.writeAttribute("onclick", getOnclick(component, hrefVal), "onclick");
+            }
+        }
+
+        // value should be used even for image type for accessibility (e.g., images disabled in browser)
+        writer.writeAttribute("value", label, "value");
+
+        String styleClass = (String) component.getAttributes().get("styleClass");
+        if (styleClass != null && styleClass.length() > 0) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+
+        renderPassThruAttributes(context, writer, component, ATTRIBUTES, null);
+
+        if(component.getChildCount() == 0) {
+            writer.endElement("input");
+        }
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+    throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if(component.getChildCount() > 0) {
+            context.getResponseWriter().endElement("input");
+        }
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected String getOnclick(UIComponent component, String targetURI) {
+
+        String onclick = (String) component.getAttributes().get("onclick");
+
+        if (onclick != null) {
+            onclick = onclick.trim();
+            if (onclick.length() > 0 && !onclick.endsWith(";")) {
+                onclick += "; ";
+            }
+        }
+        else {
+            onclick = "";
+        }
+
+        if (targetURI != null) {
+            onclick += "window.location.href='" + targetURI + "'; ";
+        }
+
+        onclick += "return false;";
+
+        return onclick;
+        
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/OutcomeTargetLinkRenderer.java b/com/sun/faces/renderkit/html_basic/OutcomeTargetLinkRenderer.java
new file mode 100644
index 0000000..990a990
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/OutcomeTargetLinkRenderer.java
@@ -0,0 +1,213 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import javax.faces.application.NavigationCase;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+public class OutcomeTargetLinkRenderer extends OutcomeTargetRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+        AttributeManager.getAttributes(AttributeManager.Key.OUTCOMETARGETLINK);
+
+    private static final String NO_NAV_CASE =
+          OutcomeTargetLinkRenderer.class.getName() + "_NO_NAV_CASE";
+
+    //Attributes that are to excluded from rendering for this renderer.
+    private static final List<String> EXCLUDED_ATTRIBUTES = Arrays.asList("disabled");
+
+    // --------------------------------------------------- Methods from Renderer
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+    throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        NavigationCase navCase = null;
+        boolean failedToResolveNavigationCase = false;
+        boolean disabled = Util.componentIsDisabled(component);
+
+        if (!disabled) {
+            navCase = getNavigationCase(context, component);
+            if (navCase == null) {
+                failedToResolveNavigationCase = true;
+                context.getAttributes().put(NO_NAV_CASE, true);
+            }
+
+        }
+
+        if (disabled || navCase == null) {
+            renderAsDisabled(context, component, failedToResolveNavigationCase);
+        } else {
+            renderAsActive(context, navCase, component);
+        }
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        String endElement = ((Util.componentIsDisabled(component) || context.getAttributes().remove(NO_NAV_CASE) != null) 
+                                ? "span"
+                                : "a");
+        writer.endElement(endElement);
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected void renderAsDisabled(FacesContext context,
+                                    UIComponent component,
+                                    boolean failedToResolveNavigationCase)
+    throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        writer.startElement("span", component);
+        writeIdAndNameAttributes(context, writer, component);
+        renderLinkCommonAttributes(writer, component);
+        renderPassThruAttributes(context, writer, component, ATTRIBUTES, EXCLUDED_ATTRIBUTES);
+        writeValue(writer, component);
+
+        // shame that we can't put this in encodeEnd, but then we have to attempt to resolve the navigation case again
+        if (failedToResolveNavigationCase) {
+            if (!context.isProjectStage(ProjectStage.Production)) {
+                writer.write(MessageUtils.getExceptionMessageString(MessageUtils.OUTCOME_TARGET_LINK_NO_MATCH));
+            }
+        }
+
+    }
+
+    protected void renderAsActive(FacesContext context,
+                                  NavigationCase navCase,
+                                  UIComponent component)
+    throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        writer.startElement("a", component);
+        writeIdAndNameAttributes(context, writer, component);
+
+        String hrefVal = getEncodedTargetURL(context, component, navCase);
+        hrefVal += getFragment(component);
+        writer.writeURIAttribute("href", hrefVal, "outcome");
+
+        renderLinkCommonAttributes(writer, component);
+        renderPassThruAttributes(context, writer, component, ATTRIBUTES, null);
+        writeValue(writer, component);
+
+    }
+
+    protected void writeIdAndNameAttributes(FacesContext context,
+                                            ResponseWriter writer,
+                                            UIComponent component)
+    throws IOException {
+
+        String writtenId = writeIdAttributeIfNecessary(context, writer, component);
+        if (null != writtenId) {
+            writer.writeAttribute("name", writtenId, "name");
+        }
+
+    }
+
+    protected void writeValue(ResponseWriter writer, UIComponent component)
+    throws IOException {
+
+        writer.writeText(getLabel(component), component, null);
+        writer.flush();
+        
+    }
+
+
+    protected void renderLinkCommonAttributes(ResponseWriter writer,
+                                              UIComponent component)
+    throws IOException {
+
+        // this is common to both link and button target renderers
+        String styleClass = (String) component.getAttributes().get("styleClass");
+        if (styleClass != null && styleClass.length() > 0) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+
+        // target/onclick should be pass through, but right now, due to command Link,
+        // they all share the same base properties file which marks them as non
+        // pass-through
+        String target = (String) component.getAttributes().get("target");
+        if (target != null && target.length() > 0) {
+            writer.writeAttribute("target", target, "target");
+        }
+
+        String onclick = (String) component.getAttributes().get("onclick");
+        if (onclick != null && onclick.length() > 0) {
+            writer.writeAttribute("onclick", onclick, "onclick");
+        }
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/OutcomeTargetRenderer.java b/com/sun/faces/renderkit/html_basic/OutcomeTargetRenderer.java
new file mode 100644
index 0000000..829d46f
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/OutcomeTargetRenderer.java
@@ -0,0 +1,286 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.flow.FlowHandlerImpl;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.util.Util;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import javax.faces.application.*;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutcomeTarget;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.event.ActionListener;
+import javax.faces.flow.FlowHandler;
+import javax.faces.lifecycle.ClientWindow;
+
+public abstract class OutcomeTargetRenderer extends HtmlBasicRenderer {
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {}
+
+    // ------------------------------------------------------- Protected Methods
+    
+
+    protected void renderPassThruAttributes(FacesContext ctx,
+                                            ResponseWriter writer,
+                                            UIComponent component,
+                                            Attribute[] attributes,
+                                            List excludedAttributes)
+    throws IOException {
+        RenderKitUtils.renderPassThruAttributes(ctx, writer, component, attributes);
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component, excludedAttributes);
+
+        
+    }
+
+    protected String getLabel(UIComponent component) {
+
+        Object value = ((UIOutcomeTarget) component).getValue();
+        return value != null ? value.toString() : "";
+        
+    }
+
+    protected String getFragment(UIComponent component) {
+
+        String fragment = (String) component.getAttributes().get("fragment");
+        fragment = (fragment != null ? fragment.trim() : "");
+        if (fragment.length() > 0) {
+            fragment = "#" + fragment;
+        }
+        return fragment;
+
+    }
+
+    @Override
+    protected Object getValue(UIComponent component) {
+
+        return ((UIOutcomeTarget) component).getValue();
+
+    }
+
+    protected boolean isIncludeViewParams(UIComponent component, NavigationCase navcase) {
+
+        return (((UIOutcomeTarget) component).isIncludeViewParams() || navcase.isIncludeViewParams());
+
+    }
+
+    /**
+     * Invoke the {@link NavigationHandler} preemptively to resolve a {@link NavigationCase}
+     * for the outcome declared on the {@link UIOutcomeTarget} component. The current view id
+     * is used as the from-view-id when matching navigation cases and the from-action is
+     * assumed to be null.
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @param component the target {@link UIComponent}
+     *
+     * @return the NavigationCase represeting the outcome target
+     */
+    protected NavigationCase getNavigationCase(FacesContext context, UIComponent component) {
+        NavigationHandler navHandler = context.getApplication().getNavigationHandler();
+        if (!(navHandler instanceof ConfigurableNavigationHandler)) {
+            if (logger.isLoggable(Level.WARNING)) {
+                logger.log(Level.WARNING,
+                    "jsf.outcome.target.invalid.navigationhandler.type",
+                    component.getId());
+            }
+            return null;
+        }
+
+        String outcome = ((UIOutcomeTarget) component).getOutcome();
+        if (outcome == null) {
+            outcome = context.getViewRoot().getViewId();
+            // QUESTION should we avoid the call to getNavigationCase() and instead instantiate one explicitly?
+            //String viewId = context.getViewRoot().getViewId();
+            //return new NavigationCase(viewId, null, null, null, viewId, false, false);
+        }
+        String toFlowDocumentId = (String) component.getAttributes().get(ActionListener.TO_FLOW_DOCUMENT_ID_ATTR_NAME);
+        NavigationCase navCase = null;
+        if (null == toFlowDocumentId) {
+            navCase = ((ConfigurableNavigationHandler) navHandler).getNavigationCase(context, null, outcome);            
+        } else {
+            navCase = ((ConfigurableNavigationHandler) navHandler).getNavigationCase(context, null, outcome, toFlowDocumentId);            
+        }
+
+        if (navCase == null && logger.isLoggable(Level.WARNING)) {
+            logger.log(Level.WARNING,
+                    "jsf.outcometarget.navigation.case.not.resolved",
+                    component.getId());
+        }
+        return navCase;
+    }
+
+    /**
+     * <p>Resolve the target view id and then delegate to
+     * {@link ViewHandler#getBookmarkableURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)}
+     * to produce a redirect URL, which will add the page parameters if necessary
+     * and properly prioritizing the parameter overrides.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @param component the target {@link UIComponent}
+     * @param navCase the target navigation case
+     *
+     * @return an encoded URL for the provided navigation case
+     */
+    protected String getEncodedTargetURL(FacesContext context, UIComponent component, NavigationCase navCase) {
+        // FIXME getNavigationCase doesn't resolve the target viewId (it is part of CaseStruct)
+        String toViewId = navCase.getToViewId(context);
+        Map<String,List<String>> params = getParamOverrides(component);
+        addNavigationParams(navCase, params);
+        String result = null;
+        boolean didDisableClientWindowRendering = false;
+        ClientWindow cw = null;
+
+        
+        try {
+            Map<String, Object> attrs = component.getAttributes();
+            Object val = attrs.get("disableClientWindow");
+            if (null != val) {
+                didDisableClientWindowRendering = "true".equalsIgnoreCase(val.toString());
+            }
+            if (didDisableClientWindowRendering) {
+                cw = context.getExternalContext().getClientWindow();
+                if (null != cw) {
+                    cw.disableClientWindowRenderMode(context);
+                }
+            }
+            
+            result = Util.getViewHandler(context).getBookmarkableURL(context,
+                                                               toViewId,
+                                                               params,
+                                                               isIncludeViewParams(component, navCase));
+        } finally {
+            if (didDisableClientWindowRendering && null != cw) {
+                cw.enableClientWindowRenderMode(context);
+            }
+        }
+        
+        return result;
+    }
+
+    protected void addNavigationParams(NavigationCase navCase,
+                                       Map<String,List<String>> existingParams) {
+
+        Map<String,List<String>> navParams = navCase.getParameters();
+        if (navParams != null && !navParams.isEmpty()) {
+            for (Map.Entry<String,List<String>> entry : navParams.entrySet()) {
+                String navParamName = entry.getKey();
+                // only add the navigation params to the existing params collection
+                // if the parameter name isn't already present within the existing
+                // collection
+                if (!existingParams.containsKey(navParamName)) {
+                    if (entry.getValue().size() == 1) {
+                        String value = entry.getValue().get(0);
+                        if (value.trim().startsWith("#{") || value.trim().startsWith("${")) {
+                            FacesContext fc = FacesContext.getCurrentInstance();
+                            value = fc.getApplication().evaluateExpressionGet(fc, value, String.class);
+                            List<String> values = new ArrayList<String>();
+                            values.add(value);
+                            existingParams.put(navParamName, values);
+                        } else {
+                            existingParams.put(navParamName, entry.getValue());
+                        }
+                    } else {
+                        existingParams.put(navParamName, entry.getValue());
+                    }
+                }
+            }
+        }
+        
+        String toFlowDocumentId = navCase.getToFlowDocumentId();
+        if (null != toFlowDocumentId) {
+            if (FlowHandler.NULL_FLOW.equals(toFlowDocumentId)) {
+                List<String> flowDocumentIdValues = new ArrayList<String>();
+                flowDocumentIdValues.add(FlowHandler.NULL_FLOW);
+                existingParams.put(FlowHandler.TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME, flowDocumentIdValues);
+                
+                FacesContext context = FacesContext.getCurrentInstance();
+                FlowHandler fh = context.getApplication().getFlowHandler();
+                if (fh instanceof FlowHandlerImpl) {
+                    FlowHandlerImpl fhi = (FlowHandlerImpl) fh;
+                    List<String> flowReturnDepthValues = new ArrayList<String>();
+                    flowReturnDepthValues.add("" + fhi.getAndClearReturnModeDepth(context));
+                    existingParams.put(FlowHandlerImpl.FLOW_RETURN_DEPTH_PARAM_NAME, flowReturnDepthValues);
+                }
+                
+            } else {
+                String flowId = navCase.getFromOutcome();
+                List<String> flowDocumentIdValues = new ArrayList<String>();
+                flowDocumentIdValues.add(toFlowDocumentId);
+                existingParams.put(FlowHandler.TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME, flowDocumentIdValues);
+                
+                List<String> flowIdValues = new ArrayList<String>();
+                flowIdValues.add(flowId);
+                existingParams.put(FlowHandler.FLOW_ID_REQUEST_PARAM_NAME, flowIdValues);
+            }
+        }
+
+    }
+
+    protected Map<String, List<String>> getParamOverrides(UIComponent component) {
+        Map<String, List<String>> params = new LinkedHashMap<String, List<String>>();
+        Param[] declaredParams = getParamList(component);
+        for (Param candidate : declaredParams) {
+            // QUESTION shouldn't the trimming of name should be done elsewhere?
+            // null value is allowed as a way to suppress page parameter
+            if (candidate.name != null && candidate.name.trim().length() > 0) {
+                candidate.name = candidate.name.trim();
+                List<String> values = params.get(candidate.name);
+                if (values == null) {
+                    values = new ArrayList<String>();
+                    params.put(candidate.name, values);
+                }
+                values.add(candidate.value);
+            }
+        }
+
+        return params;
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/OutputLinkRenderer.java b/com/sun/faces/renderkit/html_basic/OutputLinkRenderer.java
new file mode 100644
index 0000000..744794d
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/OutputLinkRenderer.java
@@ -0,0 +1,276 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// OutputLinkRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.logging.Level;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.Util;
+
+import java.net.URLEncoder;
+
+
+/**
+ * <B>OutputLinkRenderer</B> is a class ...
+ * <p/>
+ * <B>Lifetime And Scope</B> <P>
+ *
+ */
+
+public class OutputLinkRenderer extends LinkRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTLINK);
+
+    protected boolean namespaceParameters;
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public OutputLinkRenderer() {
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        namespaceParameters = webConfig.isOptionEnabled(BooleanWebContextInitParameter.NamespaceParameters);
+    }
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+
+        rendererParamsNotNull(context, component);
+
+
+        if (shouldDecode(component)) {
+            decodeBehaviors(context, component);
+        }
+    }
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        UIOutput output = (UIOutput) component;
+        boolean componentDisabled = false;
+        if (output.getAttributes().get("disabled") != null) {
+            if ((output.getAttributes().get("disabled")).equals(Boolean.TRUE)) {
+                componentDisabled = true;
+            }
+        }
+        if (componentDisabled) {
+            renderAsDisabled(context, output);
+        } else {
+            renderAsActive(context, output);
+        }
+
+    }
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncodeChildren(component)) {
+            return;
+        }
+
+        if (component.getChildCount() > 0) {
+            for (UIComponent kid : component.getChildren()) {
+                encodeRecursive(context, kid);
+            }
+        }
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        if (Boolean.TRUE.equals(component.getAttributes().get("disabled"))) {
+            writer.endElement("span");
+        } else {
+            //Write Anchor inline elements
+            //Done writing Anchor element
+            writer.endElement("a");
+        }
+
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+
+        return true;
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected String getFragment(UIComponent component) {
+
+        String fragment = (String) component.getAttributes().get("fragment");
+        fragment = (fragment != null ? fragment.trim() : "");
+        if (fragment.length() > 0) {
+            fragment = "#" + fragment;
+        }
+        return fragment;
+
+    }
+
+    @Override
+    protected Object getValue(UIComponent component) {
+
+        if (Util.componentIsDisabled(component)) {
+            return null;
+        } else {
+            return ((UIOutput) component).getValue();
+        }
+
+    }
+
+
+    protected void renderAsActive(FacesContext context, UIComponent component)
+          throws IOException {
+
+        String hrefVal = getCurrentValue(context, component);
+        if (logger.isLoggable(Level.FINE)) {
+            logger.fine("Value to be rendered " + hrefVal);
+        }
+
+        // suppress rendering if "rendered" property on the output is
+        // false
+        if (!component.isRendered()) {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("End encoding component "
+                            + component.getId() + " since " +
+                            "rendered attribute is set to false ");
+            }
+            return;
+        }
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        writer.startElement("a", component);
+        String writtenId =
+              writeIdAttributeIfNecessary(context, writer, component);
+        if (null != writtenId) {
+            writer.writeAttribute("name", writtenId, "name");
+        }
+        // render an empty value for href if it is not specified
+        if (null == hrefVal || 0 == hrefVal.length()) {
+            hrefVal = "";
+        }
+
+        //Write Anchor attributes
+
+        Param paramList[] = getParamList(component);
+        StringBuffer sb = new StringBuffer();
+        sb.append(hrefVal);
+        boolean paramWritten = (hrefVal.indexOf('?') > 0);
+        String namingContainerId = null;
+        if (namespaceParameters) {
+            UIViewRoot viewRoot = context.getViewRoot();
+            namingContainerId = viewRoot.getContainerClientId(context);
+        }
+        for (int i = 0, len = paramList.length; i < len; i++) {
+            String pn = paramList[i].name;
+            if (pn != null && pn.length() != 0) {
+            	if (namingContainerId != null) {
+            		pn = namingContainerId + pn;
+            	}
+                String pv = paramList[i].value;
+                sb.append((paramWritten) ? '&' : '?');
+                sb.append(URLEncoder.encode(pn,"UTF-8"));
+                sb.append('=');
+                if (pv != null && pv.length() != 0) {
+                    sb.append(URLEncoder.encode(pv, "UTF-8"));
+                }
+                paramWritten = true;
+            }
+        }
+        sb.append(getFragment(component));
+        writer.writeURIAttribute("href",
+                                 context.getExternalContext()
+                                       .encodeResourceURL(sb.toString()),
+                                 "href");
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+
+        String target = (String) component.getAttributes().get("target");
+        if (target != null && target.trim().length() != 0) {
+            writer.writeAttribute("target", target, "target");
+        }
+
+        writeCommonLinkAttributes(writer, component);
+
+        writer.flush();
+
+    }
+
+} // end of class OutputLinkRenderer
diff --git a/com/sun/faces/renderkit/html_basic/OutputMessageRenderer.java b/com/sun/faces/renderkit/html_basic/OutputMessageRenderer.java
new file mode 100644
index 0000000..76567fd
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/OutputMessageRenderer.java
@@ -0,0 +1,176 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// OutputMessageRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIParameter;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.RenderKitUtils;
+
+
+/** <B>OutputMessageRenderer</B> is a class that renderes UIOutput */
+
+public class OutputMessageRenderer extends HtmlBasicInputRenderer {
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        String currentValue = getCurrentValue(context, component);
+        // If null, do not putput anything - return.
+        if (null == currentValue) {
+            return;
+        }
+        int childCount = component.getChildCount();
+        List<Object> parameterList;
+
+        if (childCount > 0) {
+            parameterList = new ArrayList<Object>(childCount);
+            // get UIParameter children...
+
+            for (UIComponent kid : component.getChildren()) {
+                //PENDING(rogerk) ignore if child is not UIParameter?
+                if (!(kid instanceof UIParameter)) {
+                    continue;
+                }
+
+                parameterList.add(((UIParameter) kid).getValue());
+            }
+        } else {
+            parameterList = Collections.emptyList();
+        }
+
+        // If at least one substitution parameter was specified,
+        // use the string as a MessageFormat instance.
+        String message;
+        if (parameterList.size() > 0) {
+            MessageFormat fmt = new MessageFormat(currentValue,
+                                                  context.getViewRoot().getLocale());
+            StringBuffer buf = new StringBuffer(currentValue.length() * 2);
+            fmt.format(parameterList.toArray(new Object[parameterList.size()]),
+                       buf,
+                       null);
+            message = buf.toString();
+        } else {
+            message = currentValue;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String style = (String) component.getAttributes().get("style");
+        String styleClass = (String) component.getAttributes().get("styleClass");
+        String lang = (String) component.getAttributes().get("lang");
+        String dir = (String) component.getAttributes().get("dir");
+        String title = (String) component.getAttributes().get("title");
+        boolean wroteSpan = false;
+        if (styleClass != null
+             || style != null
+             || dir != null
+             || lang != null
+             || title != null
+             || shouldWriteIdAttribute(component)) {
+            writer.startElement("span", component);
+            writeIdAttributeIfNecessary(context, writer, component);
+            wroteSpan = true;
+
+            if (style != null) {
+                writer.writeAttribute("style", style, "style");
+            }
+            if (null != styleClass) {
+                writer.writeAttribute("class", styleClass, "styleClass");
+            }
+            if (dir != null) {
+                writer.writeAttribute("dir", dir, "dir");
+            }
+            if (lang != null) {
+                writer.writeAttribute(RenderKitUtils.prefixAttribute("lang", writer),
+                                      lang,
+                                      "lang");
+            }
+            if (title != null) {
+                writer.writeAttribute("title", title, "title");
+            }
+        }
+
+        Object val = component.getAttributes().get("escape");
+        boolean escape = (val != null) && Boolean.valueOf(val.toString());
+        
+        if (escape) {
+            writer.writeText(message, component, "value");
+        } else {
+            writer.write(message);
+        }
+        if (wroteSpan) {
+            writer.endElement("span");
+        }
+
+    }
+
+} // end of class OutputMessageRenderer
diff --git a/com/sun/faces/renderkit/html_basic/PassthroughRenderer.java b/com/sun/faces/renderkit/html_basic/PassthroughRenderer.java
new file mode 100644
index 0000000..12e3cb6
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/PassthroughRenderer.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.renderkit.html_basic;
+
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+
+public class PassthroughRenderer extends HtmlBasicRenderer {
+
+// We are purposely piggy backing off the PANELGROUP attributes since they are 
+// identical for this renderer.
+private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.PANELGROUP);
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+            throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        Map<String, Object> attrs = component.getPassThroughAttributes();
+        String localName = (String) attrs.get(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY);
+        if (null == localName) {
+            String clientId = component.getClientId(context);
+            throw new FacesException("Unable to determine localName for component with clientId " + clientId);
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        writer.startElement(localName, component);
+
+        writeIdAttributeIfNecessary(context, writer, component);
+        
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+
+    }
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncodeChildren(component)) {
+            return;
+        }
+
+        // Render our children recursively
+        Iterator<UIComponent> kids = getChildren(component);
+        while (kids.hasNext()) {
+            encodeRecursive(context, kids.next());
+        }
+
+    }
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        Map<String, Object> attrs = component.getPassThroughAttributes();
+        String localName = (String) attrs.get(Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY);
+        context.getResponseWriter().endElement(localName);
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/RadioRenderer.java b/com/sun/faces/renderkit/html_basic/RadioRenderer.java
new file mode 100644
index 0000000..786e0ec
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/RadioRenderer.java
@@ -0,0 +1,229 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// RadioRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.RequestStateManager;
+
+import javax.el.ELException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UINamingContainer;
+import javax.faces.component.UISelectOne;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
+import javax.faces.model.SelectItem;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.io.IOException;
+
+/**
+ * <B>ReadoRenderer</B> is a class that renders the current value of
+ * <code>UISelectOne<code> or <code>UISelectMany<code> component as a list of
+ * radio buttons
+ */
+
+public class RadioRenderer extends SelectManyCheckboxListRenderer {
+
+    private static final Attribute[] ATTRIBUTES =
+            AttributeManager.getAttributes(AttributeManager.Key.SELECTONERADIO);
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected void renderOption(FacesContext context,
+                                UIComponent component,
+                                Converter converter,
+                                SelectItem curItem,
+                                Object currentSelections,
+                                Object[] submittedValues,
+                                boolean alignVertical,
+                                int itemNumber,
+                                OptionComponentInfo optionInfo) throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert (writer != null);
+
+        UISelectOne selectOne = (UISelectOne) component;
+        Object curValue = selectOne.getSubmittedValue();
+        if (curValue == null) {
+            curValue = selectOne.getValue();
+        }
+
+
+
+        Class type = String.class;
+        if (curValue != null) {
+            type = curValue.getClass();
+            if (type.isArray()) {
+                curValue = ((Object[]) curValue)[0];
+                if (null != curValue) {
+                    type = curValue.getClass();
+                }
+            } else if (Collection.class.isAssignableFrom(type)) {
+                Iterator valueIter = ((Collection) curValue).iterator();
+                if (null != valueIter && valueIter.hasNext()) {
+                    curValue = valueIter.next();
+                    if (null != curValue) {
+                        type = curValue.getClass();
+                    }
+                }
+            }
+        }
+        Object itemValue = curItem.getValue();
+        RequestStateManager.set(context,
+                RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
+                component);
+        Object newValue;
+        try {
+            newValue = context.getApplication().getExpressionFactory().
+                    coerceToType(itemValue, type);
+        } catch (ELException ele) {
+            newValue = itemValue;
+        } catch (IllegalArgumentException iae) {
+            // If coerceToType fails, per the docs it should throw
+            // an ELException, however, GF 9.0 and 9.0u1 will throw
+            // an IllegalArgumentException instead (see GF issue 1527).
+            newValue = itemValue;
+        }
+
+        boolean checked = null != newValue && newValue.equals(curValue);
+
+        if (optionInfo.isHideNoSelection()
+                && curItem.isNoSelectionOption()
+                && curValue != null
+                && !checked) {
+            return;
+        }
+
+        if (alignVertical) {
+            writer.writeText("\t", component, null);
+            writer.startElement("tr", component);
+            writer.writeText("\n", component, null);
+        }
+
+        String labelClass;
+        if (optionInfo.isDisabled() || curItem.isDisabled()) {
+            labelClass = optionInfo.getDisabledClass();
+        } else {
+            labelClass = optionInfo.getEnabledClass();
+        }
+        writer.startElement("td", component);
+        writer.writeText("\n", component, null);
+
+        writer.startElement("input", component);
+        writer.writeAttribute("type", "radio", "type");
+
+        if (checked) {
+            writer.writeAttribute("checked", Boolean.TRUE, null);
+        }
+        writer.writeAttribute("name", component.getClientId(context),
+                "clientId");
+        String idString = component.getClientId(context)
+                + UINamingContainer.getSeparatorChar(context)
+                + Integer.toString(itemNumber);
+        writer.writeAttribute("id", idString, "id");
+
+        writer.writeAttribute("value",
+                              (getFormattedValue(context, component,
+                                      curItem.getValue(), converter)),
+                              "value");
+
+        // Don't render the disabled attribute twice if the 'parent'
+        // component is already marked disabled.
+        if (!optionInfo.isDisabled()) {
+            if (curItem.isDisabled()) {
+                writer.writeAttribute("disabled", true, "disabled");
+            }
+        }
+        // Apply HTML 4.x attributes specified on UISelectMany component to all
+        // items in the list except styleClass and style which are rendered as
+        // attributes of outer most table.
+        RenderKitUtils.renderPassThruAttributes(context,
+                writer,
+                component,
+                ATTRIBUTES,
+                getNonOnClickSelectBehaviors(component));
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer,
+                component);
+
+        RenderKitUtils.renderSelectOnclick(context, component, false);
+
+
+        writer.endElement("input");
+        writer.startElement("label", component);
+        writer.writeAttribute("for", idString, "for");
+        // if enabledClass or disabledClass attributes are specified, apply
+        // it on the label.
+        if (labelClass != null) {
+            writer.writeAttribute("class", labelClass, "labelClass");
+        }
+        String itemLabel = curItem.getLabel();
+        if (itemLabel != null) {
+            writer.writeText(" ", component, null);
+            if (!curItem.isEscape()) {
+                // It seems the ResponseWriter API should
+                // have a writeText() with a boolean property
+                // to determine if it content written should
+                // be escaped or not.
+                writer.write(itemLabel);
+            } else {
+                writer.writeText(itemLabel, component, "label");
+            }
+        }
+        writer.endElement("label");
+        writer.endElement("td");
+        writer.writeText("\n", component, null);
+        if (alignVertical) {
+            writer.writeText("\t", component, null);
+            writer.endElement("tr");
+            writer.writeText("\n", component, null);
+        }
+    }
+
+
+} // end of class RadioRenderer
diff --git a/com/sun/faces/renderkit/html_basic/ScriptRenderer.java b/com/sun/faces/renderkit/html_basic/ScriptRenderer.java
new file mode 100644
index 0000000..e53cdcb
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/ScriptRenderer.java
@@ -0,0 +1,153 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.config.WebConfiguration;
+import java.io.IOException;
+import java.util.Map;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.application.Resource;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+/**
+ * <p>This <code>Renderer</code> handles the rendering of external <code>script</code>
+ * references.</p>
+ */
+public class ScriptRenderer extends ScriptStyleBaseRenderer {
+    
+    
+    @Override
+    protected void startElement(ResponseWriter writer, UIComponent component) throws IOException {
+        writer.startElement("script", component);
+        writer.writeAttribute("type", "text/javascript", "type");
+    }
+    
+    @Override
+    protected void endElement(ResponseWriter writer) throws IOException {
+        writer.endElement("script");
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        Map<String,Object> attributes = component.getAttributes();
+        Map<Object, Object> contextMap = context.getAttributes();
+
+        String name = (String) attributes.get("name");
+        String library = (String) attributes.get("library");
+
+        String key = name + library;
+        
+        if (null == name) {
+            return;
+        }
+        
+        // Ensure this script is not rendered more than once per request
+        if (contextMap.containsKey(key)) {
+            return;
+        }
+        contextMap.put(key, Boolean.TRUE);
+
+        // Special case of scripts that have query strings
+        // These scripts actually use their query strings internally, not externally
+        // so we don't need the resource to know about them
+        int queryPos = name.indexOf("?");
+        String query = null;
+        if (queryPos > -1 && name.length() > queryPos) {
+            query = name.substring(queryPos+1);
+            name = name.substring(0,queryPos);
+        }
+
+
+        Resource resource = context.getApplication().getResourceHandler()
+              .createResource(name, library);
+
+        ResponseWriter writer = context.getResponseWriter();
+        this.startElement(writer, component);
+
+        String resourceSrc = "RES_NOT_FOUND";
+        
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+        
+        if (library == null && name != null && 
+                name.startsWith(webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory))) {
+            
+            if (context.isProjectStage(ProjectStage.Development)) {
+            
+            String msg = "Illegal path, direct contract references are not allowed: " + name;
+            context.addMessage(component.getClientId(context),
+                               new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                msg,
+                                                msg));  
+            }
+            resource = null;
+        } 
+        
+        if (resource == null) {
+            
+            if (context.isProjectStage(ProjectStage.Development)) {
+                String msg = "Unable to find resource " + (library == null ? "" : library + ", ") + name;
+                context.addMessage(component.getClientId(context),
+                               new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                msg,
+                                                msg));
+            }
+            
+        } else {
+            resourceSrc = resource.getRequestPath();
+            if (query != null) {
+                resourceSrc = resourceSrc +
+                        ((resourceSrc.indexOf("?") > -1) ? "&" : "?") +
+                        query;
+            }
+            resourceSrc = context.getExternalContext().encodeResourceURL(resourceSrc);
+        }
+        
+        writer.writeURIAttribute("src", resourceSrc, "src");
+        this.endElement(writer);
+        super.encodeEnd(context, component);
+    }
+    
+}
diff --git a/com/sun/faces/renderkit/html_basic/ScriptStyleBaseRenderer.java b/com/sun/faces/renderkit/html_basic/ScriptStyleBaseRenderer.java
new file mode 100644
index 0000000..b8f5d7c
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/ScriptStyleBaseRenderer.java
@@ -0,0 +1,229 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.util.FacesLogger;
+
+import java.io.IOException;
+import java.util.Map;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.event.ListenerFor;
+
+/**
+ * <p>Base class for shared behavior between Script and Stylesheet renderers.
+ * Maybe composition would be better, but inheritance is easier</p>
+ */
+ at ListenerFor(systemEventClass=PostAddToViewEvent.class)
+public abstract class ScriptStyleBaseRenderer extends Renderer implements ComponentSystemEventListener {
+
+    private static final String COMP_KEY =
+          ScriptStyleBaseRenderer.class.getName() + "_COMPOSITE_COMPONENT";
+
+    // Log instance for this class
+    protected static final Logger logger = FacesLogger.RENDERKIT.getLogger();
+
+    /*
+     * Indicates that the component associated with this Renderer has already
+     * been added to the facet in the view.
+     */ 
+
+    /* When this method is called, we know that there is a component
+     * with a script renderer somewhere in the view.  We need to make it
+     * so that when an element with a name given by the value of the optional
+     * "target" component attribute is encountered, this component 
+     * can be called upon to render itself.
+     * This method will add the component (associated with this Renderer)
+     * to a facet in the view only if a "target" component attribute is set.
+     * 
+     */
+    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
+        UIComponent component = event.getComponent();
+        FacesContext context = FacesContext.getCurrentInstance();
+        
+        String target = verifyTarget((String) component.getAttributes().get("target"));
+        if (target != null) {
+            // We're checking for a composite component here as if the resource
+            // is relocated, it may still require it's composite component context
+            // in order to properly render.  Store it for later use by
+            // encodeBegin() and encodeEnd().
+            UIComponent cc = UIComponent.getCurrentCompositeComponent(context);
+            if (cc != null) {
+                component.getAttributes().put(COMP_KEY, cc.getClientId(context));
+            }
+            context.getViewRoot().addComponentResource(context, component, target);
+
+        }
+    }
+    
+    @Override
+    public final void decode(FacesContext context, UIComponent component) {
+        // no-op
+    }
+
+    @Override
+    public final boolean getRendersChildren() {
+        return true;
+    }
+
+
+    /**
+     * If overridden, this method (i.e. super.encodeEnd) should be called
+     * <em>last</em> within the overridding implementation.
+     */
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        // Remove the key to prevent issues with state saving...
+        String ccID = (String) component.getAttributes().get(COMP_KEY);
+        if (ccID != null) {
+            // the first pop maps to the component we're rendering.
+            // the second pop maps to the composite component that was pushed
+            // in this renderer's encodeBegin implementation.
+            // re-push the current component to reset the original context
+            component.popComponentFromEL(context);
+            component.popComponentFromEL(context);
+            component.pushComponentToEL(context, component);
+        }
+    }
+
+
+    /**
+     * If overridden, this method (i.e. super.encodeBegin) should be called
+     * <em>first</em> within the overridding implementation.
+     */
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        String ccID = (String) component.getAttributes().get(COMP_KEY);
+        if (null != ccID) {
+            UIComponent cc = context.getViewRoot().findComponent(':' + ccID);
+            UIComponent curCC = UIComponent.getCurrentCompositeComponent(context);
+            if (cc != curCC) {
+                // the first pop maps to the component we're rendering.
+                // push the composite component to the 'stack' and then re-push
+                // the component we're rendering so the current component is
+                // correct.
+                component.popComponentFromEL(context);
+                component.pushComponentToEL(context, cc);
+                component.pushComponentToEL(context, component);
+            }
+        }
+
+    }
+        
+    @Override
+    public final void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+        Map<String,Object> attributes = component.getAttributes();
+
+        String name = (String) attributes.get("name");
+        int childCount = component.getChildCount();
+        boolean renderChildren = (0 < childCount);
+        
+        // If we have no "name" attribute...
+        if (null == name) {
+            // and no child content...
+            if (0 == childCount) {
+                // this is user error, so put up a message if desired
+                if (context.isProjectStage(ProjectStage.Development)) {
+                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN,
+                            "outputScript with no library, no name, and no body content",
+                            "Is body content intended?");
+                    context.addMessage(component.getClientId(context), message);
+                }
+                // We have no children, but don't bother with the method 
+                // invocation anyway.
+                renderChildren = false;
+            }            
+        } else if (0 < childCount) {
+            // If we have a "name" and also have child content, ignore
+            // the child content and log a message.
+        	if (logger.isLoggable(Level.INFO)) {
+        		logger.info("outputScript with \"name\" attribute and nested content.  Ignoring nested content.");
+        	}
+            renderChildren = false;
+        }
+        if (renderChildren) {
+            ResponseWriter writer = context.getResponseWriter();
+            startElement(writer, component);
+            super.encodeChildren(context, component);
+            endElement(writer);
+        }
+        
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * <p>Allow the subclass to customize the start element content</p>
+     */
+    protected abstract void startElement(ResponseWriter writer, 
+                                         UIComponent component) throws IOException;
+    
+    /**
+     * <p>Allow the subclass to customize the start element content</p>
+     */
+    protected abstract void endElement(ResponseWriter writer) throws IOException;
+    
+    /**
+     * <p>Allow a subclass to control what's a valid value for "target".
+     */
+    protected String verifyTarget(String toVerify) {
+        return toVerify;
+    }
+
+}
diff --git a/com/sun/faces/renderkit/html_basic/SecretRenderer.java b/com/sun/faces/renderkit/html_basic/SecretRenderer.java
new file mode 100644
index 0000000..060a7d0
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/SecretRenderer.java
@@ -0,0 +1,137 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// SecretRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/**
+ * <B>SecretRenderer</B> is a class that renders the current value of
+ * <code>UIInput<code> component as a password field.
+ */
+
+public class SecretRenderer extends HtmlBasicInputRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.INPUTSECRET);
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected void getEndTextToRender(FacesContext context,
+                                      UIComponent component,
+                                      String currentValue)
+          throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String redisplay = String.valueOf(component.getAttributes().get("redisplay"));
+        if (redisplay == null || !redisplay.equals("true")) {
+            currentValue = "";
+        }
+
+        writer.startElement("input", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        writer.writeAttribute("type", "password", "type");
+        writer.writeAttribute("name", component.getClientId(context),
+                              "clientId");
+
+        String autoComplete = (String)
+              component.getAttributes().get("autocomplete");
+        if (autoComplete != null) {
+            // only output the autocomplete attribute if the value
+            // is 'off' since its lack of presence will be interpreted
+            // as 'on' by the browser
+            if ("off".equals(autoComplete)) {
+                writer.writeAttribute("autocomplete",
+                                      "off",
+                                      "autocomplete");
+            }
+        }
+
+        // render default text specified
+        if (currentValue != null) {
+            writer.writeAttribute("value", currentValue, "value");
+        }
+
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES,
+                                                getNonOnChangeBehaviors(component));
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+
+        RenderKitUtils.renderOnchange(context, component, false);
+
+        String styleClass;
+        if (null != (styleClass = (String)
+              component.getAttributes().get("styleClass"))) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+
+        writer.endElement("input");
+
+    }
+
+} // end of class SecretRenderer
diff --git a/com/sun/faces/renderkit/html_basic/SelectManyCheckboxListRenderer.java b/com/sun/faces/renderkit/html_basic/SelectManyCheckboxListRenderer.java
new file mode 100644
index 0000000..43be0b2
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/SelectManyCheckboxListRenderer.java
@@ -0,0 +1,436 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/**
+ *
+ * (C) Copyright International Business Machines Corp., 2001,2002
+ * The source code for this program is not published or otherwise
+ * divested of its trade secrets, irrespective of what has been
+ * deposited with the U. S. Copyright Office.   
+ */
+
+// SelectManyCheckboxListRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.ValueHolder;
+import javax.faces.component.UINamingContainer;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
+import javax.faces.model.SelectItem;
+import javax.faces.model.SelectItemGroup;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.RequestStateManager;
+
+/**
+ * <B>SelectManyCheckboxListRenderer</B> is a class that renders the
+ * current value of <code>UISelectMany<code> component as a list of checkboxes.
+ */
+
+public class SelectManyCheckboxListRenderer extends MenuRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.SELECTMANYCHECKBOX);
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String alignStr;
+        Object borderObj;
+        boolean alignVertical = false;
+        int border = 0;
+
+        if (null !=
+            (alignStr = (String) component.getAttributes().get("layout"))) {
+            alignVertical = alignStr.equalsIgnoreCase("pageDirection");
+        }
+        if (null != (borderObj = component.getAttributes().get("border"))) {
+            border = (Integer) borderObj;
+        }
+
+        Converter converter = null;
+        if(component instanceof ValueHolder) {
+            converter = ((ValueHolder)component).getConverter();
+        }
+
+        renderBeginText(component, border, alignVertical, context, true);
+
+        Iterator<SelectItem> items =
+              RenderKitUtils.getSelectItems(context, component);
+
+        Object currentSelections = getCurrentSelectedValues(component);
+        Object[] submittedValues = getSubmittedSelectedValues(component);
+        Map<String,Object> attributes = component.getAttributes();
+        OptionComponentInfo optionInfo =
+              new OptionComponentInfo((String) attributes.get("disabledClass"),
+                                      (String) attributes.get("enabledClass"),
+                                      (String) attributes.get("unselectedClass"),
+                                      (String) attributes.get("selectedClass"),
+                                      Util.componentIsDisabled(component),
+                                      isHideNoSelection(component));
+        int idx = -1;
+        while (items.hasNext()) {
+            SelectItem curItem = items.next();
+            idx++;
+            // If we come across a group of options, render them as a nested
+            // table.
+            if (curItem instanceof SelectItemGroup) {
+                // write out the label for the group.
+                if (curItem.getLabel() != null) {
+                    if (alignVertical) {
+                        writer.startElement("tr", component);
+                    }
+                    writer.startElement("td", component);
+                    writer.writeText(curItem.getLabel(), component, "label");
+                    writer.endElement("td");
+                    if (alignVertical) {
+                        writer.endElement("tr");
+                    }
+
+                }
+                if (alignVertical) {
+                    writer.startElement("tr", component);
+                }
+                writer.startElement("td", component);
+                writer.writeText("\n", component, null);
+                renderBeginText(component, 0, alignVertical,
+                                context, false);
+                // render options of this group.
+                SelectItem[] itemsArray =
+                      ((SelectItemGroup) curItem).getSelectItems();
+                for (int i = 0; i < itemsArray.length; ++i) {
+                    renderOption(context,
+                                 component,
+                                 converter,
+                                 itemsArray[i],
+                                 currentSelections,
+                                 submittedValues,
+                                 alignVertical,
+                                 i,
+                                 optionInfo);
+                }
+                renderEndText(component, alignVertical, context);
+                writer.endElement("td");
+                if (alignVertical) {
+                    writer.endElement("tr");
+                    writer.writeText("\n", component, null);
+                }
+            } else {
+                renderOption(context,
+                             component,
+                             converter,
+                             curItem,
+                             currentSelections,
+                             submittedValues,
+                             alignVertical,
+                             idx,
+                             optionInfo);
+            }
+        }
+
+        renderEndText(component, alignVertical, context);
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * We override isBehaviorSource since the ID of the activated check box
+     * will have been augmented with the option number.
+     *
+     * @see HtmlBasicRenderer#isBehaviorSource(FacesContext, String, String)
+     */
+    @Override
+    protected boolean isBehaviorSource(FacesContext ctx,
+                                       String behaviorSourceId,
+                                       String componentClientId) {
+
+        if (behaviorSourceId == null) {
+            return false;
+        }
+        char sepChar = UINamingContainer.getSeparatorChar(ctx);
+        String actualBehaviorId;
+        if (behaviorSourceId.lastIndexOf(sepChar) != -1) { 
+            actualBehaviorId = behaviorSourceId.substring(0, behaviorSourceId.lastIndexOf(sepChar));
+        } else {
+            actualBehaviorId = behaviorSourceId;
+        }
+        
+        return (actualBehaviorId.equals(componentClientId));
+
+    }
+
+
+    protected void renderBeginText(UIComponent component, int border,
+                                   boolean alignVertical, FacesContext context,
+                                   boolean outerTable)
+          throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        writer.startElement("table", component);
+        if (border != Integer.MIN_VALUE) {
+            writer.writeAttribute("border", border, "border");
+        }
+
+        // render style and styleclass attribute on the outer table instead of 
+        // rendering it as pass through attribute on every option in the list.
+        if (outerTable) {
+            // render "id" only for outerTable.
+            if (shouldWriteIdAttribute(component)) {
+                writeIdAttributeIfNecessary(context, writer, component);
+            }
+            String styleClass = (String) component.getAttributes().get(
+                  "styleClass");
+            String style = (String) component.getAttributes().get("style");
+            if (styleClass != null) {
+                writer.writeAttribute("class", styleClass, "class");
+            }
+            if (style != null) {
+                writer.writeAttribute("style", style, "style");
+            }
+        }
+        writer.writeText("\n", component, null);
+
+        if (!alignVertical) {
+            writer.writeText("\t", component, null);
+            writer.startElement("tr", component);
+            writer.writeText("\n", component, null);
+        }
+
+    }
+
+
+    protected void renderEndText(UIComponent component,
+                                 boolean alignVertical,
+                                 FacesContext context)
+          throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        if (!alignVertical) {
+            writer.writeText("\t", component, null);
+            writer.endElement("tr");
+            writer.writeText("\n", component, null);
+        }
+        writer.endElement("table");
+
+    }
+
+
+    protected void renderOption(FacesContext context,
+                                UIComponent component,
+                                Converter converter,
+                                SelectItem curItem,
+                                Object currentSelections,
+                                Object[] submittedValues,
+                                boolean alignVertical,
+                                int itemNumber,
+                                OptionComponentInfo optionInfo) throws IOException {
+
+
+        String valueString = getFormattedValue(context, component,
+                                               curItem.getValue(), converter);
+
+        Object valuesArray;
+        Object itemValue;
+        if (submittedValues != null) {
+            valuesArray = submittedValues;
+            itemValue = valueString;
+        } else {
+            valuesArray = currentSelections;
+            itemValue = curItem.getValue();
+        }
+
+        RequestStateManager.set(context,
+                                RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
+                                component);
+
+        boolean isSelected = isSelected(context, component, itemValue, valuesArray, converter);
+        if (optionInfo.isHideNoSelection()
+                && curItem.isNoSelectionOption()
+                && currentSelections != null
+                && !isSelected) {
+            return;
+        }
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert (writer != null);
+
+        if (alignVertical) {
+            writer.writeText("\t", component, null);
+            writer.startElement("tr", component);
+            writer.writeText("\n", component, null);
+        }
+        writer.startElement("td", component);
+        writer.writeText("\n", component, null);
+
+        writer.startElement("input", component);
+        writer.writeAttribute("name", component.getClientId(context),
+                              "clientId");
+        String idString = component.getClientId(context)
+                          + UINamingContainer.getSeparatorChar(context)
+                          + Integer.toString(itemNumber);
+        writer.writeAttribute("id", idString, "id");
+
+        writer.writeAttribute("value", valueString, "value");
+        writer.writeAttribute("type", "checkbox", null);
+
+        if (isSelected) {
+            writer.writeAttribute(getSelectedTextString(), Boolean.TRUE, null);
+        }
+
+        // Don't render the disabled attribute twice if the 'parent'
+        // component is already marked disabled.
+        if (!optionInfo.isDisabled()) {
+            if (curItem.isDisabled()) {
+                writer.writeAttribute("disabled", true, "disabled");
+            }
+        }
+
+        // Apply HTML 4.x attributes specified on UISelectMany component to all
+        // items in the list except styleClass and style which are rendered as
+        // attributes of outer most table.
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES,
+                                                getNonOnClickSelectBehaviors(component));
+
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+        
+        RenderKitUtils.renderSelectOnclick(context, component, false);
+
+        writer.endElement("input");
+        writer.startElement("label", component);
+        writer.writeAttribute("for", idString, "for");
+
+        // Set up the label's class, if appropriate
+        StringBuilder labelClass = new StringBuilder();
+        String style;
+        // If disabledClass or enabledClass set, add it to the label's class
+        if (optionInfo.isDisabled() || curItem.isDisabled()) {
+            style = optionInfo.getDisabledClass();
+        } else {  // enabled
+            style = optionInfo.getEnabledClass();
+        }
+        if (style != null) {
+            labelClass.append(style);
+        }
+        // If selectedClass or unselectedClass set, add it to the label's class
+        if (isSelected(context, component, itemValue, valuesArray, converter)) {
+            style = optionInfo.getSelectedClass();
+        } else { // not selected
+            style = optionInfo.getUnselectedClass();
+        }
+        if (style != null) {
+            if (labelClass.length() > 0) {
+                labelClass.append(' ');
+            }
+            labelClass.append(style);
+        }
+        writer.writeAttribute("class", labelClass.toString(), "labelClass");
+        String itemLabel = curItem.getLabel();
+        if (itemLabel == null) {
+            itemLabel = valueString;
+        }
+        writer.writeText(" ", component, null);
+        if (!curItem.isEscape()) {
+            // It seems the ResponseWriter API should
+            // have a writeText() with a boolean property
+            // to determine if it content written should
+            // be escaped or not.
+            writer.write(itemLabel);
+        } else {
+            writer.writeText(itemLabel, component, "label");
+        }
+//        if (isSelected(context, component, itemValue, valuesArray, converter)) {
+//            
+//        } else { // not selected
+//            
+//        }
+        writer.endElement("label");
+        writer.endElement("td");
+        writer.writeText("\n", component, null);
+        if (alignVertical) {
+            writer.writeText("\t", component, null);
+            writer.endElement("tr");
+            writer.writeText("\n", component, null);
+        }
+    }
+
+
+    // ------------------------------------------------- Package Private Methods
+
+
+    String getSelectedTextString() {
+
+        return "checked";
+
+    }
+
+} // end of class SelectManyCheckboxListRenderer
diff --git a/com/sun/faces/renderkit/html_basic/StylesheetRenderer.java b/com/sun/faces/renderkit/html_basic/StylesheetRenderer.java
new file mode 100644
index 0000000..e4cf956
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/StylesheetRenderer.java
@@ -0,0 +1,140 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+import com.sun.faces.config.WebConfiguration;
+import java.io.IOException;
+import java.util.Map;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.application.Resource;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+/**
+ * <p>This <code>Renderer</code> handles the rendering of external <code>stylesheet</code>
+ * references.</p>
+ */
+public class StylesheetRenderer extends ScriptStyleBaseRenderer {
+
+
+    @Override
+    protected void startElement(ResponseWriter writer, UIComponent component) throws IOException {
+        writer.startElement("style", component);
+        writer.writeAttribute("type", "text/css", "type");
+    }
+    
+    @Override
+    protected void endElement(ResponseWriter writer) throws IOException {
+        writer.endElement("style");
+    }
+
+    @Override
+    protected String verifyTarget(String toVerify) {
+        return "head";
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        Map<String,Object> attributes = component.getAttributes();
+        Map<Object, Object> contextMap = context.getAttributes();
+
+        String name = (String) attributes.get("name");
+        String library = (String) attributes.get("library");
+        String key = name + library;
+
+        String media = (String) attributes.get("media");
+        
+        if (null == name) {
+            return;
+        }
+        
+        // Ensure this stylesheet is not rendered more than once per request
+        if (contextMap.containsKey(key)) {
+            return;
+        }
+        contextMap.put(key, Boolean.TRUE);
+        
+        Resource resource = context.getApplication().getResourceHandler()
+              .createResource(name, library);
+
+        ResponseWriter writer = context.getResponseWriter();
+        writer.startElement("link", component);
+        writer.writeAttribute("type", "text/css", "type");
+        writer.writeAttribute("rel", "stylesheet", "rel");
+
+        String resourceUrl = "RES_NOT_FOUND";
+
+        WebConfiguration webConfig = WebConfiguration.getInstance();
+
+        if (library == null 
+                && name.startsWith(webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.WebAppContractsDirectory))
+                && context.isProjectStage(ProjectStage.Development)) {
+            String msg = "Illegal path, direct contract references are not allowed: " + name;
+            context.addMessage(component.getClientId(context),
+                               new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                msg,
+                                                msg));                
+            resource = null;
+        }
+        
+        if (resource != null) {
+        	resourceUrl = context.getExternalContext().encodeResourceURL(resource.getRequestPath());
+        } else if (context.isProjectStage(ProjectStage.Development)) {
+            String msg = "Unable to find resource " + (library == null ? "" : library + ", ") + name;
+            context.addMessage(component.getClientId(context),
+                               new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                msg,
+                                                msg));
+        }
+        
+        writer.writeURIAttribute("href", resourceUrl, "href");
+        if (media != null) {
+            writer.writeAttribute("media", media, "media");
+        }
+        writer.endElement("link");
+        super.encodeEnd(context, component);
+    }
+}
diff --git a/com/sun/faces/renderkit/html_basic/TableRenderer.java b/com/sun/faces/renderkit/html_basic/TableRenderer.java
new file mode 100644
index 0000000..1f32b6e
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/TableRenderer.java
@@ -0,0 +1,452 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.renderkit.html_basic;
+
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import javax.faces.component.UIColumn;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+/** <p>Render a {@link UIData} component as a two-dimensional table.</p> */
+
+public class TableRenderer extends BaseTableRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.DATATABLE);
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        UIData data = (UIData) component;
+        data.setRowIndex(-1);
+
+        // Render the beginning of the table
+        ResponseWriter writer = context.getResponseWriter();
+
+        renderTableStart(context, component, writer, ATTRIBUTES);
+
+        // Render the caption (if any)
+        renderCaption(context, data, writer);
+
+        // Render column groups (if any)
+        renderColumnGroups(context, data);
+
+        // Render the header facets (if any)
+        renderHeader(context, component, writer);
+
+        // Render the footer facets (if any)
+        renderFooter(context, component, writer);
+
+    }
+
+
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncodeChildren(component)) {
+            return;
+        }
+
+        UIData data = (UIData) component;
+
+        ResponseWriter writer = context.getResponseWriter();
+        
+        // Check if any columns are being rendered, if not
+        // render the minimal markup and exit
+        TableMetaInfo info = getMetaInfo(context, data);
+        if(info.columns.isEmpty()) {
+        	renderEmptyTableBody(writer,data);
+        	return;
+        }
+        // Iterate over the rows of data that are provided
+        int processed = 0;
+        int rowIndex = data.getFirst() - 1;
+        int rows = data.getRows();
+        List<Integer> bodyRows = getBodyRows(context.getExternalContext().getApplicationMap(), data);
+        boolean hasBodyRows = (bodyRows != null && !bodyRows.isEmpty());
+        boolean wroteTableBody = false;
+        if (!hasBodyRows) {
+            renderTableBodyStart(context, component, writer);
+        }
+        boolean renderedRow = false;
+        while (true) {
+
+            // Have we displayed the requested number of rows?
+            if ((rows > 0) && (++processed > rows)) {
+                break;
+            }
+            // Select the current row
+            data.setRowIndex(++rowIndex);
+            if (!data.isRowAvailable()) {
+                break; // Scrolled past the last row
+            }
+
+            // render any table body rows
+            if (hasBodyRows && bodyRows.contains(data.getRowIndex())) {
+                if (wroteTableBody) {
+                    writer.endElement("tbody");
+                }
+                writer.startElement("tbody", data);
+                wroteTableBody = true;
+            }
+
+            // Render the beginning of this row
+            renderRowStart(context, component, writer);
+
+            // Render the row content
+            renderRow(context, component, null, writer);
+
+            // Render the ending of this row
+            renderRowEnd(context, component, writer);
+            renderedRow = true;
+
+        }
+
+        // fill an empty tbody, if no row has been rendered
+        if(!renderedRow) {
+        	this.renderEmptyTableRow(writer, data);
+        }
+        renderTableBodyEnd(context, component, writer);
+
+        // Clean up after ourselves
+        data.setRowIndex(-1);
+
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncode(component)) {
+            return;
+        }
+
+        clearMetaInfo(context, component);
+        ((UIData) component).setRowIndex(-1);
+
+        // Render the ending of this table
+        renderTableEnd(context, component, context.getResponseWriter());
+
+    }
+
+    @Override
+    public boolean getRendersChildren() {
+
+        return true;
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    private List<Integer> getBodyRows(Map<String, Object> appMap, UIData data) {
+
+        List<Integer> result = null;
+        String bodyRows = (String) data.getAttributes().get("bodyrows");
+        if (bodyRows != null) {
+            String [] rows = Util.split(appMap, bodyRows, ",");
+            if (rows != null) {
+                result = new ArrayList<Integer>(rows.length);
+                for (String curRow : rows) {
+                    result.add(Integer.valueOf(curRow));
+                }
+            }
+        }
+
+        return result;
+
+     }
+
+
+    protected void renderColumnGroups(FacesContext context,
+                                      UIComponent table)
+          throws IOException {
+
+        UIComponent colGroups = getFacet(table, "colgroups");
+        if (colGroups != null) {
+            encodeRecursive(context, colGroups);
+        }
+
+    }
+
+    protected void renderFooter(FacesContext context,
+                                UIComponent table,
+                                ResponseWriter writer)
+          throws IOException {
+
+        TableMetaInfo info = getMetaInfo(context, table);
+        UIComponent footer = getFacet(table, "footer");
+        // check if any footer has to be rendered
+        if (footer == null && !info.hasFooterFacets) {
+            return;
+        }
+        String footerClass = (String) table.getAttributes().get("footerClass");
+        writer.startElement("tfoot", table);
+        writer.writeText("\n", table, null);
+        if (info.hasFooterFacets) {
+            writer.startElement("tr", table);
+            writer.writeText("\n", table, null);
+            for (UIColumn column : info.columns) {
+                String columnFooterClass =
+                      (String) column.getAttributes().get("footerClass");
+                writer.startElement("td", column);
+                if (columnFooterClass != null) {
+                    writer.writeAttribute("class", columnFooterClass,
+                                          "columnFooterClass");
+                } else if (footerClass != null) {
+                    writer.writeAttribute("class", footerClass, "footerClass");
+                }
+                UIComponent facet = getFacet(column, "footer");
+                if (facet != null) {
+                    writer.writeText("", table, null);
+                    encodeRecursive(context, facet);
+                }
+                writer.endElement("td");
+                writer.writeText("\n", table, null);
+            }
+            renderRowEnd(context, table, writer);
+        }
+        if (footer != null) {
+            writer.startElement("tr", footer);
+            writer.startElement("td", footer);
+            if (footerClass != null) {
+                writer.writeAttribute("class", footerClass, "footerClass");
+            }
+            if(info.columns.size()>1) {
+            	writer.writeAttribute("colspan", String.valueOf(info.columns.size()), null);
+            }
+            encodeRecursive(context, footer);
+            writer.endElement("td");
+            renderRowEnd(context, table, writer);
+        }
+        writer.endElement("tfoot");
+        writer.writeText("\n", table, null);
+
+    }
+
+    protected void renderHeader(FacesContext context,
+                                UIComponent table,
+                                ResponseWriter writer)
+    throws IOException {
+
+        TableMetaInfo info = getMetaInfo(context, table);
+        UIComponent header = getFacet(table, "header");
+        // check if any header has to be rendered
+        if(header==null && !info.hasHeaderFacets) {
+        	return;
+        }
+        String headerClass = (String) table.getAttributes().get("headerClass");
+        writer.startElement("thead", table);
+        writer.writeText("\n", table, null);
+        if (header != null) {
+            writer.startElement("tr", header);
+            writer.startElement("th", header);
+            if (headerClass != null) {
+                writer.writeAttribute("class", headerClass, "headerClass");
+            }
+            if(info.columns.size()>1) {
+            	writer.writeAttribute("colspan", String.valueOf(info.columns.size()), null);
+            }
+            writer.writeAttribute("scope", "colgroup", null);
+            encodeRecursive(context, header);
+            writer.endElement("th");
+            renderRowEnd(context, table, writer);
+        }
+        if (info.hasHeaderFacets) {
+            writer.startElement("tr", table);
+            writer.writeText("\n", table, null);
+            for (UIColumn column : info.columns) {
+                String columnHeaderClass =
+                      (String) column.getAttributes().get("headerClass");
+                writer.startElement("th", column);
+                if (columnHeaderClass != null) {
+                    writer.writeAttribute("class", columnHeaderClass,
+                                          "columnHeaderClass");
+                } else if (headerClass != null) {
+                    writer.writeAttribute("class", headerClass, "headerClass");
+                }
+                writer.writeAttribute("scope", "col", null);
+                UIComponent facet = getFacet(column, "header");
+                if (facet != null) {
+                    encodeRecursive(context, facet);
+                }
+                writer.endElement("th");
+                writer.writeText("\n", table, null);
+            }
+            renderRowEnd(context, table, writer);
+        }
+        writer.endElement("thead");
+        writer.writeText("\n", table, null);
+
+    }
+
+
+    protected void renderRow(FacesContext context,
+                             UIComponent table,
+                             UIComponent child,
+                             ResponseWriter writer) throws IOException {
+
+        // Iterate over the child UIColumn components for each row
+        TableMetaInfo info = getMetaInfo(context, table);
+        info.newRow();
+        for (UIColumn column : info.columns) {
+
+            // Render the beginning of this cell
+            boolean isRowHeader = false;
+            Object rowHeaderValue = column.getAttributes().get("rowHeader");
+            if (null != rowHeaderValue ) {
+                isRowHeader = Boolean.valueOf(rowHeaderValue.toString());
+            }
+            if (isRowHeader) {
+                writer.startElement("th", column);
+                writer.writeAttribute("scope", "row", null);
+            } else {
+                writer.startElement("td", column);
+            }
+
+            String columnClass = info.getCurrentColumnClass();
+            if (columnClass != null) {
+                writer.writeAttribute("class",
+                                      columnClass,
+                                      "columnClasses");
+            }
+
+            // Render the contents of this cell by iterating over
+            // the kids of our kids
+            for (Iterator<UIComponent> gkids = getChildren(column);
+                 gkids.hasNext();) {
+                encodeRecursive(context, gkids.next());
+            }
+
+            // Render the ending of this cell
+            if (isRowHeader) {
+                writer.endElement("th");
+            } else {
+                writer.endElement("td");
+            }
+            writer.writeText("\n", table, null);
+
+        }
+
+    }
+
+
+    // ------------------------------------------------------- Private Methods
+        
+    private void renderEmptyTableBody(final ResponseWriter writer, 
+    								  final UIComponent component) 
+    		throws IOException {
+    	
+    	writer.startElement("tbody", component);
+    	this.renderEmptyTableRow(writer, component);
+    	writer.endElement("tbody");
+    
+    }
+    
+    private void renderEmptyTableRow(final ResponseWriter writer, 
+    							     final UIComponent component) 
+    		throws IOException {
+    	
+    	writer.startElement("tr", component);
+        List<UIColumn> columns = getColumns(component);
+        for (UIColumn column : columns) {
+            if (column.isRendered()) {
+                writer.startElement("td", component);
+                writer.endElement("td");
+            }
+        }
+    	writer.endElement("tr");
+    }
+
+    /**
+     * <p>Return an Iterator over the <code>UIColumn</code> children of the
+     * specified <code>UIData</code> that have a <code>rendered</code> property
+     * of <code>true</code>.</p>
+     *
+     * @param table the table from which to extract children
+     *
+     * @return the List of all UIColumn children
+     */
+    private List<UIColumn> getColumns(UIComponent table) {
+        int childCount = table.getChildCount();
+        if (childCount > 0) {
+            List<UIColumn> results =
+                  new ArrayList<UIColumn>(childCount);
+            for (UIComponent kid : table.getChildren()) {
+                if ((kid instanceof UIColumn) && kid.isRendered()) {
+                    results.add((UIColumn) kid);
+                }
+            }
+            return results;
+        } else {
+            return Collections.emptyList();
+        }
+    }
+}
diff --git a/com/sun/faces/renderkit/html_basic/TextRenderer.java b/com/sun/faces/renderkit/html_basic/TextRenderer.java
new file mode 100644
index 0000000..b0b0b04
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/TextRenderer.java
@@ -0,0 +1,225 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// TextRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+
+import javax.faces.component.html.HtmlInputFile; // FILE_UPLOAD
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+import com.sun.faces.config.WebConfiguration;
+import java.util.Map;
+
+/**
+ * <B>TextRenderer</B> is a class that renders the current value of
+ * <code>UIInput<code> or <code>UIOutput<code> component as a input field or
+ * static text.
+ */
+public class TextRenderer extends HtmlBasicInputRenderer {
+
+
+    private static final Attribute[] INPUT_ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.INPUTTEXT);
+    private static final Attribute[] OUTPUT_ATTRIBUTES = 
+          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTTEXT);
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected void getEndTextToRender(FacesContext context,
+                                      UIComponent component,
+                                      String currentValue)
+          throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+        boolean shouldWriteIdAttribute = false;
+        boolean isOutput = false;
+
+        String style = (String) component.getAttributes().get("style");
+        String styleClass = (String) component.getAttributes().get("styleClass");
+        String dir = (String) component.getAttributes().get("dir");
+        String lang = (String) component.getAttributes().get("lang");
+        String title = (String) component.getAttributes().get("title");
+        Map<String, Object> passthroughAttributes = component.getPassThroughAttributes(false);
+        boolean hasPassthroughAttributes = null != passthroughAttributes && !passthroughAttributes.isEmpty();
+        if (component instanceof UIInput) {
+            writer.startElement("input", component);
+            writeIdAttributeIfNecessary(context, writer, component);
+            
+            if (component instanceof HtmlInputFile) {
+                writer.writeAttribute("type", "file", null);
+            }
+            else {
+                writer.writeAttribute("type", "text", null);
+            }
+            writer.writeAttribute("name", (component.getClientId(context)),
+                                  "clientId");
+
+            // only output the autocomplete attribute if the value
+            // is 'off' since its lack of presence will be interpreted
+            // as 'on' by the browser
+            if ("off".equals(component.getAttributes().get("autocomplete"))) {
+                writer.writeAttribute("autocomplete",
+                                      "off",
+                                      "autocomplete");
+            }
+
+            // render default text specified
+            if (currentValue != null) {
+                writer.writeAttribute("value", currentValue, "value");
+            }
+            if (null != styleClass) {
+                writer.writeAttribute("class", styleClass, "styleClass");
+            }
+
+            // style is rendered as a passthur attribute
+            RenderKitUtils.renderPassThruAttributes(context,
+                                                    writer,
+                                                    component,
+                                                    INPUT_ATTRIBUTES,
+                                                    getNonOnChangeBehaviors(component));
+            RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+
+            RenderKitUtils.renderOnchange(context, component, false);
+
+
+            writer.endElement("input");
+
+        } else if (isOutput = (component instanceof UIOutput)) {
+            if (styleClass != null
+                 || style != null
+                 || dir != null
+                 || lang != null
+                 || title != null
+                 || hasPassthroughAttributes
+                 || (shouldWriteIdAttribute = shouldWriteIdAttribute(component))) {
+                writer.startElement("span", component);
+                writeIdAttributeIfNecessary(context, writer, component);
+                if (null != styleClass) {
+                    writer.writeAttribute("class", styleClass, "styleClass");
+                }
+                // style is rendered as a passthru attribute
+                RenderKitUtils.renderPassThruAttributes(context,
+                                                        writer,
+                                                        component,
+                                                        OUTPUT_ATTRIBUTES);
+
+            }
+            if (currentValue != null) {
+                Object val = component.getAttributes().get("escape");
+                if ((val != null) && Boolean.valueOf(val.toString())) {
+                    writer.writeText(currentValue, component, "value");
+                } else {
+                    writer.write(currentValue);
+                }
+            }
+        }
+        if (isOutput && (styleClass != null
+                 || style != null
+                 || dir != null
+                 || lang != null
+                 || title != null
+                 || hasPassthroughAttributes
+                 || (shouldWriteIdAttribute))) {
+            writer.endElement("span");
+        }
+
+    }
+
+
+    @Override
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+          throws IOException {
+
+        boolean renderChildren = WebConfiguration.getInstance()
+                .isOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.AllowTextChildren);
+
+        if (!renderChildren) {
+            return;
+        }
+
+        rendererParamsNotNull(context, component);
+
+        if (!shouldEncodeChildren(component)) {
+            return;
+        }
+
+        if (component.getChildCount() > 0) {
+            for (UIComponent kid : component.getChildren()) {
+                encodeRecursive(context, kid);
+            }
+        }
+
+    }
+
+    // The testcase for this class is TestRenderers_2.java
+
+} // end of class TextRenderer
+
+
diff --git a/com/sun/faces/renderkit/html_basic/TextareaRenderer.java b/com/sun/faces/renderkit/html_basic/TextareaRenderer.java
new file mode 100644
index 0000000..4ceb145
--- /dev/null
+++ b/com/sun/faces/renderkit/html_basic/TextareaRenderer.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// TextareaRenderer.java
+
+package com.sun.faces.renderkit.html_basic;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import com.sun.faces.renderkit.Attribute;
+import com.sun.faces.renderkit.AttributeManager;
+import com.sun.faces.renderkit.RenderKitUtils;
+
+/**
+ * <B>TextareaRenderer</B> is a class that renders the current value of
+ * <code>UIInput<code> component as a Textarea.
+ */
+
+public class TextareaRenderer extends HtmlBasicInputRenderer {
+
+
+    private static final Attribute[] ATTRIBUTES =
+          AttributeManager.getAttributes(AttributeManager.Key.INPUTTEXTAREA);
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+          throws IOException {
+
+        rendererParamsNotNull(context, component);
+
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    @Override
+    protected void getEndTextToRender(FacesContext context,
+                                      UIComponent component,
+                                      String currentValue) throws IOException {
+
+        ResponseWriter writer = context.getResponseWriter();
+        assert(writer != null);
+
+        String styleClass =
+              (String) component.getAttributes().get("styleClass");
+
+        writer.startElement("textarea", component);
+        writeIdAttributeIfNecessary(context, writer, component);
+        writer.writeAttribute("name", component.getClientId(context),
+                              "clientId");
+        if (null != styleClass) {
+            writer.writeAttribute("class", styleClass, "styleClass");
+        }
+
+        // style is rendered as a passthru attribute
+        RenderKitUtils.renderPassThruAttributes(context,
+                                                writer,
+                                                component,
+                                                ATTRIBUTES);
+        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
+
+        RenderKitUtils.renderOnchange(context, component, false);
+
+        if (component.getAttributes().containsKey("com.sun.faces.addNewLineAtStart") &&
+                "true".equalsIgnoreCase((String) component.getAttributes().get("com.sun.faces.addNewLineAtStart"))) {
+            writer.writeText("\n", null);
+        }
+
+        // render default text specified
+        if (currentValue != null) {
+            writer.writeText(currentValue, component, "value");
+        }
+
+        writer.endElement("textarea");
+
+    }
+
+} // end of class TextareaRenderer
diff --git a/com/sun/faces/scripting/GroovySupportFilter.java b/com/sun/faces/scripting/GroovySupportFilter.java
new file mode 100644
index 0000000..314ee11
--- /dev/null
+++ b/com/sun/faces/scripting/GroovySupportFilter.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletContext;
+
+public class GroovySupportFilter implements Filter {
+
+    private ServletContext sc;
+    
+    private Filter delegate;
+
+    public void init(FilterConfig filterConfig) throws ServletException {
+        sc = filterConfig.getServletContext();
+        if (Util.isCDIAvailable(sc)) {
+            delegate = new WeldAwareGroovySupportFilter();
+        } else {
+            delegate = new NonWeldAwareGroovySupportFilter();
+        }
+        delegate.init(filterConfig);
+    }
+
+    public void doFilter(ServletRequest servletRequest,
+                         ServletResponse servletResponse,
+                         FilterChain filterChain)
+          throws IOException, ServletException {
+        delegate.doFilter(servletRequest, servletResponse, filterChain);        
+    }
+
+    public void destroy() {
+        delegate.destroy();
+    }
+    
+}
diff --git a/com/sun/faces/scripting/NonWeldAwareGroovySupportFilter.java b/com/sun/faces/scripting/NonWeldAwareGroovySupportFilter.java
new file mode 100644
index 0000000..00fbd82
--- /dev/null
+++ b/com/sun/faces/scripting/NonWeldAwareGroovySupportFilter.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting;
+
+import com.sun.faces.scripting.groovy.GroovyHelper;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletContext;
+
+class NonWeldAwareGroovySupportFilter implements Filter {
+
+    private boolean helperChecked;
+    private GroovyHelper helper;
+    private ServletContext sc;
+
+    public void init(FilterConfig filterConfig) throws ServletException {
+        sc = filterConfig.getServletContext();
+    }
+
+    public void doFilter(ServletRequest servletRequest,
+                         ServletResponse servletResponse,
+                         FilterChain filterChain)
+          throws IOException, ServletException {
+
+        if (!helperChecked) {
+            helper = GroovyHelper.getCurrentInstance(sc);
+            // if null at this point, it will be null for the remainder
+            // of the app.  Set a flag so that we don't continually hit
+            // the ServletContext looking up the helper.
+            helperChecked = true;
+        }
+        if (helper != null) {
+            helper.setClassLoader();
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+        
+    }
+
+    public void destroy() {
+        // no-op
+    }
+    
+}
diff --git a/com/sun/faces/scripting/ScriptManager.java b/com/sun/faces/scripting/ScriptManager.java
new file mode 100644
index 0000000..1e65a1a
--- /dev/null
+++ b/com/sun/faces/scripting/ScriptManager.java
@@ -0,0 +1,50 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting;
+
+import java.util.Set;
+
+public interface ScriptManager {
+    /**
+     * This method should return all of the scripts available
+     */
+    Set<String> getScripts();
+}
diff --git a/com/sun/faces/scripting/WeldAwareGroovySupportFilter.java b/com/sun/faces/scripting/WeldAwareGroovySupportFilter.java
new file mode 100644
index 0000000..4dd0837
--- /dev/null
+++ b/com/sun/faces/scripting/WeldAwareGroovySupportFilter.java
@@ -0,0 +1,167 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting;
+
+import com.sun.faces.scripting.groovy.GroovyHelper;
+import java.io.IOException;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.servlet.Filter;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletContext;
+
+class WeldAwareGroovySupportFilter implements Filter {
+
+    private boolean helperChecked;
+    private GroovyHelper helper;
+    private ServletContext sc;
+    
+    private Class containerClass;
+    private Field instanceField;
+    private Method instanceMethod;
+    
+    private Class singletonClass;
+    private Method singletonSetMethod;
+
+    public void init(FilterConfig filterConfig) throws ServletException {
+        sc = filterConfig.getServletContext();
+        try {
+            obtainReflectionReferences();
+        } catch (Exception ex) {
+            throw new ServletException(ex);
+        }
+    }
+    
+    private void obtainReflectionReferences() throws Exception {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+        
+        containerClass = tccl.loadClass("org.jboss.weld.Container");
+        instanceField = containerClass.getDeclaredField("instance");
+        instanceField.setAccessible(true);
+        Class [] paramTypes = new Class[0];
+        instanceMethod = containerClass.getDeclaredMethod("instance", paramTypes);
+        instanceMethod.setAccessible(true);
+        
+        singletonClass = tccl.loadClass("org.jboss.weld.bootstrap.api.Singleton");
+        paramTypes = new Class[1];
+        paramTypes[0] = Object.class;
+        singletonSetMethod = singletonClass.getDeclaredMethod("set", paramTypes);
+        
+    }
+
+    public void doFilter(ServletRequest servletRequest,
+                         ServletResponse servletResponse,
+                         FilterChain filterChain)
+          throws IOException, ServletException {
+
+        if (!helperChecked) {
+            helper = GroovyHelper.getCurrentInstance(sc);
+            // if null at this point, it will be null for the remainder
+            // of the app.  Set a flag so that we don't continually hit
+            // the ServletContext looking up the helper.
+            helperChecked = true;
+        }
+        if (helper != null) {
+            // Get the "real" ContextClassLoader
+            Thread currentThread = Thread.currentThread();
+            ClassLoader contextClassLoader = currentThread.getContextClassLoader();
+            
+            // Get the MojarraGroovyClassLoader
+            helper.setClassLoader();
+            ClassLoader mojarraGroovyClassLoader = currentThread.getContextClassLoader();
+            
+            // Set the ContextClassLoader back
+            currentThread.setContextClassLoader(contextClassLoader);
+            
+            // Obtain the Container
+            Object c = null;
+            try {
+                c = getWeldContainerInstance();
+            } catch (Exception ex) {
+                Logger.getLogger(WeldAwareGroovySupportFilter.class.getName()).log(Level.SEVERE, null, ex);
+            }
+            
+            // Set the MojarraGroovyClassLoader back
+            currentThread.setContextClassLoader(mojarraGroovyClassLoader);
+            try {
+                installMojarraGroovyClassLoaderToContainer(c);
+            } catch (Exception ex) {
+                Logger.getLogger(WeldAwareGroovySupportFilter.class.getName()).log(Level.SEVERE, null, ex);
+            }
+            
+            // Re-install the MojarraGroovyClassLoader
+            helper.setClassLoader();
+
+
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+        
+    }
+    
+    private Object getWeldContainerInstance() throws Exception {
+        Object [] args = new Object[0];
+        Object result = instanceMethod.invoke(null, args);
+        
+        return result;
+    }
+    
+    private void installMojarraGroovyClassLoaderToContainer(Object c) throws NoSuchFieldException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+        Object aclSingletonProvider = instanceField.get(null);
+        
+        singletonSetMethod.invoke(aclSingletonProvider, c);
+        
+        
+    }
+    
+
+    public void destroy() {
+        // no-op
+    }
+    
+}
diff --git a/com/sun/faces/scripting/groovy/ActionListenerProxy.java b/com/sun/faces/scripting/groovy/ActionListenerProxy.java
new file mode 100644
index 0000000..5ee9725
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/ActionListenerProxy.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+import javax.faces.FacesException;
+
+/**
+ * Proxy instance for a groovy-based ActionListener.  This allows the ActionListener
+ * to remain registered with the Application while picking up changes at runtime
+ * from the associated groovy script.
+ */
+public class ActionListenerProxy implements ActionListener {
+
+    private String scriptName;
+    private ActionListener alDelegate;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ActionListenerProxy(String scriptName,
+                               ActionListener alDelegate) {
+
+        this.scriptName = scriptName;
+        this.alDelegate = alDelegate;
+
+    }
+
+
+    // --------------------------------------------- Methods from ActionListener
+
+
+    public void processAction(ActionEvent event)
+    throws AbortProcessingException {
+
+        getGroovyDelegate().processAction(event);
+        
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private ActionListener getGroovyDelegate() {
+
+        try {
+            return ((ActionListener) GroovyHelper.newInstance(scriptName,
+                                                              ActionListener.class,
+                                                              alDelegate));
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+
+
+}
diff --git a/com/sun/faces/scripting/groovy/ELResolverProxy.java b/com/sun/faces/scripting/groovy/ELResolverProxy.java
new file mode 100644
index 0000000..eeed301
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/ELResolverProxy.java
@@ -0,0 +1,109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.faces.FacesException;
+
+/**
+ * Proxy instance for a groovy-based ELResolvers.  This allows the ELResolver
+ * to remain registered in the application while picking up changes at runtime
+ * from the associated groovy script.
+ */
+public class ELResolverProxy extends ELResolver {
+
+    private String scriptName;
+
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public ELResolverProxy(String scriptName) {
+        this.scriptName = scriptName;
+    }
+
+    // ------------------------------------------------- Methods from ELResolver
+
+
+    public Object getValue(ELContext elContext, Object o, Object o1) {
+        return getGroovyDelegate().getValue(elContext, o, o1);
+    }
+
+    public Class<?> getType(ELContext elContext, Object o, Object o1) {
+        return getGroovyDelegate().getType(elContext, o, o1);
+    }
+
+    public void setValue(ELContext elContext, Object o, Object o1, Object o2) {
+        getGroovyDelegate().setValue(elContext, o, o1, o2);
+    }
+
+    public boolean isReadOnly(ELContext elContext, Object o, Object o1) {
+        return getGroovyDelegate().isReadOnly(elContext, o, o1);
+    }
+
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext elContext,
+                                                             Object o) {
+        return getGroovyDelegate().getFeatureDescriptors(elContext, o);
+    }
+
+    public Class<?> getCommonPropertyType(ELContext elContext, Object o) {
+        return getGroovyDelegate().getCommonPropertyType(elContext, o);
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+   private ELResolver getGroovyDelegate() {
+
+       try {
+            return ((ELResolver) GroovyHelper.newInstance(scriptName));
+       } catch (Exception e) {
+           throw new FacesException(e);
+       }
+
+    }
+}
diff --git a/com/sun/faces/scripting/groovy/GroovyHelper.java b/com/sun/faces/scripting/groovy/GroovyHelper.java
new file mode 100644
index 0000000..f8b4318
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/GroovyHelper.java
@@ -0,0 +1,127 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import com.sun.faces.util.Util;
+
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+import java.lang.reflect.Constructor;
+import java.net.URL;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Base class for interfacing with Groovy.
+ */
+public abstract class GroovyHelper {
+
+    private static final Logger LOGGER = Logger.getLogger(GroovyHelper.class.getPackage().getName());
+    
+    public static boolean isGroovyAvailable(FacesContext ctx) {
+
+        return (ctx.getExternalContext().getApplicationMap().get("com.sun.faces.groovyhelper") != null);
+        
+    }
+
+    public static GroovyHelper getCurrentInstance(FacesContext ctx) {
+
+        return (GroovyHelper) ctx.getExternalContext().getApplicationMap().get("com.sun.faces.groovyhelper");
+
+    }
+
+
+    public static GroovyHelper getCurrentInstance(ServletContext sc) {
+        return (GroovyHelper) sc.getAttribute("com.sun.faces.groovyhelper");
+    }
+
+
+    public static GroovyHelper getCurrentInstance() {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        if (ctx != null) {
+            return getCurrentInstance(ctx);
+        }
+        return null;
+
+    }
+    public abstract Class<?> loadScript(String name);
+
+    public static Object newInstance(String name, Class<?> type, Object root)
+    throws Exception {
+        Class<?> delegate = Util.loadClass(name, GroovyHelper.class);
+        try {
+            Constructor decorationCtor = requiresDecoration(delegate, type, root);
+            if (decorationCtor != null) {
+                return decorationCtor.newInstance(root);
+            } else {
+                return delegate.newInstance();
+            }
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+    }
+
+    public static Object newInstance(String name) throws Exception {
+        return newInstance(name, null, null);
+    }
+
+    public abstract void setClassLoader();
+    
+    public abstract void addURL(URL toAdd);
+
+    // --------------------------------------------------------- Private Methods
+
+
+     private static Constructor requiresDecoration(Class<?> groovyClass, Class<?> ctorArgument, Object root) {
+        if (root != null) {
+            try {
+                return groovyClass.getConstructor(ctorArgument);
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.FINEST)) {
+                    LOGGER.log(Level.FINE, "Unable to get constructor", e);
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/scripting/groovy/GroovyHelperFactory.java b/com/sun/faces/scripting/groovy/GroovyHelperFactory.java
new file mode 100644
index 0000000..c5b7951
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/GroovyHelperFactory.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * This class exists to avoid having to have Groovy available at runtime.
+ */
+public class GroovyHelperFactory {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    private static final String GROOVY_HELPER_IMPL =
+          "com.sun.faces.scripting.groovy.GroovyHelperImpl";
+
+    public static GroovyHelper createHelper() {
+        try {
+            if (Util.loadClass("groovy.util.GroovyScriptEngine", GroovyHelperFactory.class) != null) {
+                try {
+                    Class<?> c =
+                          Util.loadClass(GROOVY_HELPER_IMPL, GroovyHelperFactory.class);
+                    return (GroovyHelper) c.newInstance();
+                } catch (UnsupportedOperationException ignored) {
+                    if (LOGGER.isLoggable(Level.FINE)) {
+                        LOGGER.fine("Groovy runtime available, but WEB-INF/groovy directory not present."
+                                    + "  Groovy support will not be enabled.");
+                    }
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "Groovy support not available",
+                                   e);
+                    }
+                }
+            }
+        } catch (ClassNotFoundException cnfe) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Unable to find class", cnfe);
+            }
+        }
+        return null;
+    }
+}
diff --git a/com/sun/faces/scripting/groovy/GroovyHelperImpl.java b/com/sun/faces/scripting/groovy/GroovyHelperImpl.java
new file mode 100644
index 0000000..7caa78d
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/GroovyHelperImpl.java
@@ -0,0 +1,232 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import groovy.util.GroovyScriptEngine;
+
+import javax.faces.FacesException;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.servlet.ServletContext;
+
+/**
+ * Helper class to interface with the Groovy runtime.
+ */
+public class GroovyHelperImpl extends GroovyHelper {
+
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    private static final String SCRIPT_PATH = "/WEB-INF/groovy/";
+
+    private MojarraGroovyClassLoader loader;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    GroovyHelperImpl() throws Exception {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        ExternalContext extContext = facesContext.getExternalContext();
+        ClassLoader curLoader = Thread.currentThread().getContextClassLoader();
+
+        URL combinedRoots[] = getResourceRoots(extContext, curLoader);
+
+        if (0 < combinedRoots.length) {
+            GroovyScriptEngine engine =
+                    new GroovyScriptEngine(combinedRoots, curLoader);
+//            Class<?> c = Util.loadClass("groovy.util.GroovyScriptEngine", GroovyHelperFactory.class);
+//            Constructor<?> ctor = c.getConstructor(URL[].class, ClassLoader.class);
+//            GroovyScriptEngine engine = (GroovyScriptEngine)ctor.newInstance(combinedRoots, curLoader);
+            loader = new MojarraGroovyClassLoader(engine);
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.log(Level.INFO,
+                        "Groovy support enabled.");
+            }
+            extContext.getApplicationMap().put("com.sun.faces.groovyhelper",
+                    this);
+            ((ServletContext)(extContext.getContext())).setAttribute("com.sun.faces.groovyhelper", this);
+        }
+
+    }
+
+    private URL[] getResourceRoots(ExternalContext extContext,
+                                   ClassLoader curLoader) throws IOException {
+        URL[] combinedRoots;
+        Enumeration<URL> classpathResourceEnumeration =
+                curLoader.getResources("META-INF/resources/");
+        List<URL> classpathResourceList = new ArrayList<URL>();
+        while (classpathResourceEnumeration.hasMoreElements()) {
+            classpathResourceList.add(classpathResourceEnumeration.nextElement());
+        }
+
+        // only called during init - safe to cast and save.
+        URL u = extContext.getResource(SCRIPT_PATH);
+        URL webappRoots[] = getWebappResourceRoots(extContext),
+                classpathRoots[] = new URL[classpathResourceList.size()];
+        classpathResourceList.toArray(classpathRoots);
+
+        if (null != u ||
+                0 < webappRoots.length ||
+                0 < classpathRoots.length) {
+            combinedRoots = new URL[webappRoots.length + classpathRoots.length +
+                    (null != u ? 1 : 0)];
+            System.arraycopy(webappRoots, 0,
+                    combinedRoots, 0,
+                    webappRoots.length);
+            System.arraycopy(classpathRoots, 0,
+                    combinedRoots, webappRoots.length,
+                    classpathRoots.length);
+            if (null != u) {
+                combinedRoots[webappRoots.length + classpathRoots.length] = u;
+            }
+        } else {
+            combinedRoots = new URL[0];
+        }
+
+        return combinedRoots;
+    }
+
+
+    private URL[] getWebappResourceRoots(ExternalContext extContext) {
+        URL[] result = null;
+        int size = 0, i = 0;
+        Set<String> resourceRoots = extContext.getResourcePaths("/resources/");
+        if (null != resourceRoots && !resourceRoots.isEmpty()) {
+            // Determine the size of script roots that end with "/"
+            for (String cur : resourceRoots) {
+                if (cur.endsWith("/")) {
+                    size++;
+                }
+            }
+            result = new URL[size];
+            for (String cur : resourceRoots) {
+                if (cur.endsWith("/")) {
+                    try {
+                        result[i++] = extContext.getResource(cur);
+                    } catch (MalformedURLException ex) {
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE, null, ex);
+                        }
+                    }
+                }
+            }
+        }
+        if (null == result) {
+            result = new URL[0];
+        }
+        return result;
+    }
+
+    public void addURL(URL toAdd) {
+        loader.getGroovyScriptEngine().getGroovyClassLoader().addURL(toAdd);
+    }
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public Class<?> loadScript(String name) {
+        try {
+            String script = name;
+            if (script.endsWith(".groovy")) {
+                script = script.substring(0, script.indexOf(".groovy"));
+            }
+            //return engine.loadScriptByName(script);
+            return Util.loadClass(script, this);
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+    }
+
+    public void setClassLoader() {
+        if (loader != null) {
+            Thread.currentThread().setContextClassLoader(loader);
+        }
+    }
+
+    // ----------------------------------------------------------- Inner Classes
+
+    public static final class MojarraGroovyClassLoader extends URLClassLoader {
+
+        private GroovyScriptEngine gse;
+
+        public MojarraGroovyClassLoader(GroovyScriptEngine gse) {
+            super(new URL[0], gse.getGroovyClassLoader());
+	    gse.getGroovyClassLoader().setShouldRecompile(Boolean.TRUE);
+            this.gse = gse;
+        }
+
+        public GroovyScriptEngine getGroovyScriptEngine() {
+            return gse;
+        }
+
+        @Override
+        public Class<?> loadClass(String name) throws ClassNotFoundException {
+            if (name == null) {
+                throw new NullPointerException();
+            }
+            Class<?> c;
+            try {
+                c = gse.loadScriptByName(name);
+            } catch (Exception e) {
+                try {
+                    c = gse.getGroovyClassLoader().loadClass(name);
+                } catch (ClassNotFoundException cnfe) {
+                    throw new ClassNotFoundException(name, cnfe);
+                }
+            }
+            if (c == null) {
+                throw new ClassNotFoundException(name);
+            }
+            return c;
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/scripting/groovy/GroovyScriptManager.java b/com/sun/faces/scripting/groovy/GroovyScriptManager.java
new file mode 100644
index 0000000..f7a1cf3
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/GroovyScriptManager.java
@@ -0,0 +1,176 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.scripting.ScriptManager;
+import com.sun.faces.util.FacesLogger;
+
+import javax.servlet.ServletContext;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class GroovyScriptManager implements ScriptManager {
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    private static final String SCRIPT_PATH = "/WEB-INF/groovy/";
+    private static final String SUFFIX = ".groovy";
+    private ServletContext servletContext;
+
+    // Borrowed from AnnotationScanner.  Perhaps this should be made public somewhere
+    public static final Set<String> FACES_ANNOTATIONS;
+
+    static {
+        HashSet<String> annotations = new HashSet<String>(15, 1.0f);
+        Collections.addAll(annotations,
+                "javax.faces.component.FacesComponent",
+                "javax.faces.component.*",
+                "javax.faces.convert.FacesConverter",
+                "javax.faces.convert.*",
+                "javax.faces.validator.FacesValidator",
+                "javax.faces.validator.*",
+                "javax.faces.render.FacesRenderer",
+                "javax.faces.render.*",
+                "javax.faces.bean.ManagedBean",
+                "javax.faces.bean.*",
+                "javax.faces.event.NamedEvent",
+                "javax.faces.event.*",
+                "javax.faces.component.behavior.FacesBehavior",
+                "javax.faces.component.behavior.*",
+                "javax.faces.render.FacesBehaviorRenderer");
+        FACES_ANNOTATIONS = Collections.unmodifiableSet(annotations);
+    }
+
+    public GroovyScriptManager(ServletContext servletContext) {
+        this.servletContext = servletContext;
+    }
+
+    public Set<String> getScripts() {
+        Set<String> scripts = new HashSet<String>();
+        processWebInfGroovy(servletContext, servletContext.getResourcePaths(SCRIPT_PATH), scripts);
+
+        return scripts;
+    }
+
+    private void processWebInfGroovy(ServletContext sc, Set<String> paths, Set<String> classList) {
+        if (paths != null && !paths.isEmpty()) {
+            for (String pathElement : paths) {
+                if (pathElement.endsWith("/")) {
+                    processWebInfGroovy(sc, sc.getResourcePaths(pathElement), classList);
+                } else {
+                    if (pathElement.endsWith(SUFFIX)) {
+                        String cname = convertToClassName(SCRIPT_PATH, pathElement);
+                        if (containsAnnotation(sc, pathElement)) {
+                            if (LOGGER.isLoggable(Level.FINE)) {
+                                LOGGER.log(Level.FINE, "[WEB-INF/groovy] Found annotated Class: {0}", cname);
+                            }
+                            classList.add(cname);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean containsAnnotation(ServletContext sc, String pathElement) {
+        boolean containsAnnotation = false;
+        BufferedReader in = null;
+        try {
+            URL url = sc.getResource(pathElement);
+            in = new BufferedReader(new InputStreamReader(url.openStream(), RIConstants.CHAR_ENCODING));
+            String line = in.readLine();
+            while ((line != null) && (!containsAnnotation)) {
+                line = line.trim();
+                if (line.length() != 0) {
+                    for (String pattern : FACES_ANNOTATIONS) {
+                        if (line.indexOf(pattern) > -1) {
+                            containsAnnotation = true;
+                            break;
+                        }
+                    }
+                }
+
+                line = in.readLine();
+            }
+        } catch (Exception ioe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, null, ioe);
+            }
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Closing stream", e);
+                    }
+                }
+            }
+        }
+        return containsAnnotation;
+    }
+
+    /**
+     * Utility method for converting paths to fully qualified class names.
+     *
+     * @param prefix    the prefix that should be stripped from the class name
+     *                  before converting it
+     * @param pathEntry a path to a class file
+     * @return a fully qualified class name using dot notation
+     */
+    private String convertToClassName(String prefix, String pathEntry) {
+        String className = pathEntry;
+
+        if (prefix != null) {
+            // remove the prefix
+            className = className.substring(prefix.length());
+        }
+        // remove the .class suffix
+        className = className.substring(0, (className.length() - 7));
+
+        return className.replace('/', '.');
+    }
+}
diff --git a/com/sun/faces/scripting/groovy/NavigationHandlerProxy.java b/com/sun/faces/scripting/groovy/NavigationHandlerProxy.java
new file mode 100644
index 0000000..5791a81
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/NavigationHandlerProxy.java
@@ -0,0 +1,96 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import javax.faces.application.NavigationHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.FacesException;
+
+/**
+ * Proxy instance for a groovy-based NavigationHandlers.  This allows the NavigationHandler
+ * to remain registered with the Application while picking up changes at runtime
+ * from the associated groovy script.
+ */
+public class NavigationHandlerProxy extends NavigationHandler {
+
+
+    private String scriptName;
+    private NavigationHandler nvDelegate;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public NavigationHandlerProxy(String scriptName,
+                                  NavigationHandler nvDelegate) {
+
+        this.scriptName = scriptName;
+        this.nvDelegate = nvDelegate;
+
+    }
+
+
+    // ------------------------------------------ Methods from NavigationHandler
+
+
+    public void handleNavigation(FacesContext context,
+                                 String fromAction,
+                                 String outcome) {
+
+        getGroovyDelegate().handleNavigation(context, fromAction, outcome);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private NavigationHandler getGroovyDelegate() {
+
+        try {
+            return ((NavigationHandler) GroovyHelper.newInstance(scriptName,
+                                                                 NavigationHandler.class,
+                                                                 nvDelegate));
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+}
diff --git a/com/sun/faces/scripting/groovy/PhaseListenerProxy.java b/com/sun/faces/scripting/groovy/PhaseListenerProxy.java
new file mode 100644
index 0000000..e9d6f9d
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/PhaseListenerProxy.java
@@ -0,0 +1,96 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.faces.FacesException;
+
+/**
+ * Proxy instance for a groovy-based PhaseListeners.  This allows the PhaseListener
+ * to remain registered with the Lifecycle while picking up changes at runtime
+ * from the associated groovy script.
+ */
+public class PhaseListenerProxy implements PhaseListener {
+
+    private String scriptName;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public PhaseListenerProxy(String scriptName) {
+        this.scriptName = scriptName;
+    }
+
+    // ---------------------------------------------- Methods from PhaseListener
+
+
+
+    public void afterPhase(PhaseEvent event) {
+        getGroovyDelegate().afterPhase(event);
+    }
+
+
+    public void beforePhase(PhaseEvent event) {
+        getGroovyDelegate().beforePhase(event);
+    }
+
+
+    public PhaseId getPhaseId() {
+        return getGroovyDelegate().getPhaseId();
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private PhaseListener getGroovyDelegate() {
+
+        try {
+            return ((PhaseListener) GroovyHelper.newInstance(scriptName));
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/scripting/groovy/RendererProxy.java b/com/sun/faces/scripting/groovy/RendererProxy.java
new file mode 100644
index 0000000..4f084e0
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/RendererProxy.java
@@ -0,0 +1,126 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.ConverterException;
+import javax.faces.render.Renderer;
+import javax.faces.FacesException;
+
+/**
+ * Proxy instance for a groovy-based Renderers.  This allows the Renderer
+ * to remain registered with the renderkit while picking up changes at runtime
+ * from the associated groovy script.
+ */
+public class RendererProxy extends Renderer {
+
+    private String scriptName;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RendererProxy(String scriptName) {
+        this.scriptName = scriptName;
+    }
+
+
+    // --------------------------------------------------- Methods from Renderer
+
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+        getGroovyDelegate().decode(context, component);
+    }
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component)
+    throws IOException {
+        getGroovyDelegate().encodeBegin(context, component);
+    }
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component)
+    throws IOException {
+        getGroovyDelegate().encodeChildren(context, component);
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component)
+    throws IOException {
+        getGroovyDelegate().encodeEnd(context, component);
+    }
+
+    @Override
+    public String convertClientId(FacesContext context, String clientId) {
+        return getGroovyDelegate().convertClientId(context, clientId);
+    }
+
+    @Override
+    public boolean getRendersChildren() {
+        return getGroovyDelegate().getRendersChildren();
+    }
+
+    @Override
+    public Object getConvertedValue(FacesContext context,
+                                    UIComponent component,
+                                    Object submittedValue)
+    throws ConverterException {
+        return getGroovyDelegate().getConvertedValue(context, component, submittedValue);
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private Renderer getGroovyDelegate() {
+
+        try {
+            return ((Renderer) GroovyHelper.newInstance(scriptName));
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+}
diff --git a/com/sun/faces/scripting/groovy/ViewHandlerProxy.java b/com/sun/faces/scripting/groovy/ViewHandlerProxy.java
new file mode 100644
index 0000000..8d3a9a8
--- /dev/null
+++ b/com/sun/faces/scripting/groovy/ViewHandlerProxy.java
@@ -0,0 +1,177 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.scripting.groovy;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+
+/**
+ * Proxy instance for a groovy-based ViewHandler.  This allows the ViewHandler
+ * to remain registered with the application chain while picking up changes at runtime
+ * from the associated groovy script.
+ */
+public class ViewHandlerProxy extends ViewHandler {
+
+    private String scriptName;
+    private ViewHandler vhDelegate;
+
+
+    // ------------------------------------------------------------ Constructors
+    
+
+    public ViewHandlerProxy(String scriptName, ViewHandler vhDelegate) {
+
+        this.scriptName = scriptName;
+        this.vhDelegate = vhDelegate;
+
+    }
+
+
+    // ------------------------------------------------ Methods from ViewHandler
+
+
+    @Override
+    public String calculateCharacterEncoding(FacesContext context) {
+        return getGroovyDelegate().calculateCharacterEncoding(context);
+    }
+
+    @Override
+    public void initView(FacesContext context) throws FacesException {
+        getGroovyDelegate().initView(context);
+    }
+
+
+    public Locale calculateLocale(FacesContext context) {
+        return getGroovyDelegate().calculateLocale(context);
+    }
+
+    public String calculateRenderKitId(FacesContext context) {
+        return getGroovyDelegate().calculateRenderKitId(context);
+    }
+
+    public UIViewRoot createView(FacesContext context, String viewId) {
+        return getGroovyDelegate().createView(context, viewId);
+    }
+
+    public String getActionURL(FacesContext context, String viewId) {
+        return getGroovyDelegate().getActionURL(context, viewId);
+    }
+
+    public String getResourceURL(FacesContext context, String path) {
+        return getGroovyDelegate().getResourceURL(context, path);
+    }
+
+    @Override
+    public String deriveViewId(FacesContext context, String input) {
+        return getGroovyDelegate().deriveViewId(context, input);
+    }
+
+    @Override
+    public String deriveLogicalViewId(FacesContext context, String input) {
+        return getGroovyDelegate().deriveLogicalViewId(context, input);
+    }
+
+
+    @Override
+    public String getRedirectURL(FacesContext context,
+                                 String viewId,
+                                 Map<String,List<String>> parameters,
+                                 boolean includeViewParams) {
+        return getGroovyDelegate().getRedirectURL(context,
+                                                  viewId,
+                                                  parameters,
+                                                  includeViewParams);
+    }
+
+    @Override
+    public String getBookmarkableURL(FacesContext context,
+                                     String viewId,
+                                     Map<String,List<String>> parameters,
+                                     boolean includeViewParams) {
+        return getGroovyDelegate().getBookmarkableURL(context,
+                                                      viewId,
+                                                      parameters,
+                                                      includeViewParams);
+    }
+
+    @Override
+    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context, String viewId) {
+        return getGroovyDelegate().getViewDeclarationLanguage(context, viewId);
+    }
+
+    public void renderView(FacesContext context, UIViewRoot viewToRender)
+    throws IOException, FacesException {
+        getGroovyDelegate().renderView(context, viewToRender);
+    }
+
+    public UIViewRoot restoreView(FacesContext context, String viewId) {
+        return getGroovyDelegate().restoreView(context, viewId);
+    }
+
+    public void writeState(FacesContext context) throws IOException {
+        getGroovyDelegate().writeState(context);
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private ViewHandler getGroovyDelegate() {
+
+        try {
+            return ((ViewHandler) GroovyHelper.newInstance(scriptName,
+                                                           ViewHandler.class,
+                                                           vhDelegate));
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+    }
+    
+}
diff --git a/com/sun/faces/spi/AnnotationProvider.java b/com/sun/faces/spi/AnnotationProvider.java
new file mode 100644
index 0000000..e8ae40e
--- /dev/null
+++ b/com/sun/faces/spi/AnnotationProvider.java
@@ -0,0 +1,133 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import javax.servlet.ServletContext;
+import java.lang.annotation.Annotation;
+import java.net.URI;
+import java.util.Set;
+import java.util.Map;
+
+/**
+ * <p>
+ * An integration point for integrators to provide custom annotation scanning.
+ * </p>
+ *
+ * <p>
+ * <em>All</em> <code>AnnotationProvider</code> implementations <em>must</em>
+ * scan for the following annotations:
+ * </p>
+ * <ul>
+ *  <li>FacesComponent</li>
+ *  <li>FacesConverter</li>
+ *  <li>FacesRenderer</li>
+ *  <li>FacesValidator</li>
+ *  <li>ManagedBean</li>
+ *  <li>NamedEvent</li>
+ *  <li>FacesBehavior</li>
+ *  <li>FacesBehaviorRenderer</li>
+ * </ul>
+ *
+ * <p>
+ * The <code>AnnotationProvider</code> instance will be wrapped as a {@link java.util.concurrent.Future} and
+ * executed during the environment initialization.  The result of the future can be obtained
+ * by calling {@link com.sun.faces.config.ConfigManager#getAnnotatedClasses(javax.faces.context.FacesContext)}.
+ * </p>
+ *
+ * <p>
+ * The {@link java.util.concurrent.Future} itself can be obtained from the
+ * application map using the key <code>com.sun.faces.config.ConfigManager__ANNOTATION_SCAN_TASK</code>.
+ * </p>
+ *
+ * <p>
+ * It's important to note that the value returned by either method described above
+ * is only available while the application is being initialized and will be removed
+ * before the application is put into service.
+ * </p>
+ *
+ * <p>
+ * To register a custom AnnotationProvider with the runtime, place a file named
+ * com.sun.faces.spi.annotationprovider within META-INF/services of a JAR file,
+ * with a single line referencing the fully qualified class name of the AnnotationProvider
+ * implementation.  Custom AnnotationProviders can be used to decorate the default
+ * AnnotationProvider by providing a constructor that takes an AnnotationProvider as the
+ * second parameter:</p>
+ *
+ * <p><code>public AnnotationProvider(ServletContext sc, AnnotationProvider parent)</code></p>
+ * 
+ * <p>If decoration is not desired, then the custom provider must have a constructor
+ * that takes one paramer, a <code>ServletContext</code>:
+ *
+ * <p><code>public AnnotationProvider(ServletContext sc)</code></p>
+ *
+ * <p>All customer providers must extend this class.</p>
+ * 
+ */
+public abstract class AnnotationProvider {
+
+
+    protected ServletContext sc;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public AnnotationProvider(ServletContext sc) {
+
+        this.sc = sc;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @param urls a <code>Set</code> of URLs that refer to specific faces-config.xml
+     *  documents on the classpath.  The information returned by the map may
+     *  return annotation information from sources outside of those defined by the
+     *  urls.
+     * @return a <code>Map</code> of classes mapped to a specific annotation type.
+     *  If no annotations are present, this method returns an empty <code>Map</code>.
+     */
+    public abstract Map<Class<? extends Annotation>,Set<Class<?>>> getAnnotatedClasses(Set<URI> urls);
+
+} // END AnnotationProvider
diff --git a/com/sun/faces/spi/AnnotationProviderFactory.java b/com/sun/faces/spi/AnnotationProviderFactory.java
new file mode 100644
index 0000000..880b512
--- /dev/null
+++ b/com/sun/faces/spi/AnnotationProviderFactory.java
@@ -0,0 +1,103 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import com.sun.faces.config.DelegatingAnnotationProvider;
+
+import javax.servlet.ServletContext;
+import javax.faces.FacesException;
+import java.lang.reflect.Constructor;
+
+/**
+ * 
+ */
+public class AnnotationProviderFactory {
+
+    private static final Class<? extends AnnotationProvider> DEFAULT_ANNOTATION_PROVIDER =
+       DelegatingAnnotationProvider.class;
+
+    private static final String ANNOTATION_PROVIDER_SERVICE_KEY =
+         "com.sun.faces.spi.annotationprovider";
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public static AnnotationProvider createAnnotationProvider(ServletContext sc) {
+        AnnotationProvider annotationProvider = createDefaultProvider(sc);
+
+        String[] services = ServiceFactoryUtils.getServiceEntries(ANNOTATION_PROVIDER_SERVICE_KEY);
+        if (services.length > 0) {
+            // only use the first entry...
+            Object provider = ServiceFactoryUtils.getProviderFromEntry(services[0],
+                new Class[] { ServletContext.class, AnnotationProvider.class }, new Object[] { sc , annotationProvider });
+            if (provider == null) {
+                provider = ServiceFactoryUtils.getProviderFromEntry(services[0], new Class[] { ServletContext.class }, new Object[] { sc });
+            }
+            
+            if (provider != null) {
+                if (!(provider instanceof AnnotationProvider)) {
+                    throw new FacesException("Class " + provider.getClass().getName() + " is not an instance of com.sun.faces.spi.AnnotationProvider");
+                }
+                annotationProvider = (AnnotationProvider)provider;
+            }
+        }
+
+        return annotationProvider;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static AnnotationProvider createDefaultProvider(ServletContext sc) {
+        AnnotationProvider result = null;
+        Constructor c;
+
+        try {
+            c = DEFAULT_ANNOTATION_PROVIDER.getDeclaredConstructor(new Class<?>[] { ServletContext.class });
+            result = (AnnotationProvider) c.newInstance(sc);
+        } catch (Exception e2) {
+            throw new FacesException(e2);
+        }
+        return result;
+    }
+}
diff --git a/com/sun/faces/spi/AnnotationScanner.java b/com/sun/faces/spi/AnnotationScanner.java
new file mode 100644
index 0000000..c737ead
--- /dev/null
+++ b/com/sun/faces/spi/AnnotationScanner.java
@@ -0,0 +1,65 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import java.net.URI;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+/**
+ *
+ */
+public interface AnnotationScanner {
+
+    public abstract Map<String, List<ScannedAnnotation>> getAnnotatedClassesInCurrentModule(ServletContext extContext)
+    throws InjectionProviderException;
+
+    public interface ScannedAnnotation {
+
+        public Collection<URI> getDefiningURIs();
+
+        public String getFullyQualifiedClassName();
+
+    }
+}
diff --git a/com/sun/faces/spi/ConfigurationResourceProvider.java b/com/sun/faces/spi/ConfigurationResourceProvider.java
new file mode 100644
index 0000000..ecec1e2
--- /dev/null
+++ b/com/sun/faces/spi/ConfigurationResourceProvider.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import java.net.URI;
+import javax.servlet.ServletContext;
+
+import java.util.Collection;
+
+/**
+ * <p> Classes that implement this interface return zero or more
+ * <code>URL</code>s which refer to application configuration resources.
+ * </p>
+ *
+ * @see FacesConfigResourceProvider
+ * @see FaceletConfigResourceProvider
+ */
+public interface ConfigurationResourceProvider {
+
+    /**
+     * @param context the <code>ServletContext</code> for this application
+     *
+     * @return a List zero or more <code>URL</code> instances representing
+     *         application configuration resources
+     */
+    public Collection<URI> getResources(ServletContext context);
+
+}
diff --git a/com/sun/faces/spi/ConfigurationResourceProviderFactory.java b/com/sun/faces/spi/ConfigurationResourceProviderFactory.java
new file mode 100644
index 0000000..69b02c7
--- /dev/null
+++ b/com/sun/faces/spi/ConfigurationResourceProviderFactory.java
@@ -0,0 +1,116 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Factory class for creating <code>ConfigurationResourceProvider</code> instances
+ * using the Java services discovery mechanism.
+ */
+public class ConfigurationResourceProviderFactory {
+
+
+    public enum ProviderType {
+
+        /**
+         * ConfigurationResourceProvider type for configuration resources
+         * that follow the faces-config DTD/Schema.
+         */
+        FacesConfig(FacesConfigResourceProvider.SERVICES_KEY),
+
+        /**
+         * ConfigurationResourceProvider type for configuration resources
+         * that follow the Facelet taglib DTD/Schema.
+         */
+        FaceletConfig(FaceletConfigResourceProvider.SERVICES_KEY);
+
+        String servicesKey;
+
+        ProviderType(String servicesKey) {
+            this.servicesKey = servicesKey;
+        }
+        
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @param providerType the type of providers that should be discovered and instantiated.
+     *
+     * @return an array of all <code>ConfigurationResourceProviders discovered that
+     *  match the specified <code>ProviderType</code>.
+     */
+    public static ConfigurationResourceProvider[] createProviders(ProviderType providerType) {
+
+        String[] serviceEntries = ServiceFactoryUtils.getServiceEntries(providerType.servicesKey);
+        List<ConfigurationResourceProvider> providers = new ArrayList<ConfigurationResourceProvider>();
+        if (serviceEntries.length > 0) {
+            for (String serviceEntry : serviceEntries) {
+                try {
+                    ConfigurationResourceProvider provider = (ConfigurationResourceProvider)
+                          ServiceFactoryUtils.getProviderFromEntry(serviceEntry, null, null);
+                    if (provider != null) {
+                        if (ProviderType.FacesConfig == providerType) {
+                            if (!(provider instanceof FacesConfigResourceProvider)) {
+                                throw new IllegalStateException("Expected ConfigurationResourceProvider type to be an instance of FacesConfigResourceProvider");
+                            }
+                        } else {
+                            if (!(provider instanceof FaceletConfigResourceProvider)) {
+                                throw new IllegalStateException("Expected ConfigurationResourceProvider type to be an instance of FaceletConfigResourceProvider");
+                            }
+                        }
+                        providers.add(provider);
+                    }
+                } catch(ClassCastException cce) {
+                    // we are going to ignore these for now.
+                }
+            }
+            return providers.toArray(new ConfigurationResourceProvider[providers.size()]);
+        } else {
+            return new ConfigurationResourceProvider[0];
+        }        
+    }
+}
diff --git a/com/sun/faces/spi/DiscoverableInjectionProvider.java b/com/sun/faces/spi/DiscoverableInjectionProvider.java
new file mode 100644
index 0000000..4a6d01d
--- /dev/null
+++ b/com/sun/faces/spi/DiscoverableInjectionProvider.java
@@ -0,0 +1,84 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import com.sun.faces.util.Util;
+
+/**
+ * <p><code>InjectionProvider</code>s that implement this interface
+ * can be configured via <code>META-INF/services/com.sun.faces.spi.injectionprovider</code>.
+ *
+ * <p>The format of the configuration entries is:</p>
+ * <ul>
+ *   <li><code><InjectionProviderClassName>:<DelegateClassName></code></li>
+ * <ul>
+ *
+ * <p>Example:</p}
+ * <ul>
+ *    <li><code>com.sun.faces.vendor.GlassFishInjectionProvider:com.sun.enterprise.InjectionManager</code></li>
+ * </ul>
+ *
+ * <p>Multiple <code>DiscoverableInjectionProvider</code>s can be configured
+ * within a single services entry.</p>
+ */
+public abstract class DiscoverableInjectionProvider implements InjectionProvider {
+
+
+    /**
+     * @param delegateClass the name of the delegate used by the
+     *  <code>InjectionProvider</code> implementation.
+     * @return returns <code>true</code> if the
+     *  <code>InjectionProvider</code> instance
+     *  is appropriate for the container its currently
+     *  deployed within, otherwise return <code>false</code>
+     */
+    public static boolean isInjectionFeatureAvailable(String delegateClass) {
+
+        try {
+            Util.loadClass(delegateClass, null);
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+        
+    }
+
+}
diff --git a/com/sun/faces/spi/FaceletConfigResourceProvider.java b/com/sun/faces/spi/FaceletConfigResourceProvider.java
new file mode 100644
index 0000000..8499a80
--- /dev/null
+++ b/com/sun/faces/spi/FaceletConfigResourceProvider.java
@@ -0,0 +1,77 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+/**
+ * <p> Classes that implement this interface return zero or more
+ * <code>URL</code>s which refer to application configuration resources (i.e.
+ * documents conforming the Facelet taglib DTD or Schema). </p>
+ *
+ * <p>
+ * Implementations of this interface are made known to the runtime using
+ * service discovery.
+ * </p>
+ *
+ * <p>For example:</p>
+ *
+ * <pre>
+ *     META-INF/services/com.sun.faces.spi.FaceletConfigResourceProvider
+ * </pre>
+ *
+ * <p>
+ * The file, <code>com.sun.faces.spi.FaceletConfigResourceProvider</code>,
+ * contains a single line which represents the fully qualified class name
+ * of the concrete <code>FacesConfigResourceProvider</code>.
+ * </p>
+ *
+ * <p>
+ * The <code>FaceletConfigResourceProvider</code> instances that are found
+ * will be inserted into a List of existing <code>ConfigurationResourceProviders</code>
+ * <em>after</em> those that process <code>taglib.xml</code> files in <code>META-INF</code>
+ * but <em>before</em> those that process <code>taglib.xml</code> files in the
+ * web application.
+ * </p>
+ */
+public interface FaceletConfigResourceProvider {
+
+    public static final String SERVICES_KEY = "com.sun.faces.spi.FaceletConfigResourceProvider";
+    
+}
diff --git a/com/sun/faces/spi/FacesConfigResourceProvider.java b/com/sun/faces/spi/FacesConfigResourceProvider.java
new file mode 100644
index 0000000..0c9e1d1
--- /dev/null
+++ b/com/sun/faces/spi/FacesConfigResourceProvider.java
@@ -0,0 +1,79 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+/**
+ * <p> Classes that implement this interface return zero or more
+ * <code>URL</code>s which refer to application configuration resources (i.e.
+ * documents conforming the faces-config DTD or Schema). </p>
+ *
+ * <p>
+ * Implementations of this interface are made known to the runtime using
+ * service discovery.
+ * </p>
+ *
+ * <p>For example:</p>
+ *
+ * <pre>
+ *     META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider
+ * </pre>
+ *
+ * <p>
+ * The file, <code>com.sun.faces.spi.FacesConfigResourceProvider</code>,
+ * contains a single line which represents the fully qualified class name
+ * of the concrete <code>FacesConfigResourceProvider</code>.
+ * </p>
+ *
+ * <p>
+ * The <code>FacesConfigResourceProvider</code> instances that are found
+ * will be inserted into a List of existing <code>ConfigurationResourceProviders</code>
+ * <em>after</em> those that process <code>faces-config.xml</code> files in <code>META-INF</code>
+ * but <em>before</em> those that process <code>faces-config.xml</code> files in the
+ * web application.  If the documents returned by this <code>ConfigurationResourceProvider</code>
+ * instance require specific ordering semantics, then use the partial or absolute ordering
+ * feature provided by the JavaServer Faces 2.0 specification.
+ * </p>
+ */
+public interface FacesConfigResourceProvider extends ConfigurationResourceProvider {
+
+    public static final String SERVICES_KEY = "com.sun.faces.spi.FacesConfigResourceProvider";
+    
+}
diff --git a/com/sun/faces/spi/HighAvailabilityEnabler.java b/com/sun/faces/spi/HighAvailabilityEnabler.java
new file mode 100644
index 0000000..446bac3
--- /dev/null
+++ b/com/sun/faces/spi/HighAvailabilityEnabler.java
@@ -0,0 +1,55 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+
+package com.sun.faces.spi;
+
+import javax.servlet.ServletContext;
+
+/**
+ * This interface is for JSF to check if the app server has HA enabled.
+ *
+ * @author sheetalv
+ */
+public interface HighAvailabilityEnabler {
+
+    public void enableHighAvailability(ServletContext ctx);
+
+}
diff --git a/com/sun/faces/spi/InjectionProvider.java b/com/sun/faces/spi/InjectionProvider.java
new file mode 100644
index 0000000..9dced59
--- /dev/null
+++ b/com/sun/faces/spi/InjectionProvider.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+/**
+ * <p>This interface defines an integration point for Java EE vendors.
+ * Each vendor will need to provide an implementation of this interface
+ * which will provide the JSF implementation the necessary hooks to 
+ * perform resource injection.</p>  
+ * 
+ * <p>The implementation of this interface *must* be thread-safe and must
+ * provider either a no-arg constructor, or a constructor accepting
+ * a <code>ServletContext</code> instance.</p>
+ */
+public interface InjectionProvider {
+
+    /**
+     * <p>The implementation of this method must perform the following
+     * steps:
+     *    <ul>
+     *        <li>Inject the supported resources per the Servlet 2.5
+     *           specification into the provided object</li>        
+     *    </ul>
+     * </p>
+     * <p>This method <em>must not</em> invoke any methods
+     * annotated with <code>@PostConstruct</code>
+     * @param managedBean the target managed bean
+     * @throws InjectionProviderException if an error occurs during 
+     *  resource injection
+     */
+    public void inject(Object managedBean) throws InjectionProviderException;
+
+    
+    /**
+     * <p>The implemenation of this method must invoke any
+     * method marked with the <code>@PreDestroy</code> annotation
+     * (per the Common Annotations Specification).
+     * @param managedBean the target managed bean
+     * @throws InjectionProviderException if an error occurs when invoking
+     *  the method annotated by the <code>@PreDestroy</code> annotation
+     */
+    public void invokePreDestroy(Object managedBean) 
+    throws InjectionProviderException;
+    
+    
+    /**
+     * <p>The implemenation of this method must invoke any
+     * method marked with the <code>@PostConstruct</code> annotation
+     * (per the Common Annotations Specification).
+     * @param managedBean the target managed bean
+     * @throws InjectionProviderException if an error occurs when invoking
+     *  the method annotated by the <code>@PostConstruct</code> annotation
+     */
+    public void invokePostConstruct(Object managedBean) 
+    throws InjectionProviderException;
+    
+}
diff --git a/com/sun/faces/spi/InjectionProviderException.java b/com/sun/faces/spi/InjectionProviderException.java
new file mode 100644
index 0000000..479a236
--- /dev/null
+++ b/com/sun/faces/spi/InjectionProviderException.java
@@ -0,0 +1,69 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+/**
+ * Wraps any exception thrown by an implementation
+ * of <code>InjectionProvider</code>.
+ */
+public class InjectionProviderException extends Exception {
+
+    /**
+     * Creates a new <code>InjectionProviderException</code> with
+     * the root cause of the error.    
+     * @param cause the root cause
+     */
+    public InjectionProviderException(Throwable cause) {
+        super(cause);
+    }
+    
+    
+    /**
+     * Creates a new <code>InjectionProviderException</code> with
+     * a descriptive message and the root cause of the error.
+     * @param message descriptive message
+     * @param cause the root cause
+     */
+    public InjectionProviderException(String message, Throwable cause) {
+        super(message, cause);        
+    }
+    
+} // END InjectionProviderException
diff --git a/com/sun/faces/spi/InjectionProviderFactory.java b/com/sun/faces/spi/InjectionProviderFactory.java
new file mode 100644
index 0000000..f343c3e
--- /dev/null
+++ b/com/sun/faces/spi/InjectionProviderFactory.java
@@ -0,0 +1,469 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Enumeration;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Collections;
+import java.util.Map;
+
+import javax.faces.context.ExternalContext;
+import javax.servlet.ServletContext;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+import com.sun.faces.vendor.WebContainerInjectionProvider;
+
+
+/**
+ * <p>A factory for creating <code>InjectionProvider</code>
+ * instances.</p>
+ */
+
+public class InjectionProviderFactory {
+
+
+    /**
+     * <p>Our no-op <code>InjectionProvider</code>.</p>
+     */
+    private static final InjectionProvider NOOP_PROVIDER =
+          new NoopInjectionProvider();
+
+    private static final InjectionProvider GENERIC_WEB_PROVIDER =
+         new WebContainerInjectionProvider();
+
+
+    private static final String INJECTION_SERVICE =
+         "META-INF/services/com.sun.faces.spi.injectionprovider";
+
+    /**
+      * <p>The system property that will be checked for alternate
+      * <code>InjectionProvider</code> implementations.</p>
+      */
+     private static final String INJECTION_PROVIDER_PROPERTY =
+           RIConstants.FACES_PREFIX + "InjectionProvider";
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    private static final String[] EMPTY_ARRAY = new String[] {};
+
+
+    /**
+     * <p>Creates a new instance of the class specified by the
+     * <code>com.sun.faces.InjectionProvider</code> system property.
+     * If this propery is not defined, then a default, no-op,
+     * <code>InjectionProvider</code> will be returned.
+     *
+     * @param extContext ExteranlContext for the current request
+     *
+     * @return an implementation of the <code>InjectionProvider</code>
+     *  interfaces
+     */
+    public static InjectionProvider createInstance(ExternalContext extContext) {
+
+        String providerClass = findProviderClass(extContext);
+        InjectionProvider provider =
+             getProviderInstance(providerClass, extContext);
+
+        if (!NoopInjectionProvider.class.equals(provider.getClass())
+            && !WebContainerInjectionProvider.class.equals(provider.getClass())) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.spi.injection.provider_configured",
+                           new Object[]{provider.getClass().getName()});
+            }
+            return provider;
+        } else if (WebContainerInjectionProvider.class.equals(provider.getClass())) {
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("jsf.core.injection.provider_generic_web_configured");
+            }
+            return provider;
+        } else {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING, "jsf.spi.injection.no_injection");
+            }
+            return provider;
+        }
+
+    }
+
+
+    private static InjectionProvider getProviderInstance(String className,
+                                                         ExternalContext extContext) {
+
+        InjectionProvider provider = NOOP_PROVIDER;
+        if (className != null) {
+            try {
+                Class<?> clazz = Util.loadClass(className, InjectionProviderFactory.class);
+                if (implementsInjectionProvider(clazz)) {
+                    try {
+                        Constructor ctor = clazz.getConstructor(ServletContext.class);
+                        return (InjectionProvider)
+                             ctor.newInstance((ServletContext) extContext.getContext());
+                    } catch (NoSuchMethodException nsme) {
+                        return (InjectionProvider) clazz.newInstance();
+                    } catch (InvocationTargetException ite) {
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE,
+                                 "jsf.spi.injection.provider_cannot_instantiate",
+                                 new Object[]{className});
+                            LOGGER.log(Level.SEVERE, "", ite);
+                        }
+                    }
+                } else {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "jsf.spi.injection.provider_not_implemented",
+                                   new Object[]{ className });
+                    }
+                }
+            } catch (ClassNotFoundException cnfe) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                   LOGGER.log(Level.SEVERE,
+                              "jsf.spi.injection.provider_not_found",
+                              new Object[]{ className });
+                }
+            } catch (InstantiationException ie) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "jsf.spi.injection.provider_cannot_instantiate",
+                               new Object[]{className});
+                    LOGGER.log(Level.SEVERE, "", ie);
+                }
+            } catch (IllegalAccessException iae) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "jsf.spi.injection.provider_cannot_instantiate",
+                               new Object[]{className});
+                    LOGGER.log(Level.SEVERE, "", iae);
+                }
+            }
+        }
+
+        // We weren't able to find a configured provider - check
+        // to see if the PostConstruct and PreDestroy annotations
+        // are available.  If they are, then default to the
+        // WebContainerInjectionProvider, otherwise, use
+        // NoopInjectionProvider
+        if (NOOP_PROVIDER.equals(provider)) {
+            try {
+                if (Util.loadClass("javax.annotation.PostConstruct", null) != null
+                    && Util.loadClass("javax.annotation.PreDestroy", null) != null) {
+                    provider = GENERIC_WEB_PROVIDER;
+                }
+            } catch (Exception e) {
+                provider = NOOP_PROVIDER;
+            }
+        }
+
+        return provider;
+
+    }
+
+
+    /**
+     * <p>Determine if the specified class implements the
+     * <code>InjectionProvider</code> interfaces.</p>
+     * @param clazz the class in question
+     * @return <code>true</code> if <code>clazz</code> implements
+     *  the <code>InjectionProvider</code> interface
+     */
+    private static boolean implementsInjectionProvider(Class<?> clazz) {
+
+        return InjectionProvider.class.isAssignableFrom(clazz);
+
+    }
+
+
+    /**
+     * <p>Determine if the specified class extends the
+     * <code>DiscoverableInjectionProvider</code> interfaces.</p>
+     * @param clazz the class in question
+     * @return <code>true</code> if <code>clazz</code> implements
+     *  the <code>InjectionProvider</code> interface
+     */
+    private static boolean extendsDiscoverableInjectionProvider(Class<?> clazz) {
+
+        return DiscoverableInjectionProvider.class.isAssignableFrom(clazz);
+
+    }
+
+
+    /**
+     * <p>Attempt to find an <code>InjectionProvider</code> based on the following
+     * algorithm:</p>
+     * <ul>
+     * <li>Check for an explicit configuration within the web.xml using
+     *     the key <code>com.sun.faces.injectionProvider</code>.  If found,
+     *     return the value.</li>
+     * <li>Check for a system property keyed by <code>com.sun.faces.InjectionProvider</code>.
+     *     If found, return the value.</li>
+     * <li>Check for entries within <code>META-INF/services/com.sun.faces.injectionprovider</code>.
+     *     If entries are found and the entries extend <code>DiscoverableInjectionProvider</code>,
+     *     invoke <code>isInjectionFeatureAvailable(String)</code> passing in the configured
+     *     delegate.  If <code>isInjectionFeatureAvailable(String)</code> returns <code>true</code>
+     *     return the service entry.</li>
+     * <li>If no <code>InjectionProviders are found, return <code>null</code></li>
+     * Tries to find a provider class in a web context parameter.  If not
+     * present it tries to find it as a System property.  If still not found
+     * returns null.
+     * <ul>
+     *
+     * @param extContext The ExternalContext for this request
+     * @return The provider class name specified in the container configuration,
+     *         or <code>null</code> if not found.
+     */
+    private static String findProviderClass(ExternalContext extContext) {
+
+        WebConfiguration webConfig = WebConfiguration.getInstance(extContext);
+        String provider = webConfig.getOptionValue(WebContextInitParameter.InjectionProviderClass);
+
+        if (provider != null) {
+            return provider;
+        } else {
+            provider = System.getProperty(INJECTION_PROVIDER_PROPERTY);
+        }
+
+        if (provider != null) {
+            return provider;
+        } else {
+            String[] serviceEntries = getServiceEntries();
+            if (serviceEntries.length > 0) {
+                for (int i = 0; i < serviceEntries.length; i++) {
+                    provider = getProviderFromEntry(extContext.getApplicationMap(), serviceEntries[i]);
+                    if (provider != null) {
+                        break;
+                    }
+                }
+            } else {
+                return provider;
+            }
+        }
+
+        return provider;
+
+    }
+
+
+    private static String getProviderFromEntry(Map<String, Object> appMap, String entry) {
+
+        if (entry == null) {
+            return null;
+        }
+
+        String[] parts = Util.split(appMap, entry, ":");
+        if (parts.length != 2) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           "jsf.spi.injection.invalid_service_entry",
+                           new Object[] { entry });
+            }
+            return null;
+        }
+
+        try {
+            Class<?> clazz = Util.loadClass(parts[0], null);
+            if (extendsDiscoverableInjectionProvider(clazz)) {
+                if (DiscoverableInjectionProvider.isInjectionFeatureAvailable(parts[1])) {
+                    return parts[0];
+                }
+            } else {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "jsf.spi.injection.provider.entry_not_discoverable",
+                               new Object[] { parts[0] });
+                }
+                return null;
+            }
+        } catch (ClassNotFoundException cnfe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           "jsf.spi.injection.provider_not_found",
+                           new Object[] { parts[0] });
+            }
+            return null;
+        }
+
+        return null;
+
+    }
+
+
+
+
+
+    private static String[] getServiceEntries() {
+
+        List<String> results = null;
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            return EMPTY_ARRAY;
+        }
+
+        Enumeration<URL> urls = null;
+        try {
+            urls = loader.getResources(INJECTION_SERVICE);
+        } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           ioe.toString(),
+                           ioe);
+            }
+        }
+
+        if (urls != null) {
+            InputStream input = null;
+            BufferedReader reader = null;
+            while (urls.hasMoreElements()) {
+                try {
+                    if (results == null) {
+                        results = new ArrayList<String>();
+                    }
+                    URL url = urls.nextElement();
+                    URLConnection conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    input = conn.getInputStream();
+                    if (input != null) {
+                        try {
+                            reader =
+                                  new BufferedReader(new InputStreamReader(input, "UTF-8"));
+                        } catch (Exception e) {
+                            // The DM_DEFAULT_ENCODING warning is acceptable here
+                            // because we explicitly *want* to use the Java runtime's
+                            // default encoding.
+                            reader =
+                                  new BufferedReader(new InputStreamReader(input));
+                        }
+                        for (String line = reader.readLine();
+                             line != null;
+                             line = reader.readLine()) {
+                            results.add(line.trim());
+                        }
+                    }
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "jsf.spi.provider.cannot_read_service",
+                                   new Object[] { INJECTION_SERVICE });
+                        LOGGER.log(Level.SEVERE,
+                                   e.toString(),
+                                   e);
+                    }
+                } finally {
+                    if (input != null) {
+                        try {
+                            input.close();
+                        } catch (Exception e) {
+                            if (LOGGER.isLoggable(Level.FINEST)) {
+                                LOGGER.log(Level.FINEST, "Closing stream", e);
+                            }
+                        }
+                    }
+                    if (reader != null) {
+                        try {
+                            reader.close();
+                        } catch (Exception e) {
+                            if (LOGGER.isLoggable(Level.FINEST)) {
+                                LOGGER.log(Level.FINEST, "Closing stream", e);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return ((results != null && !results.isEmpty())
+                ? results.toArray(new String[results.size()])
+                : EMPTY_ARRAY);
+
+    }
+
+
+    /**
+     * <p>A no-op implementation of <code>InjectionProvider</code> which will
+     * be used when the #INJECTION_PROVIDER_PROPERTY is not specified or
+     * is invalid.</p>
+     */
+    private static final class NoopInjectionProvider implements InjectionProvider, AnnotationScanner {
+
+        /**
+         * <p>This is a no-op.</p>
+         * @param managedBean target ManagedBean
+         */
+        public void inject(Object managedBean) { }
+
+        public Map<String, List<AnnotationScanner.ScannedAnnotation>> getAnnotatedClassesInCurrentModule(ServletContext extContext) throws InjectionProviderException {
+            return Collections.emptyMap();
+        }
+
+
+
+
+        /**
+         * <p>This is a no-op.</p>
+         * @param managedBean target ManagedBean
+         */
+        public void invokePreDestroy(Object managedBean) { }
+
+        /**
+         * <p>This is a no-op.</p>
+         * @param managedBean target ManagedBean
+         */
+        public void invokePostConstruct(Object managedBean)
+        throws InjectionProviderException { }
+
+    }
+
+} // END InjectionProviderFactory
diff --git a/com/sun/faces/spi/SerializationProvider.java b/com/sun/faces/spi/SerializationProvider.java
new file mode 100644
index 0000000..11609a6
--- /dev/null
+++ b/com/sun/faces/spi/SerializationProvider.java
@@ -0,0 +1,96 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import java.io.ObjectInputStream;
+import java.io.InputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+
+
+/**
+ * <p>This interface provides a mechanism to allow the use
+ * of alternate Java Serialization implementations.</p>
+ * 
+ * <p>The implementation of this interface *must* be thread-safe and must
+ * have a no-arg constructor.</p>
+ */
+public interface SerializationProvider {
+
+    /**
+     * <p>Creates a new <code>ObjectInputStream</code> wrapping the specified
+     * <code>source</code>.</p>
+     * 
+     * <p>It's <em>extremely important</em> that the ObjectInputStream
+     * returned by this method extends the serialization implementation's ObjectInputStream 
+     * and overrides the {@link ObjectInputStream#resolveClass(java.io.ObjectStreamClass)}
+     * of  to perform the following or the equivalent thereof: 
+     * <br>
+     * <pre>
+     *     return Class.forName(desc.getName(),true, 
+                Thread.currentThread().getContextClassLoader());
+     * </pre>
+     * <br>
+     * 
+     * If this step isn't done, there may be problems when deserializing.</p>
+     * 
+     * @param source the source stream from which to read the Object(s)
+     *  from
+     * @return an <code>ObjectInputStream</code>
+     * @throws IOException if an error occurs when creating the input stream
+     */
+    public ObjectInputStream createObjectInputStream(InputStream source)
+    throws IOException;
+
+
+    /**
+     * <p>Creates a new <code>ObjectOutputStream</code> wrapping the
+     * specified <code>destination</code>.</p>
+     * @param destination the destination of the serialized Object(s)
+     * @return an <code>ObjectOutputStream</code>
+     * @throws IOException if an error occurs when creating the output stream
+     */
+    public ObjectOutputStream createObjectOutputStream(OutputStream destination)
+    throws IOException;
+
+
+} // END SerializationProvider
diff --git a/com/sun/faces/spi/SerializationProviderFactory.java b/com/sun/faces/spi/SerializationProviderFactory.java
new file mode 100644
index 0000000..f8cac99
--- /dev/null
+++ b/com/sun/faces/spi/SerializationProviderFactory.java
@@ -0,0 +1,219 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import javax.faces.context.ExternalContext;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.ObjectInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.renderkit.ApplicationObjectInputStream;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+/**
+ * <p>A factory for creating <code>SerializationProvider</code>
+ * instances.</p>
+ */
+public class SerializationProviderFactory {
+    
+    /**
+     * <p>Our default <code>SerializationProvider</code>.</p>
+     */
+    private static final SerializationProvider JAVA_PROVIDER =
+          new SerializationProviderFactory.JavaSerializationProvider();
+
+    /**
+      * <p>The system property that will be checked for alternate
+      * <code>SerializationProvider</code> implementations.</p>
+      */
+     private static final String SERIALIZATION_PROVIDER_PROPERTY =
+           RIConstants.FACES_PREFIX + "SerializationProvider";
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+
+    /**
+     * <p>Creates a new instance of the class specified by the
+     * <code>com.sun.faces.InjectionProvider</code> system property.
+     * If this propery is not defined, then a default, no-op, 
+     * <code>InjectionProvider</code> will be returned.
+     * @param extContext the ExternalContext for this application
+     * @return an implementation of the <code>InjectionProvider</code>
+     *  interfaces
+     */
+    public static SerializationProvider createInstance(ExternalContext extContext) {
+        String providerClass = findProviderClass(extContext);
+                
+        
+        SerializationProvider provider = getProviderInstance(providerClass);
+
+        if (provider.getClass() != JavaSerializationProvider.class) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.spi.serialization.provider_configured",
+                           new Object[]{provider.getClass().getName()});
+            }
+        } 
+        return provider;
+        
+    }
+    
+
+    private static SerializationProvider getProviderInstance(String className) {
+        SerializationProvider provider = JAVA_PROVIDER;
+        if (className != null) {
+            try {
+                Class<?> clazz = Util.loadClass(className, SerializationProviderFactory.class);
+                if (implementsSerializationProvider(clazz)) {
+                    provider = (SerializationProvider) clazz.newInstance();
+                } else {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "jsf.spi.serialization.provider_not_implemented",
+                                   new Object[]{ className });
+                    }
+                }
+            } catch (ClassNotFoundException cnfe) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                   LOGGER.log(Level.SEVERE,
+                              "jsf.spi.serialization.provider_not_found",
+                              new Object[]{ className });
+                }
+            } catch (InstantiationException ie) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "jsf.spi.serialization.provider_cannot_instantiate",
+                               new Object[]{className});
+                    LOGGER.log(Level.SEVERE, "", ie);
+                }
+            } catch (IllegalAccessException iae) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "jsf.spi.serialization.provider_cannot_instantiate",
+                               new Object[]{className});
+                    LOGGER.log(Level.SEVERE, "", iae);
+                }
+            }
+        } 
+       
+        return provider;
+    }
+
+    /**
+     * <p>Determine if the specified class implements the
+     * <code>SerializationProvider</code> interfaces.</p>
+     * @param clazz the class in question
+     * @return <code>true</code> if <code>clazz</code> implements
+     *  the <code>SerializationProvider</code> interface
+     */
+    private static boolean implementsSerializationProvider(Class<?> clazz) {
+        return SerializationProvider.class.isAssignableFrom(clazz);
+    }
+    
+    /**
+     * Tries to find a provider class in a web context parameter.  If not
+     * present it tries to find it as a System property.  If still not found
+     * returns null.
+     *
+     * @param extContext The ExternalContext for this request
+     * @return The provider class name specified in the container configuration, 
+     *         or <code>null</code> if not found.
+     */
+    private static String findProviderClass(ExternalContext extContext) {
+        
+        WebConfiguration webConfig = WebConfiguration.getInstance(extContext);
+        
+        String provider = webConfig.getOptionValue(
+              WebContextInitParameter.SerializationProviderClass);
+        
+        if (provider != null) {
+            return provider;
+        } else {
+            return System.getProperty(SERIALIZATION_PROVIDER_PROPERTY);
+        }
+    }
+
+    /**
+     * <p>An implementation of <code>SerializationProvider</code> which
+     * uses standard Java serialization.</p>
+     */
+    private static final class JavaSerializationProvider 
+          implements SerializationProvider {
+
+
+        /**
+         * <p>Creates a new <code>ObjectOutputStream</code> wrapping the
+         * specified <code>destination</code>.</p>
+         *
+         * @param destination the destination of the serialized Object(s)
+         *
+         * @return an <code>ObjectOutputStream</code>
+         */
+        public ObjectOutputStream createObjectOutputStream(
+              OutputStream destination) throws IOException {
+            return new ObjectOutputStream(destination);
+        }
+
+        /**
+         * <p>Creates a new <code>ObjectInputStream</code> wrapping the specified
+         * <code>source</code>.</p>
+         *
+         * @param source the source stream from which to read the Object(s)
+         *               from
+         *
+         * @return an <code>ObjectInputStream</code>
+         */
+        public ObjectInputStream createObjectInputStream(InputStream source)
+        throws IOException {
+            return new ApplicationObjectInputStream(source);
+        }
+    }
+
+} // END InjectionProviderFactory
diff --git a/com/sun/faces/spi/ServiceFactory.java b/com/sun/faces/spi/ServiceFactory.java
new file mode 100644
index 0000000..a3e6552
--- /dev/null
+++ b/com/sun/faces/spi/ServiceFactory.java
@@ -0,0 +1,186 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.spi;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.FacesException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.List;
+import java.util.Enumeration;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.net.URL;
+import java.net.URLConnection;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.lang.reflect.Constructor;
+
+/**
+ * <p>
+ * Base class for service discovery.
+ * </p>
+ */
+final class ServiceFactoryUtils {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+    private static final String[] EMPTY_ARRAY = new String[0];
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    static Object getProviderFromEntry(String entry, Class<?>[] argumentTypes, Object[] arguments) {
+
+        if (entry == null) {
+            return null;
+        }
+
+        try {
+            Class<?> clazz = Util.loadClass(entry, null);
+            Constructor c = clazz.getDeclaredConstructor(argumentTypes);
+            if (c == null) {
+                throw new FacesException("Unable to find constructor accepting arguments: " + Arrays.toString(arguments));
+            }
+            return c.newInstance(arguments);
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE, e.toString(), e);
+            }
+            return null;
+        }
+
+    }
+
+
+    static String[] getServiceEntries(String key) {
+
+        List<String> results = null;
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            return EMPTY_ARRAY;
+        }
+
+        Enumeration<URL> urls = null;
+        String serviceName = "META-INF/services/" + key;
+        try {
+            urls = loader.getResources(serviceName);
+        } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           ioe.toString(),
+                           ioe);
+            }
+        }
+
+        if (urls != null) {
+            InputStream input = null;
+            BufferedReader reader = null;
+            while (urls.hasMoreElements()) {
+                try {
+                    if (results == null) {
+                        results = new ArrayList<String>();
+                    }
+                    URL url = urls.nextElement();
+                    URLConnection conn = url.openConnection();
+                    conn.setUseCaches(false);
+                    input = conn.getInputStream();
+                    if (input != null) {
+                        try {
+                            reader =
+                                  new BufferedReader(new InputStreamReader(input,
+                                                                           "UTF-8"));
+                        } catch (Exception e) {
+                            // The DM_DEFAULT_ENCODING warning is acceptable here
+                            // because we explicitly *want* to use the Java runtime's
+                            // default encoding.
+                            reader =
+                                  new BufferedReader(new InputStreamReader(input));
+                        }
+                        for (String line = reader.readLine();
+                             line != null;
+                             line = reader.readLine()) {
+                            results.add(line.trim());
+                        }
+                    }
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "jsf.spi.provider.cannot_read_service",
+                                   new Object[]{serviceName});
+                        LOGGER.log(Level.SEVERE,
+                                   e.toString(),
+                                   e);
+                    }
+                } finally {
+                    if (input != null) {
+                        try {
+                            input.close();
+                        } catch (Exception e) {
+                            if (LOGGER.isLoggable(Level.FINEST)) {
+                                LOGGER.log(Level.FINEST, "Closing stream", e);
+                            }
+                        }
+                    }
+                    if (reader != null) {
+                        try {
+                            reader.close();
+                        } catch (Exception e) {
+                            if (LOGGER.isLoggable(Level.FINEST)) {
+                                LOGGER.log(Level.FINEST, "Closing stream", e);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return ((results != null && !results.isEmpty())
+                ? results.toArray(new String[results.size()])
+                : EMPTY_ARRAY);
+
+    }
+
+}
diff --git a/com/sun/faces/taglib/FacesValidator.java b/com/sun/faces/taglib/FacesValidator.java
new file mode 100644
index 0000000..6e5c7a5
--- /dev/null
+++ b/com/sun/faces/taglib/FacesValidator.java
@@ -0,0 +1,369 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib;
+
+import java.io.IOException;
+
+import javax.servlet.jsp.tagext.PageData;
+import javax.servlet.jsp.tagext.TagLibraryValidator;
+import javax.servlet.jsp.tagext.ValidationMessage;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import com.sun.faces.util.Util;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * <p>Base class for all faces TLVs</p>
+ *
+ * @author Justyna Horwat
+ * @author Ed Burns
+ */
+public abstract class FacesValidator extends TagLibraryValidator {
+
+    //*********************************************************************
+    // Constants
+
+    //*********************************************************************
+    // Validation and configuration state (protected)
+
+    protected boolean failed;			// did the page fail?
+
+
+    //*********************************************************************
+    // Constants
+
+    private static final String JSF_CORE_URI = "http://java.sun.com/jsf/core";
+
+    private static final String JSF_HTML_URI = "http://java.sun.com/jsf/html";
+
+    private static final String JSTL_OLD_CORE_URI =
+        "http://java.sun.com/jstl/core";
+
+    private static final String JSTL_NEW_CORE_URI =
+        "http://java.sun.com/jsp/jstl/core";
+
+    // Prefix for JSF HTML tags
+    protected String JSF_HTML_PRE = null;
+
+
+    public String getJSF_HTML_PRE() {
+        return JSF_HTML_PRE;
+    }
+
+
+    // Prefix for JSF CORE tags
+    protected String JSF_CORE_PRE = null;
+
+
+    public String getJSF_CORE_PRE() {
+        return JSF_CORE_PRE;
+    }
+
+
+    // Prefix for JSTL CORE tags
+    protected String JSTL_CORE_PRE = null;
+
+
+    public String getJSTL_CORE_PRE() {
+        return JSTL_CORE_PRE;
+    }
+
+
+    // QName for JSTL conditional tag
+    protected String JSTL_IF_QN = ":if";
+
+
+    public String getJSTL_IF_QN() {
+        return JSTL_IF_QN;
+    }
+
+    // Local Name for JSTL conditional tag
+    protected String JSTL_IF_LN = "if";
+
+
+    public String getJSTL_IF_LN() {
+        return JSTL_IF_LN;
+    }
+
+    // QName for JSTL conditional tag
+    protected String JSTL_CHOOSE_QN = ":choose";
+
+
+    public String getJSTL_CHOOSE_QN() {
+        return JSTL_CHOOSE_QN;
+    }
+
+    // Local Name for JSTL conditional tag
+    protected String JSTL_CHOOSE_LN = "choose";
+
+
+    public String getJSTL_CHOOSE_LN() {
+        return JSTL_CHOOSE_LN;
+    }
+
+    // QName for JSTL iterator tag
+    protected String JSTL_FOREACH_QN = ":forEach";
+
+
+    public String getJSTL_FOREACH_QN() {
+        return JSTL_FOREACH_QN;
+    }
+
+    // Local Name for JSTL iterator tag
+    protected String JSTL_FOREACH_LN = "forEach";
+
+
+    public String getJSTL_FOREACH_LN() {
+        return JSTL_FOREACH_LN;
+    }
+
+    // QName for JSTL iterator tag
+    protected String JSTL_FORTOKENS_QN = ":forTokens";
+
+
+    public String getJSTL_FORTOKENS_QN() {
+        return JSTL_FORTOKENS_QN;
+    }
+
+    // Local Name for JSTL iterator tag
+    protected String JSTL_FORTOKENS_LN = "forTokens";
+
+
+    public String getJSTL_FORTOKENS_LN() {
+        return JSTL_FORTOKENS_LN;
+    }
+
+    // QName for JSF Form tag
+    protected String JSF_FORM_QN = ":form";
+
+
+    public String getJSF_FORM_QN() {
+        return JSF_FORM_QN;
+    }
+
+    // Local Name for JSF Form tag
+    protected String JSF_FORM_LN = "form";
+
+
+    public String getJSF_FORM_LN() {
+        return JSF_FORM_LN;
+    }
+
+    // QName for JSF subview tag
+    protected String JSF_SUBVIEW_QN = ":subview";
+
+
+    public String getJSF_SUBVIEW_QN() {
+        return JSF_SUBVIEW_QN;
+    }
+    
+    // Local Name for JSF subview tag
+    protected String JSF_SUBVIEW_LN = "subview";
+
+
+    public String getJSF_SUBVIEW_LN() {
+        return JSF_SUBVIEW_LN;
+    }
+    
+
+
+
+    //*********************************************************************
+    // Constructor and lifecycle management
+
+    public FacesValidator() {
+        super();
+        init();
+    }
+
+
+    protected void init() {
+        failed = false;
+    }
+
+
+    public void release() {
+        super.release();
+        init();
+    }
+
+    /**
+     * <p>Subclass override.  If it returns null, the subclass is
+     * telling us: do not validate.</p>
+     */
+
+
+    protected abstract DefaultHandler getSAXHandler();
+
+
+    protected abstract String getFailureMessage(String prefix, String uri);
+
+    //*********************************************************************
+    // Validation entry point
+
+    /**
+     * Validate a JSP page. Return an an array of Validation
+     * Messages if a validation failure occurs. Return null
+     * on success.
+     *
+     * @param prefix Value of directive prefix argument.
+     * @param uri    Value of directive uri argument.
+     * @param page   JspData page object.
+     * @return ValidationMessage[] An array of Validation messages.
+     */
+    public synchronized ValidationMessage[] validate(String prefix, String uri, PageData page) {
+        ValidationMessage[] result = null;
+        try {
+
+// get a handler
+            DefaultHandler h = getSAXHandler();
+
+	    // if the subclass doesn't want validation to ocurr
+	    if (null == h) {
+		// don't validate
+		return result;
+	    }
+
+            // parse the page
+            SAXParserFactory f = Util.createSAXParserFactory();
+            f.setNamespaceAware(true);
+            f.setValidating(true);
+            SAXParser p = f.newSAXParser();
+            p.parse(page.getInputStream(), h);
+
+//on validation failure generate error message
+            if (failed) {
+                result = vmFromString(getFailureMessage(prefix, uri));
+            } else {
+//success
+                result = null;
+            }
+
+        } catch (SAXException ex) {
+            result = vmFromString(ex.toString());
+        } catch (ParserConfigurationException ex) {
+            result = vmFromString(ex.toString());
+        } catch (IOException ex) {
+            result = vmFromString(ex.toString());
+        }
+        // Make sure all resources are released
+        this.release();
+        return result;
+    }
+
+
+    //*********************************************************************
+    // Utility functions
+
+    /**
+     * Construct a ValidationMessage[] from a single String and no ID.
+     *
+     * @param message Message string.
+     * @return ValidationMessage[] An array of Validation Messages.
+     */
+    private ValidationMessage[] vmFromString(String message) {
+        return new ValidationMessage[]{
+            new ValidationMessage(null, message)
+        };
+    }
+
+
+    protected void debugPrintTagData(String ns, String ln, String qn,
+                                     Attributes attrs) {
+        int
+            i = 0,
+            len = attrs.getLength();
+        System.out.println("nameSpace: " + ns + " localName: " + ln +
+                           " QName: " + qn);
+        for (i = 0; i < len; i++) {
+            System.out.println("\tlocalName: " + attrs.getLocalName(i));
+            System.out.println("\tQName: " + attrs.getQName(i));
+            System.out.println("\tvalue: " + attrs.getValue(i) + "\n");
+        }
+    }
+
+
+    /**
+     * This method provides for the ability of the TLV to use whatever
+     * user defined tag lib prefix is in the page to recognize tags.
+     */
+
+    protected void maybeSnagTLPrefixes(String qName, Attributes attrs) {
+
+        if (!qName.equals("jsp:root")) {
+            return;
+        }
+        int
+            colon,
+            i = 0,
+            len = attrs.getLength();
+        String
+            prefix = null,
+            value = null;
+        for (i = 0; i < len; i++) {
+            if (null != (value = attrs.getValue(i)) &&
+                null != (qName = attrs.getQName(i))) {
+                if (qName.startsWith("xmlns:") && 7 <= qName.length()) {
+                    prefix = qName.substring(6);
+                    if (value.equals(JSF_CORE_URI)) {
+                        JSF_CORE_PRE = prefix;
+                        JSF_SUBVIEW_QN = JSF_CORE_PRE + JSF_SUBVIEW_QN;
+                    } else if (value.equals(JSF_HTML_URI)) {
+                        JSF_HTML_PRE = prefix;
+                        JSF_FORM_QN = JSF_HTML_PRE + JSF_FORM_QN;
+                    } else if (value.equals(JSTL_OLD_CORE_URI) ||
+                        value.equals(JSTL_NEW_CORE_URI)) {
+                        JSTL_CORE_PRE = prefix;
+                        JSTL_IF_QN = JSTL_CORE_PRE + JSTL_IF_QN;
+                        JSTL_CHOOSE_QN = JSTL_CORE_PRE + JSTL_CHOOSE_QN;
+                        JSTL_FOREACH_QN = JSTL_CORE_PRE + JSTL_FOREACH_QN;
+                        JSTL_FORTOKENS_QN = JSTL_CORE_PRE + JSTL_FORTOKENS_QN;
+                    }
+                }
+            }
+        }
+    }
+
+}
diff --git a/com/sun/faces/taglib/TagParser.java b/com/sun/faces/taglib/TagParser.java
new file mode 100644
index 0000000..d299751
--- /dev/null
+++ b/com/sun/faces/taglib/TagParser.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib;
+
+/**
+ * <p>Interface defining the Validator Tag Parser implementation methods</p>
+ */
+public interface TagParser {
+
+    /**
+     * <p>Return the failure message for a failed validation</p>
+     *
+     * @return String Failure message
+     */
+    public String getMessage();
+
+
+    /**
+     * <p>Return false if validator conditions have not been met</p>
+     *
+     * @return boolean false if validation conditions have not been met
+     */
+    public boolean hasFailed();
+
+
+    /**
+     * <p>Set the Validator Info Bean</p>
+     */
+    public void setValidatorInfo(ValidatorInfo validatorInfo);
+
+
+    /**
+     * <p>Parse the starting element.  Parcel out to appropriate
+     * handler method.</p>
+     */
+    public void parseStartElement();
+
+
+    /**
+     * <p>Parse the ending element.  Parcel out to appropriate
+     * handler method.</p>
+     */
+    public void parseEndElement();
+}
diff --git a/com/sun/faces/taglib/ValidatorInfo.java b/com/sun/faces/taglib/ValidatorInfo.java
new file mode 100644
index 0000000..5e0c551
--- /dev/null
+++ b/com/sun/faces/taglib/ValidatorInfo.java
@@ -0,0 +1,158 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib;
+
+import org.xml.sax.Attributes;
+
+/**
+ *
+ *
+ */
+public class ValidatorInfo {
+
+    //*********************************************************************
+    // Validation and configuration state (protected)
+    private String nameSpace;
+    private String localName;
+    private String qName;
+    private Attributes attributes;
+    private FacesValidator validator;
+    private String prefix;
+    private String uri;
+
+
+    public void setNameSpace(String nameSpace) {
+        this.nameSpace = nameSpace;
+    }
+
+
+    public String getNameSpace() {
+        return nameSpace;
+    }
+
+
+    public void setLocalName(String localName) {
+        this.localName = localName;
+    }
+
+
+    public String getLocalName() {
+        return localName;
+    }
+
+
+    public void setQName(String qName) {
+        this.qName = qName;
+    }
+
+
+    public String getQName() {
+        return qName;
+    }
+
+
+    public void setAttributes(Attributes attributes) {
+        this.attributes = attributes;
+    }
+
+
+    public Attributes getAttributes() {
+        return attributes;
+    }
+
+
+    public void setValidator(FacesValidator validator) {
+        this.validator = validator;
+    }
+
+
+    public FacesValidator getValidator() {
+        return validator;
+    }
+
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+
+    public String getUri() {
+        return uri;
+    }
+
+
+    public String toString() {
+        StringBuffer mesg = new StringBuffer();
+
+        mesg.append("\nValidatorInfo NameSpace: ");
+        mesg.append(nameSpace);
+        mesg.append("\nValidatorInfo LocalName: ");
+        mesg.append(localName);
+        mesg.append("\nValidatorInfo QName: ");
+        mesg.append(qName);
+        for (int i = 0; i < attributes.getLength(); i++) {
+            mesg.append("\nValidatorInfo attributes.getQName(");
+            mesg.append(i);
+            mesg.append("): ");
+            mesg.append(attributes.getQName(i));
+            mesg.append("\nValidatorInfo attributes.getValue(");
+            mesg.append(i);
+            mesg.append("): ");
+            mesg.append(attributes.getValue(i));
+        }
+        mesg.append("\nValidatorInfo prefix: ");
+        mesg.append(prefix);
+        mesg.append("\nValidatorInfo uri: ");
+        mesg.append(uri);
+
+        return mesg.toString();
+    }
+}
diff --git a/com/sun/faces/taglib/html_basic/ColumnTag.java b/com/sun/faces/taglib/html_basic/ColumnTag.java
new file mode 100644
index 0000000..1415419
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/ColumnTag.java
@@ -0,0 +1,169 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import javax.faces.component.UIColumn;
+import javax.faces.component.UIComponent;
+import javax.faces.webapp.UIComponentELTag;
+import javax.servlet.jsp.JspException;
+import javax.el.ValueExpression;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+public class ColumnTag extends UIComponentELTag {
+
+    // Log instance for this class
+    private static final Logger logger = FacesLogger.TAGLIB.getLogger();
+
+    //
+    // Instance Variables
+    //
+
+
+    //
+    // Setter Methods
+    //
+    // PROPERTY: footerClass
+    private ValueExpression footerClass;
+    public void setFooterClass(ValueExpression footerClass) {
+        this.footerClass = footerClass;
+    }
+
+    // PROPERTY: headerClass
+    private ValueExpression headerClass;
+    public void setHeaderClass(ValueExpression headerClass) {
+        this.headerClass = headerClass;
+    }
+
+    // PROPERTY: rowHeader
+    private ValueExpression rowHeader;
+    public void setRowHeader(ValueExpression rowHeader) {
+        this.rowHeader = rowHeader;
+    }
+
+    //
+    // General Methods
+    //
+    public String getRendererType() {
+        return null;
+    }
+
+
+    public String getComponentType() {
+        return "javax.faces.Column";
+    }
+
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        UIColumn column;
+
+        try {
+            column = (UIColumn) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: UIColumn.  Perhaps you're missing a tag?");
+        }
+        if (footerClass != null) {
+            column.setValueExpression("footerClass", footerClass);
+        }
+        if (headerClass != null) {
+            column.setValueExpression("headerClass", headerClass);
+        }
+        if (rowHeader != null) {
+            column.setValueExpression("rowHeader", rowHeader);
+        }
+    }
+
+    //
+    // Methods From TagSupport
+    //
+
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (JspException e) {
+            if (logger.isLoggable(Level.WARNING)) {
+                logger.log(Level.WARNING, getDebugString(), e);
+            }
+            throw e;
+        } catch (Throwable t) {
+            if (logger.isLoggable(Level.WARNING)) {
+                logger.log(Level.WARNING, getDebugString(), t);
+            }
+            throw new JspException(t);
+        }
+    }
+
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (JspException e) {
+            if (logger.isLoggable(Level.WARNING)) {
+                logger.log(Level.WARNING, getDebugString(), e);
+            }
+            throw e;
+        } catch (Throwable t) {
+            if (logger.isLoggable(Level.WARNING)) {
+                logger.log(Level.WARNING, getDebugString(), t);
+            }
+            throw new JspException(t);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+        this.headerClass = null;
+        this.footerClass = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " +
+            this.getClass().getName();
+    }
+
+}
+
diff --git a/com/sun/faces/taglib/html_basic/CommandButtonTag.java b/com/sun/faces/taglib/html_basic/CommandButtonTag.java
new file mode 100644
index 0000000..49bb036
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/CommandButtonTag.java
@@ -0,0 +1,444 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class CommandButtonTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: action
+    private javax.el.MethodExpression action;
+    public void setAction(javax.el.MethodExpression action) {
+        this.action = action;
+    }
+
+    // PROPERTY: actionListener
+    private javax.el.MethodExpression actionListener;
+    public void setActionListener(javax.el.MethodExpression actionListener) {
+        this.actionListener = actionListener;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: alt
+    private javax.el.ValueExpression alt;
+    public void setAlt(javax.el.ValueExpression alt) {
+        this.alt = alt;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: image
+    private javax.el.ValueExpression image;
+    public void setImage(javax.el.ValueExpression image) {
+        this.image = image;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: type
+    private javax.el.ValueExpression type;
+    public void setType(javax.el.ValueExpression type) {
+        this.type = type;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Button";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlCommandButton";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UICommand command = null;
+        try {
+            command = (javax.faces.component.UICommand) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UICommand.  Perhaps you're missing a tag?");
+        }
+
+        if (action != null) {
+            command.setActionExpression(action);
+        }
+        if (actionListener != null) {
+            command.addActionListener(new MethodExpressionActionListener(actionListener));
+        }
+        if (immediate != null) {
+            command.setValueExpression("immediate", immediate);
+        }
+        if (value != null) {
+            command.setValueExpression("value", value);
+        }
+        if (accesskey != null) {
+            command.setValueExpression("accesskey", accesskey);
+        }
+        if (alt != null) {
+            command.setValueExpression("alt", alt);
+        }
+        if (dir != null) {
+            command.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            command.setValueExpression("disabled", disabled);
+        }
+        if (image != null) {
+            command.setValueExpression("image", image);
+        }
+        if (label != null) {
+            command.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            command.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            command.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            command.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            command.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            command.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            command.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            command.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            command.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            command.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            command.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            command.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            command.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            command.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            command.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            command.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            command.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            command.setValueExpression("role", role);
+        }
+        if (style != null) {
+            command.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            command.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            command.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            command.setValueExpression("title", title);
+        }
+        if (type != null) {
+            command.setValueExpression("type", type);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.action = null;
+        this.actionListener = null;
+        this.immediate = null;
+        this.value = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.alt = null;
+        this.dir = null;
+        this.disabled = null;
+        this.image = null;
+        this.label = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+        this.type = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/CommandLinkTag.java b/com/sun/faces/taglib/html_basic/CommandLinkTag.java
new file mode 100644
index 0000000..015d971
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/CommandLinkTag.java
@@ -0,0 +1,454 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class CommandLinkTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: action
+    private javax.el.MethodExpression action;
+    public void setAction(javax.el.MethodExpression action) {
+        this.action = action;
+    }
+
+    // PROPERTY: actionListener
+    private javax.el.MethodExpression actionListener;
+    public void setActionListener(javax.el.MethodExpression actionListener) {
+        this.actionListener = actionListener;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: charset
+    private javax.el.ValueExpression charset;
+    public void setCharset(javax.el.ValueExpression charset) {
+        this.charset = charset;
+    }
+
+    // PROPERTY: coords
+    private javax.el.ValueExpression coords;
+    public void setCoords(javax.el.ValueExpression coords) {
+        this.coords = coords;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: hreflang
+    private javax.el.ValueExpression hreflang;
+    public void setHreflang(javax.el.ValueExpression hreflang) {
+        this.hreflang = hreflang;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: rel
+    private javax.el.ValueExpression rel;
+    public void setRel(javax.el.ValueExpression rel) {
+        this.rel = rel;
+    }
+
+    // PROPERTY: rev
+    private javax.el.ValueExpression rev;
+    public void setRev(javax.el.ValueExpression rev) {
+        this.rev = rev;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: shape
+    private javax.el.ValueExpression shape;
+    public void setShape(javax.el.ValueExpression shape) {
+        this.shape = shape;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: target
+    private javax.el.ValueExpression target;
+    public void setTarget(javax.el.ValueExpression target) {
+        this.target = target;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: type
+    private javax.el.ValueExpression type;
+    public void setType(javax.el.ValueExpression type) {
+        this.type = type;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Link";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlCommandLink";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UICommand command = null;
+        try {
+            command = (javax.faces.component.UICommand) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UICommand.  Perhaps you're missing a tag?");
+        }
+
+        if (action != null) {
+            command.setActionExpression(action);
+        }
+        if (actionListener != null) {
+            command.addActionListener(new MethodExpressionActionListener(actionListener));
+        }
+        if (immediate != null) {
+            command.setValueExpression("immediate", immediate);
+        }
+        if (value != null) {
+            command.setValueExpression("value", value);
+        }
+        if (accesskey != null) {
+            command.setValueExpression("accesskey", accesskey);
+        }
+        if (charset != null) {
+            command.setValueExpression("charset", charset);
+        }
+        if (coords != null) {
+            command.setValueExpression("coords", coords);
+        }
+        if (dir != null) {
+            command.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            command.setValueExpression("disabled", disabled);
+        }
+        if (hreflang != null) {
+            command.setValueExpression("hreflang", hreflang);
+        }
+        if (lang != null) {
+            command.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            command.setValueExpression("onblur", onblur);
+        }
+        if (onclick != null) {
+            command.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            command.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            command.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            command.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            command.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            command.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            command.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            command.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            command.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            command.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            command.setValueExpression("onmouseup", onmouseup);
+        }
+        if (rel != null) {
+            command.setValueExpression("rel", rel);
+        }
+        if (rev != null) {
+            command.setValueExpression("rev", rev);
+        }
+        if (role != null) {
+            command.setValueExpression("role", role);
+        }
+        if (shape != null) {
+            command.setValueExpression("shape", shape);
+        }
+        if (style != null) {
+            command.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            command.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            command.setValueExpression("tabindex", tabindex);
+        }
+        if (target != null) {
+            command.setValueExpression("target", target);
+        }
+        if (title != null) {
+            command.setValueExpression("title", title);
+        }
+        if (type != null) {
+            command.setValueExpression("type", type);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.action = null;
+        this.actionListener = null;
+        this.immediate = null;
+        this.value = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.charset = null;
+        this.coords = null;
+        this.dir = null;
+        this.disabled = null;
+        this.hreflang = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.rel = null;
+        this.rev = null;
+        this.role = null;
+        this.shape = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.target = null;
+        this.title = null;
+        this.type = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/CommandTagParserImpl.java b/com/sun/faces/taglib/html_basic/CommandTagParserImpl.java
new file mode 100644
index 0000000..2918574
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/CommandTagParserImpl.java
@@ -0,0 +1,171 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.taglib.TagParser;
+import com.sun.faces.taglib.ValidatorInfo;
+import org.xml.sax.Attributes;
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+/**
+ * <p> Parses the command tag attributes and verifies that the required
+ * attributes are present</p>
+ */
+public class CommandTagParserImpl implements TagParser {
+
+    //*********************************************************************
+    // Validation and configuration state (protected)
+
+    // PENDING(edburns): Make this localizable
+    private StringBuffer failureMessages;	// failureMessages
+    private boolean failed;
+    private ValidatorInfo validatorInfo;
+
+    //*********************************************************************
+    // Constructor and lifecycle management
+
+    /**
+     * <p>CommandTagParserImpl constructor</p>
+     */
+    public CommandTagParserImpl() {
+        failed = false;
+        failureMessages = new StringBuffer();
+    }
+
+
+    /**
+     * <p>Set the validator info object that has the current tag
+     * information</p>
+     *
+     * @param validatorInfo object with current tag info
+     */
+    public void setValidatorInfo(ValidatorInfo validatorInfo) {
+        this.validatorInfo = validatorInfo;
+    }
+
+
+    /**
+     * <p>Get the failure message</p>
+     *
+     * @return String Failure message
+     */
+    public String getMessage() {
+        return failureMessages.toString();
+    }
+
+
+    /**
+     * <p>Return false if validator conditions have not been met</p>
+     *
+     * @return boolean false if validation conditions have not been met
+     */
+    public boolean hasFailed() {
+        return failed;
+    }
+
+
+    /**
+     * <p>Parse the starting element.  Parcel out to appropriate
+     * handler method.</p>
+     */
+    public void parseStartElement() {
+        String ns = validatorInfo.getNameSpace();
+        String ln = validatorInfo.getLocalName();
+
+        if (ns.equals(RIConstants.HTML_NAMESPACE)) {
+            if (ln.equals("commandButton")) {
+                handleCommandButton();
+            }
+        
+        }
+    }
+
+
+    /**
+     * <p>Parse the end element</p>
+     */
+    public void parseEndElement() {
+        //no parsing required
+    }
+
+
+    //*********************************************************************
+    // Private methods
+
+    /**
+     * <p>set failed flag to true unless tag has a value attribute</p>.
+     * <p/>
+     * <p>PRECONDITION: qn is a commandButton</p>
+     */
+    private void handleCommandButton() {
+        Attributes attrs = validatorInfo.getAttributes();
+        String ln = validatorInfo.getLocalName();
+        boolean hasValue = false;
+        boolean hasImage = false;
+	boolean hasBinding = false;
+
+        for (int i = 0; i < attrs.getLength(); i++) {
+            if (attrs.getLocalName(i).equals("value")) {
+                hasValue = true;
+            }
+            if (attrs.getLocalName(i).equals("image")) {
+                hasImage = true;
+            }
+            if (attrs.getLocalName(i).equals("binding")) {
+                hasBinding = true;
+            }
+        }
+        if (failed = (!hasBinding && !(hasValue || hasImage))) {
+            Object[] obj = new Object[1];
+            obj[0] = ln;
+            ResourceBundle rb = ResourceBundle.getBundle(
+                RIConstants.TLV_RESOURCE_LOCATION);
+            failureMessages.append(
+                MessageFormat.format(rb.getString("TLV_COMMAND_ERROR"), obj));
+            failureMessages.append("\n");
+        }
+
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/DataTableTag.java b/com/sun/faces/taglib/html_basic/DataTableTag.java
new file mode 100644
index 0000000..c78d031
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/DataTableTag.java
@@ -0,0 +1,474 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class DataTableTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: first
+    private javax.el.ValueExpression first;
+    public void setFirst(javax.el.ValueExpression first) {
+        this.first = first;
+    }
+
+    // PROPERTY: rows
+    private javax.el.ValueExpression rows;
+    public void setRows(javax.el.ValueExpression rows) {
+        this.rows = rows;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: var
+    private java.lang.String _var;
+    public void setVar(java.lang.String _var) {
+        this._var = _var;
+    }
+
+    // PROPERTY: bgcolor
+    private javax.el.ValueExpression bgcolor;
+    public void setBgcolor(javax.el.ValueExpression bgcolor) {
+        this.bgcolor = bgcolor;
+    }
+
+    // PROPERTY: bodyrows
+    private javax.el.ValueExpression bodyrows;
+    public void setBodyrows(javax.el.ValueExpression bodyrows) {
+        this.bodyrows = bodyrows;
+    }
+
+    // PROPERTY: border
+    private javax.el.ValueExpression border;
+    public void setBorder(javax.el.ValueExpression border) {
+        this.border = border;
+    }
+
+    // PROPERTY: captionClass
+    private javax.el.ValueExpression captionClass;
+    public void setCaptionClass(javax.el.ValueExpression captionClass) {
+        this.captionClass = captionClass;
+    }
+
+    // PROPERTY: captionStyle
+    private javax.el.ValueExpression captionStyle;
+    public void setCaptionStyle(javax.el.ValueExpression captionStyle) {
+        this.captionStyle = captionStyle;
+    }
+
+    // PROPERTY: cellpadding
+    private javax.el.ValueExpression cellpadding;
+    public void setCellpadding(javax.el.ValueExpression cellpadding) {
+        this.cellpadding = cellpadding;
+    }
+
+    // PROPERTY: cellspacing
+    private javax.el.ValueExpression cellspacing;
+    public void setCellspacing(javax.el.ValueExpression cellspacing) {
+        this.cellspacing = cellspacing;
+    }
+
+    // PROPERTY: columnClasses
+    private javax.el.ValueExpression columnClasses;
+    public void setColumnClasses(javax.el.ValueExpression columnClasses) {
+        this.columnClasses = columnClasses;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: footerClass
+    private javax.el.ValueExpression footerClass;
+    public void setFooterClass(javax.el.ValueExpression footerClass) {
+        this.footerClass = footerClass;
+    }
+
+    // PROPERTY: frame
+    private javax.el.ValueExpression frame;
+    public void setFrame(javax.el.ValueExpression frame) {
+        this.frame = frame;
+    }
+
+    // PROPERTY: headerClass
+    private javax.el.ValueExpression headerClass;
+    public void setHeaderClass(javax.el.ValueExpression headerClass) {
+        this.headerClass = headerClass;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: rowClasses
+    private javax.el.ValueExpression rowClasses;
+    public void setRowClasses(javax.el.ValueExpression rowClasses) {
+        this.rowClasses = rowClasses;
+    }
+
+    // PROPERTY: rules
+    private javax.el.ValueExpression rules;
+    public void setRules(javax.el.ValueExpression rules) {
+        this.rules = rules;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: summary
+    private javax.el.ValueExpression summary;
+    public void setSummary(javax.el.ValueExpression summary) {
+        this.summary = summary;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: width
+    private javax.el.ValueExpression width;
+    public void setWidth(javax.el.ValueExpression width) {
+        this.width = width;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Table";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlDataTable";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIData data = null;
+        try {
+            data = (javax.faces.component.UIData) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIData.  Perhaps you're missing a tag?");
+        }
+
+        if (first != null) {
+            data.setValueExpression("first", first);
+        }
+        if (rows != null) {
+            data.setValueExpression("rows", rows);
+        }
+        if (value != null) {
+            data.setValueExpression("value", value);
+        }
+        if (_var != null) {
+            data.setVar(_var);
+        }
+        if (bgcolor != null) {
+            data.setValueExpression("bgcolor", bgcolor);
+        }
+        if (bodyrows != null) {
+            data.setValueExpression("bodyrows", bodyrows);
+        }
+        if (border != null) {
+            data.setValueExpression("border", border);
+        }
+        if (captionClass != null) {
+            data.setValueExpression("captionClass", captionClass);
+        }
+        if (captionStyle != null) {
+            data.setValueExpression("captionStyle", captionStyle);
+        }
+        if (cellpadding != null) {
+            data.setValueExpression("cellpadding", cellpadding);
+        }
+        if (cellspacing != null) {
+            data.setValueExpression("cellspacing", cellspacing);
+        }
+        if (columnClasses != null) {
+            data.setValueExpression("columnClasses", columnClasses);
+        }
+        if (dir != null) {
+            data.setValueExpression("dir", dir);
+        }
+        if (footerClass != null) {
+            data.setValueExpression("footerClass", footerClass);
+        }
+        if (frame != null) {
+            data.setValueExpression("frame", frame);
+        }
+        if (headerClass != null) {
+            data.setValueExpression("headerClass", headerClass);
+        }
+        if (lang != null) {
+            data.setValueExpression("lang", lang);
+        }
+        if (onclick != null) {
+            data.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            data.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onkeydown != null) {
+            data.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            data.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            data.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            data.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            data.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            data.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            data.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            data.setValueExpression("onmouseup", onmouseup);
+        }
+        if (role != null) {
+            data.setValueExpression("role", role);
+        }
+        if (rowClasses != null) {
+            data.setValueExpression("rowClasses", rowClasses);
+        }
+        if (rules != null) {
+            data.setValueExpression("rules", rules);
+        }
+        if (style != null) {
+            data.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            data.setValueExpression("styleClass", styleClass);
+        }
+        if (summary != null) {
+            data.setValueExpression("summary", summary);
+        }
+        if (title != null) {
+            data.setValueExpression("title", title);
+        }
+        if (width != null) {
+            data.setValueExpression("width", width);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.first = null;
+        this.rows = null;
+        this.value = null;
+        this._var = null;
+
+        // rendered attributes
+        this.bgcolor = null;
+        this.bodyrows = null;
+        this.border = null;
+        this.captionClass = null;
+        this.captionStyle = null;
+        this.cellpadding = null;
+        this.cellspacing = null;
+        this.columnClasses = null;
+        this.dir = null;
+        this.footerClass = null;
+        this.frame = null;
+        this.headerClass = null;
+        this.lang = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.role = null;
+        this.rowClasses = null;
+        this.rules = null;
+        this.style = null;
+        this.styleClass = null;
+        this.summary = null;
+        this.title = null;
+        this.width = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/FormTag.java b/com/sun/faces/taglib/html_basic/FormTag.java
new file mode 100644
index 0000000..0a9eec4
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/FormTag.java
@@ -0,0 +1,354 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class FormTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: prependId
+    private javax.el.ValueExpression prependId;
+    public void setPrependId(javax.el.ValueExpression prependId) {
+        this.prependId = prependId;
+    }
+
+    // PROPERTY: accept
+    private javax.el.ValueExpression accept;
+    public void setAccept(javax.el.ValueExpression accept) {
+        this.accept = accept;
+    }
+
+    // PROPERTY: acceptcharset
+    private javax.el.ValueExpression acceptcharset;
+    public void setAcceptcharset(javax.el.ValueExpression acceptcharset) {
+        this.acceptcharset = acceptcharset;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: enctype
+    private javax.el.ValueExpression enctype;
+    public void setEnctype(javax.el.ValueExpression enctype) {
+        this.enctype = enctype;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onreset
+    private javax.el.ValueExpression onreset;
+    public void setOnreset(javax.el.ValueExpression onreset) {
+        this.onreset = onreset;
+    }
+
+    // PROPERTY: onsubmit
+    private javax.el.ValueExpression onsubmit;
+    public void setOnsubmit(javax.el.ValueExpression onsubmit) {
+        this.onsubmit = onsubmit;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: target
+    private javax.el.ValueExpression target;
+    public void setTarget(javax.el.ValueExpression target) {
+        this.target = target;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Form";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlForm";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIForm form = null;
+        try {
+            form = (javax.faces.component.UIForm) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIForm.  Perhaps you're missing a tag?");
+        }
+
+        if (prependId != null) {
+            form.setValueExpression("prependId", prependId);
+        }
+        if (accept != null) {
+            form.setValueExpression("accept", accept);
+        }
+        if (acceptcharset != null) {
+            form.setValueExpression("acceptcharset", acceptcharset);
+        }
+        if (dir != null) {
+            form.setValueExpression("dir", dir);
+        }
+        if (enctype != null) {
+            form.setValueExpression("enctype", enctype);
+        }
+        if (lang != null) {
+            form.setValueExpression("lang", lang);
+        }
+        if (onclick != null) {
+            form.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            form.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onkeydown != null) {
+            form.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            form.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            form.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            form.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            form.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            form.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            form.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            form.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onreset != null) {
+            form.setValueExpression("onreset", onreset);
+        }
+        if (onsubmit != null) {
+            form.setValueExpression("onsubmit", onsubmit);
+        }
+        if (role != null) {
+            form.setValueExpression("role", role);
+        }
+        if (style != null) {
+            form.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            form.setValueExpression("styleClass", styleClass);
+        }
+        if (target != null) {
+            form.setValueExpression("target", target);
+        }
+        if (title != null) {
+            form.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.prependId = null;
+
+        // rendered attributes
+        this.accept = null;
+        this.acceptcharset = null;
+        this.dir = null;
+        this.enctype = null;
+        this.lang = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onreset = null;
+        this.onsubmit = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.target = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/GraphicImageTag.java b/com/sun/faces/taglib/html_basic/GraphicImageTag.java
new file mode 100644
index 0000000..c5b6935
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/GraphicImageTag.java
@@ -0,0 +1,384 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class GraphicImageTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: url
+    private javax.el.ValueExpression url;
+    public void setUrl(javax.el.ValueExpression url) {
+        this.url = url;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: alt
+    private javax.el.ValueExpression alt;
+    public void setAlt(javax.el.ValueExpression alt) {
+        this.alt = alt;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: height
+    private javax.el.ValueExpression height;
+    public void setHeight(javax.el.ValueExpression height) {
+        this.height = height;
+    }
+
+    // PROPERTY: ismap
+    private javax.el.ValueExpression ismap;
+    public void setIsmap(javax.el.ValueExpression ismap) {
+        this.ismap = ismap;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: library
+    private javax.el.ValueExpression library;
+    public void setLibrary(javax.el.ValueExpression library) {
+        this.library = library;
+    }
+
+    // PROPERTY: longdesc
+    private javax.el.ValueExpression longdesc;
+    public void setLongdesc(javax.el.ValueExpression longdesc) {
+        this.longdesc = longdesc;
+    }
+
+    // PROPERTY: name
+    private javax.el.ValueExpression name;
+    public void setName(javax.el.ValueExpression name) {
+        this.name = name;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: usemap
+    private javax.el.ValueExpression usemap;
+    public void setUsemap(javax.el.ValueExpression usemap) {
+        this.usemap = usemap;
+    }
+
+    // PROPERTY: width
+    private javax.el.ValueExpression width;
+    public void setWidth(javax.el.ValueExpression width) {
+        this.width = width;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Image";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlGraphicImage";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIGraphic graphic = null;
+        try {
+            graphic = (javax.faces.component.UIGraphic) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIGraphic.  Perhaps you're missing a tag?");
+        }
+
+        if (url != null) {
+            graphic.setValueExpression("url", url);
+        }
+        if (value != null) {
+            graphic.setValueExpression("value", value);
+        }
+        if (alt != null) {
+            graphic.setValueExpression("alt", alt);
+        }
+        if (dir != null) {
+            graphic.setValueExpression("dir", dir);
+        }
+        if (height != null) {
+            graphic.setValueExpression("height", height);
+        }
+        if (ismap != null) {
+            graphic.setValueExpression("ismap", ismap);
+        }
+        if (lang != null) {
+            graphic.setValueExpression("lang", lang);
+        }
+        if (library != null) {
+            graphic.setValueExpression("library", library);
+        }
+        if (longdesc != null) {
+            graphic.setValueExpression("longdesc", longdesc);
+        }
+        if (name != null) {
+            graphic.setValueExpression("name", name);
+        }
+        if (onclick != null) {
+            graphic.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            graphic.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onkeydown != null) {
+            graphic.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            graphic.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            graphic.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            graphic.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            graphic.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            graphic.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            graphic.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            graphic.setValueExpression("onmouseup", onmouseup);
+        }
+        if (role != null) {
+            graphic.setValueExpression("role", role);
+        }
+        if (style != null) {
+            graphic.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            graphic.setValueExpression("styleClass", styleClass);
+        }
+        if (title != null) {
+            graphic.setValueExpression("title", title);
+        }
+        if (usemap != null) {
+            graphic.setValueExpression("usemap", usemap);
+        }
+        if (width != null) {
+            graphic.setValueExpression("width", width);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.url = null;
+        this.value = null;
+
+        // rendered attributes
+        this.alt = null;
+        this.dir = null;
+        this.height = null;
+        this.ismap = null;
+        this.lang = null;
+        this.library = null;
+        this.longdesc = null;
+        this.name = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.title = null;
+        this.usemap = null;
+        this.width = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/HtmlBasicValidator.java b/com/sun/faces/taglib/html_basic/HtmlBasicValidator.java
new file mode 100644
index 0000000..a45ddd0
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/HtmlBasicValidator.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.taglib.FacesValidator;
+import com.sun.faces.taglib.ValidatorInfo;
+import com.sun.faces.util.Util;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+
+
+/**
+ * <p>Top level validator for the html_basic tld</p>
+ *
+ * @author Justyna Horwat
+ * @author Ed Burns
+ */
+public class HtmlBasicValidator extends FacesValidator {
+
+    //*********************************************************************
+    // Validation and configuration state (protected)
+    private ValidatorInfo validatorInfo;
+    private CommandTagParserImpl commandTagParser;
+
+
+    //*********************************************************************
+    // Constructor and lifecycle management
+
+    public HtmlBasicValidator() {
+        super();
+        init();
+    }
+
+
+    protected void init() {
+        super.init();
+        failed = false;
+        validatorInfo = new ValidatorInfo();
+
+        commandTagParser = new CommandTagParserImpl();
+        commandTagParser.setValidatorInfo(validatorInfo);
+    }
+
+
+    public void release() {
+        super.release();
+        init();
+    }
+
+
+    protected DefaultHandler getSAXHandler() {
+	// don't run the TLV if we're in designTime
+	if (java.beans.Beans.isDesignTime()) {
+	    return null;
+	}
+	
+        return new HtmlBasicValidatorHandler();
+    }
+
+
+    protected String getFailureMessage(String prefix, String uri) {
+        // we should only get called if this Validator failed        
+
+        StringBuffer result = new StringBuffer();
+      
+        if (commandTagParser.getMessage() != null) {
+            result.append(commandTagParser.getMessage());
+        }
+        return result.toString();
+    }
+	    
+    //*********************************************************************
+    // SAX handler
+
+    /**
+     * The handler that provides the base of the TLV implementation.
+     */
+    private class HtmlBasicValidatorHandler extends DefaultHandler {
+
+        /**
+         * Parse the starting element.  Parcel out to appropriate
+         * handler method.
+         *
+         * @param ns Element name space.
+         * @param ln Element local name.
+         * @param qn Element QName.
+         * @param attrs  Element's Attribute list.
+         */
+        public void startElement(String ns,
+                                 String ln,
+                                 String qn,
+                                 Attributes attrs) {
+            maybeSnagTLPrefixes(qn, attrs);
+            validatorInfo.setNameSpace(ns);
+            validatorInfo.setLocalName(ln);
+            validatorInfo.setQName(qn);
+            validatorInfo.setAttributes(attrs);
+
+            commandTagParser.parseStartElement();
+            if (commandTagParser.hasFailed()) {
+                failed = true;
+            }
+        }
+
+
+        /**
+         * Parse the ending element. If it is a specific JSTL tag
+         * make sure that the nested count is decreased.
+         *
+         * @param ns Element namespace.
+         * @param ln Element local name.
+         * @param qn Element QName.
+         */
+        public void endElement(String ns, String ln, String qn) {
+        }
+    }
+}
diff --git a/com/sun/faces/taglib/html_basic/InputFileTag.java b/com/sun/faces/taglib/html_basic/InputFileTag.java
new file mode 100644
index 0000000..b8ab04f
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/InputFileTag.java
@@ -0,0 +1,510 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class InputFileTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: alt
+    private javax.el.ValueExpression alt;
+    public void setAlt(javax.el.ValueExpression alt) {
+        this.alt = alt;
+    }
+
+    // PROPERTY: autocomplete
+    private javax.el.ValueExpression autocomplete;
+    public void setAutocomplete(javax.el.ValueExpression autocomplete) {
+        this.autocomplete = autocomplete;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: maxlength
+    private javax.el.ValueExpression maxlength;
+    public void setMaxlength(javax.el.ValueExpression maxlength) {
+        this.maxlength = maxlength;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: size
+    private javax.el.ValueExpression size;
+    public void setSize(javax.el.ValueExpression size) {
+        this.size = size;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.File";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlInputFile";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIInput input = null;
+        try {
+            input = (javax.faces.component.UIInput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIInput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                input.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                input.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            input.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            input.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            input.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            input.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            input.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            input.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            input.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            input.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            input.setValueExpression("accesskey", accesskey);
+        }
+        if (alt != null) {
+            input.setValueExpression("alt", alt);
+        }
+        if (autocomplete != null) {
+            input.setValueExpression("autocomplete", autocomplete);
+        }
+        if (dir != null) {
+            input.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            input.setValueExpression("disabled", disabled);
+        }
+        if (label != null) {
+            input.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            input.setValueExpression("lang", lang);
+        }
+        if (maxlength != null) {
+            input.setValueExpression("maxlength", maxlength);
+        }
+        if (onblur != null) {
+            input.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            input.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            input.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            input.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            input.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            input.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            input.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            input.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            input.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            input.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            input.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            input.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            input.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            input.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            input.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            input.setValueExpression("role", role);
+        }
+        if (size != null) {
+            input.setValueExpression("size", size);
+        }
+        if (style != null) {
+            input.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            input.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            input.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            input.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.alt = null;
+        this.autocomplete = null;
+        this.dir = null;
+        this.disabled = null;
+        this.label = null;
+        this.lang = null;
+        this.maxlength = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.size = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/InputHiddenTag.java b/com/sun/faces/taglib/html_basic/InputHiddenTag.java
new file mode 100644
index 0000000..4aa1e56
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/InputHiddenTag.java
@@ -0,0 +1,220 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class InputHiddenTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Hidden";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlInputHidden";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIInput input = null;
+        try {
+            input = (javax.faces.component.UIInput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIInput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                input.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                input.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            input.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            input.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            input.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            input.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            input.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            input.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            input.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            input.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/InputSecretTag.java b/com/sun/faces/taglib/html_basic/InputSecretTag.java
new file mode 100644
index 0000000..7bdee04
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/InputSecretTag.java
@@ -0,0 +1,520 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class InputSecretTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: alt
+    private javax.el.ValueExpression alt;
+    public void setAlt(javax.el.ValueExpression alt) {
+        this.alt = alt;
+    }
+
+    // PROPERTY: autocomplete
+    private javax.el.ValueExpression autocomplete;
+    public void setAutocomplete(javax.el.ValueExpression autocomplete) {
+        this.autocomplete = autocomplete;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: maxlength
+    private javax.el.ValueExpression maxlength;
+    public void setMaxlength(javax.el.ValueExpression maxlength) {
+        this.maxlength = maxlength;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: redisplay
+    private javax.el.ValueExpression redisplay;
+    public void setRedisplay(javax.el.ValueExpression redisplay) {
+        this.redisplay = redisplay;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: size
+    private javax.el.ValueExpression size;
+    public void setSize(javax.el.ValueExpression size) {
+        this.size = size;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Secret";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlInputSecret";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIInput input = null;
+        try {
+            input = (javax.faces.component.UIInput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIInput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                input.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                input.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            input.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            input.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            input.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            input.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            input.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            input.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            input.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            input.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            input.setValueExpression("accesskey", accesskey);
+        }
+        if (alt != null) {
+            input.setValueExpression("alt", alt);
+        }
+        if (autocomplete != null) {
+            input.setValueExpression("autocomplete", autocomplete);
+        }
+        if (dir != null) {
+            input.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            input.setValueExpression("disabled", disabled);
+        }
+        if (label != null) {
+            input.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            input.setValueExpression("lang", lang);
+        }
+        if (maxlength != null) {
+            input.setValueExpression("maxlength", maxlength);
+        }
+        if (onblur != null) {
+            input.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            input.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            input.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            input.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            input.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            input.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            input.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            input.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            input.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            input.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            input.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            input.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            input.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            input.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            input.setValueExpression("readonly", readonly);
+        }
+        if (redisplay != null) {
+            input.setValueExpression("redisplay", redisplay);
+        }
+        if (role != null) {
+            input.setValueExpression("role", role);
+        }
+        if (size != null) {
+            input.setValueExpression("size", size);
+        }
+        if (style != null) {
+            input.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            input.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            input.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            input.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.alt = null;
+        this.autocomplete = null;
+        this.dir = null;
+        this.disabled = null;
+        this.label = null;
+        this.lang = null;
+        this.maxlength = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.redisplay = null;
+        this.role = null;
+        this.size = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/InputTextTag.java b/com/sun/faces/taglib/html_basic/InputTextTag.java
new file mode 100644
index 0000000..506fd02
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/InputTextTag.java
@@ -0,0 +1,510 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class InputTextTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: alt
+    private javax.el.ValueExpression alt;
+    public void setAlt(javax.el.ValueExpression alt) {
+        this.alt = alt;
+    }
+
+    // PROPERTY: autocomplete
+    private javax.el.ValueExpression autocomplete;
+    public void setAutocomplete(javax.el.ValueExpression autocomplete) {
+        this.autocomplete = autocomplete;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: maxlength
+    private javax.el.ValueExpression maxlength;
+    public void setMaxlength(javax.el.ValueExpression maxlength) {
+        this.maxlength = maxlength;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: size
+    private javax.el.ValueExpression size;
+    public void setSize(javax.el.ValueExpression size) {
+        this.size = size;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Text";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlInputText";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIInput input = null;
+        try {
+            input = (javax.faces.component.UIInput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIInput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                input.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                input.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            input.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            input.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            input.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            input.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            input.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            input.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            input.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            input.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            input.setValueExpression("accesskey", accesskey);
+        }
+        if (alt != null) {
+            input.setValueExpression("alt", alt);
+        }
+        if (autocomplete != null) {
+            input.setValueExpression("autocomplete", autocomplete);
+        }
+        if (dir != null) {
+            input.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            input.setValueExpression("disabled", disabled);
+        }
+        if (label != null) {
+            input.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            input.setValueExpression("lang", lang);
+        }
+        if (maxlength != null) {
+            input.setValueExpression("maxlength", maxlength);
+        }
+        if (onblur != null) {
+            input.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            input.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            input.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            input.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            input.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            input.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            input.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            input.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            input.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            input.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            input.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            input.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            input.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            input.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            input.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            input.setValueExpression("role", role);
+        }
+        if (size != null) {
+            input.setValueExpression("size", size);
+        }
+        if (style != null) {
+            input.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            input.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            input.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            input.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.alt = null;
+        this.autocomplete = null;
+        this.dir = null;
+        this.disabled = null;
+        this.label = null;
+        this.lang = null;
+        this.maxlength = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.size = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/InputTextareaTag.java b/com/sun/faces/taglib/html_basic/InputTextareaTag.java
new file mode 100644
index 0000000..3e18c46
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/InputTextareaTag.java
@@ -0,0 +1,490 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class InputTextareaTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: cols
+    private javax.el.ValueExpression cols;
+    public void setCols(javax.el.ValueExpression cols) {
+        this.cols = cols;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: rows
+    private javax.el.ValueExpression rows;
+    public void setRows(javax.el.ValueExpression rows) {
+        this.rows = rows;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Textarea";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlInputTextarea";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIInput input = null;
+        try {
+            input = (javax.faces.component.UIInput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIInput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                input.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                input.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            input.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            input.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            input.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            input.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            input.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            input.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            input.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            input.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            input.setValueExpression("accesskey", accesskey);
+        }
+        if (cols != null) {
+            input.setValueExpression("cols", cols);
+        }
+        if (dir != null) {
+            input.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            input.setValueExpression("disabled", disabled);
+        }
+        if (label != null) {
+            input.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            input.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            input.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            input.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            input.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            input.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            input.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            input.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            input.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            input.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            input.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            input.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            input.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            input.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            input.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            input.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            input.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            input.setValueExpression("role", role);
+        }
+        if (rows != null) {
+            input.setValueExpression("rows", rows);
+        }
+        if (style != null) {
+            input.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            input.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            input.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            input.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.cols = null;
+        this.dir = null;
+        this.disabled = null;
+        this.label = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.rows = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/MessageTag.java b/com/sun/faces/taglib/html_basic/MessageTag.java
new file mode 100644
index 0000000..41164f4
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/MessageTag.java
@@ -0,0 +1,304 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class MessageTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: for
+    private javax.el.ValueExpression _for;
+    public void setFor(javax.el.ValueExpression _for) {
+        this._for = _for;
+    }
+
+    // PROPERTY: showDetail
+    private javax.el.ValueExpression showDetail;
+    public void setShowDetail(javax.el.ValueExpression showDetail) {
+        this.showDetail = showDetail;
+    }
+
+    // PROPERTY: showSummary
+    private javax.el.ValueExpression showSummary;
+    public void setShowSummary(javax.el.ValueExpression showSummary) {
+        this.showSummary = showSummary;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: errorClass
+    private javax.el.ValueExpression errorClass;
+    public void setErrorClass(javax.el.ValueExpression errorClass) {
+        this.errorClass = errorClass;
+    }
+
+    // PROPERTY: errorStyle
+    private javax.el.ValueExpression errorStyle;
+    public void setErrorStyle(javax.el.ValueExpression errorStyle) {
+        this.errorStyle = errorStyle;
+    }
+
+    // PROPERTY: fatalClass
+    private javax.el.ValueExpression fatalClass;
+    public void setFatalClass(javax.el.ValueExpression fatalClass) {
+        this.fatalClass = fatalClass;
+    }
+
+    // PROPERTY: fatalStyle
+    private javax.el.ValueExpression fatalStyle;
+    public void setFatalStyle(javax.el.ValueExpression fatalStyle) {
+        this.fatalStyle = fatalStyle;
+    }
+
+    // PROPERTY: infoClass
+    private javax.el.ValueExpression infoClass;
+    public void setInfoClass(javax.el.ValueExpression infoClass) {
+        this.infoClass = infoClass;
+    }
+
+    // PROPERTY: infoStyle
+    private javax.el.ValueExpression infoStyle;
+    public void setInfoStyle(javax.el.ValueExpression infoStyle) {
+        this.infoStyle = infoStyle;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: tooltip
+    private javax.el.ValueExpression tooltip;
+    public void setTooltip(javax.el.ValueExpression tooltip) {
+        this.tooltip = tooltip;
+    }
+
+    // PROPERTY: warnClass
+    private javax.el.ValueExpression warnClass;
+    public void setWarnClass(javax.el.ValueExpression warnClass) {
+        this.warnClass = warnClass;
+    }
+
+    // PROPERTY: warnStyle
+    private javax.el.ValueExpression warnStyle;
+    public void setWarnStyle(javax.el.ValueExpression warnStyle) {
+        this.warnStyle = warnStyle;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Message";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlMessage";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIMessage message = null;
+        try {
+            message = (javax.faces.component.UIMessage) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIMessage.  Perhaps you're missing a tag?");
+        }
+
+        if (_for != null) {
+            message.setValueExpression("for", _for);
+        }
+        if (showDetail != null) {
+            message.setValueExpression("showDetail", showDetail);
+        }
+        if (showSummary != null) {
+            message.setValueExpression("showSummary", showSummary);
+        }
+        if (dir != null) {
+            message.setValueExpression("dir", dir);
+        }
+        if (errorClass != null) {
+            message.setValueExpression("errorClass", errorClass);
+        }
+        if (errorStyle != null) {
+            message.setValueExpression("errorStyle", errorStyle);
+        }
+        if (fatalClass != null) {
+            message.setValueExpression("fatalClass", fatalClass);
+        }
+        if (fatalStyle != null) {
+            message.setValueExpression("fatalStyle", fatalStyle);
+        }
+        if (infoClass != null) {
+            message.setValueExpression("infoClass", infoClass);
+        }
+        if (infoStyle != null) {
+            message.setValueExpression("infoStyle", infoStyle);
+        }
+        if (lang != null) {
+            message.setValueExpression("lang", lang);
+        }
+        if (role != null) {
+            message.setValueExpression("role", role);
+        }
+        if (style != null) {
+            message.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            message.setValueExpression("styleClass", styleClass);
+        }
+        if (title != null) {
+            message.setValueExpression("title", title);
+        }
+        if (tooltip != null) {
+            message.setValueExpression("tooltip", tooltip);
+        }
+        if (warnClass != null) {
+            message.setValueExpression("warnClass", warnClass);
+        }
+        if (warnStyle != null) {
+            message.setValueExpression("warnStyle", warnStyle);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this._for = null;
+        this.showDetail = null;
+        this.showSummary = null;
+
+        // rendered attributes
+        this.dir = null;
+        this.errorClass = null;
+        this.errorStyle = null;
+        this.fatalClass = null;
+        this.fatalStyle = null;
+        this.infoClass = null;
+        this.infoStyle = null;
+        this.lang = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.title = null;
+        this.tooltip = null;
+        this.warnClass = null;
+        this.warnStyle = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/MessagesTag.java b/com/sun/faces/taglib/html_basic/MessagesTag.java
new file mode 100644
index 0000000..a8d1853
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/MessagesTag.java
@@ -0,0 +1,324 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class MessagesTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: for
+    private javax.el.ValueExpression _for;
+    public void setFor(javax.el.ValueExpression _for) {
+        this._for = _for;
+    }
+
+    // PROPERTY: globalOnly
+    private javax.el.ValueExpression globalOnly;
+    public void setGlobalOnly(javax.el.ValueExpression globalOnly) {
+        this.globalOnly = globalOnly;
+    }
+
+    // PROPERTY: showDetail
+    private javax.el.ValueExpression showDetail;
+    public void setShowDetail(javax.el.ValueExpression showDetail) {
+        this.showDetail = showDetail;
+    }
+
+    // PROPERTY: showSummary
+    private javax.el.ValueExpression showSummary;
+    public void setShowSummary(javax.el.ValueExpression showSummary) {
+        this.showSummary = showSummary;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: errorClass
+    private javax.el.ValueExpression errorClass;
+    public void setErrorClass(javax.el.ValueExpression errorClass) {
+        this.errorClass = errorClass;
+    }
+
+    // PROPERTY: errorStyle
+    private javax.el.ValueExpression errorStyle;
+    public void setErrorStyle(javax.el.ValueExpression errorStyle) {
+        this.errorStyle = errorStyle;
+    }
+
+    // PROPERTY: fatalClass
+    private javax.el.ValueExpression fatalClass;
+    public void setFatalClass(javax.el.ValueExpression fatalClass) {
+        this.fatalClass = fatalClass;
+    }
+
+    // PROPERTY: fatalStyle
+    private javax.el.ValueExpression fatalStyle;
+    public void setFatalStyle(javax.el.ValueExpression fatalStyle) {
+        this.fatalStyle = fatalStyle;
+    }
+
+    // PROPERTY: infoClass
+    private javax.el.ValueExpression infoClass;
+    public void setInfoClass(javax.el.ValueExpression infoClass) {
+        this.infoClass = infoClass;
+    }
+
+    // PROPERTY: infoStyle
+    private javax.el.ValueExpression infoStyle;
+    public void setInfoStyle(javax.el.ValueExpression infoStyle) {
+        this.infoStyle = infoStyle;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: layout
+    private javax.el.ValueExpression layout;
+    public void setLayout(javax.el.ValueExpression layout) {
+        this.layout = layout;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: tooltip
+    private javax.el.ValueExpression tooltip;
+    public void setTooltip(javax.el.ValueExpression tooltip) {
+        this.tooltip = tooltip;
+    }
+
+    // PROPERTY: warnClass
+    private javax.el.ValueExpression warnClass;
+    public void setWarnClass(javax.el.ValueExpression warnClass) {
+        this.warnClass = warnClass;
+    }
+
+    // PROPERTY: warnStyle
+    private javax.el.ValueExpression warnStyle;
+    public void setWarnStyle(javax.el.ValueExpression warnStyle) {
+        this.warnStyle = warnStyle;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Messages";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlMessages";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIMessages messages = null;
+        try {
+            messages = (javax.faces.component.UIMessages) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIMessages.  Perhaps you're missing a tag?");
+        }
+
+        if (_for != null) {
+            messages.setValueExpression("for", _for);
+        }
+        if (globalOnly != null) {
+            messages.setValueExpression("globalOnly", globalOnly);
+        }
+        if (showDetail != null) {
+            messages.setValueExpression("showDetail", showDetail);
+        }
+        if (showSummary != null) {
+            messages.setValueExpression("showSummary", showSummary);
+        }
+        if (dir != null) {
+            messages.setValueExpression("dir", dir);
+        }
+        if (errorClass != null) {
+            messages.setValueExpression("errorClass", errorClass);
+        }
+        if (errorStyle != null) {
+            messages.setValueExpression("errorStyle", errorStyle);
+        }
+        if (fatalClass != null) {
+            messages.setValueExpression("fatalClass", fatalClass);
+        }
+        if (fatalStyle != null) {
+            messages.setValueExpression("fatalStyle", fatalStyle);
+        }
+        if (infoClass != null) {
+            messages.setValueExpression("infoClass", infoClass);
+        }
+        if (infoStyle != null) {
+            messages.setValueExpression("infoStyle", infoStyle);
+        }
+        if (lang != null) {
+            messages.setValueExpression("lang", lang);
+        }
+        if (layout != null) {
+            messages.setValueExpression("layout", layout);
+        }
+        if (role != null) {
+            messages.setValueExpression("role", role);
+        }
+        if (style != null) {
+            messages.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            messages.setValueExpression("styleClass", styleClass);
+        }
+        if (title != null) {
+            messages.setValueExpression("title", title);
+        }
+        if (tooltip != null) {
+            messages.setValueExpression("tooltip", tooltip);
+        }
+        if (warnClass != null) {
+            messages.setValueExpression("warnClass", warnClass);
+        }
+        if (warnStyle != null) {
+            messages.setValueExpression("warnStyle", warnStyle);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this._for = null;
+        this.globalOnly = null;
+        this.showDetail = null;
+        this.showSummary = null;
+
+        // rendered attributes
+        this.dir = null;
+        this.errorClass = null;
+        this.errorStyle = null;
+        this.fatalClass = null;
+        this.fatalStyle = null;
+        this.infoClass = null;
+        this.infoStyle = null;
+        this.lang = null;
+        this.layout = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.title = null;
+        this.tooltip = null;
+        this.warnClass = null;
+        this.warnStyle = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/OutputFormatTag.java b/com/sun/faces/taglib/html_basic/OutputFormatTag.java
new file mode 100644
index 0000000..6468f0c
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/OutputFormatTag.java
@@ -0,0 +1,220 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class OutputFormatTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: escape
+    private javax.el.ValueExpression escape;
+    public void setEscape(javax.el.ValueExpression escape) {
+        this.escape = escape;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Format";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlOutputFormat";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIOutput output = null;
+        try {
+            output = (javax.faces.component.UIOutput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIOutput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                output.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                output.setConverter(conv);
+            }
+        }
+
+        if (value != null) {
+            output.setValueExpression("value", value);
+        }
+        if (dir != null) {
+            output.setValueExpression("dir", dir);
+        }
+        if (escape != null) {
+            output.setValueExpression("escape", escape);
+        }
+        if (lang != null) {
+            output.setValueExpression("lang", lang);
+        }
+        if (role != null) {
+            output.setValueExpression("role", role);
+        }
+        if (style != null) {
+            output.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            output.setValueExpression("styleClass", styleClass);
+        }
+        if (title != null) {
+            output.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.value = null;
+
+        // rendered attributes
+        this.dir = null;
+        this.escape = null;
+        this.lang = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/OutputLabelTag.java b/com/sun/faces/taglib/html_basic/OutputLabelTag.java
new file mode 100644
index 0000000..a819978
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/OutputLabelTag.java
@@ -0,0 +1,370 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class OutputLabelTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: escape
+    private javax.el.ValueExpression escape;
+    public void setEscape(javax.el.ValueExpression escape) {
+        this.escape = escape;
+    }
+
+    // PROPERTY: for
+    private javax.el.ValueExpression _for;
+    public void setFor(javax.el.ValueExpression _for) {
+        this._for = _for;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Label";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlOutputLabel";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIOutput output = null;
+        try {
+            output = (javax.faces.component.UIOutput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIOutput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                output.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                output.setConverter(conv);
+            }
+        }
+
+        if (value != null) {
+            output.setValueExpression("value", value);
+        }
+        if (accesskey != null) {
+            output.setValueExpression("accesskey", accesskey);
+        }
+        if (dir != null) {
+            output.setValueExpression("dir", dir);
+        }
+        if (escape != null) {
+            output.setValueExpression("escape", escape);
+        }
+        if (_for != null) {
+            output.setValueExpression("for", _for);
+        }
+        if (lang != null) {
+            output.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            output.setValueExpression("onblur", onblur);
+        }
+        if (onclick != null) {
+            output.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            output.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            output.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            output.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            output.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            output.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            output.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            output.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            output.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            output.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            output.setValueExpression("onmouseup", onmouseup);
+        }
+        if (role != null) {
+            output.setValueExpression("role", role);
+        }
+        if (style != null) {
+            output.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            output.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            output.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            output.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.value = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.dir = null;
+        this.escape = null;
+        this._for = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/OutputLinkTag.java b/com/sun/faces/taglib/html_basic/OutputLinkTag.java
new file mode 100644
index 0000000..999604a
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/OutputLinkTag.java
@@ -0,0 +1,440 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class OutputLinkTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: charset
+    private javax.el.ValueExpression charset;
+    public void setCharset(javax.el.ValueExpression charset) {
+        this.charset = charset;
+    }
+
+    // PROPERTY: coords
+    private javax.el.ValueExpression coords;
+    public void setCoords(javax.el.ValueExpression coords) {
+        this.coords = coords;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: hreflang
+    private javax.el.ValueExpression hreflang;
+    public void setHreflang(javax.el.ValueExpression hreflang) {
+        this.hreflang = hreflang;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: rel
+    private javax.el.ValueExpression rel;
+    public void setRel(javax.el.ValueExpression rel) {
+        this.rel = rel;
+    }
+
+    // PROPERTY: rev
+    private javax.el.ValueExpression rev;
+    public void setRev(javax.el.ValueExpression rev) {
+        this.rev = rev;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: shape
+    private javax.el.ValueExpression shape;
+    public void setShape(javax.el.ValueExpression shape) {
+        this.shape = shape;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: target
+    private javax.el.ValueExpression target;
+    public void setTarget(javax.el.ValueExpression target) {
+        this.target = target;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: type
+    private javax.el.ValueExpression type;
+    public void setType(javax.el.ValueExpression type) {
+        this.type = type;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Link";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlOutputLink";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIOutput output = null;
+        try {
+            output = (javax.faces.component.UIOutput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIOutput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                output.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                output.setConverter(conv);
+            }
+        }
+
+        if (value != null) {
+            output.setValueExpression("value", value);
+        }
+        if (accesskey != null) {
+            output.setValueExpression("accesskey", accesskey);
+        }
+        if (charset != null) {
+            output.setValueExpression("charset", charset);
+        }
+        if (coords != null) {
+            output.setValueExpression("coords", coords);
+        }
+        if (dir != null) {
+            output.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            output.setValueExpression("disabled", disabled);
+        }
+        if (hreflang != null) {
+            output.setValueExpression("hreflang", hreflang);
+        }
+        if (lang != null) {
+            output.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            output.setValueExpression("onblur", onblur);
+        }
+        if (onclick != null) {
+            output.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            output.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            output.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            output.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            output.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            output.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            output.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            output.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            output.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            output.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            output.setValueExpression("onmouseup", onmouseup);
+        }
+        if (rel != null) {
+            output.setValueExpression("rel", rel);
+        }
+        if (rev != null) {
+            output.setValueExpression("rev", rev);
+        }
+        if (role != null) {
+            output.setValueExpression("role", role);
+        }
+        if (shape != null) {
+            output.setValueExpression("shape", shape);
+        }
+        if (style != null) {
+            output.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            output.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            output.setValueExpression("tabindex", tabindex);
+        }
+        if (target != null) {
+            output.setValueExpression("target", target);
+        }
+        if (title != null) {
+            output.setValueExpression("title", title);
+        }
+        if (type != null) {
+            output.setValueExpression("type", type);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.value = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.charset = null;
+        this.coords = null;
+        this.dir = null;
+        this.disabled = null;
+        this.hreflang = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.rel = null;
+        this.rev = null;
+        this.role = null;
+        this.shape = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.target = null;
+        this.title = null;
+        this.type = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/OutputTextTag.java b/com/sun/faces/taglib/html_basic/OutputTextTag.java
new file mode 100644
index 0000000..9af6446
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/OutputTextTag.java
@@ -0,0 +1,220 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class OutputTextTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: escape
+    private javax.el.ValueExpression escape;
+    public void setEscape(javax.el.ValueExpression escape) {
+        this.escape = escape;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Text";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlOutputText";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIOutput output = null;
+        try {
+            output = (javax.faces.component.UIOutput) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIOutput.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                output.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                output.setConverter(conv);
+            }
+        }
+
+        if (value != null) {
+            output.setValueExpression("value", value);
+        }
+        if (dir != null) {
+            output.setValueExpression("dir", dir);
+        }
+        if (escape != null) {
+            output.setValueExpression("escape", escape);
+        }
+        if (lang != null) {
+            output.setValueExpression("lang", lang);
+        }
+        if (role != null) {
+            output.setValueExpression("role", role);
+        }
+        if (style != null) {
+            output.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            output.setValueExpression("styleClass", styleClass);
+        }
+        if (title != null) {
+            output.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.value = null;
+
+        // rendered attributes
+        this.dir = null;
+        this.escape = null;
+        this.lang = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/PanelGridTag.java b/com/sun/faces/taglib/html_basic/PanelGridTag.java
new file mode 100644
index 0000000..a116153
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/PanelGridTag.java
@@ -0,0 +1,444 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class PanelGridTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: bgcolor
+    private javax.el.ValueExpression bgcolor;
+    public void setBgcolor(javax.el.ValueExpression bgcolor) {
+        this.bgcolor = bgcolor;
+    }
+
+    // PROPERTY: bodyrows
+    private javax.el.ValueExpression bodyrows;
+    public void setBodyrows(javax.el.ValueExpression bodyrows) {
+        this.bodyrows = bodyrows;
+    }
+
+    // PROPERTY: border
+    private javax.el.ValueExpression border;
+    public void setBorder(javax.el.ValueExpression border) {
+        this.border = border;
+    }
+
+    // PROPERTY: captionClass
+    private javax.el.ValueExpression captionClass;
+    public void setCaptionClass(javax.el.ValueExpression captionClass) {
+        this.captionClass = captionClass;
+    }
+
+    // PROPERTY: captionStyle
+    private javax.el.ValueExpression captionStyle;
+    public void setCaptionStyle(javax.el.ValueExpression captionStyle) {
+        this.captionStyle = captionStyle;
+    }
+
+    // PROPERTY: cellpadding
+    private javax.el.ValueExpression cellpadding;
+    public void setCellpadding(javax.el.ValueExpression cellpadding) {
+        this.cellpadding = cellpadding;
+    }
+
+    // PROPERTY: cellspacing
+    private javax.el.ValueExpression cellspacing;
+    public void setCellspacing(javax.el.ValueExpression cellspacing) {
+        this.cellspacing = cellspacing;
+    }
+
+    // PROPERTY: columnClasses
+    private javax.el.ValueExpression columnClasses;
+    public void setColumnClasses(javax.el.ValueExpression columnClasses) {
+        this.columnClasses = columnClasses;
+    }
+
+    // PROPERTY: columns
+    private javax.el.ValueExpression columns;
+    public void setColumns(javax.el.ValueExpression columns) {
+        this.columns = columns;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: footerClass
+    private javax.el.ValueExpression footerClass;
+    public void setFooterClass(javax.el.ValueExpression footerClass) {
+        this.footerClass = footerClass;
+    }
+
+    // PROPERTY: frame
+    private javax.el.ValueExpression frame;
+    public void setFrame(javax.el.ValueExpression frame) {
+        this.frame = frame;
+    }
+
+    // PROPERTY: headerClass
+    private javax.el.ValueExpression headerClass;
+    public void setHeaderClass(javax.el.ValueExpression headerClass) {
+        this.headerClass = headerClass;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: rowClasses
+    private javax.el.ValueExpression rowClasses;
+    public void setRowClasses(javax.el.ValueExpression rowClasses) {
+        this.rowClasses = rowClasses;
+    }
+
+    // PROPERTY: rules
+    private javax.el.ValueExpression rules;
+    public void setRules(javax.el.ValueExpression rules) {
+        this.rules = rules;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: summary
+    private javax.el.ValueExpression summary;
+    public void setSummary(javax.el.ValueExpression summary) {
+        this.summary = summary;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: width
+    private javax.el.ValueExpression width;
+    public void setWidth(javax.el.ValueExpression width) {
+        this.width = width;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Grid";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlPanelGrid";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIPanel panel = null;
+        try {
+            panel = (javax.faces.component.UIPanel) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIPanel.  Perhaps you're missing a tag?");
+        }
+
+        if (bgcolor != null) {
+            panel.setValueExpression("bgcolor", bgcolor);
+        }
+        if (bodyrows != null) {
+            panel.setValueExpression("bodyrows", bodyrows);
+        }
+        if (border != null) {
+            panel.setValueExpression("border", border);
+        }
+        if (captionClass != null) {
+            panel.setValueExpression("captionClass", captionClass);
+        }
+        if (captionStyle != null) {
+            panel.setValueExpression("captionStyle", captionStyle);
+        }
+        if (cellpadding != null) {
+            panel.setValueExpression("cellpadding", cellpadding);
+        }
+        if (cellspacing != null) {
+            panel.setValueExpression("cellspacing", cellspacing);
+        }
+        if (columnClasses != null) {
+            panel.setValueExpression("columnClasses", columnClasses);
+        }
+        if (columns != null) {
+            panel.setValueExpression("columns", columns);
+        }
+        if (dir != null) {
+            panel.setValueExpression("dir", dir);
+        }
+        if (footerClass != null) {
+            panel.setValueExpression("footerClass", footerClass);
+        }
+        if (frame != null) {
+            panel.setValueExpression("frame", frame);
+        }
+        if (headerClass != null) {
+            panel.setValueExpression("headerClass", headerClass);
+        }
+        if (lang != null) {
+            panel.setValueExpression("lang", lang);
+        }
+        if (onclick != null) {
+            panel.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            panel.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onkeydown != null) {
+            panel.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            panel.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            panel.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            panel.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            panel.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            panel.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            panel.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            panel.setValueExpression("onmouseup", onmouseup);
+        }
+        if (role != null) {
+            panel.setValueExpression("role", role);
+        }
+        if (rowClasses != null) {
+            panel.setValueExpression("rowClasses", rowClasses);
+        }
+        if (rules != null) {
+            panel.setValueExpression("rules", rules);
+        }
+        if (style != null) {
+            panel.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            panel.setValueExpression("styleClass", styleClass);
+        }
+        if (summary != null) {
+            panel.setValueExpression("summary", summary);
+        }
+        if (title != null) {
+            panel.setValueExpression("title", title);
+        }
+        if (width != null) {
+            panel.setValueExpression("width", width);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+
+        // rendered attributes
+        this.bgcolor = null;
+        this.bodyrows = null;
+        this.border = null;
+        this.captionClass = null;
+        this.captionStyle = null;
+        this.cellpadding = null;
+        this.cellspacing = null;
+        this.columnClasses = null;
+        this.columns = null;
+        this.dir = null;
+        this.footerClass = null;
+        this.frame = null;
+        this.headerClass = null;
+        this.lang = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.role = null;
+        this.rowClasses = null;
+        this.rules = null;
+        this.style = null;
+        this.styleClass = null;
+        this.summary = null;
+        this.title = null;
+        this.width = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/PanelGroupTag.java b/com/sun/faces/taglib/html_basic/PanelGroupTag.java
new file mode 100644
index 0000000..f43188c
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/PanelGroupTag.java
@@ -0,0 +1,254 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class PanelGroupTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: layout
+    private javax.el.ValueExpression layout;
+    public void setLayout(javax.el.ValueExpression layout) {
+        this.layout = layout;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Group";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlPanelGroup";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UIPanel panel = null;
+        try {
+            panel = (javax.faces.component.UIPanel) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UIPanel.  Perhaps you're missing a tag?");
+        }
+
+        if (layout != null) {
+            panel.setValueExpression("layout", layout);
+        }
+        if (onclick != null) {
+            panel.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            panel.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onkeydown != null) {
+            panel.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            panel.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            panel.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            panel.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            panel.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            panel.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            panel.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            panel.setValueExpression("onmouseup", onmouseup);
+        }
+        if (style != null) {
+            panel.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            panel.setValueExpression("styleClass", styleClass);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+
+        // rendered attributes
+        this.layout = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.style = null;
+        this.styleClass = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/SelectBooleanCheckboxTag.java b/com/sun/faces/taglib/html_basic/SelectBooleanCheckboxTag.java
new file mode 100644
index 0000000..c5e3b34
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/SelectBooleanCheckboxTag.java
@@ -0,0 +1,470 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class SelectBooleanCheckboxTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Checkbox";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlSelectBooleanCheckbox";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UISelectBoolean selectboolean = null;
+        try {
+            selectboolean = (javax.faces.component.UISelectBoolean) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UISelectBoolean.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                selectboolean.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                selectboolean.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            selectboolean.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            selectboolean.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            selectboolean.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            selectboolean.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            selectboolean.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            selectboolean.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            selectboolean.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            selectboolean.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            selectboolean.setValueExpression("accesskey", accesskey);
+        }
+        if (dir != null) {
+            selectboolean.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            selectboolean.setValueExpression("disabled", disabled);
+        }
+        if (label != null) {
+            selectboolean.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            selectboolean.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            selectboolean.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            selectboolean.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            selectboolean.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            selectboolean.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            selectboolean.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            selectboolean.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            selectboolean.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            selectboolean.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            selectboolean.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            selectboolean.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            selectboolean.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            selectboolean.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            selectboolean.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            selectboolean.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            selectboolean.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            selectboolean.setValueExpression("role", role);
+        }
+        if (style != null) {
+            selectboolean.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            selectboolean.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            selectboolean.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            selectboolean.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.dir = null;
+        this.disabled = null;
+        this.label = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/SelectManyCheckboxTag.java b/com/sun/faces/taglib/html_basic/SelectManyCheckboxTag.java
new file mode 100644
index 0000000..8c8bd67
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/SelectManyCheckboxTag.java
@@ -0,0 +1,550 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class SelectManyCheckboxTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: border
+    private javax.el.ValueExpression border;
+    public void setBorder(javax.el.ValueExpression border) {
+        this.border = border;
+    }
+
+    // PROPERTY: collectionType
+    private javax.el.ValueExpression collectionType;
+    public void setCollectionType(javax.el.ValueExpression collectionType) {
+        this.collectionType = collectionType;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: disabledClass
+    private javax.el.ValueExpression disabledClass;
+    public void setDisabledClass(javax.el.ValueExpression disabledClass) {
+        this.disabledClass = disabledClass;
+    }
+
+    // PROPERTY: enabledClass
+    private javax.el.ValueExpression enabledClass;
+    public void setEnabledClass(javax.el.ValueExpression enabledClass) {
+        this.enabledClass = enabledClass;
+    }
+
+    // PROPERTY: hideNoSelectionOption
+    private javax.el.ValueExpression hideNoSelectionOption;
+    public void setHideNoSelectionOption(javax.el.ValueExpression hideNoSelectionOption) {
+        this.hideNoSelectionOption = hideNoSelectionOption;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: layout
+    private javax.el.ValueExpression layout;
+    public void setLayout(javax.el.ValueExpression layout) {
+        this.layout = layout;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: selectedClass
+    private javax.el.ValueExpression selectedClass;
+    public void setSelectedClass(javax.el.ValueExpression selectedClass) {
+        this.selectedClass = selectedClass;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+    // PROPERTY: unselectedClass
+    private javax.el.ValueExpression unselectedClass;
+    public void setUnselectedClass(javax.el.ValueExpression unselectedClass) {
+        this.unselectedClass = unselectedClass;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Checkbox";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlSelectManyCheckbox";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UISelectMany selectmany = null;
+        try {
+            selectmany = (javax.faces.component.UISelectMany) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UISelectMany.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                selectmany.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                selectmany.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            selectmany.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            selectmany.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            selectmany.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            selectmany.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            selectmany.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            selectmany.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            selectmany.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            selectmany.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            selectmany.setValueExpression("accesskey", accesskey);
+        }
+        if (border != null) {
+            selectmany.setValueExpression("border", border);
+        }
+        if (collectionType != null) {
+            selectmany.setValueExpression("collectionType", collectionType);
+        }
+        if (dir != null) {
+            selectmany.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            selectmany.setValueExpression("disabled", disabled);
+        }
+        if (disabledClass != null) {
+            selectmany.setValueExpression("disabledClass", disabledClass);
+        }
+        if (enabledClass != null) {
+            selectmany.setValueExpression("enabledClass", enabledClass);
+        }
+        if (hideNoSelectionOption != null) {
+            selectmany.setValueExpression("hideNoSelectionOption", hideNoSelectionOption);
+        }
+        if (label != null) {
+            selectmany.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            selectmany.setValueExpression("lang", lang);
+        }
+        if (layout != null) {
+            selectmany.setValueExpression("layout", layout);
+        }
+        if (onblur != null) {
+            selectmany.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            selectmany.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            selectmany.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            selectmany.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            selectmany.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            selectmany.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            selectmany.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            selectmany.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            selectmany.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            selectmany.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            selectmany.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            selectmany.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            selectmany.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            selectmany.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            selectmany.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            selectmany.setValueExpression("role", role);
+        }
+        if (selectedClass != null) {
+            selectmany.setValueExpression("selectedClass", selectedClass);
+        }
+        if (style != null) {
+            selectmany.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            selectmany.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            selectmany.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            selectmany.setValueExpression("title", title);
+        }
+        if (unselectedClass != null) {
+            selectmany.setValueExpression("unselectedClass", unselectedClass);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.border = null;
+        this.collectionType = null;
+        this.dir = null;
+        this.disabled = null;
+        this.disabledClass = null;
+        this.enabledClass = null;
+        this.hideNoSelectionOption = null;
+        this.label = null;
+        this.lang = null;
+        this.layout = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.selectedClass = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+        this.unselectedClass = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/SelectManyListboxTag.java b/com/sun/faces/taglib/html_basic/SelectManyListboxTag.java
new file mode 100644
index 0000000..ebdbaaa
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/SelectManyListboxTag.java
@@ -0,0 +1,520 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class SelectManyListboxTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: collectionType
+    private javax.el.ValueExpression collectionType;
+    public void setCollectionType(javax.el.ValueExpression collectionType) {
+        this.collectionType = collectionType;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: disabledClass
+    private javax.el.ValueExpression disabledClass;
+    public void setDisabledClass(javax.el.ValueExpression disabledClass) {
+        this.disabledClass = disabledClass;
+    }
+
+    // PROPERTY: enabledClass
+    private javax.el.ValueExpression enabledClass;
+    public void setEnabledClass(javax.el.ValueExpression enabledClass) {
+        this.enabledClass = enabledClass;
+    }
+
+    // PROPERTY: hideNoSelectionOption
+    private javax.el.ValueExpression hideNoSelectionOption;
+    public void setHideNoSelectionOption(javax.el.ValueExpression hideNoSelectionOption) {
+        this.hideNoSelectionOption = hideNoSelectionOption;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: size
+    private javax.el.ValueExpression size;
+    public void setSize(javax.el.ValueExpression size) {
+        this.size = size;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Listbox";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlSelectManyListbox";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UISelectMany selectmany = null;
+        try {
+            selectmany = (javax.faces.component.UISelectMany) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UISelectMany.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                selectmany.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                selectmany.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            selectmany.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            selectmany.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            selectmany.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            selectmany.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            selectmany.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            selectmany.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            selectmany.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            selectmany.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            selectmany.setValueExpression("accesskey", accesskey);
+        }
+        if (collectionType != null) {
+            selectmany.setValueExpression("collectionType", collectionType);
+        }
+        if (dir != null) {
+            selectmany.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            selectmany.setValueExpression("disabled", disabled);
+        }
+        if (disabledClass != null) {
+            selectmany.setValueExpression("disabledClass", disabledClass);
+        }
+        if (enabledClass != null) {
+            selectmany.setValueExpression("enabledClass", enabledClass);
+        }
+        if (hideNoSelectionOption != null) {
+            selectmany.setValueExpression("hideNoSelectionOption", hideNoSelectionOption);
+        }
+        if (label != null) {
+            selectmany.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            selectmany.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            selectmany.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            selectmany.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            selectmany.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            selectmany.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            selectmany.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            selectmany.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            selectmany.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            selectmany.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            selectmany.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            selectmany.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            selectmany.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            selectmany.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            selectmany.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            selectmany.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            selectmany.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            selectmany.setValueExpression("role", role);
+        }
+        if (size != null) {
+            selectmany.setValueExpression("size", size);
+        }
+        if (style != null) {
+            selectmany.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            selectmany.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            selectmany.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            selectmany.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.collectionType = null;
+        this.dir = null;
+        this.disabled = null;
+        this.disabledClass = null;
+        this.enabledClass = null;
+        this.hideNoSelectionOption = null;
+        this.label = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.size = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/SelectManyMenuTag.java b/com/sun/faces/taglib/html_basic/SelectManyMenuTag.java
new file mode 100644
index 0000000..fbcb113
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/SelectManyMenuTag.java
@@ -0,0 +1,510 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class SelectManyMenuTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: collectionType
+    private javax.el.ValueExpression collectionType;
+    public void setCollectionType(javax.el.ValueExpression collectionType) {
+        this.collectionType = collectionType;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: disabledClass
+    private javax.el.ValueExpression disabledClass;
+    public void setDisabledClass(javax.el.ValueExpression disabledClass) {
+        this.disabledClass = disabledClass;
+    }
+
+    // PROPERTY: enabledClass
+    private javax.el.ValueExpression enabledClass;
+    public void setEnabledClass(javax.el.ValueExpression enabledClass) {
+        this.enabledClass = enabledClass;
+    }
+
+    // PROPERTY: hideNoSelectionOption
+    private javax.el.ValueExpression hideNoSelectionOption;
+    public void setHideNoSelectionOption(javax.el.ValueExpression hideNoSelectionOption) {
+        this.hideNoSelectionOption = hideNoSelectionOption;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Menu";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlSelectManyMenu";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UISelectMany selectmany = null;
+        try {
+            selectmany = (javax.faces.component.UISelectMany) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UISelectMany.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                selectmany.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                selectmany.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            selectmany.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            selectmany.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            selectmany.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            selectmany.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            selectmany.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            selectmany.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            selectmany.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            selectmany.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            selectmany.setValueExpression("accesskey", accesskey);
+        }
+        if (collectionType != null) {
+            selectmany.setValueExpression("collectionType", collectionType);
+        }
+        if (dir != null) {
+            selectmany.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            selectmany.setValueExpression("disabled", disabled);
+        }
+        if (disabledClass != null) {
+            selectmany.setValueExpression("disabledClass", disabledClass);
+        }
+        if (enabledClass != null) {
+            selectmany.setValueExpression("enabledClass", enabledClass);
+        }
+        if (hideNoSelectionOption != null) {
+            selectmany.setValueExpression("hideNoSelectionOption", hideNoSelectionOption);
+        }
+        if (label != null) {
+            selectmany.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            selectmany.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            selectmany.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            selectmany.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            selectmany.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            selectmany.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            selectmany.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            selectmany.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            selectmany.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            selectmany.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            selectmany.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            selectmany.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            selectmany.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            selectmany.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            selectmany.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            selectmany.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            selectmany.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            selectmany.setValueExpression("role", role);
+        }
+        if (style != null) {
+            selectmany.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            selectmany.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            selectmany.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            selectmany.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.collectionType = null;
+        this.dir = null;
+        this.disabled = null;
+        this.disabledClass = null;
+        this.enabledClass = null;
+        this.hideNoSelectionOption = null;
+        this.label = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/SelectOneListboxTag.java b/com/sun/faces/taglib/html_basic/SelectOneListboxTag.java
new file mode 100644
index 0000000..aa07fa0
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/SelectOneListboxTag.java
@@ -0,0 +1,510 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class SelectOneListboxTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: disabledClass
+    private javax.el.ValueExpression disabledClass;
+    public void setDisabledClass(javax.el.ValueExpression disabledClass) {
+        this.disabledClass = disabledClass;
+    }
+
+    // PROPERTY: enabledClass
+    private javax.el.ValueExpression enabledClass;
+    public void setEnabledClass(javax.el.ValueExpression enabledClass) {
+        this.enabledClass = enabledClass;
+    }
+
+    // PROPERTY: hideNoSelectionOption
+    private javax.el.ValueExpression hideNoSelectionOption;
+    public void setHideNoSelectionOption(javax.el.ValueExpression hideNoSelectionOption) {
+        this.hideNoSelectionOption = hideNoSelectionOption;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: size
+    private javax.el.ValueExpression size;
+    public void setSize(javax.el.ValueExpression size) {
+        this.size = size;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Listbox";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlSelectOneListbox";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UISelectOne selectone = null;
+        try {
+            selectone = (javax.faces.component.UISelectOne) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UISelectOne.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                selectone.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                selectone.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            selectone.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            selectone.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            selectone.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            selectone.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            selectone.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            selectone.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            selectone.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            selectone.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            selectone.setValueExpression("accesskey", accesskey);
+        }
+        if (dir != null) {
+            selectone.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            selectone.setValueExpression("disabled", disabled);
+        }
+        if (disabledClass != null) {
+            selectone.setValueExpression("disabledClass", disabledClass);
+        }
+        if (enabledClass != null) {
+            selectone.setValueExpression("enabledClass", enabledClass);
+        }
+        if (hideNoSelectionOption != null) {
+            selectone.setValueExpression("hideNoSelectionOption", hideNoSelectionOption);
+        }
+        if (label != null) {
+            selectone.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            selectone.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            selectone.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            selectone.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            selectone.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            selectone.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            selectone.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            selectone.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            selectone.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            selectone.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            selectone.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            selectone.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            selectone.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            selectone.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            selectone.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            selectone.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            selectone.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            selectone.setValueExpression("role", role);
+        }
+        if (size != null) {
+            selectone.setValueExpression("size", size);
+        }
+        if (style != null) {
+            selectone.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            selectone.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            selectone.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            selectone.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.dir = null;
+        this.disabled = null;
+        this.disabledClass = null;
+        this.enabledClass = null;
+        this.hideNoSelectionOption = null;
+        this.label = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.size = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/SelectOneMenuTag.java b/com/sun/faces/taglib/html_basic/SelectOneMenuTag.java
new file mode 100644
index 0000000..0cff748
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/SelectOneMenuTag.java
@@ -0,0 +1,500 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class SelectOneMenuTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: disabledClass
+    private javax.el.ValueExpression disabledClass;
+    public void setDisabledClass(javax.el.ValueExpression disabledClass) {
+        this.disabledClass = disabledClass;
+    }
+
+    // PROPERTY: enabledClass
+    private javax.el.ValueExpression enabledClass;
+    public void setEnabledClass(javax.el.ValueExpression enabledClass) {
+        this.enabledClass = enabledClass;
+    }
+
+    // PROPERTY: hideNoSelectionOption
+    private javax.el.ValueExpression hideNoSelectionOption;
+    public void setHideNoSelectionOption(javax.el.ValueExpression hideNoSelectionOption) {
+        this.hideNoSelectionOption = hideNoSelectionOption;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Menu";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlSelectOneMenu";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UISelectOne selectone = null;
+        try {
+            selectone = (javax.faces.component.UISelectOne) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UISelectOne.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                selectone.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                selectone.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            selectone.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            selectone.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            selectone.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            selectone.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            selectone.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            selectone.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            selectone.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            selectone.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            selectone.setValueExpression("accesskey", accesskey);
+        }
+        if (dir != null) {
+            selectone.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            selectone.setValueExpression("disabled", disabled);
+        }
+        if (disabledClass != null) {
+            selectone.setValueExpression("disabledClass", disabledClass);
+        }
+        if (enabledClass != null) {
+            selectone.setValueExpression("enabledClass", enabledClass);
+        }
+        if (hideNoSelectionOption != null) {
+            selectone.setValueExpression("hideNoSelectionOption", hideNoSelectionOption);
+        }
+        if (label != null) {
+            selectone.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            selectone.setValueExpression("lang", lang);
+        }
+        if (onblur != null) {
+            selectone.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            selectone.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            selectone.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            selectone.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            selectone.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            selectone.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            selectone.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            selectone.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            selectone.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            selectone.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            selectone.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            selectone.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            selectone.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            selectone.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            selectone.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            selectone.setValueExpression("role", role);
+        }
+        if (style != null) {
+            selectone.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            selectone.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            selectone.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            selectone.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.dir = null;
+        this.disabled = null;
+        this.disabledClass = null;
+        this.enabledClass = null;
+        this.hideNoSelectionOption = null;
+        this.label = null;
+        this.lang = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/html_basic/SelectOneRadioTag.java b/com/sun/faces/taglib/html_basic/SelectOneRadioTag.java
new file mode 100644
index 0000000..7d6c4a7
--- /dev/null
+++ b/com/sun/faces/taglib/html_basic/SelectOneRadioTag.java
@@ -0,0 +1,520 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.html_basic;
+
+import com.sun.faces.util.Util;
+import java.io.IOException;
+import javax.el.*;
+import javax.faces.*;
+import javax.faces.component.*;
+import javax.faces.context.*;
+import javax.faces.convert.*;
+import javax.faces.el.*;
+import javax.faces.event.*;
+import javax.faces.validator.*;
+import javax.faces.webapp.*;
+import javax.servlet.jsp.JspException;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+public class SelectOneRadioTag extends UIComponentELTag {
+
+
+    // Setter Methods
+    // PROPERTY: converter
+    private javax.el.ValueExpression converter;
+    public void setConverter(javax.el.ValueExpression converter) {
+        this.converter = converter;
+    }
+
+    // PROPERTY: converterMessage
+    private javax.el.ValueExpression converterMessage;
+    public void setConverterMessage(javax.el.ValueExpression converterMessage) {
+        this.converterMessage = converterMessage;
+    }
+
+    // PROPERTY: immediate
+    private javax.el.ValueExpression immediate;
+    public void setImmediate(javax.el.ValueExpression immediate) {
+        this.immediate = immediate;
+    }
+
+    // PROPERTY: required
+    private javax.el.ValueExpression required;
+    public void setRequired(javax.el.ValueExpression required) {
+        this.required = required;
+    }
+
+    // PROPERTY: requiredMessage
+    private javax.el.ValueExpression requiredMessage;
+    public void setRequiredMessage(javax.el.ValueExpression requiredMessage) {
+        this.requiredMessage = requiredMessage;
+    }
+
+    // PROPERTY: validator
+    private javax.el.MethodExpression validator;
+    public void setValidator(javax.el.MethodExpression validator) {
+        this.validator = validator;
+    }
+
+    // PROPERTY: validatorMessage
+    private javax.el.ValueExpression validatorMessage;
+    public void setValidatorMessage(javax.el.ValueExpression validatorMessage) {
+        this.validatorMessage = validatorMessage;
+    }
+
+    // PROPERTY: value
+    private javax.el.ValueExpression value;
+    public void setValue(javax.el.ValueExpression value) {
+        this.value = value;
+    }
+
+    // PROPERTY: valueChangeListener
+    private javax.el.MethodExpression valueChangeListener;
+    public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    // PROPERTY: accesskey
+    private javax.el.ValueExpression accesskey;
+    public void setAccesskey(javax.el.ValueExpression accesskey) {
+        this.accesskey = accesskey;
+    }
+
+    // PROPERTY: border
+    private javax.el.ValueExpression border;
+    public void setBorder(javax.el.ValueExpression border) {
+        this.border = border;
+    }
+
+    // PROPERTY: dir
+    private javax.el.ValueExpression dir;
+    public void setDir(javax.el.ValueExpression dir) {
+        this.dir = dir;
+    }
+
+    // PROPERTY: disabled
+    private javax.el.ValueExpression disabled;
+    public void setDisabled(javax.el.ValueExpression disabled) {
+        this.disabled = disabled;
+    }
+
+    // PROPERTY: disabledClass
+    private javax.el.ValueExpression disabledClass;
+    public void setDisabledClass(javax.el.ValueExpression disabledClass) {
+        this.disabledClass = disabledClass;
+    }
+
+    // PROPERTY: enabledClass
+    private javax.el.ValueExpression enabledClass;
+    public void setEnabledClass(javax.el.ValueExpression enabledClass) {
+        this.enabledClass = enabledClass;
+    }
+
+    // PROPERTY: hideNoSelectionOption
+    private javax.el.ValueExpression hideNoSelectionOption;
+    public void setHideNoSelectionOption(javax.el.ValueExpression hideNoSelectionOption) {
+        this.hideNoSelectionOption = hideNoSelectionOption;
+    }
+
+    // PROPERTY: label
+    private javax.el.ValueExpression label;
+    public void setLabel(javax.el.ValueExpression label) {
+        this.label = label;
+    }
+
+    // PROPERTY: lang
+    private javax.el.ValueExpression lang;
+    public void setLang(javax.el.ValueExpression lang) {
+        this.lang = lang;
+    }
+
+    // PROPERTY: layout
+    private javax.el.ValueExpression layout;
+    public void setLayout(javax.el.ValueExpression layout) {
+        this.layout = layout;
+    }
+
+    // PROPERTY: onblur
+    private javax.el.ValueExpression onblur;
+    public void setOnblur(javax.el.ValueExpression onblur) {
+        this.onblur = onblur;
+    }
+
+    // PROPERTY: onchange
+    private javax.el.ValueExpression onchange;
+    public void setOnchange(javax.el.ValueExpression onchange) {
+        this.onchange = onchange;
+    }
+
+    // PROPERTY: onclick
+    private javax.el.ValueExpression onclick;
+    public void setOnclick(javax.el.ValueExpression onclick) {
+        this.onclick = onclick;
+    }
+
+    // PROPERTY: ondblclick
+    private javax.el.ValueExpression ondblclick;
+    public void setOndblclick(javax.el.ValueExpression ondblclick) {
+        this.ondblclick = ondblclick;
+    }
+
+    // PROPERTY: onfocus
+    private javax.el.ValueExpression onfocus;
+    public void setOnfocus(javax.el.ValueExpression onfocus) {
+        this.onfocus = onfocus;
+    }
+
+    // PROPERTY: onkeydown
+    private javax.el.ValueExpression onkeydown;
+    public void setOnkeydown(javax.el.ValueExpression onkeydown) {
+        this.onkeydown = onkeydown;
+    }
+
+    // PROPERTY: onkeypress
+    private javax.el.ValueExpression onkeypress;
+    public void setOnkeypress(javax.el.ValueExpression onkeypress) {
+        this.onkeypress = onkeypress;
+    }
+
+    // PROPERTY: onkeyup
+    private javax.el.ValueExpression onkeyup;
+    public void setOnkeyup(javax.el.ValueExpression onkeyup) {
+        this.onkeyup = onkeyup;
+    }
+
+    // PROPERTY: onmousedown
+    private javax.el.ValueExpression onmousedown;
+    public void setOnmousedown(javax.el.ValueExpression onmousedown) {
+        this.onmousedown = onmousedown;
+    }
+
+    // PROPERTY: onmousemove
+    private javax.el.ValueExpression onmousemove;
+    public void setOnmousemove(javax.el.ValueExpression onmousemove) {
+        this.onmousemove = onmousemove;
+    }
+
+    // PROPERTY: onmouseout
+    private javax.el.ValueExpression onmouseout;
+    public void setOnmouseout(javax.el.ValueExpression onmouseout) {
+        this.onmouseout = onmouseout;
+    }
+
+    // PROPERTY: onmouseover
+    private javax.el.ValueExpression onmouseover;
+    public void setOnmouseover(javax.el.ValueExpression onmouseover) {
+        this.onmouseover = onmouseover;
+    }
+
+    // PROPERTY: onmouseup
+    private javax.el.ValueExpression onmouseup;
+    public void setOnmouseup(javax.el.ValueExpression onmouseup) {
+        this.onmouseup = onmouseup;
+    }
+
+    // PROPERTY: onselect
+    private javax.el.ValueExpression onselect;
+    public void setOnselect(javax.el.ValueExpression onselect) {
+        this.onselect = onselect;
+    }
+
+    // PROPERTY: readonly
+    private javax.el.ValueExpression readonly;
+    public void setReadonly(javax.el.ValueExpression readonly) {
+        this.readonly = readonly;
+    }
+
+    // PROPERTY: role
+    private javax.el.ValueExpression role;
+    public void setRole(javax.el.ValueExpression role) {
+        this.role = role;
+    }
+
+    // PROPERTY: style
+    private javax.el.ValueExpression style;
+    public void setStyle(javax.el.ValueExpression style) {
+        this.style = style;
+    }
+
+    // PROPERTY: styleClass
+    private javax.el.ValueExpression styleClass;
+    public void setStyleClass(javax.el.ValueExpression styleClass) {
+        this.styleClass = styleClass;
+    }
+
+    // PROPERTY: tabindex
+    private javax.el.ValueExpression tabindex;
+    public void setTabindex(javax.el.ValueExpression tabindex) {
+        this.tabindex = tabindex;
+    }
+
+    // PROPERTY: title
+    private javax.el.ValueExpression title;
+    public void setTitle(javax.el.ValueExpression title) {
+        this.title = title;
+    }
+
+
+    // General Methods
+    public String getRendererType() {
+        return "javax.faces.Radio";
+    }
+
+    public String getComponentType() {
+        return "javax.faces.HtmlSelectOneRadio";
+    }
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        javax.faces.component.UISelectOne selectone = null;
+        try {
+            selectone = (javax.faces.component.UISelectOne) component;
+        } catch (ClassCastException cce) {
+            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: javax.faces.component.UISelectOne.  Perhaps you're missing a tag?");
+        }
+
+        if (converter != null) {
+            if (!converter.isLiteralText()) {
+                selectone.setValueExpression("converter", converter);
+            } else {
+                Converter conv = FacesContext.getCurrentInstance().getApplication().createConverter(converter.getExpressionString());
+                selectone.setConverter(conv);
+            }
+        }
+
+        if (converterMessage != null) {
+            selectone.setValueExpression("converterMessage", converterMessage);
+        }
+        if (immediate != null) {
+            selectone.setValueExpression("immediate", immediate);
+        }
+        if (required != null) {
+            selectone.setValueExpression("required", required);
+        }
+        if (requiredMessage != null) {
+            selectone.setValueExpression("requiredMessage", requiredMessage);
+        }
+        if (validator != null) {
+            selectone.addValidator(new MethodExpressionValidator(validator));
+        }
+        if (validatorMessage != null) {
+            selectone.setValueExpression("validatorMessage", validatorMessage);
+        }
+        if (value != null) {
+            selectone.setValueExpression("value", value);
+        }
+        if (valueChangeListener != null) {
+            selectone.addValueChangeListener(new MethodExpressionValueChangeListener(valueChangeListener));
+        }
+        if (accesskey != null) {
+            selectone.setValueExpression("accesskey", accesskey);
+        }
+        if (border != null) {
+            selectone.setValueExpression("border", border);
+        }
+        if (dir != null) {
+            selectone.setValueExpression("dir", dir);
+        }
+        if (disabled != null) {
+            selectone.setValueExpression("disabled", disabled);
+        }
+        if (disabledClass != null) {
+            selectone.setValueExpression("disabledClass", disabledClass);
+        }
+        if (enabledClass != null) {
+            selectone.setValueExpression("enabledClass", enabledClass);
+        }
+        if (hideNoSelectionOption != null) {
+            selectone.setValueExpression("hideNoSelectionOption", hideNoSelectionOption);
+        }
+        if (label != null) {
+            selectone.setValueExpression("label", label);
+        }
+        if (lang != null) {
+            selectone.setValueExpression("lang", lang);
+        }
+        if (layout != null) {
+            selectone.setValueExpression("layout", layout);
+        }
+        if (onblur != null) {
+            selectone.setValueExpression("onblur", onblur);
+        }
+        if (onchange != null) {
+            selectone.setValueExpression("onchange", onchange);
+        }
+        if (onclick != null) {
+            selectone.setValueExpression("onclick", onclick);
+        }
+        if (ondblclick != null) {
+            selectone.setValueExpression("ondblclick", ondblclick);
+        }
+        if (onfocus != null) {
+            selectone.setValueExpression("onfocus", onfocus);
+        }
+        if (onkeydown != null) {
+            selectone.setValueExpression("onkeydown", onkeydown);
+        }
+        if (onkeypress != null) {
+            selectone.setValueExpression("onkeypress", onkeypress);
+        }
+        if (onkeyup != null) {
+            selectone.setValueExpression("onkeyup", onkeyup);
+        }
+        if (onmousedown != null) {
+            selectone.setValueExpression("onmousedown", onmousedown);
+        }
+        if (onmousemove != null) {
+            selectone.setValueExpression("onmousemove", onmousemove);
+        }
+        if (onmouseout != null) {
+            selectone.setValueExpression("onmouseout", onmouseout);
+        }
+        if (onmouseover != null) {
+            selectone.setValueExpression("onmouseover", onmouseover);
+        }
+        if (onmouseup != null) {
+            selectone.setValueExpression("onmouseup", onmouseup);
+        }
+        if (onselect != null) {
+            selectone.setValueExpression("onselect", onselect);
+        }
+        if (readonly != null) {
+            selectone.setValueExpression("readonly", readonly);
+        }
+        if (role != null) {
+            selectone.setValueExpression("role", role);
+        }
+        if (style != null) {
+            selectone.setValueExpression("style", style);
+        }
+        if (styleClass != null) {
+            selectone.setValueExpression("styleClass", styleClass);
+        }
+        if (tabindex != null) {
+            selectone.setValueExpression("tabindex", tabindex);
+        }
+        if (title != null) {
+            selectone.setValueExpression("title", title);
+        }
+    }
+    // Methods From TagSupport
+    public int doStartTag() throws JspException {
+        try {
+            return super.doStartTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    public int doEndTag() throws JspException {
+        try {
+            return super.doEndTag();
+        } catch (Exception e) {
+            Throwable root = e;
+            while (root.getCause() != null) {
+                root = root.getCause();
+            }
+            throw new JspException(root);
+        }
+    }
+
+    // RELEASE
+    public void release() {
+        super.release();
+
+        // component properties
+        this.converter = null;
+        this.converterMessage = null;
+        this.immediate = null;
+        this.required = null;
+        this.requiredMessage = null;
+        this.validator = null;
+        this.validatorMessage = null;
+        this.value = null;
+        this.valueChangeListener = null;
+
+        // rendered attributes
+        this.accesskey = null;
+        this.border = null;
+        this.dir = null;
+        this.disabled = null;
+        this.disabledClass = null;
+        this.enabledClass = null;
+        this.hideNoSelectionOption = null;
+        this.label = null;
+        this.lang = null;
+        this.layout = null;
+        this.onblur = null;
+        this.onchange = null;
+        this.onclick = null;
+        this.ondblclick = null;
+        this.onfocus = null;
+        this.onkeydown = null;
+        this.onkeypress = null;
+        this.onkeyup = null;
+        this.onmousedown = null;
+        this.onmousemove = null;
+        this.onmouseout = null;
+        this.onmouseover = null;
+        this.onmouseup = null;
+        this.onselect = null;
+        this.readonly = null;
+        this.role = null;
+        this.style = null;
+        this.styleClass = null;
+        this.tabindex = null;
+        this.title = null;
+    }
+
+    public String getDebugString() {
+        return "id: " + this.getId() + " class: " + this.getClass().getName();
+    }
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/AbstractConverterTag.java b/com/sun/faces/taglib/jsf_core/AbstractConverterTag.java
new file mode 100644
index 0000000..a238277
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/AbstractConverterTag.java
@@ -0,0 +1,174 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.webapp.ConverterELTag;
+import javax.faces.convert.Converter;
+import javax.faces.context.FacesContext;
+import javax.faces.FacesException;
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.servlet.jsp.JspException;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>Base class for all <code>ConverterTag<code>s.</p>
+ */
+public class AbstractConverterTag extends ConverterELTag {
+
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+    /**
+     * <p>The {@link javax.el.ValueExpression} that evaluates to an object that
+     * implements {@link javax.faces.convert.Converter}.</p>
+     */
+    protected ValueExpression binding = null;
+
+
+    /**
+     * <p>The identifier of the {@link javax.faces.convert.Converter}
+     * instance to be created.</p>
+     */
+    protected ValueExpression converterId = null;
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Set the expression that will be used to create a
+     * {@link javax.el.ValueExpression} that references a backing bean property
+     * of the {@link javax.faces.convert.Converter} instance to be created.</p>
+     *
+     * @param binding The new expression
+     */
+    public void setBinding(ValueExpression binding) {
+
+        this.binding = binding;
+
+    }
+
+
+    /**
+     * <p>Set the identifer of the {@link javax.faces.convert.Converter}
+     * instance to be created.
+     *
+     * @param converterId The identifier of the converter instance to be
+     *                    created.
+     */
+    public void setConverterId(ValueExpression converterId) {
+
+        this.converterId = converterId;
+
+    }
+
+    // --------------------------------------------- Methods from ConverterELTag
+
+
+    protected Converter createConverter() throws JspException {
+
+        try {
+            return createConverter(converterId,
+                                   binding,
+                                   FacesContext.getCurrentInstance());
+        } catch (FacesException fe) {
+            throw new JspException(fe.getCause());
+        }
+
+    }
+
+
+    protected static Converter createConverter(ValueExpression converterId,
+                                               ValueExpression binding,
+                                               FacesContext facesContext) {
+
+        ELContext elContext = facesContext.getELContext();
+        Converter converter = null;
+
+        // If "binding" is set, use it to create a converter instance.
+        if (binding != null) {
+            try {
+                converter = (Converter) binding.getValue(elContext);
+                if (converter != null) {
+                    return converter;
+                }
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+
+        // If "converterId" is set, use it to create the converter
+        // instance.  If "converterId" and "binding" are both set, store the
+        // converter instance in the value of the property represented by
+        // the ValueExpression 'binding'.
+        if (converterId != null) {
+            try {
+                String converterIdVal = (String)
+                     converterId.getValue(elContext);
+                converter = facesContext.getApplication()
+                     .createConverter(converterIdVal);
+                if (converter != null && binding != null) {
+                    binding.setValue(elContext, converter);
+                }
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+
+        if (converter == null) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.CANNOT_CONVERT_ID,
+                          converterId != null ? converterId.getExpressionString() : "",
+                          binding != null ? binding.getExpressionString() : ""));
+            }
+        }
+
+        return converter;
+
+    }
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/AbstractValidatorTag.java b/com/sun/faces/taglib/jsf_core/AbstractValidatorTag.java
new file mode 100644
index 0000000..3e41b3a
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/AbstractValidatorTag.java
@@ -0,0 +1,176 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.FacesLogger;
+
+import javax.faces.webapp.ValidatorELTag;
+import javax.faces.validator.Validator;
+import javax.faces.context.FacesContext;
+import javax.faces.FacesException;
+import javax.servlet.jsp.JspException;
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>Base class for all <code>ValidatorTag<code>s.</p>
+ */
+public class AbstractValidatorTag extends ValidatorELTag {
+
+     private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+    /**
+     * <p>The {@link javax.el.ValueExpression} that evaluates to an object that
+     * implements {@link javax.faces.convert.Converter}.</p>
+     */
+    protected ValueExpression binding = null;
+
+
+    /**
+     * <p>The identifier of the {@link javax.faces.validator.Validator}
+     * instance to be created.</p>
+     */
+    protected ValueExpression validatorId = null;    
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Set the expression that will be used to create a
+     * {@link javax.el.ValueExpression} that references a backing bean property
+     * of the {@link javax.faces.validator.Validator} instance to be created.</p>
+     *
+     * @param binding The new expression
+     */
+    public void setBinding(ValueExpression binding) {
+
+        this.binding = binding;
+
+    } // END setBinding
+
+
+    /**
+     * <p>Set the identifer of the {@link javax.faces.validator.Validator}
+     * instance to be created.
+     *
+     * @param validatorId The identifier of the converter instance to be
+     * created.
+     */
+    public void setValidatorId(ValueExpression validatorId) {
+
+        this.validatorId = validatorId;
+
+    } // END setValidatorId
+
+
+    // --------------------------------------------- Methods from ValdiatorELTag
+
+
+    protected Validator createValidator() throws JspException {
+
+        try {
+            return createValidator(validatorId,
+                                   binding,
+                                   FacesContext.getCurrentInstance());
+        } catch (FacesException fe) {
+            throw new JspException(fe.getCause());
+        }
+
+    }
+
+
+    protected static Validator createValidator(ValueExpression validatorId,
+                                               ValueExpression binding,
+                                               FacesContext facesContext) {
+
+        ELContext elContext = facesContext.getELContext();
+        Validator validator = null;
+
+        // If "binding" is set, use it to create a validator instance.
+        if (binding != null) {
+            try {
+                validator = (Validator) binding.getValue(elContext);
+                if (validator != null) {
+                    return validator;
+                }
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+
+        // If "validatorId" is set, use it to create the validator
+        // instance.  If "validatorId" and "binding" are both set, store the
+        // validator instance in the value of the property represented by
+        // the ValueExpression 'binding'.
+        if (validatorId != null) {
+            try {
+                String validatorIdVal = (String)
+                     validatorId.getValue(elContext);
+                validator = facesContext.getApplication()
+                     .createValidator(validatorIdVal);
+                if (validator != null && binding != null) {
+                    binding.setValue(elContext, validator);
+                }
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+
+        if (validator == null) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                     MessageUtils.getExceptionMessageString(
+                          MessageUtils.CANNOT_VALIDATE_ID,
+                          validatorId != null ? validatorId.getExpressionString() : "",
+                          binding != null ? binding.getExpressionString() : ""));
+            }
+        }
+
+        return validator;
+
+    }
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/ActionListenerTag.java b/com/sun/faces/taglib/jsf_core/ActionListenerTag.java
new file mode 100644
index 0000000..14bb20b
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ActionListenerTag.java
@@ -0,0 +1,252 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ValueExpression;
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionListener;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.webapp.UIComponentClassicTagBase;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.io.Serializable;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+
+/**
+ * <p>Tag implementation that creates a {@link ActionListener} instance
+ * and registers it on the {@link UIComponent} associated with our most
+ * immediate surrounding instance of a tag whose implementation class
+ * is a subclass of {@link UIComponentClassicTagBase}.  This tag creates no output to
+ * the page currently being created.</p>
+ * <p/>
+ * <p>This class may be used directly to implement a generic event handler
+ * registration tag (based on the fully qualified Java class name specified
+ * by the <code>type</code> attribute), or as a base class for tag instances
+ * that support specific {@link ActionListener} subclasses.</p>
+ * <p/>
+ * <p>Subclasses of this class must implement the
+ * <code>createActionListener()</code> method, which creates and returns a
+ * {@link ActionListener} instance.  Any configuration properties that
+ * are required by this {@link ActionListener} instance must have been
+ * set by the <code>createActionListener()</code> method.  Generally,
+ * this occurs by copying corresponding attribute values on the tag
+ * instance.</p>
+ * <p/>
+ * <p>This tag creates no output to the page currently being created.  It
+ * is used solely for the side effect of {@link ActionListener}
+ * creation.</p>
+ */
+
+public class ActionListenerTag extends TagSupport {
+
+    // ------------------------------------------------------------- Attributes
+
+    private static final long serialVersionUID = -5222351612904952740L;
+    private static final Logger logger = FacesLogger.TAGLIB.getLogger();
+    /**
+     * <p>The fully qualified class name of the {@link ActionListener}
+     * instance to be created.</p>
+     */
+    private ValueExpression type = null;
+
+    /**
+     * <p>The value expression used to create a listener instance and it is
+     * also used to wire up this listener to an {@link ActionListener} property
+     * of a JavaBean class.</p>
+     */
+    private ValueExpression binding = null;
+
+    /**
+     * <p>Set the fully qualified class name of the
+     * {@link ActionListener} instance to be created.
+     *
+     * @param type The new class name
+     */
+    public void setType(ValueExpression type) {
+
+        this.type = type;
+
+    }
+
+    /*
+     * <p>Set the value binding expression  for this listener.</p>
+     *
+     * @param binding The new value binding expression
+     */
+    public void setBinding(ValueExpression binding) {
+        this.binding = binding;
+    }
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the specified {@link ActionListener}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentClassicTagBase}
+     * instance, if the {@link UIComponent} instance was created by this
+     * execution of the containing JSP page.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) {
+            Object params[] = {this.getClass().getName()};
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(
+                      MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID, params));
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }
+
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
+        }
+        if (!(component instanceof ActionSource)) {           
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(
+                      MessageUtils.NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID,
+                      "actionListener",
+                      "javax.faces.component.ActionSource"));
+        }
+
+        // If binding is null, type is set and is a literal value,
+        // then don't bother wrapping.  Just instantiate and
+        // set.
+        ActionListener listener;
+        if (binding == null && type != null && type.isLiteralText()) {
+            try {
+                listener = (ActionListener)
+                     Util.getListenerInstance(type, null);
+            } catch (Exception e) {
+                throw new JspException(e.getMessage(), e.getCause());
+            }
+        } else {
+            listener = new BindingActionListener(type, binding);
+        }
+        
+        ((ActionSource) component).addActionListener(listener);
+
+        return (SKIP_BODY);
+
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.type = null;
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class BindingActionListener
+         implements ActionListener, Serializable {
+
+        private ValueExpression type;
+        private ValueExpression binding;
+
+        // -------------------------------------------------------- Constructors
+
+
+        public BindingActionListener(ValueExpression type,
+                                     ValueExpression binding) {
+
+            this.type = type;
+            this.binding = binding;
+
+        }
+
+        // ----------------------------------------- Methods from ActionListener
+
+
+        /**
+         * PENDING
+         *
+         * @param event The {@link javax.faces.event.ActionEvent} that has occurred
+         * @throws javax.faces.event.AbortProcessingException
+         *          Signal the JavaServer Faces
+         *          implementation that no further processing on the current event
+         *          should be performed
+         */
+        public void processAction(ActionEvent event) throws AbortProcessingException {           
+
+            ActionListener instance = (ActionListener)
+                     Util.getListenerInstance(type, binding);
+            if (instance != null) {
+                instance.processAction(event);
+            } else {
+                if (logger.isLoggable(Level.WARNING)) {
+                    logger.log(Level.WARNING,
+                               "jsf.core.taglib.action_or_valuechange_listener.null_type_binding",
+                               new Object[] {
+                                "ActionListener",
+                                event.getComponent().getClientId(FacesContext.getCurrentInstance())});
+                }
+            }
+        }
+    }
+    
+}
diff --git a/com/sun/faces/taglib/jsf_core/AttributeTag.java b/com/sun/faces/taglib/jsf_core/AttributeTag.java
new file mode 100644
index 0000000..56df145
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/AttributeTag.java
@@ -0,0 +1,184 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.webapp.UIComponentELTag;
+import javax.faces.webapp.UIComponentClassicTagBase;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import com.sun.faces.util.MessageUtils;
+
+
+/**
+ * <p>Tag implementation that adds an attribute with a specified name
+ * and String value to the component whose tag it is nested inside,
+ * if the component does not already contain an attribute with the
+ * same name.  This tag creates no output to the page currently
+ * being created.</p>
+ *
+ */
+
+public class AttributeTag extends TagSupport {
+
+
+    // ------------------------------------------------------------- Attributes
+
+
+    /**
+     * <p>The name of the attribute to be created, if not already present.
+     */
+    private ValueExpression name = null;
+
+
+    /**
+     * <p>Set the attribute name.</p>
+     *
+     * @param name The new attribute name
+     */
+    public void setName(ValueExpression name) {
+
+        this.name = name;
+
+    }
+
+
+    /**
+     * <p>The value to be associated with this attribute, if it is created.</p>
+     */
+    private ValueExpression value = null;
+
+
+
+    /**
+     * <p>Set the attribute value.</p>
+     *
+     * @param value The new attribute value
+     */
+    public void setValue(ValueExpression value) {
+
+        this.value = value;
+
+    }
+
+
+    // -------------------------------------------------------- Methods from Tag
+
+
+    /**
+     * <p>Register the specified attribute name and value with the
+     * {@link UIComponent} instance associated with our most immediately
+     * surrounding {@link UIComponentClassicTagBase} instance, if this
+     * {@link UIComponent} does not already have a value for the
+     * specified attribute name.</p>
+     *
+     * @exception JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // Locate our parent UIComponentTagBase
+        UIComponentClassicTagBase tag =
+            UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) {
+        	String message = MessageUtils.getExceptionMessageString
+        	(MessageUtils.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR_MESSAGE_ID);
+        	throw new JspException(message);
+        }
+        
+        // Add this attribute if it is not already defined
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {
+        	String message = MessageUtils.getExceptionMessageString
+        	(MessageUtils.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG_MESSAGE_ID);
+        	throw new JspException(message);
+        }
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        ELContext elContext = context.getELContext();
+
+        String nameVal = null;
+        Object valueVal = null;
+	boolean isLiteral = false;
+
+        if (name != null) {
+            nameVal = (String) name.getValue(elContext);
+        }
+
+        if (value != null) {
+	    if (isLiteral = value.isLiteralText()) {
+		valueVal = value.getValue(elContext);
+	    }
+        }
+	
+        if (component.getAttributes().get(nameVal) == null) {
+	    if (isLiteral) {
+		component.getAttributes().put(nameVal, valueVal);
+	    }
+	    else {
+		component.setValueExpression(nameVal, value);
+	    }
+        }
+        return (SKIP_BODY);
+
+    }
+
+    public int doEndTag() throws JspException {
+	this.release();
+	return (EVAL_PAGE);
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.name = null;
+        this.value = null;
+
+    } // END release
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/ConvertDateTimeTag.java b/com/sun/faces/taglib/jsf_core/ConvertDateTimeTag.java
new file mode 100644
index 0000000..55cf31c
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ConvertDateTimeTag.java
@@ -0,0 +1,319 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.DateTimeConverter;
+import javax.servlet.jsp.JspException;
+import java.util.Arrays;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+/**
+ * <p>ConvertDateTimeTag is a ConverterTag implementation for
+ * javax.faces.convert.DateTimeConverter</p>
+ *
+ */
+
+public class ConvertDateTimeTag extends AbstractConverterTag {
+
+    private static final long serialVersionUID = -5815655767093677438L;
+    private static ValueExpression CONVERTER_ID_EXPR = null;
+
+     private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+    //
+    // Instance Variables
+    //
+
+    private ValueExpression dateStyleExpression;
+    private ValueExpression localeExpression;
+    private ValueExpression patternExpression;
+    private ValueExpression timeStyleExpression;
+    private ValueExpression timeZoneExpression;
+    private ValueExpression typeExpression;
+
+    private String dateStyle;
+    private Locale locale;
+    private String pattern;
+    private String timeStyle;
+    private TimeZone timeZone;
+    private String type;// Log instance for this class
+
+
+    // Attribute Instance Variables
+
+    // Relationship Instance Variables
+
+    //
+    // Constructors and Initializers    
+    //
+    public ConvertDateTimeTag() {
+        super();
+        init();
+    }
+
+
+    public void release() {
+        super.release();
+        init();
+    }
+
+
+    private void init() {
+        dateStyle = "default";
+        dateStyleExpression = null;
+        locale = null;
+        localeExpression = null;
+        pattern = null;
+        patternExpression = null;
+        timeStyle = "default";
+        timeStyleExpression = null;
+        timeZone = null;
+        timeZoneExpression = null;
+        type = "date";
+        typeExpression = null;
+        if (CONVERTER_ID_EXPR == null) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ExpressionFactory factory = context.getApplication().
+                    getExpressionFactory();
+            CONVERTER_ID_EXPR = factory.createValueExpression(
+                    context.getELContext(),"javax.faces.DateTime",String.class);
+        }
+    }
+
+    //
+    // Class methods
+    //
+
+    //
+    // General Methods
+    //
+
+    public void setDateStyle(ValueExpression dateStyle) {
+        this.dateStyleExpression = dateStyle;
+    }
+
+
+    public void setLocale(ValueExpression locale) {
+        this.localeExpression = locale;
+    }
+
+
+    public void setPattern(ValueExpression pattern) {
+        this.patternExpression = pattern;
+    }
+
+
+    public void setTimeStyle(ValueExpression timeStyle) {
+        this.timeStyleExpression = timeStyle;
+    }
+
+
+    public void setTimeZone(ValueExpression timeZone) {
+        this.timeZoneExpression = timeZone;
+    }
+
+
+    public void setType(ValueExpression type) {
+        this.typeExpression = type;
+    }
+
+    public int doStartTag() throws JspException {
+        super.setConverterId(CONVERTER_ID_EXPR);
+        return super.doStartTag();
+    }
+
+    //
+    // Methods from ConverterTag
+    //
+
+    protected Converter createConverter() throws JspException {
+
+        DateTimeConverter result = (DateTimeConverter) super.createConverter();
+        assert (null != result);
+
+        evaluateExpressions();
+        result.setDateStyle(dateStyle);
+        result.setLocale(locale);
+        result.setPattern(pattern);
+        result.setTimeStyle(timeStyle);
+        result.setTimeZone(timeZone);
+        result.setType(type);
+
+        return result;
+    }
+
+
+    /* Evaluates expressions as necessary */
+    private void evaluateExpressions() {
+
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        ELContext elContext = facesContext.getELContext();
+
+        if (dateStyleExpression != null) {
+            dateStyle = (String)
+            ELUtils.evaluateValueExpression(dateStyleExpression, elContext);
+        }
+        if (patternExpression != null) {
+            pattern = (String)
+            ELUtils.evaluateValueExpression(patternExpression, elContext);
+        }
+        if (timeStyleExpression != null) {
+            timeStyle = (String)
+            ELUtils.evaluateValueExpression(timeStyleExpression, elContext);
+        }
+        if (typeExpression != null) {
+            type = (String)
+            ELUtils.evaluateValueExpression(typeExpression, elContext);
+        } else {
+            if (timeStyleExpression != null) {
+                if (dateStyleExpression != null) {
+                    type = "both";
+                } else {
+                    type = "time";
+                }
+            } else {
+                type = "date";
+            }
+        }
+        if (localeExpression != null) {
+            if (localeExpression.isLiteralText()) {
+                locale = getLocale(localeExpression.getExpressionString());
+            } else {
+                Object loc = ELUtils.evaluateValueExpression(localeExpression,
+                                                          elContext);
+                if (loc != null) {
+                    if (loc instanceof String) {
+                        locale = getLocale((String) loc);
+                    } else if (loc instanceof Locale) {
+                        locale = (Locale) loc;
+                    } else {
+                        Object[] params = {
+                            "locale",
+                            "java.lang.String or java.util.Locale",
+                            loc.getClass().getName()
+                        };
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE,
+                                       "jsf.core.tags.eval_result_not_expected_type",
+                                       params);
+                        }
+                        throw new FacesException(
+                            MessageUtils.getExceptionMessageString(
+                                MessageUtils.EVAL_ATTR_UNEXPECTED_TYPE, params));
+                    }
+                } else {
+                    locale = facesContext.getViewRoot().getLocale();
+                }
+            }
+        }
+        if (timeZoneExpression != null) {
+            if (timeZoneExpression.isLiteralText()) {
+                timeZone =
+                TimeZone.getTimeZone(
+                    timeZoneExpression.getExpressionString());
+            } else {
+                Object tz = ELUtils.evaluateValueExpression(timeZoneExpression,
+                                                         elContext);
+                if (tz != null) {
+                    if (tz instanceof String) {
+                        timeZone = TimeZone.getTimeZone((String) tz);
+                    } else if (tz instanceof TimeZone) {
+                        timeZone = (TimeZone) tz;
+                    } else {
+                        Object[] params = {
+                            "timeZone",
+                            "java.lang.String or java.util.TimeZone",
+                            tz.getClass().getName()
+                        };
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE,
+                                       "jsf.core.tags.eval_result_not_expected_type",
+                                       params);
+                        }
+                        throw new FacesException(
+                            MessageUtils.getExceptionMessageString(
+                                MessageUtils.EVAL_ATTR_UNEXPECTED_TYPE, params));
+                    }
+                }
+            }
+        }
+    }
+
+    protected static Locale getLocale(String string) {
+        if (string == null) {
+            return Locale.getDefault();
+        }
+
+        if (string.length() > 2) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                           "jsf.core.taglib.invalid_locale_value",
+                           string);
+            }
+        } else {
+            String[] langs = Locale.getISOLanguages();
+            Arrays.sort(langs);
+            if (Arrays.binarySearch(langs, string) < 0) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.core.taglib.invalid_language",
+                               string);
+                }
+            }
+        }
+
+        return new Locale(string, "");
+    }
+} // end of class ConvertDateTimeTag
diff --git a/com/sun/faces/taglib/jsf_core/ConvertNumberTag.java b/com/sun/faces/taglib/jsf_core/ConvertNumberTag.java
new file mode 100644
index 0000000..196e600
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ConvertNumberTag.java
@@ -0,0 +1,431 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import java.util.Arrays;
+import java.util.Locale;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.NumberConverter;
+import javax.servlet.jsp.JspException;
+
+import com.sun.faces.el.ELUtils;
+
+/**
+ * <p>ConvertNumberTag is a ConverterTag implementation for
+ * javax.faces.convert.NumberConverter</p>
+ *
+ */
+
+public class ConvertNumberTag extends AbstractConverterTag {
+
+    private static final long serialVersionUID = -2710405278792415110L;
+    private static ValueExpression CONVERTER_ID_EXPR = null;
+    
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+
+    //
+    // Instance Variables
+    //
+
+    private ValueExpression currencyCodeExpression;
+    private ValueExpression currencySymbolExpression;
+    private ValueExpression groupingUsedExpression;
+    private ValueExpression integerOnlyExpression;
+    private ValueExpression maxFractionDigitsExpression;
+    private ValueExpression maxIntegerDigitsExpression;
+    private ValueExpression minFractionDigitsExpression;
+    private ValueExpression minIntegerDigitsExpression;
+    private ValueExpression localeExpression;
+    private ValueExpression patternExpression;
+    private ValueExpression typeExpression;
+
+    private String currencyCode;
+    private String currencySymbol;
+    private boolean groupingUsed;
+    private boolean integerOnly;
+    private int maxFractionDigits;
+    private int maxIntegerDigits;
+    private int minFractionDigits;
+    private int minIntegerDigits;
+    private Locale locale;
+    private String pattern;
+    private String type;
+
+    private boolean maxFractionDigitsSpecified;
+    private boolean maxIntegerDigitsSpecified;
+    private boolean minFractionDigitsSpecified;
+    private boolean minIntegerDigitsSpecified;
+
+    // Attribute Instance Variables
+    
+    // Relationship Instance Variables
+
+    //
+    // Constructors and Initializers    
+    //
+    public ConvertNumberTag() {
+        super();
+        init();
+    }
+
+
+    public void release() {
+        super.release();
+        init();
+    }
+
+
+    private void init() {
+        currencyCode = null;
+        currencyCodeExpression = null;
+        currencySymbol = null;
+        currencySymbolExpression = null;
+        groupingUsed = true;
+        groupingUsedExpression = null;
+        integerOnly = false;
+        integerOnlyExpression = null;
+        maxFractionDigits = 0;
+        maxFractionDigitsExpression = null;
+        maxFractionDigitsSpecified = false;
+        maxIntegerDigits = 0;
+        maxIntegerDigitsExpression = null;
+        maxIntegerDigitsSpecified = false;
+        minFractionDigits = 0;
+        minFractionDigitsExpression = null;
+        minFractionDigitsSpecified = false;
+        minIntegerDigits = 0;
+        minIntegerDigitsExpression = null;
+        minIntegerDigitsSpecified = false;
+        locale = null;
+        localeExpression = null;
+        pattern = null;
+        patternExpression = null;
+        type = "number";
+        typeExpression = null;
+        if (CONVERTER_ID_EXPR == null) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ExpressionFactory factory =
+                context.getApplication().getExpressionFactory();
+            CONVERTER_ID_EXPR =
+                factory.createValueExpression(context.getELContext(), 
+                    "javax.faces.Number", String.class);
+        }
+    }
+
+
+    //
+    // Class methods
+    //
+
+    //
+    // General Methods
+    //
+
+    public void setCurrencyCode(ValueExpression currencyCode) {
+        this.currencyCodeExpression = currencyCode;
+    }
+
+
+    public void setCurrencySymbol(ValueExpression currencySymbol) {
+        this.currencySymbolExpression = currencySymbol;
+    }
+
+
+    public void setGroupingUsed(ValueExpression groupingUsed) {
+        this.groupingUsedExpression = groupingUsed;
+    }
+
+
+    public void setIntegerOnly(ValueExpression integerOnly) {
+        this.integerOnlyExpression = integerOnly;
+    }
+
+
+    public void setMaxFractionDigits(ValueExpression maxFractionDigits) {
+        this.maxFractionDigitsExpression = maxFractionDigits;
+        this.maxFractionDigitsSpecified = true;
+    }
+
+
+    public void setMaxIntegerDigits(ValueExpression maxIntegerDigits) {
+        this.maxIntegerDigitsExpression = maxIntegerDigits;
+        this.maxIntegerDigitsSpecified = true;
+    }
+
+
+    public void setMinFractionDigits(ValueExpression minFractionDigits) {
+        this.minFractionDigitsExpression = minFractionDigits;
+        this.minFractionDigitsSpecified = true;
+    }
+
+
+    public void setMinIntegerDigits(ValueExpression minIntegerDigits) {
+        this.minIntegerDigitsExpression = minIntegerDigits;
+    }
+
+
+    public void setLocale(ValueExpression locale) {
+        this.localeExpression = locale;
+    }
+
+
+    public void setPattern(ValueExpression pattern) {
+        this.patternExpression = pattern;
+    }
+
+
+    public void setType(ValueExpression type) {
+        this.typeExpression = type;
+    }
+
+    public int doStartTag() throws JspException {
+        super.setConverterId(CONVERTER_ID_EXPR);
+        return super.doStartTag();
+    }
+
+    // 
+    // Methods from ConverterTag
+    // 
+
+    protected Converter createConverter() throws JspException {
+
+        NumberConverter result = (NumberConverter) super.createConverter();
+        assert (null != result);
+
+        evaluateExpressions();
+        result.setCurrencyCode(currencyCode);
+        result.setCurrencySymbol(currencySymbol);
+        result.setGroupingUsed(groupingUsed);
+        result.setIntegerOnly(integerOnly);
+        if (maxFractionDigitsSpecified) {
+            result.setMaxFractionDigits(maxFractionDigits);
+        }
+        if (maxIntegerDigitsSpecified) {
+            result.setMaxIntegerDigits(maxIntegerDigits);
+        }
+        if (minFractionDigitsSpecified) {
+            result.setMinFractionDigits(minFractionDigits);
+        }
+        if (minIntegerDigitsSpecified) {
+            result.setMinIntegerDigits(minIntegerDigits);
+        }
+        result.setLocale(locale);
+        result.setPattern(pattern);
+        result.setType(type);
+
+        return result;
+    }
+
+
+    /* Evaluates expressions as necessary */
+    private void evaluateExpressions() {
+
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        ELContext elContext = facesContext.getELContext();
+
+        if (currencyCodeExpression != null) {
+            currencyCode = (String)
+            ELUtils.evaluateValueExpression(currencyCodeExpression,
+                elContext);
+        }
+        if (currencySymbolExpression != null) {
+            currencySymbol = (String)
+            ELUtils.evaluateValueExpression(currencySymbolExpression,
+                elContext);
+        }
+        if (patternExpression != null) {
+            pattern = (String)
+            ELUtils.evaluateValueExpression(patternExpression,
+                elContext);
+        }
+        if (typeExpression != null) {
+            type = (String)
+            ELUtils.evaluateValueExpression(typeExpression,
+                elContext);
+        }
+        if (groupingUsedExpression != null) {
+            if (groupingUsedExpression.isLiteralText()) {
+                groupingUsed =
+                Boolean.valueOf(
+                    groupingUsedExpression.getExpressionString()).
+                    booleanValue();
+            } else {
+                groupingUsed = ((Boolean)
+                                   ELUtils.evaluateValueExpression(groupingUsedExpression,
+                                       elContext)).booleanValue();
+            }
+        }
+        if (integerOnlyExpression != null) {
+            if (integerOnlyExpression.isLiteralText()) {
+                integerOnly =
+                Boolean.valueOf(
+                    integerOnlyExpression.getExpressionString()).
+                    booleanValue();
+            } else {
+                integerOnly = ((Boolean)
+                                  ELUtils.evaluateValueExpression(integerOnlyExpression,
+                                      elContext)).booleanValue();
+            }
+        }
+        if (maxFractionDigitsExpression != null) {
+            if (maxFractionDigitsExpression.isLiteralText()) {
+                maxFractionDigits =
+                Integer.valueOf(
+                    maxFractionDigitsExpression.getExpressionString()).
+                    intValue();
+            } else {
+                maxFractionDigits = ((Integer)
+                                        ELUtils.evaluateValueExpression(maxFractionDigitsExpression,
+                                            elContext)).intValue();
+            }
+        }
+        if (maxIntegerDigitsExpression != null) {
+            if (maxIntegerDigitsExpression.isLiteralText()) {
+                maxIntegerDigits =
+                Integer.valueOf(
+                    maxIntegerDigitsExpression.getExpressionString()).
+                    intValue();
+            } else {
+                maxIntegerDigits = ((Integer)
+                                       ELUtils.evaluateValueExpression(maxIntegerDigitsExpression,
+                                           elContext)).intValue();
+            }
+        }
+        if (minFractionDigitsExpression != null) {
+            if (minFractionDigitsExpression.isLiteralText()) {
+                minFractionDigits =
+                Integer.valueOf(
+                    minFractionDigitsExpression.getExpressionString()).
+                    intValue();
+            } else {
+                minFractionDigits = ((Integer)
+                                        ELUtils.evaluateValueExpression(minFractionDigitsExpression,
+                                            elContext)).intValue();
+            }
+        }
+        if (minIntegerDigitsExpression != null) {
+            if (minIntegerDigitsExpression.isLiteralText()) {
+                minIntegerDigits =
+                Integer.valueOf(
+                    minIntegerDigitsExpression.getExpressionString()).
+                    intValue();
+            } else {
+                minIntegerDigits = ((Integer)
+                                       ELUtils.evaluateValueExpression(minIntegerDigitsExpression,
+                                           elContext)).intValue();
+            }
+        }
+        
+        if (localeExpression != null) {
+            if (localeExpression.isLiteralText()) {
+                locale = getLocale(localeExpression.getExpressionString());
+            } else {
+                Object loc = ELUtils.evaluateValueExpression(localeExpression,
+                                                          elContext);
+                if (loc != null) {
+                    if (loc instanceof String) {
+                        locale = getLocale((String) loc);
+                    } else if (loc instanceof Locale) {
+                        locale = (Locale) loc;
+                    } else {
+                        Object[] params = {
+                            "locale",
+                            "java.lang.String or java.util.Locale",
+                            loc.getClass().getName()
+                        };
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE,
+                                       "jsf.core.tags.eval_result_not_expected_type",
+                                       params);
+                        }
+                        throw new FacesException(
+                            MessageUtils.getExceptionMessageString(
+                                MessageUtils.EVAL_ATTR_UNEXPECTED_TYPE, params));
+                    }
+                } else {
+                    locale = facesContext.getViewRoot().getLocale();
+                }
+            }
+        }
+
+    }
+
+
+    protected static Locale getLocale(String string) {
+        if (string == null) {
+            return Locale.getDefault();
+        }
+
+        if (string.length() > 2) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING,
+                           "jsf.core.taglib.invalid_locale_value",
+                           string);
+            }
+        } else {
+            String[] langs = Locale.getISOLanguages();
+            Arrays.sort(langs);
+            if (Arrays.binarySearch(langs, string) < 0) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.core.taglib.invalid_language",
+                               string);
+            }
+        }
+    }
+
+        return new Locale(string, "");
+    }
+    
+} // end of class ConvertNumberTag
diff --git a/com/sun/faces/taglib/jsf_core/ConverterTag.java b/com/sun/faces/taglib/jsf_core/ConverterTag.java
new file mode 100644
index 0000000..240c313
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ConverterTag.java
@@ -0,0 +1,186 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import com.sun.faces.util.MessageUtils;
+
+import javax.el.ValueExpression;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Basic implementation of <code>ConverterELTag</code>.
+ */
+public class ConverterTag extends AbstractConverterTag {
+
+    // --------------------------------------------- Methods from ConverterELTag
+
+
+    @Override
+    protected Converter createConverter() throws JspException {
+
+        if (converterId != null && converterId.isLiteralText()) {
+            return createConverter(converterId,
+                                   binding,
+                                   FacesContext.getCurrentInstance());
+        } else {
+            return new BindingConverter(converterId, binding);
+        }
+
+    }
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    public static class BindingConverter implements Converter, StateHolder {
+
+        ValueExpression converterId;
+        ValueExpression binding;       
+
+        // -------------------------------------------------------- Constructors
+
+
+        /**
+         * <p>This is only used during state restoration.</p>
+         */
+        public BindingConverter() {
+        }
+
+
+        public BindingConverter(ValueExpression converterId,
+                                ValueExpression binding) {
+
+            this.converterId = converterId;
+            this.binding = binding;
+
+        }
+
+        // ---------------------------------------------- Methods From Converter
+
+
+        public Object getAsObject(FacesContext context, UIComponent component, String value) {
+            Converter delegate = getDelegate(context);
+            if (delegate != null) {
+                return delegate.getAsObject(context, component, value);
+            } else {
+                throw new ConverterException(
+                     MessageUtils.getExceptionMessage(
+                          MessageUtils.CANNOT_CONVERT_ID,
+                          converterId != null ? converterId.getExpressionString() : "",
+                          binding != null ? binding.getExpressionString() : ""));
+            }
+        }
+
+        public String getAsString(FacesContext context, UIComponent component, Object value) {
+            Converter delegate = getDelegate(context);
+            if (delegate != null) {
+                return delegate.getAsString(context, component, value);
+            } else {
+                throw new ConverterException(
+                     MessageUtils.getExceptionMessage(
+                          MessageUtils.CANNOT_CONVERT_ID,
+                          converterId != null ? converterId.getExpressionString() : "",
+                          binding != null ? binding.getExpressionString() : "")); 
+            }
+        }
+
+        // -------------------------------------------- Methods from StateHolder
+
+
+        private Object[] state;
+        public Object saveState(FacesContext context) {
+
+            if (context == null) {
+                throw new NullPointerException();
+            }
+            if (state == null) {
+                state = new Object[2];
+            }
+            state[0] = converterId;
+            state[1] = binding;
+
+            return state;
+
+        }
+
+        public void restoreState(FacesContext context, Object state) {
+
+            if (context == null) {
+                throw new NullPointerException();
+            }
+
+            this.state = (Object[]) state;
+            if (this.state != null) {
+                this.converterId = (ValueExpression) this.state[0];
+                this.binding = (ValueExpression) this.state[1];
+            }
+
+        }
+
+        public boolean isTransient() {
+
+            return false;
+
+        }
+
+        public void setTransient(boolean newTransientValue) {
+            //no-op
+        }
+
+        // ----------------------------------------------------- Private Methods
+
+
+        private Converter getDelegate(FacesContext context) {
+
+            return createConverter(converterId, binding, context);
+
+        }
+
+    }
+    
+}
+
+
+
diff --git a/com/sun/faces/taglib/jsf_core/CoreTagParserImpl.java b/com/sun/faces/taglib/jsf_core/CoreTagParserImpl.java
new file mode 100644
index 0000000..37b14b1
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/CoreTagParserImpl.java
@@ -0,0 +1,232 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+import org.xml.sax.Attributes;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.taglib.TagParser;
+import com.sun.faces.taglib.ValidatorInfo;
+
+/**
+ * <p> Parses the command tag attributes and verifies that the required
+ * attributes are present</p>
+ */
+public class CoreTagParserImpl implements TagParser {
+
+    //*********************************************************************
+    // Validation and configuration state (protected)
+
+    // PENDING(edburns): Make this localizable
+    private StringBuffer failureMessages;	// failureMessages
+    private boolean failed;
+    private ValidatorInfo validatorInfo;
+
+    //*********************************************************************
+    // Constructor and lifecycle management
+
+    /**
+     * <p>CoreTagParserImpl constructor</p>
+     */
+    public CoreTagParserImpl() {
+        failed = false;
+        failureMessages = new StringBuffer();
+    }
+
+
+    /**
+     * <p>Set the validator info object that has the current tag
+     * information</p>
+     *
+     * @param validatorInfo object with current tag info
+     */
+    public void setValidatorInfo(ValidatorInfo validatorInfo) {
+        this.validatorInfo = validatorInfo;
+    }
+
+
+    /**
+     * <p>Get the failure message</p>
+     *
+     * @return String Failure message
+     */
+    public String getMessage() {
+        return failureMessages.toString();
+    }
+
+
+    /**
+     * <p>Return false if validator conditions have not been met</p>
+     *
+     * @return boolean false if validation conditions have not been met
+     */
+    public boolean hasFailed() {
+        return failed;
+    }
+
+
+    /**
+     * <p>Parse the starting element.  Parcel out to appropriate
+     * handler method.</p>
+     */
+    public void parseStartElement() {
+       
+        String ns = validatorInfo.getNameSpace();
+        String ln = validatorInfo.getLocalName();
+
+        if (ns.equals(RIConstants.CORE_NAMESPACE)) {
+            if(ln.equals("valueChangeListener")) {
+                handleListener();
+            } else if (ln.equals("actionListener")) {
+                handleListener();
+            } else if (ln.equals("converter")) {
+                handleConverter();
+            } else if (ln.equals("validator")) {
+                handleValidator();
+            }
+        }
+    }
+
+
+    /**
+     * <p>Parse the end element</p>
+     */
+    public void parseEndElement() {
+        //no parsing required
+    }
+
+
+    //*********************************************************************
+    // Private methods
+
+    /**
+     * <p>Listener tags must have a "type" and/or "binding" attribute.</p>
+     * <p/>
+     * <p>PRECONDITION: qn is an actionListener or valueChangeListener </p>
+     */
+    private void handleListener() {
+        Attributes attrs = validatorInfo.getAttributes();
+        String ln = validatorInfo.getLocalName();
+	boolean hasType = false;
+	boolean hasBinding = false;
+
+        for (int i = 0; i < attrs.getLength(); i++) {
+            if (attrs.getLocalName(i).equals("type")) {
+                hasType = true;
+            }
+            if (attrs.getLocalName(i).equals("binding")) {
+                hasBinding = true;
+            }
+        }
+        if (failed = (!hasBinding && !hasType)) {
+            Object[] obj = new Object[1];
+            obj[0] = ln;
+            ResourceBundle rb = ResourceBundle.getBundle(
+                RIConstants.TLV_RESOURCE_LOCATION);
+            failureMessages.append(
+                MessageFormat.format(rb.getString("TLV_LISTENER_ERROR"), obj));
+            failureMessages.append("\n");
+        }
+    }
+
+    /**
+     * <p>Validator tag must have a "validatorId" and/or "binding" attribute.</p>
+     * <p/>
+     * <p>PRECONDITION: qn is a validator</p>
+     */
+    private void handleValidator() {
+        Attributes attrs = validatorInfo.getAttributes();
+        String ln = validatorInfo.getLocalName();
+        boolean hasValidatorId = false;
+        boolean hasBinding = false;
+                                                                                     
+        for (int i = 0; i < attrs.getLength(); i++) {
+            if (attrs.getLocalName(i).equals("validatorId")) {
+                hasValidatorId = true;
+            }
+            if (attrs.getLocalName(i).equals("binding")) {
+                hasBinding = true;
+            }
+        }
+        if (failed = (!hasBinding && !hasValidatorId)) {
+            Object[] obj = new Object[1];
+            obj[0] = ln;
+            ResourceBundle rb = ResourceBundle.getBundle(
+                RIConstants.TLV_RESOURCE_LOCATION);
+            failureMessages.append(
+                MessageFormat.format(rb.getString("TLV_VALIDATOR_ERROR"), obj));
+            failureMessages.append("\n");
+        }
+    }
+
+    /**
+     * <p>Converter tag must have a "converterId" and/or "binding" attribute.</p>
+     * <p/>
+     * <p>PRECONDITION: qn is a converter</p>
+     */
+    private void handleConverter() {
+        Attributes attrs = validatorInfo.getAttributes();
+        String ln = validatorInfo.getLocalName();
+        boolean hasConverterId = false;
+        boolean hasBinding = false;
+                                                                                     
+        for (int i = 0; i < attrs.getLength(); i++) {
+            if (attrs.getLocalName(i).equals("converterId")) {
+                hasConverterId = true;
+            }
+            if (attrs.getLocalName(i).equals("binding")) {
+                hasBinding = true;
+            }
+        }
+        if (failed = (!hasBinding && !hasConverterId)) {
+            Object[] obj = new Object[1];
+            obj[0] = ln;
+            ResourceBundle rb = ResourceBundle.getBundle(
+                RIConstants.TLV_RESOURCE_LOCATION);
+            failureMessages.append(
+                MessageFormat.format(rb.getString("TLV_CONVERTER_ERROR"), obj));
+            failureMessages.append("\n");
+        }
+    }
+}
diff --git a/com/sun/faces/taglib/jsf_core/CoreValidator.java b/com/sun/faces/taglib/jsf_core/CoreValidator.java
new file mode 100644
index 0000000..4cc6aec
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/CoreValidator.java
@@ -0,0 +1,201 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import com.sun.faces.taglib.FacesValidator;
+import com.sun.faces.taglib.ValidatorInfo;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * <p>A TagLibrary Validator class to allow a TLD to mandate that
+ * JSF tag must have an id if it is a child or sibling of a JSTL
+ * conditional or iteration tag</p>
+ *
+ * @author Justyna Horwat
+ */
+public class CoreValidator extends FacesValidator {
+
+    //*********************************************************************
+    // Constants
+
+    //*********************************************************************
+    // Validation and configuration state (protected)
+
+    private ValidatorInfo validatorInfo;
+    private IdTagParserImpl idTagParser;
+    private CoreTagParserImpl coreTagParser;
+
+    //*********************************************************************
+    // Constructor and lifecycle management
+
+    /**
+     * <p>CoreValidator constructor</p>
+     */
+    public CoreValidator() {
+        super();
+        init();
+    }
+
+
+    /**
+     * <p>Initialize state</p>
+     */
+    protected void init() {
+        super.init();
+        failed = false;
+        validatorInfo = new ValidatorInfo();
+
+        idTagParser = new IdTagParserImpl();
+        idTagParser.setValidatorInfo(validatorInfo);        
+  
+        coreTagParser = new CoreTagParserImpl();
+        coreTagParser.setValidatorInfo(validatorInfo);
+        
+    }
+
+
+    /**
+     * <p>Release and re-initialize state</p>
+     */
+    public void release() {
+        super.release();
+        init();
+    }
+
+    //
+    // Superclass overrides.
+    // 
+
+    /**
+     * <p>Get the validator handler</p>
+     */
+    protected DefaultHandler getSAXHandler() {
+        if (java.beans.Beans.isDesignTime()) {
+	    return null;
+	}
+        return new CoreValidatorHandler();
+    }
+
+
+    /**
+     * <p>Create failure message from any failed validations</p>
+     *
+     * @param prefix Tag library prefix
+     * @param uri    Tag library uri
+     */
+    protected String getFailureMessage(String prefix, String uri) {
+        // we should only get called if this Validator failed        
+        StringBuffer result = new StringBuffer();
+
+        if (idTagParser.getMessage() != null) {
+            result.append(idTagParser.getMessage());
+        }
+        if (coreTagParser.getMessage() != null) {
+            result.append(coreTagParser.getMessage());
+        }
+        
+        return result.toString();
+    }
+
+
+    //*********************************************************************
+    // SAX handler
+
+    /**
+     * <p>The handler that provides the base of the TLV implementation.</p>
+     */
+    private class CoreValidatorHandler extends DefaultHandler {
+
+        /**
+         * Parse the starting element. If it is a specific JSTL tag
+         * make sure that the nested JSF tags have IDs.
+         *
+         * @param ns Element name space.
+         * @param ln Element local name.
+         * @param qn Element QName.
+         * @param attrs  Element's Attribute list.
+         */
+        public void startElement(String ns,
+                                 String ln,
+                                 String qn,
+                                 Attributes attrs) {
+            maybeSnagTLPrefixes(qn, attrs);
+
+            validatorInfo.setNameSpace(ns);
+            validatorInfo.setLocalName(ln);
+            validatorInfo.setQName(qn);
+            validatorInfo.setAttributes(attrs);
+            validatorInfo.setValidator(CoreValidator.this);
+
+            idTagParser.parseStartElement();
+
+            if (idTagParser.hasFailed()) {
+                failed = true;
+            }
+            
+            coreTagParser.parseStartElement();
+
+            if (coreTagParser.hasFailed()) {
+                failed = true;
+            }
+        }
+
+
+        /**
+         * <p>Parse the ending element. If it is a specific JSTL tag
+         * make sure that the nested count is decreased.</p>
+         *
+         * @param ns Element name space.
+         * @param ln Element local name.
+         * @param qn Element QName.
+         */
+        public void endElement(String ns, String ln, String qn) {
+            validatorInfo.setNameSpace(ns);
+            validatorInfo.setLocalName(ln);
+            validatorInfo.setQName(qn);
+            idTagParser.parseEndElement();
+            coreTagParser.parseEndElement();
+            
+        }
+    }
+}
diff --git a/com/sun/faces/taglib/jsf_core/IdTagParserImpl.java b/com/sun/faces/taglib/jsf_core/IdTagParserImpl.java
new file mode 100644
index 0000000..4a9160a
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/IdTagParserImpl.java
@@ -0,0 +1,226 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+import org.xml.sax.Attributes;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.taglib.FacesValidator;
+import com.sun.faces.taglib.TagParser;
+import com.sun.faces.taglib.ValidatorInfo;
+
+
+/**
+ * <p>Parses tags to verify that an id attribute is present if it is
+ * determined to be required</p>
+ */
+public class IdTagParserImpl implements TagParser {
+
+    //*********************************************************************
+    // Constants
+
+    //*********************************************************************
+    // Validation and configuration state (protected)
+
+    private boolean siblingSatisfied;		// is there a JSF sibling?
+    private int requiresIdCount;		// nested count
+    private StringBuffer requiresIdList;	// list of failing tags
+    private boolean failed;
+    private ValidatorInfo validatorInfo;
+    private boolean nestedInNamingContainer;
+
+
+    //*********************************************************************
+    // Constructor and lifecycle management
+
+    /**
+     * <p>CommandTagParser constructor</p>
+     */
+    public IdTagParserImpl() {
+        failed = false;
+        siblingSatisfied = true;
+        requiresIdCount = 0;
+        requiresIdList = new StringBuffer();
+    }
+
+
+    /**
+     * <p>Set the validator info object that has the current tag
+     * information</p>
+     *
+     * @param validatorInfo object with current tag info
+     */
+    public void setValidatorInfo(ValidatorInfo validatorInfo) {
+        this.validatorInfo = validatorInfo;
+    }
+
+
+    /**
+     * <p>Get the failure message</p>
+     *
+     * @return String Failure message
+     */
+    public String getMessage() {
+        Object[] obj = new Object[1];
+        obj[0] = requiresIdList;
+        ResourceBundle rb = ResourceBundle.getBundle(
+            RIConstants.TLV_RESOURCE_LOCATION);
+        return MessageFormat.format(rb.getString("TLV_ID_ERROR"), obj);
+    }
+
+
+    /**
+     * <p>Return false if validator conditions have not been met</p>
+     *
+     * @return boolean false if validation conditions have not been met
+     */
+    public boolean hasFailed() {
+        return failed;
+    }
+
+
+    /**
+     * <p>Parse the starting element. If it is a specific JSTL tag
+     * make sure that the nested JSF tags have IDs. </p>
+     */
+    public void parseStartElement() {
+        String ns = validatorInfo.getNameSpace();
+        String ln = validatorInfo.getLocalName();
+
+        String qn = validatorInfo.getQName();
+        Attributes a = validatorInfo.getAttributes();
+        FacesValidator validator = validatorInfo.getValidator();
+
+        if (isNamingContainerTag(validator, ns, ln)) {
+            nestedInNamingContainer = true;
+        } else if ((ns.equals(RIConstants.HTML_NAMESPACE)) &&
+            (requiresIdCount > 0)) {
+            //make sure that id is present in attributes
+            if ((!(nestedInNamingContainer)) && (!hasIdAttribute(a))) {
+                //add to list of jsf tags for error report
+                failed = true;
+                requiresIdList.append(qn).append(' ');
+            }
+        } else if ((requiresIdCount == 0) &&
+            (!siblingSatisfied)) {
+            //make sure jsf sibling has an id
+            if (((ns.equals(RIConstants.HTML_NAMESPACE)) ||
+                (ns.equals(RIConstants.CORE_NAMESPACE))) &&
+                (!hasIdAttribute(a)) && (!(nestedInNamingContainer))) {
+
+                //add to list of jsf tags for error report
+                failed = true;
+                requiresIdList.append(qn).append(' ');
+            }
+            siblingSatisfied = true;
+        } else if (requiresIdCount == 0) {
+            // sibling is a non-JSF tag
+            // JSF tags no longer need id's
+            siblingSatisfied = true;
+        }
+
+    }
+
+
+    /**
+     * <p>Parse the ending element. If it is a specific JSTL tag
+     * make sure that the appropriate flags are set.</p>
+     */
+    public void parseEndElement() {
+        String ns = validatorInfo.getNameSpace();
+        String ln = validatorInfo.getLocalName();
+        FacesValidator validator = validatorInfo.getValidator();
+        if (isNamingContainerTag(validator, ns, ln)) {
+            nestedInNamingContainer = false;
+        }
+    }
+
+    //*********************************************************************
+    // Private methods
+
+    /**
+     * <p>Check element to make sure that the id attribute is
+     * present.</p>
+     *
+     * @param a Attribute list
+     * @return boolean True if id attribute found."id"
+     */
+    private boolean hasIdAttribute(Attributes a) {
+        for (int i = 0; i < a.getLength(); i++) {
+            if (a.getQName(i).equals("id")) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Check to make sure that the element is either a
+     * form tag or a subview tag.
+     *
+     * @param validator Parent validator
+     * @param ns        The Namespace.
+     * @param ln        The Local Name.
+     * @return boolean True if JSF tag is form or subview
+     */
+    private boolean isNamingContainerTag(FacesValidator validator, String ns, String ln) {
+
+        // PENDING (visvan) Handle custom implementations of NamingContainer.
+        // This requires the compiler to look up a fake Faces environment
+        // so that we can look up the component class based on what 
+        // getComponentType() returns to detect customer NamingContainer
+        // components.
+        if (ns.equals(RIConstants.HTML_NAMESPACE)) {
+            if (ln.equals(validator.getJSF_FORM_LN())) {
+                return true; 
+            }
+        } 
+        if (ns.equals(RIConstants.CORE_NAMESPACE)) {
+            if (ln.equals(validator.getJSF_SUBVIEW_LN())) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/com/sun/faces/taglib/jsf_core/LoadBundleTag.java b/com/sun/faces/taglib/jsf_core/LoadBundleTag.java
new file mode 100644
index 0000000..a8e7e34
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/LoadBundleTag.java
@@ -0,0 +1,469 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.el.ELUtils;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.ReflectionUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.RequestStateManager;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.webapp.UIComponentClassicTagBase;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.Stack;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>Tag action that loads the specified ResourceBundle as a Map into
+ * the request scope of the current {@link
+ * javax.faces.context.FacesContext}.</p>
+ * <p/>
+ * <p>The user is discouraged from using multiple dot syntax in their
+ * resource bundle keys.  For example, for the bundle loaded under the
+ * var <code>msgs</code>, this key: <code>index.page.title</code> is
+ * discouraged.  If your application requires this syntax for resource
+ * bundle keys, they may be referred to in the page with a syntax like
+ * this: <code>#{msgs["index.page.title"]}.</code></p>
+ */
+
+public class LoadBundleTag extends TagSupport {
+    
+    static final String 
+            PRE_VIEW_LOADBUNDLES_LIST_ATTR_NAME = 
+            "com.sun.faces.taglib.jsf_core.PRE_VIEW_LOADBUNDLES_LIST";
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+
+    // ------------------------------------------------------------- Attributes
+
+    private ValueExpression basenameExpression;
+
+
+    /**
+     * <p>Set the base name of the <code>ResourceBundle</code> to be
+     * loaded.</p>
+     * @param basename the ValueExpression which will resolve the basename
+     */
+    public void setBasename(ValueExpression basename) {
+        this.basenameExpression = basename;
+    }
+
+
+    private String var;
+
+
+    /**
+     * <p>Set the name of the attribute in the request scope under which
+     * to store the <code>ResourceBundle</code> <code>Map</code>.</p>
+     * @param var the variable name to export the loaded ResourceBundle to
+     */
+    public void setVar(String var) {
+        this.var = var;
+    }
+
+
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Load the <code>ResourceBundle</code> named by our
+     * <code>basename</code> property.</p>  Wrap it in an immutable
+     * <code>Map</code> implementation and store the <code>Map</code> in
+     * the request attr set of under the key given by our
+     * <code>var</code> property.
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        FacesContext context = FacesContext.getCurrentInstance();
+
+        // evaluate any VB expression that we were passed
+        String basename;
+
+        basename = (String)
+            ELUtils.evaluateValueExpression(basenameExpression,
+                                         context.getELContext());
+
+
+        if (null == basename) {
+        	String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "baseName");
+        	throw new NullPointerException(message);
+        }
+        if (null == var) {
+        	String message = MessageUtils.getExceptionMessageString
+                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "baseName");
+        	throw new NullPointerException(message);
+        }
+
+        final ResourceBundle bundle =
+            ResourceBundle.getBundle(basename,
+                                     context.getViewRoot().getLocale(),
+                                     Util.getCurrentLoader(this));
+        if (null == bundle) {
+            throw new JspException("null ResourceBundle for " + basename);
+        }
+
+        Map toStore =
+            new Map() {
+                // this is an immutable Map
+            
+            public String toString() {
+                StringBuffer sb = new StringBuffer();
+                Iterator<Map.Entry<String,Object>> entries = 
+                        this.entrySet().iterator();
+                Map.Entry<String,Object> cur;
+                while (entries.hasNext()) {
+                    cur = entries.next();
+                    sb.append(cur.getKey()).append(": ").append(cur.getValue()).append('\n');
+                }
+
+                return sb.toString();
+            }
+
+                // Do not need to implement for immutable Map
+                public void clear() {
+                    throw new UnsupportedOperationException();
+                }
+
+
+                public boolean containsKey(Object key) {
+                    boolean result = false;
+                    if (null != key) {
+                        result = (null != bundle.getObject(key.toString()));
+                    }
+                    return result;
+                }
+
+
+                public boolean containsValue(Object value) {
+                    Enumeration<String> keys = bundle.getKeys();
+                    boolean result = false;
+                    while (keys.hasMoreElements()) {
+                        Object curObj = bundle.getObject(keys.nextElement());
+                        if ((curObj == value) ||
+                            ((null != curObj) && curObj.equals(value))) {
+                            result = true;
+                            break;
+                        }
+                    }
+                    return result;
+                }
+
+
+                public Set<Map.Entry<String,Object>> entrySet() {
+                    HashMap<String,Object> mappings = new HashMap<String, Object>();
+                    Enumeration<String> keys = bundle.getKeys();
+                    while (keys.hasMoreElements()) {
+                        String key = keys.nextElement();
+                        Object value = bundle.getObject(key);
+                        mappings.put(key, value);
+                    }
+                    return mappings.entrySet();
+                }
+
+
+                public boolean equals(Object obj) {
+                    return !((obj == null) || !(obj instanceof Map))
+                           && entrySet().equals(((Map) obj).entrySet());
+
+                }
+
+
+                public Object get(Object key) {
+                    if (null == key) {
+                        return null;
+                    }
+                    try {
+                        return bundle.getObject(key.toString());
+                    } catch (MissingResourceException e) {
+                        return "???" + key + "???";
+                    }
+                }
+
+
+                public int hashCode() {
+                    return bundle.hashCode();
+                }
+
+
+                public boolean isEmpty() {
+                    Enumeration<String> keys = bundle.getKeys();
+                    return !keys.hasMoreElements();
+                }
+
+
+                public Set keySet() {
+                    Set<String> keySet = new HashSet<String>();
+                    Enumeration<String> keys = bundle.getKeys();
+                    while (keys.hasMoreElements()) {
+                        keySet.add(keys.nextElement());
+                    }
+                    return keySet;
+                }
+
+
+                // Do not need to implement for immutable Map
+                public Object put(Object k, Object v) {
+                    throw new UnsupportedOperationException();
+                }
+
+
+                // Do not need to implement for immutable Map
+                public void putAll(Map t) {
+                    throw new UnsupportedOperationException();
+                }
+
+
+                // Do not need to implement for immutable Map
+                public Object remove(Object k) {
+                    throw new UnsupportedOperationException();
+                }
+
+
+                public int size() {
+                    int result = 0;
+                    Enumeration<String> keys = bundle.getKeys();
+                    while (keys.hasMoreElements()) {
+                        keys.nextElement();
+                        result++;
+                    }
+                    return result;
+                }
+
+
+                public java.util.Collection values() {
+                    ArrayList<Object> result = new ArrayList<Object>();
+                    Enumeration<String> keys = bundle.getKeys();
+                    while (keys.hasMoreElements()) {
+                        result.add(
+                            bundle.getObject(keys.nextElement()));
+                    }
+                    return result;
+                }
+            };
+
+        ExternalContext extContext = context.getExternalContext();
+        extContext.getRequestMap().put(var, toStore);
+
+        if (WebConfiguration.getInstance(extContext)
+              .isOptionEnabled
+                    (BooleanWebContextInitParameter.EnableLoadBundle11Compatibility)) {
+            // the UIComponent that wraps the Map
+            UIComponent bundleComponent =
+                  createNewLoadBundleComponent(var, toStore);
+            UIComponentClassicTagBase parentTag = getParentUIComponentTag();
+
+            // Is this loadBundle tag instance outside of <f:view>?
+            if (null == parentTag) {
+                // Yes.  Store the bundleComponent in a list so the <f:view> tag
+                // can add the list contents as the first children.
+                List<UIComponent> preViewBundleComponents =
+                      getPreViewLoadBundleComponentList();
+                preViewBundleComponents.add(bundleComponent);
+            } else {
+                // No.  Use addChild to add the bundeComponent to the tree.
+                addChildToParentTagAndParentComponent(bundleComponent, parentTag);
+            }
+        }
+
+        return (EVAL_BODY_INCLUDE);
+
+    }
+    
+    static void addChildToParentTagAndParentComponent(UIComponent child,
+            UIComponentClassicTagBase parentTag) {
+        
+        Method addChildToComponentAndTag;
+        
+        if (null != (addChildToComponentAndTag = 
+                ReflectionUtils.lookupMethod(UIComponentClassicTagBase.class,
+                "addChildToComponentAndTag",
+                UIComponent.class))) {
+            try {
+                addChildToComponentAndTag.setAccessible(true);
+                addChildToComponentAndTag.invoke(parentTag,
+                        child);
+            }
+            catch (IllegalAccessException accessException) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, 
+                            "Unable to add " + child + " to tree:", accessException);
+                }
+                
+            }
+            catch (IllegalArgumentException argumentException) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING, 
+                            "Unable to add " + child + " to tree:", argumentException);
+                }
+                
+            }
+            catch (InvocationTargetException targetException) {
+                Throwable cause = targetException.getCause();
+                if (cause instanceof RuntimeException) {
+                    throw ((RuntimeException) cause);
+                }
+            }
+        }
+    }
+    
+    static List<UIComponent> getPreViewLoadBundleComponentList() {
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        Map<String,Object> stateMap = RequestStateManager.getStateMap(ctx);
+
+        //noinspection unchecked
+        List<UIComponent> result = (List<UIComponent>)
+              stateMap.get(PRE_VIEW_LOADBUNDLES_LIST_ATTR_NAME);
+        if (result == null) {
+            result = new ArrayList<UIComponent>();
+            stateMap.put(PRE_VIEW_LOADBUNDLES_LIST_ATTR_NAME, result);
+        }
+        
+        return result;
+    }
+    
+    private UIComponent createNewLoadBundleComponent(String var, 
+            Map toStore) {
+        UIComponent result = new LoadBundleComponent(var, toStore);
+        result.setTransient(true);
+        return result;
+    }
+
+    /**
+     * @return the <code>UIComponentClassicTagBase</code> instance
+     *  that represents the tag in the page to which the special
+     *  component should be added as a child
+     */
+    private UIComponentClassicTagBase getParentUIComponentTag() {
+        Tag parent = this.getParent();
+        while (null != parent && 
+                (!(parent instanceof UIComponentClassicTagBase))) {
+            parent = this.getParent();
+        }
+        UIComponentClassicTagBase result = (UIComponentClassicTagBase) parent;
+        
+        // Check for case where the <f:loadBundle> is inside of an included page,
+        // but outside of the <f:subview> for that page.  This can happen
+        // either when the <f:subview> is in the includING page *OR* when
+        // the <f:subview> is in the includED page, yet the <f:loadBundle> is
+        // outside of the <f:subview> in the includED page.
+        Stack<UIComponentClassicTagBase> viewTagStack = SubviewTag.getViewTagStack();
+        if (!viewTagStack.empty()) {
+            result = viewTagStack.peek();
+        }
+        
+        return result;
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.basenameExpression = null;
+        this.var = null;
+
+    }
+    
+    private static class LoadBundleComponent extends UIComponentBase {
+            private String var;
+            private Map toStore;
+            
+            public LoadBundleComponent(String var, Map toStore) {
+                this.var = var;
+                this.toStore = toStore;
+            }
+        
+            public String getFamily() {
+                return null;
+            }
+            
+            public void encodeBegin(FacesContext context) throws IOException {
+                Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
+                
+                requestMap.put(var, toStore);
+            }
+            
+            public void encodeEnd(FacesContext context) throws IOException {
+            }
+
+            public void encodeChildren(FacesContext context) throws IOException {
+            }
+            
+            public String toString() {
+
+                return "LoadBundleComponent: var: " + var + " keys: " +
+                        toStore.toString();
+            }
+        
+    }
+    
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/MaxMinValidatorTag.java b/com/sun/faces/taglib/jsf_core/MaxMinValidatorTag.java
new file mode 100644
index 0000000..fb27753
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/MaxMinValidatorTag.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// MaxMinValidatorTag.java
+
+package com.sun.faces.taglib.jsf_core;
+
+/**
+ * <B>MaxMinValidatorTag</B> contains ivars for maximumSet and minimumSet.
+ * <p/>
+ * <B>Lifetime And Scope</B> <P>
+ *
+ */
+
+public abstract class MaxMinValidatorTag extends AbstractValidatorTag {
+
+
+    /**
+     * <p>Flag indicating whether a maximum limit has been set.</p>
+     */
+    protected boolean maximumSet = false;
+
+    /**
+     * <p>Flag indicating whether a minimum limit has been set.</p>
+     */
+    protected boolean minimumSet = false;
+
+
+} // end of class MaxMinValidatorTag
diff --git a/com/sun/faces/taglib/jsf_core/ParameterTag.java b/com/sun/faces/taglib/jsf_core/ParameterTag.java
new file mode 100644
index 0000000..bfeaba2
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ParameterTag.java
@@ -0,0 +1,129 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ParameterTag.java
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIParameter;
+import javax.faces.webapp.UIComponentELTag;
+
+public class ParameterTag extends UIComponentELTag {
+
+//
+// Protected Constants
+//
+
+//
+// Class Variables
+//
+
+//
+// Instance Variables
+//
+    private ValueExpression name;
+    private ValueExpression value;
+
+// Attribute Instance Variables
+
+
+// Relationship Instance Variables
+
+//
+// Constructors and Initializers
+//
+
+    public ParameterTag() {
+        super();
+    }
+
+//
+// Class methods
+//
+
+//
+// Accessors
+//
+    public void setName(ValueExpression name) {
+        this.name = name;
+    }
+
+
+    public void setValue(ValueExpression value) {
+        this.value = value;
+    }
+
+//
+// General Methods
+//
+
+    public String getRendererType() {
+        return null;
+    }
+
+
+    public String getComponentType() {
+        return "javax.faces.Parameter";
+    }
+
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        UIParameter parameter = (UIParameter) component;
+
+        if (name != null) {
+            if (!name.isLiteralText()) {
+                parameter.setValueExpression("name", name);
+            } else {
+                parameter.setName(name.getExpressionString());
+            }
+        }
+        // if component has non null value, do not call setValue().
+        if (value != null) {
+            if (!value.isLiteralText()) {
+                component.setValueExpression("value", value);
+            } else {
+                parameter.setValue(value.getExpressionString());
+            }
+        }
+    }
+}
diff --git a/com/sun/faces/taglib/jsf_core/PhaseListenerTag.java b/com/sun/faces/taglib/jsf_core/PhaseListenerTag.java
new file mode 100644
index 0000000..24edac8
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/PhaseListenerTag.java
@@ -0,0 +1,279 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.faces.webapp.UIComponentELTag;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagSupport;
+import java.io.Serializable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>Tag implementation that creates a {@link PhaseListener} instance
+ * and registers it on the {@link UIViewRoot} associated with our most
+ * immediate surrounding instance of a tag whose component
+ * is an instance of {@link UIViewRoot}.  This tag creates no output to the
+ * page currently being created.</p>
+ * <p/>
+ */
+
+public class PhaseListenerTag extends TagSupport {
+
+
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+
+    // ------------------------------------------------------------- Attributes
+
+
+    /**
+     * <p>The fully qualified class name of the {@link PhaseListener}
+     * instance to be created.</p>
+     */
+    private ValueExpression type = null;
+
+    /**
+     * <p>The value binding expression used to create a listener
+     * instance and it is also used to wire up this listener to an
+     * {@link PhaseListener} property of a JavaBean class.</p>
+     */
+    private ValueExpression binding = null;
+
+    /**
+     * <p>Set the fully qualified class name of the
+     * {@link PhaseListener} instance to be created.
+     *
+     * @param type The new class name
+     */
+    public void setType(ValueExpression type) {
+
+        this.type = type;
+
+    }
+
+    /*
+     * <p>Set the value binding expression  for this listener.</p>
+     *
+     * @param binding The new value binding expression
+     */
+    public void setBinding(ValueExpression binding) {
+        this.binding = binding;
+    }
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the specified {@link PhaseListener}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentELTag} instance, if
+     * the {@link UIComponent} instance was created by this execution of the
+     * containing JSP page.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // find the viewTag
+        Tag parent = this;
+        UIComponentELTag tag = null;
+        while (null != (parent = parent.getParent())) {
+            if (parent instanceof UIComponentELTag) {
+                tag = (UIComponentELTag) parent;
+            }
+        }
+
+        if (tag == null) {
+            Object params[] = {this.getClass().getName()};
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(
+                      MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID, params));
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }
+
+        UIViewRoot viewRoot = (UIViewRoot) tag.getComponentInstance();
+        if (viewRoot == null) {
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
+        }
+
+        // If binding is null, type is set and is a literal value,
+        // then don't bother wrapping.  Just instantiate and
+        // set.
+        PhaseListener listener;
+        if (binding == null && type != null && type.isLiteralText()) {
+            try {
+                listener = (PhaseListener)
+                    Util.getListenerInstance(type, null);
+            } catch (Exception e) {
+                throw new JspException(e.getMessage(), e.getCause());
+            }
+        } else {
+            listener = new BindingPhaseListener(type, binding);            
+        }
+        viewRoot.addPhaseListener(listener);
+
+        return (SKIP_BODY);
+
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.type = null;
+
+    }
+
+
+// ----------------------------------------------------------- Inner Classes
+
+
+    private static class BindingPhaseListener
+         implements PhaseListener, Serializable {
+
+        private ValueExpression type;
+        private ValueExpression binding;
+
+        // -------------------------------------------------------- Constructors
+
+
+        public BindingPhaseListener(ValueExpression type,
+                                    ValueExpression binding) {
+
+            this.type = type;
+            this.binding = binding;
+
+        }
+
+        // ------------------------------------------ Methods from PhaseListener
+
+
+        /**
+         * <p>Handle a notification that the processing for a particular
+         * phase has just been completed.</p>
+         */
+        public void afterPhase(PhaseEvent event) {
+
+            PhaseListener listener = getPhaseListener();
+            if (listener != null) {
+                listener.afterPhase(event);
+            }
+
+        }
+
+        /**
+         * <p>Handle a notification that the processing for a particular
+         * phase of the request processing lifecycle is about to begin.</p>
+         */
+        public void beforePhase(PhaseEvent event) {
+
+            PhaseListener listener = getPhaseListener();
+            if (listener != null) {
+                listener.beforePhase(event);
+            }
+
+        }
+
+        /**
+         * <p>Return the identifier of the request processing phase during
+         * which this listener is interested in processing {@link javax.faces.event.PhaseEvent}
+         * events.  Legal values are the singleton instances defined by the
+         * {@link javax.faces.event.PhaseId} class, including <code>PhaseId.ANY_PHASE</code>
+         * to indicate an interest in being notified for all standard phases.</p>
+         */
+        public PhaseId getPhaseId() {
+
+            PhaseListener listener = getPhaseListener();
+            if (listener != null) {
+                return listener.getPhaseId();
+            }
+
+            return null;
+
+        }
+
+        /**
+         * <p>Invoked when the value change described by the specified
+         * {@link javax.faces.event.ValueChangeEvent} occurs.</p>
+         *
+         * @return a <code>PhaseListener</code> instance
+         * @throws javax.faces.event.AbortProcessingException
+         *          Signal the JavaServer Faces
+         *          implementation that no further processing on the current event
+         *          should be performed
+         */
+        public PhaseListener getPhaseListener() throws AbortProcessingException {
+            PhaseListener instance = (PhaseListener)
+                     Util.getListenerInstance(type, binding);
+            if (instance != null) {
+                return instance;
+            } else {
+                 if (LOGGER.isLoggable(Level.WARNING)) {
+                    // PENDING i18n
+                    LOGGER.warning("PhaseListener will not be processed - " +
+                         "both 'binding' and 'type' are null");
+                }
+                return null;
+            }
+        }
+    }
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/RegexValidatorTag.java b/com/sun/faces/taglib/jsf_core/RegexValidatorTag.java
new file mode 100644
index 0000000..c3deb92
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/RegexValidatorTag.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.faces.validator.RegexValidator;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.servlet.jsp.JspException;
+
+
+/**
+ * Tag for the Regular Expression Validator.  Can accept a regex pattern as a
+ * property - this will be used to validate against.
+ * @author driscoll
+ */
+public class RegexValidatorTag extends AbstractValidatorTag {
+
+    private ValueExpression regex;
+    private ValueExpression VALIDATOR_ID_EXPR;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public RegexValidatorTag() {
+        if (VALIDATOR_ID_EXPR == null) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ExpressionFactory factory =
+                context.getApplication().getExpressionFactory();
+            VALIDATOR_ID_EXPR =
+                factory.createValueExpression(context.getELContext(),
+                    "javax.faces.RegularExpression",String.class);
+        }
+    }
+
+    /**
+     * Set the Regular Expression to use for validation.
+     * @param pattern A regular expression - needs to be escaped, @see java.util.regex .
+     */
+    public void setPattern(ValueExpression pattern) {
+        this.regex = pattern;
+    }
+
+    @Override
+    protected Validator createValidator() throws JspException {
+        super.setValidatorId(VALIDATOR_ID_EXPR);
+        RegexValidator validator = (RegexValidator) super.createValidator();
+        assert (validator != null);
+        if (regex != null) {
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            validator.setPattern((String) regex.getValue(ctx.getELContext()));
+        }
+        return validator;
+        
+    }
+}
diff --git a/com/sun/faces/taglib/jsf_core/SelectItemTag.java b/com/sun/faces/taglib/jsf_core/SelectItemTag.java
new file mode 100644
index 0000000..11240e7
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/SelectItemTag.java
@@ -0,0 +1,225 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectItem;
+import javax.faces.webapp.UIComponentELTag;
+
+
+/**
+ * This class is the tag handler that evaluates the
+ * <code>selectitem</code> custom tag.
+ */
+
+public class SelectItemTag extends UIComponentELTag {
+
+    //
+    // Protected Constants
+    //
+
+    //
+    // Class Variables
+    //
+
+    //
+    // Instance Variables
+    //
+
+    // Attribute Instance Variables
+
+    protected ValueExpression itemValue;
+    protected ValueExpression itemLabel;
+    protected ValueExpression itemDescription;
+    protected ValueExpression itemDisabled;
+    protected ValueExpression noSelectionOption = null;
+
+    protected ValueExpression value;
+
+    // Relationship Instance Variables
+
+    //
+    // Constructors and Initializers    
+    //
+
+    public SelectItemTag() {
+        super();
+    }
+
+    //
+    // Class methods
+    //
+
+    // 
+    // Accessors
+    //
+
+    public void setItemValue(ValueExpression value) {
+        this.itemValue = value;
+    }
+
+
+    public void setItemLabel(ValueExpression label) {
+        this.itemLabel = label;
+    }
+
+
+    public void setItemDescription(ValueExpression itemDescription) {
+        this.itemDescription = itemDescription;
+    }
+
+    public void setItemDisabled(ValueExpression itemDisabled) {
+        this.itemDisabled = itemDisabled;
+    }
+
+
+    public void setValue(ValueExpression value) {
+        this.value = value;
+    }
+
+    public void setNoSelectionOption(ValueExpression noSelectionOption) {
+        this.noSelectionOption = noSelectionOption;
+    }
+
+
+    //
+    // General Methods
+    //
+    public String getRendererType() {
+        return null;
+    }
+
+
+    public String getComponentType() {
+        return "javax.faces.SelectItem";
+    }
+    
+    //
+    // Methods from BaseComponentTag
+    //
+
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        UISelectItem selectItem = (UISelectItem) component;
+
+        if (null != value) {
+            if (!value.isLiteralText()) {
+                selectItem.setValueExpression("value", value);
+            } else {
+                selectItem.setValue(value.getExpressionString());
+            }
+        }
+
+        if (null != itemValue) {
+            if (!itemValue.isLiteralText()) {
+                selectItem.setValueExpression("itemValue", itemValue);
+            } else {
+                selectItem.setItemValue(itemValue.getExpressionString());
+            }
+        }
+        if (null != itemLabel) {
+            if (!itemLabel.isLiteralText()) {
+                selectItem.setValueExpression("itemLabel", itemLabel);
+            } else {
+                selectItem.setItemLabel(itemLabel.getExpressionString());
+            }
+        }
+        if (null != itemDescription) {
+            if (!itemDescription.isLiteralText()) {
+                selectItem.setValueExpression("itemDescription",
+                                              itemDescription);
+            } else {
+                selectItem.setItemDescription(
+                    itemDescription.getExpressionString());
+            }
+        }
+        if (null != itemDisabled) {
+            if (!itemDisabled.isLiteralText()) {
+                selectItem.setValueExpression("itemDisabled", itemDisabled);
+            } else {
+                selectItem.setItemDisabled(
+                    Boolean.valueOf(itemDisabled.getExpressionString()).
+                        booleanValue());
+            }
+        }
+        if (null != noSelectionOption) {
+            if (!noSelectionOption.isLiteralText()) {
+                selectItem.setValueExpression("noSelectionOption", noSelectionOption);
+            } else {
+                selectItem.setNoSelectionOption(
+                    Boolean.valueOf(noSelectionOption.getExpressionString()).
+                        booleanValue());
+            }
+        }
+        if (null != escape) {
+            if (!escape.isLiteralText()) {
+                selectItem.setValueExpression("escape", escape);
+            } else {
+                selectItem.setItemEscaped(
+                    Boolean.valueOf(escape.getExpressionString()).
+                        booleanValue());            }
+        }
+
+    }
+
+    /**
+     * Holds value of property escape.
+     */
+    private ValueExpression escape;
+
+    /**
+     * Getter for property escape.
+     * @return Value of property escape.
+     */
+    public ValueExpression getEscape() {
+        return this.escape;
+    }
+
+    /**
+     * Setter for property escape.
+     * @param escape New value of property escape.
+     */
+    public void setEscape(ValueExpression escape) {
+        this.escape = escape;
+    }
+
+} // end of class SelectItemTag
diff --git a/com/sun/faces/taglib/jsf_core/SelectItemsTag.java b/com/sun/faces/taglib/jsf_core/SelectItemsTag.java
new file mode 100644
index 0000000..7ccaff0
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/SelectItemsTag.java
@@ -0,0 +1,158 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectItems;
+import javax.faces.webapp.UIComponentELTag;
+
+/**
+ * This class is the tag handler that evaluates the
+ * <code>selectitems</code> custom tag.
+ */
+
+public class SelectItemsTag extends UIComponentELTag {
+
+    private ValueExpression value;
+    private String var;
+    private ValueExpression itemValue;
+    private ValueExpression itemLabel;
+    private ValueExpression itemDescription;
+    private ValueExpression itemDisabled;
+    private ValueExpression itemLabelEscaped;
+    private ValueExpression noSelectionOption;
+    
+
+    // ---------------------------------------------------------- Tag Attributes
+
+
+    public void setValue(ValueExpression value) {
+        this.value = value;
+    }
+
+    public void setVar(String var) {
+        this.var = var;
+    }
+
+    public void setItemValue(ValueExpression itemValue) {
+        this.itemValue = itemValue;
+    }
+
+    public void setItemLabel(ValueExpression itemLabel) {
+        this.itemLabel = itemLabel;
+    }
+
+    public void setItemDescription(ValueExpression itemDescription) {
+        this.itemDescription = itemDescription;
+    }
+
+    public void setItemDisabled(ValueExpression itemDisabled) {
+        this.itemDisabled = itemDisabled;
+    }
+
+    public void setItemLabelEscaped(ValueExpression itemLabelEscaped) {
+        this.itemLabelEscaped = itemLabelEscaped;
+    }
+
+    public void setNoSelectionOption(ValueExpression noSelectionOption) {
+        this.noSelectionOption = noSelectionOption;
+    }
+    
+    // ----------------------------------------- Methods from UIComponentTagBase
+
+
+    /**
+     * @see javax.faces.webapp.UIComponentELTag#getRendererType()
+     */
+    public String getRendererType() {
+        return null;
+    }
+
+
+    /**
+     * @see javax.faces.webapp.UIComponentELTag#getComponentType()
+     * @see javax.faces.component.UISelectItems#COMPONENT_TYPE
+     */
+    public String getComponentType() {
+        return UISelectItems.COMPONENT_TYPE;
+    }
+
+
+    // ------------------------------------------- Methods from UIComponentELTag
+
+
+    /**
+     * @see javax.faces.webapp.UIComponentELTag#setProperties(javax.faces.component.UIComponent)
+     * @param component
+     */
+    @Override
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+
+        if (value != null) {
+            component.setValueExpression("value", value);
+        }
+        if (var != null) {
+            component.getAttributes().put("var", var);
+        }
+        if (itemValue != null) {
+            component.setValueExpression("itemValue", itemValue);
+        }
+        if (itemLabel != null) {
+            component.setValueExpression("itemLabel", itemLabel);
+        }
+        if (itemDescription != null) {
+            component.setValueExpression("itemDescription", itemDescription);
+        }
+        if (itemDisabled != null) {
+            component.setValueExpression("itemDisabled", itemDisabled);
+        }
+        if (itemLabelEscaped != null) {
+            component.setValueExpression("itemLabelEscaped", itemLabelEscaped);
+        }
+        if (noSelectionOption != null) {
+            component.setValueExpression("noSelectionOption", noSelectionOption);
+        }
+
+    }
+
+} // end of class SelectItemsTag
diff --git a/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerImpl.java b/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerImpl.java
new file mode 100644
index 0000000..6c73f29
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerImpl.java
@@ -0,0 +1,136 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+
+public class SetPropertyActionListenerImpl implements ActionListener, StateHolder {
+    
+    private ValueExpression target;
+    private ValueExpression source;
+
+
+    // ------------------------------------------------------------ Constructors
+    
+    public SetPropertyActionListenerImpl() {}
+
+
+    public SetPropertyActionListenerImpl(ValueExpression target, ValueExpression value) {
+
+        this.target = target;
+        this.source = value;
+
+    }
+
+
+    // --------------------------------------------- Methods from ActionListener
+
+
+    public void processAction(ActionEvent e) throws AbortProcessingException {
+
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        ELContext elContext = facesContext.getELContext();
+
+        try {
+            Object value = source.getValue(elContext);
+            if (value != null) {
+                ExpressionFactory factory =
+                      facesContext.getApplication().getExpressionFactory();
+                value = factory.coerceToType(value, target.getType(elContext));
+            }
+            target.setValue(elContext, value);
+        } catch (ELException ele) {
+            throw new AbortProcessingException(ele);
+        }
+
+
+    }
+
+
+    // ------------------------------------------------ Methods from StateHolder
+
+    
+    public void setTransient(boolean trans) {
+    }
+
+    
+    public boolean isTransient() {
+
+        return false;
+
+    }
+
+    
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        Object [] state = new Object[2];
+        state[0] = target;
+        state[1] = source;
+        return state;
+
+    }
+    
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+        Object [] stateArray = (Object []) state;
+        target = (ValueExpression) stateArray[0];
+        source = (ValueExpression) stateArray[1];
+
+    }
+    
+}
diff --git a/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerTag.java b/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerTag.java
new file mode 100644
index 0000000..6cde317
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerTag.java
@@ -0,0 +1,186 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ValueExpression;
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+import javax.faces.event.ActionListener;
+import javax.faces.webapp.UIComponentClassicTagBase;
+import javax.faces.webapp.UIComponentELTag;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+import com.sun.faces.util.MessageUtils;
+
+
+/**
+ * <p>Tag implementation that creates a special {@link ActionListener} instance
+ * and registers it on the {@link ActionSource} associated with our most
+ * immediate surrounding instance of a tag whose implementation class
+ * is a subclass of {@link UIComponentClassicTagBase}.  This tag creates no output to
+ * the page currently being created.</p>
+ * <p/>
+ * <p>The ActionListener instance created and installed by this tag has the 
+ * following behavior and contract.</p>
+ *
+ * <ul>
+ *
+ * <li>Only create and register the <code>ActionListener</code> instance
+ * the first time the component for this tag is created</li>
+ *
+ * <li>The "target" and "value" tag attributes are ValueExpression
+ * instances and are stored unevaluated as instance variables of the
+ * listener.</li>
+ *
+ * <li>When the listener executes, call getValue() on the "value"
+ * ValueExpression.  Pass the result to a call to setValue() on the
+ * "target" ValueExpression</li>
+ *
+ * </ul>
+ *
+ * <p>This tag creates no output to the page currently being created.  It
+ * is used solely for the side effect of {@link ActionListener}
+ * creation.</p>
+ */
+
+public class SetPropertyActionListenerTag extends TagSupport {
+
+
+    // ------------------------------------------------------------- Attributes
+
+    static final long serialVersionUID = 7966883942522780374L;
+
+    /**
+     * <p>The target of the value attribute.</p>
+     */
+    private ValueExpression target = null;
+
+    /**
+     * <p>The value that is set into the target attribute.</p>
+     */
+    private ValueExpression value = null;
+
+    /**
+     * <p>Setter for the target attribute</p>
+     *
+     * @param target The new class name
+     */
+    public void setTarget(ValueExpression target) {
+
+        this.target = target;
+
+    }
+
+    /*
+     * <p>Setter for the value attribute</p>
+     *
+     * @param value The new value value expression
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public void setValue(ValueExpression value) {
+    this.value = value;
+    }
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the {@link ActionListener}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentClassicTagBase}
+     * instance.  The behavior of the {@link ActionListener} must conform 
+     * to the class description.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+            UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) {
+            Object params [] = {this.getClass().getName()};
+            throw new JspException(
+                MessageUtils.getExceptionMessageString(
+                    MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID, params));
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }    
+
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {
+            throw new JspException(
+                MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
+        }
+        if (!(component instanceof ActionSource)) {
+            Object params [] = {"setPropertyActionListener", "javax.faces.component.ActionSource"};
+            throw new JspException(
+                MessageUtils.getExceptionMessageString(
+                    MessageUtils.NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID, params));
+        }
+
+        ActionListener handler = new SetPropertyActionListenerImpl(target, value);
+        ((ActionSource) component).addActionListener(handler);
+
+        return (SKIP_BODY);
+
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.value = null;
+        this.target = null;
+
+    }
+
+
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/SubviewTag.java b/com/sun/faces/taglib/jsf_core/SubviewTag.java
new file mode 100644
index 0000000..a88749a
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/SubviewTag.java
@@ -0,0 +1,229 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import java.util.Stack;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.webapp.UIComponentClassicTagBase;
+import javax.faces.webapp.UIComponentELTag;
+import javax.servlet.jsp.JspException;
+
+import java.lang.reflect.Method;
+
+import com.sun.faces.util.RequestStateManager;
+import com.sun.faces.util.ReflectionUtils;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.RIConstants;
+import java.util.Map;
+
+public class SubviewTag extends UIComponentELTag {
+
+
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public SubviewTag() {
+
+        super();
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    public String getComponentType() {
+
+        return "javax.faces.NamingContainer";
+
+    }
+
+   
+    public String getRendererType() {
+
+        return null;
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    protected UIComponent createVerbatimComponentFromBodyContent() {
+
+        UIOutput verbatim = (UIOutput)
+              super.createVerbatimComponentFromBodyContent();
+        String value = null;
+
+        FacesContext ctx = getFacesContext();
+        Object response = ctx.getExternalContext().getResponse();
+        // flush out any content above the view tag
+        Method customFlush = ReflectionUtils.lookupMethod(response.getClass(),
+                                                          "flushContentToWrappedResponse",
+                                                          RIConstants.EMPTY_CLASS_ARGS);
+        Method isBytes = ReflectionUtils.lookupMethod(response.getClass(),
+                                                      "isBytes",
+                                                      RIConstants.EMPTY_CLASS_ARGS);
+        Method isChars = ReflectionUtils.lookupMethod(response.getClass(),
+                                                      "isChars",
+                                                      RIConstants.EMPTY_CLASS_ARGS);
+        Method resetBuffers = ReflectionUtils.lookupMethod(response.getClass(),
+                                                           "resetBuffers",
+                                                           RIConstants.EMPTY_CLASS_ARGS);
+        Method getChars = ReflectionUtils.lookupMethod(response.getClass(),
+                                                       "getChars",
+                                                       RIConstants.EMPTY_CLASS_ARGS);
+        boolean cont = true;
+        if (isBytes == null) {
+            cont = false;
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.core.taglib.subviewtag.interweaving_failed_isbytes");
+            }
+        }
+        if (isChars == null) {
+            cont = false;
+             if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.core.taglib.subviewtag.interweaving_failed_ischars");
+            }
+        }
+        if (resetBuffers == null) {
+            cont = false;
+             if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers");
+            }
+        }
+        if (getChars == null) {
+            cont = false;
+             if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.core.taglib.subviewtag.interweaving_failed_getchars");
+            }
+        }
+        if (customFlush == null) {
+            cont = false;
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.core.taglib.viewtag.interweaving_failed");
+            }
+        }
+
+        if (cont) {
+            try {
+                if ((Boolean) isBytes.invoke(response)) {
+                    customFlush.invoke(response);
+                } else if ((Boolean) isChars.invoke(response)) {
+                    char[] chars = (char[]) getChars.invoke(response);
+                    if (null != chars && 0 < chars.length) {
+                        if (null != verbatim) {
+                            value = (String) verbatim.getValue();
+                        }
+                        verbatim = super.createVerbatimComponent();
+                        if (null != value) {
+                            verbatim.setValue(value + new String(chars));
+                        } else {
+                            verbatim.setValue(new String(chars));
+                        }
+                    }
+                }
+                resetBuffers.invoke(response);
+
+            } catch (Exception e) {
+                throw new FacesException("Response interweaving failed!", e);
+            }
+        }
+
+        return verbatim;
+
+    }
+
+    public int doEndTag() throws JspException {
+        int retValue;
+
+        getViewTagStack().pop();
+        retValue = super.doEndTag();
+        return retValue;
+    }
+
+    public int doStartTag() throws JspException {
+        int retValue;
+        
+        retValue = super.doStartTag();
+        getViewTagStack().push(this);
+        
+        return retValue;
+    }
+
+    /** 
+     *  @return Stack of UIComponentClassicTagBase instances, each of
+     *  which is a "view" tag.  The bottom most element on the stack is
+     *  the ViewTag itself.  Subsequent instances are SubviewTag
+     *  instances.
+     */
+    static Stack<UIComponentClassicTagBase> getViewTagStack() {
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        Map<String,Object> stateMap = RequestStateManager.getStateMap(ctx);
+
+        //noinspection unchecked
+        Stack<UIComponentClassicTagBase> result = (Stack<UIComponentClassicTagBase>)
+              stateMap.get(RequestStateManager.VIEWTAG_STACK_ATTR_NAME);
+        if (result == null) {
+            result = new Stack<UIComponentClassicTagBase>();
+            stateMap.put(RequestStateManager.VIEWTAG_STACK_ATTR_NAME, result);
+        }
+        
+        return result;
+    }
+    
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/ValidateDoubleRangeTag.java b/com/sun/faces/taglib/jsf_core/ValidateDoubleRangeTag.java
new file mode 100644
index 0000000..530b466
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ValidateDoubleRangeTag.java
@@ -0,0 +1,174 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ValidateDoubleRangeTag.java
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.DoubleRangeValidator;
+import javax.faces.validator.Validator;
+import javax.servlet.jsp.JspException;
+
+import com.sun.faces.el.ELUtils;
+
+/**
+ * ValidateDoubleRangeTag is the tag handler class for
+ * <code>validate_doublerange</code> tag.
+ */
+
+public class ValidateDoubleRangeTag extends MaxMinValidatorTag {
+
+    private static final long serialVersionUID = 1677210040390032609L;
+    private static ValueExpression VALIDATOR_ID_EXPR = null;
+
+//
+// Instance Variables
+//
+
+// Attribute Instance Variables
+
+    protected ValueExpression maximumExpression = null;
+    protected ValueExpression minimumExpression = null;
+
+    protected double maximum = 0;
+    protected double minimum = 0;
+
+
+// Relationship Instance Variables
+
+//
+// Constructors and Initializers    
+//
+
+    public ValidateDoubleRangeTag() {
+        super();
+        if (VALIDATOR_ID_EXPR == null) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ExpressionFactory factory =
+                context.getApplication().getExpressionFactory();
+            VALIDATOR_ID_EXPR =
+                factory.createValueExpression(context.getELContext(), 
+                    "javax.faces.DoubleRange",String.class);
+        }
+    }
+
+//
+// Class methods
+//
+
+//
+// General Methods
+//
+
+    public void setMaximum(ValueExpression newMaximum) {
+        maximumSet = true;
+        maximumExpression = newMaximum;
+    }
+
+
+    public void setMinimum(ValueExpression newMinimum) {
+        minimumSet = true;
+        minimumExpression = newMinimum;
+    }
+
+    public int doStartTag() throws JspException {
+        super.setValidatorId(VALIDATOR_ID_EXPR);
+        return super.doStartTag();
+    }
+
+
+
+// 
+// Methods from ValidatorTag
+//
+
+    protected Validator createValidator() throws JspException {
+
+        DoubleRangeValidator result = (DoubleRangeValidator)
+            super.createValidator();
+
+        assert (null != result);
+
+        evaluateExpressions();
+        if (maximumSet) {
+            result.setMaximum(maximum);
+        }
+
+        if (minimumSet) {
+            result.setMinimum(minimum);
+        }
+
+        return result;
+    }
+
+/* Evaluates expressions as necessary */
+    private void evaluateExpressions() {
+
+        ELContext context = FacesContext.getCurrentInstance().getELContext();
+
+        if (minimumExpression != null) {
+            if (!minimumExpression.isLiteralText()) {
+                minimum = ((Number)
+                              ELUtils.evaluateValueExpression(minimumExpression,
+                                  context)).doubleValue();
+            } else {
+                minimum =
+                Double.valueOf(minimumExpression.getExpressionString()).
+                    doubleValue();
+            }
+        }
+        if (maximumExpression != null) {
+            if (!maximumExpression.isLiteralText()) {
+                maximum = ((Number)
+                              ELUtils.evaluateValueExpression(maximumExpression,
+                                  context)).doubleValue();
+            } else {
+                maximum =
+                Double.valueOf(maximumExpression.getExpressionString()).
+                    doubleValue();
+            }
+        }
+    }
+
+} // end of class ValidateDoubleRangeTag
diff --git a/com/sun/faces/taglib/jsf_core/ValidateLengthTag.java b/com/sun/faces/taglib/jsf_core/ValidateLengthTag.java
new file mode 100644
index 0000000..8055c17
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ValidateLengthTag.java
@@ -0,0 +1,168 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ValidateLengthTag.java
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.LengthValidator;
+import javax.faces.validator.Validator;
+import javax.servlet.jsp.JspException;
+
+import com.sun.faces.el.ELUtils;
+
+/**
+ * ValidateLengthTag is the tag handler class for
+ * <code>validate_length</code> tag
+ */
+
+public class ValidateLengthTag extends MaxMinValidatorTag {
+
+    private static final long serialVersionUID = -3594596279980791500L;
+    private static ValueExpression VALIDATOR_ID_EXPR = null;
+
+
+// Attribute Instance Variables
+    protected ValueExpression maximumExpression = null;
+    protected ValueExpression minimumExpression = null;
+
+    protected int maximum = 0;
+    protected int minimum = 0;
+
+
+// Relationship Instance Variables
+
+//
+// Constructors and Initializers
+//
+
+    public ValidateLengthTag() {
+        super();
+        if (VALIDATOR_ID_EXPR == null) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ExpressionFactory factory = context.getApplication().
+                    getExpressionFactory();
+            VALIDATOR_ID_EXPR =
+                factory.createValueExpression(context.getELContext(), 
+                    "javax.faces.Length", String.class);
+        }
+    }
+
+//
+// Class methods
+//
+
+//
+// General Methods
+//
+
+    public void setMaximum(ValueExpression newMaximum) {
+        maximumSet = true;
+        maximumExpression = newMaximum;
+    }
+
+
+    public void setMinimum(ValueExpression newMinimum) {
+        minimumSet = true;
+        minimumExpression = newMinimum;
+    }
+
+    public int doStartTag() throws JspException {
+        super.setValidatorId(VALIDATOR_ID_EXPR);
+        return super.doStartTag();
+    }
+
+
+//
+// Methods from ValidatorTag
+//
+
+    protected Validator createValidator() throws JspException {
+
+        LengthValidator result = (LengthValidator)
+            super.createValidator();
+        assert (null != result);
+
+        evaluateExpressions();
+        if (maximumSet) {
+            result.setMaximum(maximum);
+        }
+
+        if (minimumSet) {
+            result.setMinimum(minimum);
+        }
+
+        return result;
+    }
+
+/* Evaluates expressions as necessary */
+    private void evaluateExpressions() {
+
+        ELContext context = FacesContext.getCurrentInstance().getELContext();
+
+        if (minimumExpression != null) {
+            if (!minimumExpression.isLiteralText()) {
+                minimum = ((Number)
+                              ELUtils.evaluateValueExpression(minimumExpression,
+                                  context)).intValue();
+            } else {
+                minimum =
+                Integer.valueOf(minimumExpression.getExpressionString()).
+                    intValue();
+            }
+        }
+        if (maximumExpression != null) {
+            if (!maximumExpression.isLiteralText()) {
+                maximum = ((Number)
+                              ELUtils.evaluateValueExpression(maximumExpression,
+                                  context)).intValue();
+            } else {
+                maximum =
+                Integer.valueOf(maximumExpression.getExpressionString()).
+                    intValue();
+            }
+        }
+    }
+
+} // end of class ValidateLengthTag
diff --git a/com/sun/faces/taglib/jsf_core/ValidateLongRangeTag.java b/com/sun/faces/taglib/jsf_core/ValidateLongRangeTag.java
new file mode 100644
index 0000000..672a761
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ValidateLongRangeTag.java
@@ -0,0 +1,169 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// ValidateLongRangeTag.java
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.LongRangeValidator;
+import javax.faces.validator.Validator;
+import javax.servlet.jsp.JspException;
+
+import com.sun.faces.el.ELUtils;
+
+/**
+ * ValidateLongRangeTag is the tag handler class for
+ * <code>validate_longrange</code> tag.
+ */
+
+public class ValidateLongRangeTag extends MaxMinValidatorTag {
+
+    private static final long serialVersionUID = 292617728229736800L;
+    private static ValueExpression VALIDATOR_ID_EXPR = null;
+
+// Attribute Instance Variables
+    protected ValueExpression maximumExpression = null;
+    protected ValueExpression minimumExpression = null;
+
+    protected long maximum = 0;
+    protected long minimum = 0;
+
+
+// Relationship Instance Variables
+
+//
+// Constructors and Initializers    
+//
+
+    public ValidateLongRangeTag() {
+        super();
+        if (VALIDATOR_ID_EXPR == null) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ExpressionFactory factory =
+                FacesContext.getCurrentInstance().getApplication().
+                    getExpressionFactory();
+            VALIDATOR_ID_EXPR =
+                factory.createValueExpression(context.getELContext(),  
+                                              "javax.faces.LongRange",
+                                              String.class);
+        }
+    }
+
+//
+// Class methods
+//
+
+//
+// General Methods
+//
+
+    public void setMaximum(ValueExpression newMaximum) {
+        maximumSet = true;
+        maximumExpression = newMaximum;
+    }
+
+
+    public void setMinimum(ValueExpression newMinimum) {
+        minimumSet = true;
+        minimumExpression = newMinimum;
+    }
+
+    public int doStartTag() throws JspException {
+        super.setValidatorId(VALIDATOR_ID_EXPR);
+        return super.doStartTag();
+    }
+
+
+// 
+// Methods from ValidatorTag
+//
+
+    protected Validator createValidator() throws JspException {
+
+        LongRangeValidator result = (LongRangeValidator)
+            super.createValidator();
+        assert (null != result);
+
+        evaluateExpressions();
+        if (maximumSet) {
+            result.setMaximum(maximum);
+        }
+
+        if (minimumSet) {
+            result.setMinimum(minimum);
+        }
+
+        return result;
+    }
+
+/* Evaluates expressions as necessary */
+    private void evaluateExpressions() {
+
+        ELContext context = FacesContext.getCurrentInstance().getELContext();
+
+        if (minimumExpression != null) {
+            if (!minimumExpression.isLiteralText()) {
+                minimum = ((Number)
+                              ELUtils.evaluateValueExpression(minimumExpression,
+                                  context)).longValue();
+            } else {
+                minimum =
+                Long.valueOf(minimumExpression.getExpressionString()).
+                    longValue();
+            }
+        }
+        if (maximumExpression != null) {
+            if (!maximumExpression.isLiteralText()) {
+                maximum = ((Number)
+                              ELUtils.evaluateValueExpression(maximumExpression,
+                                  context)).longValue();
+            } else {
+                maximum =
+                Long.valueOf(maximumExpression.getExpressionString()).
+                    longValue();
+            }
+        }
+    }
+
+} // end of class ValidateLongRangeTag
diff --git a/com/sun/faces/taglib/jsf_core/ValidatorTag.java b/com/sun/faces/taglib/jsf_core/ValidatorTag.java
new file mode 100644
index 0000000..9eba063
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ValidatorTag.java
@@ -0,0 +1,184 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import com.sun.faces.util.MessageUtils;
+
+import javax.el.ValueExpression;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Basic implementation of <code>ValidatorELTag</code>.
+ */
+public class ValidatorTag extends AbstractValidatorTag {
+
+
+    // --------------------------------------------- Methods from ValidatorELTag
+
+
+    @Override
+    protected Validator createValidator() throws JspException {       
+
+        if (validatorId != null && validatorId.isLiteralText()) {
+            return createValidator(validatorId,
+                                   binding,
+                                   FacesContext.getCurrentInstance());
+        } else {
+            return new BindingValidator(validatorId, binding);
+        }
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    public static class BindingValidator implements Validator, StateHolder {
+
+        private ValueExpression binding;
+        private ValueExpression validatorId;
+
+        // -------------------------------------------------------- Constructors
+
+        /**
+         * <p>Only used during state restoration</p>
+         */
+        public BindingValidator() { }
+
+
+        public BindingValidator(ValueExpression validatorId,
+                                ValueExpression binding) {
+
+            this.validatorId = validatorId;
+            this.binding = binding;
+
+        }
+
+
+        // -------------------------------------------- Methods from StateHolder
+
+        private Object[] state;
+        public Object saveState(FacesContext context) {
+
+            if (context == null) {
+                throw new NullPointerException();
+            }
+            if (state == null) {
+                state = new Object[2];
+            }
+            state[0] = validatorId;
+            state[1] = binding;
+
+            return state;
+            
+        }
+
+        public void restoreState(FacesContext context, Object state) {
+
+            if (context == null) {
+                throw new NullPointerException();
+            }
+            this.state = (Object[]) state;
+            if (this.state != null) {
+                this.validatorId = (ValueExpression) this.state[0];
+                this.binding = (ValueExpression) this.state[1];
+            }
+
+        }
+
+        public boolean isTransient() {
+
+            return false;
+
+        }
+
+        public void setTransient(boolean newTransientValue) {
+            //no-op
+        }
+
+
+        // ---------------------------------------------- Methods from Validator
+
+
+        /**
+         * <p>Perform the correctness checks implemented by this
+         * {@link javax.faces.validator.Validator} against the specified {@link javax.faces.component.UIComponent}.
+         * If any violations are found, a {@link javax.faces.validator.ValidatorException}
+         * will be thrown containing the {@link javax.faces.application.FacesMessage} describing
+         * the failure.
+         *
+         * @param context   FacesContext for the request we are processing
+         * @param component UIComponent we are checking for correctness
+         * @param value     the value to validate
+         * @throws javax.faces.validator.ValidatorException
+         *                              if validation fails
+         * @throws NullPointerException if <code>context</code>
+         *                              or <code>component</code> is <code>null</code>
+         */
+        public void validate(FacesContext context,
+                             UIComponent component,
+                             Object value)
+        throws ValidatorException {
+
+
+           Validator instance = createValidator(validatorId, binding, context);
+
+
+            if (instance != null) {
+                instance.validate(context, component, value);
+            } else {
+                throw new ValidatorException(
+                     MessageUtils.getExceptionMessage(
+                          MessageUtils.CANNOT_VALIDATE_ID,
+                          validatorId != null ? validatorId.getExpressionString() : "",
+                          binding != null ? binding.getExpressionString() : ""));
+            }
+
+        }
+
+    }
+    
+}
diff --git a/com/sun/faces/taglib/jsf_core/ValueChangeListenerTag.java b/com/sun/faces/taglib/jsf_core/ValueChangeListenerTag.java
new file mode 100644
index 0000000..9bc3e28
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ValueChangeListenerTag.java
@@ -0,0 +1,255 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.Util;
+import com.sun.faces.util.FacesLogger;
+
+import javax.el.ValueExpression;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
+import javax.faces.webapp.UIComponentClassicTagBase;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+import java.io.Serializable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>Tag implementation that creates a {@link ValueChangeListener} instance
+ * and registers it on the {@link UIComponent} associated with our most
+ * immediate surrounding instance of a tag whose implementation class
+ * is a subclass of {@link UIComponentClassicTagBase}.  This tag creates no output to the
+ * page currently being created.</p>
+ * <p/>
+ * <p>This class may be used directly to implement a generic event handler
+ * registration tag (based on the fully qualified Java class name specified
+ * by the <code>type</code> attribute), or as a base class for tag instances
+ * that support specific {@link ValueChangeListener} subclasses.</p>
+ * <p/>
+ * <p>Subclasses of this class must implement the
+ * <code>createValueChangeListener()</code> method, which creates and returns a
+ * {@link ValueChangeListener} instance.  Any configuration properties that
+ * are required by this {@link ValueChangeListener} instance must have been
+ * set by the <code>createValueChangeListener()</code> method.  Generally,
+ * this occurs by copying corresponding attribute values on the tag
+ * instance.</p>
+ * <p/>
+ * <p>This tag creates no output to the page currently being created.  It
+ * is used solely for the side effect of {@link ValueChangeListener}
+ * creation.</p>
+ */
+
+public class ValueChangeListenerTag extends TagSupport {
+
+    // ------------------------------------------------------------- Attributes
+
+    private static final long serialVersionUID = -212845116876281363L;
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+
+    /**
+     * <p>The fully qualified class name of the {@link ValueChangeListener}
+     * instance to be created.</p>
+     */
+    private ValueExpression type = null;
+
+    /**
+     * <p>The value expression used to create a listener instance and it
+     * is also used to wire up this listener to an {@link
+     * ValueChangeListener} property of a JavaBean class.</p>
+     */
+    private ValueExpression binding = null;
+
+    /**
+     * <p>Set the fully qualified class name of the
+     * {@link ValueChangeListener} instance to be created.
+     *
+     * @param type The new class name
+     */
+    public void setType(ValueExpression type) {
+
+        this.type = type;
+
+    }
+
+    /*
+     * <p>Set the value binding expression  for this listener.</p>
+     *
+     * @param binding The new value binding expression
+     */
+    public void setBinding(ValueExpression binding) {
+        this.binding = binding;
+    }
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the specified {@link ValueChangeListener}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentClassicTagBase} instance, if
+     * the {@link UIComponent} instance was created by this execution of the
+     * containing JSP page.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) {
+            //  Object[] params = {this.getClass().getName()};
+            // PENDING(rogerk): do something with params
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(
+                      MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID));
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }
+
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
+        }
+        if (!(component instanceof EditableValueHolder)) {
+            Object[] params = {"valueChangeListener", "javax.faces.component.EditableValueHolder"};
+            throw new JspException(
+                 MessageUtils.getExceptionMessageString(
+                      MessageUtils.NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID, params));
+        }
+
+        // If binding is null, type is set and is a literal value,
+        // then don't bother wrapping.  Just instantiate and
+        // set.
+        ValueChangeListener listener;
+        if (binding == null && type != null && type.isLiteralText()) {
+            try {
+                listener = (ValueChangeListener)
+                     Util.getListenerInstance(type, null);
+            } catch (Exception e) {
+                throw new JspException(e.getMessage(), e.getCause());
+            }
+        } else {
+            listener = new BindingValueChangeListener(type, binding);
+        }
+        
+        ((EditableValueHolder) component).addValueChangeListener(listener);
+
+        return (SKIP_BODY);
+
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.type = null;
+
+    }
+
+
+    // ----------------------------------------------------------- Inner Classes
+
+
+    private static class BindingValueChangeListener
+         implements ValueChangeListener, Serializable {
+
+        private ValueExpression type;
+        private ValueExpression binding;
+
+        // -------------------------------------------------------- Constructors
+
+
+        public BindingValueChangeListener(ValueExpression type,
+                                          ValueExpression binding) {
+
+            this.type = type;
+            this.binding = binding;
+
+        }
+
+        // ------------------------------------ Methods from ValueChangeListener
+
+
+        /**
+         * <p>Invoked when the value change described by the specified
+         * {@link javax.faces.event.ValueChangeEvent} occurs.</p>
+         *
+         * @param event The {@link javax.faces.event.ValueChangeEvent} that has occurred
+         * @throws javax.faces.event.AbortProcessingException
+         *          Signal the JavaServer Faces
+         *          implementation that no further processing on the current event
+         *          should be performed
+         */
+        public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {
+
+            ValueChangeListener instance = (ValueChangeListener)
+                    Util.getListenerInstance(type, binding);
+            if (instance != null) {
+                instance.processValueChange(event);
+            } else {
+                 if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.log(Level.WARNING,
+                               "jsf.core.taglib.action_or_valuechange_listener.null_type_binding",
+                               new Object[] {
+                                "ValueChangeListener", 
+                                event.getComponent().getClientId(FacesContext.getCurrentInstance())});
+                }
+            }
+        }
+        
+    }
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/VerbatimTag.java b/com/sun/faces/taglib/jsf_core/VerbatimTag.java
new file mode 100644
index 0000000..ed82039
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/VerbatimTag.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.webapp.UIComponentELTag;
+import javax.servlet.jsp.JspException;
+
+/**
+ * <p>Tag implementation that creates a {@link UIOutput} instance
+ * and allows the user to write raw markup.</p>
+ */
+
+public class VerbatimTag extends UIComponentELTag {
+
+
+    // ------------------------------------------------------------- Attributes
+
+
+    private ValueExpression escape = null;
+
+
+    public void setEscape(ValueExpression escape) {
+        this.escape = escape;
+    }
+
+    
+    /**
+     * Holds value of property rendered.
+     */
+    private ValueExpression rendered;
+
+    /**
+     * Setter for property rendered.
+     * @param rendered New value of property rendered.
+     */
+    public void setRendered(ValueExpression rendered) {
+
+        this.rendered = rendered;
+    }
+    
+
+    // --------------------------------------------------------- Public Methods
+
+
+    public String getRendererType() {
+        return "javax.faces.Text";
+    }
+
+
+    public String getComponentType() {
+        return "javax.faces.Output";
+    }
+
+
+    protected void setProperties(UIComponent component) {
+
+        super.setProperties(component);
+        if (null != escape) {
+            component.setValueExpression("escape", escape);
+        } else {
+            component.getAttributes().put("escape", Boolean.FALSE);
+        }
+        if (null != rendered) {
+            component.setValueExpression("rendered", rendered);
+        }
+        component.setTransient(true);
+
+    }
+
+
+    /**
+     * <p>Set the local value of this component to reflect the nested
+     * body content of this JSP tag.</p>
+     */
+    public int doAfterBody() throws JspException {
+
+        if (getBodyContent() != null) {
+            String value = getBodyContent().getString();
+            if (value != null) {
+                UIOutput output = (UIOutput) getComponentInstance();
+                output.setValue(value);
+		getBodyContent().clearBody();
+            }
+        }
+        return (getDoAfterBodyValue());
+
+    }
+
+}
diff --git a/com/sun/faces/taglib/jsf_core/ViewTag.java b/com/sun/faces/taglib/jsf_core/ViewTag.java
new file mode 100644
index 0000000..1348282
--- /dev/null
+++ b/com/sun/faces/taglib/jsf_core/ViewTag.java
@@ -0,0 +1,420 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.taglib.jsf_core;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Stack;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.webapp.UIComponentClassicTagBase;
+import javax.faces.webapp.UIComponentELTag;
+import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.jstl.core.Config;
+import javax.servlet.jsp.tagext.BodyContent;
+import javax.servlet.jsp.tagext.BodyTag;
+
+import java.util.Locale;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.lang.reflect.Method;
+
+import com.sun.faces.util.MessageUtils;
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.ReflectionUtils;
+import com.sun.faces.RIConstants;
+
+/**
+ * All JSF component tags must be nested within a f:view tag.  This tag
+ * corresponds to the root of the UIComponent tree.  It does not have a
+ * Renderer. It exists mainly to provide a guarantee that all faces
+ * components reside inside of this tag.
+ *
+ */
+
+public class ViewTag extends UIComponentELTag {
+
+    //
+    // Protected Constants
+    //
+
+    //
+    // Class Variables
+    //
+
+    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
+
+    //
+    // Instance Variables
+    //
+
+    // Attribute Instance Variables
+
+    protected ValueExpression renderKitId = null;
+
+    public void setRenderKitId(ValueExpression renderKitId) {
+        this.renderKitId = renderKitId;
+    }
+
+    protected ValueExpression locale = null;
+
+    public void setLocale(ValueExpression newLocale) {
+        locale = newLocale;
+    }
+
+    protected MethodExpression beforePhase = null;
+
+    public void setBeforePhase(MethodExpression newBeforePhase) {
+    beforePhase = newBeforePhase;
+    }
+
+    protected MethodExpression afterPhase = null;
+
+    public void setAfterPhase(MethodExpression newAfterPhase) {
+    afterPhase = newAfterPhase;
+    }
+
+
+    // Relationship Instance Variables
+
+    //
+    // Constructors and Initializers    
+    //
+
+    public ViewTag() {
+        super();
+    }
+
+    //
+    // Class methods
+    //
+
+    // 
+    // Accessors
+    //
+
+    //
+    // General Methods
+    //
+
+    protected int getDoStartValue() throws JspException {
+        return BodyTag.EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * <p>Override parent <code>doStartTag()</code> to do the following:</p>
+     *
+     * <ul>
+     *
+     * <li><p>Reflect the response object for a method called flushContentToWrappedResponse
+     * and invoke it. This causes any content that appears before the view to be written out
+     * to the response.  This is necessary to allow proper ordering to
+     * happen.</p></li>
+     *
+     * </ul>
+     *
+     */
+
+    public int doStartTag() throws JspException {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        if (facesContext == null) {
+            throw new IllegalStateException(
+                  MessageUtils.getExceptionMessageString(
+                        MessageUtils.FACES_CONTEXT_NOT_FOUND_ID));
+        }
+
+        // flush out any content above the view tag
+        Object response = facesContext.getExternalContext().getResponse();
+        Method customFlush = ReflectionUtils.lookupMethod(response.getClass(),
+                                                          "flushContentToWrappedResponse",
+                                                          RIConstants.EMPTY_CLASS_ARGS);
+        if (customFlush != null) {
+            try {
+                pageContext.getOut().flush();
+                customFlush.invoke(response, RIConstants.EMPTY_METH_ARGS);
+            } catch (Exception e) {
+                throw new JspException("Exception attemtping to write content above the <f:view> tag.", e);
+            }
+        } else {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                           "jsf.core.taglib.viewtag.interweaving_failed");
+            }
+        }
+
+        int rc;
+        try {
+            rc = super.doStartTag();
+        } catch (JspException e) {
+            if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING, "Can't leverage base class", e);
+            }
+            throw e;
+        } catch (Throwable t) {
+             if (LOGGER.isLoggable(Level.WARNING)) {
+                LOGGER.log(Level.WARNING, "Can't leverage base class", t);
+            }
+            throw new JspException(t);
+        }
+
+        // this must happen after our overriderProperties executes.
+        pageContext.getResponse().setLocale(facesContext.getViewRoot().getLocale());
+        
+        List<UIComponent> preViewLoadBundleComponents = LoadBundleTag.getPreViewLoadBundleComponentList();
+        if (!preViewLoadBundleComponents.isEmpty()) {
+            Iterator<UIComponent> iter = preViewLoadBundleComponents.iterator();
+            UIComponent cur;
+            while (iter.hasNext()) {
+                cur = iter.next();
+                LoadBundleTag.addChildToParentTagAndParentComponent(cur, this);
+            }
+            preViewLoadBundleComponents.clear();
+        }
+        Stack<UIComponentClassicTagBase> viewTagStack = SubviewTag.getViewTagStack();
+        viewTagStack.push(this);
+        return rc;
+    }
+
+    /**
+     * <p>Examine the body content of this tag.  If it is
+     * non-<code>null</code>, non-zero length, and not an HTML comment,
+     * call {@link javax.faces.webapp.UIComponentClassicTagBase#createVerbatimComponent()}.</p>
+     *
+     * <p>Set the value of the verbatim component to be
+     * <code>content</code>.</p>
+     *
+     * <p>Add this child to the end of the child list for
+     * <code>UIViewRoot</code>.</p>
+     */
+
+    public int doAfterBody() throws JspException {
+        int result = EVAL_PAGE;
+        BodyContent bodyContent;
+        UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
+        UIOutput verbatim;
+        String content;
+        String trimContent;
+
+        Stack<UIComponentClassicTagBase> viewTagStack =
+              SubviewTag.getViewTagStack();
+        viewTagStack.pop();
+
+        if (null == (bodyContent = getBodyContent()) ||
+            null == (content = bodyContent.getString()) ||
+            0 == (trimContent = content.trim()).length() ||
+            (trimContent.startsWith("<!--") && trimContent.endsWith("-->"))) {
+            return result;
+        }
+
+        bodyContent.clearBody();
+
+        verbatim = createVerbatimComponent();
+        verbatim.setValue(content);
+
+        root.getChildren().add(verbatim);
+
+        return result;
+    }
+
+    /**
+     * <p>Exercise a contract with the {@link ViewHandler} to get the
+     * character encoding from the response and set it into the
+     * session.</p>
+     */
+
+    public int doEndTag() throws JspException {
+        int rc = super.doEndTag();
+        // store the response character encoding
+        HttpSession session;
+
+        if (null != (session = pageContext.getSession())) {
+            session.setAttribute(ViewHandler.CHARACTER_ENCODING_KEY,
+                                 pageContext.getResponse().getCharacterEncoding());
+        }
+        return rc;
+    }
+
+
+    public String getComponentType() {
+        return UIViewRoot.COMPONENT_TYPE;
+    }
+
+    public String getRendererType() {
+        return null;
+    }
+
+
+    protected int getDoEndValue() throws JspException {
+        return (EVAL_PAGE);
+    }
+
+
+    //
+    // Methods from Superclass
+    // 
+    protected void setProperties(UIComponent component) {
+        super.setProperties(component);
+        Locale viewLocale = null;
+    UIViewRoot viewRoot = (UIViewRoot) component;
+    FacesContext context = FacesContext.getCurrentInstance();
+    ELContext elContext = context.getELContext();
+    try {
+
+        if (null != renderKitId) {
+        if (renderKitId.isLiteralText()) {
+            // PENDING(edburns): better error message than NPE
+            // possible here.
+            viewRoot.setRenderKitId(renderKitId.getValue(elContext).toString());
+        } else {
+            // clear out the literal value to force using the
+            // expression
+            viewRoot.setRenderKitId(null);
+            viewRoot.setValueExpression("renderKitId", renderKitId);
+        }
+        }
+        else if (viewRoot.getRenderKitId() == null) {
+        String renderKitIdString =
+            context.getApplication().getDefaultRenderKitId();
+        if (null == renderKitIdString) {
+            renderKitIdString = RenderKitFactory.HTML_BASIC_RENDER_KIT;
+        }
+        viewRoot.setRenderKitId(renderKitIdString);
+        }
+
+        if (null != locale) {
+        if (locale.isLiteralText()) {
+            // PENDING(edburns): better error message than NPE
+            // possible here.
+            viewLocale =
+            getLocaleFromString(locale.getValue(elContext).toString());
+        }
+        else {
+            component.setValueExpression("locale", locale);
+                    Object result = locale.getValue(context.getELContext());
+                    if (result instanceof Locale) {
+                        viewLocale = (Locale) result;
+                    } else if (result instanceof String) {
+                        viewLocale = getLocaleFromString((String) result);
+                    }
+        }
+        }
+        // BUGDB 10235218
+        if (null != viewLocale) {
+            ((UIViewRoot) component).setLocale(viewLocale);
+            // update the JSTL locale attribute in request scope so that
+            // JSTL picks up the locale from viewRoot. This attribute
+            // must be updated before the JSTL setBundle tag is called
+            // because that is when the new LocalizationContext object
+            // is created based on the locale.
+            Config.set(pageContext.getRequest(), Config.FMT_LOCALE, viewLocale);
+        }
+
+        if (null != beforePhase) {
+        if (beforePhase.isLiteralText()) {
+            Object params [] = {beforePhase};
+            throw new javax.faces.FacesException(MessageUtils.getExceptionMessageString(MessageUtils.INVALID_EXPRESSION_ID, params));
+        }
+        else {
+            viewRoot.setBeforePhaseListener(beforePhase);
+
+        }
+        }
+        if (null != afterPhase) {
+        if (afterPhase.isLiteralText()) {
+            Object params [] = {afterPhase};
+            throw new javax.faces.FacesException(MessageUtils.getExceptionMessageString(MessageUtils.INVALID_EXPRESSION_ID, params));
+        }
+        else {
+            viewRoot.setAfterPhaseListener(afterPhase);
+        }
+        }
+    } catch (ELException ele) {
+        throw new FacesException(ele);
+    }
+    }
+
+
+    /**
+     * Returns the locale represented by the expression.
+     *
+     * @param localeExpr a String in the format specified by JSTL Specification
+     *                   as follows:
+     *                   "A String value is interpreted as the printable
+     *                   representation of a locale, which must contain a
+     *                   two-letter (lower-case) language code (as defined by
+     *                   ISO-639), and may contain a two-letter (upper-case)
+     *                   country code (as defined by ISO-3166). Language and
+     *                   country codes must be separated by hyphen (???-???) or
+     *                   underscore (???_???)."
+     * @return Locale instance cosntructed from the expression.
+     */
+    protected Locale getLocaleFromString(String localeExpr) {
+        Locale result = Locale.getDefault();
+        if (localeExpr.indexOf("_") == -1 && localeExpr.indexOf("-") == -1) {
+            // expression has just language code in it. make sure the 
+            // expression contains exactly 2 characters.
+            if (localeExpr.length() == 2) {
+                result = new Locale(localeExpr, "");
+            }
+        } else {
+            // expression has country code in it. make sure the expression 
+            // contains exactly 5 characters.
+            if (localeExpr.length() == 5) {
+                // get the language and country to construct the locale.
+                String language = localeExpr.substring(0, 2);
+                String country = localeExpr.substring(3, localeExpr.length());
+                result = new Locale(language, country);
+            }
+        }
+        return result;
+    }
+
+} // end of class ViewTag
diff --git a/com/sun/faces/util/ByteArrayGuardAESCTR.java b/com/sun/faces/util/ByteArrayGuardAESCTR.java
new file mode 100644
index 0000000..88a3ec4
--- /dev/null
+++ b/com/sun/faces/util/ByteArrayGuardAESCTR.java
@@ -0,0 +1,224 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.nio.charset.Charset;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.faces.FacesException;
+import java.security.SecureRandom;
+import java.util.SortedMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.crypto.BadPaddingException;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.xml.bind.DatatypeConverter;
+
+/**
+ * <p>This utility class is to provide both encryption and
+ * decryption <code>Ciphers</code> to <code>ResponseStateManager</code>
+ * implementations wishing to provide encryption support.</p>
+ * 
+ * <p>The algorithm used to encrypt byte array is AES with CBC.</p>
+ *  
+ * <p>Original author Inderjeet Singh, J2EE Blue Prints Team. Modified to suit JSF
+ * needs.</p> 
+ */
+public final class ByteArrayGuardAESCTR {
+
+
+     // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.RENDERKIT.getLogger();
+
+    private static final int KEY_LENGTH = 128;
+    private static final int IV_LENGTH = 16;
+
+    private static final String KEY_ALGORITHM = "AES";
+    private static final String CIPHER_CODE = "AES/CTR/NoPadding";
+    
+    private SecretKey sk;
+    
+    private IvParameterSpec ivspec;
+    
+    private Charset utf8;
+
+    // ------------------------------------------------------------ Constructors
+
+    public ByteArrayGuardAESCTR() {
+
+        try {
+            setupKeyAndCharset();
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) { 
+                LOGGER.log(Level.SEVERE,
+                           "Unexpected exception initializing encryption."
+                           + "  No encryption will be performed.",
+                           e);
+            }
+            System.err.println("ERROR: Initializing Ciphers");
+        }
+    }
+
+    // ---------------------------------------------------------- Public Methods    
+
+
+    /**
+     * This method:
+     *    Encrypts bytes using a cipher.  
+     *    Generates MAC for intialization vector of the cipher
+     *    Generates MAC for encrypted data
+     *    Returns a byte array consisting of the following concatenated together:
+     *       |MAC for cnrypted Data | MAC for Init Vector | Encrypted Data |
+     * @param bytes The byte array to be encrypted.
+     * @return the encrypted byte array.
+     */
+    public String encrypt(String value) {
+        String securedata = null;
+        byte[] bytes = value.getBytes(utf8);
+        try {
+            Cipher encryptCipher = Cipher.getInstance(CIPHER_CODE);
+            encryptCipher.init(Cipher.ENCRYPT_MODE, sk, ivspec);
+            // encrypt the plaintext
+            byte[] encdata = encryptCipher.doFinal(bytes);
+            // Base64 encode the encrypted bytes
+            securedata = DatatypeConverter.printBase64Binary(encdata);
+        } catch (Exception e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           "Unexpected exception initializing encryption."
+                           + "  No encryption will be performed.",
+                           e);
+            }
+            return null;
+        }
+        return securedata;
+    }
+
+    public String decrypt(String value) throws InvalidKeyException {
+        
+        byte[] bytes = DatatypeConverter.parseBase64Binary(value);;
+        
+        try {
+            Cipher decryptCipher = Cipher.getInstance(CIPHER_CODE);
+            decryptCipher.init(Cipher.DECRYPT_MODE, sk, ivspec);
+
+            byte[] plaindata = decryptCipher.doFinal(bytes);
+            for (byte cur : plaindata) {
+                // Values < 0 cause the conversion to text to fail.
+                if (cur < 0 || cur > Byte.MAX_VALUE) {
+                    throw new InvalidKeyException("Invalid characters in decrypted value");
+                }
+            }
+            return new String(plaindata, utf8);
+        } catch (NoSuchAlgorithmException nsae) {
+            throw new InvalidKeyException(nsae);
+        } catch (NoSuchPaddingException nspe) {
+            throw new InvalidKeyException(nspe);
+        } catch (InvalidAlgorithmParameterException iape) {
+            throw new InvalidKeyException(iape);
+        } catch (IllegalBlockSizeException ibse) {
+            throw new InvalidKeyException(ibse);
+        } catch (BadPaddingException bpe) {
+            throw new InvalidKeyException(bpe);
+        }
+    }
+    
+    // --------------------------------------------------------- Private Methods
+
+    private void setupKeyAndCharset() {
+
+        try {
+            InitialContext context = new InitialContext();
+            String encodedKeyArray = (String) context.lookup("java:comp/env/jsf/FlashSecretKey");
+            if (null != encodedKeyArray) {
+                byte[] keyArray = DatatypeConverter.parseBase64Binary(encodedKeyArray);
+                if (keyArray.length < 17) {
+                    throw new FacesException("key must be at least 16 bytes long.");
+                }
+                sk = new SecretKeySpec(keyArray, KEY_ALGORITHM);
+                byte[] iv = new byte[16];
+                System.arraycopy(keyArray, 0, iv, 0, 16);
+                ivspec = new IvParameterSpec(iv);
+            }
+        } catch(NamingException exception) {
+            if (LOGGER.isLoggable(Level.FINEST)) { 
+                LOGGER.log(Level.FINEST, "Unable to find the encoded key.", exception);
+            }
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+        
+        if (null == sk) {
+            try {
+                KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
+                kg.init(KEY_LENGTH);   // 256 if you're using the Unlimited Policy Files
+                sk = kg.generateKey(); 
+                SecureRandom rand = new SecureRandom();
+                byte[] iv = new byte[16];
+                rand.nextBytes(iv);
+                ivspec = new IvParameterSpec(iv);
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+        
+            
+        SortedMap<String,Charset> availableCharsets = Charset.availableCharsets();
+        if (availableCharsets.containsKey("UTF-8")) {
+            utf8 = availableCharsets.get("UTF-8");
+        } else if (availableCharsets.containsKey("UTF8")) {
+            utf8 = availableCharsets.get("UTF8");
+        } else {
+            throw new FacesException("Unable to get UTF-8 Charset.");
+        }
+        
+    }
+
+}
diff --git a/com/sun/faces/util/Cache.java b/com/sun/faces/util/Cache.java
new file mode 100644
index 0000000..1246898
--- /dev/null
+++ b/com/sun/faces/util/Cache.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Logger;
+
+    /**
+     * A concurrent caching mechanism.
+     */
+public class Cache<K, V> {
+
+            // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.UTIL.getLogger();
+
+
+        /**
+     * Factory interface for creating various cacheable objects.
+     */
+    public interface Factory<K,V> {
+
+        V newInstance(final K arg) throws InterruptedException;
+
+    } // END Factory
+
+
+        private final ConcurrentMap<K,V> cache =
+              new ConcurrentHashMap<K,V>();
+        private final Factory<K,V> factory;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        /**
+         * Constructs this cache using the specified <code>Factory</code>.
+         * @param factory
+         */
+        public Cache(Factory<K,V> factory) {
+
+            this.factory = factory;
+
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        /**
+         * If a value isn't associated with the specified key, a new
+         * {@link java.util.concurrent.Callable} will be created wrapping the <code>Factory</code>
+         * specified via the constructor and passed to a {@link java.util.concurrent.FutureTask}.  This task
+         * will be passed to the backing ConcurrentMap.  When {@link java.util.concurrent.FutureTask#get()}
+         * is invoked, the Factory will return the new Value which will be cached
+         * by the {@link java.util.concurrent.FutureTask}.
+         *
+         * @param key the key the value is associated with
+         * @return the value for the specified key, if any
+         */
+        public V get(final K key) {
+          V result = cache.get(key);
+          
+          if (result == null)
+          {
+            try
+            {
+              result = factory.newInstance(key);
+            }
+            catch (InterruptedException ie)
+            {
+              // will never happen. Just for testing
+              throw new RuntimeException(ie);
+            }
+            
+            // put could be used instead if it didn't matter whether we replaced
+            // an existing entry
+            V oldResult = cache.putIfAbsent(key, result);
+            
+            if (oldResult != null)
+              result = oldResult;
+          }
+          
+          return result;
+        }
+
+        public V remove(final K key) {
+          return cache.remove(key);
+
+    }
+
+    } // END Cache
diff --git a/com/sun/faces/util/CollectionsUtils.java b/com/sun/faces/util/CollectionsUtils.java
new file mode 100644
index 0000000..ef7d827
--- /dev/null
+++ b/com/sun/faces/util/CollectionsUtils.java
@@ -0,0 +1,86 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p class="changed_added_2_0"></p>
+ * @author asmirnov at exadel.com
+ *
+ */
+public class CollectionsUtils {
+
+	private CollectionsUtils() {
+		// this class contains static methods only.
+	}
+	
+	public static <T> T[] ar(T...ts){
+		return ts;
+	}
+	
+	public static <T> T[] ar(){
+		return null;
+	}
+
+	public static <T,V> ConstMap<T,V> map() {
+		return new ConstMap<T, V>();
+	}
+	
+	@SuppressWarnings("serial")
+	public static class ConstMap<T,V> extends HashMap<T,V> {
+		
+		public ConstMap() {
+			super(50, 1.0F);
+		}
+		
+		public ConstMap<T, V> add(T key, V value) {
+			put(key, value);
+			return this;
+		}
+		
+		public Map<T,V> fix() {
+			return Collections.unmodifiableMap(this);
+		}
+	}
+}
diff --git a/com/sun/faces/util/ComponentStruct.java b/com/sun/faces/util/ComponentStruct.java
new file mode 100644
index 0000000..f5eeb5f
--- /dev/null
+++ b/com/sun/faces/util/ComponentStruct.java
@@ -0,0 +1,127 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+
+/**
+ * Utility class to enable partial state saving of components that have been
+ * dynamically added to the view.
+ */
+public class ComponentStruct implements StateHolder {    
+    /**
+     * Marker that specifies this is an ADD.
+     */
+    public static final String ADD = "ADD";
+    /**
+     * Marker that specifies this is a REMOVE.
+     */
+    public static final String REMOVE = "REMOVE";
+
+    public String action;
+    public String parentClientId;
+    public String id;
+    public String clientId;
+    public String facetName;
+
+    public boolean isTransient() {
+        return false;
+    }
+
+    public void restoreState(FacesContext ctx, Object state) {
+        if (ctx == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+        Object s[] = (Object[]) state;
+        this.action = (String) s[0];
+        this.parentClientId = (String) s[1];
+        this.clientId = (String) s[2];
+        this.id = (String) s[3];
+        this.facetName = (String) s[4];
+    }
+
+    public Object saveState(FacesContext ctx) {
+        if (ctx == null) {
+            throw new NullPointerException();
+        }
+        Object state[] = new Object[5];
+        state[0] = this.action;
+        state[1] = this.parentClientId;
+        state[2] = this.clientId;
+        state[3] = this.id;
+        state[4] = this.facetName;
+        return state;
+    }
+
+    public void setTransient(boolean trans) {
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        boolean result = false;
+        
+        if (obj instanceof ComponentStruct) {
+            ComponentStruct struct = (ComponentStruct) obj;
+            result = struct.clientId.equals(this.clientId);
+        }
+        
+        return result;
+    }
+
+    /**
+     * Hash code.
+     * 
+     * @return the hashcode.
+     */
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 89 * hash + (this.clientId != null ? this.clientId.hashCode() : 0);
+        return hash;
+    }
+
+
+    
+} // END ComponentStruct
diff --git a/com/sun/faces/util/ConcurrentCache.java b/com/sun/faces/util/ConcurrentCache.java
new file mode 100644
index 0000000..1b6642d
--- /dev/null
+++ b/com/sun/faces/util/ConcurrentCache.java
@@ -0,0 +1,110 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.concurrent.ExecutionException;
+
+
+/**
+ * Defines a concurrent cache with a factory for creating new object instances.
+ * 
+ * This (combined with ExpiringConcurrentCache) offers functionality similar
+ * to com.sun.faces.util.Cache.  Two differences:
+ *
+ * 1. Cache is concrete/assumes a particular implementation.  ConcurrentCache
+ *    is abstract/allows subclasses to provide the implementation.  This
+ *    facilitates alternative implementations, such as DefaultFaceletCache's
+ *    NoCache.
+ * 2. ConcurrentCache does not provide remove() as part of its contract, since
+ *    remove behavior may be subclass-specific.  For example,
+ *    ExpiringConcurentCache automatically removes items by checking for
+ *    expiration rather than requiring manual removes.
+ *
+ * We should consider consolidating Cache and ConcurrentCache + 
+ * ExpiringConcurrentCache into a single class hierarchy so that we
+ * do not need to duplicate the JCIP scalable result cache code.
+ */
+public abstract class ConcurrentCache<K, V> {
+  
+    /**
+     * Factory interface for creating various cacheable objects.
+     */
+    public interface Factory<K,V> {
+        public V newInstance(final K arg) throws Exception;
+    }
+    
+    /**
+     * Constructs this cache using the specified <code>Factory</code>.
+     * 
+     * @param f
+     */
+    public ConcurrentCache(Factory<K,V> f) {
+        _f = f;
+    }
+    
+    /**
+     * Retrieves a value for the specified key.
+     * If the value is not already present in the cache, a new instance will
+     * be allocated using the <code>Factory</code> interface
+     *
+     * @param key the key the value is associated with
+     * @return the value for the specified key
+     */
+    public abstract V get(final K key) throws ExecutionException;
+    
+    /**
+     * Tests whether the cache contains a value for the specified key
+     * @param key key to test
+     * @return true if the value for the specified key is already cached, false otherwise
+     */
+    public abstract boolean containsKey(final K key);
+    
+    /**
+     * Retrieves a <code>Factory</code> instance aasociated with this cache
+     * @return <code>Factory</code> instance
+     */
+    protected final Factory<K, V> getFactory() {
+        return _f;
+    }
+    
+    
+    private final Factory<K, V> _f;
+} 
diff --git a/com/sun/faces/util/DebugObjectOutputStream.java b/com/sun/faces/util/DebugObjectOutputStream.java
new file mode 100644
index 0000000..20e63b1
--- /dev/null
+++ b/com/sun/faces/util/DebugObjectOutputStream.java
@@ -0,0 +1,179 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+
+ */
+package com.sun.faces.util;
+
+
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.List;
+import java.util.ArrayList;
+
+/*
+ * From: http://blog.crazybob.org/2007/02/debugging-serialization.html
+ * 
+ * Usage example:
+
+                DebugObjectOutputStream out =
+                        new DebugObjectOutputStream(oos);
+                try {
+                    out.writeObject(stateToWrite[1]);
+                } catch (Exception e) {
+                    DebugUtil.printState((Map)stateToWrite[1], LOGGER);
+                    throw new FacesException(
+                            "Serialization error. Path to offending instance: " 
+                            + out.getStack(), e);
+                }            
+
+ 
+ 
+ * 
+ * 
+ */
+
+public class DebugObjectOutputStream
+    extends ObjectOutputStream {
+
+  private static final Field DEPTH_FIELD;
+  static {
+    try {
+      DEPTH_FIELD = ObjectOutputStream.class
+          .getDeclaredField("depth");
+      DEPTH_FIELD.setAccessible(true);
+    } catch (NoSuchFieldException e) {
+      throw new AssertionError(e);
+    }
+  }
+
+  final List<Object> stack
+      = new ArrayList<Object>();
+
+  /**
+   * Indicates whether or not OOS has tried to
+   * write an IOException (presumably as the
+   * result of a serialization error) to the
+   * stream.
+   */
+  boolean broken = false;
+
+  public DebugObjectOutputStream(
+      OutputStream out) throws IOException {
+    super(out);
+    enableReplaceObject(true);
+  }
+
+  /**
+   * Abuse {@code replaceObject()} as a hook to
+   * maintain our stack.
+   */
+  protected Object replaceObject(Object o) {
+    // ObjectOutputStream writes serialization
+    // exceptions to the stream. Ignore
+    // everything after that so we don't lose
+    // the path to a non-serializable object. So
+    // long as the user doesn't write an
+    // IOException as the root object, we're OK.
+    int currentDepth = currentDepth();
+    if (o instanceof IOException
+        && currentDepth == 0) {
+      broken = true;
+    }
+    if (!broken) {
+      truncate(currentDepth);
+      stack.add(o);
+    }
+    return o;
+  }
+
+  private void truncate(int depth) {
+    while (stack.size() > depth) {
+      pop();
+    }
+  }
+
+  private Object pop() {
+    return stack.remove(stack.size() - 1);
+  }
+
+  /**
+   * Returns a 0-based depth within the object
+   * graph of the current object being
+   * serialized.
+   */
+  private int currentDepth() {
+    try {
+      Integer oneBased
+          = ((Integer) DEPTH_FIELD.get(this));
+      return oneBased - 1;
+    } catch (IllegalAccessException e) {
+      throw new AssertionError(e);
+    }
+  }
+
+  /**
+   * Returns the path to the last object
+   * serialized. If an exception occurred, this
+   * should be the path to the non-serializable
+   * object.
+   */
+  public List<Object> getStack() {
+    return stack;
+  }
+}
diff --git a/com/sun/faces/util/DebugUtil.java b/com/sun/faces/util/DebugUtil.java
new file mode 100644
index 0000000..c762479
--- /dev/null
+++ b/com/sun/faces/util/DebugUtil.java
@@ -0,0 +1,498 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+// DebugUtil.java
+
+import com.sun.faces.RIConstants;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.model.SelectItem;
+import javax.el.ValueExpression;
+
+import com.sun.faces.io.FastStringWriter;
+import com.sun.faces.renderkit.RenderKitUtils;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <B>DebugUtil</B> is a class ...
+ * <p/>
+ * <B>Lifetime And Scope</B> <P>
+ */
+
+public class DebugUtil {
+
+    private static final Logger LOGGER = Logger.getLogger(DebugUtil.class.getPackage().getName());
+    
+//
+// Protected Constants
+//
+
+//
+// Class Variables
+//
+
+    private static boolean keepWaiting = true;
+
+    private static int curDepth = 0;
+
+//
+// Instance Variables
+//
+
+// Attribute Instance Variables
+
+// Relationship Instance Variables
+
+//
+// Constructors and Initializers    
+//
+
+    public DebugUtil() {
+        super();
+        // Util.parameterNonNull();
+        this.init();
+    }
+
+
+    protected void init() {
+        // super.init();
+    }
+
+//
+// Class methods
+//
+
+    public static void setKeepWaiting(boolean keepWaiting) {
+
+        DebugUtil.keepWaiting = keepWaiting;
+
+    }
+
+    /**
+     * Usage: <P>
+     * <p/>
+     * Place a call to this method in the earliest possible entry point of
+     * your servlet app.  It will cause the app to enter into an infinite
+     * loop, sleeping until the static var keepWaiting is set to false.  The
+     * idea is that you attach your debugger to the servlet, then, set a
+     * breakpont in this method.  When it is hit, you use the debugger to set
+     * the keepWaiting class var to false.
+     */
+
+    public static void waitForDebugger() {
+        while (keepWaiting) {
+            try {
+                Thread.sleep(5000);
+            } catch (InterruptedException e) {
+                System.out.println("DebugUtil.waitForDebugger(): Exception: " +
+                                   e.getMessage());
+            }
+        }
+    }
+
+
+    private static void indentPrintln(Writer out, String str) {
+
+        // handle indentation
+        try {
+            for (int i = 0; i < curDepth; i++) {
+                out.write("  ");
+            }
+            out.write(str + "\n");
+        } catch (IOException ioe) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Unable to write indent", ioe);
+            }
+        }
+    }
+    
+    private static void assertSerializability(StringBuilder builder, Object toPrint) {
+        DebugObjectOutputStream doos = null;
+        try {
+            OutputStream base = new ByteArrayOutputStream();
+            ObjectOutputStream oos = new ObjectOutputStream(base);
+            doos = new DebugObjectOutputStream(oos);
+            doos.writeObject(toPrint);
+        }
+        catch (IOException ioe) {
+            List pathToBadObject = doos.getStack();
+            builder.append("Path to non-Serializable Object: \n");
+            for (Object cur : pathToBadObject) {
+                builder.append(cur.toString()).append("\n");
+            }
+        }
+    }
+
+    private static void indentPrintln(Logger out, Object toPrint) {
+        
+        StringBuilder builder = new StringBuilder();
+        String str = (null == toPrint) ? "null" : toPrint.toString();
+
+        // handle indentation
+        for (int i = 0; i < curDepth; i++) {
+            builder.append("  ");
+        }
+        builder.append(str + "\n");
+        
+        if (!(toPrint instanceof String)) {
+            assertSerializability(builder, toPrint);
+        }
+        
+        out.severe(builder.toString());
+        
+        
+    }
+
+    /**
+     * @param root the root component
+     * @return the output of printTree() as a String.
+     * Useful when used with a Logger. For example:
+     *    logger.log(DebugUtil.printTree(root));
+     */
+    public static String printTree(UIComponent root) {
+        Writer writer = new FastStringWriter(1024);
+        printTree(root, writer);
+        return writer.toString();
+    }
+
+    /**
+     * Output of printTree() to a PrintStream.
+     * Usage:
+     *    DebugUtil.printTree(root, System.out);
+     *
+     * @param root the root component
+     * @param out the PrintStream to write to
+     */
+    public static void printTree(UIComponent root, PrintStream out) {
+        PrintWriter writer;
+        try {
+            writer = new PrintWriter(new PrintStream(out, true, RIConstants.CHAR_ENCODING));
+            printTree(root, writer);
+            writer.flush();
+
+        } catch (UnsupportedEncodingException ex) {
+            System.out.println(ex.getMessage());
+        }
+    }
+    
+    public static void printTree(UIComponent root, Logger logger, Level level) {
+        StringWriter sw = new StringWriter();
+        printTree(root, sw);
+        logger.log(level, sw.toString());
+    }
+
+    public static void printTree(UIComponent root, Writer out) {
+        if (null == root) {
+            return;
+        }
+        Object value = null;
+
+/* PENDING
+   indentPrintln(out, "===>Type:" + root.getComponentType());
+*/
+        indentPrintln(out, "id:" + root.getId());
+        indentPrintln(out, "type:" + root.getClass().getName());
+
+        if (root instanceof javax.faces.component.UISelectOne) {
+            Iterator<SelectItem> items = null;
+            try {
+                items = RenderKitUtils.getSelectItems(FacesContext.getCurrentInstance(),
+                                                      root);
+            } catch (Exception e) {
+                 // select items couldn't be resolved at this time
+                indentPrintln(out, " { SelectItem(s) not resolvable at this point in time }");
+            }
+            if (items != null) {
+                indentPrintln(out, " {");
+                while (items.hasNext()) {
+                    SelectItem curItem = items.next();
+                    indentPrintln(out, "\t value = "
+                                       + curItem.getValue()
+                                       +
+                                       ", label = "
+                                       + curItem.getLabel()
+                                       + ", description = "
+                                       +
+                                       curItem.getDescription());
+                }
+                indentPrintln(out, " }");
+            }
+        } else {
+            ValueExpression ve = null;
+            if (root instanceof ValueHolder) {
+                ve = root.getValueExpression("value");
+                try {
+                    value = ((ValueHolder) root).getValue();
+                } catch (Exception e) {
+                    value = "UNAVAILABLE";
+                }
+            }
+            if (ve != null) {
+                indentPrintln(out, "expression/value = " + ve.getExpressionString() + " : " + value);
+            } else {
+                indentPrintln(out, "value = " + value);
+            }
+
+            Iterator<String> it = root.getAttributes().keySet().iterator();
+            if (it != null) {
+                while (it.hasNext()) {                   
+                    String attrName = it.next();
+                    ve = root.getValueExpression(attrName);
+                    String expr = null;
+                    if (ve != null) {
+                        expr = ve.getExpressionString();
+                    }
+                    String val;
+                    try {
+                        val = root.getAttributes().get(attrName).toString();
+                    } catch (Exception e) {
+                        val = "UNAVAILABLE";
+                    }
+                    if (expr != null) {
+                        indentPrintln(out, "attr = " + attrName + " : [" + expr + " : " + val + " ]");
+                    } else {
+                        indentPrintln(out, "attr = " + attrName + " : " + val);
+                    }
+                }
+            }
+        }
+
+        curDepth++;
+        Iterator<UIComponent> it = root.getChildren().iterator();
+        // print all the facets of this component
+        for (UIComponent uiComponent : root.getFacets().values()) {
+            printTree(uiComponent, out);
+        }
+        // print all the children of this component
+        while (it.hasNext()) {
+            printTree(it.next(), out);
+        }
+        curDepth--;
+    }
+    
+    public static void simplePrintTree(UIComponent root, 
+                                      String duplicateId,
+                                       Writer out) {
+        if (null == root) {
+            return;
+        }                     
+
+        if (duplicateId.equals(root.getClientId())) {
+            indentPrintln(out, "+id: " + root.getId() + "  <===============");
+        } else {
+            indentPrintln(out, "+id: " + root.getId());
+        }
+        indentPrintln(out, " type: " + root.toString());           
+
+        curDepth++;       
+        // print all the facets of this component
+        for (UIComponent uiComponent : root.getFacets().values()) {
+            simplePrintTree(uiComponent, duplicateId, out);
+        }
+        // print all the children of this component
+        for (UIComponent uiComponent : root.getChildren()) {
+            simplePrintTree(uiComponent, duplicateId, out);
+        }
+        curDepth--;
+    }
+    
+    public static void printState(Map state, Logger out) {
+        Set<Map.Entry> entrySet = state.entrySet();
+        Object key, value;
+        String keyIsSerializable, valueIsSerializable;
+        for (Map.Entry cur : entrySet) {
+            key = cur.getKey();
+            value = cur.getValue();
+            keyIsSerializable = (key instanceof Serializable) ? "true" : "+_+_+_+FALSE+_+_+_+_";
+            valueIsSerializable = (value instanceof Serializable) ? "true" : "+_+_+_+FALSE+_+_+_+_";
+            out.severe("key: " + key.toString() + " class:" + key.getClass() + " Serializable: " + 
+                    keyIsSerializable);
+            out.severe("value: " + value.toString() + " class:" + key.getClass() + " Serializable: " + 
+                    keyIsSerializable);
+            if (value instanceof Object []) {
+                printTree((Object []) value, out);
+            }
+        }
+        
+    }
+
+
+//    /**
+//     * Output of printTree() as a String. 
+//     * Useful when used with a Logger. For example:
+//     *    logger.log(DebugUtil.printTree(root));
+//     */
+//    public static String printTree(TreeStructure root) {
+//        Writer writer = new FastStringWriter(1024);
+//        printTree(root, writer);
+//        return writer.toString();
+//    }
+//
+//    /**
+//     * Output of printTree() to a PrintStream. 
+//     * Usage:
+//     *    DebugUtil.printTree(root, System.out);
+//     */
+//    public static void printTree(TreeStructure root, PrintStream out) {
+//        PrintWriter writer = new PrintWriter(out);
+//        printTree(root, writer);
+//        writer.flush();
+//    }
+//
+//    public static void printTree(TreeStructure root, Writer out) {
+//        if (null == root) {
+//            return;
+//        }
+//        int i = 0;
+//        Object value = null;
+//
+///* PENDING
+//   indentPrintln(out, "===>Type:" + root.getComponentType());
+//*/
+//        indentPrintln(out, "id:" + root.id);
+//        indentPrintln(out, "type:" + root.className);
+//
+//        Iterator items = null;
+//        SelectItem curItem = null;
+//        int j = 0;
+//
+//        curDepth++;
+//        if (null != root.children) {
+//            Iterator<TreeStructure> it = root.children.iterator();
+//            while (it.hasNext()) {
+//                printTree(it.next(), out);
+//            }
+//        }
+//        curDepth--;
+//    }
+
+    public static void printTree(Object [] root, Writer out) {
+        
+        if (null == root) {
+            indentPrintln(out, "null");
+            return;
+        }
+        
+        Object obj;
+        for (int i = 0; i < root.length; i++) {
+            obj = root[i];
+            if (null == obj) {
+                indentPrintln(out, "null");
+            } else {
+                if (obj.getClass().isArray()) {
+                    curDepth++;
+                    printTree((Object [])obj, out);
+                    curDepth--;
+                } else {
+                    indentPrintln(out, obj.toString());
+                }
+                
+            }
+        }
+        
+        
+    }
+
+    public static void printTree(Object [] root, Logger out) {
+        
+        if (null == root) {
+            indentPrintln(out, "null");
+            return;
+        }
+        
+        Object obj;
+        for (int i = 0; i < root.length; i++) {
+            obj = root[i];
+            if (null == obj) {
+                indentPrintln(out, "null");
+            } else {
+                if (obj.getClass().isArray()) {
+                    curDepth++;
+                    printTree((Object [])obj, out);
+                    curDepth--;
+                } else if (obj instanceof List) {
+                    printList((List) obj, out);
+                } else {
+                    indentPrintln(out, obj);
+                }
+                
+            }
+        }
+        
+        
+    }
+    
+    public static void printList(List list, Logger out) {
+        for (Object cur : list) {
+            if (cur instanceof List) {
+                curDepth++;
+                printList((List)cur, out);
+                curDepth--;
+            } else {
+                indentPrintln(out, cur);
+            }
+        }
+    }
+    
+    //
+// General Methods
+//
+
+
+} // end of class DebugUtil
diff --git a/com/sun/faces/util/ExpiringConcurrentCache.java b/com/sun/faces/util/ExpiringConcurrentCache.java
new file mode 100644
index 0000000..c2869e2
--- /dev/null
+++ b/com/sun/faces/util/ExpiringConcurrentCache.java
@@ -0,0 +1,193 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+
+/**
+ * This class implements an abstract ConcurrentCache with  objects in the cache potentially expiring.
+ * Only non-expired objects will be returned from the cache or considered to be contained in the cache
+ * The cache is self-managing, so no remove() method is defined
+ */
+public final class ExpiringConcurrentCache<K, V> extends ConcurrentCache<K, V> {
+    
+    /**
+     * Interface for checking whether a cached object expired
+     */
+    public interface ExpiryChecker<K, V>{
+        /**
+         * Checks whether a cached object expired
+         * @param key cache key
+         * @param value cached value
+         * @return true if the value expired and should be removed from the cache, false otherwise
+         */
+        public boolean isExpired(K key, V value);
+    }
+    
+    /**
+     * Public constructor.
+     * @param f used to create new instances of objects that are not already available
+     * @param checker used to check whether an object in the cache has expired
+     */
+    public ExpiringConcurrentCache(Factory<K, V> f, ExpiryChecker<K, V> checker) {
+        super(f);
+        _checker = checker;
+    }
+    
+    @Override
+    public V get(final K key) throws ExecutionException {
+        // This method uses a design pattern from "Java concurrency in practice".
+        // The pattern ensures that only one thread gets to create an object  missing in the cache,
+        // while the all the other threads tring to get it are waiting
+        while (true) {
+            boolean newlyCached = false;
+            
+            Future<V> f = _cache.get(key);
+            if (f == null) {
+                Callable<V> callable = new Callable<V>() {
+                    public V call() throws Exception {
+                        return getFactory().newInstance(key);
+                    }
+                };
+                FutureTask<V> ft = new FutureTask<V>(callable);
+                // here is the real beauty of the concurrent utilities.
+                // 1.  putIfAbsent() is atomic
+                // 2.  putIfAbsent() will return the value already associated
+                //     with the specified key
+                // So, if multiple threads make it to this point
+                // they will all be calling f.get() on the same
+                // FutureTask instance, so this guarantees that the instances
+                // that the invoked Callable will return will be created once
+                f = _cache.putIfAbsent(key, ft);
+                if (f == null) {
+                    f = ft;
+                    ft.run();
+                    newlyCached = true;
+                }
+            }
+            try {
+                V obj = f.get();
+                if (!newlyCached && _getExpiryChecker().isExpired(key, obj)) {
+                    
+                    // Note that we are using both key and value in remove() call to ensure
+                    // that we are not removing the Future added after expiry check by a different thread
+                    _cache.remove(key, f);
+                }
+                else {
+                    return obj;
+                }
+            } catch (CancellationException ce) {
+                if (_LOGGER.isLoggable(Level.SEVERE)) {
+                    _LOGGER.log(Level.SEVERE,
+                               ce.toString(),
+                               ce);
+                }
+                _cache.remove(key, f);
+            } catch (ExecutionException ee) {
+                _cache.remove(key, f);
+                throw ee;
+            } catch (InterruptedException ie) {                 
+                throw new FacesException(ie); 
+                
+            }
+        }  
+    }
+    
+    @Override
+    public boolean containsKey(final K key) {
+        
+        Future<V> f = _cache.get(key);
+
+        if (f != null && f.isDone() && !f.isCancelled()) {
+
+            try {
+                // Call get() with a 0 timeout to avoid any wait
+                V obj = f.get(0, TimeUnit.MILLISECONDS);
+                if (_getExpiryChecker().isExpired(key, obj)) {
+
+                    // Note that we are using both key and value in remove() call to ensure
+                    // that we are not removing the Future added after expiry check by a different thread
+                    _cache.remove(key, f);
+                } else {
+                    
+                    return true;
+                }
+            } catch (TimeoutException ce) {
+                    // do nothing. This just indicates that the object is not yet ready
+                } catch (CancellationException ce) {
+                if (_LOGGER.isLoggable(Level.SEVERE)) {
+                    _LOGGER.log(Level.SEVERE, ce.toString(), ce);
+                }
+            } catch (InterruptedException ie) {
+                throw new FacesException(ie);
+
+            } catch (ExecutionException ee) {
+                // Do nothing - the FutureTask will be removed by the thread that called get() on this class
+            }
+        }
+        
+        return false;
+    }
+
+    
+
+
+    private ExpiryChecker<K, V> _getExpiryChecker() {
+        return _checker;
+    }
+    
+    private final ExpiryChecker<K, V> _checker;
+    private final ConcurrentMap<K, Future<V>> _cache = new ConcurrentHashMap<K, Future<V>>();
+    
+    private static final Logger _LOGGER = FacesLogger.UTIL.getLogger();
+}
diff --git a/com/sun/faces/util/FacesLogger.java b/com/sun/faces/util/FacesLogger.java
new file mode 100644
index 0000000..ee2b2a5
--- /dev/null
+++ b/com/sun/faces/util/FacesLogger.java
@@ -0,0 +1,134 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p/>
+ * An <code>enum</code> of all application <code>Logger</code>s.
+ * </p>
+ */
+public enum FacesLogger {
+
+    APPLICATION("application"),
+    APPLICATION_VIEW("application.view"),
+    RESOURCE("resource"),
+    CONFIG("config"),
+    CONTEXT("context"),
+    FACELETS_COMPILER("facelets.compiler"),
+    FACELETS_COMPONENT("facelets.tag.component"),
+    FACELETS_EL("facelets.el"),
+    FACELETS_META("facelets.tag.meta"),
+    FACELETS_COMPOSITION("facelets.tag.ui.composition"),
+    FACELETS_DECORATE("facelets.tag.ui.decorate"),
+    FACELETS_INCLUDE("facelets.tag.ui.include"),
+    FACELETS_FACELET("faclets.facelet"),
+    FACELETS_FACTORY("facelets.factory"),
+    FLOW("flow"),
+    LIFECYCLE("lifecycle"),
+    MANAGEDBEAN("managedbean"),
+    RENDERKIT("renderkit"),
+    TAGLIB("taglib"),
+    TIMING("timing"),
+    UTIL("util"),
+    FLASH("flash");
+
+    private static final String LOGGER_RESOURCES
+         = "com.sun.faces.LogStrings";
+    public static final String FACES_LOGGER_NAME_PREFIX
+         = "javax.enterprise.resource.webcontainer.jsf.";
+    private String loggerName;
+
+
+    FacesLogger(String loggerName) {
+        this.loggerName = FACES_LOGGER_NAME_PREFIX + loggerName;
+    }
+
+
+    public String getLoggerName() {
+        return loggerName;
+    }
+
+
+    public String getResourcesName() {
+        return LOGGER_RESOURCES;
+    }
+
+    public Logger getLogger() {
+        return Logger.getLogger(loggerName, LOGGER_RESOURCES);
+    }
+    
+    public String interpolateMessage(FacesContext context,
+          String messageId,
+          Object [] params) {
+        String result = null;
+        ResourceBundle rb = null;
+        UIViewRoot root = context.getViewRoot();
+        Locale curLocale;
+        ClassLoader loader = Util.getCurrentLoader(this);
+        if (null == root) {
+            curLocale = Locale.getDefault();
+        } else {
+            curLocale = root.getLocale();
+        }
+        try {
+            rb = ResourceBundle.getBundle(getResourcesName(), curLocale, loader);
+            String message = rb.getString(messageId);
+            if (params != null) {
+                result = MessageFormat.format(message, params);
+            } else {
+                result = message;
+            }
+        } catch (MissingResourceException mre) {
+            result = messageId;
+        }
+        
+        return result;
+    }
+
+}
diff --git a/com/sun/faces/util/HtmlUtils.java b/com/sun/faces/util/HtmlUtils.java
new file mode 100644
index 0000000..3199242
--- /dev/null
+++ b/com/sun/faces/util/HtmlUtils.java
@@ -0,0 +1,1243 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.util.BitSet;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Arrays;
+
+/**
+ * Utility class for HTML.
+ * Kudos to Adam Winer (Oracle) for much of this code.
+ */
+public class HtmlUtils {
+
+    private final static Set<String> UTF_CHARSET = new HashSet<String>(Arrays.asList("UTF-8", "UTF-16",
+            "UTF-16BE", "UTF-16LE", "UTF-32", "UTF-32BE", "UTF-32LE", "x-UTF-16LE-BOM", "X-UTF-32BE-BOM",
+            "X-UTF-32LE-BOM", ""));
+
+    //-------------------------------------------------
+    // The following methods include the handling of
+    // escape characters....
+    //-------------------------------------------------
+
+    static public void writeText(Writer out,
+                                 boolean escapeUnicode,
+                                 boolean escapeIsocode, char[] buffer,
+                                 char[] text) throws IOException {
+        writeText(out, escapeUnicode, escapeIsocode, buffer, text, 0, text.length);
+    }
+
+
+    /**
+     * Write char array text.
+     */
+    static public void writeText(Writer out,
+                                 boolean escapeUnicode,
+                                 boolean escapeIsocode, char[] buff,
+                                 char[] text,
+                                 int start,
+                                 int length) throws IOException {
+        int buffLength = buff.length;
+        int buffIndex = 0;
+
+        int end = start + length;
+        for (int i = start; i < end; i++) {
+            buffIndex = writeTextChar(out, escapeUnicode, escapeIsocode, text[i], buffIndex, buff, buffLength);
+        }
+
+        flushBuffer(out, buff, buffIndex);
+    }
+
+
+    /**
+     * Write String text.  
+     */
+    static public void writeText(Writer out,
+                                 boolean escapeUnicode,
+                                 boolean escapeIsocode, char[] buff,
+                                 String text,
+                                 char[] textBuff) throws IOException {
+
+        int length = text.length();
+
+        if (length >= 16) {
+            text.getChars(0, length, textBuff, 0);
+            writeText(out, escapeUnicode, escapeIsocode, buff, textBuff, 0, length);
+        } else {
+            int buffLength = buff.length;
+            int buffIndex = 0;
+            for (int i = 0; i < length; i++) {
+                char ch = text.charAt(i);
+                buffIndex = writeTextChar(out, escapeUnicode, escapeIsocode, ch, buffIndex, buff, buffLength);
+            }
+            flushBuffer(out, buff, buffIndex);
+        }
+
+        
+    }
+
+    private static int writeTextChar(Writer out,
+                                     boolean escapeUnicode,
+                                     boolean escapeIsocode,
+                                     char ch,
+                                     int buffIndex,
+                                     char[] buff,
+                                     int buffLength) throws IOException {
+        int nextIndex;
+        if (ch <= 0x1f) {
+            if (!isPrintableControlChar(ch)) {
+                return buffIndex;
+            }
+        }
+        if (ch < 0xA0) {
+            // If "?" or over, no escaping is needed (this covers
+            // most of the Latin alphabet)
+            if (ch >= 0x3f) {
+                nextIndex = addToBuffer(out, buff, buffIndex,
+                                        buffLength, ch);
+            } else if (ch >= 0x27) {  // If above "'"...
+                // If between "'" and ";", no escaping is needed
+                if (ch < 0x3c) {
+                    nextIndex = addToBuffer(out, buff, buffIndex,
+                                            buffLength, ch);
+                } else if (ch == '<') {
+                    nextIndex = addToBuffer(out,
+                                            buff,
+                                            buffIndex,
+                                            buffLength,
+                                            LT_CHARS);
+                } else if (ch == '>') {
+                    nextIndex = addToBuffer(out,
+                                            buff,
+                                            buffIndex,
+                                            buffLength,
+                                            GT_CHARS);
+                } else {
+                    nextIndex = addToBuffer(out, buff, buffIndex,
+                                            buffLength, ch);
+                }
+            } else {
+                if (ch == '&') {
+                    nextIndex = addToBuffer(out,
+                                            buff,
+                                            buffIndex,
+                                            buffLength,
+                                            AMP_CHARS);
+                } else if (ch == '"') {
+                        nextIndex = addToBuffer(out,
+                             buff,
+                             buffIndex,
+                             buffLength,
+                             "\"".toCharArray());
+                } else {
+                    nextIndex = addToBuffer(out, buff, buffIndex,
+                                            buffLength, ch);
+                }
+            }
+        } else if (ch <= 0xff) {
+            if (escapeIsocode) {
+                // ISO-8859-1 entities: encode as needed
+                nextIndex = addToBuffer(out,
+                                        buff,
+                                        buffIndex,
+                                        buffLength,
+                                        sISO8859_1_Entities[ch - 0xA0]);
+            }
+            else {
+                nextIndex = addToBuffer(out, buff, buffIndex,
+                        buffLength, ch);
+            }
+        } else {
+            if(escapeUnicode) {
+                // UNICODE entities: encode as needed
+                nextIndex =
+                      _writeDecRef(out, buff, buffIndex, buffLength, ch);
+            } else {
+                nextIndex = addToBuffer(out, buff, buffIndex,
+                        buffLength, ch);
+            }
+        }
+        return nextIndex;
+    }
+
+
+    /**
+     * Write a string attribute.  Note that this code
+     * is duplicated below for character arrays - change both
+     * places if you make any changes!!!
+     */
+    static public void writeAttribute(Writer out,
+                                      boolean escapeUnicode,
+                                      boolean escapeIsocode,
+                                      char[] buff,
+                                      String text,
+                                      char[] textBuff,
+                                      boolean isScriptInAttributeValueEnabled) throws IOException {
+
+        int length = text.length();
+        if (length >= 16) {
+            if (length > textBuff.length) {
+                // resize our buffer
+                textBuff = new char[length * 2];
+            }
+            text.getChars(0, length, textBuff, 0);
+            writeAttribute(out, escapeUnicode, escapeIsocode, buff, textBuff, 0, length,
+                    isScriptInAttributeValueEnabled);
+        } else {
+            int buffLength = buff.length;
+            int buffIndex = 0;
+            for (int i = 0; i < length; i++) {
+                char ch = text.charAt(i);
+
+                if (ch <= 0x1f) {
+                    if (!isPrintableControlChar(ch)) {
+                        continue;
+                    }
+                }
+                // Tilde or less...
+                if (ch < 0xA0) {
+                    // If "?" or over, no escaping is needed (this covers
+                    // most of the Latin alphabet)
+                    if (ch >= 0x3f) {
+                        if (ch == 's') {
+                            // If putting scripts in attribute values
+                            // has been disabled (the defualt), look for
+                            // script: in the attribute value.
+                            // ensure the attribute value is long enough
+                            // to accomodate "script:"
+                            if (!isScriptInAttributeValueEnabled &&
+                                    ((i + 6) < text.length())) {
+                                if ('c' == text.charAt(i + 1) &&
+                                    'r' == text.charAt(i + 2) &&
+                                    'i' == text.charAt(i + 3) &&
+                                    'p' == text.charAt(i + 4) &&
+                                    't' == text.charAt(i + 5) &&
+                                    ':' == text.charAt(i + 6)) {
+                                    return;
+                                }
+                            }
+                        }
+                        buffIndex = addToBuffer(out, buff, buffIndex,
+                                                buffLength, ch);
+                    } else if (ch >= 0x27) { // If above "'"...
+                        // If between "'" and ";", no escaping is needed
+                        if (ch < 0x3c) {
+                            buffIndex = addToBuffer(out, buff, buffIndex,
+                                                    buffLength, ch);
+                        } else if (ch == '<') {
+                            buffIndex = addToBuffer(out,
+                                                    buff,
+                                                    buffIndex,
+                                                    buffLength,
+                                                    LT_CHARS);
+                        } else if (ch == '>') {
+                            buffIndex = addToBuffer(out,
+                                                    buff,
+                                                    buffIndex,
+                                                    buffLength,
+                                                    GT_CHARS);
+                        } else {
+                            buffIndex = addToBuffer(out, buff, buffIndex,
+                                                    buffLength, ch);
+                        }
+                    } else {
+                        if (ch == '&') {
+                            // HTML 4.0, section B.7.1: ampersands followed by
+                            // an open brace don't get escaped
+                            if ((i + 1 < length) && (text.charAt(i + 1)
+                                                     == '{')) {
+                                buffIndex = addToBuffer(out,
+                                                        buff,
+                                                        buffIndex,
+                                                        buffLength,
+                                                        ch);
+                            } else {
+                                buffIndex = addToBuffer(out,
+                                                        buff,
+                                                        buffIndex,
+                                                        buffLength,
+                                                        AMP_CHARS);
+                            }
+                        } else if (ch == '"') {
+                            buffIndex = addToBuffer(out,
+                                                    buff,
+                                                    buffIndex,
+                                                    buffLength,
+                                                    QUOT_CHARS);
+                        } else {
+                            buffIndex = addToBuffer(out, buff, buffIndex,
+                                                    buffLength, ch);
+                        }
+                    }
+                } else if (ch <= 0xff) {
+                    if (escapeIsocode) {
+                        // ISO-8859-1 entities: encode as needed
+                        buffIndex = addToBuffer(out,
+                                                buff,
+                                                buffIndex,
+                                                buffLength,
+                                                sISO8859_1_Entities[ch - 0xA0]);
+                    } else {
+                        buffIndex = addToBuffer(out, buff, buffIndex,
+                                                buffLength, ch);
+                    }
+                } else {
+                    if(escapeUnicode) {
+                        // UNICODE entities: encode as needed
+                        buffIndex =
+                              _writeDecRef(out, buff, buffIndex, buffLength, ch);
+                    } else {
+                        buffIndex = addToBuffer(out, buff, buffIndex,
+                                buffLength, ch);
+                    }
+                }
+            }
+
+            flushBuffer(out, buff, buffIndex);
+        }
+    }
+
+
+    static public void writeAttribute(Writer out,
+                                      boolean escapeUnicode,
+                                      boolean escapeIsocode,
+                                      char[] buffer,
+                                      char[] text) throws IOException {
+        writeAttribute(out, escapeUnicode, escapeIsocode, buffer, text, 0, text.length,
+                WebConfiguration.BooleanWebContextInitParameter.EnableScriptInAttributeValue.getDefaultValue());
+    }
+
+
+    /**
+     * Write a character array attribute.  Note that this code
+     * is duplicated above for string - change both places if you make
+     * any changes!!!
+     */
+    static public void writeAttribute(Writer out,
+                                      boolean escapeUnicode,
+                                      boolean escapeIsocode,
+                                      char[] buff,
+                                      char[] text,
+                                      int start,
+                                      int length,
+                                      boolean isScriptInAttributeValueEnabled) throws IOException {
+        int buffLength = buff.length;
+        int buffIndex = 0;
+
+        int end = start + length;
+        for (int i = start; i < end; i++) {
+            char ch = text[i];
+
+            // "Application Program Command" or less...
+            if (ch <= 0x1f) {
+                if (!isPrintableControlChar(ch)) {
+                    continue;
+                }
+            }
+            if (ch < 0xA0) {
+                // If "?" or over, no escaping is needed (this covers
+                // most of the Latin alphabet)
+                if (ch >= 0x3f) {
+                    if (ch == 's') {
+                        // If putting scripts in attribute values
+                        // has been disabled (the defualt), look for
+                        // script: in the attribute value.  
+                        // ensure the attribute value is long enough
+                        // to accomodate "script:"
+                        if (!isScriptInAttributeValueEnabled &&
+                                ((i + 6) < text.length)) {
+                            if ('c' == text[i + 1] &&
+                                'r' == text[i + 2] &&
+                                'i' == text[i + 3] &&
+                                'p' == text[i + 4] &&
+                                't' == text[i + 5] &&
+                                ':' == text[i + 6]) {
+                                return;
+                            }
+                        }
+                    }
+                    
+                    buffIndex = addToBuffer(out, buff, buffIndex,
+                                            buffLength, ch);
+                } else if (ch >= 0x27) { // If above "'"...
+                    if (ch < 0x3c) {
+                        // If between "'" and ";", no escaping is needed
+                        buffIndex = addToBuffer(out, buff, buffIndex,
+                                                buffLength, ch);                       
+                    } else if (ch == '<') {
+                        buffIndex = addToBuffer(out,
+                                                buff,
+                                                buffIndex,
+                                                buffLength,
+                                                LT_CHARS);
+                    } else if (ch == '>') {
+                        buffIndex = addToBuffer(out,
+                                                buff,
+                                                buffIndex,
+                                                buffLength,
+                                                GT_CHARS);
+                    } else {
+                        buffIndex = addToBuffer(out, buff, buffIndex,
+                                                buffLength, ch);
+                    }
+                } else {
+                    if (ch == '&') {
+                        // HTML 4.0, section B.7.1: ampersands followed by
+                        // an open brace don't get escaped
+                        if ((i + 1 < end) && (text[i + 1] == '{')) {
+                            buffIndex = addToBuffer(out,
+                                                    buff,
+                                                    buffIndex,
+                                                    buffLength,
+                                                    ch);
+                        } else {
+                            buffIndex = addToBuffer(out,
+                                                buff,
+                                                buffIndex,
+                                                buffLength,
+                                                AMP_CHARS);
+                        }
+                    } else if (ch == '"') {
+                        buffIndex = addToBuffer(out,
+                                                buff,
+                                                buffIndex,
+                                                buffLength,
+                                                QUOT_CHARS);
+                    } else {
+                        buffIndex = addToBuffer(out, buff, buffIndex,
+                                                buffLength, ch);
+                    }
+                }
+            } else if (ch <= 0xff) {
+                if (escapeIsocode) {
+                    // ISO-8859-1 entities: encode as needed
+                    buffIndex = addToBuffer(out,
+                                            buff,
+                                            buffIndex,
+                                            buffLength,
+                                            sISO8859_1_Entities[ch - 0xA0]);
+                }
+                else {
+                    buffIndex = addToBuffer(out, buff, buffIndex,
+                            buffLength, ch);
+                }
+            } else {
+                if(escapeUnicode) {
+                    // UNICODE entities: encode as needed
+                    buffIndex = _writeDecRef(out, buff, buffIndex, buffLength, ch);
+                } else {
+                    buffIndex = addToBuffer(out, buff, buffIndex,
+                            buffLength, ch);
+                }
+            }
+        }
+
+        flushBuffer(out, buff, buffIndex);
+    }
+
+
+    static private boolean isPrintableControlChar(int ch) {
+
+        return (ch == 0x09 || ch == 0x0A || ch == 0x0C || ch == 0x0D);
+
+    }
+
+
+    /**
+     * Writes a character as a decimal escape.  Hex escapes are smaller than
+     * the decimal version, but Netscape didn't support hex escapes until
+     * 4.7.4.
+     */
+    static private int _writeDecRef(Writer out,
+                                    char[] buffer,
+                                    int bufferIndex,
+                                    int bufferLength,
+                                    char ch) throws IOException {
+        if (ch == '\u20ac') {
+            bufferIndex = addToBuffer(out,
+                                      buffer,
+                                      bufferIndex,
+                                      bufferLength,
+                                      EURO_CHARS);
+            return bufferIndex;
+        }
+        bufferIndex = addToBuffer(out,
+                                  buffer,
+                                  bufferIndex,
+                                  bufferLength,
+                                  DEC_REF_START);
+        // Formerly used String.valueOf().  This version tests out
+        // about 40% faster in a microbenchmark (and on systems where GC is
+        // going gonzo, it should be even better)
+        int i = (int) ch;
+        if (i > 10000) {
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10000))));
+            i = i % 10000;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 1000))));
+            i = i % 1000;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 100))));
+            i = i % 100;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10))));
+            i = i % 10;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + i)));
+        } else if (i > 1000) {
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 1000))));
+            i = i % 1000;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 100))));
+            i = i % 100;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10))));
+            i = i % 10;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + i)));
+        } else {
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 100))));
+            i = i % 100;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10))));
+            i = i % 10;
+            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + i)));
+        }
+
+        return addToBuffer(out, buffer, bufferIndex, bufferLength, ';');
+        
+    }
+
+    // 
+    // Buffering scheme: we use a tremendously simple buffering
+    // scheme that greatly reduces the number of calls into the
+    // Writer/PrintWriter.  In practice this has produced significant
+    // measured performance gains (at least in JDK 1.3.1).
+    //
+
+    /**
+     * Add a character to the buffer, flushing the buffer if the buffer is
+     * full, and returning the new buffer index
+     */
+    private static int addToBuffer(Writer out,
+                                   char[] buffer,
+                                   int bufferIndex,
+                                   int bufferLength,
+                                   char ch) throws IOException {
+        if (bufferIndex >= bufferLength) {
+            out.write(buffer, 0, bufferIndex);
+            bufferIndex = 0;
+        }
+
+        buffer[bufferIndex] = ch;
+
+        return bufferIndex + 1;
+    }
+
+    /**
+     * Add an array of characters to the buffer, flushing the buffer
+     * if the buffer is full, and returning the new buffer index. 
+     */
+    private static int addToBuffer(Writer out,
+                                   char[] buffer,
+                                   int bufferIndex,
+                                   int bufferLength,
+                                   char[] toAdd) throws IOException {
+
+        if (bufferIndex >= bufferLength
+            || (toAdd.length + bufferIndex >= bufferLength)) {
+            out.write(buffer, 0, bufferIndex);
+            bufferIndex = 0;
+        }
+        System.arraycopy(toAdd, 0, buffer, bufferIndex, toAdd.length);
+        return bufferIndex + toAdd.length;
+
+    }
+
+
+    /**
+     * Flush the contents of the buffer to the output stream
+     * and return the reset buffer index
+     */
+    private static int flushBuffer(Writer out,
+                                   char[] buffer,
+                                   int bufferIndex) throws IOException {
+        if (bufferIndex > 0)
+            out.write(buffer, 0, bufferIndex);
+
+        return 0;
+    }
+
+
+    private HtmlUtils() {
+    }
+
+
+    /**
+     * Writes a string into URL-encoded format out to a Writer.
+     * <p/>
+     * All characters before the start of the query string will be encoded
+     * using ISO-8859-1.
+     * PENDING: Ideally, we'd encode characters before the query string
+     * using UTF-8, which is what the HTML spec recommends.  Unfortunately,
+     * the Apache server doesn't support this until 2.0.
+     * <p/>
+     * Characters after the start of the query string will be encoded
+     * using a client-defined encoding.  You'll need to use the encoding
+     * that the server will expect.  (HTML forms will generate query
+     * strings using the character encoding that the HTML itself was
+     * generated in.)
+     * <p/>
+     * All characters will be encoded as needed for URLs, with the exception
+     * of the percent symbol ("%").  Because this is the character
+     * itself used for escaping, attempting to escape this character
+     * would cause this code to double-escape some strings.  It also may
+     * be necessary to pre-escape some characters.  In particular, a
+     * question mark ("?") is considered the start of the query string.
+     * <p/>
+     *
+     * <p>
+     * NOTE:  This is method is duplicated below.  The difference being
+     *  the acceptance of a char[] for the text to write.  Any changes made
+     *  here, should be made below.
+     * </p>
+     *
+     * @param out           a Writer for the output
+     * @param text          the unencoded (or partially encoded) String
+     * @param queryEncoding the character set encoding for after the first
+     *                      question mark
+     */
+    static public void writeURL(Writer out,
+                                String text,
+                                char[] textBuff,
+                                String queryEncoding)
+          throws IOException, UnsupportedEncodingException {
+
+        int length = text.length();
+        if (length >= 16) {
+            text.getChars(0, length, textBuff, 0);
+            writeURL(out, textBuff, 0, length, queryEncoding);
+        } else {
+            for (int i = 0; i < length; i++) {
+                char ch = text.charAt(i);
+
+                if ((ch < 33) || (ch > 126)) {
+                    if (ch == ' ') {
+                        out.write('+');
+                    } else {
+                        // ISO-8859-1.  Blindly assume the character will be < 255.
+                        // Not much we can do if it isn't.
+                        writeURIDoubleHex(out, ch);
+
+                    }
+                }
+                // DO NOT encode '%'.  If you do, then for starters,
+                // we'll double-encode anything that's pre-encoded.
+                // And, what's worse, there becomes no way to use
+                // characters that must be encoded if you
+                // don't want them to be interpreted, like '?' or '&'.
+                // else if('%' == ch)
+                // {
+                //   writeURIDoubleHex(out, ch);
+                // }
+                else if (ch == '"') {
+                    out.write("%22");
+                }
+                // Everything in the query parameters will be decoded
+                // as if it were in the request's character set.  So use
+                // the real encoding for those!
+                else if (ch == '?') {
+                    out.write('?');
+                    encodeURIString(out,
+                                    text,
+                                    queryEncoding,
+                                    i + 1);
+                    return;
+                } else {
+                    out.write(ch);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Writes a string into URL-encoded format out to a Writer.
+     * <p/>
+     * All characters before the start of the query string will be encoded
+     * using ISO-8859-1.
+     * PENDING: Ideally, we'd encode characters before the query string
+     * using UTF-8, which is what the HTML spec recommends.  Unfortunately,
+     * the Apache server doesn't support this until 2.0.
+     * <p/>
+     * Characters after the start of the query string will be encoded
+     * using a client-defined encoding.  You'll need to use the encoding
+     * that the server will expect.  (HTML forms will generate query
+     * strings using the character encoding that the HTML itself was
+     * generated in.)
+     * <p/>
+     * All characters will be encoded as needed for URLs, with the exception
+     * of the percent symbol ("%").  Because this is the character
+     * itself used for escaping, attempting to escape this character
+     * would cause this code to double-escape some strings.  It also may
+     * be necessary to pre-escape some characters.  In particular, a
+     * question mark ("?") is considered the start of the query string.
+     * <p/>
+     * <p>
+     * NOTE:  This is method is duplicated above.  The difference being
+     *  the acceptance of a String for the text to write.  Any changes made
+     *  here, should be made above.
+     * </p>
+     *
+     * @param out           a Writer for the output
+     * @param textBuff    char[] containing the content to write
+     * @param queryEncoding the character set encoding for after the first
+     *                      question mark
+     */
+    static public void writeURL(Writer out,
+                                char[] textBuff,
+                                int start,
+                                int len,
+                                String queryEncoding)
+        throws IOException, UnsupportedEncodingException {
+
+        int end = start + len;
+        for (int i = start; i < end; i++) {
+            char ch = textBuff[i];
+
+            if ((ch < 33) || (ch > 126)) {
+                writeURIDoubleHex(out, ch);
+            }
+            // DO NOT encode '%'.  If you do, then for starters,
+            // we'll double-encode anything that's pre-encoded.
+            // And, what's worse, there becomes no way to use
+            // characters that must be encoded if you
+            // don't want them to be interpreted, like '?' or '&'.
+            // else if('%' == ch)
+            // {
+            //   writeURIDoubleHex(out, ch);
+            // }
+            else if (ch == '"') {
+                out.write("%22");
+            }
+            // Everything in the query parameters will be decoded
+            // as if it were in the request's character set.  So use
+            // the real encoding for those!
+            else if (ch == '?') {
+           out.write('?');
+                encodeURIString(out,
+                                textBuff,
+                                queryEncoding,
+                                i + 1,
+                                end);
+                return;
+            } else {
+                out.write(ch);
+            }
+        }
+    }
+
+    static public void writeTextForXML(Writer out, String text, char[] outbuf)
+        throws IOException {
+        char[] textBuffer = new char[128];
+        int len = text.toString().length();
+        if (textBuffer.length < len) {
+            textBuffer = new char[len * 2];
+        }
+        HtmlUtils.writeText(out, true, true, outbuf, text, textBuffer);
+    }
+
+    // Encode a String into URI-encoded form.  This code will
+    // appear rather (ahem) similar to java.net.URLEncoder
+    // This is duplicated below accepting a char[] for the content
+    // to write.  Any changes here, should be made there as well.
+     static private void encodeURIString(Writer out,
+                                        String text,
+                                        String encoding,
+                                        int start)
+     throws IOException {   
+        MyByteArrayOutputStream buf = null;
+        OutputStreamWriter writer = null;
+        char[] charArray = null;
+
+        int length = text.length();
+        for (int i = start; i < length; i++) {
+            char ch = text.charAt(i);
+            if (DONT_ENCODE_SET.get(ch)) {
+                if (ch == '&') {
+                    if (((i + 1) < length) && isAmpEscaped(text, i + 1)) {
+                        out.write(ch);
+                        continue;
+                    }
+                    out.write(AMP_CHARS);
+                } else {
+                    out.write(ch);
+                }
+            } else {
+                if (buf == null) {
+                    buf = new MyByteArrayOutputStream(MAX_BYTES_PER_CHAR);
+                    if (encoding != null) {
+                        writer = new OutputStreamWriter(buf, encoding);
+                    } else {
+                        writer = new OutputStreamWriter(buf, RIConstants.CHAR_ENCODING);
+                    }
+                    charArray = new char[1];
+                }
+
+                // convert to external encoding before hex conversion
+                try {
+                    // An inspection of OutputStreamWriter reveals
+                    // that write(char) always allocates a one element
+                    // character array.  We can reuse our own.
+                    charArray[0] = ch;
+                    writer.write(charArray, 0, 1);
+                    writer.flush();
+                } catch (IOException e) {
+                    buf.reset();
+                    continue;
+                }
+
+                byte[] ba = buf.getBuf();
+                for (int j = 0, size = buf.size(); j < size; j++) {
+                    writeURIDoubleHex(out, ba[j] + 256);
+                }
+
+                buf.reset();
+            }
+        }      
+    }
+
+    // Encode a String into URI-encoded form.  This code will
+    // appear rather (ahem) similar to java.net.URLEncoder
+    // This is duplicated above accepting a String for the content
+    // to write.  Any changes here, should be made there as well.
+     static private void encodeURIString(Writer out,
+                                        char[] textBuff,
+                                        String encoding,
+                                        int start,
+                                        int end)
+     throws IOException {
+        MyByteArrayOutputStream buf = null;
+        OutputStreamWriter writer = null;
+        char[] charArray = null;
+
+
+        for (int i = start; i < end; i++) {
+            char ch = textBuff[i];
+            if (DONT_ENCODE_SET.get(ch)) {
+                if (ch == '&') {
+                    if (((i + 1) < end) && isAmpEscaped(textBuff, i + 1)) {
+                        out.write(ch);
+                        continue;
+                    }
+                    out.write(AMP_CHARS);
+                } else {
+                    out.write(ch);
+                }
+            } else {
+                if (buf == null) {
+                    buf = new MyByteArrayOutputStream(MAX_BYTES_PER_CHAR);
+                    if (encoding != null) {
+                        writer = new OutputStreamWriter(buf, encoding);
+                    } else {
+                        writer = new OutputStreamWriter(buf, RIConstants.CHAR_ENCODING);
+                    }
+                    charArray = new char[1];
+                }
+
+                // convert to external encoding before hex conversion
+                try {
+                    // An inspection of OutputStreamWriter reveals
+                    // that write(char) always allocates a one element
+                    // character array.  We can reuse our own.
+                    charArray[0] = ch;
+                    writer.write(charArray, 0, 1);
+                    writer.flush();
+                } catch (IOException e) {
+                    buf.reset();
+                    continue;
+                }
+
+                byte[] ba = buf.getBuf();
+                for (int j = 0, size = buf.size(); j < size; j++) {
+                    writeURIDoubleHex(out, ba[j] + 256);
+                }
+
+                buf.reset();
+            }
+        }
+    }
+    
+
+    // NOTE: Any changes made to this method should be made
+    //  in the associated method that accepts a char[] instead
+    //  of String
+    static private boolean isAmpEscaped(String text, int idx) {       
+        for (int i = 1, ix = idx; i < AMP_CHARS.length; i++, ix++) {
+            if (text.charAt(ix) == AMP_CHARS[i]) {
+                continue;
+            }
+            return false;
+        }
+        return true;
+    }
+
+    // NOTE: Any changes made to this method should be made
+    //  in the associated method that accepts a String instead
+    //  of char[]
+    static private boolean isAmpEscaped(char[] text, int idx) {
+         for (int i = 1, ix = idx; i < AMP_CHARS.length; i++, ix++) {
+            if (text[ix] == AMP_CHARS[i]) {
+                continue;
+            }
+            return false;
+        }
+        return true;
+    }
+
+
+    static private void writeURIDoubleHex(Writer out,
+                                          int i) throws IOException {
+        out.write('%');
+        out.write(intToHex((i >> 4) % 0x10));
+        out.write(intToHex(i % 0x10));
+    }
+
+
+    static private char intToHex(int i) {
+        if (i < 10)
+            return ((char) ('0' + i));
+        else
+            return ((char) ('A' + (i - 10)));
+    }
+
+    static private final char[] AMP_CHARS = "&".toCharArray();
+    static private final char[] QUOT_CHARS = """.toCharArray();
+    static private final char[] GT_CHARS = ">".toCharArray();
+    static private final char[] LT_CHARS = "<".toCharArray();
+    static private final char[] EURO_CHARS = "€".toCharArray();
+    static private final char[] DEC_REF_START = "&#".toCharArray();
+    static private final int MAX_BYTES_PER_CHAR = 10;
+    static private final BitSet DONT_ENCODE_SET = new BitSet(256);
+
+
+    // See: http://www.ietf.org/rfc/rfc2396.txt
+    // We're not fully along for that ride either, but we do encode
+    // ' ' as '%20', and don't bother encoding '~' or '/'
+    static {
+        for (int i = 'a'; i <= 'z'; i++) {
+            DONT_ENCODE_SET.set(i);
+        }
+
+        for (int i = 'A'; i <= 'Z'; i++) {
+            DONT_ENCODE_SET.set(i);
+        }
+
+        for (int i = '0'; i <= '9'; i++) {
+            DONT_ENCODE_SET.set(i);
+        }
+        
+        // Don't encode '%' - we don't want to double encode anything.
+        DONT_ENCODE_SET.set('%');
+        // Ditto for '+', which is an encoded space
+        DONT_ENCODE_SET.set('+');
+
+        DONT_ENCODE_SET.set('#');
+        DONT_ENCODE_SET.set('&');
+        DONT_ENCODE_SET.set('=');
+        DONT_ENCODE_SET.set('-');
+        DONT_ENCODE_SET.set('_');
+        DONT_ENCODE_SET.set('.');
+        DONT_ENCODE_SET.set('*');
+        DONT_ENCODE_SET.set('~');
+        DONT_ENCODE_SET.set('/');
+        DONT_ENCODE_SET.set('\'');
+        DONT_ENCODE_SET.set('!');
+        DONT_ENCODE_SET.set('(');
+        DONT_ENCODE_SET.set(')');
+        DONT_ENCODE_SET.set(';');
+    }
+
+
+    //
+    // Entities from HTML 4.0, section 24.2.1; character codes 0xA0 to 0xFF
+    //
+    static private char[][] sISO8859_1_Entities = new char[][]{
+        " ".toCharArray(),
+        "¡".toCharArray(),
+        "¢".toCharArray(),
+        "£".toCharArray(),
+        "¤".toCharArray(),
+        "¥".toCharArray(),
+        "¦".toCharArray(),
+        "§".toCharArray(),
+        "¨".toCharArray(),
+        "©".toCharArray(),
+        "ª".toCharArray(),
+        "«".toCharArray(),
+        "¬".toCharArray(),
+        "­".toCharArray(),
+        "®".toCharArray(),
+        "¯".toCharArray(),
+        "°".toCharArray(),
+        "±".toCharArray(),
+        "&sup2;".toCharArray(),
+        "&sup3;".toCharArray(),
+        "´".toCharArray(),
+        "µ".toCharArray(),
+        "¶".toCharArray(),
+        "·".toCharArray(),
+        "¸".toCharArray(),
+        "&sup1;".toCharArray(),
+        "º".toCharArray(),
+        "»".toCharArray(),
+        "&frac14;".toCharArray(),
+        "&frac12;".toCharArray(),
+        "&frac34;".toCharArray(),
+        "¿".toCharArray(),
+        "À".toCharArray(),
+        "Á".toCharArray(),
+        "Â".toCharArray(),
+        "Ã".toCharArray(),
+        "Ä".toCharArray(),
+        "Å".toCharArray(),
+        "Æ".toCharArray(),
+        "Ç".toCharArray(),
+        "È".toCharArray(),
+        "É".toCharArray(),
+        "Ê".toCharArray(),
+        "Ë".toCharArray(),
+        "Ì".toCharArray(),
+        "Í".toCharArray(),
+        "Î".toCharArray(),
+        "Ï".toCharArray(),
+        "Ð".toCharArray(),
+        "Ñ".toCharArray(),
+        "Ò".toCharArray(),
+        "Ó".toCharArray(),
+        "Ô".toCharArray(),
+        "Õ".toCharArray(),
+        "Ö".toCharArray(),
+        "×".toCharArray(),
+        "Ø".toCharArray(),
+        "Ù".toCharArray(),
+        "Ú".toCharArray(),
+        "Û".toCharArray(),
+        "Ü".toCharArray(),
+        "Ý".toCharArray(),
+        "Þ".toCharArray(),
+        "ß".toCharArray(),
+        "à".toCharArray(),
+        "á".toCharArray(),
+        "â".toCharArray(),
+        "ã".toCharArray(),
+        "ä".toCharArray(),
+        "å".toCharArray(),
+        "æ".toCharArray(),
+        "ç".toCharArray(),
+        "è".toCharArray(),
+        "é".toCharArray(),
+        "ê".toCharArray(),
+        "ë".toCharArray(),
+        "ì".toCharArray(),
+        "í".toCharArray(),
+        "î".toCharArray(),
+        "ï".toCharArray(),
+        "ð".toCharArray(),
+        "ñ".toCharArray(),
+        "ò".toCharArray(),
+        "ó".toCharArray(),
+        "ô".toCharArray(),
+        "õ".toCharArray(),
+        "ö".toCharArray(),
+        "÷".toCharArray(),
+        "ø".toCharArray(),
+        "ù".toCharArray(),
+        "ú".toCharArray(),
+        "û".toCharArray(),
+        "ü".toCharArray(),
+        "ý".toCharArray(),
+        "þ".toCharArray(),
+        "ÿ".toCharArray()
+    };
+
+
+    //----------------------------------------------------------
+    // The following is used to verify encodings
+    //----------------------------------------------------------
+    //
+    static public boolean validateEncoding(String encoding) {
+        return Charset.isSupported(encoding);
+    }
+
+    //----------------------------------------------------------
+    // Check if the given encoding is the ISO-8859-1 encoding
+    //----------------------------------------------------------
+    //
+    static public boolean isISO8859_1encoding(String encoding) {
+        return "ISO-8859-1".equals(encoding);
+    }
+
+    //----------------------------------------------------------
+    // Check if the given encoding is a UTF encoding
+    //----------------------------------------------------------
+    //
+    static public boolean isUTFencoding(String encoding) {
+        return UTF_CHARSET.contains(encoding);
+    }
+
+    //----------------------------------------------------------
+    // The following is used to verify "empty" Html elements.
+    // "Empty" Html elements are those that do not require an
+    // ending tag.  For example, <br>  or <hr>...
+    //----------------------------------------------------------
+
+    static public boolean isEmptyElement(String name) {
+        char firstChar = name.charAt(0);
+        if (firstChar > _LAST_EMPTY_ELEMENT_START)
+            return false;
+
+        // Can we improve performance here?  It's certainly slower to use
+        // a HashMap, at least if we can't assume the input name is lowercased.
+        String[] array = emptyElementArr[firstChar];
+        if (array != null) {
+            for (int i = array.length - 1; i >= 0; i--) {
+                if (name.equalsIgnoreCase(array[i]))
+                    return true;
+            }
+        }
+        return false;
+    }
+
+
+    static private char _LAST_EMPTY_ELEMENT_START = 'p';
+    static private String[][] emptyElementArr =
+        new String[((int) _LAST_EMPTY_ELEMENT_START) + 1][];
+
+    static private String[] aNames = new String[]{
+        "area",
+    };
+
+    static private String[] bNames = new String[]{
+        "br",
+        "base",
+        "basefont",
+    };
+
+    static private String[] cNames = new String[]{
+        "col",
+    };
+
+    static private String[] fNames = new String[]{
+        "frame",
+    };
+
+    static private String[] hNames = new String[]{
+        "hr",
+    };
+
+    static private String[] iNames = new String[]{
+        "img",
+        "input",
+        "isindex",
+    };
+
+    static private String[] lNames = new String[]{
+        "link",
+    };
+
+    static private String[] mNames = new String[]{
+        "meta",
+    };
+
+    static private String[] pNames = new String[]{
+        "param",
+    };
+
+
+    static {
+        emptyElementArr['a'] = aNames;
+        emptyElementArr['A'] = aNames;
+        emptyElementArr['b'] = bNames;
+        emptyElementArr['B'] = bNames;
+        emptyElementArr['c'] = cNames;
+        emptyElementArr['C'] = cNames;
+        emptyElementArr['f'] = fNames;
+        emptyElementArr['F'] = fNames;
+        emptyElementArr['h'] = hNames;
+        emptyElementArr['H'] = hNames;
+        emptyElementArr['i'] = iNames;
+        emptyElementArr['I'] = iNames;
+        emptyElementArr['l'] = lNames;
+        emptyElementArr['L'] = lNames;
+        emptyElementArr['m'] = mNames;
+        emptyElementArr['M'] = mNames;
+        emptyElementArr['p'] = pNames;
+        emptyElementArr['P'] = pNames;
+    }
+    
+    
+    // ----------------------------------------------------------- Inner Classes
+
+
+    /**
+     * <p>Private implementation of ByteArrayOutputStream.</p>
+     */
+    private static class MyByteArrayOutputStream extends ByteArrayOutputStream {
+
+        
+        public MyByteArrayOutputStream(int initialCapacity) {
+            super(initialCapacity);
+        }
+        /**
+         * Obtain access to the underlying byte array to prevent 
+         * unecessary temp object creation.
+         * @return <code>buf</code>
+         */
+        public byte[] getBuf() {
+            return buf;
+        }
+        
+    }
+}
diff --git a/com/sun/faces/util/LRUMap.java b/com/sun/faces/util/LRUMap.java
new file mode 100644
index 0000000..8dd859f
--- /dev/null
+++ b/com/sun/faces/util/LRUMap.java
@@ -0,0 +1,69 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+
+/**
+ * A special implementation of {@link java.util.LinkedHashMap} to provide
+ * LRU functionality.
+ */
+public class LRUMap<K,V> extends LinkedHashMap<K,V> {
+
+    private int maxCapacity;
+
+    // ------------------------------------------------------------ Constructors
+
+    public LRUMap(int maxCapacity) {
+        super(maxCapacity, 1.0f, true);
+        this.maxCapacity = maxCapacity;        
+    }
+
+    // ---------------------------------------------- Methods from LinkedHashMap
+
+    protected boolean removeEldestEntry(Map.Entry eldest) {
+        return (size() > maxCapacity);   
+    }
+    
+    // TEST: com.sun.faces.TestLRUMap_local
+}
diff --git a/com/sun/faces/util/MessageFactory.java b/com/sun/faces/util/MessageFactory.java
new file mode 100644
index 0000000..f6257cb
--- /dev/null
+++ b/com/sun/faces/util/MessageFactory.java
@@ -0,0 +1,389 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * 
+ * <p>supported filters: <code>package</code> and
+ * <code>protection</code>.</p>
+ */
+
+public class MessageFactory {
+
+    private static final String MOJARRA_RESOURCE_BASENAME =
+        "com.sun.faces.resources.Messages";
+
+    private MessageFactory() {
+    }
+
+    /**
+     * @see #getMessage(String, Object...)
+     * @param severity set a custom severity
+     */
+    public static FacesMessage getMessage(String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(Locale, String, Object...)
+     * @param severity set a custom severity
+     */
+    public static FacesMessage getMessage(Locale locale,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(locale, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(FacesContext, String, Object...)
+     * @param severity set a custom severity
+     */
+    public static FacesMessage getMessage(FacesContext context,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(context, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+   
+    /**
+     * <p>This version of getMessage() is used for localizing implementation
+     * specific messages.</p>
+     *
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+     public static FacesMessage getMessage(String messageId, 
+                                                 Object... params) {
+        Locale locale = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        // context.getViewRoot() may not have been initialized at this point.
+        if (context != null && context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        return getMessage(locale, messageId, params);
+    }
+
+     /**
+      * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+      *
+      * @param locale    - the target <code>Locale</code>
+      * @param messageId - the key of the message in the resource bundle
+      * @param params    - substittion parameters
+      *
+      * @return a localized <code>FacesMessage</code> with the severity
+      *  of FacesMessage.SEVERITY_ERROR
+      */
+     public static FacesMessage getMessage(Locale locale, 
+                                                 String messageId, 
+                                                 Object... params) {       
+        String summary = null;
+        String detail = null;       
+        ResourceBundle bundle;
+        String bundleName;
+
+        // see if we have a user-provided bundle
+        Application app = getApplication();
+	Class appClass = app.getClass();
+        if (null != (bundleName = app.getMessageBundle())) {
+            if (null != 
+                (bundle = 
+                    ResourceBundle.getBundle(bundleName, locale,
+				     getCurrentLoader(appClass)))) {
+                // see if we have a hit
+                try {
+                    summary = bundle.getString(messageId);
+                    detail = bundle.getString(messageId + "_detail");
+                }
+                catch (MissingResourceException e) {
+                    // ignore
+                }
+            }
+        }
+    
+        // we couldn't find a summary in the user-provided bundle
+        if (null == summary) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(FacesMessage.FACES_MESSAGES, 
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+                detail = bundle.getString(messageId + "_detail");
+            } catch (MissingResourceException e) {
+                // ignore
+            }
+        }
+
+        // no hit found in the standard javax.faces.Messages bundle.
+        // check the Mojarra resources
+        if (summary == null) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(MOJARRA_RESOURCE_BASENAME,
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+            } catch (MissingResourceException e) {
+                return null;
+            }
+        }
+
+        // At this point, we have a summary and a bundle.     
+        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
+        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
+        return (ret);
+    }
+
+
+    /**
+     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+    public static FacesMessage getMessage(FacesContext context, 
+                                                String messageId,
+                                                Object... params) {
+                                                
+        if (context == null || messageId == null ) {
+            throw new NullPointerException(" context " 
+                + context 
+                + " messageId " 
+                + messageId);
+        }
+        Locale locale;
+        // viewRoot may not have been initialized at this point.
+        if (context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        if (null == locale) {
+            throw new NullPointerException(" locale is null ");
+        }
+        
+        FacesMessage message = getMessage(locale, messageId, params);
+        if (message != null) {
+            return message;
+        }
+        locale = Locale.getDefault();
+        return (getMessage(locale, messageId, params));
+    }  
+                       
+
+    /**
+     * <p>Returns the <code>label</code> property from the specified
+     * component.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param component - the component of interest
+     *
+     * @return the label, if any, of the component
+     */
+    public static Object getLabel(FacesContext context, 
+                                        UIComponent component) {
+                                        
+        Object o = component.getAttributes().get("label");
+        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
+            o = component.getValueExpression("label");
+        }
+        // Use the "clientId" if there was no label specified.
+        if (o == null) {
+            o = component.getClientId(context);
+        }
+        return o;
+    }
+
+    protected static Application getApplication() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return (FacesContext.getCurrentInstance().getApplication());
+        }
+        ApplicationFactory afactory = (ApplicationFactory)
+            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return (afactory.getApplication());
+    }
+
+    protected static ClassLoader getCurrentLoader(Class fallbackClass) {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClassLoader();
+        }
+        return loader;
+    }
+
+    /**
+     * This class overrides FacesMessage to provide the evaluation
+     * of binding expressions in addition to Strings.
+     * It is often the case, that a binding expression may reference
+     * a localized property value that would be used as a 
+     * substitution parameter in the message.  For example:
+     *  <code>#{bundle.userLabel}</code>
+     * "bundle" may not be available until the page is rendered.
+     * The "late" binding evaluation in <code>getSummary</code> and 
+     * <code>getDetail</code> allow the expression to be evaluated
+     * when that property is available.
+     */
+    static class BindingFacesMessage extends FacesMessage {
+        BindingFacesMessage(
+            Locale locale,
+            String messageFormat,
+            String detailMessageFormat,
+            // array of parameters, both Strings and ValueBindings
+            Object[] parameters) {
+
+            super(messageFormat, detailMessageFormat);
+            this.locale = locale;
+            this.parameters = parameters;
+            if (parameters != null) {
+                resolvedParameters = new Object[parameters.length];
+            }
+        }
+
+        public String getSummary() {
+            String pattern = super.getSummary();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        public String getDetail() {
+            String pattern = super.getDetail();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        private void resolveBindings() {
+            FacesContext context = null;
+            if (parameters != null) {
+                for (int i = 0; i < parameters.length; i++) {
+                    Object o = parameters[i];
+                    if (o instanceof ValueBinding) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueBinding) o).getValue(context);
+                    }
+                    if (o instanceof ValueExpression) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueExpression) o).getValue(context.getELContext());
+                    }
+                    // to avoid 'null' appearing in message
+                    if (o == null) {
+                        o = "";
+                    }
+                    resolvedParameters[i] = o;
+                }
+            }
+        }
+
+        private String getFormattedString(String msgtext, Object[] params) {
+            String localizedStr = null;
+                                                                                
+            if (params == null || msgtext == null ) {
+                return msgtext;
+            }
+            StringBuffer b = new StringBuffer(100);
+            MessageFormat mf = new MessageFormat(msgtext);
+            if (locale != null) {
+                mf.setLocale(locale);
+                b.append(mf.format(params));
+                localizedStr = b.toString();
+            }
+            return localizedStr;
+        }
+
+        private Locale locale;
+        private Object[] parameters;
+        private Object[] resolvedParameters;
+    }
+    
+} // end of class MessageFactory
diff --git a/com/sun/faces/util/MessageUtils.java b/com/sun/faces/util/MessageUtils.java
new file mode 100644
index 0000000..1f414b4
--- /dev/null
+++ b/com/sun/faces/util/MessageUtils.java
@@ -0,0 +1,405 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import javax.faces.application.FacesMessage;
+
+import java.text.MessageFormat;
+
+/**
+ * <p>This class contains all message constants and utility methods
+ * for creating <code>FacesMessage</code> instances or localized 
+ * <code>String</code>s for said constants.</p> 
+ */
+public class MessageUtils {
+
+
+    // IMPORTANT - ensure that any new message constant is properly
+    // tested in test/com/sun/faces/util/TestUtil_messages (see comments
+    // in test class for details on the test).    
+
+    public static final String APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK_ID =
+          "com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK";
+    public static final String APPLICATION_ASSOCIATE_EXISTS_ID =
+          "com.sun.faces.APPLICATION_ASSOCIATE_EXISTS";
+    public static final String ASSERTION_FAILED_ID =
+          "com.sun.faces.ASSERTION_FAILED";
+    public static final String ATTRIBUTE_NOT_SUPORTED_ERROR_MESSAGE_ID =
+          "com.sun.faces.ATTRIBUTE_NOT_SUPORTED";
+    public static final String CANT_CLOSE_INPUT_STREAM_ID =
+          "com.sun.faces.CANT_CLOSE_INPUT_STREAM";
+    public static final String CANT_CONVERT_VALUE_ERROR_MESSAGE_ID =
+          "com.sun.faces.CANT_CONVERT_VALUE";
+    public static final String CANT_CREATE_CLASS_ERROR_ID =
+          "com.sun.faces.CANT_CREATE_CLASS_ERROR";
+    public static final String CANT_CREATE_LIFECYCLE_ERROR_MESSAGE_ID =
+          "com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR";
+    public static final String CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID =
+          "com.sun.faces.CANT_INSTANTIATE_CLASS";
+    public static final String CANT_INTROSPECT_CLASS_ERROR_MESSAGE_ID =
+          "com.sun.faces.CANT_INTROSPECT_CLASS";
+    public static final String CANT_LOAD_CLASS_ERROR_MESSAGE_ID =
+          "com.sun.faces.CANT_INSTANTIATE_CLASS";
+    public static final String CANT_PARSE_FILE_ERROR_MESSAGE_ID =
+          "com.sun.faces.CANT_PARSE_FILE";
+    public static final String CANT_WRITE_ID_ATTRIBUTE_ERROR_MESSAGE_ID =
+          "com.sun.faces.CANT_WRITE_ID_ATTRIBUTE";
+    public static final String CHILD_NOT_OF_EXPECTED_TYPE_ID =
+          "com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE";
+    public static final String COMMAND_LINK_NO_FORM_MESSAGE_ID =
+          "com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE";
+    public static final String COMPONENT_NOT_FOUND_ERROR_MESSAGE_ID =
+          "com.sun.faces.COMPONENT_NOT_FOUND_ERROR";
+    public static final String COMPONENT_NOT_FOUND_IN_VIEW_WARNING_ID =
+          "com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING";
+    public static final String CONTENT_TYPE_ERROR_MESSAGE_ID =
+          "com.sun.faces.CONTENT_TYPE_ERROR";
+    public static final String CONVERSION_ERROR_MESSAGE_ID =
+          "com.sun.faces.TYPECONVERSION_ERROR";
+    public static final String CYCLIC_REFERENCE_ERROR_ID =
+          "com.sun.faces.CYCLIC_REFERENCE_ERROR";
+    public static final String DUPLICATE_COMPONENT_ID_ERROR_ID =
+          "com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR";
+    public static final String EL_OUT_OF_BOUNDS_ERROR_ID =
+          "com.sun.faces.OUT_OF_BOUNDS_ERROR";
+    public static final String EL_PROPERTY_TYPE_ERROR_ID =
+          "com.sun.faces.PROPERTY_TYPE_ERROR";
+    public static final String EL_SIZE_OUT_OF_BOUNDS_ERROR_ID =
+          "com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR";
+    public static final String EMPTY_PARAMETER_ID =
+          "com.sun.faces.EMPTY_PARAMETER";
+    public static final String ENCODING_ERROR_MESSAGE_ID =
+          "com.sun.faces.ENCODING_ERROR";
+    public static final String ERROR_GETTING_VALUEREF_VALUE_ERROR_MESSAGE_ID =
+          "com.sun.faces.ERROR_GETTING_VALUEREF_VALUE";
+    public static final String ERROR_GETTING_VALUE_BINDING_ERROR_MESSAGE_ID =
+          "com.sun.faces.ERROR_GETTING_VALUE_BINDING";
+    public static final String ERROR_OPENING_FILE_ERROR_MESSAGE_ID =
+          "com.sun.faces.ERROR_OPENING_FILE";
+    public static final String ERROR_PROCESSING_CONFIG_ID =
+         "com.sun.faces.ERROR_PROCESSING_CONFIG";
+    public static final String ERROR_REGISTERING_DTD_ERROR_MESSAGE_ID =
+          "com.sun.faces.ERROR_REGISTERING_DTD";
+    public static final String ERROR_SETTING_BEAN_PROPERTY_ERROR_MESSAGE_ID =
+          "com.sun.faces.ERROR_SETTING_BEAN_PROPERTY";
+    public static final String EVAL_ATTR_UNEXPECTED_TYPE =
+          "com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE";
+    public static final String FACES_CONTEXT_CONSTRUCTION_ERROR_MESSAGE_ID =
+          "com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR";
+    public static final String FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED_ID =
+          "com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED";
+    public static final String FACES_SERVLET_MAPPING_INCORRECT_ID = 
+          "com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT";
+    public static final String FACES_CONTEXT_NOT_FOUND_ID=
+          "com.sun.faces.FACES_CONTEXT_NOT_FOUND";
+    public static final String FILE_NOT_FOUND_ERROR_MESSAGE_ID =
+          "com.sun.faces.FILE_NOT_FOUND";
+    public static final String ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID =
+          "com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT";    
+    public static final String ILLEGAL_CHARACTERS_ERROR_MESSAGE_ID =
+          "com.sun.faces.ILLEGAL_CHARACTERS_ERROR";
+    public static final String ILLEGAL_IDENTIFIER_LVALUE_MODE_ID =
+          "com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE";
+    public static final String ILLEGAL_MODEL_REFERENCE_ID =
+          "com.sun.faces.ILLEGAL_MODEL_REFERENCE";
+    public static final String ILLEGAL_VIEW_ID_ID =
+          "com.sun.faces.ILLEGAL_VIEW_ID";
+    public static final String INCORRECT_JSP_VERSION_ID =
+          "com.sun.faces.INCORRECT_JSP_VERSION";
+    public static final String INVALID_EXPRESSION_ID =
+          "com.sun.faces.INVALID_EXPRESSION";
+    public static final String INVALID_INIT_PARAM_ERROR_MESSAGE_ID =
+          "com.sun.faces.INVALID_INIT_PARAM";
+    public static final String INVALID_MESSAGE_SEVERITY_IN_CONFIG_ID =
+          "com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG";
+    public static final String INVALID_SCOPE_LIFESPAN_ERROR_MESSAGE_ID =
+          "com.sun.faces.INVALID_SCOPE_LIFESPAN";
+    public static final String LIFECYCLE_ID_ALREADY_ADDED_ID =
+          "com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED";
+    public static final String LIFECYCLE_ID_NOT_FOUND_ERROR_MESSAGE_ID =
+          "com.sun.faces.LIFECYCLE_ID_NOT_FOUND";
+    public static final String MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY_ID =
+          "com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY";    
+    public static final String MANAGED_BEAN_EXISTING_VALUE_NOT_LIST_ID =
+          "com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST";
+    public static final String MANAGED_BEAN_TYPE_CONVERSION_ERROR_ID =
+          "com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR";
+    public static final String MANAGED_BEAN_CLASS_NOT_FOUND_ERROR_ID =
+          "com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR";
+    public static final String MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR";
+    public static final String MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR";
+    public static final String MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR";
+    public static final String MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR";
+    public static final String MANAGED_BEAN_INJECTION_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_INJECTION_ERROR";
+    public static final String MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR";
+    public static final String MANAGED_BEAN_AS_LIST_CONFIG_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR";
+    public static final String MANAGED_BEAN_AS_MAP_CONFIG_ERROR_ID = 
+         "com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR";
+    public static final String MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR";
+    public static final String MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR";
+    public static final String MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR";
+    public static final String MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR";
+    public static final String MANAGED_BEAN_INTROSPECTION_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR";
+    public static final String MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR";
+    public static final String MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ID =
+         "com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR";
+    public static final String MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR";
+    public static final String MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR_ID = 
+         "com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR";
+    public static final String MANAGED_BEAN_LIST_GETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR";
+    public static final String MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR_ID = 
+         "com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR";
+    public static final String MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR";
+    public static final String MANAGED_BEAN_PROBLEMS_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR";
+    public static final String MANAGED_BEAN_PROBLEMS_STARTUP_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR";
+    public static final String MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR";
+    public static final String MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR_ID =
+         "com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR";
+    public static final String MANAGED_BEAN_INVALID_SCOPE_ERROR_ID =
+          "com.sun.faces.MANAGED_BEAN_INVALID_SCOPE";
+    public static final String MAXIMUM_EVENTS_REACHED_ERROR_MESSAGE_ID =
+          "com.sun.faces.MAXIMUM_EVENTS_REACHED";
+    public static final String MISSING_CLASS_ERROR_MESSAGE_ID =
+          "com.sun.faces.MISSING_CLASS_ERROR";
+    public static final String MISSING_RESOURCE_ERROR_MESSAGE_ID =
+          "com.sun.faces.MISSING_RESOURCE_ERROR";
+    public static final String MODEL_UPDATE_ERROR_MESSAGE_ID =
+          "com.sun.faces.MODELUPDATE_ERROR";
+    public static final String NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID =
+          "com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR";
+    public static final String NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID =
+          "com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR";
+    public static final String NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID =
+          "com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR";
+    public static final String NOT_NESTED_IN_UICOMPONENT_TAG_ERROR_MESSAGE_ID =
+          "com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR";
+    public static final String NO_DTD_FOUND_ERROR_ID =
+          "com.sun.faces.NO_DTD_FOUND_ERROR";
+    public static final String NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG_MESSAGE_ID =
+          "com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG";
+    public static final String NULL_BODY_CONTENT_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_BODY_CONTENT_ERROR";
+    public static final String NULL_COMPONENT_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_COMPONENT_ERROR";
+    public static final String NULL_CONFIGURATION_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_CONFIGURATION";
+    public static final String NULL_CONTEXT_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_CONTEXT_ERROR";
+    public static final String NULL_EVENT_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_EVENT_ERROR";
+    public static final String NULL_FORVALUE_ID =
+          "com.sun.faces.NULL_FORVALUE";
+    public static final String NULL_HANDLER_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_HANDLER_ERROR";
+    public static final String NULL_LOCALE_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_LOCALE_ERROR";
+    public static final String NULL_MESSAGE_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_MESSAGE_ERROR";
+    public static final String NULL_PARAMETERS_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_PARAMETERS_ERROR";
+    public static final String NULL_REQUEST_VIEW_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_REQUEST_VIEW_ERROR";
+    public static final String NULL_RESPONSE_STREAM_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_RESPONSE_STREAM_ERROR";
+    public static final String NULL_RESPONSE_VIEW_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_RESPONSE_VIEW_ERROR";
+    public static final String NULL_RESPONSE_WRITER_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_RESPONSE_WRITER_ERROR";
+    public static final String NULL_VIEW_ID_ERROR_MESSAGE_ID =
+          "com.sun.faces.NULL_VIEW_ID";
+    public static final String OBJECT_CREATION_ERROR_ID =
+          "com.sun.faces.OBJECT_CREATION_ERROR";
+    public static final String OBJECT_IS_READONLY =
+          "com.sun.faces.OBJECT_IS_READONLY";
+    public static final String PHASE_ID_OUT_OF_BOUNDS_ERROR_MESSAGE_ID =
+          "com.sun.faces.PHASE_ID_OUT_OF_BOUNDS";
+    public static final String RENDERER_NOT_FOUND_ERROR_MESSAGE_ID =
+          "com.sun.faces.RENDERER_NOT_FOUND";
+    public static final String REQUEST_VIEW_ALREADY_SET_ERROR_MESSAGE_ID =
+          "com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR";
+    public static final String RESTORE_VIEW_ERROR_MESSAGE_ID =
+          "com.sun.faces.RESTORE_VIEW_ERROR";
+    public static final String SAVING_STATE_ERROR_MESSAGE_ID =
+          "com.sun.faces.SAVING_STATE_ERROR";
+    public static final String SUPPORTS_COMPONENT_ERROR_MESSAGE_ID =
+          "com.sun.faces.SUPPORTS_COMPONENT_ERROR";
+    public static final String VALIDATION_COMMAND_ERROR_ID =
+          "com.sun.faces.VALIDATION_COMMAND_ERROR";
+    public static final String VALIDATION_EL_ERROR_ID =
+          "com.sun.faces.VALIDATION_EL_ERROR";
+    public static final String VALIDATION_ID_ERROR_ID =
+          "com.sun.faces.VALIDATION_ID_ERROR";   
+    public static final String VALUE_NOT_SELECT_ITEM_ID =
+          "com.sun.faces.OPTION_NOT_SELECT_ITEM";
+    public static final String CANNOT_CONVERT_ID =
+          "com.sun.faces.CANNOT_CONVERT";
+    public static final String CANNOT_VALIDATE_ID =
+          "com.sun.faces.CANNOT_VALIDATE";
+    public static final String VERIFIER_CLASS_NOT_FOUND_ID =
+           "com.sun.faces.verifier.CLASS_NOT_FOUND";
+    public static final String VERIFIER_CLASS_MISSING_DEP_ID =
+            "com.sun.faces.verifier.CLASS_MISSING_DEP";
+    public static final String VERIFIER_CTOR_NOT_PUBLIC_ID =
+            "com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR";
+    public static final String VERIFIER_NO_DEF_CTOR_ID =
+            "com.sun.faces.verifier.NO_DEF_CTOR";
+    public static final String VERIFIER_WRONG_TYPE_ID =
+            "com.sun.faces.verifier.WRONG_TYPE";
+    public static final String RENDERER_CANNOT_BE_REGISTERED_ID =
+          "com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT";
+    public static final String COMMAND_NOT_NESTED_WITHIN_FORM_ID =
+          "com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM";
+    public static final String NAVIGATION_NO_MATCHING_OUTCOME_ID =
+          "com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME";
+    public static final String NAVIGATION_NO_MATCHING_OUTCOME_ACTION_ID =
+          "com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION";
+    public static final String NAVIGATION_INVALID_QUERY_STRING_ID =
+          "com.sun.faces.NAVIGATION_INVALID_QUERY_STRING";
+	public static final String OUTCOME_TARGET_BUTTON_NO_MATCH =
+		  "com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH";
+	public static final String OUTCOME_TARGET_LINK_NO_MATCH =
+		  "com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH";
+    public static final String NO_RESOURCE_TARGET_AVAILABLE =
+          "com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE";
+    public static final String INVALID_RESOURCE_FORMAT_COLON_ERROR =
+          "com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR";
+    public static final String INVALID_RESOURCE_FORMAT_NO_LIBRARY_NAME_ERROR =
+          "com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR";
+    public static final String INVALID_RESOURCE_FORMAT_ERROR =
+          "com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR";
+    public static final String ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR =
+          "com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR";
+    public static final String PARTIAL_STATE_ERROR_RESTORING_ID =
+          "com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT";
+   
+    
+    public static final String JS_RESOURCE_WRITING_ERROR_ID =
+        "com.sun.faces.JS_RESOURCE_WRITING_ERROR";
+    public static final String MISSING_COMPONENT_ATTRIBUTE_VALUE =
+            "com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE";
+    public static final String MISSING_COMPONENT_FACET =
+            "com.sun.faces.MISSING_COMPONENT_FACET";
+    public static final String MISSING_COMPONENT_METADATA =
+            "com.sun.faces.MISSING_COMPONENT_METADATA";
+    public static final String MISSING_FORM_ERROR =
+        "com.sun.faces.MISSING_FORM_ERROR";
+    public static final String MISSING_METADATA_ERROR =
+        "com.sun.faces.MISSING_METADATA_ERROR";
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private MessageUtils() {}
+
+
+    // ---------------------------------------------------------- Public Methods
+    
+
+    /**
+     * <p>Creates a new <code>FacesMessage</code> instance using the
+     * specified #messageId.</p>
+     * 
+     * @param messageId the message ID
+     * @param params an array of substitution parameters
+     * @return a new <code>FacesMessage</code> based on the provided
+     *  <code>messageId</code>
+     */
+    public static FacesMessage getExceptionMessage(
+          String messageId,
+          Object... params) {
+
+        return MessageFactory.getMessage(messageId, params);
+
+    }    
+
+
+    /**
+     * <p>Returns the localized message for the specified 
+     * #messageId.</p>
+     * 
+     * @param messageId the message ID
+     * @param params an array of substitution parameters
+     * @return the localized message for the specified 
+     *  <code>messageId</code>
+     */
+    public static String getExceptionMessageString(
+          String messageId,
+          Object... params) {
+
+        String result = null;
+
+        FacesMessage message = MessageFactory.getMessage(messageId, params);
+        if (null != message) {
+            result = message.getSummary();
+        }
+
+
+        if (null == result) {
+            result = "null MessageFactory";
+        } else {
+            if (params != null) {
+                result = MessageFormat.format(result, params);
+            }
+        }
+        return result;
+
+    }
+
+} // END MessageUtils
diff --git a/com/sun/faces/util/MetadataWrapperMap.java b/com/sun/faces/util/MetadataWrapperMap.java
new file mode 100644
index 0000000..e0e8596
--- /dev/null
+++ b/com/sun/faces/util/MetadataWrapperMap.java
@@ -0,0 +1,115 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2011 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+public abstract class MetadataWrapperMap<K, V> implements Map<K, V> {
+
+    public MetadataWrapperMap(Map<K, V> toWrap) {
+        this.wrapped = toWrap;
+        metadata = new ConcurrentHashMap<K, Map<Object, Object>>();
+    }
+
+    protected Map<K, Map<Object, Object>> getMetadata() {
+        return metadata;
+    }
+
+    private Map<K, V> wrapped;
+    private Map<K, Map<Object, Object>> metadata;
+
+    public void clear() {
+	this.wrapped.clear();
+    }
+
+    @SuppressWarnings(value="")
+    public boolean containsKey(Object key) {
+	return this.wrapped.containsKey(key);
+    }
+
+    @SuppressWarnings(value="")
+    public boolean containsValue(Object value) {
+	return this.wrapped.containsValue(value);
+    }
+
+    public Set<Map.Entry<K,V>> entrySet() {
+	return this.wrapped.entrySet();
+    }
+
+    @SuppressWarnings(value="")
+    public V get(Object key) {
+	return this.wrapped.get(key);
+    }
+
+
+    public boolean isEmpty() {
+	return this.wrapped.isEmpty();
+    }
+
+    public Set<K> keySet() {
+	return this.wrapped.keySet();
+    }
+
+    public V put(K key, V value) {
+        this.onPut(key, value);
+        return this.wrapped.put(key, value);
+    }
+
+    protected abstract V onPut(K key, V value);
+
+    public void putAll(Map m) {
+	this.wrapped.putAll(m);
+    }
+
+    @SuppressWarnings(value="")
+    public V remove(Object key) {
+	return this.wrapped.remove(key);
+    }
+
+    public int size() {
+	return this.wrapped.size();
+    }
+
+    public Collection<V> values() {
+	return this.wrapped.values();
+    }
+
+
+}
diff --git a/com/sun/faces/util/MojarraThreadFactory.java b/com/sun/faces/util/MojarraThreadFactory.java
new file mode 100644
index 0000000..2d027c9
--- /dev/null
+++ b/com/sun/faces/util/MojarraThreadFactory.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.ThreadFactory;
+
+public class MojarraThreadFactory implements ThreadFactory {
+
+    static final AtomicInteger poolNumber = new AtomicInteger(1);
+    final ThreadGroup group;
+    final AtomicInteger threadNumber = new AtomicInteger(1);
+    final String namePrefix;
+
+
+    // -------------------------------------------------------- Constructors
+
+
+    public MojarraThreadFactory(String factoryName) {
+
+        SecurityManager s = System.getSecurityManager();
+        group = (s != null) ? s.getThreadGroup() :
+                Thread.currentThread().getThreadGroup();
+        namePrefix = "Mojarra-" + factoryName + '-' +
+                     poolNumber.getAndIncrement() +
+                     "-thread-";
+
+    }
+
+
+    // ------------------------------------------ Methods from ThreadFactory
+
+    
+    public Thread newThread(Runnable r) {
+
+        Thread t = new Thread(group,
+                              r,
+                              namePrefix + threadNumber.getAndIncrement());
+        t.setDaemon(true);
+        if (t.getPriority() != Thread.NORM_PRIORITY) {
+            t.setPriority(Thread.NORM_PRIORITY);
+        }
+        return t;
+
+    }
+
+} // END MojarraThreadFactory
diff --git a/com/sun/faces/util/MostlySingletonSet.java b/com/sun/faces/util/MostlySingletonSet.java
new file mode 100644
index 0000000..13bff2d
--- /dev/null
+++ b/com/sun/faces/util/MostlySingletonSet.java
@@ -0,0 +1,353 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.util;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/*
+ * Non-thread safe implementation of Set for use when most of the time there
+ * is only one element, but sometimes there are more than one.
+ * 
+ */
+public class MostlySingletonSet<E> implements Set<E>, Serializable {
+    
+    private static final long serialVersionUID = 2818326518724772145L;
+    
+    private Set<E> inner;
+    
+    public MostlySingletonSet() {
+        
+    }
+    
+    // <editor-fold defaultstate="collapsed" desc="Mutating methods">
+
+    @Override
+    public boolean add(E e) {
+        boolean result = true;
+        if (null == inner) {
+            inner = Collections.singleton(e);
+        } else {
+            // If we need to transition from one to more-than-one
+            if (1 == inner.size()) {
+                HashSet<E> newSet = new HashSet<E>();
+                newSet.add(inner.iterator().next());
+                inner = newSet;
+            }
+            result = inner.add(e);
+        }
+        
+        return result;
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends E> c) {
+        boolean result = true;
+        
+        if (null == inner && 1 == c.size()) {
+            inner = (Set<E>) Collections.singleton(c.iterator().next());
+        } else {
+            // If we need to transition from one to more-than-one
+            if (1 == inner.size()) {
+                HashSet<E> newSet = new HashSet<E>();
+                newSet.add(inner.iterator().next());
+                inner = newSet;
+            }
+            result = inner.addAll(c);
+        }
+        return result;
+    }
+
+    @Override
+    public void clear() {
+        if (null != inner) {
+            // If we need to transition from more-than-one to zero
+            if (1 < inner.size()) {
+                inner.clear();
+            }
+            inner = null;
+        }
+    }
+    
+    
+    @Override
+    public boolean remove(Object o) {
+        boolean didRemove = false;
+        
+        if (null != inner) {
+            if (1 == inner.size()) {
+                // If we need to transition from one to zero
+                E e = inner.iterator().next();
+                // If our element is not null, and the argument is not null
+                if (null != e && null != o) {
+                    didRemove = e.equals(o);
+                } else {
+                    didRemove = null == o;
+                }
+                if (didRemove) {
+                    inner = null;
+                }
+                
+            } else {
+                didRemove = inner.remove(o);
+                if (didRemove && 1 == inner.size()) {
+                    Set<E> newInner = Collections.singleton(inner.iterator().next());
+                    inner.clear();
+                    inner = newInner;
+                }
+            }
+            
+            
+        }
+        
+        return didRemove;
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c) {
+        boolean result = false;
+        
+        if (null != inner) {
+            if (1 == inner.size()) {
+                // May throw NPE per spec for Collection.removeAll()
+                Iterator incomingIter = c.iterator();
+                E oneAndOnlyElement = inner.iterator().next();
+                // Iterate over the incoming collection
+                // looking for a member that is equal to our one and only
+                // element.
+                while (incomingIter.hasNext()) {
+                    Object cur = incomingIter.next();
+                    if (null != oneAndOnlyElement) {
+                        // This handles null == cur.
+                        if (result = oneAndOnlyElement.equals(cur)) {
+                            break;
+                        } 
+                    } else {
+                        // oneAndOnlyElement is null
+                        if (result = cur == null) {
+                            break;
+                        }
+                    }
+                }
+                if (result) {
+                    inner = null;
+                }
+            } else {
+                result = inner.removeAll(c);
+                if (result && 0 == inner.size()) {
+                    inner = null;
+                }
+                
+            }
+        }
+        
+        return result;
+    }
+
+    @Override
+    public boolean retainAll(Collection<?> c) {
+        boolean didModify = false;
+        
+        if (null != inner) {
+            if (1 == inner.size()) {
+                Iterator incomingIter = c.iterator();
+                E oneAndOnlyElement = inner.iterator().next();
+                // Iterate over the incoming collection
+                // looking for a member that is equal to our one and only
+                // element.  If found, we take no action, otherwise
+                // we remove the oneAndOnlyElement.
+                boolean found = false;
+                while (incomingIter.hasNext()) {
+                    Object cur = incomingIter.next();
+                    if (null != oneAndOnlyElement) {
+                        if (found = oneAndOnlyElement.equals(cur)) {
+                            break;
+                        }
+                    } else {
+                        if (found = cur == null) {
+                            break;
+                        }
+                    }
+                }
+                if (didModify = !found) {
+                    inner = null;
+                }
+                
+            } else {
+                didModify = inner.retainAll(c);
+            }
+        }
+        
+        return didModify;
+    }
+
+    // </editor-fold>
+
+    // <editor-fold defaultstate="collapsed" desc="Non-mutating methods">
+    
+    @Override
+    public boolean contains(Object o) {
+        boolean result = false;
+        
+        if (null != inner) {
+            result = inner.contains(o);
+        }
+        
+        return result;
+    }
+
+    @Override
+    public boolean containsAll(Collection<?> c) {
+        boolean result = false;
+        
+        if (null != inner) {
+            result = inner.containsAll(c);
+        }
+        
+        return result;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        boolean result = true;
+        
+        if (null != inner) {
+            result = inner.isEmpty();
+        }
+        
+        return result;
+    }
+
+
+    @Override
+    public int size() {
+        int size = 0;
+        if (null != inner) {
+            size = inner.size();
+        }
+        return size;
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        boolean result = false;
+        if (obj != null) {
+            if (obj instanceof MostlySingletonSet) {
+                final MostlySingletonSet<E> other = (MostlySingletonSet<E>) obj;
+                if (this.inner != other.inner && (this.inner == null || !this.inner.equals(other.inner))) {
+                    result = false;
+                } else {
+                    result = true;
+                }
+            } else if (obj instanceof Collection) {
+                Collection otherCollection = (Collection) obj;
+                
+                if (null != inner) {
+                    result = inner.equals(otherCollection);
+                } else {
+                    result = otherCollection.isEmpty();
+                }
+                
+            } 
+        }
+        return result;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 83 * hash + (this.inner != null ? this.inner.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public String toString() {
+        String result = "empty";
+        if (null != inner) {
+            result = inner.toString();
+        }
+        return result;
+    }
+    
+    
+    
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="Iteration and array">
+
+    @Override
+    public Iterator<E> iterator() {
+        Iterator<E> result;
+
+        if (null != inner) {
+            result = inner.iterator();
+        } else {
+            result = Collections.EMPTY_SET.iterator();
+        }
+        
+        return result;
+    }
+
+    @Override
+    public Object[] toArray() {
+        Object [] result = null;
+        if (null != inner) {
+            result = inner.toArray();
+        }
+        return result;
+    }
+
+    @Override
+    public <T> T[] toArray(T[] a) {
+        T [] result = null;
+        if (null != inner) {
+            result = inner.toArray(a);
+        }
+        return result;
+    }
+    
+    // </editor-fold>
+    
+}
diff --git a/com/sun/faces/util/MultiKeyConcurrentHashMap.java b/com/sun/faces/util/MultiKeyConcurrentHashMap.java
new file mode 100644
index 0000000..95652eb
--- /dev/null
+++ b/com/sun/faces/util/MultiKeyConcurrentHashMap.java
@@ -0,0 +1,1216 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * This code is based off the source for ConcurrentHashMap from JDK 5 with the
+ * ability of mapping multiple keys to a single value.
+ *
+ * <ul>
+ *   <li>
+ *     This Map implemenation does not support iteration through keys
+ *     and/or values.
+ *   <li>
+ *   <li>
+ *     This Map implementation is <em>NOT</em> Serialziable.
+ *   <li>
+ *   <li>
+ *     This cannot be cast as a general Map implementation.
+ *   </li>
+ * </ul>
+ */
+public class MultiKeyConcurrentHashMap<K, V> {
+
+    /*
+     * The basic strategy is to subdivide the table among Segments,
+     * each of which itself is a concurrently readable hash table.
+     */
+
+    /* ---------------- Constants -------------- */
+
+    /**
+     * The default initial number of table slots for this table. Used when not
+     * otherwise specified in constructor.
+     */
+    static int DEFAULT_INITIAL_CAPACITY = 16;
+
+    /**
+     * The maximum capacity, used if a higher value is implicitly specified by
+     * either of the constructors with arguments.  MUST be a power of two <=
+     * 1<<30 to ensure that entries are indexible using ints.
+     */
+    static final int MAXIMUM_CAPACITY = 1 << 30;
+
+    /**
+     * The default load factor for this table.  Used when not otherwise
+     * specified in constructor.
+     */
+    static final float DEFAULT_LOAD_FACTOR = 0.75f;
+
+    /**
+     * The default number of concurrency control segments.
+     */
+    static final int DEFAULT_SEGMENTS = 16;
+
+    /**
+     * The maximum number of segments to allow; used to bound constructor
+     * arguments.
+     */
+    static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
+
+    /**
+     * Number of unsynchronized retries in size and containsValue methods before
+     * resorting to locking. This is used to avoid unbounded retries if tables
+     * undergo continuous modification which would make it impossible to obtain
+     * an accurate result.
+     */
+    static final int RETRIES_BEFORE_LOCK = 2;
+
+    /* ---------------- Fields -------------- */
+
+    /**
+     * Mask value for indexing into segments. The upper bits of a key's hash
+     * code are used to choose the segment.
+     */
+    final int segmentMask;
+
+    /**
+     * Shift value for indexing within segments.
+     */
+    final int segmentShift;
+
+    /**
+     * The segments, each of which is a specialized hash table
+     */
+    final Segment[] segments;
+
+
+    /* ---------------- Small Utilities -------------- */
+
+    /**
+     * Returns a hash code for non-null Objects. Uses the same hash code
+     * spreader as most other java.util hash tables.
+     *
+     * @return the hash code
+     */
+    static int hash(Object x1, Object x2, Object x3, Object x4) {
+        int h = 0;
+        // xor one or Object hashcodes
+        h ^= x1.hashCode();
+        if (x2 != null) {
+            h ^= x2.hashCode();
+        }
+        if (x3 != null) {
+            h ^= x3.hashCode();
+        }
+        if (x4 != null) {
+            h ^= x4.hashCode();
+        }
+        // the following is the standard hashing algorithm included
+        // in the original source
+        h += ~(h << 9);
+        h ^= (h >>> 14);
+        h += (h << 4);
+        h ^= (h >>> 10);
+        return h;
+    }
+
+
+    /**
+     * Returns the segment that should be used for key with given hash
+     *
+     * @param hash the hash code for the key
+     *
+     * @return the segment
+     */
+    final Segment<K, V> segmentFor(int hash) {
+        //noinspection unchecked
+        return (Segment<K, V>) segments[(hash >>> segmentShift) & segmentMask];
+    }
+
+    /* ---------------- Inner Classes -------------- */
+
+    /**
+     * ConcurrentHashMap list entry. Note that this is never exported out as a
+     * user-visible Map.Entry.
+     * <p/>
+     * Because the value field is volatile, not final, it is legal wrt the Java
+     * Memory Model for an unsynchronized reader to see null instead of initial
+     * value when read via a data race.  Although a reordering leading to this
+     * is not likely to ever actually occur, the Segment.readValueUnderLock
+     * method is used as a backup in case a null (pre-initialized) value is ever
+     * seen in an unsynchronized access method.
+     */
+    static final class HashEntry<K, V> {
+        final K key1;
+        final K key2;
+        final K key3;
+        final K key4;
+        final int hash;
+        volatile V value;
+        final HashEntry<K, V> next;
+
+        HashEntry(K key1,
+                  K key2,
+                  K key3,
+                  K key4,
+                  int hash,
+                  HashEntry<K, V> next,
+                  V value) {
+            this.key1 = key1;
+            this.key2 = key2;
+            this.key3 = key3;
+            this.key4 = key4;
+            this.hash = hash;
+            this.next = next;
+            this.value = value;
+        }
+    }
+
+    /**
+     * Segments are specialized versions of hash tables.  This subclasses from
+     * ReentrantLock opportunistically, just to simplify some locking and avoid
+     * separate construction.
+     */
+    @SuppressWarnings({"serial"})
+    static final class Segment<K, V> extends ReentrantLock {
+        /*
+         * Segments maintain a table of entry lists that are ALWAYS
+         * kept in a consistent state, so can be read without locking.
+         * Next fields of nodes are immutable (final).  All list
+         * additions are performed at the front of each bin. This
+         * makes it easy to check changes, and also fast to traverse.
+         * When nodes would otherwise be changed, new nodes are
+         * created to replace them. This works well for hash tables
+         * since the bin lists tend to be short. (The average length
+         * is less than two for the default load factor threshold.)
+         *
+         * Read operations can thus proceed without locking, but rely
+         * on selected uses of volatiles to ensure that completed
+         * write operations performed by other threads are
+         * noticed. For most purposes, the "count" field, tracking the
+         * number of elements, serves as that volatile variable
+         * ensuring visibility.  This is convenient because this field
+         * needs to be read in many read operations anyway:
+         *
+         *   - All (unsynchronized) read operations must first read the
+         *     "count" field, and should not look at table entries if
+         *     it is 0.
+         *
+         *   - All (synchronized) write operations should write to
+         *     the "count" field after structurally changing any bin.
+         *     The operations must not take any action that could even
+         *     momentarily cause a concurrent read operation to see
+         *     inconsistent data. This is made easier by the nature of
+         *     the read operations in Map. For example, no operation
+         *     can reveal that the table has grown but the threshold
+         *     has not yet been updated, so there are no atomicity
+         *     requirements for this with respect to reads.
+         *
+         * As a guide, all critical volatile reads and writes to the
+         * count field are marked in code comments.
+         */
+
+        /**
+         * The number of elements in this segment's region.
+         */
+        volatile int count;
+
+        /**
+         * Number of updates that alter the size of the table. This is used
+         * during bulk-read methods to make sure they see a consistent snapshot:
+         * If modCounts change during a traversal of segments computing size or
+         * checking containsValue, then we might have an inconsistent view of
+         * state so (usually) must retry.
+         */
+        int modCount;
+
+        /**
+         * The table is rehashed when its size exceeds this threshold. (The
+         * value of this field is always (int)(capacity * loadFactor).)
+         */
+        int threshold;
+
+        /**
+         * The per-segment table. Declared as a raw type, casted to
+         * HashEntry<K,V> on each use.
+         */
+        @SuppressWarnings({"NonSerializableFieldInSerializableClass"})
+        volatile HashEntry[] table;
+
+        /**
+         * The load factor for the hash table.  Even though this value is same
+         * for all segments, it is replicated to avoid needing links to outer
+         * object.
+         *
+         * @serial
+         */
+        final float loadFactor;
+
+        Segment(int initialCapacity, float lf) {
+            loadFactor = lf;
+            setTable(new HashEntry[initialCapacity]);
+        }
+
+        /**
+         * Set table to new HashEntry array. Call only while holding lock or in
+         * constructor.
+         */
+        void setTable(HashEntry[] newTable) {
+            threshold = (int) (newTable.length * loadFactor);
+            table = newTable;
+        }
+
+        /**
+         * Return properly casted first entry of bin for given hash
+         */
+        HashEntry<K, V> getFirst(int hash) {
+            HashEntry[] tab = table;
+            //noinspection unchecked
+            return (HashEntry<K, V>) tab[hash & (tab.length - 1)];
+        }
+
+        /**
+         * Read value field of an entry under lock. Called if value field ever
+         * appears to be null. This is possible only if a compiler happens to
+         * reorder a HashEntry initialization with its table assignment, which
+         * is legal under memory model but is not known to ever occur.
+         */
+        V readValueUnderLock(HashEntry<K, V> e) {
+            lock();
+            try {
+                return e.value;
+            } finally {
+                unlock();
+            }
+        }
+
+        /* Specialized implementations of map methods */
+
+        V get(Object key1, Object key2, Object key3, Object key4, int hash) {
+            if (count != 0) { // read-volatile
+                HashEntry<K, V> e = getFirst(hash);
+                while (e != null) {
+                    if ((e.hash == hash && key1.equals(e.key1))
+                        && ((key2 == null && e.key2 == null) || (key2 != null && key2.equals(e.key2)))
+                        && ((key3 == null && e.key3 == null) || (key3 != null && key3.equals(e.key3)))
+                        && ((key4 == null && e.key4 == null) || (key4 != null && key4.equals(e.key4)))) {
+                        V v = e.value;
+                        if (v != null) {
+                            return v;
+                        }
+                        return readValueUnderLock(e); // recheck
+                    }
+                    e = e.next;
+                }
+            }
+            return null;
+        }
+
+        boolean containsKey(Object key1,
+                            Object key2,
+                            Object key3,
+                            Object key4,
+                            int hash) {
+            if (count != 0) { // read-volatile
+                HashEntry<K, V> e = getFirst(hash);
+                while (e != null) {
+                    if ((e.hash == hash && key1.equals(e.key1))
+                        && ((key2 == null && e.key2 == null) || (key2 != null && key2.equals(e.key2)))
+                        && ((key3 == null && e.key3 == null) || (key3 != null && key3.equals(e.key3)))
+                        && ((key4 == null && e.key4 == null) || (key4 != null && key4.equals(e.key4)))) {
+                        return true;
+                    }
+                    e = e.next;
+                }
+            }
+            return false;
+        }
+
+        boolean containsValue(Object value) {
+            if (count != 0) { // read-volatile
+                HashEntry[] tab = table;
+                int len = tab.length;
+                for (int i = 0; i < len; i++) {
+                    for (//noinspection unchecked
+                          HashEntry<K, V> e = (HashEntry<K, V>) tab[i];
+                         e != null;
+                         e = e.next) {
+                        V v = e.value;
+                        if (v == null) // recheck
+                        {
+                            v = readValueUnderLock(e);
+                        }
+                        if (value.equals(v)) {
+                            return true;
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+
+        boolean replace(K key1,
+                        K key2,
+                        K key3,
+                        K key4,
+                        int hash,
+                        V oldValue,
+                        V newValue) {
+            lock();
+            try {
+                HashEntry<K, V> e = getFirst(hash);
+                while (e != null && (e.hash != hash
+                                     || key1 != null && !key1.equals(e.key1)
+                                     || key2 != null && !key2.equals(e.key2)
+                                     || key3 != null && !key3.equals(e.key3)
+                                     || key4 != null && !key4.equals(e.key4))) {
+                    e = e.next;
+                }
+
+                boolean replaced = false;
+                if (e != null && oldValue.equals(e.value)) {
+                    replaced = true;
+                    e.value = newValue;
+                }
+                return replaced;
+            } finally {
+                unlock();
+            }
+        }
+
+        V replace(K key1, K key2, K key3, K key4, int hash, V newValue) {
+            lock();
+            try {
+                HashEntry<K, V> e = getFirst(hash);
+                while (e != null && (e.hash != hash
+                                     || key1 != null && !key1.equals(e.key1)
+                                     || key2 != null && !key2.equals(e.key2)
+                                     || key3 != null && !key3.equals(e.key3)
+                                     || key4 != null && !key4.equals(e.key4))) {
+                    e = e.next;
+                }
+
+                V oldValue = null;
+                if (e != null) {
+                    oldValue = e.value;
+                    e.value = newValue;
+                }
+                return oldValue;
+            } finally {
+                unlock();
+            }
+        }
+
+
+        V put(K key1,
+              K key2,
+              K key3,
+              K key4,
+              int hash,
+              V value,
+              boolean onlyIfAbsent) {
+            lock();
+            try {
+                int c = count;
+                if (c++ > threshold) // ensure capacity
+                {
+                    rehash();
+                }
+                HashEntry[] tab = table;
+                int index = hash & (tab.length - 1);
+                //noinspection unchecked
+                HashEntry<K, V> first = (HashEntry<K, V>) tab[index];
+                HashEntry<K, V> e = first;
+                while (e != null && (e.hash != hash
+                                     || key1 != null && !key1.equals(e.key1)
+                                     || key2 != null && !key2.equals(e.key2)
+                                     || key3 != null && !key3.equals(e.key3)
+                                     || key4 != null && !key4.equals(e.key4))) {
+                    e = e.next;
+                }
+
+                V oldValue;
+                if (e != null) {
+                    oldValue = e.value;
+                    if (!onlyIfAbsent) {
+                        e.value = value;
+                    }
+                } else {
+                    oldValue = null;
+                    ++modCount;
+                    tab[index] =
+                          new HashEntry<K, V>(key1, key2, key3, key4, hash, first, value);
+                    count = c; // write-volatile
+                }
+                return oldValue;
+            } finally {
+                unlock();
+            }
+        }
+
+        void rehash() {
+            HashEntry[] oldTable = table;
+            int oldCapacity = oldTable.length;
+            if (oldCapacity >= MAXIMUM_CAPACITY) {
+                return;
+            }
+
+            /*
+             * Reclassify nodes in each list to new Map.  Because we are
+             * using power-of-two expansion, the elements from each bin
+             * must either stay at same index, or move with a power of two
+             * offset. We eliminate unnecessary node creation by catching
+             * cases where old nodes can be reused because their next
+             * fields won't change. Statistically, at the default
+             * threshold, only about one-sixth of them need cloning when
+             * a table doubles. The nodes they replace will be garbage
+             * collectable as soon as they are no longer referenced by any
+             * reader thread that may be in the midst of traversing table
+             * right now.
+             */
+
+            HashEntry[] newTable = new HashEntry[oldCapacity << 1];
+            threshold = (int) (newTable.length * loadFactor);
+            int sizeMask = newTable.length - 1;
+            for (int i = 0; i < oldCapacity; i++) {
+                // We need to guarantee that any existing reads of old Map can
+                //  proceed. So we cannot yet null out each bin.
+                //noinspection unchecked
+                HashEntry<K, V> e = (HashEntry<K, V>) oldTable[i];
+
+                if (e != null) {
+                    HashEntry<K, V> next = e.next;
+                    int idx = e.hash & sizeMask;
+
+                    //  Single node on list
+                    if (next == null) {
+                        newTable[idx] = e;
+                    } else {
+                        // Reuse trailing consecutive sequence at same slot
+                        HashEntry<K, V> lastRun = e;
+                        int lastIdx = idx;
+                        for (HashEntry<K, V> last = next;
+                             last != null;
+                             last = last.next) {
+                            int k = last.hash & sizeMask;
+                            if (k != lastIdx) {
+                                lastIdx = k;
+                                lastRun = last;
+                            }
+                        }
+                        newTable[lastIdx] = lastRun;
+
+                        // Clone all remaining nodes
+                        for (HashEntry<K, V> p = e; p != lastRun; p = p.next) {
+                            int k = p.hash & sizeMask;
+                            //noinspection unchecked
+                            HashEntry<K, V> n = (HashEntry<K, V>) newTable[k];
+                            newTable[k] = new HashEntry<K, V>(p.key1,
+                                                              p.key2,
+                                                              p.key3,
+                                                              p.key4,
+                                                              p.hash,
+                                                              n,
+                                                              p.value);
+                        }
+                    }
+                }
+            }
+            table = newTable;
+        }
+
+        /**
+         * Remove; match on key only if value null, else match both.
+         */
+        V remove(Object key1,
+                 Object key2,
+                 Object key3,
+                 Object key4,
+                 int hash,
+                 Object value) {
+            lock();
+            try {
+                int c = count - 1;
+                HashEntry[] tab = table;
+                int index = hash & (tab.length - 1);
+                //noinspection unchecked
+                HashEntry<K, V> first = (HashEntry<K, V>) tab[index];
+                HashEntry<K, V> e = first;
+                while (e != null && (e.hash != hash
+                                     || key1 != null && !key1.equals(e.key1)
+                                     || key2 != null && !key2.equals(e.key2)
+                                     || key3 != null && !key3.equals(e.key3)
+                                     || key4 != null && !key4.equals(e.key4))) {
+                    e = e.next;
+                }
+
+                V oldValue = null;
+                if (e != null) {
+                    V v = e.value;
+                    if (value == null || value.equals(v)) {
+                        oldValue = v;
+                        // All entries following removed node can stay
+                        // in list, but all preceding ones need to be
+                        // cloned.
+                        ++modCount;
+                        HashEntry<K, V> newFirst = e.next;
+                        for (HashEntry<K, V> p = first; p != e; p = p.next) {
+                            newFirst = new HashEntry<K, V>(p.key1,
+                                                           p.key2,
+                                                           p.key3,
+                                                           p.key4,
+                                                           p.hash,
+                                                           newFirst,
+                                                           p.value);
+                        }
+                        tab[index] = newFirst;
+                        count = c; // write-volatile
+                    }
+                }
+                return oldValue;
+            } finally {
+                unlock();
+            }
+        }
+
+        void clear() {
+            if (count != 0) {
+                lock();
+                try {
+                    HashEntry[] tab = table;
+                    for (int i = 0; i < tab.length; i++) {
+                        tab[i] = null;
+                    }
+                    ++modCount;
+                    count = 0; // write-volatile
+                } finally {
+                    unlock();
+                }
+            }
+        }
+    }
+
+    /* ---------------- Public operations -------------- */
+
+    /**
+     * Creates a new, empty map with the specified initial capacity, load
+     * factor, and concurrency level.
+     *
+     * @param initialCapacity  the initial capacity. The implementation performs
+     *                         internal sizing to accommodate this many
+     *                         elements.
+     * @param loadFactor       the load factor threshold, used to control
+     *                         resizing. Resizing may be performed when the
+     *                         average number of elements per bin exceeds this
+     *                         threshold.
+     * @param concurrencyLevel the estimated number of concurrently updating
+     *                         threads. The implementation performs internal
+     *                         sizing to try to accommodate this many threads.
+     *
+     * @throws IllegalArgumentException if the initial capacity is negative or
+     *                                  the load factor or concurrencyLevel are
+     *                                  nonpositive.
+     */
+    public MultiKeyConcurrentHashMap(int initialCapacity,
+                                     float loadFactor,
+                                     int concurrencyLevel) {
+        if (!(loadFactor > 0) || initialCapacity < 0 || concurrencyLevel <= 0) {
+            throw new IllegalArgumentException();
+        }
+
+        if (concurrencyLevel > MAX_SEGMENTS) {
+            concurrencyLevel = MAX_SEGMENTS;
+        }
+
+        // Find power-of-two sizes best matching arguments
+        int sshift = 0;
+        int ssize = 1;
+        while (ssize < concurrencyLevel) {
+            ++sshift;
+            ssize <<= 1;
+        }
+        segmentShift = 32 - sshift;
+        segmentMask = ssize - 1;
+        this.segments = new Segment[ssize];
+
+        if (initialCapacity > MAXIMUM_CAPACITY) {
+            initialCapacity = MAXIMUM_CAPACITY;
+        }
+        int c = initialCapacity / ssize;
+        if (c * ssize < initialCapacity) {
+            ++c;
+        }
+        int cap = 1;
+        while (cap < c) {
+            cap <<= 1;
+        }
+
+        for (int i = 0; i < this.segments.length; ++i) {
+            this.segments[i] = new Segment<K, V>(cap, loadFactor);
+        }
+    }
+
+    /**
+     * Creates a new, empty map with the specified initial capacity, and with
+     * default load factor and concurrencyLevel.
+     *
+     * @param initialCapacity the initial capacity. The implementation performs
+     *                        internal sizing to accommodate this many
+     *                        elements.
+     *
+     * @throws IllegalArgumentException if the initial capacity of elements is
+     *                                  negative.
+     */
+    public MultiKeyConcurrentHashMap(int initialCapacity) {
+        this(initialCapacity, DEFAULT_LOAD_FACTOR, DEFAULT_SEGMENTS);
+    }
+
+    /**
+     * Creates a new, empty map with a default initial capacity, load factor,
+     * and concurrencyLevel.
+     */
+    public MultiKeyConcurrentHashMap() {
+        this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_SEGMENTS);
+    }
+
+    
+
+    /**
+     * @see java.util.Map#isEmpty()
+     */
+    public boolean isEmpty() {
+        final Segment[] segments = this.segments;
+        /*
+         * We keep track of per-segment modCounts to avoid ABA
+         * problems in which an element in one segment was added and
+         * in another removed during traversal, in which case the
+         * table was never actually empty at any point. Note the
+         * similar use of modCounts in the size() and containsValue()
+         * methods, which are the only other methods also susceptible
+         * to ABA problems.
+         */
+        int[] mc = new int[segments.length];
+        int mcsum = 0;
+        for (int i = 0; i < segments.length; ++i) {
+            if (segments[i].count != 0) {
+                return false;
+            } else {
+                mcsum += mc[i] = segments[i].modCount;
+            }
+        }
+        // If mcsum happens to be zero, then we know we got a snapshot
+        // before any modifications at all were made.  This is
+        // probably common enough to bother tracking.
+        if (mcsum != 0) {
+            for (int i = 0; i < segments.length; ++i) {
+                if (segments[i].count != 0 ||
+                    mc[i] != segments[i].modCount) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @see java.util.Map#size()
+     */
+    public int size() {
+        final Segment[] segments = this.segments;
+        long sum = 0;
+        long check = 0;
+        int[] mc = new int[segments.length];
+        // Try a few times to get accurate count. On failure due to
+        // continuous async changes in table, resort to locking.
+        for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
+            check = 0;
+            sum = 0;
+            int mcsum = 0;
+            for (int i = 0; i < segments.length; ++i) {
+                sum += segments[i].count;
+                mcsum += mc[i] = segments[i].modCount;
+            }
+            if (mcsum != 0) {
+                for (int i = 0; i < segments.length; ++i) {
+                    check += segments[i].count;
+                    if (mc[i] != segments[i].modCount) {
+                        check = -1; // force retry
+                        break;
+                    }
+                }
+            }
+            if (check == sum) {
+                break;
+            }
+        }
+        if (check != sum) { // Resort to locking all segments
+            sum = 0;
+            for (int i = 0; i < segments.length; ++i) {
+                segments[i].lock();
+            }
+            for (int i = 0; i < segments.length; ++i) {
+                sum += segments[i].count;
+            }
+            for (int i = 0; i < segments.length; ++i) {
+                segments[i].unlock();
+            }
+        }
+        if (sum > Integer.MAX_VALUE) {
+            return Integer.MAX_VALUE;
+        } else {
+            return (int) sum;
+        }
+    }
+
+
+    /**
+     * Returns the value to which the specified key is mapped in this table.
+     *
+     * @param key a key in the table.
+     *
+     * @return the value to which the key is mapped in this table; <tt>null</tt>
+     *         if the key is not mapped to any value in this table.
+     *
+     * @throws NullPointerException if the key is <tt>null</tt>.
+     */
+    public V get(Object key) {
+        int hash = hash(key, null, null, null);
+        return segmentFor(hash).get(key, null, null, null, hash);
+    }
+
+    /**
+     * @see #get(Object)
+     */
+    public V get(Object key1, Object key2) {
+        int hash = hash(key1, key2, null, null);
+        return segmentFor(hash).get(key1, key2, null, null, hash);
+    }
+
+    /**
+     * @see #get(Object)
+     */
+    public V get(Object key1, Object key2, Object key3) {
+        int hash = hash(key1, key2, key3, null);
+        return segmentFor(hash).get(key1, key2, key3, null, hash);
+    }
+
+    /**
+     * @see #get(Object)
+     */
+    public V get(Object key1, Object key2, Object key3, Object key4) {
+        int hash = hash(key1, key2, key3, key4);
+        return segmentFor(hash).get(key1, key2, key3, key4, hash);
+    }
+
+    /**
+     * Tests if the specified object is a key in this table.
+     *
+     * @param key possible key.
+     *
+     * @return <tt>true</tt> if and only if the specified object is a key in
+     *         this table, as determined by the <tt>equals</tt> method;
+     *         <tt>false</tt> otherwise.
+     *
+     * @throws NullPointerException if the key is <tt>null</tt>.
+     */
+    public boolean containsKey(Object key) {
+        int hash = hash(key, null, null, null);
+        return segmentFor(hash).containsKey(key, null, null, null, hash);
+    }
+
+    /**
+     * @see #containsKey(Object)
+     */
+    public boolean containsKey(Object key1, Object key2) {
+        int hash = hash(key1, key2, null, null);
+        return segmentFor(hash).containsKey(key1, key2, null, null, hash);
+    }
+
+    /**
+     * @see #containsKey(Object)
+     */
+    public boolean containsKey(Object key1, Object key2, Object key3) {
+        int hash = hash(key1, key2, key3, null);
+        return segmentFor(hash).containsKey(key1, key2, key3, null, hash);
+    }
+
+    /**
+     * @see #containsKey(Object)
+     */
+    public boolean containsKey(Object key1,
+                               Object key2,
+                               Object key3,
+                               Object key4) {
+        int hash = hash(key1, key2, key3, key4);
+        return segmentFor(hash).containsKey(key1, key2, key3, key4, hash);
+    }
+
+    /**
+     * Returns <tt>true</tt> if this map maps one or more keys to the specified
+     * value. Note: This method requires a full internal traversal of the hash
+     * table, and so is much slower than method <tt>containsKey</tt>.
+     *
+     * @param value value whose presence in this map is to be tested.
+     *
+     * @return <tt>true</tt> if this map maps one or more keys to the specified
+     *         value.
+     *
+     * @throws NullPointerException if the value is <tt>null</tt>.
+     */
+    public boolean containsValue(Object value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+
+        // See explanation of modCount use above
+
+        final Segment[] segments = this.segments;
+        int[] mc = new int[segments.length];
+
+        // Try a few times without locking
+        for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
+            int mcsum = 0;
+            for (int i = 0; i < segments.length; ++i) {
+                mcsum += mc[i] = segments[i].modCount;
+                if (segments[i].containsValue(value)) {
+                    return true;
+                }
+            }
+            boolean cleanSweep = true;
+            if (mcsum != 0) {
+                for (int i = 0; i < segments.length; ++i) {
+                    if (mc[i] != segments[i].modCount) {
+                        cleanSweep = false;
+                        break;
+                    }
+                }
+            }
+            if (cleanSweep) {
+                return false;
+            }
+        }
+        // Resort to locking all segments
+        for (int i = 0; i < segments.length; ++i) {
+            segments[i].lock();
+        }
+        boolean found = false;
+        try {
+            for (int i = 0; i < segments.length; ++i) {
+                if (segments[i].containsValue(value)) {
+                    found = true;
+                    break;
+                }
+            }
+        } finally {
+            for (int i = 0; i < segments.length; ++i) {
+                segments[i].unlock();
+            }
+        }
+        return found;
+    }
+
+    /**
+     * Legacy method testing if some key maps into the specified value in this
+     * table.  This method is identical in functionality to {@link
+     * #containsValue}, and  exists solely to ensure full compatibility with
+     * class {@link java.util.Hashtable}, which supported this method prior to
+     * introduction of the Java Collections framework.
+     *
+     * @param value a value to search for.
+     *
+     * @return <tt>true</tt> if and only if some key maps to the <tt>value</tt>
+     *         argument in this table as determined by the <tt>equals</tt>
+     *         method; <tt>false</tt> otherwise.
+     *
+     * @throws NullPointerException if the value is <tt>null</tt>.
+     */
+    public boolean contains(Object value) {
+        return containsValue(value);
+    }
+
+    /**
+     * Maps the specified <tt>key</tt> to the specified <tt>value</tt> in this
+     * table. Neither the key nor the value can be <tt>null</tt>.
+     * <p/>
+     * <p> The value can be retrieved by calling the <tt>get</tt> method with a
+     * key that is equal to the original key.
+     *
+     * @param key   the table key.
+     * @param value the value.
+     *
+     * @return the previous value of the specified key in this table, or
+     *         <tt>null</tt> if it did not have one.
+     *
+     * @throws NullPointerException if the key or value is <tt>null</tt>.
+     */
+    public V put(K key, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key, null, null, null);
+        return segmentFor(hash).put(key, null, null, null, hash, value, false);
+    }
+
+    /**
+     * @see #put(Object, Object)
+     */
+    public V put(K key1, K key2, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key1, key2, null, null);
+        return segmentFor(hash).put(key1, key2, null, null, hash, value, false);
+    }
+
+    /**
+     * @see #put(Object, Object)
+     */
+    public V put(K key1, K key2, K key3, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key1, key2, key3, null);
+        return segmentFor(hash).put(key1, key2, key3, null, hash, value, false);
+    }
+
+    /**
+     * @see #put(Object, Object)
+     */
+    public V put(K key1, K key2, K key3, K key4, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key1, key2, key3, key4);
+        return segmentFor(hash).put(key1, key2, key3, key4, hash, value, false);
+    }
+
+
+    /**
+     * If the specified key is not already associated with a value, associate it
+     * with the given value. This is equivalent to
+     * <pre>
+     *   if (!map.containsKey(key))
+     *      return map.put(key, value);
+     *   else
+     *      return map.get(key);
+     * </pre>
+     * Except that the action is performed atomically.
+     *
+     * @param key   key with which the specified value is to be associated.
+     * @param value value to be associated with the specified key.
+     *
+     * @return previous value associated with specified key, or <tt>null</tt> if
+     *         there was no mapping for key.
+     *
+     * @throws NullPointerException if the specified key or value is
+     *                              <tt>null</tt>.
+     */
+    public V putIfAbsent(K key, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key, null, null, null);
+        return segmentFor(hash).put(key, null, null, null, hash, value, true);
+    }
+
+    /**
+     * @see #putIfAbsent(Object, Object)
+     */
+    public V putIfAbsent(K key1, K key2, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key1, key2, null, null);
+        return segmentFor(hash).put(key1, key2, null, null, hash, value, true);
+    }
+
+    /**
+     * @see #putIfAbsent(Object, Object)
+     */
+    public V putIfAbsent(K key1, K key2, K key3, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key1, key2, key3, null);
+        return segmentFor(hash).put(key1, key2, key3, null, hash, value, true);
+    }
+
+    /**
+     * @see #putIfAbsent(Object, Object)
+     */
+    public V putIfAbsent(K key1, K key2, K key3, K key4, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key1, key2, key3, key4);
+        return segmentFor(hash).put(key1, key2, key3, key4, hash, value, true);
+    }
+
+
+    /**
+     * @see Map#remove(Object)
+     */
+    public V remove(K key) {
+        int hash = hash(key, null, null, null);
+        return segmentFor(hash).remove(key, null, null, null, hash, null);
+    }
+
+    /**
+     * @see Map#remove(Object)
+     */
+    public V remove(K key1, K key2) {
+        int hash = hash(key1, key2, null, null);
+        return segmentFor(hash).remove(key1, key2, null, null, hash, null);
+    }
+
+    /**
+     * @see Map#remove(Object)
+     */
+    public V remove(K key1, K key2, K key3) {
+        int hash = hash(key1, key2, key3, null);
+        return segmentFor(hash).remove(key1, key2, null, null, hash, null);
+    }
+
+    /**
+     * @see Map#remove(Object)
+     */
+    public V remove(K key1, K key2, K key3, K key4) {
+        // we don't have multiple versions of remove here because
+        // erasure would cause a collision with boolean remove(Object, Object)
+        int hash = hash(key1, key2, key3, key4);
+        return segmentFor(hash).remove(key1, key2, key3, key4, hash, null);
+    }
+
+
+    /**
+     * Replace entry for key only if currently mapped to given value. Acts as
+     * <pre>
+     *  if (map.get(key).equals(oldValue)) {
+     *     map.put(key, newValue);
+     *     return true;
+     * } else return false;
+     * </pre>
+     * except that the action is performed atomically.
+     *
+     * @param key      key with which the specified value is associated.
+     * @param oldValue value expected to be associated with the specified key.
+     * @param newValue value to be associated with the specified key.
+     *
+     * @return true if the value was replaced
+     *
+     * @throws NullPointerException if the specified key or values are
+     *                              <tt>null</tt>.
+     */
+    public boolean replace(K key, V oldValue, V newValue) {
+        if (oldValue == null || newValue == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key, null, null, null);
+        return segmentFor(hash)
+              .replace(key, null, null, null, hash, oldValue, newValue);
+    }
+
+    /**
+     * Replace entry for key only if currently mapped to some value. Acts as
+     * <pre>
+     *  if ((map.containsKey(key)) {
+     *     return map.put(key, value);
+     * } else return null;
+     * </pre>
+     * except that the action is performed atomically.
+     *
+     * @param key   key with which the specified value is associated.
+     * @param value value to be associated with the specified key.
+     *
+     * @return previous value associated with specified key, or <tt>null</tt> if
+     *         there was no mapping for key.
+     *
+     * @throws NullPointerException if the specified key or value is
+     *                              <tt>null</tt>.
+     */
+    public V replace(K key, V value) {
+        if (value == null) {
+            throw new NullPointerException();
+        }
+        int hash = hash(key, null, null, null);
+        return segmentFor(hash).replace(key, null, null, null, hash, value);
+    }
+
+
+    /**
+     * Removes all mappings from this map.
+     */
+    public void clear() {
+        for (int i = 0; i < segments.length; ++i) {
+            segments[i].clear();
+        }
+    }
+
+    /**
+     * Unsupported
+     */
+    public Set<K> keySet() {
+        throw new UnsupportedOperationException();
+    }
+
+
+    /**
+     * Unsupported.
+     */
+    public Collection<V> values() {
+        throw new UnsupportedOperationException();
+    }
+
+
+    /**
+     * Unsupported.
+     */
+    public Set<Map.Entry<K, V>> entrySet() {
+        throw new UnsupportedOperationException();
+    }
+
+}
diff --git a/com/sun/faces/util/ReflectionUtils.java b/com/sun/faces/util/ReflectionUtils.java
new file mode 100644
index 0000000..f736473
--- /dev/null
+++ b/com/sun/faces/util/ReflectionUtils.java
@@ -0,0 +1,483 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.WeakHashMap;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.beans.PropertyDescriptor;
+import java.beans.Introspector;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+
+/**
+ * <p>A set of utility methods to make working with
+ * Classes and Reflection a little easier.</p>
+ */
+public final class ReflectionUtils {
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    /**
+     * <p>Cache</p>
+     */
+    private static final Map<ClassLoader, ConcurrentMap<String, MetaData>> REFLECTION_CACHE =
+          new WeakHashMap<ClassLoader,ConcurrentMap<String, MetaData>>();
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private ReflectionUtils() { }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Clears the cache for the specified <code>ClassLoader</code>.</p>
+     * <p>This method <em>MUST</em> be called when <code>ConfigureListener
+     * .contextDestroyed()</code> is called.</p>
+     * @param loader the <code>ClassLoader</code> whose associated cache
+     *  should be cleared
+     */
+    public static synchronized void clearCache(ClassLoader loader) {
+
+            REFLECTION_CACHE.remove(loader);
+
+    }
+
+
+    public static synchronized void initCache(ClassLoader loader) {
+
+        if (REFLECTION_CACHE.get(loader) == null) {
+            REFLECTION_CACHE.put(loader,
+                                 new ConcurrentHashMap<String,MetaData>());
+        }
+
+    }
+
+
+    /**
+     * <p>Returns the <code>Constructor</code> appropriate to the specified
+     * Class and parameters.</p>
+     * @param clazz the Class of interest
+     * @param params the parameters for the constructor of the provided Class
+     * @return a Constructor that can be invoked with the specified parameters
+     */
+    public static Constructor lookupConstructor(
+          Class<?> clazz,
+          Class<?>... params) {
+
+        ClassLoader loader = Util.getCurrentLoader(clazz);
+        if (loader == null) {
+            return null;
+        }
+        
+        return getMetaData(loader, clazz).lookupConstructor(params);
+        
+    }
+    
+    /**
+     * <p>Returns the <code>Method</code> appropriate to the specified
+     * Class, method name, and parameters.</p>
+     * @param clazz the Class of interest
+     * @param methodName the name of the method
+     * @param params the parameters for the specified method
+     * @return a Method that can be invoked with the specified parameters
+     */
+    public static Method lookupMethod(
+          Class<?> clazz,
+          String methodName,
+          Class<?>... params) {
+
+        ClassLoader loader = Util.getCurrentLoader(clazz);
+        if (loader == null) {
+            return null;
+        }        
+        
+        return getMetaData(loader, clazz).lookupMethod(methodName, params);
+        
+    }
+
+
+    /**
+     * <p>Constructs a new object instance based off the
+     * provided class name.</p>
+     * @param className the class of the object to instantiate
+     * @return a new instances of said class
+     * @throws InstantiationException if the class cannot be instantiated
+     * @throws IllegalAccessException if there is a security violation
+     */
+    public static Object newInstance(String className)
+    throws InstantiationException, IllegalAccessException {
+
+        ClassLoader loader = Util.getCurrentLoader(null);
+        if (loader == null) {
+            return null;
+        }
+
+        return getMetaData(loader, className).lookupClass().newInstance();
+        
+    }
+
+
+    /**
+     * <p>Obtain a <code>Class</code> instance based on the provided
+     * String name.</p>
+     * @param className the class to look up
+     * @return the <code>Class</code> corresponding to <code>className</code>
+     */
+    public static Class<?> lookupClass(String className) {
+
+        ClassLoader loader = Util.getCurrentLoader(null);
+        if (loader == null) {
+            return null;
+        }
+
+        return getMetaData(loader, className).lookupClass();
+        
+    }
+
+
+    /**
+     * @param className the fully qualified class name
+     * @param propertyName a JavaBeans property name
+     * @return a method suitable for setting a JavaBeans property, or
+     *  <code>null</code> if the property doesn't exist or is readonly.
+     */
+    public static Method lookupWriteMethod(String className, String propertyName) {
+
+        ClassLoader loader = Util.getCurrentLoader(null);
+        if (loader == null) {
+            return null;
+        }
+
+        return getMetaData(loader, className).lookupWriteMethod(propertyName);
+
+    }
+
+
+    /**
+     * @param className the fully qualified class name
+     * @param propertyName a JavaBeans property name
+     * @return a method suitable for obtaining the value of a JavaBeans property,
+     *  or <code>null</code> if the property doesn't exist or can't be read.
+     */
+    public static Method lookupReadMethod(String className, String propertyName) {
+
+
+        ClassLoader loader = Util.getCurrentLoader(null);
+        if (loader == null) {
+            return null;
+        }
+
+        return getMetaData(loader, className).lookupReadMethod(propertyName);
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Return the <code>MetaData</code> for the specified Class.</p>
+     * 
+     * <p>This will check the cache associated with the specified
+     * <code>ClassLoader</code>.  If there is no cache hit, then a new
+     * <code>MetaData</code> instance will be created and stored.
+     * 
+     * @param loader <code>ClassLoader</code>
+     * @param clazz the Class of interest
+     * @return a <code>MetaData</code> object for the specified Class
+     */
+    private static MetaData getMetaData(ClassLoader loader, Class<?> clazz) {
+
+        ConcurrentMap<String, MetaData> cache = REFLECTION_CACHE.get(loader);
+
+        if (cache == null) {
+            initCache(loader);
+            cache = REFLECTION_CACHE.get(loader);
+        }
+
+        MetaData meta = cache.get(clazz.getName());
+        if (meta == null) {
+            meta = new MetaData(clazz);
+            cache.put(clazz.getName(), meta);
+        }
+       
+        return meta;
+
+    }
+
+
+    /**
+     * <p>Return the <code>MetaData</code> for the specified className.</p>
+     *
+     * <p>This will check the cache associated with the specified
+     * <code>ClassLoader</code>.  If there is no cache hit, then a new
+     * <code>MetaData</code> instance will be created and stored.
+     *
+     * @param loader <code>ClassLoader</code>
+     * @param className the class of interest
+     * @return a <code>MetaData</code> object for the specified Class
+     */
+    private static MetaData getMetaData(ClassLoader loader, String className) {
+
+        ConcurrentMap<String, MetaData> cache = REFLECTION_CACHE.get(loader);
+
+        if (cache == null) {
+            initCache(loader);
+            cache = REFLECTION_CACHE.get(loader);
+        }
+
+        MetaData meta = cache.get(className);
+        if (meta == null) {
+            try {
+                Class<?> clazz = Util.loadClass(className, cache);
+                meta = new MetaData(clazz);
+                cache.put(className, meta);
+            } catch (ClassNotFoundException cnfe) {
+                return null;
+            }
+        }
+
+        return meta;
+    }
+
+
+    /**
+     * <p>MetaData contains lookup methods for <code>Constructor</code>s and
+     * <code>Method</code>s of a particular Class.
+     */
+    private static final class MetaData {
+
+
+        Map<Integer,Constructor> constructors;
+        Map<String,HashMap<Integer,Method>> methods;
+        Map<String,HashMap<Integer,Method>> declaredMethods;
+        Map<String, PropertyDescriptor> propertyDescriptors;
+        Class<?> clazz;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+        /**
+         * <p>Constructs a new <code>MetaData</code> instance for the specified
+         * class.</p>
+         * @param clazz class to construct a new MetaData instance from.
+         */
+        public MetaData(Class<?> clazz) {
+
+            String name;
+            this.clazz = clazz;
+            Constructor[] ctors = clazz.getConstructors();
+            constructors = new HashMap<Integer,Constructor>(ctors.length, 1.0f);
+            for (int i = 0, len = ctors.length; i < len; i++) {
+                constructors.put(getKey(ctors[i].getParameterTypes()),
+                                 ctors[i]);
+            }
+            Method[] meths = clazz.getMethods();
+            methods = new HashMap<String,HashMap<Integer,Method>>(meths.length, 1.0f);
+            for (int i = 0, len = meths.length; i < len; i++) {
+                name = meths[i].getName();
+                HashMap<Integer,Method> methodsMap = methods.get(name);
+                if (methodsMap == null) {
+                    methodsMap = new HashMap<Integer,Method>(4, 1.0f);
+                    methods.put(name, methodsMap);
+                }
+                methodsMap.put(getKey(meths[i].getParameterTypes()), meths[i]);
+            }
+            
+            meths = clazz.getDeclaredMethods();
+            declaredMethods = new HashMap<String,HashMap<Integer,Method>>(meths.length, 1.0f);
+            for (int i = 0, len = meths.length; i < len; i++) {
+                name = meths[i].getName();
+                HashMap<Integer,Method> declaredMethodsMap = declaredMethods.get(name);
+                if (declaredMethodsMap == null) {
+                    declaredMethodsMap = new HashMap<Integer,Method>(4, 1.0f);
+                    declaredMethods.put(name, declaredMethodsMap);
+                }
+                declaredMethodsMap.put(getKey(meths[i].getParameterTypes()), meths[i]);
+            }
+
+            try {
+                BeanInfo info = Introspector.getBeanInfo(clazz);
+                PropertyDescriptor[] pds = info.getPropertyDescriptors();
+                if (pds != null) {
+                    if (propertyDescriptors == null) {
+                        propertyDescriptors = new HashMap<String,PropertyDescriptor>(pds.length, 1.0f);
+                    }
+                    for (PropertyDescriptor pd : pds) {
+                        propertyDescriptors.put(pd.getName(), pd);
+                    }
+                }
+            } catch (IntrospectionException ie) {
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               ie.toString(),
+                               ie);
+                }
+            }
+
+        }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+        /**
+         * <p>Looks up a <code>Constructor</code> based off the specified
+         * <code>params</code>.</p>
+         * @param params constructor parameters
+         * @return the <code>Constructor</code> appropriate to the specified 
+         *  parameters or <code>null</code>
+         */
+        public Constructor lookupConstructor(Class<?>... params) {
+
+            return constructors.get(getKey(params));
+
+        }
+
+
+        /**
+         * <p>Looks up a <code>Method</code> based off the specified method
+         * name and <code>params</code>.</p>
+         * @param name the name of the <cod>Method</code>
+         * @param params the <code>Method</code> parameters
+         * @return the <code>Method</code> appropriate to the specified 
+         *  name and parameters or <code>null</code>
+         */
+        public Method lookupMethod(String name, Class<?>... params) {
+
+            Map<Integer,Method> map = methods.get(name);
+            Integer key = getKey(params);
+            Method result = null;
+            if ((null == map) || null == (result = map.get(key))) {
+                map = declaredMethods.get(name);
+                if (null != map) {
+                    result = map.get(key);
+                }
+            }
+            return result;
+
+        }
+
+
+        /**
+         * <p>Looks up the class for this MetaData instance.</p>
+         * @return the <code>Class</code> for this MetaData instance
+         */
+        public Class<?> lookupClass() {
+
+            return clazz;
+
+        }
+
+
+        /**
+         * @param propName a JavaBeans property name
+         * @return a method suitable for setting a JavaBeans property, or
+         *  <code>null</code> if the property doesn't exist or is readonly.
+         */
+        public Method lookupWriteMethod(String propName) {
+
+            if (propertyDescriptors == null) {
+                return null;
+            }
+
+            PropertyDescriptor pd = propertyDescriptors.get(propName);
+            if (pd != null) {
+                return pd.getWriteMethod();
+            }
+            return null;
+
+        }
+
+
+        /**
+         * @param propName a JavaBeans property name
+         * @return a method suitable for obtaining the value of a JavaBeans property,
+         *  or <code>null</code> if the property doesn't exist or can't be read.
+         */
+        public Method lookupReadMethod(String propName) {
+
+            if (propertyDescriptors == null) {
+                return null;
+            }
+
+            PropertyDescriptor pd = propertyDescriptors.get(propName);
+            if (pd != null) {
+                return pd.getReadMethod();
+            }
+            return null;
+
+        }
+
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+        /**
+         * Return a hashcode of all the class parameters.
+         * @param params the parameters to a <code>Constructor</code> or
+         *  a <code>Method</code> instance
+         * @return the result of <code>Arrays.deepHashCode</code>
+         */
+        private static Integer getKey(Class<?>... params) {
+
+            return Arrays.deepHashCode(params);
+
+        }
+
+    }
+
+    
+} // END ReflectionUtils
diff --git a/com/sun/faces/util/RequestStateManager.java b/com/sun/faces/util/RequestStateManager.java
new file mode 100644
index 0000000..034a052
--- /dev/null
+++ b/com/sun/faces/util/RequestStateManager.java
@@ -0,0 +1,312 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseId;
+
+import com.sun.faces.RIConstants;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * This helper class is used a central location for per-request state
+ * that is needed by Mojarra.  This class leverages FacesContext.getAttributes()
+ * which as added in 2.0 instead of the request scope to prevent the unecessary
+ * triggering of ServletREquestAttributeListeners.
+ * </p>
+ */
+public class RequestStateManager {
+
+    /**
+     * Attribute for storing any content within a page that is defined
+     * after the closing f:view.
+     */
+    public static final String AFTER_VIEW_CONTENT =
+          RIConstants.FACES_PREFIX + "AFTER_VIEW_CONTENT";
+
+    /**
+     * Attribute describing the current ELResolver chain type (either JSP
+     * or Faces)
+     */
+    public static final String EL_RESOLVER_CHAIN_TYPE_NAME =
+          RIConstants.FACES_PREFIX + "ELResolverChainType";
+
+    /**
+     * Attribute indicating the current component being processed.
+     * This will be used when generating bytecode for custom converters.
+     */
+    public static final String TARGET_COMPONENT_ATTRIBUTE_NAME =
+          RIConstants.FACES_PREFIX + "ComponentForValue";    
+
+    /**
+     * Attribute defining the {@link javax.faces.render.RenderKit} being used
+     * for this request.
+     */
+    public static final String RENDER_KIT_IMPL_REQ =
+          RIConstants.FACES_PREFIX + "renderKitImplForRequest";
+
+    /**
+     * This attribute is used by the StateMangaer during restore view.
+     * The values are stored in the request for later use.
+     */
+    public static final String LOGICAL_VIEW_MAP =
+          RIConstants.FACES_PREFIX + "logicalViewMap";
+
+    /**
+     * This attribute is used by the StateMangaer during restore view.
+     * The values are stored in the request for later use.
+     */
+    public static final String ACTUAL_VIEW_MAP =
+          RIConstants.FACES_PREFIX + "actualViewMap";
+
+    /**
+     * This attribute is used by the loadBundle tag for tracking views/subviews
+     * within the logical view (this is only used when 1.1 compatibility is
+     * enabled).
+     */
+    public static final String VIEWTAG_STACK_ATTR_NAME =
+          RIConstants.FACES_PREFIX + "taglib.jsf_core.VIEWTAG_STACK";
+
+    /**
+     * Attribute to store the {@link javax.faces.webapp.FacesServlet} path of
+     * the original request.
+     */
+    public static final String INVOCATION_PATH =
+          RIConstants.FACES_PREFIX + "INVOCATION_PATH";
+
+    /**
+     * This attribute protects against infinite loops on expressions that
+     * touch a custom legacy VariableResolver that delegates to its parent
+     * VariableResolver.
+     */
+    public static final String REENTRANT_GUARD =
+          RIConstants.FACES_PREFIX + "LegacyVariableResolver";
+
+    /**
+     * Leveraged by the RequestStateManager to allow deprecated ResponseStateManager
+     * methods to continue to work if called.
+     */
+    public static final String FACES_VIEW_STATE =
+          "com.sun.faces.FACES_VIEW_STATE";
+
+
+    /**
+     * Leveraged by ResourceHandlerImpl to denote whether or not a request
+     * is a resource request.  A <code>Boolean</code> value will be assoicated
+     * with this key.
+     */
+    public static final String RESOURCE_REQUEST =
+          "com.sun.faces.RESOURCE_REQUEST";
+
+    /**
+     * Used to store the FaceletFactory as other components may need to
+     * use it during their processing. 
+     */
+    public static final String FACELET_FACTORY =
+          "com.sun.faces.FACELET_FACTORY";
+
+    /**
+     * Used to indicate whether or not jsf.js has already be rendered.
+     */
+    public static final String SCRIPT_STATE =
+          "com.sun.faces.SCRIPT_STATE";
+
+
+    /**
+     * Used to communicate which validators have been disabled for a particular
+     * nesting level within a view.
+     */
+    public static final String DISABLED_VALIDATORS =
+          "com.sun.faces.DISABLED_VALIDATORS";
+
+
+    /**
+     * Used to store the Set of ResourceDependency annotations that have
+     * been processed.
+     */
+    public static final String PROCESSED_RESOURCE_DEPENDENCIES =
+          "com.sun.faces.PROCESSED_RESOURCE_DEPENDENCIES";
+
+
+    private static final String[] RENDER_RESPONSE = {
+          SCRIPT_STATE,
+          PROCESSED_RESOURCE_DEPENDENCIES
+    };
+
+    /**
+     * <p>The key under with the Map containing the implementation specific
+     * attributes will be stored within the request.<p>
+     */
+    private static final String KEY =
+          RequestStateManager.class.getName();
+
+
+    private static final Map<PhaseId,String[]> PHASE_ATTRIBUTES =
+        new HashMap<PhaseId,String[]>(2, 1.0f);
+
+    static {
+        PHASE_ATTRIBUTES.put(PhaseId.RENDER_RESPONSE, RENDER_RESPONSE);
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param key the key for the value
+     * @return the value associated with the specified key.
+     */
+    public static Object get(FacesContext ctx, String key) {
+
+        if (ctx == null || key == null) {
+            return null;
+        }
+        return ctx.getAttributes().get(key);
+
+    }
+
+
+    /**
+     * <p>
+     * Adds the specified key and value to the Map stored in the request.
+     * If <code>value</code> is <code>null</code>, that key/value pair will
+     * be removed from the Map.
+     * </p>
+     *
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param key the key for the value
+     * @param value the value to store
+     */
+    public static void set(FacesContext ctx, String key, Object value) {
+
+        if (ctx == null || key == null) {
+            return;
+        }
+        if (value == null) {
+            remove(ctx, key);
+        }
+        ctx.getAttributes().put(key, value);
+
+    }
+
+
+    /**
+     * <p>
+     * Remove the value associated with the specified key.
+     * </p>
+     *
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param key the key for the value
+     * @return the value previous associated with the specified key, if any
+     */
+    public static Object remove(FacesContext ctx, String key) {
+
+        if (ctx == null || key == null) {
+            return null;
+        }
+
+        return ctx.getAttributes().remove(key);
+
+    }
+
+
+    /**
+     * <p>
+     * Remove all request state attributes associated that need to be cleared
+     * before the execution of a particular lifecycle phase.
+     * </p>
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param phaseId the phase used to obtain the associated attributes
+     */
+    public static void clearAttributesForPhase(FacesContext ctx,
+                                               PhaseId phaseId) {
+
+        if (ctx == null || phaseId == null) {
+            return;
+        }
+        String[] phaseAttributes = PHASE_ATTRIBUTES.get(phaseId);
+        if (phaseAttributes != null) {
+            Map<Object,Object> attrs = ctx.getAttributes();
+            for (String key : phaseAttributes) {
+                attrs.remove(key);
+            }
+        }
+
+    }
+
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @param key the key for the value
+     * @return true if the specified key exists in the Map
+     */
+    public static boolean containsKey(FacesContext ctx, String key) {
+
+        return !(ctx == null || key == null) && ctx.getAttributes()
+              .containsKey(key);
+
+    }
+
+    /**
+     * @param ctx the <code>FacesContext</code> for the current request
+     * @return the Map from the request containing the implementation specific
+     *  attributes needed for processing
+     */
+    public static Map<String,Object> getStateMap(FacesContext ctx) {
+
+        assert (ctx != null); // all callers guard against a null context
+        Map<Object,Object> contextMap = ctx.getAttributes();
+        //noinspection unchecked
+        Map<String,Object> reqState = (Map<String,Object>) contextMap.get(KEY);
+        if (reqState == null) {
+            reqState = new HashMap<String,Object>();
+            contextMap.put(KEY, reqState);
+        }
+        return reqState;
+
+    }
+
+
+}
diff --git a/com/sun/faces/util/Timer.java b/com/sun/faces/util/Timer.java
new file mode 100644
index 0000000..dada1aa
--- /dev/null
+++ b/com/sun/faces/util/Timer.java
@@ -0,0 +1,118 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * This class is a simple wrapper for timing method calls.
+ * The traditional methid is to add two variables, start, and stop,
+ * and display the difference of these values.  Encapsulates
+ * the process.
+ */
+public class Timer {
+
+    private static final Logger LOGGER = FacesLogger.TIMING.getLogger();
+
+    long start;
+    long stop;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    private Timer() { }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * @return a new <code>Timer</code> instance if the <code>TIMING</code>
+     *  logging level is <code>FINE</code>, otherwise, return null;
+     */
+    public static Timer getInstance() {
+        if (LOGGER.isLoggable(Level.FINE)) {
+            return new Timer();
+        }
+        return null;
+    }
+
+
+    /**
+     * Start timing.
+     */
+    public void startTiming() {
+        start = System.currentTimeMillis();
+    }
+
+
+    /**
+     * Stop timing.
+     */
+    public void stopTiming() {
+        stop = System.currentTimeMillis();
+    }
+
+
+    /**
+     * Log the timing result.
+     * @param taskInfo task description
+     */
+    public void logResult(String taskInfo) {
+    	if (LOGGER.isLoggable(Level.FINE)) {
+	        LOGGER.log(Level.FINE,
+	                   " [TIMING] - [" + getTimingResult() + "ms] : " + taskInfo);
+    	}
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * @return the time for this task
+     */
+    private long getTimingResult() {
+        return (stop - start);
+    }
+}
diff --git a/com/sun/faces/util/TypedCollections.java b/com/sun/faces/util/TypedCollections.java
new file mode 100644
index 0000000..bcc9e5d
--- /dev/null
+++ b/com/sun/faces/util/TypedCollections.java
@@ -0,0 +1,159 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.util;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class TypedCollections {
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null).
+     */
+    private static boolean checkCollectionMembers(Collection<?> c, Class<?> type) {
+        for (Object element : c) {
+            if (element != null && !type.isInstance(element)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null), and that the collection
+     * itself is of the given collection type.
+     * 
+     * @param <E>
+     *                the collection's element type
+     * @param c
+     *                the collection to cast
+     * @param type
+     *                the class of the collection's element type.
+     * @return the dynamically-type checked collection.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+    public static <E,TypedC extends Collection<E>> TypedC dynamicallyCastCollection(Collection<?> c,
+                                                                                          Class<E> type, 
+                                                                                          Class<TypedC> collectionType) {
+        if (c == null)
+            return null;
+        if (!collectionType.isInstance(c))
+            throw new ClassCastException(c.getClass().getName());
+        assert checkCollectionMembers(c, type) :
+            "The collection contains members with a type other than " + type.getName();
+
+        return collectionType.cast(c);
+    }
+
+    /**
+     * Dynamically check that the members of the list are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the list's element type
+     * @param list
+     *                the list to cast
+     * @param type
+     *                the class of the list's element type.
+     * @return the dynamically-type checked list.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+    public static <E> List<E> dynamicallyCastList(List<?> list, Class<E> type) {
+        return dynamicallyCastCollection(list, type, List.class);
+    }
+
+    /**
+     * Dynamically check that the members of the set are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the set's element type
+     * @param set
+     *                the set to cast
+     * @param type
+     *                the class of the set's element type.
+     * @return the dynamically-type checked set.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+    public static <E> Set<E> dynamicallyCastSet(Set<?> set, 
+                                                      Class<E> type) {
+        return dynamicallyCastCollection(set, type, Set.class);
+    }
+
+    /**
+     * Dynamically check that the keys and values in the map are all
+     * instances of the correct types (or null).
+     * 
+     * @param <K>
+     *                the map's key type
+     * @param <V>
+     *                the map's value type
+     * @param map
+     *                the map to cast
+     * @param keyType
+     *                the class of the map's key type.
+     * @param valueType
+     *                the class of the map's value type.
+     * @return the dynamically-type checked map.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+    public static <K, V> Map<K, V> dynamicallyCastMap(Map<?, ?> map,
+                                                            Class<K> keyType, 
+                                                            Class<V> valueType) {
+        if (map == null) {
+            return null;                                                                     
+        }
+        assert checkCollectionMembers(map.keySet(), keyType) :
+            "The map contains keys with a type other than " + keyType.getName();
+        assert checkCollectionMembers(map.values(), valueType) :
+            "The map contains values with a type other than " + valueType.getName();
+
+        return (Map<K, V>) map;
+    }
+}
diff --git a/com/sun/faces/util/Util.java b/com/sun/faces/util/Util.java
new file mode 100644
index 0000000..51cc0f8
--- /dev/null
+++ b/com/sun/faces/util/Util.java
@@ -0,0 +1,1137 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+// Util.java
+
+package com.sun.faces.util;
+
+import com.sun.faces.RIConstants;
+import com.sun.faces.config.WebConfiguration;
+import com.sun.faces.io.FastStringWriter;
+import com.sun.faces.scripting.groovy.GroovyHelper;
+
+import javax.el.ELResolver;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.event.AbortProcessingException;
+import java.beans.FeatureDescriptor;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.UINamingContainer;
+import javax.faces.render.ResponseStateManager;
+import javax.servlet.ServletContext;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.validation.SchemaFactory;
+
+/**
+ * <B>Util</B> is a class ...
+ * <p/>
+ * <B>Lifetime And Scope</B> <P>
+ *
+ */
+
+public class Util {
+
+    
+    // Log instance for this class
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+    // README - make sure to add the message identifier constant
+    // (ex: Util.CONVERSION_ERROR_MESSAGE_ID) and the number of substitution
+    // parameters to test/com/sun/faces/util/TestUtil_messages (see comment there).
+
+    /**
+     * Flag that, when true, enables special behavior in the RI to enable
+     * unit testing.
+     */
+    private static boolean unitTestModeEnabled = false;
+    
+    /**
+     * RegEx patterns
+     */
+    private static final String patternCacheKey = RIConstants.FACES_PREFIX + "patternCache";
+
+
+    private Util() {
+        throw new IllegalStateException();
+    }
+
+    private static Map<String,Pattern> getPatternCache(Map<String, Object> appMap) {
+        Map<String,Pattern> result = 
+                (Map<String,Pattern>) appMap.get(patternCacheKey);
+        if (null == result) {
+            result = new LRUMap<String,Pattern>(15);
+            appMap.put(patternCacheKey, result);
+        }
+        
+        return result;
+    }
+
+    private static Map<String,Pattern> getPatternCache(ServletContext sc) {
+        Map<String,Pattern> result =
+                (Map<String,Pattern>) sc.getAttribute(patternCacheKey);
+        if (null == result) {
+            result = new LRUMap<String,Pattern>(15);
+            sc.setAttribute(patternCacheKey, result);
+        }
+
+        return result;
+    }
+    
+    private static final String CDI_AVAILABLE_PER_APP_KEY = Util.class.getName() + "_CDI_AVAILABLE";
+    
+    public static boolean isCDIAvailable(Map<String, Object> appMap) {
+        boolean result = appMap.containsKey(CDI_AVAILABLE_PER_APP_KEY);
+        return result;
+    }
+
+    public static boolean isCDIAvailable(ServletContext sc) {
+        boolean result = null != sc.getAttribute(CDI_AVAILABLE_PER_APP_KEY);
+        return result;
+    }
+    
+    public static Object getCDIBeanManager(Map<String, Object> appMap) {
+        Object beanManager = appMap.get(CDI_AVAILABLE_PER_APP_KEY);
+        return beanManager;
+    }
+    
+    public static void setCDIAvailable(ServletContext sc, Object beanManager) {
+        sc.setAttribute(CDI_AVAILABLE_PER_APP_KEY, beanManager);
+        }
+    
+    public static boolean isCdiOneOneOrGreater() {
+
+        // The following try/catch is a hack to discover
+        // if CDI 1.1 or greater is available
+        boolean result = false;
+        try {
+            Class.forName("javax.enterprise.context.Initialized");
+            result = true;
+        } catch (ClassNotFoundException ignored) {
+            if (LOGGER.isLoggable(Level.FINEST)) {
+                LOGGER.log(Level.FINEST, "Dected CDI 1.0", ignored);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * <p>
+     * Convenience method for determining if the request associated
+     * with the specified <code>FacesContext</code> is a PortletRequest
+     * submitted by the JSR-301 bridge.
+     * </p>
+     * @param context the <code>FacesContext</code> associated with
+     *  the request.
+     */
+    public static boolean isPortletRequest (FacesContext context) {
+        return (context.getExternalContext().getRequestMap().get("javax.portlet.faces.phase") != null);
+    }
+    
+
+    /**
+     * <p>Factory method for creating the varius JSF listener
+     *  instances that may be referenced by <code>type</code>
+     *  or <code>binding</code>.</p>
+     * <p>If <code>binding</code> is not <code>null</code>
+     * and the evaluation result is not <code>null</code> return
+     * that instance.  Otherwise try to instantiate an instances
+     * based on <code>type</code>.</p>
+     * 
+     * @param type the <code>Listener</code> type
+     * @param binding a <code>ValueExpression</code> which resolves
+     *  to a <code>Listener</code> instance
+     * @return a <code>Listener</code> instance based off the provided
+     *  <code>type</code> and <binding>
+     */
+    public static Object getListenerInstance(ValueExpression type,
+                                             ValueExpression binding) {
+
+        FacesContext faces = FacesContext.getCurrentInstance();
+        Object instance = null;
+        if (faces == null) {
+            return null;
+        }
+        if (binding != null) {
+            instance = binding.getValue(faces.getELContext());
+        }
+        if (instance == null && type != null) {
+            try {
+                instance = ReflectionUtils.newInstance(((String) type.getValue(faces.getELContext())));
+            } catch (Exception e) {
+                throw new AbortProcessingException(e.getMessage(), e);
+            }
+
+            if (binding != null) {
+                binding.setValue(faces.getELContext(), instance);
+            }
+        }
+
+        return instance;
+
+    }
+
+    public static void setUnitTestModeEnabled(boolean enabled) {
+        unitTestModeEnabled = enabled;
+    }
+
+    public static boolean isUnitTestModeEnabled() {
+        return unitTestModeEnabled;
+    }
+
+    public static TransformerFactory createTransformerFactory() {
+         ClassLoader cl = Thread.currentThread().getContextClassLoader();
+         TransformerFactory factory;
+         try {
+             Thread.currentThread().setContextClassLoader(Util.class.getClassLoader());
+             factory = TransformerFactory.newInstance();
+         } finally {
+             Thread.currentThread().setContextClassLoader(cl);
+         }
+         return factory;
+     }
+
+    public static SAXParserFactory createSAXParserFactory() {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        SAXParserFactory factory;
+        try {
+            Thread.currentThread().setContextClassLoader(Util.class.getClassLoader());
+            factory = SAXParserFactory.newInstance();
+        } finally {
+            Thread.currentThread().setContextClassLoader(cl);
+        }
+        return factory;
+    }
+
+    public static DocumentBuilderFactory createDocumentBuilderFactory() {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        DocumentBuilderFactory factory;
+        try {
+            Thread.currentThread().setContextClassLoader(Util.class.getClassLoader());
+            factory = DocumentBuilderFactory.newInstance();
+        } finally {
+            Thread.currentThread().setContextClassLoader(cl);
+        }
+        return factory;
+    }
+
+    public static SchemaFactory createSchemaFactory(String uri) {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        SchemaFactory factory;
+        try {
+            Thread.currentThread().setContextClassLoader(Util.class.getClassLoader());
+            factory = SchemaFactory.newInstance(uri);
+        } finally {
+            Thread.currentThread().setContextClassLoader(cl);
+        }
+        return factory;
+    }
+
+
+    public static Class loadClass(String name,
+                                  Object fallbackClass)
+        throws ClassNotFoundException {
+        ClassLoader loader = Util.getCurrentLoader(fallbackClass);
+        
+        String[] primitiveNames = { "byte", "short", "int", "long", "float", "double", "boolean", "char" };
+        Class[] primitiveClasses = { byte.class, short.class, int.class, long.class, float.class, double.class, boolean.class, char.class };
+        
+        for(int i=0; i<primitiveNames.length; i++) {
+            if (primitiveNames[i].equals(name)) {
+                return primitiveClasses[i];
+            }
+        }
+        // Where to begin...
+        // JDK 6 introduced CR 6434149 where one couldn't pass
+        // in a literal for an array type ([Ljava.lang.String) and
+        // get the Class representation using ClassLoader.loadClass().
+        // It was recommended to use Class.forName(String, boolean, ClassLoader)
+        // for all ClassLoading requests.
+        // HOWEVER, when trying to eliminate the need for .groovy extensions
+        // being specified in the faces-config.xml for Groovy-based artifacts,
+        // by using an adapter to the GroovyScriptEngine, I found that the class
+        // instance was cached somewhere, so that no matter what change I made,
+        // Class.forName() always returned the same instance.  I haven't been
+        // able to determine why this happens in the appserver environment
+        // as the same adapter in a standalone program works as one might expect.
+        // So, for now, if the classname starts with '[', then use Class.forName()
+        // to avoid CR 643419 and for all other cases, use ClassLoader.loadClass().
+        if (loader.getClass() == com.sun.faces.scripting.groovy.GroovyHelperImpl.MojarraGroovyClassLoader.class) {
+            if (name.charAt(0) == '[') {
+                return Class.forName(name, true, loader);
+            } else {
+                return loader.loadClass(name);
+            }
+        }        
+        return Class.forName(name, true, loader);
+    }
+
+
+    public static ClassLoader getCurrentLoader(Object fallbackClass) {
+        ClassLoader loader = getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return loader;
+    }
+
+    private static ClassLoader getContextClassLoader() {
+        if (System.getSecurityManager() == null) {
+            return Thread.currentThread().getContextClassLoader();
+        } else {
+            return (ClassLoader)
+                java.security.AccessController.doPrivileged(
+                    new java.security.PrivilegedAction() {
+                        public java.lang.Object run() {
+                            return Thread.currentThread().getContextClassLoader();
+                        }
+                    });
+        }
+    }
+
+
+    public static String removeAllButLastSlashPathSegment(String input) {
+        // Trim the leading lastSlash, if any.
+        if (input.charAt(0) == '/') {
+            input = input.substring(1);
+        }
+        int len = input.length();
+        // Trim the trailing lastSlash, if any.
+        if (input.charAt(len - 1) == '/') {
+            input = input.substring(0, len - 1);
+        }
+        
+        // Trim any path segments that remain, leaving only the 
+        // last path segment.
+        int slash = input.lastIndexOf("/");
+        
+        // Do we have a "/"?
+        if (-1 != slash) {
+            input = input.substring(slash + 1);
+        }
+        
+        return input;
+    }
+    
+    public static String removeAllButNextToLastSlashPathSegment(String input) {
+        // Trim the leading lastSlash, if any.
+        if (input.charAt(0) == '/') {
+            input = input.substring(1);
+        }
+        int len = input.length();
+        // Trim the trailing lastSlash, if any.
+        if (input.charAt(len - 1) == '/') {
+            input = input.substring(0, len - 1);
+        }
+        
+        // Trim any path segments that remain, leaving only the 
+        // last path segment.
+        int lastSlash = input.lastIndexOf("/");
+        
+        // Do we have a "/"?
+        if (-1 != lastSlash) {
+        
+            int startOrPreviousSlash = input.lastIndexOf("/", lastSlash - 1);
+            startOrPreviousSlash = (-1 == startOrPreviousSlash) ? 0 : startOrPreviousSlash;
+            
+            input = input.substring(startOrPreviousSlash, lastSlash);
+        }
+        
+        return input;
+    }
+    
+    public static String removeLastPathSegment(String input) {
+        int slash = input.lastIndexOf("/");
+        
+        // Do we have a "/"?
+        if (-1 != slash) {
+            input = input.substring(0, slash);
+        }
+        
+        return input;
+    }
+
+    /*
+     * Apply a series of conventions to the component to arrive at a potential
+     * flowId, which may or may not correspond to an actual defined flow.
+     * 
+     * Assume the target is a UIViewRoot.
+     * 
+     * Get its viewId.
+     * 
+     * Strip the leading lastSlash, if any.
+     * 
+     * If the viewId has multiple segments assume the next to last is the flowId.
+     * 
+     * Otherwise, remove the extension and assume the result is the flowId.
+     * 
+     * 
+     */
+    public static String getFlowIdFromComponent(FacesContext context, UIComponent target) {
+        String result = "";
+        if (target instanceof javax.faces.component.UIViewRoot) {
+            result = Util.removeAllButNextToLastSlashPathSegment(((javax.faces.component.UIViewRoot)target).getViewId());
+            
+            int dot = result.indexOf(".");
+            if (-1 != dot) {
+                result = result.substring(0, dot);
+            }
+        }
+        
+        return result;
+    }
+
+    
+
+    public static void notNull(String varname, Object var) {
+
+        if (var == null) {
+            throw new NullPointerException(
+                  MessageUtils.getExceptionMessageString(
+                      MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, varname));
+        }
+        
+    }
+
+
+    /**
+     * @param context the <code>FacesContext</code> for the current request
+     * @return the Locale from the UIViewRoot, the the value of Locale.getDefault()
+     */
+    public static Locale getLocaleFromContextOrSystem(FacesContext context) {
+        Locale result, temp = Locale.getDefault();
+        UIViewRoot root;
+        result = temp;
+        if (null != context && null != (root = context.getViewRoot()) && null == (result = root.getLocale())) {
+            result = temp;
+        }
+        return result;
+    }
+
+
+    public static Converter getConverterForClass(Class converterClass,
+                                                 FacesContext context) {
+        if (converterClass == null) {
+            return null;
+        }
+        try {            
+            Application application = context.getApplication();
+            return (application.createConverter(converterClass));
+        } catch (Exception e) {
+            return (null);
+        }
+    }
+
+
+    public static Converter getConverterForIdentifer(String converterId,
+                                                     FacesContext context) {
+        if (converterId == null) {
+            return null;
+        }
+        try {            
+            Application application = context.getApplication();
+            return (application.createConverter(converterId));
+        } catch (Exception e) {
+            return (null);
+        }
+    }
+
+
+    public static StateManager getStateManager(FacesContext context)
+        throws FacesException {
+        return (context.getApplication().getStateManager());
+    }
+    
+    public static Class getTypeFromString(String type) throws ClassNotFoundException {
+        Class result;
+        if (type.equals("byte")) {
+            result = Byte.TYPE;
+        } else if (type.equals("short")) {
+            result = Short.TYPE;
+        } else if (type.equals("int")) {
+            result = Integer.TYPE;
+        } else if (type.equals("long")) {
+            result = Long.TYPE;
+        } else if (type.equals("float")) {
+            result = Float.TYPE;
+        } else if (type.equals("double")) {
+            result = Double.TYPE;
+        } else if (type.equals("boolean")) {
+            result = Boolean.TYPE;
+        } else if (type.equals("char")) {
+            result = Character.TYPE;
+        } else if (type.equals("void")) {
+            result = Void.TYPE;
+        } else {
+            if (type.indexOf('.') == -1) {
+                type = "java.lang." + type;
+            }
+            result = Util.loadClass(type, Void.TYPE);
+        }
+
+        return result;
+    }
+
+
+    public static ViewHandler getViewHandler(FacesContext context)
+        throws FacesException {
+        // Get Application instance
+        Application application = context.getApplication();
+        assert (application != null);
+
+        // Get the ViewHandler
+        ViewHandler viewHandler = application.getViewHandler();
+        assert (viewHandler != null);
+
+        return viewHandler;
+    }
+
+
+    public static boolean componentIsDisabled(UIComponent component) {
+
+        return (Boolean.valueOf(String.valueOf(component.getAttributes().get("disabled"))));
+
+    }
+
+
+    public static boolean componentIsDisabledOrReadonly(UIComponent component) {
+        return Boolean.valueOf(String.valueOf(component.getAttributes().get("disabled"))) || Boolean.valueOf(String.valueOf(component.getAttributes().get("readonly")));
+    }
+
+
+    // W3C XML specification refers to IETF RFC 1766 for language code
+    // structure, therefore the value for the xml:lang attribute should
+    // be in the form of language or language-country or
+    // language-country-variant.
+
+    public static Locale getLocaleFromString(String localeStr)
+        throws IllegalArgumentException {
+        // length must be at least 2.
+        if (null == localeStr || localeStr.length() < 2) {
+            throw new IllegalArgumentException("Illegal locale String: " +
+                                               localeStr);
+        }
+        Locale result = null;
+        
+        try {
+            Method method = Locale.class.getMethod("forLanguageTag", String.class);
+            if (method != null) {
+                result = (Locale) method.invoke(null, localeStr);
+            }
+        } catch(Throwable throwable) {
+            // if we are NOT running JavaSE 7 we end up here and we will 
+            // default to the previous way of determining the Locale below.
+        }
+
+        if (result == null || result.getLanguage().equals("")) {
+            String lang = null;
+            String country = null;
+            String variant = null;
+            char[] seps = {
+                '-',
+                '_'
+            };
+            int inputLength = localeStr.length();
+            int i = 0;
+            int j = 0;
+
+            // to have a language, the length must be >= 2
+            if ((inputLength >= 2) &&
+                ((i = indexOfSet(localeStr, seps, 0)) == -1)) {
+                // we have only Language, no country or variant
+                if (2 != localeStr.length()) {
+                    throw new
+                        IllegalArgumentException("Illegal locale String: " +
+                                                 localeStr);
+                }
+                lang = localeStr.toLowerCase();
+            }
+
+            // we have a separator, it must be either '-' or '_'
+            if (i != -1) {
+                lang = localeStr.substring(0, i);
+                // look for the country sep.
+                // to have a country, the length must be >= 5
+                if ((inputLength >= 5) &&
+                    ((j = indexOfSet(localeStr, seps, i + 1)) == -1)) {
+                    // no further separators, length must be 5
+                    if (inputLength != 5) {
+                        throw new
+                            IllegalArgumentException("Illegal locale String: " +
+                                                     localeStr);
+                    }
+                    country = localeStr.substring(i + 1);
+                }
+                if (j != -1) {
+                    country = localeStr.substring(i + 1, j);
+                    // if we have enough separators for language, locale,
+                    // and variant, the length must be >= 8.
+                    if (inputLength >= 8) {
+                        variant = localeStr.substring(j + 1);
+                    } else {
+                        throw new
+                            IllegalArgumentException("Illegal locale String: " +
+                                                     localeStr);
+                    }
+                }
+            }
+            if (variant != null && country != null && lang != null) {
+                result = new Locale(lang, country, variant);
+            } else if (lang != null && country != null) {
+                result = new Locale(lang, country);
+            } else if (lang != null) {
+                result = new Locale(lang, "");
+            }
+        }
+        
+        return result;
+    }
+
+    /**
+     * @param str local string
+     * @param set the substring
+     * @param fromIndex starting index
+     * @return starting at <code>fromIndex</code>, the index of the
+     *         first occurrence of any substring from <code>set</code> in
+     *         <code>toSearch</code>, or -1 if no such match is found
+     */
+    public static int indexOfSet(String str, char[] set, int fromIndex) {
+        int result = -1;
+        for (int i = fromIndex, len = str.length(); i < len; i++) {
+            for (int j = 0, innerLen = set.length; j < innerLen; j++) {
+                if (str.charAt(i) == set[j]) {
+                    result = i;
+                    break;
+                }
+            }
+            if (-1 != result) {
+                break;
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * <p>Leverage the Throwable.getStackTrace() method to produce a String
+     * version of the stack trace, with a "\n" before each line.</p>
+     *
+     * @param e the Throwable to obtain the stacktrace from
+     *
+     * @return the String representation ofthe stack trace obtained by calling
+     *         getStackTrace() on the passed in exception.  If null is passed
+     *         in, we return the empty String.
+     */
+    public static String getStackTraceString(Throwable e) {
+        if (null == e) {
+            return "";
+        }
+
+        StackTraceElement[] stacks = e.getStackTrace();
+        StringBuffer sb = new StringBuffer();
+        for (StackTraceElement stack : stacks) {
+            sb.append(stack.toString()).append('\n');
+        }
+        return sb.toString();
+    }
+
+    /**
+     * <p>PRECONDITION: argument <code>response</code> is non-null and
+     * has a method called <code>getContentType</code> that takes no
+     * arguments and returns a String, with no side-effects.</p>
+     *
+     * <p>This method allows us to get the contentType in both the
+     * servlet and portlet cases, without introducing a compile-time
+     * dependency on the portlet api.</p>
+     *
+     * @param response the current response
+     * @return the content type of the response
+     */
+    public static String getContentTypeFromResponse(Object response) {
+        String result = null;
+        if (null != response) {           
+
+            try {
+                Method method = ReflectionUtils.lookupMethod(
+                      response.getClass(),
+                      "getContentType",
+                      RIConstants.EMPTY_CLASS_ARGS
+                );
+                if (null != method) {
+                    Object obj =
+                          method.invoke(response, RIConstants.EMPTY_METH_ARGS);
+                    if (null != obj) {
+                        result = obj.toString();
+                    }
+                }
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+        return result;
+    }
+
+    public static FeatureDescriptor getFeatureDescriptor(String name, String
+        displayName, String desc, boolean expert, boolean hidden, 
+        boolean preferred, Object type, Boolean designTime) {
+            
+        FeatureDescriptor fd = new FeatureDescriptor();
+        fd.setName(name);
+        fd.setDisplayName(displayName);
+        fd.setShortDescription(desc);
+        fd.setExpert(expert);
+        fd.setHidden(hidden);
+        fd.setPreferred(preferred);
+        fd.setValue(ELResolver.TYPE, type);
+        fd.setValue(ELResolver.RESOLVABLE_AT_DESIGN_TIME, designTime);
+        return fd;
+    }
+   
+
+    /**
+     * <p>A slightly more efficient version of 
+     * <code>String.split()</code> which caches
+     * the <code>Pattern</code>s in an LRUMap instead of
+     * creating a new <code>Pattern</code> on each
+     * invocation.</p>
+     * @param appMap the Application Map
+     * @param toSplit the string to split
+     * @param regex the regex used for splitting
+     * @return the result of <code>Pattern.spit(String, int)</code>
+     */
+    public synchronized static String[] split(Map<String, Object> appMap, String toSplit, String regex) {
+        Map<String, Pattern> patternCache = getPatternCache(appMap);
+        Pattern pattern = patternCache.get(regex);
+        if (pattern == null) {
+            pattern = Pattern.compile(regex);
+            patternCache.put(regex, pattern);
+        }
+        return  pattern.split(toSplit, 0);
+    }
+
+     public synchronized static String[] split(ServletContext sc,
+             String toSplit, String regex) {
+        Map<String, Pattern> patternCache = getPatternCache(sc);
+        Pattern pattern = patternCache.get(regex);
+        if (pattern == null) {
+            pattern = Pattern.compile(regex);
+            patternCache.put(regex, pattern);
+        }
+        return  pattern.split(toSplit, 0);
+    }
+
+
+    /**
+     * <p>Returns the URL pattern of the
+     * {@link javax.faces.webapp.FacesServlet} that
+     * is executing the current request.  If there are multiple
+     * URL patterns, the value returned by
+     * <code>HttpServletRequest.getServletPath()</code> and
+     * <code>HttpServletRequest.getPathInfo()</code> is
+     * used to determine which mapping to return.</p>
+     * If no mapping can be determined, it most likely means
+     * that this particular request wasn't dispatched through
+     * the {@link javax.faces.webapp.FacesServlet}.
+     *
+     * @param context the {@link FacesContext} of the current request
+     *
+     * @return the URL pattern of the {@link javax.faces.webapp.FacesServlet}
+     *         or <code>null</code> if no mapping can be determined
+     *
+     * @throws NullPointerException if <code>context</code> is null
+     */
+    public static String getFacesMapping(FacesContext context) {
+
+        if (context == null) {
+            String message = MessageUtils.getExceptionMessageString
+                  (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
+            throw new NullPointerException(message);
+        }
+
+        // Check for a previously stored mapping   
+        ExternalContext extContext = context.getExternalContext();
+        String mapping =
+              (String) RequestStateManager.get(context, RequestStateManager.INVOCATION_PATH);
+
+        if (mapping == null) {
+         
+            // first check for javax.servlet.forward.servlet_path
+            // and javax.servlet.forward.path_info for non-null
+            // values.  if either is non-null, use this
+            // information to generate determine the mapping.
+
+            String servletPath = extContext.getRequestServletPath();
+            String pathInfo = extContext.getRequestPathInfo();
+
+            mapping = getMappingForRequest(servletPath, pathInfo);
+            if (mapping == null && LOGGER.isLoggable(Level.FINE)) {
+                LOGGER.log(Level.FINE,
+                        "jsf.faces_servlet_mapping_cannot_be_determined_error",
+                        new Object[]{servletPath});
+            }
+        }
+        
+        // if the FacesServlet is mapped to /* throw an 
+        // Exception in order to prevent an endless 
+        // RequestDispatcher loop
+        //if ("/*".equals(mapping)) {
+        //    throw new FacesException(MessageUtils.getExceptionMessageString(
+        //          MessageUtils.FACES_SERVLET_MAPPING_INCORRECT_ID));
+        //}
+
+        if (mapping != null) {
+            RequestStateManager.set(context,
+                                    RequestStateManager.INVOCATION_PATH,
+                                    mapping);
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE,
+                       "URL pattern of the FacesServlet executing the current request "
+                       + mapping);
+        }
+        return mapping;
+    }
+
+    /**
+     * <p>Return the appropriate {@link javax.faces.webapp.FacesServlet} mapping
+     * based on the servlet path of the current request.</p>
+     *
+     * @param servletPath the servlet path of the request
+     * @param pathInfo    the path info of the request
+     *
+     * @return the appropriate mapping based on the current request
+     *
+     * @see javax.servlet.http.HttpServletRequest#getServletPath()
+     */
+    private static String getMappingForRequest(String servletPath, String pathInfo) {
+
+        if (servletPath == null) {
+            return null;
+        }
+        if (LOGGER.isLoggable(Level.FINE)) {
+            LOGGER.log(Level.FINE, "servletPath " + servletPath);
+            LOGGER.log(Level.FINE, "pathInfo " + pathInfo);
+        }
+        // If the path returned by HttpServletRequest.getServletPath()
+        // returns a zero-length String, then the FacesServlet has
+        // been mapped to '/*'.
+        if (servletPath.length() == 0) {
+            return "/*";
+        }
+
+        // presence of path info means we were invoked
+        // using a prefix path mapping
+        if (pathInfo != null) {
+            return servletPath;
+        } else if (servletPath.indexOf('.') < 0) {
+            // if pathInfo is null and no '.' is present, assume the
+            // FacesServlet was invoked using prefix path but without
+            // any pathInfo - i.e. GET /contextroot/faces or
+            // GET /contextroot/faces/
+            return servletPath;
+        } else {
+            // Servlet invoked using extension mapping
+            return servletPath.substring(servletPath.lastIndexOf('.'));
+        }
+    }
+    
+    
+    /**
+     * <p>Returns true if the provided <code>url-mapping</code> is
+     * a prefix path mapping (starts with <code>/</code>).</p>
+     *
+     * @param mapping a <code>url-pattern</code>
+     * @return true if the mapping starts with <code>/</code>
+     */
+    public static boolean isPrefixMapped(String mapping) {
+        return (mapping.charAt(0) == '/');
+    }
+
+    public static boolean isSpecialAttributeName(String name) {
+        boolean isSpecialAttributeName = name.equals("action")  ||
+                            name.equals("actionListener") || name.equals("validator")
+                            || name.equals("valueChangeListener");
+        return isSpecialAttributeName;
+    }
+
+
+    /**
+     * @param ctx the {@link FacesContext} for the current request
+     * @param viewToRender the {@link UIViewRoot} to check
+     * @return <code>true</code> if the {@link FacesContext} attributes map
+     *  contains a reference to the {@link UIViewRoot}'s view ID
+     */
+    public static boolean isViewPopulated(FacesContext ctx, UIViewRoot viewToRender) {
+
+        return ctx.getAttributes().containsKey(viewToRender);
+
+    }
+
+
+    /**
+     * <p>
+     * Flag the specified {@link UIViewRoot} as populated.
+     * </p>
+     * @param ctx the {@link FacesContext} for the current request
+     * @param viewToRender the {@link UIViewRoot} to mark as populated
+     */
+    public static void setViewPopulated(FacesContext ctx,
+                                        UIViewRoot viewToRender) {
+
+        ctx.getAttributes().put(viewToRender, Boolean.TRUE);
+
+    }
+
+
+    /**
+     * Utility method to validate ID uniqueness for the tree represented
+     * by <code>component</code>.
+     */
+    public static void checkIdUniqueness(FacesContext context,
+                                          UIComponent component,
+                                          Set<String> componentIds) {
+
+        boolean uniquenessCheckDisabled = false;
+        
+        if (context.isProjectStage(ProjectStage.Production)) {
+            WebConfiguration config = WebConfiguration.getInstance(context.getExternalContext());
+            uniquenessCheckDisabled = config.isOptionEnabled(
+                WebConfiguration.BooleanWebContextInitParameter.DisableIdUniquenessCheck);
+        }
+        
+        if (!uniquenessCheckDisabled) {
+        
+            // deal with children/facets that are marked transient.
+            for (Iterator<UIComponent> kids = component.getFacetsAndChildren();
+                kids.hasNext();) {
+
+                UIComponent kid = kids.next();
+                // check for id uniqueness
+                String id = kid.getClientId(context);
+                if (componentIds.add(id)) {
+                    checkIdUniqueness(context, kid, componentIds);
+                } else {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE,
+                                   "jsf.duplicate_component_id_error",
+                                   id);
+
+
+                        FastStringWriter writer = new FastStringWriter(128);
+                        DebugUtil.simplePrintTree(context.getViewRoot(), id, writer);
+                        LOGGER.severe(writer.toString());
+                    }
+
+                    String message =
+                          MessageUtils.getExceptionMessageString(
+                                MessageUtils.DUPLICATE_COMPONENT_ID_ERROR_ID, id);
+                    throw new IllegalStateException(message);
+                }
+            }
+        }
+    }
+
+    static public boolean classHasAnnotations(Class<?> clazz) {
+        if (clazz != null) {
+            while (clazz != Object.class) {
+                Field[] fields = clazz.getDeclaredFields();
+                if (fields != null) {
+                    for (Field field : fields) {
+                        if (field.getAnnotations().length > 0) {
+                            return true;
+                        }
+                    }
+                }
+
+                Method[] methods = clazz.getDeclaredMethods();
+                if (methods != null) {
+                    for (Method method : methods) {
+                        if (method.getDeclaredAnnotations().length > 0) {
+                            return true;
+                        }
+                    }
+                }
+
+                clazz = clazz.getSuperclass();
+            }
+        }
+
+        return false;
+    }
+    
+    public static String getViewStateId(FacesContext context) {
+        String result = null;
+        final String viewStateCounterKey = "com.sun.faces.util.ViewStateCounterKey";
+        Map<Object, Object> contextAttrs = context.getAttributes();
+        Integer counter = (Integer) contextAttrs.get(viewStateCounterKey);
+        if (null == counter) {
+            counter = Integer.valueOf(0);
+        }
+        
+        char sep = UINamingContainer.getSeparatorChar(context);
+        UIViewRoot root = context.getViewRoot();
+        result = root.getContainerClientId(context) + sep + 
+                ResponseStateManager.VIEW_STATE_PARAM + sep +
+                + counter;
+        contextAttrs.put(viewStateCounterKey, ++counter);
+        
+        return result;
+    }
+
+    public static String getClientWindowId(FacesContext context) {
+        String result = null;
+        final String clientWindowIdCounterKey = "com.sun.faces.util.ClientWindowCounterKey";
+        Map<Object, Object> contextAttrs = context.getAttributes();
+        Integer counter = (Integer) contextAttrs.get(clientWindowIdCounterKey);
+        if (null == counter) {
+            counter = Integer.valueOf(0);
+        }
+        
+        char sep = UINamingContainer.getSeparatorChar(context);
+        result = context.getViewRoot().getContainerClientId(context) + sep + 
+                ResponseStateManager.CLIENT_WINDOW_PARAM + sep + counter;
+        contextAttrs.put(clientWindowIdCounterKey, ++counter);
+        
+        return result;
+    }
+
+    private static final String FACES_CONTEXT_ATTRIBUTES_DOCTYPE_KEY = Util.class.getName() + "_FACES_CONTEXT_ATTRS_DOCTYPE_KEY";
+    
+    public static void saveDOCTYPEToFacesContextAttributes(String DOCTYPE) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (null == context) {
+            return;
+        }
+        Map<Object, Object> attrs = context.getAttributes();
+        attrs.put(FACES_CONTEXT_ATTRIBUTES_DOCTYPE_KEY, DOCTYPE);
+        
+    }
+    
+    public static String getDOCTYPEFromFacesContextAttributes(FacesContext context) {
+        if (null == context) {
+            return null;
+        }
+        Map<Object, Object> attrs = context.getAttributes();
+        return (String) attrs.get(FACES_CONTEXT_ATTRIBUTES_DOCTYPE_KEY);
+    }
+    
+    private static final String FACES_CONTEXT_ATTRIBUTES_XMLDECL_KEY = Util.class.getName() + "_FACES_CONTEXT_ATTRS_XMLDECL_KEY";
+    
+    public static void saveXMLDECLToFacesContextAttributes(String XMLDECL) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (null == context) {
+            return;
+        }
+        Map<Object, Object> attrs = context.getAttributes();
+        attrs.put(FACES_CONTEXT_ATTRIBUTES_XMLDECL_KEY, XMLDECL);
+        
+    }
+    
+    public static String getXMLDECLFromFacesContextAttributes(FacesContext context) {
+        if (null == context) {
+            return null;
+        }
+        Map<Object, Object> attrs = context.getAttributes();
+        return (String) attrs.get(FACES_CONTEXT_ATTRIBUTES_XMLDECL_KEY);
+    }
+    
+    public static long getLastModified(URL url) {
+        long lastModified;
+        URLConnection conn;
+        InputStream is = null;
+
+        try {
+            conn = url.openConnection();
+
+            if (conn instanceof JarURLConnection) { 
+                /*
+                 * Note this is a work around for JarURLConnection since the
+                 * getLastModified method is buggy. See JAVASERVERFACES-2725
+                 * and JAVASERVERFACES-2734.
+                 */
+                JarURLConnection jarUrlConnection = (JarURLConnection) conn; 
+                URL jarFileUrl = jarUrlConnection.getJarFileURL(); 
+                URLConnection jarFileConnection = jarFileUrl.openConnection(); 
+                lastModified = jarFileConnection.getLastModified(); 
+                jarFileConnection.getInputStream().close(); 
+            }
+            else { 
+                is = conn.getInputStream(); 
+                lastModified = conn.getLastModified(); 
+            } 
+        } catch (Exception e) { 
+            throw new FacesException("Error Checking Last Modified for " + url, e);
+        } finally {
+            if (is != null) {
+                try { 
+                    is.close();
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        LOGGER.log(Level.FINEST, "Closing stream", e);
+                    }
+                }
+            }
+        }
+        return lastModified;
+    }
+
+} // end of class Util
diff --git a/com/sun/faces/util/cdi11/CDIUtil.java b/com/sun/faces/util/cdi11/CDIUtil.java
new file mode 100644
index 0000000..07a6ef0
--- /dev/null
+++ b/com/sun/faces/util/cdi11/CDIUtil.java
@@ -0,0 +1,66 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.util.cdi11;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+
+/*
+ * This interface will only ever be loaded and accessed in CDI 1.1 or greater
+ * runtimes.
+ * 
+ */
+
+public interface CDIUtil {
+    
+    /*
+     * Allow for the programmatic instantiation of a CDI bean "on demand", 
+     * so to speak.  This is in contrast to the usual way of CDI beans, 
+     * where instantiation happens lazily.
+     * 
+     * Two clients of this interface are the CDI extensions for ViewScoped
+     * and FlowScoped so that they may fire the Initialized and Destroyed
+     * events as necessary.
+     * 
+     */
+    Bean createHelperBean(BeanManager beanManager, Class beanClass);
+    
+}
diff --git a/com/sun/faces/util/cdi11/CDIUtilImpl.java b/com/sun/faces/util/cdi11/CDIUtilImpl.java
new file mode 100644
index 0000000..f976152
--- /dev/null
+++ b/com/sun/faces/util/cdi11/CDIUtilImpl.java
@@ -0,0 +1,176 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package com.sun.faces.util.cdi11;
+
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.enterprise.inject.spi.InjectionTargetFactory;
+import javax.enterprise.util.AnnotationLiteral;
+
+public class CDIUtilImpl implements Serializable, CDIUtil {
+    
+    private static final long serialVersionUID = -8101770583567814803L;
+    
+    public CDIUtilImpl() {
+        
+    }
+    
+    @Override
+    public Bean createHelperBean(BeanManager beanManager, Class beanClass) {
+       BeanWrapper result = null;
+       
+       AnnotatedType annotatedType = beanManager.createAnnotatedType(
+               beanClass );
+       
+       InjectionTargetFactory factory = beanManager.getInjectionTargetFactory(annotatedType);
+       
+       result = new BeanWrapper(beanClass);
+       //use this to create the class and inject dependencies
+       final InjectionTarget injectionTarget =
+               factory.createInjectionTarget(result);
+       result.setInjectionTarget(injectionTarget);
+       
+       return result;
+   }
+   
+   
+   private static class BeanWrapper implements Bean {
+       private Class beanClass;
+       private InjectionTarget injectionTarget = null;
+       
+       public BeanWrapper( Class beanClass) {
+           this.beanClass = beanClass;
+           
+       }
+       private void setInjectionTarget(InjectionTarget injectionTarget) {
+           this.injectionTarget = injectionTarget;
+       }
+       
+       @Override
+       public Class<?> getBeanClass() {
+           return beanClass;
+       }
+       
+       @Override
+       public Set<InjectionPoint> getInjectionPoints() {
+           return injectionTarget.getInjectionPoints();
+       }
+       
+       @Override
+       public String getName() {
+           return null;
+       }
+       
+       @Override
+       public Set<Annotation> getQualifiers() {
+           Set<Annotation> qualifiers = new HashSet<Annotation>();
+           qualifiers.add( new DefaultAnnotationLiteral());
+           qualifiers.add( new AnyAnnotationLiteral());
+           return qualifiers;
+       }
+       
+       public static class DefaultAnnotationLiteral extends AnnotationLiteral<Default> {
+           private static final long serialVersionUID = -9065007202240742004L;           
+           
+       }
+       
+       public static class AnyAnnotationLiteral extends AnnotationLiteral<Any> {
+           private static final long serialVersionUID = -4700109250603725375L;
+       }
+       
+       @Override
+       public Class<? extends Annotation> getScope() {
+           return Dependent.class;
+       }
+       
+       @Override
+       public Set<Class<? extends Annotation>> getStereotypes() {
+           return Collections.emptySet();
+       }
+       
+       @Override
+       public Set<Type> getTypes() {
+           Set<Type> types = new HashSet<Type>();
+           types.add( beanClass );
+           types.add( Object.class );
+           return types;
+       }
+       
+       @Override
+       public boolean isAlternative() {
+           return false;
+       }
+       
+       @Override
+       public boolean isNullable() {
+           return false;
+       }
+       
+       @Override
+       public Object create( CreationalContext ctx ) {
+           Object instance = injectionTarget.produce( ctx );
+           injectionTarget.inject( instance, ctx );
+           injectionTarget.postConstruct( instance );
+           return instance;
+       }
+       
+       @Override
+       public void destroy( Object instance, CreationalContext ctx ) {
+           injectionTarget.preDestroy( instance );
+           injectionTarget.dispose( instance );
+           ctx.release();
+       }
+   }   
+    
+}
diff --git a/com/sun/faces/vendor/WebContainerInjectionProvider.java b/com/sun/faces/vendor/WebContainerInjectionProvider.java
new file mode 100644
index 0000000..9fa1ea1
--- /dev/null
+++ b/com/sun/faces/vendor/WebContainerInjectionProvider.java
@@ -0,0 +1,244 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.vendor;
+
+import com.sun.faces.spi.InjectionProvider;
+import com.sun.faces.spi.InjectionProviderException;
+import com.sun.faces.util.FacesLogger;
+
+import javax.annotation.PreDestroy;
+import javax.annotation.PostConstruct;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.annotation.Annotation;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+/**
+ * <p>This <code>InjectionProvider</code> will be used if the
+ * <code>PostConstruct</code> and <code>PreDestroy</code> annotations
+ * are present, but no specific <code>InjectionProvider</code> has
+ * been configured.</p>.
+ *
+ * <p>It's important to note that this will not provide resource injection.</p>
+ */
+public class WebContainerInjectionProvider implements InjectionProvider {
+
+
+    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
+
+
+    // ------------------------------------------ Methods from InjectionProvider
+
+
+    public void inject(Object managedBean) throws InjectionProviderException {
+
+        // no-op
+
+    }
+
+    public void invokePreDestroy(Object managedBean)
+    throws InjectionProviderException {
+
+        if (managedBean != null) {
+            invokeAnnotatedMethod(getAnnotatedMethod(managedBean,
+                                                     PreDestroy.class),
+                                  managedBean);
+        }
+
+    }
+
+    public void invokePostConstruct(Object managedBean)
+    throws InjectionProviderException {
+
+
+        if (managedBean != null) {
+            invokeAnnotatedMethod(getAnnotatedMethod(managedBean,
+                                                     PostConstruct.class),
+                                  managedBean);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static void invokeAnnotatedMethod(Method method, Object managedBean)
+    throws InjectionProviderException {
+
+        if (method != null) {
+            boolean accessible = method.isAccessible();
+            method.setAccessible(true);
+            try {
+                method.invoke(managedBean);
+            } catch (Exception e) {
+                throw new InjectionProviderException(e.getMessage(), e);
+            } finally {
+                method.setAccessible(accessible);
+            }
+        }
+
+    }
+    
+    private static class MethodHolder {
+        
+        private final Method method;
+
+        public MethodHolder(Method method){
+            this.method = method;
+        }
+
+        public Method getMethod() {
+            return method;
+        }
+    }
+    
+    private static ConcurrentHashMap<Class, ConcurrentHashMap<Class<? extends Annotation>, MethodHolder>> methodsPerClazz =
+            new ConcurrentHashMap<Class, ConcurrentHashMap<Class<? extends Annotation>, MethodHolder>>();
+
+
+    private static Method getAnnotatedMethod(Object managedBean,
+                                             Class<? extends Annotation> annotation) {
+
+        Class<?> clazz = managedBean.getClass();
+        while (!Object.class.equals(clazz)) {
+            
+            ConcurrentHashMap<Class<? extends Annotation>, MethodHolder> methodsMap = methodsPerClazz.get(clazz);
+            
+            if(methodsMap==null) {
+                
+                ConcurrentHashMap<Class<? extends Annotation>, MethodHolder> newMethodsMap = 
+                        new ConcurrentHashMap<Class<? extends Annotation>, MethodHolder>();
+                
+                methodsMap = methodsPerClazz.putIfAbsent(clazz, newMethodsMap);
+                
+                if(methodsMap==null) {
+                    methodsMap = newMethodsMap;
+                }                           
+            }
+            
+            MethodHolder methodHolder = methodsMap.get(annotation);
+            
+            if(methodHolder==null) {
+                Method[] methods = clazz.getDeclaredMethods();
+                Method method = getAnnotatedMethodForMethodArr(methods, annotation);
+                
+                MethodHolder newMethodHolder = new MethodHolder(method);
+                
+                methodHolder = methodsMap.putIfAbsent(annotation, newMethodHolder);
+
+                if(methodHolder==null) {
+                    methodHolder = newMethodHolder;
+                }
+            }
+
+            if(methodHolder.getMethod()!=null) {
+                return methodHolder.getMethod();
+            }
+
+            clazz = clazz.getSuperclass();
+        }
+
+        return null;
+    }
+
+    private static Method getAnnotatedMethodForMethodArr(Method[] methods, Class<? extends Annotation> annotation) {
+        for (Method method : methods) {
+            if (method.isAnnotationPresent(annotation)) {
+                // validate method
+                if (Modifier.isStatic(method.getModifiers())) {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.core.web.injection.method_not_static",
+                                   new Object[] { method.toString(),
+                                                  annotation.getName() });
+                    }
+                    continue;
+                }
+                if (!Void.TYPE.equals(method.getReturnType())) {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.core.web.injection.method_return_not_void",
+                                   new Object[] { method.toString(),
+                                                  annotation.getName() });
+                    }
+                    continue;
+                }
+                if (method.getParameterTypes().length != 0) {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        LOGGER.log(Level.WARNING,
+                                   "jsf.core.web.injection.method_no_params",
+                                   new Object[] { method.toString(),
+                                                  annotation.getName() });
+                    }
+                    continue;
+                }
+                Class<?>[] exceptions = method.getExceptionTypes();
+                if (method.getExceptionTypes().length != 0) {
+                    boolean hasChecked = false;
+                    for (Class<?> excClass : exceptions) {
+                        if (!RuntimeException.class.isAssignableFrom(excClass)) {
+                            hasChecked = true;
+                            break;
+                        }
+                    }
+                    if (hasChecked) {
+                        if (LOGGER.isLoggable(Level.WARNING)) {
+                            LOGGER.log(Level.WARNING,
+                                 "jsf.core.web.injection.method_no_checked_exceptions",
+                                 new Object[]{method.toString(),
+                                      annotation.getName()});
+                        }
+                        continue;
+                    }
+                }
+                // we found a match.
+                return method;
+            }
+        }
+
+        return null;
+    }
+
+
+}
diff --git a/common/ant/bin/cb.bat b/common/ant/bin/cb.bat
deleted file mode 100644
index 53e9b48..0000000
--- a/common/ant/bin/cb.bat
+++ /dev/null
@@ -1,129 +0,0 @@
- at echo off
-
-REM
-REM DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-REM 
-REM Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-REM 
-REM The contents of this file are subject to the terms of either the GNU
-REM General Public License Version 2 only ("GPL") or the Common Development
-REM and Distribution License("CDDL") (collectively, the "License").  You
-REM may not use this file except in compliance with the License. You can obtain
-REM a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-REM or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-REM language governing permissions and limitations under the License.
-REM 
-REM When distributing the software, include this License Header Notice in each
-REM file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-REM Sun designates this particular file as subject to the "Classpath" exception
-REM as provided by Sun in the GPL Version 2 section of the License file that
-REM accompanied this code.  If applicable, add the following below the License
-REM Header, with the fields enclosed by brackets [] replaced by your own
-REM identifying information: "Portions Copyrighted [year]
-REM [name of copyright owner]"
-REM 
-REM Contributor(s):
-REM 
-REM If you wish your version of this file to be governed by only the CDDL or
-REM only the GPL Version 2, indicate your decision by adding "[Contributor]
-REM elects to include this software in this distribution under the [CDDL or GPL
-REM Version 2] license."  If you don't indicate a single choice of license, a
-REM recipient has the option to distribute your version of this file under
-REM either the CDDL, the GPL Version 2 or to extend the choice of license to
-REM its licensees as provided above.  However, if you add GPL Version 2 code
-REM and therefore, elected the GPL Version 2 license, then the option applies
-REM only if the new code is made subject to such option by the copyright
-REM holder.
-REM
-
-REM 
-REM List all files added, modified, and removed from a cvs repository
-REM 
-REM For this to work, you will need to make sure the following utilities
-REM are either in your path or in the current working directory:
-REM     cut.exe
-REM     grep.exe
-REM     wc.exe
-REM     zip.exe
-REM These files can be obtained here: http://unxutils.sourceforge.net/
-
-set FILE=cb.temp.txt
-set MOD_FILE=cb.chk.mods.txt
-set ADD_FILE=cb.chk.add.txt
-set REM_FILE=cb.chk.rem.txt
-set CB=changebundle.txt
-set ZIP=newfiles.zip
-set DUMMY=zipdummy.txt
-
-echo Scanning for modifications...
-
-svn status 2>&1 | grep -v "^cvs server:" > %FILE%
-
-type %FILE% | grep "^M " > %MOD_FILE%
-type %FILE% | grep "^A " > %ADD_FILE%
-type %FILE% | grep "^D " > %REM_FILE%
-
-for /f "tokens=*" %%F in ('wc -l cb.chk.*.txt ^| grep -v "^      0 "') do (
-	goto :CHANGES
-)
-
-echo No modifications - change bundle creation not necessary.
-goto :END
-
-:CHANGES
-echo Modifications found.  Generating change bundle...
-
-echo -- ADD DESCRIPTION HERE https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=XXXX -- > %CB%
-echo. >> %CB%
-echo. >> %CB%
-
-echo ******************************************************************* >> %CB%
-echo * SECTION: Modified Files >> %CB%
-echo ******************************************************************* >> %CB%
-for /f "tokens=*" %%F in ('wc -l %MOD_FILE% ^| grep -v "      0"') do (
-	type %MOD_FILE% >> %CB%
-	echo. >> %CB%
-	echo. >> %CB%
-)
-for /f "tokens=*" %%F in ('wc -l %ADD_FILE% ^| grep -v "      0"') do (
-	type %ADD_FILE% >> %CB%
-	echo. >> %CB%
-	echo. >> %CB%
-)
-for /f "tokens=*" %%F in ('wc -l %REM_FILE% ^| grep -v "      0"') do (
-	type %REM_FILE% >> %CB%
-	echo. >> %CB%
-	echo. >> %CB%
-)
-
-echo. >> %CB%
-echo ******************************************************************* >> %CB%
-echo * SECTION: Diffs >> %CB%
-echo ******************************************************************* >> %CB%
-
-svn diff 2>&1 | grep -v "^cvs server:" | grep -v "^\?"  >> %CB%
-
-for /f "tokens=*" %%F in ('wc -l %ADD_FILE% ^| grep -v "      0"') do (
-	echo ******************************************************************* >> %CB%
-	echo * SECTION: New Files >> %CB%
-	echo ******************************************************************* >> %CB%
-	echo SEE ATTACHMENTS >> %CB%
-	echo. >> %CB%
-	echo Creating ZIP file with new files...
-	del %ZIP%
-	echo. > %DUMMY%
-	zip %ZIP% %DUMMY%
-	type %ADD_FILE% | cut -c3- | zip %ZIP% -@
-	zip -d %ZIP% %DUMMY%
-	del %DUMMY%
-	echo.
-	echo ZIP file, newfiles.zip, created.
-)
-
-rem "C:\Program Files\Windows NT\Accessories\wordpad.exe" %CB%
-
-:END
-del %FILE%
-del %MOD_FILE%
-del %ADD_FILE%
-del %REM_FILE%
diff --git a/common/ant/bin/cb.sh b/common/ant/bin/cb.sh
deleted file mode 100644
index eda7ba4..0000000
--- a/common/ant/bin/cb.sh
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/bin/bash
-
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-# 
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-# 
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-# 
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-# 
-# Contributor(s):
-# 
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-
-#
-# List all files added, modified, and removed from a subversion repository
-#
-
-FILE=/tmp/lmtxt
-CB=$PWD/changebundle.txt
-DIFF=/tmp/diff.txt
-ZIP=newfiles.zip
-
-echo "Scanning for modifications..."
-
-svn status > $FILE 2>&1
-
-modifiedFiles=`grep ^"M " $FILE`
-addedFiles=`grep ^"A " $FILE`
-removedFiles=`grep ^"D " $FILE`
-
-if [[ -z "$modifiedFiles" && -z "$addedFiles" && -z "$removedFiles" ]] 
-then
-    echo "No modifications - change bundle creation not necessary."
-    exit 0;
-fi 
-
-echo -n "Modifications found..."
-
-echo "" > $CB
-echo "<< ADD DESCRIPTION HERE https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=XXXX >>" >> $CB
-echo "" >> $CB
-echo "" >> $CB
-
-if [[ -n "$modifiedFiles" || -n "$addedFiles" || -n "$removedFiles" ]] 
-then
-    echo "SECTION: Modified Files" >> $CB
-    echo "----------------------------" >> $CB
-
-    if [ -n "$modifiedFiles" ]; then
-        grep ^"M " $FILE >> $CB
-        echo "" >> $CB
-        echo "" >> $CB
-    fi
-
-    if [ -n "$addedFiles" ]; then
-        grep ^"A " $FILE >> $CB
-        echo "" >> $CB
-        echo "" >> $CB
-    fi
-
-    if [ -n "$removedFiles" ]; then
-        grep ^"D " $FILE >> $CB
-        echo "" >> $CB
-        echo "" >> $CB
-    fi
-    
-    if [ -n "$modifiedFiles" ]; then
-        echo "SECTION: Diffs" >> $CB
-        echo "----------------------------" >> $CB
-        svn diff > $DIFF
-        grep -v ^\? $DIFF >> $CB
-    fi
-
-    echo "" >> $CB
-    echo "" >> $CB
-fi
-
-
-if [ -n "$addedFiles" ]; then
-    echo "SECTION: New Files" >> $CB
-    echo "----------------------------" >> $CB
-    echo "SEE ATTACHMENTS" >> $CB
-    
-    echo ""
-    echo "Creating ZIP file with new files..."
-    echo ""
-    if [ -e "$ZIP" ]; then
-        rm -rf newfiles.zip
-    fi
-
-    touch test.txt
-    zip newfiles.zip test.txt
-    for line in `cat $FILE | grep ^"A " | awk '{print $2}'`; 
-    do
-        zip -u newfiles.zip $line
-    done
-    zip -d newfiles.zip test.txt
-    rm test.txt
-    echo ""
-    echo "ZIP file, newfiles.zip, created."
-fi
-
-rm $FILE
-rm $DIFF
-
-echo ""
-
-echo "Change bundle complete."
diff --git a/common/ant/common.xml b/common/ant/common.xml
deleted file mode 100644
index 64e4da0..0000000
--- a/common/ant/common.xml
+++ /dev/null
@@ -1,442 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in complicomance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-      
-<project name="JSF Common" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
-
-    <import file="${jsf.build.home}/common/ant/${container.name}/container.xml"/>
-    <import file="${jsf.build.home}/common/ant/dependencies.xml"/>
-    <import file="${jsf.build.home}/common/ant/maven.xml"/>
-    <taskdef resource="net/sf/antcontrib/antlib.xml">
-        <classpath>
-            <pathelement
-                  location="${jsf.build.home}/common/lib/ant-contrib.jar"/>
-        </classpath>
-    </taskdef>
-    <taskdef resource="aQute/bnd/ant/taskdef.properties">
-        <classpath>
-            <pathelement
-                  location="${jsf.build.home}/common/lib/bnd-0.0.249.jar"/>
-        </classpath>
-    </taskdef>
-
-    <taskdef name="installerBuilder" classname="org.jvnet.poormans_installer.builder.BuilderTask">
-        <classpath>
-            <pathelement location="${jsf.build.home}/common/lib/installer-builder.jar"/>
-            <pathelement location="${jsf.build.home}/common/lib/sfx4j-1.0.jar"/>
-        </classpath>
-    </taskdef>
-    <path id="maven-ant-tasks.classpath" path="${jsf.build.home}/common/lib/maven-ant-tasks-2.0.10.jar" />
-      <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
-               uri="antlib:org.apache.maven.artifact.ant"
-               classpathref="maven-ant-tasks.classpath" />
-
-    
-    <!-- Setup the time properties for use with the project -->
-    <tstamp/>
-    
-    <!-- Properties needed throughout the project -->
-
-    <!-- Structural -->
-    <property name="api.dir" value="${jsf.build.home}/jsf-api"/>
-    <property name="mvn.api.dir" value="${api.dir}/build/mvn" />
-    <property name="impl.dir" value="${jsf.build.home}/jsf-ri"/>
-    <property name="mvn.impl.dir" value="${jsf.build.home}/jsf-ri/build/mvn"/>
-    <property name="tools.dir" value="${jsf.build.home}/jsf-tools"/>    
-    <property name="demo.dir" value="${jsf.build.home}/jsf-demo"/>
-    <property name="spec.snapshot.dir" 
-              value="${demo.dir}/dist/spec-snapshot" />
-    <property name="impl.test.results.dir" value="${impl.dir}/testresults"/>
-    <property name="api.test.results.dir" value="${api.dir}/testresults"/>
-
-    <!-- Artifacts of interest -->
-    <property name="jsf-api.jar" value="${api.dir}/build/lib/jsf-api.jar"/>
-    <property name="jsf-tools.jar" value="${tools.dir}/build/lib/jsf-tools.jar"/>
-    <property name="jsf-impl.jar" value="${impl.dir}/build/lib/jsf-impl.jar"/>   
-    <property name="jsf.test.jar" value="${jsf.build.home}/lib/jsf-extensions-test-time.jar"/>    
-    <property name="installer.jar" value="${jsf.build.home}/common/lib/installer-builder.jar"/>
-    <property name="javanettasks.jar" value="${jsf.build.home}/common/lib/javanettasks-1.0.5.jar"/>
-    <property name="standard.renderkit.xml" value="${api.dir}/doc/standard-html-renderkit.xml"/>
-
-    <!-- Version -->
-    <property name="spec.version" value="2.0"/>
-    <property name="spec.snapshot.version" value="2.1-SNAPSHOT"/>
-    <property name="patch.version" value="3"/>
-    <property name="impl.name" value="Mojarra"/>
-    <property name="build.number" value="${DSTAMP}"/>
-    <property name="build.type" value="SNAPSHOT"/>
-    <property name="impl.version.number" value="${spec.version}.${patch.version}" />
-    <property name="impl.version" value="${impl.version.number}-${build.type}"/>
-    <property name="full.impl.version" value="${impl.version.number} (${build.number}-${build.type})"/>
-    <property name="snapshot.version" value="${impl.version.number}-SNAPSHOT"/>
-
-    <!-- Environment -->
-    <property environment="myenv" />
-    <property name="http.proxy.host" value=""/>
-    <property name="http.proxy.port" value=""/>
-
-    <!-- Change bundle -->
-    <property name="change.bundle.dir" value="${jsf.build.home}/common/ant/bin" />
-
-    <!-- Debug args (OVERRIDE IN BUILD.PROPERTIES) -->
-    <property name="debug.jvm.args" value=""/>
-
-    <!--  TODO remove this once maven stuff is complete, it's just here for reference.
-
-    <target name="mvn-init" unless="compile.classpath" xmlns:artifact="urn:maven-artifact-ant">
-        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
-            classpath="lib/maven-ant-tasks-2.0.9.jar"/>
-        <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
-            <isset property="maven.repo.local"/>
-        </condition>
-        <echo>maven.repo.local=${maven.repo.local}</echo>
-        <artifact:localRepository id="local.repository" path="${maven.repo.local}"/>
-        <artifact:pom file="pom.xml" id="maven.project"/>
-        <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile">
-            <pom refid="maven.project"/>
-            <localRepository refid="local.repository"/>
-        </artifact:dependencies>
-        <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test">
-            <pom refid="maven.project"/>
-            <localRepository refid="local.repository"/>
-        </artifact:dependencies>
-        <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime">
-            <pom refid="maven.project"/>
-            <localRepository refid="local.repository"/>
-        </artifact:dependencies>
-    </target>
-
-    -->
-    <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
-        <isset property="maven.repo.local"/>
-    </condition>
-    <artifact:localRepository id="local.repository" path="${maven.repo.local}"/>
-    
-    <artifact:remoteRepository id="jboss.repo" url="http://repository.jboss.com/maven2/"/>
-    <artifact:remoteRepository id="j.n.repo" url="http://download.java.net/maven/2/"/>
-    <artifact:remoteRepository id="gf.repo" url="http://download.java.net/maven/glassfish/"/>
-    <artifact:remoteRepository id="gf.nexus.repo" url="http://maven.glassfish.org/content/groups/glassfish/"/>
-    <artifact:remoteRepository id="codehaus.repo" url="http://repository.codehaus.org/"/>
-    <artifact:remoteRepository id="ibiblio.repo" url="http://mirrors.ibiblio.org/pub/mirrors/maven2/"/>
-
-    <artifact:dependencies filesetId="compile.filepath" pathId="compile.path">
-        <dependency groupId="javax.el" artifactId="el-api" version="1.0" scope="provided"/>
-        <dependency groupId="org.glassfish" artifactId="javax.servlet" version="3.0-SNAPSHOT" scope="provided"/>
-        <dependency groupId="javax.servlet.jsp" artifactId="jsp-api" version="2.1" scope="provided"/>
-        <dependency groupId="javax.annotation" artifactId="jsr250-api" version="1.0" scope="provided"/>
-        <dependency groupId="org.codehaus.groovy" artifactId="groovy-all" version="1.6.4" scope="provided"/>
-        <dependency groupId="javax.validation" artifactId="validation-api" version="1.0.0.GA" scope="provided"/>
-        <dependency groupId="jstl" artifactId="jstl" version="1.2" scope="provided" />
-        <dependency groupId="com.sun.el" artifactId="el-ri" version="1.0" scope="provided"/>
-        <localRepository refid="local.repository"/>
-        <remoteRepository refid="j.n.repo"/>
-        <remoteRepository refid="gf.repo"/>
-        <remoteRepository refid="gf.nexus.repo"/>
-        <remoteRepository refid="jboss.repo"/>  <!-- needed for validation-api -->
-    </artifact:dependencies>
-    
-    <artifact:dependencies filesetId="commons.filepath" pathId="commons.path">
-        <dependency groupId="commons-collections" artifactId="commons-collections" version="2.1.1"/>
-        <dependency groupId="commons-digester" artifactId="commons-digester" version="1.5"/>
-        <dependency groupId="commons-beanutils" artifactId="commons-beanutils" version="1.6.1"/>
-        <dependency groupId="commons-logging" artifactId="commons-logging" version="1.0.4"/>
-        <localRepository refid="local.repository"/>
-        <remoteRepository refid="gf.nexus.repo"/>
-    </artifact:dependencies>
-
-    <artifact:dependencies filesetId="servlet25test.filepath" pathId="servlet25test.path">
-        <dependency groupId="javax.el" artifactId="el-api" version="1.0" scope="provided"/>
-        <dependency groupId="javax.servlet" artifactId="servlet-api" version="2.5"/>
-        <dependency groupId="javax.servlet.jsp" artifactId="jsp-api" version="2.1" scope="provided"/>
-        <dependency groupId="javax.servlet.jsp.jstl" artifactId="jstl-api" version="1.2" scope="provided"/>
-        <dependency groupId="javax.annotation" artifactId="jsr250-api" version="1.0" scope="provided"/>
-        <localRepository refid="local.repository"/>
-        <remoteRepository refid="gf.nexus.repo"/>
-    </artifact:dependencies>
-
-    <!-- Test classpaths that are used in multiple places within the project -->
-    <path id="junit.classpath">
-        <pathelement location="${junit.jar}"/>
-    </path>
-
-    <path id="jsf.test.jar.classpath">
-        <pathelement location="${jsf.test.jar}"/>
-    </path>
-
-    <path id="htmlunit.compile.classpath">
-        <path refid="junit.classpath"/>
-        <fileset dir="${htmlunit.home}/lib" includes="htmlunit*.jar,
-                                                      commons-httpclient*.jar"/>
-    </path>
-
-    <path id="htmlunit.runtime.classpath">
-        <path refid="junit.classpath"/>
-        <fileset dir="${htmlunit.home}/lib" includes="*.jar"/>
-    </path>
-
-    <!-- Make sure to compile/run with the special cactus jar 
-         in our source repository, rather than the stock version -->
-    <path id="cactus.compile.classpath">
-        <path refid="junit.classpath"/>
-        <fileset dir="${jsf.build.home}/lib" includes="cactus-*.jar"/>
-        <fileset dir="${cactus.home}/lib" includes="cactus-*.jar" excludes="*ant*.jar"/>
-    </path>            
-
-    <path id="cactus.runtime.classpath">
-        <path refid="junit.classpath"/>
-        <fileset refid="servlet25test.filepath" />
-        <fileset dir="${cactus.home}/lib" includes="*.jar"  excludes="cactus-1.*.jar"/>
-        <fileset dir="${jsf.build.home}/lib" includes="cactus-*.jar"/>
-    </path>
-
-    <path id="compile.classpath">
-        <path refid="compile.path"/>
-    </path>
-
-    <path id="apache.commons.classpath">
-        <path refid="commons.path"/>
-    </path>
-
-    <!-- Common Targets -->
-
-    <!-- Convenience macro for javac -->
-    <macrodef name="jsf.javac">        
-        <attribute name="srcdir"/>
-        <attribute name="destdir"/>
-        <attribute name="includes" default=""/>
-        <attribute name="excludes" default=""/>
-        <attribute name="source" default="1.5"/>
-        <attribute name="target" default="1.5"/>
-        <element name="classpath" implicit="true" optional="yes"/>
-        <sequential>           
-            <javac srcdir="@{srcdir}"
-                   destdir="@{destdir}"
-                   debug="${compile.debug}"
-                   deprecation="${compile.deprecation}"
-                   source="@{source}"
-                   target="@{target}"
-                   includes="@{includes}"
-                   excludes="@{excludes}">
-                <classpath/>
-            </javac>
-        </sequential>
-    </macrodef>
-
-    <!-- Convenience wrapper for junit -->
-    <macrodef name="jsf.junit">
-        <attribute name="classpath-refid"/>
-        <attribute name="context-path" default=""/>
-        <attribute name="test-results-dir"/>
-        <attribute name="assert.classes" default=""/>
-        <attribute name="logging.config.file" default=""/>
-        <attribute name="explodedWarDir" default=""/>
-        <element name="tests" optional="true"/>
-        <element name="custom-sysproperties" optional="true"/>
-        <element name="suite" optional="true"/>
-        <sequential>
-            <junit printsummary="yes"
-                   fork="yes"
-                   haltonfailure="${halt.on.failure}"
-                   haltonerror="${halt.on.failure}">
-                <jvmarg line="${debug.jvm.args}"/>
-                <jvmarg line="@{assert.classes}"/>
-                <classpath refid="@{classpath-refid}"/>
-                <formatter type="plain" usefile="false"/>
-                <formatter type="xml" usefile="true"/>
-                <sysproperty key="host" value="${container.host}"/>
-                <sysproperty key="port" value="${container.port}"/>
-                <sysproperty key="context.path" value="@{context-path}"/>
-                <sysproperty key="explodedWarDir" value="@{explodedWarDir}"/>
-                <sysproperty key="java.util.logging.config.file" 
-                             value="@{logging.config.file}"/>
-                <custom-sysproperties/>
-                <batchtest todir="@{test-results-dir}">
-                    <tests/>
-                </batchtest>
-                <suite/>
-            </junit>
-        </sequential>
-    </macrodef>
-
-    <!-- Conveninece macro for building WARs -->
-    <macrodef name="jsf.war">
-        <attribute name="basedir"/>
-        <attribute name="archive-name"/>
-        <attribute name="webxml"/>
-        <element name="archive-elements" optional="true"/>
-        <sequential>
-            <echo message="Creating archive '@{archive-name}'..."/>
-
-            <jar destfile="@{basedir}/@{archive-name}.war">
-                <zipfileset file="@{webxml}"
-                            prefix="WEB-INF"/>
-                <archive-elements/>
-            </jar>
-            <if>
-                <equals arg1="${build.standalone}" arg2="true"/>
-                <then>
-                    <echo message="Adding dependent libraries..."/>
-
-                    <for list="${jsf-impl.jar},${jsf-api.jar},${webapp.jars}"
-                         param="jar">
-                        <sequential>
-                            <echo message="JAR: @{jar}"/>
-                            <jar destfile="@{basedir}/@{archive-name}.war"
-                                 update="true">
-                                <zipfileset file="@{jar}" prefix="WEB-INF/lib"/>
-                            </jar>
-                        </sequential>
-                    </for>
-
-                </then>
-                <else>
-                    <echo message="Will not package dependent libraries..."/>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <!--
-       Build a JAR file which includes a manifest including
-       information pertaining to Sun's JavaServer Faces
-       implementation.
-    -->
-    <macrodef name="jsf.manifested.jar">
-        <attribute name="jarfile"/>
-        <attribute name="basedir"/>
-        <attribute name="extension-name"/>
-        <attribute name="excludes" default=""/>
-        <attribute name="includes" default=""/>
-        <sequential>
-            <jar jarfile="@{jarfile}"
-                 basedir="@{basedir}"
-                 excludes="@{excludes}"
-                 includes="@{includes}">
-                <manifest>
-                    <attribute name="Specification-Title"
-                               value="JavaServer Faces"/>
-                    <attribute name="Specification-Version"
-                               value="${spec.version}"/>
-                    <attribute name="Implementation-Title"
-                               value="${impl.name}"/>
-                    <attribute name="Implementation-Version"
-                               value="${impl.version}"/>
-                    <attribute name="Implementation-Vendor"
-                               value="Sun Microsystems, Inc."/>
-                    <attribute name="Implementation-Vendor-Id"
-                               value="com.sun"/>
-                    <attribute name="Extension-Name"
-                               value="@{extension-name}"/>
-                </manifest>                
-            </jar>
-        </sequential>
-    </macrodef>
-
-    <!--
-       Build an OSGi bundle
-    -->
-    <macrodef name="jsf.osgi.jar">
-        <attribute name="jarfile"/>
-        <attribute name="basedir"/>
-        <attribute name="bndfile"/>
-        <attribute name="extension-name"/>
-        <attribute name="excludes" default=""/>
-        <attribute name="includes" default=""/>
-        <sequential>
-            <bnd
-                classpath="@{basedir}"
-                failok="false"
-                exceptions="false"
-                files="@{bndfile}"
-                output="@{jarfile}"/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="jsf.generate.html.components">
-        <attribute name="output-dir"/>
-
-        <sequential>
-            <mkdir dir="${tools.dir}/build/classes"/>
-            <jsf.javac srcdir="${tools.dir}/src/main/java"
-                   destdir="${tools.dir}/build/classes">
-                <classpath>
-                    <path refid="compile.classpath"/>  
-                    <path refid="apache.commons.classpath"/>
-                </classpath>
-            </jsf.javac>
-            <taskdef name="generateComponents"
-                     classname="com.sun.faces.ant.ComponentGenTask">
-                <classpath>
-                    <pathelement location="${tools.dir}/build/classes"/>
-                </classpath>
-            </taskdef>
-            <generateComponents
-                  generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-                  facesConfig="${standard.renderkit.xml}"
-                  fork="true">
-                <classpath>
-                    <path refid="compile.classpath"/>
-                    <pathelement location="${jsf-api.jar}"/>
-                    <pathelement location="${tools.dir}/build/classes"/>
-                </classpath>
-                <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            </generateComponents>
-        </sequential>
-    </macrodef>
-
-    <!-- Change bundle target(s) -->
-
-    <target name="cb" description="Create a change bundle for review">
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="bash" failonerror="true">
-                        <arg line="${change.bundle.dir}/cb.sh"/>
-                    </exec>
-                </then>
-                <elseif>
-                    <os family="windows"/>
-                    <then>
-                        <exec executable="${change.bundle.dir}/cb.bat" failonerror="true"/>
-                    </then>
-                </elseif>
-                <else>
-                    <echo message="Your platform is not currently supported." />
-                </else>
-            </if>
-    </target>
-</project>
diff --git a/common/ant/dependencies.xml b/common/ant/dependencies.xml
deleted file mode 100644
index 27837fe..0000000
--- a/common/ant/dependencies.xml
+++ /dev/null
@@ -1,741 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<project name="JSF Dependencies" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
-
-    <!-- 
-        Current Dependencies
-           HtmlUnit 2.4
-           Cactus 1.3-1.7.1
-           JUnit 3.8.1
-           Taglibrary Document Generator 1.3
-           Maven java.net repository importer 1.2
-    -->
-
-    <property name="dependency.base.dir" value="${jsf.build.home}/dependencies"/>
-    <property name="dependency.jar.dir" value="${dependency.base.dir}/jars"/>
-    <property name="junit.version" value="3.8.1"/>
-    <property name="htmlunit.version" value="2.4"/>
-    <property name="cactus.version" value="13-1.7.2"/>
-    <!-- Note that if changing the Apache Commons versions
-         you must also change the versions in the source loading code -->
-    <property name="beanutils.version" value="1.6.1"/>
-    <property name="digester.version" value="1.5"/>
-    <property name="collections.version" value="2.1"/>
-    <property name="logging.version" value="1.0.4"/>
-    <property name="taglibdoc.version" value="1.3"/>
-    <property name="jsdoc.version" value="2.0.2"/>
-    <property name="servlet.api.version" value="2.5"/>
-    <property name="newer.servlet.api.version" value="3.0"/>
-    <property name="jsp.api.version" value="2.1"/>
-    <property name="jstl.api.version" value="1.2"/>
-    <property name="annotation.api.version" value="1.0"/>
-    <property name="portlet.api.version" value="1.0"/>
-    <property name="groovy.version" value="1.6.4"/>
-    <property name="el.version" value="1.0"/>
-    <property name="validation.version" value="1.0.0.GA" />
-    <property name="bean-validator.version" value="3.0-JBoss-4.0.0.Beta3"/>
-    <property name="maven.repository.importer.version" value="1.2"/>
-    <property name="yuicompressor.version" value="2.4.2"/>
-
-    <property name="redhat.maven2" value="http://repository.jboss.org/maven2"/>
-    <!--<property name="maven2.mirror" value="http://mirrors.ibiblio.org/pub/mirrors/maven2"/>-->
-    <property name="maven2.mirror" value="http://repo.exist.com/maven2/"/>
-    <property name="java.net.maven" value="http://download.java.net/maven/1"/>
-    <property name="java.net.maven2" value="http://download.java.net/maven/2"/>
-    <property name="codehaus.maven" value="http://repository.codehaus.org"/>
-    <property name="download.java.net" value="http://download.java.net/javaee5/external/shared"/>
-    <property name="jboss.maven2" value="http://repository.jboss.com/maven2"/>
-
-    <property name="junit.home" value="${dependency.base.dir}/junit${junit.version}"/>
-    <property name="htmlunit.home" value="${dependency.base.dir}/htmlunit-${htmlunit.version}"/>
-    <property name="cactus.home" value="${dependency.base.dir}/jakarta-cactus-${cactus.version}"/>
-    <property name="beanutils.home" value="${dependency.base.dir}/commons-beanutils-${beanutils.version}"/>
-    <property name="digester.home" value="${dependency.base.dir}/commons-digester-${digester.version}"/>
-    <property name="collections.home" value="${dependency.base.dir}/commons-collections-${collections.version}"/>
-    <property name="logging.home" value="${dependency.base.dir}/commons-logging-${logging.version}"/>
-    <property name="taglibdoc.home" value="${dependency.base.dir}/taglibrarydoc-${taglibdoc.version}"/>
-    <property name="jsdoc.home" value="${dependency.base.dir}/jsdoc_toolkit-${jsdoc.version}"/>
-    <property name="maven.repository.importer.home"
-              value="${dependency.base.dir}/maven-repository-importer-${maven.repository.importer.version}"/>
-    <property name="servlet.home" value="${dependency.base.dir}/servlet-${servlet.api.version}"/>
-    <property name="newer.servlet.home" value="${dependency.base.dir}/servlet-${newer.servlet.api.version}"/>
-    <property name="jsp.home" value="${dependency.base.dir}/jsp-${jsp.api.version}"/>
-    <property name="jstl.home" value="${dependency.base.dir}/jstl-${jstl.api.version}"/>
-    <property name="annotation.home" value="${dependency.base.dir}/annotation-${annotation.api.version}"/>
-    <property name="yuicompressor.home" value="${dependency.base.dir}/yuicompressor-${yuicompressor.version}"/>
-
-    <property name="junit.jar" value="${dependency.jar.dir}/junit-${junit.version}.jar"/>
-    <property name="htmlunit.jar" value="${dependency.jar.dir}/htmlunit-${htmlunit.version}.jar"/>
-    <property name="commons-beanutils.jar" value="${dependency.jar.dir}/commons-beanutils-${beanutils.version}.jar"/>
-    <property name="commons-digester.jar" value="${dependency.jar.dir}/commons-digester-${digester.version}.jar"/>
-    <property name="commons-collections.jar" value="${dependency.jar.dir}/commons-collections-${collections.version}.jar"/>
-    <property name="commons-logging.jar" value="${dependency.jar.dir}/commons-logging-${logging.version}.jar"/>
-    <property name="yuicompressor.jar" value="${dependency.jar.dir}/yuicompressor.jar"/>
-    <property name="tlddoc.jar" value="${dependency.jar.dir}/tlddoc-${taglibdoc.version}.jar"/>
-    <property name="jsdoc.jar" value="${dependency.jar.dir}/jsdoc-${jsdoc.version}.jar"/>
-    <property name="maven.repository.importer.jar"
-              value="${dependency.jar.dir}/maven-repository-importer-${maven.repository.importer.version}.jar"/>
-    <property name="servlet.jar" value="${dependency.jar.dir}/servlet-api-${servlet.api.version}.jar"/>
-    <property name="servlet3.jar" value="${dependency.jar.dir}/servlet-api-${newer.servlet.api.version}.jar"/>
-    <property name="jsp.jar" value="${dependency.jar.dir}/jsp-api-${jsp.api.version}.jar"/>
-    <property name="el-api.jar" value="${dependency.jar.dir}/el-api-${el.version}.jar"/>
-    <property name="el-impl.jar" value="${dependency.jar.dir}/el-impl-${el.version}.jar"/>
-    <property name="jstl.jar" value="${dependency.jar.dir}/jstl-${jstl.api.version}.jar"/>
-    <property name="annotation.jar" value="${dependency.jar.dir}/jsr250-api-${annotation.api.version}.jar"/>
-    <property name="portlet.jar" value="${dependency.jar.dir}/portlet-api-${portlet.api.version}.jar"/>
-    <property name="groovy.jar" value="${dependency.jar.dir}/groovy-all-${groovy.version}.jar"/>
-    <property name="validation-api.jar" value="${dependency.jar.dir}/validation-api-1.0.0.GA.jar"/>
-    <property name="glassfish.download.url" value="http://download.java.net/javaee5/v2ur1/promoted/"/>
-    <property name="glassfish.installer.jar" value="glassfish-installer-v2ur1-b09d-"/>
-
-    <!--  source build properties -->
-    
-    <property name="commons.logging.url" value="http://svn.apache.org/repos/asf/commons/proper/logging/tags/LOGGING_1_0_4/"/>
-    <property name="commons.collections.url" value="http://svn.apache.org/repos/asf/commons/proper/collections/tags/COLLECTIONS_2_1/"/>
-    <property name="commons.beanutils.url" value="http://svn.apache.org/repos/asf/commons/proper/beanutils/tags/BEANUTILS_1_6_1/"/>
-    <property name="commons.digester.url" value="http://svn.apache.org/repos/asf/commons/proper/digester/tags/DIGESTER_1_5"/>
-
-    <property name="commons.logging.name" value="commons-logging"/>
-    <property name="commons.collections.name" value="commons-collections"/>
-    <property name="commons.beanutils.name" value="commons-beanutils"/>
-    <property name="commons.digester.name" value="commons-digester"/>
-
-    <property name="external.dir" value="${dependency.base.dir}/source"/>
-
-
-    <target name="update" description="Download project dependencies">
-
-        <if>
-            <not>
-                <isset property="build.source"/>
-            </not>
-            <then>
-                <mkdir dir="${dependency.base.dir}/downloads"/>
-                <mkdir dir="${dependency.jar.dir}"/>
-            </then>
-        </if>
-
-        <!-- setup the proxy if necessary -->
-        <if>
-            <and>
-                <length string="${http.proxy.host}" when="greater" length="0"/>
-                <length string="${http.proxy.port}" when="greater" length="0"/>
-            </and>
-            <then>
-                <setproxy proxyhost="${http.proxy.host}"
-                          proxyport="${http.proxy.port}"/>
-            </then>
-        </if>
-
-        <!-- JUNIT -->
-        <if>
-            <and>
-            <not>
-                <available file="${junit.jar}" property="ignored"/>
-            </not>
-                <not>
-                    <isset property="build.source"/>
-                </not>
-            </and>
-            <then>
-                <get src="${java.net.maven2}/junit/junit/${junit.version}/junit-${junit.version}.jar"
-                     dest="${junit.jar}"
-                     usetimestamp="true"/>
-            </then>
-        </if>
-
-        <!-- HTMLUNIT -->
-        <!--
-        This one needs a ton of extras, so we have to do this one like this or
-        add a bunch more deps.  Maybe another day... :)
-        -->
-        <if>
-            <and>
-                <not>
-                    <available file="${htmlunit.home}" property="ignored"/>
-                </not>
-                <not>
-                    <isset property="build.source"/>
-                </not>
-            </and>
-            <then>
-                <get src="http://downloads.sourceforge.net/htmlunit/htmlunit-${htmlunit.version}.zip"
-                     dest="${dependency.base.dir}/downloads/htmlunit-${htmlunit.version}.zip"
-                     usetimestamp="true"/>
-                <unzip
-                        src="${dependency.base.dir}/downloads/htmlunit-${htmlunit.version}.zip"
-                        dest="${dependency.base.dir}"/>
-            </then>
-        </if>
-
-        <!-- YUI Compressor -->
-        <if>
-            <and>
-                <not>
-                    <available file="${yuicompressor.home}" property="ignored"/>
-                </not>
-                <not>
-                    <isset property="build.source"/>
-                </not>
-            </and>
-            <then>
-                <get src="http://www.julienlecomte.net/yuicompressor/yuicompressor-${yuicompressor.version}.zip"
-                     dest="${dependency.base.dir}/downloads/yuicompressor-${yuicompressor.version}.zip"
-                     usetimestamp="true"/>
-                <unzip
-                        src="${dependency.base.dir}/downloads/yuicompressor-${yuicompressor.version}.zip"
-                        dest="${dependency.base.dir}"/>
-                <copy tofile="${yuicompressor.jar}"
-                      file="${yuicompressor.home}/build/yuicompressor-${yuicompressor.version}.jar"/>
-            </then>
-        </if>
-
-        <!-- CACTUS -->
-        <!-- Is this not in a maven repo somewhere? -->
-        <if>
-            <and>
-                <not>
-                    <available file="${cactus.home}" property="ignored"/>
-                </not>
-                <not>
-                    <isset property="build.source"/>
-                </not>
-            </and>
-            <then>
-                <get src="http://archive.apache.org/dist/jakarta/cactus/binaries/jakarta-cactus-${cactus.version}.zip"
-                     dest="${dependency.base.dir}/downloads/jakarta-cactus-${cactus.version}.zip"
-                     usetimestamp="true"/>
-                <unzip
-                        src="${dependency.base.dir}/downloads/jakarta-cactus-${cactus.version}.zip"
-                        dest="${dependency.base.dir}"/>
-            </then>
-        </if>
-
-        <!-- TAGLIBDOC -->
-        <if>
-            <and>
-            <not>
-                <available file="${tlddoc.jar}" property="ignored"/>
-            </not>
-                <not>
-                    <isset property="build.source"/>
-                </not>
-            </and>
-            <then>
-                <get src="${maven2.mirror}/taglibrarydoc/tlddoc/${taglibdoc.version}/tlddoc-${taglibdoc.version}.jar"
-                     dest="${tlddoc.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-
-        <!-- JSDOC -->
-        <if>
-            <and>
-                <not>
-                    <available file="${jsdoc.home}" property="ignored"/>
-                </not>
-                <not>
-                    <isset property="build.source"/>
-                </not>
-            </and>
-            <then>
-                <get src="http://jsdoc-toolkit.googlecode.com/files/jsdoc_toolkit-${jsdoc.version}.zip"
-                     dest="${dependency.base.dir}/downloads/jsdoc_toolkit-${jsdoc.version}.zip"
-                     usetimestamp="true"/>
-                <unzip
-                        src="${dependency.base.dir}/downloads/jsdoc_toolkit-${jsdoc.version}.zip"
-                        dest="${dependency.base.dir}"/>
-            </then>
-        </if>
-
-
-        <!-- MAVEN REPOSITORY IMPORTER -->
-        <if>
-            <and>
-                <not>
-                    <available file="${maven.repository.importer.jar}" property="ignored"/>
-                </not>
-                <not>
-                    <isset property="build.source"/>
-                </not>
-            </and>
-            <then>
-                <get src="${java.net.maven}/com.sun.wts.tools.mri/jars/maven-repository-importer-${maven.repository.importer.version}.jar"
-                     dest="${maven.repository.importer.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-
-        <!-- SERVLET API -->
-        <if>
-            <not>
-                <available file="${servlet.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${java.net.maven}/javax.servlet/jars/servlet-api-${servlet.api.version}.jar"
-                     dest="${servlet.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-
-        <if>
-            <not>
-                <available file="${servlet3.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="http://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api/3.0.20100224/servlet-api-3.0.20100224.jar"
-                     dest="${servlet3.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-
-
-        <!-- JSP API -->
-        <!--
-        <if>
-            <not>
-                <available file="${jsp.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${java.net.maven}/javax.servlet.jsp/jars/jsp-api-${jsp.api.version}.jar"
-                     dest="${jsp.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-        -->
-        <!-- EL API and IMPL -->
-        <!--
-        <if>
-            <not>
-                <available file="${el-api.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${java.net.maven}/javax.el/jars/el-api-${el.version}.jar"
-                     dest="${el-api.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-        <if>
-            <not>
-                <available file="${el-impl.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${java.net.maven}/el-impl/jars/el-impl-${el.version}.jar"
-                     dest="${el-impl.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-        -->
-        <!-- JSTL API -->
-        <!--
-        <if>
-            <not>
-                <available file="${jstl.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${java.net.maven}/jstl/jars/jstl-${jstl.api.version}.jar"
-                     dest="${jstl.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-       -->
-        <!-- ANNOTATION API -->
-        <!--
-        <if>
-            <not>
-                <available file="${annotation.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${java.net.maven}/javax.annotation/jars/jsr250-api-${annotation.api.version}.jar"
-                     dest="${annotation.jar}"
-                     usetimestamp="true"/>
-
-            </then>
-        </if>
-        -->
-        <!-- Portlet -->
-        <!--
-        <if>
-            <not>
-                <available file="${portlet.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${maven2.mirror}/javax/portlet/portlet-api/${portlet.api.version}/portlet-api-${portlet.api.version}.jar"
-                     dest="${portlet.jar}"
-                     usetimestamp="true"/>
-            </then>
-        </if>
-        -->
-        <!-- Groovy -->
-        <!--
-        <if>
-            <not>
-                <available file="${groovy.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${codehaus.maven}/org/codehaus/groovy/groovy-all/${groovy.version}/groovy-all-${groovy.version}.jar"
-                     dest="${groovy.jar}"
-                     usetimestamp="true"/>
-            </then>
-        </if>
-        -->
-        <!-- JSR 303 -->
-        <!--
-        <if>
-            <not>
-                <available file="${validation-api.jar}" property="ignored"/>
-            </not>
-            <then>
-                <get src="${redhat.maven2}/javax/validation/validation-api/${validation.version}/validation-api-${validation.version}.jar"
-                     dest="${validation-api.jar}"
-                     usetimestamp="true"/>
-            </then>
-        </if>
-        -->
-        <!-- buid commons from source -->
-
-        <!--  comment out source build download of sun commons
-
-        <echo>starting commons and build.source ${build.source}</echo>
-        <if>
-            <equals arg1="${build.source}" arg2="true"/>
-            <then>
-                <echo>build from source</echo>
-                <mkdir dir="${external.dir}"/>
-
-                <exec executable="svn" dir="${external.dir}" failonerror="true">
-                    <arg line="checkout"/>
-                    <arg line="${commons.logging.url}"/>
-                    <arg line="commons-logging"/>
-                </exec>
-
-                <exec executable="svn" dir="${external.dir}" failonerror="true">
-                    <arg line="checkout"/>
-                    <arg line="${commons.collections.url}"/>
-                    <arg line="commons-collections"/>
-                </exec>
-
-                <exec executable="svn" dir="${external.dir}" failonerror="true">
-                    <arg line="checkout"/>
-                    <arg line="${commons.beanutils.url}"/>
-                    <arg line="commons-beanutils"/>
-                </exec>
-
-                <exec executable="svn" dir="${external.dir}" failonerror="true">
-                    <arg line="checkout"/>
-                    <arg line="${commons.digester.url}"/>
-                    <arg line="commons-digester"/>
-                </exec>
-
-                <ant antfile="${external.dir}/commons-logging/build.xml"
-                     target="dist"
-                     dir="${external.dir}/commons-logging"
-                     inheritAll="false" />
-
-                <ant antfile="${external.dir}/commons-collections/build.xml"
-                     target="dist"
-                     dir="${external.dir}/commons-collections"
-                     inheritAll="false">
-                    <property name="ant.build.javac.source" value="1.4"/>
-                </ant>
-
-                <ant antfile="${external.dir}/commons-beanutils/build.xml"
-                     target="dist"
-                     dir="${external.dir}/commons-beanutils"
-                     inheritAll="false">
-                    <property name="commons-collections.home"
-                              value="${external.dir}/commons-collections/dist"/>
-                    <property name="commons-collections.jar" value="${external.dir}/commons-collections/dist/commons-collections.jar"/>
-                    <property name="commons-logging.home" value="${external.dir}/commons-logging/dist"/>
-                    <property name="commons-logging.jar" value="${external.dir}/commons-logging/dist/commons-logging.jar"/>
-                </ant>
-
-                <ant antfile="${external.dir}/commons-digester/build.xml"
-                     target="dist"
-                     dir="${external.dir}/commons-digester"
-                     inheritAll="false">
-                    <property name="commons-collections.home"
-                              value="${external.dir}/commons-collections/dist"/>
-                    <property name="commons-collections.jar" value="${external.dir}/commons-collections/dist/commons-collections.jar"/>
-                    <property name="commons-logging.home" value="${external.dir}/commons-logging/dist"/>
-                    <property name="commons-logging.jar" value="${external.dir}/commons-logging/dist/commons-logging.jar"/>
-                    <property name="commons-beanutils.home" value="${external.dir}/commons-beanutils/dist"/>
-                    <property name="commons-beanutils.jar" value="${external.dir}/commons-beanutils/dist/commons-beanutils.jar"/>
-                </ant>
-                <copy file="${external.dir}/commons-logging/dist/commons-logging.jar" tofile="${commons.logging.jar}"/>
-                <copy file="${external.dir}/commons-collections/dist/commons-collections.jar" tofile="${commons.collections.jar}"/>
-                <copy file="${external.dir}/commons-beanutils/dist/commons-beanutils.jar" tofile="${commons.beanutils.jar}"/>
-                <copy file="${external.dir}/commons-digester/dist/commons-digester.jar" tofile="${commons.digester.jar}"/>
-
-            </then>
-            <else>
-            -->
-
-                <!-- BEANUTILS -->
-                <!--
-                <if>
-                    <not>
-                        <available file="${commons-beanutils.jar}" property="ignored"/>
-                    </not>
-                    <then>
-                        <echo> get beanutils</echo>
-                        <get src="http://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/${beanutils.version}/commons-beanutils-${beanutils.version}.jar"
-                             dest="${commons-beanutils.jar}"
-                             usetimestamp="true"/>
-                    </then>
-                </if>
-                -->
-                <!-- DIGESTER -->
-                <!--
-                <if>
-                    <not>
-                        <available file="${commons-digester.jar}" property="ignored"/>
-                    </not>
-                    <then>
-                        <get src="http://repo1.maven.org/maven2/commons-digester/commons-digester/${digester.version}/commons-digester-${digester.version}.jar"
-                             dest="${commons-digester.jar}"
-                             usetimestamp="true"/>
-                    </then>
-                </if>
-                -->
-                <!-- COLLECTIONS -->
-                <!--
-                <if>
-                    <not>
-                        <available file="${commons-collections.jar}" property="ignored"/>
-                    </not>
-                    <then>
-                        <get src="http://repo1.maven.org/maven2/commons-collections/commons-collections/${collections.version}/commons-collections-${collections.version}.jar"
-                             dest="${commons-collections.jar}"
-                             usetimestamp="true"/>
-                    </then>
-                </if>
-                -->
-                <!-- LOGGING_API -->
-                <!--
-                <if>
-                    <not>
-                        <available file="${commons-logging.jar}" property="ignored"/>
-                    </not>
-                    <then>
-                        <get src="http://repo1.maven.org/maven2/commons-logging/commons-logging/${logging.version}/commons-logging-${logging.version}.jar"
-                             dest="${commons-logging.jar}"
-                             usetimestamp="true"/>
-                    </then>
-                </if>
-                -->
-        <!-- comment out source build of sun commons
-            </else>
-        </if>
-        -->
-    </target>
-
-
-    <property name="glassfish.home"
-              value="${dependency.base.dir}/glassfish"/>
-    <property name="tomcat6.home"
-              value="${dependency.base.dir}/apache-tomcat-6.0.13"/>
-    <property name="glassfish.jar"
-              value="${dependency.base.dir}/glassfish/lib/appserv-rt.jar"/>
-    <property name="tomcat6.jar"
-              value="${tomcat6.home}/lib/catalina.jar"/>
-    <property name="jetty.version.dir" value="6.1.19"/>
-    <property name="jetty.version" value="6.1.19"/>
-    <property name="jetty.home"
-              value="${dependency.base.dir}/jetty-${jetty.version}"/>
-    <property name="jetty.jar"
-              value="${jetty.home}/lib/jetty-${jetty.version}.jar" />
-    <property name="jetty.util.jar"
-              value="${jetty.home}/lib/jetty-util-${jetty.version}.jar" />
-    <property name="jetty.annotations.jar"
-              value="${jetty.home}/lib/annotations/jetty-annotations-${jetty.version}.jar"/>
-    <property name="jetty.plus.jar"
-              value="${jetty.home}/lib/plus/jetty-plus-${jetty.version}.jar"/>
-    <target name="update.containers"
-            description="Downloads containers necessary for building implementation specific additions"
-            depends="detect.os">
-
-
-        <if>
-            <not>
-                <isset property="build.source"/>
-            </not>
-        <then>
-        <if>
-            <not>
-                <available file="${dependency.base.dir}/${glassfish.installer.jar}${fl.os}.jar" property="ignored"/>
-            </not>
-            <then>
-                <!-- The jar is not available, so delete ant dependencies/glassfish dir that may exist and "run" the new jar -->
-                <echo>
-                    The current GlassFish installer jar was not found, so we are deleting any
-                    existing GlassFish installation in the Mojarra tree. We will download the
-                    current version, extract and configure it inside the tree. This will not
-                    affect any glassfish.home pointing to a GlassFish installation outside the
-                    Mojarra tree.
-                </echo>
-                <delete dir="${dependency.base.dir}/glassfish"/>
-                <get src="${glassfish.download.url}/${dl.os}/${glassfish.installer.jar}${fl.os}.jar"
-                     dest="${dependency.base.dir}/${glassfish.installer.jar}${fl.os}.jar"
-                     usetimestamp="true"/>
-            </then>
-        </if>
-
-        <if>
-            <not>
-                <available file="${dependency.base.dir}/glassfish" property="ignored"/>
-            </not>
-            <then>
-                <echo file="${dependency.base.dir}/install.bat">
-                    <![CDATA[
-echo a > input
-java -Xmx256m -jar ${dependency.base.dir}/${glassfish.installer.jar}${fl.os}.jar -console < ./input
-]]>
-                </echo>
-                <chmod file="${dependency.base.dir}/install.bat" perm="700"/>
-                <exec executable="${dependency.base.dir}/install.bat" dir="${dependency.base.dir}"/>
-                <delete file="${dependency.base.dir}/install.bat"/>
-                <delete file="${dependency.base.dir}/input"/>
-                <ant antfile="${dependency.base.dir}/glassfish/setup.xml" dir="${dependency.base.dir}/glassfish"
-                     target="setup"/>
-            </then>
-        </if>
-
-        <if>
-            <not>
-                <available file="${dependency.base.dir}/apache-tomcat-6.0.13.zip"
-                           property="ignored"/>
-            </not>
-            <then>
-                <get src="http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.13/bin/apache-tomcat-6.0.13.zip"
-                     dest="${dependency.base.dir}/apache-tomcat-6.0.13.zip"
-                     usetimestamp="true"/>
-                <unzip
-                        src="${dependency.base.dir}/apache-tomcat-6.0.13.zip"
-                        dest="${dependency.base.dir}"/>
-            </then>
-        </if>
-        <if>
-            <not>
-                <available file="${dependency.base.dir}/jetty-${jetty.version}.zip" property="ignored"/>
-            </not>
-            <then>
-                <get src="http://dist.codehaus.org/jetty/jetty-${jetty.version.dir}/jetty-${jetty.version}.zip"
-                     dest="${dependency.base.dir}/jetty-${jetty.version}.zip"
-                     usetimestamp="true"/>
-                <unzip
-                        src="${dependency.base.dir}/jetty-${jetty.version}.zip"
-                        dest="${dependency.base.dir}"/>
-            </then>
-        </if>
-        </then>
-        </if>
-    </target>
-
-    <target name="detect.os">
-        <condition property="dl.os" value="SunOS">
-            <and>
-                <os name="SunOS"/>
-                <os arch="sparc"/>
-            </and>
-        </condition>
-        <condition property="dl.os" value="SunOS_X86">
-            <and>
-                <os name="SunOS"/>
-                <os arch="x86"/>
-            </and>
-        </condition>
-        <condition property="dl.os" value="WINNT">
-            <os family="winnt"/>
-        </condition>
-        <condition property="dl.os" value="Darwin">
-            <os name="Mac OS X"/>
-        </condition>
-        <condition property="dl.os" value="Linux">
-            <and>
-                <os family="unix"/>
-                <not>
-                    <os name="SunOS"/>
-                </not>
-                <not>
-                    <os name="Max OS X"/>
-                </not>
-            </and>
-        </condition>
-        <condition property="fl.os" value="sunos">
-            <and>
-                <os name="SunOS"/>
-                <os arch="sparc"/>
-            </and>
-        </condition>
-        <condition property="fl.os" value="sunos_x86">
-            <and>
-                <os name="SunOS"/>
-                <os arch="x86"/>
-            </and>
-        </condition>
-        <condition property="fl.os" value="windows">
-            <os family="winnt"/>
-        </condition>
-        <condition property="fl.os" value="darwin">
-            <os name="Mac OS X"/>
-        </condition>
-        <condition property="fl.os" value="linux">
-            <and>
-                <os family="unix"/>
-                <not>
-                    <os name="SunOS"/>
-                </not>
-                <not>
-                    <os name="Max OS X"/>
-                </not>
-            </and>
-        </condition>
-
-    </target>
-
-</project>
diff --git a/common/ant/glassfish/container.xml b/common/ant/glassfish/container.xml
deleted file mode 100644
index e198699..0000000
--- a/common/ant/glassfish/container.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<project name="Test Classpath" basedir=".">        
-
-    <!-- JARs that may be packaged in WEB-INF/lib
-  in order for the implementation to run 
-  properly if they aren't availabe in the
-  container's classloader.  
-   
-  This is a comma separated list of fully
-  qualified JARs -->
-    <property name="webapp.jars" value=""/>
-
-
-    <!-- Required Targets -->
-    
-    <macrodef name="deploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-                
----------------- Glassfish - Deploying @{appName} ---------------- 
-                
-            </echo>
-            <exec executable="${exec.name}" failonerror="true">
-                <arg line="${exec.arg.1}"/>
-                <arg line="deploy"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="@{artifact}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="deploydir.artifact">
-        <attribute name="explodedWarDir"
-                   description="The exploded war directory to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-                
----------------- Glassfish - Deploying @{appName} ---------------- 
-                
-            </echo>
-            <exec executable="${exec.name}" failonerror="true">
-                <arg line="${exec.arg.1}"/>
-                <arg line="deploydir"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="--contextroot @{appName} @{explodedWarDir}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="undeploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-                
----------------- Glassfish - Undeploying @{appName} ---------------- 
-                
-            </echo>
-            <exec executable="${exec.name}">
-                <arg line="${exec.arg.1}"/>
-                <arg line="undeploy"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="@{appName}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-    
-    <target name="config.container"
-            description="Perform any container specific configuration necessary for the unit tests to run">
-        <replace
-              file="${container.home}/domains/${glassfish.domain}/config/server.policy"
-              token="permission java.util.PropertyPermission "*", "read";"
-              value="permission java.util.PropertyPermission "*", "read,write";"/>
-        <concat append="true"
-                destfile="${container.home}/domains/${glassfish.domain}/config/server.policy">
-grant {
-    permission java.lang.reflect.ReflectPermission "*";
-};
-        </concat>
-        <chmod
-              file="${container.home}/domains/${glassfish.domain}/config/server.policy"
-              perm="777"/>
-        <replace
-              file="${container.home}/domains/${glassfish.domain}/config/domain.xml"
-              token="keep-alive max-connections="250" thread-count="1" timeout-in-seconds="30""
-              value="keep-alive max-connections="250" thread-count="1" timeout-in-seconds="70""/>
-    </target>
-
-    <!-- Require target to display information about the build environment -->
-    <target name="props">
-        <echo message="PENDING - Please add a message"/>            
-        <echo message="container.home->${container.home}" />
-        <echo message="javaee.jar->${container.home}/lib/javaee.jar" />
-    </target>
-    
-    <target name="update.impl.manifest">
-        <echo message="PENDING - Please implement"/>
-    </target>
-
-    <target name="container.deploy"
-              description="Deploy the JSF Implementation artifacts to the target container.">
-      <mkdir dir="${dist.dir}" />
-      <mkdir dir="${dist.dir}/tmp" />
-      <unjar src="${impl.dir}/build/lib/jsf-impl.jar"
-             dest="${dist.dir}/tmp" />
-      <delete dir="${dist.dir}/tmp/com/sun/org/apache" />
-      <jar destfile="${dist.dir}/jsf-impl.jar" 
-           basedir="${dist.dir}/tmp" />
-
-            <if>
-                <os family="windows"/>
-                <then>
-                   <container.stop/>
-                </then>
-            </if>
-            <delete>
-                <fileset dir="${container.home}/lib">
-                   <include name="jsf-*.jar"/>
-                   <include name="bean-validator.jar"/>
-                </fileset>
-            </delete>
-            <jar jarfile="${container.home}/lib/javaee.jar" update="yes">
-                <zipfileset src="${api.dir}/build/lib/jsf-api.jar"/>
-            </jar>
-            <copy overwrite="true" todir="${container.home}/lib"
-                  file="${dist.dir}/jsf-impl.jar"/>
-            <!--
-            <copy overwrite="true" todir="${container.home}/lib"
-                  file="${validation-api.jar}"/>
-            -->
-            <if>
-                <os family="windows"/>
-                <then>
-                   <container.start/>
-                </then>
-            </if>
-            <delete dir="${dist.dir}/tmp" />
-            <delete file="${dist.dir}/jsf-impl.jar" />
-    </target>
-    
-    <target name="container.start"
-            description="Start the GlassFish container">
-        <container.start/>
-    </target>
-
-    <target name="container.debug"
-            description="Start the GlassFish container in debug mode">
-        <container.debug/>
-    </target>
-
-    <target name="container.stop"
-            description="Stop the GlassFish container">
-        <container.stop/>
-    </target>
-    <target name="container.restart"
-            description="Stop the GlassFish container">
-        <container.stop/>
-        <container.start/>
-    </target>
-    <macrodef name="container.start"
-            description="Start the GlassFish container">
-        <sequential>
-            <start.domain/>
-        </sequential>
-    </macrodef>
-    
-    <macrodef name="container.stop"
-            description="Stop the GlassFish container">
-        <sequential>
-            <stop.domain/>
-        </sequential>
-    </macrodef>
-
-
-    <!-- 'PRIVATE' targets -->
-    <macrodef name="start.domain">
-        <sequential>
-            <echo>
-                
-"------------ Starting ${glassfish.domain} ------------"
-                
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin"
-                          failonerror="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="debug.domain">
-        <sequential>
-            <echo>
-
-"------------ Starting ${glassfish.domain} in debug mode ------------"
-
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin"
-                          failonerror="true">
-                        <arg line="start-domain"/>
-                        <arg line="--debug"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="start-domain"/>
-                        <arg line="--debug"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>    
-
-    <macrodef name="stop.domain">
-        <sequential>
-            <echo>
-                
-"------------ Stopping ${glassfish.domain} ------------"
-                
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin">
-                        <arg line="stop-domain"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="stop-domain"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                </else>
-            </if>
-
-            <sleep seconds="15"/>
-        </sequential>
-    </macrodef>
-
-</project>
diff --git a/common/ant/glassfishV3/config.properties.patch b/common/ant/glassfishV3/config.properties.patch
deleted file mode 100644
index 6d6aef8..0000000
--- a/common/ant/glassfishV3/config.properties.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Index: config.properties
-===================================================================
---- config.properties	(revision 25578)
-+++ config.properties	(working copy)
-@@ -42,7 +42,11 @@
- # GlassFish specific note:
- # Auto-start osgi-main module, which takes care of starting rest of the system.
- felix.auto.start.1= \
-- ${com.sun.aas.installRootURI}modules/osgi-main.jar 
-+ ${com.sun.aas.installRootURI}modules/osgi-main.jar \
-+  ${com.sun.aas.installRootURI}/modules/bean-validator.jar \
-+  ${com.sun.aas.installRootURI}/modules/javax.mail.jar \
-+  ${com.sun.aas.installRootURI}/modules/javax.activation.jar \
-+  ${com.sun.aas.installRootURI}/modules/javax.transaction.jar 
- 
- # log level 1: error, 2: warning, 3: info, 4: debug
- felix.log.level=1
diff --git a/common/ant/glassfishV3/container.xml b/common/ant/glassfishV3/container.xml
deleted file mode 100644
index 48f2d53..0000000
--- a/common/ant/glassfishV3/container.xml
+++ /dev/null
@@ -1,334 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<project name="GlassFishV3" basedir=".">
-
-    <!-- JARs that may be packaged in WEB-INF/lib
-  in order for the implementation to run
-  properly if they aren't availabe in the
-  container's classloader.
-
-  This is a comma separated list of fully
-  qualified JARs -->
-
-    <property name="webapp.jars" value=""/>
-
-    <!-- Required Targets -->
-    <macrodef name="deploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-
----------------- Glassfish - Deploying @{appName} ---------------- 
-
-            </echo>
-            <exec executable="${exec.name}" failonerror="true">
-                <arg line="${exec.arg.1}"/>
-                <arg line="deploy"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="@{artifact}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="deploydir.artifact">
-        <attribute name="explodedWarDir"
-                   description="The exploded war directory to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-
----------------- Glassfish - Deploying @{appName} ---------------- 
-
-            </echo>
-            <exec executable="${exec.name}" failonerror="true">
-                <arg line="${exec.arg.1}"/>
-                <arg line="deploydir"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="--contextroot @{appName} @{explodedWarDir}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-
-    <macrodef name="undeploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-
----------------- Glassfish - Undeploying @{appName} ---------------- 
-
-            </echo>
-            <exec executable="${exec.name}">
-                <arg line="${exec.arg.1}"/>
-                <arg line="undeploy"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="@{appName}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <target name="config.container">
-    </target>
-
-    <!-- Require target to display information about the build environment -->
-    <target name="props">
-        <echo message="PENDING - Please add a message"/>
-        <echo message="container.home->${container.home}" />
-        <echo message="javaee.jar->${container.home}/lib/javaee.jar" />
-    </target>
-
-    <target name="update.impl.manifest">
-        <echo message="PENDING - Please implement"/>
-    </target>
-
-    <target name="container.deploy"
-            description="Deploy the JSF Implementation artifacts to the target container.">
-        <if>
-            <os family="windows"/>
-            <then>
-                <container.stop/>
-            </then>
-        </if>
-
-        <copy overwrite="true" file="${api.dir}/build/lib/jsf-api.jar" toFile="${container.home}/modules/jsf-api.jar"/>
-        <copy overwrite="true" file="${impl.dir}/build/lib/jsf-impl.jar" toFile="${container.home}/modules/jsf-impl.jar"/>
-
-        <if>
-            <os family="windows"/>
-            <then>
-                <!-- container.start/ -->
-                <echo>The container may have been stopped. Please restart it, if
-                    needed.
-                </echo>
-            </then>
-        </if>       
-    </target>
-
-    <target name="container.start"
-            description="Start the GlassFish container">
-        <container.start/>
-    </target>
-
-    <target name="container.stop"
-            description="Stop the GlassFish container">
-        <container.stop/>
-    </target>
-
-    <target name="container.restart"
-            description="Stop the GlassFish container">
-        <container.stop/>
-        <container.start/>
-    </target>
-
-    <macrodef name="container.start"
-            description="Start the GlassFish container">
-        <sequential>
-            <start.domain/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="container.debug"
-            description="Start the GlassFish container in debug mode">
-        <sequential>
-            <debug.domain/>
-        </sequential>
-    </macrodef>
-
-
-    <macrodef name="container.stop"
-            description="Stop the GlassFish container">
-        <sequential>
-            <stop.domain/>
-        </sequential>
-    </macrodef>
-
-    <!-- 'PRIVATE' targets -->
-    <macrodef name="start.domain">
-        <sequential>
-            <echo>
-
-"------------ Starting ${glassfish.domain} ------------"
-
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin"
-                          failonerror="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="debug.domain">
-        <sequential>
-            <echo>
-
-"------------ Starting ${glassfish.domain} in debug mode------------"
-
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin"
-                          failonerror="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="--debug"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="--debug"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="stop.domain">
-        <sequential>
-            <echo>
-
-"------------ Stopping ${glassfish.domain} ------------"
-
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin">
-                        <arg line="stop-domain"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="stop-domain"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                </else>
-            </if>
-            <sleep seconds="15"/>
-        </sequential>
-    </macrodef>
-
-
-    <!-- ************ Compiler Defaults *************************************** -->
-
-
-    <!-- ************ Executable Targets ************************************** -->
-
-    <target name="main">
-    </target>
-
-
-</project>
-
diff --git a/common/ant/glassfishV3prelude/container.xml b/common/ant/glassfishV3prelude/container.xml
deleted file mode 100644
index 9d1c1d9..0000000
--- a/common/ant/glassfishV3prelude/container.xml
+++ /dev/null
@@ -1,333 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<project name="GlassFishV3" basedir=".">
-
-    <!-- JARs that may be packaged in WEB-INF/lib
-  in order for the implementation to run
-  properly if they aren't availabe in the
-  container's classloader.
-
-  This is a comma separated list of fully
-  qualified JARs -->
-
-    <property name="webapp.jars" value=""/>
-
-    <!-- Required Targets -->
-    <macrodef name="deploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-
----------------- Glassfish - Deploying @{appName} ---------------- 
-
-            </echo>
-            <exec executable="${exec.name}" failonerror="true">
-                <arg line="${exec.arg.1}"/>
-                <arg line="deploy"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="@{artifact}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="deploydir.artifact">
-        <attribute name="explodedWarDir"
-                   description="The exploded war directory to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-
----------------- Glassfish - Deploying @{appName} ---------------- 
-
-            </echo>
-            <exec executable="${exec.name}" failonerror="true">
-                <arg line="${exec.arg.1}"/>
-                <arg line="deploydir"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="--contextroot @{appName} @{explodedWarDir}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="undeploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <condition property="exec.name" value="cmd.exe">
-                <os family="windows"/>
-            </condition>
-            <condition property="exec.arg.1"
-                       value="/c ${container.home}/bin/asadmin">
-                <os family="windows"/>
-            </condition>
-            <property name="exec.name" value="${container.home}/bin/asadmin"/>
-            <property name="exec.arg.1" value=""/>
-            <echo>
-
----------------- Glassfish - Undeploying @{appName} ---------------- 
-
-            </echo>
-            <exec executable="${exec.name}">
-                <arg line="${exec.arg.1}"/>
-                <arg line="undeploy"/>
-                <arg line="--user ${glassfish.admin.user}"/>
-                <arg line="--passwordfile ${glassfish.password.file}"/>
-                <arg line="--host ${glassfish.admin.host}"/>
-                <arg line="--port ${glassfish.admin.port}"/>
-                <arg line="@{appName}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <target name="config.container">
-    </target>
-
-    <!-- Require target to display information about the build environment -->
-    <target name="props">
-        <echo message="PENDING - Please add a message"/>
-        <echo message="container.home->${container.home}" />
-        <echo message="javaee.jar->${container.home}/lib/javaee.jar" />
-    </target>
-
-    <target name="update.impl.manifest">
-        <echo message="PENDING - Please implement"/>
-    </target>
-
-    <target name="container.deploy"
-            description="Deploy the JSF Implementation artifacts to the target container.">
-        <if>
-            <os family="windows"/>
-            <then>
-                <container.stop/>
-            </then>
-        </if>
-
-        <copy file="${api.dir}/build/lib/jsf-api.jar" toFile="${container.home}/modules/jsf-api.jar"/>
-        <copy file="${impl.dir}/build/lib/jsf-impl.jar" toFile="${container.home}/modules/web/jsf-impl.jar"/>
-
-        <if>
-            <os family="windows"/>
-            <then>
-                <!-- container.start/ -->
-                <echo>The container may have been stopped. Please restart it, if
-                    needed.
-                </echo>
-            </then>
-        </if>       
-    </target>
-
-    <target name="container.start"
-            description="Start the GlassFish container">
-        <container.start/>
-    </target>
-
-    <target name="container.stop"
-            description="Stop the GlassFish container">
-        <container.stop/>
-    </target>
-
-    <target name="container.restart"
-            description="Stop the GlassFish container">
-        <container.stop/>
-        <container.start/>
-    </target>
-
-    <macrodef name="container.start"
-            description="Start the GlassFish container">
-        <sequential>
-            <start.domain/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="container.debug"
-            description="Start the GlassFish container in debug mode">
-        <sequential>
-            <debug.domain/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="container.stop"
-            description="Stop the GlassFish container">
-        <sequential>
-            <stop.domain/>
-        </sequential>
-    </macrodef>
-
-    <!-- 'PRIVATE' targets -->
-    <macrodef name="start.domain">
-        <sequential>
-            <echo>
-
-"------------ Starting ${glassfish.domain} ------------"
-
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin"
-                          failonerror="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="start-domain"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="debug.domain">
-        <sequential>
-            <echo>
-
-"------------ Starting ${glassfish.domain} in debug mode ------------"
-
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin"
-                          failonerror="true">
-                        <arg line="start-domain"/>
-                        <arg line="--debug"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="start-domain"/>
-                        <arg line="--debug"/>
-                        <arg line="--user ${glassfish.admin.user}"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                    <waitfor>
-                        <http url="http://${container.host}:${container.port}"/>
-                    </waitfor>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-
-    <macrodef name="stop.domain">
-        <sequential>
-            <echo>
-
-"------------ Stopping ${glassfish.domain} ------------"
-
-            </echo>
-            <if>
-                <os family="unix"/>
-                <then>
-                    <exec executable="${container.home}/bin/asadmin">
-                        <arg line="stop-domain"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                </then>
-                <else>
-                    <exec executable="${container.home}/bin/asadmin.bat"
-                          spawn="true">
-                        <arg line="stop-domain"/>
-                        <arg line="${glassfish.domain}"/>
-                    </exec>
-                </else>
-            </if>
-            <sleep seconds="15"/>
-        </sequential>
-    </macrodef>
-
-
-    <!-- ************ Compiler Defaults *************************************** -->
-
-
-    <!-- ************ Executable Targets ************************************** -->
-
-    <target name="main">
-    </target>
-
-
-</project>
-
diff --git a/common/ant/maven.xml b/common/ant/maven.xml
deleted file mode 100644
index 3ceb56f..0000000
--- a/common/ant/maven.xml
+++ /dev/null
@@ -1,258 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in complicomance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<project name="JSF Maven" basedir=".">
-
-    <property name="current.dir" value="${jsf.build.home}/common/ant"/>
-    <property environment="myenv"/>
-    <property name="mvn.home" value="${myenv.M2_HOME}"/>
-
-    <!-- ======================== SNAPSHOT ============================ -->
-
-    <macrodef name="mvn.deploy.snapshot.local">
-        <attribute name="type"/>
-        <sequential>
-            <do.mvn type="@{type}" goal="install" version="${snapshot.version}"/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="mvn.deploy.snapshot">
-        <attribute name="type"/>
-        <sequential>
-            <sequential>
-                <do.mvn type="@{type}" goal="deploy" version="${snapshot.version}"/>
-            </sequential>
-        </sequential>
-    </macrodef>
-
-    <!-- ======================== PROMOTED BUILD =========================== -->
-
-    <macrodef name="mvn.deploy.promoted.local">
-        <attribute name="type"/>
-        <sequential>
-            <do.mvn type="@{type}" goal="install" version="${impl.version.number}-${build.number}"/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="mvn.deploy.promoted">
-        <attribute name="type"/>
-        <sequential>
-            <do.mvn type="@{type}" goal="deploy" version="${impl.version.number}-${build.number}"/>
-        </sequential>
-    </macrodef>
-
-    <!-- ========================= RELEASE BUILD =========================== -->
-
-    <macrodef name="mvn.deploy.release.local">
-        <attribute name="type"/>
-        <attribute name="groupId" default="com.sun.faces"/>
-        <attribute name="version" default="${impl.version.number}"/>
-        <sequential>
-            <do.mvn type="@{type}" groupId="@{groupId}" goal="install" version="@{version}"/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="mvn.deploy.release">
-        <attribute name="type"/>
-        <attribute name="groupId" default="com.sun.faces"/>
-        <attribute name="version" default="${impl.version.number}"/>
-        <sequential>
-            <do.mvn type="@{type}" groupId="@{groupId}" goal="deploy" version="@{version}"/>
-        </sequential>
-    </macrodef>
-
-    <!-- ============================== HELPER MACROS ====================== -->
-
-    <macrodef name="create.pom">
-        <attribute name="template.file"/>
-        <attribute name="output.file"/>
-        <attribute name="version"/>
-        <attribute name="groupId" default="com.sun.faces"/>
-        <sequential>
-            <copy file="@{template.file}" tofile="@{output.file}"/>
-            <replace file="@{output.file}"
-                     token="@version@"
-                     value="@{version}"/>
-            <replace file="@{output.file}"
-                     token="@groupId@"
-                     value="@{groupId}"/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="do.mvn">
-        <attribute name="type"/>
-        <attribute name="version"/>
-        <attribute name="goal"/>
-        <attribute name="groupId" default="com.sun.faces"/>
-        <sequential>
-            <if>
-                <equals arg1="@{type}" arg2="api"/>
-                <then>
-                    <create.pom
-                          template.file="${current.dir}/template/jsf-api-pom-template.xml"
-                          output.file="${mvn.api.dir}/jsf-api-pom.xml"
-                          version="@{version}"
-                          groupId="@{groupId}"/>
-                    <mkdir dir="${mvn.api.dir}/target/classes"/>
-                    <mkdir dir="${mvn.api.dir}/src/main/java"/>
-                    <copy overwrite="true" 
-                          todir="${mvn.api.dir}/src/main/java">
-                      <fileset dir="${api.dir}/doc">
-                        <include name="*.png" />
-                        <include name="*.xsd" />
-                        <include name="*.dtd" />
-                        <include name="standard-html-renderkit.xml" />
-                        <exclude name="xml.xsd" />
-                        <exclude name="javaee*.xsd" />
-                        <exclude name="XMLSchema.dtd" />
-                        <exclude name="datatypes.dtd" />
-                      </fileset>
-                      <fileset dir="${api.dir}/src/main/java" includes="**/*" />
-                      <fileset dir="${api.dir}/build/generate/" 
-                               includes="**/*" excludes="last-generation" />
-                    </copy>
-                    <unjar src="${api.dir}/build/lib/jsf-api.jar"
-                           overwrite="yes"
-                           dest="${mvn.api.dir}/target/classes"/>
-                    <jsf.mvn pomFile="${mvn.api.dir}/jsf-api-pom.xml"
-                             mvnSpecVersion="@{version}"
-                             dir="${mvn.api.dir}"
-                             goals="@{goal}"/>
-                    <delete dir="${mvn.api.dir}"/>
-                </then>
-                <else>
-                     <create.pom
-                          template.file="${current.dir}/template/jsf-impl-pom-template.xml"
-                          output.file="${mvn.impl.dir}/jsf-impl-pom.xml"
-                          version="@{version}"/>
-                    <mkdir dir="${mvn.impl.dir}/target/classes"/>
-                    <mkdir dir="${mvn.api.dir}/src/main/java"/>
-                    <copy overwrite="true" 
-                          todir="${mvn.impl.dir}/src/main/java">
-                      <fileset dir="${impl.dir}/src" includes="**/*" />
-                      <fileset dir="${impl.dir}/build/generate/" 
-                               includes="**/*" excludes="last-generation,conf/**,**/*.xsd" />
-                    </copy>
-                    <unjar src="${impl.dir}/build/lib/jsf-impl.jar"
-                           overwrite="yes"
-                           dest="${mvn.impl.dir}/target/classes"/>
-                    <jsf.mvn pomFile="${mvn.impl.dir}/jsf-impl-pom.xml"
-                             mvnSpecVersion="@{version}"
-                             dir="${mvn.impl.dir}"
-                             goals="@{goal}"/>
-                    <delete dir="${mvn.impl.dir}"/>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="jsf.mvn">
-        <attribute name="pomFile" default="pom.xml"/>
-        <attribute name="mvnSpecVersion" default="${impl.version}"/>
-        <attribute name="goals"/>
-        <attribute name="dir"/>
-        <attribute name="skipTests" default="true"/>
-        <sequential>
-            <if>
-                <equals arg1="${mvn.home}" arg2="$${myenv.M2_HOME}"/>
-                <then>
-                    <if>
-                        <os family="windows"/>
-                        <then>
-                            <property name="mvn.cmd" value="mvn.bat"/>
-                        </then>
-                        <else>
-                            <property name="mvn.cmd" value="mvn"/>
-                        </else>
-                    </if>
-                </then>
-                <else>
-                    <if>
-                        <os family="windows"/>
-                        <then>
-                            <property name="mvn.cmd" value="${mvn.home}/bin/mvn.bat"/>
-                        </then>
-                        <else>
-                            <property name="mvn.cmd" value="${mvn.home}/bin/mvn"/>
-                        </else>
-                    </if>
-                </else>
-            </if>
-
-
-            <if>
-                <!-- If maven.repo.local set, respect it -->
-                <isset property="maven.repo.local"/>
-                <then>
-                    <property name="mvn.repo.local.prop" value="-Dmaven.repo.local=${maven.repo.local}"/>
-                </then>
-                <else>
-                    <property name="mvn.repo.local.prop" value=""/>
-                </else>
-            </if>
-            <if>
-                <equals arg1="@{skipTests}" arg2="false"/>
-                <then>
-                    <property name="testSkipProperty" value=""/>
-                </then>
-                <else>
-                    <property name="testSkipProperty"
-                              value="-Dmaven.test.skip=true"/>
-                </else>
-            </if>
-            <exec os="SunOS" dir="@{dir}" failonerror="yes"
-                  executable="${mvn.cmd}">
-                <arg line="-f @{pomFile} ${testSkipProperty} ${mvn.repo.local.prop} -DmvnSpecVersion=@{mvnSpecVersion} @{goals}"/>
-            </exec>
-            <exec os="Linux" dir="@{dir}" failonerror="yes"
-                  executable="${mvn.cmd}">
-                <arg line="-f @{pomFile} ${testSkipProperty} ${mvn.repo.local.prop} -DmvnSpecVersion=@{mvnSpecVersion} @{goals}"/>
-            </exec>
-            <exec osfamily="windows" dir="@{dir}" executable="${mvn.cmd}"
-                  failonerror="yes">
-                <arg line="-f @{pomFile} ${testSkipProperty} ${mvn.repo.local.prop} -DmvnSpecVersion=@{mvnSpecVersion} @{goals}"/>
-            </exec>
-            <exec os="Mac OS X" dir="@{dir}" executable="${mvn.cmd}"
-                  failonerror="yes">
-                <arg line="-f @{pomFile} ${testSkipProperty} ${mvn.repo.local.prop} -DmvnSpecVersion=@{mvnSpecVersion} @{goals}"/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-
-</project>
diff --git a/common/ant/source-build-setup.xml b/common/ant/source-build-setup.xml
deleted file mode 100644
index 9836063..0000000
--- a/common/ant/source-build-setup.xml
+++ /dev/null
@@ -1,295 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in complicomance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-      
-<project name="JSF Source Build Setup" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
-
-    <property file="../../build.properties"/>
-
-    <import file="${jsf.build.home}/common/ant/maven.xml"/>
-    <taskdef resource="net/sf/antcontrib/antlib.xml">
-        <classpath>
-            <pathelement
-                  location="${jsf.build.home}/common/lib/ant-contrib.jar"/>
-        </classpath>
-    </taskdef>
-    <taskdef resource="aQute/bnd/ant/taskdef.properties">
-        <classpath>
-            <pathelement
-                  location="${jsf.build.home}/common/lib/bnd-0.0.249.jar"/>
-        </classpath>
-    </taskdef>
-
-    <taskdef name="installerBuilder" classname="org.jvnet.poormans_installer.builder.BuilderTask">
-        <classpath>
-            <pathelement location="${jsf.build.home}/common/lib/installer-builder.jar"/>
-            <pathelement location="${jsf.build.home}/common/lib/sfx4j-1.0.jar"/>
-        </classpath>
-    </taskdef>
-    <path id="maven-ant-tasks.classpath" path="${jsf.build.home}/common/lib/maven-ant-tasks-2.0.10.jar" />
-      <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
-               uri="antlib:org.apache.maven.artifact.ant"
-               classpathref="maven-ant-tasks.classpath" />
-
-    
-    <!-- Setup the time properties for use with the project -->
-    <tstamp/>
-    
-    <!-- Properties needed throughout the project -->
-
-    <!-- Structural -->
-    <property name="api.dir" value="${jsf.build.home}/jsf-api"/>
-    <property name="mvn.api.dir" value="${api.dir}/build/mvn" />
-    <property name="impl.dir" value="${jsf.build.home}/jsf-ri"/>
-    <property name="mvn.impl.dir" value="${jsf.build.home}/jsf-ri/build/mvn"/>
-    <property name="tools.dir" value="${jsf.build.home}/jsf-tools"/>    
-    <property name="demo.dir" value="${jsf.build.home}/jsf-demo"/>
-    <property name="spec.snapshot.dir" 
-              value="${demo.dir}/dist/spec-snapshot" />
-    <property name="impl.test.results.dir" value="${impl.dir}/testresults"/>
-    <property name="api.test.results.dir" value="${api.dir}/testresults"/>
-
-    <!-- Artifacts of interest -->
-    <property name="jsf-api.jar" value="${api.dir}/build/lib/jsf-api.jar"/>
-    <property name="jsf-tools.jar" value="${tools.dir}/build/lib/jsf-tools.jar"/>
-    <property name="jsf-impl.jar" value="${impl.dir}/build/lib/jsf-impl.jar"/>   
-    <property name="jsf.test.jar" value="${jsf.build.home}/lib/jsf-extensions-test-time.jar"/>    
-    <property name="installer.jar" value="${jsf.build.home}/common/lib/installer-builder.jar"/>
-    <property name="javanettasks.jar" value="${jsf.build.home}/common/lib/javanettasks-1.0.5.jar"/>
-    <property name="standard.renderkit.xml" value="${api.dir}/doc/standard-html-renderkit.xml"/>
-
-    <!-- Version -->
-    <property name="spec.version" value="2.0"/>
-    <property name="patch.version" value="2"/>
-    <property name="impl.name" value="Mojarra"/>
-    <property name="build.number" value="${DSTAMP}"/>
-    <property name="build.type" value="SNAPSHOT"/>
-    <property name="impl.version.number" value="${spec.version}.${patch.version}" />
-    <property name="impl.version" value="${impl.version.number}-${build.type}"/>
-    <property name="full.impl.version" value="${impl.version.number} (${build.number}-${build.type})"/>
-    <property name="snapshot.version" value="${impl.version.number}-SNAPSHOT"/>
-
-    <!-- Environment -->
-    <property environment="myenv" />
-    <property name="http.proxy.host" value=""/>
-    <property name="http.proxy.port" value=""/>
-
-    <!-- Change bundle -->
-    <property name="change.bundle.dir" value="${jsf.build.home}/common/ant/bin" />
-
-    <!-- Debug args (OVERRIDE IN BUILD.PROPERTIES) -->
-    <property name="debug.jvm.args" value=""/>
-
-    <!--  TODO remove this once maven stuff is complete, it's just here for reference.
-
-    <target name="mvn-init" unless="compile.classpath" xmlns:artifact="urn:maven-artifact-ant">
-        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
-            classpath="lib/maven-ant-tasks-2.0.9.jar"/>
-        <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
-            <isset property="maven.repo.local"/>
-        </condition>
-        <echo>maven.repo.local=${maven.repo.local}</echo>
-        <artifact:localRepository id="local.repository" path="${maven.repo.local}"/>
-        <artifact:pom file="pom.xml" id="maven.project"/>
-        <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile">
-            <pom refid="maven.project"/>
-            <localRepository refid="local.repository"/>
-        </artifact:dependencies>
-        <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test">
-            <pom refid="maven.project"/>
-            <localRepository refid="local.repository"/>
-        </artifact:dependencies>
-        <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime">
-            <pom refid="maven.project"/>
-            <localRepository refid="local.repository"/>
-        </artifact:dependencies>
-    </target>
-
-    -->
-    <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
-        <isset property="maven.repo.local"/>
-    </condition>
-    <echo>maven.repo.local=${maven.repo.local}</echo>
-    <artifact:localRepository id="local.repository" path="${maven.repo.local}"/>
-    
-    <artifact:remoteRepository id="jboss.repo" url="http://repository.jboss.com/maven2/"/>
-    <artifact:remoteRepository id="j.n.repo" url="http://download.java.net/maven/2/"/>
-    <artifact:remoteRepository id="gf.repo" url="http://download.java.net/maven/glassfish/"/>
-    <artifact:remoteRepository id="gf.nexus.repo" url="http://maven.glassfish.org/content/groups/glassfish/"/>
-    <artifact:remoteRepository id="codehaus.repo" url="http://repository.codehaus.org/"/>
-    <artifact:remoteRepository id="ibiblio.repo" url="http://mirrors.ibiblio.org/pub/mirrors/maven2/"/>
-
-    <artifact:dependencies filesetId="compile.filepath" pathId="compile.path">
-        <dependency groupId="org.codehaus.groovy" artifactId="groovy-all" version="1.6.4" scope="provided"/>
-        <dependency groupId="org.glassfish.web" artifactId="el-impl" version="2.2" scope="provided"/>
-        <dependency groupId="javax" artifactId="javaee-api" version="6.0-SNAPSHOT" scope="provided"/>
-        <localRepository refid="local.repository"/>
-        <remoteRepository refid="j.n.repo"/>
-        <remoteRepository refid="gf.repo"/>
-        <remoteRepository refid="gf.nexus.repo"/>
-    </artifact:dependencies>
-    
-    <artifact:dependencies filesetId="commons.filepath" pathId="commons.path">
-        <dependency groupId="commons-collections" artifactId="commons-collections" version="2.1.1"/>
-        <dependency groupId="commons-digester" artifactId="commons-digester" version="1.5"/>
-        <dependency groupId="commons-beanutils" artifactId="commons-beanutils" version="1.6.1"/>
-        <dependency groupId="commons-logging" artifactId="commons-logging" version="1.0.4"/>
-        <localRepository refid="local.repository"/>
-        <remoteRepository refid="gf.nexus.repo"/>
-    </artifact:dependencies>
-
-    <path id="compile.classpath">
-        <path refid="compile.path"/>
-    </path>
-
-    <path id="apache.commons.classpath">
-        <path refid="commons.path"/>
-    </path>
-
-    <!-- Common Targets -->
-
-    <!-- Convenience macro for javac -->
-    <macrodef name="jsf.javac">        
-        <attribute name="srcdir"/>
-        <attribute name="destdir"/>
-        <attribute name="includes" default=""/>
-        <attribute name="excludes" default=""/>
-        <attribute name="source" default="1.5"/>
-        <attribute name="target" default="1.5"/>
-        <element name="classpath" implicit="true" optional="yes"/>
-        <sequential>           
-            <javac srcdir="@{srcdir}"
-                   destdir="@{destdir}"
-                   debug="${compile.debug}"
-                   deprecation="${compile.deprecation}"
-                   source="@{source}"
-                   target="@{target}"
-                   includes="@{includes}"
-                   excludes="@{excludes}">
-                <classpath/>
-            </javac>
-        </sequential>
-    </macrodef>
-    <!--
-       Build a JAR file which includes a manifest including
-       information pertaining to Sun's JavaServer Faces
-       implementation.
-    -->
-    <macrodef name="jsf.manifested.jar">
-        <attribute name="jarfile"/>
-        <attribute name="basedir"/>
-        <attribute name="extension-name"/>
-        <attribute name="excludes" default=""/>
-        <attribute name="includes" default=""/>
-        <sequential>
-            <jar jarfile="@{jarfile}"
-                 basedir="@{basedir}"
-                 excludes="@{excludes}"
-                 includes="@{includes}">
-                <manifest>
-                    <attribute name="Specification-Title"
-                               value="JavaServer Faces"/>
-                    <attribute name="Specification-Version"
-                               value="${spec.version}"/>
-                    <attribute name="Implementation-Title"
-                               value="${impl.name}"/>
-                    <attribute name="Implementation-Version"
-                               value="${impl.version}"/>
-                    <attribute name="Implementation-Vendor"
-                               value="Sun Microsystems, Inc."/>
-                    <attribute name="Implementation-Vendor-Id"
-                               value="com.sun"/>
-                    <attribute name="Extension-Name"
-                               value="@{extension-name}"/>
-                </manifest>                
-            </jar>
-        </sequential>
-    </macrodef>
-
-    <!--
-       Build an OSGi bundle
-    -->
-    <macrodef name="jsf.osgi.jar">
-        <attribute name="jarfile"/>
-        <attribute name="basedir"/>
-        <attribute name="bndfile"/>
-        <attribute name="extension-name"/>
-        <attribute name="excludes" default=""/>
-        <attribute name="includes" default=""/>
-        <sequential>
-            <bnd
-                classpath="@{basedir}"
-                failok="false"
-                exceptions="false"
-                files="@{bndfile}"
-                output="@{jarfile}"/>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="jsf.generate.html.components">
-        <attribute name="output-dir"/>
-
-        <sequential>
-            <mkdir dir="${tools.dir}/build/classes"/>
-            <jsf.javac srcdir="${tools.dir}/src/main/java"
-                   destdir="${tools.dir}/build/classes">
-                <classpath>
-                    <path refid="compile.classpath"/>  
-                    <path refid="apache.commons.classpath"/>
-                </classpath>
-            </jsf.javac>
-            <taskdef name="generateComponents"
-                     classname="com.sun.faces.ant.ComponentGenTask">
-                <classpath>
-                    <pathelement location="${tools.dir}/build/classes"/>
-                </classpath>
-            </taskdef>
-            <generateComponents
-                  generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-                  facesConfig="${standard.renderkit.xml}"
-                  fork="true">
-                <classpath>
-                    <path refid="compile.classpath"/>
-                    <pathelement location="${jsf-api.jar}"/>
-                    <pathelement location="${tools.dir}/build/classes"/>
-                </classpath>
-                <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            </generateComponents>
-        </sequential>
-    </macrodef>
-
-</project>
diff --git a/common/ant/template/container.xml b/common/ant/template/container.xml
deleted file mode 100644
index 82fc7ff..0000000
--- a/common/ant/template/container.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<project name="Test Classpath" basedir=".">
- 
-    <!--
-        This definition should include all
-        the compile dependencies required
-        by Sun's Javaserver Faces implementation.
-                      
-        Servlet (version 2.5)
-        JSP (version 2.1)
-        JSTL (version 1.2)
-    -->
-    <path id="compile.classpath"/>        
-    
-
-    <!-- 
-       JARs that may be packaged in WEB-INF/lib
-       in order for the implementation to run 
-       properly if they aren't availabe in the
-       container's classloader.  
-   
-       This is a comma separated list of fully
-       qualified JARs. 
-    -->
-    <property name="webapp.jars" value=""/>
-
-
-    <!-- Required Targets/Macrodefs -->
-    
-    <!-- 
-       Deploys the specified artifact to the
-       target container.
-    -->      
-    <macrodef name="deploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <echo message="Provide 'deploy.artifact' implementation"/>
-        </sequential>
-    </macrodef>
-
-    <!-- 
-        Undeploy the specified WAR from the 
-        target container.
-    -->
-    <macrodef name="undeploy.artifact">
-        <attribute name="artifact"
-                   description="The WAR to deploy"/>
-        <attribute name="appName"
-                   description="The name of the application"/>
-        <sequential>
-            <echo message="Provide 'undeploy.artifact' implementation"/>
-        </sequential>
-    </macrodef>
-    
-    <!-- 
-        Perform any configuration of the target container in order
-        to run the unit tests.
-        
-        Ensure the following at a minimum:
-           java.util.PropertyPermission is read,write
-           java.lang.ReflectPermission is "*"                   
-    -->
-    <target name="config.container"
-            description="Perform any container specific configuration necessary for the unit tests to run">
-        <sequential>
-            <echo message="Provide 'config.container' implementation"/>
-        </sequential>
-    </target>
-
-    <!--
-         Display/Validate any property information necessary to build 
-         successfully.
-     -->
-    <target name="props">
-        <echo message="Provide 'props' implementation"/>            
-    </target>
-    
-    <!--
-        OPTIONAL
-          Update the jsf-impl.jar's manfest file
-          with the versions of the compile time
-          dependencies.
-    -->
-    <target name="update.impl.manifest">
-        <echo message="Provide 'update.impl.manifest' implementation"/>
-    </target>
-
-    <!--
-        OPTIONAL
-          Perform whatever steps are necessary to integrate
-          Sun's JavaServer Faces implementation into the
-          target container.
-    -->
-    <target name="container.deploy" 
-            description="Deploy the JSF Implementation artifacts to the target container.">
-        <echo message="Provide 'container.deploy' implementation"/>    
-    </target>
-    
-    <!-- 
-        OPTIONAL
-          Start the container
-    -->
-    <macrodef name="container.start"
-            description="Start the target container.">
-        <sequential>
-            <echo message="Provide 'container.start' implementation"/>
-        </sequential>
-    </macrodef>
-
-    <!--
-        OPTIONAL
-          Start the container in debug mode
-    -->
-    <macrodef name="container.debug"
-            description="Start the target container in debug mode.">
-        <sequential>
-            <echo message="Provide 'container.debug' implementation"/>
-        </sequential>
-    </macrodef>
-    <!--
-       OPTIONAL
-          Stop the container
-    -->
-    <macrodef name="container.stop"
-              description="Stop the target container.">
-        <sequential>
-            <echo message="Provide 'container.stop' implementation"/>
-        </sequential>
-    </macrodef>
-
-</project>
\ No newline at end of file
diff --git a/common/ant/template/jsf-api-pom-template.xml b/common/ant/template/jsf-api-pom-template.xml
deleted file mode 100644
index 52413cc..0000000
--- a/common/ant/template/jsf-api-pom-template.xml
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<project>
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>@groupId@</groupId>
-    <artifactId>jsf-api</artifactId>
-    <version>@version@</version>
-    <packaging>jar</packaging>
-    <name>
-        Sun's implementation of the JSF 2.0 specification API.
-    </name>
-    <description>
-        This is the master POM file for Sun's Implementation of the JSF 2.0 Specification.
-    </description>
-    <url>http://java.sun.com/javaee/javaserverfaces/</url>
-    <licenses>
-        <license>
-            <name>
-                COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) plus GPL
-            </name>
-            <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-    <scm>
-        <url>https://mojarra.dev.java.net/svn/mojarra</url>
-        <connection>scm:svn:https://mojarra.dev.java.net/svn/mojarra</connection>
-    </scm>
-    <developers>
-        <developer>
-            <id>edburns</id>
-            <name>Ed Burns</name>
-            <email>ed.burns at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-6</timezone>
-        </developer>
-        <developer>
-            <id>rlubke</id>
-            <name>Ryan Lubke</name>
-            <email>Ryan.Lubke at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-9</timezone>
-        </developer>
-        <developer>
-            <id>rogerk</id>
-            <name>Roger Kitain</name>
-            <email>Roger.Kitain at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-6</timezone>
-        </developer>
-        <developer>
-            <id>driscoll</id>
-            <name>Jim Driscoll</name>
-            <email>jim.dirscoll at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-9</timezone>
-        </developer>
-    </developers>
-
-    <repositories>
-        <repository>
-            <snapshots/>
-            <id>ibiblio</id>
-            <url>http://www.ibiblio.org/maven2/</url>
-        </repository>
-        <repository>
-            <id>maven2-repository.dev.java.net</id>
-            <name>Java.net Repository for Maven</name>
-            <url>http://download.java.net/maven/2/</url>
-            <layout>default</layout>
-        </repository>
-        <repository>
-            <snapshots/>
-            <id>codehaus</id>
-            <name>codehaus</name>
-            <url>http://repository.codehaus.org</url>
-        </repository>
-        <repository>
-            <snapshots/>
-            <id>java.net</id>
-            <name>Java.net Maven 1.x Repository for external projects</name>
-            <url>http://download.java.net/maven/1/</url>
-            <layout>legacy</layout>
-        </repository>
-        <repository>
-            <snapshots/>
-            <id>java.net.shared</id>
-            <name>Java.net Maven 1.x Repository for glassfish dependencies
-            </name>
-            <url>http://download.java.net/javaee5/external/shared</url>
-            <layout>legacy</layout>
-        </repository>
-
-    </repositories>
-
-    <distributionManagement>
-        <repository>
-            <uniqueVersion>false</uniqueVersion>
-            <id>java.net-mavent2-repository</id>
-            <url>java-net:/maven2-repository/trunk/repository/</url>
-        </repository>
-    </distributionManagement>
-
-    <build>
-        <defaultGoal>install</defaultGoal>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                    <excludes>
-                        <exclude>**/*.*</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <version>2.1</version>
-                <executions>
-                    <execution>
-                        <id>attach-sources</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>jar-no-fork</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-
-        <extensions>
-            <extension>
-                <groupId>org.jvnet.wagon-svn</groupId>
-                <artifactId>wagon-svn</artifactId>
-                <version>1.8</version>
-            </extension>
-        </extensions>
-
-    </build>
-
-    <issueManagement>
-        <system>issueZilla</system>
-        <url>
-            https://javaserverfaces.dev.java.net/servlets/ProjectIssues
-        </url>
-    </issueManagement>
-    <mailingLists>
-        <mailingList>
-            <name>JSF 2.0 Specification Comments</name>
-            <post>jsr-314-comments at jcp.org</post>
-        </mailingList>
-        <mailingList>
-            <name>Mojarra Implementation Dev List</name>
-            <post>dev at javaserverfaces.dev.java.net</post>
-            <archive>
-                https://javaserverfaces.dev.java.net/servlets/SummarizeList?listName=dev
-            </archive>
-        </mailingList>
-    </mailingLists>
-    <contributors>
-        <contributor>
-            <name>Craig McClanahan</name>
-        </contributor>
-        <contributor>
-            <name>Deepak Gothe</name>
-        </contributor>
-        <contributor>
-            <name>Gregory Murray</name>
-        </contributor>
-        <contributor>
-            <name>Justyna Horwat</name>
-        </contributor>
-        <contributor>
-            <name>Jayashri Visvanathan</name>
-        </contributor>
-        <contributor>
-            <name>Jennifer Ball</name>
-        </contributor>
-        <contributor>
-            <name>Jacob Hookom</name>
-        </contributor>
-        <contributor>
-            <name>Raj Premkumar</name>
-        </contributor>
-        <contributor>
-            <name>Stan Silvert</name>
-        </contributor>
-        <contributor>
-            <name>Mike Youngstrom</name>
-        </contributor>
-        <contributor>
-            <name>Jason Lee</name>
-        </contributor>
-    </contributors>
-    <organization>
-        <name>Sun Microsystems, Inc</name>
-        <url>http://www.sun.com/</url>
-    </organization>
-    <dependencies>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet.jsp</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.el</groupId>
-            <artifactId>el-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>jstl</groupId>
-            <artifactId>jstl</artifactId>
-            <version>1.2</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/common/ant/template/jsf-impl-pom-template.xml b/common/ant/template/jsf-impl-pom-template.xml
deleted file mode 100644
index 728c4d4..0000000
--- a/common/ant/template/jsf-impl-pom-template.xml
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<project>
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>com.sun.faces</groupId>
-    <artifactId>jsf-impl</artifactId>
-    <version>@version@</version>
-    <packaging>jar</packaging>
-    <name>
-        Sun's implementation of the JSF 2.0 specification.
-    </name>
-    <description>
-        This is the master POM file for Sun's Implementation of the JSF 2.0 Specification.
-    </description>
-    <url>http://java.sun.com/javaee/javaserverfaces/</url>
-    <licenses>
-        <license>
-            <name>
-                COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) plus GPL
-            </name>
-            <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-    <scm>
-        <url>https://mojarra.dev.java.net/svn/mojarra</url>
-        <connection>scm:svn:https://mojarra.dev.java.net/svn/mojarra</connection>
-    </scm>
-    <developers>
-        <developer>
-            <id>edburns</id>
-            <name>Ed Burns</name>
-            <email>ed.burns at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-6</timezone>
-        </developer>
-        <developer>
-            <id>rlubke</id>
-            <name>Ryan Lubke</name>
-            <email>Ryan.Lubke at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-9</timezone>
-        </developer>
-        <developer>
-            <id>rogerk</id>
-            <name>Roger Kitain</name>
-            <email>Roger.Kitain at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-6</timezone>
-        </developer>
-        <developer>
-            <id>driscoll</id>
-            <name>Jim Driscoll</name>
-            <email>jim.dirscoll at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-9</timezone>
-        </developer>
-    </developers>
-    <distributionManagement>
-        <repository>
-            <uniqueVersion>false</uniqueVersion>
-            <id>java.net-maven2-repository</id>
-            <url>java-net:/maven2-repository/trunk/repository/</url>
-        </repository>
-    </distributionManagement>
-    <build>
-        <defaultGoal>install</defaultGoal>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                    <excludes>
-                        <exclude>**/*.*</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <version>2.1</version>
-                <executions>
-                    <execution>
-                        <id>attach-sources</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>jar-no-fork</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestFile>target/classes/META-INF/MANIFEST.MF
-                        </manifestFile>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-        <extensions>
-            <extension>
-                <groupId>org.jvnet.wagon-svn</groupId>
-                <artifactId>wagon-svn</artifactId>
-                <version>1.8</version>
-            </extension>
-        </extensions>
-
-    </build>
-    <issueManagement>
-        <system>issueZilla</system>
-        <url>
-            https://javaserverfaces.dev.java.net/servlets/ProjectIssues
-        </url>
-    </issueManagement>
-    <mailingLists>
-        <mailingList>
-            <name>Sun's JavaServer Faces Implementation Dev List</name>
-            <post>dev at javaserverfaces.dev.java.net</post>
-            <archive>
-                https://javaserverfaces.dev.java.net/servlets/SummarizeList?listName=dev
-            </archive>
-        </mailingList>
-    </mailingLists>
-    <contributors>
-        <contributor>
-            <name>Craig McClanahan</name>
-        </contributor>
-        <contributor>
-            <name>Deepak Gothe</name>
-        </contributor>
-        <contributor>
-            <name>Gregory Murray</name>
-        </contributor>
-        <contributor>
-            <name>Justyna Horwat</name>
-        </contributor>
-        <contributor>
-            <name>Jayashri Visvanathan</name>
-        </contributor>
-        <contributor>
-            <name>Jennifer Ball</name>
-        </contributor>
-        <contributor>
-            <name>Jacob Hookom</name>
-        </contributor>
-        <contributor>
-            <name>Raj Premkumar</name>
-        </contributor>
-        <contributor>
-            <name>Stan Silvert</name>
-        </contributor>
-        <contributor>
-            <name>Mike Youngstrom</name>
-        </contributor>
-        <contributor>
-            <name>Jason Lee</name>
-        </contributor>
-    </contributors>
-    <organization>
-        <name>Sun Microsystems, Inc</name>
-        <url>http://www.sun.com/</url>
-    </organization>
-    <dependencies>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet.jsp</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.el</groupId>
-            <artifactId>el-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>jstl</groupId>
-            <artifactId>jstl</artifactId>
-            <version>1.2</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/common/common.iml b/common/common.iml
deleted file mode 100644
index 3cf97c4..0000000
--- a/common/common.iml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <excludeFolder url="file://$MODULE_DIR$/lib" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="mojarra-build" level="project" />
-  </component>
-</module>
-
diff --git a/injectionprovider/build.xml b/injectionprovider/build.xml
deleted file mode 100644
index d0dde50..0000000
--- a/injectionprovider/build.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ************ JSF build file ************************************** -->
-
-<project name="mojarra-injectionprovider" default="main" basedir=".">
-
-    <property file="../build.properties"/>
-    <import file="${jsf.build.home}/common/ant/common.xml"/>
-
-    <property name="src.dir" value="${basedir}/src"/>
-    <property name="java.src.dir" value="${src.dir}/java"/>
-    <property name="etc.src.dir" value="${src.dir}/etc"/>
-    <property name="build.dir" value="${basedir}/build"/>
-    <property name="build.classes.dir" value="${build.dir}/classes"/>
-    <property name="output.jar.name" value="${build.dir}/injectionproviders.jar"/>
-
-    <path id="compile.classpath">
-        <pathelement location="${servlet.jar}"/>
-        <pathelement location="${jsf-api.jar}"/>
-        <pathelement location="${jsf-impl.jar}"/>
-        <pathelement location="${glassfish.jar}"/>
-        <pathelement location="${tomcat6.jar}"/>
-        <pathelement location="${jetty.jar}" />
-        <pathelement location="${jetty.util.jar}" />
-        <pathelement location="${jetty.annotations.jar}"/>
-        <pathelement location="${jetty.plus.jar}"/>
-        <pathelement location="${annotation.jar}"/>
-    </path>
-
-    <!-- ===================== Targets ===================== -->
-
-    <target name="main"
-            description="Compiles and archives the container specific InjectionProvider implementations"
-            depends="compile,archive">
-    </target>
-
-    <target name="compile" depends="update.containers">
-         <echo>
-NOTE: You must build jsf-api and jsf-ri *before* building this project.
-        </echo>
-        <mkdir dir="${build.dir}/classes"/>
-        <jsf.javac srcdir="${src.dir}"
-                   destdir="${build.classes.dir}">
-            <classpath>
-                <path refid="compile.classpath"/>
-            </classpath>
-        </jsf.javac>
-    </target>
-
-    <target name="archive">
-        <mkdir dir="${build.classes.dir}/META-INF/services"/>
-        <copy file="${etc.src.dir}/com.sun.faces.spi.injectionprovider"
-              todir="${build.classes.dir}/META-INF/services"/>
-        <jsf.manifested.jar jarfile="${output.jar.name}"
-                            basedir="${build.classes.dir}"
-                            extension-name=""/>
-    </target>
-
-    <target name="clean">
-        <delete dir="${build.dir}"/>
-    </target>
-
-</project>
\ No newline at end of file
diff --git a/injectionprovider/src/etc/com.sun.faces.spi.injectionprovider b/injectionprovider/src/etc/com.sun.faces.spi.injectionprovider
deleted file mode 100644
index 6f1d3e0..0000000
--- a/injectionprovider/src/etc/com.sun.faces.spi.injectionprovider
+++ /dev/null
@@ -1,2 +0,0 @@
-com.sun.faces.vendor.Tomcat6InjectionProvider:org.apache.catalina.util.DefaultAnnotationProcessor
-com.sun.faces.vendor.Jetty6InjectionProvider:org.mortbay.jetty.plus.annotation.InjectionCollection
\ No newline at end of file
diff --git a/injectionprovider/src/java/com/sun/faces/vendor/GlassFishInjectionProvider.java b/injectionprovider/src/java/com/sun/faces/vendor/GlassFishInjectionProvider.java
deleted file mode 100644
index d82fe1f..0000000
--- a/injectionprovider/src/java/com/sun/faces/vendor/GlassFishInjectionProvider.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.vendor;
-
-import com.sun.enterprise.ComponentInvocation;
-import com.sun.enterprise.InjectionException;
-import com.sun.enterprise.InjectionManager;
-import com.sun.enterprise.InvocationManager;
-import com.sun.enterprise.Switch;
-import com.sun.enterprise.deployment.InjectionInfo;
-import com.sun.enterprise.deployment.JndiNameEnvironment;
-import com.sun.faces.spi.DiscoverableInjectionProvider;
-import com.sun.faces.spi.InjectionProviderException;
-import com.sun.faces.util.FacesLogger;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.LinkedList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-
-/**
- * <p>This <code>InjectionProvider</code> is specific to the
- * GlassFish/SJSAS 9.x PE/EE application servers.</p>
- */
-public class GlassFishInjectionProvider extends DiscoverableInjectionProvider {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    private InjectionManager injectionManager;
-    private Switch theSwitch;
-    private InvocationManager invokeMgr;
-    private Method getInjectionInfoMethod;
-    private boolean usingNewAPI;
-
-    /**
-     * <p>Constructs a new <code>GlassFishInjectionProvider</code> instance.</p>
-     */
-    public GlassFishInjectionProvider() {
-        theSwitch = Switch.getSwitch();
-        invokeMgr = theSwitch.getInvocationManager();
-        injectionManager = theSwitch.getInjectionManager();
-    }
-
-    /**
-     * <p>The implementation of this method must perform the following
-     * steps:
-     * <ul>
-     * <li>Inject the supported resources per the Servlet 2.5
-     * specification into the provided object</li>    
-     * </ul>
-     * </p>
-     *
-     * @param managedBean the target managed bean
-     */
-    public void inject(Object managedBean) throws InjectionProviderException {
-        try {
-            injectionManager.injectInstance(managedBean,
-                                            getNamingEnvironment(),
-                                            false);
-        } catch (InjectionException ie) {
-            throw new InjectionProviderException(ie);
-        }
-    }
-
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PreDestroy</code> annotation
-     * (per the Common Annotations Specification).
-     *
-     * @param managedBean the target managed bean
-     */
-    public void invokePreDestroy(Object managedBean)
-    throws InjectionProviderException {
-        try {
-            injectionManager.invokeInstancePreDestroy(managedBean);
-        } catch (InjectionException ie) {
-            throw new InjectionProviderException(ie);
-        }
-    }
-
-
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PostConstruct</code> annotation
-     * (per the Common Annotations Specification).
-     *
-     * @param managedBean the target managed bean
-     *
-     * @throws com.sun.faces.spi.InjectionProviderException
-     *          if an error occurs when invoking
-     *          the method annotated by the <code>@PostConstruct</code> annotation
-     */
-    public void invokePostConstruct(Object managedBean)
-          throws InjectionProviderException {
-            try {
-                this.invokePostConstruct(managedBean, getNamingEnvironment());
-            } catch (InjectionException ie) {
-                throw new InjectionProviderException(ie);
-            }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    /**
-     * <p>This is based off of code in <code>InjectionManagerImpl</code>.</p>
-     * @return <code>JndiNameEnvironment</code>
-     * @throws InjectionException if we're unable to obtain the
-     *  <code>JndiNameEnvironment</code>
-     */
-    private JndiNameEnvironment getNamingEnvironment()
-         throws InjectionException {
-        ComponentInvocation inv = invokeMgr.getCurrentInvocation();
-
-        if (inv != null) {
-
-            JndiNameEnvironment componentEnv = (JndiNameEnvironment)
-                 theSwitch.getDescriptorFor(inv.getContainerContext());
-
-            if (componentEnv != null) {
-                return componentEnv;
-            } else {
-                throw new InjectionException("No descriptor registered for " + " current invocation : " + inv);
-            }
-
-        } else {
-            throw new InjectionException("null invocation context");
-        }
-    }
-
-
-    /**
-     * <p>This is based off of code in <code>InjectionManagerImpl</code>.</p>
-     *
-     * @param instance managed bean instance
-     * @param envDescriptor JNDI environment
-     * @throws InjectionException if an error occurs
-     */
-    private void invokePostConstruct(Object instance,
-                                     JndiNameEnvironment envDescriptor)
-    throws InjectionException {
-        LinkedList<Method> postConstructMethods = new LinkedList<Method>();
-
-        Class<?> nextClass = instance.getClass();
-
-        // Process each class in the inheritance hierarchy, starting with
-        // the most derived class and ignoring java.lang.Object.
-        while ((!Object.class.equals(nextClass)) && (nextClass != null)) {
-
-            InjectionInfo injInfo;
-            Object argument = ((usingNewAPI(envDescriptor)) ? nextClass : nextClass.getName());
-            try {
-                injInfo = (InjectionInfo) getInjectionInfoMethod
-                      .invoke(envDescriptor, argument);
-            } catch (Exception e) {
-                throw new InjectionException(e.getMessage());
-            }
-
-            if (injInfo.getPostConstructMethodName() != null) {
-
-                Method postConstructMethod = getPostConstructMethod
-                     (injInfo, nextClass);
-
-                // Invoke the preDestroy methods starting from
-                // the least-derived class downward.
-                postConstructMethods.addFirst(postConstructMethod);
-            }
-
-            nextClass = nextClass.getSuperclass();
-        }
-
-        for (Method postConstructMethod : postConstructMethods) {
-
-            invokeLifecycleMethod(postConstructMethod, instance);
-
-        }
-
-    }
-
-
-    /**
-     * <p>This is based off of code in <code>InjectionManagerImpl</code>.</p>
-     * @param injInfo InjectionInfo
-     * @param resourceClass target class
-     * @return a Method marked with the @PostConstruct annotation
-     * @throws InjectionException if an error occurs
-     */
-    private Method getPostConstructMethod(InjectionInfo injInfo,
-                                          Class<?> resourceClass)
-        throws InjectionException {
-
-        Method m = injInfo.getPostConstructMethod();
-
-        if( m == null ) {
-            String postConstructMethodName =
-                injInfo.getPostConstructMethodName();
-
-            // Check for the method within the resourceClass only.
-            // This does not include super-classses.
-            for(Method next : resourceClass.getDeclaredMethods()) {
-                // InjectionManager only handles injection into PostConstruct
-                // methods with no arguments.
-                if( next.getName().equals(postConstructMethodName) &&
-                    (next.getParameterTypes().length == 0) ) {
-                    m = next;
-                    injInfo.setPostConstructMethod(m);
-                    break;
-                }
-            }
-        }
-
-        if( m == null ) {
-            throw new InjectionException
-                ("InjectionManager exception. PostConstruct method " +
-                 injInfo.getPostConstructMethodName() +
-                 " could not be found in class " +
-                 injInfo.getClassName());
-        }
-
-        return m;
-    }
-
-
-    /**
-     * <p>This is based off of code in <code>InjectionManagerImpl</code>.</p>
-     * @param lifecycleMethod the method to invoke
-     * @param instance the instanced to invoke the method against
-     * @throws InjectionException if an error occurs
-     */
-     private void invokeLifecycleMethod(final Method lifecycleMethod,
-                                       final Object instance)
-        throws InjectionException {
-
-        try {
-
-            if(LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.fine("Calling lifecycle method " +
-                             lifecycleMethod + " on class " +
-                             lifecycleMethod.getDeclaringClass());
-            }
-
-            // Wrap actual value insertion in doPrivileged to
-            // allow for private/protected field access.
-            java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedExceptionAction() {
-                    public java.lang.Object run() throws Exception {
-                        if( !lifecycleMethod.isAccessible() ) {
-                            lifecycleMethod.setAccessible(true);
-                        }
-                        lifecycleMethod.invoke(instance);
-                        return null;
-                    }
-                });
-        } catch( Exception t) {
-
-                String msg = "Exception attempting invoke lifecycle "
-                    + " method " + lifecycleMethod;
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE, msg, t);
-                }
-                InjectionException ie = new InjectionException(msg);
-                Throwable cause = (t instanceof InvocationTargetException) ?
-                    t.getCause() : t;
-                ie.initCause( cause );
-                throw ie;
-
-        }
-
-    }
-
-
-    /**
-     * This method is necessary to allow us to run within older and newer
-     * versions of GlassFish.
-     */
-    private boolean usingNewAPI(JndiNameEnvironment envDescriptor) {
-
-        if (getInjectionInfoMethod == null) {
-            try {
-                getInjectionInfoMethod =
-                      envDescriptor.getClass().getMethod("getInjectionInfoByClass", String.class);
-                usingNewAPI = false;
-            } catch (NoSuchMethodException nsme) {
-                // using a later version of the API if we get here
-                try {
-                    getInjectionInfoMethod = envDescriptor.getClass().getMethod("getInjectionInfoByClass", Class.class);
-                    usingNewAPI = true;
-                } catch (NoSuchMethodException nsme2) {
-                    throw new FacesException(nsme2);
-                }
-            }
-        }
-        return usingNewAPI;
-
-    }
-
-} // END GlassFishInjectionProvider
diff --git a/injectionprovider/src/java/com/sun/faces/vendor/Jetty6InjectionProvider.java b/injectionprovider/src/java/com/sun/faces/vendor/Jetty6InjectionProvider.java
deleted file mode 100644
index 6118517..0000000
--- a/injectionprovider/src/java/com/sun/faces/vendor/Jetty6InjectionProvider.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.vendor;
-
-import com.sun.faces.spi.DiscoverableInjectionProvider;
-import com.sun.faces.spi.InjectionProviderException;
-import org.mortbay.jetty.plus.annotation.InjectionCollection;
-import org.mortbay.jetty.plus.annotation.LifeCycleCallbackCollection;
-import org.mortbay.jetty.annotations.AnnotationParser;
-import org.mortbay.jetty.webapp.WebAppContext;
-
-
-
-/**
- * <p>See http://docs.codehaus.org/display/JETTY/Annotations for details on
- * Jetty's supported Annotations.</p>
- */
-public class Jetty6InjectionProvider extends DiscoverableInjectionProvider {
-
-    private InjectionCollection injections;
-    private LifeCycleCallbackCollection callbacks;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new Jetty6InjectionProvider instance.</p>
-     */
-    public Jetty6InjectionProvider() {
-
-        injections = new InjectionCollection();
-        callbacks = new LifeCycleCallbackCollection();
-
-    }
-
-
-    // ------------------------------ Methods from DiscoverableInjectionProvider
-
-
-    /**
-     * <p>The implementation of this method must perform the following
-     * steps:
-     * <ul>
-     * <li>Inject the supported resources per the Servlet 2.5
-     * specification into the provided object</li>
-     * </ul>
-     * </p>
-     * <p>This method <em>must not</em> invoke any methods
-     * annotated with <code>@PostConstruct</code>
-     *
-     * @param managedBean the target managed bean
-     * @throws com.sun.faces.spi.InjectionProviderException
-     *          if an error occurs during
-     *          resource injection
-     */
-    public void inject(Object managedBean) throws InjectionProviderException {
-
-        AnnotationParser.parseAnnotations((WebAppContext) WebAppContext.getCurrentWebAppContext(),
-                                          managedBean.getClass(),
-                                          null,
-                                          injections,
-                                          callbacks);
-        try {
-            injections.inject(managedBean);
-        } catch (Exception e) {
-            throw new InjectionProviderException(e);
-        }
-        
-    }
-
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PreDestroy</code> annotation
-     * (per the Common Annotations Specification).
-     *
-     * @param managedBean the target managed bean
-     * @throws com.sun.faces.spi.InjectionProviderException
-     *          if an error occurs when invoking
-     *          the method annotated by the <code>@PreDestroy</code> annotation
-     */
-    public void invokePreDestroy(Object managedBean)
-    throws InjectionProviderException {
-
-        try {
-            callbacks.callPreDestroyCallback(managedBean);
-        } catch (Exception e) {
-            throw new InjectionProviderException(e);
-        }
-
-    }
-
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PostConstruct</code> annotation
-     * (per the Common Annotations Specification).
-     *
-     * @param managedBean the target managed bean
-     * @throws com.sun.faces.spi.InjectionProviderException
-     *          if an error occurs when invoking
-     *          the method annotated by the <code>@PostConstruct</code>
-     *          annotation
-     */
-    public void invokePostConstruct(Object managedBean)
-    throws InjectionProviderException {
-
-        try {
-            callbacks.callPostConstructCallback(managedBean);       
-        } catch (Exception e) {
-            throw new InjectionProviderException(e);
-        }
-
-    }
-}
diff --git a/injectionprovider/src/java/com/sun/faces/vendor/Tomcat6InjectionProvider.java b/injectionprovider/src/java/com/sun/faces/vendor/Tomcat6InjectionProvider.java
deleted file mode 100644
index cfb747c..0000000
--- a/injectionprovider/src/java/com/sun/faces/vendor/Tomcat6InjectionProvider.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.vendor;
-
-import com.sun.faces.spi.DiscoverableInjectionProvider;
-import com.sun.faces.spi.InjectionProviderException;
-
-import javax.servlet.ServletContext;
-
-import org.apache.AnnotationProcessor;
-
-/**
- *
- */
-public class Tomcat6InjectionProvider extends DiscoverableInjectionProvider {
-
-    private ServletContext servletContext;
-    
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public Tomcat6InjectionProvider(ServletContext servletContext) {
-        this.servletContext = servletContext;
-    }
-
-    // ------------------------------------------ Methods from InjectionProvider
-
-
-    /**
-     * <p>The implementation of this method must perform the following
-     * steps:
-     * <ul>
-     * <li>Inject the supported resources per the Servlet 2.5
-     * specification into the provided object</li>
-     * </ul>
-     * </p>
-     * <p>This method <em>must not</em> invoke any methods
-     * annotated with <code>@PostConstruct</code>
-     *
-     * @param managedBean the target managed bean
-     * @throws com.sun.faces.spi.InjectionProviderException
-     *          if an error occurs during
-     *          resource injection
-     */
-    public void inject(Object managedBean) throws InjectionProviderException {
-        try {
-            getProcessor().processAnnotations(managedBean);
-        } catch (Exception e) {
-            throw new InjectionProviderException(e);
-        }
-    }
-
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PreDestroy</code> annotation
-     * (per the Common Annotations Specification).
-     *
-     * @param managedBean the target managed bean
-     * @throws com.sun.faces.spi.InjectionProviderException
-     *          if an error occurs when invoking
-     *          the method annotated by the <code>@PreDestroy</code> annotation
-     */
-    public void invokePreDestroy(Object managedBean) throws InjectionProviderException {
-        try {
-            getProcessor().preDestroy(managedBean);
-        } catch (Exception e) {
-            throw new InjectionProviderException(e);
-        }
-    }
-
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PostConstruct</code> annotation
-     * (per the Common Annotations Specification).
-     *
-     * @param managedBean the target managed bean
-     * @throws com.sun.faces.spi.InjectionProviderException
-     *          if an error occurs when invoking
-     *          the method annotated by the <code>@PostConstruct</code> annotation
-     */
-    public void invokePostConstruct(Object managedBean) throws InjectionProviderException {
-        try {
-            getProcessor().postConstruct(managedBean);
-        } catch (Exception e) {
-            throw new InjectionProviderException(e);
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private AnnotationProcessor getProcessor() {
-        return ((AnnotationProcessor) servletContext.getAttribute(AnnotationProcessor.class.getName()));
-    }
-}
diff --git a/javax/faces/CurrentThreadToServletContext.java b/javax/faces/CurrentThreadToServletContext.java
new file mode 100644
index 0000000..8a71305
--- /dev/null
+++ b/javax/faces/CurrentThreadToServletContext.java
@@ -0,0 +1,382 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+
+package javax.faces;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+// ----------------------------------------------------------- Inner Classes
+final class CurrentThreadToServletContext {
+    ConcurrentMap<FactoryManagerCacheKey, FactoryFinderInstance> applicationMap = new ConcurrentHashMap<FactoryManagerCacheKey, FactoryFinderInstance>();
+    private AtomicBoolean logNullFacesContext = new AtomicBoolean(false);
+    private AtomicBoolean logNonNullFacesContext = new AtomicBoolean(false);
+    
+    private static final Logger LOGGER;
+    
+    static {
+        LOGGER = Logger.getLogger("javax.faces", "javax.faces.LogStrings");
+    }
+
+    // ------------------------------------------------------ Public Methods
+    Object getFallbackFactory(FactoryFinderInstance brokenFactoryManager, String factoryName) {
+        Object result = null;
+        ClassLoader cl = getClassLoader();        
+        for (Map.Entry<FactoryManagerCacheKey, FactoryFinderInstance> cur : applicationMap.entrySet()) {
+            if (cur.getKey().getClassLoader().equals(cl) && !cur.getValue().equals(brokenFactoryManager)) {
+                result = cur.getValue().getFactory(factoryName);
+                if (null != result) {
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+
+    FactoryFinderInstance getApplicationFactoryManager() {
+        ClassLoader cl = getClassLoader();
+        FactoryFinderInstance result = getApplicationFactoryManager(cl, true);
+        return result;
+    }
+
+    private FactoryFinderInstance getApplicationFactoryManager(ClassLoader cl, boolean create) {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        boolean isSpecialInitializationCase = detectSpecialInitializationCase(facesContext);
+        FactoryManagerCacheKey key = new FactoryManagerCacheKey(facesContext, cl, applicationMap);
+        FactoryFinderInstance result = applicationMap.get(key);
+        FactoryFinderInstance toCopy = null;
+        if (result == null && create) {
+            boolean createNewFactoryManagerInstance = false;
+            if (isSpecialInitializationCase) {
+                // We need to obtain a reference to the correct
+                // FactoryFinderInstance.  Iterate through the data structure
+                // containing all FactoryFinderInstance instances for this VM.
+                FactoryManagerCacheKey curKey;
+                boolean classLoadersMatchButContextsDoNotMatch = false;
+                boolean foundNoMatchInApplicationMap = true;
+                for (Map.Entry<FactoryManagerCacheKey, FactoryFinderInstance> cur : applicationMap.entrySet()) {
+                    curKey = cur.getKey();
+                    // If the current FactoryFinderInstance is for a
+                    // the same ClassLoader as the current ClassLoader...
+                    if (curKey.getClassLoader().equals(cl)) {
+                        foundNoMatchInApplicationMap = false;
+                        // Check the other descriminator for the
+                        // key: the context.
+                        // If the context objects of the keys are
+                        // both non-null and non-equal, then *do*
+                        // create a new FactoryFinderInstance instance.
+                        if ((null != key.getContext() && null != curKey.getContext()) && (!key.getContext().equals(curKey.getContext()))) {
+                            classLoadersMatchButContextsDoNotMatch = true;
+                            toCopy = cur.getValue();
+                        } else {
+                            // Otherwise, use this FactoryFinderInstance
+                            // instance.
+                            result = cur.getValue();
+                        }
+                        break;
+                    }
+                }
+                // We must create a new FactoryFinderInstance if there was no match
+                // at all found in the applicationMap, or a match was found
+                // and the match is safe to use in this web app
+                createNewFactoryManagerInstance = foundNoMatchInApplicationMap || (null == result && classLoadersMatchButContextsDoNotMatch);
+            } else {
+                createNewFactoryManagerInstance = true;
+            }
+            if (createNewFactoryManagerInstance) {
+                FactoryFinderInstance newResult;
+                if (null != toCopy) {
+                    newResult = new FactoryFinderInstance(toCopy);
+                } else {
+                    newResult = new FactoryFinderInstance();
+                }
+                result = applicationMap.putIfAbsent(key, newResult);
+                result = (null != result) ? result : newResult;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * This method is used to detect the following special initialization case.
+     * IF no FactoryFinderInstance can be found for key,
+    AND this call to getApplicationFactoryFinderInstance() *does* have a currentKeyrent FacesContext
+    BUT a previous call to getApplicationFactoryFinderInstance *did not* have a currentKeyrent FacesContext
+     *
+     * @param facesContext the currentKeyrent FacesContext for this request
+     * @return true if the currentKeyrent execution falls into the special initialization case.
+     */
+    private boolean detectSpecialInitializationCase(FacesContext facesContext) {
+        boolean result = false;
+        if (null == facesContext) {
+            logNullFacesContext.compareAndSet(false, true);
+        } else {
+            logNonNullFacesContext.compareAndSet(false, true);
+        }
+        result = logNullFacesContext.get() && logNonNullFacesContext.get();
+        return result;
+    }
+
+    public void removeApplicationFactoryManager() {
+        ClassLoader cl = getClassLoader();
+        FactoryFinderInstance fm = this.getApplicationFactoryManager(cl, false);
+        if (null != fm) {
+            fm.clearInjectionProvider();
+        }
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        boolean isSpecialInitializationCase = detectSpecialInitializationCase(facesContext);
+        FactoryManagerCacheKey key = new FactoryManagerCacheKey(facesContext, cl, applicationMap);
+        applicationMap.remove(key);
+        if (isSpecialInitializationCase) {
+            logNullFacesContext.set(false);
+            logNonNullFacesContext.set(false);
+        }
+    }
+
+    public void resetSpecialInitializationCaseFlags() {
+        logNullFacesContext.set(false);
+        logNonNullFacesContext.set(false);
+    }
+    
+    /**
+     * <p>Identify and return the class loader that is associated with the
+     * calling web application.</p>
+     *
+     * @throws FacesException if the web application class loader
+     *                        cannot be identified
+     */
+    private ClassLoader getClassLoader() throws FacesException {
+
+        // J2EE 1.3 (and later) containers are required to make the
+        // web application class loader visible through the context
+        // class loader of the current thread.
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if (cl == null) {
+            throw new FacesException("getContextClassLoader");
+        }
+        return (cl);
+
+    }
+
+    private static final class FactoryManagerCacheKey {
+        // The ClassLoader that is active the first time this key
+        // is created.  At startup time, this is assumed to be the 
+        // web app ClassLoader
+        private ClassLoader cl;
+        // I marker that disambiguates the case when multiple
+        // web apps have the same web app ClassLoader but different
+        // ServletContext instances.  
+        private Long marker;
+        // The ServletContext corresponding to this marker/ClassLoader pair.
+        private Object context;
+
+        private static final String MARKER_KEY = FactoryFinder.class.getName() + "." +
+                FactoryManagerCacheKey.class.getSimpleName();
+        private static final String INIT_TIME_CL_KEY = MARKER_KEY + ".InitTimeCLKey";
+
+        // <editor-fold defaultstate="collapsed" desc="Constructors and helpers">
+        public FactoryManagerCacheKey(FacesContext facesContext, ClassLoader cl,
+                Map<FactoryManagerCacheKey,FactoryFinderInstance> factoryMap) {
+            ExternalContext extContext = (null != facesContext) ? facesContext.getExternalContext()
+                    : null;
+            Object servletContext = (null != extContext) ? extContext.getContext() : null;
+
+            if (null == facesContext || null == extContext || null == servletContext) {
+                initFromFactoryMap(cl, factoryMap);
+            } else {
+                initFromAppMap(extContext, cl);
+            } 
+        }
+        
+        private void initFromFactoryMap(ClassLoader cl,
+                Map<FactoryManagerCacheKey,FactoryFinderInstance> factoryMap) {
+            // We don't have a FacesContext.
+            // Our only recourse is to inspect the keys of the
+            // factoryMap and see if any of them has a classloader
+            // equal to our argument cl.
+            Set<FactoryManagerCacheKey> keys = factoryMap.keySet();
+            FactoryManagerCacheKey match = null;
+            
+            if (keys.isEmpty()) {
+                this.cl = cl;
+                this.marker = new Long(System.currentTimeMillis());
+            } else {
+            
+                boolean found = false;
+                // For each entry in the factoryMap's keySet...
+                for (FactoryManagerCacheKey currentKey : keys) {
+                    ClassLoader curCL = cl;
+                    // For each ClassLoader in the hierarchy starting 
+                    // with the argument ClassLoader...
+                    while (!found && null != curCL) {
+                        // if the ClassLoader at this level in the hierarchy
+                        // is equal to the argument ClassLoader, consider it a match.
+                        found = curCL.equals(currentKey.cl);
+                        // If it's not a match, try the parent in the ClassLoader
+                        // hierarchy.
+                        if (!found) {
+                            curCL = curCL.getParent();
+                        }
+                    }
+                    // Keep searching for another match to detect an unsupported
+                    // deployment scenario.
+                    if (found) {
+                        if (null != currentKey && null != match) {
+                            LOGGER.log(Level.WARNING, "Multiple JSF Applications found on same ClassLoader.  Unable to safely determine which FactoryManager instance to use. Defaulting to first match.");
+                            break;
+                        }
+                        match = currentKey;
+                        this.cl = curCL;
+                    }
+                }
+                if (null != match) {
+                    this.marker = match.marker;
+                    this.context = match.context;
+                }
+            }
+            
+        }
+        
+        private void initFromAppMap(ExternalContext extContext, ClassLoader cl) {
+            Map<String, Object> appMap = extContext.getApplicationMap();
+            
+            Long val = (Long) appMap.get(MARKER_KEY);
+            if (null == val) {
+                this.marker = new Long(System.currentTimeMillis());
+                appMap.put(MARKER_KEY, marker);
+                
+                // If we needed to create a marker, assume that the
+                // argument CL is safe to treat as the web app
+                // ClassLoader.  This assumption allows us 
+                // to bypass the ClassLoader resolution algorithm
+                // in resolveToFirstTimeUsedClassLoader() in all cases
+                // except when the TCCL has been replaced.
+                appMap.put(INIT_TIME_CL_KEY, new Integer(System.identityHashCode(cl)));
+                
+            } else {
+                this.marker = val;
+            }
+            this.cl = resolveToFirstTimeUsedClassLoader(cl, extContext);
+            this.context = extContext.getContext();
+        }
+        
+       /*
+        * Resolve the argument ClassLoader to be the ClassLoader that 
+        * was passed in to the ctor the first time a FactoryManagerCacheKey
+        * was created for this web app.  
+        */
+
+        private ClassLoader resolveToFirstTimeUsedClassLoader(ClassLoader toResolve, ExternalContext extContext) {
+            ClassLoader curCL = toResolve;
+            ClassLoader resolved = null;
+            Map<String, Object> appMap = extContext.getApplicationMap();
+            
+            // See if the argument curCL already is the web app class loader
+            Integer webAppCLHashCode = (Integer) appMap.get(INIT_TIME_CL_KEY);
+            boolean found = false;
+            if (null != webAppCLHashCode) {
+                int toResolveHashCode = System.identityHashCode(curCL);
+                while (!found && null != curCL) {
+                    found = (toResolveHashCode == webAppCLHashCode);
+                    if (!found) {
+                        curCL = curCL.getParent();
+                        toResolveHashCode = System.identityHashCode(curCL);
+                    }
+                }
+            }
+            resolved = found ? curCL : toResolve;
+            
+            return resolved;
+        }
+        
+        // </editor-fold>
+        
+        public ClassLoader getClassLoader() {
+            return cl;
+        }
+        
+        public Object getContext() {
+            return context;
+        }
+        
+        private FactoryManagerCacheKey() {}
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            final FactoryManagerCacheKey other = (FactoryManagerCacheKey) obj;
+            if (this.cl != other.cl && (this.cl == null || !this.cl.equals(other.cl))) {
+                return false;
+            }
+            if (this.marker != other.marker && (this.marker == null || !this.marker.equals(other.marker))) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hash = 7;
+            hash = 97 * hash + (this.cl != null ? this.cl.hashCode() : 0);
+            hash = 97 * hash + (this.marker != null ? this.marker.hashCode() : 0);
+            return hash;
+        }
+
+
+        
+
+    }
+    
+    
+
+} // END FactoryCache
diff --git a/javax/faces/FacesException.java b/javax/faces/FacesException.java
new file mode 100644
index 0000000..cfd2b2d
--- /dev/null
+++ b/javax/faces/FacesException.java
@@ -0,0 +1,131 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces;
+
+
+/**
+ * <p>This class encapsulates general JavaServer Faces exceptions.</p>
+ */
+
+public class FacesException extends RuntimeException {
+
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public FacesException() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public FacesException(String message) {
+
+        super(message);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.  The detail
+     * message will be set to <code>(cause == null ? null :
+     * cause.toString()</code>
+     *
+     * @param cause The root cause for this exception
+     */
+    public FacesException(Throwable cause) {
+
+        super(cause == null ? null : cause.toString());
+        this.cause = cause;
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause The root cause for this exception
+     */
+    public FacesException(String message, Throwable cause) {
+
+        super(message);
+        this.cause = cause;
+
+    }
+
+
+
+    // ----------------------------------------------------- Instance Variables
+
+
+    /**
+     * <p>The underlying exception that caused this exception.</p>
+     */
+    private Throwable cause = null;
+
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Return the cause of this exception, or <code>null</code> if the
+     * cause is nonexistent or unknown.</p>
+     */
+    public Throwable getCause() {
+
+        return (this.cause);
+
+    }
+
+
+}
diff --git a/javax/faces/FacesWrapper.java b/javax/faces/FacesWrapper.java
new file mode 100644
index 0000000..82e1567
--- /dev/null
+++ b/javax/faces/FacesWrapper.java
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces;
+
+/**
+ * <p class="changed_added_2_0">Any wrapper class in JSF that must provide
+ * access to the object it wraps must implement this interface.</p>
+ * 
+ * @since 2.0
+ */
+public interface FacesWrapper<T> {
+    
+    /**
+     * <p class="changed_added_2_0">A class that implements this
+     * interface uses this method to return an instance of the class
+     * being wrapped.</p>
+     * 
+     * @since 2.0
+     */
+    public T getWrapped();
+
+}
diff --git a/javax/faces/FactoryFinder.java b/javax/faces/FactoryFinder.java
new file mode 100644
index 0000000..8b23dfc
--- /dev/null
+++ b/javax/faces/FactoryFinder.java
@@ -0,0 +1,373 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces;
+
+
+import com.sun.faces.spi.InjectionProvider;
+import java.text.MessageFormat;
+import java.util.Map;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.util.Collection;
+
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_1 changed_modified_2_2">FactoryFinder</strong>
+ * implements the standard discovery algorithm for all factory objects
+ * specified in the JavaServer Faces APIs.  For a given factory class
+ * name, a corresponding implementation class is searched for based on
+ * the following algorithm.  Items are listed in order of decreasing
+ * search precedence:</p> 
+
+ * <ul> 
+
+ * <li><p>If the JavaServer Faces configuration file bundled into the
+ * <code>WEB-INF</code> directory of the webapp contains a
+ * <code>factory</code> entry of the given factory class name, that
+ * factory is used.<p></li>
+
+ * <li><p>If the JavaServer Faces configuration files named by the
+ * <code>javax.faces.CONFIG_FILES</code> <code>ServletContext</code> init
+ * parameter contain any <code>factory</code> entries of the given
+ * factory class name, those injectionProvider are used, with the last one taking
+ * precedence.</p></li> 
+
+ * <li><p>If there are any JavaServer Faces configuration files bundled
+ * into the <code>META-INF</code> directory of any jars on the
+ * <code>ServletContext</code>'s resource paths, the
+ * <code>factory</code> entries of the given factory class name in those
+ * files are used, with the last one taking precedence.</p></li>
+
+ * <li><p>If a <code>META-INF/services/{factory-class-name}</code>
+ * resource is visible to the web application class loader for the
+ * calling application (typically as a injectionProvider of being present in the
+ * manifest of a JAR file), its first line is read and assumed to be the
+ * name of the factory implementation class to use.</p></li>
+
+ * <li><p>If none of the above steps yield a match, the JavaServer Faces
+ * implementation specific class is used.</p></li>
+
+ * </ul>
+
+ * <p>If any of the injectionProvider found on any of the steps above happen to
+ * have a one-argument constructor, with argument the type being the
+ * abstract factory class, that constructor is invoked, and the previous
+ * match is passed to the constructor.  For example, say the container
+ * vendor provided an implementation of {@link
+ * javax.faces.context.FacesContextFactory}, and identified it in
+ * <code>META-INF/services/javax.faces.context.FacesContextFactory</code>
+ * in a jar on the webapp ClassLoader.  Also say this implementation
+ * provided by the container vendor had a one argument constructor that
+ * took a <code>FacesContextFactory</code> instance.  The
+ * <code>FactoryFinder</code> system would call that one-argument
+ * constructor, passing the implementation of
+ * <code>FacesContextFactory</code> provided by the JavaServer Faces
+ * implementation.</p>
+
+ * <p>If a Factory implementation does not provide a proper one-argument
+ * constructor, it must provide a zero-arguments constructor in order to
+ * be successfully instantiated.</p>
+
+ * <p>Once the name of the factory implementation class is located, the
+ * web application class loader for the calling application is requested
+ * to load this class, and a corresponding instance of the class will be
+ * created.  A side effect of this rule is that each web application
+ * will receive its own instance of each factory class, whether the
+ * JavaServer Faces implementation is included within the web
+ * application or is made visible through the container's facilities for
+ * shared libraries.</p>
+ */
+
+public final class FactoryFinder {
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * Package-private constructor to disable instantiation of this class.
+     */
+    FactoryFinder() {
+    }
+
+    // ----------------------------------------------------- Manifest Constants
+
+
+    /**
+     * <p>The property name for the
+     * {@link javax.faces.application.ApplicationFactory} class name.</p>
+     */
+    public final static String APPLICATION_FACTORY =
+         "javax.faces.application.ApplicationFactory";
+
+    /**
+     * <p>The property name for the
+     * {@link javax.faces.lifecycle.ClientWindowFactory} class name.</p>
+     * @since 2.2
+     */
+    public final static String CLIENT_WINDOW_FACTORY =
+         "javax.faces.lifecycle.ClientWindowFactory";
+
+    /**
+     * <p class="changed_added_2_0">The property name for the {@link
+     * javax.faces.context.ExceptionHandlerFactory} class name.</p>
+     */
+    public final static String EXCEPTION_HANDLER_FACTORY =
+         "javax.faces.context.ExceptionHandlerFactory";
+
+    /**
+     * <p class="changed_added_2_0">The property name for the {@link
+     * javax.faces.context.ExternalContextFactory} class name.</p>
+     */
+    public final static String EXTERNAL_CONTEXT_FACTORY =
+         "javax.faces.context.ExternalContextFactory";
+
+    /**
+     * <p>The property name for the
+     * {@link javax.faces.context.FacesContextFactory} class name.</p>
+     */
+    public final static String FACES_CONTEXT_FACTORY =
+         "javax.faces.context.FacesContextFactory";
+
+    /**
+     * <p class="changed_added_2_1">The property name for the
+     * {@link javax.faces.view.facelets.FaceletCacheFactory} class name.</p>
+     *
+     * @since 2.1
+     */
+    public final static String FACELET_CACHE_FACTORY =
+         "javax.faces.view.facelets.FaceletCacheFactory";
+
+    /**
+     * <p class="changed_added_2_2">The property name for the
+     * {@link javax.faces.context.FlashFactory} class name.</p>
+     * 
+     * @since 2.2
+     */
+    public final static String FLASH_FACTORY =
+         "javax.faces.context.FlashFactory";
+
+    /**
+     * <p class="changed_added_2_2">The property name for the
+     * {@link javax.faces.flow.FlowHandlerFactory} class name.</p>
+     * 
+     * @since 2.2
+     */
+    public final static String FLOW_HANDLER_FACTORY =
+         "javax.faces.flow.FlowHandlerFactory";
+
+    /**
+     * <p class="changed_added_2_0">The property name for the {@link
+     * javax.faces.context.PartialViewContextFactory} class name.</p>
+     */
+    public final static String PARTIAL_VIEW_CONTEXT_FACTORY =
+          "javax.faces.context.PartialViewContextFactory";
+
+    /**
+     * <p class="changed_added_2_0">The property name for the {@link
+     * javax.faces.component.visit.VisitContextFactory} class name.</p>
+     */
+    public final static String VISIT_CONTEXT_FACTORY =
+         "javax.faces.component.visit.VisitContextFactory";
+
+    /**
+     * <p>The property name for the
+     * {@link javax.faces.lifecycle.LifecycleFactory} class name.</p>
+     */
+    public final static String LIFECYCLE_FACTORY =
+         "javax.faces.lifecycle.LifecycleFactory";
+
+    /**
+     * <p>The property name for the
+     * {@link javax.faces.render.RenderKitFactory} class name.</p>
+     */
+    public final static String RENDER_KIT_FACTORY =
+         "javax.faces.render.RenderKitFactory";
+
+    /**
+     * <p class="changed_added_2_0">The property name for the {@link
+     * javax.faces.view.ViewDeclarationLanguage} class name.</p>
+     */
+    public final static String VIEW_DECLARATION_LANGUAGE_FACTORY =
+         "javax.faces.view.ViewDeclarationLanguageFactory";
+
+    /**
+     * <p class="changed_added_2_0">The property name for the {@link
+     * javax.faces.view.facelets.TagHandlerDelegate} class name.</p>
+     */
+    public final static String TAG_HANDLER_DELEGATE_FACTORY =
+         "javax.faces.view.facelets.TagHandlerDelegateFactory";
+
+    // ------------------------------------------------------- Static Variables
+
+    static final CurrentThreadToServletContext FACTORIES_CACHE;
+
+    private static final Logger LOGGER;
+
+    static {
+        FACTORIES_CACHE = new CurrentThreadToServletContext();
+
+        LOGGER = Logger.getLogger("javax.faces", "javax.faces.LogStrings");
+    }
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Create</span> (if
+     * necessary) and return a per-web-application instance of the
+     * appropriate implementation class for the specified JavaServer
+     * Faces factory class, based on the discovery algorithm described
+     * in the class description.</p>
+     *
+     * <p class="changed_added_2_0">The standard injectionProvider and wrappers
+     * in JSF all implement the interface {@link FacesWrapper}.  If the
+     * returned <code>Object</code> is an implementation of one of the
+     * standard injectionProvider, it must be legal to cast it to an instance of
+     * <code>FacesWrapper</code> and call {@link
+     * FacesWrapper#getWrapped} on the instance.</p>
+     *
+     * @param factoryName Fully qualified name of the JavaServer Faces factory
+     *                    for which an implementation instance is requested
+     * @throws FacesException           if the web application class loader
+     *                                  cannot be identified
+     * @throws FacesException           if an instance of the configured factory
+     *                                  implementation class cannot be loaded
+     * @throws FacesException           if an instance of the configured factory
+     *                                  implementation class cannot be instantiated
+     * @throws IllegalArgumentException if <code>factoryName</code> does not
+     *                                  identify a standard JavaServer Faces factory name
+     * @throws IllegalStateException    if there is no configured factory
+     *                                  implementation class for the specified factory name
+     * @throws NullPointerException     if <code>factoryname</code>
+     *                                  is null
+     */
+    public static Object getFactory(String factoryName)
+         throws FacesException {
+
+        FactoryFinderInstance manager =
+              FACTORIES_CACHE.getApplicationFactoryManager();
+        return manager.getFactory(factoryName);
+
+    }
+
+    /**
+     * <p>This method will store the argument
+     * <code>factoryName/implName</code> mapping in such a way that
+     * {@link #getFactory} will find this mapping when searching for a
+     * match.</p>
+     * <p/>
+     * <p>This method has no effect if <code>getFactory()</code> has
+     * already been called looking for a factory for this
+     * <code>factoryName</code>.</p>
+     * <p/>
+     * <p>This method can be used by implementations to store a factory
+     * mapping while parsing the Faces configuration file</p>
+     *
+     * @throws IllegalArgumentException if <code>factoryName</code> does not
+     *                                  identify a standard JavaServer Faces factory name
+     * @throws NullPointerException     if <code>factoryname</code>
+     *                                  is null
+     */
+    public static void setFactory(String factoryName,
+                                  String implName) {
+
+        FactoryFinderInstance manager =
+              FACTORIES_CACHE.getApplicationFactoryManager();
+        manager.addFactory(factoryName, implName);
+
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Release</span> any
+     * references to factory instances associated with the class loader
+     * for the calling web application.  <span
+     * class="changed_modified_2_0">This method must be called during of
+     * web application shutdown.</span></p>
+     *
+     * @throws FacesException if the web application class loader
+     *                        cannot be identified
+     */
+    public static void releaseFactories() throws FacesException {
+        synchronized(FACTORIES_CACHE) {
+
+            if (!FACTORIES_CACHE.applicationMap.isEmpty()) {
+
+                FactoryFinderInstance fm = FACTORIES_CACHE.getApplicationFactoryManager();
+                InjectionProvider provider = fm.getInjectionProvider();
+                if (null != provider) {
+                    Collection factories = null;
+                    for (Map.Entry entry : 
+                            FACTORIES_CACHE.applicationMap.entrySet()) {
+                        FactoryFinderInstance cur = (FactoryFinderInstance) entry.getValue();
+                        factories = cur.getFactories();
+                        for (Object curFactory : factories) {
+                            try {
+                                provider.invokePreDestroy(curFactory);
+                            } catch (Exception ex) {
+                                if (LOGGER.isLoggable(Level.SEVERE)) {
+                                    String message = MessageFormat.format("Unable to invoke @PreDestroy annotated methods on {0}.", 
+                                            curFactory);
+                                    LOGGER.log(Level.SEVERE, message, ex);
+                                }
+                            }
+                        }
+                    }
+                } else {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, "Unable to call @PreDestroy annotated methods because no InjectionProvider can be found. Does this container implement the Mojarra Injection SPI?");
+                    }
+                }
+            }
+
+            FACTORIES_CACHE.removeApplicationFactoryManager();
+        }
+    }
+
+
+    // -------------------------------------------------------- Private Methods
+
+    // Called via reflection from automated tests.
+    private static void reInitializeFactoryManager() {
+        FACTORIES_CACHE.resetSpecialInitializationCaseFlags();
+    }
+
+}
diff --git a/javax/faces/FactoryFinderInstance.java b/javax/faces/FactoryFinderInstance.java
new file mode 100644
index 0000000..07f2036
--- /dev/null
+++ b/javax/faces/FactoryFinderInstance.java
@@ -0,0 +1,536 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+
+package javax.faces;
+
+import com.sun.faces.spi.InjectionProvider;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Constructor;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.context.FacesContext;
+
+final class FactoryFinderInstance {
+    private final Map<String, Object> factories;
+    private final Map<String, List<String>> savedFactoryNames;
+    private final ReentrantReadWriteLock lock;
+    private static final String INJECTION_PROVIDER_KEY = FactoryFinder.class.getPackage().getName() + "INJECTION_PROVIDER_KEY";
+
+    /**
+     * <p>The set of JavaServer Faces factory classes for which the factory
+     * discovery mechanism is supported.  The entries in this list must be 
+     * alphabetically ordered according to the entire string of the
+     * *value* of each of the literals, not just
+     * the last part of the literal!</p>
+     */
+    private static final String[] FACTORY_NAMES;
+    
+    /**
+     * <p>Map of Class instances for the our factory names.</p>
+     */
+    private final static Map<String, Class> FACTORY_CLASSES;
+    
+    private static final Logger LOGGER;
+
+    static {
+        
+        Map<String, Class> buildUpFactoryClasses; 
+        buildUpFactoryClasses = new HashMap<String, Class>();
+        buildUpFactoryClasses.put(FactoryFinder.APPLICATION_FACTORY,
+                 javax.faces.application.ApplicationFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.VISIT_CONTEXT_FACTORY,
+                 javax.faces.component.visit.VisitContextFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.EXCEPTION_HANDLER_FACTORY,
+                 javax.faces.context.ExceptionHandlerFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.EXTERNAL_CONTEXT_FACTORY,
+                 javax.faces.context.ExternalContextFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.FACES_CONTEXT_FACTORY,
+                 javax.faces.context.FacesContextFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.FLASH_FACTORY,
+                 javax.faces.context.FlashFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY,
+                 javax.faces.context.PartialViewContextFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.LIFECYCLE_FACTORY,
+                 javax.faces.lifecycle.LifecycleFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.CLIENT_WINDOW_FACTORY,
+                 javax.faces.lifecycle.ClientWindowFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.RENDER_KIT_FACTORY,
+                 javax.faces.render.RenderKitFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+                 javax.faces.view.ViewDeclarationLanguageFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.FACELET_CACHE_FACTORY,
+                 javax.faces.view.facelets.FaceletCacheFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY,
+                 javax.faces.view.facelets.TagHandlerDelegateFactory.class);
+        buildUpFactoryClasses.put(FactoryFinder.FLOW_HANDLER_FACTORY,
+                 javax.faces.flow.FlowHandlerFactory.class);
+        FACTORY_CLASSES = Collections.unmodifiableMap(buildUpFactoryClasses);
+
+        FACTORY_NAMES = new String [] {
+            FactoryFinder.APPLICATION_FACTORY,
+            FactoryFinder.VISIT_CONTEXT_FACTORY,
+            FactoryFinder.EXCEPTION_HANDLER_FACTORY,
+            FactoryFinder.EXTERNAL_CONTEXT_FACTORY,
+            FactoryFinder.FACES_CONTEXT_FACTORY,
+            FactoryFinder.FLASH_FACTORY,
+            FactoryFinder.FLOW_HANDLER_FACTORY,
+            FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY,
+            FactoryFinder.CLIENT_WINDOW_FACTORY,
+            FactoryFinder.LIFECYCLE_FACTORY,
+            FactoryFinder.RENDER_KIT_FACTORY,
+            FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+            FactoryFinder.FACELET_CACHE_FACTORY,
+            FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY
+        };
+
+        // Optimize performance of validateFactoryName
+        Arrays.sort(FACTORY_NAMES);
+        
+        LOGGER = Logger.getLogger("javax.faces", "javax.faces.LogStrings");
+    }
+    
+    
+    // -------------------------------------------------------- Consturctors
+    public FactoryFinderInstance() {
+        lock = new ReentrantReadWriteLock(true);
+        factories = new HashMap<String, Object>();
+        savedFactoryNames = new HashMap<String, List<String>>();
+        for (String name : FACTORY_NAMES) {
+            factories.put(name, new ArrayList(4));
+        }
+        copyInjectionProviderFromFacesContext();
+    }
+
+    public FactoryFinderInstance(FactoryFinderInstance toCopy) {
+        lock = new ReentrantReadWriteLock(true);
+        factories = new HashMap<String, Object>();
+        savedFactoryNames = new HashMap<String, List<String>>();
+        factories.putAll(toCopy.savedFactoryNames);
+        copyInjectionProviderFromFacesContext();
+    }
+
+    private void copyInjectionProviderFromFacesContext() {
+        InjectionProvider injectionProvider = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (null != context) {
+            injectionProvider = (InjectionProvider) context.getAttributes().get("com.sun.faces.config.ConfigManager_INJECTION_PROVIDER_TASK");
+        }
+        if (null != injectionProvider) {
+            factories.put(INJECTION_PROVIDER_KEY, injectionProvider);
+        } else {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "Unable to obtain InjectionProvider from init time FacesContext. Does this container implement the Mojarra Injection SPI?");
+            }
+        }
+    }
+
+    /**
+     * <p>Load and return an instance of the specified implementation
+     * class using the following algorithm.</p>
+     * <p/>
+     * <ol>
+     * <p/>
+     * <li><p>If the argument <code>implementations</code> list has
+     * more than one element, or exactly one element, interpret the
+     * last element in the list to be the fully qualified class name of
+     * a class implementing <code>factoryName</code>.  Instantiate that
+     * class and save it for return.  If the
+     * <code>implementations</code> list has only one element, skip
+     * this step.</p></li>
+     * <p/>
+     * <li><p>Look for a resource called
+     * <code>/META-INF/services/<factoryName></code>.  If found,
+     * interpret it as a properties file, and read out the first entry.
+     * Interpret the first entry as a fully qualify class name of a
+     * class that implements <code>factoryName</code>.  If we have an
+     * instantiated factory from the previous step <em>and</em> the
+     * implementing class has a one arg constructor of the type for
+     * <code>factoryName</code>, instantiate it, passing the
+     * instantiated factory from the previous step.  If there is no one
+     * arg constructor, just instantiate the zero arg constructor.  Save
+     * the newly instantiated factory for return, replacing the
+     * instantiated factory from the previous step.</p></li>
+     * <p/>
+     * <li><p>Treat each remaining element in the
+     * <code>implementations</code> list as a fully qualified class name
+     * of a class implementing <code>factoryName</code>.  If the currentKeyrent
+ element has a one arg constructor of the type for
+ <code>factoryName</code>, instantiate it, passing the
+     * instantiated factory from the previous or step iteration.  If
+     * there is no one arg constructor, just instantiate the zero arg
+     * constructor, replacing the instantiated factory from the previous
+     * step or iteration.</p></li>
+     * <p/>
+     * <li><p>Return the saved factory</p></li>
+     * <p/>
+     * </ol>
+     *
+     * @param classLoader     Class loader for the web application that will
+     *                        be loading the implementation class
+     * @param implementations A List of implementations for a given
+     *                        factory class.
+     * @throws FacesException if the specified implementation class
+     *                        cannot be loaded
+     * @throws FacesException if an instance of the specified implementation
+     *                        class cannot be instantiated
+     */
+    private Object getImplementationInstance(ClassLoader classLoader,
+                                             String factoryName,
+                                             List implementations)
+    throws FacesException {
+
+        Object result = null;
+        String curImplClass;
+        int len;
+
+        // step 1.
+        if (null != implementations &&
+             (1 < (len = implementations.size()) || 1 == len)) {
+            curImplClass = (String) implementations.remove(len - 1);
+            // since this is the hard coded implementation default,
+            // there is no preceding implementation, so don't bother
+            // with a non-zero-arg ctor.
+            result = getImplGivenPreviousImpl(classLoader, factoryName,
+                 curImplClass, null);
+        }
+
+        // step 2.
+        List<String> fromServices = getImplNameFromServices(classLoader, factoryName);
+        if (fromServices != null) {
+            for (String name : fromServices) {
+                result = getImplGivenPreviousImpl(classLoader,
+                                                  factoryName,
+                                                  name,
+                                                  result);
+            }
+        }        
+
+        // step 3.
+        if (null != implementations) {
+            for (len = (implementations.size() - 1); 0 <= len; len--) {
+                curImplClass = (String) implementations.remove(len);
+                result = getImplGivenPreviousImpl(classLoader, factoryName,
+                     curImplClass, result);
+            }
+        }
+
+        return result;
+
+    }
+    
+
+    /**
+     * <p>Perform the logic to get the implementation class for the
+     * second step of {@link FactoryFinder#getImplementationInstance(ClassLoader, String, java.util.List)}.</p>
+     */
+    private List<String> getImplNameFromServices(ClassLoader classLoader,
+                                                        String factoryName) {
+
+        // Check for a services definition
+        List<String> result = null;
+        String resourceName = "META-INF/services/" + factoryName;
+        InputStream stream;
+        BufferedReader reader = null;
+        try {
+            Enumeration<URL> e = classLoader.getResources(resourceName);
+            while (e.hasMoreElements()) {
+                URL url = e.nextElement();
+                URLConnection conn = url.openConnection();
+                conn.setUseCaches(false);
+                stream = conn.getInputStream();
+                if (stream != null) {
+                    // Deal with systems whose native encoding is possibly
+                    // different from the way that the services entry was created
+                    try {
+                        reader =
+                              new BufferedReader(new InputStreamReader(stream,
+                                                                       "UTF-8"));
+                        if (result == null) {
+                            result = new ArrayList<String>(3);
+                        }
+                        result.add(reader.readLine());
+                    } catch (UnsupportedEncodingException uee) {
+                        // The DM_DEFAULT_ENCODING warning is acceptable here
+                        // because we explicitly *want* to use the Java runtime's
+                        // default encoding.
+                        reader =
+                              new BufferedReader(new InputStreamReader(stream));
+                    } finally {
+                        if (reader != null) {
+                            reader.close();
+                            reader = null;
+                        }
+                        if (stream != null) {
+                            stream.close();
+                            //noinspection UnusedAssignment
+                            stream = null;
+                        }
+                    }
+
+                }
+            }
+        } catch (IOException e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           e.toString(),
+                           e);
+            }
+        } catch (SecurityException e) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE,
+                           e.toString(),
+                           e);
+            }
+        }
+        return result;
+
+    }
+
+
+    /**
+     * <p>Implement the decorator pattern for the factory
+     * implementation.</p>
+     * <p/>
+     * <p>If <code>previousImpl</code> is non-<code>null</code> and the
+     * class named by the argument <code>implName</code> has a one arg
+     * contstructor of type <code>factoryName</code>, instantiate it,
+     * passing previousImpl to the constructor.</p>
+     * <p/>
+     * <p>Otherwise, we just instantiate and return
+     * <code>implName</code>.</p>
+     *
+     * @param classLoader  the ClassLoader from which to load the class
+     * @param factoryName  the fully qualified class name of the factory.
+     * @param implName     the fully qualified class name of a class that
+     *                     implements the factory.
+     * @param previousImpl if non-<code>null</code>, the factory
+     *                     instance to be passed to the constructor of the new factory.
+     */
+    private Object getImplGivenPreviousImpl(ClassLoader classLoader,
+                                                   String factoryName,
+                                                   String implName,
+                                                   Object previousImpl) {
+        Class clazz;
+        Class factoryClass = null;
+        Class[] getCtorArg;
+        Object[] newInstanceArgs = new Object[1];
+        Constructor ctor;
+        Object result = null;
+        InjectionProvider provider = null;
+
+        // if we have a previousImpl and the appropriate one arg ctor.
+        if ((null != previousImpl) &&
+             (null != (factoryClass = getFactoryClass(factoryName)))) {
+            try {
+                clazz = Class.forName(implName, false, classLoader);
+                getCtorArg = new Class[1];
+                getCtorArg[0] = factoryClass;
+                ctor = clazz.getConstructor(getCtorArg);
+                newInstanceArgs[0] = previousImpl;
+                result = ctor.newInstance(newInstanceArgs);
+                
+                provider = getInjectionProvider();
+                if (null != provider) {
+                    provider.inject(result);
+                    provider.invokePostConstruct(result);
+                } else {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, "Unable to inject {0} because no InjectionProvider can be found. Does this container implement the Mojarra Injection SPI?", result);
+                    }
+                }
+                
+                
+            }
+            catch (NoSuchMethodException nsme) {
+                // fall through to "zero-arg-ctor" case
+                factoryClass = null;
+            }
+            catch (Exception e) {
+                throw new FacesException(implName, e);
+            }
+        }
+        if (null == previousImpl || null == factoryClass) {
+            // we have either no previousImpl or no appropriate one arg
+            // ctor.
+            try {
+                clazz = Class.forName(implName, false, classLoader);
+                // since this is the hard coded implementation default,
+                // there is no preceding implementation, so don't bother
+                // with a non-zero-arg ctor.
+                result = clazz.newInstance();
+            } catch (Exception e) {
+                throw new FacesException(implName, e);
+            }
+        }
+        return result;
+
+    }
+
+    /**
+     * @return the <code>java.lang.Class</code> for the argument
+     *         factory.
+     */
+    private Class getFactoryClass(String factoryClassName) {
+
+        return FACTORY_CLASSES.get(factoryClassName);
+
+    }
+
+    // ------------------------------------------------------ Public Methods
+    public Collection<Object> getFactories() {
+        return factories.values();
+    }
+
+    public void addFactory(String factoryName, String implementation) {
+        validateFactoryName(factoryName);
+        
+        Object result = factories.get(factoryName);
+        lock.writeLock().lock();
+        try {
+            if (result instanceof List) {
+                TypedCollections.dynamicallyCastList((List) result, String.class).add(0, implementation);
+            }
+        } finally {
+            lock.writeLock().unlock();
+        }
+    }
+
+    InjectionProvider getInjectionProvider() {
+        InjectionProvider result = (InjectionProvider) factories.get(INJECTION_PROVIDER_KEY);
+        return result;
+    }
+
+    void clearInjectionProvider() {
+        factories.remove(INJECTION_PROVIDER_KEY);
+    }
+
+    public Object getFactory(String factoryName) {
+        validateFactoryName(factoryName);
+        
+        Object factoryOrList;
+        lock.readLock().lock();
+        try {
+            factoryOrList = factories.get(factoryName);
+            if (!(factoryOrList instanceof List)) {
+                return factoryOrList;
+            }
+        } finally {
+            lock.readLock().unlock();
+        }
+        // factory hasn't been constructed
+        lock.writeLock().lock();
+        try {
+            // double check the current value.  Another thread
+            // may have completed the initialization by the time
+            // this thread entered this block
+            factoryOrList = factories.get(factoryName);
+            if (!(factoryOrList instanceof List)) {
+                return factoryOrList;
+            }
+            savedFactoryNames.put(factoryName, new ArrayList((List) factoryOrList));
+            ClassLoader cl = getClassLoader();
+            
+            Object factory = getImplementationInstance(cl, factoryName, (List) factoryOrList);
+            if (factory == null) {
+                ResourceBundle rb = LOGGER.getResourceBundle();
+                String message = rb.getString("severe.no_factory");
+                message = MessageFormat.format(message, factoryName);
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE, message);
+                }
+                factory = FactoryFinder.FACTORIES_CACHE.getFallbackFactory(this, factoryName);
+                if (null == factory) {
+                    message = rb.getString("severe.no_factory_backup_failed");
+                    message = MessageFormat.format(message, factoryName);
+                    throw new IllegalStateException(message);
+                }
+            }
+            // Record and return the new instance
+            factories.put(factoryName, factory);
+            return factory;
+        } finally {
+            lock.writeLock().unlock();
+        }
+    }
+    
+    private ClassLoader getClassLoader() throws FacesException {
+
+        // J2EE 1.3 (and later) containers are required to make the
+        // web application class loader visible through the context
+        // class loader of the current thread.
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if (cl == null) {
+            throw new FacesException("getContextClassLoader");
+        }
+        return (cl);
+
+    }
+    
+    
+    private void validateFactoryName(String factoryName) {
+
+        if (factoryName == null) {
+            throw new NullPointerException();
+        }
+        if (Arrays.binarySearch(FACTORY_NAMES, factoryName) < 0) {
+            throw new IllegalArgumentException(factoryName);
+        }
+
+    }
+    
+} // END FactoryFinderInstance
diff --git a/javax/faces/LogStrings.properties b/javax/faces/LogStrings.properties
new file mode 100644
index 0000000..0ed1159
--- /dev/null
+++ b/javax/faces/LogStrings.properties
@@ -0,0 +1,92 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= Application was not properly initialized at startup, could not find Factory: {0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=Populating PropertyDescriptor Map for class ''{0}'' for Thread named ''{1}''.
+error.component.abortprocessing_thrown=AbortProcessingException thrown when processing event of type ''{0}'' during phase ''{1}'' for component with ID or Client ID of ''{2}''
+severe.component.unable_to_process_expression=Exception while processing expression {0} for attribute {1}.
+severe.component.uiviewroot_error_invoking_phaselistener=Exception invoking UIViewRoot PhaseListener {0}.
+warning.component.uiviewroot_non_serializable_attribute_viewmap=Setting non-serializable attribute value into ViewMap: (key: {0}, value class: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=Received ''{0}'' when invoking action listener ''{1}'' for component ''{2}''
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=Initialization of the JSF runtime either failed or did not occur.  Review the server''s log for details.
+servere.webapp.prejsf2.exception.handler.log_before={0} caught during beforePhase() processing of {1} : UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log_after={0} caught during afterPhase() processing of {1} : UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log={0} caught during processing of {1} : UIComponent-ClientId={2}, Message={3}
+
diff --git a/javax/faces/LogStrings_de.properties b/javax/faces/LogStrings_de.properties
new file mode 100644
index 0000000..e37c07d
--- /dev/null
+++ b/javax/faces/LogStrings_de.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= Die Anwendung wurde bei Systemstart nicht einwandfrei initialisiert, Factory konnte nicht gefunden werden: {0}.
+severe.no_factory_backup_failed= Keine Factory als Backup f\u00fcr {0} gefunden.
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=F\u00fcllen von PropertyDescriptor-Zuordnung f\u00fcr Klasse ''{0}'' f\u00fcr Thread mit dem Namen ''{1}''.
+error.component.abortprocessing_thrown=AbortProcessingException wird ausgel\u00f6st, wenn das Ereignis des Typs ''{0}'' w\u00e4hrend ''{1}'' f\u00fcr Komponente mit ID oder Client-ID von ''{2}'' verarbeitet wird.
+severe.component.unable_to_process_expression=Ausnahme beim Verarbeiten von Ausdruck {0} f\u00fcr Attribut {1}.
+severe.component.uiviewroot_error_invoking_phaselistener=Ausnahme ruft UIViewRoot PhaseListener {0} auf.
+warning.component.uiviewroot_non_serializable_attribute_viewmap=Der nicht serialisierbare Attributswert wird in ViewMap eingestellt: (Schl\u00fcssel: {0}, Wertklasse: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=Beim Aufrufen des Aktionszielger\u00e4ts ''{0}'' f\u00fcr Komponente ''{1}'' wurde ''{2}'' erhalten.
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=Die Initialisierung der JSF-Laufzeit schlug fehl oder ist nicht aufgetreten.  Pr\u00fcfen Sie die Details im Protokoll des Servers.
+servere.webapp.prejsf2.exception.handler.log_before={0} erfasst w\u00e4hrend beforePhase()-Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log_after={0} erfasst w\u00e4hrend afterPhase()-Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log={0} erfasst w\u00e4hrend Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
+
+
diff --git a/javax/faces/LogStrings_es.properties b/javax/faces/LogStrings_es.properties
new file mode 100644
index 0000000..4c058aa
--- /dev/null
+++ b/javax/faces/LogStrings_es.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= La aplicaci\u00f3n no se ha inicializado correctamente durante el inicio, no se encuentra la f\u00e1brica: {0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=Rellenando el mapa PropertyDescriptor para la clase ''{0}'' para el subproceso denominado ''{1}''.
+error.component.abortprocessing_thrown=Se ha arrojado AbortProcessingException al procesar el evento de tipo ''{0}'' durante la fase ''{1}'' para el componente con ID o ID de cliente ''{2}''
+severe.component.unable_to_process_expression=Excepci\u00f3n al procesar la expresi\u00f3n {0} para el atributo {1}.
+severe.component.uiviewroot_error_invoking_phaselistener=Excepci\u00f3n al invocar la escucha de fase UIViewRoot {0}.
+warning.component.uiviewroot_non_serializable_attribute_viewmap=Definiendo valor de atributo no serializable en ViewMap: (clave: {0}, clase de valor: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=Se ha recibido ''{0}'' al invocar la escucha de acci\u00f3n ''{1}'' para el componente ''{2}''
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=La inicializaci\u00f3n del tiempo de ejecuci\u00f3n JSF ha fallado o no se ha producido.  Revise el registro del servidor para m\u00e1s informaci\u00f3n.
+servere.webapp.prejsf2.exception.handler.log_before=Se ha interceptado {0} durante el procesamiento beforePhase() de {1} : UIComponent-ClientId={2}, Mensaje={3}
+servere.webapp.prejsf2.exception.handler.log_after=Se ha interceptado {0} durante el procesamiento afterPhase() de {1} : UIComponent-ClientId={2}, Mensaje={3}
+servere.webapp.prejsf2.exception.handler.log=Se ha interceptado {0} durante el procesamiento de {1} : UIComponent-ClientId={2}, Mensaje={3}
+
+
diff --git a/javax/faces/LogStrings_fr.properties b/javax/faces/LogStrings_fr.properties
new file mode 100644
index 0000000..1817b3b
--- /dev/null
+++ b/javax/faces/LogStrings_fr.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= L\u2019application n\u2019a pas \u00e9t\u00e9 initialis\u00e9e correctement au d\u00e9marrage. Impossible de localiser la Fabrique : {0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=Remplissage du plan PropertyDescriptor pour la classe \u00ab{0}\u00bb de la Thread nomm\u00e9e \u00ab{1}\u00bb.
+error.component.abortprocessing_thrown=Exception d\u2019abandon de processus (AbortProcessingException) \u00e9mise lors du traitement de l\u2019\u00e9v\u00e9nement de type \u00ab{0}\u00bb pendant la phase \u00ab{1}\u00bb du composant dont l\u2019ID ou l\u2019ID Client est \u00ab{2}\u00bb
+severe.component.unable_to_process_expression=Exception lors du traitement de l\u2019expression {0} de l\u2019attribut {1}.
+severe.component.uiviewroot_error_invoking_phaselistener=Exception invoquant UIViewRoot PhaseListener {0}.
+warning.component.uiviewroot_non_serializable_attribute_viewmap=D\u00e9finition d\u2019une valeur d\u2019attribut non-s\u00e9rialisable dans ViewMap\u00a0: (cl\u00e9\u00a0: {0}, classe de la valeur\u00a0: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=R\u00e9ception de \u00ab{0}\u00bb lors de l\u2019invocation du listener d\u2019action \u00ab{1}\u00bb du composant \u00ab{2}\u00bb
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=L\u2019initialisation de l\u2019ex\u00e9cution JSF a \u00e9chou\u00e9 ou ne s\u2019est pas produite.  Consultez le journal du serveur pour plus de d\u00e9tails.
+servere.webapp.prejsf2.exception.handler.log_before={0} intercept\u00e9 durant le traitement de la m\u00e9thode beforePhase() de {1} : UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log_after={0} intercept\u00e9 durant le traitement de la m\u00e9thode afterPhase() de {1} : UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log={0} intercept\u00e9 durant le traitement de {1} : UIComponent-ClientId={2}, Message={3}
+
+
diff --git a/javax/faces/LogStrings_ja.properties b/javax/faces/LogStrings_ja.properties
new file mode 100644
index 0000000..d8fcf5a
--- /dev/null
+++ b/javax/faces/LogStrings_ja.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u8d77\u52d5\u6642\u306b\u6b63\u3057\u304f\u521d\u671f\u5316\u3055\u308c\u305a\u3001\u30d5\u30a1\u30af\u30c8\u30ea\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f: {0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=''{1}'' \u3068\u3044\u3046\u540d\u524d\u306e\u30b9\u30ec\u30c3\u30c9\u306b\u5bfe\u3057\u3066\u3001\u30af\u30e9\u30b9 ''{0}'' \u306e PropertyDescriptor \u30de\u30c3\u30d7\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002
+error.component.abortprocessing_thrown=ID \u307e\u305f\u306f Client ID \u304c ''{2}'' \u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30d5\u30a7\u30fc\u30ba ''{1}'' \u3067\u3001\u30bf\u30a4\u30d7\u304c ''{0}'' \u306e\u30a4\u30d9\u30f3\u30c8\u3092\u51e6\u7406\u3057\u3066\u3044\u308b\u3068\u304d\u306b AbortProcessingException \u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f
+severe.component.unable_to_process_expression=\u5c5e\u6027 {1} \u306e\u5f0f {0} \u306e\u51e6\u7406\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
+severe.component.uiviewroot_error_invoking_phaselistener=UIViewRoot PhaseListener {0} \u306e\u547c\u3073\u51fa\u3057\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
+warning.component.uiviewroot_non_serializable_attribute_viewmap=\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3067\u304d\u306a\u3044\u5c5e\u6027\u5024\u3092 ViewMap \u306b\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059: (\u30ad\u30fc: {0}\u3001\u5024\u30af\u30e9\u30b9: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 ''{2}'' \u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30ea\u30b9\u30ca\u30fc ''{1}'' \u306e\u547c\u3073\u51fa\u3057\u4e2d\u306b\u3001''{0}'' \u3092\u53d7\u3051\u53d6\u308a\u307e\u3057\u305f
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=JSF \u30e9\u30f3\u30bf\u30a4\u30e0\u306e\u521d\u671f\u5316\u306f\u3001\u5931\u6557\u3057\u305f\u304b\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u8a73\u7d30\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u306e\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+servere.webapp.prejsf2.exception.handler.log_before={1} \u306e beforePhase() \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientID ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
+servere.webapp.prejsf2.exception.handler.log_after={1} \u306e afterPhase() \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientID ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
+servere.webapp.prejsf2.exception.handler.log={1} \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientID ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
+
+
diff --git a/javax/faces/LogStrings_ko.properties b/javax/faces/LogStrings_ko.properties
new file mode 100644
index 0000000..b8664f2
--- /dev/null
+++ b/javax/faces/LogStrings_ko.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uc2dc\uc791 \uc2dc \uc62c\ubc14\ub974\uac8c \ucd08\uae30\ud654\ub418\uc9c0 \uc54a\uc544 {0} \ud329\ud1a0\ub9ac\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=\uc774\ub984\uc774 "{0}"\uc778 \uc2a4\ub808\ub4dc\uc5d0 \ub300\ud574 \ud074\ub798\uc2a4 "{0}"\uc758 PropertyDescriptor \ub9f5\uc744 \uc785\ub825\ud558\ub294 \uc911\uc785\ub2c8\ub2e4.
+error.component.abortprocessing_thrown=ID \ub610\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 ID\uac00 "{2}"\uc778 \uad6c\uc131 \uc694\uc18c\uc5d0 \ub300\ud574 \ub2e8\uacc4 "{1}" \ub3d9\uc548 \uc774\ubca4\ud2b8 \uc720\ud615 "{0}"\uc744(\ub97c) \ucc98\ub9ac\ud558\ub294 \uc911\uc5d0 AbortProcessingException\uc774 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
+severe.component.unable_to_process_expression={1} \uc18d\uc131\uc5d0 \ub300\ud55c \ud45c\ud604\uc2dd {0}\uc744(\ub97c) \ucc98\ub9ac\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
+severe.component.uiviewroot_error_invoking_phaselistener=UIViewRoot PhaseListener {0}\uc744(\ub97c) \ud638\ucd9c\ud558\ub294 \uc911 \uc608\uc678\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
+warning.component.uiviewroot_non_serializable_attribute_viewmap=\uc77c\ub828\ud654\ud560 \uc218 \uc5c6\ub294 \uc18d\uc131 \uac12\uc744 ViewMap\uc5d0 \uc124\uc815\ud558\ub294 \uc911: (\ud0a4: {0}, \uac12 \ud074\ub798\uc2a4: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=\uad6c\uc131 \uc694\uc18c "{2}"\uc758 \uc791\uc5c5 \uc218\uc2e0\uae30 "{1}"\uc744(\ub97c) \ud638\ucd9c\ud558\ub294 \uc911\uc5d0 "{0}"\uc774(\uac00) \uc218\uc2e0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=JSF \ub7f0\ud0c0\uc784 \ucd08\uae30\ud654\uac00 \uc2e4\ud328\ud588\uac70\ub098 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.  \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc11c\ubc84\uc758 \ub85c\uadf8\ub97c \uac80\ud1a0\ud558\uc2ed\uc2dc\uc624.
+servere.webapp.prejsf2.exception.handler.log_before={1}\uc758 beforePhase() \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
+servere.webapp.prejsf2.exception.handler.log_after={1}\uc758 afterPhase() \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
+servere.webapp.prejsf2.exception.handler.log={1} \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
+
+
diff --git a/javax/faces/LogStrings_pt_BR.properties b/javax/faces/LogStrings_pt_BR.properties
new file mode 100644
index 0000000..3880823
--- /dev/null
+++ b/javax/faces/LogStrings_pt_BR.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= O aplicativo n\u00e3o foi iniciado corretamente na inicializa\u00e7\u00e3o. N\u00e3o foi poss\u00edvel encontrar F\u00e1brica: {0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=Populando\u00b7o Mapa de PropertyDescriptor da classe ''{0}'' para o Segmento denominado ''{1}''.
+error.component.abortprocessing_thrown=AbortProcessingException lan\u00e7ado durante o processamento do evento de tipo ''{0}'' na fase ''{1}'' do componente com a ID ou ID de cliente ''{2}''
+severe.component.unable_to_process_expression=Exce\u00e7\u00e3o criada durante o processamento da express\u00e3o {0} para o atributo {1}.
+severe.component.uiviewroot_error_invoking_phaselistener=Exce\u00e7\u00e3o criada ao invocar\u00b7UIViewRoot PhaseListener {0}.
+warning.component.uiviewroot_non_serializable_attribute_viewmap=Definindo valor de atributo n\u00e3o serializ\u00e1vel em ViewMap (chave: {0}, classe do valor: {1}).
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=''{0}'' recebido ao invocar escuta de a\u00e7\u00e3o ''{1}'' para o componente ''{2}''
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=A inicializa\u00e7\u00e3o do tempo de execu\u00e7\u00e3o de JSF falhou ou n\u00e3o ocorreu.  Consulte o log do servidor para obter detalhes.
+servere.webapp.prejsf2.exception.handler.log_before={0} obtido durante o processamento de beforePhase() de {1}: UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log_after={0} obtido durante o processamento de afterPhase() de {1}: UIComponent-ClientId={2}, Message={3}
+servere.webapp.prejsf2.exception.handler.log={0} obtido durante o processamento de {1}: UIComponent-ClientId={2}, Message={3}
+
+
diff --git a/javax/faces/LogStrings_zh_CN.properties b/javax/faces/LogStrings_zh_CN.properties
new file mode 100644
index 0000000..a7fd444
--- /dev/null
+++ b/javax/faces/LogStrings_zh_CN.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= \u542f\u52a8\u65f6\u6ca1\u6709\u6b63\u786e\u521d\u59cb\u5316\u5e94\u7528\u7a0b\u5e8f\uff0c\u65e0\u6cd5\u627e\u5230\u5de5\u5382\uff1a{0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=\u4e3a\u540d\u4e3a ''{1}'' \u7684\u7ebf\u7a0b\u7684\u7c7b ''{0}'' \u586b\u5145 PropertyDescriptor \u6620\u5c04\u3002
+error.component.abortprocessing_thrown=\u5bf9\u4e8e ID \u6216\u5ba2\u6237\u673a ID \u4e3a ''{2}'' \u7684\u7ec4\u4ef6\uff0c\u5f53\u5904\u7406\u7c7b\u578b ''{0}'' \u7684\u4e8b\u4ef6\u65f6\uff0c\u5728\u9636\u6bb5 ''{1}'' \u629b\u51fa AbortProcessingException
+severe.component.unable_to_process_expression=\u5904\u7406\u5c5e\u6027 {1} \u7684\u8868\u8fbe\u5f0f {0} \u65f6\u51fa\u73b0\u5f02\u5e38\u3002
+severe.component.uiviewroot_error_invoking_phaselistener=\u8c03\u7528 UIViewRoot PhaseListener {0} \u65f6\u51fa\u73b0\u5f02\u5e38\u3002
+warning.component.uiviewroot_non_serializable_attribute_viewmap=\u5c06\u4e0d\u53ef\u5e8f\u5217\u5316\u5c5e\u6027\u503c\u8bbe\u7f6e\u4e3a ViewMap\uff1a\uff08\u5bc6\u94a5\uff1a{0}\uff0c\u503c\u7c7b\uff1a{1}\uff09
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=\u8c03\u7528\u7ec4\u4ef6 ''{2}'' \u7684\u64cd\u4f5c\u4fa6\u542c\u5668 ''{1}'' \u65f6\u6536\u5230 ''{0}''
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=JSF \u8fd0\u884c\u65f6\u521d\u59cb\u5316\u5931\u8d25\u6216\u672a\u8fdb\u884c\u521d\u59cb\u5316\u3002\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u68c0\u67e5\u670d\u52a1\u5668\u7684\u65e5\u5fd7\u3002
+servere.webapp.prejsf2.exception.handler.log_before=\u5728 {1} \u7684 beforePhase() \u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
+servere.webapp.prejsf2.exception.handler.log_after=\u5728 {1} \u7684 afterPhase() \u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
+servere.webapp.prejsf2.exception.handler.log=\u5728 {1} \u7684\u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
+
+
diff --git a/javax/faces/LogStrings_zh_HK.properties b/javax/faces/LogStrings_zh_HK.properties
new file mode 100644
index 0000000..8abc863
--- /dev/null
+++ b/javax/faces/LogStrings_zh_HK.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= \u672a\u5728\u555f\u52d5\u6642\u6b63\u78ba\u5730\u521d\u59cb\u5316\u61c9\u7528\u7a0b\u5f0f\uff0c\u627e\u4e0d\u5230\u5de5\u5ee0: {0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=\u6b63\u5728\u70ba\u540d\u70ba\u300c{1}\u300d\u7684\u57f7\u884c\u7dd2\u5beb\u5165\u985e\u5225\u300c{0}\u300d\u7684 PropertyDescriptor \u5c0d\u6620\u3002
+error.component.abortprocessing_thrown=\u5728 ID \u6216\u7528\u6236\u7aef ID \u70ba\u300c{2}\u300d\u7684\u5143\u4ef6\u7684\u968e\u6bb5\u300c{1}\u300d\uff0c\u8655\u7406\u985e\u578b\u70ba\u300c{0}\u300d\u7684\u4e8b\u4ef6\u6642\u4e1f\u51fa AbortProcessingException
+severe.component.unable_to_process_expression=\u8655\u7406\u5c6c\u6027 {1} \u7684\u8868\u793a\u5f0f {0} \u6642\u767c\u751f\u7570\u5e38\u3002 
+severe.component.uiviewroot_error_invoking_phaselistener=\u547c\u53eb UIViewRoot PhaseListener {0} \u6642\u767c\u751f\u7570\u5e38\u3002
+warning.component.uiviewroot_non_serializable_attribute_viewmap=\u5c07\u4e0d\u53ef\u4e32\u5217\u5316\u7684\u5c6c\u6027\u503c\u8a2d\u70ba ViewMap\uff1a(\u6a5f\u78bc: {0}\uff0c\u503c\u985e\u5225: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=\u547c\u53eb\u5143\u4ef6\u300c{2}\u300d\u7684\u52d5\u4f5c\u5075\u807d\u7a0b\u5f0f\u300c{1}\u300d\u6642\u6536\u5230\u300c{0}\u300d
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=\u521d\u59cb\u5316 JSF \u57f7\u884c\u968e\u6bb5\u5931\u6557\u6216\u672a\u767c\u751f\u3002\u8a73\u7d30\u8cc7\u8a0a\u8acb\u6aa2\u8996\u4f3a\u670d\u5668\u7684\u8a18\u9304\u6a94\u3002
+servere.webapp.prejsf2.exception.handler.log_before=\u5728 {1} \u7684 beforePhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
+servere.webapp.prejsf2.exception.handler.log_after=\u5728 {1} \u7684 afterPhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
+servere.webapp.prejsf2.exception.handler.log=\u5728\u8655\u7406 {1} \u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
+
+
diff --git a/javax/faces/LogStrings_zh_TW.properties b/javax/faces/LogStrings_zh_TW.properties
new file mode 100644
index 0000000..8abc863
--- /dev/null
+++ b/javax/faces/LogStrings_zh_TW.properties
@@ -0,0 +1,93 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+#
+# Logging key guideline:
+#   [level].[base package].[message_id]
+
+# Common -----------------------------------------------------------------------
+
+
+# PACKAGE javax.faces ----------------------------------------------------------
+severe.no_factory= \u672a\u5728\u555f\u52d5\u6642\u6b63\u78ba\u5730\u521d\u59cb\u5316\u61c9\u7528\u7a0b\u5f0f\uff0c\u627e\u4e0d\u5230\u5de5\u5ee0: {0}. Attempting to find backup.
+severe.no_factory_backup_failed= Could not find backup for factory {0}. 
+
+
+# PACKAGE javax.faces.application ----------------------------------------------
+
+
+# PACKAGE javax.faces.component ------------------------------------------------
+fine.component.populating_descriptor_map=\u6b63\u5728\u70ba\u540d\u70ba\u300c{1}\u300d\u7684\u57f7\u884c\u7dd2\u5beb\u5165\u985e\u5225\u300c{0}\u300d\u7684 PropertyDescriptor \u5c0d\u6620\u3002
+error.component.abortprocessing_thrown=\u5728 ID \u6216\u7528\u6236\u7aef ID \u70ba\u300c{2}\u300d\u7684\u5143\u4ef6\u7684\u968e\u6bb5\u300c{1}\u300d\uff0c\u8655\u7406\u985e\u578b\u70ba\u300c{0}\u300d\u7684\u4e8b\u4ef6\u6642\u4e1f\u51fa AbortProcessingException
+severe.component.unable_to_process_expression=\u8655\u7406\u5c6c\u6027 {1} \u7684\u8868\u793a\u5f0f {0} \u6642\u767c\u751f\u7570\u5e38\u3002 
+severe.component.uiviewroot_error_invoking_phaselistener=\u547c\u53eb UIViewRoot PhaseListener {0} \u6642\u767c\u751f\u7570\u5e38\u3002
+warning.component.uiviewroot_non_serializable_attribute_viewmap=\u5c07\u4e0d\u53ef\u4e32\u5217\u5316\u7684\u5c6c\u6027\u503c\u8a2d\u70ba ViewMap\uff1a(\u6a5f\u78bc: {0}\uff0c\u503c\u985e\u5225: {1})
+# PACKAGE javax.faces.context --------------------------------------------------
+
+
+# PACKAGE javax.faces.convert --------------------------------------------------
+
+
+# PACKAGE javax.faces.el -------------------------------------------------------
+
+
+# PACKAGE javax.faces.event ----------------------------------------------------
+severe.event.exception_invoking_processaction=\u547c\u53eb\u5143\u4ef6\u300c{2}\u300d\u7684\u52d5\u4f5c\u5075\u807d\u7a0b\u5f0f\u300c{1}\u300d\u6642\u6536\u5230\u300c{0}\u300d
+
+# PACKAGE javax.faces.lifecycle ------------------------------------------------
+
+
+# PACKAGE javax.faces.model ----------------------------------------------------
+
+
+# PACKAGE javax.faces.render ---------------------------------------------------
+
+
+# PACKAGE javax.faces.validator ------------------------------------------------
+
+
+# PACKAGE javax.faces.webapp ---------------------------------------------------
+warning.webapp.facesservlet.init_invalid_http_method=The runtime was configured to permit HTTP method {0} but that is not one of {1}.  Note that HTTP method names are case sensitive.
+severe.webapp.facesservlet.init_failed=\u521d\u59cb\u5316 JSF \u57f7\u884c\u968e\u6bb5\u5931\u6557\u6216\u672a\u767c\u751f\u3002\u8a73\u7d30\u8cc7\u8a0a\u8acb\u6aa2\u8996\u4f3a\u670d\u5668\u7684\u8a18\u9304\u6a94\u3002
+servere.webapp.prejsf2.exception.handler.log_before=\u5728 {1} \u7684 beforePhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
+servere.webapp.prejsf2.exception.handler.log_after=\u5728 {1} \u7684 afterPhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
+servere.webapp.prejsf2.exception.handler.log=\u5728\u8655\u7406 {1} \u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
+
+
diff --git a/javax/faces/Messages.properties b/javax/faces/Messages.properties
new file mode 100644
index 0000000..e223d82
--- /dev/null
+++ b/javax/faces/Messages.properties
@@ -0,0 +1,152 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}: Conversion error occurred.
+javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
+javax.faces.component.UIInput.UPDATE={0}: An error occurred when processing your submitted information. 
+javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid
+javax.faces.component.UISelectMany.INVALID={0}: Validation Error: Value is not valid
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' must be a signed decimal number.
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' must be a signed decimal number consisting of zero or more digits, that may be followed by a decimal point and fraction.  Example: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' must be a number consisting of one or more digits. Example: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' must be 'true' or 'false'.
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' must be 'true' or 'false'.  Any value other than 'true' will evaluate to 'false'.
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' must be a number between -128 and 127.
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' must be a number between -128 and 127.  Example: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' must be a valid character.
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' must be a valid ASCII character.
+javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' could not be understood as a date.
+javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' could not be understood as a date. Example: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' could not be understood as a time.
+javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' could not be understood as a time. Example: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' could not be understood as a date and time.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' could not be understood as a date and time. Example: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: A 'pattern' or 'type' attribute must be specified to convert the value ''{0}''.
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' must be a number between 4.9E-324 and 1.7976931348623157E308  Example: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' must be convertible to an enum.
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' must be convertible to an enum from the enum that contains the constant ''{1}''.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' must be a number between 1.4E-45 and 3.4028235E38  Example: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' must be a number between -2147483648 and 2147483647 Example: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' must be a number between -9223372036854775808 to 9223372036854775807 Example: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' could not be understood as a currency value.
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' could not be understood as a currency value. Example: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' could not be understood as a percentage.
+javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' could not be understood as a percentage. Example: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' is not a number.
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' is not a number. Example: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' is not a number pattern.
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' is not a number pattern. Example: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' must be a number between -32768 and 32767 Example: {1}
+javax.faces.converter.STRING={1}: Could not convert ''{0}'' to a string.
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of "{0}"
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
+javax.faces.validator.DoubleRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type
+javax.faces.validator.LengthValidator.MAXIMUM={1}: Validation Error: Length is greater than allowable maximum of ''{0}''
+javax.faces.validator.LengthValidator.MINIMUM={1}: Validation Error: Length is less than allowable minimum of ''{0}''
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of ''{0}''
+javax.faces.validator.LongRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
+javax.faces.validator.LongRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type.
+javax.faces.validator.NOT_IN_RANGE=Validation Error: Specified attribute is not between the expected values of {0} and {1}.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex pattern must be set.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
+javax.faces.validator.RegexValidator.NOT_MATCHED=Regex Pattern not matched
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Error in regular expression.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Error in regular expression, ''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
+
diff --git a/javax/faces/Messages_de.properties b/javax/faces/Messages_de.properties
new file mode 100644
index 0000000..9b942cf
--- /dev/null
+++ b/javax/faces/Messages_de.properties
@@ -0,0 +1,152 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}: Umwandlungsfehler aufgetreten.
+javax.faces.component.UIInput.REQUIRED={0}: \u00dcberpr\u00fcfungsfehler: Wert ist erforderlich.
+javax.faces.component.UIInput.UPDATE={0}: Bei der Verarbeitung der angegebenen Informationen ist ein Fehler aufgetreten. 
+javax.faces.component.UISelectOne.INVALID={0}: \u00dcberpr\u00fcfungsfehler: Wert ist ung\u00fcltig.
+javax.faces.component.UISelectMany.INVALID={0}: \u00dcberpr\u00fcfungsfehler: Wert ist ung\u00fcltig.
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: Bei ''{0}'' muss es sich um eine Dezimalzahl mit Vorzeichen handeln.
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: Bei ''{0}'' muss es sich um eine Dezimalzahl mit Vorzeichen handeln, die aus null oder mehr Ziffern besteht, auf die ein Dezimalpunkt und ein Bruch folgen kann.  Beispiel: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln. Beispiel: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' muss ''true'' oder ''false'' sein.
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' muss ''true'' oder ''false'' sein.  Andere Werte als ''true'' werden als ''false'' ausgewertet.
+javax.faces.converter.ByteConverter.BYTE={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen -128 und 127 handeln.
+javax.faces.converter.ByteConverter.BYTE_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen -128 und 127 handeln.  Beispiel: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' muss ein g\u00fcltiges Zeichen sein.
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' muss ein g\u00fcltiges ASCII-Zeichen sein.
+javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' konnte nicht als Datum interpretiert werden.
+javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' konnte nicht als Datum interpretiert werden. Beispiel: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' konnte nicht als Uhrzeit interpretiert werden.
+javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' konnte nicht als Uhrzeit interpretiert werden. Beispiel: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' konnte nicht als Datum und Uhrzeit interpretiert werden.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' konnte nicht als Datum und Uhrzeit interpretiert werden. Beispiel: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: Zur Umwandlung des Werts ''{0}'' muss ein ''pattern''- bzw. ''type''-Attribut angegeben werden.
+javax.faces.converter.DoubleConverter.DOUBLE={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: Bei  ''{0}'' muss es sich um eine Zahl zwischen 4.9E-324 und 1.7976931348623157E308  handeln. Beispiel: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}''  muss in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen.
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' muss anhand der Aufz\u00e4hlung, die die Konstante ''{1}'' enth\u00e4lt, in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' muss anhand der Aufz\u00e4hlung in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen, es wurde jedoch keine Aufz\u00e4hlungsklasse angegeben.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' muss anhand der Aufz\u00e4hlung in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen, es wurde jedoch keine Aufz\u00e4hlungsklasse angegeben.
+javax.faces.converter.FloatConverter.FLOAT={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen 1.4E-45 und 3.4028235E38 handeln. Beispiel: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen  -2147483648 und 2147483647 handeln. Beispiel:  {1}
+javax.faces.converter.LongConverter.LONG={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
+javax.faces.converter.LongConverter.LONG_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen -9223372036854775808 und 9223372036854775807  handeln. Beispiel: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' konnte nicht als W\u00e4hrungswert interpretiert werden.
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' konnte nicht als W\u00e4hrungswert interpretiert werden. Beispiel: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' konnte nicht als Prozentsatz interpretiert werden.
+javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' konnte nicht als Prozentsatz interpretiert werden. Beispiel: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' ist keine Zahl.
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' ist keine Zahl. Beispiel: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' ist kein Zahlenmuster.
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' ist kein Zahlenmuster. Beispiel: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
+javax.faces.converter.ShortConverter.SHORT_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen  -32768 und 32767 handeln. Beispiel: {1}
+javax.faces.converter.STRING={1}: Umwandlung von ''{0}'' in eine Zeichenkette nicht m\u00f6glich.
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist gr\u00f6\u00dfer als der zul\u00e4ssige Maximalwert "{0}"
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist kleiner als der zul\u00e4ssige Minimalwert "{0}"
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: \u00dcberpr\u00fcfungsfehler: Das angegebene Attribut liegt nicht zwischen den erwarteten Werten {0} und {1}.
+javax.faces.validator.DoubleRangeValidator.TYPE={0}: \u00dcberpr\u00fcfungsfehler: Wert ist nicht vom richtigen Typ 
+javax.faces.validator.LengthValidator.MAXIMUM={1}: \u00dcberpr\u00fcfungsfehler: L\u00e4nge ist gr\u00f6\u00dfer als der zul\u00e4ssige Maximalwert "{0}"
+javax.faces.validator.LengthValidator.MINIMUM={1}: \u00dcberpr\u00fcfungsfehler: L\u00e4nge ist kleiner als der zul\u00e4ssige Minimalwert "{0}"
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist gr\u00f6\u00dfer als der zul\u00e4ssige Maximalwert "{0}"
+javax.faces.validator.LongRangeValidator.MINIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist kleiner als der zul\u00e4ssige Minimalwert "{0}"
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: \u00dcberpr\u00fcfungsfehler: Das angegebene Attribut liegt nicht zwischen den erwarteten Werten {0} und {1}.
+javax.faces.validator.LongRangeValidator.TYPE={0}: \u00dcberpr\u00fcfungsfehler: Wert ist nicht vom richtigen Typ 
+javax.faces.validator.NOT_IN_RANGE=\u00dcberpr\u00fcfungsfehler: Das angegebene Attribut liegt nicht zwischen den erwarteten Werten {0} und {1}.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex-Muster muss festgelegt werden.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex-Muster muss einen nicht leeren Wert haben.
+javax.faces.validator.RegexValidator.NOT_MATCHED=Regex-Muster nicht angepasst
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex-Muster von ''{0}'' nicht angepasst
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Fehler in regul\u00e4rem Ausdruck.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Fehler in regul\u00e4rem Ausdruck,  ''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
+
diff --git a/javax/faces/Messages_en.properties b/javax/faces/Messages_en.properties
new file mode 100644
index 0000000..e10565d
--- /dev/null
+++ b/javax/faces/Messages_en.properties
@@ -0,0 +1,150 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}: Conversion error occurred.
+javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
+javax.faces.component.UIInput.UPDATE={0}: An error occurred when processing your submitted information.
+javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid
+javax.faces.component.UISelectMany.INVALID={0}: Validation Error: Value is not valid
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' must be a signed decimal number.
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' must be a signed decimal number consisting of zero or more digits, that may be followed by a decimal point and fraction.  Example: {1}
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' must be a number consisting of one or more digits. Example: {1}
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' must be 'true' or 'false'.
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' must be 'true' or 'false'.  Any value other than 'true' will evaluate to 'false'.
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' must be a number between -128 and 127.
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' must be a number between -128 and 127.  Example: {1}
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' must be a valid character.
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' must be a valid ASCII character.
+javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' could not be understood as a date.
+javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' could not be understood as a date. Example: {1}
+javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' could not be understood as a time.
+javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' could not be understood as a time. Example: {1}
+javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' could not be understood as a date and time.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' could not be understood as a date and time. Example: {1}
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: A 'pattern' or 'type' attribute must be specified to convert the value ''{0}''.
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' must be a number between 4.9E-324 and 1.7976931348623157E308  Example: {1}
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' must be convertible to an enum.
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' must be convertible to an enum from the enum that contains the constant ''{1}''.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' must be a number between 1.4E-45 and 3.4028235E38  Example: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' must be a number between -2147483648 and 2147483647 Example: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' must be a number between -9223372036854775808 to 9223372036854775807 Example: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' could not be understood as a currency value.
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' could not be understood as a currency value. Example: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' could not be understood as a percentage.
+javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' could not be understood as a percentage. Example: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' is not a number.
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' is not a number. Example: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' is not a number pattern.
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' is not a number pattern. Example: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' must be a number consisting of one or more digits.
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' must be a number between -32768 and 32767 Example: {1}
+javax.faces.converter.STRING={1}: Could not convert ''{0}'' to a string.
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of "{0}"
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
+javax.faces.validator.DoubleRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type
+javax.faces.validator.LengthValidator.MAXIMUM={1}: Validation Error: Length is greater than allowable maximum of ''{0}''
+javax.faces.validator.LengthValidator.MINIMUM={1}: Validation Error: Length is less than allowable minimum of ''{0}''
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of ''{0}''
+javax.faces.validator.LongRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
+javax.faces.validator.LongRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex pattern must be set.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
+javax.faces.validator.RegexValidator.NOT_MATCHED=Regex Pattern not matched
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Error in regular expression.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Error in regular expression, ''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
diff --git a/javax/faces/Messages_es.properties b/javax/faces/Messages_es.properties
new file mode 100644
index 0000000..f88d2eb
--- /dev/null
+++ b/javax/faces/Messages_es.properties
@@ -0,0 +1,152 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}: Se ha producido un error de conversi\u00f3n.
+javax.faces.component.UIInput.REQUIRED={0}: Error de validaci\u00f3n: se necesita un valor.
+javax.faces.component.UIInput.UPDATE={0}: Se ha producido un error al procesar la informaci\u00f3n enviada. 
+javax.faces.component.UISelectOne.INVALID={0}: Error de validaci\u00f3n: el valor no es v\u00e1lido
+javax.faces.component.UISelectMany.INVALID={0}: Error de validaci\u00f3n: el valor no es v\u00e1lido
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' debe ser un n\u00famero decimal positivo o negativo.
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' debe ser un n\u00famero decimal positivo o negativo formado por cero o m\u00e1s d\u00edgitos, que pueden incluir a continuaci\u00f3n una coma decimal y una fracci\u00f3n.  Ejemplo: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos. Ejemplo: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' debe ser 'true' o 'false'.
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' debe ser 'true' o 'false'.  Cualquier valor diferente a ''true'', se evaluar\u00e1 como ''false''.
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' debe ser un n\u00famero entre -128 y 127.
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' debe ser un n\u00famero entre -128 y 127.  Ejemplo: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' debe ser un car\u00e1cter v\u00e1lido.
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' debe ser un car\u00e1cter ASCII v\u00e1lido.
+javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' no se ha podido reconocer como fecha.
+javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' no se ha podido reconocer como fecha. Ejemplo: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' no se ha podido reconocer como hora.
+javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' no se ha podido reconocer como hora. Ejemplo: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' no se ha podido reconocer como fecha y hora.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' no se ha podido reconocer como fecha y hora. Ejemplo: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: Debe especificarse el atributo ''pattern'' o ''type'' para convertir el valor ''{0}''.
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' debe ser un n\u00famero entre 4.9E-324 y 1.7976931348623157E308  Ejemplo: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n.
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n a partir de la enumeraci\u00f3n que contiene la constante ''{1}''.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n a partir de la enumeraci\u00f3n, pero no se ha especificado ninguna clase de enumeraci\u00f3n.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n a partir de la enumeraci\u00f3n, pero no se ha especificado ninguna clase de enumeraci\u00f3n.
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' debe ser un n\u00famero entre 1.4E-45 y 3.4028235E38  Ejemplo: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' debe ser un n\u00famero entre -2147483648 y 2147483647. Ejemplo: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' debe ser un n\u00famero entre -9223372036854775808 y 9223372036854775807. Ejemplo: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' no se ha podido reconocer como un valor de divisa.
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' no se ha podido reconocer como un valor de divisa. Ejemplo: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' no se ha podido reconocer como porcentaje.
+javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' no se ha podido reconocer como porcentaje. Ejemplo: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' no es un n\u00famero.
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' no es un n\u00famero. Ejemplo: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' no es un modelo de n\u00famero.
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' no es un modelo de n\u00famero. Ejemplo: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' debe ser un n\u00famero entre -32768 y 32767. Ejemplo: {1}
+javax.faces.converter.STRING={1}: No se ha podido convertir ''{0}'' en una cadena.
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Error de validaci\u00f3n: el valor es mayor que el m\u00e1ximo permitido de "{0}"
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Error de validaci\u00f3n: el valor es inferior que el m\u00ednimo permitido de ''{0}''
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Error de validaci\u00f3n: el atributo especificado no est\u00e1 entre los valores esperados: {0} y {1}.
+javax.faces.validator.DoubleRangeValidator.TYPE={0}: Error de validaci\u00f3n: el valor no tiene el tipo correcto
+javax.faces.validator.LengthValidator.MAXIMUM={1}: Error de validaci\u00f3n: el largo es mayor que el m\u00e1ximo permitido de ''{0}''
+javax.faces.validator.LengthValidator.MINIMUM={1}: Error de validaci\u00f3n: el largo es inferior que el m\u00ednimo permitido de ''{0}''
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Error de validaci\u00f3n: el valor es mayor que el m\u00e1ximo permitido de ''{0}''
+javax.faces.validator.LongRangeValidator.MINIMUM={1}: Error de validaci\u00f3n: el valor es inferior que el m\u00ednimo permitido de ''{0}''
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Error de validaci\u00f3n: el atributo especificado no est\u00e1 entre los valores esperados: {0} y {1}.
+javax.faces.validator.LongRangeValidator.TYPE={0}: Error de validaci\u00f3n: el valor no tiene el tipo correcto.
+javax.faces.validator.NOT_IN_RANGE=Error de validaci\u00f3n: el atributo especificado no est\u00e1 entre los valores esperados: {0} y {1}.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Debe definirse el modelo Regex.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=El modelo Regex debe estar definido como un valor no vac\u00edo.
+javax.faces.validator.RegexValidator.NOT_MATCHED=El modelo Regex no coincide
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=El modelo Regex ''{0}'' no coincide
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Error en expresi\u00f3n regular
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Error en expresi\u00f3n regular, ''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
+
diff --git a/javax/faces/Messages_fr.properties b/javax/faces/Messages_fr.properties
new file mode 100644
index 0000000..7fb809b
--- /dev/null
+++ b/javax/faces/Messages_fr.properties
@@ -0,0 +1,152 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}\u00a0: une erreur de conversion est survenue.
+javax.faces.component.UIInput.REQUIRED={0}\u00a0: erreur de validation. Vous devez indiquer une valeur.
+javax.faces.component.UIInput.UPDATE={0}\u00a0: une erreur est survenue lors du traitement des informations que vous avez soumises. 
+javax.faces.component.UISelectOne.INVALID={0}\u00a0: erreur de validation. La valeur est incorrecte.
+javax.faces.component.UISelectMany.INVALID={0}\u00a0: erreur de validation. La valeur est incorrecte.
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre d\u00e9cimal sign\u00e9.
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre d\u00e9cimal sign\u00e9 compos\u00e9 de z\u00e9ro ou de plusieurs chiffres, pouvant \u00eatre suivis d\u2019une virgule et d\u2019une fraction.  Exemple\u00a0: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compos\u00e9 d\u2019un ou de plusieurs chiffres.
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compos\u00e9 d\u2019un ou de plusieurs chiffres. Exemple\u00a0: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}\u00a0: \u00ab{0}\u00bb doit pr\u00e9senter la valeur \u2019true\u2019 ou \u2019false\u2019.
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}\u00a0: \u00ab{0}\u00bb doit pr\u00e9senter la valeur \u2019true\u2019 ou \u2019false\u2019.  Toute valeur diff\u00e9rente de \u2019true\u2019 sera \u00e9valu\u00e9e comme \u00e9tant \u2019false\u2019.
+javax.faces.converter.ByteConverter.BYTE={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compris entre -128 et 127.
+javax.faces.converter.ByteConverter.BYTE_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compris entre -128 et 127.  Exemple\u00a0: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}\u00a0: \u00ab{0}\u00bb doit \u00eatre un caract\u00e8re valide.
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}\u00a0: \u00ab{0}\u00bb doit \u00eatre un caract\u00e8re ASCII valide.
+javax.faces.converter.DateTimeConverter.DATE={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date.
+javax.faces.converter.DateTimeConverter.DATE_detail={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date. Exemple\u00a0: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant qu\u2019heure.
+javax.faces.converter.DateTimeConverter.TIME_detail={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant qu\u2019heure. Exemple\u00a0: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date et heure.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date et heure. Exemple\u00a0: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}\u00a0: un attribut \u2019pattern\u2019 ou \u2019type\u2019 doit \u00eatre sp\u00e9cifi\u00e9 pour convertir la valeur \u00ab{0}\u00bb.
+javax.faces.converter.DoubleConverter.DOUBLE={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compos\u00e9 d\u2019un ou de plusieurs chiffres.
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compris entre 4.9E-324 et 1.7976931348623157E308. Exemple\u00a0: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}\u00a0: \u00ab{0}\u00bb doit pouvoir \u00eatre converti en une valeur Enum.
+javax.faces.converter.EnumConverter.ENUM_detail={2}\u00a0: \u00ab{0}\u00bb doit pouvoir \u00eatre converti en une valeur Enum \u00e0 partir de la valeur Enum contenant la constante \u00ab{1}\u00bb.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}\u00a0: \u00ab{0}\u00bb doit pouvoir \u00eatre converti en une valeur Enum \u00e0 partir de la valeur Enum, mais aucune classe Enum n\u2019est fournie.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}\u00a0: \u00ab{0}\u00bb doit pouvoir \u00eatre converti en une valeur Enum \u00e0 partir de la valeur Enum, mais aucune classe Enum n\u2019est fournie.
+javax.faces.converter.FloatConverter.FLOAT={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compos\u00e9 d\u2019un ou de plusieurs chiffres.
+javax.faces.converter.FloatConverter.FLOAT_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compris entre 1.4E-45 et 3.4028235E38. Exemple\u00a0: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compos\u00e9 d\u2019un ou de plusieurs chiffres.
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compris entre -2147483648 et 2147483647. Exemple\u00a0: {1}
+javax.faces.converter.LongConverter.LONG={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compos\u00e9 d\u2019un ou de plusieurs chiffres.
+javax.faces.converter.LongConverter.LONG_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compris entre -9223372036854775808 et 9223372036854775807. Exemple\u00a0: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que valeur mon\u00e9taire.
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que valeur mon\u00e9taire. Exemple\u00a0: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que pourcentage.
+javax.faces.converter.NumberConverter.PERCENT_detail={2}\u00a0: \u00ab{0}\u00bb n\u2019a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que pourcentage. Exemple\u00a0: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}\u00a0: \u00ab{0}\u00bb n\u2019est pas un nombre.
+javax.faces.converter.NumberConverter.NUMBER_detail={2}\u00a0: \u00ab{0}\u00bb n\u2019est pas un nombre. Exemple\u00a0: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}\u00a0: \u00ab{0}\u00bb n\u2019est pas un format num\u00e9rique.
+javax.faces.converter.NumberConverter.PATTERN_detail={2}\u00a0: \u00ab{0}\u00bb n\u2019est pas un format num\u00e9rique. Exemple\u00a0: {1}
+javax.faces.converter.ShortConverter.SHORT={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compos\u00e9 d\u2019un ou de plusieurs chiffres.
+javax.faces.converter.ShortConverter.SHORT_detail={2}\u00a0: \u00ab{0}\u00bb doit \u00eatre un nombre compris entre -32768 et 32767. Exemple\u00a0: {1}
+javax.faces.converter.STRING={1}\u00a0: impossible de convertir \u00ab{0}\u00bb en cha\u00eene.
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}\u00a0: erreur de validation. La valeur est sup\u00e9rieure \u00e0 la valeur maximale autoris\u00e9e, "{0}".
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}\u00a0: erreur de validation. La valeur est inf\u00e9rieure \u00e0 la valeur minimale autoris\u00e9e, "{0}".
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}\u00a0: erreur de validation. L\u2019attribut sp\u00e9cifi\u00e9 n\u2019est pas compris entre les valeurs attendues {0} et {1}.
+javax.faces.validator.DoubleRangeValidator.TYPE={0}\u00a0: erreur de validation. La valeur n\u2019est pas du type correct.
+javax.faces.validator.LengthValidator.MAXIMUM={1}\u00a0: erreur de validation. La longueur est sup\u00e9rieure \u00e0 la valeur maximale autoris\u00e9e, "{0}".
+javax.faces.validator.LengthValidator.MINIMUM={1}\u00a0: erreur de validation. La longueur est inf\u00e9rieure \u00e0 la valeur minimale autoris\u00e9e, "{0}".
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}\u00a0: erreur de validation. La valeur est sup\u00e9rieure \u00e0 la valeur maximale autoris\u00e9e, "{0}".
+javax.faces.validator.LongRangeValidator.MINIMUM={1}\u00a0: erreur de validation. La valeur est inf\u00e9rieure \u00e0 la valeur minimale autoris\u00e9e, "{0}".
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\u00a0: erreur de validation. L\u2019attribut sp\u00e9cifi\u00e9 n\u2019est pas compris entre les valeurs attendues {0} et {1}.
+javax.faces.validator.LongRangeValidator.TYPE={0}\u00a0: erreur de validation. La valeur n\u2019est pas du type correct.
+javax.faces.validator.NOT_IN_RANGE=Erreur de validation\u00a0: l\u2019attribut sp\u00e9cifi\u00e9 n\u2019est pas compris entre les valeurs attendues {0} et {1}.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Le mod\u00e8le d\u2019expression r\u00e9guli\u00e8re doit \u00eatre d\u00e9fini.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=La valeur d\u00e9finie du mod\u00e8le d\u2019expression r\u00e9guli\u00e8re ne peut pas \u00eatre vide.
+javax.faces.validator.RegexValidator.NOT_MATCHED=Discordance du mod\u00e8le d\u2019expression r\u00e9guli\u00e8re.
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Discordance du mod\u00e8le d\u2019expression r\u00e9guli\u00e8re \u00ab{0}\u00bb.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Erreur dans l\u2019expression r\u00e9guli\u00e8re.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Erreur dans l\u2019expression r\u00e9guli\u00e8re,  \u00ab{0}\u00bb
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
+
diff --git a/javax/faces/Messages_ja.properties b/javax/faces/Messages_ja.properties
new file mode 100644
index 0000000..a0c7b27
--- /dev/null
+++ b/javax/faces/Messages_ja.properties
@@ -0,0 +1,152 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}: \u5909\u63db\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
+javax.faces.component.UIInput.REQUIRED={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u5fc5\u8981\u3067\u3059\u3002
+javax.faces.component.UIInput.UPDATE={0}: \u9001\u4fe1\u60c5\u5831\u306e\u51e6\u7406\u6642\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 
+javax.faces.component.UISelectOne.INVALID={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093
+javax.faces.component.UISelectMany.INVALID={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' \u306f\u7b26\u53f7\u4ed8\u304d\u306e 10 \u9032\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' \u306f 0 \u6841\u4ee5\u4e0a\u306e\u7b26\u53f7\u4ed8\u304d\u306e 10 \u9032\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u3089\u305a\u3001\u305d\u306e\u3042\u3068\u306b\u5c0f\u6570\u70b9\u3068\u4eee\u6570\u304c\u7d9a\u304f\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u4f8b: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u4f8b: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' \u306f 'true' \u307e\u305f\u306f 'false' \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' \u306f 'true' \u307e\u305f\u306f 'false' \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002'true' \u4ee5\u5916\u306e\u5024\u306f\u3059\u3079\u3066 'false' \u306b\u8a55\u4fa1\u3055\u308c\u307e\u3059\u3002
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' \u306f -128 \u3068 127 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' \u306f -128 \u3068 127 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u4f8b: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' \u306f\u6709\u52b9\u306a\u6587\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' \u306f\u6709\u52b9\u306a ASCII \u6587\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' \u3092\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' \u3092\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: \u5024 ''{0}'' \u3092\u5909\u63db\u3059\u308b\u306b\u306f\u3001'pattern' \u307e\u305f\u306f 'type' \u5c5e\u6027\u3092\u6307\u5b9a\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' \u306f 4.9E-324 \u3068 1.7976931348623157E308 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093  \u4f8b: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' \u306f\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' \u306f\u5b9a\u6570 ''{1}'' \u3092\u542b\u3080\u5217\u6319\u578b\u304b\u3089\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' \u306f\u5217\u6319\u578b\u304b\u3089\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u304c\u3001\u5217\u6319\u578b\u30af\u30e9\u30b9\u306f\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' \u306f\u5217\u6319\u578b\u304b\u3089\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u304c\u3001\u5217\u6319\u578b\u30af\u30e9\u30b9\u306f\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' \u306f 1.4E-45 \u3068 3.4028235E38 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093  \u4f8b: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' \u306f -2147483648 \u3068 2147483647 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 \u4f8b: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' \u306f -9223372036854775808 \u3068 9223372036854775807 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 \u4f8b: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' \u3092\u901a\u8ca8\u306e\u5024\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' \u3092\u901a\u8ca8\u306e\u5024\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' \u3092\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' \u3092\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' \u306f\u6570\u5b57\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' \u306f\u6570\u5b57\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4f8b: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' \u306f\u6570\u5b57\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' \u306f\u6570\u5b57\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4f8b: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' \u306f -32768 \u3068 32767 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 \u4f8b: {1}
+javax.faces.converter.STRING={1}: ''{0}'' \u3092\u6587\u5b57\u5217\u306b\u5909\u63db\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5927\u5024 "{0}" \u3092\u4e0a\u56de\u3063\u3066\u3044\u307e\u3059
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5c0f\u5024 "{0}" \u3092\u4e0b\u56de\u3063\u3066\u3044\u307e\u3059
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u6307\u5b9a\u3055\u308c\u305f\u5c5e\u6027\u304c {0} \u3068 {1} \u306e\u9593\u306e\u671f\u5f85\u5024\u306b\u3042\u308a\u307e\u305b\u3093\u3002
+javax.faces.validator.DoubleRangeValidator.TYPE={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u306e\u578b\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093
+javax.faces.validator.LengthValidator.MAXIMUM={1}: \u78BA \u8A8D \u306E \u9593 \u9055 \u3044: \u9577 \u3055 \u306F \u6B63 \u5F53 \u306A \u6700 \u5927 \u3088 \u308A \u5927 \u304D \u3044 ''{0}''
+javax.faces.validator.LengthValidator.MINIMUM={1}: \u78BA \u8A8D \u306E \u9593 \u9055 \u3044: \u9577 \u3055 \u306F \u6B63 \u5F53 \u306A \u6700 \u5C0F \u3088 \u308A \u3088 \u308A \u5C11 \u306A \u304F ''{0}'' \u3042 \u308B
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5927\u5024 "{0}" \u3092\u4e0a\u56de\u3063\u3066\u3044\u307e\u3059
+javax.faces.validator.LongRangeValidator.MINIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5c0f\u5024 "{0}" \u3092\u4e0b\u56de\u3063\u3066\u3044\u307e\u3059
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u6307\u5b9a\u3055\u308c\u305f\u5c5e\u6027\u304c {0} \u3068 {1} \u306e\u9593\u306e\u671f\u5f85\u5024\u306b\u3042\u308a\u307e\u305b\u3093\u3002
+javax.faces.validator.LongRangeValidator.TYPE={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u306e\u578b\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002
+javax.faces.validator.NOT_IN_RANGE=\u691c\u8a3c\u30a8\u30e9\u30fc: \u6307\u5b9a\u3055\u308c\u305f\u5c5e\u6027\u304c {0} \u3068 {1} \u306e\u9593\u306e\u671f\u5f85\u5024\u306b\u3042\u308a\u307e\u305b\u3093\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7a7a\u3067\u306a\u3044\u5024\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+javax.faces.validator.RegexValidator.NOT_MATCHED=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u4e00\u81f4\u3057\u307e\u305b\u3093
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3 ''{0}'' \u306b\u4e00\u81f4\u3057\u307e\u305b\u3093
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\u6b63\u898f\u8868\u73fe\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059\u3002
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\u6b63\u898f\u8868\u73fe\u306e\u30a8\u30e9\u30fc\u3001''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
+
diff --git a/javax/faces/Messages_ko.properties b/javax/faces/Messages_ko.properties
new file mode 100644
index 0000000..e927403
--- /dev/null
+++ b/javax/faces/Messages_ko.properties
@@ -0,0 +1,152 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}: \ubcc0\ud658 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
+javax.faces.component.UIInput.REQUIRED={0}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.
+javax.faces.component.UIInput.UPDATE={0}: \uc81c\ucd9c\ud55c \uc815\ubcf4\ub97c \ucc98\ub9ac\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. 
+javax.faces.component.UISelectOne.INVALID={0}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+javax.faces.component.UISelectMany.INVALID={0}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}''\uc740(\ub294) \uc11c\uba85\ub41c 10\uc9c4\uc218\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}''\uc740(\ub294) 0\uc790\ub9ac \uc774\uc0c1\uc758 \uc11c\uba85\ub41c 10\uc9c4\uc218\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc774 \uc22b\uc790 \ub4a4\uc5d0 \uc18c\uc218\uc810\uacfc \ubd84\uc218\uac00 \uc62c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.  \uc608: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}''\uc740(\ub294) 'true' \ub610\ub294 'false'\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}''\uc740(\ub294) 'true' \ub610\ub294 'false'\uc5ec\uc57c \ud569\ub2c8\ub2e4.  'true' \uc774\uc678\uc758 \uac12\uc740 'false'\ub85c \ud3c9\uac00\ub429\ub2c8\ub2e4.
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}''\uc740(\ub294) -128\uacfc 127 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}''\uc740(\ub294) -128\uacfc 127 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.  \uc608: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}''\uc740(\ub294) \uc720\ud6a8\ud55c \ubb38\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}''\uc740(\ub294) \uc720\ud6a8\ud55c ASCII \ubb38\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}''\uc744(\ub97c) \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}''\uc744(\ub97c) \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc \ubc0f \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc \ubc0f \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: ''{0}'' \uac12\uc744 \ubcc0\ud658\ud558\ub824\uba74 '\ud328\ud134' \ub610\ub294 '\uc720\ud615' \uc18d\uc131\uc774 \uc9c0\uc815\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}''\uc740(\ub294) 4.9E-324\uc640 1.7976931348623157E308 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}''\uc744(\ub97c) enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}''\uc744(\ub97c) \uc0c1\uc218 ''{1}''\uc774(\uac00) \ud3ec\ud568\ub41c enum\uc5d0\uc11c \ud558\ub098\uc758 enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}''\uc744(\ub97c) enum\uc5d0\uc11c enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud558\uc9c0\ub9cc enum \ud074\ub798\uc2a4\uac00 \uc81c\uacf5\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}''\uc744(\ub97c) enum\uc5d0\uc11c enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud558\uc9c0\ub9cc enum \ud074\ub798\uc2a4\uac00 \uc81c\uacf5\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}''\uc740(\ub294) 1.4E-45\uc640 3.4028235E38 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}''\uc740(\ub294) -2147483648\uacfc 2147483647 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}''\uc740(\ub294) -9223372036854775808\uacfc 9223372036854775807 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}''\uc744(\ub97c) \ud1b5\ud654 \uac12\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}''\uc744(\ub97c) \ud1b5\ud654 \uac12\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}''\uc744(\ub97c) \ubc31\ubd84\uc728\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}''\uc744(\ub97c) \ubc31\ubd84\uc728\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}''\uc740(\ub294) \uc22b\uc790\uac00 \uc544\ub2d9\ub2c8\ub2e4.
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}''\uc740(\ub294) \uc22b\uc790\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}''\uc740(\ub294) \uc22b\uc790 \ud328\ud134\uc774 \uc544\ub2d9\ub2c8\ub2e4.
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}''\uc740(\ub294) \uc22b\uc790 \ud328\ud134\uc774 \uc544\ub2d9\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}''\uc740(\ub294) -32768\uacfc 32767 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
+javax.faces.converter.STRING={1}: ''{0}''\uc744(\ub97c) \ubb38\uc790\uc5f4\ub85c \ubcc0\ud658\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\ub300\uac12 "{0}"\ubcf4\ub2e4 \ud07d\ub2c8\ub2e4.
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\uc18c\uac12 ''{0}''\ubcf4\ub2e4 \uc791\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: \uac80\uc99d \uc624\ub958: \uc9c0\uc815\ud55c \uc18d\uc131\uc774 \ud544\uc694\ud55c \uac12 \ubc94\uc704\uc778 {0} ~ {1}\uc5d0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.DoubleRangeValidator.TYPE={0}: \uac80\uc99d \uc624\ub958: \uac12 \uc720\ud615\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.LengthValidator.MAXIMUM={1}: \uae38 \uc774 \ub294 \ud5c8 \uc6a9 \uac00 \ub2a5 \ud55c \ucd5c \uc18c \ubcf4 \ub2e4 \ub294 \ubcf4 \ub2e4 \uc801 \uac8c ''{0}'' \uc774 \ub2e4.
+javax.faces.validator.LengthValidator.MINIMUM={1}: \ud655 \uc778 \uacfc \uc2e4: \uae38 \uc774 \ub294 \ud5c8 \uc6a9 \uac00 \ub2a5 \ud55c \ucd5c \uc18c \ubcf4 \ub2e4 \ub294 \ubcf4 \ub2e4 \uc801 \uac8c ''{0}'' \uc774 \ub2e4
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\ub300\uac12 ''{0}''\ubcf4\ub2e4 \ud07d\ub2c8\ub2e4.
+javax.faces.validator.LongRangeValidator.MINIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\uc18c\uac12 ''{0}''\ubcf4\ub2e4 \uc791\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: \uac80\uc99d \uc624\ub958: \uc9c0\uc815\ud55c \uc18d\uc131\uc774 \ud544\uc694\ud55c \uac12 \ubc94\uc704\uc778 {0} ~ {1}\uc5d0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.LongRangeValidator.TYPE={0}: \uac80\uc99d \uc624\ub958: \uac12 \uc720\ud615\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.NOT_IN_RANGE=\uac80\uc99d \uc624\ub958: \uc9c0\uc815\ud55c \uc18d\uc131\uc774 \ud544\uc694\ud55c \uac12 \ubc94\uc704\uc778 {0} ~ {1}\uc5d0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex \ud328\ud134\uc744 \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex \ud328\ud134\uc744 \ube44\uc5b4 \uc788\uc9c0 \uc54a\uc740 \uac12\uc73c\ub85c \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.
+javax.faces.validator.RegexValidator.NOT_MATCHED=Regex \ud328\ud134\uc744 \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex \ud328\ud134 ''{0}''\uc744(\ub97c) \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\uc815\uaddc \ud45c\ud604\uc2dd \uc624\ub958\uc785\ub2c8\ub2e4.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\uc815\uaddc \ud45c\ud604\uc2dd \uc624\ub958, ''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
+
diff --git a/javax/faces/Messages_pt_BR.properties b/javax/faces/Messages_pt_BR.properties
new file mode 100644
index 0000000..252adb4
--- /dev/null
+++ b/javax/faces/Messages_pt_BR.properties
@@ -0,0 +1,152 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}: Ocorreu um erro de convers\u00e3o.
+javax.faces.component.UIInput.REQUIRED={0}: Erro de valida\u00e7\u00e3o: o valor \u00e9 necess\u00e1rio.
+javax.faces.component.UIInput.UPDATE={0}: Ocorreu um erro ao processar as informa\u00e7\u00f5es enviadas. 
+javax.faces.component.UISelectOne.INVALID={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 v\u00e1lido
+javax.faces.component.UISelectMany.INVALID={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 v\u00e1lido
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' deve ser um n\u00famero decimal com sinal.
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' deve ser um n\u00famero decimal com sinal formado por zero ou mais d\u00edgitos, que pode ser seguido de um ponto ou fra\u00e7\u00e3o decimal.  Exemplo: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos. Exemplo: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' deve ser 'verdadeiro' ou 'falso'.
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' deve ser 'verdadeiro' ou 'falso'.  Qualquer valor diferente de 'verdadeiro' se avaliar\u00e1 como 'falso'.
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' deve ser um n\u00famero entre -128 e 127.
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' deve ser um n\u00famero entre -128 e 127.  Exemplo: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' deve ser um caractere v\u00e1lido.
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' deve ser um caractere v\u00e1lido ASCII.
+javax.faces.converter.DateTimeConverter.DATE={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data.
+javax.faces.converter.DateTimeConverter.DATE_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data. Exemplo: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma hora.
+javax.faces.converter.DateTimeConverter.TIME_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma hora. Exemplo: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data e hora.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data e hora. Exemplo: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: Um atributo 'pattern' ou 'type' deve ser especificado para converter o valor ''{0}''.
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' deve ser um n\u00famero entre 4.9E-324 e 1.7976931348623157E308  Exemplo: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' deve ser convert\u00edvel em um enum.
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' deve ser convert\u00edvel em um enum de um enum que contenha a constante ''{1}''.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' deve ser convert\u00edvel em um enum do enum, mas sem nenhuma classe enum fornecida.
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' deve ser convert\u00edvel em um enum do enum, mas sem nenhuma classe enum fornecida.
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' deve ser um n\u00famero entre 1.4E-45 e 3.4028235E38  Exemplo: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' deve ser um n\u00famero entre -2147483648 e 2147483647 Exemplo: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' deve ser um n\u00famero entre -9223372036854775808 a 9223372036854775807 Exemplo: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como um valor monet\u00e1rio.
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como um valor monet\u00e1rio. Exemplo: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma porcentagem.
+javax.faces.converter.NumberConverter.PERCENT_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma porcentagem. Exemplo: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' n\u00e3o \u00e9 um n\u00famero.
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' n\u00e3o \u00e9 um n\u00famero. Exemplo: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' n\u00e3o \u00e9 um padr\u00e3o de n\u00famero.
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' n\u00e3o \u00e9 um padr\u00e3o de n\u00famero. Exemplo: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' deve ser um n\u00famero entre -32768 e 32767 Exemplo: {1}
+javax.faces.converter.STRING={1}: n\u00e3o foi poss\u00edvel converter ''{0}'' em uma sequ\u00eancia.
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 maior do que o m\u00e1ximo permitido de "{0}"
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 menor do que o m\u00ednimo permitido de "{0}"
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Erro de valida\u00e7\u00e3o: o atributo especificado n\u00e3o est\u00e1 entre os valores esperados de {0} e {1}.
+javax.faces.validator.DoubleRangeValidator.TYPE={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 do tipo correto
+javax.faces.validator.LengthValidator.MAXIMUM={1}: Erro de valida\u00e7\u00e3o: o comprimento \u00e9 maior do que o m\u00e1ximo permitido de "{0}"
+javax.faces.validator.LengthValidator.MINIMUM={1}: Erro de valida\u00e7\u00e3o: o comprimento \u00e9 menor do que o m\u00ednimo permitido de "{0}"
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 maior do que o m\u00e1ximo permitido de "{0}"
+javax.faces.validator.LongRangeValidator.MINIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 menor do que o m\u00ednimo permitido de "{0}"
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Erro de valida\u00e7\u00e3o: o atributo especificado n\u00e3o est\u00e1 entre os valores esperados de {0} e {1}.
+javax.faces.validator.LongRangeValidator.TYPE={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 do tipo correto.
+javax.faces.validator.NOT_IN_RANGE=Erro de valida\u00e7\u00e3o: o atributo especificado n\u00e3o est\u00e1 entre os valores esperados de {0} e {1}.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=O padr\u00e3o Regex deve ser definido.
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=O padr\u00e3o Regex deve ser definido como um valor n\u00e3o vazio.
+javax.faces.validator.RegexValidator.NOT_MATCHED=Padr\u00e3o Regex n\u00e3o corresponde
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=O padr\u00e3o Regex de ''{0}'' n\u00e3o corresponde
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Erro na express\u00e3o regular.
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Erro na express\u00e3o regular, ''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
+
+
diff --git a/javax/faces/Messages_zh_CN.properties b/javax/faces/Messages_zh_CN.properties
new file mode 100644
index 0000000..8705c4e
--- /dev/null
+++ b/javax/faces/Messages_zh_CN.properties
@@ -0,0 +1,150 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}\uff1a\u51fa\u73b0\u8f6c\u6362\u9519\u8bef\u3002
+javax.faces.component.UIInput.REQUIRED={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u5fc5\u987b\u8f93\u5165\u503c\u3002
+javax.faces.component.UIInput.UPDATE={0}\uff1a\u5904\u7406\u63d0\u4ea4\u7684\u4fe1\u606f\u65f6\u51fa\u9519\u3002 
+javax.faces.component.UISelectOne.INVALID={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u65e0\u6548
+javax.faces.component.UISelectMany.INVALID={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u65e0\u6548
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: "{0}" \u5fc5\u987b\u662f\u5e26\u7b26\u53f7\u7684\u5341\u8fdb\u5236\u6570\u503c\u3002
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: "{0}" \u5fc5\u987b\u662f\u7531\u96f6\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u5e26\u7b26\u53f7\u5341\u8fdb\u5236\u6570\u503c\uff0c\u53ef\u4ee5\u540e\u8ddf\u5c0f\u6570\u70b9\u548c\u5c0f\u6570\u90e8\u5206\u3002\u793a\u4f8b: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002\u793a\u4f8b: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: "{0}" \u5fc5\u987b\u662f "true" \u6216 "false"\u3002
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: "{0}" \u5fc5\u987b\u662f "true" \u6216 "false"\u3002\u975e "true" \u503c\u90fd\u5c06\u4f1a\u88ab\u89c6\u4e3a "false"\u3002
+javax.faces.converter.ByteConverter.BYTE={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -128 \u548c 127 \u4e4b\u95f4\u7684\u6570\u503c\u3002
+javax.faces.converter.ByteConverter.BYTE_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -128 \u548c 127 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: "{0}" \u5fc5\u987b\u662f\u6709\u6548\u5b57\u7b26\u3002
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: "{0}" \u5fc5\u987b\u662f\u6709\u6548\u7684 ASCII \u5b57\u7b26\u3002
+javax.faces.converter.DateTimeConverter.DATE={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u3002
+javax.faces.converter.DateTimeConverter.DATE_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u3002\u793a\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65f6\u95f4\u3002
+javax.faces.converter.DateTimeConverter.TIME_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65f6\u95f4\u3002\u793a\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u548c\u65f6\u95f4\u3002
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u548c\u65f6\u95f4\u3002\u793a\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}\uff1a\u5fc5\u987b\u6307\u5b9a "pattern" \u6216 "type" \u5c5e\u6027\u624d\u80fd\u8f6c\u6362\u503c "{0}"\u3002
+javax.faces.converter.DoubleConverter.DOUBLE={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e 4.9E-324 \u548c 1.7976931348623157E308 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: "{0}" \u5fc5\u987b\u80fd\u591f\u8f6c\u6362\u4e3a\u679a\u4e3e\u503c\u3002
+javax.faces.converter.EnumConverter.ENUM_detail={2}: "{0}" \u5fc5\u987b\u80fd\u591f\u4ece\u4e00\u4e2a\u542b\u6709\u5e38\u6570 "{1}" \u7684\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u53e6\u4e00\u4e2a\u679a\u4e3e\u503c\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: "{0}" \u5fc5\u987b\u80fd\u591f\u4ece\u4e00\u4e2a\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u53e6\u4e00\u4e2a\u679a\u4e3e\u503c\uff0c\u4f46\u672a\u63d0\u4f9b\u679a\u4e3e\u7c7b\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: "{0}" \u5fc5\u987b\u80fd\u591f\u4ece\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u679a\u4e3e\u503c\uff0c\u4f46\u672a\u63d0\u4f9b\u679a\u4e3e\u7c7b\u3002
+javax.faces.converter.FloatConverter.FLOAT={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e 1.4E-45 \u548c 3.4028235E38 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -2147483648 \u548c 2147483647 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
+javax.faces.converter.LongConverter.LONG={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
+javax.faces.converter.LongConverter.LONG_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -9223372036854775808 \u548c 9223372036854775807 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u8d27\u5e01\u503c\u3002
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u8d27\u5e01\u503c\u3002\u793a\u4f8b: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u767e\u5206\u6570\u3002
+javax.faces.converter.NumberConverter.PERCENT_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u767e\u5206\u6570\u3002\u793a\u4f8b: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: "{0}" \u4e0d\u662f\u6570\u503c\u3002
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: "{0}" \u4e0d\u662f\u6570\u503c\u3002\u793a\u4f8b: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: "{0}" \u4e0d\u662f\u6570\u503c\u6a21\u5f0f\u3002
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: "{0}" \u4e0d\u662f\u6570\u503c\u6a21\u5f0f\u3002\u793a\u4f8b: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
+javax.faces.converter.ShortConverter.SHORT_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -32768 \u548c 32767 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
+javax.faces.converter.STRING={1}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32\u3002
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5927\u4e8e\u5141\u8bb8\u7684\u6700\u5927\u503c "{0}"
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5c0f\u4e8e\u5141\u8bb8\u7684\u6700\u5c0f\u503c "{0}"
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u6307\u5b9a\u7684\u5c5e\u6027\u4e0d\u5728\u9884\u671f\u503c {0} \u548c {1} \u4e4b\u95f4\u3002
+javax.faces.validator.DoubleRangeValidator.TYPE={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u4e0d\u662f\u6b63\u786e\u7684\u7c7b\u578b
+javax.faces.validator.LengthValidator.MAXIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u957f\u5ea6\u5927\u4e8e\u5141\u8bb8\u7684\u6700\u5927\u503c "{0}"
+javax.faces.validator.LengthValidator.MINIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u957f\u5ea6\u5c0f\u4e8e\u5141\u8bb8\u7684\u6700\u5c0f\u503c "{0}"
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5927\u4e8e\u5141\u8bb8\u7684\u6700\u5927\u503c "{0}"
+javax.faces.validator.LongRangeValidator.MINIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5c0f\u4e8e\u5141\u8bb8\u7684\u6700\u5c0f\u503c "{0}"
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u6307\u5b9a\u7684\u5c5e\u6027\u4e0d\u5728\u9884\u671f\u503c {0} \u548c {1} \u4e4b\u95f4\u3002
+javax.faces.validator.LongRangeValidator.TYPE={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u4e0d\u662f\u6b63\u786e\u7684\u7c7b\u578b\u3002
+javax.faces.validator.NOT_IN_RANGE=\u9a8c\u8bc1\u9519\u8bef\uff1a\u6307\u5b9a\u7684\u5c5e\u6027\u4e0d\u5728\u9884\u671f\u503c {0} \u548c {1} \u4e4b\u95f4\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=\u5fc5\u987b\u8bbe\u7f6e Regex \u6a21\u5f0f\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex \u6a21\u5f0f\u5fc5\u987b\u8bbe\u7f6e\u4e3a\u975e\u7a7a\u503c\u3002
+javax.faces.validator.RegexValidator.NOT_MATCHED=Regex \u6a21\u5f0f\u4e0d\u5339\u914d
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail="{0}" \u7684 Regex \u6a21\u5f0f\u4e0d\u5339\u914d
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\u6b63\u5219\u8868\u8fbe\u5f0f\u4e2d\u53d1\u751f\u9519\u8bef\u3002
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\u6b63\u5219\u8868\u8fbe\u5f0f\u4e2d\u53d1\u751f\u9519\u8bef\uff0c"{0}"
+javax.faces.validator.BeanValidator.MESSAGE={0}
diff --git a/javax/faces/Messages_zh_HK.properties b/javax/faces/Messages_zh_HK.properties
new file mode 100644
index 0000000..224fc94
--- /dev/null
+++ b/javax/faces/Messages_zh_HK.properties
@@ -0,0 +1,150 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}\uff1a\u767c\u751f\u8f49\u63db\u932f\u8aa4\u3002
+javax.faces.component.UIInput.REQUIRED={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u5fc5\u9808\u6709\u503c\u3002
+javax.faces.component.UIInput.UPDATE={0}\uff1a\u8655\u7406\u60a8\u9001\u51fa\u7684\u8cc7\u8a0a\u6642\u767c\u751f\u932f\u8aa4\u3002 
+javax.faces.component.UISelectOne.INVALID={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u7121\u6548
+javax.faces.component.UISelectMany.INVALID={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u7121\u6548
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' \u5fc5\u9808\u662f\u5e36\u6b63\u8ca0\u865f\u7684\u5341\u9032\u5236\u6578\u5b57\u3002
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u5e36\u6b63\u8ca0\u865f\u7684\u5341\u9032\u5236\u6578\u5b57\uff0c\u5305\u62ec\u96f6\u4f4d\u6216\u591a\u4f4d\u6578\uff0c\u53ef\u4ee5\u5f8c\u63a5\u5c0f\u6578\u9ede\u548c\u5206\u6578\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' \u5fc5\u9808\u662f\u300ctrue\u300d\u6216\u300cfalse\u300d\u3002
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' \u5fc5\u9808\u662f\u300ctrue\u300d\u6216\u300cfalse\u300d\u3002\u300ctrue\u300d\u4e4b\u5916\u7684\u4efb\u4f55\u503c\u5747\u6703\u8996\u70ba\u300cfalse\u300d\u3002
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -128 \u5230 127 \u4e4b\u9593\u7684\u6578\u5b57\u3002
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -128 \u5230 127 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' \u5fc5\u9808\u662f\u6709\u6548\u5b57\u5143\u3002
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' \u5fc5\u9808\u662f\u6709\u6548\u7684 ASCII \u5b57\u5143\u3002
+javax.faces.converter.DateTimeConverter.DATE={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u3002
+javax.faces.converter.DateTimeConverter.DATE_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u6642\u9593\u3002
+javax.faces.converter.DateTimeConverter.TIME_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u6642\u9593\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u548c\u6642\u9593\u3002
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u548c\u6642\u9593\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}\uff1a\u5fc5\u9808\u6307\u5b9a\u300cpattern\u300d\u6216\u300ctype\u300d\u5c6c\u6027\u624d\u80fd\u8f49\u63db\u503c ''{0}''\u3002
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 4.9E-324 \u5230 1.7976931348623157E308 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' \u5fc5\u9808\u53ef\u8f49\u63db\u70ba enum\u3002
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e\u5305\u542b\u5e38\u6578\u300c{1}\u300d\u7684 enum \u8f49\u63db\u70ba enum\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e enum \u8f49\u63db\u70ba enum\uff0c\u4f46\u662f\u672a\u63d0\u4f9b enum \u985e\u5225\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e enum \u8f49\u63db\u70ba enum\uff0c\u4f46\u662f\u672a\u63d0\u4f9b enum \u985e\u5225\u3002
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 1.4E-45 \u5230 3.4028235E38 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -2147483648 \u5230 2147483647 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -9223372036854775808 \u5230 9223372036854775807 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u8ca8\u5e63\u503c\u3002
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u8ca8\u5e63\u503c\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u767e\u5206\u6bd4\u3002
+javax.faces.converter.NumberConverter.PERCENT_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u767e\u5206\u6bd4\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u3002
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u6a23\u5f0f\u3002
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u6a23\u5f0f\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -32768 \u5230 32767 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.STRING={1}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u8f49\u63db\u70ba\u5b57\u4e32\u3002
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
+javax.faces.validator.DoubleRangeValidator.TYPE={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u4e0d\u5c6c\u65bc\u6b63\u78ba\u7684\u985e\u578b
+javax.faces.validator.LengthValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u9577\u5ea6\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
+javax.faces.validator.LengthValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u9577\u5ea6\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
+javax.faces.validator.LongRangeValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
+javax.faces.validator.LongRangeValidator.TYPE={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u4e0d\u5c6c\u65bc\u6b63\u78ba\u7684\u985e\u578b\u3002
+javax.faces.validator.NOT_IN_RANGE=\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=\u5fc5\u9808\u8a2d\u5b9a\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=\u5fc5\u9808\u5c07\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f\u8a2d\u70ba\u975e\u7a7a\u767d\u503c\u3002
+javax.faces.validator.RegexValidator.NOT_MATCHED=\u4e0d\u7b26\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=\u4e0d\u7b26 ''{0}'' \u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\u5e38\u898f\u8868\u793a\u5f0f\u767c\u751f\u932f\u8aa4\u3002
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\u5e38\u898f\u8868\u793a\u5f0f\u767c\u751f\u932f\u8aa4\uff0c''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
diff --git a/javax/faces/Messages_zh_TW.properties b/javax/faces/Messages_zh_TW.properties
new file mode 100644
index 0000000..224fc94
--- /dev/null
+++ b/javax/faces/Messages_zh_TW.properties
@@ -0,0 +1,150 @@
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common Development
+# and Distribution License("CDDL") (collectively, the "License").  You
+# may not use this file except in compliance with the License.  You can
+# obtain a copy of the License at
+# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+# or packager/legal/LICENSE.txt.  See the License for the specific
+# language governing permissions and limitations under the License.
+#
+# When distributing the software, include this License Header Notice in each
+# file and include the License file at packager/legal/LICENSE.txt.
+#
+# GPL Classpath Exception:
+# Oracle designates this particular file as subject to the "Classpath"
+# exception as provided by Oracle in the GPL Version 2 section of the License
+# file that accompanied this code.
+#
+# Modifications:
+# If applicable, add the following below the License Header, with the fields
+# enclosed by brackets [] replaced by your own identifying information:
+# "Portions Copyright [year] [name of copyright owner]"
+#
+# Contributor(s):
+# If you wish your version of this file to be governed by only the CDDL or
+# only the GPL Version 2, indicate your decision by adding "[Contributor]
+# elects to include this software in this distribution under the [CDDL or GPL
+# Version 2] license."  If you don't indicate a single choice of license, a
+# recipient has the option to distribute your version of this file under
+# either the CDDL, the GPL Version 2 or to extend the choice of license to
+# its licensees as provided above.  However, if you add GPL Version 2 code
+# and therefore, elected the GPL Version 2 license, then the option applies
+# only if the new code is made subject to such option by the copyright
+# holder.
+#
+
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ #
+ # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ #
+ # The contents of this file are subject to the terms of either the GNU
+ # General Public License Version 2 only ("GPL") or the Common Development
+ # and Distribution License("CDDL") (collectively, the "License").  You
+ # may not use this file except in compliance with the License. You can obtain
+ # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ # language governing permissions and limitations under the License.
+ #
+ # When distributing the software, include this License Header Notice in each
+ # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ # Sun designates this particular file as subject to the "Classpath" exception
+ # as provided by Sun in the GPL Version 2 section of the License file that
+ # accompanied this code.  If applicable, add the following below the License
+ # Header, with the fields enclosed by brackets [] replaced by your own
+ # identifying information: "Portions Copyrighted [year]
+ # [name of copyright owner]"
+ #
+ # Contributor(s):
+ #
+ # If you wish your version of this file to be governed by only the CDDL or
+ # only the GPL Version 2, indicate your decision by adding "[Contributor]
+ # elects to include this software in this distribution under the [CDDL or GPL
+ # Version 2] license."  If you don't indicate a single choice of license, a
+ # recipient has the option to distribute your version of this file under
+ # either the CDDL, the GPL Version 2 or to extend the choice of license to
+ # its licensees as provided above.  However, if you add GPL Version 2 code
+ # and therefore, elected the GPL Version 2 license, then the option applies
+ # only if the new code is made subject to such option by the copyright
+ # holder.
+ #
+
+# ==============================================================================
+# Component Errors
+# ==============================================================================
+javax.faces.component.UIInput.CONVERSION={0}\uff1a\u767c\u751f\u8f49\u63db\u932f\u8aa4\u3002
+javax.faces.component.UIInput.REQUIRED={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u5fc5\u9808\u6709\u503c\u3002
+javax.faces.component.UIInput.UPDATE={0}\uff1a\u8655\u7406\u60a8\u9001\u51fa\u7684\u8cc7\u8a0a\u6642\u767c\u751f\u932f\u8aa4\u3002 
+javax.faces.component.UISelectOne.INVALID={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u7121\u6548
+javax.faces.component.UISelectMany.INVALID={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u7121\u6548
+
+# ==============================================================================
+# Converter Errors
+# ==============================================================================
+javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' \u5fc5\u9808\u662f\u5e36\u6b63\u8ca0\u865f\u7684\u5341\u9032\u5236\u6578\u5b57\u3002
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u5e36\u6b63\u8ca0\u865f\u7684\u5341\u9032\u5236\u6578\u5b57\uff0c\u5305\u62ec\u96f6\u4f4d\u6216\u591a\u4f4d\u6578\uff0c\u53ef\u4ee5\u5f8c\u63a5\u5c0f\u6578\u9ede\u548c\u5206\u6578\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' \u5fc5\u9808\u662f\u300ctrue\u300d\u6216\u300cfalse\u300d\u3002
+javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' \u5fc5\u9808\u662f\u300ctrue\u300d\u6216\u300cfalse\u300d\u3002\u300ctrue\u300d\u4e4b\u5916\u7684\u4efb\u4f55\u503c\u5747\u6703\u8996\u70ba\u300cfalse\u300d\u3002
+javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -128 \u5230 127 \u4e4b\u9593\u7684\u6578\u5b57\u3002
+javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -128 \u5230 127 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' \u5fc5\u9808\u662f\u6709\u6548\u5b57\u5143\u3002
+javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' \u5fc5\u9808\u662f\u6709\u6548\u7684 ASCII \u5b57\u5143\u3002
+javax.faces.converter.DateTimeConverter.DATE={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u3002
+javax.faces.converter.DateTimeConverter.DATE_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.TIME={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u6642\u9593\u3002
+javax.faces.converter.DateTimeConverter.TIME_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u6642\u9593\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.DATETIME={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u548c\u6642\u9593\u3002
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u548c\u6642\u9593\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}\uff1a\u5fc5\u9808\u6307\u5b9a\u300cpattern\u300d\u6216\u300ctype\u300d\u5c6c\u6027\u624d\u80fd\u8f49\u63db\u503c ''{0}''\u3002
+javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 4.9E-324 \u5230 1.7976931348623157E308 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1} 
+javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' \u5fc5\u9808\u53ef\u8f49\u63db\u70ba enum\u3002
+javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e\u5305\u542b\u5e38\u6578\u300c{1}\u300d\u7684 enum \u8f49\u63db\u70ba enum\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e enum \u8f49\u63db\u70ba enum\uff0c\u4f46\u662f\u672a\u63d0\u4f9b enum \u985e\u5225\u3002
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e enum \u8f49\u63db\u70ba enum\uff0c\u4f46\u662f\u672a\u63d0\u4f9b enum \u985e\u5225\u3002
+javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 1.4E-45 \u5230 3.4028235E38 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -2147483648 \u5230 2147483647 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.LongConverter.LONG={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -9223372036854775808 \u5230 9223372036854775807 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.CURRENCY={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u8ca8\u5e63\u503c\u3002
+javax.faces.converter.NumberConverter.CURRENCY_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u8ca8\u5e63\u503c\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.PERCENT={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u767e\u5206\u6bd4\u3002
+javax.faces.converter.NumberConverter.PERCENT_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u767e\u5206\u6bd4\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u3002
+javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u6a23\u5f0f\u3002
+javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u6a23\u5f0f\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
+javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -32768 \u5230 32767 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
+javax.faces.converter.STRING={1}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u8f49\u63db\u70ba\u5b57\u4e32\u3002
+
+
+# ==============================================================================
+# Validator Errors
+# ==============================================================================
+javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
+javax.faces.validator.DoubleRangeValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
+javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
+javax.faces.validator.DoubleRangeValidator.TYPE={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u4e0d\u5c6c\u65bc\u6b63\u78ba\u7684\u985e\u578b
+javax.faces.validator.LengthValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u9577\u5ea6\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
+javax.faces.validator.LengthValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u9577\u5ea6\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
+javax.faces.validator.LongRangeValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
+javax.faces.validator.LongRangeValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
+javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
+javax.faces.validator.LongRangeValidator.TYPE={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u4e0d\u5c6c\u65bc\u6b63\u78ba\u7684\u985e\u578b\u3002
+javax.faces.validator.NOT_IN_RANGE=\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET=\u5fc5\u9808\u8a2d\u5b9a\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f\u3002
+javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=\u5fc5\u9808\u5c07\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f\u8a2d\u70ba\u975e\u7a7a\u767d\u503c\u3002
+javax.faces.validator.RegexValidator.NOT_MATCHED=\u4e0d\u7b26\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f
+javax.faces.validator.RegexValidator.NOT_MATCHED_detail=\u4e0d\u7b26 ''{0}'' \u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\u5e38\u898f\u8868\u793a\u5f0f\u767c\u751f\u932f\u8aa4\u3002
+javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\u5e38\u898f\u8868\u793a\u5f0f\u767c\u751f\u932f\u8aa4\uff0c''{0}''
+javax.faces.validator.BeanValidator.MESSAGE={0}
diff --git a/javax/faces/TypedCollections.java b/javax/faces/TypedCollections.java
new file mode 100644
index 0000000..af74bcb
--- /dev/null
+++ b/javax/faces/TypedCollections.java
@@ -0,0 +1,159 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+ class TypedCollections {
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null).
+     */
+    private static boolean checkCollectionMembers(Collection<?> c, Class<?> type) {
+        for (Object element : c) {
+            if (element != null && !type.isInstance(element)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null), and that the collection
+     * itself is of the given collection type.
+     * 
+     * @param <E>
+     *                the collection's element type
+     * @param c
+     *                the collection to cast
+     * @param type
+     *                the class of the collection's element type.
+     * @return the dynamically-type checked collection.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E,TypedC extends Collection<E>> TypedC dynamicallyCastCollection(Collection<?> c,
+                                                                                          Class<E> type, 
+                                                                                          Class<TypedC> collectionType) {
+        if (c == null)
+            return null;
+        if (!collectionType.isInstance(c))
+            throw new ClassCastException(c.getClass().getName());
+        assert checkCollectionMembers(c, type) :
+            "The collection contains members with a type other than " + type.getName();
+
+        return collectionType.cast(c);
+    }
+
+    /**
+     * Dynamically check that the members of the list are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the list's element type
+     * @param list
+     *                the list to cast
+     * @param type
+     *                the class of the list's element type.
+     * @return the dynamically-type checked list.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E> List<E> dynamicallyCastList(List<?> list, Class<E> type) {
+        return dynamicallyCastCollection(list, type, List.class);
+    }
+
+    /**
+     * Dynamically check that the members of the set are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the set's element type
+     * @param set
+     *                the set to cast
+     * @param type
+     *                the class of the set's element type.
+     * @return the dynamically-type checked set.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E> Set<E> dynamicallyCastSet(Set<?> set, 
+                                                      Class<E> type) {
+        return dynamicallyCastCollection(set, type, Set.class);
+    }
+
+    /**
+     * Dynamically check that the keys and values in the map are all
+     * instances of the correct types (or null).
+     * 
+     * @param <K>
+     *                the map's key type
+     * @param <V>
+     *                the map's value type
+     * @param map
+     *                the map to cast
+     * @param keyType
+     *                the class of the map's key type.
+     * @param valueType
+     *                the class of the map's value type.
+     * @return the dynamically-type checked map.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <K, V> Map<K, V> dynamicallyCastMap(Map<?, ?> map,
+                                                            Class<K> keyType, 
+                                                            Class<V> valueType) {
+        if (map == null) {
+            return null;                                                                     
+        }
+        assert checkCollectionMembers(map.keySet(), keyType) :
+            "The map contains keys with a type other than " + keyType.getName();
+        assert checkCollectionMembers(map.values(), valueType) :
+            "The map contains values with a type other than " + valueType.getName();
+
+        return (Map<K, V>) map;
+    }
+}
diff --git a/javax/faces/application/Application.java b/javax/faces/application/Application.java
new file mode 100644
index 0000000..d91607c
--- /dev/null
+++ b/javax/faces/application/Application.java
@@ -0,0 +1,1951 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.ReferenceSyntaxException;
+import javax.faces.el.ValueBinding;
+import javax.faces.el.VariableResolver;
+import javax.faces.event.ActionListener;
+
+import javax.el.ELContextListener;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.flow.FlowHandler;
+import javax.faces.validator.Validator;
+import javax.faces.view.ViewDeclarationLanguage;
+
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_0_rev_a
+ * changed_modified_2_2">Application</strong> represents a
+ * per-web-application singleton object where applications based on
+ * JavaServer Faces (or implementations wishing to provide extended
+ * functionality) can register application-wide singletons that provide
+ * functionality required by JavaServer Faces.  Default implementations
+ * of each object are provided for cases where the application does not
+ * choose to customize the behavior.</p>
+ *
+ * <p>The instance of {@link Application} is created by calling the
+ * <code>getApplication()</code> method of {@link ApplicationFactory}.
+ * Because this instance is shared, it must be implemented in a
+ * thread-safe manner.</p>
+ *
+ * <p>The application also acts as a factory for several types of
+ * Objects specified in the Faces Configuration file.  Please see {@link
+ * Application#createComponent}, {@link Application#createConverter},
+ * and {@link Application#createValidator}. </p>
+ */
+
+public abstract class Application {
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    private Application defaultApplication;
+
+    // ------------------------------------------------------------- Properties
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Return</span> the default 
+     * {@link ActionListener} to be registered for
+     * all {@link javax.faces.component.ActionSource} components in this
+     * application.  If not explicitly set, a default implementation must
+     * be provided that performs the <span class="changed_modified_2_2">functions 
+     * as specified in the section
+     * titled "ActionListener Property" in the chapter titled "Application Integration"
+     * of the spec prose document.</span></p>
+     *
+     * <p>Note that the specification for the default
+     * <code>ActionListener</code> contiues to call for the use of a
+     * <strong>deprecated</strong> property (<code>action</code>) and
+     * class (<code>MethodBinding</code>).  Unfortunately, this is
+     * necessary because the default <code>ActionListener</code> must
+     * continue to work with components that do not implement {@link
+     * javax.faces.component.ActionSource2}, and only implement {@link
+     * javax.faces.component.ActionSource}.</p>
+     */
+    public abstract ActionListener getActionListener();
+
+
+    /**
+     * <p>Set the default {@link ActionListener} to be registered for all
+     * {@link javax.faces.component.ActionSource} components.</p>
+     * </p>
+     *
+     * @param listener The new default {@link ActionListener}
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public abstract void setActionListener(ActionListener listener);
+
+    /**
+     * <p>Return the default <code>Locale</code> for this application.  If
+     * not explicitly set, <code>null</code> is returned.</p>
+     */ 
+    public abstract Locale getDefaultLocale();
+
+
+    /**
+     * <p>Set the default <code>Locale</code> for this application.</p>
+     *
+     * @param locale The new default <code>Locale</code>
+     *
+     * @throws NullPointerException if <code>locale</code>
+     *  is <code>null</code>
+     */
+    public abstract void setDefaultLocale(Locale locale);
+
+
+    /**
+     * <p>Return the <code>renderKitId</code> to be used for rendering
+     * this application.  If not explicitly set, <code>null</code> is
+     * returned.</p>
+     */
+    public abstract String getDefaultRenderKitId();
+
+
+    /**
+     * <p>Set the <code>renderKitId</code> to be used to render this
+     * application.  Unless the client has provided a custom {@link ViewHandler}
+     * that supports the use of multiple {@link javax.faces.render.RenderKit}
+     * instances in the same application, this method must only be called at
+     * application startup, before any Faces requests have been processed.
+     * This is a limitation of the current Specification, and may be lifted in
+     * a future release.</p>
+     */
+    public abstract void setDefaultRenderKitId(String renderKitId);
+
+
+
+    /**
+     * <p>Return the fully qualified class name of the
+     * <code>ResourceBundle</code> to be used for JavaServer Faces messages
+     * for this application.  If not explicitly set, <code>null</code>
+     * is returned.</p>
+     */
+    public abstract String getMessageBundle();
+
+
+    /**
+     * <p>Set the fully qualified class name of the <code>ResourceBundle</code>
+     * to be used for JavaServer Faces messages for this application.  See the
+     * JavaDocs for the <code>java.util.ResourceBundle</code> class for more
+     * information about the syntax for resource bundle names.</p>
+     *
+     * @param bundle Base name of the resource bundle to be used
+     *
+     * @throws NullPointerException if <code>bundle</code>
+     *  is <code>null</code>
+     */
+    public abstract void setMessageBundle(String bundle);
+
+
+    /**
+     * <p>Return the {@link NavigationHandler} instance that will be passed
+     * the outcome returned by any invoked application action for this
+     * web application.  If not explicitly set, a default implementation
+     * must be provided that performs the functions described in the
+     * {@link NavigationHandler} class description.</p>
+     */
+    public abstract NavigationHandler getNavigationHandler();
+
+
+    /**
+     * <p>Set the {@link NavigationHandler} instance that will be passed
+     * the outcome returned by any invoked application action for this
+     * web application.</p>
+     *
+     * @param handler The new {@link NavigationHandler} instance
+     *
+     * @throws NullPointerException if <code>handler</code>
+     *  is <code>null</code>
+     */
+    public abstract void setNavigationHandler(NavigationHandler handler);
+
+    /**
+     * <p class="changed_added_2_0">Return the singleton, stateless, thread-safe {@link
+     * ResourceHandler} for this application.  The JSF implementation
+     * must support the following techniques for declaring an alternate
+     * implementation of <code>ResourceHandler</code>.</p>
+     * <div class="changed_added_2_0">
+     * <ul>
+     *    <li><p>The <code>ResourceHandler</code> implementation is
+     *    declared in the application configuration resources by giving
+     *    the fully qualified class name as the value of the
+     *    <code><resource-handler></code> element within the
+     *    <code><application></code> element.  </p></li>
+     * </ul>
+     * <p>In all of the above cases, the runtime must employ the
+     * decorator pattern as for every other pluggable artifact in
+     * JSF.</p>
+
+     * <p class="changed_added_2_0">A default implementation is provided
+     * that throws <code>UnsupportedOperationException</code> so that
+     * users that decorate <code>Application</code> can continue to
+     * function</p>.
+
+
+     * </div>
+     * @since 2.0
+     */
+    public ResourceHandler getResourceHandler() {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getResourceHandler();
+        }
+
+        throw new UnsupportedOperationException();
+        
+    }
+
+    /**
+     * <p class="changed_added_2_0">Set the {@link ResourceHandler} instance that will be utilized
+     * for rendering the markup for resources, and for satisfying client
+     * requests to serve up resources.</p>
+     * <div class="changed_added_2_0">
+     *
+     * @param resourceHandler The new <code>ResourceHandler</code> instance
+     *
+     * @throws IllegalStateException if this method is called after
+     * at least one request has been processed by the
+     * <code>Lifecycle</code> instance for this application.
+     * @throws NullPointerException if <code>resourceHandler</code>
+     *  is <code>null</code>
+     * </div>
+     * @since 2.0
+     */
+    public void setResourceHandler(ResourceHandler resourceHandler) {
+
+        if (defaultApplication != null) {
+            defaultApplication.setResourceHandler(resourceHandler);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+    
+
+    /**
+     * <p>Return a {@link PropertyResolver} instance that wraps the
+     * {@link ELResolver} instance that Faces provides to the unified EL
+     * for the resolution of expressions that appear programmatically in
+     * an application.</p>
+     *
+     * <p>Note that this no longer returns the default
+     * <code>PropertyResolver</code> since that class is now a no-op
+     * that aids in allowing custom <code>PropertyResolver</code>s to
+     * affect the EL resolution process.</p>
+     *
+     * @deprecated This has been replaced by {@link #getELResolver}.  
+     */
+    public abstract PropertyResolver getPropertyResolver();
+
+
+    /**
+     * <p>Set the {@link PropertyResolver} instance that will be utilized
+     * to resolve method and value bindings.</p>
+     *
+     * <p>This method is now deprecated but the implementation must
+     * cause the argument to be set as the head of the legacy
+     * <code>PropertyResolver</code> chain, replacing any existing value
+     * that was set from the application configuration resources.</p>
+     *
+     *  <p>It is illegal to call this method after
+     * the application has received any requests from the client.  If an
+     * attempt is made to register a listener after that time it must have
+     * no effect. </p>
+     *
+     * @param resolver The new {@link PropertyResolver} instance
+     *
+     * @throws NullPointerException if <code>resolver</code>
+     *  is <code>null</code>
+     *
+     * @deprecated The recommended way to affect the execution of the EL
+     * is to provide an <code><el-resolver></code> element at the
+     * right place in the application configuration resources which will
+     * be considered in the normal course of expression evaluation.
+     * This method now will cause the argument <code>resolver</code> to
+     * be wrapped inside an implementation of {@link ELResolver} and
+     * exposed to the EL resolution system as if the user had called
+     * {@link #addELResolver}.
+     *
+     * @throws IllegalStateException if called after the first
+     * request to the {@link javax.faces.webapp.FacesServlet} has been
+     * serviced.
+     */
+    public abstract void setPropertyResolver(PropertyResolver resolver);
+    
+    /**
+     * <p>Find a <code>ResourceBundle</code> as defined in the
+     * application configuration resources under the specified name.  If
+     * a <code>ResourceBundle</code> was defined for the name, return an
+     * instance that uses the locale of the current {@link
+     * javax.faces.component.UIViewRoot}.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @throws FacesException if a bundle was defined, but not resolvable
+     *
+     * @throws NullPointerException if ctx == null || name == null
+     *
+     * @since 1.2
+     */
+    
+    public ResourceBundle getResourceBundle(FacesContext ctx, String name) {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getResourceBundle(ctx, name);
+        }
+        
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the project stage
+     * for the currently running application instance.  The default
+     * value is {@link ProjectStage#Production}</p> 
+
+     * <div class="changed_added_2_0"> <p>The implementation of this
+     * method must perform the following algorithm or an equivalent with
+     * the same end result to determine the value to return.</p> <ul>
+     *
+     * <p>If the value has already been determined by a previous call to
+     * this method, simply return that value.</p>
+
+     * <p>Look for a <code>JNDI</code> environment entry under the key
+     * given by the value of {@link
+     * ProjectStage#PROJECT_STAGE_JNDI_NAME} (return type of
+     * <code>java.lang.String</code>).  If found, continue with the
+     * algorithm below, otherwise, look for an entry in the
+     * <code>initParamMap</code> of the <code>ExternalContext</code>
+     * from the current <code>FacesContext</code> with the key given by
+     * the value of {@link ProjectStage#PROJECT_STAGE_PARAM_NAME}
+
+     * </p>
+     *
+     * <p>If a value is found, see if an enum constant can be
+     * obtained by calling <code>ProjectStage.valueOf()</code>, passing
+     * the value from the <code>initParamMap</code>.  If this succeeds
+     * without exception, save the value and return it.</p>
+     *
+     * <p>If not found, or any of the previous attempts to discover the
+     * enum constant value have failed, log a descriptive error message,
+     * assign the value as <code>ProjectStage.Production</code> and
+     * return it.</p>
+     *
+     * </ul>
+
+     * <p class="changed_added_2_0">A default implementation is provided
+     * that throws <code>UnsupportedOperationException</code> so that
+     * users that decorate <code>Application</code> can continue to
+     * function</p>.
+
+     * </div>
+     *
+     * @since 2.0
+     */
+    public ProjectStage getProjectStage() {
+        
+        if (defaultApplication != null) {
+            return defaultApplication.getProjectStage();
+        }
+        
+        return ProjectStage.Production;
+    }
+
+
+    /**
+     * <p>Return the {@link VariableResolver} that wraps the {@link
+     * ELResolver} instance that Faces provides to the unified EL for
+     * the resolution of expressions that appear programmatically in an
+     * application.  The implementation of the
+     * <code>VariableResolver</code>must pass <code>null</code> as the
+     * base argument for any methods invoked on the underlying
+     * <code>ELResolver</code>.</p>
+     *
+     * <p>Note that this method no longer returns the default
+     * <code>VariableResolver</code>, since that class now is a no-op
+     * that aids in allowing custom <code>VariableResolver</code>s to
+     * affect the EL resolution process.</p>
+     *
+     * @deprecated This has been replaced by {@link #getELResolver}.  
+     */
+    public abstract VariableResolver getVariableResolver();
+
+
+    /**
+     * <p>Set the {@link VariableResolver} instance that will be consulted
+     * to resolve method and value bindings.</p>
+     *
+     * <p>This method is now deprecated but the implementation must
+     * cause the argument to be set as the head of the legacy
+     * <code>VariableResolver</code> chain, replacing any existing value
+     * that was set from the application configuration resources.</p>
+     *
+     *  <p>It is illegal to call this method after
+     * the application has received any requests from the client.  If an
+     * attempt is made to register a listener after that time it must have 
+     * no effect.</p>
+     *
+     * @param resolver The new {@link VariableResolver} instance
+     *
+     * @throws NullPointerException if <code>resolver</code>
+     *  is <code>null</code>
+     *
+     * @deprecated The recommended way to affect the execution of the EL
+     * is to provide an <code><el-resolver></code> element at the
+     *
+     * right place in the application configuration resources which will
+     * be considered in the normal course of expression evaluation.
+     * This method now will cause the argument <code>resolver</code> to
+     * be wrapped inside an implementation of {@link ELResolver} and
+     * exposed to the EL resolution system as if the user had called
+     * {@link #addELResolver}.
+     *
+     * @throws IllegalStateException if called after the first
+     * request to the {@link javax.faces.webapp.FacesServlet} has been
+     * serviced.
+     */
+    public abstract void setVariableResolver(VariableResolver resolver);
+
+    /**
+     * <p><span class="changed_modified_2_0_rev_a">Cause</span> an the
+     * argument <code>resolver</code> to be added to the resolver chain
+     * as specified in section JSF.5.5.1 of the JavaServer Faces
+     * Specification.</p>
+     *
+     * <p>It is not possible to remove an <code>ELResolver</code>
+     * registered with this method, once it has been registered.</p>
+     *
+     *  <p>It is illegal to register an <code>ELResolver</code> after
+     * the application has received any requests from the client.  If an
+     * attempt is made to register a listener after that time, an
+     * <code>IllegalStateException</code> must be thrown. This restriction is
+     * in place to allow the JSP container to optimize for the common
+     * case where no additional <code>ELResolver</code>s are in the
+     * chain, aside from the standard ones. It is permissible to add
+     * <code>ELResolver</code>s before or after initialization to a
+     * <code>CompositeELResolver</code> that is already in the
+     * chain.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * {@link Application}.</p>
+
+     * @throws IllegalStateException <span
+     * class="changed_modified_2_0_rev_a">if called after the first
+     * request to the {@link javax.faces.webapp.FacesServlet} has been
+     * serviced.</span>
+
+     * @since 1.2
+     */
+
+    public void addELResolver(ELResolver resolver) {
+
+        if (defaultApplication != null) {
+            defaultApplication.addELResolver(resolver);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    /**
+     * <p>Return the singleton {@link ELResolver} instance to be used
+     * for all EL resolution.  This is actually an instance of {@link
+     * javax.el.CompositeELResolver} that must contain the following
+     * <code>ELResolver</code> instances in the following order:</p>
+     *
+     * 	<ol>
+     *
+     *	  <li><p><code>ELResolver</code> instances declared using the
+     *	  <el-resolver> element in the application configuration
+     *	  resources.  </p></li>
+     *
+     *	  <li><p>An <code>implementation</code> that wraps the head of
+     *	  the legacy <code>VariableResolver</code> chain, as per section
+     *	  <i>VariableResolver ChainWrapper</i> in Chapter JSF.5 in the spec
+     *	  document.</p></li>
+     *
+     *	  <li><p>An <code>implementation</code> that wraps the head of
+     *	  the legacy <code>PropertyResolver</code> chain, as per section
+     *	  <i>PropertyResolver ChainWrapper</i> in Chapter JSF.5 in the spec
+     *	  document.</p></li>
+     *
+     *	  <li><p>Any <code>ELResolver</code> instances added by calls to
+     *	  {@link #addELResolver}.</p></li>
+     *
+     *	</ol>
+     *
+     * <p>The default implementation throws <code>UnsupportedOperationException</code>
+     * and is provided for the sole purpose of not breaking existing applications 
+     * that extend {@link Application}.</p>
+     *
+     * @since 1.2
+     */
+
+    public ELResolver getELResolver() {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getELResolver();
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     * <p class="changed_added_2_2">Return the thread-safe singleton 
+     * {@link FlowHandler} for this application.  For implementations declaring 
+     * compliance with version 2.2 of the specification, this method must never return 
+     * {@code null}, even if the application has no flows.  This is necessary to enable
+     * dynamic flow creation during the application's lifetime.</p>
+     *
+     * <div class="changed_added_2_2">
+     *
+     * <p>All implementations that declare compliance with version 2.2
+     * of the specification must implement this method.  For the purpose
+     * of backward compatibility with environments that extend {@code
+     * Application} but do not override this method, an implementation is 
+     * provided that returns {@code null}.  Due to the decoratable nature
+     * of {@code Application}, code calling this method should always check
+     * for a {@code null} return.</p>
+
+     * </div>
+
+     * @since 2.2
+     *
+     */ 
+
+    public FlowHandler getFlowHandler() {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getFlowHandler();
+        }
+        return null;
+
+    }
+
+    /**
+     * <p class="changed_added_2_2">Set the {@link FlowHandler} instance used by
+     * the {@link NavigationHandler} to satisfy the requirements of the faces
+     * flows feature.</p>
+
+     * @since 2.2
+     * 
+     * @throws NullPounterException if {code newHandler} is {@code null}
+     * 
+     * @throws IllegalStateException if this method is called after at least one 
+     * request has been processed by the {@code Lifecycle} instance for this application. 
+     *
+     */ 
+
+    public void setFlowHandler(FlowHandler newHandler) {
+
+        if (defaultApplication != null) {
+            defaultApplication.setFlowHandler(newHandler);
+        }
+
+    }
+
+
+    /**
+     * <p>Return the {@link ViewHandler} instance that will be utilized
+     * during the <em>Restore View</em> and <em>Render Response</em>
+     * phases of the request processing lifecycle.  If not explicitly set,
+     * a default implementation must be provided that performs the functions
+     * described in the {@link ViewHandler} description in the
+     * JavaServer Faces Specification.</p>
+     */
+    public abstract ViewHandler getViewHandler();
+
+
+    /**
+     * <p>Set the {@link ViewHandler} instance that will be utilized
+     * during the <em>Restore View</em> and <em>Render Response</em>
+     * phases of the request processing lifecycle.</p>
+     *
+     * @param handler The new {@link ViewHandler} instance
+     *
+     * @throws IllegalStateException if this method is called after
+     * at least one request has been processed by the
+     * <code>Lifecycle</code> instance for this application.
+     * @throws NullPointerException if <code>handler</code>
+     *  is <code>null</code>
+     */
+    public abstract void setViewHandler(ViewHandler handler);
+
+
+
+    /**
+     * <p>Return the {@link StateManager} instance that will be utilized
+     * during the <em>Restore View</em> and <em>Render Response</em>
+     * phases of the request processing lifecycle.  If not explicitly set,
+     * a default implementation must be provided that performs the functions
+     * described in the {@link StateManager} description
+     * in the JavaServer Faces Specification.</p>
+     */
+    public abstract StateManager getStateManager();
+
+
+    /**
+     * <p>Set the {@link StateManager} instance that will be utilized
+     * during the <em>Restore View</em> and <em>Render Response</em>
+     * phases of the request processing lifecycle.</p>
+     *
+     * @param manager The new {@link StateManager} instance
+     *
+     * @throws IllegalStateException if this method is called after
+     * at least one request has been processed by the
+     * <code>Lifecycle</code> instance for this application.
+     * @throws NullPointerException if <code>manager</code>
+     *  is <code>null</code>
+     */
+    public abstract void setStateManager(StateManager manager);
+
+
+    // ------------------------------------------------------- Object Factories
+
+    /**
+     * <p><span class="changed_added_2_0">Register</span> a new mapping 
+     * of behavior id to the name of the corresponding
+     * {@link Behavior} class.  This allows subsequent calls
+     * to <code>createBehavior()</code> to serve as a factory for
+     * {@link Behavior} instances.</p>
+     *                                 
+     * @param behaviorId The behavior id to be registered
+     * @param behaviorClass The fully qualified class name of the
+     *  corresponding {@link Behavior} implementation
+     *                                                
+     * @throws NullPointerException if <code>behaviorId</code>
+     *  or <code>behaviorClass</code> is <code>null</code>
+     *  
+     * @since 2.0
+     */
+    public void addBehavior(String behaviorId, 
+        String behaviorClass) {
+
+        if (defaultApplication != null) {
+            defaultApplication.addBehavior(behaviorId, behaviorClass);
+        }
+
+    }
+    
+    /**
+     * <p><span class="changed_added_2_0">Instantiate</span> and
+     * return a new {@link Behavior} instance of the class specified by
+     * a previous call to <code>addBehavior()</code> for the specified
+     * behavior id.</p> 
+     *
+     * @param behaviorId The behavior id for which to create and
+     *  return a new {@link Behavior} instance
+     * 
+     * @throws FacesException if the {@link Behavior} cannot be
+     *  created
+     * @throws NullPointerException if <code>behaviorId</code>
+     *  is <code>null</code> 
+     */
+    public Behavior createBehavior(String behaviorId)
+    	throws FacesException {
+
+        if (defaultApplication != null) {
+            return defaultApplication.createBehavior(behaviorId);
+        }
+        return null;
+
+    }
+
+    /**
+     * <p>Return an <code>Iterator</code> over the set of currently registered
+     * behavior ids for this <code>Application</code>.</p>
+     */
+    public Iterator<String> getBehaviorIds() {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getBehaviorIds();
+        }
+        return Collections.EMPTY_LIST.iterator();
+        
+    }
+
+    /**
+     * <p>Register a new mapping of component type to the name of the
+     * corresponding {@link UIComponent} class.  This allows subsequent calls
+     * to <code>createComponent()</code> to serve as a factory for
+     * {@link UIComponent} instances.</p>
+     *
+     * @param componentType The component type to be registered
+     * @param componentClass The fully qualified class name of the
+     *  corresponding {@link UIComponent} implementation
+     *
+     * @throws NullPointerException if <code>componentType</code> or
+     *  <code>componentClass</code> is <code>null</code>
+     */
+    public abstract void addComponent(String componentType,
+                                      String componentClass);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Instantiate</span> and
+     * return a new {@link UIComponent} instance of the class specified
+     * by a previous call to <code>addComponent()</code> for the
+     * specified component type.</p>
+     *
+     * <p class="changed_added_2_0">Before the component instance is
+     * returned, it must be inspected for the presence of a {@link
+     * javax.faces.event.ListenerFor} (or {@link
+     * javax.faces.event.ListenersFor}) or {@link ResourceDependency}
+     * (or {@link ResourceDependencies}) annotation.  If any of these
+     * annotations are present, the action listed in {@link
+     * javax.faces.event.ListenerFor} or {@link ResourceDependency} must
+     * be taken on the component, before it is returned from this
+     * method.  This variant of <code>createComponent</code> must
+     * <strong>not</strong> inspect the {@link
+     * javax.faces.render.Renderer} for the component to be returned for
+     * any of the afore mentioned annotations.  Such inspection is the
+     * province of {@link #createComponent(ValueExpression,
+     * FacesContext, String, String)} or {@link
+     * #createComponent(FacesContext, String, String)}.</p>
+
+     * @param componentType The component type for which to create and
+     * return a new {@link UIComponent} instance
+     *
+     * @throws FacesException if a {@link UIComponent} of the
+     *  specified type cannot be created
+     * @throws NullPointerException if <code>componentType</code>
+     *  is <code>null</code>
+     */ 
+    public abstract UIComponent createComponent(String componentType)
+        throws FacesException;
+
+
+
+    
+
+    /**
+     * <p>Wrap the argument <code>componentBinding</code> in an
+     * implementation of {@link ValueExpression} and call through to
+     * {@link
+     * #createComponent(javax.el.ValueExpression,javax.faces.context.FacesContext,java.lang.String)}.</p>
+     *
+     * @param componentBinding {@link ValueBinding} representing a
+     * component value binding expression (typically specified by the
+     * <code>component</code> attribute of a custom tag)
+     * @param context {@link FacesContext} for the current request
+     * @param componentType Component type to create if the {@link ValueBinding}
+     *  does not return a component instance
+     *
+     * @throws FacesException if a {@link UIComponent} cannot be created
+     * @throws NullPointerException if any parameter is <code>null</code>
+     *
+     *
+     * @deprecated This has been replaced by {@link
+     * #createComponent(javax.el.ValueExpression,javax.faces.context.FacesContext,java.lang.String)}.
+     */
+    public abstract UIComponent createComponent(ValueBinding componentBinding,
+                                                FacesContext context,
+                                                String componentType)
+	throws FacesException;
+
+    /**
+     * <p><span class="changed_modified_2_0">Call</span> the
+     * <code>getValue()</code> method on the specified {@link
+     * ValueExpression}.  If it returns a {@link UIComponent} instance,
+     * return it as the value of this method.  If it does not,
+     * instantiate a new {@link UIComponent} instance of the specified
+     * component type, pass the new component to the
+     * <code>setValue()</code> method of the specified {@link
+     * ValueExpression}, and return it.</p>
+     *
+     * <p class="changed_added_2_0">Before the component instance is
+     * returned, it must be inspected for the presence of a {@link
+     * javax.faces.event.ListenerFor} (or {@link
+     * javax.faces.event.ListenersFor}) or {@link ResourceDependency}
+     * (or {@link ResourceDependencies}) annotation.  If any of these
+     * annotations are present, the action listed in {@link
+     * javax.faces.event.ListenerFor} or {@link ResourceDependency} must
+     * be taken on the component, before it is returned from this
+     * method.  This variant of <code>createComponent</code> must
+     * <strong>not</strong> inspect the {@link
+     * javax.faces.render.Renderer} for the component to be returned for
+     * any of the afore mentioned annotations.  Such inspection is the
+     * province of {@link #createComponent(ValueExpression,
+     * FacesContext, String, String)} or {@link
+     * #createComponent(FacesContext, String, String)}.</p>
+     *
+     * @param componentExpression {@link ValueExpression} representing a
+     * component value expression (typically specified by the
+     * <code>component</code> attribute of a custom tag)
+     * @param context {@link FacesContext} for the current request
+     * @param componentType Component type to create if the {@link
+     * ValueExpression} does not return a component instance
+     * 
+     * @throws FacesException if a {@link UIComponent} cannot be created
+     * @throws NullPointerException if any parameter is <code>null</code>
+     *
+     * <p>A default implementation is provided that throws 
+     * <code>UnsupportedOperationException</code> so that users
+     * that decorate <code>Application</code> can continue to function.</p>
+     * 
+     * @since 1.2
+     */
+    public UIComponent createComponent(ValueExpression componentExpression,
+                                       FacesContext context,
+                                       String componentType)
+    throws FacesException {
+
+        if (defaultApplication != null) {
+            return defaultApplication.createComponent(componentExpression,
+                                                      context,
+                                                      componentType);
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Like {@link
+     * #createComponent(ValueExpression, FacesContext, String)} except
+     * the <code>Renderer</code> for the component to be returned must
+     * be inspected for the annotations mentioned in {@link
+     * #createComponent(ValueExpression, FacesContext, String)} as
+     * specified in the documentation for that method.  The
+     * <code>Renderer</code> instance to inspect must be obtained by
+     * calling {@link FacesContext#getRenderKit} and calling {@link
+     * javax.faces.render.RenderKit#getRenderer} on the result, passing
+     * the argument <code>componentType</code> as the first argument and
+     * the result of calling {@link UIComponent#getFamily} on the newly
+     * created component as the second argument.  If no such
+     * <code>Renderer</code> can be found, a message must be logged with
+     * a helpful error message.  Otherwise, {@link
+     * UIComponent#setRendererType} must be called on the newly created
+     * <code>UIComponent</code> instance, passing the argument
+     * <code>rendererType</code> as the argument.</p>
+
+     * <p class="changed_added_2_0">A default implementation is provided
+     * that throws <code>UnsupportedOperationException</code> so that
+     * users that decorate <code>Application</code> can continue to
+     * function.</p>
+
+     *
+     * @param componentExpression {@link ValueExpression} representing a
+     * component value expression (typically specified by the
+     * <code>component</code> attribute of a custom tag)
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @param componentType Component type to create if the {@link
+     * ValueExpression} does not return a component instance
+     *
+     * @param rendererType The renderer-type of the
+     * <code>Renderer</code> that will render this component.  A
+     * <code>null</code> value must be accepted for this parameter.
+     *
+     * @throws FacesException if a {@link UIComponent} cannot be created
+     * @throws NullPointerException if any of the parameters
+     * <code>componentExpression</code>, <code>context</code>, or
+     * <code>componentType</code> are <code>null</code>
+     *
+     * @since 2.0
+     */
+    public UIComponent createComponent(ValueExpression componentExpression,
+                                       FacesContext context,
+                                       String componentType,
+                                       String rendererType) {
+
+        if (defaultApplication != null) {
+            return defaultApplication.createComponent(componentExpression,
+                                                      context,
+                                                      componentType,
+                                                      rendererType);
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Like {@link
+     * #createComponent(String)} except the <code>Renderer</code> for
+     * the component to be returned must be inspected for the
+     * annotations mentioned in {@link #createComponent(ValueExpression,
+     * FacesContext, String)} as specified in the documentation for that
+     * method.  The <code>Renderer</code> instance to inspect must be
+     * obtained by calling {@link FacesContext#getRenderKit} and calling
+     * {@link javax.faces.render.RenderKit#getRenderer} on the result,
+     * passing the argument <code>componentType</code> as the first
+     * argument and the result of calling {@link UIComponent#getFamily}
+     * on the newly created component as the second argument.  If no
+     * such <code>Renderer</code> can be found, a message must be logged
+     * with a helpful error message.  Otherwise, {@link
+     * UIComponent#setRendererType} must be called on the newly created
+     * <code>UIComponent</code> instance, passing the argument
+     * <code>rendererType</code> as the argument.</p>
+
+     * <p class="changed_added_2_0">A default implementation is provided
+     * that throws <code>UnsupportedOperationException</code> so that
+     * users that decorate <code>Application</code> can continue to
+     * function</p>.
+
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @param componentType Component type to create
+     *
+     * @param rendererType The renderer-type of the
+     * <code>Renderer</code> that will render this component.  A
+     * <code>null</code> value must be accepted for this parameter.
+     *
+     * @throws FacesException if a {@link UIComponent} cannot be created
+     *
+     * @throws NullPointerException if any of the parameters
+     * <code>context</code>, or <code>componentType</code> are
+     * <code>null</code>
+     *
+     * @since 2.0
+     */
+    public UIComponent createComponent(FacesContext context,
+                                       String componentType,
+                                       String rendererType) {
+
+        if (defaultApplication != null) {
+            return defaultApplication.createComponent(context,
+                                               componentType,
+                                               rendererType);
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_0_rev_a">Instantiate</span> and return
+     * a new {@link UIComponent} instance from the argument {@link
+     * Resource}.  An algorithm semantically equivalent to the following
+     * must be followed to instantiate the <code>UIComponent</code> to
+     * return.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * 	<ul>
+
+	  <li><p>Obtain a reference to the {@link
+	  ViewDeclarationLanguage} for this <code>Application</code>
+	  instance by calling {@link ViewHandler#getViewDeclarationLanguage},
+     *    passing the <code>viewId</code> found by calling 
+     *    {@link javax.faces.component.UIViewRoot#getViewId} on the 
+     *    {@link javax.faces.component.UIViewRoot} in the argument 
+     *    {@link FacesContext}.</p></li>
+
+
+	  <li><p>Obtain a reference to the <em>composite component
+	  metadata</em> for this composite component by calling {@link
+	  ViewDeclarationLanguage#getComponentMetadata}, passing the
+	  <code>facesContext</code> and <code>componentResource</code>
+	  arguments to this method.  This version of JSF specification
+	  uses JavaBeans as the API to the component metadata.</p></li>
+
+	  <li><p>Determine if the component author declared a
+	  <code><span
+	  class="changed_modified_2_0_rev_a">componentType</span></code>
+	  for this component instance by obtaining the
+	  <code>BeanDescriptor</code> from the component metadata and
+	  calling its <code>getValue()</code> method, passing {@link
+	  UIComponent#COMPOSITE_COMPONENT_TYPE_KEY} as the argument.  If
+	  non-<code>null</code>, the result must be a
+	  <code>ValueExpression</code> whose value is the
+	  <code>component-type</code> of the <code>UIComponent</code> to
+	  be created for this <code>Resource</code> component.  Call
+	  through to {@link #createComponent(java.lang.String)} to
+	  create the component.</p></li>
+
+	  <li><p>Otherwise, determine if a script based component for
+	  this <code>Resource</code> can be found by calling {@link
+	  ViewDeclarationLanguage#getScriptComponentResource}.  If the
+	  result is non-<code>null</code>, and is a script written in
+	  one of the languages listed in JSF.4.3 of the specification prose
+	  document, create a <code>UIComponent</code> instance from the
+	  script resource.</p></li>
+
+	  <li><p>Otherwise, let <em>library-name</em> be the return from
+	  calling {@link Resource#getLibraryName} on the argument
+	  <code>componentResource</code> and <em>resource-name</em> be
+	  the return from calling {@link Resource#getResourceName} on
+	  the argument <code>componentResource</code>.  Create a fully
+	  qualified Java class name by removing any file extension from
+	  <em>resource-name</em> and let <em>fqcn</em> be
+	  <code><em>library-name</em> + "." +
+	  <em>resource-name</em></code>. If a class with the name of
+	  <em>fqcn</em> cannot be found, take no action and continue to
+	  the next step.  If any of <code>InstantiationException</code>,
+	  <code>IllegalAccessException</code>, or
+	  <code>ClassCastException</code> are thrown, wrap the exception
+	  in a <code>FacesException</code> and re-throw it.  If any
+	  other exception is thrown, log the exception and
+	  continue to the next step.</p></li>
+
+	  <li><p>If none of the previous steps have yielded a
+	  <code>UIComponent</code> instance, call {@link
+	  #createComponent(java.lang.String)} passing
+	  "<code>javax.faces.NamingContainer</code>" as the
+	  argument.</p></li>
+
+	  <li><p>Call {@link UIComponent#setRendererType} on the
+	  <code>UIComponent</code> instance, passing
+	  "<code>javax.faces.Composite</code>" as the argument.</p></li>
+
+	  <li>
+
+          <p>Store the argument <code>Resource</code> in the
+	  attributes <code>Map</code> of the <code>UIComponent</code>
+	  under the key, {@link Resource#COMPONENT_RESOURCE_KEY}.
+	  </p>
+
+          </li>
+
+	  <li>
+
+          <p>Store <em>composite component metadata</em> in the
+	  attributes <code>Map</code> of the <code>UIComponent</code>
+	  under the key, {@link UIComponent#BEANINFO_KEY}.
+	  </p>
+
+          </li>
+
+	</ul>
+
+     * <p>Before the component instance is returned, it must be
+     * inspected for the presence of a {@link
+     * javax.faces.event.ListenerFor} annotation.  If this annotation is
+     * present, the action listed in {@link
+     * javax.faces.event.ListenerFor} must be taken on the component,
+     * before it is returned from this method.</p>
+
+     * <p>A default implementation is provided that throws
+     * <code>UnsupportedOperationException</code> so that users
+     * that decorate <code>Application</code> can continue to function.</p>
+     *
+     * </div>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param componentResource A {@link Resource} that points to a
+     * source file that provides an implementation of a component.
+     *
+     * @throws FacesException if a {@link UIComponent} from the {@link
+     * Resource} cannot be created
+
+     * @throws <code>NullPointerException</code> if any parameter is
+     * <code>null</code>
+     * 
+     * @throws NullPointerException if unable, for any reason, to obtain a 
+     * <code>ViewDeclarationLanguage</code> instance as described above.
+     *
+     * @since 2.0
+     */
+    public UIComponent createComponent(FacesContext context,
+                                       Resource componentResource) {
+
+        if (defaultApplication != null) {
+            return defaultApplication.createComponent(context,
+                                                      componentResource);
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+    
+    /**
+     * <p>Return an <code>Iterator</code> over the set of currently defined
+     * component types for this <code>Application</code>.</p>
+     */
+    public abstract Iterator<String> getComponentTypes();
+
+    /**
+     * <p>Register a new mapping of converter id to the name of the
+     * corresponding {@link Converter} class.  This allows subsequent calls
+     * to <code>createConverter()</code> to serve as a factory for
+     * {@link Converter} instances.</p>
+     *
+     * @param converterId The converter id to be registered
+     * @param converterClass The fully qualified class name of the
+     *  corresponding {@link Converter} implementation
+     *
+     * @throws NullPointerException if <code>converterId</code>
+     *  or <code>converterClass</code> is <code>null</code>
+     */
+    public abstract void addConverter(String converterId, 
+				      String converterClass);
+
+
+    /**
+     * <p>Register a new converter class that is capable of performing
+     * conversions for the specified target class.</p>
+     *
+     * @param targetClass The class for which this converter is registered
+     * @param converterClass The fully qualified class name of the
+     *  corresponding {@link Converter} implementation
+     *
+     * @throws NullPointerException if <code>targetClass</code>
+     *  or <code>converterClass</code> is <code>null</code>
+     */
+    public abstract void addConverter(Class<?> targetClass,
+                                      String converterClass);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Instantiate</span> and
+     * return a new {@link Converter} instance of the class specified by
+     * a previous call to <code>addConverter()</code> for the specified
+     * converter id.</p>
+     *
+     * <p class="changed_added_2_0">If the <code>toLowerCase()</code> of
+     * the <code>String</code> represenation of the value of the
+     * "<code>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</code>"
+     * application configuration parameter is "<code>true</code>"
+     * (without the quotes) and the <code>Converter</code> instance to
+     * be returned is an instance of {@link
+     * javax.faces.convert.DateTimeConverter}, {@link
+     * javax.faces.convert.DateTimeConverter#setTimeZone} must be
+     * called, passing the return from
+     * <code>TimeZone.getDefault()</code>.</p>
+
+     * <p class="changed_added_2_0">The argument
+     * <code>converter</code> must be inspected for the presence of the
+     * {@link javax.faces.application.ResourceDependency} annotation.
+     * If the <code>ResourceDependency</code> annotation is present,
+     * the action described in <code>ResourceDependency</code> must
+     * be taken.  If the <code>ResourceDependency</code> annotation is
+     * not present, the argument <code>converter</code> must be inspected 
+     * for the presence of the {@link 
+     * javax.faces.application.ResourceDependencies} annotation.
+     * If the <code>ResourceDependencies</code> annotation
+     * is present, the action described in <code>ResourceDependencies</code>
+     * must be taken.</p>
+     *
+     * @param converterId The converter id for which to create and
+     *  return a new {@link Converter} instance
+     *
+     * @throws FacesException if the {@link Converter} cannot be
+     *  created
+     * @throws NullPointerException if <code>converterId</code>
+     *  is <code>null</code>
+     */ 
+    public abstract Converter createConverter(String converterId);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Instantiate</span> and return
+     * a new {@link Converter} instance of the class that has registered
+     * itself as capable of performing conversions for objects of the
+     * specified type.  If no such {@link Converter} class can be
+     * identified, return <code>null</code>.</p>
+     *
+     * <p>To locate an appropriate {@link Converter} class, the following
+     * algorithm is performed, stopping as soon as an appropriate {@link
+     * Converter} class is found:</p>
+     * <ul>
+     * <li>Locate a {@link Converter} registered for the target class itself.
+     *     </li>
+     * <li>Locate a {@link Converter} registered for interfaces that are
+     *     implemented by the target class (directly or indirectly).</li>
+     * <li>Locate a {@link Converter} registered for the superclass (if any)
+     *     of the target class, recursively working up the inheritance
+     *     hierarchy.</li>
+     * </ul>
+     *
+     * <p>If the <code>Converter</code> has a single argument constructor that
+     * accepts a <code>Class</code>, instantiate the <code>Converter</code>
+     * using that constructor, passing the argument <code>targetClass</code> as
+     * the sole argument.  Otherwise, simply use the zero-argument constructor.
+     * </p>
+     *
+     * <p class="changed_added_2_0">If the <code>toLowerCase()</code> of
+     * the <code>String</code> represenation of the value of the
+     * "<code>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</code>"
+     * application configuration parameter is "<code>true</code>"
+     * (without the quotes) and the <code>Converter</code> instance to
+     * be returned is an instance of {@link
+     * javax.faces.convert.DateTimeConverter}, {@link
+     * javax.faces.convert.DateTimeConverter#setTimeZone} must be
+     * called, passing the return from
+     * <code>TimeZone.getDefault()</code>.</p>
+     *
+     * @param targetClass Target class for which to return a {@link Converter}
+     *
+     * @throws FacesException if the {@link Converter} cannot be
+     *  created
+     * @throws NullPointerException if <code>targetClass</code>
+     *  is <code>null</code>
+     */
+    public abstract Converter createConverter(Class<?> targetClass);
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the set of currently registered
+     * converter ids for this <code>Application</code>.</p>
+     */
+    public abstract Iterator<String> getConverterIds();
+
+    
+    /**
+     * <p>Return an <code>Iterator</code> over the set of <code>Class</code>
+     * instances for which {@link Converter} classes have been explicitly
+     * registered.</p>
+     */
+    public abstract Iterator<Class<?>> getConverterTypes();
+
+    
+    /**
+     * <p class="changed_added_2_0">Register a validator by its id that
+     * is applied to all <code>UIInput</code> components in a view.  The
+     * validator to most often serve this role is the
+     * <code>BeanValidator</code>.  The usage contract for this method
+     * assumes that the validator has been registered using the normal
+     * “by-id” registration mechanism.</p>
+     *
+     * <p>An implementation is provided that takes no action
+     * so that users that decorate
+     * the <code>Application</code> continue to work.
+     *
+     * @since 2.0
+     */
+    public void addDefaultValidatorId(String validatorId) {
+
+        if (defaultApplication != null) {
+            defaultApplication.addDefaultValidatorId(validatorId);
+        } 
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return an immutable <code>Map</code> over 
+     * the set of currently registered default validator IDs and their class
+     * name for this <code>Application</code>.</p>
+     *
+     * <p>An implementation is provided that returns <code>Collections.emptyMap</code>
+     * so that users that decorate
+     * the <code>Application</code> continue to work.
+     *
+     * @since 2.0
+     */
+    public Map<String,String> getDefaultValidatorInfo() {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getDefaultValidatorInfo();
+        }
+        return Collections.emptyMap();
+
+    }
+
+
+    /**
+     * <p>Return the {@link ExpressionFactory} instance for this
+     * application.  This instance is used by the convenience method
+     * {@link #evaluateExpressionGet}.</p>
+     *
+     * <p>The implementation must return the
+     * <code>ExpressionFactory</code> from the JSP container by calling
+     * <code>JspFactory.getDefaultFactory().getJspApplicationContext(servletContext).getExpressionFactory()</code>. </p>
+     *
+     * <p>An implementation is provided that throws 
+     * <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     *
+     * @since 1.2
+     */
+
+    public ExpressionFactory getExpressionFactory() {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getExpressionFactory();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     * <p>Get a value by evaluating an expression.</p>
+     *
+     * <p>Call {@link #getExpressionFactory} then call {@link
+     * ExpressionFactory#createValueExpression} passing the argument
+     * <code>expression</code> and <code>expectedType</code>.  Call
+     * {@link FacesContext#getELContext} and pass it to {@link
+     * ValueExpression#getValue}, returning the result.</p>
+     *
+     * <p>An implementation is provided that throws 
+     * <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     *
+     */
+
+    public <T> T evaluateExpressionGet(FacesContext context,
+                                       String expression,
+                                       Class<? extends T> expectedType) throws ELException {
+
+        if (defaultApplication != null) {
+            return defaultApplication.evaluateExpressionGet(context,
+                                                            expression,
+                                                            expectedType);
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     * <p>Call {@link #getExpressionFactory} then call {@link
+     * ExpressionFactory#createMethodExpression}, passing the given
+     * arguments, and wrap the result in a <code>MethodBinding</code>
+     * implementation, returning it.</p>
+     *
+     * @param ref Method binding expression for which to return a
+     *  {@link MethodBinding} instance
+     * @param params Parameter signatures that must be compatible with those
+     *  of the method to be invoked, or a zero-length array or <code>null</code>
+     *  for a method that takes no parameters
+     *
+     * @throws NullPointerException if <code>ref</code>
+     *  is <code>null</code>
+     * @throws ReferenceSyntaxException if the specified <code>ref</code>
+     *  has invalid syntax
+     *
+     * @deprecated This has been replaced by calling {@link
+     * #getExpressionFactory} then {@link
+     * ExpressionFactory#createMethodExpression}.
+     */
+    public abstract MethodBinding createMethodBinding(String ref,
+                                                      Class<?> params[])
+        throws ReferenceSyntaxException;
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the supported
+     * <code>Locale</code>s for this appication.</p>
+     */ 
+    public abstract Iterator<Locale> getSupportedLocales();
+
+
+    /**
+     * <p>Set the <code>Locale</code> instances representing the supported
+     * <code>Locale</code>s for this application.</p>
+     *
+     * @param locales The set of supported <code>Locale</code>s
+     *  for this application
+     *
+     * @throws NullPointerException if the argument
+     * <code>newLocales</code> is <code>null</code>.
+     *
+     */ 
+    public abstract void setSupportedLocales(Collection<Locale> locales);
+
+    /**
+     * <p>Provide a way for Faces applications to register an
+     * <code>ELContextListener</code> that will be notified on creation
+     * of <code>ELContext</code> instances.  This listener will be
+     * called once per request.</p>
+     * 
+     * <p>An implementation is provided that throws 
+     * <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     *
+     * @since 1.2
+     */
+
+    public void addELContextListener(ELContextListener listener) {
+
+        if (defaultApplication != null) {
+            defaultApplication.addELContextListener(listener);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    /**
+     * <p>Remove the argument <code>listener</code> from the list of
+     * {@link ELContextListener}s.  If <code>listener</code> is null, no
+     * exception is thrown and no action is performed.  If
+     * <code>listener</code> is not in the list, no exception is thrown
+     * and no action is performed.</p>
+     *
+     * <p>An implementation is provided that throws 
+     * <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     * 
+     * @since 1.2
+     */
+
+    public void removeELContextListener(ELContextListener listener) {
+
+        if (defaultApplication != null) {
+            defaultApplication.removeELContextListener(listener);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    /**
+     * <p>If no calls have been made to {@link #addELContextListener},
+     * this method must return an empty array.</p>
+     *
+     * <p>Otherwise, return an array representing the list of listeners
+     * added by calls to {@link #addELContextListener}.</p>
+     *
+     * <p>An implementation is provided that throws 
+     * <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     *
+     * @since 1.2
+     */
+
+    public ELContextListener [] getELContextListeners() {
+
+        if (defaultApplication != null) {
+            return defaultApplication.getELContextListeners();
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p>Register a new mapping of validator id to the name of the
+     * corresponding {@link Validator} class.  This allows subsequent calls
+     * to <code>createValidator()</code> to serve as a factory for
+     * {@link Validator} instances.</p>
+     *
+     * @param validatorId The validator id to be registered
+     * @param validatorClass The fully qualified class name of the
+     *  corresponding {@link Validator} implementation
+     *
+     * @throws NullPointerException if <code>validatorId</code>
+     *  or <code>validatorClass</code> is <code>null</code>
+     */
+    public abstract void addValidator(String validatorId, 
+				      String validatorClass);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Instantiate</span> and
+     * return a new {@link Validator} instance of the class specified by
+     * a previous call to <code>addValidator()</code> for the specified
+     * validator id.</p>
+
+     * <p class="changed_added_2_0">The argument
+     * <code>validator</code> must be inspected for the presence of the
+     * {@link javax.faces.application.ResourceDependency} annotation.
+     * If the <code>ResourceDependency</code> annotation is present,
+     * the action described in <code>ResourceDependency</code> must
+     * be taken.  If the <code>ResourceDependency</code> annotation is
+     * not present, the argument <code>validator</code> must be inspected 
+     * for the presence of the {@link 
+     * javax.faces.application.ResourceDependencies} annotation.
+     * If the <code>ResourceDependencies</code> annotation
+     * is present, the action described in <code>ResourceDependencies</code>
+     * must be taken.</p>
+
+     * @param validatorId The validator id for which to create and
+     *  return a new {@link Validator} instance
+     *
+     * @throws FacesException if a {@link Validator} of the
+     *  specified id cannot be created
+     * @throws NullPointerException if <code>validatorId</code>
+     *  is <code>null</code>
+     */ 
+    public abstract Validator createValidator(String validatorId)
+        throws FacesException;
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the set of currently registered
+     * validator ids for this <code>Application</code>.</p>
+     */
+    public abstract Iterator<String> getValidatorIds();
+
+
+    /**
+     * <p>Call {@link #getExpressionFactory} then call {@link
+     * ExpressionFactory#createValueExpression}, passing the argument
+     * <code>ref</code>, <code>Object.class</code> for the expectedType,
+     * and <code>null</code>, for the fnMapper.</p>
+     *
+     *
+     * @param ref Value binding expression for which to return a
+     *  {@link ValueBinding} instance
+     *
+     * @throws NullPointerException if <code>ref</code>
+     *  is <code>null</code>
+     * @throws ReferenceSyntaxException if the specified <code>ref</code>
+     *  has invalid syntax
+     *
+     * @deprecated This has been replaced by calling {@link
+     * #getExpressionFactory} then {@link
+     * ExpressionFactory#createValueExpression}.
+     */
+    public abstract ValueBinding createValueBinding(String ref)
+        throws ReferenceSyntaxException;
+
+
+    /**
+     * <p class="changed_added_2_0">If {@link javax.faces.context.FacesContext#isProcessingEvents()} is
+     * <code>true</code> and there are one or more listeners
+     * for events of the type represented by
+     * <code>systemEventClass</code>, call those listeners, passing
+     * <code>source</code> as the source of the event.  The
+     * implementation should be as fast as possible in determining
+     * whether or not a listener for the given
+     * <code>systemEventClass</code> and <code>source</code> has been
+     * installed, and should return immediately once such a
+     * determination has been made.  The implementation of
+     * <code>publishEvent</code> must honor the requirements stated in
+     * {@link #subscribeToEvent} regarding the storage and retrieval of
+     * listener instances.  Specifically, if {@link
+     * #subscribeToEvent(Class,Class,SystemEventListener)} was called,
+     * the <code>sourceClass</code> argument must match exactly the
+     * <code>Class</code> of the <code>source</code> argument in the
+     * call to <code>publishEvent()</code>.  The implementation must not
+     * do any inheritance hierarachy inspection when looking for a match
+     * between the <code>sourceClass</code> passed to {@link
+     * #subscribeToEvent(Class,Class,SystemEventListener)} and the
+     * <code>sourceClass</code> passed to <code>publishEvent()</code> in
+     * order to find any listeners to which the event should be
+     * published.  In the case where the <code>Class</code> of the
+     * <code>source</code> argument does not match the
+     * <code>Class</code> of the <code>sourceClass</code> used when the
+     * listener was subscribed using <code>subscribeToEvent()</code>,
+     * {@link #publishEvent(FacesContext,Class,Class,Object)} can be used to
+     * provide the <code>Class</code> used to perform the listener lookup and
+     * match.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p>The default implementation must implement an algorithm
+     * semantically equivalent to the following to locate listener
+     * instances and to invoke them.</p>
+     *
+     * 	<ul>
+     *
+     * <li><p>If the <code>source</code> argument implements {@link
+     * javax.faces.event.SystemEventListenerHolder}, call {@link
+     * javax.faces.event.SystemEventListenerHolder#getListenersForEventClass}
+     * on it, passing the <code>systemEventClass</code> argument.  If
+     * the list is not empty, perform algorithm
+     * <em>traverseListenerList</em> on the list.</p></li>
+
+     * <li><p>If any <em>view</em> level listeners have been installed
+     * by previous calls to {@link #subscribeToEvent(Class, Class,
+     * javax.faces.event.SystemEventListener)} on the {@link
+     * javax.faces.component.UIViewRoot}, perform algorithm
+     * <em>traverseListenerList</em> on the list of listeners for that
+     * event installed on the <code>UIViewRoot</code>.</p></li>
+
+     * <li><p>If any <code>Application</code> level listeners have
+     * been installed by previous calls to {@link
+     * #subscribeToEvent(Class, Class,
+     *     javax.faces.event.SystemEventListener)}, perform algorithm
+     * <em>traverseListenerList</em> on the list.</p></li>
+     *
+     * <li><p>If any <code>Application</code> level listeners have
+     * been installed by previous calls to {@link
+     * #subscribeToEvent(Class, javax.faces.event.SystemEventListener)},
+     * perform algorithm <em>traverseListenerList</em> on the
+     * list.</p></li>
+     *
+     * </ul>
+     *
+     * <p>If the act of invoking the <code>processListener</code> method
+     * causes an {@link javax.faces.event.AbortProcessingException} to
+     * be thrown, processing of the listeners must be aborted, no
+     * further processing of the listeners for this event must take
+     * place, and the exception must be logged with
+     * <code>Level.SEVERE</code>.</p>
+     *
+     * <p>Algorithm <em>traverseListenerList</em>: For each listener in
+     * the list,</p>
+     *
+     * <ul>
+     *
+     * <li><p>Call {@link
+     * javax.faces.event.SystemEventListener#isListenerForSource}, passing the
+     * <code>source</code> argument.  If this returns
+     * <code>false</code>, take no action on the listener.</p></li>
+     *
+     * <li><p>Otherwise, if the event to be passed to the listener
+     * instances has not yet been constructed, construct the event,
+     * passing <code>source</code> as the argument to the
+     * one-argument constructor that takes an <code>Object</code>.
+     * This same event instance must be passed to all listener
+     * instances.</p></li>
+     *
+     * <li><p>Call {@link javax.faces.event.SystemEvent#isAppropriateListener},
+     * passing the listener instance as the argument.  If this
+     * returns <code>false</code>, take no action on the
+     * listener.</p></li>
+     *
+     * <li><p>Call {@link javax.faces.event.SystemEvent#processListener},
+     * passing the listener instance.  </p></li>
+     *
+     * </ul>
+
+     * <p class="changed_added_2_0">A default implementation is provided
+     * that throws <code>UnsupportedOperationException</code> so that
+     * users that decorate <code>Application</code> can continue to
+     * function</p>.
+
+     * </div>
+     *
+     * @param context the <code>FacesContext</code> for the current request
+     * @param systemEventClass The <code>Class</code> of event that is
+     * being published.
+     * @param source The source for the event of type
+     * <code>systemEventClass</code>.
+     *
+     * @throws NullPointerException if either <code>context</code>,
+     * <code>systemEventClass</code> or <code>source</code> is <code>null</code>
+     *
+     * @since 2.0
+     *
+     */
+    public void publishEvent(FacesContext context,
+                             Class<? extends SystemEvent> systemEventClass,
+                             Object source) {
+
+        if (defaultApplication != null) {
+            defaultApplication.publishEvent(context, systemEventClass, source);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">This method functions exactly like
+     * {@link #publishEvent(FacesContext,Class,Object)}, except the run-time
+     * must use the argument <code>sourceBaseType</code> to find the matching
+     * listener instead of using the <code>Class</code> of the
+     * <code>source</code> argument.</p>
+     *
+     * <p class="changed_added_2_0">A default implementation is provided
+     * that throws <code>UnsupportedOperationException</code> so that
+     * users that decorate <code>Application</code> can continue to
+     * function</p>.
+     *
+     * @param context the <code>FacesContext</code> for the current request
+     * @param systemEventClass The <code>Class</code> of event that is
+     * being published.
+     * @param sourceBaseType The <code>Class</code> of the source event
+     * that must be used to lookup the listener to which this event must
+     * be published.  If this argument is <code>null</code> the return
+     * from <code>source.getClass()</code> must be used as the
+     * <code>sourceBaseType</code>.
+     * @param source The source for the event of type
+     * <code>systemEventClass</code>.
+     *
+     * @throws NullPointerException if any arguments except for
+     * <code>sourceBaseType</code> are <code>null</code>
+     *
+     * @since 2.0
+     */
+
+
+    public void publishEvent(FacesContext context,
+                             Class<? extends SystemEvent> systemEventClass,
+                             Class<?> sourceBaseType,
+                             Object source) {
+
+        if (defaultApplication != null) {
+            defaultApplication.publishEvent(context,
+                                            systemEventClass,
+                                            sourceBaseType,
+                                            source);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Install</span> the listener instance
+     * referenced by argument <code>listener</code> into the application
+     * as a listener for events of type <code>systemEventClass</code>
+     * that originate from objects of type <code>sourceClass</code>.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p>If argument <code>sourceClass</code> is non-<code>null</code>,
+     * <code>sourceClass</code> and <code>systemEventClass</code> must be
+     * used to store the argument <code>listener</code> in the application in
+     * such a way that the <code>listener</code> can be quickly looked
+     * up by the implementation of {@link #publishEvent} given
+     * <code>systemEventClass</code> and an instance of the
+     * <code>Class</code> referenced by <code>sourceClass</code>.  If
+     * argument <code>sourceClass</code> is <code>null</code>, the
+     * <code>listener</code> must be discoverable by the implementation
+     * of {@link #publishEvent} given only <code>systemEventClass</code>.
+     * </p>
+     *
+     * </div>
+
+     * <div class="changed_added_2_2">
+
+     * <p>It is valid to call this method <strong>during</strong> the
+     * processing of an event which was subscribed to by a previous call
+     * to this method.</p>
+
+     * </div>
+
+     *
+     * @param systemEventClass the <code>Class</code> of event for which
+     * <code>listener</code> must be fired.
+     *
+     * @param sourceClass the <code>Class</code> of the instance which
+     * causes events of type <code>systemEventClass</code> to be fired.
+     * May be <code>null</code>.
+     *
+     * @param listener the implementation of {@link
+     * javax.faces.event.SystemEventListener} whose {@link
+     * javax.faces.event.SystemEventListener#processEvent} method must be called when
+     * events of type <code>systemEventClass</code> are fired.
+     *
+     * @throws <code>NullPointerException</code> if any combination of
+     * <code>systemEventClass</code>, or <code>listener</code> are
+     * <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
+                                 Class<?> sourceClass,
+                                 SystemEventListener listener) {
+
+        if (defaultApplication != null) {
+            defaultApplication.subscribeToEvent(systemEventClass,
+                                                sourceClass,
+                                                listener);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Install</span> the listener instance
+     * referenced by argument <code>listener</code> into application as
+     * a listener for events of type <code>systemEventClass</code>.  The
+     * default implementation simply calls through to {@link
+     * #subscribeToEvent(Class, Class,
+     * javax.faces.event.SystemEventListener)} passing <code>null</code>
+     * as the <code>sourceClass</code> argument</p>
+     *
+     * <p class="changed_added_2_0">A default implementation is provided
+     * that throws <code>UnsupportedOperationException</code> so that
+     * users that decorate <code>Application</code> can continue to
+     * function</p>.
+
+     * @param systemEventClass the <code>Class</code> of event for which
+     * <code>listener</code> must be fired.</p>
+
+     * @param listener the implementation of {@link
+     * javax.faces.event.SystemEventListener} whose {@link
+     * javax.faces.event.SystemEventListener#processEvent} method must
+     * be called when events of type <code>systemEventClass</code> are
+     * fired.
+
+     * <div class="changed_added_2_2">
+
+     * <p>See {@link
+     * #subscribeToEvent(java.lang.Class,java.lang.Class,javax.faces.event.SystemEventListener)}
+     * for an additional requirement regarding when it is valid to call
+     * this method.</p>
+
+     * </div>
+
+     * @throws <code>NullPointerException</code> if any combination of
+     * <code>systemEventClass</code>, or <code>listener</code> are
+     * <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
+                                 SystemEventListener listener) {
+
+        if (defaultApplication != null) {
+            defaultApplication.subscribeToEvent(systemEventClass, listener);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Remove</span> the listener instance
+     * referenced by argument <code>listener</code> from the application
+     * as a listener for events of type
+     * <code>systemEventClass</code> that originate from objects of type
+     * <code>sourceClass</code>.  See {@link
+     * #subscribeToEvent(Class, Class,
+     * javax.faces.event.SystemEventListener)} for the specification
+     * of how the listener is stored, and therefore, how it must be
+     * removed.</p>
+
+     * <div class="changed_added_2_2">
+
+     * <p>See {@link
+     * #subscribeToEvent(java.lang.Class,java.lang.Class,javax.faces.event.SystemEventListener)}
+     * for an additional requirement regarding when it is valid to call
+     * this method.</p>
+
+     * </div>
+
+     * @param systemEventClass the <code>Class</code> of event for which
+     * <code>listener</code> must be fired.
+     *
+     * @param sourceClass the <code>Class</code> of the instance which
+     * causes events of type <code>systemEventClass</code> to be fired.
+     * May be <code>null</code>.
+     *
+     * @param listener the implementation of {@link
+     * javax.faces.event.SystemEventListener} to remove from the internal data
+     * structure.
+     *
+     * @throws <code>NullPointerException</code> if any combination of
+     * <code>context</code>,
+     * <code>systemEventClass</code>, or <code>listener</code> are
+     * <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
+                                     Class<?> sourceClass,
+                                     SystemEventListener listener) {
+
+        if (defaultApplication != null) {
+            defaultApplication.unsubscribeFromEvent(systemEventClass,
+                                                    sourceClass,
+                                                    listener);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Remove</span> the listener instance
+     * referenced by argument <code>listener</code> from the application
+     * as a listener for events of type <code>systemEventClass</code>.  The
+     * default implementation simply calls through to {@link #unsubscribeFromEvent(Class, javax.faces.event.SystemEventListener)}
+     * passing <code>null</code> as the <code>sourceClass</code> argument</p>
+     *
+     * <div class="changed_added_2_2">
+
+     * <p>See {@link
+     * #subscribeToEvent(java.lang.Class,java.lang.Class,javax.faces.event.SystemEventListener)}
+     * for an additional requirement regarding when it is valid to call
+     * this method.</p>
+
+     * </div>
+
+     * @param systemEventClass the <code>Class</code> of event for which
+     * <code>listener</code> must be fired.
+     *
+     * @param listener the implementation of {@link
+     * javax.faces.event.SystemEventListener} to remove from the internal data
+     * structure.
+     *
+     * @throws <code>NullPointerException</code> if any combination of
+     * <code>context</code>, <code>systemEventClass</code>, or
+     * <code>listener</code> are
+     * <code>null</code>.                
+     *
+     * @since 2.0
+     */
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
+                                     SystemEventListener listener) {
+
+        if (defaultApplication != null) {
+            defaultApplication.unsubscribeFromEvent(systemEventClass, listener);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/application/ApplicationConfigurationPopulator.java b/javax/faces/application/ApplicationConfigurationPopulator.java
new file mode 100644
index 0000000..5832232
--- /dev/null
+++ b/javax/faces/application/ApplicationConfigurationPopulator.java
@@ -0,0 +1,97 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.application;
+
+import org.w3c.dom.Document;
+
+/**
+
+ * <p class="changed_added_2_2">This class defines a {@code java.util.ServiceLoader}
+ * service which enables programmatic configuration of the JSF runtime using the existing
+ * Application Configuration Resources schema. See the section "Application Startup
+ * Behavior" in the specification prose document for the specification on when
+ * and how implementations of this service are used.</p>
+ * 
+ * @since 2.2
+ * 
+ */
+public abstract class ApplicationConfigurationPopulator {
+    
+    /**
+     * <p class="changed_added_2_2">Service providers that implement
+     * this service must be called by the JSF runtime
+     * exactly once for each implementation, at startup, before any requests have 
+     * been serviced.  Before calling the 
+     * {@link #populateApplicationConfiguration} method,
+     * the runtime must ensure that the {@code Document} argument is empty aside
+     * from being pre-configured to be in the proper namespace for an
+     * Application Configuration Resources file: 
+     * {@code http://xmlns.jcp.org/xml/ns/javaee}.  Implementations of this service
+     * must ensure that any changes made to the argument
+     * {@code Document} conform to that schema <a target="_"
+     * href="../../web-facesconfig.html">as defined in the
+     * specification</a>.  The JSF runtime is not required to validate the
+     * {@code Document} after control returns from the service implementation,
+     * though it may do so.</p>
+     * 
+     * <div class="changed_added_2_2">
+     * 
+     * <p>Ordering of Artifacts</p>
+     * 
+     * <p>If the document is made to contain an {@code <ordering>} element,
+     * as specified in the section <em>Ordering of Artifacts</em> in the
+     * specification prose document, the document will be prioritized
+     * accordingly.  Otherwise, the runtime must place the document in the
+     * list of other Application Configuration Resources documents at the
+     * "lowest" priority, meaning any conflicts that may arise between the
+     * argument document and any other Application Configuration Resources
+     * are resolved in favor of the other document.</p>
+     * 
+     * </div>
+     * 
+     * @param toPopulate The Document to populate with configuration.
+     * 
+     * @since 2.2
+     */
+    
+    public abstract void populateApplicationConfiguration(Document toPopulate);
+    
+}
diff --git a/javax/faces/application/ApplicationFactory.java b/javax/faces/application/ApplicationFactory.java
new file mode 100644
index 0000000..fa9edf2
--- /dev/null
+++ b/javax/faces/application/ApplicationFactory.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import javax.faces.FacesWrapper;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">ApplicationFactory</strong> is a 
+ * factory object that creates
+ * (if needed) and returns {@link Application} instances.  Implementations of
+ * JavaServer Faces must provide at least a default implementation of
+ * {@link Application}.</p>
+ *
+ * <p>There must be one {@link ApplicationFactory} instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   ApplicationFactory factory = (ApplicationFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+ * </pre>
+ */
+
+public abstract class ApplicationFactory implements FacesWrapper<ApplicationFactory> {
+    
+    public ApplicationFactory() {
+        
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+    public ApplicationFactory getWrapped() {
+        return null;
+    }
+    
+    /**
+     * <p>Create (if needed) and return an {@link Application} instance
+     * for this web application.</p>
+     */
+    public abstract Application getApplication();
+
+
+    /**
+     * <p>Replace the {@link Application} instance that will be
+     * returned for this web application.</p>
+     *
+     * @throws NullPointerException if <code>application</code>
+     *  is <code>null</code>.
+
+     * @param application The replacement {@link Application} instance
+     */
+    public abstract void setApplication(Application application);
+
+
+}
diff --git a/javax/faces/application/ApplicationWrapper.java b/javax/faces/application/ApplicationWrapper.java
new file mode 100644
index 0000000..89774a9
--- /dev/null
+++ b/javax/faces/application/ApplicationWrapper.java
@@ -0,0 +1,790 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+
+import javax.el.ELContextListener;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.FacesWrapper;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.ReferenceSyntaxException;
+import javax.faces.el.ValueBinding;
+import javax.faces.el.VariableResolver;
+import javax.faces.event.ActionListener;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.flow.FlowHandler;
+import javax.faces.validator.Validator;
+
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Provides</span> a simple implementation of
+ * {@link Application} that can be subclassed by developers wishing
+ * to provide specialized behavior to an existing {@link
+ * Application} instance.  The default implementation of all methods
+ * is to call through to the wrapped {@link Application}.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class ApplicationWrapper extends Application implements FacesWrapper<Application> {
+
+    @Override
+    public abstract Application getWrapped();
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getActionListener} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ActionListener getActionListener() {
+        return getWrapped().getActionListener();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setActionListener(javax.faces.event.ActionListener)}
+     * on the wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void setActionListener(ActionListener listener) {
+        getWrapped().setActionListener(listener);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getDefaultLocale} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Locale getDefaultLocale() {
+        return getWrapped().getDefaultLocale();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setDefaultLocale(java.util.Locale)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void setDefaultLocale(Locale locale) {
+        getWrapped().setDefaultLocale(locale);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getDefaultRenderKitId} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public String getDefaultRenderKitId() {
+        return getWrapped().getDefaultRenderKitId();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#addDefaultValidatorId(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void addDefaultValidatorId(String validatorId) {
+        getWrapped().addDefaultValidatorId(validatorId);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getDefaultValidatorInfo} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Map<String, String> getDefaultValidatorInfo() {
+        return getWrapped().getDefaultValidatorInfo();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setDefaultRenderKitId(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void setDefaultRenderKitId(String renderKitId) {
+        getWrapped().setDefaultRenderKitId(renderKitId);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getMessageBundle} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public String getMessageBundle() {
+        return getWrapped().getMessageBundle();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setMessageBundle(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void setMessageBundle(String bundle) {
+        getWrapped().setMessageBundle(bundle);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getNavigationHandler} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public NavigationHandler getNavigationHandler() {
+        return getWrapped().getNavigationHandler();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setNavigationHandler(NavigationHandler)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void setNavigationHandler(NavigationHandler handler) {
+        getWrapped().setNavigationHandler(handler);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getPropertyResolver} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @deprecated See superclass for alternative.
+     */
+    @Override
+    @Deprecated
+    public PropertyResolver getPropertyResolver() {
+        return getWrapped().getPropertyResolver();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setPropertyResolver(javax.faces.el.PropertyResolver)} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @deprecated See superclass for alternative.
+     */
+    @Override
+    @Deprecated
+    public void setPropertyResolver(PropertyResolver resolver) {
+        getWrapped().setPropertyResolver(resolver);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getVariableResolver} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @deprecated See superclass for alternative.
+     */
+    @Override
+    @Deprecated
+    public VariableResolver getVariableResolver() {
+        return getWrapped().getVariableResolver();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setVariableResolver(javax.faces.el.VariableResolver)} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @deprecated See superclass for alternative.
+     */
+    @Override
+    @Deprecated
+    public void setVariableResolver(VariableResolver resolver) {
+        getWrapped().setVariableResolver(resolver);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getViewHandler} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ViewHandler getViewHandler() {
+        return getWrapped().getViewHandler();
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span> default behavior of this method
+     * is to call {@link Application#setViewHandler(ViewHandler)} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @throws IllegalStateException <span class="changed_modified_2_2">if this method is called after
+     * at least one request has been processed by the
+     * <code>Lifecycle</code> instance for this application.
+     * @throws NullPointerException if <code>manager</code>
+     *  is <code>null</code></span>
+ */
+    @Override
+    public void setViewHandler(ViewHandler handler) {
+        getWrapped().setViewHandler(handler);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getStateManager} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public StateManager getStateManager() {
+        return getWrapped().getStateManager();
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span> default behavior of this method
+     * is to call {@link Application#setStateManager(StateManager)} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @throws IllegalStateException <span class="changed_added_2_2">if this method is called after
+     * at least one request has been processed by the
+     * <code>Lifecycle</code> instance for this application.
+     * @throws NullPointerException if <code>manager</code>
+     *  is <code>null</code></span>
+     */
+    @Override
+    public void setStateManager(StateManager manager) {
+        getWrapped().setStateManager(manager);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#addComponent(String, String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void addComponent(String componentType, String componentClass) {
+        getWrapped().addComponent(componentType, componentClass);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createComponent(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public UIComponent createComponent(String componentType)
+          throws FacesException {
+        return getWrapped().createComponent(componentType);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createComponent(javax.faces.el.ValueBinding, javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link Application} object.</p>
+     * 
+     * @deprecated See superclass for alternative.
+     */
+    @Override
+    @Deprecated
+    public UIComponent createComponent(ValueBinding componentBinding,
+                                       FacesContext context,
+                                       String componentType)
+          throws FacesException {
+        return getWrapped().createComponent(componentBinding,
+                                            context,
+                                            componentType);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getComponentTypes} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Iterator<String> getComponentTypes() {
+        return getWrapped().getComponentTypes();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#addConverter(String, String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void addConverter(String converterId, String converterClass) {
+        getWrapped().addConverter(converterId, converterClass);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#addConverter(Class, String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void addConverter(Class<?> targetClass, String converterClass) {
+        getWrapped().addConverter(targetClass, converterClass);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createConverter(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Converter createConverter(String converterId) {
+        return getWrapped().createConverter(converterId);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createConverter(Class)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Converter createConverter(Class<?> targetClass) {
+        return getWrapped().createConverter(targetClass);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getConverterIds} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Iterator<String> getConverterIds() {
+        return getWrapped().getConverterIds();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getConverterTypes} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Iterator<Class<?>> getConverterTypes() {
+        return getWrapped().getConverterTypes();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createMethodBinding(String, Class[])} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @deprecated See superclass for alternative.
+     */
+    @Override
+    @Deprecated
+    public MethodBinding createMethodBinding(String ref, Class<?>[] params)
+          throws ReferenceSyntaxException {
+        return getWrapped().createMethodBinding(ref, params);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getSupportedLocales} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Iterator<Locale> getSupportedLocales() {
+        return getWrapped().getSupportedLocales();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#setSupportedLocales(java.util.Collection)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void setSupportedLocales(Collection<Locale> locales) {
+        getWrapped().setSupportedLocales(locales);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#addBehavior(String, String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void addBehavior(String behaviorId, String behaviorClass) {
+        getWrapped().addBehavior(behaviorId, behaviorClass);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createBehavior(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Behavior createBehavior(String behaviorId) throws FacesException {
+        return getWrapped().createBehavior(behaviorId);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getBehaviorIds} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Iterator<String> getBehaviorIds() {
+        return getWrapped().getBehaviorIds();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#addValidator(String, String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void addValidator(String validatorId, String validatorClass) {
+        getWrapped().addValidator(validatorId, validatorClass);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createValidator(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Validator createValidator(String validatorId) throws FacesException {
+        return getWrapped().createValidator(validatorId);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getValidatorIds} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public Iterator<String> getValidatorIds() {
+        return getWrapped().getValidatorIds();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createValueBinding(String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ValueBinding createValueBinding(String ref)
+          throws ReferenceSyntaxException {
+        return getWrapped().createValueBinding(ref);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getResourceHandler} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ResourceHandler getResourceHandler() {
+        return getWrapped().getResourceHandler();
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span> default behavior of this method
+     * is to call {@link Application#setResourceHandler(ResourceHandler)} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @throws IllegalStateException <span class="changed_added_2_2">if this method is called after
+     * at least one request has been processed by the
+     * <code>Lifecycle</code> instance for this application.
+     * @throws NullPointerException if <code>resourceHandler</code>
+     *  is <code>null</code></span>
+     */
+    @Override
+    public void setResourceHandler(ResourceHandler resourceHandler) {
+        getWrapped().setResourceHandler(resourceHandler);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getResourceBundle(javax.faces.context.FacesContext, String)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ResourceBundle getResourceBundle(FacesContext ctx, String name) {
+        return getWrapped().getResourceBundle(ctx, name);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getProjectStage} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ProjectStage getProjectStage() {
+        return getWrapped().getProjectStage();
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span> default behavior of this method
+     * is to call {@link Application#addELResolver(javax.el.ELResolver)} on the
+     * wrapped {@link Application} object.</p>
+     * 
+     * @throws IllegalStateException <span
+     * class="changed_added_2_2">if called after the first
+     * request to the {@link javax.faces.webapp.FacesServlet} has been
+     * serviced.</span>
+     */
+    @Override
+    public void addELResolver(ELResolver resolver) {
+        getWrapped().addELResolver(resolver);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getELResolver} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ELResolver getELResolver() {
+        return getWrapped().getELResolver();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link Application} object.</p>
+     */
+    @Override
+    public UIComponent createComponent(ValueExpression componentExpression,
+                                       FacesContext context,
+                                       String componentType)
+          throws FacesException {
+        return getWrapped().createComponent(componentExpression, context, componentType);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String, String)}
+     * on the wrapped {@link Application} object.</p>
+     */
+    @Override
+    public UIComponent createComponent(ValueExpression componentExpression,
+                                       FacesContext context,
+                                       String componentType,
+                                       String rendererType) {
+        return getWrapped().createComponent(componentExpression, context, componentType, rendererType);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createComponent(javax.faces.context.FacesContext, String, String)}
+     * on the wrapped {@link Application} object.</p>
+     */
+    @Override
+    public UIComponent createComponent(FacesContext context,
+                                       String componentType,
+                                       String rendererType) {
+        return getWrapped().createComponent(context, componentType, rendererType);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#createComponent(javax.faces.context.FacesContext, Resource)}
+     * on the wrapped {@link Application} object.</p>
+     */
+    @Override
+    public UIComponent createComponent(FacesContext context,
+                                       Resource componentResource) {
+        return getWrapped().createComponent(context, componentResource);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getExpressionFactory} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ExpressionFactory getExpressionFactory() {
+        return getWrapped().getExpressionFactory();
+    }
+
+    @Override
+    public FlowHandler getFlowHandler() {
+        return getWrapped().getFlowHandler();
+    }
+
+    @Override
+    public void setFlowHandler(FlowHandler newHandler) {
+        super.setFlowHandler(newHandler);
+    }
+    
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#evaluateExpressionGet(javax.faces.context.FacesContext, String, Class)}
+     * on the wrapped {@link Application} object.</p>
+     * 
+     * @deprecated See superclass for alternative.
+     */
+    @Override
+    @Deprecated
+    public <T> T evaluateExpressionGet(FacesContext context,
+                                       String expression,
+                                       Class<? extends T> expectedType)
+          throws ELException {
+        return getWrapped().evaluateExpressionGet(context, expression, expectedType);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#addELContextListener(javax.el.ELContextListener)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void addELContextListener(ELContextListener listener) {
+        getWrapped().addELContextListener(listener);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#removeELContextListener(javax.el.ELContextListener)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void removeELContextListener(ELContextListener listener) {
+        getWrapped().removeELContextListener(listener);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#getELContextListeners} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public ELContextListener[] getELContextListeners() {
+        return getWrapped().getELContextListeners();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#publishEvent(javax.faces.context.FacesContext, Class, Object)}
+     * on the wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void publishEvent(FacesContext context,
+                             Class<? extends SystemEvent> systemEventClass,
+                             Object source) {
+        getWrapped().publishEvent(context, systemEventClass, source);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#publishEvent(javax.faces.context.FacesContext, Class, Class, Object)}
+     * on the wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void publishEvent(FacesContext context,
+                             Class<? extends SystemEvent> systemEventClass,
+                             Class<?> sourceBaseType,
+                             Object source) {
+        getWrapped().publishEvent(context,
+                                  systemEventClass,
+                                  sourceBaseType,
+                                  source);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#subscribeToEvent(Class, Class, javax.faces.event.SystemEventListener)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
+                                 Class<?> sourceClass,
+                                 SystemEventListener listener) {
+        getWrapped().subscribeToEvent(systemEventClass, sourceClass, listener);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#subscribeToEvent(Class, javax.faces.event.SystemEventListener)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
+                                 SystemEventListener listener) {
+        getWrapped().subscribeToEvent(systemEventClass, listener);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#unsubscribeFromEvent(Class, Class, javax.faces.event.SystemEventListener)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
+                                     Class<?> sourceClass,
+                                     SystemEventListener listener) {
+        getWrapped().unsubscribeFromEvent(systemEventClass, sourceClass, listener);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Application#unsubscribeFromEvent(Class, javax.faces.event.SystemEventListener)} on the
+     * wrapped {@link Application} object.</p>
+     */
+    @Override
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
+                                     SystemEventListener listener) {
+        getWrapped().unsubscribeFromEvent(systemEventClass, listener);
+    }
+}
diff --git a/javax/faces/application/ConfigurableNavigationHandler.java b/javax/faces/application/ConfigurableNavigationHandler.java
new file mode 100644
index 0000000..e158897
--- /dev/null
+++ b/javax/faces/application/ConfigurableNavigationHandler.java
@@ -0,0 +1,162 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.faces.context.FacesContext;
+import javax.faces.flow.Flow;
+
+/**
+ * <p
+ * class="changed_added_2_0"><strong class="changed_modified_2_2">ConfigurableNavigationHandler</strong>
+ * extends the contract of {@link NavigationHandler} to allow runtime
+ * inspection of the {@link NavigationCase}s that make up the rule-base
+ * for navigation.  An implementation compliant with the version of the
+ * specification in which this class was introduced (or a later version)
+ * must make it so that its <code>NavigationHandler</code> is an
+ * extension of this class.</p>
+ *
+ * @since 2.0
+ */
+public abstract class ConfigurableNavigationHandler extends NavigationHandler {
+    
+    /**
+     * <p class="changed_added_2_0">Return the {@link NavigationCase}
+     * representing the navigation that would be taken had {@link
+     * NavigationHandler#handleNavigation} been called with the same
+     * arguments or <code>null</code> if there is no such case.</p>
+     *
+     * @param context The {@link FacesContext} for the current request
+     * @param fromAction The action binding expression that was evaluated
+     *  to retrieve the specified outcome, or <code>null</code> if the
+     *  outcome was acquired by some other means
+     * @param outcome The logical outcome returned by a previous invoked
+     *  application action (which may be <code>null</code>)
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */ 
+
+    public abstract NavigationCase getNavigationCase(FacesContext context,
+            String fromAction, 
+            String outcome);
+    
+    
+    /**
+     * <p class="changed_added_2_2">Return the {@link NavigationCase}
+     * representing the navigation that would be taken had {@link
+     * NavigationHandler#handleNavigation} been called with the same
+     * arguments or <code>null</code> if there is no such case.  Implementations
+     * that comply the version of the specification in which this method
+     * was introduced must override this method.  For compatibility with 
+     * decorated implementations that comply with an earlier version of the
+     * specification, an implementation is provided that simply calls
+     * through to {@link #getNavigationCase(javax.faces.context.FacesContext, java.lang.String, java.lang.String)},
+     * ignoring the {@code toFlowDocumentId} parameter.</p>
+     * 
+     * @param context The {@link FacesContext} for the current request
+     * @param fromAction The action binding expression that was evaluated
+     *  to retrieve the specified outcome, or <code>null</code> if the
+     *  outcome was acquired by some other means
+     * @param outcome The logical outcome returned by a previous invoked
+     *  application action (which may be <code>null</code>)
+     * @param toFlowDocumentId The value of the <code>toFlowDocumentId</code> property
+     * for the navigation case (which may be <code>null</code>)
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     * 
+     * @since 2.2
+     */
+    
+    public NavigationCase getNavigationCase(FacesContext context,
+            String fromAction, 
+            String outcome,
+            String toFlowDocumentId) {
+        return getNavigationCase(context, fromAction, outcome);
+    }
+    
+
+    /**
+     * <p class="changed_added_2_0">Return a <code>Map<String,
+     * Set<NavigationCase>></code> where the keys are
+     * <code><from-view-id></code> values and the values are
+     * <code>Set<NavigationCase></code> where each element in the
+     * Set is a <code>NavigationCase</code> that applies to that
+     * <code><from-view-id></code>.  The implementation must
+     * support live modifications to this <code>Map</code>.</p>
+     *
+     * @since 2.0
+     */
+    public abstract Map<String, Set<NavigationCase>> getNavigationCases();
+    
+    /**
+     * <p class="changed_added_2_0">A convenience method to signal the
+     * JavaServer Faces implementation to perform navigation
+     * with the provided outcome. When the NavigationHandler is invoked,
+     * the current viewId is treated as the "from viewId" and the "from action"
+     * is null.</p>
+     * 
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public void performNavigation(String outcome) {
+        this.handleNavigation(FacesContext.getCurrentInstance(), null, outcome);
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Called by the flow system to cause
+     * the flow to be inspected for navigation rules.  For backward
+     * compatibility with earlier implementations, an empty method
+     * is provided.</p>
+     * 
+     * 
+     * @since 2.2
+     */
+    public void inspectFlow(FacesContext context, Flow flow) {
+        
+    }
+
+}
diff --git a/javax/faces/application/ConfigurableNavigationHandlerWrapper.java b/javax/faces/application/ConfigurableNavigationHandlerWrapper.java
new file mode 100644
index 0000000..2b6a8ed
--- /dev/null
+++ b/javax/faces/application/ConfigurableNavigationHandlerWrapper.java
@@ -0,0 +1,105 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.application;
+
+import java.util.Map;
+import java.util.Set;
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+import javax.faces.flow.Flow;
+
+/**
+ * <p class="changed_added_2_2">Provides a simple implementation of
+ * {@link ConfigurableNavigationHandler} that can be subclassed by developers wishing
+ * to provide specialized behavior to an existing {@link
+ * ConfigurableNavigationHandler} instance.  The default implementation of all methods
+ * is to call through to the wrapped {@link ConfigurableNavigationHandler}.</p>
+ *
+ * <div class="changed_added_2_2">
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * </div>
+ *
+ * @since 2.2
+ */
+public abstract class ConfigurableNavigationHandlerWrapper extends ConfigurableNavigationHandler implements FacesWrapper<ConfigurableNavigationHandler>{
+
+    /**
+     * @return the instance that we are wrapping.
+     */ 
+    @Override
+    public abstract ConfigurableNavigationHandler getWrapped();
+    
+    
+    @Override
+    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
+        return getWrapped().getNavigationCase(context, fromAction, outcome);
+    }
+
+    @Override
+    public Map<String, Set<NavigationCase>> getNavigationCases() {
+        return getWrapped().getNavigationCases();
+    }
+
+    @Override
+    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome, String toFlowDocumentId) {
+        return getWrapped().getNavigationCase(context, fromAction, outcome, toFlowDocumentId);
+    }
+
+    @Override
+    public void handleNavigation(FacesContext context, String fromAction, String outcome) {
+        getWrapped().handleNavigation(context, fromAction, outcome);
+    }
+    
+    
+    @Override
+    public void performNavigation(String outcome) {
+        getWrapped().performNavigation(outcome);
+    }
+
+    @Override
+    public void inspectFlow(FacesContext context, Flow flow) {
+        getWrapped().inspectFlow(context, flow);
+    }
+
+    
+}
diff --git a/javax/faces/application/FacesMessage.java b/javax/faces/application/FacesMessage.java
new file mode 100644
index 0000000..e92280d
--- /dev/null
+++ b/javax/faces/application/FacesMessage.java
@@ -0,0 +1,491 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * <p><strong>FacesMessage</strong> represents a single validation (or
+ * other) message, which is typically associated with a particular
+ * component in the view.  A {@link javax.faces.application.FacesMessage} instance may be created
+ * based on a specific <code>messageId</code>.  The specification defines
+ * the set of <code>messageId</code>s for which there must be
+ * {@link javax.faces.application.FacesMessage} instances.</p>
+ *
+ * <p>The implementation must take the following steps when creating
+ * <code>FacesMessage</code> instances given a <code>messageId</code>:</p>
+ *
+ * <ul>
+ *
+ * <p>Call {@link Application#getMessageBundle}.  If
+ * non-<code>null</code>, locate the named <code>ResourceBundle</code>,
+ * using the <code>Locale</code> from the current {@link
+ * javax.faces.component.UIViewRoot} and see if it has a value for the
+ * argument <code>messageId</code>.  If it does, treat the value as the
+ * <code>summary</code> of the <code>FacesMessage</code>.  If it does
+ * not, or if {@link Application#getMessageBundle} returned
+ * <code>null</code>, look in the <code>ResourceBundle</code> named by
+ * the value of the constant {@link #FACES_MESSAGES} and see if it has a
+ * value for the argument <code>messageId</code>.  If it does, treat the
+ * value as the <code>summary</code> of the <code>FacesMessage</code>.
+ * If it does not, there is no initialization information for the
+ * <code>FacesMessage</code> instance.</p>
+ *
+ * <p>In all cases, if a <code>ResourceBundle</code> hit is found for
+ * the <code>{messageId}</code>, look for further hits under the key
+ * <code>{messageId}_detail</code>. Use this value, if present, as 
+ * the <code>detail</code> for the returned <code>FacesMessage</code>.</p>
+ *
+ * <p>Make sure to perform any parameter substitution required for the
+ * <code>summary</code> and <code>detail</code> of the
+ * <code>FacesMessage</code>.</p>
+ *
+ * </ul>
+ *
+ */
+
+public class FacesMessage implements Serializable {
+
+
+    // --------------------------------------------------------------- Constants
+
+
+    /**
+     * <p><code>ResourceBundle</code> identifier for messages whose
+     * message identifiers are defined in the JavaServer Faces
+     * specification.</p>
+     */
+    public static final String FACES_MESSAGES = "javax.faces.Messages";
+
+
+    // ------------------------------------------------- Message Severity Levels
+
+
+    // Any new Severity values must go at the end of the list, or we will break
+    // backwards compatibility on serialized instances
+
+
+    private static final String SEVERITY_INFO_NAME = "INFO";
+    /**
+     * <p>Message severity level indicating an informational message
+     * rather than an error.</p>
+     */
+    public static final Severity SEVERITY_INFO = 
+	new Severity(SEVERITY_INFO_NAME);
+
+
+    private static final String SEVERITY_WARN_NAME = "WARN";
+    /**
+     * <p>Message severity level indicating that an error might have
+     * occurred.</p>
+     */
+    public static final Severity SEVERITY_WARN = 
+	new Severity(SEVERITY_WARN_NAME);
+
+
+    private static final String SEVERITY_ERROR_NAME = "ERROR";
+    /**
+     * <p>Message severity level indicating that an error has
+     * occurred.</p>
+     */
+    public static final Severity SEVERITY_ERROR = 
+	new Severity(SEVERITY_ERROR_NAME);
+
+
+    private static final String SEVERITY_FATAL_NAME = "FATAL";
+    /**
+     * <p>Message severity level indicating that a serious error has
+     * occurred.</p>
+     */
+    public static final Severity SEVERITY_FATAL = 
+	new Severity(SEVERITY_FATAL_NAME);
+
+
+    /**
+     * <p>Array of all defined values, ascending order of ordinal value.
+     *  Be sure you include any new instances created above, in the
+     * same order.</p>
+     */
+    private static final Severity[] values =
+    { SEVERITY_INFO, SEVERITY_WARN, SEVERITY_ERROR, SEVERITY_FATAL };
+    
+
+    /**
+     * <p>Immutable <code>List</code> of valid {@link javax.faces.application.FacesMessage.Severity}
+     * instances, in ascending order of their ordinal value.</p>
+     */
+    public static final List VALUES = 
+	Collections.unmodifiableList(Arrays.asList(values));
+
+    private static Map<String,Severity> _MODIFIABLE_MAP =
+         new HashMap<String,Severity>(4, 1.0f);
+    
+    static {
+	for (int i = 0, len = values.length; i < len; i++) {
+	    _MODIFIABLE_MAP.put(values[i].severityName, values[i]);
+	}
+    }
+    
+
+    /**
+     * <p>Immutable <code>Map</code> of valid {@link javax.faces.application.FacesMessage.Severity}
+     * instances, keyed by name.</p>
+     */
+    public final static Map VALUES_MAP = 
+	Collections.unmodifiableMap(_MODIFIABLE_MAP);
+    
+    private static final long serialVersionUID = -1180773928220076822L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new {@link javax.faces.application.FacesMessage} with no initial
+     * values. The severity is set to Severity.INFO.</p>
+     */
+    public FacesMessage() {
+
+        super();
+
+    }
+
+    /**
+     * <p>Construct a new {@link javax.faces.application.FacesMessage} with just a summary.  The
+     * detail is <code>null</code>, the severity is set to
+     * <code>Severity.INFO</code>.</p>
+     */
+    public FacesMessage(String summary) {
+
+        super();
+        setSummary(summary);
+    }
+
+
+
+
+    /**
+     * <p>Construct a new {@link javax.faces.application.FacesMessage} with the specified initial
+     * values.  The severity is set to Severity.INFO.</p>
+     *
+     * @param summary Localized summary message text
+     * @param detail Localized detail message text
+     *
+     * @throws IllegalArgumentException if the specified severity level
+     *  is not one of the supported values
+     */
+    public FacesMessage(String summary, String detail) {
+
+        super();
+        setSummary(summary);
+        setDetail(detail);
+
+    }
+
+
+    /**
+     * <p>Construct a new <code>FacesMessage</code> with the specified
+     * initial values.</p>
+     *
+     * @param severity the severity
+     * @param summary Localized summary message text
+     * @param detail Localized detail message text
+     *
+     * @throws IllegalArgumentException if the specified severity level
+     *  is not one of the supported values
+     */
+    public FacesMessage(Severity severity, String summary, 
+			String detail) {
+
+        super();
+	setSeverity(severity);
+        setSummary(summary);
+        setDetail(detail);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    private transient Severity severity = FacesMessage.SEVERITY_INFO;
+    private transient String summary = null;
+    private transient String detail = null;
+    private transient boolean rendered;
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Return the localized detail text.  If no localized detail text has
+     * been defined for this message, return the localized summary text
+     * instead.</p>
+     */
+    public String getDetail() {
+
+	if (this.detail == null) {
+	    return (this.summary);
+	} else {
+	    return (this.detail);
+	}
+
+    }
+
+
+    /**
+     * <p>Set the localized detail text.</p>
+     *
+     * @param detail The new localized detail text
+     */
+    public void setDetail(String detail) {
+
+        this.detail = detail;
+
+    }
+
+
+    /**
+     * <p>Return the severity level.</p>
+     */
+    public Severity getSeverity() {
+
+        return (this.severity);
+
+    }
+
+
+    /**
+     * <p>Set the severity level.</p>
+     *
+     * @param severity The new severity level
+     *
+     * @throws IllegalArgumentException if the specified severity level
+     *  is not one of the supported values
+     */
+    public void setSeverity(Severity severity) {
+	
+        if ((severity.getOrdinal() < SEVERITY_INFO.getOrdinal()) || 
+	    (severity.getOrdinal() > SEVERITY_FATAL.getOrdinal())) {
+            throw new IllegalArgumentException(String.valueOf(severity));
+        }
+        this.severity = severity;
+	
+    }
+
+
+    /**
+     * <p>Return the localized summary text.</p>
+     */
+    public String getSummary() {
+
+        return (this.summary);
+
+    }
+
+
+    /**
+     * <p>Set the localized summary text.</p>
+     *
+     * @param summary The new localized summary text
+     */
+    public void setSummary(String summary) {
+
+        this.summary = summary;
+
+    }
+
+
+    /**
+     * @return <code>true</code> if {@link #rendered()} has been called, otherwise
+     *  <code>false</code>
+     *
+     * @since 2.0
+     */
+    public boolean isRendered() {
+
+        return rendered;
+
+    }
+
+    /**
+     * <p>Marks this message as having been rendered to the client.</p>
+     *
+     * @since 2.0
+     */
+    public void rendered() {
+
+        this.rendered = true;
+
+    }
+    
+
+    /**
+     * <p>Persist {@link javax.faces.application.FacesMessage} artifacts,
+     * including the non serializable <code>Severity</code>.</p>
+     */
+    private void writeObject(ObjectOutputStream out) throws IOException {
+        out.defaultWriteObject();
+        out.writeInt(severity.getOrdinal());
+        out.writeObject(summary);
+        out.writeObject(detail);
+        out.writeObject(rendered);
+    }
+
+    /**
+     * <p>Reconstruct {@link javax.faces.application.FacesMessage} from
+     * serialized artifacts.</p>
+     */
+    private void readObject(ObjectInputStream in)
+        throws IOException, ClassNotFoundException {
+        in.defaultReadObject();
+        severity = SEVERITY_INFO;
+        summary = null;
+        detail = null;
+        int ordinal = in.readInt();
+        if (ordinal == SEVERITY_INFO.getOrdinal()) {
+            severity = FacesMessage.SEVERITY_INFO;
+        } else if (ordinal == SEVERITY_WARN.getOrdinal()) {
+            severity = FacesMessage.SEVERITY_WARN;
+        } else if (ordinal == SEVERITY_ERROR.getOrdinal()) {
+            severity = FacesMessage.SEVERITY_ERROR;
+        } else if (ordinal == SEVERITY_FATAL.getOrdinal()) {
+            severity = FacesMessage.SEVERITY_FATAL;
+        }
+        summary = (String) in.readObject();
+        detail = (String) in.readObject();
+        rendered = (Boolean) in.readObject();
+    }
+
+    /**
+     * <p>Class used to represent message severity levels in a typesafe
+     * enumeration.</p>
+     */
+    public static class Severity implements Comparable {
+
+
+	// -------------------------------------------------------  Constructors
+
+	
+	/**
+	 * <p>Private constructor to disable the creation of new
+	 * instances.</p>
+	 */
+	private Severity(String newSeverityName) {
+	    severityName = newSeverityName;
+	}
+	
+	
+	// -------------------------------------------------- Instance Variables
+	
+	
+	/**
+	 * <p>The ordinal value assigned to this instance.</p>
+	 */
+	private final int ordinal = nextOrdinal++;
+	
+
+	/**
+	 * <p>The (optional) name for this severity.</p>
+	 */
+        String severityName = null;
+	
+	
+	// -----------------------------------------------------  Public Methods
+
+
+	/**
+	 * <p>Compare this {@link javax.faces.application.FacesMessage.Severity} instance to the
+	 * specified one.  Returns a negative integer, zero, or a
+	 * positive integer if this object is less than, equal to, or
+	 * greater than the specified object.</p>
+	 *
+	 * @param other The other object to be compared to
+	 */
+	public int compareTo(Object other) {
+	    return this.ordinal - ((Severity) other).ordinal;
+	}
+	
+	
+	/**
+	 * <p>Return the ordinal value of this {@link
+	 * FacesMessage.Severity} instance.</p>
+	 */
+	public int getOrdinal() {
+	    return (this.ordinal);
+	}
+	
+
+	/**
+	 * <p>Return a String representation of this {@link
+	 * FacesMessage.Severity} instance.</p>
+	 */
+	public String toString() {
+	    if (null == severityName) {
+		return (String.valueOf(this.ordinal));
+	    }
+	    return (String.valueOf(this.severityName) + ' ' + this.ordinal);
+	}
+	
+	
+	// ---------------------------------------------------  Static Variables
+	
+	
+	/**
+	 * <p>Static counter returning the ordinal value to be assigned to the
+	 * next instance that is created.</p>
+	 */
+	private static int nextOrdinal = 0;
+	
+    }
+
+
+}
diff --git a/javax/faces/application/NavigationCase.java b/javax/faces/application/NavigationCase.java
new file mode 100644
index 0000000..ef4f7bc
--- /dev/null
+++ b/javax/faces/application/NavigationCase.java
@@ -0,0 +1,512 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+import java.util.List;
+import javax.el.ValueExpression;
+import javax.el.ExpressionFactory;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><strong class="changed_modified_2_2">
+ * NavigationCase</strong>
+ * represents a <code><navigation-case></code> in the navigation
+ * rule base, as well as the <span class="changed_modified_2_2"><code><from-view-id></code> with
+ * which this <code><navigation-case></code> is a sibling</span>.</p>
+ *
+ * @since 2.0
+ */
+public class NavigationCase {
+
+    private final String fromViewId;
+    private final String fromAction;
+    private final String fromOutcome;
+    private final String condition;
+    private final String toViewId;
+    private final String toFlowDocumentId;
+    private final Map<String,List<String>> parameters;
+    private final boolean redirect;
+    private final boolean includeViewParams;
+
+    private ValueExpression toViewIdExpr;
+    private ValueExpression conditionExpr;
+    private String toString;
+    private int hashCode;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0"> Construct a new
+     * <code>NavigationCase</code> based on the provided arguments.  See
+     * section JSF.7.4.2 for how a <code>NavigationCase</code> is used
+     * by the standard {@link ConfigurableNavigationHandler}</p>
+     *
+     * @param fromViewId return from {@link #getFromViewId}
+     * @param fromAction return from {@link #getFromAction}
+     * @param fromOutcome return from {@link #getFromOutcome}
+     * @param condition A string to be interpreted as a
+     * <code>ValueExpression</code> by a call to {@link #getCondition}
+     * @param toViewId return from {@link #getToViewId}
+     * @param parameters return from {@link #getParameters}
+     * @param redirect return from {@link #isRedirect}
+     * @param includeViewParams return {@link #isIncludeViewParams}
+     */
+    public NavigationCase(String fromViewId,
+                          String fromAction,
+                          String fromOutcome,
+                          String condition,
+                          String toViewId,
+                          Map<String,List<String>> parameters,
+                          boolean redirect,
+                          boolean includeViewParams) {
+
+        this.fromViewId = fromViewId;
+        this.fromAction = fromAction;
+        this.fromOutcome = fromOutcome;
+        this.condition = condition;
+        this.toViewId = toViewId;
+        this.toFlowDocumentId = null;
+        this.parameters = parameters;
+        this.redirect = redirect;
+        this.includeViewParams = includeViewParams;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"> Construct a new
+     * <code>NavigationCase</code> based on the provided arguments.  See
+     * section JSF.7.4.2 for how a <code>NavigationCase</code> is used
+     * by the standard {@link ConfigurableNavigationHandler}</p>
+     *
+     * @param fromViewId return from {@link #getFromViewId}
+     * @param fromAction return from {@link #getFromAction}
+     * @param fromOutcome return from {@link #getFromOutcome}
+     * @param condition A string to be interpreted as a
+     * <code>ValueExpression</code> by a call to {@link #getCondition}
+     * @param toViewId return from {@link #getToViewId}
+     * @param parameters return from {@link #getParameters}
+     * @param redirect return from {@link #isRedirect}
+     * @param includeViewParams return {@link #isIncludeViewParams}
+     */
+    public NavigationCase(String fromViewId,
+                          String fromAction,
+                          String fromOutcome,
+                          String condition,
+                          String toViewId,
+                          String toFlowDocumentId,
+                          Map<String,List<String>> parameters,
+                          boolean redirect,
+                          boolean includeViewParams) {
+
+        this.fromViewId = fromViewId;
+        this.fromAction = fromAction;
+        this.fromOutcome = fromOutcome;
+        this.condition = condition;
+        this.toViewId = toViewId;
+        this.toFlowDocumentId = toFlowDocumentId;
+        this.parameters = parameters;
+        this.redirect = redirect;
+        this.includeViewParams = includeViewParams;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p class="changed_added_2_0">Construct an absolute URL to this
+     * <code>NavigationCase</code> instance using {@link
+     * javax.faces.application.ViewHandler#getActionURL} on the path
+     * portion of the url.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     *
+     * @throws MalformedURLException if the process of constructing the
+     * URL causes this exception to be thrown.
+     */
+    public URL getActionURL(FacesContext context) throws MalformedURLException {
+
+        ExternalContext extContext = context.getExternalContext();
+        return new URL(extContext.getRequestScheme(),
+                extContext.getRequestServerName(),
+                extContext.getRequestServerPort(),
+                context.getApplication().getViewHandler().getActionURL(context, getToViewId(context)));
+        
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Construct an absolute URL to this
+     * <code>NavigationCase</code> instance using {@link
+     * javax.faces.application.ViewHandler#getResourceURL} on the path
+     * portion of the url.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     *
+     * @throws MalformedURLException if the process of constructing the
+     * URL causes this exception to be thrown.
+     */
+    public URL getResourceURL(FacesContext context) throws MalformedURLException {
+        
+        ExternalContext extContext = context.getExternalContext();
+
+        return new URL(extContext.getRequestScheme(),
+                extContext.getRequestServerName(),
+                extContext.getRequestServerPort(),
+                context.getApplication().getViewHandler().getResourceURL(context, getToViewId(context)));
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Construct an absolute URL suitable for a
+     * "redirect" to this <code>NavigationCase</code> instance using {@link
+     * javax.faces.application.ViewHandler#getRedirectURL} on the path
+     * portion of the url.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     *
+     * @throws MalformedURLException if the process of constructing the
+     * URL causes this exception to be thrown.
+     */
+    public URL getRedirectURL(FacesContext context) throws MalformedURLException {
+
+        ExternalContext extContext = context.getExternalContext();
+
+        return new URL(extContext.getRequestScheme(),
+                extContext.getRequestServerName(),
+                extContext.getRequestServerPort(),
+                context.getApplication().getViewHandler().getRedirectURL(context,
+                                                                         getToViewId(context),
+                                                                         SharedUtils.evaluateExpressions(context, getParameters()),
+                                                                         isIncludeViewParams()));
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Construct an absolute URL suitable for a
+     * bookmarkable link to this <code>NavigationCase</code> instance using {@link
+     * javax.faces.application.ViewHandler#getBookmarkableURL} on the path
+     * portion of the url.  This URL may include view parameters specified
+     * as metadata within the view.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     *
+     * @throws MalformedURLException if the process of constructing the
+     * URL causes this exception to be thrown.
+     */
+    public URL getBookmarkableURL(FacesContext context) throws MalformedURLException {
+
+        ExternalContext extContext = context.getExternalContext();
+        return new URL(extContext.getRequestScheme(),
+                extContext.getRequestServerName(),
+                extContext.getRequestServerPort(),
+                context.getApplication().getViewHandler().getBookmarkableURL(context,
+                                                                             getToViewId(context),
+                                                                             getParameters(),
+                                                                             isIncludeViewParams()));
+    }
+
+    
+    /**
+     * <p class="changed_added_2_0">Return the
+     * <code><from-view-id></code> of the
+     * <code><navigation-rule></code> inside which this
+     * <code><navigation-case></code> is nested.</p>
+     */
+    public String getFromViewId() {
+
+        return fromViewId;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the <code><from-action>
+     * for this <code><navigation-case></code></code></p>
+     */
+    public String getFromAction() {
+
+        return fromAction;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the <code><from-outcome>
+     * for this <code><navigation-case></code></code></p>
+     */
+    public String getFromOutcome() {
+
+        return fromOutcome;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Evaluates the <code><to-view-id></code>
+     * for this <code><navigation-case></code></p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     *
+     * @return the view ID that should be navigated to
+     */
+    public String getToViewId(FacesContext context) {
+
+        if (toViewIdExpr == null) {
+            ExpressionFactory factory =
+                  context.getApplication().getExpressionFactory();
+            toViewIdExpr = factory.createValueExpression(context.getELContext(),
+                                                         toViewId,
+                                                         String.class);
+        }
+        String result = (String) toViewIdExpr.getValue(context.getELContext());
+        if (result.charAt(0) != '/') {
+            result = '/' + result;
+        }
+
+        return result;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_2">If this navigation case represents 
+     * a flow invocation, this property is the documentId in which the flow
+     * whose id is given by the return from {@link #getFromOutcome()} is 
+     * defined.  Implementations must override this method to return
+     * the value defined in the corresponding application configuration resources
+     * element.  The base implementation returns the empty string.</p>
+     *
+     * @since 2.2
+     */
+    public String getToFlowDocumentId() {
+
+        return toFlowDocumentId;
+
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Test if this navigation case has an
+     * associated <code><if></code> element.
+     *
+     * @return <code>true</code> if there's an <code><if></code>
+     *  element associated with this <code><navigation-case></code>,
+     *  otherwise <code>false</code>
+     */
+    public boolean hasCondition() {
+
+        return (condition != null);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Evaluates the
+     * <code><if></code> for this
+     * <code><navigation-case></code>, if any.  The expression to
+     * be evaluated is passed into the constructor as a string.  When
+     * the expression is evaluated, its value must be coerced into a
+     * <code>boolean</code> per the normal EL coercion rules.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     *
+     * @return <code>null</code> if there is no <code><if></code> element
+     *  associated with this <code><navigation-case></code>, otherwise
+     *  return the evaluation result of the condition
+     *
+     * @throws any exceptions encountered during the process of
+     * evaluating the expression or obtaining its value.
+     */
+    public Boolean getCondition(FacesContext context) {
+
+        if (conditionExpr == null && condition != null) {
+            ExpressionFactory factory =
+                  context.getApplication().getExpressionFactory();
+            conditionExpr = factory.createValueExpression(context.getELContext(),
+                                                          condition,
+                                                          Boolean.class);
+        }
+
+        return ((conditionExpr != null)
+                ? (Boolean) conditionExpr.getValue(context.getELContext())
+                : null);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the parameters to be included
+     * for navigation cases requiring a redirect.  If no parameters are
+     * defined, <code>null</code> will be returned.  The keys in the
+     * <code>Map</code> are parameter names.  For each key, the
+     * corresponding value is a <code>List</code> of unconverted
+     * values.</p>
+     */
+    public Map<String, List<String>> getParameters() {
+
+        return parameters;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the
+     * <code><redirect></code> value for this
+     * <code><navigation-case></code>.  This will be
+     * <code>true</code> if the new view should be navigated to via a
+     * {@link javax.faces.context.ExternalContext#redirect(String)}</p>
+     */
+    public boolean isRedirect() {
+
+        return redirect;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the
+     * <code><redirect></code> value for this
+     * <code><navigation-case></code>.  This will be
+     * <code>true</code> if the view parametets should be encoded into
+     * the redirect URL (only applies to redirect case)</p>
+     */
+    public boolean isIncludeViewParams() {
+
+        return includeViewParams;
+
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        NavigationCase that = (NavigationCase) o;
+
+        return (redirect == that.redirect
+               && !(fromAction != null
+                    ? !fromAction.equals(that.fromAction)
+                    : that.fromAction != null)
+               && !(fromOutcome != null
+                    ? !fromOutcome.equals(that.fromOutcome)
+                    : that.fromOutcome != null)
+               && !(condition != null
+                    ? !condition.equals(that.condition)
+                    : that.condition != null)
+               && !(fromViewId != null
+                    ? !fromViewId.equals(that.fromViewId)
+                    : that.fromViewId != null)
+               && !(toViewId != null
+                    ? !toViewId.equals(that.toViewId)
+                    : that.toViewId != null)
+               && !(toFlowDocumentId != null
+                    ? !toFlowDocumentId.equals(that.toFlowDocumentId)
+                    : that.toFlowDocumentId != null)
+               && !(parameters != null
+                    ? !parameters.equals(that.parameters)
+                    : that.parameters != null));
+
+    }
+
+    
+    @Override
+    public int hashCode() {
+
+        if (hashCode == 0) {
+            int result = fromViewId != null ? fromViewId.hashCode() : 0;
+            result = 31 * result + (fromAction != null
+                                    ? fromAction.hashCode()
+                                    : 0);
+            result = 31 * result + (fromOutcome != null
+                                    ? fromOutcome.hashCode()
+                                    : 0);
+            result = 31 * result + (condition != null
+                                    ? condition.hashCode()
+                                    : 0);
+            result = 31 * result + (toViewId != null ? toViewId.hashCode() : 0);
+            result = 31 * result + (toFlowDocumentId != null ? toFlowDocumentId.hashCode() : 0);
+            result = 31 * result + (redirect ? 1 : 0);
+            result = 31 * result + (parameters != null ? parameters.hashCode() : 0);
+            hashCode = result;
+        }
+        return hashCode;
+
+    }
+
+
+    @Override
+    public String toString() {
+
+        if (toString == null) {
+            StringBuilder sb = new StringBuilder(64);
+            sb.append("NavigationCase{");
+            sb.append("fromViewId='").append(fromViewId).append('\'');
+            sb.append(", fromAction='").append(fromAction).append('\'');
+            sb.append(", fromOutcome='").append(fromOutcome).append('\'');
+            sb.append(", if='").append(condition).append('\'');
+            sb.append(", toViewId='").append(toViewId).append('\'');
+            sb.append(", faces-redirect=").append(redirect);
+            sb.append(", includeViewParams=").append(includeViewParams).append('\'');
+            sb.append(", parameters=").append(((parameters != null) ? parameters.toString() : ""));
+            sb.append('}');
+            toString = sb.toString();
+        }
+        return toString;
+
+    }
+ 
+}
diff --git a/javax/faces/application/NavigationCaseWrapper.java b/javax/faces/application/NavigationCaseWrapper.java
new file mode 100644
index 0000000..54b1e8d
--- /dev/null
+++ b/javax/faces/application/NavigationCaseWrapper.java
@@ -0,0 +1,158 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.application;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2">Provides a simple implementation of 
+ * {@link NavigationCase} that can be subclassed by developers wishing to
+ * provide specialized behavior to an existing {@link NavigationCase}
+ * instance.  The default implementation of all methods is to call
+ * through to the wrapped {@link NavigationCase} instance.</p>
+ *
+ * <p class="changed_added_2_2">Usage: extend this class and override 
+ * {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.2
+ */
+public abstract class NavigationCaseWrapper extends NavigationCase implements FacesWrapper<NavigationCase> {
+
+    public NavigationCaseWrapper() {
+		super((String) null, (String) null, (String) null, (String) null, (String) null,
+                        (Map<String, List<String>>) null, false, false);
+    }
+    
+    @Override
+    public boolean equals(Object o) {
+        return getWrapped().equals(o);
+    }
+
+    @Override
+    public int hashCode() {
+        return getWrapped().hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return getWrapped().toString();
+    }
+
+    @Override
+    public abstract NavigationCase getWrapped();
+
+    @Override
+    public URL getActionURL(FacesContext context) throws MalformedURLException {
+        return getWrapped().getActionURL(context);
+    }
+
+    @Override
+    public URL getBookmarkableURL(FacesContext context) throws MalformedURLException {
+        return getWrapped().getBookmarkableURL(context);
+    }
+
+    @Override
+    public Boolean getCondition(FacesContext context) {
+        return getWrapped().getCondition(context);
+    }
+
+    @Override
+    public String getFromAction() {
+        return getWrapped().getFromAction();
+    }
+
+    @Override
+    public String getFromOutcome() {
+        return getWrapped().getFromOutcome();
+    }
+
+    @Override
+    public String getFromViewId() {
+        return getWrapped().getFromViewId();
+    }
+
+    @Override
+    public Map<String, List<String>> getParameters() {
+        return getWrapped().getParameters();
+    }
+
+    @Override
+    public URL getRedirectURL(FacesContext context) throws MalformedURLException {
+        return getWrapped().getRedirectURL(context);
+    }
+
+    @Override
+    public URL getResourceURL(FacesContext context) throws MalformedURLException {
+        return getWrapped().getResourceURL(context);
+    }
+
+    @Override
+    public String getToViewId(FacesContext context) {
+        return getWrapped().getToViewId(context);
+    }
+
+    @Override
+    public String getToFlowDocumentId() {
+        return getWrapped().getToFlowDocumentId();
+    }
+
+    @Override
+    public boolean hasCondition() {
+        return getWrapped().hasCondition();
+    }
+
+    @Override
+    public boolean isIncludeViewParams() {
+        return getWrapped().isIncludeViewParams();
+    }
+
+    @Override
+    public boolean isRedirect() {
+        return getWrapped().isRedirect();
+    }
+
+}
diff --git a/javax/faces/application/NavigationHandler.java b/javax/faces/application/NavigationHandler.java
new file mode 100644
index 0000000..16fd498
--- /dev/null
+++ b/javax/faces/application/NavigationHandler.java
@@ -0,0 +1,132 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><span class="changed_modified_2_0 changed_modified_2_2">A</a> 
+ * <strong>NavigationHandler</strong> is passed the outcome string
+ * returned by an application action invoked for this application, and will
+ * use this (along with related state information) to choose the view to
+ * be displayed next.</p>
+ *
+ * <p>A default implementation of <code>NavigationHandler</code> must be
+ * provided by the JSF implementation, which will be utilized unless
+ * <code>setNavigationHandler()</code> is called to establish a different one.
+ * <span class="changed_added_2_0">An implementation
+ * of this class must be thread-safe.</span>
+ * This default instance will compare the view identifier of the current
+ * view, the specified action binding, and the specified outcome against
+ * any navigation rules provided in <code>faces-config.xml</code> file(s).
+ * If a navigation case matches, the current view will be changed by a call
+ * to <code>FacesContext.setViewRoot()</code>.  Note that a <code>null</code>
+ * outcome value will never match any navigation rule, so it can be used as an
+ * indicator that the current view should be redisplayed.</p>
+ */
+
+public abstract class NavigationHandler {
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> navigation
+     * processing based on the state information in the specified {@link
+     * FacesContext}, plus the outcome string returned by an executed
+     * application action.</p>
+     *
+     * <p class="changed_added_2_0">If the implementation class also
+     * extends {@link ConfigurableNavigationHandler}, the implementation
+     * must guarantee that the logic used in a call to {@link
+     * ConfigurableNavigationHandler#getNavigationCase} is used in this
+     * method to determine the correct navigation.</p>
+     *
+     * <p class="changed_added_2_0">This method must set the render targets
+     * (used in partial rendering) to <code>render all </code>
+     * invoking {@link javax.faces.context.PartialViewContext#setRenderAll})
+     * if the view identifier has changed as the result of an application
+     * action (to take into account <code>Ajax requests</code>).</p> 
+     *
+     * @param context The {@link FacesContext} for the current request
+     * @param fromAction The action binding expression that was evaluated
+     *  to retrieve the specified outcome, or <code>null</code> if the
+     *  outcome was acquired by some other means
+     * @param outcome The logical outcome returned by a previous invoked
+     *  application action (which may be <code>null</code>)
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void handleNavigation(FacesContext context,
+                                          String fromAction,
+                                          String outcome);
+    
+    /**
+     * <p class="changed_added_2_2">Overloaded variant of {@link #handleNavigation(javax.faces.context.FacesContext, java.lang.String, java.lang.String)}
+     * that allows the caller to provide the defining document id for a flow
+     * to be entered by this navigation.  For backward compatibility with 
+     * decorated {@code NavigationHandler} implementations that conform to an 
+     * earlier version of the specification, an implementation is provided that
+     * calls through to {@link #handleNavigation(javax.faces.context.FacesContext, java.lang.String, java.lang.String)},
+     * ignoring the {@code toFlowDocumentId} parameter.</p>
+     * 
+     * @param context The {@link FacesContext} for the current request
+     * @param fromAction The action binding expression that was evaluated
+     *  to retrieve the specified outcome, or <code>null</code> if the
+     *  outcome was acquired by some other means
+     * @param outcome The logical outcome returned by a previous invoked
+     *  application action (which may be <code>null</code>)
+     * @param toFlowDocumentId The defining document id of the flow into which
+     * this navigation will cause entry.
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public void handleNavigation(FacesContext context,
+            String fromAction,
+            String outcome,
+            String toFlowDocumentId) {
+        this.handleNavigation(context, fromAction, outcome);
+    }
+
+
+}
diff --git a/javax/faces/application/NavigationHandlerWrapper.java b/javax/faces/application/NavigationHandlerWrapper.java
new file mode 100644
index 0000000..30ad32d
--- /dev/null
+++ b/javax/faces/application/NavigationHandlerWrapper.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.application;
+
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p
+ * class="changed_added_2_2"><strong>NavigationHandlerWrapper</strong>
+ * provides a simple implementation of {@link NavigationHandler} that
+ * can be subclassed by developers wishing to provide specialized
+ * behavior to an existing {@link NavigationHandler} instance.  The
+ * default implementation of all methods is to call through to the
+ * wrapped {@link NavigationHandler} instance.</p>
+ *
+ * <p class="changed_added_2_2>Usage: extend this class and override 
+ * {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.2
+ */
+public abstract class NavigationHandlerWrapper extends NavigationHandler implements FacesWrapper<NavigationHandler> {
+
+    @Override
+    public abstract NavigationHandler getWrapped();
+    
+    @Override
+    public void handleNavigation(FacesContext context, String fromAction, String outcome) {
+        getWrapped().handleNavigation(context, fromAction, outcome);
+    }
+
+    @Override
+    public void handleNavigation(FacesContext context, String fromAction, String outcome, String toFlowDocumentId) {
+        getWrapped().handleNavigation(context, fromAction, outcome, toFlowDocumentId);
+    }
+    
+}
diff --git a/javax/faces/application/ProjectStage.java b/javax/faces/application/ProjectStage.java
new file mode 100644
index 0000000..4d56a6b
--- /dev/null
+++ b/javax/faces/application/ProjectStage.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+/**
+
+ * <p class="changed_added_2_0">This class enables a feature similar to
+ * the <code><a target="_"
+ * href="http://wiki.rubyonrails.org/rails/pages/Environments">RAILS_ENV</a></code>
+ * feature of the Ruby on Rails web framework.  The constants in this
+ * class represent the current state of the running application in a
+ * typical product development lifecycle.  The value of this state may
+ * be queried at any time after application startup by calling {@link
+ * Application#getProjectStage}.</p>
+
+ * @since 2.0
+ */
+public enum ProjectStage {
+
+    /**
+     * <p class="changed_added_2_0">
+     * This value indicates the currently running application is right
+     * now, at this moment, being developed.  This value will usually be
+     * set during iterative development.</p>
+     */
+    Development,
+    /**
+     * <p class="changed_added_2_0">
+     * This value indicates the currently running application is
+     * undergoing unit testing.
+     * </p>
+     */
+    UnitTest,
+    /**
+     * <p class="changed_added_2_0">
+     * This value indicates the currently running application is
+     * undergoing system testing.
+     * </p>
+     */
+    SystemTest,
+    /**
+     * <p class="changed_added_2_0">
+     * This value indicates the currently running application is
+     * deployed in production.
+     * </p>
+     */
+    Production;
+
+    /**
+     * <p class="changed_added_2_0">
+     * The value of this constant is the value of the
+     * <code>param-name</code> for setting the current value to be
+     * returned by {@link Application#getProjectStage}.
+     * </p>
+     */
+    public static final String PROJECT_STAGE_PARAM_NAME =
+          "javax.faces.PROJECT_STAGE";
+
+    
+    /**
+     * <p class="changed_added_2_0">
+     * The value of this constant is the name used for JNDI lookups
+     * for setting the current value to be returned by
+     * {@link Application#getProjectStage}.
+     * </p>
+     */
+    public static final String PROJECT_STAGE_JNDI_NAME =
+          "java:comp/env/jsf/ProjectStage";
+    
+}
diff --git a/javax/faces/application/ProtectedViewException.java b/javax/faces/application/ProtectedViewException.java
new file mode 100644
index 0000000..fa95995
--- /dev/null
+++ b/javax/faces/application/ProtectedViewException.java
@@ -0,0 +1,68 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.application;
+
+import javax.faces.FacesException;
+
+/**
+ * <p class="changed_added_2_2">This exception is thrown by the runtime
+ * when a violation of the view protection mechanism is encountered.</p>
+ * 
+ * @since 2.2
+ */
+
+public class ProtectedViewException extends FacesException {
+    
+    public ProtectedViewException(Throwable rootCause) {
+        super(rootCause);
+    }
+
+    public ProtectedViewException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public ProtectedViewException(String message) {
+        super(message);
+    }
+
+    public ProtectedViewException() {
+    }
+    
+}
diff --git a/javax/faces/application/Resource.java b/javax/faces/application/Resource.java
new file mode 100644
index 0000000..1cd8b7a
--- /dev/null
+++ b/javax/faces/application/Resource.java
@@ -0,0 +1,336 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_1 changed_modified_2_2">An</span> instance of
+ * <code>Resource</code> is a Java object representation of the artifact
+ * that is served up in response to a <i>resource request</i> from the
+ * client.  Instances of <code>Resource</code> are normally created and
+ * initialized via calls to {@link ResourceHandler#createResource}.  See
+ * the documentation for {@link ResourceHandler} for more
+ * information.</p>
+ *
+ * <div class="changed_added_2_0">
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class Resource extends ViewResource {
+    
+    /**
+     * <p class="changed_added_2_0">This constant is used as the key in the 
+     * component attribute map of a composite component to associate 
+     * the component with its <code>Resource</code> instance.  The
+     * value for this key is the actual <code>Resource</code> instance.</p>
+     * 
+     */
+    public static final String COMPONENT_RESOURCE_KEY = 
+            "javax.faces.application.Resource.ComponentResource";
+
+
+    private String contentType;
+
+    private String libraryName;
+
+    private String resourceName;
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p class="changed_added_2_0">Return the MIME content-type for this resource.</p>
+     * @return the MIME content-type for this resource.
+     */
+    public String getContentType() {
+
+        return contentType;
+
+    }
+
+
+    /**
+
+     * <p class="changed_added_2_0">Set the MIME content-type for this
+     * resource.  The default implementation performs no validation on
+     * the argument.</p>
+     * @param contentType the MIME content-type for this resource.  The
+     * default implementation must accept <code>null</code> as a
+     * parameter.  
+     */
+    public void setContentType(String contentType) {
+
+        this.contentType = contentType;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the libraryName for this
+     * resource.  May be <code>null</code>.  The libraryName for a
+     * resource is an optional String that indicates membership in a
+     * "resource library".  All resources with the same libraryName
+     * belong to the same "resource library".  The "resource library"
+     * concept allows disambiguating resources that have the same
+     * resourceName.  See {@link ResourceHandler} for more
+     * information.</p>
+     *
+     * @return Return the libraryName for this resource.  May be
+     * <code>null</code>.
+     */
+    public String getLibraryName() {
+
+        return libraryName;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Set the libraryName for this resource.</p>
+     * @param libraryName the libraryName for this resource.  The
+     * default implementation must accept <code>null</code> for the
+     * <em>libraryName</em>.
+     */
+    public void setLibraryName(String libraryName) {
+
+        this.libraryName = libraryName;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the resourceName for this resource.
+     * Will never be null.  All <code>Resource</code> instances must
+     * have a resourceName.</p>
+     * @return Return the resourceName for this resource.  Will never be
+     * null.
+     */
+    public String getResourceName() {
+
+        return resourceName;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Set the resourceName for this resource.</p>
+     * @param resourceName a non-null String.
+     *
+     * @throws NullPointerException if argument
+     * <code>resourceName</code> is null.
+     */
+    public void setResourceName(String resourceName) {
+
+        if (null == resourceName) {
+            throw new NullPointerException("PENDING_I18N: All resources must have a non-null resourceName.");
+        }
+
+        this.resourceName = resourceName;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_1">If</span> the current request is a resource
+     * request, (that is, {@link ResourceHandler#isResourceRequest}
+     * returns <code>true</code>), return an <code>InputStream</code>
+     * containing the bytes of the resource.  Otherwise, throw an
+     * <code>IOException</code>.</p>
+     * @return an <code>InputStream</code> containing the bytes of the
+     * resource.</p>
+     *
+     * <p class="changed_modified_2_1">Any EL expressions present in the
+     * resource must be evaluated before serving the bytes of the
+     * resource.  Note that due to browser and server caching, EL
+     * expressions in a resource file will generally only be evaluated
+     * once, when the resource is first served up.  Therefore, using EL
+     * expressions that refer to per-request data is not advisable since
+     * this data can become stale.</p>
+     *
+     * @throws IOException if the current request is not a resource request.
+     */
+    public abstract InputStream getInputStream() throws IOException;
+
+
+    /**
+     * <p class="changed_added_2_0">Returns a mutable
+     * <code>Map<String, String></code> whose entries will be sent
+     * as response headers during {@link
+     * ResourceHandler#handleResourceRequest}.  The entries in this map
+     * must not persist beyond the scope of a single request.  Any
+     * modifications made to the map after the resource has been served
+     * will be ignored by the run-time.</p>
+     *
+     * @return a mutable <code>Map<String, String></code> of
+     * headers that will be included with the response.
+     */
+    public abstract Map<String, String> getResponseHeaders();
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Return</span> a path to this
+     * resource such that, when the browser resolves it against the base
+     * URI for the view that includes the resource, and issues a GET
+     * request to the resultant fully qualified URL, the bytes of the
+     * resource are returned in response.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p>The default implementation must
+     * implement the following algorithm.  For discussion, the return
+     * result from this method will be called <em>result</em>.</p>
+     *
+     * <ul>
+     *
+     * <li><p>Get the context-root for this web application, not ending
+     * in slash.  For discussion this will be called
+     * <em>contextRoot</em>.</p></li>
+     *
+     * <li><p>Discover if the <code>FacesServlet</code> is prefix or
+     * extension mapped, and the value of the mapping (including the
+     * leading '.'  in the case of extension mapping).  For discussion,
+     * this will be <em>facesServletMapping</em>.</p>
+     *
+     * <p>If prefix mapped, <em>result</em> must be</p>
+     *
+     * <ul><p><code>result = <em>contextRoot</em> + '/' +
+     * <em>facesServletMapping</em> + {@link
+     * ResourceHandler#RESOURCE_IDENTIFIER} + '/' + {@link
+     * #getResourceName}</code></p></ul>
+     *
+     * <p>If extension mapped, <em>result</em> must be</p>
+     *
+     * <ul><p><code>result = <em>contextRoot</em> + {@link
+     * ResourceHandler#RESOURCE_IDENTIFIER} + {@link #getResourceName} +
+     * <em>facesServletMapping</em></code></p></ul>
+     *
+     * </li>
+     *
+     * <li class="changed_modified_2_2"><p>Build up a string, called
+     * <em>resourceMetaData</em> which is an & separated string of
+     * name=value pairs suitable for inclusion in a URL query
+     * string.</p>
+     *
+     * <ul>
+     *
+     * <p>If {@link #getLibraryName} returns non-<code>null</code>,
+     * <code>resourceMetaData</code> must include "ln=" + the return
+     * from {@link #getLibraryName}</p>
+
+     * <p class="changed_added_2_2">If there is a
+     * <code>localePrefix</code> for this application, as defined in
+     * {@link ResourceHandler#LOCALE_PREFIX}, <code>resourceMetaData</code> must
+     * include "loc=" + the <code>localePrefix</code>.</p>
+
+
+     * <p class="changed_added_2_2">If this resource is contained in a
+     * resource library contract, <code>resourceMetaData</code> must
+     * include "con=" + the name of the resource library contract.</p>
+     *
+     * </ul>
+     *
+     * <p>Append "?" + <em>resourceMetaData</em> to <em>result</em>.</p>
+     *
+     * </li>
+     *
+     * <li><p>Make it portlet safe by passing the result through {@link
+     * ViewHandler#getResourceURL}.</p></li>
+     *
+     * </ul>
+
+     * </div>
+     *
+     * @return the path to this resource, intended to be included in the
+     * encoded view that is sent to the browser when sending a faces
+     * response.
+     */
+    public abstract String getRequestPath();
+
+
+    /**
+     * <p class="changed_added_2_0">Return an actual <code>URL</code>
+     * instance that refers to this resource instance.</p>
+     *
+     * @return Return an actual <code>URL</code> instance that refers to
+     * this resource instance.
+     */
+    @Override
+    public abstract URL getURL();
+
+
+    /**
+     * <p class="changed_added_2_0">Call through to {@link
+     * #getRequestPath} and return the result.</p>
+     *
+     * @return Call through to {@link #getRequestPath} and return the
+     * result.
+     */
+    public String toString() {
+        return getRequestPath();
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Return</span> <code>true</code> if
+     * the user-agent requesting this resource needs an update.  <span
+     * class="changed_added_2_2">If the {@code If-Modified-Since} HTTP
+     * header is available for this request, its value must be
+     * consulted, as specified in Section 14.25 of IETF RFC 2616, to
+     * determine the result.</span> Returns <code>false</code> if the
+     * user-agent does not need an update for this resource.</p>
+     *
+     * @return <code>true</code> or <code>false</code> depending on
+     * whether or not the user-agent needs an update of this resource.
+     */
+    public abstract boolean userAgentNeedsUpdate(FacesContext context);
+
+}
diff --git a/javax/faces/application/ResourceDependencies.java b/javax/faces/application/ResourceDependencies.java
new file mode 100644
index 0000000..1216158
--- /dev/null
+++ b/javax/faces/application/ResourceDependencies.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">Container annotation to specify multiple
+ * {@link ResourceDependency} annotations on a single class.  Example:</p>
+
+<pre><code>
+@ResourceDependencies( {
+  @ResourceDependency(library="corporate", name="css_master.css"),
+  @ResourceDependency(library="client01", name="layout.css"),
+  @ResourceDependency(library="corporate", name="typography.css"),
+  @ResourceDependency(library="client01", name="colorAndMedia.css"),
+  @ResourceDependency(library="corporate", name="table2.css"),
+  @ResourceDependency(library="fancy", name="commontaskssection.css"),
+  @ResourceDependency(library="fancy", name="progressBar.css"),
+  @ResourceDependency(library="fancy", name="css_ns6up.css")
+                       })
+</code></pre>
+
+
+ * <div class="changed_added_2_0">
+
+ * <p>The action described in {@link ResourceDependency} must be taken for each
+ * <code>@ResourceDependency</code> present in the container
+ * annotation. </p>
+
+ * </div>
+ */
+ at Retention(value=RetentionPolicy.RUNTIME)
+ at Target(value=ElementType.TYPE)
+ at Inherited
+public @interface ResourceDependencies {
+    
+    ResourceDependency[] value();
+}
diff --git a/javax/faces/application/ResourceDependency.java b/javax/faces/application/ResourceDependency.java
new file mode 100644
index 0000000..25c40f1
--- /dev/null
+++ b/javax/faces/application/ResourceDependency.java
@@ -0,0 +1,162 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+
+/**
+ * <p class="changed_added_2_0">Instances of {@link
+ * javax.faces.component.UIComponent} or {@link
+ * javax.faces.render.Renderer} that have this annotation (or {@link
+ * ResourceDependencies} attached at the class level will automatically
+ * have a resource dependency added so that the named resource will be
+ * present in user agent's view of the <code>UIViewRoot</code> in which
+ * this component or renderer is used.</p>
+
+ * <p/>
+
+ * <div class="changed_added_2_0">
+
+ * <p/>
+
+ * <p>The default implementation must support attaching this annotation
+ * to {@link javax.faces.component.UIComponent} or {@link
+ * javax.faces.render.Renderer} classes.  In both cases, the event that
+ * precipitates the processing of this annotation is the insertion of a
+ * <code>UIComponent</code> instance into the view hierarchy on an
+ * initial request for a view.  When that event happens, the following
+ * action must be taken.  </p>
+
+ * <ol>
+ * <li><p> If this annotation is not present on the class in question, no action
+ * must be taken.  </p></li>
+ *
+ * <li><p>Create a {@link javax.faces.component.UIOutput} instance by passing
+ * <code>javax.faces.Output</code>. to {@link Application#createComponent(java.lang.String)}.</p></li>
+ *
+ * <li><p>Get the annotation instance from the class and obtain the values of
+ * the <em>name</em>, <em>library</em>, and <em>target</em>
+ * attributes.</p></li>
+ *
+ * <li><p>If <em>library</em> is the empty string, let <em>library</em> be
+ * <code>null</code>.</p></li>
+ *
+ * <li><p>If <em>target</em> is the empty string, let <em>target</em> be
+ * <code>null</code>.</p></li>
+ *
+ * <li><p>Obtain the <em>renderer-type</em> for the resource <em>name</em> by
+ * passing <em>name</em> to {@link ResourceHandler#getRendererTypeForResourceName}.</p></li>
+ *
+ * <li><p>Call <code>setRendererType</code> on the <code>UIOutput</code>
+ * instance, passing the <em>renderer-type</em>.</p></li>
+ *
+ * <li><p>Obtain the <code>Map</code> of attributes from the
+ * <code>UIOutput</code> component by calling {@link javax.faces.component.UIComponent#getAttributes}.</p></li>
+ *
+ * <li><p>Store the <em>name</em> into the attributes <code>Map</code> under the
+ * key "name".</p></li>
+ *
+ * <li><p>If <em>library</em> is non-<code>null</code>, store it under the key
+ * "library".</p></li>
+ *
+ * <li><p>If <em>target</em> is non-<code>null</code>, store it under the key
+ * "target". </p></li>
+ *
+ * <li><p>Otherwise, if <em>target</em> is <code>null</code>, call {@link
+ * javax.faces.component.UIViewRoot#addComponentResource(javax.faces.context.FacesContext,
+ * javax.faces.component.UIComponent)}, passing the <code>UIOutput</code>
+ * instance as the second argument.</p></li>
+ * </ol>
+
+ * <p>Example:</p>
+
+<pre><code>
+  @ResourceDependency(library="corporate", name="colorAndMedia.css"),
+</code></pre>
+
+
+ * </div>
+ *
+ * @since 2.0
+ */
+ at Retention(value = RetentionPolicy.RUNTIME)
+ at Target(value = ElementType.TYPE)
+ at Inherited
+public @interface ResourceDependency {
+
+    /**
+     * <p class="changed_added_2_0">The <em>resourceName</em> of the
+     * resource pointed to by this <code>ResourceDependency</code>.  It
+     * is valid to have EL Expressions in the value of this attribute,
+     * as long as the expression resolves to an instance of the expected
+     * type.</p>
+     */
+    public String name();
+
+    /**
+     * <p class="changed_added_2_0">The <em>libraryName</em> in which
+     * the resource pointed to by this <code>ResourceDependency</code>
+     * resides.  If not specified, defaults to the empty string.  It is
+     * valid to have EL Expressions in the value of this attribute, as
+     * long as the expression resolves to an instance of the expected
+     * type.</p>
+     */
+    public String library() default "";
+
+    /**
+     * <p class="changed_added_2_0">The value given for this attribute
+     * will be passed as the "target" argument to {@link
+     * javax.faces.component.UIViewRoot#addComponentResource(javax.faces.context.FacesContext,
+     * javax.faces.component.UIComponent, java.lang.String)}.  If this
+     * attribute is specified, {@link
+     * javax.faces.component.UIViewRoot#addComponentResource(javax.faces.context.FacesContext,javax.faces.component.UIComponent)}
+     * must be called instead, as described above.  It is valid to have
+     * EL Expressions in the value of this attribute, as long as the
+     * expression resolves to an instance of the expected type.</p>
+     */
+    public String target() default "";
+
+}
diff --git a/javax/faces/application/ResourceHandler.java b/javax/faces/application/ResourceHandler.java
new file mode 100644
index 0000000..e491819
--- /dev/null
+++ b/javax/faces/application/ResourceHandler.java
@@ -0,0 +1,667 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.io.IOException;
+
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p class="changed_added_2_0"><strong
+ * class="changed_modified_2_0_rev_a
+ * changed_modified_2_2 changed_modified_2_3">ResourceHandler</strong> is the run-time API by
+ * which {@link javax.faces.component.UIComponent} and {@link
+ * javax.faces.render.Renderer} instances<span
+ * class="changed_added_2_2">, and the {@link
+ * javax.faces.view.ViewDeclarationLanguage} can reference {@link
+ * Resource} instances.</span>  An implementation of this class must be
+ * thread-safe.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p class="javadocSection">Packaging Resources</p>
+ *
+ * <ul>
+ *
+ *  <p>ResourceHandler defines a path based packaging convention for
+ *  resources.  The default implementation of
+ *  <code>ResourceHandler</code> must support packaging resources in the
+ *  classpath or in the web application root. See section JSF.2.6.1 of the
+ *  spec prose document <a
+ *  href="../../../overview-summary.html#prose_document">linked in the
+ *  overview summary</a> for the normative specification of packaging
+ *  resources.</p>
+
+ * <p>Briefly, The default implementation must support packaging
+ * resources in the web application root under the path</p>
+ *
+ * <p><code>resources/<resourceIdentifier></code></p>
+ *
+ * <p>relative to the web app root.  <span
+ * class="changed_added_2_2">"resources" is the default location, but
+ * this location can be changed by the value of the {@link
+ * #WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME}
+ * <code><context-param></code>.</span></p>
+ *
+ * <p>For the default implementation, resources packaged in the
+ * classpath must reside under the JAR entry name</p>
+
+ * <p><code>META-INF/resources/<resourceIdentifier></code></p>
+
+ * <div class="changed_added_2_2">
+
+ * <p>In the case of Faces Flows packaged
+ * within jar files, resources packaged in the classpath must reside
+ * under the jar entry name</p>
+
+ * <p><code>META-INF/flows/<resourceIdentifier></code></p>
+
+ * </div>
+
+ * <p><code><resourceIdentifier></code> consists of several
+ * segments, specified as follows.</p>
+
+ * <p><code>[localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion]</code></p>
+
+ * <p class="changed_modified_2_0_rev_a">None of the segments in the
+ * resourceIdentifier may be relative paths, such as
+ * ‘../otherLibraryName’.  The implementation is not
+ * required to support the <code>libraryVersion</code> and
+ * <code>resourceVersion</code> segments for the JAR packaging case.</p>
+
+ * <p>Note that <em>resourceName</em> is the only required segment.</p>
+ *
+ * </ul>
+ *
+ * <p class="javadocSection">Encoding Resources</p>
+ *
+ * <ul>
+ *
+ *  <p>During the handling of view requests, the JSF run-time may be
+ *  called upon to encode a resource in such a way as to instruct the
+ *  user-agent to make a subsequent resource request.  This behavior is
+ *  orchestrated by one of the resource renderers
+ *  (<code>ScriptRenderer</code>, <code>StylesheetRenderer</code>,
+ *  <code>ImageRenderer</code>), which all call {@link Resource#getRequestPath}
+ *  to obtain the encoded URI for the resource.  See {@link
+ *  Resource#getRequestPath} and the Standard HTML RenderKit specification for
+ *  the complete specification.</p>
+
+ * <p class="changed_added_2_2">This usage of resources does not apply
+ * for resources that correspond to VDL resources.</p>
+ *
+ * </ul>
+ *
+ * <p class="javadocSection">Decoding Resources</p>
+ *
+ * <ul>
+ *
+ *  <p>During the handling of resource requests, the JSF run-time will
+ *  be called upon to decode a resource in such a way as to serve up
+ *  the bytes of the resource to the user-agent.  This behavior is
+ *  orchestrated by {@link #handleResourceRequest}, which calls {@link
+ *  Resource#getInputStream} to obtain bytes of the resource.  See
+ *  {@link #handleResourceRequest} for the complete specification.</p>
+
+ * <p class="changed_added_2_2">This usage of resources does not apply
+ * for resources that correspond to VDL resources.</p>
+
+ * </ul>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class ResourceHandler {
+
+    /**
+
+     * <p class="changed_added_2_0">{@link Resource#getRequestPath} returns the
+     * value of this constant as the prefix of the URI.  {@link
+     * #handleResourceRequest(javax.faces.context.FacesContext)} looks for the value of this constant
+     * within the request URI to determine if the request is a resource
+     * request or a view request.</p>
+
+     */
+    public static final String RESOURCE_IDENTIFIER = "/javax.faces.resource";
+
+
+    /**
+     * <p class="changed_added_2_2 changed_modified_2_3">This file must
+     * be located in
+     * <code>META-INF/contracts/<contractName>/</code> in a jar
+     * file that contains a resource library contract, where
+     * <code><contractName></code> is the name of the contract. If
+     * the jar file contains multiple contracts, the marker file must be
+     * present in each one. See “constant field values” for
+     * the name of the file that must be placed at that location.</p>
+
+     * @since 2.2
+     */
+
+    public static final String RESOURCE_CONTRACT_XML = "javax.faces.contract.xml";
+
+
+    /**
+
+     * <p class="changed_added_2_2">If a
+     * <code><context-param></code> with the param name equal to
+     * the value of {@link #WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME}
+     * exists, the runtime must interpret its value as a path, relative
+     * to the web app root, where resources are to be located.  This
+     * param value must not start with a "/", though it may contain "/"
+     * characters.  If no such <code><context-param></code> exists, or
+     * its value is invalid, the value "resources", without the quotes,
+     * must be used by the runtime as the value.</p>
+     *
+     * @since 2.2
+     */
+
+    public static final String WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME = 
+        "javax.faces.WEBAPP_RESOURCES_DIRECTORY";
+
+    /**
+
+     * <p class="changed_added_2_2">If a
+     * <code><context-param></code> with the param name equal to
+     * the value of {@link #WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME}
+     * exists, the runtime must interpret its value as a path, relative
+     * to the web app root, where resource library contracts are to be located.  This
+     * param value must not start with a "/", though it may contain "/"
+     * characters.  If no such <code><context-param></code> exists, or
+     * its value is invalid, the value "contracts", without the quotes,
+     * must be used by the runtime as the value.</p>
+     *
+     * @since 2.2
+     */
+
+    public static final String WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME = 
+        "javax.faces.WEBAPP_CONTRACTS_DIRECTORY";
+
+    /**
+     * <p class="changed_added_2_0">The name of a key within the
+     * application message bundle named by the return from {@link
+     * Application#getMessageBundle} whose value is the locale prefix
+     * used to find a packaged resource to return from {@link
+     * #createResource} (or one of its variants).
+     */
+
+    public static final String LOCALE_PREFIX = 
+	"javax.faces.resource.localePrefix";
+
+
+
+    /**
+     * <p class="changed_added_2_0">The <code>ServletContext</code> init
+     * parameter consulted by the {@link #handleResourceRequest} to tell
+     * which kinds of resources must never be served up in response to a
+     * resource request.  The value of this parameter is a single space
+     * separated list of file extensions, including the leading '.'
+     * character (without the quotes).  If not specified, the default
+     * value given in the value of the {@link
+     * #RESOURCE_EXCLUDES_DEFAULT_VALUE} constant is used.  If manually
+     * specified, the given value entirely overrides the default one and
+     * does not supplement it.  </p>
+     */
+    public static final String RESOURCE_EXCLUDES_PARAM_NAME =
+          "javax.faces.RESOURCE_EXCLUDES";
+
+    /**
+     * <p class="changed_added_2_0 changed_modified_2_1">The default value for the {@link
+     * #RESOURCE_EXCLUDES_PARAM_NAME} init param.</p>
+     */
+    public static final String RESOURCE_EXCLUDES_DEFAULT_VALUE =
+          ".class .jsp .jspx .properties .xhtml .groovy";
+
+
+
+    // ---------------------------------------------------------- Public Methods
+    
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Create</span> an instance of
+     * <code>ViewResource</code> given the argument
+     * <code>resourceName</code>.  The content-type of the resource is
+     * derived by passing the <em>resourceName</em> to {@link
+     * javax.faces.context.ExternalContext#getMimeType}</p>
+
+     * <div class="changed_added_2_0">
+
+     * <p>The algorithm specified in section JSF.2.6.1.4 of the spec
+     * prose document <a
+     * href="../../../overview-summary.html#prose_document">linked in
+     * the overview summary</a> must be executed to create the
+     * <code>Resource</code>.  <span class="changed_added_2_2">New
+     * requirements were introduced in version 2.2 of the specification.
+     * For historical reasons, this method operate correctly when the
+     * argument {@code resourceName} is of the form
+     * {@code libraryName/resourceName}, even when {@code resourceName}
+     * contains '/' characters.  </span></p>
+
+     * </div>
+
+     * @param resourceName the name of the resource.
+     *
+     * @throws NullPointerException if <code>resourceName</code> is
+     *  <code>null</code>.
+     *
+     * @return a newly created <code>Resource</code> instance, suitable
+     * for use in encoding or decoding the named resource.
+     */
+    public abstract Resource createResource(String resourceName);
+    
+    /**
+     * <p class="changed_added_2_2">Create an instance of <code>Resource</code>
+     * given the argument <code>resourceName</code>, which may contain "/" 
+     * characters.  The {@link javax.faces.view.ViewDeclarationLanguage} calls
+     * this method when it needs to load a view from a persistent store, such as
+     * a filesystem.  This method is functionality equivalent to 
+     * {@link #createResource(java.lang.String)}, but all callsites that need
+     * to load VDL views must use this method so that classes that want to 
+     * decorate the <code>ResourceHandler</code> in order to only affect the
+     * loading of views may do so without affecting the processing of other
+     * kinds of resources, such as scripts and stylesheets.
+     * A {@link javax.faces.context.FacesContext} must be present
+     * before calling this method.  To preserve compatibility with prior revisions of the
+     * specification, a default implementation must be provided that calls
+     * {@link #createResource(java.lang.String)}. </p>
+
+     * <div class="changed_added_2_2">
+
+     * <p>The default implementation must look for the resource in the
+     * following places, in this order.</p>
+
+     * <ul>
+
+     * <li><p>Considering resource library contracts (at the locations
+     * specified in the spec prose document section <em>Resource Library
+     * Contracts</em> in the <em>Request Processing Lifecycle</em>
+     * chapter).</p></li>
+
+     * <li><p>Considering the web app root.</p></li>
+
+     *  <li><p>Considering faces flows (at the locations specified in
+     * the spec prose document section <em>Faces Flows</em> in the
+     * <em>Using JSF in Web Applications</em> chapter).</p></li>
+
+     * </ul>
+     
+     * <p>Call {@link FacesContext#getResourceLibraryContracts}.  If the
+     * result is non-{@code null} and not empty, for each value in the
+     * list, treat the value as the name of a resource library contract.
+     * If the argument {@code resoureName} exists as a resource in the
+     * resource library contract, return it.  Otherwise, return the
+     * resource (not in the resource library contract), if found.
+     * Otherwise, return {@code null}.</p>
+
+     * </div>
+
+     * @param context the {@link FacesContext} for this request.
+
+     * @param resourceName the name of the resource to be interpreted as a view
+     * by the {@link javax.faces.view.ViewDeclarationLanguage}.
+
+     * @throws NullPointerException if <code>resourceName</code> is
+     *  {@code null}.
+
+     * @return a newly created {@link ViewResource} instance, suitable
+     * for use by the {@link javax.faces.view.ViewDeclarationLanguage}.
+     * 
+     * @since 2.2
+
+     */
+    
+    public ViewResource createViewResource(FacesContext context, String resourceName) {
+        return context.getApplication().getResourceHandler().createResource(resourceName);
+    }
+
+    /**
+     * <p class="changed_added_2_2">Create an instance of
+     * <code>Resource</code> given the argument
+     * <code>resourceId</code>.  The content-type of the resource is
+     * derived by passing the <em>resourceName</em> to {@link
+     * javax.faces.context.ExternalContext#getMimeType}</p>
+
+     * <div class="changed_added_2_2">
+
+     * <p>The resource must be identified according to the specification
+     * in JSF.2.6.1.3 of the spec prose document <a
+     * href="../../../overview-summary.html#prose_document">linked in
+     * the overview summary</a>.  New requirements were introduced in
+     * version 2.2 of the specification.</p>
+
+     * </div>
+
+     * @param resourceId the resource identifier of the resource.
+     *
+     * @throws NullPointerException if <code>resourceId</code> is
+     *  <code>null</code>.
+     *
+     * @return a newly created <code>Resource</code> instance, suitable
+     * for use in encoding or decoding the named resource.
+     * 
+     * @since 2.2
+     */
+
+    public Resource createResourceFromId(String resourceId) {
+        return null;
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Create</span> an instance of
+     * <code>Resource</code> with a resourceName given by the value of
+     * the argument <code>resourceName</code> that is a member of the
+     * library named by the argument <code>libraryName</code>.  The
+     * content-type of the resource is derived by passing the
+     * <em>resourceName</em> to {@link
+     * javax.faces.context.ExternalContext#getMimeType}.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * <p>The algorithm specified in section JSF.2.6.1.4 of the spec
+     * prose document <a
+     * href="../../../overview-summary.html#prose_document">linked in
+     * the overview summary</a> must be executed to create the
+     * <code>Resource</code>. <span class="changed_added_2_2">New
+     * requirements were introduced in version 2.2 of the
+     * specification.</span></p>
+
+     * </div>
+
+     * @param resourceName the name of the resource.
+     *
+     * @param libraryOrContractName <span class="changed_modified_2_2">the
+     * name of the library (or contract) in which this resource
+     * resides, may be <code>null</code>. If there is a conflict between
+     * the name of a resource library and a resource library contract,
+     * the resource library takes precedence.  <span
+     * class="changed_modified_2_0_rev_a">May not include relative
+     * paths, such as "../".</span></span>
+     *
+     * @throws <code>NullPointerException</code> if
+     * <code>resourceName</code> is <code>null</code>
+     *
+     * @return a newly created <code>Resource</code> instance, suitable
+     * for use in encoding or decoding the named resource.
+     */
+    public abstract Resource createResource(String resourceName,
+                                            String libraryOrContractName);
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Create</span> an instance of
+     * <code>Resource</code> with a <em>resourceName</em> given by the
+     * value of the argument <code>resourceName</code> that is a member
+     * of the library named by the argument <code>libraryName</code>
+     * that claims to have the content-type given by the argument
+     * <code>content-type</code>.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * <p>The algorithm specified in section JSF.2.6.1.4 of the spec
+     * prose document <a
+     * href="../../../overview-summary.html#prose_document">linked in
+     * the overview summary</a> must be executed to create the
+     * <code>Resource</code>. <span class="changed_added_2_2">New
+     * requirements were introduced in version 2.2 of the
+     * specification.</span></p>
+
+     * </div>
+
+     * @param resourceName the name of the resource.
+     *
+     * @param libraryName the name of the library in which this resource
+     * resides, may be <code>null</code>.  <span
+     * class="changed_modified_2_0_rev_a">May not include relative
+     * paths, such as "../".</span>
+     *
+     * @param contentType the mime content that this
+     * <code>Resource</code> instance will return from {@link
+     * Resource#getContentType}.  If the value is <code>null</code>, The
+     * content-type of the resource is derived by passing the
+     * <em>resourceName</em> to {@link
+     * javax.faces.context.ExternalContext#getMimeType}</p>
+     *
+     * @throws <code>NullPointerException</code> if
+     * <code>resourceName</code> is <code>null</code>.
+     *
+     * @return a newly created <code>Resource</code> instance, suitable
+     * for use in encoding or decoding the named resource.
+     */
+    public abstract Resource createResource(String resourceName,
+                                            String libraryName,
+                                            String contentType);
+    
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Return</span> <code>true</code> if
+     * the resource library named by the argument
+     * <code>libraryName</code> can be found.  <span
+     * class="changed_added_2_2">If there is a <code>localePrefix</code>
+     * for this application, as defined in {@link #LOCALE_PREFIX}, first
+     * look for the library with the prefix.  If no such library is
+     * found, look for the library without the prefix.  This allows
+     * developers to avoid duplication of files.  For example, consider
+     * the case where the developer wants to have a resource library
+     * containing a localized image resource and a non-localized script
+     * resource.  By checking both locations for the existence of the
+     * library, along with other spec changes in section 2.6.1.4, this
+     * scenario is enabled.</span></p>
+     *
+     * @since 2.0
+     * 
+     */
+    
+    public abstract boolean libraryExists(String libraryName);
+
+
+    /**
+     * <p class="changed_added_2_0">This method specifies the contract
+     * for satisfying resource requests.  This method is called from
+     * {@link javax.faces.webapp.FacesServlet#service} after that method
+     * determines the current request is a resource request by calling
+     * {@link #isResourceRequest}.  Thus, <code>handleResourceRequest</code>
+     * may assume that the current request is a resource request.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p>The default implementation must implement an algorithm
+     * semantically identical to the following algorithm.</p>
+     *
+     * For discussion, in all cases when a status code is to be set,
+     * this spec talks only using the Servlet API, but it is understood
+     * that in a portlet environment the appropriate equivalent API must
+     * be used.
+     *
+     * <ul>
+     *
+     * <li><p>If the <em>resourceIdentifier</em> ends with any of the
+     * extensions listed in the value of the {@link
+     * #RESOURCE_EXCLUDES_PARAM_NAME} init parameter,
+     * <code>HttpServletRequest.SC_NOT_FOUND</code> must be passed to
+     * <code>HttpServletResponse.setStatus()</code>, then
+     * <code>handleResourceRequest</code> must immediately return.</p></li>
+     *
+     * <li><p>Extract the <em>resourceName</em> from the
+     * <em>resourceIdentifier</em> by taking the substring of
+     * <em>resourceIdentifier</em> that starts at <code>{@link
+     * #RESOURCE_IDENTIFIER}.length() + 1</code> and goes to the end of
+     * <em>resourceIdentifier</em>.  If no <em>resourceName</em> can be
+     * extracted, <code>HttpServletRequest.SC_NOT_FOUND</code> must be
+     * passed to <code>HttpServletResponse.setStatus()</code>, then
+     * <code>handleResourceRequest</code> must immediately return.</p></li>
+     *
+     * <li><p>Extract the <em>libraryName</em> from the request by
+     * looking in the request parameter map for an entry under the key
+     * "ln", without the quotes.  If found, use its value as the
+     * <em>libraryName</em>.</p></li>
+     *
+     * <li><p>If <em>resourceName</em> and <em>libraryName</em> are
+     * present, call {@link #createResource(String, String)} to create
+     * the <code>Resource</code>.  If only <em>resourceName</em> is
+     * present, call {@link #createResource(String)} to create the
+     * <code>Resource</code>.  If the <code>Resource</code> cannot be
+     * successfully created,
+     * <code>HttpServletRequest.SC_NOT_FOUND</code> must be passed to
+     * <code>HttpServletResponse.setStatus()</code>, then
+     * <code>handleResourceRequest</code> must immediately return.</p></li>
+     *
+     * <li><p>Call {@link Resource#userAgentNeedsUpdate}.  If this
+     * method returns false,
+     * <code>HttpServletRequest.SC_NOT_MODIFIED</code> must be passed to
+     * <code>HttpServletResponse.setStatus()</code>, then
+     * <code>handleResourceRequest</code> must immediately return.</p></li>
+     *
+     * <li><p>Pass the result of {@link Resource#getContentType} to
+     * <code>HttpServletResponse.setContentType.</code> </p></li>
+     *
+     * <li><p>Call {@link Resource#getResponseHeaders}.  For each entry
+     * in this <code>Map</code>, call
+     * <code>HttpServletResponse.setHeader()</code>, passing the key as
+     * the first argument and the value as the second argument.</p></li>
+     *
+     * <li><p>Call {@link Resource#getInputStream} and serve up the
+     * bytes of the resource to the response.</p></li>
+     *
+     * <li><p>Call <code>HttpServletResponse.setContentLength()</code>
+     * passing the byte count of the resource.</p></li>
+     *
+     * <li><p>If an <code>IOException</code> is thrown during any of the
+     * previous steps, log a descriptive, localized message, including
+     * the <em>resourceName</em> and <em>libraryName</em> (if present).
+     * Then, <code>HttpServletRequest.SC_NOT_FOUND</code> must be passed
+     * to <code>HttpServletResponse.setStatus()</code>, then
+     * <code>handleResourceRequest</code> must immediately return.</p></li>
+     *
+     * <li><p>In all cases in this method, any streams, channels,
+     * sockets, or any other IO resources must be closed before this
+     * method returns.</p></li>
+     *
+     * </ul>
+     *
+     * </div>
+     *
+     * @param context the {@link javax.faces.context.FacesContext} for this
+     * request
+     */
+    public abstract void handleResourceRequest(FacesContext context)
+    throws IOException;
+
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if the
+     * current request is a resource request.  This method is called by
+     * {@link javax.faces.webapp.FacesServlet#service} to determine if
+     * this request is a <em>view request</em> or a <em>resource
+     * request</em>.</p>
+     *
+     * @param context the {@link javax.faces.context.FacesContext} for this
+     * request
+     * @return <code>true</code> if the current request is a resource
+     * request, <code>false</code> otherwise.
+     */
+    public abstract boolean isResourceRequest(FacesContext context);
+    
+    /**
+     * <p class="changed_added_2_2">Return {@code true} if the argument {@code url}
+     * contains the string given by the value of the constant
+     * {@link ResourceHandler#RESOURCE_IDENTIFIER}, false otherwise.</p>
+     * 
+     * @param url the url to inspect for the presence of {@link ResourceHandler#RESOURCE_IDENTIFIER}.
+
+     * @throws NullPointerException if the argument url is {@code null}.
+     */
+    
+    public boolean isResourceURL(String url) {
+        boolean result = false;
+        if (null == url) {
+            throw new NullPointerException("null url");
+        }
+        result = url.contains(ResourceHandler.RESOURCE_IDENTIFIER);
+        
+        return result;
+        
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Return the <code>renderer-type</code> for a 
+     * {@link javax.faces.render.Renderer} that is capable of rendering this 
+     * resource. The default implementation must return values according to the
+     * following table.  If no <code>renderer-type</code> can be determined,
+     * <code>null</code> must be returned.</p> 
+     * 
+     * <table border="1">
+     * 
+     * <tr>
+     * 
+     * <th>example resource name</th>
+     * 
+     * <th>renderer-type</th>
+     * 
+     * </tr>
+     * 
+     * <tr>
+     * 
+     * <td>mycomponent.js</td>
+     * 
+     * <td><code>javax.faces.resource.Script</code></td>
+     * 
+     * </tr>
+     * 
+     * <tr>
+     * 
+     * <td>mystyle.css</td>
+     * 
+     * <td><code>javax.faces.resource.Stylesheet</code></td>
+     * 
+     * </tr>
+     * 
+     * </table>
+     */
+    
+    public abstract String getRendererTypeForResourceName(String resourceName);
+    
+
+}
diff --git a/javax/faces/application/ResourceHandlerWrapper.java b/javax/faces/application/ResourceHandlerWrapper.java
new file mode 100644
index 0000000..d313ae5
--- /dev/null
+++ b/javax/faces/application/ResourceHandlerWrapper.java
@@ -0,0 +1,208 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.io.IOException;
+
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_0_rev_a
+ * changed_modified_2_2">Provides</span> a simple implementation of
+ * {@link ResourceHandler} that can be subclassed by developers wishing
+ * to provide specialized behavior to an existing {@link
+ * ResourceHandler} instance.  The default implementation of all methods
+ * is to call through to the wrapped {@link ResourceHandler}.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class ResourceHandlerWrapper extends ResourceHandler implements FacesWrapper<ResourceHandler> {
+
+    /**
+     * @return the instance that we are wrapping.
+     */ 
+    @Override
+    public abstract ResourceHandler getWrapped();
+
+
+    // -------------------------------------------- Methods from ResourceHandler
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResourceHandler#createResource(String)} on the
+     * wrapped {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public Resource createResource(String resourceName) {
+
+        return getWrapped().createResource(resourceName);
+
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link ResourceHandler#createResourceFromId(String)} on the
+     * wrapped {@link ResourceHandler} object.</p>
+     *
+     * @since 2.2
+     */
+    @Override
+    public Resource createResourceFromId(String resourceId) {
+
+        return getWrapped().createResourceFromId(resourceId);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResourceHandler#createResource(String, String)} on the wrapped
+     * {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public Resource createResource(String resourceName, String libraryName) {
+
+        return getWrapped().createResource(resourceName, libraryName);
+
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link ResourceHandler#createViewResource} on the wrapped
+     * {@link ResourceHandler} object.</p>
+     */
+
+    @Override
+    public ViewResource createViewResource(FacesContext context, String resourceName) {
+        return getWrapped().createViewResource(context, resourceName);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResourceHandler#createResource(String, String,
+     * String)} on the wrapped {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public Resource createResource(String resourceName,
+                                   String libraryName,
+                                   String contentType) {
+
+        return getWrapped().createResource(resourceName,
+                                           libraryName,
+                                           contentType);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link
+     * ResourceHandler#handleResourceRequest(javax.faces.context.FacesContext)}
+     * on the wrapped {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public void handleResourceRequest(FacesContext context) throws IOException {
+
+        getWrapped().handleResourceRequest(context);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResourceHandler#isResourceRequest(javax.faces.context.FacesContext)} on the
+     * wrapped {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public boolean isResourceRequest(FacesContext context) {
+
+        return getWrapped().isResourceRequest(context);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResourceHandler#isResourceURL} on the
+     * wrapped {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public boolean isResourceURL(String url) {
+        return getWrapped().isResourceURL(url);
+    }
+    
+    
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResourceHandler#libraryExists(String)} on the
+     * wrapped {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public boolean libraryExists(String libraryName) {
+
+        return getWrapped().libraryExists(libraryName);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResourceHandler#getRendererTypeForResourceName(String)} on the
+     * wrapped {@link ResourceHandler} object.</p>
+     */
+    @Override
+    public String getRendererTypeForResourceName(String resourceName) {
+
+        return getWrapped().getRendererTypeForResourceName(resourceName);
+
+    }
+    
+}
diff --git a/javax/faces/application/ResourceWrapper.java b/javax/faces/application/ResourceWrapper.java
new file mode 100644
index 0000000..707ff7f
--- /dev/null
+++ b/javax/faces/application/ResourceWrapper.java
@@ -0,0 +1,216 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Map;
+
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Provides</span> 
+ * a simple implementation of
+ * {@link Resource} that can be subclassed by developers wishing to
+ * provide specialized behavior to an existing {@link Resource}
+ * instance.  The default implementation of all methods is to call
+ * through to the wrapped {@link Resource}.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p>Usage: extend
+ * this class and override {@link #getWrapped} to return the instance we
+ * are wrapping.</p>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class ResourceWrapper extends Resource implements FacesWrapper<Resource> {
+
+    /**
+     * @return the instance that we are wrapping.
+     */ 
+    @Override
+    public abstract Resource getWrapped();
+
+
+    // --------------------------------------------------- Methods from Resource
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Resource#getInputStream} on the wrapped {@link
+     * ResourceHandler} object.</p>
+     */
+    @Override
+    public InputStream getInputStream() throws IOException {
+
+        return getWrapped().getInputStream();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Resource#getURL} on the wrapped {@link
+     * ResourceHandler} object.</p>
+     */
+    @Override
+    public URL getURL() {
+
+        return getWrapped().getURL();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Resource#getResponseHeaders} on the wrapped {@link
+     * ResourceHandler} object.</p>
+     */
+    @Override
+    public Map<String, String> getResponseHeaders() {
+
+        return getWrapped().getResponseHeaders();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Resource#getRequestPath} on the wrapped {@link
+     * ResourceHandler} object.</p>
+     */
+    @Override
+    public String getRequestPath() {
+
+        return getWrapped().getRequestPath();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link Resource#userAgentNeedsUpdate} on the wrapped {@link
+     * ResourceHandler} object.</p>
+     */
+    @Override
+    public boolean userAgentNeedsUpdate(FacesContext context) {
+
+        return getWrapped().userAgentNeedsUpdate(context);
+        
+    }
+
+
+    /**
+     * <p class="changed_added_2_2"> The default behavior of this method is to call
+     * {@link Resource#getContentType()} on the wrapped {@link ResourceHandler} object. </p>
+     */
+    @Override
+    public String getContentType() {
+
+        return getWrapped().getContentType();
+        
+    }
+
+    
+    /**
+     * <p class="changed_added_2_2"> The default behavior of this method is to call
+     * {@link Resource#setContentType(String)} on the wrapped {@link ResourceHandler} object. </p>
+     */
+    @Override
+    public void setContentType(String contentType) {
+
+        getWrapped().setContentType(contentType);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_2"> The default behavior of this method is to call
+     * {@link Resource#getLibraryName()} on the wrapped {@link ResourceHandler} object. </p>
+     */
+    @Override
+    public String getLibraryName() {
+
+        return getWrapped().getLibraryName();
+
+    }
+    
+    
+    /**
+     * <p class="changed_added_2_2"> The default behavior of this method is to call
+     * {@link Resource#setLibraryName(String)} on the wrapped {@link ResourceHandler} object. </p>
+     */
+    @Override
+    public void setLibraryName(String libraryName) {
+        
+        getWrapped().setLibraryName(libraryName);
+        
+    }
+
+    
+    /**
+     * <p class="changed_added_2_2"> The default behavior of this method is to call
+     * {@link Resource#getResourceName()} on the wrapped {@link ResourceHandler} object. </p>
+     */
+    @Override
+    public String getResourceName() {
+        
+        return getWrapped().getResourceName();
+        
+    }
+    
+    
+    /**
+     * <p class="changed_added_2_2"> The default behavior of this method is to call
+     * {@link Resource#setResourceName(String)} on the wrapped {@link ResourceHandler} object. </p>
+     */
+    @Override
+    public void setResourceName(String resourceName) {
+        
+        getWrapped().setResourceName(resourceName);
+        
+    }
+        
+}
diff --git a/javax/faces/application/SharedUtils.java b/javax/faces/application/SharedUtils.java
new file mode 100644
index 0000000..3072571
--- /dev/null
+++ b/javax/faces/application/SharedUtils.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+class SharedUtils {
+
+    /*
+    * Determine whether String is a mixed value binding expression or not.
+    */
+    static boolean isMixedExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        // if it doesn't start and end with delimiters
+        return (!(expression.startsWith("#{") && expression.endsWith("}")))
+                  && isExpression(expression);
+
+    }
+
+
+    /*
+    * Determine whether String is a value binding expression or not.
+    */
+    static boolean isExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        //check to see if attribute has an expression
+        int start = expression.indexOf("#{");
+        return start != -1 && expression.indexOf('}', start+2) != -1;
+    }
+
+    static Map<String, List<String>> evaluateExpressions(FacesContext context, Map<String, List<String>> map) {
+        if (map != null && !map.isEmpty()) {
+            Map<String, List<String>> ret = new HashMap<String, List<String>>(map.size());
+            for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+                ret.put(entry.getKey(), evaluateExpressions(context, entry.getValue()));
+            }
+            
+            return ret;
+        }
+        
+        return map;
+    }
+     
+    static List<String> evaluateExpressions(FacesContext context, List<String> values) {
+         if (!values.isEmpty()) {
+             List<String> ret = new ArrayList<String>(values.size());
+             Application app = context.getApplication();
+             for (String val : values) {
+                 if (val != null) {
+                     String value = val.trim();
+                     if (isExpression(value)) {
+                         value = app.evaluateExpressionGet(context,
+                                                           value,
+                                                           String.class);
+                     }
+                     ret.add(value);
+                 }
+             }
+             
+             return ret;
+         }
+         return values;
+     }
+
+
+
+}
+
+     
+
diff --git a/javax/faces/application/StateManager.java b/javax/faces/application/StateManager.java
new file mode 100644
index 0000000..0bc1183
--- /dev/null
+++ b/javax/faces/application/StateManager.java
@@ -0,0 +1,596 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.RenderKit;
+import javax.faces.render.ResponseStateManager;
+
+import java.io.IOException;
+
+
+/**
+ * <p>
+ * <strong class="changed_modified_2_0 changed_modified_2_1 changed_modified_2_2">StateManager</strong>
+ * directs the process of saving and
+ * restoring the view between requests.  <span class="changed_added_2_0">An
+ * implementation
+ * of this class must be thread-safe.</span>  The {@link StateManager}
+ * instance for an application is retrieved from the {@link Application}
+ * instance, and thus cannot know any details of the markup language
+ * created by the {@link RenderKit} being used to render a view.  The
+ * {@link StateManager} utilizes a helper object ({@link
+ * ResponseStateManager}), that is provided by the {@link RenderKit}
+ * implementation and is therefore aware of the markup language
+ * details.</p>
+ */
+
+public abstract class StateManager {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The <code>ServletContext</code> init parameter consulted by
+     * the <code>StateManager</code> to tell where the state should be
+     * saved.  Valid values are given as the values of the constants:
+     * {@link #STATE_SAVING_METHOD_CLIENT} or {@link
+     * #STATE_SAVING_METHOD_SERVER}.</p>
+     * <p/>
+     * <p>If this parameter is not specified, the default value is the
+     * value of the constant {@link #STATE_SAVING_METHOD_CLIENT}. </p>
+     */
+    public static final String STATE_SAVING_METHOD_PARAM_NAME =
+          "javax.faces.STATE_SAVING_METHOD";
+
+    /**
+     * <p class="changed_added_2_0">The <code>ServletContext</code> init
+     * parameter consulted by the runtime to determine if the partial
+     * state saving mechanism should be used.</p>
+
+     * <div class="changed_added_2_0">
+
+     * <p>If undefined, the runtime must determine the version level of
+     * the application.</p>
+     *
+     * <ul>
+
+     * <li><p>For applications versioned at 1.2 and under, the runtime
+     * must not use the partial state saving mechanism.</li><p>
+
+     * <li><p>For applications versioned at 2.0 and above, the runtime
+     * must use the partial state saving mechanism.</p></li>
+
+     * </ul>
+
+     * <p>If this parameter is defined, and the application is versioned
+     * at 1.2 and under, the runtime must not use the partial state
+     * saving mechanism.  Otherwise, If this param is defined, and
+     * calling <code>toLowerCase().equals("true")</code> on a
+     * <code>String</code> representation of its value returns
+     * <code>true</code>, the runtime must use partial state mechanism.
+     * Otherwise the partial state saving mechanism must not be
+     * used.</p>
+
+     * </div>
+     *
+     * @since 2.0
+     */
+   
+    public static final String PARTIAL_STATE_SAVING_PARAM_NAME =
+          "javax.faces.PARTIAL_STATE_SAVING";
+
+
+    /**
+     * <p class="changed_added_2_0">The runtime must interpret the value
+     * of this parameter as a comma separated list of view IDs, each of
+     * which must have their state saved using the state saving
+     * mechanism specified in JSF 1.2.</p>
+     */
+    public static final String FULL_STATE_SAVING_VIEW_IDS_PARAM_NAME =
+          "javax.faces.FULL_STATE_SAVING_VIEW_IDS";
+
+    /**
+     * <p class="changed_added_2_1">Marker within the
+     * <code>FacesContext</code> attributes map to indicate we are
+     * saving state.  The implementation must set this marker into the
+     * map <b>before</b> starting the state saving traversal and the marker
+     * must be cleared, in a finally block, <b>after</b> the traversal is
+     * complete.</p>
+     */
+    public static final String IS_SAVING_STATE =
+          "javax.faces.IS_SAVING_STATE";
+
+    /**
+     * <p class="changed_added_2_1">Marker within the
+     * <code>FacesContext</code> attributes map to indicate we are
+     * marking initial state, so the <code>markInitialState()</code>
+     * method of iterating components such as {@link
+     * javax.faces.component.UIData} could recognize this fact and save
+     * the initial state of descendents.</p>
+
+     * @since 2.1
+
+     */
+    public final static String IS_BUILDING_INITIAL_STATE =
+            "javax.faces.IS_BUILDING_INITIAL_STATE";
+    
+    /**
+     * <p class="changed_added_2_2">
+     * If this param is set, and calling toLowerCase().equals("true") on a
+     * String representation of its value returns true, and the
+     * javax.faces.STATE_SAVING_METHOD is set to "server" (as indicated
+     * below), the server state must be guaranteed to be Serializable such
+     * that the aggregate state implements java.io.Serializable. The intent
+     * of this parameter is to ensure that the act of writing out the state
+     * to an ObjectOutputStream would not throw a NotSerializableException,
+     * but the runtime is not required verify this before saving the state.      
+     * </p>
+     * 
+     * @since 2.2
+     */
+        
+    public static final String SERIALIZE_SERVER_STATE_PARAM_NAME = 
+            "javax.faces.SERIALIZE_SERVER_STATE";
+
+    /**
+     * <p>Constant value for the initialization parameter named by
+     * the <code>STATE_SAVING_METHOD_PARAM_NAME</code> that indicates
+     * state saving should take place on the client.</p>
+     */                                   
+    public static final String STATE_SAVING_METHOD_CLIENT = "client";
+
+
+    /**
+     * <p>Constant value for the initialization parameter named by
+     * the <code>STATE_SAVING_METHOD_PARAM_NAME</code> that indicates
+     * state saving should take place on the server.</p>
+     */
+    public static final String STATE_SAVING_METHOD_SERVER = "server";
+
+    // ---------------------------------------------------- State Saving Methods
+
+    private static final String IS_CALLED_FROM_API_CLASS =
+        "javax.faces.ensureOverriddenInvocation";
+
+
+    /**
+     * <p>Return the tree structure and component state information for the
+     * view contained in the specified {@link FacesContext} instance as an
+     * object of type <code>StateManager.SerializedView</code>.  If there
+     * is no state information to be saved, return <code>null</code>
+     * instead.</p>
+     * <p/>
+     * <p>Components may opt out of being included in the serialized view
+     * by setting their <code>transient</code> property to <code>true</code>.
+     * This must cause the component itself, as well as all of that component's
+     * children and facets, to be omitted from the saved  tree structure
+     * and component state information.</p>
+     * <p/>
+     * <p>This method must also enforce the rule that, for components with
+     * non-null <code>id</code>s, all components that are descendants of the
+     * same nearest {@link NamingContainer} must have unique identifiers.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+      *
+     * @throws IllegalStateException if more than one component or
+     *                               facet within the same {@link NamingContainer} in this view has
+     *                               the same non-<code>null</code> component id
+     * @deprecated this has been replaced by {@link #saveView}.  The
+     * default implementation calls <code>saveView</code> and inspects the 
+     * return.  If the return is an <code>Object []</code>, it casts the
+     * result to an <code>Object []</code> wrapping the first and second
+     * elements in an instance of {@link SerializedView}, which it then
+     * returns.  Otherwise, it returns <code>null</code>
+     */
+    public SerializedView saveSerializedView(FacesContext context) {
+
+        context.getAttributes().put(IS_CALLED_FROM_API_CLASS, Boolean.TRUE);
+        Object stateObj = null;
+        try {
+            stateObj = saveView(context);
+        } finally {
+            context.getAttributes().remove(IS_CALLED_FROM_API_CLASS);
+        }
+
+        SerializedView result = null;
+        if (null != stateObj) {
+            if (stateObj instanceof Object[]) {
+                Object [] state = (Object[]) stateObj;
+                if (state.length == 2) {
+                    result = new SerializedView(state[0], state[1]);
+                }
+            }
+        } 
+        return result;
+    }
+
+    /**
+     * <p><span class="changed_deleted_2_2">The functionality of this method
+     * is now handled by {@link javax.faces.view.StateManagementStrategy#saveView}.
+     * </span> Return an opaque <code>Object</code> containing sufficient
+     * information for this same instance to restore the state of the
+     * current {@link UIViewRoot} on a subsequent request.  The returned
+     * object must implement <code>java.io.Serializable</code>. If there
+     * is no state information to be saved, return <code>null</code>
+     * instead.</p>
+     * <p/>
+     * <p>Components may opt out of being included in the serialized view
+     * by setting their <code>transient</code> property to <code>true</code>.
+     * This must cause the component itself, as well as all of that component's
+     * children and facets, to be omitted from the saved  tree structure
+     * and component state information.</p>
+     * <p/>
+     * <p>This method must also enforce the rule that, for components with
+     * non-null <code>id</code>s, all components that are descendants of the
+     * same nearest {@link NamingContainer} must have unique identifiers.</p>
+     * <p/>
+     * <p>For backwards compatability with existing
+     * <code>StateManager</code> implementations, the default
+     * implementation of this method calls {@link #saveSerializedView}
+     * and creates and returns a two element <code>Object</code> array
+     * with element zero containing the <code>structure</code> property
+     * and element one containing the <code>state</code> property of the
+     * <code>SerializedView</code>.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws IllegalStateException if more than one component or
+     *                               facet within the same {@link NamingContainer} in this view has
+     *                               the same non-<code>null</code> component id
+     * @since 1.2
+     */
+    @Deprecated
+    public Object saveView(FacesContext context) {
+        Object stateArray[] = null;
+
+        if (!context.getAttributes().containsKey(IS_CALLED_FROM_API_CLASS)) {
+            SerializedView view = saveSerializedView(context);
+            if (null != view) {
+                stateArray = new Object[]{view.getStructure(),
+                            view.getState()};
+            }
+        }
+        return stateArray;
+    }
+
+
+    /**
+     * <p>Convenience method, which must be called by
+     * <code>saveSerializedView()</code>, to construct and return a
+     * <code>Serializable</code> object that represents the structure
+     * of the entire component tree (including children and facets)
+     * of this view.</p>
+     * <p/>
+     * <p>Components may opt-out of being included in the tree structure
+     * by setting their <code>transient</code> property to <code>true</code>.
+     * This must cause the component itself, as well as all of that component's
+     * children and facets, to be omitted from the saved  tree structure
+     * information.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @deprecated the distinction between tree structure and component
+     *             state is now an implementation detail.  The default
+     *             implementation returns <code>null</code>.
+     */
+    protected Object getTreeStructureToSave(FacesContext context) {
+        return null;
+    }
+
+
+    /**
+     * <p>Convenience method, which must be called by
+     * <code>saveSerializedView()</code>, to construct and return a
+     * <code>Serializable</code> object that represents the state of
+     * all component properties, attributes, and attached objects, for
+     * the entire component tree (including children and facets)
+     * of this view.</p>
+     * <p/>
+     * <p>Components may opt-out of being included in the component state
+     * by setting their <code>transient</code> property to <code>true</code>.
+     * This must cause the component itself, as well as all of that component's
+     * children and facets, to be omitted from the saved component state
+     * information.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @deprecated the distinction between tree structure and component
+     *             state is now an implementation detail.  The default
+     *             implementation returns <code>null</code>.
+     */
+    protected Object getComponentStateToSave(FacesContext context) {
+        return null;
+    }
+
+    /**
+     * <p>Save the state represented in the specified state
+     * <code>Object</code> instance, in an implementation dependent
+     * manner.</p>
+     * <p/>
+     * <p>This method will typically simply delegate the actual
+     * writing to the <code>writeState()</code> method of the
+     * {@link ResponseStateManager} instance provided by the
+     * {@link RenderKit} being used to render this view.  This
+     * method assumes that the caller has positioned the
+     * {@link ResponseWriter} at the correct position for the
+     * saved state to be written.</p>
+     * <p/>
+     * <p>For backwards compatability with existing
+     * <code>StateManager</code> implementations, the default
+     * implementation of this method checks if the argument is an
+     * instance of <code>Object []</code> of length greater than or
+     * equal to two.  If so, it creates a <code>SerializedView</code>
+     * instance with the tree structure coming from element zero and
+     * the component state coming from element one and calls through to
+     * {@link
+     * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView)}.
+     * If not, does nothing.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param state   the Serializable state to be written,
+     *                as returned by {@link #saveSerializedView}
+     *
+     * @since 1.2
+     */
+    public void writeState(FacesContext context, Object state)
+          throws IOException {
+        if (null != state && state.getClass().isArray() &&
+            state.getClass().getComponentType().equals(Object.class)) {
+            Object stateArray[] = (Object[]) state;
+            if (2 == stateArray.length) {
+                SerializedView view = new SerializedView(stateArray[0],
+                                                         stateArray[1]);
+                writeState(context, view);
+            }
+        }
+    }
+
+    /**
+     * <p>Save the state represented in the specified
+     * <code>SerializedView</code> isntance, in an implementation
+     * dependent manner.</p>
+     * <p/>
+     * <p>This method must consult the context initialization parameter
+     * named by the symbolic constant
+     * <code>StateManager.STATE_SAVING_METHOD_PARAM_NAME</code>
+     * to determine whether state should be saved on the client or the
+     * server.  If not present, client side state saving is assumed.</p>
+     * <p/>
+     * <p>If the init parameter indicates that client side state
+     * saving should be used, this method must delegate the actual
+     * writing to the <code>writeState()</code> method of the
+     * {@link ResponseStateManager} instance provided by the
+     * {@link RenderKit} being used to render this view.  This
+     * method assumes that the caller has positioned the
+     * {@link ResponseWriter} at the correct position for the
+     * saved state to be written.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param state   the serialized state to be written
+     *
+     * @deprecated This method has been replaced by {@link
+     *             #writeState(javax.faces.context.FacesContext,java.lang.Object)}.
+     *             The default implementation calls the non-deprecated variant
+     * of the method passing an <code>Object []</code> as the second
+     * argument, where the first element of the array is the return from
+     * <code>getStructure()</code> and the second is the return from
+     * <code>getState()</code> on the argument <code>state</code>.
+     * 
+     */
+    public void writeState(FacesContext context,
+                           SerializedView state) throws IOException {
+
+        if (state != null) {
+            writeState(context, new Object[]{state.getStructure(),
+                                             state.getState()});
+        }
+        
+    }
+
+    // ------------------------------------------------- State Restoring Methods
+
+
+    /**
+     * <p><span class="changed_deleted_2_2">The functionality of this method
+     * is now handled by {@link javax.faces.view.StateManagementStrategy#restoreView}.
+     * </span> Restore the tree structure and the component state of the view
+     * for the specified <code>viewId</code>, in an implementation dependent
+     * manner, and return the restored {@link UIViewRoot}.  If there is no
+     * saved state information available for this <code>viewId</code>,
+     * return <code>null</code> instead.</p>
+     * <p/>
+     * <p>This method must consult the context initialization parameter
+     * named by the symbolic constant
+     * <code>StateManager.STATE_SAVING_METHOD_PARAM_NAME</code>
+     * to determine whether state should be saved on the client or the
+     * server.  If not present, client side state saving is assumed.</p>
+     * <p/>
+     * <p>If the init parameter indicates that client side state
+     * saving should be used, this method must call the
+     * <code>getTreeStructureToRestore()</code> and (if the previous method
+     * call returned a non-null value) <code>getComponentStateToRestore()</code>
+     * methods of the {@link ResponseStateManager} instance provided by the
+     * {@link RenderKit} responsible for this view.</p>
+     *
+     * @param context     {@link FacesContext} for the current request
+     * @param viewId      View identifier of the view to be restored
+     * @param renderKitId the renderKitId used to render this response.
+     *                    Must not be <code>null</code>.
+     *
+     * @throws IllegalArgumentException if <code>renderKitId</code>
+     *                                  is <code>null</code>.
+     */
+    @Deprecated
+    public abstract UIViewRoot restoreView(FacesContext context, String viewId,
+                                           String renderKitId);
+
+
+    /**
+     * <p>Convenience method, which must be called by
+     * <code>restoreView()</code>, to construct and return a {@link UIViewRoot}
+     * instance (populated with children and facets) representing the
+     * tree structure of the component tree being restored.  If no saved
+     * state information is available, return <code>null</code> instead.</p>
+     *
+     * @param context     {@link FacesContext} for the current request
+     * @param viewId      View identifier of the view to be restored
+     * @param renderKitId the renderKitId used to render this response.
+     *                    Must not be <code>null</code>.
+     *
+     * @throws IllegalArgumentException if <code>renderKitId</code>
+     *                                  is <code>null</code>.
+     * @deprecated the distinction between tree structure and component
+     *             state is now an implementation detail.  The default
+     *             implementation returns <code>null</code>.
+     */
+    protected UIViewRoot restoreTreeStructure(FacesContext context,
+                                              String viewId,
+                                              String renderKitId) {
+        return null;
+    }
+
+
+    /**
+     * <p>Convenience method, which must be called by
+     * <code>restoreView()</code>, to restore the attributes, properties,
+     * and attached objects of all components in the restored component tree.
+     * </p>
+     *
+     * @param context     {@link FacesContext} for the current request
+     * @param viewRoot    {@link UIViewRoot} returned by a previous call
+     *                    to <code>restoreTreeStructure()</code>
+     * @param renderKitId the renderKitId used to render this response.
+     *                    Must not be <code>null</code>.
+     *
+     * @throws IllegalArgumentException if <code>renderKitId</code>
+     *                                  is <code>null</code>.
+     * @deprecated the distinction between tree structure and component
+     *             state is now an implementation detail.  The default
+     *             implementation does nothing.
+     */
+    protected void restoreComponentState(FacesContext context,
+                                         UIViewRoot viewRoot,
+                                         String renderKitId) {
+    }
+
+
+    private Boolean savingStateInClient = null;
+
+    /**
+     * @return <code>true</code> if and only if the value of the
+     *         <code>ServletContext</code> init parameter named by the value of
+     *         the constant {@link #STATE_SAVING_METHOD_PARAM_NAME} is equal to
+     *         the value of the constant {@link #STATE_SAVING_METHOD_CLIENT}.
+     *         <code>false</code> otherwise.
+     *
+     * @throws NullPointerException if <code>context</code> is
+     *                              <code>null</code>.
+     */
+
+    public boolean isSavingStateInClient(FacesContext context) {
+        if (null != savingStateInClient) {
+            return savingStateInClient.booleanValue();
+        }
+        savingStateInClient = Boolean.FALSE;
+
+        String saveStateParam = context.getExternalContext().
+              getInitParameter(STATE_SAVING_METHOD_PARAM_NAME);
+        if (saveStateParam != null &&
+            saveStateParam.equalsIgnoreCase(STATE_SAVING_METHOD_CLIENT)) {
+            savingStateInClient = Boolean.TRUE;
+        }
+        return savingStateInClient.booleanValue();
+    }
+
+    /**
+     * <p>Convenience struct for encapsulating tree structure and
+     * component state.  This is necessary to allow the API to be
+     * flexible enough to work in JSP and non-JSP environments.</p>
+     *
+     * @deprecated This class was not marked <code>Serializable</code>
+     *             in the 1.0 version of the spec.  It was also not a static inner
+     *             class, so it can't be made to be <code>Serializable</code>.
+     *             Therefore, it is being deprecated in version 1.2 of the spec.
+     *             The replacement is to use an implementation dependent
+     *             <code>Object</code>.
+     */
+
+    public class SerializedView extends Object {
+        private Object structure = null;
+        private Object state = null;
+
+        public SerializedView(Object newStructure, Object newState) {
+            structure = newStructure;
+            state = newState;
+        }
+
+        public Object getStructure() {
+            return structure;
+        }
+
+        public Object getState() {
+            return state;
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0">
+     * Convenience method to return the view state as a <code>String</code> with
+     * no <code>RenderKit</code> specific markup.
+     *
+     * This default implementation of this method will call {@link #saveView(javax.faces.context.FacesContext)}
+     * and passing the result to and returning the resulting value from
+     * {@link ResponseStateManager#getViewState(javax.faces.context.FacesContext, Object)}.
+     * </p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @since 2.0
+     */
+    public String getViewState(FacesContext context) {
+        Object state = saveView(context);
+        return context.getRenderKit().getResponseStateManager().getViewState(context, state);
+    }
+}
diff --git a/javax/faces/application/StateManagerWrapper.java b/javax/faces/application/StateManagerWrapper.java
new file mode 100644
index 0000000..054fa85
--- /dev/null
+++ b/javax/faces/application/StateManagerWrapper.java
@@ -0,0 +1,255 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIViewRoot;
+
+import java.io.IOException;
+import javax.faces.FacesWrapper;
+
+/**
+ * <p>Provides a simple implementation of {@link StateManager} that can
+ * be subclassed by developers wishing to provide specialized behavior
+ * to an existing {@link StateManager} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link StateManager}.</p>
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * @since 1.2
+ */
+public abstract class StateManagerWrapper extends StateManager implements FacesWrapper<StateManager> {
+
+    /**
+     * @return the instance that we are wrapping.
+     */ 
+    @Override
+    public abstract StateManager getWrapped();
+
+    // ----------------------- Methods from javax.faces.application.StateManager
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#saveSerializedView(javax.faces.context.FacesContext)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#saveSerializedView(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+    @Override
+    public SerializedView saveSerializedView(FacesContext context) {
+
+        return getWrapped().saveSerializedView(context);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#saveView(javax.faces.context.FacesContext)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#saveView(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+    @Override
+    public Object saveView(FacesContext context) {
+        return getWrapped().saveView(context);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#getTreeStructureToSave(javax.faces.context.FacesContext)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#getTreeStructureToSave(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+    @Override
+    protected Object getTreeStructureToSave(FacesContext context) {
+
+        return getWrapped().getTreeStructureToSave(context);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#getComponentStateToSave(javax.faces.context.FacesContext)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#getComponentStateToSave(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+    @Override
+    protected Object getComponentStateToSave(FacesContext context) {
+
+        return getWrapped().getComponentStateToSave(context);
+
+    }
+
+    /**
+     * <p>The default behavior of this method is to call {@link
+     * StateManager#writeState(javax.faces.context.FacesContext,
+     * java.lang.Object)} on the wrapped {@link StateManager}
+     * object.</p>
+     *
+     * @see StateManager#writeState(javax.faces.context.FacesContext,
+     * java.lang.Object)
+     * @since 1.2
+     */
+    @Override
+    public void writeState(FacesContext context,
+                           Object state)
+    throws IOException {
+
+        getWrapped().writeState(context, state);
+
+    }
+
+
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#writeState(javax.faces.context.FacesContext, javax.faces.application.StateManager.SerializedView)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#writeState(javax.faces.context.FacesContext, javax.faces.application.StateManager.SerializedView)
+     * @since 1.2
+     */
+    @Override
+    public void writeState(FacesContext context,
+                           SerializedView state)
+    throws IOException {
+
+        getWrapped().writeState(context, state);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#restoreView(javax.faces.context.FacesContext, String, String)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#restoreView(javax.faces.context.FacesContext, String, String)
+     * @since 1.2
+     */
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId,
+                                  String renderKitId) {
+
+        return getWrapped().restoreView(context, viewId, renderKitId);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#restoreTreeStructure(javax.faces.context.FacesContext, String, String)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#restoreTreeStructure(javax.faces.context.FacesContext, String, String)
+     * @since 1.2
+     */
+    @Override
+    protected UIViewRoot restoreTreeStructure(FacesContext context,
+                                              String viewId,
+                                              String renderKitId) {
+
+        return getWrapped().restoreTreeStructure(context, viewId, renderKitId);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#restoreComponentState(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot, String)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#restoreComponentState(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot, String)
+     * @since 1.2
+     */
+    @Override
+    protected void restoreComponentState(FacesContext context,
+                                         UIViewRoot viewRoot,
+                                         String renderKitId) {
+
+        getWrapped().restoreComponentState(context, viewRoot, renderKitId);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link StateManager#isSavingStateInClient(javax.faces.context.FacesContext)}
+     * on the wrapped {@link StateManager} object.</p>
+     *
+     * @see StateManager#isSavingStateInClient(javax.faces.context.FacesContext) 
+     * @since 1.2
+     */
+    @Override
+    public boolean isSavingStateInClient(FacesContext context) {
+
+        return getWrapped().isSavingStateInClient(context);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link StateManager#getViewState(javax.faces.context.FacesContext)} on the
+     * wrapped {@link StateManager} object.</p>
+     *
+     * @since 2.0
+     */
+    @Override
+    public String getViewState(FacesContext context) {
+
+        return getWrapped().getViewState(context);
+
+    }
+}
diff --git a/javax/faces/application/ViewExpiredException.java b/javax/faces/application/ViewExpiredException.java
new file mode 100644
index 0000000..93aa434
--- /dev/null
+++ b/javax/faces/application/ViewExpiredException.java
@@ -0,0 +1,164 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import javax.faces.FacesException;
+
+/**
+ * <p>Implementations must throw this {@link FacesException} when
+ * attempting to restore the view {@link StateManager#restoreView(javax.faces.context.FacesContext, String, String)} 
+ * results in failure on postback.</p>
+ *
+ * @since 1.2
+ */
+
+public class ViewExpiredException extends FacesException {
+
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public ViewExpiredException() {
+
+        super();
+
+    }
+
+    /**
+     *<p>Construct a new exception with the specified view identifier.</p>
+     *
+     * @param viewId The view identifier for this exception
+     */
+    public ViewExpiredException(String viewId) {
+        
+        this.viewId = viewId;
+        
+    }
+    
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param viewId The view identifier for this exception
+     */
+    public ViewExpiredException(String message, String viewId) {
+
+        super(message);
+        this.viewId = viewId;
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.  The detail
+     * message will be set to <code>(cause == null ? null :
+     * cause.toString()</code>
+     *
+     * @param cause The root cause for this exception
+     * @param viewId The view identifier for this exception
+     */
+    public ViewExpiredException(Throwable cause, String viewId) {
+
+        super(cause);
+        this.viewId = viewId;
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause The root cause for this exception
+     * @param viewId The view identifier for this exception
+     */
+    public ViewExpiredException(String message, Throwable cause, String viewId) {
+
+        super(message, cause);
+        this.viewId = viewId;
+
+    }
+
+    // ----------------------------------------------------- Instance Variables
+
+
+    /**
+     * <p>The view identifier of the view that could not be restored.</p>
+     */
+    private String viewId = null;
+    
+    
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Return the view identifier of this exception, or <code>null</code> if the
+     * view identifier is nonexistent or unknown.</p>
+     */
+    public String getViewId() {
+
+        return (this.viewId);
+
+    }
+
+    /**
+     * <p>Return the message for this exception prepended with the view identifier
+     * if the view identifier is not <code>null</code>, otherwise, return the 
+     * message.</p>
+     */
+    public String getMessage() {
+
+        if (viewId != null) {
+            return "viewId:" + viewId + " - " + super.getMessage();
+        }
+        return super.getMessage();
+
+    }
+    
+}
+
+    
+    
diff --git a/javax/faces/application/ViewHandler.java b/javax/faces/application/ViewHandler.java
new file mode 100644
index 0000000..9cec65a
--- /dev/null
+++ b/javax/faces/application/ViewHandler.java
@@ -0,0 +1,736 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.view.ViewDeclarationLanguage;
+
+
+
+/**
+ * <p><strong><span
+ * class="changed_modified_2_0 changed_modified_2_1 changed_modified_2_2">
+ * ViewHandler</span></strong> is the
+ * pluggablity mechanism for allowing implementations of or applications
+ * using the JavaServer Faces specification to provide their own
+ * handling of the activities in the <em>Render Response</em> and
+ * <em>Restore View</em> phases of the request processing lifecycle.
+ * This allows for implementations to support different response
+ * generation technologies, as well as alternative strategies for saving
+ * and restoring the state of each view.  <span class="changed_added_2_0">An
+ * implementation
+ * of this class must be thread-safe.</span></p>
+ *
+ * <p>Please see {@link StateManager} for information on how the
+ * <code>ViewHandler</code> interacts the {@link StateManager}. </p>
+
+ * <p class="changed_added_2_0">Version 2 of the specification formally
+ * introduced the concept of <em>View Declaration Language</em>.  A View
+ * Declaration Language (VDL) is a syntax used to declare user
+ * interfaces comprised of instances of JSF {@link UIComponent}s.  Any
+ * of the responsibilities of the <code>ViewHandler</code> that
+ * specifically deal with the VDL sub-system are now the domain of the
+ * VDL implementation. These responsibilities are defined on the {@link
+ * ViewDeclarationLanguage} class.  The <code>ViewHandler</code>
+ * provides {@link #getViewDeclarationLanguage} as a convenience method
+ * to access the VDL implementation given a <code>viewId</code>.</p>
+ *
+ */
+
+public abstract class ViewHandler {
+
+    private static final Logger log = Logger.getLogger("javax.faces.application");
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The key, in the session's attribute set, under which the
+     * response character encoding may be stored and retrieved.</p>
+     *
+     */
+    public static final String CHARACTER_ENCODING_KEY =
+	"javax.faces.request.charset";
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Allow</span> the web
+     * application to define a <span class="changed_modified_2_0">list
+     * of alternate suffixes</span> for pages containing JSF content.
+     * <span class="changed_modified_2_0">This list is a space separated
+     * list of values of the form
+     * <i><code>.<extension></code></i>.  The first physical
+     * resource whose extension matches one of the configured extensions
+     * will be the suffix used to create the view ID.</span> If this
+     * init parameter is not specified, the default value is taken from
+     * the value of the constant {@link #DEFAULT_SUFFIX}.</p>
+     */
+    public static final String DEFAULT_SUFFIX_PARAM_NAME = 
+	"javax.faces.DEFAULT_SUFFIX";
+
+
+    /**
+     * <p class="changed_modified_2_1">The value to use for the default
+     * extension if the webapp is using url extension mapping.</p>
+     */
+    public static final String DEFAULT_SUFFIX = ".xhtml .view.xml .jsp";
+    
+    /**
+     * <p class="changed_added_2_2">
+     * If this param is set, and calling toLowerCase().equals("true") on a
+     * String representation of its value returns true, the runtime must
+     * ensure that any XML comments in the Facelets source page are not
+     * delivered to the client. The runtime must also consider the
+     * facelets.SKIP_COMMENTS param name as an alias to this param name for
+     * backwards compatibility with existing facelets tag libraries.
+     * </p>
+     * 
+     * @since 2.0
+     */
+    
+    public static final String FACELETS_SKIP_COMMENTS_PARAM_NAME = 
+            "javax.faces.FACELETS_SKIP_COMMENTS";
+    
+    /**
+     * <p class="changed_added_2_0">Allow the web application to define an
+     * alternate suffix for Facelet based XHTML pages containing JSF content.
+     * If this init parameter is not specified, the default value is
+     * taken from the value of the constant {@link #DEFAULT_FACELETS_SUFFIX}</p>
+     * 
+     * @since 2.0
+     */
+    
+    public static final String FACELETS_SUFFIX_PARAM_NAME = 
+            "javax.faces.FACELETS_SUFFIX";
+    
+    /**
+     * <p class="changed_added_2_0">The value to use for the default extension 
+     * for Facelet based XHTML pages if the webapp is using
+     * url extension mapping.</p>
+     * 
+     * @since 2.0
+     */
+    public static final String DEFAULT_FACELETS_SUFFIX = ".xhtml";
+    
+    /**
+     * <p class="changed_added_2_0">Allow the web application to define
+     * a semicolon (;) separated list of strings that is used to forcibly
+     * declare that certain pages in the application must be interpreted
+     * as using Facelets, regardless of their extension.  Each entry in the 
+     * semicolon (;) separated list of strings is either a file extension, as in 
+     * <code>*.xhtml</code>, or a resource prefix (starting with '/' and 
+     * interpreted as relative to the web application root), as in 
+     * <code>/user/*</code>.  The latter class of entry can also take the form
+     * of <code>/<filename>.<extension>*</code> such as
+     * <code>/login.jsp*</code>.  The runtime must also consider the
+     * <code>facelets.VIEW_MAPPINGS</code> param name as an alias to this
+     * param name for backwards compatibility with existing Facelets 
+     * applications.</p>
+     * 
+     * @since 2.0
+     */
+    
+    public static final String FACELETS_VIEW_MAPPINGS_PARAM_NAME = 
+            "javax.faces.FACELETS_VIEW_MAPPINGS";
+    
+    /**
+     * <p class="changed_added_2_2">
+     * The buffer size to set on the response when the ResponseWriter is
+     * generated. By default the value is 1024. A value of -1 will not assign
+     * a buffer size on the response. This should be increased if you are
+     * using development mode in order to guarantee that the response isn't
+     * partially rendered when an error is generated. The runtime must also
+     * consider the facelets.BUFFER_SIZE param name as an alias to this param
+     * name for backwards compatibility with existing facelets tag libraries.</p>
+     * 
+     * @since 2.0
+     */
+    
+    public static final String FACELETS_BUFFER_SIZE_PARAM_NAME = 
+            "javax.faces.FACELETS_BUFFER_SIZE";
+    
+    /**
+     * <p class="changed_added_2_2">When a page is requested, what interval in seconds should the compiler
+     * check for changes. If you don't want the compiler to check for changes
+     * once the page is compiled, then use a value of -1. Setting a low
+     * refresh period helps during development to be able to edit pages in a
+     * running application.The runtime must also consider the
+     * facelets.REFRESH_PERIOD param name as an alias to this param name for
+     * backwards compatibility with existing facelets tag libraries.
+     * </p>
+     * 
+     * @since 2.0
+     */
+    public static final String FACELETS_REFRESH_PERIOD_PARAM_NAME = 
+            "javax.faces.FACELETS_REFRESH_PERIOD";
+    
+    /**
+     * <p class="changed_added_2_2">
+     * If this param is set, the runtime must interpret it as a semicolon (;)
+     * separated list of paths, starting with "/" (without the quotes). The
+     * runtime must interpret each entry in the list as a path relative to
+     * the web application root and interpret the file found at that path as
+     * a facelet tag library, conforming to the facelet taglibrary schema and
+     * expose the tags therein according to Section "Facelet Tag Library
+     * mechanism". The runtime must also consider the facelets.LIBRARIES
+     * param name as an alias to this param name for backwards compatibility
+     * with existing facelets tag libraries.     
+     * </p>
+     * 
+     * 
+     * @since 2.0
+     */
+    
+    public static final String FACELETS_LIBRARIES_PARAM_NAME = 
+            "javax.faces.FACELETS_LIBRARIES";
+    
+    /**
+     * <p class="changed_added_2_2">A semicolon (;) delimitted list of class names of type
+     * javax.faces.view.facelets.TagDecorator, with a no-argument
+     * constructor. These decorators will be loaded when the first request
+     * for a Facelets VDL view hits the ViewHandler for page compilation.The
+     * runtime must also consider the facelets.DECORATORS param name as an
+     * alias to this param name for backwards compatibility with existing
+     * facelets tag libraries.
+     * </p>
+     * 
+     * @since 2.0
+     */
+    
+    public static final String FACELETS_DECORATORS_PARAM_NAME = 
+            "javax.faces.FACELETS_DECORATORS";
+    
+    /**
+     * <p class="changed_added_2_2">
+     * If this param is set, and calling toLowerCase().equals("true") on a
+     * String representation of its value returns true, the default
+     * ViewHandler must behave as specified in the latest 1.2 version of this
+     * specification. Any behavior specified in Section "Default
+     * ViewDeclarationLanguage Implementation" of the spec prose document and
+     * implemented in the default ViewHandler that pertains to handling
+     * requests for pages authored in the JavaServer Faces View Declaration
+     * Language must not be executed by the runtime.
+     * </p>
+     * 
+     * @since 2.0
+     */
+    public static final String DISABLE_FACELET_JSF_VIEWHANDLER_PARAM_NAME = 
+            "DISABLE_FACELET_JSF_VIEWHANDLER";
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /** 
+     * <p>Returns an appropriate {@link Locale} to use for this and
+     * subsequent requests for the current client.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * 
+     * @throws NullPointerException if <code>context</code> is 
+     *  <code>null</code>
+     */
+     public abstract Locale calculateLocale(FacesContext context);
+     
+     /**
+      * <p>Returns the correct character encoding to be used for this request.</p>
+      *
+      * <p>The following algorithm is employed.</p>
+      *
+      * <ul>
+      *
+      * <li><p>Examine the <code>Content-Type</code> request header.  If it has 
+      * a <code>charset</code> parameter, extract it and return that as the 
+      * encoding.</p></li>
+      *
+      * <li><p>If no <code>charset</code> parameter was found, check for the 
+      * existence of a session by calling {@link ExternalContext#getSession(boolean)} 
+      * passing <code>false</code> as the argument.  If that method returns 
+      * <code>true</code>, get the session Map by calling 
+      * {@link ExternalContext#getSessionMap} and look for a value under the 
+      * key given by the value of the symbolic constant 
+      * {@link ViewHandler#CHARACTER_ENCODING_KEY}.
+      * If present, return the value, converted to String.</p></li>
+      *
+      * <li><p>Otherwise, return <code>null</code></p></li>
+      *
+      * </ul>
+      *
+      * @since 1.2
+      */ 
+     
+     public String calculateCharacterEncoding(FacesContext context) {
+         ExternalContext extContext = context.getExternalContext();
+         Map<String,String> headerMap = extContext.getRequestHeaderMap();
+         String contentType = headerMap.get("Content-Type");
+         String charEnc = null;
+         
+         // look for a charset in the Content-Type header first.
+         if (null != contentType) {
+             // see if this header had a charset
+             String charsetStr = "charset=";
+             int len = charsetStr.length();
+             int idx = contentType.indexOf(charsetStr);
+             
+             // if we have a charset in this Content-Type header AND it
+             // has a non-zero length.
+             if (idx != -1 && idx + len < contentType.length()) {
+                 charEnc = contentType.substring(idx + len);
+             }
+         }
+         
+         // failing that, look in the session for a previously saved one
+         if (null == charEnc) {
+             if (null != extContext.getSession(false)) {
+                 charEnc = (String) extContext.getSessionMap().get(CHARACTER_ENCODING_KEY);
+             }
+         }
+         
+         return charEnc;
+     }
+
+
+    /** 
+     * <p>Return an appropriate <code>renderKitId</code> for this and
+     * subsequent requests from the current client.  It is an error for
+     * this method to return <code>null</code>.</p>
+     *
+     * <p>The default return value is {@link
+     * javax.faces.render.RenderKitFactory#HTML_BASIC_RENDER_KIT}.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * 
+     * @throws NullPointerException if <code>context</code> is 
+     *  <code>null</code>
+     */
+    public abstract String calculateRenderKitId(FacesContext context);
+
+
+    /**
+     * <p><strong class="changed_modified_2_0">Create</strong> and
+     * return a new {@link UIViewRoot} instance initialized with
+     * information from the argument <code>FacesContext</code> and
+     * <code>viewId</code>.  <span class="changed_modified_2_0">Locate
+     * the {@link ViewDeclarationLanguage} implementation for the VDL
+     * used in the view.  The argument <code>viewId</code> must be
+     * converted to a physical <code>viewId</code> that can refer to an
+     * actual resource suitable for use by the
+     * <code>ViewDeclarationLanguage</code> {@link
+     * ViewDeclarationLanguage#createView}, which must be called by
+     * this method.</span>
+
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract UIViewRoot createView(FacesContext context, String viewId);
+
+    /**
+     * <p class="changed_added_2_0">Derive and return the viewId from
+     * the current request, or the argument input by following the
+     * algorithm defined in specification section JSF.7.6.2.</p>
+     *
+     * <p>The default implementation of this method simply returns
+     * rawViewId unchanged.</p>
+     *
+     * @param context the <code>FacesContext</code> for this request
+     *
+     * @param rawViewId the <code>viewId</code> to derive,
+     *
+     * @since 2.0
+     */
+    public String deriveViewId(FacesContext context, String rawViewId) {
+
+        return rawViewId;
+
+    }
+
+    /**
+     * <p class="changed_added_2_1">Derive and return the viewId from
+     * the current request, or the argument input by following the
+     * algorithm defined in specification section JSF.7.6.2.  Note that
+     * unlike <code>deriveViewId()</code>, this method does not require that
+     * a physical view be present.</p>
+     *
+     * <p>The default implementation of this method simply returns
+     * rawViewId unchanged.</p>
+     *
+     * @param context the <code>FacesContext</code> for this request
+     *
+     * @param rawViewId the <code>viewId</code> to derive,
+     *
+     * @since 2.1
+     */
+    public String deriveLogicalViewId(FacesContext context, String rawViewId) {
+
+        return rawViewId;
+
+    }
+    
+
+    /**
+     * <p class="changed_modified_2_0"><span class="changed_modified_2_2">If</span>
+     * the value returned from this
+     * method is used as the <code>file</code> argument to the
+     * four-argument constructor for <code>java.net.URL</code> (assuming
+     * appropriate values are used for the first three arguments), then
+     * a client making a request to the <code>toExternalForm()</code> of
+     * that <code>URL</code> will select the argument
+     * <code>viewId</code> for traversing the JSF lifecycle.  Please see
+     * section JSF.7.6.2 for the complete specification, 
+     * <span class="changed_added_2_2">especially for details related
+     * to view protection using the {@link javax.faces.render.ResponseStateManager#NON_POSTBACK_VIEW_TOKEN_PARAM}
+     * </span>.</p>
+     *
+     * @param context {@link FacesContext} for this request
+     * @param viewId View identifier of the desired view
+     *
+     * @throws IllegalArgumentException if <code>viewId</code> is not
+     * valid for this <code>ViewHandler</code>, or does not start with
+     * "/".
+     * @throws NullPointerException if <code>context</code> or
+     *  <code>viewId</code> is <code>null</code>.
+     */
+    public abstract String getActionURL(FacesContext context, String viewId);
+
+
+    /**
+     * <p class="changed_modified_2_0">If the value returned from this
+     * method is used as the <code>file</code> argument to the
+     * four-argument constructor for <code>java.net.URL</code> (assuming
+     * appropriate values are used for the first three arguments), then
+     * a client making a request to the <code>toExternalForm()</code> of
+     * that <code>URL</code> will select the argument <code>path</code>
+     * for direct rendering.  If the specified path starts with a slash,
+     * it must be treated as context relative; otherwise, it must be
+     * treated as relative to the action URL of the current view.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param path Resource path to convert to a URL
+     *
+     * @throws IllegalArgumentException if <code>viewId</code> is not
+     *  valid for this <code>ViewHandler</code>.
+     * @throws NullPointerException if <code>context</code> or
+     *  <code>path</code> is <code>null</code>.
+     */
+    public abstract String getResourceURL(FacesContext context, String path);
+    
+    /**
+     * <p class="changed_added_2_2">Return an unmodifiable
+     * <code>Set</code> of the protected views currently known to this
+     * <code>ViewHandler</code> instance. Compliant implementations must
+     * return a <code>Set</code> that is the concatenation of the
+     * contents of all the <code><url-pattern></code> elements
+     * within all the <code><protected-views></code> in all of the
+     * application configuration resources in the current application.
+     * The runtime must support calling this method at any time after
+     * application startup.  The default implementation returns an
+     * unmodifiable empty <code>Set</code>.</p>
+     * 
+     * @since 2.2 
+     */
+    public Set<String> getProtectedViewsUnmodifiable() {
+        return Collections.unmodifiableSet(Collections.EMPTY_SET);
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Add the argument
+     * <code>urlPattern</code> to the thread safe <code>Set</code> of
+     * protected views for this application.  Compliant implementations
+     * make it so a subsequent call to {@link
+     * #getProtectedViewsUnmodifiable} contains the argument. The
+     * runtime must support calling this method at any time after
+     * application startup.  The default implementation takes no
+     * action.</p>
+     * 
+     * @param urlPattern the url-pattern to add.
+     * 
+     * @since 2.2 
+     */
+    public void addProtectedView(String urlPattern) {
+        
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Remove the argument
+     * <code>urlPattern</code> from the thread safe <code>Set</code> of
+     * protected views for this application, if present in the
+     * <code>Set</code>. If the argument <code>urlPattern</code> is not
+     * present in the <code>Set</code>, this method has no effect.
+     * Compliant implementations must make it so a subsequent call to
+     * {@link #getProtectedViewsUnmodifiable} does not contain the
+     * argument. The runtime must support calling this method at any
+     * time after application startup.  Returns <code>true</code> if
+     * this <code>Set</code> contained the argument.  The default
+     * implementation takes no action and returns
+     * <code>false</code>.</p>
+     * 
+     * @param urlPattern the url-pattern to remove.
+     * 
+     * @since 2.2 
+     */
+    public boolean removeProtectedView(String urlPattern) {
+        return false;
+    }
+    
+    /**
+     * <p class="changed_added_2_0"> Return a JSF action URL derived
+     * from the <code>viewId</code> argument that is suitable to be used
+     * by the {@link NavigationHandler} to issue a redirect request to
+     * the URL using a NonFaces request.  Compliant implementations
+     * must implement this method as specified in section JSF.7.6.2.
+     * The default implementation simply calls through to {@link
+     * #getActionURL}, passing the arguments <code>context</code> and
+     * <code>viewId</code>.</p>
+     *
+     * @param context           The FacesContext processing this request
+     * @param viewId            The view identifier of the target page
+     * @param parameters        A mapping of parameter names to one or more values
+     * @param includeViewParams A flag indicating whether view parameters should be encoded into this URL
+     * @since 2.0
+     */
+    public String getRedirectURL(FacesContext context,
+                                 String viewId,
+                                 Map<String,List<String>>parameters,
+                                 boolean includeViewParams) {
+        
+        return getActionURL(context, viewId);
+
+    }
+
+
+    /**
+
+     * <p class="changed_added_2_0"> Return a JSF action URL derived
+     * from the viewId argument that is suitable to be used as the
+     * target of a link in a JSF response. Compiliant implementations
+     * must implement this method as specified in section JSF.7.6.2.
+     * The default implementation simply calls through to {@link
+     * #getActionURL}, passing the arguments <code>context</code> and
+     * <code>viewId</code>.</p>
+     *
+     * @param context           The FacesContext processing this request
+     * @param viewId            The view identifier of the target page
+     * @param parameters        A mapping of parameter names to one or more values
+     * @param includeViewParams A flag indicating whether view parameters should be encoded into this URL
+     *
+     * @since 2.0
+     */
+    public String getBookmarkableURL(FacesContext context,
+                                     String viewId,
+                                     Map<String,List<String>> parameters,
+                                     boolean includeViewParams) {
+
+        return getActionURL(context, viewId);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_1">Return</span>
+     * the {@link ViewDeclarationLanguage} instance used for this <code>ViewHandler</code>
+     * instance.</p>
+     * 
+     * <div class="changed_added_2_0">
+     * 
+     * <p>The default implementation must use {@link
+     * javax.faces.view.ViewDeclarationLanguageFactory#getViewDeclarationLanguage}
+     * to obtain the appropriate <code>ViewDeclarationLanguage</code>
+     * implementation for the argument <code>viewId</code>.  Any
+     * exceptions thrown as a result of invoking that method must not be
+     * swallowed.</p>
+     * 
+     * <p>The default implementation of this method returns null.</p>
+     * 
+     * </div>
+     *
+     * @param context the <code>FacesContext</code> for this request.
+     *
+     * @param viewId <span class="changed_modified_2_1">the logical view
+     * id, as returned from {@link #deriveLogicalViewId} for which the
+     * <code>ViewDeclarationLanguage</code> should be returned.</span>
+
+     * @since 2.0
+     */
+    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context,
+                                                              String viewId) {
+
+        return null;
+
+    }
+
+    
+    /**
+     *
+     * <p><span class="changed_modified_2_0">Initialize</span> the view
+     * for the request processing lifecycle.</p>
+     *
+     * <p>This method must be called at the beginning of the <em>Restore
+     * View Phase</em> of the Request Processing Lifecycle.  It is responsible 
+     * for performing any per-request initialization necessary to the operation
+     * of the lifycecle.</p>
+     *
+     * <p class="changed_modified_2_0">The default implementation must
+     * perform the following actions.  If {@link
+     * ExternalContext#getRequestCharacterEncoding} returns
+     * <code>null</code>, call {@link #calculateCharacterEncoding} and
+     * pass the result, if non-<code>null</code>, into the {@link
+     * ExternalContext#setRequestCharacterEncoding} method.  If {@link
+     * ExternalContext#getRequestCharacterEncoding} returns
+     * non-<code>null</code> take no action.</p>
+
+     * @throws FacesException if a problem occurs setting the encoding,
+     * such as the <code>UnsupportedEncodingException</code> thrown 
+     * by the underlying Servlet or Portlet technology when the encoding is not
+     * supported.
+     *
+     */
+    
+    public void initView(FacesContext context) throws FacesException {
+        String encoding = context.getExternalContext().getRequestCharacterEncoding();
+        if (null != encoding) {
+            return;
+        }
+        encoding = calculateCharacterEncoding(context);
+        if (null != encoding) {
+            try {
+                context.getExternalContext().setRequestCharacterEncoding(encoding);
+            } catch (UnsupportedEncodingException e) {
+                // PENDING(edburns): I18N
+                String message = "Can't set encoding to: " + encoding +
+                        " Exception:" + e.getMessage();
+                if (log.isLoggable(Level.WARNING)) {
+                    log.fine(message);
+                }
+                throw new FacesException(message, e);
+                
+            }
+        }
+    }
+    
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> whatever
+     * actions are required to render the response view to the response
+     * object associated with the current {@link FacesContext}.</p>
+
+     * <p class="changed_added_2_0">Otherwise, the default
+     * implementation must obtain a reference to the {@link
+     * ViewDeclarationLanguage} for the <code>viewId</code> of the
+     * argument <code>viewToRender</code> and call its {@link
+     * ViewDeclarationLanguage#renderView} method, returning the result
+     * and not swallowing any exceptions thrown by that method.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param viewToRender the view to render
+     *
+     * @throws IOException if an input/output error occurs
+     * @throws NullPointerException if <code>context</code> or
+     * <code>viewToRender</code> is <code>null</code>
+     * @throws FacesException if a servlet error occurs
+     */
+    public abstract void renderView(FacesContext context, UIViewRoot viewToRender)
+        throws IOException, FacesException;
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> whatever
+     * actions are required to restore the view associated with the
+     * specified {@link FacesContext} and <code>viewId</code>.  It may
+     * delegate to the <code>restoreView</code> of the associated {@link
+     * StateManager} to do the actual work of restoring the view.  If
+     * there is no available state for the specified
+     * <code>viewId</code>, return <code>null</code>.</p>
+
+     * <p class="changed_added_2_0">Otherwise, the default implementation
+     * must obtain a reference to the {@link ViewDeclarationLanguage}
+     * for this <code>viewId</code> and call its {@link
+     * ViewDeclarationLanguage#restoreView} method, returning the result
+     * and not swallowing any exceptions thrown by that method.</p>
+
+     * @param context {@link FacesContext} for the current request
+     * @param viewId the view identifier for the current request
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     * @throws FacesException if a servlet error occurs
+     */
+    public abstract UIViewRoot restoreView(FacesContext context, String viewId);
+
+    
+    /**
+     * <p>Take any appropriate action to either immediately
+     * write out the current state information (by calling
+     * {@link StateManager#writeState}, or noting where state information
+     * should later be written.</p>
+     *
+     * <p class="changed_added_2_0">This method must do nothing if the current
+     * request is an <code>Ajax</code> request.  When responding to 
+     * <code>Ajax</code> requests, the state is obtained by calling
+     * {@link StateManager#getViewState}
+     * and then written into the <code>Ajax</code> response during final
+     * encoding 
+     * ({@link javax.faces.component.UIViewRoot#encodeEnd}. 
+     * </p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws IOException if an input/output error occurs
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void writeState(FacesContext context) throws IOException;
+
+
+}
diff --git a/javax/faces/application/ViewHandlerWrapper.java b/javax/faces/application/ViewHandlerWrapper.java
new file mode 100644
index 0000000..5e2aa7f
--- /dev/null
+++ b/javax/faces/application/ViewHandlerWrapper.java
@@ -0,0 +1,371 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.application;
+
+import java.util.List;
+import java.util.Set;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIViewRoot;
+import javax.faces.FacesException;
+
+import java.util.Locale;
+import java.util.Map;
+import java.io.IOException;
+import javax.faces.FacesWrapper;
+import javax.faces.view.ViewDeclarationLanguage;
+
+/**
+ * <p class="changed_modified_2_2">Provides a simple implementation of {@link ViewHandler} that can
+ * be subclassed by developers wishing to provide specialized behavior
+ * to an existing {@link ViewHandler} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link ViewHandler}.</p>
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * @since 1.2
+ */
+public abstract class ViewHandlerWrapper extends ViewHandler implements FacesWrapper<ViewHandler> {
+
+
+    /**
+     * @return the instance that we are wrapping.
+     */ 
+    @Override
+    public abstract ViewHandler getWrapped();
+
+
+    // ------------------------ Methods from javax.faces.application.ViewHandler
+
+
+    /**
+     * 
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#calculateCharacterEncoding(javax.faces.context.FacesContext)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#calculateCharacterEncoding(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+
+    @Override
+    public String calculateCharacterEncoding(FacesContext context) {
+
+        return getWrapped().calculateCharacterEncoding(context);
+
+    }
+        
+    /**
+     * 
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#calculateLocale(javax.faces.context.FacesContext)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#calculateLocale(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+    @Override
+    public Locale calculateLocale(FacesContext context) {
+
+        return getWrapped().calculateLocale(context);
+
+    }
+
+
+    /**
+     *
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#deriveViewId(javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#deriveViewId(javax.faces.context.FacesContext, String)
+     * @since 2.0
+     */
+    @Override
+    public String deriveViewId(FacesContext context, String input) {
+
+        return getWrapped().deriveViewId(context, input);
+
+    }
+
+    /**
+     *
+     * <p class="changed_added_2_1">The default behavior of this method is to
+     * call {@link ViewHandler#deriveLogicalViewId(javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#deriveLogicalViewId(javax.faces.context.FacesContext, String)
+     * @since 2.1
+     */
+    @Override
+    public String deriveLogicalViewId(FacesContext context, String input) {
+
+        return getWrapped().deriveLogicalViewId(context, input);
+
+    }
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#calculateRenderKitId(javax.faces.context.FacesContext)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#calculateRenderKitId(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+    @Override
+    public String calculateRenderKitId(FacesContext context) {
+
+        return getWrapped().calculateRenderKitId(context);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#createView(javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#createView(javax.faces.context.FacesContext, String)
+     * @since 1.2
+     */
+    @Override
+    public UIViewRoot createView(FacesContext context, String viewId) {
+
+        return getWrapped().createView(context, viewId);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#getActionURL(javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#getActionURL(javax.faces.context.FacesContext, String)
+     * @since 1.2
+     */
+    @Override
+    public String getActionURL(FacesContext context, String viewId) {
+
+        return getWrapped().getActionURL(context, viewId);
+
+    }
+
+    /**
+     *
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#getProtectedViewsUnmodifiable}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#getProtectedViewsUnmodifiable
+     * @since 2.2
+     */
+    @Override
+    public Set<String> getProtectedViewsUnmodifiable() {
+        return getWrapped().getProtectedViewsUnmodifiable();
+    }
+
+    /**
+     *
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#addProtectedView}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#addProtectedView
+     * @since 2.2
+     */
+    @Override
+    public void addProtectedView(String urlPattern) {
+        getWrapped().addProtectedView(urlPattern);
+    }
+
+    /**
+     *
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#removeProtectedView}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#removeProtectedView
+     * @since 2.2
+     */
+
+    @Override
+    public boolean removeProtectedView(String urlPattern) {
+        return getWrapped().removeProtectedView(urlPattern);
+    }
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#getRedirectURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#getRedirectURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)
+     * @since 2.0
+     */
+    @Override
+    public String getRedirectURL(FacesContext context,
+                                 String viewId,
+                                 Map<String,List<String>> parameters,
+                                 boolean includeViewParams) {
+
+        return getWrapped().getRedirectURL(context,
+                                           viewId,
+                                           parameters,
+                                           includeViewParams);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#getBookmarkableURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#getBookmarkableURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)
+     * @since 2.0
+     */
+    @Override
+    public String getBookmarkableURL(FacesContext context,
+                                     String viewId,
+                                     Map<String,List<String>> parameters,
+                                     boolean includeViewParams) {
+
+        return getWrapped().getBookmarkableURL(context,
+                                               viewId,
+                                               parameters,
+                                               includeViewParams);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#getResourceURL(javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#getResourceURL(javax.faces.context.FacesContext, String)
+     * @since 1.2
+     */
+    @Override
+    public String getResourceURL(FacesContext context, String path) {
+
+        return getWrapped().getResourceURL(context, path);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#getViewDeclarationLanguage}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @since 2.0
+     */
+    @Override
+    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context,
+                                                              String viewId) {
+
+        return getWrapped().getViewDeclarationLanguage(context, viewId);
+        
+    }
+    
+    
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#initView}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#initView
+     * @since 1.2
+     */
+    @Override
+    public void initView(FacesContext context) throws FacesException {
+        
+        getWrapped().initView(context);
+    }
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
+     * @since 1.2
+     */
+    @Override
+    public void renderView(FacesContext context, UIViewRoot viewToRender)
+    throws IOException, FacesException {
+
+        getWrapped().renderView(context, viewToRender);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#restoreView(javax.faces.context.FacesContext, String)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#restoreView(javax.faces.context.FacesContext, String)
+     * @since 1.2
+     */
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId) {
+
+        return getWrapped().restoreView(context, viewId);
+
+    }    
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ViewHandler#writeState(javax.faces.context.FacesContext)}
+     * on the wrapped {@link ViewHandler} object.</p>
+     *
+     * @see ViewHandler#writeState(javax.faces.context.FacesContext)
+     * @since 1.2
+     */
+    @Override
+    public void writeState(FacesContext context) throws IOException {
+	getWrapped().writeState(context);
+
+    }
+
+}
diff --git a/javax/faces/application/ViewResource.java b/javax/faces/application/ViewResource.java
new file mode 100644
index 0000000..d4e5435
--- /dev/null
+++ b/javax/faces/application/ViewResource.java
@@ -0,0 +1,67 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.application;
+
+import java.net.URL;
+
+/**
+ * <p class="changed_added_2_2">Superclass of {@link Resource} that is only
+ * for use with views.</p>
+ * 
+ * @since 2.2
+ * 
+ */
+
+public abstract class ViewResource {
+    
+    /**
+     * <p class="changed_added_2_2">Return an actual <code>URL</code>
+     * instance that refers to this resource instance.</p>
+     *
+     * @return Return an actual <code>URL</code> instance that refers to
+     * this resource instance.
+     * 
+     * @since 2.2
+     */
+    public abstract URL getURL();
+
+    
+}
diff --git a/javax/faces/application/package.html b/javax/faces/application/package.html
new file mode 100644
index 0000000..2d952ef
--- /dev/null
+++ b/javax/faces/application/package.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2004-2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+</head>
+<body bgcolor="white">
+
+<p><span class="changed_modified_2_0 changed_modified_2_0_rev_a
+changed_modified_2_1 changed_modified_2_2 changed_modified_2_3">APIs</span> that are used to link an application's
+business logic objects to JavaServer Faces, as well as convenient
+pluggable mechanisms to manage the execution of an application that is
+based on JavaServer Faces.  The main class in this package is {@link
+javax.faces.application.Application}.</p>
+
+</body>
+</html>
diff --git a/javax/faces/bean/ApplicationScoped.java b/javax/faces/bean/ApplicationScoped.java
new file mode 100644
index 0000000..a4862b5
--- /dev/null
+++ b/javax/faces/bean/ApplicationScoped.java
@@ -0,0 +1,63 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+
+/**
+
+ * <p class="changed_added_2_0">When this annotation, along with {@link
+ * ManagedBean} is found on a class, the runtime must act as if a
+ * <code><managed-bean-scope>application<managed-bean-scope></code>
+ * element was declared for the corresponding managed bean.</p>
+
+ *
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface ApplicationScoped {
+}
diff --git a/javax/faces/bean/CustomScoped.java b/javax/faces/bean/CustomScoped.java
new file mode 100644
index 0000000..c9bb465
--- /dev/null
+++ b/javax/faces/bean/CustomScoped.java
@@ -0,0 +1,72 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">When this annotation, along with {@link
+ * ManagedBean} is found on a class, the runtime must act as if a
+ * <code><managed-bean-scope>VALUE<managed-bean-scope></code>
+ * element was declared for the corresponding managed bean, where VALUE
+ * is the value of the {@link #value} attribute, which must be an EL
+ * expression that evaluates to a <code>Map</code>.</p>
+
+ * <p class="changed_added_2_0">Developers must take care when using
+ * custom scopes to ensure that any object references made to or from a
+ * custom scoped bean consider the necessary scope lifetimes.  The
+ * runtime is not required to perform any validations for such
+ * considerations.</p>
+
+
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface CustomScoped {
+
+    public String value();
+}
diff --git a/javax/faces/bean/ManagedBean.java b/javax/faces/bean/ManagedBean.java
new file mode 100644
index 0000000..d28fb7d
--- /dev/null
+++ b/javax/faces/bean/ManagedBean.java
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * class automatically registers the class with the runtime as a managed
+ * bean class.  Classes must be scanned for the presence of this
+ * annotation at application startup, before any requests have been
+ * serviced.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p>The value of the {@link #name} attribute is taken to be the
+ * <em>managed-bean-name</em>.  If the value of the <em>name</em>
+ * attribute is unspecified or is the empty <code>String</code>, the
+ * <em>managed-bean-name</em> is derived from taking the unqualified
+ * class name portion of the fully qualified class name and converting
+ * the first character to lower case.  For example, if the
+ * <code>ManagedBean</code> annotation is on a class with the fully
+ * qualified class name <code>com.foo.Bean</code>, and there is no
+ * <em>name</em> attribute on the annotation, the
+ * <em>managed-bean-name</em> is taken to be <code>bean</code>.  The
+ * fully qualified class name of the class to which this annotation is
+ * attached is taken to be the <em>managed-bean-class</em>.</p>
+
+ * <p>The scope of the managed bean is declared using one of {@link
+ * NoneScoped}, {@link RequestScoped}, {@link ViewScoped}, {@link
+ * SessionScoped}, {@link ApplicationScoped}, or {@link CustomScoped}
+ * annotations.  If the scope annotations are omitted, the bean must be
+ * handled as if the {@link RequestScoped} annotation is present.</p>
+
+ * <p> If the value of the {@link #eager} attribute is
+ * <code>true</code>, and the <code>managed-bean-scope</code> value is
+ * "application", the runtime must instantiate this class when the
+ * application starts.  This instantiation and storing of the instance
+ * must happen before any requests are serviced.  If <em>eager</em> is
+ * unspecified or <code>false</code>, or the
+ * <code>managed-bean-scope</code> is something other than
+ * "application", the default "lazy" instantiation and scoped storage of
+ * the managed bean happens.</p>
+ *
+ * <p>When the runtime processes this annotation, if a managed bean
+ * exists whose name is equal to the derived <em>managed-bean-name</em>,
+ * a <code>FacesException</code> must be thrown and the
+ * application must not be placed in service.</p>
+ *
+ * <p>A class tagged with this annotation must have a public
+ * zero-argument constructor.  If such a constructor is not defined on
+ * the class, a <code>FacesException</code> must be thrown and the
+ * application must not be placed in service.</p>
+ *
+ * </div>
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface ManagedBean {
+
+    /** <p class="changed_added_2_0">Taken to be the
+     * <code>managed-bean-name</code>.  See class documentation for
+     * details.</p>
+     */
+
+    String name() default "";
+
+
+    /** <p class="changed_added_2_0">Taken to be the value of the
+     * <code>eager</code> attribute of the <code>managed-bean</code>.
+     * See class documentation for details.</p>
+     */
+    boolean eager() default false;
+
+}
diff --git a/javax/faces/bean/ManagedProperty.java b/javax/faces/bean/ManagedProperty.java
new file mode 100644
index 0000000..73308ec
--- /dev/null
+++ b/javax/faces/bean/ManagedProperty.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * field of a class annotated with {@link ManagedBean} instructs the
+ * system to inject a value into this property as described in section
+ * JSF.5.3 of the spec prose document in the
+ * <code><managed-property></code> subsection. The time of
+ * instantiation is dictated by the value of the attributes on the usage
+ * of <code>ManagedBean</code> and by the application logic itself.  The
+ * value of the {@link #value} attribute may be a literal
+ * <code>String</code> or a <code>ValueExpression</code>.  If the
+ * latter, the expression must not be evaluated until the bean is
+ * instantiated.  The value of the name attribute is taken to be the
+ * <em>managed-property-name</em> for this property.  If not specified,
+ * the <em>managed-property-name</em> is taken to be the name of the
+ * field to which this is attribute is attached.</p>
+ *
+ * <p class="changed_added_2_0">If this annotation is present on a class
+ * that does not have the <code>ManagedBean</code> annotation, the
+ * implementation must take no action on this annotation.</p>
+ */
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.FIELD)
+public @interface ManagedProperty {
+
+    /** <p class="changed_added_2_0">Taken to be the
+     * <code>managed-property-name</code>.  See class documentation for
+     * details.</p>
+     */
+    String name() default "";
+
+
+    /** <p class="changed_added_2_0">Taken to be the value that is
+     * injected into the field.  See class documentation for
+     * details.</p>
+     */
+    String value();
+
+
+}
diff --git a/javax/faces/bean/NoneScoped.java b/javax/faces/bean/NoneScoped.java
new file mode 100644
index 0000000..f53e95d
--- /dev/null
+++ b/javax/faces/bean/NoneScoped.java
@@ -0,0 +1,61 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">When this annotation, along with {@link
+ * ManagedBean} is found on a class, the runtime must act as if a
+ * <code><managed-bean-scope>none<managed-bean-scope></code>
+ * element was declared for the corresponding managed bean.</p>
+ *
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface NoneScoped {
+}
diff --git a/javax/faces/bean/ReferencedBean.java b/javax/faces/bean/ReferencedBean.java
new file mode 100644
index 0000000..b54d437
--- /dev/null
+++ b/javax/faces/bean/ReferencedBean.java
@@ -0,0 +1,69 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * class is equivalent to the <em>referenced-bean</em> element
+ * in the application configuration resources.</p>
+ *
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.CLASS)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface ReferencedBean {
+
+    /** <p class="changed_added_2_0">Taken to be the
+     * <code>referenced-bean-name</code>.  See class documentation for
+     * {@link ManagedBean} for details.</p>
+     */
+
+    String name() default "";
+
+}
diff --git a/javax/faces/bean/RequestScoped.java b/javax/faces/bean/RequestScoped.java
new file mode 100644
index 0000000..372e589
--- /dev/null
+++ b/javax/faces/bean/RequestScoped.java
@@ -0,0 +1,61 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">When this annotation, along with {@link
+ * ManagedBean} is found on a class, the runtime must act as if a
+ * <code><managed-bean-scope>request<managed-bean-scope></code>
+ * element was declared for the corresponding managed bean.</p>
+ *
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface RequestScoped {
+}
diff --git a/javax/faces/bean/SessionScoped.java b/javax/faces/bean/SessionScoped.java
new file mode 100644
index 0000000..eb272c2
--- /dev/null
+++ b/javax/faces/bean/SessionScoped.java
@@ -0,0 +1,61 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">When this annotation, along with {@link
+ * ManagedBean} is found on a class, the runtime must act as if a
+ * <code><managed-bean-scope>session<managed-bean-scope></code>
+ * element was declared for the corresponding managed bean.</p>
+ *
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface SessionScoped {
+}
diff --git a/javax/faces/bean/ViewScoped.java b/javax/faces/bean/ViewScoped.java
new file mode 100644
index 0000000..f8aaaa4
--- /dev/null
+++ b/javax/faces/bean/ViewScoped.java
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.bean;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_2">When</span> this annotation, along with
+ * {@code ManagedBean} is found on a class, the runtime must act as if a
+ * <code><managed-bean-scope>view<managed-bean-scope></code>
+ * element was declared for the corresponding managed bean.</p>
+
+ * <div class="changed_added_2_2">
+
+ * <p>If <code>ProjectStage</code> is not
+ * <code>ProjectStage.Production</code>, verify that the current {@code
+ * UIViewRoot} does not have its {@code transient}
+ * property set to {@code true}.  If so, add a <code>FacesMessage</code>
+ * for the current {@code viewId} to the <code>FacesContext</code>
+ * stating {@code @ViewScoped} beans cannot work if the view is marked
+ * as transient.  Also log a <code>Level.WARNING</code> message to the 
+ * log.  If <code>ProjectStage</code> <strong>is</strong>
+ * <code>ProjectStage.Production</code>, do not do this
+ * verification.</p>
+
+ * <p>The bean must be stored in the map returned from 
+ * {@code javax.faces.component.UIViewRoot.getViewMap(boolean)}.</p>
+
+ * <p>The runtime must ensure that any methods on the bean annotated
+ * with {@code PostConstruct} or {@code PreDestroy} are called when the
+ * scope begins and ends, respectively.  Two circumstances can cause the
+ * scope to end.</p>
+
+ * <ul>
+
+ * <li><p>{@code FacesContext.setViewRoot()} is called with the new
+ * {@code UIViewRoot} being different than the current one.</p></li>
+
+ * <li><p>The session, that happened to be active when the bean was
+ * created, expires.  If no session existed when the bean was created,
+ * then this circumstance does not apply.</p></li>
+
+ * </ul>
+
+ * <p>In the session expiration case, the runtime must ensure that
+ * {@code FacesContext.getCurrentInstance()} returns a valid instance if
+ * it is called during the processing of the {@code @PreDestroy}
+ * annotated method.  The set of methods on {@code FacesContext} that
+ * are valid to call in this circumstance is identical to those
+ * documented as "valid to call this method during application startup
+ * or shutdown". On the {@code ExternalContext} returned from that
+ * {@code FacesContext}, all of the methods documented as "valid to call
+ * this method during application startup or shutdown" are valid to
+ * call.  In addition, the method {@code
+ * ExternalContext.getSessionMap()} is also valid to call.</p>
+
+
+ * <p>The annotations in this package may be
+ * deprecated in a future version of this specification because they
+ * duplicate functionality provided by other specifications included in
+ * JavaEE.  When possible, the corresponding annotations from the
+ * appropriate Java EE specification should be used in preference to
+ * these annotations.  In this case, the corresponding annotation is
+ * {@code javax.faces.view.ViewScoped}.  The functionality of this
+ * corresponding annotation is identical to this one, but it is
+ * implemented as a CDI custom scope.</p>
+
+ * </div>
+
+ *
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface ViewScoped {
+}
diff --git a/javax/faces/bean/package.html b/javax/faces/bean/package.html
new file mode 100644
index 0000000..72c5a72
--- /dev/null
+++ b/javax/faces/bean/package.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2004-2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+</head>
+<body bgcolor="white">
+
+<p class="changed_added_2_0">These javadoc files constitute the
+“Faces Managed Bean Annotation Specification for Containers
+Conforming to Servlet 2.5 and Beyond”</p>
+
+<div class="changed_added_2_0">
+
+<p>At the time of this writing, a forthcoming JCP effort is being
+planned to extract the specification for managed beans from JSF and
+place it into its own specification.  To account for this effort and to
+avoid introducing classes into JSF 2.0 that would have to be deprecated
+when this effort is complete, implementations of JSF 2.0 are not
+required to implement the “Faces Managed Bean Annotation
+Specification for Containers Conforming to Servlet 2.5”.  However,
+JSF implementations are strongly encouraged to implement this
+specification, as it provides significant improvements in ease of
+use.</p>
+
+<p>The annotations must be processed as specified in section JSF.11.5.1.</p>
+
+
+</div>
+
+</body>
+</html>
diff --git a/javax/faces/component/ActionSource.java b/javax/faces/component/ActionSource.java
new file mode 100644
index 0000000..9f843ea
--- /dev/null
+++ b/javax/faces/component/ActionSource.java
@@ -0,0 +1,205 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+import javax.faces.el.MethodBinding;
+
+
+
+/**
+ * <p><strong>ActionSource</strong> is an interface that may be implemented
+ * by any concrete {@link UIComponent} that wishes to be a source of
+ * {@link ActionEvent}s, including the ability to invoke application
+ * actions via the default {@link ActionListener} mechanism.</p>
+ */
+
+public interface ActionSource {
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>If the implementing class also implements {@link
+     * ActionSource2}, the implementation of this method must call
+     * through to {@link ActionSource2#getActionExpression} and examine
+     * the result.  If the result came from a previous call to {@link
+     * #setAction}, extract the <code>MethodBinding</code> from it and
+     * return it.  Otherwise, wrap the returned {@link
+     * javax.el.MethodExpression} in a <code>MethodBinding</code>
+     * implementation, and return it.</p>
+     * 
+     * <p>If the implementing class does not implement
+     * <code>ActionSource2</code>, return the {@link
+     * MethodBinding}pointing at the application action to be invoked,
+     * if this {@link UIComponent} is activated by the user, during the
+     * <em>Apply Request Values</em> or <em>Invoke Application</em>
+     * phase of the request processing lifecycle, depending on the value
+     * of the <code>immediate</code> property.</p>
+     *
+     * @deprecated This has been replaced by {@link
+     * ActionSource2#getActionExpression}.
+     */
+    public MethodBinding getAction();
+
+    /**
+     * <p>If the implementing class also implements {@link
+     * ActionSource2}, the implementation of this method must wrap the
+     * argument <code>action</code> in a class that implements {@link
+     * javax.el.MethodExpression} and call through to {@link
+     * ActionSource2#setActionExpression}, passing the wrapped
+     * <code>action</code>.</p>
+     *
+     * <p>If the implementing class does not implement
+     * <code>ActionSource2</code>, set the {@link MethodBinding}
+     * pointing at the appication action to be invoked, if this {@link
+     * UIComponent} is activated by the user, during the <em>Apply
+     * Request Values</em> or <em>Invoke Application</em> phase of the
+     * request processing lifecycle, depending on the value of the
+     * <code>immediate</code> property.</p>
+     *
+     * <p>Any method referenced by such an expression must be public, with
+     * a return type of <code>String</code>, and accept no parameters.</p>
+     *
+     * @param action The new MethodBinding expression
+     *
+     * @deprecated This has been replaced by {@link
+     * ActionSource2#setActionExpression(javax.el.MethodExpression)}.
+     */
+    public void setAction(MethodBinding action);
+
+
+    /**
+     * <p>If {@link #setActionListener} was not previously called
+     * for this instance, this method must return <code>null</code>.  If
+     * it was called, this method must return the exact
+     * <code>MethodBinding</code> instance that was passed to {@link
+     * #setActionListener}.</p>
+     *
+     * <p> The method to be invoked, if this {@link UIComponent} is
+     * activated by the user, will be called during the <em>Apply
+     * Request Values</em> or <em>Invoke Application</em> phase of the
+     * request processing lifecycle, depending upon the value of the
+     * <code>immediate</code> property.</p>
+     *
+     * @deprecated Use {@link #getActionListeners} instead.
+     */
+    public MethodBinding getActionListener();
+
+
+    /**
+     * <p>Wrap the argument <code>actionListener</code> in an
+     * implementation of {@link ActionListener}
+     * and store it in the internal data structure that backs the {@link
+     * #getActionListeners} method, taking care to over-write any
+     * instance that was stored by a previous call to
+     * <code>setActionListener</code>.</p>
+     *
+     * <p>Any method referenced by such an expression must be public, with
+     * a return type of <code>void</code>, and accept a single parameter of
+     * type <code>ActionEvent</code>.</p>
+     *
+     * @param actionListener The new method binding expression
+     *
+     * @deprecated This has been replaced by {@link
+     * #addActionListener(javax.faces.event.ActionListener)}.
+     */
+    public void setActionListener(MethodBinding actionListener);
+
+    /**
+     * <p>Return a flag indicating that the default {@link ActionListener}
+     * provided by the JavaServer Faces implementation should be executed
+     * immediately (that is, during <em>Apply Request Values</em> phase
+     * of the request processing lifecycle), rather than waiting until the
+     * <em>Invoke Application</em> phase.  The default value for this
+     * property must be <code>false</code>.</p>
+     */
+    public boolean isImmediate();
+
+
+    /**
+     * <p>Set the "immediate execution" flag for this {@link UIComponent}.</p>
+     *
+     * @param immediate The new immediate execution flag
+     */
+    public void setImmediate(boolean immediate);
+
+
+    // -------------------------------------------------- Event Listener Methods
+
+
+    /**
+     * <p>Add a new {@link ActionListener} to the set of listeners interested
+     * in being notified when {@link ActionEvent}s occur.</p>
+     *
+     * @param listener The {@link ActionListener} to be added
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public void addActionListener(ActionListener listener);
+
+
+    /**
+     * <p>Return the set of registered {@link ActionListener}s for this
+     * {@link ActionSource} instance.  If there are no registered listeners,
+     * a zero-length array is returned.</p>
+     */
+    public abstract ActionListener[] getActionListeners();
+
+
+    /**
+     * <p>Remove an existing {@link ActionListener} (if any) from the set of
+     * listeners interested in being notified when {@link ActionEvent}s
+     * occur.</p>
+     *
+     * @param listener The {@link ActionListener} to be removed
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public void removeActionListener(ActionListener listener);
+
+
+}
diff --git a/javax/faces/component/ActionSource2.java b/javax/faces/component/ActionSource2.java
new file mode 100644
index 0000000..c43eec9
--- /dev/null
+++ b/javax/faces/component/ActionSource2.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.el.MethodExpression;
+import javax.faces.event.ActionListener;
+
+
+
+/**
+ * <p><strong>ActionSource2</strong> extends {@link ActionSource} and
+ * provides a JavaBeans property analogous to the "<code>action</code>"
+ * property on <code>ActionSource</code>.  The difference is the type of
+ * this property is a {@link MethodExpression} rather than a
+ * <code>MethodBinding</code>.  This allows the
+ * <code>ActionSource</code> concept to leverage the new Unified EL
+ * API.</p>
+ *
+ * @since 1.2
+ */
+
+public interface ActionSource2 extends ActionSource {
+
+
+    // -------------------------------------------------------------- Properties
+
+    /**
+     * <p>Return the {@link MethodExpression} pointing at the application
+     * action to be invoked, if this {@link UIComponent} is activated by
+     * the user, during the <em>Apply Request Values</em> or <em>Invoke
+     * Application</em> phase of the request processing lifecycle,
+     * depending on the value of the <code>immediate</code>
+     * property.</p>
+     *
+     * <p>Note that it's possible that the returned
+     * <code>MethodExpression</code> is just a wrapper around a
+     * <code>MethodBinding</code> instance whith was set by a call to
+     * {@link ActionSource#setAction}.  This makes it possible for the
+     * default {@link ActionListener} to continue to work properly with
+     * older components.</p>
+     */
+    public MethodExpression getActionExpression();
+
+    /**
+     * <p>Set the {@link MethodExpression} pointing at the appication
+     * action to be invoked, if this {@link UIComponent} is activated by
+     * the user, during the <em>Apply Request Values</em> or <em>Invoke
+     * Application</em> phase of the request processing lifecycle,
+     * depending on the value of the <code>immediate</code>
+     * property.</p>
+     *
+     * <p>Any method referenced by such an expression must be public, with
+     * a return type of <code>String</code>, and accept no parameters.</p>
+     *
+     * @param action The new method expression
+     */
+    public void setActionExpression(MethodExpression action);
+
+    
+}
diff --git a/javax/faces/component/AttachedObjectListHolder.java b/javax/faces/component/AttachedObjectListHolder.java
new file mode 100644
index 0000000..b581ce4
--- /dev/null
+++ b/javax/faces/component/AttachedObjectListHolder.java
@@ -0,0 +1,217 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+import java.util.List;
+import java.util.ArrayList;
+import java.lang.reflect.Array;
+import java.util.Iterator;
+
+/**
+ * <p>
+ * Utility class to enable partial state saving of Lists of attached objects
+ * such as <code>FacesListener</code>s or <code>Validator</code>s.
+ * </p>
+ */
+ at SuppressWarnings({"unchecked"})
+class AttachedObjectListHolder<T> implements PartialStateHolder {
+
+    private boolean initialState;
+    private List<T> attachedObjects = new ArrayList<T>(2);
+
+
+    // ------------------------------------- Methods from PartialStateHolder
+
+
+    public void markInitialState() {
+
+        if (!attachedObjects.isEmpty()) {
+            for (T t : attachedObjects) {
+                if (t instanceof PartialStateHolder) {
+                    ((PartialStateHolder) t).markInitialState();
+                }
+            }
+        }
+        initialState = true;
+
+    }
+
+
+    public boolean initialStateMarked() {
+
+        return initialState;
+
+    }
+
+
+    public void clearInitialState() {
+
+        if (!attachedObjects.isEmpty()) {
+            for (T t : attachedObjects) {
+                if (t instanceof PartialStateHolder) {
+                    ((PartialStateHolder) t).clearInitialState();
+                }
+            }
+        }
+        initialState = false;
+
+    }
+
+
+    // -------------------------------------------- Methods from StateHolder
+
+
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (attachedObjects == null) {
+            return null;
+        }
+        if (initialState) {
+            Object[] attachedObjects = new Object[this.attachedObjects.size()];
+            boolean stateWritten = false;
+            for (int i = 0, len = attachedObjects.length; i < len; i++) {
+                T attachedObject = this.attachedObjects.get(i);
+                if (attachedObject instanceof StateHolder) {
+                    StateHolder sh = (StateHolder) attachedObject;
+                    if (!sh.isTransient()) {
+                        attachedObjects[i] = sh.saveState(context);
+                    }
+                    if (attachedObjects[i] != null) {
+                        stateWritten = true;
+                    }
+                }
+            }
+            return ((stateWritten) ? attachedObjects : null);
+        } else {
+
+            Object[] attachedObjects = new Object[this.attachedObjects.size()];
+            for (int i = 0, len = attachedObjects.length; i < len; i++) {
+                attachedObjects[i] = UIComponentBase.saveAttachedState(context, this.attachedObjects.get(i));
+            }
+            return (attachedObjects);
+        }
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+
+        Object[] attachedObjects = (Object[]) state;
+        if (attachedObjects.length > 0 && attachedObjects[0] instanceof StateHolderSaver) {
+            // overwrite the existing attachedObjects with those included
+            // in the full state.
+            if (this.attachedObjects != null) {
+                this.attachedObjects.clear();
+            } else {
+                this.attachedObjects = new ArrayList<T>(2);
+            }
+            for (int i = 0, len = attachedObjects.length; i < len; i++) {
+                T restored = (T) ((StateHolderSaver) attachedObjects[i]).restore(context);
+                if (restored != null) {
+                    this.attachedObjects.add(restored);
+                }
+            }
+        } else {
+            // assume 1:1 relation between existing attachedObjects and state
+            for (int i = 0, len = attachedObjects.length; i < len; i++) {
+                T l = this.attachedObjects.get(i);
+                if (l instanceof StateHolder) {
+                    ((StateHolder) l).restoreState(context, attachedObjects[i]);
+                }
+            }
+        }
+
+    }
+
+
+    public boolean isTransient() {
+
+        return false;
+
+    }
+
+
+    public void setTransient(boolean newTransientValue) {
+
+        // no-op
+
+    }
+
+
+    // ------------------------------------------------------ Public Methods
+
+
+    void add(T attachedObject) {
+
+        clearInitialState();
+        attachedObjects.add(attachedObject);
+
+    }
+
+    void remove(T attachedObject) {
+
+        clearInitialState();
+        attachedObjects.remove(attachedObject);
+
+    }
+
+    T[] asArray(Class<T> type) {
+
+        return new ArrayList<T>(attachedObjects).toArray((T[])Array.newInstance(type, attachedObjects.size()));
+        
+    }
+    
+    Iterator<T> iterator() {
+        return attachedObjects.iterator();
+    }
+    
+}
diff --git a/javax/faces/component/ComponentStateHelper.java b/javax/faces/component/ComponentStateHelper.java
new file mode 100644
index 0000000..9b8f99d
--- /dev/null
+++ b/javax/faces/component/ComponentStateHelper.java
@@ -0,0 +1,481 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+import static javax.faces.component.UIComponentBase.saveAttachedState;
+import static javax.faces.component.UIComponentBase.restoreAttachedState;
+import javax.el.ValueExpression;
+import java.util.*;
+import java.io.Serializable;
+
+/**A base implementation for
+ * maps which implement the PartialStateHolder and TransientStateHolder interfaces.
+ *
+ * This can be used as a base-class for all
+ * state-holder implementations in components,
+ * converters and validators and other implementations
+ * of the StateHolder interface.
+ */
+ at SuppressWarnings({"unchecked"})
+class ComponentStateHelper implements StateHelper , TransientStateHelper {
+
+    private UIComponent component;
+    private boolean isTransient;
+    private Map<Serializable, Object> deltaMap;
+    private Map<Serializable, Object> defaultMap;
+    private Map<Object, Object> transientState;
+    
+    // ------------------------------------------------------------ Constructors
+
+
+    public ComponentStateHelper(UIComponent component) {
+
+        this.component = component;
+        this.deltaMap = new HashMap<Serializable,Object>();
+        this.defaultMap = new HashMap<Serializable,Object>();
+        this.transientState = null;
+    }
+
+
+    // ------------------------------------------------ Methods from StateHelper
+
+
+    /**
+     * Put the object in the main-map
+     * and/or the delta-map, if necessary.
+     *
+     * @param key
+     * @param value
+     * @return the original value in the delta-map, if not present, the old value in the main map
+     */
+    public Object put(Serializable key, Object value) {
+
+        if(component.initialStateMarked() || value instanceof PartialStateHolder) {
+            Object retVal = deltaMap.put(key, value);
+
+            if(retVal==null) {
+                return defaultMap.put(key,value);
+            }
+            else {
+                defaultMap.put(key,value);
+                return retVal;
+            }
+        }
+        else {
+            return defaultMap.put(key,value);
+        }
+    }
+
+
+    /**
+     * We need to remove from both
+     * maps, if we do remove an existing key.
+     *
+     * @param key
+     * @return the removed object in the delta-map. if not present, the removed object from the main map
+     */
+    public Object remove(Serializable key) {
+        if(component.initialStateMarked()) {
+            Object retVal = deltaMap.remove(key);
+
+            if(retVal==null) {
+                return defaultMap.remove(key);
+            }
+            else {
+                defaultMap.remove(key);
+                return retVal;
+            }
+        }
+        else {
+            return defaultMap.remove(key);
+        }
+    }
+
+
+    /**
+     * @see StateHelper#put(java.io.Serializable, String, Object)
+     */
+    public Object put(Serializable key, String mapKey, Object value) {
+
+        Object ret = null;
+        if (component.initialStateMarked()) {
+            Map<String,Object> dMap = (Map<String,Object>) deltaMap.get(key);
+            if (dMap == null) {
+                dMap = new HashMap<String,Object>(5);
+                deltaMap.put(key, dMap);
+            }
+            ret = dMap.put(mapKey, value);
+
+        }
+        Map<String,Object> map = (Map<String,Object>) get(key);
+        if (map == null) {
+            map = new HashMap<String,Object>(8);
+            defaultMap.put(key, map);
+        }
+        if (ret == null) {
+            return map.put(mapKey, value);
+        } else {
+            map.put(mapKey, value);
+            return ret;
+        }
+
+    }
+
+
+    /**
+     * Get the object from the main-map.
+     * As everything is written through
+     * from the delta-map to the main-map, this
+     * should be enough.
+     *
+     * @param key
+     * @return
+     */
+    public Object get(Serializable key) {
+        return defaultMap.get(key);
+    }
+
+
+    /**
+     * @see StateHelper#eval(java.io.Serializable)
+     */
+    public Object eval(Serializable key) {
+        return eval(key, null);
+    }
+
+
+    /**
+     * @see StateHelper#eval(java.io.Serializable, Object)
+     */
+    public Object eval(Serializable key, Object defaultValue) {
+        Object retVal = get(key);
+        if (retVal == null) {
+            ValueExpression ve = component.getValueExpression(key.toString());
+            if (ve != null) {
+                retVal = ve.getValue(component.getFacesContext().getELContext());
+            }
+
+        }
+
+        return ((retVal != null) ? retVal : defaultValue);
+    }
+
+
+    /**
+     * @see StateHelper#add(java.io.Serializable, Object)
+     */
+    public void add(Serializable key, Object value) {
+
+        if (component.initialStateMarked()) {
+            List<Object> deltaList = (List<Object>) deltaMap.get(key);
+            if (deltaList == null) {
+                deltaList = new ArrayList<Object>(4);
+                deltaMap.put(key, deltaList);
+            }
+            deltaList.add(value);
+        }
+        List<Object> items = (List<Object>) get(key);
+        if (items == null) {
+            items = new ArrayList<Object>(4);
+            defaultMap.put(key, items);
+        }
+        items.add(value);
+
+    }
+
+
+    /**
+     * @see StateHelper#remove(java.io.Serializable, Object)
+     */
+    public Object remove(Serializable key, Object valueOrKey) {
+        Object source = get(key);
+        if (source instanceof Collection) {
+            return removeFromList(key, valueOrKey);
+        } else if (source instanceof Map) {
+            return removeFromMap(key, valueOrKey.toString());
+        }
+        return null;
+    }
+
+
+    // ------------------------------------------------ Methods from StateHolder
+
+
+    /**
+     * One and only implementation of
+     * save-state - makes all other implementations
+     * unnecessary.
+     *
+     * @param context
+     * @return the saved state
+     */
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if(component.initialStateMarked()) {
+            return saveMap(context, deltaMap);
+        }
+        else {
+            return saveMap(context, defaultMap);
+        }
+    }
+
+
+
+    /**
+     * One and only implementation of
+     * restore state. Makes all other implementations
+     * unnecessary.
+     *
+     * @param context FacesContext
+     * @param state the state to be restored.
+     */
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+        
+        if (!component.initialStateMarked() && !defaultMap.isEmpty())
+        {
+            defaultMap.clear();
+            if(deltaMap != null && !deltaMap.isEmpty())
+            {
+                deltaMap.clear();
+            }
+        }
+        
+        Object[] savedState = (Object[]) state;
+        if (savedState[savedState.length - 1] != null) {
+            component.initialState = (Boolean) savedState[savedState.length - 1];
+        }
+        int length = (savedState.length-1)/2;
+        for (int i = 0; i < length; i++) {
+           Object value = savedState[i * 2 + 1];
+           if (Void.TYPE.equals(value)) {
+               value = null;
+           }
+            Serializable serializable = (Serializable) savedState[i * 2];
+            if (value != null) {
+                if (value instanceof Collection) {
+                    value = restoreAttachedState(context, value);
+                } else if (value instanceof StateHolderSaver) {
+                    value = ((StateHolderSaver) value).restore(context);
+                } else {
+                    value = (value instanceof Serializable
+                             ? value
+                             : restoreAttachedState(context, value));
+                }
+            }
+            if (value instanceof Map) {
+                for (Map.Entry<String, Object> entry : ((Map<String, Object>) value)
+                      .entrySet()) {
+                    this.put(serializable, entry.getKey(), entry.getValue());
+                }
+            } else if (value instanceof List) {
+                List<Object> list = (List) get(serializable);
+                for (Object o : ((List<Object>) value)) {
+                    if (list == null || !list.contains(o)) {
+                        this.add(serializable, o);
+                    }
+                }
+            } else {
+                put(serializable, value);
+            }
+        }
+    }
+
+
+    /**
+     * @see javax.faces.component.StateHolder#isTransient()
+     */
+    public boolean isTransient() {
+        return isTransient;
+    }
+
+    
+    /**
+     * @see StateHolder#setTransient(boolean)
+     */
+    public void setTransient(boolean newTransientValue) {
+        isTransient = newTransientValue;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private Object saveMap(FacesContext context, Map<Serializable, Object> map) {
+
+        if (map.isEmpty()) {
+            if (!component.initialStateMarked()) {
+                // only need to propagate the component's delta status when
+                // delta tracking has been disabled.  We're assuming that
+                // the VDL will reset the status when the view is reconstructed,
+                // so no need to save the state if the saved state is the default.
+                return new Object[] { component.initialStateMarked() };
+            }
+            return null;
+        }
+
+        Object[] savedState = new Object[map.size() * 2 + 1];
+
+        int i=0;
+
+        for(Map.Entry<Serializable, Object> entry : map.entrySet()) {
+            Object value = entry.getValue();
+            if (value == null) {
+                value = Void.TYPE;
+            }
+            savedState[i * 2] = entry.getKey();
+            if (value instanceof Collection
+                  || value instanceof StateHolder
+                  || value instanceof Map
+                  || !(value instanceof Serializable)) {
+                value = saveAttachedState(context,value);
+            }
+            savedState[i * 2 + 1] = value;
+            i++;
+        }
+        if (!component.initialStateMarked()) {
+            savedState[savedState.length - 1] = component.initialStateMarked();
+        }
+        return savedState;
+
+    }
+
+
+    private Object removeFromList(Serializable key, Object value) {
+        Object ret = null;
+        if (component.initialStateMarked() || value instanceof PartialStateHolder) {
+            Collection<Object> deltaList = (Collection<Object>) deltaMap.get(key);
+            if (deltaList != null) {
+                ret = deltaList.remove(value);
+                if (deltaList.isEmpty()) {
+                    deltaMap.remove(key);
+                }
+            }
+        }
+        Collection<Object> list = (Collection<Object>) get(key);
+        if (list != null) {
+            if (ret == null) {
+                ret = list.remove(value);
+            } else {
+                list.remove(value);
+            }
+            if (list.isEmpty()) {
+                defaultMap.remove(key);
+            }
+        }
+        return ret;
+    }
+
+
+    private Object removeFromMap(Serializable key, String mapKey) {
+        Object ret = null;
+        if (component.initialStateMarked()) {
+            Map<String,Object> dMap = (Map<String,Object>) deltaMap.get(key);
+            if (dMap != null) {
+                ret = dMap.remove(mapKey);
+                if (dMap.isEmpty()) {
+                    deltaMap.remove(key);
+                }
+            }
+        }
+        Map<String,Object> map = (Map<String,Object>) get(key);
+        if (map != null) {
+            if (ret == null) {
+                ret = map.remove(mapKey);
+            } else {
+                map.remove(mapKey);
+
+            }
+            if (map.isEmpty()) {
+                defaultMap.remove(key);
+            }
+        }
+        if (ret != null && !component.initialStateMarked()) {
+            deltaMap.remove(key);
+        }
+        return ret;
+    }
+
+
+    public Object getTransient(Object key)
+    {
+        return (transientState == null) ? null : transientState.get(key);
+    }
+
+    public Object getTransient(Object key, Object defaultValue)
+    {
+        Object returnValue = (transientState == null) ? null : transientState.get(key);
+        if (returnValue != null)
+        {
+            return returnValue;
+        }
+        return defaultValue;
+    }
+
+    public Object putTransient(Object key, Object value)
+    {
+        if (transientState == null)
+        {
+            transientState = new HashMap<Object, Object>();
+        }
+        return transientState.put(key, value);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void restoreTransientState(FacesContext context, Object state)
+    {
+        transientState = (Map<Object, Object>) state;
+    }
+    
+    public Object saveTransientState(FacesContext context)
+    {
+        return transientState;
+    }
+}
diff --git a/javax/faces/component/ContextCallback.java b/javax/faces/component/ContextCallback.java
new file mode 100644
index 0000000..580d1c4
--- /dev/null
+++ b/javax/faces/component/ContextCallback.java
@@ -0,0 +1,74 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * <p>A simple callback interace that enables taking action on a
+ * specific UIComponent (either facet or child) in the view while
+ * preserving any contextual state for that component instance in the
+ * view.</p>
+ *
+ */
+public interface ContextCallback {
+    
+    /**
+     * <p>This method will be called by an implementation of {@link
+     * UIComponent#invokeOnComponent} and must be passed the component
+     * with the <code>clientId</code> given as an argument to
+     * <code>invokeOnComponent</code>.  At the point in time when this
+     * method is called, the argument <code>target</code> is guaranteed
+     * to be in the proper state with respect to its ancestors in the
+     * View.</p>
+     *
+     * @param context the <code>FacesContext</code> for this request.
+     *
+     * @param target the {@link UIComponent} that was located by
+     * <code>clientId</code> by a call to {@link
+     * UIComponent#invokeOnComponent}.
+     */
+    
+    public void invokeContextCallback(FacesContext context, 
+				      UIComponent target);
+    
+}
diff --git a/javax/faces/component/EditableValueHolder.java b/javax/faces/component/EditableValueHolder.java
new file mode 100644
index 0000000..22dbeb5
--- /dev/null
+++ b/javax/faces/component/EditableValueHolder.java
@@ -0,0 +1,291 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
+import javax.faces.validator.Validator;
+import javax.faces.el.MethodBinding;
+import javax.faces.render.Renderer;
+
+
+/**
+ * <p><strong class="changed_modified_2_0
+ * changed_modified_2_0_rev_a">EditableValueHolder</strong> is an
+ * extension of ValueHolder that describes additional features supported
+ * by editable components, including {@link ValueChangeEvent}s and
+ * {@link Validator}s.
+ */
+
+public interface EditableValueHolder extends ValueHolder {
+
+    /**
+     * <p>Return the submittedValue value of this component.  This
+     * method should only be used by the <code>encodeBegin()</code>
+     * and/or <code>encodeEnd()</code> methods of this component, or its
+     * corresponding {@link Renderer}.  <span
+     * class="changed_modified_2_0_rev_a">The action taken based on
+     * whether the value is <code>null</code>, empty, or
+     * non-<code>null</code> is determined based on the value of the
+     * <code>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</code>context-param.</span></p>
+     */
+    public Object getSubmittedValue();
+
+    /**
+     * <p class="changed_added_2_0">Convenience method to reset this
+     * component's value to the un-initialized state.</p>
+     *
+     * @since 2.0
+     */
+
+    public void resetValue();
+
+
+    /**
+     * <p>Set the submittedValue value of this component.  This method
+     * should only be used by the <code>decode()</code> and
+     * <code>validate()</code> method of this component, or its
+     * corresponding {@link Renderer}.  <span
+     * class="changed_modified_2_0_rev_a">The action taken based on
+     * whether the value is <code>null</code>, empty, or
+     * non-<code>null</code> is determined based on the value of the
+     * <code>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</code>context-param.</span></p>
+
+     * @param submittedValue The new submitted value
+     */
+    public void setSubmittedValue(Object submittedValue);
+
+    /**
+     * Return the "local value set" state for this component.
+     * Calls to <code>setValue()</code> automatically reset
+     * this property to <code>true</code>.
+     */
+    public boolean isLocalValueSet();
+
+    /**
+     * Sets the "local value set" state for this component.
+     */
+    public void setLocalValueSet(boolean localValueSet);
+
+
+
+    /**
+     * <p>Return a flag indicating whether the local value of this component
+     * is valid (no conversion error has occurred).</p>
+     */
+    public boolean isValid();
+
+
+    /**
+     * <p>Set a flag indicating whether the local value of this component
+     * is valid (no conversion error has occurred).</p>
+     *
+     * @param valid The new valid flag
+     */
+    public void setValid(boolean valid);
+
+
+    /**
+     * <p>Return the "required field" state for this component.</p>
+     */
+    public boolean isRequired();
+
+    /**
+     * <p>Set the "required field" state for this component.</p>
+     *
+     * @param required The new "required field" state
+     */
+    public void setRequired(boolean required);
+
+    /**
+     * <p>Return the "immediate" state for this component.</p>
+     */
+    public boolean isImmediate();
+
+    /**
+     * <p>Set the "immediate" state for this component.  When
+     * set to true, the component's value will be converted
+     * and validated immediately in the <em>Apply Request Values</em>
+     * phase, and {@link ValueChangeEvent}s will be delivered
+     * in that phase as well.  The default value for this
+     * property must be <code>false</code>.</p>
+     *
+     * @param immediate The new "immediate" state
+     */
+    public void setImmediate(boolean immediate);
+
+    /**
+     * <p>If {@link #setValidator} was not previously called for this
+     * instance, this method must return <code>null</code>.  If it was
+     * called, this method must return the exact
+     * <code>MethodBinding</code> instance that was passed to {@link
+     * #setValidator}.</p>
+     *
+     * <p>This method will be called during the <em>Process
+     * Validations</em> or <em>Apply Request Values</em> phases
+     * (depending on the value of the <code>immediate</code>
+     * property). </p>
+     *
+     * @deprecated {@link #getValidators} should be used instead.
+     */
+    public MethodBinding getValidator();
+
+    /**
+     * <p>Wrap the argument <code>validatorBinding</code> in an
+     * implementation of {@link javax.faces.validator.Validator} and
+     * store it in the internal data structure that backs the {@link
+     * #getValidators} method, taking care to over-write any instance
+     * that was stored by a previous call to <code>setValidator</code>.
+     * </p>
+     *
+     * <p>The argument method will be called during the <em>Process
+     * Validations</em> or <em>Apply Request Values</em> phases
+     * (depending on the value of the <code>immediate</code>
+     * property). </p>
+     *
+     * <p>Any method referenced by such an expression must be public,
+     * with a return type of <code>void</code>, and accept parameters of
+     * type {@link javax.faces.context.FacesContext}, {@link
+     * UIComponent}, and <code>Object</code>.</p>
+     *
+     * @param validatorBinding The new <code>MethodBinding</code> instance
+     * 
+     * @deprecated Use {@link #addValidator} instead, obtaining the
+     * argument {@link Validator} by creating an instance of {@link
+     * javax.faces.validator.MethodExpressionValidator}.
+     */
+    public void setValidator(MethodBinding validatorBinding);
+
+    /**
+     * <p>If {@link #setValueChangeListener} was not previously called
+     * for this instance, this method must return <code>null</code>.  If
+     * it was called, this method must return the exact
+     * <code>MethodBinding</code> instance that was passed to {@link
+     * #setValueChangeListener}.</p>
+     *
+     * @deprecated Use {@link #getValueChangeListeners} instead.
+     */
+    public MethodBinding getValueChangeListener();
+
+    /**
+     * <p>Wrap the argument <code>valueChangeMethod</code> in an
+     * implementation of {@link ValueChangeListener}
+     * and store it in the internal data structure that backs the {@link
+     * #getValueChangeListeners} method, taking care to over-write any
+     * instance that was stored by a previous call to
+     * <code>setValueChangeListener</code>.</p>
+     *
+     * <p>This argument method will be called during the <em>Process
+     * Validations</em> or <em>Apply Request Values</em> phases
+     * (depending on the value of the <code>immediate</code>
+     * property). </p>
+     *
+     * <p>Any method referenced by such an expression must be public,
+     * with a return type of <code>void</code>, and accept a parameter
+     * of type {@link javax.faces.event.ValueChangeEvent}.</p>
+     *
+     * @param valueChangeMethod The new method binding instance 
+     *
+     * @deprecated Use {@link #addValueChangeListener} instead, obtaining the
+     * argument {@link ValueChangeListener} by creating an instance of {@link
+     * javax.faces.event.MethodExpressionValueChangeListener}.
+     */
+    public void setValueChangeListener(MethodBinding valueChangeMethod);
+
+    /**
+     * <p>Add a {@link
+     * Validator} instance to the set associated with this
+     * component.</p>
+     *
+     * @param validator The {@link Validator} to add
+     *
+     * @throws NullPointerException if <code>validator</code>
+     *  is null
+     */
+    public void addValidator(Validator validator);
+
+    /**
+     * <p>Return the set of registered {@link Validator}s for this
+     * component instance.  If there are no registered validators,
+     * a zero-length array is returned.</p>
+     */
+    public Validator[] getValidators();
+
+    /**
+     * <p>Remove a {@link Validator} instance from the set associated with
+     * this component, if it was previously associated.
+     * Otherwise, do nothing.</p>
+     *
+     * @param validator The {@link Validator} to remove
+     */
+    public void removeValidator(Validator validator);
+
+    /**
+     * <p>Add a new {@link ValueChangeListener} to the set of listeners
+     * interested in being notified when {@link ValueChangeEvent}s occur.</p>
+     *
+     * @param listener The {@link ValueChangeListener} to be added
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public void addValueChangeListener(ValueChangeListener listener);
+
+    /**
+     * <p>Return the set of registered {@link ValueChangeListener}s for this
+     * component instance.  If there are no registered listeners,
+     * a zero-length array is returned.</p>
+     */
+    public ValueChangeListener[] getValueChangeListeners();
+
+    /**
+     * <p>Remove an existing {@link ValueChangeListener} (if any) from the
+     * set of listeners interested in being notified when
+     * {@link ValueChangeEvent}s occur.</p>
+     *
+     * @param listener The {@link ValueChangeListener} to be removed
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public void removeValueChangeListener(ValueChangeListener listener);
+}
diff --git a/javax/faces/component/FacesComponent.java b/javax/faces/component/FacesComponent.java
new file mode 100644
index 0000000..002f429
--- /dev/null
+++ b/javax/faces/component/FacesComponent.java
@@ -0,0 +1,136 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * class automatically registers the class with the runtime as a {@link
+ * UIComponent}.  The value of the {@link #value} attribute is taken to
+ * be the <em>component-type</em> and the fully qualified class name of
+ * the class to which this annotation is attached is taken to be the
+ * <em>component-class</em>.  The implementation must guarantee that for
+ * each class annotated with <code>FacesComponent</code>, found with the
+ * scanning algorithm in section JSF.11.5, {@link
+ * javax.faces.application.Application#addComponent(java.lang.String,java.lang.String)}
+ * is called, passing the derived <em>component-type</em> as the first
+ * argument and the derived <em>component-class</em> as the second
+ * argument.  The implementation must guarantee that all such calls to
+ * <code>addComponent()</code> happen during application startup time
+ * and before any requests are serviced.</p>
+
+ */ 
+
+/**
+ * <p><span class="changed_modified_2_2">The</span> presence of this annotation
+ * on a class that extends {@link UIComponent} must cause the runtime to 
+ * register this class as a component suitable for inclusion in a view.
+ * <span class="changed_added_2_2">If the <code>createTag</code> attribute
+ * is <code>true</code>, the runtime must create a corresponding Facelet
+ * tag handler according to the rules specified in the attributes of 
+ * this annotation.</span></p>
+ * 
+ */
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface FacesComponent {
+    
+    /**
+     * <p class="changed_added_2_2">Components that declare a 
+     * <code>createTag = true</code> attribute will be placed into this tag
+     * namespace if the namespace attribute is omitted.</p>
+     */
+    public static final String NAMESPACE = "http://xmlns.jcp.org/jsf/component";
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span>
+     * value of this annotation attribute is taken to be the 
+     * <em>component-type</em> with which instances of this class of component can be instantiated by
+     * calling {@link
+     * javax.faces.application.Application#createComponent(java.lang.String)}.
+     * <span class="changed_added_2_2">If no value is specified, or the value is
+     * <code>null</code>, the value is taken to be the return of calling
+     * <code>getSimpleName</code> on the class to which this annotation
+     * is attached and lowercasing the first character.  If more than one
+     * component with this derived name is found, the results are undefined.</span></p>
+     */ 
+
+    String value() default "";
+    
+    /**
+     * <p class="changed_added_2_2">If the value of this attribute is 
+     * <code>true</code>, the runtime must create a Facelet tag handler, 
+     * that extends from {@link javax.faces.view.facelets.ComponentHandler},
+     * suitable for use in pages under the tag library with namespace given
+     * by the value of the {@link #namespace} attribute.</p>
+     */
+    
+    boolean createTag() default false;
+    
+    /**
+     * <p class="changed_added_2_2">If the value of the {@link #createTag} 
+     * attribute is <code>true</code>, the runtime must use this
+     * value as the tag name for including an instance of the component
+     * annotated with this annotation in a view.  If this attribute is not
+     * specified on a usage of this annotation, the simple name of the 
+     * class on which this annotation is declared, with the first character 
+     * lowercased, is taken to be the value.</p>
+     */
+    String tagName() default "";
+    
+    /**
+     * <p class="changed_added_2_2">If the value of the {@link #createTag} 
+     * attribute is <code>true</code>, the value of this attribute is taken
+     * to be the tag library namespace into which this component is placed.</p>
+     * 
+     */
+    
+    String namespace() default NAMESPACE;
+    
+}
diff --git a/javax/faces/component/MessageFactory.java b/javax/faces/component/MessageFactory.java
new file mode 100644
index 0000000..442790c
--- /dev/null
+++ b/javax/faces/component/MessageFactory.java
@@ -0,0 +1,389 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * 
+ * <p>supported filters: <code>package</code> and
+ * <code>protection</code>.</p>
+ */
+
+ class MessageFactory {
+
+    private static final String MOJARRA_RESOURCE_BASENAME =
+        "com.sun.faces.resources.Messages";
+
+    private MessageFactory() {
+    }
+
+    /**
+     * @see #getMessage(String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(Locale, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(Locale locale,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(locale, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(FacesContext, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(FacesContext context,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(context, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+   
+    /**
+     * <p>This version of getMessage() is used for localizing implementation
+     * specific messages.</p>
+     *
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+      static FacesMessage getMessage(String messageId, 
+                                                 Object... params) {
+        Locale locale = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        // context.getViewRoot() may not have been initialized at this point.
+        if (context != null && context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        return getMessage(locale, messageId, params);
+    }
+
+     /**
+      * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+      *
+      * @param locale    - the target <code>Locale</code>
+      * @param messageId - the key of the message in the resource bundle
+      * @param params    - substittion parameters
+      *
+      * @return a localized <code>FacesMessage</code> with the severity
+      *  of FacesMessage.SEVERITY_ERROR
+      */
+      static FacesMessage getMessage(Locale locale, 
+                                                 String messageId, 
+                                                 Object... params) {       
+        String summary = null;
+        String detail = null;       
+        ResourceBundle bundle;
+        String bundleName;
+
+        // see if we have a user-provided bundle
+        Application app = getApplication();
+	Class appClass = app.getClass();
+        if (null != (bundleName = app.getMessageBundle())) {
+            if (null != 
+                (bundle = 
+                    ResourceBundle.getBundle(bundleName, locale,
+				     getCurrentLoader(appClass)))) {
+                // see if we have a hit
+                try {
+                    summary = bundle.getString(messageId);
+                    detail = bundle.getString(messageId + "_detail");
+                }
+                catch (MissingResourceException e) {
+                    // ignore
+                }
+            }
+        }
+    
+        // we couldn't find a summary in the user-provided bundle
+        if (null == summary) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(FacesMessage.FACES_MESSAGES, 
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+                detail = bundle.getString(messageId + "_detail");
+            } catch (MissingResourceException e) {
+                // ignore
+            }
+        }
+
+        // no hit found in the standard javax.faces.Messages bundle.
+        // check the Mojarra resources
+        if (summary == null) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(MOJARRA_RESOURCE_BASENAME,
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+            } catch (MissingResourceException e) {
+                return null;
+            }
+        }
+
+        // At this point, we have a summary and a bundle.     
+        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
+        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
+        return (ret);
+    }
+
+
+    /**
+     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+     static FacesMessage getMessage(FacesContext context, 
+                                                String messageId,
+                                                Object... params) {
+                                                
+        if (context == null || messageId == null ) {
+            throw new NullPointerException(" context " 
+                + context 
+                + " messageId " 
+                + messageId);
+        }
+        Locale locale;
+        // viewRoot may not have been initialized at this point.
+        if (context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        if (null == locale) {
+            throw new NullPointerException(" locale is null ");
+        }
+        
+        FacesMessage message = getMessage(locale, messageId, params);
+        if (message != null) {
+            return message;
+        }
+        locale = Locale.getDefault();
+        return (getMessage(locale, messageId, params));
+    }  
+                       
+
+    /**
+     * <p>Returns the <code>label</code> property from the specified
+     * component.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param component - the component of interest
+     *
+     * @return the label, if any, of the component
+     */
+     static Object getLabel(FacesContext context, 
+                                        UIComponent component) {
+                                        
+        Object o = component.getAttributes().get("label");
+        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
+            o = component.getValueExpression("label");
+        }
+        // Use the "clientId" if there was no label specified.
+        if (o == null) {
+            o = component.getClientId(context);
+        }
+        return o;
+    }
+
+    protected static Application getApplication() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return (FacesContext.getCurrentInstance().getApplication());
+        }
+        ApplicationFactory afactory = (ApplicationFactory)
+            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return (afactory.getApplication());
+    }
+
+    protected static ClassLoader getCurrentLoader(Class fallbackClass) {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClassLoader();
+        }
+        return loader;
+    }
+
+    /**
+     * This class overrides FacesMessage to provide the evaluation
+     * of binding expressions in addition to Strings.
+     * It is often the case, that a binding expression may reference
+     * a localized property value that would be used as a 
+     * substitution parameter in the message.  For example:
+     *  <code>#{bundle.userLabel}</code>
+     * "bundle" may not be available until the page is rendered.
+     * The "late" binding evaluation in <code>getSummary</code> and 
+     * <code>getDetail</code> allow the expression to be evaluated
+     * when that property is available.
+     */
+    static class BindingFacesMessage extends FacesMessage {
+        BindingFacesMessage(
+            Locale locale,
+            String messageFormat,
+            String detailMessageFormat,
+            // array of parameters, both Strings and ValueBindings
+            Object[] parameters) {
+
+            super(messageFormat, detailMessageFormat);
+            this.locale = locale;
+            this.parameters = parameters;
+            if (parameters != null) {
+                resolvedParameters = new Object[parameters.length];
+            }
+        }
+
+        public String getSummary() {
+            String pattern = super.getSummary();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        public String getDetail() {
+            String pattern = super.getDetail();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        private void resolveBindings() {
+            FacesContext context = null;
+            if (parameters != null) {
+                for (int i = 0; i < parameters.length; i++) {
+                    Object o = parameters[i];
+                    if (o instanceof ValueBinding) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueBinding) o).getValue(context);
+                    }
+                    if (o instanceof ValueExpression) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueExpression) o).getValue(context.getELContext());
+                    }
+                    // to avoid 'null' appearing in message
+                    if (o == null) {
+                        o = "";
+                    }
+                    resolvedParameters[i] = o;
+                }
+            }
+        }
+
+        private String getFormattedString(String msgtext, Object[] params) {
+            String localizedStr = null;
+                                                                                
+            if (params == null || msgtext == null ) {
+                return msgtext;
+            }
+            StringBuffer b = new StringBuffer(100);
+            MessageFormat mf = new MessageFormat(msgtext);
+            if (locale != null) {
+                mf.setLocale(locale);
+                b.append(mf.format(params));
+                localizedStr = b.toString();
+            }
+            return localizedStr;
+        }
+
+        private Locale locale;
+        private Object[] parameters;
+        private Object[] resolvedParameters;
+    }
+    
+} // end of class MessageFactory
diff --git a/javax/faces/component/MethodBindingAdapterBase.java b/javax/faces/component/MethodBindingAdapterBase.java
new file mode 100644
index 0000000..937fe75
--- /dev/null
+++ b/javax/faces/component/MethodBindingAdapterBase.java
@@ -0,0 +1,70 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+/**
+ * <p>Base class for classes that wrap a <code>MethodBinding</code> and
+ * implement a faces listener-like interface.</p>
+ *
+ */ 
+
+abstract class MethodBindingAdapterBase extends Object {
+    
+    /**
+     * <p>Recursively interrogate the <code>cause</code> property of the
+     * argument <code>exception</code> and stop recursing either when it
+     * is an instance of <code>expectedExceptionClass</code> or
+     * <code>null</code>.  Return the result.</p>
+     */
+
+    Throwable getExpectedCause(Class expectedExceptionClass, 
+			       Throwable exception) {
+	Throwable result = exception.getCause();
+	if (null != result) {
+	    if (!expectedExceptionClass.isAssignableFrom(result.getClass())) {
+		result = getExpectedCause(expectedExceptionClass, result);
+	    }
+	}
+	return result;
+    }
+    
+}
diff --git a/javax/faces/component/MethodBindingMethodExpressionAdapter.java b/javax/faces/component/MethodBindingMethodExpressionAdapter.java
new file mode 100644
index 0000000..5f13e66
--- /dev/null
+++ b/javax/faces/component/MethodBindingMethodExpressionAdapter.java
@@ -0,0 +1,313 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.io.Serializable;
+
+import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.MethodBinding;
+
+import javax.el.MethodExpression;
+import javax.el.MethodInfo;
+import javax.el.ELException;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+
+import java.util.Arrays;
+import java.lang.reflect.Method;
+
+/**
+ * <p>Wrap a MethodExpression instance and expose it as a MethodBinding</p>
+ *
+ */
+ class MethodBindingMethodExpressionAdapter extends MethodBinding implements StateHolder, 
+    Serializable {
+
+    private static final long serialVersionUID = 7334926223014401689L;
+
+    private MethodExpression methodExpression= null;
+    private boolean tranzient;
+
+    public MethodBindingMethodExpressionAdapter() {} // for StateHolder
+    
+     MethodBindingMethodExpressionAdapter(MethodExpression methodExpression) {
+        this.methodExpression = methodExpression;    
+    }
+
+    public Object invoke(FacesContext context, Object params[])
+        throws javax.faces.el.EvaluationException, javax.faces.el.MethodNotFoundException {
+	assert(null != methodExpression);
+        if ( context == null ) {
+            throw new NullPointerException("FacesConext -> null");
+        }
+        
+	Object result = null;
+	try {
+	    result = methodExpression.invoke(context.getELContext(),
+					     params);
+	}
+	catch (javax.el.MethodNotFoundException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	catch (javax.el.PropertyNotFoundException e) {
+	    throw new EvaluationException(e);
+	}
+	catch (ELException e) {
+            Throwable cause = e.getCause();
+            if (cause == null) {
+                cause = e;
+            }
+            throw new EvaluationException(cause);
+	} catch (NullPointerException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	return result;
+    }
+
+    public Class getType(FacesContext context) throws javax.faces.el.MethodNotFoundException {
+	assert(null != methodExpression);
+	if (context == null) {
+	        throw new NullPointerException("FacesConext -> null");
+    }
+	Class result = null;
+        if ( context == null ) {
+            throw new NullPointerException();
+        }
+        
+	try {
+	    MethodInfo mi = 
+		methodExpression.getMethodInfo(context.getELContext());
+	    result = mi.getReturnType();
+	}
+	catch (javax.el.PropertyNotFoundException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	catch (javax.el.MethodNotFoundException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	catch (ELException e) {
+	    throw new javax.faces.el.MethodNotFoundException(e);
+	}
+	return result;
+    }
+    
+   
+    public String getExpressionString() {
+	assert(null != methodExpression);
+        return methodExpression.getExpressionString();
+    }
+
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;       
+        }
+        if (other instanceof MethodBindingMethodExpressionAdapter) {
+            return methodExpression.equals(((MethodBindingMethodExpressionAdapter) other).getWrapped());                        
+        } else if (other instanceof MethodBinding) {
+            MethodBinding binding = (MethodBinding) other;
+            
+            // We'll need to do a little leg work to determine
+            // if the MethodBinding is equivalent to the 
+            // wrapped MethodExpression
+            String expr = binding.getExpressionString();
+            int idx = expr.indexOf('.');
+            String target = expr.substring(0, idx).substring(2);
+            String t = expr.substring(idx + 1);
+            String method = t.substring(0, (t.length() - 1));
+            
+            FacesContext context = FacesContext.getCurrentInstance();
+            ELContext elContext = context.getELContext();
+            MethodInfo controlInfo = methodExpression.getMethodInfo(elContext);
+            
+            // ensure the method names are the same
+            if (!controlInfo.getName().equals(method)) {
+                return false;
+            }
+            
+            // Using the target, create an expression and evaluate
+            // it.           
+            ExpressionFactory factory = context.getApplication().getExpressionFactory();
+            ValueExpression ve = factory.createValueExpression(elContext,
+                                                               "#{" + target + '}',
+                                                               Object.class);
+            if (ve == null) {
+                return false;                                                               
+            }
+            
+            Object result = ve.getValue(elContext);
+            
+            if (result == null) {
+                return false;
+            }
+            
+            // Get all of the methods with the matching name and try
+            // to find a match based on controlInfo's return and parameter
+            // types
+            Class type = binding.getType(context);
+            Method[] methods = result.getClass().getMethods();
+            for (Method meth : methods) {
+                if (meth.getName().equals(method)
+                     && type.equals(controlInfo.getReturnType())
+                     && Arrays.equals(meth.getParameterTypes(), 
+                                      controlInfo.getParamTypes())) {
+                    return true;                      
+                }
+            }
+        }
+        
+        return false;
+        
+    }
+
+    public int hashCode() {
+	assert(null != methodExpression);
+
+	return methodExpression.hashCode();
+    }
+
+
+    public boolean isTransient() {
+        return this.tranzient;
+    }
+    
+    public void setTransient(boolean tranzient) {
+        this.tranzient = tranzient;
+    }
+    
+    public Object saveState(FacesContext context){
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (methodExpression instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped methodExpression
+		stateStruct[0] = ((StateHolder)methodExpression).saveState(context);
+		// save the class name of the methodExpression impl
+		stateStruct[1] = methodExpression.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = methodExpression;
+	    }
+	}
+
+	return result;
+	
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof MethodExpression)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    MethodExpression result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (MethodExpression) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		methodExpression = result;
+	    }
+	}
+	else {
+	    methodExpression = (MethodExpression) state;
+	}
+    }
+    
+    public MethodExpression getWrapped() {
+        return methodExpression;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, true, loader);
+    }
+ 
+
+
+}
diff --git a/javax/faces/component/MethodBindingValidator.java b/javax/faces/component/MethodBindingValidator.java
new file mode 100644
index 0000000..7e27781
--- /dev/null
+++ b/javax/faces/component/MethodBindingValidator.java
@@ -0,0 +1,215 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+
+import javax.faces.el.MethodBinding;
+import javax.faces.el.EvaluationException;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p><strong>MethodBindingValidator</strong> is an {@link
+ * ValidatorListener} that wraps a {@link MethodBinding}. When it
+ * receives a {@link ActionEvent}, it executes a method on an
+ * object identified by the {@link MethodBinding}.</p>
+ */
+
+class MethodBindingValidator extends MethodBindingAdapterBase implements Validator, StateHolder {
+
+
+    // ------------------------------------------------------ Instance Variables
+    
+    private MethodBinding methodBinding = null;
+
+    public MethodBindingValidator() {}
+
+    
+    /**
+     * <p>Construct a {@link Validator} that contains a {@link
+     * MethodBinding}.</p>
+     */
+    public MethodBindingValidator(MethodBinding methodBinding) {
+
+        super();
+        this.methodBinding = methodBinding;
+
+    }
+
+    public MethodBinding getWrapped() {
+	return methodBinding;
+    }
+
+
+    // ------------------------------------------------------- Validator
+
+    public void validate(FacesContext context,
+                         UIComponent  component,
+                         Object       value) throws ValidatorException {
+	if (null == context || null == component) {
+	    throw new NullPointerException();
+	}
+        try {
+            methodBinding.invoke(context, new Object[] {context, component, 
+							value});
+        } 
+	catch (EvaluationException ee) {
+	    Throwable cause = this.getExpectedCause(ValidatorException.class,
+						    ee);
+	    if (cause instanceof ValidatorException) {
+		throw ((ValidatorException) cause);
+	    }
+	    if (cause instanceof RuntimeException) {
+		throw ((RuntimeException) cause);
+	    }
+	    throw new IllegalStateException(ee);
+        }
+	
+	
+    }
+
+
+
+    // 
+    // Methods from StateHolder
+    //
+
+    
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (methodBinding instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped methodBinding
+		stateStruct[0] = ((StateHolder)methodBinding).saveState(context);
+		// save the class name of the methodBinding impl
+		stateStruct[1] = methodBinding.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = methodBinding;
+	    }
+	}
+
+	return result;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof MethodBinding)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    MethodBinding result = null;
+	    
+	    Class toRestoreClass;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e);
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (MethodBinding) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e);
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a);
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		methodBinding = result;
+	    }
+	}
+	else {
+	    methodBinding = (MethodBinding) state;
+	}
+    }
+
+    private boolean tranzient = false;
+
+    public boolean isTransient() {
+	return tranzient;
+    }
+
+    public void setTransient(boolean newTransientValue) {
+	tranzient = newTransientValue;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, false, loader);
+    }
+}
diff --git a/javax/faces/component/MethodBindingValueChangeListener.java b/javax/faces/component/MethodBindingValueChangeListener.java
new file mode 100644
index 0000000..7395c0a
--- /dev/null
+++ b/javax/faces/component/MethodBindingValueChangeListener.java
@@ -0,0 +1,214 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.MethodBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
+
+/**
+ * <p><strong>MethodBindingValueChangeListener</strong> is an {@link
+ * ValueChangeListenerListener} that wraps a {@link MethodBinding}. When it
+ * receives a {@link ValueChangeEvent}, it executes a method on an
+ * object identified by the {@link MethodBinding}.</p>
+ */
+
+class MethodBindingValueChangeListener extends MethodBindingAdapterBase implements ValueChangeListener, StateHolder {
+
+
+    // ------------------------------------------------------ Instance Variables
+    
+    private MethodBinding methodBinding = null;
+
+    public MethodBindingValueChangeListener() {}
+
+    
+    /**
+     * <p>Construct a {@link ValueChangeListener} that contains a {@link
+     * MethodBinding}.</p>
+     */
+    public MethodBindingValueChangeListener(MethodBinding methodBinding) {
+
+        super();
+        this.methodBinding = methodBinding;
+
+    }
+
+    public MethodBinding getWrapped() {
+	return methodBinding;
+    }
+
+
+    // ------------------------------------------------------- Event Method
+
+    /**
+     * @throws NullPointerException {@inheritDoc}     
+     * @throws AbortProcessingException {@inheritDoc}     
+     */ 
+    public void processValueChange(ValueChangeEvent actionEvent) throws AbortProcessingException {
+                         
+        if (actionEvent == null) {
+            throw new NullPointerException();
+        }
+        try {
+            FacesContext context = FacesContext.getCurrentInstance();
+            methodBinding.invoke(context, new Object[] {actionEvent});
+        } 
+	catch (EvaluationException ee) {
+	    Throwable cause = 
+		this.getExpectedCause(AbortProcessingException.class, ee);
+	    if (cause instanceof AbortProcessingException) {
+		throw  ((AbortProcessingException) cause);
+	    }
+	    if (cause instanceof RuntimeException) {
+		throw ((RuntimeException) cause);
+	    }
+	    throw new IllegalStateException(ee);
+        }
+    }
+
+    // 
+    // Methods from StateHolder
+    //
+
+    
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (methodBinding instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped methodBinding
+		stateStruct[0] = ((StateHolder)methodBinding).saveState(context);
+		// save the class name of the methodBinding impl
+		stateStruct[1] = methodBinding.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = methodBinding;
+	    }
+	}
+
+	return result;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof MethodBinding)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    MethodBinding result = null;
+	    
+	    Class toRestoreClass;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e);
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (MethodBinding) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e);
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a);
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		methodBinding = result;
+	    }
+	}
+	else {
+	    methodBinding = (MethodBinding) state;
+	}
+    }
+
+    private boolean tranzient = false;
+
+    public boolean isTransient() {
+	return tranzient;
+    }
+
+    public void setTransient(boolean newTransientValue) {
+	tranzient = newTransientValue;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, false, loader);
+    }
+}
diff --git a/javax/faces/component/MethodExpressionMethodBindingAdapter.java b/javax/faces/component/MethodExpressionMethodBindingAdapter.java
new file mode 100644
index 0000000..9f67c7e
--- /dev/null
+++ b/javax/faces/component/MethodExpressionMethodBindingAdapter.java
@@ -0,0 +1,327 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.el.MethodExpression;
+import javax.el.ELException;
+import javax.el.ELContext;
+import javax.el.MethodInfo;
+import javax.faces.el.MethodBinding;
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+
+import java.util.Arrays;
+import java.lang.reflect.Method;
+import java.io.Serializable;
+
+/**
+ * <p>Wrap a MethodBinding instance and expose it as a
+ * MethodExpression.</p>
+ */
+
+ class MethodExpressionMethodBindingAdapter extends MethodExpression implements Serializable, StateHolder {
+
+    private static final long serialVersionUID = -1822420567946048452L;
+
+    public MethodExpressionMethodBindingAdapter() {} // for StateHolder
+
+    private MethodBinding binding = null;
+
+     MethodExpressionMethodBindingAdapter(MethodBinding binding) {
+	assert(null != binding);
+	this.binding = binding;
+    }
+
+    //
+    // Methods from MethodExpression
+    //
+
+    private transient MethodInfo info = null;
+
+    public MethodInfo getMethodInfo(ELContext context) throws ELException {
+	assert(null != binding);
+	
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+
+	if (null == info) {
+	    FacesContext facesContext = (FacesContext) 
+		context.getContext(FacesContext.class);
+	    if (null != facesContext) {
+		try {
+		    //PENDING - we should find a way to provide more information
+		    info = new MethodInfo(null, binding.getType(facesContext), null);
+		}
+		catch (Exception e) {
+		    throw new ELException(e);
+		}
+	    }
+	}
+		
+	return info;
+    }
+    
+    public Object invoke(ELContext context, Object[] params) throws ELException {
+	assert(null != binding);
+	
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+
+	Object result = null;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	if (null != facesContext) {
+	    try {
+		result = binding.invoke(facesContext, params);
+	    }
+	    catch (Exception e) {
+		throw new ELException(e);
+	    }
+	}
+	return result;
+    }
+
+    public String getExpressionString() {
+	assert(null != binding);
+	return binding.getExpressionString();
+	
+    }
+
+    public boolean isLiteralText() {
+        assert (binding != null);
+        String expr = binding.getExpressionString();
+        return (!(expr.startsWith("#{")
+            && expr.endsWith("}")));    
+    }
+
+    public boolean equals(Object other) {              
+        
+        if (other == this) {
+            return true;
+        }
+        
+        if (other instanceof MethodExpressionMethodBindingAdapter) {
+            MethodBinding ob = ((MethodExpressionMethodBindingAdapter) other).getWrapped();
+            return (binding.equals(ob));
+        } else if (other instanceof MethodExpression) {
+            MethodExpression expression = (MethodExpression) other;
+            
+            // We'll need to do a little leg work to determine
+            // if the MethodBinding is equivalent to the 
+            // wrapped MethodExpression
+            String expr = binding.getExpressionString();
+            int idx = expr.indexOf('.');
+            String target = expr.substring(0, idx).substring(2);
+            String t = expr.substring(idx + 1);
+            String method = t.substring(0, (t.length() - 1));
+            
+            FacesContext context = FacesContext.getCurrentInstance();
+            ELContext elContext = context.getELContext();
+            MethodInfo controlInfo = expression.getMethodInfo(elContext);
+            
+            // ensure the method names are the same
+            if (!controlInfo.getName().equals(method)) {
+                return false;
+            }
+            
+            // Using the target, create an expression and evaluate
+            // it.           
+            ExpressionFactory factory = context.getApplication().getExpressionFactory();
+            ValueExpression ve = factory.createValueExpression(elContext,
+                                                               "#{" + target + '}',
+                                                               Object.class);
+            if (ve == null) {
+                return false;
+            }                
+                                              
+            Object result = ve.getValue(elContext);
+            
+            if (result == null) {
+                return false;
+            }
+            
+            
+            // Get all of the methods with the matching name and try
+            // to find a match based on controlInfo's return and parameter
+            // types
+            Method[] methods = result.getClass().getMethods();
+            for (Method meth : methods) {
+                if (meth.getName().equals(method)
+                     && meth.getReturnType().equals(controlInfo.getReturnType())
+                     && Arrays.equals(meth.getParameterTypes(), 
+                                      controlInfo.getParamTypes())) {
+                    return true;                      
+                }
+            }
+        }
+        return false;
+        
+    }
+
+    public int hashCode() {
+	assert(null != binding);
+
+	return binding.hashCode();
+    }
+    
+    public String getDelimiterSyntax() {
+       // PENDING (visvan) Implementation
+        return "";
+    }
+    
+    // 
+    // Methods from StateHolder
+    //
+
+    
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (binding instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped binding
+		stateStruct[0] = ((StateHolder)binding).saveState(context);
+		// save the class name of the binding impl
+		stateStruct[1] = binding.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = binding;
+	    }
+	}
+
+	return result;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof MethodBinding)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    MethodBinding result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (MethodBinding) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		binding = result;
+	    }
+	}
+	else {
+	    binding = (MethodBinding) state;
+	}
+    }
+
+    private boolean tranzient = false;
+
+    public boolean isTransient() {
+	return tranzient;
+    }
+
+    public void setTransient(boolean newTransientMethod) {
+	tranzient = newTransientMethod;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+         return Class.forName(name, true, loader);
+    }
+ 
+
+    // 
+    // methods used by classes aware of this class's wrapper nature
+    //
+
+    public MethodBinding getWrapped() {
+	return binding;
+    }
+
+}
diff --git a/javax/faces/component/NamingContainer.java b/javax/faces/component/NamingContainer.java
new file mode 100644
index 0000000..e8102b7
--- /dev/null
+++ b/javax/faces/component/NamingContainer.java
@@ -0,0 +1,68 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">NamingContainer</strong> is an 
+ * interface that must be
+ * implemented by any {@link UIComponent} that wants to be a naming
+ * container.  Naming containers affect the behavior of the
+ * {@link UIComponent#findComponent} and {@link UIComponent#getClientId}
+ * methods;  see those methods for further information.</p>
+ */
+
+public interface NamingContainer {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p class="changed_modified_2_0">The separator character used in 
+     * component identifiers to demarcate
+     * navigation to a child naming container.</p>
+     * 
+     * @deprecated use {@link UINamingContainer#getSeparatorChar(javax.faces.context.FacesContext)}
+     */
+    public static final char SEPARATOR_CHAR = ':';
+
+}
diff --git a/javax/faces/component/PartialStateHolder.java b/javax/faces/component/PartialStateHolder.java
new file mode 100644
index 0000000..2279961
--- /dev/null
+++ b/javax/faces/component/PartialStateHolder.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+/**
+ * <p class="changed_added_2_0">Components that want to leverage the
+ * partial state saving feature must implement this interface instead of
+ * implementing {@link StateHolder}, from which this interface
+ * inherits.</p>
+ * @since 2.0
+ */
+public interface PartialStateHolder extends StateHolder {
+
+
+    /**
+     * <p class="changed_added_2_0">The runtime must ensure that the
+     * {@link #markInitialState} method is called on each instance of
+     * this interface in the view at the appropriate time to indicate
+     * the component is in its initial state.  The implementor of the
+     * interface must ensure that {@link #initialStateMarked} returns
+     * <code>true</code> from the time <code>markInitialState()</code>
+     * is called until {@link #clearInitialState} is called, after which
+     * time <code>initialStateMarked()</code> must return
+     * <code>false</code>.  Also, during the time that the instance
+     * returns <code>true</code> from <code>initialStateMarked()</code>,
+     * the implementation must return only the state that has changed in
+     * its implementation of {@link StateHolder#saveState}.</p>
+     * @since 2.0
+     */
+    void markInitialState();
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if delta
+     * state changes are being tracked, otherwise <code>false</code></p>
+     * @since 2.0
+     */
+    boolean initialStateMarked();
+
+
+    /**
+     * <p class="changed_added_2_0">Reset the PartialStateHolder to a
+     * non-delta tracking state.</p>
+     * @since 2.0
+     */
+    void clearInitialState();
+
+}
diff --git a/javax/faces/component/SelectItemsIterator.java b/javax/faces/component/SelectItemsIterator.java
new file mode 100644
index 0000000..feb435d
--- /dev/null
+++ b/javax/faces/component/SelectItemsIterator.java
@@ -0,0 +1,679 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Map;
+import java.util.ListIterator;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Array;
+
+import javax.faces.model.SelectItem;
+import javax.faces.context.FacesContext;
+import javax.el.ValueExpression;
+
+
+/**
+ * <p>Package private class for iterating over the set of {@link SelectItem}s
+ * for a parent {@link UISelectMany} or {@link UISelectOne}.</p>
+ *
+ * // RELEASE_PENDING (rlubke,driscoll) performanc review
+ */
+final class SelectItemsIterator implements Iterator<SelectItem> {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct an iterator instance for the specified parent component.</p>
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param parent The parent {@link UIComponent} whose children will be
+     *  processed
+     */
+    public SelectItemsIterator(FacesContext ctx, UIComponent parent) {
+
+        kids = parent.getChildren().listIterator();
+        this.ctx = ctx;
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    /**
+     * <p>Iterator over the SelectItem elements pointed at by a
+     * <code>UISelectItems</code> component, or <code>null</code>.</p>
+     */
+    private Iterator<SelectItem> items;
+
+
+    /**
+     * <p>Iterator over the children of the parent component.</p>
+     */
+    private ListIterator<UIComponent> kids;
+
+
+    /**
+     * Expose single SelectItems via an Iterator.  This iterator will be
+     * reset/reused for each individual SelectItem instance encountered.
+     */
+    private SingleElementIterator singleItemIterator;
+
+
+    /**
+     * The {@link FacesContext} for the current request.
+     */
+    private FacesContext ctx;
+
+
+    // -------------------------------------------------------- Iterator Methods
+
+
+    /**
+     * <p>Return <code>true</code> if the iteration has more elements.</p>
+     */
+    public boolean hasNext() {
+
+        if (items != null) {
+            if (items.hasNext()) {
+                return (true);
+            } else {
+                items = null;
+            }
+        }
+        Object next = findNextValidChild();
+        while (next != null) {
+            initializeItems(next);
+            if (items != null) {
+                return true;
+            } else {
+                next = findNextValidChild();
+            }
+        }
+        return false;
+
+    }
+
+
+    /**
+     * <p>Return the next element in the iteration.</p>
+     *
+     * @throws NoSuchElementException if there are no more elements
+     */
+    @SuppressWarnings({"unchecked"})
+    public SelectItem next() {
+
+        if (!hasNext()) {
+            throw new NoSuchElementException();
+        }
+        if (items != null) {
+            return (items.next());
+        }
+        return next();
+
+    }
+
+
+    /**
+     * <p>Throw UnsupportedOperationException.</p>
+     */
+    public void remove() {
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>
+     * Initializes the <code>items</code> instance variable with an
+     * <code>Iterator</code> appropriate to the UISelectItem(s) value.
+     * </p>
+     */
+    private void initializeItems(Object kid) {
+
+        if (kid instanceof UISelectItem) {
+            UISelectItem ui = (UISelectItem) kid;
+            SelectItem item = (SelectItem) ui.getValue();
+            if (item == null) {
+                item = new SelectItem(ui.getItemValue(),
+                                      ui.getItemLabel(),
+                                      ui.getItemDescription(),
+                                      ui.isItemDisabled(),
+                                      ui.isItemEscaped(),
+                                      ui.isNoSelectionOption());
+            }
+            updateSingeItemIterator(item);
+            items = singleItemIterator;
+        } else if (kid instanceof UISelectItems) {
+            UISelectItems ui = (UISelectItems) kid;
+            Object value = ui.getValue();
+            if (value != null) {
+                if (value instanceof SelectItem) {
+                    updateSingeItemIterator((SelectItem) value);
+                    items = singleItemIterator;
+                } else if (value.getClass().isArray()) {
+                    items = new ArrayIterator(ctx, (UISelectItems) kid, value);
+                } else if (value instanceof Iterable) {
+                    items = new IterableItemIterator(ctx,
+                                                     (UISelectItems) kid,
+                                                     (Iterable<?>) value);
+                } else if (value instanceof Map) {
+                    items = new MapIterator((Map) value);
+                } else {
+                    throw new IllegalArgumentException();
+                }
+            }
+            if (items != null && !items.hasNext()) {
+                items = null;
+            }
+        } 
+
+    }
+
+
+    /**
+     * @return the next valid child for processing
+     */
+    private Object findNextValidChild() {
+
+        if (kids.hasNext()) {
+            Object next = kids.next();
+            while (kids.hasNext() && !(next instanceof UISelectItem || next instanceof UISelectItems)) {
+                next = kids.next();
+            }
+            if (next instanceof UISelectItem || next instanceof UISelectItems) {
+                return next;
+            }
+        }
+        return null;
+
+    }
+
+
+    /**
+     * Update the <code>singleItemIterator</code> with the provided
+     * <code>item</code>
+     * @param item the {@link SelectItem} to expose as an Iterator
+     */
+    private void updateSingeItemIterator(SelectItem item) {
+
+        if (singleItemIterator == null) {
+            singleItemIterator = new SingleElementIterator();
+        }
+        singleItemIterator.updateItem(item);
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Exposes single {@link SelectItem} instances as an Iterator.
+     */
+    private static final class SingleElementIterator implements Iterator<SelectItem> {
+
+        private SelectItem item;
+        private boolean nextCalled;
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return !nextCalled;
+
+        }
+
+
+        public SelectItem next() {
+
+            if (nextCalled) {
+                throw new NoSuchElementException();
+            }
+            nextCalled = true;
+            return item;
+
+        }
+
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+
+        }
+
+
+        // ----------------------------------------------------- Private Methods
+
+
+        private void updateItem(SelectItem item) {
+
+            this.item = item;
+            nextCalled = false;
+
+        }
+
+    } // END SingleElementIterator
+
+
+    /**
+     * Iterates over a <code>Map</code> of values exposing each entry as a SelectItem.
+     * Note that this will do so re-using the same SelectItem but changing
+     * the value and label as appropriate.
+     */
+    private static final class MapIterator implements Iterator<SelectItem> {
+
+        private SelectItem item = new SelectItem();
+        private Iterator iterator;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        private MapIterator(Map map) {
+
+            this.iterator = map.entrySet().iterator();
+
+        }
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return iterator.hasNext();
+
+        }
+
+
+        public SelectItem next() {
+
+            Map.Entry entry = (Map.Entry) iterator.next();
+            Object key = entry.getKey();
+            Object value = entry.getValue();
+            item.setLabel(((key != null) ? key.toString() : value.toString()));
+            item.setValue(((value != null) ? value : ""));
+            return item;
+            
+        }
+
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+
+        }
+
+    } // END MapIterator
+
+
+    /**
+     * <p>
+     * Base class to support iterating over Collections or Arrays that may
+     * or may not contain <code>SelectItem</code> instances.
+     * </p>
+     */
+    private static abstract class GenericObjectSelectItemIterator implements Iterator<SelectItem> {
+
+        /**
+         * SelectItem that is updated based on the current Object being
+         * iterated over.
+         */
+        private GenericObjectSelectItem genericObjectSI;
+
+        /**
+         * The source <code>UISelectItems</code>.
+         */
+        protected UISelectItems sourceComponent;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        protected GenericObjectSelectItemIterator(UISelectItems sourceComponent) {
+
+            this.sourceComponent = sourceComponent;
+
+        }
+
+
+        // --------------------------------------------------- Protected Methods
+
+
+        protected SelectItem getSelectItemFor(FacesContext ctx, Object value) {
+
+            if (genericObjectSI == null) {
+                genericObjectSI = new GenericObjectSelectItem(sourceComponent);
+            }
+
+            genericObjectSI.updateItem(ctx, value);
+            return genericObjectSI;
+            
+        }
+
+
+        // ------------------------------------------------------ Nested Classes
+
+
+        /**
+         * A <code>SelectItem</code> implementation to support generating
+         * unique <code>SelectItem</code> values based on <code>ValueExpressions</code>
+         * from the owning {@link UISelectItems} instance.
+         */
+        @SuppressWarnings({"serial"})
+        private static final class GenericObjectSelectItem extends SelectItem {
+
+
+            private static final String VAR = "var";
+            private static final String ITEM_VALUE = "itemValue";
+            private static final String ITEM_LABEL = "itemLabel";
+            private static final String ITEM_DESCRIPTION = "itemDescription";
+            private static final String ITEM_ESCAPED = "itemLabelEscaped";
+            private static final String ITEM_DISABLED = "itemDisabled";
+            private static final String NO_SELECTION_OPTION = "noSelectionOption";
+
+            /**
+             * Resolves to the value of the <code>SelectItem</code>.
+             */
+            private ValueExpression itemValue;
+
+            /**
+             * Resolves to the label of the <code>SelectItem</code>.
+             */
+            private ValueExpression itemLabel;
+
+            /**
+             * Resolves to the description of the <code>SelectItem</code>.
+             */
+            private ValueExpression itemDescription;
+
+            /**
+             * Determines the value for the escaped property of the <code>SelectItem</code>.
+             */
+            private ValueExpression itemEscaped;
+
+            /**
+             * Determines the value for the disabled property of the <code>SelectItem</code>/
+             */
+            private ValueExpression itemDisabled;
+
+            /**
+             * Determines the value for the noSelectionOption property of the <code>SelectItem</code>/
+             */
+            private ValueExpression noSelectionOption;
+
+            /**
+             * The request-scoped variable under which the current object
+             * will be exposed.
+             */
+            private String var;
+
+            private UISelectItems sourceComponent;
+
+            // -------------------------------------------------------- Constructors
+
+
+            private GenericObjectSelectItem(UISelectItems sourceComponent) {
+
+                var = (String) sourceComponent.getAttributes().get(VAR);
+                this.sourceComponent = sourceComponent;
+                //itemValue = sourceComponent.getValueExpression(ITEM_VALUE);
+                //itemLabel = sourceComponent.getValueExpression(ITEM_LABEL);
+                //itemDescription = sourceComponent.getValueExpression(ITEM_DESCRIPTION);
+                //itemEscaped = sourceComponent.getValueExpression(ITEM_ESCAPED);
+                //itemDisabled = sourceComponent.getValueExpression(ITEM_DISABLED);
+                //noSelectionOption = sourceComponent.getValueExpression(NO_SELECTION_OPTION);
+
+            }
+
+            // ----------------------------------------------------- Private Methods
+
+
+            /**
+             * Updates the <code>SelectItem</code> properties based on the
+             * current value.
+             *
+             * @param ctx the {@link FacesContext} for the current request
+             * @param value the value to build the updated values from
+             */
+            private void updateItem(FacesContext ctx, Object value) {
+
+                Map<String, Object> reqMap =
+                      ctx.getExternalContext().getRequestMap();
+                Object oldVarValue = null;
+                if (var != null) {
+                    oldVarValue = reqMap.put(var, value);
+                }
+                try {
+                    Map<String,Object> attrs = sourceComponent.getAttributes();
+                    Object itemValueResult = attrs.get(ITEM_VALUE);
+                    Object itemLabelResult = attrs.get(ITEM_LABEL);
+                    Object itemDescriptionResult = attrs.get(ITEM_DESCRIPTION);
+                    Object itemEscapedResult = attrs.get(ITEM_ESCAPED);
+                    Object itemDisabledResult = attrs.get(ITEM_DISABLED);
+                    Object noSelectionOptionResult = attrs.get(NO_SELECTION_OPTION);
+                    setValue(((itemValueResult != null) ? itemValueResult : value));
+                    setLabel(((itemLabelResult != null)
+                                  ? itemLabelResult.toString()
+                                  : value.toString()));
+                    setDescription(((itemDescriptionResult != null)
+                                        ? itemDescriptionResult.toString()
+                                        : null));
+                    setEscape(((itemEscapedResult != null)
+                                   ? Boolean.valueOf(itemEscapedResult.toString())
+                                   : true));
+                    setDisabled(((itemDisabledResult != null)
+                                     ? Boolean.valueOf(itemDisabledResult.toString())
+                                     : false));
+                    setNoSelectionOption(((noSelectionOptionResult != null)
+                                     ? Boolean.valueOf(noSelectionOptionResult.toString())
+                                    : false));
+                } finally {
+                    if (var != null) {
+                        if (oldVarValue != null) {
+                            reqMap.put(var, oldVarValue);
+                        } else {
+                            reqMap.remove(var);
+                        }
+                    }
+                }
+
+            }
+
+
+            // --------------------------------------- Methods from Serializable
+
+
+            private void writeObject(ObjectOutputStream out) throws IOException {
+
+                throw new NotSerializableException();
+
+            }
+
+
+            private void readObject(ObjectInputStream in) throws IOException {
+
+                throw new NotSerializableException();
+
+            }
+
+        } // END GenericObjectSelectItem
+
+    } // END GenericObjectSelectItemIterator
+
+
+    /**
+     * Handles arrays of <code>SelectItem</code>s, generic Objects,
+     * or combintations of both.
+     *
+     * A single <code>GenericObjectSelectItem</code> will be leverage for any
+     * non-<code>SelectItem</code> objects encountered.
+     */
+    private static final class ArrayIterator extends GenericObjectSelectItemIterator {
+
+
+        private FacesContext ctx;
+        private Object array;
+        private int count;
+        private int index;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        private ArrayIterator(FacesContext ctx,
+                              UISelectItems sourceComponent,
+                              Object array) {
+
+            super(sourceComponent);
+            this.ctx = ctx;
+            this.array = array;
+            count = Array.getLength(array);
+
+        }
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return (index < count);
+
+        }
+
+        public SelectItem next() {
+
+            if (index >= count) {
+                throw new NoSuchElementException();
+            }
+
+            Object item = Array.get(array, index++);
+            if (item instanceof SelectItem) {
+                return (SelectItem) item;
+            } else {
+                return getSelectItemFor(ctx, item);
+            }
+
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+
+    } // END ArrayIterator
+
+
+    /**
+     * Handles Collections of <code>SelectItem</code>s, generic Objects,
+     * or combintations of both.
+     *
+     * A single <code>GenericObjectSelectItem</code> will be leverage for any
+     * non-<code>SelectItem</code> objects encountered.
+     */
+    private static final class IterableItemIterator extends GenericObjectSelectItemIterator {
+
+
+        private FacesContext ctx;
+        private Iterator<?> iterator;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        private IterableItemIterator(FacesContext ctx,
+                                     UISelectItems sourceComponent,
+                                     Iterable<?> iterable) {
+
+            super(sourceComponent);
+            this.ctx = ctx;
+            this.iterator = iterable.iterator();
+
+        }
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        public boolean hasNext() {
+
+            return iterator.hasNext();
+
+        }
+
+
+        public SelectItem next() {
+
+            Object item = iterator.next();
+            if (item instanceof SelectItem) {
+                return (SelectItem) item;
+            } else {
+                return getSelectItemFor(ctx, item);
+            }
+
+        }
+
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+            
+        }
+
+    } // END CollectionItemIterator
+
+
+}
diff --git a/javax/faces/component/SelectUtils.java b/javax/faces/component/SelectUtils.java
new file mode 100644
index 0000000..fab0500
--- /dev/null
+++ b/javax/faces/component/SelectUtils.java
@@ -0,0 +1,267 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import javax.faces.model.SelectItem;
+import javax.faces.model.SelectItemGroup;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.el.ExpressionFactory;
+import javax.el.ELException;
+
+/**
+ * Contains common utility methods used by both {@link UISelectOne} and {@link
+ * UISelectMany}.
+ */
+class SelectUtils {
+
+
+    // ------------------------------------------------------------ Constructors
+
+    
+    private SelectUtils() { }
+
+
+    // ------------------------------------------------- Package Private Methods
+
+    /**
+     * <p>Return <code>true</code> if the specified value matches one of the
+     * available options, performing a recursive search if if a {@link
+     * javax.faces.model.SelectItemGroup} instance is detected.</p>
+     *
+     * @param ctx          {@link FacesContext} for the current request
+     * @param value        {@link UIComponent} value to be tested
+     * @param items        Iterator over the {@link javax.faces.model.SelectItem}s
+     *                     to be checked
+     * @param converter    the {@link Converter} associated with this component
+     */
+    static boolean matchValue(FacesContext ctx,
+                              UIComponent component,
+                              Object value,
+                              Iterator<SelectItem> items,
+                              Converter converter) {
+
+        while (items.hasNext()) {
+            SelectItem item = items.next();
+            if (item instanceof SelectItemGroup) {
+                SelectItem subitems[] =
+                      ((SelectItemGroup) item).getSelectItems();
+                if ((subitems != null) && (subitems.length > 0)) {
+                    if (matchValue(ctx, component, value, new ArrayIterator(subitems), converter)) {
+                        return (true);
+                    }
+                }
+            } else {
+                Object compareValue = null;
+                
+                try {
+                    compareValue = doConversion(ctx, component, item, value,
+                        converter);
+                } catch (IllegalStateException ise) {
+                    continue;
+                }
+                
+                if (null == compareValue && null == value) {
+                    return true;
+                }
+
+                if (value.equals(compareValue)) {
+                    return (true);
+                }
+            }
+        }
+        return (false);
+
+    }
+    
+    /**
+     * Returns true iff component has a {@link UISelectItem} child
+     * whose itemValue exactly matches the argument value
+     * @param ctx
+     * @param component
+     * @param value
+     * @param items
+     * @return
+     */
+    
+    static boolean valueIsNoSelectionOption(FacesContext ctx,
+            UIComponent component,
+            Object value,
+            Iterator<SelectItem> items,
+            Converter converter) {
+        boolean result = false;
+        
+        while (items.hasNext()) {
+            SelectItem item = items.next();
+            if (item instanceof SelectItemGroup) {
+                SelectItem subitems[] =
+                      ((SelectItemGroup) item).getSelectItems();
+                if ((subitems != null) && (subitems.length > 0)) {
+                    if (valueIsNoSelectionOption(ctx, component, value, new ArrayIterator(subitems), converter)) {
+                        result = true;
+                        break;
+                    }
+                }
+            } else {
+                Object compareValue = null;
+                
+                try {
+                    compareValue = doConversion(ctx, component, item, value,
+                        converter);
+                } catch (IllegalStateException ise) {
+                    continue;
+                }
+                
+                if (null == compareValue && null == value &&
+                    item.isNoSelectionOption()) {
+                    result = true;
+                    break;
+                } else if (value.equals(compareValue) && item.isNoSelectionOption()) {
+                    result = true;
+                    break;
+                }
+            }
+            
+        }
+        
+        return result;
+    }
+    
+    private static Object doConversion(FacesContext ctx, 
+            UIComponent component, SelectItem item, 
+            Object value, Converter converter) throws IllegalStateException {
+        Object itemValue = item.getValue();
+        if (itemValue == null && value == null) {
+            return (null);
+        }
+        if ((value == null) ^ (itemValue == null)) {
+            throw new IllegalStateException("Either value was null, or itemValue was null, but not both.");
+        }
+        Object compareValue;
+        if (converter == null) {
+            compareValue =
+                    coerceToModelType(ctx, itemValue, value.getClass());
+        } else {
+            compareValue = itemValue;
+            if (compareValue instanceof String
+                 && !(value instanceof String)) {
+                // type mismatch between the time and the value we're
+                // comparing.  Invoke the Converter.
+                compareValue = converter.getAsObject(ctx,
+                        component,
+                        (String) compareValue);
+            }
+        }
+
+        return compareValue;
+    }
+
+
+    /**
+     * Coerce the provided value to the specified type using EL coercion.
+     *
+     * @param ctx the {@link FacesContext} for the current request
+     * @param value the value to coerce
+     * @param toType the type <code>value</code> should be coerced to
+     *
+     * @return the result of the EL coersion
+     *
+     * @see ExpressionFactory#coerceToType(Object, Class)
+     */
+    private static Object coerceToModelType(FacesContext ctx,
+                                            Object value,
+                                            Class toType) {
+
+        Object newValue;
+        try {
+            ExpressionFactory ef = ctx.getApplication().getExpressionFactory();
+            newValue = ef.coerceToType(value, toType);
+        } catch (ELException ele) {
+            newValue = value;
+        } catch (IllegalArgumentException iae) {
+            // If coerceToType fails, per the docs it should throw
+            // an ELException, however, GF 9.0 and 9.0u1 will throw
+            // an IllegalArgumentException instead (see GF issue 1527).
+            newValue = value;
+        }
+
+        return newValue;
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Exposes an Array via an <code>Iterator</code>
+     */
+    static class ArrayIterator implements Iterator {
+
+        public ArrayIterator(Object items[]) {
+            this.items = items;
+        }
+
+        private Object items[];
+        private int index = 0;
+
+        public boolean hasNext() {
+            return (index < items.length);
+        }
+
+        public Object next() {
+            try {
+                return (items[index++]);
+            } catch (IndexOutOfBoundsException e) {
+                throw new NoSuchElementException();
+            }
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    } // END ArrayIterator
+
+}
diff --git a/javax/faces/component/SharedUtils.java b/javax/faces/component/SharedUtils.java
new file mode 100644
index 0000000..2993101
--- /dev/null
+++ b/javax/faces/component/SharedUtils.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+class SharedUtils {
+
+    /*
+    * Determine whether String is a mixed value binding expression or not.
+    */
+    static boolean isMixedExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        // if it doesn't start and end with delimiters
+        return (!(expression.startsWith("#{") && expression.endsWith("}")))
+                  && isExpression(expression);
+
+    }
+
+
+    /*
+    * Determine whether String is a value binding expression or not.
+    */
+    static boolean isExpression(String expression) {
+
+        if (null == expression) {
+            return false;
+        }
+
+        //check to see if attribute has an expression
+        int start = expression.indexOf("#{");
+        return start != -1 && expression.indexOf('}', start+2) != -1;
+    }
+
+    static Map<String, List<String>> evaluateExpressions(FacesContext context, Map<String, List<String>> map) {
+        if (map != null && !map.isEmpty()) {
+            Map<String, List<String>> ret = new HashMap<String, List<String>>(map.size());
+            for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+                ret.put(entry.getKey(), evaluateExpressions(context, entry.getValue()));
+            }
+            
+            return ret;
+        }
+        
+        return map;
+    }
+     
+    static List<String> evaluateExpressions(FacesContext context, List<String> values) {
+         if (!values.isEmpty()) {
+             List<String> ret = new ArrayList<String>(values.size());
+             Application app = context.getApplication();
+             for (String val : values) {
+                 if (val != null) {
+                     String value = val.trim();
+                     if (isExpression(value)) {
+                         value = app.evaluateExpressionGet(context,
+                                                           value,
+                                                           String.class);
+                     }
+                     ret.add(value);
+                 }
+             }
+             
+             return ret;
+         }
+         return values;
+     }
+
+
+
+}
+
+     
+
diff --git a/javax/faces/component/StateHelper.java b/javax/faces/component/StateHelper.java
new file mode 100644
index 0000000..cc7d730
--- /dev/null
+++ b/javax/faces/component/StateHelper.java
@@ -0,0 +1,172 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.io.Serializable;
+
+/**
+ * <p class="changed_added_2_0">Define a <code>Map</code>-like contract
+ * that makes it easier for components to implement {@link
+ * PartialStateHolder}.  Each {@link UIComponent} in the view will
+ * return an implementation of this interface from its {@link
+ * UIComponent#getStateHelper} method.</p>
+ *
+ * @since 2.0
+ */
+public interface StateHelper extends StateHolder {
+
+
+    /**
+     * <p class="changed_added_2_0">Return the previously stored value
+     * and store the specified key/value pair.  This is intended to
+     * store data that would otherwise reside in an instance variable on
+     * the component.</p>
+
+     * @since 2.0
+
+     * @param key the key for the value
+     * @param value the value
+     */
+    Object put(Serializable key, Object value);
+
+
+    /**
+     * <p class="changed_added_2_0">Remove the key/value pair from the
+     * helper, returning the value previously stored under this key.</p>
+     * @param key the key to remove
+     * @since 2.0
+     */
+    Object remove(Serializable key);
+
+
+    /**
+     * <p class="changed_added_2_0">Store the specified
+     * <code>mapKey</code>/<code>value</code> in a <code>Map</code> that
+     * is internal to the helper, and return the previously stored
+     * value.  The <code>Map</code> will then be associated with
+     * <code>key</code>.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * <p>It's important to note for delta tracking that any
+     * modifications to the internal <code>Map</code> be made through
+     * this method or {@link StateHelper#remove(java.io.Serializable,
+     * Object)}.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     * @param key the key of the map itself
+     * @param mapKey the key within the internal map
+     * @param value the value for the key in the internal map
+     */
+    Object put(Serializable key, String mapKey, Object value);
+
+
+    /**
+     * <p class="changed_added_2_0">Return the value currently
+     * associated with the specified <code>key</code> if any.</p>
+     * @param key the key for which the value should be returned.
+     * @since 2.0
+     */
+    Object get(Serializable key);
+
+
+    /**
+     * <p class="changed_added_2_0">Attempts to find a value associated
+     * with the specified key, using the value expression collection
+     * from the component if no such value is found.
+     * @param key the name of the value in the internal map, or the name
+     * of a value expression in the components value expression
+     * collection.</p>
+     *
+     * @since 2.0
+     */
+    Object eval(Serializable key);
+
+
+    /**
+     * <p class="changed_added_2_0">Performs the same logic as {@link
+     * #eval(java.io.Serializable)} } but if no value is found, this
+     * will return the specified <code>defaultValue</code></p>
+
+     * @param key the key for which the value should be returned.
+     * @param defaultValue the value to return if no value is found in
+     * the call to <code>eval()</code>.
+     * @since 2.0
+     */
+    Object eval(Serializable key, Object defaultValue);
+
+
+    /**
+     * <p class="changed_added_2_0">Store the specified
+     * <code>value</code> in a <code>List</code> that is internal to the
+     * <code>StateHelper</code>.</p>
+     *
+     * <p class="changed_added_2_0">It's important to note for delta
+     * tracking that any modifications to the internal <code>List</code>
+     * be made through this method or {@link
+     * StateHelper#remove(java.io.Serializable, Object)}.</p>
+     *
+     * @param key the key for which the value should be returned.
+     * @param value the value to add
+     * @since 2.0
+     */
+    void add(Serializable key, Object value);
+
+
+    /**
+     * <p class="changed_added_2_0">Remove a value from the inner data
+     * structure.  Look in the inner data structure for the value at the
+     * given <code>key</code>.  If the value is a <code>Map</code>,
+     * remove and return the value under the key given by the
+     * <code>valueOrKey</code> argument.  If the value is a
+     * <code>Collection</code>, simply remove the value given by
+     * the argument <code>valueOrKey</code> and return null.</p>
+     *
+     * @param key the key of in the inner data structure whose value is
+     * a <code>Collection</code> or <code>Map</code>
+     * @param valueOrKey the value or key to be removed.
+     */
+    Object remove(Serializable key, Object valueOrKey);
+
+
+}
diff --git a/javax/faces/component/StateHolder.java b/javax/faces/component/StateHolder.java
new file mode 100644
index 0000000..19dd292
--- /dev/null
+++ b/javax/faces/component/StateHolder.java
@@ -0,0 +1,133 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * <p><span class="changed_modified_2_0_rev_a">This</span> interface is
+ * implemented by classes that need to save their state between
+ * requests.</p>
+ *
+ * <p>An implementor <strong>must</strong> implement both {@link
+ * #saveState} and {@link #restoreState} methods in this class, since
+ * these two methods have a tightly coupled contract between themselves.
+ * In other words, if there is an ineritance hierarchy, it is not
+ * permissable to have the {@link #saveState} and {@link #restoreState}
+ * methods reside at different levels of the hierarchy.</p>
+ *
+ * <p>An implementor must have a public no-args constructor.</p>
+ *
+ */
+
+public interface StateHolder {
+
+    /**
+     * <p> Gets the state of the instance as a
+     * <code>Serializable</code> Object.<p>
+     *
+     * <p>If the class that implements this interface has references to
+     * instances that implement StateHolder (such as a
+     * <code>UIComponent</code> with event handlers, validators, etc.)
+     * this method must call the {@link #saveState} method on all those
+     * instances as well.  <strong>This method must not save the state
+     * of children and facets.</strong> That is done via the {@link
+     * javax.faces.application.StateManager}</p>
+     *
+     * <p>This method must not alter the state of the implementing
+     * object.  In other words, after executing this code:</p>
+     *
+     * <code><pre>
+     * Object state = component.saveState(facesContext);
+     * </pre></code>
+     *
+     * <p><code>component</code> should be the same as before executing
+     * it.</p>
+     *
+     * <p>The return from this method must be <code>Serializable</code></p>
+     * 
+     * @throws NullPointerException if <code>context</code> is null
+     */
+
+    public Object saveState(FacesContext context);
+
+    /**
+     *
+     * <p><span class="changed_modified_2_0_rev_a">Perform</state> any
+     * processing required to restore the state from the entries in the
+     * state Object.</p>
+     *
+     * <p>If the class that implements this interface has references to
+     * instances that also implement StateHolder (such as a
+     * <code>UIComponent</code> with event handlers, validators, etc.)
+     * this method must call the {@link #restoreState} method on all those
+     * instances as well. </p>
+
+     * <p class="changed_modified_2_0_rev_a">If the <code>state</code>
+     * argument is <code>null</code>, take no action and return.</p>
+     * 
+     * @throws NullPointerException if <code>context</code> is null.
+     */
+
+    public void restoreState(FacesContext context, Object state);
+
+    /**
+     *
+     * <p>If true, the Object implementing this interface must not
+     * participate in state saving or restoring.</p>
+     */
+
+    public boolean isTransient();
+
+    /**
+     * <p><span class="changed_modified_2_0_rev_a">Denotes</span>
+     * whether or not the Object implementing this interface must or
+     * must not participate in state saving or restoring.</p>
+     * 
+     * @param newTransientValue boolean pass <code>true</code> if this
+     * Object <span class="changed_modified_2_0_rev_a">will not
+     * participate</span> in state saving or restoring, otherwise pass
+     * <code>false</code>.
+     */ 
+    public void setTransient(boolean newTransientValue);
+
+}
diff --git a/javax/faces/component/StateHolderSaver.java b/javax/faces/component/StateHolderSaver.java
new file mode 100644
index 0000000..5975e79
--- /dev/null
+++ b/javax/faces/component/StateHolderSaver.java
@@ -0,0 +1,180 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import java.io.Serializable;
+
+/**
+ * <p>Helper class for saving and restoring attached objects.</p>
+ */
+class StateHolderSaver implements Serializable {
+
+    private static final long serialVersionUID = 6470180891722042701L;
+
+    private String className = null;
+    private Serializable savedState = null;
+
+    public static final String DYNAMIC_COMPONENT =
+            "com.sun.faces.DynamicComponent";
+    
+    private enum StateHolderTupleIndices {
+        StateHolderSaverInstance,
+        ComponentAddedDynamically,
+        LastMember
+    };
+
+    public boolean componentAddedDynamically() {
+        boolean result = false;
+
+
+        // if the Object to save implemented Serializable but not
+        // StateHolder
+        if (null == className && null != savedState) {
+            return result;
+        }
+
+        // if the Object to save did not implement Serializable or
+        // StateHolder
+        if (className == null) {
+            return result;
+        }
+
+        // else the object to save did implement StateHolder
+
+        if (null != savedState) {
+            // don't need to check transient, since that was done on
+            // the saving side.
+            Serializable [] tuple = (Serializable []) savedState;
+            result = (Boolean) tuple[StateHolderTupleIndices.ComponentAddedDynamically.ordinal()];
+        }
+
+        return result;
+    }
+
+    public StateHolderSaver(FacesContext context, Object toSave) {
+        className = toSave.getClass().getName();
+
+        if (toSave instanceof StateHolder) {
+            // do not save an attached object that is marked transient.
+            if (!((StateHolder) toSave).isTransient()) {
+                Serializable [] tuple = new Serializable[StateHolderTupleIndices.LastMember.ordinal()];
+
+                tuple[StateHolderTupleIndices.StateHolderSaverInstance.ordinal()] =
+                      (Serializable) ((StateHolder) toSave).saveState(context);
+                if (toSave instanceof UIComponent) {
+                    tuple[StateHolderTupleIndices.ComponentAddedDynamically.ordinal()] = ((UIComponent)toSave).getAttributes().containsKey(DYNAMIC_COMPONENT) ? Boolean.TRUE : Boolean.FALSE;
+                }
+                savedState = tuple;
+            } else {
+                className = null;
+            }
+        } else if (toSave instanceof Serializable) {
+            savedState = (Serializable) toSave;
+            className = null;
+        }
+    }
+
+    /**
+     *
+     * @return the restored {@link StateHolder} instance.
+     */
+
+    public Object restore(FacesContext context) throws IllegalStateException {
+        Object result = null;
+        Class toRestoreClass;
+
+        // if the Object to save implemented Serializable but not
+        // StateHolder
+        if (null == className && null != savedState) {
+            return savedState;
+        }
+
+        // if the Object to save did not implement Serializable or
+        // StateHolder
+        if (className == null) {
+            return null;
+        }
+
+        // else the object to save did implement StateHolder
+
+        try {
+            toRestoreClass = loadClass(className, this);
+        }
+        catch (ClassNotFoundException e) {
+            throw new IllegalStateException(e);
+        }
+
+        if (null != toRestoreClass) {
+            try {
+                result = toRestoreClass.newInstance();
+            }
+            catch (InstantiationException e) {
+                throw new IllegalStateException(e);
+            }
+            catch (IllegalAccessException a) {
+                throw new IllegalStateException(a);
+            }
+        }
+
+        if (null != result && null != savedState &&
+            result instanceof StateHolder) {
+            // don't need to check transient, since that was done on
+            // the saving side.
+            Serializable [] tuple = (Serializable []) savedState;
+            ((StateHolder) result).restoreState(context, tuple[StateHolderTupleIndices.StateHolderSaverInstance.ordinal()]);
+        }
+        return result;
+    }
+
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, false, loader);
+    }
+}
diff --git a/javax/faces/component/TransientStateHelper.java b/javax/faces/component/TransientStateHelper.java
new file mode 100644
index 0000000..c90ef46
--- /dev/null
+++ b/javax/faces/component/TransientStateHelper.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+/**
+ * <p class="changed_added_2_1">Define a <code>Map</code>-like contract
+ * that makes it easier for components to implement {@link
+ * TransientStateHolder}.  Each {@link UIComponent} in the view will
+ * return an implementation of this interface from its {@link
+ * UIComponent#getTransientStateHelper} method.</p>
+ * 
+ * <div class="changed_added_2_1">
+ * 
+ * <p>The values retrieved or saved through {@link
+ * #getTransient} or {@link
+ * #putTransient} will not be
+ * preserved between requests.</p>
+ * 
+ * </div>
+ * 
+ * @since 2.1
+ * 
+ */
+public interface TransientStateHelper extends TransientStateHolder
+{
+    /**
+     * <p class="changed_added_2_1">Return the value currently
+     * associated with the specified <code>key</code> if any.</p>
+     * @param key the key for which the value should be returned.
+     * @since 2.1
+     */
+    public Object getTransient(Object key);
+    
+    /**
+     * <p class="changed_added_2_1">Performs the same logic as {@link
+     * #getTransient} } but if no value is found, this
+     * will return the specified <code>defaultValue</code></p>
+
+     * @param key the key for which the value should be returned.
+     * @param defaultValue the value to return if no value is found in
+     * the call to <code>get()</code>.
+     * @since 2.1
+     */
+    public Object getTransient(Object key, Object defaultValue);
+
+    /**
+     * <p class="changed_added_2_1">Return the previously stored value
+     * and store the specified key/value pair.  This is intended to
+     * store data that would otherwise reside in an instance variable on
+     * the component.</p>
+     * 
+     * @param key the key for the value
+     * @param value the value
+     * @since 2.1
+     */
+    public Object putTransient(Object key, Object value);
+}
diff --git a/javax/faces/component/TransientStateHolder.java b/javax/faces/component/TransientStateHolder.java
new file mode 100644
index 0000000..9349abb
--- /dev/null
+++ b/javax/faces/component/TransientStateHolder.java
@@ -0,0 +1,90 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+/**
+ * <p class="changed_added_2_1">This interface is implemented by classes 
+ * that need to save state that is expected to be available only within the scope
+ * of the current request.</p>
+ * 
+ * <div class="changed_added_2_1">
+ * 
+ * <p>An implementor <strong>must</strong> implement both {@link
+ * #saveTransientState} and {@link #restoreTransientState} methods in this class, since
+ * these two methods have a tightly coupled contract between themselves.
+ * In other words, if there is an inheritance hierarchy, it is not
+ * permissible to have the {@link #saveTransientState} and {@link #restoreTransientState}
+ * methods reside at different levels of the hierarchy.</p>
+ *
+ * <p>An example of transient state is the "submitted" property on forms.</p>
+ * 
+ * </div>
+ * 
+ * @since 2.1
+ */
+public interface TransientStateHolder
+{
+    
+    /**
+     * <p class="changed_added_2_1">Return the object containing related "transient states".
+     * that could be used later to restore the "transient state".<p>
+     * 
+     * @param context
+     * @return object containing transient values
+     * @since 2.1
+     */
+    public java.lang.Object saveTransientState(javax.faces.context.FacesContext context);
+
+    /**
+     * <p class="changed_added_2_1">Restore the "transient state" using the object passed as
+     * state.</p>
+     * 
+     * <p class="changed_added_2_1">If the <code>state</code>
+     * argument is <code>null</code> clear any previous transient
+     * state if any and return.</p>
+     * 
+     * @param context
+     * @param state the object containing transient values
+     * @since 2.1
+     */
+    public void restoreTransientState(javax.faces.context.FacesContext context,
+                             java.lang.Object state);
+}
diff --git a/javax/faces/component/TypedCollections.java b/javax/faces/component/TypedCollections.java
new file mode 100644
index 0000000..713153d
--- /dev/null
+++ b/javax/faces/component/TypedCollections.java
@@ -0,0 +1,159 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+ class TypedCollections {
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null).
+     */
+    private static boolean checkCollectionMembers(Collection<?> c, Class<?> type) {
+        for (Object element : c) {
+            if (element != null && !type.isInstance(element)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null), and that the collection
+     * itself is of the given collection type.
+     * 
+     * @param <E>
+     *                the collection's element type
+     * @param c
+     *                the collection to cast
+     * @param type
+     *                the class of the collection's element type.
+     * @return the dynamically-type checked collection.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E,TypedC extends Collection<E>> TypedC dynamicallyCastCollection(Collection<?> c,
+                                                                                          Class<E> type, 
+                                                                                          Class<TypedC> collectionType) {
+        if (c == null)
+            return null;
+        if (!collectionType.isInstance(c))
+            throw new ClassCastException(c.getClass().getName());
+        assert checkCollectionMembers(c, type) :
+            "The collection contains members with a type other than " + type.getName();
+
+        return collectionType.cast(c);
+    }
+
+    /**
+     * Dynamically check that the members of the list are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the list's element type
+     * @param list
+     *                the list to cast
+     * @param type
+     *                the class of the list's element type.
+     * @return the dynamically-type checked list.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E> List<E> dynamicallyCastList(List<?> list, Class<E> type) {
+        return dynamicallyCastCollection(list, type, List.class);
+    }
+
+    /**
+     * Dynamically check that the members of the set are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the set's element type
+     * @param set
+     *                the set to cast
+     * @param type
+     *                the class of the set's element type.
+     * @return the dynamically-type checked set.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E> Set<E> dynamicallyCastSet(Set<?> set, 
+                                                      Class<E> type) {
+        return dynamicallyCastCollection(set, type, Set.class);
+    }
+
+    /**
+     * Dynamically check that the keys and values in the map are all
+     * instances of the correct types (or null).
+     * 
+     * @param <K>
+     *                the map's key type
+     * @param <V>
+     *                the map's value type
+     * @param map
+     *                the map to cast
+     * @param keyType
+     *                the class of the map's key type.
+     * @param valueType
+     *                the class of the map's value type.
+     * @return the dynamically-type checked map.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <K, V> Map<K, V> dynamicallyCastMap(Map<?, ?> map,
+                                                            Class<K> keyType, 
+                                                            Class<V> valueType) {
+        if (map == null) {
+            return null;                                                                     
+        }
+        assert checkCollectionMembers(map.keySet(), keyType) :
+            "The map contains keys with a type other than " + keyType.getName();
+        assert checkCollectionMembers(map.values(), valueType) :
+            "The map contains values with a type other than " + valueType.getName();
+
+        return (Map<K, V>) map;
+    }
+}
diff --git a/javax/faces/component/UIColumn.java b/javax/faces/component/UIColumn.java
new file mode 100644
index 0000000..6898de4
--- /dev/null
+++ b/javax/faces/component/UIColumn.java
@@ -0,0 +1,146 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+/**
+ * <p><strong>UIColumn</strong> is a {@link UIComponent} that represents
+ * a single column of data within a parent {@link UIData} component.</p>
+ */
+
+public class UIColumn extends UIComponentBase {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Column";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Column";
+
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Create a new {@link UIColumn} instance with default property
+     * values.</p>
+     */
+    public UIColumn() {
+
+        super();
+        setRendererType(null);
+
+    }
+
+  
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the footer facet of the column (if any).  A convenience
+     * method for <code>getFacet("footer")</code>.</p>
+     */
+    public UIComponent getFooter() {
+
+        return getFacet("footer");
+
+    }
+
+
+    /**
+     * <p>Set the footer facet of the column.  A convenience
+     * method for <code>getFacets().put("footer", footer)</code>.</p>
+     * 
+     * @param footer the new footer facet
+     * 
+     * @throws NullPointerException if <code>footer</code> is
+     *   <code>null</code>
+     */
+    public void setFooter(UIComponent footer) {
+
+        getFacets().put("footer", footer);
+
+    }
+
+
+    /**
+     * <p>Return the header facet of the column (if any).  A convenience
+     * method for <code>getFacet("header")</code>.</p>
+     */
+    public UIComponent getHeader() {
+
+        return getFacet("header");
+
+    }
+
+
+    /**
+     * <p>Set the header facet of the column.  A convenience
+     * method for <code>getFacets().put("header", header)</code>.</p>
+     * 
+     * @param header the new header facet
+     * 
+     * @throws NullPointerException if <code>header</code> is
+     *   <code>null</code>
+     */
+    public void setHeader(UIComponent header) {
+
+        getFacets().put("header", header);
+
+    }
+
+
+}
diff --git a/javax/faces/component/UICommand.java b/javax/faces/component/UICommand.java
new file mode 100644
index 0000000..3118d57
--- /dev/null
+++ b/javax/faces/component/UICommand.java
@@ -0,0 +1,346 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.el.MethodExpression;
+import javax.faces.application.Application;
+import javax.faces.context.FacesContext;
+import javax.faces.el.MethodBinding;
+import javax.faces.event.*;
+import javax.faces.render.Renderer;
+
+
+/**
+ * <p><strong>UICommand</strong> is a {@link UIComponent} that represents
+ * a user interface component which, when activated by the user, triggers
+ * an application specific "command" or "action".  Such a component is
+ * typically rendered as a push button, a menu item, or a hyperlink.</p>
+ *
+ * <p>When the <code>decode()</code> method of this {@link UICommand}, or
+ * its corresponding {@link Renderer}, detects that this control has been
+ * activated, it will queue an {@link ActionEvent}.
+ * Later on, the <code>broadcast()</code> method will ensure that this
+ * event is broadcast to all interested listeners.</p>
+ * 
+ * <p>Listeners will be invoked in the following order:
+ * <ol>
+ *  <li>{@link ActionListener}s, in the order in which they were registered.
+ *  <li>The "actionListener" {@link MethodExpression} (which will cover
+ *  the "actionListener" that was set as a <code>MethodBinding</code>).
+ *  <li>The default {@link ActionListener}, retrieved from the
+ *      {@link Application} - and therefore, any attached "action"
+ *      {@link MethodExpression}.
+ * </ol>
+ * </p>
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Button</code>".  This value can be changed by calling the
+ * <code>setRendererType()</code> method.</p>
+ */
+
+public class UICommand extends UIComponentBase
+    implements ActionSource2 {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Command";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Command";
+
+
+    /**
+     * Properties that are tracked by state saving.
+     */
+    enum PropertyKeys {
+        value,
+        immediate,
+        methodBindingActionListener,
+        actionExpression,
+    }
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UICommand} instance with default property
+     * values.</p>
+     */
+    public UICommand() {
+
+        super();
+        setRendererType("javax.faces.Button");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    // ------------------------------------------------- ActionSource/ActionSource2 Properties
+
+
+    /**
+     * {@inheritDoc}
+     *
+     * @deprecated This has been replaced by {@link #getActionExpression}.
+     */
+    public MethodBinding getAction() {
+        MethodBinding result = null;
+        MethodExpression me;
+
+        if (null != (me = getActionExpression())) {
+            // if the MethodExpression is an instance of our private
+            // wrapper class.
+            if (me.getClass().equals(MethodExpressionMethodBindingAdapter.class)) {
+                result = ((MethodExpressionMethodBindingAdapter) me).getWrapped();
+            } else {
+                // otherwise, this is a real MethodExpression.  Wrap it
+                // in a MethodBinding.
+                result = new MethodBindingMethodExpressionAdapter(me);
+            }
+        }
+        return result;
+
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @deprecated This has been replaced by {@link #setActionExpression(javax.el.MethodExpression)}.
+     */
+    public void setAction(MethodBinding action) {
+        MethodExpressionMethodBindingAdapter adapter;
+        if (null != action) {
+            adapter = new MethodExpressionMethodBindingAdapter(action);
+            setActionExpression(adapter);
+        } else {
+            setActionExpression(null);
+        }
+    }
+    
+    /**
+     * {@inheritDoc}
+     * @deprecated Use {@link #getActionListeners} instead.
+     */
+    public MethodBinding getActionListener() {
+        return (MethodBinding) getStateHelper().get(PropertyKeys.methodBindingActionListener);
+    }
+
+    /**
+     * {@inheritDoc}
+     * @deprecated This has been replaced by {@link #addActionListener(javax.faces.event.ActionListener)}.
+     */
+    public void setActionListener(MethodBinding actionListener) {
+        getStateHelper().put(PropertyKeys.methodBindingActionListener, actionListener);
+    } 
+
+    /**
+     * <p>The immediate flag.</p>
+     */
+    //private Boolean immediate;
+
+
+    public boolean isImmediate() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, false);
+
+    }
+
+
+    public void setImmediate(boolean immediate) {
+
+        getStateHelper().put(PropertyKeys.immediate, immediate);
+
+    }
+
+
+
+    /**
+     * <p>Returns the <code>value</code> property of the
+     * <code>UICommand</code>. This is most often rendered as a label.</p>
+     */
+    public Object getValue() {
+
+        return getStateHelper().eval(PropertyKeys.value);
+
+    }
+
+
+    /**
+     * <p>Sets the <code>value</code> property of the <code>UICommand</code>.
+     * This is most often rendered as a label.</p>
+     *
+     * @param value the new value
+     */
+    public void setValue(Object value) {
+
+        getStateHelper().put(PropertyKeys.value, value);
+
+    }
+
+
+    // ---------------------------------------------------- ActionSource / ActionSource2 Methods
+
+    
+    public MethodExpression getActionExpression() {
+        return (MethodExpression) getStateHelper().get(PropertyKeys.actionExpression);
+    }
+    
+    public void setActionExpression(MethodExpression actionExpression) {
+        getStateHelper().put(PropertyKeys.actionExpression, actionExpression);
+    }
+    
+    /** 
+     * @throws NullPointerException {@inheritDoc}
+     */ 
+    public void addActionListener(ActionListener listener) {
+
+        addFacesListener(listener);
+
+    }
+    
+    public ActionListener[] getActionListeners() {
+
+        ActionListener al[] = (ActionListener [])
+        getFacesListeners(ActionListener.class);
+        return (al);
+
+    }
+
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */ 
+    public void removeActionListener(ActionListener listener) {
+
+        removeFacesListener(listener);
+
+    }
+
+
+    // ----------------------------------------------------- UIComponent Methods
+
+
+    /**
+     * <p>In addition to to the default {@link UIComponent#broadcast}
+     * processing, pass the {@link ActionEvent} being broadcast to the
+     * method referenced by <code>actionListener</code> (if any),
+     * and to the default {@link ActionListener} registered on the
+     * {@link javax.faces.application.Application}.</p>
+     *
+     * @param event {@link FacesEvent} to be broadcast
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     * @throws IllegalArgumentException if the implementation class
+     *  of this {@link FacesEvent} is not supported by this component
+     * @throws NullPointerException if <code>event</code> is
+     * <code>null</code>
+     */
+    public void broadcast(FacesEvent event) throws AbortProcessingException {
+
+        // Perform standard superclass processing (including calling our
+        // ActionListeners)
+        super.broadcast(event);
+
+        if (event instanceof ActionEvent) {
+            FacesContext context = getFacesContext();
+            
+            // Notify the specified action listener method (if any)
+            MethodBinding mb = getActionListener();
+            if (mb != null) {
+                mb.invoke(context, new Object[] { event });
+            }
+
+            // Invoke the default ActionListener
+            ActionListener listener =
+              context.getApplication().getActionListener();
+            if (listener != null) {
+                listener.processAction((ActionEvent) event);
+            }
+        }
+    }
+
+    /**
+
+     * <p>Intercept <code>queueEvent</code> and take the following
+     * action.  If the event is an <code>{@link ActionEvent}</code>,
+     * obtain the <code>UIComponent</code> instance from the event.  If
+     * the component is an <code>{@link ActionSource}</code> obtain the
+     * value of its "immediate" property.  If it is true, mark the
+     * phaseId for the event to be
+     * <code>PhaseId.APPLY_REQUEST_VALUES</code> otherwise, mark the
+     * phaseId to be <code>PhaseId.INVOKE_APPLICATION</code>.  The event
+     * must be passed on to <code>super.queueEvent()</code> before
+     * returning from this method.</p>
+
+     */
+
+    public void queueEvent(FacesEvent e) {
+        UIComponent c = e.getComponent();
+        if (e instanceof ActionEvent && c instanceof ActionSource) {
+            if (((ActionSource) c).isImmediate()) {
+                e.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
+            } else {
+                e.setPhaseId(PhaseId.INVOKE_APPLICATION);
+            }
+        }
+        super.queueEvent(e);
+    }
+}
diff --git a/javax/faces/component/UIComponent.java b/javax/faces/component/UIComponent.java
new file mode 100644
index 0000000..87601cc
--- /dev/null
+++ b/javax/faces/component/UIComponent.java
@@ -0,0 +1,2691 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import java.util.MissingResourceException;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.FacesWrapper;
+import javax.faces.application.Resource;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PostRestoreStateEvent;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import javax.faces.event.FacesListener;
+import javax.faces.event.SystemEventListenerHolder;
+import javax.faces.render.Renderer;
+
+/**
+ * <p><strong class="changed_modified_2_0
+ * changed_modified_2_0_rev_a changed_modified_2_1 changed_modified_2_2">UIComponent</strong> is
+ * the base class for all user interface components in JavaServer Faces.
+ * The set of {@link UIComponent} instances associated with a particular request
+ * and response are organized into a component tree under a {@link
+ * UIViewRoot} that represents the entire content of the request or
+ * response.</p>
+ *
+ * <p>For the convenience of component developers,
+ * {@link UIComponentBase} provides the default
+ * behavior that is specified for a {@link UIComponent}, and is the base class
+ * for all of the concrete {@link UIComponent} "base" implementations.
+ * Component writers are encouraged to subclass
+ * {@link UIComponentBase}, instead of directly
+ * implementing this abstract class, to reduce the impact of any future changes
+ * to the method signatures.</p>
+ *
+ * <p class="changed_added_2_0">If the {@link
+ * javax.faces.event.ListenerFor} annotation is attached to the class
+ * definition of a <code>Component</code>, that class must also
+ * implement {@link javax.faces.event.ComponentSystemEventListener}.
+ * </p>
+
+ */
+
+public abstract class UIComponent implements PartialStateHolder, TransientStateHolder, SystemEventListenerHolder,
+        ComponentSystemEventListener {
+
+    private static Logger LOGGER = Logger.getLogger("javax.faces.component",
+            "javax.faces.LogStrings");
+
+    /**
+     * <p class="changed_added_2_1">The <code>ServletContext</code> init
+     * parameter consulted by
+     * the <code>UIComponent</code> to tell whether or not the
+     * {@link #CURRENT_COMPONENT} and {@link #CURRENT_COMPOSITE_COMPONENT}
+     * attribute keys should be honored as specified.</p>
+     *
+     * <p>If this parameter is not specified, or is set to false, the contract
+     * specified by the {@link #CURRENT_COMPONENT} and
+     * {@link #CURRENT_COMPOSITE_COMPONENT} method is not honored. If this
+     * parameter is set to true, the contract is honored.</p>
+     */
+    public static final String HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME =
+            "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES";
+    
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_deleted_2_2">The</span> key to which the
+     * <code>UIComponent</code> currently being processed will be
+     * associated with within the {@link FacesContext} attributes
+     * map. <span class="changed_deleted_2_2">The use of this constant is
+     * deprecated.  Please see {@link
+     * #HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME} to enable its
+     * use.</span></p>
+     *
+     * @see javax.faces.context.FacesContext#getAttributes()
+     *
+     * @since 2.0
+     *
+     * @deprecated
+     */
+    public static final String CURRENT_COMPONENT = "javax.faces.component.CURRENT_COMPONENT";
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_deleted_2_2">The</span> key to which the
+     * <em>composite</em> <code>UIComponent</code> currently being
+     * processed will be associated with within the {@link FacesContext}
+     * attributes map. <span class="changed_deleted_2_2">The use of this
+     * constant is deprecated.  Please see {@link
+     * #HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME} to enable its
+     * use.</span></p>
+     *
+     * @see javax.faces.context.FacesContext#getAttributes()
+     *
+     * @since 2.0
+     *
+     * @deprecated
+     */
+    public static final String CURRENT_COMPOSITE_COMPONENT = "javax.faces.component.CURRENT_COMPOSITE_COMPONENT";
+
+    /**
+     * <p class="changed_added_2_0">The value of this constant is used as the key in the
+     * component attribute map, the value for which is a
+     * <code>java.beans.BeanInfo</code> implementation describing the composite
+     * component.  This <code>BeanInfo</code> is known as the 
+     * <em>composite component BeanInfo</em>.</p>
+     *
+     * @since 2.0
+     */
+    public static final String BEANINFO_KEY = "javax.faces.component.BEANINFO_KEY";
+
+
+    /**
+     * <p class="changed_added_2_0">The value of this constant is used as the key
+     * in the <em>composite component BeanDescriptor</em> for the 
+     * <code>Map<PropertyDescriptor></code> that contains meta-information
+     * for the declared facets for this composite component.
+     * This map must contain an entry under the key {@link #COMPOSITE_FACET_NAME}, even
+     * if no facets were explicitly declared.  See {@link #COMPOSITE_FACET_NAME}.</p>
+     *
+     * @since 2.0
+     */
+    public static final String FACETS_KEY = "javax.faces.component.FACETS_KEY";
+    
+    /**
+     * <p class="changed_added_2_0">The value of this constant is used as the key
+     * in the component attributes <code>Map</code> for the 
+     * {@link javax.faces.view.Location} in the view at which this component 
+     * instance resides.</p>
+     *
+     * @since 2.0
+     */
+    public static final String VIEW_LOCATION_KEY = "javax.faces.component.VIEW_LOCATION_KEY";
+    
+    /**
+     * <p class="changed_added_2_0">The value of this constant is used as the key
+     * in the <em>composite component BeanDescriptor</em> for a 
+     * <code>ValueExpression</code> that evaluates to the 
+     * <code>component-type</code> of the <em>composite component root</em>
+     * <code>UIComponent</code> for this composite component, if
+     * one was declared by the composite component author.</p>
+     *
+     * @since 2.0
+     */
+    public static final String COMPOSITE_COMPONENT_TYPE_KEY = "javax.faces.component.COMPOSITE_COMPONENT_TYPE";
+    
+    /**
+     * <p class="changed_added_2_0">The value of this constant is used as the key
+     * in the <code>Map</code> returned as described in {@link #FACETS_KEY}
+     * for the 
+     * <code>PropertyDescriptor</code> describing the composite component facet.
+     * The value of this constant is also used as the key in the <code>Map</code>
+     * returned from {@link #getFacets}.  In this case, it refers to the actual
+     * facet that is the {@link javax.faces.component.UIPanel} that is the parent of the all
+     * of the components in the <code><composite:implementation></code>
+     * section of the <em>composite component VDL file</em>.</p>
+     *
+     * @since 2.0
+     */
+    public static final String COMPOSITE_FACET_NAME = "javax.faces.component.COMPOSITE_FACET_NAME";
+
+    /**
+     * <p class="changed_added_2_1">This constant enables one to quickly discover
+     * the names of the declared composite component attributes that have been
+     * given default values by the composite component author.  The information
+     * is exposed as a <code>Collection<String></code> returned from the
+     * <code>getValue()</code> method on the <em>composite component
+     * BeanDescriptor</em>, when this constant is passed as the argument.</p>
+     *
+     * @since 2.1
+     */
+    public static final String ATTRS_WITH_DECLARED_DEFAULT_VALUES =
+            "javax.faces.component.ATTR_NAMES_WITH_DEFAULT_VALUES";
+
+    enum PropertyKeysPrivate {
+        attributesThatAreSet
+    }
+
+    /**
+     * Properties that are tracked by state saving.
+     */
+    enum PropertyKeys {
+        rendered,
+        attributes,
+        bindings,
+        rendererType,
+        systemEventListeners,
+        behaviors,
+        passThroughAttributes
+    }
+
+    /**
+     * List of attributes that have been set on the component (this
+     * may be from setValueExpression, the attributes map, or setters
+     * from the concrete HTML components.  This allows
+     * for faster rendering of attributes as this list is authoritative
+     * on what has been set.
+     */
+    List<String> attributesThatAreSet;
+    ComponentStateHelper stateHelper = null;
+    UIComponent compositeParent;
+    
+    private transient Boolean isSetCurrentComponent;
+
+    // -------------------------------------------------------------- Attributes
+
+
+    /**
+     * <p>Return a mutable 
+     * <code>Map</code> representing the attributes
+     * (and properties, see below) associated wth this {@link UIComponent},
+     * keyed by attribute name (which must be a String).  The returned
+     * implementation must support all of the standard and optional
+     * <code>Map</code> methods, plus support the following additional
+     * requirements:</p>
+     * <ul>
+     * <li>The <code>Map</code> implementation must implement
+     *     the <code>java.io.Serializable</code> interface.</li>
+     * <li>Any attempt to add a <code>null</code> key or value must
+     *     throw a <code>NullPointerException</code>.</li>
+     * <li>Any attempt to add a key that is not a String must throw
+     *     a <code>ClassCastException</code>.</li>
+     * <li>If the attribute name specified as a key matches a property
+     *     of this {@link UIComponent}'s implementation class, the following
+     *     methods will have special behavior:
+     *     <ul>
+     *     <li><code>containsKey</code> - Return <code>false</code>.</li>
+     *     <li><code>get()</code> - If the property is readable, call
+     *         the getter method and return the returned value (wrapping
+     *         primitive values in their corresponding wrapper classes);
+     *         otherwise throw <code>IllegalArgumentException</code>.</li>
+     *     <li><code>put()</code> - If the property is writeable, call
+     *         the setter method to set the corresponding value (unwrapping
+     *         primitive values in their corresponding wrapper classes).
+     *         If the property is not writeable, or an attempt is made to
+     *         set a property of primitive type to <code>null</code>,
+     *         throw <code>IllegalArgumentException</code>.</li>
+     *     <li><code>remove</code> - Throw
+     *         <code>IllegalArgumentException</code>.</li>
+     *     </ul></li>
+     * </ul>
+     * 
+     */
+    public abstract Map<String, Object> getAttributes();
+    
+    /**
+     * <p class="changed_added_2_2">This is a convenience method that 
+     * simply calls {@link #getPassThroughAttributes(boolean)}, passing {@code true}
+     * as the argument.  This method must never return {@code null}.</p>
+     * 
+     * @since 2.2
+     */
+
+    public final Map<String, Object> getPassThroughAttributes(){
+        
+        return getPassThroughAttributes(true);
+    }
+    
+    
+    /**
+     * <p class="changed_added_2_2">This method has the same specification as 
+     * {@link #getPassThroughAttributes() } except that it is allowed to return 
+     * {@code null} if and only if the argument {@code create} is {@code false}
+     * and no pass through attribute data structure exists for this instance.  
+     * The returned {@code Map} implementation must support all of the standard and optional 
+     * {@code Map} methods, plus support the following additional requirements.
+     * The map must be stored in using {@link #getStateHelper}.</p>
+     * 
+     * <div class="changed_added_2_2">
+     * 
+     * <p>The {@code Map} implementation must implement {@code java.io.Serializable}.</p>
+     * 
+     * <p>Any attempt to add a {@code null} key or value must throw a {@code NullPointerException}.</p>
+     * 
+     * <p>Any attempt to add a key that is not a {@code String} must
+     * throw an {@code IllegalArgumentException}.</p>
+     * 
+     * <p>For backward compatibility with components that extend directly from
+     * this class, a default implementation is provided that returns the empty
+     * map.</p>
+     * 
+     * </div>
+     *
+     * @param create if <code>true</code>, a new {@code Map}
+     * instance will be created if it does not exist already.  If
+     * <code>false</code>, and there is no existing
+     * <code>Map</code> instance, one will not be created and
+     * <code>null</code> will be returned.
+     * @return A {@code Map} instance, or {@code null}.
+     * 
+     * @since 2.2
+     */
+    
+    public Map<String, Object> getPassThroughAttributes(boolean create) {
+        return Collections.emptyMap();
+    }
+    
+    // ---------------------------------------------------------------- Bindings
+
+
+    /**
+     *
+     * <p>Call through to {@link #getValueExpression} and examine the
+     * result.  If the result is an instance of the wrapper class
+     * mandated in {@link #setValueBinding}, extract the
+     * <code>ValueBinding</code> instance and return it.  Otherwise,
+     * wrap the result in an implementation of
+     * <code>ValueBinding</code>, and return it.</p>
+     *
+     * @param name Name of the attribute or property for which to retrieve a
+     *  {@link ValueBinding}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated This has been replaced by {@link #getValueExpression}.
+     */
+    public abstract ValueBinding getValueBinding(String name);
+
+
+    /**
+     * <p>Wrap the argument <code>binding</code> in an implementation of
+     * {@link ValueExpression} and call through to {@link
+     * #setValueExpression}.</p>
+     *
+     * @param name Name of the attribute or property for which to set a
+     *  {@link ValueBinding}
+     * @param binding The {@link ValueBinding} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueBinding}
+     *
+     * @throws IllegalArgumentException if <code>name</code> is one of
+     *  <code>id</code> or <code>parent</code>
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated This has been replaced by {@link #setValueExpression}.
+     */
+    public abstract void setValueBinding(String name, ValueBinding binding);
+
+    // The set of ValueExpressions for this component, keyed by property
+    // name This collection is lazily instantiated
+    // The set of ValueExpressions for this component, keyed by property
+    // name This collection is lazily instantiated
+    @Deprecated
+    protected Map<String,ValueExpression> bindings = null;
+
+    /**
+     * <p>Return the {@link ValueExpression} used to calculate the value for the
+     * specified attribute or property name, if any.</p>
+     *
+     * <p>This method must be overridden and implemented for components that
+     * comply with JSF 1.2 and later.</p>
+     *
+     * @since 1.2
+     *
+     * @param name Name of the attribute or property for which to retrieve a
+     *  {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     */
+    public ValueExpression getValueExpression(String name) {
+
+        if (name == null) {
+            throw new NullPointerException();
+        }
+
+        Map<String,ValueExpression> map = (Map<String,ValueExpression>)
+              getStateHelper().get(UIComponentBase.PropertyKeys.bindings);
+        return ((map != null) ? map.get(name) : null);
+
+    }
+
+    /**
+     * <p>Set the {@link ValueExpression} used to calculate the value
+     * for the specified attribute or property name, if any.</p>
+     *
+     * <p>The implementation must call {@link
+     * ValueExpression#isLiteralText} on the argument
+     * <code>expression</code>.  If <code>isLiteralText()</code> returns
+     * <code>true</code>, invoke {@link ValueExpression#getValue} on the
+     * argument expression and pass the result as the <code>value</code>
+     * parameter in a call to <code>this.{@link
+     * #getAttributes()}.put(name, value)</code> where <code>name</code>
+     * is the argument <code>name</code>.  If an exception is thrown as
+     * a result of calling {@link ValueExpression#getValue}, wrap it in
+     * a {@link javax.faces.FacesException} and re-throw it.  If
+     * <code>isLiteralText()</code> returns <code>false</code>, simply
+     * store the un-evaluated <code>expression</code> argument in the
+     * collection of <code>ValueExpression</code>s under the key given
+     * by the argument <code>name</code>.</p>
+     *
+     * <p>This method must be overridden and implemented for components that
+     * comply with JSF 1.2 and later.</p>
+     *
+     * @since 1.2
+     *
+     * @param name Name of the attribute or property for which to set a
+     *  {@link ValueExpression}
+     * @param binding The {@link ValueExpression} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueExpression}
+     *
+     * @throws IllegalArgumentException if <code>name</code> is one of
+     *  <code>id</code> or <code>parent</code>
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     */
+    public void setValueExpression(String name, ValueExpression binding) {
+
+        if (name == null) {
+            throw new NullPointerException();
+        } else if ("id".equals(name) || "parent".equals(name)) {
+            throw new IllegalArgumentException();
+        }
+
+        if (binding != null) {
+            if (!binding.isLiteralText()) {
+                //if (bindings == null) {
+                //    //noinspection CollectionWithoutInitialCapacity
+                //    bindings = new HashMap<String, ValueExpression>();
+                //}
+                // add this binding name to the 'attributesThatAreSet' list
+                //List<String> sProperties = (List<String>)
+                //      getStateHelper().get(PropertyKeysPrivate.attributesThatAreSet);
+
+                 List<String> sProperties =
+                      (List<String>) getStateHelper().get(PropertyKeysPrivate.attributesThatAreSet);
+                if (sProperties == null) {
+                    getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, name);
+                } else if (!sProperties.contains(name)) {
+                    getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, name);
+                }
+                getStateHelper().put(UIComponentBase.PropertyKeys.bindings,
+                                     name,
+                                     binding);
+                //bindings.put(name, binding);
+            } else {
+                ELContext context =
+                    FacesContext.getCurrentInstance().getELContext();
+                try {
+                    getAttributes().put(name, binding.getValue(context));
+                } catch (ELException ele) {
+                    throw new FacesException(ele);
+                }
+            }
+        } else {
+            //if (bindings != null) {
+                // remove this binding name from the 'attributesThatAreSet' list
+//                List<String> sProperties = getAttributesThatAreSet(false);
+//                if (sProperties != null) {
+//                    sProperties.remove(name);
+//                }
+                getStateHelper().remove(PropertyKeysPrivate.attributesThatAreSet,
+                                        name);
+                getStateHelper().remove(UIComponentBase.PropertyKeys.bindings, name);
+                //bindings.remove(name);
+               // if (bindings.isEmpty()) {
+               //     bindings = null;
+               // }
+            }
+       // }
+
+    }
+
+    // -------------------------------------------------------------- Properties
+
+    boolean initialState;
+
+    /**
+     * <p class="changed_added_2_0">An implementation of {@link
+     * PartialStateHolder#markInitialState}, this method is called by
+     * the runtime to indicate that the instance should start tracking
+     * changes to its state.</p>
+     * @since 2.0
+     */
+    public void markInitialState() {
+        initialState = true;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">An implementation of {@link
+     * PartialStateHolder#initialStateMarked}, this method is called by
+     * the runtime to test if the {@link
+     * PartialStateHolder#markInitialState} method was called.</p>
+     * @since 2.0
+     */
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">An implementation of {@link
+     * PartialStateHolder#clearInitialState}, this method is called by
+     * the runtime to tell the instance to stop tracking state
+     * changes.</p>
+     * @since 2.0
+     */
+    public void clearInitialState() {
+        initialState = false;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the {@link StateHelper}
+     * instance used to help this component implement {@link
+     * PartialStateHolder}.</p>
+     * @since 2.0
+     */
+    protected StateHelper getStateHelper() {
+        return getStateHelper(true);
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Like {@link #getStateHelper()}, but
+     * only create a state helper instance if the argument
+     * <code>creat</code> is <code>true</code>.</p>
+     * @param create if <code>true</code>, a new {@link StateHelper}
+     * instance will be created if it does not exist already.  If
+     * <code>false</code>, and there is no existing
+     * <code>StateHelper</code> instance, one will not be created and
+     * <code>null</code> will be returned.
+     * @since 2.0
+     */
+    protected StateHelper getStateHelper(boolean create) {
+
+        if (create && stateHelper == null) {
+            stateHelper = new ComponentStateHelper(this);
+        }
+        return stateHelper;
+
+    }
+
+    /**
+     * <p class="changed_added_2_1">Return the {@link
+     * TransientStateHelper} instance for this <code>UIComponent</code>
+     * instance.  The default implementation simply calls through to
+     * {@link #getTransientStateHelper(boolean)} passing <code>true</code>
+     * as the argument.</p>
+     *
+     * @since 2.1
+     */
+    
+    public final TransientStateHelper getTransientStateHelper()
+    {
+        return getTransientStateHelper(true);
+    }
+    
+    /**
+     * <p class="changed_added_2_1">Return the {@link
+     * TransientStateHelper} instance for this <code>UIComponent</code>
+     * instance.</p>
+     *
+     * @param create if <code>true</code> create, if necessary, any
+     * internal data structures.  If <code>false</code>, do not create
+     * any instances.  In this case, it is possible for this method to
+     * return <code>null</code>.
+     *
+     * @since 2.1
+     */
+    
+    public TransientStateHelper getTransientStateHelper(boolean create) {
+        
+        if (create && stateHelper == null) {
+            stateHelper = new ComponentStateHelper(this);
+        }
+        return stateHelper;
+        
+    }
+
+    /**
+     * <p class="changed_added_2_1">For components that need to support
+     * the concept of transient state, this method will restore any
+     * state saved on a prior call to {@link #saveTransientState}.</p>
+     *
+     * @since 2.1
+     */
+    
+    public void restoreTransientState(FacesContext context, Object state)
+    {
+        boolean forceCreate = (state != null);
+        TransientStateHelper helper = getTransientStateHelper(forceCreate);
+
+        if (helper != null) {
+            helper.restoreTransientState(context, state);
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_1">For components that need to support
+     * the concept of transient state, this method will save any state
+     * that is known to be transient in nature.</p>
+     *
+     * @since 2.1
+     */
+    
+    public Object saveTransientState(FacesContext context)
+    {
+        TransientStateHelper helper = getTransientStateHelper(false);
+
+        return (helper == null) ? null : helper.saveTransientState(context);
+    }
+
+    private boolean isInView;
+
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if this
+     * component is within the view hierarchy otherwise
+     * <code>false</code></code>
+     *
+     * @since 2.0
+     */
+    public boolean isInView() {
+        return isInView;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Updates the status as to whether or
+     * not this component is currently within the view hierarchy.
+     * <strong>This method must never be called by developers; a {@link
+     * UIComponent}'s internal implementation will call it as components
+     * are added to or removed from a parent's child <code>List</code>
+     * or facet <code>Map</code></strong>.</p>
+     *
+     * @param isInView flag indicating whether or not this component is within
+     *  the view hierachy
+     *
+     * @since 2.0
+     */
+    public void setInView(boolean isInView) {
+        this.isInView = isInView;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Enable EL to access the <code>clientId</code>
+     * of a component.  This is particularly useful in combination with the 
+     * <code>component</code> and <code>cc</code> implicit
+     * objects.  A default implementation is provided that simply calls
+     * {@link FacesContext#getCurrentInstance} and then calls through to
+     * {@link #getClientId(FacesContext)}.</p>
+     * 
+     * @since 2.0
+     */
+    
+    public String getClientId() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        return getClientId(context);
+    }
+
+
+    /**
+     * <p>Return a client-side identifier for this component, generating
+     * one if necessary.  The associated {@link Renderer}, if any,
+     * will be asked to convert the clientId to a form suitable for
+     * transmission to the client.</p>
+     *
+     * <p>The return from this method must be the same value throughout
+     * the lifetime of the instance, unless the <code>id</code> property
+     * of the component is changed, or the component is placed in
+     * a {@link NamingContainer} whose client ID changes (for example,
+     * {@link UIData}).  However, even in these cases, consecutive
+     * calls to this method must always return the same value.  The
+     * implementation must follow these steps in determining the
+     * clientId:</p>
+     *
+     * <p>Find the closest ancestor to <b>this</b> component in the view
+     * hierarchy that implements <code>NamingContainer</code>.  Call
+     * <code>getContainerClientId()</code> on it and save the result as
+     * the <code>parentId</code> local variable.  Call {@link #getId} on
+     * <b>this</b> component and save the result as the
+     * <code>myId</code> local variable.  If <code>myId</code> is
+     * <code>null</code>, call
+     * <code>context.getViewRoot().createUniqueId()</code> and assign
+     * the result to myId.  If <code>parentId</code> is
+     * non-<code>null</code>, let <code>myId</code> equal <code>parentId
+     * + {@link UINamingContainer#getSeparatorChar} + myId</code>.  Call
+     * {@link Renderer#convertClientId}, passing <code>myId</code>, and
+     * return the result.</p>
+     *
+     * @param context The {@link FacesContext} for the current request
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract String getClientId(FacesContext context);
+
+    /**
+     * <p>Allow components that implement {@link NamingContainer} to
+     * selectively disable prepending their clientId to their
+     * descendent's clientIds by breaking the prepending logic into a
+     * seperately callable method.  See {@link #getClientId} for usage.</p>
+     *
+     * <p>By default, this method will call through to {@link
+     * #getClientId} and return the result.
+     *
+     * @since 1.2
+     *
+     *  @throws NullPointerException if <code>context</code> is
+     *  <code>null</code>
+     */
+    public String getContainerClientId(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        return this.getClientId(context);
+    }
+
+    /**
+     * <p>Return the identifier of the component family to which this
+     * component belongs.  This identifier, in conjunction with the value
+     * of the <code>rendererType</code> property, may be used to select
+     * the appropriate {@link Renderer} for this component instance.</p>
+     */
+    public abstract String getFamily();
+
+
+    /**
+     * <p>Return the component identifier of this {@link UIComponent}.</p>
+     */
+    public abstract String getId();
+
+
+    /**
+     * <p>Set the component identifier of this {@link UIComponent} (if any).
+     * Component identifiers must obey the following syntax restrictions:</p>
+     * <ul>
+     * <li>Must not be a zero-length String.</li>
+     * <li>First character must be a letter or an underscore ('_').</li>
+     * <li>Subsequent characters must be a letter, a digit,
+     *     an underscore ('_'), or a dash ('-').</li>
+     * <li>
+     * </ul>
+     *
+     * <p>Component identifiers must also obey the following semantic
+     * restrictions (note that this restriction is <strong>NOT</strong>
+     * enforced by the <code>setId()</code> implementation):</p>
+     * <ul>
+     * <li>The specified identifier must be unique among all the components
+     *     (including facets) that are descendents of the nearest ancestor
+     *     {@link UIComponent} that is a {@link NamingContainer}, or within
+     *     the scope of the entire component tree if there is no such
+     *     ancestor that is a {@link NamingContainer}.</li>
+     * </ul>
+     *
+     * @param id The new component identifier, or <code>null</code> to indicate
+     *  that this {@link UIComponent} does not have a component identifier
+     *
+     * @throws IllegalArgumentException if <code>id</code> is not
+     *  syntactically valid
+     */
+    public abstract void setId(String id);
+
+
+    /**
+     * <p>Return the parent {@link UIComponent} of this
+     * <code>UIComponent</code>, if any.  A component must allow child
+     * components to be added to and removed from the list of children
+     * of this component, even though the child component returns null
+     * from <code>getParent( )</code>.</p>
+     */
+    public abstract UIComponent getParent();
+
+
+    /**
+     * <p class="changed_modified_2_0"><span
+     * class="changed_modified_2_0_rev_a">Set</span> the parent
+     * <code>UIComponent</code> of this <code>UIComponent</code>.  <span
+     * class="changed_added_2_0"><span
+     * class="changed_modified_2_0_rev_a">If
+     * <code>parent.isInView()</code> returns <code>true</code>, calling
+     * this method will first cause a {@link
+     * javax.faces.event.PreRemoveFromViewEvent} to be published, for
+     * this node, and then the children of this node.  Then, once the
+     * re-parenting has occurred, a {@link
+     * javax.faces.event.PostAddToViewEvent} will be published as well,
+     * first for this node, and then for the node's children, <span
+     * class="changed_modified_2_0_rev_a">but only if any of the
+     * following conditions are true.</span></span></p>
+
+     * <div class="changed_modified_2_0_rev_a">
+
+     *     <ul>
+
+     *       <li><p>{@link
+     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
+     *       {@link javax.faces.event.PhaseId#RESTORE_VIEW} and partial
+     *       state saving is enabled.</p></li>
+
+     *       <li><p>{@link javax.faces.context.FacesContext#isPostback}
+     *       returns <code>false</code> and {@link
+     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
+     *       something other than {@link
+     *       javax.faces.event.PhaseId#RESTORE_VIEW}</p></li>
+
+     *    </ul>
+
+     * </div>
+
+
+     * <p class="changed_modified_2_0"> <strong>This method must never
+     * be called by developers; a {@link UIComponent}'s internal
+     * implementation will call it as components are added to or removed
+     * from a parent's child <code>List</code> or facet
+     * <code>Map</code></strong></span>.</p>
+     *
+     * @param parent The new parent, or <code>null</code> for the root node
+     *  of a component tree
+     */
+    public abstract void setParent(UIComponent parent);
+
+
+    /**
+     * <p>Return <code>true</code> if this component (and its children)
+     * should be rendered during the <em>Render Response</em> phase
+     * of the request processing lifecycle.</p>
+     */
+    public abstract boolean isRendered();
+
+
+    /**
+     * <p>Set the <code>rendered</code> property of this
+     * {@link UIComponent}.</p>
+     *
+     * @param rendered If <code>true</code> render this component;
+     *  otherwise, do not render this component
+     */
+    public abstract void setRendered(boolean rendered);
+
+
+    /**
+     * <p>Return the {@link Renderer} type for this {@link UIComponent}
+     * (if any).</p>
+     */
+    public abstract String getRendererType();
+
+
+    /**
+     * <p>Set the {@link Renderer} type for this {@link UIComponent},
+     * or <code>null</code> for components that render themselves.</p>
+     *
+     * @param rendererType Logical identifier of the type of
+     *  {@link Renderer} to use, or <code>null</code> for components
+     *  that render themselves
+     */
+    public abstract void setRendererType(String rendererType);
+
+
+    /**
+     * <p>Return a flag indicating whether this component is responsible
+     * for rendering its child components.  The default implementation
+     * in {@link UIComponentBase#getRendersChildren} tries to find the
+     * renderer for this component.  If it does, it calls {@link
+     * Renderer#getRendersChildren} and returns the result.  If it
+     * doesn't, it returns false.  As of version 1.2 of the JavaServer
+     * Faces Specification, component authors are encouraged to return
+     * <code>true</code> from this method and rely on {@link
+     * UIComponentBase#encodeChildren}.</p>
+     */
+    public abstract boolean getRendersChildren();
+    
+
+    
+    private Map<String, String> resourceBundleMap = null;
+    
+    /**
+     * <p class="changed_added_2_0">Return a
+     * <code>Map<String,String></code> of the
+     * <code>ResourceBundle</code> for this component.  A component may
+     * have a <code>ResourceBundle</code> associated with it.  This
+     * bundle may contain localized properties relating to instances of
+     * this component.  The default implementation first looks for a
+     * <code>ResourceBundle</code> with a base name equal to the fully
+     * qualified class name of the current <code>UIComponent this</code>
+     * and <code>Locale</code> equal to the <code>Locale</code> of the
+     * current <code>UIViewRoot</code>.  If no such bundle is found, and
+     * the component is a composite component, let <em>resourceName</em>
+     * be the <em>resourceName</em> of the {@link Resource} for this
+     * composite component, replacing the file extension with
+     * ".properties".  Let <em>libraryName</em> be the
+     * <em>libraryName</em> of the the {@link Resource} for this
+     * composite component.  Call {@link
+     * javax.faces.application.ResourceHandler#createResource(java.lang.String,java.lang.String)},
+     * passing the derived <em>resourceName</em> and
+     * <em>libraryName</em>.  Note that this will automatically allow
+     * for the localization of the <code>ResourceBundle</code> due to
+     * the localization facility implemented in
+     * <code>createResource</code>, which is specified in section
+     * JSF.2.6.1.3 of the spec prose document.  If the resultant {@link
+     * Resource} exists and can be found, the <code>InputStream</code>
+     * for the resource is used to create a <code>ResourceBundle</code>.
+     * If either of the two previous steps for obtaining the
+     * <code>ResourceBundle</code> for this component is successful, the
+     * <code>ResourceBundle</code> is wrapped in a
+     * <code>Map<String,String></code> and returned.  Otherwise
+     * <code>Collections.EMPTY_MAP</code> is returned.</p>
+     *
+     * @since 2.0
+     */
+    public Map<String,String> getResourceBundleMap() {
+        
+        if (null == resourceBundleMap) {
+            // See if there is a ResourceBundle under the FQCN for this class
+            String className = this.getClass().getName();
+            Locale currentLocale = null;
+            FacesContext context = null;
+            UIViewRoot root = null;
+            ResourceBundle resourceBundle = null;
+            
+            // Step 1: look for a ResourceBundle under the FQCN of this instance
+            if (null != (context = FacesContext.getCurrentInstance())) {
+                if (null != (root = context.getViewRoot())) {
+                    currentLocale = root.getLocale();
+                }
+            }
+            if (null == currentLocale) {
+                currentLocale = Locale.getDefault();
+            }
+            try {
+                resourceBundle = 
+                        ResourceBundle.getBundle(className, currentLocale);
+            } catch (MissingResourceException e) {
+                // It is not an error if there is no ResourceBundle
+            }
+            
+            // Step 2: if this is a composite component, look for a 
+            // ResourceBundle as a Resource
+            if (null == resourceBundle) {
+                if (this.getAttributes().containsKey(Resource.COMPONENT_RESOURCE_KEY)) {
+                    Resource ccResource = (Resource)
+                            this.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
+                    if (null != ccResource) {
+                        if (null != (ccResource = 
+                                findComponentResourceBundleLocaleMatch(context, 
+                                ccResource.getResourceName(), 
+                                ccResource.getLibraryName()))) {
+                            InputStream propertiesInputStream = null;
+                            try {
+                                propertiesInputStream = ccResource.getInputStream();
+                                resourceBundle = new PropertyResourceBundle(propertiesInputStream);
+                            } catch (IOException ex) {
+                                Logger.getLogger(UIComponent.class.getName()).log(Level.SEVERE, null, ex);
+                            } finally{
+                            	if(null != propertiesInputStream){
+                                    try{
+                                        propertiesInputStream.close();
+                                    } catch(IOException ioe){
+                                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                                            LOGGER.log(Level.SEVERE, null, ioe);
+                                        }
+                                    }
+                            	}
+                            }
+                        }
+                    }
+                }
+            }
+            
+            // Step 3: if the previous steps yielded a ResourceBundle, wrap it
+            // with a Map
+            
+            if (null != resourceBundle) {
+                final ResourceBundle bundle = resourceBundle;
+                resourceBundleMap = 
+                        new Map() {
+                            // this is an immutable Map
+
+                            public String toString() {
+                                StringBuffer sb = new StringBuffer();
+                                Iterator<Map.Entry<String, Object>> entries =
+                                        this.entrySet().iterator();
+                                Map.Entry<String, Object> cur;
+                                while (entries.hasNext()) {
+                                    cur = entries.next();
+                                    sb.append(cur.getKey()).append(": ").append(cur.getValue()).append('\n');
+                                }
+
+                                return sb.toString();
+                            }
+
+                            // Do not need to implement for immutable Map
+                            public void clear() {
+                                throw new UnsupportedOperationException();
+                            }
+
+
+                            public boolean containsKey(Object key) {
+                                boolean result = false;
+                                if (null != key) {
+                                    result = (null != bundle.getObject(key.toString()));
+                                }
+                                return result;
+                            }
+
+
+                            public boolean containsValue(Object value) {
+                                Enumeration<String> keys = bundle.getKeys();
+                                boolean result = false;
+                                while (keys.hasMoreElements()) {
+                                    Object curObj = bundle.getObject(keys.nextElement());
+                                    if ((curObj == value) ||
+                                            ((null != curObj) && curObj.equals(value))) {
+                                        result = true;
+                                        break;
+                                    }
+                                }
+                                return result;
+                            }
+
+
+                            public Set<Map.Entry<String, Object>> entrySet() {
+                                HashMap<String, Object> mappings = new HashMap<String, Object>();
+                                Enumeration<String> keys = bundle.getKeys();
+                                while (keys.hasMoreElements()) {
+                                    String key = keys.nextElement();
+                                    Object value = bundle.getObject(key);
+                                    mappings.put(key, value);
+                                }
+                                return mappings.entrySet();
+                            }
+
+
+                            @Override
+                            public boolean equals(Object obj) {
+                                return !((obj == null) || !(obj instanceof Map))
+                                         && entrySet().equals(((Map) obj).entrySet());
+
+                            }
+
+
+                            public Object get(Object key) {
+                                if (null == key) {
+                                    return null;
+                                }
+                                try {
+                                    return bundle.getObject(key.toString());
+                                } catch (MissingResourceException e) {
+                                    return "???" + key + "???";
+                                }
+                            }
+
+
+                            public int hashCode() {
+                                return bundle.hashCode();
+                            }
+
+
+                            public boolean isEmpty() {
+                                Enumeration<String> keys = bundle.getKeys();
+                                return !keys.hasMoreElements();
+                            }
+
+
+                            public Set keySet() {
+                                Set<String> keySet = new HashSet<String>();
+                                Enumeration<String> keys = bundle.getKeys();
+                                while (keys.hasMoreElements()) {
+                                    keySet.add(keys.nextElement());
+                                }
+                                return keySet;
+                            }
+
+
+                            // Do not need to implement for immutable Map
+                            public Object put(Object k, Object v) {
+                                throw new UnsupportedOperationException();
+                            }
+
+
+                            // Do not need to implement for immutable Map
+                            public void putAll(Map t) {
+                                throw new UnsupportedOperationException();
+                            }
+
+
+                            // Do not need to implement for immutable Map
+                            public Object remove(Object k) {
+                                throw new UnsupportedOperationException();
+                            }
+
+
+                            public int size() {
+                                int result = 0;
+                                Enumeration<String> keys = bundle.getKeys();
+                                while (keys.hasMoreElements()) {
+                                    keys.nextElement();
+                                    result++;
+                                }
+                                return result;
+                            }
+
+
+                            public java.util.Collection values() {
+                                ArrayList<Object> result = new ArrayList<Object>();
+                                Enumeration<String> keys = bundle.getKeys();
+                                while (keys.hasMoreElements()) {
+                                    result.add(
+                                            bundle.getObject(keys.nextElement()));
+                                }
+                                return result;
+                            }
+                        };
+
+            }
+
+            if (null == resourceBundleMap) {
+                resourceBundleMap = Collections.EMPTY_MAP;
+            }
+
+        }
+        
+        return resourceBundleMap;
+    }
+
+    // PENDING(rlubke): I'm sure there's a more efficient
+    // way to handle this.
+    private Resource findComponentResourceBundleLocaleMatch(FacesContext context, 
+            String resourceName, String libraryName) {
+        Resource result = null;
+        ResourceBundle resourceBundle = null;
+        int i;
+        if (-1 != (i = resourceName.lastIndexOf("."))) {
+            resourceName = resourceName.substring(0, i) +
+                    ".properties";
+            if (null != context) {
+                result = context.getApplication().getResourceHandler().
+                        createResource(resourceName, libraryName);
+                InputStream propertiesInputStream = null;
+                try {
+                    propertiesInputStream = result.getInputStream();
+                    resourceBundle = new PropertyResourceBundle(propertiesInputStream);
+                } catch (IOException ex) {
+                    Logger.getLogger(UIComponent.class.getName()).log(Level.SEVERE, null, ex);
+                } finally{
+                    if(null != propertiesInputStream){
+                        try{
+                            propertiesInputStream.close();
+                        } catch(IOException ioe){
+                            if (LOGGER.isLoggable(Level.SEVERE)) {
+                                LOGGER.log(Level.SEVERE, null, ioe);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        result = (null != resourceBundle) ? result : null;
+        
+        return result;
+    }
+    
+    
+    // This is necessary for JSF components that extend from UIComponent
+    // directly rather than extending from UIComponentBase.  Such components
+    // may need to have implementations provided for methods that originated
+    // from a spec version more recent than the version with which the component
+    // complies.  Currently this private property is only consulted in the
+    // getValueExpression() method.
+//    private boolean isUIComponentBase;
+//    private boolean isUIComponentBaseIsSet = false;
+//
+//    private boolean isUIComponentBase() {
+//        if (!isUIComponentBaseIsSet) {
+//            isUIComponentBase = (this instanceof UIComponentBase);
+//        }
+//
+//        return isUIComponentBase;
+//    }
+
+
+    // ------------------------------------------------- Tree Management Methods
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> a mutable
+     * <code>List</code> representing the child {@link UIComponent}s
+     * associated with this component.  The returned implementation must
+     * support all of the standard and optional <code>List</code>
+     * methods, plus support the following additional requirements:</p>
+     * <ul> <li>The <code>List</code> implementation must implement the
+     * <code>java.io.Serializable</code> interface.</li> <li>Any attempt
+     * to add a <code>null</code> must throw a NullPointerException</li>
+     * <li>Any attempt to add an object that does not implement {@link
+     * UIComponent} must throw a ClassCastException.</li> <li>Whenever a
+     * new child component is added, the <code>parent</code> property of
+     * the child must be set to this component instance.  If the
+     * <code>parent</code> property of the child was already non-null,
+     * the child must first be removed from its previous parent (where
+     * it may have been either a child or a facet).</li> <li>Whenever an
+     * existing child component is removed, the <code>parent</code>
+     * property of the child must be set to <code>null</code>.</li>
+
+     * <li class="changed_modified_2_1"><p>After the child component has
+     *     been added to the view, {@link
+     *     javax.faces.application.Application#publishEvent} must be
+     *     called, passing {@link
+     *     javax.faces.event.PostAddToViewEvent}<code>.class</code> as
+     *     the first argument and the newly added component as the
+     *     second argument if any the following cases are true.</p>
+     *
+     *     <ul>
+
+     *       <li><p>{@link
+     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
+     *       {@link javax.faces.event.PhaseId#RESTORE_VIEW} and partial
+     *       state saving is enabled.</p></li>
+
+     *       <li><p>{@link javax.faces.context.FacesContext#isPostback}
+     *       returns <code>false</code> and {@link
+     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
+     *       something other than {@link
+     *       javax.faces.event.PhaseId#RESTORE_VIEW}</p></li>
+
+     *    </ul>
+
+     * </li>
+
+     * </ul>
+     */
+    public abstract List<UIComponent> getChildren();
+
+
+    /**
+     * <p>Return the number of child {@link UIComponent}s that are
+     * associated with this {@link UIComponent}.  If there are no
+     * children, this method must return 0.  The method must not cause
+     * the creation of a child component list.</p>
+     */
+    public abstract int getChildCount();
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Search</span> for and
+     * return the {@link UIComponent} with an <code>id</code> that
+     * matches the specified search expression (if any), according to
+     * the algorithm described below.</p>
+
+     * <p class="changed_added_2_2">WARNING: The found
+     * <code>UIComponent</code> instance, if any, is returned
+     * <strong>without</strong> regard for its tree traversal context.
+     * Retrieving an EL-bound attribute from the component is not safe.
+     * EL expressions can contain implicit objects, such as
+     * <code>#{component}</code>, which assume they are being evaluated
+     * within the scope of a tree traversal context.  Evaluating
+     * expressions with these kinds of implicit objects outside of a
+     * tree traversal context produces undefined results.  See {@link
+     * #invokeOnComponent} for a method that <strong>does</strong>
+     * correctly account for the tree traversal context when operating
+     * on the found <code>UIComponent</code> instance.  {@link #invokeOnComponent}
+     * is also useful to find components given a simple <code>clientId</code>.
+     *
+     * <p>Component identifiers are required to be unique within the scope of
+     * the closest ancestor {@link NamingContainer} that encloses this
+     * component (which might be this component itself).  If there are no
+     * {@link NamingContainer} components in the ancestry of this component,
+     * the root component in the tree is treated as if it were a
+     * {@link NamingContainer}, whether or not its class actually implements
+     * the {@link NamingContainer} interface.</p>
+     *
+     * <p>A <em>search expression</em> consists of either an identifier
+     * (which is matched exactly against the <code>id</code> property of
+     * a {@link UIComponent}, or a series of such identifiers linked by
+     * the {@link UINamingContainer#getSeparatorChar} character value.
+     * The search algorithm should operates as follows, though alternate
+     * alogrithms may be used as long as the end result is the same:</p>
+
+     * <ul>
+     * <li>Identify the {@link UIComponent} that will be the base for searching,
+     *     by stopping as soon as one of the following conditions is met:
+     *     <ul>
+     *     <li>If the search expression begins with the the separator character
+     *         (called an "absolute" search expression),
+     *         the base will be the root {@link UIComponent} of the component
+     *         tree.  The leading separator character will be stripped off,
+     *         and the remainder of the search expression will be treated as
+     *         a "relative" search expression as described below.</li>
+     *     <li>Otherwise, if this {@link UIComponent} is a
+     *         {@link NamingContainer} it will serve as the basis.</li>
+     *     <li>Otherwise, search up the parents of this component.  If
+     *         a {@link NamingContainer} is encountered, it will be the base.
+     *         </li>
+     *     <li>Otherwise (if no {@link NamingContainer} is encountered)
+     *         the root {@link UIComponent} will be the base.</li>
+     *     </ul></li>
+     * <li>The search expression (possibly modified in the previous step) is now
+     *     a "relative" search expression that will be used to locate the
+     *     component (if any) that has an <code>id</code> that matches, within
+     *     the scope of the base component.  The match is performed as follows:
+     *     <ul>
+     *     <li>If the search expression is a simple identifier, this value is
+     *         compared to the <code>id</code> property, and then recursively
+     *         through the facets and children of the base {@link UIComponent}
+     *         (except that if a descendant {@link NamingContainer} is found,
+     *         its own facets and children are not searched).</li>
+     *     <li>If the search expression includes more than one identifier
+     *         separated by the separator character, the first identifier is
+     *         used to locate a {@link NamingContainer} by the rules in the
+     *         previous bullet point.  Then, the <code>findComponent()</code>
+     *         method of this {@link NamingContainer} will be called, passing
+     *         the remainder of the search expression.</li>
+     *     </ul></li>
+     * </ul>
+     *
+     * @param expr Search expression identifying the {@link UIComponent}
+     *  to be returned
+     *
+     * @return the found {@link UIComponent}, or <code>null</code>
+     *  if the component was not found.
+     *
+     * @throws IllegalArgumentException if an intermediate identifier
+     *  in a search expression identifies a {@link UIComponent} that is
+     *  not a {@link NamingContainer}
+     * @throws NullPointerException if <code>expr</code>
+     *  is <code>null</code>
+     */
+    public abstract UIComponent findComponent(String expr);
+
+    /**
+     * <p><span class="changed_modified_2_1">Starting</span> at this
+     * component in the View hierarchy, search for a component with a
+     * <code>clientId</code> equal to the argument <code>clientId</code>
+     * and, if found, call the {@link
+     * ContextCallback#invokeContextCallback} method on the argument
+     * <code>callback</code>, passing the current {@link FacesContext}
+     * and the found component as arguments. This method is similar to
+     * {@link #findComponent} but it does not support the leading {@link
+     * UINamingContainer#getSeparatorChar} syntax for searching from the
+     * root of the View.</p>
+     *
+     * <p>The default implementation will first check if
+     * <code>this.getClientId()</code> is equal to the argument
+     * <code>clientId</code>.  If so, <span
+     * class="changed_added_2_1">first call {@link #pushComponentToEL},
+     * then</span> call the {@link
+     * ContextCallback#invokeContextCallback} method on the argument
+     * callback, passing through the <code>FacesContext</code> argument
+     * and passing this as the component argument.  <span
+     * class="changed_added_2_1">Then call {@link #popComponentFromEL}.
+     * If an <code>Exception</code> is thrown by the callback, wrap it
+     * in a {@link FacesException} and re-throw it.  Otherwise, return
+     * <code>true</code>.</p>
+     *
+     * <p>Otherwise, for each component returned by {@link
+     * #getFacetsAndChildren}, call <code>invokeOnComponent()</code>
+     * passing the arguments to this method, in order.  The first time
+     * <code>invokeOnComponent()</code> returns true, abort traversing
+     * the rest of the <code>Iterator</code> and return
+     * <code>true</code>.</p>
+     *
+     * <p>When calling {@link ContextCallback#invokeContextCallback}
+     * the implementation of this method must guarantee that the state
+     * of the component passed to the callback correctly reflects the
+     * component's position in the View hierarchy with respect to any
+     * state found in the argument <code>clientId</code>.  For example,
+     * an iterating component such as {@link UIData} will need to set
+     * its row index to correctly reflect the argument
+     * <code>clientId</code> before finding the appropriate child
+     * component backed by the correct row.  When the callback returns,
+     * either normally or by throwing an <code>Exception</code> the
+     * implementation of this method must restore the state of the view
+     * to the way it was before invoking the callback.</p>
+     *
+     * <p>If none of the elements from {@link
+     * #getFacetsAndChildren} returned <code>true</code> from
+     * <code>invokeOnComponent()</code>, return <code>false</code>.</p>
+     *
+     * <p>Simple usage example to find a component by
+     * <code>clientId</code>.</p>
+
+* <pre><code>
+private UIComponent found = null;
+
+private void doFind(FacesContext context, String clientId) {
+  context.getViewRoot().invokeOnComponent(context, clientId,
+      new ContextCallback() {
+         public void invokeContextCallback(FacesContext context,
+                                       UIComponent component) {
+           found = component;
+         }
+      });
+}
+* </code></pre>
+
+     *
+     *
+     * @since 1.2
+     *
+     * @param context the {@link FacesContext} for the current request
+     *
+     * @param clientId the client identifier of the component to be passed
+     * to the argument callback.
+     *
+     * @param callback an implementation of the Callback interface.
+     *
+     * @throws NullPointerException if any of the arguments are null
+     *
+     * @throws FacesException if the argument Callback throws an
+     * Exception, it is wrapped in a <code>FacesException</code> and re-thrown.
+     *
+     * @return <code>true</code> if the a component with the given
+     * <code>clientId</code> is found, the callback method was
+     * successfully invoked passing that component as an argument, and
+     * no Exception was thrown.  Returns <code>false</code> if no
+     * component with the given <code>clientId</code> is found.
+     *
+     */
+
+    public boolean invokeOnComponent(FacesContext context, String clientId,
+            ContextCallback callback) throws FacesException {
+        if (null == context || null == clientId || null == callback) {
+            throw new NullPointerException();
+        }
+
+        boolean found = false;
+        if (clientId.equals(this.getClientId(context))) {
+            try {
+                this.pushComponentToEL(context, this);
+                callback.invokeContextCallback(context, this);
+                return true;
+            } catch (Exception e) {
+                throw new FacesException(e);
+            } finally {
+                this.popComponentFromEL(context);
+            }
+        } else {
+            Iterator<UIComponent> itr = this.getFacetsAndChildren();
+
+            while (itr.hasNext() && !found) {
+                found = itr.next().invokeOnComponent(context, clientId,
+                        callback);
+            }
+        }
+        return found;
+    }
+
+    // ------------------------------------------------ Facet Management Methods
+
+
+    /**
+     * <p>Return a mutable <code>Map</code> representing the facet
+     * {@link UIComponent}s associated with this {@link UIComponent},
+     * keyed by facet name (which must be a String).  The returned
+     * implementation must support all of the standard and optional
+     * <code>Map</code> methods, plus support the following additional
+     * requirements:</p>
+
+     * <ul>
+     * <li>The <code>Map</code> implementation must implement
+     *     the <code>java.io.Serializable</code> interface.</li>
+     * <li>Any attempt to add a <code>null</code> key or value must
+     *     throw a NullPointerException.</li>
+     * <li>Any attempt to add a key that is not a String must throw
+     *     a ClassCastException.</li>
+     * <li>Any attempt to add a value that is not a {@link UIComponent}
+     *     must throw a ClassCastException.</li>
+     * <li>Whenever a new facet {@link UIComponent} is added:
+     *     <ul>
+     *     <li>The <code>parent</code> property of the component must be set to
+     *         this component instance.</li>
+     *     <li>If the <code>parent</code> property of the component was already
+     *     non-null, the component must first be removed from its previous
+     *     parent (where it may have been either a child or a facet).</li>
+     *     </ul></li>
+
+     * <li>Whenever an existing facet {@link UIComponent} is removed:
+     *     <ul>
+     *     <li>The <code>parent</code> property of the facet must be
+     *         set to <code>null</code>.</li>
+     *     </ul></li>
+     * </ul>
+     */
+    public abstract Map<String, UIComponent> getFacets();
+
+    /**
+     * <p>Return the number of facet {@link UIComponent}s that are
+     * associated with this {@link UIComponent}.  If there are no
+     * facets, this method must return 0.  The method must not cause
+     * the creation of a facet component map.</p>
+     *
+     * <p>For backwards compatability with classes that extend UIComponent
+     * directly, a default implementation is provided that simply calls
+     * {@link #getFacets} and then calls the <code>size()</code> method on the
+     * returned <code>Map</code>.  A more optimized version of this method is
+     * provided in {@link UIComponentBase#getFacetCount}.
+     *
+     * @since 1.2
+     */
+    public int getFacetCount() {
+        return (getFacets().size());
+    }
+
+
+
+    /**
+     * <p>Convenience method to return the named facet, if it exists, or
+     * <code>null</code> otherwise.  If the requested facet does not
+     * exist, the facets Map must not be created.</p>
+     *
+     * @param name Name of the desired facet
+     */
+    public abstract UIComponent getFacet(String name);
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the facet followed by child
+     * {@link UIComponent}s of this {@link UIComponent}.
+     * Facets are returned in an undefined order, followed by
+     * all the children in the order they are stored in the child list. If this
+     * component has no facets or children, an empty <code>Iterator</code>
+     * is returned.</p>
+     *
+     * <p>The returned <code>Iterator</code> must not support the
+     * <code>remove()</code> operation.</p>
+     */
+    public abstract Iterator<UIComponent> getFacetsAndChildren();
+
+
+    // -------------------------------------------- Lifecycle Processing Methods
+
+
+    /**
+     * <p>Broadcast the specified {@link FacesEvent} to all registered
+     * event listeners who have expressed an interest in events of this
+     * type.  Listeners are called in the order in which they were
+     * added.</p>  
+     * <p class="changed_added_2_0">If the <code>event</code> is an instance of 
+     * {@link javax.faces.event.BehaviorEvent} and the current 
+     * <code>component</code> is the source of the <code>event</code>
+     * call {@link javax.faces.event.BehaviorEvent#getBehavior} to get the
+     * {@link javax.faces.component.behavior.Behavior} for the event. 
+
+     * <span class="changed_modified_2_0_rev_a">Call {@link
+     * javax.faces.component.behavior.Behavior#broadcast(javax.faces.event.BehaviorEvent)}
+     * on the <code>Behavior</code> instance</span>.</p>
+     *
+     * @param event The {@link FacesEvent} to be broadcast
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     * @throws IllegalArgumentException if the implementation class
+     *  of this {@link FacesEvent} is not supported by this component
+     * @throws NullPointerException if <code>event</code> is
+     * <code>null</code>
+     */
+    public abstract void broadcast(FacesEvent event)
+        throws AbortProcessingException;
+
+
+    /**
+     * <p>Decode any new state of this {@link UIComponent} from the
+     * request contained in the specified {@link FacesContext}, and store
+     * this state as needed.</p>
+     * <p>During decoding, events may be enqueued for later processing
+     * (by event listeners who have registered an interest),  by calling
+     * <code>queueEvent()</code>.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void decode(FacesContext context);
+    
+    /**
+     * <p class="changed_added_2_0">Perform a tree visit starting at
+     * this node in the tree.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p>UIComponent.visitTree() implementations do not invoke the
+     * {@link VisitCallback} directly, but instead call {@link
+     * VisitContext#invokeVisitCallback} to invoke the callback.  This
+     * allows {@code VisitContext} implementations to provide optimized
+     * tree traversals, for example by only calling the {@code
+     * VisitCallback} for a subset of components.</p>
+     *
+     * <p>UIComponent.visitTree() implementations must call
+     * UIComponent.pushComponentToEL() before performing the
+     * visit and UIComponent.popComponentFromEL() after the
+     * visit.</p>
+     *
+     * @param context the <code>VisitContext</code> for this visit
+     * @param callback the <code>VisitCallback</code> instance
+     * whose <code>visit</code> method will be called
+     * for each node visited.
+     * @return component implementations may return <code>true</code> 
+     *   to indicate that the tree visit is complete (eg. all components
+     *   that need to be visited have been visited).  This results in
+     *   the tree visit being short-circuited such that no more components
+     *   are visited.
+     *
+     * </div>
+     *
+     * @see VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()
+     *
+     * @since 2.0
+     */
+    public boolean visitTree(VisitContext context, 
+                             VisitCallback callback) {
+
+        // First check to see whether we are visitable.  If not
+        // short-circuit out of this subtree, though allow the
+        // visit to proceed through to other subtrees.
+        if (!isVisitable(context))
+            return false;
+
+        // Push ourselves to EL before visiting
+        FacesContext facesContext = context.getFacesContext();
+        pushComponentToEL(facesContext, null);
+
+        try {
+            // Visit ourselves.  Note that we delegate to the 
+            // VisitContext to actually perform the visit.
+            VisitResult result = context.invokeVisitCallback(this, callback);
+
+            // If the visit is complete, short-circuit out and end the visit
+            if (result == VisitResult.COMPLETE)
+              return true;
+
+            // Visit children if necessary
+            if (result == VisitResult.ACCEPT) {
+                Iterator<UIComponent> kids = this.getFacetsAndChildren();
+
+                while(kids.hasNext()) {
+                    boolean done = kids.next().visitTree(context, callback);
+
+                    // If any kid visit returns true, we are done.
+                    if (done)
+                        return true;
+                }
+            }
+        }
+        finally {
+            // Pop ourselves off the EL stack
+            popComponentFromEL(facesContext);
+        }
+
+        // Return false to allow the visit to continue
+        return false;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if this
+     * component should be visited, <code>false</code> otherwise.
+     * Called by {@link UIComponent#visitTree UIComponent.visitTree()}
+     * to determine whether this component satisfies the hints returned
+     * by {@link javax.faces.component.visit.VisitContext#getHints}.</p>
+
+     * <div class="changed_added_2_0">
+
+     * <p>If this method returns false, the tree visited is
+     * short-circuited such that neither the component nor any of its
+     * descendents will be visited></p> 
+
+     * <p>Custom {@code visitTree()} implementations may call this
+     * method to determine whether the component is visitable before
+     * performing any visit-related processing.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     */
+    protected boolean isVisitable(VisitContext context) {
+
+        // VisitHints currently defines two hints that affect 
+        // visitability: VIIST_RENDERED and VISIT_TRANSIENT.
+        // Check for both of these and if set, verify that 
+        // we comply.
+        Set<VisitHint> hints = context.getHints();
+
+        if ((hints.contains(VisitHint.SKIP_UNRENDERED) && 
+                !this.isRendered())                    ||
+            (hints.contains(VisitHint.SKIP_TRANSIENT)  && 
+                this.isTransient())) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * <p><span class="changed_modified_2_0">If</span> our
+     * <code>rendered</code> property is <code>true</code>, render the
+     * beginning of the current state of this {@link UIComponent} to the
+     * response contained in the specified {@link FacesContext}. 
+     * Call {@link #pushComponentToEL(javax.faces.context.FacesContext,javax.faces.component.UIComponent)}.
+     * Call {@link javax.faces.application.Application#publishEvent}, passing
+     * {@link javax.faces.event.PreRenderComponentEvent}<code>.class</code> as the
+     * first argument and the component instance to be rendered as the
+     * second argument.</p></li>
+
+     * <p>If a {@link Renderer} is associated with this {@link
+     * UIComponent}, the actual encoding will be delegated to
+     * {@link Renderer#encodeBegin(FacesContext, UIComponent)}.
+     * </p>
+     *
+     * <p class="changed_added_2_0">If our <code>rendered</code> property is
+     * <code>false</code>, call {@link #pushComponentToEL(javax.faces.context.FacesContext,javax.faces.component.UIComponent)}
+     * and return immediately.</p>
+     *
+     * @param context {@link FacesContext} for the response we are creating
+     *
+     * @throws IOException if an input/output error occurs while rendering
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void encodeBegin(FacesContext context) throws IOException;
+
+
+    /**
+     * <p>If our <code>rendered</code> property is <code>true</code>,
+     * render the child {@link UIComponent}s of this {@link UIComponent}.
+     * This method will only be called
+     * if the <code>rendersChildren</code> property is <code>true</code>.</p>
+     *
+     * <p>If a {@link Renderer} is associated with this {@link UIComponent},
+     * the actual encoding will be delegated to
+     * {@link Renderer#encodeChildren(FacesContext, UIComponent)}.
+     * <span class="changed_modified_2_0">If no {@link Renderer} is associated
+     * with this {@link UIComponent}, iterate over each of the children of this
+     * component and call 
+     * {@link #encodeAll(javax.faces.context.FacesContext)}.</span></p>
+     *
+     * @param context {@link FacesContext} for the response we are creating
+     *
+     * @throws IOException if an input/output error occurs while rendering
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void encodeChildren(FacesContext context) throws IOException;
+
+
+    /**
+     * <p><span class="changed_modified_2_0">If</span> our
+     * <code>rendered</code> property is <code>true</code>, render the
+     * ending of the current state of this {@link UIComponent}.</p>
+     *
+     * <p>If a {@link Renderer} is associated with this {@link UIComponent},
+     * the actual encoding will be delegated to
+     * {@link Renderer#encodeEnd(FacesContext, UIComponent)}.</p>
+     *
+     * <p class="changed_added_2_0">Call {@link
+     * UIComponent#popComponentFromEL}. before returning regardless of the value
+     *  of the <code>rendered</code> property.</p>
+     *
+     * @param context {@link FacesContext} for the response we are creating
+     *
+     * @throws IOException if an input/output error occurs while rendering
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void encodeEnd(FacesContext context) throws IOException;
+
+    /**
+     * <p>If this component
+     * returns <code>true</code> from {@link #isRendered}, take the
+     * following action.</p>
+     *
+     * <p>Render this component and all its children that return
+     * <code>true</code> from <code>isRendered()</code>, regardless of
+     * the value of the {@link #getRendersChildren} flag.</p></li>
+
+     * @since 1.2
+     *
+     * @throws IOException if an input/output error occurs while rendering
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public void encodeAll(FacesContext context) throws IOException {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if (!isRendered()) {
+            return;
+        }
+
+        encodeBegin(context);
+        if (getRendersChildren()) {
+            encodeChildren(context);
+        } else if (this.getChildCount() > 0) {
+            for (UIComponent kid : getChildren()) {
+                kid.encodeAll(context);
+            }
+        }
+
+        encodeEnd(context);
+
+    }
+
+    
+    private static ArrayDeque<UIComponent> _getComponentELStack(String keyName, Map<Object, Object> contextAttributes)
+    {
+      ArrayDeque<UIComponent> elStack = (ArrayDeque<UIComponent>)contextAttributes.get(keyName);
+      
+      if (elStack == null)
+      {
+        elStack = new ArrayDeque<UIComponent>();
+        contextAttributes.put(keyName, elStack);
+      }
+      
+      return elStack;
+    }
+    
+    // bugdb 18090503 
+    
+    /*
+     * Respecting the fact that someone may have decorated FacesContextFactory
+     * and thus skipped our saving of this init param, look for the init
+     * param and return its value.  The return is saved in a transient ivar
+     * to provide performance while not perturbing state saving.
+     */
+    
+    private boolean isSetCurrentComponent(FacesContext context) {
+        if (null != isSetCurrentComponent) {
+            return isSetCurrentComponent;
+        }
+        
+        
+        Boolean bool = (Boolean) context.getAttributes().get(HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);
+        if (null != bool) {
+            isSetCurrentComponent = bool;
+        } else {
+            String val = context.getExternalContext().getInitParameter(UIComponent.HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);
+            isSetCurrentComponent = Boolean.valueOf(val);           
+        }
+        
+        return isSetCurrentComponent;  
+    }
+    
+    //private UIComponent previouslyPushed = null;
+    //private UIComponent previouslyPushedCompositeComponent = null;
+    //private boolean pushed;
+    //private int depth;
+
+    /**
+     * <p class="changed_added_2_0">Push the current
+     * <code>UIComponent</code> <code>this</code> to the {@link FacesContext}
+     * attribute map using the key {@link #CURRENT_COMPONENT} saving the previous
+     * <code>UIComponent</code> associated with {@link #CURRENT_COMPONENT} for a
+     * subsequent call to {@link #popComponentFromEL}.</p>
+     *
+     * <pclass="changed_added_2_0">This method and <code>popComponentFromEL()</code> form the basis for
+     * the contract that enables the EL Expression "<code>#{component}</code>" to
+     * resolve to the "current" component that is being processed in the
+     * lifecycle.  The requirements for when <code>pushComponentToEL()</code> and
+     * <code>popComponentFromEL()</code> must be called are specified as
+     * needed in the javadoc for this class.</p>
+     *
+     * <p class="changed_added_2_0">After
+     * <code>pushComponentToEL()</code> returns, a call to {@link
+     * #getCurrentComponent} must return <code>this</code>
+     * <code>UIComponent</code> instance until
+     * <code>popComponentFromEL()</code> is called, after which point
+     * the previous <code>UIComponent</code> instance will be returned
+     * from <code>getCurrentComponent()</code></p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @param component the <code>component</code> to push to the EL.  If
+     *  <code>component</code> is <code>null</code> the <code>UIComponent</code>
+     *  instance that this call was invoked upon will be pushed to the EL.
+     *
+     * @throws NullPointerException if <code>context</code> is <code>null</code>
+     *
+     * @see javax.faces.context.FacesContext#getAttributes()
+     *
+     * @since 2.0
+     */
+    public final void pushComponentToEL(FacesContext context, UIComponent component) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if (null == component) {
+            component = this;
+        }
+
+        Map<Object, Object> contextAttributes = context.getAttributes();
+        ArrayDeque<UIComponent> componentELStack = _getComponentELStack(_CURRENT_COMPONENT_STACK_KEY,
+                                                               contextAttributes);
+        componentELStack.push(component);
+        component._isPushedAsCurrentRefCount++;
+        
+        // we only do this because of the spec
+        boolean setCurrentComponent = isSetCurrentComponent(context);
+        if (setCurrentComponent) {
+            contextAttributes.put(UIComponent.CURRENT_COMPONENT, component);
+        }
+        
+        // if the pushed component is a composite component, we need to update that
+        // stack as well
+        if (UIComponent.isCompositeComponent(component))
+        {
+          _getComponentELStack(_CURRENT_COMPOSITE_COMPONENT_STACK_KEY,
+                               contextAttributes).push(component);
+
+          // we only do this because of the spec
+          if (setCurrentComponent) {
+              contextAttributes.put(UIComponent.CURRENT_COMPOSITE_COMPONENT, component);
+          }
+        }
+    }
+
+  // track whether we have been pushed as current in order to handle mismatched pushes and
+  // pops of EL context stack.  We use a counter to handle cases where the same component
+  // is pushed on multiple times
+  private int _isPushedAsCurrentRefCount = 0;
+  
+  // key used to look up current component stack if FacesContext attributes
+  private static final String _CURRENT_COMPONENT_STACK_KEY = 
+                                                    "javax.faces.component.CURRENT_COMPONENT_STACK";
+  
+  // key used to look up current composite component stack if FacesContext attributes
+  private static final String _CURRENT_COMPOSITE_COMPONENT_STACK_KEY = 
+                                          "javax.faces.component.CURRENT_COMPOSITE_COMPONENT_STACK";
+  
+
+    /**
+     * <p class="changed_added_2_0">Pop the current
+     * <code>UIComponent</code> from the {@link FacesContext} attributes map
+     * so that the previous <code>UIComponent</code>, if any, becomes the current
+     * component.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     * 
+     * @throws NullPointerException if <code>context</code> is <code>null</code>
+     *
+     * @see javax.faces.context.FacesContext#getAttributes()
+     *
+     * @since 2.0
+     */
+    public final void popComponentFromEL(FacesContext context)
+    {
+      if (context == null)
+      {
+        throw new NullPointerException();
+      }
+
+      // detect cases where the stack has become unbalanced.  Due to how UIComponentBase
+      // implemented pushing and pooping of components from the ELContext, components that
+      // overrode just one of encodeBegin or encodeEnd, or only called super in one case
+      // will become unbalanced.  Detect and correct for those cases here.
+ 
+      // detect case where push was never called.  In that case, pop should be a no-op
+      if (_isPushedAsCurrentRefCount < 1) {
+          return;
+      }
+           
+      Map<Object, Object> contextAttributes = context.getAttributes();
+      
+      ArrayDeque<UIComponent> componentELStack = _getComponentELStack(_CURRENT_COMPONENT_STACK_KEY,
+                                                             contextAttributes);
+      
+      // check for the other unbalanced case, a component was pushed but never popped.  Keep
+      // popping those components until we get to our component
+      for (UIComponent topComponent = componentELStack.peek();
+           topComponent != this;
+           topComponent = componentELStack.peek())
+      {
+          topComponent.popComponentFromEL(context);
+      }
+      
+      // pop ourselves off of the stack
+      componentELStack.pop();
+      _isPushedAsCurrentRefCount--;
+
+        boolean setCurrentComponent = isSetCurrentComponent(context);
+      
+      // update the current component with the new top of stack.  We only do this because of the spec
+        if (setCurrentComponent) {
+            contextAttributes.put(UIComponent.CURRENT_COMPONENT, componentELStack.peek());
+        }
+      
+      // if we're a composite component, we also have to pop ourselves off of the
+      // composite stack
+      if (UIComponent.isCompositeComponent(this))
+      {
+        ArrayDeque<UIComponent> compositeELStack=_getComponentELStack(_CURRENT_COMPOSITE_COMPONENT_STACK_KEY,
+                                                             contextAttributes);
+        if (!compositeELStack.isEmpty()) {
+            compositeELStack.pop();
+        }        
+
+        // update the current composite component with the new top of stack.
+          // We only do this because of the spec
+        if (setCurrentComponent) {
+              contextAttributes.put(UIComponent.CURRENT_COMPOSITE_COMPONENT, compositeELStack.peek());
+        }
+      }
+    }
+    
+    // It is safe to cache this because components never go from being
+    // composite to non-composite.
+    private transient Boolean isCompositeComponent = null;
+
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if
+     * <code>component</code> is a composite component, otherwise
+     * <code>false</code>.</p>
+     *
+     * @param component the {@link UIComponent} to test
+     *
+     * @throws NullPointerException if <code>component</code> is <code>null</code>
+     * @since 2.0
+     */
+    public static boolean isCompositeComponent(UIComponent component) {
+
+        if (component == null) {
+            throw new NullPointerException();
+        }
+        boolean result = false;
+        if (null != component.isCompositeComponent) {
+            result = component.isCompositeComponent.booleanValue();
+        } else {
+            result = component.isCompositeComponent =
+                    (component.getAttributes().containsKey(
+                               Resource.COMPONENT_RESOURCE_KEY));
+        }
+        return result;
+
+    }
+
+
+    /**
+     * <p>
+     * Finds the nearest composite component parent of the specified component.
+     * </p>
+     *
+     * @param component the component from which to start the search from
+     *
+     * @return if <code>component</code> is <code>null</code>, return
+     *  <code>null</code>, otherwise search the component's parent hierachy
+     *  for the nearest parent composite component.  If no parent composite
+     *  component is found, return <code>null</code>
+     *
+     * @since 2.0
+     */
+    public static UIComponent getCompositeComponentParent(UIComponent component) {
+
+        if (component == null) {
+            return null;
+        } else {
+            if (component.compositeParent != null) {
+                return component.compositeParent;
+            }
+            UIComponent parent = component.getParent();
+            while (parent != null) {
+                if (UIComponent.isCompositeComponent(parent)) {
+                    if (component.isInView()) {
+                        component.compositeParent = parent;
+                    }
+                    return parent;
+                }
+                parent = parent.getParent();
+            }
+            return null;
+        }
+        
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>UIComponent</code>
+     * instance that is currently processing.  This is equivalent to
+     * evaluating the EL expression "<code>#{component}</code>" and
+     * doing a <code>getValue</code> operation on the resultant
+     * <code>ValueExpression</code>.</p>
+     *
+     * <p class="changed_added_2_0">This method must return
+     * <code>null</code> if there is no currently processing
+     * <code>UIComponent</code></p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public static UIComponent getCurrentComponent(FacesContext context) {
+        Map<Object, Object> contextAttributes = context.getAttributes();
+        ArrayDeque<UIComponent> componentELStack = _getComponentELStack(_CURRENT_COMPONENT_STACK_KEY,
+                                                               contextAttributes);
+
+      return componentELStack.peek();
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the closest ancestor
+     * component, relative to the component returned from {@link
+     * #getCurrentComponent}, that is a composite component, or
+     * <code>null</code> if no such component exists.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     * 
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public static UIComponent getCurrentCompositeComponent(FacesContext context) {
+      // return (UIComponent)context.getAttributes().get(UIComponent.CURRENT_COMPOSITE_COMPONENT);
+        Map<Object, Object> contextAttributes = context.getAttributes();
+        ArrayDeque<UIComponent> compositeELStack = _getComponentELStack(_CURRENT_COMPOSITE_COMPONENT_STACK_KEY,
+                                                             contextAttributes);
+        return compositeELStack.peek();
+    }
+    
+    // -------------------------------------------------- Event Listener Methods
+
+
+    /**
+     * <p>Add the specified {@link FacesListener} to the set of listeners
+     * registered to receive event notifications from this {@link UIComponent}.
+     * It is expected that {@link UIComponent} classes acting as event sources
+     * will have corresponding typesafe APIs for registering listeners of the
+     * required type, and the implementation of those registration methods
+     * will delegate to this method.  For example:</p>
+     * <pre>
+     * public class FooEvent extends FacesEvent { ... }
+     *
+     * public interface FooListener extends FacesListener {
+     *   public void processFoo(FooEvent event);
+     * }
+     *
+     * public class FooComponent extends UIComponentBase {
+     *   ...
+     *   public void addFooListener(FooListener listener) {
+     *     addFacesListener(listener);
+     *   }
+     *   public void removeFooListener(FooListener listener) {
+     *     removeFacesListener(listener);
+     *   }
+     *   ...
+     * }
+     * </pre>
+     *
+     * @param listener The {@link FacesListener} to be registered
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    protected abstract void addFacesListener(FacesListener listener);
+
+
+    /**
+     * <p>Return an array of registered {@link FacesListener}s that are
+     * instances of the specified class.  If there are no such registered
+     * listeners, a zero-length array is returned.  The returned
+     * array can be safely be cast to an array strongly typed to
+     * an element type of <code>clazz</code>.</p>
+     *
+     * @param clazz Class that must be implemented by a {@link FacesListener}
+     *  for it to be returned
+     *
+     * @throws IllegalArgumentException if <code>class</code> is not,
+     *  and does not implement, {@link FacesListener}
+     * @throws NullPointerException if <code>clazz</code>
+     *  is <code>null</code>
+     */
+    protected abstract FacesListener[] getFacesListeners(Class clazz);
+
+
+    /**
+     * <p>Remove the specified {@link FacesListener} from the set of listeners
+     * registered to receive event notifications from this {@link UIComponent}.
+     *
+     * @param listener The {@link FacesListener} to be deregistered
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    protected abstract void removeFacesListener(FacesListener listener);
+
+
+    /**
+     * <p>Queue an event for broadcast at the end of the current request
+     * processing lifecycle phase.  The default implementation in
+     * {@link UIComponentBase} must delegate this call to the
+     * <code>queueEvent()</code> method of the parent {@link UIComponent}.</p>
+     *
+     * @param event {@link FacesEvent} to be queued
+     *
+     * @throws IllegalStateException if this component is not a
+     *  descendant of a {@link UIViewRoot}
+     * @throws NullPointerException if <code>event</code>
+     *  is <code>null</code>
+     */
+    public abstract void queueEvent(FacesEvent event);
+
+
+    /**
+     * <p class="changed_modified_2_1">This implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.  {@link UIComponentBase} provides the implementation of
+     * this method.</p>
+     *
+     * @since 2.1
+     */
+    public void subscribeToEvent(Class<? extends SystemEvent> eventClass,
+                                          ComponentSystemEventListener componentListener) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p class="changed_modified_2_1">This implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.  {@link UIComponentBase} provides the implementation of
+     * this method.</p>
+     *
+     * @since 2.1
+     */
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass,
+                                              ComponentSystemEventListener componentListener) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p class="changed_modified_2_1">This implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.  {@link UIComponentBase} provides the implementation of
+     * this method.</p>
+     *
+     * @since 2.1
+     */
+    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> eventClass) {
+        throw new UnsupportedOperationException();
+    }
+
+
+
+    /**
+     * <p class="changed_added_2_0">Starting with "this", return the closest 
+     * component in the ancestry that is a <code>NamingContainer</code>
+     * or <code>null</code> if none can be found.</p>
+     *
+     * @since 2.0
+     */
+    public UIComponent getNamingContainer() {
+        UIComponent namingContainer = this;
+        while (namingContainer != null) {
+            if (namingContainer instanceof NamingContainer) {
+                return namingContainer;
+            }
+            namingContainer = namingContainer.getParent();
+        }
+        return null;
+    }
+
+    // ------------------------------------------------ Lifecycle Phase Handlers
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> the
+     * component tree processing required by the <em>Restore View</em>
+     * phase of the request processing lifecycle for all facets of this
+     * component, all children of this component, and this component
+     * itself, as follows.</p> <ul> <li
+     * class="changed_modified_2_0">Call the <code>restoreState()</code>
+     * method of this component.</li> 
+     *
+     * <li class="changed_added_2_0">Call
+     * {@link UIComponent#pushComponentToEL}.  </li>
+
+     * <li>Call the <code>processRestoreState()</code> method of all
+     * facets and children of this {@link UIComponent} in the order
+     * determined by a call to <code>getFacetsAndChildren()</code>.
+     * <span class="changed_added_2_0">After returning from the
+     * <code>processRestoreState()</code> method on a child or facet,
+     * call {@link UIComponent#popComponentFromEL}</span></li>
+
+     * </ul>
+     *
+     * <p>This method may not be called if the state saving method is
+     * set to server.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void processRestoreState(FacesContext context,
+                                             Object state);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> the
+     * component tree processing required by the <em>Apply Request
+     * Values</em> phase of the request processing lifecycle for all
+     * facets of this component, all children of this component, and
+     * this component itself, as follows.</p>
+
+     * <ul>
+     * <li>If the <code>rendered</code> property of this {@link UIComponent}
+     *     is <code>false</code>, skip further processing.</li>
+     * <li class="changed_added_2_0">Call {@link #pushComponentToEL}.</li>
+     * <li>Call the <code>processDecodes()</code> method of all facets
+     *     and children of this {@link UIComponent}, in the order determined
+     *     by a call to <code>getFacetsAndChildren()</code>.</li>
+
+     * <li>Call the <code>decode()</code> method of this component.</li>
+
+     * <li>Call {@link #popComponentFromEL} from inside of a
+     * <code>finally block, just before returning.</code></li>
+
+
+
+     * <li>If a <code>RuntimeException</code> is thrown during
+     *     decode processing, call {@link FacesContext#renderResponse}
+     *     and re-throw the exception.</li>
+     * </ul>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void processDecodes(FacesContext context);
+
+    /**
+     * <p class="changed_added_2_0">The default implementation performs
+     * the following action.  If the argument <code>event</code> is an
+     * instance of {@link PostRestoreStateEvent}, call
+     * <code>this.</code>{@link #getValueExpression} passing the literal
+     * string “binding”, without the quotes, as the
+     * argument.  If the result is non-<code>null</code>, set the value
+     * of the <code>ValueExpression</code> to be <code>this</code>.</p>
+     */ 
+
+    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
+        if (event instanceof PostRestoreStateEvent) {
+	    assert(this == event.getComponent());
+            // if this component has a component value reference expression,
+            // make sure to populate the ValueExpression for it.
+            ValueExpression valueExpression;
+            if (null != (valueExpression = this.getValueExpression("binding"))) {
+                valueExpression.setValue(FacesContext.getCurrentInstance().getELContext(), 
+                        this);
+            }
+            isCompositeComponent = null;
+
+        }
+    }
+    
+    
+
+
+    /**
+     * <p><span class="changed_modified_2_0"><span
+     * class="changed_modified_2_0_rev_a">Perform</span></span> the component
+     * tree processing required by the <em>Process Validations</em>
+     * phase of the request processing lifecycle for all facets of this
+     * component, all children of this component, and this component
+     * itself, as follows.</p>
+
+     * <ul>
+     * <li>If the <code>rendered</code> property of this {@link UIComponent}
+     *     is <code>false</code>, skip further processing.</li>
+     * <li class="changed_added_2_0">Call {@link #pushComponentToEL}.</li>
+     * <li>Call the <code>processValidators()</code> method of all facets
+     *     and children of this {@link UIComponent}, in the order determined
+     *     by a call to <code>getFacetsAndChildren()</code>.</li>
+
+     * <li><span class="changed_modified_2_0_rev_a">After returning from
+     * calling <code>getFacetsAndChildren()</code> call {@link
+     * UIComponent#popComponentFromEL}.</span></li> </ul>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void processValidators(FacesContext context);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> the
+     * component tree processing required by the <em>Update Model
+     * Values</em> phase of the request processing lifecycle for all
+     * facets of this component, all children of this component, and
+     * this component itself, as follows.</p> 
+
+     * <ul> 
+
+     * <li>If the <code>rendered</code> property of this {@link
+     * UIComponent} is <code>false</code>, skip further processing.</li>
+
+     * <li class="changed_added_2_0">Call {@link
+     * #pushComponentToEL}.</li>
+
+     * <li>Call the <code>processUpdates()</code> method of all facets
+     * and children of this {@link UIComponent}, in the order determined
+     * by a call to <code>getFacetsAndChildren()</code>.  <span
+     * class="changed_added_2_0">After returning from the
+     * <code>processUpdates()</code> method on a child or facet, call
+     * {@link UIComponent#popComponentFromEL}</span></li>
+ 
+    * </ul>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void processUpdates(FacesContext context);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> the
+     * component tree processing required by the state saving portion of
+     * the <em>Render Response</em> phase of the request processing
+     * lifecycle for all facets of this component, all children of this
+     * component, and this component itself, as follows.</p>
+
+     * <ul>
+     *
+     * <li>consult the <code>transient</code> property of this
+     * component.  If true, just return <code>null</code>.</li>
+
+     * <li class="changed_added_2_0">Call {@link
+     * #pushComponentToEL}.</li>
+
+     * <li>Call the <code>processSaveState()</code> method of all facets
+     * and children of this {@link UIComponent} in the order determined
+     * by a call to <code>getFacetsAndChildren()</code>, skipping
+     * children and facets that are transient.  Ensure that {@link
+     * #popComponentFromEL} is called correctly after each child or
+     * facet.</li>
+     *
+     * <li>Call the <code>saveState()</code> method of this component.</li>
+     *
+     * <li>Encapsulate the child state and your state into a
+     * Serializable Object and return it.</li> 
+     *
+     * </ul>
+     *
+     * <p>This method may not be called if the state saving method is
+     * set to server.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract Object processSaveState(FacesContext context);
+
+
+    // ----------------------------------------------------- Convenience Methods
+
+
+    /**
+     * <p>Convenience method to return the {@link FacesContext} instance
+     * for the current request.</p>
+     */
+    protected abstract FacesContext getFacesContext();
+
+
+    /**
+     * <p>Convenience method to return the {@link Renderer} instance
+     * associated with this component, if any; otherwise, return
+     * <code>null</code>.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     */
+    protected abstract Renderer getRenderer(FacesContext context);
+
+
+    // --------------------------------------------------------- Package Private
+
+
+    static final class ComponentSystemEventListenerAdapter
+       implements ComponentSystemEventListener, SystemEventListener, StateHolder, FacesWrapper<ComponentSystemEventListener> {
+
+        ComponentSystemEventListener wrapped;
+        Class<?> instanceClass;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        ComponentSystemEventListenerAdapter() {
+
+            // necessary for state saving
+
+        }
+
+
+        ComponentSystemEventListenerAdapter(ComponentSystemEventListener wrapped,
+                                            UIComponent component) {
+
+            this.wrapped = wrapped;
+            this.instanceClass = component.getClass();
+
+        }
+
+
+        // ------------------------------------ Methods from SystemEventListener
+
+
+        public void processEvent(SystemEvent event) throws AbortProcessingException {
+
+            wrapped.processEvent((ComponentSystemEvent) event);
+
+        }
+
+        // ------------------------------------ Methods from SystemEventListener
+
+
+        public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
+
+            wrapped.processEvent(event);
+
+        }
+        public boolean isListenerForSource(Object component) {
+
+            if (wrapped instanceof SystemEventListener) {
+                return ((SystemEventListener) wrapped).isListenerForSource(component);
+            } else {
+                return instanceClass.isAssignableFrom(component.getClass());
+            }
+
+        }
+
+
+        // -------------------------------------------- Methods from StateHolder
+
+        public Object saveState(FacesContext context) {
+
+            if (context == null) {
+                throw new NullPointerException();
+            }
+            return new Object[] {
+                  ((wrapped instanceof UIComponent) ? null : new StateHolderSaver(context, wrapped)),
+                  instanceClass
+            };
+
+        }
+
+
+        public void restoreState(FacesContext context, Object state) {
+
+            if (context == null) {
+                throw new NullPointerException();
+            }
+            if (state == null) {
+                return;
+            }
+            Object[] s = (Object[]) state;
+            Object listener = s[0];
+            wrapped = (ComponentSystemEventListener) ((listener == null)
+                                                      ? UIComponent .getCurrentComponent(context)
+                                                      : ((StateHolderSaver) listener).restore(context));
+            instanceClass = (Class<?>) s[1];
+            
+        }
+
+
+        public boolean isTransient() {
+
+            if (wrapped instanceof StateHolder) {
+                return ((StateHolder) wrapped).isTransient();
+            }
+            return false;
+
+        }
+
+
+        public void setTransient(boolean newTransientValue) {
+
+            // no-op
+
+        }
+
+
+        // ------------------------------------------- Methods from FacesWrapper
+
+
+        public ComponentSystemEventListener getWrapped() {
+
+            return wrapped;
+
+        }
+
+
+        // ------------------------------------------------------ Public Methods
+
+
+        @Override
+        public int hashCode() {
+
+            return (wrapped.hashCode() ^ instanceClass.hashCode());
+
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+
+            if (!(obj instanceof ComponentSystemEventListenerAdapter)) {
+                return false;
+            }
+            ComponentSystemEventListenerAdapter in =
+                  (ComponentSystemEventListenerAdapter) obj;
+            return (wrapped.equals(in.wrapped)
+                    && instanceClass.equals(in.instanceClass));
+            
+        }
+    } // END ComponentSystemEventListenerAdapter
+
+}
diff --git a/javax/faces/component/UIComponentBase.java b/javax/faces/component/UIComponentBase.java
new file mode 100644
index 0000000..e4dea6b
--- /dev/null
+++ b/javax/faces/component/UIComponentBase.java
@@ -0,0 +1,3422 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.*;
+import javax.faces.render.Renderer;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Array;
+import java.lang.reflect.Modifier;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_0_rev_a changed_added_2_1">UIComponentBase</strong> is a
+ * convenience base class that implements the default concrete behavior
+ * of all methods defined by {@link UIComponent}.</p>
+ * <p/>
+ * <p>By default, this class defines <code>getRendersChildren()</code>
+ * to find the renderer for this component and call its
+ * <code>getRendersChildren()</code> method.  The default implementation
+ * on the <code>Renderer</code> returns <code>false</code>.  As of
+ * version 1.2 of the JavaServer Faces Specification, component authors
+ * are encouraged to return <code>true</code> from this method and rely
+ * on the implementation of {@link #encodeChildren} in this class and in
+ * the Renderer ({@link Renderer#encodeChildren}).  Subclasses that wish
+ * to manage the rendering of their children should override this method
+ * to return <code>true</code> instead.</p>
+ */
+public abstract class UIComponentBase extends UIComponent {
+
+
+    // -------------------------------------------------------------- Attributes
+
+    private static Logger LOGGER = Logger.getLogger("javax.faces.component",
+            "javax.faces.LogStrings");
+
+    private static final String ADDED = UIComponentBase.class.getName() + ".ADDED";
+
+
+    /**
+     * <p>Each entry is an map of <code>PropertyDescriptor</code>s describing
+     * the properties of a concrete {@link UIComponent} implementation, keyed
+     * by the corresponding <code>java.lang.Class</code>.</p>
+     * <p/>
+     */
+    private Map<Class<?>, Map<String, PropertyDescriptor>> descriptors;            
+
+    /**
+     * Reference to the map of <code>PropertyDescriptor</code>s for this class
+     * in the <code>descriptors<code> <code>Map<code>.
+     */
+    private Map<String, PropertyDescriptor> pdMap = null;
+
+    private Map<Class<? extends SystemEvent>, List<SystemEventListener>> listenersByEventClass;
+
+    /**
+     * <p>An EMPTY_OBJECT_ARRAY argument list to be passed to reflection methods.</p>
+     */
+    private static final Object EMPTY_OBJECT_ARRAY[] = new Object[0];
+
+    public UIComponentBase() {
+        populateDescriptorsMapIfNecessary();
+    }
+
+    private void populateDescriptorsMapIfNecessary() {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        Class<?> clazz = getClass();
+        
+        /*
+         * If we can find a valid FacesContext we are going to use it to get
+         * access to the property descriptor map.
+         */
+        if (facesContext != null && 
+                facesContext.getExternalContext() != null && 
+                facesContext.getExternalContext().getApplicationMap() != null) {
+            
+            Map<String, Object> applicationMap = facesContext.getExternalContext().getApplicationMap();
+            
+            if (!applicationMap.containsKey("com.sun.faces.compnent.COMPONENT_DESCRIPTORS_MAP")) {
+                applicationMap.put("com.sun.faces.compnent.COMPONENT_DESCRIPTORS_MAP", 
+                        new ConcurrentHashMap<Class<?>, Map<String, PropertyDescriptor>>());
+            }
+            
+            descriptors = (Map<Class<?>, Map<String, PropertyDescriptor>>) applicationMap.get("com.sun.faces.compnent.COMPONENT_DESCRIPTORS_MAP");
+            pdMap = descriptors.get(clazz);
+        }
+
+        if (pdMap == null) {
+            /*
+             * We did not find the property descriptor map so we are now 
+             * going to load it.
+             */
+            PropertyDescriptor pd[] = getPropertyDescriptors();
+            if (pd != null) {
+                pdMap = new HashMap<String, PropertyDescriptor>(pd.length, 1.0f);
+                for (PropertyDescriptor aPd : pd) {
+                    pdMap.put(aPd.getName(), aPd);
+                }
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.log(Level.FINE, "fine.component.populating_descriptor_map",
+                            new Object[]{clazz,
+                                    Thread.currentThread().getName()});
+                }
+
+                if (descriptors != null && !descriptors.containsKey(clazz)) {
+                    descriptors.put(clazz, pdMap);
+                }
+            }
+        }
+    }
+
+    /**
+     * <p>Return an array of <code>PropertyDescriptors</code> for this
+     * {@link UIComponent}'s implementation class.  If no descriptors
+     * can be identified, a zero-length array will be returned.</p>
+     *
+     * @throws FacesException if an introspection exception occurs
+     */
+    private PropertyDescriptor[] getPropertyDescriptors() {
+        PropertyDescriptor[] pd;
+        try {
+            pd = Introspector.getBeanInfo(this.getClass()).
+                    getPropertyDescriptors();
+        } catch (IntrospectionException e) {
+            throw new FacesException(e);
+        }
+        return (pd);
+    }
+
+
+    /**
+     * <p>The <code>Map</code> containing our attributes, keyed by
+     * attribute name.</p>
+     */
+    private AttributesMap attributes = null;
+
+
+    public Map<String, Object> getAttributes() {
+
+        if (attributes == null) {
+            attributes = new AttributesMap(this);
+        }
+        return (attributes);
+
+    }
+
+    @Override
+    public Map<String, Object> getPassThroughAttributes(boolean create) {
+        Map<String, Object> result = (Map<String, Object>) 
+                this.getStateHelper().get(PropertyKeys.passThroughAttributes);
+        if (null == result) {
+            if (create) {
+                result = new PassThroughAttributesMap<String, Object>();
+                this.getStateHelper().put(PropertyKeys.passThroughAttributes, 
+                        result);
+            }
+        }
+        
+        return result;
+
+    }
+
+    private static class PassThroughAttributesMap<K, V> extends ConcurrentHashMap<String, Object> implements Serializable {
+        @Override
+        public Object put(String key, Object value) {
+            if (null == key || null == value) {
+                throw new NullPointerException();
+            }
+            validateKey(key);
+            return super.put(key, value);
+        }
+        
+        @Override
+        public Object putIfAbsent(String key, Object value) {
+            if (null == key || null == value) {
+                throw new NullPointerException();
+            }
+            validateKey(key);
+            return super.putIfAbsent(key, value);
+        }
+        
+        private void validateKey(Object key) {
+            if (!(key instanceof String) || (key instanceof ValueExpression) || !(key instanceof Serializable)) {
+                throw new IllegalArgumentException();
+            }
+        }
+        
+    }
+    
+    // ---------------------------------------------------------------- Bindings
+
+
+    /**
+     * {@inheritDoc}
+     *
+     * @throws NullPointerException {@inheritDoc}
+     * @deprecated This has been replaced by {@link #getValueExpression}.
+     */
+    public ValueBinding getValueBinding(String name) {
+
+        if (name == null) {
+            throw new NullPointerException();
+        }
+        ValueBinding result = null;
+        ValueExpression ve;
+
+        if (null != (ve = getValueExpression(name))) {
+            // if the ValueExpression is an instance of our private
+            // wrapper class.
+            if (ve.getClass().equals(ValueExpressionValueBindingAdapter.class)) {
+                result = ((ValueExpressionValueBindingAdapter) ve).getWrapped();
+            } else {
+                // otherwise, this is a real ValueExpression.  Wrap it
+                // in a ValueBinding.
+                result = new ValueBindingValueExpressionAdapter(ve);
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     *
+     * @throws IllegalArgumentException {@inheritDoc}
+     * @throws NullPointerException     {@inheritDoc}
+     * @deprecated This has been replaced by {@link #setValueExpression}.
+     */
+    public void setValueBinding(String name, ValueBinding binding) {
+        if (name == null) {
+            throw new NullPointerException();
+        }
+        if (binding != null) {
+            ValueExpressionValueBindingAdapter adapter =
+                    new ValueExpressionValueBindingAdapter(binding);
+            setValueExpression(name, adapter);
+        } else {
+            setValueExpression(name, null);
+        }
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>The assigned client identifier for this component.</p>
+     */
+    private String clientId = null;
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getClientId(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // if the clientId is not yet set
+        if (this.clientId == null) {
+            UIComponent namingContainerAncestor =
+                    this.getNamingContainerAncestor();
+            UIComponent parent = namingContainerAncestor;
+            String parentId = null;
+
+            // give the parent the opportunity to first
+            // grab a unique clientId
+            if (parent != null) {
+                parentId = parent.getContainerClientId(context);
+            }
+
+            // now resolve our own client id
+            this.clientId = getId();
+            if (this.clientId == null) {
+                String generatedId;
+                if (null != namingContainerAncestor &&
+                    namingContainerAncestor instanceof UniqueIdVendor) {
+                    generatedId = ((UniqueIdVendor)namingContainerAncestor).createUniqueId(context, null);
+                }
+                else {
+                    generatedId = context.getViewRoot().createUniqueId();
+                }
+                setId(generatedId);
+                this.clientId = getId();
+            }
+            if (parentId != null) {
+                StringBuilder idBuilder =
+                        new StringBuilder(parentId.length()
+                                + 1
+                                + this.clientId.length());
+                this.clientId = idBuilder.append(parentId)
+                        .append(UINamingContainer.getSeparatorChar(context))
+                        .append(this.clientId).toString();
+            }
+
+            // allow the renderer to convert the clientId
+            Renderer renderer = this.getRenderer(context);
+            if (renderer != null) {
+                this.clientId = renderer.convertClientId(context, this.clientId);
+            }
+        }
+        return this.clientId;
+    }
+
+    /**
+     * <p>The component identifier for this component.</p>
+     */
+    private String id = null;
+
+
+    public String getId() {
+
+        return (id);
+
+    }
+
+    private UIComponent getNamingContainerAncestor() {
+	UIComponent namingContainer = this.getParent();
+        while (namingContainer != null) {
+            if (namingContainer instanceof NamingContainer) {
+                return namingContainer;
+            }
+            namingContainer = namingContainer.getParent();
+        }
+        return null;
+    }
+
+
+    /**
+     * @throws IllegalArgumentException {@inheritDoc}
+     * @throws IllegalStateException    {@inheritDoc}
+     */
+    public void setId(String id) {
+
+        // if the current ID is not null, and the passed
+        // argument is the same, no need to validate it
+        // as it has already been validated.
+        if (this.id == null || !(this.id.equals(id))) {
+            validateId(id);
+            this.id = id;
+        }
+
+        this.clientId = null; // Erase any cached value
+
+    }
+
+
+    /**
+     * <p>The parent component for this component.</p>
+     */
+    private UIComponent parent = null;
+
+
+    public UIComponent getParent() {
+        return (this.parent);
+    }
+
+    public void setParent(UIComponent parent) {
+
+        if (parent == null) {
+            if (this.parent != null) {
+                doPreRemoveProcessing(FacesContext.getCurrentInstance(), this);
+                this.parent = parent;
+            }
+            compositeParent = null;
+        } else {
+            this.parent = parent;
+            if (this.getAttributes().get(ADDED) == null) {
+                // add an attribute to this component here to indiciate that
+                // it's being processed.  If we don't do this, and the component
+                // is re-parented, the events could fire again in certain cases
+                // and cause a stack overflow.
+                this.getAttributes().put(ADDED, Boolean.TRUE);
+                doPostAddProcessing(FacesContext.getCurrentInstance(), this);
+                // remove the attribute once we've returned from the event
+                // processing.
+                this.getAttributes().remove(ADDED);
+            }
+        }
+    }            
+
+    public boolean isRendered() {
+        
+	return Boolean.valueOf(getStateHelper().eval(PropertyKeys.rendered, Boolean.TRUE).toString());        
+    }
+
+
+    public void setRendered(boolean rendered) {
+        getStateHelper().put(PropertyKeys.rendered, rendered);
+    }
+
+
+    public String getRendererType() {
+
+        return (String) getStateHelper().eval(PropertyKeys.rendererType);
+        
+    }
+
+
+    public void setRendererType(String rendererType) {
+
+        getStateHelper().put(PropertyKeys.rendererType, rendererType);
+
+    }
+
+
+    public boolean getRendersChildren() {
+        boolean result = false;
+
+        Renderer renderer;
+        if (getRendererType() != null) {
+            if (null !=
+                    (renderer = getRenderer(getFacesContext()))) {
+                result = renderer.getRendersChildren();
+            }
+        }
+        return result;
+
+    }
+
+    // ------------------------------------------------- Tree Management Methods
+
+
+    /*
+     * <p>The <code>List</code> containing our child components.</p>
+     */
+    private List<UIComponent> children = null;
+
+
+    public List<UIComponent> getChildren() {
+
+        if (children == null) {
+            children = new ChildrenList(this);
+        }
+        return (children);
+
+    }
+
+
+    // Do not allocate the children List to answer this question
+    public int getChildCount() {
+
+        if (children != null) {
+            return (children.size());
+        } else {
+            return (0);
+        }
+
+    }
+
+
+    /**
+     * <p>If the specified {@link UIComponent} has a non-null parent,
+     * remove it as a child or facet (as appropriate) of that parent.
+     * As a result, the <code>parent</code> property will always be
+     * <code>null</code> when this method returns.</p>
+     *
+     * @param component {@link UIComponent} to have any parent erased
+     */
+    private static void eraseParent(UIComponent component) {
+
+        UIComponent parent = component.getParent();
+        if (parent == null) {
+            return;
+        }
+        if (parent.getChildCount() > 0) {
+            List children = parent.getChildren();
+            int index = children.indexOf(component);
+            if (index >= 0) {
+                children.remove(index);
+                return;
+            }
+        }
+        if (parent.getFacetCount() > 0) {
+            Map facets = parent.getFacets();
+            Iterator entries = facets.entrySet().iterator();
+            while (entries.hasNext()) {
+                Map.Entry entry = (Map.Entry) entries.next();
+                //noinspection ObjectEquality
+                if (entry.getValue() == component) {
+                    entries.remove();
+                    return;
+                }
+            }
+        }
+
+        // Throw an exception for the "cannot happen" case
+        throw new IllegalStateException("Parent was not null, " +
+                "but this component not related");
+
+    }
+
+    /**
+     * <p>Throw <code>IllegalArgumentException</code> if the specified
+     * component identifier is non-<code>null</code> and not
+     * syntactically valid.  </p>
+     *
+     * @param id The component identifier to test
+     */
+    private static void validateId(String id) {
+
+        if (id == null) {
+            return;
+        }
+        int n = id.length();
+        if (n < 1) {
+            throw new IllegalArgumentException("Empty id attribute is not allowed");
+        }
+        for (int i = 0; i < n; i++) {
+            char c = id.charAt(i);
+            if (i == 0) {
+                if (!Character.isLetter(c) && (c != '_')) {
+                    throw new IllegalArgumentException(id);
+                }
+            } else {
+                if (!Character.isLetter(c) &&
+                        !Character.isDigit(c) &&
+                        (c != '-') && (c != '_')) {
+                    throw new IllegalArgumentException(id);
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public UIComponent findComponent(String expr) {
+        if (expr == null) {
+            throw new NullPointerException();
+        }
+
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        final char sepChar = UINamingContainer.getSeparatorChar(ctx);
+        final String SEPARATOR_STRING = String.valueOf(sepChar);
+
+        if (expr.length() == 0) {
+            // if an empty value is provided, fail fast.
+            throw new IllegalArgumentException("\"\"");
+        }
+
+        // Identify the base component from which we will perform our search
+        UIComponent base = this;
+        if (expr.charAt(0) == sepChar) {
+            // Absolute searches start at the root of the tree
+            while (base.getParent() != null) {
+                base = base.getParent();
+            }
+            // Treat remainder of the expression as relative
+            expr = expr.substring(1);
+        } else if (!(base instanceof NamingContainer)) {
+            // Relative expressions start at the closest NamingContainer or root
+            while (base.getParent() != null) {
+                if (base instanceof NamingContainer) {
+                    break;
+                }
+                base = base.getParent();
+            }
+        }
+
+        // Evaluate the search expression (now guaranteed to be relative)
+        UIComponent result = null;
+        String[] segments = expr.split(SEPARATOR_STRING);
+        for (int i = 0, length = (segments.length - 1);
+             i < segments.length;
+             i++, length--) {
+            result = findComponent(base, segments[i], (i == 0));
+            // the first element of the expression may match base.id
+            // (vs. a child if of base)
+            if (i == 0 && result == null &&
+                    segments[i].equals(base.getId())) {
+                result = base;
+            }
+            if (result != null && (!(result instanceof NamingContainer)) && length > 0) {
+                throw new IllegalArgumentException(segments[i]);
+            }
+            if (result == null) {
+                break;
+            }
+            base = result;
+        }
+
+        // Return the final result of our search
+        return (result);
+
+    }
+
+
+    /**
+     * <p>Return the {@link UIComponent} (if any) with the specified
+     * <code>id</code>, searching recursively starting at the specified
+     * <code>base</code>, and examining the base component itself, followed
+     * by examining all the base component's facets and children (unless
+     * the base component is a {@link NamingContainer}, in which case the
+     * recursive scan is skipped.</p>
+     *
+     * @param base Base {@link UIComponent} from which to search
+     * @param id   Component identifier to be matched
+     */
+    private static UIComponent findComponent(UIComponent base,
+                                             String id,
+                                             boolean checkId) {
+        if (checkId && id.equals(base.getId())) {
+            return base;
+        }
+        // Search through our facets and children
+        UIComponent result = null;
+        for (Iterator i = base.getFacetsAndChildren(); i.hasNext();) {
+            UIComponent kid = (UIComponent) i.next();
+            if (!(kid instanceof NamingContainer)) {
+                if (checkId && id.equals(kid.getId())) {
+                    result = kid;
+                    break;
+                }
+                result = findComponent(kid, id, true);
+                if (result != null) {
+                    break;
+                }
+            } else if (id.equals(kid.getId())) {
+                result = kid;
+                break;
+            }
+        }
+        return (result);
+
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @throws NullPointerException {@inheritDoc}
+     * @throws FacesException       {@inheritDoc}
+     * @since 1.2
+     */
+    public boolean invokeOnComponent(FacesContext context, String clientId,
+                                     ContextCallback callback)
+            throws FacesException {
+        return super.invokeOnComponent(context, clientId, callback);
+    }
+
+
+    // ------------------------------------------------ Facet Management Methods
+
+
+    /*
+     * <p>The <code>Map</code> containing our related facet components.</p>
+     */
+    private Map<String, UIComponent> facets = null;
+
+
+    public Map<String, UIComponent> getFacets() {
+
+        if (facets == null) {
+            facets = new FacetsMap(this);
+        }
+        return (facets);
+
+    }
+
+    // Do not allocate the children List to answer this question
+    public int getFacetCount() {
+
+        if (facets != null) {
+            return (facets.size());
+        } else {
+            return (0);
+        }
+
+    }
+
+
+    // Do not allocate the facets Map to answer this question
+    public UIComponent getFacet(String name) {
+
+        if (facets != null) {
+            return (facets.get(name));
+        } else {
+            return (null);
+        }
+
+    }
+
+
+    public Iterator<UIComponent> getFacetsAndChildren() {
+
+        Iterator<UIComponent> result;
+        int childCount = this.getChildCount(),
+                facetCount = this.getFacetCount();
+        // If there are neither facets nor children
+        if (0 == childCount && 0 == facetCount) {
+            result = EMPTY_ITERATOR;
+        }
+        // If there are only facets and no children
+        else if (0 == childCount) {
+            Collection<UIComponent> unmodifiable =
+                    Collections.unmodifiableCollection(getFacets().values());
+            result = unmodifiable.iterator();
+        }
+        // If there are only children and no facets
+        else if (0 == facetCount) {
+            List<UIComponent> unmodifiable =
+                    Collections.unmodifiableList(getChildren());
+            result = unmodifiable.iterator();
+        }
+        // If there are both children and facets
+        else {
+            result = new FacetsAndChildrenIterator(this);
+        }
+        return result;
+    }
+
+
+    // -------------------------------------------- Lifecycle Processing Methods
+
+    /**
+     * @throws AbortProcessingException {@inheritDoc}
+     * @throws IllegalStateException    {@inheritDoc}
+     * @throws NullPointerException     {@inheritDoc}
+     */
+    public void broadcast(FacesEvent event)
+        throws AbortProcessingException {
+
+        if (event == null) {
+            throw new NullPointerException();
+        }
+        if (event instanceof BehaviorEvent) {
+            BehaviorEvent behaviorEvent = (BehaviorEvent) event;
+            Behavior behavior = behaviorEvent.getBehavior();
+            behavior.broadcast(behaviorEvent);
+        }
+
+        if (listeners == null) {
+            return;
+        }
+
+        for (FacesListener listener : listeners.asArray(FacesListener.class)) {
+            if (event.isAppropriateListener(listener)) {
+                event.processListener(listener);
+            }
+        }
+    }
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void decode(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        String rendererType = getRendererType();
+        if (rendererType != null) {
+            Renderer renderer = this.getRenderer(context);
+            if (renderer != null) {
+                renderer.decode(context, this);
+            } else {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("Can't get Renderer for type " + rendererType);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void encodeBegin(FacesContext context) throws IOException {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        pushComponentToEL(context, null);
+
+        if (!isRendered()) {
+            return;
+        }
+
+        context.getApplication().publishEvent(context,
+                                              PreRenderComponentEvent.class,
+                                              this);
+
+        String rendererType = getRendererType();
+        if (rendererType != null) {
+            Renderer renderer = this.getRenderer(context);
+            if (renderer != null) {
+                renderer.encodeBegin(context, this);
+            } else {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("Can't get Renderer for type " + rendererType);
+                }
+            }
+        }
+
+    }
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void encodeChildren(FacesContext context) throws IOException {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!isRendered()) {
+            return;
+        }
+        String rendererType = getRendererType();
+        if (rendererType != null) {
+            Renderer renderer = this.getRenderer(context);
+            if (renderer != null) {
+                renderer.encodeChildren(context, this);
+            }
+            // We've already logged for this component
+        } else {
+            if (getChildCount() > 0) {
+                for (UIComponent child : getChildren()) {
+                    child.encodeAll(context);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * @throws IOException          {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void encodeEnd(FacesContext context) throws IOException {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!isRendered()) {
+            popComponentFromEL(context);
+            return;
+        }
+        String rendererType = getRendererType();
+        if (rendererType != null) {
+            Renderer renderer = this.getRenderer(context);
+            if (renderer != null) {
+                renderer.encodeEnd(context, this);
+            } else {
+                // We've already logged for this component
+            }
+        }
+        popComponentFromEL(context);
+
+    }
+
+    // -------------------------------------------------- Event Listener Methods
+
+    private AttachedObjectListHolder<FacesListener> listeners;
+
+    /**
+     * <p>Add the specified {@link FacesListener} to the set of listeners
+     * registered to receive event notifications from this {@link UIComponent}.
+     * It is expected that {@link UIComponent} classes acting as event sources
+     * will have corresponding typesafe APIs for registering listeners of the
+     * required type, and the implementation of those registration methods
+     * will delegate to this method.  For example:</p>
+     * <pre>
+     * public class FooEvent extends FacesEvent {
+     *   ...
+     *   protected boolean isAppropriateListener(FacesListener listener) {
+     *     return (listener instanceof FooListener);
+     *   }
+     *   protected void processListener(FacesListener listener) {
+     *     ((FooListener) listener).processFoo(this);
+     *   }
+     *   ...
+     * }
+     * <p/>
+     * public interface FooListener extends FacesListener {
+     *   public void processFoo(FooEvent event);
+     * }
+     * <p/>
+     * public class FooComponent extends UIComponentBase {
+     *   ...
+     *   public void addFooListener(FooListener listener) {
+     *     addFacesListener(listener);
+     *   }
+     *   public void removeFooListener(FooListener listener) {
+     *     removeFacesListener(listener);
+     *   }
+     *   ...
+     * }
+     * </pre>
+     *
+     * @param listener The {@link FacesListener} to be registered
+     * @throws NullPointerException if <code>listener</code>
+     *                              is <code>null</code>
+     */
+    protected void addFacesListener(FacesListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+
+        if (listeners == null) {
+            listeners = new AttachedObjectListHolder<FacesListener>();
+        }
+
+        listeners.add(listener);
+
+    }
+
+
+    /**
+     * @throws IllegalArgumentException {@inheritDoc}
+     * @throws NullPointerException     {@inheritDoc}
+     */
+    protected FacesListener[] getFacesListeners(Class clazz) {
+
+        if (clazz == null) {
+            throw new NullPointerException();
+        }
+        if (!FacesListener.class.isAssignableFrom(clazz)) {
+            throw new IllegalArgumentException();
+        }
+
+        if (this.listeners == null) {
+            return (FacesListener[]) Array.newInstance(clazz, 0);
+        }
+        FacesListener[] listeners = this.listeners.asArray(FacesListener.class);
+        if (listeners.length == 0) {
+            return (FacesListener[]) Array.newInstance(clazz, 0);
+        }
+
+        List<FacesListener> results = new ArrayList<FacesListener>(listeners.length);
+        for (FacesListener listener : listeners) {
+            if (((Class<?>) clazz).isAssignableFrom(listener.getClass())) {
+                results.add(listener);
+            }
+        }
+
+        return (results.toArray
+                ((FacesListener[]) Array.newInstance(clazz,
+                        results.size())));
+
+    }
+
+
+    /**
+     * <p>Remove the specified {@link FacesListener} from the set of listeners
+     * registered to receive event notifications from this {@link UIComponent}.
+     *
+     * @param listener The {@link FacesListener} to be deregistered
+     * @throws NullPointerException if <code>listener</code>
+     *                              is <code>null</code>
+     */
+    protected void removeFacesListener(FacesListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+
+        if (listeners != null) {
+            listeners.remove(listener);
+        }
+
+    }
+
+    /**
+     * @throws IllegalStateException {@inheritDoc}
+     * @throws NullPointerException  {@inheritDoc}
+     */
+    public void queueEvent(FacesEvent event) {
+
+        if (event == null) {
+            throw new NullPointerException();
+        }
+        UIComponent parent = getParent();
+        if (parent == null) {
+            throw new IllegalStateException();
+        } else {
+            parent.queueEvent(event);
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_1">Install the listener instance
+     * referenced by argument <code>componentListener</code> as a
+     * listener for events of type <code>eventClass</code> originating
+     * from this specific instance of <code>UIComponent</code>.  The
+     * default implementation creates an inner {@link
+     * SystemEventListener} instance that wraps argument
+     * <code>componentListener</code> as the <code>listener</code>
+     * argument.  This inner class must call through to the argument
+     * <code>componentListener</code> in its implementation of {@link
+     * SystemEventListener#processEvent} and its implementation of
+     * {@link SystemEventListener#isListenerForSource} must return
+     * true if the instance class of this <code>UIComponent</code> is
+     * assignable from the argument to
+     * <code>isListenerForSource</code>.</p>
+     *
+     * @param eventClass the <code>Class</code> of event for which
+     * <code>listener</code> must be fired.
+     * @param componentListener the implementation of {@link
+     * javax.faces.event.ComponentSystemEventListener} whose {@link
+     * javax.faces.event.ComponentSystemEventListener#processEvent} method must be called
+     * when events of type <code>facesEventClass</code> are fired.
+     *
+     * @throws <code>NullPointerException</code> if any of the
+     * arguments are <code>null</code>.
+     *
+     * @since 2.1
+     */
+    public void subscribeToEvent(Class<? extends SystemEvent> eventClass,
+                                 ComponentSystemEventListener componentListener) {
+
+        if (eventClass == null) {
+            throw new NullPointerException();
+        }
+        if (componentListener == null) {
+            throw new NullPointerException();
+        }
+
+        if (initialStateMarked()) {
+            initialState = false;
+        }
+        if (null == listenersByEventClass) {
+            listenersByEventClass = new HashMap<Class<? extends SystemEvent>,
+                                                List<SystemEventListener>>(3, 1.0f);
+        }
+        SystemEventListener facesLifecycleListener =
+              new ComponentSystemEventListenerAdapter(componentListener, this);
+        List<SystemEventListener> listenersForEventClass =
+              listenersByEventClass.get(eventClass);
+        if (listenersForEventClass == null) {
+            listenersForEventClass = new ArrayList<SystemEventListener>(3);
+            listenersByEventClass.put(eventClass, listenersForEventClass);
+        }
+        if (!listenersForEventClass.contains(facesLifecycleListener)) {
+            listenersForEventClass.add(facesLifecycleListener);
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_1">Remove the listener instance
+     *     referenced by argument <code>componentListener</code> as a
+     *     listener for events of type <code>eventClass</code>
+     *     originating from this specific instance of
+     *     <code>UIComponent</code>.  When doing the comparison to
+     *     determine if an existing listener is equal to the argument
+     *     <code>componentListener</code> (and thus must be removed),
+     *     the <code>equals()</code> method on the <em>existing
+     *     listener</em> must be invoked, passing the argument
+     *     <code>componentListener</code>, rather than the other way
+     *     around.</p>
+     *
+     * @param eventClass the <code>Class</code> of event for which
+     * <code>listener</code> must be removed.
+     * @param componentListener the implementation of {@link
+     * ComponentSystemEventListener} whose {@link
+     * ComponentSystemEventListener#processEvent} method must no longer be called
+     * when events of type <code>eventClass</code> are fired.
+     *
+     * @throws <code>NullPointerException</code> if any of the
+     * arguments are <code>null</code>.
+     *
+     * @since 2.1
+     */
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass,
+                                     ComponentSystemEventListener componentListener) {
+
+        if (eventClass == null) {
+            throw new NullPointerException();
+        }
+        if (componentListener == null) {
+            throw new NullPointerException();
+        }
+
+        List<SystemEventListener> listeners =
+              getListenersForEventClass(eventClass);
+        if (listeners != null && !listeners.isEmpty()) {
+            for (Iterator<SystemEventListener> i = listeners.iterator(); i.hasNext();) {
+                SystemEventListener item = i.next();
+                ComponentSystemEventListenerAdapter csla =
+                      (ComponentSystemEventListenerAdapter) item;
+                ComponentSystemEventListener l = csla.getWrapped();
+                if (l.equals(componentListener)) {
+                    i.remove();
+                    break;
+                }
+            }
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_1">Return the
+     * <code>SystemEventListener</code> instances registered on this
+     * <code>UIComponent</code> instance that are interested in events
+     * of type <code>eventClass</code>.</p>
+     *
+     * @param eventClass the <code>Class</code> of event for which the
+     * listeners must be returned.
+
+     * @throws NullPointerException if argument <code>eventClass</code> is <code>null</code>.
+     *
+     * @since 2.1
+     */
+    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> eventClass) {
+
+        if (eventClass == null) {
+            throw new NullPointerException();
+        }
+        List<SystemEventListener> result = null;
+        if (listenersByEventClass != null) {
+            result = listenersByEventClass.get(eventClass);
+        }
+        return result;
+
+    }
+
+
+    // ------------------------------------------------ Lifecycle Phase Handlers
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processDecodes(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Skip processing if our rendered flag is false
+        if (!isRendered()) {
+            return;
+        }
+
+        pushComponentToEL(context, null);
+
+        try {
+            // Process all facets and children of this component
+            Iterator kids = getFacetsAndChildren();
+            while (kids.hasNext()) {
+                UIComponent kid = (UIComponent) kids.next();
+                kid.processDecodes(context);
+            }
+
+            // Process this component itself
+            try {
+                decode(context);
+            } catch (RuntimeException e) {
+                context.renderResponse();
+                throw e;
+            }
+        } finally {
+            popComponentFromEL(context);
+        }
+    }
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processValidators(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Skip processing if our rendered flag is false
+        if (!isRendered()) {
+            return;
+        }
+
+        pushComponentToEL(context, null);
+
+        try {
+            Application app = context.getApplication();
+            app.publishEvent(context, PreValidateEvent.class, this);
+            // Process all the facets and children of this component
+            Iterator kids = getFacetsAndChildren();
+            while (kids.hasNext()) {
+                UIComponent kid = (UIComponent) kids.next();
+                kid.processValidators(context);
+            }
+            app.publishEvent(context, PostValidateEvent.class, this);
+        } finally {
+            popComponentFromEL(context);
+        }
+    }
+
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processUpdates(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Skip processing if our rendered flag is false
+        if (!isRendered()) {
+            return;
+        }
+
+        pushComponentToEL(context, null);
+
+        try {
+            // Process all facets and children of this component
+            Iterator kids = getFacetsAndChildren();
+            while (kids.hasNext()) {
+                UIComponent kid = (UIComponent) kids.next();
+                kid.processUpdates(context);
+
+            }
+        } finally {
+            popComponentFromEL(context);
+        }
+    }
+
+    private static final int MY_STATE = 0;
+    private static final int CHILD_STATE = 1;
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object processSaveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (this.isTransient()) {
+            return null;
+        }
+        Object[] stateStruct = new Object[2];
+        Object[] childState = EMPTY_ARRAY;
+
+        pushComponentToEL(context, null);
+
+        try {
+            // Process this component itself
+            stateStruct[MY_STATE] = saveState(context);
+
+            // determine if we have any children to store
+            int count = this.getChildCount() + this.getFacetCount();
+            if (count > 0) {
+
+                // this arraylist will store state
+                List<Object> stateList = new ArrayList<Object>(count);
+
+                // if we have children, add them to the stateList
+                if (this.getChildCount() > 0) {
+                    Iterator kids = getChildren().iterator();
+                    UIComponent kid;
+                    while (kids.hasNext()) {
+                        kid = (UIComponent) kids.next();
+                        if (!kid.isTransient()) {
+                            stateList.add(kid.processSaveState(context));
+                        }
+                    }
+                }
+
+                // if we have facets, add them to the stateList
+                if (this.getFacetCount() > 0) {
+                    Iterator myFacets = getFacets().entrySet().iterator();
+                    UIComponent facet;
+                    Object facetState;
+                    Object[] facetSaveState;
+                    Map.Entry entry;
+                    while (myFacets.hasNext()) {
+                        entry = (Map.Entry) myFacets.next();
+                        facet = (UIComponent) entry.getValue();
+                        if (!facet.isTransient()) {
+                            facetState = facet.processSaveState(context);
+                            facetSaveState = new Object[2];
+                            facetSaveState[0] = entry.getKey();
+                            facetSaveState[1] = facetState;
+                            stateList.add(facetSaveState);
+                        }
+                    }
+                }
+
+                // finally, capture the stateList and replace the original,
+                // EMPTY_OBJECT_ARRAY Object array
+                childState = stateList.toArray();
+            }
+        } finally {
+            popComponentFromEL(context);
+        }
+
+        stateStruct[CHILD_STATE] = childState;
+        return stateStruct;
+    }
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processRestoreState(FacesContext context,
+                                    Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        pushComponentToEL(context, null);
+
+        try {
+            Object[] stateStruct = (Object[]) state;
+            Object[] childState = (Object[]) stateStruct[CHILD_STATE];
+
+            // Process this component itself
+            restoreState(context, stateStruct[MY_STATE]);
+
+            int i = 0;
+
+            // Process all the children of this component
+            if (this.getChildCount() > 0) {
+                for (UIComponent kid : getChildren()) {
+                    if (kid.isTransient()) {
+                        continue;
+                    }
+                    Object currentState = childState[i++];
+                    if (currentState == null) {
+                        continue;
+                    }
+                    kid.processRestoreState(context, currentState);
+                }
+            }
+
+            // process all of the facets of this component
+            if (this.getFacetCount() > 0) {
+                int facetsSize = getFacets().size();
+                int j = 0;
+                Object[] facetSaveState;
+                String facetName;
+                UIComponent facet;
+                Object facetState;
+                while (j < facetsSize) {
+                    if (null != (facetSaveState = (Object[]) childState[i++])) {
+                        facetName = (String) facetSaveState[0];
+                        facetState = facetSaveState[1];
+                        facet = getFacets().get(facetName);
+                        facet.processRestoreState(context, facetState);
+                    }
+                    ++j;
+                }
+            }
+        } finally {
+            popComponentFromEL(context);
+        }
+    }
+
+    // ------------------------------------------------------- Protected Methods
+
+    protected FacesContext getFacesContext() {
+
+        // PENDING(edburns): we can't use the cache ivar because we
+        // don't always know when to clear it.  For example, in the
+        // "save state in server" case, the UIComponent instances stick
+        // around between requests, yielding stale facesContext
+        // references.  If there was some way to clear the facesContext
+        // cache ivar for each node in the tree *after* the
+        // render-response phase, then we could keep a cache ivar.  As
+        // it is now, we must always use the Thread Local Storage
+        // solution.
+
+        return FacesContext.getCurrentInstance();
+
+    }
+
+
+    protected Renderer getRenderer(FacesContext context) {
+
+        String rendererType = getRendererType();
+        Renderer result = null;
+        if (rendererType != null) {
+            result = context.getRenderKit().getRenderer(getFamily(),
+                    rendererType);
+            if (null == result) {
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine("Can't get Renderer for type " + rendererType);
+                }
+            }
+        } else {
+            if (LOGGER.isLoggable(Level.FINE)) {
+                String id = this.getId();
+                id = (null != id) ? id : this.getClass().getName();
+                LOGGER.fine("No renderer-type for component " + id);
+            }
+        }
+        return result;
+    }
+
+
+    // ---------------------------------------------- PartialStateHolder Methods
+
+    /**
+     * <p class="changed_added_2_0">For each of the attached objects on
+     * this instance that implement {@link PartialStateHolder}, call
+     * {@link PartialStateHolder#markInitialState} on the attached object.</p> 
+     * @since 2.0
+     */
+    @Override
+    public void markInitialState() {
+        super.markInitialState();
+
+        if (listeners != null) {
+            listeners.markInitialState();
+        }
+        if (listenersByEventClass != null) {
+            for (List<SystemEventListener> listener : listenersByEventClass.values()) {
+                if (listener instanceof PartialStateHolder) {
+                    ((PartialStateHolder) listener).markInitialState();
+                }
+            }
+        }
+        if (behaviors != null) {
+            for (Entry<String, List<ClientBehavior>> entry : behaviors.entrySet()) {
+                for (ClientBehavior behavior : entry.getValue()) {
+                    if (behavior instanceof PartialStateHolder) {
+                        ((PartialStateHolder) behavior).markInitialState();
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">For each of the attached objects on
+     * this instance that implement {@link PartialStateHolder}, call
+     * {@link PartialStateHolder#clearInitialState} on the attached object.</p> 
+     * @since 2.0
+     */
+    @Override
+    public void clearInitialState() {
+        super.clearInitialState();
+        if (listeners != null) {
+            listeners.clearInitialState();
+        }
+        if (listenersByEventClass != null) {
+            for (List<SystemEventListener> listener : listenersByEventClass.values()) {
+                if (listener instanceof PartialStateHolder) {
+                    ((PartialStateHolder) listener).clearInitialState();
+                }
+            }
+        }
+        if (behaviors != null) {
+            for (Entry<String, List<ClientBehavior>> entry : behaviors.entrySet()) {
+                for (ClientBehavior behavior : entry.getValue()) {
+                    if (behavior instanceof PartialStateHolder) {
+                        ((PartialStateHolder) behavior).clearInitialState();
+                    }
+                }
+            }
+        }
+    }
+
+
+    public Object saveState(FacesContext context) {
+        Object[] values = null;
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        assert (!transientFlag);
+        if (initialStateMarked()) {
+            Object savedFacesListeners = ((listeners != null) ? listeners.saveState(context) : null);
+            Object savedSysEventListeners = saveSystemEventListeners(context);
+            Object savedBehaviors = saveBehaviorsState(context);
+            Object savedBindings = null;
+            if (bindings != null) {
+                savedBindings = saveBindingsState(context);
+            }
+            Object savedHelper = null;
+            if (stateHelper != null) {
+                savedHelper = stateHelper.saveState(context);
+            }
+            if (savedFacesListeners == null
+                  && savedSysEventListeners == null
+                  && savedBehaviors == null
+                  && savedBindings == null
+                  && savedHelper == null) {
+                return null;
+            } else {
+                if (values == null || values.length != 5) {
+                    values = new Object[5];
+                }
+
+                // since we're saving partial state, skip id and clientId
+                // as this will be reconstructed from the template execution
+                // when the view is restored
+                values[0] = savedFacesListeners;
+                values[1] = savedSysEventListeners;
+                values[2] = savedBehaviors;
+                values[3] = savedBindings;
+                values[4] = savedHelper;
+                return values;
+            }
+        } else {
+            if (values == null || values.length != 6) {
+                values = new Object[6];
+            }
+
+            values[0] = ((listeners != null) ? listeners.saveState(context) : null);
+            values[1] = saveSystemEventListeners(context);
+            values[2] = saveBehaviorsState(context);
+            if (bindings != null) {
+                values[3] = saveBindingsState(context);
+            }
+            if (stateHelper != null) {
+                values[4] = stateHelper.saveState(context);
+            }
+            values[5] = id;
+            
+            return (values);
+        }
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if (state == null) {
+            return;
+        }
+        Object[] values = (Object[]) state;
+
+        if (values[0] != null) {
+            if (listeners == null) {
+                listeners = new AttachedObjectListHolder<FacesListener>();
+            }
+            listeners.restoreState(context, values[0]);
+        }
+        if (values[1] != null) {
+            Map m = restoreSystemEventListeners(context, values[1]);
+            if (listenersByEventClass != null) {
+                listenersByEventClass.putAll(m);
+            } else {
+                listenersByEventClass = m;
+            }
+        }
+        if (values[2] != null) {
+            behaviors = restoreBehaviorsState(context, values[2]);
+        }
+        if (values[3] != null) {
+            bindings = restoreBindingsState(context, values[3]);
+        }
+        if(values[4] != null) {
+            getStateHelper().restoreState(context, values[4]);
+        }
+        if (values.length == 6) {
+            // this means we've saved full state and need to do a little more
+            // work to finish the job
+            if (values[5] != null) {
+                id = (String) values[5];
+            }
+        }
+
+    }
+
+
+    /**
+     * <p>Flag indicating a desire to now participate in state saving.</p>
+     */
+    private boolean transientFlag = false;
+
+    public boolean isTransient() {
+
+        return (this.transientFlag);
+
+    }
+
+
+    public void setTransient(boolean transientFlag) {
+
+        this.transientFlag = transientFlag;
+
+    }
+
+    // -------------------------------------- Helper methods for state saving
+
+    // --------- methods used by UIComponents to save their attached Objects.
+
+    /**
+     * <p class="changed_modified_2_0">This method is called by {@link
+     * UIComponent} subclasses that want to save one or more attached
+     * objects.  It is a convenience method that does the work of saving
+     * attached objects that may or may not implement the {@link
+     * StateHolder} interface.  Using this method implies the use of
+     * {@link #restoreAttachedState} to restore the attached
+     * objects.</p>
+     * <p/>
+     * <p>This method supports saving attached objects of the following
+     * type: <code>Object</code>s, <code>null</code> values, and <code
+     * class="changed_modified_2_0">Collection</code>s of these objects.
+     * If any contained objects are not <code
+     * class="changed_modified_2_0">Collection</code>s and do not
+     * implement {@link StateHolder}, they must have zero-argument
+     * public constructors.  The exact structure of the returned object
+     * is undefined and opaque, but will be serializable.  </p>
+     *
+     * @param context        the {@link FacesContext} for this request.
+     * @param attachedObject the object, which may be a
+     *                       <code>List</code> instance, or an Object.  The
+     *                       <code>attachedObject</code> (or the elements that comprise
+     *                       <code>attachedObject</code> may implement {@link StateHolder}.
+     * @throws NullPointerException if the context argument is null.
+     */
+
+    public static Object saveAttachedState(FacesContext context,
+                                           Object attachedObject) {
+        if (null == context) {
+            throw new NullPointerException();
+        }
+        if (null == attachedObject) {
+            return null;
+        }
+        Object result;
+        Class mapOrCollectionClass = attachedObject.getClass();
+        boolean newWillSucceed = true;
+        // first, test for newability of the class.
+        try {
+            int modifiers = mapOrCollectionClass.getModifiers();
+            newWillSucceed = Modifier.isPublic(modifiers);
+            if (newWillSucceed) {
+                newWillSucceed = null != mapOrCollectionClass.getConstructor();
+            }
+        } catch (Exception e) {
+            newWillSucceed = false;
+        }
+
+
+        if (newWillSucceed && attachedObject instanceof Collection) {
+            Collection attachedCollection = (Collection) attachedObject;
+            List<StateHolderSaver> resultList = null;
+            for (Object item : attachedCollection) {
+                if (item != null) {
+                    if (item instanceof StateHolder && ((StateHolder) item).isTransient()) {
+                        continue;
+                    }
+                    if (resultList == null) {
+                        resultList = new ArrayList<StateHolderSaver>(attachedCollection.size() + 1);
+                        resultList.add(new StateHolderSaver(context, mapOrCollectionClass));
+                    }
+                    resultList.add(new StateHolderSaver(context, item));
+                }
+            }
+            result = resultList;
+        } else if (newWillSucceed && attachedObject instanceof Map) {
+            Map<Object, Object> attachedMap = (Map<Object, Object>) attachedObject;
+            List<StateHolderSaver> resultList = null;
+            Object key, value;
+            for (Map.Entry<Object, Object> entry : attachedMap.entrySet()) {
+                key = entry.getKey();
+                if (key instanceof StateHolder && ((StateHolder)key).isTransient()) {
+                    continue;
+                }
+                value = entry.getValue();
+                if (value instanceof StateHolder && ((StateHolder)value).isTransient()) {
+                    continue;
+                }
+                if (resultList == null) {
+                    resultList = new ArrayList<StateHolderSaver>(attachedMap.size()*2 + 1);
+                    resultList.add(new StateHolderSaver(context, mapOrCollectionClass));
+                }
+                resultList.add(new StateHolderSaver(context, key));
+                resultList.add(new StateHolderSaver(context, value));
+            }
+            result = resultList;
+        } else {
+            result = new StateHolderSaver(context, attachedObject);
+        }
+
+        return result;
+    }
+
+    /**
+     * <p>This method is called by {@link UIComponent} subclasses that
+     * need to restore the objects they saved using {@link
+     * #saveAttachedState}.  This method is tightly coupled with {@link
+     * #saveAttachedState}.</p>
+     * <p/>
+     * <p>This method supports restoring all attached objects types
+     * supported by {@link #saveAttachedState}.</p>
+     *
+     * @param context  the {@link FacesContext} for this request
+     * @param stateObj the opaque object returned from {@link
+     *                 #saveAttachedState}
+     * @throws NullPointerException  if context is null.
+     * @throws IllegalStateException if the object is not
+     *                               previously returned by {@link #saveAttachedState}.
+     */
+
+    public static Object restoreAttachedState(FacesContext context,
+                                              Object stateObj)
+            throws IllegalStateException {
+        if (null == context) {
+            throw new NullPointerException();
+        }
+        if (null == stateObj) {
+            return null;
+        }
+        Object result;
+
+        if (stateObj instanceof List) {
+            List<StateHolderSaver> stateList = (List<StateHolderSaver>) stateObj;
+            StateHolderSaver collectionSaver = stateList.get(0);
+            Class mapOrCollection = (Class) collectionSaver.restore(context);
+            if (Collection.class.isAssignableFrom(mapOrCollection)) {
+                Collection<Object> retCollection = null;
+                try {
+                    retCollection = (Collection<Object>) mapOrCollection.newInstance();
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, e.toString(), e);
+                    }
+                    throw new IllegalStateException("Unknown object type");
+                }
+                for (int i = 1, len = stateList.size(); i < len; i++) {
+                    try {
+                        retCollection.add(stateList.get(i).restore(context));
+                    } catch (ClassCastException cce) {
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE, cce.toString(), cce);
+                        }
+                        throw new IllegalStateException("Unknown object type");
+                    }
+                }
+                result = retCollection;
+            } else {
+                // If we were doing assertions: assert(mapOrList.isAssignableFrom(Map.class));
+                Map<Object, Object> retMap = null;
+                try {
+                    retMap = (Map<Object,Object>) mapOrCollection.newInstance();
+                } catch (Exception e) {
+                    if (LOGGER.isLoggable(Level.SEVERE)) {
+                        LOGGER.log(Level.SEVERE, e.toString(), e);
+                    }
+                    throw new IllegalStateException("Unknown object type");
+                }
+                for (int i = 1, len = stateList.size(); i < len; i+=2) {
+                    try {
+                        retMap.put(stateList.get(i).restore(context),
+                                   stateList.get(i+1).restore(context));
+                    } catch (ClassCastException cce) {
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE, cce.toString(), cce);
+                        }
+                        throw new IllegalStateException("Unknown object type");
+                    }
+                }
+                result = retMap;
+
+            }
+        } else if (stateObj instanceof StateHolderSaver) {
+            StateHolderSaver saver = (StateHolderSaver) stateObj;
+            result = saver.restore(context);
+        } else {
+            throw new IllegalStateException("Unknown object type");
+        }
+        return result;
+    }
+
+    private static Map<String, ValueExpression> restoreBindingsState(FacesContext context, Object state) {
+
+        if (state == null) {
+            return (null);
+        }
+        Object values[] = (Object[]) state;
+        String names[] = (String[]) values[0];
+        Object states[] = (Object[]) values[1];
+        Map<String, ValueExpression> bindings = new HashMap<String, ValueExpression>(names.length);
+        for (int i = 0; i < names.length; i++) {
+            bindings.put(names[i],
+                    (ValueExpression) restoreAttachedState(context, states[i]));
+        }
+        return (bindings);
+
+    }
+
+
+    private Object saveBindingsState(FacesContext context) {
+
+        if (bindings == null) {
+            return (null);
+        }
+
+        Object values[] = new Object[2];
+        values[0] = bindings.keySet().toArray(new String[bindings.size()]);
+
+        Object[] bindingValues = bindings.values().toArray();
+        for (int i = 0; i < bindingValues.length; i++) {
+            bindingValues[i] = saveAttachedState(context, bindingValues[i]);
+        }
+
+        values[1] = bindingValues;
+
+        return (values);
+
+    }
+
+    private Object saveSystemEventListeners(FacesContext ctx) {
+
+        if (listenersByEventClass == null) {
+            return null;
+        }
+
+        int size = listenersByEventClass.size();
+        Object listeners[][] = new Object[size][2];
+        int idx = 0;
+        boolean savedState = false;
+        for (Entry<Class<? extends SystemEvent>, List<SystemEventListener>> e : listenersByEventClass.entrySet()) {
+            Object[] target = listeners[idx++];
+            target[0] = e.getKey();
+            target[1] = saveAttachedState(ctx, e.getValue());
+            if (target[1] == null) {
+                target[0] = null;
+            } else {
+                savedState = true;
+            }
+        }
+
+        return ((savedState) ? listeners : null);
+
+    }
+
+
+    private Map<Class<? extends SystemEvent>, List<SystemEventListener>> restoreSystemEventListeners(FacesContext ctx, Object state) {
+
+        if (state == null) {
+            return null;
+        }
+
+        Object[][] listeners = (Object[][]) state;
+        Map<Class<? extends SystemEvent>, List<SystemEventListener>> m =
+                new HashMap<Class<? extends SystemEvent>, List<SystemEventListener>>(listeners.length, 1.0f);
+        for (int i = 0, len = listeners.length; i < len; i++) {
+            Object[] source = listeners[i];
+            m.put((Class<? extends SystemEvent>) source[0],
+                    (List<SystemEventListener>) restoreAttachedState(ctx, source[1]));
+        }
+
+        return m;
+    }
+
+
+    Map<String, PropertyDescriptor> getDescriptorMap() {
+        return pdMap;
+    }
+
+
+    private void doPostAddProcessing(FacesContext context, UIComponent added) {
+
+        if (parent.isInView()) {
+            publishAfterViewEvents(context, context.getApplication(), added);
+        }
+
+    }
+
+    private void doPreRemoveProcessing(FacesContext context,
+                                       UIComponent toRemove) {
+
+        if (parent.isInView()) {
+            disconnectFromView(context, context.getApplication(), toRemove);
+        }
+
+    }
+
+    //------------------------------------------------------------- BehaviorHolder stub methods.
+
+    /**
+     * behaviors associated with this component.
+     */
+    private BehaviorsMap behaviors;
+
+    /**
+     * <p class="changed_added_2_0">This is a default implementation of
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder#addClientBehavior}.
+     * <code>UIComponent</code> does not implement the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
+     * but provides default implementations for the methods defined by
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
+     * subclass implementations.   Subclasses that wish to support the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract must
+     * declare that the subclass implements
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must provide
+     * an implementation of
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.</p>
+     *
+     * @param eventName the logical name of the client-side event to attach
+     *        the behavior to.
+     * @param  behavior the {@link javax.faces.component.behavior.Behavior} 
+     * instance to attach for the specified event name.
+     *
+     * @since 2.0
+     */
+    public void addClientBehavior(String eventName, ClientBehavior behavior) {
+        assertClientBehaviorHolder();
+        // First, make sure that the event is supported.  We don't want
+        // to bother attaching behaviors for unsupported events.
+
+        Collection<String> eventNames = getEventNames();
+
+        // getClientEventNames() is spec'ed to require a non-null Set.
+        // If getClientEventNames() returns null, throw an exception
+        // to indicate that the API in not being used properly.
+        if (eventNames == null) {
+            throw new IllegalStateException(
+                "Attempting to add a Behavior to a component " +
+                "that does not support any event types. "     +
+                  "getEventTypes() must return a non-null Set.");
+        }
+
+        if (eventNames.contains(eventName)) {
+
+            if (initialStateMarked()) {
+                // a Behavior has been added dynamically.  Update existing
+                // Behaviors, if any, to save their full state.
+                if (behaviors != null) {
+                    for (Entry<String, List<ClientBehavior>> entry : behaviors
+                          .entrySet()) {
+                        for (ClientBehavior b : entry.getValue()) {
+                            if (b instanceof PartialStateHolder) {
+                                ((PartialStateHolder) behavior).clearInitialState();
+                            }
+                        }
+                    }
+                }
+            }
+            // We've got an event that we support, create our Map
+            // if necessary
+
+            if (null == behaviors) {
+                // Typically we only have a small number of behaviors for
+                // any component - in most cases only 1.  Using a very small
+                // initial capacity so that we keep the footprint to a minimum.
+                Map<String, List<ClientBehavior>> modifiableMap =
+                    new HashMap<String, List<ClientBehavior>>(5,1.0f);
+                behaviors = new BehaviorsMap(modifiableMap);
+            }
+
+            List<ClientBehavior> eventBehaviours = behaviors.get(eventName);
+
+            if (null == eventBehaviours) {
+                // Again using small initial capacity - we typically
+                // only have 1 Behavior per event type.
+                eventBehaviours = new ArrayList<ClientBehavior>(3);
+                behaviors.getModifiableMap().put(eventName, eventBehaviours);
+            }
+
+            eventBehaviours.add(behavior);
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0">This is a default implementation of
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.
+     * <code>UIComponent</code> does not implement the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
+     * but provides default implementations for the methods defined by
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
+     * subclass implementations.   Subclasses that wish to support the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract
+     * must declare that the subclass implements
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must
+     * override this method to return a non-Empty <code>Collection</code>
+     * of the client event names that the component supports.</p>
+     *
+     * @since 2.0
+     */
+    public Collection<String> getEventNames() {
+        assertClientBehaviorHolder();
+        // Note: we intentionally return null here even though this
+        // is not a valid value.  The result is that addClientBehavior()
+        // will fail with an IllegalStateException if getEventNames()
+        // is not overridden.  This should make it obvious to the
+        // component author that something is wrong.
+        return null;
+    }
+
+    /**
+     * <p class="changed_added_2_0">This is a default implementation of
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getClientBehaviors}.
+     * <code>UIComponent</code> does not implement the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
+     * but provides default implementations for the methods defined by
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
+     * subclass implementations.   Subclasses that wish to support the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract
+     * must declare that the subclass implements
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must add
+     * an implementation of
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.</p>
+     *
+     * @since 2.0
+     */
+    public Map<String, List<ClientBehavior>> getClientBehaviors() {
+        if (null == behaviors) {
+            return Collections.emptyMap();
+        }
+
+        return behaviors;
+    }
+
+    /**
+     * <p class="changed_added_2_0">This is a default implementation of
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getDefaultEventName}.
+     * <code>UIComponent</code> does not implement the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
+     * but provides default implementations for the methods defined by
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
+     * subclass implementations.   Subclasses that wish to support the
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract
+     * must declare that the subclass implements
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must
+     * provide an implementation of
+     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.</p>
+     */
+    public String getDefaultEventName() {
+        assertClientBehaviorHolder();
+        // Our default implementation just returns null - no default
+        // event name;
+        return null;
+    }
+
+    /**
+     * {@link UIComponentBase} has stub methods from the {@link ClientBehaviorHolder} interface,
+     * but these method should be used only with componets that really implement holder interface.
+     * For an any other classes this method throws {@link IllegalStateException}
+     * @throws IllegalStateException
+     */
+    private void assertClientBehaviorHolder() {
+        if (!isClientBehaviorHolder()) {
+            throw new IllegalStateException(
+                "Attempting to use a Behavior feature with a component " +
+                "that does not support any event types. "     +
+                "Component must implement BehaviourHolder interface.");
+        }
+    }
+
+    /**
+     * @return true if component implements {@link ClientBehaviorHolder} interface.
+     */
+    private boolean isClientBehaviorHolder() {
+        return ClientBehaviorHolder.class.isInstance(this);
+    }
+
+    /**
+     * Save state of the behaviors map.
+     * @param context the {@link FacesContext} for this request.
+     * @return map converted to the array of <code>Object</code> or null if no behaviors have been set.
+     */
+    private Object saveBehaviorsState(FacesContext context){
+        Object state = null;
+        if (null != behaviors && behaviors.size() >0){
+            boolean stateWritten = false;
+            Object[] attachedBehaviors = new Object[behaviors.size()];
+            int i = 0;
+            for (List<ClientBehavior> eventBehaviors : behaviors.values()) {
+                // we need to take different action depending on whether
+                // or not markInitialState() was called.  If it's not called,
+                // assume JSF 1.2 style state saving and call through to
+                // saveAttachedState(), otherwise, call saveState() on the
+                // behaviors directly.
+                Object[] attachedEventBehaviors = new Object[eventBehaviors.size()];
+                for (int j = 0; j < attachedEventBehaviors.length; j++) {
+                    attachedEventBehaviors[j] = ((initialStateMarked())
+                                                 ? saveBehavior(context, eventBehaviors.get(j))
+                                                 : saveAttachedState(context, eventBehaviors.get(j)));
+                    if (!stateWritten) {
+                        stateWritten = (attachedEventBehaviors[j] != null);
+                    }
+                }
+                attachedBehaviors[i++] = attachedEventBehaviors;
+            }
+            if (stateWritten) {
+                state = new Object[]{behaviors.keySet().toArray(new String[behaviors.size()]),attachedBehaviors};
+            }
+        }
+        return state;
+    }
+
+    /**
+     * @param context the {@link FacesContext} for this request.
+     * @param state saved state of the {@link Behavior}'s attached to the component.
+     * @return restored <code>Map</code> of the behaviors.
+     */
+    private BehaviorsMap restoreBehaviorsState(FacesContext context, Object state) {
+
+        if (null != state) {
+            Object[] values = (Object[]) state;
+            String[] names = (String[])values[0];
+            Object[] attachedBehaviors = (Object[]) values[1];
+            // we need to take different action depending on whether
+            // or not markInitialState() was called.  If it's not called,
+            // assume JSF 1.2 style state saving and call through to
+            // restoreAttachedState(), otherwise, call restoreState() on the
+            // behaviors directly.
+            if (!initialStateMarked()) {
+                Map<String, List<ClientBehavior>> modifiableMap = new HashMap<String, List<ClientBehavior>>(
+                      names.length,
+                      1.0f);
+                for (int i = 0; i < attachedBehaviors.length; i++) {
+                    Object[] attachedEventBehaviors = (Object[]) attachedBehaviors[i];
+                    ArrayList<ClientBehavior> eventBehaviors =
+                          new ArrayList<ClientBehavior>(attachedBehaviors.length);
+                    for (int j = 0; j < attachedEventBehaviors.length; j++) {
+                        eventBehaviors.add((ClientBehavior) restoreAttachedState(context,
+                                                                                 attachedEventBehaviors[j]));
+                    }
+
+                    modifiableMap.put(names[i], eventBehaviors);
+                }
+
+                return new BehaviorsMap(modifiableMap);
+            } else {
+                for (int i = 0, len = names.length; i < len; i++) {
+                    // assume the behaviors have already been populated by
+                    // execution of the template.  Process the state in the
+                    // same order that the names were saved.
+                    if (behaviors != null) {
+                        List<ClientBehavior> existingBehaviors = behaviors.get(names[i]);
+                        restoreBehaviors(context, existingBehaviors, (Object[]) attachedBehaviors[i]);
+                    }
+                }
+                return behaviors;
+            }
+        }
+        return null;
+    }
+
+    private Object saveBehavior(FacesContext ctx, ClientBehavior behavior) {
+
+        // if the Behavior isn't a StateHolder, do nothing as it will be
+        // added to the BehaviorMap when the template is re-executed.
+        return ((behavior instanceof StateHolder)
+                ? ((StateHolder) behavior).saveState(ctx)
+                : null);
+
+    }
+
+
+    private void restoreBehaviors(FacesContext ctx, List<ClientBehavior> existingBehaviors, Object[] state) {
+
+        // this method assumes a one to one correspondence in both length and
+        // order.
+        for (int i = 0, len = state.length; i < len; i++) {
+            ClientBehavior behavior = existingBehaviors.get(i);
+            if (state[i] == null) {
+                // nothing to do...move on
+                continue;
+            }
+            // if the Behavior is a StateHolder, invoke restoreState
+            // passing in the current state.  If it's not, just ignore
+            // it and move along.
+            if (behavior instanceof StateHolder) {
+            		if (state[i] instanceof StateHolderSaver) {
+            			((StateHolderSaver)state[i]).restore(ctx);
+            		} else {
+            			((StateHolder) behavior).restoreState(ctx, state[i]);
+            		}
+            }
+        }
+    }
+
+
+    private static void publishAfterViewEvents(FacesContext context,
+                                               Application application,
+                                               UIComponent component) {
+
+        component.setInView(true);
+        try {
+            component.pushComponentToEL(context, component);
+            application.publishEvent(context, PostAddToViewEvent.class, component);
+            if (component.getChildCount() > 0) {
+                Collection<UIComponent> clist =
+                      new ArrayList<UIComponent>(component.getChildren());
+                for (UIComponent c : clist) {
+                    publishAfterViewEvents(context, application, c);
+                }
+            }
+
+            if (component.getFacetCount() > 0) {
+                Collection<UIComponent> clist =
+                      new ArrayList<UIComponent>(component.getFacets().values());
+                for (UIComponent c : clist) {
+                    publishAfterViewEvents(context, application, c);
+                }
+            }
+        } finally {
+            component.popComponentFromEL(context);
+        }
+
+    }
+
+
+    private static void disconnectFromView(FacesContext context,
+                                           Application application,
+                                           UIComponent component) {
+
+        application.publishEvent(context,
+                                 PreRemoveFromViewEvent.class,
+                                 component);
+        component.setInView(false);
+        component.compositeParent = null;
+        if (component.getChildCount() > 0) {
+            List<UIComponent> children = component.getChildren();
+            for (UIComponent c : children) {
+                disconnectFromView(context, application, c);
+            }
+        }
+        if (component.getFacetCount() > 0) {
+            Map<String, UIComponent> facets = component.getFacets();
+            for (UIComponent c : facets.values()) {
+                disconnectFromView(context, application, c);
+            }
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Classes
+
+    // For state saving
+    private final static Object[] EMPTY_ARRAY = new Object[0];
+
+    // Empty iterator for short circuiting operations
+    private final static Iterator<UIComponent> EMPTY_ITERATOR = new Iterator<UIComponent>() {
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+        public UIComponent next() {
+            throw new NoSuchElementException("Empty Iterator");
+        }
+
+        public boolean hasNext() {
+            return false;
+        }
+    };
+
+    // Private implementation of Map that supports the functionality
+    // required by UIComponent.getFacets()
+    // HISTORY:
+    //   Versions 1.333 and older used inheritence to provide the
+    //     basic map functionality.  This was wasteful since a
+    //     component could be completely configured via ValueExpressions
+    //     or (Bindings) which means an EMPTY_OBJECT_ARRAY Map would always be
+    //     present when it wasn't needed.  By using composition,
+    //     we control if and when the Map is instantiated thereby
+    //     reducing uneeded object allocation.  This change also
+    //     has a nice side effect in state saving since we no
+    //     longer need to duplicate the map, we just provide the
+    //     private 'attributes' map directly to the state saving process.
+    private static class AttributesMap implements Map<String, Object>, Serializable {
+
+        // this KEY is special to the AttributesMap - this allows the implementation
+        // to access the the List containing the attributes that have been set
+        private static final String ATTRIBUTES_THAT_ARE_SET_KEY =
+                UIComponentBase.class.getName() + ".attributesThatAreSet";
+
+        //private Map<String, Object> attributes;
+        private transient Map<String, PropertyDescriptor> pdMap;
+        private transient UIComponent component;
+        private static final long serialVersionUID = -6773035086539772945L;
+
+        // -------------------------------------------------------- Constructors
+
+        private AttributesMap(UIComponent component) {
+
+            this.component = component;
+            this.pdMap = ((UIComponentBase) component).getDescriptorMap();
+
+        }
+
+        public boolean containsKey(Object keyObj) {
+            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(keyObj)) {
+                return true;
+            }
+            String key = (String) keyObj;
+            PropertyDescriptor pd =
+                    getPropertyDescriptor(key);
+            if (pd == null) {
+                Map<String,Object> attributes = (Map<String,Object>)
+                      component.getStateHelper().get(PropertyKeys.attributes);
+                if (attributes != null) {
+                    return attributes.containsKey(key);
+                } else {
+                    return (false);
+                }
+            } else {
+                return (false);
+            }
+        }
+
+        public Object get(Object keyObj) {
+            String key = (String) keyObj;
+            Object result = null;
+            if (key == null) {
+                throw new NullPointerException();
+            }
+            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(key)) {
+                result = component.getStateHelper().get(UIComponent.PropertyKeysPrivate.attributesThatAreSet);
+            }
+            Map<String,Object> attributes = (Map<String,Object>)
+                  component.getStateHelper().get(PropertyKeys.attributes);
+            if (null == result) {
+                PropertyDescriptor pd =
+                        getPropertyDescriptor(key);
+                if (pd != null) {
+                    try {
+                        Method readMethod = pd.getReadMethod();
+                        if (readMethod != null) {
+                            result = (readMethod.invoke(component,
+                                    EMPTY_OBJECT_ARRAY));
+                        } else {
+                            throw new IllegalArgumentException(key);
+                        }
+                    } catch (IllegalAccessException e) {
+                        throw new FacesException(e);
+                    } catch (InvocationTargetException e) {
+                        throw new FacesException(e.getTargetException());
+                    }
+                } else if (attributes != null) {
+                    if (attributes.containsKey(key)) {
+                        result = attributes.get(key);
+                    }
+                }
+            }
+            if (null == result) {
+                ValueExpression ve = component.getValueExpression(key);
+                if (ve != null) {
+                    try {
+                        result = ve.getValue(component.getFacesContext().getELContext());
+                    } catch (ELException e) {
+                        throw new FacesException(e);
+                    }
+                }
+            }
+
+            return result;
+        }
+
+        public Object put(String keyValue, Object value) {
+            if (keyValue == null) {
+                throw new NullPointerException();
+            }
+
+            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(keyValue)) {
+                if (component.attributesThatAreSet == null) {
+                    if (value instanceof List) {
+                        component.getStateHelper().put(UIComponent.PropertyKeysPrivate.attributesThatAreSet,
+                                                       value);
+                    }
+                }
+                return null;
+            }
+
+            PropertyDescriptor pd =
+                    getPropertyDescriptor(keyValue);
+            if (pd != null) {
+                try {
+                    Object result = null;
+                    Method readMethod = pd.getReadMethod();
+                    if (readMethod != null) {
+                        result = readMethod.invoke
+                                (component, EMPTY_OBJECT_ARRAY);
+                    }
+                    Method writeMethod = pd.getWriteMethod();
+                    if (writeMethod != null) {
+                        writeMethod.invoke
+                                (component, value);
+                    } else {
+                        // TODO: i18n
+                        throw new IllegalArgumentException("Setter not found for property " + keyValue);
+                    }
+                    return (result);
+                } catch (IllegalAccessException e) {
+                    throw new FacesException(e);
+                } catch (InvocationTargetException e) {
+                    throw new FacesException
+                            (e.getTargetException());
+                }
+            } else {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+
+                List<String> sProperties =
+                      (List<String>) component.getStateHelper().get(PropertyKeysPrivate.attributesThatAreSet);
+                if (sProperties == null) {
+                    component.getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, keyValue);
+                } else if (!sProperties.contains(keyValue)) {
+                    component.getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, keyValue);
+                }
+                return putAttribute(keyValue, value);
+            }
+        }
+
+        public void putAll(Map<? extends String, ?> map) {
+            if (map == null) {
+                throw new NullPointerException();
+            }
+
+            for (Map.Entry<? extends String, ?> entry : map.entrySet()) {
+                this.put(entry.getKey(), entry.getValue());
+            }
+        }
+
+        public Object remove(Object keyObj) {
+            String key = (String) keyObj;
+            if (key == null) {
+                throw new NullPointerException();
+            }
+            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(key)) {
+                return null;
+            }
+            PropertyDescriptor pd =
+                    getPropertyDescriptor(key);
+            if (pd != null) {
+                throw new IllegalArgumentException(key);
+            } else {
+                Map<String,Object> attributes = getAttributes();
+                if (attributes != null) {
+                    component.getStateHelper().remove(UIComponent.PropertyKeysPrivate.attributesThatAreSet,
+                                                      key);
+                    return (component.getStateHelper().remove(PropertyKeys.attributes,
+                                                              key));
+                } else {
+                    return null;
+                }
+            }
+        }
+
+
+        public int size() {
+            Map attributes = getAttributes();
+            return (attributes != null ? attributes.size() : 0);
+        }
+
+        public boolean isEmpty() {
+            Map attributes = getAttributes();
+            return (attributes == null || attributes.isEmpty());
+        }
+
+        public boolean containsValue(java.lang.Object value) {
+            Map attributes= getAttributes();
+            return (attributes != null && attributes.containsValue(value));
+        }
+
+        public void clear() {
+            component.getStateHelper().remove(PropertyKeys.attributes);
+            component.getStateHelper().remove(PropertyKeysPrivate.attributesThatAreSet);
+        }
+
+        public Set<String> keySet() {
+            Map<String,Object> attributes = getAttributes();
+            if (attributes != null)
+                return Collections.unmodifiableSet(attributes.keySet());
+            return Collections.emptySet();
+        }
+
+        public Collection<Object> values() {
+            Map<String,Object> attributes = getAttributes();
+            if (attributes != null)
+                return Collections.unmodifiableCollection(attributes.values());
+            return Collections.emptyList();
+        }
+
+        public Set<Entry<String, Object>> entrySet() {
+            Map<String,Object> attributes = getAttributes();
+            if (attributes != null)
+                return Collections.unmodifiableSet(attributes.entrySet());
+            return Collections.emptySet();
+        }
+
+        public boolean equals(Object o) {
+            if (o == this) {
+                return true;
+            }
+
+            if (!(o instanceof Map)) {
+                return false;
+            }
+            Map t = (Map) o;
+            if (t.size() != size()) {
+                return false;
+            }
+
+            try {
+                for (Object e : entrySet()) {
+                    Entry entry = (Entry) e;
+                    Object key = entry.getKey();
+                    Object value = entry.getValue();
+                    if (value == null) {
+                        if (!(t.get(key) == null && t.containsKey(key))) {
+                            return false;
+                        }
+                    } else {
+                        if (!value.equals(t.get(key))) {
+                            return false;
+                        }
+                    }
+                }
+            } catch (ClassCastException unused) {
+                return false;
+            } catch (NullPointerException unused) {
+                return false;
+            }
+
+            return true;
+        }
+
+
+        public int hashCode() {
+            int h = 0;
+            for (Object o : entrySet()) {
+                h += o.hashCode();
+            }
+            return h;
+        }
+
+        private Map<String,Object> getAttributes() {
+            return (Map<String,Object>) component.getStateHelper().get(
+                  PropertyKeys.attributes);
+        }
+
+        private Object putAttribute(String key, Object value) {
+            return component.getStateHelper().put(PropertyKeys.attributes,
+                                                  key,
+                                                  value);
+        }
+
+
+        /**
+         * <p>Return the <code>PropertyDescriptor</code> for the specified
+         * property name for this {@link UIComponent}'s implementation class,
+         * if any; otherwise, return <code>null</code>.</p>
+         *
+         * @param name Name of the property to return a descriptor for
+         * @throws FacesException if an introspection exception occurs
+         */
+        PropertyDescriptor getPropertyDescriptor(String name) {
+            if (pdMap != null) {
+                return (pdMap.get(name));
+            }
+            return (null);
+        }
+
+        // ----------------------------------------------- Serialization Methods
+
+        // This is dependent on serialization occuring with in a
+        // a Faces request, however, since UIComponentBase.{save,restore}State()
+        // doesn't actually serialize the AttributesMap, these methods are here
+        // purely to be good citizens.
+
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            out.writeObject(component.getClass());
+            //noinspection NonSerializableObjectPassedToObjectStream
+            out.writeObject(component.saveState(FacesContext.getCurrentInstance()));
+        }
+
+        private void readObject(ObjectInputStream in)
+                throws IOException, ClassNotFoundException {
+            //noinspection unchecked
+            Class clazz = (Class) in.readObject();
+            try {
+                component = (UIComponent) clazz.newInstance();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            component.restoreState(FacesContext.getCurrentInstance(), in.readObject());
+        }
+    }
+
+
+    // Private implementation of List that supports the functionality
+    // required by UIComponent.getChildren()
+    private static class ChildrenList extends ArrayList<UIComponent> {
+
+        private UIComponent component;
+
+        public ChildrenList(UIComponent component) {
+            super(6);
+            this.component = component;
+        }
+
+        public void add(int index, UIComponent element) {
+            if (element == null) {
+                throw new NullPointerException();
+            } else if ((index < 0) || (index > size())) {
+                throw new IndexOutOfBoundsException();
+            } else {
+                eraseParent(element);
+                super.add(index, element);
+                element.setParent(component);
+
+            }
+        }
+
+        public boolean add(UIComponent element) {
+            if (element == null) {
+                throw new NullPointerException();
+            } else {
+                eraseParent(element);
+                boolean result = super.add(element);
+                element.setParent(component);
+                return result;
+            }
+        }
+
+        public boolean addAll(Collection<? extends UIComponent> collection) {
+            Iterator<UIComponent> elements =
+                    (new ArrayList<UIComponent>(collection)).iterator();
+            boolean changed = false;
+            while (elements.hasNext()) {
+                UIComponent element = elements.next();
+                if (element == null) {
+                    throw new NullPointerException();
+                } else {
+                    add(element);
+                    changed = true;
+                }
+            }
+            return (changed);
+        }
+
+        public boolean addAll(int index, Collection<? extends UIComponent> collection) {
+            Iterator<UIComponent> elements =
+                    (new ArrayList<UIComponent>(collection)).iterator();
+            boolean changed = false;
+            while (elements.hasNext()) {
+                UIComponent element = elements.next();
+                if (element == null) {
+                    throw new NullPointerException();
+                } else {
+                    add(index++, element);
+                    changed = true;
+                }
+            }
+            return (changed);
+        }
+
+        public void clear() {
+            int n = size();
+            if (n < 1) {
+                return;
+            }
+            for (int i = 0; i < n; i++) {
+                UIComponent child = get(i);
+                child.setParent(null);
+            }
+            super.clear();
+        }
+
+        public Iterator<UIComponent> iterator() {
+            return (new ChildrenListIterator(this));
+        }
+
+        public ListIterator<UIComponent> listIterator() {
+            return (new ChildrenListIterator(this));
+        }
+
+        public ListIterator<UIComponent> listIterator(int index) {
+            return (new ChildrenListIterator(this, index));
+        }
+
+        public UIComponent remove(int index) {
+            UIComponent child = get(index);
+            child.setParent(null);
+            super.remove(index);
+            return (child);
+        }
+
+        public boolean remove(Object elementObj) {
+            UIComponent element = (UIComponent) elementObj;
+            if (element == null) {
+                throw new NullPointerException();
+            }
+
+            if (super.indexOf(element) != -1) {
+                element.setParent(null);
+            }            
+            if (super.remove(element)) {
+                return (true);
+            } else {
+                return (false);
+            }
+        }
+
+        public boolean removeAll(Collection<?> collection) {
+            boolean result = false;
+            for (Object elements : collection) {
+                if (remove(elements)) {
+                    result = true;
+                }
+            }
+            return (result);
+        }
+
+        public boolean retainAll(Collection<?> collection) {
+            boolean modified = false;
+            Iterator<?> items = iterator();
+            while (items.hasNext()) {
+                if (!collection.contains(items.next())) {
+                    items.remove();
+                    modified = true;
+                }
+            }
+            return (modified);
+        }
+
+        public UIComponent set(int index, UIComponent element) {
+            if (element == null) {
+                throw new NullPointerException();
+            } else if ((index < 0) || (index >= size())) {
+                throw new IndexOutOfBoundsException();
+            } else {
+                eraseParent(element);
+                UIComponent previous = get(index);
+                super.set(index, element);
+                previous.setParent(null);
+                element.setParent(component);
+                return (previous);
+            }
+        }
+    }
+
+
+    // Private implementation of ListIterator for ChildrenList
+    private static class ChildrenListIterator implements ListIterator<UIComponent> {
+
+
+        public ChildrenListIterator(ChildrenList list) {
+            this.list = list;
+            this.index = 0;
+        }
+
+        public ChildrenListIterator(ChildrenList list, int index) {
+            this.list = list;
+            if ((index < 0) || (index > list.size())) {
+                throw new IndexOutOfBoundsException(String.valueOf(index));
+            } else {
+                this.index = index;
+            }
+        }
+
+
+        private ChildrenList list;
+        private int index;
+        private int last = -1; // Index last returned by next() or previous()
+
+        // Iterator methods
+
+        public boolean hasNext() {
+            return (index < list.size());
+        }
+
+        public UIComponent next() {
+            try {
+                UIComponent o = list.get(index);
+                last = index++;
+                return (o);
+            } catch (IndexOutOfBoundsException e) {
+                throw new NoSuchElementException(String.valueOf(index));
+            }
+        }
+
+        public void remove() {
+            if (last == -1) {
+                throw new IllegalStateException();
+            }
+            list.remove(last);
+            if (last < index) {
+                index--;
+            }
+            last = -1;
+        }
+
+        // ListIterator methods
+
+        public void add(UIComponent o) {
+            last = -1;
+            list.add(index++, o);
+        }
+
+        public boolean hasPrevious() {
+            return (index > 1);
+        }
+
+        public int nextIndex() {
+            return (index);
+        }
+
+        public UIComponent previous() {
+            try {
+                int current = index - 1;
+                UIComponent o = list.get(current);
+                last = current;
+                index = current;
+                return (o);
+            } catch (IndexOutOfBoundsException e) {
+                throw new NoSuchElementException();
+            }
+        }
+
+        public int previousIndex() {
+            return (index - 1);
+        }
+
+        public void set(UIComponent o) {
+            if (last == -1) {
+                throw new IllegalStateException();
+            }
+            list.set(last, o);
+        }
+
+    }
+
+
+    // Private implementation of Iterator for getFacetsAndChildren()
+    private final static class FacetsAndChildrenIterator implements Iterator<UIComponent> {
+
+        private Iterator<UIComponent> iterator;
+        private boolean childMode;
+        private UIComponent c;
+
+        public FacetsAndChildrenIterator(UIComponent c) {
+            this.c = c;
+            this.childMode = false;
+        }
+
+        private void update() {
+            if (this.iterator == null) {
+                // we must guarantee that 'iterator' is never null
+                if (this.c.getFacetCount() != 0) {
+                    this.iterator = this.c.getFacets().values().iterator();
+                    this.childMode = false;
+                } else if (this.c.getChildCount() != 0) {
+                    this.iterator = this.c.getChildren().iterator();
+                    this.childMode = true;
+                } else {
+                    this.iterator = EMPTY_ITERATOR;
+                    this.childMode = true;
+                }
+            } else if (!this.childMode
+                    && !this.iterator.hasNext()
+                    && this.c.getChildCount() != 0) {
+                this.iterator = this.c.getChildren().iterator();
+                this.childMode = true;
+            }
+        }
+
+        public boolean hasNext() {
+            this.update();
+            return this.iterator.hasNext();
+        }
+
+        public UIComponent next() {
+            this.update();
+            return this.iterator.next();
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    // Private implementation of Map that supports the functionality
+    // required by UIComponent.getFacets()
+    private static class FacetsMap extends HashMap<String, UIComponent> {
+
+        private UIComponent component;
+
+        public FacetsMap(UIComponent component) {
+            super(3, 1.0f);
+            this.component = component;
+        }
+
+        public void clear() {
+            Iterator<String> keys = keySet().iterator();
+            while (keys.hasNext()) {
+                keys.next();
+                keys.remove();
+            }
+            super.clear();
+        }
+
+        public Set<Map.Entry<String, UIComponent>> entrySet() {
+            return (new FacetsMapEntrySet(this));
+        }
+
+        public Set<String> keySet() {
+            return (new FacetsMapKeySet(this));
+        }
+
+        public UIComponent put(String key, UIComponent value) {
+            if ((key == null) || (value == null)) {
+                throw new NullPointerException();
+            } else //noinspection ConstantConditions
+                if (!(key instanceof String) ||
+                        !(value instanceof UIComponent)) {
+                    throw new ClassCastException();
+                }
+            UIComponent previous = super.get(key);
+            if (previous != null) {
+                previous.setParent(null);
+            }
+            eraseParent(value);
+            UIComponent result = super.put(key, value);
+            value.setParent(component);
+
+            return (result);
+        }
+
+        public void putAll(Map<? extends String, ? extends UIComponent> map) {
+            if (map == null) {
+                throw new NullPointerException();
+            }
+            for (Map.Entry<? extends String, ? extends UIComponent> entry : map.entrySet()) {
+                put(entry.getKey(), entry.getValue());
+            }
+        }
+
+        public UIComponent remove(Object key) {
+            UIComponent previous = get(key);
+            if (previous != null) {
+                previous.setParent(null);
+            }
+            super.remove(key);
+            return (previous);
+        }
+
+        public Collection<UIComponent> values() {
+            return (new FacetsMapValues(this));
+        }
+
+        Iterator<String> keySetIterator() {
+            return ((new ArrayList<String>(super.keySet())).iterator());
+        }
+
+    }
+
+
+    // Private implementation of Set for FacetsMap.getEntrySet()
+    private static class FacetsMapEntrySet extends AbstractSet<Map.Entry<String, UIComponent>> {
+
+        public FacetsMapEntrySet(FacetsMap map) {
+            this.map = map;
+        }
+
+        private FacetsMap map = null;
+
+        public boolean add(Map.Entry<String, UIComponent> o) {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean addAll(Collection<? extends Map.Entry<String, UIComponent>> c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void clear() {
+            map.clear();
+        }
+
+        public boolean contains(Object o) {
+            if (o == null) {
+                throw new NullPointerException();
+            }
+            if (!(o instanceof Map.Entry)) {
+                return (false);
+            }
+            Map.Entry e = (Map.Entry) o;
+            Object k = e.getKey();
+            Object v = e.getValue();
+            if (!map.containsKey(k)) {
+                return (false);
+            }
+            if (v == null) {
+                return (map.get(k) == null);
+            } else {
+                return (v.equals(map.get(k)));
+            }
+        }
+
+        public boolean isEmpty() {
+            return (map.isEmpty());
+        }
+
+        public Iterator<Map.Entry<String, UIComponent>> iterator() {
+            return (new FacetsMapEntrySetIterator(map));
+        }
+
+        public boolean remove(Object o) {
+            if (o == null) {
+                throw new NullPointerException();
+            }
+            if (!(o instanceof Map.Entry)) {
+                return (false);
+            }
+            Object k = ((Map.Entry) o).getKey();
+            if (map.containsKey(k)) {
+                map.remove(k);
+                return (true);
+            } else {
+                return (false);
+            }
+        }
+
+        public boolean removeAll(Collection c) {
+            boolean result = false;
+            for (Object element : c) {
+                if (remove(element)) {
+                    result = true;
+                }
+            }
+            return (result);
+        }
+
+        public boolean retainAll(Collection c) {
+            boolean result = false;
+            Iterator v = iterator();
+            while (v.hasNext()) {
+                if (!c.contains(v.next())) {
+                    v.remove();
+                    result = true;
+                }
+            }
+            return (result);
+        }
+
+        public int size() {
+            return (map.size());
+        }
+
+    }
+
+
+    // Private implementation of Map.Entry for FacetsMapEntrySet
+    private static class FacetsMapEntrySetEntry implements Map.Entry<String, UIComponent> {
+
+        public FacetsMapEntrySetEntry(FacetsMap map, String key) {
+            this.map = map;
+            this.key = key;
+        }
+
+        private FacetsMap map;
+        private String key;
+
+        public boolean equals(Object o) {
+            if (o == null) {
+                return (false);
+            }
+            if (!(o instanceof Map.Entry)) {
+                return (false);
+            }
+            Map.Entry e = (Map.Entry) o;
+            if (key == null) {
+                if (e.getKey() != null) {
+                    return (false);
+                }
+            } else {
+                if (!key.equals(e.getKey())) {
+                    return (false);
+                }
+            }
+            UIComponent v = map.get(key);
+            if (v == null) {
+                if (e.getValue() != null) {
+                    return (false);
+                }
+            } else {
+                if (!v.equals(e.getValue())) {
+                    return (false);
+                }
+            }
+            return (true);
+        }
+
+        public String getKey() {
+            return (key);
+        }
+
+        public UIComponent getValue() {
+            return (map.get(key));
+        }
+
+        public int hashCode() {
+            Object value = map.get(key);
+            return (((key == null) ? 0 : key.hashCode()) ^
+                    ((value == null) ? 0 : value.hashCode()));
+        }
+
+        public UIComponent setValue(UIComponent value) {
+            UIComponent previous = map.get(key);
+            map.put(key, value);
+            return (previous);
+        }
+
+    }
+
+
+    // Private implementation of Set for FacetsMap.getEntrySet().iterator()
+    private static class FacetsMapEntrySetIterator implements Iterator<Map.Entry<String, UIComponent>> {
+
+        public FacetsMapEntrySetIterator(FacetsMap map) {
+            this.map = map;
+            this.iterator = map.keySetIterator();
+        }
+
+        private FacetsMap map = null;
+        private Iterator<String> iterator = null;
+        private Map.Entry<String, UIComponent> last = null;
+
+        public boolean hasNext() {
+            return (iterator.hasNext());
+        }
+
+        public Map.Entry<String, UIComponent> next() {
+            last = new FacetsMapEntrySetEntry(map, iterator.next());
+            return (last);
+        }
+
+        public void remove() {
+            if (last == null) {
+                throw new IllegalStateException();
+            }
+            map.remove(((Map.Entry) last).getKey());
+            last = null;
+        }
+
+    }
+
+
+    // Private implementation of Set for FacetsMap.getKeySet()
+    private static class FacetsMapKeySet extends AbstractSet<String> {
+
+        public FacetsMapKeySet(FacetsMap map) {
+            this.map = map;
+        }
+
+        private FacetsMap map = null;
+
+        public boolean add(String o) {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean addAll(Collection<? extends String> c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void clear() {
+            map.clear();
+        }
+
+        public boolean contains(Object o) {
+            return (map.containsKey(o));
+        }
+
+        public boolean containsAll(Collection c) {
+            for (Object item : c) {
+                if (!map.containsKey(item)) {
+                    return (false);
+                }
+            }
+            return (true);
+        }
+
+        public boolean isEmpty() {
+            return (map.isEmpty());
+        }
+
+        public Iterator<String> iterator() {
+            return (new FacetsMapKeySetIterator(map));
+        }
+
+        public boolean remove(Object o) {
+            if (map.containsKey(o)) {
+                map.remove(o);
+                return (true);
+            } else {
+                return (false);
+            }
+        }
+
+        public boolean removeAll(Collection c) {
+            boolean result = false;
+            for (Object item : c) {
+                if (map.containsKey(item)) {
+                    map.remove(item);
+                    result = true;
+                }
+            }
+            return (result);
+        }
+
+        public boolean retainAll(Collection c) {
+            boolean result = false;
+            Iterator v = iterator();
+            while (v.hasNext()) {
+                if (!c.contains(v.next())) {
+                    v.remove();
+                    result = true;
+                }
+            }
+            return (result);
+        }
+
+        public int size() {
+            return (map.size());
+        }
+
+    }
+
+
+    // Private implementation of Set for FacetsMap.getKeySet().iterator()
+    private static class FacetsMapKeySetIterator implements Iterator<String> {
+
+        public FacetsMapKeySetIterator(FacetsMap map) {
+            this.map = map;
+            this.iterator = map.keySetIterator();
+        }
+
+        private FacetsMap map = null;
+        private Iterator<String> iterator = null;
+        private String last = null;
+
+        public boolean hasNext() {
+            return (iterator.hasNext());
+        }
+
+        public String next() {
+            last = iterator.next();
+            return (last);
+        }
+
+        public void remove() {
+            if (last == null) {
+                throw new IllegalStateException();
+            }
+            map.remove(last);
+            last = null;
+        }
+
+    }
+
+
+    // Private implementation of Collection for FacetsMap.values()
+    private static class FacetsMapValues extends AbstractCollection<UIComponent> {
+
+        public FacetsMapValues(FacetsMap map) {
+            this.map = map;
+        }
+
+        private FacetsMap map;
+
+        public boolean add(UIComponent o) {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean addAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void clear() {
+            map.clear();
+        }
+
+        public boolean isEmpty() {
+            return (map.isEmpty());
+        }
+
+        public Iterator<UIComponent> iterator() {
+            return (new FacetsMapValuesIterator(map));
+        }
+
+        public int size() {
+            return (map.size());
+        }
+
+
+    }
+
+
+    // Private implementation of Iterator for FacetsMap.values().iterator()
+    private static class FacetsMapValuesIterator implements Iterator<UIComponent> {
+
+        public FacetsMapValuesIterator(FacetsMap map) {
+            this.map = map;
+            this.iterator = map.keySetIterator();
+        }
+
+        private FacetsMap map = null;
+        private Iterator<String> iterator = null;
+        private Object last = null;
+
+        public boolean hasNext() {
+            return (iterator.hasNext());
+        }
+
+        public UIComponent next() {
+            last = iterator.next();
+            return (map.get(last));
+        }
+
+        public void remove() {
+            if (last == null) {
+                throw new IllegalStateException();
+            }
+            map.remove(last);
+            last = null;
+        }
+
+    }
+
+    // Private static member class that provide access to Behaviors.
+    // Note that this Map must be unmodifiable to the external world,
+    // but UIComponentBase itself needs to be able to write to the Map.
+    // We solve these requirements wrapping the underlying modifiable
+    // Map inside of a unmodifiable map and providing private access to
+    // the underlying (modifable) Map
+    private static class BehaviorsMap extends AbstractMap<String, List<ClientBehavior>>{
+        private Map<String, List<ClientBehavior>> unmodifiableMap;
+        private Map<String, List<ClientBehavior>> modifiableMap;
+
+        private BehaviorsMap(Map<String, List<ClientBehavior>> modifiableMap) {
+            this.modifiableMap = modifiableMap;
+            this.unmodifiableMap = Collections.unmodifiableMap(modifiableMap);
+        }
+
+        public Set<Entry<String, List<ClientBehavior>>> entrySet() {
+            return unmodifiableMap.entrySet();
+        }
+
+        private Map<String, List<ClientBehavior>> getModifiableMap() {
+            return modifiableMap;
+        }
+    }
+
+}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIComponentHierarchy.jpg b/javax/faces/component/UIComponentHierarchy.jpg
similarity index 100%
rename from jsf-api/src/main/java/javax/faces/component/UIComponentHierarchy.jpg
rename to javax/faces/component/UIComponentHierarchy.jpg
diff --git a/javax/faces/component/UIData.java b/javax/faces/component/UIData.java
new file mode 100644
index 0000000..7ff5fd9
--- /dev/null
+++ b/javax/faces/component/UIData.java
@@ -0,0 +1,2506 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.StateManager;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.FacesListener;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PostValidateEvent;
+import javax.faces.event.PreValidateEvent;
+import javax.faces.model.ArrayDataModel;
+import javax.faces.model.CollectionDataModel;
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+import javax.faces.model.ResultDataModel;
+import javax.faces.model.ResultSetDataModel;
+import javax.faces.model.ScalarDataModel;
+import javax.servlet.jsp.jstl.sql.Result;
+
+
+
+// ------------------------------------------------------------- Private Classes
+// Private class to represent saved state information
+
+/**
+ * <p><strong class="changed_modified_2_0_rev_a
+ * changed_modified_2_1 changed_modified_2_2">UIData</strong> is a {@link UIComponent} that
+ * supports data binding to a collection of data objects represented by
+ * a {@link DataModel} instance, which is the current value of this
+ * component itself (typically established via a {@link
+ * ValueExpression}). During iterative processing over the rows of data
+ * in the data model, the object for the current row is exposed as a
+ * request attribute under the key specified by the <code>var</code>
+ * property.</p> <p/> <p>Only children of type {@link UIColumn} should
+ * be processed by renderers associated with this component.</p> <p/>
+ * <p>By default, the <code>rendererType</code> property is set to
+ * <code>javax.faces.Table</code>.  This value can be changed by calling
+ * the <code>setRendererType()</code> method.</p>
+ */
+
+public class UIData extends UIComponentBase
+      implements NamingContainer, UniqueIdVendor {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Data";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Data";
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIData} instance with default property
+     * values.</p>
+     */
+    public UIData() {
+
+        super();
+        setRendererType("javax.faces.Table");
+
+    }
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    /**
+     * Properties that are tracked by state saving.
+     */
+    enum PropertyKeys {
+        /**
+         * <p>The first row number (zero-relative) to be displayed.</p>
+         */
+        first,
+
+        /**
+         * <p>The zero-relative index of the current row number, or -1 for no
+         * current row association.</p>
+         */
+        rowIndex,
+
+        /**
+         * <p>The number of rows to display, or zero for all remaining rows in the
+         * table.</p>
+         */
+        rows,
+
+        /**
+         * <p>This map contains <code>SavedState</code> instances for each
+         * descendant component, keyed by the client identifier of the descendant.
+         * Because descendant client identifiers will contain the
+         * <code>rowIndex</code> value of the parent, per-row state information is
+         * actually preserved.</p>
+         */
+        saved,
+
+        /**
+         * <p>The local value of this {@link UIComponent}.</p>
+         */
+        value,
+
+        /**
+         * <p>The request scope attribute under which the data object for the
+         * current row will be exposed when iterating.</p>
+         */
+        var,
+
+        /**
+         * <p>Last id vended by {@link UIData#createUniqueId(javax.faces.context.FacesContext, String)}.</p>
+         */
+        lastId,
+     
+        /**
+         * 
+         */
+        rowStatePreserved
+    }
+
+
+    /**
+     * <p>The {@link DataModel} associated with this component, lazily
+     * instantiated if requested.  This object is not part of the saved and
+     * restored state of the component.</p>
+     */
+    private DataModel model = null;
+
+
+    /**
+     * <p> During iteration through the rows of this table, This ivar is used to
+     * store the previous "var" value for this instance.  When the row iteration
+     * is complete, this value is restored to the request map.
+     */
+    private Object oldVar;
+
+
+    /**
+     * <p>Holds the base client ID that will be used to generate per-row
+     * client IDs (this will be null if this UIData is nested within another).</p>
+     *
+     * <p>This is not part of the component state.</p>
+     */
+    private String baseClientId = null;
+
+
+    /**
+     * <p> Length of the cached <code>baseClientId</code> plus one for
+     * the {@link UINamingContainer#getSeparatorChar}. </p>
+     *
+     * <p>This is not part of the component state.</p>
+     */
+    private int baseClientIdLength;
+
+
+    /**
+     * <p>StringBuilder used to build per-row client IDs.</p>
+     *
+     * <p>This is not part of the component state.</p>
+     */
+    private StringBuilder clientIdBuilder = null;
+
+
+    /**
+     * <p>Flag indicating whether or not this UIData instance is nested
+     * within another UIData instance</p>
+     *
+     * <p>This is not part of the component state.</p>
+     */
+    private Boolean isNested = null;
+
+    private Map<String, Object> _rowDeltaStates = new HashMap<String, Object>();
+    private Map<String, Object> _rowTransientStates = new HashMap<String, Object>();
+    
+    private Object _initialDescendantFullComponentState = null;
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the zero-relative row number of the first row to be
+     * displayed.</p>
+     */
+    public int getFirst() {
+
+        return (Integer) getStateHelper().eval(PropertyKeys.first, 0);
+
+    }
+
+
+    /**
+     * <p>Set the zero-relative row number of the first row to be
+     * displayed.</p>
+     *
+     * @param first New first row number
+     *
+     * @throws IllegalArgumentException if <code>first</code> is negative
+     */
+    public void setFirst(int first) {
+
+        if (first < 0) {
+            throw new IllegalArgumentException(String.valueOf(first));
+        }
+        getStateHelper().put(PropertyKeys.first, first);
+
+    }
+
+
+    /**
+     * <p>Return the footer facet of this component (if any).  A convenience
+     * method for <code>getFacet("footer")</code>.</p>
+     */
+    public UIComponent getFooter() {
+
+        return getFacet("footer");
+
+    }
+
+
+    /**
+     * <p>Set the footer facet of this component.  A convenience method for
+     * <code>getFacets().put("footer", footer)</code>.</p>
+     *
+     * @param footer the new footer facet
+     *
+     * @throws NullPointerException if <code>footer</code> is <code>null</code>
+     */
+    public void setFooter(UIComponent footer) {
+
+        getFacets().put("footer", footer);
+
+    }
+
+
+    /**
+     * <p>Return the header facet of this component (if any).  A convenience
+     * method for <code>getFacet("header")</code>.</p>
+     */
+    public UIComponent getHeader() {
+
+        return getFacet("header");
+
+    }
+
+
+    /**
+     * <p>Set the header facet of this component.  A convenience method for
+     * <code>getFacets().put("header", header)</code>.</p>
+     *
+     * @param header the new header facet
+     *
+     * @throws NullPointerException if <code>header</code> is <code>null</code>
+     */
+    public void setHeader(UIComponent header) {
+
+        getFacets().put("header", header);
+
+    }
+
+
+    /**
+     * <p>Return a flag indicating whether there is <code>rowData</code>
+     * available at the current <code>rowIndex</code>.  If no
+     * <code>wrappedData</code> is available, return <code>false</code>.</p>
+     *
+     * @throws FacesException if an error occurs getting the row availability
+     */
+    public boolean isRowAvailable() {
+
+        return (getDataModel().isRowAvailable());
+
+    }
+
+
+    /**
+     * <p>Return the number of rows in the underlying data model.  If the number
+     * of available rows is unknown, return -1.</p>
+     *
+     * @throws FacesException if an error occurs getting the row count
+     */
+    public int getRowCount() {
+
+        return (getDataModel().getRowCount());
+
+    }
+
+
+    /**
+     * <p>Return the data object representing the data for the currently
+     * selected row index, if any.</p>
+     *
+     * @throws FacesException           if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available at the
+     *                                  currently specified row index
+     */
+    public Object getRowData() {
+
+        return (getDataModel().getRowData());
+
+    }
+
+
+    /**
+     * <p>Return the zero-relative index of the currently selected row.  If we
+     * are not currently positioned on a row, return -1.  This property is
+     * <strong>not</strong> enabled for value binding expressions.</p>
+     *
+     * @throws FacesException if an error occurs getting the row index
+     */
+    public int getRowIndex() {
+
+        return (Integer) getStateHelper().eval(PropertyKeys.rowIndex, -1);
+
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_1">Set</span> the zero
+     * relative index of the current row, or -1 to indicate that no row
+     * is currently selected, by implementing the following algorithm.
+     * It is possible to set the row index at a value for which the
+     * underlying data collection does not contain any row data.
+     * Therefore, callers may use the <code>isRowAvailable()</code>
+     * method to detect whether row data will be available for use by
+     * the <code>getRowData()</code> method.</p>
+
+     * <p class="changed_added_2_1">To support transient state among
+     * descendents, please consult the specification for {@link
+     * #setRowStatePreserved}, which details the requirements
+     * for <code>setRowIndex()</code> when the
+     * <code>rowStatePreserved</code> JavaBeans property is set
+     * to <code>true</code>.</p>
+
+     * <ul>
+     * <li>Save current state information for all descendant components (as
+     *     described below).
+     * <li>Store the new row index, and pass it on to the {@link DataModel}
+     *     associated with this {@link UIData} instance.</li>
+     * <li>If the new <code>rowIndex</code> value is -1:
+     *     <ul>
+     *     <li>If the <code>var</code> property is not null,
+     *         remove the corresponding request scope attribute (if any).</li>
+     *     <li>Reset the state information for all descendant components
+     *         (as described below).</li>
+     *     </ul></li>
+     * <li>If the new <code>rowIndex</code> value is not -1:
+     *     <ul>
+     *     <li>If the <code>var</code> property is not null, call
+     *         <code>getRowData()</code> and expose the resulting data object
+     *         as a request scope attribute whose key is the <code>var</code>
+     *         property value.</li>
+     *     <li>Reset the state information for all descendant components
+     *         (as described below).
+     *     </ul></li>
+     * </ul>
+     *
+     * <p>To save current state information for all descendant components,
+     * {@link UIData} must maintain per-row information for each descendant
+     * as follows:<p>
+     * <ul>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>, save
+     *     the state of its <code>localValue</code> property.</li>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
+     *     save the state of the <code>localValueSet</code> property.</li>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>, save
+     *     the state of the <code>valid</code> property.</li>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
+     *     save the state of the <code>submittedValue</code> property.</li>
+     * </ul>
+     *
+     * <p>To restore current state information for all descendant components,
+     * {@link UIData} must reference its previously stored information for the
+     * current <code>rowIndex</code> and call setters for each descendant
+     * as follows:</p>
+     * <ul>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
+     *     restore the <code>value</code> property.</li>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
+     *     restore the state of the <code>localValueSet</code> property.</li>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
+     *     restore the state of the <code>valid</code> property.</li>
+     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
+     *     restore the state of the <code>submittedValue</code> property.</li>
+     * </ul>
+     *
+     * @param rowIndex The new row index value, or -1 for no associated row
+     *
+     * @throws FacesException if an error occurs setting the row index
+     * @throws IllegalArgumentException if <code>rowIndex</code>
+     *  is less than -1
+     */
+    public void setRowIndex(int rowIndex)
+    {
+        if (isRowStatePreserved())
+        {
+            setRowIndexRowStatePreserved(rowIndex);
+        }
+        else
+        {
+            setRowIndexWithoutRowStatePreserved(rowIndex);
+        }
+    }
+
+    private void setRowIndexWithoutRowStatePreserved(int rowIndex){
+        // Save current state for the previous row index
+        saveDescendantState();
+
+        // Update to the new row index        
+        //this.rowIndex = rowIndex;
+        getStateHelper().put(PropertyKeys.rowIndex, rowIndex);
+        DataModel localModel = getDataModel();
+        localModel.setRowIndex(rowIndex);
+        
+        // if rowIndex is -1, clear the cache
+        if (rowIndex == -1) {
+            setDataModel(null);
+        }
+        
+        // Clear or expose the current row data as a request scope attribute
+        String var = (String) getStateHelper().get(PropertyKeys.var);
+        if (var != null) {
+            Map<String, Object> requestMap =
+                  getFacesContext().getExternalContext().getRequestMap();
+            if (rowIndex == -1) {
+                oldVar = requestMap.remove(var);
+            } else if (isRowAvailable()) {
+                requestMap.put(var, getRowData());
+            } else {
+                requestMap.remove(var);
+                if (null != oldVar) {
+                    requestMap.put(var, oldVar);
+                    oldVar = null;
+                }
+            }
+        }
+
+        // Reset current state information for the new row index
+        restoreDescendantState();
+
+    }
+    
+    private void setRowIndexRowStatePreserved(int rowIndex)
+    {
+        if (rowIndex < -1)
+        {
+            throw new IllegalArgumentException("rowIndex is less than -1");
+        }
+
+        if (getRowIndex() == rowIndex)
+        {
+            return;
+        }
+
+        FacesContext facesContext = getFacesContext();
+
+        if (_initialDescendantFullComponentState != null)
+        {
+            //Just save the row
+            Map<String, Object> sm = saveFullDescendantComponentStates(facesContext, null, getChildren().iterator(), false);
+            if (sm != null && !sm.isEmpty())
+            {
+                _rowDeltaStates.put(getContainerClientId(facesContext), sm);
+            }
+            if (getRowIndex() != -1)
+            {
+                _rowTransientStates.put(getContainerClientId(facesContext), saveTransientDescendantComponentStates(facesContext, null, getChildren().iterator(), false));
+            }
+        }
+
+        // Update to the new row index        
+        //this.rowIndex = rowIndex;
+        getStateHelper().put(PropertyKeys.rowIndex, rowIndex);
+        DataModel localModel = getDataModel();
+        localModel.setRowIndex(rowIndex);
+        
+        // if rowIndex is -1, clear the cache
+        if (rowIndex == -1) {
+            setDataModel(null);
+        }
+        
+        // Clear or expose the current row data as a request scope attribute
+        String var = (String) getStateHelper().get(PropertyKeys.var);
+        if (var != null) {
+            Map<String, Object> requestMap =
+                  getFacesContext().getExternalContext().getRequestMap();
+            if (rowIndex == -1) {
+                oldVar = requestMap.remove(var);
+            } else if (isRowAvailable()) {
+                requestMap.put(var, getRowData());
+            } else {
+                requestMap.remove(var);
+                if (null != oldVar) {
+                    requestMap.put(var, oldVar);
+                    oldVar = null;
+                }
+            }
+        }
+
+        if (_initialDescendantFullComponentState != null)
+        {
+            Object rowState = _rowDeltaStates.get(getContainerClientId(facesContext));
+            if (rowState == null)
+            {
+                //Restore as original
+                restoreFullDescendantComponentStates(facesContext, getChildren().iterator(), _initialDescendantFullComponentState, false);
+            }
+            else
+            {
+                //Restore first original and then delta
+                restoreFullDescendantComponentDeltaStates(facesContext, getChildren().iterator(), rowState, _initialDescendantFullComponentState, false);
+            }
+            if (getRowIndex() == -1)
+            {
+                restoreTransientDescendantComponentStates(facesContext, getChildren().iterator(), null, false);
+            }
+            else
+            {
+                rowState = _rowTransientStates.get(getContainerClientId(facesContext));
+                if (rowState == null)
+                {
+                    restoreTransientDescendantComponentStates(facesContext, getChildren().iterator(), null, false);
+                }
+                else
+                {
+                    restoreTransientDescendantComponentStates(facesContext, getChildren().iterator(), (Map<String, Object>) rowState, false);
+                }
+            }
+        }
+    }
+
+    /**
+     * <p>Return the number of rows to be displayed, or zero for all remaining
+     * rows in the table.  The default value of this property is zero.</p>
+     */
+    public int getRows() {
+
+
+        return (Integer) getStateHelper().eval(PropertyKeys.rows, 0);
+
+    }
+
+
+    /**
+     * <p>Set the number of rows to be displayed, or zero for all remaining rows
+     * in the table.</p>
+     *
+     * @param rows New number of rows
+     *
+     * @throws IllegalArgumentException if <code>rows</code> is negative
+     */
+    public void setRows(int rows) {
+
+        if (rows < 0) {
+            throw new IllegalArgumentException(String.valueOf(rows));
+        }
+        getStateHelper().put(PropertyKeys.rows, rows);
+
+    }
+
+
+    /**
+     * <p>Return the request-scope attribute under which the data object for the
+     * current row will be exposed when iterating.  This property is
+     * <strong>not</strong> enabled for value binding expressions.</p>
+     */
+    public String getVar() {
+
+        return (String) getStateHelper().get(PropertyKeys.var);
+
+    }
+
+
+    /**
+     * <p>Set the request-scope attribute under which the data object for the
+     * current row wil be exposed when iterating.</p>
+     *
+     * @param var The new request-scope attribute name
+     */
+    public void setVar(String var) {
+
+        getStateHelper().put(PropertyKeys.var, var);
+
+    }
+    
+    /**
+     * <p class="changed_added_2_1">Return the value of the
+     * <code>rowStatePreserved</code> JavaBeans property. See
+     * {@link #setRowStatePreserved}.</p>
+     *
+     * @since 2.1
+     */
+
+    public boolean isRowStatePreserved()
+    {
+        Boolean b = (Boolean) getStateHelper().get(PropertyKeys.rowStatePreserved);
+        return b == null ? false : b.booleanValue(); 
+    }
+
+    /**
+     * <p class="changed_added_2_1">If this property is set to
+     * <code>true</code>, the <code>UIData</code> must take steps to
+     * ensure that modifications to its iterated children will be
+     * preserved on a per-row basis.  This allows applications to modify
+     * component properties, such as the style-class, for a specific
+     * row, rather than having such modifications apply to all rows.</p>
+
+     * <div class="changed_added_2_1">
+
+     * <p>To accomplish this, <code>UIData</code> must call {@link
+     * StateHolder#saveState} and {@link
+     * TransientStateHolder#saveTransientState} on its children to
+     * capture their state on exiting each row.  When re-entering the
+     * row, {@link StateHolder#restoreState} and {@link
+     * TransientStateHolder#restoreTransientState} must be called in
+     * order to reinitialize the children to the correct state for the
+     * new row.  All of this action must take place during the
+     * processing of {@link #setRowIndex}.</p>
+
+     * <p>Users should consider enabling this feature for cases where
+     * it is necessary to modify properties of <code>UIData</code>'s
+     * children in a row-specific way.  Note, however, that row-level
+     * state saving/restoring does add overhead.  As such, this feature
+     * should be used judiciously.</p>
+
+     * </div>
+     *
+     *
+     * @since 2.1
+     */
+    
+    public void setRowStatePreserved(boolean preserveComponentState)
+    {
+        getStateHelper().put(PropertyKeys.rowStatePreserved, preserveComponentState);
+    }
+
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Return</span> the value of the UIData.  This value must either be
+     * be of type {@link DataModel}, or a type that can be adapted
+     * into a {@link DataModel}.  <code>UIData</code> will automatically
+     * adapt the following types:</p>
+     * <ul>
+     * <li>Arrays</li>
+     * <li><code>java.util.List</code></li>
+     * <li><code>java.sql.ResultSet</code></li>
+     * <li><code>javax.servlet.jsp.jstl.sql.Result</code>
+     * <li class="changed_added_2_2"><code>java.util.Collection</code></li>
+     * </ul>
+     * <p>All other types will be adapted using the {@link ScalarDataModel}
+     * class, which will treat the object as a single row of data.</p>
+     */
+    public Object getValue() {
+
+        return getStateHelper().eval(PropertyKeys.value);
+
+    }
+
+
+    /**
+     * <p>Set the value of the <code>UIData</code>.  This value must either be
+     * be of type {@link DataModel}, or a type that can be adapted into a {@link
+     * DataModel}.</p>
+     *
+     * @param value the new value
+     */
+    public void setValue(Object value) {
+        setDataModel(null);
+        getStateHelper().put(PropertyKeys.value, value);
+
+    }
+
+    // ----------------------------------------------------- UIComponent Methods
+
+
+    /**
+     * <p>If "name" is something other than "value", "var", or "rowIndex", rely
+     * on the superclass conversion from <code>ValueBinding</code> to
+     * <code>ValueExpression</code>.</p>
+     *
+     * @param name    Name of the attribute or property for which to set a
+     *                {@link ValueBinding}
+     * @param binding The {@link ValueBinding} to set, or <code>null</code> to
+     *                remove any currently set {@link ValueBinding}
+     *
+     * @throws IllegalArgumentException if <code>name</code> is one of
+     *                                  <code>id</code>, <code>parent</code>,
+     *                                  <code>var</code>, or <code>rowIndex</code>
+     * @throws NullPointerException     if <code>name</code> is <code>null</code>
+     * @deprecated This has been replaced by {@link #setValueExpression(java.lang.String,
+     *javax.el.ValueExpression)}.
+     */
+    public void setValueBinding(String name, ValueBinding binding) {
+
+        if ("value".equals(name)) {
+            setDataModel(null);
+        } else if ("var".equals(name) || "rowIndex".equals(name)) {
+            throw new IllegalArgumentException();
+        }
+        super.setValueBinding(name, binding);
+
+    }
+
+    /**
+     * <p>Set the {@link ValueExpression} used to calculate the value for the
+     * specified attribute or property name, if any.  In addition, if a {@link
+     * ValueExpression} is set for the <code>value</code> property, remove any
+     * synthesized {@link DataModel} for the data previously bound to this
+     * component.</p>
+     *
+     * @param name    Name of the attribute or property for which to set a
+     *                {@link ValueExpression}
+     * @param binding The {@link ValueExpression} to set, or <code>null</code>
+     *                to remove any currently set {@link ValueExpression}
+     *
+     * @throws IllegalArgumentException if <code>name</code> is one of
+     *                                  <code>id</code>, <code>parent</code>,
+     *                                  <code>var</code>, or <code>rowIndex</code>
+     * @throws NullPointerException     if <code>name</code> is <code>null</code>
+     * @since 1.2
+     */
+    public void setValueExpression(String name, ValueExpression binding) {
+
+        if ("value".equals(name)) {
+            this.model = null;
+        } else if ("var".equals(name) || "rowIndex".equals(name)) {
+            throw new IllegalArgumentException();
+        }
+        super.setValueExpression(name, binding);
+
+    }
+
+    /**
+     * <p>Return a client identifier for this component that includes the
+     * current value of the <code>rowIndex</code> property, if it is not set to
+     * -1.  This implies that multiple calls to <code>getClientId()</code> may
+     * return different results, but ensures that child components can
+     * themselves generate row-specific client identifiers (since {@link UIData}
+     * is a {@link NamingContainer}).</p>
+     *
+     * @throws NullPointerException if <code>context</code> is <code>null</code>
+     */
+    public String getClientId(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // If baseClientId and clientIdBuilder are both null, this is the
+        // first time that getClientId() has been called.
+        // If we're not nested within another UIData, then:
+        //   - create a new StringBuilder assigned to clientIdBuilder containing
+        //   our client ID.
+        //   - toString() the builder - this result will be our baseClientId
+        //     for the duration of the component
+        //   - append UINamingContainer.getSeparatorChar() to the builder
+        //  If we are nested within another UIData, then:
+        //   - create an empty StringBuilder that will be used to build
+        //     this instance's ID
+        if (baseClientId == null && clientIdBuilder == null) {
+            if (!isNestedWithinIterator()) {
+                clientIdBuilder = new StringBuilder(super.getClientId(context));
+                baseClientId = clientIdBuilder.toString();
+                baseClientIdLength = (baseClientId.length() + 1);
+                clientIdBuilder.append(UINamingContainer.getSeparatorChar(context));
+                clientIdBuilder.setLength(baseClientIdLength);
+            } else {
+                clientIdBuilder = new StringBuilder();
+            }
+        }
+        int rowIndex = getRowIndex();
+        if (rowIndex >= 0) {
+            String cid;
+            if (!isNestedWithinIterator()) {
+                // we're not nested, so the clientIdBuilder is already
+                // primed with clientID +
+                // UINamingContainer.getSeparatorChar().  Append the
+                // current rowIndex, and toString() the builder.  reset
+                // the builder to it's primed state.
+                cid = clientIdBuilder.append(rowIndex).toString();
+                clientIdBuilder.setLength(baseClientIdLength);
+            } else {
+                // we're nested, so we have to build the ID from scratch
+                // each time.  Reuse the same clientIdBuilder instance
+                // for each call by resetting the length to 0 after
+                // the ID has been computed.
+                cid = clientIdBuilder.append(super.getClientId(context))
+                      .append(UINamingContainer.getSeparatorChar(context)).append(rowIndex)
+                      .toString();
+                clientIdBuilder.setLength(0);
+            }
+            return (cid);
+        } else {
+            if (!isNestedWithinIterator()) {
+                // Not nested and no row available, so just return our baseClientId
+                return (baseClientId);
+            } else {
+                // nested and no row available, return the result of getClientId().
+                // this is necessary as the client ID will reflect the row that
+                // this table represents
+                return super.getClientId(context);
+            }
+        }
+
+    }
+
+    /**
+     * <p>Override behavior from {@link
+     * UIComponentBase#invokeOnComponent} to provide special care for
+     * positioning the data properly before finding the component and
+     * invoking the callback on it.  If the argument
+     * <code>clientId</code> is equal to <code>this.getClientId()</code>
+     * simply invoke the <code>contextCallback</code>, passing the
+     * <code>context</code> argument and <b>this</b> as arguments, and
+     * return <code>true.</code> If the argument <code>clientId</code>
+     * is not equal to <code>this.getClientId()</code>, inspect each of
+     * the facet children of this <code>UIData</code> instance and for
+     * each one, compare its <code>clientId</code> with the argument
+     * <code>clientId</code>.  If there is a match, invoke the
+     * <code>contextCallback</code>, passing the <code>context</code>
+     * argument and <b>this</b> as arguments, and return
+     * <code>true</code>. Otherwise, attempt to extract a rowIndex from
+     * the <code>clientId</code>.  For example, if the argument
+     * <code>clientId</code> was <code>form:data:3:customerHeader</code>
+     * the rowIndex would be <code>3</code>.  Let this value be called
+     * <code>newIndex</code>. The current rowIndex of this instance must
+     * be saved aside and restored before returning in all cases,
+     * regardless of the outcome of the search or if any exceptions are
+     * thrown in the process.</p>
+     *
+     * <p>The implementation of this method must never return <code>true</code>
+     * if setting the rowIndex of this instance to be equal to
+     * <code>newIndex</code> causes this instance to return <code>false</code>
+     * from {@link #isRowAvailable}.</p>
+     *
+     * @throws NullPointerException {@inheritDoc}
+     * @throws FacesException       {@inheritDoc}  Also throws <code>FacesException</code>
+     *                              if any exception is thrown when deriving the
+     *                              rowIndex from the argument <code>clientId</code>.
+     * @since 1.2
+     */
+    public boolean invokeOnComponent(FacesContext context, String clientId,
+                                     ContextCallback callback)
+          throws FacesException {
+        if (null == context || null == clientId || null == callback) {
+            throw new NullPointerException();
+        }
+
+        String myId = super.getClientId(context);
+        boolean found = false;
+        if (clientId.equals(myId)) {
+            try {
+                this.pushComponentToEL(context, compositeParent);
+                callback.invokeContextCallback(context, this);
+                return true;
+            }
+            catch (Exception e) {
+                throw new FacesException(e);
+            }
+            finally {
+                this.popComponentFromEL(context);
+            }
+        }
+
+        // check the facets, if any, of UIData
+        if (this.getFacetCount() > 0) {
+            for (UIComponent c : this.getFacets().values()) {
+                if (clientId.equals(c.getClientId(context))) {
+                    callback.invokeContextCallback(context, c);
+                    return true;
+                }
+            }
+        }
+
+        // check column level facets, if any
+        if (this.getChildCount() > 0) {
+            for (UIComponent column : this.getChildren()) {
+                if (column instanceof UIColumn) {
+                    if (column.getFacetCount() > 0) {
+                        for (UIComponent facet : column.getFacets().values()) {
+                            if (facet.invokeOnComponent(context, clientId, callback)) {
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        /*
+         * Check if we are looking for a component that is part of the 
+         * actual skeleton.
+         */
+        if (this.getChildCount() > 0) {
+            for (UIComponent column : this.getChildren()) {
+                if (column instanceof UIColumn) {
+                    if (column.invokeOnComponent(context, clientId, callback)) {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        int lastSep, newRow, savedRowIndex = this.getRowIndex();
+        try {
+            char sepChar = UINamingContainer.getSeparatorChar(context);
+            // If we need to strip out the rowIndex from our id
+            // PENDING(edburns): is this safe with respect to I18N?
+            if (myId.endsWith(sepChar + Integer.toString(savedRowIndex, 10))) {
+                lastSep = myId.lastIndexOf(sepChar);
+                assert (-1 != lastSep);
+                myId = myId.substring(0, lastSep);
+            }
+
+            // myId will be something like form:outerData for a non-nested table,
+            // and form:outerData:3:data for a nested table.
+            // clientId will be something like form:outerData:3:outerColumn
+            // for a non-nested table.  clientId will be something like
+            // outerData:3:data:3:input for a nested table.
+            if (clientId.startsWith(myId)) {
+                int preRowIndexSep, postRowIndexSep;
+
+                if (-1 != (preRowIndexSep =
+                      clientId.indexOf(sepChar,
+                                       myId.length()))) {
+                    // Check the length
+                    if (++preRowIndexSep < clientId.length()) {
+                        if (-1 != (postRowIndexSep =
+                              clientId.indexOf(sepChar,
+                                               preRowIndexSep + 1))) {
+                            try {
+                                newRow = Integer
+                                      .valueOf(clientId.substring(preRowIndexSep,
+                                                                  postRowIndexSep))
+                                      .intValue();
+                            } catch (NumberFormatException ex) {
+                                // PENDING(edburns): I18N
+                                String message =
+                                      "Trying to extract rowIndex from clientId \'"
+                                      +
+                                      clientId
+                                      + "\' "
+                                      + ex.getMessage();
+                                throw new NumberFormatException(message);
+                            }
+                            this.setRowIndex(newRow);
+                            if (this.isRowAvailable()) {
+                                found = super.invokeOnComponent(context,
+                                                                clientId,
+                                                                callback);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        catch (FacesException fe) {
+            throw fe;
+        }
+        catch (Exception e) {
+            throw new FacesException(e);
+        }
+        finally {
+            this.setRowIndex(savedRowIndex);
+        }
+        return found;
+    }
+
+
+    /**
+     * <p>Override the default {@link UIComponentBase#queueEvent} processing to
+     * wrap any queued events in a wrapper so that we can reset the current row
+     * index in <code>broadcast()</code>.</p>
+     *
+     * @param event {@link FacesEvent} to be queued
+     *
+     * @throws IllegalStateException if this component is not a descendant of a
+     *                               {@link UIViewRoot}
+     * @throws NullPointerException  if <code>event</code> is <code>null</code>
+     */
+    public void queueEvent(FacesEvent event) {
+
+        super.queueEvent(new WrapperEvent(this, event, getRowIndex()));
+
+    }
+
+
+    /**
+     * <p>Override the default {@link UIComponentBase#broadcast} processing to
+     * unwrap any wrapped {@link FacesEvent} and reset the current row index,
+     * before the event is actually broadcast.  For events that we did not wrap
+     * (in <code>queueEvent()</code>), default processing will occur.</p>
+     *
+     * @param event The {@link FacesEvent} to be broadcast
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *                                  implementation that no further
+     *                                  processing on the current event should
+     *                                  be performed
+     * @throws IllegalArgumentException if the implementation class of this
+     *                                  {@link FacesEvent} is not supported by
+     *                                  this component
+     * @throws NullPointerException     if <code>event</code> is <code>null</code>
+     */
+    public void broadcast(FacesEvent event)
+          throws AbortProcessingException {
+
+        if (!(event instanceof WrapperEvent)) {
+            super.broadcast(event);
+            return;
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        // Set up the correct context and fire our wrapped event
+        WrapperEvent revent = (WrapperEvent) event;
+        if (isNestedWithinIterator()) {
+            setDataModel(null);
+        }
+        int oldRowIndex = getRowIndex();
+        setRowIndex(revent.getRowIndex());
+        FacesEvent rowEvent = revent.getFacesEvent();
+        UIComponent source = rowEvent.getComponent();
+        UIComponent compositeParent = null;
+        try {
+            if (!UIComponent.isCompositeComponent(source)) {
+                compositeParent = UIComponent.getCompositeComponentParent(source);
+            }
+            if (compositeParent != null) {
+                compositeParent.pushComponentToEL(context, null);
+            }
+            source.pushComponentToEL(context, null);
+            source.broadcast(rowEvent);
+        } finally {
+            source.popComponentFromEL(context);
+            if (compositeParent != null) {
+                compositeParent.popComponentFromEL(context);
+            }
+        }
+        setRowIndex(oldRowIndex);
+
+    }
+
+    /**
+     * <p>In addition to the default behavior, ensure that any saved per-row
+     * state for our child input components is discarded unless it is needed to
+     * rerender the current page with errors.
+     *
+     * @param context FacesContext for the current request
+     *
+     * @throws IOException          if an input/output error occurs while
+     *                              rendering
+     * @throws NullPointerException if <code>context</code> is <code>null</code>
+     */
+    public void encodeBegin(FacesContext context) throws IOException {
+
+        preEncode(context);
+        super.encodeBegin(context);
+
+    }
+
+
+    /**
+     * <p>Override the default {@link UIComponentBase#processDecodes} processing
+     * to perform the following steps.</p> <ul> <li>If the <code>rendered</code>
+     * property of this {@link UIComponent} is <code>false</code>, skip further
+     * processing.</li> <li>Set the current <code>rowIndex</code> to -1.</li>
+     * <li>Call the <code>processDecodes()</code> method of all facets of this
+     * {@link UIData}, in the order determined by a call to
+     * <code>getFacets().keySet().iterator()</code>.</li> <li>Call the
+     * <code>processDecodes()</code> method of all facets of the {@link
+     * UIColumn} children of this {@link UIData}.</li> <li>Iterate over the set
+     * of rows that were included when this component was rendered (i.e. those
+     * defined by the <code>first</code> and <code>rows</code> properties),
+     * performing the following processing for each row: <ul> <li>Set the
+     * current <code>rowIndex</code> to the appropriate value for this row.</li>
+     * <li>If <code>isRowAvailable()</code> returns <code>true</code>, iterate
+     * over the children components of each {@link UIColumn} child of this
+     * {@link UIData} component, calling the <code>processDecodes()</code>
+     * method for each such child.</li> </ul></li> <li>Set the current
+     * <code>rowIndex</code> to -1.</li> <li>Call the <code>decode()</code>
+     * method of this component.</li> <li>If a <code>RuntimeException</code> is
+     * thrown during decode processing, call {@link FacesContext#renderResponse}
+     * and re-throw the exception.</li> </ul>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws NullPointerException if <code>context</code> is <code>null</code>
+     */
+    public void processDecodes(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!isRendered()) {
+            return;
+        }
+
+        pushComponentToEL(context, this);
+        preDecode(context);
+        iterate(context, PhaseId.APPLY_REQUEST_VALUES);
+        decode(context);
+        popComponentFromEL(context);
+
+    }
+
+
+    /**
+     * <p>Override the default {@link UIComponentBase#processValidators}
+     * processing to perform the following steps.</p> <ul> <li>If the
+     * <code>rendered</code> property of this {@link UIComponent} is
+     * <code>false</code>, skip further processing.</li> <li>Set the current
+     * <code>rowIndex</code> to -1.</li> <li>Call the <code>processValidators()</code>
+     * method of all facets of this {@link UIData}, in the order determined by a
+     * call to <code>getFacets().keySet().iterator()</code>.</li> <li>Call the
+     * <code>processValidators()</code> method of all facets of the {@link
+     * UIColumn} children of this {@link UIData}.</li> <li>Iterate over the set
+     * of rows that were included when this component was rendered (i.e. those
+     * defined by the <code>first</code> and <code>rows</code> properties),
+     * performing the following processing for each row: <ul> <li>Set the
+     * current <code>rowIndex</code> to the appropriate value for this row.</li>
+     * <li>If <code>isRowAvailable()</code> returns <code>true</code>, iterate
+     * over the children components of each {@link UIColumn} child of this
+     * {@link UIData} component, calling the <code>processValidators()</code>
+     * method for each such child.</li> </ul></li> <li>Set the current
+     * <code>rowIndex</code> to -1.</li> </ul>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws NullPointerException if <code>context</code> is <code>null</code>
+     */
+    public void processValidators(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!isRendered()) {
+            return;
+        }
+        pushComponentToEL(context, this);
+        Application app = context.getApplication();
+        app.publishEvent(context, PreValidateEvent.class, this);
+        preValidate(context);
+        iterate(context, PhaseId.PROCESS_VALIDATIONS);
+        app.publishEvent(context, PostValidateEvent.class, this);
+        popComponentFromEL(context);
+
+    }
+
+
+    /**
+     * <p>Override the default {@link UIComponentBase#processUpdates}
+     * processing to perform the following steps.</p>
+     * <ul>
+     * <li>If the <code>rendered</code> property of this {@link UIComponent}
+     *     is <code>false</code>, skip further processing.</li>
+     * <li>Set the current <code>rowIndex</code> to -1.</li>
+     * <li>Call the <code>processUpdates()</code> method of all facets
+     *     of this {@link UIData}, in the order determined
+     *     by a call to <code>getFacets().keySet().iterator()</code>.</li>
+     * <li>Call the <code>processUpdates()</code> method of all facets
+     *     of the {@link UIColumn} children of this {@link UIData}.</li>
+     * <li>Iterate over the set of rows that were included when this
+     *     component was rendered (i.e. those defined by the <code>first</code>
+     *     and <code>rows</code> properties), performing the following
+     *     processing for each row:
+     *     <ul>
+     *     <li>Set the current <code>rowIndex</code> to the appropriate
+     *         value for this row.</li>
+     *     <li>If <code>isRowAvailable()</code> returns <code>true</code>,
+     *         iterate over the children components of each {@link UIColumn}
+     *         child of this {@link UIData} component, calling the
+     *         <code>processUpdates()</code> method for each such child.</li>
+     *     </ul></li>
+     * <li>Set the current <code>rowIndex</code> to -1.</li>
+     * </ul>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws NullPointerException if <code>context</code> is <code>null</code>
+     */
+    public void processUpdates(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!isRendered()) {
+            return;
+        }
+
+        pushComponentToEL(context, this);
+        preUpdate(context);
+        iterate(context, PhaseId.UPDATE_MODEL_VALUES);
+        popComponentFromEL(context);
+        // This is not a EditableValueHolder, so no further processing is required
+
+    }
+
+    public String createUniqueId(FacesContext context, String seed) {
+        Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
+        int lastId = ((i != null) ? i : 0);
+        getStateHelper().put(PropertyKeys.lastId,  ++lastId);
+        return UIViewRoot.UNIQUE_ID_PREFIX + (seed == null ? lastId : seed);
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_0_rev_a">Override</span> the behavior
+     * in {@link UIComponent#visitTree} to handle iteration
+     * correctly.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * <p>If the {@link UIComponent#isVisitable} method of this instance
+     * returns <code>false</code>, take no action and return.</p>
+
+     * <p>Call {@link UIComponent#pushComponentToEL} and
+     * invoke the visit callback on this <code>UIData</code> instance as
+     * described in {@link UIComponent#visitTree}.  Let the result of
+     * the invoctaion be <em>visitResult</em>.  If <em>visitResult</em>
+     * is {@link VisitResult#COMPLETE}, take no further action and
+     * return <code>true</code>.  Otherwise, determine if we need to
+     * visit our children.  The default implementation calls {@link
+     * VisitContext#getSubtreeIdsToVisit} passing <code>this</code> as
+     * the argument.  If the result of that call is non-empty, let
+     * <em>doVisitChildren</em> be <code>true</code>.  If
+     * <em>doVisitChildren</em> is <code>true</code> and
+     * <em>visitResult</em> is {@link VisitResult#ACCEPT}, take the
+     * following action.<p>
+
+     * <ul>
+
+     * 	  <li><p>If this component has facets, call {@link
+     * 	  UIComponent#getFacets} on this instance and invoke the
+     * 	  <code>values()</code> method.  For each
+     * 	  <code>UIComponent</code> in the returned <code>Map</code>,
+     * 	  call {@link UIComponent#visitTree}.</p></li>
+
+     * 	  <li>
+
+     * <div class="changed_modified_2_0_rev_a">
+
+     *  <p>If this component has children, for each 
+     * 	  <code>UIColumn</code> child:</p>
+     * 
+     *    <p>Call {@link VisitContext#invokeVisitCallback} on that 
+          <code>UIColumn</code> instance.
+     *    If such a call returns <code>true</code>, terminate visiting and 
+          return <code>true</code> from this method.</p>
+     * 
+     *    <p>If the child <code>UIColumn</code> has facets, call
+     *    {@link UIComponent#visitTree} on each one.</p>
+     *
+     *    <p>Take no action on non-<code>UIColumn</code> children.</p>
+     *
+     * </div>
+     * </li>
+     *
+     *    <li>
+
+     * <div class="changed_modified_2_0_rev_a">
+     *
+     * <p>Save aside the result of a call to {@link
+     *    #getRowIndex}.</p>
+
+     *    <p>For each child component of this <code>UIData</code> that is
+     *    also an instance of {@link UIColumn}, 
+     *    </p>
+
+     * 	  <p>Iterate over the rows.</p>
+
+     * </div>
+
+     * <ul>
+
+     * 	  <li><p>Let <em>rowsToProcess</em> be the return from {@link
+     * 	  #getRows}.  </p></li>
+
+     * 	  <li><p>Let <em>rowIndex</em> be the return from {@link
+     * 	  #getFirst} - 1.</p></li>
+
+     * 	  <li><p>While the number of rows processed is less than
+     * 	  <em>rowsToProcess</em>, take the following actions.</p>
+
+     * <p>Call {@link #setRowIndex}, passing the current row index.</p>
+
+     * <p>If {@link #isRowAvailable} returns <code>false</code>, take no
+     * further action and return <code>false</code>.</p>
+     *
+     * <p class="changed_modified_2_0_rev_a">Call {@link
+     * UIComponent#visitTree} on each of the children of this
+     * <code>UIColumn</code> instance.</p>
+
+     *     </li>
+
+     * </ul>
+
+     *    </li>
+
+     * </ul>
+
+     * <p>Call {@link #popComponentFromEL} and restore the saved row
+     * index with a call to {@link #setRowIndex}.</p>
+
+     * <p>Return <code>false</code> to allow the visiting to
+     * continue.</p>
+
+     * </div>
+     *
+     * @param context the <code>VisitContext</code> that provides
+     * context for performing the visit.
+     *
+     * @param callback the callback to be invoked for each node
+     * encountered in the visit.
+
+     * @throws NullPointerException if any of the parameters are
+     * <code>null</code>.
+
+     * 
+     */
+    @Override
+    public boolean visitTree(VisitContext context, 
+                             VisitCallback callback) {
+
+        // First check to see whether we are visitable.  If not
+        // short-circuit out of this subtree, though allow the
+        // visit to proceed through to other subtrees.
+        if (!isVisitable(context))
+            return false;
+
+        FacesContext facesContext = context.getFacesContext();
+        // NOTE: that the visitRows local will be obsolete once the
+        //       appropriate visit hints have been added to the API
+        boolean visitRows = requiresRowIteration(context);
+
+        // Clear out the row index is one is set so that
+        // we start from a clean slate.
+        int oldRowIndex = -1;
+        if (visitRows) {
+            oldRowIndex = getRowIndex();
+            setRowIndex(-1);
+        }
+
+        // Push ourselves to EL
+        pushComponentToEL(facesContext, null);
+
+        try {
+
+            // Visit ourselves.  Note that we delegate to the 
+            // VisitContext to actually perform the visit.
+            VisitResult result = context.invokeVisitCallback(this, callback);
+
+            // If the visit is complete, short-circuit out and end the visit
+            if (result == VisitResult.COMPLETE)
+                return true;
+
+            // Visit children, short-circuiting as necessary
+            // NOTE: that the visitRows parameter will be obsolete once the
+            //       appropriate visit hints have been added to the API
+            if ((result == VisitResult.ACCEPT) && doVisitChildren(context, visitRows)) {
+
+                // First visit facets
+                // NOTE: that the visitRows parameter will be obsolete once the
+                //       appropriate visit hints have been added to the API
+                if (visitFacets(context, callback, visitRows))
+                    return true;
+
+                // Next column facets
+                // NOTE: that the visitRows parameter will be obsolete once the
+                //       appropriate visit hints have been added to the API
+                if (visitColumnsAndColumnFacets(context, callback, visitRows))
+                    return true;
+
+                // And finally, visit rows
+                // NOTE: that the visitRows parameter will be obsolete once the
+                //       appropriate visit hints have been added to the API
+                if (visitRows(context, callback, visitRows))
+                    return true;
+            }
+        }
+        finally {
+            // Clean up - pop EL and restore old row index
+            popComponentFromEL(facesContext);
+            if (visitRows) {
+                setRowIndex(oldRowIndex);
+            }
+        }
+
+        // Return false to allow the visit to continue
+        return false;
+    }
+
+    /**
+     * <p class="changed_added_2_1">Override the base class method to
+     * take special action if the method is being invoked when {@link
+     * StateManager#IS_BUILDING_INITIAL_STATE} is true
+     * <strong>and</strong> the <code>rowStatePreserved</code>
+     * JavaBeans property for this instance is <code>true</code>.</p>
+     *
+     * <p class="changed_modified_2_1">The additional action taken is to
+     * traverse the descendents and save their state without regard to
+     * any particular row value.</p>
+     *
+     * @since 2.1
+     */
+
+
+    @Override
+    public void markInitialState()
+    {
+        if (isRowStatePreserved())
+        {
+            if (getFacesContext().getAttributes().containsKey(StateManager.IS_BUILDING_INITIAL_STATE))
+            {
+                _initialDescendantFullComponentState = saveDescendantInitialComponentStates(getFacesContext(), getChildren().iterator(), false);
+            }
+        }
+        super.markInitialState();
+    }
+
+    private void restoreFullDescendantComponentStates(FacesContext facesContext,
+            Iterator<UIComponent> childIterator, Object state,
+            boolean restoreChildFacets)
+    {
+        Iterator<? extends Object[]> descendantStateIterator = null;
+        while (childIterator.hasNext())
+        {
+            if (descendantStateIterator == null && state != null)
+            {
+                descendantStateIterator = ((Collection<? extends Object[]>) state)
+                        .iterator();
+            }
+            UIComponent component = childIterator.next();
+
+            // reset the client id (see spec 3.1.6)
+            component.setId(component.getId());
+            if (!component.isTransient())
+            {
+                Object childState = null;
+                Object descendantState = null;
+                if (descendantStateIterator != null
+                        && descendantStateIterator.hasNext())
+                {
+                    Object[] object = descendantStateIterator.next();
+                    childState = object[0];
+                    descendantState = object[1];
+                }
+                
+                component.clearInitialState();
+                component.restoreState(facesContext, childState);
+                component.markInitialState();
+                
+                Iterator<UIComponent> childsIterator;
+                if (restoreChildFacets)
+                {
+                    childsIterator = component.getFacetsAndChildren();
+                }
+                else
+                {
+                    childsIterator = component.getChildren().iterator();
+                }
+                restoreFullDescendantComponentStates(facesContext, childsIterator,
+                        descendantState, true);
+            }
+        }
+    }
+
+    private Collection<Object[]> saveDescendantInitialComponentStates(FacesContext facesContext,
+            Iterator<UIComponent> childIterator, boolean saveChildFacets)
+    {
+        Collection<Object[]> childStates = null;
+        while (childIterator.hasNext())
+        {
+            if (childStates == null)
+            {
+                childStates = new ArrayList<Object[]>();
+            }
+
+            UIComponent child = childIterator.next();
+            if (!child.isTransient())
+            {
+                // Add an entry to the collection, being an array of two
+                // elements. The first element is the state of the children
+                // of this component; the second is the state of the current
+                // child itself.
+
+                Iterator<UIComponent> childsIterator;
+                if (saveChildFacets)
+                {
+                    childsIterator = child.getFacetsAndChildren();
+                }
+                else
+                {
+                    childsIterator = child.getChildren().iterator();
+                }
+                Object descendantState = saveDescendantInitialComponentStates(
+                        facesContext, childsIterator, true);
+                Object state = child.saveState(facesContext);
+                childStates.add(new Object[] { state, descendantState });
+            }
+        }
+        return childStates;
+    }
+    
+    private Map<String,Object> saveFullDescendantComponentStates(FacesContext facesContext, Map<String,Object> stateMap,
+            Iterator<UIComponent> childIterator, boolean saveChildFacets)
+    {
+        while (childIterator.hasNext())
+        {
+            UIComponent child = childIterator.next();
+            if (!child.isTransient())
+            {
+                Iterator<UIComponent> childsIterator;
+                if (saveChildFacets)
+                {
+                    childsIterator = child.getFacetsAndChildren();
+                }
+                else
+                {
+                    childsIterator = child.getChildren().iterator();
+                }
+                stateMap = saveFullDescendantComponentStates(facesContext, stateMap,
+                        childsIterator, true);
+                Object state = child.saveState(facesContext);
+                if (state != null)
+                {
+                    if (stateMap == null)
+                    {
+                        stateMap = new HashMap<String,Object>();
+                    }
+                    stateMap.put(child.getClientId(facesContext), state);
+                }
+            }
+        }
+        return stateMap;
+    }
+    
+    private void restoreFullDescendantComponentDeltaStates(FacesContext facesContext,
+            Iterator<UIComponent> childIterator, Object state, Object initialState,
+            boolean restoreChildFacets)
+    {
+        Map<String,Object> descendantStateIterator = null;
+        Iterator<? extends Object[]> descendantFullStateIterator = null;
+        while (childIterator.hasNext())
+        {
+            if (descendantStateIterator == null && state != null)
+            {
+                descendantStateIterator = (Map<String,Object>) state;
+            }
+            if (descendantFullStateIterator == null && initialState != null)
+            {
+                descendantFullStateIterator = ((Collection<? extends Object[]>) initialState).iterator();
+            }
+            UIComponent component = childIterator.next();
+
+            // reset the client id (see spec 3.1.6)
+            component.setId(component.getId());
+            if (!component.isTransient())
+            {
+                Object childInitialState = null;
+                Object descendantInitialState = null;
+                Object childState = null;
+                if (descendantStateIterator != null
+                        && descendantStateIterator.containsKey(component.getClientId(facesContext)))
+                {
+                    //Object[] object = (Object[]) descendantStateIterator.get(component.getClientId(facesContext));
+                    //childState = object[0];
+                    childState = descendantStateIterator.get(component.getClientId(facesContext));
+                }
+                if (descendantFullStateIterator != null
+                        && descendantFullStateIterator.hasNext())
+                {
+                    Object[] object = (Object[]) descendantFullStateIterator.next();
+                    childInitialState = object[0];
+                    descendantInitialState = object[1];
+                }
+                
+                component.clearInitialState();
+                if (childInitialState != null)
+                {
+                    component.restoreState(facesContext, childInitialState);
+                    component.markInitialState();
+                    component.restoreState(facesContext, childState);
+                }
+                else
+                {
+                    component.restoreState(facesContext, childState);
+                    component.markInitialState();
+                }
+                
+                Iterator<UIComponent> childsIterator;
+                if (restoreChildFacets)
+                {
+                    childsIterator = component.getFacetsAndChildren();
+                }
+                else
+                {
+                    childsIterator = component.getChildren().iterator();
+                }
+                restoreFullDescendantComponentDeltaStates(facesContext, childsIterator,
+                        state, descendantInitialState , true);
+            }
+        }
+    }
+
+    private void restoreTransientDescendantComponentStates(FacesContext facesContext, Iterator<UIComponent> childIterator, Map<String, Object> state,
+            boolean restoreChildFacets)
+    {
+        while (childIterator.hasNext())
+        {
+            UIComponent component = childIterator.next();
+
+            // reset the client id (see spec 3.1.6)
+            component.setId(component.getId());
+            if (!component.isTransient())
+            {
+                component.restoreTransientState(facesContext, (state == null) ? null : state.get(component.getClientId(facesContext)));                    
+                
+                Iterator<UIComponent> childsIterator;
+                if (restoreChildFacets)
+                {
+                    childsIterator = component.getFacetsAndChildren();
+                }
+                else
+                {
+                    childsIterator = component.getChildren().iterator();
+                }
+                restoreTransientDescendantComponentStates(facesContext, childsIterator, state, true);
+            }
+        }
+
+    }
+
+    private Map<String, Object> saveTransientDescendantComponentStates(FacesContext facesContext, Map<String, Object> childStates, Iterator<UIComponent> childIterator,
+            boolean saveChildFacets)
+    {
+        while (childIterator.hasNext())
+        {
+            UIComponent child = childIterator.next();
+            if (!child.isTransient())
+            {
+                Iterator<UIComponent> childsIterator;
+                if (saveChildFacets)
+                {
+                    childsIterator = child.getFacetsAndChildren();
+                }
+                else
+                {
+                    childsIterator = child.getChildren().iterator();
+                }
+                childStates = saveTransientDescendantComponentStates(facesContext, childStates, childsIterator, true);
+                Object state = child.saveTransientState(facesContext);
+                if (state != null)
+                {
+                    if (childStates == null)
+                    {
+                        childStates = new HashMap<String, Object>();
+                    }
+                    childStates.put(child.getClientId(facesContext), state);
+                }
+            }
+        }
+        return childStates;
+    }
+
+    @Override
+    public void restoreState(FacesContext context, Object state)
+    {
+        if (state == null)
+        {
+            return;
+        }
+        
+        Object values[] = (Object[]) state;
+        super.restoreState(context, values[0]);
+        Object restoredRowStates = UIComponentBase.restoreAttachedState(context, values[1]);
+        if (restoredRowStates == null)
+        {
+            if (!_rowDeltaStates.isEmpty())
+            {
+                _rowDeltaStates.clear();
+            }
+        }
+        else
+        {
+            _rowDeltaStates = (Map<String, Object>) restoredRowStates;
+        } 
+    }
+
+    private void resetClientIds(UIComponent component) {
+        Iterator<UIComponent> iterator = component.getFacetsAndChildren();
+        while(iterator.hasNext()) {
+            UIComponent child = iterator.next();
+            resetClientIds(child);
+            child.setId(child.getId());
+        }
+    }
+        
+    @Override
+    public Object saveState(FacesContext context)
+    {
+        resetClientIds(this);
+        
+        if (initialStateMarked()) {
+            Object superState = super.saveState(context);
+            
+            if (superState == null && _rowDeltaStates.isEmpty()) {
+                return null;
+            }
+            else {
+                Object values[] = null;
+                Object attachedState = UIComponentBase.saveAttachedState(context, _rowDeltaStates);
+                if (superState != null || attachedState != null) {
+                    values = new Object[] { superState, attachedState };
+                }
+                return values; 
+            }
+        } else {
+            Object values[] = new Object[2];
+            values[0] = super.saveState(context);
+            values[1] = UIComponentBase.saveAttachedState(context, _rowDeltaStates);
+            return values;
+        }
+    }
+
+    // --------------------------------------------------------- Protected Methods
+
+
+    /**
+     * <p>Return the internal {@link DataModel} object representing the data
+     * objects that we will iterate over in this component's rendering.</p>
+     * <p/>
+     * <p>If the model has been cached by a previous call to {@link
+     * #setDataModel}, return it.  Otherwise call {@link #getValue}.  If the
+     * result is null, create an empty {@link ListDataModel} and return it.  If
+     * the result is an instance of {@link DataModel}, return it.  Otherwise,
+     * adapt the result as described in {@link #getValue} and return it.</p>
+     */
+    protected DataModel getDataModel() {
+
+        // Return any previously cached DataModel instance
+        if (this.model != null) {
+            return (model);
+        }
+
+        // Synthesize a DataModel around our current value if possible
+        Object current = getValue();
+        if (current == null) {
+            setDataModel(new ListDataModel(Collections.EMPTY_LIST));
+        } else if (current instanceof DataModel) {
+            setDataModel((DataModel) current);
+        } else if (current instanceof List) {
+            setDataModel(new ListDataModel((List) current));
+        } else if (Object[].class.isAssignableFrom(current.getClass())) {
+            setDataModel(new ArrayDataModel((Object[]) current));
+        } else if (current instanceof ResultSet) {
+            setDataModel(new ResultSetDataModel((ResultSet) current));
+        } else if (current instanceof Result) {
+            setDataModel(new ResultDataModel((Result) current));
+        } else if (current instanceof Collection) {
+            setDataModel(new CollectionDataModel((Collection) current));
+        } else {
+            setDataModel(new ScalarDataModel(current));
+        }
+        return (model);
+
+    }
+
+    /**
+     * <p>Set the internal DataModel.  This <code>UIData</code> instance must
+     * use the given {@link DataModel} as its internal value representation from
+     * now until the next call to <code>setDataModel</code>.  If the given
+     * <code>DataModel</code> is <code>null</code>, the internal
+     * <code>DataModel</code> must be reset in a manner so that the next call to
+     * {@link #getDataModel} causes lazy instantion of a newly refreshed
+     * <code>DataModel</code>.</p>
+     * <p/>
+     * <p>Subclasses might call this method if they either want to restore the
+     * internal <code>DataModel</code> during the <em>Restore View</em> phase or
+     * if they want to explicitly refresh the current <code>DataModel</code> for
+     * the <em>Render Response</em> phase.</p>
+     *
+     * @param dataModel the new <code>DataModel</code> or <code>null</code> to
+     *                  cause the model to be refreshed.
+     */
+
+    protected void setDataModel(DataModel dataModel) {
+        this.model = dataModel;
+    }
+
+    // ---------------------------------------------------- Private Methods
+
+
+    /**
+     * Called by {@link UIData#visitTree} to determine whether or not the
+     * <code>visitTree</code> implementation should visit the rows of UIData
+     * or by manipulating the row index before visiting the components themselves.
+     *
+     * Once we have the appropriate Visit hints for state saving, this method
+     * will become obsolete.
+     *
+     * @param ctx the <code>FacesContext</code> for the current request
+     *
+     * @return true if row index manipulation is required by the visit to this
+     *  UIData instance
+     */
+    private boolean requiresRowIteration(VisitContext ctx) {
+
+        return !ctx.getHints().contains(VisitHint.SKIP_ITERATION); 
+
+    }
+
+
+    // Perform pre-decode initialization work.  Note that this
+    // initialization may be performed either during a normal decode
+    // (ie. processDecodes()) or during a tree visit (ie. visitTree()).
+    private void preDecode(FacesContext context) {
+        setDataModel(null); // Re-evaluate even with server-side state saving
+        Map<String, SavedState> saved =
+              (Map<String, SavedState>) getStateHelper().get(PropertyKeys.saved);
+        if (null == saved || !keepSaved(context)) {
+            //noinspection CollectionWithoutInitialCapacity
+            getStateHelper().remove(PropertyKeys.saved);
+        }
+    }
+
+    // Perform pre-validation initialization work.  Note that this
+    // initialization may be performed either during a normal validation
+    // (ie. processValidators()) or during a tree visit (ie. visitTree()).
+    private void preValidate(FacesContext context) {
+        if (isNestedWithinIterator()) {
+            setDataModel(null);
+        }
+    }
+
+    // Perform pre-update initialization work.  Note that this
+    // initialization may be performed either during normal update
+    // (ie. processUpdates()) or during a tree visit (ie. visitTree()).
+    private void preUpdate(FacesContext context) {
+        if (isNestedWithinIterator()) {
+            setDataModel(null);
+        }
+    }
+
+    // Perform pre-encode initialization work.  Note that this
+    // initialization may be performed either during a normal encode
+    // (ie. encodeBegin()) or during a tree visit (ie. visitTree()).
+    private void preEncode(FacesContext context) {
+        setDataModel(null); // re-evaluate even with server-side state saving
+        if (!keepSaved(context)) {
+            ////noinspection CollectionWithoutInitialCapacity
+            //saved = new HashMap<String, SavedState>();
+            getStateHelper().remove(PropertyKeys.saved);
+        }
+    }
+
+    /**
+     * <p>Perform the appropriate phase-specific processing and per-row
+     * iteration for the specified phase, as follows:
+     * <ul>
+     * <li>Set the <code>rowIndex</code> property to -1, and process the facets
+     *     of this {@link UIData} component exactly once.</li>
+     * <li>Set the <code>rowIndex</code> property to -1, and process the facets
+     *     of the {@link UIColumn} children of this {@link UIData} component
+     *     exactly once.</li>
+     * <li>Iterate over the relevant rows, based on the <code>first</code>
+     *     and <code>row</code> properties, and process the children
+     *     of the {@link UIColumn} children of this {@link UIData} component
+     *     once per row.</li>
+     * </ul>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param phaseId {@link PhaseId} of the phase we are currently running
+     */
+    private void iterate(FacesContext context, PhaseId phaseId) {
+
+        // Process each facet of this component exactly once
+        setRowIndex(-1);
+        if (getFacetCount() > 0) {
+            for (UIComponent facet : getFacets().values()) {
+                if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
+                    facet.processDecodes(context);
+                } else if (phaseId == PhaseId.PROCESS_VALIDATIONS) {
+                    facet.processValidators(context);
+                } else if (phaseId == PhaseId.UPDATE_MODEL_VALUES) {
+                    facet.processUpdates(context);
+                } else {
+                    throw new IllegalArgumentException();
+                }
+            }
+        }
+        
+        // collect rendered columns once
+        List<UIColumn> renderedColumns = new ArrayList<UIColumn>(getChildCount());
+        if (getChildCount() > 0) {
+        	for (UIComponent child : getChildren()) {
+        		if (child instanceof UIColumn && child.isRendered()) {
+        			renderedColumns.add((UIColumn)child);
+        		}
+        	}
+        }
+
+        // Process each facet of our child UIColumn components exactly once
+        setRowIndex(-1);
+        for (UIColumn column : renderedColumns) {
+            if (column.getFacetCount() > 0) {
+                for (UIComponent columnFacet : column.getFacets().values()) {
+                    if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
+                        columnFacet.processDecodes(context);
+                    } else if (phaseId == PhaseId.PROCESS_VALIDATIONS) {
+                        columnFacet.processValidators(context);
+                    } else if (phaseId == PhaseId.UPDATE_MODEL_VALUES) {
+                        columnFacet.processUpdates(context);
+                    } else {
+                        throw new IllegalArgumentException();
+                    }
+                }
+            }
+        }
+
+        // Iterate over our UIColumn children, once per row
+        int processed = 0;
+        int rowIndex = getFirst() - 1;
+        int rows = getRows();
+
+        while (true) {
+
+            // Have we processed the requested number of rows?
+            if ((rows > 0) && (++processed > rows)) {
+                break;
+            }
+
+            // Expose the current row in the specified request attribute
+            setRowIndex(++rowIndex);
+            if (!isRowAvailable()) {
+                break; // Scrolled past the last row
+            }
+
+            // Perform phase-specific processing as required
+            // on the *children* of the UIColumn (facets have
+            // been done a single time with rowIndex=-1 already)
+            for (UIColumn kid : renderedColumns) {
+                if (kid.getChildCount() > 0) {
+                    for (UIComponent grandkid : kid.getChildren()) {
+                        if (!grandkid.isRendered()) {
+                            continue;
+                        }
+                        if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
+                            grandkid.processDecodes(context);
+                        } else if (phaseId == PhaseId.PROCESS_VALIDATIONS) {
+                            grandkid.processValidators(context);
+                        } else if (phaseId == PhaseId.UPDATE_MODEL_VALUES) {
+                            grandkid.processUpdates(context);
+                        } else {
+                            throw new IllegalArgumentException();
+                        }
+                    }
+                }
+            }
+
+        }
+
+        // Clean up after ourselves
+        setRowIndex(-1);
+
+    }
+
+    // Tests whether we need to visit our children as part of
+    // a tree visit
+    private boolean doVisitChildren(VisitContext context, boolean visitRows) {
+
+        // Just need to check whether there are any ids under this
+        // subtree.  Make sure row index is cleared out since 
+        // getSubtreeIdsToVisit() needs our row-less client id.
+        if (visitRows) {
+            setRowIndex(-1);
+        }
+        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
+        assert(idsToVisit != null);
+
+        // All ids or non-empty collection means we need to visit our children.
+        return (!idsToVisit.isEmpty());
+    }
+
+//    // Performs pre-phase initialization before visiting children
+//    // (if necessary).
+//    private void preVisitChildren(VisitContext visitContext) {
+//
+//        // If EXECUTE_LIFECYCLE hint is set, we need to do
+//        // lifecycle-related initialization before visiting children
+//        if (visitContext.getHints().contains(VisitHint.EXECUTE_LIFECYCLE)) {
+//            FacesContext facesContext = visitContext.getFacesContext();
+//            PhaseId phaseId = facesContext.getCurrentPhaseId();
+//
+//            if (phaseId == PhaseId.APPLY_REQUEST_VALUES)
+//                preDecode(facesContext);
+//            else if (phaseId == PhaseId.PROCESS_VALIDATIONS)
+//                preValidate(facesContext);
+//            else if (phaseId == PhaseId.UPDATE_MODEL_VALUES)
+//                preUpdate(facesContext);
+//            else if (phaseId == PhaseId.RENDER_RESPONSE)
+//                preEncode(facesContext);
+//        }
+//    }
+
+    // Visit each facet of this component exactly once.
+    private boolean visitFacets(VisitContext context,
+                                VisitCallback callback,
+                                boolean visitRows) {
+
+        if (visitRows) {
+            setRowIndex(-1);
+        }
+        if (getFacetCount() > 0) {
+            for (UIComponent facet : getFacets().values()) {
+                if (facet.visitTree(context, callback))
+                    return true;
+            }
+        }
+
+        return false;
+    }
+
+    // Visit each UIColumn and any facets it may have defined exactly once
+    private boolean visitColumnsAndColumnFacets(VisitContext context,
+                                                VisitCallback callback,
+                                                boolean visitRows) {
+        if (visitRows) {
+            setRowIndex(-1);
+        }
+        if (getChildCount() > 0) {
+            for (UIComponent column : getChildren()) {
+                if (column instanceof UIColumn) {
+                    VisitResult result = context.invokeVisitCallback(column, callback); // visit the column directly
+                    if (result == VisitResult.COMPLETE) {
+                        return true;
+                    }
+                    if (column.getFacetCount() > 0) {
+                        for (UIComponent columnFacet : column.getFacets().values()) {
+                            if (columnFacet.visitTree(context, callback)) {
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    // Visit each column and row
+    private boolean visitRows(VisitContext context,
+                              VisitCallback callback,
+                              boolean visitRows) {
+
+        // Iterate over our UIColumn children, once per row
+        int processed = 0;
+        int rowIndex = 0;
+        int rows = 0;
+        if (visitRows) {
+            rowIndex = getFirst() - 1;
+            rows = getRows();
+        }
+
+        while (true) {
+
+            // Have we processed the requested number of rows?
+            if (visitRows) {
+                if ((rows > 0) && (++processed > rows)) {
+                    break;
+                }
+                // Expose the current row in the specified request attribute
+                setRowIndex(++rowIndex);
+                if (!isRowAvailable()) {
+                    break; // Scrolled past the last row
+                }
+            }
+
+            // Visit as required on the *children* of the UIColumn
+            // (facets have been done a single time with rowIndex=-1 already)
+            if (getChildCount() > 0) {
+                for (UIComponent kid : getChildren()) {
+                    if (!(kid instanceof UIColumn)) {
+                        continue;
+                    }
+                    if (kid.getChildCount() > 0) {
+                    for (UIComponent grandkid : kid.getChildren()) {
+                            if (grandkid.visitTree(context, callback)) {
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (!visitRows) {
+                break;
+            }
+
+        }
+
+        return false;
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if we need to keep the saved
+     * per-child state information.  This will be the case if any of the
+     * following are true:</p>
+     *
+     * <ul>
+     *
+     * <li>there are messages queued with severity ERROR or FATAL.</li>
+     *
+     * <li>this <code>UIData</code> instance is nested inside of another
+     * <code>UIData</code> instance</li>
+     *
+     * </ul>
+     *
+     * @param context {@link FacesContext} for the current request
+     */
+    private boolean keepSaved(FacesContext context) {
+
+        return (contextHasErrorMessages(context) || isNestedWithinIterator());
+
+    }
+
+
+    private Boolean isNestedWithinIterator() {
+        if (isNested == null) {
+            UIComponent parent = this;
+            while (null != (parent = parent.getParent())) {
+                if (parent instanceof UIData || parent.getClass().getName().endsWith("UIRepeat")) {
+                    isNested = Boolean.TRUE;
+                    break;
+                }
+            }
+            if (isNested == null) {
+                isNested = Boolean.FALSE;
+            }
+            return isNested;
+        } else {
+            return isNested;
+        }
+    }
+
+
+    private boolean contextHasErrorMessages(FacesContext context) {
+
+        FacesMessage.Severity sev = context.getMaximumSeverity();
+        return (sev != null && (FacesMessage.SEVERITY_ERROR.compareTo(sev) >= 0));
+
+    }
+
+
+    /**
+     * <p>Restore state information for all descendant components, as described
+     * for <code>setRowIndex()</code>.</p>
+     */
+    private void restoreDescendantState() {
+
+        FacesContext context = getFacesContext();
+        if (getChildCount() > 0) {
+            for (UIComponent kid : getChildren()) {
+                if (kid instanceof UIColumn) {
+                    restoreDescendantState(kid, context);
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * <p>Restore state information for the specified component and its
+     * descendants.</p>
+     *
+     * @param component Component for which to restore state information
+     * @param context   {@link FacesContext} for the current request
+     */
+    private void restoreDescendantState(UIComponent component,
+                                        FacesContext context) {
+
+        // Reset the client identifier for this component
+        String id = component.getId();
+        component.setId(id); // Forces client id to be reset
+        Map<String, SavedState> saved = (Map<String,SavedState>)
+            getStateHelper().get(PropertyKeys.saved);
+        // Restore state for this component (if it is a EditableValueHolder)
+        if (component instanceof EditableValueHolder) {
+            EditableValueHolder input = (EditableValueHolder) component;
+            String clientId = component.getClientId(context);
+
+            SavedState state = (saved == null ? null : saved.get(clientId));
+            if (state == null) {
+                input.resetValue();
+            } else {
+                input.setValue(state.getValue());
+                input.setValid(state.isValid());
+                input.setSubmittedValue(state.getSubmittedValue());
+                // This *must* be set after the call to setValue(), since
+                // calling setValue() always resets "localValueSet" to true.
+                input.setLocalValueSet(state.isLocalValueSet());
+            }
+        } else if (component instanceof UIForm) {
+            UIForm form = (UIForm) component;
+            String clientId = component.getClientId(context);
+            SavedState state = (saved == null ? null : saved.get(clientId));
+            if (state == null) {
+                // submitted is transient state
+                form.setSubmitted(false);
+            } else {
+                form.setSubmitted(state.getSubmitted());
+            }
+        }
+
+        // Restore state for children of this component
+        if (component.getChildCount() > 0) {
+            for (UIComponent kid : component.getChildren()) {
+                restoreDescendantState(kid, context);
+            }
+        }
+
+        // Restore state for facets of this component
+        if (component.getFacetCount() > 0) {
+            for (UIComponent facet : component.getFacets().values()) {
+                restoreDescendantState(facet, context);
+            }
+        }
+
+    }
+
+
+    /**
+     * <p>Save state information for all descendant components, as described for
+     * <code>setRowIndex()</code>.</p>
+     */
+    private void saveDescendantState() {
+
+        FacesContext context = getFacesContext();
+        if (getChildCount() > 0) {
+            for (UIComponent kid : getChildren()) {
+                if (kid instanceof UIColumn) {
+                    saveDescendantState(kid, context);
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * <p>Save state information for the specified component and its
+     * descendants.</p>
+     *
+     * @param component Component for which to save state information
+     * @param context   {@link FacesContext} for the current request
+     */
+    private void saveDescendantState(UIComponent component,
+                                     FacesContext context) {
+
+        // Save state for this component (if it is a EditableValueHolder)
+        Map<String, SavedState> saved = (Map<String, SavedState>)
+              getStateHelper().get(PropertyKeys.saved);
+        if (component instanceof EditableValueHolder) {
+            EditableValueHolder input = (EditableValueHolder) component;
+            SavedState state = null;
+            String clientId = component.getClientId(context);
+            if (saved == null) {
+                state = new SavedState();
+            }
+            if (state == null) {
+                state = saved.get(clientId);
+                if (state == null) {
+                    state = new SavedState();
+                }
+            }
+            state.setValue(input.getLocalValue());
+            state.setValid(input.isValid());
+            state.setSubmittedValue(input.getSubmittedValue());
+            state.setLocalValueSet(input.isLocalValueSet());
+            if (state.hasDeltaState()) {
+            	getStateHelper().put(PropertyKeys.saved, clientId, state);
+            } else if (saved != null) {
+            	getStateHelper().remove(PropertyKeys.saved, clientId);
+            }
+        } else if (component instanceof UIForm) {
+            UIForm form = (UIForm) component;
+            String clientId = component.getClientId(context);
+            SavedState state = null;
+            if (saved == null) {
+                state = new SavedState();
+            }
+            if (state == null) {
+                state = saved.get(clientId);
+                if (state == null) {
+                    state = new SavedState();
+                }
+            }
+            state.setSubmitted(form.isSubmitted());
+            if (state.hasDeltaState()) {
+            	getStateHelper().put(PropertyKeys.saved, clientId, state);
+            } else if (saved != null) {
+            	getStateHelper().remove(PropertyKeys.saved, clientId);
+            }
+        }
+
+        // Save state for children of this component
+        if (component.getChildCount() > 0) {
+            for (UIComponent uiComponent : component.getChildren()) {
+                saveDescendantState(uiComponent, context);
+            }
+        }
+
+        // Save state for facets of this component
+        if (component.getFacetCount() > 0) {
+            for (UIComponent facet : component.getFacets().values()) {
+                saveDescendantState(facet, context);
+            }
+        }
+
+    }
+
+}
+ at SuppressWarnings({"SerializableHasSerializationMethods",
+      "NonSerializableFieldInSerializableClass"})
+class SavedState implements Serializable {
+
+    private static final long serialVersionUID = 2920252657338389849L;
+    private Object submittedValue;
+    private boolean submitted;
+
+    Object getSubmittedValue() {
+        return (this.submittedValue);
+    }
+
+    void setSubmittedValue(Object submittedValue) {
+        this.submittedValue = submittedValue;
+    }
+
+    private boolean valid = true;
+
+    boolean isValid() {
+        return (this.valid);
+    }
+
+    void setValid(boolean valid) {
+        this.valid = valid;
+    }
+
+    private Object value;
+
+    Object getValue() {
+        return (this.value);
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    private boolean localValueSet;
+
+    boolean isLocalValueSet() {
+        return (this.localValueSet);
+    }
+
+    public void setLocalValueSet(boolean localValueSet) {
+        this.localValueSet = localValueSet;
+    }
+
+    public boolean getSubmitted() {
+        return this.submitted;
+    }
+
+    public void setSubmitted(boolean submitted) {
+        this.submitted = submitted;
+    }
+
+	public boolean hasDeltaState() {
+		return submittedValue != null || value != null || localValueSet
+				|| !valid || submitted;
+	}
+    
+    public String toString() {
+        return ("submittedValue: " + submittedValue +
+                " value: " + value +
+                " localValueSet: " + localValueSet);
+    }
+
+}
+
+// Private class to wrap an event with a row index
+class WrapperEvent extends FacesEvent {
+
+
+    public WrapperEvent(UIComponent component, FacesEvent event, int rowIndex) {
+        super(component);
+        this.event = event;
+        this.rowIndex = rowIndex;
+    }
+
+    private FacesEvent event = null;
+    private int rowIndex = -1;
+
+    public FacesEvent getFacesEvent() {
+        return (this.event);
+    }
+
+    public int getRowIndex() {
+        return (this.rowIndex);
+    }
+
+    public PhaseId getPhaseId() {
+        return (this.event.getPhaseId());
+    }
+
+    public void setPhaseId(PhaseId phaseId) {
+        this.event.setPhaseId(phaseId);
+    }
+
+    public boolean isAppropriateListener(FacesListener listener) {
+        return (false);
+    }
+
+    public void processListener(FacesListener listener) {
+        throw new IllegalStateException();
+    }
+
+
+}
diff --git a/javax/faces/component/UIForm.java b/javax/faces/component/UIForm.java
new file mode 100644
index 0000000..16d1e20
--- /dev/null
+++ b/javax/faces/component/UIForm.java
@@ -0,0 +1,394 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.util.Collection;
+import java.util.Iterator;
+import javax.faces.application.Application;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PostValidateEvent;
+import javax.faces.event.PreValidateEvent;
+
+
+/**
+ * <p><strong class="changed_modified_2_1">UIForm</strong> is a {@link
+ * UIComponent} that represents an input form to be presented to the
+ * user, and whose child components represent (among other things) the
+ * input fields to be included when the form is submitted.</p>
+
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Form</code>".  This value can be changed by calling the
+ * <code>setRendererType()</code> method.</p>
+ */
+
+public class UIForm extends UIComponentBase implements NamingContainer, UniqueIdVendor {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Form";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Form";
+
+
+    /**
+     * Properties that are tracked by state saving.
+     */
+    enum PropertyKeys {
+
+        /**
+         * <p>The prependId flag.</p>
+         */
+        prependId,
+
+        /**
+         * <p>Last id vended by {@link UIForm#createUniqueId(javax.faces.context.FacesContext, String)}.</p>
+         */
+        lastId,
+        
+        submitted,
+    }
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIForm} instance with default property
+     * values.</p>
+     */
+    public UIForm() {
+
+        super();
+        setRendererType("javax.faces.Form");
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+    //private int lastId = 0;
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>The form submitted flag for this {@link UIForm}.</p>
+     */
+    //private boolean submitted = false;
+
+
+    /**
+     * <p><span class="changed_modified_2_1">Returns</span> the current value
+     * of the <code>submitted</code> property.  The default value is
+     * <code>false</code>.  See {@link #setSubmitted} for details.</p>
+
+     * <p class="changed_modified_2_1">This property must be kept as a
+     * transient property using the {@link
+     * UIComponent#getTransientStateHelper}.</p>
+     */
+    public boolean isSubmitted() {
+
+        //return (this.submitted);
+        return (Boolean) getTransientStateHelper().getTransient(PropertyKeys.submitted, false);
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_1">If</span>
+     * <strong>this</strong> <code>UIForm</code> instance (as opposed to
+     * other forms in the page) is experiencing a submit during this
+     * request processing lifecycle, this method must be called, with
+     * <code>true</code> as the argument, during the {@link
+     * UIComponent#decode} for this <code>UIForm</code> instance.  If
+     * <strong>this</strong> <code>UIForm</code> instance is
+     * <strong>not</strong> experiencing a submit, this method must be
+     * called, with <code>false</code> as the argument, during the
+     * {@link UIComponent#decode} for this <code>UIForm</code>
+     * instance.</p> <p/> <p>The value of a <code>UIForm</code>'s
+     * submitted property must not be saved as part of its state.</p>
+
+     * <p class="changed_modified_2_1">This property must be kept as a
+     * transient property using the {@link
+     * UIComponent#getTransientStateHelper}.</p>
+     */
+    public void setSubmitted(boolean submitted) {
+
+        //this.submitted = submitted;
+        getTransientStateHelper().putTransient(PropertyKeys.submitted, submitted);
+    }
+
+    /**
+     * <p>The prependId flag.</p>
+     */
+    //private Boolean prependId;
+
+
+    public boolean isPrependId() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.prependId, true);
+
+    }
+
+
+    public void setPrependId(boolean prependId) {
+
+        getStateHelper().put(PropertyKeys.prependId, prependId);
+
+    }
+
+    // ----------------------------------------------------- UIComponent Methods
+
+
+    /**
+     * <p>Override {@link UIComponent#processDecodes} to ensure that the
+     * form is decoded <strong>before</strong> its children.  This is
+     * necessary to allow the <code>submitted</code> property to be
+     * correctly set.</p>
+     *
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processDecodes(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Process this component itself
+        decode(context);
+
+        // if we're not the submitted form, don't process children.
+        if (!isSubmitted()) {
+            return;
+        }
+
+        // Process all facets and children of this component
+        Iterator kids = getFacetsAndChildren();
+        while (kids.hasNext()) {
+            UIComponent kid = (UIComponent) kids.next();
+            kid.processDecodes(context);
+        }
+
+    }
+
+
+    /**
+     * <p>Override {@link UIComponent#processValidators} to ensure that
+     * the children of this <code>UIForm</code> instance are only
+     * processed if {@link #isSubmitted} returns <code>true</code>.</p>
+     *
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processValidators(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!isSubmitted()) {
+            return;
+        }
+        pushComponentToEL(context, this);
+        Application app = context.getApplication();
+        app.publishEvent(context, PreValidateEvent.class, this);
+        // Process all the facets and children of this component
+        Iterator kids = getFacetsAndChildren();
+        while (kids.hasNext()) {
+            UIComponent kid = (UIComponent) kids.next();
+            kid.processValidators(context);
+        }
+        app.publishEvent(context, PostValidateEvent.class, this);
+        popComponentFromEL(context);
+
+    }
+
+
+    /**
+     * <p>Override {@link UIComponent#processUpdates} to ensure that the
+     * children of this <code>UIForm</code> instance are only processed
+     * if {@link #isSubmitted} returns <code>true</code>.</p>
+     *
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processUpdates(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!isSubmitted()) {
+            return;
+        }
+
+        // Process all facets and children of this component
+        Iterator kids = getFacetsAndChildren();
+        while (kids.hasNext()) {
+            UIComponent kid = (UIComponent) kids.next();
+            kid.processUpdates(context);
+        }
+
+    }
+
+    /**<p class="changed_modified_2_2">Generate an identifier for a component. The identifier
+     * will be prefixed with UNIQUE_ID_PREFIX, and will be unique
+     * within this component-container. Optionally, a unique seed value can
+     * be supplied by component creators which should be
+     * included in the generated unique id.</p>
+     * <p class="changed_added_2_2">
+     * If the <code>prependId</code> property has the value <code>false</code>,
+     * this method must call <code>createUniqueId</code> on the next ancestor
+     * <code>UniqueIdVendor</code>.
+     * </p>
+     *
+     * @param context FacesContext
+     * @param seed an optional seed value - e.g. based on the position of the component in the VDL-template
+     * @return a unique-id in this component-container
+     */
+    public String createUniqueId(FacesContext context, String seed) {
+        if (isPrependId()) {
+            Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
+            int lastId = ((i != null) ? i : 0);
+            getStateHelper().put(PropertyKeys.lastId,  ++lastId);
+            return UIViewRoot.UNIQUE_ID_PREFIX + (seed == null ? lastId : seed);
+        } else {
+            UIComponent ancestorNamingContainer = (getParent() == null) ? null : getParent().getNamingContainer();
+            String uid = null;
+            if (null != ancestorNamingContainer &&
+                    ancestorNamingContainer instanceof UniqueIdVendor) {
+                uid = ((UniqueIdVendor) ancestorNamingContainer).createUniqueId(context, seed);
+            } else {
+                uid = context.getViewRoot().createUniqueId(context, seed);
+            }
+            return uid;
+        }
+    }
+    
+    /**
+     * <p>Override the {@link UIComponent#getContainerClientId} to allow
+     * users to disable this form from prepending its <code>clientId</code> to
+     * its descendent's <code>clientIds</code> depending on the value of
+     * this form's {@link #isPrependId} property.</p>
+     */
+    public String getContainerClientId(FacesContext context) {
+        if (this.isPrependId()) {
+            return super.getContainerClientId(context);
+        } else {
+            UIComponent parent = this.getParent();
+            while (parent != null) {
+                if (parent instanceof NamingContainer) {
+                    return parent.getContainerClientId(context);
+                }
+                parent = parent.getParent();
+            }
+        }
+        return null;
+    }
+
+   
+    /**
+     * @see UIComponent#visitTree
+     */
+    @Override
+    public boolean visitTree(VisitContext context,
+                             VisitCallback callback) {
+
+        // NamingContainers can optimize partial tree visits by taking advantage
+        // of the fact that it is possible to detect whether any ids to visit
+        // exist underneath the NamingContainer.  If no such ids exist, there
+        // is no need to visit the subtree under the NamingContainer.
+
+        // UIForm is a bit different from other NamingContainers.  It only acts
+        // as a NamingContainer when prependId is true.  Note that if it 
+        // weren't for this, we could push this implementation up in to
+        // UIComponent and share it across all NamingContainers.  Instead,
+        // we currently duplicate this implementation in UIForm and 
+        // UINamingContainer, so that we can check isPrependId() here.
+
+        if (!this.isPrependId()) {
+            return super.visitTree(context, callback);
+        }
+
+        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
+        assert (idsToVisit != null);
+
+        // If we have ids to visit, let the superclass implementation
+        // handle the visit
+        if (!idsToVisit.isEmpty()) {
+            return super.visitTree(context, callback);
+        }
+
+        // If we have no child ids to visit, just visit ourselves, if
+        // we are visitable.
+        if (isVisitable(context)) {
+            FacesContext facesContext = context.getFacesContext();
+            pushComponentToEL(facesContext, null);
+
+            try {
+                VisitResult result = context.invokeVisitCallback(this, callback);
+                return (result == VisitResult.COMPLETE);
+            }
+            finally {
+                popComponentFromEL(facesContext);
+            }
+        }
+
+        // Done visiting this subtree.  Return false to allow 
+        // visit to continue.
+        return false;
+    }
+}
+
diff --git a/javax/faces/component/UIGraphic.java b/javax/faces/component/UIGraphic.java
new file mode 100644
index 0000000..477b42c
--- /dev/null
+++ b/javax/faces/component/UIGraphic.java
@@ -0,0 +1,272 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import javax.el.ValueExpression;
+import javax.faces.el.ValueBinding;
+
+
+/**
+ * <p><strong>UIGraphic</strong> is a {@link UIComponent} that displays
+ * a graphical image to the user.  The user cannot manipulate this component;
+ * it is for display purposes only.</p>
+ *
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Image</code>".  This value can be changed by calling the
+ * <code>setRendererType()</code> method.</p>
+ */
+
+public class UIGraphic extends UIComponentBase {
+
+    /**
+     * Properties that are tracked by state saving.
+     */
+    enum PropertyKeys {
+
+        /**
+         * <p>The local value of this {@link UIComponent}.</p>
+         */
+        value
+    }
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Graphic";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Graphic";
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIGraphic} instance with default property
+     * values.</p>
+     */
+    public UIGraphic() {
+
+        super();
+        setRendererType("javax.faces.Image");
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    //private Object value = null;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the image URL for this {@link UIGraphic}.  This method is a
+     * typesafe alias for <code>getValue()</code>.</p>
+     */
+    public String getUrl() {
+
+        return ((String) getValue());
+
+    }
+
+
+    /**
+     * <p>Set the image URL for this {@link UIGraphic}.  This method is a
+     * typesafe alias for <code>setValue()</code>.</p>
+     *
+     * @param url The new image URL
+     */
+    public void setUrl(String url) {
+
+        setValue(url);
+
+    }
+
+
+
+
+    /**
+     * <p>Returns the <code>value</code> property of the
+     * <code>UIGraphic</code>. This will typically be rendered as an URL.</p>
+     */
+    public Object getValue() {
+
+        return getStateHelper().eval(PropertyKeys.value);
+
+    }
+
+
+    /**
+     * <p>Sets the <code>value</code> property of the <code>UIGraphic</code>.
+     * This will typically be rendered as an URL.</p>
+     * 
+     * @param value the new value
+     */
+    public void setValue(Object value) {
+
+        getStateHelper().put(PropertyKeys.value, value);
+
+    }
+
+
+    // ---------------------------------------------------------------- Bindings
+
+
+    /**
+     * <p>Return any {@link ValueBinding} set for <code>value</code> if a
+     * {@link ValueBinding} for <code>url</code> is requested; otherwise,
+     * perform the default superclass processing for this method.</p>
+     *
+     * @param name Name of the attribute or property for which to retrieve
+     *  a {@link ValueBinding}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated This has been replaced by {@link #getValueExpression(java.lang.String)}.
+     */
+    public ValueBinding getValueBinding(String name) {
+
+        if ("url".equals(name)) {
+            return (super.getValueBinding("value"));
+        } else {
+            return (super.getValueBinding(name));
+        }
+
+    }
+
+
+    /**
+     * <p>Store any {@link ValueBinding} specified for <code>url</code>
+     * under <code>value</code> instead; otherwise, perform the default
+     * superclass processing for this method.  In all cases, the
+     * superclass is relied on to convert the <code>ValueBinding</code>
+     * to a <code>ValueExpression</code>.</p>
+     *
+     * @param name Name of the attribute or property for which to set
+     *  a {@link ValueBinding}
+     * @param binding The {@link ValueBinding} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueBinding}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated This has been replaced by {@link #setValueExpression}.
+     */
+    public void setValueBinding(String name, ValueBinding binding) {
+
+        if ("url".equals(name)) {
+            super.setValueBinding("value", binding);
+        } else {
+            super.setValueBinding(name, binding);
+        }
+
+    }
+
+    /**
+     * <p>Return any {@link ValueExpression} set for <code>value</code> if a
+     * {@link ValueExpression} for <code>url</code> is requested; otherwise,
+     * perform the default superclass processing for this method.</p>
+     *
+     * @param name Name of the attribute or property for which to retrieve
+     *  a {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     * @since 1.2
+     */
+    public ValueExpression getValueExpression(String name) {
+
+        if ("url".equals(name)) {
+            return (super.getValueExpression("value"));
+        } else {
+            return (super.getValueExpression(name));
+        }
+
+    }
+    
+    /**
+     * <p>Store any {@link ValueExpression} specified for <code>url</code> under
+     * <code>value</code> instead; otherwise, perform the default superclass
+     * processing for this method.</p>
+     *
+     * @param name Name of the attribute or property for which to set
+     *  a {@link ValueExpression}
+     * @param binding The {@link ValueExpression} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     * @since 1.2
+     */
+    public void setValueExpression(String name, ValueExpression binding) {
+
+        if ("url".equals(name)) {
+            super.setValueExpression("value", binding);
+        } else {
+            super.setValueExpression(name, binding);
+        }
+
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+
+
+}
diff --git a/javax/faces/component/UIInput.java b/javax/faces/component/UIInput.java
new file mode 100644
index 0000000..8bdcd3a
--- /dev/null
+++ b/javax/faces/component/UIInput.java
@@ -0,0 +1,1540 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import java.util.Map;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.el.MethodBinding;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PostValidateEvent;
+import javax.faces.event.PreValidateEvent;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
+import javax.faces.render.Renderer;
+import javax.faces.validator.BeanValidator;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+
+/**
+ * <p><span class="changed_modified_2_0 changed_modified_2_0_rev_a
+ * changed_modified_2_2"><strong>UIInput</strong></span> is a {@link
+ * UIComponent} that represents a component that both displays output to
+ * the user (like {@link UIOutput} components do) and processes request
+ * parameters on the subsequent request that need to be decoded.  There
+ * are no restrictions on the data type of the local value, or the
+ * object referenced by the value binding expression (if any); however,
+ * individual {@link javax.faces.render.Renderer}s will generally impose
+ * restrictions on the type of data they know how to display.</p>
+ *
+ * <p>During the <em>Apply Request Values</em> phase
+ * of the request processing lifecycle, the decoded value of this
+ * component, usually but not necessarily a String, must be stored - but
+ * not yet converted - using <code>setSubmittedValue()</code>.  If the
+ * component wishes to indicate that no particular value was submitted,
+ * it can either do nothing, or set the submitted value to
+ * <code>null</code>.</p>
+
+ * <p>By default, during the <em>Process Validators</em> phase of the
+ * request processing lifecycle, the submitted value will be converted
+ * to a typesafe object, and, if validation succeeds, stored as a local
+ * value using <code>setValue()</code>.  However, if the
+ * <code>immediate</code> property is set to <code>true</code>, this
+ * processing will occur instead at the end of the <em>Apply Request
+ * Values</em> phase.</p> 
+
+ * <p>During the <em>Render Response</em> phase of the request
+ * processing lifecycle, conversion for output occurs as for {@link
+ * UIOutput}.</p>
+
+ * <p>When the <code>validate()</code> method of this {@link UIInput}
+ * detects that a value change has actually occurred, and that all
+ * validations have been successfully passed, it will queue a {@link
+ * ValueChangeEvent}.  Later on, the <code>broadcast()</code> method
+ * will ensure that this event is broadcast to all interested listeners.
+ * This event will be delivered by default in the <em>Process
+ * Validators</em> phase, but can be delivered instead during <em>Apply
+ * Request Values</em> if the <code>immediate</code> property is set to
+ * <code>true</code>. <span class="changed_added_2_0">If the validation
+ * fails, the implementation must call {@link
+ * FacesContext#validationFailed}.</span></p>
+
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>Text</code>".  This value can be changed by calling the
+ * <code>setRendererType()</code> method.</p>
+ */
+
+public class UIInput extends UIOutput implements EditableValueHolder {
+
+    /* PENDING_2_1 (edburns,rogerk) this should be exposed as public constant */
+    private static final String EMPTY_STRING_AS_NULL =
+          "javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL";
+
+    private static final String BEANS_VALIDATION_AVAILABLE =
+          "javax.faces.private.BEANS_VALIDATION_AVAILABLE";
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Input";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Input";
+
+
+    /**
+     * <p>The message identifier of the
+     * {@link javax.faces.application.FacesMessage} to be created if
+     * a conversion error occurs, and neither the page author nor
+     * the {@link ConverterException} provides a message.</p>
+     */
+    public static final String CONVERSION_MESSAGE_ID =
+         "javax.faces.component.UIInput.CONVERSION";
+
+
+    /**
+     * <p>The message identifier of the
+     * {@link javax.faces.application.FacesMessage} to be created if
+     * a required check fails.</p>
+     */
+    public static final String REQUIRED_MESSAGE_ID =
+         "javax.faces.component.UIInput.REQUIRED";
+
+    /**
+     * <p>The message identifier of the
+     * {@link javax.faces.application.FacesMessage} to be created if
+     * a model update error occurs, and the thrown exception has
+     * no message.</p>
+     */
+    public static final String UPDATE_MESSAGE_ID =
+         "javax.faces.component.UIInput.UPDATE";
+
+
+    /**
+     * <p class="changed_added_2_0">The name of an application parameter
+     * that indicates how empty values should be handled with respect to
+     * validation.  See {@link #validateValue} for the allowable values
+     * and specification of how they should be interpreted.</p>
+     */
+
+    public static final String VALIDATE_EMPTY_FIELDS_PARAM_NAME = 
+	"javax.faces.VALIDATE_EMPTY_FIELDS";
+    
+    private static final Validator[] EMPTY_VALIDATOR = new Validator[0];
+
+    private transient Boolean emptyStringIsNull;
+
+    private transient Boolean validateEmptyFields;
+
+    enum PropertyKeys {
+        /**
+     * <p>The "localValueSet" state for this component.
+     */
+        localValueSet,
+
+        /**
+         * <p>If the input is required or not.</p>
+         */
+        required,
+
+        /**
+         * <p>Custom message to be displayed if input is required but non was submitted.</p>
+         */
+        requiredMessage,
+
+        /**
+         * <p>Custom message to be displayed when conversion fails.</p>
+         */
+        converterMessage,
+
+        /**
+         * <p>Custom message to be displayed when validation fails.</p>
+         */
+        validatorMessage,
+
+        /**
+         * <p>Flag indicating whether or not this component is valid.</p>
+         */
+        valid,
+
+        /**
+         * <p>Flag indicating when conversion/validation should occur.</p>
+         */
+        immediate,
+
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIInput} instance with default property
+     * values.</p>
+     */
+    public UIInput() {
+
+        super();
+        setRendererType("javax.faces.Text");
+
+    }
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>The submittedValue value of this {@link UIInput} component.</p>
+     */
+    private transient Object submittedValue = null;
+
+
+    /**
+     * <p>Return the submittedValue value of this {@link UIInput} component.
+     * This method should only be used by the <code>decode()</code> and
+     * <code>validate()</code> method of this component, or
+     * its corresponding {@link Renderer}.</p>
+     */
+    public Object getSubmittedValue() {
+
+        return (this.submittedValue);
+
+    }
+
+
+    /**
+     * <p>Set the submittedValue value of this {@link UIInput} component.
+     * This method should only be used by the <code>decode()</code> and
+     * <code>validate()</code> method of this component, or
+     * its corresponding {@link Renderer}.</p>
+     *
+     * @param submittedValue The new submitted value
+     */
+    public void setSubmittedValue(Object submittedValue) {
+
+        this.submittedValue = submittedValue;
+
+    }
+
+    /**
+     * <p class="changed_added_2_2">If there is a local value, return it,
+     * otherwise return the result of calling {@code super.getVaue()}.</p>
+     * 
+     * @since 2.2
+     */
+
+    @Override
+    public Object getValue() {
+        return isLocalValueSet() ? getLocalValue() : super.getValue();
+    }
+    
+    @Override
+    public void setValue(Object value) {
+        super.setValue(value);
+        // Mark the local value as set.
+        setLocalValueSet(true);
+    }
+
+    /**
+     * <p><span class="changed_modified_2_2">Convenience</span> method to reset 
+     * this component's value to the
+     * un-initialized state.  This method does the following:</p>
+     * <p/>
+     * <p class="changed_modified_2_2">Call {@link UIOutput#setValue}.</p>
+     * <p/>
+     * <p>Call {@link #setSubmittedValue} passing <code>null</code>.</p>
+     * <p/>
+     * <p>Clear state for property <code>localValueSet</code>.</p>
+     * <p/>
+     * <p>Clear state for property <code>valid</code>.</p>
+     * <p/>
+     * <p>Upon return from this call if the instance had a
+     * <code>ValueBinding</code> associated with it for the "value"
+     * property, this binding is evaluated when {@link
+     * UIOutput#getValue} is called.  Otherwise, <code>null</code> is
+     * returned from <code>getValue()</code>.</p>
+     */
+
+    @Override
+    public void resetValue() {
+        super.resetValue();
+        this.setSubmittedValue(null);
+        getStateHelper().remove(PropertyKeys.localValueSet);
+        getStateHelper().remove(PropertyKeys.valid);
+    }
+
+
+    /**
+     * Return the "local value set" state for this component.
+     * Calls to <code>setValue()</code> automatically reset
+     * this property to <code>true</code>.
+     */
+    public boolean isLocalValueSet() {
+        return (Boolean) getStateHelper().eval(PropertyKeys.localValueSet, false);
+    }
+
+    /**
+     * Sets the "local value set" state for this component.
+     */
+    public void setLocalValueSet(boolean localValueSet) {
+        getStateHelper().put(PropertyKeys.localValueSet, localValueSet);
+    }
+
+
+    /**
+     * <p>Return the "required field" state for this component.</p>
+     */
+    public boolean isRequired() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.required, false);
+
+    }
+
+
+    /**
+     * <p>If there has been a call to {@link #setRequiredMessage} on this
+     * instance, return the message.  Otherwise, call {@link #getValueExpression}
+     * passing the key "requiredMessage", get the result of the expression, and return it.
+     * Any {@link ELException}s thrown during the call to <code>getValue()</code>
+     * must be wrapped in a {@link FacesException} and rethrown.
+     */
+
+    public String getRequiredMessage() {
+
+        return (String) getStateHelper().eval(PropertyKeys.requiredMessage);
+
+    }
+
+    /**
+     * <p>Override any {@link ValueExpression} set for the "requiredMessage"
+     * with the literal argument provided to this method.  Subsequent calls
+     * to {@link #getRequiredMessage} will return this value;</p>
+     *
+     * @param message the literal message value to be displayed in the event
+     *                the user hasn't supplied a value and one is required.
+     */
+
+    public void setRequiredMessage(String message) {
+
+        getStateHelper().put(PropertyKeys.requiredMessage,  message);
+
+    }
+
+
+    /**
+     * <p>If there has been a call to {@link #setConverterMessage} on this
+     * instance, return the message.  Otherwise, call {@link #getValueExpression}
+     * passing the key "converterMessage", get the result of the expression, and return it.
+     * Any {@link ELException}s thrown during the call to <code>getValue()</code>
+     * must be wrapped in a {@link FacesException} and rethrown.
+     */
+
+    public String getConverterMessage() {
+
+        return (String) getStateHelper().eval(PropertyKeys.converterMessage);
+
+    }
+
+    /**
+     * <p>Override any {@link ValueExpression} set for the "converterMessage"
+     * with the literal argument provided to this method.  Subsequent calls
+     * to {@link #getConverterMessage} will return this value;</p>
+     *
+     * @param message the literal message value to be displayed in the event
+     *                conversion fails.
+     */
+
+    public void setConverterMessage(String message) {
+
+        getStateHelper().put(PropertyKeys.converterMessage, message);
+
+    }
+
+
+    /**
+     * <p>If there has been a call to {@link #setValidatorMessage} on this
+     * instance, return the message.  Otherwise, call {@link #getValueExpression}
+     * passing the key "validatorMessage", get the result of the expression, and return it.
+     * Any {@link ELException}s thrown during the call to <code>getValue()</code>
+     * must be wrapped in a {@link FacesException} and rethrown.
+     */
+
+    public String getValidatorMessage() {
+
+        return (String) getStateHelper().eval(PropertyKeys.validatorMessage);
+
+    }
+
+    /**
+     * <p>Override any {@link ValueExpression} set for the "validatorMessage"
+     * with the literal argument provided to this method.  Subsequent calls
+     * to {@link #getValidatorMessage} will return this value;</p>
+     *
+     * @param message the literal message value to be displayed in the event
+     *                validation fails.
+     */
+
+    public void setValidatorMessage(String message) {
+
+        getStateHelper().put(PropertyKeys.validatorMessage, message);
+
+    }
+
+
+    public boolean isValid() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.valid, true);
+
+    }
+
+
+    public void setValid(boolean valid) {
+
+        getStateHelper().put(PropertyKeys.valid, valid);
+
+    }
+
+
+    /**
+     * <p>Set the "required field" state for this component.</p>
+     *
+     * @param required The new "required field" state
+     */
+    public void setRequired(boolean required) {
+
+        getStateHelper().put(PropertyKeys.required, required);
+
+    }
+
+
+    public boolean isImmediate() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, false);
+
+    }
+
+
+    public void setImmediate(boolean immediate) {
+
+        getStateHelper().put(PropertyKeys.immediate, immediate);
+
+    }
+
+
+    /**
+     * <p>Return a <code>MethodBinding</code> pointing at a
+     * method that will be called during <em>Process Validations</em>
+     * phase of the request processing lifecycle, to validate the current
+     * value of this component.</p>
+     *
+     * @deprecated {@link #getValidators} should be used instead.
+     */
+    public MethodBinding getValidator() {
+        MethodBinding result = null;
+
+        Validator[] curValidators = getValidators();
+        // go through our lisetners list and find the one and only
+        // MethodBindingValidator instance, if present.
+        if (null != curValidators) {
+            for (int i = 0; i < curValidators.length; i++) {
+                // We are guaranteed to have at most one instance of
+                // MethodBindingValidator in the curValidators list.
+                if (MethodBindingValidator.class ==
+                     curValidators[i].getClass()) {
+                    result = ((MethodBindingValidator) curValidators[i]).
+                         getWrapped();
+                    break;
+                }
+            }
+        }
+        return result;
+
+    }
+
+
+    /**
+     * <p>Set a <code>MethodBinding</code> pointing at a
+     * method that will be called during <em>Process Validations</em>
+     * phase of the request processing lifecycle, to validate the current
+     * value of this component.</p>
+     * <p/>
+     * <p>Any method referenced by such an expression must be public, with
+     * a return type of <code>void</code>, and accept parameters of type
+     * {@link FacesContext}, {@link UIComponent}, and <code>Object</code>.</p>
+     *
+     * @param validatorBinding The new <code>MethodBinding</code> instance
+     * @deprecated Use {@link #addValidator} instead, obtaining the
+     *             argument {@link Validator} by creating an instance of {@link
+     *             javax.faces.validator.MethodExpressionValidator}.
+     */
+    public void setValidator(MethodBinding validatorBinding) {
+        Validator[] curValidators = getValidators();
+        // see if we need to null-out, or replace an existing validator
+        if (null != curValidators) {
+            for (int i = 0; i < curValidators.length; i++) {
+                // if we want to remove the validatorBinding
+                if (null == validatorBinding) {
+                    // We are guaranteed to have at most one instance of
+                    // MethodBindingValidator in the curValidators
+                    // list.
+                    if (MethodBindingValidator.class ==
+                         curValidators[i].getClass()) {
+                        removeValidator(curValidators[i]);
+                        return;
+                    }
+                }
+                // if we want to replace the validatorBinding
+                else //noinspection ObjectEquality
+                    if (validatorBinding == curValidators[i]) {
+                    removeValidator(curValidators[i]);
+                    break;
+                }
+            }
+        }
+        addValidator(new MethodBindingValidator(validatorBinding));
+
+    }
+
+    public MethodBinding getValueChangeListener() {
+        MethodBinding result = null;
+
+        ValueChangeListener[] curListeners = getValueChangeListeners();
+        // go through our lisetners list and find the one and only
+        // MethodBindingValueChangeListener instance, if present.
+        if (null != curListeners) {
+            for (int i = 0; i < curListeners.length; i++) {
+                // We are guaranteed to have at most one instance of
+                // MethodBindingValueChangeListener in the curListeners list.
+                if (MethodBindingValueChangeListener.class ==
+                     curListeners[i].getClass()) {
+                    result = ((MethodBindingValueChangeListener) curListeners[i]).
+                         getWrapped();
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     *
+     * @deprecated Use {@link #addValueChangeListener} instead, obtaining the
+     *             argument {@link ValueChangeListener} by creating an instance of {@link
+     *             javax.faces.event.MethodExpressionValueChangeListener}.
+     */
+    public void setValueChangeListener(MethodBinding valueChangeListener) {
+
+        ValueChangeListener[] curListeners = getValueChangeListeners();
+        // see if we need to null-out, or replace an existing listener
+        if (null != curListeners) {
+            for (int i = 0; i < curListeners.length; i++) {
+                // if we want to remove the valueChangeListener
+                if (null == valueChangeListener) {
+                    // We are guaranteed to have at most one instance of
+                    // MethodBindingValueChangeListener in the curListeners
+                    // list.
+                    if (MethodBindingValueChangeListener.class ==
+                         curListeners[i].getClass()) {
+                        removeFacesListener(curListeners[i]);
+                        return;
+                    }
+                }
+                // if we want to replace the valueChangeListener
+                else //noinspection ObjectEquality
+                    if (valueChangeListener == curListeners[i]) {
+                    removeFacesListener(curListeners[i]);
+                    break;
+                }
+            }
+        }
+        addValueChangeListener(new MethodBindingValueChangeListener(valueChangeListener));
+    }
+
+    // ----------------------------------------------------- UIComponent Methods
+
+
+    /**
+     * <p>
+     * In addition to the actions taken in {@link UIOutput}
+     * when {@link PartialStateHolder#markInitialState()} is called,
+     * check if any of the installed {@link Validator}s are PartialStateHolders and
+     * if so, call {@link javax.faces.component.PartialStateHolder#markInitialState()}
+     * as appropriate.
+     * </p>
+     */
+    @Override
+    public void markInitialState() {
+
+        super.markInitialState();
+        if (validators != null) {
+            validators.markInitialState();
+        }
+
+    }
+
+
+    @Override
+    public void clearInitialState() {
+
+        if (initialStateMarked()) {
+            super.clearInitialState();
+            if (validators != null) {
+                validators.clearInitialState();
+            }
+        }
+
+    }
+
+
+    /**
+     * <p>Specialized decode behavior on top of that provided by the
+     * superclass.  In addition to the standard
+     * <code>processDecodes</code> behavior inherited from {@link
+     * UIComponentBase}, calls <code>validate()</code> if the the
+     * <code>immediate</code> property is true; if the component is
+     * invalid afterwards or a <code>RuntimeException</code> is thrown,
+     * calls {@link FacesContext#renderResponse}.  </p>
+     *
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processDecodes(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Skip processing if our rendered flag is false
+        if (!isRendered()) {
+            return;
+        }
+
+        super.processDecodes(context);
+
+        if (isImmediate()) {
+            executeValidate(context);
+        }
+    }
+
+    /**
+     * <p>In addition to the standard <code>processValidators</code> behavior
+     * inherited from {@link UIComponentBase}, calls <code>validate()</code>
+     * if the <code>immediate</code> property is false (which is the
+     * default);  if the component is invalid afterwards, calls
+     * {@link FacesContext#renderResponse}.
+     * If a <code>RuntimeException</code> is thrown during
+     * validation processing, calls {@link FacesContext#renderResponse}
+     * and re-throw the exception.
+     * </p>
+     *
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processValidators(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Skip processing if our rendered flag is false
+        if (!isRendered()) {
+            return;
+        }
+
+        pushComponentToEL(context, this);
+
+        if (!isImmediate()) {
+            Application application = context.getApplication();
+            application.publishEvent(context, PreValidateEvent.class, this);
+            executeValidate(context);
+            application.publishEvent(context, PostValidateEvent.class, this);
+        }
+        for (Iterator<UIComponent> i = getFacetsAndChildren(); i.hasNext(); ) {
+            i.next().processValidators(context);
+        }
+
+        popComponentFromEL(context);
+    }
+
+    /**
+     * <p>In addition to the standard <code>processUpdates</code> behavior
+     * inherited from {@link UIComponentBase}, calls
+     * <code>updateModel()</code>.
+     * If the component is invalid afterwards, calls
+     * {@link FacesContext#renderResponse}.
+     * If a <code>RuntimeException</code> is thrown during
+     * update processing, calls {@link FacesContext#renderResponse}
+     * and re-throw the exception.
+     * </p>
+     *
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void processUpdates(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Skip processing if our rendered flag is false
+        if (!isRendered()) {
+            return;
+        }
+
+        super.processUpdates(context);
+
+        try {
+            updateModel(context);
+        } catch (RuntimeException e) {
+            context.renderResponse();
+            throw e;
+        }
+
+        if (!isValid()) {
+            context.renderResponse();
+        }
+    }
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public void decode(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Force validity back to "true"
+        setValid(true);
+        super.decode(context);
+    }
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span>
+     * the following algorithm to update the model data
+     * associated with this {@link UIInput}, if any, as appropriate.</p>
+     * <ul>
+     * <li>If the <code>valid</code> property of this component is
+     * <code>false</code>, take no further action.</li>
+     * <li>If the <code>localValueSet</code> property of this component is
+     * <code>false</code>, take no further action.</li>
+     * <li>If no {@link ValueExpression} for <code>value</code> exists,
+     * take no further action.</li>
+     * <li>Call <code>setValue()</code> method of the {@link ValueExpression}
+     * to update the value that the {@link ValueExpression} points at.</li>
+     * <li>If the <code>setValue()</code> method returns successfully:
+     * <ul>
+     * <li>Clear the local value of this {@link UIInput}.</li>
+     * <li>Set the <code>localValueSet</code> property of this
+     * {@link UIInput} to false.</li>
+     * </ul></li>
+     * <li>If the <code>setValue()</code> method throws an Exception:
+     * <ul>
+     * <li class="changed_modified_2_0">Enqueue an error message.  Create a 
+     * {@link FacesMessage} with the id {@link #UPDATE_MESSAGE_ID}.  Create a
+     * {@link UpdateModelException}, passing the <code>FacesMessage</code> and 
+     * the caught exception to the constructor.  Create an 
+     * {@link ExceptionQueuedEventContext}, passing the <code>FacesContext</code>, 
+     * the <code>UpdateModelException</code>, this component instance, and
+     * {@link PhaseId#UPDATE_MODEL_VALUES} to its constructor.  Call 
+     * {@link FacesContext#getExceptionHandler} and then call 
+     * {@link ExceptionHandler#processEvent}, passing the 
+     * <code>ExceptionQueuedEventContext</code>.
+     * </li>
+     * <li>Set the <code>valid</code> property of this {@link UIInput}
+     * to <code>false</code>.</li>
+     * </ul></li>
+     * The exception must not be re-thrown.  This enables tree traversal
+     * to continue for this lifecycle phase, as in all the other lifecycle
+     * phases. 
+     * </ul>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     * @throws NullPointerException if <code>context</code>
+     *                              is <code>null</code>
+     */
+    public void updateModel(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if (!isValid() || !isLocalValueSet()) {
+            return;
+        }
+        ValueExpression ve = getValueExpression("value");
+        if (ve != null) {
+            Throwable caught = null;
+            FacesMessage message = null;
+            try {
+                ve.setValue(context.getELContext(), getLocalValue());
+                resetValue();
+            } catch (ELException e) {
+                caught = e;
+                String messageStr = e.getMessage();
+                Throwable result = e.getCause();
+                while (null != result &&
+                     result.getClass().isAssignableFrom(ELException.class)) {
+                    messageStr = result.getMessage();
+                    result = result.getCause();
+                }
+                if (null == messageStr) {
+                    message =
+                         MessageFactory.getMessage(context, UPDATE_MESSAGE_ID,
+                              MessageFactory.getLabel(
+                                   context, this));
+                } else {
+                    message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                               messageStr,
+                                               messageStr);
+                }
+                setValid(false);
+            } catch (Exception e) {
+                caught = e;
+                message =
+                     MessageFactory.getMessage(context, UPDATE_MESSAGE_ID,
+                          MessageFactory.getLabel(
+                               context, this));
+                setValid(false);
+            }
+            if (caught != null) {
+                assert(message != null);
+                // PENDING(edburns): verify this is in the spec.
+                @SuppressWarnings({"ThrowableInstanceNeverThrown"})
+                UpdateModelException toQueue =
+                      new UpdateModelException(message, caught);
+                ExceptionQueuedEventContext eventContext =
+                      new ExceptionQueuedEventContext(context,
+                                                toQueue,
+                                                this,
+                                                PhaseId.UPDATE_MODEL_VALUES);
+                context.getApplication().publishEvent(context,
+                                                      ExceptionQueuedEvent.class,
+                                                      eventContext);
+                
+            }
+            
+        }
+    }
+    
+    // ------------------------------------------------------ Validation Methods
+
+
+    /**
+     * <p><span class="changed_modified_2_0
+     * changed_modified_2_2">Perform</span> the following algorithm to
+     * validate the local value of this {@link UIInput}.</p>
+
+     * <ul>
+
+     * <li>Retrieve the submitted value with {@link #getSubmittedValue}.
+     * If this returns <code>null</code>, exit without further
+     * processing.  (This indicates that no value was submitted for this
+     * component.)</li>
+
+     * <p/>
+
+     * <li><span class="changed_modified_2_0">If the
+     * <code>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</code>
+     * context parameter value is <code>true</code> (ignoring case), and
+     * <code>getSubmittedValue()</code> returns a zero-length
+     * <code>String</code> call <code>{@link #setSubmittedValue}</code>,
+     * passing <code>null</code> as the argument and continue processing
+     * using <code>null</code> as the current submitted
+     * value.</code></span></li>
+
+     * <p/>
+
+     * <li> Convert the submitted value into a "local value" of the
+     * appropriate data type by calling {@link #getConvertedValue}.</li>
+     * <li><span class="changed_added_2_0_rev_a">If conversion fails:
+     * <ul>
+     * <li>Enqueue an appropriate error message by calling the
+     * <code>addMessage()</code> method on the
+     * <code>FacesContext</code>.</li>
+     * <li>Set the <code>valid</code> property
+     * on this component to <code>false</code> </li>
+     * </ul></span>
+     * </li>
+
+     * <p/>
+     * <li>Validate the property by calling {@link #validateValue}.</li>
+     * <p/>
+     * <li>If the <code>valid</code> property of this component is still
+     * <code>true</code>, retrieve the previous value of the component
+     * (with <code>getValue()</code>), store the new local value using
+     * <code>setValue()</code>, and reset the submitted value to null 
+     * <span class="changed_added_2_2">with a call to {@link #setSubmittedValue}
+     * passing {@code null} as the argument</span>.
+     * If the local value is different from the previous value of this
+     * component, <span class="changed_modified_2_1">as determined by a
+     * call to {@link #compareValues}</span>, fire a {@link
+     * ValueChangeEvent} to be broadcast to all interested
+     * listeners.</li>
+
+     * </ul>
+     * <p/>
+     * <p>Application components implementing {@link UIInput} that wish to
+     * perform validation with logic embedded in the component should perform
+     * their own correctness checks, and then call the
+     * <code>super.validate()</code> method to perform the standard
+     * processing described above.</p>
+     *
+     * @param context The {@link FacesContext} for the current request
+     * @throws NullPointerException if <code>context</code>
+     *                              is null
+     */
+    public void validate(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Submitted value == null means "the component was not submitted
+        // at all".  
+        Object submittedValue = getSubmittedValue();
+        if (submittedValue == null) {
+            return;
+        }
+
+        // If non-null, an instanceof String, and we're configured to treat
+        // zero-length Strings as null:
+        //   call setSubmittedValue(null)
+        if ((considerEmptyStringNull(context)
+             && submittedValue instanceof String 
+             && ((String) submittedValue).length() == 0)) {
+            setSubmittedValue(null);
+            submittedValue = null;
+        }
+
+        Object newValue = null;
+
+        try {
+            newValue = getConvertedValue(context, submittedValue);
+        }
+        catch (ConverterException ce) {
+            addConversionErrorMessage(context, ce);
+            setValid(false);
+        }
+
+        validateValue(context, newValue);
+
+        // If our value is valid, store the new value, erase the
+        // "submitted" value, and emit a ValueChangeEvent if appropriate
+        if (isValid()) {
+            Object previous = getValue();
+            setValue(newValue);
+            setSubmittedValue(null);
+            if (compareValues(previous, newValue)) {
+                queueEvent(new ValueChangeEvent(this, previous, newValue));
+            }
+        }
+
+    }
+
+    /**
+     * <p>Convert the submitted value into a "local value" of the
+     * appropriate data type, if necessary.  Employ the following
+     * algorithm to do so:</p>
+     * <ul>
+     * <li>If a <code>Renderer</code> is present, call
+     * <code>getConvertedValue()</code> to convert the submitted
+     * value.</li>
+     * <li>If no <code>Renderer</code> is present, and the submitted
+     * value is a String, locate a {@link Converter} as follows:
+     * <ul>
+     * <li>If <code>getConverter()</code> returns a non-null {@link Converter},
+     * use that instance.</li>
+     * <li>Otherwise, if a value binding for <code>value</code> exists,
+     * call <code>getType()</code> on it.
+     * <ul>
+     * <li>If this call returns <code>null</code>, assume the output
+     * type is <code>String</code> and perform no conversion.</li>
+     * <li>Otherwise, call
+     * <code>Application.createConverter(Class)</code>
+     * to locate any registered {@link Converter} capable of
+     * converting data values of the specified type.</li>
+     * </ul>
+     * </li>
+     * </ul>
+     * <li>If a {@link Converter} instance was located, call its
+     * <code>getAsObject()</code> method to perform the conversion.
+     * <span class="changed_modified_2_0_rev_a">If conversion fails, the
+     * <code>Converter</code> will have thrown
+     * a <code>ConverterException</code> which is declared as a checked exception
+     * on this method, and thus must be handled by the caller.</span></li>
+     * <li>Otherwise, use the submitted value without any conversion</li>
+     * </ul>
+     * </li>
+     * <p/>
+     * </p>
+     * <p/>
+     * <p>This method can be overridden by subclasses for more specific
+     * behavior.</p>
+     */
+
+
+    protected Object getConvertedValue(FacesContext context,
+                                       Object newSubmittedValue) throws ConverterException {
+        Renderer renderer = getRenderer(context);
+        Object newValue;
+
+        if (renderer != null) {
+            newValue = renderer.getConvertedValue(context, this,
+                 newSubmittedValue);
+        } else if (newSubmittedValue instanceof String) {
+            // If there's no Renderer, and we've got a String,
+            // run it through the Converter (if any)
+            Converter converter = getConverterWithType(context);
+            if (converter != null) {
+                newValue = converter.getAsObject(context, this,
+                     (String) newSubmittedValue);
+            } else {
+                newValue = newSubmittedValue;
+            }
+        } else {
+            newValue = newSubmittedValue;
+        }
+        return newValue;
+    }
+
+    /**
+     * <p><span class="changed_modified_2_0">Set</span> the "valid"
+     * property according to the below algorithm.</p>
+
+     * <ul>
+
+     * <li>
+
+     * <p>If the <code>valid</code> property on this component is
+     * still <code>true</code>, and the <code>required</code> property
+     * is also <code>true</code>, ensure that the local value is not
+     * empty (where "empty" is defined as <code>null</code> or a
+     * zero-length String).  If the local value is empty:</p>
+
+     * <ul>
+
+     * <li><p>Enqueue an appropriate error message by calling the
+     * <code>addMessage()</code> method on the <code>FacesContext</code>
+     * instance for the current request.  If the {@link
+     * #getRequiredMessage} returns non-<code>null</code>, use the value
+     * as the <code>summary</code> and <code>detail</code> in the {@link
+     * FacesMessage} that is enqueued on the <code>FacesContext</code>,
+     * otherwise use the message for the {@link #REQUIRED_MESSAGE_ID}.
+     * </li> <li>Set the <code>valid</code> property on this component
+     * to <code>false</code>.</p></li> 
+
+     * <li><p class="changed_modified_2_0">If calling {@link
+     * ValidatorException#getFacesMessages} returns
+     * non-<code>null</code>, each message should be added to the
+     * <code>FacesContext</code>.  Otherwise the single message returned
+     * from {@link ValidatorException#getFacesMessage} should be
+     * added.</p></li>
+     *
+     * </ul>
+
+     * </li>
+     *
+     *
+     * <li class="changed_added_2_0"><p>Otherwise, if the
+     * <code>valid</code> property on this component is still
+     * <code>true</code>, take the following action to determine if
+     * validation of this component should proceed.</p>
+
+     * <ul>
+     *
+     * <li><p>If the value is not empty, validation should proceed.</p></li>
+
+     * <li><p>If the value is empty, but the system has been directed to
+     * validate empty fields, validation should proceed.  The
+     * implementation must obtain the init parameter <code>Map</code>
+     * from the <code>ExternalContext</code> and inspect the value for
+     * the key given by the value of the symbolic constant {@link
+     * #VALIDATE_EMPTY_FIELDS_PARAM_NAME}.  If there is no value under
+     * that key, use the same key and look in the application map from
+     * the <code>ExternalContext</code>.  If the value is
+     * <code>null</code> or equal to the string
+     * “<code>auto</code>” (without the quotes) take
+     * appropriate action to determine if Bean Validation is present in
+     * the runtime environment.  If not, validation should not proceed.
+     * If so, validation should proceed.  If the value is equal
+     * (ignoring case) to “<code>true</code>” (without the
+     * quotes) validation should proceed.  Otherwise, validation should
+     * not proceed.</p></li>
+
+     * <p>If the above determination indicates that validation should
+     * proceed, call the <code>validate()</code> method of each {@link
+     * Validator} registered for this {@link UIInput}, followed by the
+     * method pointed at by the <code>validatorBinding</code> property
+     * (if any).  If any of these validators or the method throws a
+     * {@link ValidatorException}, catch the exception, add its message
+     * (if any) to the {@link FacesContext}, and set the
+     * <code>valid</code> property of this component to false.</li>
+
+     * </ul>
+     */
+
+    protected void validateValue(FacesContext context, Object newValue) {
+        // If our value is valid, enforce the required property if present
+        if (isValid() && isRequired() && isEmpty(newValue)) {
+            String requiredMessageStr = getRequiredMessage();
+            FacesMessage message;
+            if (null != requiredMessageStr) {
+                message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                           requiredMessageStr,
+                                           requiredMessageStr);
+            } else {
+                message =
+                     MessageFactory.getMessage(context, REQUIRED_MESSAGE_ID,
+                          MessageFactory.getLabel(
+                               context, this));
+            }
+            context.addMessage(getClientId(context), message);
+            setValid(false);
+        }
+
+        // If our value is valid and not empty or empty w/ validate empty fields enabled, call all validators
+        if (isValid() && (!isEmpty(newValue) || validateEmptyFields(context))) {
+            if (validators != null) {
+                Validator[] validators = this.validators.asArray(Validator.class);
+                for (Validator validator : validators) {
+                    try {
+                        validator.validate(context, this, newValue);
+                    }
+                    catch (ValidatorException ve) {
+                        // If the validator throws an exception, we're
+                        // invalid, and we need to add a message
+                        setValid(false);
+                        FacesMessage message;
+                        String validatorMessageString = getValidatorMessage();
+
+                        if (null != validatorMessageString) {
+                            message =
+                                  new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                                   validatorMessageString,
+                                                   validatorMessageString);
+                            message.setSeverity(FacesMessage.SEVERITY_ERROR);
+                        } else {
+                            Collection<FacesMessage> messages = ve.getFacesMessages();
+                            if (null != messages) {
+                                message = null;
+                                String cid = getClientId(context);
+                                for (FacesMessage m : messages) {
+                                    context.addMessage(cid, m);
+                                }
+                            } else {
+                                message = ve.getFacesMessage();
+                            }
+                        }
+                        if (message != null) {
+                            context.addMessage(getClientId(context), message);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if the new value is different from
+     * the previous value.  First compare the two values by passing
+     * <em>value</em> to the <code>equals</code> method on argument
+     * <em>previous</em>.  If that method returns <code>true</code>,
+     * return <code>true</code>.  If that method returns
+     * <code>false</code>, and both arguments implement
+     * <code>java.lang.Comparable</code>, compare the two values by
+     * passing <em>value</em> to the <code>compareTo</code> method on
+     * argument <em>previous</em>.  Return <code>true</code> if this
+     * method returns <code>0</code>, <code>false</code> otherwise.</p>
+     *
+     * @param previous old value of this component (if any)
+     * @param value    new value of this component (if any)
+     */
+    protected boolean compareValues(Object previous, Object value) {
+        boolean result = true;
+
+        if (previous == null) {
+            result = (value != null);
+        } else if (value == null) {
+            result = true;
+        } else {
+	    boolean previousEqualsValue = previous.equals(value);
+	    if (!previousEqualsValue && 
+		previous instanceof Comparable &&
+		value instanceof Comparable) {
+                try {
+                    result = !(0 == ((Comparable) previous).
+                                      compareTo((Comparable) value));
+                } catch (ClassCastException cce) {
+                    // Comparable throws CCE if the types prevent a comparison
+                    result = true;
+                }
+	    } else {
+		result = !previousEqualsValue;
+	    }
+        }
+        return result;
+    }
+
+
+    /**
+     * Executes validation logic.
+     */
+    private void executeValidate(FacesContext context) {
+        try {
+            validate(context);
+        } catch (RuntimeException e) {
+            context.renderResponse();
+            throw e;
+        }
+
+        if (!isValid()) {
+            context.validationFailed();
+            context.renderResponse();
+        }
+    }
+
+    public static boolean isEmpty(Object value) {
+
+        if (value == null) {
+            return (true);
+        } else if ((value instanceof String) &&
+             (((String) value).length() < 1)) {
+            return (true);
+        } else if (value.getClass().isArray()) {
+            if (0 == java.lang.reflect.Array.getLength(value)) {
+                return (true);
+            }
+        } else if (value instanceof List) {
+            if (((List) value).isEmpty()) {
+                return (true);
+            }
+        } else if (value instanceof Collection) {
+            if (((Collection) value).isEmpty()) {
+                return (true);
+            }
+        } else if ((value instanceof Map) && (((Map) value).isEmpty())) {
+            return true;
+        }
+        return (false);
+    }
+
+    /**
+     * <p>The set of {@link Validator}s associated with this
+     * <code>UIComponent</code>.</p>
+     */
+    AttachedObjectListHolder<Validator> validators;
+
+
+    /**
+     * <p>Add a {@link Validator} instance to the set associated with
+     * this {@link UIInput}.</p>
+     *
+     * @param validator The {@link Validator} to add
+     * @throws NullPointerException if <code>validator</code>
+     *                              is null
+     */
+    public void addValidator(Validator validator) {
+
+        if (validator == null) {
+            throw new NullPointerException();
+        }
+
+        if (validators == null) {
+            validators = new AttachedObjectListHolder<Validator>();
+        }
+        validators.add(validator);
+
+    }
+    
+
+    /**
+     * <p>Return the set of registered {@link Validator}s for this
+     * {@link UIInput} instance.  If there are no registered validators,
+     * a zero-length array is returned.</p>
+     */
+    public Validator[] getValidators() {
+
+        return ((validators != null) ? validators.asArray(Validator.class) : EMPTY_VALIDATOR);
+
+    }
+
+
+    /**
+     * <p>Remove a {@link Validator} instance from the set associated with
+     * this {@link UIInput}, if it was previously associated.
+     * Otherwise, do nothing.</p>
+     *
+     * @param validator The {@link Validator} to remove
+     */
+    public void removeValidator(Validator validator) {
+
+        if (validator == null) {
+            return;
+        }
+
+        if (validators != null) {
+            validators.remove(validator);
+        }
+
+    }
+
+    // ------------------------------------------------ Event Processing Methods
+
+
+    /**
+     * <p>Add a new {@link ValueChangeListener} to the set of listeners
+     * interested in being notified when {@link ValueChangeEvent}s occur.</p>
+     *
+     * @param listener The {@link ValueChangeListener} to be added
+     * @throws NullPointerException if <code>listener</code>
+     *                              is <code>null</code>
+     */
+    public void addValueChangeListener(ValueChangeListener listener) {
+
+        addFacesListener(listener);
+
+    }
+
+
+    /**
+     * <p>Return the set of registered {@link ValueChangeListener}s for this
+     * {@link UIInput} instance.  If there are no registered listeners,
+     * a zero-length array is returned.</p>
+     */
+    public ValueChangeListener[] getValueChangeListeners() {
+
+        return (ValueChangeListener[]) getFacesListeners(ValueChangeListener.class);
+    }
+
+
+    /**
+     * <p>Remove an existing {@link ValueChangeListener} (if any) from the
+     * set of listeners interested in being notified when
+     * {@link ValueChangeEvent}s occur.</p>
+     *
+     * @param listener The {@link ValueChangeListener} to be removed
+     * @throws NullPointerException if <code>listener</code>
+     *                              is <code>null</code>
+     */
+    public void removeValueChangeListener(ValueChangeListener listener) {
+
+        removeFacesListener(listener);
+
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+    @Override
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        Object[] result = null;
+        
+        Object superState = super.saveState(context);
+        Object validatorsState = ((validators != null) ? validators.saveState(context) : null);
+        
+        if (superState != null || validatorsState != null) {
+            result = new Object[] { superState, validatorsState};
+        }
+        
+        return (result);
+    }
+
+    @Override
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if (state == null) {
+            return;
+        }
+        Object[] values = (Object[]) state;
+        super.restoreState(context, values[0]);
+        if (values[1] != null) {
+            if (validators == null) {
+                validators = new AttachedObjectListHolder<Validator>();
+            }
+            validators.restoreState(context, values[1]);
+        }
+
+    }
+
+    private Converter getConverterWithType(FacesContext context) {
+        Converter converter = getConverter();
+        if (converter != null) {
+            return converter;
+        }
+
+        ValueExpression valueExpression = getValueExpression("value");
+        if (valueExpression == null) {
+            return null;
+        }
+
+        Class converterType;
+        try {
+            converterType = valueExpression.getType(context.getELContext());
+        }
+        catch (ELException e) {
+            throw new FacesException(e);
+        }
+
+        // if converterType is null, String, or Object, assume
+        // no conversion is needed
+        if (converterType == null ||
+             converterType == String.class ||
+             converterType == Object.class) {
+            return null;
+        }
+
+        // if getType returns a type for which we support a default
+        // conversion, acquire an appropriate converter instance.
+        try {
+            Application application = context.getApplication();
+            return application.createConverter(converterType);
+        } catch (Exception e) {
+            return (null);
+        }
+    }
+
+    private void addConversionErrorMessage(FacesContext context,
+                                           ConverterException ce) {
+        FacesMessage message;
+        String converterMessageString = getConverterMessage();
+        if (null != converterMessageString) {
+            message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                       converterMessageString,
+                                       converterMessageString);
+        } else {
+            message = ce.getFacesMessage();
+            if (message == null) {
+                message = MessageFactory.getMessage(context,
+                     CONVERSION_MESSAGE_ID);                
+                if (message.getDetail() == null) {
+                    message.setDetail(ce.getMessage());
+                }
+            }
+        }
+
+        context.addMessage(getClientId(context), message);
+    }
+
+
+    private boolean considerEmptyStringNull(FacesContext ctx) {
+
+        if (emptyStringIsNull == null) {
+            String val = ctx.getExternalContext().getInitParameter(EMPTY_STRING_AS_NULL);
+            emptyStringIsNull = Boolean.valueOf(val);
+        }
+
+        return emptyStringIsNull;
+        
+    }
+
+    private boolean validateEmptyFields(FacesContext ctx) {
+
+        if (validateEmptyFields == null) {
+            ExternalContext extCtx = ctx.getExternalContext();
+            String val = extCtx.getInitParameter(VALIDATE_EMPTY_FIELDS_PARAM_NAME);
+
+            if (null == val) {
+                val = (String) extCtx.getApplicationMap().get(VALIDATE_EMPTY_FIELDS_PARAM_NAME);
+            }
+            if (val == null || "auto".equals(val)) {
+                validateEmptyFields = isBeansValidationAvailable(ctx);
+            } else {
+                validateEmptyFields = Boolean.valueOf(val);
+            }
+        }
+
+        return validateEmptyFields;
+
+    }
+    
+    private boolean isBeansValidationAvailable(FacesContext context) {
+        boolean result = false;
+
+        Map<String,Object> appMap = context.getExternalContext().getApplicationMap();
+        
+        if (appMap.containsKey(BEANS_VALIDATION_AVAILABLE)) {
+            result = (Boolean) appMap.get(BEANS_VALIDATION_AVAILABLE);
+        } else {
+            try {
+                new BeanValidator();
+                appMap.put(BEANS_VALIDATION_AVAILABLE, result = true);
+            } catch (Throwable t) {
+                appMap.put(BEANS_VALIDATION_AVAILABLE, Boolean.FALSE);
+            }
+        }
+
+        return result;
+    }
+
+}
diff --git a/javax/faces/component/UIMessage.java b/javax/faces/component/UIMessage.java
new file mode 100644
index 0000000..5945832
--- /dev/null
+++ b/javax/faces/component/UIMessage.java
@@ -0,0 +1,240 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><span class="changed_modified_2_0_rev_a">This</span> component is
+ * responsible for displaying messages for a specific {@link
+ * UIComponent}, identified by a <code>clientId</code> <span
+ * class="changed_modified_2_0_rev_a"> or component id relative to the
+ * closest ancestor <code>NamingContainer</code></span>.  The component
+ * obtains the messages from the {@link FacesContext}.</p>
+ *
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Message</code>".  This value can be changed by
+ * calling the <code>setRendererType()</code> method.</p>
+
+ * 
+ */
+
+public class UIMessage extends UIComponentBase {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Message";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Message";
+
+
+    enum PropertyKeys {
+
+        forValue("for"),
+        showDetail,
+        showSummary,
+        redisplay;
+
+        String toString;
+
+        PropertyKeys(String toString) {
+            this.toString = toString;
+        }
+
+        PropertyKeys() {
+        }
+
+        public String toString() {
+            return ((this.toString != null) ? this.toString : super.toString());
+        }
+
+    }
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIMessage} instance with default property
+     * values.</p>
+     */
+    public UIMessage() {
+
+        super();
+        setRendererType("javax.faces.Message");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_0_rev_a">Return the Identifier
+     * of the component for which to render error messages. If this
+     * component is within the same NamingContainer as the target
+     * component, this must be the component identifier. Otherwise, it
+     * must be an absolute component identifier (starting with ":"). See
+     * the {@link UIComponent#findComponent} for more
+     * information.</span></p>
+     */
+    public String getFor() {
+
+        return (String) getStateHelper().eval(PropertyKeys.forValue);
+
+    }
+
+
+    /**
+     * <p>Set <span class="changed_modified_2_0_rev_a">the
+     * identifier</span> of the component for which this component
+     * represents associated message(s) (if any).  This property must be
+     * set before the message is displayed.</p>
+     *
+     * @param newFor The new client id
+     */
+    public void setFor(String newFor) {
+
+        getStateHelper().put(PropertyKeys.forValue, newFor);
+
+    }
+
+
+    /**
+     * <p>Return the flag indicating whether the <code>detail</code>
+     * property of the associated message(s) should be displayed.
+     * Defaults to <code>true</code>.</p>
+     */
+    public boolean isShowDetail() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.showDetail, true);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether the <code>detail</code> property
+     * of the associated message(s) should be displayed.</p>
+     *
+     * @param showDetail The new flag
+     */
+    public void setShowDetail(boolean showDetail) {
+
+        getStateHelper().put(PropertyKeys.showDetail, showDetail);
+
+    }
+
+
+    /**
+     * <p>Return the flag indicating whether the <code>summary</code>
+     * property of the associated message(s) should be displayed.
+     * Defaults to <code>false</code>.</p>
+     */
+    public boolean isShowSummary() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.showSummary, false);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether the <code>summary</code> property
+     * of the associated message(s) should be displayed.</p>
+     *
+     * @param showSummary The new flag value
+     */
+    public void setShowSummary(boolean showSummary) {
+
+        getStateHelper().put(PropertyKeys.showSummary, showSummary);
+
+    }
+
+
+    /**
+     * @return <code>true</code> if this <code>UIMessage</code> instance should
+     *  redisplay {@link javax.faces.application.FacesMessage}s that have already been handled,
+     *  otherwise returns <code>false</code>.  By default this method will
+     *  always return <code>true</code> if {@link #setRedisplay(boolean)} has
+     *  not been called.
+     *
+     * @since 2.0
+     */
+    public boolean isRedisplay() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.redisplay, true);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether the <code>detail</code> property
+     * of the associated message(s) should be displayed.</p>
+     *
+     * @param redisplay flag indicating whether previously handled messages
+     *  are redisplayed or not
+     *
+     * @since 2.0
+     */
+    public void setRedisplay(boolean redisplay) {
+
+        getStateHelper().put(PropertyKeys.redisplay, redisplay);
+
+    }
+
+
+}
diff --git a/javax/faces/component/UIMessages.java b/javax/faces/component/UIMessages.java
new file mode 100644
index 0000000..beb28f5
--- /dev/null
+++ b/javax/faces/component/UIMessages.java
@@ -0,0 +1,252 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * <p>The renderer for this component is responsible for obtaining the
+ * messages from the {@link FacesContext} and displaying them to the
+ * user.</p>
+ *
+ * <p>This component supports the <code>Messages</code> renderer-type.</p>
+ *
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Messages</code>".  This value can be changed by
+ * calling the <code>setRendererType()</code> method.</p>
+ *
+ * 
+ */
+
+public class UIMessages extends UIComponentBase {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Messages";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Messages";
+
+
+    enum PropertyKeys {
+        forValue("for"),
+        globalOnly,
+        showDetail,
+        showSummary,
+        redisplay;
+
+        String toString;
+
+        PropertyKeys(String toString) {
+            this.toString = toString;
+        }
+
+        PropertyKeys() {
+        }
+
+        public String toString() {
+            return ((this.toString != null) ? this.toString : super.toString());
+        }
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIMessages} instance with default property
+     * values.</p>
+     */
+    public UIMessages() {
+
+        super();
+        setRendererType("javax.faces.Messages");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the client identifier of the
+     * component for which this component represents associated message(s)
+     * (if any).</p>
+     */
+    public String getFor() {
+
+        return (String) getStateHelper().eval(PropertyKeys.forValue);
+
+    }
+
+
+    /**
+     * <p>Set the client identifier of the component for which this
+     * component represents associated message(s) (if any).  This
+     * property must be set before the message is displayed.</p>
+     *
+     * @param newFor The new client id
+     */
+    public void setFor(String newFor) {
+
+        getStateHelper().put(PropertyKeys.forValue, newFor);
+
+    }
+
+    /**
+     * <p>Return the flag indicating whether only global messages (that
+     * is, messages with no associated client identifier) should be
+     * rendered.  Mutually exclusive with the "for" property which takes
+	 * precedence. Defaults to false.</p>
+     */
+    public boolean isGlobalOnly() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.globalOnly, false);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether only global messages (that is,
+     * messages with no associated client identifier) should be rendered.</p>
+     *
+     * @param globalOnly The new flag value
+     */
+    public void setGlobalOnly(boolean globalOnly) {
+
+        getStateHelper().put(PropertyKeys.globalOnly, globalOnly);
+
+    }
+
+    /**
+     * <p>Return the flag indicating whether the <code>detail</code>
+     * property of the associated message(s) should be displayed.
+     * Defaults to false.</p>
+     */
+    public boolean isShowDetail() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.showDetail, false);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether the <code>detail</code> property
+     * of the associated message(s) should be displayed.</p>
+     *
+     * @param showDetail The new flag
+     */
+    public void setShowDetail(boolean showDetail) {
+
+        getStateHelper().put(PropertyKeys.showDetail, showDetail);
+    }
+
+
+    /**
+     * <p>Return the flag indicating whether the <code>summary</code>
+     * property of the associated message(s) should be displayed.
+     * Defaults to true.</p>
+     */
+    public boolean isShowSummary() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.showSummary, true);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether the <code>summary</code> property
+     * of the associated message(s) should be displayed.</p>
+     *
+     * @param showSummary The new flag value
+     */
+    public void setShowSummary(boolean showSummary) {
+
+        getStateHelper().put(PropertyKeys.showSummary, showSummary);
+
+    }
+
+
+    /**
+     * @return <code>true</code> if this <code>UIMessage</code> instance should
+     *  redisplay {@link javax.faces.application.FacesMessage}s that have already been handled,
+     *  otherwise returns <code>false</code>.  By default this method will
+     *  always return <code>true</code> if {@link #setRedisplay(boolean)} has
+     *  not been called.
+     *
+     * @since 2.0
+     */
+    public boolean isRedisplay() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.redisplay, true);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether the <code>detail</code> property
+     * of the associated message(s) should be displayed.</p>
+     *
+     * @param redisplay flag indicating whether previously handled messages
+     *  are redisplayed or not
+     *
+     * @since 2.0
+     */
+    public void setRedisplay(boolean redisplay) {
+
+        getStateHelper().put(PropertyKeys.redisplay, redisplay);
+
+    }
+
+}
diff --git a/javax/faces/component/UINamingContainer.java b/javax/faces/component/UINamingContainer.java
new file mode 100644
index 0000000..c73f488
--- /dev/null
+++ b/javax/faces/component/UINamingContainer.java
@@ -0,0 +1,205 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.util.Collection;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">UINamingContainer</strong> is a
+ * convenience base class for components that wish to implement {@link
+ * NamingContainer} functionality.</p>
+ */
+
+public class UINamingContainer extends UIComponentBase
+      implements NamingContainer, UniqueIdVendor, StateHolder {
+
+
+    // ------------------------------------------------------ Manifest Constants
+    
+    private static Logger LOGGER = Logger.getLogger("javax.faces.component",
+            "javax.faces.LogStrings");
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.NamingContainer";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.NamingContainer";
+
+    /**
+     * <p class="changed_added_2_0">The context-param that allows the separator
+     * char for clientId strings to be set on a per-web application basis.</p>
+     *
+     * @since 2.0
+     */
+    public static final String SEPARATOR_CHAR_PARAM_NAME =
+          "javax.faces.SEPARATOR_CHAR";
+
+
+    enum PropertyKeys {
+           lastId
+    }
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UINamingContainer} instance with default property
+     * values.</p>
+     */
+    public UINamingContainer() {
+
+        super();
+        setRendererType(null);
+
+    }
+    
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the character used to separate
+     * segments of a clientId.  The implementation must determine if there is a
+     * <<code>context-param</code>> with the value given by the value of
+     * the symbolic constant {@link #SEPARATOR_CHAR_PARAM_NAME}.  If there is a
+     * value for this param, the first character of the value must be returned
+     * from this method.  Otherwise, the value of the symbolic constant {@link
+     * NamingContainer#SEPARATOR_CHAR} must be returned.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @since 2.0
+     */
+    public static char getSeparatorChar(FacesContext context) {
+        
+        if (null == context) {
+            if (LOGGER.isLoggable(Level.SEVERE)) {
+                LOGGER.log(Level.SEVERE, "UINamingContainer.getSeparatorChar() called with null FacesContext. This indicates a SEREVER error. Returning {0}", NamingContainer.SEPARATOR_CHAR);
+            }
+            return NamingContainer.SEPARATOR_CHAR;
+        }
+
+
+        Character separatorChar =
+              (Character) context.getAttributes().get(SEPARATOR_CHAR_PARAM_NAME);
+        if (separatorChar == null) {
+            String initParam = context.getExternalContext().getInitParameter(SEPARATOR_CHAR_PARAM_NAME);
+            separatorChar = NamingContainer.SEPARATOR_CHAR;
+            if (initParam != null) {
+                initParam = initParam.trim();
+                if (initParam.length() != 0) {
+                    separatorChar = initParam.charAt(0);
+                }
+            }
+            context.getAttributes().put(SEPARATOR_CHAR_PARAM_NAME, separatorChar);
+        }
+        return separatorChar;
+
+    }
+
+    /**
+     * @see UIComponent#visitTree
+     */
+    @Override
+    public boolean visitTree(VisitContext context, 
+                               VisitCallback callback) {
+
+        // NamingContainers can optimize partial tree visits by taking advantage
+        // of the fact that it is possible to detect whether any ids to visit
+        // exist underneath the NamingContainer.  If no such ids exist, there
+        // is no need to visit the subtree under the NamingContainer.
+        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
+        assert(idsToVisit != null);
+
+        // If we have ids to visit, let the superclass implementation
+        // handle the visit
+        if (!idsToVisit.isEmpty()) {
+            return super.visitTree(context, callback);
+        }
+
+        // If we have no child ids to visit, just visit ourselves, if
+        // we are visitable.
+        if (isVisitable(context)) {
+            FacesContext facesContext = context.getFacesContext();
+            pushComponentToEL(facesContext, null);
+
+            try {
+                VisitResult result = context.invokeVisitCallback(this, callback);
+                return (result == VisitResult.COMPLETE);
+            }
+            finally {
+                popComponentFromEL(facesContext);
+            }
+        }
+
+        // Done visiting this subtree.  Return false to allow 
+        // visit to continue.
+        return false;
+    }
+
+     public String createUniqueId(FacesContext context, String seed) {
+        Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
+        int lastId = ((i != null) ? i : 0);
+        getStateHelper().put(PropertyKeys.lastId,  ++lastId);
+        return UIViewRoot.UNIQUE_ID_PREFIX + (seed == null ? lastId : seed);
+     }
+
+}
+
diff --git a/javax/faces/component/UIOutcomeTarget.java b/javax/faces/component/UIOutcomeTarget.java
new file mode 100644
index 0000000..487e516
--- /dev/null
+++ b/javax/faces/component/UIOutcomeTarget.java
@@ -0,0 +1,185 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">This</span>
+ * component is paired with the
+ * <code>javax.faces.Button</code> or <code>javax.faces.Link</code>
+ * renderers and encapsulates properties relating to the rendering of
+ * outcomes directly to the response.  This enables bookmarkability in
+ * JSF applications.</p>
+ *
+ * @since 2.0
+ */
+public class UIOutcomeTarget extends UIOutput {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.OutcomeTarget";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.OutcomeTarget";
+
+
+    enum PropertyKeys {
+        includeViewParams,
+        outcome,
+        disableClientWindow
+    }
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIOutcomeTarget} instance with default property
+     * values.</p>
+     */
+    public UIOutcomeTarget() {
+        super();
+        setRendererType("javax.faces.Link");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    @Override
+    public String getFamily() {
+        return COMPONENT_FAMILY;
+    }
+
+    
+    /**
+     * <p class="changed_added_2_0">Return whether or not the view
+     * parameters should be encoded into the target url.</p>
+     *
+     * @since 2.0
+     */
+    public boolean isIncludeViewParams() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.includeViewParams, false);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Set whether or not the page
+     * parameters should be encoded into the target url.</p>
+     *
+     * @param includeViewParams The state of the switch for encoding
+     * page parameters
+     *
+     * @since 2.0
+     */
+    public void setIncludeViewParams(boolean includeViewParams) {
+
+        getStateHelper().put(PropertyKeys.includeViewParams, includeViewParams);
+
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Return whether or not the client window
+     * should be encoded into the target url.</p>
+     *
+     * @since 2.0
+     */
+    public boolean isDisableClientWindow() {
+        return (Boolean) getStateHelper().eval(PropertyKeys.disableClientWindow, false);
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Set whether or not the client window
+     * should be encoded into the target url.</p>
+     * 
+     * @param disableClientWindow if @{code true}, the client window will not be included
+     * in this outcome target.
+     * 
+     * @since 2.2
+     */
+
+    public void setDisableClientWindow(boolean disableClientWindow) {
+        getStateHelper().put(PropertyKeys.disableClientWindow, disableClientWindow);
+    }
+
+
+
+    /**
+     * <p class="changed_added_2_0">Returns the <code>outcome</code>
+     * property of the <code>UIOutcomeTarget</code>. This value is
+     * passed to the {@link javax.faces.application.NavigationHandler}
+     * when resolving the target url of this component.</p>
+     *
+     * @since 2.0
+     */
+    public String getOutcome() {
+
+        return (String) getStateHelper().eval(PropertyKeys.outcome);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Sets the <code>outcome</code>
+     * property of the <code>UIOutcomeTarget</code>.  This value is
+     * passed to the NavigationHandler when resolving the target url of
+     * this component.</p>
+     *
+     * @since 2.0
+     *
+     * @param outcome the navigation outcome
+     */
+    public void setOutcome(String outcome) {
+
+        getStateHelper().put(PropertyKeys.outcome, outcome);
+
+    }
+
+
+}
diff --git a/javax/faces/component/UIOutput.java b/javax/faces/component/UIOutput.java
new file mode 100644
index 0000000..f8d1556
--- /dev/null
+++ b/javax/faces/component/UIOutput.java
@@ -0,0 +1,303 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+
+
+
+/**
+ * <p><strong class="changed_modified_2_0_rev_a changed_modified_2_2">UIOutput</strong> is a
+ * {@link UIComponent} that has a value, optionally retrieved from a
+ * model tier bean via a value expression, that is displayed to the
+ * user.  The user cannot directly modify the rendered value; it is for
+ * display purposes only.</p>
+ *
+ * <p>During the <em>Render Response</em> phase of the request processing
+ * lifecycle, the current value of this component must be
+ * converted to a String (if it is not already), according to the following
+ * rules:</p>
+ * <ul>
+ * <li>If the current value is not <code>null</code>, and is not already
+ *     a <code>String</code>, locate a {@link Converter} (if any) to use
+ *     for the conversion, as follows:
+ *     <ul>
+ *     <li>If <code>getConverter()</code> returns a non-null {@link Converter},
+ *         use that one, otherwise</li>
+ *     <li>If <code>Application.createConverter(Class)</code>, passing the
+ *         current value's class, returns a non-null {@link Converter},
+ *         use that one.</li>
+ *     </ul></li>
+ * <li>If the current value is not <code>null</code> and a {@link Converter}
+ *     was located, call its <code>getAsString()</code> method to perform
+ *     the conversion.</li>
+ * <li>If the current value is not <code>null</code> but no {@link Converter}
+ *     was located, call <code>toString()</code> on the current value to perform
+ *     the conversion.</li>
+ * </ul>
+ *
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Text</code>".  This value can be changed by calling the
+ * <code>setRendererType()</code> method.</p>
+ */
+
+public class UIOutput extends UIComponentBase
+    implements ValueHolder {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Output";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Output";
+
+    private static final String FORCE_FULL_CONVERTER_STATE = "com.sun.faces.component.UIOutput.forceFullConverterState";
+
+    enum PropertyKeys {
+        value,
+        converter
+    }
+
+    private Converter converter;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIOutput} instance with default property
+     * values.</p>
+     */
+    public UIOutput() {
+
+        super();
+        setRendererType("javax.faces.Text");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    // --------------------------------------- EditableValueHolder Properties
+
+
+    public Converter getConverter() {
+
+        if (this.converter != null) {
+            return (this.converter);
+        }
+        return (Converter) getStateHelper().eval(PropertyKeys.converter);
+
+    }
+
+
+    public void setConverter(Converter converter) {
+
+        clearInitialState();
+        // we don't push the converter to the StateHelper
+        // if it's been explicitly set (i.e. it's not a ValueExpression
+        // reference
+        this.converter = converter;
+
+    }
+
+
+    public Object getLocalValue() {
+
+        return getStateHelper().get(PropertyKeys.value);
+
+    }
+
+    /**
+     * <p class="changed_added_2_2">Return the value property.</p>
+     * 
+     * @since 2.2
+     */
+    public Object getValue() {
+
+        return getStateHelper().eval(PropertyKeys.value);
+
+    }
+
+
+    public void setValue(Object value) {
+        getStateHelper().put(PropertyKeys.value, value);
+
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Convenience method to reset this component's value to the
+     * un-initialized state.</p>
+     * 
+     * @since 2.2
+     */
+
+    public void resetValue() {
+        getStateHelper().remove(PropertyKeys.value);
+    }
+
+
+    /**
+     * <p>
+     * In addition to the actions taken in {@link UIComponentBase}
+     * when {@link PartialStateHolder#markInitialState()} is called,
+     * check if the installed {@link Converter} is a PartialStateHolder and
+     * if it is, call {@link javax.faces.component.PartialStateHolder#markInitialState()}
+     * on it.
+     * </p>
+     */
+    @Override
+    public void markInitialState() {
+
+        super.markInitialState();
+        Converter c = getConverter();
+        if (c != null && c instanceof PartialStateHolder) {
+            ((PartialStateHolder) c).markInitialState();
+        }
+
+    }
+
+
+    @Override
+    public void clearInitialState() {
+
+        if (initialStateMarked()) {
+            super.clearInitialState();
+            Converter c = getConverter();
+            if (c != null && c instanceof PartialStateHolder) {
+                ((PartialStateHolder) c).clearInitialState();
+            }
+        }
+
+    }
+
+
+    @Override
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        Object converterState = null;
+        if (converter != null) {
+            if (!initialStateMarked() || getAttributes().containsKey(FORCE_FULL_CONVERTER_STATE)) {                
+                /*
+                 * Check if our parent component has its initial state marked
+                 * and we know we don't. That means we are not using the same 
+                 * state saving algorithm. So we are going to ALWAYS force to
+                 * do FSS for the converter.
+                 */
+                if (getParent() != null && getParent().initialStateMarked()) {
+                    getAttributes().put(FORCE_FULL_CONVERTER_STATE, true);
+                    if (converter instanceof PartialStateHolder) {
+                        PartialStateHolder psh = (PartialStateHolder) converter;
+                        psh.clearInitialState();
+                    }
+                }
+                
+                converterState = saveAttachedState(context, converter);
+            } else {
+                if (converter instanceof StateHolder) {
+                    StateHolder sh = (StateHolder) converter;
+                    if (!sh.isTransient()) {
+                        converterState = ((StateHolder) converter).saveState(context);
+                    }
+                }
+            }
+        }
+        
+        Object[] values = (Object[]) super.saveState(context);
+        
+        if (converterState != null || values != null) {
+            return new Object[] { values, converterState };
+        }
+        return values;
+
+    }
+
+    
+    @Override
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if (state == null) {
+            return;
+        }
+        Object[] values = (Object[]) state;
+        super.restoreState(context, values[0]);
+        Object converterState = values[1];
+        if (converterState instanceof StateHolderSaver) {
+            // this means full state was saved and as such
+            // overwrite any existing converter with the saved
+            // converter
+            converter = (Converter) restoreAttachedState(context,
+                                                         converterState);
+        } else {
+            // apply any saved state to the existing converter
+            if (converterState != null && converter instanceof StateHolder) {
+                ((StateHolder) converter)
+                      .restoreState(context, converterState);
+            }
+        }
+
+    }
+}
diff --git a/javax/faces/component/UIPanel.java b/javax/faces/component/UIPanel.java
new file mode 100644
index 0000000..c169ad3
--- /dev/null
+++ b/javax/faces/component/UIPanel.java
@@ -0,0 +1,92 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+/**
+ * <p><strong>UIPanel</strong> is a {@link UIComponent} that manages the
+ * layout of its child components.</p>
+ */
+
+public class UIPanel extends UIComponentBase {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Panel";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Panel";
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIPanel} instance with default property
+     * values.</p>
+     */
+    public UIPanel() {
+
+        super();
+        setRendererType(null);
+
+    }
+
+
+    // -------------------------------------------------- UIComponent Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+}
diff --git a/javax/faces/component/UIParameter.java b/javax/faces/component/UIParameter.java
new file mode 100644
index 0000000..fb76a4e
--- /dev/null
+++ b/javax/faces/component/UIParameter.java
@@ -0,0 +1,185 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+
+/**
+ * <p><strong>UIParameter</strong> is a {@link UIComponent} that represents
+ * an optionally named configuration parameter for a parent component.</p>
+ *
+ * <p>Parent components should retrieve the value of a parameter by calling
+ * <code>getValue()</code>.  In this way, the parameter value can be set
+ * directly on the component (via <code>setValue()</code>), or retrieved
+ * indirectly via the value binding expression.</p>
+ *
+ * <p>In some scenarios, it is necessary to provide a parameter name, in
+ * addition to the parameter value that is accessible via the
+ * <code>getValue()</code> method.
+ * {@link javax.faces.render.Renderer}s that support parameter names on their
+ * nested {@link UIParameter} child components should document
+ * their use of this property.</p>
+ *
+ */
+
+public class UIParameter extends UIComponentBase {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.Parameter";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.Parameter";
+
+
+    enum PropertyKeys {
+        name,
+        value,
+        disable
+    }
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIParameter} instance with default property
+     * values.</p>
+     */
+    public UIParameter() {
+
+        super();
+        setRendererType(null);
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the optional parameter name for this parameter.</p>
+     */
+    public String getName() {
+
+        return (String) getStateHelper().eval(PropertyKeys.name);
+
+    }
+
+
+    /**
+     * <p>Set the optional parameter name for this parameter.</p>
+     *
+     * @param name The new parameter name,
+     *  or <code>null</code> for no name
+     */
+    public void setName(String name) {
+
+        getStateHelper().put(PropertyKeys.name, name);
+
+    }
+
+
+
+    /**
+     * <p>Returns the <code>value</code> property of the
+     * <code>UIParameter</code>.</p>
+     */
+    public Object getValue() {
+
+        return getStateHelper().eval(PropertyKeys.value);
+
+    }
+
+
+    /**
+     * <p>Sets the <code>value</code> property of the\
+     * <code>UIParameter</code>.</p>
+     *
+     * @param value the new value
+     */
+    public void setValue(Object value) {
+
+        getStateHelper().put(PropertyKeys.value, value);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the value of the <code>disable</code>
+     * directive for this component. This directive determines whether the
+     * parameter value should be disabled by assigning it a null value.
+     * If true, the <code>value</code> set on this component is ignored.</p>
+     * @since 2.0
+     */
+    public boolean isDisable() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.disable, false);
+
+    }
+
+    /**
+     * <p>Sets the <code>disable</code> property of the <code>UIParameter</code>.</p>
+     * @param disable
+     * @since 2.0
+     */
+    public void setDisable(boolean disable) {
+
+        getStateHelper().put(PropertyKeys.disable, disable);
+
+    }
+
+
+}
diff --git a/javax/faces/component/UISelectBoolean.java b/javax/faces/component/UISelectBoolean.java
new file mode 100644
index 0000000..0884e1b
--- /dev/null
+++ b/javax/faces/component/UISelectBoolean.java
@@ -0,0 +1,240 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.el.ValueExpression;
+import javax.faces.el.ValueBinding;
+
+
+/**
+ * <p><strong>UISelectBoolean</strong> is a {@link UIComponent} that
+ * represents a single boolean (<code>true</code> or <code>false</code>) value.
+ * It is most commonly rendered as a checkbox.</p>
+ *
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Checkbox</code>".  This value can be changed by
+ * calling the <code>setRendererType()</code> method.</p>
+ */
+
+public class UISelectBoolean extends UIInput {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.SelectBoolean";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.SelectBoolean";
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UISelectBoolean} instance with default
+     * property values.</p>
+     */
+    public UISelectBoolean() {
+
+        super();
+        setRendererType("javax.faces.Checkbox");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the local value of the selected state of this component.
+     * This method is a typesafe alias for <code>getValue()</code>.</p>
+     */
+    public boolean isSelected() {
+
+        Boolean value = (Boolean) getValue();
+        if (value != null) {
+            return (value.booleanValue());
+        } else {
+            return (false);
+        }
+
+    }
+
+
+    /**
+     * <p>Set the local value of the selected state of this component.
+     * This method is a typesafe alias for <code>setValue()</code>.</p>
+     *
+     * @param selected The new selected state
+     */
+    public void setSelected(boolean selected) {
+
+        if (selected) {
+            setValue(Boolean.TRUE);
+        } else {
+            setValue(Boolean.FALSE);
+        }
+
+    }
+
+
+    // ---------------------------------------------------------------- Bindings
+
+
+    /**
+     * <p>Return any {@link ValueBinding} set for <code>value</code> if a
+     * {@link ValueBinding} for <code>selected</code> is requested; otherwise,
+     * perform the default superclass processing for this method.</p>
+     *
+     * <p>Rely on the superclass implementation to wrap the returned
+     * <code>ValueExpression</code> in a <code>ValueBinding</code>.</p>
+     *
+     * @param name Name of the attribute or property for which to retrieve
+     *  a {@link ValueBinding}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated This has been replaced by {@link
+     * #getValueExpression}.
+     */
+    public ValueBinding getValueBinding(String name) {
+
+        if ("selected".equals(name)) {
+            return (super.getValueBinding("value"));
+        } else {
+            return (super.getValueBinding(name));
+        }
+
+    }
+
+
+    /**
+     * <p>Store any {@link ValueBinding} specified for <code>selected</code>
+     * under <code>value</code> instead; otherwise, perform the default
+     * superclass processing for this method.</p>
+     *
+     * <p>Rely on the superclass implementation to wrap the argument
+     * <code>ValueBinding</code> in a <code>ValueExpression</code>.</p>
+     *
+     * @param name Name of the attribute or property for which to set
+     *  a {@link ValueBinding}
+     * @param binding The {@link ValueBinding} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueBinding}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated This has been replaced by {@link #setValueExpression}.
+     */
+    public void setValueBinding(String name, ValueBinding binding) {
+
+        if ("selected".equals(name)) {
+            super.setValueBinding("value", binding);
+        } else {
+            super.setValueBinding(name, binding);
+        }
+
+    }
+
+    /**
+     * <p>Return any {@link ValueExpression} set for <code>value</code>
+     * if a {@link ValueExpression} for <code>selected</code> is
+     * requested; otherwise, perform the default superclass processing
+     * for this method.</p>
+     *
+     * @param name Name of the attribute or property for which to retrieve
+     *  a {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     * @since 1.2
+     */
+    public ValueExpression getValueExpression(String name) {
+
+        if ("selected".equals(name)) {
+            return (super.getValueExpression("value"));
+        } else {
+            return (super.getValueExpression(name));
+        }
+
+    }
+    
+    /**
+     * <p>Store any {@link ValueExpression} specified for <code>selected</code>
+     * under <code>value</code> instead; otherwise, perform the default
+     * superclass processing for this method.</p>
+     *
+     * @param name Name of the attribute or property for which to set
+     *  a {@link ValueExpression}
+     * @param binding The {@link ValueExpression} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     * @since 1.2
+     */
+    public void setValueExpression(String name, ValueExpression binding) {
+
+        if ("selected".equals(name)) {
+            super.setValueExpression("value", binding);
+        } else {
+            super.setValueExpression(name, binding);
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/component/UISelectItem.java b/javax/faces/component/UISelectItem.java
new file mode 100644
index 0000000..8e42ae8
--- /dev/null
+++ b/javax/faces/component/UISelectItem.java
@@ -0,0 +1,276 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import javax.faces.model.SelectItem;
+
+
+
+/**
+ * <p><strong class="changed_modified_2_0
+ * changed_modified_2_0_rev_a">UISelectItem</strong> is a component that
+ * may be nested inside a {@link UISelectMany} or {@link UISelectOne}
+ * component, and causes the addition of a {@link SelectItem} instance
+ * to the list of available options for the parent component.  The
+ * contents of the {@link SelectItem} can be specified in one of the
+ * following ways:</p> <ul> <li>The <code>value</code> attribute's value
+ * is an instance of {@link SelectItem}.</li> <li>The associated {@link
+ * javax.el.ValueExpression} points at a model data item of type {@link
+ * SelectItem}.</li> <li>A new {@link SelectItem} instance is
+ * synthesized from the values of the <code>itemDescription</code>,
+ * <code>itemDisabled</code>, <code>itemLabel</code>, <code
+ * class="changed_modified_2_0_rev_a">itemEscaped</code>, and
+ * <code>itemValue</code> attributes.</li> </ul>
+ */
+
+public class UISelectItem extends UIComponentBase {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.SelectItem";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.SelectItem";
+
+
+    enum PropertyKeys {
+        itemDescription,
+        itemDisabled,
+        itemEscaped,
+        itemLabel,
+        itemValue,
+        value,
+        noSelectionOption
+    }
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UISelectItem} instance with default property
+     * values.</p>
+     */
+    public UISelectItem() {
+
+        super();
+        setRendererType(null);
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the description for this selection item.</p>
+     */
+    public String getItemDescription() {
+
+        return (String) getStateHelper().eval(PropertyKeys.itemDescription);
+
+    }
+
+
+    /**
+     * <p>Set the description for this selection item.</p>
+     *
+     * @param itemDescription The new description
+     */
+    public void setItemDescription(String itemDescription) {
+
+        getStateHelper().put(PropertyKeys.itemDescription, itemDescription);
+
+    }
+
+    /**
+     * <p>Return the disabled setting for this selection item.</p>
+     */
+    public boolean isItemDisabled() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.itemDisabled, false);
+
+    }
+
+    /**
+     * <p>Set the disabled value for this selection item.</p>
+     *
+     * @param itemDisabled The new disabled flag
+     */
+    public void setItemDisabled(boolean itemDisabled) {
+
+        getStateHelper().put(PropertyKeys.itemDisabled, itemDisabled);
+
+    }
+    
+    /**
+     * <p>Return the escape setting for the label of this selection item.</p>
+     */
+    public boolean isItemEscaped() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.itemEscaped, true);
+
+    }
+
+    /**
+     * <p>Set the escape value for the label of this selection item.</p>
+     *
+     * @param itemEscaped The new disabled flag
+     */
+    public void setItemEscaped(boolean itemEscaped) {
+
+        getStateHelper().put(PropertyKeys.itemEscaped, itemEscaped);
+
+    }
+    
+
+    /**
+     * <p>Return the localized label for this selection item.</p>
+     */
+    public String getItemLabel() {
+
+        return (String) getStateHelper().eval(PropertyKeys.itemLabel);
+
+    }
+
+
+    /**
+     * <p>Set the localized label for this selection item.</p>
+     *
+     * @param itemLabel The new localized label
+     */
+    public void setItemLabel(String itemLabel) {
+
+        getStateHelper().put(PropertyKeys.itemLabel, itemLabel);
+
+    }
+
+
+    /**
+     * <p>Return the server value for this selection item.</p>
+     */
+    public Object getItemValue() {
+
+        return getStateHelper().eval(PropertyKeys.itemValue);
+
+    }
+
+
+    /**
+     * <p>Set the server value for this selection item.</p>
+     *
+     * @param itemValue The new server value
+     */
+    public void setItemValue(Object itemValue) {
+
+        getStateHelper().put(PropertyKeys.itemValue, itemValue);
+
+    }
+
+
+
+    /**
+     * <p>Returns the <code>value</code> property of the
+     * <code>UISelectItem</code>.</p>
+     */
+    public Object getValue() {
+
+        return getStateHelper().eval(PropertyKeys.value);
+
+    }
+
+
+    /**
+     * <p>Sets the <code>value</code> property of the
+     * <code>UISelectItem</code>.</p>
+     * 
+     * @param value the new value
+     */
+    public void setValue(Object value) {
+
+        getStateHelper().put(PropertyKeys.value,  value);
+
+    }
+    
+    /** <p class="changed_added_2_0">Return the value of the
+     * <code>noSelectionOption</code> property.  If the value of this
+     * property is <code>true</code>, the system interprets the option
+     * represented by this <code>UISelectItem</code> instance as
+     * representing a "no selection" option.  See {@link
+     * UISelectOne#validateValue} and {@link UISelectMany#validateValue}
+     * for usage.</p>
+     *
+     * @since 2.0
+     */
+    public boolean isNoSelectionOption() {
+
+        return (Boolean) getStateHelper().eval(PropertyKeys.noSelectionOption, false);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Set the value of the
+     * <code>noSelectionOption</code> property.</p>
+     *
+     * @since 2.0
+     */
+    public void setNoSelectionOption(boolean noSelectionOption) {
+
+        getStateHelper().put(PropertyKeys.noSelectionOption, noSelectionOption);
+
+    }
+
+}
diff --git a/javax/faces/component/UISelectItems.java b/javax/faces/component/UISelectItems.java
new file mode 100644
index 0000000..668d400
--- /dev/null
+++ b/javax/faces/component/UISelectItems.java
@@ -0,0 +1,147 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.model.SelectItem;
+
+
+/**
+ * <p><strong>UISelectItems</strong> is a component that may be nested
+ * inside a {@link UISelectMany} or {@link UISelectOne} component, and
+ * causes the addition of one or more {@link SelectItem} instances to the
+ * list of available options in the parent component.  The
+ * <code>value</code> of this component (set either directly, or acquired
+ * indirectly a {@link javax.el.ValueExpression}, can be of any
+ * of the following types:</p>
+ * <ul>
+ * <li><em>Single instance of {@link SelectItem}</em> - This instance is
+ *     added to the set of available options for the parent tag.</li>
+ * <li><em>Array of {@link SelectItem}</em> - This set of instances is
+ *     added to the set of available options for the parent component,
+ *     in ascending subscript order.</li>
+ * <li><em>Collection of {@link SelectItem}</em> - This set of instances is
+ *     added to the set of available options for the parent component,
+ *     in the order provided by an iterator over them.</li>
+ * <li><em>Map</em> - The keys of this object (once converted to
+ *     Strings) are assumed to be labels, and the values of this object
+ *     (once converted to Strings)
+ *     are assumed to be values, of {@link SelectItem} instances that will
+ *     be constructed dynamically and added to the set of available options
+ *     for the parent component, in the order provided by an iterator over
+ *     the keys.</li>
+ * </ul>
+ */
+
+public class UISelectItems extends UIComponentBase {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.SelectItems";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.SelectItems";
+
+
+    enum PropertyKeys {
+        value
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UISelectItems} instance with default property
+     * values.</p>
+     */
+    public UISelectItems() {
+
+        super();
+        setRendererType(null);
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    // -------------------------------------------------- ValueHolder Properties
+
+
+    /**
+     * <p>Returns the <code>value</code> property of the
+     * <code>UISelectItems</code>.</p>
+     */
+    public Object getValue() {
+
+        return getStateHelper().eval(PropertyKeys.value);
+
+    }
+
+
+    /**
+     * <p>Sets the <code>value</code> property of the
+     * <code>UISelectItems</code>.</p>
+     * 
+     * @param value the new value
+     */
+    public void setValue(Object value) {
+
+        getStateHelper().put(PropertyKeys.value, value);
+
+    }
+
+
+}
diff --git a/javax/faces/component/UISelectMany.java b/javax/faces/component/UISelectMany.java
new file mode 100644
index 0000000..2b7c766
--- /dev/null
+++ b/javax/faces/component/UISelectMany.java
@@ -0,0 +1,699 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import javax.el.ValueExpression;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.convert.Converter;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">UISelectMany</strong> is a
+ * {@link UIComponent} that represents the user's choice of a zero or
+ * more items from among a discrete set of available options.  The user
+ * can modify the selected values.  Optionally, the component can be
+ * preconfigured with zero or more currently selected items, by storing
+ * them as an array <span class="changed_added_2_0">or
+ * <code>Collection</code></span> in the <code>value</code> property of
+ * the component.</p>
+ *
+ * <p>This component is generally rendered as a select box or a group of
+ * checkboxes.</p>
+ *
+ * <p>By default, the <code>rendererType</code> property must be set to
+ * "<code>javax.faces.Listbox</code>".  This value can be changed by
+ * calling the <code>setRendererType()</code> method.</p>
+ *
+ * <p>The {@link javax.faces.render.Renderer} for this component must
+ * perform the following logic on <a
+ * name="#getConvertedValue"><code>getConvertedValue()</code></a>:</p>
+ *
+ * <ul>
+ *
+ * <p>Obtain the {@link javax.faces.convert.Converter} using the following algorithm:</p>
+ *
+ * <ul> 
+ *
+ * <p>If the component has an attached {@link javax.faces.convert.Converter}, use it.</p>
+ *
+ * <p>If not, look for a {@link ValueExpression} for <code>value</code>
+ * (if any).  The {@link ValueExpression} must point to something that
+ * is:</p>
+ *
+ * <ul> <li><p>An array of primitives (such as <code>int[]</code>).
+ * Look up the registered by-class {@link javax.faces.convert.Converter}
+ * for this primitive type.</p></li> 
+
+ * <li><p>An array of objects (such as <code>Integer[]</code> or
+ * <code>String[]</code>).  Look up the registered by-class {@link
+ * javax.faces.convert.Converter} for the underlying element
+ * type.</p></li> 
+
+ * <li class="changed_added_2_0"><p>A <code>java.util.Collection</code>.
+ * Do not convert the values.</p></li>
+
+ * </ul>
+ *
+ * <p>If for any reason a <code>Converter</code> cannot be found, assume
+ * the type to be a String array.</p>
+
+ * </ul>
+
+ * <p>Use the selected {@link javax.faces.convert.Converter} (if any) to
+ * convert each element in the values array from the request to the
+ * proper type, <span class="changed_added_2_0">and store the result of
+ * each conversion in a data structure, called
+ * <em>targetForConvertedValues</em> for discussion.  Create
+ * <em>targetForConvertedValues</em> using the following
+ * algorithm.</span></p>
+
+ * <div class="changed_added_2_0">
+
+ * <ul>
+
+ * <li><p>If the component has a <code>ValueExpression</code> for
+ * <code>value</code> and the type of the expression is an array, let
+ * <em>targetForConvertedValues</em> be a new array of the expected
+ * type.</p></li>
+
+
+ * <li><p>If the component has a <code>ValueExpression</code> for
+ * <code>value</code>, let <em>modelType</em> be the type of the value
+ * expression.  If <em>modelType</em> is a <code>Collection</code>, do
+ * the following to arrive at <em>targetForConvertedValues</em>:</p>
+
+ * <ul>
+
+ * <li><p>Ask the component for its attribute under the key
+ * "<code>collectionType</code>", without the quotes.  If there is a
+ * value for that key, the value must be a String that is a fully
+ * qualified Java class name, or a <code>Class</code> object, or a
+ * <code>ValueExpression</code> that evaluates to a String or a
+ * <code>Class</code>.  In all cases, the value serves to identify the
+ * concrete type of the class that implements <code>Collection</code>.
+ * For discussion, this is called <em>collectionType</em>.  Let
+ * <em>targetForConvertedValues</em> be a new instance of
+ * <code>Collection</code> implemented by the concrete class specified
+ * in <em>collectionType</em>.  If, <em>collectionType</em> can not be
+ * discovered, or an instance of <code>Collection</code> implemented by
+ * the concrete class specified in <em>collectionType</em> cannot be
+ * created, throw a {@link javax.faces.FacesException} with a correctly
+ * localized error message.  Note that <code>FacesException</code> is
+ * thrown instead of <code>ConverterException</code> because this case
+ * would only arise from developer error, rather than end-user
+ * error.</p></li>
+
+ * <li><p>If there is no "<code>collectionType</code>" attribute, call
+ * <code>getValue()</code> on the component.  The result will implement
+ * <code>Collection</code>.  If the result also implements
+ * <code>Cloneable</code>, let <em>targetForConvertedValues</em> be the
+ * result of calling its <code>clone()</code> method, then calling
+ * <code>clear()</code> on the cloned <code>Collection</code>.  If
+ * unable to clone the value for any reason, log a message and proceed
+ * to the next step.</p></li>
+
+ * <li><p>If <em>modelType</em> is a concrete class, let
+ * <em>targetForConvertedValues</em> be a new instance of that class.
+ * Otherwise, the concrete type for <em>targetForConvertedValues</em> is
+ * taken from the following table.  All classes are in the
+ * <code>java.util</code> package.  All collections must be created with
+ * an initial capacity equal to the length of the values array from the
+ * request.</p>
+
+ * <table border="1">
+
+ * <tr>
+
+ * <th>If <em>modelType</em> is an instance of</th>
+ 
+ * <th>then <em>targetForConvertedValues</em> must be an instance
+ * of</th>
+
+ * </tr>
+
+ * <tr>
+
+ * <td><code>SortedSet</code></td>
+
+ * <td><code>TreeSet</code></td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td><code>Queue</code></td>
+
+ * <td><code>LinkedList</code></td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td><code>Set</code></td>
+
+ * <td><code>HashSet</code></td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>anything else</td>
+
+ * <td><code>ArrayList</code></td>
+
+ * </tr>
+
+ * </table>
+
+ * </li>
+
+ * </ul>
+
+ * <li><p>If the component does not have a <code>ValueExpression</code>
+ * for <code>value</code>, let <em>targetForConvertedValues</em> be an
+ * array of type <code>Object</code>.</p>
+
+ * </ul>
+
+ * </div>
+
+ * <p>Return <em>targetForConvertedValues</em> after populating it with
+ * the converted values.</p>
+
+ * </ul>
+ *
+ */
+
+public class UISelectMany extends UIInput {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.SelectMany";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.SelectMany";
+
+
+    /**
+     * <p>The message identifier of the
+     * {@link javax.faces.application.FacesMessage} to be created if
+     * a value not matching the available options is specified.
+     */
+    public static final String INVALID_MESSAGE_ID =
+        "javax.faces.component.UISelectMany.INVALID";
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UISelectMany} instance with default property
+     * values.</p>
+     */
+    public UISelectMany() {
+
+        super();
+        setRendererType("javax.faces.Listbox");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the currently selected values, or <code>null</code> if there
+     * are no currently selected values.  This is a typesafe alias for
+     * <code>getValue()</code>.</p>
+     */
+    public Object[] getSelectedValues() {
+
+        return ((Object[]) getValue());
+
+    }
+
+
+    /**
+     * <p>Set the currently selected values, or <code>null</code> to indicate
+     * that there are no currently selected values.  This is a typesafe
+     * alias for <code>setValue()</code>.</p>
+     *
+     * @param selectedValues The new selected values (if any)
+     */
+    public void setSelectedValues(Object selectedValues[]) {
+
+        setValue(selectedValues);
+
+    }
+
+
+    // ---------------------------------------------------------------- Bindings
+
+
+    /**
+     * <p>Return any {@link ValueBinding} set for <code>value</code> if
+     * a {@link ValueBinding} for <code>selectedValues</code> is
+     * requested; otherwise, perform the default superclass processing
+     * for this method.</p>
+     *
+     * <p>This method relies on the superclass to provide the
+     * <code>ValueExpression</code> to <code>ValueBinding</code>
+     * wrapping.</p>
+     *
+     * @param name Name of the attribute or property for which to retrieve
+     *  a {@link ValueBinding}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated this has been replaced by {@link #getValueExpression(java.lang.String)}.
+     */
+    public ValueBinding getValueBinding(String name) {
+
+        if ("selectedValues".equals(name)) {
+            return (super.getValueBinding("value"));
+        } else {
+            return (super.getValueBinding(name));
+        }
+
+    }
+
+
+    /**
+     * <p>Store any {@link ValueBinding} specified for
+     * <code>selectedValues</code> under <code>value</code> instead;
+     * otherwise, perform the default superclass processing for this
+     * method.</p>
+     *
+     * <p>This method relies on the superclass to wrap the argument
+     * <code>ValueBinding</code> in a <code>ValueExpression</code>.</p>
+     *
+     * @param name Name of the attribute or property for which to set
+     *  a {@link ValueBinding}
+     * @param binding The {@link ValueBinding} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueBinding}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     *
+     * @deprecated This has been replaced by {@link #setValueExpression(java.lang.String, javax.el.ValueExpression)}.
+     */
+    public void setValueBinding(String name, ValueBinding binding) {
+
+        if ("selectedValues".equals(name)) {
+            super.setValueBinding("value", binding);
+        } else {
+            super.setValueBinding(name, binding);
+        }
+
+    }
+
+    /**
+     * <p>Return any {@link ValueExpression} set for <code>value</code> if a
+     * {@link ValueExpression} for <code>selectedValues</code> is requested;
+     * otherwise, perform the default superclass processing for this method.</p>
+     *
+     * @param name Name of the attribute or property for which to retrieve
+     *  a {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     * @since 1.2
+     */
+    public ValueExpression getValueExpression(String name) {
+
+        if ("selectedValues".equals(name)) {
+            return (super.getValueExpression("value"));
+        } else {
+            return (super.getValueExpression(name));
+        }
+
+    }
+    
+    /**
+     * <p>Store any {@link ValueExpression} specified for
+     * <code>selectedValues</code> under <code>value</code> instead;
+     * otherwise, perform the default superclass processing for this method.</p>
+     *
+     * @param name Name of the attribute or property for which to set
+     *  a {@link ValueExpression}
+     * @param binding The {@link ValueExpression} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     * @since 1.2
+     */
+    public void setValueExpression(String name, ValueExpression binding) {
+
+        if ("selectedValues".equals(name)) {
+            super.setValueExpression("value", binding);
+        } else {
+            super.setValueExpression(name, binding);
+        }
+
+    }
+    
+    // --------------------------------------------------------- UIInput Methods
+
+
+    /**
+     * <p>Return <code>true</code> if the new value is different from the
+     * previous value. Value comparison must not be sensitive to element order.
+     * </p>
+     *
+     * @param previous old value of this component
+     * @param value new value of this component
+     */
+    protected boolean compareValues(Object previous, Object value) {
+
+        if ((previous == null) && (value != null)) {
+            return (true);
+        } else if ((previous != null) && (value == null)) {
+            return (true);
+        } else if ((previous == null)) {
+            return (false);
+        }
+
+        boolean valueChanged = false;
+        Object oldarray[];
+        Object newarray[];
+
+        // The arrays may be arrays of primitives;  for simplicity,
+        // perform the boxing here.
+        if (!(previous instanceof Object[])) {
+            previous = toObjectArray(previous);
+        }
+
+        if (!(value instanceof Object[])) {
+            value = toObjectArray(value);
+        }
+
+        // If values are still not of the type Object[], it is perhaps a
+        // mistake by the renderers, so return false, so that
+        // ValueChangedEvent is not queued in this case.
+        if (!(previous instanceof Object[]) || 
+              !(value instanceof Object[])) {
+              return false;
+        }
+        oldarray = (Object[]) previous;
+        newarray = (Object[])value;
+       
+        // If we got here then both the arrays cannot be null
+        // if their lengths vary, return false.
+        if ( oldarray.length != newarray.length) {
+            return true;
+        }
+        
+        // make sure every element in the previous array occurs the same
+        // number of times in the current array. This should help us
+        // to find out the values changed are not. Since we cannot assume
+        // the browser will send the elements in the same order everytime,
+        // it will not suffice to just compare the element position and position.
+        int count1;
+        int count2;
+        for ( int i= 0; i < oldarray.length; ++i ) {
+            count1 = countElementOccurrence(oldarray[i], oldarray);
+            count2 = countElementOccurrence(oldarray[i], newarray);
+            if ( count1 != count2 ) {
+                valueChanged = true;
+                break;
+            }     
+        }    
+        return valueChanged;
+
+    }    
+
+    
+    /**
+     * <p>Return the number of occurrances of a particular element in the
+     * array.</p>
+     *
+     * @param element object whose occurrance is to be counted in the array.
+     * @param array object representing the old value of this component.
+     */
+    private static int countElementOccurrence(Object element, Object[] array) {
+
+        int count = 0;
+        for ( int i= 0; i < array.length; ++i ) {
+            Object arrayElement = array[i];
+            if (arrayElement != null && element != null) {
+                if (arrayElement.equals(element)) {
+                    count ++;
+                }
+            }
+        }    
+        return count;
+
+    }    
+
+    
+    /**
+     * Convert an array of primitives to an array of boxed objects.
+     * @param primitiveArray object containing the primitive values
+     * @return an Object array, or null if the incoming value is not
+     * in fact an array at all.
+     */
+    private static Object[] toObjectArray(Object primitiveArray) {
+        if (primitiveArray == null) {
+            throw new NullPointerException();
+        }
+        
+        if (primitiveArray instanceof Object[]) {
+            return (Object[]) primitiveArray;
+        }
+
+        if (primitiveArray instanceof Collection) {
+            return ((Collection) primitiveArray).toArray();
+        }
+          
+        Class clazz = primitiveArray.getClass();
+        if (!clazz.isArray()) {
+            return null;
+        }
+
+        int length = Array.getLength(primitiveArray);
+        Object[] array = new Object[length];
+        for (int i = 0; i < length; i++) {
+            array[i] = Array.get(primitiveArray, i);
+        }
+
+        return array;
+    }
+
+    // ------------------------------------------------------ Validation Methods
+
+    
+
+    /**
+     * <p><span class="changed_modified_2_0">In</span> addition to the standard
+     * validation behavior inherited from {@link UIInput}, ensure that
+     * any specified values are equal to one of the available options.
+     * Before comparing each option, coerce the option value type to the
+     * type of this component's value following the Expression Language
+     * coercion rules.  If the specified value is not equal to any of
+     * the options, enqueue an error message and set the
+     * <code>valid</code> property to <code>false</code>.</p>
+     *
+     * <p class="changed_modified_2_0">This method must explicitly
+     * support a value argument that is a single value or a value
+     * argument that is a <code>Collection</code> or Array of
+     * values.</p>
+
+     * <p class="changed_added_2_0">If {@link #isRequired} returns
+     * <code>true</code>, and the current value is equal to the value of
+     * an inner {@link UISelectItem} whose {@link
+     * UISelectItem#isNoSelectionOption} method returns
+     * <code>true</code>, enqueue an error message and set the
+     * <code>valid</code> property to <code>false</code>.</p>
+
+     * @param context The {@link FacesContext} for the current request
+     *
+     * @param value The converted value to test for membership.
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+
+    protected void validateValue(FacesContext context, Object value) {
+        super.validateValue(context, value);
+
+        // Skip validation if it is not necessary
+        if (!isValid() || (value == null)) {
+            return;
+        }
+        
+        boolean doAddMessage = false;
+
+        // Ensure that the values match one of the available options
+        // Don't arrays cast to "Object[]", as we may now be using an array
+        // of primitives
+        Converter converter = getConverter();
+        for (Iterator i = getValuesIterator(value); i.hasNext(); ) {
+            Iterator items = new SelectItemsIterator(context, this);
+            Object currentValue = i.next();
+            if (!SelectUtils.matchValue(context,
+                                        this,
+                                        currentValue,
+                                        items,
+                                        converter)) {
+                doAddMessage = true;
+                break;
+            }
+        }
+        
+        // Ensure that if the value is noSelection and a
+        // value is required, a message is queued
+        if (isRequired()) {
+            for (Iterator i = getValuesIterator(value); i.hasNext();) {
+                Iterator items = new SelectItemsIterator(context, this);
+                Object currentValue = i.next();
+                if (SelectUtils.valueIsNoSelectionOption(context,
+                        this,
+                        currentValue,
+                        items,
+                        converter)) {
+                    doAddMessage = true;
+                    break;
+                }
+            }
+        }
+        
+        if (doAddMessage) {
+            // Enqueue an error message if an invalid value was specified
+            FacesMessage message =
+                    MessageFactory.getMessage(context,
+                    INVALID_MESSAGE_ID,
+                    MessageFactory.getLabel(context, this));
+            context.addMessage(getClientId(context), message);
+            setValid(false);
+        }
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private Iterator getValuesIterator(Object value) {
+
+        if (value instanceof Collection) {
+            return ((Collection) value).iterator();
+        } else {
+            return (new ArrayIterator(value));
+        }
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * Exposes an Array as an Iterator.
+     */
+    private static final class ArrayIterator implements Iterator {
+
+        private int length;
+        private int idx = 0;
+        private Object value;
+
+
+        // -------------------------------------------------------- Constructors
+
+
+        ArrayIterator(Object value) {
+
+            this.value = value;
+            length = Array.getLength(value);
+
+        }
+
+
+        // ------------------------------------------------------------ Iterator
+
+
+        public boolean hasNext() {
+            return (idx < length);
+        }
+
+
+        public Object next() {
+
+            if (idx >= length) {
+                throw new NoSuchElementException();
+            } else {
+                return Array.get(value, idx++);
+            }
+            
+        }
+
+
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+
+        }
+
+    }
+}
diff --git a/javax/faces/component/UISelectOne.java b/javax/faces/component/UISelectOne.java
new file mode 100644
index 0000000..9c42b28
--- /dev/null
+++ b/javax/faces/component/UISelectOne.java
@@ -0,0 +1,177 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">UISelectOne</strong> is a
+ * {@link UIComponent} that represents the user's choice of zero or one
+ * items from among a discrete set of available options.  The user can
+ * modify the selected value.  Optionally, the component can be
+ * preconfigured with a currently selected item, by storing it as the
+ * <code>value</code> property of the component.</p>
+ *
+ * <p>This component is generally rendered as a select box or a group of
+ * radio buttons.</p>
+ *
+ * <p>By default, the <code>rendererType</code> property is set to
+ * "<code>javax.faces.Menu</code>".  This value can be changed by
+ * calling the <code>setRendererType()</code> method.</p>
+ */
+
+public class UISelectOne extends UIInput {
+
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.SelectOne";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.SelectOne";
+
+
+    /**
+     * <p>The message identifier of the
+     * {@link javax.faces.application.FacesMessage} to be created if
+     * a value not matching the available options is specified.
+     */
+    public static final String INVALID_MESSAGE_ID =
+        "javax.faces.component.UISelectOne.INVALID";
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UISelectOne} instance with default property
+     * values.</p>
+     */
+    public UISelectOne() {
+
+        super();
+        setRendererType("javax.faces.Menu");
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    // ------------------------------------------------------ Validation Methods
+
+
+    /**
+     * <p><span class="changed_modified_2_0">In</span> addition to the
+     * standard validation behavior inherited from {@link UIInput},
+     * ensure that any specified value is equal to one of the available
+     * options.  Before comparing each option, coerce the option value
+     * type to the type of this component's value following the
+     * Expression Language coercion rules.  If the specified value is
+     * not equal to any of the options, enqueue an error message and set
+     * the <code>valid</code> property to <code>false</code>.</p>
+     *
+     * <p class="changed_added_2_0">If {@link #isRequired} returns
+     * <code>true</code>, and the current value is equal to the value of
+     * an inner {@link UISelectItem} whose {@link
+     * UISelectItem#isNoSelectionOption} method returns
+     * <code>true</code>, enqueue an error message and set the
+     * <code>valid</code> property to <code>false</code>.</p>
+     *
+     * @param context The {@link FacesContext} for the current request
+     *
+     * @param value The converted value to test for membership.
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    protected void validateValue(FacesContext context, Object value) {
+
+        // Skip validation if it is not necessary
+        super.validateValue(context, value);
+
+        if (!isValid() || (value == null)) {
+            return;
+        }
+
+        // Ensure that the value matches one of the available options
+        boolean found = SelectUtils.matchValue(getFacesContext(),
+                                               this,
+                                               value,
+                                               new SelectItemsIterator(context, this),
+                                               getConverter());
+
+        boolean isNoSelection = SelectUtils.valueIsNoSelectionOption(getFacesContext(),
+                                               this,
+                                               value,
+                                               new SelectItemsIterator(context, this),
+                                               getConverter());
+
+        // Enqueue an error message if an invalid value was specified
+        if ((!found) || 
+            (isRequired() && isNoSelection)) {
+            FacesMessage message =
+                MessageFactory.getMessage(context, INVALID_MESSAGE_ID,
+                     MessageFactory.getLabel(context, this));
+            context.addMessage(getClientId(context), message);
+            setValid(false);
+        }
+        
+    }
+
+}
diff --git a/javax/faces/component/UIViewAction.java b/javax/faces/component/UIViewAction.java
new file mode 100644
index 0000000..742fbef
--- /dev/null
+++ b/javax/faces/component/UIViewAction.java
@@ -0,0 +1,753 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.component;
+
+import java.util.Map;
+import javax.el.MethodExpression;
+import javax.faces.FacesException;
+import javax.faces.application.NavigationHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.context.FacesContextWrapper;
+import javax.faces.el.MethodBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PreRenderViewEvent;
+import javax.faces.view.ViewMetadata;
+
+/**
+
+ * <p class="changed_added_2_2"><strong>UIViewAction</strong> represents
+ * a method invocation that occurs during the request processing
+ * lifecycle, usually in response to an initial request, as opposed to a
+ * postback.</p>
+
+ * <div class="changed_added_2_2">
+
+ * <p>The {@link javax.faces.view.ViewDeclarationLanguage}
+ * implementation must cause an instance of this component to be placed
+ * in the view for each occurrence of an <code><f:viewAction
+ * /></code> element placed inside of an <code><f:metadata
+ * /></code> element.  The user must place <code><f:metadata
+ * /></code> as a direct child of the <code>UIViewRoot</code>.</p>
+
+ * <p>Because this class implements {@link ActionSource2}, any actions
+ * that one would normally take on a component that implements
+ * <code>ActionSource2</code>, such as {@link UICommand}, are valid for
+ * instances of this class.  Instances of this class participate in the
+ * regular JSF lifecycle, including on Ajax requests.</p>
+
+ * <p>The purpose of this component is to provide a light-weight
+ * front-controller solution for executing code upon the loading of a
+ * JSF view to support the integration of system services, content
+ * retrieval, view management, and navigation. This functionality is
+ * especially useful for non-faces (initial) requests.</p>
+
+ * <p>The most common use case for this component is to take actions
+ * necessary for a particular view, often with the help of one or more
+ * {@link UIViewParameter}s.</p>
+
+ * <p>The {@link NavigationHandler} is consulted after the action is
+ * invoked to carry out the navigation case that matches the action
+ * signature and outcome. If a navigation case is matched that causes
+ * the new viewId to be different from the current viewId, the runtime
+ * must force a redirect to that matched navigation case with different
+ * viewId, regardless of whether or not the matched navigation case with
+ * different viewId called for a redirect.  If the response is marked
+ * complete by the action, the lifecycle advances appropriately.</p>
+
+ * <p>It's important to note that the full component tree is not built
+ * before the UIViewAction components are processed on an non-faces
+ * (initial) request. Rather, the component tree only contains the
+ * {@link ViewMetadata}, an important part of the optimization of this
+ * component and what sets it apart from a {@link PreRenderViewEvent}
+ * listener.</p>
+ *
+ * </div>
+
+ * @since 2.2
+ */
+public class UIViewAction extends UIComponentBase implements ActionSource2 {
+
+    // ------------------------------------------------------ Manifest Constants
+
+    /**
+     * <p>
+     * The standard component type for this component.
+     * </p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.ViewAction";
+
+    /**
+     * <p>
+     * The standard component family for this component.
+     * </p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.ViewAction";
+    
+    private static final String UIVIEWACTION_BROADCAST = "javax.faces.ViewAction.broadcast";
+
+    private static final String UIVIEWACTION_EVENT_COUNT = "javax.faces.ViewAction.eventCount";
+    /**
+     * Properties that are tracked by state saving.
+     */
+    enum PropertyKeys {
+
+        onPostback, actionExpression, immediate, phase, renderedAttr("if");
+        private String name;
+
+        PropertyKeys() {
+        }
+
+        PropertyKeys(final String name) {
+            this.name = name;
+        }
+
+        @Override
+        public String toString() {
+            return name != null ? name : super.toString();
+        }
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+    /**
+     * <p>
+     * Create a new {@link UIViewAction} instance with default property values.
+     * </p>
+     */
+    public UIViewAction() {
+        super();
+        setRendererType(null);
+    }
+
+    // -------------------------------------------------------------- Properties
+    @Override
+    public String getFamily() {
+        return COMPONENT_FAMILY;
+    }
+    
+    private void incrementEventCount(FacesContext context) {
+        Map<Object, Object> attrs = context.getAttributes();
+        Integer count = (Integer) attrs.get(UIVIEWACTION_EVENT_COUNT);
+        if (null == count) {
+            attrs.put(UIVIEWACTION_EVENT_COUNT, (Integer)1);
+        } else {
+            attrs.put(UIVIEWACTION_EVENT_COUNT, (Integer)(count + 1));
+        }
+    }
+    
+    private boolean decrementEventCountAndReturnTrueIfZero(FacesContext context) {
+        boolean result = true;
+        Map<Object, Object> attrs = context.getAttributes();
+        Integer count = (Integer) attrs.get(UIVIEWACTION_EVENT_COUNT);
+        if (null != count) {
+            count = (Integer)(count - 1);
+            if (count < 1) {
+                attrs.remove(UIVIEWACTION_EVENT_COUNT);
+                result = true;
+            } else {
+                attrs.put(UIVIEWACTION_EVENT_COUNT, count);
+                result = false;
+            }
+        }
+        
+        return result;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Deprecated
+    public MethodBinding getAction() {
+        MethodBinding result = null;
+        MethodExpression me;
+
+        if (null != (me = getActionExpression())) {
+            result = new MethodBindingMethodExpressionAdapter(me);
+        }
+        return result;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Deprecated
+    @SuppressWarnings("deprecation")
+    public void setAction(final MethodBinding action) {
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Deprecated
+    @SuppressWarnings("deprecation")
+    public MethodBinding getActionListener() {
+        throw new UnsupportedOperationException("Not supported.");
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Deprecated
+    @SuppressWarnings("deprecation")
+    public void setActionListener(final MethodBinding actionListener) {
+        throw new UnsupportedOperationException("Not supported.");
+    }
+
+    /**
+     * <p class="changed_added_2_2">If the value of the component's
+     * <code>immediate</code> attribute is <code>true</code>, the action
+     * will be invoked during the <em>Apply Request Values</em> JSF
+     * lifecycle phase.  Otherwise, the action will be invoked during
+     * the <em>Invoke Application</em> phase, the default behavior. The
+     * phase can be set explicitly in the <code>phase</code> attribute,
+     * which takes precedence over the <code>immediate</code>
+     * attribute.</p>
+
+     * @since 2.2
+     */
+    public boolean isImmediate() {
+        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, false);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    public void setImmediate(final boolean immediate) {
+        getStateHelper().put(PropertyKeys.immediate, immediate);
+    }
+
+    /**
+     * <p class="changed_added_2_2">Returns the name of the lifecycle
+     * phase in which the action is to be queued.</p>
+     *
+     * @since 2.2
+     */
+    public String getPhase() {
+        PhaseId myPhaseId = getPhaseId();
+        String result = null;
+        if (null != myPhaseId) {
+            result = myPhaseId.getName();
+        }
+        return result;
+    }
+
+    /**
+     * <p class="changed_added_2_2">Attempt to set the lifecycle phase
+     * in which this instance will queue its {@link ActionEvent}.  Pass
+     * the argument <code>phase</code> to {@link
+     * PhaseId#phaseIdValueOf}.  If the result is not one of the
+     * following values, <code>FacesException</code> must be thrown.</p>
+     *
+     * <ul>
+
+     * <li><p>{@link PhaseId#APPLY_REQUEST_VALUES}</p></li>
+     * <li><p>{@link PhaseId#PROCESS_VALIDATIONS}</p></li>
+     * <li><p>{@link PhaseId#UPDATE_MODEL_VALUES}</p></li>
+     * <li><p>{@link PhaseId#INVOKE_APPLICATION}</p></li>
+
+     * </ul>
+
+     * <p>If set, this value takes precedence over the immediate flag.</p>
+
+     * @since 2.2
+     */
+
+    public void setPhase(final String phase) {
+        PhaseId myPhaseId = PhaseId.phaseIdValueOf(phase);
+        if (PhaseId.ANY_PHASE.equals(myPhaseId) || 
+            PhaseId.RESTORE_VIEW.equals(myPhaseId) || 
+            PhaseId.RENDER_RESPONSE.equals(myPhaseId)) {
+            throw new FacesException("View actions cannot be executed in specified phase: [" + myPhaseId.toString() + "]");
+        }
+        getStateHelper().put(PropertyKeys.phase, myPhaseId);
+    }
+    
+    private void setIsProcessingUIViewActionBroadcast(FacesContext context, boolean value) {
+        Map<Object, Object> attrs = context.getAttributes();
+        
+        if (value) {
+            attrs.put(UIVIEWACTION_BROADCAST, Boolean.TRUE);
+        } else {
+            attrs.remove(UIVIEWACTION_BROADCAST);
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_2">Returns <code>true</code> if the
+     * current request processing lifecycle is in the midst of
+     * processing the broadcast of an event queued during a call to
+     * {@link #decode}.  The implementation of {@link #broadcast} is
+     * responsible for ensuring that calls to this method accurately
+     * reflect this fact.</p>
+     *
+     * @since 2.2
+     * @param context {@link FacesContext} for the current request
+     * 
+     */
+    
+    public static boolean isProcessingBroadcast(FacesContext context) {
+        boolean result = context.getAttributes().containsKey(UIVIEWACTION_BROADCAST);
+        return result;
+    }
+
+    private PhaseId getPhaseId() {
+        PhaseId myPhaseId = (PhaseId) getStateHelper().eval(PropertyKeys.phase);
+        return myPhaseId;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Override
+    public void addActionListener(final ActionListener listener) {
+        addFacesListener(listener);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Override
+    public ActionListener[] getActionListeners() {
+        ActionListener al[] = (ActionListener [])
+        getFacesListeners(ActionListener.class);
+        return (al);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Override
+    public void removeActionListener(final ActionListener listener) {
+        removeFacesListener(listener);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Override
+    public MethodExpression getActionExpression() {
+        return (MethodExpression) getStateHelper().get(PropertyKeys.actionExpression);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 2.2
+     */
+    @Override
+    public void setActionExpression(final MethodExpression actionExpression) {
+        getStateHelper().put(PropertyKeys.actionExpression, actionExpression);
+    }
+
+    /**
+     * <p class="changed_added_2_2">If <code>true</code> this
+     * component will operate on postback.</p>
+
+     * @since 2.2
+     */
+    public boolean isOnPostback() {
+        return (Boolean) getStateHelper().eval(PropertyKeys.onPostback, false);
+    }
+
+    /**
+     * <p class="changed_added_2_2">Controls whether or not this
+     * component operates on postback.</p>
+
+     * @since 2.2
+     */
+    public void setOnPostback(final boolean onPostback) {
+        getStateHelper().put(PropertyKeys.onPostback, onPostback);
+    }
+
+    /**
+     * <p class="changed_added_2_2">Return <code>true</code> if this
+     * component should take the actions specified in the {@link
+     * #decode} method.</p>
+     * 
+     * @since 2.2
+     */
+
+    public boolean isRendered() {
+        return (Boolean) getStateHelper().eval(PropertyKeys.renderedAttr, true);
+    }
+
+    /**
+     * <p class="changed_added_2_2">Sets the <code>if</code> property
+     * of this component.</p>
+     *
+     * @param condition the new value of the property.
+     *
+     * @since 2.2
+     */
+    public void setRendered(final boolean condition) {
+        getStateHelper().put(PropertyKeys.renderedAttr, condition);
+    }
+
+    // ----------------------------------------------------- UIComponent Methods
+
+    /**
+     * <p class="changed_added_2_2">Enable the method invocation
+     * specified by this component instance to return a value that
+     * performs navigation, similar in spirit to {@link
+     * UICommand#broadcast}.</p>
+
+     * <div class="changed_added_2_2">
+
+     * <p>Take no action and return immediately if any of the following
+     * conditions are true.</p>
+
+     * <ul>
+
+     * <li><p>The response has already been marked as complete.</p></li>
+
+     * <li><p>The current <code>UIViewRoot</code> is different from the
+     * event's source's <code>UIViewRoot</code>.</p></li>
+
+     * </ul>
+
+     * <p>Save a local reference to the viewId of the current
+     * <code>UIViewRoot</code>.  For discussion, let this reference be
+     * <em>viewIdBeforeAction</em>.</p>
+
+     * <p>Obtain the {@link ActionListener} from the {@link
+     * javax.faces.application.Application}.  Wrap the current {@link
+     * FacesContext} in an implementation of {@link
+     * javax.faces.context.FacesContextWrapper} that overrides the
+     * {@link FacesContext#renderResponse} method such that it takes no
+     * action.  Set the current <code>FacesContext</code> to be the
+     * <code>FacesContextWrapper</code> instance.  Make it so a call to
+     * {@link #isProcessingBroadcast} on the current FacesContext will
+     * return <code>true</code>.  This is necessary because the {@link
+     * javax.faces.application.NavigationHandler} will call this method
+     * to determine if the navigation is happening as the result of a
+     * <code>UIViewAction</code>.  Invoke {@link
+     * ActionListener#processAction}.  In a <code>finally</code> block,
+     * restore the original <code>FacesContext</code>, make it so a call
+     * to {@link #isProcessingBroadcast} on the current context will
+     * return <code>false</code> and discard the wrapper.</p>
+
+     * <p>If the response has been marked as complete during the
+     * invocation of <code>processAction()</code>, take no further
+     * action and return.  Otherwise, compare
+     * <em>viewIdBeforeAction</em> with the viewId of the
+     * <code>UIViewRoot</code> on the <code>FacesContext</code> after
+     * the invocation of <code>processAction()</code>.  If the two
+     * viewIds are the same and no more <code>UIViewAction</code> events
+     * have been queued by a call to {@link #decode}, call {@link
+     * FacesContext#renderResponse} and return.  It is possible to
+     * detect the case where no more <code>UIViewAction</code> events
+     * have been queued because the number of such events queued has
+     * been noted in the specification for {@link #decode}.  Otherwise,
+     * execute the lifecycle on the new <code>UIViewRoot</code>.</p>
+
+     * </div>
+     * 
+     * @param event {@link FacesEvent} to be broadcast
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     * @throws IllegalArgumentException if the implementation class
+     *  of this {@link FacesEvent} is not supported by this component
+     * @throws NullPointerException if <code>event</code> is
+     * <code>null</code>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void broadcast(final FacesEvent event) throws AbortProcessingException {
+
+        super.broadcast(event);
+
+        FacesContext context = getFacesContext();
+        if (!(event instanceof ActionEvent)) {
+            throw new IllegalArgumentException();
+        }
+
+        // OPEN QUESTION: should we consider a navigation to the same view as a
+        // no-op navigation?
+
+        // only proceed if the response has not been marked complete and
+        // navigation to another view has not occurred
+        if (!context.getResponseComplete() && (context.getViewRoot() == getViewRootOf(event))) {
+            ActionListener listener = context.getApplication().getActionListener();
+            if (listener != null) {
+                boolean hasMoreViewActionEvents = false;
+                UIViewRoot viewRootBefore = context.getViewRoot();
+                assert(null != viewRootBefore);
+                InstrumentedFacesContext instrumentedContext = null;
+                try {
+                    instrumentedContext = new InstrumentedFacesContext(context);
+                    setIsProcessingUIViewActionBroadcast(context, true);
+                    // defer the call to renderResponse() that happens in
+                    // ActionListener#processAction(ActionEvent)
+                    instrumentedContext.disableRenderResponseControl().set();
+                    listener.processAction((ActionEvent) event);
+                    hasMoreViewActionEvents = !decrementEventCountAndReturnTrueIfZero(context);
+                } finally {
+                    setIsProcessingUIViewActionBroadcast(context, false);
+                    if (null != instrumentedContext) {
+                        instrumentedContext.restore();
+                    }
+                }
+                // if the response is marked complete, the story is over
+                if (!context.getResponseComplete()) {
+                    UIViewRoot viewRootAfter = context.getViewRoot();
+                    assert(null != viewRootAfter);
+
+                    // if the view id changed as a result of navigation,
+                    // then execute the JSF lifecycle for the new view
+                    // id
+                    String viewIdBefore = viewRootBefore.getViewId();
+                    String viewIdAfter = viewRootAfter.getViewId();
+                    assert(null != viewIdBefore && null != viewIdAfter);
+                    boolean viewIdsSame = viewIdBefore.equals(viewIdAfter);
+                    
+                    if (viewIdsSame && !hasMoreViewActionEvents) {
+                        // apply the deferred call (relevant when immediate is true)
+                        context.renderResponse();
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_2">Override behavior from the
+     * superclass to queue an {@link ActionEvent} that may result in the
+     * invocation of the <code>action</code> or any
+     * <code>actionListener</code>s that may be associated with this
+     * instance.</p>
+
+     * <div class="changed_added_2_2">
+
+     * <p>Take no action if any of the following conditions are true:</p>
+
+     * <ul>
+
+     * 	  <li><p>The current request is a postback and the instance has
+     * been configured to not operate on postback. See {@link #isOnPostback}.</p></li>
+
+     * 	  <li><p>The condition stated in the <code>if</code> property
+     * evaluates to <code>false</code>.  See {@link #isRendered}</p>.</li>
+
+     * </ul>
+
+     * <p>Instantiate an {@link ActionEvent}, passing this component
+     * instance as the source.  Set the <code>phaseId</code> property of
+     * the <code>ActionEvent</code> as follows.</p>
+
+     * <ul>
+
+     * <li><p>If this component instance has been configured with a
+     * specific lifecycle phase with a call to {@link #setPhase} use
+     * that as the <code>phaseId</code></p></li>
+
+     * <li><p>If the value of the <code>immediate</code> property is
+     * true, use {@link PhaseId#APPLY_REQUEST_VALUES}.</p></li>
+
+     * <li><p>Otherwise, use {@link PhaseId#INVOKE_APPLICATION}.
+     * </p></li>
+
+     * </ul>
+
+     * <p>Queue the event with a call to {@link #queueEvent}. Keep track
+     * of the number of events that are queued in this way on this run
+     * through the lifecycle.  This information is necessary during
+     * processing in {@link #broadcast}</code>.</p>
+
+     * </div>
+     * 
+     * @since 2.2
+
+     */
+    @Override
+    public void decode(final FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if ((context.isPostback() && !isOnPostback()) || !isRendered()) {
+            return;
+        }
+
+        ActionEvent e = new ActionEvent(this);
+        PhaseId phaseId = getPhaseId();
+        if (phaseId != null) {
+            e.setPhaseId(phaseId);
+        } else if (isImmediate()) {
+            e.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
+        } else {
+            e.setPhaseId(PhaseId.INVOKE_APPLICATION);
+        }
+        incrementEventCount(context);
+        queueEvent(e);
+    }
+
+    private UIViewRoot getViewRootOf(final FacesEvent e) {
+        UIComponent c = e.getComponent();
+        do {
+            if (c instanceof UIViewRoot) {
+                return (UIViewRoot) c;
+            }
+            c = c.getParent();
+        } while (c != null);
+        return null;
+    }
+
+    /**
+     * A FacesContext delegator that gives us the necessary controls over the FacesContext to allow the execution of the
+     * lifecycle to accomodate the UIViewAction sequence.
+     */
+    private class InstrumentedFacesContext extends FacesContextWrapper {
+
+        private final FacesContext wrapped;
+        private boolean viewRootCleared = false;
+        private boolean renderedResponseControlDisabled = false;
+        private Boolean postback = null;
+
+        public InstrumentedFacesContext(final FacesContext wrapped) {
+            this.wrapped = wrapped;
+        }
+
+        @Override
+        public FacesContext getWrapped() {
+            return wrapped;
+        }
+
+        @Override
+        public UIViewRoot getViewRoot() {
+            if (viewRootCleared) {
+                return null;
+            }
+
+            return wrapped.getViewRoot();
+        }
+
+        @Override
+        public void setViewRoot(final UIViewRoot viewRoot) {
+            viewRootCleared = false;
+            wrapped.setViewRoot(viewRoot);
+        }
+
+        @Override
+        public boolean isPostback() {
+            return postback == null ? wrapped.isPostback() : postback;
+        }
+
+        @Override
+        public void renderResponse() {
+            if (!renderedResponseControlDisabled) {
+                wrapped.renderResponse();
+            }
+        }
+
+        /**
+         * Make it look like we have dispatched a request using the include method.
+         */
+        public InstrumentedFacesContext pushViewIntoRequestMap() {
+            getExternalContext().getRequestMap().put("javax.servlet.include.servlet_path", wrapped.getViewRoot().getViewId());
+            return this;
+        }
+
+        public InstrumentedFacesContext clearPostback() {
+            postback = false;
+            return this;
+        }
+
+        public InstrumentedFacesContext clearViewRoot() {
+            viewRootCleared = true;
+            return this;
+        }
+
+        public InstrumentedFacesContext disableRenderResponseControl() {
+            renderedResponseControlDisabled = true;
+            return this;
+        }
+
+        public void set() {
+            setCurrentInstance(this);
+        }
+
+        public void restore() {
+            setCurrentInstance(wrapped);
+        }
+    }
+}
diff --git a/javax/faces/component/UIViewParameter.java b/javax/faces/component/UIViewParameter.java
new file mode 100644
index 0000000..33aa565
--- /dev/null
+++ b/javax/faces/component/UIViewParameter.java
@@ -0,0 +1,534 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.io.IOException;
+import java.util.Iterator;
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.Renderer;
+import javax.faces.validator.RequiredValidator;
+import javax.faces.validator.Validator;
+
+/**
+ * <p class="changed_added_2_0"><strong class="changed_modified_2_2">UIViewParameter</strong> represents a
+ * binding between a request parameter and a model property or {@link UIViewRoot}
+ * property. This is a bi-directional binding.</p>
+ *
+ * <div class="changed_added_2_0">
+
+ * <p>The {@link javax.faces.view.ViewDeclarationLanguage}
+ * implementation must cause an instance of this component to appear in
+ * the view for each occurrence of an <code><f:viewParam /></code>
+ * element placed inside of an <code><f:metadata /></code>
+ * element.  The user must place this facet within the
+ * <code>UIViewRoot</code>.</p>
+
+ * <p>Because this class extends <code>UIInput</code> any actions that
+ * one would normally take on a <code>UIInput</code> instance are valid
+ * for instances of this class.  Instances of this class participate in
+ * the regular JSF lifecycle, including on Ajax requests.</p>
+
+ * </div>
+ *
+ * @since 2.0
+ */
+public class UIViewParameter extends UIInput {
+
+    
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.ViewParameter";
+
+
+    /**
+     * <p>The standard component family for this component.</p>
+     */
+    public static final String COMPONENT_FAMILY = "javax.faces.ViewParameter";
+
+
+    enum PropertyKeys {
+        name,
+        submittedValue
+    }
+
+    // ------------------------------------------------------ Instance Variables
+
+    private Renderer inputTextRenderer = null;
+    
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIViewParameter} instance with default
+     * property values.</p>
+     */
+    public UIViewParameter() {
+
+        super();
+        setRendererType(null);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    /**
+     * <p>The raw value is the "implicit" binding for this view parameter. This property
+     * maintains the submitted value of the view parameter for the duration of the request.
+     * If the view parameter does not explicitly specify a value expression, then when the
+     * request ends, this value is stored with the state of this component to use as the
+     * submitted value on an ensuing postback.</p>
+     */
+    private String rawValue;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    @Override
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the request parameter name
+     * from which the value is retrieved.</p>
+     * @since 2.0
+     */
+    public String getName() {
+
+        return (String) getStateHelper().eval(PropertyKeys.name);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Set the request parameter name from
+     * which the value is retrieved.</p>
+     *
+     * @param name The new request parameter name.
+     * @since 2.0
+     */
+    public void setName(String name) {
+
+        getStateHelper().put(PropertyKeys.name, name);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return <code>false</code>.  The
+     * immediate setting is not relevant for view parameters and must be
+     * assumed to be <code>false</code>.</p>
+     * @since 2.0
+     */
+    @Override
+    public boolean isImmediate() {
+        return false;
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">Assume</span>
+     * that the submitted value is
+     * always a string, <span class="changed_added_2_2">but the return type
+     * from this method is <code>Object</code>.</span>.</p>
+     * @since 2.0
+     */
+    @Override
+    public Object getSubmittedValue() {
+        return getStateHelper().get(PropertyKeys.submittedValue);
+    }
+
+    /**
+     * PENDING (docs)  Interesting that submitted value isn't saved by the parent
+     * @param submittedValue The new submitted value
+     */
+    @Override
+    public void setSubmittedValue(Object submittedValue) {
+        getStateHelper().put(PropertyKeys.submittedValue, submittedValue);
+    }
+
+    // ----------------------------------------------------- UIComponent Methods
+
+
+    // This is the "Apply Request Phase" step
+    // QUESTION should we just override processDecodes() directly?
+    // ANSWER: In this case, no.  We don't want to take responsibility for 
+    // traversing any children we may have in the future.
+
+    /**
+     * <p class="changed_added_2_0">Override behavior from superclass to
+     * pull a value from the incoming request parameter map under the
+     * name given by {@link #getName} and store it with a call to {@link
+     * UIInput#setSubmittedValue}.</p>
+     * @since 2.0
+     */
+    @Override
+    public void decode(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // QUESTION can we move forward and support an array? no different than UISelectMany; perhaps need to know
+        // if the value expression is single or multi-valued
+        // ANSWER: I'd rather not right now.
+        String paramValue = context.getExternalContext().getRequestParameterMap().get(getName());
+
+        // submitted value will stay as previous value (null on initial request) if a parameter is absent
+        if (paramValue != null) {
+            setSubmittedValue(paramValue);
+        }
+
+        rawValue = (String) getSubmittedValue();
+        setValid(true);
+
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Specialize superclass behavior to treat
+     * <code>null</code> differently.  In this class, a <code>null</code> value
+     * along with the "required" flag being set to <code>true</code> will
+     * cause a validation failure. </p>
+     * @param context
+     * @since 2.0
+     */
+
+    @Override
+    public void processValidators(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // Skip processing if our rendered flag is false
+        if (!isRendered()) {
+            return;
+        }
+
+        // we have to override since UIInput assumes that a null value means don't check
+        if (getSubmittedValue() == null && myIsRequired()) {
+            String requiredMessageStr = getRequiredMessage();
+            FacesMessage message;
+            if (null != requiredMessageStr) {
+                message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                           requiredMessageStr,
+                                           requiredMessageStr);
+            } else {
+                message =
+                     MessageFactory.getMessage(context, REQUIRED_MESSAGE_ID,
+                          MessageFactory.getLabel(
+                               context, this));
+            }
+            context.addMessage(getClientId(context), message);
+            setValid(false);
+            context.validationFailed();
+            context.renderResponse();
+        }
+        else {
+            super.processValidators(context);
+        }
+    }
+    
+    private boolean myIsRequired() {
+        return super.isRequired() || isRequiredViaNestedRequiredValidator();
+    }
+
+    
+    /* JAVASERVERFACES-3058.  Handle the nested requiredValidator case
+     * explicitly in the case of <f:viewParam>.  
+     * 
+     */
+    private boolean isRequiredViaNestedRequiredValidator() {
+        boolean result = false;
+        if (null == validators) {
+            return result;
+        }
+        Iterator<Validator> iter = validators.iterator();
+        while (iter.hasNext()) {
+            if (iter.next() instanceof RequiredValidator) {
+                // See JAVASERVERFACES-2526.  Note that we can assume
+                // that at this point the validator is not disabled, 
+                // so the mere existence of the validator implies it is
+                // enabled.
+                result = true;
+                Object submittedValue = getSubmittedValue();
+                if (submittedValue == null) {
+                    // JAVASERVERFACES-3058 asserts that view parameters 
+                    // should be treated differently than form parameters
+                    // if they are not submitted.  I'm not sure if that's 
+                    // correct, but let's put this in and see how 
+                    // the community responds.
+                    this.setSubmittedValue("");
+                }
+                break;
+            }
+        }
+                
+        return result;
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Call through to superclass {@link
+     * UIInput#updateModel} then take the additional action of pushing
+     * the value into request scope if and only if the value is not a
+     * value expression, is valid, and the local value was set on this
+     * lifecycle execution.</p>
+     * @since 2.0
+     */
+
+    @Override
+    public void updateModel(FacesContext context) {
+        super.updateModel(context);
+        if (!hasValueExpression() && isValid() && isLocalValueSet()) {
+            // QUESTION should this be done even when a value expression is present?
+            // ANSWER: I don't see why not.
+            context.getExternalContext().getRequestMap().put(getName(), getLocalValue());
+        }
+    }
+
+    // This is called during the real "Render Response" phase
+
+    /**
+     * <p class="changed_added_2_0">Called specially by {@link
+     * UIViewRoot#encodeEnd}, this method simply sets the submitted
+     * value to be the return from {@link #getStringValue}.</p>
+     * @since 2.0
+     */
+    @Override
+    public void encodeAll(FacesContext context) throws IOException {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        // if there is a value expression, update view parameter w/ latest value after render
+        // QUESTION is it okay that a null string value may be suppressing the view parameter value?
+        // ANSWER: I'm not sure.
+        setSubmittedValue(getStringValue(context));
+    }
+
+    /**
+     * <p class="changed_added_2_0">If the value of this parameter comes
+     * from a <code>ValueExpression</code> return the value of the
+     * expression, otherwise, return the local value.</p>
+     *
+     * @since 2.0
+     */
+
+    public String getStringValue(FacesContext context) {
+        String result = null;
+        if (hasValueExpression()) {
+            result = getStringValueFromModel(context);
+        } else {
+            result = (null != rawValue) ? rawValue : (String) getValue();
+        }
+        return result;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Manually perform standard conversion
+     * steps to get a string value from the value expression.</p>
+     *
+     * @since 2.0
+     */
+
+    public String getStringValueFromModel(FacesContext context)
+        throws ConverterException {
+        ValueExpression ve = getValueExpression("value");
+        if (ve == null) {
+            return null;
+        }
+
+        Object currentValue = ve.getValue(context.getELContext());
+
+        // If there is a converter attribute, use it to to ask application
+        // instance for a converter with this identifer.
+        Converter c = getConverter();
+
+        if (c == null) {
+            // if value is null and no converter attribute is specified, then
+            // return null (null has meaning for a view parameters; it means remove it).
+            if (currentValue == null) {
+                return null;
+            }
+            // Do not look for "by-type" converters for Strings
+            if (currentValue instanceof String) {
+                return (String) currentValue;
+            }
+
+            // if converter attribute set, try to acquire a converter
+            // using its class type.
+
+            Class converterType = currentValue.getClass();
+            c = context.getApplication().createConverter(converterType);
+
+            // if there is no default converter available for this identifier,
+            // assume the model type to be String.
+            if (c == null) {
+                return currentValue.toString();
+            }
+        }
+
+        return c.getAsString(context, this, currentValue);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Because this class has no {@link
+     * Renderer}, leverage the one from the standard HTML_BASIC {@link
+     * RenderKit} with <code>component-family: javax.faces.Input</code>
+     * and <code>renderer-type: javax.faces.Text</code> and call its
+     * {@link Renderer#getConvertedValue} method.</p>
+     *
+     * @since 2.0
+     */ 
+    @Override
+    protected Object getConvertedValue(FacesContext context, Object submittedValue)
+          throws ConverterException {
+
+        return getInputTextRenderer(context).getConvertedValue(context, this, 
+                submittedValue);
+
+    }
+    
+    private Renderer getInputTextRenderer(FacesContext context) {
+        if (null == inputTextRenderer) {
+            RenderKitFactory rkf = (RenderKitFactory) 
+                    FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+            RenderKit standard = rkf.getRenderKit(context, RenderKitFactory.HTML_BASIC_RENDER_KIT);
+            inputTextRenderer = standard.
+                    getRenderer("javax.faces.Input", "javax.faces.Text");
+        }
+        assert(null != inputTextRenderer);
+        return inputTextRenderer;
+    }
+
+    // ----------------------------------------------------- Helper Methods
+
+    private boolean hasValueExpression() {
+        return null != getValueExpression("value");
+    }
+
+    
+    /**
+     * <p class="changed_added_2_0">Inner class to encapsulate a
+     * <code>UIViewParameter</code> instance so that it may be safely
+     * referenced regardless of whether or not the current view is the
+     * same as the view in which this <code>UIViewParameter</code>
+     * resides.</p>
+     * @since 2.0
+     */
+    
+    public static class Reference {
+        
+        private StateHolderSaver saver;
+        private int indexInParent;
+        private String viewIdAtTimeOfConstruction;
+        
+	/**
+	 * <p class="changed_added_2_0">Construct a reference to a
+	 * <code>UIViewParameter</code>.  This constructor cause the
+	 * {@link StateHolder#saveState} method to be called on
+	 * argument <code>UIViewParameter</code>.</p>
+	 *
+	 * @param context the <code>FacesContext</code>for this request
+	 * @param indexInParent the index of the
+	 * <code>UIViewParameter</code> in its parent
+	 * <code>UIPanel</code>.
+	 * @param viewIdAtTimeOfConstruction the viewId of the view in
+	 * which the <code>UIViewParameter</code> is included.  This may
+	 * not be the same as the viewId from the <code>context</code>
+	 * argument.
+	 *
+	 * @since 2.0
+	 */
+        public Reference(FacesContext context, 
+                UIViewParameter param, 
+                int indexInParent,
+                String viewIdAtTimeOfConstruction)     {
+            this.saver = new StateHolderSaver(context, param);
+            this.indexInParent = indexInParent;
+            this.viewIdAtTimeOfConstruction = viewIdAtTimeOfConstruction;
+        }
+
+	/**
+	 * <p class="changed_added_2_0">Return the
+	 * <code>UIViewParameter</code> to which this instance refers.
+	 * If the current viewId is the same as the viewId passed to our
+	 * constructor, use the index passed to the constructor to find
+	 * the actual <code>UIViewParameter</code> instance and return
+	 * it.  Otherwise, call {@link StateHolder#restoreState} on the
+	 * saved state and return the result.</p>
+	 *
+	 * @param context the <code>FacesContext</code>for this request
+	 *
+	 * @since 2.0
+	 */
+        
+        public UIViewParameter getUIViewParameter(FacesContext context) {
+            UIViewParameter result = null;
+            UIViewRoot root = context.getViewRoot();
+            // If the view root is the same as when we were constructed...
+            if (this.viewIdAtTimeOfConstruction.equals(root.getViewId())) {
+                // get the actual view parameter from the tree...
+                UIComponent metadataFacet = root.getFacet(UIViewRoot.METADATA_FACET_NAME);
+                result = (UIViewParameter) metadataFacet.getChildren().get(indexInParent);
+            } else {
+                // otherwise, use the saved one
+                result = (UIViewParameter) this.saver.restore(context);
+            }
+            
+            return result;
+        }
+        
+    }
+
+}
diff --git a/javax/faces/component/UIViewRoot.java b/javax/faces/component/UIViewRoot.java
new file mode 100644
index 0000000..e0bcf6f
--- /dev/null
+++ b/javax/faces/component/UIViewRoot.java
@@ -0,0 +1,1885 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component;
+
+import javax.el.MethodExpression;
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.application.ProjectStage;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+import javax.faces.webapp.FacesServlet;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ListIterator;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.event.*;
+import javax.faces.view.ViewDeclarationLanguage;
+import javax.faces.view.ViewMetadata;
+
+/**
+ * <p><strong class="changed_modified_2_0"><span
+ * class="changed_modified_2_0_rev_a changed_modified_2_1
+ * changed_modified_2_2">UIViewRoot</span></strong> is the UIComponent
+ * that represents the root of the UIComponent tree.  This component
+ * renders markup as the response to Ajax requests.  It also serves as
+ * the root of the component tree, and as a place to hang per-view
+ * {@link PhaseListener}s.</p>
+ *
+ * <p>For each of the following lifecycle phase methods:</p>
+
+ * <ul>
+
+ * <li><p>{@link #processDecodes} </p></li>
+
+ * <li><p>{@link #processValidators} </p></li>
+
+ * <li><p>{@link #processUpdates} </p></li>
+
+ * <li><p>{@link #processApplication} </p></li>
+
+ * <li><p>RenderResponse, via {@link #encodeBegin} and {@link
+ * #encodeEnd} </p></li>
+
+ * </ul>
+
+ * <p>Take the following action regarding
+ * <code>PhaseListener</code>s.</p>
+
+ * <ul>
+
+ * <p>Initialize a state flag to <code>false</code>.</p>
+
+ * <p>If {@link #getBeforePhaseListener} returns non-<code>null</code>,
+ * invoke the listener, passing in the correct corresponding {@link
+ * PhaseId} for this phase.</p>
+
+ * <p>Upon return from the listener, call {@link
+ * FacesContext#getResponseComplete} and {@link
+ * FacesContext#getRenderResponse}.  If either return <code>true</code>
+ * set the internal state flag to <code>true</code>. </p>
+
+ * <p>If or one or more listeners have been added by a call to {@link
+ * #addPhaseListener}, invoke the <code>beforePhase</code> method on
+ * each one whose {@link PhaseListener#getPhaseId} matches the current
+ * phaseId, passing in the same <code>PhaseId</code> as in the previous
+ * step.</p>
+
+ * <p>Upon return from each listener, call {@link
+ * FacesContext#getResponseComplete} and {@link
+ * FacesContext#getRenderResponse}.  If either return <code>true</code>
+ * set the internal state flag to <code>true</code>. </p>
+
+
+ * <p>Execute any processing for this phase if the internal state flag
+ * was not set.</p>
+
+ * <p>If {@link #getAfterPhaseListener} returns non-<code>null</code>,
+ * invoke the listener, passing in the correct corresponding {@link
+ * PhaseId} for this phase.</p>
+ * <p/>
+ * <p>If or one or more listeners have been added by a call to {@link
+ * #addPhaseListener}, invoke the <code>afterPhase</code> method on each
+ * one whose {@link PhaseListener#getPhaseId} matches the current
+ * phaseId, passing in the same <code>PhaseId</code> as in the previous
+ * step.</p>
+ * <p/>
+ * <p/>
+ * </ul>
+ */
+
+public class UIViewRoot extends UIComponentBase implements UniqueIdVendor {
+
+    // ------------------------------------------------------ Manifest Constants
+
+    public static final String METADATA_FACET_NAME = "javax_faces_metadata";
+    
+    /**
+     * <p class="changed_added_2_0">The key in the value set of the
+     * <em>view metadata BeanDescriptor</em>, the value of which is a 
+     * <code>List<{@link UIViewParameter.Reference}></code>.</p>
+     *
+     * @since 2.0
+     */
+    public static final String VIEW_PARAMETERS_KEY = "javax.faces.component.VIEW_PARAMETERS_KEY";
+    
+    /** <p>The standard component type for this component.</p> */
+    public static final String COMPONENT_TYPE = "javax.faces.ViewRoot";
+
+
+    /** <p>The standard component family for this component.</p> */
+    public static final String COMPONENT_FAMILY = "javax.faces.ViewRoot";
+
+
+    /**
+     * <p>The prefix that will be used for identifiers generated
+     * by the <code>createUniqueId()</code> method.
+     */
+    static public final String UNIQUE_ID_PREFIX = "j_id";
+
+    private static Lifecycle lifecycle;
+
+    private static final Logger LOGGER =
+          Logger.getLogger("javax.faces", "javax.faces.LogStrings");
+
+    private static final String LOCATION_IDENTIFIER_PREFIX = "javax_faces_location_";
+    private static final Map<String,String> LOCATION_IDENTIFIER_MAP =
+          new HashMap<String,String>(6, 1.0f);
+    static {
+        LOCATION_IDENTIFIER_MAP.put("head", LOCATION_IDENTIFIER_PREFIX + "HEAD");
+        LOCATION_IDENTIFIER_MAP.put("form", LOCATION_IDENTIFIER_PREFIX + "FORM");
+        LOCATION_IDENTIFIER_MAP.put("body", LOCATION_IDENTIFIER_PREFIX + "BODY");        
+    }
+
+    enum PropertyKeys {
+        /**
+         * <p>The render kit identifier of the {@link javax.faces.render.RenderKit} associated
+         * wth this view.</p>
+         */
+        renderKitId,
+        /**
+         * <p>The view identifier of this view.</p>
+         */
+        viewId,
+        locale,
+        lastId,
+        beforePhase,
+        afterPhase,
+        phaseListeners,
+        resourceLibraryContracts
+    }
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Create a new {@link UIViewRoot} instance with default property
+     * values.</p>
+     */
+    public UIViewRoot() {
+
+        super();
+        setRendererType(null);
+        setId(createUniqueId());
+
+    }
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    /**
+     * <p>Set and cleared during the lifetime of a lifecycle phase.  Has
+     * no meaning between phases.  If <code>true</code>, the lifecycle
+     * processing for the current phase must not take place.</p>
+     */
+    private boolean skipPhase;
+
+    /**
+     * <p>Set and cleared during the lifetime of a lifecycle phase.  Has no
+     * meaning between phases.  If <code>true</code>, the
+     * <code>MethodExpression</code> associated with <code>afterPhase</code>
+     * will not be invoked nor will any PhaseListeners associated with this
+     * UIViewRoot.
+     */
+    private boolean beforeMethodException;
+
+    /**
+     * <p>Set and cleared during the lifetime of a lifecycle phase.  Has no
+     * meaning between phases.
+     */
+    private ListIterator<PhaseListener> phaseListenerIterator;
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p class="changed_added_2_0">Override superclass method to always return 
+     * {@code true} because a {@code UIViewRoot} is 
+     * defined to always be in a view.</p>
+     *
+     * @since 2.0
+     */
+    @Override
+    public boolean isInView() {
+
+        return true;
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Overridden to take no action.</p>
+     *
+     * @since 2.0
+     * @param isInView
+     */
+    @Override
+    public void setInView(boolean isInView) {
+        // no-op
+    }
+
+    /**
+     * @see UIComponent#getFamily()
+     */
+    public String getFamily() {
+
+        return (COMPONENT_FAMILY);
+
+    }
+
+
+    /**
+     * <p>Return the render kit identifier of the {@link
+     * javax.faces.render.RenderKit} associated with this view.  Unless
+     * explicitly set, as in {@link
+     * javax.faces.application.ViewHandler#createView}, the returned
+     * value will be <code>null.</code></p>
+     */
+    public String getRenderKitId() {
+
+        return (String) getStateHelper().eval(PropertyKeys.renderKitId);
+
+    }
+
+
+    /**
+     * <p>Set the render kit identifier of the {@link javax.faces.render.RenderKit}
+     * associated with this view.  This method may be called at any time
+     * between the end of <em>Apply Request Values</em> phase of the
+     * request processing lifecycle (i.e. when events are being broadcast)
+     * and the beginning of the <em>Render Response</em> phase.</p>
+     *
+     * @param renderKitId The new {@link javax.faces.render.RenderKit} identifier,
+     *                    or <code>null</code> to disassociate this view with any
+     *                    specific {@link javax.faces.render.RenderKit} instance
+     */
+    public void setRenderKitId(String renderKitId) {
+
+        getStateHelper().put(PropertyKeys.renderKitId, renderKitId);
+
+    }
+
+
+    /** <p>Return the view identifier for this view.</p> */
+    public String getViewId() {
+
+        return (String) getStateHelper().get(PropertyKeys.viewId);
+
+    }
+
+
+    /**
+     * <p>Set the view identifier for this view.</p>
+     *
+     * @param viewId The new view identifier
+     */
+    public void setViewId(String viewId) {
+
+        getStateHelper().put(PropertyKeys.viewId, viewId);
+
+    }
+
+    // ------------------------------------------------ Event Management Methods
+
+
+    /**
+     * <p>Return the {@link MethodExpression} that will be invoked
+     * before this view is rendered.</p>
+     *
+     * @return the {@link MethodExpression} that will be invoked before
+     *         this view is rendered.
+     * @since 1.2
+     */
+    public MethodExpression getBeforePhaseListener() {
+
+        return (MethodExpression) getStateHelper().get(PropertyKeys.beforePhase);
+    }
+
+    /**
+     * <p><span class="changed_modified_2_0
+     * changed_modified_2_0_rev_a">Allow</span> an arbitrary method to
+     * be called for the "beforePhase" event as the UIViewRoot runs
+     * through its lifecycle.  This method will be called for all phases
+     * <span class="changed_modified_2_0_rev_a">except {@link
+     * PhaseId#RESTORE_VIEW}.  Unlike a true {@link PhaseListener}, this
+     * approach doesn't allow for only receiving {@link PhaseEvent}s for
+     * a given phase.</span></p>
+
+     * <p>The method must conform to the signature of {@link
+     * PhaseListener#beforePhase}.</p>
+     *
+     * @param newBeforePhase the {@link MethodExpression} that will be
+     *                       invoked before this view is rendered.
+     * @since 1.2
+     */
+    public void setBeforePhaseListener(MethodExpression newBeforePhase) {
+        getStateHelper().put(PropertyKeys.beforePhase, newBeforePhase);
+    }
+
+    /**
+     * <p>Return the {@link MethodExpression} that will be invoked after
+     * this view is rendered.</p>
+     *
+     * @return the {@link MethodExpression} that will be invoked after
+     *         this view is rendered.
+     *
+     * @since 1.2
+     */
+    public MethodExpression getAfterPhaseListener() {
+        return (MethodExpression) getStateHelper().get(PropertyKeys.afterPhase);
+    }
+
+    /**
+     * <p><span class="changed_modified_2_0">Allow</span> an arbitrary
+     * method to be called for the "afterPhase" event as the UIViewRoot
+     * runs through its lifecycle.  This method will be called for all
+     * phases <span class="changed_modified_2_0">including {@link
+     * PhaseId#RESTORE_VIEW}</span>.  Unlike a true {@link
+     * PhaseListener}, this approach doesn't allow for only receiving
+     * {@link PhaseEvent}s for a given phase.</p> <p/> <p>The method
+     * must conform to the signature of {@link
+     * PhaseListener#afterPhase}.</p>
+     *
+     * @param newAfterPhase the {@link MethodExpression} that will be
+     *                      invoked after this view is rendered.
+     *
+     * @since 1.2
+     */
+    public void setAfterPhaseListener(MethodExpression newAfterPhase) {
+        getStateHelper().put(PropertyKeys.afterPhase, newAfterPhase);
+    }
+
+
+    /**
+     * <p>If the argument <code>toRemove</code> is in the list of {@link
+     * PhaseListener}s for this instance, it must be removed.</p>
+     * @param toRemove the {@link PhaseListener} to remove.
+     *
+     * @since 1.2
+     */
+    public void removePhaseListener(PhaseListener toRemove) {
+
+        getStateHelper().remove(PropertyKeys.phaseListeners, toRemove);
+    }
+
+    /**
+     * <p>Add the argument <code>newPhaseListener</code> to the list of
+     * {@link PhaseListener}s on this <code>UIViewRoot</code>.</p>
+     *
+     * @param newPhaseListener the {@link PhaseListener} to add
+     *
+     * @since 1.2
+     */
+    public void addPhaseListener(PhaseListener newPhaseListener) {
+
+        getStateHelper().add(PropertyKeys.phaseListeners, newPhaseListener);
+
+    }
+
+    
+    /**
+     * 
+     * <p class="changed_added_2_0">Return an unmodifiable list of the 
+     * <code>PhaseListener</code> instances attached to this 
+     * <code>UIViewRoot</code> instance.</p>
+     *
+     * @since 2.0
+     */
+    public List<PhaseListener> getPhaseListeners() {
+
+        //noinspection unchecked
+        List<PhaseListener> result = (List<PhaseListener>)
+              getStateHelper().get(PropertyKeys.phaseListeners);
+
+        return ((result != null)
+                ? Collections.unmodifiableList(result)
+                : Collections.unmodifiableList(Collections.<PhaseListener>emptyList()));
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Add argument <code>component</code>,
+     * which is assumed to represent a resource instance, as a resource
+     * to this view.  A resource instance is rendered by a resource
+     * <code>Renderer</code>, as described in the Standard HTML
+     * RenderKit. The default implementation must call through to
+     * {@link #addComponentResource(javax.faces.context.FacesContext, 
+     * javax.faces.component.UIComponent, java.lang.String)}.</p>
+     *
+     * <div class="changed_added_2_0">
+     * <p>
+     * 
+     * @param context {@link FacesContext} for the current request
+     * @param componentResource The {@link UIComponent} representing a 
+     * {@link javax.faces.application.Resource} instance
+     *
+     * @since 2.0
+     */
+    public void addComponentResource(FacesContext context, UIComponent componentResource) {
+        addComponentResource(context, componentResource, null);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Add argument <code>component</code>,
+     * which is assumed to represent a resource instance, as a resource
+     * to this view.  A resource instance is rendered by a resource
+     * <code>Renderer</code>, as described in the Standard HTML
+     * RenderKit. </p>
+     *
+     * <div class="changed_added_2_0">
+
+     * <p> The <code>component</code> must be added using the following
+     * algorithm:</p>
+
+     * <ul>
+
+     * <li><p>If the <code>target</code> argument is <code>null</code>,
+     * look for a <code>target</code> attribute on the
+     * <code>component</code>.  If there is no <code>target</code>
+     * attribute, set <code>target</code> to be the default value
+     * <code>head</code></p></li>
+
+     * <li><p>Call {@link #getComponentResources} to obtain the child
+     * list for the given target.</p></li>
+     *
+     * <li><p>If the component ID of <code>componentResource</code> matches the
+     * the ID of a resource that has allready been added, remove the old
+     * resource.</p></li>
+
+     * <li><p>Add the <code>component</code> resource to the
+     * list.</p></li>
+
+     * </ul>
+
+     * </div>
+     *  
+     * @param context {@link FacesContext} for the current request
+     * @param componentResource The {@link UIComponent} representing a 
+     * {@link javax.faces.application.Resource} instance 
+     * @param target The name of the facet for which the {@link UIComponent} will be added
+     *
+     * @since 2.0
+     */
+    public void addComponentResource(FacesContext context, UIComponent componentResource, String target) {
+        final Map<String,Object> attributes = componentResource.getAttributes();
+        // look for a target in the component attribute set if arg is not set.
+        if (target == null) {
+            target = (String) attributes.get("target");
+        }
+        if (target == null) {
+            target = "head";
+        }
+        List<UIComponent> facetChildren = getComponentResources(context,
+                                                                target,
+                                                                true);
+        String id = componentResource.getId();
+        if (id != null) {
+            for (UIComponent c : facetChildren) {
+                if (id.equals(c.getId())) {
+                    facetChildren.remove(c);
+                }
+            }
+        }
+        // add the resource to the facet
+        facetChildren.add(componentResource);
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_deleted_2_0_rev_a
+     * changed_modified_2_1">Return</span> an unmodifiable
+     * <code>List</code> of {@link UIComponent}s for the provided
+     * <code>target</code> agrument.  Each <code>component</code> in the
+     * <code>List</code> is assumed to represent a resource
+     * instance.</p>
+     *
+     * <div class="changed_added_2_0">
+     * <p>The default implementation must use an algorithm equivalent to the
+     * the following.</p>
+     * <ul>
+     * <li>Locate the facet for the <code>component</code> by calling <code>getFacet()</code> using
+     * <code>target</code> as the argument.</li>
+
+     * <li>If the facet is not found, create the facet by calling
+     * <code>context.getApplication().createComponent().</code> <span
+     * class="changed_modified_2_0_rev_a">The argument to this method
+     * must refer to a component that extends {@link UIPanel} and
+     * overrides the <code>encodeAll()</code> method to take no action.
+     * This is necessary to prevent component resources from being
+     * inadvertently rendered.</span></li>
+
+     * <ul>
+
+     * <li class="changed_modified_2_1">Set the <code>id</code> of the
+     * facet to be a string created by prepending the literal string
+     * “<code>javax_faces_location_</code>” (without the
+     * quotes) to the value of the <code>target</code> argument</li>
+
+     * <li>Add the facet to the facets <code>Map</code> using <code>target</code> as the key</li>
+     * </ul>
+     * <li>return the children of the facet</li>
+     * </ul>
+
+     * </div>
+     *
+     * @param target The name of the facet for which the components will be returned. 
+     *
+     * @return A <code>List</code> of {@link UIComponent} children of
+     * the facet with the name <code>target</code>.  If no children are
+     * found for the facet, return <code>Collections.emptyList()</code>.
+     *
+     * @throws NullPointerException if <code>target</code> or
+     * <code>context</code> is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public List<UIComponent> getComponentResources(FacesContext context, 
+                                                   String target) {
+        if (target == null) {
+            throw new NullPointerException();
+        }
+
+        List<UIComponent> resources = getComponentResources(context,
+                                                            target,
+                                                            false);
+
+        return ((resources != null)
+                ? resources
+                : Collections.<UIComponent>emptyList());
+
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Remove argument <code>component</code>,
+     * which is assumed to represent a resource instance, as a resource
+     * to this view.</p>
+     *
+     * <div class="changed_added_2_0">
+     * <p>
+     * 
+     * @param context {@link FacesContext} for the current request
+     * @param componentResource The {@link UIComponent} representing a 
+     * {@link javax.faces.application.Resource} instance
+     *
+     * @since 2.0
+     */
+    public void removeComponentResource(FacesContext context, UIComponent componentResource) {
+        removeComponentResource(context, componentResource, null);
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Remove argument <code>component</code>,
+     * which is assumed to represent a resource instance, as a resource
+     * to this view.  A resource instance is rendered by a resource
+     * <code>Renderer</code>, as described in the Standard HTML
+     * RenderKit. </p>
+     *
+     * <div class="changed_added_2_0">
+     * <p>
+     * The <code>component</code> must be removed using the following algorithm:
+     * <ul>
+     * <li>If the <code>target</code> argument is <code>null</code>, look for a <code>target</code>
+     * attribute on the <code>component</code>.<br>
+     * If there is no <code>target</code> attribute, set <code>target</code> to be the default value <code>head</code></li>
+     * <li>Call {@link #getComponentResources} to obtain the child list for the
+     * given target.</li>
+     * <li>Remove the <code>component</code> resource from the child list.</li>
+     * </ul>
+     * </p>
+     * </div>
+     *  
+     * @param context {@link FacesContext} for the current request
+     * @param componentResource The {@link UIComponent} representing a 
+     * {@link javax.faces.application.Resource} instance 
+     * @param target The name of the facet for which the {@link UIComponent} will be added
+     *
+     * @since 2.0
+     */
+    public void removeComponentResource(FacesContext context, UIComponent componentResource, String target) {
+
+        final Map<String,Object> attributes = componentResource.getAttributes();
+        // look for a target in the component attribute set if arg is not set.
+        if (target == null) {
+            target = (String) attributes.get("target");
+        }
+        if (target == null) {
+            target = "head";
+        }
+        List<UIComponent> facetChildren = getComponentResources(context,
+                                                                target,
+                                                                false);
+        if (facetChildren != null) {
+            facetChildren.remove(componentResource);
+        }
+
+    }
+
+    /**
+     * <p>An array of Lists of events that have been queued for later
+     * broadcast, with one List for each lifecycle phase.  The list
+     * indices match the ordinals of the PhaseId instances.  This
+     * instance is lazily instantiated.  This list is
+     * <strong>NOT</strong> part of the state that is saved and restored
+     * for this component.</p>
+     */
+    private List<List<FacesEvent>> events = null;
+
+
+    /**
+     * <p>Override the default {@link UIComponentBase#queueEvent} behavior to
+     * accumulate the queued events for later broadcasting.</p>
+     *
+     * @param event {@link FacesEvent} to be queued
+     *
+     * @throws IllegalStateException if this component is not a
+     *                               descendant of a {@link UIViewRoot}
+     * @throws NullPointerException  if <code>event</code>
+     *                               is <code>null</code>
+     */
+    public void queueEvent(FacesEvent event) {
+
+        if (event == null) {
+            throw new NullPointerException();
+        }
+        // We are a UIViewRoot, so no need to check for the ISE
+        if (events == null) {
+            int len = PhaseId.VALUES.size();
+            List<List<FacesEvent>> events = new ArrayList<List<FacesEvent>>(len);
+            for (int i = 0; i < len; i++) {
+                events.add(new ArrayList<FacesEvent>(5));
+            }
+            this.events = events;
+        }
+        events.get(event.getPhaseId().getOrdinal()).add(event);
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Broadcast any events that have been
+     * queued.  First broadcast events that have been queued for {@link
+     * PhaseId#ANY_PHASE}.  Then broadcast ane events that have been
+     * queued for the current phase.  In both cases, {@link
+     * UIComponent#pushComponentToEL} must be called before the event is
+     * broadcast, and {@link UIComponent#popComponentFromEL} must be
+     * called after the return from the broadcast, even in the case of
+     * an exception.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param phaseId {@link PhaseId} of the current phase
+
+     * @since 2.0
+     */
+    public void broadcastEvents(FacesContext context, PhaseId phaseId) {
+
+        if (null == events) {
+            // no events have been queued
+            return;
+        }
+        boolean hasMoreAnyPhaseEvents;
+        boolean hasMoreCurrentPhaseEvents;
+
+        List<FacesEvent> eventsForPhaseId =
+             events.get(PhaseId.ANY_PHASE.getOrdinal());
+
+        // keep iterating till we have no more events to broadcast.
+        // This is necessary for events that cause other events to be
+        // queued.  PENDING(edburns): here's where we'd put in a check
+        // to prevent infinite event queueing.
+        do {
+            // broadcast the ANY_PHASE events first
+            if (null != eventsForPhaseId) {
+                // We cannot use an Iterator because we will get
+                // ConcurrentModificationException errors, so fake it
+                while (!eventsForPhaseId.isEmpty()) {
+                    FacesEvent event =
+                          eventsForPhaseId.get(0);
+                    UIComponent source = event.getComponent();
+                    UIComponent compositeParent = null;
+                    try {
+                        if (!UIComponent.isCompositeComponent(source)) {
+                            compositeParent = UIComponent.getCompositeComponentParent(source);
+                        }
+                        if (compositeParent != null) {
+                            compositeParent.pushComponentToEL(context, null);
+                        }
+                        source.pushComponentToEL(context, null);
+                        source.broadcast(event);
+                    } catch (AbortProcessingException e) {
+                        context.getApplication().publishEvent(context,
+                                                              ExceptionQueuedEvent.class,
+                                                              new ExceptionQueuedEventContext(context,
+                                                                                        e,
+                                                                                        source,
+                                                                                        phaseId));
+                    }
+                    finally {
+                        source.popComponentFromEL(context);
+                        if (compositeParent != null) {
+                            compositeParent.popComponentFromEL(context);
+                        }
+                    }
+                    eventsForPhaseId.remove(0); // Stay at current position
+                }
+            }
+
+            // then broadcast the events for this phase.
+            if (null != (eventsForPhaseId = events.get(phaseId.getOrdinal()))) {
+                // We cannot use an Iterator because we will get
+                // ConcurrentModificationException errors, so fake it
+                while (!eventsForPhaseId.isEmpty()) {
+                    FacesEvent event = eventsForPhaseId.get(0);
+                    UIComponent source = event.getComponent();
+                    UIComponent compositeParent = null;
+                    try {
+                        if (!UIComponent.isCompositeComponent(source)) {
+                            compositeParent = getCompositeComponentParent(source);
+                        }
+                        if (compositeParent != null) {
+                            compositeParent.pushComponentToEL(context, null);
+                        }
+                        source.pushComponentToEL(context, null);
+                        source.broadcast(event);
+                    } catch (AbortProcessingException ape) {
+                        // A "return" here would abort remaining events too
+                        context.getApplication().publishEvent(context,
+                                                              ExceptionQueuedEvent.class,
+                                                              new ExceptionQueuedEventContext(context,
+                                                                                        ape,
+                                                                                        source,
+                                                                                        phaseId));
+                    }
+                    finally {
+                        source.popComponentFromEL(context);
+                        if (compositeParent != null) {
+                            compositeParent.popComponentFromEL(context);
+                        }
+                    }
+                    eventsForPhaseId.remove(0); // Stay at current position
+                }
+            }
+
+            // true if we have any more ANY_PHASE events
+            hasMoreAnyPhaseEvents =
+                  (null != (eventsForPhaseId =
+                        events.get(PhaseId.ANY_PHASE.getOrdinal()))) &&
+                        !eventsForPhaseId.isEmpty();
+            // true if we have any more events for the argument phaseId
+            hasMoreCurrentPhaseEvents =
+                  (null != events.get(phaseId.getOrdinal())) &&
+                  !events.get(phaseId.getOrdinal()).isEmpty();
+
+        } while (hasMoreAnyPhaseEvents || hasMoreCurrentPhaseEvents);
+    
+    }
+
+    // ------------------------------------------------ Lifecycle Phase Handlers
+
+
+    private void initState() {
+        skipPhase = false;
+        beforeMethodException = false;
+        //noinspection unchecked
+        List<PhaseListener> listeners =
+              (List<PhaseListener>) getStateHelper().get(PropertyKeys.phaseListeners);
+        phaseListenerIterator =
+              ((listeners != null) ? listeners.listIterator() : null);
+    }
+
+    // avoid creating the PhaseEvent if possible by doing redundant
+    // null checks.
+    private void notifyBefore(FacesContext context, PhaseId phaseId) {
+        if (getBeforePhaseListener() != null || phaseListenerIterator != null) {
+            notifyPhaseListeners(context, phaseId, true);
+        }
+    }
+    
+    // avoid creating the PhaseEvent if possible by doing redundant
+    // null checks.
+    private void notifyAfter(FacesContext context, PhaseId phaseId) {
+        if (getAfterPhaseListener() != null || phaseListenerIterator != null) {
+            notifyPhaseListeners(context, phaseId, false);
+        }
+    }
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_deleted_2_0_rev_a">The</span> default
+     * implementation must call {@link
+     * UIComponentBase#processRestoreState} from within a
+     * <code>try</code> block.  The <code>try</code> block must have a
+     * <code>finally</code> block that ensures that no {@link
+     * FacesEvent}s remain in the event queue. <a
+     * class="changed_deleted_2_0_rev_a" title="text removed in 2.0 Rev a: and that the this.visitTree is called, passing a ContextCallback that takes the following action: call the processEvent method of the current component. The argument event must be an instance of PostRestoreStateEvent whose component property is the current component in the traversal.">   </a> </p>
+     * @param context the <code>FacesContext</code> for this requets
+     * @param state the opaque state object obtained from the {@link
+     * javax.faces.application.StateManager}
+     */
+    @Override
+    public void processRestoreState(FacesContext context, Object state) {
+
+        // hack to work around older state managers that may not set the
+        // view root early enough
+        if (context.getViewRoot() == null) {
+            context.setViewRoot(this);
+        }
+        super.processRestoreState(context, state);
+
+    }
+    
+
+    /**
+     * <div class="changed_added_2_0">
+     * <p>Perform partial processing by calling
+     * {@link javax.faces.context.PartialViewContext#processPartial} with
+     * {@link PhaseId#APPLY_REQUEST_VALUES} if:
+     * <ul>
+     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>true</code> and we don't have a request to process all 
+     * components in the view
+     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
+     * <code>false</code>)</li>
+     * </ul>
+     * Perform full processing by calling 
+     * {@link UIComponentBase#processDecodes} if one of the following 
+     * conditions are met:
+     * <ul>
+     * <li> {@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>true</code> and we have a request to process all 
+     * components in the view
+     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
+     * <code>true</code>)</li>
+     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>false</code></li>
+     * </ul>
+     * </p>
+     * </div>
+     * <p class="changed_modified_2_0">Override the default 
+     * {@link UIComponentBase#processDecodes} behavior to broadcast any queued 
+     * events after the default processing or partial processing has been 
+     * completed and to clear out any events for later phases if the event 
+     * processing for this phase caused {@link FacesContext#renderResponse} 
+     * or {@link FacesContext#responseComplete} to be called.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *                              is <code>null</code>
+     */
+    @Override
+    public void processDecodes(FacesContext context) {
+        initState();
+        notifyBefore(context, PhaseId.APPLY_REQUEST_VALUES);
+
+        try {
+            if (!skipPhase) {
+                if (context.getPartialViewContext().isPartialRequest() &&
+                    !context.getPartialViewContext().isExecuteAll()) {
+                    context.getPartialViewContext().processPartial(PhaseId.APPLY_REQUEST_VALUES);
+                } else {
+                    super.processDecodes(context);
+                }
+                broadcastEvents(context, PhaseId.APPLY_REQUEST_VALUES);
+            }
+        } finally {
+            clearFacesEvents(context);
+            notifyAfter(context, PhaseId.APPLY_REQUEST_VALUES);
+        }
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Visit the clientIds and, if the component is 
+     * an instance of {@link EditableValueHolder}, 
+     * call its {@link EditableValueHolder#resetValue} method.  
+     * Use {@link #visitTree} to do the visiting.</p>
+     * 
+     * @since 2.2
+
+     * @param context the {@link FacesContext} for the request we are processing.
+     * @param clientIds The client ids to be visited, on which the described action will be taken.
+     */
+    
+    public void resetValues(FacesContext context, Collection<String> clientIds) {
+        this.visitTree(VisitContext.createVisitContext(context, clientIds, null), 
+                new DoResetValues());
+    }
+
+    private static class DoResetValues implements VisitCallback {
+        @Override
+            public VisitResult visit(VisitContext context, UIComponent target) {
+            if (target instanceof EditableValueHolder) {
+                ((EditableValueHolder)target).resetValue();
+            }
+            return VisitResult.ACCEPT;
+        }
+    }        
+
+    /**
+     * <p><span class="changed_added_2_0">Override</span> the default
+     * {@link UIComponentBase#encodeBegin} behavior.  If
+     * {@link #getBeforePhaseListener} returns non-<code>null</code>,
+     * invoke it, passing a {@link PhaseEvent} for the {@link
+     * PhaseId#RENDER_RESPONSE} phase.  If the internal list populated
+     * by calls to {@link #addPhaseListener} is non-empty, any listeners
+     * in that list must have their {@link PhaseListener#beforePhase}
+     * method called, passing the <code>PhaseEvent</code>.  Any errors
+     * that occur during invocation of any of the the beforePhase
+     * listeners must be logged and swallowed.  After listeners are invoked
+     * call superclass processing.</p>
+     */
+    @Override
+    public void encodeBegin(FacesContext context) throws IOException {
+        initState();
+        notifyBefore(context, PhaseId.RENDER_RESPONSE);
+
+        if (!context.getResponseComplete()) {
+            super.encodeBegin(context);
+        }
+    }
+
+    /** 
+     * <p class="changed_added_2_0">If {@link
+     * javax.faces.context.PartialViewContext#isAjaxRequest} returns 
+     * <code>true</code>, perform partial rendering by calling
+     * {@link javax.faces.context.PartialViewContext#processPartial} with 
+     * {@link PhaseId#RENDER_RESPONSE}.  If {@link
+     * javax.faces.context.PartialViewContext#isAjaxRequest} returns
+     * <code>false</code>, delegate to the parent {@link
+     * javax.faces.component.UIComponentBase#encodeChildren} method.</p>
+     *
+     * @since 2.0
+     */
+    @Override
+    public void encodeChildren(FacesContext context) throws IOException {
+        if (context.getPartialViewContext().isAjaxRequest()) {
+            context.getPartialViewContext().processPartial(PhaseId.RENDER_RESPONSE);
+        } else {
+            super.encodeChildren(context);
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0"> If {@link #getAfterPhaseListener}
+     * returns non-<code>null</code>, invoke it, passing a {@link
+     * PhaseEvent} for the {@link PhaseId#RENDER_RESPONSE} phase.  Any
+     * errors that occur during invocation of the afterPhase listener
+     * must be logged and swallowed.  If the current view has view
+     * parameters, as indicated by a non-empty and
+     * non-<code>UnsupportedOperationException</code> throwing return
+     * from {@link javax.faces.view.ViewDeclarationLanguage#getViewMetadata(javax.faces.context.FacesContext, String)},
+     * call {@link UIViewParameter#encodeAll} on each parameter.  If
+     * calling <code>getViewParameters()</code> causes
+     * <code>UnsupportedOperationException</code> to be thrown, the
+     * exception must be silently swallowed.</p>
+     */
+    @Override
+    public void encodeEnd(FacesContext context) throws IOException {
+        super.encodeEnd(context);
+        encodeViewParameters(context);
+        notifyAfter(context, PhaseId.RENDER_RESPONSE);               
+    }
+
+    /**
+     * <p class="changed_added_2_0">Call {@link UIComponentBase#getRendersChildren}
+     * If {@link javax.faces.context.PartialViewContext#isAjaxRequest}
+     * returns <code>true</code> this method must return <code>true</code>.</p>
+     *
+     * @since 2.0
+     */
+    @Override
+    public boolean getRendersChildren() {
+        boolean value = super.getRendersChildren();
+        FacesContext context = FacesContext.getCurrentInstance();
+
+        if (context.getPartialViewContext().isAjaxRequest()) {
+            value = true;
+        }
+        return value;
+    }
+    
+    /**
+     * <p>Utility method that notifies phaseListeners for the given
+     * phaseId.  Assumes that either or both the MethodExpression or
+     * phaseListeners data structure are non-null.</p>
+     *
+     * @param context   the context for this request
+     * @param phaseId   the {@link PhaseId} of the current phase
+     * @param isBefore, if true, notify beforePhase listeners.  Notify
+     *                  afterPhase listeners otherwise.
+     */
+    private void notifyPhaseListeners(FacesContext context,
+                                      PhaseId phaseId,
+                                      boolean isBefore) {
+        PhaseEvent event = createPhaseEvent(context, phaseId);
+
+        MethodExpression beforePhase = getBeforePhaseListener();
+        MethodExpression afterPhase = getAfterPhaseListener();
+        boolean hasPhaseMethodExpression =
+              (isBefore && (null != beforePhase)) ||
+              (!isBefore && (null != afterPhase) && !beforeMethodException);
+        MethodExpression expression = isBefore ? beforePhase : afterPhase;
+
+        if (hasPhaseMethodExpression) {
+            try {
+                expression.invoke(context.getELContext(), new Object[]{event});
+                skipPhase = context.getResponseComplete() ||
+                            context.getRenderResponse();
+            }
+            catch (Exception e) {
+                if (isBefore) {
+                    beforeMethodException = true;
+                }
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                               "severe.component.unable_to_process_expression",
+                               new Object[] { expression.getExpressionString(),
+                                              (isBefore ? "beforePhase" : "afterPhase")});
+                }
+                return;
+            }
+        }
+        if (phaseListenerIterator != null && !beforeMethodException) {
+            while ((isBefore)
+                   ? phaseListenerIterator.hasNext()
+                   : phaseListenerIterator.hasPrevious()) {
+                PhaseListener curListener = ((isBefore)
+                                             ? phaseListenerIterator.next()
+                                             : phaseListenerIterator
+                                                   .previous());
+                if (phaseId == curListener.getPhaseId() ||
+                    PhaseId.ANY_PHASE == curListener.getPhaseId()) {
+                    try {
+                        if (isBefore) {
+                            curListener.beforePhase(event);
+                        } else {
+                            curListener.afterPhase(event);
+                        }
+                        skipPhase = context.getResponseComplete() ||
+                                    context.getRenderResponse();
+                    }
+                    catch (Exception e) {
+                        if (isBefore && phaseListenerIterator.hasPrevious()) {
+                            phaseListenerIterator.previous();
+                        }
+                        if (LOGGER.isLoggable(Level.SEVERE)) {
+                            LOGGER.log(Level.SEVERE,
+                                       "severe.component.uiviewroot_error_invoking_phaselistener",
+                                       curListener.getClass().getName());
+                        }
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+    private static PhaseEvent createPhaseEvent(FacesContext context,
+                                               PhaseId phaseId)
+    throws FacesException {
+
+        if (lifecycle == null) {
+            LifecycleFactory lifecycleFactory = (LifecycleFactory)
+                  FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+            String lifecycleId =
+                  context.getExternalContext()
+                        .getInitParameter(FacesServlet.LIFECYCLE_ID_ATTR);
+            if (lifecycleId == null) {
+                lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
+            }
+            lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
+        }
+
+        return (new PhaseEvent(context, phaseId, lifecycle));
+
+    }
+
+
+    /**
+     * <div class="changed_added_2_0">
+     * <p>Perform partial processing by calling
+     * {@link javax.faces.context.PartialViewContext#processPartial} with
+     * {@link PhaseId#PROCESS_VALIDATIONS} if:
+     * <ul>
+     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>true</code> and we don't have a request to process all
+     * components in the view
+     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
+     * <code>false</code>)</li>
+     * </ul>
+     * Perform full processing by calling
+     * {@link UIComponentBase#processValidators} if one of the following
+     * conditions are met:
+     * <ul>
+     * <li> {@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>true</code> and we have a request to process all
+     * components in the view
+     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
+     * <code>true</code>)</li>
+     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>false</code></li>
+     * </ul>
+     * </p>
+     * </div>
+     * <p class="changed_modified_2_0">Override the default 
+     * {@link UIComponentBase#processValidators} behavior to broadcast any 
+     * queued events after the default processing or partial processing has been 
+     * completed and to clear out any events for later phases if the event 
+     * processing for this phase caused {@link FacesContext#renderResponse} or 
+     * {@link FacesContext#responseComplete} to be called.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *                              is <code>null</code>
+     */
+    @Override
+    public void processValidators(FacesContext context) {
+        initState();
+        notifyBefore(context, PhaseId.PROCESS_VALIDATIONS);
+
+        try {
+            if (!skipPhase) {
+                if (context.getPartialViewContext().isPartialRequest() &&
+                    !context.getPartialViewContext().isExecuteAll()) {
+                    context.getPartialViewContext().processPartial(PhaseId.PROCESS_VALIDATIONS);
+                } else {
+                    super.processValidators(context);
+                }
+                broadcastEvents(context, PhaseId.PROCESS_VALIDATIONS);
+            }
+        } finally {
+            clearFacesEvents(context);
+            notifyAfter(context, PhaseId.PROCESS_VALIDATIONS);
+        }
+    }
+
+    /**
+     * <div class="changed_added_2_0">
+     * <p>Perform partial processing by calling
+     * {@link javax.faces.context.PartialViewContext#processPartial} with
+     * {@link PhaseId#UPDATE_MODEL_VALUES} if:
+     * <ul>
+     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>true</code> and we don't have a request to process all
+     * components in the view
+     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
+     * <code>false</code>)</li>
+     * </ul>
+     * Perform full processing by calling
+     * {@link UIComponentBase#processUpdates} if one of the following
+     * conditions are met:
+     * <ul>
+     * <li> {@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>true</code> and we have a request to process all
+     * components in the view
+     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
+     * <code>true</code>)</li>
+     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
+     * returns <code>false</code></li>
+     * </ul>
+     * </p>
+     *</div>
+     * <p class="changed_modified_2_0">Override the default {@link UIComponentBase}
+     * behavior to broadcast any queued events after the default processing or 
+     * partial processing has been completed and to clear out any events for 
+     * later phases if the event processing for this phase caused 
+     * {@link FacesContext#renderResponse} or
+     * {@link FacesContext#responseComplete} to be called.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *                              is <code>null</code>
+     */
+    @Override
+    public void processUpdates(FacesContext context) {
+        initState();
+        notifyBefore(context, PhaseId.UPDATE_MODEL_VALUES);
+
+        try {
+            if (!skipPhase) {
+                if (context.getPartialViewContext().isPartialRequest() &&
+                    !context.getPartialViewContext().isExecuteAll()) {
+                    context.getPartialViewContext().processPartial(PhaseId.UPDATE_MODEL_VALUES);
+                } else {
+                    super.processUpdates(context);
+                }
+                broadcastEvents(context, PhaseId.UPDATE_MODEL_VALUES);
+            }
+        } finally {
+            clearFacesEvents(context);
+            notifyAfter(context, PhaseId.UPDATE_MODEL_VALUES);
+        }
+    }
+
+    /**
+     * <p>Broadcast any events that have been queued for the <em>Invoke
+     * Application</em> phase of the request processing lifecycle
+     * and to clear out any events for later phases if the event processing
+     * for this phase caused {@link FacesContext#renderResponse} or
+     * {@link FacesContext#responseComplete} to be called.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     *
+     * @throws NullPointerException if <code>context</code>
+     *                              is <code>null</code>
+     */
+    public void processApplication(FacesContext context) {
+        initState();
+        notifyBefore(context, PhaseId.INVOKE_APPLICATION);
+        try {
+            if (!skipPhase) {
+                // NOTE - no tree walk is performed; this is a UIViewRoot-only operation
+                broadcastEvents(context, PhaseId.INVOKE_APPLICATION);
+            }
+        } finally {
+            clearFacesEvents(context);
+            notifyAfter(context, PhaseId.INVOKE_APPLICATION);
+        }
+    }
+
+
+    // clear out the events if we're skipping to render-response
+    // or if there is a response complete signal.
+    private void clearFacesEvents(FacesContext context) {
+        if (context.getRenderResponse() || context.getResponseComplete()) {
+            if (events != null) {
+                for (List<FacesEvent> eventList : events) {
+                    if (eventList != null) {
+                        eventList.clear();
+                    }
+                }
+                events = null;
+            }
+        }
+    }
+
+    /**
+     * <p><span class="changed_modified_2_2">Generate</span> an
+     * identifier for a component.  The identifier will be prefixed with
+     * UNIQUE_ID_PREFIX, and will be unique within <span
+     * class="changed_added_2_2">the non-{@link NamingContainer} child
+     * sub-trees of</span> this UIViewRoot.</p>
+     */
+    public String createUniqueId() {
+        return createUniqueId(getFacesContext(), null);
+    }
+
+    /**<p>Generate an identifier for a component. The identifier
+     * will be prefixed with UNIQUE_ID_PREFIX, and will be unique
+     * within this UIViewRoot. Optionally, a unique seed value can
+     * be supplied by component creators which should be
+     * included in the generated unique id.</p>
+     *
+     * @param context FacesContext
+     * @param seed an optional seed value - e.g. based on the position of the component in the VDL-template
+     * @return a unique-id in this component-container
+     */
+    public String createUniqueId(FacesContext context, String seed) {
+        if (seed != null) {
+            return UIViewRoot.UNIQUE_ID_PREFIX + seed;
+        } else {
+            Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
+            int lastId = ((i != null) ? i : 0);
+            getStateHelper().put(PropertyKeys.lastId,  ++lastId);
+            return UIViewRoot.UNIQUE_ID_PREFIX + lastId;
+        }
+    }
+
+
+    /**
+     * <p>Return the <code>Locale</code> to be used in localizing the
+     * response being created for this view.</p>
+     * <p/>
+     * <p>Algorithm:</p>
+     * <p/>
+     * <p>If we have a <code>locale</code> ivar, return it.  If we have
+     * a value expression for "locale", get its value.  If the value is
+     * <code>null</code>, return the result of calling {@link
+     * javax.faces.application.ViewHandler#calculateLocale}.  If the
+     * value is an instance of <code>java.util.Locale</code> return it.
+     * If the value is a String, convert it to a
+     * <code>java.util.Locale</code> and return it.  If there is no
+     * value expression for "locale", return the result of calling {@link
+     * javax.faces.application.ViewHandler#calculateLocale}.</p>
+     *
+     * @return The current <code>Locale</code> obtained by executing the
+     *         above algorithm.
+     */
+    public Locale getLocale() {
+
+        Object result = getStateHelper().eval(PropertyKeys.locale);
+
+        if (result != null) {
+            Locale locale = null;
+            if (result instanceof Locale) {
+                    locale = (Locale) result;
+            } else if (result instanceof String) {
+                   locale = getLocaleFromString((String) result);
+            }
+            return locale;
+        } else {
+            FacesContext context = getFacesContext();
+            return context.getApplication().getViewHandler().calculateLocale(context);
+        }
+
+    }
+
+
+    // W3C XML specification refers to IETF RFC 1766 for language code
+    // structure, therefore the value for the xml:lang attribute should
+    // be in the form of language or language-country or
+    // language-country-variant.
+
+    private static Locale getLocaleFromString(String localeStr)
+        throws IllegalArgumentException {
+        // length must be at least 2.
+        if (null == localeStr || localeStr.length() < 2) {
+            throw new IllegalArgumentException("Illegal locale String: " +
+                                               localeStr);
+        }
+
+        Locale result = null;
+        String lang = null;
+        String country = null;
+        String variant = null;
+        char[] seps = {
+            '-',
+            '_'
+        };
+        int inputLength = localeStr.length();
+        int i = 0;
+        int j = 0;
+
+        // to have a language, the length must be >= 2
+        if ((inputLength >= 2) &&
+            ((i = indexOfSet(localeStr, seps, 0)) == -1)) {
+            // we have only Language, no country or variant
+            if (2 != localeStr.length()) {
+                throw new
+                    IllegalArgumentException("Illegal locale String: " +
+                                             localeStr);
+            }
+            lang = localeStr.toLowerCase();
+        }
+
+        // we have a separator, it must be either '-' or '_'
+        if (i != -1) {
+            lang = localeStr.substring(0, i);
+            // look for the country sep.
+            // to have a country, the length must be >= 5
+            if ((inputLength >= 5) &&
+                (-1 == (j = indexOfSet(localeStr, seps, i + 1)))) {
+                // no further separators, length must be 5
+                if (inputLength != 5) {
+                    throw new
+                        IllegalArgumentException("Illegal locale String: " +
+                                                 localeStr);
+                }
+                country = localeStr.substring(i + 1);
+            }
+            if (j != -1) {
+                country = localeStr.substring(i + 1, j);
+                // if we have enough separators for language, locale,
+                // and variant, the length must be >= 8.
+                if (inputLength >= 8) {
+                    variant = localeStr.substring(j + 1);
+                } else {
+                    throw new
+                        IllegalArgumentException("Illegal locale String: " +
+                                                 localeStr);
+                }
+            }
+        }
+        if (variant != null && country != null && lang != null) {
+            result = new Locale(lang, country, variant);
+        } else if (lang != null && country != null) {
+            result = new Locale(lang, country);
+        } else if (lang != null) {
+            result = new Locale(lang, "");
+        }
+        return result;
+    }
+
+
+    /**
+     * @param str local string
+     * @param set the substring
+     * @param fromIndex starting index
+     * @return starting at <code>fromIndex</code>, the index of the
+     *         first occurrence of any substring from <code>set</code> in
+     *         <code>toSearch</code>, or -1 if no such match is found
+     */
+    private static int indexOfSet(String str, char[] set, int fromIndex) {
+        int result = -1;
+        for (int i = fromIndex, len = str.length(); i < len; i++) {
+            for (int j = 0, innerLen = set.length; j < innerLen; j++) {
+                if (str.charAt(i) == set[j]) {
+                    result = i;
+                    break;
+                }
+            }
+            if (-1 != result) {
+                break;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * <p>Set the <code>Locale</code> to be used in localizing the
+     * response being created for this view. </p>
+     *
+     * @param locale The new localization Locale
+     */
+    public void setLocale(Locale locale) {
+
+        getStateHelper().put(PropertyKeys.locale, locale);
+        // Make sure to appraise the EL of this switch in Locale.
+        FacesContext.getCurrentInstance().getELContext().setLocale(locale);
+
+    }
+    
+    /**
+     * <p class="changed_added_2_0">This implementation simply calls through to {@link
+     * #getViewMap(boolean)}, passing <code>true</code> as the argument, and
+     * returns the result.</p>
+     * <div class="changed_added_2_0">
+     *
+     * @since 2.0
+     */
+    public Map<String, Object> getViewMap() {
+
+        return getViewMap(true);
+        
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">Returns</span>
+     * a <code>Map</code> that acts as the
+     * interface to the data store that is the "view scope", or, if this
+     * instance does not have such a <code>Map</code> and the
+     * <code>create</code> argument is <code>true</code>, creates one and
+     * returns it.  This map must be instantiated lazily and cached for return
+     * from subsequent calls to this method on this <code>UIViewRoot</code>
+     * instance. {@link javax.faces.application.Application#publishEvent} must
+     * be called, passing {@link PostConstructViewMapEvent}<code>.class</code> as the
+     * first argument and this <code>UIViewRoot</code> instance as the second
+     * argument.</p>
+     *
+     * <p>The returned <code>Map</code> must be implemented such that calling
+     * <code>clear()</code> on the <code>Map</code> causes {@link javax.faces.application.Application#publishEvent} to be
+     * called, passing {@link PreDestroyViewMapEvent}<code>.class</code>
+     * as the first argument and this <code>UIViewRoot</code> instance
+     * as the second argument.</p>
+
+     * <p class="changed_modified_2_0_rev_a">Depending upon application
+     * configuration, objects stored in the view map may need to be
+     * <code>Serializable</code>.  In general, it is a good idea to
+     * ensure that any objects stored in the view map are
+     * <code>Serializable</code>.</p>
+     * 
+     * <p class="changed_added_2_2">For reasons made clear in {@link javax.faces.view.ViewScoped},
+     * this map must ultimately be stored in the session.  For this reason, a 
+     * {@code true} value for the {@code create} argument will force the 
+     * session to be created with a call to 
+     * {@link javax.faces.context.ExternalContext#getSession(boolean)}.
+     * 
+     * </p>
+     * 
+     * <p>See {@link FacesContext#setViewRoot} for the specification of when the
+     * <code>clear()</code> method must be called.</p>
+     * <p/>
+     * </div>
+     *
+     * @param create <code>true</code> to create a new <code>Map</code> for this
+     *               instance if necessary; <code>false</code> to return
+     *               <code>null</code> if there's no current <code>Map</code>.
+     *
+     * @since 2.0
+     */
+    public Map<String, Object> getViewMap(boolean create) {
+        Map<String, Object> viewMap = (Map<String, Object>) 
+                getTransientStateHelper().getTransient("com.sun.faces.application.view.viewMap");
+
+        if (create && viewMap == null) {
+            viewMap = new ViewMap(getFacesContext().getApplication().getProjectStage());
+            getTransientStateHelper().putTransient("com.sun.faces.application.view.viewMap", viewMap);
+            getFacesContext().getApplication().publishEvent(getFacesContext(), PostConstructViewMapEvent.class, this);
+        }
+        
+        return viewMap;
+    }
+
+    Map<Class<? extends SystemEvent>,List<SystemEventListener>> viewListeners;
+
+
+    /**
+     * <p class="changed_added_2_0">Install the listener instance
+     * referenced by argument <code>listener</code> into the
+     * <code>UIViewRoot</code> as a listener for events of type
+     * <code>systemEventClass</code>.</p>
+     *
+     * <p>Note that installed listeners are not maintained as part of the
+     * <code>UIViewRoot</code>'s state.</p>
+     *
+     * @param systemEvent the <code>Class</code> of event for which
+     *  <code>listener</code> must be fired.
+
+     * @param listener the implementation of {@link
+     *  javax.faces.event.SystemEventListener} whose {@link
+     *  javax.faces.event.SystemEventListener#processEvent} method must
+     *  be called when events of type <code>systemEventClass</code> are
+     *  fired.
+     *
+     * @throws <code>NullPointerException</code> if <code>systemEventClass</code>
+     *  or <code>listener</code> are <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void subscribeToViewEvent(Class<? extends SystemEvent> systemEvent,
+                                     SystemEventListener listener) {
+
+        if (systemEvent == null) {
+            throw new NullPointerException();
+        }
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+        
+        if (viewListeners == null) {
+            viewListeners = new HashMap<Class<? extends SystemEvent>, List<SystemEventListener>>(4, 1.0f);
+        }
+        List<SystemEventListener> listeners = viewListeners.get(systemEvent);
+        if (listeners == null) {
+            listeners = new CopyOnWriteArrayList<SystemEventListener>();
+            viewListeners.put(systemEvent, listeners);
+        }
+        listeners.add(listener);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Remove the listener instance
+     * referenced by argument <code>listener</code> from the
+     * <code>UIViewRoot</code> as a listener for events of type
+     * <code>systemEventClass</code>.
+     *
+     * @param systemEvent the <code>Class</code> of event for which
+     *  <code>listener</code> must be fired.
+     * @param listener the implementation of {@link
+     *  javax.faces.event.SystemEventListener} whose {@link
+     *  javax.faces.event.SystemEventListener#processEvent} method must
+     *  be called when events of type <code>systemEventClass</code> are
+     *  fired.
+     *
+     * @throws <code>NullPointerException</code> if
+     * <code>systemEventClass</code> or <code>listener</code> are
+     * <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void unsubscribeFromViewEvent(Class<? extends SystemEvent> systemEvent,
+                                         SystemEventListener listener) {
+
+        if (systemEvent == null) {
+            throw new NullPointerException();
+        }
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+
+        if (viewListeners != null) {
+            List<SystemEventListener> listeners = viewListeners.get(systemEvent);
+            if (listeners != null) {
+                listeners.remove(listener);
+            }
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the
+     * <code>SystemEventListener</code> instances registered on this
+     * <code>UIComponent</code> instance that are interested in events
+     * of type <code>eventClass</code>.</p>
+     *
+     * @param systemEvent the <code>Class</code> of event for which the
+     * listeners must be returned.
+
+     * @throws NullPointerException if argument <code>systemEvent</code>
+     * is <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public List<SystemEventListener> getViewListenersForEventClass(Class<? extends SystemEvent> systemEvent) {
+
+        if (systemEvent == null) {
+            throw new NullPointerException();
+        }
+        if (viewListeners != null) {
+            return viewListeners.get(systemEvent);
+        }
+        return null;
+        
+    }
+    
+
+    private void encodeViewParameters(FacesContext context) {
+
+        ViewDeclarationLanguage vdl = context.getApplication().getViewHandler().
+                    getViewDeclarationLanguage(context, getViewId());
+
+        if (vdl == null) {
+            return;
+        }
+        ViewMetadata metadata = vdl.getViewMetadata(context, getViewId());
+        if (metadata != null) { // perhaps it's not supported
+            Collection<UIViewParameter> params =
+                  ViewMetadata.getViewParameters(this);
+            if (params.isEmpty()) {
+                return;
+            }
+
+            try {
+                for (UIViewParameter param : params) {
+                    param.encodeAll(context);
+                }
+            } catch (IOException e) {
+                // IOException is forced by contract and is not expected to be thrown in this case
+                throw new RuntimeException("Unexpected IOException", e);
+            }
+        }
+    }
+
+    /**
+
+     * <p class="changed_added_2_2">Restore ViewScope state. This is
+     * needed to allow the use of view scoped beans for EL-expressions
+     * in the template from which the component tree is built.  For
+     * example: <code><ui:include
+     * src="#{viewScopedBean.includeFileName}"/></code>. </p>
+
+     * 
+     * @param context
+     *            current FacesContext.
+     * @param state
+     *            the state object.
+     */
+    public void restoreViewScopeState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+
+        values = (Object[]) state;
+        super.restoreState(context, values[0]);
+    }
+
+    // END TENATIVE
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+
+    private Object[] values;
+
+    @Override
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        
+        String viewMapId = (String) getTransientStateHelper().getTransient("com.sun.faces.application.view.viewMapId");        
+        Object superState = super.saveState(context);
+
+        if (superState != null || viewMapId != null) {
+            values = new Object[] {superState, viewMapId};
+        }
+
+        return (values);
+
+    }
+
+    @Override
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+        
+        values = (Object[]) state;
+        
+        if (!context.getAttributes().containsKey("com.sun.faces.application.view.restoreViewScopeOnly")) {
+            super.restoreState(context, values[0]);
+        }
+        
+        String viewMapId = (String) values[1];
+
+        getTransientStateHelper().putTransient("com.sun.faces.application.view.viewMapId", viewMapId);
+
+        Map<String, Object> viewMaps = (Map<String, Object>) context.getExternalContext().
+                getSessionMap().get("com.sun.faces.application.view.activeViewMaps");
+
+        if (viewMaps != null) {
+            Map<String, Object> viewMap = (Map<String, Object>) viewMaps.get(viewMapId);
+            getTransientStateHelper().putTransient("com.sun.faces.application.view.viewMap", viewMap);
+        }
+    }
+        
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static String getIdentifier(String target) {
+
+        // check map
+        String id = LOCATION_IDENTIFIER_MAP.get(target);
+        if (id == null) {
+            id = LOCATION_IDENTIFIER_PREFIX + target;
+            LOCATION_IDENTIFIER_MAP.put(target, id);
+        }
+        return id;
+
+    }
+
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    private List<UIComponent> getComponentResources(FacesContext context,
+                                                    String target,
+                                                    boolean create) {
+
+        String location = getIdentifier(target);
+        UIComponent facet = getFacet(location);
+        if (facet == null && create) {
+            // Using an implementation specific component type to prevent
+            // component resources being rendered at the incorrect time if
+            // a caller calls UIViewRoot.encodeAll().
+            facet = context.getApplication().createComponent("javax.faces.ComponentResourceContainer");
+            facet.setId(location);
+            getFacets().put(location, facet);
+        }
+
+        return ((facet != null) ? facet.getChildren() : null);
+
+    }
+    
+
+    private static final class ViewMap extends HashMap<String,Object> {
+
+        private static final long serialVersionUID = -1l;
+
+        private ProjectStage stage;
+
+        
+        // -------------------------------------------------------- Constructors
+
+
+        ViewMap(ProjectStage stage) {
+
+            this.stage = stage;
+
+        }
+
+
+        // ---------------------------------------------------- Methods from Map
+
+
+        @Override
+        public void clear() {
+
+            FacesContext context = FacesContext.getCurrentInstance();
+            context.getApplication().publishEvent(context,
+                                                  PreDestroyViewMapEvent.class,
+                                                  context.getViewRoot());
+            super.clear();
+
+        }
+
+
+        @Override
+        public Object put(String key, Object value) {
+
+            if (value != null && ProjectStage.Development.equals(stage) && !(value instanceof Serializable)) {
+                LOGGER.log(Level.WARNING,
+                           "warning.component.uiviewroot_non_serializable_attribute_viewmap",
+                           new Object[] { key, value.getClass().getName() });
+            }
+            return super.put(key, value);
+
+        }
+
+
+        @Override
+        public void putAll(Map<? extends String,?> m) {
+
+            for (Map.Entry<? extends String,?> entry : m.entrySet()) {
+                String k = entry.getKey();
+                Object v = entry.getValue();
+                this.put(k, v);
+            }
+
+        }
+
+
+    } // END ViewMap
+
+
+}
diff --git a/javax/faces/component/UniqueIdVendor.java b/javax/faces/component/UniqueIdVendor.java
new file mode 100644
index 0000000..a940c08
--- /dev/null
+++ b/javax/faces/component/UniqueIdVendor.java
@@ -0,0 +1,70 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><strong>UniqueIdVendor</strong> is an
+ * interface implemented by <code>UIComponents</code> that also
+ * implement {@link NamingContainer} so that they can provide unique ids
+ * based on their own clientId.  This will reduce the amount of id
+ * generation variance between different renderings of the same view and
+ * is helpful for improved state saving.</p>
+ *
+ * @since 2.0
+ */
+public interface UniqueIdVendor {
+
+
+    /**<p>Generate an identifier for a component. The identifier
+     * will be prefixed with UNIQUE_ID_PREFIX, and will be unique
+     * within this component-container. Optionally, a unique seed value can
+     * be supplied by component creators which should be
+     * included in the generated unique id.</p>
+     *
+     * @param context FacesContext
+     * @param seed an optional seed value - e.g. based on the position of the component in the VDL-template
+     * @return a unique-id in this component-container
+     */
+    public String createUniqueId(FacesContext context, String seed);
+
+}
diff --git a/javax/faces/component/UpdateModelException.java b/javax/faces/component/UpdateModelException.java
new file mode 100644
index 0000000..ea62678
--- /dev/null
+++ b/javax/faces/component/UpdateModelException.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
+
+/**
+ * <p class="changed_added_2_0">This exception indicates a failure to 
+ * update the model and is created to wrap any exception
+ * that occurs during {@link UIInput#updateModel}. The exception is then passed 
+ * to {@link javax.faces.context.ExceptionHandler#processEvent}, where
+ * the <code>ExceptionHandler</code> has an opportunity to handle it.</p>
+ *
+ * @since 2.0
+ */
+public class UpdateModelException extends FacesException {
+
+    private static final long serialVersionUID = 6081145672680351218L;
+
+    private FacesMessage facesMessage;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Store the argument
+     * <code>facesMessage</code> so it may be returned from {@link
+     * #getFacesMessage} and pass the argument <code>cause</code> to the
+     * super constructor.</p>
+     * @param facesMessage the message for the exception
+     * @param cause the cause of this exception
+     *
+     * @since 2.0
+     */
+    public UpdateModelException(FacesMessage facesMessage,  
+                                Throwable cause) {
+
+        super(cause);
+        this.facesMessage = facesMessage;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+    /**
+     * <p class="changed_added_2_0">Return the <code>FacesMessage</code>
+     * passed to the constructor.</p>
+     *
+     * @since 2.0
+     */
+
+    public FacesMessage getFacesMessage() {
+
+        return this.facesMessage;
+
+    }
+
+}
diff --git a/javax/faces/component/ValueBindingValueExpressionAdapter.java b/javax/faces/component/ValueBindingValueExpressionAdapter.java
new file mode 100644
index 0000000..9b4a722
--- /dev/null
+++ b/javax/faces/component/ValueBindingValueExpressionAdapter.java
@@ -0,0 +1,291 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import java.io.Serializable;
+
+import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.PropertyNotFoundException;
+import javax.faces.el.ValueBinding;
+
+import javax.el.ValueExpression;
+import javax.el.ELException;
+
+/**
+ * <p>Wrap a ValueExpression instance and expose it as a ValueBinding</p>
+ *
+ * @author Jacob Hookom
+ */
+ class ValueBindingValueExpressionAdapter extends ValueBinding implements StateHolder, 
+    Serializable {
+
+    private static final long serialVersionUID = -8015491904782686906L;
+
+    private ValueExpression valueExpression= null;
+    private boolean tranzient;
+
+    public ValueBindingValueExpressionAdapter() {} // for StateHolder
+    
+     ValueBindingValueExpressionAdapter(ValueExpression valueExpression) {
+        this.valueExpression = valueExpression;    
+    }
+    
+   
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#getExpressionString()
+     */
+    public String getExpressionString() {
+	assert(null != valueExpression);
+        return valueExpression.getExpressionString();
+    }
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#getType(javax.faces.context.FacesContext)
+     */
+    public Class getType(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+            
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        Class result = null;
+        try {
+            result = valueExpression.getType(context.getELContext());
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        } 
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#getValue(javax.faces.context.FacesContext)
+     */
+    public Object getValue(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        Object result = null;
+        try {
+            result = valueExpression.getValue(context.getELContext());
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#isReadOnly(javax.faces.context.FacesContext)
+     */
+    public boolean isReadOnly(FacesContext context) throws EvaluationException,
+            PropertyNotFoundException {
+            
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        boolean result = false;
+        try {
+            result = valueExpression.isReadOnly(context.getELContext());
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+        return result;
+    }
+    
+    
+
+    /* (non-Javadoc)
+     * @see javax.faces.el.ValueBinding#setValue(javax.faces.context.FacesContext, java.lang.Object)
+     */
+    public void setValue(FacesContext context, Object value)
+            throws EvaluationException, PropertyNotFoundException {
+            
+        if (context == null) {
+	        throw new NullPointerException("FacesContext -> null");
+        }
+        try {
+            valueExpression.setValue(context.getELContext(), value);
+        } catch (javax.el.PropertyNotFoundException pnfe) {
+            throw new PropertyNotFoundException(pnfe);
+        } catch (javax.el.PropertyNotWritableException pnwe) {
+            throw new PropertyNotFoundException(pnwe);
+        } catch (ELException elex) {
+            throw new EvaluationException(elex);
+        }
+    }
+    
+    public boolean isTransient() {
+        return this.tranzient;
+    }
+    
+    public void setTransient(boolean tranzient) {
+        this.tranzient = tranzient;
+    }
+    
+    public Object saveState(FacesContext context){
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (valueExpression instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped valueExpression
+		stateStruct[0] = ((StateHolder)valueExpression).saveState(context);
+		// save the class name of the valueExpression impl
+		stateStruct[1] = valueExpression.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = valueExpression;
+	    }
+	}
+
+	return result;
+	
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof ValueExpression)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    ValueExpression result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (ValueExpression) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		valueExpression = result;
+	    }
+	}
+	else {
+	    valueExpression = (ValueExpression) state;
+	}
+    }
+    
+    public boolean equals(Object other) {
+    
+        if (other == this) {
+            return true;
+        }
+        
+        if (other instanceof ValueBindingValueExpressionAdapter) {
+            ValueExpression expr = 
+                ((ValueBindingValueExpressionAdapter) other).getWrapped();
+            return (valueExpression.equals(expr));
+        } else if (other instanceof ValueBinding) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ValueBinding otherVB = (ValueBinding) other;
+            Class type = otherVB.getType(context);
+            if (type != null) {
+                return type.equals(valueExpression.getType(context.getELContext()));               
+            }            
+        }
+        return false;
+        
+    }
+
+    public int hashCode() {    
+        assert(null != valueExpression);
+        return valueExpression.hashCode();
+    }
+    
+    public ValueExpression getWrapped() {
+        return valueExpression;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, true, loader);
+    }
+ 
+
+
+}
diff --git a/javax/faces/component/ValueExpressionValueBindingAdapter.java b/javax/faces/component/ValueExpressionValueBindingAdapter.java
new file mode 100644
index 0000000..359b4fa
--- /dev/null
+++ b/javax/faces/component/ValueExpressionValueBindingAdapter.java
@@ -0,0 +1,320 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+import javax.el.ValueExpression;
+import javax.el.ELException;
+import javax.el.ELContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+
+import java.io.Serializable;
+
+/**
+ * <p>Wrap a ValueBinding instance and expose it as a
+ * ValueExpression.</p>
+ */
+
+ class ValueExpressionValueBindingAdapter extends ValueExpression implements Serializable, StateHolder {
+
+    private static final long serialVersionUID = 2388977392466671243L;
+
+    public ValueExpressionValueBindingAdapter() {}
+
+    private ValueBinding binding = null;
+
+     ValueExpressionValueBindingAdapter(ValueBinding binding) {
+	assert(null != binding);
+	this.binding = binding;
+    }
+
+    //
+    // Methods from ValueExpression
+    //
+
+    public Object getValue(ELContext context) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	Object result = null;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    result = binding.getValue(facesContext);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+	return result;
+    }
+
+    public void setValue(ELContext context, Object value) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    binding.setValue(facesContext, value);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+    }
+
+
+    public boolean isReadOnly(ELContext context) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	boolean result = false;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    result = binding.isReadOnly(facesContext);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+	return result;
+    }
+
+    public Class<?> getType(ELContext context) throws ELException {
+	assert(null != binding);
+	if (context == null) {
+	    throw new NullPointerException("ELContext -> null");
+    }
+	Class result = null;
+	FacesContext facesContext = (FacesContext) 
+	    context.getContext(FacesContext.class);
+	assert(null != facesContext);
+	try {
+	    result = binding.getType(facesContext);
+	}
+	catch (Throwable e) {
+	    throw new ELException(e);
+	}
+	return result;
+    }
+
+    /**
+     * <p>Always return <code>false</code> since we can't possibly know
+     * if this is a literal text binding or not.</p>
+     */
+
+    public boolean isLiteralText() {
+	return false;
+    }
+    
+    public Class<?> getExpectedType() {
+	assert(null != binding);
+	Class result = null;
+	FacesContext context = FacesContext.getCurrentInstance();
+	try {
+	    Object value = binding.getValue(context);
+	    result = value.getClass();
+	}
+	catch (Throwable e) {
+	    result = null;
+	}
+	return result;
+    }
+
+    public String getExpressionString() {
+	assert(null != binding);
+	return binding.getExpressionString();
+	
+    }
+
+    public boolean equals(Object other) {
+    
+        if (other == this) {
+            return true;
+        }
+        
+        if (other instanceof ValueExpressionValueBindingAdapter) {
+            ValueBinding vb = 
+                ((ValueExpressionValueBindingAdapter) other).getWrapped();
+            return (binding.equals(vb));
+        } else if (other instanceof ValueExpression) {
+            FacesContext context = FacesContext.getCurrentInstance();
+            ValueExpression otherVE = (ValueExpression) other;
+            Class type = binding.getType(context);
+            if (type != null) {
+                return type.equals(otherVE.getType(context.getELContext()));
+            }            
+        }
+        return false;
+        
+    }
+
+    public int hashCode() {
+	assert(null != binding);
+
+	return binding.hashCode();
+    }
+    
+    public String getDelimiterSyntax() {
+        // PENDING (visvan) Implementation
+        return "";
+    }
+    
+    // 
+    // Methods from StateHolder
+    //
+
+    
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	Object result = null;
+	if (!tranzient) {
+	    if (binding instanceof StateHolder) {
+		Object [] stateStruct = new Object[2];
+		
+		// save the actual state of our wrapped binding
+		stateStruct[0] = ((StateHolder)binding).saveState(context);
+		// save the class name of the binding impl
+		stateStruct[1] = binding.getClass().getName();
+
+		result = stateStruct;
+	    }
+	    else {
+		result = binding;
+	    }
+	}
+
+	return result;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+	// if we have state
+	if (null == state) {
+	    return;
+	}
+	
+	if (!(state instanceof ValueBinding)) {
+	    Object [] stateStruct = (Object []) state;
+	    Object savedState = stateStruct[0];
+	    String className = stateStruct[1].toString();
+	    ValueBinding result = null;
+	    
+	    Class toRestoreClass = null;
+	    if (null != className) {
+		try {
+		    toRestoreClass = loadClass(className, this);
+		}
+		catch (ClassNotFoundException e) {
+		    throw new IllegalStateException(e.getMessage());
+		}
+		
+		if (null != toRestoreClass) {
+		    try {
+			result = 
+			    (ValueBinding) toRestoreClass.newInstance();
+		    }
+		    catch (InstantiationException e) {
+			throw new IllegalStateException(e.getMessage());
+		    }
+		    catch (IllegalAccessException a) {
+			throw new IllegalStateException(a.getMessage());
+		    }
+		}
+		
+		if (null != result && null != savedState) {
+		    // don't need to check transient, since that was
+		    // done on the saving side.
+		    ((StateHolder)result).restoreState(context, savedState);
+		}
+		binding = result;
+	    }
+	}
+	else {
+	    binding = (ValueBinding) state;
+	}
+    }
+
+    private boolean tranzient = false;
+
+    public boolean isTransient() {
+	return tranzient;
+    }
+
+    public void setTransient(boolean newTransientValue) {
+	tranzient = newTransientValue;
+    }
+
+    //
+    // Helper methods for StateHolder
+    //
+
+    private static Class loadClass(String name, 
+            Object fallbackClass) throws ClassNotFoundException {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClass().getClassLoader();
+        }
+        return Class.forName(name, true, loader);
+    }
+ 
+
+    // 
+    // methods used by classes aware of this class's wrapper nature
+    //
+
+    public ValueBinding getWrapped() {
+	return binding;
+    }
+
+}
diff --git a/javax/faces/component/ValueHolder.java b/javax/faces/component/ValueHolder.java
new file mode 100644
index 0000000..7e3c4da
--- /dev/null
+++ b/javax/faces/component/ValueHolder.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component;
+
+
+import javax.faces.convert.Converter;
+import javax.el.ValueExpression;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">ValueHolder</strong> is an
+ * interface that may be implemented by any concrete {@link UIComponent}
+ * that wishes to support a local value, as well as access data in the
+ * model tier via a <em>value expression</em>, and support conversion
+ * between String and the model tier data's native data type.
+ */
+
+public interface ValueHolder {
+
+
+    // -------------------------------------------------------------- Properties
+
+    /**
+     * <p>Return the local value of this {@link UIComponent} (if any),
+     * without evaluating any associated {@link ValueExpression}.</p>
+     */
+    public Object getLocalValue();
+
+
+    /**
+     * <p>Gets the value of this {@link UIComponent}.  If validation
+     * failed, as indicated by 
+     * {@link javax.faces.context.FacesContext#isValidationFailed}
+     * returning <code>true</code>, always return the local value.
+     * Otherwise, first, consult the local value property of this
+     * component.  If non-<code>null</code> return it.  If
+     * <code>null</code>, see if we have a {@link ValueExpression} for
+     * the <code>value</code> property.  If so, return the result of
+     * evaluating the property, otherwise return <code>null</code>.
+     * Note that because the specification for {@link
+     * UIComponent#setValueBinding} requires a call through to {@link
+     * UIComponent#setValueExpression}, legacy tags will continue to
+     * work.</p>
+     */
+    public Object getValue();
+
+
+    /**
+      * <p>Set the value of this {@link UIComponent} (if any).</p>
+      *
+      * @param value The new local value
+      */
+    public void setValue(Object value);
+
+
+    /**
+     * <p>Return the {@link Converter} (if any)
+     * that is registered for this {@link UIComponent}.</p>
+     */
+    public Converter getConverter();
+
+
+    /**
+     * <p>Set the {@link Converter} (if any) that is registered for this
+     * {@link UIComponent}.</p>
+     *
+     * @param converter New {@link Converter} (or <code>null</code>)
+     */
+    public void setConverter(Converter converter);
+}
diff --git a/javax/faces/component/behavior/AjaxBehavior.java b/javax/faces/component/behavior/AjaxBehavior.java
new file mode 100644
index 0000000..e234d97
--- /dev/null
+++ b/javax/faces/component/behavior/AjaxBehavior.java
@@ -0,0 +1,829 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AjaxBehaviorListener;
+
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_0_rev_a changed_modified_2_2">An</span> instance of this class
+ * is added as a {@link ClientBehavior} to a component using the {@link
+ * javax.faces.component.behavior.ClientBehaviorHolder#addClientBehavior}
+ * contract that components implement.  The presence of this {@link
+ * ClientBehavior} will cause the rendering of JavaScript that produces
+ * an <code>Ajax</code> request using the specification public
+ * JavaScript API when the component is rendered.</p>
+
+ * <p class="changed_modified_2_0_rev_a">If the component is an instance
+ * of {@link javax.faces.component.EditableValueHolder}, Where at all
+ * possible, the component must have the UI register the ajax event when
+ * the initial value is changed, not when focus is lost on the
+ * component.</p>
+
+ * <!-- https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1219 -->
+ *
+ * @since 2.0
+ */
+
+public class AjaxBehavior extends ClientBehaviorBase {
+
+    /**
+     * <p class="changed_added_2_0">The standard id for this behavior.</p>
+     */
+    public static final String BEHAVIOR_ID = "javax.faces.behavior.Ajax";
+
+    private static final Set<ClientBehaviorHint> HINTS = 
+        Collections.unmodifiableSet(EnumSet.of(ClientBehaviorHint.SUBMITTING));
+
+    private String onerror;
+    private String onevent;
+    private String delay;
+    private List<String> execute;
+    private List<String> render;
+    private Boolean disabled;
+    private Boolean immediate;
+    private Boolean resetValues;
+
+    private Map<String, ValueExpression> bindings;
+    
+    public AjaxBehavior() {
+        
+    }
+
+    // ---------------------------------------------------------- Public Methods
+    @Override
+    public String getRendererType() {
+        // We use the same sring for both the behavior id and the renderer 
+        // type.
+        return  BEHAVIOR_ID;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">
+     * This method returns an unmodifiable <code>Set</code> containing
+     * the {@link ClientBehaviorHint} <code>SUBMITTING</code>.</p> 
+     *
+     * @return unmodifiable set containing the hint {@link ClientBehaviorHint}
+     * <code>SUBMITTING</code>.
+     *
+     * @since 2.0
+     */
+    public Set<ClientBehaviorHint> getHints() {
+        return HINTS;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>String</code> of
+     * JavaScript function name that will be used to identify
+     * the client callback function that should be run in the event of
+     * an error.
+     *
+     * @since 2.0
+     */
+    public String getOnerror() {
+
+        return (String) eval(ONERROR, onerror);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Sets the JavaScript function name 
+     * that will be used to identify the client callback function that 
+     * should be run in the event of an error.
+     *
+     * @param onerror the error handling function name
+     *
+     * @since 2.0
+     */
+    public void setOnerror(String onerror) {
+
+        this.onerror = onerror;
+
+        clearInitialState();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>String</code> of
+     * JavaScript function name that will be used to identify the
+     * client callback function that should be run on the occurance
+     * of a client-side event.
+     *
+     * @since 2.0
+     */
+    public String getOnevent() {
+
+        return (String) eval(ONEVENT, onevent);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Sets the JavaScript function name 
+     * that will be used to identify the client callback function that 
+     * should be run in response to event activity.
+     *
+     * @param onevent the event handling function name
+     *
+     * @since 2.0
+     */
+    public void setOnevent(String onevent) {
+
+        this.onevent = onevent;
+
+        clearInitialState();
+   }
+
+    /**
+     * <p class="changed_added_2_0">Return a non-empty
+     * <code>Collection<String></code> of component
+     * identifiers that will be used to identify components that should be
+     * processed during the <code>execute</code> phase of the request
+     * processing lifecycle.</p>
+     * <p>Note that the returned collection may be unmodifiable.  Modifications
+     * should be performed by calling {@link #setExecute}.</p>
+     *
+     * @since 2.0
+     */
+    public Collection<String> getExecute() {
+
+        return getCollectionValue(EXECUTE, execute);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Sets the component identifiers that 
+     * will be used to identify components that should be
+     * processed during the <code>execute</code> phase of the request
+     * processing lifecycle.</p>
+     *
+     * @param execute the ids of components to execute
+     *
+     * @since 2.0
+     */
+    public void setExecute(Collection<String> execute) {
+
+        this.execute = copyToList(execute);
+
+        clearInitialState();
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Returns the delay value, or <code>null</code>
+     * if no value was set.</p>
+     *
+     * @since 2.2
+     */
+    public String getDelay() {
+        return (String) eval(DELAY, delay);
+    }
+
+    /**
+     * <p class="changed_added_2_2">If less than
+     * <em>delay</em> milliseconds elapses between calls to
+     * <em>request()</em> only the most recent one is sent and all other
+     * requests are discarded. The default value of this option is
+     * 300.</code> If the value of <em>delay</em> is the literal string
+     * <code>'none'</code> without the quotes, no delay is used.</p>
+     *
+     * @param delay the ajax delay value
+     *
+     * @since 2.2
+     */
+    public void setDelay(String delay) {
+        this.delay = delay;
+        
+        clearInitialState();
+    }
+    
+
+    /**
+     * <p class="changed_added_2_0">Return a non-empty
+     * <code>Collection<String></code> of component
+     * identifiers that will be used to identify components that should be
+     * processed during the <code>render</code> phase of the request
+     * processing lifecycle.</p>
+     * <p>Note that the returned collection may be unmodifiable.  Modifications
+     * should be performed by calling {@link #setRender}.</p>
+     *
+     * @since 2.0
+     */
+    public Collection<String> getRender() {
+
+        return getCollectionValue(RENDER, render);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Sets the component identifiers that 
+     * will be used to identify components that should be
+     * processed during the <code>render</code> phase of the request
+     * processing lifecycle.</p>
+     *
+     * @param render the ids of components to render
+     *
+     * @since 2.0
+     */
+    public void setRender(Collection<String> render) {
+
+        this.render = copyToList(render);
+
+        clearInitialState();
+    }
+    
+    /**
+     * <p class="changed_added_2_2">
+     * Return the resetValues status of this behavior.</p>
+     * 
+     * @since 2.2
+     */
+
+    public boolean isResetValues() {
+        Boolean result = (Boolean) eval(RESET_VALUES, resetValues);
+        return ((result != null) ? result : false);
+    }
+
+    /**
+     * <p class="changed_added_2_2">
+     * Set the resetValues status of this behavior.</p>
+     * 
+     * @since 2.2
+     */
+
+    public void setResetValues(boolean resetValues) {
+        this.resetValues = resetValues;
+        
+        clearInitialState();
+    }
+    
+    
+
+    /**
+     * <p class="changed_added_2_0">Return the disabled status of this behavior.</p>
+     *
+     * @since 2.0
+     */
+    public boolean isDisabled() {
+
+        Boolean result = (Boolean) eval(DISABLED, disabled);
+        return ((result != null) ? result : false);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Sets the disabled status of this 
+     * behavior.</p>
+     *
+     * @since 2.0
+     */
+    public void setDisabled(boolean disabled) {
+
+        this.disabled = disabled;
+
+        clearInitialState();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the immediate status of this 
+     * behavior.</p>
+     *
+     * @since 2.0
+     */
+    public boolean isImmediate() {
+        Boolean result = (Boolean) eval(IMMEDIATE, immediate);
+        return ((result != null) ? result : false);
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Sets the immediate status of this 
+     * behavior.</p>
+     *
+     * @since 2.0
+     */
+    public void setImmediate(boolean immediate) {
+
+        this.immediate = immediate;
+
+        clearInitialState();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Tests whether the immediate attribute
+     * is specified.  Returns true if the immediate attribute is specified,
+     * either as a locally set property or as a value expression.  This
+     * information allows an associated client behavior renderer to fall back
+     * on the parent component's immediate status when immediate is not 
+     * explicitly specified on the <code>AjaxBehavior</code>.
+     * </p>
+     *
+     * @since 2.0
+     */
+    public boolean isImmediateSet() {
+        return ((immediate != null) || (getValueExpression(IMMEDIATE) != null));
+    }
+
+    /**
+     * <p class="changed_added_2_2">Tests whether the resetValues attribute
+     * is specified.  Returns true if the resetValues attribute is specified,
+     * either as a locally set property or as a value expression. 
+     * </p>
+     *
+     * @since 2.2
+     */
+    public boolean isResetValuesSet() {
+        return ((resetValues != null) || (getValueExpression(RESET_VALUES) != null));
+    }
+
+    /**
+     * <p class="changed_added_2_0">Returns the {@link ValueExpression}
+     * used to calculate the value for the specified property name, if any.
+     * </p>
+     *
+     * @param name Name of the property for which to retrieve a
+     *  {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     */
+    public ValueExpression getValueExpression(String name) {
+
+        if (name == null) {
+            throw new NullPointerException();
+        }
+
+        return ((bindings == null) ? null : bindings.get(name));
+    }
+
+    /**
+     * <p class="changed_added_2_0">Sets the {@link ValueExpression} 
+     * used to calculate the value for the specified property name.</p>
+     * </p>
+     *
+     * @param name Name of the property for which to set a
+     *  {@link ValueExpression}
+     * @param binding The {@link ValueExpression} to set, or <code>null</code>
+     *  to remove any currently set {@link ValueExpression}
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     */
+    public void setValueExpression(String name, ValueExpression binding) {
+
+        if (name == null) {
+            throw new NullPointerException();
+        }
+
+        if (binding != null) {
+
+            if (binding.isLiteralText()) {
+                setLiteralValue(name, binding);
+            } else {
+                if (bindings == null) {
+
+                    // We use a very small initial capacity on this HashMap.
+                    // The goal is not to reduce collisions, but to keep the
+                    // memory footprint small.  It is very unlikely that an
+                    // an AjaxBehavior would have more than 1 or 2 bound 
+                    // properties - and even if more are present, it's okay
+                    // if we have some collisions - will still be fast.
+                    bindings = new HashMap<String, ValueExpression>(6,1.0f);
+                }
+
+                bindings.put(name, binding);
+            }
+        } else {
+            if (bindings != null) {
+                bindings.remove(name);
+                if (bindings.isEmpty()) {
+                    bindings = null;
+                }
+            }
+        }
+
+        clearInitialState();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Add the specified {@link AjaxBehaviorListener}
+     * to the set of listeners registered to receive event notifications
+     * from this {@link AjaxBehavior}.</p>
+     *
+     * @param listener The {@link AjaxBehaviorListener} to be registered
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public void addAjaxBehaviorListener(AjaxBehaviorListener listener) {
+        addBehaviorListener(listener);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Remove the specified {@link AjaxBehaviorListener}
+     * from the set of listeners registered to receive event notifications
+     * from this {@link AjaxBehavior}.</p>
+     *
+     * @param listener The {@link AjaxBehaviorListener} to be removed
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public void removeAjaxBehaviorListener(AjaxBehaviorListener listener) {
+        removeBehaviorListener(listener);
+    }
+
+    @Override
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        Object[] values;
+
+        Object superState = super.saveState(context);
+
+        if (initialStateMarked()) {
+            if (superState == null) {
+                values = null;
+            } else {
+                values = new Object[] { superState };
+            }
+        } else {
+            values = new Object[10];
+      
+            values[0] = superState;
+            values[1] = onerror;
+            values[2] = onevent;
+            values[3] = disabled;
+            values[4] = immediate;
+            values[5] = resetValues;
+            values[6] = delay;
+            values[7] = saveList(execute);
+            values[8] = saveList(render);
+            values[9] = saveBindings(context, bindings);
+        }
+
+        return values;
+    }
+
+    @Override
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+
+            Object[] values = (Object[]) state;
+            super.restoreState(context, values[0]);
+
+            if (values.length != 1) {
+                onerror = (String)values[1];
+                onevent = (String)values[2];
+                disabled = (Boolean)values[3];
+                immediate = (Boolean)values[4];
+                resetValues = (Boolean)values[5];
+                delay = (String)values[6];
+                execute = restoreList(EXECUTE, values[7]);
+                render = restoreList(RENDER, values[8]);
+                bindings = restoreBindings(context, values[9]);
+
+                // If we saved state last time, save state again next time.
+                clearInitialState();
+            }
+        }
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+    // Utility for saving bindings state
+    private static Object saveBindings(FacesContext context,
+                                       Map<String, ValueExpression> bindings) {
+
+        // Note: This code is copied from UIComponentBase.  In a future
+        // version of the JSF spec, it would be useful to define a
+        // attribute/property/bindings/state helper object that can be
+        // shared across components/behaviors/validaters/converters.
+        
+        if (bindings == null) {
+            return (null);
+        }
+
+        Object values[] = new Object[2];
+        values[0] = bindings.keySet().toArray(new String[bindings.size()]);
+
+        Object[] bindingValues = bindings.values().toArray();
+        for (int i = 0; i < bindingValues.length; i++) {
+            bindingValues[i] = UIComponentBase.saveAttachedState(context, bindingValues[i]);
+        }
+
+        values[1] = bindingValues;
+
+        return (values);
+    }
+
+    // Utility for restoring bindings from state
+    private static Map<String, ValueExpression> restoreBindings(FacesContext context,
+                                                                Object state) {
+
+        // Note: This code is copied from UIComponentBase.  See note above
+        // in saveBindings().
+
+        if (state == null) {
+            return (null);
+        }
+        Object values[] = (Object[]) state;
+        String names[] = (String[]) values[0];
+        Object states[] = (Object[]) values[1];
+        Map<String, ValueExpression> bindings = new HashMap<String, ValueExpression>(names.length);
+        for (int i = 0; i < names.length; i++) {
+            bindings.put(names[i],
+                    (ValueExpression) UIComponentBase.restoreAttachedState(context, states[i]));
+        }
+        return (bindings);
+    }
+
+
+    // Save the List<String>, either as a String (single element) or as
+    // a String[] (multiple elements.
+    private static Object saveList(List<String> list) {
+        if ((list == null) || list.isEmpty()) {
+            return null;
+        }
+
+        int size = list.size();
+
+        if (size == 1) {
+            return list.get(0);
+        }
+
+        return list.toArray(new String[size]);
+    }
+
+    // Restore the list from a String (single element) or a String[]
+    // (multiple elements)
+    private static List<String> restoreList(String propertyName, 
+                                            Object state) {
+
+        if (state == null) {
+            return null;
+        }
+
+        List<String> list = null;
+
+        if (state instanceof String) {
+            list = toSingletonList(propertyName, (String)state);
+        } else if (state instanceof String[]) {
+            list = Collections.unmodifiableList(Arrays.asList((String[])state));
+        }
+
+        return list;
+    }
+      
+    private Object eval(String propertyName, Object value) {
+
+        if (value != null) {
+            return value;
+        }
+
+        ValueExpression expression = getValueExpression(propertyName);
+
+        if (expression != null) {
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            return expression.getValue(ctx.getELContext());
+        }
+
+        return null;
+    }
+
+
+    @SuppressWarnings("unchecked")
+    private Collection<String> getCollectionValue(String propertyName,
+                                                  Collection<String> collection) {
+        if (collection!= null) {
+            return collection;
+        }
+
+        Collection<String> result = null;
+        ValueExpression expression = getValueExpression(propertyName);
+
+        if (expression != null) {
+
+            FacesContext ctx = FacesContext.getCurrentInstance();
+            Object value = expression.getValue(ctx.getELContext());
+
+            if (value != null) {
+
+                if (value instanceof Collection) {
+                    // Unchecked cast to Collection<String>
+                    return (Collection<String>)value;
+                }
+
+                result = toList(propertyName, expression, value);
+            }
+        }
+
+        return result == null ? Collections.<String>emptyList() : result;
+    }
+
+    // Sets a property, converting it from a literal
+    private void setLiteralValue(String propertyName,
+                                 ValueExpression expression) {
+
+        assert(expression.isLiteralText());
+
+        Object value;
+        ELContext context = FacesContext.getCurrentInstance().getELContext();
+
+        try {
+            value = expression.getValue(context);
+        } catch (ELException ele) {
+            throw new FacesException(ele);
+        }
+
+        if (ONEVENT.equals(propertyName)) {
+            onevent = (String)value;
+        } else if (DELAY.equals(propertyName)) {
+            delay = (String)value;
+        } else if (ONERROR.equals(propertyName)) {
+            onerror = (String)value;
+        } else if (IMMEDIATE.equals(propertyName)) {
+            immediate = (Boolean)value;
+        } else if (RESET_VALUES.equals(propertyName)) {
+            resetValues = (Boolean)value;
+        } else if (DISABLED.equals(propertyName)) {
+            disabled = (Boolean)value;
+        } else if (EXECUTE.equals(propertyName)) {
+            execute = toList(propertyName, expression, value);
+        } else if (RENDER.equals(propertyName)) {
+            render = toList(propertyName, expression, value);
+        }
+    }
+
+    // Converts the specified object to a List<String>
+    private static List<String> toList(String propertyName,
+                                ValueExpression expression,
+                                Object value) {
+
+        if (value instanceof String) {
+
+            String strValue = (String)value;
+
+            // If the value contains no spaces, we can optimize.
+            // This is worthwhile, since the execute/render lists
+            // will often only contain a single value.
+            if (strValue.indexOf(' ') == -1) {
+                return toSingletonList(propertyName, strValue);
+            }
+
+            // We're stuck splitting up the string.
+            String[] values = SPLIT_PATTERN.split(strValue);
+            if ((values == null) || (values.length == 0)) {
+                return null;
+            }
+
+            // Note that we could create a Set out of the values if
+            // we care about removing duplicates.  However, the
+            // presence of duplicates does not real harm.  They will
+            // be consolidated during the partial view traversal.  So,
+            // just create an list - garbage in, garbage out.
+            return Collections.unmodifiableList(Arrays.asList(values));
+        }
+
+        // RELEASE_PENDING i18n ;
+        throw new FacesException(expression.toString()
+                                 + " : '"
+                                 + propertyName
+                                 + "' attribute value must be either a String or a Collection");
+    }
+
+    // Converts a String with no spaces to a singleton list
+    private static List<String> toSingletonList(String propertyName,
+                                         String value) {
+        if ((null == value) || (value.length() == 0)) {
+            return null;
+        }
+
+        if (value.charAt(0) == '@') {
+            // These are very common, so we use shared copies
+            // of these collections instead of re-creating.
+            List<String> list;
+
+            if (ALL.equals(value)) {
+                list = ALL_LIST;
+            } else if (FORM.equals(value)){
+                list = FORM_LIST;
+            } else if (THIS.equals(value)) {
+                list = THIS_LIST; 
+            } else if (NONE.equals(value)) {
+                list = NONE_LIST;
+            } else {
+                // RELEASE_PENDING i18n ;
+                throw new FacesException(value
+                                     + " : Invalid id keyword specified for '"
+                                     + propertyName
+                                     + "' attribute");
+            }
+            
+            return list;
+        }
+         
+        return Collections.singletonList(value);
+    }
+
+    // Makes a defensive copy of the collection, converting to a List
+    // (to make state saving a bit easier).
+    private List<String> copyToList(Collection<String> collection) {
+ 
+        if ((collection == null) || collection.isEmpty()) {
+            return null;
+        }
+
+       return Collections.unmodifiableList(new ArrayList<String>(collection));
+    }
+
+    // Property name constants
+    private static final String ONEVENT = "onevent";
+    private static final String ONERROR = "onerror";
+    private static final String IMMEDIATE = "immediate";
+    private static final String RESET_VALUES = "resetValues";
+    private static final String DISABLED = "disabled";
+    private static final String EXECUTE = "execute";
+    private static final String RENDER = "render";
+    private static final String DELAY = "delay";
+
+    // Id keyword constants
+    private static String ALL = "@all";
+    private static String FORM = "@form";
+    private static String THIS = "@this";
+    private static String NONE = "@none";
+
+    // Shared execute/render collections
+    private static List<String> ALL_LIST = Collections.singletonList("@all");
+    private static List<String> FORM_LIST = Collections.singletonList("@form");
+    private static List<String> THIS_LIST = Collections.singletonList("@this");
+    private static List<String> NONE_LIST = Collections.singletonList("@none");
+
+    // Pattern used for execute/render string splitting
+    private static Pattern SPLIT_PATTERN = Pattern.compile(" ");
+
+}
diff --git a/javax/faces/component/behavior/Behavior.java b/javax/faces/component/behavior/Behavior.java
new file mode 100644
index 0000000..d3fcf15
--- /dev/null
+++ b/javax/faces/component/behavior/Behavior.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import javax.faces.component.UIComponent;
+import javax.faces.event.BehaviorEvent;
+
+/**
+ * <p class="changed_added_2_0">The <strong>Behavior</strong> interface is 
+ * the root API of the component behavior model.  Behaviors are objects that 
+ * are attached to {@link UIComponent}s in order to enhance components with 
+ * functionality not explicitly defined by the component implementation itself.
+ * The component behavior API is intended to support different types of 
+ * behavior contracts, and possibly different types of interactions between 
+ * behaviors and components.  The first such contract is the 
+ * {@link ClientBehavior}, which defines a mechanism by which script-producing
+ * behaviors attach scripts to components for execution on the client.  In the
+ * future other types of behavior contracts may be added.</p>
+ * 
+ * <p>Like other attached objects (converters, validators) Behavior instances 
+ * are created via the {@link javax.faces.application.Application} object.  See 
+ * {@link javax.faces.application.Application#createBehavior} for more details.</p>
+ *
+ * @since 2.0
+ */
+public interface Behavior {
+
+    /**
+     * <p class="changed_added_2_0">Broadcast the specified 
+     * {@link BehaviorEvent} to all registered
+     * event listeners who have expressed an interest in events of this
+     * type.  Listeners are called in the order in which they were
+     * added.</p>
+     *
+     * @param event The {@link BehaviorEvent} to be broadcast
+     *
+     * @throws javax.faces.event.AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     * @throws IllegalArgumentException if the implementation class
+     *  of this {@link BehaviorEvent} is not supported by this component
+     * @throws NullPointerException if <code>event</code> is
+     * <code>null</code>
+     *
+     * @since 2.0
+     */
+    public void broadcast(BehaviorEvent event);
+
+}
diff --git a/javax/faces/component/behavior/BehaviorBase.java b/javax/faces/component/behavior/BehaviorBase.java
new file mode 100644
index 0000000..3e59d28
--- /dev/null
+++ b/javax/faces/component/behavior/BehaviorBase.java
@@ -0,0 +1,266 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.faces.component.PartialStateHolder;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.BehaviorEvent;
+import javax.faces.event.BehaviorListener;
+
+/**
+ * <p class="changed_added_2_0"><strong>BehaviorBase</strong> is a
+ * convenience base class that provides a default implementation of the 
+ * {@link Behavior} contract.  It also provides behavior listener registration 
+ * and state saving support.</p>
+ * </p>
+ *
+ * @since 2.0
+ */
+public class BehaviorBase implements Behavior, PartialStateHolder {
+	
+ /**
+     * <p>Our {@link javax.faces.event.BehaviorListener}s.  This data
+     * structure is lazily instantiated as necessary.</p>
+     */
+    private List<BehaviorListener> listeners;
+
+    // Flag indicating a desire to not participate in state saving.
+    private boolean transientFlag = false;
+
+    // Flag indicating that initial state has been marked.
+    private boolean initialState = false;
+
+    /**
+     * <p class="changed_added_2_0">Default implementation of 
+     * {@link Behavior#broadcast}.  Delivers the specified 
+     * {@link BehaviorEvent} to all registered {@link BehaviorListener} 
+     * event listeners who have expressed an interest in events of 
+     * this type.  Listeners are called in the order in which they were 
+     * registered (added).</p>
+     *
+     * @param event The {@link BehaviorEvent} to be broadcast
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     * @throws IllegalArgumentException if the implementation class
+     *  of this {@link BehaviorEvent} is not supported by this component
+     * @throws NullPointerException if <code>event</code> is
+     * <code>null</code>
+     *
+     * @since 2.0
+     */
+    public void broadcast(BehaviorEvent event)
+        throws AbortProcessingException {
+
+        if (null == event) {
+            throw new NullPointerException();
+        }
+
+        if (null != listeners) {
+            for (BehaviorListener listener : listeners) {
+                if (event.isAppropriateListener(listener)) {
+                    event.processListener(listener);
+                }
+            }
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0">Implementation of
+     * {@link javax.faces.component.StateHolder#isTransient}.
+     */
+    public boolean isTransient() {
+        return transientFlag;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Implementation of
+     * {@link javax.faces.component.StateHolder#setTransient}.
+     */
+    public void setTransient(boolean transientFlag) {
+        this.transientFlag = transientFlag;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Implementation of
+     * {@link javax.faces.component.StateHolder#saveState}.
+     */
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        
+        // If initial state has been marked, we don't need to
+        // save any state.
+        if (initialStateMarked()) {
+            return null;
+        }
+
+        // At the moment, the only state we need to save is our listeners
+        return UIComponentBase.saveAttachedState(context, listeners);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Implementation of
+     * {@link javax.faces.component.StateHolder#restoreState}.
+     */
+    @SuppressWarnings("unchecked")
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        if (state != null) {
+
+            // Unchecked cast from Object to List<BehaviorListener>
+            listeners = (List<BehaviorListener>)UIComponentBase.restoreAttachedState(context, state);
+
+            // If we saved state last time, save state again next time.
+            clearInitialState();
+        }
+    }
+
+  
+    /**
+     * <p class="changed_added_2_0">Implementation of
+     * {@link javax.faces.component.PartialStateHolder#markInitialState}.
+     */
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Implementation of
+     * {@link javax.faces.component.PartialStateHolder#initialStateMarked}.
+     */
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Clears the initial state flag, causing
+     * the behavior to revert from partial to full state saving.</p>
+     */
+    public void clearInitialState() {
+        initialState = false;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Add the specified {@link BehaviorListener} 
+     * to the set of listeners registered to receive event notifications 
+     * from this {@link Behavior}.
+     * It is expected that {@link Behavior} classes acting as event sources
+     * will have corresponding typesafe APIs for registering listeners of the
+     * required type, and the implementation of those registration methods
+     * will delegate to this method.  For example:</p>
+     * <pre>
+     * public class AjaxBehaviorEvent extends BehaviorEvent { ... }
+     *
+     * public interface AjaxBehaviorListener extends BehaviorListener {
+     *   public void processAjaxBehavior(FooEvent event);
+     * }
+     *
+     * public class AjaxBehavior extends ClientBehaviorBase {
+     *   ...
+     *   public void addAjaxBehaviorListener(AjaxBehaviorListener listener) {
+     *     addBehaviorListener(listener);
+     *   }
+     *   public void removeAjaxBehaviorListener(AjaxBehaviorListener listener) {
+     *     removeBehaviorListener(listener);
+     *   }
+     *   ...
+     * }
+     * </pre>
+     *
+     * @param listener The {@link BehaviorListener} to be registered
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    protected void addBehaviorListener(BehaviorListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+        if (listeners == null) {
+            //noinspection CollectionWithoutInitialCapacity
+            listeners = new ArrayList<BehaviorListener>();
+        }
+        listeners.add(listener);
+
+        clearInitialState();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Remove the specified 
+     * {@link BehaviorListener} from the set of listeners
+     * registered to receive event notifications from this 
+     * {@link Behavior}.
+     *
+     * @param listener The {@link BehaviorListener} to be deregistered
+     * @throws NullPointerException if <code>listener</code>
+     *                              is <code>null</code>
+     *
+     * @since 2.0
+     */
+    protected void removeBehaviorListener(BehaviorListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+        if (listeners == null) {
+            return;
+        }
+        listeners.remove(listener);
+
+        clearInitialState();
+    }
+}
diff --git a/javax/faces/component/behavior/ClientBehavior.java b/javax/faces/component/behavior/ClientBehavior.java
new file mode 100644
index 0000000..ab25700
--- /dev/null
+++ b/javax/faces/component/behavior/ClientBehavior.java
@@ -0,0 +1,136 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import java.util.Set;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><strong>ClientBehavior</strong> is the
+ * base contract for {@link Behavior}s that attach script content to
+ * client-side events exposed by {@link ClientBehaviorHolder}
+ * components.  Instances of <code>ClientBehavior</code> may be attached
+ * to components that implement the {@link ClientBehaviorHolder}
+ * contract by calling {@link ClientBehaviorHolder#addClientBehavior}.
+ * Once a <code>ClientBehavior</code> has been attached to a {@link
+ * ClientBehaviorHolder} component, the component calls {@link
+ * #getScript} to obtain the behavior's script and the component wires
+ * this up to the appropriate client-side event handler.  Note that the
+ * script content returned by this method is always in-line script
+ * content.  If the implementing class wants to invoke functions defined
+ * in other script resources, the implementing class must use the
+ * {@link javax.faces.application.ResourceDependency} or {@link
+ * javax.faces.application.ResourceDependencies} annotation. </p>
+ *
+ * @since 2.0
+ */
+public interface ClientBehavior extends Behavior {
+	
+
+    /**
+     * <p class="changed_added_2_0">Return the script that implements this
+     * ClientBehavior's client-side logic.</p>
+     *
+     * <div  class="changed_added_2_0">
+     *
+     * <p>ClientBehavior.getScript() implementations are allowed to return
+     * null to indicate that no script is required for this particular
+     * getScript() call.  For example, a ClientBehavior implementation may
+     * return null if the Behavior is disabled.
+     * </p>
+     *
+     * </div>
+     *
+     * @param behaviorContext the {@link ClientBehaviorContext} that provides
+     * properties that might influence this getScript() call.  Note that
+     * ClientBehaviorContext instances are short-lived objects that are only
+     * valid for the duration of the call to getScript().  ClientBehavior
+     * implementations must not hold onto references to ClientBehaviorContexts.
+     *
+     * @return script that provides the client-side behavior, or null
+     * if no script is required.
+     * @throws NullPointerException if <code>behaviorContext</code> is 
+     * <code>null</code>
+     *
+     * @since 2.0
+     */      
+    public String getScript(ClientBehaviorContext behaviorContext);
+
+    /**
+     * <p class="changed_added_2_0">Decode any new state of this 
+     * {@link ClientBehavior} from the
+     * request contained in the specified {@link FacesContext}.</p>
+     *
+     * <div  class="changed_added_2_0">
+     *
+     * <p>During decoding, events may be enqueued for later processing
+     * (by event listeners who have registered an interest),  by calling
+     * <code>queueEvent()</code>. Default implementation delegates decoding 
+     * to {@link javax.faces.render.ClientBehaviorRenderer#decode(FacesContext, UIComponent, ClientBehavior)}</p>
+     *
+     * </div>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     * @param component {@link UIComponent} the component associated with this {@link Behavior} 
+     *
+     * @throws NullPointerException if <code>context</code> or 
+     * <code>component<code> is <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void decode(FacesContext context, UIComponent component);
+
+    /**
+     * <p class="changed_added_2_0">Returns hints that describe the
+     * behavior of the ClientBehavior implementation.  The hints may
+     * impact how Renderers behave in the presence of Behaviors.  For
+     * example, when a Behavior that specifies
+     * <code>ClientBehaviorHint.SUBMITTING</code> is present, the
+     * Renderer may choose to alternate the scripts that it generates
+     * itself.</p>
+     *   
+     * @return a non-null, unmodifiable collection of ClientBehaviorHints.
+     *
+     * @since 2.0
+     */
+    public Set<ClientBehaviorHint> getHints();
+}
diff --git a/javax/faces/component/behavior/ClientBehaviorBase.java b/javax/faces/component/behavior/ClientBehaviorBase.java
new file mode 100644
index 0000000..bcede19
--- /dev/null
+++ b/javax/faces/component/behavior/ClientBehaviorBase.java
@@ -0,0 +1,203 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import java.util.Collections;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.RenderKit;
+
+/**
+ * <p class="changed_added_2_0"><strong>ClientBehaviorBase</strong> is a
+ * convenience base class that implements the default concrete behavior
+ * of all methods defined by {@link ClientBehavior}.</p>
+ *
+ * <div  class="changed_added_2_0">
+ *
+ * <p>Subclasses should either override getRendererType() to identify
+ * the {@link ClientBehaviorRenderer} to delegate to, or they should override 
+ * <code>getScript()</code> to locally generate the desired Behavior 
+ * script, and <code>decode()</code>.
+ * </p>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public class ClientBehaviorBase extends BehaviorBase implements ClientBehavior {
+	
+
+    private static final Logger logger = Logger.getLogger("javax.faces.component.behavior",
+    "javax.faces.LogStrings");
+
+    /**
+     * <p class="changed_added_2_0">Default implementation of of {@link
+     * ClientBehavior#getScript}.  If a {@link ClientBehaviorRenderer}
+     * is available for the specified behavior renderer type, this
+     * method delegates to the {@link ClientBehaviorRenderer#getScript}
+     * method.  Otherwise, this method returns null.  </p>
+     *
+     * @param behaviorContext the {@link ClientBehaviorContext}
+     *
+     * @return the script provided by the associated
+     * ClientBehaviorRenderer, or null if no ClientBehaviorRenderer is
+     * available.
+     *
+     * @throws NullPointerException if <code>behaviorContext</code> is 
+     * <code>null</code>
+     *
+     * @since 2.0
+     */
+    public String getScript(ClientBehaviorContext behaviorContext) {
+
+        if (null == behaviorContext) {
+            throw new NullPointerException();
+        }
+
+    	ClientBehaviorRenderer renderer = getRenderer(behaviorContext.getFacesContext());
+        String script = null;
+    	if (null != renderer){
+            script = renderer.getScript(behaviorContext, this);
+    	}
+        return script;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Default implementation of of {@link
+     * ClientBehavior#decode}.  If a {@link ClientBehaviorRenderer} is
+     * available for the specified behavior renderer type, this method
+     * delegates to the ClientBehaviorRenderer's decode() method.
+     * Otherwise, no decoding is performed.  </p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     * @param component {@link UIComponent} the component associated with this {@link ClientBehavior} 
+     *
+     * @throws NullPointerException if <code>context</code> or 
+     * <code>component<code> is <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void decode(FacesContext context,
+                       UIComponent component) {
+    
+        if (null == context || null == component) {
+            throw new NullPointerException();
+        }
+
+    	ClientBehaviorRenderer renderer = getRenderer(context);
+    	if (null != renderer){
+            renderer.decode(context, component, this);
+    	}
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Returns the renderer type of the
+     * {@link ClientBehaviorRenderer} to use for the behavior.   The default 
+     * implementation returns null.  Subclasses should either override this 
+     * method to return a string that identifies the type of 
+     * {@link ClientBehaviorRenderer} to use, or should override 
+     * {@link #getScript} and perform script rendering locally in the 
+     * {@link ClientBehavior} implementation.
+     * </p>
+     * @return the default renderer type, which is null.
+     *
+     * @since 2.0
+     */
+    public String getRendererType() {
+        return null;
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Default implementation of 
+     * {@link ClientBehavior#getHints()}.  
+     * By default, no hints are specified, and this method returns an empty,
+     * umodifiable set.</p>
+     *   
+     * @return an empty, unmodifiable set of {@link ClientBehaviorHint}s.
+     *
+     * @since 2.0
+     */
+    public Set<ClientBehaviorHint> getHints() {
+        return Collections.emptySet();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Convenience method to return the
+     * {@link ClientBehaviorRenderer} instance associated with this
+     * {@link ClientBehavior}, if any; otherwise, return
+     * <code>null</code>.  </p>
+
+     * @param context {@link FacesContext} for the request we are processing
+     * @return {@link ClientBehaviorRenderer} instance from the current {@link RenderKit} or null.
+     *
+     * @throws NullPointerException if <code>context</code> is null. 
+     *
+     * @since 2.0
+     */
+    protected ClientBehaviorRenderer getRenderer(FacesContext context) {
+    	if (null == context){
+            throw new NullPointerException();
+    	}
+    	ClientBehaviorRenderer renderer = null;
+        String rendererType = getRendererType();
+        if (null != rendererType){
+            RenderKit renderKit = context.getRenderKit();
+            if (null != renderKit){
+                renderer = renderKit.getClientBehaviorRenderer(rendererType);
+            }
+            if (null == renderer){
+                if (logger.isLoggable(Level.FINE)){
+                    logger.fine("Can't get  behavior renderer for type " + rendererType);
+                }				
+            }
+        } else {
+            if(logger.isLoggable(Level.FINE)){
+                logger.fine("No renderer-type for behavior " + this.getClass().getName());
+            }
+        }
+        return renderer;
+    }
+}
diff --git a/javax/faces/component/behavior/ClientBehaviorContext.java b/javax/faces/component/behavior/ClientBehaviorContext.java
new file mode 100644
index 0000000..1d1c762
--- /dev/null
+++ b/javax/faces/component/behavior/ClientBehaviorContext.java
@@ -0,0 +1,258 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><strong>ClientBehaviorContext</strong>
+ * provides context information that may be useful to 
+ * {@link javax.faces.component.behavior.ClientBehavior#getScript}
+ * implementations.
+ * </p>
+ *
+ * @since 2.0
+ */
+public abstract class ClientBehaviorContext {
+	
+    /**
+     * <p class="changed_added_2_0">Creates a ClientBehaviorContext instance.</p>
+     *
+     * @param context the <code>FacesContext</code> for the current request.
+     * @param component the component instance to which the 
+     * <code>ClientBehavior</code> is attached.
+     * @param eventName the name of the behavior event to which the
+     * <code>ClientBehavior</code> is attached.
+     * @param sourceId the id to use as the ClientBehavior's "source".
+     * @param parameters the collection of parameters for submitting
+     * ClientBehaviors to include in the request.
+     * @return a <code>ClientBehaviorContext</code> instance configured with the
+     * provided values.
+     * @throws NullPointerException if <code>context</code>,
+     * <code>component</code> or <code>eventName</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public static ClientBehaviorContext createClientBehaviorContext(FacesContext context,
+                                                        UIComponent component,
+                                                        String eventName,
+                                                        String sourceId,
+                                                        Collection<ClientBehaviorContext.Parameter> parameters) {
+
+        return new ClientBehaviorContextImpl(context, component, eventName, sourceId, parameters);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Returns the {@link FacesContext} for 
+     * the current request.</p>
+     *
+     * @since 2.0
+     */
+    abstract public FacesContext getFacesContext();
+
+    /**
+     * <p class="changed_added_2_0">Returns the {@link UIComponent} that is 
+     * requesting the {@link ClientBehavior} script.</p>
+     *
+     * @since 2.0
+     */
+    abstract public UIComponent getComponent();
+
+    /**
+     * <p class="changed_added_2_0">Returns the name of the behavior event 
+     * for which the ClientBehavior script is being requested. </p>
+     *
+     * @since 2.0
+     */
+    abstract public String getEventName();
+
+    /**
+     * <p class="changed_added_2_0">Returns an id for use as the 
+     * {@link ClientBehavior} source.  ClientBehavior implementations that submit back 
+     * to the Faces lifecycle are required to identify which component 
+     * triggered the ClientBehavior-initiated request via the 
+     * <code>javax.faces.source</code> request parameter.  In 
+     * most cases, th source id can be trivially derived from the element 
+     * to which the behavior's client-side script is attached - ie. the 
+     * source id is typically the id of this element.  However, in components 
+     * which produce more complex content, the behavior script may not be able to
+     * determine the correct id to use for the javax.faces.source
+     * value.  The {@link ClientBehaviorContext#getSourceId} method allows the component 
+     * to pass this information into the {@link ClientBehavior#getScript}
+     * implementation.</p>
+     *
+     * @return the id for the behavior's script to use as the "source", or
+     * null if the Behavior's script can identify the source from the DOM.
+     *
+     * @since 2.0
+     */
+    abstract public String getSourceId();
+
+    /**
+     * <p class="changed_added_2_0">Returns parameters that "submitting" 
+     * {@link ClientBehavior} implementations should include when posting back data 
+     * into the Faces lifecycle.  If no parameters are specified, this method
+     * returns an empty (non-null) collection.</p>
+     *
+     * @since 2.0
+     */
+    abstract public Collection<ClientBehaviorContext.Parameter> getParameters();
+
+    // Little static member class that provides a default implementation
+    private static final class ClientBehaviorContextImpl extends ClientBehaviorContext {
+        private FacesContext context;
+        private UIComponent component;
+        private String eventName;
+        private String sourceId;
+        private Collection<ClientBehaviorContext.Parameter> parameters;
+
+        private ClientBehaviorContextImpl(FacesContext context,
+                                    UIComponent component,
+                                    String eventName,
+                                    String sourceId,
+                                    Collection<ClientBehaviorContext.Parameter> parameters) {
+
+            if (null == context) {
+                throw new NullPointerException();
+            }
+
+            if (null == component) {
+                throw new NullPointerException();
+            }
+
+            if (null == eventName) {
+                throw new NullPointerException();
+            }
+
+            this.context = context;
+            this.component = component;
+            this.eventName = eventName;
+            this.sourceId = sourceId;
+
+            this.parameters =  (parameters == null) ? 
+                                   Collections.<ClientBehaviorContext.Parameter>emptyList() : 
+                                   parameters;
+        }        
+
+        @Override
+        public FacesContext getFacesContext() {
+            return context;
+        }
+
+        @Override
+        public UIComponent getComponent() {
+            return component;
+        }
+
+        @Override
+        public String getEventName() {
+            return eventName;
+        }
+
+        @Override
+        public String getSourceId() {
+            return sourceId;
+        }
+
+        @Override
+        public Collection<ClientBehaviorContext.Parameter> getParameters() {
+            return parameters;
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0"><strong>Parameter</strong> instances
+     * represent name/value pairs that "submitting" ClientBehavior implementations
+     * should include when posting back into the Faces lifecycle.  ClientBehavior
+     * implementations can determine which Parameters to include by calling
+     * ClientBehaviorContext.getParameters().
+     * </p>
+     *
+     * @since 2.0
+     */
+    public static class Parameter {
+
+        private String name;
+        private Object value;
+
+        /**
+         * <p class="changed_added_2_0">Creates a Parameter instance.</p>
+         * @param name the name of the parameter
+         * @param value the value of the parameter
+         * @throws NullPointerException if <code>name</code>
+         * is null.
+         *
+         * @since 2.0
+         */
+        public Parameter(String name, Object value) {
+
+            if (null == name) {
+                throw new NullPointerException();
+            }
+
+            this.name = name;
+            this.value = value;
+        }
+
+        /**
+         * <p class="changed_added_2_0">Returns the Parameter's name.</p>
+         *
+         * @since 2.0
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * <p class="changed_added_2_0">Returns the Parameter's value.</p>
+         *
+         * @since 2.0
+         */
+        public Object getValue() {
+            return value;
+        }
+    }
+}
diff --git a/javax/faces/component/behavior/ClientBehaviorHint.java b/javax/faces/component/behavior/ClientBehaviorHint.java
new file mode 100644
index 0000000..08afa6a
--- /dev/null
+++ b/javax/faces/component/behavior/ClientBehaviorHint.java
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+/**
+ * <p class="changed_added_2_0">An enum that specifies hints that describes
+ * the behavior of ClientBehavior implementations.</p>
+ *
+ * @see ClientBehavior#getHints ClientBehavior.getHints()
+ *
+ * @since 2.0
+ */
+public enum ClientBehaviorHint {
+
+  /** 
+   * Hint that indicates that ClientBehavior implementation posts back to the
+   * server.  Renderers that normally attach postback-related scripts
+   * may choose to omit such scripts when a submitting ClientBehavior is
+   * present.
+   */
+  SUBMITTING
+}
diff --git a/javax/faces/component/behavior/ClientBehaviorHolder.java b/javax/faces/component/behavior/ClientBehaviorHolder.java
new file mode 100644
index 0000000..4372e6a
--- /dev/null
+++ b/javax/faces/component/behavior/ClientBehaviorHolder.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+*<p class="changed_added_2_0">The <strong>ClientBehaviorHolder</strong> 
+* interface may be implemented by any concrete 
+* {@link javax.faces.component.UIComponent} that wishes to support
+* client behaviors as defined by {@link ClientBehavior}.</p>
+*
+* @since 2.0
+*/
+public interface ClientBehaviorHolder {
+
+    /**
+     * <p class="changed_added_2_0">Attaches a {@link ClientBehavior} to 
+     * the component implementing this interface for the specified event.
+     * Valid event names for a UIComponent implementation are defined by 
+     * {@code ClientBehaviorHolder.getEventNames()}.</p>
+     *
+     * @param eventName the logical name of the client-side event to
+     * attach the behavior to.
+     * @param  behavior the {@link ClientBehavior} instance to attach
+     * for the specified event name.
+     *
+     * @since 2.0
+     */
+    public void addClientBehavior(String eventName, ClientBehavior behavior);
+
+    /**
+     * <p class="changed_added_2_0">Returns a non-null, unmodifiable 
+     * <code>Collection</code> containing the names of the logical 
+     * events supported by the component implementing this interface.</p>
+     *
+     * @since 2.0
+     */
+    public Collection<String> getEventNames();
+
+    /**
+     * <p class="changed_added_2_0">Returns a non-null, unmodifiable
+     * <code>Map</code> that contains the the {@link ClientBehavior}s that
+     * have been attached to the component implementing this interface.
+     * The keys in this <code>Map</code> are event names defined by
+     * {@link #getEventNames}.</p>
+     *
+     * @since 2.0
+     */
+    public Map<String, List<ClientBehavior>> getClientBehaviors();
+
+    /**
+     * <p class="changed_added_2_0">Returns the default event
+     * name for this <code>ClientBehaviorHolder</code> implementation.  
+     * This must be one of the event names returned by
+     * {@link #getEventNames} or null if the component does not have
+     * a default event.
+     *
+     * @since 2.0
+     */
+    public String getDefaultEventName();
+}
+
+ 
diff --git a/javax/faces/component/behavior/FacesBehavior.java b/javax/faces/component/behavior/FacesBehavior.java
new file mode 100644
index 0000000..4ca0224
--- /dev/null
+++ b/javax/faces/component/behavior/FacesBehavior.java
@@ -0,0 +1,64 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.behavior;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * class automatically registers the class with the runtime as a {@link
+ * Behavior}.  The value of this annotation attribute is taken to be the 
+ * <em>behavior-id</em> with which instances of this class of behavior 
+ * can be instantiated by calling {@link
+ * javax.faces.application.Application#createBehavior(java.lang.String)}</p>
+ *
+ * @since 2.0
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface FacesBehavior {
+    String value();
+}
diff --git a/javax/faces/component/behavior/package.html b/javax/faces/component/behavior/package.html
new file mode 100644
index 0000000..59c222c
--- /dev/null
+++ b/javax/faces/component/behavior/package.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.component.behavior"</title>
+<body bgcolor="white">
+
+<p><span class="changed_added_2_0"><span
+class="changed_modified_2_0_rev_a changed_modified_2_2">APIs</span> for attaching additional
+behavior to user interface components.</span></p>
+
+</body>
+</html>
+
diff --git a/javax/faces/component/html/HtmlBody.java b/javax/faces/component/html/HtmlBody.java
new file mode 100644
index 0000000..1e7dc84
--- /dev/null
+++ b/javax/faces/component/html/HtmlBody.java
@@ -0,0 +1,514 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * NONE
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Body</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlBody extends javax.faces.component.UIOutput implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlBody() {
+        super();
+        setRendererType("javax.faces.Body");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.OutputBody";
+
+
+    protected enum PropertyKeys {
+        dir,
+        lang,
+        onclick,
+        ondblclick,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onload,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onunload,
+        role,
+        style,
+        styleClass,
+        title,
+        xmlns,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onload</code> property.</p>
+     */
+    public java.lang.String getOnload() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onload);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onload</code> property.</p>
+     */
+    public void setOnload(java.lang.String onload) {
+        getStateHelper().put(PropertyKeys.onload, onload);
+        handleAttribute("onload", onload);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onunload</code> property.</p>
+     */
+    public java.lang.String getOnunload() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onunload);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onunload</code> property.</p>
+     */
+    public void setOnunload(java.lang.String onunload) {
+        getStateHelper().put(PropertyKeys.onunload, onunload);
+        handleAttribute("onunload", onunload);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>xmlns</code> property.</p>
+     * <p>Contents: <div class="changed_added_2_1">
+     * An XML Namespace to be passed through to the rendered element
+     * </div>
+     */
+    public java.lang.String getXmlns() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.xmlns);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>xmlns</code> property.</p>
+     */
+    public void setXmlns(java.lang.String xmlns) {
+        getStateHelper().put(PropertyKeys.xmlns, xmlns);
+        handleAttribute("xmlns", xmlns);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("click","dblclick","keydown","keypress","keyup","load","mousedown","mousemove","mouseout","mouseover","mouseup","unload"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlColumn.java b/javax/faces/component/html/HtmlColumn.java
new file mode 100644
index 0000000..bd08c87
--- /dev/null
+++ b/javax/faces/component/html/HtmlColumn.java
@@ -0,0 +1,167 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents a column that will be rendered
+ * in an HTML <code>table</code> element.</p>
+ */
+public class HtmlColumn extends javax.faces.component.UIColumn {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlColumn() {
+        super();
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlColumn";
+
+
+    protected enum PropertyKeys {
+        footerClass,
+        headerClass,
+        rowHeader,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>footerClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any footer generated for this column.
+     */
+    public java.lang.String getFooterClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.footerClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>footerClass</code> property.</p>
+     */
+    public void setFooterClass(java.lang.String footerClass) {
+        getStateHelper().put(PropertyKeys.footerClass, footerClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>headerClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any header generated for this column.
+     */
+    public java.lang.String getHeaderClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.headerClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>headerClass</code> property.</p>
+     */
+    public void setHeaderClass(java.lang.String headerClass) {
+        getStateHelper().put(PropertyKeys.headerClass, headerClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rowHeader</code> property.</p>
+     * <p>Contents: Flag indicating that this column is a row header column and
+     * therefore cells in this column should be rendered with "th"
+     * instead of "td" and must have the 'scope="row"' attribute.
+     */
+    public boolean isRowHeader() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.rowHeader, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rowHeader</code> property.</p>
+     */
+    public void setRowHeader(boolean rowHeader) {
+        getStateHelper().put(PropertyKeys.rowHeader, rowHeader);
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlCommandButton.java b/javax/faces/component/html/HtmlCommandButton.java
new file mode 100644
index 0000000..068d986
--- /dev/null
+++ b/javax/faces/component/html/HtmlCommandButton.java
@@ -0,0 +1,714 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>input</code> element
+ * for a button of type <code>submit</code> or <code>reset</code>.
+ * The label text is specified by the component value.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Button</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlCommandButton extends javax.faces.component.UICommand implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlCommandButton() {
+        super();
+        setRendererType("javax.faces.Button");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlCommandButton";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        alt,
+        dir,
+        disabled,
+        image,
+        label,
+        lang,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        style,
+        styleClass,
+        tabindex,
+        title,
+        type,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>alt</code> property.</p>
+     * <p>Contents: Alternate textual description of the
+     * element rendered by this component.
+     */
+    public java.lang.String getAlt() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.alt);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>alt</code> property.</p>
+     */
+    public void setAlt(java.lang.String alt) {
+        getStateHelper().put(PropertyKeys.alt, alt);
+        handleAttribute("alt", alt);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>image</code> property.</p>
+     * <p>Contents: <p>
+     * Absolute or relative URL of the
+     * image to be displayed for this
+     * button.  If specified, this
+     * "input" element will be of type
+     * "image".  Otherwise, it will be
+     * of the type specified by the
+     * "type" property with a label
+     * specified by the "value"
+     * property.  <span
+     * class="changed_added_2_0">Note
+     * that if the value of this
+     * attribute starts with "/", the
+     * rendered value for this
+     * attribute will be prefixed with
+     * the context-root for this
+     * application.</span>
+     * </p>
+     */
+    public java.lang.String getImage() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.image);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>image</code> property.</p>
+     */
+    public void setImage(java.lang.String image) {
+        getStateHelper().put(PropertyKeys.image, image);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+        handleAttribute("onchange", onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>type</code> property.</p>
+     * <p>Contents: Type of button to create.  Valid values are "submit", "button",
+     * and "reset".  If not specified, or not a valid value, the default
+     * value is "submit".
+     */
+    public java.lang.String getType() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.type, "submit");
+
+    }
+
+    /**
+     * <p>Set the value of the <code>type</code> property.</p>
+     */
+    public void setType(java.lang.String type) {
+        getStateHelper().put(PropertyKeys.type, type);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","click","action","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "action";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlCommandLink.java b/javax/faces/component/html/HtmlCommandLink.java
new file mode 100644
index 0000000..cb22174
--- /dev/null
+++ b/javax/faces/component/html/HtmlCommandLink.java
@@ -0,0 +1,724 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>a</code> element for a hyperlink that acts
+ * like a submit button.  This component must be placed inside
+ * a form, and requires JavaScript to be enabled in the client.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Link</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlCommandLink extends javax.faces.component.UICommand implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlCommandLink() {
+        super();
+        setRendererType("javax.faces.Link");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlCommandLink";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        charset,
+        coords,
+        dir,
+        disabled,
+        hreflang,
+        lang,
+        onblur,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        rel,
+        rev,
+        role,
+        shape,
+        style,
+        styleClass,
+        tabindex,
+        target,
+        title,
+        type,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>charset</code> property.</p>
+     * <p>Contents: The character encoding of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getCharset() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.charset);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>charset</code> property.</p>
+     */
+    public void setCharset(java.lang.String charset) {
+        getStateHelper().put(PropertyKeys.charset, charset);
+        handleAttribute("charset", charset);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>coords</code> property.</p>
+     * <p>Contents: The position and shape of the hot spot on the screen
+     * (for use in client-side image maps).
+     */
+    public java.lang.String getCoords() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.coords);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>coords</code> property.</p>
+     */
+    public void setCoords(java.lang.String coords) {
+        getStateHelper().put(PropertyKeys.coords, coords);
+        handleAttribute("coords", coords);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never
+     * receive focus or be included in a subsequent
+     * submit.
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>hreflang</code> property.</p>
+     * <p>Contents: The language code of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getHreflang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.hreflang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>hreflang</code> property.</p>
+     */
+    public void setHreflang(java.lang.String hreflang) {
+        getStateHelper().put(PropertyKeys.hreflang, hreflang);
+        handleAttribute("hreflang", hreflang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rel</code> property.</p>
+     * <p>Contents: The relationship from the current document
+     * to the anchor specified by this hyperlink.
+     * The value of this attribute is a space-separated
+     * list of link types.
+     */
+    public java.lang.String getRel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rel);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rel</code> property.</p>
+     */
+    public void setRel(java.lang.String rel) {
+        getStateHelper().put(PropertyKeys.rel, rel);
+        handleAttribute("rel", rel);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rev</code> property.</p>
+     * <p>Contents: A reverse link from the anchor specified
+     * by this hyperlink to the current document.
+     * The value of this attribute is a space-separated
+     * list of link types.
+     */
+    public java.lang.String getRev() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rev);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rev</code> property.</p>
+     */
+    public void setRev(java.lang.String rev) {
+        getStateHelper().put(PropertyKeys.rev, rev);
+        handleAttribute("rev", rev);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>shape</code> property.</p>
+     * <p>Contents: The shape of the hot spot on the screen
+     * (for use in client-side image maps).  Valid
+     * values are:  default (entire region); rect
+     * (rectangular region); circle (circular region);
+     * and poly (polygonal region).
+     */
+    public java.lang.String getShape() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.shape);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>shape</code> property.</p>
+     */
+    public void setShape(java.lang.String shape) {
+        getStateHelper().put(PropertyKeys.shape, shape);
+        handleAttribute("shape", shape);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>target</code> property.</p>
+     * <p>Contents: Name of a frame where the resource
+     * retrieved via this hyperlink is to
+     * be displayed.
+     */
+    public java.lang.String getTarget() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.target);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>target</code> property.</p>
+     */
+    public void setTarget(java.lang.String target) {
+        getStateHelper().put(PropertyKeys.target, target);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>type</code> property.</p>
+     * <p>Contents: The content type of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getType() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.type);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>type</code> property.</p>
+     */
+    public void setType(java.lang.String type) {
+        getStateHelper().put(PropertyKeys.type, type);
+        handleAttribute("type", type);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","click","action","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "action";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlDataTable.java b/javax/faces/component/html/HtmlDataTable.java
new file mode 100644
index 0000000..c6e1ed8
--- /dev/null
+++ b/javax/faces/component/html/HtmlDataTable.java
@@ -0,0 +1,778 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents a set of repeating data (segregated into
+ * columns by child UIColumn components) that will
+ * be rendered in an HTML <code>table</code> element.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Table</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlDataTable extends javax.faces.component.UIData implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlDataTable() {
+        super();
+        setRendererType("javax.faces.Table");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlDataTable";
+
+
+    protected enum PropertyKeys {
+        bgcolor,
+        bodyrows,
+        border,
+        captionClass,
+        captionStyle,
+        cellpadding,
+        cellspacing,
+        columnClasses,
+        dir,
+        footerClass,
+        frame,
+        headerClass,
+        lang,
+        onclick,
+        ondblclick,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        role,
+        rowClasses,
+        rules,
+        style,
+        styleClass,
+        summary,
+        title,
+        width,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>bgcolor</code> property.</p>
+     * <p>Contents: Name or code of the background color for this table.
+     */
+    public java.lang.String getBgcolor() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.bgcolor);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>bgcolor</code> property.</p>
+     */
+    public void setBgcolor(java.lang.String bgcolor) {
+        getStateHelper().put(PropertyKeys.bgcolor, bgcolor);
+        handleAttribute("bgcolor", bgcolor);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>bodyrows</code> property.</p>
+     * <p>Contents: Comma separated list of row indices for which a new
+     * "tbody" element should be started (and any
+     * previously opened one should be ended).
+     */
+    public java.lang.String getBodyrows() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.bodyrows);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>bodyrows</code> property.</p>
+     */
+    public void setBodyrows(java.lang.String bodyrows) {
+        getStateHelper().put(PropertyKeys.bodyrows, bodyrows);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>border</code> property.</p>
+     * <p>Contents: Width (in pixels) of the border to be drawn
+     * around this table.
+     */
+    public int getBorder() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.border, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>border</code> property.</p>
+     */
+    public void setBorder(int border) {
+        getStateHelper().put(PropertyKeys.border, border);
+        handleAttribute("border", border);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>captionClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any caption generated for this table.
+     */
+    public java.lang.String getCaptionClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.captionClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>captionClass</code> property.</p>
+     */
+    public void setCaptionClass(java.lang.String captionClass) {
+        getStateHelper().put(PropertyKeys.captionClass, captionClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>captionStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this caption is rendered.
+     */
+    public java.lang.String getCaptionStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.captionStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>captionStyle</code> property.</p>
+     */
+    public void setCaptionStyle(java.lang.String captionStyle) {
+        getStateHelper().put(PropertyKeys.captionStyle, captionStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>cellpadding</code> property.</p>
+     * <p>Contents: Definition of how much space the user agent should
+     * leave between the border of each cell and its contents.
+     */
+    public java.lang.String getCellpadding() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.cellpadding);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>cellpadding</code> property.</p>
+     */
+    public void setCellpadding(java.lang.String cellpadding) {
+        getStateHelper().put(PropertyKeys.cellpadding, cellpadding);
+        handleAttribute("cellpadding", cellpadding);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>cellspacing</code> property.</p>
+     * <p>Contents: Definition of how much space the user agent should
+     * leave between the left side of the table and the
+     * leftmost column, the top of the table and the top of
+     * the top side of the topmost row, and so on for the
+     * right and bottom of the table.  It also specifies
+     * the amount of space to leave between cells.
+     */
+    public java.lang.String getCellspacing() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.cellspacing);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>cellspacing</code> property.</p>
+     */
+    public void setCellspacing(java.lang.String cellspacing) {
+        getStateHelper().put(PropertyKeys.cellspacing, cellspacing);
+        handleAttribute("cellspacing", cellspacing);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>columnClasses</code> property.</p>
+     * <p>Contents: Comma-delimited list of CSS style classes that will be applied
+     * to the columns of this table.  A space separated list of
+     * classes may also be specified for any individual column.  If
+     * the number of elements in this list is less than the number of
+     * actual column children of the UIData, no "class"
+     * attribute is output for each column greater than the number of
+     * elements in the list.  If the number of elements in the list
+     * is greater than the number of actual column children of the
+     * UIData, the elements at the posisiton in the list
+     * after the last column are ignored.
+     */
+    public java.lang.String getColumnClasses() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.columnClasses);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>columnClasses</code> property.</p>
+     */
+    public void setColumnClasses(java.lang.String columnClasses) {
+        getStateHelper().put(PropertyKeys.columnClasses, columnClasses);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>footerClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any footer generated for this table.
+     */
+    public java.lang.String getFooterClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.footerClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>footerClass</code> property.</p>
+     */
+    public void setFooterClass(java.lang.String footerClass) {
+        getStateHelper().put(PropertyKeys.footerClass, footerClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>frame</code> property.</p>
+     * <p>Contents: Code specifying which sides of the frame surrounding
+     * this table will be visible.  Valid values are:
+     * none (no sides, default value); above (top side only);
+     * below (bottom side only); hsides (top and bottom sides
+     * only); vsides (right and left sides only); lhs (left
+     * hand side only); rhs (right hand side only); box
+     * (all four sides); and border (all four sides).
+     */
+    public java.lang.String getFrame() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.frame);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>frame</code> property.</p>
+     */
+    public void setFrame(java.lang.String frame) {
+        getStateHelper().put(PropertyKeys.frame, frame);
+        handleAttribute("frame", frame);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>headerClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any header generated for this table.
+     */
+    public java.lang.String getHeaderClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.headerClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>headerClass</code> property.</p>
+     */
+    public void setHeaderClass(java.lang.String headerClass) {
+        getStateHelper().put(PropertyKeys.headerClass, headerClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rowClasses</code> property.</p>
+     * <p>Contents: Comma-delimited list of CSS style classes that will be applied
+     * to the rows of this table.  A space separated list of classes
+     * may also be specified for any individual row.  Thes styles are
+     * applied, in turn, to each row in the table.  For example, if
+     * the list has two elements, the first style class in the list
+     * is applied to the first row, the second to the second row, the
+     * first to the third row, the second to the fourth row, etc.  In
+     * other words, we keep iterating through the list until we reach
+     * the end, and then we start at the beginning again.
+     */
+    public java.lang.String getRowClasses() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rowClasses);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rowClasses</code> property.</p>
+     */
+    public void setRowClasses(java.lang.String rowClasses) {
+        getStateHelper().put(PropertyKeys.rowClasses, rowClasses);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rules</code> property.</p>
+     * <p>Contents: Code specifying which rules will appear between cells
+     * within this table.  Valid values are:  none (no rules,
+     * default value); groups (between row groups); rows
+     * (between rows only); cols (between columns only); and
+     * all (between all rows and columns).
+     */
+    public java.lang.String getRules() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rules);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rules</code> property.</p>
+     */
+    public void setRules(java.lang.String rules) {
+        getStateHelper().put(PropertyKeys.rules, rules);
+        handleAttribute("rules", rules);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>summary</code> property.</p>
+     * <p>Contents: Summary of this table's purpose and structure, for
+     * user agents rendering to non-visual media such as
+     * speech and Braille.
+     */
+    public java.lang.String getSummary() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.summary);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>summary</code> property.</p>
+     */
+    public void setSummary(java.lang.String summary) {
+        getStateHelper().put(PropertyKeys.summary, summary);
+        handleAttribute("summary", summary);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>width</code> property.</p>
+     * <p>Contents: Width of the entire table, for visual user agents.
+     */
+    public java.lang.String getWidth() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.width);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>width</code> property.</p>
+     */
+    public void setWidth(java.lang.String width) {
+        getStateHelper().put(PropertyKeys.width, width);
+        handleAttribute("width", width);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("click","dblclick","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlDoctype.java b/javax/faces/component/html/HtmlDoctype.java
new file mode 100644
index 0000000..7f21c5b
--- /dev/null
+++ b/javax/faces/component/html/HtmlDoctype.java
@@ -0,0 +1,174 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * NONE
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Doctype</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlDoctype extends javax.faces.component.UIOutput {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlDoctype() {
+        super();
+        setRendererType("javax.faces.Doctype");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.OutputDoctype";
+
+
+    protected enum PropertyKeys {
+        publicVal("public"),
+        rootElement,
+        system,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>public</code> property.</p>
+     * <p>Contents: <div class="changed_added_2_1">
+     * Will be output as the public part of the DOCTYPE
+     * </div>
+     */
+    public java.lang.String getPublic() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.publicVal);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>public</code> property.</p>
+     */
+    public void setPublic(java.lang.String _public) {
+        getStateHelper().put(PropertyKeys.publicVal, _public);
+        handleAttribute("public", _public);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rootElement</code> property.</p>
+     * <p>Contents: <div class="changed_added_2_1">
+     * The root XML element
+     * </div>
+     */
+    public java.lang.String getRootElement() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rootElement);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rootElement</code> property.</p>
+     */
+    public void setRootElement(java.lang.String rootElement) {
+        getStateHelper().put(PropertyKeys.rootElement, rootElement);
+        handleAttribute("rootElement", rootElement);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>system</code> property.</p>
+     * <p>Contents: <div class="changed_added_2_1">
+     * Will be output as the system part of the DOCTYPE
+     * </div>
+     */
+    public java.lang.String getSystem() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.system);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>system</code> property.</p>
+     */
+    public void setSystem(java.lang.String system) {
+        getStateHelper().put(PropertyKeys.system, system);
+        handleAttribute("system", system);
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlForm.java b/javax/faces/component/html/HtmlForm.java
new file mode 100644
index 0000000..319845c
--- /dev/null
+++ b/javax/faces/component/html/HtmlForm.java
@@ -0,0 +1,578 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>form</code> element.  Child input components
+ * will be submitted unless they have been disabled.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Form</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlForm extends javax.faces.component.UIForm implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlForm() {
+        super();
+        setRendererType("javax.faces.Form");
+        handleAttribute("enctype", "application/x-www-form-urlencoded");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlForm";
+
+
+    protected enum PropertyKeys {
+        accept,
+        acceptcharset,
+        dir,
+        enctype,
+        lang,
+        onclick,
+        ondblclick,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onreset,
+        onsubmit,
+        role,
+        style,
+        styleClass,
+        target,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accept</code> property.</p>
+     * <p>Contents: List of content types that a server processing this form
+     * will handle correctly
+     */
+    public java.lang.String getAccept() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accept);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accept</code> property.</p>
+     */
+    public void setAccept(java.lang.String accept) {
+        getStateHelper().put(PropertyKeys.accept, accept);
+        handleAttribute("accept", accept);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>acceptcharset</code> property.</p>
+     * <p>Contents: List of character encodings for input data
+     * that are accepted by the server processing
+     * this form.
+     */
+    public java.lang.String getAcceptcharset() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.acceptcharset);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>acceptcharset</code> property.</p>
+     */
+    public void setAcceptcharset(java.lang.String acceptcharset) {
+        getStateHelper().put(PropertyKeys.acceptcharset, acceptcharset);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>enctype</code> property.</p>
+     * <p>Contents: Content type used to submit the form to the server.  If not
+     * specified, the default value is
+     * "application/x-www-form-urlencoded".
+     */
+    public java.lang.String getEnctype() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.enctype, "application/x-www-form-urlencoded");
+
+    }
+
+    /**
+     * <p>Set the value of the <code>enctype</code> property.</p>
+     */
+    public void setEnctype(java.lang.String enctype) {
+        getStateHelper().put(PropertyKeys.enctype, enctype);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onreset</code> property.</p>
+     * <p>Contents: Javascript code executed when this form is reset.
+     */
+    public java.lang.String getOnreset() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onreset);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onreset</code> property.</p>
+     */
+    public void setOnreset(java.lang.String onreset) {
+        getStateHelper().put(PropertyKeys.onreset, onreset);
+        handleAttribute("onreset", onreset);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onsubmit</code> property.</p>
+     * <p>Contents: Javascript code executed when this form is submitted.
+     */
+    public java.lang.String getOnsubmit() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onsubmit);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onsubmit</code> property.</p>
+     */
+    public void setOnsubmit(java.lang.String onsubmit) {
+        getStateHelper().put(PropertyKeys.onsubmit, onsubmit);
+        handleAttribute("onsubmit", onsubmit);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>target</code> property.</p>
+     * <p>Contents: Name of a frame where the response
+     * retrieved after this form submit is to
+     * be displayed.
+     */
+    public java.lang.String getTarget() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.target);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>target</code> property.</p>
+     */
+    public void setTarget(java.lang.String target) {
+        getStateHelper().put(PropertyKeys.target, target);
+        handleAttribute("target", target);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("click","dblclick","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlGraphicImage.java b/javax/faces/component/html/HtmlGraphicImage.java
new file mode 100644
index 0000000..7af4988
--- /dev/null
+++ b/javax/faces/component/html/HtmlGraphicImage.java
@@ -0,0 +1,578 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>img</code> element, used to retrieve
+ * and render a graphical image.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Image</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlGraphicImage extends javax.faces.component.UIGraphic implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlGraphicImage() {
+        super();
+        setRendererType("javax.faces.Image");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlGraphicImage";
+
+
+    protected enum PropertyKeys {
+        alt,
+        dir,
+        height,
+        ismap,
+        lang,
+        longdesc,
+        onclick,
+        ondblclick,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        role,
+        style,
+        styleClass,
+        title,
+        usemap,
+        width,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>alt</code> property.</p>
+     * <p>Contents: Alternate textual description of the
+     * element rendered by this component.
+     */
+    public java.lang.String getAlt() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.alt);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>alt</code> property.</p>
+     */
+    public void setAlt(java.lang.String alt) {
+        getStateHelper().put(PropertyKeys.alt, alt);
+        handleAttribute("alt", alt);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>height</code> property.</p>
+     * <p>Contents: Override for the height of this image.
+     */
+    public java.lang.String getHeight() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.height);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>height</code> property.</p>
+     */
+    public void setHeight(java.lang.String height) {
+        getStateHelper().put(PropertyKeys.height, height);
+        handleAttribute("height", height);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ismap</code> property.</p>
+     * <p>Contents: Flag indicating that this image is to be used as a server side
+     * image map.  Such an image must be enclosed within a hyperlink
+     * ("a").  A value of false causes no attribute to be rendered,
+     * while a value of true causes the attribute to be rendered as
+     * ismap="ismap".
+     */
+    public boolean isIsmap() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.ismap, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ismap</code> property.</p>
+     */
+    public void setIsmap(boolean ismap) {
+        getStateHelper().put(PropertyKeys.ismap, ismap);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>longdesc</code> property.</p>
+     * <p>Contents: URI to a long description of the image
+     * represented by this element.
+     */
+    public java.lang.String getLongdesc() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.longdesc);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>longdesc</code> property.</p>
+     */
+    public void setLongdesc(java.lang.String longdesc) {
+        getStateHelper().put(PropertyKeys.longdesc, longdesc);
+        handleAttribute("longdesc", longdesc);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>usemap</code> property.</p>
+     * <p>Contents: The name of a client side image map (an HTML "map"
+     * element) for which this element provides the image.
+     */
+    public java.lang.String getUsemap() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.usemap);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>usemap</code> property.</p>
+     */
+    public void setUsemap(java.lang.String usemap) {
+        getStateHelper().put(PropertyKeys.usemap, usemap);
+        handleAttribute("usemap", usemap);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>width</code> property.</p>
+     * <p>Contents: Override for the width of this image.
+     */
+    public java.lang.String getWidth() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.width);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>width</code> property.</p>
+     */
+    public void setWidth(java.lang.String width) {
+        getStateHelper().put(PropertyKeys.width, width);
+        handleAttribute("width", width);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("click","dblclick","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlHead.java b/javax/faces/component/html/HtmlHead.java
new file mode 100644
index 0000000..0936513
--- /dev/null
+++ b/javax/faces/component/html/HtmlHead.java
@@ -0,0 +1,174 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * NONE
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Head</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlHead extends javax.faces.component.UIOutput {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlHead() {
+        super();
+        setRendererType("javax.faces.Head");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.OutputHead";
+
+
+    protected enum PropertyKeys {
+        dir,
+        lang,
+        xmlns,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>xmlns</code> property.</p>
+     * <p>Contents: <div class="changed_added_2_1">
+     * An XML Namespace to be passed through to the rendered element
+     * </div>
+     */
+    public java.lang.String getXmlns() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.xmlns);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>xmlns</code> property.</p>
+     */
+    public void setXmlns(java.lang.String xmlns) {
+        getStateHelper().put(PropertyKeys.xmlns, xmlns);
+        handleAttribute("xmlns", xmlns);
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlInputFile.java b/javax/faces/component/html/HtmlInputFile.java
new file mode 100644
index 0000000..8af5f49
--- /dev/null
+++ b/javax/faces/component/html/HtmlInputFile.java
@@ -0,0 +1,720 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>input</code> element
+ * of type <code>file</code>.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.File</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlInputFile extends javax.faces.component.UIInput implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlInputFile() {
+        super();
+        setRendererType("javax.faces.File");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlInputFile";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        alt,
+        autocomplete,
+        dir,
+        disabled,
+        label,
+        lang,
+        maxlength,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        size,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>alt</code> property.</p>
+     * <p>Contents: Alternate textual description of the
+     * element rendered by this component.
+     */
+    public java.lang.String getAlt() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.alt);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>alt</code> property.</p>
+     */
+    public void setAlt(java.lang.String alt) {
+        getStateHelper().put(PropertyKeys.alt, alt);
+        handleAttribute("alt", alt);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>autocomplete</code> property.</p>
+     * <p>Contents: If the value of this attribute is "off", render "off" as the value
+     * of the attribute. This indicates that the  browser should
+     * disable its autocomplete feature for this component.  This is
+     * useful for components that perform autocompletion and do not
+     * want the browser interfering.  If this attribute is not set or the value
+     * is "on", render nothing.
+     */
+    public java.lang.String getAutocomplete() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.autocomplete);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>autocomplete</code> property.</p>
+     */
+    public void setAutocomplete(java.lang.String autocomplete) {
+        getStateHelper().put(PropertyKeys.autocomplete, autocomplete);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>maxlength</code> property.</p>
+     * <p>Contents: The maximum number of characters that may
+     * be entered in this field.
+     */
+    public int getMaxlength() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.maxlength, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>maxlength</code> property.</p>
+     */
+    public void setMaxlength(int maxlength) {
+        getStateHelper().put(PropertyKeys.maxlength, maxlength);
+        handleAttribute("maxlength", maxlength);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>size</code> property.</p>
+     * <p>Contents: The number of characters used to determine
+     * the width of this field.
+     */
+    public int getSize() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.size, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>size</code> property.</p>
+     */
+    public void setSize(int size) {
+        getStateHelper().put(PropertyKeys.size, size);
+        handleAttribute("size", size);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlInputHidden.java b/javax/faces/component/html/HtmlInputHidden.java
new file mode 100644
index 0000000..bc03afd
--- /dev/null
+++ b/javax/faces/component/html/HtmlInputHidden.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>input</code> element
+ * of type <code>hidden</code>.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Hidden</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlInputHidden extends javax.faces.component.UIInput {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlInputHidden() {
+        super();
+        setRendererType("javax.faces.Hidden");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlInputHidden";
+
+
+    protected enum PropertyKeys {
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlInputSecret.java b/javax/faces/component/html/HtmlInputSecret.java
new file mode 100644
index 0000000..82c471f
--- /dev/null
+++ b/javax/faces/component/html/HtmlInputSecret.java
@@ -0,0 +1,746 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>input</code> element
+ * of type <code>password</code>.  On a redisplay,
+ * any previously entered value will <em>not</em>
+ * be rendered (for security reasons) unless the
+ * <code>redisplay</code> property is set to
+ * <code>true</code>.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Secret</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlInputSecret extends javax.faces.component.UIInput implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlInputSecret() {
+        super();
+        setRendererType("javax.faces.Secret");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlInputSecret";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        alt,
+        autocomplete,
+        dir,
+        disabled,
+        label,
+        lang,
+        maxlength,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        redisplay,
+        role,
+        size,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>alt</code> property.</p>
+     * <p>Contents: Alternate textual description of the
+     * element rendered by this component.
+     */
+    public java.lang.String getAlt() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.alt);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>alt</code> property.</p>
+     */
+    public void setAlt(java.lang.String alt) {
+        getStateHelper().put(PropertyKeys.alt, alt);
+        handleAttribute("alt", alt);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>autocomplete</code> property.</p>
+     * <p>Contents: If the value of this attribute is "off", render "off" as the value
+     * of the attribute. This indicates that the  browser should
+     * disable its autocomplete feature for this component.  This is
+     * useful for components that perform autocompletion and do not
+     * want the browser interfering.  If this attribute is not set or the value
+     * is "on", render nothing.
+     */
+    public java.lang.String getAutocomplete() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.autocomplete);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>autocomplete</code> property.</p>
+     */
+    public void setAutocomplete(java.lang.String autocomplete) {
+        getStateHelper().put(PropertyKeys.autocomplete, autocomplete);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>maxlength</code> property.</p>
+     * <p>Contents: The maximum number of characters that may
+     * be entered in this field.
+     */
+    public int getMaxlength() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.maxlength, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>maxlength</code> property.</p>
+     */
+    public void setMaxlength(int maxlength) {
+        getStateHelper().put(PropertyKeys.maxlength, maxlength);
+        handleAttribute("maxlength", maxlength);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>redisplay</code> property.</p>
+     * <p>Contents: Flag indicating that any existing value
+     * in this field should be rendered when the
+     * form is created.  Because this is a potential
+     * security risk, password values are not
+     * displayed by default.
+     */
+    public boolean isRedisplay() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.redisplay, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>redisplay</code> property.</p>
+     */
+    public void setRedisplay(boolean redisplay) {
+        getStateHelper().put(PropertyKeys.redisplay, redisplay);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>size</code> property.</p>
+     * <p>Contents: The number of characters used to determine
+     * the width of this field.
+     */
+    public int getSize() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.size, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>size</code> property.</p>
+     */
+    public void setSize(int size) {
+        getStateHelper().put(PropertyKeys.size, size);
+        handleAttribute("size", size);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlInputText.java b/javax/faces/component/html/HtmlInputText.java
new file mode 100644
index 0000000..73ba002
--- /dev/null
+++ b/javax/faces/component/html/HtmlInputText.java
@@ -0,0 +1,720 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>input</code> element
+ * of type <code>text</code>.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Text</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlInputText extends javax.faces.component.UIInput implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlInputText() {
+        super();
+        setRendererType("javax.faces.Text");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlInputText";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        alt,
+        autocomplete,
+        dir,
+        disabled,
+        label,
+        lang,
+        maxlength,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        size,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>alt</code> property.</p>
+     * <p>Contents: Alternate textual description of the
+     * element rendered by this component.
+     */
+    public java.lang.String getAlt() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.alt);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>alt</code> property.</p>
+     */
+    public void setAlt(java.lang.String alt) {
+        getStateHelper().put(PropertyKeys.alt, alt);
+        handleAttribute("alt", alt);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>autocomplete</code> property.</p>
+     * <p>Contents: If the value of this attribute is "off", render "off" as the value
+     * of the attribute. This indicates that the  browser should
+     * disable its autocomplete feature for this component.  This is
+     * useful for components that perform autocompletion and do not
+     * want the browser interfering.  If this attribute is not set or the value
+     * is "on", render nothing.
+     */
+    public java.lang.String getAutocomplete() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.autocomplete);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>autocomplete</code> property.</p>
+     */
+    public void setAutocomplete(java.lang.String autocomplete) {
+        getStateHelper().put(PropertyKeys.autocomplete, autocomplete);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>maxlength</code> property.</p>
+     * <p>Contents: The maximum number of characters that may
+     * be entered in this field.
+     */
+    public int getMaxlength() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.maxlength, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>maxlength</code> property.</p>
+     */
+    public void setMaxlength(int maxlength) {
+        getStateHelper().put(PropertyKeys.maxlength, maxlength);
+        handleAttribute("maxlength", maxlength);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>size</code> property.</p>
+     * <p>Contents: The number of characters used to determine
+     * the width of this field.
+     */
+    public int getSize() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.size, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>size</code> property.</p>
+     */
+    public void setSize(int size) {
+        getStateHelper().put(PropertyKeys.size, size);
+        handleAttribute("size", size);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlInputTextarea.java b/javax/faces/component/html/HtmlInputTextarea.java
new file mode 100644
index 0000000..efd1bad
--- /dev/null
+++ b/javax/faces/component/html/HtmlInputTextarea.java
@@ -0,0 +1,674 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>textarea</code> element.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Textarea</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlInputTextarea extends javax.faces.component.UIInput implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlInputTextarea() {
+        super();
+        setRendererType("javax.faces.Textarea");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlInputTextarea";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        cols,
+        dir,
+        disabled,
+        label,
+        lang,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        rows,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>cols</code> property.</p>
+     * <p>Contents: The number of columns to be displayed.
+     */
+    public int getCols() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.cols, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>cols</code> property.</p>
+     */
+    public void setCols(int cols) {
+        getStateHelper().put(PropertyKeys.cols, cols);
+        handleAttribute("cols", cols);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rows</code> property.</p>
+     * <p>Contents: The number of rows to be displayed.
+     */
+    public int getRows() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.rows, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rows</code> property.</p>
+     */
+    public void setRows(int rows) {
+        getStateHelper().put(PropertyKeys.rows, rows);
+        handleAttribute("rows", rows);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlMessage.java b/javax/faces/component/html/HtmlMessage.java
new file mode 100644
index 0000000..5c3b4e7
--- /dev/null
+++ b/javax/faces/component/html/HtmlMessage.java
@@ -0,0 +1,415 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * 
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Message</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlMessage extends javax.faces.component.UIMessage {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlMessage() {
+        super();
+        setRendererType("javax.faces.Message");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlMessage";
+
+
+    protected enum PropertyKeys {
+        dir,
+        errorClass,
+        errorStyle,
+        fatalClass,
+        fatalStyle,
+        infoClass,
+        infoStyle,
+        lang,
+        role,
+        style,
+        styleClass,
+        title,
+        tooltip,
+        warnClass,
+        warnStyle,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>errorClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "ERROR".
+     */
+    public java.lang.String getErrorClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.errorClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>errorClass</code> property.</p>
+     */
+    public void setErrorClass(java.lang.String errorClass) {
+        getStateHelper().put(PropertyKeys.errorClass, errorClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>errorStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "ERROR".
+     */
+    public java.lang.String getErrorStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.errorStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>errorStyle</code> property.</p>
+     */
+    public void setErrorStyle(java.lang.String errorStyle) {
+        getStateHelper().put(PropertyKeys.errorStyle, errorStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>fatalClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "FATAL".
+     */
+    public java.lang.String getFatalClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.fatalClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>fatalClass</code> property.</p>
+     */
+    public void setFatalClass(java.lang.String fatalClass) {
+        getStateHelper().put(PropertyKeys.fatalClass, fatalClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>fatalStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "FATAL".
+     */
+    public java.lang.String getFatalStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.fatalStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>fatalStyle</code> property.</p>
+     */
+    public void setFatalStyle(java.lang.String fatalStyle) {
+        getStateHelper().put(PropertyKeys.fatalStyle, fatalStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>infoClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "INFO".
+     */
+    public java.lang.String getInfoClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.infoClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>infoClass</code> property.</p>
+     */
+    public void setInfoClass(java.lang.String infoClass) {
+        getStateHelper().put(PropertyKeys.infoClass, infoClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>infoStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "INFO".
+     */
+    public java.lang.String getInfoStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.infoStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>infoStyle</code> property.</p>
+     */
+    public void setInfoStyle(java.lang.String infoStyle) {
+        getStateHelper().put(PropertyKeys.infoStyle, infoStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tooltip</code> property.</p>
+     * <p>Contents: Flag indicating whether the detail portion of the
+     * message should be displayed as a tooltip.
+     */
+    public boolean isTooltip() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.tooltip, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tooltip</code> property.</p>
+     */
+    public void setTooltip(boolean tooltip) {
+        getStateHelper().put(PropertyKeys.tooltip, tooltip);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>warnClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "WARN".
+     */
+    public java.lang.String getWarnClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.warnClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>warnClass</code> property.</p>
+     */
+    public void setWarnClass(java.lang.String warnClass) {
+        getStateHelper().put(PropertyKeys.warnClass, warnClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>warnStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "WARN".
+     */
+    public java.lang.String getWarnStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.warnStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>warnStyle</code> property.</p>
+     */
+    public void setWarnStyle(java.lang.String warnStyle) {
+        getStateHelper().put(PropertyKeys.warnStyle, warnStyle);
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlMessages.java b/javax/faces/component/html/HtmlMessages.java
new file mode 100644
index 0000000..465a42e
--- /dev/null
+++ b/javax/faces/component/html/HtmlMessages.java
@@ -0,0 +1,436 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * 
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Messages</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlMessages extends javax.faces.component.UIMessages {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlMessages() {
+        super();
+        setRendererType("javax.faces.Messages");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlMessages";
+
+
+    protected enum PropertyKeys {
+        dir,
+        errorClass,
+        errorStyle,
+        fatalClass,
+        fatalStyle,
+        infoClass,
+        infoStyle,
+        lang,
+        layout,
+        role,
+        style,
+        styleClass,
+        title,
+        tooltip,
+        warnClass,
+        warnStyle,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>errorClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "ERROR".
+     */
+    public java.lang.String getErrorClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.errorClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>errorClass</code> property.</p>
+     */
+    public void setErrorClass(java.lang.String errorClass) {
+        getStateHelper().put(PropertyKeys.errorClass, errorClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>errorStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "ERROR".
+     */
+    public java.lang.String getErrorStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.errorStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>errorStyle</code> property.</p>
+     */
+    public void setErrorStyle(java.lang.String errorStyle) {
+        getStateHelper().put(PropertyKeys.errorStyle, errorStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>fatalClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "FATAL".
+     */
+    public java.lang.String getFatalClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.fatalClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>fatalClass</code> property.</p>
+     */
+    public void setFatalClass(java.lang.String fatalClass) {
+        getStateHelper().put(PropertyKeys.fatalClass, fatalClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>fatalStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "FATAL".
+     */
+    public java.lang.String getFatalStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.fatalStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>fatalStyle</code> property.</p>
+     */
+    public void setFatalStyle(java.lang.String fatalStyle) {
+        getStateHelper().put(PropertyKeys.fatalStyle, fatalStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>infoClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "INFO".
+     */
+    public java.lang.String getInfoClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.infoClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>infoClass</code> property.</p>
+     */
+    public void setInfoClass(java.lang.String infoClass) {
+        getStateHelper().put(PropertyKeys.infoClass, infoClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>infoStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "INFO".
+     */
+    public java.lang.String getInfoStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.infoStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>infoStyle</code> property.</p>
+     */
+    public void setInfoStyle(java.lang.String infoStyle) {
+        getStateHelper().put(PropertyKeys.infoStyle, infoStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>layout</code> property.</p>
+     * <p>Contents: The type of layout markup to use when rendering
+     * error messages.  Valid values are "table" (an HTML
+     * table) and "list" (an HTML list).  If not specified,
+     * the default value is "list".
+     */
+    public java.lang.String getLayout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.layout, "list");
+
+    }
+
+    /**
+     * <p>Set the value of the <code>layout</code> property.</p>
+     */
+    public void setLayout(java.lang.String layout) {
+        getStateHelper().put(PropertyKeys.layout, layout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tooltip</code> property.</p>
+     * <p>Contents: Flag indicating whether the detail portion of the
+     * message should be displayed as a tooltip.
+     */
+    public boolean isTooltip() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.tooltip, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tooltip</code> property.</p>
+     */
+    public void setTooltip(boolean tooltip) {
+        getStateHelper().put(PropertyKeys.tooltip, tooltip);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>warnClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to any message
+     * with a severity class of "WARN".
+     */
+    public java.lang.String getWarnClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.warnClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>warnClass</code> property.</p>
+     */
+    public void setWarnClass(java.lang.String warnClass) {
+        getStateHelper().put(PropertyKeys.warnClass, warnClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>warnStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to apply to any message
+     * with a severity class of "WARN".
+     */
+    public java.lang.String getWarnStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.warnStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>warnStyle</code> property.</p>
+     */
+    public void setWarnStyle(java.lang.String warnStyle) {
+        getStateHelper().put(PropertyKeys.warnStyle, warnStyle);
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlOutcomeTargetButton.java b/javax/faces/component/html/HtmlOutcomeTargetButton.java
new file mode 100644
index 0000000..a3f5d4a
--- /dev/null
+++ b/javax/faces/component/html/HtmlOutcomeTargetButton.java
@@ -0,0 +1,595 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>input</code> element of type "button" or image that
+ * may be used to link to a URL handled by the Faces Servlet resolved preemptively using
+ * the logical outcome defined by the <code>outcome</code> property. The button behaves like
+ * a link, so the current form is not submitted when it is activated (the transitive of how
+ * the UICommandLink behaves like a submit button).
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Button</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlOutcomeTargetButton extends javax.faces.component.UIOutcomeTarget implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlOutcomeTargetButton() {
+        super();
+        setRendererType("javax.faces.Button");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlOutcomeTargetButton";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        alt,
+        dir,
+        image,
+        lang,
+        onblur,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        role,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>alt</code> property.</p>
+     * <p>Contents: Alternate textual description of the
+     * element rendered by this component.
+     */
+    public java.lang.String getAlt() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.alt);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>alt</code> property.</p>
+     */
+    public void setAlt(java.lang.String alt) {
+        getStateHelper().put(PropertyKeys.alt, alt);
+        handleAttribute("alt", alt);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>image</code> property.</p>
+     * <p>Contents: <p>
+     * Absolute or relative URL of the
+     * image to be displayed for this
+     * button.  If specified, this
+     * "input" element will be of type
+     * "image".  Otherwise, it will be
+     * of the type specified by the
+     * "type" property with a label
+     * specified by the "value"
+     * property.  <span
+     * class="changed_added_2_0">Note
+     * that if the value of this
+     * attribute starts with "/", the
+     * rendered value for this
+     * attribute will be prefixed with
+     * the context-root for this
+     * application.</span>
+     * </p>
+     */
+    public java.lang.String getImage() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.image);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>image</code> property.</p>
+     */
+    public void setImage(java.lang.String image) {
+        getStateHelper().put(PropertyKeys.image, image);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlOutcomeTargetLink.java b/javax/faces/component/html/HtmlOutcomeTargetLink.java
new file mode 100644
index 0000000..081fc63
--- /dev/null
+++ b/javax/faces/component/html/HtmlOutcomeTargetLink.java
@@ -0,0 +1,724 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>a</code> (hyperlink) element that may be
+ * used to link to a URL handled by the Faces Servlet resolved preemptively using the logical
+ * outcome defined by the <code>outcome</code> property.
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Link</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlOutcomeTargetLink extends javax.faces.component.UIOutcomeTarget implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlOutcomeTargetLink() {
+        super();
+        setRendererType("javax.faces.Link");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlOutcomeTargetLink";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        charset,
+        coords,
+        dir,
+        disabled,
+        hreflang,
+        lang,
+        onblur,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        rel,
+        rev,
+        role,
+        shape,
+        style,
+        styleClass,
+        tabindex,
+        target,
+        title,
+        type,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>charset</code> property.</p>
+     * <p>Contents: The character encoding of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getCharset() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.charset);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>charset</code> property.</p>
+     */
+    public void setCharset(java.lang.String charset) {
+        getStateHelper().put(PropertyKeys.charset, charset);
+        handleAttribute("charset", charset);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>coords</code> property.</p>
+     * <p>Contents: The position and shape of the hot spot on the screen
+     * (for use in client-side image maps).
+     */
+    public java.lang.String getCoords() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.coords);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>coords</code> property.</p>
+     */
+    public void setCoords(java.lang.String coords) {
+        getStateHelper().put(PropertyKeys.coords, coords);
+        handleAttribute("coords", coords);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never
+     * receive focus or be included in a subsequent
+     * submit.
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>hreflang</code> property.</p>
+     * <p>Contents: The language code of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getHreflang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.hreflang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>hreflang</code> property.</p>
+     */
+    public void setHreflang(java.lang.String hreflang) {
+        getStateHelper().put(PropertyKeys.hreflang, hreflang);
+        handleAttribute("hreflang", hreflang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rel</code> property.</p>
+     * <p>Contents: The relationship from the current document
+     * to the anchor specified by this hyperlink.
+     * The value of this attribute is a space-separated
+     * list of link types.
+     */
+    public java.lang.String getRel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rel);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rel</code> property.</p>
+     */
+    public void setRel(java.lang.String rel) {
+        getStateHelper().put(PropertyKeys.rel, rel);
+        handleAttribute("rel", rel);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rev</code> property.</p>
+     * <p>Contents: A reverse link from the anchor specified
+     * by this hyperlink to the current document.
+     * The value of this attribute is a space-separated
+     * list of link types.
+     */
+    public java.lang.String getRev() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rev);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rev</code> property.</p>
+     */
+    public void setRev(java.lang.String rev) {
+        getStateHelper().put(PropertyKeys.rev, rev);
+        handleAttribute("rev", rev);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>shape</code> property.</p>
+     * <p>Contents: The shape of the hot spot on the screen
+     * (for use in client-side image maps).  Valid
+     * values are:  default (entire region); rect
+     * (rectangular region); circle (circular region);
+     * and poly (polygonal region).
+     */
+    public java.lang.String getShape() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.shape);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>shape</code> property.</p>
+     */
+    public void setShape(java.lang.String shape) {
+        getStateHelper().put(PropertyKeys.shape, shape);
+        handleAttribute("shape", shape);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>target</code> property.</p>
+     * <p>Contents: Name of a frame where the resource
+     * retrieved via this hyperlink is to
+     * be displayed.
+     */
+    public java.lang.String getTarget() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.target);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>target</code> property.</p>
+     */
+    public void setTarget(java.lang.String target) {
+        getStateHelper().put(PropertyKeys.target, target);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>type</code> property.</p>
+     * <p>Contents: The content type of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getType() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.type);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>type</code> property.</p>
+     */
+    public void setType(java.lang.String type) {
+        getStateHelper().put(PropertyKeys.type, type);
+        handleAttribute("type", type);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","click","action","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "action";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlOutputFormat.java b/javax/faces/component/html/HtmlOutputFormat.java
new file mode 100644
index 0000000..d252628
--- /dev/null
+++ b/javax/faces/component/html/HtmlOutputFormat.java
@@ -0,0 +1,270 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents a component that looks up a localized message in a
+ * resource bundle, optionally uses it as a
+ * <code>MessageFormat</code> pattern string and substitutes in
+ * parameter values from nested <em>UIParameter</em> components, and
+ * renders the result.  If the "dir" or "lang" attributes are
+ * present, render a <code>span</code> element and pass them through
+ * as attributes on the span.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Format</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlOutputFormat extends javax.faces.component.UIOutput {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlOutputFormat() {
+        super();
+        setRendererType("javax.faces.Format");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlOutputFormat";
+
+
+    protected enum PropertyKeys {
+        dir,
+        escape,
+        lang,
+        role,
+        style,
+        styleClass,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>escape</code> property.</p>
+     * <p>Contents: Flag indicating that characters that are sensitive
+     * in HTML and XML markup must be escaped.  This flag
+     * is set to "true" by default.
+     */
+    public boolean isEscape() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.escape, true);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>escape</code> property.</p>
+     */
+    public void setEscape(boolean escape) {
+        getStateHelper().put(PropertyKeys.escape, escape);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlOutputLabel.java b/javax/faces/component/html/HtmlOutputLabel.java
new file mode 100644
index 0000000..50bb6fe
--- /dev/null
+++ b/javax/faces/component/html/HtmlOutputLabel.java
@@ -0,0 +1,576 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>label</code> element, used to define
+ * an accessible label for a corresponding input element.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Label</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlOutputLabel extends javax.faces.component.UIOutput implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlOutputLabel() {
+        super();
+        setRendererType("javax.faces.Label");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlOutputLabel";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        dir,
+        escape,
+        forVal("for"),
+        lang,
+        onblur,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        role,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>escape</code> property.</p>
+     * <p>Contents: Flag indicating that characters that are sensitive
+     * in HTML and XML markup must be escaped.  If omitted, this
+     * flag is assumed to be "true".
+     */
+    public boolean isEscape() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.escape, true);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>escape</code> property.</p>
+     */
+    public void setEscape(boolean escape) {
+        getStateHelper().put(PropertyKeys.escape, escape);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>for</code> property.</p>
+     * <p>Contents: Client identifier of the component for which this element
+     * is a label.
+     */
+    public java.lang.String getFor() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.forVal);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>for</code> property.</p>
+     */
+    public void setFor(java.lang.String _for) {
+        getStateHelper().put(PropertyKeys.forVal, _for);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlOutputLink.java b/javax/faces/component/html/HtmlOutputLink.java
new file mode 100644
index 0000000..c248ccc
--- /dev/null
+++ b/javax/faces/component/html/HtmlOutputLink.java
@@ -0,0 +1,747 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents an HTML <code>a</code> (hyperlink) element that may be
+ * used to link to an arbitrary URL defined by the <code>value</code>
+ * property.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Link</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlOutputLink extends javax.faces.component.UIOutput implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlOutputLink() {
+        super();
+        setRendererType("javax.faces.Link");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlOutputLink";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        charset,
+        coords,
+        dir,
+        disabled,
+        fragment,
+        hreflang,
+        lang,
+        onblur,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        rel,
+        rev,
+        role,
+        shape,
+        style,
+        styleClass,
+        tabindex,
+        target,
+        title,
+        type,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>charset</code> property.</p>
+     * <p>Contents: The character encoding of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getCharset() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.charset);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>charset</code> property.</p>
+     */
+    public void setCharset(java.lang.String charset) {
+        getStateHelper().put(PropertyKeys.charset, charset);
+        handleAttribute("charset", charset);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>coords</code> property.</p>
+     * <p>Contents: The position and shape of the hot spot on the screen
+     * (for use in client-side image maps).
+     */
+    public java.lang.String getCoords() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.coords);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>coords</code> property.</p>
+     */
+    public void setCoords(java.lang.String coords) {
+        getStateHelper().put(PropertyKeys.coords, coords);
+        handleAttribute("coords", coords);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never
+     * receive focus or be included in a subsequent
+     * submit.
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>fragment</code> property.</p>
+     * <p>Contents: The identifier of the page fragment which should
+     * be brought into focus when the target page is
+     * rendered. The value of this attribute is appended
+     * to the end of target URL following a hash (#) mark.
+     * This notation is part of the standard URL syntax.
+     */
+    public java.lang.String getFragment() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.fragment);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>fragment</code> property.</p>
+     */
+    public void setFragment(java.lang.String fragment) {
+        getStateHelper().put(PropertyKeys.fragment, fragment);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>hreflang</code> property.</p>
+     * <p>Contents: The language code of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getHreflang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.hreflang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>hreflang</code> property.</p>
+     */
+    public void setHreflang(java.lang.String hreflang) {
+        getStateHelper().put(PropertyKeys.hreflang, hreflang);
+        handleAttribute("hreflang", hreflang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rel</code> property.</p>
+     * <p>Contents: The relationship from the current document
+     * to the anchor specified by this hyperlink.
+     * The value of this attribute is a space-separated
+     * list of link types.
+     */
+    public java.lang.String getRel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rel);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rel</code> property.</p>
+     */
+    public void setRel(java.lang.String rel) {
+        getStateHelper().put(PropertyKeys.rel, rel);
+        handleAttribute("rel", rel);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rev</code> property.</p>
+     * <p>Contents: A reverse link from the anchor specified
+     * by this hyperlink to the current document.
+     * The value of this attribute is a space-separated
+     * list of link types.
+     */
+    public java.lang.String getRev() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rev);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rev</code> property.</p>
+     */
+    public void setRev(java.lang.String rev) {
+        getStateHelper().put(PropertyKeys.rev, rev);
+        handleAttribute("rev", rev);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>shape</code> property.</p>
+     * <p>Contents: The shape of the hot spot on the screen
+     * (for use in client-side image maps).  Valid
+     * values are:  default (entire region); rect
+     * (rectangular region); circle (circular region);
+     * and poly (polygonal region).
+     */
+    public java.lang.String getShape() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.shape);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>shape</code> property.</p>
+     */
+    public void setShape(java.lang.String shape) {
+        getStateHelper().put(PropertyKeys.shape, shape);
+        handleAttribute("shape", shape);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>target</code> property.</p>
+     * <p>Contents: Name of a frame where the resource
+     * retrieved via this hyperlink is to
+     * be displayed.
+     */
+    public java.lang.String getTarget() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.target);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>target</code> property.</p>
+     */
+    public void setTarget(java.lang.String target) {
+        getStateHelper().put(PropertyKeys.target, target);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>type</code> property.</p>
+     * <p>Contents: The content type of the resource designated
+     * by this hyperlink.
+     */
+    public java.lang.String getType() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.type);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>type</code> property.</p>
+     */
+    public void setType(java.lang.String type) {
+        getStateHelper().put(PropertyKeys.type, type);
+        handleAttribute("type", type);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","click","action","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "action";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlOutputText.java b/javax/faces/component/html/HtmlOutputText.java
new file mode 100644
index 0000000..5e78d51
--- /dev/null
+++ b/javax/faces/component/html/HtmlOutputText.java
@@ -0,0 +1,266 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Renders the component value as text, optionally wrapping in a
+ * <code>span</code> element if I18N attributes, CSS styles or style
+ * classes are specified.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Text</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlOutputText extends javax.faces.component.UIOutput {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlOutputText() {
+        super();
+        setRendererType("javax.faces.Text");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlOutputText";
+
+
+    protected enum PropertyKeys {
+        dir,
+        escape,
+        lang,
+        role,
+        style,
+        styleClass,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>escape</code> property.</p>
+     * <p>Contents: Flag indicating that characters that are sensitive
+     * in HTML and XML markup must be escaped.  This flag
+     * is set to "true" by default.
+     */
+    public boolean isEscape() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.escape, true);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>escape</code> property.</p>
+     */
+    public void setEscape(boolean escape) {
+        getStateHelper().put(PropertyKeys.escape, escape);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlPanelGrid.java b/javax/faces/component/html/HtmlPanelGrid.java
new file mode 100644
index 0000000..b68d242
--- /dev/null
+++ b/javax/faces/component/html/HtmlPanelGrid.java
@@ -0,0 +1,796 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Renders child components in a table, starting a new
+ * row after the specified number of columns.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Grid</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlPanelGrid extends javax.faces.component.UIPanel implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlPanelGrid() {
+        super();
+        setRendererType("javax.faces.Grid");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlPanelGrid";
+
+
+    protected enum PropertyKeys {
+        bgcolor,
+        bodyrows,
+        border,
+        captionClass,
+        captionStyle,
+        cellpadding,
+        cellspacing,
+        columnClasses,
+        columns,
+        dir,
+        footerClass,
+        frame,
+        headerClass,
+        lang,
+        onclick,
+        ondblclick,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        role,
+        rowClasses,
+        rules,
+        style,
+        styleClass,
+        summary,
+        title,
+        width,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>bgcolor</code> property.</p>
+     * <p>Contents: Name or code of the background color for this table.
+     */
+    public java.lang.String getBgcolor() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.bgcolor);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>bgcolor</code> property.</p>
+     */
+    public void setBgcolor(java.lang.String bgcolor) {
+        getStateHelper().put(PropertyKeys.bgcolor, bgcolor);
+        handleAttribute("bgcolor", bgcolor);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>bodyrows</code> property.</p>
+     * <p>Contents: Comma separated list of row indices for which a new
+     * "tbody" element should be started (and any
+     * previously opened one should be ended).
+     */
+    public java.lang.String getBodyrows() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.bodyrows);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>bodyrows</code> property.</p>
+     */
+    public void setBodyrows(java.lang.String bodyrows) {
+        getStateHelper().put(PropertyKeys.bodyrows, bodyrows);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>border</code> property.</p>
+     * <p>Contents: Width (in pixels) of the border to be drawn
+     * around this table.
+     */
+    public int getBorder() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.border, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>border</code> property.</p>
+     */
+    public void setBorder(int border) {
+        getStateHelper().put(PropertyKeys.border, border);
+        handleAttribute("border", border);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>captionClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any caption generated for this table.
+     */
+    public java.lang.String getCaptionClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.captionClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>captionClass</code> property.</p>
+     */
+    public void setCaptionClass(java.lang.String captionClass) {
+        getStateHelper().put(PropertyKeys.captionClass, captionClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>captionStyle</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this caption is rendered.
+     */
+    public java.lang.String getCaptionStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.captionStyle);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>captionStyle</code> property.</p>
+     */
+    public void setCaptionStyle(java.lang.String captionStyle) {
+        getStateHelper().put(PropertyKeys.captionStyle, captionStyle);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>cellpadding</code> property.</p>
+     * <p>Contents: Definition of how much space the user agent should
+     * leave between the border of each cell and its contents.
+     */
+    public java.lang.String getCellpadding() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.cellpadding);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>cellpadding</code> property.</p>
+     */
+    public void setCellpadding(java.lang.String cellpadding) {
+        getStateHelper().put(PropertyKeys.cellpadding, cellpadding);
+        handleAttribute("cellpadding", cellpadding);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>cellspacing</code> property.</p>
+     * <p>Contents: Definition of how much space the user agent should
+     * leave between the left side of the table and the
+     * leftmost column, the top of the table and the top of
+     * the top side of the topmost row, and so on for the
+     * right and bottom of the table.  It also specifies
+     * the amount of space to leave between cells.
+     */
+    public java.lang.String getCellspacing() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.cellspacing);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>cellspacing</code> property.</p>
+     */
+    public void setCellspacing(java.lang.String cellspacing) {
+        getStateHelper().put(PropertyKeys.cellspacing, cellspacing);
+        handleAttribute("cellspacing", cellspacing);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>columnClasses</code> property.</p>
+     * <p>Contents: Comma-delimited list of CSS style classes that will be applied
+     * to the columns of this table.  A space separated list of
+     * classes may also be specified for any individual column.  If
+     * the number of elements in this list is less than the number of
+     * actual column children of the UIData, no "class"
+     * attribute is output for each column greater than the number of
+     * elements in the list.  If the number of elements in the list
+     * is greater than the number of actual column children of the
+     * UIData, the elements at the posisiton in the list
+     * after the last column are ignored.
+     */
+    public java.lang.String getColumnClasses() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.columnClasses);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>columnClasses</code> property.</p>
+     */
+    public void setColumnClasses(java.lang.String columnClasses) {
+        getStateHelper().put(PropertyKeys.columnClasses, columnClasses);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>columns</code> property.</p>
+     * <p>Contents: The number of columns to render before
+     * starting a new row.
+     */
+    public int getColumns() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.columns, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>columns</code> property.</p>
+     */
+    public void setColumns(int columns) {
+        getStateHelper().put(PropertyKeys.columns, columns);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>footerClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any footer generated for this table.
+     */
+    public java.lang.String getFooterClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.footerClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>footerClass</code> property.</p>
+     */
+    public void setFooterClass(java.lang.String footerClass) {
+        getStateHelper().put(PropertyKeys.footerClass, footerClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>frame</code> property.</p>
+     * <p>Contents: Code specifying which sides of the frame surrounding
+     * this table will be visible.  Valid values are:
+     * none (no sides, default value); above (top side only);
+     * below (bottom side only); hsides (top and bottom sides
+     * only); vsides (right and left sides only); lhs (left
+     * hand side only); rhs (right hand side only); box
+     * (all four sides); and border (all four sides).
+     */
+    public java.lang.String getFrame() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.frame);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>frame</code> property.</p>
+     */
+    public void setFrame(java.lang.String frame) {
+        getStateHelper().put(PropertyKeys.frame, frame);
+        handleAttribute("frame", frame);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>headerClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) that will be
+     * applied to any header generated for this table.
+     */
+    public java.lang.String getHeaderClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.headerClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>headerClass</code> property.</p>
+     */
+    public void setHeaderClass(java.lang.String headerClass) {
+        getStateHelper().put(PropertyKeys.headerClass, headerClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rowClasses</code> property.</p>
+     * <p>Contents: Comma-delimited list of CSS style classes that will be applied
+     * to the rows of this table.  A space separated list of classes
+     * may also be specified for any individual row.  Thes styles are
+     * applied, in turn, to each row in the table.  For example, if
+     * the list has two elements, the first style class in the list
+     * is applied to the first row, the second to the second row, the
+     * first to the third row, the second to the fourth row, etc.  In
+     * other words, we keep iterating through the list until we reach
+     * the end, and then we start at the beginning again.
+     */
+    public java.lang.String getRowClasses() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rowClasses);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rowClasses</code> property.</p>
+     */
+    public void setRowClasses(java.lang.String rowClasses) {
+        getStateHelper().put(PropertyKeys.rowClasses, rowClasses);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>rules</code> property.</p>
+     * <p>Contents: Code specifying which rules will appear between cells
+     * within this table.  Valid values are:  none (no rules,
+     * default value); groups (between row groups); rows
+     * (between rows only); cols (between columns only); and
+     * all (between all rows and columns).
+     */
+    public java.lang.String getRules() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.rules);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>rules</code> property.</p>
+     */
+    public void setRules(java.lang.String rules) {
+        getStateHelper().put(PropertyKeys.rules, rules);
+        handleAttribute("rules", rules);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>summary</code> property.</p>
+     * <p>Contents: Summary of this table's purpose and structure, for
+     * user agents rendering to non-visual media such as
+     * speech and Braille.
+     */
+    public java.lang.String getSummary() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.summary);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>summary</code> property.</p>
+     */
+    public void setSummary(java.lang.String summary) {
+        getStateHelper().put(PropertyKeys.summary, summary);
+        handleAttribute("summary", summary);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>width</code> property.</p>
+     * <p>Contents: Width of the entire table, for visual user agents.
+     */
+    public java.lang.String getWidth() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.width);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>width</code> property.</p>
+     */
+    public void setWidth(java.lang.String width) {
+        getStateHelper().put(PropertyKeys.width, width);
+        handleAttribute("width", width);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("click","dblclick","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlPanelGroup.java b/javax/faces/component/html/HtmlPanelGroup.java
new file mode 100644
index 0000000..63e4d9e
--- /dev/null
+++ b/javax/faces/component/html/HtmlPanelGroup.java
@@ -0,0 +1,388 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Causes all child components of this component
+ * to be rendered.  This is useful in scenarios
+ * where a parent component is expecting a single
+ * component to be present, but the application
+ * wishes to render more than one.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Group</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlPanelGroup extends javax.faces.component.UIPanel implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlPanelGroup() {
+        super();
+        setRendererType("javax.faces.Group");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlPanelGroup";
+
+
+    protected enum PropertyKeys {
+        layout,
+        onclick,
+        ondblclick,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        style,
+        styleClass,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>layout</code> property.</p>
+     * <p>Contents: The type of layout markup to use when rendering this group.
+     * If the value is "block" the renderer must produce an HTML
+     * "div" element.  Otherwise HTML "span" element must
+     * be produced.
+     */
+    public java.lang.String getLayout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.layout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>layout</code> property.</p>
+     */
+    public void setLayout(java.lang.String layout) {
+        getStateHelper().put(PropertyKeys.layout, layout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" property on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("click","dblclick","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return null;    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlSelectBooleanCheckbox.java b/javax/faces/component/html/HtmlSelectBooleanCheckbox.java
new file mode 100644
index 0000000..4e6a6c9
--- /dev/null
+++ b/javax/faces/component/html/HtmlSelectBooleanCheckbox.java
@@ -0,0 +1,640 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p><span
+ * class="changed_modified_2_0_rev_a">Represents</span> an HTML
+ * <code>input</code> element of type <code>checkbox</code>.
+ * The checkbox will be rendered as checked, or not, based on
+ * the value of the <code>value</code> property.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Checkbox</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlSelectBooleanCheckbox extends javax.faces.component.UISelectBoolean implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlSelectBooleanCheckbox() {
+        super();
+        setRendererType("javax.faces.Checkbox");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlSelectBooleanCheckbox";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        dir,
+        disabled,
+        label,
+        lang,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+        handleAttribute("onchange", onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","click","valueChange","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlSelectManyCheckbox.java b/javax/faces/component/html/HtmlSelectManyCheckbox.java
new file mode 100644
index 0000000..212878d
--- /dev/null
+++ b/javax/faces/component/html/HtmlSelectManyCheckbox.java
@@ -0,0 +1,758 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p><span
+ * class="changed_modified_2_0_rev_a">Represents</span> a
+ * multiple-selection component that is rendered as a set of
+ * HTML <code>input</code> elements of type
+ * <code>checkbox</code>.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Checkbox</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlSelectManyCheckbox extends javax.faces.component.UISelectMany implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlSelectManyCheckbox() {
+        super();
+        setRendererType("javax.faces.Checkbox");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlSelectManyCheckbox";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        border,
+        dir,
+        disabled,
+        disabledClass,
+        enabledClass,
+        label,
+        lang,
+        layout,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        selectedClass,
+        style,
+        styleClass,
+        tabindex,
+        title,
+        unselectedClass,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>border</code> property.</p>
+     * <p>Contents: Width (in pixels) of the border to be drawn
+     * around the table containing the options list.
+     */
+    public int getBorder() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.border, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>border</code> property.</p>
+     */
+    public void setBorder(int border) {
+        getStateHelper().put(PropertyKeys.border, border);
+        handleAttribute("border", border);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on disabled options.
+     */
+    public java.lang.String getDisabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.disabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabledClass</code> property.</p>
+     */
+    public void setDisabledClass(java.lang.String disabledClass) {
+        getStateHelper().put(PropertyKeys.disabledClass, disabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>enabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on enabled options.
+     */
+    public java.lang.String getEnabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.enabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>enabledClass</code> property.</p>
+     */
+    public void setEnabledClass(java.lang.String enabledClass) {
+        getStateHelper().put(PropertyKeys.enabledClass, enabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>layout</code> property.</p>
+     * <p>Contents: Orientation of the options list to be created.
+     * Valid values are "pageDirection" (list is laid
+     * out vertically), or "lineDirection" (list is
+     * laid out horizontally).  If not specified, the
+     * default value is "lineDirection".
+     */
+    public java.lang.String getLayout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.layout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>layout</code> property.</p>
+     */
+    public void setLayout(java.lang.String layout) {
+        getStateHelper().put(PropertyKeys.layout, layout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+        handleAttribute("onchange", onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>selectedClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on selected options.
+     */
+    public java.lang.String getSelectedClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.selectedClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>selectedClass</code> property.</p>
+     */
+    public void setSelectedClass(java.lang.String selectedClass) {
+        getStateHelper().put(PropertyKeys.selectedClass, selectedClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>unselectedClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on unselected options.
+     */
+    public java.lang.String getUnselectedClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.unselectedClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>unselectedClass</code> property.</p>
+     */
+    public void setUnselectedClass(java.lang.String unselectedClass) {
+        getStateHelper().put(PropertyKeys.unselectedClass, unselectedClass);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","click","valueChange","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlSelectManyListbox.java b/javax/faces/component/html/HtmlSelectManyListbox.java
new file mode 100644
index 0000000..09762d8
--- /dev/null
+++ b/javax/faces/component/html/HtmlSelectManyListbox.java
@@ -0,0 +1,695 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents a multiple-selection component that is rendered
+ * as an HTML <code>select</code> element, showing either all
+ * available options or the specified number of options.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Listbox</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlSelectManyListbox extends javax.faces.component.UISelectMany implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlSelectManyListbox() {
+        super();
+        setRendererType("javax.faces.Listbox");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlSelectManyListbox";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        dir,
+        disabled,
+        disabledClass,
+        enabledClass,
+        label,
+        lang,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        size,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on disabled options.
+     */
+    public java.lang.String getDisabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.disabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabledClass</code> property.</p>
+     */
+    public void setDisabledClass(java.lang.String disabledClass) {
+        getStateHelper().put(PropertyKeys.disabledClass, disabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>enabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on enabled options.
+     */
+    public java.lang.String getEnabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.enabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>enabledClass</code> property.</p>
+     */
+    public void setEnabledClass(java.lang.String enabledClass) {
+        getStateHelper().put(PropertyKeys.enabledClass, enabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>size</code> property.</p>
+     * <p>Contents: Number of available options to be shown at all times.
+     * If not specified, all available options are shown.
+     */
+    public int getSize() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.size, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>size</code> property.</p>
+     */
+    public void setSize(int size) {
+        getStateHelper().put(PropertyKeys.size, size);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlSelectManyMenu.java b/javax/faces/component/html/HtmlSelectManyMenu.java
new file mode 100644
index 0000000..f6e6769
--- /dev/null
+++ b/javax/faces/component/html/HtmlSelectManyMenu.java
@@ -0,0 +1,676 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents a multiple-selection component that is rendered
+ * as an HTML <code>select</code> element, showing a single
+ * available option at a time.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Menu</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlSelectManyMenu extends javax.faces.component.UISelectMany implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlSelectManyMenu() {
+        super();
+        setRendererType("javax.faces.Menu");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlSelectManyMenu";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        dir,
+        disabled,
+        disabledClass,
+        enabledClass,
+        label,
+        lang,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on disabled options.
+     */
+    public java.lang.String getDisabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.disabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabledClass</code> property.</p>
+     */
+    public void setDisabledClass(java.lang.String disabledClass) {
+        getStateHelper().put(PropertyKeys.disabledClass, disabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>enabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on enabled options.
+     */
+    public java.lang.String getEnabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.enabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>enabledClass</code> property.</p>
+     */
+    public void setEnabledClass(java.lang.String enabledClass) {
+        getStateHelper().put(PropertyKeys.enabledClass, enabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlSelectOneListbox.java b/javax/faces/component/html/HtmlSelectOneListbox.java
new file mode 100644
index 0000000..2a0be14
--- /dev/null
+++ b/javax/faces/component/html/HtmlSelectOneListbox.java
@@ -0,0 +1,695 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents a single-selection component that is rendered
+ * as an HTML <code>select</code> element, showing either all
+ * available options or the specified number of options.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Listbox</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlSelectOneListbox extends javax.faces.component.UISelectOne implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlSelectOneListbox() {
+        super();
+        setRendererType("javax.faces.Listbox");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlSelectOneListbox";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        dir,
+        disabled,
+        disabledClass,
+        enabledClass,
+        label,
+        lang,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        size,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on disabled options.
+     */
+    public java.lang.String getDisabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.disabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabledClass</code> property.</p>
+     */
+    public void setDisabledClass(java.lang.String disabledClass) {
+        getStateHelper().put(PropertyKeys.disabledClass, disabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>enabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on enabled options.
+     */
+    public java.lang.String getEnabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.enabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>enabledClass</code> property.</p>
+     */
+    public void setEnabledClass(java.lang.String enabledClass) {
+        getStateHelper().put(PropertyKeys.enabledClass, enabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>size</code> property.</p>
+     * <p>Contents: Number of available options to be shown at all times.
+     * If not specified, all available options are shown.
+     */
+    public int getSize() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.size, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>size</code> property.</p>
+     */
+    public void setSize(int size) {
+        getStateHelper().put(PropertyKeys.size, size);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlSelectOneMenu.java b/javax/faces/component/html/HtmlSelectOneMenu.java
new file mode 100644
index 0000000..fa46d55
--- /dev/null
+++ b/javax/faces/component/html/HtmlSelectOneMenu.java
@@ -0,0 +1,676 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p>Represents a single-selection component that is rendered
+ * as an HTML <code>select</code> element, showing a single
+ * available option at a time.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Menu</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlSelectOneMenu extends javax.faces.component.UISelectOne implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlSelectOneMenu() {
+        super();
+        setRendererType("javax.faces.Menu");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlSelectOneMenu";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        dir,
+        disabled,
+        disabledClass,
+        enabledClass,
+        label,
+        lang,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on disabled options.
+     */
+    public java.lang.String getDisabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.disabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabledClass</code> property.</p>
+     */
+    public void setDisabledClass(java.lang.String disabledClass) {
+        getStateHelper().put(PropertyKeys.disabledClass, disabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>enabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on enabled options.
+     */
+    public java.lang.String getEnabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.enabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>enabledClass</code> property.</p>
+     */
+    public void setEnabledClass(java.lang.String enabledClass) {
+        getStateHelper().put(PropertyKeys.enabledClass, enabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+        handleAttribute("onclick", onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","valueChange","click","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/HtmlSelectOneRadio.java b/javax/faces/component/html/HtmlSelectOneRadio.java
new file mode 100644
index 0000000..48b702c
--- /dev/null
+++ b/javax/faces/component/html/HtmlSelectOneRadio.java
@@ -0,0 +1,720 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.component.html;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+
+/*
+ * ******* GENERATED CODE - DO NOT EDIT *******
+ */
+
+
+/**
+ * <p><span
+ * class="changed_modified_2_0_rev_a">Represents</span> a
+ * single-selection component that is rendered as a set of HTML
+ * <code>input</code> elements of type
+ * <code>radio</code>.</p>
+ * <p>By default, the <code>rendererType</code> property must be set to "<code>javax.faces.Radio</code>".
+ * This value can be changed by calling the <code>setRendererType()</code> method.</p>
+ */
+public class HtmlSelectOneRadio extends javax.faces.component.UISelectOne implements ClientBehaviorHolder {
+
+
+
+    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
+
+    public HtmlSelectOneRadio() {
+        super();
+        setRendererType("javax.faces.Radio");
+    }
+
+
+    /**
+     * <p>The standard component type for this component.</p>
+     */
+    public static final String COMPONENT_TYPE = "javax.faces.HtmlSelectOneRadio";
+
+
+    protected enum PropertyKeys {
+        accesskey,
+        border,
+        dir,
+        disabled,
+        disabledClass,
+        enabledClass,
+        label,
+        lang,
+        layout,
+        onblur,
+        onchange,
+        onclick,
+        ondblclick,
+        onfocus,
+        onkeydown,
+        onkeypress,
+        onkeyup,
+        onmousedown,
+        onmousemove,
+        onmouseout,
+        onmouseover,
+        onmouseup,
+        onselect,
+        readonly,
+        role,
+        style,
+        styleClass,
+        tabindex,
+        title,
+;
+        String toString;
+        PropertyKeys(String toString) { this.toString = toString; }
+        PropertyKeys() { }
+        public String toString() {
+            return ((toString != null) ? toString : super.toString());
+        }
+}
+
+    /**
+     * <p>Return the value of the <code>accesskey</code> property.</p>
+     * <p>Contents: Access key that, when pressed, transfers focus
+     * to this element.
+     */
+    public java.lang.String getAccesskey() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.accesskey);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>accesskey</code> property.</p>
+     */
+    public void setAccesskey(java.lang.String accesskey) {
+        getStateHelper().put(PropertyKeys.accesskey, accesskey);
+        handleAttribute("accesskey", accesskey);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>border</code> property.</p>
+     * <p>Contents: Width (in pixels) of the border to be drawn
+     * around the table containing the options list.
+     */
+    public int getBorder() {
+        return (java.lang.Integer) getStateHelper().eval(PropertyKeys.border, Integer.MIN_VALUE);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>border</code> property.</p>
+     */
+    public void setBorder(int border) {
+        getStateHelper().put(PropertyKeys.border, border);
+        handleAttribute("border", border);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>dir</code> property.</p>
+     * <p>Contents: Direction indication for text that does not inherit directionality.
+     * Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
+     * These attributes are case sensitive when rendering to XHTML, so
+     * care must be taken to have the correct case.
+     */
+    public java.lang.String getDir() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.dir);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>dir</code> property.</p>
+     */
+    public void setDir(java.lang.String dir) {
+        getStateHelper().put(PropertyKeys.dir, dir);
+        handleAttribute("dir", dir);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabled</code> property.</p>
+     * <p>Contents: Flag indicating that this element must never receive focus or
+     * be included in a subsequent submit.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as disabled="disabled".
+     */
+    public boolean isDisabled() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.disabled, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabled</code> property.</p>
+     */
+    public void setDisabled(boolean disabled) {
+        getStateHelper().put(PropertyKeys.disabled, disabled);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>disabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on disabled options.
+     */
+    public java.lang.String getDisabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.disabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>disabledClass</code> property.</p>
+     */
+    public void setDisabledClass(java.lang.String disabledClass) {
+        getStateHelper().put(PropertyKeys.disabledClass, disabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>enabledClass</code> property.</p>
+     * <p>Contents: CSS style class to apply to the rendered label
+     * on enabled options.
+     */
+    public java.lang.String getEnabledClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.enabledClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>enabledClass</code> property.</p>
+     */
+    public void setEnabledClass(java.lang.String enabledClass) {
+        getStateHelper().put(PropertyKeys.enabledClass, enabledClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>label</code> property.</p>
+     * <p>Contents: A localized user presentable name for this component.
+     */
+    public java.lang.String getLabel() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.label);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>label</code> property.</p>
+     */
+    public void setLabel(java.lang.String label) {
+        getStateHelper().put(PropertyKeys.label, label);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>lang</code> property.</p>
+     * <p>Contents: Code describing the language used in the generated markup
+     * for this component.
+     */
+    public java.lang.String getLang() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.lang);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>lang</code> property.</p>
+     */
+    public void setLang(java.lang.String lang) {
+        getStateHelper().put(PropertyKeys.lang, lang);
+        handleAttribute("lang", lang);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>layout</code> property.</p>
+     * <p>Contents: Orientation of the options list to be created.
+     * Valid values are "pageDirection" (list is laid
+     * out vertically), or "lineDirection" (list is
+     * laid out horizontally).  If not specified, the
+     * default value is "lineDirection".
+     */
+    public java.lang.String getLayout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.layout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>layout</code> property.</p>
+     */
+    public void setLayout(java.lang.String layout) {
+        getStateHelper().put(PropertyKeys.layout, layout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onblur</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus.
+     */
+    public java.lang.String getOnblur() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onblur);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onblur</code> property.</p>
+     */
+    public void setOnblur(java.lang.String onblur) {
+        getStateHelper().put(PropertyKeys.onblur, onblur);
+        handleAttribute("onblur", onblur);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onchange</code> property.</p>
+     * <p>Contents: Javascript code executed when this element loses focus
+     * and its value has been modified since gaining focus.
+     */
+    public java.lang.String getOnchange() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onchange);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onchange</code> property.</p>
+     */
+    public void setOnchange(java.lang.String onchange) {
+        getStateHelper().put(PropertyKeys.onchange, onchange);
+        handleAttribute("onchange", onchange);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * clicked over this element.
+     */
+    public java.lang.String getOnclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onclick</code> property.</p>
+     */
+    public void setOnclick(java.lang.String onclick) {
+        getStateHelper().put(PropertyKeys.onclick, onclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>ondblclick</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * double clicked over this element.
+     */
+    public java.lang.String getOndblclick() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.ondblclick);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>ondblclick</code> property.</p>
+     */
+    public void setOndblclick(java.lang.String ondblclick) {
+        getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+        handleAttribute("ondblclick", ondblclick);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onfocus</code> property.</p>
+     * <p>Contents: Javascript code executed when this element receives focus.
+     */
+    public java.lang.String getOnfocus() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onfocus);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onfocus</code> property.</p>
+     */
+    public void setOnfocus(java.lang.String onfocus) {
+        getStateHelper().put(PropertyKeys.onfocus, onfocus);
+        handleAttribute("onfocus", onfocus);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeydown</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnkeydown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeydown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeydown</code> property.</p>
+     */
+    public void setOnkeydown(java.lang.String onkeydown) {
+        getStateHelper().put(PropertyKeys.onkeydown, onkeydown);
+        handleAttribute("onkeydown", onkeydown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeypress</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * pressed and released over this element.
+     */
+    public java.lang.String getOnkeypress() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeypress);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeypress</code> property.</p>
+     */
+    public void setOnkeypress(java.lang.String onkeypress) {
+        getStateHelper().put(PropertyKeys.onkeypress, onkeypress);
+        handleAttribute("onkeypress", onkeypress);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onkeyup</code> property.</p>
+     * <p>Contents: Javascript code executed when a key is
+     * released over this element.
+     */
+    public java.lang.String getOnkeyup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onkeyup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onkeyup</code> property.</p>
+     */
+    public void setOnkeyup(java.lang.String onkeyup) {
+        getStateHelper().put(PropertyKeys.onkeyup, onkeyup);
+        handleAttribute("onkeyup", onkeyup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousedown</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * pressed down over this element.
+     */
+    public java.lang.String getOnmousedown() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousedown);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousedown</code> property.</p>
+     */
+    public void setOnmousedown(java.lang.String onmousedown) {
+        getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+        handleAttribute("onmousedown", onmousedown);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmousemove</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved within this element.
+     */
+    public java.lang.String getOnmousemove() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmousemove);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmousemove</code> property.</p>
+     */
+    public void setOnmousemove(java.lang.String onmousemove) {
+        getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+        handleAttribute("onmousemove", onmousemove);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseout</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved away from this element.
+     */
+    public java.lang.String getOnmouseout() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseout);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseout</code> property.</p>
+     */
+    public void setOnmouseout(java.lang.String onmouseout) {
+        getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+        handleAttribute("onmouseout", onmouseout);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseover</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * moved onto this element.
+     */
+    public java.lang.String getOnmouseover() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseover);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseover</code> property.</p>
+     */
+    public void setOnmouseover(java.lang.String onmouseover) {
+        getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+        handleAttribute("onmouseover", onmouseover);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onmouseup</code> property.</p>
+     * <p>Contents: Javascript code executed when a pointer button is
+     * released over this element.
+     */
+    public java.lang.String getOnmouseup() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onmouseup);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onmouseup</code> property.</p>
+     */
+    public void setOnmouseup(java.lang.String onmouseup) {
+        getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+        handleAttribute("onmouseup", onmouseup);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>onselect</code> property.</p>
+     * <p>Contents: Javascript code executed when text within this
+     * element is selected by the user.
+     */
+    public java.lang.String getOnselect() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.onselect);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>onselect</code> property.</p>
+     */
+    public void setOnselect(java.lang.String onselect) {
+        getStateHelper().put(PropertyKeys.onselect, onselect);
+        handleAttribute("onselect", onselect);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>readonly</code> property.</p>
+     * <p>Contents: Flag indicating that this component will prohibit changes by
+     * the user.  The element may receive focus unless it has also
+     * been disabled.  A value of false causes
+     * no attribute to be rendered, while a value of true causes the
+     * attribute to be rendered as readonly="readonly".
+     */
+    public boolean isReadonly() {
+        return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.readonly, false);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>readonly</code> property.</p>
+     */
+    public void setReadonly(boolean readonly) {
+        getStateHelper().put(PropertyKeys.readonly, readonly);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>role</code> property.</p>
+     * <p>Contents: <p class="changed_added_2_2">Per the WAI-ARIA spec and its
+     * relationship to HTML5 (Section title ARIA Role Attriubute),
+     * every HTML element may have a "role" attribute whose value
+     * must be passed through unmodified on the element on which it
+     * is declared in the final rendered markup.  The attribute, if
+     * specified, must have a value that is a string literal that is,
+     * or an EL Expression that evaluates to, a set of
+     * space-separated tokens representing the various WAI-ARIA roles
+     * that the element belongs to.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">It is the page author's
+     * responsibility to ensure that the user agent is capable of
+     * correctly interpreting the value of this attribute.</p>
+     */
+    public java.lang.String getRole() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.role);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>role</code> property.</p>
+     */
+    public void setRole(java.lang.String role) {
+        getStateHelper().put(PropertyKeys.role, role);
+        handleAttribute("role", role);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>style</code> property.</p>
+     * <p>Contents: CSS style(s) to be applied when this component is rendered.
+     */
+    public java.lang.String getStyle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.style);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>style</code> property.</p>
+     */
+    public void setStyle(java.lang.String style) {
+        getStateHelper().put(PropertyKeys.style, style);
+        handleAttribute("style", style);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>styleClass</code> property.</p>
+     * <p>Contents: Space-separated list of CSS style class(es) to be applied when
+     * this element is rendered.  This value must be passed through
+     * as the "class" attribute on generated markup.
+     */
+    public java.lang.String getStyleClass() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>styleClass</code> property.</p>
+     */
+    public void setStyleClass(java.lang.String styleClass) {
+        getStateHelper().put(PropertyKeys.styleClass, styleClass);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>tabindex</code> property.</p>
+     * <p>Contents: Position of this element in the tabbing order
+     * for the current document.  This value must be
+     * an integer between 0 and 32767.
+     */
+    public java.lang.String getTabindex() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.tabindex);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>tabindex</code> property.</p>
+     */
+    public void setTabindex(java.lang.String tabindex) {
+        getStateHelper().put(PropertyKeys.tabindex, tabindex);
+        handleAttribute("tabindex", tabindex);
+    }
+
+
+    /**
+     * <p>Return the value of the <code>title</code> property.</p>
+     * <p>Contents: Advisory title information about markup elements generated
+     * for this component.
+     */
+    public java.lang.String getTitle() {
+        return (java.lang.String) getStateHelper().eval(PropertyKeys.title);
+
+    }
+
+    /**
+     * <p>Set the value of the <code>title</code> property.</p>
+     */
+    public void setTitle(java.lang.String title) {
+        getStateHelper().put(PropertyKeys.title, title);
+        handleAttribute("title", title);
+    }
+
+
+    private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("blur","change","click","valueChange","dblclick","focus","keydown","keypress","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","select"));
+
+    public Collection<String> getEventNames() {
+        return EVENT_NAMES;    }
+
+
+    public String getDefaultEventName() {
+        return "valueChange";    }
+
+
+    private void handleAttribute(String name, Object value) {
+        List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet");
+        if (setAttributes == null) {
+            String cname = this.getClass().getName();
+            if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {
+                setAttributes = new ArrayList<String>(6);
+                this.getAttributes().put("javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes);
+            }
+        }
+        if (setAttributes != null) {
+            if (value == null) {
+                ValueExpression ve = getValueExpression(name);
+                if (ve == null) {
+                    setAttributes.remove(name);
+                }
+            } else if (!setAttributes.contains(name)) {
+                setAttributes.add(name);
+            }
+        }
+    }
+
+}
diff --git a/javax/faces/component/html/package.html b/javax/faces/component/html/package.html
new file mode 100644
index 0000000..a7a32a0
--- /dev/null
+++ b/javax/faces/component/html/package.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.component.html"</title>
+<body bgcolor="white">
+<p><span class="changed_modified_2_0_rev_a">Specialized</span> user
+interface component classes for HTML.</p>
+</body>
+</html>
+
diff --git a/javax/faces/component/package.html b/javax/faces/component/package.html
new file mode 100644
index 0000000..4d37497
--- /dev/null
+++ b/javax/faces/component/package.html
@@ -0,0 +1,58 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.component"</title>
+<body bgcolor="white">
+
+<p><span class="changed_modified_2_0"><span class="changed_modified_2_0_rev_a changed_modified_2_1"><span class="changed_modified_2_2">Fundamental</span></span></span> APIs for user
+interface components.</p>
+
+<p>For your convenience here is a UML class diagram of the classes in
+this package.</p>
+
+<img src="UIComponentHierarchy.jpg"></img>
+
+</body>
+</html>
+
diff --git a/javax/faces/component/visit/VisitCallback.java b/javax/faces/component/visit/VisitCallback.java
new file mode 100644
index 0000000..fd72b9a
--- /dev/null
+++ b/javax/faces/component/visit/VisitCallback.java
@@ -0,0 +1,74 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.visit;
+
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ * <p class="changed_added_2_0">A simple callback interface that enables 
+ * taking action on a specific UIComponent (either facet or child) during 
+ * a component tree visit.</p>
+ * 
+ * @see UIComponent#visitTree UIComponent.visitTree()
+ *
+ * @since 2.0
+ */
+public interface VisitCallback {
+    
+    /**
+     * <p>This method is called during component tree visits by 
+     * {@link VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()} 
+     * to visit the specified component.  At the point in time when this 
+     * method is called, the argument {@code target} is guaranteed
+     * to be in the proper state with respect to its ancestors in the
+     * View.</p>
+     *
+     * @param context the {@link VisitContext} for this tree visit.
+     *
+     * @param target the {@link UIComponent} to visit
+     *
+     * @return a {@link VisitResult} that indicates whether to continue
+     *   visiting the component's subtree, skip visiting the component's
+     *   subtree or end the visit.
+     */
+    public VisitResult visit(VisitContext context, UIComponent target);
+}
diff --git a/javax/faces/component/visit/VisitContext.java b/javax/faces/component/visit/VisitContext.java
new file mode 100644
index 0000000..a386431
--- /dev/null
+++ b/javax/faces/component/visit/VisitContext.java
@@ -0,0 +1,240 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.visit;
+
+import java.util.AbstractCollection;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * <p class="changed_added_2_0">A context object that is used to hold 
+ * state relating to performing a component tree visit.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p>Component tree visits are initiated by calling {@link
+ * UIComponent#visitTree}, at which point both a
+ * {@link VisitContext} and a {@link VisitCallback} must be provided.</p>
+ * </div>
+ *
+ * @see UIComponent#visitTree UIComponent.visitTree()
+ * @see VisitCallback
+ *
+ * @since 2.0
+ */
+abstract public class VisitContext {
+
+    // Design notes: The VisitContext contract could be defined
+    // as an interface.  However, there is the potential that we
+    // may need to add new methods in the future, so leaving as 
+    // an abstract class in order to have room to grow.
+    // 
+    // Since we are an abstract class rather than an interface,
+    // we could provide implementations of of some of the simpler
+    // methods (eg. getFacesContext() and getHints()) to avoid 
+    // duplicating this code in VisitContext implementations.
+    // However, doing so would mean that "wrapping" VisitContext
+    // implementations would be forced to pick up such implementations,
+    // so going with a pure contract (no implementation).
+
+    /**
+     * <p class="changed_added_2_0">This unmodifiable Collection is
+     * returned by <code>getIdsToVisit()</code> and
+     * <code>getSubtreeIdsToVisit()</code> in cases where all ids should
+     * be visited.</p>
+
+     * <p class="changed_added_2_0">To simplify logic for
+     * <code>visitTree()</code> implementations, this Collection always
+     * returns <code>false</code> for <code>isEmpty</code>.  All other
+     * methods throw <code>UnsupportedOperationException</code>.</p>
+     *
+     * @since 2.0
+     */
+    // Note: We cannot use Collections.emptyList() as that returns
+    // a shared instance - we want to unique instance to allow for
+    // identity tests.
+    static public final Collection<String> ALL_IDS = 
+        new AbstractCollection<String>() {
+
+            @Override
+            public Iterator<String> iterator() {
+                throw new UnsupportedOperationException(
+                    "VisitContext.ALL_IDS does not support this operation");
+            }
+
+            @Override
+            public int size() {
+                throw new UnsupportedOperationException(
+                    "VisitContext.ALL_IDS does not support this operation");
+            }
+
+            @Override
+            public boolean isEmpty() {
+                return false;
+            }
+        };
+
+    /**
+     * <p class="changed_added_2_0">Returns the FacesContext for the
+     * current request.</p>
+     * @since 2.0
+     */
+    abstract public FacesContext getFacesContext();
+
+    /**
+     * <p class="changed_added_2_0"> Returns the ids of the components
+     * to visit.  </p>
+
+     * <p class="changed_added_2_0"> In the case of a full tree visit,
+     * this method returns the ALL_IDS collection.  Otherwise, if a
+     * partial visit is beign performed, returns a modifiable collection
+     * containing the client ids of the components that should be
+     * visited.  </p>
+     */
+    abstract public Collection<String> getIdsToVisit();
+
+    /**
+     * <p class="changed_added_2_0"> Given a {@link
+     * javax.faces.component.NamingContainer} component, returns the
+     * client ids of any components underneath the NamingContainer that
+     * should be visited.  </p>
+
+     * <div class="changed_added_2_0">
+
+     * <p> This method is called by NamingContainer visitTree()
+     * implementations to determine whether the NamingContainer contains
+     * components to be visited.  In the case where no such components
+     * exist, the NamingContainer can short-circuit the tree visit and
+     * avoid descending into child subtrees.  </p>
+
+     * <p> In addition, iterating components such as UIData may be able
+     * to use the returned ids to determine which iterated states
+     * (ie. rows) need to be visited.  This allows the visit traversal
+     * to be contstrained such only those rows that contain visit
+     * targets need to be traversed.  </p>
+
+     * </div>
+
+     * @param component a NamingContainer component
+     * @return an unmodifiable Collection containing the client ids of 
+     *   any components underneath the NamingContainer that are known to be
+     *   targets of the tree visit.  If no such components exist, returns 
+     *   an empty Collection.  If all components underneath the 
+     *   NamingContainer should be visited, returns the
+     *   {@code VisitContext.ALL_IDS} collection.
+     * @throws IllegalArgumentException if {@code component} is not
+     *  an instance of NamingContainer
+     */
+    abstract public Collection<String> getSubtreeIdsToVisit(UIComponent component);
+
+    /**
+     * <p>Called by {@link UIComponent#visitTree UIComponent.visitTree()}
+     * to visit a single component.</p>
+     *
+     * @param component the component to visit
+     * @param callback the VisitCallback to call
+     * @return a VisitResult value that indicates whether to continue
+     *   visiting the component's subtree, skip visiting the component's
+     *   subtree or abort the visit altogether.
+     */
+    abstract public VisitResult invokeVisitCallback(UIComponent component, 
+                                                    VisitCallback callback); 
+
+    /**
+     * <p>Returns hints that influence the behavior of the tree visit.</p>
+     *
+     * <p>Interested parties, such as 
+     * {@link UIComponent#visitTree UIComponent.visitTree()} implementations,
+     * may check to see whether a particular hint is present by calling
+     * {@code VisitContext.getHints().contains()}, passing in one of the
+     * hints defined by {@link VisitHint}.
+     *   
+     * @return a non-empty, unmodifiable collection of VisitHints
+     */
+    abstract public Set<VisitHint> getHints();
+
+
+    /**
+     * <p>Returns a VisitContext instance that is initialized with the
+     * specified ids and hintsfor use with {@link
+     * UIComponent#visitTree}.</p>
+     *
+     * @param context the FacesContext for the current request
+     * @param ids the client ids of the components to visit.  If null,
+     *   all components will be visited.
+     * @param hints the VisitHints to apply to the visit.  If
+     * <code>null</code>, no hints are applied.
+
+     * @return a VisitContext instance that is initialized with the 
+     *   specified ids and hints.
+     */
+    public static VisitContext createVisitContext(FacesContext context,
+                                                  Collection<String> ids,
+                                                  Set<VisitHint> hints) {
+
+        VisitContextFactory factory = (VisitContextFactory)
+                FactoryFinder.getFactory(FactoryFinder.VISIT_CONTEXT_FACTORY);
+        return factory.getVisitContext(context, ids, hints);
+
+    }
+
+    /**
+     * <p>Creates a VisitContext instance for use with 
+     * {@link UIComponent#visitTree UIComponent.visitTree()}.
+     * This method can be used to obtain a VisitContext instance
+     * when all components should be visited with the default
+     * visit hints.</p>
+     * @param context the FacesContext for the current request
+     * @return a VisitContext instance
+     */
+    public static VisitContext createVisitContext(FacesContext context) {
+
+        return createVisitContext(context, null, null);
+        
+    }
+    
+}
diff --git a/javax/faces/component/visit/VisitContextFactory.java b/javax/faces/component/visit/VisitContextFactory.java
new file mode 100644
index 0000000..aeaefe1
--- /dev/null
+++ b/javax/faces/component/visit/VisitContextFactory.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.visit;
+
+import java.util.Collection;
+import java.util.Set;
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0">Provide for separation of interface and
+ * implementation for the {@link VisitContext} contract.</p>
+ * 
+
+ * @since 2.0
+ */
+public abstract class VisitContextFactory implements FacesWrapper<VisitContextFactory> {
+
+    public VisitContextFactory() {
+    }
+    
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * @since 2.0
+     */
+    public VisitContextFactory getWrapped() {
+        return null;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return a new {@link VisitContext}
+     * instance.</p>
+     * @param context the <code>FacesContext</code> for this request.
+     * @param ids a <code>Collection</code> of clientIds to visit.  If
+     * <code>null</code> all components will be visited.
+     * @param hints the <code>VisitHints</code> that apply to this
+     * visit.
+     * @since 2.0
+     */
+    public abstract VisitContext getVisitContext(FacesContext context, 
+            Collection<String> ids, Set<VisitHint> hints);
+    
+}
diff --git a/javax/faces/component/visit/VisitContextWrapper.java b/javax/faces/component/visit/VisitContextWrapper.java
new file mode 100644
index 0000000..0a7acf6
--- /dev/null
+++ b/javax/faces/component/visit/VisitContextWrapper.java
@@ -0,0 +1,93 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.visit;
+
+import java.util.Collection;
+import java.util.Set;
+import javax.faces.FacesWrapper;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0">Provides a simple implementation of
+ * {@link VisitContext} that can be subclassed by developers wishing to
+ * provide specialized behavior to an existing {@link VisitContext}
+ * instance.  The default implementation of all methods is to call
+ * through to the wrapped {@link VisitContext} instance.</p>
+ *
+ * <p class="changed_added_2_0">Usage: extend this class and override
+ * {@link #getWrapped} to return the instance we are wrapping.</p>
+ *
+ * @since 2.0
+ */
+public abstract class VisitContextWrapper extends VisitContext implements FacesWrapper<VisitContext>{
+
+    @Override
+    public FacesContext getFacesContext() {
+        return getWrapped().getFacesContext();
+    }
+
+    @Override
+    public Set<VisitHint> getHints() {
+        return getWrapped().getHints();
+    }
+
+    @Override
+    public Collection<String> getIdsToVisit() {
+        return getWrapped().getIdsToVisit();
+    }
+
+    @Override
+    public Collection<String> getSubtreeIdsToVisit(UIComponent component) {
+        return getWrapped().getSubtreeIdsToVisit(component);
+    }
+
+    @Override
+    public VisitResult invokeVisitCallback(UIComponent component, VisitCallback callback) {
+        return getWrapped().invokeVisitCallback(component, callback);
+    }
+
+    @Override
+    public abstract VisitContext getWrapped();
+
+    
+    
+}
diff --git a/javax/faces/component/visit/VisitHint.java b/javax/faces/component/visit/VisitHint.java
new file mode 100644
index 0000000..35797d8
--- /dev/null
+++ b/javax/faces/component/visit/VisitHint.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.visit;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_1">An</span>
+ * enum that specifies hints that impact
+ * the behavior of a component tree visit.</p>
+
+ * @since 2.0
+ */
+public enum VisitHint {
+
+  /** 
+   * <p class="changed_added_2_0">Hint that indicates that only the
+   * rendered subtrees should be visited.</p>
+   * @since 2.0
+   */
+  SKIP_UNRENDERED,
+
+  /** 
+   * <p class="changed_added_2_0">Hint that indicates that only
+   * non-transient subtrees should be visited.</p>
+   * @since 2.0
+   */
+  SKIP_TRANSIENT,
+
+  /** 
+   * <p class="changed_added_2_1">Hint that indicates that components
+   * that normally visit children multiple times (eg. <code>UIData</code>)
+   * in an iterative fashion should instead visit each child only one time.</p>
+   * @since 2.1
+   */
+  SKIP_ITERATION,
+
+  /**
+   * <p class="changed_added_2_0">Hint that indicates that the visit is
+   * being performed as part of lifecycle phase execution and as such
+   * phase-specific actions (initialization) may be taken.</p>
+   * @since 2.0
+   */
+  EXECUTE_LIFECYCLE,
+
+}
diff --git a/javax/faces/component/visit/VisitResult.java b/javax/faces/component/visit/VisitResult.java
new file mode 100644
index 0000000..51d85be
--- /dev/null
+++ b/javax/faces/component/visit/VisitResult.java
@@ -0,0 +1,74 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.component.visit;
+
+/**
+ *
+ * <p class="changed_added_2_0">An enum that specifies the possible 
+ * results of a call to {@link VisitCallback#visit}.
+ * </p>
+ *
+ * @see VisitCallback#visit VisitCallback.visit()
+ *
+ * @since 2.0
+ */
+public enum VisitResult {
+
+  /**
+   * <p class="changed_added_2_0">This result indicates that the tree
+   * visit should descend into current component's subtree.</p>
+   * @since 2.0
+   */ 
+  ACCEPT,
+
+  /**
+   * <p class="changed_added_2_0">This result indicates that the tree
+   * visit should continue, but should skip the current component's
+   * subtree.</p>
+   */ 
+  REJECT,
+
+  /**
+   * <p class="changed_added_2_0">This result indicates that the tree
+   * visit should be terminated.</p>
+   */ 
+  COMPLETE
+}
diff --git a/javax/faces/component/visit/package.html b/javax/faces/component/visit/package.html
new file mode 100644
index 0000000..4860015
--- /dev/null
+++ b/javax/faces/component/visit/package.html
@@ -0,0 +1,85 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.component.visit"</title>
+<body bgcolor="white">
+
+<p class="changed_added_2_0"><span class="changed_modified_2_1 changed_modified_2_2">APIs</span> for
+traversing a user interface component view.</p>
+
+<div class="changed_added_2_0">
+
+<p>The following example visits all nodes in the view.</p>
+
+<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1">UIViewRoot root = facesContext.<span class="me1">getViewRoot</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
+<li class="li2"><div class="de2">root.<span class="me1">visitTree</span><span class="br0">(</span>VisitContext.<span class="me1">createVisitContext</span><span class="br0">(</span>context<span class="br0">)</span>, </div></li>
+<li class="li1"><div class="de1">               <span class="kw2">new</span> VisitCallback<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
+<li class="li2"><div class="de2">                   <span class="kw2">public</span> VisitResult visit<span class="br0">(</span>VisitContext context, </div></li>
+<li class="li1"><div class="de1">                                            UIComponent target<span class="br0">)</span> <span class="br0">{</span></div></li>
+<li class="li2"><div class="de2">                       <span class="co1">// take some action on target</span></div></li>
+<li class="li1"><div class="de1">                       <span class="kw2">return</span> VisitResult.<span class="me1">ACCEPT</span>;</div></li>
+<li class="li2"><div class="de2">                   <span class="br0">}</span></div></li>
+<li class="li1"><div class="de1">               <span class="br0">}</span><span class="br0">)</span>; </div></li></ol></div></div>
+
+<p>The following example visits two subtrees within the component
+view.</p>
+
+<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1">Set<String> toVisit = getSet<span class="br0">(</span><span class="st0">"form1:optionsPanel"</span>, <span class="st0">"form2:detailPanel"</span><span class="br0">)</span>;</div></li>
+<li class="li2"><div class="de2">UIViewRoot root = facesContext.<span class="me1">getViewRoot</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
+<li class="li1"><div class="de1">root.<span class="me1">visitTree</span><span class="br0">(</span>VisitContext.<span class="me1">createVisitContext</span><span class="br0">(</span>context, toVisit, <span class="kw2">null</span><span class="br0">)</span>, </div></li>
+<li class="li2"><div class="de2">               <span class="kw2">new</span> VisitCallback<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
+<li class="li1"><div class="de1">                   <span class="kw2">public</span> VisitResult visit<span class="br0">(</span>VisitContext context, </div></li>
+<li class="li2"><div class="de2">                                            UIComponent target<span class="br0">)</span> <span class="br0">{</span></div></li>
+<li class="li1"><div class="de1">                       <span class="co1">// take some action on target</span></div></li>
+<li class="li2"><div class="de2">                       <span class="kw2">return</span> VisitResult.<span class="me1">ACCEPT</span>;</div></li>
+<li class="li1"><div class="de1">                   <span class="br0">}</span></div></li>
+<li class="li2"><div class="de2">               <span class="br0">}</span><span class="br0">)</span>; </div></li></ol></div></div>
+
+<p>Note that every child node of those two subtrees is visited.</p>
+
+</div>
+
+</body>
+</html>
+
diff --git a/javax/faces/context/ExceptionHandler.java b/javax/faces/context/ExceptionHandler.java
new file mode 100644
index 0000000..23e1a45
--- /dev/null
+++ b/javax/faces/context/ExceptionHandler.java
@@ -0,0 +1,186 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import javax.faces.FacesException;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+
+
+/**
+ * <p class="changed_added_2_0"><strong>ExceptionHandler</strong> is the
+ * central point for handling <em>unexpected</em>
+ * <code>Exception</code>s that are thrown during the Faces
+ * lifecycle. The <code>ExceptionHandler</code> must not be notified of
+ * any <code>Exception</code>s that occur during application startup or
+ * shutdown.</p>
+
+ * <div class="changed_added_2_0">
+ *
+ * <p>See the specification prose document for the requirements for the
+ * default implementation.  <code>Exception</code>s may be passed to the
+ * <code>ExceptionHandler</code> in one of two ways:</p>
+ *
+ * <ul>
+ *
+ * <li><p>by ensuring that <code>Exception</code>s are not caught, or
+ * are caught and re-thrown.</p>
+ *
+ *         <p>This approach allows the <code>ExceptionHandler</code>
+ *         facility specified in section JSF.6.2 to operate on the
+ *         <code>Exception</code>.</p>
+ *
+ *         </li>
+ *
+ * <li><p>By using the system event facility to publish an {@link
+ * ExceptionQueuedEvent} that wraps the <code>Exception</code>.</p>
+ *
+ *         <p>This approach requires manually publishing the {@link
+ *         ExceptionQueuedEvent}, but allows more information about the
+ *         <code>Exception</code>to be stored in the event.  The
+ *         following code is an example of how to do this.</p>
+ *
+ * <pre><code>
+ *
+ * //...
+ * } catch (Exception e) {
+ *   FacesContext ctx = FacesContext.getCurrentInstance();
+ *   ExceptionQueuedEventContext eventContext = new ExceptionQueuedEventContext(ctx, e);
+ *   eventContext.getAttributes().put("key", "value");
+ *   ctx.getApplication().publishEvent(ExceptionQueuedEvent.class, eventContext);
+ * }
+ *
+ * </code></pre>
+ *
+ *            <p>Because the <code>Exception</code> must not be re-thrown
+ *            when using this approach, lifecycle processing may continue
+ *            as normal, allowing more <code>Exception</code>s to be
+ *            published if necessary.</p>
+ *
+ *         </li>
+ * </ul>
+ *
+ * <p>With either approach, any <code>ExceptionQueuedEvent</code> instances
+ * that are published in this way are accessible to the {@link #handle}
+ * method, which is called at the end of each lifecycle phase, as
+ * specified in section JSF.6.2.</p>
+
+ * <p>Instances of this class are request scoped and are created by
+ * virtue of {@link FacesContextFactory#getFacesContext} calling {@link
+ * ExceptionHandlerFactory#getExceptionHandler}.</p>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class ExceptionHandler implements SystemEventListener {
+
+   /**
+    * <p class="changed_added_2_0">Take action to handle the
+    * <code>Exception</code> instances residing inside the {@link
+    * ExceptionQueuedEvent} instances that have been queued by calls to
+    * <code>Application().publishEvent(ExceptionQueuedEvent.class,
+    * <em>eventContext</em>)</code>.  The requirements of the default
+    * implementation are detailed in section JSF.6.2.1.</p>
+
+    * @throws FacesException if and only if a problem occurs while
+    * performing the algorithm to handle the <code>Exception</code>, not
+    * as a means of conveying a handled <code>Exception</code> itself.
+    *
+    * @since 2.0
+    */
+    public abstract void handle() throws FacesException;
+
+
+    /**
+     * <p class="changed_added_2_0">Return the first
+     * <code>ExceptionQueuedEvent</code> handled by this handler.</p>
+     */
+    public abstract ExceptionQueuedEvent getHandledExceptionQueuedEvent();
+
+
+    /**
+     * <p class="changed_added_2_0">Return an <code>Iterable</code> over
+     * all <code>ExceptionQueuedEvent</code>s that have not yet been handled
+     * by the {@link #handle} method.</p>
+     */
+    public abstract Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents();
+
+
+    /**
+     * <p class="changed_added_2_0">The default implementation must
+     * return an <code>Iterable</code> over all
+     * <code>ExceptionQueuedEvent</code>s that have been handled by the {@link
+     * #handle} method.</p>
+     */
+    public abstract Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents();
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public abstract void processEvent(SystemEvent exceptionQueuedEvent) throws AbortProcessingException;
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public abstract boolean isListenerForSource(Object source);
+
+    
+    /**
+     * <p class="changed_added_2_0">Unwrap the argument <code>t</code>
+     * until the unwrapping encounters an Object whose
+     * <code>getClass()</code> is not equal to
+     * <code>FacesException.class</code> or
+     * <code>javax.el.ELException.class</code>.  If there is no root cause, <code>null</code> is returned.</p>
+
+     * @throws NullPointerException if argument <code>t</code> is
+     * <code>null</code>.
+
+     * @since 2.0
+     */
+    public abstract Throwable getRootCause(Throwable t);
+
+}
+
diff --git a/javax/faces/context/ExceptionHandlerFactory.java b/javax/faces/context/ExceptionHandlerFactory.java
new file mode 100644
index 0000000..f5d43f4
--- /dev/null
+++ b/javax/faces/context/ExceptionHandlerFactory.java
@@ -0,0 +1,94 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import javax.faces.FacesWrapper;
+
+/**
+ * <p class="changed_added_2_0"><strong>ExceptionHandlerFactory</strong>
+ * is a factory object that creates (if needed) and returns a new {@link
+ * ExceptionHandler} instance.</p>
+ *
+ * <div class="changed_added_2_0">
+
+ * <p>There must be one <code>ExceptionHandlerFactory</code> instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ *
+ * <pre><code>
+ *   ExceptionHandlerFactory factory = (ExceptionHandlerFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY);
+ * </code></pre>
+ *
+
+ * </div>
+ *
+ * @since 2.0
+ */
+
+public abstract class ExceptionHandlerFactory implements FacesWrapper<ExceptionHandlerFactory> {
+
+    public ExceptionHandlerFactory() {
+    }
+    
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     */
+    public ExceptionHandlerFactory getWrapped() {
+        return null;
+    }
+
+    
+    /**
+     * <p class="changed_added_2_0">Create and return a A new
+     * <code>ExceptionHandler</code> instance.  The implementation must return
+     * an <code>ExceptionHandler</code> instance suitable for the environment.
+     * For example, in some cases it may be desirable for an 
+     * <code>ExceptionHandler</code> to write error information
+     * to the response instead of throwing exceptions as in the case of
+     * Ajax applications.</p> 
+     */
+    public abstract ExceptionHandler getExceptionHandler();
+    
+}
diff --git a/javax/faces/context/ExceptionHandlerWrapper.java b/javax/faces/context/ExceptionHandlerWrapper.java
new file mode 100644
index 0000000..c9f5603
--- /dev/null
+++ b/javax/faces/context/ExceptionHandlerWrapper.java
@@ -0,0 +1,168 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import javax.faces.FacesException;
+import javax.faces.FacesWrapper;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.SystemEvent;
+
+/**
+ * <p>Provides a simple implementation of {@link ExceptionHandler} that can
+ * be subclassed by developers wishing to provide specialized behavior
+ * to an existing {@link ExceptionHandler} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link ExceptionHandler} instance.</p>
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * @since 2.0
+ */
+public abstract class ExceptionHandlerWrapper extends ExceptionHandler implements FacesWrapper<ExceptionHandler> {
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    /**
+     * @return the wrapped {@link ExceptionHandler} instance
+     * @see javax.faces.FacesWrapper#getWrapped() 
+     */
+    @Override
+    public abstract ExceptionHandler getWrapped();
+
+
+    // ------------------------------------------- Methods from ExceptionHandler
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExceptionHandler#getHandledExceptionQueuedEvent()}
+     * on the wrapped {@link ExceptionHandler} object.</p>
+     *
+     * @see ExceptionHandler#getHandledExceptionQueuedEvent()
+     */
+    @Override
+    public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
+        return getWrapped().getHandledExceptionQueuedEvent();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExceptionHandler#handle()}
+     * on the wrapped {@link ExceptionHandler} object.</p>
+     *
+     * @see javax.faces.context.ExceptionHandler#handle()
+     */
+    @Override
+    public void handle() throws FacesException {
+        getWrapped().handle();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExceptionHandler#isListenerForSource(Object)}
+     * on the wrapped {@link ExceptionHandler} object.</p>
+     *
+     * @see javax.faces.context.ExceptionHandler#isListenerForSource(Object) ()
+     */
+    @Override
+    public boolean isListenerForSource(Object source) {
+        return getWrapped().isListenerForSource(source);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)}
+     * on the wrapped {@link ExceptionHandler} object.</p>
+     *
+     * @see javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)
+     */
+    @Override
+    public void processEvent(SystemEvent event) throws AbortProcessingException {
+        getWrapped().processEvent(event);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExceptionHandler#getRootCause(Throwable)}
+     * on the wrapped {@link ExceptionHandler} object.</p>
+     *
+     * @see javax.faces.context.ExceptionHandler#getRootCause(Throwable)
+     */
+    @Override
+    public Throwable getRootCause(Throwable t) {
+        return getWrapped().getRootCause(t);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to call
+     * {@link ExceptionHandler#getHandledExceptionQueuedEvents()} on the wrapped
+     * {@link ExceptionHandler} object.</p>
+     *
+     * @see ExceptionHandler#getHandledExceptionQueuedEvents()
+     */
+    @Override
+    public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
+        return getWrapped().getHandledExceptionQueuedEvents();
+    }
+
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExceptionHandler#getUnhandledExceptionQueuedEvents()}
+     * on the wrapped {@link ExceptionHandler} object.</p>
+     *
+     * @see ExceptionHandler#getUnhandledExceptionQueuedEvents()
+     */
+    @Override
+    public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
+        return getWrapped().getUnhandledExceptionQueuedEvents();
+    }
+
+}
diff --git a/javax/faces/context/ExternalContext.java b/javax/faces/context/ExternalContext.java
new file mode 100644
index 0000000..b47c617
--- /dev/null
+++ b/javax/faces/context/ExternalContext.java
@@ -0,0 +1,2078 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * Licensed Material - Property of IBM 
+ * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved.
+ * US Government Users Restricted Rights - Use, duplication or disclosure 
+ * restricted by GSA ADP Schedule Contract with IBM Corp. 
+ */
+
+package javax.faces.context;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.Principal;
+import java.util.*;
+import javax.faces.lifecycle.ClientWindow;
+
+
+/**
+ * <p><span class="changed_modified_2_0 changed_modified_2_1 changed_modified_2_2">This</span>
+ * class allows the Faces API to be unaware of the nature of its containing
+ * application environment.  In particular, this class allows JavaServer Faces based
+ * appications to run in either a Servlet or a Portlet environment.</p>
+ *
+ * <p class="changed_modified_2_0">The documentation for this class only
+ * specifies the behavior for the <em>Servlet</em> implementation of
+ * <code>ExternalContext</code>.  The <em>Portlet</em> implementation of
+ * <code>ExternalContext</code> is specified under the revision of the
+ * <span style="text-decoration: underline;">Portlet Bridge
+ * Specification for JavaServer Faces</span> JSR that corresponds to
+ * this version of the JSF specification.  See the Preface of the
+ * "prose document", <a
+ * href="../../../overview-summary.html#overview_description">linked
+ * from the javadocs</a>, for a reference.</p>
+
+ * <p class="changed_added_2_0">If a reference to an
+ * <code>ExternalContext</code> is obtained during application startup or shutdown
+ * time, any method documented as "valid to call this method during
+ * application startup or shutdown" must be supported during application startup or shutdown
+ * time.  The result of calling a method during application startup or shutdown time
+ * that does not have this designation is undefined.</p>
+
+
+ */
+
+public abstract class ExternalContext {
+
+    
+    @SuppressWarnings({"UnusedDeclaration"})
+    private ExternalContext defaultExternalContext;
+    
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>String identifier for BASIC authentication.</p>
+     */
+    public static final String BASIC_AUTH = "BASIC";
+
+
+    /**
+     * <p>String identifier for CLIENT_CERT authentication.</p>
+     */
+    public static final String CLIENT_CERT_AUTH = "CLIENT_CERT";
+
+
+    /**
+     * <p>String identifier for DIGEST authentication.</p>
+     */
+    public static final String DIGEST_AUTH = "DIGEST";
+
+
+    /**
+     * <p>String identifier for FORM authentication.</p>
+     */
+    public static final String FORM_AUTH = "FORM";
+
+
+
+    // ---------------------------------------------------------- Public Methods
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">Adds</span> the cookie represented by the
+     * arguments to the response.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must be accomplished by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> method
+     * <code>addCookie()</code>.  The <code>Cookie</code> argument must
+     * be constructed by passing the <code>name</code> and
+     * <code>value</code> parameters.  If the <code>properties</code>
+     * arugument is non-<code>null</code> and not empty, the
+     * <code>Cookie</code> instance must be initialized as described
+     * below.</p>
+     *
+     * <table border="1">
+     *
+     * <tr>
+     *
+     * <th>Key in "values" <code>Map</code></th>
+     *
+     * <th>Expected type of value.</th>
+     *
+     * <th>Name of setter method on <code>Cookie</code> instance to be
+     * set with the value from the <code>Map</code>.  </th>
+     *
+     * </tr>
+     *
+     * <tr>
+     *
+     * <td>comment</td>
+     *
+     * <td>String</td>
+     *
+     * <td>setComment</td>
+     *
+     * </tr>
+     *
+     * <tr>
+     *
+     * <td>domain</td>
+     *
+     * <td>String</td>
+     *
+     * <td>setDomain</td>
+     *
+     * </tr>
+     *
+     * <tr>
+     *
+     * <td>maxAge</td>
+     *
+     * <td>Integer</td>
+     *
+     * <td>setMaxAge</td>
+     *
+     * </tr>
+     *
+     * <tr>
+     *
+     * <td>secure</td>
+     *
+     * <td>Boolean</td>
+     *
+     * <td>setSecure</td>
+     *
+     * </tr>
+     *
+     * <tr>
+     *
+     * <td>path</td>
+     *
+     * <td>String</td>
+     *
+     * <td>setPath</td>
+     *
+     * </tr>
+     *
+     * <tr class="changed_added_2_2">
+     *
+     * <td>httpOnly</td>
+     *
+     * <td>Boolean</td>
+     *
+     * <td>setHttpOnly</td>
+     *
+     * </tr>
+     *
+     * </table>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @param name To be passed as the first argument to the
+     * <code>Cookie</code> constructor.
+     *
+     * @param value To be passed as the second argument to the
+     * <code>Cookie</code> constructor.
+     *
+     * @param properties A <code>Map</code> containg key/value pairs to be passed
+     * as arguments to the setter methods as described above.
+     *
+     * @throws IllegalArgumentException if the <code>properties
+     * Map</code> is not-<code>null</code> and not empty and contains
+     * any keys that are not one of the keys listed above.
+     *
+     * @since 2.0
+     */
+
+    public void addResponseCookie(String name,
+                                  String value,
+                                  Map<String, Object> properties) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.addResponseCookie(name, value, properties);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Dispatch</span> a request to the specified resource to create output
+     * for this response.</p>
+     *
+     * <p><em>Servlet:</em> This must be accomplished by calling the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>getRequestDispatcher(path)</code>, and calling the
+     * <code>forward()</code> method on the resulting object.</p>
+     * <p class="changed_added_2_2">If the call to <code>getRequestDisatcher(path)</code> 
+     * returns <code>null</code>, send a<code>ServletResponse SC_NOT_FOUND</code> 
+     * error code.</p>
+     *
+     * @param path Context relative path to the specified resource,
+     *  which must start with a slash ("/") character
+     *
+     * @throws javax.faces.FacesException thrown if a <code>ServletException</code> occurs
+     * @throws IOException if an input/output error occurs
+     */
+    public abstract void dispatch(String path)
+	throws IOException;
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Return</span> the input URL, after performing any rewriting needed to
+     * ensure that it will correctly identify an addressable action in the
+     * current application.<p>
+     * 
+     * <p class="changed_added_2_2">Encoding the {@link javax.faces.lifecycle.ClientWindow}</p>
+     *
+     * <ul>
+     * 
+     * <p class="changed_added_2_2">Call {@link javax.faces.lifecycle.ClientWindow#isClientWindowRenderModeEnabled(javax.faces.context.FacesContext) }.
+     * If the result is <code>false</code> take no further action and return
+     * the rewritten URL.  If the result is <code>true</code>, call {@link #getClientWindow()}.
+     * If the result is non-<code>null</code>, call {@link javax.faces.lifecycle.ClientWindow#getId()}
+     * and append the id to the query string of the URL, making the necessary
+     * allowances for a pre-existing query string or no query-string.</p>
+     * 
+     * <p>Call {@link javax.faces.lifecycle.ClientWindow#getQueryURLParameters}.
+     * If the result is non-{@code null}, for each parameter in the map, 
+     * unconditionally add that parameter to the URL.</p>
+     * 
+     * <p>The name
+     * of the query string parameter is given by the value of the constant
+     * {@link javax.faces.render.ResponseStateManager#CLIENT_WINDOW_URL_PARAM}.</p>
+     * 
+     * </ul>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletResponse</code> method
+     * <code>encodeURL(url)</code>.</p>
+     *
+     * @param url The input URL to be encoded
+     *
+     * @throws NullPointerException if <code>url</code>
+     *  is <code>null</code>
+     */
+    public abstract String encodeActionURL(String url);
+    
+
+    /**
+     * <p><span class="changed_modified_2_2">Return</span> the specified
+     * name, after prefixing it with a namespace that ensures that it
+     * will be unique within the context of a particular page.</p>
+     *
+     * <p><em>Servlet:</em> The input value must be returned unchanged.</p>
+     *
+     * @param name Name to be encoded
+     * 
+     * <!-- Removed the throws clause in 2.2 -->
+     *
+     */
+    public abstract String encodeNamespace(String name);
+
+
+    /**
+     * <p>Return the input URL, after performing any rewriting needed to
+     * ensure that it will correctly identify an addressable resource in the
+     * current application.<p>
+     * 
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletResponse</code> method
+     * <code>encodeURL(url)</code>.</p>
+     *
+     * @param url The input URL to be encoded
+     *
+     * @throws NullPointerException if <code>url</code>
+     *  is <code>null</code>
+     */
+    // PENDING(craigmcc) - Currently identical to encodeActionURL()
+    public abstract String encodeResourceURL(String url);
+    
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> a mutable
+     * <code>Map</code> representing the application scope attributes
+     * for the current application.  The returned <code>Map</code> must
+     * implement the entire contract for a modifiable map as described
+     * in the JavaDocs for <code>java.util.Map</code>.  Modifications
+     * made in the <code>Map</code> must cause the corresponding changes
+     * in the set of application scope attributes.  Particularly the
+     * <code>clear()</code>, <code>remove()</code>, <code>put()</code>,
+     * <code>putAll()</code>, and <code>get()</code> operations must
+     * take the appropriate action on the underlying data structure.</p>
+     *
+     * <p>For any of the <code>Map</code> methods that cause an element
+     * to be removed from the underlying data structure, the following
+     * action regarding managed-beans must be taken.  If the element to
+     * be removed is a managed-bean, and it has one or more public
+     * no-argument void return methods annotated with
+     * <code>javax.annotation.PreDestroy</code>, each such method must
+     * be called before the element is removed from the underlying data
+     * structure.  Elements that are not managed-beans, but do happen to
+     * have methods with that annotation must not have those methods
+     * called on removal.  Any exception thrown by the
+     * <code>PreDestroy</code> annotated methods must by caught and not
+     * rethrown.  The exception may be logged.</p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called at startup or shutdown time, this
+     * method returns a <code>Map</code> that is backed by the same
+     * container context instance (<code>ServletContext</code> or
+     * <code>PortletContext</code>) as the one returned by calling
+     * <code>getApplicationMap()</code> on the
+     * <code>ExternalContext</code> returned by the
+     * <code>FacesContext</code> during an actual request.</p>
+     *
+     * <p><em>Servlet:</em>  This must be the set of attributes available via
+     * the <code>javax.servlet.ServletContext</code> methods
+     * <code>getAttribute()</code>, <code>getAttributeNames()</code>,
+     * <code>removeAttribute()</code>, and <code>setAttribute()</code>.</p>
+     *
+     */
+    public abstract Map<String, Object> getApplicationMap();
+
+
+    /**
+     * <p>Return the name of the authentication scheme used to authenticate
+     * the current user, if any; otherwise, return <code>null</code>.
+     * For standard authentication schemes, the returned value will match
+     * one of the following constants:
+     * <code>BASIC_AUTH</code>, <code>CLIENT_CERT_AUTH</code>,
+     * <code>DIGEST_AUTH</code>, or <code>FORM_AUTH</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>getAuthType()</code>.</p>
+     *
+     */
+    public abstract String getAuthType();
+
+
+    /**
+     * <p class="changed_added_2_0">Return the threadsafe {@link Flash}
+     * for this application.  The default implementation will throw
+     * <code>UnsupportedOperationException</code>.  Compliant JSF
+     * runtimes must provide an implementation of this method.</p>
+     *
+     * @since 2.0
+     */ 
+
+    public Flash getFlash() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getFlash();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }    
+
+
+
+
+    /**
+     * <p class="changed_added_2_0">Returns the MIME type of the
+     * specified file or <code>null</code> if the MIME type is not
+     * known.  The MIME type is determined by the container.</p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method calls through to the
+     * <code>getMimeType()</code> method on the same container
+     * context instance (<code>ServletContext</code> or
+     * <code>PortletContext</code>) as the one used when calling
+     * <code>getMimeType()</code> on the
+     * <code>ExternalContext</code> returned by the
+     * <code>FacesContext</code> during an actual request.</p>
+
+     * <div class="changed_added_2_0">
+ 
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>getMimeType()</code>.</p>
+     *
+     * </div>
+     *
+     * @param file The file for which the mime type should be obtained.
+
+     *
+     * @since 2.0
+     */
+    public String getMimeType(String file) {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getMimeType(file);
+        }
+
+        throw new UnsupportedOperationException();
+        
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> the
+     * application environment object instance for the current
+     * appication.</p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this returns the same container context instance
+     * (<code>ServletContext</code> or <code>PortletContext</code>) as
+     * the one returned when calling <code>getContext()</code> on the
+     * <code>ExternalContext</code> returned by the
+     * <code>FacesContext</code> during an actual request.</p>
+
+     *
+     * <p><em>Servlet:</em>  This must be the current application's
+     * <code>javax.servlet.ServletContext</code> instance.</p>
+     *
+     */
+    public abstract Object getContext();
+
+    /**
+     * 
+     * <p class="changed_added_2_0">Return the name of the container
+     * context for this application.  </p>
+     *
+     * <p class="changed_added_2_0">Return the result of calling
+     * <code>getServletContextName()</code> on the
+     * <code>ServletContext</code> instance for this application.  It is
+     * valid to call this method during application startup or shutdown.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     *
+     */
+
+    public String getContextName() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getContextName();
+        }
+
+        throw new UnsupportedOperationException();
+        
+    }
+
+    /**
+     * 
+     * <p class="changed_added_2_2">Return the name of the container
+     * context for this application.  </p>
+     *
+     * <p class="changed_added_2_2"><em>Servlet:</em>
+     * Return the result of calling
+     * <code>getContextPath()</code> on the
+     * <code>ServletContext</code> instance for this application.</p>
+
+     * <p>It is valid to call this method during application startup or
+     * shutdown.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     *
+     * @since 2.2
+     */
+
+    public String getApplicationContextPath() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getApplicationContextPath();
+        }
+
+        throw new UnsupportedOperationException();
+        
+    }
+
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> the value of
+     * the specified application initialization parameter (if any).</p>
+     *
+     * <p><em>Servlet:</em> This must be the result of the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>getInitParameter(name)</code>.</p>
+     *
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method calls through to the actual container
+     * context to return the init parameter value.</p>
+
+     * @param name Name of the requested initialization parameter
+     *
+     * @throws NullPointerException if <code>name</code>
+     *  is <code>null</code>
+     */
+    public abstract String getInitParameter(String name);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span></span> an
+     * immutable <code>Map</code> whose keys are the set of application
+     * initialization parameter names configured for this application,
+     * and whose values are the corresponding parameter values.  The
+     * returned <code>Map</code> must implement the entire contract for
+     * an unmodifiable map as described in the JavaDocs for
+     * <code>java.util.Map</code>.</p>
+     *
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method returns a <code>Map</code> that is backed by
+     * the same container context instance (<code>ServletContext</code>
+     * or <code>PortletContext</code>) as the one returned by calling
+     * <code>getInitParameterMap()</code> on the
+     * <code>ExternalContext</code> returned by the
+     * <code>FacesContext</code> during an actual request.</p>
+     *
+     * <p><em>Servlet:</em> This result must be as if it were synthesized
+     * by calling the <code>javax.servlet.ServletContext</code>
+     * method <code>getInitParameterNames</code>, and putting
+     * each configured parameter name/value pair into the result.</p>
+     *
+     */
+    public abstract Map getInitParameterMap();
+    
+
+    /**
+     * <p>Return the login name of the user making the current request
+     * if any; otherwise, return <code>null</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>getRemoteUser()</code>.</p>
+     *
+     */
+    public abstract String getRemoteUser();
+
+
+    /**
+     * <p>Return the environment-specific object instance for the current
+     * request.</p>
+     *
+     * <p><em>Servlet:</em>  This must be the current request's
+     * <code>javax.servlet.http.HttpServletRequest</code> instance.</p>
+     *
+     */
+    public abstract Object getRequest();
+
+    /**
+     * <p>Set the environment-specific request to be returned by
+     * subsequent calls to {@link #getRequest}.  This may be used to
+     * install a wrapper for the request.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     *
+     * @since 1.2
+     */
+    public void setRequest(Object request) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setRequest(request);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Returns the name of the scheme used
+     * to make this request, for example, http, https, or ftp.</p>
+     *
+     * <div class="changed_added_2_0">
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletRequest</code> method
+     * <code>getScheme()</code>.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     */
+    public String getRequestScheme() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getRequestScheme();
+        }
+
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Returns the host name of the server
+     * to which the request was sent.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletRequest</code> method
+     * <code>getServerName()</code>.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     */
+    public String getRequestServerName() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getRequestServerName();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Returns the port number to which
+     * the request was sent.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletRequest</code> method
+     * <code>getServerPort()</code>.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     */
+    public int getRequestServerPort() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getRequestServerPort();
+        }
+
+        throw new UnsupportedOperationException();
+    }
+    
+    /**
+     *
+     * <p>Overrides the name of the character 
+     * encoding used in the body of this request.</p>
+     *
+     * <p>Calling this method after the request has been accessed will have no
+     * no effect, unless a <code>Reader</code> or <code>Stream</code> has been
+     * obtained from the request, in which case an <code>IllegalStateException</code>
+     * is thrown.</p>
+     *
+     * <p><em>Servlet:</em> This must call through to the
+     * <code>javax.servlet.ServletRequest</code> method
+     * <code>setCharacterEncoding()</code>.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @throws java.io.UnsupportedEncodingException if this is not a valid
+     * encoding 
+     *
+     * @since 1.2
+     *
+     */
+    public void setRequestCharacterEncoding(String encoding) throws UnsupportedEncodingException {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setRequestCharacterEncoding(encoding);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Returns a String containing the real
+     * path for a given virtual path. </p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>getRealPath()</code>.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * </div>
+     *
+     * @param path The context of the requested initialization parameter
+     *
+     * @since 2.0
+     */
+    public String getRealPath(String path) {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getRealPath(path);
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p>Return the portion of the request URI that identifies the web
+     * application context for this request.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>getContextPath()</code>.</p>
+     *
+     */
+    public abstract String getRequestContextPath();
+
+
+    /**
+     * <p>Return an immutable <code>Map</code> whose keys are the set of
+     * cookie names included in the current request, and whose
+     * values (of type <code>javax.servlet.http.Cookie</code>)
+     * are the first (or only) cookie for each cookie name
+     * returned by the underlying request.  The returned
+     * <code>Map</code> must implement the entire contract for an unmodifiable
+     * map as described in the JavaDocs for <code>java.util.Map</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>getCookies()</code>, unless <code>null</code> was returned,
+     * in which case this must be a zero-length array.</p>
+     *
+     */
+    public abstract Map<String, Object> getRequestCookieMap();
+    
+
+    /**
+     * <p>Return an immutable <code>Map</code> whose keys are the set of
+     * request header names included in the current request, and whose
+     * values (of type String) are the first (or only) value for each
+     * header name returned by the underlying request.  The returned
+     * <code>Map</code> must implement the entire contract for an unmodifiable
+     * map as described in the JavaDocs for <code>java.util.Map</code>.  In
+     * addition, key comparisons must be performed in a case insensitive
+     * manner.</p>
+     *
+     * <p><em>Servlet:</em> This must be the set of headers available via
+     * the <code>javax.servlet.http.HttpServletRequest</code> methods
+     * <code>getHeader()</code> and <code>getHeaderNames()</code>.</p>
+     *
+     */
+    public abstract Map<String, String> getRequestHeaderMap();
+    
+
+    /**
+     * <p>Return an immutable <code>Map</code> whose keys are the set of
+     * request header names included in the current request, and whose
+     * values (of type String[]) are all of the value for each
+     * header name returned by the underlying request.  The returned
+     * <code>Map</code> must implement the entire contract for an unmodifiable
+     * map as described in the JavaDocs for <code>java.util.Map</code>.  In
+     * addition, key comparisons must be performed in a case insensitive
+     * manner.</p>
+     *
+     * <p><em>Servlet:</em> This must be the set of headers available via
+     * the <code>javax.servlet.http.HttpServletRequest</code> methods
+     * <code>getHeaders()</code> and <code>getHeaderNames()</code>.</p>
+     *
+     */
+    public abstract Map<String, String []> getRequestHeaderValuesMap();
+    
+
+    /**
+     * <p>Return the preferred <code>Locale</code> in which the client
+     * will accept content.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletRequest</code> method
+     * <code>getLocale()</code>.</p>
+     *
+     */
+    public abstract Locale getRequestLocale();
+    
+
+    /**
+     * <p>Return an <code>Iterator</code> over the preferred
+     * <code>Locale</code>s specified in the request, in decreasing
+     * order of preference.</p>
+     *
+     * <p><em>Servlet:</em> This must be an <code>Iterator</code>
+     * over the values returned by the <code>javax.servlet.ServletRequest</code>
+     * method <code>getLocales()</code>.</p>
+     *
+     */
+    public abstract Iterator<Locale> getRequestLocales();
+
+
+    /**
+     * <p>Return a mutable <code>Map</code> representing the request
+     * scope attributes for the current application.  The returned
+     * <code>Map</code> must implement the entire contract for a
+     * modifiable map as described in the JavaDocs for
+     * <code>java.util.Map</code>.  Modifications made in the
+     * <code>Map</code> must cause the corresponding changes in the set
+     * of request scope attributes.  Particularly the
+     * <code>clear()</code>, <code>remove()</code>, <code>put()</code>,
+     * <code>putAll()</code>, and <code>get()</code> operations must
+     * take the appropriate action on the underlying data structure.</p>
+     *
+     * <p>For any of the <code>Map</code> methods that cause an element
+     * to be removed from the underlying data structure, the following
+     * action regarding managed-beans must be taken.  If the element to
+     * be removed is a managed-bean, and it has one or more public
+     * no-argument void return methods annotated with
+     * <code>javax.annotation.PreDestroy</code>, each such method must
+     * be called before the element is removed from the underlying data
+     * structure.  Elements that are not managed-beans, but do happen to
+     * have methods with that annotation must not have those methods
+     * called on removal.  Any exception thrown by the
+     * <code>PreDestroy</code> annotated methods must by caught and not
+     * rethrown.  The exception may be logged.</p>
+     *
+     * <p><em>Servlet:</em>  This must be the set of attributes available via
+     * the <code>javax.servlet.ServletRequest</code> methods
+     * <code>getAttribute()</code>, <code>getAttributeNames()</code>,
+     * <code>removeAttribute()</code>, and <code>setAttribute()</code>.</p>
+     *
+     */
+    public abstract Map<String, Object> getRequestMap();
+
+
+    /**
+     * <p>Return an immutable <code>Map</code> whose keys are the set of
+     * request parameters names included in the current request, and whose
+     * values (of type String) are the first (or only) value for each
+     * parameter name returned by the underlying request.  The returned
+     * <code>Map</code> must implement the entire contract for an unmodifiable
+     * map as described in the JavaDocs for <code>java.util.Map</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the set of parameters available via
+     * the <code>javax.servlet.ServletRequest</code> methods
+     * <code>getParameter()</code> and <code>getParameterNames()</code>.</p>
+     *
+     */
+    public abstract Map<String, String> getRequestParameterMap();
+    
+
+    /**
+     * <p>Return an <code>Iterator</code> over the names of all request
+     * parameters included in the current request.</p>
+     *
+     * <p><em>Servlet:</em> This must be an <code>Iterator</code> over the
+     * values returned by the <code>javax.servlet.ServletRequest</code>
+     * method <code>getParameterNames()</code>.</p>
+     *
+     */
+    public abstract Iterator<String> getRequestParameterNames();
+
+
+    /**
+     * <p>Return an immutable <code>Map</code> whose keys are the set of
+     * request parameters names included in the current request, and whose
+     * values (of type String[]) are all of the values for each
+     * parameter name returned by the underlying request.  The returned
+     * <code>Map</code> must implement the entire contract for an unmodifiable
+     * map as described in the JavaDocs for <code>java.util.Map</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the set of parameters available via
+     * the <code>javax.servlet.ServletRequest</code> methods
+     * <code>getParameterValues()</code> and
+     * <code>getParameterNames()</code>.</p>
+     *
+     */
+    public abstract Map<String, String []> getRequestParameterValuesMap();
+    
+
+    /**
+     * <p>Return the extra path information (if any) included in the
+     * request URI; otherwise, return <code>null</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>getPathInfo()</code>.</p>
+     *
+     */
+    public abstract String getRequestPathInfo();
+    
+
+    /**
+     * <p>Return the servlet path information (if any) included in the
+     * request URI; otherwise, return <code>null</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>getServletPath()</code>.</p>
+     *
+     */
+    public abstract String getRequestServletPath();
+    
+    /**
+     *
+     * <p> Return the character encoding currently being used
+     * to interpret this request.</p>
+     *
+     * <p><em>Servlet:</em> This must return the value returned by the
+     * <code>javax.servlet.ServletRequest</code> method
+     * <code>getCharacterEncoding()</code>.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @since 1.2
+     *
+     */
+    public String getRequestCharacterEncoding() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getRequestCharacterEncoding();
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     *
+     * <p>Return the MIME Content-Type for this request.  If not
+     * available, return <code>null</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must return the value returned by the
+     * <code>javax.servlet.ServletRequest</code> method
+     * <code>getContentType()</code>.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @since 1.2
+     */
+    public String getRequestContentType() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getRequestContentType();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the result
+     * of calling <code>getContentLenth()</code> on the
+     * <code>ServletRequest</code> instance for this request.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @since 2.0
+     */
+
+    public int getRequestContentLength() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getRequestContentLength();
+        }
+
+        throw new UnsupportedOperationException();
+        
+    }
+
+
+    /**
+     *
+     * <p>Returns the name of the character encoding (MIME charset) used for 
+     * the body sent in this response. </p>
+     *
+     * <p><em>Servlet:</em> This must return the value returned by the
+     * <code>javax.servlet.ServletResponse</code> method
+     * <code>getCharacterEncoding()</code>.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @since 1.2
+     */
+    public String getResponseCharacterEncoding() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getResponseCharacterEncoding();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+    
+    /**
+     *
+     * <p>Return the MIME Content-Type for this response.  If not
+     * available, return <code>null</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must return the value returned by the
+     * <code>javax.servlet.ServletResponse</code> method
+     * <code>getContentType()</code>.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @since 1.2
+     */
+    public String getResponseContentType() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getResponseContentType();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> a
+     * <code>URL</code> for the application resource mapped to the
+     * specified path, if it exists; otherwise, return
+     * <code>null</code>.</p>
+     *
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method calls through to the
+     * <code>getResource()</code> method on the same container
+     * context instance (<code>ServletContext</code> or
+     * <code>PortletContext</code>) as the one used when calling
+     * <code>getResource()</code> on the
+     * <code>ExternalContext</code> returned by the
+     * <code>FacesContext</code> during an actual request.</p>
+
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>getResource(path)</code>.</p>
+     *
+     * @param path The path to the requested resource, which must
+     *  start with a slash ("/" character
+     *
+     * @throws MalformedURLException if the specified path
+     *  is not in the correct form
+     * @throws NullPointerException if <code>path</code>
+     *  is <code>null</code>
+     */
+    public abstract URL getResource(String path) throws MalformedURLException;
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> an
+     * <code>InputStream</code> for an application resource mapped to
+     * the specified path, if it exists; otherwise, return
+     * <code>null</code>.</p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method calls through to the
+     * <code>getResourceAsStream()</code> method on the same container
+     * context instance (<code>ServletContext</code> or
+     * <code>PortletContext</code>) as the one used when calling
+     * <code>getResourceAsStream()</code> on the
+     * <code>ExternalContext</code> returned by the
+     * <code>FacesContext</code> during an actual request.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>getResourceAsStream(path)</code>.</p>
+     *
+     * @param path The path to the requested resource, which must
+     *  start with a slash ("/" character
+     *
+     * @throws NullPointerException if <code>path</code>
+     *  is <code>null</code>
+     */
+    public abstract InputStream getResourceAsStream(String path);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> the
+     * <code>Set</code> of resource paths for all application resources
+     * whose resource path starts with the specified argument.</p>
+     *
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method calls through to the
+     * <code>getResourcePaths()</code> method on the same container
+     * context instance (<code>ServletContext</code> or
+     * <code>PortletContext</code>) as the one used when calling
+     * <code>getResourcePaths()</code> on the
+     * <code>ExternalContext</code> returned by the
+     * <code>FacesContext</code> during an actual request.</p>
+
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>getResourcePaths(path).</code></p>
+     *
+     * @param path Partial path used to match resources, which must
+     *  start with a slash ("/") character
+     *
+     * @throws NullPointerException if <code>path</code>
+     *  is <code>null</code>
+     */
+    public abstract Set<String> getResourcePaths(String path);
+
+
+    /**
+     * <p>Return the environment-specific object instance for the current
+     * response.</p>
+     *
+     * <p><em>Servlet:</em>  This is the current request's
+     * <code>javax.servlet.http.HttpServletResponse</code> instance.</p>
+     *
+     */
+    public abstract Object getResponse();
+
+    /**
+     * <p>Set the environment-specific response to be returned by
+     * subsequent calls to {@link #getResponse}.  This may be used to
+     * install a wrapper for the response.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     *
+     * @since 1.2
+     */
+    public void setResponse(Object response) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setResponse(response);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Returns an <code>OutputStream</code>
+     * suitable for writing binary data to the user-agent.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must return the value returned by the
+     * <code>javax.servlet.ServletResponse</code> method
+     * <code>getOutputStream()</code>.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     */
+    public OutputStream getResponseOutputStream() throws IOException {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getResponseOutputStream();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Returns a <code>Writer</code>
+     * suitable for writing character data to the user-agent.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must return the value returned by the
+     * {@link javax.servlet.ServletResponse#getWriter}.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     */
+    public Writer getResponseOutputWriter() throws IOException {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getResponseOutputWriter();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+    
+    
+    /**
+     *
+     * <p>Sets the character encoding (MIME charset) of the response being sent 
+     * to the client, for example, to UTF-8.</p>
+     *
+     * <p><em>Servlet:</em> This must call through to the
+     * <code>javax.servlet.ServletResponse</code> method
+     * <code>setCharacterEncoding()</code>.</p>
+     *
+     * <p>The default implementation throws 
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     *
+     * @since 1.2
+     *
+     */
+    public void setResponseCharacterEncoding(String encoding) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setResponseCharacterEncoding(encoding);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+    
+
+    /**
+     * <p class="changed_added_2_0">Sets the content type of the
+     * response being sent to the client, if the response has not been
+     * committed yet.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must call
+     * <code>setContentType()</code> on the underlying
+     * <code>javax.servlet.ServletResponse</code> instance.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @param contentType The content type to be set as the contentType
+     * of the response.
+     *
+     * @since 2.0
+     */
+    public void setResponseContentType(String contentType) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setResponseContentType(contentType);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p>If the <code>create</code> parameter is <code>true</code>,
+     * create (if necessary) and return a session instance associated
+     * with the current request.  If the <code>create</code> parameter
+     * is <code>false</code> return any existing session instance
+     * associated with the current request, or return <code>null</code> if
+     * there is no such session.</p>
+     *
+     * <p><em>Servlet:</em> This must return the result of calling
+     * <code>getSession(create)</code> on the underlying
+     * <code>javax.servlet.http.HttpServletRequest</code> instance.</p>
+     *
+     * @param create Flag indicating whether or not a new session should be
+     *  created if there is no session associated with the current request
+     */
+    public abstract Object getSession(boolean create);
+    
+    /**
+     * <p class="changed_added_2_2">Return the id of the current session
+     * or the empty string if no session has been created and the 
+     * <code>create</code> parameter is <code>false</code>.</p>
+     * 
+     * <div class="changed_added_2_2">
+     *
+     * <p><em>Servlet:</em> If <code>create</code> is true, obtain
+     * a reference to the <code>HttpSession</code> for the current request
+     * (creating the session if necessary) and return its id.  If 
+     * <code>create</code> is <code>false</code>, obtain a reference to the
+     * current session, if one exists, and return its id.  If no session exists,
+     * return the empty string.</p>
+     * 
+     * </div>
+     * 
+     * @since 2.2
+     * 
+     * @param create Flag indicating whether or not a new session should be
+     *  created if there is no session associated with the current request
+     */
+    public String getSessionId(boolean create) {
+        String result = "";
+        if (defaultExternalContext != null) {
+            result = defaultExternalContext.getSessionId(create);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        return result;
+    }
+
+    /**
+     * <p class="changed_added_2_1">Returns the maximum time interval, in seconds, that
+     * the servlet container will keep this session open between client accesses.
+     * After this interval, the servlet container will invalidate the session.
+     * The maximum time interval can be set with the
+     * {@link #setSessionMaxInactiveInterval} method. </p>
+     *
+     * <p class="changed_added_2_1">A return value of zero or less indicates
+     * that the session will never timeout. </p>
+     *
+     * <p><em>Servlet:</em> This must return the result of calling
+     * <code>getMaxInactiveInterval</code> on the underlying
+     * <code>javax.servlet.http.HttpServletRequest</code> instance.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @since 2.1
+     */
+    public int getSessionMaxInactiveInterval() {
+        int result = 0;
+        if (defaultExternalContext != null) {
+            result = defaultExternalContext.getSessionMaxInactiveInterval();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+        return result;
+    }
+
+    /**
+     * <p>Return a mutable <code>Map</code> representing the session
+     * scope attributes for the current application.  The returned
+     * <code>Map</code> must implement the entire contract for a
+     * modifiable map as described in the JavaDocs for
+     * <code>java.util.Map</code>.  Modifications made in the
+     * <code>Map</code> must cause the corresponding changes in the set
+     * of session scope attributes.  Particularly the
+     * <code>clear()</code>, <code>remove()</code>, <code>put()</code>,
+     * and <code>get()</code> operations must take the appropriate
+     * action on the underlying data structure.  Accessing attributes
+     * via this <code>Map</code> must cause the creation of a session
+     * associated with the current request, if such a session does not
+     * already exist.</p>
+     *
+     * <p>For any of the <code>Map</code> methods that cause an element
+     * to be removed from the underlying data structure, the following
+     * action regarding managed-beans must be taken.  If the element to
+     * be removed is a managed-bean, and it has one or more public
+     * no-argument void return methods annotated with
+     * <code>javax.annotation.PreDestroy</code>, each such method must
+     * be called before the element is removed from the underlying data
+     * structure.  Elements that are not managed-beans, but do happen to
+     * have methods with that annotation must not have those methods
+     * called on removal.  Any exception thrown by the
+     * <code>PreDestroy</code> annotated methods must by caught and not
+     * rethrown.  The exception may be logged.</p>
+     *
+     * <p><em>Servlet:</em>  This must be the set of attributes available via
+     * the <code>javax.servlet.http.HttpSession</code> methods
+     * <code>getAttribute()</code>, <code>getAttributeNames()</code>,
+     * <code>removeAttribute()</code>, and <code>setAttribute()</code>.</p>
+     *
+     */
+    public abstract Map<String, Object> getSessionMap();
+
+
+    /**
+     * <p>Return the <code>Principal</code> object containing the name of
+     * the current authenticated user, if any; otherwise, return
+     * <code>null</code>.</p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>getUserPrincipal()</code>.</p>
+     *
+     */
+    public abstract Principal getUserPrincipal();
+    
+    
+    /**
+     * <p class="changed_added_2_2">Return the {@link ClientWindow} set in a preceding
+     * call to {@link #setClientWindow}, or <code>null</code> if no such call has
+     * been made.</p>
+     * 
+     * @since 2.2
+     *
+     */
+    public ClientWindow getClientWindow() {
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getClientWindow();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Invalidates this session then unbinds any objects bound to it.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpSession</code> method
+     * <code>invalidate()</code>.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * </div>
+     *
+     * @since 2.0
+     */
+    public void invalidateSession() {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.invalidateSession();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if the currently authenticated user is
+     * included in the specified role.  Otherwise, return <code>false</code>.
+     * </p>
+     *
+     * <p><em>Servlet:</em> This must be the value returned by the
+     * <code>javax.servlet.http.HttpServletRequest</code> method
+     * <code>isUserInRole(role)</code>.</p>
+     *
+     * @param role Logical role name to be checked
+     *
+     * @throws NullPointerException if <code>role</code>
+     *  is <code>null</code>
+     */
+    public abstract boolean isUserInRole(String role);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Log</span> the specified
+     * message to the application object.</p>
+     *
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this calls the <code>log()</code> method on the same
+     * container context instance (<code>ServletContext</code> or
+     * <code>PortletContext</code>) as the one used during a call to
+     * <code>log()</code> on the <code>ExternalContext</code> returned
+     * by the <code>FacesContext</code> during an actual request.</p>
+     *
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>log(String)</code>.</p>
+     *
+     * @param message Message to be logged
+     *
+     * @throws NullPointerException if <code>message</code>
+     *  is <code>null</code>
+     */
+    public abstract void log(String message);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Log</span> the specified
+     * message and exception to the application object.</p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this calls the <code>log()</code> method on the same
+     * container context instance (<code>ServletContext</code> or
+     * <code>PortletContext</code>) as the one used when calling
+     * <code>log()</code> on the <code>ExternalContext</code> returned
+     * by the <code>FacesContext</code> during an actual request.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.ServletContext</code> method
+     * <code>log(String,Throwable)</code>.</p>
+     *
+     * @param message Message to be logged
+     * @param exception Exception to be logged
+     *
+     * @throws NullPointerException if <code>message</code>
+     *  or <code>exception</code> is <code>null</code>
+     */
+    public abstract void log(String message, Throwable exception);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Redirect</span> a request 
+     * to the specified URL, and cause the
+     * <code>responseComplete()</code> method to be called on the
+     * {@link FacesContext} instance for the current request.</p>
+     *
+     * <p class="changed_added_2_0">The implementation must determine if
+     * the request is an <code>Ajax</code> request by obtaining a  
+     * {@link PartialViewContext} instance from the {@link FacesContext} and
+     * calling {@link PartialViewContext#isAjaxRequest()}.</p>
+     *
+     * <p><em>Servlet:</em> <span class="changed_modified_2_0">For
+     * non <code>Ajax</code> requests, this must be accomplished by calling 
+     * the <code>javax.servlet.http.HttpServletResponse</code> method
+     * <code>sendRedirect()</code>.</span> <div class="changed_added_2_0">
+     * For Ajax requests, the implementation must:
+     * <ul>
+     * <li>Get a {@link PartialResponseWriter} instance from the 
+     * {@link FacesContext}.</li>
+     * <li>Call {@link #setResponseContentType} with <code>text/xml</code></li>
+     * <li>Call {@link #setResponseCharacterEncoding} with <code>UTF-8</code></li>
+     * <li>Call {@link #addResponseHeader} with <code>Cache-Control</code>, 
+     * <code>no-cache</code></li>
+     * <li>Call {@link PartialResponseWriter#startDocument}</li>
+     * <li>Call {@link PartialResponseWriter#redirect} with the <code>url</code>
+     * argument.</li>
+     * <li>Call {@link PartialResponseWriter#endDocument}</li>
+     * </ul>
+     * </div>
+     * </p>
+     *
+     * @param url Absolute URL to which the client should be redirected
+     *
+     * @throws IllegalArgumentException if the specified url is relative
+     * @throws IllegalStateException if, in a portlet environment,
+     *  the current response object is a <code>RenderResponse</code>
+     *  instead of an <code>ActionResponse</code>
+     * @throws IllegalStateException if, in a servlet environment,
+     *  the current response has already been committed
+     * @throws IOException if an input/output error occurs
+     */
+    public abstract void redirect(String url)
+	throws IOException;
+
+    /**
+     * <p class="changed_added_2_0">Set the response header with the given name and value.</p>
+     *
+     * <p><em>Servlet:</em>This must be performed by calling the 
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>setHeader</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @param name The name of the response header.
+     * @param value The value of the response header.
+     *
+     * @since 2.0
+     */
+    public void setResponseHeader(String name, String value) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setResponseHeader(name, value);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Add the given name and value to the response header.</p>
+     *
+     * <p><em>Servlet:</em>This must be performed by calling the 
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>addHeader</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @param name The name of the response header.
+     * @param value The value of the response header.
+     *
+     * @since 2.0
+     */
+    public void addResponseHeader(String name, String value) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.addResponseHeader(name, value);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Set the buffer size for the current response.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>setBufferSize</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @param size the new buffer size
+     *
+     * @since 2.0
+     */
+    public void setResponseBufferSize(int size) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setResponseBufferSize(size);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the buffer size for the current response.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>getBufferSize</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @since 2.0
+     */
+    public int getResponseBufferSize() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.getResponseBufferSize();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Check if the current response has been committed.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>isCommitted</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @since 2.0
+     */
+    public boolean isResponseCommitted() {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.isResponseCommitted();
+        }
+        throw new UnsupportedOperationException();
+        
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Resets the current response.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>reset</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @since 2.0
+     */
+    public void responseReset() {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.responseReset();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Sends an HTTP status code with message.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>sendError</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @param statusCode an HTTP status code
+     * @param message an option message to detail the cause of the code
+     *
+     * @since 2.0
+     */
+    public void responseSendError(int statusCode, String message) throws IOException {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.responseSendError(statusCode, message);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+
+
+     /**
+     * <p class="changed_added_2_0">Sets the HTTP status code for the response.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>setStatus</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @param statusCode an HTTP status code
+     *
+     * @since 2.0
+     */
+    public void setResponseStatus(int statusCode) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setResponseStatus(statusCode);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_1">Specifies the time, in seconds, between
+     * client requests before the servlet container will invalidate this
+     * session.</p>
+     *
+     * <p class="changed_added_2_1">An interval value of zero or less indicates
+     * that the session should never timeout. </p>
+     *
+     * <p><em>Servlet:</em> This must call
+     * <code>setMaxInactiveInterval</code> on the underlying
+     * <code>javax.servlet.http.HttpServletRequest</code> instance.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @since 2.1
+     */
+    public void setSessionMaxInactiveInterval(int interval) {
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setSessionMaxInactiveInterval(interval);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Associate this instance with a {@link ClientWindow}.</p>
+     * 
+     * @param window the window with which this instance is associated.
+     * 
+     * @since 2.2
+     */
+    
+    public void setClientWindow(ClientWindow window) {
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setClientWindow(window);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+
+    /**
+     * <p class="changed_added_2_0">Flushes the buffered response content to the
+     * client.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>flushBuffer</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @since 2.0
+     */
+    public void responseFlushBuffer() throws IOException {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.responseFlushBuffer();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Set the content length of the response.</p>
+     *
+     * <p><em>Servlet:</em> This must be performed by calling the
+     * <code>javax.servlet.http.HttpServletResponse</code> <code>setContentLength</code>
+     * method.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.</p>
+     *
+     * @since 2.0
+     */
+    public void setResponseContentLength(int length) {
+
+        if (defaultExternalContext != null) {
+            defaultExternalContext.setResponseContentLength(length);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">
+     * <span class="changed_modified_2_2">The</span> purpose of this method is 
+     * to generate a query string from the collection of Parameter
+     * objects provided by the parameters argument and append that query string to the baseUrl.
+     * This method must be able to encode the parameters to a baseUrl that may or may not have
+     * existing query parameters. The parameter values should be encoded appropriately for the
+     * environment so that the resulting URL can be used as the target of a link (e.g., in an
+     * href attribute) in a JSF response.  It's possible for an ExternalContext implementation to
+     * override this method in any way that would make the URL bookmarkable in that environment.
+     * </p>
+     * 
+     * <p class="changed_added_2_2">See {@link #encodeActionURL(java.lang.String)} 
+     * for the required specification of how to encode the {@link javax.faces.lifecycle.ClientWindow}.
+     * </p>
+     *
+     * <p>
+     * The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided for
+     * the sole purpose of not breaking existing applications that
+     * extend this class.
+     * </p>
+     *
+     * @param baseUrl    The base URL onto which the query string generated by this method will be appended. The URL may contain query parameters.
+     * @param parameters The collection of Parameter objects, representing name=value pairs that are used to produce a query string
+     * @since 2.0
+     */
+    public String encodeBookmarkableURL(String baseUrl,
+                                        Map<String, List<String>> parameters) {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.encodeBookmarkableURL(baseUrl,
+                                                                parameters);
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     * <span class="changed_modified_2_2">The</span> purpose of this method is to generate a query string from the collection of Parameter
+     * objects provided by the parameters argument and append that query string to the baseUrl.
+     * This method must be able to encode the parameters to a baseUrl that may or may not have existing query parameters. The parameter values should be encoded appropriately for the
+     * environment so that the resulting URL can be used as the target of a redirect. It's
+     * possible for an ExternalContext implementation to override this method to accomodate the
+     * definition of redirect for that environment.
+     * 
+     * <p class="changed_added_2_2">See {@link #encodeActionURL(java.lang.String)} 
+     * for the required specification of how to encode the {@link javax.faces.lifecycle.ClientWindow}.
+     * </p>
+     *
+     * @param baseUrl    The base URL onto which the query string generated by this method will be appended. The URL may contain query parameters.
+     * @param parameters The collection of Parameter objects, representing name=value pairs that are used to produce a query string
+     * @since 2.0
+     */
+    public String encodeRedirectURL(String baseUrl,
+                                    Map<String,List<String>> parameters) {
+
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.encodeRedirectURL(baseUrl, parameters);
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">Return</span>
+     * the input URL, after performing
+     * any rewriting needed to ensure that it can be used in a partial page
+     * submission (ajax request) to correctly identify an addressable action
+     * in the current application.</p>
+     *
+     * <p class="changed_added_2_2">See {@link #encodeActionURL(java.lang.String)} 
+     * for the required specification of how to encode the {@link javax.faces.lifecycle.ClientWindow}.
+     * </p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p><p>
+     *
+     * <p><em>Servlet:</em>Returns the same encoded URL as the
+     * {@link #encodeActionURL(String url)} method.</p>
+     *
+     * <p><em>Portlet:</em>Returns an encoded URL that, upon HTTP POST, will
+     * invoke the RESOURCE_PHASE of the portlet lifecycle.</p>
+     *
+     * </div>
+     *
+     * @param url The input URL to be encoded
+     *
+     * @throws NullPointerException if <code>url</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public String encodePartialActionURL(String url) {
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.encodePartialActionURL(url);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+     /**
+     * <p class="changed_added_2_1">Returns a boolean indicating whether this request
+     * was made using a secure channel, such as HTTPS.
+     *
+     *
+     * <p><em>Servlet:</em> This must return the result of calling
+     * <code>isSecure</code> on the underlying
+     * <code>javax.servlet.http.HttpServletRequest</code> instance.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @since 2.1
+     */
+    public boolean isSecure() {
+        if (defaultExternalContext != null) {
+            return defaultExternalContext.isSecure();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+}
diff --git a/javax/faces/context/ExternalContextFactory.java b/javax/faces/context/ExternalContextFactory.java
new file mode 100644
index 0000000..fe2624a
--- /dev/null
+++ b/javax/faces/context/ExternalContextFactory.java
@@ -0,0 +1,104 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import javax.faces.FacesException;
+import javax.faces.FacesWrapper;
+
+/**
+ * <p><strong class="changed_modified_2_0">ExternalContextFactory</strong> 
+ * is a factory object that creates
+ * (if needed) and returns new {@link ExternalContext} instances, initialized
+ * for the processing of the specified request and response objects.</p>
+ *
+ * <p>There must be one <code>ExternalContextFactory</code> instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   ExternalContextFactory factory = (ExternalContextFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.EXTERNAL_CONTEXT_FACTORY);
+ * </pre>
+ *
+ */
+
+public abstract class ExternalContextFactory implements FacesWrapper<ExternalContextFactory> {
+
+    public ExternalContextFactory() {
+    }
+
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+
+    public ExternalContextFactory getWrapped() {
+        return null;
+    }
+
+    /**
+     * <p><span class="changed_added_2_0">Create</span> (if needed)
+     * and return an {@link ExternalContext} instance that is initialized
+     * for the processing of the specified request and response objects,
+     * for this web application.</p>
+     *
+     * @param context In servlet environments, the
+     * <code>ServletContext</code> that is associated with this web
+     * application
+     * @param request In servlet environments, the
+     * <code>ServletRequest</code> that is to be processed
+     * @param response In servlet environments, the
+     * <code>ServletResponse</code> that is to be processed
+     *
+     * @throws FacesException if a {@link ExternalContext} cannot be
+     *  constructed for the specified parameters
+     * @throws NullPointerException if any of the parameters
+     *  are <code>null</code>
+     */
+    public abstract ExternalContext getExternalContext
+        (Object context, Object request,
+         Object response) throws FacesException;
+
+
+}
diff --git a/javax/faces/context/ExternalContextWrapper.java b/javax/faces/context/ExternalContextWrapper.java
new file mode 100644
index 0000000..3465675
--- /dev/null
+++ b/javax/faces/context/ExternalContextWrapper.java
@@ -0,0 +1,994 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.*;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.security.Principal;
+
+import javax.faces.FacesWrapper;
+import javax.faces.lifecycle.ClientWindow;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Provides</span>
+ * a simple implementation of {@link ExternalContext} that can
+ * be subclassed by developers wishing to provide specialized behavior
+ * to an existing {@link ExternalContext} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link ExternalContext} instance.</p>
+ *
+ * <p class="changed_added_2_0">Usage: extend this class and override 
+ * {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.0
+ */
+public abstract class ExternalContextWrapper extends ExternalContext implements FacesWrapper<ExternalContext> {
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    /**
+     * @return the wrapped {@link ExternalContext} instance
+     * @see javax.faces.FacesWrapper#getWrapped()
+     */
+    @Override
+    public abstract ExternalContext getWrapped();
+
+
+    // -------------------------------------------- Methods from ExternalContext
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#dispatch(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#dispatch(String)
+     */
+    @Override
+    public void dispatch(String path) throws IOException {
+        getWrapped().dispatch(path);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#encodeActionURL(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#encodeActionURL(String)
+     */
+    @Override
+    public String encodeActionURL(String url) {
+        return getWrapped().encodeActionURL(url);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#encodeNamespace(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#encodeNamespace(String)
+     */
+    @Override
+    public String encodeNamespace(String name) {
+        return getWrapped().encodeNamespace(name);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#encodePartialActionURL(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#encodePartialActionURL(String)
+     */
+    @Override
+    public String encodePartialActionURL(String url) {
+        return getWrapped().encodePartialActionURL(url);
+    }
+    
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#encodeResourceURL(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#encodeResourceURL(String)
+     */
+    @Override
+    public String encodeResourceURL(String url) {
+        return getWrapped().encodeResourceURL(url);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getApplicationMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getApplicationMap()
+     */
+    @Override
+    public Map<String, Object> getApplicationMap() {
+        return getWrapped().getApplicationMap();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link ExternalContext#getApplicationContextPath}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getApplicationContextPath()
+     */
+    @Override
+    public String getApplicationContextPath() {
+        return getWrapped().getApplicationContextPath();
+    }
+    
+    
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getAuthType}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getAuthType()
+     */
+    @Override
+    public String getAuthType() {
+        return getWrapped().getAuthType();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getContext}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getContext()
+     */
+    @Override
+    public Object getContext() {
+        return getWrapped().getContext();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getInitParameter(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getInitParameter(String)
+     */
+    @Override
+    public String getInitParameter(String name) {
+        return getWrapped().getInitParameter(name);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getInitParameterMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getInitParameterMap()
+     */
+    @Override
+    public Map getInitParameterMap() {
+        return getWrapped().getInitParameterMap();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRemoteUser}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRemoteUser()
+     */
+    @Override
+    public String getRemoteUser() {
+        return getWrapped().getRemoteUser();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequest}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequest()
+     */
+    @Override
+    public Object getRequest() {
+        return getWrapped().getRequest();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestContextPath}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestContextPath() 
+     */
+    @Override
+    public String getRequestContextPath() {
+        return getWrapped().getRequestContextPath();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestCookieMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestCookieMap()
+     */
+    @Override
+    public Map<String, Object> getRequestCookieMap() {
+        return getWrapped().getRequestCookieMap();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestHeaderMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestHeaderMap()
+     */
+    @Override
+    public Map<String, String> getRequestHeaderMap() {
+        return getWrapped().getRequestHeaderMap();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestHeaderValuesMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestHeaderValuesMap()
+     */
+    @Override
+    public Map<String, String[]> getRequestHeaderValuesMap() {
+        return getWrapped().getRequestHeaderValuesMap();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestLocale}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestLocale() 
+     */
+    @Override
+    public Locale getRequestLocale() {
+        return getWrapped().getRequestLocale();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestLocales}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestLocales()
+     */
+    @Override
+    public Iterator<Locale> getRequestLocales() {
+        return getWrapped().getRequestLocales();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestMap() 
+     */
+    @Override
+    public Map<String, Object> getRequestMap() {
+        return getWrapped().getRequestMap();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestParameterMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestParameterMap()
+     */
+    @Override
+    public Map<String, String> getRequestParameterMap() {
+        return getWrapped().getRequestParameterMap();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestParameterNames}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestParameterNames()
+     */
+    public Iterator<String> getRequestParameterNames() {
+        return getWrapped().getRequestParameterNames();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestParameterValuesMap}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestParameterValuesMap()
+     */
+    public Map<String, String[]> getRequestParameterValuesMap() {
+        return getWrapped().getRequestParameterValuesMap();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestPathInfo}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestPathInfo()
+     */
+    public String getRequestPathInfo() {
+        return getWrapped().getRequestPathInfo();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestServletPath}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestServletPath()
+     */
+    public String getRequestServletPath() {
+        return getWrapped().getRequestServletPath();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResource(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResource(String) 
+     */
+    public URL getResource(String path) throws MalformedURLException {
+        return getWrapped().getResource(path);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResourceAsStream(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResourceAsStream(String)
+     */
+    public InputStream getResourceAsStream(String path) {
+        return getWrapped().getResourceAsStream(path);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResourcePaths(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResourcePaths(String)
+     */
+    public Set<String> getResourcePaths(String path) {
+        return getWrapped().getResourcePaths(path);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResponse}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResponse()
+     */
+    public Object getResponse() {
+        return getWrapped().getResponse();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getSession(boolean)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getSession(boolean)
+     */
+    public Object getSession(boolean create) {
+        return getWrapped().getSession(create);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link ExternalContext#getSessionId(boolean)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     * 
+     * @since 2.2
+     *
+     * @see javax.faces.context.ExternalContext#getSessionId(boolean)
+     */
+    @Override
+    public String getSessionId(boolean create) {
+        return getWrapped().getSessionId(create);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getSessionMap()}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getSessionMap()
+     */
+    public Map<String, Object> getSessionMap() {
+        return getWrapped().getSessionMap();
+    }
+    
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link ExternalContext#getSessionMaxInactiveInterval()}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getSessionMaxInactiveInterval()
+     */
+    @Override
+    public int getSessionMaxInactiveInterval() {
+        return getWrapped().getSessionMaxInactiveInterval();
+    }
+    
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link ExternalContext#setSessionMaxInactiveInterval(int)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setSessionMaxInactiveInterval(int)
+     */
+    @Override
+    public void setSessionMaxInactiveInterval(int interval) {
+        getWrapped().setSessionMaxInactiveInterval(interval);
+    }
+    
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link ExternalContext#setClientWindow}
+     * on the wrapped {@link ExternalContext} object.</p>
+     * 
+     * @since 2.2
+     * 
+     * @param window the window associated with this request.
+     */
+
+    @Override
+    public void setClientWindow(ClientWindow window) {
+        getWrapped().setClientWindow(window);
+    }
+    
+    
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getUserPrincipal}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getUserPrincipal()
+     */
+    @Override
+    public Principal getUserPrincipal() {
+        return getWrapped().getUserPrincipal();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link ExternalContext#getClientWindow}
+     * on the wrapped {@link ExternalContext} object.</p>
+     * 
+     * @since 2.2
+     *
+     * @see javax.faces.context.ExternalContext#getClientWindow()
+     */
+    @Override
+    public ClientWindow getClientWindow() {
+        return getWrapped().getClientWindow();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#isUserInRole(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#isUserInRole(String)
+     */
+    @Override
+    public boolean isUserInRole(String role) {
+        return getWrapped().isUserInRole(role);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#log(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#log(String)
+     */
+    @Override
+    public void log(String message) {
+        getWrapped().log(message);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#log(String, Throwable)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#log(String, Throwable)
+     */
+    @Override
+    public void log(String message, Throwable exception) {
+        getWrapped().log(message, exception);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#redirect(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#redirect(String)
+     */
+    @Override
+    public void redirect(String url) throws IOException {
+        getWrapped().redirect(url);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#addResponseCookie(String, String, Map)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#addResponseCookie(String, String, Map)
+     */
+    @Override
+    public void addResponseCookie(String name,
+                                  String value,
+                                  Map<String, Object> properties) {
+        getWrapped().addResponseCookie(name, value, properties);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getMimeType(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getMimeType(String)
+     */
+    @Override
+    public String getMimeType(String file) {
+        return getWrapped().getMimeType(file);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getContextName}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getContextName()
+     */
+    @Override
+    public String getContextName() {
+        return getWrapped().getContextName();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#setRequest(Object)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setRequest(Object)
+     */
+    @Override
+    public void setRequest(Object request) {
+        getWrapped().setRequest(request);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestScheme}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestScheme()
+     */
+    @Override
+    public String getRequestScheme() {
+        return getWrapped().getRequestScheme();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestServerName}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestServerName()
+     */
+    @Override
+    public String getRequestServerName() {
+        return getWrapped().getRequestServerName();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestServerPort}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestServerPort()
+     */
+    @Override
+    public int getRequestServerPort() {
+        return getWrapped().getRequestServerPort();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#setRequestCharacterEncoding(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setRequestCharacterEncoding(String)
+     */
+    @Override
+    public void setRequestCharacterEncoding(String encoding)
+    throws UnsupportedEncodingException {
+        getWrapped().setRequestCharacterEncoding(encoding);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRealPath(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRealPath(String)
+     */
+    @Override
+    public String getRealPath(String path) {
+        return getWrapped().getRealPath(path);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestCharacterEncoding}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestCharacterEncoding()
+     */
+    @Override
+    public String getRequestCharacterEncoding() {
+        return getWrapped().getRequestCharacterEncoding();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestContentType}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestContentType()
+     */
+    @Override
+    public String getRequestContentType() {
+        return getWrapped().getRequestContentType();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getRequestContentLength}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getRequestContentLength()
+     */
+    @Override
+    public int getRequestContentLength() {
+        return getWrapped().getRequestContentLength();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResponseCharacterEncoding}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResponseCharacterEncoding()
+     */
+    @Override
+    public String getResponseCharacterEncoding() {
+        return getWrapped().getResponseCharacterEncoding();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResponseContentType}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResponseContentType()
+     */
+    @Override
+    public String getResponseContentType() {
+        return getWrapped().getResponseContentType();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#setResponse(Object)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setResponse(Object)
+     */
+    @Override
+    public void setResponse(Object response) {
+        getWrapped().setResponse(response);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResponseOutputStream}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResponseOutputStream()
+     */
+    @Override
+    public OutputStream getResponseOutputStream() throws IOException {
+        return getWrapped().getResponseOutputStream();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResponseOutputWriter}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResponseOutputWriter()
+     */
+    @Override
+    public Writer getResponseOutputWriter() throws IOException {
+        return getWrapped().getResponseOutputWriter();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResponseCharacterEncoding}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResponseCharacterEncoding()
+     */
+    @Override
+    public void setResponseCharacterEncoding(String encoding) {
+        getWrapped().setResponseCharacterEncoding(encoding);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#setResponseContentType(String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setResponseContentType(String)
+     */
+    @Override
+    public void setResponseContentType(String contentType) {
+        getWrapped().setResponseContentType(contentType);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#invalidateSession}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#invalidateSession()
+     */
+    @Override
+    public void invalidateSession() {
+        getWrapped().invalidateSession();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#setResponseHeader(String,String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setResponseHeader(String,String)
+     */
+    @Override
+    public void setResponseHeader(String name, String value) {
+        getWrapped().setResponseHeader(name, value);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#addResponseHeader(String,String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#addResponseHeader(String,String)
+     */
+    @Override
+    public void addResponseHeader(String name, String value) {
+        getWrapped().addResponseHeader(name, value);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#setResponseBufferSize(int)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setResponseBufferSize(int)
+     */
+    @Override
+    public void setResponseBufferSize(int size) {
+        getWrapped().setResponseBufferSize(size);   
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getResponseBufferSize()}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#getResponseBufferSize()
+     */
+    @Override
+    public int getResponseBufferSize() {
+        return getWrapped().getResponseBufferSize();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#isResponseCommitted()}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#isResponseCommitted()
+     */
+    @Override
+    public boolean isResponseCommitted() {
+        return getWrapped().isResponseCommitted();
+    }
+    
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link ExternalContext#isSecure}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     */
+    @Override
+    public boolean isSecure() {
+        return getWrapped().isSecure();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#responseReset()}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#responseReset()
+     */
+    @Override
+    public void responseReset() {
+        getWrapped().responseReset();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#responseSendError(int,String)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#responseSendError(int,String)
+     */
+    @Override
+    public void responseSendError(int statusCode, String message) throws IOException {
+        getWrapped().responseSendError(statusCode, message);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#setResponseStatus(int)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setResponseStatus(int)
+     */
+    @Override
+    public void setResponseStatus(int statusCode) {
+        getWrapped().setResponseStatus(statusCode);    
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExternalContext#responseFlushBuffer()}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#responseFlushBuffer()
+     */
+    @Override
+    public void responseFlushBuffer() throws IOException {
+        getWrapped().responseFlushBuffer();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExternalContext#setResponseContentLength(int)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#setResponseContentLength(int)
+     */
+    @Override
+    public void setResponseContentLength(int length) {
+        getWrapped().setResponseContentLength(length);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExternalContext#encodeBookmarkableURL(String, java.util.Map)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#encodeBookmarkableURL(String, java.util.Map)
+     */
+    @Override
+    public String encodeBookmarkableURL(String baseUrl, Map<String, List<String>> parameters) {
+        return getWrapped().encodeBookmarkableURL(baseUrl, parameters);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.ExternalContext#encodeRedirectURL(String, java.util.Map)}
+     * on the wrapped {@link ExternalContext} object.</p>
+     *
+     * @see javax.faces.context.ExternalContext#encodeRedirectURL(String, java.util.Map)
+     */
+    @Override
+    public String encodeRedirectURL(String baseUrl, Map<String, List<String>> parameters) {
+        return getWrapped().encodeRedirectURL(baseUrl, parameters);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ExternalContext#getFlash()} on the wrapped {@link ExternalContext}
+     * object.</p?
+     *
+     * @see javax.faces.context.ExternalContext#getFlash()
+     */
+    @Override
+    public Flash getFlash() {
+        return getWrapped().getFlash();
+    }
+    
+}
diff --git a/javax/faces/context/FacesContext.java b/javax/faces/context/FacesContext.java
new file mode 100644
index 0000000..9816cc4
--- /dev/null
+++ b/javax/faces/context/FacesContext.java
@@ -0,0 +1,927 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.application.FacesMessage.Severity;
+import javax.faces.component.UIViewRoot;
+import javax.faces.render.RenderKit;
+
+import javax.el.ELContext;
+import javax.faces.FactoryFinder;
+import javax.faces.component.UINamingContainer;
+import javax.faces.event.PhaseId;
+
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_1
+ * changed_modified_2_2">FacesContext</strong> contains all of the
+ * per-request state information related to the processing of a single
+ * JavaServer Faces request, and the rendering of the corresponding
+ * response.  It is passed to, and potentially modified by, each phase
+ * of the request processing lifecycle.</p>
+ *
+ * <p>A {@link FacesContext} instance is associated with a particular
+ * request at the beginning of request processing, by a call to the
+ * <code>getFacesContext()</code> method of the {@link FacesContextFactory}
+ * instance associated with the current web application.  The instance
+ * remains active until its <code>release()</code> method is called, after
+ * which no further references to this instance are allowed.  While a
+ * {@link FacesContext} instance is active, it must not be referenced
+ * from any thread other than the one upon which the servlet container
+ * executing this web application utilizes for the processing of this request.
+ * </p>
+ */
+
+public abstract class FacesContext {
+
+
+    @SuppressWarnings({"UnusedDeclaration"})
+    private FacesContext defaultFacesContext;
+    private boolean processingEvents = true;
+    private boolean isCreatedFromValidFactory = true;
+
+    private static ConcurrentHashMap threadInitContext = new ConcurrentHashMap(2);
+    private static ConcurrentHashMap initContextServletContext = new ConcurrentHashMap(2);
+
+    public FacesContext() {
+        Thread curThread = Thread.currentThread();
+        StackTraceElement[] callstack = curThread.getStackTrace();
+        if (null != callstack) {
+            String declaringClassName = callstack[3].getClassName();
+            try {
+                ClassLoader curLoader = curThread.getContextClassLoader();
+                Class declaringClass = curLoader.loadClass(declaringClassName);
+                if (!FacesContextFactory.class.isAssignableFrom(declaringClass)) {
+                    isCreatedFromValidFactory = false;
+                }
+            } catch (ClassNotFoundException cnfe) {
+
+            }
+        }
+
+    }
+
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> the {@link
+     * Application} instance associated with this web application.</p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, returns the correct current {@link
+     * javax.faces.application.Application} instance.</p>
+
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract Application getApplication();
+    
+    
+    /**
+     * <p class="changed_added_2_0">Return a mutable <code>Map</code> 
+     * representing the attributes associated wth this
+     * <code>FacesContext</code> instance.  This <code>Map</code> is 
+     * useful to store attributes that you want to go out of scope when the
+     * Faces lifecycle for the current request ends, which is not always the same 
+     * as the request ending, especially in the case of Servlet filters
+     * that are invoked <strong>after</strong> the Faces lifecycle for this
+     * request completes.  Accessing this <code>Map</code> does not cause any 
+     * events to fire, as is the case with the other maps: for request, session, and 
+     * application scope.  When {@link #release()} is invoked, the attributes
+     * must be cleared.</p>
+     * 
+     * <div class="changed_added_2_0">
+     * 
+     * <p>The <code>Map</code> returned by this method is not associated with
+     * the request.  If you would like to get or set request attributes,
+     * see {@link ExternalContext#getRequestMap}.  
+     * 
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * </div>
+     * 
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+
+    public Map<Object, Object> getAttributes() {
+
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.getAttributes();
+        }
+        if (!isCreatedFromValidFactory) {
+            if (attributesForInvalidFactoryConstruction == null) {
+                attributesForInvalidFactoryConstruction = new HashMap<Object, Object>();
+            }
+            return attributesForInvalidFactoryConstruction;
+        }
+        throw new UnsupportedOperationException();
+ 
+    }
+
+    private Map<Object, Object> attributesForInvalidFactoryConstruction;
+
+
+    /**
+     * <p class="changed_added_2_0">Return the {@link PartialViewContext}
+     * for this request.  The {@link PartialViewContext} is used to control 
+     * the processing of specified components during the execute portion of
+     * the request processing lifecycle (known as partial processing) and
+     * the rendering of specified components (known as partial rendering).
+     * This method must return a new {@link PartialViewContext} if one
+     * does not already exist.</p>
+     * 
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+      
+    public PartialViewContext getPartialViewContext() {
+
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.getPartialViewContext();
+        }
+        if (!isCreatedFromValidFactory) {
+            if (partialViewContextForInvalidFactoryConstruction == null) {
+                PartialViewContextFactory f = (PartialViewContextFactory)
+                      FactoryFinder.getFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY);
+                partialViewContextForInvalidFactoryConstruction = f.getPartialViewContext(FacesContext.getCurrentInstance());
+            }
+            return partialViewContextForInvalidFactoryConstruction;
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+    private PartialViewContext partialViewContextForInvalidFactoryConstruction = null;
+
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the client identifiers for
+     * which at least one {@link javax.faces.application.FacesMessage} has been queued.  If there are no
+     * such client identifiers, an empty <code>Iterator</code> is returned.
+     * If any messages have been queued that were not associated with any
+     * specific client identifier, a <code>null</code> value will be included
+     * in the iterated values.  The elements in the <code>Iterator</code> must
+     * be returned in the order in which they were added with {@link #addMessage}.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract Iterator<String> getClientIdsWithMessages();
+
+    /**
+     * <p>Return the <code>ELContext</code> instance for this
+     * <code>FacesContext</code> instance.  This <code>ELContext</code>
+     * instance has the same lifetime and scope as the
+     * <code>FacesContext</code> instance with which it is associated,
+     * and may be created lazily the first time this method is called
+     * for a given <code>FacesContext</code> instance.  Upon creation of
+     * the ELContext instance, the implementation must take the
+     * following action: </p>
+     *
+     *	<ul>
+     *
+     *	  <li><p>Call the {@link ELContext#putContext} method on the
+     *	  instance, passing in <code>FacesContext.class</code> and the
+     *	  <code>this</code> reference for the <code>FacesContext</code>
+     *    instance itself.</p></li>
+     *
+     *    <li><p>If the <code>Collection</code> returned by {@link
+     *    javax.faces.application.Application#getELContextListeners} is
+     *    non-empty, create an instance of {@link
+     *    javax.el.ELContextEvent} and pass it to each {@link
+     *    javax.el.ELContextListener} instance in the
+     *    <code>Collection</code> by calling the {@link
+     *    javax.el.ELContextListener#contextCreated} method.</p></li>
+     *
+     * </ul>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 1.2
+     */ 
+
+    public ELContext getELContext() {
+
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.getELContext();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the {@link ExceptionHandler}
+     * for this request.</p>
+     */ 
+    public ExceptionHandler getExceptionHandler() {
+
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.getExceptionHandler();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+    
+    /**
+     * <p class="changed_added_2_0">Set the {@link ExceptionHandler} for
+     * this request.</p>
+     *
+     * @param exceptionHandler the <code>ExceptionHandler</code> for
+     * this request.
+     */ 
+    public void setExceptionHandler(ExceptionHandler exceptionHandler) {
+
+        if (defaultFacesContext != null) {
+            defaultFacesContext.setExceptionHandler(exceptionHandler);
+        } else {
+           throw new UnsupportedOperationException();
+        }
+        
+    }
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> the {@link
+     * ExternalContext} instance for this <code>FacesContext</code>
+     * instance.</p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method returns an {@link ExternalContext} instance
+     * with the special behaviors indicated in the javadoc for that
+     * class.  Methods document as being valid to call during
+     * application startup or shutdown must be supported.</p>
+
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract ExternalContext getExternalContext();
+
+
+    /**
+     * <p>Return the maximum severity level recorded on any
+     * {@link javax.faces.application.FacesMessage}s that has been queued, whether or not they are
+     * associated with any specific {@link javax.faces.component.UIComponent}.  If no such messages
+     * have been queued, return <code>null</code>.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract Severity getMaximumSeverity();
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the {@link javax.faces.application.FacesMessage}s
+     * that have been queued, whether or not they are associated with any
+     * specific client identifier.  If no such messages have been queued,
+     * return an empty <code>Iterator</code>.  The elements of the <code>Iterator</code>
+     * must be returned in the order in which they were added with calls to {@link 
+     * #addMessage}.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract Iterator<FacesMessage> getMessages();
+
+    /**
+     * <p class="changed_added_2_0">Like {@link #getMessages}, but
+     * returns a <code>List<FacesMessage></code>,
+     * enabling use from EL expressions.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @return an immutable <code>List</code> which is effectively a snapshot
+     *  of the messages present at the time of invocation.
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */ 
+    public List<FacesMessage> getMessageList() {
+
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.getMessageList();
+        }
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Like {@link
+     * #getMessages(java.lang.String)}, but returns a
+     * <code>List<FacesMessage></code> of messages for the
+     * component with client id matching argument
+     * <code>clientId</code>.</p>
+     *
+     * <p>The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     *
+     * @return an immutable <code>List</code> which is effectively a snapshot
+     *  of the messages present at the time of invocation.
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */ 
+
+    public List<FacesMessage> getMessageList(String clientId) {
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.getMessageList(clientId);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the {@link javax.faces.application.FacesMessage}s that
+     * have been queued that are associated with the specified client identifier
+     * (if <code>clientId</code> is not <code>null</code>), or over the
+     * {@link javax.faces.application.FacesMessage}s that have been queued that are not associated with
+     * any specific client identifier (if <code>clientId</code> is
+     * <code>null</code>).  If no such messages have been queued, return an
+     * empty <code>Iterator</code>.  The elements of the <code>Iterator</code>
+     * must be returned in the order in which they were added with calls to {@link 
+     * #addMessage}.</p>
+     *
+     * @param clientId The client identifier for which messages are
+     *  requested, or <code>null</code> for messages not associated with
+     *  any client identifier
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract Iterator<FacesMessage> getMessages(String clientId);
+    
+    /**
+     * <p class="changed_added_2_2">Return the result of calling {@link
+     * UINamingContainer#getSeparatorChar}, passing <code>this</code> as
+     * the argument.  Note that this enables accessing the value of this
+     * property from the EL expression
+     * <code>#{facesContext.namingContainerSeparatorChar}</code>.</p>
+     */
+
+    public char getNamingContainerSeparatorChar() {
+        return UINamingContainer.getSeparatorChar(this);
+    }
+
+
+    /**
+     * <p>Return the {@link RenderKit} instance for the render kit identifier
+     * specified on our {@link UIViewRoot}, if there is one.  If there is no
+     * current {@link UIViewRoot}, if the {@link UIViewRoot} does not have a
+     * specified <code>renderKitId</code>, or if there is no {@link RenderKit}
+     * for the specified identifier, return <code>null</code> instead.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract RenderKit getRenderKit();
+
+
+    /**
+     * <p>Return <code>true</code> if the <code>renderResponse()</code>
+     * method has been called for the current request.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract boolean getRenderResponse();
+
+
+    /**
+     * <p>Return <code>true</code> if the <code>responseComplete()</code>
+     * method has been called for the current request.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract boolean getResponseComplete();
+    
+    
+    /**
+     * <p class="changed_added_2_2">Return the list of resource library 
+     * contracts that have been calculated
+     * to be appropriate for use with this view, or an empty list if there are 
+     * no such resource library contracts.  The list returned by this method
+     * must be immutable.  For backward compatibility with implementations
+     * of the specification prior to when this method was introduced, an
+     * implementation is provided that returns an empty list.  Implementations
+     * compliant with the version in which this method was introduced must
+     * implement this method as specified.</p>
+     * 
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.2 
+     */
+    public List<String> getResourceLibraryContracts() {
+        return Collections.emptyList();
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Set the resource library contracts
+     * calculated as valid to use with this view.  The implementation must 
+     * copy the contents of the incoming {@code List} into an immutable 
+     * {@code List} for return from {@link #getResourceLibraryContracts}.
+     * If the argument is {@code null} or empty, the action taken is the same as if
+     * the argument is {@code null}: a subsequent call to {@code getResourceLibraryContracts}
+     * returns {@code null}.  This method may only be called during the 
+     * processing of {@link javax.faces.view.ViewDeclarationLanguage#createView}
+     * and during the VDL tag handler for the tag corresponding to
+     * an instance of {@code UIViewRoot}.  For backward compatibility with implementations
+     * of the specification prior to when this method was introduced, an
+     * implementation is provided that takes no action.  Implementations
+     * compliant with the version in which this method was introduced must
+     * implement this method as specified.
+     * 
+     * </p>
+     * 
+     * @param contracts The new contracts to be returned, as an immutable 
+     * {@code List}. from a subsequent call to {@link #getResourceLibraryContracts}.
+     * 
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     */
+    
+    public void setResourceLibraryContracts(List<String> contracts) {
+    }    
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if the <code>validationFailed()</code>
+     * method has been called for the current request.</p>
+     * 
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public boolean isValidationFailed() {
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.isValidationFailed();
+        }
+
+        throw new UnsupportedOperationException();
+        
+    }
+
+    /**
+     * <p>Return the {@link ResponseStream} to which components should
+     * direct their binary output.  Within a given response, components
+     * can use either the ResponseStream or the ResponseWriter,
+     * but not both.
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract ResponseStream getResponseStream();
+
+
+    /**
+     * <p>Set the {@link ResponseStream} to which components should
+     * direct their binary output.
+     *
+     * @param responseStream The new ResponseStream for this response
+     *
+     * @throws NullPointerException if <code>responseStream</code>
+     *  is <code>null</code>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract void setResponseStream(ResponseStream responseStream);
+
+
+    /**
+     * <p>Return the {@link ResponseWriter} to which components should
+     * direct their character-based output.  Within a given response,
+     * components can use either the ResponseStream or the ResponseWriter,
+     * but not both.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract ResponseWriter getResponseWriter();
+
+
+    /**
+     * <p>Set the {@link ResponseWriter} to which components should
+     * direct their character-based output.
+     *
+     * @param responseWriter The new ResponseWriter for this response
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     * @throws NullPointerException if <code>responseWriter</code>
+     *  is <code>null</code>
+     */
+    public abstract void setResponseWriter(ResponseWriter responseWriter);
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Return</span> the root
+     * component that is associated with the this request.  </p>
+
+     * <p class="changed_added_2_0">It is valid to call this method
+     * during application startup or shutdown.  If called during application
+     * startup or shutdown, this method returns a new <code>UIViewRoot</code> with
+     * its locale set to <code>Locale.getDefault()</code>.</p>
+
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract UIViewRoot getViewRoot();
+
+
+    /**
+     * <p><span class="changed_modified_2_0
+     * changed_modified_2_1">Set</span> the root component that is
+     * associated with this request.
+
+     * <p class="changed_modified_2_1">This method can be called by the
+     * application handler (or a class that the handler calls), during
+     * the <em>Invoke Application</em> phase of the request processing
+     * lifecycle and during the <em>Restore View</em> phase of the
+     * request processing lifecycle (especially when a new root
+     * component is created).  In the present version of the
+     * specification, implementations are not required to enforce this
+     * restriction, though a future version of the specification may
+     * require enforcement.</p>
+
+     * <p class="changed_added_2_0">If the current
+     * <code>UIViewRoot</code> is non-<code>null</code>, and calling
+     * <code>equals()</code> on the argument <code>root</code>, passing
+     * the current <code>UIViewRoot</code> returns <code>false</code>,
+     * the <code>clear</code> method must be called on the
+     * <code>Map</code> returned from {@link UIViewRoot#getViewMap}.</p>
+     *
+     * @param root The new component {@link UIViewRoot} component
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     * @throws NullPointerException if <code>root</code>
+     *  is <code>null</code>
+     */
+    public abstract void setViewRoot(UIViewRoot root);
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Append a {@link javax.faces.application.FacesMessage} to the set of messages associated with
+     * the specified client identifier, if <code>clientId</code> is
+     * not <code>null</code>.  If <code>clientId</code> is <code>null</code>,
+     * this {@link javax.faces.application.FacesMessage} is assumed to not be associated with any
+     * specific component instance.</p>
+     *
+     * @param clientId The client identifier with which this message is
+     *  associated (if any)
+     * @param message The message to be appended
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     * @throws NullPointerException if <code>message</code>
+     *  is <code>null</code>
+     */
+    public abstract void addMessage(String clientId, FacesMessage message);
+
+    /**
+     * <p class="changed_added_2_1"> 
+     * Return a flag indicating if the resources associated with this 
+     * <code>FacesContext</code> instance have been released.</p>
+     * @return <code>true</code> if the resources have been released.
+     *
+     * @since 2.1
+     */  
+    public boolean isReleased() {
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.isReleased();
+        }
+
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p><span class="changed_modified_2_0">Release</span> any
+     * resources associated with this <code>FacesContext</code>
+     * instance.  Faces implementations may choose to pool instances in
+     * the associated {@link FacesContextFactory} to avoid repeated
+     * object creation and garbage collection.  After
+     * <code>release()</code> is called on a <code>FacesContext</code>
+     * instance (until the <code>FacesContext</code> instance has been
+     * recycled by the implementation for re-use), calling any other
+     * methods will cause an <code>IllegalStateException</code> to be
+     * thrown.</p>
+
+     * <p class="changed_added_2_0">If a call was made to {@link
+     * #getAttributes} during the processing for this request, the
+     * implementation must call <code>clear()</code> on the
+     * <code>Map</code> returned from <code>getAttributes()</code>, and
+     * then de-allocate the data-structure behind that
+     * <code>Map</code>.</p>
+
+     * <p>The implementation must call {@link #setCurrentInstance}
+     * passing <code>null</code> to remove the association between this
+     * thread and this dead <code>FacesContext</code> instance.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract void release();
+
+
+    /**
+     * <p>Signal the JavaServer faces implementation that, as soon as the
+     * current phase of the request processing lifecycle has been completed,
+     * control should be passed to the <em>Render Response</em> phase,
+     * bypassing any phases that have not been executed yet.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract void renderResponse();
+
+    /**
+     * <p class="changed_added_2_0">
+     * This utility method simply returns the result of
+     * {@link javax.faces.render.ResponseStateManager#isPostback(FacesContext)}.
+     * </p>
+     *
+     * <p class="changed_added_2_0">The default implementation throws
+     * <code>UnsupportedOperationException</code> and is provided
+     * for the sole purpose of not breaking existing applications that extend
+     * this class.</p>
+     * 
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public boolean isPostback() {
+
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.isPostback();
+        }
+
+        throw new UnsupportedOperationException();
+
+    }
+
+
+    /**
+     * <p>Signal the JavaServer Faces implementation that the HTTP response
+     * for this request has already been generated (such as an HTTP redirect),
+     * and that the request processing lifecycle should be terminated as soon
+     * as the current phase is completed.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract void responseComplete();
+    
+    /**
+     * <p class="changed_added_2_0">Sets a flag which indicates that a conversion or
+     * validation error occurred while processing the inputs. Inputs consist of
+     * either page parameters or form bindings. This flag can be read using
+     * {@link #isValidationFailed}.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public void validationFailed() {
+
+        if (defaultFacesContext != null) {
+            defaultFacesContext.validationFailed();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the value last set on this
+     * <code>FacesContext</code> instance when {@link #setCurrentPhaseId}
+     * was called.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public PhaseId getCurrentPhaseId() {
+
+        if (defaultFacesContext != null) {
+            return defaultFacesContext.getCurrentPhaseId();
+        }
+        if (!isCreatedFromValidFactory) {
+            return this.currentPhaseIdForInvalidFactoryConstruction;
+        }
+        throw new UnsupportedOperationException();
+
+    }
+    
+    /**
+     * <p class="changed_added_2_0">The implementation must call this method
+     * at the earliest possble point in time after entering into a new phase
+     * in the request processing lifecycle.</p>
+     * 
+     * @param currentPhaseId The {@link javax.faces.event.PhaseId} for the 
+     * current phase.
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public void setCurrentPhaseId(PhaseId currentPhaseId) {
+
+        if (defaultFacesContext != null) {
+            defaultFacesContext.setCurrentPhaseId(currentPhaseId);
+        } else if (!isCreatedFromValidFactory) {
+            this.currentPhaseIdForInvalidFactoryConstruction = currentPhaseId;
+        } else {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    private PhaseId currentPhaseIdForInvalidFactoryConstruction;
+
+
+
+    /**
+     * <p class="changed_added_2_0">Allows control of wheter or not the runtime
+     * will publish events when {@link Application#publishEvent(FacesContext, Class, Object)} or
+     * {@link Application#publishEvent(FacesContext, Class, Class, Object)} is called.</p>
+     *
+     * @param processingEvents flag indicating events should be processed or not
+     */
+    public void setProcessingEvents(boolean processingEvents) {
+        this.processingEvents = processingEvents;    
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Returns a flag indicating whether or
+     * not the runtime should publish events when asked to do so.</p>
+     * @return <code>true</code> if events should be published, otherwise
+     *  <code>false</code>
+     */
+    public boolean isProcessingEvents() {
+        return this.processingEvents;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if the
+     * current {@link ProjectStage} as returned by the {@link
+     * Application} instance is equal to <code>stage</code>, otherwise
+     * return <code>false</code></p>
+
+     * @param stage the {@link ProjectStage} to check
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     * @throws NullPointerException if <code>stage</code> is <code>null</code>
+     */
+    public boolean isProjectStage(ProjectStage stage) {
+
+        if (stage == null) {
+            throw new NullPointerException();
+        }
+        return (stage.equals(getApplication().getProjectStage()));
+
+    }
+    
+
+    // ---------------------------------------------------------- Static Methods
+
+
+    /**
+     * <p>The <code>ThreadLocal</code> variable used to record the
+     * {@link FacesContext} instance for each processing thread.</p>
+     */
+    private static ThreadLocal<FacesContext> instance = new ThreadLocal<FacesContext>() {
+            protected FacesContext initialValue() { return (null); }
+        };
+
+
+    /**
+     * <p class="changed_modified_2_0">Return the {@link FacesContext}
+     * instance for the request that is being processed by the current
+     * thread.  If called during application initialization or shutdown,
+     * any method documented as "valid to call this method during
+     * application startup or shutdown" must be supported during
+     * application startup or shutdown time.  The result of calling a
+     * method during application startup or shutdown time that does not
+     * have this designation is undefined.</p>
+     */
+    public static FacesContext getCurrentInstance() {
+        FacesContext facesContext = instance.get();
+
+        if (null == facesContext) {
+            facesContext = (FacesContext)threadInitContext.get(Thread.currentThread());
+
+        }
+        return facesContext;
+    }
+
+
+    /**
+     * <p>Set the {@link FacesContext} instance for the request that is
+     * being processed by the current thread.</p>
+     *
+     * @param context The {@link FacesContext} instance for the current
+     * thread, or <code>null</code> if this thread no longer has a
+     * <code>FacesContext</code> instance.
+     *
+     */
+    protected static void setCurrentInstance(FacesContext context) {
+
+        if (context == null) {
+            instance.remove();
+        } else {
+            instance.set(context);
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/context/FacesContextFactory.java b/javax/faces/context/FacesContextFactory.java
new file mode 100644
index 0000000..eaa3063
--- /dev/null
+++ b/javax/faces/context/FacesContextFactory.java
@@ -0,0 +1,136 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import javax.faces.FacesException;
+import javax.faces.FacesWrapper;
+import javax.faces.lifecycle.Lifecycle;
+
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_2">FacesContextFactory</strong> 
+ * is a factory object that creates
+ * (if needed) and returns new {@link FacesContext} instances, initialized
+ * for the processing of the specified request and response objects.
+ * Implementations may take advantage of the calls to the
+ * <code>release()</code> method of the allocated {@link FacesContext}
+ * instances to pool and recycle them, rather than creating a new instance
+ * every time.</p>
+ *
+ * <p>There must be one <code>FacesContextFactory</code> instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   FacesContextFactory factory = (FacesContextFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
+ * </pre>
+ *
+ */
+
+public abstract class FacesContextFactory implements FacesWrapper<FacesContextFactory> {
+
+    public FacesContextFactory() {
+    }
+
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+
+    public FacesContextFactory getWrapped() {
+        return null;
+    }
+
+    /**
+     * <p><span class="changed_modified_2_0 changed_modified_2_2">Create</span> (if needed)
+     * and return a {@link FacesContext} instance that is initialized
+     * for the processing of the specified request and response objects,
+     * utilizing the specified {@link Lifecycle} instance, for this web
+     * application.</p>
+     *
+     * <p>The implementation of this method must ensure that calls to the
+     * <code>getCurrentInstance()</code> method of {@link FacesContext},
+     * from the same thread that called this method, will return the same
+     * {@link FacesContext} instance until the <code>release()</code>
+     * method is called on that instance.</p>
+
+     * <p class="changed_added_2_0">The implementation must call
+     * {@link ExternalContextFactory#getExternalContext} to produce the
+     * {@link ExternalContext} for the {@link FacesContext} instance.</p>
+
+     * <p class="changed_added_2_0">The default implementation must call
+     * {@link ExceptionHandlerFactory#getExceptionHandler} and make it
+     * so the return from that method is what gets returned from a call
+     * to {@link FacesContext#getExceptionHandler} on the returned
+     * <code>FacesContext</code> instance.</p>
+     *
+     * <p class="changed_added_2_2">The default implementation must call
+     * {@link javax.faces.lifecycle.ClientWindowFactory#getClientWindow} and make it
+     * so the return from that method is what gets returned from a call
+     * to {@link ExternalContext#getClientWindow()} on the returned
+     * <code>ExternalContext</code> instance.</p>
+     *
+     * @param context In servlet environments, the
+     * <code>ServletContext</code> that is associated with this web
+     * application
+     * @param request In servlet environments, the
+     * <code>ServletRequest</code> that is to be processed
+     * @param response In servlet environments, the
+     * <code>ServletResponse</code> that is to be processed
+     * @param lifecycle The {@link Lifecycle} instance being used
+     *  to process this request
+     *
+     * @throws FacesException if a {@link FacesContext} cannot be
+     *  constructed for the specified parameters
+     * @throws NullPointerException if any of the parameters
+     *  are <code>null</code>
+     */
+    public abstract FacesContext getFacesContext
+        (Object context, Object request,
+         Object response, Lifecycle lifecycle)
+        throws FacesException;
+
+
+}
diff --git a/javax/faces/context/FacesContextWrapper.java b/javax/faces/context/FacesContextWrapper.java
new file mode 100644
index 0000000..9711812
--- /dev/null
+++ b/javax/faces/context/FacesContextWrapper.java
@@ -0,0 +1,556 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.List;
+
+import javax.faces.FacesWrapper;
+import javax.faces.event.PhaseId;
+import javax.faces.component.UIViewRoot;
+import javax.faces.render.RenderKit;
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.el.ELContext;
+
+/**
+ * <p><span class="changed_modified_2_1 changed_modified_2_2">Provides</span> a simple
+ * implementation of {@link FacesContext} that can be subclassed by
+ * developers wishing to provide specialized behavior to an existing
+ * {@link FacesContext} instance.  The default implementation of all
+ * methods is to call through to the wrapped {@link FacesContext}
+ * instance.</p>
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.0
+ */
+public abstract class FacesContextWrapper extends FacesContext implements FacesWrapper<FacesContext> {
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    /**
+     * @return the wrapped {@link FacesContext} instance
+     * @see javax.faces.FacesWrapper#getWrapped()
+     */
+    @Override
+    public abstract FacesContext getWrapped();
+
+
+    // ----------------------------------------------- Methods from FacesContext
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getApplication()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getApplication()
+     */
+    @Override
+    public Application getApplication() {
+        return getWrapped().getApplication();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.FacesContext#getClientIdsWithMessages()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see FacesContext#getClientIdsWithMessages()
+     */
+    @Override
+    public Iterator<String> getClientIdsWithMessages() {
+        return getWrapped().getClientIdsWithMessages();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getExternalContext()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getExternalContext()
+     */
+    @Override
+    public ExternalContext getExternalContext() {
+        return getWrapped().getExternalContext();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getMaximumSeverity()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getMaximumSeverity()
+     */
+    @Override
+    public FacesMessage.Severity getMaximumSeverity() {
+        return getWrapped().getMaximumSeverity();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getMessages()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getMessages()
+     */
+    @Override
+    public Iterator<FacesMessage> getMessages() {
+        return getWrapped().getMessages();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getMessages(String)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getMessages(String)
+     */
+    @Override
+    public Iterator<FacesMessage> getMessages(String clientId) {
+        return getWrapped().getMessages(clientId);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getRenderKit()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getRenderKit()
+     */
+    @Override
+    public RenderKit getRenderKit() {
+        return getWrapped().getRenderKit();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getRenderResponse()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getRenderResponse()
+     */
+    @Override
+    public boolean getRenderResponse() {
+        return getWrapped().getRenderResponse();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getResourceLibraryContracts}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getResourceLibraryContracts
+     */
+    @Override
+    public List<String> getResourceLibraryContracts() {
+        return getWrapped().getResourceLibraryContracts();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#setResourceLibraryContracts}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#setResourceLibraryContracts
+     */
+    @Override
+    public void setResourceLibraryContracts(List<String> contracts) {
+        getWrapped().setResourceLibraryContracts(contracts);
+    }
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getResponseComplete()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getResponseComplete()
+     */
+    @Override
+    public boolean getResponseComplete() {
+        return getWrapped().getResponseComplete();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getResponseStream()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getResponseStream()
+     */
+    @Override
+    public ResponseStream getResponseStream() {
+        return getWrapped().getResponseStream();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#setResponseStream(ResponseStream)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#setResponseStream(ResponseStream)
+     */
+    @Override
+    public void setResponseStream(ResponseStream responseStream) {
+        getWrapped().setResponseStream(responseStream);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getResponseWriter()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getResponseWriter()
+     */
+    @Override
+    public ResponseWriter getResponseWriter() {
+        return getWrapped().getResponseWriter();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#setResponseWriter(ResponseWriter)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#setResponseWriter(ResponseWriter)
+     */
+    @Override
+    public void setResponseWriter(ResponseWriter responseWriter) {
+        getWrapped().setResponseWriter(responseWriter);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getViewRoot()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getViewRoot()
+     */
+    @Override
+    public UIViewRoot getViewRoot() {
+        return getWrapped().getViewRoot();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#setViewRoot(UIViewRoot)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#setViewRoot(UIViewRoot)
+     */
+    @Override
+    public void setViewRoot(UIViewRoot root) {
+        getWrapped().setViewRoot(root);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#addMessage(String, FacesMessage)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#addMessage(String, FacesMessage)
+     */
+    @Override
+    public void addMessage(String clientId, FacesMessage message) {
+        getWrapped().addMessage(clientId, message);
+    }
+
+    /**
+     * <p class="changed_added_2_1">The default behavior of this method
+     * is to call {@link FacesContext#isReleased} on the wrapped {@link
+     * FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#isReleased
+
+     * @since 2.1
+     */
+    @Override
+    public boolean isReleased() {
+	return getWrapped().isReleased();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#release()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#release()
+     */
+    @Override
+    public void release() {
+        getWrapped().release();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#renderResponse()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#renderResponse()
+     */
+    @Override
+    public void renderResponse() {
+        getWrapped().renderResponse();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#responseComplete()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#responseComplete()
+     */
+    @Override
+    public void responseComplete() {
+        getWrapped().responseComplete();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getAttributes()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getAttributes()
+     */
+    @Override
+    public Map<Object, Object> getAttributes() {
+        return getWrapped().getAttributes();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link FacesContext#getNamingContainerSeparatorChar()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getNamingContainerSeparatorChar()
+     */
+    @Override
+    public char getNamingContainerSeparatorChar() {
+        return getWrapped().getNamingContainerSeparatorChar();
+    }
+    
+    
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getPartialViewContext()} ()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getPartialViewContext()
+     */
+    @Override
+    public PartialViewContext getPartialViewContext() {
+        return getWrapped().getPartialViewContext();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getELContext()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getELContext()
+     */
+    @Override
+    public ELContext getELContext() {
+        return getWrapped().getELContext();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getExceptionHandler()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getExceptionHandler()
+     */
+    @Override
+    public ExceptionHandler getExceptionHandler() {
+        return getWrapped().getExceptionHandler();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#setExceptionHandler(ExceptionHandler)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#setExceptionHandler(ExceptionHandler)
+     */
+    @Override
+    public void setExceptionHandler(ExceptionHandler exceptionHandler) {
+        getWrapped().setExceptionHandler(exceptionHandler);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getMessageList()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getMessageList()
+     */
+    @Override
+    public List<FacesMessage> getMessageList() {
+        return getWrapped().getMessageList();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getMessageList(String)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getMessageList(String)
+     */
+    @Override
+    public List<FacesMessage> getMessageList(String clientId) {
+        return getWrapped().getMessageList(clientId);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#isPostback()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#isPostback()
+     */
+    @Override
+    public boolean isPostback() {
+        return getWrapped().isPostback();
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#getCurrentPhaseId()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#getCurrentPhaseId()
+     */
+    @Override
+    public PhaseId getCurrentPhaseId() {
+        return getWrapped().getCurrentPhaseId();
+    }
+    
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#setCurrentPhaseId(PhaseId)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#setCurrentPhaseId(PhaseId)
+     */
+    @Override
+    public void setCurrentPhaseId(PhaseId currentPhaseId) {
+        getWrapped().setCurrentPhaseId(currentPhaseId);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.FacesContext#isValidationFailed}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see FacesContext#isValidationFailed
+     */
+    @Override
+    public boolean isValidationFailed() {
+
+        return getWrapped().isValidationFailed();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.FacesContext#validationFailed()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see FacesContext#validationFailed()
+     */
+    @Override
+    public void validationFailed() {
+
+        getWrapped().validationFailed();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link FacesContext#setProcessingEvents(boolean)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see javax.faces.context.FacesContext#setProcessingEvents(boolean)
+     */
+    @Override
+    public void setProcessingEvents(boolean processingEvents) {
+        getWrapped().setProcessingEvents(processingEvents);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.FacesContext#isProcessingEvents()}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see FacesContext#isProcessingEvents()
+     */
+    @Override
+    public boolean isProcessingEvents() {
+        return getWrapped().isProcessingEvents();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.context.FacesContext#isProjectStage(javax.faces.application.ProjectStage)}
+     * on the wrapped {@link FacesContext} object.</p>
+     *
+     * @see FacesContext#isProjectStage(javax.faces.application.ProjectStage) 
+     */
+    @Override
+    public boolean isProjectStage(ProjectStage stage) {
+        return getWrapped().isProjectStage(stage);    
+    }
+}
diff --git a/javax/faces/context/Flash.java b/javax/faces/context/Flash.java
new file mode 100644
index 0000000..450b64a
--- /dev/null
+++ b/javax/faces/context/Flash.java
@@ -0,0 +1,392 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import java.util.Map;
+import javax.faces.event.PostKeepFlashValueEvent;
+import javax.faces.event.PostPutFlashValueEvent;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span>
+ * <strong>Flash</strong> concept is
+ * taken from <a target="_"
+ * href="http://api.rubyonrails.com/classes/ActionController/Flash.html">Ruby
+ * on Rails</a> and provides a way to pass temporary objects between the
+ * user views generated by the faces lifecycle.  As in Rails, anything
+ * one places in the flash will be exposed to the next view encountered
+ * by the same user session and then cleared out.  It is important to
+ * note that “next view” may have the same view id as
+ * the previous view.</p>
+ * 
+ * <div class="changed_added_2_0">
+ *
+ * <p><b>Implementation Requirements</b></p>
+ *
+ * <p>The flash is a <span class="changed_modified_2_0_a">session</span>
+ * scoped object that must be thread safe.</p>
+
+ * <p>The implementation requirements will be described in terms of the
+ * runtime traversing the JSF lifecycle.  The flash exposes a
+ * <code>Map</code> interface over two logical maps.  The choice of
+ * which logical map is accessed depends on the current faces lifecycle
+ * phase.  One logical map is for the current traversal and the other is
+ * for the next traversal.  During the execute portion of the lifecycle,
+ * all flash accesses are sent to the current traversal map.  During the
+ * render portion of the lifecycle, all flash accesses are sent to the
+ * next traversal map.  On the next traversal through the lifecycle, the
+ * implementation must ensure that the current traversal map is the next
+ * traversal map of the previous traversal.  Here is an example for
+ * illustration purposes only.</p>
+ *
+ * <ul>
+ *
+ * <p>Consider an initial request to the faces lifecycle</p>
+ *
+ * <p>Traversal N, execute phase: skipped on initial request.</p>
+ *
+ * <p>Traversal N, render phase: flash access goes to flash[N].</p>
+ *
+ * <p>Traversal N+1, execute phase: flash access goes to flash[N].</p>
+ *
+ * <p>Traversan N+1, render phase: flash access goes to flash[N+1].</p>
+ *
+ * </ul>
+ *
+ * <p>The implementation must ensure the proper behaviour of the flash
+ * is preserved even in the case of a
+ * <code><navigation-case></code> that contains a
+ * <code><redirect /></code>.  The implementation must ensure the
+ * proper behavior of the flash is preserved even in the case of
+ * adjacent GET requests on the same session.  This allows Faces
+ * applications to fully utilize the “Post/Redirect/Get”
+ * design pattern.</p>
+ *
+ * <p>The implementation must allow the user to access the flash via the
+ * EL implicit object <code>flash</code> and also via {@link
+ * javax.faces.context.ExternalContext#getFlash}.  The implementation must
+ * ensure that the flash is usable from both JSP and from Facelets for
+ * JSF 2.  In addition to exposing the <code>Map</code> interface, there
+ * are several features exposed as methods on the <code>Flash</code>
+ * itself.  Each of these features may be accessed via the EL as well,
+ * as described in the javadocs.</p>
+ *
+ * <p>EL Usage Example</p>
+
+ * <ul>
+ *
+ * <p>First page</p>
+ *
+<code><pre>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+<!-- extra code removed -->
+  <c:set target="#{flash}" property="foo" value="fooValue" />
+
+</pre></code>
+
+ * <p>Next page</p>
+ *
+<code><pre>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+<!-- extra code removed -->
+  <h:outputText value="#{flash.foo}" /> will be "fooValue"
+  without the quotes.
+
+</pre></code>
+
+ * </ul>
+ *
+ * <p>The same usage syntax must be available in JSP.</p>
+
+ * <p>Note that extra action must be taken when using the flash in
+ * concert with output components that cause the browser to issue a GET
+ * request when clicked, such as <code>h:button</code> and
+ * <code>h:link</code>.  The following example illustrates one way to
+ * use the flash in such circumstances.</p>
+
+ * <ul>
+
+ * <p>First page</p>
+
+<code><pre>
+<h:button id="nextButton" value="Next (button)" outcome="next.xhtml">
+  <f:param name="foo" value="bar"/>
+</h:button>
+</pre></code>
+
+ * <p>Next page</p>
+
+<code><pre>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:f="http://xmlns.jcp.org/jsf/core"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+<f:metadata>
+  <f:viewParam name="foo" id="foo" value="#{flash.now.foo}" />
+</f:metadata>
+<head /><body>
+foo = #{flash.foo}
+</body>
+</html>
+</pre></code>
+
+ * </ul>
+
+ * <p>Note that this example uses <code>#{flash.now}</code> on the
+ * second page.  This is because the value doesn't actuall enter the
+ * flash until the server is processing the GET request sent by the
+ * browser due to the button being clicked.</p>
+
+ * </div>
+ *
+ * @since 2.0
+
+ */
+public abstract class Flash implements Map<String, Object> {
+    
+    /** <p class="changed_added_2_2">Because <code>null</code>
+     * values are not allowed as the source for subclasses of <code>EventObject</code>,
+     * such as {@link PostKeepFlashValueEvent} and {@link PostPutFlashValueEvent}, 
+     * this value is substituted for <code>null</code> as the source in the case when a 
+     * <code>null</code> value is put to or kept in the flash.
+     */
+    public static final String NULL_VALUE = "javax.faces.context.Flash.NULL_VALUE";
+    
+    /**
+     * <p class="changed_added_2_0">Return the value of this JavaBeans
+     * property for the flash for this session.  This value determines
+     * whether or not any {@link javax.faces.application.FacesMessage}
+     * instances queued in the current {@link
+     * javax.faces.context.FacesContext} must be preserved so they are
+     * accessible on the next traversal of the lifecycle on this
+     * session, regardless of the request being a redirect after post,
+     * or a normal postback.  <code>Map</code> accesses for the special
+     * key “<code>keepMessages</code>” must return the value
+     * of this JavaBeans property.</p>
+
+     * <div class="changed_added_2_0">
+
+     *
+     * <p>EL Usage Example</p>
+
+     * <ul>
+     *
+     * <p>First page</p>
+     *
+<code><pre>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+<!-- extra code removed -->
+  <c:set target="#{flash}" property="keepMessages" value="true" />
+
+</pre></code>
+
+     * <p>Next page</p>
+     *
+<code><pre>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+<!-- extra code removed -->
+  <h:messages /> Any messages present on the first page must be displayed on 
+  this page.
+
+</pre></code>
+
+     * </ul>
+     *
+     * </div>
+     *
+     * @since 2.0
+     *
+     */
+    public abstract boolean isKeepMessages();
+
+    /**
+     * <p class="changed_added_2_0">Setter for <code>keepMessages</code>
+     * JavaBeans property.  See {@link #isKeepMessages}.</p>
+     *
+     * @param newValue the new value for this property on this session.
+     *
+     * @since 2.0
+     */
+    public abstract void setKeepMessages(boolean newValue);
+
+    /**
+     * <p class="changed_added_2_0">Return the value of this property
+     * for the flash for this session.  This must be <code>false</code>
+     * unless:</p>
+
+     * <div class="changed_added_2_0">
+
+     *
+     * <ul>
+     *
+     *  <li><p>{@link #setRedirect} was called for the current
+     *  lifecycle traversal with <code>true</code> as the
+     *  argument.</p></li>
+     *
+     * <li><p>The current lifecycle traversal for this session is in the
+     * “execute” phase and the previous traversal had {@link
+     * #setRedirect} called with <code>true</code> as the
+     * argument.</p></li>
+     *
+     * </div>
+
+     */
+    
+    public abstract boolean isRedirect();
+
+    /**
+     * <p class="changed_added_2_0">Setting this property to
+     * <code>true</code> indicates that the next request on this session
+     * will be a redirect.  Recall that on a redirect, the server sends
+     * a special response to the client instructing it to issue a new
+     * request to a specific URI.  The implementation must insure that
+     * reading the value of this property on that request will return
+     * <code>true</code>.  </p>
+
+     * <div class="changed_added_2_0">
+
+     * <p>EL Usage Example</p>
+
+     * <ul>
+     *
+<code><pre>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+<!-- extra code removed -->
+  <c:set target="#{flash}" property="redirect" value="true" />
+
+</pre></code>
+
+     * </ul>
+     *
+     * </div>
+
+     * 
+     * @param newValue the new value for this property on this session.
+     *
+     * @since 2.0
+     *
+     */
+    
+    public abstract void setRedirect(boolean newValue);
+
+    /**
+     * <p class="changed_added_2_0">Puts a value in the flash so that it
+     * can be accessed on this traversal of the lifecycle, rather than
+     * on the next traversal.  This is simply an alias for putting a
+     * value in the request map.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * <p>EL Usage Example</p>
+
+     * <ul>
+     *
+<code><pre>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+<!-- extra code removed -->
+  <c:set target="#{flash.now}" property="bar" value="barValue" />
+
+  <p>Value of \#{flash.now.bar}, should be barValue.</p>
+
+  <h:outputText value="#{flash.now.bar}" />
+
+</pre></code>
+
+     * </ul>
+     *
+     * </div>
+     *
+     * @param key the key for this entry
+
+     * @param value the value for this entry
+
+     * @since 2.0
+
+     */
+    
+    public abstract void putNow(String key, Object value);
+
+    /**
+     * <p class="changed_added_2_0">Causes a value stored with a
+     * previous call to {@link #putNow}, its EL equivalent, or to the
+     * request <code>Map</code>, to be promoted to the flash so that is
+     * available on the next traversal through the lifecycle on this
+     * session.</p>
+     *
+     * @param key if argument <code>key</code> is the name of an entry
+     * previously stored to the flash on this traversal through the
+     * lifecycle via a call to {@link #putNow}, or to a set to the EL
+     * expression <code>#{flash.now.<i><key></i>}</code>, or to the
+     * request <code>Map</code>, to be promoted to the flash as if a call
+     * to <code>put()</code> or a set to the expression
+     * <code>#{flash.<i><key></i>}</code> was being called.
+     */
+    
+    public abstract void keep(String key);
+
+
+    /**
+     * <p class="changed_added_2_0">Called before the execution of every
+     * lifecycle phase, this method allows implementations to take the
+     * necessary actions to provide the Flash scope contract as it
+     * applies to the request procesing lifecycle. </p>
+     *
+     * @param ctx the <code>FacesContext</code> for this request.
+     */
+    public abstract void doPrePhaseActions(FacesContext ctx);
+
+
+    /**
+     * <p class="changed_added_2_0">Called after the execution of every
+     * lifecycle phase, this method allows implementations to take the
+     * necessary actions to provide the Flash scope contract as it
+     * applies to the request procesing lifecycle. </p>
+     *
+     * @param ctx the <code>FacesContext</code> for this request.
+     */
+    public abstract void doPostPhaseActions(FacesContext ctx);
+    
+
+}
diff --git a/javax/faces/context/FlashFactory.java b/javax/faces/context/FlashFactory.java
new file mode 100644
index 0000000..9b2ae89
--- /dev/null
+++ b/javax/faces/context/FlashFactory.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.context;
+
+import javax.faces.FacesWrapper;
+
+/**
+ * <p><strong class="changed_added_2_2">FlashFactory</strong> is a 
+ * factory object that creates (if needed) and returns {@link Flash}
+ * instances.  Implementations of JavaServer Faces must provide at
+ * least a default implementation of {@link Flash}.</p>
+
+ * <div class="changed_added_2_2">
+ *
+ * <p>There must be one {@link FlashFactory} instance per web
+ * application that is utilizing JavaServer Faces.  This instance can
+ * be acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   FlashFactory factory = (FlashFactory)
+ *     FactoryFinder.getFactory(FactoryFinder.FLASH_FACTORY);
+ * </pre>
+
+ * <p>The common way to access the flash instance from Java code is
+ * still via {@link ExternalContext#getFlash}.  The common way to access
+ * the flash from Faces views is the implicit EL object "flash".  The
+ * runtime must ensure that the <code>FlashFactory</code> is used to
+ * instantiate the flash.</p>
+
+ * </div>
+ * 
+ * @since 2.2
+ */
+public abstract class FlashFactory implements FacesWrapper<FlashFactory> {
+
+    public FlashFactory() {
+    }
+
+    /**
+     * <p class="changed_added_2_2">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.2
+     */
+    public FlashFactory getWrapped() {
+        return null;
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Create (if needed) and return a
+     * {@link Flash} instance for this web application.</p>
+     * 
+     * @param create <code>true</code> to create a new instance for this request if 
+     * necessary; <code>false</code> to return <code>null</code> if there's no 
+     * instance in the current <code>session</code>.
+     * 
+     * @since 2.2
+     */
+    public abstract Flash getFlash(boolean create);
+    
+}
diff --git a/javax/faces/context/FlashWrapper.java b/javax/faces/context/FlashWrapper.java
new file mode 100644
index 0000000..b2e735b
--- /dev/null
+++ b/javax/faces/context/FlashWrapper.java
@@ -0,0 +1,309 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.context;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import javax.faces.FacesWrapper;
+
+/**
+ * <p class="changed_added_2_2">Provides a simple implementation of
+ * {@link Flash} that can be subclassed by developers wishing
+ * to provide specialized behavior to an existing {@link
+ * Flash} instance.  The default implementation of all methods
+ * is to call through to the wrapped {@link Flash}.</p>
+ *
+ * <div class="changed_added_2_2">
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * </div>
+ *
+ * @since 2.2
+ */
+public abstract class FlashWrapper extends Flash implements FacesWrapper<Flash> {
+    @Override
+    public abstract Flash getWrapped();
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#doPostPhaseActions(FacesContext)} on the
+     * wrapped {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void doPostPhaseActions(FacesContext ctx) {
+        getWrapped().doPostPhaseActions(ctx);
+        
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#doPrePhaseActions(FacesContext)} on the
+     * wrapped {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void doPrePhaseActions(FacesContext ctx) {
+        getWrapped().doPrePhaseActions(ctx);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#isKeepMessages()} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public boolean isKeepMessages() {
+        return getWrapped().isKeepMessages();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#isRedirect()} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public boolean isRedirect() {
+        return getWrapped().isRedirect();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#keep(String)} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void keep(String key) {
+        getWrapped().keep(key);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#putNow(String, Object)} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void putNow(String key, Object value) {
+        getWrapped().putNow(key, value);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#setKeepMessages(boolean)} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void setKeepMessages(boolean newValue) {
+        getWrapped().setKeepMessages(newValue);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#setRedirect(boolean)} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void setRedirect(boolean newValue) {
+        getWrapped().setRedirect(newValue);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#clear()} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void clear() {
+        getWrapped().clear();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#containsKey(Object)} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public boolean containsKey(Object key) {
+        return getWrapped().containsKey(key);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#containsValue(Object)} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public boolean containsValue(Object value) {
+        return getWrapped().containsValue(value);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#entrySet()} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public Set<Entry<String, Object>> entrySet() {
+        return getWrapped().entrySet();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#get(Object)} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public Object get(Object key) {
+        return getWrapped().get(key);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#isEmpty()} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public boolean isEmpty() {
+        return getWrapped().isEmpty();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#keySet()} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public Set<String> keySet() {
+        return getWrapped().keySet();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#put} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public Object put(String key, Object value) {
+        return getWrapped().put(key, value);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#putAll(Map)} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public void putAll(Map<? extends String, ? extends Object> m) {
+        getWrapped().putAll(m);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#remove(Object)} on the wrapped
+     * {@link Flash} object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public Object remove(Object key) {
+        return getWrapped().remove(key);
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#size()} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public int size() {
+        return getWrapped().size();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method
+     * is to call {@link Flash#values()} on the wrapped {@link Flash}
+     * object.</p>
+     * 
+     * @since 2.2
+     */
+    @Override
+    public Collection<Object> values() {
+        return getWrapped().values();
+    }
+    
+}
diff --git a/javax/faces/context/PartialResponseWriter.java b/javax/faces/context/PartialResponseWriter.java
new file mode 100644
index 0000000..8ba552e
--- /dev/null
+++ b/javax/faces/context/PartialResponseWriter.java
@@ -0,0 +1,393 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import java.io.IOException;
+import java.util.Map;
+import javax.faces.render.ResponseStateManager;
+
+/**
+ * <p class="changed_added_2_0"><strong>PartialResponseWriter</strong>
+ * decorates an existing <code>ResponseWriter</code> to support the
+ * generation of a partial response suitable for Ajax operations.
+ * In addition to the markup generation methods inherited from
+ * <code>javax.faces.context.ResponseWriter</code>, this class provides
+ * methods for constructing the standard partial response elements.</p>
+ *
+ * @since 2.0
+ */
+public class PartialResponseWriter extends ResponseWriterWrapper {
+    // True when we need to close a changes tag
+    //
+    private boolean inChanges = false;
+
+    // True when we need to close a before insert tag
+    //
+    private boolean inInsertBefore = false;
+
+    // True when we need to close afer insert tag
+    //
+    private boolean inInsertAfter = false;
+    
+    // True when we need to close an update tag
+    //
+    private boolean inUpdate = false;
+
+    ResponseWriter writer;
+
+    /**
+     * <p class="changed_added_2_0">Reserved ID value to indicate
+     * entire ViewRoot.</p>
+     *
+     * @since 2.0
+     */
+    public static final String RENDER_ALL_MARKER = "javax.faces.ViewRoot";
+
+    /**
+     * <p class="changed_added_2_0">Reserved ID value to indicate
+     * serialized ViewState.</p>
+     *
+     * @since 2.0
+     */
+    public static final String VIEW_STATE_MARKER = ResponseStateManager.VIEW_STATE_PARAM;
+
+    /**
+     * <p class="changed_added_2_0">Create a <code>PartialResponseWriter</code>.</p>
+     *
+     * @param writer The writer to wrap.
+     * @since 2.0
+     */
+    public PartialResponseWriter(ResponseWriter writer) {
+        this.writer = writer;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the wrapped
+     * {@link ResponseWriter} instance.</p>
+     *
+     * @see ResponseWriterWrapper#getWrapped()
+     * @since 2.0
+     */
+    public ResponseWriter getWrapped() {
+        return writer;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the start of a partial response.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void startDocument() throws IOException {
+        ResponseWriter writer = getWrapped();
+        String encoding = writer.getCharacterEncoding( );
+        if( encoding == null ) {
+            encoding = "utf-8";
+        }
+        writer.writePreamble("<?xml version='1.0' encoding='" + encoding + "'?>\n");
+        writer.startElement("partial-response", null);
+        FacesContext ctx = FacesContext.getCurrentInstance();
+        if (null != ctx && null != ctx.getViewRoot()) {
+            String id = ctx.getViewRoot().getContainerClientId(ctx);
+            writer.writeAttribute("id", id, "id");
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the end of a partial response.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void endDocument() throws IOException {
+        endChangesIfNecessary();
+        ResponseWriter writer = getWrapped();
+        writer.endElement("partial-response");
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the start of an insert operation
+     * where the contents will be inserted before the specified target node.</p>
+     *
+     * @param targetId ID of the node insertion should occur before
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void startInsertBefore(String targetId)
+            throws IOException {
+        startChangesIfNecessary();
+        inInsertBefore = true;
+        ResponseWriter writer = getWrapped();
+        writer.startElement("insert", null);
+        writer.startElement("before", null);
+        writer.writeAttribute("id", targetId, null);
+        writer.startCDATA();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the start of an insert operation
+     * where the contents will be inserted after the specified target node.</p>
+     *
+     * @param targetId ID of the node insertion should occur after
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void startInsertAfter(String targetId)
+            throws IOException {
+        startChangesIfNecessary();
+        inInsertAfter = true;
+        ResponseWriter writer = getWrapped();
+        writer.startElement("insert", null);
+        writer.startElement("after", null);
+        writer.writeAttribute("id", targetId, null);
+        writer.startCDATA();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the end of an insert operation.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void endInsert() throws IOException {
+        ResponseWriter writer = getWrapped();
+        writer.endCDATA();
+        if (inInsertBefore) {
+            writer.endElement("before");
+            inInsertBefore = false;
+        } else if (inInsertAfter) {
+            writer.endElement("after");
+            inInsertAfter = false;
+        }
+        writer.endElement("insert");
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the start of an update operation.</p>
+     *
+     * @param targetId ID of the node to be updated
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void startUpdate(String targetId) throws IOException {
+        startChangesIfNecessary();
+        inUpdate = true;
+        ResponseWriter writer = getWrapped();
+        writer.startElement("update", null);
+        writer.writeAttribute("id", targetId, null);
+        writer.startCDATA();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the end of an update operation.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void endUpdate() throws IOException {
+        ResponseWriter writer = getWrapped();
+        writer.endCDATA();
+        writer.endElement("update");
+        inUpdate = false;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write an attribute update operation.</p>
+     *
+     * @param targetId   ID of the node to be updated
+     * @param attributes Map of attribute name/value pairs to be updated
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void updateAttributes(String targetId, Map<String, String> attributes)
+            throws IOException {
+        startChangesIfNecessary();
+        ResponseWriter writer = getWrapped();
+        writer.startElement("attributes", null);
+        writer.writeAttribute("id", targetId, null);
+        for (Map.Entry<String, String> entry : attributes.entrySet()) {
+            writer.startElement("attribute", null);
+            writer.writeAttribute("name", entry.getKey(), null);
+            writer.writeAttribute("value", entry.getValue(), null);
+            writer.endElement("attribute");
+        }
+        writer.endElement("attributes");
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write a delete operation.</p>
+     *
+     * @param targetId ID of the node to be deleted
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void delete(String targetId) throws IOException {
+        startChangesIfNecessary();
+        ResponseWriter writer = getWrapped();
+        writer.startElement("delete", null);
+        writer.writeAttribute("id", targetId, null);
+        writer.endElement("delete");
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write a redirect operation.</p>
+     *
+     * @param url URL to redirect to
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void redirect(String url) throws IOException {
+        endChangesIfNecessary();
+        ResponseWriter writer = getWrapped();
+        writer.startElement("redirect", null);
+        writer.writeAttribute("url", url, null);
+        writer.endElement("redirect");
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the start of an eval operation.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void startEval() throws IOException {
+        startChangesIfNecessary();
+        ResponseWriter writer = getWrapped();
+        writer.startElement("eval", null);
+        writer.startCDATA();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the end of an eval operation.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void endEval() throws IOException {
+        ResponseWriter writer = getWrapped();
+        writer.endCDATA();
+        writer.endElement("eval");
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the start of an extension operation.</p>
+     *
+     * @param attributes String name/value pairs for extension element attributes
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void startExtension(Map<String, String> attributes) throws IOException {
+        startChangesIfNecessary();
+        ResponseWriter writer = getWrapped();
+        writer.startElement("extension", null);
+        if (attributes != null && !attributes.isEmpty()) {
+            for (Map.Entry<String, String> entry : attributes.entrySet()) {
+                writer.writeAttribute(entry.getKey(), entry.getValue(), null);
+            }
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the end of an extension operation.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void endExtension() throws IOException {
+        ResponseWriter writer = getWrapped();
+        writer.endElement("extension");
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the start of an error.</p>
+     *
+     * @param errorName Descriptive string for the error
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void startError(String errorName) throws IOException {
+        endUpdateIfNecessary();
+        endChangesIfNecessary();
+        ResponseWriter writer = getWrapped();
+        writer.startElement("error", null);
+        writer.startElement("error-name", null);
+        writer.write(errorName);
+        writer.endElement("error-name");
+        writer.startElement("error-message", null);
+        writer.startCDATA();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Write the end of an error.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     * @since 2.0
+     */
+    public void endError() throws IOException {
+        ResponseWriter writer = getWrapped();
+        writer.endCDATA();
+        writer.endElement("error-message");
+        writer.endElement("error");
+    }
+
+    private void startChangesIfNecessary() throws IOException {
+        if (!inChanges) {
+            ResponseWriter writer = getWrapped();
+            writer.startElement("changes", null);
+            inChanges = true;
+        }
+    }
+    
+    private void endUpdateIfNecessary() throws IOException {
+        if (inUpdate) {
+            endUpdate();
+        }
+    }
+
+    private void endChangesIfNecessary() throws IOException {
+        if (inChanges) {
+            ResponseWriter writer = getWrapped();
+            writer.endElement("changes");
+            inChanges = false;
+        }
+    }
+
+}
diff --git a/javax/faces/context/PartialViewContext.java b/javax/faces/context/PartialViewContext.java
new file mode 100644
index 0000000..cbcdf2e
--- /dev/null
+++ b/javax/faces/context/PartialViewContext.java
@@ -0,0 +1,295 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import java.util.Collection;
+
+import javax.faces.event.PhaseId;
+
+/**
+ * <p><strong class="changed_added_2_0 changed_modified_2_2">PartialViewContext</strong>
+ * contains methods and properties that pertain to partial request
+ * processing and partial response rendering on a view.</p> 
+ *
+ * <p>The {@link PartialViewContext} instance is used to determine if
+ * the current request indicates the requirement to perform 
+ * <code>partial processing</code> and/or <code>partial rendering</code>.
+ * Partial processing is the processing of selected components 
+ * through the <code>execute</code> portion of the request processing
+ * lifecycle.  Partial rendering is the rendering of specified
+ * components in the <code>Render Response Phase</code> of the
+ * request processing lifecycle.</p>
+ * 
+ */
+
+public abstract class PartialViewContext {
+
+
+    /**
+     * <p class="changed_added_2_0">
+     * The request parameter name whose request parameter value 
+     * is a <code>Collection</code> of client identifiers identifying the
+     * components that must be processed during the 
+     * <em>Render Response</em> phase of the request processing 
+     * lifecycle.</p>
+     *
+     * @since 2.0
+     */
+    public static final String PARTIAL_RENDER_PARAM_NAME =
+          "javax.faces.partial.render";
+
+
+    /**
+     * <p class="changed_added_2_0">
+     * The request parameter name whose request parameter value 
+     * is a <code>Collection</code> of client identifiers identifying the
+     * components that must be processed during the 
+     * <em>Apply Request Values</em>, <em>Process Validations</em>,
+     * and <em>Update Model Values</em> phases of the request 
+     * processing lifecycle.</p>
+     *
+     * @since 2.0
+     */
+    public static final String PARTIAL_EXECUTE_PARAM_NAME =
+          "javax.faces.partial.execute";
+
+    /**
+     * <p class="changed_added_2_2">
+     * If the request parameter named by the value of this constant has 
+     * a parameter value of <code>true</code>, the implementation
+     * must return <code>true</code> from {@link #isResetValues}.</p>
+     *
+     * @since 2.2
+     */
+    public static final String RESET_VALUES_PARAM_NAME =
+          "javax.faces.partial.resetValues";
+
+    /**
+     * <p class="changed_added_2_0">
+     * The value that when used with {@link #PARTIAL_EXECUTE_PARAM_NAME}
+     * or {@link #PARTIAL_RENDER_PARAM_NAME} indicates these phases
+     * must be skipped.</p>
+     *
+     * @since 2.0
+     */
+    public static final String ALL_PARTIAL_PHASE_CLIENT_IDS = "@all";
+
+
+    // -------------------------------------------------------------- Properties
+    
+    /**
+     * <p class="changed_added_2_0">Return a
+     * <code>Collection</code> of client identifiers from the current request
+     * with the request parameter name {@link #PARTIAL_EXECUTE_PARAM_NAME}.
+     * If there is no such request parameter, return an empty <code>Collection</code>.
+     * These client identifiers are used to identify components that
+     * will be processed during the <code>execute</code> phase of the
+     * request processing lifecycle.  The returned <code>Collection</code> is
+     * mutable.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract Collection<String> getExecuteIds();
+    
+    /**
+     * <p class="changed_added_2_0">Return a
+     * <code>Collection</code> of client identifiers from the current request
+     * with the request parameter name {@link #PARTIAL_RENDER_PARAM_NAME}.
+     * If there is no such request parameter, return an empty <code>Collection</code>.
+     * These client identifiers are used to identify components that
+     * will be processed during the <code>render</code> phase of the
+     * request processing lifecycle.  The returned <code>Collection</code> is 
+     * mutable.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract Collection<String> getRenderIds();
+
+    /**
+     * <p class="changed_added_2_0">Return the {@link ResponseWriter}
+     * to which components should
+     * direct their output for partial view rendering.  Within a given
+     * response, components can use either the ResponseStream or the
+     * ResponseWriter, but not both.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract PartialResponseWriter getPartialResponseWriter();
+
+    /**
+     * <p class="changed_added_2_0">
+     * Return <code>true</code> if the request header 
+     * <code>Faces-Request</code> is present with the value
+     * <code>partial/ajax</code>. 
+     * Otherwise, return <code>false</code>.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract boolean isAjaxRequest();
+
+    /**
+     * <p class="changed_added_2_0">
+     * Return <code>true</code> {@link #isAjaxRequest} returns
+     * <code>true</code> or if the request header
+     * <code>Faces-Request</code> is present with the value
+     * <code>partial/process</code>. 
+     * Otherwise, return <code>false</code>.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract boolean isPartialRequest();
+
+    /**
+     * <p class="changed_added_2_0">
+     * Return <code>true</code> if {@link #isAjaxRequest}
+     * returns <code>true</code> and {@link #PARTIAL_EXECUTE_PARAM_NAME}
+     * is present in the current request with the value
+     * {@link #ALL_PARTIAL_PHASE_CLIENT_IDS}.</p>
+     * Otherwise, return <code>false</code>.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract boolean isExecuteAll();
+
+    /**
+     * <p class="changed_added_2_0">
+     * Return <code>true</code> if {@link #isAjaxRequest}
+     * returns <code>true</code> and {@link #PARTIAL_RENDER_PARAM_NAME}
+     * is present in the current request with the value
+     * {@link #ALL_PARTIAL_PHASE_CLIENT_IDS}.</p>
+     * Otherwise, return <code>false</code>.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract boolean isRenderAll();
+    
+    
+    /**
+     * <p class="chaged_added_2_2">Return <code>true</code> if
+     * the incoming request has a parameter named by the value of {@link #RESET_VALUES_PARAM_NAME}
+     * and that value is <code>true</code>.  To preserve backward compatibility
+     * with custom implementations that may have extended from an earlier
+     * version of this class, an implementation is provided that returns 
+     * <code>false</code>.  A compliant implementation must override this 
+     * method to take the specified action.</p>
+     * 
+     * @since 2.2
+     */
+    public boolean isResetValues() {
+        return false;
+    }
+    
+
+    /**
+     * <p class="changed_added_2_0">
+     * Indicate the entire view must be rendered if
+     * <code>renderAll</code> is <code>true</code>.</p>
+     *
+     * @param renderAll the value <code>true</code> indicates
+     * the entire view must be rendered.
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+    public abstract void setRenderAll(boolean renderAll);
+    
+    /**
+     * <p class="changed_added_2_0">
+     * Dynamically indicate that this is a partial request.</p>
+     *
+     * @param isPartialRequest the value <code>true</code> indicates
+     * this is a partial request.
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     *
+     * @since 2.0
+     */
+
+    public abstract void setPartialRequest(boolean isPartialRequest);
+
+    /**
+     * <p><span class="changed_added_2.0">Release</span> any
+     * resources associated with this <code>PartialViewContext</code>
+     * instance.</p>
+     *
+     * @throws IllegalStateException if this method is called after
+     *  this instance has been released
+     */
+    public abstract void release();
+
+    /**
+     * <p class="changed_added_2_0">Perform lifecycle processing on 
+     * components during the indicated <code>phaseId</code>.  Only 
+     * those components with identifiers existing in the 
+     * <code>Collection</code> returned from {@link #getExecuteIds} 
+     * and {@link #getRenderIds} will be processed.</p>  
+     *
+     * @param phaseId the {@link javax.faces.event.PhaseId} that indicates
+     * the lifecycle phase the components will be processed in. 
+     */ 
+    public abstract void processPartial(PhaseId phaseId);
+
+
+}
diff --git a/javax/faces/context/PartialViewContextFactory.java b/javax/faces/context/PartialViewContextFactory.java
new file mode 100644
index 0000000..575d596
--- /dev/null
+++ b/javax/faces/context/PartialViewContextFactory.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import javax.faces.FacesWrapper;
+
+/**
+ * <p class="changed_modified_2_0">PartialViewContextFactory is a
+ * factory object that creates (if needed) and returns new {@link
+ * PartialViewContext} instances.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p>There must be one <code>PartialViewContextFactory</code> instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   PartialViewContextFactory factory = (PartialViewContextFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY);
+ * </pre>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class PartialViewContextFactory implements FacesWrapper<PartialViewContextFactory> {
+
+    public PartialViewContextFactory() {
+    }
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    /**
+     * @see javax.faces.FacesWrapper#getWrapped()
+     */
+    public PartialViewContextFactory getWrapped() {
+
+        return null;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p><span class="changed_modified_2_0">Create</span> (if needed)
+     * and return a {@link PartialViewContext} instance that is initialized
+     * using the current {@link FacesContext} instance.</p>
+     *
+     * @param context the {@link FacesContext} for the current request. 
+     */
+    public abstract PartialViewContext getPartialViewContext(FacesContext context);
+    
+}
diff --git a/javax/faces/context/PartialViewContextWrapper.java b/javax/faces/context/PartialViewContextWrapper.java
new file mode 100644
index 0000000..846b354
--- /dev/null
+++ b/javax/faces/context/PartialViewContextWrapper.java
@@ -0,0 +1,222 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import java.util.Collection;
+
+import javax.faces.FacesWrapper;
+import javax.faces.event.PhaseId;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Provides</span> 
+ * a simple implementation of {@link PartialViewContext} that can
+ * be subclassed by developers wishing to provide specialized behavior
+ * to an existing {@link PartialViewContext} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link ExternalContext} instance.</p>
+ *
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.0
+ */
+public abstract class PartialViewContextWrapper extends PartialViewContext implements FacesWrapper<PartialViewContext> {
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    /**
+     * @return the wrapped {@link PartialViewContext} instance
+     * @see javax.faces.FacesWrapper#getWrapped()
+     */
+    @Override
+    public abstract PartialViewContext getWrapped();
+
+
+    // ----------------------------------------- Methods from PartialViewContext
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#getExecuteIds()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#getExecuteIds()
+     */
+    @Override
+    public Collection<String> getExecuteIds() {
+        return getWrapped().getExecuteIds();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#getRenderIds()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#getRenderIds()
+     */
+    @Override
+    public Collection<String> getRenderIds() {
+        return getWrapped().getRenderIds();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#getPartialResponseWriter()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#getPartialResponseWriter()
+     */
+    @Override
+    public PartialResponseWriter getPartialResponseWriter() {
+        return getWrapped().getPartialResponseWriter();
+    }
+
+    /**
+     * <p class="changed_added_2_2">The default behavior of this method is to
+     * call {@link PartialViewContext#setPartialRequest(boolean)}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#setPartialRequest(boolean)
+     */
+    @Override
+    public void setPartialRequest(boolean isPartialRequest) {
+        getWrapped().setPartialRequest(isPartialRequest);
+    }
+    
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#isAjaxRequest()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see javax.faces.context.PartialViewContext#isAjaxRequest()
+     */
+    @Override
+    public boolean isAjaxRequest() {
+        return getWrapped().isAjaxRequest();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#isPartialRequest()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#isPartialRequest()
+     */
+    @Override
+    public boolean isPartialRequest() {
+        return getWrapped().isPartialRequest();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#isExecuteAll()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#isExecuteAll()
+     */
+    @Override
+    public boolean isExecuteAll() {
+        return getWrapped().isExecuteAll();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#isRenderAll()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#isRenderAll()
+     */
+    @Override
+    public boolean isRenderAll() {
+        return getWrapped().isRenderAll();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#isResetValues()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#isResetValues()
+     */
+    @Override
+    public boolean isResetValues() {
+        return getWrapped().isResetValues();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#setRenderAll(boolean)}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#setRenderAll(boolean)
+     */
+    @Override
+    public void setRenderAll(boolean renderAll) {
+        getWrapped().setRenderAll(renderAll);
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#release()}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#release()
+     */
+    @Override
+    public void release() {
+        getWrapped().release();
+    }
+
+     /**
+     * <p>The default behavior of this method is to
+     * call {@link PartialViewContext#processPartial(PhaseId)}
+     * on the wrapped {@link PartialViewContext} object.</p>
+     *
+     * @see PartialViewContext#processPartial(PhaseId)
+     */
+    @Override
+    public void processPartial(PhaseId phaseId) {
+        getWrapped().processPartial(phaseId);
+    }
+
+}
diff --git a/javax/faces/context/ResponseStream.java b/javax/faces/context/ResponseStream.java
new file mode 100644
index 0000000..c2ed56b
--- /dev/null
+++ b/javax/faces/context/ResponseStream.java
@@ -0,0 +1,54 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+
+import java.io.OutputStream;
+
+
+/**
+ * <p><strong>ResponseStream</strong> is an interface describing an adapter
+ * to an underlying output mechanism for binary output.</p>
+ */
+
+public abstract class ResponseStream extends OutputStream {
+
+}
diff --git a/javax/faces/context/ResponseWriter.java b/javax/faces/context/ResponseWriter.java
new file mode 100644
index 0000000..d14cbca
--- /dev/null
+++ b/javax/faces/context/ResponseWriter.java
@@ -0,0 +1,391 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+
+import javax.faces.component.UIComponent;
+import java.io.IOException;
+import java.io.Writer;
+
+
+/**
+ * <p><span
+ * class="changed_modified_2_2"><strong>ResponseWriter</strong></span>
+ * is an abstract class describing an adapter to an underlying output
+ * mechanism for character-based output.  In addition to the low-level
+ * <code>write()</code> methods inherited from
+ * <code>java.io.Writer</code>, this class provides utility methods that
+ * are useful in producing elements and attributes for markup languages
+ * like HTML and XML.</p>
+ */
+
+public abstract class ResponseWriter extends Writer {
+
+
+    /**
+     * <p>Return the content type (such as "text/html") for this {@link
+     * ResponseWriter}.  Note: this must not include the "charset="
+     * suffix.</p>
+     */
+    public abstract String getContentType();
+
+
+    /**
+     * <p>Return the character encoding (such as "ISO-8859-1") for this
+     * {@link ResponseWriter}.  Please see <a
+     * href="http://www.iana.org/assignments/character-sets">the
+     * IANA</a> for a list of character encodings.</p>
+     */
+    public abstract String getCharacterEncoding();
+
+
+    /**
+     * <p>Flush any ouput buffered by the output method to the
+     * underlying Writer or OutputStream.  This method
+     * will not flush the underlying Writer or OutputStream;  it
+     * simply clears any values buffered by this {@link ResponseWriter}.</p>
+     */
+    public abstract void flush() throws IOException;
+
+
+    /**
+     * <p>Write whatever text should begin a response.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     */
+    public abstract void startDocument() throws IOException;
+
+
+    /**
+     * <p>Write whatever text should end a response.  If there is an open
+     * element that has been created by a call to <code>startElement()</code>,
+     * that element will be closed first.</p>
+     *
+     * @throws IOException if an input/output error occurs
+     */
+    public abstract void endDocument() throws IOException;
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Write</span> the start of an element, 
+       up to and including the
+     * element name.  Once this method has been called, clients can
+     * call the <code>writeAttribute()</code> or
+     * <code>writeURIAttribute()</code> methods to add attributes and
+     * corresponding values.  The starting element will be closed
+     * (that is, the trailing '>' character added)
+     * on any subsequent call to <code>startElement()</code>,
+     * <code>writeComment()</code>,
+     * <code>writeText()</code>, <code>endElement()</code>,
+     * <code>endDocument()</code>, <code>close()</code>,
+     * <code>flush()</code>, or <code>write()</code>.</p>
+     * 
+     * <div class="changed_added_2_2">
+     * 
+     * <p>If the argument component's pass through attributes 
+     * includes an attribute of the name given by the value of the symbolic
+     * constant {@link javax.faces.render.Renderer#PASSTHROUGH_RENDERER_LOCALNAME_KEY},
+     * use that as the element name, instead of the value passed as the first 
+     * parameter to this method.  Care must be taken so that this value
+     * is not also rendered when any other pass through attributes on this component
+     * are rendered.</p>
+     * 
+     * </div>
+     *
+     * @param name      Name of the element to be started
+
+     * @param component The {@link UIComponent} (if any) to which this
+     *                  element corresponds.  <span
+     *                  class="changed_added_2_2"> This component is
+     *                  inspected for its pass through attributes as
+     *                  described in the standard HTML_BASIC {@code
+     *                  RenderKit} specification.</span>
+
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>name</code>
+     *                              is <code>null</code>
+     */
+    public abstract void startElement(String name, UIComponent component)
+            throws IOException;
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Write</span> the end of an element, 
+     * after closing any open element
+     * created by a call to <code>startElement()</code>.  Elements must be
+     * closed in the inverse order from which they were opened; it is an
+     * error to do otherwise.</p>
+     *
+     * <div class="changed_added_2_2">
+     * 
+     * <p>If the argument component's pass through attributes 
+     * includes an attribute of the name given by the value of the symbolic
+     * constant {@link javax.faces.render.Renderer#PASSTHROUGH_RENDERER_LOCALNAME_KEY},
+     * use that as the element name, instead of the value passed as the first 
+     * parameter to this method.</p>
+     * 
+     * </div>
+     *
+     * @param name Name of the element to be ended
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>name</code>
+     *                              is <code>null</code>
+     */
+    public abstract void endElement(String name) throws IOException;
+
+
+    /**
+     * <p>Write an attribute name and corresponding value, after converting
+     * that text to a String (if necessary), and after performing any escaping
+     * appropriate for the markup language being rendered.
+     * This method may only be called after a call to
+     * <code>startElement()</code>, and before the opened element has been
+     * closed.</p>
+     *
+     * @param name     Attribute name to be added
+     * @param value    Attribute value to be added
+     * @param property Name of the property or attribute (if any) of the
+     *                 {@link UIComponent} associated with the containing element,
+     *                 to which this generated attribute corresponds
+     * @throws IllegalStateException if this method is called when there
+     *                               is no currently open element
+     * @throws IOException           if an input/output error occurs
+     * @throws NullPointerException  if <code>name</code> is
+     *                               <code>null</code>
+     */
+    public abstract void writeAttribute(String name, Object value,
+                                        String property)
+            throws IOException;
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Write</span> a URI
+     * attribute name and corresponding value, after converting that
+     * text to a String (if necessary), and after performing any
+     * encoding <span class="changed_modified_2_2">or escaping</span>
+     * appropriate to the markup language being rendered.  <span
+     * class="changed_modified_2_2">When rendering in a WWW environment,
+     * the escaping conventions established in the W3C URI spec document
+     * <<a
+     * href="http://www.w3.org/Addressing/URL/uri-spec.html">http://www.w3.org/Addressing/URL/uri-spec.html</a>>
+     * must be followed.  In particular, spaces ' ' must be encoded as
+     * %20 and not the plus character '+'.</span> This method may only
+     * be called after a call to <code>startElement()</code>, and before
+     * the opened element has been closed.</p>
+     *
+     * @param name     Attribute name to be added
+     * @param value    Attribute value to be added
+     * @param property Name of the property or attribute (if any) of the
+     *                 {@link UIComponent} associated with the containing element,
+     *                 to which this generated attribute corresponds
+     * @throws IllegalStateException if this method is called when there
+     *                               is no currently open element
+     * @throws IOException           if an input/output error occurs
+     * @throws NullPointerException  if <code>name</code> is
+     *                               <code>null</code>
+     */
+    public abstract void writeURIAttribute(String name, Object value,
+                                           String property)
+            throws IOException;
+
+    /**
+     * <p class="changed_added_2_0">Open an XML <code>CDATA</code>
+     * block.  Note that XML does not allow nested <code>CDATA</code>
+     * blocks, though this method does not enforce that constraint.  The
+     * default implementation of this method takes no action when
+     * invoked.</p>
+     * @throws IOException if input/output error occures
+     */
+    public void startCDATA() throws IOException {
+
+    }
+
+
+    /**
+
+     * <p class="changed_added_2_0">Close an XML <code>CDATA</code>
+     * block.  The default implementation of this method takes no action
+     * when invoked.</p>
+
+     * @throws IOException if input/output error occures
+     */
+    public void endCDATA() throws IOException {
+        throw new UnsupportedOperationException();
+    }
+
+
+    /**
+     * <p>Write a comment containing the specified text, after converting
+     * that text to a String (if necessary), and after performing any escaping
+     * appropriate for the markup language being rendered.  If there is
+     * an open element that has been created by a call to
+     * <code>startElement()</code>, that element will be closed first.</p>
+     *
+     * @param comment Text content of the comment
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>comment</code>
+     *                              is <code>null</code>
+     */
+    public abstract void writeComment(Object comment) throws IOException;
+    
+    
+    /**
+     * <p class="changed_added_2_2">Write a string containing the markup specific
+     * preamble.
+     * No escaping is performed. The default 
+     * implementation simply calls through to {@link #write(java.lang.String)} .</p>
+     * 
+     * <div class="changed_added_2_2">
+     * 
+     * <p>The implementation makes no checks if this is the correct place
+     * in the response to have a preamble, nor does it prevent the preamble
+     * from being written more than once.</p>
+     * 
+     * </div>
+     * 
+     * @since 2.2
+     * @param preamble Text content of the preamble
+     * @throws IOException if an input/output error occurs
+     */
+    public void writePreamble(String preamble) throws IOException {
+        write(preamble);
+    }
+
+    /**
+     * <p class="changed_added_2_2">Write a string containing the markup specific
+     * doctype.
+     * No escaping is performed. The default 
+     * implementation simply calls through to {@link #write(java.lang.String)} .</p>
+     * 
+     * <div class="changed_added_2_2">
+     * 
+     * <p>The implementation makes no checks if this is the correct place
+     * in the response to have a doctype, nor does it prevent the doctype
+     * from being written more than once.</p>
+     * 
+     * </div>
+     * 
+     * @since 2.2
+     * @param doctype Text content of the doctype
+     * @throws IOException if an input/output error occurs
+     */
+    public void writeDoctype(String doctype) throws IOException {
+        write(doctype);
+    }
+
+
+    /**
+     * <p>Write an object, after converting it to a String (if necessary),
+     * and after performing any escaping appropriate for the markup language
+     * being rendered.  If there is an open element that has been created
+     * by a call to <code>startElement()</code>, that element will be closed
+     * first.</p>
+     *
+     * @param text     Text to be written
+     * @param property Name of the property or attribute (if any) of the
+     *                 {@link UIComponent} associated with the containing element,
+     *                 to which this generated text corresponds
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>text</code>
+     *                              is <code>null</code>
+     */
+    public abstract void writeText(Object text, String property)
+            throws IOException;
+
+    /**
+     * <p>Write an object, after converting it to a String (if
+     * necessary), and after performing any escaping appropriate for the
+     * markup language being rendered.  This method is equivalent to
+     * {@link #writeText(java.lang.Object,java.lang.String)} but adds a
+     * <code>component</code> property to allow custom
+     * <code>ResponseWriter</code> implementations to associate a
+     * component with an arbitrary portion of text.</p>
+     * <p/>
+     * <p>The default implementation simply ignores the
+     * <code>component</code> argument and calls through to {@link
+     * #writeText(java.lang.Object,java.lang.String)}</p>
+     *
+     * @param text      Text to be written
+     * @param component The {@link UIComponent} (if any) to which
+     *                  this element corresponds
+     * @param property  Name of the property or attribute (if any) of the
+     *                  {@link UIComponent} associated with the containing element,
+     *                  to which this generated text corresponds
+     * @throws IOException          if an input/output error occurs
+     * @throws NullPointerException if <code>text</code>
+     *                              is <code>null</code>
+     * @since 1.2
+     */
+    public void writeText(Object text, UIComponent component, String property)
+            throws IOException {
+        writeText(text, property);
+    }
+
+
+    /**
+     * <p>Write text from a character array, after any performing any
+     * escaping appropriate for the markup language being rendered.
+     * If there is an open element that has been created by a call to
+     * <code>startElement()</code>, that element will be closed first.</p>
+     *
+     * @param text Text to be written
+     * @param off  Starting offset (zero-relative)
+     * @param len  Number of characters to be written
+     * @throws IndexOutOfBoundsException if the calculated starting or
+     *                                   ending position is outside the bounds of the character array
+     * @throws IOException               if an input/output error occurs
+     * @throws NullPointerException      if <code>text</code>
+     *                                   is <code>null</code>
+     */
+    public abstract void writeText(char text[], int off, int len)
+            throws IOException;
+
+
+    /**
+     * <p>Create and return a new instance of this {@link ResponseWriter},
+     * using the specified <code>Writer</code> as the output destination.</p>
+     *
+     * @param writer The <code>Writer</code> that is the output destination
+     */
+    public abstract ResponseWriter cloneWithWriter(Writer writer);
+
+
+}
diff --git a/javax/faces/context/ResponseWriterWrapper.java b/javax/faces/context/ResponseWriterWrapper.java
new file mode 100644
index 0000000..63f4a19
--- /dev/null
+++ b/javax/faces/context/ResponseWriterWrapper.java
@@ -0,0 +1,384 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.context;
+
+import javax.faces.FacesWrapper;
+import javax.faces.component.UIComponent;
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * <p><span class="changed_modified_2_0">Provides</span> a simple implementation
+ * of {@link ResponseWriter} that
+ * can be subclassed by developers wishing to provide specialized
+ * behavior to an existing {@link ResponseWriter} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link ResponseWriter}.</p>
+ * <p/>
+ * <p>Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * @since 1.2
+ */
+public abstract class ResponseWriterWrapper extends ResponseWriter implements FacesWrapper<ResponseWriter> {
+
+
+    /**
+     * <p class="changed_modified_2_0">Return the instance that we are wrapping.
+     * As of version 2, this method is public.</p>
+     */
+    @Override
+    public abstract ResponseWriter getWrapped();
+
+    // -------------------------- Methods from javax.faces.contxt.ResponseWriter
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#getContentType()}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#getContentType()
+     * @since 1.2
+     */
+    @Override
+    public String getContentType() {
+
+        return getWrapped().getContentType();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#getCharacterEncoding()}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#getCharacterEncoding()
+     * @since 1.2
+     */
+    @Override
+    public String getCharacterEncoding() {
+
+        return getWrapped().getCharacterEncoding();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#flush()}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#flush()
+     * @since 1.2
+     */
+    @Override
+    public void flush() throws IOException {
+
+        getWrapped().flush();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#startDocument()}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#startDocument()
+     * @since 1.2
+     */
+    @Override
+    public void startDocument() throws IOException {
+
+        getWrapped().startDocument();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#endDocument()}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#endDocument()
+     * @since 1.2
+     */
+    @Override
+    public void endDocument() throws IOException {
+
+        getWrapped().endDocument();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#startElement(String, javax.faces.component.UIComponent)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#startElement(String, javax.faces.component.UIComponent)
+     * @since 1.2
+     */
+    @Override
+    public void startElement(String name, UIComponent component)
+            throws IOException {
+
+        getWrapped().startElement(name, component);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResponseWriter#startCDATA} on the wrapped
+     * {@link ResponseWriter} object.</p>
+     * @since 2.0
+     * @throws IOException on any read/write error
+     */
+    @Override
+    public void startCDATA() throws IOException {
+        getWrapped().startCDATA();
+    }
+
+    /**
+     * <p class="changed_added_2_0">The default behavior of this method
+     * is to call {@link ResponseWriter#endCDATA} on the wrapped
+     * {@link ResponseWriter} object.</p>
+     * @since 2.0
+     * @throws IOException on any read/write error
+     */
+    @Override
+    public void endCDATA() throws IOException {
+        getWrapped().endCDATA();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#endElement(String)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#endElement(String)
+     * @since 1.2
+     * @throws IOException on any read/write error
+     */
+    @Override
+    public void endElement(String name) throws IOException {
+
+        getWrapped().endElement(name);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writeAttribute(String, Object, String)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writeAttribute(String, Object, String)
+     * @since 1.2
+     */
+    @Override
+    public void writeAttribute(String name, Object value, String property)
+            throws IOException {
+
+        getWrapped().writeAttribute(name, value, property);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writeURIAttribute(String, Object, String)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writeURIAttribute(String, Object, String)
+     * @since 1.2
+     */
+    @Override
+    public void writeURIAttribute(String name, Object value, String property)
+            throws IOException {
+
+        getWrapped().writeURIAttribute(name, value, property);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writeComment(Object)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writeComment(Object)
+     * @since 1.2
+     */
+    @Override
+    public void writeComment(Object comment) throws IOException {
+
+        getWrapped().writeComment(comment);
+
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writeDoctype}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writeDoctype
+     * @since 2.2
+     */
+    @Override
+    public void writeDoctype(String doctype) throws IOException {
+        getWrapped().writeDoctype(doctype);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writePreamble}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writePreamble
+     * @since 2.2
+     */
+    @Override
+    public void writePreamble(String preamble) throws IOException {
+        getWrapped().writePreamble(preamble);
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writeText(Object, String)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writeText(Object, String)
+     * @since 1.2
+     */
+    @Override
+    public void writeText(Object text, String property) throws IOException {
+
+        getWrapped().writeText(text, property);
+
+    }
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writeText(Object, UIComponent, String)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writeText(Object, String)
+     * @since 1.2
+     */
+
+    @Override
+    public void writeText(Object text, UIComponent component, String property)
+            throws IOException {
+        getWrapped().writeText(text, component, property);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#writeText(char[], int, int)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#writeText(char[], int, int)
+     * @since 1.2
+     */
+    @Override
+    public void writeText(char[] text, int off, int len) throws IOException {
+
+        getWrapped().writeText(text, off, len);
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#cloneWithWriter(java.io.Writer)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#cloneWithWriter(java.io.Writer)
+     * @since 1.2
+     */
+    @Override
+    public ResponseWriter cloneWithWriter(Writer writer) {
+
+        return getWrapped().cloneWithWriter(writer);
+
+    }
+
+
+    // --------------------------------------------- Methods from java.io.Writer
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#close()}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#close()
+     * @since 1.2
+     */
+    @Override
+    public void close() throws IOException {
+
+        getWrapped().close();
+
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link ResponseWriter#write(char[], int, int)}
+     * on the wrapped {@link ResponseWriter} object.</p>
+     *
+     * @see ResponseWriter#write(char[], int, int)
+     * @since 1.2
+     */
+    @Override
+    public void write(char[] cbuf, int off, int len) throws IOException {
+
+        getWrapped().write(cbuf, off, len);
+
+    }
+
+}
diff --git a/javax/faces/context/package.html b/javax/faces/context/package.html
new file mode 100644
index 0000000..9fd89dd
--- /dev/null
+++ b/javax/faces/context/package.html
@@ -0,0 +1,55 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.context"</title>
+</head>
+<body bgcolor="white">
+<p><span class="changed_modified_2_0 changed_modified_2_1 changed_modified_2_2">
+Classes</span> and interfaces
+defining per-request state information.  The main class in this package
+is {@link javax.faces.context.FacesContext}, which is the access point
+for all per-request information, as well as the gateway to several other
+helper classes.</p>
+</body>
+</html>
diff --git a/javax/faces/convert/BigDecimalConverter.java b/javax/faces/convert/BigDecimalConverter.java
new file mode 100644
index 0000000..0db8d5f
--- /dev/null
+++ b/javax/faces/convert/BigDecimalConverter.java
@@ -0,0 +1,166 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import java.math.BigDecimal;
+
+
+/**
+ * <p>{@link Converter} implementation for
+ * <code>java.math.BigDecimal</code> values.</p>
+ */
+
+public class BigDecimalConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.BigDecimal";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>BigDecimal</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String DECIMAL_ID =
+         "javax.faces.converter.BigDecimalConverter.DECIMAL";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>BigDecimal</code> value to
+     * <code>String</code> fails.  The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (new BigDecimal(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           DECIMAL_ID,
+                                           value,
+                                           "198.23",
+                                           MessageFactory.getLabel(context,
+                                                                   component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+
+
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (value.toString());
+        } catch (Exception e) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           STRING_ID,
+                                           value,
+                                           MessageFactory.getLabel(context,
+                                                                   component)),
+                                           e);
+        }
+    }
+}
diff --git a/javax/faces/convert/BigIntegerConverter.java b/javax/faces/convert/BigIntegerConverter.java
new file mode 100644
index 0000000..2e907f2
--- /dev/null
+++ b/javax/faces/convert/BigIntegerConverter.java
@@ -0,0 +1,164 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import java.math.BigInteger;
+
+
+/**
+ * <p>{@link Converter} implementation for
+ * <code>java.math.BigInteger</code> values.</p>
+ */
+
+public class BigIntegerConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.BigInteger";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>BigInteger</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String BIGINTEGER_ID =
+         "javax.faces.converter.BigIntegerConverter.BIGINTEGER";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>BigInteger</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (new BigInteger(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           BIGINTEGER_ID,
+                                           value,
+                                           "9876",
+                                           MessageFactory.getLabel(context,
+                                                                   component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (value.toString());
+        } catch (Exception e) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           STRING_ID,
+                                           value,
+                                           MessageFactory.getLabel(context,
+                                                                   component)),
+                                           e);
+        }
+    }
+}
diff --git a/javax/faces/convert/BooleanConverter.java b/javax/faces/convert/BooleanConverter.java
new file mode 100644
index 0000000..7468c74
--- /dev/null
+++ b/javax/faces/convert/BooleanConverter.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Boolean</code>
+ * (and boolean primitive) values.</p>
+ */
+
+public class BooleanConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Boolean";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Boolean</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String BOOLEAN_ID =
+         "javax.faces.converter.BooleanConverter.BOOLEAN";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Boolean</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        // Let them know that the value being converted is not specifically
+        // "true" or "false".
+        try {
+            return (Boolean.valueOf(value));
+        } catch (Exception e) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           BOOLEAN_ID,
+                                           value,
+                                           MessageFactory.getLabel(context,
+                                                                   component)),
+                                           e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        try {
+            return value.toString();
+        } catch (Exception e) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           STRING_ID,
+                                           value,
+                                           MessageFactory.getLabel(context,
+                                                                   component)),
+                                           e);
+        }
+    }
+}
diff --git a/javax/faces/convert/ByteConverter.java b/javax/faces/convert/ByteConverter.java
new file mode 100644
index 0000000..b5e3b84
--- /dev/null
+++ b/javax/faces/convert/ByteConverter.java
@@ -0,0 +1,163 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Byte</code>
+ * (and byte primitive) values.</p>
+ */
+
+public class ByteConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Byte";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Byte</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String BYTE_ID =
+         "javax.faces.converter.ByteConverter.BYTE";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Byte</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (Byte.valueOf(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           BYTE_ID,
+                                           value,
+                                           "254",
+                                           MessageFactory.getLabel(context,
+                                                                   component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (Byte.toString(((Byte) value).byteValue()));
+        } catch (Exception e) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           STRING_ID,
+                                           value,
+                                           MessageFactory.getLabel(context,
+                                                                   component)),
+                                           e);
+        }
+    }
+}
diff --git a/javax/faces/convert/CharacterConverter.java b/javax/faces/convert/CharacterConverter.java
new file mode 100644
index 0000000..ac599dd
--- /dev/null
+++ b/javax/faces/convert/CharacterConverter.java
@@ -0,0 +1,149 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Character</code>
+ * (and char primitive) values.</p>
+ */
+
+public class CharacterConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Character";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Character</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String CHARACTER_ID =
+         "javax.faces.converter.CharacterConverter.CHARACTER";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Character</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (value.charAt(0));
+        } catch (Exception e) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                                           CHARACTER_ID,
+                                           value,
+                                           MessageFactory.getLabel(context,
+                                                                   component)),
+                                           e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        try {
+            return (value.toString());
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+
+    }
+}
diff --git a/javax/faces/convert/Converter.java b/javax/faces/convert/Converter.java
new file mode 100644
index 0000000..9ccdefb
--- /dev/null
+++ b/javax/faces/convert/Converter.java
@@ -0,0 +1,150 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_2">Converter</strong> is an
+ * interface describing a Java class that can perform Object-to-String
+ * and String-to-Object conversions between model data objects and a
+ * String representation of those objects that is suitable for
+ * rendering.</p>
+
+ * <p/>
+ * <p>{@link Converter} implementations must have a zero-arguments public
+ * constructor.  In addition, if the {@link Converter} class wishes to have
+ * configuration property values saved and restored with the component tree,
+ * the implementation must also implement {@link StateHolder}.</p>
+ * <p/>
+ * <p>Starting with version 1.2 of the specification, an exception to the above
+ * zero-arguments constructor requirement has been introduced.  If a converter has
+ * a single argument constructor that takes a <code>Class</code> instance and
+ * the <code>Class</code> of the data to be converted is
+ * known at converter instantiation time, this constructor
+ * must be used to instantiate the converter instead of the zero-argument
+ * version.  This enables the per-class conversion
+ * of Java enumerated types.</p>
+ * <p/>
+ * <p>If any <code>Converter</code> implementation requires a
+ * <code>java.util.Locale</code> to perform its job, it must obtain that
+ * <code>Locale</code> from the {@link javax.faces.component.UIViewRoot}
+ * of the current {@link FacesContext}, unless the
+ * <code>Converter</code> maintains its own <code>Locale</code> as part
+ * of its state.</p>
+ *
+ * <p class="changed_added_2_0">If the class implementing
+ * <code>Converter</code> has a {@link
+ * javax.faces.application.ResourceDependency} annotation, the action
+ * described in <code>ResourceDependency</code> must be taken when
+ * {@link javax.faces.component.ValueHolder#setConverter} is called.
+ * If the class implementing <code>Converter</code> has a {@link
+ * javax.faces.application.ResourceDependencies} annotation, the
+ * action described in <code>ResourceDependencies</code> must be taken 
+ * when {@link javax.faces.component.ValueHolder#setConverter} is called.</p>
+ */
+
+public interface Converter {
+
+
+    /**
+     * <p>Convert the specified string value, which is associated with
+     * the specified {@link UIComponent}, into a model data object that
+     * is appropriate for being stored during the <em>Apply Request
+     * Values</em> phase of the request processing lifecycle.</p>
+     *
+     * @param context   {@link FacesContext} for the request being processed
+     * @param component {@link UIComponent} with which this model object
+     *                  value is associated
+     * @param value     String value to be converted (may be <code>null</code>)
+     * @return <code>null</code> if the value to convert is <code>null</code>,
+     *         otherwise the result of the conversion
+     * @throws ConverterException   if conversion cannot be successfully
+     *                              performed
+     * @throws NullPointerException if <code>context</code> or
+     *                              <code>component</code> is <code>null</code>
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value);
+
+
+    /**
+     * <p>Convert the specified model object value, which is associated with
+     * the specified {@link UIComponent}, into a String that is suitable
+     * for being included in the response generated during the
+     * <em>Render Response</em> phase of the request processing
+     * lifeycle.</p>
+     *
+     * @param context   {@link FacesContext} for the request being processed
+     * @param component {@link UIComponent} with which this model object
+     *                  value is associated
+     * @param value     Model object value to be converted
+     *                  (may be <code>null</code>)
+     * @return a zero-length String if value is <code>null</code>,
+     *         otherwise the result of the conversion
+     * @throws ConverterException   if conversion cannot be successfully
+     *                              performed
+     * @throws NullPointerException if <code>context</code> or
+     *                              <code>component</code> is <code>null</code>
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value);
+
+
+    /**
+     * <p class="changed_added_2_2">
+     * If this param is set, and calling toLowerCase().equals("true") on a
+     * String representation of its value returns true,
+     * Application.createConverter() must guarantee that the default for the
+     * timezone of all javax.faces.convert.DateTimeConverter instances must
+     * be equal to TimeZone.getDefault() instead of "GMT".
+     * </p>
+     * 
+     * @since 2.0
+     */
+    public static final String DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE_PARAM_NAME = 
+            "javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE";
+    
+}
diff --git a/javax/faces/convert/ConverterException.java b/javax/faces/convert/ConverterException.java
new file mode 100644
index 0000000..a598dcb
--- /dev/null
+++ b/javax/faces/convert/ConverterException.java
@@ -0,0 +1,148 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
+
+
+/**
+ * <p><strong>ConverterException</strong> is an exception thrown by the
+ * <code>getAsObject()</code> or <code>getAsText()</code> method of a
+ * {@link Converter}, to indicate that the requested conversion cannot
+ * be performed.</p>
+ */
+
+public class ConverterException extends FacesException {
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public ConverterException() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public ConverterException(String message) {
+
+        super(message);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.  The detail
+     * message will be set to <code>(cause == null ? null :
+     * cause.toString()</code>
+     *
+     * @param cause The root cause for this exception
+     */
+    public ConverterException(Throwable cause) {
+
+        super(cause);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause   The root cause for this exception
+     */
+    public ConverterException(String message, Throwable cause) {
+
+        super(message, cause);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public ConverterException(FacesMessage message) {
+
+        super(message.getSummary());
+        this.facesMessage = message;
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause   The root cause for this exception
+     */
+    public ConverterException(FacesMessage message, Throwable cause) {
+
+        super(message.getSummary(), cause);
+        this.facesMessage = message;
+
+    }
+
+    /**
+     * <p>Returns the FacesMessage associated with this exception; this
+     * will only be available if the converter that thew this exception
+     * instance placed it there.
+     */
+    public FacesMessage getFacesMessage() {
+        return facesMessage;
+    }
+
+    private FacesMessage facesMessage;
+}
diff --git a/javax/faces/convert/DateTimeConverter.java b/javax/faces/convert/DateTimeConverter.java
new file mode 100644
index 0000000..2de2c6b
--- /dev/null
+++ b/javax/faces/convert/DateTimeConverter.java
@@ -0,0 +1,624 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.PartialStateHolder;
+import javax.faces.context.FacesContext;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+
+/**
+ * <p><span class="changed_modified_2_0_rev_a">{@link Converter}</span>
+ * implementation for <code>java.util.Date</code> values.</p>
+ *
+ * <p>The <code>getAsObject()</code> method parses a String into a
+ * <code>java.util.Date</code>, according to the following algorithm:</p>
+ * <ul>
+ * <li>If the specified String is null, return
+ * a <code>null</code>.  Otherwise, trim leading and trailing
+ * whitespace before proceeding.</li>
+ * <li>If the specified String - after trimming - has a zero length,
+ * return <code>null</code>.</li>
+ * <li>If the <code>locale</code> property is not null,
+ * use that <code>Locale</code> for managing parsing.  Otherwise, use the
+ * <code>Locale</code> from the <code>UIViewRoot</code>.</li>
+ * <li>If a <code>pattern</code> has been specified, its syntax must conform
+ * the rules specified by <code>java.text.SimpleDateFormat</code>.  Such
+ * a pattern will be used to parse, and the <code>type</code>,
+ * <code>dateStyle</code>, and <code>timeStyle</code> properties
+ * will be ignored.</li>
+ * <li>If a <code>pattern</code> has not been specified, parsing will be based
+ * on the <code>type</code> property, which expects a date value, a time
+ * value, or both.  Any date and time values included will be parsed in
+ * accordance to the styles specified by <code>dateStyle</code> and
+ * <code>timeStyle</code>, respectively.</li>
+ * <li>If a <code>timezone</code> has been specified, it must be passed
+ * to the underlying <code>DateFormat</code> instance.  Otherwise
+ * the "GMT" timezone is used.</li>
+ * <li>In all cases, parsing must be non-lenient; the given string must
+ * strictly adhere to the parsing format.</li>
+ * </ul>
+ * <p/>
+ * <p>The <code>getAsString()</code> method expects a value of type
+ * <code>java.util.Date</code> (or a subclass), and creates a formatted
+ * String according to the following algorithm:</p>
+ * <ul>
+ * <li>If the specified value is null, return a zero-length String.</li>
+ * <li>If the specified value is a String, return it unmodified.</li>
+ * <li>If the <code>locale</code> property is not null,
+ * use that <code>Locale</code> for managing formatting.  Otherwise, use the
+ * <code>Locale</code> from the <code>UIViewRoot</code>.</li>
+ * <li>If a <code>timezone</code> has been specified, it must be passed
+ * to the underlying <code>DateFormat</code> instance.  Otherwise
+ * the "GMT" timezone is used.</li>
+ * <li>If a <code>pattern</code> has been specified, its syntax must conform
+ * the rules specified by <code>java.text.SimpleDateFormat</code>.  Such
+ * a pattern will be used to format, and the <code>type</code>,
+ * <code>dateStyle</code>, and <code>timeStyle</code> properties
+ * will be ignored.</li>
+ * <li>If a <code>pattern</code> has not been specified, formatting will be
+ * based on the <code>type</code> property, which includes a date value,
+ * a time value, or both into the formatted String.  Any date and time
+ * values included will be formatted in accordance to the styles specified
+ * by <code>dateStyle</code> and <code>timeStyle</code>, respectively.</li>
+ * </ul>
+ */
+
+public class DateTimeConverter implements Converter, PartialStateHolder {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.DateTime";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Date</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String DATE_ID =
+         "javax.faces.converter.DateTimeConverter.DATE";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Time</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String TIME_ID =
+         "javax.faces.converter.DateTimeConverter.TIME";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>DateTime</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String DATETIME_ID =
+         "javax.faces.converter.DateTimeConverter.DATETIME";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>DateTime</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+
+    private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT");
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    private String dateStyle = "default";
+    private Locale locale = null;
+    private String pattern = null;
+    private String timeStyle = "default";
+    private TimeZone timeZone = DEFAULT_TIME_ZONE;
+    private String type = "date";
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return the style to be used to format or parse dates.  If not set,
+     * the default value, <code>default</code>, is returned.</p>
+     */
+    public String getDateStyle() {
+
+        return (this.dateStyle);
+
+    }
+
+
+    /**
+     * <p>Set the style to be used to format or parse dates.  Valid values
+     * are <code>default</code>, <code>short</code>, <code>medium</code>,
+     * <code>long</code>, and <code>full</code>.
+     * An invalid value will cause a {@link ConverterException} when
+     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
+     *
+     * @param dateStyle The new style code
+     */
+    public void setDateStyle(String dateStyle) {
+
+        clearInitialState();
+        this.dateStyle = dateStyle;
+
+    }
+
+
+    /**
+     * <p>Return the <code>Locale</code> to be used when parsing or formatting
+     * dates and times. If not explicitly set, the <code>Locale</code> stored
+     * in the {@link javax.faces.component.UIViewRoot} for the current
+     * request is returned.</p>
+     */
+    public Locale getLocale() {
+
+        if (this.locale == null) {
+            this.locale =
+                 getLocale(FacesContext.getCurrentInstance());
+        }
+        return (this.locale);
+
+    }
+
+
+    /**
+     * <p>Set the <code>Locale</code> to be used when parsing or formatting
+     * dates and times.  If set to <code>null</code>, the <code>Locale</code>
+     * stored in the {@link javax.faces.component.UIViewRoot} for the current
+     * request will be utilized.</p>
+     *
+     * @param locale The new <code>Locale</code> (or <code>null</code>)
+     */
+    public void setLocale(Locale locale) {
+
+        clearInitialState();
+        this.locale = locale;
+
+    }
+
+
+    /**
+     * <p>Return the format pattern to be used when formatting and
+     * parsing dates and times.</p>
+     */
+    public String getPattern() {
+
+        return (this.pattern);
+
+    }
+
+
+    /**
+     * <p>Set the format pattern to be used when formatting and parsing
+     * dates and times.  Valid values are those supported by
+     * <code>java.text.SimpleDateFormat</code>.
+     * An invalid value will cause a {@link ConverterException} when
+     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
+     *
+     * @param pattern The new format pattern
+     */
+    public void setPattern(String pattern) {
+
+        clearInitialState();
+        this.pattern = pattern;
+
+    }
+
+
+    /**
+     * <p>Return the style to be used to format or parse times.  If not set,
+     * the default value, <code>default</code>, is returned.</p>
+     */
+    public String getTimeStyle() {
+
+        return (this.timeStyle);
+
+    }
+
+
+    /**
+     * <p>Set the style to be used to format or parse times.  Valid values
+     * are <code>default</code>, <code>short</code>, <code>medium</code>,
+     * <code>long</code>, and <code>full</code>.
+     * An invalid value will cause a {@link ConverterException} when
+     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
+     *
+     * @param timeStyle The new style code
+     */
+    public void setTimeStyle(String timeStyle) {
+
+        clearInitialState();
+        this.timeStyle = timeStyle;
+
+    }
+
+
+    /**
+     * <p>Return the <code>TimeZone</code> used to interpret a time value.
+     * If not explicitly set, the default time zone of <code>GMT</code>
+     * returned.</p>
+     */
+    public TimeZone getTimeZone() {
+
+        return (this.timeZone);
+
+    }
+
+
+    /**
+     * <p>Set the <code>TimeZone</code> used to interpret a time value.</p>
+     *
+     * @param timeZone The new time zone
+     */
+    public void setTimeZone(TimeZone timeZone) {
+
+        clearInitialState();
+        this.timeZone = timeZone;
+
+    }
+
+
+    /**
+     * <p>Return the type of value to be formatted or parsed.
+     * If not explicitly set, the default type, <code>date</code>
+     * is returned.</p>
+     */
+    public String getType() {
+
+        return (this.type);
+
+    }
+
+
+    /**
+     * <p>Set the type of value to be formatted or parsed.
+     * Valid values are <code>both</code>, <code>date</code>, or
+     * <code>time</code>.
+     * An invalid value will cause a {@link ConverterException} when
+     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
+     *
+     * @param type The new date style
+     */
+    public void setType(String type) {
+
+        clearInitialState();
+        this.type = type;
+
+    }
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        Object returnValue = null;
+        DateFormat parser = null;
+
+        try {
+
+            // If the specified value is null or zero-length, return null
+            if (value == null) {
+                return (null);
+            }
+            value = value.trim();
+            if (value.length() < 1) {
+                return (null);
+            }
+
+            // Identify the Locale to use for parsing
+            Locale locale = getLocale(context);
+
+            // Create and configure the parser to be used
+            parser = getDateFormat(locale);
+            if (null != timeZone) {
+                parser.setTimeZone(timeZone);
+            }
+
+            // Perform the requested parsing
+            returnValue = parser.parse(value);
+        } catch (ParseException e) {
+            if ("date".equals(type)) {
+                throw new ConverterException(MessageFactory.getMessage(
+                     context, DATE_ID, value,
+                     parser.format(new Date(System.currentTimeMillis())),
+                     MessageFactory.getLabel(context, component)), e);
+            } else if ("time".equals(type)) {
+                throw new ConverterException(MessageFactory.getMessage(
+                     context, TIME_ID, value,
+                     parser.format(new Date(System.currentTimeMillis())),
+                     MessageFactory.getLabel(context, component)), e);
+            } else if ("both".equals(type)) {
+                throw new ConverterException(MessageFactory.getMessage(
+                     context, DATETIME_ID, value,
+                     parser.format(new Date(System.currentTimeMillis())),
+                     MessageFactory.getLabel(context, component)), e);
+            }
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+        return returnValue;
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        try {
+
+            // If the specified value is null, return a zero-length String
+            if (value == null) {
+                return "";
+            }
+
+            // If the incoming value is still a string, play nice
+            // and return the value unmodified
+            if (value instanceof String) {
+                return (String) value;
+            }
+
+            // Identify the Locale to use for formatting
+            Locale locale = getLocale(context);
+
+            // Create and configure the formatter to be used
+            DateFormat formatter = getDateFormat(locale);
+            if (null != timeZone) {
+                formatter.setTimeZone(timeZone);
+            }
+
+            // Perform the requested formatting
+            return (formatter.format(value));
+
+        } catch (ConverterException e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        } catch (Exception e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        }
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Return a <code>DateFormat</code> instance to use for formatting
+     * and parsing in this {@link Converter}.</p>
+     *
+     * @param locale  The <code>Locale</code> used to select formatting
+     *                and parsing conventions
+     * @throws ConverterException if no instance can be created
+     */
+    private DateFormat getDateFormat(Locale locale) {
+
+        // PENDING(craigmcc) - Implement pooling if needed for performance?
+
+        if (pattern == null && type == null) {
+            throw new IllegalArgumentException("Either pattern or type must" +
+                 " be specified.");
+        }
+
+        DateFormat df;
+        if (pattern != null) {
+            df = new SimpleDateFormat(pattern, locale);
+        } else if (type.equals("both")) {
+            df = DateFormat.getDateTimeInstance
+                 (getStyle(dateStyle), getStyle(timeStyle), locale);
+        } else if (type.equals("date")) {
+            df = DateFormat.getDateInstance(getStyle(dateStyle), locale);
+        } else if (type.equals("time")) {
+            df = DateFormat.getTimeInstance(getStyle(timeStyle), locale);
+        } else {
+            // PENDING(craigmcc) - i18n
+            throw new IllegalArgumentException("Invalid type: " + type);
+        }
+        df.setLenient(false);
+        return (df);
+
+    }
+
+
+    /**
+     * <p>Return the <code>Locale</code> we will use for localizing our
+     * formatting and parsing processing.</p>
+     *
+     * @param context The {@link FacesContext} for the current request
+     */
+    private Locale getLocale(FacesContext context) {
+
+        // PENDING(craigmcc) - JSTL localization context?
+        Locale locale = this.locale;
+        if (locale == null) {
+            locale = context.getViewRoot().getLocale();
+        }
+        return (locale);
+
+    }
+
+
+    /**
+     * <p>Return the style constant for the specified style name.</p>
+     *
+     * @param name Name of the style for which to return a constant
+     * @throws ConverterException if the style name is not valid
+     */
+    private static int getStyle(String name) {
+
+        if ("default".equals(name)) {
+            return (DateFormat.DEFAULT);
+        } else if ("short".equals(name)) {
+            return (DateFormat.SHORT);
+        } else if ("medium".equals(name)) {
+            return (DateFormat.MEDIUM);
+        } else if ("long".equals(name)) {
+            return (DateFormat.LONG);
+        } else if ("full".equals(name)) {
+            return (DateFormat.FULL);
+        } else {
+            // PENDING(craigmcc) - i18n
+            throw new ConverterException("Invalid style '" + name + '\'');
+        }
+
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            Object values[] = new Object[6];
+            values[0] = dateStyle;
+            values[1] = locale;
+            values[2] = pattern;
+            values[3] = timeStyle;
+            values[4] = timeZone;
+            values[5] = type;
+            return (values);
+        }
+        return null;
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+            Object values[] = (Object[]) state;
+            dateStyle = (String) values[0];
+            locale = (Locale) values[1];
+            pattern = (String) values[2];
+            timeStyle = (String) values[3];
+            timeZone = (TimeZone) values[4];
+            type = (String) values[5];
+        }
+
+    }
+
+
+    private boolean transientFlag = false;
+
+
+    public boolean isTransient() {
+        return (transientFlag);
+    }
+
+
+    public void setTransient(boolean transientFlag) {
+        this.transientFlag = transientFlag;
+    }
+
+    private boolean initialState;
+
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+}
diff --git a/javax/faces/convert/DoubleConverter.java b/javax/faces/convert/DoubleConverter.java
new file mode 100644
index 0000000..ae13a17
--- /dev/null
+++ b/javax/faces/convert/DoubleConverter.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Double</code>
+ * (and double primitive) values.</p>
+ */
+
+public class DoubleConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Double";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Double</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String DOUBLE_ID =
+         "javax.faces.converter.DoubleConverter.DOUBLE";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Double</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (Double.valueOf(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, DOUBLE_ID, value, "1999999",
+                 MessageFactory.getLabel(context, component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (Double.toString(((Number) value).doubleValue()));
+        } catch (Exception e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        }
+    }
+}
diff --git a/javax/faces/convert/EnumConverter.java b/javax/faces/convert/EnumConverter.java
new file mode 100644
index 0000000..972605c
--- /dev/null
+++ b/javax/faces/convert/EnumConverter.java
@@ -0,0 +1,272 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.PartialStateHolder;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><span class="changed_modified_2_0
+ * changed_modified_2_0_rev_a">{@link Converter}</span> implementation
+ * for <code>java.lang.Enum</code> (and enum primitive) values.</p>
+ *
+ * @since 1.2
+ */
+
+public class EnumConverter implements Converter, PartialStateHolder {
+
+    // for StateHolder
+    public EnumConverter() {
+
+    }
+
+    public EnumConverter(Class targetClass) {
+        this.targetClass = (Class<? extends Enum>) targetClass;
+    }
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Enum";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Enum</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by one of the enum constants or the empty
+     * string if none can be found.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String ENUM_ID =
+         "javax.faces.converter.EnumConverter.ENUM";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Enum</code> fails and no target class has been
+     * provided.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String ENUM_NO_CLASS_ID =
+         "javax.faces.converter.EnumConverter.ENUM_NO_CLASS";
+
+    // ----------------------------------------------------- Converter Methods
+
+    private Class<? extends Enum> targetClass;
+
+
+    /**
+     * <p>Convert the <code>value</code> argument to one of the enum
+     * constants of the class provided in our constructor.  If no
+     * target class argument has been provided to the constructor of
+     * this instance, throw a <code>ConverterException</code>
+     * containing the {@link #ENUM_NO_CLASS_ID} message with proper
+     * parameters.  If the <code>value</code> argument is <code>null</code>
+     * or it  has a length of zero, return <code>null</code>.
+     * Otherwise, perform the equivalent of <code>Enum.valueOf</code> using
+     * target class and <code>value</code> and return the <code>Object</code>.
+     * If the conversion fails, throw a <code>ConverterException</code>
+     * containing the {@link #ENUM_ID} message with proper parameters.
+     * </p>
+     *
+     * @param context   the <code>FacesContext</code> for this request.
+     * @param component the <code>UIComponent</code> to which this value
+     *                  will be applied.
+     * @param value     the String <code>value</code> to be converted to
+     *                  <code>Object</code>.
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        if (targetClass == null) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                      ENUM_NO_CLASS_ID,
+                      value,
+                      MessageFactory.getLabel(context,
+                           component)));
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return Enum.valueOf(targetClass, value);
+        } catch (IllegalArgumentException iae) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                      ENUM_ID,
+                      value,
+                      value,
+                      MessageFactory.getLabel(context,
+                           component)), iae);
+        }
+
+    }
+
+    /**
+     * <p>Convert the enum constant given by the <code>value</code>
+     * argument into a String.  If no target class argument has been
+     * provided to the constructor of this instance, throw a
+     * <code>ConverterException</code> containing the {@link
+     * #ENUM_NO_CLASS_ID} message with proper parameters. If the
+     * <code>value</code> argument is <code>null</code>, return
+     * <code>null</code>.  If the value is an instance of the provided
+     * target class, return its string value by <span
+     * class="changed_added_2_0">casting it to a
+     * <code>java.lang.Enum</code> and returning the result of calling
+     * the <code>name()</code> method.</span> Otherwise, throw a {@link
+     * ConverterException} containing the {@link #ENUM_ID} message with
+     * proper parameters.</p>
+     *
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        if (targetClass == null) {
+            throw new ConverterException(
+                 MessageFactory.getMessage(context,
+                      ENUM_NO_CLASS_ID,
+                      value,
+                      MessageFactory.getLabel(context,
+                           component)));
+        }
+
+        // If the specified value is null, return null
+        if (value == null) {
+            // FIXSPEC even though the Javadoc states that we need to return 
+            // null the master Converter contract states that a null value 
+            // results in a zero-length string (see JAVASERVERFACES_SPEC_PUBLIC-1217)
+            return "";
+        }
+
+        if (targetClass.isInstance(value)) {
+            return ((Enum)value).name();
+        }
+
+        throw new ConverterException(
+             MessageFactory.getMessage(context,
+                  ENUM_ID,
+                  value,
+                  value,
+                  MessageFactory.getLabel(context,
+                       component)));
+    }
+
+    // ----------------------------------------------------------- StateHolder
+
+    public void restoreState(FacesContext facesContext, Object object) {
+        if (facesContext == null) {
+            throw new NullPointerException();
+        }
+        if (object != null) {
+            this.targetClass = (Class<? extends Enum>) object;
+        }
+    }
+
+    public Object saveState(FacesContext facesContext) {
+        if (facesContext == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            return this.targetClass;
+        }
+        return null;
+    }
+
+    private boolean isTransient = false;
+
+    public void setTransient(boolean b) {
+        isTransient = b;
+    }
+
+    public boolean isTransient() {
+        return isTransient;
+    }
+
+    private boolean initialState;
+
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+}
diff --git a/javax/faces/convert/FacesConverter.java b/javax/faces/convert/FacesConverter.java
new file mode 100644
index 0000000..c67d262
--- /dev/null
+++ b/javax/faces/convert/FacesConverter.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_2">The</span> presence of this annotation
+ * on a class automatically registers the class with the runtime as a
+ * {@link Converter}.  The value of the {@link #value} attribute is
+ * taken to be <em>converter-id</em>, the value of the {@link #forClass}
+ * attribute is taken to be <em>converter-for-class</em> and the fully
+ * qualified class name of the class to which this annotation is
+ * attached is taken to be the <em>converter-class</em>.  The
+ * implementation must guarantee that for each class annotated with
+ * <code>FacesConverter</code>, found with the algorithm in section
+ * JSF.11.5, the proper variant of
+ * <code>Application.addConverter()</code> is called.  If
+ * <em>converter-id</em> is not the empty string, {@link
+ * javax.faces.application.Application#addConverter(java.lang.String,java.lang.String)}
+ * is called, passing the derived <em>converter-id</em> as the first
+ * argument and the derived <em>converter-class</em> as the second
+ * argument.  If <em>converter-id</em> is the empty string, {@link
+ * javax.faces.application.Application#addConverter(java.lang.Class,java.lang.String)}
+ * is called, passing the <em>converter-for-class</em> as the first
+ * argument and the derived <em>converter-class</em> as the second
+ * argument.  The implementation must guarantee that all such calls to
+ * <code>addConverter()</code> happen during application startup time
+ * and before any requests are serviced.</p>
+
+ * <div class="changed_added_2_2">
+
+ * <p>The preceding text contains an important
+ * subtlety which application users should understand.  It is not
+ * possible to use a single {@code @FacesConverter} annotation to
+ * register a single {@code Converter} implementation both in the {@code
+ * by-class} and the {@code by-converter-id} data structures.  One way
+ * to achieve this result is to put the actual converter logic in an
+ * abstract base class, without a {@code @FacesConverter} annotation,
+ * and derive two sub-classes, each with a {@code @FacesConverter}
+ * annotation.  One sub-class has a {@code value} attribute but no
+ * {@code forClass} attribute, and the other sub-class has the converse.</p>
+
+ * <p>Please see the ViewDeclarationLanguage documentation for {@code
+ * <h:selectManyListBox>} for another important subtlety regarding
+ * converters and collections.</p>
+
+ * </div>
+
+ *
+ */
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface FacesConverter {
+
+    /**
+     * <p class="changed_added_2_0">The value of this annotation
+     * attribute is taken to be the <em>converter-id</em> with which
+     * instances of this class of converter can be instantiated by
+     * calling {@link
+     * javax.faces.application.Application#createConverter(java.lang.String)}.</p>
+     */ 
+
+    String value() default "";
+
+    /**
+     * <p class="changed_added_2_0">The value of this annotation
+     * attribute is taken to be the <em>converter-for-class</em> with
+     * which instances of this class of converter can be instantiated by
+     * calling {@link
+     * javax.faces.application.Application#createConverter(java.lang.Class)}.</p>
+     */ 
+
+    Class forClass() default Object.class;
+
+
+}
diff --git a/javax/faces/convert/FloatConverter.java b/javax/faces/convert/FloatConverter.java
new file mode 100644
index 0000000..3b99a5b
--- /dev/null
+++ b/javax/faces/convert/FloatConverter.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Float</code>
+ * (and float primitive) values.</p>
+ */
+
+public class FloatConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Float";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Float</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String FLOAT_ID =
+         "javax.faces.converter.FloatConverter.FLOAT";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Float</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (Float.valueOf(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, FLOAT_ID, value, "2000000000",
+                 MessageFactory.getLabel(context, component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (Float.toString(((Number) value).floatValue()));
+        } catch (Exception e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        }
+    }
+}
diff --git a/javax/faces/convert/IntegerConverter.java b/javax/faces/convert/IntegerConverter.java
new file mode 100644
index 0000000..c65d209
--- /dev/null
+++ b/javax/faces/convert/IntegerConverter.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Integer</code>
+ * (and int primitive) values.</p>
+ */
+
+public class IntegerConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Integer";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Integer</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String INTEGER_ID =
+         "javax.faces.converter.IntegerConverter.INTEGER";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Integer</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (Integer.valueOf(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, INTEGER_ID, value, "9346",
+                 MessageFactory.getLabel(context, component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (Integer.toString(((Number) value).intValue()));
+        } catch (Exception e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        }
+    }
+}
diff --git a/javax/faces/convert/LongConverter.java b/javax/faces/convert/LongConverter.java
new file mode 100644
index 0000000..ebea00a
--- /dev/null
+++ b/javax/faces/convert/LongConverter.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Long</code>
+ * (and long primitive) values.</p>
+ */
+
+public class LongConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Long";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Long</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String LONG_ID =
+         "javax.faces.converter.LongConverter.LONG";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Long</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (Long.valueOf(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, LONG_ID, value, "98765432",
+                 MessageFactory.getLabel(context, component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (Long.toString(((Number) value).longValue()));
+        } catch (Exception e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        }
+    }
+}
diff --git a/javax/faces/convert/MessageFactory.java b/javax/faces/convert/MessageFactory.java
new file mode 100644
index 0000000..2529539
--- /dev/null
+++ b/javax/faces/convert/MessageFactory.java
@@ -0,0 +1,389 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * 
+ * <p>supported filters: <code>package</code> and
+ * <code>protection</code>.</p>
+ */
+
+ class MessageFactory {
+
+    private static final String MOJARRA_RESOURCE_BASENAME =
+        "com.sun.faces.resources.Messages";
+
+    private MessageFactory() {
+    }
+
+    /**
+     * @see #getMessage(String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(Locale, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(Locale locale,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(locale, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(FacesContext, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(FacesContext context,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(context, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+   
+    /**
+     * <p>This version of getMessage() is used for localizing implementation
+     * specific messages.</p>
+     *
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+      static FacesMessage getMessage(String messageId, 
+                                                 Object... params) {
+        Locale locale = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        // context.getViewRoot() may not have been initialized at this point.
+        if (context != null && context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        return getMessage(locale, messageId, params);
+    }
+
+     /**
+      * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+      *
+      * @param locale    - the target <code>Locale</code>
+      * @param messageId - the key of the message in the resource bundle
+      * @param params    - substittion parameters
+      *
+      * @return a localized <code>FacesMessage</code> with the severity
+      *  of FacesMessage.SEVERITY_ERROR
+      */
+      static FacesMessage getMessage(Locale locale, 
+                                                 String messageId, 
+                                                 Object... params) {       
+        String summary = null;
+        String detail = null;       
+        ResourceBundle bundle;
+        String bundleName;
+
+        // see if we have a user-provided bundle
+        Application app = getApplication();
+	Class appClass = app.getClass();
+        if (null != (bundleName = app.getMessageBundle())) {
+            if (null != 
+                (bundle = 
+                    ResourceBundle.getBundle(bundleName, locale,
+				     getCurrentLoader(appClass)))) {
+                // see if we have a hit
+                try {
+                    summary = bundle.getString(messageId);
+                    detail = bundle.getString(messageId + "_detail");
+                }
+                catch (MissingResourceException e) {
+                    // ignore
+                }
+            }
+        }
+    
+        // we couldn't find a summary in the user-provided bundle
+        if (null == summary) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(FacesMessage.FACES_MESSAGES, 
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+                detail = bundle.getString(messageId + "_detail");
+            } catch (MissingResourceException e) {
+                // ignore
+            }
+        }
+
+        // no hit found in the standard javax.faces.Messages bundle.
+        // check the Mojarra resources
+        if (summary == null) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(MOJARRA_RESOURCE_BASENAME,
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+            } catch (MissingResourceException e) {
+                return null;
+            }
+        }
+
+        // At this point, we have a summary and a bundle.     
+        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
+        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
+        return (ret);
+    }
+
+
+    /**
+     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+     static FacesMessage getMessage(FacesContext context, 
+                                                String messageId,
+                                                Object... params) {
+                                                
+        if (context == null || messageId == null ) {
+            throw new NullPointerException(" context " 
+                + context 
+                + " messageId " 
+                + messageId);
+        }
+        Locale locale;
+        // viewRoot may not have been initialized at this point.
+        if (context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        if (null == locale) {
+            throw new NullPointerException(" locale is null ");
+        }
+        
+        FacesMessage message = getMessage(locale, messageId, params);
+        if (message != null) {
+            return message;
+        }
+        locale = Locale.getDefault();
+        return (getMessage(locale, messageId, params));
+    }  
+                       
+
+    /**
+     * <p>Returns the <code>label</code> property from the specified
+     * component.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param component - the component of interest
+     *
+     * @return the label, if any, of the component
+     */
+     static Object getLabel(FacesContext context, 
+                                        UIComponent component) {
+                                        
+        Object o = component.getAttributes().get("label");
+        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
+            o = component.getValueExpression("label");
+        }
+        // Use the "clientId" if there was no label specified.
+        if (o == null) {
+            o = component.getClientId(context);
+        }
+        return o;
+    }
+
+    protected static Application getApplication() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return (FacesContext.getCurrentInstance().getApplication());
+        }
+        ApplicationFactory afactory = (ApplicationFactory)
+            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return (afactory.getApplication());
+    }
+
+    protected static ClassLoader getCurrentLoader(Class fallbackClass) {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClassLoader();
+        }
+        return loader;
+    }
+
+    /**
+     * This class overrides FacesMessage to provide the evaluation
+     * of binding expressions in addition to Strings.
+     * It is often the case, that a binding expression may reference
+     * a localized property value that would be used as a 
+     * substitution parameter in the message.  For example:
+     *  <code>#{bundle.userLabel}</code>
+     * "bundle" may not be available until the page is rendered.
+     * The "late" binding evaluation in <code>getSummary</code> and 
+     * <code>getDetail</code> allow the expression to be evaluated
+     * when that property is available.
+     */
+    static class BindingFacesMessage extends FacesMessage {
+        BindingFacesMessage(
+            Locale locale,
+            String messageFormat,
+            String detailMessageFormat,
+            // array of parameters, both Strings and ValueBindings
+            Object[] parameters) {
+
+            super(messageFormat, detailMessageFormat);
+            this.locale = locale;
+            this.parameters = parameters;
+            if (parameters != null) {
+                resolvedParameters = new Object[parameters.length];
+            }
+        }
+
+        public String getSummary() {
+            String pattern = super.getSummary();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        public String getDetail() {
+            String pattern = super.getDetail();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        private void resolveBindings() {
+            FacesContext context = null;
+            if (parameters != null) {
+                for (int i = 0; i < parameters.length; i++) {
+                    Object o = parameters[i];
+                    if (o instanceof ValueBinding) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueBinding) o).getValue(context);
+                    }
+                    if (o instanceof ValueExpression) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueExpression) o).getValue(context.getELContext());
+                    }
+                    // to avoid 'null' appearing in message
+                    if (o == null) {
+                        o = "";
+                    }
+                    resolvedParameters[i] = o;
+                }
+            }
+        }
+
+        private String getFormattedString(String msgtext, Object[] params) {
+            String localizedStr = null;
+                                                                                
+            if (params == null || msgtext == null ) {
+                return msgtext;
+            }
+            StringBuffer b = new StringBuffer(100);
+            MessageFormat mf = new MessageFormat(msgtext);
+            if (locale != null) {
+                mf.setLocale(locale);
+                b.append(mf.format(params));
+                localizedStr = b.toString();
+            }
+            return localizedStr;
+        }
+
+        private Locale locale;
+        private Object[] parameters;
+        private Object[] resolvedParameters;
+    }
+    
+} // end of class MessageFactory
diff --git a/javax/faces/convert/NumberConverter.java b/javax/faces/convert/NumberConverter.java
new file mode 100644
index 0000000..e1b8b00
--- /dev/null
+++ b/javax/faces/convert/NumberConverter.java
@@ -0,0 +1,987 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.PartialStateHolder;
+import javax.faces.context.FacesContext;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Locale;
+
+
+/**
+ * <p><span class="changed_modified_2_0_rev_a">{@link Converter}</span>
+ * implementation for <code>java.lang.Number</code> values.</p>
+ *
+ * <p>The <code>getAsObject()</code> method parses a String into an
+ * <code>java.lang.Double</code> or <code>java.lang.Long</code>, according
+ * to the following algorithm:</p>
+ * <ul>
+ * <li>If the specified String is null, return
+ * a <code>null</code>.  Otherwise, trim leading and trailing
+ * whitespace before proceeding.</li>
+ * <li>If the specified String - after trimming - has a zero length,
+ * return <code>null</code>.</li>
+ * <li>If the <code>locale</code> property is not null,
+ * use that <code>Locale</code> for managing parsing.  Otherwise, use the
+ * <code>Locale</code> from the <code>UIViewRoot</code>.</li>
+ * <li>If a <code>pattern</code> has been specified, its syntax must conform
+ * the rules specified by <code>java.text.DecimalFormat</code>.  Such
+ * a pattern will be used to parse, and the <code>type</code> property
+ * will be ignored.</li>
+ * <li>If a <code>pattern</code> has not been specified, parsing will be based
+ * on the <code>type</code> property, which expects a currency, a number,
+ * or a percent.  The parse pattern for currencies, numbers, and
+ * percentages is determined by calling the
+ * <code>getCurrencyInstance()</code>, <code>getNumberInstance()</code>,
+ * or <code>getPercentInstance()</code> method of the
+ * <code>java.text.NumberFormat</code> class, passing in the selected
+ * <code>Locale</code>.</li>
+ * <li>If the <code>integerOnly</code> property has been set to true, only
+ * the integer portion of the String will be parsed.  See the JavaDocs
+ * for the <code>setParseIntegerOnly()</code> method of the
+ * <code>java.text.NumberFormat</code> class for more information.</li>
+ * </ul>
+ * <p/>
+ * <p>The <code>getAsString()</code> method expects a value of type
+ * <code>java.lang.Number</code> (or a subclass), and creates a formatted
+ * String according to the following algorithm:</p>
+ * <ul>
+ * <li>If the specified value is null, return a zero-length String.</li>
+ * <li>If the specified value is a String, return it unmodified.</li>
+ * <li>If the <code>locale</code> property is not null,
+ * use that <code>Locale</code> for managing formatting.  Otherwise, use the
+ * <code>Locale</code> from the <code>FacesContext</code>.</li>
+ * <li>If a <code>pattern</code> has been specified, its syntax must conform
+ * the rules specified by <code>java.text.DecimalFormat</code>.  Such
+ * a pattern will be used to format, and the <code>type</code> property
+ * (along with related formatting options described in the next paragraph)
+ * will be ignored.</li>
+ * <li>If a <code>pattern</code> has not been specified, formatting will be
+ * based on the <code>type</code> property, which formats the value as a
+ * currency, a number, or a percent.  The format pattern for currencies,
+ * numbers, and percentages is determined by calling the
+ * percentages is determined by calling the
+ * <code>getCurrencyInstance()</code>, <code>getNumberInstance()</code>,
+ * or <code>getPercentInstance()</code> method of the
+ * <code>java.text.NumberFormat</code> class, passing in the selected
+ * <code>Locale</code>.  In addition, the following properties will be
+ * applied to the format pattern, if specified:
+ * <ul>
+ * <li>If the <code>groupingUsed</code> property is <code>true</code>, the
+ * <code>setGroupingUsed(true)</code> method on the corresponding
+ * <code>NumberFormat</code> instance will be called.</li>
+ * <li>The minimum and maximum number of digits in the integer and
+ * fractional portions of the result will be configured based on
+ * any values set for the <code>maxFractionDigits</code>,
+ * <code>maxIntegerDigits</code>, <code>minFractionDigits</code>,
+ * and <code>minIntegerDigits</code> properties.</li>
+ * <li>If the type is set to <code>currency</code>, it is also possible
+ * to configure the currency symbol to be used, using either the
+ * <code>currencyCode</code> or <code>currencySymbol</code> properties.
+ * If both are set, the value for <code>currencyCode</code> takes
+ * precedence on a JDK 1.4 (or later) JVM; otherwise, the value
+ * for <code>currencySymbol</code> takes precedence.</li>
+ * </ul></li>
+ * </ul>
+ */
+
+public class NumberConverter implements Converter, PartialStateHolder {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Number";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Number</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String CURRENCY_ID =
+         "javax.faces.converter.NumberConverter.CURRENCY";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Number</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>                              HA
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String NUMBER_ID =
+         "javax.faces.converter.NumberConverter.NUMBER";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Number</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String PATTERN_ID =
+         "javax.faces.converter.NumberConverter.PATTERN";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Number</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String PERCENT_ID =
+         "javax.faces.converter.NumberConverter.PERCENT";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Number</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+
+     private static final String NBSP = "\u00a0";
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    private String currencyCode = null;
+    private String currencySymbol = null;
+    private Boolean groupingUsed = true;
+    private Boolean integerOnly = false;
+    private Integer maxFractionDigits;
+    private Integer maxIntegerDigits;
+    private Integer minFractionDigits;
+    private Integer minIntegerDigits;
+    private Locale locale = null;
+    private String pattern = null;
+    private String type = "number";
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return the ISO 4217 currency code used by <code>getAsString()</code>
+     * with a <code>type</code> of <code>currency</code>.  If not set,
+     * the value used will be based on the formatting <code>Locale</code>.</p>
+     */
+    public String getCurrencyCode() {
+
+        return (this.currencyCode);
+
+    }
+
+
+    /**
+     * <p>Set the ISO 4217 currency code used by <code>getAsString()</code>
+     * with a <code>type</code> of <code>currency</code>.</p>
+     *
+     * @param currencyCode The new currency code
+     */
+    public void setCurrencyCode(String currencyCode) {
+
+        clearInitialState();
+        this.currencyCode = currencyCode;
+
+    }
+
+
+    /**
+     * <p>Return the currency symbol used by <code>getAsString()</code>
+     * with a <code>type</code> of <code>currency</code>.  If not set,
+     * the value used will be based on the formatting <code>Locale</code>.</p>
+     */
+    public String getCurrencySymbol() {
+
+        return (this.currencySymbol);
+
+    }
+
+
+    /**
+     * <p>Set the currency symbol used by <code>getAsString()</code>
+     * with a <code>type</code> of <code>currency</code>.</p>
+     *
+     * @param currencySymbol The new currency symbol
+     */
+    public void setCurrencySymbol(String currencySymbol) {
+
+        clearInitialState();
+        this.currencySymbol = currencySymbol;
+
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if <code>getAsString</code> should include
+     * grouping separators if necessary.  If not modified, the default value
+     * is <code>true</code>.</p>
+     */
+    public boolean isGroupingUsed() {
+
+        return (this.groupingUsed != null ? this.groupingUsed : true);
+
+    }
+
+
+    /**
+     * <p>Set the flag indicating whether <code>getAsString()</code> should
+     * include grouping separators if necessary.</p>
+     *
+     * @param groupingUsed The new grouping used flag
+     */
+    public void setGroupingUsed(boolean groupingUsed) {
+
+        clearInitialState();
+        this.groupingUsed = groupingUsed;
+
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if only the integer portion of the given
+     * value should be returned from <code>getAsObject()</code>.  If not
+     * modified, the default value is <code>false</code>.</p>
+     */
+    public boolean isIntegerOnly() {
+
+        return (this.integerOnly != null ? this.integerOnly : false);
+
+    }
+
+
+    /**
+     * <p>Set to <code>true</code> if only the integer portion of the given
+     * value should be returned from <code>getAsObject()</code>.</p>
+     *
+     * @param integerOnly The new integer-only flag
+     */
+    public void setIntegerOnly(boolean integerOnly) {
+
+        clearInitialState();
+        this.integerOnly = integerOnly;
+
+    }
+
+
+    /**
+     * <p>Return the maximum number of digits <code>getAsString()</code> should
+     * render in the fraction portion of the result.</p>
+     */
+    public int getMaxFractionDigits() {
+
+        return (this.maxFractionDigits != null ? this.maxFractionDigits : 0);
+
+    }
+
+
+    /**
+     * <p>Set the maximum number of digits <code>getAsString()</code> should
+     * render in the fraction portion of the result.  If not set, the number of
+     * digits depends on the value being converted.</p>
+     *
+     * @param maxFractionDigits The new limit
+     */
+    public void setMaxFractionDigits(int maxFractionDigits) {
+
+        clearInitialState();
+        this.maxFractionDigits = maxFractionDigits;
+
+    }
+
+
+    /**
+     * <p>Return the maximum number of digits <code>getAsString()</code> should
+     * render in the integer portion of the result.</p>
+     */
+    public int getMaxIntegerDigits() {
+
+        return (this.maxIntegerDigits != null ? this.maxIntegerDigits : 0);
+
+    }
+
+
+    /**
+     * <p>Set the maximum number of digits <code>getAsString()</code> should
+     * render in the integer portion of the result.  If not set, the number of
+     * digits depends on the value being converted.</p>
+     *
+     * @param maxIntegerDigits The new limit
+     */
+    public void setMaxIntegerDigits(int maxIntegerDigits) {
+
+        clearInitialState();
+        this.maxIntegerDigits = maxIntegerDigits;
+
+    }
+
+
+    /**
+     * <p>Return the minimum number of digits <code>getAsString()</code> should
+     * render in the fraction portion of the result.</p>
+     */
+    public int getMinFractionDigits() {
+
+        return (this.minFractionDigits != null ? this.minFractionDigits : 0);
+
+    }
+
+
+    /**
+     * <p>Set the minimum number of digits <code>getAsString()</code> should
+     * render in the fraction portion of the result.  If not set, the number of
+     * digits depends on the value being converted.</p>
+     *
+     * @param minFractionDigits The new limit
+     */
+    public void setMinFractionDigits(int minFractionDigits) {
+
+        clearInitialState();
+        this.minFractionDigits = minFractionDigits;
+
+    }
+
+
+    /**
+     * <p>Return the minimum number of digits <code>getAsString()</code> should
+     * render in the integer portion of the result.</p>
+     */
+    public int getMinIntegerDigits() {
+
+        return (this.minIntegerDigits != null ? this.minIntegerDigits : 0);
+
+    }
+
+
+    /**
+     * <p>Set the minimum number of digits <code>getAsString()</code> should
+     * render in the integer portion of the result.  If not set, the number of
+     * digits depends on the value being converted.</p>
+     *
+     * @param minIntegerDigits The new limit
+     */
+    public void setMinIntegerDigits(int minIntegerDigits) {
+
+        clearInitialState();
+        this.minIntegerDigits = minIntegerDigits;
+
+    }
+
+
+    /**
+     * <p>Return the <code>Locale</code> to be used when parsing numbers.
+     * If this value is <code>null</code>, the <code>Locale</code> stored
+     * in the {@link javax.faces.component.UIViewRoot} for the current request
+     * will be utilized.</p>
+     */
+    public Locale getLocale() {
+
+        if (this.locale == null) {
+            this.locale =
+                 getLocale(FacesContext.getCurrentInstance());
+        }
+        return (this.locale);
+
+    }
+
+
+    /**
+     * <p>Set the <code>Locale</code> to be used when parsing numbers.
+     * If set to <code>null</code>, the <code>Locale</code> stored in the
+     * {@link javax.faces.component.UIViewRoot} for the current request
+     * will be utilized.</p>
+     *
+     * @param locale The new <code>Locale</code> (or <code>null</code>)
+     */
+    public void setLocale(Locale locale) {
+
+        clearInitialState();
+        this.locale = locale;
+
+    }
+
+
+    /**
+     * <p>Return the format pattern to be used when formatting and
+     * parsing numbers.</p>
+     */
+    public String getPattern() {
+
+        return (this.pattern);
+
+    }
+
+
+    /**
+     * <p>Set the format pattern to be used when formatting and parsing
+     * numbers.  Valid values are those supported by
+     * <code>java.text.DecimalFormat</code>.
+     * An invalid value will cause a {@link ConverterException} when
+     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
+     *
+     * @param pattern The new format pattern
+     */
+    public void setPattern(String pattern) {
+
+        clearInitialState();
+        this.pattern = pattern;
+
+    }
+
+
+    /**
+     * <p>Return the number type to be used when formatting and parsing numbers.
+     * If not modified, the default type is <code>number</code>.</p>
+     */
+    public String getType() {
+
+        return (this.type);
+
+    }
+
+
+    /**
+     * <p>Set the number type to be used when formatting and parsing numbers.
+     * Valid values are <code>currency</code>, <code>number</code>, or
+     * <code>percent</code>.
+     * An invalid value will cause a {@link ConverterException} when
+     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
+     *
+     * @param type The new number style
+     */
+    public void setType(String type) {
+
+        clearInitialState();
+        this.type = type;
+
+    }
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        Object returnValue = null;
+        NumberFormat parser = null;
+
+        try {
+
+            // If the specified value is null or zero-length, return null
+            if (value == null) {
+                return (null);
+            }
+            value = value.trim();
+            if (value.length() < 1) {
+                return (null);
+            }
+
+            // Identify the Locale to use for parsing
+            Locale locale = getLocale(context);
+
+            // Create and configure the parser to be used
+            parser = getNumberFormat(locale);
+            if (((pattern != null) && pattern.length() != 0)
+                 || "currency".equals(type)) {
+                configureCurrency(parser);
+            }
+            parser.setParseIntegerOnly(isIntegerOnly());
+            boolean groupSepChanged = false;
+            // BEGIN HACK 4510618
+            // This lovely bit of code is for a workaround in some
+            // oddities in the JDK's parsing code.
+            // See:  http://bugs.sun.com/view_bug.do?bug_id=4510618
+            if (parser instanceof DecimalFormat) {
+                DecimalFormat dParser = (DecimalFormat) parser;
+
+                // Take a small hit in performance to avoid a loss in
+                // precision due to DecimalFormat.parse() returning Double
+                ValueExpression ve = component.getValueExpression("value");
+                if (ve != null) {
+                    Class<?> expectedType = ve.getType(context.getELContext());
+                    if (expectedType != null && expectedType.isAssignableFrom(BigDecimal.class)) {
+                        dParser.setParseBigDecimal(true);
+                    }
+                }
+                DecimalFormatSymbols symbols =
+                      dParser.getDecimalFormatSymbols();
+                if (symbols.getGroupingSeparator() == '\u00a0') {
+                    groupSepChanged = true;
+                    String tValue;
+                    if (value.contains(NBSP)) {
+                        tValue = value.replace('\u00a0', ' ');
+                    } else {
+                        tValue = value;
+                    }
+                    symbols.setGroupingSeparator(' ');
+                    dParser.setDecimalFormatSymbols(symbols);
+                    try {
+                        return dParser.parse(tValue);
+                    } catch (ParseException pe) {
+                        if (groupSepChanged) {
+                            symbols.setGroupingSeparator('\u00a0');
+                            dParser.setDecimalFormatSymbols(symbols);
+                        }
+                    }
+                }
+            }
+            // END HACK 4510618
+
+            // Perform the requested parsing
+            returnValue = parser.parse(value);
+        } catch (ParseException e) {
+            if (pattern != null) {
+                throw new ConverterException(MessageFactory.getMessage(
+                     context, PATTERN_ID, value, "#,##0.0#",
+                     MessageFactory.getLabel(context, component)), e);
+            } else if (type.equals("currency")) {
+                throw new ConverterException(MessageFactory.getMessage(
+                     context, CURRENCY_ID, value,
+                     parser.format(99.99),
+                     MessageFactory.getLabel(context, component)), e);
+            } else if (type.equals("number")) {
+                throw new ConverterException(MessageFactory.getMessage(
+                     context, NUMBER_ID, value,
+                     parser.format(99),
+                     MessageFactory.getLabel(context, component)), e);
+            } else if (type.equals("percent")) {
+                throw new ConverterException(MessageFactory.getMessage(
+                     context, PERCENT_ID, value,
+                     parser.format(.75),
+                     MessageFactory.getLabel(context, component)), e);
+            }
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+        return returnValue;
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        try {
+
+            // If the specified value is null, return a zero-length String
+            if (value == null) {
+                return "";
+            }
+
+            // If the incoming value is still a string, play nice
+            // and return the value unmodified
+            if (value instanceof String) {
+                return (String) value;
+            }
+
+            // Identify the Locale to use for formatting
+            Locale locale = getLocale(context);
+
+            // Create and configure the formatter to be used
+            NumberFormat formatter =
+                 getNumberFormat(locale);
+            if (((pattern != null) && pattern.length() != 0)
+                 || "currency".equals(type)) {
+                configureCurrency(formatter);
+            }
+            configureFormatter(formatter);
+
+            // Perform the requested formatting
+            return (formatter.format(value));
+
+        } catch (ConverterException e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        } catch (Exception e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        }
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private static Class currencyClass;
+
+    static {
+        try {
+            currencyClass = Class.forName("java.util.Currency");
+            // container's runtime is J2SE 1.4 or greater
+        } catch (Exception ignored) {
+        }
+    }
+
+    private static final Class[] GET_INSTANCE_PARAM_TYPES =
+         new Class[]{String.class};
+
+
+    /**
+     * <p/>
+     * Override the formatting locale's default currency symbol with the
+     * specified currency code (specified via the "currencyCode" attribute) or
+     * currency symbol (specified via the "currencySymbol" attribute).</p>
+     * <p/>
+     * <p>If both "currencyCode" and "currencySymbol" are present,
+     * "currencyCode" takes precedence over "currencySymbol" if the
+     * java.util.Currency class is defined in the container's runtime (that
+     * is, if the container's runtime is J2SE 1.4 or greater), and
+     * "currencySymbol" takes precendence over "currencyCode" otherwise.</p>
+     * <p/>
+     * <p>If only "currencyCode" is given, it is used as a currency symbol if
+     * java.util.Currency is not defined.</p>
+     * <pre>
+     * Example:
+     * <p/>
+     * JDK    "currencyCode" "currencySymbol" Currency symbol being displayed
+     * -----------------------------------------------------------------------
+     * all         ---            ---         Locale's default currency symbol
+     * <p/>
+     * <1.4        EUR            ---         EUR
+     * >=1.4       EUR            ---         Locale's currency symbol for Euro
+     * <p/>
+     * all         ---           \u20AC       \u20AC
+     * <p/>
+     * <1.4        EUR           \u20AC       \u20AC
+     * >=1.4       EUR           \u20AC       Locale's currency symbol for Euro
+     * </pre>
+     *
+     * @param formatter The <code>NumberFormatter</code> to be configured
+     */
+    private void configureCurrency(NumberFormat formatter) throws Exception {
+
+        // Implementation copied from JSTL's FormatNumberSupport.setCurrency()
+
+        String code = null;
+        String symbol = null;
+
+        if ((currencyCode == null) && (currencySymbol == null)) {
+            return;
+        }
+
+        if ((currencyCode != null) && (currencySymbol != null)) {
+            if (currencyClass != null)
+                code = currencyCode;
+            else
+                symbol = currencySymbol;
+        } else if (currencyCode == null) {
+            symbol = currencySymbol;
+        } else {
+            if (currencyClass != null)
+                code = currencyCode;
+            else
+                symbol = currencyCode;
+        }
+
+        if (code != null) {
+            Object[] methodArgs = new Object[1];
+
+            /*
+            * java.util.Currency.getInstance()
+            */
+            Method m = currencyClass.getMethod("getInstance",
+                 GET_INSTANCE_PARAM_TYPES);
+            methodArgs[0] = code;
+            Object currency = m.invoke(null, methodArgs);
+
+            /*
+            * java.text.NumberFormat.setCurrency()
+            */
+            Class[] paramTypes = new Class[1];
+            paramTypes[0] = currencyClass;
+            Class numberFormatClass = Class.forName("java.text.NumberFormat");
+            m = numberFormatClass.getMethod("setCurrency", paramTypes);
+            methodArgs[0] = currency;
+            m.invoke(formatter, methodArgs);
+        } else {
+            /*
+            * Let potential ClassCastException propagate up (will almost
+            * never happen)
+            */
+            DecimalFormat df = (DecimalFormat) formatter;
+            DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
+            dfs.setCurrencySymbol(symbol);
+            df.setDecimalFormatSymbols(dfs);
+        }
+
+    }
+
+
+    /**
+     * <p>Configure the specified <code>NumberFormat</code> based on the
+     * formatting properties that have been set.</p>
+     *
+     * @param formatter The <code>NumberFormat</code> instance to configure
+     */
+    private void configureFormatter(NumberFormat formatter) {
+
+        formatter.setGroupingUsed(groupingUsed);
+        if (isMaxIntegerDigitsSet()) {
+            formatter.setMaximumIntegerDigits(maxIntegerDigits);
+        }
+        if (isMinIntegerDigitsSet()) {
+            formatter.setMinimumIntegerDigits(minIntegerDigits);
+        }
+        if (isMaxFractionDigitsSet()) {
+            formatter.setMaximumFractionDigits(maxFractionDigits);
+        }
+        if (isMinFractionDigitsSet()) {
+            formatter.setMinimumFractionDigits(minFractionDigits);
+        }
+
+    }
+
+
+    private boolean isMaxIntegerDigitsSet() {
+
+        return (maxIntegerDigits != null);
+
+    }
+
+
+    private boolean isMinIntegerDigitsSet() {
+
+        return (minIntegerDigits != null);
+
+    }
+
+
+    private boolean isMaxFractionDigitsSet() {
+
+        return (maxFractionDigits != null);
+
+    }
+
+
+    private boolean isMinFractionDigitsSet() {
+
+        return (minFractionDigits != null);
+
+    }
+
+
+    /**
+     * <p>Return the <code>Locale</code> we will use for localizing our
+     * formatting and parsing processing.</p>
+     *
+     * @param context The {@link FacesContext} for the current request
+     */
+    private Locale getLocale(FacesContext context) {
+
+        // PENDING(craigmcc) - JSTL localization context?
+        Locale locale = this.locale;
+        if (locale == null) {
+            locale = context.getViewRoot().getLocale();
+        }
+        return (locale);
+
+    }
+
+
+    /**
+     * <p>Return a <code>NumberFormat</code> instance to use for formatting
+     * and parsing in this {@link Converter}.</p>
+     *
+     * @param locale The <code>Locale</code> used to select formatting
+     *               and parsing conventions
+     * @throws ConverterException if no instance can be created
+     */
+    private NumberFormat getNumberFormat(Locale locale) {
+
+        if (pattern == null && type == null) {
+            throw new IllegalArgumentException("Either pattern or type must" +
+                 " be specified.");
+        }
+
+        // PENDING(craigmcc) - Implement pooling if needed for performance?
+
+        // If pattern is specified, type is ignored
+        if (pattern != null) {
+            DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
+            return (new DecimalFormat(pattern, symbols));
+        }
+
+        // Create an instance based on the specified type
+        else if (type.equals("currency")) {
+            return (NumberFormat.getCurrencyInstance(locale));
+        } else if (type.equals("number")) {
+            return (NumberFormat.getNumberInstance(locale));
+        } else if (type.equals("percent")) {
+            return (NumberFormat.getPercentInstance(locale));
+        } else {
+            // PENDING(craigmcc) - i18n
+            throw new ConverterException
+                 (new IllegalArgumentException(type));
+        }
+
+
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            Object values[] = new Object[11];
+            values[0] = currencyCode;
+            values[1] = currencySymbol;
+            values[2] = groupingUsed;
+            values[3] = integerOnly;
+            values[4] = maxFractionDigits;
+            values[5] = maxIntegerDigits;
+            values[6] = minFractionDigits;
+            values[7] = minIntegerDigits;
+            values[8] = locale;
+            values[9] = pattern;
+            values[10] = type;
+            return (values);
+        }
+        return null;
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+            Object values[] = (Object[]) state;
+            currencyCode = (String) values[0];
+            currencySymbol = (String) values[1];
+            groupingUsed = (Boolean) values[2];
+            integerOnly = (Boolean) values[3];
+            maxFractionDigits = (Integer) values[4];
+            maxIntegerDigits = (Integer) values[5];
+            minFractionDigits = (Integer) values[6];
+            minIntegerDigits = (Integer) values[7];
+            locale = (Locale) values[8];
+            pattern = (String) values[9];
+            type = (String) values[10];
+        }
+
+    }
+
+
+    private boolean transientFlag = false;
+
+
+    public boolean isTransient() {
+        return (transientFlag);
+    }
+
+
+    public void setTransient(boolean transientFlag) {
+        this.transientFlag = transientFlag;
+    }
+
+
+    private boolean initialState;
+
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+}
diff --git a/javax/faces/convert/ShortConverter.java b/javax/faces/convert/ShortConverter.java
new file mode 100644
index 0000000..6c6fc42
--- /dev/null
+++ b/javax/faces/convert/ShortConverter.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.convert;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>{@link Converter} implementation for <code>java.lang.Short</code>
+ * (and short primitive) values.</p>
+ */
+
+public class ShortConverter implements Converter {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String CONVERTER_ID = "javax.faces.Short";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion to <code>Short</code> fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by an example value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String SHORT_ID =
+         "javax.faces.converter.ShortConverter.SHORT";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the conversion of the <code>Short</code> value to
+     * <code>String</code> fails.   The message format string for this message
+     * may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> relaced by the unconverted value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String STRING_ID =
+         "javax.faces.converter.STRING";
+
+    // ------------------------------------------------------- Converter Methods
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public Object getAsObject(FacesContext context, UIComponent component,
+                              String value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null or zero-length, return null
+        if (value == null) {
+            return (null);
+        }
+        value = value.trim();
+        if (value.length() < 1) {
+            return (null);
+        }
+
+        try {
+            return (Short.valueOf(value));
+        } catch (NumberFormatException nfe) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, SHORT_ID, value, "32456",
+                 MessageFactory.getLabel(context, component)), nfe);
+        } catch (Exception e) {
+            throw new ConverterException(e);
+        }
+    }
+
+    /**
+     * @throws ConverterException   {@inheritDoc}
+     * @throws NullPointerException {@inheritDoc}
+     */
+    public String getAsString(FacesContext context, UIComponent component,
+                              Object value) {
+
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+
+        // If the specified value is null, return a 
+        // zero-length String
+        if (value == null) {
+            return "";
+        }
+
+        // If the incoming value is still a string, play nice
+        // and return the value unmodified
+        if (value instanceof String) {
+            return (String) value;
+        }
+
+        try {
+            return (Short.toString(((Number) value).shortValue()));
+        } catch (Exception e) {
+            throw new ConverterException(MessageFactory.getMessage(
+                 context, STRING_ID, value,
+                 MessageFactory.getLabel(context, component)), e);
+        }
+    }
+}
diff --git a/javax/faces/convert/package.html b/javax/faces/convert/package.html
new file mode 100644
index 0000000..9075100
--- /dev/null
+++ b/javax/faces/convert/package.html
@@ -0,0 +1,55 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+    <title>Package Description for "javax.faces.convert"</title>
+</head>
+<body bgcolor="white">
+
+<p><span class="changed_modified_2_0
+changed_modified_2_0_rev_a changed_modified_2_2">Contains</span> classes and interfaces
+defining converters.  The main class in this package is {@link
+javax.faces.convert.Converter}.</p>
+
+</body>
+</html>
diff --git a/javax/faces/el/CompositeComponentExpressionHolder.java b/javax/faces/el/CompositeComponentExpressionHolder.java
new file mode 100644
index 0000000..be0f97d
--- /dev/null
+++ b/javax/faces/el/CompositeComponentExpressionHolder.java
@@ -0,0 +1,63 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+import javax.el.ValueExpression;
+
+/**
+ * This interface <em>must</em> be implemented by the <code>Map</code>
+ * returned by the composite component <code>ELResolver</code>,
+ * described in section JSF.5.6.2.2 of the specification, when
+ * evaluating <code>#{cc.attrs}</code> epressions.
+ *
+ * @since 2.0
+ */
+public interface CompositeComponentExpressionHolder {
+
+    /**
+     * @param name that attribute name which may be assocated with a
+     * <code>ValueExpression</code>
+     * @return the <code>ValueExpression</code> associated with </code>name</code>
+     *  otherwise return <code>null</code>
+     */
+    ValueExpression getExpression(String name);
+    
+}
diff --git a/javax/faces/el/EvaluationException.java b/javax/faces/el/EvaluationException.java
new file mode 100644
index 0000000..c8bd423
--- /dev/null
+++ b/javax/faces/el/EvaluationException.java
@@ -0,0 +1,109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+import javax.faces.FacesException;
+
+
+/**
+ * <p>An exception reporting an error that occurred during the evaluation
+ * of an expression in a {@link MethodBinding} or {@link ValueBinding}.</p>
+ *
+ * @deprecated This has been replaced by {@link javax.el.ELException}.
+ */
+
+public class EvaluationException extends FacesException {
+
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public EvaluationException() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public EvaluationException(String message) {
+
+        super(message);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.  The detail
+     * message will be set to <code>(cause == null ? null :
+     * cause.toString()</code>
+     *
+     * @param cause The root cause for this exception
+     */
+    public EvaluationException(Throwable cause) {
+
+        super(cause);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause The root cause for this exception
+     */
+    public EvaluationException(String message, Throwable cause) {
+
+        super(message, cause);
+
+    }
+
+
+
+}
diff --git a/javax/faces/el/MethodBinding.java b/javax/faces/el/MethodBinding.java
new file mode 100644
index 0000000..729f3cc
--- /dev/null
+++ b/javax/faces/el/MethodBinding.java
@@ -0,0 +1,111 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><strong>MethodBinding</strong> is an object that can be used
+ * to call an arbitrary public method, on an instance that is acquired by
+ * evaluatng the leading portion of a method binding expression via a
+ * {@link ValueBinding}.  An immutable {@link MethodBinding} for a particular
+ * method binding expression can be acquired by calling the
+ * <code>createMethodBinding()</code> method of the
+ * {@link javax.faces.application.Application} instance for this web
+ * application.</p>
+ *
+ *
+ * @deprecated This has been replaced by {@link javax.el.MethodExpression}.
+ */
+
+public abstract class MethodBinding {
+
+
+    /**
+     * <p>Return the return value (if any) resulting from a call to the
+     * method identified by this method binding expression, passing it
+     * the specified parameters, relative to the specified {@link FacesContext}.
+     * </p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param params Array of parameters to be passed to the called method,
+     *  or <code>null</code> for no parameters
+     *
+     * @throws EvaluationException if an exception is thrown
+     *  by the called method (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws MethodNotFoundException if no suitable method can be found
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract Object invoke(FacesContext context, Object params[])
+        throws EvaluationException, MethodNotFoundException;
+
+
+    /**
+     * <p>Return the Java class representing the return type from the
+     * method identified by this method binding expression.  </p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws MethodNotFoundException if no suitable method can be found
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract Class getType(FacesContext context)
+        throws MethodNotFoundException;
+
+    /**
+     * <p>Return the (possibly <code>null</code>) expression String,
+     * with leading and trailing delimiters, from which this
+     * <code>MethodBinding</code> was built.  The default implementation
+     * returns <code>null</code>.</p>
+     *
+     */
+    public String getExpressionString() {
+	return null;
+    }
+
+
+
+}
diff --git a/javax/faces/el/MethodNotFoundException.java b/javax/faces/el/MethodNotFoundException.java
new file mode 100644
index 0000000..66f5299
--- /dev/null
+++ b/javax/faces/el/MethodNotFoundException.java
@@ -0,0 +1,107 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+/**
+ * <p>An exception caused by a method name that cannot be resolved
+ * against a base object.</p>
+ *
+ * @deprecated This has been replaced by {@link
+ * javax.el.MethodNotFoundException}.
+ */
+
+public class MethodNotFoundException extends EvaluationException {
+
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public MethodNotFoundException() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public MethodNotFoundException(String message) {
+
+        super(message);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.  The detail
+     * message will be set to <code>(cause == null ? null :
+     * cause.toString()</code>
+     *
+     * @param cause The root cause for this exception
+     */
+    public MethodNotFoundException(Throwable cause) {
+
+        super(cause);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause The root cause for this exception
+     */
+    public MethodNotFoundException(String message, Throwable cause) {
+
+        super(message, cause);
+
+    }
+
+
+
+}
diff --git a/javax/faces/el/PropertyNotFoundException.java b/javax/faces/el/PropertyNotFoundException.java
new file mode 100644
index 0000000..bf140c9
--- /dev/null
+++ b/javax/faces/el/PropertyNotFoundException.java
@@ -0,0 +1,107 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+/**
+ * <p>An exception caused by a property name that cannot be resolved
+ * against a base object.</p>
+ *
+ * @deprecated This has been replaced by {@link
+ * javax.el.PropertyNotFoundException}.
+ */
+
+public class PropertyNotFoundException extends EvaluationException {
+
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public PropertyNotFoundException() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public PropertyNotFoundException(String message) {
+
+        super(message);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.  The detail
+     * message will be set to <code>(cause == null ? null :
+     * cause.toString()</code>
+     *
+     * @param cause The root cause for this exception
+     */
+    public PropertyNotFoundException(Throwable cause) {
+
+        super(cause);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause The root cause for this exception
+     */
+    public PropertyNotFoundException(String message, Throwable cause) {
+
+        super(message, cause);
+
+    }
+
+
+
+}
diff --git a/javax/faces/el/PropertyResolver.java b/javax/faces/el/PropertyResolver.java
new file mode 100644
index 0000000..37dd642
--- /dev/null
+++ b/javax/faces/el/PropertyResolver.java
@@ -0,0 +1,242 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+/**
+ * <p><strong>PropertyResolver</strong> represents a pluggable mechanism
+ * for accessing a "property" of an underlying Java object instance.
+ * Different {@link PropertyResolver} implementations can support
+ * property resolution on instances of different Java classes (such as
+ * introspection-based access to properties of a JavaBeans component, or
+ * <code>get()</code> and <code>put()</code> calls on a
+ * <code>java.util.Map</code> instance).</p>
+ * <p>All implementations must respect the rules for JavaBeans component,
+ * <code>java.util.Map</code>, <code>java.util.List</code> and array
+ * instances defined for each method but are allowed to add custom
+ * semantics for other types.</p>
+ *
+ * @deprecated This has been replaced by {@link javax.el.ELResolver}.  
+ */
+
+public abstract class PropertyResolver {
+
+
+    /**
+     * <p>Return the value of the specified property from the specified
+     * base object.</p>
+     * <p>For a bean base object, the property is coerced to a
+     * <code>String</code> and used as the property name.
+     * For all other base object types (e.g., a Map), the property is used
+     * without any coercing.</p>
+     *
+     * @param base The base object whose property value is to be returned
+     * @param property The property to be returned
+     * @return The property value, or <code>null</code> if <code>base</code>
+     *  or <code>property</code> is <code>null</code>, or if the property
+     *  doesn't exist and the base object is a <code>Map</code> instance
+     *
+     * @throws EvaluationException if an exception is thrown while getting
+     *  the property value (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the specified property
+     *  for a bean base object does not exist or is not readable
+     */
+    public abstract Object getValue(Object base, Object property)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Return the value at the specified index of the specified
+     * base object.</p>
+     *
+     * @param base The base object whose property value is to be returned
+     * @param index The index of the value to return
+     * @return The property value, or <code>null</code> if <code>base</code>
+     *  is <code>null</code>, or if the index is out of bounds for the base
+     *  object
+     *
+     * @throws EvaluationException if an exception is thrown while getting
+     *  the property value (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the index is out of
+     *  bounds or if <code>base</code> is <code>null</code>
+     */
+    public abstract Object getValue(Object base, int index)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Set the specified value of the specified property on
+     * the specified base object.</p>
+     * <p>For a bean base object, the property is coerced to a
+     * <code>String</code> and used as the property name.
+     * For all other base object types (e.g., a Map), the property is used
+     * without any coercing.</p>
+     *
+     * @param base The base object whose property value is to be set
+     * @param property The property to be set
+     * @param value The value of the property to be set
+     *
+     * @throws EvaluationException if an exception is thrown while setting
+     *  the property value (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the specified bean base
+     *  object property does not exist or is not writeable, or if
+     *  <code>base</code> or <code>name</code> is <code>null</code>
+     */
+    public abstract void setValue(Object base, Object property, Object value)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Set the value at the specified index of the specified
+     * base object.</p>
+     *
+     * @param base The base object whose property value is to be set
+     * @param index The index of the value to set
+     * @param value The value to be set
+     *
+     * @throws EvaluationException if an exception is thrown while setting
+     *  the property value (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the index is out of
+     *  bounds or if <code>base</code> is <code>null</code>
+     */
+    public abstract void setValue(Object base, int index, Object value)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Checks if the specified property is read-only.</p>
+     * <p>For a bean base object, the property is coerced to a
+     * <code>String</code> and used as the property name.
+     * For all other base object types (e.g., a Map), the property is used
+     * without any coercing.</p>
+     *
+     * @param base The base object whose property is to be analyzed
+     * @param property The property to be analyzed
+     * @return <code>true</code> if the specified property of the specified
+     *  base object is known to be immutable; otherwise <code>false</code>
+     *
+     * @throws EvaluationException if an exception is thrown while testing
+     *  the property (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the specified bean base
+     *  object property does not exist or if <code>base</code> or 
+     *  <code>property</code> is <code>null</code>
+     */
+    public abstract boolean isReadOnly(Object base, Object property)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Checks if the specified index is read-only.</p>
+     *
+     * @param base The base object whose property is to be analyzed
+     * @param index The index of the value whose type is to be returned
+     * @return <code>true</code> if the value at the specified index of
+     *  the specified base object is known to be immutable; otherwise,
+     *  <code>false</code>
+     *
+     * @throws EvaluationException if an exception is thrown while testing
+     *  the property (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the index is out of
+     *  bounds or if <code>base</code> is <code>null</code>
+     */
+    public abstract boolean isReadOnly(Object base, int index)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Return the <code>java.lang.Class</code> representing the type
+     * of the specified property.  An instance of any Object of that
+     * type my be set as the value of that property, as long as the
+     * property is not read-only.  The actual value of the property, if
+     * non-null, is guaranteed to be an instance of this type, or an
+     * instance of a subclass of this type.  This method is also useful
+     * for discovering the type of Objects that may be set as the value
+     * of the property.</p>
+     *
+     * <p>For a bean base object, the property is coerced to a
+     * <code>String</code> and used as the property name.  For all other
+     * base object types (e.g., a Map), the property is used without any
+     * coercing.</p>
+     *
+     * @param base The base object whose property is to be analyzed
+     * @param property The property to be analyzed
+     * @return the <code>java.lang.Class</code> representing the type of
+     *  the specified property of the specified base object, if it can be
+     *  determined; otherwise <code>null</code>
+     *
+     * @throws EvaluationException if an exception is thrown while testing
+     *  the property (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the specified bean base
+     *  object property does not exist or if <code>base</code> or
+     *  <code>property</code> is <code>null</code>
+     */
+    public abstract Class getType(Object base, Object property)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Return the <code>java.lang.Class</code> representing the type of
+     * the specified index.</p>
+     *
+     * @param base The base object whose property is to be analyzed
+     * @param index The index of the value whose type is to be returned
+     * @return The <code>java.lang.Class</code> representing the type of
+     *  value at the specified index of the specified base object, if it
+     *  can be determined; otherwise <code>null</code>
+     *
+     * @throws EvaluationException if an exception is thrown while testing
+     *  the property (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws PropertyNotFoundException if the index is out of
+     *  bounds or if <code>base</code> is <code>null</code>
+     */
+    public abstract Class getType(Object base, int index)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+}
diff --git a/javax/faces/el/ReferenceSyntaxException.java b/javax/faces/el/ReferenceSyntaxException.java
new file mode 100644
index 0000000..8f259f1
--- /dev/null
+++ b/javax/faces/el/ReferenceSyntaxException.java
@@ -0,0 +1,106 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+/**
+ * <p>An exception reporting a syntax error in a method binding expression
+ * or value binding expression.</p>
+ *
+ * @deprecated This has been replaced by {@link javax.el.ELException}.
+ */
+
+public class ReferenceSyntaxException extends EvaluationException {
+
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public ReferenceSyntaxException() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public ReferenceSyntaxException(String message) {
+
+        super(message);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.  The detail
+     * message will be set to <code>(cause == null ? null :
+     * cause.toString()</code>
+     *
+     * @param cause The root cause for this exception
+     */
+    public ReferenceSyntaxException(Throwable cause) {
+
+        super(cause);
+
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause The root cause for this exception
+     */
+    public ReferenceSyntaxException(String message, Throwable cause) {
+
+        super(message, cause);
+
+    }
+
+
+
+}
diff --git a/javax/faces/el/ValueBinding.java b/javax/faces/el/ValueBinding.java
new file mode 100644
index 0000000..dad3226
--- /dev/null
+++ b/javax/faces/el/ValueBinding.java
@@ -0,0 +1,151 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><strong>ValueBinding</strong> is an object that can be used
+ * to access the property represented by an action or value binding
+ * expression.  An immutable {@link ValueBinding} for a particular value binding
+ * can be acquired by calling the <code>createValueBinding()</code> method of
+ * the {@link javax.faces.application.Application} instance for this web
+ * application.</p>
+ *
+ * @deprecated This has been replaced by {@link javax.el.ValueExpression}.
+ */
+
+public abstract class ValueBinding {
+
+
+    /**
+     * <p>Return the value of the property represented by this
+     * {@link ValueBinding}, relative to the specified {@link FacesContext}.
+     * </p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws EvaluationException if an exception is thrown while getting
+     *  the value (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     * @throws PropertyNotFoundException if a specified property name
+     *  does not exist, or is not readable
+     */
+    public abstract Object getValue(FacesContext context)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Set the value of the property represented by this
+     * {@link ValueBinding}, relative to the specified {@link FacesContext}.
+     * </p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param value The new value to be set
+     *
+     * @throws EvaluationException if an exception is thrown while setting
+     *  the value (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     * @throws PropertyNotFoundException if a specified property name
+     *  does not exist, or is not writeable
+     */
+    public abstract void setValue(FacesContext context, Object value)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Return <code>true</code> if the specified property of the specified
+     * property is known to be immutable; otherwise, return
+     * <code>false</code>.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws EvaluationException if an exception is thrown while getting
+     *  the description of the property (the thrown exception must be
+     *  included as the <code>cause</code> property of this exception)
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     * @throws PropertyNotFoundException if a specified property name
+     *  does not exist
+     */
+    public abstract boolean isReadOnly(FacesContext context)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Return the type of the property represented by this
+     * {@link ValueBinding}, relative to the specified {@link FacesContext}.
+     * </p>
+     *
+     * @param context {@link FacesContext} for the current request
+     *
+     * @throws EvaluationException if an exception is thrown while getting
+     *  the description of the property (the thrown exception must be
+     *  included as the <code>cause</code> property of this exception)
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     * @throws PropertyNotFoundException if a specified property name
+     *  does not exist
+     */
+    public abstract Class getType(FacesContext context)
+        throws EvaluationException, PropertyNotFoundException;
+
+
+    /**
+     * <p>Return the (possibly <code>null</code>) expression String,
+     * including the delimiters, from which this
+     * <code>ValueBinding</code> was built.</p>
+     *
+     */
+    public String getExpressionString() {
+	return null;
+    }
+
+
+
+
+}
diff --git a/javax/faces/el/VariableResolver.java b/javax/faces/el/VariableResolver.java
new file mode 100644
index 0000000..2a15229
--- /dev/null
+++ b/javax/faces/el/VariableResolver.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.el;
+
+
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><strong>VariableResolver</strong> represents a pluggable mechanism
+ * for resolving a top-level variable reference at evaluation time.</p>
+ *
+ * @deprecated This has been replaced by {@link javax.el.ELResolver}
+ * when operating with a <code>null</code> <code>base</code> argument.
+ */
+
+public abstract class VariableResolver {
+
+
+    /**
+     * <p>Resolve the specified variable name, and return the corresponding
+     * object, if any; otherwise, return <code>null</code>.</p>
+     *
+     * @param context {@link FacesContext} against which to resolve
+     *  this variable name
+     * @param name Name of the variable to be resolved
+     *
+     * @throws EvaluationException if an exception is thrown while resolving
+     *  the variable name (the thrown exception must be included as the
+     *  <code>cause</code> property of this exception)
+     * @throws NullPointerException if <code>context</code>
+     *  or <code>name</code> is <code>null</code>
+     */
+    public abstract Object resolveVariable(FacesContext context, String name)
+        throws EvaluationException;
+
+
+}
diff --git a/javax/faces/el/package.html b/javax/faces/el/package.html
new file mode 100644
index 0000000..6e1a58c
--- /dev/null
+++ b/javax/faces/el/package.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.el"</title>
+</head>
+<body bgcolor="white">
+<p><b>DEPRECATED</b> Classes and interfaces for evaluating and
+processing reference expressions.  The main class in this package is
+{@link javax.faces.el.ValueBinding}, which is the runtime representation
+of a reference expression.  <code>ValueBinding</code> provides methods
+to get and set the value of the expression.</p>
+</body>
+</html>
diff --git a/javax/faces/event/AbortProcessingException.java b/javax/faces/event/AbortProcessingException.java
new file mode 100644
index 0000000..388d382
--- /dev/null
+++ b/javax/faces/event/AbortProcessingException.java
@@ -0,0 +1,94 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import javax.faces.FacesException;
+
+
+/**
+ * <p>An exception that may be thrown by event listeners to terminate the
+ * processing of the current event.</p>
+ */
+
+public class AbortProcessingException extends FacesException {
+
+    /**
+     * <p>Construct a new exception with no detail message or root cause.</p>
+     */
+    public AbortProcessingException() {
+        super();
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * no root cause.</p>
+     *
+     * @param message The detail message for this exception
+     */
+    public AbortProcessingException(String message) {
+        super(message);
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified root cause.</p>
+     *
+     * @param cause The root cause for this exception
+     */
+    public AbortProcessingException(Throwable cause) {
+        super(cause);
+    }
+
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause The root cause for this exception
+     */
+    public AbortProcessingException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+}
diff --git a/javax/faces/event/ActionEvent.java b/javax/faces/event/ActionEvent.java
new file mode 100644
index 0000000..4549db1
--- /dev/null
+++ b/javax/faces/event/ActionEvent.java
@@ -0,0 +1,93 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import javax.faces.component.UIComponent;
+
+
+/**
+ * <p>An {@link ActionEvent} represents the activation of a user interface
+ * component (such as a <code>UICommand</code>).</p>
+ */
+
+public class ActionEvent extends FacesEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new event object from the specified source component
+     * and action command.</p>
+     *
+     * @param component Source {@link UIComponent} for this event
+     *
+     * @throws IllegalArgumentException if <code>component</code> is
+     *  <code>null</code>
+     */
+    public ActionEvent(UIComponent component) {
+
+        super(component);
+
+    }
+
+
+    // ------------------------------------------------- Event Broadcast Methods
+
+
+    public  boolean isAppropriateListener(FacesListener listener) {
+
+        return (listener instanceof ActionListener);
+
+    }
+
+    /**
+     * @throws AbortProcessingException {@inheritDoc}
+     */ 
+    public void processListener(FacesListener listener) {
+
+        ((ActionListener) listener).processAction(this);
+
+    }
+
+
+}
diff --git a/javax/faces/event/ActionListener.java b/javax/faces/event/ActionListener.java
new file mode 100644
index 0000000..97ae75e
--- /dev/null
+++ b/javax/faces/event/ActionListener.java
@@ -0,0 +1,83 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import javax.faces.component.UIComponent;
+
+
+/**
+ * <p><span class="changed_modified_2_0 changed_modified_2_2">A</span> listener interface for 
+ * receiving {@link ActionEvent}s.  <span class="changed_added_2_0">An
+ * implementation
+ * of this interface must be thread-safe.</span>  A class that
+ * is interested in receiving such events implements this interface, and then
+ * registers itself with the source {@link UIComponent} of interest, by
+ * calling <code>addActionListener()</code>.</p>
+ */
+
+public interface ActionListener extends FacesListener  {
+    
+    /**
+     * <p class="changed_added_2_2">The presence of this component attribute
+     * on an {@link javax.faces.component.ActionSource} component will cause
+     * the default {@code ActionListener} to interpret the value of the 
+     * attribute as the <em>toFlowDocumentId</em> value to pass to
+     * {@link javax.faces.application.NavigationHandler#handleNavigation(javax.faces.context.FacesContext, java.lang.String, java.lang.String, java.lang.String)}.</p>
+     * 
+     */
+    public static final String TO_FLOW_DOCUMENT_ID_ATTR_NAME = "to-flow-document-id";
+
+    /**
+     * <p>Invoked when the action described by the specified
+     * {@link ActionEvent} occurs.</p>
+     *
+     * @param event The {@link ActionEvent} that has occurred
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     */
+    public void processAction(ActionEvent event)
+        throws AbortProcessingException;
+
+
+}
diff --git a/javax/faces/event/ActionListenerWrapper.java b/javax/faces/event/ActionListenerWrapper.java
new file mode 100644
index 0000000..0861357
--- /dev/null
+++ b/javax/faces/event/ActionListenerWrapper.java
@@ -0,0 +1,72 @@
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.event;
+
+import javax.faces.FacesWrapper;
+
+/**
+ * <p class="changed_added_2_2">Provides a simple implementation of
+ * {@link ActionListener} that can be subclassed by developers wishing to
+ * provide specialized behavior to an existing {@link ActionListener}
+ * instance.  The default implementation of all methods is to call
+ * through to the wrapped {@link ActionListener}.</p>
+ *
+ * <div class="changed_added_2_2">
+ *
+ * <p>Usage: extend
+ * this class and override {@link #getWrapped} to return the instance we
+ * are wrapping.</p>
+ *
+ * </div>
+ *
+ * @since 2.2
+ */
+public abstract class ActionListenerWrapper implements ActionListener, FacesWrapper<ActionListener> {
+
+    @Override    
+    public void processAction(ActionEvent event) throws AbortProcessingException {
+        getWrapped().processAction(event);
+    }
+
+    @Override
+    public abstract ActionListener getWrapped();
+    
+}
diff --git a/javax/faces/event/AjaxBehaviorEvent.java b/javax/faces/event/AjaxBehaviorEvent.java
new file mode 100644
index 0000000..19e1237
--- /dev/null
+++ b/javax/faces/event/AjaxBehaviorEvent.java
@@ -0,0 +1,117 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.Behavior;
+
+/**
+ * <p><strong class="changed_added_2_0">AjaxBehaviorEvent</strong>
+ * represents the component behavior  specific to 
+ * <code>Ajax</code>).</p>
+ *
+ * @since 2.0
+ */
+public class AjaxBehaviorEvent extends BehaviorEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Construct a new event object 
+     * from the specified source component and Ajax behavior.</p>
+     *
+     * @param component Source {@link UIComponent} for this event
+     * @param behavior {@link Behavior} for this event
+     *
+     * @throws IllegalArgumentException if <code>component</code> or
+     * <code>ajaxBehavior</code> is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public AjaxBehaviorEvent(UIComponent component, Behavior behavior) {
+
+        super(component, behavior);
+
+    }
+
+
+    // ------------------------------------------------- Event Broadcast Methods
+
+
+    /**
+     * <p class="changed_added_2_0">Return <code>true</code> if this 
+     * {@link FacesListener} is an instance of a the appropriate 
+     * listener class that this event supports.</p>
+     *
+     * @param listener {@link FacesListener} to evaluate
+     *
+     * @since 2.0
+     */
+    public  boolean isAppropriateListener(FacesListener listener) {
+
+        return (listener instanceof AjaxBehaviorListener);
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Broadcast this event instance 
+     * to the specified {@link FacesListener}, by whatever mechanism 
+     * is appropriate.  Typically, this will be accomplished by calling 
+     * an event processing method, and passing this instance as a 
+     * parameter.</p>
+     *
+     * @param listener {@link FacesListener} to invoke 
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     *
+     * @since 2.0
+     */ 
+    public void processListener(FacesListener listener) {
+
+        ((AjaxBehaviorListener) listener).processAjaxBehavior(this);
+
+    }
+
+}
diff --git a/javax/faces/event/AjaxBehaviorListener.java b/javax/faces/event/AjaxBehaviorListener.java
new file mode 100644
index 0000000..c95eb1a
--- /dev/null
+++ b/javax/faces/event/AjaxBehaviorListener.java
@@ -0,0 +1,67 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+/**
+ * <p class="changed_added_2_0">By implementing this class, an object
+ * indicates that it is a listener for one or more kinds of {@link
+ * BehaviorEvent}s.</p>
+ *
+ * @since 2.0
+ */
+public interface AjaxBehaviorListener extends BehaviorListener {
+
+
+    /**
+     * <p class="changed_added_2_0">
+     *
+     * @param event the <code>AjaxBehaviorEvent</code> instance that
+     * is being processed.
+     *
+     * @throws AbortProcessingException if lifecycle processing should
+     * cease for this request.
+     *
+     * @since 2.0
+     */
+    public void processAjaxBehavior(AjaxBehaviorEvent event) 
+        throws AbortProcessingException;
+}
diff --git a/javax/faces/event/BehaviorEvent.java b/javax/faces/event/BehaviorEvent.java
new file mode 100644
index 0000000..4d080e8
--- /dev/null
+++ b/javax/faces/event/BehaviorEvent.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.Behavior;
+
+/**
+ * <p><strong class="changed_added_2_0">BehaviorEvent</strong> is
+ * the event that can be generated from component 
+ * {@link javax.faces.component.behavior.Behavior}.
+ * </p>
+ *
+ * @since 2.0
+ */
+public abstract class BehaviorEvent extends FacesEvent {
+
+    private final Behavior behavior;
+
+    /**
+     * <p class="changed_added_2_0">Construct a new event object 
+     * from the specified source component and <code>behavior</code>.</p>
+     *
+     * @param component Source {@link UIComponent} for this event
+     * @param behavior {@link Behavior} that sent this event
+     *
+     * @throws IllegalArgumentException if <code>component</code> or 
+     * <code>behavior</code> is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public BehaviorEvent(UIComponent component, Behavior behavior) {
+        super(component);
+
+        if (null == behavior) {
+            throw new IllegalArgumentException("Behavior agrument cannot be null");
+        }
+        
+        this.behavior = behavior;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the source {@link Behavior} 
+     * that sent this event.
+     *
+     * @since 2.0
+     */
+    public Behavior getBehavior() {
+        return behavior;
+    }
+}
diff --git a/javax/faces/event/BehaviorListener.java b/javax/faces/event/BehaviorListener.java
new file mode 100644
index 0000000..0cbfe95
--- /dev/null
+++ b/javax/faces/event/BehaviorListener.java
@@ -0,0 +1,59 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+/**
+ * <p class="changed_added_2_0">A generic base interface for event 
+ * listeners for various types of {@link BehaviorEvent}s.  All listener 
+ * interfaces for specific {@link BehaviorEvent} event types must 
+ * extend this interface.</p>
+ *
+ * <p>Implementations of this interface must have a zero-args public
+ * constructor.  If the class that implements this interface has state
+ * that needs to be saved and restored between requests, the class must
+ * also implement {@link javax.faces.component.StateHolder}.</p>
+ *
+ * @since 2.0
+ */
+public interface BehaviorListener extends FacesListener {
+
+}
diff --git a/javax/faces/event/ComponentSystemEvent.java b/javax/faces/event/ComponentSystemEvent.java
new file mode 100644
index 0000000..c758eaa
--- /dev/null
+++ b/javax/faces/event/ComponentSystemEvent.java
@@ -0,0 +1,145 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * <p><strong class="changed_added_2_0 changed_modified_2_2">
+ * ComponentSystemEvent</strong> is
+ * the base class for {@link SystemEvent}s that are specific to a {@link
+ * UIComponent} instance.</p>
+ *
+ * @since 2.0
+ */
+public abstract class ComponentSystemEvent extends SystemEvent {
+
+    private static final long serialVersionUID = -4726746661822507506L;
+
+    
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Pass the argument
+     * <code>component</code> to the superclass constructor.</p>
+
+     * @param component the <code>UIComponent</code> reference to be
+     * passed to the superclass constructor.
+     *
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     * 
+     * @since 2.0
+     */
+    public ComponentSystemEvent(UIComponent component) {
+        super(component);
+    }
+
+    /**
+     * <p class="changed_added_2_2">Return <code>true</code> if the argument
+     * {@link FacesListener} is an instance of the appropriate listener class that this event
+     * supports.  The default implementation returns true if the listener
+     * is a {@link ComponentSystemEventListener} or if <code>super.isAppropriateListener()</code>
+     * returns true.</p>
+     *
+     * @param listener {@link FacesListener} to evaluate
+     * @since 2.2
+     */
+    @Override
+    public boolean isAppropriateListener(FacesListener listener) {
+        boolean result = (listener instanceof ComponentSystemEventListener);
+        if (!result) {
+            result = super.isAppropriateListener(listener);
+        }
+        return result;
+    }
+
+    /**
+     * <p class="changed_added_2_2">Broadcast this event instance to 
+     * the specified {@link FacesListener} by calling the superclass's
+     * <code>processListener()</code> implementation.</p>
+     *
+     * @param listener {@link FacesListener} to evaluate
+     * @since 2.2
+     */
+    @Override
+    public void processListener(FacesListener listener) {
+        UIComponent c = getComponent();
+        UIComponent cFromStack;
+        boolean didPush = false;
+        FacesContext context = FacesContext.getCurrentInstance();
+        cFromStack = UIComponent.getCurrentComponent(context);
+        if (null == cFromStack) {
+            didPush = true;
+            c.pushComponentToEL(context, null);
+        }
+        try {
+            if (listener instanceof SystemEventListener) {
+                super.processListener(listener);
+            } else if (listener instanceof ComponentSystemEventListener) {
+                ((ComponentSystemEventListener)listener).processEvent(this);
+            }
+        } finally {
+            if (didPush) {
+                c.popComponentFromEL(context);
+            }
+        }
+    }
+    
+    
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p class="changed_added_2_0">the source {@link UIComponent} that sent this event.</p>
+     * 
+     * @since 2.0
+     */
+    public UIComponent getComponent() {
+
+        return ((UIComponent) getSource());
+
+    }    
+
+}
diff --git a/javax/faces/event/ComponentSystemEventListener.java b/javax/faces/event/ComponentSystemEventListener.java
new file mode 100644
index 0000000..bffb0a6
--- /dev/null
+++ b/javax/faces/event/ComponentSystemEventListener.java
@@ -0,0 +1,70 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+/**
+ *  <p class="changed_added_2_0">Implementors of this class do not need
+ *  an <code>isListenerForSource()</code> method because they are only
+ *  installed on specific component instances, therefore the
+ *  <code>isListenerForSource()</code> method is implicit.  Also, the 
+ * {@link #processEvent} method on this interface takes a 
+ * {@link ComponentSystemEvent} because the event will always be associated with
+ * a {@link javax.faces.component.UIComponent} instance.</p>
+ *
+ * @since 2.0
+ */
+public interface ComponentSystemEventListener extends FacesListener {
+
+    /**
+     * <p>When called, the listener can assume that any guarantees given
+     * in the javadoc for the specific {@link SystemEvent}
+     * subclass are true.</p>
+     *
+     * @param event the <code>ComponentSystemEvent</code> instance that
+     * is being processed.
+     *
+     * @throws AbortProcessingException if lifecycle processing should
+     * cease for this request.
+     */
+    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException;
+    
+}
diff --git a/javax/faces/event/EventHierarchy.jpg b/javax/faces/event/EventHierarchy.jpg
new file mode 100644
index 0000000..71792e8
Binary files /dev/null and b/javax/faces/event/EventHierarchy.jpg differ
diff --git a/javax/faces/event/ExceptionQueuedEvent.java b/javax/faces/event/ExceptionQueuedEvent.java
new file mode 100644
index 0000000..798db2c
--- /dev/null
+++ b/javax/faces/event/ExceptionQueuedEvent.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+/**
+ * <p class="changed_added_2_0">The system event facility will create an
+ * instance of this class whenever {@link
+ * javax.faces.application.Application#publishEvent} is called with
+ * <code>ExceptionQueuedEvent.class</code> as <code>systemEventClass</code>
+ * argument.  In this case, an instance of {@link ExceptionQueuedEventContext}
+ * must be passed as the <code>source</code> argument.  The specification
+ * for <code>publishEvent()</code>, requires the instantiation of the
+ * <code>systemEventClass</code> argument, passing the
+ * <code>source</code> argument to the constructor.</p>
+ *
+ * @since 2.0
+ */
+public class ExceptionQueuedEvent extends SystemEvent {
+    
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>ExceptionQueuedEvent</code> that indicates the argument
+     * <code>ExceptionQueuedEventContext</code> occurred.</p>
+     *
+     * @param eventContext the <code>ExceptionQueuedEventContext</code> that
+     * contextualizes this <code>ExceptionQueuedEvent</code>.
+     *
+     * @since 2.0
+     */
+
+    public ExceptionQueuedEvent(ExceptionQueuedEventContext eventContext) {
+        super(eventContext);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the
+     * <code>ExceptionQueuedEventContext</code> for this event instance.</p>
+     *
+     * @since 2.0
+     */
+
+    public ExceptionQueuedEventContext getContext() {
+	return (ExceptionQueuedEventContext) getSource();
+    }
+
+}
diff --git a/javax/faces/event/ExceptionQueuedEventContext.java b/javax/faces/event/ExceptionQueuedEventContext.java
new file mode 100644
index 0000000..5a133ac
--- /dev/null
+++ b/javax/faces/event/ExceptionQueuedEventContext.java
@@ -0,0 +1,280 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Collections;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p class="changed_added_2_0">This helper class provides context to
+ * the {@link ExceptionQueuedEvent} regarding the state of the system at the
+ * point in time when the <code>ExceptionQueuedEvent</code> occurs and links
+ * the <code>ExceptionQueuedEvent</code> to the {@link
+ * javax.faces.context.ExceptionHandler} by virtue of implementing
+ * {@link SystemEventListener}.</p>
+ *
+ * @since 2.0
+ */
+
+public class ExceptionQueuedEventContext implements SystemEventListenerHolder {
+
+    /**
+     * <p class="changed_added_2_0">The presence of an entry under this
+     * key in the <code>Map</code> returned from {@link #getAttributes}
+     * indicates the event occurred during the “before
+     * phase” part of the current lifecycle phase.</p>
+     */
+    public static final String IN_BEFORE_PHASE_KEY =
+          ExceptionQueuedEventContext.class.getName() + ".IN_BEFORE_PHASE";
+    
+    /**
+     * <p class="changed_added_2_0">The presence of an entry under this
+     * key in the <code>Map</code> returned from {@link #getAttributes}
+     * indicates the event occurred during the “after
+     * phase” part of the current lifecycle phase.</p>
+     */
+    public static final String IN_AFTER_PHASE_KEY =
+          ExceptionQueuedEventContext.class.getName() + ".IN_AFTER_PHASE";
+
+    private FacesContext context;
+    private Throwable thrown;
+    private UIComponent component;
+    private PhaseId phaseId;
+    private Map<Object, Object> attributes;
+    private List<SystemEventListener> listener;
+
+    
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>ExceptionQueuedEventContext</code> that indicates the argument
+     * <code>Throwable</code> just occurred.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param thrown the <code>Throwable</code> that is the context for
+     * this <code>ExceptionQueuedEventContext</code> instance.
+     */
+    public ExceptionQueuedEventContext(FacesContext context, Throwable thrown) {
+
+        this(context, thrown, null, null);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>ExceptionQueuedEventContext</code> that indicates the argument
+     * <code>Throwable</code> just occurred, relevant to the argument
+     * <code>component</code>.
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param thrown the <code>Throwable</code> that is the context for
+     * this <code>ExceptionQueuedEventContext</code> instance.
+     * @param component the {@link UIComponent} instance to which this
+     * <code>ExceptionQueuedEventContext</code> pertains
+
+     */
+    public ExceptionQueuedEventContext(FacesContext context,
+                                 Throwable thrown,
+                                 UIComponent component) {
+
+        this (context, thrown, component, null);
+
+    }
+            
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>ExceptionQueuedEventContext</code> that indicates the argument
+     * <code>Throwable</code> just occurred, relevant to the argument
+     * <code>component</code>, during the lifecycle phase
+     * <code>phaseId</code>.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+
+     * @param thrown the <code>Throwable</code> that is the context for
+     * this <code>ExceptionQueuedEventContext</code> instance.
+     *
+     * @param component the <code>UIComponent</code> that is relevant to
+     * the context.
+     *
+     * @param phaseId the <code>PhaseId</code> at the time this
+     * <code>ExeceptionEventContext</code> is created.
+     */
+    public ExceptionQueuedEventContext(FacesContext context,
+                                 Throwable thrown,
+                                 UIComponent component,
+                                 PhaseId phaseId) {
+
+        this.context = context;
+        this.thrown = thrown;
+        this.component = component;
+        this.phaseId = ((phaseId == null)
+                           ? context.getCurrentPhaseId()
+                           : phaseId);
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p class="changed_added_2_0"></p>
+     * @return the {@link FacesContext} used to create this
+     *  <code>ExceptionQueuedEventContext</code> instance.
+     */
+    public FacesContext getContext() {
+
+        return context;
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>exception</code>
+     * property.</p>
+     */
+    public Throwable getException() {
+
+        return thrown;
+
+    }
+
+    
+    /**
+     * <p class="changed_added_2_0">Return the <code>UIComponent</code>
+     * which was being processed when the exception was thrown. If none
+     * or not available, this will be <code>null</code>.</p>
+     */
+    public UIComponent getComponent() {
+
+        return this.component;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>PhaseId</code>
+     * which was being processed when the exception was thrown. If none
+     * or not available, this will be <code>null</code>.</p>
+     */
+    public PhaseId getPhaseId() {
+
+        return this.phaseId;
+
+    }
+
+
+    /**
+     * @return <code>true</code> if the exception occurred during the
+     *  <code>before phase</code> processing for a particular lifecycle
+     *  phase
+     */
+    public boolean inBeforePhase() {
+
+        return isAttributeDefined(IN_BEFORE_PHASE_KEY);
+
+    }
+
+
+    /**
+     * @return <code>true</code> if the exception occurred during the
+     *  <code>after phase</code> processing for a particular lifecycle
+     *  phase
+     */
+    public boolean inAfterPhase() {
+
+        return isAttributeDefined(IN_AFTER_PHASE_KEY);
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">A <code>Map</code> of attributes
+     * relevant to the context of this <code>ExceptionQueuedEvent</code>.</p>
+     */
+    public Map<Object, Object> getAttributes() {
+
+        if (null == attributes) {
+            attributes = new HashMap<Object,Object>();
+        }
+        return attributes;
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return a <code>List</code> that
+     * contains a single entry, the {@link
+     * javax.faces.context.ExceptionHandler} for the current
+     * request.</p>
+     */
+    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> facesEventClass) {
+
+        if (null == listener) {
+            List<SystemEventListener> list = new ArrayList<SystemEventListener>(1);
+            list.add(context.getExceptionHandler());
+            listener = Collections.unmodifiableList(list);
+        }
+        return listener;
+
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    private boolean isAttributeDefined(String key) {
+
+        return ((attributes != null) && attributes.containsKey(key));
+
+    }
+
+
+}
diff --git a/javax/faces/event/FacesEvent.java b/javax/faces/event/FacesEvent.java
new file mode 100644
index 0000000..dd3ee4e
--- /dev/null
+++ b/javax/faces/event/FacesEvent.java
@@ -0,0 +1,160 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import java.util.EventObject;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+
+
+/**
+ * <p><strong>FacesEvent</strong> is the base class for user interface and
+ * application events that can be fired by {@link UIComponent}s.  Concrete
+ * event classes must subclass {@link FacesEvent} in order to be supported
+ * by the request processing lifecycle.</p>
+ */
+
+public abstract class FacesEvent extends EventObject {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new event object from the specified source component.</p>
+     *
+     * @param component Source {@link UIComponent} for this event
+     *
+     * @throws IllegalArgumentException if <code>component</code> is
+     *  <code>null</code>
+     */
+    public FacesEvent(UIComponent component) {
+
+        super(component);
+
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return the source {@link UIComponent} that sent this event.
+     */
+    public UIComponent getComponent() {
+
+        return ((UIComponent) getSource());
+
+    }
+
+    private PhaseId phaseId = PhaseId.ANY_PHASE;
+
+    /**
+     * <p>Return the identifier of the request processing phase during
+     * which this event should be delivered.  Legal values are the
+     * singleton instances defined by the {@link PhaseId} class,
+     * including <code>PhaseId.ANY_PHASE</code>, which is the default
+     * value.</p>
+     */
+    public PhaseId getPhaseId() {
+	return phaseId;
+    }
+   
+    /**
+     * <p>Set the {@link PhaseId} during which this event will be
+     * delivered.</p>
+     *
+     * @throws IllegalArgumentException phaseId is null.
+     *
+     */ 
+
+    public void setPhaseId(PhaseId phaseId) {
+	if (null == phaseId) {
+	    throw new IllegalArgumentException();
+	}
+	this.phaseId = phaseId;
+    }
+
+
+    // ------------------------------------------------- Event Broadcast Methods
+
+
+    /**
+     * <p>Convenience method to queue this event for broadcast at the end
+     * of the current request processing lifecycle phase.</p>
+     *
+     * @throws IllegalStateException if the source component for this
+     *  event is not a descendant of a {@link UIViewRoot}
+     */
+    public void queue() {
+
+        getComponent().queueEvent(this);
+
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if this {@link FacesListener} is an instance
+     * of a listener class that this event supports.  Typically, this will be
+     * accomplished by an "instanceof" check on the listener class.</p>
+     *
+     * @param listener {@link FacesListener} to evaluate
+     */
+    public abstract boolean isAppropriateListener(FacesListener listener);
+
+
+    /**
+     * <p>Broadcast this {@link FacesEvent} to the specified
+     * {@link FacesListener}, by whatever mechanism is appropriate.  Typically,
+     * this will be accomplished by calling an event processing method, and
+     * passing this {@link FacesEvent} as a paramter.</p>
+     *
+     * @param listener {@link FacesListener} to send this {@link FacesEvent} to
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     */
+    public abstract void processListener(FacesListener listener);
+
+
+}
diff --git a/javax/faces/event/FacesListener.java b/javax/faces/event/FacesListener.java
new file mode 100644
index 0000000..e7c209a
--- /dev/null
+++ b/javax/faces/event/FacesListener.java
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import java.util.EventListener;
+
+
+/**
+ * <p>A generic base interface for event listeners for various types of
+ * {@link FacesEvent}s.  All listener interfaces for specific
+ * {@link FacesEvent} event types must extend this interface.</p>
+ *
+ * <p>Implementations of this interface must have a zero-args public
+ * constructor.  If the class that implements this interface has state
+ * that needs to be saved and restored between requests, the class must
+ * also implement {@link javax.faces.component.StateHolder}.</p>
+ */
+
+public interface FacesListener extends EventListener {
+
+}
diff --git a/javax/faces/event/ListenerFor.java b/javax/faces/event/ListenerFor.java
new file mode 100644
index 0000000..6f0bb17
--- /dev/null
+++ b/javax/faces/event/ListenerFor.java
@@ -0,0 +1,182 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">Classes tagged with this annotation are
+ * installed as listeners using the method {@link
+ * javax.faces.application.Application#subscribeToEvent} or {@link
+ * javax.faces.component.UIComponent#subscribeToEvent} (depending on the
+ * circumstances, described below).</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p>The default implementation must support attaching this annotation
+ * to {@link javax.faces.component.UIComponent} or {@link
+ * javax.faces.render.Renderer} classes.  In both cases, the annotation
+ * processing described herein must commence during the implementation
+ * of any variant of {@link
+ * javax.faces.application.Application}<code>.createComponent()</code>
+ * and must complete before the <code>UIComponent</code> instance is
+ * returned from <code>createComponent()</code>. The annotation
+ * processing must proceed according to an algorithm semantically
+ * equivalent to the following.</p>
+
+ * <ul>
+
+          <li><p> If this annotation is not present on the class in
+          question, no action must be taken.  </p></li>
+
+          <p>Determine the "target" on which to call
+          <code>subscribeToEvent</code>.</p>
+
+          <p>If the class to which this annotation is attached
+          implements {@link ComponentSystemEventListener} and is a
+          <code>UIComponent</code> instance, "target" is the
+          <code>UIComponent</code> instance.</p>
+
+          <p>If the class to which this annotation is attached
+          implements {@link ComponentSystemEventListener} and is a
+          <code>Renderer</code> instance, "target" is the
+          <code>UIComponent</code> instance that is to be rendered by
+          this <code>Renderer</code> instance.</p>
+
+          <p>If the class to which this annotation is attached
+          implements {@link ComponentSystemEventListener} and is neither
+          an instance of <code>Renderer</code> nor
+          <code>UIComponent</code>, the action taken is
+          unspecified. This case must not trigger any kind of error.</p>
+
+	  <p>If the class to which this annotation is attached
+	  implements <code>SystemEventListener</code> and does not
+	  implement <code>ComponentSystemEventListener</code>, "target"
+	  is the {@link javax.faces.application.Application}
+	  instance.</p>
+
+          </li>
+
+	  <li>
+
+          <p>Determine the variant of <code>subscribeToEvent()</code>to
+          call and the parameters to pass to it.</p>
+
+          <p>If "target" is a <code>UIComponent</code> call {@link
+          javax.faces.component.UIComponent#subscribeToEvent(Class,
+          ComponentSystemEventListener)}, passing the {@link
+          #systemEventClass} of the annotation as the first argument and
+          the instance of the class to which this annotation is attached
+          (which must implement
+          <code>ComponentSystemEventListener</code>) as the second
+          argument.</p>
+
+          <p>If "target" is the {@link
+          javax.faces.application.Application} instance, inspect the
+          value of the {@link #sourceClass} annotation attribute value.</p>
+
+          <p>If the value is <code>Void.class</code>, call {@link
+          javax.faces.application.Application#subscribeToEvent(Class,
+          SystemEventListener)}, passing the value of {@link
+          #systemEventClass} as the first argument and the instance of the
+          class to which this annotation is attached (which must
+          implement <code>SystemEventListener) as the second
+          argument.</code></p>
+
+          <p>Otherwise, call {@link
+          javax.faces.application.Application#subscribeToEvent(Class,
+          Class, SystemEventListener)}, passing the value of {@link
+          #systemEventClass} as the first argument, the value of {@link
+          #sourceClass} as the second argument, and the instance of the
+          class to which this annotation is attached (which must
+          implement <code>SystemEventListener) as the third
+          argument.</code></p>
+
+          </li>
+
+ * </ul>
+
+ * <p>Example: The standard renderer for
+ * <code>javax.faces.resource.Stylesheet</code> must have the following
+ * annotation declaration:</p>
+
+ * <pre><code>@ListenerFor(systemEventClass=PostAddToViewEvent.class)</code></pre>
+
+ * <p>This will cause the renderer to be added as a listener for the
+ * {@link PostAddToViewEvent} to all components that list it as their
+ * renderer.</p>
+
+ * </div>
+ *
+ * @since 2.0
+ */
+
+ at Retention(value=RetentionPolicy.RUNTIME)
+ at Target(value=ElementType.TYPE)
+ at Inherited
+public @interface ListenerFor {
+
+    /**
+     * <p class="changed_added_2_0">The kind of system event for which
+     * this class will be installed as a listener.  The implementation
+     * only supports exact matches on the <code>Class</code> and must
+     * not honor subclass relationships.  It is valid to have EL
+     * Expressions in the value of this attribute, as long as the
+     * expression resolves to an instance of the expected type.</p>
+     */
+
+    public Class<? extends SystemEvent> systemEventClass();
+
+
+    /**
+     * <p class="changed_added_2_0">The kind of object that emits events
+     * of the type given by the value of the {@link #systemEventClass}
+     * attribute.  It is valid to have EL Expressions in the value of
+     * this attribute, as long as the expression resolves to an instance
+     * of the expected type.</p>
+     */ 
+    public Class sourceClass() default Void.class;
+
+}
diff --git a/javax/faces/event/ListenersFor.java b/javax/faces/event/ListenersFor.java
new file mode 100644
index 0000000..ee41544
--- /dev/null
+++ b/javax/faces/event/ListenersFor.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+
+
+/**
+ * <p class="changed_added_2_0">Container annotation to specify multiple
+ * {@link ListenerFor} annotations on a single class.  Example:</p>
+
+ * <pre><code>
+
+    @ListenersFor({
+        @ListenerFor(systemEventClass=PostAddToViewEvent.class),
+        @ListenerFor(systemEventClass=BeforeRenderEvent.class,
+                     sourceClass=CustomOutput.class)
+    })
+
+ * </code></pre>
+
+ * <div class="changed_added_2_0">
+
+ * <p>The action described in {@link ListenerFor} must be taken for each
+ * <code>@ListenerFor</code> present in the container
+ * annotation. </p>
+
+ * </div>
+
+ * @since 2.0
+ */
+ at Retention(value= RetentionPolicy.RUNTIME)
+ at Target(value= ElementType.TYPE)
+ at Inherited
+public @interface ListenersFor {
+
+    ListenerFor[] value();
+    
+}
diff --git a/javax/faces/event/MethodExpressionActionListener.java b/javax/faces/event/MethodExpressionActionListener.java
new file mode 100644
index 0000000..ca13232
--- /dev/null
+++ b/javax/faces/event/MethodExpressionActionListener.java
@@ -0,0 +1,209 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.MethodExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+import java.util.logging.Logger;
+import javax.el.MethodNotFoundException;
+
+/**
+ * <p><strong><span class="changed_modified_2_0
+ * changed_modified_2_0_rev_a
+ * changed_modified_2_2">MethodExpressionActionListener</span></strong>
+ * is an {@link ActionListener} that wraps a {@link
+ * MethodExpression}. When it receives a {@link ActionEvent}, it
+ * executes a method on an object identified by the {@link
+ * MethodExpression}.</p>
+ */
+
+public class MethodExpressionActionListener implements ActionListener,
+    StateHolder {
+
+    private static final Logger LOGGER =
+          Logger.getLogger("javax.faces.event", "javax.faces.LogStrings");
+    
+
+    // ------------------------------------------------------ Instance Variables
+
+    private MethodExpression methodExpressionOneArg = null;
+    private MethodExpression methodExpressionZeroArg = null;
+    private boolean isTransient;
+    private final static Class[] ACTION_LISTENER_ZEROARG_SIG = new Class[] { };
+
+    public MethodExpressionActionListener() { }
+
+    /**
+     * <p><span class="changed_modified_2_0">Construct<span
+     * class="changed_modified_2_0"> a {@link ValueChangeListener} that
+     * contains a {@link MethodExpression}.  <span
+     * class="changed_added_2_0">To accomodate method expression targets
+     * that take no arguments instead of taking an {@link ActionEvent}
+     * argument</span>, the implementation of this class must take the
+     * argument <code>methodExpressionOneArg</code>, extract its
+     * expression string, and create another
+     * <code>MethodExpression</code> whose expected param types match
+     * those of a zero argument method.  The usage requirements for both
+     * of these <code>MethodExpression</code> instances are described in
+     * {@link #processAction}.</span></p>
+     *
+     * @param methodExpressionOneArg a <code>MethodExpression</code>
+     * that points to a method that returns <code>void</code> and takes
+     * a single argument of type {@link ActionEvent}.
+     */
+    public MethodExpressionActionListener(MethodExpression methodExpressionOneArg) {
+
+        super();
+        this.methodExpressionOneArg = methodExpressionOneArg;
+        FacesContext context = FacesContext.getCurrentInstance();
+        ELContext elContext = context.getELContext();
+        this.methodExpressionZeroArg = context.getApplication().
+                getExpressionFactory().createMethodExpression(elContext, 
+                  methodExpressionOneArg.getExpressionString(), Void.class, 
+                  ACTION_LISTENER_ZEROARG_SIG);
+
+    }
+
+    public MethodExpressionActionListener(MethodExpression methodExpressionOneArg,
+            MethodExpression methodExpressionZeroArg) {
+
+        super();
+        this.methodExpressionOneArg = methodExpressionOneArg;
+        this.methodExpressionZeroArg = methodExpressionZeroArg;
+
+    }
+
+    // ------------------------------------------------------- Event Method
+
+    /**
+     * <p><span class="changed_modified_2_0
+     * changed_modified_2_2">Call</span> through to the {@link
+     * MethodExpression} passed in our constructor.  <span
+     * class="changed_added_2_0">First, try to invoke the
+     * <code>MethodExpression</code> passed to the constructor of this
+     * instance, passing the argument {@link ActionEvent} as the
+     * argument.  If a {@link MethodNotFoundException} is thrown, call
+     * to the zero argument <code>MethodExpression</code> derived from
+     * the <code>MethodExpression</code> passed to the constructor of
+     * this instance.  <span class="changed_deleted_2_2"><del>If that
+     * fails for any reason, throw an {@link AbortProcessingException},
+     * including the cause of the failure.</del></span></span></p>
+     * 
+     * @throws NullPointerException {@inheritDoc}     
+     * @throws AbortProcessingException {@inheritDoc}     
+     */
+    public void processAction(ActionEvent actionEvent) throws AbortProcessingException {
+
+        if (actionEvent == null) {
+            throw new NullPointerException();
+        }
+        
+        FacesContext context = FacesContext.getCurrentInstance();
+        ELContext elContext = context.getELContext();
+
+        try {
+            try {
+                methodExpressionOneArg.invoke(elContext, new Object[] {actionEvent});
+            } catch (MethodNotFoundException mnfe) {
+                methodExpressionZeroArg.invoke(elContext, new Object[]{});
+            }
+        } catch (ELException ee) {
+            if (ee.getCause() instanceof AbortProcessingException) {
+                throw (AbortProcessingException) ee.getCause();
+            } else {
+                throw (ELException) ee;
+            }
+        }
+    }
+
+
+    // ------------------------------------------------ Methods from StateHolder
+
+
+    /**
+     * <p class="changed_modified_2_0">Both {@link MethodExpression}
+     * instances described in the constructor must be saved.</p>
+     */
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        return new Object[] { methodExpressionOneArg, methodExpressionZeroArg  };
+
+    }
+
+
+    /**
+     * <p class="changed_modified_2_0">Both {@link MethodExpression}
+     * instances described in the constructor must be restored.</p>
+     */
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+        methodExpressionOneArg = (MethodExpression) ((Object[]) state)[0];
+        methodExpressionZeroArg = (MethodExpression) ((Object[]) state)[1];
+
+    }
+
+
+    public boolean isTransient() {
+
+        return isTransient;
+
+    }
+
+
+    public void setTransient(boolean newTransientValue) {
+
+        isTransient = newTransientValue;
+
+    }
+
+}
diff --git a/javax/faces/event/MethodExpressionValueChangeListener.java b/javax/faces/event/MethodExpressionValueChangeListener.java
new file mode 100644
index 0000000..5aab918
--- /dev/null
+++ b/javax/faces/event/MethodExpressionValueChangeListener.java
@@ -0,0 +1,204 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.MethodNotFoundException;
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+
+/**
+ * <p><strong><span class="changed_modified_2_0
+ * changed_modified_2_0_rev_a
+ * changed_modified_2_2">MethodExpressionValueChangeListener</span></strong>
+ * is a {@link ValueChangeListener} that wraps a {@link
+ * MethodExpression}. When it receives a {@link ValueChangeEvent}, it
+ * executes a method on an object identified by the {@link
+ * MethodExpression}.</p>
+ */
+
+public class MethodExpressionValueChangeListener implements ValueChangeListener,
+    StateHolder {
+
+
+    // ------------------------------------------------------ Instance Variables
+    
+    private MethodExpression methodExpressionOneArg = null;
+    private MethodExpression methodExpressionZeroArg = null;
+    private boolean isTransient;
+    private final static Class[] VALUECHANGE_LISTENER_ZEROARG_SIG = new Class[] { };
+    
+
+    public MethodExpressionValueChangeListener() { }
+
+   /**
+     * <p><span class="changed_modified_2_0">Construct</span> a {@link
+     * ValueChangeListener} that contains a {@link
+     * MethodExpression}.<span
+     * class="changed_added_2_0">To accomodate method expression targets
+     * that take no arguments instead of taking a {@link
+     * ValueChangeEvent} argument</span>, the implementation of this
+     * class must take the argument <code>methodExpressionOneArg</code>,
+     * extract its expression string, and create another
+     * <code>MethodExpression</code> whose expected param types match
+     * those of a zero argument method.  The usage requirements for both
+     * of these <code>MethodExpression</code> instances are described in
+     * {@link #processValueChange}.</span></p>
+     *
+     * @param methodExpressionOneArg a <code>MethodExpression</code>
+     * that points to a method that returns <code>void</code> and takes
+     * a single argument of type {@link ValueChangeEvent}.
+     */
+    public MethodExpressionValueChangeListener(MethodExpression methodExpressionOneArg) {
+
+        super();
+        this.methodExpressionOneArg = methodExpressionOneArg;
+        FacesContext context = FacesContext.getCurrentInstance();
+        ELContext elContext = context.getELContext();
+        this.methodExpressionZeroArg = context.getApplication().
+                getExpressionFactory().createMethodExpression(elContext, 
+                  methodExpressionOneArg.getExpressionString(), Void.class, 
+                  VALUECHANGE_LISTENER_ZEROARG_SIG);
+    }
+
+   /**
+     * <p>Construct a {@link ValueChangeListener} that contains a {@link MethodExpression}.</p>
+     */
+    public MethodExpressionValueChangeListener(MethodExpression methodExpressionOneArg,
+            MethodExpression methodExpressionZeroArg) {
+
+        super();
+        this.methodExpressionOneArg = methodExpressionOneArg;
+        this.methodExpressionZeroArg = methodExpressionZeroArg;
+
+    }
+
+    // ------------------------------------------------------- Event Method
+
+    /**
+     * <p><span
+     * class="changed_modified_2_0 changed_modified_2_2">Call</span>
+     * through to the {@link MethodExpression} passed in our
+     * constructor.  <span class="changed_added_2_0">First, try to
+     * invoke the <code>MethodExpression</code> passed to the
+     * constructor of this instance, passing the argument {@link
+     * ValueChangeEvent} as the argument.  If a {@link
+     * MethodNotFoundException} is thrown, call to the zero argument
+     * <code>MethodExpression</code> derived from the
+     * <code>MethodExpression</code> passed to the constructor of this
+     * instance.  <span class="changed_deleted_2_2"><del>If that fails
+     * for any reason, throw an {@link AbortProcessingException},
+     * including the cause of the failure.</del></span></span></p>
+     * 
+     * @throws NullPointerException if the argument valueChangeEvent is null.
+     * @throws AbortProcessingException {@inheritDoc}     
+     */ 
+    public void processValueChange(ValueChangeEvent valueChangeEvent) throws AbortProcessingException {
+                         
+        if (valueChangeEvent == null) {
+            throw new NullPointerException();
+        }
+        FacesContext context = FacesContext.getCurrentInstance();
+        ELContext elContext = context.getELContext();
+        // PENDING: The corresponding code in MethodExpressionActionListener
+        // has an elaborate message capture, logging, and rethrowing block.
+        // Why not here?
+        try {
+            methodExpressionOneArg.invoke(elContext, new Object[] {valueChangeEvent});
+        } catch (MethodNotFoundException mnf) {
+            if (null != methodExpressionZeroArg) {
+
+                // try to invoke a no-arg version
+                methodExpressionZeroArg.invoke(elContext, new Object[]{});
+            }
+        } 
+    }
+
+
+    // ------------------------------------------------ Methods from StateHolder
+
+
+    /**
+     * <p class="changed_modified_2_0">Both {@link MethodExpression}
+     * instances described in the constructor must be saved.</p>
+     */
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        return new Object[] { methodExpressionOneArg, methodExpressionZeroArg };
+
+    }
+
+
+    /**
+     * <p class="changed_modified_2_0">Both {@link MethodExpression}
+     * instances described in the constructor must be restored.</p>
+     */
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+        methodExpressionOneArg = (MethodExpression) ((Object[]) state)[0];
+        methodExpressionZeroArg = (MethodExpression) ((Object[]) state)[1];
+
+    }
+
+
+    public boolean isTransient() {
+
+        return isTransient;
+
+    }
+
+
+    public void setTransient(boolean newTransientValue) {
+
+        isTransient = newTransientValue;
+
+    }
+}
diff --git a/javax/faces/event/NamedEvent.java b/javax/faces/event/NamedEvent.java
new file mode 100644
index 0000000..9d2c8b1
--- /dev/null
+++ b/javax/faces/event/NamedEvent.java
@@ -0,0 +1,101 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * class automatically registers the class with the runtime as a {@link
+ * ComponentSystemEvent} for use with the <code><f:event /></code>
+ * tag in a page.  The value of the {@link #shortName} attribute is taken to
+ * be the short name for the {@link javax.faces.event.ComponentSystemEvent}.
+ * If the <em>shortName</em> has already been registered, the current class 
+ * must be added to a
+ * List of of duplicate events for that name.  If the event name is then 
+ * referenced by an
+ * application, a <code>FacesException</code> must be thrown listing the 
+ * <em>shortName</em> and the offending classes.</p>
+ * @since 2.0
+ */
+
+ at Documented
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface NamedEvent {
+
+    /**
+     * <p class="changed_added_2_0">The value of this annotation
+     * attribute is taken to be the short name for the  {@link
+     * javax.faces.event.ComponentSystemEvent}.  If the value of this
+     * attribute is ommitted, the following algorithm must be used
+     * by the code that processes this annotation to determine its value.</p>
+     * 
+     * <div class="changed_added_2_0">
+
+	<ol>
+
+	  <li><p>Get the unqualified class name (e.g.,
+	  <code>UserLoginEvent</code>) </p></li>
+
+	  <li><p>Strip off the trailing "Event", if present (e.g.,
+	  <code>UserLogin</code>) </p></li>
+
+	  <li><p>Convert the first character to lower-case (e.g.,
+	  <code>userLogin</code>) </p></li>
+
+	  <li><p>Prepend the package name to the lower-cased name.
+	  </p></li>
+
+	</ol>
+
+     *
+     * </div>
+     */
+    String shortName() default "";
+}
diff --git a/javax/faces/event/PhaseEvent.java b/javax/faces/event/PhaseEvent.java
new file mode 100644
index 0000000..dc3882b
--- /dev/null
+++ b/javax/faces/event/PhaseEvent.java
@@ -0,0 +1,113 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import java.util.EventObject;
+import javax.faces.context.FacesContext;
+import javax.faces.lifecycle.Lifecycle;
+
+
+/**
+ * <p><strong>PhaseEvent</strong> represents the beginning or ending of
+ * processing for a particular phase of the request processing lifecycle,
+ * for the request encapsulated by the specified {@link FacesContext}.</p>
+ */
+
+public class PhaseEvent extends EventObject {
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Construct a new event object from the specified parameters.
+     * The specified {@link Lifecycle} will be the source of this event.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param phaseId Identifier of the current request processing
+     *  lifecycle phase
+     * @param lifecycle Lifecycle instance
+     *
+     * @throws NullPointerException if <code>context</code> or
+     *  <code>phaseId</code> or <code>Lifecycle</code>is <code>null</code>
+     */
+    public PhaseEvent(FacesContext context, PhaseId phaseId, 
+            Lifecycle lifecycle) {
+
+        super(lifecycle);
+        if ( phaseId == null || context == null || lifecycle == null) {
+            throw new NullPointerException();
+        }
+	this.phaseId = phaseId;
+        this.context = context;
+
+    }
+
+
+    // ------------------------------------------------------------- Properties
+
+    private FacesContext context = null;
+    
+    /**
+     * <p>Return the {@link FacesContext} for the request being processed.</p>
+     */
+    public FacesContext getFacesContext() {
+
+        return context;
+
+    }
+
+
+    private PhaseId phaseId = null;
+
+
+    /**
+     * <p>Return the {@link PhaseId} representing the current request
+     * processing lifecycle phase.</p>
+     */
+    public PhaseId getPhaseId() {
+
+	return (this.phaseId);
+
+    }
+
+
+}
diff --git a/javax/faces/event/PhaseId.java b/javax/faces/event/PhaseId.java
new file mode 100644
index 0000000..dd82be0
--- /dev/null
+++ b/javax/faces/event/PhaseId.java
@@ -0,0 +1,272 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import javax.faces.FacesException;
+
+
+/**
+ * <p><span class="changed_modified_2_2">Typesafe</span> enumeration of
+ * the legal values that may be returned by the
+ * <code>getPhaseId()</code> method of the {@link FacesEvent} interface.
+ */
+
+public class PhaseId implements Comparable {
+
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Private constructor to disable the creation of new instances.</p>
+     */
+    private PhaseId(String newPhaseName) {
+        phaseName = newPhaseName;
+    }
+
+
+    // ----------------------------------------------------- Instance Variables
+
+
+    /**
+     * <p>The ordinal value assigned to this instance.</p>
+     */
+    private final int ordinal = nextOrdinal++;
+
+    /**
+     * <p>The (optional) name for this phase.</p>
+     */
+
+    private String phaseName = null;
+
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Compare this {@link PhaseId} instance to the specified one.
+     * Returns a negative integer, zero, or a positive integer if this
+     * object is less than, equal to, or greater than the specified object.</p>
+     *
+     * @param other The other object to be compared to
+     */
+    public int compareTo(Object other) {
+
+        return this.ordinal - ((PhaseId) other).ordinal;
+
+    }
+
+
+    /**
+     * <p>Return the ordinal value of this {@link PhaseId} instance.</p>
+     */
+    public int getOrdinal() {
+
+        return (this.ordinal);
+
+    }
+
+
+    /**
+     * <p>Return a String representation of this {@link PhaseId} instance.</p>
+     */
+    public String toString() {
+        if (null == phaseName) {
+            return (String.valueOf(this.ordinal));
+        }
+
+        return (String.valueOf(this.phaseName) + ' ' + this.ordinal);
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Return the name of this phase.</p>
+     * 
+     * @since 2.2
+     */
+
+    public String getName() {
+        return this.phaseName;
+    }
+
+    /**
+     * <p class="changed_added_2_2">Return a <code>PhaseId</code>
+     * representation of the arcument <code>phase</code>.</p>
+     * 
+     * @param phase the String for which the corresponding
+     * <code>PhaseId</code> should be returned.
+     *
+     * @throws <code>NullPointerException</code> if argument <code>phase</code> is
+     * <code>null</code>.
+     *
+     * @throws <code>FacesException</code> if the <code>PhaseId</code>
+     * corresponding to the argument <code>phase</code> cannot be found.
+     *
+     * @since 2.2
+     */
+    
+    public static PhaseId phaseIdValueOf(String phase) {
+        if (null == phase) {
+            throw new NullPointerException();
+        }
+        PhaseId result = null;
+
+        if (ANY_PHASE_NAME.equals(phase)) {
+            result = PhaseId.ANY_PHASE;
+        } else if (APPLY_REQUEST_VALUES_NAME.equalsIgnoreCase(phase)) {
+            result = PhaseId.APPLY_REQUEST_VALUES;
+        } else if (INVOKE_APPLICATION_NAME.equalsIgnoreCase(phase)) {
+            result = PhaseId.INVOKE_APPLICATION;
+        } else if (PROCESS_VALIDATIONS_NAME.equalsIgnoreCase(phase)) {
+            result = PhaseId.PROCESS_VALIDATIONS;
+        } else if (RENDER_RESPONSE_NAME.equalsIgnoreCase(phase)) {
+            result = PhaseId.RENDER_RESPONSE;
+        } else if (RESTORE_VIEW_NAME.equalsIgnoreCase(phase)) {
+            result = PhaseId.RESTORE_VIEW;
+        } else if (UPDATE_MODEL_VALUES_NAME.equalsIgnoreCase(phase)) {
+            result = PhaseId.UPDATE_MODEL_VALUES;
+        } else {
+            throw new FacesException("Not a valid phase [" + phase + "]");
+        }
+        
+        return result;
+    }
+
+
+    // ------------------------------------------------------- Static Variables
+
+
+    /**
+     * <p>Static counter returning the ordinal value to be assigned to the
+     * next instance that is created.</p>
+     */
+    private static int nextOrdinal = 0;
+
+
+    // ------------------------------------------------------ Create Instances
+
+
+    // Any new Phase values must go at the end of the list, or we will break
+    // backwards compatibility on serialized instances
+
+
+    private static final String ANY_PHASE_NAME = "ANY";
+    /**
+     * <p>Identifier that indicates an interest in events, no matter
+     * which request processing phase is being performed.</p>
+     */
+    public static final PhaseId ANY_PHASE = new PhaseId(ANY_PHASE_NAME);
+
+
+    private static final String RESTORE_VIEW_NAME = "RESTORE_VIEW";
+    /**
+     * <p>Identifier that indicates an interest in events queued for
+     * the <em>Restore View</em> phase of the request
+     * processing lifecycle.</p>
+     */
+    public static final PhaseId RESTORE_VIEW = new PhaseId(RESTORE_VIEW_NAME);
+
+
+    private static final String APPLY_REQUEST_VALUES_NAME = "APPLY_REQUEST_VALUES";
+    /**
+     * <p>Identifier that indicates an interest in events queued for
+     * the <em>Apply Request Values</em> phase of the request
+     * processing lifecycle.</p>
+     */
+    public static final PhaseId APPLY_REQUEST_VALUES = new PhaseId(APPLY_REQUEST_VALUES_NAME);
+
+
+    private static final String PROCESS_VALIDATIONS_NAME = "PROCESS_VALIDATIONS";
+    /**
+     * <p>Identifier that indicates an interest in events queued for
+     * the <em>Process Validations</em> phase of the request
+     * processing lifecycle.</p>
+     */
+    public static final PhaseId PROCESS_VALIDATIONS = new PhaseId(PROCESS_VALIDATIONS_NAME);
+
+
+    private static final String UPDATE_MODEL_VALUES_NAME = "UPDATE_MODEL_VALUES";
+    /**
+     * <p>Identifier that indicates an interest in events queued for
+     * the <em>Update Model Values</em> phase of the request
+     * processing lifecycle.</p>
+     */
+    public static final PhaseId UPDATE_MODEL_VALUES = new PhaseId(UPDATE_MODEL_VALUES_NAME);
+
+
+    private static final String INVOKE_APPLICATION_NAME = "INVOKE_APPLICATION";
+    /**
+     * <p>Identifier that indicates an interest in events queued for
+     * the <em>Invoke Application</em> phase of the request
+     * processing lifecycle.</p>
+     */
+    public static final PhaseId INVOKE_APPLICATION = new PhaseId(INVOKE_APPLICATION_NAME);
+
+    private static final String RENDER_RESPONSE_NAME = "RENDER_RESPONSE";
+    /**
+     * <p>Identifier for the <em>Render Response</em> phase of the
+     * request processing lifecycle.</p>
+     */
+    public static final PhaseId RENDER_RESPONSE = new PhaseId(RENDER_RESPONSE_NAME);
+
+
+    /**
+     * <p>Array of all defined values, ascending order of ordinal value.
+     * Be sure you include any new instances created above, in the
+     * same order.</p>
+     */
+    private static final PhaseId[] values =
+            {ANY_PHASE, RESTORE_VIEW, APPLY_REQUEST_VALUES,
+                    PROCESS_VALIDATIONS, UPDATE_MODEL_VALUES, INVOKE_APPLICATION, RENDER_RESPONSE};
+
+
+    /**
+     * <p>List of valid {@link PhaseId} instances, in ascending order
+     * of their ordinal value.</p>
+     */
+    public static final List<PhaseId> VALUES =
+            Collections.unmodifiableList(Arrays.asList(values));
+
+
+}
diff --git a/javax/faces/event/PhaseListener.java b/javax/faces/event/PhaseListener.java
new file mode 100644
index 0000000..285020a
--- /dev/null
+++ b/javax/faces/event/PhaseListener.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import java.io.Serializable;
+import java.util.EventListener;
+
+
+/**
+ * <p>An interface implemented by objects that wish to be notified at
+ * the beginning and ending of processing for each standard phase of the
+ * request processing lifecycle.</p>
+ */
+
+public interface PhaseListener extends EventListener, Serializable {
+
+
+    /**
+     * <p>Handle a notification that the processing for a particular
+     * phase has just been completed.</p>
+     */
+    public void afterPhase(PhaseEvent event);
+
+
+    /**
+     * <p>Handle a notification that the processing for a particular
+     * phase of the request processing lifecycle is about to begin.</p>
+     */
+    public void beforePhase(PhaseEvent event);
+
+
+    /**
+     * <p>Return the identifier of the request processing phase during
+     * which this listener is interested in processing {@link PhaseEvent}
+     * events.  Legal values are the singleton instances defined by the
+     * {@link PhaseId} class, including <code>PhaseId.ANY_PHASE</code>
+     * to indicate an interest in being notified for all standard phases.</p>
+     */
+    public PhaseId getPhaseId();
+
+
+}
diff --git a/javax/faces/event/PostAddToViewEvent.java b/javax/faces/event/PostAddToViewEvent.java
new file mode 100644
index 0000000..83410a5
--- /dev/null
+++ b/javax/faces/event/PostAddToViewEvent.java
@@ -0,0 +1,148 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_2">When</span> an instance of this event is
+ * passed to {@link SystemEventListener#processEvent} or {@link
+ * ComponentSystemEventListener#processEvent}, the listener
+ * implementation may assume that the <code>source</code> of this event
+ * instance is a {@link UIComponent} instance and that either that
+ * instance or an ancestor of that instance was just added to the view.
+ * Therefore, the implementation may assume it is safe to call {@link
+ * UIComponent#getParent}, {@link UIComponent#getClientId}, and other
+ * methods that depend upon the component instance being added into the
+ * view.</p>
+ *
+ * <div class="changed_added_2_0 changed_deleted_2_2">
+ *
+ * <p>The implementation must guarantee that {@link
+ * javax.faces.application.Application#publishEvent} is called,
+ * immediately after any <code>UIComponent</code> instance is added to
+ * the view hierarchy <strong>except</strong> in the case where {@link
+ * javax.faces.render.ResponseStateManager#isPostback} returns
+ * <code>true</code> <strong>at the same time as</strong> {@link
+ * javax.faces.context.FacesContext#getCurrentPhaseId} returns {@link
+ * javax.faces.event.PhaseId#RESTORE_VIEW}.  When both of those
+ * conditions are met, {@link
+ * javax.faces.application.Application#publishEvent} must not be called.</p>
+ * 
+ * </div>
+
+ * <div class="changed_added_2_2">
+
+ * <p>The implementation must guarantee that {@link
+ * javax.faces.application.Application#publishEvent} is called in the
+ * following cases.</p>
+
+ * 	<ul>
+
+	  <li><p>Upon the initial construction of the view, when each
+	  instance is added to the view.</p></li>
+
+	  <li><p>On a non-initial rendering of the view, if a component
+	  is added to the view by the View Declaration Language
+	  implememtation as a result of changes in evaluation result of
+	  EL expressions referenced by VDL tags such as
+	  <code>c:if</code>, <code>ui:include</code>, and other tags
+	  that dynamically influence the assembly of the view.</p></li>
+
+	  <li><p>If a component is programmatically added to the view
+	  using the Java API directly.  For example, user code manually
+	  adds children using <code>comp.getChildren().add()</code>,
+	  where <code>comp</code> is a <code>UIComponent</code>.
+	  </p></li>
+
+	</ul>
+
+
+ * </div>
+ *
+ * @since 2.0
+ */
+public class PostAddToViewEvent extends ComponentSystemEvent {
+
+    
+    private static final long serialVersionUID = -1113592223476173895L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>PostAddToViewEvent</code> that indicates the argument
+     * <code>component</code> was just added to the view.</p>
+
+     * @param component the <code>UIComponent</code> that has just been
+     * added to the view.
+     *
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PostAddToViewEvent(UIComponent component) {
+
+        super(component);
+
+    }
+
+
+    // --------------------------------------- Methods from ComponentSystemEvent
+
+
+    /**
+     * <p class="changed_added_2_0">Returns <code>true</code> if and
+     * only if the argument <code>listener</code> is an instance of
+     * {@link SystemEventListener}.</p>
+     * @param listener
+     */
+    @Override
+    public boolean isAppropriateListener(FacesListener listener) {
+        
+        return (listener instanceof SystemEventListener);
+
+    }
+    
+
+}
diff --git a/javax/faces/event/PostConstructApplicationEvent.java b/javax/faces/event/PostConstructApplicationEvent.java
new file mode 100644
index 0000000..d66e03a
--- /dev/null
+++ b/javax/faces/event/PostConstructApplicationEvent.java
@@ -0,0 +1,84 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.application.Application;
+
+/**
+ * <p class="changed_added_2_0">This event must be published by the
+ * runtime after all configuration resources have been parsed and
+ * processed.</p>
+ *
+ * <p class="changed_added_2_0">This event is useful for listeners that
+ * need to perform custom post-configuration processing without having
+ * to rely on <code>ServletContextListener</code>s which may be invoked
+ * before the JavaServer Faces runtime has started it's configuration
+ * process.</p>
+ *
+ * @since 2.0
+ */
+public class PostConstructApplicationEvent extends SystemEvent {
+
+    private static final long serialVersionUID = -3918703770970591309L;
+
+    /**
+     * <p class="changed_added_2_0">Constructs a new
+     * <code>AppliationPostConstructEvent</code> for this
+     * application.</p>
+     * @param application the application that has been configured
+     * @since 2.0
+     */
+
+    public PostConstructApplicationEvent(Application application) {
+        super(application);
+    }
+
+    /**
+     * <p class="changed_added_2_0">The source {@link Application} that sent this event.</p>
+     * 
+     * @since 2.0
+     */
+
+    public Application getApplication() {
+        return (Application) getSource();
+    }
+    
+}
diff --git a/javax/faces/event/PostConstructCustomScopeEvent.java b/javax/faces/event/PostConstructCustomScopeEvent.java
new file mode 100644
index 0000000..8ac6203
--- /dev/null
+++ b/javax/faces/event/PostConstructCustomScopeEvent.java
@@ -0,0 +1,96 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+/**
+ * <p class="changed_added_2_0">This class is provided to allow custom
+ * scopes to publish a "post construct" event in the same way that other
+ * scopes do to let the application become aware of the beginning of the
+ * scope.  The runtime must listen for this event and invoke any
+ * <code>PostConstruct</code> annotated methods on any of the beans in
+ * this scope as appropriate.  The following code can be used as a
+ * template for publishing such an event.</p> <code><pre>
+
+Map<String, Object> myScope = getMyScope(); 
+ScopeContext scopeContext = new ScopeContext("myScope", myScope);
+applicationPublishEvent(PostConstructCustomScopeEvent.class, scopeContext);
+</pre></code>
+
+ * <p></p>
+ *
+ * @since 2.0
+ */
+public class PostConstructCustomScopeEvent extends SystemEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+    /**
+     * <p class="changed_added_2_0">An instance of this event indicates
+     * that the custom scope enclosed within the argument
+     * <code>scopeContext</code> was just created.</p>
+
+     * @param scopeContext A structure that contains the name of the
+     * scope and the scope itself exposed as a <code>Map<String,
+     * Object></code>.
+
+     */
+    public PostConstructCustomScopeEvent(ScopeContext scopeContext) {
+
+        super(scopeContext);
+        
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>ScopeContext</code>
+     * for this event.</p>
+     */
+    public ScopeContext getContext() {
+
+        return (ScopeContext) getSource();
+
+    }
+
+}
diff --git a/javax/faces/event/PostConstructViewMapEvent.java b/javax/faces/event/PostConstructViewMapEvent.java
new file mode 100644
index 0000000..310f6b6
--- /dev/null
+++ b/javax/faces/event/PostConstructViewMapEvent.java
@@ -0,0 +1,78 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIViewRoot;
+
+/**
+ *
+ * <p class="changed_added_2_0">This event must be published by a call
+ * to {javax.faces.application.Application#publishEvent} when the view
+ * map is first created.  This must happen on the first time a call is
+ * made to {@link UIViewRoot#getViewMap} on a <code>UIViewRoot</code>
+ * instance.  The source for this event is the
+ * <code>UIViewRoot<code>.</p>
+ *
+ * @since 2.0
+ */
+public class PostConstructViewMapEvent extends ComponentSystemEvent {
+
+    private static final long serialVersionUID = 8684338297976265379L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>PostConstructViewMapEvent</code> that indicates the argument
+     * <code>root</code> was just associated with its view map.</p>
+
+     * @param root the <code>UIViewRoot</code> for which a view map has
+     * just been created.
+     *
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PostConstructViewMapEvent(UIViewRoot root) {
+        super(root);
+    }
+
+}
diff --git a/javax/faces/event/PostKeepFlashValueEvent.java b/javax/faces/event/PostKeepFlashValueEvent.java
new file mode 100644
index 0000000..404033c
--- /dev/null
+++ b/javax/faces/event/PostKeepFlashValueEvent.java
@@ -0,0 +1,78 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.context.Flash;
+
+/**
+ *
+ * <p class="changed_added_2_2">This event must be published by a call
+ * to {@link javax.faces.application.Application#publishEvent} when a value
+ * is kept in the flash.</p>
+ *
+ * @since 2.2
+ */
+public class PostKeepFlashValueEvent extends SystemEvent {
+
+    private static final long serialVersionUID = -7137725846753823862L;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_2">Instantiate a new
+     * <code>PostKeepFlashValueEvent</code> that indicates the argument
+     * <code>key</code> was just kept in the flash. If the argument is 
+     * <code>null</code>, the literal {@link Flash#NULL_VALUE} must be passed
+     * to the superclass constructor.</p>
+
+     * @param key the key in the flash that was just kept.
+     *
+     */
+    public PostKeepFlashValueEvent(String key) {
+        super(null == key ? Flash.NULL_VALUE : key);
+    }
+    
+    public String getKey() {
+        return getSource().toString();
+    }
+
+}
diff --git a/javax/faces/event/PostPutFlashValueEvent.java b/javax/faces/event/PostPutFlashValueEvent.java
new file mode 100644
index 0000000..4d98315
--- /dev/null
+++ b/javax/faces/event/PostPutFlashValueEvent.java
@@ -0,0 +1,78 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.context.Flash;
+
+/**
+ *
+ * <p class="changed_added_2_2">This event must be published by a call
+ * to {@link javax.faces.application.Application#publishEvent} when a value
+ * is stored in the flash.</p>
+ *
+ * @since 2.2
+ */
+public class PostPutFlashValueEvent extends SystemEvent {
+
+    private static final long serialVersionUID = -6422204761759384353L;;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_2">Instantiate a new
+     * <code>PostPutFlashValueEvent</code> that indicates the argument
+     * <code>key</code> was just put to the flash. If the argument is 
+     * <code>null</code>, the literal {@link Flash#NULL_VALUE} must be passed
+     * to the superclass constructor.</p>
+
+     * @param key the key in the flash that was just added.
+     *
+     */
+    public PostPutFlashValueEvent(String key) {
+        super(null == key ? Flash.NULL_VALUE : key);
+    }
+    
+    public String getKey() {
+        return getSource().toString();
+    }
+
+}
diff --git a/javax/faces/event/PostRestoreStateEvent.java b/javax/faces/event/PostRestoreStateEvent.java
new file mode 100644
index 0000000..a7a10ee
--- /dev/null
+++ b/javax/faces/event/PostRestoreStateEvent.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ * <p class="changed_added_2_0">When an instance of this event is passed
+ * to {@link SystemEventListener#processEvent} or {@link
+ * ComponentSystemEventListener#processEvent}, the listener
+ * implementation may assume that the <code>source</code> of this event
+ * instance is in a tree that has just had its state restored.</p>
+ *
+ * @since 2.0
+ */
+public class PostRestoreStateEvent extends ComponentSystemEvent {
+    
+    static final long serialVersionUID = -1007196479122154347L;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>PostRestoreStateEvent</code> that indicates the argument
+     * <code>component</code> just had its state restored.</p>
+
+     * @param component the <code>UIComponent</code> whose state was just restored.
+
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PostRestoreStateEvent(UIComponent component) {
+        super(component);
+    }
+    
+    public void setComponent(UIComponent newComponent) {
+        this.source = newComponent;
+    }
+
+
+}
diff --git a/javax/faces/event/PostValidateEvent.java b/javax/faces/event/PostValidateEvent.java
new file mode 100644
index 0000000..0f083ae
--- /dev/null
+++ b/javax/faces/event/PostValidateEvent.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ * <p class="changed_added_2_0 changed_added_2_1">When an instance of
+ * this event is passed to {@link SystemEventListener#processEvent} or
+ * {@link ComponentSystemEventListener#processEvent}, the listener
+ * implementation may assume that the <code>source</code> of this event
+ * instance is the {@link UIComponent} instance that is that has just
+ * been validated.</p>
+
+ * <p class="changed_added_2_1">Components with children must publish this
+ * event after processing their child nodes in
+ * {@link UIComponent#processValidators}.  This is especially important for
+ * iterating components such as
+ * <code>UIData</code>, and form components, such as <code>UIForm</code>.
+ * </p>
+
+ * @since 2.0
+ */
+public class PostValidateEvent extends ComponentSystemEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+
+     * <p class="changed_added_2_0"></p>
+
+     * @param component the <code>UIComponent</code> that is about to be
+     * validated.
+
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PostValidateEvent(UIComponent component) {
+        super(component);
+    }
+
+}
diff --git a/javax/faces/event/PreClearFlashEvent.java b/javax/faces/event/PreClearFlashEvent.java
new file mode 100644
index 0000000..762e50e
--- /dev/null
+++ b/javax/faces/event/PreClearFlashEvent.java
@@ -0,0 +1,74 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.util.Map;
+
+/**
+ *
+ * <p class="changed_added_2_2">This event must be published by a call
+ * to {@link javax.faces.application.Application#publishEvent} before the flash
+ * is cleared.</p>
+ *
+ * @since 2.2
+ */
+public class PreClearFlashEvent extends SystemEvent {
+
+    private static final long serialVersionUID = -6069648757590884651L;
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_2">Instantiate a new
+     * <code>PreClearFlashEvent</code> that indicates the argument
+     * <code>key</code> was just put to the flash.</p>
+
+     * @param source Map containing the values about to be cleared  This need not
+     * be the actual {@link javax.faces.context.Flash} instance.
+     *
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PreClearFlashEvent(Map<String, Object> source) {
+        super(source);
+    }
+    
+}
diff --git a/javax/faces/event/PreDestroyApplicationEvent.java b/javax/faces/event/PreDestroyApplicationEvent.java
new file mode 100644
index 0000000..ca62591
--- /dev/null
+++ b/javax/faces/event/PreDestroyApplicationEvent.java
@@ -0,0 +1,83 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.application.Application;
+
+/**
+ * <p class="changed_added_2_0">This event must be published by the
+ * runtime <em>before</em> the factories associated with this {@link
+ * Application} are released.</p>
+ *
+ * <p class="changed_added_2_0">This event is useful for listeners that
+ * need to perform custom shutdown processing without having to rely on
+ * <code>ServletContextListener</code>s which will be invoked after all
+ * of the application artifacts have been removed.</p>
+ *
+ * @since 2.0
+ */
+public class PreDestroyApplicationEvent extends SystemEvent {
+
+    private static final long serialVersionUID = 8105212785161493162L;
+
+    /**
+     * <p class="changed_added_2_0">Constructs a new
+     * <code>PreDestroyApplicationEvent</code> for this application.</p>
+     *
+     * @param application the application that has been configured
+     *
+     * @since 2.0
+     */
+    public PreDestroyApplicationEvent(Application application) {
+        super(application); 
+    }
+    
+    /**
+     * <p class="changed_added_2_0">The source {@link Application} that sent this event.</p>
+     * 
+     * @since 2.0
+     */
+
+    public Application getApplication() {
+        return (Application) getSource();
+    }
+    
+}
diff --git a/javax/faces/event/PreDestroyCustomScopeEvent.java b/javax/faces/event/PreDestroyCustomScopeEvent.java
new file mode 100644
index 0000000..d26d614
--- /dev/null
+++ b/javax/faces/event/PreDestroyCustomScopeEvent.java
@@ -0,0 +1,89 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+/**
+ * <p class="changed_added_2_0">This class is provided to allow custom
+ * scopes to publish a "pre construct" event in the same way that other
+ * scopes do to let the application become aware of the beginning of the
+ * scope.  The runtime must listen for this event and invoke any
+ * <code>PreDestroy</code> annotated methods on any of the beans in this
+ * scope as appropriate.  See the example code on {@link
+ * PostConstructCustomScopeEvent} for a usage example, replacing classes
+ * as appropriate to make sense for this class.</p>
+
+ * @since 2.0
+ */
+public class PreDestroyCustomScopeEvent extends SystemEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+    /**
+     * <p class="changed_added_2_0">An instance of this event indicates
+     * that the custom scope enclosed within the argument
+     * <code>scopeContext</code> is about to end.</p>
+
+     * @param scopeContext A structure that contains the name of the
+     * scope and the scope itself exposed as a <code>Map<String,
+     * Object></code>.
+
+     */
+    public PreDestroyCustomScopeEvent(ScopeContext scopeContext) {
+
+        super(scopeContext);
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>ScopeContext</code>
+     * for this event.</p>
+     */
+    public ScopeContext getContext() {
+
+        return (ScopeContext) getSource();
+
+    }
+
+}
diff --git a/javax/faces/event/PreDestroyViewMapEvent.java b/javax/faces/event/PreDestroyViewMapEvent.java
new file mode 100644
index 0000000..db1d4ab
--- /dev/null
+++ b/javax/faces/event/PreDestroyViewMapEvent.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIViewRoot;
+
+/**
+ *
+ * <p class="changed_added_2_0">This event must be published by a call
+ * to {@link javax.faces.application.Application#publishEvent} when the
+ * <code>clear</code> method is called on the map returned from {@link
+ * UIViewRoot#getViewMap}.
+ *
+ * @since 2.0
+ */
+public class PreDestroyViewMapEvent extends ComponentSystemEvent {
+
+    private static final long serialVersionUID = 4470489935758914483L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>ViewMapDestroydEvent</code> that indicates the argument
+     * <code>root</code> just had its associated view map destroyed.</p>
+
+     * @param root the <code>UIViewRoot</code> for which the view map has
+     * just been destroyed.
+     *
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PreDestroyViewMapEvent(UIViewRoot root) {
+        super(root);
+    }
+
+}
diff --git a/javax/faces/event/PreRemoveFlashValueEvent.java b/javax/faces/event/PreRemoveFlashValueEvent.java
new file mode 100644
index 0000000..04a1d9b
--- /dev/null
+++ b/javax/faces/event/PreRemoveFlashValueEvent.java
@@ -0,0 +1,78 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.context.Flash;
+
+/**
+ *
+ * <p class="changed_added_2_2">This event must be published by a call
+ * to {@link javax.faces.application.Application#publishEvent} when a value
+ * is removed from the flash.</p>
+ *
+ * @since 2.2
+ */
+public class PreRemoveFlashValueEvent extends SystemEvent {
+
+    private static final long serialVersionUID = -82999687346960430L;
+    
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_2">Instantiate a new
+     * <code>PreRemoveFlashValueEvent</code> that indicates the argument
+     * <code>key</code> will be removed from the flash. If the argument is 
+     * <code>null</code>, the literal {@link Flash#NULL_VALUE} must be passed
+     * to the superclass constructor.</p>
+
+     * @param key the key in the flash that was just added.
+     *
+     */
+    public PreRemoveFlashValueEvent(String key) {
+        super(null == key ? Flash.NULL_VALUE : key);
+    }
+    
+    public String getKey() {
+        return getSource().toString();
+    }
+
+}
diff --git a/javax/faces/event/PreRemoveFromViewEvent.java b/javax/faces/event/PreRemoveFromViewEvent.java
new file mode 100644
index 0000000..0e5402b
--- /dev/null
+++ b/javax/faces/event/PreRemoveFromViewEvent.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ * <p class="changed_added_2_0">When an instance of this event is passed
+ * to {@link SystemEventListener#processEvent} or {@link
+ * ComponentSystemEventListener#processEvent}, the listener
+ * implementation may assume that the <code>source</code> of this event
+ * instance is a {@link UIComponent} instance that is about to be
+ * removed from the view.  Therefore, the implementation may assume it
+ * is safe to call {@link UIComponent#getParent}, {@link
+ * UIComponent#getClientId}, and other methods that depend upon the
+ * component instance being added into the view.</p> 
+
+ * @since 2.0
+ */
+public class PreRemoveFromViewEvent extends ComponentSystemEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>BeforeRemoveFromView</code> that indicates the argument
+     * <code>component</code> is about to be removed from the view.</p>
+
+     * @param component the <code>UIComponent</code> that is about to be
+     * removed from the view.
+     *
+     * @throws IllegalArgumentException if <code>component</code> is
+     *  <code>null</code>
+     */
+    public PreRemoveFromViewEvent(UIComponent component) {
+
+        super(component);
+
+    }
+
+
+    // --------------------------------------- Methods from ComponentSystemEvent
+
+
+    /**
+     * <p class="changed_added_2_0">Returns <code>true</code> if and
+     * only if the argument <code>listener</code> is an instance of
+     * {@link SystemEventListener}.</p>
+     * @param listener
+     */
+    @Override
+    public boolean isAppropriateListener(FacesListener listener) {
+
+        return (listener instanceof SystemEventListener);
+        
+    }
+    
+
+}
diff --git a/javax/faces/event/PreRenderComponentEvent.java b/javax/faces/event/PreRenderComponentEvent.java
new file mode 100644
index 0000000..9f546e8
--- /dev/null
+++ b/javax/faces/event/PreRenderComponentEvent.java
@@ -0,0 +1,80 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ * <p class="changed_added_2_0">When an instance of this event is passed
+ * to {@link SystemEventListener#processEvent} or {@link
+ * ComponentSystemEventListener#processEvent}, the listener
+ * implementation may assume that the <code>source</code> of this event
+ * instance is the {@link UIComponent} instance that is about to be
+ * rendered and that it is safe to call {@link
+ * UIComponent#getParent}, {@link UIComponent#getClientId}, and other
+ * methods that depend upon the component instance being in the
+ * view.</p>
+ *
+ * @since 2.0
+ */
+public class PreRenderComponentEvent extends ComponentSystemEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>PreRenderComponentEvent</code> that indicates the argument
+     * <code>component</code> is about to be rendered.</p>
+
+     * @param component the <code>UIComponent</code> that is about to be
+     * rendered.
+
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PreRenderComponentEvent(UIComponent component) {
+        super(component);
+    }
+
+}
diff --git a/javax/faces/event/PreRenderViewEvent.java b/javax/faces/event/PreRenderViewEvent.java
new file mode 100644
index 0000000..3301e8d
--- /dev/null
+++ b/javax/faces/event/PreRenderViewEvent.java
@@ -0,0 +1,91 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIViewRoot;
+
+/**
+ *
+ * <p class="changed_added_2_0">When an instance of this event is passed
+ * to {@link SystemEventListener#processEvent} or {@link
+ * ComponentSystemEventListener#processEvent}, the listener
+ * implementation may assume that the <code>source</code> of this event
+ * instance is the {@link UIViewRoot} instance that is about to be
+ * rendered.</p>
+
+ * <div class="changed_added_2_0">
+ *
+ * <p>It is valid for a listener for this event to change the {@link
+ * UIViewRoot} in the current {@link javax.faces.context.FacesContext},
+ * but the listener must ensure that the new <code>UIViewRoot</code> was
+ * created with a call to {@link
+ * javax.faces.application.ViewHandler#createView}, and that the view is
+ * fully populated with the children to be traversed during render.  The
+ * listener implementation may call {@link
+ * javax.faces.view.ViewDeclarationLanguage#buildView} to populate
+ * the <code>UIViewRoot</code>.</p>
+ *
+ * </div>
+ *
+ * @since 2.0
+ */
+public class PreRenderViewEvent extends ComponentSystemEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+
+     * <p class="changed_added_2_0">Instantiate a new
+     * <code>PreRenderViewEvent</code> that indicates the argument
+     * <code>root</code> is about to be rendered.</p>
+
+     * @param root the <code>UIViewRoot</code> that is about to be
+     * rendered.
+
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PreRenderViewEvent(UIViewRoot root) {
+        super(root);
+    }
+
+}
diff --git a/javax/faces/event/PreValidateEvent.java b/javax/faces/event/PreValidateEvent.java
new file mode 100644
index 0000000..46ee94f
--- /dev/null
+++ b/javax/faces/event/PreValidateEvent.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ * <p class="changed_added_2_0 changed_added_2_1">When an instance of
+ * this event is passed to {@link SystemEventListener#processEvent} or
+ * {@link ComponentSystemEventListener#processEvent}, the listener
+ * implementation may assume that the <code>source</code> of this event
+ * instance is the {@link UIComponent} instance that is about to be
+ * validated.</p>
+
+ * <p class="changed_added_2_1">Components with children
+ * must publish this event before processing their child nodes in
+ * {@link UIComponent#processValidators}.  This is especially important for
+ * iterating components such as
+ * <code>UIData</code>, and form components, such as <code>UIForm</code>.</p>
+
+ *
+ * @since 2.0
+ */
+public class PreValidateEvent extends ComponentSystemEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+
+     * <p class="changed_added_2_0"></p>
+
+     * @param component the <code>UIComponent</code> that is about to be
+     * validated.
+
+     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
+     */
+    public PreValidateEvent(UIComponent component) {
+        super(component);
+    }
+
+}
diff --git a/javax/faces/event/ScopeContext.java b/javax/faces/event/ScopeContext.java
new file mode 100644
index 0000000..a181830
--- /dev/null
+++ b/javax/faces/event/ScopeContext.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.util.Map;
+
+/**
+ * <p class="changed_added_2_0">A structure that contains the name of
+ * the scope and the scope itself exposed as a <code>Map<String,
+ * Object></code>.</p>
+ *
+ * @since 2.0
+ */
+public class ScopeContext {
+
+    private String scopeName;
+    private Map<String,Object> scope;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Construct this structure with the
+     * supplied arguments.</p>
+     * @param scopeName the name of the scope
+     * @param scope the scope itself
+     */
+    public ScopeContext(String scopeName, Map<String, Object> scope) {
+
+        this.scopeName = scopeName;
+        this.scope = scope;
+
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p class="changed_added_2_0">Return the name of this custom
+     * scope.</p>
+     */
+    public String getScopeName() {
+
+        return scopeName;
+
+    }
+
+
+    /**
+     * <p class="changed_modified_2_0">Return the scope itself, exposed
+     * as a <code>Map</code>.</p>
+     */
+    public Map<String, Object> getScope() {
+
+        return scope;
+        
+    }
+
+}
diff --git a/javax/faces/event/SystemEvent.java b/javax/faces/event/SystemEvent.java
new file mode 100644
index 0000000..7d7b449
--- /dev/null
+++ b/javax/faces/event/SystemEvent.java
@@ -0,0 +1,111 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.util.EventObject;
+
+/**
+ * <p><strong class="changed_added_2_0 changed_modified_2_2">SystemEvent</strong> 
+ * is the base class for non-application specific events that can be fired by
+ * arbitrary objects.</p>
+ *
+ * @since 2.0
+ */
+public abstract class SystemEvent extends EventObject {
+
+    private static final long serialVersionUID = 2696415667461888462L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p class="changed_added_2_0">Pass the argument
+     * <code>source</code> to the superclass constructor.</p>
+
+     * @param source the <code>source</code> reference to be
+     * passed to the superclass constructor.
+     *
+     * @throws <code>IllegalArgumentException</code> if the argument is
+     * <code>null</code>.
+     */
+    public SystemEvent(Object source) {
+        super(source);
+    }
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p><span class="changed_modified_2_2">Return</span> <code>true</code> 
+     * if this {@link FacesListener} is an
+     * instance of a the appropriate listener class that this event
+     * supports. <span class="changed_added_2_2">The default implementation returns true if the listener
+     * is a {@link ComponentSystemEventListener}.</span></p>
+     *
+     * @param listener {@link FacesListener} to evaluate
+     */
+    public boolean isAppropriateListener(FacesListener listener) {
+
+        return (listener instanceof SystemEventListener);
+
+    }
+
+
+    /**
+     * <p>Broadcast this event instance to the specified
+     * {@link FacesListener}, by whatever mechanism is appropriate.  Typically,
+     * this will be accomplished by calling an event processing method, and
+     * passing this instance as a paramter.</p>
+     *
+     * @param listener {@link FacesListener} to send this {@link FacesEvent} to
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     */
+    public void processListener(FacesListener listener) {
+
+        ((SystemEventListener) listener).processEvent(this);
+
+    }
+}
diff --git a/javax/faces/event/SystemEventListener.java b/javax/faces/event/SystemEventListener.java
new file mode 100644
index 0000000..04ebd84
--- /dev/null
+++ b/javax/faces/event/SystemEventListener.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+/**
+ * <p class="changed_added_2_0">By implementing this class, an object
+ * indicates that it is a listener for one or more kinds of {@link
+ * SystemEvent}s.  The exact type of event that will cause the
+ * implementing class's {@link #processEvent} method to be called is
+ * indicated by the <code>facesEventClass</code> argument passed when
+ * the listener is installed using {@link
+ * javax.faces.application.Application#subscribeToEvent}.</p>
+ *
+ * @since 2.0
+ */
+public interface SystemEventListener extends FacesListener {
+
+
+    /**
+     * <p>When called, the listener can assume that any guarantees given
+     * in the javadoc for the specific {@link SystemEvent}
+     * subclass are true.</p>
+     *
+     * @param event the <code>SystemEvent</code> instance that
+     * is being processed.
+     *
+     * @throws AbortProcessingException if lifecycle processing should
+     * cease for this request.
+     */
+    public void processEvent(SystemEvent event) throws AbortProcessingException;
+
+    /**
+     * <p>This method must return <code>true</code> if and only if this
+     * listener instance is interested in receiving events from the
+     * instance referenced by the <code>source</code> parameter.</p>
+     *
+     * @param source the source that is inquiring about the
+     * appropriateness of sending an event to this listener instance.  
+     */ 
+    public boolean isListenerForSource(Object source);
+
+}
diff --git a/javax/faces/event/SystemEventListenerHolder.java b/javax/faces/event/SystemEventListenerHolder.java
new file mode 100644
index 0000000..4e20993
--- /dev/null
+++ b/javax/faces/event/SystemEventListenerHolder.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+import java.util.List;
+
+
+/**
+ * <p class="changed_added_2_0">Classes that implement this interface
+ * agree to maintain a list of {@link SystemEventListener} instances
+ * for each kind of {@link SystemEvent} they can generate.  This
+ * interface enables arbitrary Objects to act as the source for {@link
+ * SystemEvent} instances.</p>
+ *
+ * <p>If the implementing class is a {@link
+ * javax.faces.component.UIComponent} or is referenced by a
+ * <code>UIComponent</code>, care must be taken to ensure that the
+ * implementing class, and all the members of the list returned by
+ * {@link #getListenersForEventClass} work correctly with the state
+ * management system.  One way to ensure this is to have the class and
+ * the list members implement {@link javax.faces.component.StateHolder}
+ * or {@link java.io.Serializable}.</p>
+ *
+ * @since 2.0
+ */
+
+public interface SystemEventListenerHolder {
+
+    /**
+     * <div class="changed_added_2_0">
+     * <p>Return a <code>List</code> of {@link SystemEventListener}
+     * instances that have been installed into the class implementing
+     * this interface.</p>
+     * </div>
+     */
+    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> facesEventClass);
+
+}
diff --git a/javax/faces/event/ValueChangeEvent.java b/javax/faces/event/ValueChangeEvent.java
new file mode 100644
index 0000000..21e4e68
--- /dev/null
+++ b/javax/faces/event/ValueChangeEvent.java
@@ -0,0 +1,139 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import javax.faces.component.UIComponent;
+
+
+/**
+ * <p>A {@link ValueChangeEvent} is a notification that the local value of
+ * the source component has been change as a result of user interface
+ * activity.  It is not fired unless validation of the new value was
+ * completed successfully.</p>
+ */
+
+public class ValueChangeEvent extends FacesEvent {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new event object from the specified source component,
+     * old value, and new value.</p>
+     *
+     * <p>The default {@link PhaseId} for this event is {@link
+     * PhaseId#ANY_PHASE}.</p>
+     *
+     * @param component Source {@link UIComponent} for this event
+     * @param oldValue The previous local value of this {@link UIComponent}
+     * @param newValue The new local value of thie {@link UIComponent}
+     *
+     * @throws IllegalArgumentException if <code>component</code> is
+     *  <code>null</code>
+     */
+    public ValueChangeEvent(UIComponent component,
+                             Object oldValue, Object newValue) {
+
+        super(component);
+        this.oldValue = oldValue;
+        this.newValue = newValue;
+    }
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>The previous local value of the source {@link UIComponent}.</p>
+     */
+    private Object oldValue = null;
+
+
+    /**
+     * <p>Return the previous local value of the source {@link UIComponent}.
+     * </p>
+     */
+    public Object getOldValue() {
+
+        return (this.oldValue);
+
+    }
+
+
+    /**
+     * <p>The current local value of the source {@link UIComponent}.</p>
+     */
+    private Object newValue = null;
+
+
+    /**
+     * <p>Return the current local value of the source {@link UIComponent}.
+     * </p>
+     */
+    public Object getNewValue() {
+
+        return (this.newValue);
+
+    }
+
+
+    // ------------------------------------------------- Event Broadcast Methods
+
+
+    public boolean isAppropriateListener(FacesListener listener) {
+
+        return (listener instanceof ValueChangeListener);
+
+    }
+
+    /**
+     * @throws AbortProcessingException {@inheritDoc}
+     */ 
+    public void processListener(FacesListener listener) {
+
+        ((ValueChangeListener) listener).processValueChange(this);
+
+    }
+
+
+}
diff --git a/javax/faces/event/ValueChangeListener.java b/javax/faces/event/ValueChangeListener.java
new file mode 100644
index 0000000..2de056b
--- /dev/null
+++ b/javax/faces/event/ValueChangeListener.java
@@ -0,0 +1,71 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+
+import javax.faces.component.UIComponent;
+
+
+/**
+ * <p>A listener interface for receiving {@link ValueChangeEvent}s.  A class
+ * that is interested in receiving such events implements this interface, and
+ * then registers itself with the source {@link UIComponent} of interest, by
+ * calling <code>addValueChangeListener()</code>.</p>
+ */
+
+public interface ValueChangeListener extends FacesListener {
+
+
+    /**
+     * <p>Invoked when the value change described by the specified
+     * {@link ValueChangeEvent} occurs.</p>
+     *
+     * @param event The {@link ValueChangeEvent} that has occurred
+     *
+     * @throws AbortProcessingException Signal the JavaServer Faces
+     *  implementation that no further processing on the current event
+     *  should be performed
+     */
+    public void processValueChange(ValueChangeEvent event)
+        throws AbortProcessingException;
+
+
+}
diff --git a/javax/faces/event/ViewMapListener.java b/javax/faces/event/ViewMapListener.java
new file mode 100644
index 0000000..ef36aba
--- /dev/null
+++ b/javax/faces/event/ViewMapListener.java
@@ -0,0 +1,53 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.event;
+
+/**
+ * <p class="changed_added_2_0">Marker interface for {@link
+ * SystemEvent}s that indicate the view map has been created ({@link
+ * PostConstructViewMapEvent}, or destroyed ({@link
+ * PreDestroyViewMapEvent}).</p>
+ *
+ * @since 2.0
+ */
+public interface ViewMapListener extends SystemEventListener {
+
+}
diff --git a/javax/faces/event/package.html b/javax/faces/event/package.html
new file mode 100644
index 0000000..8f5bc60
--- /dev/null
+++ b/javax/faces/event/package.html
@@ -0,0 +1,61 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.event"</title>
+</head>
+<body bgcolor="white">
+
+<p><span class="changed_modified_2_0 changed_modified_2_0_rev_a
+changed_modified_2_1 changed_modified_2_2">Interfaces</span> describing
+events and event listeners, and concrete event implementation classes.
+All events extend from {@link javax.faces.event.FacesEvent} and all
+listeners extend from {@link javax.faces.event.FacesListener}.</p>
+
+<p>For your convenience here is a UML class diagram of the classes in
+this package.</p>
+
+<a href="EventHierarchy.jpg" target="_"><img width="640" height="473" src="EventHierarchy.jpg" /></a>
+
+</body>
+</html>
diff --git a/javax/faces/flow/Flow.java b/javax/faces/flow/Flow.java
new file mode 100644
index 0000000..e718c6f
--- /dev/null
+++ b/javax/faces/flow/Flow.java
@@ -0,0 +1,247 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.el.MethodExpression;
+import javax.faces.application.NavigationCase;
+import javax.faces.lifecycle.ClientWindow;
+
+/**
+ * <p class="changed_added_2_2"><strong>Flow</strong> is the runtime
+ * representation of a Faces Flow.  Once placed into service by the
+ * runtime, an instance of this class is immutable.  The implementation
+ * must be thread-safe because instances will be shared across all
+ * usages of the flow within the application.</p>
+ *
+ *
+ * @since 2.2
+ */
+
+public abstract class Flow {
+    
+    // <editor-fold defaultstate="collapsed" desc="Simple properties">       
+
+
+    /**
+     * <p class="changed_added_2_2">Return the immutable id for this
+     * Flow.  This must be unique within the defining document (such as
+     * an Application Configuration Resources file), but need not be
+     * unique within the entire application.</p>
+
+     * @since 2.2
+     */
+
+    public abstract String getId();
+
+    /**
+     * <p class="changed_added_2_2">Return the immutable application unique 
+     * identifier for the document in which the argument flow is defined.</p>
+
+     * @since 2.2
+     */
+
+    public abstract String getDefiningDocumentId();
+
+    /**
+     * <p class="changed_added_2_2">Return the immutable id for the
+     * default node that should be activated when this flow is
+     * entered.</p>
+     *
+     * @since 2.2
+     */
+    
+    public abstract String getStartNodeId();
+
+    /**
+     * <p class="changed_added_2_2">Return the {@code MethodExpression}
+     * that must be called by the runtime as the last thing that happens
+     * before exiting this flow.  Any {@link FlowScoped} beans declared
+     * for this flow must remain in scope until after control returns
+     * from the method referenced by this {@code MethodExpression}.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+
+    public abstract MethodExpression getFinalizer();
+
+    /**
+     * <p class="changed_added_2_2">Return the {@code MethodExpression}
+     * that must be called by the runtime immediately after activating
+     * any {@link FlowScoped} beans declared for this flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+    public abstract MethodExpression getInitializer();
+    
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="Graph properties">       
+
+    /**
+     * <p class="changed_added_2_2">Return an immutable data structure
+     * containing the inbound parameters that have been declared for
+     * this flow.  See {@link FlowHandler#transition} for the
+     * specification of how these parameters are used.  Inbound
+     * parameters are associated with a specific flow instance, while
+     * outbound parameters are associated with a {@link FlowCallNode}
+     * that causes the transition to a new flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+
+    public abstract Map<String, Parameter> getInboundParameters();
+
+    /**
+     * <p class="changed_added_2_2">Return an immutable data structure
+     * containing all of the view nodes declared for this flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+    public abstract List<ViewNode> getViews();
+    
+    /**
+     * <p class="changed_added_2_2">Return an immutable data structure
+     * containing all of the return nodes declared for this flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+    public abstract Map<String,ReturnNode> getReturns();
+    
+    /**
+     * <p class="changed_added_2_2">Return an immutable data structure
+     * containing all of the switch nodes declared for this flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+    public abstract Map<String,SwitchNode> getSwitches();
+    
+    /**
+     * <p class="changed_added_2_2">Return an immutable data structure
+     * containing all the flow call nodes declared for this flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+    public abstract Map<String,FlowCallNode> getFlowCalls();
+    
+    /**
+     * <p class="changed_added_2_2">Return the {@link FlowCallNode} that
+     * represents calling the {@code targetFlow} from this flow, or
+     * {@code null} if {@code targetFlow} cannot be reached from this
+     * flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+    public abstract FlowCallNode getFlowCall(Flow targetFlow);
+
+    /**
+     * <p class="changed_added_2_2">Return an immutable data structure
+     * containing all the method call nodes declared for this flow.</p>
+
+     * <div class="changed_added_2_2">
+
+     * </div>
+
+     * @since 2.2
+     */
+    public abstract List<MethodCallNode> getMethodCalls();
+
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="Graph navigation">
+    
+    public abstract FlowNode getNode(String nodeId);
+    
+    public abstract Map<String, Set<NavigationCase>> getNavigationCases();
+    
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="Outside interaction">       
+    
+    
+    /**
+     * <p class="changed_added_2_2">Obtain the current {@link
+     * javax.faces.lifecycle.ClientWindow} from the {@link
+     * javax.faces.context.ExternalContext}.  Get the window's id and 
+     * append "_" and the return from {@link #getId}.  Return the result.</p>
+     *
+     * @since 2.2
+     */
+    
+    public abstract String getClientWindowFlowId(ClientWindow curWindow);
+    
+    // </editor-fold>
+
+}
diff --git a/javax/faces/flow/FlowCallNode.java b/javax/faces/flow/FlowCallNode.java
new file mode 100644
index 0000000..a298d5b
--- /dev/null
+++ b/javax/faces/flow/FlowCallNode.java
@@ -0,0 +1,54 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import java.util.Map;
+import javax.faces.context.FacesContext;
+
+public abstract class FlowCallNode extends FlowNode {
+    
+    public abstract Map<String, Parameter> getOutboundParameters();
+
+    public abstract String getCalledFlowDocumentId(FacesContext context);
+
+    public abstract String getCalledFlowId(FacesContext context);
+    
+}
diff --git a/javax/faces/flow/FlowHandler.java b/javax/faces/flow/FlowHandler.java
new file mode 100644
index 0000000..0aed28b
--- /dev/null
+++ b/javax/faces/flow/FlowHandler.java
@@ -0,0 +1,471 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import java.util.Map;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2"><strong>FlowHandler</strong> is the main
+ * entry point that enables the runtime to interact with the faces flows
+ * feature.  {@link
+ * javax.faces.application.NavigationHandler} uses this
+ * class when it needs to make navigational decisions related to flows.
+ * The faces flow feature entirely depends on the {@link
+ * javax.faces.lifecycle.ClientWindow} feature and also on CDI.</p>
+ 
+ * <div class="changed_added_2_2">
+
+ * <p><strong>Defining Flows</strong></p>
+
+ * <p>The implementation must support defining faces flows using the
+ * <code><flow-definition></code> element as specified in
+ * the <a target="_"
+ * href="../../../web-facesconfig.html#type_faces-config-flow-definitionType">Application
+ * Configuration Resources XML Schema Definition</a>, or by using the 
+ * {@link javax.faces.flow.builder.FlowBuilder} API.  Additional means
+ * of defining flows may be provided by decorating the {@link
+ * FlowHandlerFactory}.</p>
+
+ * <p><strong>Managing Flows</strong></p>
+
+ * <ul>
+
+ * <p>The singleton instance of this class must be thread safe, and
+ * therefore must not store any per-user state.  Flows are, however,
+ * traversed in a per-user manner, and must be associated with the
+ * current {@link javax.faces.lifecycle.ClientWindow}.  Furthermore,
+ * Flows may be nested.  These requirements strongly suggest managing
+ * the flows with a stack-like runtime data structure, stored in a
+ * per-user fashion and associated with the {@code ClientWindow}.</p>
+
+ * <p><strong>The Flow Graph</strong></p>
+
+ * <p>Prior versions of the specification defined a flow graph but the
+ * only kind of node in the graph was a VDL view.  The Faces Flow
+ * feature currently defines the following node types.</p>
+
+ * <ul>
+
+ * <li><p>View</p>
+
+ * <p>This is the regular JSF VDL View that has been in the
+ * specification since the beginning.</p>
+
+ * </li>
+
+ * <li><p>Switch</p>
+
+ * <p>This is a list of EL expressions.  When control is passed to a
+ * switch node, each expression in the list is evaluated and the first
+ * one that returns {@code true} is used to define the id of the next
+ * node to which control must be passed.  If none of the expressions
+ * evaluates to {@code true}, control passes to the specified default
+ * id.</p>
+
+ * </li>
+
+ * <li><p>Return</p>
+
+ * <p>This node type specifies an outcome that is returned to the
+ * calling flow.</p>
+
+ * </li>
+
+ * <li><p>Method Call</p>
+
+ * <p>This node type allows invocation of arbitrary application logic at
+ * any point in the executiong of the flow.  An outcome can be specified
+ * that will cause a navigation case to be navigated to after the method
+ * has been invoked.</p>
+
+ * </li>
+
+ * <li><p>Faces Flow Call</p>
+
+ * <p>This node type allows one flow to call another flow.  The calling
+ * flow remains active and is not exited until control returns from the
+ * called flow.</p>
+
+ * </li>
+
+ * </ul>
+ * 
+ * <p>Edges in the graph are defined by the existing JSF navigation rule system.</p>
+
+ * <p><strong>Flows and Model Objects</strong></p>
+
+ * <ul>
+
+ * <p>Managed beans annotated with the CDI annotation
+ * {@link FlowScoped} must be instantiated upon a user agent's entry
+ * into the named scope, and must be made available for garbage
+ * collection when the user agent leaves the flow.</p>
+
+ * <p>The <code>flowScope</code> EL implicit object is also
+ * available to store values in the "current" slope.  Values stored in
+ * this scope must be made available for garbage collection when the
+ * user agent leaves the flow.</p>
+
+ * </ul>
+
+ * </div>
+
+ * @since 2.2
+     
+ */ 
+
+public abstract class FlowHandler {
+    
+    
+    /**
+     * <p class="changed_added_2_2">Components that are rendered by <code>Renderers</code>
+     * of component-family <code>javax.faces.OutcomeTarget</code> must use this
+     * constant as the parameter name for a parameter representing the flow id
+     * of the flow that this component will cause to be entered.</p>
+     * 
+     * <p class="changed_added_2_2"></p>
+     * 
+     * @since 2.2
+     */
+    public static final String FLOW_ID_REQUEST_PARAM_NAME = "jffi";
+    
+    /**
+     * <p class="changed_added_2_2">Components that are rendered by <code>Renderers</code>
+     * of component-family <code>javax.faces.OutcomeTarget</code> must use this
+     * constant as the parameter name for a parameter representing the defining document id
+     * of the flow that this component will cause to be entered.</p>
+     * 
+     * @since 2.2
+     */
+    public static final String TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME = "jftfdi";
+    
+    
+    /**
+     * <p class="changed_added_2_2">Components that are rendered by <code>Renderers</code>
+     * of component-family <code>javax.faces.OutcomeTarget</code> must use this
+     * constant as the value of the parameter named by {@link #TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME}
+     * when returning from a flow (without entering another flow) using such a component. </p>
+
+     * @since 2.2
+     */
+    
+    public static final String NULL_FLOW = "javax.faces.flow.NullFlow";
+
+    /**
+     * <p class="changed_added_2_2">Return the {@code Map} that backs
+     * the {@code #{flowScope}} EL implicit object or {@code null}
+     * if no flow is currently active. </p>
+     *
+     * @since 2.2
+     */ 
+    
+    public abstract Map<Object, Object> getCurrentFlowScope();
+    
+    /**
+     * <p class="changed_added_2_2">Return the {@link Flow} whose {@code
+     * id} is equivalent to the argument {@code id}, within the scope of
+     * the argument {@code definingDocument}. </p>
+
+     * @param context the {@code FacesContext} for the current request.
+
+     * @param definingDocumentId An application unique identifier
+     * for the document in which the returned flow is defined.
+
+     * @param id the id of a {@link Flow}, unique within the
+     * scope of the {@code definingDocument}.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     *
+     * @since 2.2
+     */ 
+    
+    public abstract Flow getFlow(FacesContext context, String definingDocumentId, String id);
+    
+    /**
+     * <p class="changed_added_2_2">Add the argument {@link Flow} to the
+     * collection of {@code Flow}s known to the current
+     * application.  The implementation must be thread safe.</p>
+
+     * @param context the {@code FacesContext} for the current request.
+
+     * @param toAdd the {@code Flow} to add.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     *
+     * @throws IllegalStateException if there is already a flow with the
+     * same {@code id} as the argument {@code Flow} within the scope of
+     * the {@code definingDocument}.  
+
+     * @throws IllegalArgumentException if the {@code id} of the flow to
+     * add is {@code null} or the empty string.
+
+     * @throws IllegalArgumentException if the {@code
+     * definingDocumentId} of the {@code toAdd} is {@code null}.
+
+     * @since 2.2
+     */ 
+    public abstract void addFlow(FacesContext context, Flow toAdd);
+    
+    /**
+     * <p class="changed_added_2_2">Return the currently active {@link
+     * Flow} for the argument {@code FacesContext}, or {@code null} if
+     * no flow is active.  A {@code Flow} must always be associated with
+     * exactly one {@link javax.faces.lifecycle.ClientWindow}, but a
+     * {@code ClientWindow} may have multiple {@code Flow}s.</p>
+     * 
+     * <div class="changed_added_2_2">
+     * 
+     * <p>If {@link #pushReturnMode} had been called with {@code true} as the
+     * argument before invoking this method, return the preceding flow on 
+     * the stack instead of the actual current flow, or {@code null} if there 
+     * is no preceding flow.  Otherwise, return the current flow.</p>
+     * 
+     * </div>
+     *
+     * @param context the {@code FacesContext} for the current request.
+     * 
+     * @throws NullPointerException if any of the parameters are {@code null}
+     *
+     * @since 2.2
+     */
+    public abstract Flow getCurrentFlow(FacesContext context);
+    
+    /**
+     * <p class="changed_added_2_2">Convenience overload that calls {@link FacesContext#getCurrentInstance()}
+     * and then calls through to {@link #getCurrentFlow(javax.faces.context.FacesContext)}. </p>
+     * 
+     * @since 2.2
+     */
+    public Flow getCurrentFlow() {
+        return getCurrentFlow(FacesContext.getCurrentInstance());
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Return the last displayed viewId for the 
+     * current flow, as returned by {@link #getCurrentFlow(javax.faces.context.FacesContext)}, 
+     * or {@code null} if there is no current flow.</p>
+     * 
+     * @param context the {@code FacesContext} for the current request.
+     * 
+     * @throws NullPointerException if {@code context} is {@code null}
+     * 
+     * @since 2.2
+     */
+    
+    public abstract String getLastDisplayedViewId(FacesContext context);
+    
+    /**
+     * <p class="changed_added_2_2">Enable the correct handling of navigation
+     * when processing a return node.  The default {@link javax.faces.application.NavigationHandler}
+     * specification requires calling this method before processing
+     * the navigation rules for the flow return, and calling {@link #popReturnMode}, 
+     * from a {@code finally} block, immediately afterward.</p>
+     * 
+     * @param context the {@code FacesContext} for the current request.
+
+     * @throws NullPointerException if {@code context} is {@code null}.
+     * 
+     * @since 2.2
+     */
+    
+    public abstract void pushReturnMode(FacesContext context);
+
+    /**
+     * <p class="changed_added_2_2">Enable the correct handling of navigation
+     * when processing a return node.  The default {@link javax.faces.application.NavigationHandler}
+     * specification requires calling this method from a {@code finally} block, 
+     * immediately attempting to process the navigation rules in the context
+     * of a flow return.</p>
+     * 
+     * @param context the {@code FacesContext} for the current request.
+
+     * @throws NullPointerException if {@code context} is {@code null}.
+     * 
+     * @since 2.2
+     */
+    
+    public abstract void popReturnMode(FacesContext context);
+    
+    /**
+     * <p class="changed_added_2_2">Perform a transition in the flow
+     * graph for the current user's {@link
+     * javax.faces.lifecycle.ClientWindow}.  Obtain references to the
+     * {@code Flow} instances corresponding to the {@code origin} and
+     * {@code destination} arguments.  If the {@code origin Flow} is
+     * equal to the {@code destination Flow}, take no action and return
+     * {@code null}.  Otherwise, if the {@code outboundCallNode}
+     * argument is non-{@code null} save aside the outbound parameters.
+     * For discussion <strong>evaluatedParams</strong> is a data
+     * structure that stores the evaluated values of any outbound
+     * parameters.  It is necessary to evaluate these values before
+     * popping any flow scopes because the values may refer to scoped
+     * instances that need to be passed to the target flow, but will not
+     * be available once the new scope is activated.  Save aside the
+     * outbound parameters using the following algorithm.</p>
+
+     * <div class="changed_added_2_2">
+
+     * <ul>
+
+     * <p>If the {@code outboundParameters} property of {@code
+     * outboundCallNode} is non-{@code null} and not empty, and the
+     * {@code inboundParameters} property of the target flow is
+     * non-{@code null} and not empty, for each entry in the outbound
+     * parameters whose name matches an entry in the inbound parameters,
+     * evaluate the value of the parameter, and put the evaluated value
+     * into <strong>evaluatedParams</strong> under the corresponding
+     * name.  Otherwise, consider <strong>evaluatedParams</strong> to be
+     * empty.</p>
+
+     * </ul>
+
+     * <p>If the {@code destination Flow} is a sub-flow of the {@code
+     * origin Flow} push the {@code destination Flow} onto the flow data
+     * structure and return {@code the destination Flow}. Otherwise, pop
+     * the current {@code Flow} from the flow data structure.  If the
+     * {@code destination Flow} is non-{@code null}, make the {@code
+     * destination Flow} the current flow, pushing it onto the data
+     * structure.  If <strong>evaluatedParams</strong> is not empty, for
+     * each entry, find the corresponding parameter in the target flow's
+     * inbound parameters and call its {@code setValue} method, passing
+     * the value from <strong>evaluatedParams</strong>.</p>
+     * 
+     * </div>
+     * 
+     * @param context the {@code FacesContext} for the current request.
+
+     * @param sourceFlow the current {@code Flow}, or {@code null} if
+     * there is no source flow.
+     * 
+     * @param targetFlow the destination {@code Flow}, or {@code null}
+     * if there is no destination flow.
+     * 
+     * @param outboundCallNode the flow call node causing this
+     * transition, or {@code null} if this transition is not caused by a
+     * flow call.
+     * 
+     * @param toViewId the viewId of the view being displayed as a result of 
+     * this transition.  This parameter makes it possible to implement {@link #getLastDisplayedViewId}.
+     * 
+     * @throws NullPointerException if {@code context} or {@code toViewId} is {@code null}.
+     *
+
+     * @since 2.2
+     */
+            
+    public abstract void transition(FacesContext context, Flow sourceFlow, 
+                                    Flow targetFlow, 
+                                    FlowCallNode outboundCallNode, String toViewId);
+    
+    /**
+     * <p class="changed_added_2_2">Allow for flow transitions in the
+     * case of components rendered by the renderers from
+     * component-family <code>javax.faces.OutcomeTarget</code>.  These
+     * transitions must happen at the front of the request processing
+     * lifecycle due to the HTTP GET based nature of such components.
+     * Therefore, this method is called from the restore view phase of
+     * the lifecycle.</p>
+
+     * <div class="changed_added_2_2">
+
+     * <p>Let <em>flowId</em> be the value in the request parameter map
+     * for the parameter whose name is given by the value of {@link
+     * #FLOW_ID_REQUEST_PARAM_NAME}.  Let <em>toFlowDocumentId</em> be
+     * the value in the request parameter map for the paramater whose
+     * name is given by the value of {@link
+     * #TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME}.  If
+     * <em>toFlowDocumentId</em> is <code>null</code>, take no action
+     * and return.  Otherwise, let <em>sourceFlow</em> be the return
+     * from {@link #getCurrentFlow(javax.faces.context.FacesContext)}. A
+     * <code>null</code> value indicates there is no current flow, which
+     * will be the case if this navigation is trying to enter a flow. If
+     * <em>flowId</em> is not <code>null</code> and
+     * <em>toFlowDocumentId</em> is <strong>not</strong> equal to the
+     * value of {@link #NULL_FLOW}, let <em>targetFlow</em> be the
+     * result of calling {@link
+     * #getFlow(javax.faces.context.FacesContext, java.lang.String,
+     * java.lang.String)}, passing <em>toFlowDocumentId</em> and
+     * <em>flowId</em> as the last two arguments, respectively.  If the
+     * result is non-<code>null</code>, let <em>flowCallNode</em> be the
+     * return from calling {@link Flow#getFlowCall} on the
+     * <em>sourceFlow</em>, passing <em>targetFlow</em> as the argument.
+     * Otherwise, <em>targetFlow</em> and <em>flowCallNode</em> must
+     * remain <code>null</code>, indicating that this is a flow
+     * return. Call {@link FacesContext#getViewRoot()} and let <em>toViewId</em>
+     * be the the return from calling {@link javax.faces.component.UIViewRoot#getViewId}
+     * on it.</p>
+
+     * <p>Call, {@link #transition}, passing the arguments gathered in
+     * the preceding algorithm.</p>
+     *
+     * </div>
+
+     * @since 2.2
+     * 
+     * @param context the {@code FacesContext} for the current request.
+
+     * @throws NullPointerException if {@code context} is {@code null}.
+     */
+    
+    public abstract void clientWindowTransition(FacesContext context);
+    
+
+    /**
+     * <p class="changed_added_2_2">Return {@code true} if and only if
+     * the flow referenced by the argument {@code definingDocument} and
+     * {@code id} is currently active.</p>
+
+     * @param context the {@code FacesContext} for the current request.
+
+     * @param definingDocument An application unique identifier
+     * for the document in which the returned flow is defined.
+
+     * @param id the id of a {@link Flow}, unique within the
+     * scope of the {@code definingDocument}.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     *
+     * @since 2.2
+     */
+    public abstract boolean isActive(FacesContext context, String definingDocument, String id);
+        
+}
diff --git a/javax/faces/flow/FlowHandlerFactory.java b/javax/faces/flow/FlowHandlerFactory.java
new file mode 100644
index 0000000..f7df7c5
--- /dev/null
+++ b/javax/faces/flow/FlowHandlerFactory.java
@@ -0,0 +1,72 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.flow;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2"><strong>FlowHandlerFactory</strong> is
+ * used by the {@link javax.faces.application.Application} to create the
+ * singleton instance of {@link FlowHandler}.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class FlowHandlerFactory {
+
+    public FlowHandlerFactory() {
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Create the singleton instance of
+     * {@link FlowHandler}.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract FlowHandler createFlowHandler(FacesContext context);
+
+
+}
diff --git a/javax/faces/flow/FlowHandlerFactoryWrapper.java b/javax/faces/flow/FlowHandlerFactoryWrapper.java
new file mode 100644
index 0000000..7b702cf
--- /dev/null
+++ b/javax/faces/flow/FlowHandlerFactoryWrapper.java
@@ -0,0 +1,80 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.flow;
+
+import javax.faces.context.FacesContext;
+import javax.faces.FacesWrapper;
+
+/**
+ * <p
+ * class="changed_added_2_2"><strong>FlowHandlerFactoryWrapper</strong>
+ * provides a simple implementation of {@link FlowHandlerFactory} that
+ * can be subclassed by developers wishing to provide specialized
+ * behavior to an existing {@link FlowHandlerFactory} instance.  The
+ * default implementation of all methods is to call through to the
+ * wrapped {@link FlowHandlerFactory} instance.</p>
+ *
+ * <p class="changed_added_2_2>Usage: extend this class and override 
+ * {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.2
+ */
+public abstract class FlowHandlerFactoryWrapper extends FlowHandlerFactory implements FacesWrapper<FlowHandlerFactory> {
+
+    public FlowHandlerFactoryWrapper() {
+    }
+    
+    /**
+     * <p class="changed_added_2_2">A class that implements this
+     * interface uses this method to return an instance of the class
+     * being wrapped.</p>
+     *
+     * @since 2.2
+     */
+    @Override
+    public abstract FlowHandlerFactory getWrapped();
+
+    @Override
+    public FlowHandler createFlowHandler(FacesContext context) {
+        return getWrapped().createFlowHandler(context);
+    }
+    
+}
diff --git a/javax/faces/flow/FlowHierarchy.jpg b/javax/faces/flow/FlowHierarchy.jpg
new file mode 100644
index 0000000..a3806a6
Binary files /dev/null and b/javax/faces/flow/FlowHierarchy.jpg differ
diff --git a/javax/faces/flow/FlowNode.java b/javax/faces/flow/FlowNode.java
new file mode 100644
index 0000000..c576108
--- /dev/null
+++ b/javax/faces/flow/FlowNode.java
@@ -0,0 +1,56 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+/**
+ * <p class="changed_added_2_2"><strong>FlowNode</strong> is the base
+ * class for all nodes in a faces flow graph.</p>
+ *
+ *
+ * @since 2.2
+ */
+
+public abstract class FlowNode {
+    
+    public abstract String getId();
+
+    
+}
diff --git a/javax/faces/flow/FlowScoped.java b/javax/faces/flow/FlowScoped.java
new file mode 100644
index 0000000..6b13817
--- /dev/null
+++ b/javax/faces/flow/FlowScoped.java
@@ -0,0 +1,94 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.context.NormalScope;
+
+/**
+ * <p class="changed_added_2_2"><strong>FlowScoped</strong> is a CDI
+ * scope that causes the runtime to consider classes with this
+ * annotation to be in the scope of the specified {@link Flow}.  The
+ * implementation must provide an implementation of {@code
+ * javax.enterprise.inject.spi.Extension} that implements the semantics
+ * such that beans with this annotation are created when the user enters
+ * into the specified {@code Flow}, and de-allocated when the user exits
+ * the specified {@code Flow}.  See {@link FlowHandler#transition} for
+ * the specification of flow entry and exit.</p>
+ * 
+ * @since 2.2
+ */
+
+
+ at NormalScope
+ at Inherited
+ at Documented
+ at Target(ElementType.TYPE)
+ at Retention(value = RetentionPolicy.RUNTIME)
+public @interface FlowScoped {
+
+   
+    /**
+     * <p class="changed_added_2_2">Must be equivalent to the {@link
+     * Flow#getId} of a defined flow for this application.</p>
+     *
+     * @since 2.2
+     */
+    String value();
+
+    /**
+     * <p class="changed_added_2_2">If not empty, declare the defining
+     * document id within which the {@link Flow} referenced by {@link
+     * #value} is unique.  If empty the, the runtime assumes that all flow
+     * ids are unique within the scope of the application.</p>
+     *
+     * @since 2.2
+     */
+    
+    String definingDocumentId() default "";
+
+}
diff --git a/javax/faces/flow/MethodCallNode.java b/javax/faces/flow/MethodCallNode.java
new file mode 100644
index 0000000..229fd35
--- /dev/null
+++ b/javax/faces/flow/MethodCallNode.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import java.util.List;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_2">Represents a method call node in the flow graph.
+ * When control passes to a method call node, its {@code MethodExpression} is
+ * invoked, passing any parameters.  Let <em>outcome</em> be the value determined
+ * by the following algorithm.  If there is a {@code null} return from the invocation, 
+ * {@link #getOutcome} is called.  If the result is non-{@code null}, its {@code getValue()} method 
+ * is called and the value is considered to be <em>outcome</em>. If there is a non-{@code null} return,
+ * let it be <em>outcome</em>.  Convert <em>outcome</em> to a String by calling 
+ * its {@code toString} method.  Use <em>outcome</em> to determine the next
+ * node in the flow graph.</p>
+ * 
+ * @since 2.2
+ */
+
+public abstract class MethodCallNode extends FlowNode {
+    
+    /**
+     * <p class="changed_added_2_2">Return the {@code MethodExpression} to be
+     * invoked to when control passes to this node.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract MethodExpression getMethodExpression();
+
+    /**
+     * <p class="changed_added_2_2">Return the {@code outcome} to be
+     * used in the event of a {@code null} return from the method.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract ValueExpression getOutcome();
+    
+    /**
+     * <p class="changed_added_2_2">Return the parameters to be passed
+     * to the method.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract List<Parameter> getParameters();
+
+}
diff --git a/javax/faces/flow/Parameter.java b/javax/faces/flow/Parameter.java
new file mode 100644
index 0000000..2d8af55
--- /dev/null
+++ b/javax/faces/flow/Parameter.java
@@ -0,0 +1,70 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_2">Represents a parameter in any of several
+ * places where parameters are needed when processing flows.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class Parameter {
+    
+    /**
+     * <p class="changed_added_2_2">Return the name of the parameter</p>
+     * 
+     * @since 2.2
+     */
+    
+    public abstract String getName();
+
+    /**
+     * <p class="changed_added_2_2">Return a {@code ValueExpression} for the
+     * value of the parameter.  Depending on the context, this expression
+     * may only ever be evaluated in a "get" operation.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract ValueExpression getValue();
+
+}
diff --git a/javax/faces/flow/ReturnNode.java b/javax/faces/flow/ReturnNode.java
new file mode 100644
index 0000000..da32624
--- /dev/null
+++ b/javax/faces/flow/ReturnNode.java
@@ -0,0 +1,64 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2">Represents a return node in the flow graph.
+ * When control passes to a return node, its {@link #getFromOutcome} is called
+ * to determine the next node in the flow graph.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class ReturnNode extends FlowNode {
+    
+    /**
+     * <p class="changed_added_2_2">Return the {@code fromOutcome} to be
+     * used when control passes to this return node.</p>
+     * 
+     * @param context the {@link FacesContext} for this request.
+     * @throws NullPointerException if {@code context} is {@code null}.
+     * @since 2.2
+     */
+    public abstract String getFromOutcome(FacesContext context); 
+    
+}
diff --git a/javax/faces/flow/SwitchCase.java b/javax/faces/flow/SwitchCase.java
new file mode 100644
index 0000000..b3fa2e0
--- /dev/null
+++ b/javax/faces/flow/SwitchCase.java
@@ -0,0 +1,69 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2">Represents a case within a switch node in the flow graph.
+ * See {@link SwitchNode}.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class SwitchCase {
+    
+    /**
+     * <p class="changed_added_2_2">Return the outcome to be used if {@link #getCondition}
+     * return {@code true}.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract String getFromOutcome();
+
+    /**
+     * <p class="changed_added_2_2">Return {@code true} if this case should be
+     * taken, {@code false} otherwise.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract Boolean getCondition(FacesContext context);
+    
+}
diff --git a/javax/faces/flow/SwitchNode.java b/javax/faces/flow/SwitchNode.java
new file mode 100644
index 0000000..4e17540
--- /dev/null
+++ b/javax/faces/flow/SwitchNode.java
@@ -0,0 +1,74 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+import java.util.List;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2">Represents a switch node in the flow graph.
+ * When control passes to a switch node, for each of the {@link SwitchCase}s
+ * returned from {@link #getCases}, call {@link SwitchCase#getCondition}.  If
+ * the return is {@code true}, let the return from {@link SwitchCase#getFromOutcome}
+ * be used to determine where to go next in the flow graph and terminate the traversal.
+ * If none of the cases returned {@code true} let {@link #getDefaultOutcome}
+ * be used to determine where to go next in the flow graph.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class SwitchNode extends FlowNode {
+    
+    
+    /**
+     * <p class="changed_added_2_2">Return the cases in this switch.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract List<SwitchCase> getCases();
+
+    /**
+     * <p class="changed_added_2_2">Return the default outcome in this switch.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract String getDefaultOutcome(FacesContext context);
+    
+}
diff --git a/javax/faces/flow/ViewNode.java b/javax/faces/flow/ViewNode.java
new file mode 100644
index 0000000..8137166
--- /dev/null
+++ b/javax/faces/flow/ViewNode.java
@@ -0,0 +1,62 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow;
+
+/**
+ * <p class="changed_added_2_2"><strong>ViewNode</strong> is the class
+ * that represents a VDL view in a faces flow graph.</p>
+ *
+ * @since 2.2
+ */
+
+public abstract class ViewNode extends FlowNode {
+    
+    
+    /**
+     * <p class="changed_added_2_2">Return the immutable VDL document id
+     * for this view node.  This is normally the path to the VDL page
+     * that defines this view node.  This must be unique within the
+     * flow.</p>
+     * @since 2.2
+     */
+    public abstract String getVdlDocumentId();
+
+}
diff --git a/javax/faces/flow/builder/FlowBuilder.java b/javax/faces/flow/builder/FlowBuilder.java
new file mode 100644
index 0000000..31e8345
--- /dev/null
+++ b/javax/faces/flow/builder/FlowBuilder.java
@@ -0,0 +1,278 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.flow.Flow;
+
+/**
+ * <p class="changed_added_2_2">A Java language API for building {@link Flow}s. 
+ * This API is semantically identical to the
+ * <code><flow-definition></code> element in the
+ * <a target="_"
+ * href="../../../../web-facesconfig.html#type_faces-config-flow-definitionType">Application
+ * Configuration Resources XML Schema Definition</a>.</p>
+ * 
+ * <div class="changed_added_2_2">
+ * 
+ * <p>Usage example:</p><pre><code>public class FlowA implements Serializable {
+    
+    &#x40;Produces {@link FlowDefinition}
+    public {@link Flow} buildMyFlow(&#x40;{@link FlowBuilderParameter} {@link FlowBuilder} flowBuilder) {
+        String flowId = "flow-a";
+        flowBuilder.id("unique", flowId);
+        flowBuilder.returnNode("taskFlowReturn1").
+                fromOutcome("#{flow_a_Bean.returnValue}");
+        flowBuilder.inboundParameter("param1FromFlowB", "#{flowScope.param1Value}");
+        flowBuilder.inboundParameter("param2FromFlowB", "#{flowScope.param2Value}");
+        flowBuilder.flowCallNode("callB").flowReference("", "flow-b").
+                outboundParameter("param1FromFlowA", "param1Value").
+                outboundParameter("param2FromFlowA", "param2Value");
+        
+        return flowBuilder.getFlow();
+    }
+}
+</code></pre>
+ * 
+ * <p>The runtime must discover all such methods at startup time and ensure that
+ * the returned flows are added to the {@link javax.faces.flow.FlowHandler} using
+ * the {@link javax.faces.flow.FlowHandler#addFlow(javax.faces.context.FacesContext, javax.faces.flow.Flow)} method.</p>
+ * 
+ * </div>
+ *
+ * @since 2.2
+ */
+
+public abstract class FlowBuilder  {
+    
+    /**
+     * <p class="changed_added_2_2">Set the defining document id and flow id
+     * of this flow.</p>
+     * 
+     * @param definingDocumentId The defining document id of this flow, or the 
+     * empty string if this flow does not need a defining document id.
+     * @param id the id of the flow
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+    public abstract FlowBuilder id(String definingDocumentId, String id);
+    
+    /**
+     * <p class="changed_added_2_2">Define a view node in a flow graph.</p>
+     * 
+     * @param viewNodeId Within the flow graph, the id of this view node
+     * @param vdlDocumentId The fully qualified path to the view node within this flow.
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+    
+    /**
+     * <p class="changed_added_2_2">Define a view node in a flow graph.</p>
+     * 
+     * @param viewNodeId Within the flow graph, the id of this view node.  Must
+     * be unique among all nodes in this flow graph.
+     * @param vdlDocumentId The fully qualified path to the view node within this flow.
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract ViewBuilder viewNode(String viewNodeId, String vdlDocumentId);
+
+    /**
+     * <p class="changed_added_2_2">Define a particular combination of 
+     * conditions that must match for this case to be executed, 
+     * and the view id of the component tree that should be selected next.</p>
+     * 
+     * @since 2.2
+     */
+    public abstract NavigationCaseBuilder navigationCase();
+
+    /**
+     * <p class="changed_added_2_2">Define a particular list of cases that 
+     * will be inspected in the order they are defined to determine where to
+     * go next in the flow graph.  If none of the cases match, the outcome
+     * from the default case is chosen.</p>
+     * 
+     * @param switchNodeId Within the flow graph, the id of this switch node.  Must
+     * be unique among all nodes in this flow graph.
+     *
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     * 
+     */
+    public abstract SwitchBuilder switchNode(String switchNodeId);
+    
+    /**
+     * <p class="changed_added_2_2">Define a return node.  This node will cause
+     * the specified outcome to be returned to the calling flow.</p>
+     * 
+     * @param returnNodeId Within the flow graph, the id of this return node.  Must
+     * be unique among all nodes in this flow graph.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract ReturnBuilder returnNode(String returnNodeId);
+    
+    /**
+     * <p class="changed_added_2_2">Define a method call node.  This node will
+     * cause the specified method to be invoked, passing parameters if necessary.
+     * The return from the method is used as the outcome for where to go next in the
+     * flow.  If the method is a void method, the default outcome is used.</p>
+     * 
+     * @param methodCallNodeId Within the flow graph, the id of this method call node.  Must
+     * be unique among all nodes in this flow graph.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract MethodCallBuilder methodCallNode(String methodCallNodeId);
+    
+    /**
+     * <p class="changed_added_2_2">Define a flow call node.  This node will
+     * cause the specified flow to be called, passing parameters if necessary.</p>
+     * 
+     * @param flowCallNodeId Within the flow graph, the id of this return node.  Must
+     * be unique among all nodes in this flow graph.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract FlowCallBuilder flowCallNode(String flowCallNodeId);
+    
+    /**
+     * <p class="changed_added_2_2">A MethodExpression that will be invoked when the flow is entered.</p>
+     * 
+     * @param methodExpression the expression to invoke, must reference a zero-argument method.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract FlowBuilder initializer(MethodExpression methodExpression);
+    
+    /**
+     * <p class="changed_added_2_2">A MethodExpression that will be invoked when the flow is entered.</p>
+     * 
+     * @param methodExpression the expression to invoke, must reference a zero-argument method.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract FlowBuilder initializer(String methodExpression);
+    
+    /**
+     * <p class="changed_added_2_2">A MethodExpression that will be invoked when the flow is exited.</p>
+     * 
+     * @param methodExpression the expression to invoke, must reference a zero-argument method.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract FlowBuilder finalizer(MethodExpression methodExpression);
+    
+    /**
+     * <p class="changed_added_2_2">A MethodExpression that will be invoked when the flow is exited.</p>
+     * 
+     * @param methodExpression the expression to invoke, must reference a zero-argument method.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract FlowBuilder finalizer(String methodExpression);
+
+    /**
+     * <p class="changed_added_2_2">A parameter that will be populated with 
+     * the value from a correspondingly named outbound parameter from another
+     * flow when this flow is entered from that flow.</p>
+     * 
+     * @param name the parameter name
+     * 
+     * @param expression the {@code ValueExpression} to populate with the inbound
+     * value when the flow is called.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract FlowBuilder inboundParameter(String name, ValueExpression expression);
+        
+    /**
+     * <p class="changed_added_2_2">A parameter that will be populated with 
+     * the value from a correspondingly named outbound parameter from another
+     * flow when this flow is entered from that flow.</p>
+     * 
+     * @param name the parameter name
+     * 
+     * @param expression the {@code ValueExpression} String to populate with the inbound
+     * value when the flow is called.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract FlowBuilder inboundParameter(String name, String expression);
+
+    /**
+     * <p class="changed_added_2_2">Called as the last step in flow definition, 
+     * this method must perform any implementation specific initialization
+     * and return the built {@link Flow}. If called more than one time during a 
+     * given flow building process, the second and subsequent invocations must
+     * take no action and return the built flow.</p>
+     * 
+     * @throws IllegalStateException if the {@link #id} method had not been
+     * called prior to this method being called.
+     * 
+     * @since 2.2
+     */
+    public abstract Flow getFlow();
+    
+}
+    
+
diff --git a/javax/faces/flow/builder/FlowBuilderParameter.java b/javax/faces/flow/builder/FlowBuilderParameter.java
new file mode 100644
index 0000000..647c6ad
--- /dev/null
+++ b/javax/faces/flow/builder/FlowBuilderParameter.java
@@ -0,0 +1,67 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * <p class="changed_added_2_2">The presence of this annotation on a CDI producer
+ * method for the {@link FlowDefinition} annotation causes the {@link FlowBuilder}
+ * to be passed to that method.  See {@link FlowBuilder} for a usage example.</p>
+ * 
+ * @since 2.2
+ */
+
+ at Qualifier
+ at Target({ TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+public @interface FlowBuilderParameter {
+    
+}
diff --git a/javax/faces/flow/builder/FlowCallBuilder.java b/javax/faces/flow/builder/FlowCallBuilder.java
new file mode 100644
index 0000000..0c1b31e
--- /dev/null
+++ b/javax/faces/flow/builder/FlowCallBuilder.java
@@ -0,0 +1,86 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_2">Create a flow call node in the current {@link javax.faces.flow.Flow}.</p>
+ * @since 2.2
+ */
+public abstract class FlowCallBuilder implements NodeBuilder {
+    
+    /**
+     * <p class="changed_added_2_2">Define the flow reference of the called flow.</p>
+     * 
+     * @param flowDocumentId the document id of the called flow.  May not be {@code null}, 
+     * but may be the empty string.
+     * @param flowId the id of the called flow.  May not be {@code null}
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+    public abstract FlowCallBuilder flowReference(String flowDocumentId, 
+                                                  String flowId);
+    
+    /**
+     * <p class="changed_added_2_2">Define an outbound parameter for the flow call.</p>
+     * 
+     * @param name the name of the parameter
+     * @param value the value of the parameter
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+    public abstract FlowCallBuilder outboundParameter(String name, ValueExpression value);
+        
+    /**
+     * <p class="changed_added_2_2">Define an outbound parameter for the flow call.</p>
+     * 
+     * @param name the name of the parameter
+     * @param value the value of the parameter
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+    public abstract FlowCallBuilder outboundParameter(String name, String value);
+
+    @Override
+    public abstract FlowCallBuilder markAsStartNode();
+    
+}
diff --git a/javax/faces/flow/builder/FlowDefinition.java b/javax/faces/flow/builder/FlowDefinition.java
new file mode 100644
index 0000000..9d62e1b
--- /dev/null
+++ b/javax/faces/flow/builder/FlowDefinition.java
@@ -0,0 +1,65 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ * <p class="changed_added_2_2">The presence of this annotation on a CDI producer
+ * method indicates that the method will produce a flow.  See {@link FlowBuilder}
+ * for a usage example.</p>
+ * 
+ * @since 2.2
+ */
+
+ at Retention(RUNTIME)
+ at Target({ METHOD })
+ at Qualifier
+public @interface FlowDefinition {
+
+
+}
diff --git a/javax/faces/flow/builder/MethodCallBuilder.java b/javax/faces/flow/builder/MethodCallBuilder.java
new file mode 100644
index 0000000..d06ca5d
--- /dev/null
+++ b/javax/faces/flow/builder/MethodCallBuilder.java
@@ -0,0 +1,138 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import java.util.List;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.flow.Parameter;
+
+/**
+ * <p class="changed_added_2_2">Create a method call node in the current {@link javax.faces.flow.Flow}.</p>
+ * @since 2.2
+ */
+public abstract class MethodCallBuilder implements NodeBuilder {
+    
+    /**
+     * <p class="changed_added_2_2">Set the method expression of this method call node.  The method
+     * signature of the argument {@code methodExpression} must match the number and
+     * type of the parameters passed in the {@link #parameters} method.</p>
+     * 
+     * @param methodExpression The {@code MethodExpression} to invoke.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract MethodCallBuilder expression(MethodExpression methodExpression);
+    
+    /**
+     * <p class="changed_added_2_2">Set the method expression of this method call node.  The method
+     * signature of the argument {@code methodExpression} must match the number and
+     * type of the parameters passed in the {@link #parameters} method.</p>
+     * 
+     * @param methodExpression The {@code MethodExpression} String to invoke.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract MethodCallBuilder expression(String methodExpression);
+    
+    /**
+     * <p class="changed_added_2_2">Set the method expression of this method call node.  The method
+     * signature of the argument {@code methodExpression} must match the number and
+     * type of the parameters passed in the {@link #parameters} method.</p>
+     * 
+     * @param methodExpression The {@code MethodExpression} to invoke.
+     * @param paramTypes the types of the parameters to the method.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract MethodCallBuilder expression(String methodExpression, Class [] paramTypes);
+    
+    /**
+     * <p class="changed_added_2_2">Set the parameters of the method call node.</p>
+     * 
+     * @param parameters the parameters to pass to the method when it is invoked.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract MethodCallBuilder parameters(List<Parameter> parameters);
+    
+    /**
+     * <p class="changed_added_2_2">If the method is a void method, or the
+     * method returns {@code null}, this can be used to specify what value 
+     * should be passed to runtime when the method returns.</p>
+     * 
+     * @param outcome A {@code ValueExpression} String representing 
+     * the default outcome, only used if the method is a void
+     * method or returns {@code null}.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract MethodCallBuilder defaultOutcome(String outcome);
+    
+    /**
+     * <p class="changed_added_2_2">If the method is a void method, or the
+     * method returns {@code null}, this can be used to specify what value 
+     * should be passed to runtime when the method returns.</p>
+     * 
+     * @param outcome A {@code ValueExpression} representing 
+     * the default outcome, only used if the method is a void
+     * method or returns {@code null}.
+
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract MethodCallBuilder defaultOutcome(ValueExpression outcome);
+
+    @Override
+    public abstract MethodCallBuilder markAsStartNode();
+    
+}
diff --git a/javax/faces/flow/builder/NavigationCaseBuilder.java b/javax/faces/flow/builder/NavigationCaseBuilder.java
new file mode 100644
index 0000000..faac53d
--- /dev/null
+++ b/javax/faces/flow/builder/NavigationCaseBuilder.java
@@ -0,0 +1,169 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_2">Create a navigation case in the current {@link javax.faces.flow.Flow}.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class NavigationCaseBuilder {
+
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the from-view-id of the current navigation case.</p>
+     * 
+     * @param fromViewId the from-view-id
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract NavigationCaseBuilder fromViewId(String fromViewId);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the from-action of the current navigation case.</p>
+     * 
+     * @param fromAction the from-action
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract NavigationCaseBuilder fromAction(String fromAction);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the from-outcome of the current navigation case.</p>
+     * 
+     * @param fromOutcome the from-outcome
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract NavigationCaseBuilder fromOutcome(String fromOutcome);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the to-view-id of the current navigation case.</p>
+     * 
+     * @param toViewId the to-view-id
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract NavigationCaseBuilder toViewId(String toViewId);
+
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the to-flow-document-id of the current navigation case.</p>
+     * 
+     * @param toFlowDocumentId the to-flow-document-id
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract NavigationCaseBuilder toFlowDocumentId(String toFlowDocumentId);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the if of the current navigation case.</p>
+     * 
+     * @param condition the <if>
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract NavigationCaseBuilder condition(String condition);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the if of the current navigation case.</p>
+     * 
+     * @param condition the <if>
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     */
+
+    public abstract NavigationCaseBuilder condition(ValueExpression condition);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Create a redirect within this navigation case.</p>
+     * 
+     * @since 2.2
+     */
+
+    public abstract RedirectBuilder redirect();
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Allows populating the redirect with parameters 
+     * and setting the includeViewParams option.</p>
+     * 
+     * @since 2.2
+     */
+    
+    public abstract class RedirectBuilder {
+        
+        /**
+         * <p class="changed_added_2_2">Add a parameter to the redirect.</p>
+         * 
+         * @param name the name of the redirect parameter
+         * @value the value of the redirect parameter.  May not be a {@code ValueExpression}.
+         * @throws NullPointerException if any of the parameters are {@code null}
+         * @since 2.2
+         */
+
+        public abstract RedirectBuilder parameter(String name, String value);
+        
+        /**
+         * <p class="changed_added_2_2">Indicates the current redirect should include view parameters.</p>
+         * 
+         * @since 2.2
+         */
+
+        public abstract RedirectBuilder includeViewParams();
+    
+    }
+    
+}
diff --git a/javax/faces/flow/builder/NodeBuilder.java b/javax/faces/flow/builder/NodeBuilder.java
new file mode 100644
index 0000000..8b03246
--- /dev/null
+++ b/javax/faces/flow/builder/NodeBuilder.java
@@ -0,0 +1,62 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+/**
+ * <p class="changed_added_2_2">Base interface for building all kinds of flow nodes.</p>
+ * 
+ * @since 2.2
+ */
+
+public interface NodeBuilder {
+    
+    /**
+     * <p class="changed_added_2_2">Mark this node as the start node in the flow.
+     * Any other node that had been marked as the start node will no longer
+     * be the start node.</p>
+     * 
+     * @since 2.2
+     */
+    
+    public NodeBuilder markAsStartNode();
+    
+    
+}
diff --git a/javax/faces/flow/builder/ReturnBuilder.java b/javax/faces/flow/builder/ReturnBuilder.java
new file mode 100644
index 0000000..f39d0bd
--- /dev/null
+++ b/javax/faces/flow/builder/ReturnBuilder.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_2">Create a return node in the current {@link javax.faces.flow.Flow}.</p>
+ * @since 2.2
+ */
+public abstract class ReturnBuilder implements NodeBuilder {
+    
+    /**
+     * <p class="changed_added_2_2">Set the outcome of the current return node.</p>
+     * 
+     * @param outcome A {@code ValueExpression} String {@code String} that will be the 
+     * outcome of the return.
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract ReturnBuilder fromOutcome(String outcome);
+    
+    /**
+     * <p class="changed_added_2_2">Set the outcome of the current return node.</p>
+     * 
+     * @param outcome A {@code ValueExpression} {@code String} that will be the 
+     * outcome of the return.
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    public abstract ReturnBuilder fromOutcome(ValueExpression outcome);
+
+    @Override
+    public abstract ReturnBuilder markAsStartNode();
+        
+}
diff --git a/javax/faces/flow/builder/SwitchBuilder.java b/javax/faces/flow/builder/SwitchBuilder.java
new file mode 100644
index 0000000..ce2f717
--- /dev/null
+++ b/javax/faces/flow/builder/SwitchBuilder.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_2">Create a switch node in the current {@link javax.faces.flow.Flow}.</p>
+ * @since 2.2
+ */
+
+public abstract class SwitchBuilder implements NodeBuilder {
+    
+    /**
+     * <p class="changed_added_2_2">Create a switch case in the current switch.</p>
+     * @since 2.2
+     */
+    
+    public abstract SwitchCaseBuilder switchCase();
+    
+    /**
+     * <p class="changed_added_2_2">Set the default outcome of the current switch.</p>
+     * 
+     * @param outcome A {@code ValueExpression} {@code String} that will be the 
+     * default outcome of the switch.
+     * @since 2.2
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     */
+    
+    public abstract SwitchCaseBuilder defaultOutcome(String outcome);
+    
+    /**
+     * <p class="changed_added_2_2">Set the default outcome of the current switch.</p>
+     * 
+     * @param outcome A {@code ValueExpression} that will be the default outcome of the switch.
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * 
+     * @since 2.2
+     */
+    
+    public abstract SwitchCaseBuilder defaultOutcome(ValueExpression outcome);
+
+    @Override
+    public abstract SwitchBuilder markAsStartNode();
+
+}
diff --git a/javax/faces/flow/builder/SwitchCaseBuilder.java b/javax/faces/flow/builder/SwitchCaseBuilder.java
new file mode 100644
index 0000000..9438e5c
--- /dev/null
+++ b/javax/faces/flow/builder/SwitchCaseBuilder.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_2">Create a case in the current switch.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class SwitchCaseBuilder {
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Create a new case in the current switch.</p>
+     * 
+     * @since 2.2
+     * 
+     */
+    public abstract SwitchCaseBuilder switchCase();
+        
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the if in the previously created switch case.</p>
+     * 
+     * @param expression the {@code ValueExpression} to be evaluated to see if this case
+     * is chosen.
+     * 
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     * 
+     */
+    public abstract SwitchCaseBuilder condition(ValueExpression expression);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the if in the previously created switch case.</p>
+     * 
+     * @param expression the {@code ValueExpression} String to be evaluated to see if this case
+     * is chosen.
+     * 
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     * 
+     */
+    public abstract SwitchCaseBuilder condition(String expression);
+    
+    /**
+     * 
+     * <p class="changed_added_2_2">Set the outcome in the previously created switch case.</p>
+     * 
+     * @param outcome the outcome to be returned if the condition evaluates to {@code true}.
+     * 
+     * @throws NullPointerException if any of the parameters are {@code null}
+     * @since 2.2
+     * 
+     */
+    public abstract SwitchCaseBuilder fromOutcome(String outcome);
+        
+}
diff --git a/javax/faces/flow/builder/ViewBuilder.java b/javax/faces/flow/builder/ViewBuilder.java
new file mode 100644
index 0000000..6cf31ab
--- /dev/null
+++ b/javax/faces/flow/builder/ViewBuilder.java
@@ -0,0 +1,53 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.flow.builder;
+
+/**
+ * <p class="changed_added_2_2">Create a view node in the current {@link javax.faces.flow.Flow}.</p>
+ * 
+ * @since 2.2
+ */
+public abstract class ViewBuilder implements NodeBuilder {
+
+    @Override
+    public abstract ViewBuilder markAsStartNode();
+
+}
diff --git a/javax/faces/flow/builder/package.html b/javax/faces/flow/builder/package.html
new file mode 100644
index 0000000..e8fdc3a
--- /dev/null
+++ b/javax/faces/flow/builder/package.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.flow.builder"</title>
+</head>
+<body bgcolor="white">
+
+<p class="changed_added_2_2"><span>Classes</span> for declaring a Faces
+Flow.  See <code><a href="FlowBuilder.html">FlowBuilder</a></code> and
+its helpers for the normative specification of this feature.</p>
+
+</body>
+</html>
diff --git a/javax/faces/flow/package.html b/javax/faces/flow/package.html
new file mode 100644
index 0000000..090b74f
--- /dev/null
+++ b/javax/faces/flow/package.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.flow"</title>
+</head>
+<body bgcolor="white">
+
+<p class="changed_added_2_2"><span>The</span> runtime API for Faces
+Flows.  See <code><a href="FlowHandler.html">FlowHandler</a></code> and
+its helpers for the normative specification of this feature.</p>
+
+</body>
+</html>
diff --git a/javax/faces/lifecycle/ClientWindow.java b/javax/faces/lifecycle/ClientWindow.java
new file mode 100644
index 0000000..620d737
--- /dev/null
+++ b/javax/faces/lifecycle/ClientWindow.java
@@ -0,0 +1,245 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.lifecycle;
+
+import java.util.Map;
+import javax.faces.context.FacesContext;
+import javax.faces.render.ResponseStateManager;
+
+/**
+ * <p class="changed_added_2_2">This class represents a client window,
+ * which may be a browser tab, browser window, browser pop-up, portlet,
+ * or anything else that can display a {@link
+ * javax.faces.component.UIComponent} hierarchy rooted at a {@link
+ * javax.faces.component.UIViewRoot}.</p>
+ * 
+ * <div class="changed_added_2_2">
+
+ * <p>Modes of Operation</p>
+
+ * <ul>
+
+ * <p>none mode</p>
+
+ * <p>The generation of <code>ClientWindow</code> is controlled by the
+ * value of the <code>context-param</code> named by the value of {@link
+ * #CLIENT_WINDOW_MODE_PARAM_NAME}.  If this <code>context-param</code> is
+ * not specified, or its value is "none", no <code>ClientWindow</code>
+ * instances will be generated, and the entire feature is effectively
+ * disabled for the entire application.</p>
+
+ * <p>Other modes</p>
+
+ * <p>To accomadate the widest possible range of implementation choices
+ * to support this feature, explicit names for modes other than "none"
+ * and "url" are not specified.  However, for all values of {@link
+ * #CLIENT_WINDOW_MODE_PARAM_NAME}, the lifetime of a
+ * <code>ClientWindow</code> starts on the first request made by a
+ * particular client window (or tab, or pop-up, etc) to the JSF runtime
+ * and persists as long as that window remains open or the session
+ * expires, whichever comes first.  A client window is always associated
+ * with exactly one <code>UIViewRoot</code> instance at a time, but may
+ * display many different <code>UIViewRoot</code>s during its
+ * lifetime.</p>
+
+ * <p>The <code>ClientWindow</code> instance is associated with the
+ * incoming request during the {@link Lifecycle#attachWindow} method.
+ * This method will cause a new instance of <code>ClientWindow</code> to
+ * be created, assigned an id, and passed to {@link
+ * javax.faces.context.ExternalContext#setClientWindow}.</p>
+
+ * <p>During state saving, regardless of the window id mode, or state
+ * saving mode, for ajax and non-ajax requests, a hidden field must be
+ * written whose name, id and value are given as specified in {@link
+ * javax.faces.render.ResponseStateManager#CLIENT_WINDOW_PARAM}. </p>
+
+ * <p>In addition to the hidden field already described.  The runtime
+ * must ensure that any component that renders a hyperlink that causes
+ * the user agent to send a GET request to the Faces server when it is
+ * clicked has a query parameter with a name and value specified in
+ * {@link ResponseStateManager#CLIENT_WINDOW_URL_PARAM}.  This
+ * requirement is met by several of the "encode" methods on {@link
+ * javax.faces.context.ExternalContext}. See {@link
+ * javax.faces.context.ExternalContext#encodeActionURL(java.lang.String)
+ * } for details.</p>
+
+ * </ul>
+ 
+ * </div>
+ * 
+ * @since 2.2
+ * 
+ */
+
+public abstract class ClientWindow {
+    
+    /**
+     * <p class="changed_added_2_2">The context-param that controls the
+     * operation of the <code>ClientWindow</code> feature.  The runtime
+     * must support the values "none" and "url", without the quotes, but
+     * other values are possible.  If not specified, or the value is not
+     * understood by the implementation, "none" is assumed.</p>
+     *
+     * @since 2.2
+     */
+    public static final String CLIENT_WINDOW_MODE_PARAM_NAME =
+          "javax.faces.CLIENT_WINDOW_MODE";
+    
+    
+    /**
+     * <p class="changed_added_2_2">This method will be called whenever a URL
+     * is generated by the runtime where client window related parameters need
+     * to be inserted into the URL.  This guarantees custom {@code ClientWindow} implementations
+     * that they will have the opportunity to insert any additional client window specific 
+     * information in any case where a URL is generated, such as the rendering
+     * of hyperlinks.  The returned map must be immutable.  The default implementation of this method returns
+     * the empty map.</p>
+     * 
+     * 
+     * @since 2.2
+     * @param context the {@code FacesContext} for this request.
+     * @return {@code null} or a map of parameters to insert into the URL query string.
+     */
+    
+    public abstract Map<String, String> getQueryURLParameters(FacesContext context);
+
+    /**
+     * <p class="changed_added_2_2">Return a String value that uniquely 
+     * identifies this <code>ClientWindow</code>
+     * within the scope of the current session.  See {@link #decode} for the
+     * specification of how to derive this value.</p>
+     * 
+     * @since 2.2
+     */
+    
+    public abstract String getId();
+    
+    /**
+     * <p class="changed_added_2_2">The implementation is responsible
+     * for examining the incoming request and extracting the value that
+     * must be returned from the {@link #getId} method.  If {@link
+     * #CLIENT_WINDOW_MODE_PARAM_NAME} is "none" this method must not be
+     * invoked.  If {@link #CLIENT_WINDOW_MODE_PARAM_NAME} is "url" the
+     * implementation must first look for a request parameter under the
+     * name given by the value of {@link
+     * javax.faces.render.ResponseStateManager#CLIENT_WINDOW_PARAM}.  If
+     * no value is found, look for a request parameter under the name
+     * given by the value of {@link
+     * javax.faces.render.ResponseStateManager#CLIENT_WINDOW_URL_PARAM}.
+     * If no value is found, fabricate an id that uniquely identifies
+     * this <code>ClientWindow</code> within the scope of the current
+     * session.  This value must be made available to return from the
+     * {@link #getId} method.  The value must be suitable for inclusion
+     * as a hidden field or query parameter.  If a value is found,
+     * decrypt it using the key from the session and make it available
+     * for return from {@link #getId}.</p>
+     * 
+     * @param context the {@link FacesContext} for this request.
+     * 
+     * @since 2.2
+     */
+    
+    public abstract void decode(FacesContext context);
+    
+    private static final String PER_USE_CLIENT_WINDOW_URL_QUERY_PARAMETER_DISABLED_KEY = 
+            "javax.faces.lifecycle.ClientWindowRenderModeEnablement";
+    
+    /**
+     * <p class="changed_added_2_2">Components that permit per-use disabling
+     * of the appending of the ClientWindow in generated URLs must call this method
+     * first before rendering those URLs.  The caller must call {@link #enableClientWindowRenderMode(javax.faces.context.FacesContext)}
+     * from a <code>finally</code> block after rendering the URL.  If 
+     * {@link #CLIENT_WINDOW_MODE_PARAM_NAME} is "url" without the quotes, all generated
+     * URLs that cause a GET request must append the ClientWindow by default.
+     * This is specified as a static method because callsites need to access it
+     * without having access to an actual {@code ClientWindow} instance.</p>
+     * 
+     * @param context the {@link FacesContext} for this request.
+     * 
+     * @since 2.2
+     */
+    
+    public void disableClientWindowRenderMode(FacesContext context) {
+        Map<Object, Object> attrMap = context.getAttributes();
+        attrMap.put(PER_USE_CLIENT_WINDOW_URL_QUERY_PARAMETER_DISABLED_KEY, Boolean.TRUE);
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Components that permit per-use disabling
+     * of the appending of the ClientWindow in generated URLs must call this method
+     * first after rendering those URLs.  If 
+     * {@link #CLIENT_WINDOW_MODE_PARAM_NAME} is "url" without the quotes, all generated
+     * URLs that cause a GET request must append the ClientWindow by default.
+     * This is specified as a static method because callsites need to access it
+     * without having access to an actual {@code ClientWindow} instance.</p>
+     * 
+     * @param context the {@link FacesContext} for this request.
+     * 
+     * @since 2.2
+     */
+    
+    public void enableClientWindowRenderMode(FacesContext context) {
+        Map<Object, Object> attrMap = context.getAttributes();
+        attrMap.remove(PER_USE_CLIENT_WINDOW_URL_QUERY_PARAMETER_DISABLED_KEY);
+        
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Methods that append the ClientWindow to generated
+     * URLs must call this method to see if they are permitted to do so.  If 
+     * {@link #CLIENT_WINDOW_MODE_PARAM_NAME} is "url" without the quotes, all generated
+     * URLs that cause a GET request must append the ClientWindow by default.
+     * This is specified as a static method because callsites need to access it
+     * without having access to an actual {@code ClientWindow} instance.</p>
+     * 
+     * @param context the {@link FacesContext} for this request.
+     * 
+     * @since 2.2
+     */
+    
+    public boolean isClientWindowRenderModeEnabled(FacesContext context) {
+        boolean result = false;
+        Map<Object, Object> attrMap = context.getAttributes();
+        result = !attrMap.containsKey(PER_USE_CLIENT_WINDOW_URL_QUERY_PARAMETER_DISABLED_KEY);
+        return result;
+    }
+    
+}
diff --git a/javax/faces/lifecycle/ClientWindowFactory.java b/javax/faces/lifecycle/ClientWindowFactory.java
new file mode 100644
index 0000000..a49aa21
--- /dev/null
+++ b/javax/faces/lifecycle/ClientWindowFactory.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.lifecycle;
+
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2">Create {@link ClientWindow} instances based on 
+ * the incoming request.</p>
+ * 
+ * 
+ * @since 2.2
+ */
+public abstract class ClientWindowFactory implements FacesWrapper<ClientWindowFactory> {
+
+    
+    /**
+     * <p class="changed_added_2_2">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.2
+     */
+    
+    @Override
+    public ClientWindowFactory getWrapped() {
+        return null;
+    }
+    
+    /**
+     * <p class="changed_added_2_2">The implementation is responsible
+     * for creating the {@link ClientWindow} instance for this request.
+     * If {@link ClientWindow#CLIENT_WINDOW_MODE_PARAM_NAME}
+     * is "none" or unspecified, this method must return {@code null}.  
+     * If {@link ClientWindow#CLIENT_WINDOW_MODE_PARAM_NAME}
+     * is "url" the implementation must return a <code>ClientWindow</code>
+     * instance that implements the url-mode semantics described in
+     * {@link ClientWindow}.
+     * 
+     * @param context the {@link FacesContext} for this request.
+     * @return the {@link ClientWindow} for this request, or {@code null} 
+     * 
+     * @since 2.2
+     */
+    
+    public abstract ClientWindow getClientWindow(FacesContext context);
+    
+}
diff --git a/javax/faces/lifecycle/ClientWindowWrapper.java b/javax/faces/lifecycle/ClientWindowWrapper.java
new file mode 100644
index 0000000..9109896
--- /dev/null
+++ b/javax/faces/lifecycle/ClientWindowWrapper.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.lifecycle;
+
+import java.util.Map;
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2">Wrapper for {@link ClientWindow}</p>
+ * 
+ * @since 2.2
+ */
+public abstract class ClientWindowWrapper extends ClientWindow implements FacesWrapper<ClientWindow> {
+
+    @Override
+    public abstract ClientWindow getWrapped();
+
+    @Override
+    public String getId() {
+        return getWrapped().getId();
+    }
+
+    @Override
+    public Map<String, String> getQueryURLParameters(FacesContext context) {
+        return getWrapped().getQueryURLParameters(context);
+    }
+
+    @Override
+    public void disableClientWindowRenderMode(FacesContext context) {
+        getWrapped().disableClientWindowRenderMode(context);
+    }
+
+    @Override
+    public void enableClientWindowRenderMode(FacesContext context) {
+        getWrapped().enableClientWindowRenderMode(context);
+    }
+
+    @Override
+    public boolean isClientWindowRenderModeEnabled(FacesContext context) {
+        return getWrapped().isClientWindowRenderModeEnabled(context);
+    }
+    
+    @Override
+    public void decode(FacesContext context) {
+        getWrapped().decode(context);
+    }
+
+    
+}
diff --git a/javax/faces/lifecycle/Lifecycle.java b/javax/faces/lifecycle/Lifecycle.java
new file mode 100644
index 0000000..2f3954d
--- /dev/null
+++ b/javax/faces/lifecycle/Lifecycle.java
@@ -0,0 +1,161 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.lifecycle;
+
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseListener;
+
+
+/**
+ * <p><strong class="changed_modified_2_2">Lifecycle</strong> manages the
+ * processing of the entire lifecycle of a particular JavaServer Faces
+ * request.  It is responsible for executing all of the phases that have
+ * been defined by the JavaServer Faces Specification, in the specified
+ * order, unless otherwise directed by activities that occurred during
+ * the execution of each phase.</p>
+ *
+ * <p>An instance of <code>Lifecycle</code> is created by calling the
+ * <code>getLifecycle()</code> method of {@link LifecycleFactory}, for
+ * a specified lifecycle identifier.  Because this instance is
+ * shared across multiple simultaneous requests, it must be implemented
+ * in a thread-safe manner.</p>
+ */
+
+public abstract class Lifecycle {
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Register a new {@link PhaseListener} instance that is interested in
+     * being notified before and after the processing for standard phases of
+     * the request processing lifecycle.</p>
+     *
+     * @param listener The {@link PhaseListener} to be registered
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public abstract void addPhaseListener(PhaseListener listener);
+
+
+    /**
+     * <p>Execute all of the phases of the request processing lifecycle,
+     * up to but not including the <em>Render Response</em> phase,
+     * as described in the JavaServer Faces Specification, in the specified
+     * order.  The processing flow can be affected (by the application,
+     * by components, or by event listeners) by calls to the
+     * <code>renderResponse()</code> or <code>responseComplete()</code>
+     * methods of the {@link FacesContext} instance associated with
+     * the current request.</p>
+     *
+     * @param context FacesContext for the request to be processed
+     *
+     * @throws FacesException if thrown during the execution of the
+     *  request processing lifecycle
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void execute(FacesContext context) throws FacesException;
+    
+    
+    /**
+     * <p class="changed_added_2_2">Create or restore the {@link
+     * ClientWindow} to be used to display the {@link
+     * javax.faces.component.UIViewRoot} for this run through the
+     * lifecycle.  See the class documentation for {@link ClientWindow}
+     * for an overview of the feature.
+     *
+     * If {@link javax.faces.context.ExternalContext#getClientWindow()} returns
+     * null, create a new instance of <code>ClientWindow</code> using the
+     * {@link ClientWindowFactory}.  If the result is non-null, call
+     * {@link ClientWindow#decode(javax.faces.context.FacesContext)} on it. 
+     * Store the new <code>ClientWindow</code> by calling
+     * {@link javax.faces.context.ExternalContext#setClientWindow(javax.faces.lifecycle.ClientWindow)}.</p>
+     * 
+     * 
+     * @since 2.2
+     */
+    
+    public void attachWindow(FacesContext context) {
+    }
+
+
+    /**
+     * <p>Return the set of registered {@link PhaseListener}s for this
+     * {@link Lifecycle} instance.  If there are no registered listeners,
+     * a zero-length array is returned.</p>
+     */
+    public abstract PhaseListener[] getPhaseListeners();
+
+
+    /**
+     * <p>Deregister an existing {@link PhaseListener} instance that is no
+     * longer interested in being notified before and after the processing
+     * for standard phases of the request processing lifecycle.  If no such
+     * listener instance has been registered, no action is taken.</p>
+     *
+     * @param listener The {@link PhaseListener} to be deregistered
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public abstract void removePhaseListener(PhaseListener listener);
+
+
+    /**
+     * <p>Execute the <em>Render Response</em> phase of the request
+     * processing lifecycle, unless the <code>responseComplete()</code>
+     * method has been called on the {@link FacesContext} instance
+     * associated with the current request.</p>
+     *
+     * @param context FacesContext for the request being processed
+     *
+     * @throws FacesException if an exception is thrown during the execution
+     *  of the request processing lifecycle
+     * @throws NullPointerException if <code>context</code>
+     *  is <code>null</code>
+     */
+    public abstract void render(FacesContext context) throws FacesException;
+
+
+}
diff --git a/javax/faces/lifecycle/LifecycleFactory.java b/javax/faces/lifecycle/LifecycleFactory.java
new file mode 100644
index 0000000..72af4b4
--- /dev/null
+++ b/javax/faces/lifecycle/LifecycleFactory.java
@@ -0,0 +1,144 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.lifecycle;
+
+import java.util.Iterator;
+import javax.faces.FacesWrapper;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">LifecycleFactory</strong> is
+ * a factory object that creates (if needed) and returns {@link
+ * Lifecycle} instances.  Implementations of JavaServer Faces must
+ * provide at least a default implementation of {@link Lifecycle}.
+ * Advanced implementations (or external third party libraries) MAY
+ * provide additional {@link Lifecycle} implementations (keyed by
+ * lifecycle identifiers) for performing different types of request
+ * processing on a per-request basis.</p>
+ *
+ * <p>There must be one <code>LifecycleFactory</code> instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   LifecycleFactory factory = (LifecycleFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+ * </pre>
+ */
+
+public abstract class LifecycleFactory implements FacesWrapper<LifecycleFactory> {
+
+    public LifecycleFactory() {
+    }
+    
+    
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+
+    public LifecycleFactory getWrapped() {
+        return null;
+    }
+    
+
+
+    /**
+     * <p>The lifecycle identifier for the default {@link Lifecycle} instance
+     * for this JavaServer Faces implementation.</p>
+     */
+    public static final String DEFAULT_LIFECYCLE = "DEFAULT";
+
+
+    /**
+     * <p>Register a new {@link Lifecycle} instance, associated with
+     * the specified <code>lifecycleId</code>, to be supported by this
+     * <code>LifecycleFactory</code>.  This method may be called at
+     * any time, and makes the corresponding {@link Lifecycle} instance
+     * available throughout the remaining lifetime of this web application.
+     * </p>
+     *
+     * @param lifecycleId Identifier of the new {@link Lifecycle}
+     * @param lifecycle {@link Lifecycle} instance that we are registering
+     *
+     * @throws IllegalArgumentException if a {@link Lifecycle} with the
+     *  specified <code>lifecycleId</code> has already been registered
+     * @throws NullPointerException if <code>lifecycleId</code>
+     *  or <code>lifecycle</code> is <code>null</code>
+     */
+    public abstract void addLifecycle(String lifecycleId,
+                                      Lifecycle lifecycle);
+
+
+    /**
+     * <p>Create (if needed) and return a {@link Lifecycle} instance
+     * for the specified lifecycle identifier.  The set of available
+     * lifecycle identifiers is available via the
+     * <code>getLifecycleIds()</code> method.</p>
+     *
+     * <p>Each call to <code>getLifecycle()</code> for the same
+     * <code>lifecycleId</code>, from within the same web application,
+     * must return the same {@link Lifecycle} instance.</p>
+     *
+     * @param lifecycleId Lifecycle identifier of the requested
+     *  {@link Lifecycle} instance
+     *
+     * @throws IllegalArgumentException if no {@link Lifecycle} instance
+     *  can be returned for the specified identifier
+     * @throws NullPointerException if <code>lifecycleId</code>
+     *  is <code>null</code>
+     */
+    public abstract Lifecycle getLifecycle(String lifecycleId);
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the set of lifecycle
+     * identifiers supported by this factory.  This set must include
+     * the value specified by <code>LifecycleFactory.DEFAULT_LIFECYCLE</code>.
+     * </p>
+     */
+    public abstract Iterator<String> getLifecycleIds();
+
+
+}
diff --git a/javax/faces/lifecycle/LifecycleWrapper.java b/javax/faces/lifecycle/LifecycleWrapper.java
new file mode 100644
index 0000000..dd9b446
--- /dev/null
+++ b/javax/faces/lifecycle/LifecycleWrapper.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.lifecycle;
+
+import javax.faces.FacesException;
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseListener;
+
+/**
+ * <p class="changed_added_2_2">Provides a simple implementation of
+ * {@link Lifecycle} that can be subclassed by developers wishing to
+ * provide specialized behavior to an existing {@link Lifecycle}
+ * instance.  The default implementation of all methods is to call
+ * through to the wrapped {@link Lifecycle}.</p>
+
+ * <div class="changed_added_2_2"> 
+
+ * <p>Usage: extend this class and override getWrapped() to return the
+ * instance we are wrapping.</p>
+
+ * </div>
+
+ * @since 2.2
+ */
+
+public abstract class LifecycleWrapper extends Lifecycle implements FacesWrapper<Lifecycle> {
+
+    @Override
+    public abstract Lifecycle getWrapped();
+
+    @Override
+    public void addPhaseListener(PhaseListener listener) {
+        getWrapped().addPhaseListener(listener);
+    }
+
+    @Override
+    public void execute(FacesContext context) throws FacesException {
+        getWrapped().execute(context);
+    }
+
+    @Override
+    public PhaseListener[] getPhaseListeners() {
+        return getWrapped().getPhaseListeners();
+    }
+
+    @Override
+    public void removePhaseListener(PhaseListener listener) {
+        getWrapped().removePhaseListener(listener);
+    }
+
+    @Override
+    public void render(FacesContext context) throws FacesException {
+        getWrapped().render(context);
+    }
+
+    @Override
+    public void attachWindow(FacesContext context) {
+        getWrapped().attachWindow(context);
+    }
+}
diff --git a/javax/faces/lifecycle/package.html b/javax/faces/lifecycle/package.html
new file mode 100644
index 0000000..92bed85
--- /dev/null
+++ b/javax/faces/lifecycle/package.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.lifecycle"</title>
+</head>
+<body bgcolor="white">
+    <p><span class="changed_modified_2_0 changed_modified_2_2">Classes</span> and interfaces defining lifecycle management for the
+JavaServer Faces implementation.  The main class in this package is
+{@link javax.faces.lifecycle.Lifecycle}.  <code>Lifecycle</code> is the
+gateway to executing the request processing lifecycle.
+</p>
+</body>
+</html>
diff --git a/javax/faces/model/ArrayDataModel.java b/javax/faces/model/ArrayDataModel.java
new file mode 100644
index 0000000..936309f
--- /dev/null
+++ b/javax/faces/model/ArrayDataModel.java
@@ -0,0 +1,222 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+/**
+ * <p><strong>ArrayDataModel</strong> is a convenience implementation of
+ * {@link DataModel} that wraps an array of Java objects.</p>
+ */
+
+public class ArrayDataModel<E> extends DataModel<E> {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new {@link ArrayDataModel} with no specified
+     * wrapped data.</p>
+     */
+    public ArrayDataModel() {
+
+        this(null);
+
+    }
+
+
+    /**
+     * <p>Construct a new {@link ArrayDataModel} wrapping the specified
+     * array.</p>
+     *
+     * @param array Array to be wrapped (if any)
+     */
+    public ArrayDataModel(E[] array) {
+
+        super();
+        setWrappedData(array);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    // The array we are wrapping
+    private Object array[];
+
+
+    // The current row index (zero relative)
+    private int index = -1;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return <code>true</code> if there is <code>wrappedData</code>
+     * available, and the current value of <code>rowIndex</code> is greater
+     * than or equal to zero, and less than the length of the array.  Otherwise,
+     * return <code>false</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row availability
+     */
+    public boolean isRowAvailable() {
+
+        if (array == null) {
+	    return (false);
+        } else if ((index >= 0) && (index < array.length)) {
+            return (true);
+        } else {
+            return (false);
+        }
+
+    }
+
+
+    /**
+     * <p>If there is <code>wrappedData</code> available, return the
+     * length of the array.  If no <code>wrappedData</code> is available,
+     * return -1.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row count
+     */
+    public int getRowCount() {
+
+        if (array == null) {
+	    return (-1);
+        }
+        return (array.length);
+
+    }
+
+
+    /**
+     * <p>If row data is available, return the array element at the index
+     * specified by <code>rowIndex</code>.  If no wrapped data is available,
+     * return <code>null</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available
+     *  at the currently specified row index
+     */
+    @SuppressWarnings({"unchecked"})
+    public E getRowData() {
+
+        if (array == null) {
+	    return (null);
+        } else if (!isRowAvailable()) {
+            throw new NoRowAvailableException();
+        } else {
+            return ((E) array[index]);
+        }
+
+    }
+
+
+    /**
+     * @throws javax.faces.FacesException {@inheritDoc}     
+     */ 
+    public int getRowIndex() {
+
+        return (index);
+
+    }
+
+
+    /**
+     * @throws javax.faces.FacesException {@inheritDoc}
+     * @throws IllegalArgumentException {@inheritDoc}
+     */ 
+    public void setRowIndex(int rowIndex) {
+
+        if (rowIndex < -1) {
+            throw new IllegalArgumentException();
+        }
+        int old = index;
+        index = rowIndex;
+	if (array == null) {
+	    return;
+	}
+	DataModelListener [] listeners = getDataModelListeners();
+        if ((old != index) && (listeners != null)) {
+            Object rowData = null;
+            if (isRowAvailable()) {
+                rowData = getRowData();
+            }
+            DataModelEvent event =
+                new DataModelEvent(this, index, rowData);
+            int n = listeners.length;
+            for (int i = 0; i < n; i++) {
+		if (null != listeners[i]) {
+		    listeners[i].rowSelected(event);
+		}
+            }
+        }
+
+    }
+
+
+    public Object getWrappedData() {
+
+        return (this.array);
+
+    }
+
+
+    /**
+     * @throws ClassCastException if <code>data</code> is
+     *  non-<code>null</code> and is not an array of Java objects.
+     */
+    public void setWrappedData(Object data) {
+
+        if (data == null) {
+            array = null;
+            setRowIndex(-1);
+        } else {
+            array = (Object[]) data;
+            index = -1;
+            setRowIndex(0);
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/model/CollectionDataModel.java b/javax/faces/model/CollectionDataModel.java
new file mode 100644
index 0000000..594f7da
--- /dev/null
+++ b/javax/faces/model/CollectionDataModel.java
@@ -0,0 +1,222 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+import java.util.Collection;
+
+
+/**
+ * <p class="changed_added_2_2"><strong>CollectionDataModel</strong> is a convenience 
+ * implementation of {@link DataModel} that wraps an <code>Collection</code> of 
+ * Java objects.</p>
+ */
+
+public class CollectionDataModel<E> extends DataModel<E> {
+    
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new {@link CollectionDataModel} with no specified
+     * wrapped data.</p>
+     */
+    public CollectionDataModel() {
+
+        this(null);
+
+    }
+
+
+    /**
+     * <p>Construct a new {@link CollectionDataModel} wrapping the specified
+     * list.</p>
+     *
+     * @param collection Collection to be wrapped.
+     */
+    public CollectionDataModel(Collection<E> collection) {
+
+        super();
+        setWrappedData(collection);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+    
+    // The current row index (zero relative)
+    private int index = -1;
+    
+    private Collection<E> inner;
+    private E[] arrayFromInner;
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return <code>true</code> if there is <code>wrappedData</code>
+     * available, and the current value of <code>rowIndex</code> is greater
+     * than or equal to zero, and less than the size of the list.  Otherwise,
+     * return <code>false</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row availability
+     */
+    public boolean isRowAvailable() {
+
+        if (arrayFromInner == null) {
+	    return (false);
+        } else if ((index >= 0) && (index < arrayFromInner.length)) {
+            return (true);
+        } else {
+            return (false);
+        }
+    }
+
+
+    /**
+     * <p>If there is <code>wrappedData</code> available, return the
+     * length of the list.  If no <code>wrappedData</code> is available,
+     * return -1.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row count
+     */
+    public int getRowCount() {
+
+        if (arrayFromInner == null) {
+	    return (-1);
+        }
+        return (arrayFromInner.length);
+
+    }
+
+
+    /**
+     * <p>If row data is available, return the array element at the index
+     * specified by <code>rowIndex</code>.  If no wrapped data is available,
+     * return <code>null</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available
+     *  at the currently specified row index
+     */
+    public E getRowData() {
+        
+        if (arrayFromInner == null) {
+	    return (null);
+        } else if (!isRowAvailable()) {
+            throw new NoRowAvailableException();
+        } else {
+            return (arrayFromInner[index]);
+        }
+        
+    }
+    
+    /**
+     * @throws javax.faces.FacesException {@inheritDoc}     
+     */ 
+    public int getRowIndex() {
+
+        return (index);
+
+    }
+
+
+    /**
+     * @throws javax.faces.FacesException {@inheritDoc}
+     * @throws IllegalArgumentException {@inheritDoc}
+     */ 
+    public void setRowIndex(int rowIndex) {
+
+        if (rowIndex < -1) {
+            throw new IllegalArgumentException();
+        }
+        int old = index;
+        index = rowIndex;
+	if (arrayFromInner == null) {
+	    return;
+	}
+	DataModelListener [] listeners = getDataModelListeners();
+        if ((old != index) && (listeners != null)) {
+            Object rowData = null;
+            if (isRowAvailable()) {
+                rowData = getRowData();
+            }
+            DataModelEvent event =
+                new DataModelEvent(this, index, rowData);
+            int n = listeners.length;
+            for (int i = 0; i < n; i++) {
+		if (null != listeners[i]) {
+		    listeners[i].rowSelected(event);
+		}
+            }
+        }
+
+        
+    }
+
+
+    public Object getWrappedData() {
+
+        return (this.inner);
+
+    }
+
+
+    /**
+     * Set the wrapped data.
+     * 
+     * @param data the wrapped data.
+     * @throws ClassCastException if <code>data</code> is
+     *  non-<code>null</code> and is not a <code>Collection</code>
+     */
+    public void setWrappedData(Object data) {
+        if (data == null) {
+            inner = null;
+            arrayFromInner = null;
+            setRowIndex(-1);
+        } else {
+            inner = (Collection<E>) data;            
+            arrayFromInner = (E[]) new Object[inner.size()];
+            inner.toArray(arrayFromInner);
+            setRowIndex(0);
+        }
+    }
+}
diff --git a/javax/faces/model/DataModel.java b/javax/faces/model/DataModel.java
new file mode 100644
index 0000000..dc39484
--- /dev/null
+++ b/javax/faces/model/DataModel.java
@@ -0,0 +1,335 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import javax.faces.component.UIData;
+
+
+/**
+ * <p><span class="changed_modified_2_0"><strong>DataModel</strong></span>
+ * is an abstraction around arbitrary data
+ * binding technologies that can be used to adapt a variety of data sources
+ * for use by JavaServer Faces components that support per-row processing
+ * for their child components (such as {@link UIData}.</p>
+ *
+ * <p>The data collection underlying a {@link DataModel} instance is
+ * modeled as a collection of row objects that can be accessed by
+ * a zero-relative cursor (row index).  The APIs provide mechanisms to
+ * position to a specified zero-relative row index, and to retrieve an
+ * object that represents the data that corresponds to the current
+ * row index.</p>
+ *
+ * <p>A concrete {@link DataModel} instance is attached to a particular
+ * collection of underlying data by calling the <code>setWrappedData()</code>
+ * method.  It can be detached from that underlying data collection by
+ * passing a <code>null</code> parameter to this method.</p>
+ *
+ * <p>Concrete {@link DataModel} implementations must provide a public
+ * zero-arguments constructor that calls <code>setWrappedData(null)</code>.
+ * A convenience constructor that takes a wrapped object of the appropriate
+ * type (and passes it on via a call to <code>setWrappedData()</code>,
+ * should also be provided.</p>
+ *
+ * <p>Event listeners may be registered to receive notifications
+ * of when a new row index is selected.</p>
+ */
+
+public abstract class DataModel<E> implements Iterable<E> {
+
+
+    private static final DataModelListener[] EMPTY_DATA_MODEL_LISTENER =
+         new DataModelListener[0];
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return a flag indicating whether there is <code>rowData</code>
+     * available at the current <code>rowIndex</code>.  If no
+     * <code>wrappedData</code> is available, return <code>false</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row availability
+     */
+    public abstract boolean isRowAvailable();
+
+
+    /**
+     * <p>Return the number of rows of data objects represented by this
+     * {@link DataModel}.  If the number of rows is unknown, or no
+     * <code>wrappedData</code> is available, return -1.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row count
+     */
+    public abstract int getRowCount();
+
+
+    /**
+     * <p>Return an object representing the data for the currenty selected
+     * row index.  If no <code>wrappedData</code> is available, return
+     * <code>null</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available
+     *  at the currently specified row index
+     */
+    public abstract E getRowData();
+
+
+    /**
+     * <p>Return the zero-relative index of the currently selected row.  If
+     * we are not currently positioned on a row, or no <code>wrappedData</code>
+     * is available, return -1.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row index
+     */
+    public abstract int getRowIndex();
+
+
+    /**
+     * <p>Set the zero-relative index of the currently selected row, or -1
+     * to indicate that we are not positioned on a row.  It is
+     * possible to set the row index at a value for which the underlying data
+     * collection does not contain any row data.  Therefore, callers may
+     * use the <code>isRowAvailable()</code> method to detect whether row data
+     * will be available for use by the <code>getRowData()</code> method.</p>
+     *
+     * <p>If there is no <code>wrappedData</code> available when this method
+     * is called, the specified <code>rowIndex</code> is stored (and may be
+     * retrieved by a subsequent call to <code>getRowData()</code>), but no
+     * event is sent.  Otherwise, if the currently selected row index is
+     * changed by this call, a {@link DataModelEvent} will be sent to the
+     * <code>rowSelected()</code> method of all registered
+     * {@link DataModelListener}s.</p>
+     *
+     * @param rowIndex The new zero-relative index (must be non-negative)
+     *
+     * @throws javax.faces.FacesException if an error occurs setting the row index
+     * @throws IllegalArgumentException if <code>rowIndex</code>
+     *  is less than -1
+     */
+    public abstract void setRowIndex(int rowIndex);
+
+
+    /**
+     * <p>Return the object representing the data wrapped by this
+     * {@link DataModel}, if any.</p>
+     */
+    public abstract Object getWrappedData();
+
+
+    /**
+     * <p>Set the object representing the data collection wrapped by this
+     * {@link DataModel}.  If the specified <code>data</code> is
+     * <code>null</code>, detach this {@link DataModel} from any previously
+     * wrapped data collection instead.</p>
+     *
+     * <p>If <code>data</code> is non-<code>null</code>, the currently selected
+     * row index must be set to zero, and a {@link DataModelEvent} must be sent
+     * to the <code>rowSelected()</code> method of all registered
+     * {@link DataModelListener}s indicating that this row is now selected.</p>
+     *
+     * @param data Data collection to be wrapped, or <code>null</code> to
+     *  detach from any previous data collection
+     *
+     * @throws ClassCastException if <code>data</code> is not of the
+     *  appropriate type for this {@link DataModel} implementation
+     */
+    public abstract void setWrappedData(Object data);
+
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    /**
+     * <p>The list of registered {@link DataModelListener}s for this
+     * {@link DataModel}.  This variable will be <code>null</code> unless
+     * there is at least one registered listener.</p>
+     */
+    private List<DataModelListener> listeners = null;
+
+
+    // --------------------------------------------- Event Listener Registration
+
+
+    /**
+     * <p>Add a new {@link DataModelListener} to the set interested in
+     * notifications from this {@link DataModel}.</p>
+     *
+     * @param listener The new {@link DataModelListener} to be registered
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public void addDataModelListener(DataModelListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+        if (listeners == null) {
+            //noinspection CollectionWithoutInitialCapacity
+            listeners = new ArrayList<DataModelListener>();
+        }
+        listeners.add(listener);
+
+    }
+
+
+    /**
+     * <p>Return the set of {@link DataModelListener}s interested in
+     * notifications from this {@link DataModel}.  If there are no such
+     * listeners, an empty array is returned.</p>
+     */
+    public DataModelListener[] getDataModelListeners() {
+
+	if (listeners == null) {
+	    return EMPTY_DATA_MODEL_LISTENER;
+	} else {
+	    return listeners.toArray
+		    (new DataModelListener[listeners.size()]);
+	}
+
+    }
+
+
+    /**
+     * <p>Remove an existing {@link DataModelListener} from the set
+     * interested in notifications from this {@link DataModel}.</p>
+     *
+     * @param listener The old {@link DataModelListener} to be deregistered
+     *
+     * @throws NullPointerException if <code>listener</code>
+     *  is <code>null</code>
+     */
+    public void removeDataModelListener(DataModelListener listener) {
+
+        if (listener == null) {
+            throw new NullPointerException();
+        }
+        if (listeners != null) {
+            listeners.remove(listener);
+            if (listeners.isEmpty()) {
+                listeners = null;
+            }
+        }
+
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return a read-only <code>Iterator</code> over the
+     * row data for this model.</p>
+     * 
+     * @since 2.0
+     */
+    public Iterator<E> iterator() {
+
+        return new DataModelIterator<E>(this);
+        
+    }
+    
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    @SuppressWarnings({"unchecked"})
+    private static final class DataModelIterator<T> implements Iterator<T> {
+
+        private DataModel<T> model;
+        private int index;
+
+        
+        // -------------------------------------------------------- Constructors
+
+
+        DataModelIterator(DataModel<T> model) {
+
+            this.model = model;
+            this.model.setRowIndex(index);
+
+        }
+
+
+        // ----------------------------------------------- Methods from Iterator
+
+
+        /**
+         * @see java.util.Iterator#hasNext()
+         */
+        public boolean hasNext() {
+
+            return model.isRowAvailable();
+
+        }
+
+
+        /**
+         * @see java.util.Iterator#next()
+         */
+        public T next() {
+
+            if (!model.isRowAvailable()) {
+                throw new NoSuchElementException();
+            }
+            Object o = model.getRowData();
+            model.setRowIndex(++index);
+            return (T) o;
+
+        }
+
+
+        /**
+         * Unsupported.
+         * @see java.util.Iterator#remove()
+         */
+        public void remove() {
+
+            throw new UnsupportedOperationException();
+
+        }
+
+    } // END DataModelIterator
+
+}
diff --git a/javax/faces/model/DataModelEvent.java b/javax/faces/model/DataModelEvent.java
new file mode 100644
index 0000000..4c66061
--- /dev/null
+++ b/javax/faces/model/DataModelEvent.java
@@ -0,0 +1,121 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import java.util.EventObject;
+
+
+/**
+ * <p><strong>DataModelEvent</strong> represents an event of interest to
+ * registered listeners that occurred on the specified {@link DataModel}.</p>
+ */
+
+public class DataModelEvent extends EventObject {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct an event object that is associated with the specified
+     * row index and associated data.</p>
+     *
+     * @param model The {@link DataModel} on which this event occurred
+     * @param index The zero relative row index for which this event occurred,
+     *   or -1 for no specific row association
+     * @param data Representation of the data for the row specified by
+     *  <code>index</code>, or <code>null</code> for no particular row data
+     */
+    public DataModelEvent(DataModel model, int index, Object data) {
+
+	super(model);
+	this.index = index;
+	this.data = data;
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    private Object data = null;
+
+
+    private int index = 0;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return the {@link DataModel} that fired this event.</p>
+     */
+    public DataModel getDataModel() {
+
+	return ((DataModel) getSource());
+
+    }
+
+
+    /**
+     * <p>Return the object representing the data for the specified row index,
+     * or <code>null</code> for no associated row data.</p>
+     */
+    public Object getRowData() {
+
+	return (this.data);
+
+    }
+
+
+    /**
+     * <p>Return the row index for this event, or -1 for no specific row.</p>
+     */
+    public int getRowIndex() {
+
+	return (this.index);
+
+    }
+
+
+
+}
diff --git a/javax/faces/model/DataModelListener.java b/javax/faces/model/DataModelListener.java
new file mode 100644
index 0000000..3981b5f
--- /dev/null
+++ b/javax/faces/model/DataModelListener.java
@@ -0,0 +1,65 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import java.util.EventListener;
+
+
+/**
+ * <p><strong>DataModelListener</strong> represents an event listener that
+ * wishes to be notified of {@link DataModelEvent}s occurring on a
+ * particular {@link DataModel} instance.</p>
+ */
+
+public interface DataModelListener extends EventListener {
+
+
+    /**
+     * <p>Notification that a particular row index, with the associated
+     * row data, has been selected for processing.</p>
+     *
+     * @param event The {@link DataModelEvent} we are processing
+     */
+    public void rowSelected(DataModelEvent event);
+
+
+}
diff --git a/javax/faces/model/ListDataModel.java b/javax/faces/model/ListDataModel.java
new file mode 100644
index 0000000..3e34305
--- /dev/null
+++ b/javax/faces/model/ListDataModel.java
@@ -0,0 +1,225 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import java.util.List;
+
+
+/**
+ * <p><strong>ListDataModel</strong> is a convenience implementation of
+ * {@link DataModel} that wraps an <code>List</code> of Java objects.</p>
+ */
+
+public class ListDataModel<E> extends DataModel<E> {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new {@link ListDataModel} with no specified
+     * wrapped data.</p>
+     */
+    public ListDataModel() {
+
+        this(null);
+
+    }
+
+
+    /**
+     * <p>Construct a new {@link ListDataModel} wrapping the specified
+     * list.</p>
+     *
+     * @param list List to be wrapped (if any)
+     */
+    public ListDataModel(List<E> list) {
+
+        super();
+        setWrappedData(list);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    // The current row index (zero relative)
+    private int index = -1;
+
+
+    // The list we are wrapping
+    private List list;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return <code>true</code> if there is <code>wrappedData</code>
+     * available, and the current value of <code>rowIndex</code> is greater
+     * than or equal to zero, and less than the size of the list.  Otherwise,
+     * return <code>false</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row availability
+     */
+    public boolean isRowAvailable() {
+
+        if (list == null) {
+	    return (false);
+        } else if ((index >= 0) && (index < list.size())) {
+            return (true);
+        } else {
+            return (false);
+        }
+
+    }
+
+
+    /**
+     * <p>If there is <code>wrappedData</code> available, return the
+     * length of the list.  If no <code>wrappedData</code> is available,
+     * return -1.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row count
+     */
+    public int getRowCount() {
+
+        if (list == null) {
+	    return (-1);
+        }
+        return (list.size());
+
+    }
+
+
+    /**
+     * <p>If row data is available, return the array element at the index
+     * specified by <code>rowIndex</code>.  If no wrapped data is available,
+     * return <code>null</code>.</p>
+     *
+     * @throws javax.faces.FacesException if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available
+     *  at the currently specified row index
+     */
+    public E getRowData() {
+
+        if (list == null) {
+	    return (null);
+        } else if (!isRowAvailable()) {
+            throw new NoRowAvailableException();
+        } else {
+            return ((E) list.get(index));
+        }
+
+    }
+
+
+    /**
+     * @throws javax.faces.FacesException {@inheritDoc}     
+     */ 
+    public int getRowIndex() {
+
+        return (index);
+
+    }
+
+
+    /**
+     * @throws javax.faces.FacesException {@inheritDoc}
+     * @throws IllegalArgumentException {@inheritDoc}
+     */ 
+    public void setRowIndex(int rowIndex) {
+
+        if (rowIndex < -1) {
+            throw new IllegalArgumentException();
+        }
+        int old = index;
+        index = rowIndex;
+	if (list == null) {
+	    return;
+	}
+	DataModelListener [] listeners = getDataModelListeners();
+        if ((old != index) && (listeners != null)) {
+            Object rowData = null;
+            if (isRowAvailable()) {
+                rowData = getRowData();
+            }
+            DataModelEvent event =
+                new DataModelEvent(this, index, rowData);
+            int n = listeners.length;
+            for (int i = 0; i < n; i++) {
+		if (null != listeners[i]) {
+		    listeners[i].rowSelected(event);
+		}
+            }
+        }
+
+    }
+
+
+    public Object getWrappedData() {
+
+        return (this.list);
+
+    }
+
+
+    /**
+     * @throws ClassCastException if <code>data</code> is
+     *  non-<code>null</code> and is not a <code>List</code>
+     */
+    public void setWrappedData(Object data) {
+
+        if (data == null) {
+            list = null;
+            setRowIndex(-1);
+        } else {
+            list = (List) data;
+            index = -1;
+            setRowIndex(0);
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/model/NoRowAvailableException.java b/javax/faces/model/NoRowAvailableException.java
new file mode 100644
index 0000000..cdcbfb2
--- /dev/null
+++ b/javax/faces/model/NoRowAvailableException.java
@@ -0,0 +1,75 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+/**
+ * Custom exception to be thrown by the default <code>DataModel</code> implementations.
+ * This exception extends IllegalArgumentException and is package private so
+ * the TCK will continue to pass, but the exception type is more descriptive.
+ */
+class NoRowAvailableException extends IllegalArgumentException {
+
+    private static final long serialVersionUID = 3794135774633215459L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    public NoRowAvailableException() {
+        super();
+    }
+
+
+    public NoRowAvailableException(String s) {
+        super(s);
+    }
+
+
+    public NoRowAvailableException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+
+    public NoRowAvailableException(Throwable cause) {
+        super(cause);
+    }
+
+}
diff --git a/javax/faces/model/ResultDataModel.java b/javax/faces/model/ResultDataModel.java
new file mode 100644
index 0000000..b7b2672
--- /dev/null
+++ b/javax/faces/model/ResultDataModel.java
@@ -0,0 +1,244 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import java.util.SortedMap;
+import javax.servlet.jsp.jstl.sql.Result;
+
+
+/**
+ * <p><strong>ResultDataModel</strong> is a convenience implementation of
+ * {@link DataModel} that wraps a JSTL <code>Result</code> object, typically
+ * representing the results of executing an SQL query via JSTL tags.</p>
+ */
+
+public class ResultDataModel extends DataModel<SortedMap<String,Object>> {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new {@link ResultDataModel} with no specified
+     * wrapped data.</p>
+     */
+    public ResultDataModel() {
+
+        this(null);
+
+    }
+
+
+    /**
+     * <p>Construct a new {@link ResultDataModel} wrapping the specified
+     * <code>Result</code>.</p>
+     *
+     * @param result <code>Result</code> to be wrapped (if any)
+     */
+    public ResultDataModel(Result result) {
+
+        super();
+        setWrappedData(result);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    // The current row index (zero relative)
+    private int index = -1;
+
+
+    // The Result we are wrapping
+    private Result result = null;
+
+
+    // The individual rows of this Result, each represented as a Map
+    // with column names as keys and associated data values as values
+    private SortedMap rows[] = null;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return <code>true</code> if there is <code>wrappedData</code>
+     * available, and the current value of <code>rowIndex</code> is greater
+     * than or equal to zero, and less than the length of the array returned
+     * by calling <code>getRows()</code> on the underlying <code>Result</code>.
+     * Otherwise, return <code>false</code>.</p>
+     *
+     * @throws FacesException if an error occurs getting the row availability
+     */ 
+    public boolean isRowAvailable() {
+
+        if (result == null) {
+	    return (false);
+        } else if ((index >= 0) && (index < rows.length)) {
+            return (true);
+        } else {
+            return (false);
+        }
+
+    }
+
+
+    /**
+     * <p>If there is <code>wrappedData</code> available, return the
+     * length of the array returned by calling <code>getRows()</code>
+     * on the underlying <code>Result</code>.  If no <code>wrappedData</code>
+     * is available, return -1.</p>
+     *
+     * @throws FacesException if an error occurs getting the row count
+     */
+    public int getRowCount() {
+
+        if (result == null) {
+	    return (-1);
+        }
+        return (rows.length);
+
+    }
+
+
+    /**
+     * <p>If row data is available, return the <code>SortedMap</code> array
+     * element at the index specified by <code>rowIndex</code> of the
+     * array returned by calling <code>getRows()</code> on the underlying
+     * <code>Result</code>.  If no wrapped data is available,
+     * return <code>null</code>.</p>
+     *
+     * <p>Note that, if a non-<code>null</code> <code>Map</code> is returned
+     * by this method, it will contain the values of the columns for the
+     * current row, keyed by column name.  Column name comparisons must be
+     * performed in a case-insensitive manner.</p>
+     *
+     * @throws FacesException if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available
+     *  at the currently specified row index
+     */
+    public SortedMap<String,Object> getRowData() {
+
+        if (result == null) {
+	    return (null);
+        } else if (!isRowAvailable()) {
+            throw new NoRowAvailableException();
+        } else {
+            //noinspection unchecked
+            return ((SortedMap<String,Object>)rows[index]);
+        }
+
+    }
+
+
+    /**
+     * @throws FacesException {@inheritDoc}     
+     */ 
+    public int getRowIndex() {
+
+        return (index);
+
+    }
+
+
+    /**
+     * @throws FacesException {@inheritDoc}
+     * @throws IllegalArgumentException {@inheritDoc}
+     */ 
+    public void setRowIndex(int rowIndex) {
+
+        if (rowIndex < -1) {
+            throw new IllegalArgumentException();
+        }
+        int old = index;
+        index = rowIndex;
+	if (result == null) {
+	    return;
+	}
+	DataModelListener [] listeners = getDataModelListeners();
+        if ((old != index) && (listeners != null)) {
+            SortedMap<String,Object> rowData = null;
+            if (isRowAvailable()) {
+                rowData = getRowData();
+            }
+            DataModelEvent event =
+                new DataModelEvent(this, index, rowData);
+            int n = listeners.length;
+            for (int i = 0; i < n; i++) {
+		if (null != listeners[i]) {
+		    listeners[i].rowSelected(event);
+		}
+            }
+        }
+
+    }
+
+
+    public Object getWrappedData() {
+
+        return (this.result);
+
+    }
+
+
+    /**
+     * @throws ClassCastException if <code>data</code> is
+     *  non-<code>null</code> and is not a <code>Result</code>
+     */
+    public void setWrappedData(Object data) {
+
+        if (data == null) {
+            result = null;
+            rows = null;
+            setRowIndex(-1);
+        } else {
+            result = (Result) data;
+            rows = result.getRows();
+            index = -1;
+            setRowIndex(0);
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/model/ResultSetDataModel.java b/javax/faces/model/ResultSetDataModel.java
new file mode 100644
index 0000000..db4d063
--- /dev/null
+++ b/javax/faces/model/ResultSetDataModel.java
@@ -0,0 +1,817 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.AbstractCollection;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.NotSerializableException;
+import java.io.ObjectOutputStream;
+
+import javax.faces.FacesException;
+
+
+/**
+ * <p><strong>ResultSetDataModel</strong> is a convenience implementation of
+ * {@link DataModel} that wraps a <code>ResultSet</code> of Java objects.
+ * Note that the specified <code>ResultSet</code> <strong>MUST</strong>
+ * be scrollable.  In addition, if input components (that will be updating
+ * model values) reference this object in value binding expressions, the
+ * specified <code>ResultSet</code> <strong>MUST</strong> be updatable.</p>
+ */
+
+public class ResultSetDataModel extends DataModel<Map<String,Object>> {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new {@link ResultSetDataModel} with no specified
+     * wrapped data.</p>
+     */
+    public ResultSetDataModel() {
+
+        this(null);
+
+    }
+
+
+    /**
+     * <p>Construct a new {@link ResultSetDataModel} wrapping the specified
+     * <code>ResultSet</code>.</p>
+     *
+     * @param resultSet <code>ResultSet</code> to be wrapped (if any)
+     */
+    public ResultSetDataModel(ResultSet resultSet) {
+
+        super();
+        setWrappedData(resultSet);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    // The current row index (zero relative)
+    private int index = -1;
+
+
+    // The metadata for the ResultSet we are wrapping (lazily instantiated)
+    private ResultSetMetaData metadata = null;
+
+
+    // The ResultSet we are wrapping
+    private ResultSet resultSet = null;
+
+
+    // Has the row at the current index been updated?
+    private boolean updated = false;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return <code>true</code> if there is <code>wrappedData</code>
+     * available, and the result of calling <code>absolute()</code> on the
+     * underlying <code>ResultSet</code>, passing the current value of
+     * <code>rowIndex</code> plus one (to account for the fact that
+     * <code>ResultSet</code> uses one-relative indexing), returns
+     * <code>true</code>.  Otherwise, return <code>false</code>.</p>
+     *
+     * @throws FacesException if an error occurs getting the row availability
+     */ 
+    public boolean isRowAvailable() {
+
+        if (resultSet == null) {
+	    return (false);
+        } else if (index < 0) {
+            return (false);
+        }
+        try {
+            if (resultSet.absolute(index + 1)) {
+                return (true);
+            } else {
+                return (false);
+            }
+        } catch (SQLException e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+
+    /**
+     * <p>Return -1, since <code>ResultSet</code> does not provide a
+     * standard way to determine the number of available rows without
+     * scrolling through the entire <code>ResultSet</code>, and this can
+     * be very expensive if the number of rows is large.</p>
+     *
+     * @throws FacesException if an error occurs getting the row count
+     */
+    public int getRowCount() {
+
+	return (-1);
+
+    }
+
+
+    /**
+     * <p>If row data is available, return a <code>Map</code> representing
+     * the values of the columns for the row specified by <code>rowIndex</code>,
+     * keyed by the corresponding column names.  If no wrapped data is
+     * available, return <code>null</code>.</p>
+     *
+     * <p>If a non-<code>null</code> <code>Map</code> is returned, its behavior
+     * must correspond to the contract for a mutable <code>Map</code> as
+     * described in the JavaDocs for <code>AbstractMap</code>, with the
+     * following exceptions and specialized behavior:</p>
+     * <ul>
+
+     * <li>The <code>Map</code>, and any supporting objects it returns,
+     *     must perform all column name comparisons in a
+     *     case-insensitive manner.  This case-insensitivity must be
+     *     implemented using a case-insensitive <code>Comparator</code>,
+     *     such as
+     *     <code>String.CASE_INSENSITIVE_ORDER</code>.</li>
+
+     * <li>The following methods must throw
+     *     <code>UnsupportedOperationException</code>:  <code>clear()</code>,
+     *     <code>remove()</code>.</li>
+     * <li>The <code>entrySet()</code> method must return a <code>Set</code>
+     *     that has the following behavior:
+     *     <ul>
+     *     <li>Throw <code>UnsupportedOperationException</code> for any attempt
+     *         to add or remove entries from the <code>Set</code>, either
+     *         directly or indirectly through an <code>Iterator</code>
+     *         returned by the <code>Set</code>.</li>
+     *     <li>Updates to the <code>value</code> of an entry in this
+     *         <code>set</code> must write through to the corresponding
+     *         column value in the underlying <code>ResultSet</code>.</li>
+     *     </ul></li>
+     * <li>The <code>keySet()</code> method must return a <code>Set</code>
+     *     that throws <code>UnsupportedOperationException</code> on any
+     *     attempt to add or remove keys, either directly or through an
+     *     <code>Iterator</code> returned by the <code>Set</code>.</li>
+     * <li>The <code>put()</code> method must throw
+     *     <code>IllegalArgumentException</code> if a key value for which
+     *     <code>containsKey()</code> returns <code>false</code> is
+     *     specified.  However, if a key already present in the <code>Map</code>
+     *     is specified, the specified value must write through to the
+     *     corresponding column value in the underlying <code>ResultSet</code>.
+     *     </li>
+     * <li>The <code>values()</code> method must return a
+     *     <code>Collection</code> that throws
+     *     <code>UnsupportedOperationException</code> on any attempt to add
+     *     or remove values, either directly or through an <code>Iterator</code>
+     *     returned by the <code>Collection</code>.</li>
+     * </ul>
+     *
+     * @throws FacesException if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available
+     *  at the currently specified row index
+     */ 
+    public Map<String,Object> getRowData() {
+
+        if (resultSet == null) {
+	    return (null);
+        } else if (!isRowAvailable()) {
+            throw new NoRowAvailableException();
+        }
+        try {
+            getMetaData();
+            return (new ResultSetMap(this, String.CASE_INSENSITIVE_ORDER));
+        } catch (SQLException e) {
+            throw new FacesException(e);
+        }
+
+    }
+
+
+    /**
+     * @throws FacesException {@inheritDoc}     
+     */ 
+    public int getRowIndex() {
+
+        return (index);
+
+    }
+
+
+    /**
+     * @throws FacesException {@inheritDoc}
+     * @throws IllegalArgumentException {@inheritDoc}
+     */ 
+    public void setRowIndex(int rowIndex) {
+
+        if (rowIndex < -1) {
+            throw new IllegalArgumentException();
+        }
+
+        // Tell the ResultSet that the previous row was updated if necessary
+        if (updated && (resultSet != null)) {
+            try {
+		if (!resultSet.rowDeleted()) {
+		    resultSet.updateRow();
+		}
+                updated = false;
+            } catch (SQLException e) {
+                throw new FacesException(e);
+            }
+        }
+
+        int old = index;
+        index = rowIndex;
+	if (resultSet == null) {
+	    return;
+	}
+	DataModelListener [] listeners = getDataModelListeners();
+        if ((old != index) && (listeners != null)) {
+            Object rowData = null;
+            if (isRowAvailable()) {
+                rowData = getRowData();
+            }
+            DataModelEvent event =
+                new DataModelEvent(this, index, rowData);
+            int n = listeners.length;
+            for (int i = 0; i < n; i++) {
+		if (null != listeners[i]) {
+		    listeners[i].rowSelected(event);
+		}
+            }
+        }
+
+
+    }
+
+
+    public Object getWrappedData() {
+
+        return (this.resultSet);
+
+    }
+
+
+    /**
+     * @throws ClassCastException {@inheritDoc}
+     */
+    public void setWrappedData(Object data) {
+
+        if (data == null) {
+            metadata = null;
+            resultSet = null;
+            setRowIndex(-1);
+        } else {
+            metadata = null;
+            resultSet = (ResultSet) data;
+            index = -1;
+            setRowIndex(0);
+        }
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Return the <code>ResultSetMetaData</code> for the
+     * <code>ResultSet</code> we are wrapping, caching it the first time
+     * it is returned.</p>
+     *
+     * @throws FacesException if the <code>ResultSetMetaData</code>
+     *  cannot be acquired
+     */
+    private ResultSetMetaData getMetaData() {
+
+        if (metadata == null) {
+            try {
+                metadata = resultSet.getMetaData();
+            } catch (SQLException e) {
+                throw new FacesException(e);
+            }
+        }
+        return (metadata);
+
+    }
+
+
+    /**
+     * <p>Mark the current row as having been updated, so that we will call
+     * <code>updateRow()</code> before moving elsewhere.</p>
+     */
+    private void updated() {
+
+        this.updated = true;
+
+    }
+
+
+    // --------------------------------------------------------- Private Classes
+
+
+    // Private implementation of Map that delegates column get and put
+    // operations to the underlying ResultSet, after setting the required
+    // row index
+    // NOT SERIALIZABLE
+    @SuppressWarnings({"serial"})
+    private static class ResultSetMap extends TreeMap<String,Object> {
+
+        private ResultSetDataModel model;
+
+        public ResultSetMap(ResultSetDataModel model,
+                            Comparator<String> comparator) throws SQLException {
+
+            super(comparator);
+            this.model = model;
+            index = model.index;
+            model.resultSet.absolute(index + 1);
+            int n = model.metadata.getColumnCount();
+            for (int i = 1; i <= n; i++) {
+                super.put(model.metadata.getColumnName(i),
+                          model.metadata.getColumnName(i));
+            }
+        }
+
+        // The zero-relative row index of our row
+        private int index;
+
+        // Removing entries is not allowed
+        public void clear() {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean containsValue(Object value) {
+            for (Iterator i = entrySet().iterator(); i .hasNext(); ) {
+                Map.Entry entry = (Map.Entry) i.next();
+                Object contained = entry.getValue();
+                 if (value == null) {
+                    if (contained == null) {
+                        return (true);
+                    }
+                } else {
+                    if (value.equals(contained)) {
+                        return (true);
+                    }
+                }
+            }
+            return (false);
+        }
+
+        public Set<Map.Entry<String,Object>> entrySet() {
+            return (new ResultSetEntries(this));
+        }
+
+        public Object get(Object key) {
+            if (!containsKey(key)) {
+                return (null);
+            }
+            try {
+                model.resultSet.absolute(index + 1);
+                return (model.resultSet.getObject((String) realKey(key)));
+            } catch (SQLException e) {
+                throw new FacesException(e);
+            }
+        }
+
+        public Set<String> keySet() {
+            return (new ResultSetKeys(this));
+        }
+
+        public Object put(String key, Object value) {
+            if (!containsKey(key)) {
+                throw new IllegalArgumentException();
+            }
+            
+            try {
+                model.resultSet.absolute(index + 1);
+                Object previous = model.resultSet.getObject((String) realKey(key));
+                if ((previous == null) && (value == null)) {
+                    return (previous);
+                } else if ((previous != null) && (value != null) &&
+                           previous.equals(value)) {
+                    return (previous);
+                }
+                model.resultSet.updateObject((String) realKey(key), value);
+                model.updated();
+                return (previous);
+            } catch (SQLException e) {
+                throw new FacesException(e);
+            }
+        }
+
+        public void putAll(Map<? extends String, ? extends Object> map) {
+            for (Map.Entry<? extends String, ? extends Object> entry : map.entrySet()) {
+                put(entry.getKey(), entry.getValue());
+            }
+        }
+
+        // Removing entries is not allowed
+        public Object remove(Object key) {
+            throw new UnsupportedOperationException();
+        }
+
+        public Collection<Object> values() {
+            return (new ResultSetValues(this));
+        }
+
+        Object realKey(Object key) {
+            return (super.get(key));
+        }
+
+        Iterator<String> realKeys() {
+            return (super.keySet().iterator());
+        }
+
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            throw new NotSerializableException();
+        }
+
+        private void readObject(ObjectInputStream in) throws IOException {
+            throw new NotSerializableException();
+        }
+
+    }
+
+
+    // Private implementation of Set that implements the entrySet() behavior
+    // for ResultSetMap
+    private static class ResultSetEntries extends AbstractSet<Map.Entry<String,Object>> {
+
+        public ResultSetEntries(ResultSetMap map) {
+            this.map = map;
+        }
+
+        private ResultSetMap map;
+
+        // Adding entries is not allowed
+        public boolean add(Map.Entry<String,Object> o) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Adding entries is not allowed
+        public boolean addAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Removing entries is not allowed
+        public void clear() {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean contains(Object o) {
+            if (o == null) {
+                throw new NullPointerException();
+            }
+            if (!(o instanceof Map.Entry)) {
+                return (false);
+            }
+            Map.Entry e = (Map.Entry) o;
+            Object k = e.getKey();
+            Object v = e.getValue();
+            if (!map.containsKey(k)) {
+                return (false);
+            }
+            if (v == null) {
+                return (map.get(k) == null);
+            } else {
+                return (v.equals(map.get(k)));
+            }
+        }
+
+        public boolean isEmpty() {
+            return (map.isEmpty());
+        }
+
+        public Iterator<Map.Entry<String,Object>> iterator() {
+            return (new ResultSetEntriesIterator(map));
+        }
+
+        // Removing entries is not allowed
+        public boolean remove(Object o) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Removing entries is not allowed
+        public boolean removeAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Removing entries is not allowed
+        public boolean retainAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public int size() {
+            return (map.size());
+        }
+
+    }
+
+
+    // Private implementation of Iterator that implements the iterator()
+    // behavior for the Set returned by entrySet() from ResultSetMap
+    private static class ResultSetEntriesIterator implements Iterator<Map.Entry<String,Object>> {
+
+        public ResultSetEntriesIterator(ResultSetMap map) {
+            this.map = map;
+            this.keys = map.keySet().iterator();
+        }
+
+        private ResultSetMap map = null;
+        private Iterator<String> keys = null;
+
+        public boolean hasNext() {
+            return (keys.hasNext());
+        }
+
+        public Map.Entry<String,Object> next() {
+            String key = keys.next();
+            return (new ResultSetEntry(map, key));
+        }
+
+        // Removing entries is not allowed
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    // Private implementation of Map.Entry that implements the behavior for
+    // a single entry from the Set returned by entrySet() from ResultSetMap
+    private static class ResultSetEntry implements Map.Entry<String,Object> {
+
+        public ResultSetEntry(ResultSetMap map, String key) {
+            this.map = map;
+            this.key = key;
+        }
+
+        private ResultSetMap map;
+        private String key;
+
+        public boolean equals(Object o) {
+            if (o == null) {
+                return (false);
+            }
+            if (!(o instanceof Map.Entry)) {
+                return (false);
+            }
+            Map.Entry e = (Map.Entry) o;
+            if (key == null) {
+                if (e.getKey() != null) {
+                    return (false);
+                }
+            } else {
+                if (!key.equals(e.getKey())) {
+                    return (false);
+                }
+            }
+            Object v = map.get(key);
+            if (v == null) {
+                if (e.getValue() != null) {
+                    return (false);
+                }
+            } else {
+                if (!v.equals(e.getValue())) {
+                    return (false);
+                }
+            }
+            return (true);
+        }
+
+        public String getKey() {
+            return (key);
+        }
+
+        public Object getValue() {
+            return (map.get(key));
+        }
+
+        public int hashCode() {
+            Object value = map.get(key);
+            return (((key == null) ? 0 : key.hashCode()) ^
+                    ((value == null) ? 0 : value.hashCode()));
+        }
+
+        public Object setValue(Object value) {
+            Object previous = map.get(key);
+            map.put(key, value);
+            return (previous);
+        }
+
+    }
+
+
+    // Private implementation of Set that implements the keySet() behavior
+    // for ResultSetMap
+    private static class ResultSetKeys extends AbstractSet<String> {
+
+        public ResultSetKeys(ResultSetMap map) {
+            this.map = map;
+        }
+
+        private ResultSetMap map;
+
+        // Adding keys is not allowed
+        public boolean add(String o) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Adding keys is not allowed
+        public boolean addAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Removing keys is not allowed
+        public void clear() {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean contains(Object o) {
+            return (map.containsKey(o));
+        }
+
+        public boolean isEmpty() {
+            return (map.isEmpty());
+        }
+
+        public Iterator<String> iterator() {
+            return (new ResultSetKeysIterator(map));
+        }
+
+        // Removing keys is not allowed
+        public boolean remove(Object o) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Removing keys is not allowed
+        public boolean removeAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        // Removing keys is not allowed
+        public boolean retainAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public int size() {
+            return (map.size());
+        }
+
+    }
+
+
+    // Private implementation of Iterator that implements the iterator()
+    // behavior for the Set returned by keySet() from ResultSetMap
+    private static class ResultSetKeysIterator implements Iterator<String> {
+
+        public ResultSetKeysIterator(ResultSetMap map) {
+            this.keys = map.realKeys();
+        }
+
+        private Iterator<String> keys = null;
+
+        public boolean hasNext() {
+            return (keys.hasNext());
+        }
+
+        public String next() {
+            return (keys.next());
+        }
+
+        // Removing keys is not allowed
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+    // Private implementation of Collection that implements the behavior
+    // for the Collection returned by values() from ResultSetMap
+    private static class ResultSetValues extends AbstractCollection<Object> {
+
+        public ResultSetValues(ResultSetMap map) {
+            this.map = map;
+        }
+
+        private ResultSetMap map;
+
+        public boolean add(Object o) {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean addAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void clear() {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean contains(Object value) {
+            return (map.containsValue(value));
+        }
+
+        public Iterator<Object> iterator() {
+            return (new ResultSetValuesIterator(map));
+        }
+
+        public boolean remove(Object o) {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean removeAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public boolean retainAll(Collection c) {
+            throw new UnsupportedOperationException();
+        }
+
+        public int size() {
+            return (map.size());
+        }
+
+    }
+
+
+    // Private implementation of Iterator that implements the behavior
+    // for the Iterator returned by values().iterator() from ResultSetMap
+    private static class ResultSetValuesIterator implements Iterator<Object> {
+
+        public ResultSetValuesIterator(ResultSetMap map) {
+            this.map = map;
+            this.keys = map.keySet().iterator();
+        }
+
+        private ResultSetMap map;
+        private Iterator<String> keys;
+
+        public boolean hasNext() {
+            return (keys.hasNext());
+        }
+
+        public Object next() {
+            return (map.get(keys.next()));
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/model/ScalarDataModel.java b/javax/faces/model/ScalarDataModel.java
new file mode 100644
index 0000000..22154b0
--- /dev/null
+++ b/javax/faces/model/ScalarDataModel.java
@@ -0,0 +1,218 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+/**
+ * <p><strong>ScalarDataModel</strong> is a convenience implementation of
+ * {@link DataModel} that wraps an individual Java object.</p>
+ */
+
+public class ScalarDataModel<E> extends DataModel<E> {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a new {@link ScalarDataModel} with no specified
+     * wrapped data.</p>
+     */
+    public ScalarDataModel() {
+
+        this(null);
+
+    }
+
+
+    /**
+     * <p>Construct a new {@link ScalarDataModel} wrapping the specified
+     * scalar object.</p>
+     *
+     * @param scalar Scalar to be wrapped (if any)
+     */
+    public ScalarDataModel(E scalar) {
+
+        super();
+        setWrappedData(scalar);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    // The currently selected row index (zero-relative)
+    private int index;
+
+
+    // The scalar we are wrapping
+    private E scalar;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return <code>true</code> if there is <code>wrappedData</code>
+     * available, and the current value of <code>rowIndex</code> is zero.
+     * Otherwise, return <code>false</code>.</p>
+     *
+     * @throws FacesException if an error occurs getting the row availability
+     */
+    public boolean isRowAvailable() {
+
+        if (scalar == null) {
+	    return (false);
+        } else if (index == 0) {
+            return (true);
+        } else {
+            return (false);
+        }
+
+    }
+
+
+    /**
+     * <p>If there is <code>wrappedData</code> available, return 1.
+     * If no <code>wrappedData</code> is available, return -1.</p>
+     *
+     * @throws FacesException if an error occurs getting the row count
+     */
+    public int getRowCount() {
+
+        if (scalar == null) {
+	    return (-1);
+        }
+        return (1);
+
+    }
+
+
+    /**
+     * <p>If wrapped data is available, return the wrapped data instance.
+     * Otherwise, return <code>null</code>.</p>
+     *
+     * @throws FacesException if an error occurs getting the row data
+     * @throws IllegalArgumentException if now row data is available
+     *  at the currently specified row index
+     */
+    public E getRowData() {
+
+        if (scalar == null) {
+	    return (null);
+        } else if (!isRowAvailable()) {
+            throw new NoRowAvailableException();
+        } else {
+            //noinspection unchecked
+            return (scalar);
+        }
+
+    }
+
+
+    /**
+     * @throws FacesException {@inheritDoc}     
+     */ 
+    public int getRowIndex() {
+
+        return (index);
+
+    }
+
+
+    /**
+     * @throws FacesException {@inheritDoc}
+     * @throws IllegalArgumentException {@inheritDoc}
+     */ 
+    public void setRowIndex(int rowIndex) {
+
+        if (rowIndex < -1) {
+            throw new IllegalArgumentException();
+        }
+        int old = index;
+        index = rowIndex;
+	if (scalar == null) {
+	    return;
+	}
+	DataModelListener [] listeners = getDataModelListeners();
+        if ((old != index) && (listeners != null)) {
+            Object rowData = null;
+            if (isRowAvailable()) {
+                rowData = getRowData();
+            }
+            DataModelEvent event =
+                new DataModelEvent(this, index, rowData);
+            int n = listeners.length;
+            for (int i = 0; i < n; i++) {
+		if (null != listeners[i]) {
+		    listeners[i].rowSelected(event);
+		}
+            }
+        }
+
+    }
+
+
+    public Object getWrappedData() {
+
+        return (this.scalar);
+
+    }
+
+
+    /**
+     * @throws ClassCastException {@inheritDoc}
+     */
+    public void setWrappedData(Object data) {
+
+        if (data == null) {
+            scalar = null;
+            setRowIndex(-1);
+        } else {
+            scalar = (E) data;
+            index = -1;
+            setRowIndex(0);
+        }
+
+    }
+
+
+}
diff --git a/javax/faces/model/SelectItem.java b/javax/faces/model/SelectItem.java
new file mode 100644
index 0000000..ca78713
--- /dev/null
+++ b/javax/faces/model/SelectItem.java
@@ -0,0 +1,359 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import java.io.Serializable;
+import javax.faces.component.UISelectMany;
+import javax.faces.component.UISelectOne;
+
+
+/**
+ * <p><strong class="changed_modified_2_0
+ * changed_modified_2_0_rev_a">SelectItem</strong> represents a single
+ * <em>item</em> in the list of supported <em>items</em> associated with
+ * a {@link UISelectMany} or {@link UISelectOne} component.</p>
+ */
+
+public class SelectItem implements Serializable {
+
+    private static final long serialVersionUID = 876782311414654999L;
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a <code>SelectItem</code> with no initialized property
+     * values.</p>
+     */
+    public SelectItem() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a <code>SelectItem</code> with the specified value.  The
+     * <code>label</code> property will be set to the value (converted to a
+     * String, if necessary), the <code>description</code> property will be
+     * set to <code>null</code>, the <code>disabled</code> property will be set to 
+     * <code>false</code>, and the <code>escape</code> property will be set to
+     ( <code>true</code>.</p>
+     *
+     * @param value Value to be delivered to the model if this
+     *  item is selected by the user
+     */
+    public SelectItem(Object value) {
+
+        this(value, value == null ? null : value.toString(), null, false, true, false);
+
+    }
+
+
+    /**
+     * <p>Construct a <code>SelectItem</code> with the specified value and
+     * label.  The <code>description</code> property will be set to
+     * <code>null</code>, the <code>disabled</code> property will be
+     * set to <code>false</code>, and the <code>escape</code> property will
+     * be set to <code>true</code>.</p>
+     *
+     * @param value Value to be delivered to the model if this
+     *  item is selected by the user
+     * @param label Label to be rendered for this item in the response
+     */
+    public SelectItem(Object value, String label) {
+
+        this(value, label, null, false, true, false);
+
+    }
+
+
+    /**
+     * <p>Construct a <code>SelectItem</code> instance with the specified
+     * value, label and description.  This <code>disabled</code> property
+     * will be set to <code>false</code>,  and the <code>escape</code> 
+     * property will be set to <code>true</code>.</p>
+     *
+     * @param value Value to be delivered to the model if this
+     *  item is selected by the user
+     * @param label Label to be rendered for this item in the response
+     * @param description Description of this item, for use in tools
+     */
+    public SelectItem(Object value, String label, String description) {
+
+        this(value, label, description, false, true, false);
+
+    }
+
+
+    /**
+     * <p>Construct a <code>SelectItem</code> instance with the specified
+     * property values.   The <code>escape</code> property will be set 
+     * to <code>true</code>.</p>
+     *
+     * @param value Value to be delivered to the model if this
+     *  item is selected by the user
+     * @param label Label to be rendered for this item in the response
+     * @param description Description of this item, for use in tools
+     * @param disabled Flag indicating that this option is disabled
+     */
+    public SelectItem(Object value, String label, String description,
+                      boolean disabled) {
+
+        this(value, label, description, disabled, true, false);
+
+    }
+    
+    /**
+     * <p>Construct a <code>SelectItem</code> instance with the specified
+     * property values.</p>
+     *
+     * @param value Value to be delivered to the model if this
+     *  item is selected by the user
+     * @param label Label to be rendered for this item in the response
+     * @param description Description of this item, for use in tools
+     * @param disabled Flag indicating that this option is disabled
+     * @param escape Flag indicating that the text of this option should be
+     * escaped when rendered.
+     * @since 1.2
+     */
+    public SelectItem(Object value, String label, String description,
+                      boolean disabled, boolean escape) {
+
+        this(value, label, description, disabled, escape, false);
+
+    }
+    
+    
+    /**
+     * <p>Construct a <code>SelectItem</code> instance with the specified
+     * property values.</p>
+     *
+     * @param value Value to be delivered to the model if this
+     *  item is selected by the user
+     * @param label Label to be rendered for this item in the response
+     * @param description Description of this item, for use in tools
+     * @param disabled Flag indicating that this option is disabled
+     * @param escape Flag indicating that the text of this option should be
+     * escaped when rendered.
+     * @param noSelectionOption Flag indicating that the current option is a "no selection" option
+     * @since 1.2
+     */
+    public SelectItem(Object value, String label, String description,
+                      boolean disabled, boolean escape, boolean noSelectionOption) {
+
+        super();
+        setValue(value);
+        setLabel(label);
+        setDescription(description);
+        setDisabled(disabled);
+        setEscape(escape);
+        setNoSelectionOption(noSelectionOption);
+
+    }
+
+    
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    private String description = null;
+    private boolean disabled = false;
+    private String label = null;
+    @SuppressWarnings({"NonSerializableFieldInSerializableClass"})
+    private Object value = null;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return a description of this item, for use in development tools.
+     */
+    public String getDescription() {
+
+        return (this.description);
+
+    }
+
+
+    /**
+     * <p>Set the description of this item, for use in development tools.</p>
+     *
+     * @param description The new description
+     */
+    public void setDescription(String description) {
+
+        this.description = description;
+
+    }
+
+
+    /**
+     * <p>Return the disabled flag for this item, which should modify the
+     * rendered output to make this item unavailable for selection by the user
+     * if set to <code>true</code>.</p>
+     */
+    public boolean isDisabled() {
+
+        return (this.disabled);
+
+    }
+
+
+    /**
+     * <p>Set the disabled flag for this item, which should modify the
+     * rendered output to make this item unavailable for selection by the user
+     * if set to <code>true</code>.</p>
+     *
+     * @param disabled The new disabled flag
+     */
+    public void setDisabled(boolean disabled) {
+
+        this.disabled = disabled;
+
+    }
+
+
+    /**
+     * <p>Return the label of this item, to be rendered visibly for the user.
+     */
+    public String getLabel() {
+
+        return (this.label);
+
+    }
+
+
+    /**
+     * <p>Set the label of this item, to be rendered visibly for the user.
+     *
+     * @param label The new label
+     */
+    public void setLabel(String label) {
+
+        this.label = label;
+
+    }
+
+
+    /**
+     * <p>Return the value of this item, to be delivered to the model
+     * if this item is selected by the user.
+     */
+    public Object getValue() {
+
+        return (this.value);
+
+    }
+
+
+    /**
+     * <p>Set the value of this item, to be delivered to the model
+     * if this item is selected by this user.
+     *
+     * @param value The new value
+     *
+     */
+    public void setValue(Object value) {
+
+        this.value = value;
+
+    }
+
+    private boolean escape;
+
+    /**
+     * <p class="changed_added_2_0_rev_a">If and only if this returns
+     * <code>true</code>, the code that renders this select item must
+     * escape the label using escaping syntax appropriate to the content
+     * type being rendered.  </p>
+     *
+     * @since 2.0
+     */
+    public boolean isEscape() {
+        return this.escape;
+    }
+
+    /**
+     * <p class="changed_added_2_0_rev_a">Set the value of the escape
+     * property.  See {@link #isEscape}.</p>
+     *
+     * @since 2.0
+     */
+    public void setEscape(boolean escape) {
+        this.escape = escape;
+    }
+    
+    private boolean noSelectionOption = false;
+
+    /** <p class="changed_added_2_0">Return the value of the
+     * <code>noSelectionOption</code> property.  If the value of this
+     * property is <code>true</code>, the system interprets the option
+     * represented by this <code>SelectItem</code> instance as
+     * representing a "no selection" option.  See {@link
+     * UISelectOne#validateValue} and {@link UISelectMany#validateValue}
+     * for usage.</p>
+     *
+     * @since 2.0
+     */
+
+    public boolean isNoSelectionOption() {
+        return noSelectionOption;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Set the value of the
+     * <code>noSelectionOption</code> property.</p>
+     *
+     * @since 2.0
+     */
+
+    public void setNoSelectionOption(boolean noSelectionOption) {
+        this.noSelectionOption = noSelectionOption;
+    }
+
+
+
+}
diff --git a/javax/faces/model/SelectItemGroup.java b/javax/faces/model/SelectItemGroup.java
new file mode 100644
index 0000000..b5b3752
--- /dev/null
+++ b/javax/faces/model/SelectItemGroup.java
@@ -0,0 +1,162 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.model;
+
+
+import javax.faces.component.UISelectMany;
+import javax.faces.component.UISelectOne;
+
+
+/**
+ * <p><strong>SelectItemGroup</strong> is a subclass of {@link SelectItem} that
+ * identifies a set of options that will be made available as a subordinate
+ * "submenu" or "options list", depending upon the requirements of the
+ * {@link UISelectMany} or {@link UISelectOne} renderer that is actually used.
+ * In general, the <code>value</code> property of this instance will be ignored,
+ * and the <code>label</code> property of this instance will be used to label
+ * the submenu.</p>
+ *
+ * <p>Although it is feasible to incorporate {@link SelectItemGroup} instances
+ * in he <code>selectItems</code> property of this instance (thereby creating
+ * a data structure suitable for cascading submenus), some renderers may place
+ * restrictions on the level of nesting they support.  For example, HTML based
+ * renderers that create an <code><select></code> element will typically
+ * render this instance as an <code><optgroup></code> element, but the
+ * HTML 4.01 Specification disallows nested option groups.</p>
+ */
+
+public class SelectItemGroup extends SelectItem {
+
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a <code>SelectItemGroup</code> with no initialized property
+     * values.</p>
+     */
+    public SelectItemGroup() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a <code>SelectItemGroup</code> with the specified label
+     * and no associated <code>selectItem</code>s.  The <code>value</code>
+     * property will be set to a zero-length String, the
+     * <code>description</code> property will be set to <code>null</code>,
+     * and the <code>disabled</code> property will be set to false.</p>
+     *
+     * @param label Label to be rendered for this group in the response
+     *
+     * @throws NullPointerException if <code>label</code>
+     *  is <code>false</code>
+     */
+    public SelectItemGroup(String label) {
+
+        super("", label);
+
+    }
+
+
+    /**
+     * <p>Construct a <code>SelectItemGroup</code> with the specified
+     * properties.  The <code>value</code> property will be set to a
+     * zero-length String.</p>
+     *
+     * @param label Label to be rendered for this group in the response
+     * @param description Description of this group, for use in tools
+     * @param disabled Flag indicating that this group is disabled
+     * @param selectItems Array of {@link SelectItem} describing the
+     *  items available in this group
+     *
+     * @throws NullPointerException if <code>label</code>
+     *  or <code>selectItems</code> is <code>false</code>
+     */
+    public SelectItemGroup(String label, String description, boolean disabled,
+                           SelectItem selectItems[]) {
+
+        super("", label, description, disabled);
+        setSelectItems(selectItems);
+
+    }
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    private SelectItem selectItems[] = null;
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>Return the set of subordinate {@link SelectItem}s for this group.</p>
+     */
+    public SelectItem[] getSelectItems() {
+
+        return (this.selectItems);
+
+    }
+
+
+    /**
+     * <p>Set the set of subordinate {@link SelectItem}s for this group.</p>
+     *
+     * @param selectItems The new set of subordinate items
+     *
+     * @throws NullPointerException if <code>selectItems</code>
+     *  is <code>null</code>
+     */
+    public void setSelectItems(SelectItem selectItems[]) {
+
+        if (selectItems == null) {
+            throw new NullPointerException();
+        }
+        this.selectItems = selectItems;
+
+    }
+
+
+}
diff --git a/javax/faces/model/package.html b/javax/faces/model/package.html
new file mode 100644
index 0000000..990c246
--- /dev/null
+++ b/javax/faces/model/package.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.model"</title>
+<body bgcolor="white">
+    <p><span class="changed_modified_2_0
+    changed_modified_2_0_rev_a changed_modified_2_2">Standard</span> model data 
+    beans for JavaServer Faces.</p>
+</body>
+</html>
diff --git a/javax/faces/package.html b/javax/faces/package.html
new file mode 100644
index 0000000..681d5e9
--- /dev/null
+++ b/javax/faces/package.html
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2004-2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+</head>
+<body bgcolor="white">
+
+<span class="changed_modified_2_0 changed_modified_2_1 changed_modified_2_2">Top</span> level classes for the
+JavaServer(tm) Faces API.  The most important
+class in the package is {@link javax.faces.FactoryFinder}, which is the
+mechanism by which users can override many of the key pieces of the
+implementation with their own.
+
+</body>
+</html>
diff --git a/javax/faces/render/ClientBehaviorRenderer.java b/javax/faces/render/ClientBehaviorRenderer.java
new file mode 100644
index 0000000..035c3d4
--- /dev/null
+++ b/javax/faces/render/ClientBehaviorRenderer.java
@@ -0,0 +1,130 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorContext;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p>A <strong class="changed_added_2_0">ClientBehaviorRenderer</strong> produces
+ * the client-side script that implements a {@link ClientBehavior}'s client-side 
+ * logic.  It can also enqueue server-side {@link javax.faces.event.BehaviorEvent}s that may be
+ * processed later by event listeners that have registered an interest.</p> 
+ *
+ * <p>Individual {@link ClientBehaviorRenderer} instances will be instantiated as 
+ * requested during the rendering process, and will remain in existence for the
+ * remainder of the lifetime of a web application.  Because each instance
+ * may be invoked from more than one request processing thread simultaneously,
+ * they MUST be programmed in a thread-safe manner.</p>
+ *
+ * @since 2.0
+ */
+
+public abstract class ClientBehaviorRenderer {
+    
+    
+    // ------------------------------------------------------ Rendering Methods
+
+    /**
+     * <p class="changed_added_2_0">Return the script that implements this
+     * ClientBehavior's client-side logic.  The default implementation returns 
+     * <code>null</code>.</p>
+     *
+     * <p>ClientBehaviorRenderer.getScript() implementations are allowed to return
+     * null to indicate that no script is required for this particular
+     * getScript() call.  For example, a ClientBehaviorRenderer implementation may
+     * return null if the associated ClientBehavior is disabled.
+     * </p>
+     *
+     * @param behaviorContext the {@link ClientBehaviorContext} that provides
+     * properties that might influence this getScript() call.  Note that
+     * ClientBehaviorContext instances are short-lived objects that are only
+     * valid for the duration of the call to getScript().  ClientBehaviorRenderer
+     * implementations must not hold onto references to ClientBehaviorContexts.
+     *
+     * @param behavior the ClientBehavior instance that generates script.
+     *
+     * @return script that provides the client-side behavior, or null
+     * if no script is required.
+     *
+     * @since 2.0
+     *
+     */
+    public String getScript(ClientBehaviorContext behaviorContext, 
+                            ClientBehavior behavior) {
+
+        return null;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Decode any new state of this {@link ClientBehavior} 
+     * from the request contained in the specified {@link FacesContext}.</p>
+     *
+     * <p>During decoding, events may be enqueued for later processing
+     * (by event listeners who have registered an interest),  by calling
+     * <code>queueEvent()</code>.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     * @param component {@link UIComponent} the component associated with this 
+     * {@link javax.faces.component.behavior.Behavior}
+     * @param behavior {@link ClientBehavior} the behavior instance
+     *
+     * @throws NullPointerException if <code>context</code>,
+     *  <code>component</code> <code>behavior</code> is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public void decode(FacesContext context,
+                       UIComponent component,
+                       ClientBehavior behavior) {
+
+        if (null == context || null == component || behavior == null) {
+            throw new NullPointerException();
+        }
+
+    }
+
+}
diff --git a/javax/faces/render/FacesBehaviorRenderer.java b/javax/faces/render/FacesBehaviorRenderer.java
new file mode 100644
index 0000000..aec3731
--- /dev/null
+++ b/javax/faces/render/FacesBehaviorRenderer.java
@@ -0,0 +1,112 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * class automatically registers the class with the runtime as a {@link
+ * ClientBehaviorRenderer}.  The value of the {@link #renderKitId} attribute is taken
+ * to be the <em>render-kit-id</em> to which an instance of this
+ * <code>Renderer</code> is to be added.  There must be a public
+ * zero-argument constructor on any class where this annotation appears.
+ * The implementation must indicate a fatal error if such a constructor
+ * does not exist and the application must not be placed in service.
+ * Within that {@link RenderKit}, The value of the {@link #rendererType}
+ * attribute is taken to be the <em>renderer-type</em>
+ * The implementation must guarantee that
+ * for each class annotated with <code>FacesBehaviorRenderer</code>, 
+ * found with the algorithm in section JSF.11.5,
+ * the following actions are taken.</p>
+
+ * <div class="changed_added_2_0">
+
+ * <ul>
+
+ *        <li><p>Obtain a reference to the {@link RenderKitFactory} for
+ *        this application.</p></li>
+
+          <li><p>See if a <code>RenderKit</code> exists for
+          <em>render-kit-id</em>.  If so, let that instance be
+          <em>renderKit</em> for discussion.  If not, the implementation
+          must indicate a fatal error if such a <code>RenderKit</code>
+          does not exist and the application must not be placed in
+          service.</p></li>
+
+          <li><p>Create an instance of this class using the public
+          zero-argument constructor.</p></li>
+
+          <li><p>Call {@link RenderKit#addClientBehaviorRenderer} on
+          <em>renderKit</em>, passing <em>type</em> as the
+          first argument, and a {@link ClientBehaviorRenderer} instance as
+          the second argument.</p></li>
+
+ * </ul>
+
+
+ * </div>
+ *
+ * @since 2.0
+
+ */
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface FacesBehaviorRenderer {
+    /**
+     * <p class="changed_added_2_0">The value of this annotation
+     * attribute is taken to be the <em>render-kit-id</em> in which an
+     * instance of this class of <code>Renderer</code> must be
+     * installed.</p>
+     *
+     * @since 2.0
+     */ 
+
+    String renderKitId() default RenderKitFactory.HTML_BASIC_RENDER_KIT;
+
+    String rendererType();
+}
diff --git a/javax/faces/render/FacesRenderer.java b/javax/faces/render/FacesRenderer.java
new file mode 100644
index 0000000..f5f1704
--- /dev/null
+++ b/javax/faces/render/FacesRenderer.java
@@ -0,0 +1,135 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0">The presence of this annotation on a
+ * class automatically registers the class with the runtime as a {@link
+ * Renderer}.  The value of the {@link #renderKitId} attribute is taken
+ * to be the <em>render-kit-id</em> to which an instance of this
+ * <code>Renderer</code> is to be added.  There must be a public
+ * zero-argument constructor on any class where this annotation appears.
+ * The implementation must indicate a fatal error if such a constructor
+ * does not exist and the application must not be placed in service.
+ * Within that {@link RenderKit}, The value of the {@link #rendererType}
+ * attribute is taken to be the <em>renderer-type</em>, and the value of
+ * the {@link #componentFamily} attribute is to be taken as the
+ * <em>component-family</em>.  The implementation must guarantee that
+ * for each class annotated with <code>FacesRenderer</code>, found with
+ * the algorithm in section JSF.11.5,
+ * the following actions are taken.</p>
+
+ * <div class="changed_added_2_0">
+
+ * <ul>
+
+ * 	  <li><p>Obtain a reference to the {@link RenderKitFactory} for
+ * 	  this application.</p></li>
+
+	  <li><p>See if a <code>RenderKit</code> exists for
+	  <em>render-kit-id</em>.  If so, let that instance be
+	  <em>renderKit</em> for discussion.  If not, the implementation
+	  must indicate a fatal error if such a <code>RenderKit</code>
+	  does not exist and the application must not be placed in
+	  service.</p></li>
+
+	  <li><p>Create an instance of this class using the public
+	  zero-argument constructor.</p></li>
+
+	  <li><p>Call {@link RenderKit#addRenderer} on
+	  <em>renderKit</em>, passing <em>component-family</em> as the
+	  first argument, <em>renderer-type</em> as the second, and the
+	  newly instantiated <code>RenderKit</code> instance as the
+	  third argument.</p></li>
+
+ * </ul>
+
+
+ * </div>
+
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface FacesRenderer {
+
+
+    /**
+     * <p class="changed_added_2_0">The value of this annotation
+     * attribute is taken to be the <em>render-kit-id</em> in which an
+     * instance of this class of <code>Renderer</code> must be
+     * installed.</p>
+     */ 
+
+    String renderKitId() default RenderKitFactory.HTML_BASIC_RENDER_KIT;
+
+
+    /**
+     * <p class="changed_added_2_0">The value of this annotation
+     * attribute is taken to be the <em>renderer-type</em> which, in
+     * combination with {@link #componentFamily} can be used to obtain a
+     * reference to an instance of this {@link Renderer} by calling
+     * {@link javax.faces.render.RenderKit#getRenderer(java.lang.String,
+     * java.lang.String)}.</p>
+     */ 
+
+    String rendererType();
+
+
+    /**
+     * <p class="changed_added_2_0">The value of this annotation
+     * attribute is taken to be the <em>component-family</em> which, in
+     * combination with {@link #rendererType} can be used to obtain a
+     * reference to an instance of this {@link Renderer} by calling
+     * {@link javax.faces.render.RenderKit#getRenderer(java.lang.String,
+     * java.lang.String)}.</p>
+     */ 
+
+    String componentFamily();
+
+
+}
diff --git a/javax/faces/render/RenderKit.java b/javax/faces/render/RenderKit.java
new file mode 100644
index 0000000..3ee115a
--- /dev/null
+++ b/javax/faces/render/RenderKit.java
@@ -0,0 +1,278 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.ResponseWriter;
+import javax.faces.context.ResponseStream;
+import java.io.Writer;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.Collections;
+import java.util.Set;
+
+
+/**
+ * <p><span
+ * class="changed_modified_2_0"><strong>RenderKit</strong></span>
+ * represents a collection of {@link Renderer} instances that, together,
+ * know how to render JavaServer Faces {@link UIComponent} instances for
+ * a specific client.  Typically, {@link RenderKit}s are specialized for
+ * some combination of client device type, markup language, and/or user
+ * <code>Locale</code>.  A {@link RenderKit} also acts as a Factory for
+ * associated {@link Renderer} instances, which perform the actual
+ * rendering process for each component.</p>
+ *
+ * <p>A typical JavaServer Faces implementation will configure one or
+ * more {@link RenderKit} instances at web application startup.  They
+ * are made available through calls to the <code>getRenderKit()</code>
+ * methods of {@link RenderKitFactory}.  Because {@link RenderKit}
+ * instances are shared, they must be implemented in a thread-safe
+ * manner.  Due to limitations in the current specification having
+ * multiple <code>RenderKit</code> instances at play in the same
+ * application requires a custom {@link
+ * javax.faces.application.ViewHandler} instance that is aware of how to
+ * deal with this case.  This limitation will be lifted in a future
+ * version of the spec.</p>
+ *
+ * <p>The <code>RenderKit</code> instance must also vend a {@link
+ * ResponseStateManager} instance, which is used in the process of
+ * saving and restoring tree structure and state.</p>
+ */
+public abstract class RenderKit {
+
+
+    /**
+     * <p>Register the specified {@link Renderer} instance, associated with the
+     * specified component <code>family</code> and <code>rendererType</code>,
+     * to the set of {@link Renderer}s registered with this {@link RenderKit},
+     * replacing any previously registered {@link Renderer} for this
+     * combination of identifiers.</p>
+     *
+     * @param family Component family of the {@link Renderer} to register
+     * @param rendererType Renderer type of the {@link Renderer} to register
+     * @param renderer {@link Renderer} instance we are registering
+     *
+     * @throws NullPointerException if <code>family</code> or
+     *  <code>rendererType</code> or <code>renderer</code> is null
+     */
+    public abstract void addRenderer(String family, String rendererType,
+                                     Renderer renderer);
+
+
+    /**
+     * <p>Return the {@link Renderer} instance most recently registered for
+     * the specified component <code>family</code> and
+     * <code>rendererType</code>, if any; otherwise, return
+     * <code>null</code>.</p>
+     *
+     * @param family Component family of the requested
+     *  {@link Renderer} instance
+     * @param rendererType Renderer type of the requested
+     *  {@link Renderer} instance
+     *
+     * @throws NullPointerException if <code>family</code> or
+     *  <code>rendererType</code> is <code>null</code>
+     */
+    public abstract Renderer getRenderer(String family, String rendererType);
+
+
+    /**
+     * <p>Return an instance of {@link ResponseStateManager} to handle
+     * rendering technology specific state management decisions.</p>
+     */
+    public abstract ResponseStateManager getResponseStateManager();
+
+
+    /**
+     * <p>Use the provided <code>Writer</code> to create a new {@link
+     * ResponseWriter} instance for the specified (optional) content
+     * type, and character encoding.</p>
+     *
+     * <p>Implementors are advised to consult the
+     * <code>getCharacterEncoding()</code> method of class {@link
+     * javax.servlet.ServletResponse} to get the required value for the
+     * characterEncoding for this method.  Since the <code>Writer</code>
+     * for this response will already have been obtained (due to it
+     * ultimately being passed to this method), we know that the
+     * character encoding cannot change during the rendering of the
+     * response.</p>
+     *
+     * @param writer the Writer around which this {@link ResponseWriter}
+     * must be built.
+     *
+     * @param contentTypeList an "Accept header style" list of content
+     * types for this response, or <code>null</code> if the RenderKit
+     * should choose the best fit.  As of the current version, the
+     * values accepted by the Standard render-kit for this parameter
+     * include any valid "Accept header style" String that includes the
+     * String <code>text/html</code>,
+     * <code>application/xhtml+xml</code>, <code>application/xml</code>
+     * or <code>text/xml</code>.  This may change in a future version.
+     * The RenderKit must support a value for this argument that comes
+     * straight from the <code>Accept</code> HTTP header, and therefore
+     * requires parsing according to the specification of the
+     * <code>Accept</code> header.  Please see <a
+     * href="http://www.ietf.org/rfc/rfc2616.txt?number=2616">Section
+     * 14.1 of RFC 2616</a> for the specification of the
+     * <code>Accept</code> header.
+     *
+     * @param characterEncoding such as "ISO-8859-1" for this
+     * ResponseWriter, or <code>null</code> if the
+     * <code>RenderKit</code> should choose the best fit.  Please see <a
+     * href="http://www.iana.org/assignments/character-sets">the
+     * IANA</a> for a list of character encodings.
+     *
+     * @return a new {@link ResponseWriter}.
+     *
+     * @throws IllegalArgumentException if no matching content type
+     * can be found in <code>contentTypeList</code>, no appropriate
+     * content type can be found with the implementation dependent best
+     * fit algorithm, or no matching character encoding can be found for
+     * the argument <code>characterEncoding</code>.
+     *
+     */
+    public abstract ResponseWriter createResponseWriter(Writer writer,
+							String contentTypeList,
+							String characterEncoding);
+
+
+    /** 
+     * <p>Use the provided <code>OutputStream</code> to create a new
+     * {@link ResponseStream} instance.</p>
+     *
+     */ 
+    public abstract ResponseStream createResponseStream(OutputStream out);
+
+
+    /**
+     * <p class="changed_added_2_0">Return an <code>Iterator</code> over
+     * the component-family entries supported by this
+     * <code>RenderKit</code> instance.</p>
+     *
+     * <p class="changed_added_2_0">
+     * The default implementation of this method returns an empty
+     * <code>Iterator</code>
+     * </p>
+     *
+     * @since 2.0
+     *
+     */
+    public Iterator<String> getComponentFamilies() {
+
+        Set<String> empty = Collections.emptySet();
+        return empty.iterator();
+
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Return an <code>Iterator</code> over
+     * the renderer-type entries for the given component-family.</p>
+     *
+     * <p class="changed_added_2_0">If the specified <code>componentFamily</code>
+     * is not known to this <code>RenderKit</code> implementation, return
+     * an empty <code>Iterator</code></p>
+     *
+     * <p class="changed_added_2_0">
+     * The default implementation of this method returns an empty
+     * <code>Iterator</code>
+     * </p>
+     *
+     * @param componentFamily one of the members of the
+     * <code>Iterator</code> returned by {@link #getComponentFamilies}.
+     *
+     * @since 2.0
+     */
+    public Iterator<String> getRendererTypes(String componentFamily) {
+
+        Set<String> empty = Collections.emptySet();
+        return empty.iterator();
+
+    }
+    
+    /**
+     * <p>Register the specified {@link ClientBehaviorRenderer} instance, 
+     * associated with the specified component <code>type</code>,
+     * to the set of {@link ClientBehaviorRenderer}s registered with this 
+     * {@link RenderKit}, replacing any previously registered 
+     * {@link ClientBehaviorRenderer} for this type.</p>
+     *
+     * @param type type of the {@link ClientBehaviorRenderer} to register
+     * @param renderer {@link ClientBehaviorRenderer} instance we are registering
+     *
+     * @throws NullPointerException if <code>type</code> or 
+     * <code>renderer</code> is null
+     *
+     * @since 2.0
+     */
+    public void addClientBehaviorRenderer(String type, ClientBehaviorRenderer renderer) {
+        throw new UnsupportedOperationException("The default implementation must override this method");
+    }
+    
+    /**
+     * <p>Return the {@link ClientBehaviorRenderer} instance most recently 
+     * registered for the specified <code>type</code>, if any; 
+     * otherwise, return <code>null</code>.</p>
+     *
+     * @param type type of the requested
+     *  {@link ClientBehaviorRenderer} instance
+     *
+     * @throws NullPointerException if <code>type</code>
+     *  is <code>null</code>
+     *
+     * @since 2.0
+     */
+    public ClientBehaviorRenderer getClientBehaviorRenderer(String type) {
+        throw new UnsupportedOperationException("The default implementation must override this method");
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Return an <code>Iterator</code> over
+     * the {@link ClientBehaviorRenderer} types.</p>
+     *
+     * @since 2.0
+     */
+    public Iterator<String> getClientBehaviorRendererTypes() {
+        throw new UnsupportedOperationException("The default implementation must override this method");		
+    }
+
+}
diff --git a/javax/faces/render/RenderKitFactory.java b/javax/faces/render/RenderKitFactory.java
new file mode 100644
index 0000000..53b0a04
--- /dev/null
+++ b/javax/faces/render/RenderKitFactory.java
@@ -0,0 +1,141 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+
+import java.util.Iterator;
+import javax.faces.FacesWrapper;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p><strong class="changed_modified_2_0">RenderKitFactory</strong> is a 
+ * factory object that registers
+ * and returns {@link RenderKit} instances.  Implementations of
+ * JavaServer Faces must provide at least a default implementation of
+ * {@link RenderKit}.  Advanced implementations (or external third party
+ * libraries) may provide additional {@link RenderKit} implementations
+ * (keyed by render kit identifiers) for performing different types of
+ * rendering for the same components.</p>
+ *
+ * <p>There must be one {@link RenderKitFactory} instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ * <pre>
+ *   RenderKitFactory factory = (RenderKitFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ * </pre>
+ */
+
+public abstract class RenderKitFactory implements FacesWrapper<RenderKitFactory> {
+
+    public RenderKitFactory() {
+    }
+    
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+
+    public RenderKitFactory getWrapped() {
+        return null;
+    }
+    
+    /**
+     * <p>The render kit identifier of the default {@link RenderKit} instance
+     * for this JavaServer Faces implementation.</p>
+     */
+    public static final String HTML_BASIC_RENDER_KIT = "HTML_BASIC";
+
+
+    /**
+     * <p>Register the specified {@link RenderKit} instance, associated with
+     * the specified <code>renderKitId</code>, to be supported by this
+     * {@link RenderKitFactory}, replacing any previously registered
+     * {@link RenderKit} for this identifier.</p>
+     *
+     * @param renderKitId Identifier of the {@link RenderKit} to register
+     * @param renderKit {@link RenderKit} instance that we are registering
+     *
+     * @throws NullPointerException if <code>renderKitId</code> or
+     *  <code>renderKit</code> is <code>null</code>
+     */
+    public abstract void addRenderKit(String renderKitId,
+                                      RenderKit renderKit);
+
+
+    /**
+     * <p>Return a {@link RenderKit} instance for the specified render
+     * kit identifier, possibly customized based on dynamic
+     * characteristics of the specified {@link FacesContext}, if
+     * non-<code>null</code>.  If there is no registered {@link
+     * RenderKit} for the specified identifier, return
+     * <code>null</code>.  The set of available render kit identifiers
+     * is available via the <code>getRenderKitIds()</code> method.</p>
+     *
+     * @param context FacesContext for the request currently being
+     * processed, or <code>null</code> if none is available.
+     * @param renderKitId Render kit identifier of the requested
+     *  {@link RenderKit} instance
+     *
+     * @throws IllegalArgumentException if no {@link RenderKit} instance
+     *  can be returned for the specified identifier
+     * @throws NullPointerException if <code>renderKitId</code> is
+     * <code>null</code>
+     */
+    public abstract RenderKit getRenderKit(FacesContext context, 
+					   String renderKitId);
+
+
+    /**
+     * <p>Return an <code>Iterator</code> over the set of render kit
+     * identifiers registered with this factory.  This set must include
+     * the value specified by <code>RenderKitFactory.HTML_BASIC_RENDER_KIT</code>.
+     * </p>
+     */
+    public abstract Iterator<String> getRenderKitIds();
+
+
+}
diff --git a/javax/faces/render/RenderKitWrapper.java b/javax/faces/render/RenderKitWrapper.java
new file mode 100644
index 0000000..7b59e5d
--- /dev/null
+++ b/javax/faces/render/RenderKitWrapper.java
@@ -0,0 +1,202 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.Iterator;
+import javax.faces.FacesWrapper;
+import javax.faces.context.ResponseStream;
+import javax.faces.context.ResponseWriter;
+
+/**
+ * <p class="changed_modified_2_0">Provides a simple implementation of 
+ * {@link RenderKit} that
+ * can be subclassed by developers wishing to provide specialized
+ * behavior to an existing {@link RenderKit} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link RenderKit}.</p>
+ *
+ * <p class="changed_added_2_0">Usage: extend this class and override {@link #getWrapped} to
+ * return the instance we are wrapping.</p>
+ *
+ * @since 2.0
+ */
+public abstract class RenderKitWrapper extends RenderKit implements FacesWrapper<RenderKit> {
+
+    /**
+     * @return the wrapped {@link RenderKit} instance
+     * @see javax.faces.FacesWrapper#getWrapped()
+     */
+    @Override
+    public abstract RenderKit getWrapped();
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link RenderKit#addRenderer(String, String, Renderer)}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see RenderKit#addRenderer(String, String, Renderer)
+     */
+    @Override
+    public void addRenderer(String family, String rendererType, Renderer renderer) {
+        getWrapped().addRenderer(family, rendererType, renderer);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link RenderKit#createResponseStream(java.io.OutputStream)}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see RenderKit#createResponseStream(java.io.OutputStream)  
+     */
+    @Override
+    public ResponseStream createResponseStream(OutputStream out) {
+        return getWrapped().createResponseStream(out);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link RenderKit#createResponseWriter(java.io.Writer, String, String)}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see RenderKit#createResponseWriter(java.io.Writer, String, String)
+     */
+    @Override
+    public ResponseWriter createResponseWriter(Writer writer, String contentTypeList, String characterEncoding) {
+        return getWrapped().createResponseWriter(writer, contentTypeList, characterEncoding);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link RenderKit#getRenderer(String, String)}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see RenderKit#getRenderer(String, String)
+     */
+    @Override
+    public Renderer getRenderer(String family, String rendererType) {
+        return getWrapped().getRenderer(family, rendererType);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.render.RenderKit#getResponseStateManager()}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see javax.faces.render.RenderKit#getResponseStateManager()
+     */
+    @Override
+    public ResponseStateManager getResponseStateManager() {
+        return getWrapped().getResponseStateManager();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.render.RenderKit#getComponentFamilies()}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see javax.faces.render.RenderKit#getComponentFamilies()
+     */
+    @Override
+    public Iterator<String> getComponentFamilies() {
+        return getWrapped().getComponentFamilies();
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link RenderKit#getRendererTypes(String)}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see RenderKit#getRendererTypes(String)
+     */
+    @Override
+    public Iterator<String> getRendererTypes(String componentFamily) {
+        return getWrapped().getRendererTypes(componentFamily);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link RenderKit#addClientBehaviorRenderer(String, ClientBehaviorRenderer)}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see RenderKit#addClientBehaviorRenderer(String, ClientBehaviorRenderer)
+     */
+    @Override
+    public void addClientBehaviorRenderer(String type, ClientBehaviorRenderer renderer) {
+        getWrapped().addClientBehaviorRenderer(type, renderer);
+    }
+    
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link RenderKit#getClientBehaviorRenderer(String)}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see RenderKit#getClientBehaviorRenderer(String)
+     */
+    @Override
+    public ClientBehaviorRenderer getClientBehaviorRenderer(String type) {
+        return getWrapped().getClientBehaviorRenderer(type);
+    }
+
+
+    /**
+     * <p>The default behavior of this method is to
+     * call {@link javax.faces.render.RenderKit#getClientBehaviorRendererTypes()}
+     * on the wrapped {@link RenderKit} object.</p>
+     *
+     * @see javax.faces.render.RenderKit#getClientBehaviorRendererTypes()
+     */
+    @Override
+    public Iterator<String> getClientBehaviorRendererTypes() {
+        return getWrapped().getClientBehaviorRendererTypes();
+    }
+
+}
diff --git a/javax/faces/render/Renderer.java b/javax/faces/render/Renderer.java
new file mode 100644
index 0000000..2eb1d8d
--- /dev/null
+++ b/javax/faces/render/Renderer.java
@@ -0,0 +1,264 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+
+import java.io.IOException;
+import java.util.Iterator;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.ConverterException;
+
+
+/**
+ * <p>A <strong class="changed_modified_2_0 changed_modified_2_2">Renderer</strong> converts
+ * the internal representation of {@link UIComponent}s into the output
+ * stream (or writer) associated with the response we are creating for a
+ * particular request.  Each <code>Renderer</code> knows how to render
+ * one or more {@link UIComponent} types (or classes), and advertises a
+ * set of render-dependent attributes that it recognizes for each
+ * supported {@link UIComponent}.</p>
+ *
+ * <p>Families of {@link Renderer}s are packaged as a {@link RenderKit},
+ * and together support the rendering of all of the {@link UIComponent}s
+ * in a view associated with a {@link FacesContext}.  Within the set of
+ * {@link Renderer}s for a particular {@link RenderKit}, each must be
+ * uniquely identified by the <code>rendererType</code> property.</p>
+ *
+ * <p>Individual {@link Renderer} instances will be instantiated as requested
+ * during the rendering process, and will remain in existence for the
+ * remainder of the lifetime of a web application.  Because each instance
+ * may be invoked from more than one request processing thread simultaneously,
+ * they MUST be programmed in a thread-safe manner.</p>
+ *
+ * <div class="changed_added_2_0">
+
+ * <p>If the {@link javax.faces.event.ListenerFor} annotation is
+ * attached to the class definition of a <code>Renderer</code>, that
+ * class must also implement {@link
+ * javax.faces.event.ComponentSystemEventListener}, and the action
+ * pertaining to the processing of <code>ResourceDependency</code> on a
+ * <code>Renderer</code> described in {@link
+ * javax.faces.event.ListenerFor} must be taken. </p>
+
+ * <p>If the {@link javax.faces.application.ResourceDependency}
+ * annotation is attached to the class definition of a
+ * <code>Renderer</code>, the action pertaining to the processing of
+ * <code>ResourceDependency</code> on a <code>Renderer</code> described
+ * in {@link UIComponent#getChildren} must be taken. </p>
+
+ * </div>
+ */
+
+public abstract class Renderer {
+    
+    /**
+     * <p class="changed_added_2_2">The key in the component passthrough
+     * attributes {@code Map} for the localName of the element corresponding to the component.</p>
+     * 
+     * @since 2.2
+     */
+    public static final String PASSTHROUGH_RENDERER_LOCALNAME_KEY = "elementName";
+    
+    
+    // ------------------------------------------------------ Rendering Methods
+
+
+    /**
+     * <p>Decode any new state of the specified {@link UIComponent}
+     * from the request contained in the specified {@link FacesContext},
+     * and store that state on the {@link UIComponent}.</p>
+     *
+     * <p>During decoding, events may be enqueued for later processing
+     * (by event listeners that have registered an interest), by calling
+     * <code>queueEvent()</code> on the associated {@link UIComponent}.
+     * </p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     * @param component {@link UIComponent} to be decoded.
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  or <code>component</code> is <code>null</code>
+     */
+    public void decode(FacesContext context, UIComponent component) {
+	if (null == context || null == component) {
+	    throw new NullPointerException();
+	}
+    }
+
+
+    /**
+     * <p>Render the beginning specified {@link UIComponent} to the
+     * output stream or writer associated with the response we are creating.
+     * If the conversion attempted in a previous call to
+     * <code>getConvertedValue()</code> for this component failed, the state
+     * information saved during execution
+     * of <code>decode()</code> should be used to reproduce the incorrect
+     * input.</p>
+     *
+     * @param context {@link FacesContext} for the request we are processing
+     * @param component {@link UIComponent} to be rendered
+     *
+     * @throws IOException if an input/output error occurs while rendering
+     * @throws NullPointerException if <code>context</code>
+     *  or <code>component</code> is null
+     */
+    public void encodeBegin(FacesContext context,
+			    UIComponent component)
+        throws IOException {
+	if (null == context || null == component) {
+	    throw new NullPointerException();
+	}
+    }
+
+
+    /**
+     * <p>Render the child components of this {@link UIComponent}, following
+     * the rules described for <code>encodeBegin()</code> to acquire the
+     * appropriate value to be rendered.  This method will only be called
+     * if the <code>rendersChildren</code> property of this component
+     * is <code>true</code>.</p>
+     *
+     * @param context {@link FacesContext} for the response we are creating
+     * @param component {@link UIComponent} whose children are to be rendered
+     *
+     * @throws IOException if an input/output error occurs while rendering
+     * @throws NullPointerException if <code>context</code>
+     *  or <code>component</code> is <code>null</code>
+     */
+    public void encodeChildren(FacesContext context, UIComponent component)
+        throws IOException {
+        if (context == null || component == null) {
+            throw new NullPointerException();
+        }
+        if (component.getChildCount() > 0) {
+        	Iterator<UIComponent> kids = component.getChildren().iterator();
+        	while (kids.hasNext()) {
+        	    UIComponent kid = kids.next();
+        	    kid.encodeAll(context);
+        	}
+        }
+    }
+
+
+    /**
+     * <p>Render the ending of the current state of the specified
+     * {@link UIComponent}, following the rules described for
+     * <code>encodeBegin()</code> to acquire the appropriate value
+     * to be rendered.</p>
+     *
+     * @param context {@link FacesContext} for the response we are creating
+     * @param component {@link UIComponent} to be rendered
+     *
+     * @throws IOException if an input/output error occurs while rendering
+     * @throws NullPointerException if <code>context</code>
+     *  or <code>component</code> is <code>null</code>
+     */
+    public void encodeEnd(FacesContext context,
+			  UIComponent component)
+        throws IOException {
+	if (null == context || null == component) {
+	    throw new NullPointerException();
+	}
+    }
+
+    /**
+     * <p>Convert the component generated client id to a form suitable
+     * for transmission to the client.</p>
+     *
+     * <p>The default implementation returns the argument
+     * <code>clientId</code> unchanged.</p>
+     *
+     * @param context {@link FacesContext} for the current request
+     * @param clientId the client identifier to be converted to client a
+     * specific format.
+     *
+     * @throws NullPointerException if <code>context</code>
+     *  or <code>clientId</code> is <code>null</code>
+     */ 
+    public String convertClientId(FacesContext context, String clientId) {
+
+        if ((context == null) || (clientId == null)) {
+            throw new NullPointerException();
+        }
+        return (clientId);
+
+    }
+
+    /**
+     * <p>Return a flag indicating whether this {@link Renderer} is responsible
+     * for rendering the children the component it is asked to render.
+     * The default implementation returns <code>false</code>.</p>
+     */
+
+    public boolean getRendersChildren() {
+	return false;
+    }
+
+
+    /**
+     * <p>Attempt to convert previously stored state information into an
+     * object of the type required for this component (optionally using the
+     * registered {@link javax.faces.convert.Converter} for this component,
+     * if there is one).  If conversion is successful, the new value
+     * should be returned from this method;  if not, a
+     * {@link ConverterException} should be thrown.</p>
+     * 
+     * @param context {@link FacesContext} for the request we are processing
+     * @param component {@link UIComponent} to be decoded.
+     * @param submittedValue a value stored on the component during
+     *    <code>decode</code>.
+     * 
+     * @throws ConverterException if the submitted value
+     *   cannot be converted successfully.
+     * @throws NullPointerException if <code>context</code>
+     *  or <code>component</code> is <code>null</code>
+     */
+    public Object getConvertedValue(FacesContext context,
+                                    UIComponent  component,
+                                    Object       submittedValue)
+        throws ConverterException {
+        if ((context == null) || (component == null)) {
+            throw new NullPointerException();
+        }
+        return submittedValue;
+    }
+}
diff --git a/javax/faces/render/RendererWrapper.java b/javax/faces/render/RendererWrapper.java
new file mode 100644
index 0000000..eded474
--- /dev/null
+++ b/javax/faces/render/RendererWrapper.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ * 
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ * 
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ * 
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ * 
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ * 
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+
+ */
+package javax.faces.render;
+
+import java.io.IOException;
+import javax.faces.FacesWrapper;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.ConverterException;
+
+
+/**
+ * <p class="changed_added_2_2">Provides a simple implementation of 
+ * {@link Renderer} that can be subclassed by developers wishing to
+ * provide specialized behavior to an existing {@link Renderer}
+ * instance.  The default implementation of all methods is to call
+ * through to the wrapped {@link Renderer} instance.</p>
+ *
+ * <p class="changed_added_2_2">Usage: extend this class and override 
+ * {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.2
+ */
+
+public abstract class RendererWrapper extends Renderer implements FacesWrapper<Renderer> {
+
+    /**
+     * @return the instance we are wrapping
+     */
+    @Override
+    public abstract Renderer getWrapped();
+    
+
+    @Override
+    public String convertClientId(FacesContext context, String clientId) {
+        return getWrapped().convertClientId(context, clientId);
+    }
+    
+    @Override
+    public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue) throws ConverterException {
+        return getWrapped().getConvertedValue(context, component, submittedValue);
+    }
+
+    @Override
+    public void decode(FacesContext context, UIComponent component) {
+        getWrapped().decode(context, component);
+    }
+
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
+        getWrapped().encodeBegin(context, component);
+    }
+
+    @Override
+    public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
+        getWrapped().encodeChildren(context, component);
+    }
+
+    @Override
+    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
+        getWrapped().encodeEnd(context, component);
+    }
+
+    @Override
+    public boolean getRendersChildren() {
+        return getWrapped().getRendersChildren();
+    }
+    
+}
diff --git a/javax/faces/render/ResponseStateManager.java b/javax/faces/render/ResponseStateManager.java
new file mode 100644
index 0000000..4aae0d7
--- /dev/null
+++ b/javax/faces/render/ResponseStateManager.java
@@ -0,0 +1,475 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.render;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.application.StateManager;
+import javax.faces.application.StateManager.SerializedView;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_2">
+ * ResponseStateManager</strong>
+ * is the helper class to {@link javax.faces.application.StateManager}
+ * that knows the specific rendering technology being used to generate
+ * the response.  It is a singleton abstract class, vended by the {@link
+ * RenderKit}.  This class knows the mechanics of saving state, whether
+ * it be in hidden fields, session, or some combination of the two.</p>
+ */
+
+public abstract class ResponseStateManager {
+    
+    private static Logger log = Logger.getLogger("javax.faces.render");
+
+    /**
+     * <p>The name of the request parameter used by the default
+     * implementation of {@link
+     * javax.faces.application.ViewHandler#calculateRenderKitId} to
+     * derive a RenderKit ID.</p>
+     */
+    public static final String RENDER_KIT_ID_PARAM =
+            "javax.faces.RenderKitId";
+            
+    /**
+     * <p><span class="changed_modified_2_0
+     * changed_modified_2_2">Implementations</span> must use this
+     * constant field value as the name of the client parameter in which
+     * to save the state between requests. <span
+     * class="changed_added_2_2">The <code>id</code> attribute must be a
+     * concatenation of the return from {@link
+     * javax.faces.component.UIViewRoot#getContainerClientId}, the
+     * return from {@link
+     * javax.faces.component.UINamingContainer#getSeparatorChar}, this
+     * constant field value, the separator char, and a number that is 
+     * guaranteed to be unique with respect to all the other instances of
+     * this kind of client parameter in the view.</span>
+     * 
+     * </span></p>
+
+     * <p class="changed_added_2_0">It is strongly recommend that
+     * implementations guard against cross site scripting attacks by at
+     * least making the value of this parameter difficult to
+     * predict.</p>
+     *
+     * @since 1.2
+     */
+
+    public static final String VIEW_STATE_PARAM = "javax.faces.ViewState";
+    
+    /**
+     * <p class="changed_added_2_2">The name of the hidden field that
+     * refers to the encoded ClientWindow.  This field is only used if 
+     * {@link javax.faces.lifecycle.ClientWindow#CLIENT_WINDOW_MODE_PARAM_NAME}
+     * is not "none". The <code>id</code> attribute must be a
+     * concatenation of the return from {@link
+     * javax.faces.component.UIViewRoot#getContainerClientId}, the
+     * return from {@link
+     * javax.faces.component.UINamingContainer#getSeparatorChar}, this
+     * constant field value, the separator char, and a number that is 
+     * guaranteed to be unique with respect to all the other instances of
+     * this kind of client parameter in the view.  The value of this parameter 
+     * is the return from {@link javax.faces.lifecycle.ClientWindow#getId}.</p>
+     * 
+     * @since 2.2
+     * 
+     */
+    
+    public static final String CLIENT_WINDOW_PARAM = "javax.faces.ClientWindow";
+    
+    /**
+     * <p class="changed_added_2_2">The name of the URL query parameter for transmitting
+     * the client window id.  This parameter is only used if 
+     * {@link javax.faces.lifecycle.ClientWindow#CLIENT_WINDOW_MODE_PARAM_NAME}
+     * is not "none".  The name of the parameter is given by the constant value 
+     * of this field.  The value of this parameter 
+     * is the return from {@link javax.faces.lifecycle.ClientWindow#getId}.
+     * </p>
+     * 
+     * @since 2.2
+     */
+    
+    public static final String CLIENT_WINDOW_URL_PARAM = "jfwid";
+    
+    /**
+     * <p class="changed_added_2_2">The value of this constant is taken
+     * to be the name of a request parameter whose value is inspected
+     * to verify the safety of an incoming non-postback request with respect
+     * to the currently configured <code>Set</code> of protected views
+     * for this application.</p>
+     * 
+     * @since 2.2
+     */
+    
+    public static final String NON_POSTBACK_VIEW_TOKEN_PARAM = 
+            "javax.faces.Token";
+    
+    /**       
+     * <p><span class="changed_modified_2_2"">Take</span> the argument 
+     * <code>state</code> and write it into the
+     * output using the current {@link ResponseWriter}, which must be
+     * correctly positioned already.</p>
+     * 
+     * <p class="changed_added_2_2">Call {@link FacesContext#getViewRoot()}.
+     * If {@link javax.faces.component.UIComponent#isTransient()}
+     * returns {@code true}, take implementation specific action so that the 
+     * following call to {@link #isStateless} returns {@code true} and return.
+     * Otherwise, proceed as follows.</p>
+     *
+     * <p>If the state is to be written out to hidden fields, the
+     * implementation must take care to make all necessary character
+     * replacements to make the Strings suitable for inclusion as an
+     * HTTP request paramater.</p>
+     *
+     * <p>If the state saving method for this application is {@link
+     * javax.faces.application.StateManager#STATE_SAVING_METHOD_CLIENT},
+     * the implementation <span class="changed_modified_2_2">must</span> 
+     * encrypt the state to be saved to the
+     * client <span class="changed_modified_2_2">in a tamper evident 
+     * manner</span>.</p>
+     *
+     * <p>If the state saving method for this application is {@link
+     * javax.faces.application.StateManager#STATE_SAVING_METHOD_SERVER},
+     * and the current request is an <code>Ajax</code> request
+     * {@link javax.faces.context.PartialViewContext#isAjaxRequest} returns
+     * <code>true</code>), use the current view state identifier if it is
+     * available (do not generate a new identifier).</p>
+     * 
+     * <p>Write out the render kit identifier associated with this 
+     * <code>ResponseStateManager</code> implementation with the name
+     * as the value of the <code>String</code> constant 
+     * <code>ResponseStateManager.RENDER_KIT_ID_PARAM</code>.  The  
+     * render kit identifier must not be written if:</p>
+     * <ul>
+     * <li>it is the default render kit identifier as returned by 
+     * {@link javax.faces.application.Application#getDefaultRenderKitId()} or</li>
+     * <li>the render kit identfier is the value of 
+     * <code>javax.faces.render.RenderKitFactory.HTML_BASIC_RENDER_KIT</code> and 
+     * {@link javax.faces.application.Application#getDefaultRenderKitId()} returns <code>null</code>.
+     * </li>
+     * </ul> 
+     *
+     * <p>For backwards compatability with existing
+     * <code>ResponseStateManager</code> implementations, the default
+     * implementation of this method checks if the argument is an
+     * instance of <code>SerializedView</code>.  If so, it calls through
+     * to {@link
+     * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView)}.
+     * If not, it expects the state to be a two element Object array.  It creates 
+     * an instance of <code>SerializedView</code> and
+     * stores the state as the treeStructure, and passes it to {@link
+     * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView)}.</p>
+     * 
+     * <p class="changed_added_2_2">The {@link
+     * javax.faces.lifecycle.ClientWindow} must be written using these
+     * steps.  Call {@link
+     * javax.faces.context.ExternalContext#getClientWindow}.  If the
+     * result is <code>null</code>, take no further action regarding the
+     * <code>ClientWindow</code>.  If the result is
+     * non-<code>null</code>, write a hidden field whose name is {@link
+     * #CLIENT_WINDOW_PARAM} and whose id is
+     * <code><VIEW_ROOT_CONTAINER_CLIENT_ID><SEP>javax.faces.ClientWindow<SEP><UNIQUE_PER_VIEW_NUMBER></code>
+     * where <SEP> is the currently configured
+     * <code>UINamingContainer.getSeparatorChar()</code>.
+     * <VIEW_ROOT_CONTAINER_CLIENT_ID> is the return from
+     * <code>UIViewRoot.getContainerClientId()</code> on the view from
+     * whence this state originated.  <UNIQUE_PER_VIEW_NUMBER> is
+     * a number that must be unique within this view, but must not be
+     * included in the view state.  The value of the field is implementation
+     * dependent but must uniquely identify this window within the user's session.</p>
+     *
+     *
+     * @since 1.2
+     *
+     * @param context The {@link FacesContext} instance for the current request
+     * @param state The serialized state information previously saved
+     * @throws IOException if the state argument is not an array of length 2.
+     *
+     */
+    public void writeState(FacesContext context,
+        Object state) throws IOException {
+        
+	SerializedView view;
+	if (state instanceof SerializedView) {
+	    view = (SerializedView) state;
+	}
+	else {
+            if (state instanceof Object[]) {
+                Object[] stateArray = (Object[])state;
+                if (2 == stateArray.length) {
+	            StateManager stateManager = 
+		        context.getApplication().getStateManager();
+	            view = stateManager.new SerializedView(stateArray[0], 
+                        stateArray[1]);
+                } else {
+                    //PENDING - I18N
+                    if (log.isLoggable(Level.SEVERE)) {
+                        log.log(Level.SEVERE, "State is not an expected array of length 2.");
+                    }
+                    throw new IOException("State is not an expected array of length 2.");
+                }
+            } else {
+                //PENDING - I18N
+                if (log.isLoggable(Level.SEVERE)) {
+                    log.log(Level.SEVERE, "State is not an expected array of length 2.");
+                }
+                throw new IOException("State is not an expected array of length 2.");
+            }
+	}
+	writeState(context, view);
+    }
+
+    /**
+     * <p>Take the argument <code>state</code> and write it into
+     * the output using the current {@link ResponseWriter}, which
+     * must be correctly positioned already.</p>
+     *
+     * <p>If the {@link
+     * javax.faces.application.StateManager.SerializedView} is to be
+     * written out to hidden fields, the implementation must take care
+     * to make all necessary character replacements to make the Strings
+     * suitable for inclusion as an HTTP request paramater.</p>
+     *
+     * <p>If the state saving method for this application is {@link
+     * javax.faces.application.StateManager#STATE_SAVING_METHOD_CLIENT},
+     * the implementation may encrypt the state to be saved to the
+     * client.  We recommend that the state be unreadable by the client,
+     * and also be tamper evident.  The reference implementation follows
+     * these recommendations.  </p>
+     *
+     * @deprecated This method has been replaced by {@link
+     * #writeState(javax.faces.context.FacesContext,java.lang.Object)}.
+     * The default implementation creates a two element
+     * <code>Object</code> array with the first element being the return
+     * from calling {@link SerializedView#getStructure}, and the second
+     * being the return from {@link SerializedView#getState}.  It then
+     * passes this <code>Object</code> array to {@link #writeState}.
+     * 
+     * @param context The {@link FacesContext} instance for the current request
+     * @param state The serialized state information previously saved
+     *
+     */
+    public void writeState(FacesContext context,
+                           SerializedView state) throws IOException {
+
+        if (state != null) {
+            writeState(context, new Object[]{state.getStructure(),
+                                             state.getState()});
+        }
+        
+    }
+    
+    /**
+     * <p class="changed_added_2_2">If the preceding call to {@link #writeState(javax.faces.context.FacesContext, java.lang.Object)}
+     * was stateless, return {@code true}.  If the preceding call to {@code writeState()} was
+     * stateful, return {@code false}.  Otherwise throw {@code IllegalStateException}.</p>
+     * 
+     * <div class="changed_added_2_2">
+     * 
+     * <p>To preserve backward compatibility
+     * with custom implementations that may have extended from an earlier
+     * version of this class, an implementation is provided that returns 
+     * <code>false</code>.  A compliant implementation must override this 
+     * method to take the specified action.</p>
+     * 
+     * </div>
+     * 
+     * @param context The {@link FacesContext} instance for the current request
+     * @param viewId View identifier of the view to be restored
+     * @throws NullPointerException if the argument {@code context} is {@code null}.
+     * @throws IllegalStateException if this method is invoked and the statefulness
+     * of the preceding call to {@link #writeState(javax.faces.context.FacesContext, java.lang.Object)}
+     * cannot be determined.
+     * 
+     * @since 2.2
+     * 
+     *  
+     */
+    
+    public boolean isStateless(FacesContext context, String viewId) {
+        return false;
+    }
+    
+    /**
+     * <p><span class="changed_modified_2_2">The</span> implementation must 
+     * inspect the current request and return
+     * an Object representing the tree structure and component state
+     * passed in to a previous invocation of {@link
+     * #writeState(javax.faces.context.FacesContext,java.lang.Object)}.</p>
+     * 
+     * <p class="changed_added_2_2">If the state saving method for this 
+     * application is {@link
+     * javax.faces.application.StateManager#STATE_SAVING_METHOD_CLIENT},
+     * <code>writeState()</code> will have encrypted the state in a tamper
+     * evident manner.  If the state fails to decrypt, or decrypts but 
+     * indicates evidence of tampering, a 
+     * {@link javax.faces.application.ProtectedViewException} must be thrown.</p>
+     *
+     * <p>For backwards compatability with existing
+     * <code>ResponseStateManager</code> implementations, the default
+     * implementation of this method calls {@link
+     * #getTreeStructureToRestore} and {@link
+     * #getComponentStateToRestore} and creates and returns a two
+     * element <code>Object</code> array with element zero containing
+     * the <code>structure</code> property and element one containing
+     * the <code>state</code> property of the
+     * <code>SerializedView</code>.</p>
+     *
+     * @since 1.2
+     *
+     * @param context The {@link FacesContext} instance for the current request
+     * @param viewId View identifier of the view to be restored
+     *
+     * @return the tree structure and component state Object passed in
+     * to <code>writeState</code>.  If this is an initial request, this
+     * method returns <code>null</code>.
+     */
+ 
+    public Object getState(FacesContext context, String viewId) {
+	Object stateArray[] = { getTreeStructureToRestore(context, viewId),
+				getComponentStateToRestore(context) };
+	return stateArray;
+    }
+
+
+    /**
+     * <p>The implementation must inspect the current request and return
+     * the tree structure Object passed to it on a previous invocation of
+     * <code>writeState()</code>.</p>
+     *
+     * @deprecated This method has been replaced by {@link #getState}.
+     * The default implementation returns <code>null</code>.
+     *
+     * @param context The {@link FacesContext} instance for the current request
+     * @param viewId View identifier of the view to be restored
+     *
+     */
+    public Object getTreeStructureToRestore(FacesContext context, 
+					    String viewId) {
+	return null;
+    }
+
+
+    /**
+     * <p>The implementation must inspect the current request and return
+     * the component state Object passed to it on a previous invocation
+     * of <code>writeState()</code>.</p>
+     *
+     * @deprecated This method has been replaced by {@link #getState}.
+     * The default implementation returns <code>null</code>.
+     *
+     * @param context The {@link FacesContext} instance for the current request
+     *
+     */
+    public Object getComponentStateToRestore(FacesContext context) {
+	return null;
+    }
+
+    /**
+     * <p>Return true if the current request is a postback.  This method
+     * is leveraged from the <i>Restore View Phase</i> to determine if
+     * {@link javax.faces.application.ViewHandler#restoreView} or {@link
+     * javax.faces.application.ViewHandler#createView} should be called.
+     * The default implementation must return <code>true</code> if this
+     * <code>ResponseStateManager</code> instance wrote out state on a
+     * previous request to which this request is a postback,
+     * <code>false</code> otherwise.</p>
+     *
+     * <p>The implementation of this method for the Standard HTML
+     * RenderKit must consult the {@link
+     * javax.faces.context.ExternalContext}'s
+     * <code>requestParameterMap</code> and return <code>true</code> if
+     * and only if there is a key equal to the value of the symbolic
+     * constant {@link #VIEW_STATE_PARAM}.</p>
+     *
+     * <p>For backwards compatability with implementations of
+     * <code>ResponseStateManager</code> prior to JSF 1.2, a default
+     * implementation is provided that consults the {@link
+     * javax.faces.context.ExternalContext}'s <code>requestParameterMap</code> and return
+     * <code>true</code> if its size is greater than 0.</p>
+     *
+     * @since 1.2
+     */
+
+    public boolean isPostback(FacesContext context) {
+        return (!context.getExternalContext().getRequestParameterMap().isEmpty());
+    }
+
+    /**
+     * <p>
+     * Return the specified state as a <code>String</code> without any markup
+     * related to the rendering technology supported by this ResponseStateManager.
+     * </p>
+     * 
+     * @param context the {@link FacesContext} for the current request
+     * @param state the state from which the String version will be generated
+     *  from
+     * @return the view state for this request without any markup specifics
+     *
+     * @since 2.0
+     */
+    public String getViewState(FacesContext context, Object state) {
+        return null;
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Compliant implementations must return a 
+     * cryptographically strong token for use to protect views in this 
+     * application. For backwards compatability with earlier revisions, a
+     * default implementation is provided that simply returns <code>null</code>.
+     * </p>
+     * 
+     * @param context the {@link FacesContext} for the current request
+     * 
+     * @return a cryptographically strong value
+     *
+     * @since 2.2
+     */
+    public String getCryptographicallyStrongTokenFromSession(FacesContext context) {
+        return null;
+    }
+}
diff --git a/javax/faces/render/package.html b/javax/faces/render/package.html
new file mode 100644
index 0000000..38d36ac
--- /dev/null
+++ b/javax/faces/render/package.html
@@ -0,0 +1,55 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.render"</title>
+</head>
+<body bgcolor="white">
+<p><span class="changed_modified_2_0 changed_modified_2_2">Classes</span> 
+    and interfaces
+defining the rendering model.  The main class in this package is {@link
+javax.faces.render.RenderKit}.  <code>RenderKit</code> vends a set of
+{@link javax.faces.render.Renderer} instances which provide rendering
+capability for a specific client device type.</p>
+</body>
+</html>
diff --git a/javax/faces/validator/BeanValidator.java b/javax/faces/validator/BeanValidator.java
new file mode 100644
index 0000000..7c032aa
--- /dev/null
+++ b/javax/faces/validator/BeanValidator.java
@@ -0,0 +1,502 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import java.lang.reflect.Array;
+import java.util.*;
+import java.util.logging.Logger;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.component.PartialStateHolder;
+import javax.validation.ConstraintViolation;
+import javax.validation.MessageInterpolator;
+import javax.validation.Validation;
+import javax.validation.ValidatorContext;
+import javax.validation.ValidationException;
+import javax.validation.ValidatorFactory;
+import javax.validation.groups.Default;
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_0_rev_a">A Validator</span> that delegates
+ * validation of the bean property to the Bean Validation API.</p>
+ * @since 2.0
+ */
+public class BeanValidator implements Validator, PartialStateHolder {
+    
+    private static final Logger LOGGER =
+         Logger.getLogger("javax.faces.validator", "javax.faces.LogStrings");
+
+    private String validationGroups;
+
+    private transient Class[] cachedValidationGroups;
+
+    /**
+     * <p class="changed_added_2_0">The standard validator id for this
+     * validator, as defined by the JSF specification.</p>
+     */
+    public static final String VALIDATOR_ID = "javax.faces.Bean";
+
+	/**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * a constraint failure is found.  The message format string for
+     * this message may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the interpolated message from Bean Validation.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     * <p>The message format string provided by the default implementation should be a the placeholder {0},
+     * thus fully delegating the message handling to Bean Validation. A developer can override this message
+     * format string to make it conform to other JSF validator messages (i.e., by including the component label)</p>
+     */
+    public static final String MESSAGE_ID = "javax.faces.validator.BeanValidator.MESSAGE";
+
+    /**
+     * <p class="changed_added_2_0">The name of the servlet context
+     * attribute which holds the object used by JSF to obtain Validator
+     * instances.  If the servlet context attribute is missing or
+     * contains a null value, JSF is free to use this servlet context
+     * attribute to store the ValidatorFactory bootstrapped by this
+     * validator.</p>
+     */
+    public static final String VALIDATOR_FACTORY_KEY = "javax.faces.validator.beanValidator.ValidatorFactory";
+
+    /**
+     * <p class="changed_added_2_0">The delimiter that is used to
+     * separate the list of fully-qualified group names as strings.</p>
+     */
+    public static final String VALIDATION_GROUPS_DELIMITER = ",";
+
+    /**
+     * <p class="changed_added_2_0">The regular expression pattern that
+     * identifies an empty list of validation groups.</p>
+     */
+    public static final String EMPTY_VALIDATION_GROUPS_PATTERN = "^[\\W" + VALIDATION_GROUPS_DELIMITER + "]*$";
+    
+    /**
+     * <p class="changed_added_2_0">If this param is defined, and
+     * calling <code>toLowerCase().equals(“true”)</code> on a 
+     * <code>String</code> representation of its value returns 
+     * <code>true</code>, the runtime must not automatically add the
+     * validator with validator-id equal to the value of the symbolic
+     * constant {@link #VALIDATOR_ID} to the list of default validators.  
+     * Setting this parameter to <code>true</code> will have the effect 
+     * of disabling the automatic installation of Bean Validation to 
+     * every input component in every view in the application, though 
+     * manual installation is still possible.</p>
+     * 
+     */
+    public static final String DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME =
+            "javax.faces.validator.DISABLE_DEFAULT_BEAN_VALIDATOR";
+
+    /**
+     * <p class="changed_added_2_0">A comma-separated list of validation
+     * groups which are used to filter which validations get checked by
+     * this validator. If the validationGroupsArray attribute is omitted or
+     * is empty, the validation groups will be inherited from the branch
+     * defaults or, if there are no branch defaults, the {@link
+     * javax.validation.groups.Default} group will be used.</p>
+     *
+     * @param validationGroups comma-separated list of validation groups
+     * (string with only spaces and commas treated as null)
+     */
+
+    public void setValidationGroups(String validationGroups) {
+
+        clearInitialState();        
+        String newValidationGroups = validationGroups;
+        
+        // treat empty list as null
+        if (newValidationGroups != null && newValidationGroups.matches(EMPTY_VALIDATION_GROUPS_PATTERN)) {
+            newValidationGroups = null;
+        }
+        
+        // only clear cache of validation group classes if value is changing
+        if (newValidationGroups == null && validationGroups != null) {
+            cachedValidationGroups = null;
+        }
+        
+        if (newValidationGroups != null && validationGroups != null && !newValidationGroups.equals(validationGroups)) {
+            cachedValidationGroups = null;
+        }
+        
+        if (newValidationGroups != null && validationGroups == null) {
+            cachedValidationGroups = null;
+        }
+        
+        this.validationGroups = newValidationGroups;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the validation groups passed
+     * to the Validation API when checking constraints.  If the
+     * validationGroupsArray attribute is omitted or empty, the validation
+     * groups will be inherited from the branch defaults, or if there
+     * are no branch defaults, the {@link
+     * javax.validation.groups.Default} group will be used.</p>
+     */
+    public String getValidationGroups() {
+        return validationGroups;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Verify that the value is valid
+     * according to the Bean Validation constraints.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * <p>Obtain a {@link ValidatorFactory} instance by calling {@link
+     * javax.validation.Validation#buildDefaultValidatorFactory}.</p>
+
+     * <p>Let <em>validationGroupsArray</em> be a <code>Class []</code>
+     * representing validator groups set on the component by the tag
+     * handler for this validator.  The first search component
+     * terminates the search for the validation groups value.  If no
+     * such value is found use the class name of {@link
+     * javax.validation.groups.Default} as the value of the validation
+     * groups.</p>
+
+     * <p>Let <em>valueExpression</em> be the return from calling {@link
+     * UIComponent#getValueExpression} on the argument
+     * <em>component</em>, passing the literal string
+     * “value” (without the quotes) as an argument.  If this
+     * application is running in an environment with a Unified EL
+     * Implementation for Java EE6 or later, obtain the
+     * <code>ValueReference</code> from <em>valueExpression</em> and let
+     * <em>valueBaseClase</em> be the return from calling
+     * <code>ValueReference.getBase()</code> and <em>valueProperty</em>
+     * be the return from calling
+     * <code>ValueReference.getProperty()</code>.  If an earlier version
+     * of the Unified EL is present, use the appropriate methods to
+     * inspect <em>valueExpression</em> and derive values for
+     * <em>valueBaseClass</em> and <em>valueProperty</em>.</p>
+
+     * <p>If no <code>ValueReference</code> can be obtained, take no
+     * action and return.</p>
+
+     * <p>If <code>ValueReference.getBase()</code> return
+     * <code>null</code>, take no action and return.</p>
+
+     * <p>Obtain the {@link ValidatorContext} from the {@link
+     * ValidatorFactory}.</p>
+
+     * <p>Decorate the {@link MessageInterpolator} returned from {@link
+     * ValidatorFactory#getMessageInterpolator} with one that leverages
+     * the <code>Locale</code> returned from {@link
+     * javax.faces.component.UIViewRoot#getLocale}, and store it in the
+     * <code>ValidatorContext</code> using {@link
+     * ValidatorContext#messageInterpolator}.</p>
+
+     * <p>Obtain the {@link javax.validation.Validator} instance from
+     * the <code>validatorContext</code>.</p>
+
+     * <p>Obtain a <code>javax.validation.BeanDescriptor</code> from the
+     * <code>javax.validation.Validator</code>.  If
+     * <code>hasConstraints()</code> on the <code>BeanDescriptor</code>
+     * returns false, take no action and return.  Otherwise proceed.</p>
+
+     * <p>Call {@link javax.validation.Validator#validateValue}, passing
+     * <em>valueBaseClass</em>, <em>valueProperty</em>, the
+     * <em>value</em> argument, and <em>validatorGroupsArray</em> as
+     * arguments.</p>
+
+     * <p>If the returned <code>Set<{@link
+     * ConstraintViolation}></code> is non-empty, for each element in
+     * the <code>Set</code>, create a {@link FacesMessage} where the
+     * summary and detail are the return from calling {@link
+     * ConstraintViolation#getMessage}.  Capture all such
+     * <code>FacesMessage</code> instances into a
+     * <code>Collection</code> and pass them to {@link
+     * ValidatorException#ValidatorException(java.util.Collection)},
+     * throwing the new exception.</p>
+
+     * </div>
+     *
+     * @param context {@inheritDoc}
+     * @param component {@inheritDoc}
+     * @param value {@inheritDoc}
+     *
+     * @throws ValidatorException   {@inheritDoc}
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (component == null) {
+            throw new NullPointerException();
+        }
+        ValueExpression valueExpression = component.getValueExpression("value");
+        if (valueExpression == null) {
+            return;
+        }
+
+        ValidatorFactory validatorFactory;
+        Object cachedObject = context.getExternalContext().getApplicationMap().get(VALIDATOR_FACTORY_KEY);
+        if (cachedObject instanceof ValidatorFactory) {
+            validatorFactory = (ValidatorFactory) cachedObject;
+        }
+        else {
+            try {
+                validatorFactory = Validation.buildDefaultValidatorFactory();
+            }
+            catch (ValidationException e) {
+                throw new FacesException("Could not build a default Bean Validator factory", e);
+            }
+            context.getExternalContext().getApplicationMap().put(VALIDATOR_FACTORY_KEY, validatorFactory);
+        }
+
+        ValidatorContext validatorContext = validatorFactory.usingContext();
+        MessageInterpolator jsfMessageInterpolator = 
+                new JsfAwareMessageInterpolator(context, 
+                           validatorFactory.getMessageInterpolator());
+        validatorContext.messageInterpolator(jsfMessageInterpolator);
+        javax.validation.Validator beanValidator = validatorContext.getValidator();
+        Class[] validationGroupsArray = parseValidationGroups(getValidationGroups());
+        
+        // PENDING(rlubke, driscoll): When EL 1.3 is present, we won't need
+        // this.
+        
+        ValueExpressionAnalyzer expressionAnalyzer = 
+                new ValueExpressionAnalyzer(valueExpression);
+        
+        ValueReference valueReference = expressionAnalyzer.getReference(context.getELContext());
+        if (valueReference == null) {
+            return;
+        }
+        if (isResolvable(valueReference, valueExpression)) {
+            Set<ConstraintViolation<?>> violations = null;
+            try {
+                //noinspection unchecked
+                violations =
+                        beanValidator.validateValue(valueReference.getBaseClass(),
+                                                    valueReference.getProperty(),
+                                                    value,
+                                                    validationGroupsArray);
+            } catch (IllegalArgumentException iae) {
+                String failureMessage = "Unable to validate expression " +
+                        valueExpression.getExpressionString() +
+               " using Bean Validation.  Unable to get value of expression. "+
+                        " Message from Bean Validation: " + iae.getMessage();
+                LOGGER.fine(failureMessage);
+            }
+
+            if (violations != null && !violations.isEmpty()) {
+                ValidatorException toThrow;
+                if (1 == violations.size()) {
+                    ConstraintViolation violation = violations.iterator().next();
+                    toThrow = new ValidatorException(MessageFactory.getMessage(
+                          context,
+                          MESSAGE_ID,
+                          violation.getMessage(),
+                          MessageFactory.getLabel(context, component)));
+                } else {
+                    Set<FacesMessage> messages = new LinkedHashSet<FacesMessage>(
+                          violations.size());
+                    for (ConstraintViolation violation : violations) {
+                        messages.add(MessageFactory.getMessage(context,
+                                                               MESSAGE_ID,
+                                                               violation.getMessage(),
+                                                               MessageFactory.getLabel(
+                                                                     context,
+                                                                     component)));
+                    }
+                    toThrow = new ValidatorException(messages);
+                }
+                throw toThrow;
+            }
+        }        
+    }
+    
+    private boolean isResolvable(ValueReference ref, 
+            ValueExpression valueExpression) {
+        Boolean result = null;
+        String failureMessage = null;
+        
+        if (null == valueExpression) {
+            failureMessage = "Unable to validate expression using Bean "+ 
+                    "Validation.  Expression must not be null.";
+            result = false;
+        } else if (null == ref) {
+            failureMessage = "Unable to validate expression " + 
+                    valueExpression.getExpressionString() +
+                    " using Bean Validation.  Unable to get value of expression.";
+            result = false;
+        } else {
+            Class baseClass = ref.getBaseClass();
+
+            // case 1, base classes of Map, List, or Array are not resolvable
+            if (null != baseClass) {
+                if (Map.class.isAssignableFrom(baseClass) ||
+                        Collection.class.isAssignableFrom(baseClass) ||
+                        Array.class.isAssignableFrom(baseClass)) {
+                    failureMessage = "Unable to validate expression " + valueExpression.getExpressionString() +
+                            " using Bean Validation.  Expression evaluates to a Map, List or array.";
+                    result = false;
+                }
+            }
+        }
+
+        result = ((null != result) ? result : true);
+        if (!result) {
+            LOGGER.fine(failureMessage);
+        }
+
+        return result;
+    }
+    
+
+    private Class[] parseValidationGroups(String validationGroupsStr) {
+        if (cachedValidationGroups != null) {
+            return cachedValidationGroups;
+        }
+
+        if (validationGroupsStr == null) {
+            cachedValidationGroups = new Class[] { Default.class };
+            return cachedValidationGroups;
+        }
+
+        List<Class> validationGroupsList = new ArrayList<Class>();
+        String[] classNames = validationGroupsStr.split(VALIDATION_GROUPS_DELIMITER);
+        for (String className : classNames) {
+            className = className.trim();
+            if (className.length() == 0) {
+                continue;
+            }
+
+            if (className.equals(Default.class.getName())) {
+                validationGroupsList.add(Default.class);
+            }
+            else {
+                try {
+                    validationGroupsList.add(Class.forName(className, false, Thread.currentThread().getContextClassLoader()));
+                } catch (ClassNotFoundException e1) {
+                    try {
+                        validationGroupsList.add(Class.forName(className));
+                    } catch (ClassNotFoundException e2) {
+                        throw new FacesException("Validation group not found: " + className);
+                    }
+                }
+            }
+        }
+
+        cachedValidationGroups = validationGroupsList.toArray(new Class[validationGroupsList.size()]);
+        return cachedValidationGroups;
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            Object values[] = new Object[1];
+            values[0] = validationGroups;
+            return values;
+        }
+        return null;
+    }
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+            Object values[] = (Object[]) state;
+            validationGroups = (String) values[0];
+        }
+    }
+
+    private boolean initialState;
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+
+    private boolean transientValue = false;
+
+    public boolean isTransient() {
+        return this.transientValue;
+    }
+
+    public void setTransient(boolean transientValue) {
+        this.transientValue = transientValue;
+    }
+
+    private static class JsfAwareMessageInterpolator implements MessageInterpolator {
+
+        private FacesContext context;
+        private MessageInterpolator delegate;
+
+        public JsfAwareMessageInterpolator(FacesContext context, MessageInterpolator delegate) {
+            this.context = context;
+            this.delegate = delegate;
+        }
+
+        public String interpolate(String message, MessageInterpolator.Context context) {
+            Locale locale = this.context.getViewRoot().getLocale();
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+            return delegate.interpolate(message, context, locale);
+        }
+
+        public String interpolate(String message, MessageInterpolator.Context context, Locale locale) {
+            return delegate.interpolate(message, context, locale);
+        }
+
+    }
+
+}
diff --git a/javax/faces/validator/DoubleRangeValidator.java b/javax/faces/validator/DoubleRangeValidator.java
new file mode 100644
index 0000000..417469c
--- /dev/null
+++ b/javax/faces/validator/DoubleRangeValidator.java
@@ -0,0 +1,443 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.PartialStateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+
+/**
+ * <p><strong
+ * class="changed_modified_2_0_rev_a">DoubleRangeValidator</strong> is a
+ * {@link Validator} that checks the value of the corresponding
+ * component against specified minimum and maximum values.  The
+ * following algorithm is implemented:</p>
+
+ * <ul>
+ * <li>If the passed value is <code>null</code>, exit immediately.</li>
+ * <li>If the current component value is not a floating point type, or
+ * a String that is convertible to double, throw a
+ * {@link ValidatorException} containing a
+ * TYPE_MESSAGE_ID message.</li>
+ * <li>If both a <code>maximum</code> and <code>minimum</code> property
+ * has been configured on this {@link Validator}, check the component
+ * value against both limits.  If the component value is not within
+ * this specified range, throw a {@link ValidatorException} containing a
+ * {@link #NOT_IN_RANGE_MESSAGE_ID} message.</li>
+ * <li>If a <code>maximum</code> property has been configured on this
+ * {@link Validator}, check the component value against
+ * this limit.  If the component value is greater than the
+ * specified maximum, throw a {@link ValidatorException} containing a
+ * MAXIMUM_MESSAGE_ID message.</li>
+ * <li>If a <code>minimum</code> property has been configured on this
+ * {@link Validator}, check the component value against
+ * this limit.  If the component value is less than the
+ * specified minimum, throw a {@link ValidatorException} containing a
+ * MINIMUM_MESSAGE_ID message.</li>
+ * </ul>
+ * <p/>
+ * <p>For all of the above cases that cause a {@link ValidatorException}
+ * to be thrown, if there are parameters to the message that match up
+ * with validator parameters, the values of these parameters must be
+ * converted using the {@link Converter} registered in the application
+ * under the converter id <code>javax.faces.Number</code>.  This allows
+ * the values to be localized according to the current
+ * <code>Locale</code>.</p>
+ */
+
+public class DoubleRangeValidator implements Validator, PartialStateHolder {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String VALIDATOR_ID = "javax.faces.DoubleRange";
+
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage}
+     * to be created if the maximum value check fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured maximum value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String MAXIMUM_MESSAGE_ID =
+         "javax.faces.validator.DoubleRangeValidator.MAXIMUM";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage}
+     * to be created if the minimum value check fails.  The message format
+     * string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured minimum value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String MINIMUM_MESSAGE_ID =
+         "javax.faces.validator.DoubleRangeValidator.MINIMUM";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the maximum or minimum value check fails, and both the maximum
+     * and minimum values for this validator have been set.  The message
+     * format string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured minimum value.</li>
+     * <li><code>{1}</code> replaced by the configured maximum value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String NOT_IN_RANGE_MESSAGE_ID =
+         "javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage}
+     * to be created if the current value of this component is not of the
+     * correct type.   The message format string for this message may
+     * optionally include a <code>{0}</code> placeholder that will be
+     * replaced by a <code>String</code> whose value is the label of
+     * the input component that produced this message.</p>
+     */
+    public static final String TYPE_MESSAGE_ID =
+         "javax.faces.validator.DoubleRangeValidator.TYPE";
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a {@link Validator} with no preconfigured limits.</p>
+     */
+    public DoubleRangeValidator() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a {@link Validator} with the specified preconfigured
+     * limit.</p>
+     *
+     * @param maximum Maximum value to allow
+     */
+    public DoubleRangeValidator(double maximum) {
+
+        super();
+        setMaximum(maximum);
+
+    }
+
+
+    /**
+     * <p>Construct a {@link Validator} with the specified preconfigured
+     * limits.</p>
+     *
+     * @param maximum Maximum value to allow
+     * @param minimum Minimum value to allow
+     */
+    public DoubleRangeValidator(double maximum, double minimum) {
+
+        super();
+        setMaximum(maximum);
+        setMinimum(minimum);
+
+    }
+
+    // -------------------------------------------------------------- Properties
+
+
+    private Double maximum;
+
+    /**
+     * <p>Return the maximum value to be enforced by this {@link
+     * Validator} or <code>Double.MAX_VALUE</code> if it has not been
+     * set.</p>
+     */
+    public double getMaximum() {
+
+        return (this.maximum != null ? this.maximum : Double.MAX_VALUE);
+
+    }
+
+
+    /**
+     * <p>Set the maximum value to be enforced by this {@link Validator}.</p>
+     *
+     * @param maximum The new maximum value
+     */
+    public void setMaximum(double maximum) {
+
+        clearInitialState();
+        this.maximum = maximum;
+
+    }
+
+
+    private Double minimum;
+
+
+    /**
+     * <p>Return the minimum value to be enforced by this {@link
+     * Validator}, or <code>Double.MIN_VALUE</code> if it has not been
+     * set.</p>
+     */
+    public double getMinimum() {
+
+        return (this.minimum != null ? this.minimum : Double.MIN_VALUE);
+
+    }
+
+
+    /**
+     * <p>Set the minimum value to be enforced by this {@link Validator}.</p>
+     *
+     * @param minimum The new minimum value
+     */
+    public void setMinimum(double minimum) {
+
+        clearInitialState();
+        this.minimum = minimum;
+
+    }
+
+    // ------------------------------------------------------- Validator Methods
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     * @throws ValidatorException   {@inheritDoc}
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) throws ValidatorException {
+        if ((context == null) || (component == null)) {
+            throw new NullPointerException();
+        }
+        if (value != null) {
+            try {
+                double converted = doubleValue(value);
+                if (isMaximumSet() &&
+                     (converted > maximum)) {
+                    if (isMinimumSet()) {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  NOT_IN_RANGE_MESSAGE_ID,
+                                  stringValue(component, minimum, context),
+                                  stringValue(component, maximum, context),
+                                  MessageFactory.getLabel(context, component)));
+
+                    } else {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  MAXIMUM_MESSAGE_ID,
+                                  stringValue(component, maximum, context),
+                                  MessageFactory.getLabel(context, component)));
+                    }
+                }
+                if (isMinimumSet() &&
+                     (converted < minimum)) {
+                    if (isMaximumSet()) {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  NOT_IN_RANGE_MESSAGE_ID,
+                                  stringValue(component, minimum, context),
+                                  stringValue(component, maximum, context),
+                                  MessageFactory.getLabel(context, component)));
+
+                    } else {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  MINIMUM_MESSAGE_ID,
+                                  stringValue(component, minimum, context),
+                                  MessageFactory.getLabel(context, component)));
+                    }
+                }
+            } catch (NumberFormatException e) {
+                throw new ValidatorException(MessageFactory.getMessage
+                     (context, TYPE_MESSAGE_ID,
+                          MessageFactory.getLabel(context, component)), e);
+            }
+        }
+
+    }
+
+
+    public boolean equals(Object otherObj) {
+
+        if (!(otherObj instanceof DoubleRangeValidator)) {
+            return false;
+        }
+        DoubleRangeValidator other = (DoubleRangeValidator) otherObj;
+        return ((this.getMaximum() == other.getMaximum())
+                && (this.getMinimum() == other.getMinimum())
+                && (this.isMaximumSet() == other.isMaximumSet())
+                && (this.isMinimumSet() == other.isMinimumSet()));
+
+    }
+
+
+    public int hashCode() {
+
+        int hashCode = (Double.valueOf(this.getMinimum()).hashCode()
+             + Double.valueOf(this.getMaximum()).hashCode()
+             + Boolean.valueOf(isMinimumSet()).hashCode()
+             + Boolean.valueOf(isMaximumSet()).hashCode());
+        return (hashCode);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Return the specified attribute value, converted to a
+     * <code>double</code>.</p>
+     *
+     * @param attributeValue The attribute value to be converted
+     * @throws NumberFormatException if conversion is not possible
+     */
+    private static double doubleValue(Object attributeValue)
+         throws NumberFormatException {
+
+        if (attributeValue instanceof Number) {
+            return (((Number) attributeValue).doubleValue());
+        } else {
+            return (Double.parseDouble(attributeValue.toString()));
+        }
+
+    }
+
+    private static String stringValue(UIComponent component,
+                                      Double toConvert,
+                                      FacesContext context) {
+
+        Converter converter = context.getApplication().createConverter("javax.faces.Number");
+        return converter.getAsString(context, component, toConvert);
+
+    }
+
+    private boolean isMaximumSet() {
+
+        return (maximum != null);
+
+    }
+
+
+    private boolean isMinimumSet() {
+
+        return (minimum != null);
+
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            Object values[] = new Object[2];
+            values[0] = maximum;
+            values[1] = minimum;
+            return (values);
+        }
+        return null;
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+            Object values[] = (Object[]) state;
+            maximum = (Double) values[0];
+            minimum = (Double) values[1];
+        }
+
+    }
+
+
+    private boolean transientValue = false;
+
+
+    public boolean isTransient() {
+
+        return (this.transientValue);
+
+    }
+
+
+    public void setTransient(boolean transientValue) {
+
+        this.transientValue = transientValue;
+
+    }
+
+    private boolean initialState;
+
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+}
diff --git a/javax/faces/validator/FacesValidator.java b/javax/faces/validator/FacesValidator.java
new file mode 100644
index 0000000..587d75e
--- /dev/null
+++ b/javax/faces/validator/FacesValidator.java
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.Inherited;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span>
+ * presence of this annotation on a
+ * class automatically registers the class with the runtime as a {@link
+ * Validator}.  The value of the {@link #value} attribute is taken to be
+ * the <em>validator-id</em> and the fully qualified class name of the
+ * class to which this annotation is attached is taken to be the
+ * <em>validator-class</em>.  The implementation must guarantee that for
+ * each class annotated with <code>FacesValidator</code>, found with the
+ * algorithm in section JSF.11.5,
+ * {@link
+ * javax.faces.application.Application#addValidator(java.lang.String,java.lang.String)}
+ * is called, passing the derived <em>validator-id</em> as the first
+ * argument and the derived <em>validator-class</em> as the second
+ * argument.  The implementation must guarantee that all such calls to
+ * <code>addValidator()</code> happen during application startup time
+ * and before any requests are serviced.</p>
+ *
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface FacesValidator {
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span> value of this annotation
+     * attribute is taken to be the <em>validator-id</em> with which
+     * instances of this class of component can be instantiated by
+     * calling {@link
+     * javax.faces.application.Application#createValidator(java.lang.String)}.
+     * <span class="changed_added_2_2">If no value is specified, or the value is
+     * <code>null</code>, the value is taken to be the return of calling
+     * <code>getSimpleName</code> on the class to which this annotation
+     * is attached and lowercasing the first character.  If more than one
+     * validator with this derived name is found, the results are undefined.</span></p>
+     */ 
+
+    String value() default "";
+
+    /**
+     * <p class="changed_added_2_0">If <code>true</code>, the validator
+     * id for this annotation is added to the list of default validators
+     * by a call to {@link
+     * javax.faces.application.Application#addDefaultValidatorId}.</p>
+     */ 
+
+    boolean isDefault() default false;
+
+
+}
diff --git a/javax/faces/validator/LengthValidator.java b/javax/faces/validator/LengthValidator.java
new file mode 100644
index 0000000..537463b
--- /dev/null
+++ b/javax/faces/validator/LengthValidator.java
@@ -0,0 +1,384 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.PartialStateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+
+/**
+ * <p><strong
+ * class="changed_modified_2_0_rev_a">LengthValidator</strong> is a
+ * {@link Validator} that checks the number of characters in the String
+ * representation of the value of the associated component.  The
+ * following algorithm is implemented:</p>
+
+ * <ul>
+ * <li>Convert the passed value to a String, if necessary, by calling its
+ * <code>toString()</code> method.</li>
+ * <li>If a <code>maximum</code> property has been configured on this
+ * {@link Validator}, check the length of the converted
+ * String against this limit.  If the String length is larger than the
+ * specified maximum, throw a {@link ValidatorException} containing a
+ * a MAXIMUM_MESSAGE_ID message.</li>
+ * <li>If a <code>minimum</code> property has been configured on this
+ * {@link Validator}, check the length of the converted
+ * String against this limit.  If the String length is less than the
+ * specified minimum, throw a {@link ValidatorException} containing a
+ * a MINIMUM_MESSAGE_ID message.</li>
+ * </ul>
+ * <p/>
+ * <p>For all of the above cases that cause a {@link ValidatorException}
+ * to be thrown, if there are parameters to the message that match up
+ * with validator parameters, the values of these parameters must be
+ * converted using the {@link Converter} registered in the application
+ * under the converter id <code>javax.faces.Number</code>.  This allows
+ * the values to be localized according to the current
+ * <code>Locale</code>.</p>
+ */
+
+public class LengthValidator implements Validator, PartialStateHolder {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard validator id for this validator.</p>
+     */
+    public static final String VALIDATOR_ID = "javax.faces.Length";
+
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the maximum length check fails.   The message format string for
+     * this message may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured maximum length.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String MAXIMUM_MESSAGE_ID =
+         "javax.faces.validator.LengthValidator.MAXIMUM";
+
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the minimum length check fails.   The message format string for
+     * this message may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured minimum length.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String MINIMUM_MESSAGE_ID =
+         "javax.faces.validator.LengthValidator.MINIMUM";
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a {@link Validator} with no preconfigured limits.</p>
+     */
+    public LengthValidator() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a {@link Validator} with the specified preconfigured
+     * limit.</p>
+     *
+     * @param maximum Maximum value to allow
+     */
+    public LengthValidator(int maximum) {
+
+        super();
+        setMaximum(maximum);
+
+    }
+
+
+    /**
+     * <p>Construct a {@link Validator} with the specified preconfigured
+     * limits.</p>
+     *
+     * @param maximum Maximum value to allow
+     * @param minimum Minimum value to allow
+     */
+    public LengthValidator(int maximum, int minimum) {
+
+        super();
+        setMaximum(maximum);
+        setMinimum(minimum);
+
+    }
+
+    // -------------------------------------------------------------- Properties
+
+
+    private Integer maximum;
+
+
+    /**
+     * <p>Return the maximum length to be enforced by this {@link
+     * Validator}, or <code>0</code> if the maximum has not been
+     * set.</p>
+     */
+    public int getMaximum() {
+
+        return (this.maximum != null ? this.maximum : 0);
+
+    }
+
+
+    /**
+     * <p>Set the maximum length to be enforced by this {@link Validator}.</p>
+     *
+     * @param maximum The new maximum value
+     */
+    public void setMaximum(int maximum) {
+
+        clearInitialState();
+        this.maximum = maximum;
+
+    }
+
+
+    private Integer minimum;
+
+
+    /**
+     * <p>Return the minimum length to be enforced by this {@link
+     * Validator}, or <code>0</code> if the minimum has not been
+     * set.</p>
+     */
+    public int getMinimum() {
+
+        return (this.minimum != null ? this.minimum : 0);
+
+    }
+
+
+    /**
+     * <p>Set the minimum length to be enforced by this {@link Validator}.</p>
+     *
+     * @param minimum The new minimum value
+     */
+    public void setMinimum(int minimum) {
+
+        clearInitialState();
+        this.minimum = minimum;
+
+    }
+
+    // ------------------------------------------------------- Validator Methods
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     * @throws ValidatorException   {@inheritDoc}
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) throws ValidatorException {
+
+        if ((context == null) || (component == null)) {
+            throw new NullPointerException();
+        }
+        if (value != null) {
+            String converted = stringValue(value);
+            if (isMaximumSet() &&
+                 (converted.length() > maximum)) {
+                throw new ValidatorException(MessageFactory.getMessage
+                     (context,
+                          MAXIMUM_MESSAGE_ID,
+                          integerToString(component, maximum, context),
+                          MessageFactory.getLabel(context, component)));
+            }
+            if (isMinimumSet() &&
+                 (converted.length() < minimum)) {
+                throw new ValidatorException(MessageFactory.getMessage
+                     (context,
+                          MINIMUM_MESSAGE_ID,
+                          integerToString(component, minimum, context),
+                          MessageFactory.getLabel(context, component)));
+            }
+        }
+
+    }
+
+
+    public boolean equals(Object otherObj) {
+
+        if (!(otherObj instanceof LengthValidator)) {
+            return false;
+        }
+        LengthValidator other = (LengthValidator) otherObj;
+        return ((this.getMaximum() == other.getMaximum())
+                && (this.getMinimum() == other.getMinimum())
+                && (this.isMinimumSet() == other.isMinimumSet())
+                && (this.isMaximumSet() == other.isMaximumSet()));
+
+    }
+
+    public int hashCode() {
+
+        int hashCode = (Integer.valueOf(getMinimum()).hashCode()
+                         + Integer.valueOf(getMaximum()).hashCode()
+                         + Boolean.valueOf(isMaximumSet()).hashCode()
+                         + Boolean.valueOf(isMinimumSet()).hashCode());
+        return (hashCode);
+
+    }
+
+    // -------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Return the specified attribute value, converted to a
+     * <code>String</code>.</p>
+     *
+     * @param attributeValue The attribute value to be converted
+     */
+    private static String stringValue(Object attributeValue) {
+
+        if (attributeValue == null) {
+            return (null);
+        } else if (attributeValue instanceof String) {
+            return ((String) attributeValue);
+        } else {
+            return (attributeValue.toString());
+        }
+
+    }
+
+    private static String integerToString(UIComponent component,
+                                          Integer toConvert,
+                                          FacesContext context) {
+
+        Converter converter =
+             context.getApplication().createConverter("javax.faces.Number");
+        return converter.getAsString(context, component, toConvert);
+
+    }
+
+
+    private boolean isMaximumSet() {
+
+        return (maximum != null);
+
+    }
+
+
+    private boolean isMinimumSet() {
+
+        return (minimum != null);
+
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            Object values[] = new Object[2];
+            values[0] = maximum;
+            values[1] = minimum;
+            return (values);
+        }
+        return null;
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+            Object values[] = (Object[]) state;
+            maximum = (Integer) values[0];
+            minimum = (Integer) values[1];
+        }
+
+    }
+
+
+    private boolean transientValue = false;
+
+
+    public boolean isTransient() {
+
+        return (this.transientValue);
+
+    }
+
+
+    public void setTransient(boolean transientValue) {
+
+        this.transientValue = transientValue;
+
+    }
+
+    private boolean initialState;
+
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+}
diff --git a/javax/faces/validator/LongRangeValidator.java b/javax/faces/validator/LongRangeValidator.java
new file mode 100644
index 0000000..f6d63d4
--- /dev/null
+++ b/javax/faces/validator/LongRangeValidator.java
@@ -0,0 +1,441 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.PartialStateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+
+
+/**
+ * <p><strong
+ * class="changed_modified_2_0_rev_a">LongRangeValidator</strong> is a
+ * {@link Validator} that checks the value of the corresponding
+ * component against specified minimum and maximum values.  The
+ * following algorithm is implemented:</p>
+
+ * <ul>
+ * <li>If the passed value is <code>null</code>, exit immediately.</li>
+ * <li>If the current component value is not a floating point type, or
+ * a String that is convertible to long,
+ * throw a {@link ValidatorException} containing a
+ * TYPE_MESSAGE_ID message.</li>
+ * <li>If both a <code>maximum</code> and <code>minimum</code> property
+ * has been configured on this {@link Validator}, check the component
+ * value against both limits.  If the component value is not within
+ * this specified range, throw a {@link ValidatorException} containing a
+ * {@link #NOT_IN_RANGE_MESSAGE_ID} message.</li>
+ * <li>If a <code>maximum</code> property has been configured on this
+ * {@link Validator}, check the component value against
+ * this limit.  If the component value is greater than the
+ * specified maximum, throw a {@link ValidatorException} containing a
+ * MAXIMUM_MESSAGE_ID message.</li>
+ * <li>If a <code>minimum</code> property has been configured on this
+ * {@link Validator}, check the component value against
+ * this limit.  If the component value is less than the
+ * specified minimum, throw a {@link ValidatorException} containing a
+ * MINIMUM_MESSAGE_ID message.</li>
+ * </ul>
+ * <p/>
+ * <p>For all of the above cases that cause a {@link ValidatorException}
+ * to be thrown, if there are parameters to the message that match up
+ * with validator parameters, the values of these parameters must be
+ * converted using the {@link Converter} registered in the application
+ * under the converter id <code>javax.faces.Number</code>.  This allows
+ * the values to be localized according to the current
+ * <code>Locale</code>.</p>
+ */
+
+public class LongRangeValidator implements Validator, PartialStateHolder {
+
+    // ------------------------------------------------------ Manifest Constants
+
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String VALIDATOR_ID = "javax.faces.LongRange";
+
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the maximum value check fails.  The message format string for
+     * this message may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured maximum value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String MAXIMUM_MESSAGE_ID =
+         "javax.faces.validator.LongRangeValidator.MAXIMUM";
+
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the minimum value check fails.  The message format string for
+     * this message may optionally include the following placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured minimum value.</li>
+     * <li><code>{1}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String MINIMUM_MESSAGE_ID =
+         "javax.faces.validator.LongRangeValidator.MINIMUM";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the maximum or minimum value check fails, and both the maximum
+     * and minimum values for this validator have been set.  The message
+     * format string for this message may optionally include the following
+     * placeholders:
+     * <ul>
+     * <li><code>{0}</code> replaced by the configured minimum value.</li>
+     * <li><code>{1}</code> replaced by the configured maximum value.</li>
+     * <li><code>{2}</code> replaced by a <code>String</code> whose value
+     * is the label of the input component that produced this message.</li>
+     * </ul></p>
+     */
+    public static final String NOT_IN_RANGE_MESSAGE_ID =
+         "javax.faces.validator.LongRangeValidator.NOT_IN_RANGE";
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the current value of this component is not of the correct type.
+     * The message format string for this message may
+     * optionally include a <code>{0}</code> placeholder that will be
+     * replaced by a <code>String</code> whose value is the label of
+     * the input component that produced this message.</p>
+     */
+    public static final String TYPE_MESSAGE_ID =
+         "javax.faces.validator.LongRangeValidator.TYPE";
+
+    // ------------------------------------------------------------ Constructors
+
+
+    /**
+     * <p>Construct a {@link Validator} with no preconfigured limits.</p>
+     */
+    public LongRangeValidator() {
+
+        super();
+
+    }
+
+
+    /**
+     * <p>Construct a {@link Validator} with the specified preconfigured
+     * limit.</p>
+     *
+     * @param maximum Maximum value to allow
+     */
+    public LongRangeValidator(long maximum) {
+
+        super();
+        setMaximum(maximum);
+
+    }
+
+
+    /**
+     * <p>Construct a {@link Validator} with the specified preconfigured
+     * limits.</p>
+     *
+     * @param maximum Maximum value to allow
+     * @param minimum Minimum value to allow
+     */
+    public LongRangeValidator(long maximum, long minimum) {
+
+        super();
+        setMaximum(maximum);
+        setMinimum(minimum);
+
+    }
+
+    // -------------------------------------------------------------- Properties
+
+
+    private Long maximum;
+
+
+    /**
+     * <p>Return the maximum value to be enforced by this {@link Validator}.</p>
+     */
+    public long getMaximum() {
+
+        return (this.maximum != null ? this.maximum : 0);
+
+    }
+
+
+    /**
+     * <p>Set the maximum value to be enforced by this {@link Validator}.</p>
+     *
+     * @param maximum The new maximum value
+     */
+    public void setMaximum(long maximum) {
+
+        clearInitialState();
+        this.maximum = maximum;
+
+    }
+
+
+    private Long minimum;
+
+
+    /**
+     * <p>Return the minimum value to be enforced by this {@link Validator}.</p>
+     */
+    public long getMinimum() {
+
+        return (this.minimum != null ? this.minimum : 0);
+
+    }
+
+
+    /**
+     * <p>Set the minimum value to be enforced by this {@link Validator}.</p>
+     *
+     * @param minimum The new minimum value
+     */
+    public void setMinimum(long minimum) {
+
+        clearInitialState();
+        this.minimum = minimum;
+
+    }
+
+    // ------------------------------------------------------- Validator Methods
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     * @throws ValidatorException   {@inheritDoc}
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) throws ValidatorException {
+
+        if ((context == null) || (component == null)) {
+            throw new NullPointerException();
+        }
+        if (value != null) {
+            try {
+                long converted = longValue(value);
+                if (isMaximumSet() &&
+                     (converted > maximum)) {
+                    if (isMinimumSet()) {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  NOT_IN_RANGE_MESSAGE_ID,
+                                  stringValue(component, minimum, context),
+                                  stringValue(component, maximum, context),
+                                  MessageFactory.getLabel(context, component)));
+
+                    } else {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  MAXIMUM_MESSAGE_ID,
+                                  stringValue(component, maximum, context),
+                                  MessageFactory.getLabel(context, component)));
+                    }
+                }
+                if (isMinimumSet() &&
+                     (converted < minimum)) {
+                    if (isMaximumSet()) {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  NOT_IN_RANGE_MESSAGE_ID,
+                                  stringValue(component, minimum, context),
+                                  stringValue(component, maximum, context),
+                                  MessageFactory.getLabel(context, component)));
+
+                    } else {
+                        throw new ValidatorException(MessageFactory.getMessage
+                             (context,
+                                  MINIMUM_MESSAGE_ID,
+                                  stringValue(component, minimum, context),
+                                  MessageFactory.getLabel(context, component)));
+                    }
+                }
+            } catch (NumberFormatException e) {
+                throw new ValidatorException(MessageFactory.getMessage
+                     (context, TYPE_MESSAGE_ID,
+                          MessageFactory.getLabel(context, component)), e);
+            }
+        }
+
+    }
+
+
+    public boolean equals(Object otherObj) {
+
+        if (!(otherObj instanceof LongRangeValidator)) {
+            return false;
+        }
+        LongRangeValidator other = (LongRangeValidator) otherObj;
+        return ((this.getMaximum() == other.getMaximum())
+                && (this.getMinimum() == other.getMinimum())
+                && (this.isMaximumSet() == other.isMaximumSet())
+                && (this.isMinimumSet() == other.isMinimumSet()));
+
+    }
+
+
+    public int hashCode() {
+
+        int hashCode = Long.valueOf(getMinimum()).hashCode()
+             + Long.valueOf(getMaximum()).hashCode()
+             + Boolean.valueOf(isMinimumSet()).hashCode()
+             + Boolean.valueOf(isMaximumSet()).hashCode();
+        return (hashCode);
+
+    }
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * <p>Return the specified attribute value, converted to a
+     * <code>long</code>.</p>
+     *
+     * @param attributeValue The attribute value to be converted
+     * @throws NumberFormatException if conversion is not possible
+     */
+    private static long longValue(Object attributeValue)
+         throws NumberFormatException {
+
+        if (attributeValue instanceof Number) {
+            return (((Number) attributeValue).longValue());
+        } else {
+            return (Long.parseLong(attributeValue.toString()));
+        }
+
+    }
+
+    private static String stringValue(UIComponent component,
+                                      Long toConvert,
+                                      FacesContext context) {
+
+        Converter converter =
+             context.getApplication().createConverter("javax.faces.Number");
+        return converter.getAsString(context, component, toConvert);
+
+    }
+
+    private boolean isMinimumSet() {
+
+        return (minimum != null);
+
+    }
+
+    private boolean isMaximumSet() {
+
+        return (maximum != null);
+
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            Object values[] = new Object[2];
+            values[0] = maximum;
+            values[1] = minimum;
+            return (values);
+        }
+        return null;
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+            Object values[] = (Object[]) state;
+            maximum = (Long) values[0];
+            minimum = (Long) values[1];
+        }
+
+    }
+
+
+    private boolean transientValue = false;
+
+
+    public boolean isTransient() {
+
+        return (this.transientValue);
+
+    }
+
+
+    public void setTransient(boolean transientValue) {
+
+        this.transientValue = transientValue;
+
+    }
+
+    private boolean initialState;
+
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+}
diff --git a/javax/faces/validator/MessageFactory.java b/javax/faces/validator/MessageFactory.java
new file mode 100644
index 0000000..4491239
--- /dev/null
+++ b/javax/faces/validator/MessageFactory.java
@@ -0,0 +1,389 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * 
+ * <p>supported filters: <code>package</code> and
+ * <code>protection</code>.</p>
+ */
+
+ class MessageFactory {
+
+    private static final String MOJARRA_RESOURCE_BASENAME =
+        "com.sun.faces.resources.Messages";
+
+    private MessageFactory() {
+    }
+
+    /**
+     * @see #getMessage(String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(Locale, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(Locale locale,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(locale, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(FacesContext, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(FacesContext context,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(context, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+   
+    /**
+     * <p>This version of getMessage() is used for localizing implementation
+     * specific messages.</p>
+     *
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+      static FacesMessage getMessage(String messageId, 
+                                                 Object... params) {
+        Locale locale = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        // context.getViewRoot() may not have been initialized at this point.
+        if (context != null && context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        return getMessage(locale, messageId, params);
+    }
+
+     /**
+      * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+      *
+      * @param locale    - the target <code>Locale</code>
+      * @param messageId - the key of the message in the resource bundle
+      * @param params    - substittion parameters
+      *
+      * @return a localized <code>FacesMessage</code> with the severity
+      *  of FacesMessage.SEVERITY_ERROR
+      */
+      static FacesMessage getMessage(Locale locale, 
+                                                 String messageId, 
+                                                 Object... params) {       
+        String summary = null;
+        String detail = null;       
+        ResourceBundle bundle;
+        String bundleName;
+
+        // see if we have a user-provided bundle
+        Application app = getApplication();
+	Class appClass = app.getClass();
+        if (null != (bundleName = app.getMessageBundle())) {
+            if (null != 
+                (bundle = 
+                    ResourceBundle.getBundle(bundleName, locale,
+				     getCurrentLoader(appClass)))) {
+                // see if we have a hit
+                try {
+                    summary = bundle.getString(messageId);
+                    detail = bundle.getString(messageId + "_detail");
+                }
+                catch (MissingResourceException e) {
+                    // ignore
+                }
+            }
+        }
+    
+        // we couldn't find a summary in the user-provided bundle
+        if (null == summary) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(FacesMessage.FACES_MESSAGES, 
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+                detail = bundle.getString(messageId + "_detail");
+            } catch (MissingResourceException e) {
+                // ignore
+            }
+        }
+
+        // no hit found in the standard javax.faces.Messages bundle.
+        // check the Mojarra resources
+        if (summary == null) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(MOJARRA_RESOURCE_BASENAME,
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+            } catch (MissingResourceException e) {
+                return null;
+            }
+        }
+
+        // At this point, we have a summary and a bundle.     
+        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
+        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
+        return (ret);
+    }
+
+
+    /**
+     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+     static FacesMessage getMessage(FacesContext context, 
+                                                String messageId,
+                                                Object... params) {
+                                                
+        if (context == null || messageId == null ) {
+            throw new NullPointerException(" context " 
+                + context 
+                + " messageId " 
+                + messageId);
+        }
+        Locale locale;
+        // viewRoot may not have been initialized at this point.
+        if (context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        if (null == locale) {
+            throw new NullPointerException(" locale is null ");
+        }
+        
+        FacesMessage message = getMessage(locale, messageId, params);
+        if (message != null) {
+            return message;
+        }
+        locale = Locale.getDefault();
+        return (getMessage(locale, messageId, params));
+    }  
+                       
+
+    /**
+     * <p>Returns the <code>label</code> property from the specified
+     * component.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param component - the component of interest
+     *
+     * @return the label, if any, of the component
+     */
+     static Object getLabel(FacesContext context, 
+                                        UIComponent component) {
+                                        
+        Object o = component.getAttributes().get("label");
+        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
+            o = component.getValueExpression("label");
+        }
+        // Use the "clientId" if there was no label specified.
+        if (o == null) {
+            o = component.getClientId(context);
+        }
+        return o;
+    }
+
+    protected static Application getApplication() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return (FacesContext.getCurrentInstance().getApplication());
+        }
+        ApplicationFactory afactory = (ApplicationFactory)
+            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return (afactory.getApplication());
+    }
+
+    protected static ClassLoader getCurrentLoader(Class fallbackClass) {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClassLoader();
+        }
+        return loader;
+    }
+
+    /**
+     * This class overrides FacesMessage to provide the evaluation
+     * of binding expressions in addition to Strings.
+     * It is often the case, that a binding expression may reference
+     * a localized property value that would be used as a 
+     * substitution parameter in the message.  For example:
+     *  <code>#{bundle.userLabel}</code>
+     * "bundle" may not be available until the page is rendered.
+     * The "late" binding evaluation in <code>getSummary</code> and 
+     * <code>getDetail</code> allow the expression to be evaluated
+     * when that property is available.
+     */
+    static class BindingFacesMessage extends FacesMessage {
+        BindingFacesMessage(
+            Locale locale,
+            String messageFormat,
+            String detailMessageFormat,
+            // array of parameters, both Strings and ValueBindings
+            Object[] parameters) {
+
+            super(messageFormat, detailMessageFormat);
+            this.locale = locale;
+            this.parameters = parameters;
+            if (parameters != null) {
+                resolvedParameters = new Object[parameters.length];
+            }
+        }
+
+        public String getSummary() {
+            String pattern = super.getSummary();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        public String getDetail() {
+            String pattern = super.getDetail();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        private void resolveBindings() {
+            FacesContext context = null;
+            if (parameters != null) {
+                for (int i = 0; i < parameters.length; i++) {
+                    Object o = parameters[i];
+                    if (o instanceof ValueBinding) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueBinding) o).getValue(context);
+                    }
+                    if (o instanceof ValueExpression) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueExpression) o).getValue(context.getELContext());
+                    }
+                    // to avoid 'null' appearing in message
+                    if (o == null) {
+                        o = "";
+                    }
+                    resolvedParameters[i] = o;
+                }
+            }
+        }
+
+        private String getFormattedString(String msgtext, Object[] params) {
+            String localizedStr = null;
+                                                                                
+            if (params == null || msgtext == null ) {
+                return msgtext;
+            }
+            StringBuffer b = new StringBuffer(100);
+            MessageFormat mf = new MessageFormat(msgtext);
+            if (locale != null) {
+                mf.setLocale(locale);
+                b.append(mf.format(params));
+                localizedStr = b.toString();
+            }
+            return localizedStr;
+        }
+
+        private Locale locale;
+        private Object[] parameters;
+        private Object[] resolvedParameters;
+    }
+    
+} // end of class MessageFactory
diff --git a/javax/faces/validator/MethodExpressionValidator.java b/javax/faces/validator/MethodExpressionValidator.java
new file mode 100644
index 0000000..9530543
--- /dev/null
+++ b/javax/faces/validator/MethodExpressionValidator.java
@@ -0,0 +1,199 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import java.util.Map;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.MethodExpression;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p><strong
+ * class="changed_modified_2_0_rev_a">MethodExpressionValidator</strong>
+ * is a {@link Validator} that wraps a {@link MethodExpression}, and it
+ * performs validation by executing a method on an object identified by
+ * the {@link MethodExpression}.</p>
+ */
+
+public class MethodExpressionValidator implements Validator, StateHolder {
+
+    private static final String BEANS_VALIDATION_AVAILABLE =
+            "javax.faces.private.BEANS_VALIDATION_AVAILABLE";
+    
+    private static final String VALIDATE_EMPTY_FIELDS_PARAM_NAME = 
+            "javax.faces.VALIDATE_EMPTY_FIELDS";
+    
+    // ------------------------------------------------------ Instance Variables
+
+    private MethodExpression methodExpression = null;
+
+    private Boolean validateEmptyFields;
+    
+    public MethodExpressionValidator() {
+
+        super();
+
+    }
+
+    /**
+     * <p>Construct a {@link Validator} that contains a {@link MethodExpression}.</p>
+     */
+    public MethodExpressionValidator(MethodExpression methodExpression) {
+
+        super();
+        this.methodExpression = methodExpression;
+
+    }
+
+    // ------------------------------------------------------- Validator Methods
+
+    /**
+     * @throws NullPointerException {@inheritDoc}
+     * @throws ValidatorException   {@inheritDoc}
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) throws ValidatorException {
+
+        if ((context == null) || (component == null)) {
+            throw new NullPointerException();
+        }
+        if (validateEmptyFields(context) || value != null) {
+            try {
+                ELContext elContext = context.getELContext();
+                methodExpression.invoke(elContext, new Object[]{context, component, value});
+            } catch (ELException ee) {
+                Throwable e = ee.getCause();
+                if (e instanceof ValidatorException) {
+                    throw (ValidatorException) e;
+                } else {
+                    throw ee;
+                }
+            }
+        }
+    }
+
+    // ----------------------------------------------------- StateHolder Methods
+
+
+    public Object saveState(FacesContext context) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        Object values[] = new Object[1];
+        values[0] = methodExpression;
+        return (values);
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state == null) {
+            return;
+        }
+        Object values[] = (Object[]) state;
+        methodExpression = (MethodExpression) values[0];
+    }
+
+
+    private boolean transientValue = false;
+
+
+    public boolean isTransient() {
+
+        return (this.transientValue);
+
+    }
+
+
+    public void setTransient(boolean transientValue) {
+
+        this.transientValue = transientValue;
+
+    }
+
+    private boolean validateEmptyFields(FacesContext ctx) {
+
+        if (validateEmptyFields == null) {
+            ExternalContext extCtx = ctx.getExternalContext();
+            String val = extCtx.getInitParameter(VALIDATE_EMPTY_FIELDS_PARAM_NAME);
+
+            if (null == val) {
+                val = (String) extCtx.getApplicationMap().get(VALIDATE_EMPTY_FIELDS_PARAM_NAME);
+            }
+            if (val == null || "auto".equals(val)) {
+                validateEmptyFields = isBeansValidationAvailable(ctx);
+            } else {
+                validateEmptyFields = Boolean.valueOf(val);
+            }
+        }
+
+        return validateEmptyFields;
+
+    }
+
+    private boolean isBeansValidationAvailable(FacesContext context) {
+        boolean result = false;
+
+        Map<String,Object> appMap = context.getExternalContext().getApplicationMap();
+        
+        if (appMap.containsKey(BEANS_VALIDATION_AVAILABLE)) {
+            result = (Boolean) appMap.get(BEANS_VALIDATION_AVAILABLE);
+        } else {
+            try {
+                new BeanValidator();
+                appMap.put(BEANS_VALIDATION_AVAILABLE, Boolean.TRUE);
+                result = true;
+            } catch (Throwable t) {
+                appMap.put(BEANS_VALIDATION_AVAILABLE, Boolean.FALSE);
+            }
+        }
+
+        return result;
+    }
+}
diff --git a/javax/faces/validator/RegexValidator.java b/javax/faces/validator/RegexValidator.java
new file mode 100644
index 0000000..2d632ba
--- /dev/null
+++ b/javax/faces/validator/RegexValidator.java
@@ -0,0 +1,238 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.application.FacesMessage;
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+import javax.faces.component.PartialStateHolder;
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_0_rev_a">A Validator</span> that checks
+ * against a Regular Expression (which is the pattern property).  The
+ * pattern must resolve to a String that follows the java.util.regex
+ * standards.</p>
+ * @since 2.0
+ */
+public class RegexValidator implements Validator, PartialStateHolder {
+
+    private String regex;
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String VALIDATOR_ID = "javax.faces.RegularExpression";
+
+    /**
+     * <p>The message identifier of the {@link
+     * javax.faces.application.FacesMessage} to be created if the value
+     * returned from {@link #getPattern} is <code>null</code> or the
+     * empty String.</p>
+     */
+    public static final String PATTERN_NOT_SET_MESSAGE_ID =
+         "javax.faces.validator.RegexValidator.PATTERN_NOT_SET";
+
+    /**
+     * <p>The message identifier of the {@link
+     * javax.faces.application.FacesMessage} to be created if the act of
+     * matching the value against the pattern returned from {@link
+     * #getPattern} fails because the value does not match the
+     * pattern.</p>
+     */
+    public static final String NOT_MATCHED_MESSAGE_ID =
+         "javax.faces.validator.RegexValidator.NOT_MATCHED";
+
+    /**
+     * <p>The message identifier of the {@link
+     * javax.faces.application.FacesMessage} to be created if the act of
+     * matching the value against the pattern returned from {@link
+     * #getPattern} fails because of a
+     * <code>PatternSyntaxException</code>.</p>
+     */
+    public static final String MATCH_EXCEPTION_MESSAGE_ID =
+         "javax.faces.validator.RegexValidator.MATCH_EXCEPTION";
+
+
+    /**
+     * <p>The Regular Expression property to validate against.</p>
+     *
+     * @param pattern a regular expression pattern
+     */
+    public void setPattern(String pattern) {
+        clearInitialState();
+        this.regex = pattern;
+    }
+
+    /**
+     * <p>Return the <code>ValueExpression</code> that yields the
+     * regular expression pattern when evaluated.</p>
+     */
+
+    public String getPattern() {
+        return this.regex;
+    }
+
+    /**
+
+     * </p>Validate a String against a regular expression pattern.  The
+     * full regex pattern must be matched in order to pass the
+     * validation.</p>
+
+     * @param context {@inheritDoc}
+     * @param component {@inheritDoc}
+     * @param value {@inheritDoc}
+
+     * @throws NullPointerException {@inheritDoc}
+     * @throws ValidatorException   {@inheritDoc}
+
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (component == null) {
+            throw new NullPointerException();
+        }
+        
+        if (value == null) {
+            return;
+        }
+
+        FacesMessage fmsg;
+
+        Locale locale = context.getViewRoot().getLocale();
+
+        if (regex == null || regex.length() == 0) {
+            fmsg = MessageFactory.getMessage(locale,
+                    PATTERN_NOT_SET_MESSAGE_ID,
+                    (Object) null);
+            throw new ValidatorException(fmsg);
+        }
+
+        try {
+            Pattern pattern = Pattern.compile(regex);
+            Matcher matcher = pattern.matcher((String) value);
+            if (!matcher.matches()) {
+                Object[] params = { regex };
+                fmsg = MessageFactory.getMessage(locale,
+                        NOT_MATCHED_MESSAGE_ID,
+                        params);
+                throw new ValidatorException(fmsg);
+            }
+        } catch (PatternSyntaxException pse) {
+            fmsg = MessageFactory.getMessage(locale,
+                    MATCH_EXCEPTION_MESSAGE_ID,
+                    (Object) null);
+            throw new ValidatorException(fmsg, pse);
+        }
+    }
+    
+    // ----------------------------------------------------- StateHolder Methods
+
+
+    public Object saveState(FacesContext context) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (!initialStateMarked()) {
+            Object values[] = new Object[1];
+            values[0] = regex;
+
+            return (values);
+        }
+        return null;
+
+    }
+
+
+    public void restoreState(FacesContext context, Object state) {
+
+        if (context == null) {
+            throw new NullPointerException();
+        }
+        if (state != null) {
+            Object values[] = (Object[]) state;
+            regex = (String) values[0];
+        }
+
+    }
+
+
+    private boolean transientValue = false;
+
+
+    public boolean isTransient() {
+
+        return (this.transientValue);
+
+    }
+
+
+    public void setTransient(boolean transientValue) {
+
+        this.transientValue = transientValue;
+
+    }
+
+
+    private boolean initialState;
+
+    public void markInitialState() {
+        initialState = true;
+    }
+
+    public boolean initialStateMarked() {
+        return initialState;
+    }
+
+    public void clearInitialState() {
+        initialState = false;
+    }
+}
diff --git a/javax/faces/validator/RequiredValidator.java b/javax/faces/validator/RequiredValidator.java
new file mode 100644
index 0000000..96cbec7
--- /dev/null
+++ b/javax/faces/validator/RequiredValidator.java
@@ -0,0 +1,97 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIInput;
+
+/**
+ * <p class="changed_added_2_0">A Validator that checks for an empty
+ * value in the same way that UIInput checks for a value. In fact, this validator
+ * is equivalent to setting the required attribute on the input component to true.</p>
+ *
+ * @since 2.0
+ */
+public class RequiredValidator implements Validator {
+
+    /**
+     * <p>The standard converter id for this converter.</p>
+     */
+    public static final String VALIDATOR_ID = "javax.faces.Required";
+
+    /**
+
+     * </p>Verify that the converted object value is not null.</p>
+
+     * @param context {@inheritDoc}
+     * @param component {@inheritDoc}
+     * @param value {@inheritDoc}
+
+     * @throws ValidatorException   {@inheritDoc}
+
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) {
+
+        if (UIInput.isEmpty(value)) {
+            FacesMessage msg;
+            String requiredMessageStr = null;
+            if (component instanceof UIInput) {
+                requiredMessageStr = ((UIInput) component).getRequiredMessage();
+            }
+
+            // respect the message string override on the component to emulate required="true" behavior
+            if (requiredMessageStr != null) {
+                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, requiredMessageStr, requiredMessageStr);
+            }
+            else {
+                msg = MessageFactory.getMessage(context, UIInput.REQUIRED_MESSAGE_ID,
+                    MessageFactory.getLabel(context, component));
+            }
+
+            throw new ValidatorException(msg);
+        }
+    }
+
+}
diff --git a/javax/faces/validator/Validator.java b/javax/faces/validator/Validator.java
new file mode 100644
index 0000000..3b85fdd
--- /dev/null
+++ b/javax/faces/validator/Validator.java
@@ -0,0 +1,138 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import java.util.EventListener;
+
+
+/**
+ * <p>A <strong class="changed_modified_2_0">Validator</strong>
+ * implementation is a class that can perform validation (correctness
+ * checks) on a {@link javax.faces.component.EditableValueHolder}.  Zero
+ * or more <code>Validator</code>s can be associated with each {@link
+ * javax.faces.component.EditableValueHolder} in the view, and are
+ * called during the <em>Process Validations</em> phase of the request
+ * processing lifecycle.</p>
+
+ * <p/>
+ * <p>Individual {@link Validator}s should examine the value and
+ * component that they are passed, and throw a {@link ValidatorException}
+ * containing a {@link javax.faces.application.FacesMessage}, documenting
+ * any failures to conform to the required rules.
+ * <p/>
+ * <p>For maximum generality, {@link Validator} instances may be
+ * configurable based on properties of the {@link Validator} implementation
+ * class.  For example, a range check {@link Validator} might support
+ * configuration of the minimum and maximum values to be used.</p>
+ * <p/>
+ * <p>{@link Validator} implementations must have a zero-arguments
+ * public constructor.  In addition, if the {@link Validator} class
+ * wishes to have configuration property values saved and restored with
+ * the view, the implementation must also implement {@link
+ * javax.faces.component.StateHolder}.</p>
+
+ * <p class="changed_added_2_0">If the class implementing
+ * <code>Validator</code> has a {@link
+ * javax.faces.application.ResourceDependency} annotation, the action
+ * described in <code>ResourceDependency</code> must be taken when
+ * {@link javax.faces.component.EditableValueHolder#addValidator} is
+ * called.  If the class implementing <code>Validator</code> has a {@link
+ * javax.faces.application.ResourceDependencies} annotation, the
+ * action described in <code>ResourceDependencies</code> must be taken
+ * when {@link javax.faces.component.EditableValueHolder#addValidator} 
+ * is called.</p>
+
+ */
+
+public interface Validator extends EventListener {
+
+    /**
+     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
+     * the maximum or minimum value check fails, and both the maximum
+     * and minimum values for this validator have been set.  The message
+     * format string for this message may optionally include a
+     * <code>{0}</code> placeholder, which will be replaced by the
+     * configured minimum value, and a <code>{1}</code> placeholder,
+     * which will be replaced by the configured maximum value.</p>
+     *
+     * @deprecated Use {@link DoubleRangeValidator#NOT_IN_RANGE_MESSAGE_ID} or
+     *             {@link LongRangeValidator#NOT_IN_RANGE_MESSAGE_ID} instead.
+     */
+    public static final String NOT_IN_RANGE_MESSAGE_ID =
+         "javax.faces.validator.NOT_IN_RANGE";
+
+    /**
+     * <p><span class="changed_modified_2_0">Perform</span> the
+     * correctness checks implemented by this {@link Validator} against
+     * the specified {@link UIComponent}.  If any violations are found,
+     * a {@link ValidatorException} will be thrown containing the {@link
+     * javax.faces.application.FacesMessage} describing the failure.
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p>For a validator to be fully compliant with Version 2 and later
+     * of the specification, it must not fail validation on
+     * <code>null</code> or empty values unless it is specifically
+     * intended to address <code>null</code> or empty values.  An
+     * application-wide <code><context-param></code> is provided
+     * to allow validators designed for JSF 1.2 to work with JSF 2 and
+     * later. The <code>javax.faces.VALIDATE_EMPTY_FIELDS</code>
+     * <code><context-param></code> must be set to
+     * <code>false</code> to enable this backwards compatibility
+     * behavior.</p>
+     *
+     * </div>
+     *
+     * @param context   FacesContext for the request we are processing
+     * @param component UIComponent we are checking for correctness
+     * @param value     the value to validate
+     * @throws ValidatorException   if validation fails
+     * @throws NullPointerException if <code>context</code>
+     *                              or <code>component</code> is <code>null</code>
+     */
+    public void validate(FacesContext context,
+                         UIComponent component,
+                         Object value) throws ValidatorException;
+
+
+}
diff --git a/javax/faces/validator/ValidatorException.java b/javax/faces/validator/ValidatorException.java
new file mode 100644
index 0000000..60fb832
--- /dev/null
+++ b/javax/faces/validator/ValidatorException.java
@@ -0,0 +1,141 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import java.util.Collection;
+import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
+
+
+/**
+ * <p>A <strong class="changed_modified_2_0">ValidatorException</strong> is an exception
+ * thrown by the <code>validate()</code> method of a
+ * {@link Validator} to indicate that validation failed.
+ */
+public class ValidatorException extends FacesException {
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Construct a new exception with the specified message and
+     * no root cause.</p>
+     *
+     * @param message The message for this exception
+     */
+    public ValidatorException(FacesMessage message) {
+
+        super(message.getSummary());
+        this.message = message;
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Allow this one exception to contain
+     * multiple messages.</p>
+     * @param messages
+     * 
+     * @since 2.0
+     */
+
+    public ValidatorException(Collection<FacesMessage> messages) {
+        this.messages = messages;
+    }
+
+    /**
+     * <p>Construct a new exception with the specified detail message and
+     * root cause.</p>
+     *
+     * @param message The detail message for this exception
+     * @param cause   The root cause for this exception
+     */
+    public ValidatorException(FacesMessage message, Throwable cause) {
+
+        super(message.getSummary(), cause);
+        this.message = message;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Allow this one exception to contain
+     * multiple messages, while passing on the root cause to the superclass</p>
+     * @param messages the detail messages for this exception
+     * @param cause the root cause for this exception
+     * 
+     * @since 2.0
+     */
+
+    public ValidatorException(Collection<FacesMessage> messages, Throwable cause) {
+        super(messages.isEmpty() ? "" : messages.iterator().next().getSummary(),
+              cause);
+        this.messages = messages;
+    }
+
+    /**
+     * <p class="changed_modified_2_0">Returns the <code>FacesMessage</code>
+     * associated with 
+     * the exception.  If this instance
+     * was created with a constructor that takes 
+     * <code>Collection<FacesMessage></code>, this method returns the first
+     * message in the <code>Collection</code></p>
+     */
+    public FacesMessage getFacesMessage() {
+        FacesMessage result = this.message;
+        if (null == result && null != this.messages && !this.messages.isEmpty()) {
+            result = messages.iterator().next();
+        }
+        return result;
+    }
+    
+    
+    /**
+     * <p class="changed_modified_2_0">If this instance was created with a 
+     * constructor that takes 
+     * <code>Collection<FacesMessage></code>, this method returns the passed
+     * collection, otherwise this method returns <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+
+    public Collection<FacesMessage> getFacesMessages() {
+        return this.messages;
+    }
+
+    private FacesMessage message;
+    private Collection<FacesMessage> messages;
+}
diff --git a/javax/faces/validator/ValueExpressionAnalyzer.java b/javax/faces/validator/ValueExpressionAnalyzer.java
new file mode 100644
index 0000000..307b588
--- /dev/null
+++ b/javax/faces/validator/ValueExpressionAnalyzer.java
@@ -0,0 +1,190 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+import java.util.Locale;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.FunctionMapper;
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+import javax.faces.el.CompositeComponentExpressionHolder;
+
+/**
+ * Analyzes a {@link ValueExpression} and provides access to the base object and property
+ * name to which the expression maps via the getReference() method.
+ */
+class ValueExpressionAnalyzer {
+    private ValueExpression expression;
+
+    public ValueExpressionAnalyzer(ValueExpression expression) {
+        this.expression = expression;
+    }
+
+    public ValueReference getReference(ELContext elContext) {
+        InterceptingResolver resolver = new InterceptingResolver(elContext.getELResolver());
+        try {
+            expression.setValue(decorateELContext(elContext, resolver), null);
+        } catch (ELException ele) {
+            return null;
+        }
+        ValueReference reference = resolver.getValueReference();
+        if (reference != null) {
+            Object base = reference.getBase();
+            if (base instanceof CompositeComponentExpressionHolder) {
+                ValueExpression ve = ((CompositeComponentExpressionHolder) base).getExpression(reference.getProperty());
+                if (ve != null) {
+                    this.expression = ve;
+                    reference = getReference(elContext);
+                }
+            }
+        }
+        return reference;
+    }
+
+    private ELContext decorateELContext(final ELContext context, final ELResolver resolver) {
+        return new ELContext() {
+
+            // punch in our new ELResolver
+            @Override
+            public ELResolver getELResolver() {
+                return resolver;
+            }
+
+            // The rest of the methods simply delegate to the existing context
+
+            @Override
+            public Object getContext(Class key) {
+                return context.getContext(key);
+            }
+
+            @Override
+            public Locale getLocale() {
+                return context.getLocale();
+            }
+
+            @Override
+            public boolean isPropertyResolved() {
+                return context.isPropertyResolved();
+            }
+
+            @Override
+            public void putContext(Class key, Object contextObject) {
+                context.putContext(key, contextObject);
+            }
+
+            @Override
+            public void setLocale(Locale locale) {
+                context.setLocale(locale);
+            }
+
+            @Override
+            public void setPropertyResolved(boolean resolved) {
+                context.setPropertyResolved(resolved);
+            }
+
+            @Override
+            public FunctionMapper getFunctionMapper() {
+                return context.getFunctionMapper();
+            }
+
+            @Override
+            public VariableMapper getVariableMapper() {
+                return context.getVariableMapper();
+            }
+        };
+    }
+
+    private static class InterceptingResolver extends ELResolver {
+
+        private ELResolver delegate;
+        private ValueReference valueReference;
+
+        public InterceptingResolver(ELResolver delegate) {
+            this.delegate = delegate;
+        }
+
+        public ValueReference getValueReference() {
+            return valueReference;
+        }
+
+        // Capture the base and property rather than write the value
+        @Override
+        public void setValue(ELContext context, Object base, Object property, Object value) {
+            if (base != null && property != null) {
+                context.setPropertyResolved(true);
+                valueReference = new ValueReference(base, property.toString());
+            }
+        }
+
+        // The rest of the methods simply delegate to the existing context
+
+        @Override
+        public Object getValue(ELContext context, Object base, Object property) {
+            return delegate.getValue(context, base, property);
+        }
+
+        @Override
+        public Class<?> getType(ELContext context, Object base, Object property) {
+            return delegate.getType(context, base, property);
+        }
+
+
+        @Override
+        public boolean isReadOnly(ELContext context, Object base, Object property) {
+            return delegate.isReadOnly(context, base, property);
+        }
+
+        @Override
+        public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
+            return delegate.getFeatureDescriptors(context, base);
+        }
+
+        @Override
+        public Class<?> getCommonPropertyType(ELContext context, Object base) {
+            return delegate.getCommonPropertyType(context, base);
+        }
+
+    }
+}
diff --git a/javax/faces/validator/ValueReference.java b/javax/faces/validator/ValueReference.java
new file mode 100644
index 0000000..66d21c9
--- /dev/null
+++ b/javax/faces/validator/ValueReference.java
@@ -0,0 +1,63 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.validator;
+
+class ValueReference {
+    private Object base;
+    private String property;
+
+    public ValueReference(Object base, String property) {
+        this.base = base;
+        this.property = property;
+    }
+
+    public Class getBaseClass() {
+        return base.getClass();
+    }
+
+    public Object getBase() {
+        return base;
+    }
+
+    public String getProperty() {
+        return property;
+    }
+}
diff --git a/javax/faces/validator/package.html b/javax/faces/validator/package.html
new file mode 100644
index 0000000..9f5fa9e
--- /dev/null
+++ b/javax/faces/validator/package.html
@@ -0,0 +1,52 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+    <title>Package Description for "javax.faces.validator"</title>
+</head>
+<body bgcolor="white">
+<p><span class="changed_modified_2_0
+changed_modified_2_0_rev_a changed_modified_2_2">Interface</span> defining the validator
+model, and concrete validator implementation classes.</p>
+</body>
+</html>
diff --git a/javax/faces/view/ActionSource2AttachedObjectHandler.java b/javax/faces/view/ActionSource2AttachedObjectHandler.java
new file mode 100644
index 0000000..c80e136
--- /dev/null
+++ b/javax/faces/view/ActionSource2AttachedObjectHandler.java
@@ -0,0 +1,54 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">A VDL handler that exposes {@link
+ * javax.faces.event.ActionListener} to a <em>page author</em>.  The
+ * default implementation of Facelets must provide an implemention of
+ * this in the handler for the <code><f:actionListener></code>
+ * tag.</p>
+ *
+ * @since 2.0
+ */
+public interface ActionSource2AttachedObjectHandler extends AttachedObjectHandler {
+
+}
diff --git a/javax/faces/view/ActionSource2AttachedObjectTarget.java b/javax/faces/view/ActionSource2AttachedObjectTarget.java
new file mode 100644
index 0000000..6146375
--- /dev/null
+++ b/javax/faces/view/ActionSource2AttachedObjectTarget.java
@@ -0,0 +1,52 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">A marker interface for VDL tags that
+ * represent <code><composite:actionSource/></code> for use by the
+ * <em>composite component page author</em>.</p>
+ *
+ * @since 2.0
+ */
+public interface ActionSource2AttachedObjectTarget extends AttachedObjectTarget {
+
+}
diff --git a/javax/faces/view/AttachedObjectHandler.java b/javax/faces/view/AttachedObjectHandler.java
new file mode 100644
index 0000000..f63399b
--- /dev/null
+++ b/javax/faces/view/AttachedObjectHandler.java
@@ -0,0 +1,81 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0">The
+ * abstract base interface for a
+ * handler representing an <em>attached object</em> in a VDL page.
+ * Subinterfaces are provided for the common attached objects that
+ * expose {@link javax.faces.component.behavior.Behavior}, {@link
+ * javax.faces.convert.Converter}s, {@link
+ * javax.faces.validator.Validator}s, {@link
+ * javax.faces.event.ValueChangeListener}s, and {@link
+ * javax.faces.event.ActionListener}s for use by <em>page
+ * authors</em>.</p>
+ *
+ * @since 2.0
+ */
+public interface AttachedObjectHandler {
+    
+    /**
+     * <p class="changed_added_2_0">Take the argument
+     * <code>parent</code> and apply this attached object to it.  The
+     * action taken varies with class that implements one of the
+     * subinterfaces of this interface.</p>
+     * @param context The <code>FacesContext</code> for this request
+     * @param parent The <code>UIComponent</code> to which this
+     * particular attached object must be applied.
+     */
+    public void applyAttachedObject(FacesContext context, UIComponent parent);
+
+
+    /**
+     * <p class="changed_added_2_0">Return the value of the "for"
+     * attribute specified by the <em>page author</em> on the tag for
+     * this <code>AttachedObjectHandler</code>.</p>
+     */
+    public String getFor();
+
+}
diff --git a/javax/faces/view/AttachedObjectTarget.java b/javax/faces/view/AttachedObjectTarget.java
new file mode 100644
index 0000000..02e10c6
--- /dev/null
+++ b/javax/faces/view/AttachedObjectTarget.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+import java.util.List;
+import javax.faces.component.UIComponent;
+
+/**
+ * <p class="changed_added_2_0">Within the declaration of a
+ * <em>composite component</em>, an <code>AttachedObjectTarget</code>
+ * allows the <em>composite component author</em> to expose the
+ * semantics of an inner component to the <em>page author</em> without
+ * exposing the rendering or implementation details of the <em>inner
+ * component</em>.  See {@link
+ * ViewDeclarationLanguage#getComponentMetadata} for the context in
+ * which implementations of this interface are used.</p>
+ * 
+ * <p class="changed_added_2_0">The implementation must ensure that 
+ * this instance is thread safe and may be shared among different component 
+ * trees.</p>
+
+ * <div class="changed_added_2_0">
+
+ * <p>Subinterfaces are provided for the common behavioral interfaces:
+ * {@link javax.faces.component.behavior.Behavior}, {@link
+ * javax.faces.component.ValueHolder}, {@link
+ * javax.faces.component.EditableValueHolder} and {@link
+ * javax.faces.component.ActionSource2}.  The default VDL implementation
+ * must provide a corresponding Facelets tag handler for each of the
+ * subinterfaces of this interface.  </p>
+
+ * </div>
+ *
+ * @since 2.0
+ */
+public interface AttachedObjectTarget {
+
+    /**
+     * <p class="changed_added_2_0">The key in the value set of the
+     * <em>composite component <code>BeanDescriptor</code></em>, the
+     * value for which is a
+     * <code>List<AttachedObjectTarget></code>.</p>
+     */
+    public static final String ATTACHED_OBJECT_TARGETS_KEY =
+            "javax.faces.view.AttachedObjectTargets";
+
+
+    /**
+     * <p class="changed_added_2_0">Returns the
+     * <code>List<UIComponent></code> that this
+     * <code>AttachedObjectTarget</code> exposes.  Each <em>attached
+     * object</em> exposed by the <em>composite component author</em>
+     * may point at multiple <code>UIComponent</code> instances within
+     * the composite component.  This method is used by the {@link
+     * javax.faces.view.ViewDeclarationLanguage#retargetAttachedObjects}
+     * method to take the appropriate action on the attached object.</p>
+     *
+     */
+    public List<UIComponent> getTargets(UIComponent topLevelComponent);
+
+
+    /**
+     * <p class="changed_added_2_0">Returns the name by which this
+     * attached object target is exposed to the <em>page
+     * author</em>.</p>
+     * 
+     */
+    public String getName();
+
+}
diff --git a/javax/faces/view/BehaviorHolderAttachedObjectHandler.java b/javax/faces/view/BehaviorHolderAttachedObjectHandler.java
new file mode 100644
index 0000000..5acb125
--- /dev/null
+++ b/javax/faces/view/BehaviorHolderAttachedObjectHandler.java
@@ -0,0 +1,57 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">Represent an attached object that is a
+ * <code>BehaviorHolder</code> in a VDL page.</p>
+ */
+public interface BehaviorHolderAttachedObjectHandler extends AttachedObjectHandler {
+
+    /**
+     * <p class="changed_added_2_0">Return the client event name to
+     * which this behavior applies.</p>
+     *
+     * @since 2.0
+     */
+    public String getEventName();
+
+}
diff --git a/javax/faces/view/BehaviorHolderAttachedObjectTarget.java b/javax/faces/view/BehaviorHolderAttachedObjectTarget.java
new file mode 100644
index 0000000..7f00a12
--- /dev/null
+++ b/javax/faces/view/BehaviorHolderAttachedObjectTarget.java
@@ -0,0 +1,51 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">Represent a <code>BehaviorHolder</code>
+ * attached object target in a VDL page.</p>
+ */
+public interface BehaviorHolderAttachedObjectTarget extends AttachedObjectTarget {
+
+    public abstract boolean isDefaultEvent();
+
+}
diff --git a/javax/faces/view/EditableValueHolderAttachedObjectHandler.java b/javax/faces/view/EditableValueHolderAttachedObjectHandler.java
new file mode 100644
index 0000000..d8e1229
--- /dev/null
+++ b/javax/faces/view/EditableValueHolderAttachedObjectHandler.java
@@ -0,0 +1,56 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">A VDL handler that exposes {@link
+ * javax.faces.validator.Validator} or {@link
+ * javax.faces.event.ValueChangeListener} to a <em>page author</em>.
+ * The default implementation of Facelets must provide an implemention
+ * of this in the handler for the <code><f:validator></code> (and
+ * any tags for any of the standard validators) and
+ * <code><f:valueChangeListener></code> tags.</p>
+ *
+ * @since 2.0
+ */
+public interface EditableValueHolderAttachedObjectHandler extends ValueHolderAttachedObjectHandler {
+
+}
diff --git a/javax/faces/view/EditableValueHolderAttachedObjectTarget.java b/javax/faces/view/EditableValueHolderAttachedObjectTarget.java
new file mode 100644
index 0000000..afe4a84
--- /dev/null
+++ b/javax/faces/view/EditableValueHolderAttachedObjectTarget.java
@@ -0,0 +1,52 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">A marker interface for VDL tags that
+ * represent <code><composite:editableValueHolder/></code> for use
+ * by the <em>composite component page author</em>.</p>
+ *
+ * @since 2.0
+ */
+public interface EditableValueHolderAttachedObjectTarget extends ValueHolderAttachedObjectTarget {
+
+}
diff --git a/javax/faces/view/Location.java b/javax/faces/view/Location.java
new file mode 100644
index 0000000..1a38c2c
--- /dev/null
+++ b/javax/faces/view/Location.java
@@ -0,0 +1,114 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view;
+
+import java.io.Serializable;
+
+/**
+ * <p class="changed_added_2_0">An object that represents the Location
+ * of a tag or attribute of a tag in a View Declaration Language
+ * file.</p>
+ *
+ * @since 2.0
+ * 
+ */
+public class Location implements Serializable {
+
+    private final String path;
+
+    private final int line;
+
+    private final int column;
+
+    public Location(String path, int line, int column) {
+        this.path = path;
+        this.line = line;
+        this.column = column;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the estimated character column.</p>
+     * 
+     */
+    public int getColumn() {
+        return column;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the line number in the page
+     * for this location.</p>
+     * 
+     */
+    public int getLine() {
+        return line;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the file path to the page
+     * represented by this location.</p>
+     * 
+     */
+    public String getPath() {
+        return path;
+    }
+
+    public String toString() {
+        return path + " @" + this.line + "," + this.column;
+    }
+}
diff --git a/javax/faces/view/StateManagementStrategy.java b/javax/faces/view/StateManagementStrategy.java
new file mode 100644
index 0000000..f9d135a
--- /dev/null
+++ b/javax/faces/view/StateManagementStrategy.java
@@ -0,0 +1,198 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_2">Encapsulate</span> the saving and
+ * restoring of the view to enable the VDL to take over the
+ * responsibility for handling this feature. Because {@link
+ * ViewDeclarationLanguage#getStateManagementStrategy} is required to
+ * return <code>null</code> for JSP views and non-<code>null</code> for
+ * views authored in Facelets for JSF 2, this specification only applys
+ * to Facelets for JSF 2.</p>
+ * 
+ * <p class="changed_added_2_2">Implementations must call
+ * {@link javax.faces.component.UIComponent#visitTree} on the 
+ * {@link javax.faces.component.UIViewRoot} to perform the saving and restoring
+ * of the view in the {@link #saveView} and {@link #restoreView} methods,
+ * respectively.
+ * </p>
+ *
+ * @since 2.0
+ */
+public abstract class StateManagementStrategy {
+
+    
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Return</span> the state of the
+     * current view in an <code>Object</code> that implements
+     * <code>Serializable</code> <span class="changed_modified_2_2">and
+     * can be passed to
+     * <code>java.io.ObjectOutputStream.writeObject()</code> without
+     * causing a <code>java.io.NotSerializableException</code> to be
+     * thrown.</span> The default implementation must perform the
+     * following algorithm or its semantic equivalent, <span
+     * class="changed_modified_2_2">explicitly performing all the steps
+     * listed here.</span></p>
+     *
+     * <div class="changed_added_2_0">
+
+     * 	<ol>
+
+	  <li><p>If the <code>UIViewRoot</code> of the current view is
+	  marked <code>transient</code>, return <code>null</code>
+	  immediately.  </p></li>
+
+	<li><p>Traverse the view and verify that each of the client ids
+	are unique.  Throw <code>IllegalStateException</code> if more
+	than one client id are the same.</p></li>
+
+	  <li><p>Visit the tree using {@link
+	  javax.faces.component.UIComponent#visitTree}.  For each node,
+	  call {@link javax.faces.component.UIComponent#saveState},
+	  saving the returned <code>Object</code> in a way such that it
+	  can be restored given only its client id.  Special care must
+	  be taken to handle the case of components that were added or
+	  deleted programmatically during this lifecycle traversal,
+	  rather than by the VDL.  </p></li>
+
+	</ol>
+
+     * <p>The implementation must ensure that the {@link
+     * javax.faces.component.UIComponent#saveState} method is called for
+     * each node in the tree.</p>
+
+     * <p>The data structure used to save the state obtained by
+     * executing the above algorithm must be <code>Serializable</code>,
+     * and all of the elements within the data structure must also be
+     * <code>Serializable</code>.</p>
+
+     * </div>
+
+     * @param context the <code>FacesContext</code> for this request.
+     *
+     * @since 2.0
+     */
+
+    public abstract Object saveView(FacesContext context);
+    
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_2">Restore</span> the state of the view
+     * with information in the request.  The default implementation must
+     * perform the following algorithm or its semantic equivalent.</p>
+     *
+     * <div class="changed_added_2_0">
+
+     * 	<ol>
+
+	  <li>
+
+          <p class="changed_added_2_2">As in the case of restore view on
+          an initial request, the view metadata must be restored and
+          properly handled as well.  Obtain the {@link ViewMetadata} for
+          the current <code>viewId</code>, and from that call {@link
+          ViewMetadata#createMetadataView}.  Store the resultant {@link
+          UIViewRoot} in the {@link FacesContext}. Obtain the state of
+          the <code>UIViewRoot</code> from the state <code>Object</code>
+          returned from {@link
+          javax.faces.render.ResponseStateManager#getState} and pass
+          that to {@link UIViewRoot#restoreViewScopeState}.</p>
+
+
+          <p>Build the view from the markup.  For all components in
+	  the view that do not have an explicitly assigned id in the
+	  markup, the values of those ids must be the same as on an
+	  initial request for this view.  This view will not contain
+	  any components programmatically added during the previous
+	  lifecycle run, and it <b>will</b> contain components that were
+	  programmatically deleted on the previous lifecycle run.  Both
+	  of these cases must be handled.</p>
+
+
+          </li>
+
+	  <li><p>Call {@link
+	  javax.faces.render.ResponseStateManager#getState} to obtain
+	  the data structure returned from the previous call to {@link
+	  #saveView}.</p></li>
+
+	  <li><p>Visit the tree using {@link
+	  javax.faces.component.UIComponent#visitTree}.  For each node,
+	  call {@link javax.faces.component.UIComponent#restoreState},
+	  passing the state saved corresponding to the current client
+	  id.</p></li>
+
+	  <li><p>Ensure that any programmatically deleted components are
+	  removed.</p></li>
+
+	  <li><p>Ensure any programmatically added components are added.
+	  </p></li>
+
+	</ol>
+
+     * <p>The implementation must ensure that the {@link
+     * javax.faces.component.UIComponent#restoreState} method is called
+     * for each node in the tree, except for those that were
+     * programmatically deleted on the previous run through the
+     * lifecycle.</p>
+
+     * </div>
+     *
+     * @param context the <code>FacesContext</code> for this request
+
+     * @param viewId the view identifier for which the state should be restored
+
+     * @param renderKitId the render kit id for this state.
+
+     * @since 2.0
+     */
+
+    public abstract UIViewRoot restoreView(FacesContext context, String viewId,
+                                           String renderKitId);
+
+    
+}
diff --git a/javax/faces/view/ValueHolderAttachedObjectHandler.java b/javax/faces/view/ValueHolderAttachedObjectHandler.java
new file mode 100644
index 0000000..358ae9e
--- /dev/null
+++ b/javax/faces/view/ValueHolderAttachedObjectHandler.java
@@ -0,0 +1,54 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">A VDL handler that exposes {@link
+ * javax.faces.convert.Converter} to a <em>page author</em>.  The
+ * default implementation of Facelets must provide an implemention of
+ * this in the handler for the <code><f:converter></code> (and any
+ * tags for any of the standard converters) tags.</p>
+ *
+ * @since 2.0
+ */
+public interface ValueHolderAttachedObjectHandler extends AttachedObjectHandler {
+
+}
diff --git a/javax/faces/view/ValueHolderAttachedObjectTarget.java b/javax/faces/view/ValueHolderAttachedObjectTarget.java
new file mode 100644
index 0000000..12287ab
--- /dev/null
+++ b/javax/faces/view/ValueHolderAttachedObjectTarget.java
@@ -0,0 +1,52 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+/**
+ * <p class="changed_added_2_0">A marker interface for VDL tags that
+ * represent <code><composite:valueHolder/></code> for use by the
+ * <em>composite component page author</em>.</p>
+ *
+ * @since 2.0
+ */
+public interface ValueHolderAttachedObjectTarget extends AttachedObjectTarget {
+
+}
diff --git a/javax/faces/view/ViewDeclarationLanguage.java b/javax/faces/view/ViewDeclarationLanguage.java
new file mode 100644
index 0000000..62425b9
--- /dev/null
+++ b/javax/faces/view/ViewDeclarationLanguage.java
@@ -0,0 +1,641 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+import java.beans.BeanInfo;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+import javax.faces.application.Resource;
+import javax.faces.application.ResourceHandler;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_0_rev_a
+ * changed_modified_2_1 changed_modified_2_2">The</span> contract that a view declaration
+ * language must implement to interact with the JSF runtime.  An
+ * implementation of this class must be thread-safe.</p>
+ *
+ * <div class="changed_added_2_0">
+ * 
+ * <p>Instances of this class are application scoped and must be
+ * obtained from the {@link ViewDeclarationLanguageFactory}.</p>
+
+ * </div>
+ * 
+ * @since 2.0
+ * 
+ */
+public abstract class ViewDeclarationLanguage {
+
+    /**
+     * <p class="changed_added_2_0">Identifier for the JSP view declaration 
+     * language.</p>
+     *
+     * @since 2.1
+     */
+    public final static String JSP_VIEW_DECLARATION_LANGUAGE_ID =
+        "java.faces.JSP";
+
+    /**
+     * <p class="changed_added_2_0">Identifier for the Facelets view 
+     * declaration language.</p>
+     *
+     * @since 2.1
+     */
+    public final static String FACELETS_VIEW_DECLARATION_LANGUAGE_ID =
+        "java.faces.Facelets";
+
+    /**
+     * <p class="changed_added_2_0">Return a reference to the component
+     * metadata for the composite component represented by the argument
+     * <code>componentResource</code>, or <code>null</code> if the
+     * metadata cannot be found.  See section JSF.7.7.2 for the
+     * specification of the default implementation. JSP implementations
+     * must throw <code>UnsupportedOperationException</code>.</p>
+     *
+     * @param context The <code>FacesContext</code> for this request.
+     * @param componentResource The <code>Resource</code> that represents the component.
+     * @since 2.0
+     *
+     * @throws NullPointerException if any of the arguments are
+     * <code>null</code>.
+     *
+     * @throws javax.faces.FacesException if there is an error in
+     * obtaining the metadata
+     *
+     * @throws UnsupportedOperationException if this is a JSP VDL
+     * implementation.
+     */
+    public abstract BeanInfo getComponentMetadata(FacesContext context, Resource componentResource);
+
+
+    /**
+     * <p class="changed_added_2_0">Return a reference to the view
+     * metadata for the view represented by the argument
+     * <code>viewId</code>, or <code>null</code> if the metadata cannot
+     * be found.  See section JSF.7.7.2 for the specification of the
+     * default implementation.  Facelets for JSF 2 implementation must
+     * return non-<code>null</code>. JSP implementations must return
+     * <code>null</code>.</p>
+     *
+     * @param context The <code>FacesContext</code> for this request.
+     * @param viewId the view id from whith to extract the metadata
+     * @since 2.0
+     *
+     * @throws NullPointerException if any of the arguments are
+     * <code>null</code>.
+     *
+     * @throws javax.faces.FacesException if there is an error in
+     * obtaining the metadata
+     */
+    public abstract ViewMetadata getViewMetadata(FacesContext context, String viewId);
+
+
+    /**
+     * <p class="changed_added_2_0">Take implementation specific action
+     * to discover a <code>Resource</code> given the argument
+     * <code>componentResource</code>.  See section JSF.7.7.2 for the
+     * specification of the default implementation.  JSP implementations
+     * must throw <code>UnsupportedOperationException</code>.</p>
+     *
+     * @param context The <code>FacesContext</code> for this request.
+     * @param componentResource The <code>Resource</code> that represents the component.
+     * @since 2.0
+     *
+     * @throws NullPointerException if any of the arguments are
+     * <code>null</code>.
+     *
+     * @throws javax.faces.FacesException if there is an error in
+     * obtaining the script component resource
+     * @throws UnsupportedOperationException if this is a JSP VDL
+     * implementation.
+     */
+    public abstract Resource getScriptComponentResource(FacesContext context,
+                                                        Resource componentResource);
+    
+    
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">Create</span>
+     * a <code>UIViewRoot</code> from the VDL contained in the artifact referenced by the argument
+     * <code>viewId</code>.  <span class="changed_modified_2_2">See section JSF.7.7.2 for the specification of
+     * the default implementation.</span></p>
+     *
+     * @param context the <code>FacesContext</code> for this request.
+     * @param viewId the identifier of an artifact that contains the VDL
+     * syntax that describes this view.
+     *
+     * @throws NullPointerException if any of the arguments are
+     * <code>null</code>
+
+     * @since 2.0
+     */
+
+    public abstract UIViewRoot createView(FacesContext context,
+                                 String viewId);
+    
+    /**
+     * <p class="changed_added_2_2">Create a component given a 
+     * {@link ViewDeclarationLanguage} specific
+     * tag library URI and tag name.  The runtime must support this method operating
+     * for the Facelets VDL.
+     * Other kinds of {@code ViewDeclarationLanguage} may be supported but are not
+     * required to be supported. For backward compatibility
+     * with decorated {@code ViewDeclrationLanguage} implementations that do
+     * not override this method, a default implementation is provided that returns
+     * {@code null}.  However, any implementation that is compliant with the
+     * version of the specification in which this method was introduced must
+     * implement this method.
+     * </p>
+     * 
+     * @param context the {@link FacesContext} for this request
+     * @param taglibURI the fully qualified tag library URI that contains the component
+     * @param tagName the name of the tag within that library that exposes the component
+     * @param attributes any name=value pairs that would otherwise have been 
+     * given on the markup that would cause the creation of this component or
+     * {@code null} if no attributes need be given.  
+     * 
+     * @throws NullPointerException if {@code context}, {@code taglibURI}, or 
+     * {@code tagName} are {@code null}
+     * 
+     * @since 2.2
+     */
+    
+    public UIComponent createComponent(FacesContext context, 
+            String taglibURI, String tagName, 
+            Map<String, Object> attributes) {
+        return null;
+    }
+    
+    
+    /**
+     * <p class="changed_added_2_0">Restore a <code>UIViewRoot</code>
+     * from a previously created view.  See section JSF.7.7.2 for the
+     * specification of the default implementation.</p>
+     *
+     * @param context the <code>FacesContext</code> for this request.
+     * @param viewId the identifier for a previously rendered view.
+     *
+     * @throws NullPointerException if any of the arguments are
+     * <code>null</code>
+     */
+    public abstract UIViewRoot restoreView(FacesContext context, String viewId);
+
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_0_rev_a">Assuming</span> the component
+     * metadata for argument <code>topLevelComponent</code> has been
+     * made available by an earlier call to {@link
+     * ViewDeclarationLanguage#getComponentMetadata}, leverage the
+     * component metadata for the purpose of re-targeting attached
+     * objects from the top level composite component to the individual
+     * {@link AttachedObjectTarget} instances inside the composite
+     * component.  This method must be called by the {@link
+     * ViewDeclarationLanguage} implementation when creating the
+     * <code>UIComponent</code> tree when a composite component usage is
+     * encountered.</p>
+     *
+     * <div class="changed_added_2_0">
+     *
+     * <p>An algorithm semantically equivalent to the following must be
+     * implemented.</p>
+     *
+     *<ul>
+     *
+     *<li><p>Obtain the metadata for the composite component.
+     *Currently this entails getting the value of the {@link
+     *UIComponent#BEANINFO_KEY} component attribute, which will be
+     *an instance of <code>BeanInfo</code>.  If the metadata cannot
+     *be found, log an error message and return.</p></li>
+     *
+     *<li><p>Get the <code>BeanDescriptor</code> from the
+     *<code>BeanInfo</code>.</p></li>
+     *
+     *<li><p>Get the value of the {@link
+     *AttachedObjectTarget#ATTACHED_OBJECT_TARGETS_KEY} from the
+     *<code>BeanDescriptor</code>'s <code>getValue()</code> method.
+     *This will be a <code>List<{@link
+     *AttachedObjectTarget}></code>.  Let this be
+     *<em>targetList</em>.</p></li>
+     *
+     *<li><p>For each <em>curHandler</em> entry in the argument
+     *<code>handlers</code></p>
+     *
+     *<ul>
+     *
+     *<li><p>Let <em>forAttributeValue</em> be the return from
+     *{@link AttachedObjectHandler#getFor}.  </p></li>
+     *
+     *<li><p>For each <em>curTarget</em> entry in
+     *<em>targetList</em>, the first of the following items that
+     *causes a match will take this action:</p>
+     *
+     *<p style="margin-left: 3em;">For each <code>UIComponent</code> in the
+     *list returned from <em>curTarget.getTargets()</em>, call
+     *<em>curHandler.<a
+     *href="AttachedObjectHandler.html#applyAttachedObject">applyAttachedObject()</a></em>,
+     *passing the <code>FacesContext</code> and the
+     *<code>UIComponent</code>.</p>
+     *
+     *<p>and cause this inner loop to terminate.</p>
+     *
+     *<ul>
+     *
+     *<li><p>If <em>curHandler</em> is an instance of {@link
+     *ActionSource2AttachedObjectHandler} and <em>curTarget</em> is an
+     *instance of {@link ActionSource2AttachedObjectTarget}, and
+     *<em>curTarget.getName()</em> is equal to <em>curTargetName</em>,
+     *consider it a match.</p></li>
+     *
+     *<li><p>If <em>curHandler</em> is an instance of {@link
+     *EditableValueHolderAttachedObjectHandler} and <em>curTarget</em>
+     *is an instance of {@link EditableValueHolderAttachedObjectTarget},
+     *<span class="changed_modified_2_0_rev_a">and
+     *<em>curTarget.getName()</em> is equal to <em>curTargetName</em>,
+     *consider it a match.</span></p></li>
+     *
+     *<li class="changed_modified_2_0_rev_a"><p>If <em>curHandler</em>
+     *is an instance of {@link ValueHolderAttachedObjectHandler} and
+     *<em>curTarget</em> is an instance of {@link
+     *ValueHolderAttachedObjectTarget}, and <em>curTarget.getName()</em>
+     *is equal to <em>curTargetName</em>, consider it a match.</p></li>
+
+     *<li><p>If <em>curHandler</em> is an instance of {@link
+     *BehaviorHolderAttachedObjectHandler} and <em>curTarget</em> is an
+     *instance of {@link BehaviorHolderAttachedObjectTarget}, and either
+     *of the following conditions are true,</p>
+
+     * <ul>
+     *
+     * <li><em>curHandler.getEventName()</em> is not <code>null</code>
+     * and is equal to <em>curTargetName</em>.</li>
+     *
+     * <li><em>curHandler.getEventName()</em> is <code>null</code> and
+     * <em>curTarget.isDefaultEvent()</em> is <code>true</code>.</li>
+     *
+     * </ul>
+
+     *<p>consider it a match.</p></li>
+
+     *</ul>
+     *</li>
+     *</ul>
+     *</li>
+     *</ul>
+
+     * <p class="changed_modified_2_0_rev_a">The implementation must
+     * support retargeting attached objects from the top level compsite
+     * component to targets that are composite and non-composite
+     * components.</p>
+     *
+     * <p>An implementation is provided that will throw
+     * <code>UnsupportedOperationException</code>.  A Faces implementation
+     * compliant with version 2.0 and beyond of the specification must 
+     * override this method.</p>
+     *
+     * </div>
+     *
+     * @param context the FacesContext for this request.
+     *
+     * @param topLevelComponent The UIComponent in the view to which the
+     * attached objects must be attached.  This UIComponent must have
+     * its component metadata already associated and available from via
+     * the JavaBeans API.
+     *
+     * @throws NullPointerException if any of the arguments are
+     * <code>null</code>.
+
+     * @since 2.0
+     *
+     */
+    public void retargetAttachedObjects(FacesContext context,
+                                        UIComponent topLevelComponent,
+                                        List<AttachedObjectHandler> handlers)  {
+        
+        // no-op
+
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Assuming the component metadata for
+     * argument <code>topLevelComponent</code> has been made available
+     * by an earlier call to {@link
+     * ViewDeclarationLanguage#getComponentMetadata}, leverage the
+     * component metadata for the purpose of re-targeting any method
+     * expressions from the top level component to the appropriate inner
+     * component.  For each attribute that is a
+     * <code>MethodExpression</code> (as indicated by the presence of a
+     * "<code>method-signature</code>" attribute and the absence of a
+     * "<code>type</code>" attribute), the following action must be
+     * taken:</p>
+
+     * <div class="changed_added_2_0">
+     *
+     * <ul>
+     *
+     * <li><p>Get the value of the <em>targets</em> attribute.  If the
+     * value is a <code>ValueExpression</code> evaluate it.  If there is
+     * no <em>targets</em> attribute, let the name of the metadata
+     * element be the evaluated value of the <em>targets
+     * attribute.</em></p></li>
+     * 
+     * <li><p>Interpret <em>targets</em> as a space (not tab) separated
+     * list of ids. For each entry in the list:</p>
+     * 
+     * <ul>
+     *
+     * <li><p>Find the inner component of the
+     * <em>topLevelComponent</em> with the id equal to
+     * the current list entry.  For discussion, this component is called
+     * <em>target</em>.  If not found, log and error and continue to
+     * the next attribute.</p></li>
+     *
+     * <li><p>For discussion the declared name of the attribute is
+     * called <em>name</em>.</p></li>
+     *
+     * <li><p>In the attributes map of the
+     * <em>topLevelComponent</em>, look up the entry under the key
+     * <em>name</em>.  Assume the result is a
+     * <code>ValueExpression</code>.  For discussion, this is
+     * <em>attributeValueExpression</em>.  If not found, log an error
+     * and continue to the next attribute.</p></li>
+     *
+     * <li><p>If <em>name</em> is equal to the string "action", or
+     * "actionListener" without the quotes, assume <em>target</em> is
+     * an {@link javax.faces.component.ActionSource2}.</p></li>
+     *
+     * <li><p>If <em>name</em> is equal to the string "validator", or
+     * "valueChangeListener" without the quotes, assume
+     * <em>target</em> is an {@link
+     * javax.faces.component.EditableValueHolder}.</p></li>
+     *
+     * <li><p>Call <code>getExpressionString()</code> on the
+     * <em>attributeValueExpression</em> and use that string to
+     * create a <code>MethodExpression</code> of the appropriate
+     * signature for <em>name</em>.</p></li>
+     *
+     * <li><p>If <em>name</em> is not equal to any of the previously
+     * listed strings, call <code>getExpressionString()</code> on the
+     * <em>attributeValueExpression</em> and use that string to
+     * create a <code>MethodExpression</code> where the signature is
+     * created based on the value of the
+     * "<code>method-signature</code>" attribute of the
+     * <code><composite:attribute /></code> tag.</p></li>
+     *
+     * <li><p>Let the resultant <code>MethodExpression</code> be
+     * called <em>attributeMethodExpression</em> for discussion.
+     * </p></li>
+     *
+     * <li><p>If <em>name</em> is equal to the string "action"
+     * without the quotes, call {@link
+     * javax.faces.component.ActionSource2#setActionExpression} on
+     * <em>target</em>, passing <em>attributeMethodExpression</em>.</p></li>
+     *
+     * <li><p>If <em>name</em> is equal to the string
+     * "actionListener" without the quotes, call {@link
+     * javax.faces.component.ActionSource#addActionListener} on
+     * <em>target</em>, passing <em>attributeMethodExpression</em>
+     * wrapped in a {@link javax.faces.event.MethodExpressionActionListener}.</p></li>
+     *
+     * <li><p>If <em>name</em> is equal to the string
+     * "validator" without the quotes, call {@link
+     * javax.faces.component.EditableValueHolder#addValidator} on <em>target</em>,
+     * passing <em>attributeMethodExpression</em> wrapped in a {@link
+     * javax.faces.validator.MethodExpressionValidator}.</p></li>
+     *
+     * <li><p>If <em>name</em> is equal to the string
+     * "valueChangeListener" without the quotes, call {@link
+     * javax.faces.component.EditableValueHolder#addValueChangeListener} on
+     * <em>target</em>, passing <em>attributeMethodExpression</em> wrapped in a
+     * {@link javax.faces.event.MethodExpressionValueChangeListener}.</p></li>
+     *
+     * <li><p>Otherwise, assume that the <code>MethodExpression</code>
+     * should be placed in the components attribute set.  The runtme
+     * must create the <code>MethodExpression</code> instance based on
+     * the value of the "<code>method-signature</code>"
+     * attribute.</p></li>
+
+     * </ul>
+     * 
+     * </li>
+     * 
+     * </ul>
+     *
+     * <p>An implementation is provided that will throw
+     * <code>UnsupportedOperationException</code>.  A Faces implementation
+     * compliant with version 2.0 and beyond of the specification must 
+     * override this method.</p>
+     *
+     * </div>
+     *
+     * @param context the FacesContext for this request.
+     *
+     * @param topLevelComponent The UIComponent in the view to which the
+     * attached objects must be attached.  This UIComponent must have
+     * its component metadata already associated and available from via
+     * the JavaBeans API.
+     *
+     * @throws NullPointerException if <code>context</code>
+     * or <code>topLevelComponent</code> is <code>null</code>.
+     *
+     * @since 2.0
+     */
+    public void retargetMethodExpressions(FacesContext context,
+                                          UIComponent topLevelComponent) {
+
+        // no-op
+        
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Return the list of resource library
+     * contracts that will be made available for use in the view
+     * specified by the argument {@code viewId}.  If no match is found,
+     * return an empty list.  See section JSF.7.7.2 for the
+     * specification of the default implementation.  For backward
+     * compatibility with prior implementations, an implementation is
+     * provided that returns {@code null}, but any implementation
+     * compliant with the version of the specification in which this
+     * method was introduced must implement it as specified in
+     * JSF.7.7.2. </p>
+     * 
+     * @param context the {@code FacesContext} for this request
+     * @param viewId the view id for which the applicable resource library 
+     * contracts should be calculated.
+     * 
+     * @since 2.2
+     */
+    
+    public List<String> calculateResourceLibraryContracts(FacesContext context,
+            String viewId) {
+        return null;
+    }
+    
+
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_1">Take</span> any actions specific to
+     * this VDL implementation to cause the argument
+     * <code>UIViewRoot</code> which must have been created via a call
+     * to {@link #createView}, to be populated with children.</p>
+
+     * <div class="changed_added_2_0">
+
+     * <p>The Facelets implementation must insure that markup comprising
+     * the view must be executed, with the {@link
+     * javax.faces.component.UIComponent} instances in the view being
+     * encountered in the same depth-first order as in other lifecycle
+     * methods defined on <code>UIComponent</code>, and added to the
+     * view (but not rendered) during the traversal. The runtime must
+     * guarantee that the view must be fully populated before any of the
+     * following happen.</p>
+
+     * <ul>
+     *
+     * <li><p>The {@link javax.faces.event.PhaseListener#afterPhase}
+     * method of any <code>PhaseListener</code>s attached to the
+     * application is called</p></li>
+
+     * <li><p>The {@link javax.faces.component.UIViewRoot} phase
+     * listener installed via {@link
+     * javax.faces.component.UIViewRoot#setAfterPhaseListener} or {@link
+     * javax.faces.component.UIViewRoot#addPhaseListener} are called.</p></li>
+     *
+     * </ul>
+
+     * <p class="changed_modified_2_1">If the <code>root</code> is
+     * already populated with children, the view must still be re-built,
+     * but care must be taken to ensure that the existing components are
+     * correctly paired up with their VDL counterparts in the VDL page.
+     * Also, any system events that would normally be generated during
+     * the adding or removing of components from the view must be
+     * temporarily disabled during the creation of the view and then
+     * re-enabled when the view has been built.</p>
+
+     * </div>
+
+     * @param context the <code>FacesContext</code> for this request
+
+     * @param root the <code>UIViewRoot</code> to populate with children
+     * using techniques specific to this VDL implementation.
+     */
+    public abstract void buildView(FacesContext context, UIViewRoot root)
+    throws IOException;
+
+    
+    /**
+     * <p class="changed_added_2_0">Render a view rooted at
+     * argument<code>view</code>. See section JSF.7.7.2 for the
+     * specification of the default implementation.</p>
+     *
+     * @param context the <code>FacesContext</code> for this request.
+     * @param view the <code>UIViewRoot</code> from an early call to
+     * {@link #createView} or {@link #restoreView}.
+     *
+     * @throws NullPointerException if any of the arguments are
+     * <code>null</code>
+     */
+    public abstract void renderView(FacesContext context,
+                                    UIViewRoot view)
+    throws IOException;
+    
+    /**
+     * <p class="changed_added_2_0">For implementations that want to
+     * control the implementation of state saving and restoring, the
+     * {@link StateManagementStrategy} allows them to do so.  Returning
+     * <code>null</code> indicates that the implementation wishes the
+     * runtime to handle the state saving and restoring.
+     * Implementations that provide the VDL for Facelets for JSF 2.0 and
+     * later must return non-<code>null</code> from this method.</p>
+     *
+     *
+     * @since 2.0
+     */ 
+
+    public abstract StateManagementStrategy getStateManagementStrategy(FacesContext context,
+            String viewId);
+
+
+    /**
+     * <p class="changed_added_2_1"><span class="changed_modified_2_2">Tests</span>
+     * whether a physical resource
+     * corresponding to the specified viewId exists.</p>
+     *
+     * <p class="changed_modified_2_2">The default implementation uses 
+     * {@link javax.faces.application.ResourceHandler#createViewResource}
+     * to locate the physical resource.</p>
+     *
+     * @param context The <code>FacesContext</code> for this request.
+     * @param viewId the view id to test
+     *
+     * @since 2.1
+     */    
+    public boolean viewExists(FacesContext context, 
+                              String viewId) {
+        boolean result = false;
+        ResourceHandler rh = context.getApplication().getResourceHandler();
+        result = null != rh.createViewResource(context, viewId);
+
+        return result;
+    }
+
+    /**
+     * <p class="changed_added_2_1">Returns a non-null String that can be 
+     * used to identify this view declaration language.</p>
+     *
+     * <p>The default implementation returns the fully qualified class name
+     * of the view declaration language implementation.  Subclasses may
+     * override to provide a more meaningful id.</p>
+     *
+     * @since 2.1
+     */
+    public String getId() {
+        return getClass().getName();
+    }
+
+    private static final Logger LOGGER =
+          Logger.getLogger("javax.faces.view", "javax.faces.LogStrings");
+}
diff --git a/javax/faces/view/ViewDeclarationLanguageFactory.java b/javax/faces/view/ViewDeclarationLanguageFactory.java
new file mode 100644
index 0000000..12fe095
--- /dev/null
+++ b/javax/faces/view/ViewDeclarationLanguageFactory.java
@@ -0,0 +1,107 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+import javax.faces.FacesWrapper;
+
+/**
+ * <p class="changed_added_2_0"><strong
+ * class="changed_modified_2_1">ViewDeclarationLanguageFactory</strong>
+ * is a factory object that creates (if needed) and returns a new {@link
+ * ViewDeclarationLanguage} instance based on the VDL found in a
+ * specific view.</p>
+ *
+ * <div class="changed_added_2_0">
+ * 
+ * <p>There must be one <code>ViewDeclarationLanguageFactory</code> instance per web
+ * application that is utilizing JavaServer Faces.  This instance can be
+ * acquired, in a portable manner, by calling:</p>
+ *
+ * <pre><code>
+ *   ViewDeclarationLanguageFactory factory = (ViewDeclarationLanguageFactory)
+ *    FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
+ * </code></pre>
+ *
+
+ * </div>
+ *
+ * @since 2.0
+ */
+
+public abstract class ViewDeclarationLanguageFactory implements FacesWrapper<ViewDeclarationLanguageFactory> {
+
+    public ViewDeclarationLanguageFactory() {
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     */
+    public ViewDeclarationLanguageFactory getWrapped() {
+        return null;
+    }
+
+    
+    /**
+     * <p class="changed_added_2_0"><span
+     * class="changed_modified_2_1">Return</span> the
+     * <code>ViewDeclarationLanguage</code> instance suitable for
+     * handling the VDL contained in the page referenced by the argument
+     * <code>viewId</code>.  The default implementation must return a
+     * valid <code>ViewDeclarationLanguage</code> instance for views
+     * written in either JSP, Faces XML Views, or Facelets for JSF
+     * 2.</p>
+     * 
+     * @param viewId the viewId to be inspected for an appropriate 
+     * <code>ViewDeclarationLanguage</code> implementation for the VDL used
+     * in the view.
+     * 
+     * @since 2.0
+     * 
+     * @throws NullPointerException if <code>viewId</code> is null.
+     * 
+     */
+    public abstract ViewDeclarationLanguage getViewDeclarationLanguage(String viewId);
+    
+}
diff --git a/javax/faces/view/ViewDeclarationLanguageWrapper.java b/javax/faces/view/ViewDeclarationLanguageWrapper.java
new file mode 100644
index 0000000..a8b8431
--- /dev/null
+++ b/javax/faces/view/ViewDeclarationLanguageWrapper.java
@@ -0,0 +1,158 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+
+import java.beans.BeanInfo;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import javax.faces.FacesWrapper;
+import javax.faces.application.Resource;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_2">Provides a simple implementation of 
+ * {@link ViewDeclarationLanguage} that can
+ * be subclassed by developers wishing to provide specialized behavior
+ * to an existing {@link ViewDeclarationLanguage} instance.  The default
+ * implementation of all methods is to call through to the wrapped
+ * {@link ViewDeclarationLanguage} instance.</p>
+ *
+ * <p class="changed_added_2_2">Usage: extend this class and override 
+ * {@link #getWrapped} to
+ * return the instance being wrapping.</p>
+ *
+ * @since 2.2
+ */
+public abstract class ViewDeclarationLanguageWrapper extends ViewDeclarationLanguage implements FacesWrapper<ViewDeclarationLanguage> {
+
+
+    // ----------------------------------------------- Methods from FacesWrapper
+
+
+    /**
+     * @return the wrapped {@link ViewDeclarationLanguage} instance
+     * @see javax.faces.FacesWrapper#getWrapped()
+     */
+    @Override
+    public abstract ViewDeclarationLanguage getWrapped();
+
+    // ----------------------------------------------- Methods from ViewDeclarationLanguage
+
+
+    @Override
+    public String getId() {
+        return super.getId();
+    }
+
+    @Override
+    public void retargetAttachedObjects(FacesContext context, UIComponent topLevelComponent, List<AttachedObjectHandler> handlers) {
+        getWrapped().retargetAttachedObjects(context, topLevelComponent, handlers);
+    }
+
+    @Override
+    public void retargetMethodExpressions(FacesContext context, UIComponent topLevelComponent) {
+        getWrapped().retargetMethodExpressions(context, topLevelComponent);
+    }
+
+    @Override
+    public boolean viewExists(FacesContext context, String viewId) {
+        return getWrapped().viewExists(context, viewId);
+    }
+
+    @Override
+    public void buildView(FacesContext context, UIViewRoot root) throws IOException {
+        getWrapped().buildView(context, root);
+    }
+
+    @Override
+    public List<String> calculateResourceLibraryContracts(FacesContext context, String viewId) {
+        return getWrapped().calculateResourceLibraryContracts(context, viewId);
+    }
+
+    @Override
+    public UIViewRoot createView(FacesContext context, String viewId) {
+        return getWrapped().createView(context, viewId);
+    }
+
+    @Override
+    public UIComponent createComponent(FacesContext context, String taglibURI, String tagName, Map<String, Object> attributes) {
+        return getWrapped().createComponent(context, taglibURI, tagName, attributes);
+    }
+
+    @Override
+    public BeanInfo getComponentMetadata(FacesContext context, Resource componentResource) {
+        return getWrapped().getComponentMetadata(context, componentResource);
+    }
+
+    @Override
+    public Resource getScriptComponentResource(FacesContext context, Resource componentResource) {
+        return getWrapped().getScriptComponentResource(context, componentResource);
+    }
+
+    @Override
+    public StateManagementStrategy getStateManagementStrategy(FacesContext context, String viewId) {
+        return getWrapped().getStateManagementStrategy(context, viewId);
+    }
+
+    @Override
+    public ViewMetadata getViewMetadata(FacesContext context, String viewId) {
+        return getWrapped().getViewMetadata(context, viewId);
+    }
+
+    @Override
+    public void renderView(FacesContext context, UIViewRoot view) throws IOException {
+        getWrapped().renderView(context, view);
+    }
+
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId) {
+        return getWrapped().restoreView(context, viewId);
+    }
+
+
+
+
+    
+}
diff --git a/javax/faces/view/ViewMetadata.java b/javax/faces/view/ViewMetadata.java
new file mode 100644
index 0000000..1ff9451
--- /dev/null
+++ b/javax/faces/view/ViewMetadata.java
@@ -0,0 +1,182 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.List;
+import javax.faces.component.UIViewParameter;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewAction;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0"/> <code>ViewMetadata</code> is
+ * reponsible for extracting and providing view parameter metadata from
+ * VDL views.  Because {@link ViewDeclarationLanguage#getViewMetadata}
+ * is required to return <code>null</code> for JSP views and
+ * non-<code>null</code> for views authored in Facelets for JSF 2, this
+ * specification only applys to Facelets for JSF 2.  </p>
+ *
+ * @since 2.0
+ */
+public abstract class ViewMetadata {
+
+
+    /**
+     * <p class="changed_added_2_0"/>
+     * @return the view ID for which this <code>ViewMetadata</code> instance
+     *  was created
+     */
+    public abstract String getViewId();
+
+
+    /**
+     * <p class="changed_added_2_0"> Creates a new {@link UIViewRoot}
+     * containing only view parameter metadata.  The processing of
+     * building this <code>UIViewRoot</code> with metadata should not
+     * cause any events to be published to the application.  The
+     * implementation must call {@link FacesContext#setProcessingEvents}
+     * passing <code>false</code> as the argument, at the beginning of
+     * the method, and pass <code>true</code> to the same method at the
+     * end.  The implementation must ensure that this happens regardless
+     * of ant exceptions that may be thrown.</p>
+     *
+     * @param context the {@link FacesContext} for the current request
+     * @return a <code>UIViewRoot</code> containing only view parameter metadata
+     *  (if any)
+     */
+    public abstract UIViewRoot createMetadataView(FacesContext context);
+
+
+    /**
+     * <p class="changed_added_2_0"> Utility method to extract view
+     * metadata from the provided {@link UIViewRoot}.  </p>
+     *
+     * @param root the {@link UIViewRoot} from which the metadata will
+     * be extracted.
+     *
+     * @return a <code>Collection</code> of {@link UIViewParameter}
+     * instances.  If the view has no metadata, the collection will be
+     * empty.
+     */
+    public static Collection<UIViewParameter> getViewParameters(UIViewRoot root) {
+
+        Collection<UIViewParameter> params;
+        UIComponent metadataFacet = root.getFacet(UIViewRoot.METADATA_FACET_NAME);
+
+        if (metadataFacet == null) {
+            params = Collections.emptyList();
+        } else {
+            params = new ArrayList<UIViewParameter>();
+            List<UIComponent> children = metadataFacet.getChildren();
+            int len = children.size();
+            for (int i = 0; i < len; i++) {
+                UIComponent c = children.get(i);
+                if (c instanceof UIViewParameter) {
+                    params.add((UIViewParameter) c);
+                }
+            }
+        }
+
+        return params;
+
+    }
+    
+    /**
+     * <p class="changed_added_2_2"> Utility method to extract view
+     * metadata from the provided {@link UIViewRoot}.  </p>
+     *
+     * @param root the {@link UIViewRoot} from which the metadata will
+     * be extracted.
+     *
+     * @return a <code>Collection</code> of {@link UIViewAction}
+     * instances.  If the view has no metadata, the collection will be
+     * empty.
+     */
+    public static Collection<UIViewAction> getViewActions(UIViewRoot root) {
+        Collection<UIViewAction> actions;
+        UIComponent metadataFacet = root.getFacet(UIViewRoot.METADATA_FACET_NAME);
+
+        if (metadataFacet == null) {
+            actions = Collections.emptyList();
+        } else {
+            actions = new ArrayList<UIViewAction>();
+            List<UIComponent> children = metadataFacet.getChildren();
+            int len = children.size();
+            for (int i = 0; i < len; i++) {
+                UIComponent c = children.get(i);
+                if (c instanceof UIViewAction) {
+                    actions.add((UIViewAction) c);
+                }
+            }
+        }
+        
+        return actions;
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Utility method to determine if the 
+     * the provided {@link UIViewRoot} has metadata.  The default implementation will 
+     * return true if the provided {@code UIViewRoot} has a facet 
+     * named {@link UIViewRoot#METADATA_FACET_NAME} and that facet has children.
+     * It will return  false otherwise.</p>
+     *
+     * @param root the {@link UIViewRoot} from which the metadata will
+     * be extracted from
+     *
+     * @return true if the view has metadata, false otherwise.
+     */
+    public static boolean hasMetadata(UIViewRoot root) {
+        boolean result = false;
+        
+        UIComponent metadataFacet = root.getFacet(UIViewRoot.METADATA_FACET_NAME);
+        if (null != metadataFacet) {
+            result = 0 < metadataFacet.getChildCount();
+        }
+        
+        return result;
+    }
+
+
+}
diff --git a/javax/faces/view/ViewScoped.java b/javax/faces/view/ViewScoped.java
new file mode 100644
index 0000000..a0fea3b
--- /dev/null
+++ b/javax/faces/view/ViewScoped.java
@@ -0,0 +1,124 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import javax.enterprise.context.NormalScope;
+
+/**
+ * <p class="changed_added_2_2">When this annotation, along with {@code
+ * javax.inject.Named} is found on a class, the runtime must place the
+ * bean in a CDI scope such that it remains active as long as {@link
+ * javax.faces.application.NavigationHandler#handleNavigation} does not
+ * cause a navigation to a view with a viewId that is different than the
+ * viewId of the current view. Any injections and notifications required
+ * by CDI and the Java EE platform must occur as usual at the expected
+ * time.</p>
+ * 
+ * <div class="changed_added_2_2">
+
+ * <p>If <code>ProjectStage</code> is not
+ * <code>ProjectStage.Production</code>, verify that the current {@link
+ * javax.faces.component.UIViewRoot} does not have its {@code transient}
+ * property set to {@code true}.  If so, add a <code>FacesMessage</code>
+ * for the current {@code viewId} to the <code>FacesContext</code>
+ * stating {@code @ViewScoped} beans cannot work if the view is marked
+ * as transient.    Also log a <code>Level.WARNING</code> message to the 
+ * log.  If <code>ProjectStage</code> <strong>is</strong>
+ * <code>ProjectStage.Production</code>, do not do this
+ * verification.</p>
+
+ * <p>The bean must be stored in the map returned from 
+ * {@link javax.faces.component.UIViewRoot#getViewMap(boolean)}.</p>
+
+ * <p>Use of this annotation requires that any beans stored in view scope
+ * must be serializable and proxyable as defined in the CDI specification.
+ * </p>
+
+ * <p>The runtime must ensure that any methods on the bean annotated
+ * with {@code PostConstruct} or {@code PreDestroy} are called when the
+ * scope begins and ends, respectively.  Two circumstances can cause the
+ * scope to end.</p>
+
+ * <ul>
+
+ * <li><p>{@link javax.faces.context.FacesContext#setViewRoot} is called
+ * with the new {@code UIViewRoot} being different than the current
+ * one.</p></li>
+
+ * <li><p>The session, that happened to be active when the bean was
+ * created, expires.  If no session existed when the bean was created,
+ * then this circumstance does not apply.</p></li>
+
+ * </ul>
+
+ * <p>In the session expiration case, the runtime must ensure that
+ * {@link javax.faces.context.FacesContext#getCurrentInstance} returns a
+ * valid instance if it is called during the processing of the
+ * {@code @PreDestroy} annotated method.  The set of methods on {@code
+ * FacesContext} that are valid to call in this circumstance is
+ * identical to those documented as "valid to call this method during
+ * application startup or shutdown". On the {@link
+ * javax.faces.context.ExternalContext} returned from that {@code
+ * FacesContext}, all of the methods documented as "valid to call this
+ * method during application startup or shutdown" are valid to call.  In
+ * addition, the method {@link
+ * javax.faces.context.ExternalContext#getSessionMap} is also valid to
+ * call.</p>
+
+ * 
+ * 
+ * </div>
+
+ * @since 2.2
+ */
+ at NormalScope
+ at Inherited
+ at Documented
+ at Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
+ at Retention(value = RetentionPolicy.RUNTIME)
+public @interface ViewScoped {
+}
diff --git a/javax/faces/view/facelets/AttributeHandler.java b/javax/faces/view/facelets/AttributeHandler.java
new file mode 100644
index 0000000..8f1b2b2
--- /dev/null
+++ b/javax/faces/view/facelets/AttributeHandler.java
@@ -0,0 +1,77 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+/**
+ * <p class="changed_added_2_0">An interface that allows other code 
+ * to identify FaceletHandlers that correspond to component attributes.</p>
+ *
+ * @since 2.0
+ */
+public interface AttributeHandler {
+
+    /**
+     * <p class="changed_added_2_0">Returns the resolved literal String value 
+     * of the attribute name after evaluating EL.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+     */
+    public String getAttributeName(FaceletContext ctx);
+}
diff --git a/javax/faces/view/facelets/BehaviorConfig.java b/javax/faces/view/facelets/BehaviorConfig.java
new file mode 100644
index 0000000..8ca5db5
--- /dev/null
+++ b/javax/faces/view/facelets/BehaviorConfig.java
@@ -0,0 +1,58 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0">Convey the id of a behavior declared in
+ * a view.</p>
+ *
+ * @since 2.0
+ */
+public interface BehaviorConfig extends TagConfig {
+
+    /**
+     * <p>Return the value of the behavior-id.</p>
+     *
+     * @since 2.0
+     */
+    public String getBehaviorId();
+
+}
diff --git a/javax/faces/view/facelets/BehaviorHandler.java b/javax/faces/view/facelets/BehaviorHandler.java
new file mode 100644
index 0000000..ef42080
--- /dev/null
+++ b/javax/faces/view/facelets/BehaviorHandler.java
@@ -0,0 +1,97 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.view.BehaviorHolderAttachedObjectHandler;
+
+/**
+ * <p class="changed_added_2_0">The {@link FaceletHandler} that
+ * corresponds to attached objects that represent an instance of {@link
+ * javax.faces.component.behavior.ClientBehavior} that must be added to
+ * the parent component, which must implement {@link
+ * javax.faces.component.behavior.ClientBehaviorHolder}, with a call to
+ * {@link
+ * javax.faces.component.behavior.ClientBehaviorHolder#addClientBehavior}.
+ * The current specification defines one Facelet element for this sort
+ * of attached object, <code><f:ajax></code>.</p>
+ */ 
+
+public class BehaviorHandler extends FaceletsAttachedObjectHandler implements BehaviorHolderAttachedObjectHandler {
+
+    private final TagAttribute event;
+    
+    private String behaviorId;
+
+    private TagHandlerDelegate helper;
+
+    public BehaviorHandler(BehaviorConfig config) {
+        super(config);
+        this.behaviorId = config.getBehaviorId();
+        this.event = this.getAttribute("event");
+        if (null != event && !event.isLiteral()){
+            throw new TagException(this.tag, "The 'event' attribute for behavior tag must be a literal");
+        }
+    }
+    
+    public TagAttribute getEvent() {
+        return this.event;
+    }
+    
+    public String getEventName() {
+        if (null != getEvent()) {
+            return getEvent().getValue();
+        }
+        return null;
+    }
+    
+    @Override
+    protected TagHandlerDelegate getTagHandlerDelegate() {
+        if (null == helper) {
+            helper = delegateFactory.createBehaviorHandlerDelegate(this);
+        }
+        return helper;
+    }
+
+    public String getBehaviorId() {
+        return behaviorId;
+    }
+
+}
diff --git a/javax/faces/view/facelets/ComponentConfig.java b/javax/faces/view/facelets/ComponentConfig.java
new file mode 100644
index 0000000..fcd3133
--- /dev/null
+++ b/javax/faces/view/facelets/ComponentConfig.java
@@ -0,0 +1,86 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+/**
+ * <p class="changed_added_2_0">Passed to the constructor of {@link
+ * ComponentHandler}.  Represents a component-type/renderer-type
+ * pair.</p>
+ *
+ * @since 2.0
+ * 
+ */
+public interface ComponentConfig extends TagConfig {
+    /**
+     * <p class="changed_added_2_0">ComponentType to pass to the
+     * <code>Application</code>. Cannot be <code>null</code>.
+     * 
+     * @since 2.0
+     */
+    public String getComponentType();
+
+    /**
+     * <p class="changed_added_2_0">RendererType to set on created
+     * <code>UIComponent</code> instances.
+     *
+     * @since 2.0
+     */
+    public String getRendererType();
+}
diff --git a/javax/faces/view/facelets/ComponentHandler.java b/javax/faces/view/facelets/ComponentHandler.java
new file mode 100644
index 0000000..71a0431
--- /dev/null
+++ b/javax/faces/view/facelets/ComponentHandler.java
@@ -0,0 +1,264 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.component.UIComponent;
+
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_2">Public</span> base class for markup
+ * element instances that map to {@link UIComponent} instances in the
+ * view.</p>
+ *
+ * <div class="changed_added_2_0">
+ *
+ * <p><span class="changed_modified_2_2">Instances of this class are
+ * created and passed to {@link
+ * TagHandlerDelegateFactory#createComponentHandlerDelegate} when a tag
+ * corresponding to this particular component is encountered in a
+ * Facelet view.  A custom tag handler for a component, converter,
+ * validator, or behavior must extend from this class.  In this way,
+ * this instance acts as a delegate for the implementation private tag
+ * handler.  Such a subclass may choose to override as many or as few
+ * methods from this base class as desired.  If the subclass wants to
+ * completely override the action of the implementation specific tag for
+ * which this component is the delegate, it must override the
+ * <code>apply()</code> method and make it take the following actions,
+ * in this order.</span> These actions must only happen the first time
+ * this facelet is applied for each user.  Subsequent applications must
+ * take no action.</p>
+
+ * <ol>
+
+ * 	  <li><p>The <code>UIComponent</code> represented by this
+ * 	  element is created with the appropriate
+ * 	  <code>Application.createComponent()</code> method.  </p></li>
+
+	  <li><p>Each attribute specified in the markup is correctly
+	  applied to the component instance, as specified in the VDLDocs
+	  for this element.  </p></li>
+
+	  <li><p>If project stage is {@link javax.faces.application.ProjectStage#Development},
+      Put the {@link javax.faces.view.Location} for this
+	  element into the component attribute <code>Map</code> under
+	  the key given by the value of the symbolic constant {@link
+	  javax.faces.component.UIComponent#VIEW_LOCATION_KEY}.
+	  </p></li>
+
+	  <li><p>Set the id of the component.  If the id is specified
+	  manually by the page author, that value must be set as the id.
+	  Otherwise, the closest ancestor component that is an instance
+	  of {@link javax.faces.component.UniqueIdVendor} must be
+	  located and its {@link
+	  javax.faces.component.UniqueIdVendor#createUniqueId} method
+	  must be called to derive the id.  If no such instance can be
+	  found, call {@link
+	  javax.faces.component.UIViewRoot#createUniqueId} to derive the
+	  id.</p></li>
+
+	  <li><p>The rendererType property of the component is set properly.
+	  </p></li>
+
+	  <li><p>{@link #onComponentCreated} is called.
+	  </p></li>
+
+	  <li><p>{@link UIComponent#pushComponentToEL} is called on the
+	  newly created component.</p></li>
+
+	  <li><p>The next handler in the facelet chain is applied.  This
+	  will cause the component to be populated with children.
+	  </p></li>
+
+	  <li><p>The component is added to its parent in the view.
+	  </p></li>
+
+	  <li><p>{@link UIComponent#popComponentFromEL} is called on the
+	  newly created component.</p></li>
+
+	  <li><p>Call {@link UIComponent#markInitialState}.
+	  </p></li>
+
+ * </ol>
+
+ * <div class="changed_added_2_2">
+
+ * <p>A common use case for extending this class is to gain access to
+ * the process by which the Facelets runtime creates component instances
+ * corresponding to markup in a Facelets view. These three methods are
+ * useful in such  cases.<p>
+
+ * <ul>
+
+ * <li><p>To control the instantiation of the <code>UIComponent</code>
+ * instance, subclasses may override {@link #createComponent}.  If
+ * this method is not overridden, the tag handler for which this
+ * instance is the delegate will take the necessary action to
+ * instantiate the <code>UIComponent</code>.</p></li>
+
+ * <li><p>To be notified of creation of the
+ * <code>UIComponent</code>instance, subclasses may override {@link
+ * #onComponentCreated}.</p></li>
+
+ * <li><p>To be notified that the freshly created
+ * <code>UIComponent</code> instance has been populated with children as
+ * a result of execution of child tag handlers, subclasses may override
+ * {@link #onComponentPopulated}.</p></li>
+
+ * </div>
+
+ * </div>
+ *
+ * @since 2.0
+ */
+public class ComponentHandler extends DelegatingMetaTagHandler {
+    
+    private TagHandlerDelegate helper = null;
+    private ComponentConfig componentConfig = null;
+
+    /**
+     * <p class="changed_added_2_0">Leverage the {@link
+     * TagHandlerDelegateFactory} provided by the implementation to create
+     * an instance of {@link TagHandlerDelegate} designed for use with
+     * <code>ComponentHandler</code>.</p>
+     *
+     * @since 2.0
+     */ 
+    public ComponentHandler(ComponentConfig config) {
+        super(config);
+        this.componentConfig = config;
+    }
+    
+    @Override
+    protected TagHandlerDelegate getTagHandlerDelegate() {
+        if (null == helper) {
+            helper = delegateFactory.createComponentHandlerDelegate(this);
+        }
+        return helper;
+    }
+    
+    public ComponentConfig getComponentConfig() {
+        return this.componentConfig;
+    }
+
+    /**
+     * <p class="changed_added_2_2">Subclasses that wish to take over
+     * the task of instantiating the <code>UIComponent</code> instance
+     * corresponding to this tag handler my override this method to do
+     * so.  A <code>null</code> return from this method will cause the
+     * <code>TagHandlerDelegate</code> for instance to create the
+     * component instead.</p>
+     *
+     * @since 2.2
+     */
+    
+    public UIComponent createComponent(FaceletContext ctx) {
+        return null;
+    }
+    
+    
+    /**
+     * <p class="changed_added_2_0">This method is guaranteed to be
+     * called after the component has been created but before it has
+     * been populated with children.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+
+     * @param c the <code>UIComponent</code> that has just been created.
+     *
+     * @param parent the parent <code>UIComponent</code> of the
+     * component represented by this element instance.
+     *
+     * @since 2.0
+     */
+    public void onComponentCreated(FaceletContext ctx, UIComponent c, 
+            UIComponent parent) {
+        
+    }
+    
+    /**
+     * <p class="changed_added_2_0">This method is guaranteed to be
+     * called after the component has been populated with children.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+
+     * @param c the <code>UIComponent</code> that has just been
+     * populated with children.
+     *
+     * @param parent the parent <code>UIComponent</code> of the
+     * component represented by this element instance.
+     *
+     * @since 2.0
+     */
+    public void onComponentPopulated(FaceletContext ctx, UIComponent c, 
+            UIComponent parent) {
+        
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Determine if the passed component is 
+     * not null and if it's new to the tree.  This operation can be used for determining if attributes
+     * should be wired to the component.</p>
+     * 
+     * @param component the component you wish to modify
+     * @since 2.0
+     */
+    public static boolean isNew(UIComponent component) {
+        
+        UIComponent c = component;
+        if (c != null) {
+            UIComponent parent = c.getParent();
+            if (parent != null) {
+                if (UIComponent.isCompositeComponent(parent)) {
+                    c = parent;
+                }
+            }
+            return c.getParent() == null;
+        } else {
+            return false;
+        }
+
+    }
+
+    
+    
+
+}
diff --git a/javax/faces/view/facelets/CompositeFaceletHandler.java b/javax/faces/view/facelets/CompositeFaceletHandler.java
new file mode 100644
index 0000000..6fcc8fb
--- /dev/null
+++ b/javax/faces/view/facelets/CompositeFaceletHandler.java
@@ -0,0 +1,106 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import java.io.IOException;
+import javax.faces.component.UIComponent;
+
+
+/**
+ * <p class="changed_added_2_0">A FaceletHandler that is derived of 1 or
+ * more, inner FaceletHandlers. This class would be found if the next
+ * FaceletHandler is structually, a body with multiple child elements as
+ * defined in XML.  This class enables the Facelet runtime to traverse
+ * the tree of {@link FaceletHandler} instances built by the Facelets
+ * compiler.</p>
+ *
+ */
+public final class CompositeFaceletHandler implements FaceletHandler {
+
+    private final FaceletHandler[] children;
+    private final int len;
+
+    public CompositeFaceletHandler(FaceletHandler[] children) {
+        this.children = children;
+        this.len = children.length;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Calls apply on any child handlers.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+     *
+     * @param parent the parent <code>UIComponent</code> of the
+     * component represented by this element instance.
+     * @since 2.0
+     */
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        for (int i = 0; i < len; i++) {
+            this.children[i].apply(ctx, parent);
+        }
+    }
+
+    /**
+     * <p class="changed_added_2_0">Returns the array of child
+     * handlers contained by this handler.</p>
+     */
+    public FaceletHandler[] getHandlers() {
+        return this.children;
+    }
+}
diff --git a/javax/faces/view/facelets/ConverterConfig.java b/javax/faces/view/facelets/ConverterConfig.java
new file mode 100644
index 0000000..669dc5a
--- /dev/null
+++ b/javax/faces/view/facelets/ConverterConfig.java
@@ -0,0 +1,78 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+/**
+ * <p class="changed_added_2_0">A Facelet version of the JSP {@link
+ * javax.faces.webapp.ConverterTag}.  All the attributes specified in
+ * the documentation for the converter tags are valid attributes.</p>
+ *
+ * @since 2.0
+ * 
+ */
+public interface ConverterConfig extends TagConfig {
+
+    /**
+     * <p class="changed_added_2_0">Return the converter id to be used
+     * in instantiating this converter</p>
+     */
+    public String getConverterId();
+    
+}
diff --git a/javax/faces/view/facelets/ConverterHandler.java b/javax/faces/view/facelets/ConverterHandler.java
new file mode 100644
index 0000000..b4ebc6b
--- /dev/null
+++ b/javax/faces/view/facelets/ConverterHandler.java
@@ -0,0 +1,111 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.view.ValueHolderAttachedObjectHandler;
+
+/**
+ * <p class="changed_added_2_0">Handles setting a {@link
+ * javax.faces.convert.Converter} instance on a {@link
+ * javax.faces.component.ValueHolder} parent. Will wire all attributes
+ * set to the <code>Converter</code> instance created/fetched. Uses the
+ * "binding" attribute for grabbing instances to apply attributes
+ * to. </p>
+ *
+ * <p class="changed_added_2_0">Will only set/create
+ * <code>Converter</code> if the passed <code>UIComponent</code>'s
+ * <code>parent</code> is <code>null</code>, signifying that it wasn't
+ * restored from an existing tree.</p>
+ * 
+ */
+public class ConverterHandler extends FaceletsAttachedObjectHandler implements ValueHolderAttachedObjectHandler {
+
+    
+    private String converterId;
+    
+    
+    private TagHandlerDelegate helper;
+
+    public ConverterHandler(ConverterConfig config) {
+        super(config);
+        this.converterId = config.getConverterId();
+    }
+
+    @Override
+    protected TagHandlerDelegate getTagHandlerDelegate() {
+        if (null == helper) {
+            helper = delegateFactory.createConverterHandlerDelegate(this);
+        }
+        return helper;
+
+    }
+
+    public String getConverterId(FaceletContext ctx) {
+        if (converterId == null) {
+            TagAttribute idAttr = getAttribute("converterId");
+            if (idAttr == null) {
+                return null;
+            } else {
+                return idAttr.getValue(ctx);
+            }
+        }
+        return converterId;
+    }
+    
+}
diff --git a/javax/faces/view/facelets/DelegatingMetaTagHandler.java b/javax/faces/view/facelets/DelegatingMetaTagHandler.java
new file mode 100644
index 0000000..1eefa18
--- /dev/null
+++ b/javax/faces/view/facelets/DelegatingMetaTagHandler.java
@@ -0,0 +1,156 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+import java.io.IOException;
+import javax.el.ELException;
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_0_rev_a">Enable</span> the JSF
+ * implementation to provide the appropriate behavior for the kind of
+ * {@link MetaTagHandler} subclass for each kind of element in the view,
+ * while providing a base-class from which those wanting to make a Java
+ * language custom tag handler can inherit.  The JSF runtime provides
+ * the implementation of {@link #getTagHandlerDelegate} for the
+ * appropriate subclass.</p>
+ */
+
+public abstract class DelegatingMetaTagHandler extends MetaTagHandler {
+    
+    private final TagAttribute binding;
+
+    private final TagAttribute disabled;
+    
+    protected TagHandlerDelegateFactory delegateFactory;
+    
+    public DelegatingMetaTagHandler(TagConfig config) {
+        super(config);
+        this.binding = this.getAttribute("binding");
+        this.disabled = this.getAttribute("disabled");
+        delegateFactory = (TagHandlerDelegateFactory)
+                FactoryFinder.getFactory(FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY);
+    }
+    
+    protected abstract TagHandlerDelegate getTagHandlerDelegate();
+    
+    // Properties ----------------------------------------
+
+    public boolean isDisabled(FaceletContext ctx) {
+        return disabled != null && Boolean.TRUE.equals(disabled.getBoolean(ctx));
+    }
+    
+    public TagAttribute getBinding() {
+        return this.binding;
+    }
+    
+    public Tag getTag() {
+        return this.tag;
+    }
+    
+    public String getTagId() {
+        return this.tagId;
+    }
+    
+    public TagAttribute getTagAttribute(String localName) {
+        return super.getAttribute(localName);
+    }
+    
+    @Override
+    public void setAttributes(FaceletContext ctx, Object instance) {
+        super.setAttributes(ctx, instance);
+    }
+    
+    // Methods ----------------------------------------
+    
+
+    /**
+     * <p class="changed_added_2_0">The default implementation simply
+     * calls through to {@link TagHandlerDelegate#apply}.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+     *
+     * @param parent the parent <code>UIComponent</code> of the
+     * component represented by this element instance.
+     * @since 2.0
+     */
+
+    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
+        getTagHandlerDelegate().apply(ctx, parent);
+    }
+    
+    /**
+     * <p class="changed_added_2_0_rev_a">Invoke the <code>apply()</code>
+     * method on this instance's {@link TagHandler#nextHandler}.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+     *
+     * @param c the <code>UIComponent</code> of the
+     * component represented by this element instance.
+     * @since 2.0
+     */
+
+    public void applyNextHandler(FaceletContext ctx, UIComponent c) 
+            throws IOException, FacesException, ELException {
+        // first allow c to get populated
+        this.nextHandler.apply(ctx, c);
+    }
+    
+    /**
+     * <p class="changed_added_2_0">The default implementation simply
+     * calls through to {@link TagHandlerDelegate#createMetaRuleset} and
+     * returns the result.</p>
+     *
+     * @param type the <code>Class</code> for which the
+     * <code>MetaRuleset</code> must be created.
+     *
+     * @since 2.0
+     */
+
+    @Override
+    protected MetaRuleset createMetaRuleset(Class type) {
+        return getTagHandlerDelegate().createMetaRuleset(type);
+    }
+    
+}
diff --git a/javax/faces/view/facelets/Facelet.java b/javax/faces/view/facelets/Facelet.java
new file mode 100644
index 0000000..ec6d4a7
--- /dev/null
+++ b/javax/faces/view/facelets/Facelet.java
@@ -0,0 +1,94 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+
+/**
+ * <p><span class="changed_modified_2_2">The</span> parent or root object
+ * in a FaceletHandler composition. The Facelet will take care of
+ * populating the passed UIComponent parent in relation to the
+ * create/restore lifecycle of JSF.</p>
+ * 
+ * @author Jacob Hookom
+ */
+public abstract class Facelet {
+
+    /**
+     * <p><span class="changed_modified_2_2">The</span> passed
+     * UIComponent parent will be populated/restored in accordance with
+     * the <span class="changed_modified_2_2">Facelets chapter in the
+     * spec prose document.</span></p>
+     * 
+     * @param facesContext
+     *            The current FacesContext (Should be the same as
+     *            FacesContext.getInstance())
+     * @param parent
+     *            The UIComponent to populate in a compositional fashion. In
+     *            most cases a Facelet will be base a UIViewRoot.
+     * @throws IOException
+     * @throws FacesException
+     * @throws FaceletException
+     * @throws ELException
+     */
+    public abstract void apply(FacesContext facesContext, UIComponent parent)
+    throws IOException;
+}
diff --git a/javax/faces/view/facelets/FaceletCache.java b/javax/faces/view/facelets/FaceletCache.java
new file mode 100644
index 0000000..7bd86d0
--- /dev/null
+++ b/javax/faces/view/facelets/FaceletCache.java
@@ -0,0 +1,196 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+import java.io.IOException;
+import java.net.URL;
+
+
+
+/**
+ * <p class="changed_added_2_1">This API defines the facility by which
+ * the Facelets {@link javax.faces.view.ViewDeclarationLanguage}
+ * creates and caches instances of Facelets.</p>
+
+ * <p class="changed_added_2_1">The cache handles two different kinds of
+ * Facelets: View Facelets and View Metadata Facelets.  The former is
+ * the usual Facelet that provides for the construction of a
+ * <code>UIComponent</code> tree.  This kind of Facelet is accessed via
+ * the {@link #getFacelet} and {@link #isFaceletCached} methods. The
+ * latter is a special kind of Facelet that corresponds to {@link
+ * javax.faces.view.ViewDeclarationLanguage#getViewMetadata}.  This kind
+ * of Facelet is accessed via the {@link #getViewMetadataFacelet} and
+ * {@link #isViewMetadataFaceletCached} methods. </p>
+
+ * @since 2.1
+ */
+
+public abstract class FaceletCache<V> {
+
+    /**
+     * <p class="changed_added_2_1">Factory interface for creating
+     * Facelet or View Metadata Facelet instances.</p>
+     */
+    public interface MemberFactory<V> {
+
+	/**
+	 * <p class="changed_added_2_1">Create a Facelet or View
+	 * Metadata Facelet (depending on the type of factory this is)
+	 * for the argument URL.</p>
+
+	 * @param key the <code>URL</code> that will be used as the key
+	 * for the instance being created.
+	 *
+	 * @throws NullPointerException if argument <code>key</code> is
+	 * <code>null</code>.
+	 */
+        public V newInstance(final URL key) throws IOException;
+    }
+
+
+    /**
+     * <p class="changed_added_2_1">Returns a cached Facelet
+     * instance. If no instance is available, it will be created using
+     * the Facelet {@link MemberFactory} and stored in the cache.</p>
+
+     * @param url <code>URL</code> for the Facelet being retrieved
+     * 
+     * @throws NullPointerException if argument <code>url</code> is
+     * <code>null</code>.
+
+     */
+
+    public abstract V getFacelet(URL url) throws IOException;
+
+    /**
+
+     * <p class="changed_added_2_1">Determines whether a cached Facelet
+     * instance exists for this URL.  Returns true if a cached instance
+     * exists, false otherwise</p>
+
+     * @param url <code>URL</code> for the Facelet
+
+     * @throws NullPointerException if argument <code>url</code> is
+     * <code>null</code>.
+
+     */
+
+    public abstract boolean isFaceletCached(URL url);
+
+    /**
+     * <p class="changed_added_2_1">Returns a cached View Metadata
+     * Facelet instance. If no instance is available, it will be created
+     * using the View Metadata Facelet {@link MemberFactory} and stored
+     * in the cache.</p>
+
+     * @param url <code>URL</code> for the View Metadata Facelet being
+     * retrieved
+
+     * @throws NullPointerException if argument <code>url</code> is
+     * <code>null</code>.
+
+     */
+
+    public abstract V getViewMetadataFacelet(URL url) throws IOException;
+
+    /**
+     * <p class="changed_added_2_1">Determines whether a cached View
+     * Metadata Facelet instance exists for this URL.  Returns true if a
+     * cached instance exists, false otherwise</p>
+     * @param url <code>URL</code> for the View Metadata Facelet
+
+     * @throws NullPointerException if argument <code>url</code> is
+     * <code>null</code>.
+     */
+
+    public abstract boolean isViewMetadataFaceletCached(URL url);
+
+
+    /**
+     * <p class="changed_added_2_1">This must be called by the runtime
+     * at startup time, before any requests are serviced, and allows for
+     * the <code>FaceletCache</code> implementation to provide the
+     * {@link MemberFactory} instances that will be used to create
+     * instances of Facelets and View Metadata Facelets. </p>
+     *
+     * @param faceletFactory the {@link MemberFactory} instance that
+     * will be used to create instances of Facelets.
+
+     * @param viewMetadataFaceletFactory the {@link MemberFactory}
+     * instance that will be used to create instances of metadata
+     * Facelets.
+
+     * @throws NullPointerException if either argument is <code>null</code>
+
+     */
+    protected void setMemberFactories(MemberFactory<V> faceletFactory,
+            MemberFactory<V> viewMetadataFaceletFactory) {
+	if (null == faceletFactory || null == viewMetadataFaceletFactory) {
+	    throw new NullPointerException("Neither faceletFactory no viewMetadataFaceletFactory may be null.");
+	}
+
+        this.memberFactory = faceletFactory;
+        this.viewMetadataMemberFactory = viewMetadataFaceletFactory;
+    }
+
+    private MemberFactory<V> memberFactory;
+    private MemberFactory<V> viewMetadataMemberFactory;
+
+
+    /**
+     * <p class="changed_added_2_1">Returns the {@link MemberFactory}
+     * passed to {@link #setMemberFactories} for the purpose of creating
+     * Facelet instance.</p>
+     */
+    protected MemberFactory<V> getMemberFactory() {
+        return memberFactory;
+    }
+
+    /**
+     * <p class="changed_added_2_1">Returns the {@link MemberFactory}
+     * passed to {@link #setMemberFactories} for the purpose of creating
+     * View Metadata Facelet instance.</p>
+     */
+    protected MemberFactory<V> getMetadataMemberFactory() {
+        return viewMetadataMemberFactory;
+    }
+
+}
diff --git a/javax/faces/view/facelets/FaceletCacheFactory.java b/javax/faces/view/facelets/FaceletCacheFactory.java
new file mode 100644
index 0000000..ad85b98
--- /dev/null
+++ b/javax/faces/view/facelets/FaceletCacheFactory.java
@@ -0,0 +1,63 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.FacesWrapper;
+
+/**
+ * <p class="changed_added_2_1">Allows customization of the
+ * implementation of {@link FaceletCache}.</p>
+
+ * @since 2.1
+ */
+public abstract class FaceletCacheFactory implements FacesWrapper<FaceletCacheFactory> {
+
+    public FaceletCacheFactory() {
+    }
+
+    public FaceletCacheFactory getWrapped() {
+        return null;
+    }
+
+    public abstract FaceletCache getFaceletCache();
+
+
+}
diff --git a/javax/faces/view/facelets/FaceletContext.java b/javax/faces/view/facelets/FaceletContext.java
new file mode 100644
index 0000000..8a71811
--- /dev/null
+++ b/javax/faces/view/facelets/FaceletContext.java
@@ -0,0 +1,201 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import java.io.IOException;
+import java.net.URL;
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.FunctionMapper;
+import javax.el.VariableMapper;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * <p class="changed_added_2_0">Context representative of a single
+ * request from a Facelet.  This instance is passed to nearly every
+ * method call in this API.</p>
+ *
+ * @since 2.0
+ */
+public abstract class FaceletContext extends ELContext {
+    
+    // The key in the FacesContext attribute map
+    // for the FaceletContext instance.
+    public static final String FACELET_CONTEXT_KEY = 
+            "javax.faces.FACELET_CONTEXT";
+
+    /**
+     * <p class="changed_added_2_0">The current FacesContext bound to
+     * this "request".  Must not be <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+    public abstract FacesContext getFacesContext();
+
+    /**
+     * <p class="changed_added_2_0">Generate a unique ID for the passed
+     * String</p>
+     * 
+     * @param base the string from which to generate the ID.
+     *
+     * @since 2.0
+     */
+    public abstract String generateUniqueId(String base);
+
+    /**
+     * <p class="changed_added_2_0">The ExpressionFactory to use within
+     * the Facelet this context is executing upon.  Must not be
+     * <code>null</code>.</p>
+     * 
+     * @since 2.0
+     */
+
+    public abstract ExpressionFactory getExpressionFactory();
+
+    /**
+     * <p class="changed_added_2_0">Set the VariableMapper to use in EL
+     * evaluation/creation.</p>
+     * 
+     * @param varMapper the new <code>VariableMapper</code>
+     *
+     * @since 2.0
+     */
+    public abstract void setVariableMapper(VariableMapper varMapper);
+
+    /**
+     * <p class="changed_added_2_0">Set the FunctionMapper to use in EL
+     * evaluation/creation.</p>
+     * 
+     * @param fnMapper the new <code>FunctionMapper</code>
+     *
+     * @since 2.0
+     */
+    public abstract void setFunctionMapper(FunctionMapper fnMapper);
+
+    /**
+     * <p class="changed_added_2_0">Support method which is backed by
+     * the current VariableMapper.</p>
+     * 
+     * @param name the name of the attribute
+     * @param value the value of the attribute
+     *
+     * @since 2.0
+     */
+    public abstract void setAttribute(String name, Object value);
+
+    /**
+     * <p class="changed_added_2_0">Return an attribute set by a
+     * previous call to {@link #setAttribute}.  Support method which is
+     * backed by the current VariableMapper</p>
+     * 
+     * @param name the name of the attribute to return.
+     * @since 2.0
+     */
+    public abstract Object getAttribute(String name);
+
+    /**
+     * <p class="changed_added_2_0">Include another Facelet defined at
+     * some path, relative to the executing context, not the current
+     * Facelet (same as include directive in JSP)</p>
+     * 
+     * @param parent the <code>UIComponent</code> that will be the
+     * parent of any components in the included facelet.
+     * @param relativePath the path of the resource containing the
+     * facelet markup, relative to the current markup
+
+     * @throws IOException if unable to load <code>relativePath</code>
+
+     * @throws FaceletException if unable to parse the markup loaded from <code>relativePath</code>
+
+     * @throws FacesException if unable to create child <code>UIComponent</code> instances
+
+     * @throws ELException if any of the expressions in the markup
+     * loaded from <code>relativePath</code> fail
+     *
+     * @since 2.0
+     */
+    public abstract void includeFacelet(UIComponent parent, String relativePath)
+    throws IOException;
+
+    /**
+     * <p class="changed_added_2_0">Include another Facelet defined at
+     * some path, absolute to this ClassLoader/OS</p>
+     * 
+     * @param parent the <code>UIComponent</code> that will be the
+     * parent of any components in the included facelet.
+
+     * @param absolutePath the absolute path to the resource containing
+     * the facelet markup
+
+     * @throws IOException if unable to load <code>relativePath</code>
+
+     * @throws FaceletException if unable to parse the markup loaded from <code>relativePath</code>
+
+     * @throws FacesException if unable to create child <code>UIComponent</code> instances
+
+     * @throws ELException if any of the expressions in the markup
+     * loaded from <code>relativePath</code> fail
+
+     */
+    public abstract void includeFacelet(UIComponent parent, URL absolutePath)
+    throws IOException;
+
+}
diff --git a/javax/faces/view/facelets/FaceletException.java b/javax/faces/view/facelets/FaceletException.java
new file mode 100644
index 0000000..a1f7e13
--- /dev/null
+++ b/javax/faces/view/facelets/FaceletException.java
@@ -0,0 +1,113 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.FacesException;
+
+/**
+ * <p class="changed_added_2_0">An Exception from the Facelet
+ * implementation</p>
+ * 
+ * @since 2.0
+ */
+public class FaceletException extends FacesException {
+
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <p class="changed_added_2_0">Create an empty
+     * <code>FaceletException</code>.</p>
+     */
+    public FaceletException() {
+        super();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Create a
+     * <code>FaceletException</code> with argument <code>message</code>
+     * as the message.</p>
+     * @param message the textual message to display for the exception.
+     */
+    public FaceletException(String message) {
+        super(message);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Wrap argument <code>cause</code>
+     * within this <code>FaceletException</code> instance.</p>
+     * @param cause the <code>Throwable</code> to wrap
+     */
+    public FaceletException(Throwable cause) {
+        super(cause);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Wrap argument <code>cause</code> in
+     * a <code>FaceletException</code> instance, with a message given by
+     * the argument <code>message</code>.</p>
+     *  
+     * @param message the message for the <code>FacesException</code>
+     * @param cause the root cause
+     */
+    public FaceletException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+}
diff --git a/javax/faces/view/facelets/FaceletHandler.java b/javax/faces/view/facelets/FaceletHandler.java
new file mode 100644
index 0000000..1f42d6c
--- /dev/null
+++ b/javax/faces/view/facelets/FaceletHandler.java
@@ -0,0 +1,114 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import java.io.IOException;
+import javax.faces.component.UIComponent;
+
+/**
+ * <p class="changed_added_2_0">This is the root class for markup
+ * elements in Facelets VDL.  Facelets is XHTML, and XHTML is XML, and
+ * the root unit of abstraction in XML is the element.  A
+ * <code>FaceletHandler</code> instance represents an XML element at
+ * runtime.  Two direct implementations exist to embody the contract for
+ * more specific behavior.</p>
+ *
+ * <div class="changed_added_2_0">
+
+ * <dl>
+
+ * <dt>{@link CompositeFaceletHandler}</dt>
+
+ * <dd>A container for other <code>FaceletHandler</code>s</dd>
+
+ * <dt>{@link TagHandler}</dt>
+
+ * <dd>The foundation class for <code>FaceletHandler</code>s associated
+ * with markup in a Facelet document.</dd>
+
+ * </dl>
+
+ * </div>
+
+ * @since 2.0
+ */
+public interface FaceletHandler {
+
+    /**
+     * <p class="changed_added_2_0">Process changes on a particular
+     * UIComponent</p>
+     * 
+     * @param ctx the current FaceletContext instance for this execution
+     * @param parent the parent UIComponent to operate upon
+
+     * @throws IOException if unable to load <code>relativePath</code>
+
+     * @throws FaceletException if unable to parse the markup loaded from <code>relativePath</code>
+
+     * @throws FacesException if unable to create child <code>UIComponent</code> instances
+
+     * @throws ELException if any of the expressions in the markup
+     * loaded from <code>relativePath</code> fail
+
+     * @since 2.0
+
+     */
+    public void apply(FaceletContext ctx, UIComponent parent)
+    throws IOException;
+}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/Facelets.jpg b/javax/faces/view/facelets/Facelets.jpg
similarity index 100%
rename from jsf-api/src/main/java/javax/faces/view/facelets/Facelets.jpg
rename to javax/faces/view/facelets/Facelets.jpg
diff --git a/javax/faces/view/facelets/FaceletsAttachedObjectHandler.java b/javax/faces/view/facelets/FaceletsAttachedObjectHandler.java
new file mode 100644
index 0000000..33e969f
--- /dev/null
+++ b/javax/faces/view/facelets/FaceletsAttachedObjectHandler.java
@@ -0,0 +1,110 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+import javax.faces.component.UIComponent;
+
+import javax.faces.context.FacesContext;
+import javax.faces.view.AttachedObjectHandler;
+
+/**
+ * <p class="changed_added_2_0">Root class for all tag handlers that
+ * represent attached objetcts in a Facelets page.</p>
+ */
+public abstract class FaceletsAttachedObjectHandler extends DelegatingMetaTagHandler implements AttachedObjectHandler {
+
+    /**
+     * <p>Call through to super</p>
+     * @param config configure this handler instance
+     */
+    public FaceletsAttachedObjectHandler(TagConfig config) {
+        super(config);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the underlying handler for
+     * this tag handler instance.</p>
+     */
+    protected final AttachedObjectHandler getAttachedObjectHandlerHelper() {
+        return (AttachedObjectHandler) this.getTagHandlerDelegate();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Take the necessary actions to apply
+     * the attached object represented by the tag for the concrete
+     * subclass of this class to the argument <code>parent</code>.</p>
+     * @param ctx the <code>FacesContext</code> for this request
+     * @param parent The <code>UIComponent</code> to which this attached
+     * object must be applied.
+     */
+    public final void applyAttachedObject(FacesContext ctx, UIComponent parent) {
+        getAttachedObjectHandlerHelper().applyAttachedObject(ctx, parent);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the value of the "for"
+     * attribute.  This enables the runtime to know to which inner
+     * component this attached object should be retargeted.</p>
+     */
+    public final String getFor() {
+        return getAttachedObjectHandlerHelper().getFor();
+    }
+    
+}
diff --git a/javax/faces/view/facelets/FaceletsResourceResolver.java b/javax/faces/view/facelets/FaceletsResourceResolver.java
new file mode 100644
index 0000000..884bc3a
--- /dev/null
+++ b/javax/faces/view/facelets/FaceletsResourceResolver.java
@@ -0,0 +1,60 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+package javax.faces.view.facelets;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <p class="changed_added_2_2">The presence of this annotation on a
+ * class automatically registers the class with the runtime as a {@link
+ * ResourceResolver}.</p>
+
+ */ 
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+ at Inherited
+public @interface FaceletsResourceResolver {
+    
+}
diff --git a/javax/faces/view/facelets/FacetHandler.java b/javax/faces/view/facelets/FacetHandler.java
new file mode 100644
index 0000000..ae56d95
--- /dev/null
+++ b/javax/faces/view/facelets/FacetHandler.java
@@ -0,0 +1,76 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0">An interface that allows other code 
+ * to identify FaceletHandlers that correspond to component facets.</p>
+ *
+ * @since 2.0
+ */
+public interface FacetHandler {
+
+    /**
+     * <p class="changed_added_2_0">Returns the resolved literal String value 
+     * of the facet name after evaluating EL.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+     */
+    public String getFacetName(FaceletContext ctx);
+}
diff --git a/javax/faces/view/facelets/MetaRule.java b/javax/faces/view/facelets/MetaRule.java
new file mode 100644
index 0000000..4b60b9b
--- /dev/null
+++ b/javax/faces/view/facelets/MetaRule.java
@@ -0,0 +1,127 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+/**
+ * <p class="changed_added_2_0">The root class of the abstraction that
+ * dictates how attributes on a markup element in a Facelets VDL page
+ * are wired to the JSF API object instance associated with that
+ * element.  The single method on this interface, {@link #applyRule},
+ * returns an encapsulation of the behavior that actually does the work
+ * of handling the attribute and its value.  There are implementations of
+ * specific concrete subclasses of this class for all the basic kinds of
+ * elements that appear in Facelets VDL pages: components,
+ * non-components, and attached objects.</p>
+ *
+ * <div class="changed_added_2_0">
+
+ * <p>For example, consider this markup:</p>
+
+<code><pre><h:inputText value="#{user.userid}" 
+                valueChangeListener="#{user.newUserId}" /></pre></code>
+
+ * Two <code>MetaRule</code> instances are involved in this example.</p>
+
+ * <ol>
+ *
+ * <li><p>The first has
+ * an <code>applyRule()</code> method that returns a {@link Metadata}
+ * instance that, when its <code>applyMetada()</code> method is called,
+ * dictates how the "value" attribute is processed: calling {@link
+ * javax.faces.component.UIComponent#setValueExpression} on the
+ * <code>UIComponent</code> instance associated with the
+ * <code><h:inputText></code> element.</p></li>
+
+ * <li><p>The second has an <code>applyRule()</code> method that returns
+ * a {@link Metadata} instance that, when its
+ * <code>applyMetadata()</code> method is called, dictates how the
+ * "valueChangeListener" attribute is processed: calling {@link
+ * javax.faces.component.EditableValueHolder#addValueChangeListener}.</p></li>
+
+ * </ol>
+
+ * </div>
+ *
+ * @since 2.0
+ */
+public abstract class MetaRule {
+
+    
+    /**
+     * <p class="changed_added_2_0">Return an abstraction that takes
+     * appropriate action given the kind of rule represented by the
+     * argument <code>name</code>, in the context of this particular
+     * concrete subclass of <code>MetaRule</code>.  The abstraction must
+     * encapsulate the value from the argument
+     * <code>attribute</code>.</p>
+     * @since 2.0
+     * @param name the name for this rule.  This will generally be the
+     * name of a tag attribute in the VDL.
+     * @param attribute the name/value pair for this attribute on this
+     * particular instance of an element in the page.
+     * @param meta the <code>MetadataTarged</code> that can be used to
+     * discern what kind of action to encapsulate within the abstraction
+     * to be returned.
+
+     */
+    public abstract Metadata applyRule(String name, TagAttribute attribute,
+            MetadataTarget meta);
+
+}
diff --git a/javax/faces/view/facelets/MetaRuleset.java b/javax/faces/view/facelets/MetaRuleset.java
new file mode 100644
index 0000000..8536ed6
--- /dev/null
+++ b/javax/faces/view/facelets/MetaRuleset.java
@@ -0,0 +1,121 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0">A mutable set of rules to be used in
+ * auto-wiring state to a particular object instance. Rules assigned to
+ * this object will be composed into a single Metadata instance which
+ * will encapsulate the ruleset.</p>
+ *
+ * @since 2.0
+ */
+public abstract class MetaRuleset {
+
+
+    /**
+     * <p class="changed_added_2_0">Customize this
+     * <code>MetaRuleset</code> instance to advise it to ignore the
+     * attribute named by the <code>attribute</code> argument, returning
+     * <code>this</code>.</p>
+     * @param attribute the name of the attribute to ignore.
+     * 
+     * @since 2.0
+     */
+    public abstract MetaRuleset ignore(String attribute);
+
+    /**
+     * <p class="changed_added_2_0">Customize this
+     * <code>MetaRuleset</code> instance to advise it to ignore all
+     * attributes, returning
+     * <code>this</code>.</p>
+     * @since 2.0
+     */
+    public abstract MetaRuleset ignoreAll();
+
+    /**
+     * <p class="changed_added_2_0">Customize this
+     * <code>MetaRuleset</code> by removing the attribute named by
+     * argument <code>attribute</code> and re-adding it under the name
+     * given by the argument <code>property</code>, returning
+     * <code>this</code>.</p>
+     * @since 2.0
+     */
+    public abstract MetaRuleset alias(String attribute, String property);
+
+    /**
+     * <p class="changed_added_2_0">Add another {@link Metadata} to this
+     * ruleset, returning <code>this</code>.</p>
+     * @since 2.0
+     */
+    public abstract MetaRuleset add(Metadata mapper);
+
+    /**
+     * <p class="changed_added_2_0">Add another {@link MetaRule} to this
+     * ruleset, returning <code>this</code>.</p>
+     * @since 2.0
+     */
+    public abstract MetaRuleset addRule(MetaRule rule);
+
+    /**
+     * <p class="changed_added_2_0">Take actions to apply the rule.</p>
+     * 
+     */
+    public abstract Metadata finish();
+}
diff --git a/javax/faces/view/facelets/MetaTagHandler.java b/javax/faces/view/facelets/MetaTagHandler.java
new file mode 100644
index 0000000..2891e5f
--- /dev/null
+++ b/javax/faces/view/facelets/MetaTagHandler.java
@@ -0,0 +1,132 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+
+/**
+ * <p class="changed_added_2_0">Every kind of markup element in Facelets
+ * VDL that has attributes that need to take action on a JSF Java API
+ * artifact is associated with an instance of this class.  This class is
+ * an abstraction to enable a rule based method for directing how
+ * different kinds of elements take different kinds of actions in the
+ * JSF Java API.  For example, consider this markup:</p>
+ *
+ * <div class="changed_added_2_0">
+
+<code><pre><h:inputText value="#{user.userid}" 
+                valueChangeListener="#{user.newUserId}" /></pre></code>
+
+ * <p>This markup element corresponds to an instance of {@link
+ * javax.faces.component.html.HtmlInputText} in the view.
+ * <code>HtmlImputText</code> has a number of attributes that are to be
+ * exposed to the page author.  <code>HtmlInputText</code> also
+ * implements {@link javax.faces.component.EditableValueHolder}, which
+ * extends {@link javax.faces.component.ValueHolder}.  Each of these
+ * interfaces also expose a number of attributes to the page author.</p>
+
+ * <p>Facelets employes the strategy pattern to allow the manner in
+ * which all possible attributes are handled based on the nature of the
+ * JSF Java API artifact associated with the markup element.</p>
+
+ * <p>Subclasses override the {@link #createMetaRuleset} method to
+ * return a {@link MetaRuleset} instance encapsulating all the strategies
+ * for all the attributes that make sense for this particular markup
+ * element.  The runtime calls the {@link #setAttributes(FaceletContext, Object)}
+ * method to cause those rules to be executed and applied.</p>
+ *
+ * </div>
+ * 
+ * @since 2.0
+ */
+public abstract class MetaTagHandler extends TagHandler {
+
+    private Class lastType = Object.class;
+
+    private Metadata mapper;
+
+    public MetaTagHandler(TagConfig config) {
+        super(config);
+    }
+
+    /**
+     * Extend this method in order to add your own rules.
+     * 
+     * @param type
+     */
+    protected abstract MetaRuleset createMetaRuleset(Class type);
+
+    /**
+     * Invoking/extending this method will cause the results of the created
+     * MetaRuleset to auto-wire state to the passed instance.
+     * 
+     * @param ctx
+     * @param instance
+     */
+    protected void setAttributes(FaceletContext ctx, Object instance) {
+        if (instance != null) {
+            Class type = instance.getClass();
+            if (mapper == null || !this.lastType.equals(type)) {
+                this.lastType = type;
+                this.mapper = this.createMetaRuleset(type).finish();
+            }
+            this.mapper.applyMetadata(ctx, instance);
+        }
+    }
+}
diff --git a/javax/faces/view/facelets/Metadata.java b/javax/faces/view/facelets/Metadata.java
new file mode 100644
index 0000000..2b3f296
--- /dev/null
+++ b/javax/faces/view/facelets/Metadata.java
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+/**
+ * <p class="changed_added_2_0">There are concrete subclasses within the
+ * implementation that map concepts in the Facelet VDL page to JSF Java
+ * API calls the appropriate instances.  For example, the
+ * “<code>validator</code>” attribute on an input component
+ * is specified to point to a <code>MethodExpression</code> that
+ * references a method that performs the validation.  There is a
+ * concrete subclass of <code>Metadata</code> to perform this action
+ * when that attribute appears in a Facelet VDL page.</p>
+ *
+ * @since 2.0
+ */
+public abstract class Metadata {
+
+    /**
+     * <p class="changed_added_2_0">Take the action prescribed in the
+     * JSF specification for this particular VDL element attribute.</p>
+     * 
+     * @param ctx The FaceletContext for this request.
+     * @param instance The instance from the JSF Java API on which the
+     * action should be taken.  For example, an instance of {@link
+     * javax.faces.component.EditableValueHolder}.
+     */
+    public abstract void applyMetadata(FaceletContext ctx, Object instance);
+
+}
diff --git a/javax/faces/view/facelets/MetadataTarget.java b/javax/faces/view/facelets/MetadataTarget.java
new file mode 100644
index 0000000..438cee1
--- /dev/null
+++ b/javax/faces/view/facelets/MetadataTarget.java
@@ -0,0 +1,122 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+
+/**
+ * <p class="changed_added_2_0">Information used with {@link MetaRule}
+ * for determining how and what {@link Metadata} should be wired.</p>
+ *
+ * @since 2.0
+ */
+public abstract class MetadataTarget {
+
+    /**
+     * <p class="changed_added_2_0">Return a beans
+     * <code>PropertyDescriptor</code> for the property with name given
+     * by argument <code>name</code>.</p>
+     * @param name the name of the property for which the
+     * <code>PropertyDescriptor</code> must be returned.
+     */
+    public abstract PropertyDescriptor getProperty(String name);
+
+    /**
+     * <p class="changed_added_2_0">Return true if the target for this
+     * metadata element is an instance of the argument
+     * <code>type</code>.</p>
+     * @param type the <code>Class</code> to test for the instance of.
+     */
+    public abstract boolean isTargetInstanceOf(Class type);
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>Class</code> of the
+     * metadata target.</p>
+     */
+    public abstract Class getTargetClass();
+
+    /**
+     * <p class="changed_added_2_0">Return a 
+     * <code>Class</code> for the property with name given
+     * by argument <code>name</code>.</p>
+     * @param name the name of the property for which the
+     * <code>Class</code> must be returned.
+     */
+    public abstract Class getPropertyType(String name);
+
+    /**
+     * <p class="changed_added_2_0">Return a <code>Method</code> for the
+     * setter of the property with name given by argument
+     * <code>name</code>.</p>
+     * @param name the name of the property for which the
+     * <code>Method</code> must be returned.
+     */
+    public abstract Method getWriteMethod(String name);
+
+    /**
+     * <p class="changed_added_2_0">Return a <code>Method</code> for the
+     * getter of the property with name given by argument
+     * <code>name</code>.</p>
+     * @param name the name of the property for which the
+     * <code>Method</code> must be returned.
+     */
+    public abstract Method getReadMethod(String name);
+
+}
diff --git a/javax/faces/view/facelets/ResourceResolver.java b/javax/faces/view/facelets/ResourceResolver.java
new file mode 100644
index 0000000..21b5788
--- /dev/null
+++ b/javax/faces/view/facelets/ResourceResolver.java
@@ -0,0 +1,108 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import java.net.URL;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_deleted_2_2">Deprecated as 
+ * of JSF 2.2.  The same functionality is more correctly provided by
+ * {@link javax.faces.application.ResourceHandler}.</span> Provide
+ * a hook to decorate or override
+ * the way that Facelets loads template files.  A default implementation
+ * must be provided that satisfies the requirements for loading
+ * templates as in Pre-JSF 2.0 Facelets.</p>
+
+ * <div class="changed_added_2_0">
+
+ * <p>If a <code><context-param></code> with the param name equal
+ * to the value of {@link #FACELETS_RESOURCE_RESOLVER_PARAM_NAME}
+ * exists, the runtime must interpret its value as a fully qualified
+ * classname of a java class that extends <code>ResourceResolver</code>
+ * and has a zero argument public constructor or a one argument public
+ * constructor where the type of the argument is
+ * <code>ResourceResolver</code>. If this param is set and its value
+ * does not conform to those requirements, the runtime must log a
+ * message and continue. If it does conform to these requirements and
+ * has a one-argument constructor, the default
+ * <code>ResourceResolver</code> must be passed to the constructor. If
+ * it has a zero argument constructor it is invoked directly. In either
+ * case, the new <code>ResourceResolver</code> replaces the old
+ * one. </p>
+
+ * </div>
+
+ */
+
+ at Deprecated
+public abstract class ResourceResolver {
+
+    public static final String FACELETS_RESOURCE_RESOLVER_PARAM_NAME = 
+        "javax.faces.FACELETS_RESOURCE_RESOLVER";
+
+    /**
+     * <p class="changed_added_2_0">Returns the <code>URL</code> of a
+     * Facelet template file.  Called by the Facelets Runtime to load a
+     * template file referred to in a Facelets page.</p>
+
+     * @param path the internal path to the template resource.
+
+     */
+    abstract public URL resolveUrl(String path);
+}
diff --git a/javax/faces/view/facelets/Tag.java b/javax/faces/view/facelets/Tag.java
new file mode 100644
index 0000000..558f2c5
--- /dev/null
+++ b/javax/faces/view/facelets/Tag.java
@@ -0,0 +1,143 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.view.Location;
+
+/**
+ * <p class="changed_added_2_0">The runtime must create an instance of
+ * this class for each element in the Facelets XHTML view. A {@link
+ * TagConfig} subinterface instance is responsible for providing an
+ * instance of <code>Tag</code> to the {@link TagHandler} instance that
+ * is passed the <code>TagConfig</code> in its constructor.</p>
+ * 
+ * @since 2.0
+ */
+public final class Tag {
+    private final TagAttributes attributes;
+
+    private final Location location;
+
+    private final String namespace;
+
+    private final String localName;
+
+    private final String qName;
+
+    public Tag(Location location, String namespace, String localName,
+            String qName, TagAttributes attributes) {
+        this.location = location;
+        this.namespace = namespace;
+        this.localName = localName;
+        this.qName = qName;
+        this.attributes = attributes;
+    }
+
+    public Tag(Tag orig, TagAttributes attributes) {
+        this(orig.getLocation(), orig.getNamespace(), orig.getLocalName(), orig
+                .getQName(), attributes);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return an object encapsulating the
+     * {@link TagAttributes} specified on this element in the view.</p>
+     * 
+     */
+    public TagAttributes getAttributes() {
+        return attributes;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the XML local name of the
+     * tag. For example, <my:tag /> would be "tag".</p>
+     * 
+     */
+    public String getLocalName() {
+        return localName;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the {@link Location} of this
+     * <code>Tag</code> instance in the Facelet view.</p>
+     */
+    public Location getLocation() {
+        return location;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the resolved XML Namespace
+     * for this tag in the Facelets view.</p>
+     */
+    public String getNamespace() {
+        return namespace;
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the XML qualified name for
+     * this tag.  For example, <my:tag /> would be "my:tag".
+     * 
+     */
+    public String getQName() {
+        return qName;
+    }
+
+    public String toString() {
+        return this.location + " <" + this.qName + ">";
+    }
+}
diff --git a/javax/faces/view/facelets/TagAttribute.java b/javax/faces/view/facelets/TagAttribute.java
new file mode 100644
index 0000000..f0f6e90
--- /dev/null
+++ b/javax/faces/view/facelets/TagAttribute.java
@@ -0,0 +1,242 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.view.Location;
+import javax.el.ExpressionFactory;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Representation</span>
+ * of an XML attribute name=value pair on an XML element in a Facelet file.</p>
+ * 
+ * @since 2.0
+ */
+public abstract class TagAttribute {
+
+    /**
+     * If literal, return
+     * {@link Boolean#getBoolean(java.lang.String) Boolean.getBoolean(java.lang.String)}
+     * passing our value, otherwise call
+     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
+     * 
+     * @see Boolean#getBoolean(java.lang.String)
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return boolean value
+     */
+    public abstract boolean getBoolean(FaceletContext ctx);
+
+    /**
+     * If literal, call
+     * {@link Integer#parseInt(java.lang.String) Integer.parseInt(String)},
+     * otherwise call
+     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
+     * 
+     * @see Integer#parseInt(java.lang.String)
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return int value
+     */
+    public abstract int getInt(FaceletContext ctx);
+
+    /**
+     * Local name of this attribute
+     * 
+     * @return local name of this attribute
+     */
+    public abstract String getLocalName();
+
+    /**
+     * The location of this attribute in the FaceletContext
+     * 
+     * @return the TagAttribute's location
+     */
+    public abstract Location getLocation();
+
+    /**
+     * Create a MethodExpression, using this attribute's value as the expression
+     * String.
+     * 
+     * @see ExpressionFactory#createMethodExpression(javax.el.ELContext,
+     *      java.lang.String, java.lang.Class, java.lang.Class[])
+     * @see MethodExpression
+     * @param ctx
+     *            FaceletContext to use
+     * @param type
+     *            expected return type
+     * @param paramTypes
+     *            parameter type
+     * @return a MethodExpression instance
+     */
+    public abstract MethodExpression getMethodExpression(FaceletContext ctx, Class type,
+            Class[] paramTypes);
+    
+    /**
+     * The resolved Namespace for this attribute
+     * 
+     * @return resolved Namespace
+     */
+    public abstract String getNamespace();
+
+    /**
+     * Delegates to getObject with Object.class as a param
+     * 
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return Object representation of this attribute's value
+     */
+    public abstract Object getObject(FaceletContext ctx);
+
+    /**
+     * The qualified name for this attribute
+     * 
+     * @return the qualified name for this attribute
+     */
+    public abstract String getQName();
+
+    /**
+     * Return the literal value of this attribute
+     * 
+     * @return literal value
+     */
+    public abstract String getValue();
+
+    /**
+     * If literal, then return our value, otherwise delegate to getObject,
+     * passing String.class.
+     * 
+     * @see #getObject(FaceletContext, Class)
+     * @param ctx
+     *            FaceletContext to use
+     * @return String value of this attribute
+     */
+    public abstract String getValue(FaceletContext ctx);
+
+    /**
+     * If literal, simply coerce our String literal value using an
+     * ExpressionFactory, otherwise create a ValueExpression and evaluate it.
+     * 
+     * @see ExpressionFactory#coerceToType(java.lang.Object, java.lang.Class)
+     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
+     *      java.lang.String, java.lang.Class)
+     * @see ValueExpression
+     * @param ctx
+     *            FaceletContext to use
+     * @param type
+     *            expected return type
+     * @return Object value of this attribute
+     */
+    public abstract Object getObject(FaceletContext ctx, Class type);
+
+    /**
+     * Create a ValueExpression, using this attribute's literal value and the
+     * passed expected type.
+     * 
+     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
+     *      java.lang.String, java.lang.Class)
+     * @see ValueExpression
+     * @param ctx
+     *            FaceletContext to use
+     * @param type
+     *            expected return type
+     * @return ValueExpression instance
+     */
+    public abstract ValueExpression getValueExpression(FaceletContext ctx, Class type);
+
+    /**
+     * If this TagAttribute is literal (not #{..} or ${..})
+     * 
+     * @return true if this attribute is literal
+     */
+    public abstract boolean isLiteral();
+    
+    /**
+     * <p class="changed_added_2_2">A reference to the Tag for which this class
+     * represents the attributes.  For compatibility with previous implementations,
+     * an implementation is provided that returns {@code null}.</p>
+     * 
+     * @since 2.2
+     * 
+     * @return the {@link Tag} for which this class represents the attributes.
+     */
+    
+    public Tag getTag() {
+        return null;
+    }
+
+    /**
+     * <p class="changed_added_2_2">Set a reference to the Tag for which
+     * this class represents the attributes.  The VDL runtime must
+     * ensure that this method is called before any {@link
+     * FaceletHandler}s for this element are instantiated. For
+     * compatibility with previous implementations, a no-op
+     * implementation is provided.</p>
+     * 
+     * @since 2.2
+     * 
+     */
+    public void setTag(Tag tag) {
+        
+    }
+}
diff --git a/javax/faces/view/facelets/TagAttributeException.java b/javax/faces/view/facelets/TagAttributeException.java
new file mode 100644
index 0000000..ba102d5
--- /dev/null
+++ b/javax/faces/view/facelets/TagAttributeException.java
@@ -0,0 +1,126 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0">An Exception caused by a {@link
+ * TagAttribute}</p>
+ *
+ * @since 2.0
+ */
+public final class TagAttributeException extends FaceletException {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    public TagAttributeException(TagAttribute attr) {
+        super(attr.toString());
+    }
+
+    public TagAttributeException(TagAttribute attr, String message) {
+        super(attr + " " + message);
+    }
+
+    public TagAttributeException(TagAttribute attr, Throwable cause) {
+        super(attr + " " + cause.getMessage(), cause);
+    }
+
+    public TagAttributeException(TagAttribute attr, String message,
+            Throwable cause) {
+        super(attr + " " + message, cause);
+    }
+
+    /**
+     * 
+     */
+    public TagAttributeException(Tag tag, TagAttribute attr) {
+        super(print(tag, attr));
+    }
+
+    private static String print(Tag tag, TagAttribute attr) {
+        return tag.getLocation() + " <" + tag.getQName() + " " + attr.getQName()
+                + "=\"" + attr.getValue() + "\">";
+    }
+
+    /**
+     * @param message
+     */
+    public TagAttributeException(Tag tag, TagAttribute attr, String message) {
+        super(print(tag, attr) + " " + message);
+    }
+
+    /**
+     * @param cause
+     */
+    public TagAttributeException(Tag tag, TagAttribute attr, Throwable cause) {
+        super(print(tag, attr) + " " + cause.getMessage(), cause);
+    }
+
+    /**
+     * @param message
+     * @param cause
+     */
+    public TagAttributeException(Tag tag, TagAttribute attr, String message,
+            Throwable cause) {
+        super(print(tag, attr) + " " + message, cause);
+    }
+
+}
diff --git a/javax/faces/view/facelets/TagAttributes.java b/javax/faces/view/facelets/TagAttributes.java
new file mode 100644
index 0000000..f88dfe8
--- /dev/null
+++ b/javax/faces/view/facelets/TagAttributes.java
@@ -0,0 +1,142 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">A</span> set of 
+ * TagAttributes, usually representing all attributes on a Tag.</p>
+ *
+ * @since 2.0
+ */
+public abstract class TagAttributes {
+
+    /**
+     * Return an array of all TagAttributes in this set
+     * 
+     * @return a non-null array of TagAttributes
+     */
+    public abstract TagAttribute[] getAll();
+
+    /**
+     * Using no namespace, find the TagAttribute
+     * 
+     * @see #get(String, String)
+     * @param localName
+     *            tag attribute name
+     * @return the TagAttribute found, otherwise null
+     */
+    public abstract TagAttribute get(String localName);
+
+    /**
+     * Find a TagAttribute that matches the passed namespace and local name.
+     * 
+     * @param ns
+     *            namespace of the desired attribute
+     * @param localName
+     *            local name of the attribute
+     * @return a TagAttribute found, otherwise null
+     */
+    public abstract TagAttribute get(String ns, String localName);
+
+    /**
+     * Get all TagAttributes for the passed namespace
+     * 
+     * @param namespace
+     *            namespace to search
+     * @return a non-null array of TagAttributes
+     */
+    public abstract TagAttribute[] getAll(String namespace);
+
+    /**
+     * A list of Namespaces found in this set
+     * 
+     * @return a list of Namespaces found in this set
+     */
+    public abstract String[] getNamespaces();
+    
+    /**
+     * <p class="changed_added_2_2">A reference to the Tag for which this class
+     * represents the attributes.  For compatibility with previous implementations,
+     * an implementation is provided that returns {@code null}.</p>
+     * 
+     * @since 2.2
+     * 
+     * @return the {@link Tag} for which this class represents the attributes.
+     */
+    
+    public Tag getTag() {
+        return null;
+    }
+    
+    /**
+     * <p class="changed_added_2_2">Set a reference to the Tag for which
+     * this class represents the attributes.  The VDL runtime must
+     * ensure that this method is called before any {@link
+     * FaceletHandler}s for this element are instantiated. For
+     * compatibility with previous implementations, a no-op
+     * implementation is provided.</p>
+     * 
+     * @since 2.2
+     * 
+     */
+    public void setTag(Tag tag) {
+        
+    }
+
+}
diff --git a/javax/faces/view/facelets/TagConfig.java b/javax/faces/view/facelets/TagConfig.java
new file mode 100644
index 0000000..197982f
--- /dev/null
+++ b/javax/faces/view/facelets/TagConfig.java
@@ -0,0 +1,88 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0">Passed to the constructor of {@link
+ * TagHandler} subclass, it defines the document definition of the
+ * handler we are instantiating.</p>
+ *
+ * @since 2.0
+ */
+public interface TagConfig {
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>Tag</code>
+     * representing this handler.</p>
+     */
+    public Tag getTag();
+
+    /**
+     * <p class="changed_added_2_0">The next {@link FaceletHandler}
+     * (child or children) to be applied.  This must never be
+     * <code>null</code>.</p>
+     */
+    public FaceletHandler getNextHandler();
+
+    /**
+     * <p class="changed_added_2_0">A document-unique id, follows the
+     * convention "_tagId##"</p>
+     */
+    public String getTagId();
+}
diff --git a/javax/faces/view/facelets/TagDecorator.java b/javax/faces/view/facelets/TagDecorator.java
new file mode 100644
index 0000000..c82acea
--- /dev/null
+++ b/javax/faces/view/facelets/TagDecorator.java
@@ -0,0 +1,562 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p><span class="changed_modified_2_2">Provides</span> the ability to completely 
+ * change the Tag before it's processed for compiling with the associated 
+ * {@link TagHandler}.</p>
+ * 
+ * <div class="changed_added_2_2">
+ * 
+ * <p>The runtime must provide a default implementation of this interface that
+ * performs the following actions in its {@link #decorate} method.</p>
+ * 
+ * <ul>
+ * 
+ * <li><p>Inspect the attributes of the {@code tag} argument.  If none
+ * of the attributes are declared to be in the {@code
+ * http://xmlns.jcp.org/jsf} namespace, iterate through the list of
+ * {@code TagDecorator} instances created from the values in the {@link
+ * javax.faces.application.ViewHandler#FACELETS_DECORATORS_PARAM_NAME}
+ * {@code context-param}, if any.  For each entry, call its {@link
+ * #decorate} method, passing the argument {@code tag}.  The first such
+ * entry that returns non-{@code null} from its {@link #decorate} method
+ * must cause the iteration to stop.</p></li>
+
+ * <li><p>If one or more of the attributes of the {@code tag} argument
+ * are in the {@code http://xmlns.jcp.org/jsf} namespace, obtain a
+ * reference to <strong>decoratedTag</strong> as described in the
+ * following steps and iterate through the list of {@link TagDecorator}
+ * instances as described in the preceding step, but pass
+ * <strong>decoratedTag</strong> to each call to {@link #decorate}.</p>
+
+ * <ul>
+
+ * <li><p>If the namespace of the tag is any namespace other than the
+ * empty string or {@code http://www.w3.org/1999/xhtml}, throw a {@link
+ * FaceletException}.</p></li>
+
+ * <li><p>Let <strong>localName</strong> be the return from {@link
+ * Tag#getLocalName}.  Use <strong>localName</strong> to identify an
+ * entry in a data structure based on the following table.  Once an
+ * entry has been identified, let <strong>targetTag</strong> be the
+ * value of the "target tag" column for that entry.</p>
+
+ * <table border="1">
+
+ * <tr>
+
+ * <th>localName</th>
+
+ * <th>selector attribute</th>
+
+ * <th>target tag</th>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>a</td>
+
+ * <td>jsf:action</td>
+
+ * <td>h:commandLink</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>a</td>
+
+ * <td>jsf:actionListener</td>
+
+ * <td>h:commandLink</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>a</td>
+
+ * <td>jsf:value</td>
+
+ * <td>h:outputLink</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>a</td>
+
+ * <td>jsf:outcome</td>
+
+ * <td>h:link</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>body</td>
+
+ * <td></td>
+
+ * <td>h:body</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>button</td>
+
+ * <td></td>
+
+ * <td>h:commandButton</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>button</td>
+
+ * <td>jsf:outcome</td>
+
+ * <td>h:button</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>form</td>
+
+ * <td></td>
+
+ * <td>h:form</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>head</td>
+
+ * <td></td>
+
+ * <td>h:head</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>img</td>
+
+ * <td></td>
+
+ * <td>h:graphicImage</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="button"</td>
+
+ * <td>h:commandButton</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="checkbox"</td>
+
+ * <td>h:selectBooleanCheckbox</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="color"</td>
+
+ * <td rowspan="12">h:inputText</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="date"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="datetime"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="datetime-local"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="email"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="month"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="number"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="range"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="search"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="time"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="url"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="week"</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="file"</td>
+
+ * <td>h:inputFile</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="hidden"</td>
+
+ * <td>h:inputHidden</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="password"</td>
+
+ * <td>h:inputSecret</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="reset"</td>
+
+ * <td>h:commandButton</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="submit"</td>
+
+ * <td>h:commandButton</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>input</td>
+
+ * <td>type="*"</td>
+
+ * <td>h:inputText</td>
+
+ * </tr>
+ * <tr>
+
+ * <td>label</td>
+
+ * <td></td>
+
+ * <td>h:outputLabel</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>link</td>
+
+ * <td></td>
+
+ * <td>h:outputStylesheet</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>script</td>
+
+ * <td></td>
+
+ * <td>h:outputScript</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>select</td>
+
+ * <td>multiple="*"</td>
+
+ * <td>h:selectManyListbox</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>select</td>
+
+ * <td></td>
+
+ * <td>h:selectOneListbox</td>
+
+ * </tr>
+
+ * <tr>
+
+ * <td>textarea</td>
+
+ * <td></td>
+
+ * <td>h:inputTextArea</td>
+
+ * </tr>
+
+ * </table>
+
+ * <p>In the case where there are multiple rows with the same
+ * <strong>localName</strong>, find a matching entry by using the
+ * argument {@code tag}'s attributes and the value from the "selector
+ * attribute" column in the table in the given order. A selector
+ * attribute value of <strong>*</strong> indicates any value. In the
+ * table, a selector attribute name prefixed with <strong>jsf:</strong>
+ * means the tag is treated as if it were in the {@code
+ * http://xmlns.jcp.org/jsf} namespace.  In actual Facelet pages, the
+ * namespace is what matters, not the prefix.</p>
+
+
+ * <p>If no matching entry is found, let
+ * {@code jsf:element} be the value of <strong>targetTag</strong></p>
+
+ * </li>
+
+ * <li><p>Convert all the attributes of the argument {@code tag} as
+ * follows.  First, create a new instance of {@link TagAttribute} with
+ * the following characteristics: location: from the argument {@code
+ * tag}'s location, namespace: {@code
+ * http://xmlns.jcp.org/jsf/passthrough}, local name: value of {@link
+ * javax.faces.render.Renderer#PASSTHROUGH_RENDERER_LOCALNAME_KEY},
+ * qualified name: same as local name with the "p:" prefix, value: from
+ * the argument {@code tag}'s local name.  Let this {@code TagAttribute}
+ * be <strong>elementNameTagAttribute</strong>.</p>
+
+ * <p>For each of argument {@code tag}'s attributes obtain a reference
+ * to a {@link TagAttribute} with the following characteristics.  For
+ * discussion let such an attribute be
+ * <strong>convertedTagAttribute</strong>.</p>
+ 
+ * <ul>
+
+ * <li><p><strong>convertedTagAttribute</strong>'s location: from the
+ * argument {@code tag}'s location.</p></li>
+
+ * <li><p>If the current attribute's namespace is {@code
+ * http://xmlns.jcp.org/jsf}, <strong>convertedTagAttribute</strong>'s
+ * qualified name must be the current attribute's local name and
+ * <strong>convertedTagAttribute</strong>'s namespace must be the empty
+ * string.  This will have the effect of setting the current attribute
+ * as a proper property on the {@code UIComponent} instance represented
+ * by this markup.</li>
+
+ * <li><p>If the current attribute's namespace is empty or different
+ * from the argument {@code tag}'s namespace, let the current attribute
+ * be <strong>convertedTagAttribute</strong>.  This will have the effect
+ * of setting the current attribute as an attribute on the attributes
+ * map of the {@code UIComponent} instance represented by this
+ * markup.</p></li>
+
+ * <li><p>Otherwise, assume the current attribute's namespace is {@code
+ * http://xmlns.jcp.org/jsf/passthrough}.
+ * <strong>ConvertedTagAttribute</strong>'s qualified name is the
+ * current attribute's local name prefixed by "p:".
+ * <strong>convertedTagAttribute</strong>'s namespace must be {@code
+ * http://xmlns.jcp.org/jsf/passthrough}.</p></li>
+
+ * </ul>
+
+ * <p>Create a {@link TagAttributes} instance containing
+ * <strong>elementNameTagAttribute</strong> and all the
+ * <strong>convertedTagAttribute</strong>s.  </p>
+
+ * </li>
+
+ * <li><p>Create a new {@link Tag} instance with the following
+ * characteristics.</p>
+
+ * <p>location: from the argument {@code tag}'s location.</p>
+
+ * <p>namespace: if <strong>targetTag</strong>'s prefix is "h", {@code
+ * http://xmlns.jcp.org/jsf/html}; if <strong>targetTag</strong>'s
+ * prefix is "jsf", {@code http://xmlns.jcp.org/jsf}.</p>
+
+ * <p>local name: the local name from the target tag column.</p>
+
+ * <p>attributes: the {@link TagAttributes} from the preceding step.
+
+ * <p>Let this new {@link Tag} instance be
+ * <strong>convertedTag</strong>.
+
+ * </li>
+
+ * </ul>
+
+ * </li>
+
+ * </ul>
+
+ * <p>The {@link Tag} instance returned from this decoration process
+ * must ultimately be passed to a {@link FaceletHandler} instance as
+ * described in the spec prose document section titled, "Specification
+ * of the ViewDeclarationLanguage Implementation for Facelets for JSF
+ * 2.0". </p>
+ * 
+ * </div>
+ * 
+ */
+public interface TagDecorator {
+
+    /**
+     * If handled, return a new Tag instance, otherwise return null
+     * 
+     * @param tag
+     *            tag to be decorated
+     * @return a decorated tag, otherwise null
+     */
+    public Tag decorate(Tag tag);
+}
diff --git a/javax/faces/view/facelets/TagException.java b/javax/faces/view/facelets/TagException.java
new file mode 100644
index 0000000..59b6226
--- /dev/null
+++ b/javax/faces/view/facelets/TagException.java
@@ -0,0 +1,110 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0">An Exception caused by a {@link Tag}</p>
+ * 
+ * @since 2.0
+ */
+public final class TagException extends FaceletException {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
+     * so the exception can reference its information.</p>
+     * @param tag the <code>Tag</code> that caused this exception.
+     */
+    public TagException(Tag tag) {
+        super(tag.toString());
+    }
+
+    /**
+     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
+     * so the exception can reference its information.</p>
+     * @param tag the <code>Tag</code> that caused this exception.
+     * @param message a message describing the exception
+     */
+    public TagException(Tag tag, String message) {
+        super(tag + " " + message);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
+     * so the exception can reference its information.</p>
+     * @param tag the <code>Tag</code> that caused this exception.
+     * @param cause the root cause for this exception.
+     */
+    public TagException(Tag tag, Throwable cause) {
+        super(tag.toString(), cause);
+    }
+
+    /**
+     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
+     * so the exception can reference its information.</p>
+     * @param tag the <code>Tag</code> that caused this exception.
+     * @param message a message describing the exception
+     * @param cause the root cause for this exception.
+     */
+    public TagException(Tag tag, String message, Throwable cause) {
+        super(tag + " " + message, cause);
+    }
+
+}
diff --git a/javax/faces/view/facelets/TagHandler.java b/javax/faces/view/facelets/TagHandler.java
new file mode 100644
index 0000000..2b95e1f
--- /dev/null
+++ b/javax/faces/view/facelets/TagHandler.java
@@ -0,0 +1,153 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+/**
+ * <p class="changed_added_2_0"><span
+ * class="changed_modified_2_0_rev_a">Foundation</span> class for
+ * <code>FaceletHandler</code>s associated with a markup element in a
+ * Facelet document.  This class introduces the concept of <a
+ * href="TagAttribute.html">XML attributes</a> to Facelets.  See the <a
+ * href="#TagHandler(javax.faces.view.facelets.TagConfig)">constructor</a>
+ * documentation for more details.</p>
+ * 
+ *
+ * @since 2.0
+ */
+public abstract class TagHandler implements FaceletHandler {
+
+    /**
+     * <p class="changed_added_2_0_rev_a">See {@link TagConfig#getTagId}.</p>
+     */
+
+    protected final String tagId;
+
+    /**
+     * <p class="changed_added_2_0_rev_a">A reference to the <code>Tag</code>
+     * instance corresponding to this <code>TagHandler</code>
+     * instance.</p>
+     */
+
+    protected final Tag tag;
+
+    /**
+     * <p class="changed_added_2_0_rev_a">A reference to the
+     * <code>FaceletHandler</code> that represents the first nested
+     * child of this <code>TagHandler</code> instance.</p>
+     */
+
+    protected final FaceletHandler nextHandler;
+
+    /**
+     * <p class="changed_added_2_0">Every <code>TagHandler</code>
+     * instance is associated with a {@link Tag}.  Each <code>Tag</code>
+     * instance has a {@link TagAttributes} property, which is simply a
+     * collection of {@link TagAttribute} instances.  Extract and save
+     * as protected instance variables the {@link TagConfig#getTagId},
+     * {@link TagConfig#getTag} and {@link TagConfig#getNextHandler}
+     * returns from the argument <code>TagConfig</code>.  This
+     * constructor is only called when the Facelets View is compiled.
+     * </p>
+     *
+     * @param config The structure that contains useful to the operation
+     * of this instance.
+     */
+
+    public TagHandler(TagConfig config) {
+        this.tagId = config.getTagId();
+        this.tag = config.getTag();
+        this.nextHandler = config.getNextHandler();
+    }
+
+    /**
+     * Utility method for fetching the appropriate TagAttribute
+     * 
+     * @param localName
+     *            name of attribute
+     * @return TagAttribute if found, otherwise null
+     */
+    protected final TagAttribute getAttribute(String localName) {
+        return this.tag.getAttributes().get(localName);
+    }
+
+    /**
+     * Utility method for fetching a required TagAttribute
+     * 
+     * @param localName
+     *            name of the attribute
+     * @return TagAttribute if found, otherwise error
+     * @throws TagException
+     *             if the attribute was not found
+     */
+    protected final TagAttribute getRequiredAttribute(String localName)
+            throws TagException {
+        TagAttribute attr = this.getAttribute(localName);
+        if (attr == null) {
+            throw new TagException(this.tag, "Attribute '" + localName
+                    + "' is required");
+        }
+        return attr;
+    }
+    
+
+    public String toString() {
+        return this.tag.toString();
+    }
+}
diff --git a/javax/faces/view/facelets/TagHandlerDelegate.java b/javax/faces/view/facelets/TagHandlerDelegate.java
new file mode 100644
index 0000000..3b757b1
--- /dev/null
+++ b/javax/faces/view/facelets/TagHandlerDelegate.java
@@ -0,0 +1,97 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+import java.io.IOException;
+import javax.faces.component.UIComponent;
+
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Abstract</span>
+ * class that defines methods
+ * relating to helping tag handler instances.  This abstraction enables
+ * implementation details to be hidden by the JSF implementation while
+ * still allowing concrete classes to be defined for extension by
+ * users.</p>
+ * 
+ * @since 2.0
+ */
+
+public abstract class TagHandlerDelegate {
+
+    /**
+     * <p class="changed_added_2_0">Return a {@link MetaRuleset}
+     * particular to this kind of tag handler.  Called from classes that
+     * implement {@link MetaTagHandler}.</p>
+     *
+     * @param type the <code>Class</code> for which the
+     * <code>MetaRuleset</code> must be created.
+     *
+     * @since 2.0
+     */ 
+    
+    public abstract MetaRuleset createMetaRuleset(Class type);
+    
+
+    /**
+     * <p class="changed_added_2_0"><span class="changed_modified_2_2">Called</span>
+     * by classes that implement
+     * {@link javax.faces.view.facelets.FaceletHandler} in their
+     * implementation of <code>apply()</code>.</p>
+     * 
+     * <p class="changed_added_2_2">If the argument {@code comp} is new to the
+     * view, for each tag attribute declared to be in the pass through attribute
+     * namespace, set the name and value of the attribute into the pass through
+     * attributes map of the component.  See {@link UIComponent#getPassThroughAttributes(boolean) }.
+     * See the VDLDocs for the namespace URI of the pass through attribute 
+     * namespace.  Attributes whose value is a {@code ValueExpression}
+     * must remain un-evaluated and stored in the map as {@code ValueExpression} instances.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this request
+     *
+     * @param comp the <code>UIComponent</code> that corresponds to this
+     * element.
+     *
+     */
+    public abstract void apply(FaceletContext ctx, UIComponent comp)
+    throws IOException;
+
+}
diff --git a/javax/faces/view/facelets/TagHandlerDelegateFactory.java b/javax/faces/view/facelets/TagHandlerDelegateFactory.java
new file mode 100644
index 0000000..fd80a94
--- /dev/null
+++ b/javax/faces/view/facelets/TagHandlerDelegateFactory.java
@@ -0,0 +1,118 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.FacesWrapper;
+
+/**
+ * <p class="changed_added_2_0"><span class="changed_modified_2_2">Abstract</span>
+ * factory for creating instances of {@link TagHandlerDelegate}.</p>
+ *
+ * @since 2.0
+ */
+public abstract class TagHandlerDelegateFactory implements FacesWrapper<TagHandlerDelegateFactory> {
+
+    public TagHandlerDelegateFactory() {
+    }
+
+    /**
+     * <p class="changed_added_2_2">If this factory has been decorated, the 
+     * implementation doing the decorating may override this method to provide
+     * access to the implementation being wrapped.  A default implementation
+     * is provided that returns <code>null</code>.</p>
+     * 
+     * @since 2.2
+     */
+
+    @Override
+    public TagHandlerDelegateFactory getWrapped() {
+        return null;
+    }
+    
+    /**
+     * <p class="changed_added_2_0">Create and return a {@link
+     * TagHandlerDelegate} instance designed for use with {@link
+     * ComponentHandler}.</p>
+     *
+     * @param owner the <code>ComponentHandler</code> instance being
+     * helped by this helper instance.
+     *
+     * @since 2.0
+     */ 
+    public abstract TagHandlerDelegate createComponentHandlerDelegate(ComponentHandler owner);
+
+    /**
+     * <p class="changed_added_2_0">Create and return a {@link
+     * TagHandlerDelegate} instance designed for use with {@link
+     * ValidatorHandler}.</p>
+     *
+     * @param owner the <code>ValidatorHandler</code> instance being
+     * helped by this helper instance.
+     *
+     * @since 2.0
+     */ 
+    public abstract TagHandlerDelegate createValidatorHandlerDelegate(ValidatorHandler owner);
+
+    /**
+     * <p class="changed_added_2_0">Create and return a {@link
+     * TagHandlerDelegate} instance designed for use with {@link
+     * ConverterHandler}.</p>
+     *
+     * @param owner the <code>ValidatorHandler</code> instance being
+     * helped by this helper instance.
+     *
+     * @since 2.0
+     */ 
+    public abstract TagHandlerDelegate createConverterHandlerDelegate(ConverterHandler owner);
+
+    /**
+     * <p class="changed_added_2_0">Create and return a {@link
+     * TagHandlerDelegate} instance designed for use with {@link
+     * BehaviorHandler}.</p>
+     *
+     * @param owner the <code>ValidatorHandler</code> instance being
+     * helped by this helper instance.
+     *
+     * @since 2.0
+     */ 
+    public abstract TagHandlerDelegate createBehaviorHandlerDelegate(BehaviorHandler owner);
+
+}
diff --git a/javax/faces/view/facelets/TextHandler.java b/javax/faces/view/facelets/TextHandler.java
new file mode 100644
index 0000000..6bd6f79
--- /dev/null
+++ b/javax/faces/view/facelets/TextHandler.java
@@ -0,0 +1,82 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+/**
+ * <p class="changed_added_2_0">An interface that allows other code 
+ * to identify FaceletHandlers that may provide text (String) content.</p>
+ *
+ * @since 2.0
+ */
+public interface TextHandler {
+
+    /**
+     * <p class="changed_added_2_0">Returns the literal String value of the 
+     * contained text.</p>
+     */
+    public String getText();
+    
+    /**
+     * <p class="changed_added_2_0">Returns the resolved literal String value 
+     * of the contained text after evaluating EL.</p>
+     *
+     * @param ctx the <code>FaceletContext</code> for this view execution
+     */
+    public String getText(FaceletContext ctx);
+}
diff --git a/javax/faces/view/facelets/ValidatorConfig.java b/javax/faces/view/facelets/ValidatorConfig.java
new file mode 100644
index 0000000..49a44e3
--- /dev/null
+++ b/javax/faces/view/facelets/ValidatorConfig.java
@@ -0,0 +1,78 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+
+/**
+ * <p class="changed_added_2_0">Used in creating <code>ValidatorHandler</code>
+ * and all implementations.</p>
+ *
+ * @since 2.0
+ * 
+ */
+public interface ValidatorConfig extends TagConfig {
+
+    /**
+     * <p class="changed_added_2_0">Return the validator-id associated with a 
+     * particular validator in your faces-config</p>
+     * @since 2.0
+     */
+    public String getValidatorId();
+    
+}
diff --git a/javax/faces/view/facelets/ValidatorHandler.java b/javax/faces/view/facelets/ValidatorHandler.java
new file mode 100644
index 0000000..e8774b8
--- /dev/null
+++ b/javax/faces/view/facelets/ValidatorHandler.java
@@ -0,0 +1,143 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2005-2007 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package javax.faces.view.facelets;
+
+import javax.faces.view.EditableValueHolderAttachedObjectHandler;
+
+/**
+ * <p class="changed_added_2_0">Handles setting a {@link
+ * javax.faces.validator.Validator} instance on an {@link
+ * javax.faces.component.EditableValueHolder} parent. Will wire all
+ * attributes set to the <code>Validator</code> instance
+ * created/fetched. Uses the "binding" attribute for grabbing instances
+ * to apply attributes to.</p> 
+
+ * <p>Will only set/create Validator is the passed UIComponent's parent
+ * is null, signifying that it wasn't restored from an existing
+ * tree.</p>
+
+ */
+public class ValidatorHandler extends FaceletsAttachedObjectHandler implements EditableValueHolderAttachedObjectHandler {
+
+    private String validatorId;
+    
+    private TagHandlerDelegate helper;
+
+    private ValidatorConfig config;
+
+
+    /**
+     * <p class="changed_added_2_0">Construct this instance around the configuration information in argument <code>config</code></p>
+     * @param config the <code>TagConfig</code> subclass for this kind
+     * of attached object.
+     */
+    public ValidatorHandler(ValidatorConfig config) {
+        super(config);
+        this.config = config;
+        this.validatorId = config.getValidatorId();
+    }
+
+    /**
+     * <p class="changed_added_2_0">Return the implementation specific
+     * delegate instance that provides the bulk of the work for this
+     * handler instance.</p>
+     */
+    @Override
+    protected TagHandlerDelegate getTagHandlerDelegate() {
+        if (null == helper) {
+            helper = delegateFactory.createValidatorHandlerDelegate(this);
+        }
+        return helper;
+    }
+
+    /**
+     * <p>Retrieve the id of the validator that is to be created and
+     * added to the parent <code>EditableValueHolder</code>.  All
+     * subclasses should override this method because it is important
+     * for Facelets to have a unique way of identifying the validators
+     * that are added to this <code>EditableValueHolder</code> and
+     * allows exclusions to work properly. An exclusion is a validator
+     * declaration that has the attribute "disabled" which resolves to
+     * false, instructing Facelets not to register a default validator
+     * with the same id.</p>
+     */
+    public String getValidatorId(FaceletContext ctx) {
+        if (validatorId == null) {
+            TagAttribute idAttr = getAttribute("validatorId");
+            if (idAttr == null) {
+                return null;
+            } else {
+                return idAttr.getValue(ctx);
+            }
+        }
+        return validatorId;
+    }
+
+
+    /**
+     * <p class="changed_added_2_0">Return the <code>TagConfig</code>
+     * subclass used to configure this handler instance.</p>
+     */
+    public ValidatorConfig getValidatorConfig() {
+
+        return config;
+        
+    }
+
+}
diff --git a/javax/faces/view/facelets/package.html b/javax/faces/view/facelets/package.html
new file mode 100644
index 0000000..6986708
--- /dev/null
+++ b/javax/faces/view/facelets/package.html
@@ -0,0 +1,80 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.view.facelets"</title>
+</head>
+<body bgcolor="white">
+
+<p class="changed_added_2_0"><span class="changed_modified_2_0_rev_a
+changed_modified_2_1 changed_modified_2_2">This</span> package contains public classes for
+the Java code API of Facelets.  The vast majority of Facelets users have
+no need to access the Java API and can get all their work done using the
+tag-level API.  These classes are provided for users that have a need
+for a Java API that allows participation in the execution of a Facelets
+View, which happens as a result of the runtime calling <a
+href="../ViewDeclarationLanguage.html#buildView(javax.faces.context.FacesContext,%20javax.faces.component.UIViewRoot)"><code>ViewDeclarationLanguage.buildView()</code></a>.
+    </p>
+
+<div class="changed_added_2_0">
+
+<p>
+
+<img src="Facelets.jpg" alt="UML Class Diagram of classes in this package" />
+
+</p>
+
+<p>The most common usecase for participating in the execution of a
+Facelets View is to provide a custom tag handler in those cases when the
+non-Java API methods for doing so is not sufficient.  In such cases,
+Java classes may extend from <code><a
+href="ComponentHandler.html">ComponentHandler</a></code>, <code><a
+href="BehaviorHandler.html">BehaviorHandler</a></code>, <code><a
+href="ConverterHandler.html">ConverterHandler</a></code>, or <code><a
+href="ValidatorHandler.html">ValidatorHandler</a></code> depending upon
+the kind of JSF Java API artifact they want to represent in the Facelets
+VDL page.</p>
+
+</div>
+
+</body> </html>
diff --git a/javax/faces/view/package.html b/javax/faces/view/package.html
new file mode 100644
index 0000000..078f96b
--- /dev/null
+++ b/javax/faces/view/package.html
@@ -0,0 +1,59 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.view"</title>
+</head>
+<body bgcolor="white">
+
+<p class="changed_added_2_0"><span class="changed_modified_2_0_rev_a
+changed_modified_2_1 changed_modified_2_2">Classes</span> for defining a
+View Declaration Language (VDL) for authoring JavaServer Faces user
+interfaces.  The root class in this package is <a
+href="ViewDeclarationLanguageFactory.html"><code>ViewDeclarationLanguageFactory</code>.</a>
+Interfaces and classes required for the Facelets for JSF 2
+implementation are also defined in package <a
+href="facelets/package-summary.html"><code>javax.faces.view.facelets</code></a>.</p>
+
+</body>
+</html>
diff --git a/javax/faces/webapp/AttributeTag.java b/javax/faces/webapp/AttributeTag.java
new file mode 100644
index 0000000..b1f1281
--- /dev/null
+++ b/javax/faces/webapp/AttributeTag.java
@@ -0,0 +1,173 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+/**
+ * <p>Tag implementation that adds an attribute with a specified name
+ * and String value to the component whose tag it is nested inside,
+ * if the component does not already contain an attribute with the
+ * same name.  This tag creates no output to the page currently
+ * being created.</p>
+ *
+ * @deprecated The Faces implementation must now provide the
+ * implementation for this class.
+ */
+
+public class AttributeTag extends TagSupport {
+
+
+    // ---------------------------------------------------------- Static Members
+
+
+    private static final long serialVersionUID = -7782950243436672334L;
+
+
+    // ------------------------------------------------------------- Attributes
+
+
+    /**
+     * <p>The name of the attribute to be created, if not already present.
+     */
+    private String name = null;
+
+
+    /**
+     * <p>Set the attribute name.</p>
+     *
+     * @param name The new attribute name
+     */
+    public void setName(String name) {
+
+        this.name = name;
+
+    }
+
+
+    /**
+     * <p>The value to be associated with this attribute, if it is created.</p>
+     */
+    private String value = null;
+
+
+
+    /**
+     * <p>Set the attribute value.</p>
+     *
+     * @param value The new attribute value
+     */
+    public void setValue(String value) {
+
+        this.value = value;
+
+    }
+
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Register the specified attribute name and value with the
+     * {@link UIComponent} instance associated with our most immediately
+     * surrounding {@link UIComponentTag} instance, if this {@link UIComponent}
+     * does not already have a value for the specified attribute name.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) { // PENDING - i18n
+            throw new JspException("Not nested in a UIComponentTag");
+        }
+
+        // Add this attribute if it is not already defined
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) { // PENDING - i18n
+            throw new JspException("No component associated with UIComponentTag");
+        }
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        ExpressionFactory exprFactory =
+            context.getApplication().getExpressionFactory();
+        ELContext elContext = context.getELContext();
+
+        String nameVal = (String) 
+                  exprFactory.createValueExpression(elContext, name, String.class)
+                      .getValue(elContext);
+        Object valueVal =
+                exprFactory.createValueExpression(elContext, value, Object.class)
+                    .getValue(elContext);
+
+        if (component.getAttributes().get(nameVal) == null) {
+            component.getAttributes().put(nameVal, valueVal);
+        }
+        return (SKIP_BODY);
+
+    }
+
+
+    public int doEndTag() throws JspException {
+	this.release();
+	return (EVAL_PAGE);
+    }
+
+    
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.name = null;
+        this.value = null;
+    }
+
+}
diff --git a/javax/faces/webapp/ConverterELTag.java b/javax/faces/webapp/ConverterELTag.java
new file mode 100644
index 0000000..a994499
--- /dev/null
+++ b/javax/faces/webapp/ConverterELTag.java
@@ -0,0 +1,167 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+
+
+
+
+/**
+ * <p><strong>ConverterELTag</strong> is a base class for all JSP custom
+ * actions that create and register a <code>Converter</code> instance on
+ * the {@link ValueHolder} associated with our most immediate
+ * surrounding instance of a tag whose implementation class is a
+ * subclass of {@link UIComponentClassicTagBase}.  To avoid creating duplicate
+ * instances when a page is redisplayed, creation and registration of a
+ * {@link Converter} occurs <strong>only</strong> if the corresponding
+ * {@link UIComponent} was created (by the owning {@link
+ * UIComponentTag}) during the execution of the current page.</p>
+ *
+ * <p>This class may be used as a base class for tag instances that
+ * support specific {@link Converter} subclasses.</p>
+ *
+ * <p>Subclasses of this class must implement the
+ * <code>createConverter()</code> method, which creates and returns a
+ * {@link Converter} instance.  Any configuration properties that specify
+ * behavior of this {@link Converter} must have been set by the
+ * <code>createConverter()</code> method.  Generally, this occurs
+ * by copying corresponding attribute values on the tag instance.</p>
+ *
+ * <p>This tag creates no output to the page currently being created.  It
+ * is used solely for the side effect of {@link Converter} creation.</p>
+ *
+ */
+
+public abstract class ConverterELTag extends TagSupport {
+
+
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the specified {@link Converter}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentClassicTagBase} instance, if
+     * the {@link UIComponent} instance was created by this execution of the
+     * containing JSP page.  If the localValue of the
+     * {@link UIComponent} is a String, attempt to convert it.</p></p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) { // PENDING - i18n
+            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }
+
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {            
+            //PENDING i18n
+            throw new JspException("Can't create Component from tag.");
+        }
+        if (!(component instanceof ValueHolder)) {
+            //PENDING i18n
+            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+        
+        Converter converter = createConverter();
+        
+        if (converter == null) {
+            throw new JspException("Can't create class of type:"+
+                    " javax.faces.convert.Converter, converter is null");
+        }
+        
+        ValueHolder vh = (ValueHolder)component;
+        FacesContext context = FacesContext.getCurrentInstance();
+        
+        // Register an instance with the appropriate component
+        vh.setConverter(converter);
+        
+        // Once the converter has been set, attempt to convert the
+        // incoming "value"
+        Object localValue = vh.getLocalValue();
+        if (localValue instanceof String) {
+            try {
+                localValue = converter.getAsObject(context, (UIComponent)vh, (String) localValue);
+                vh.setValue(localValue);
+            }
+            catch (ConverterException ce) {
+                // PENDING - Ignore?  Throw an exception?  Set the local
+                // value back to "null" and log a warning?
+            }
+        }        
+  
+        return (SKIP_BODY);
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * <p>Create and return a new {@link Converter} to be registered
+     * on our surrounding {@link UIComponent}.</p>
+     *
+     * @throws JspException if a new instance cannot be created
+     */
+    protected abstract Converter createConverter()
+        throws JspException;
+}
diff --git a/javax/faces/webapp/ConverterTag.java b/javax/faces/webapp/ConverterTag.java
new file mode 100644
index 0000000..f0d6735
--- /dev/null
+++ b/javax/faces/webapp/ConverterTag.java
@@ -0,0 +1,293 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+
+
+
+
+/**
+ * <p><strong>ConverterTag</strong> is a base class for all JSP custom actions
+ * that create and register a <code>Converter</code> instance on the
+ * {@link ValueHolder} associated with our most immediate
+ * surrounding instance of a tag whose implementation class is a subclass
+ * of {@link UIComponentTag}.  To avoid creating duplicate instances when
+ * a page is redisplayed, creation and registration of a {@link Converter}
+ * occurs <strong>only</strong> if the corresponding {@link UIComponent} was
+ * created (by the owning {@link UIComponentTag}) during the execution of the
+ * current page.</p>
+ *
+ * <p>This class may be used directly to implement a generic converter
+ * registration tag (based on the converter-id specified by the
+ * <code>converterId</code> attribute), or as a base class for tag
+ * instances that support specific {@link Converter} subclasses.  This
+ * <code>converterId</code> attribute must refer to one of the well
+ * known converter-ids, or a custom converter-id as defined in a
+ * <code>faces-config.xml</code> file.</p>
+ *
+ * <p>Subclasses of this class must implement the
+ * <code>createConverter()</code> method, which creates and returns a
+ * {@link Converter} instance.  Any configuration properties that specify
+ * behavior of this {@link Converter} must have been set by the
+ * <code>createConverter()</code> method.  Generally, this occurs
+ * by copying corresponding attribute values on the tag instance.</p>
+ *
+ * <p>This tag creates no output to the page currently being created.  It
+ * is used solely for the side effect of {@link Converter} creation.</p>
+ *
+ * @deprecated This has been partially replaced by {@link
+ * ConverterELTag}.  The remainder of the functionality, namely, the
+ * binding facility and the implementation of the {@link
+ * #createConverter} method, is now an implementation detail.
+ */
+
+public class ConverterTag extends TagSupport {
+
+
+    // ---------------------------------------------------------- Static Members
+
+
+    private static final long serialVersionUID = -5909792518081427720L;
+
+
+    // -------------------------------------------------------------- Attributes
+
+    /**
+     * <p>The identifier of the {@link Converter} instance to be created.</p>
+     */
+    private String converterId = null;
+    
+    /**
+     * <p>The {@link ValueExpression} that evaluates to an object that 
+     * implements {@link Converter}.</p>
+     */
+    private String binding = null;
+
+    /**
+     * <p>Set the identifer of the {@link Converter} instance to be created.
+     *
+     * @param converterId The identifier of the converter instance to be
+     * created.
+     */
+    public void setConverterId(String converterId) {
+
+        this.converterId = converterId;
+
+    }
+
+    /**
+     * <p>Set the expression that will be used to create a {@link ValueExpression}
+     * that references a backing bean property of the {@link Converter} instance to 
+     * be created.</p>
+     *
+     * @param binding The new expression
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public void setBinding(String binding) 
+        throws JspException {
+        if (binding!= null && !UIComponentTag.isValueReference(binding)) {
+            // PENDING i18n
+            throw new JspException("Invalid Expression:"+binding);
+        }
+        this.binding = binding;
+    }
+    // ---------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the specified {@link Converter}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentTag} instance, if
+     * the {@link UIComponent} instance was created by this execution of the
+     * containing JSP page.  If the localValue of the
+     * {@link UIComponent} is a String, attempt to convert it.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+            UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) { // PENDING - i18n
+            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }
+
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {            
+            //PENDING i18n
+            throw new JspException("Can't create Component from tag.");
+        }
+        if (!(component instanceof ValueHolder)) {
+            //PENDING i18n
+            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+        
+        Converter converter = createConverter();
+        
+        if (converter == null) {
+            //noinspection NonConstantStringShouldBeStringBuffer
+            String converterError = null;
+            if (binding != null) {
+                converterError = binding;
+            }
+            if (converterId != null) {
+                if (converterError != null) {
+                    converterError += " or " + converterId;
+                } else {
+                    converterError = converterId;
+                }
+            }
+
+            // PENDING i18n
+            throw new JspException("Can't create class of type:"+
+                    "javax.faces.convert.Converter for:"+converterError);
+        }
+
+        ValueHolder vh = (ValueHolder)component;
+        FacesContext context = FacesContext.getCurrentInstance();
+        
+        // Register an instance with the appropriate component
+        vh.setConverter(converter);
+        
+        // Once the converter has been set, attempt to convert the
+        // incoming "value"
+        Object localValue = vh.getLocalValue();
+        if (localValue instanceof String) {
+            try {
+                localValue = converter.getAsObject(context, (UIComponent)vh, (String) localValue);
+                vh.setValue(localValue);
+            }
+            catch (ConverterException ce) {
+                // PENDING - Ignore?  Throw an exception?  Set the local
+                // value back to "null" and log a warning?
+            }
+        }        
+  
+        return (SKIP_BODY);
+
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.converterId = null;
+
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+
+    /**
+     * <p>Create and return a new {@link Converter} to be registered
+     * on our surrounding {@link UIComponent}.</p>
+     *
+     * @throws JspException if a new instance cannot be created
+     */
+    protected Converter createConverter()
+        throws JspException {
+
+        FacesContext context = FacesContext.getCurrentInstance();
+        Converter converter = null;
+        ValueExpression vb = null;
+        
+        // If "binding" is set, use it to create a converter instance.
+        if (binding != null) {
+            try {
+		vb = 
+                context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), binding, Object.class);
+		if (vb != null) {
+                    converter = (Converter)vb.getValue(context.getELContext());
+                    if (converter != null) {
+                        return converter;
+                    }
+                }
+            } catch (Exception e) {
+                throw new JspException(e);
+            }
+        }
+        // If "converterId" is set, use it to create the converter
+        // instance.  If "converterId" and "binding" are both set, store the 
+        // converter instance in the value of the property represented by
+        // the value binding expression.      
+        if (converterId != null) {
+            try {
+                String converterIdVal = converterId;
+                if (UIComponentTag.isValueReference(converterId)) {
+                    ValueExpression idBinding =
+                        context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), converterId, Object.class);
+                    converterIdVal = (String) idBinding.getValue(context.getELContext());
+                }
+                converter = context.getApplication().createConverter(converterIdVal);
+                if (converter != null) {
+                    if (vb != null) {
+                        vb.setValue(context.getELContext(), converter);
+                    }
+                }
+            } catch (Exception e) {
+                throw new JspException(e);
+            }
+        }
+        return converter;
+    }
+}
diff --git a/javax/faces/webapp/FacesServlet.java b/javax/faces/webapp/FacesServlet.java
new file mode 100644
index 0000000..e3534ce
--- /dev/null
+++ b/javax/faces/webapp/FacesServlet.java
@@ -0,0 +1,712 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.ResourceBundle;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.List;
+
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.application.ResourceHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.context.FacesContextFactory;
+import javax.faces.lifecycle.Lifecycle;
+import javax.faces.lifecycle.LifecycleFactory;
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.UnavailableException;
+import javax.servlet.annotation.MultipartConfig;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * <p><strong class="changed_modified_2_0 changed_modified_2_0_rev_a
+ * changed_modified_2_1 changed_modified_2_2">FacesServlet</strong> is a
+ * servlet that manages the request processing lifecycle for web
+ * applications that are utilizing JavaServer Faces to construct the
+ * user interface.</p>
+ *
+ * <div class="changed_added_2_1">
+ *
+ * <p>If the application is running in a Servlet 3.0 (and beyond)
+ * container, the runtime must provide an implementation of the {@link
+ * javax.servlet.ServletContainerInitializer} interface that declares
+ * the following classes in its {@link
+ * javax.servlet.annotation.HandlesTypes} annotation.</p>
+
+ * <ul>
+ 
+ * <li>{@link javax.faces.application.ResourceDependencies}</li>
+
+ * <li>{@link javax.faces.application.ResourceDependency}</li>
+
+ * <li>javax.faces.bean.ManagedBean</li>
+
+ * <li>{@link javax.faces.component.FacesComponent}</li>
+
+ * <li>{@link javax.faces.component.UIComponent}</li>
+
+ * <li>{@link javax.faces.convert.Converter}</li>
+
+ * <li>{@link javax.faces.convert.FacesConverter}</li>
+
+ * <li>{@link javax.faces.event.ListenerFor}</li>
+
+ * <li>{@link javax.faces.event.ListenersFor}</li>
+
+ * <li>{@link javax.faces.render.FacesBehaviorRenderer}</li>
+
+ * <li>{@link javax.faces.render.Renderer}</li>
+
+ * <li>{@link javax.faces.validator.FacesValidator}</li>
+
+ * <li>{@link javax.faces.validator.Validator}</li>
+
+ * </ul>
+
+ * <p>This servlet must automatically be mapped if it is
+ * <strong>not</strong> explicitly mapped in <code>web.xml</code> or
+ * <code>web-fragment.xml</code> and one or more of the following
+ * conditions are true.</p>
+
+ * <ul>
+
+ * 	  <li><p>A <code>faces-config.xml</code> file is found in
+ * 	  <code>WEB-INF</code> </p></li>
+
+ * 	  <li><p>A <code>faces-config.xml</code> file is found in the
+ * 	  <code>META-INF</code> directory of a jar in the application's
+ * 	  classpath.</p></li>
+
+ * 	  <li><p>A filename ending in <code>.faces-config.xml</code> is
+ * 	  found in the <code>META-INF</code> directory of a jar in the
+ * 	  application's classpath.</p></li>
+
+ * 	  <li><p>The <code>javax.faces.CONFIG_FILES</code> context param
+ * 	  is declared in <code>web.xml</code> or
+ * 	  <code>web-fragment.xml</code>.</p></li>
+
+ *        <li><p>The <code>Set</code> of classes passed to the
+ *        <code>onStartup()</code> method of the
+ *        <code>ServletContainerInitializer</code> implementation is not
+ *        empty.</p></li>
+	
+ * </ul>
+
+ * <p>If the runtime determines that the servlet must be automatically
+ * mapped, it must be mapped to the following
+ * <<code>url-pattern</code>> entries.</p>
+
+ * 	<ul>
+
+ *         <li>/faces</li>
+ *         <li>*.jsf</li>
+ *         <li>*.faces</li>
+
+ *	</ul>
+
+ * </div>
+
+ * <div class="changed_added_2_2">
+ * 
+ * <p>This class must be annotated with {@code javax.servlet.annotation.MultipartConfig}.
+ * This causes the Servlet container in which the JSF implementation is running
+ * to correctly handle multipart form data.</p>
+
+ * <p><strong>Some security considerations relating to this class</strong></p>
+
+ * <p>The topic of web application security is a cross-cutting concern
+ * and every aspect of the specification address it.  However, as with
+ * any framework, the application developer needs to pay careful
+ * attention to security.  Please consider these topics among the rest
+ * of the security concerns for the application.  This is by no means a
+ * complete list of security concerns, and is no substitute for a
+ * thorough application level security review.</p>
+ *
+ * <ul>
+
+ * <p><strong>Prefix mappings and the <code>FacesServlet</code></strong></p>
+
+ * <p>If the <code>FacesServlet</code> is mapped using a prefix
+ * <code><url-pattern></code>, such as
+ * <code><url-pattern>/faces/*</url-pattern></code>,
+ * something must be done to prevent access to the view source without
+ * its first being processed by the <code>FacesServlet</code>.  One
+ * common approach is to apply a <security-constraint> to all
+ * facelet files and flow definition files.  Please see the
+ * <strong>Deployment Descriptor</strong> chapter of the Java Servlet
+ * Specification for more information the use of
+ * <security-constraint>.</p>
+
+ * <p><strong>Allowable HTTP Methods</strong></p>
+
+ * <p>The JSF specification only requires the use of the GET and POST
+ * http methods.  If your web application does not require any other
+ * http methods, such as PUT and DELETE, please consider restricting the
+ * allowable http methods using the <http-method> and
+ * <http-method-omission> elements.  Please see the
+ * <strong>Security</strong> of the Java Servlet Specification for more
+ * information the use of these elements.</p>
+
+
+ * </ul>
+ *
+ * </div>
+ */
+ at MultipartConfig
+public final class FacesServlet implements Servlet {
+
+    /*
+     * A white space separated list of case sensitive HTTP method names
+     * that are allowed to be processed by this servlet. * means allow all
+     */
+    private static final String ALLOWED_HTTP_METHODS_ATTR =
+            "com.sun.faces.allowedHttpMethods";
+    
+    // Http method names must be upper case. http://www.w3.org/Protocols/HTTP/NoteMethodCS.html
+    // List of valid methods in Http 1.1 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
+
+    private enum HttpMethod {
+        
+        OPTIONS("OPTIONS"),
+        GET("GET"),
+        HEAD("HEAD"),
+        POST("POST"),
+        PUT("PUT"),
+        DELETE("DELETE"),
+        TRACE("TRACE"),
+        CONNECT("CONNECT");
+        
+        private String name;
+        
+        HttpMethod(String name) {
+            this.name = name;
+        }
+
+        @Override
+        public String toString() {
+            return name;
+        }
+        
+    }
+
+
+    private Set<String> allowedUnknownHttpMethods;
+    private Set<HttpMethod> allowedKnownHttpMethods;
+    final private Set<HttpMethod> defaultAllowedHttpMethods = 
+            EnumSet.range(HttpMethod.OPTIONS, HttpMethod.CONNECT);
+    private Set<HttpMethod> allHttpMethods;
+
+    private boolean allowAllMethods;
+
+    /**
+     * <p>Context initialization parameter name for a comma delimited list
+     * of context-relative resource paths (in addition to
+     * <code>/WEB-INF/faces-config.xml</code> which is loaded automatically
+     * if it exists) containing JavaServer Faces configuration information.</p>
+     */
+    public static final String CONFIG_FILES_ATTR =
+        "javax.faces.CONFIG_FILES";
+
+
+    /**
+     * <p>Context initialization parameter name for the lifecycle identifier
+     * of the {@link Lifecycle} instance to be utilized.</p>
+     */
+    public static final String LIFECYCLE_ID_ATTR =
+        "javax.faces.LIFECYCLE_ID";
+
+
+    /**
+     * The <code>Logger</code> for this class.
+     */
+    private static final Logger LOGGER =
+          Logger.getLogger("javax.faces.webapp", "javax.faces.LogStrings");
+
+
+    /**
+     * <p>Factory for {@link FacesContext} instances.</p>
+     */
+    private FacesContextFactory facesContextFactory = null;
+
+
+    /**
+     * <p>The {@link Lifecycle} instance to use for request processing.</p>
+     */
+    private Lifecycle lifecycle = null;
+
+
+    /**
+     * <p>The <code>ServletConfig</code> instance for this servlet.</p>
+     */
+    private ServletConfig servletConfig = null;
+
+    /**
+     * From GLASSFISH-15632.  If true, the FacesContext instance
+     * left over from startup time has been released.  
+     */
+    private boolean initFacesContextReleased = false;
+    
+
+    /**
+     * <p>Release all resources acquired at startup time.</p>
+     */
+    public void destroy() {
+
+        facesContextFactory = null;
+        lifecycle = null;
+        servletConfig = null;
+        uninitHttpMethodValidityVerification();
+
+    }
+
+
+    /**
+     * <p>Return the <code>ServletConfig</code> instance for this servlet.</p>
+     */
+    public ServletConfig getServletConfig() {
+
+        return (this.servletConfig);
+
+    }
+
+
+    /**
+     * <p>Return information about this Servlet.</p>
+     */
+    public String getServletInfo() {
+
+        return (this.getClass().getName());
+
+    }
+
+
+    /**
+     * <p>Acquire the factory instances we will require.</p>
+     *
+     * @throws ServletException if, for any reason, the startup of
+     * this Faces application failed.  This includes errors in the
+     * config file that is parsed before or during the processing of
+     * this <code>init()</code> method.
+     */
+    public void init(ServletConfig servletConfig) throws ServletException {
+
+        // Save our ServletConfig instance
+        this.servletConfig = servletConfig;
+
+        // Acquire our FacesContextFactory instance
+        try {
+            facesContextFactory = (FacesContextFactory)
+                FactoryFinder.getFactory
+                (FactoryFinder.FACES_CONTEXT_FACTORY);
+        } catch (FacesException e) {
+            ResourceBundle rb = LOGGER.getResourceBundle();
+            String msg = rb.getString("severe.webapp.facesservlet.init_failed");
+            Throwable rootCause = (e.getCause() != null) ? e.getCause() : e;
+            LOGGER.log(Level.SEVERE, msg, rootCause);
+            throw new UnavailableException(msg);
+        }
+
+        // Acquire our Lifecycle instance
+        try {
+            LifecycleFactory lifecycleFactory = (LifecycleFactory)
+                FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+            String lifecycleId ;
+
+            // First look in the servlet init-param set
+            if (null == (lifecycleId = servletConfig.getInitParameter(LIFECYCLE_ID_ATTR))) {
+                // If not found, look in the context-param set 
+                lifecycleId = servletConfig.getServletContext().getInitParameter
+                    (LIFECYCLE_ID_ATTR);
+            }
+
+            if (lifecycleId == null) {
+                lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
+            }
+            lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
+            initHttpMethodValidityVerification();
+        } catch (FacesException e) {
+            Throwable rootCause = e.getCause();
+            if (rootCause == null) {
+                throw e;
+            } else {
+                throw new ServletException(e.getMessage(), rootCause);
+            }
+        }
+
+    }
+
+    private void initHttpMethodValidityVerification() {
+
+        assert (null == allowedUnknownHttpMethods);
+        assert (null != defaultAllowedHttpMethods);
+        assert (null == allHttpMethods);
+        allHttpMethods = EnumSet.allOf(HttpMethod.class);
+
+        // Configure our permitted HTTP methods
+
+        allowedUnknownHttpMethods = Collections.emptySet();
+        allowedKnownHttpMethods = defaultAllowedHttpMethods;
+        
+        String[] methods;
+        String allowedHttpMethodsString = servletConfig.getServletContext().getInitParameter(ALLOWED_HTTP_METHODS_ATTR);
+        if (null != allowedHttpMethodsString) {
+            methods = allowedHttpMethodsString.split("\\s+");
+            assert (null != methods); // assuming split always returns a non-null array result
+            allowedUnknownHttpMethods = new HashSet(methods.length);
+            List<String> allowedKnownHttpMethodsStringList = new ArrayList<String>();
+            // validate input against allHttpMethods data structure
+            for (String cur : methods) {
+                if (cur.equals("*")) {
+                    allowAllMethods = true;
+                    allowedUnknownHttpMethods = Collections.emptySet();
+                    return;
+                }
+                boolean isKnownHttpMethod;
+                try {
+                    HttpMethod.valueOf(cur);
+                    isKnownHttpMethod = true;
+                } catch (IllegalArgumentException e) {
+                    isKnownHttpMethod = false;
+                }
+                
+                if (!isKnownHttpMethod) {
+                    if (LOGGER.isLoggable(Level.WARNING)) {
+                        HttpMethod [] values = HttpMethod.values();
+                        Object [] arg = new Object[values.length + 1];
+                        arg[0] = cur;
+                        System.arraycopy(values, HttpMethod.OPTIONS.ordinal(), 
+                                         arg, 1, values.length);
+                        LOGGER.log(Level.WARNING,
+                                "warning.webapp.facesservlet.init_invalid_http_method",
+                                arg);
+                    }
+                    // prevent duplicates
+                    if (!allowedUnknownHttpMethods.contains(cur)) {
+                        allowedUnknownHttpMethods.add(cur);
+                    }
+                } else {
+                    // prevent duplicates
+                    if (!allowedKnownHttpMethodsStringList.contains(cur)) {
+                        allowedKnownHttpMethodsStringList.add(cur);
+                    }
+                }
+            }
+            // Optimally initialize allowedKnownHttpMethods
+            if (5 == allowedKnownHttpMethodsStringList.size()) {
+                allowedKnownHttpMethods = EnumSet.of(
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(0)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(1)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(2)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(3)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(4))
+                        );
+            } else if (4 == allowedKnownHttpMethodsStringList.size()) {
+                allowedKnownHttpMethods = EnumSet.of(
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(0)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(1)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(2)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(3))
+                        );
+                
+            } else if (3 == allowedKnownHttpMethodsStringList.size()) {
+                allowedKnownHttpMethods = EnumSet.of(
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(0)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(1)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(2))
+                        );
+                
+            } else if (2 == allowedKnownHttpMethodsStringList.size()) {
+                allowedKnownHttpMethods = EnumSet.of(
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(0)),
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(1))
+                        );
+                
+            } else if (1 == allowedKnownHttpMethodsStringList.size()) {
+                allowedKnownHttpMethods = EnumSet.of(
+                        HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(0))
+                        );
+                
+            } else {
+                List<HttpMethod> restList = 
+                        new ArrayList<HttpMethod>(allowedKnownHttpMethodsStringList.size() - 1);
+                for (int i = 1; i < allowedKnownHttpMethodsStringList.size() - 1; i++) {
+                    restList.add(HttpMethod.valueOf(
+                            allowedKnownHttpMethodsStringList.get(i)
+                            ));
+                }
+                HttpMethod first = HttpMethod.valueOf(allowedKnownHttpMethodsStringList.get(0));
+                HttpMethod [] rest = new HttpMethod[restList.size()];
+                restList.toArray(rest);
+                allowedKnownHttpMethods = EnumSet.of(first, rest);
+                
+            } 
+        }
+    }
+
+    private void uninitHttpMethodValidityVerification() {
+        assert (null != allowedUnknownHttpMethods);
+        assert (null != defaultAllowedHttpMethods);
+        assert (null != allHttpMethods);
+
+        allowedUnknownHttpMethods.clear();
+        allowedUnknownHttpMethods = null;
+        allowedKnownHttpMethods.clear();
+        allowedKnownHttpMethods = null;
+        allHttpMethods.clear();
+        allHttpMethods = null;
+
+    }
+
+
+    /**
+     * <p class="changed_modified_2_0"><span
+     * class="changed_modified_2_2">Process</span> an incoming request,
+     * and create the corresponding response according to the following
+     * specification.</p>
+     * 
+     * <div class="changed_modified_2_0">
+     *
+     * <p>If the <code>request</code> and <code>response</code>
+     * arguments to this method are not instances of
+     * <code>HttpServletRequest</code> and
+     * <code>HttpServletResponse</code>, respectively, the results of
+     * invoking this method are undefined.</p>
+     *
+     * <p>This method must respond to requests that <span
+     * class="changed_modified_2_2">contain</span> the following
+     * strings by invoking the <code>sendError</code> method on the
+     * response argument (cast to <code>HttpServletResponse</code>),
+     * passing the code <code>HttpServletResponse.SC_NOT_FOUND</code> as
+     * the argument. </p>
+     *
+     * <ul>
+     *
+<pre><code>
+/WEB-INF/
+/WEB-INF
+/META-INF/
+/META-INF
+</code></pre>
+     *
+     * </ul>
+     *
+     
+     * <p>If none of the cases described above in the specification for
+     * this method apply to the servicing of this request, the following
+     * action must be taken to service the request.</p>
+
+     * <p>Acquire a {@link FacesContext} instance for this request.</p>
+
+     * <p>Acquire the <code>ResourceHandler</code> for this request by
+     * calling {@link
+     * javax.faces.application.Application#getResourceHandler}.  Call
+     * {@link
+     * javax.faces.application.ResourceHandler#isResourceRequest}.  If
+     * this returns <code>true</code> call {@link
+     * javax.faces.application.ResourceHandler#handleResourceRequest}.
+     * If this returns <code>false</code>, <span
+     * class="changed_added_2_2">call {@link
+     * javax.faces.lifecycle.Lifecycle#attachWindow} followed by </span>
+     * {@link javax.faces.lifecycle.Lifecycle#execute} followed by
+     * {@link javax.faces.lifecycle.Lifecycle#render}.  If a {@link
+     * javax.faces.FacesException} is thrown in either case, extract the
+     * cause from the <code>FacesException</code>.  If the cause is
+     * <code>null</code> extract the message from the
+     * <code>FacesException</code>, put it inside of a new
+     * <code>ServletException</code> instance, and pass the
+     * <code>FacesException</code> instance as the root cause, then
+     * rethrow the <code>ServletException</code> instance.  If the cause
+     * is an instance of <code>ServletException</code>, rethrow the
+     * cause.  If the cause is an instance of <code>IOException</code>,
+     * rethrow the cause.  Otherwise, create a new
+     * <code>ServletException</code> instance, passing the message from
+     * the cause, as the first argument, and the cause itself as the
+     * second argument.</p>
+
+     * <p class="changed_modified_2_0_rev_a">The implementation must
+     * make it so {@link javax.faces.context.FacesContext#release} is
+     * called within a finally block as late as possible in the
+     * processing for the JSF related portion of this request.</p>
+
+     * </div>
+     *
+     * @param req The servlet request we are processing
+     * @param resp The servlet response we are creating
+     *
+     * @throws IOException if an input/output error occurs during processing
+     * @throws ServletException if a servlet error occurs during processing
+
+     */
+    @Override
+    public void service(ServletRequest req,
+                        ServletResponse resp)
+        throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) req;
+        HttpServletResponse response = (HttpServletResponse) resp;
+
+        requestStart(request.getRequestURI()); // V3 Probe hook
+        
+        if (!isHttpMethodValid(request)) {
+            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
+            return;
+        }
+        if (Thread.currentThread().isInterrupted()) {
+            if (LOGGER.isLoggable(Level.FINER)) {
+                LOGGER.log(Level.FINE, "Thread {0} given to FacesServlet.service() in interrupted state", 
+                        Thread.currentThread().getName());
+            }
+        }
+
+        // If prefix mapped, then ensure requests for /WEB-INF are
+        // not processed.
+        String pathInfo = request.getPathInfo();
+        if (pathInfo != null) {
+            pathInfo = pathInfo.toUpperCase();
+            if (pathInfo.contains("/WEB-INF/")
+                || pathInfo.contains("/WEB-INF")
+                || pathInfo.contains("/META-INF/")
+                || pathInfo.contains("/META-INF")) {
+                response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                return;
+            }
+        }
+
+        if (!initFacesContextReleased) {
+            FacesContext initFacesContext = FacesContext.getCurrentInstance();
+            if (null != initFacesContext) {
+                initFacesContext.release();
+            }
+            initFacesContextReleased = true;
+        }
+        
+        // Acquire the FacesContext instance for this request
+        FacesContext context = facesContextFactory.getFacesContext
+              (servletConfig.getServletContext(), request, response, lifecycle);
+
+        // Execute the request processing lifecycle for this request
+        try {
+            ResourceHandler handler =
+                  context.getApplication().getResourceHandler();
+            if (handler.isResourceRequest(context)) {
+                handler.handleResourceRequest(context);
+            } else {
+                lifecycle.attachWindow(context);
+                lifecycle.execute(context);
+                lifecycle.render(context);
+            }
+        } catch (FacesException e) {
+            Throwable t = e.getCause();
+            if (t == null) {
+                throw new ServletException(e.getMessage(), e);
+            } else {
+                if (t instanceof ServletException) {
+                    throw ((ServletException) t);
+                } else if (t instanceof IOException) {
+                    throw ((IOException) t);
+                } else {
+                    throw new ServletException(t.getMessage(), t);
+                }
+            }
+        }
+        finally {
+            // Release the FacesContext instance for this request
+            context.release();
+        }
+
+        requestEnd(); // V3 Probe hook
+    }
+
+    private boolean isHttpMethodValid(HttpServletRequest request) {
+        boolean result = false;
+        if (allowAllMethods) {
+            result = true;
+        } else {
+            String requestMethodString = request.getMethod();
+            HttpMethod requestMethod = null;
+            boolean isKnownHttpMethod;
+            try {
+                requestMethod = HttpMethod.valueOf(requestMethodString);
+                isKnownHttpMethod = true;
+            } catch (IllegalArgumentException e) {
+                isKnownHttpMethod = false;
+            }
+            if (isKnownHttpMethod) {
+                result = allowedKnownHttpMethods.contains(requestMethod);
+            } else {
+                result = allowedUnknownHttpMethods.contains(requestMethodString);
+            }
+            
+        }
+
+        return result;
+    }
+
+
+    // --------------------------------------------------------- Private Methods
+
+
+    /**
+     * DO NOT REMOVE. Necessary for V3 probe monitoring.
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    private void requestStart(String requestUri) { }
+
+
+    /**
+     * DO NOT REMOVE. Necessary for V3 probe monitoring.
+     */
+    private void requestEnd() { }
+    
+    }    
diff --git a/javax/faces/webapp/FacetTag.java b/javax/faces/webapp/FacetTag.java
new file mode 100644
index 0000000..f24e411
--- /dev/null
+++ b/javax/faces/webapp/FacetTag.java
@@ -0,0 +1,118 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+/**
+ * <p><strong>FacetTag</strong> is the JSP mechanism for denoting a
+ * {@link javax.faces.component.UIComponent} is to be added as a
+ * <code>facet</code> to the component associated with its parent.</p>
+ *
+ * <p>A <strong>FacetTag</strong> must have one and only one
+ * child.  This child must be a {@link UIComponentTag} instance representing
+ * a single {@link javax.faces.component.UIComponent} instance.</p>
+ */
+
+public class FacetTag extends TagSupport {
+
+
+    // -------------------------------------------------------------- Properties
+
+
+    /**
+     * <p>The name of this facet.  This will be used as the facet name for
+     * our <code>UIComponentTag</code> child in our <code>UIComponentTag</code>
+     * parent's facet list.</p>
+     */ 
+    private String name = null;
+
+
+    /**
+     * <p>Return the name to be assigned to this facet.</p>
+     */
+    public String getName() {
+
+	return (name);
+
+    }
+    
+
+    /**
+     * <p>Set the name to be assigned to this facet.</p>
+     *
+     * @param name The new facet name
+     */
+    public void setName(String name) {
+
+	this.name = name;
+
+    }
+
+
+    // ------------------------------------------------------------- Tag Methods
+
+
+    /**
+     * <p>Release any resources allocated by this tag instance.
+     */
+    public void release() {
+
+        super.release();
+        this.name = null;
+
+    }
+
+
+    /**
+     * <p>Return <code>EVAL_BODY_INCLUDE</code> to cause nested body
+     * content to be evaluated.</p>
+     */
+    public int doStartTag() throws JspException {
+
+        return (EVAL_BODY_INCLUDE);
+
+    }
+
+}
diff --git a/javax/faces/webapp/MessageFactory.java b/javax/faces/webapp/MessageFactory.java
new file mode 100644
index 0000000..3017bad
--- /dev/null
+++ b/javax/faces/webapp/MessageFactory.java
@@ -0,0 +1,389 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * 
+ * <p>supported filters: <code>package</code> and
+ * <code>protection</code>.</p>
+ */
+
+ class MessageFactory {
+
+    private static final String MOJARRA_RESOURCE_BASENAME =
+        "com.sun.faces.resources.Messages";
+
+    private MessageFactory() {
+    }
+
+    /**
+     * @see #getMessage(String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(Locale, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(Locale locale,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(locale, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+
+    /**
+     * @see #getMessage(FacesContext, String, Object...)
+     * @param severity set a custom severity
+     */
+     static FacesMessage getMessage(FacesContext context,
+                                                String messageId,
+                                                FacesMessage.Severity severity,
+                                                Object... params) {
+        FacesMessage message = getMessage(context, messageId, params);
+        message.setSeverity(severity);
+        return message;
+    }
+
+   
+    /**
+     * <p>This version of getMessage() is used for localizing implementation
+     * specific messages.</p>
+     *
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+      static FacesMessage getMessage(String messageId, 
+                                                 Object... params) {
+        Locale locale = null;
+        FacesContext context = FacesContext.getCurrentInstance();
+        // context.getViewRoot() may not have been initialized at this point.
+        if (context != null && context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+            if (locale == null) {
+                locale = Locale.getDefault();
+            }
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        return getMessage(locale, messageId, params);
+    }
+
+     /**
+      * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+      *
+      * @param locale    - the target <code>Locale</code>
+      * @param messageId - the key of the message in the resource bundle
+      * @param params    - substittion parameters
+      *
+      * @return a localized <code>FacesMessage</code> with the severity
+      *  of FacesMessage.SEVERITY_ERROR
+      */
+      static FacesMessage getMessage(Locale locale, 
+                                                 String messageId, 
+                                                 Object... params) {       
+        String summary = null;
+        String detail = null;       
+        ResourceBundle bundle;
+        String bundleName;
+
+        // see if we have a user-provided bundle
+        Application app = getApplication();
+	Class appClass = app.getClass();
+        if (null != (bundleName = app.getMessageBundle())) {
+            if (null != 
+                (bundle = 
+                    ResourceBundle.getBundle(bundleName, locale,
+				     getCurrentLoader(appClass)))) {
+                // see if we have a hit
+                try {
+                    summary = bundle.getString(messageId);
+                    detail = bundle.getString(messageId + "_detail");
+                }
+                catch (MissingResourceException e) {
+                    // ignore
+                }
+            }
+        }
+    
+        // we couldn't find a summary in the user-provided bundle
+        if (null == summary) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(FacesMessage.FACES_MESSAGES, 
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+                detail = bundle.getString(messageId + "_detail");
+            } catch (MissingResourceException e) {
+                // ignore
+            }
+        }
+
+        // no hit found in the standard javax.faces.Messages bundle.
+        // check the Mojarra resources
+        if (summary == null) {
+            // see if we have a summary in the app provided bundle
+            bundle = ResourceBundle.getBundle(MOJARRA_RESOURCE_BASENAME,
+                                              locale,
+                                              getCurrentLoader(appClass));
+            if (null == bundle) {
+                throw new NullPointerException();
+            }
+            // see if we have a hit
+            try {
+                summary = bundle.getString(messageId);
+            } catch (MissingResourceException e) {
+                return null;
+            }
+        }
+
+        // At this point, we have a summary and a bundle.     
+        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
+        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
+        return (ret);
+    }
+
+
+    /**
+     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param messageId - the key of the message in the resource bundle
+     * @param params    - substittion parameters
+     *
+     * @return a localized <code>FacesMessage</code> with the severity
+     *  of FacesMessage.SEVERITY_ERROR
+     */
+     static FacesMessage getMessage(FacesContext context, 
+                                                String messageId,
+                                                Object... params) {
+                                                
+        if (context == null || messageId == null ) {
+            throw new NullPointerException(" context " 
+                + context 
+                + " messageId " 
+                + messageId);
+        }
+        Locale locale;
+        // viewRoot may not have been initialized at this point.
+        if (context.getViewRoot() != null) {
+            locale = context.getViewRoot().getLocale();
+        } else {
+            locale = Locale.getDefault();
+        }
+        
+        if (null == locale) {
+            throw new NullPointerException(" locale is null ");
+        }
+        
+        FacesMessage message = getMessage(locale, messageId, params);
+        if (message != null) {
+            return message;
+        }
+        locale = Locale.getDefault();
+        return (getMessage(locale, messageId, params));
+    }  
+                       
+
+    /**
+     * <p>Returns the <code>label</code> property from the specified
+     * component.</p>
+     *
+     * @param context   - the <code>FacesContext</code> for the current request
+     * @param component - the component of interest
+     *
+     * @return the label, if any, of the component
+     */
+     static Object getLabel(FacesContext context, 
+                                        UIComponent component) {
+                                        
+        Object o = component.getAttributes().get("label");
+        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
+            o = component.getValueExpression("label");
+        }
+        // Use the "clientId" if there was no label specified.
+        if (o == null) {
+            o = component.getClientId(context);
+        }
+        return o;
+    }
+
+    protected static Application getApplication() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context != null) {
+            return (FacesContext.getCurrentInstance().getApplication());
+        }
+        ApplicationFactory afactory = (ApplicationFactory)
+            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        return (afactory.getApplication());
+    }
+
+    protected static ClassLoader getCurrentLoader(Class fallbackClass) {
+        ClassLoader loader =
+            Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = fallbackClass.getClassLoader();
+        }
+        return loader;
+    }
+
+    /**
+     * This class overrides FacesMessage to provide the evaluation
+     * of binding expressions in addition to Strings.
+     * It is often the case, that a binding expression may reference
+     * a localized property value that would be used as a 
+     * substitution parameter in the message.  For example:
+     *  <code>#{bundle.userLabel}</code>
+     * "bundle" may not be available until the page is rendered.
+     * The "late" binding evaluation in <code>getSummary</code> and 
+     * <code>getDetail</code> allow the expression to be evaluated
+     * when that property is available.
+     */
+    static class BindingFacesMessage extends FacesMessage {
+        BindingFacesMessage(
+            Locale locale,
+            String messageFormat,
+            String detailMessageFormat,
+            // array of parameters, both Strings and ValueBindings
+            Object[] parameters) {
+
+            super(messageFormat, detailMessageFormat);
+            this.locale = locale;
+            this.parameters = parameters;
+            if (parameters != null) {
+                resolvedParameters = new Object[parameters.length];
+            }
+        }
+
+        public String getSummary() {
+            String pattern = super.getSummary();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        public String getDetail() {
+            String pattern = super.getDetail();
+            resolveBindings();
+            return getFormattedString(pattern, resolvedParameters);
+        }
+
+        private void resolveBindings() {
+            FacesContext context = null;
+            if (parameters != null) {
+                for (int i = 0; i < parameters.length; i++) {
+                    Object o = parameters[i];
+                    if (o instanceof ValueBinding) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueBinding) o).getValue(context);
+                    }
+                    if (o instanceof ValueExpression) {
+                        if (context == null) {
+                            context = FacesContext.getCurrentInstance();
+                        }
+                        o = ((ValueExpression) o).getValue(context.getELContext());
+                    }
+                    // to avoid 'null' appearing in message
+                    if (o == null) {
+                        o = "";
+                    }
+                    resolvedParameters[i] = o;
+                }
+            }
+        }
+
+        private String getFormattedString(String msgtext, Object[] params) {
+            String localizedStr = null;
+                                                                                
+            if (params == null || msgtext == null ) {
+                return msgtext;
+            }
+            StringBuffer b = new StringBuffer(100);
+            MessageFormat mf = new MessageFormat(msgtext);
+            if (locale != null) {
+                mf.setLocale(locale);
+                b.append(mf.format(params));
+                localizedStr = b.toString();
+            }
+            return localizedStr;
+        }
+
+        private Locale locale;
+        private Object[] parameters;
+        private Object[] resolvedParameters;
+    }
+    
+} // end of class MessageFactory
diff --git a/javax/faces/webapp/PreJsf2ExceptionHandlerFactory.java b/javax/faces/webapp/PreJsf2ExceptionHandlerFactory.java
new file mode 100644
index 0000000..8522db6
--- /dev/null
+++ b/javax/faces/webapp/PreJsf2ExceptionHandlerFactory.java
@@ -0,0 +1,338 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+import java.util.LinkedList;
+import java.util.Collections;
+import java.util.Iterator;
+
+import javax.faces.context.ExceptionHandlerFactory;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.event.PhaseId;
+import javax.el.ELException;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UpdateModelException;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p class="changed_added_2_0">This {@link ExceptionHandlerFactory} instance 
+ * produces JSF 1.2 compatible
+ * {@link ExceptionHandler} instances.  The {@link ExceptionHandler#handle} 
+ * method of the <code>ExceptionHandler</code> produced by this factory must 
+ * meet the following requirements</p>
+ * <div class="changed_added_2_0">
+ * 
+ * <ul>
+ * 
+ * <li><p>Any
+ * exceptions thrown before or after phase execution will be logged and 
+ * swallowed.</p></li>
+ * 
+ * <li><p>The implementation must examine
+ * the <code>Exception</code> within each of the unhandled exception
+ * events.  If the <code>Exception</code> is an instance of
+ * {@link UpdateModelException}, extract the {@link FacesMessage} from
+ * the <code>UpdateModelException</code>.  Log a <code>SEVERE</code>
+ * message to the log and queue the <code>FacesMessage</code> 
+ * on the {@link FacesContext}, using the <code>clientId</code> of
+ * the source component in a call to 
+ * {@link FacesContext#addMessage(java.lang.String, javax.faces.application.FacesMessage)}</p></li>
+ * 
+ * </ul>
+ * 
+ * </div>
+ *
+ * @since 2.0
+ */
+public class PreJsf2ExceptionHandlerFactory extends ExceptionHandlerFactory {
+
+    public PreJsf2ExceptionHandlerFactory() {
+    }
+
+
+    // ------------------------------------ Methods from ExceptionHandlerFactory
+
+
+    /**
+     * @return a new {@link ExceptionHandler} that behaves in a fashion compatible
+     *  with specifications prior to JavaServerFaces 1.2
+     */
+    public ExceptionHandler getExceptionHandler() {
+
+        return new PreJsf2ExceptionHandler();
+
+    }
+
+
+    // ---------------------------------------------------------- Nested Classes
+
+
+    /**
+     * JSF 1.2-style <code>ExceptionHandler</code> implementation.
+     */
+    private static final class PreJsf2ExceptionHandler extends ExceptionHandler {
+
+
+        private static final Logger LOGGER =
+              Logger.getLogger("javax.faces.webapp", "javax.faces.LogStrings");
+
+        private static final String LOG_BEFORE_KEY =
+              "servere.webapp.prejsf2.exception.handler.log_before";
+        private static final String LOG_AFTER_KEY =
+              "servere.webapp.prejsf2.exception.handler.log_after";
+        private static final String LOG_KEY =
+              "servere.webapp.prejsf2.exception.handler.log";
+
+
+        private LinkedList<ExceptionQueuedEvent> unhandledExceptions;
+        private LinkedList<ExceptionQueuedEvent> handledExceptions;
+        private ExceptionQueuedEvent handled;
+
+
+        // ------------------------------------------- Methods from ExceptionHandler
+
+
+        /**
+         * @see ExceptionHandler at getHandledExceptionQueuedEvent()
+         */
+        public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
+
+            return handled;
+
+        }
+
+
+        /**
+         * 
+         * 
+         * @since 2.0
+         */
+        public void handle() throws FacesException {
+
+            for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();) {
+                ExceptionQueuedEvent event = i.next();
+                ExceptionQueuedEventContext context =
+                      (ExceptionQueuedEventContext) event.getSource();
+                try {
+                    Throwable t = context.getException();
+                    if (isRethrown(t, (context.inBeforePhase() || context.inAfterPhase()))) {
+                        handled = event;
+                        Throwable unwrapped = getRootCause(t);
+                        if (unwrapped != null) {
+                            throw new FacesException(unwrapped.getMessage(), unwrapped);
+                        } else {
+                            if (t instanceof FacesException) {
+                                throw (FacesException) t;
+                            } else {
+                                throw new FacesException(t.getMessage(), t);
+                            }
+                        }
+                    } else {
+                        log(context);
+                    }
+
+                } finally {
+                    if (handledExceptions == null) {
+                        handledExceptions =
+                              new LinkedList<ExceptionQueuedEvent>();
+                    }
+                    handledExceptions.add(event);
+                    i.remove();
+                }
+            }
+
+        }
+
+
+        /**
+         * @see javax.faces.context.ExceptionHandler#isListenerForSource(Object)
+         */
+        public boolean isListenerForSource(Object source) {
+
+            return (source instanceof ExceptionQueuedEventContext);
+
+        }
+
+
+        /**
+         * @see javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)
+         */
+        public void processEvent(SystemEvent event)
+              throws AbortProcessingException {
+
+            if (event != null) {
+                if (unhandledExceptions == null) {
+                    unhandledExceptions = new LinkedList<ExceptionQueuedEvent>();
+                }
+                unhandledExceptions.add((ExceptionQueuedEvent) event);
+            }
+
+        }
+
+
+        /**
+         * @see ExceptionHandler#getRootCause(Throwable)
+         */
+        public Throwable getRootCause(Throwable t) {
+
+            if (t == null) {
+                return null;
+            }
+            if (shouldUnwrap(t.getClass())) {
+                Throwable root = t.getCause();
+                if (root != null) {
+                    Throwable tmp = getRootCause(root);
+                    if (tmp == null) {
+                        return root;
+                    } else {
+                        return tmp;
+                    }
+                } else {
+                    return t;
+                }
+            }
+            return t;
+
+        }
+
+
+        /**
+         * @see javax.faces.context.ExceptionHandler#getUnhandledExceptionQueuedEvents()
+         */
+        public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
+
+            return ((unhandledExceptions != null)
+                    ? unhandledExceptions
+                    : Collections.<ExceptionQueuedEvent>emptyList());
+
+        }
+
+
+        /**
+         * @return
+         *
+         * @see javax.faces.context.ExceptionHandler#getHandledExceptionQueuedEvents()
+         */
+        public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
+
+            return ((handledExceptions != null)
+                    ? handledExceptions
+                    : Collections.<ExceptionQueuedEvent>emptyList());
+
+        }
+
+
+        // --------------------------------------------------------- Private Methods
+
+
+        /**
+         * @param c <code>Throwable</code> implementation class
+         *
+         * @return <code>true</code> if <code>c</code> is FacesException.class or
+         *         ELException.class
+         */
+        private boolean shouldUnwrap(Class<? extends Throwable> c) {
+
+            return (FacesException.class.equals(c) || ELException.class.equals(c));
+
+        }
+
+
+        private boolean isRethrown(Throwable t, boolean isBeforeOrAfterPhase) {
+
+            return (!isBeforeOrAfterPhase &&
+                    !(t instanceof AbortProcessingException) &&
+                    !(t instanceof UpdateModelException));
+
+        }
+
+        
+        private void log(ExceptionQueuedEventContext exceptionContext) {
+
+            Throwable t = exceptionContext.getException();
+            UIComponent c = exceptionContext.getComponent();
+            if (t instanceof UpdateModelException) {
+                FacesContext context = FacesContext.getCurrentInstance();
+                FacesMessage message = ((UpdateModelException)t).getFacesMessage();
+                LOGGER.log(Level.SEVERE, message.getSummary(), t.getCause());
+                context.addMessage(c.getClientId(context), message);
+            } else {
+                boolean beforePhase = exceptionContext.inBeforePhase();
+                boolean afterPhase = exceptionContext.inAfterPhase();
+                PhaseId phaseId = exceptionContext.getPhaseId();
+                String key = getLoggingKey(beforePhase, afterPhase);
+                if (LOGGER.isLoggable(Level.SEVERE)) {
+                    LOGGER.log(Level.SEVERE,
+                            key,
+                            new Object[]{t.getClass().getName(),
+                                        phaseId.toString(),
+                                        ((c != null)
+                                         ? c.getClientId(exceptionContext.getContext())
+                                         : ""),
+                                        t.getMessage()});
+                    LOGGER.log(Level.SEVERE, t.getMessage(), t);
+                }
+            }
+
+        }
+
+        private String getLoggingKey(boolean beforePhase, boolean afterPhase) {
+            if (beforePhase) {
+                return LOG_BEFORE_KEY;
+            } else if (afterPhase) {
+                return LOG_AFTER_KEY;
+            } else {
+                return LOG_KEY;
+            }
+        }
+
+    } // END PreJsf2ExceptionHandler
+    
+}
diff --git a/javax/faces/webapp/TypedCollections.java b/javax/faces/webapp/TypedCollections.java
new file mode 100644
index 0000000..38becc1
--- /dev/null
+++ b/javax/faces/webapp/TypedCollections.java
@@ -0,0 +1,159 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+ class TypedCollections {
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null).
+     */
+    private static boolean checkCollectionMembers(Collection<?> c, Class<?> type) {
+        for (Object element : c) {
+            if (element != null && !type.isInstance(element)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Dynamically check that the members of the collection are all
+     * instances of the given type (or null), and that the collection
+     * itself is of the given collection type.
+     * 
+     * @param <E>
+     *                the collection's element type
+     * @param c
+     *                the collection to cast
+     * @param type
+     *                the class of the collection's element type.
+     * @return the dynamically-type checked collection.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E,TypedC extends Collection<E>> TypedC dynamicallyCastCollection(Collection<?> c,
+                                                                                          Class<E> type, 
+                                                                                          Class<TypedC> collectionType) {
+        if (c == null)
+            return null;
+        if (!collectionType.isInstance(c))
+            throw new ClassCastException(c.getClass().getName());
+        assert checkCollectionMembers(c, type) :
+            "The collection contains members with a type other than " + type.getName();
+
+        return collectionType.cast(c);
+    }
+
+    /**
+     * Dynamically check that the members of the list are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the list's element type
+     * @param list
+     *                the list to cast
+     * @param type
+     *                the class of the list's element type.
+     * @return the dynamically-type checked list.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E> List<E> dynamicallyCastList(List<?> list, Class<E> type) {
+        return dynamicallyCastCollection(list, type, List.class);
+    }
+
+    /**
+     * Dynamically check that the members of the set are all instances of
+     * the given type (or null).
+     * 
+     * @param <E>
+     *                the set's element type
+     * @param set
+     *                the set to cast
+     * @param type
+     *                the class of the set's element type.
+     * @return the dynamically-type checked set.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <E> Set<E> dynamicallyCastSet(Set<?> set, 
+                                                      Class<E> type) {
+        return dynamicallyCastCollection(set, type, Set.class);
+    }
+
+    /**
+     * Dynamically check that the keys and values in the map are all
+     * instances of the correct types (or null).
+     * 
+     * @param <K>
+     *                the map's key type
+     * @param <V>
+     *                the map's value type
+     * @param map
+     *                the map to cast
+     * @param keyType
+     *                the class of the map's key type.
+     * @param valueType
+     *                the class of the map's value type.
+     * @return the dynamically-type checked map.
+     * @throws java.lang.ClassCastException
+     */
+    @SuppressWarnings("unchecked")
+     static <K, V> Map<K, V> dynamicallyCastMap(Map<?, ?> map,
+                                                            Class<K> keyType, 
+                                                            Class<V> valueType) {
+        if (map == null) {
+            return null;                                                                     
+        }
+        assert checkCollectionMembers(map.keySet(), keyType) :
+            "The map contains keys with a type other than " + keyType.getName();
+        assert checkCollectionMembers(map.values(), valueType) :
+            "The map contains values with a type other than " + valueType.getName();
+
+        return (Map<K, V>) map;
+    }
+}
diff --git a/javax/faces/webapp/UIComponentBodyTag.java b/javax/faces/webapp/UIComponentBodyTag.java
new file mode 100644
index 0000000..b2d6874
--- /dev/null
+++ b/javax/faces/webapp/UIComponentBodyTag.java
@@ -0,0 +1,57 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+
+/**
+ * <p><strong>UIComponentBodyTag</strong> is a base class for all JSP custom
+ * actions, related to a UIComponent, that need to process their tag bodies.
+ * </p>
+ *
+ * @deprecated All component tags now implement <code>BodyTag</code>.
+ * This class has been replaced by {@link UIComponentELTag}.
+ */
+
+public abstract class UIComponentBodyTag extends UIComponentTag {
+
+    // remove all methods since UIComponentTag is now a body tag.
+
+}
diff --git a/javax/faces/webapp/UIComponentClassicTagBase.java b/javax/faces/webapp/UIComponentClassicTagBase.java
new file mode 100644
index 0000000..98c0515
--- /dev/null
+++ b/javax/faces/webapp/UIComponentClassicTagBase.java
@@ -0,0 +1,2133 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.BodyContent;
+import javax.servlet.jsp.tagext.BodyTag;
+import javax.servlet.jsp.tagext.JspIdConsumer;
+import javax.servlet.jsp.tagext.Tag;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.logging.Level;
+
+
+/**
+ * <p><strong><code>UIComponentTagBase</code></strong> is the base class
+ * for all JSP tags that use the "classic" JSP tag interface that
+ * correspond to a {@link javax.faces.component.UIComponent} instance in
+ * the view.  In Faces 1.2, all component tags are <code>BodyTag</code>
+ * instances to allow for the execution of the page to build the
+ * component tree, but not render it.  Rendering happens only after the
+ * component tree is completely built.</p>
+ *
+ * <p>{@link UIComponentTag} extends
+ * <code>UIComponentClassicTagBase</code> to add support for properties
+ * that conform to the Faces 1.1 EL.</p>
+ *
+ * <p>{@link UIComponentELTag} extends
+ * <code>UIComponentClassicTagBase</code> class to add support for
+ * properties that conform to the EL API.</p>
+ *
+ * <p>The default implementation allows the proper interweaving of
+ * template text, non-Faces JSP tag output, and Faces component tag
+ * output in the same page, as expected by the page author.</p>
+ *
+ * <p>The CASE markers in the following example will be cited in the
+ * method descriptions of this class.</p>
+ *
+ * <ul>
+ *
+ * <li><p>CASE 1 describes template text and/or non-component custom tag
+ * output occurring as the child of a component tag, but before the
+ * first component tag child of that component tag.</p></li>
+ *
+ * <li><p>CASE 2 describes template text and/or non-component custom tag
+ * output occurring between two sibling component tags.</p></li>
+ *
+ * <li><p>CASE 3 describes template text and/or non-component custom tag
+ * output occurring as the child content of an <f:verbatim>
+ * tag at any point in the page.</p></li>
+ *
+ * <li><p>CASE 4 describes template text and/or non-component custom tag
+ * output occurring between the last child component tag and its
+ * enclosing parent component tag's end tag.</p></li>
+ *
+ * </ul>
+ *
+ * <code><pre>
+
+ <h:panelGrid style="color:red" border="4" columns="2">
+ CASE 1
+ <h:outputText value="component 1"/>
+ CASE 2
+ <h:outputText value="component 2"/>
+ <f:verbatim>CASE 3</f:verbatim>
+ <c:out value="${pageScope.CASE4}" />
+ </h:panelGrid>
+
+ * </pre></code>
+ *
+ * <p>The preceding arrangement of faces component tags, must yield
+ * markup that will render identically to the following (assuming that
+ * <code>${pageScope.CASE4}</code> evaluates to "<code>CASE 4</code>"
+ * without the quotes).</p>
+ *
+ * <code><pre>
+
+ <table border="4" style="color:red">
+
+ <tbody>
+
+ <tr><td>CASE 1</td></tr> <tr><td>component 1</td></tr>
+
+ <tr><td>CASE 2</td> <tr><td>component 2</td></tr>
+
+ <tr><td>CASE 3</td> <td>CASE 4</td></tr>
+
+ </tbody>
+
+ </table>
+
+ * </pre></code>
+
+ *
+ */
+
+public abstract class UIComponentClassicTagBase extends UIComponentTagBase implements JspIdConsumer, BodyTag {
+
+    // ------------------------------------------------------ Manifest Constants
+    /**
+     * <p>The facesContext scope attribute under which a component tag stack
+     * for the current facesContext will be maintained.</p>
+     */
+    private static final String COMPONENT_TAG_STACK_ATTR =
+            "javax.faces.webapp.COMPONENT_TAG_STACK";
+
+    /**
+     * <p>The {@link UIComponent} attribute under which we will store a
+     * <code>List</code> of the component identifiers of child components
+     * created on the previous generation of this page (if any).</p>
+     */
+    private static final String JSP_CREATED_COMPONENT_IDS =
+            "javax.faces.webapp.COMPONENT_IDS";
+
+
+    /**
+     * <p>The {@link UIComponent} attribute under which we will store a
+     * <code>List</code> of the facet names of facets created on the previous
+     * generation of this page (if any).
+     */
+    private static final String JSP_CREATED_FACET_NAMES =
+            "javax.faces.webapp.FACET_NAMES";
+
+
+    /**
+     * <p>The attribute name under which we will store all {@link UIComponent}
+     * IDs of the current translation unit.</p>
+     */
+    private static final String GLOBAL_ID_VIEW =
+            "javax.faces.webapp.GLOBAL_ID_VIEW";
+
+    /**
+     * <p>The attribute name under which we will store the {@link FacesContext}
+     * for this request.</p>
+     */
+    private static final String CURRENT_FACES_CONTEXT =
+            "javax.faces.webapp.CURRENT_FACES_CONTEXT";
+
+    /**
+     * <p>The attribute name under which we will store the {@link UIViewRoot}
+     * for this request.</p>
+     */
+    private static final String CURRENT_VIEW_ROOT =
+            "javax.faces.webapp.CURRENT_VIEW_ROOT";
+
+    /**
+     * Used as the prefix for ids.  This is necessary to avoid
+     * uniqueness conflicts with the transient verbatim components.
+     */
+    protected static final String UNIQUE_ID_PREFIX =
+            UIViewRoot.UNIQUE_ID_PREFIX + '_';
+
+    /**
+     * Used to store the previousJspId Map in facesContextScope
+     */
+    private static final String PREVIOUS_JSP_ID_SET =
+            "javax.faces.webapp.PREVIOUS_JSP_ID_SET";
+
+    /**
+     * This is a <code>Page</code> scoped marker to help us
+     * keep track of the different execution context we could
+     * be operating within, e.g. an include, or a tag file.
+     * The value of the attribute is an Integer that is unqiue
+     * to this page context.
+     */
+    private static final String JAVAX_FACES_PAGECONTEXT_MARKER =
+            "javax.faces.webapp.PAGECONTEXT_MARKER";
+
+    /**
+     * This is a <code>facesContext</code> scoped attribute which contains
+     * an AtomicInteger which we use to increment the PageContext
+     * count.
+     */
+    private static final String JAVAX_FACES_PAGECONTEXT_COUNTER =
+            "javax.faces.webapp.PAGECONTEXT_COUNTER";
+
+    // ------------------------------------------------------ Instance Variables
+    /**
+     * <p>The <code>bodyContent</code> for this tag handler.</p>
+     */
+    protected BodyContent bodyContent = null;
+
+    /**
+     * <p>The {@link UIComponent} that is being encoded by this tag,
+     * if any.</p>
+     */
+    private UIComponent component = null;
+
+
+    /**
+     * <p>The {@link FacesContext} for the request being processed, if any.
+     * </p>
+     */
+    private FacesContext context = null;
+
+
+    /**
+     * <p>Was a new component instance dynamically created when our
+     * <code>findComponent()</code> method was called.</p>
+     */
+    private boolean created = false;
+
+
+    /**
+     * <p>The <code>Lst</code> of {@link UIComponent} ids created or located
+     * by nested {@link UIComponentTag}s while processing the current
+     * request.</p>
+     */
+    private List<String> createdComponents = null;
+
+
+    /**
+     * <p>The <code>List</code> of facet names created or located by nested
+     * {@link UIComponentTag}s while processing the current request.</p>
+     */
+    private List<String> createdFacets = null;
+
+
+    /**
+     * <p>The JSP <code>PageContext</code> for the page we are embedded in.</p>
+     */
+    protected PageContext pageContext = null;
+
+
+    /**
+     * <p>The JSP <code>Tag</code> that is the parent of this tag.</p>
+     */
+    private Tag parent = null;
+
+    /**
+     * {@link #setJspId}
+     */
+
+    private String jspId = null;
+
+    /**
+     * Only consulted in setJspId to detect the iterator case.
+     * Set in {@link #release}.  Never cleared.
+     */
+
+    //private String oldJspId = null;
+
+    /**
+     * This is simply the jspId prefixed by {@link #UNIQUE_ID_PREFIX}.
+     */
+
+    private String facesJspId = null;
+
+    /**
+     * <p>The component identifier for the associated component.</p>
+     */
+    private String id = null;
+
+    /**
+     * Caches the nearest enclosing {@link UIComponentClassicTagBase} of this
+     * tag. This is used for duplicate id detection.
+     */
+    private UIComponentClassicTagBase parentTag = null;
+
+    /**
+     * Set to true if this component is nested inside of an iterating
+     * tag
+     */
+    private boolean isNestedInIterator = false;
+
+    /**
+     * The next child index to get in getChild()
+     */
+    private int _nextChildIndex = 0;
+
+    Map<String, Map<String, UIComponentTagBase>> namingContainerChildIds = null;
+
+    public UIComponentClassicTagBase() {}
+
+    UIComponentClassicTagBase(PageContext pageContext, FacesContext facesContext) {
+        this.pageContext = pageContext;
+        this.context = facesContext;
+    }
+
+
+    // --------------------------------------------- Support Methods for Tag
+
+    //
+    // Simple methods to be overridden by subclasses if necessary
+    //
+
+    /**
+     * <p>Return the flag value that should be returned from the
+     * <code>doStart()</code> method when it is called.  Subclasses
+     * may override this method to return the appropriate value.</p>
+     *
+     * @throws JspException to cause <code>doStart()</code> to
+     *  throw an exception
+     */
+    protected int getDoStartValue() throws JspException {
+
+        int result = EVAL_BODY_BUFFERED;
+
+        return result;
+    }
+
+    /**
+     * <p>Return the flag value that should be returned from the
+     * <code>doEnd()</code> method when it is called.  Subclasses
+     * may override this method to return the appropriate value.</p>
+     *
+     * @throws JspException to cause <code>doEnd()</code> to
+     *  throw an exception
+     */
+    protected int getDoEndValue() throws JspException {
+
+        return (EVAL_PAGE);
+
+    }
+
+    /**
+     * <p>Delegate to the <code>encodeBegin()</code> method of our
+     * corresponding {@link UIComponent}.  This method is called from
+     * <code>doStartTag()</code>.  Normally, delegation occurs unconditionally;
+     * however, this method is abstracted out so that advanced tags can
+     * conditionally perform this call.
+     *
+     * @throws IOException if an input/output error occurs
+     *
+     * @deprecated No encoding is done during JSP page execution.
+     * Encoding is deferred until the page has completed executing to
+     * allow the entire tree to be built before any encoding occurs.
+     */
+    protected void encodeBegin() throws IOException {
+
+        component.encodeBegin(context);
+
+    }
+
+
+    /**
+     * <p>Delegate to the <code>encodeChildren()</code> method of our
+     * corresponding {@link UIComponent}.  This method is called from
+     * <code>doStartTag()</code>.  Normally, delegation occurs unconditionally;
+     * however, this method is abstracted out so that advanced tags can
+     * conditionally perform this call.
+     *
+     * @throws IOException if an input/output error occurs
+     *
+     * @deprecated No encoding is done during JSP page execution.
+     * Encoding is deferred until the page has completed executing to
+     * allow the entire tree to be built before any encoding occurs.
+     */
+    protected void encodeChildren() throws IOException {
+
+        component.encodeChildren(context);
+
+    }
+
+
+    /**
+     * <p>Delegate to the <code>encodeEnd()</code> method of our
+     * corresponding {@link UIComponent}.  This method is called from
+     * <code>doStartTag()</code>.  Normally, delegation occurs unconditionally;
+     * however, this method is abstracted out so that advanced tags can
+     * conditionally perform this call.
+     *
+     * @throws IOException if an input/output error occurs
+     *
+     * @deprecated No encoding is done during JSP page execution.
+     * Encoding is deferred until the page has completed executing to
+     * allow the entire tree to be built before any encoding occurs.
+     */
+    protected void encodeEnd() throws IOException {
+
+        component.encodeEnd(context);
+
+    }
+
+    // --------------------------------------------------------- Tag Properties
+
+
+    /**
+     * <p>Set the <code>PageContext</code> of the page containing this
+     * tag instance.</p>
+     *
+     * @param pageContext The enclosing <code>PageContext</code>
+     */
+    public void setPageContext(PageContext pageContext) {
+
+        this.pageContext = pageContext;
+
+    }
+
+
+    /**
+     * <p>Return the <code>Tag</code> that is the parent of this instance.</p>
+     */
+    public Tag getParent() {
+
+        return (this.parent);
+
+    }
+
+
+    /**
+     * <p>Set the <code>Tag</code> that is the parent of this instance.</p>
+     *
+     * @param parent The new parent <code>Tag</code>
+     */
+    public void setParent(Tag parent) {
+
+        this.parent = parent;
+
+    }
+
+
+
+
+    //
+    // Complex methods to support Tag
+    //
+
+    /**
+     * <p>Set up the {@link javax.faces.context.ResponseWriter} for the
+     * current response, if this has not been done already.</p>
+     *
+     * <p>@deprecated.  {@link
+     * javax.faces.application.ViewHandler#renderView} is now
+     * responsible for setting up the response writer.  This method is
+     * now a no-op.</p>
+
+     */
+    protected void setupResponseWriter() {
+    }
+
+
+    /**
+     * <p>Create a new child component using <code>createComponent</code>,
+     * initialize its properties, and add it to its parent as a child.
+     * </p>
+     * @param context {@link FacesContext} for the current request
+     * @param parent Parent {@link UIComponent} for the new child
+     * @param componentId Component identifier for the new child,
+     *  or <code>null</code> for no explicit identifier
+     */
+    private UIComponent createChild(
+            FacesContext context,
+            UIComponent parent,
+            UIComponentClassicTagBase parentTag,
+            String componentId) throws JspException {
+
+        UIComponent component = createComponent(context, componentId);
+        int indexOfNextChildTag = parentTag.getIndexOfNextChildTag();
+        if (indexOfNextChildTag > parent.getChildCount()) {
+            indexOfNextChildTag = parent.getChildCount();
+        }
+        parent.getChildren().add(indexOfNextChildTag, component);
+        created = true;
+        return (component);
+
+    }
+
+    /**
+     * <p>Create a new child component using <code>createComponent</code>,
+     * initialize its properties, and add it to its parent as a facet.
+     * </p>
+     * @param context {@link FacesContext} for the current request
+     * @param parent Parent {@link UIComponent} of the new facet
+     * @param name Name of the new facet
+     * @param newId id of the new facet
+     */
+    private UIComponent createFacet(FacesContext context, UIComponent parent,
+                                    String name, String newId) throws JspException {
+
+        UIComponent component = createComponent(context, newId);
+        parent.getFacets().put(name, component);
+        created = true;
+        return (component);
+
+    }
+
+    /**
+     * <p>Return a child with the specified component id from the specified
+     * component, if any; otherwise, return <code>null</code>.</p>
+     *
+     * @param component {@link UIComponent} to be searched
+     * @param componentId Component id to search for
+     */
+    private static UIComponent getChild(
+            UIComponentClassicTagBase tag, UIComponent component, String componentId)
+    {
+        int childCount = component.getChildCount();
+
+        // we only need to bother to check if we even have children
+        if (childCount > 0)
+        {
+            List<UIComponent> children = component.getChildren();
+
+            // Most Lists implement RandomAccess, so iterate directly rather than creating
+            // and iterator
+            if (children instanceof RandomAccess)
+            {
+                // in the most common case, the first component we are asked for will be the
+                // our first child, the second, our second, etc.  Take advantage of this by
+                // remembering the index to check for the next child.  This changes this code
+                // from O(n^2) for all of the children to O(n)
+                int startIndex;
+
+                if (tag != null)
+                    startIndex = tag._nextChildIndex;
+                else
+                    startIndex = 0;
+
+                // start searching from location remembered from last time
+                for (int i = startIndex; i < childCount; i++)
+                {
+                    UIComponent child = children.get(i);
+
+                    if (componentId.equals(child.getId()))
+                    {
+                        // bump up the index to search next and wrap around
+                        i++;
+
+                        tag._nextChildIndex = (i < childCount) ? i : 0;
+                        return child;
+                    }
+                }
+
+                // handle case where we started past the first item and didn't find our
+                // child.  Now search from the beginning to where we started
+                if (startIndex > 0)
+                {
+                    for (int i = 0; i < startIndex; i++)
+                    {
+                        UIComponent child = children.get(i);
+
+                        if (componentId.equals(child.getId()))
+                        {
+                            i++;
+
+                            tag._nextChildIndex = i;
+                            return child;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                // List doesn't support RandomAccess, do it the iterator way
+                for (UIComponent child : children)
+                {
+                    if (componentId.equals(child.getId()))
+                        return child;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * <p>Find and return the {@link UIComponent}, from the component
+     * tree, that corresponds to this tag handler instance.  If there
+     * is no such {@link UIComponent}, create one
+     * and add it as a child or facet of the {@link UIComponent} associated
+     * with our nearest enclosing {@link UIComponentTag}.  The process for
+     * locating or creating the component is:</p>
+     * <ol>
+     * <li>If we have previously located this component, return it.</li>
+     * <li>Locate the parent component by looking for a parent
+     *     {@link UIComponentTag} instance, and ask it for its component.
+     *     If there is no parent {@link UIComponentTag} instance, this tag
+     *     represents the root component, so get it from the current
+     *     <code>Tree</code> and return it.</li>
+     * <li>If this {@link UIComponentTag} instance has the
+     *     <code>facetName</code> attribute set, ask the parent
+     *     {@link UIComponent} for a facet with this name.  If not found,
+     *     create one, call <code>setProperties()</code> with the new
+     *     component as a parameter, and register it under this name.
+     *     Return the found or created facet {@link UIComponent}.</li>
+     * <li>Determine the component id to be assigned to the new
+     *     component, as follows:  if this {@link UIComponentTag} has
+     *     an <code>id</code> attribute set, use that value; otherwise,
+     *     generate an identifier that is guaranteed to be the same for
+     *     this {@link UIComponent} every time this page is processed
+     *     (i.e. one based on the location of all {@link UIComponentTag}
+     *     instances without an <code>id</code> attribute set).</li>
+     * <li>Ask the parent {@link UIComponent} for a child with this identifier.
+     *     If not found, create one, call <code>setProperties()</code>
+     *     with the new component as a parameter, and register it as a child
+     *     with this identifier.  Return the found or created
+     *     child {@link UIComponent}.</li>
+     * </ol>
+     * <p>When creating a component, the process is:</p>
+     * <ol>
+     * <li>Retrieve the component type by calling
+     * {@link UIComponentTag#getComponentType}</li>
+     * <li>If the component has a <code>binding</code> attribute,
+     * create an expression from it, and call
+     * {@link Application#createComponent} with that expression,
+     * the {@link FacesContext}, and the component type.  Store the
+     * expression using the key <code>"binding"</code>.</li>
+     * <li>Otherwise, call {@link Application#createComponent} with
+     * only the component type.
+     * <li>Call <code>setProperties()</code>.
+     * <li>Add the new component as a child or facet of its parent</li>
+     * </ol>
+     */
+    protected UIComponent findComponent(FacesContext context) throws JspException
+    {
+        // Step 1 -- Have we already found the relevant component?
+        if (component != null) {
+            return (component);
+        }
+
+        // Step 2 -- Identify the component that is, or will be, our parent
+        UIComponentClassicTagBase parentTag =
+                _getParentUIComponentClassicTagBase(context.getAttributes());
+        UIComponent parentComponent;
+        if (parentTag != null) {
+            parentComponent = parentTag.getComponentInstance();
+        } else {
+            // Special case.  The component to be found is the
+            // UIViewRoot.
+            // see if this is the first time this tag instance is trying
+            // to be bound to the UIViewRoot
+            parentComponent = context.getViewRoot();
+            // Has this UIViewRoot instance had a tag bound to it
+            // before?
+            if (null == parentComponent.getAttributes().get(CURRENT_VIEW_ROOT)) {
+                // No it hasn't.
+
+                // make sure setProperties() and setId() are called
+                // once per UIViewRoot instance.
+                try {
+                    setProperties(parentComponent);
+                } catch (FacesException e) {
+                    if (e.getCause() instanceof JspException) {
+                        throw ((JspException)e.getCause());
+                    }
+                    throw e;
+                }
+
+                if (null != this.id) {
+                    parentComponent.setId(this.id);
+                } else {
+                    assert(null != getFacesJspId());
+                    parentComponent.setId(getFacesJspId());
+                }
+                parentComponent.getAttributes().put(CURRENT_VIEW_ROOT,
+                        CURRENT_VIEW_ROOT);
+                created = true;
+            } else if (hasBinding()) {
+                try {
+                    setProperties(parentComponent);
+                } catch (FacesException e) {
+                    if (e.getCause() instanceof JspException) {
+                        throw ((JspException)e.getCause());
+                    }
+                    throw e;
+                }
+            }
+
+            // this is not the first time this tag instance is trying to
+            // be bound to this UIViewRoot, take no extra action.
+
+            component = parentComponent;
+            return (component);
+        }
+
+        // Step 3 -- Calculate the component identifier for this component
+        String newId = createId(context);
+
+        // Step 4 -- Create or return a facet with the specified name (if any)
+        String facetName = getFacetName();
+        boolean created = parentTag.getCreated();
+
+        if (facetName != null) {
+            component = parentComponent.getFacets().get(facetName);
+            if (component == null) {
+                component = createFacet(context, parentComponent, facetName,
+                        newId);
+            }
+            return (component);
+        } else {
+
+            // Step 5 -- Create or return a child with the specified id
+            component = getChild(parentTag, parentComponent, newId);
+            if (component == null) {
+                component = createChild(context, parentComponent, parentTag, newId);
+            }
+            return (component);
+        }
+
+    }
+
+    //
+    // Tag tree navigation
+    //
+
+    /**
+     * <p>Locate and return the nearest enclosing {@link UIComponentClassicTagBase}
+     * if any; otherwise, return <code>null</code>.</p>
+     *
+     * @param context <code>PageContext</code> for the current page
+     */
+    public static UIComponentClassicTagBase getParentUIComponentClassicTagBase(PageContext context)
+    {
+        return _getParentUIComponentClassicTagBase(getFacesContext(context));
+    }
+
+    private static UIComponentClassicTagBase _getParentUIComponentClassicTagBase(
+            FacesContext facesContext)
+    {
+        return _getParentUIComponentClassicTagBase(facesContext.getAttributes());
+    }
+
+    private static UIComponentClassicTagBase _getParentUIComponentClassicTagBase(Map<Object, Object> cMap) {
+        List list = null;
+
+        if (cMap != null) {
+            list = (List) cMap.get(COMPONENT_TAG_STACK_ATTR);
+        }
+
+        if (list != null)
+        {
+            return ((UIComponentClassicTagBase) list.get(list.size() - 1));
+        }
+        else
+        {
+            return null;
+        }
+
+    }
+
+    //
+    // Methods related to the createdComponents and createdFacets lists.
+    //
+
+    protected int getIndexOfNextChildTag() {
+
+        if (createdComponents != null) {
+            return (createdComponents.size());
+        } else {
+            return (0);
+        }
+
+    }
+
+    protected void addChild(UIComponent child) {
+
+        if (createdComponents == null) {
+            createdComponents = new ArrayList<String>(6);
+        }
+        createdComponents.add(child.getId());
+    }
+
+    /*
+     * Adds argument child to component tree as a child of this component.
+     */
+
+    void addChildToComponentAndTag(UIComponent child) {
+        UIComponent myComponent = this.getComponentInstance();
+
+        int indexOfNextChildTag = this.getIndexOfNextChildTag();
+        if (indexOfNextChildTag > myComponent.getChildCount()) {
+            indexOfNextChildTag = myComponent.getChildCount();
+        }
+        myComponent.getChildren().add(indexOfNextChildTag, child);
+        this.addChild(child);
+    }
+
+    protected void addFacet(String name) {
+
+        if (createdFacets == null) {
+            //noinspection CollectionWithoutInitialCapacity
+            createdFacets = new ArrayList<String>(3);
+        }
+        createdFacets.add(name);
+
+    }
+
+    /**
+     * <p>Pop the top {@link UIComponentTag} instance off of our component tag
+     * stack, deleting the stack if this was the last entry.</p>
+     */
+    private void popUIComponentClassicTagBase() {
+        List list = (List) context.getAttributes().get(COMPONENT_TAG_STACK_ATTR);
+
+        // if an exception occurred in a nested  tag,
+        //there could be a few tags left in the stack.
+        UIComponentClassicTagBase uic = null;
+        while (list != null && uic != this) {
+            int idx = list.size() - 1;
+            uic = (UIComponentClassicTagBase) list.get(idx);
+            list.remove(idx);
+            if (idx < 1) {
+                context.getAttributes().remove(COMPONENT_TAG_STACK_ATTR);
+                list = null;
+            }
+        }
+    }
+
+
+    /**
+     * <p>Push the specified {@link UIComponentTag} instance onto our component
+     * tag stack, creating a stack if necessary.</p>
+     */
+    private void pushUIComponentClassicTagBase() {
+
+        List<UIComponentClassicTagBase> list = TypedCollections.dynamicallyCastList((List)
+                context.getAttributes().get(COMPONENT_TAG_STACK_ATTR), UIComponentClassicTagBase.class);
+        if (list == null) {
+            //noinspection CollectionWithoutInitialCapacity
+            list = new ArrayList<UIComponentClassicTagBase>();
+            context.getAttributes().put(COMPONENT_TAG_STACK_ATTR, list);
+        }
+        list.add(this);
+
+    }
+
+    /**
+     * Similar to List.indexOf, except that we start searching from a specific index
+     * and then wrap aroud.  For this to be performant, the List should implement
+     * RandomAccess.
+     * @param <T>
+     * @param list List to seatch
+     * @param startIndex index to start searching for value from
+     * @param searchValue Value to search for (null not supported)
+     * @return The index at which the value was first found, or -1 if not found
+     */
+    private static int _indexOfStartingFrom(List<?> list, int startIndex, Object searchValue)
+    {
+        int itemCount = list.size();
+
+        boolean found = false;
+
+        // start searching from location remembered from last time
+        for (int currIndex = startIndex; currIndex < itemCount; currIndex++)
+        {
+            Object currId = list.get(currIndex);
+
+            if ((searchValue == currId) || ((searchValue != null) && searchValue.equals(currId)))
+            {
+                return currIndex;
+            }
+        }
+
+        // handle case where we started past the first item and didn't find the
+        // searchValue.  Now search from the beginning to where we started
+        if (startIndex > 0)
+        {
+            for (int currIndex = 0; currIndex < startIndex; currIndex++)
+            {
+                Object currId = list.get(currIndex);
+
+                if ((searchValue == currId) || ((searchValue != null) && searchValue.equals(currId)))
+                {
+                    return currIndex;
+                }
+            }
+        }
+
+        // didn't find it
+        return -1;
+    }
+
+    /**
+     * <p>Retrieve from the {@link UIComponent} corresponding to this tag
+     * handler the list of all child component ids created by
+     * {@link UIComponentTag} instances the previous time this tree was
+     * rendered.  Compare it to the list of children created during this
+     * page processing pass, and remove all children present on the old list
+     * but not in the new list.  Save the list as a {@link UIComponent}
+     * attribute so that it gets saved as part of the component's state.</p>
+     */
+    private void removeOldChildren()
+    {
+        Map<String, Object> attributes = component.getAttributes();
+        List<String> currentComponents = createdComponents;
+
+        // Get the old list of created component ids and update the current list as a
+        // component attribute
+        Object oldValue;
+
+        if (currentComponents != null)
+        {
+            oldValue = attributes.put(JSP_CREATED_COMPONENT_IDS, currentComponents);
+            createdComponents = null;
+        }
+        else
+        {
+            oldValue = attributes.remove(JSP_CREATED_COMPONENT_IDS);
+        }
+
+        // Remove old children that are no longer present
+        if (oldValue != null)
+        {
+            List<String> oldList = TypedCollections.dynamicallyCastList((List)oldValue, String.class);
+
+            int oldCount = oldList.size();
+
+            if (oldCount > 0)
+            {
+                if (currentComponents != null)
+                {
+                    int currStartIndex = 0;
+
+                    for (int oldIndex = 0; oldIndex < oldCount; oldIndex++)
+                    {
+                        String oldId = oldList.get(oldIndex);
+
+                        int foundIndex = _indexOfStartingFrom(currentComponents, currStartIndex, oldId);
+
+                        if (foundIndex != -1)
+                        {
+                            currStartIndex = foundIndex + 1;
+                        }
+                        else
+                        {
+                            UIComponent child = component.findComponent(oldId);
+                            // if a component is marked transient, it would have
+                            // been already removed from the child list, but the
+                            // oldList would still have it.  In addition, the component
+                            // might have manually been removed.  So, if findComponent
+                            // isn't successful, don't call remove child (it will NPE)
+                            if ( child != null)
+                            {
+                                component.getChildren().remove(child);
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    List<UIComponent> children = component.getChildren();
+
+                    // All old components need to be removed
+                    for (String oldId : oldList)
+                    {
+                        UIComponent child = component.findComponent(oldId);
+                        if (child != null)
+                        {
+                            children.remove(child);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * <p>Retrieve from the {@link UIComponent} corresponding to this tag
+     * handler the list of all facet names created by {@link UIComponentTag}
+     * instances the previous time this tree was rendered.  Compare it to the
+     * list of facets created during this page processing pass, and remove
+     * all facets present on the old list but not in the new list.  Save the
+     * list as a {@link UIComponent} attribute so that it gets saved as part
+     * of the component's state.</p>
+     */
+    private void removeOldFacets()
+    {
+        Map<String, Object> attributes = component.getAttributes();
+        List<String> currentComponents = createdFacets;
+
+        // Get the old list of created component ids and update the current list as a
+        // component attribute
+        Object oldValue;
+
+        if (currentComponents != null)
+        {
+            oldValue = attributes.put(JSP_CREATED_FACET_NAMES, currentComponents);
+            createdFacets = null;
+        }
+        else
+        {
+            oldValue = attributes.remove(JSP_CREATED_FACET_NAMES);
+        }
+
+        // Remove old children that are no longer present
+        if (oldValue != null)
+        {
+            List<String> oldList = TypedCollections.dynamicallyCastList((List)oldValue, String.class);
+
+            int oldCount = oldList.size();
+
+            if (oldCount > 0)
+            {
+                if (currentComponents != null)
+                {
+                    int currStartIndex = 0;
+
+                    for (int oldIndex = 0; oldIndex < oldCount; oldIndex++)
+                    {
+                        String oldId = oldList.get(oldIndex);
+
+                        int foundIndex = _indexOfStartingFrom(currentComponents, currStartIndex, oldId);
+
+                        if (foundIndex != -1)
+                        {
+                            currStartIndex = foundIndex + 1;
+                        }
+                        else
+                        {
+                            component.getFacets().remove(oldId);
+                        }
+                    }
+                }
+                else
+                {
+                    Map<String, UIComponent> facets = component.getFacets();
+
+                    // All old facets need to be removed
+                    for (String oldId : oldList)
+                    {
+                        facets.remove(oldId);
+                    }
+                }
+            }
+        }
+    }
+
+    //
+    // Methods to support content interweaving
+    //
+
+    /**
+     *
+     * <p>Create a transient UIOutput component from the body content,
+     * of this tag instance or return null if there is no body content,
+     * the body content is whitespace, or the body content is a
+     * comment.</p>
+     */
+
+    protected UIComponent createVerbatimComponentFromBodyContent() {
+        UIOutput verbatim = null;
+        String bodyContentString;
+        String trimString;
+        if (null != bodyContent &&
+                null != (bodyContentString = bodyContent.getString()) &&
+                0 < (trimString = bodyContent.getString().trim()).length()) {
+            if (!(trimString.startsWith("<!--") &&
+                    trimString.endsWith("-->"))) {
+                verbatim = createVerbatimComponent();
+                verbatim.setValue(bodyContentString);
+                bodyContent.clearBody();
+            } else {
+                StringBuilder content = new StringBuilder(trimString.length());
+                int sIdx = trimString.indexOf("<!--");
+                int eIdx = trimString.indexOf("-->", sIdx);
+                while (sIdx >= 0 && eIdx >= 0) {
+                    if (sIdx == 0) {
+                        trimString = trimString.substring(eIdx + 3);
+                    } else {
+                        content.append(trimString.substring(0, sIdx));
+                        trimString = trimString.substring(eIdx + 3);
+                    }
+                    sIdx = trimString.indexOf("<!--");
+                    eIdx = trimString.indexOf("-->", sIdx);
+                }
+                content.append(trimString);
+                String result = content.toString();
+                if (result.trim().length() > 0) {
+                    verbatim = createVerbatimComponent();
+                    verbatim.setValue(content.toString());
+                }
+                bodyContent.clearBody();
+            }
+        }
+        return verbatim;
+    }
+
+    /**
+     * <p>Use the {@link Application} instance to create a new component
+     * with the following characteristics.</p>
+     *
+     * <p><code>componentType</code> is
+     * <code>javax.faces.HtmlOutputText</code>.</p>
+     *
+     * <p><code>transient</code> is <code>true</code>.</p>
+     *
+     * <p><code>escape</code> is <code>false</code>.</p>
+     *
+     * <p><code>id</code> is
+     * <code>FacesContext.getViewRoot().createUniqueId()</code></p>
+     *
+     */
+
+    protected UIOutput createVerbatimComponent() {
+        assert(null != getFacesContext());
+        UIOutput verbatim;
+        Application application = getFacesContext().getApplication();
+        verbatim = (UIOutput)
+                application.createComponent("javax.faces.HtmlOutputText");
+        verbatim.setTransient(true);
+        verbatim.getAttributes().put("escape", Boolean.FALSE);
+        verbatim.setId(getFacesContext().getViewRoot().createUniqueId());
+        return verbatim;
+    }
+
+    /**
+     * <p>Add <i>verbatim</i> as a sibling of <i>component</i> in
+     * <i>component</i> in the parent's child list.  <i>verbatim</i> is
+     * added to the list at the position immediatly preceding
+     * <i>component</i>.</p>
+     */
+
+    protected void addVerbatimBeforeComponent(
+            UIComponentClassicTagBase parentTag,
+            UIComponent verbatim,
+            UIComponent component) {
+
+        UIComponent parent = component.getParent();
+        if (null == parent) {
+            return;
+        }
+
+        List<UIComponent> children = parent.getChildren();
+        // EDGE CASE:
+        // Consider CASE 1 or 2 where the component is provided via a
+        // component binding in session or application scope.
+        // The automatically created UIOuput instances for the template text
+        // will already be present.  Check the JSP_CREATED_COMPONENT_IDS attribute,
+        // if present and the number of created components is the same
+        // as the number of children replace at a -1 offset from the current
+        // value of indexOfComponentInParent, otherwise, call add()
+        List createdIds = (List)
+                parent.getAttributes().get(JSP_CREATED_COMPONENT_IDS);
+        int indexOfComponentInParent = children.indexOf(component);
+        boolean replace =
+                (indexOfComponentInParent > 0 && createdIds != null &&
+                        createdIds.size() == children.size());
+        if (replace) {
+            UIComponent oldVerbatim = children.get(indexOfComponentInParent - 1);
+            if (oldVerbatim instanceof UIOutput && oldVerbatim.isTransient()) {
+                children.set((indexOfComponentInParent - 1), verbatim);
+            } else {
+                children.add(indexOfComponentInParent, verbatim);
+            }
+        } else {
+            children.add(indexOfComponentInParent, verbatim);
+        }
+        parentTag.addChild(verbatim);
+    }
+
+    /**
+     * <p>Add <i>verbatim</i> as a sibling of <i>component</i> in
+     * <i>component</i> in the parent's child list.  <i>verbatim</i> is
+     * added to the list at the position immediatly following
+     * <i>component</i>.</p>
+     */
+
+    protected void addVerbatimAfterComponent(UIComponentClassicTagBase parentTag,
+                                             UIComponent verbatim,
+                                             UIComponent component) {
+        int indexOfComponentInParent;
+        UIComponent parent = component.getParent();
+
+        // invert the order of this if and the assignment below.  Since this line is
+        // here, it appears an early return is acceptable/desired if parent is null,
+        // and, if it is null, we should probably check for that before we try to
+        // access it.  2006-03-15 jdl
+        if (null == parent) {
+            return;
+        }
+        List<UIComponent> children = parent.getChildren();
+        indexOfComponentInParent = children.indexOf(component);
+        if (children.size() - 1 == indexOfComponentInParent) {
+            children.add(verbatim);
+        }
+        else {
+            children.add(indexOfComponentInParent + 1, verbatim);
+        }
+        parentTag.addChild(verbatim);
+    }
+
+    // ------------------------------------------------------------ Tag Methods
+
+    /**
+     *
+     * <p>Perform any processing necessary to find (or create) the
+     * {@link UIComponent} instance in the view corresponding to this
+     * tag instance in the page and, if and only if a component was
+     * created, insert it into the tree at the proper location as
+     * expected by the page author.  Secondarily, cause a transient
+     * {@link UIOutput} component to be created and placed in the tree
+     * <b>before</b> the <code>UIComponent</code> instance for
+     * <b>this</b> tag.  The value of this <code>UIOutput</code>
+     * component must include anything covered by <code>CASE 1</code> or
+     * <code>CASE 2</code> in the class description.</p>
+     *
+     * <p>The default implementation, which is intended to be sufficient
+     * for most components, implements this secondary requirement by
+     * calling {@link #getParentUIComponentClassicTagBase}, and calling
+     * {@link #createVerbatimComponentFromBodyContent} on the result.
+     * It then adds the returned component to the tree <b>before</b> the
+     * actual component for <b>this</b> tag instance instance by calling
+     * {@link #addVerbatimBeforeComponent}.</p>
+     *
+     * <p>Before returning, the component is pushed onto the component
+     * stack for this response to enable the {@link
+     * #getParentUIComponentClassicTagBase} method to work properly.</p>
+     *
+     * <p>The flag value to be returned is acquired by calling the
+     * <code>getDoStartValue()</code> method, which tag subclasses may
+     * override if they do not want the default value.</p>
+     *
+     * @throws JspException if an error occurs
+     */
+    public int doStartTag() throws JspException {
+        // make sure that these ivars are reset at the beginning of the
+        // lifecycle for this tag.
+        createdComponents = null;
+        createdFacets = null;
+        UIComponent verbatim = null;
+
+        context = getFacesContext();
+        if (null == context) {
+            // PENDING(edburns): I18N
+            throw new JspException("Can't find FacesContext");
+        }
+
+        List list = (List) context.getAttributes().get(COMPONENT_TAG_STACK_ATTR);
+        if (list != null) {
+            parentTag = ((UIComponentClassicTagBase) list.get(list.size() - 1));
+        } else {
+            parentTag = null;
+        }
+
+        Map<String,UIComponentTagBase> componentIds;
+
+        // If we're not inside of a facet, and if we are inside of a
+        // rendersChildren==true component, stuff any template text or
+        // custom tag output into a transient component.
+        if (null == getFacetName() &&
+                null != parentTag) {
+            Tag p = this.getParent();
+            // If we're not inside a JSP tag or we're not inside
+            // a UIComponentTag flush the buffer
+            if (null == p || !(p instanceof UIComponentTagBase)) {
+                JspWriter out = pageContext.getOut();
+                if (!(out instanceof BodyContent)) {
+                    try {
+                        out.flush();
+                    }
+                    catch (IOException ioe) {
+                        throw new JspException(ioe);
+                    }
+                }
+            }
+            verbatim = parentTag.createVerbatimComponentFromBodyContent();
+        }
+
+        // Locate the UIComponent associated with this UIComponentTag,
+        // creating one if necessary
+        component = findComponent(context);
+
+        // if we have a verbatim component, add it after this component.
+        if (null != verbatim) {
+            addVerbatimBeforeComponent(parentTag,
+                    verbatim, component);
+        }
+
+        Object tagInstance = null;
+        String clientId = null;
+
+        if (component instanceof NamingContainer || (parentTag == null)) {
+            namingContainerChildIds = new HashMap<String, Map<String, UIComponentTagBase>>();
+        }
+
+        if (this.id != null) {
+            clientId = getId();
+
+            UIComponentClassicTagBase temp = (UIComponentClassicTagBase)
+                    getParentNamingContainerTag().getNamingContainerChildIds().get(clientId);
+
+            // According to the JavaDocs for JspIdConsumer tag handlers
+            // that implement this interface are not to be pooled, however
+            // due to a bug in Jasper this is not the case.
+            // Because of this, two tags with the same ID within the same
+            // naming container will not be detected as duplicates.  So
+            // in order to ensure we detect it, if the instance is the same,
+            // verify the JSP IDs are different.  If they are, then continue,
+            // if they aren't, then we're dealing with EVAL_BODY_AGAIN (see
+            // below)
+            //noinspection ObjectEquality
+            if (temp == this
+                    && !this.getJspId().equals(temp.getJspId())) {
+                tagInstance = this;
+            } else if (temp != null
+                    && temp != this
+                    && this.getJspId().equals(temp.getJspId())) {
+                // new instance, same JSP ID - this is the EVAL_BODY_AGAIN case.
+                tagInstance = temp;
+            }
+        }
+
+        // If we have a tag instance, then, most likely, a tag handler
+        // returned EVAL_BODY_AGAIN somewhere.  Make sure the instance
+        // returned is the same as the current instance and if this is the case,
+        // do not perform ID validation as it has already been done.
+        if (tagInstance == null) {
+
+            // only check for id uniqueness if the author has manually given
+            // us an id.
+            if (null != this.id) {
+
+                // assert component ID uniqueness
+                if (clientId != null) {
+                    if (getParentNamingContainerTag().getNamingContainerChildIds().containsKey(clientId)) {
+                        // PENDING i18n
+                        StringWriter writer = new StringWriter(128);
+                        printTree(context.getViewRoot(), clientId, writer, 0);
+                        String msg = "Duplicate component id: '"
+                                + clientId
+                                + "', first used in tag: '"
+                                + getParentNamingContainerTag().getNamingContainerChildIds().get(clientId).getClass().getName()
+
+                                + "'\n"
+                                + writer.toString();
+                        throw new JspException(new IllegalStateException(msg));
+                    } else {
+                        getParentNamingContainerTag().getNamingContainerChildIds().put(clientId, this);
+                    }
+                }
+            }
+
+            // Add to parent's list of created components or facets if needed
+
+            if (parentTag != null) {
+                if (getFacetName() == null) {
+                    parentTag.addChild(component);
+                } else {
+                    parentTag.addFacet(getFacetName());
+                }
+            }
+        }
+
+        // Rendering is deferred until after the tree is completely
+        // created
+
+        // Return the appropriate control value
+        pushUIComponentClassicTagBase();
+        return (getDoStartValue());
+
+    }
+
+    /**
+     *
+     * <p>Perform any processing necessary to handle the content
+     * implications of CASE 3 in the class description.</p>
+     *
+     * <p>The default implementation, which is intended to be sufficient
+     * for most components, calls {@link
+     * #createVerbatimComponentFromBodyContent} on <b>this</b> instance
+     * and adds it as a child of the component for this tag's component
+     * at the <b>end</b> of the child list.  In addition, the following
+     * housekeeping steps are taken.</p>
+     *
+     * <ul>
+     *
+     * <li>Retrieve from the {@link UIComponent} the set of component
+     * ids of child components created by {@link UIComponentTag}
+     * instances the last time this page was processed (if any).
+     * Compare it to the list of children created during this page
+     * processing pass, and remove all children present in the old list
+     * but not the new.  Save the new list as a component attribute so
+     * that it gets saved as part of the component's state.</li>
+     *
+     * <li>Retrieve from the {@link UIComponent} the set of facet names
+     * of facets created by {@link UIComponentTag} instances the last
+     * time this page was processed (if any).  Compare it to the list of
+     * facets created during this page processing pass, and remove all
+     * facets present in the old list but not the new.  Save the new
+     * list as a component attribute so that it gets saved as part of
+     * the component's state.</li>
+     *
+     * <li>Release all references to the component, and pop it from the
+     * component stack for this response, removing the stack if this was
+     * the outermost component.</li> </ul>
+     *
+     * <p>The flag value to be returned is acquired by calling the
+     * <code>getDoEndValue()</code> method, which tag subclasses may
+     * override if they do not want the default value.</p>
+     *
+     * @throws JspException if an error occurs
+     */
+    public int doEndTag() throws JspException
+    {
+        // Remove old children and facets as needed
+        popUIComponentClassicTagBase();
+        removeOldChildren();
+        removeOldFacets();
+
+        //If we are at the end tag of a NamingContainer component, reset the Map of ids
+        // for the NamingContainer tag.
+        if (namingContainerChildIds != null) {
+            namingContainerChildIds = null;
+        }
+
+        // Render the children (if needed) and  end of the component
+        // associated with this tag
+        try
+        {
+            UIComponent verbatim;
+            UIComponentClassicTagBase parentTag = _getParentUIComponentClassicTagBase(
+                    context.getAttributes());
+
+            if (null != (verbatim = this.createVerbatimComponentFromBodyContent())) {
+                component.getChildren().add(verbatim);
+                if (null != parentTag) {
+                    parentTag.addChild(verbatim);
+                }
+            }
+
+            // else, we don't render rendersChildren==true
+            // components here
+
+        } catch (Throwable e) {
+            throw new JspException(e);
+        } finally {
+            component = null;
+            context = null;
+        }
+
+        this.release();
+        return (getDoEndValue());
+
+    }
+
+    /**
+     * <p>Release any resources allocated during the execution of this
+     * tag handler.</p>
+     */
+    public void release() {
+
+        this.parent = null;
+
+        this.id = null;
+        this.facesJspId = null;
+        this.created = false;
+        this.bodyContent = null;
+        this.isNestedInIterator = false;
+        _nextChildIndex = 0;
+    }
+
+    // -------------------------------------------- Support methods for BodyTag
+
+    /**
+     * <p>Return the flag value that should be returned from the
+     * <code>doAfterBody()</code> method when it is called.  Subclasses
+     * may override this method to return the appropriate value.</p>
+     */
+    protected int getDoAfterBodyValue() throws JspException {
+
+        return (SKIP_BODY);
+
+    }
+
+    // -------------------------------------------------------- BodyTag Methods
+
+    /**
+     * <p>Set the <code>bodyContent</code> for this tag handler.  This method
+     * is invoked by the JSP page implementation object at most once per
+     * action invocation, before <code>doInitiBody()</code>.  This method
+     * will not be invoked for empty tags or for non-empty tags whose
+     * <code>doStartTag()</code> method returns <code>SKIP_BODY</code> or
+     * <code>EVAL_BODY_INCLUDE</code>.</p>
+     *
+     * @param bodyContent The new <code>BodyContent</code> for this tag
+     */
+    public void setBodyContent(BodyContent bodyContent) {
+
+        this.bodyContent = bodyContent;
+
+    }
+
+    /**
+     * <p>Get the <code>JspWriter</code> from our <code>BodyContent</code>.
+     * </p>
+     */
+    public JspWriter getPreviousOut() {
+
+        return (this.bodyContent.getEnclosingWriter());
+
+    }
+
+    public BodyContent getBodyContent() {
+
+        return (this.bodyContent);
+
+    }
+
+
+
+    /**
+     * <p>Prepare for evaluation of the body.  This method is invoked by the
+     * JSP page implementation object after <code>setBodyContent()</code>
+     * and before the first time the body is to be evaluated.  This method
+     * will not be invoked for empty tags or for non-empty tags whose
+     * <code>doStartTag()</code> method returns <code>SKIP_BODY</code>
+     * or <code>EVAL_BODY_INCLUDE</code>.</p>
+     *
+     * @throws JspException if an error is encountered
+     */
+    public void doInitBody() throws JspException {
+
+        // Default implementation does nothing
+
+    }
+
+    /**
+     *
+     * <p>Perform any processing necessary to handle the content
+     * implications of CASE 4 in the class description.</p>
+     *
+     * <p>Return result from {@link #getDoAfterBodyValue}</p>
+     * @throws JspException if an error is encountered
+     */
+    public int doAfterBody() throws JspException {
+
+        UIComponent verbatim;
+        UIComponentClassicTagBase parentTag = _getParentUIComponentClassicTagBase(context.getAttributes());
+
+        // if we are the root tag, or if we are inside of a
+        // rendersChildren==true component
+        //noinspection ObjectEquality
+        if (this == parentTag ||
+                (null != parentTag &&
+                        parentTag.getComponentInstance().getRendersChildren())) {
+            // stuff the template text or custom tag output into a
+            // transient component
+            if (null != (verbatim = this.createVerbatimComponentFromBodyContent())) {
+                // EDGE CASE:
+                // Consider CASE 4 where the component is provided via a
+                // component binding in session or application scope.
+                // The verbatim instance will already be present.  If we
+                // add again, the user will get duplicate component ID
+                // errors.  Check the JSP_CREATED_COMPONENT_IDS attribute.  If it is not present, we
+                // need to add the new verbatim child.  If it is present, assume it is a
+                // List and check its size.  If the size of the list is equal to the
+                // number of children currently in the component, replace the replace
+                // the child of this component at the index derived as follows.  If
+                // indexOfChildInParent is 0, replace the child at the 0th index with
+                // the new verbatim child.  Otherwise, replace the child at the
+                // (indexOfChildInParent - 1)th index with the new verbatim child.
+                List createdIds = (List)
+                        component.getAttributes().get(JSP_CREATED_COMPONENT_IDS);
+                if (createdIds != null) {
+                    int listIdx = component.getChildCount();
+                    if (createdIds.size() == listIdx) {
+                        component.getChildren().set((listIdx - 1), verbatim);
+                    } else {
+                        component.getChildren().add(verbatim);
+                    }
+                } else {
+                    component.getChildren().add(verbatim);
+                }
+                parentTag.addChild(verbatim);
+            }
+        }
+
+        return (getDoAfterBodyValue());
+
+    }
+
+    // ----------------------------------------------- Methods relating to Id
+
+    /**
+     * <p>Set the component identifier for our component.  If the
+     * argument begins with {@link
+     * UIViewRoot#UNIQUE_ID_PREFIX} throw an
+     * <code>IllegalArgumentException</code></p>
+     *
+     * @param id The new component identifier.  This may not start with
+     * {@link UIViewRoot#UNIQUE_ID_PREFIX}.
+     *
+     * @throws IllegalArgumentException if the argument is
+     * non-<code>null</code> and starts with {@link
+     * UIViewRoot#UNIQUE_ID_PREFIX}.
+     */
+    public void setId(String id) {
+        if (null != id && id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
+            throw new IllegalArgumentException();
+        }
+
+        this.id = id;
+
+    }
+
+    /**
+     * <p>Return the <code>id</code> value assigned by the page author.</p>
+     */
+    protected String getId() {
+
+        return (id);
+
+    }
+
+    /**
+     * <p>If this method has been called before on this tag's useful
+     * lifetime (before {@link #release} was called), return the
+     * previously returned value.  Otherwise, if {@link #getJspId}
+     * returns non-<code>null</code>, prepend {@link #UNIQUE_ID_PREFIX}
+     * to the <code>jspId</code> and return the result.</p>
+     */
+
+    protected String getFacesJspId() {
+        if (null == facesJspId) {
+            if (null != jspId) {
+                facesJspId = UNIQUE_ID_PREFIX + jspId;
+                // if this tag happens to be nested within <c:forEach>,
+                //  jspId will be the same for each iteration. So it is
+                // transformed into a unique "id" by appending a counter which
+                // gets stored in request scope with jspId as the key for use
+                // during the next iteration.
+                if (isDuplicateId(facesJspId)) {
+                    facesJspId = generateIncrementedId(facesJspId);
+                }
+            } else {
+                // jspId will be null if we're running in a container
+                // that doesn't support JspIdConsumer
+                facesJspId = getFacesContext().getViewRoot().createUniqueId();
+            }
+        }
+        return facesJspId;
+    }
+
+    /**
+     * Returns true if a component already exists with the same
+     * <code>id</code>. This will be the case if this tag is
+     * nested within <code><c:forEach></code> tag or any other JSTL loop tag
+     * or if the page has components with the same <code>Id</code>.
+     *
+     * @param componentId <code>id</code> to be looked up for possible
+     * duplication.
+     * @return true if this nested with <code>facesJspId</code> is duplicate.
+     */
+    private boolean isDuplicateId(String componentId) {
+        boolean result = false;
+        if (parentTag != null) {
+
+            if (parentTag.isNestedInIterator) {
+                return true;
+            }
+            List childComponents = parentTag.createdComponents;
+            // PENDING: Need to analyze the impact of this look up on pages
+            // with several levels of nesting.
+            if (childComponents != null) {
+                result = childComponents.contains(componentId);
+                if (result && (!isNestedInIterator)) {
+                    return true;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /*
+     * Appends a counter to the passed in <code>id</code> and stores the
+     * <code>id</code> and counter information in request scope.
+     *
+     * @return String <code>id</code> with a counter appended to it.
+     */
+    private String generateIncrementedId (String componentId) {
+        Integer serialNum = (Integer) context.getAttributes().get(componentId);
+        if (null == serialNum) {
+            serialNum = 1;
+        } else {
+            serialNum = serialNum.intValue() + 1;
+        }
+        context.getAttributes().put(componentId, serialNum);
+        componentId = componentId + UNIQUE_ID_PREFIX + serialNum.intValue();
+        return componentId;
+    }
+
+    /**
+     * Returns the <code>List</code> of {@link UIComponent} ids created or
+     * located by nested {@link UIComponentTag}s while processing the current
+     * request.</p>
+     */
+    protected List<String> getCreatedComponents() {
+        return createdComponents;
+    }
+
+    /**
+     * <p>Create the component identifier to be used for this component.</p>
+     */
+    private String createId(FacesContext context)
+            throws JspException {
+
+        if (this.id == null) {
+            return getFacesJspId();
+        } else {
+            // if this tag happens to be nested within <c:forEach>, jspId
+            // will be the same for each iteration. So it is
+            // transformed into a unique "id" by appending a counter which gets
+            // stored in request scope with jspId as the key for use during next
+            // iteration.
+            if (isDuplicateId(this.id)) {
+                if (!isSpecifiedIdUnique(this.id)) {
+                    if (isNestedInIterator) {
+                        this.id = generateIncrementedId(this.id);
+                    } else {
+                        StringWriter writer = new StringWriter(128);
+                        printTree(context.getViewRoot(), this.id, writer, 0);
+                        String msg = "Component ID '"
+                                + this.id
+                                + "' has already been used"
+                                + " in the view.\n"
+                                + "See below for the view up to the point of"
+                                + " the detected error.\n"
+                                + writer.toString();
+                        throw new JspException(msg);
+                    }
+                }
+            }
+            return (this.id);
+        }
+
+    }
+
+
+    /**
+     * @param id the component ID
+     * @return <code>true</code> if this ID is unique within the closest naming
+     *  container, otherwise <code>false</code>
+     */
+    private boolean isSpecifiedIdUnique(String id) {
+
+        UIComponentClassicTagBase containerTag = getParentNamingContainerTag();
+        UIComponent c = containerTag.component.findComponent(id);
+        if (c == null) {
+            return true;
+        } else {
+            UIComponent parent = c.getParent();
+            if (parent.equals(this.parentTag.component)) {
+                // the component we found has the same parent, If we find
+                // a sibling with the same ID, return true so that the
+                // id is incremented, otherwise, return false.
+                List<String> created = this.parentTag.createdComponents;
+                return !(created != null && created.contains(id));
+            } else {
+                return false;
+            }
+        }
+
+    }
+
+
+    /**
+     * @return the parent tag that represents the closest NamingContainer
+     *  component.
+     */
+    private UIComponentClassicTagBase getParentNamingContainerTag() {
+        if (this.parentTag == null) {
+            return this;
+        }
+        UIComponentClassicTagBase parent = this.parentTag;
+        while (parent != null) {
+            if (parent.component instanceof NamingContainer
+                    || parent.parentTag == null && parent.component instanceof UIViewRoot) {
+                return parent;
+            }
+            parent = parent.parentTag;
+        }
+        return null;
+
+    }
+
+
+    // ------------------------------------------------   JspIdConsumer Methods
+
+
+    /**
+     * <p>Defined on {@link JspIdConsumer}.  This method is called by
+     * the container before {@link #doStartTag}.  The argument is
+     * guaranteed to be unique within the page.</p>
+     *
+     * <p>IMPLEMENTATION NOTE:  This method will detect where we
+     * are in an include and assign a unique ID for each include
+     * in a particular 'logical page'.  This allows us to avoid
+     * possible duplicate ID situations for included pages that
+     * have components without explicit IDs.</p>
+     *
+     * @param id the container generated id for this tag, guaranteed to
+     * be unique within the page.
+     */
+
+    public void setJspId(String id) {
+        // reset JSP ID here instead of release as we may need
+        // to check the ID after the tag has been used
+        this.jspId = null;
+
+        Integer pcId = (Integer)
+                pageContext.getAttribute(JAVAX_FACES_PAGECONTEXT_MARKER,
+                        PageContext.PAGE_SCOPE);
+        if (pcId == null) {
+            if (null == context) {
+                context = FacesContext.getCurrentInstance();
+            }
+            AtomicInteger aInt = (AtomicInteger) context.getAttributes().get(JAVAX_FACES_PAGECONTEXT_COUNTER);
+            if (aInt == null) {
+                aInt = new AtomicInteger();
+                context.getAttributes().put(JAVAX_FACES_PAGECONTEXT_COUNTER, aInt);
+            }
+
+            pcId = aInt.incrementAndGet();
+            pageContext.setAttribute(JAVAX_FACES_PAGECONTEXT_MARKER, pcId);
+        }
+        if (pcId.intValue() > 1) {
+            StringBuilder builder = new StringBuilder(id.length() + 3);
+            builder.append(id).append("pc").append(pcId);
+            jspId = builder.toString();
+        } else {
+            jspId = id;
+        }
+
+        facesJspId = null;
+        updatePreviousJspIdAndIteratorStatus(jspId);
+    }
+
+    /**
+     * <p>Called from {@link #setJspId} to update the value saved for
+     * the previous call to {@link #setJspId} for this component <b>on
+     * this request</b>.  If this method is presented with the same
+     * argument <code>id</code> for the same tag instance more than once
+     * on the same request, then we know that the tag instance lies
+     * inside an iterator tag, such as <code>c:forEach</code>.  If so,
+     * we set the <code>isNestedInIterator</code> ivar to
+     * <code>true</code> otherwise, we set it to <code>false</code>.</p>
+     *
+     * <p>The implementation for this method stores a Map from tag
+     * instance to id String as a request scoped attribute.  This map
+     * contains the value used as the previousJspId and compared with
+     * the argument <code>id</code>.
+     *
+     * @param id the id to be compared with the previous id, if any, for
+     * this tag instance on this request.
+     */
+
+    private void updatePreviousJspIdAndIteratorStatus(String id)
+    {
+        Set<String> previousJspIdSet = TypedCollections.dynamicallyCastSet((Set)
+                pageContext.getAttribute(PREVIOUS_JSP_ID_SET, PageContext.PAGE_SCOPE), String.class);
+
+        if (null == previousJspIdSet)
+        {
+            previousJspIdSet = new HashSet<String>();
+
+            //noinspection CollectionWithoutInitialCapacity
+            pageContext.setAttribute(PREVIOUS_JSP_ID_SET, previousJspIdSet, PageContext.PAGE_SCOPE);
+        }
+
+        // detect the iterator case, since add will return true if the collection already
+        // contains the id
+        if (previousJspIdSet.add(id))
+        {
+            // id wasn't in Set, so we aren't nested yet
+            isNestedInIterator = false;
+        }
+        else
+        {
+            // the Set didn't change, so we are nested
+            if (log.isLoggable(Level.FINEST))
+            {
+                log.log(Level.FINEST, "Id " + id + " is nested within an iterating tag.");
+            }
+
+            isNestedInIterator = true;
+        }
+    }
+
+    public String getJspId() {
+        return jspId;
+    }
+
+    // ------------------------------------------------------- Abstract methods
+
+    /**
+     * <p>Override properties and attributes of the specified component,
+     * if the corresponding properties of this tag handler instance were
+     * explicitly set.  This method must be called <strong>ONLY</strong>
+     * if the specified {@link UIComponent} was in fact created during
+     * the execution of this tag handler instance, and this call will occur
+     * <strong>BEFORE</strong> the {@link UIComponent} is added to
+     * the view.</p>
+     *
+     * <p>Tag subclasses that want to support additional set properties
+     * must ensure that the base class <code>setProperties()</code>
+     * method is still called.  A typical implementation that supports
+     * extra properties <code>foo</code> and <code>bar</code> would look
+     * something like this:</p>
+     * <pre>
+     * protected void setProperties(UIComponent component) {
+     *   super.setProperties(component);
+     *   if (foo != null) {
+     *     component.setAttribute("foo", foo);
+     *   }
+     *   if (bar != null) {
+     *     component.setAttribute("bar", bar);
+     *   }
+     * }
+     * </pre>
+     *
+     * <p>The default implementation overrides the following properties:</p>
+     * <ul>
+     * <li><code>rendered</code> - Set if a value for the
+     *     <code>rendered</code> property is specified for
+     *     this tag handler instance.</li>
+     * <li><code>rendererType</code> - Set if the <code>getRendererType()</code>
+     *     method returns a non-null value.</li>
+     * </ul>
+     *
+     * @param component {@link UIComponent} whose properties are to be
+     *  overridden
+     */
+    protected abstract void setProperties(UIComponent component);
+
+
+    /**
+     * <p>Create and return a new child component of the type returned
+     * by calling <code>getComponentType()</code>.  If this {@link
+     * UIComponentTag} has a non-null <code>binding</code> attribute,
+     * this is done by call {@link Application#createComponent} with the
+     * expression created for the <code>binding</code> attribute, and
+     * the expression will be stored on the component.  Otherwise,
+     * {@link Application#createComponent} is called with only the
+     * component type.  Finally, initialize the components id and other
+     * properties.  </p>
+     * @param context {@link FacesContext} for the current request
+     * @param newId id of the component
+     */
+
+    protected abstract UIComponent createComponent(FacesContext context,
+                                                   String newId) throws JspException;
+
+    /**
+     * <p>Return <code>true</code> if this component has a
+     * non-<code>null</code> binding attribute.  This method is
+     * necessary to allow subclasses that expose the
+     * <code>binding</code> property as an Faces 1.1 style EL property
+     * as well as subclasses that expose it as an EL API property.</p>
+     */
+
+    protected abstract boolean hasBinding();
+
+    // --------------------------------------------------------- Properties
+
+    /**
+     * <p>Return the {@link UIComponent} instance that is associated with
+     * this tag instance.  This method is designed to be used by tags nested
+     * within this tag, and only returns useful results between the
+     * execution of <code>doStartTag()</code> and <code>doEndTag()</code>
+     * on this tag instance.</p>
+     */
+    public UIComponent getComponentInstance() {
+
+        return (this.component);
+
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if we dynamically created a new component
+     * instance during execution of this tag.  This method is designed to be
+     * used by tags nested within this tag, and only returns useful results
+     * between the execution of <code>doStartTag()</code> and
+     * <code>doEndTag()</code> on this tag instance.</p>
+     */
+    public boolean getCreated() {
+
+        return (this.created);
+
+    }
+
+    private Map getNamingContainerChildIds() {
+        return (this.namingContainerChildIds);
+    }
+
+    protected FacesContext getFacesContext() {
+
+        if (context == null) {
+            if (null == (context = (FacesContext)
+                    pageContext.getAttribute(CURRENT_FACES_CONTEXT))) {
+                context = FacesContext.getCurrentInstance();
+
+                if (context == null) { // PENDING - i18n
+                    throw new RuntimeException("Cannot find FacesContext");
+                }
+
+                // store the current FacesContext for use by other
+                // UIComponentTags in the same page
+                pageContext.setAttribute(CURRENT_FACES_CONTEXT, context);
+            }
+        }
+
+        return (context);
+
+    }
+
+
+    /**
+     * <p>Return the facet name that we should be stored under, if any;
+     * otherwise, return null (indicating that we will be a child component).
+     * </p>
+     */
+    protected String getFacetName() {
+
+        Tag parent = getParent();
+        if (parent instanceof FacetTag) {
+            return (((FacetTag) parent).getName());
+        } else {
+            return (null);
+        }
+
+    }
+
+
+    private static FacesContext getFacesContext(PageContext pageContext) {
+
+        FacesContext context = (FacesContext)
+                pageContext.getAttribute(CURRENT_FACES_CONTEXT);
+        if (context == null) {
+            context = FacesContext.getCurrentInstance();
+            if (context == null) {
+                throw new RuntimeException("Cannot find FacesContext");
+            } else {
+                pageContext.setAttribute(CURRENT_FACES_CONTEXT, context);
+            }
+        }
+
+        return (context);
+
+    }
+
+    private static void printTree(UIComponent root,
+                                  String duplicateId,
+                                  Writer out,
+                                  int curDepth) {
+        if (null == root) {
+            return;
+        }
+
+        if (duplicateId.equals(root.getId())) {
+            indentPrintln(out, "+id: " + root.getId() + "  <===============",
+                    curDepth);
+        } else {
+            indentPrintln(out, "+id: " + root.getId(), curDepth);
+        }
+        //noinspection ObjectToString
+        indentPrintln(out, " type: " + root.toString(), curDepth);
+
+        curDepth++;
+        // print all the facets of this component
+        for (UIComponent uiComponent : root.getFacets().values()) {
+            printTree(uiComponent, duplicateId, out, curDepth);
+        }
+        // print all the children of this component
+        for (UIComponent uiComponent : root.getChildren()) {
+            printTree(uiComponent, duplicateId, out, curDepth);
+        }
+
+    }
+
+    private static void indentPrintln(Writer out, String str, int curDepth) {
+
+        // handle indentation
+        try {
+            for (int i = 0; i < curDepth; i++) {
+                out.write("  ");
+            }
+            out.write(str + '\n');
+        } catch (IOException ex) {
+            // ignore
+        }
+    }
+
+}
diff --git a/javax/faces/webapp/UIComponentELTag.java b/javax/faces/webapp/UIComponentELTag.java
new file mode 100644
index 0000000..0be04d4
--- /dev/null
+++ b/javax/faces/webapp/UIComponentELTag.java
@@ -0,0 +1,235 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+
+import javax.el.ELException;
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+
+/**
+ * <p>{@link UIComponentELTag} specializes its superclass to allow for
+ * properties that take their values from EL API expressions.</p>
+ *
+ * <p>This tag is designed for use with Faces version 1.2 and JSP
+ * version 2.1 containers.</p>
+ *
+ */
+
+public abstract class UIComponentELTag extends UIComponentClassicTagBase implements Tag {
+
+
+    // ------------------------------------------------------------- Attributes
+
+
+    /**
+     * <p>The value binding expression (if any) used to wire up this component
+     * to a {@link UIComponent} property of a JavaBean class.</p>
+     */
+    private ValueExpression binding = null;
+
+
+    /**
+     * <p>Set the value expression for our component.</p>
+     *
+     * @param binding The new value expression
+     *
+     * @throws JspException if an error occurs
+     */
+    public void setBinding(ValueExpression binding) throws JspException {
+	this.binding = binding;
+    }
+
+    protected boolean hasBinding() {
+	return null != binding;
+    }
+
+    /**
+     * <p>An override for the rendered attribute associated with our
+     * {@link UIComponent}.</p>
+     */
+    private ValueExpression rendered = null;
+
+
+    /**
+     * <p>Set an override for the rendered attribute.</p>
+     *
+     * @param rendered The new value for rendered attribute
+     */
+    public void setRendered(ValueExpression rendered) {
+        this.rendered = rendered;
+    }
+
+    /**
+     * <p>Return the {@link ELContext} for the {@link FacesContext} for
+     * this request.</p>
+     *
+     * <p>This is a convenience for
+     * <code>getFacesContext().getELContext()</code>.</p>
+     */
+
+    protected ELContext getELContext() {
+	FacesContext fc = getFacesContext();
+	ELContext result = null;
+	if (null != fc) {
+	    result = fc.getELContext();
+	}
+	return result;
+    }
+
+
+    // ------------------------------------------------------------ Tag Methods
+
+
+
+    /**
+     * <p>Release any resources allocated during the execution of this
+     * tag handler.</p>
+     */
+    public void release() {
+
+	this.binding = null;
+        this.rendered = null;
+	super.release();
+    }
+
+
+    // ------------------------------------------------------- Protected Methods
+
+    /**
+     * <p>Override properties and attributes of the specified component,
+     * if the corresponding properties of this tag handler instance were
+     * explicitly set.  This method must be called <strong>ONLY</strong>
+     * if the specified {@link UIComponent} was in fact created during
+     * the execution of this tag handler instance, and this call will occur
+     * <strong>BEFORE</strong> the {@link UIComponent} is added to
+     * the view.</p>
+     *
+     * <p>Tag subclasses that want to support additional set properties
+     * must ensure that the base class <code>setProperties()</code>
+     * method is still called.  A typical implementation that supports
+     * extra properties <code>foo</code> and <code>bar</code> would look
+     * something like this:</p>
+     * <pre>
+     * protected void setProperties(UIComponent component) {
+     *   super.setProperties(component);
+     *   if (foo != null) {
+     *     component.setAttribute("foo", foo);
+     *   }
+     *   if (bar != null) {
+     *     component.setAttribute("bar", bar);
+     *   }
+     * }
+     * </pre>
+     *
+     * <p>The default implementation overrides the following properties:</p>
+     * <ul>
+     * <li><code>rendered</code> - Set if a value for the
+     *     <code>rendered</code> property is specified for
+     *     this tag handler instance.</li>
+     * <li><code>rendererType</code> - Set if the <code>getRendererType()</code>
+     *     method returns a non-null value.</li>
+     * </ul>
+     *
+     * @param component {@link UIComponent} whose properties are to be
+     *  overridden
+     */
+    protected void setProperties(UIComponent component) {
+        // The "id" property is explicitly set when components are created
+        // so it does not need to be set here
+        if (rendered != null) {
+            if (rendered.isLiteralText()) {
+                try {
+                    component.setRendered(Boolean.valueOf(rendered.getExpressionString())
+                            .booleanValue());
+                } catch (ELException e) {
+                    throw new FacesException(e);
+                }
+            } else {
+                component.setValueExpression("rendered", rendered);
+            }
+        }
+        if (getRendererType() != null) {
+            component.setRendererType(getRendererType());
+        }
+
+    }
+
+
+    /**
+     * <p>Create and return a new child component of the type returned by
+     * calling <code>getComponentType()</code>.  If this {@link UIComponentELTag}
+     * has a non-null <code>binding</code> attribute, this is done by
+     * call {@link Application#createComponent} with the {@link ValueExpression}
+     * created for the <code>binding</code> attribute, and the
+     * {@link ValueExpression} will be stored on the component.  Otherwise,
+     * {@link Application#createComponent} is called with only 
+     * the component type.  Finally, initialize the components id
+     * and other properties.
+     * </p>
+     * @param context {@link FacesContext} for the current request
+     * @param newId id of the component
+     */
+    protected UIComponent createComponent(FacesContext context, String newId) throws JspException {
+        UIComponent component;
+        Application application = context.getApplication();
+        if (binding != null) {
+            component = application.createComponent(binding, context,
+                                                    getComponentType());
+	    component.setValueExpression("binding", binding);
+        } else {
+            component = application.createComponent(getComponentType());
+        }
+
+        component.setId(newId);
+        setProperties(component);
+
+        return component;
+    }
+
+}
diff --git a/javax/faces/webapp/UIComponentTag.java b/javax/faces/webapp/UIComponentTag.java
new file mode 100644
index 0000000..49b59e8
--- /dev/null
+++ b/javax/faces/webapp/UIComponentTag.java
@@ -0,0 +1,301 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.Tag;
+
+
+/**
+ * <p>{@link UIComponentTag} is the base class for all JSP custom
+ * actions that correspond to user interface components in a page that is
+ * rendered by JavaServer Faces.</p>
+ *
+ * <p>In this version of the specification, <code>UIComponentTag</code>
+ * extends {@link UIComponentClassicTagBase} to add properties that use
+ * the Faces 1.1 Expression Language.</p>
+ *
+ * @deprecated Use of this class has been replaced with {@link
+ * UIComponentELTag}, which extends
+ * <code>UIComponentClassicTagBase</code> to add properties that use the
+ * EL API introduced as part of JSP 2.1.
+ */
+
+public abstract class UIComponentTag extends UIComponentClassicTagBase implements Tag {
+
+    // ------------------------------------------------------------- Properties
+
+    /**
+     * <p>The value binding expression (if any) used to wire up this component
+     * to a {@link UIComponent} property of a JavaBean class.</p>
+     */
+    private String binding = null;
+
+
+    /**
+     * <p>Set the value binding expression for our component.</p>
+     *
+     * @param binding The new value binding expression
+     *
+     * @throws IllegalArgumentException if the specified binding is not a
+     * valid value binding expression.
+     */
+    public void setBinding(String binding) throws JspException {
+	if (!isValueReference(binding)) {
+	    throw new IllegalArgumentException();
+        }
+
+	this.binding = binding;
+    }
+
+    protected boolean hasBinding() {
+	return null != binding;
+    }
+
+
+
+    /**
+     * <p>An override for the rendered attribute associated with our
+     * {@link UIComponent}.</p>
+     */
+    private String rendered = null;
+
+
+    /**
+     * <p>Set an override for the rendered attribute.</p>
+     *
+     * @param rendered The new value for rendered attribute
+     */
+    public void setRendered(String rendered) {
+
+        this.rendered = rendered;
+
+    }
+
+
+    /**
+     * <p>Flag indicating whether or not rendering should occur.</p>
+     */
+    private boolean suppressed = false;
+
+
+    protected boolean isSuppressed() {
+
+        return (suppressed);
+
+    }
+
+
+    /**
+     * <p>Return <code>true</code> if the specified value conforms to the
+     * syntax requirements of a value binding expression.  Such expressions
+`    * may be used on most component tag attributes to signal a desire for
+     * deferred evaluation of the attribute or property value to be set on
+     * the underlying {@link UIComponent}.</p>
+     *
+     * @param value The value to evaluate
+     *
+     * @throws NullPointerException if <code>value</code> is
+     *  <code>null</code>
+     */
+    public static boolean isValueReference(String value) {
+
+	if (value == null) {
+	    throw new NullPointerException();
+	}
+	int start = value.indexOf("#{");
+	if ((start != -1) && (start < value.indexOf('}', start))) {
+            return true;
+        }
+        return false;
+
+    }
+
+    // ------------------------------------------ Methods from Tag
+
+    /**
+     * <p>Release any resources allocated during the execution of this
+     * tag handler.</p>
+     */
+    public void release() {
+	
+	this.suppressed = false;
+	this.binding = null;
+        this.rendered = null;
+	super.release();
+    }
+
+
+    // ----------------  Concrete Implementations of methods from superclass
+
+    /**
+     * @param component {@inheritDoc} 
+     */
+    protected void setProperties(UIComponent component) {
+        // The "id" property is explicitly set when components are created
+        // so it does not need to be set here
+        if (rendered != null) {
+	    if (isValueReference(rendered)) {
+		ValueBinding vb =
+		    getFacesContext().getApplication().createValueBinding(rendered);
+		component.setValueBinding("rendered", vb);
+	    } else {
+		component.setRendered(Boolean.valueOf(rendered).booleanValue());
+	    }
+        }
+	if (getRendererType() != null) {
+	    component.setRendererType(getRendererType());
+	}
+
+    }
+
+
+
+
+
+    /**
+     * <p>Implement <code>createComponent</code> using Faces 1.1 EL
+     * API.</p>
+     * 
+     * @param context {@inheritDoc} 
+     * @param newId {@inheritDoc}
+     */
+    protected UIComponent createComponent(FacesContext context, String newId) {
+        UIComponent component;
+        Application application = context.getApplication();
+        if (binding != null) {
+            ValueBinding vb = application.createValueBinding(binding);
+            component = application.createComponent(vb, context,
+                                                    getComponentType());
+	    component.setValueBinding("binding", vb);
+        } else {
+            component = application.createComponent(getComponentType());
+        }
+
+        component.setId(newId);
+        setProperties(component);
+
+        return component;
+    }
+
+
+    // Tag tree navigation
+
+    /**
+     * <p>Locate and return the nearest enclosing {@link UIComponentTag}
+     * if any; otherwise, return <code>null</code>.</p>
+     *
+     * @param context <code>PageContext</code> for the current page
+     */
+    public static UIComponentTag getParentUIComponentTag(PageContext context) {
+
+        UIComponentClassicTagBase result =
+             getParentUIComponentClassicTagBase(context);
+        if (!(result instanceof UIComponentTag)) {
+            return new UIComponentTagAdapter(result);
+        }
+        return ((UIComponentTag) result);
+
+    }
+
+
+    // --------------------------------------------------------- Private Classes
+
+
+    /**
+     * This adatper exposes a UIComponentClassicTagBase as a UIComponentTag
+     * for 1.1 component libraries that rely on UIComponent.getParentUIComponentTag().
+     *
+     * This will work for most use cases, but there are probably some edge
+     * cases out there that we're not aware of.
+     */
+    private static class UIComponentTagAdapter extends UIComponentTag {
+
+        UIComponentClassicTagBase classicDelegate;
+
+        public UIComponentTagAdapter(UIComponentClassicTagBase classicDelegate) {
+
+            this.classicDelegate = classicDelegate;
+
+        }
+
+        public String getComponentType() {
+            return classicDelegate.getComponentType();
+        }
+
+        public String getRendererType() {
+            return classicDelegate.getRendererType();
+        }
+
+        public int doStartTag() throws JspException {
+            throw new IllegalStateException();
+        }
+
+        public int doEndTag() throws JspException {
+            throw new IllegalStateException();
+        }
+
+        public UIComponent getComponentInstance() {
+            return classicDelegate.getComponentInstance();
+        }
+
+        public boolean getCreated() {
+            return classicDelegate.getCreated();
+        }
+
+        public Tag getParent() {
+            return classicDelegate.getParent();
+        }
+
+        public void setParent(Tag parent) {
+            throw new IllegalStateException();
+        }
+                
+    }
+
+
+}
diff --git a/javax/faces/webapp/UIComponentTagBase.java b/javax/faces/webapp/UIComponentTagBase.java
new file mode 100644
index 0000000..7a376ca
--- /dev/null
+++ b/javax/faces/webapp/UIComponentTagBase.java
@@ -0,0 +1,167 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import javax.el.ELContext;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.servlet.jsp.tagext.JspTag;
+
+import java.util.logging.Logger;
+
+/**
+ * <p><strong><code>UIComponentTagBase</code></strong> is the base class
+ * for all JSP tags that correspond to a {@link
+ * javax.faces.component.UIComponent} instance in the view.  This base
+ * class allows a single view to be described in a JSP page consisting
+ * of both {@link UIComponentELTag} and {@link UIComponentTag}
+ * instances.</p>
+ */
+
+public abstract class UIComponentTagBase extends Object implements JspTag {
+    
+    protected static final Logger log = Logger.getLogger("javax.faces.webapp", 
+            "javax.faces.LogStrings");
+
+    /**
+     * <p>Return the {@link FacesContext} instance for the current
+     * request.  This value will be non-<code>null</code> only from the
+     * beginning of <code>doStartTag()</code> through the end of
+     * <code>doEndTag()</code> for each tag instance.</p>
+     */
+    protected abstract FacesContext getFacesContext();
+
+    /**
+     * <p>Return the {@link ELContext} for the {@link FacesContext} for
+     * this request.</p>
+     *
+     * <p>This is a convenience for
+     * <code>getFacesContext().getELContext()</code>.</p>
+     */
+
+    protected ELContext getELContext() {
+	FacesContext fc = getFacesContext();
+	ELContext result = null;
+	if (null != fc) {
+	    result = fc.getELContext();
+	}
+	return result;
+    }
+
+
+    /**
+     * <p>Add the component identifier of the specified {@link UIComponent}
+     * to the list of component identifiers created or located by nested
+     * {@link UIComponentTag}s processing this request.</p>
+     *
+     * @param child New child whose identifier should be added
+     */
+    protected abstract void addChild(UIComponent child);
+
+    /**
+     * <p>Add the facet name of the specified facet to the list of
+     * facet names created or located by nested {@link UIComponentTag}s
+     * processing this request.</p>
+     *
+     * @param name Facet name to be added
+     */
+    protected abstract void addFacet(String name);
+
+    /**
+     * <p>Set the component identifier for the component corresponding
+     * to this tag instance.  If the argument begins with {@link
+     * javax.faces.component.UIViewRoot#UNIQUE_ID_PREFIX} throw an
+     * <code>IllegalArgumentException</code></p>
+     *
+     * @param id The new component identifier.  This may not start with
+     * {@link javax.faces.component.UIViewRoot#UNIQUE_ID_PREFIX}.
+     *
+     * @throws IllegalArgumentException if the argument is
+     * non-<code>null</code> and starts with {@link
+     * javax.faces.component.UIViewRoot#UNIQUE_ID_PREFIX}.
+     */
+    public abstract void setId(String id);
+
+    /**
+     * <p>Return the component type for the component that is or will be
+     * bound to this tag.  This value can be passed to
+     * {@link javax.faces.application.Application#createComponent} to create
+     * the {@link UIComponent} instance for this tag.  Subclasses must
+     * override this method to return the appropriate value.</p>
+     */
+    public abstract String getComponentType();
+
+    /**
+     * <p>Return the <code>rendererType</code> property that selects the
+     * <code>Renderer</code> to be used for encoding this component, or
+     * <code>null</code> to ask the component to render itself directly.
+     * Subclasses must override this method to return the appropriate value.
+     * </p>
+     */
+    public abstract String getRendererType();
+
+    /**
+     * <p>Return the {@link UIComponent} instance that is associated with
+     * this tag instance.  This method is designed to be used by tags nested
+     * within this tag, and only returns useful results between the
+     * execution of <code>doStartTag()</code> and <code>doEndTag()</code>
+     * on this tag instance.</p>
+     */
+    public abstract UIComponent getComponentInstance();
+
+    /**
+     * <p>Return <code>true</code> if we dynamically created a new component
+     * instance during execution of this tag.  This method is designed to be
+     * used by tags nested within this tag, and only returns useful results
+     * between the execution of <code>doStartTag()</code> and
+     * <code>doEndTag()</code> on this tag instance.</p>
+     */
+    public abstract boolean getCreated();
+
+    /**
+     * <p>Return the index of the next child to be added as a child of
+     * this tag.  The default implementation maintains a list of created
+     * components and returns the size of the list.</p>
+     */
+
+    protected abstract int getIndexOfNextChildTag();
+
+}
diff --git a/javax/faces/webapp/ValidatorELTag.java b/javax/faces/webapp/ValidatorELTag.java
new file mode 100644
index 0000000..7804aa7
--- /dev/null
+++ b/javax/faces/webapp/ValidatorELTag.java
@@ -0,0 +1,148 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.validator.Validator;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+
+/**
+ * <p><strong>ValidatorELTag</strong> is a base class for all JSP custom actions
+ * that create and register a <code>Validator</code> instance on the
+ * {@link EditableValueHolder} associated with our most immediate surrounding instance
+ * of a tag whose implementation class is a subclass of {@link UIComponentTag}.
+ * To avoid creating duplicate instances when a page is redisplayed,
+ * creation and registration of a {@link Validator} occurs
+ * <strong>only</strong> if the corresponding {@link UIComponent} was
+ * created (by the owning {@link UIComponentTagBase}) during the execution of the
+ * current page.</p>
+ *
+ * <p>This class must be used as a base class for tag instances that
+ * support specific {@link Validator} subclasses.</p>
+ *
+ * <p>Subclasses of this class must implement the
+ * <code>createValidator()</code> method, which creates and returns a
+ * {@link Validator} instance.  Any configuration properties that specify
+ * the limits to be enforced by this {@link Validator} must have been
+ * set by the <code>createValidator()</code> method.  Generally, this occurs
+ * by copying corresponding attribute values on the tag instance.</p>
+ *
+ * <p>This tag creates no output to the page currently being created.  It
+ * is used solely for the side effect of {@link Validator} creation.</p>
+ *
+ */
+
+public abstract class ValidatorELTag extends TagSupport {
+
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the specified {@link Validator}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentTagBase} instance, if
+     * the {@link UIComponent} instance was created by this execution of the
+     * containing JSP page.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+        
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) { 
+       	    //PENDING i18n
+            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }
+        
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {            
+            //PENDING i18n
+            throw new JspException("Can't create Component from tag.");
+        }
+        if (!(component instanceof EditableValueHolder)) {
+            // PENDING i18n
+            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+
+        Validator validator = createValidator();
+        
+        if (validator == null) {
+            // PENDING i18n
+            throw new JspException("Can't create class of type:"+
+                " javax.faces.validator.Validator.  Validator is null");
+        }
+
+        // Register an instance with the appropriate component
+        ((EditableValueHolder)component).addValidator(validator);
+        
+        return (SKIP_BODY);
+
+    }
+
+
+    // ------------------------------------------------------ Protected Methods
+
+
+    /**
+     * <p>Create and return a new {@link Validator} to be registered
+     * on our surrounding {@link UIComponent}.</p>
+     *
+     * @throws JspException if a new instance cannot be created
+     */
+    protected abstract Validator createValidator()
+        throws JspException;
+
+
+}
diff --git a/javax/faces/webapp/ValidatorTag.java b/javax/faces/webapp/ValidatorTag.java
new file mode 100644
index 0000000..8ec6311
--- /dev/null
+++ b/javax/faces/webapp/ValidatorTag.java
@@ -0,0 +1,275 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License.  You can
+ * obtain a copy of the License at
+ * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+ * or packager/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at packager/legal/LICENSE.txt.
+ *
+ * GPL Classpath Exception:
+ * Oracle designates this particular file as subject to the "Classpath"
+ * exception as provided by Oracle in the GPL Version 2 section of the License
+ * file that accompanied this code.
+ *
+ * Modifications:
+ * If applicable, add the following below the License Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyright [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package javax.faces.webapp;
+
+import javax.el.ValueExpression;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+
+/**
+ * <p><strong>ValidatorTag</strong> is a base class for all JSP custom actions
+ * that create and register a <code>Validator</code> instance on the
+ * {@link EditableValueHolder} associated with our most immediate surrounding instance
+ * of a tag whose implementation class is a subclass of {@link UIComponentTag}.
+ * To avoid creating duplicate instances when a page is redisplayed,
+ * creation and registration of a {@link Validator} occurs
+ * <strong>only</strong> if the corresponding {@link UIComponent} was
+ * created (by the owning {@link UIComponentTag}) during the execution of the
+ * current page.</p>
+ *
+ * <p>This class may be used directly to implement a generic validator
+ * registration tag (based on the validator-id specified by the
+ * <code>id</code> attribute), or as a base class for tag instances that
+ * support specific {@link Validator} subclasses.  This <code>id</code>
+ * attribute must refer to one of the well known validator-ids, or a
+ * custom validator-id as defined in a <code>faces-config.xml</code>
+ * file.</p>
+ *
+ * <p>Subclasses of this class must implement the
+ * <code>createValidator()</code> method, which creates and returns a
+ * {@link Validator} instance.  Any configuration properties that specify
+ * the limits to be enforced by this {@link Validator} must have been
+ * set by the <code>createValidator()</code> method.  Generally, this occurs
+ * by copying corresponding attribute values on the tag instance.</p>
+ *
+ * <p>This tag creates no output to the page currently being created.  It
+ * is used solely for the side effect of {@link Validator} creation.</p>
+ *
+ * @deprecated This has been partially replaced by {@link
+ * ValidatorELTag}.  The remainder of the functionality, namely, the
+ * binding facility and the implementation of the {@link
+ * #createValidator} method, is now an implementation detail.
+ */
+
+public class ValidatorTag extends TagSupport {
+
+
+    // ---------------------------------------------------------- Static Members
+
+
+    private static final long serialVersionUID = -5562623615418158868L;
+
+
+    // ------------------------------------------------------------- Attributes
+
+    /**
+     * <p>The identifier of the {@link Validator} instance to be created.</p>
+     */
+    private String validatorId = null;
+    
+    /**
+     * <p>The {@link ValueExpression} that evaluates to an object that 
+     * implements {@link Validator}.</p>
+     */
+    private String binding = null;
+
+    /**
+     * <p>Set the identifer of the {@link Validator} instance to be created.
+     *
+     * @param validatorId The new identifier of the validator instance to be
+     *                    created.
+     */
+    public void setValidatorId(String validatorId) {
+
+        this.validatorId = validatorId;
+
+    }
+
+    /**
+     * <p>Set the expression that will be used to create a {@link ValueExpression} 
+     * that references a backing bean property of the {@link Validator} instance to 
+     * be created.</p>
+     *
+     * @param binding The new expression 
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public void setBinding(String binding) 
+        throws JspException {
+        if (binding != null && !UIComponentTag.isValueReference(binding)) {
+            //PENDING i18n
+            throw new JspException("Invalid Expression:"+binding);
+        }
+        this.binding = binding;
+    }
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * <p>Create a new instance of the specified {@link Validator}
+     * class, and register it with the {@link UIComponent} instance associated
+     * with our most immediately surrounding {@link UIComponentTag} instance, if
+     * the {@link UIComponent} instance was created by this execution of the
+     * containing JSP page.</p>
+     *
+     * @throws JspException if a JSP error occurs
+     */
+    public int doStartTag() throws JspException {
+        
+        // Locate our parent UIComponentTag
+        UIComponentClassicTagBase tag =
+             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
+        if (tag == null) { 
+       	    //PENDING i18n
+            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+
+        // Nothing to do unless this tag created a component
+        if (!tag.getCreated()) {
+            return (SKIP_BODY);
+        }
+        
+        UIComponent component = tag.getComponentInstance();
+        if (component == null) {            
+            //PENDING i18n
+            throw new JspException("Can't create Component from tag.");
+        }
+        if (!(component instanceof EditableValueHolder)) {
+            // PENDING i18n
+            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
+                    this.getClass().getName());
+        }
+
+        Validator validator = createValidator();
+        
+        if (validator == null) {
+            //noinspection NonConstantStringShouldBeStringBuffer
+            String validateError = null;
+            if (binding != null) {
+                validateError = binding;
+            }
+            if (validatorId != null) {
+                if (validateError != null) {
+                    validateError += " or " + validatorId;
+                } else {
+                    validateError = validatorId;
+                }
+            }
+                
+            // PENDING i18n
+            throw new JspException("Can't create class of type:"+
+                "javax.faces.validator.Validator from:"+validateError);
+        }
+
+        // Register an instance with the appropriate component
+        ((EditableValueHolder)component).addValidator(validator);
+        
+        return (SKIP_BODY);
+
+    }
+
+
+    /**
+     * <p>Release references to any acquired resources.
+     */
+    public void release() {
+
+        this.id = null;
+
+    }
+
+
+    // ------------------------------------------------------ Protected Methods
+
+
+    /**
+     * <p>Create and return a new {@link Validator} to be registered
+     * on our surrounding {@link UIComponent}.</p>
+     *
+     * @throws JspException if a new instance cannot be created
+     */
+    protected Validator createValidator()
+        throws JspException {
+        
+        FacesContext context = FacesContext.getCurrentInstance();
+        Validator validator = null;
+        ValueExpression vb = null;
+        
+        // If "binding" is set, use it to create a validator instance.
+        if (binding != null) {
+            try {
+                vb = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), 
+                        binding, Object.class);
+                if (vb != null) {
+                    validator = (Validator)vb.getValue(context.getELContext());
+                    if (validator != null) {
+                        return validator;
+                    }
+                }
+            } catch (Exception e) {
+                throw new JspException(e);
+            }
+        } 
+        // If "validatorId" is set, use it to create the validator
+        // instance.  If "validatorId" and "binding" are both set, store the 
+        // validator instance in the value of the property represented by
+        // the value binding expression.      
+        if (validatorId != null) {
+            try {
+                String validatorIdVal = validatorId;
+                if (UIComponentTag.isValueReference(validatorId)) {
+                    ValueExpression idBinding = context.getApplication().
+                        getExpressionFactory().createValueExpression(context.getELContext(), 
+                            validatorId, Object.class);
+                    validatorIdVal = (String)idBinding.getValue(context.getELContext());
+                }
+                validator = context.getApplication().createValidator(validatorIdVal);
+                if (validator != null) { 
+                    if (vb != null) {
+                        vb.setValue(context.getELContext(), validator);
+                    }
+                }
+            } catch (Exception e) {
+                throw new JspException(e);
+            }
+        }
+        return validator;
+    }
+
+
+}
diff --git a/javax/faces/webapp/package.html b/javax/faces/webapp/package.html
new file mode 100644
index 0000000..168108c
--- /dev/null
+++ b/javax/faces/webapp/package.html
@@ -0,0 +1,55 @@
+<html>
+<head>
+<!--
+
+    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+    Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
+
+    The contents of this file are subject to the terms of either the GNU
+    General Public License Version 2 only ("GPL") or the Common Development
+    and Distribution License("CDDL") (collectively, the "License").  You
+    may not use this file except in compliance with the License.  You can
+    obtain a copy of the License at
+    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
+    or packager/legal/LICENSE.txt.  See the License for the specific
+    language governing permissions and limitations under the License.
+
+    When distributing the software, include this License Header Notice in each
+    file and include the License file at packager/legal/LICENSE.txt.
+
+    GPL Classpath Exception:
+    Oracle designates this particular file as subject to the "Classpath"
+    exception as provided by Oracle in the GPL Version 2 section of the License
+    file that accompanied this code.
+
+    Modifications:
+    If applicable, add the following below the License Header, with the fields
+    enclosed by brackets [] replaced by your own identifying information:
+    "Portions Copyright [year] [name of copyright owner]"
+
+    Contributor(s):
+    If you wish your version of this file to be governed by only the CDDL or
+    only the GPL Version 2, indicate your decision by adding "[Contributor]
+    elects to include this software in this distribution under the [CDDL or GPL
+    Version 2] license."  If you don't indicate a single choice of license, a
+    recipient has the option to distribute your version of this file under
+    either the CDDL, the GPL Version 2 or to extend the choice of license to
+    its licensees as provided above.  However, if you add GPL Version 2 code
+    and therefore, elected the GPL Version 2 license, then the option applies
+    only if the new code is made subject to such option by the copyright
+    holder.
+
+-->
+
+<title>Package Description for "javax.faces.webapp"</title>
+</head>
+<body bgcolor="white">
+
+<p><span class="changed_modified_2_0 changed_modified_2_0_rev_a
+changed_modified_2_1 changed_modified_2_2">Classes</span> required for integration of
+JavaServer Faces into web applications, including a standard servlet,
+<span class="changed_deleted_2_0">base classes for JSP custom component
+tags, and concrete tag implementations for core tags</span>.</p>
+</body>
+</html>
diff --git a/jsf-api/LICENSE.TXT b/jsf-api/LICENSE.TXT
deleted file mode 100644
index b4ffbe7..0000000
--- a/jsf-api/LICENSE.TXT
+++ /dev/null
@@ -1,96 +0,0 @@
-COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 
-
-1. Definitions. 
-
-1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications. 
-
-1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. 
-
-1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. 
-
-1.4. Executable means the Covered Software in any form other than Source Code. 
-
-1.5. Initial Developer means the individual or entity that first makes Original Software available under this License. 
-
-1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. 
-
-1.7. License means this document. 
-
-1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 
-
-1.9. Modifications means the Source Code and Executable form of any of the following: A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; B. Any new file that contains any part of the Original Software or previous Modification; or C. Any new file that is contributed or otherwise made available under the terms of this License. 
-
-1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License. 
-
-1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 
-
-1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. 
-
-1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding sh [...]
-
-2. License Grants.
-
-2.1. The Initial Developer Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: 
-
-(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and 
-
-(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof);
-
-(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License;
-
-(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. 
-
-2.2. Contributor Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: 
-
-(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and 
-
-(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). 
-
-(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-
-(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. 
-
-3. Distribution Obligations. 
-
-3.1. Availability of Source Code. Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they  [...]
-
-3.2. Modifications. The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. 
-
-3.3. Required Notices. You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. 
-
-3.4. Application of Additional Terms. You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must m [...]
-
-3.5. Distribution of Executable Versions. You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute  [...]
-
-3.6. Larger Works. You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. 
-
-4. Versions of the License. 
-
-4.1. New Versions. Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. 
-
-4.2. Effect of New Versions. You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the versi [...]
-
-4.3. Modified Versions. When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. 
-
-5. DISCLAIMER OF WARRANTY. COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHE [...]
-
-6. TERMINATION. 
-
-6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 
-
-6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights gran [...]
-
-6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. 
-
-7. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR M [...]
-
-8. U.S. GOVERNMENT END USERS. The Covered Software is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R. 252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only tho [...]
-
-9. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions [...]
-
-10. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 
-**********************************************************************
-
-NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL): This code is released under the CDDL and shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
-
-*********************************************************************
diff --git a/jsf-api/api.iml b/jsf-api/api.iml
deleted file mode 100644
index 620c9d5..0000000
--- a/jsf-api/api.iml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/build/generate" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/build/classes" />
-      <excludeFolder url="file://$MODULE_DIR$/build/javadocs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/javascript" />
-      <excludeFolder url="file://$MODULE_DIR$/build/lib" />
-      <excludeFolder url="file://$MODULE_DIR$/build/test" />
-      <excludeFolder url="file://$MODULE_DIR$/testresults" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="mojarra-build" level="project" />
-    <orderEntry type="module" module-name="tools" exported="" />
-  </component>
-</module>
-
diff --git a/jsf-api/build-source.xml b/jsf-api/build-source.xml
deleted file mode 100644
index 1efa744..0000000
--- a/jsf-api/build-source.xml
+++ /dev/null
@@ -1,865 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!--
-  =======================================================================
-    JSF-API build file
-  =======================================================================
--->
-<project name="JSF-API" default="main" basedir=".">
-
-    <property file="${user.home}/build.properties"/>
-    <property file="../build.properties"/>
-
-    <import file="${jsf.build.home}/common/ant/source-build-setup.xml"/>
-
-    <!-- Structural -->
-    <property name="doc.dir" value="${basedir}/doc"/>
-    <property name="src.dir" value="${basedir}/src/main/java"/>
-    <property name="resources.dir" value="${basedir}/src/main/resources"/>
-    <property name="tools.dir" value="${basedir}/tools"/>
-    <property name="test.dir" value="${basedir}/src/test/java"/>
-    <property name="dist.dir" value="${basedir}/dist"/>
-    <property name="build.dir" value="build"/>
-    <property name="target.dir" value="target"/>
-    <property name="build.classes.dir" value="${build.dir}/classes"/>
-    <property name="build.lib.dir" value="${build.dir}/lib"/>
-    <property name="build.temp.dir" value="${build.dir}/temp"/>
-    <property name="build.test.dir" value="${build.dir}/test"/>
-    <property name="build.generate.dir" value="${build.dir}/generate"/>
-    <property name="build.javadocs.dir" value="${build.dir}/javadocs"/>
-    <property name="build.managed-bean-javadocs.dir" value="${build.javadocs.dir}/../managed-bean-javadocs"/>
-    <property name="build.renderkitdoc.dirs"
-              value="${build.dir}/renderkitdocs"/>
-    <property name="build.mifdocs.dir" value="${build.dir}/mifdocs"/>
-    <property name="javadoc.private" value="false"/>
-    <property name="javadoc.protected" value="true"/>
-    <property name="artifact-id" value="jsf-api"/>
-
-    <property name="assertion.classes" value="-ea:javax.faces..."/>
-    <property name="name" value="jsf-api"/>
-    <property name="DocName" value="JavaServer Faces API"/>
-
-    <path id="test.classpath">
-        <pathelement location="${build.classes.dir}"/>
-        <pathelement location="${build.test.dir}"/>
-        <pathelement location="${jsf.test.jar}"/>
-        <pathelement location="${tools.dir}/build/classes"/>
-        <path refid="apache.commons.classpath"/>
-        <path refid="compile.classpath"/>
-        <path refid="junit.classpath"/>
-    </path>
-
-    <property name="test.factory"
-              value="org.apache.commons.logging.impl.LogFactoryImpl"/>
-    <property name="test.failonerror" value="true"/>
-    <property name="test.level" value="error"/>
-    <property name="test.log"
-              value="org.apache.commons.logging.impl.SimpleLog"/>
-    <property name="test.runner" value="junit.textui.TestRunner"/>
-
-
-    <!--
-         ===================================================================
-           Prepare the build
-         ===================================================================
-    -->
-    <target name="prepare">
-        <tstamp/>
-        <mkdir dir="${build.dir}"/>
-        <mkdir dir="${build.classes.dir}"/>
-        <mkdir dir="${build.lib.dir}"/>
-        <mkdir dir="${build.javadocs.dir}"/>
-        <mkdir dir="${build.managed-bean-javadocs.dir}"/>
-        <mkdir dir="${build.generate.dir}"/>
-    </target>
-
-    <target name="attributes"
-            description="Recreate attributes include files from property include files"
-            depends="prepare">
-
-        <!-- Copy just the properties files we wish to convert -->
-        <copy todir="${doc.dir}"
-              overwrite="true">
-            <mapper type="glob"
-                    from="*-props.xml"
-                    to="*-attrs.xml"/>
-            <fileset dir="${doc.dir}">
-                <include name="*-props.xml"/>
-                <exclude name="actionsource-props.xml"/>
-                <exclude name="actionsource2-props.xml"/>
-                <exclude name="editable-props.xml"/>
-                <exclude name="valueholder-props.xml"/>
-                <exclude name="ui*-props.xml"/>
-            </fileset>
-        </copy>
-
-        <!-- Replace "property" with "attribute" in relevant cases -->
-        <replace dir="${doc.dir}"
-                 summary="true">
-            <include name="*-attrs.xml"/>
-            <replacefilter token="<property"
-                           value="<attribute"/>
-            <replacefilter token="</property"
-                           value="</attribute"/>
-            <replacefilter token="Properties"
-                           value="Attributes"/>
-        </replace>
-
-    </target>
-
-    <!--
-         ===================================================================
-           Build the API code
-         ===================================================================
-    -->
-
-    <target name="compile">
-        <jsf.javac destdir="${build.classes.dir}"
-                   srcdir="${src.dir}:${build.generate.dir}">
-            <classpath>
-                <path refid="compile.classpath"/>
-            </classpath>
-        </jsf.javac>
-    </target>
-
-    <target name="build"
-            depends="prepare,generate,copy.template.sources,compile">
-        <copy todir="${build.classes.dir}">
-            <fileset dir="${src.dir}">
-                <exclude name="**/*.java"/>
-                <exclude name="**/*.html"/>
-                <exclude name="**/*.jpg"/>
-            </fileset>
-        </copy>
-        <copy todir="${build.classes.dir}/META-INF" file="src/main/resources/mojarra-jsf-api-probe-provider.xml"/>
-        <copy todir="${build.lib.dir}">
-            <fileset dir="${doc.dir}">
-                <include name="*.dtd"/>
-            </fileset>
-        </copy>
-
-    </target>
-
-    <target name="check.generation.necessity">
-        <uptodate property="skip.generation"
-                  targetfile="${build.generate.dir}/last-generation">
-            <srcfiles dir="${basedir}/doc">
-                <include name="standard-html-renderkit.xml"/>
-            </srcfiles>
-        </uptodate>
-    </target>
-
-    <target name="generate"
-            depends="check.generation.necessity"
-            unless="skip.generation">
-
-        <delete dir="${build.generate.dir}"/>      
-        <antcall target="tools.javac"/>
-
-        <taskdef name="generateComponents"
-                 classname="com.sun.faces.ant.ComponentGenTask">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <generateComponents
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <path refid="compile.classpath"/>
-                <pathelement location="${commons-beanutils.jar}" />
-                <pathelement location="${commons-digester.jar}" />
-                <pathelement location="${commons-collections.jar}" />
-                <pathelement location="${commons-logging.jar}" />
-                <pathelement location="${jsf-api.jar}"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <assertions>
-                <enable/>
-            </assertions>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-        </generateComponents>
-
-        <copy todir="${build.generate.dir}/javax/faces/component/html"
-              file="${src.dir}/javax/faces/component/html/package.html"/>
-
-        <touch file="${build.generate.dir}/last-generation"/>
-
-    </target>
-
-    <target name="facesdoc" 
-            description="Create the Standard HTML Renderkit Documentation">
-        <antcall target="tools.javac"/>
-        <taskdef name="generateRenderkitDocs"
-                 classname="com.sun.faces.ant.RenderkitDocGenTask">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <copy todir="${build.generate.dir}/facesdoc/">
-           <fileset dir="${doc.dir}">
-             <include name="changed*.png" />
-           </fileset>
-        </copy>
-        
-        <generateRenderkitDocs
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <path refid="compile.classpath"/>
-                <pathelement location="${jsf-api.jar}"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <sysproperty key="tools.src.dir" value="${tools.dir}/src/main/java"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateRenderkitDocs>      
-
-    </target>
-
-    <target name="tools.javac">
-	<path id="ant.classpath">
-	    <pathelement location="${myenv.ANT_HOME}/lib/ant.jar"/>
-	</path>
-
-        <mkdir dir="${tools.dir}/build/classes"/>
-        <jsf.javac srcdir="${tools.dir}/src/main/java"
-                   destdir="${tools.dir}/build/classes">
-            <classpath>
-                <path refid="compile.classpath"/>
-                <path refid="apache.commons.classpath"/>
-                <path refid="ant.classpath"/>
-            </classpath>
-        </jsf.javac>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${tools.dir}/src/main/java"
-                     includes="**/*.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${impl.dir}/src"
-                     includes="**/LogStrings.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes/com/sun/faces"
-              flatten="true">
-            <fileset dir="${api.dir}/doc"
-                     includes="*.dtd,*.xsd"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${tools.dir}/src/main/java"
-                     includes="**/*.html,**/*.top,**/*.bottom,**/*.css"/>            
-        </copy>
-    </target>
-
-
-    <target name="copy.template.sources"
-            description="Copy template sources from ${tools.dir}/template-source">
-
-        <filter token="protection" value=""/>
-
-        <filter token="package" value="javax.faces"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/javax/faces"
-              filtering="true"/>
-
-        <filter token="package" value="javax.faces.component"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/component"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/javax/faces/component"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/StateHolderSaver.java"
-              todir="${build.generate.dir}/javax/faces/component"
-              filtering="true"/>
-        <copy todir="${build.generate.dir}/javax/faces/component"
-              filtering="true">
-            <fileset dir="${basedir}/template-src">
-                <include name="*Adapter.java"/>
-            </fileset>
-        </copy>
-
-        <filter token="package" value="javax.faces.convert"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/convert"
-              filtering="true"/>
-
-        <filter token="package" value="javax.faces.validator"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/validator"
-              filtering="true"/>
-
-        <filter token="package" value="javax.faces.webapp"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/webapp"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/javax/faces/webapp"
-              filtering="true"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/MethodBindingMethodExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="7334926223014401689L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/MethodExpressionMethodBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="-1822420567946048452L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/ValueExpressionValueBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="2388977392466671243L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/ValueBindingValueExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="-8015491904782686906L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/StateHolderSaver.java"
-              token="@serialVersionUID@"
-              value="6470180891722042701L"/>
-
-    </target>
-
-    <target name="prepare.test">
-        <mkdir dir="${api.test.results.dir}"/>
-    </target>
-
-    <!--
-         ===================================================================
-           Build the test code
-         ===================================================================
-    -->
-
-    <target name="build.test.dir" depends="build,prepare.test">
-        <mkdir dir="${build.dir}"/>
-        <mkdir dir="${build.test.dir}"/>
-
-        <jsf.javac srcdir="${test.dir}"
-                   destdir="${build.test.dir}">
-            <classpath>
-                <path refid="test.classpath"/>
-                <path refid="apache.commons.classpath"/>
-            </classpath>
-        </jsf.javac>
-
-        <copy todir="${build.test.dir}">
-            <fileset dir="${test.dir}" includes="**/*.properties"/>
-        </copy>
-
-        <delete file="${basedir}/test/javax/faces/mock/MockPageContext.java"/>
-
-        <copy todir="${build.test.dir}">
-            <fileset dir="${test.dir}">
-                <exclude name="**/*.java"/>
-            </fileset>
-        </copy>
-
-       <delete dir="${build.test.dir}/META-INF/services" />
-        <mkdir dir="${build.test.dir}/META-INF/services"/>
-        <echo
-              file="${build.test.dir}/META-INF/services/javax.faces.context.ExceptionHandlerFactory">javax.faces.webapp.PreJsf2ExceptionHandlerFactory</echo>
-
-
-    </target>
-
-
-    <!--
-         ===================================================================
-           Test targets
-         ===================================================================
-    -->
-
-
-    <target name="test"
-            description="Run all JUnit test cases"
-            depends="build.test.dir,
-                copy.template.sources,
-                test.FactoryFinder,
-                test.FactoryFinder2,
-                test.PhaseId,
-                test.component,
-                test.validator,
-                test.mock,
-                test.model,
-                test.webapp">
-    </target>
-
-    <target name="test.FactoryFinder" depends="build.test.dir">
-        <echo message="Running FactoryFinder tests ..."/>
-        <mkdir dir="${build.classes.dir}/META-INF/services"/>
-        <echo
-              file="${build.classes.dir}/META-INF/services/javax.faces.context.FacesContextFactory">javax.faces.mock.MockFacesContextFactoryExtender</echo>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/FactoryFinderTestCase.class"/>
-            </tests>
-        </jsf.junit>
-        <delete dir="${build.classes.dir}/META-INF"/>
-    </target>
-
-    <target name="test.FactoryFinder2" depends="build.test.dir">
-        <echo message="Running FactoryFinder tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/FactoryFinderTestCase2.class"/>
-            </tests>
-        </jsf.junit>
-    </target>   
-
-    <target name="test.PhaseId" depends="build.test.dir">
-        <echo message="Running PhaseId tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/event/PhaseIdTest.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.component" depends="build.test.dir">
-        <echo message="Running javax.faces.component tests ..."/>
-        <delete file="${api.test.results.dir}/api-test.log"/>
-        <delete file="${api.test.results.dir}/test-logging.properties"/>
-        <echo file="${api.test.results.dir}/test-logging.properties">
-handlers=java.util.logging.FileHandler
-java.util.logging.FileHandler.append=true
-java.util.logging.FileHandler.encoding=UTF-8
-java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
-java.util.logging.FileHandler.pattern=${api.test.results.dir}/api-test.log
-javax.faces.level=ALL
-        </echo>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}"
-                   logging.config.file="${api.test.results.dir}/test-logging.properties">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/component/*TestCase.class"
-                         excludes="javax/faces/component/UIDataTestCase.class,javax/faces/component/UIFormTestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.validator" depends="build.test.dir">
-        <echo message="Running javax.faces.validator tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/validator/*TestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.mock" depends="build.test.dir">
-        <echo message="Running javax.faces.mock tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/mock/*TestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.model" depends="build.test.dir">
-        <echo message="Running javax.faces.model tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/model/*TestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.webapp" depends="build.test.dir">
-        <echo message="Running javax.faces.webapp tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <custom-sysproperties>
-                <sysproperty key="base.dir" value="${basedir}/build"/>
-            </custom-sysproperties>
-            <tests>
-            <fileset dir="${build.test.dir}"
-                         includes="javax/faces/webapp/*TestCase.class"
-                         excludes="javax/faces/webapp/UIComponentTagTestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <!--
-         ===================================================================
-           Create the standard-html-renderkit.xml document
-         ===================================================================
-    -->
-
-    <target name="create.standard.xml" depends="attributes">
-        <copy
-              file="${basedir}/../jsf-ri/src/com/sun/faces/standard-html-renderkit-impl.xml"
-              todir="${basedir}/doc"/>
-        <exec executable="xmllint" dir="${basedir}/doc" failonerror="true">
-            <arg
-                  line="--xinclude --format --output standard-html-renderkit.xml standard-html-renderkit-base.xml"/>
-        </exec>
-        <replace file="${basedir}/doc/standard-html-renderkit.xml">
-            <replacetoken>
-                <![CDATA[<?xml version="1.0" encoding="UTF-8"?>]]></replacetoken>
-            <replacevalue><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- DO NOT EDIT     DO NOT EDIT    DO NOT EDIT    DO NOT EDIT    DO NOT EDIT -->]]>
-            </replacevalue>
-        </replace>
-        <delete file="${basedir}/doc/standard-html-renderkit-impl.xml"/>
-
-        <mkdir dir="${tools.dir}/build/classes"/>
-        <antcall target="tools.javac"/>
-        <javac srcdir="${tools.dir}/src/main/java"
-               destdir="${tools.dir}/build/classes">
-            <classpath>
-                <path refid="compile.classpath"/>
-            </classpath>
-        </javac>
-
-        <!-- validate the generated standard-html-renderkit.xml -->
-        <taskdef name="validate" classname="com.sun.faces.ant.ValidateTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <validate schemaDir="${basedir}/doc"/>
-    </target>
-
-    <!--
-         ===================================================================
-           Create the jars
-         ===================================================================
-    -->
-    <target name="jars" depends="build">
-
-        <copy file="${basedir}/mojarra-jsf-api.bnd" tofile="tmp.bnd"/>
-        <replace file="tmp.bnd"
-                 token="@spec.version@"
-                 value="${spec.version}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.name@"
-                 value="${impl.name}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.version@"
-                 value="${impl.version}"/>
-        <if>
-            <equals arg1="${build.type}" arg2=""/>
-            <then>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}"/>
-            </then>
-            <else>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}-${build.type}"/>
-            </else>
-        </if>
-        <replace file="tmp.bnd"
-                 token="@extension.name@"
-                 value="javax.faces"/>
-        <jsf.osgi.jar jarfile="${build.lib.dir}/${name}.jar"
-                            basedir="${build.classes.dir}"
-                            extension-name="javax.faces"
-                            bndfile="tmp.bnd"/>
-        <delete file="tmp.bnd"/>
-
-    </target>
-
-
-    <!--
-         ===================================================================
-           Clean up build and distribution directories
-         ===================================================================
-    -->
-    <target name="clean" description="Clean build directory">
-        <delete dir="${build.dir}"/>
-        <delete dir="${target.dir}"/>
-        <delete dir="${api.test.results.dir}"/>
-        <delete>
-            <fileset dir="." includes="**/.nbattrs" defaultexcludes="no"/>
-            <fileset dir="." includes="**/*~" defaultexcludes="no"/>
-        </delete>
-        <!-- delete this file since it's copied from another file based on JSP level -->
-        <delete file="${basedir}/test/javax/faces/mock/MockPageContext.java"/>
-        <delete dir="${dist.dir}"/>
-        <delete dir="${tools.dir}/build"/>
-        <!-- delete extraneous generated doc files, if necessary -->
-        <delete>
-            <fileset dir="doc" includes="*-attrs.xml"/>
-        </delete>
-    </target>
-
-
-    <!--
-         ===================================================================
-           Clean everything
-         ===================================================================
-    -->
-    <target name="allclean" depends="clean">
-    </target>
-
-
-    <!--
-         ===================================================================
-           Create the API documentation
-         ===================================================================
-    -->
-
-    <target name="javadoc_check">
-        <uptodate property="javadoc.notrequired"
-                  targetfile="${build.javadocs.dir}/packages.html">
-            <srcfiles dir="${src.dir}" includes="**/*.java"/>
-            <srcfiles dir="${build.generate.dir}" includes="**/*.java"/>
-        </uptodate>
-    </target>
-
-    <target name="javadocs"
-            depends="prepare,javadoc_check,generate,generate.javadocs,facesdoc"
-            unless="javadoc.notrequired"
-            description="Create the JavaDoc API documentation">
-
-        <copy todir="${build.javadocs.dir}/javax/faces/component"
-              file="${src.dir}/javax/faces/component/UIComponentHierarchy.jpg"/>
-        <copy todir="${build.javadocs.dir}/javax/faces/event"
-              file="${src.dir}/javax/faces/event/EventHierarchy.jpg"/>
-
-        <copy todir="${build.javadocs.dir}/javax/faces/view/facelets"
-              file="${src.dir}/javax/faces/view/facelets/Facelets.jpg"/>
-
-        <copy todir="${build.javadocs.dir}/">
-           <fileset dir="${doc.dir}">
-             <include name="changed*.png" />
-           </fileset>
-        </copy>
-
-        <copy todir="${build.managed-bean-javadocs.dir}/">
-           <fileset dir="${doc.dir}">
-             <include name="changed*.png" />
-           </fileset>
-        </copy>
-
-    </target>
-
-
-    <target name="generate.javadocs">
-        <javadoc packagenames="javax.*"
-                 destdir="${build.javadocs.dir}"
-                 Overview="${resources.dir}/overview.html"
-                 private="${javadoc.private}"
-                 link="http://java.sun.com/javase/6/docs/api/"
-                 protected="${javadoc.protected}"
-                 windowtitle="${DocName} (${spec.version})"
-                 stylesheetfile="${resources.dir}/jsf-api.css"
-                 source="1.5"
-                 doctitle="${DocName} (${spec.version})"
-                 bottom="Copyright © 2002-2009 Sun Microsystems, Inc. All Rights Reserved.">
-            <fileset dir="${src.dir}">
-                <include name="**/*.java"/>
-                <exclude name="**/ApplicationScoped.java" />
-                <exclude name="**/CustomScoped.java" />
-                <exclude name="**/ManagedBean.java" />
-                <exclude name="**/ReferencedBean.java" />
-                <exclude name="**/ManagedProperty.java" />
-                <exclude name="**/NoneScoped.java" />
-                <exclude name="**/RequestScoped.java" />
-                <exclude name="**/SessionScoped.java" />
-                <exclude name="**/ViewScoped.java" />
-            </fileset>
-            <fileset dir="${build.generate.dir}">
-                <include name="**/*.java"/>
-            </fileset>
-            <classpath refid="compile.classpath"/>
-        </javadoc>
-
-        <javadoc packagenames="javax.*"
-                 destdir="${build.managed-bean-javadocs.dir}"
-                 Overview="${resources.dir}/managed-bean-overview.html"
-                 private="${javadoc.private}"
-                 link="http://java.sun.com/javase/6/docs/api/"
-                 protected="${javadoc.protected}"
-                 windowtitle="Faces Managed Bean Annotation Specification (${spec.version})"
-                 stylesheetfile="${resources.dir}/jsf-api.css"
-                 source="1.5"
-                 doctitle="Faces Managed Bean Annotation Specification (${spec.version})"
-                 bottom="Copyright © 2002-2009 Sun Microsystems, Inc. All Rights Reserved.">
-            <fileset dir="${src.dir}">
-                <include name="**/ApplicationScoped.java" />
-                <include name="**/CustomScoped.java" />
-                <include name="**/ReferencedBean.java" />
-                <include name="**/ManagedBean.java" />
-                <include name="**/ManagedProperty.java" />
-                <include name="**/NoneScoped.java" />
-                <include name="**/RequestScoped.java" />
-                <include name="**/SessionScoped.java" />
-                <include name="**/ViewScoped.java" />
-            </fileset>
-            <classpath refid="compile.classpath"/>
-        </javadoc>
-    </target>
-
-
-    <!--
-         ===================================================================
-           Main target
-         ===================================================================
-    -->
-    <target name="main" depends="jars"
-            description="Compile API classes and build JAR file"/>
-
-    <!--
-         ===================================================================
-           Distributions target
-         ===================================================================
-    -->
-    <target name="dist" depends="main,javadocs"
-            description="Build distribution files">
-
-        <!-- Create the distributions directory -->
-        <mkdir dir="${dist.dir}"/>
-
-        <!-- Create the binary distribution -->
-        <zip destfile="${dist.dir}/${name}-${impl.version}.zip">
-            <zipfileset dir="${build.dir}"
-                        includes="lib/**"
-                        prefix="${name}-${impl.version}"/>
-        </zip>
-
-        <!-- Create the javadocs distribution -->
-        <zip destfile="${dist.dir}/${name}-javadocs-${impl.version}.zip">
-            <zipfileset dir="${build.dir}"
-                        includes="javadocs/**"
-                        prefix="${name}-${impl.version}"/>
-            <zipfileset dir="${build.dir}/generate"
-                        includes="facesdoc/**"
-                        prefix="${name}-${impl.version}"/>
-
-        </zip>
-
-
-        <!-- Create the source distribution -->
-        <zip destfile="${dist.dir}/${name}-src-${impl.version}.zip">
-            <zipfileset dir="${basedir}"
-                        includes="build.xml COPYRIGHT LICENSE.html"
-                        prefix="${name}"/>
-            <zipfileset dir="${src.dir}"
-                        excludes="**/CVS/**"
-                        prefix="${name}/src"/>
-            <zipfileset dir="${test.dir}"
-                        excludes="**/CVS/**"
-                        prefix="${name}/test"/>
-            <zipfileset dir="${doc.dir}"
-                        includes="*.dtd,*.xsd,standard-html-renderkit.xml"
-                        prefix="${name}/doc"/>
-            <zipfileset dir="${tools.dir}"
-                        excludes="**/CVS/**, **/build/**"
-                        prefix="jsf-tools"/>
-        </zip>
-
-    </target>
-
-
-    <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO YOUR LOCAL
-       M2 REPOSITORY
-    -->
-
-    <target name="mvn.deploy.snapshot.local">
-        <mvn.deploy.snapshot.local type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted.local">
-        <mvn.deploy.promoted.local type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.release.local">
-        <mvn.deploy.release.local type="api"/>
-    </target>
-
-
-    <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO THE
-       JAVA.NET M2 REPOSITORY
-    -->
-     <target name="mvn.deploy.snapshot">
-        <mvn.deploy.snapshot type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted">
-        <mvn.deploy.promoted type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.release">
-        <mvn.deploy.release type="api"/>
-    </target>
-
-</project>
diff --git a/jsf-api/build.xml b/jsf-api/build.xml
deleted file mode 100644
index 399f582..0000000
--- a/jsf-api/build.xml
+++ /dev/null
@@ -1,908 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!--
-  =======================================================================
-    JSF-API build file
-  =======================================================================
--->
-<project name="JSF-API" default="main" basedir=".">
-
-    <property file="${user.home}/build.properties"/>
-    <property file="../build.properties"/>
-
-    <import file="${jsf.build.home}/common/ant/common.xml"/>
-
-    <!-- Structural -->
-    <property name="doc.dir" value="${basedir}/doc"/>
-    <property name="src.dir" value="${basedir}/src/main/java"/>
-    <property name="resources.dir" value="${basedir}/src/main/resources"/>
-    <property name="tools.dir" value="${basedir}/tools"/>
-    <property name="test.dir" value="${basedir}/src/test/java"/>
-    <property name="dist.dir" value="${basedir}/dist"/>
-    <property name="build.dir" value="build"/>
-    <property name="target.dir" value="target"/>
-    <property name="build.classes.dir" value="${build.dir}/classes"/>
-    <property name="build.lib.dir" value="${build.dir}/lib"/>
-    <property name="build.temp.dir" value="${build.dir}/temp"/>
-    <property name="build.test.dir" value="${build.dir}/test"/>
-    <property name="build.generate.dir" value="${build.dir}/generate"/>
-    <property name="build.javadocs.dir" value="${build.dir}/javadocs"/>
-    <property name="build.managed-bean-javadocs.dir" value="${build.javadocs.dir}/../managed-bean-javadocs"/>
-    <property name="build.renderkitdoc.dirs"
-              value="${build.dir}/renderkitdocs"/>
-    <property name="build.mifdocs.dir" value="${build.dir}/mifdocs"/>
-    <property name="javadoc.private" value="false"/>
-    <property name="javadoc.protected" value="true"/>
-    <property name="artifact-id" value="jsf-api"/>
-
-    <property name="assertion.classes" value="-ea:javax.faces..."/>
-    <property name="name" value="jsf-api"/>
-    <property name="DocName" value="JavaServer Faces API"/>
-
-    <path id="test.classpath">
-        <pathelement location="${build.classes.dir}"/>
-        <pathelement location="${build.test.dir}"/>
-        <pathelement location="${jsf.test.jar}"/>
-        <pathelement location="${tools.dir}/build/classes"/>
-        <path refid="apache.commons.classpath"/>
-        <path refid="compile.classpath"/>
-        <path refid="junit.classpath"/>
-    </path>
-
-    <property name="test.factory"
-              value="org.apache.commons.logging.impl.LogFactoryImpl"/>
-    <property name="test.failonerror" value="true"/>
-    <property name="test.level" value="error"/>
-    <property name="test.log"
-              value="org.apache.commons.logging.impl.SimpleLog"/>
-    <property name="test.runner" value="junit.textui.TestRunner"/>
-
-
-    <!--
-         ===================================================================
-           Prepare the build
-         ===================================================================
-    -->
-    <target name="prepare">
-        <tstamp/>
-        <mkdir dir="${build.dir}"/>
-        <mkdir dir="${build.classes.dir}"/>
-        <mkdir dir="${build.lib.dir}"/>
-        <mkdir dir="${build.javadocs.dir}"/>
-        <mkdir dir="${build.managed-bean-javadocs.dir}"/>
-        <mkdir dir="${build.generate.dir}"/>
-    </target>
-
-    <target name="attributes"
-            description="Recreate attributes include files from property include files"
-            depends="prepare">
-
-        <!-- Copy just the properties files we wish to convert -->
-        <copy todir="${doc.dir}"
-              overwrite="true">
-            <mapper type="glob"
-                    from="*-props.xml"
-                    to="*-attrs.xml"/>
-            <fileset dir="${doc.dir}">
-                <include name="*-props.xml"/>
-                <exclude name="actionsource-props.xml"/>
-                <exclude name="actionsource2-props.xml"/>
-                <exclude name="editable-props.xml"/>
-                <exclude name="valueholder-props.xml"/>
-                <exclude name="ui*-props.xml"/>
-            </fileset>
-        </copy>
-
-        <!-- Replace "property" with "attribute" in relevant cases -->
-        <replace dir="${doc.dir}"
-                 summary="true">
-            <include name="*-attrs.xml"/>
-            <replacefilter token="<property"
-                           value="<attribute"/>
-            <replacefilter token="</property"
-                           value="</attribute"/>
-            <replacefilter token="Properties"
-                           value="Attributes"/>
-        </replace>
-
-    </target>
-
-    <!--
-         ===================================================================
-           Build the API code
-         ===================================================================
-    -->
-
-    <target name="compile">
-        <jsf.javac destdir="${build.classes.dir}"
-                   srcdir="${src.dir}:${build.generate.dir}">
-            <classpath>
-                <path refid="compile.classpath"/>
-            </classpath>
-        </jsf.javac>
-    </target>
-
-    <target name="build"
-            depends="prepare,generate,copy.template.sources,compile">
-        <copy todir="${build.classes.dir}">
-            <fileset dir="${src.dir}">
-                <exclude name="**/*.java"/>
-                <exclude name="**/*.html"/>
-                <exclude name="**/*.jpg"/>
-            </fileset>
-        </copy>
-        <copy todir="${build.classes.dir}/META-INF" file="src/main/resources/mojarra-jsf-api-probe-provider.xml"/>
-        <copy todir="${build.lib.dir}">
-            <fileset dir="${doc.dir}">
-                <include name="*.dtd"/>
-            </fileset>
-        </copy>
-
-    </target>
-
-    <target name="check.generation.necessity">
-        <uptodate property="skip.generation"
-                  targetfile="${build.generate.dir}/last-generation">
-            <srcfiles dir="${basedir}/doc">
-                <include name="standard-html-renderkit.xml"/>
-            </srcfiles>
-        </uptodate>
-    </target>
-
-    <target name="generate"
-            depends="check.generation.necessity"
-            unless="skip.generation">
-
-        <delete dir="${build.generate.dir}"/>      
-        <antcall target="tools.javac"/>
-
-        <taskdef name="generateComponents"
-                 classname="com.sun.faces.ant.ComponentGenTask">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <generateComponents
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <path refid="compile.classpath"/>
-                <pathelement location="${commons-beanutils.jar}" />
-                <pathelement location="${commons-digester.jar}" />
-                <pathelement location="${commons-collections.jar}" />
-                <pathelement location="${commons-logging.jar}" />
-                <pathelement location="${jsf-api.jar}"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <assertions>
-                <enable/>
-            </assertions>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-        </generateComponents>
-
-        <copy todir="${build.generate.dir}/javax/faces/component/html"
-              file="${src.dir}/javax/faces/component/html/package.html"/>
-
-        <touch file="${build.generate.dir}/last-generation"/>
-
-    </target>
-
-    <target name="facesdoc" 
-            description="Create the Standard HTML Renderkit Documentation">
-        <antcall target="tools.javac"/>
-        <taskdef name="generateRenderkitDocs"
-                 classname="com.sun.faces.ant.RenderkitDocGenTask">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <copy todir="${build.generate.dir}/facesdoc/">
-           <fileset dir="${doc.dir}">
-             <include name="changed*.png" />
-             <include name="changed*.cur" />
-           </fileset>
-        </copy>
-        
-        <generateRenderkitDocs
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="apache.commons.classpath"/>
-                <path refid="compile.classpath"/>
-                <pathelement location="${jsf-api.jar}"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <sysproperty key="tools.src.dir" value="${tools.dir}/src/main/java"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateRenderkitDocs>      
-
-    </target>
-
-    <target name="tools.javac">
-        <path id="ant.classpath">
-            <pathelement location="${myenv.ANT_HOME}/lib/ant.jar"/>
-        </path>
-
-        <mkdir dir="${tools.dir}/build/classes"/>
-        <jsf.javac srcdir="${tools.dir}/src/main/java"
-                   destdir="${tools.dir}/build/classes">
-            <classpath>
-                <path refid="compile.classpath"/>
-                <path refid="apache.commons.classpath"/>
-                <path refid="ant.classpath"/>
-            </classpath>
-        </jsf.javac>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${tools.dir}/src/main/resources"
-                     includes="**/*.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes" >
-            <fileset dir="${impl.dir}/src/main/resources"
-                     includes="**/LogStrings.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes/com/sun/faces"
-              flatten="true">
-            <fileset dir="${api.dir}/doc"
-                     includes="*.dtd,*.xsd"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${tools.dir}/src/main/resources"
-                     includes="**/*.html,**/*.top,**/*.bottom,**/*.css"/>            
-        </copy>
-    </target>
-
-
-    <target name="copy.template.sources"
-            description="Copy template sources from ${tools.dir}/template-source">
-
-        <filter token="protection" value=""/>
-
-        <filter token="package" value="javax.faces"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/javax/faces"
-              filtering="true"/>
-
-        <filter token="package" value="javax.faces.component"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/component"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/javax/faces/component"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/StateHolderSaver.java"
-              todir="${build.generate.dir}/javax/faces/component"
-              filtering="true"/>
-        <copy todir="${build.generate.dir}/javax/faces/component"
-              filtering="true">
-            <fileset dir="${basedir}/template-src">
-                <include name="*Adapter.java"/>
-            </fileset>
-        </copy>
-
-        <filter token="package" value="javax.faces.convert"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/convert"
-              filtering="true"/>
-
-        <filter token="package" value="javax.faces.validator"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/validator"
-              filtering="true"/>
-
-        <filter token="package" value="javax.faces.webapp"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/javax/faces/webapp"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/javax/faces/webapp"
-              filtering="true"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/MethodBindingMethodExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="7334926223014401689L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/MethodExpressionMethodBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="-1822420567946048452L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/ValueExpressionValueBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="2388977392466671243L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/ValueBindingValueExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="-8015491904782686906L"/>
-
-        <replace
-              file="${build.generate.dir}/javax/faces/component/StateHolderSaver.java"
-              token="@serialVersionUID@"
-              value="6470180891722042701L"/>
-
-    </target>
-
-    <target name="prepare.test">
-        <mkdir dir="${api.test.results.dir}"/>
-    </target>
-
-    <!--
-         ===================================================================
-           Build the test code
-         ===================================================================
-    -->
-
-    <target name="build.test.dir" depends="build,prepare.test">
-        <mkdir dir="${build.dir}"/>
-        <mkdir dir="${build.test.dir}"/>
-
-        <jsf.javac srcdir="${test.dir}"
-                   destdir="${build.test.dir}">
-            <classpath>
-                <path refid="test.classpath"/>
-                <path refid="apache.commons.classpath"/>
-            </classpath>
-        </jsf.javac>
-
-        <copy todir="${build.test.dir}">
-            <fileset dir="${test.dir}" includes="**/*.properties"/>
-        </copy>
-
-        <delete file="${basedir}/test/javax/faces/mock/MockPageContext.java"/>
-
-        <copy todir="${build.test.dir}">
-            <fileset dir="${test.dir}">
-                <exclude name="**/*.java"/>
-            </fileset>
-        </copy>
-
-       <delete dir="${build.test.dir}/META-INF/services" />
-        <mkdir dir="${build.test.dir}/META-INF/services"/>
-        <echo
-              file="${build.test.dir}/META-INF/services/javax.faces.context.ExceptionHandlerFactory">javax.faces.webapp.PreJsf2ExceptionHandlerFactory</echo>
-
-
-    </target>
-
-
-    <!--
-         ===================================================================
-           Test targets
-         ===================================================================
-    -->
-
-
-    <target name="test"
-            description="Run all JUnit test cases"
-            depends="build.test.dir,
-                copy.template.sources,
-                test.FactoryFinder,
-                test.FactoryFinder2,
-                test.PhaseId,
-                test.component,
-                test.validator,
-                test.mock,
-                test.model,
-                test.webapp">
-    </target>
-
-    <target name="test.FactoryFinder" depends="build.test.dir">
-        <echo message="Running FactoryFinder tests ..."/>
-        <mkdir dir="${build.classes.dir}/META-INF/services"/>
-        <echo
-              file="${build.classes.dir}/META-INF/services/javax.faces.context.FacesContextFactory">javax.faces.mock.MockFacesContextFactoryExtender</echo>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/FactoryFinderTestCase.class"/>
-            </tests>
-        </jsf.junit>
-        <delete dir="${build.classes.dir}/META-INF"/>
-    </target>
-
-    <target name="test.FactoryFinder2" depends="build.test.dir">
-        <echo message="Running FactoryFinder tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/FactoryFinderTestCase2.class"/>
-            </tests>
-        </jsf.junit>
-    </target>   
-
-    <target name="test.PhaseId" depends="build.test.dir">
-        <echo message="Running PhaseId tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/event/PhaseIdTest.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.component" depends="build.test.dir">
-        <echo message="Running javax.faces.component tests ..."/>
-        <delete file="${api.test.results.dir}/api-test.log"/>
-        <delete file="${api.test.results.dir}/test-logging.properties"/>
-        <echo file="${api.test.results.dir}/test-logging.properties">
-handlers=java.util.logging.FileHandler
-java.util.logging.FileHandler.append=true
-java.util.logging.FileHandler.encoding=UTF-8
-java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
-java.util.logging.FileHandler.pattern=${api.test.results.dir}/api-test.log
-javax.faces.level=ALL
-        </echo>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}"
-                   logging.config.file="${api.test.results.dir}/test-logging.properties">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/component/*TestCase.class"
-                         excludes="javax/faces/component/UIDataTestCase.class,javax/faces/component/UIFormTestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.validator" depends="build.test.dir">
-        <echo message="Running javax.faces.validator tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/validator/*TestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.mock" depends="build.test.dir">
-        <echo message="Running javax.faces.mock tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/mock/*TestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.model" depends="build.test.dir">
-        <echo message="Running javax.faces.model tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <tests>
-                <fileset dir="${build.test.dir}"
-                         includes="javax/faces/model/*TestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.webapp" depends="build.test.dir">
-        <echo message="Running javax.faces.webapp tests ..."/>
-        <jsf.junit test-results-dir="${api.test.results.dir}"
-                   classpath-refid="test.classpath"
-                   assert.classes="${assertion.classes}">
-            <custom-sysproperties>
-                <sysproperty key="base.dir" value="${basedir}/build"/>
-            </custom-sysproperties>
-            <tests>
-            <fileset dir="${build.test.dir}"
-                         includes="javax/faces/webapp/*TestCase.class"
-                         excludes="javax/faces/webapp/UIComponentTagTestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <!--
-         ===================================================================
-           Create the standard-html-renderkit.xml document
-         ===================================================================
-    -->
-
-    <target name="create.standard.xml" depends="attributes">
-        <copy
-              file="${basedir}/../jsf-ri/src/main/resources/com/sun/faces/standard-html-renderkit-impl.xml"
-              todir="${basedir}/doc"/>
-        <exec executable="xmllint" dir="${basedir}/doc" failonerror="true">
-            <arg
-                  line="--xinclude --format --output standard-html-renderkit.xml standard-html-renderkit-base.xml"/>
-        </exec>
-        <replace file="${basedir}/doc/standard-html-renderkit.xml">
-            <replacetoken>
-                <![CDATA[<?xml version="1.0" encoding="UTF-8"?>]]></replacetoken>
-            <replacevalue><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- DO NOT EDIT     DO NOT EDIT    DO NOT EDIT    DO NOT EDIT    DO NOT EDIT -->]]>
-            </replacevalue>
-        </replace>
-        <delete file="${basedir}/doc/standard-html-renderkit-impl.xml"/>
-
-        <mkdir dir="${tools.dir}/build/classes"/>
-        <antcall target="tools.javac"/>
-        <javac srcdir="${tools.dir}/src/main/java"
-               destdir="${tools.dir}/build/classes">
-            <classpath>
-                <path refid="compile.classpath"/>
-            </classpath>
-        </javac>
-
-        <!-- validate the generated standard-html-renderkit.xml -->
-        <taskdef name="validate" classname="com.sun.faces.ant.ValidateTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <validate schemaDir="${basedir}/doc"/>
-    </target>
-
-    <!--
-         ===================================================================
-           Create the jars
-         ===================================================================
-    -->
-    <target name="jars" depends="build">
-
-        <copy file="${basedir}/mojarra-jsf-api.bnd" tofile="tmp.bnd"/>
-        <replace file="tmp.bnd"
-                 token="@spec.version@"
-                 value="${spec.version}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.name@"
-                 value="${impl.name}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.version@"
-                 value="${impl.version}"/>
-        <if>
-            <equals arg1="${build.type}" arg2=""/>
-            <then>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}"/>
-            </then>
-            <else>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}-${build.type}"/>
-            </else>
-        </if>
-        <replace file="tmp.bnd"
-                 token="@extension.name@"
-                 value="javax.faces"/>
-        <jsf.osgi.jar jarfile="${build.lib.dir}/${name}.jar"
-                            basedir="${build.classes.dir}"
-                            extension-name="javax.faces"
-                            bndfile="tmp.bnd"/>
-        <delete file="tmp.bnd"/>
-
-    </target>
-
-
-    <!--
-         ===================================================================
-           Clean up build and distribution directories
-         ===================================================================
-    -->
-    <target name="clean" description="Clean build directory">
-        <delete dir="${build.dir}"/>
-        <delete dir="${target.dir}"/>
-        <delete dir="${api.test.results.dir}"/>
-        <delete>
-            <fileset dir="." includes="**/.nbattrs" defaultexcludes="no"/>
-            <fileset dir="." includes="**/*~" defaultexcludes="no"/>
-        </delete>
-        <!-- delete this file since it's copied from another file based on JSP level -->
-        <delete file="${basedir}/test/javax/faces/mock/MockPageContext.java"/>
-        <delete dir="${dist.dir}"/>
-        <delete dir="${tools.dir}/build"/>
-        <!-- delete extraneous generated doc files, if necessary -->
-        <delete>
-            <fileset dir="doc" includes="*-attrs.xml"/>
-        </delete>
-    </target>
-
-
-    <!--
-         ===================================================================
-           Clean everything
-         ===================================================================
-    -->
-    <target name="allclean" depends="clean">
-    </target>
-
-
-    <!--
-         ===================================================================
-           Create the API documentation
-         ===================================================================
-    -->
-
-    <target name="javadoc_check">
-        <uptodate property="javadoc.notrequired"
-                  targetfile="${build.javadocs.dir}/packages.html">
-            <srcfiles dir="${src.dir}" includes="**/*.java"/>
-            <srcfiles dir="${build.generate.dir}" includes="**/*.java"/>
-        </uptodate>
-    </target>
-
-    <target name="javadocs"
-            depends="prepare,javadoc_check,generate,generate.javadocs,facesdoc"
-            unless="javadoc.notrequired"
-            description="Create the JavaDoc API documentation">
-
-        <copy todir="${build.javadocs.dir}/javax/faces/component"
-              file="${src.dir}/javax/faces/component/UIComponentHierarchy.jpg"/>
-        <copy todir="${build.javadocs.dir}/javax/faces/event"
-              file="${src.dir}/javax/faces/event/EventHierarchy.jpg"/>
-
-        <copy todir="${build.javadocs.dir}/javax/faces/view/facelets"
-              file="${src.dir}/javax/faces/view/facelets/Facelets.jpg"/>
-
-        <copy todir="${build.javadocs.dir}/">
-           <fileset dir="${doc.dir}">
-             <include name="changed*.png" />
-             <include name="changed*.cur" />
-           </fileset>
-        </copy>
-
-        <copy todir="${build.managed-bean-javadocs.dir}/">
-           <fileset dir="${doc.dir}">
-             <include name="changed*.png" />
-             <include name="changed*.cur" />
-           </fileset>
-        </copy>
-
-    </target>
-
-
-    <target name="generate.javadocs">
-        <javadoc packagenames="javax.*"
-                 destdir="${build.javadocs.dir}"
-                 Overview="${resources.dir}/overview.html"
-                 private="${javadoc.private}"
-                 link="http://java.sun.com/javase/6/docs/api/"
-                 protected="${javadoc.protected}"
-                 windowtitle="${DocName} (${spec.version})"
-                 stylesheetfile="${resources.dir}/jsf-api.css"
-                 source="1.5"
-                 doctitle="${DocName} (${spec.version})"
-                 bottom="Copyright © 2002-2009 Sun Microsystems, Inc. All Rights Reserved.">
-            <fileset dir="${src.dir}">
-                <include name="**/*.java"/>
-                <exclude name="**/ApplicationScoped.java" />
-                <exclude name="**/CustomScoped.java" />
-                <exclude name="**/ManagedBean.java" />
-                <exclude name="**/ReferencedBean.java" />
-                <exclude name="**/ManagedProperty.java" />
-                <exclude name="**/NoneScoped.java" />
-                <exclude name="**/RequestScoped.java" />
-                <exclude name="**/SessionScoped.java" />
-                <exclude name="**/ViewScoped.java" />
-            </fileset>
-            <fileset dir="${build.generate.dir}">
-                <include name="**/*.java"/>
-            </fileset>
-            <classpath refid="compile.classpath"/>
-        </javadoc>
-
-        <javadoc packagenames="javax.*"
-                 destdir="${build.managed-bean-javadocs.dir}"
-                 Overview="${resources.dir}/managed-bean-overview.html"
-                 private="${javadoc.private}"
-                 link="http://java.sun.com/javase/6/docs/api/"
-                 protected="${javadoc.protected}"
-                 windowtitle="Faces Managed Bean Annotation Specification (${spec.version})"
-                 stylesheetfile="${resources.dir}/jsf-api.css"
-                 source="1.5"
-                 doctitle="Faces Managed Bean Annotation Specification (${spec.version})"
-                 bottom="Copyright © 2002-2009 Sun Microsystems, Inc. All Rights Reserved.">
-            <fileset dir="${src.dir}">
-                <include name="**/ApplicationScoped.java" />
-                <include name="**/CustomScoped.java" />
-                <include name="**/ReferencedBean.java" />
-                <include name="**/ManagedBean.java" />
-                <include name="**/ManagedProperty.java" />
-                <include name="**/NoneScoped.java" />
-                <include name="**/RequestScoped.java" />
-                <include name="**/SessionScoped.java" />
-                <include name="**/ViewScoped.java" />
-            </fileset>
-            <classpath refid="compile.classpath"/>
-        </javadoc>
-    </target>
-
-
-    <!--
-         ===================================================================
-           Main target
-         ===================================================================
-    -->
-    <target name="main" depends="update,jars"
-            description="Compile API classes and build JAR file"/>
-
-    <!--
-         ===================================================================
-           Distributions target
-         ===================================================================
-    -->
-    <target name="dist" depends="main,javadocs"
-            description="Build distribution files">
-
-        <!-- Create the distributions directory -->
-        <mkdir dir="${dist.dir}"/>
-
-        <!-- Create the binary distribution -->
-        <zip destfile="${dist.dir}/${name}-${impl.version}.zip">
-            <zipfileset dir="${build.dir}"
-                        includes="lib/**"
-                        prefix="${name}-${impl.version}"/>
-        </zip>
-
-        <!-- Create the javadocs distribution -->
-        <zip destfile="${dist.dir}/${name}-javadocs-${impl.version}.zip">
-            <zipfileset dir="${build.dir}"
-                        includes="javadocs/**"
-                        prefix="${name}-${impl.version}"/>
-            <zipfileset dir="${build.dir}/generate"
-                        includes="facesdoc/**"
-                        prefix="${name}-${impl.version}"/>
-
-        </zip>
-
-
-        <!-- Create the source distribution -->
-        <zip destfile="${dist.dir}/${name}-src-${impl.version}.zip">
-            <zipfileset dir="${basedir}"
-                        includes="build.xml COPYRIGHT LICENSE.html"
-                        prefix="${name}"/>
-            <zipfileset dir="${src.dir}"
-                        excludes="**/CVS/**"
-                        prefix="${name}/src"/>
-            <zipfileset dir="${test.dir}"
-                        excludes="**/CVS/**"
-                        prefix="${name}/test"/>
-            <zipfileset dir="${doc.dir}"
-                        includes="*.dtd,*.xsd,standard-html-renderkit.xml"
-                        prefix="${name}/doc"/>
-            <zipfileset dir="${tools.dir}"
-                        excludes="**/CVS/**, **/build/**"
-                        prefix="jsf-tools"/>
-        </zip>
-
-    </target>
-
-
-    <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO YOUR LOCAL
-       M2 REPOSITORY
-    -->
-
-    <target name="mvn.deploy.snapshot.local">
-        <mvn.deploy.snapshot.local type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted.local">
-        <mvn.deploy.promoted.local type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.release.local">
-        <mvn.deploy.release.local type="api"/>
-    </target>
-
-    <target name="mvn.deploy.api.release.local">
-        <mvn.deploy.release.local groupId="javax.faces" version="${spec.version}" type="api"/>
-    </target>
-
-
-    <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO THE
-       JAVA.NET M2 REPOSITORY
-    -->
-     <target name="mvn.deploy.snapshot">
-        <mvn.deploy.snapshot type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted">
-        <mvn.deploy.promoted type="api"/>
-    </target>
-
-
-    <target name="mvn.deploy.release">
-        <mvn.deploy.release type="api"/>
-    </target>
-
-    <target name="mvn.deploy.api.release">
-        <mvn.deploy.release groupId="javax.faces" version="${spec.version}" type="api"/>
-    </target>
-
-    <target name="apply.netbeans.186761.hack">
-
-      <copy todir="${src.dir}">
-
-        <fileset dir="${build.generate.dir}">
-          <include name="**/*.java" />
-        </fileset>
-
-      </copy>
-
-    </target>
-
-    <target name="remove.netbeans.186761.hack">
-
-      <delete failonerror="false">
-
-        <fileset dir="${src.dir}">
-          <include name="**/TypedCollections.java" />
-          <include name="**/MessageFactory.java" />
-          <include name="**/MethodBindingMethodExpressionAdapter.java" />
-          <include name="**/ValueBindingValueExpressionAdapter.java" />
-          <include name="**/MethodExpressionMethodBindingAdapter.java" />
-          <include name="**/ValueExpressionValueBindingAdapter.java" />
-          <include name="**/StateHolderSaver.java" />
-          <include name="javax/faces/component/html/*.java" />
-        </fileset>
-
-      </delete>
-
-    </target>
-
-
-</project>
diff --git a/jsf-api/doc/README.txt b/jsf-api/doc/README.txt
deleted file mode 100644
index e68b099..0000000
--- a/jsf-api/doc/README.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-WARNING:  
-
- -- Do *not* edit the "*-attrs.xml" files by hand.  They should
-    be recreated (by running "ant attributes") whenever a change is made to
-    one of the corresponding "*-props.xml" files.
-
- -- If any changes are made to any of the included documents or
-    to standard-html-renderkit-base.xml, call the ant
-    target 'create.standard.xml' to recreate standard-html-renderkit.xml.
-    The OS utility xmllint must be present on the system when the
-    target is called.
-
-    NOTE: In order for xmllint to work as expected, the system that is
-    used to call the task should have libxml2 version 2.6.8 or later.
-    The source for can be obtained here: ftp://xmlsoft.org/
-
-    Check the README included with the source bundle for instructions
-    on buidling and installing the library (this should work for
-    win32 as well - see win32/Readme.txt for details).
-
-
-
-
diff --git a/jsf-api/doc/XMLSchema.dtd b/jsf-api/doc/XMLSchema.dtd
deleted file mode 100644
index 8533c0a..0000000
--- a/jsf-api/doc/XMLSchema.dtd
+++ /dev/null
@@ -1,401 +0,0 @@
-<!-- DTD for XML Schemas: Part 1: Structures
-     Public Identifier: "-//W3C//DTD XMLSCHEMA 200102//EN"
-     Official Location: http://www.w3.org/2001/XMLSchema.dtd -->
-<!-- Note this DTD is NOT normative, or even definitive. -->           <!--d-->
-<!-- prose copy in the structures REC is the definitive version -->    <!--d-->
-<!-- (which shouldn't differ from this one except for this -->         <!--d-->
-<!-- comment and entity expansions, but just in case) -->              <!--d-->
-<!-- With the exception of cases with multiple namespace
-     prefixes for the XML Schema namespace, any XML document which is
-     not valid per this DTD given redefinitions in its internal subset of the
-     'p' and 's' parameter entities below appropriate to its namespace
-     declaration of the XML Schema namespace is almost certainly not
-     a valid schema. -->
-
-<!-- The simpleType element and its constituent parts
-     are defined in XML Schema: Part 2: Datatypes -->
-<!ENTITY % xs-datatypes PUBLIC 'datatypes' 'datatypes.dtd' >
-
-<!ENTITY % p 'xs:'> <!-- can be overriden in the internal subset of a
-                         schema document to establish a different
-                         namespace prefix -->
-<!ENTITY % s ':xs'> <!-- if %p is defined (e.g. as foo:) then you must
-                         also define %s as the suffix for the appropriate
-                         namespace declaration (e.g. :foo) -->
-<!ENTITY % nds 'xmlns%s;'>
-
-<!-- Define all the element names, with optional prefix -->
-<!ENTITY % schema "%p;schema">
-<!ENTITY % complexType "%p;complexType">
-<!ENTITY % complexContent "%p;complexContent">
-<!ENTITY % simpleContent "%p;simpleContent">
-<!ENTITY % extension "%p;extension">
-<!ENTITY % element "%p;element">
-<!ENTITY % unique "%p;unique">
-<!ENTITY % key "%p;key">
-<!ENTITY % keyref "%p;keyref">
-<!ENTITY % selector "%p;selector">
-<!ENTITY % field "%p;field">
-<!ENTITY % group "%p;group">
-<!ENTITY % all "%p;all">
-<!ENTITY % choice "%p;choice">
-<!ENTITY % sequence "%p;sequence">
-<!ENTITY % any "%p;any">
-<!ENTITY % anyAttribute "%p;anyAttribute">
-<!ENTITY % attribute "%p;attribute">
-<!ENTITY % attributeGroup "%p;attributeGroup">
-<!ENTITY % include "%p;include">
-<!ENTITY % import "%p;import">
-<!ENTITY % redefine "%p;redefine">
-<!ENTITY % notation "%p;notation">
-
-<!-- annotation elements -->
-<!ENTITY % annotation "%p;annotation">
-<!ENTITY % appinfo "%p;appinfo">
-<!ENTITY % documentation "%p;documentation">
-
-<!-- Customisation entities for the ATTLIST of each element type.
-     Define one of these if your schema takes advantage of the
-     anyAttribute='##other' in the schema for schemas -->
-
-<!ENTITY % schemaAttrs ''>
-<!ENTITY % complexTypeAttrs ''>
-<!ENTITY % complexContentAttrs ''>
-<!ENTITY % simpleContentAttrs ''>
-<!ENTITY % extensionAttrs ''>
-<!ENTITY % elementAttrs ''>
-<!ENTITY % groupAttrs ''>
-<!ENTITY % allAttrs ''>
-<!ENTITY % choiceAttrs ''>
-<!ENTITY % sequenceAttrs ''>
-<!ENTITY % anyAttrs ''>
-<!ENTITY % anyAttributeAttrs ''>
-<!ENTITY % attributeAttrs ''>
-<!ENTITY % attributeGroupAttrs ''>
-<!ENTITY % uniqueAttrs ''>
-<!ENTITY % keyAttrs ''>
-<!ENTITY % keyrefAttrs ''>
-<!ENTITY % selectorAttrs ''>
-<!ENTITY % fieldAttrs ''>
-<!ENTITY % includeAttrs ''>
-<!ENTITY % importAttrs ''>
-<!ENTITY % redefineAttrs ''>
-<!ENTITY % notationAttrs ''>
-<!ENTITY % annotationAttrs ''>
-<!ENTITY % appinfoAttrs ''>
-<!ENTITY % documentationAttrs ''>
-
-<!ENTITY % complexDerivationSet "CDATA">
-      <!-- #all or space-separated list drawn from derivationChoice -->
-<!ENTITY % blockSet "CDATA">
-      <!-- #all or space-separated list drawn from
-                      derivationChoice + 'substitution' -->
-
-<!ENTITY % mgs '%all; | %choice; | %sequence;'>
-<!ENTITY % cs '%choice; | %sequence;'>
-<!ENTITY % formValues '(qualified|unqualified)'>
-
-
-<!ENTITY % attrDecls    '((%attribute;| %attributeGroup;)*,(%anyAttribute;)?)'>
-
-<!ENTITY % particleAndAttrs '((%mgs; | %group;)?, %attrDecls;)'>
-
-<!-- This is used in part2 -->
-<!ENTITY % restriction1 '((%mgs; | %group;)?)'>
-
-%xs-datatypes;
-
-<!-- the duplication below is to produce an unambiguous content model
-     which allows annotation everywhere -->
-<!ELEMENT %schema; ((%include; | %import; | %redefine; | %annotation;)*,
-                    ((%simpleType; | %complexType;
-                      | %element; | %attribute;
-                      | %attributeGroup; | %group;
-                      | %notation; ),
-                     (%annotation;)*)* )>
-<!ATTLIST %schema;
-   targetNamespace      %URIref;               #IMPLIED
-   version              CDATA                  #IMPLIED
-   %nds;                %URIref;               #FIXED 'http://www.w3.org/2001/XMLSchema'
-   xmlns                CDATA                  #IMPLIED
-   finalDefault         %complexDerivationSet; ''
-   blockDefault         %blockSet;             ''
-   id                   ID                     #IMPLIED
-   elementFormDefault   %formValues;           'unqualified'
-   attributeFormDefault %formValues;           'unqualified'
-   xml:lang             CDATA                  #IMPLIED
-   %schemaAttrs;>
-<!-- Note the xmlns declaration is NOT in the Schema for Schemas,
-     because at the Infoset level where schemas operate,
-     xmlns(:prefix) is NOT an attribute! -->
-<!-- The declaration of xmlns is a convenience for schema authors -->
- 
-<!-- The id attribute here and below is for use in external references
-     from non-schemas using simple fragment identifiers.
-     It is NOT used for schema-to-schema reference, internal or
-     external. -->
-
-<!-- a type is a named content type specification which allows attribute
-     declarations-->
-<!-- -->
-
-<!ELEMENT %complexType; ((%annotation;)?,
-                         (%simpleContent;|%complexContent;|
-                          %particleAndAttrs;))>
-
-<!ATTLIST %complexType;
-          name      %NCName;                        #IMPLIED
-          id        ID                              #IMPLIED
-          abstract  %boolean;                       #IMPLIED
-          final     %complexDerivationSet;          #IMPLIED
-          block     %complexDerivationSet;          #IMPLIED
-          mixed (true|false) 'false'
-          %complexTypeAttrs;>
-
-<!-- particleAndAttrs is shorthand for a root type -->
-<!-- mixed is disallowed if simpleContent, overriden if complexContent
-     has one too. -->
-
-<!-- If anyAttribute appears in one or more referenced attributeGroups
-     and/or explicitly, the intersection of the permissions is used -->
-
-<!ELEMENT %complexContent; ((%annotation;)?, (%restriction;|%extension;))>
-<!ATTLIST %complexContent;
-          mixed (true|false) #IMPLIED
-          id    ID           #IMPLIED
-          %complexContentAttrs;>
-
-<!-- restriction should use the branch defined above, not the simple
-     one from part2; extension should use the full model  -->
-
-<!ELEMENT %simpleContent; ((%annotation;)?, (%restriction;|%extension;))>
-<!ATTLIST %simpleContent;
-          id    ID           #IMPLIED
-          %simpleContentAttrs;>
-
-<!-- restriction should use the simple branch from part2, not the 
-     one defined above; extension should have no particle  -->
-
-<!ELEMENT %extension; ((%annotation;)?, (%particleAndAttrs;))>
-<!ATTLIST %extension;
-          base  %QName;      #REQUIRED
-          id    ID           #IMPLIED
-          %extensionAttrs;>
-
-<!-- an element is declared by either:
- a name and a type (either nested or referenced via the type attribute)
- or a ref to an existing element declaration -->
-
-<!ELEMENT %element; ((%annotation;)?, (%complexType;| %simpleType;)?,
-                     (%unique; | %key; | %keyref;)*)>
-<!-- simpleType or complexType only if no type|ref attribute -->
-<!-- ref not allowed at top level -->
-<!ATTLIST %element;
-            name               %NCName;               #IMPLIED
-            id                 ID                     #IMPLIED
-            ref                %QName;                #IMPLIED
-            type               %QName;                #IMPLIED
-            minOccurs          %nonNegativeInteger;   #IMPLIED
-            maxOccurs          CDATA                  #IMPLIED
-            nillable           %boolean;              #IMPLIED
-            substitutionGroup  %QName;                #IMPLIED
-            abstract           %boolean;              #IMPLIED
-            final              %complexDerivationSet; #IMPLIED
-            block              %blockSet;             #IMPLIED
-            default            CDATA                  #IMPLIED
-            fixed              CDATA                  #IMPLIED
-            form               %formValues;           #IMPLIED
-            %elementAttrs;>
-<!-- type and ref are mutually exclusive.
-     name and ref are mutually exclusive, one is required -->
-<!-- In the absence of type AND ref, type defaults to type of
-     substitutionGroup, if any, else the ur-type, i.e. unconstrained -->
-<!-- default and fixed are mutually exclusive -->
-
-<!ELEMENT %group; ((%annotation;)?,(%mgs;)?)>
-<!ATTLIST %group; 
-          name        %NCName;               #IMPLIED
-          ref         %QName;                #IMPLIED
-          minOccurs   %nonNegativeInteger;   #IMPLIED
-          maxOccurs   CDATA                  #IMPLIED
-          id          ID                     #IMPLIED
-          %groupAttrs;>
-
-<!ELEMENT %all; ((%annotation;)?, (%element;)*)>
-<!ATTLIST %all;
-          minOccurs   (1)                    #IMPLIED
-          maxOccurs   (1)                    #IMPLIED
-          id          ID                     #IMPLIED
-          %allAttrs;>
-
-<!ELEMENT %choice; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)>
-<!ATTLIST %choice;
-          minOccurs   %nonNegativeInteger;   #IMPLIED
-          maxOccurs   CDATA                  #IMPLIED
-          id          ID                     #IMPLIED
-          %choiceAttrs;>
-
-<!ELEMENT %sequence; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)>
-<!ATTLIST %sequence;
-          minOccurs   %nonNegativeInteger;   #IMPLIED
-          maxOccurs   CDATA                  #IMPLIED
-          id          ID                     #IMPLIED
-          %sequenceAttrs;>
-
-<!-- an anonymous grouping in a model, or
-     a top-level named group definition, or a reference to same -->
-
-<!-- Note that if order is 'all', group is not allowed inside.
-     If order is 'all' THIS group must be alone (or referenced alone) at
-     the top level of a content model -->
-<!-- If order is 'all', minOccurs==maxOccurs==1 on element/any inside -->
-<!-- Should allow minOccurs=0 inside order='all' . . . -->
-
-<!ELEMENT %any; (%annotation;)?>
-<!ATTLIST %any;
-            namespace       CDATA                  '##any'
-            processContents (skip|lax|strict)      'strict'
-            minOccurs       %nonNegativeInteger;   '1'
-            maxOccurs       CDATA                  '1'
-            id              ID                     #IMPLIED
-            %anyAttrs;>
-
-<!-- namespace is interpreted as follows:
-                  ##any      - - any non-conflicting WFXML at all
-
-                  ##other    - - any non-conflicting WFXML from namespace other
-                                  than targetNamespace
-
-                  ##local    - - any unqualified non-conflicting WFXML/attribute
-                  one or     - - any non-conflicting WFXML from
-                  more URI        the listed namespaces
-                  references
-
-                  ##targetNamespace ##local may appear in the above list,
-                    with the obvious meaning -->
-
-<!ELEMENT %anyAttribute; (%annotation;)?>
-<!ATTLIST %anyAttribute;
-            namespace       CDATA              '##any'
-            processContents (skip|lax|strict)  'strict'
-            id              ID                 #IMPLIED
-            %anyAttributeAttrs;>
-<!-- namespace is interpreted as for 'any' above -->
-
-<!-- simpleType only if no type|ref attribute -->
-<!-- ref not allowed at top level, name iff at top level -->
-<!ELEMENT %attribute; ((%annotation;)?, (%simpleType;)?)>
-<!ATTLIST %attribute;
-          name      %NCName;      #IMPLIED
-          id        ID            #IMPLIED
-          ref       %QName;       #IMPLIED
-          type      %QName;       #IMPLIED
-          use       (prohibited|optional|required) #IMPLIED
-          default   CDATA         #IMPLIED
-          fixed     CDATA         #IMPLIED
-          form      %formValues;  #IMPLIED
-          %attributeAttrs;>
-<!-- type and ref are mutually exclusive.
-     name and ref are mutually exclusive, one is required -->
-<!-- default for use is optional when nested, none otherwise -->
-<!-- default and fixed are mutually exclusive -->
-<!-- type attr and simpleType content are mutually exclusive -->
-
-<!-- an attributeGroup is a named collection of attribute decls, or a
-     reference thereto -->
-<!ELEMENT %attributeGroup; ((%annotation;)?,
-                       (%attribute; | %attributeGroup;)*,
-                       (%anyAttribute;)?) >
-<!ATTLIST %attributeGroup;
-                 name       %NCName;       #IMPLIED
-                 id         ID             #IMPLIED
-                 ref        %QName;        #IMPLIED
-                 %attributeGroupAttrs;>
-
-<!-- ref iff no content, no name.  ref iff not top level -->
-
-<!-- better reference mechanisms -->
-<!ELEMENT %unique; ((%annotation;)?, %selector;, (%field;)+)>
-<!ATTLIST %unique;
-          name     %NCName;       #REQUIRED
-	  id       ID             #IMPLIED
-	  %uniqueAttrs;>
-
-<!ELEMENT %key;    ((%annotation;)?, %selector;, (%field;)+)>
-<!ATTLIST %key;
-          name     %NCName;       #REQUIRED
-	  id       ID             #IMPLIED
-	  %keyAttrs;>
-
-<!ELEMENT %keyref; ((%annotation;)?, %selector;, (%field;)+)>
-<!ATTLIST %keyref;
-          name     %NCName;       #REQUIRED
-	  refer    %QName;        #REQUIRED
-	  id       ID             #IMPLIED
-	  %keyrefAttrs;>
-
-<!ELEMENT %selector; ((%annotation;)?)>
-<!ATTLIST %selector;
-          xpath %XPathExpr; #REQUIRED
-          id    ID          #IMPLIED
-          %selectorAttrs;>
-<!ELEMENT %field; ((%annotation;)?)>
-<!ATTLIST %field;
-          xpath %XPathExpr; #REQUIRED
-          id    ID          #IMPLIED
-          %fieldAttrs;>
-
-<!-- Schema combination mechanisms -->
-<!ELEMENT %include; (%annotation;)?>
-<!ATTLIST %include;
-          schemaLocation %URIref; #REQUIRED
-          id             ID       #IMPLIED
-          %includeAttrs;>
-
-<!ELEMENT %import; (%annotation;)?>
-<!ATTLIST %import;
-          namespace      %URIref; #IMPLIED
-          schemaLocation %URIref; #IMPLIED
-          id             ID       #IMPLIED
-          %importAttrs;>
-
-<!ELEMENT %redefine; (%annotation; | %simpleType; | %complexType; |
-                      %attributeGroup; | %group;)*>
-<!ATTLIST %redefine;
-          schemaLocation %URIref; #REQUIRED
-          id             ID       #IMPLIED
-          %redefineAttrs;>
-
-<!ELEMENT %notation; (%annotation;)?>
-<!ATTLIST %notation;
-	  name        %NCName;    #REQUIRED
-	  id          ID          #IMPLIED
-	  public      CDATA       #REQUIRED
-	  system      %URIref;    #IMPLIED
-	  %notationAttrs;>
-
-<!-- Annotation is either application information or documentation -->
-<!-- By having these here they are available for datatypes as well
-     as all the structures elements -->
-
-<!ELEMENT %annotation; (%appinfo; | %documentation;)*>
-<!ATTLIST %annotation; %annotationAttrs;>
-
-<!-- User must define annotation elements in internal subset for this
-     to work -->
-<!ELEMENT %appinfo; ANY>   <!-- too restrictive -->
-<!ATTLIST %appinfo;
-          source     %URIref;      #IMPLIED
-          id         ID         #IMPLIED
-          %appinfoAttrs;>
-<!ELEMENT %documentation; ANY>   <!-- too restrictive -->
-<!ATTLIST %documentation;
-          source     %URIref;   #IMPLIED
-          id         ID         #IMPLIED
-          xml:lang   CDATA      #IMPLIED
-          %documentationAttrs;>
-
-<!NOTATION XMLSchemaStructures PUBLIC
-           'structures' 'http://www.w3.org/2001/XMLSchema.xsd' >
-<!NOTATION XML PUBLIC
-           'REC-xml-1998-0210' 'http://www.w3.org/TR/1998/REC-xml-19980210' >
diff --git a/jsf-api/doc/actionsource-props.xml b/jsf-api/doc/actionsource-props.xml
deleted file mode 100644
index d9ccf4c..0000000
--- a/jsf-api/doc/actionsource-props.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== ActionSource Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          MethodExpression representing the application action to invoke
-          when this component is activated by the user.  The expression
-          must evaluate to a public method that takes no parameters, and
-          returns an Object (the toString() of which is called to derive
-          the logical outcome) which is passed to the NavigationHandler
-          for this application.
-        </description>
-        <display-name>Application Action</display-name>
-        <icon></icon>
-        <property-name>action</property-name>
-        <property-class>javax.el.MethodExpression</property-class>
-        <property-extension>
-            <method-signature>
-                java.lang.Object action()
-            </method-signature>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-            <![CDATA[<p>
-
-          MethodExpression representing an action listener method that
-          will be notified when this component is activated by the user.
-          The expression must evaluate to a public method that takes an
-          ActionEvent parameter, with a return type of void, <span
-          class="changed_added_2_0">or to a public method that takes no
-          arguments with a return type of void.  In the latter case, the
-          method has no way of easily knowing where the event came from,
-          but this can be useful in cases where a notification is needed
-          that "some action happened".</span>
-
-</p>]]>
-        </description>
-        <display-name>Action Listener</display-name>
-        <icon></icon>
-        <property-name>actionListener</property-name>
-        <property-class>javax.el.MethodExpression</property-class>
-        <property-extension>
-            <method-signature>
-                void actionListener(javax.faces.event.ActionEvent)
-            </method-signature>
-<!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void actionListener()
-            </method-signature>
--->
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that, if this component is activated by the user,
-          notifications should be delivered to interested listeners and actions
-          immediately (that is, during Apply Request Values phase) rather than
-          waiting until Invoke Application phase.
-        </description>
-        <display-name>Immediate Action</display-name>
-        <icon></icon>
-        <property-name>immediate</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/actionsource2-props.xml b/jsf-api/doc/actionsource2-props.xml
deleted file mode 100644
index c79e438..0000000
--- a/jsf-api/doc/actionsource2-props.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== ActionSource Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          MethodExpression representing the application action to invoke
-          when this component is activated by the user.  The expression
-          must evaluate to a public method that takes no parameters, and
-          returns an Object (the toString() of which is called to derive
-          the logical outcome) which is passed to the NavigationHandler
-          for this application.
-        </description>
-        <display-name>Application Action</display-name>
-        <icon></icon>
-        <property-name>actionExpression</property-name>
-        <property-class>javax.el.MethodExpression</property-class>
-        <property-extension>
-            <method-signature>
-                java.lang.Object action()
-            </method-signature>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/base-props.xml b/jsf-api/doc/base-props.xml
deleted file mode 100644
index 8443f40..0000000
--- a/jsf-api/doc/base-props.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- template
-
-      <property>
-        <description></description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
--->
-<root>
-    <property>
-        <description>The component identifier for the associated component</description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name>id</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>The value binding expression used to wire up this component to a component property of a JavaBean class</description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name>binding</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>An override for the rendered attribute associated with our component</description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name>rendered</property-name>
-        <property-class>boolean</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/changed_added_2_0.png b/jsf-api/doc/changed_added_2_0.png
deleted file mode 100644
index c1f4b58..0000000
Binary files a/jsf-api/doc/changed_added_2_0.png and /dev/null differ
diff --git a/jsf-api/doc/changed_added_2_0.psd b/jsf-api/doc/changed_added_2_0.psd
deleted file mode 100644
index 9d1cbc2..0000000
Binary files a/jsf-api/doc/changed_added_2_0.psd and /dev/null differ
diff --git a/jsf-api/doc/changed_added_2_0_cursor.png b/jsf-api/doc/changed_added_2_0_cursor.png
deleted file mode 100644
index 7888b01..0000000
Binary files a/jsf-api/doc/changed_added_2_0_cursor.png and /dev/null differ
diff --git a/jsf-api/doc/changed_added_2_0_cursor.psd b/jsf-api/doc/changed_added_2_0_cursor.psd
deleted file mode 100644
index 68dd5bc..0000000
Binary files a/jsf-api/doc/changed_added_2_0_cursor.psd and /dev/null differ
diff --git a/jsf-api/doc/changed_added_2_0_rev_a.png b/jsf-api/doc/changed_added_2_0_rev_a.png
deleted file mode 100644
index c1f4b58..0000000
Binary files a/jsf-api/doc/changed_added_2_0_rev_a.png and /dev/null differ
diff --git a/jsf-api/doc/changed_added_2_0_rev_a_cursor.cur b/jsf-api/doc/changed_added_2_0_rev_a_cursor.cur
deleted file mode 100644
index 849d626..0000000
Binary files a/jsf-api/doc/changed_added_2_0_rev_a_cursor.cur and /dev/null differ
diff --git a/jsf-api/doc/changed_deleted_2_0.png b/jsf-api/doc/changed_deleted_2_0.png
deleted file mode 100644
index 1c88708..0000000
Binary files a/jsf-api/doc/changed_deleted_2_0.png and /dev/null differ
diff --git a/jsf-api/doc/changed_deleted_2_0.psd b/jsf-api/doc/changed_deleted_2_0.psd
deleted file mode 100644
index 343a2e3..0000000
Binary files a/jsf-api/doc/changed_deleted_2_0.psd and /dev/null differ
diff --git a/jsf-api/doc/changed_deleted_2_0_cursor.png b/jsf-api/doc/changed_deleted_2_0_cursor.png
deleted file mode 100644
index a48d9e1..0000000
Binary files a/jsf-api/doc/changed_deleted_2_0_cursor.png and /dev/null differ
diff --git a/jsf-api/doc/changed_deleted_2_0_cursor.psd b/jsf-api/doc/changed_deleted_2_0_cursor.psd
deleted file mode 100644
index 5f7042b..0000000
Binary files a/jsf-api/doc/changed_deleted_2_0_cursor.psd and /dev/null differ
diff --git a/jsf-api/doc/changed_deleted_2_0_rev_a.png b/jsf-api/doc/changed_deleted_2_0_rev_a.png
deleted file mode 100644
index 1c88708..0000000
Binary files a/jsf-api/doc/changed_deleted_2_0_rev_a.png and /dev/null differ
diff --git a/jsf-api/doc/changed_deleted_2_0_rev_a_cursor.cur b/jsf-api/doc/changed_deleted_2_0_rev_a_cursor.cur
deleted file mode 100644
index 1854f15..0000000
Binary files a/jsf-api/doc/changed_deleted_2_0_rev_a_cursor.cur and /dev/null differ
diff --git a/jsf-api/doc/changed_modified_2_0.png b/jsf-api/doc/changed_modified_2_0.png
deleted file mode 100644
index 93d9a62..0000000
Binary files a/jsf-api/doc/changed_modified_2_0.png and /dev/null differ
diff --git a/jsf-api/doc/changed_modified_2_0.psd b/jsf-api/doc/changed_modified_2_0.psd
deleted file mode 100644
index c66773d..0000000
Binary files a/jsf-api/doc/changed_modified_2_0.psd and /dev/null differ
diff --git a/jsf-api/doc/changed_modified_2_0_cursor.png b/jsf-api/doc/changed_modified_2_0_cursor.png
deleted file mode 100644
index 79591ea..0000000
Binary files a/jsf-api/doc/changed_modified_2_0_cursor.png and /dev/null differ
diff --git a/jsf-api/doc/changed_modified_2_0_cursor.psd b/jsf-api/doc/changed_modified_2_0_cursor.psd
deleted file mode 100644
index 4caf790..0000000
Binary files a/jsf-api/doc/changed_modified_2_0_cursor.psd and /dev/null differ
diff --git a/jsf-api/doc/changed_modified_2_0_rev_a.png b/jsf-api/doc/changed_modified_2_0_rev_a.png
deleted file mode 100644
index 93d9a62..0000000
Binary files a/jsf-api/doc/changed_modified_2_0_rev_a.png and /dev/null differ
diff --git a/jsf-api/doc/changed_modified_2_0_rev_a_cursor.cur b/jsf-api/doc/changed_modified_2_0_rev_a_cursor.cur
deleted file mode 100644
index c19f1e8..0000000
Binary files a/jsf-api/doc/changed_modified_2_0_rev_a_cursor.cur and /dev/null differ
diff --git a/jsf-api/doc/column-props.xml b/jsf-api/doc/column-props.xml
deleted file mode 100644
index 7386b4c..0000000
--- a/jsf-api/doc/column-props.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Table Properties =========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any header generated for this column.
-        </description>
-        <display-name>Header CSS Classes</display-name>
-        <icon></icon>
-        <property-name>headerClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any footer generated for this column.
-        </description>
-        <display-name>Footer CSS Classes</display-name>
-        <icon></icon>
-        <property-name>footerClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that this column is a row header column and
-          therefore cells in this column should be rendered with "th"
-          instead of "td" and must have the 'scope="row"' attribute.
-        </description>
-        <display-name>Column is Row Header</display-name>
-        <icon></icon>
-        <property-name>rowHeader</property-name>
-        <property-class>boolean</property-class>
-    </property>
-
-</root>
diff --git a/jsf-api/doc/command-button-props.xml b/jsf-api/doc/command-button-props.xml
deleted file mode 100644
index cc8d48f..0000000
--- a/jsf-api/doc/command-button-props.xml
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Command+Button Properties ================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon></icon>
-        <property-name>onclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-            <behavior/>
-            <behavior>action</behavior>
-            <default-behavior>true</default-behavior>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon></icon>
-        <property-name>ondblclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon></icon>
-        <property-name>onchange</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon></icon>
-        <property-name>onmousedown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon></icon>
-        <property-name>onmouseup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon></icon>
-        <property-name>onmouseover</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon></icon>
-        <property-name>onmousemove</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon></icon>
-        <property-name>onmouseout</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon></icon>
-        <property-name>onkeypress</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon></icon>
-        <property-name>onkeydown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon></icon>
-        <property-name>onkeyup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-      <description>
-         Type of button to create.  Valid values are "submit", "button",
-         and "reset".  If not specified, or not a valid value, the default
-         value is "submit".
-      </description>
-      <display-name>Button Type</display-name>
-      <icon></icon>
-      <property-name>type</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <default-value>"submit"</default-value>
-      </property-extension>
-    </property>
-
-</root>
-
diff --git a/jsf-api/doc/core-props.xml b/jsf-api/doc/core-props.xml
deleted file mode 100644
index d84c284..0000000
--- a/jsf-api/doc/core-props.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Core Properties ============================================ -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon></icon>
-        <property-name>style</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon></icon>
-        <property-name>styleClass</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon></icon>
-        <property-name>title</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/datatypes.dtd b/jsf-api/doc/datatypes.dtd
deleted file mode 100644
index fc4e196..0000000
--- a/jsf-api/doc/datatypes.dtd
+++ /dev/null
@@ -1,202 +0,0 @@
-<!--
-        DTD for XML Schemas: Part 2: Datatypes
-        Note this DTD is NOT normative, or even definitive. - - the
-        prose copy in the datatypes REC is the definitive version
-        (which shouldn't differ from this one except for this comment
-        and entity expansions, but just in case)
-  -->
-
-<!--
-        This DTD cannot be used on its own, it is intended
-        only for incorporation in XMLSchema.dtd, q.v.
-  -->
-
-<!-- Define all the element names, with optional prefix -->
-<!ENTITY % simpleType "%p;simpleType">
-<!ENTITY % restriction "%p;restriction">
-<!ENTITY % list "%p;list">
-<!ENTITY % union "%p;union">
-<!ENTITY % maxExclusive "%p;maxExclusive">
-<!ENTITY % minExclusive "%p;minExclusive">
-<!ENTITY % maxInclusive "%p;maxInclusive">
-<!ENTITY % minInclusive "%p;minInclusive">
-<!ENTITY % totalDigits "%p;totalDigits">
-<!ENTITY % fractionDigits "%p;fractionDigits">
-<!ENTITY % length "%p;length">
-<!ENTITY % minLength "%p;minLength">
-<!ENTITY % maxLength "%p;maxLength">
-<!ENTITY % enumeration "%p;enumeration">
-<!ENTITY % whiteSpace "%p;whiteSpace">
-<!ENTITY % pattern "%p;pattern">
-
-<!--
-        Customisation entities for the ATTLIST of each element
-        type. Define one of these if your schema takes advantage
-        of the anyAttribute='##other' in the schema for schemas
-  -->
-
-<!ENTITY % simpleTypeAttrs "">
-<!ENTITY % restrictionAttrs "">
-<!ENTITY % listAttrs "">
-<!ENTITY % unionAttrs "">
-<!ENTITY % maxExclusiveAttrs "">
-<!ENTITY % minExclusiveAttrs "">
-<!ENTITY % maxInclusiveAttrs "">
-<!ENTITY % minInclusiveAttrs "">
-<!ENTITY % totalDigitsAttrs "">
-<!ENTITY % fractionDigitsAttrs "">
-<!ENTITY % lengthAttrs "">
-<!ENTITY % minLengthAttrs "">
-<!ENTITY % maxLengthAttrs "">
-<!ENTITY % enumerationAttrs "">
-<!ENTITY % whiteSpaceAttrs "">
-<!ENTITY % patternAttrs "">
-
-<!-- Define some entities for informative use as attribute
-        types -->
-<!ENTITY % URIref "CDATA">
-<!ENTITY % XPathExpr "CDATA">
-<!ENTITY % QName "NMTOKEN">
-<!ENTITY % QNames "NMTOKENS">
-<!ENTITY % NCName "NMTOKEN">
-<!ENTITY % nonNegativeInteger "NMTOKEN">
-<!ENTITY % boolean "(true|false)">
-<!ENTITY % simpleDerivationSet "CDATA">
-<!--
-        #all or space-separated list drawn from derivationChoice
-  -->
-
-<!--
-        Note that the use of 'facet' below is less restrictive
-        than is really intended:  There should in fact be no
-        more than one of each of minInclusive, minExclusive,
-        maxInclusive, maxExclusive, totalDigits, fractionDigits,
-        length, maxLength, minLength within datatype,
-        and the min- and max- variants of Inclusive and Exclusive
-        are mutually exclusive. On the other hand,  pattern and
-        enumeration may repeat.
-  -->
-<!ENTITY % minBound "(%minInclusive; | %minExclusive;)">
-<!ENTITY % maxBound "(%maxInclusive; | %maxExclusive;)">
-<!ENTITY % bounds "%minBound; | %maxBound;">
-<!ENTITY % numeric "%totalDigits; | %fractionDigits;">
-<!ENTITY % ordered "%bounds; | %numeric;">
-<!ENTITY % unordered
-   "%pattern; | %enumeration; | %whiteSpace; | %length; |
-   %maxLength; | %minLength;">
-<!ENTITY % facet "%ordered; | %unordered;">
-<!ENTITY % facetAttr 
-        "value CDATA #REQUIRED
-        id ID #IMPLIED">
-<!ENTITY % fixedAttr "fixed %boolean; #IMPLIED">
-<!ENTITY % facetModel "(%annotation;)?">
-<!ELEMENT %simpleType;
-        ((%annotation;)?, (%restriction; | %list; | %union;))>
-<!ATTLIST %simpleType;
-    name      %NCName; #IMPLIED
-    final     %simpleDerivationSet; #IMPLIED
-    id        ID       #IMPLIED
-    %simpleTypeAttrs;>
-<!-- name is required at top level -->
-<!ELEMENT %restriction; ((%annotation;)?,
-                         (%restriction1; |
-                          ((%simpleType;)?,(%facet;)*)),
-                         (%attrDecls;))>
-<!ATTLIST %restriction;
-    base      %QName;                  #IMPLIED
-    id        ID       #IMPLIED
-    %restrictionAttrs;>
-<!--
-        base and simpleType child are mutually exclusive,
-        one is required.
-
-        restriction is shared between simpleType and
-        simpleContent and complexContent (in XMLSchema.xsd).
-        restriction1 is for the latter cases, when this
-        is restricting a complex type, as is attrDecls.
-  -->
-<!ELEMENT %list; ((%annotation;)?,(%simpleType;)?)>
-<!ATTLIST %list;
-    itemType      %QName;             #IMPLIED
-    id        ID       #IMPLIED
-    %listAttrs;>
-<!--
-        itemType and simpleType child are mutually exclusive,
-        one is required
-  -->
-<!ELEMENT %union; ((%annotation;)?,(%simpleType;)*)>
-<!ATTLIST %union;
-    id            ID       #IMPLIED
-    memberTypes   %QNames;            #IMPLIED
-    %unionAttrs;>
-<!--
-        At least one item in memberTypes or one simpleType
-        child is required
-  -->
-
-<!ELEMENT %maxExclusive; %facetModel;>
-<!ATTLIST %maxExclusive;
-        %facetAttr;
-        %fixedAttr;
-        %maxExclusiveAttrs;>
-<!ELEMENT %minExclusive; %facetModel;>
-<!ATTLIST %minExclusive;
-        %facetAttr;
-        %fixedAttr;
-        %minExclusiveAttrs;>
-
-<!ELEMENT %maxInclusive; %facetModel;>
-<!ATTLIST %maxInclusive;
-        %facetAttr;
-        %fixedAttr;
-        %maxInclusiveAttrs;>
-<!ELEMENT %minInclusive; %facetModel;>
-<!ATTLIST %minInclusive;
-        %facetAttr;
-        %fixedAttr;
-        %minInclusiveAttrs;>
-
-<!ELEMENT %totalDigits; %facetModel;>
-<!ATTLIST %totalDigits;
-        %facetAttr;
-        %fixedAttr;
-        %totalDigitsAttrs;>
-<!ELEMENT %fractionDigits; %facetModel;>
-<!ATTLIST %fractionDigits;
-        %facetAttr;
-        %fixedAttr;
-        %fractionDigitsAttrs;>
-
-<!ELEMENT %length; %facetModel;>
-<!ATTLIST %length;
-        %facetAttr;
-        %fixedAttr;
-        %lengthAttrs;>
-<!ELEMENT %minLength; %facetModel;>
-<!ATTLIST %minLength;
-        %facetAttr;
-        %fixedAttr;
-        %minLengthAttrs;>
-<!ELEMENT %maxLength; %facetModel;>
-<!ATTLIST %maxLength;
-        %facetAttr;
-        %fixedAttr;
-        %maxLengthAttrs;>
-
-<!-- This one can be repeated -->
-<!ELEMENT %enumeration; %facetModel;>
-<!ATTLIST %enumeration;
-        %facetAttr;
-        %enumerationAttrs;>
-
-<!ELEMENT %whiteSpace; %facetModel;>
-<!ATTLIST %whiteSpace;
-        %facetAttr;
-        %fixedAttr;
-        %whiteSpaceAttrs;>
-
-<!-- This one can be repeated -->
-<!ELEMENT %pattern; %facetModel;>
-<!ATTLIST %pattern;
-        %facetAttr;
-        %patternAttrs;>
diff --git a/jsf-api/doc/direct-link-props.xml b/jsf-api/doc/direct-link-props.xml
deleted file mode 100644
index 3d0a80d..0000000
--- a/jsf-api/doc/direct-link-props.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Link Properties ============================================ -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          The identifier of the page fragment which should
-          be brought into focus when the target page is
-          rendered. The value of this attribute is appended
-          to the end of target URL following a hash (#) mark.
-          This notation is part of the standard URL syntax.
-        </description>
-        <display-name>Fragment Identifier</display-name>
-        <icon></icon>
-        <property-name>fragment</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-</root>
diff --git a/jsf-api/doc/editable-props.xml b/jsf-api/doc/editable-props.xml
deleted file mode 100644
index 1e8823a..0000000
--- a/jsf-api/doc/editable-props.xml
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== EditableValueHolder Properties ============================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-        <display-name>Local Value Set</display-name>
-        <icon></icon>
-        <property-name>localValueSet</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-        <display-name>Required Flag</display-name>
-        <icon></icon>
-        <property-name>required</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-        <display-name>Required Message</display-name>
-        <icon></icon>
-        <property-name>requiredMessage</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-        <display-name>Converter Message</display-name>
-        <icon></icon>
-        <property-name>converterMessage</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-        <display-name>Validator Message</display-name>
-        <icon></icon>
-        <property-name>validatorMessage</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-        <display-name>Submitted Value</display-name>
-        <icon></icon>
-        <property-name>submittedValue</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-        <display-name>Validator</display-name>
-        <icon></icon>
-        <property-name>validator</property-name>
-        <property-class>javax.el.MethodExpression</property-class>
-        <property-extension>
-            <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-            <![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]>
-        </description>
-        <display-name>Value Change Listener</display-name>
-        <icon></icon>
-        <property-name>valueChangeListener</property-name>
-        <property-class>javax.el.MethodExpression</property-class>
-        <property-extension>
-            <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-<!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-        <display-name>Immediate Action</display-name>
-        <icon></icon>
-        <property-name>immediate</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-        <display-name>Valid Flag</display-name>
-        <icon></icon>
-        <property-name>valid</property-name>
-        <property-class>valid</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/events-props-noclick.xml b/jsf-api/doc/events-props-noclick.xml
deleted file mode 100644
index fcbb3fc..0000000
--- a/jsf-api/doc/events-props-noclick.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Event Properties =========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon></icon>
-        <property-name>ondblclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon></icon>
-        <property-name>onmousedown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon></icon>
-        <property-name>onmouseup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon></icon>
-        <property-name>onmouseover</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon></icon>
-        <property-name>onmousemove</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon></icon>
-        <property-name>onmouseout</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon></icon>
-        <property-name>onkeypress</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon></icon>
-        <property-name>onkeydown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon></icon>
-        <property-name>onkeyup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/events-props.xml b/jsf-api/doc/events-props.xml
deleted file mode 100644
index 33ac9cd..0000000
--- a/jsf-api/doc/events-props.xml
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Event Properties =========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon></icon>
-        <property-name>onclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon></icon>
-        <property-name>ondblclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon></icon>
-        <property-name>onmousedown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon></icon>
-        <property-name>onmouseup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon></icon>
-        <property-name>onmouseover</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon></icon>
-        <property-name>onmousemove</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon></icon>
-        <property-name>onmouseout</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon></icon>
-        <property-name>onkeypress</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon></icon>
-        <property-name>onkeydown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon></icon>
-        <property-name>onkeyup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/events-valueChanged-click.xml b/jsf-api/doc/events-valueChanged-click.xml
deleted file mode 100644
index 3d82e31..0000000
--- a/jsf-api/doc/events-valueChanged-click.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<root>
-
-    <property>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon></icon>
-        <property-name>onchange</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon></icon>
-        <property-name>onclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-            <behavior/>
-            <behavior>valueChange</behavior>
-            <default-behavior>true</default-behavior>
-        </property-extension>
-    </property>
-    
-</root>
diff --git a/jsf-api/doc/facelet-taglib_1_0.dtd b/jsf-api/doc/facelet-taglib_1_0.dtd
deleted file mode 100644
index e32be2c..0000000
--- a/jsf-api/doc/facelet-taglib_1_0.dtd
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
-  Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
- This file incorporates work covered by the following copyright and
- permission notice:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!ELEMENT facelet-taglib (library-class|(namespace,(tag|function)+))>
-<!ATTLIST facelet-taglib xmlns CDATA #FIXED "http://java.sun.com/JSF/Facelet">
-<!ELEMENT namespace (#PCDATA)>
-<!ELEMENT library-class (#PCDATA)>
-<!ELEMENT tag (tag-name,(handler-class|component|converter|validator|source))>
-<!ELEMENT tag-name (#PCDATA)>
-<!ELEMENT handler-class (#PCDATA)>
-<!ELEMENT component (component-type,renderer-type?,handler-class?)>
-<!ELEMENT component-type (#PCDATA)>
-<!ELEMENT renderer-type (#PCDATA)>
-<!ELEMENT converter (converter-id, handler-class?)>
-<!ELEMENT converter-id (#PCDATA)>
-<!ELEMENT validator (validator-id, handler-class?)>
-<!ELEMENT validator-id (#PCDATA)>
-<!ELEMENT source (#PCDATA)>
-<!ELEMENT function (function-name,function-class,function-signature)>
-<!ELEMENT function-name (#PCDATA)>
-<!ELEMENT function-class (#PCDATA)>
-<!ELEMENT function-signature (#PCDATA)>
diff --git a/jsf-api/doc/focus-props.xml b/jsf-api/doc/focus-props.xml
deleted file mode 100644
index 75d9de2..0000000
--- a/jsf-api/doc/focus-props.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Focus Properties =========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon></icon>
-        <property-name>accesskey</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon></icon>
-        <property-name>onblur</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon></icon>
-        <property-name>onfocus</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon></icon>
-        <property-name>tabindex</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/form-form-props.xml b/jsf-api/doc/form-form-props.xml
deleted file mode 100644
index 5e7b0b7..0000000
--- a/jsf-api/doc/form-form-props.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Form+Form Properties ======================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        List of content types that a server processing this form
-        will handle correctly
-        </description>
-        <display-name>Content Type</display-name>
-        <icon></icon>
-        <property-name>accept</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        List of character encodings for input data
-        that are accepted by the server processing
-        this form.
-        </description>
-        <display-name>Character Set</display-name>
-        <icon></icon>
-        <property-name>acceptcharset</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-        Content type used to submit the form to the server.  If not
-        specified, the default value is
-        "application/x-www-form-urlencoded".
-        </description>
-        <display-name>Encoding Type</display-name>
-        <icon></icon>
-        <property-name>enctype</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <default-value>"application/x-www-form-urlencoded"</default-value>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        Javascript code executed when this form is reset.
-        </description>
-        <display-name>Form Reset Script</display-name>
-        <icon></icon>
-        <property-name>onreset</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        Javascript code executed when this form is submitted.
-        </description>
-        <display-name>Form Submit Script</display-name>
-        <icon></icon>
-        <property-name>onsubmit</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        Name of a frame where the response
-        retrieved after this form submit is to
-        be displayed.
-        </description>
-        <display-name>Target Frame</display-name>
-        <icon></icon>
-        <property-name>target</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/graphic-image-props.xml b/jsf-api/doc/graphic-image-props.xml
deleted file mode 100644
index 88c1d42..0000000
--- a/jsf-api/doc/graphic-image-props.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Graphic+Image Properties =================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        Alternate textual description of the
-        element rendered by this component.
-        </description>
-        <display-name>Alternate Text</display-name>
-        <icon></icon>
-        <property-name>alt</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        Override for the height of this image.
-        </description>
-        <display-name>Image Height</display-name>
-        <icon></icon>
-        <property-name>height</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        Flag indicating that this image is to be used as a server side
-        image map.  Such an image must be enclosed within a hyperlink
-        ("a").  A value of false causes no attribute to be rendered, 
-        while a value of true causes the attribute to be rendered as
-        ismap="ismap".
-        </description>
-        <display-name>Image Map Flag</display-name>
-        <icon></icon>
-        <property-name>ismap</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        URI to a long description of the image
-        represented by this element.
-        </description>
-        <display-name>Long Description</display-name>
-        <icon></icon>
-        <property-name>longdesc</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        The name of a client side image map (an HTML "map"
-        element) for which this element provides the image.
-        </description>
-        <display-name>Use Image Map</display-name>
-        <icon></icon>
-        <property-name>usemap</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        Override for the width of this image.
-        </description>
-        <display-name>Image Width</display-name>
-        <icon></icon>
-        <property-name>width</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/i18n-props.xml b/jsf-api/doc/i18n-props.xml
deleted file mode 100644
index 55f4237..0000000
--- a/jsf-api/doc/i18n-props.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== I18N Properties ============================================ -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon></icon>
-        <property-name>dir</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon></icon>
-        <property-name>lang</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/image-button-props.xml b/jsf-api/doc/image-button-props.xml
deleted file mode 100644
index 84dd323..0000000
--- a/jsf-api/doc/image-button-props.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Command+Button Properties ================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-      <description>
-        Alternate textual description of the
-        element rendered by this component.
-      </description>
-      <display-name>Alternate Text</display-name>
-      <icon></icon>
-      <property-name>alt</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <property>
-      <description><![CDATA[<p>
-        Absolute or relative URL of the
-        image to be displayed for this
-        button.  If specified, this
-        "input" element will be of type
-        "image".  Otherwise, it will be
-        of the type specified by the
-        "type" property with a label
-        specified by the "value"
-        property.  <span
-        class="changed_added_2_0">Note
-        that if the value of this
-        attribute starts with "/", the
-        rendered value for this
-        attribute will be prefixed with
-        the context-root for this
-        application.</span>
-      </p>]]></description>
-      <display-name>Image URL</display-name>
-      <icon></icon>
-      <property-name>image</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-</root>
-
diff --git a/jsf-api/doc/input-props-nochange.xml b/jsf-api/doc/input-props-nochange.xml
deleted file mode 100644
index d91c1df..0000000
--- a/jsf-api/doc/input-props-nochange.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Input Properties =========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon></icon>
-        <property-name>disabled</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon></icon>
-        <property-name>onselect</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon></icon>
-        <property-name>readonly</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon></icon>
-        <property-name>label</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/input-props.xml b/jsf-api/doc/input-props.xml
deleted file mode 100644
index 92f6a23..0000000
--- a/jsf-api/doc/input-props.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Input Properties =========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon></icon>
-        <property-name>disabled</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon></icon>
-        <property-name>onchange</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-            <behavior/>
-            <behavior>valueChange</behavior>
-            <default-behavior>true</default-behavior>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon></icon>
-        <property-name>onselect</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon></icon>
-        <property-name>readonly</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon></icon>
-        <property-name>label</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/input-secret-props.xml b/jsf-api/doc/input-secret-props.xml
deleted file mode 100644
index be1a515..0000000
--- a/jsf-api/doc/input-secret-props.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Input+Secret Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        Flag indicating that any existing value
-        in this field should be rendered when the
-        form is created.  Because this is a potential
-        security risk, password values are not
-        displayed by default.
-        </description>
-        <display-name>Redisplay Flag</display-name>
-        <icon></icon>
-        <property-name>redisplay</property-name>
-        <property-class>boolean</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/input-textarea-props.xml b/jsf-api/doc/input-textarea-props.xml
deleted file mode 100644
index 0a4a27f..0000000
--- a/jsf-api/doc/input-textarea-props.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Input+Textarea Properties ================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        The number of columns to be displayed.
-        </description>
-        <display-name>Columns</display-name>
-        <icon></icon>
-        <property-name>cols</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        The number of rows to be displayed.
-        </description>
-        <display-name>Rows</display-name>
-        <icon></icon>
-        <property-name>rows</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>            
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/javaee_5.xsd b/jsf-api/doc/javaee_5.xsd
deleted file mode 100644
index 205d945..0000000
--- a/jsf-api/doc/javaee_5.xsd
+++ /dev/null
@@ -1,2101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsd:schema
-     targetNamespace="http://java.sun.com/xml/ns/javaee"
-     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-     elementFormDefault="qualified"
-     attributeFormDefault="unqualified"
-     version="5">
-  <xsd:annotation>
-    <xsd:documentation>
-      @(#)javaee_5.xsds	1.65 06/02/17
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-<xsd:annotation>
-<xsd:documentation>
-
-The following definitions that appear in the common
-shareable schema(s) of J2EE deployment descriptors should be
-interpreted with respect to the context they are included:
-
-Deployment Component may indicate one of the following:
-    j2ee application;
-    application client;
-    web application;
-    enterprise bean;
-    resource adapter;
-
-Deployment File may indicate one of the following:
-    ear file;
-    war file;
-    jar file;
-    rar file;
-
-</xsd:documentation>
-</xsd:annotation>
-
-  <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
-	      schemaLocation="http://www.w3.org/2001/xml.xsd"/>
-
-  <xsd:include schemaLocation="javaee_web_services_client_1_2.xsd"/>
-
-
-<!-- **************************************************** -->
-
-  <xsd:group name="descriptionGroup">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This group keeps the usage of the contained description related
-	elements consistent across Java EE deployment descriptors.
-
-	All elements may occur multiple times with different languages,
-	to support localization of the content.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="display-name"
-		   type="javaee:display-nameType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="icon"
-		   type="javaee:iconType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-    </xsd:sequence>
-  </xsd:group>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="descriptionType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The description type is used by a description element to
-	provide text describing the parent element.  The elements
-	that use this type should include any information that the
-	Deployment Component's Deployment File file producer wants
-	to provide to the consumer of the Deployment Component's
-	Deployment File (i.e., to the Deployer). Typically, the
-	tools used by such a Deployment File consumer will display
-	the description when processing the parent element that
-	contains the description.
-
-	The lang attribute defines the language that the
-	description is provided in. The default value is "en" (English).
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="javaee:xsdStringType">
-	<xsd:attribute ref="xml:lang"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="dewey-versionType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type defines a dewey decimal that is used
-	to describe versions of documents.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:restriction base="xsd:token">
-      <xsd:pattern value="\.?[0-9]+(\.[0-9]+)*"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="display-nameType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The display-name type contains a short name that is intended
-	  to be displayed by tools. It is used by display-name
-	  elements.  The display name need not be unique.
-
-	  Example:
-
-	  ...
-	     <display-name xml:lang="en">
-	       Employee Self Service
-	     </display-name>
-
-	  The value of the xml:lang attribute is "en" (English) by default.
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="javaee:string">
-	<xsd:attribute ref="xml:lang"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="ejb-linkType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The ejb-linkType is used by ejb-link
-	  elements in the ejb-ref or ejb-local-ref elements to specify
-	  that an EJB reference is linked to enterprise bean.
-
-	  The value of the ejb-link element must be the ejb-name of an
-	  enterprise bean in the same ejb-jar file or in another ejb-jar
-	  file in the same Java EE application unit.
-
-	  Alternatively, the name in the ejb-link element may be
-	  composed of a path name specifying the ejb-jar containing the
-	  referenced enterprise bean with the ejb-name of the target
-	  bean appended and separated from the path name by "#".  The
-	  path name is relative to the Deployment File containing
-	  Deployment Component that is referencing the enterprise
-	  bean.  This allows multiple enterprise beans with the same
-	  ejb-name to be uniquely identified.
-
-	  Examples:
-
-	      <ejb-link>EmployeeRecord</ejb-link>
-
-	      <ejb-link>../products/product.jar#ProductEJB</ejb-link>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="ejb-local-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The ejb-local-refType is used by ejb-local-ref elements for
-	the declaration of a reference to an enterprise bean's local
-	home or to the local business interface of a 3.0 bean.
-        The declaration consists of:
-
-	    - an optional description
-	    - the EJB reference name used in the code of the Deployment
-	      Component that's referencing the enterprise bean.
-	    - the optional expected type of the referenced enterprise bean
-	    - the optional expected local interface of the referenced
-              enterprise bean or the local business interface of the
-              referenced enterprise bean.
-	    - the optional expected local home interface of the referenced
-              enterprise bean. Not applicable if this ejb-local-ref refers
-              to the local business interface of a 3.0 bean.
-	    - optional ejb-link information, used to specify the
-	      referenced enterprise bean
-            - optional elements to define injection of the named enterprise
-              bean into a component field or property.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="ejb-ref-name"
-		   type="javaee:ejb-ref-nameType"/>
-      <xsd:element name="ejb-ref-type"
-		   type="javaee:ejb-ref-typeType"
-                   minOccurs="0"/>
-      <xsd:element name="local-home"
-		   type="javaee:local-homeType"
-                   minOccurs="0"/>
-      <xsd:element name="local"
-		   type="javaee:localType"
-                   minOccurs="0"/>
-      <xsd:element name="ejb-link"
-		   type="javaee:ejb-linkType"
-		   minOccurs="0"/>
-      <xsd:group ref="javaee:resourceGroup"/>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="ejb-ref-nameType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The ejb-ref-name element contains the name of an EJB
-	  reference. The EJB reference is an entry in the
-	  Deployment Component's environment and is relative to the
-	  java:comp/env context.  The name must be unique within the
-	  Deployment Component.
-
-	  It is recommended that name is prefixed with "ejb/".
-
-	  Example:
-
-	  <ejb-ref-name>ejb/Payroll</ejb-ref-name>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:jndi-nameType"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="ejb-ref-typeType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The ejb-ref-typeType contains the expected type of the
-	referenced enterprise bean.
-
-	The ejb-ref-type designates a value
-	that must be one of the following:
-
-	    Entity
-	    Session
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:enumeration value="Entity"/>
-	<xsd:enumeration value="Session"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="ejb-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The ejb-refType is used by ejb-ref elements for the
-	declaration of a reference to an enterprise bean's home or
-        to the remote business interface of a 3.0 bean.
-	The declaration consists of:
-
-	    - an optional description
-	    - the EJB reference name used in the code of
-	      the Deployment Component that's referencing the enterprise
-	      bean.
-	    - the optional expected type of the referenced enterprise bean
-            - the optional remote interface of the referenced enterprise bean
-              or the remote business interface of the referenced enterprise
-              bean
-	    - the optional expected home interface of the referenced
-              enterprise bean.  Not applicable if this ejb-ref
-              refers to the remote business interface of a 3.0 bean.
-	    - optional ejb-link information, used to specify the
-	      referenced enterprise bean
-            - optional elements to define injection of the named enterprise
-              bean into a component field or property
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="ejb-ref-name"
-		   type="javaee:ejb-ref-nameType"/>
-      <xsd:element name="ejb-ref-type"
-		   type="javaee:ejb-ref-typeType"
-		   minOccurs="0"/>
-      <xsd:element name="home"
-		   type="javaee:homeType"
-		   minOccurs="0"/>
-      <xsd:element name="remote"
-		   type="javaee:remoteType"
-                   minOccurs="0"/>
-      <xsd:element name="ejb-link"
-		   type="javaee:ejb-linkType"
-		   minOccurs="0"/>
-      <xsd:group ref="javaee:resourceGroup"/>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="emptyType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type is used to designate an empty
-	element when used.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="env-entry-type-valuesType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  This type contains the fully-qualified Java type of the
-	  environment entry value that is expected by the
-	  application's code.
-
-	  The following are the legal values of env-entry-type-valuesType:
-
-	      java.lang.Boolean
-	      java.lang.Byte
-	      java.lang.Character
-	      java.lang.String
-	      java.lang.Short
-	      java.lang.Integer
-	      java.lang.Long
-	      java.lang.Float
-	      java.lang.Double
-
-	  Example:
-
-	  <env-entry-type>java.lang.Boolean</env-entry-type>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:enumeration value="java.lang.Boolean"/>
-	<xsd:enumeration value="java.lang.Byte"/>
-	<xsd:enumeration value="java.lang.Character"/>
-	<xsd:enumeration value="java.lang.String"/>
-	<xsd:enumeration value="java.lang.Short"/>
-	<xsd:enumeration value="java.lang.Integer"/>
-	<xsd:enumeration value="java.lang.Long"/>
-	<xsd:enumeration value="java.lang.Float"/>
-	<xsd:enumeration value="java.lang.Double"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="env-entryType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The env-entryType is used to declare an application's
-	environment entry. The declaration consists of an optional
-	description, the name of the environment entry, a type
-	(optional if the value is injected, otherwise required), and
-	an optional value.
-
-	It also includes optional elements to define injection of
-	the named resource into fields or JavaBeans properties.
-
-	If a value is not specified and injection is requested,
-	no injection will occur and no entry of the specified name
-	will be created.  This allows an initial value to be
-	specified in the source code without being incorrectly
-	changed when no override has been specified.
-
-	If a value is not specified and no injection is requested,
-	a value must be supplied during deployment.
-
-	This type is used by env-entry elements.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="env-entry-name"
-		   type="javaee:jndi-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      The env-entry-name element contains the name of a
-	      Deployment Component's environment entry.  The name
-	      is a JNDI name relative to the java:comp/env
-	      context.  The name must be unique within a
-	      Deployment Component. The uniqueness
-	      constraints must be defined within the declared
-	      context.
-
-	      Example:
-
-	      <env-entry-name>minAmount</env-entry-name>
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="env-entry-type"
-		   type="javaee:env-entry-type-valuesType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      The env-entry-type element contains the Java language
-	      type of the environment entry.  If an injection target
-	      is specified for the environment entry, the type may
-	      be omitted, or must match the type of the injection
-	      target.  If no injection target is specified, the type
-	      is required.
-
-	      Example:
-
-	      <env-entry-type>java.lang.Integer</env-entry-type>
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="env-entry-value"
-		   type="javaee:xsdStringType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      The env-entry-value designates the value of a
-	      Deployment Component's environment entry. The value
-	      must be a String that is valid for the
-	      constructor of the specified type that takes a
-	      single String parameter, or for java.lang.Character,
-	      a single character.
-
-	      Example:
-
-	      <env-entry-value>100.00</env-entry-value>
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:group ref="javaee:resourceGroup"/>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="fully-qualified-classType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The elements that use this type designate the name of a
-	Java class or interface.  The name is in the form of a
-	"binary name", as defined in the JLS.  This is the form
-	of name used in Class.forName().  Tools that need the
-	canonical name (the name used in source code) will need
-	to convert this binary name to the canonical name.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="generic-booleanType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type defines four different values which can designate
-	boolean values. This includes values yes and no which are
-	not designated by xsd:boolean
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:enumeration value="true"/>
-	<xsd:enumeration value="false"/>
-	<xsd:enumeration value="yes"/>
-	<xsd:enumeration value="no"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="homeType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The homeType defines the fully-qualified name of
-	  an enterprise bean's home interface.
-
-	  Example:
-
-	      <home>com.aardvark.payroll.PayrollHome</home>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:fully-qualified-classType"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="iconType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The icon type contains small-icon and large-icon elements
-	that specify the file names for small and large GIF, JPEG,
-	or PNG icon images used to represent the parent element in a
-	GUI tool.
-
-	The xml:lang attribute defines the language that the
-	icon file names are provided in. Its value is "en" (English)
-	by default.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="small-icon" type="javaee:pathType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      The small-icon element contains the name of a file
-	      containing a small (16 x 16) icon image. The file
-	      name is a relative path within the Deployment
-	      Component's Deployment File.
-
-	      The image may be in the GIF, JPEG, or PNG format.
-	      The icon can be used by tools.
-
-	      Example:
-
-	      <small-icon>employee-service-icon16x16.jpg</small-icon>
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="large-icon" type="javaee:pathType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      The large-icon element contains the name of a file
-	      containing a large
-	      (32 x 32) icon image. The file name is a relative
-	      path within the Deployment Component's Deployment
-	      File.
-
-	      The image may be in the GIF, JPEG, or PNG format.
-	      The icon can be used by tools.
-
-	      Example:
-
-	      <large-icon>employee-service-icon32x32.jpg</large-icon>
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-    </xsd:sequence>
-
-    <xsd:attribute ref="xml:lang"/>
-    <xsd:attribute name="id" type="xsd:ID"/>
-
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="injection-targetType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	An injection target specifies a class and a name within
-	that class into which a resource should be injected.
-
-	The injection target class specifies the fully qualified
-	class name that is the target of the injection.  The
-	Java EE specifications describe which classes can be an
-	injection target.
-
-	The injection target name specifies the target within
-	the specified class.  The target is first looked for as a
-	JavaBeans property name.  If not found, the target is
-	looked for as a field name.
-
-	The specified resource will be injected into the target
-	during initialization of the class by either calling the
-	set method for the target property or by setting a value
-	into the named field.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="injection-target-class"
-		   type="javaee:fully-qualified-classType"/>
-      <xsd:element name="injection-target-name"
-		   type="javaee:java-identifierType"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="java-identifierType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The java-identifierType defines a Java identifier.
-	The users of this type should further verify that
-	the content does not contain Java reserved keywords.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:pattern value="($|_|\p{L})(\p{L}|\p{Nd}|_|$)*"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="java-typeType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This is a generic type that designates a Java primitive
-	type or a fully qualified name of a Java interface/type,
-	or an array of such types.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:pattern value="[^\p{Z}]*"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="jndi-nameType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The jndi-nameType type designates a JNDI name in the
-	Deployment Component's environment and is relative to the
-	java:comp/env context.  A JNDI name must be unique within the
-	Deployment Component.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:group name="jndiEnvironmentRefsGroup">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This group keeps the usage of the contained JNDI environment
-	reference elements consistent across Java EE deployment descriptors.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="env-entry"
-		   type="javaee:env-entryType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="ejb-ref"
-		   type="javaee:ejb-refType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="ejb-local-ref"
-		   type="javaee:ejb-local-refType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:group ref="javaee:service-refGroup"/>
-      <xsd:element name="resource-ref"
-		   type="javaee:resource-refType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="resource-env-ref"
-		   type="javaee:resource-env-refType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="message-destination-ref"
-		   type="javaee:message-destination-refType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="persistence-context-ref"
-		   type="javaee:persistence-context-refType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="persistence-unit-ref"
-		   type="javaee:persistence-unit-refType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="post-construct"
-		   type="javaee:lifecycle-callbackType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="pre-destroy"
-		   type="javaee:lifecycle-callbackType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-  </xsd:group>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="lifecycle-callbackType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The lifecycle-callback type specifies a method on a
-	class to be called when a lifecycle event occurs.
-	Note that each class may have only one lifecycle callback
-        method for any given event and that the method may not
-	be overloaded.
-
-        If the lifefycle-callback-class element is missing then
-        the class defining the callback is assumed to be the
-        component class in scope at the place in the descriptor
-        in which the callback definition appears.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="lifecycle-callback-class"
-		   type="javaee:fully-qualified-classType"
-                   minOccurs="0"/>
-      <xsd:element name="lifecycle-callback-method"
-		   type="javaee:java-identifierType"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="listenerType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The listenerType indicates the deployment properties for a web
-	application listener bean.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:group ref="javaee:descriptionGroup"/>
-      <xsd:element name="listener-class"
-		   type="javaee:fully-qualified-classType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The listener-class element declares a class in the
-	    application must be registered as a web
-	    application listener bean. The value is the fully
-	    qualified classname of the listener class.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="local-homeType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The local-homeType defines the fully-qualified
-	name of an enterprise bean's local home interface.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:fully-qualified-classType"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="localType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The localType defines the fully-qualified name of an
-	enterprise bean's local interface.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:fully-qualified-classType"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="message-destination-linkType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The message-destination-linkType is used to link a message
-	destination reference or message-driven bean to a message
-	destination.
-
-	The Assembler sets the value to reflect the flow of messages
-	between producers and consumers in the application.
-
-	The value must be the message-destination-name of a message
-	destination in the same Deployment File or in another
-	Deployment File in the same Java EE application unit.
-
-	Alternatively, the value may be composed of a path name
-	specifying a Deployment File containing the referenced
-	message destination with the message-destination-name of the
-	destination appended and separated from the path name by
-	"#". The path name is relative to the Deployment File
-	containing Deployment Component that is referencing the
-	message destination.  This allows multiple message
-	destinations with the same name to be uniquely identified.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="message-destination-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The message-destination-ref element contains a declaration
-	  of Deployment Component's reference to a message destination
-	  associated with a resource in Deployment Component's
-	  environment. It consists of:
-
-		  - an optional description
-		  - the message destination reference name
-		  - an optional message destination type
-		  - an optional specification as to whether
-		    the destination is used for
-		    consuming or producing messages, or both.
-		    if not specified, "both" is assumed.
-		  - an optional link to the message destination
-		  - optional injection targets
-
-	  The message destination type must be supplied unless an
-	  injection target is specified, in which case the type
-	  of the target is used.  If both are specified, the type
-	  must be assignment compatible with the type of the injection
-	  target.
-
-	  Examples:
-
-	  <message-destination-ref>
-		  <message-destination-ref-name>jms/StockQueue
-		  </message-destination-ref-name>
-		  <message-destination-type>javax.jms.Queue
-		  </message-destination-type>
-		  <message-destination-usage>Consumes
-		  </message-destination-usage>
-		  <message-destination-link>CorporateStocks
-		  </message-destination-link>
-	  </message-destination-ref>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="message-destination-ref-name"
-		   type="javaee:jndi-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The message-destination-ref-name element specifies
-	    the name of a message destination reference; its
-	    value is the environment entry name used in
-	    Deployment Component code.  The name is a JNDI name
-	    relative to the java:comp/env context and must be
-	    unique within an ejb-jar (for enterprise beans) or a
-	    Deployment File (for others).
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="message-destination-type"
-		   type="javaee:message-destination-typeType"
-		   minOccurs="0"/>
-      <xsd:element name="message-destination-usage"
-		   type="javaee:message-destination-usageType"
-		   minOccurs="0"/>
-      <xsd:element name="message-destination-link"
-		   type="javaee:message-destination-linkType"
-		   minOccurs="0"/>
-
-      <xsd:group ref="javaee:resourceGroup"/>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="message-destination-typeType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The message-destination-typeType specifies the type of
-	  the destination. The type is specified by the Java interface
-	  expected to be implemented by the destination.
-
-	  Example:
-
-	    <message-destination-type>javax.jms.Queue
-	    </message-destination-type>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:fully-qualified-classType"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="message-destination-usageType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The message-destination-usageType specifies the use of the
-	message destination indicated by the reference.  The value
-	indicates whether messages are consumed from the message
-	destination, produced for the destination, or both.  The
-	Assembler makes use of this information in linking producers
-	of a destination with its consumers.
-
-	The value of the message-destination-usage element must be
-	one of the following:
-	    Consumes
-	    Produces
-	    ConsumesProduces
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:enumeration value="Consumes"/>
-	<xsd:enumeration value="Produces"/>
-	<xsd:enumeration value="ConsumesProduces"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="message-destinationType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The message-destinationType specifies a message
-	  destination. The logical destination described by this
-	  element is mapped to a physical destination by the Deployer.
-
-	  The message destination element contains:
-
-		  - an optional description
-		  - an optional display-name
-		  - an optional icon
-		  - a message destination name which must be unique
-		    among message destination names within the same
-		    Deployment File.
-		  - an optional mapped name
-
-	  Example:
-
-	  <message-destination>
-		  <message-destination-name>CorporateStocks
-		  </message-destination-name>
-	  </message-destination>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:group ref="javaee:descriptionGroup"/>
-      <xsd:element name="message-destination-name"
-		   type="javaee:string">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The message-destination-name element specifies a
-	    name for a message destination.  This name must be
-	    unique among the names of message destinations
-	    within the Deployment File.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="mapped-name"
-		   type="javaee:xsdStringType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      A product specific name that this message destination
-	      should be mapped to.  Each message-destination-ref
-	      element that references this message destination will
-	      define a name in the namespace of the referencing
-	      component.  (It's a name in the JNDI java:comp/env
-	      namespace.)  Many application servers provide a way to
-	      map these local names to names of resources known to the
-	      application server.  This mapped name is often a global
-	      JNDI name, but may be a name of any form.  Each of the
-	      local names should be mapped to this same global name.
-
-	      Application servers are not required to support any
-	      particular form or type of mapped name, nor the ability
-	      to use mapped names.  The mapped name is
-	      product-dependent and often installation-dependent.  No
-	      use of a mapped name is portable.
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="param-valueType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type is a general type that can be used to declare
-	parameter/value lists.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="param-name"
-		   type="javaee:string">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The param-name element contains the name of a
-	    parameter.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="param-value"
-		   type="javaee:xsdStringType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The param-value element contains the value of a
-	    parameter.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="pathType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The elements that use this type designate either a relative
-	path or an absolute path starting with a "/".
-
-	In elements that specify a pathname to a file within the
-	same Deployment File, relative filenames (i.e., those not
-	starting with "/") are considered relative to the root of
-	the Deployment File's namespace.  Absolute filenames (i.e.,
-	those starting with "/") also specify names in the root of
-	the Deployment File's namespace.  In general, relative names
-	are preferred.  The exception is .war files where absolute
-	names are preferred for consistency with the Servlet API.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="persistence-context-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The persistence-context-ref element contains a declaration
-	  of Deployment Component's reference to a persistence context
-	  associated within a Deployment Component's
-	  environment. It consists of:
-
-		  - an optional description
-		  - the persistence context reference name
-		  - an optional persistence unit name.  If not specified,
-                    the default persistence unit is assumed.
-		  - an optional specification as to whether
-		    the persistence context type is Transaction or
-		    Extended.  If not specified, Transaction is assumed.
-                  - an optional list of persistence properties
-		  - optional injection targets
-
-	  Examples:
-
-            <persistence-context-ref>
-              <persistence-context-ref-name>myPersistenceContext
-              </persistence-context-ref-name>
-            </persistence-context-ref>
-
-            <persistence-context-ref>
-              <persistence-context-ref-name>myPersistenceContext
-                </persistence-context-ref-name>
-              <persistence-unit-name>PersistenceUnit1
-                </persistence-unit-name>
-              <persistence-context-type>Extended</persistence-context-type>
-            </persistence-context-ref>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="persistence-context-ref-name"
-		   type="javaee:jndi-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The persistence-context-ref-name element specifies
-	    the name of a persistence context reference; its
-	    value is the environment entry name used in
-	    Deployment Component code.  The name is a JNDI name
-	    relative to the java:comp/env context.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="persistence-unit-name"
-		   type="javaee:string"
-		   minOccurs="0">
-        <xsd:annotation>
-	  <xsd:documentation>
-
-            The Application Assembler(or BeanProvider) may use the
-            following syntax to avoid the need to rename persistence
-            units to have unique names within a Java EE application.
-
-            The Application Assembler specifies the pathname of the
-            root of the persistence.xml file for the referenced
-            persistence unit and appends the name of the persistence
-            unit separated from the pathname by #. The pathname is
-            relative to the referencing application component jar file.
-            In this manner, multiple persistence units with the same
-            persistence unit name may be uniquely identified when the
-            Application Assembler cannot change persistence unit names.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="persistence-context-type"
-		   type="javaee:persistence-context-typeType"
-		   minOccurs="0"/>
-
-      <xsd:element name="persistence-property"
-		   type="javaee:propertyType"
-		   minOccurs="0"
-		   maxOccurs="unbounded">
-        <xsd:annotation>
-	  <xsd:documentation>
-
-            Used to specify properties for the container or persistence
-            provider.  Vendor-specific properties may be included in
-            the set of properties.  Properties that are not recognized
-            by a vendor must be ignored.  Entries that make use of the
-            namespace javax.persistence and its subnamespaces must not
-            be used for vendor-specific properties.  The namespace
-            javax.persistence is reserved for use by the specification.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:group ref="javaee:resourceGroup"/>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="persistence-context-typeType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The persistence-context-typeType specifies the transactional
-	nature of a persistence context reference.
-
-	The value of the persistence-context-type element must be
-	one of the following:
-	    Transaction
-            Extended
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:enumeration value="Transaction"/>
-	<xsd:enumeration value="Extended"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="persistence-unit-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The persistence-unit-ref element contains a declaration
-	  of Deployment Component's reference to a persistence unit
-	  associated within a Deployment Component's
-	  environment. It consists of:
-
-		  - an optional description
-		  - the persistence unit reference name
-		  - an optional persistence unit name.  If not specified,
-                    the default persistence unit is assumed.
-		  - optional injection targets
-
-	  Examples:
-
-            <persistence-unit-ref>
-              <persistence-unit-ref-name>myPersistenceUnit
-              </persistence-unit-ref-name>
-            </persistence-unit-ref>
-
-            <persistence-unit-ref>
-              <persistence-unit-ref-name>myPersistenceUnit
-                </persistence-unit-ref-name>
-              <persistence-unit-name>PersistenceUnit1
-                </persistence-unit-name>
-            </persistence-unit-ref>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="persistence-unit-ref-name"
-		   type="javaee:jndi-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The persistence-unit-ref-name element specifies
-	    the name of a persistence unit reference; its
-	    value is the environment entry name used in
-	    Deployment Component code.  The name is a JNDI name
-	    relative to the java:comp/env context.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="persistence-unit-name"
-		   type="javaee:string"
-		   minOccurs="0">
-        <xsd:annotation>
-	  <xsd:documentation>
-
-            The Application Assembler(or BeanProvider) may use the
-            following syntax to avoid the need to rename persistence
-            units to have unique names within a Java EE application.
-
-            The Application Assembler specifies the pathname of the
-            root of the persistence.xml file for the referenced
-            persistence unit and appends the name of the persistence
-            unit separated from the pathname by #. The pathname is
-            relative to the referencing application component jar file.
-            In this manner, multiple persistence units with the same
-            persistence unit name may be uniquely identified when the
-            Application Assembler cannot change persistence unit names.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:group ref="javaee:resourceGroup"/>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="propertyType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	Specifies a name/value pair.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="name"
-		   type="javaee:xsdStringType">
-      </xsd:element>
-      <xsd:element name="value"
-		   type="javaee:xsdStringType">
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="remoteType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The remote element contains the fully-qualified name
-	  of the enterprise bean's remote interface.
-
-	  Example:
-
-	      <remote>com.wombat.empl.EmployeeService</remote>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:fully-qualified-classType"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="res-authType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The res-authType specifies whether the Deployment Component
-	code signs on programmatically to the resource manager, or
-	whether the Container will sign on to the resource manager
-	on behalf of the Deployment Component. In the latter case,
-	the Container uses information that is supplied by the
-	Deployer.
-
-	The value must be one of the two following:
-
-	    Application
-	    Container
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:enumeration value="Application"/>
-	<xsd:enumeration value="Container"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="res-sharing-scopeType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The res-sharing-scope type specifies whether connections
-	obtained through the given resource manager connection
-	factory reference can be shared. The value, if specified,
-	must be one of the two following:
-
-	    Shareable
-	    Unshareable
-
-	The default value is Shareable.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string">
-	<xsd:enumeration value="Shareable"/>
-	<xsd:enumeration value="Unshareable"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="resource-env-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The resource-env-refType is used to define
-	  resource-env-type elements.  It contains a declaration of a
-	  Deployment Component's reference to an administered object
-	  associated with a resource in the Deployment Component's
-	  environment.  It consists of an optional description, the
-	  resource environment reference name, and an optional
-	  indication of the resource environment reference type
-	  expected by the Deployment Component code.
-
-	  It also includes optional elements to define injection of
-	  the named resource into fields or JavaBeans properties.
-
-	  The resource environment type must be supplied unless an
-	  injection target is specified, in which case the type
-	  of the target is used.  If both are specified, the type
-	  must be assignment compatible with the type of the injection
-	  target.
-
-	  Example:
-
-	  <resource-env-ref>
-	      <resource-env-ref-name>jms/StockQueue
-	      </resource-env-ref-name>
-	      <resource-env-ref-type>javax.jms.Queue
-	      </resource-env-ref-type>
-	  </resource-env-ref>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="resource-env-ref-name"
-		   type="javaee:jndi-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The resource-env-ref-name element specifies the name
-	    of a resource environment reference; its value is
-	    the environment entry name used in
-	    the Deployment Component code.  The name is a JNDI
-	    name relative to the java:comp/env context and must
-	    be unique within a Deployment Component.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="resource-env-ref-type"
-		   type="javaee:fully-qualified-classType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The resource-env-ref-type element specifies the type
-	    of a resource environment reference.  It is the
-	    fully qualified name of a Java language class or
-	    interface.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:group ref="javaee:resourceGroup"/>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="resource-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The resource-refType contains a declaration of a
-	  Deployment Component's reference to an external resource. It
-	  consists of an optional description, the resource manager
-	  connection factory reference name, an optional indication of
-	  the resource manager connection factory type expected by the
-	  Deployment Component code, an optional type of authentication
-	  (Application or Container), and an optional specification of
-	  the shareability of connections obtained from the resource
-	  (Shareable or Unshareable).
-
-	  It also includes optional elements to define injection of
-	  the named resource into fields or JavaBeans properties.
-
-	  The connection factory type must be supplied unless an
-	  injection target is specified, in which case the type
-	  of the target is used.  If both are specified, the type
-	  must be assignment compatible with the type of the injection
-	  target.
-
-	  Example:
-
-	  <resource-ref>
-	      <res-ref-name>jdbc/EmployeeAppDB</res-ref-name>
-	      <res-type>javax.sql.DataSource</res-type>
-	      <res-auth>Container</res-auth>
-	      <res-sharing-scope>Shareable</res-sharing-scope>
-	  </resource-ref>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="res-ref-name"
-		   type="javaee:jndi-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The res-ref-name element specifies the name of a
-	    resource manager connection factory reference.
-	    The name is a JNDI name relative to the
-	    java:comp/env context.
-	    The name must be unique within a Deployment File.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="res-type"
-		   type="javaee:fully-qualified-classType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The res-type element specifies the type of the data
-	    source. The type is specified by the fully qualified
-	    Java language class or interface
-	    expected to be implemented by the data source.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="res-auth"
-		   type="javaee:res-authType"
-		   minOccurs="0"/>
-
-      <xsd:element name="res-sharing-scope"
-		   type="javaee:res-sharing-scopeType"
-		   minOccurs="0"/>
-
-      <xsd:group ref="javaee:resourceGroup"/>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:group name="resourceGroup">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This group collects elements that are common to all the
-	JNDI resource elements.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="mapped-name"
-		   type="javaee:xsdStringType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      A product specific name that this resource should be
-	      mapped to.  The name of this resource, as defined by the
-	      resource's name element or defaulted, is a name that is
-	      local to the application component using the resource.
-	      (It's a name in the JNDI java:comp/env namespace.)  Many
-	      application servers provide a way to map these local
-	      names to names of resources known to the application
-	      server.  This mapped name is often a global JNDI name,
-	      but may be a name of any form.
-
-	      Application servers are not required to support any
-	      particular form or type of mapped name, nor the ability
-	      to use mapped names.  The mapped name is
-	      product-dependent and often installation-dependent.  No
-	      use of a mapped name is portable.
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="injection-target"
-		   type="javaee:injection-targetType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-    </xsd:sequence>
-  </xsd:group>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="role-nameType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The role-nameType designates the name of a security role.
-
-	The name must conform to the lexical rules for a token.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="run-asType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The run-asType specifies the run-as identity to be
-	used for the execution of a component. It contains an
-	optional description, and the name of a security role.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="role-name"
-		   type="javaee:role-nameType"/>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="security-role-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The security-role-refType contains the declaration of a
-	security role reference in a component's or a
-	Deployment Component's code. The declaration consists of an
-	optional description, the security role name used in the
-	code, and an optional link to a security role. If the
-	security role is not specified, the Deployer must choose an
-	appropriate security role.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="role-name"
-		   type="javaee:role-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The value of the role-name element must be the String used
-	    as the parameter to the
-	    EJBContext.isCallerInRole(String roleName) method or the
-	    HttpServletRequest.isUserInRole(String role) method.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="role-link"
-		   type="javaee:role-nameType"
-		   minOccurs="0">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The role-link element is a reference to a defined
-	    security role. The role-link element must contain
-	    the name of one of the security roles defined in the
-	    security-role elements.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="security-roleType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The security-roleType contains the definition of a security
-	  role. The definition consists of an optional description of
-	  the security role, and the security role name.
-
-	  Example:
-
-	      <security-role>
-	      <description>
-		  This role includes all employees who are authorized
-		  to access the employee service application.
-	      </description>
-	      <role-name>employee</role-name>
-	      </security-role>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0"
-		   maxOccurs="unbounded"/>
-      <xsd:element name="role-name"
-		   type="javaee:role-nameType"/>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="string">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This is a special string datatype that is defined by Java EE as
-	a base type for defining collapsed strings. When schemas
-	require trailing/leading space elimination as well as
-	collapsing the existing whitespace, this base type may be
-	used.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:token">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="true-falseType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This simple type designates a boolean with only two
-	permissible values
-
-	- true
-	- false
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:xsdBooleanType">
-	<xsd:pattern value="(true|false)"/>
-      </xsd:restriction>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="url-patternType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The url-patternType contains the url pattern of the mapping.
-	It must follow the rules specified in Section 11.2 of the
-	Servlet API Specification. This pattern is assumed to be in
-	URL-decoded form and must not contain CR(#xD) or LF(#xA).
-	If it contains those characters, the container must inform
-	the developer with a descriptive error message.
-	The container must preserve all characters including whitespaces.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdAnyURIType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:anyURI.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:anyURI">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdBooleanType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:boolean.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:boolean">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdIntegerType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:integer.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:integer">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdNMTOKENType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:NMTOKEN.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:NMTOKEN">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdNonNegativeIntegerType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:nonNegativeInteger.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:nonNegativeInteger">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdPositiveIntegerType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:positiveInteger.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:positiveInteger">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdQNameType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:QName.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:QName">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="xsdStringType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	This type adds an "id" attribute to xsd:string.
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-	<xsd:attribute name="id" type="xsd:ID"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-</xsd:schema>
-
diff --git a/jsf-api/doc/javaee_web_services_1_2.xsd b/jsf-api/doc/javaee_web_services_1_2.xsd
deleted file mode 100644
index 8c31b87..0000000
--- a/jsf-api/doc/javaee_web_services_1_2.xsd
+++ /dev/null
@@ -1,755 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
-	    targetNamespace="http://java.sun.com/xml/ns/javaee"
-	    xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-	    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	    elementFormDefault="qualified"
-	    attributeFormDefault="unqualified"
-	    version="1.2">
-  <xsd:annotation>
-    <xsd:documentation>
-      @(#)javaee_web_services_1_2.xsds	1.18 02/13/06
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      (C) Copyright International Business Machines Corporation 2002
-
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:annotation>
-    <xsd:documentation>
-      <![CDATA[
-
-	The webservices element is the root element for the web services
-	deployment descriptor.  It specifies the set of web service
-	descriptions that are to be deployed into the Java EE Application
-	Server and the dependencies they have on container resources and
-	services.  The deployment descriptor must be named
-	"META-INF/webservices.xml" in the web services' jar file.
-
-	Used in: webservices.xml
-
-	All webservices deployment descriptors must indicate the
-	webservices schema by using the Java EE namespace:
-
-	http://java.sun.com/xml/ns/javaee
-
-	and by indicating the version of the schema by using the version
-	element as shown below:
-
-	    <webservices xmlns="http://java.sun.com/xml/ns/javaee"
-	      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-		http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd"
-	      version="1.2">
-	      ...
-	    </webservices>
-
-	The instance documents may indicate the published version of the
-	schema using the xsi:schemaLocation attribute for the Java EE
-	namespace with the following location:
-
-	http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd
-
-	]]>
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      The following conventions apply to all Java EE
-      deployment descriptor elements unless indicated otherwise.
-
-      - In elements that specify a pathname to a file within the
-	same JAR file, relative filenames (i.e., those not
-	starting with "/") are considered relative to the root of
-	the JAR file's namespace.  Absolute filenames (i.e., those
-	starting with "/") also specify names in the root of the
-	JAR file's namespace.  In general, relative names are
-	preferred.  The exception is .war files where absolute
-	names are preferred for consistency with the Servlet API.
-
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:include schemaLocation="javaee_5.xsd"/>
-
-
-<!-- **************************************************** -->
-
-  <xsd:element name="webservices" type="javaee:webservicesType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The webservices element is the root element for the web services
-	deployment descriptor.  It specifies the set of web service
-	descriptions that are to be deployed into the Java EE Application Server
-	and the dependencies they have on container resources and services.
-
-	Used in: webservices.xml
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:key name="webservice-description-name-key">
-      <xsd:annotation>
-	<xsd:documentation>
-
-	  The webservice-description-name identifies the collection of
-	  port-components associated with a WSDL file and JAX-RPC mapping. The
-	  name must be unique within the deployment descriptor.
-
-	</xsd:documentation>
-      </xsd:annotation>
-      <xsd:selector xpath="javaee:webservice-description"/>
-      <xsd:field xpath="javaee:webservice-description-name"/>
-    </xsd:key>
-  </xsd:element>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="handler-chainType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-      The handler-chain element defines the handlerchain.
-      Handlerchain can be defined such that the handlers in the
-      handlerchain operate,all ports of a service, on a specific
-      port or on a list of protocol-bindings. The choice of elements
-      service-name-pattern, port-name-pattern and protocol-bindings
-      are used to specify whether the handlers in handler-chain are
-      for a service, port or protocol binding. If none of these
-      choices are specified with the handler-chain element then the
-      handlers specified in the handler-chain will be applied on
-      everything.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-
-      <xsd:choice minOccurs="0" maxOccurs="1">
-         <xsd:element name="service-name-pattern"
-		      type="javaee:qname-pattern" />
-         <xsd:element name="port-name-pattern"
-		      type="javaee:qname-pattern" />
-         <xsd:element name="protocol-bindings"
-		      type="javaee:protocol-bindingListType"/>
-      </xsd:choice>
-
-      <xsd:element name="handler"
-                   type="javaee:port-component_handlerType"
-		   minOccurs="1" maxOccurs="unbounded"/>
-    </xsd:sequence>
-
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="handler-chainsType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-      The handler-chains element defines the handlerchains associated
-      with this service or service endpoint.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="handler-chain"
-                   type="javaee:handler-chainType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="port-componentType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The port-component element associates a WSDL port with a web service
-	interface and implementation.  It defines the name of the port as a
-	component, optional description, optional display name, optional iconic
-	representations, WSDL port QName, Service Endpoint Interface, Service
-	Implementation Bean.
-
-	This element also associates a WSDL service with a JAX-WS Provider
-	implementation.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0" maxOccurs="1"/>
-      <xsd:element name="display-name"
-		   type="javaee:display-nameType"
-		   minOccurs="0" maxOccurs="1"/>
-      <xsd:element name="icon"
-		   type="javaee:iconType"
-		   minOccurs="0" maxOccurs="1"/>
-      <xsd:element name="port-component-name"
-		   type="javaee:string">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      The port-component-name element specifies a port component's
-	      name.  This name is assigned by the module producer to name
-	      the service implementation bean in the module's deployment
-	      descriptor. The name must be unique among the port component
-	      names defined in the same module.
-
-	      Used in: port-component
-
-	      Example:
-		      <port-component-name>EmployeeService
-		      </port-component-name>
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="wsdl-service"
-		   type="javaee:xsdQNameType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines the name space and local name part of the WSDL
-	    service QName. This is required to be specified for
-	    port components that are JAX-WS Provider implementations.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="wsdl-port"
-		   type="javaee:xsdQNameType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines the name space and local name part of the WSDL
-	    port QName. This is not required to be specified for port
-	    components that are JAX-WS Provider implementations
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="enable-mtom"
-                   type="javaee:true-falseType"
-		   minOccurs="0" maxOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>
-
-            Used to enable or disable SOAP MTOM/XOP mechanism for an
-            endpoint implementation.
-
-	    Not to be specified for JAX-RPC runtime
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="protocol-binding"
-                   type="javaee:protocol-bindingType"
-		   minOccurs="0" maxOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>
-
-            Used to specify the protocol binding used by the port-component.
-	    If this element is not specified, then the default binding is
-            used (SOAP 1.1 over HTTP)
-
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="service-endpoint-interface"
-		   type="javaee:fully-qualified-classType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-	    <![CDATA[
-
-	      The service-endpoint-interface element contains the
-	      fully-qualified name of the port component's Service Endpoint
-	      Interface.
-
-	      Used in: port-component
-
-	      Example:
-		      <remote>com.wombat.empl.EmployeeService</remote>
-
-	      This may not be specified in case there is no Service
-	      Enpoint Interface as is the case with directly using an
-	      implementation class with the @WebService annotation.
-
-	      When the port component is a Provider implementation
-	      this is not specified.
-
-	      ]]>
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="service-impl-bean"
-		   type="javaee:service-impl-beanType"/>
-
-      <xsd:choice>
-	<xsd:element name="handler"
-		     type="javaee:port-component_handlerType"
-		     minOccurs="0" maxOccurs="unbounded">
-	  <xsd:annotation>
-	    <xsd:documentation>
-		 To be used with JAX-RPC based runtime only.
-	    </xsd:documentation>
-	  </xsd:annotation>
-	</xsd:element>
-	<xsd:element name="handler-chains"
-		     type="javaee:handler-chainsType"
-		     minOccurs="0" maxOccurs="1">
-	  <xsd:annotation>
-	    <xsd:documentation>
-		 To be used with JAX-WS based runtime only.
-	    </xsd:documentation>
-	  </xsd:annotation>
-	</xsd:element>
-      </xsd:choice>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="port-component_handlerType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	Declares the handler for a port-component. Handlers can access the
-	init-param name/value pairs using the HandlerInfo interface.
-
-	Used in: port-component
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:group ref="javaee:descriptionGroup"/>
-      <xsd:element name="handler-name"
-		   type="javaee:string">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines the name of the handler. The name must be unique within the
-	    module.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="handler-class"
-		   type="javaee:fully-qualified-classType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines a fully qualified class name for the handler implementation.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="init-param"
-		   type="javaee:param-valueType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-
-      <xsd:element name="soap-header"
-		   type="javaee:xsdQNameType"
-		   minOccurs="0" maxOccurs="unbounded">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines the QName of a SOAP header that will be processed by the
-	    handler.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="soap-role"
-		   type="javaee:string"
-		   minOccurs="0" maxOccurs="unbounded">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The soap-role element contains a SOAP actor definition that the
-	    Handler will play as a role.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="protocol-URIAliasType">
-     <xsd:annotation>
-        <xsd:documentation>
-	   Defines the type that is used for specifying tokens that
-	   start with ## which are used to alias existing standard
-	   protocol bindings and support aliases for new standard
-	   binding URIs that are introduced in future specifications.
-
-	   The following tokens alias the standard protocol binding
-	   URIs:
-
-	   ##SOAP11_HTTP = "http://schemas.xmlsoap.org/wsdl/soap/http"
-	   ##SOAP11_HTTP_MTOM =
-                 "http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true"
-           ##SOAP12_HTTP = "http://www.w3.org/2003/05/soap/bindings/HTTP/"
-           ##SOAP12_HTTP_MTOM =
-		 "http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true"
-           ##XML_HTTP = "http://www.w3.org/2004/08/wsdl/http"
-
-        </xsd:documentation>
-     </xsd:annotation>
-     <xsd:restriction base="xsd:token">
-        <xsd:pattern value="##.+"/>
-     </xsd:restriction>
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="protocol-bindingListType">
-     <xsd:annotation>
-        <xsd:documentation>
-	   Defines the type used for specifying a list of
-	   protocol-bindingType(s). For e.g.
-
-	    ##SOAP11_HTTP ##SOAP12_HTTP ##XML_HTTP
-
-        </xsd:documentation>
-     </xsd:annotation>
-     <xsd:list itemType="javaee:protocol-bindingType"/>
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="protocol-bindingType">
-     <xsd:annotation>
-        <xsd:documentation>
-	   Defines the type used for specifying the URI for the
-	   protocol binding used by the port-component.  For
-	   portability one could use one of the following tokens that
-	   alias the standard binding types:
-
-	    ##SOAP11_HTTP
-	    ##SOAP11_HTTP_MTOM
-	    ##SOAP12_HTTP
-	    ##SOAP12_HTTP_MTOM
-	    ##XML_HTTP
-
-	   Other specifications could define tokens that start with ##
-	   to alias new standard binding URIs that are introduced.
-
-        </xsd:documentation>
-     </xsd:annotation>
-     <xsd:union memberTypes="xsd:anyURI javaee:protocol-URIAliasType"/>
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="qname-pattern">
-     <xsd:annotation>
-        <xsd:documentation>
-	     This is used to specify the QName pattern in the
-	     attribute service-name-pattern and port-name-pattern in
-	     the handler-chain element
-
-	     For example, the various forms acceptable here for
-	     service-name-pattern attribute in handler-chain element
-	     are :
-
-	     Exact Name: service-name-pattern="ns1:EchoService"
-
-		 In this case, handlers specified in this
-		 handler-chain element will apply to all ports with
-		 this exact service name. The namespace prefix must
-		 have been declared in a namespace declaration
-		 attribute in either the start-tag of the element
-		 where the prefix is used or in an an ancestor
-		 element (i.e. an element in whose content the
-		 prefixed markup occurs)
-
-	     Pattern : service-name-pattern="ns1:EchoService*"
-
-		 In this case, handlers specified in this
-		 handler-chain element will apply to all ports whose
-		 Service names are like EchoService1, EchoServiceFoo
-		 etc. The namespace prefix must have been declared in
-		 a namespace declaration attribute in either the
-		 start-tag of the element where the prefix is used or
-		 in an an ancestor element (i.e. an element in whose
-		 content the prefixed markup occurs)
-
-	     Wild Card : service-name-pattern="*"
-
-		In this case, handlers specified in this handler-chain
-		element will apply to ports of all service names.
-
-	    The same can be applied to port-name attribute in
-	    handler-chain element.
-
-        </xsd:documentation>
-     </xsd:annotation>
-
-     <xsd:restriction base="xsd:token">
-        <xsd:pattern value="\*|([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*\*?"/>
-     </xsd:restriction>
-
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="service-impl-beanType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The service-impl-bean element defines the web service implementation.
-	A service implementation can be an EJB bean class or JAX-RPC web
-	component.  Existing EJB implementations are exposed as a web service
-	using an ejb-link.
-
-	Used in: port-component
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:choice>
-      <xsd:element name="ejb-link"
-		   type="javaee:ejb-linkType"/>
-      <xsd:element name="servlet-link"
-		   type="javaee:servlet-linkType"/>
-    </xsd:choice>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="servlet-linkType">
-    <xsd:annotation>
-      <xsd:documentation>
-	<![CDATA[
-
-	  The servlet-link element is used in the service-impl-bean element
-	  to specify that a Service Implementation Bean is defined as a
-	  JAX-RPC Service Endpoint.
-
-	  The value of the servlet-link element must be the servlet-name of
-	  a JAX-RPC Service Endpoint in the same WAR file.
-
-	  Used in: service-impl-bean
-
-	  Example:
-		  <servlet-link>StockQuoteService</servlet-link>
-
-	  ]]>
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:simpleContent>
-      <xsd:restriction base="javaee:string"/>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="webservice-descriptionType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The webservice-description element defines a WSDL document file
-	and the set of Port components associated with the WSDL ports
-	defined in the WSDL document.  There may be multiple
-	webservice-descriptions defined within a module.
-
-	All WSDL file ports must have a corresponding port-component element
-	defined.
-
-	Used in: webservices
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="description"
-		   type="javaee:descriptionType"
-		   minOccurs="0" maxOccurs="1"/>
-      <xsd:element name="display-name"
-		   type="javaee:display-nameType"
-		   minOccurs="0" maxOccurs="1"/>
-      <xsd:element name="icon"
-		   type="javaee:iconType"
-		   minOccurs="0" maxOccurs="1"/>
-      <xsd:element name="webservice-description-name"
-		   type="javaee:string">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The webservice-description-name identifies the collection of
-	    port-components associated with a WSDL file and JAX-RPC
-	    mapping. The name must be unique within the deployment descriptor.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="wsdl-file"
-		   type="javaee:pathType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The wsdl-file element contains the name of a WSDL file in the
-	    module.  The file name is a relative path within the module.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="jaxrpc-mapping-file"
-		   type="javaee:pathType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The jaxrpc-mapping-file element contains the name of a file that
-	    describes the JAX-RPC mapping between the Java interaces used by
-	    the application and the WSDL description in the wsdl-file.  The
-	    file name is a relative path within the module.
-
-	    This is not required when JAX-WS based runtime is used.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="port-component"
-		   type="javaee:port-componentType"
-		   minOccurs="1" maxOccurs="unbounded">
-	<xsd:key name="port-component_handler-name-key">
-	  <xsd:annotation>
-	    <xsd:documentation>
-
-	      Defines the name of the handler. The name must be unique
-	      within the module.
-
-	    </xsd:documentation>
-	  </xsd:annotation>
-	  <xsd:selector xpath="javaee:handler"/>
-	  <xsd:field xpath="javaee:handler-name"/>
-	</xsd:key>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="webservicesType">
-    <xsd:sequence>
-      <xsd:group ref="javaee:descriptionGroup"/>
-      <xsd:element name="webservice-description"
-		   type="javaee:webservice-descriptionType"
-		   minOccurs="1" maxOccurs="unbounded">
-	<xsd:key name="port-component-name-key">
-	  <xsd:annotation>
-	    <xsd:documentation>
-	      <![CDATA[
-
-		The port-component-name element specifies a port
-		component's name.  This name is assigned by the module
-		producer to name the service implementation bean in the
-		module's deployment descriptor. The name must be unique
-		among the port component names defined in the same module.
-
-		Used in: port-component
-
-		Example:
-			<port-component-name>EmployeeService
-			</port-component-name>
-
-		]]>
-	    </xsd:documentation>
-	  </xsd:annotation>
-	  <xsd:selector xpath="javaee:port-component"/>
-	  <xsd:field xpath="javaee:port-component-name"/>
-	</xsd:key>
-      </xsd:element>
-    </xsd:sequence>
-
-    <xsd:attribute name="version"
-		   type="javaee:dewey-versionType"
-		   fixed="1.2"
-		   use="required">
-      <xsd:annotation>
-	<xsd:documentation>
-
-	  The required value for the version is 1.2.
-
-	</xsd:documentation>
-      </xsd:annotation>
-    </xsd:attribute>
-
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-</xsd:schema>
-
diff --git a/jsf-api/doc/javaee_web_services_client_1_2.xsd b/jsf-api/doc/javaee_web_services_client_1_2.xsd
deleted file mode 100644
index 1863ebd..0000000
--- a/jsf-api/doc/javaee_web_services_client_1_2.xsd
+++ /dev/null
@@ -1,586 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
-	    targetNamespace="http://java.sun.com/xml/ns/javaee"
-	    xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-	    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	    elementFormDefault="qualified"
-	    attributeFormDefault="unqualified"
-	    version="1.2">
-  <xsd:annotation>
-    <xsd:documentation>
-      @(#)javaee_web_services_client_1_2.xsds	1.19 02/13/06
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      (C) Copyright International Business Machines Corporation 2002
-
-    </xsd:documentation>
-  </xsd:annotation>
-
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="port-component-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The port-component-ref element declares a client dependency
-	on the container for resolving a Service Endpoint Interface
-	to a WSDL port. It optionally associates the Service Endpoint
-	Interface with a particular port-component. This is only used
-	by the container for a Service.getPort(Class) method call.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="service-endpoint-interface"
-		   type="javaee:fully-qualified-classType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The service-endpoint-interface element defines a fully qualified
-	    Java class that represents the Service Endpoint Interface of a
-	    WSDL port.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="enable-mtom"
-                   type="javaee:true-falseType"
-		   minOccurs="0" maxOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>
-
-            Used to enable or disable SOAP MTOM/XOP mechanism on the client
-	    side for a port-component.
-
-	    Not to be specified for JAX-RPC runtime
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="port-component-link"
-		   type="javaee:string"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The port-component-link element links a port-component-ref
-	    to a specific port-component required to be made available
-	    by a service reference.
-
-	    The value of a port-component-link must be the
-	    port-component-name of a port-component in the same module
-	    or another module in the same application unit. The syntax
-	    for specification follows the syntax defined for ejb-link
-	    in the EJB 2.0 specification.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:group name="service-refGroup">
-    <xsd:sequence>
-      <xsd:element name="service-ref"
-		   type="javaee:service-refType"
-		   minOccurs="0" maxOccurs="unbounded">
-	<xsd:key name="service-ref_handler-name-key">
-	  <xsd:annotation>
-	    <xsd:documentation>
-
-	      Defines the name of the handler. The name must be unique
-	      within the module.
-
-	    </xsd:documentation>
-	  </xsd:annotation>
-	  <xsd:selector xpath="javaee:handler"/>
-	  <xsd:field xpath="javaee:handler-name"/>
-	</xsd:key>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:group>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="service-refType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	The service-ref element declares a reference to a Web
-	service. It contains optional description, display name and
-	icons, a declaration of the required Service interface,
-	an optional WSDL document location, an optional set
-	of JAX-RPC mappings, an optional QName for the service element,
-	an optional set of Service Endpoint Interfaces to be resolved
-	by the container to a WSDL port, and an optional set of handlers.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:group ref="javaee:descriptionGroup"/>
-      <xsd:element name="service-ref-name"
-		   type="javaee:jndi-nameType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The service-ref-name element declares logical name that the
-	    components in the module use to look up the Web service. It
-	    is recommended that all service reference names start with
-	    "service/".
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="service-interface"
-		   type="javaee:fully-qualified-classType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The service-interface element declares the fully qualified class
-	    name of the JAX-RPC Service interface the client depends on.
-	    In most cases the value will be javax.xml.rpc.Service.  A JAX-RPC
-	    generated Service Interface class may also be specified.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="service-ref-type"
-		   type="javaee:fully-qualified-classType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The service-ref-type element declares the type of the service-ref
-	    element that is injected or returned when a JNDI lookup is done.
-	    This must be either a fully qualified name of Service class or
-	    the fully qualified name of service endpoint interface class.
-	    This is only used with JAX-WS runtime where the corresponding
-	    @WebServiceRef annotation can be used to denote both a Service
-	    or a Port.
-
-	    If this is not specified, then the type of service-ref element
-	    that is injected or returned when a JNDI lookup is done is
-	    always a Service interface/class.
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="wsdl-file"
-		   type="javaee:xsdAnyURIType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The wsdl-file element contains the URI location of a WSDL
-	    file. The location is relative to the root of the module.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="jaxrpc-mapping-file"
-		   type="javaee:pathType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The jaxrpc-mapping-file element contains the name of a file that
-	    describes the JAX-RPC mapping between the Java interaces used by
-	    the application and the WSDL description in the wsdl-file.  The
-	    file name is a relative path within the module file.
-
-	    This is not required when JAX-WS based runtime is used.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="service-qname"
-		   type="javaee:xsdQNameType"
-		   minOccurs="0" maxOccurs="1">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The service-qname element declares the specific WSDL service
-	    element that is being refered to.  It is not specified if no
-	    wsdl-file is declared.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="port-component-ref"
-		   type="javaee:port-component-refType"
-		   minOccurs="0" maxOccurs="unbounded">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The port-component-ref element declares a client dependency
-	    on the container for resolving a Service Endpoint Interface
-	    to a WSDL port. It optionally associates the Service Endpoint
-	    Interface with a particular port-component. This is only used
-	    by the container for a Service.getPort(Class) method call.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:choice>
-	  <xsd:element name="handler"
-		       type="javaee:service-ref_handlerType"
-		       minOccurs="0" maxOccurs="unbounded">
-	    <xsd:annotation>
-	      <xsd:documentation>
-
-		Declares the handler for a port-component. Handlers can
-		access the init-param name/value pairs using the
-		HandlerInfo interface. If port-name is not specified, the
-		handler is assumed to be associated with all ports of the
-		service.
-
-		To be used with JAX-RPC based runtime only.
-
-	      </xsd:documentation>
-	    </xsd:annotation>
-	  </xsd:element>
-	  <xsd:element name="handler-chains"
-		       type="javaee:service-ref_handler-chainsType"
-		       minOccurs="0" maxOccurs="1">
-	    <xsd:annotation>
-	      <xsd:documentation>
-		 To be used with JAX-WS based runtime only.
-	      </xsd:documentation>
-	    </xsd:annotation>
-	  </xsd:element>
-      </xsd:choice>
-
-      <xsd:group ref="javaee:resourceGroup"/>
-
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="service-ref_handler-chainType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-      The handler-chain element defines the handlerchain.
-      Handlerchain can be defined such that the handlers in the
-      handlerchain operate,all ports of a service, on a specific
-      port or on a list of protocol-bindings. The choice of elements
-      service-name-pattern, port-name-pattern and protocol-bindings
-      are used to specify whether the handlers in handler-chain are
-      for a service, port or protocol binding. If none of these
-      choices are specified with the handler-chain element then the
-      handlers specified in the handler-chain will be applied on
-      everything.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-
-      <xsd:choice minOccurs="0" maxOccurs="1">
-         <xsd:element name="service-name-pattern"
-		      type="javaee:service-ref_qname-pattern" />
-         <xsd:element name="port-name-pattern"
-	              type="javaee:service-ref_qname-pattern" />
-         <xsd:element name="protocol-bindings"
-	              type="javaee:service-ref_protocol-bindingListType"/>
-      </xsd:choice>
-
-      <xsd:element name="handler"
-                   type="javaee:service-ref_handlerType"
-		   minOccurs="1" maxOccurs="unbounded"/>
-    </xsd:sequence>
-
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="service-ref_handler-chainsType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-      The handler-chains element defines the handlerchains associated with this
-      service or service endpoint.
-
-      </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:sequence>
-      <xsd:element name="handler-chain"
-                   type="javaee:service-ref_handler-chainType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:complexType name="service-ref_handlerType">
-    <xsd:annotation>
-      <xsd:documentation>
-
-	Declares the handler for a port-component. Handlers can access the
-	init-param name/value pairs using the HandlerInfo interface. If
-	port-name is not specified, the handler is assumed to be associated
-	with all ports of the service.
-
-	Used in: service-ref
-
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:group ref="javaee:descriptionGroup"/>
-      <xsd:element name="handler-name"
-		   type="javaee:string">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines the name of the handler. The name must be unique
-	    within the module.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="handler-class"
-		   type="javaee:fully-qualified-classType">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines a fully qualified class name for the handler
-	    implementation.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-      <xsd:element name="init-param"
-		   type="javaee:param-valueType"
-		   minOccurs="0" maxOccurs="unbounded"/>
-
-      <xsd:element name="soap-header"
-		   type="javaee:xsdQNameType"
-		   minOccurs="0" maxOccurs="unbounded">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    Defines the QName of a SOAP header that will be processed
-	    by the handler.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="soap-role"
-		   type="javaee:string"
-		   minOccurs="0" maxOccurs="unbounded">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The soap-role element contains a SOAP actor definition that
-	    the Handler will play as a role.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-
-      <xsd:element name="port-name"
-		   type="javaee:string"
-		   minOccurs="0" maxOccurs="unbounded">
-	<xsd:annotation>
-	  <xsd:documentation>
-
-	    The port-name element defines the WSDL port-name that a
-	    handler should be associated with.
-
-	  </xsd:documentation>
-	</xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:ID"/>
-  </xsd:complexType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="service-ref_protocol-URIAliasType">
-     <xsd:annotation>
-        <xsd:documentation>
-	   Defines the type that is used for specifying tokens that
-	   start with ## which are used to alias existing standard
-	   protocol bindings and support aliases for new standard
-	   binding URIs that are introduced in future specifications.
-
-	   The following tokens alias the standard protocol binding
-	   URIs:
-
-	   ##SOAP11_HTTP = "http://schemas.xmlsoap.org/wsdl/soap/http"
-	   ##SOAP11_HTTP_MTOM =
-                 "http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true"
-           ##SOAP12_HTTP = "http://www.w3.org/2003/05/soap/bindings/HTTP/"
-           ##SOAP12_HTTP_MTOM =
-                 "http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true"
-           ##XML_HTTP = "http://www.w3.org/2004/08/wsdl/http"
-
-        </xsd:documentation>
-     </xsd:annotation>
-     <xsd:restriction base="xsd:token">
-        <xsd:pattern value="##.+"/>
-     </xsd:restriction>
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="service-ref_protocol-bindingListType">
-     <xsd:annotation>
-        <xsd:documentation>
-	   Defines the type used for specifying a list of
-	   protocol-bindingType(s). For e.g.
-
-	    ##SOAP11_HTTP ##SOAP12_HTTP ##XML_HTTP
-
-        </xsd:documentation>
-     </xsd:annotation>
-     <xsd:list itemType="javaee:service-ref_protocol-bindingType"/>
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="service-ref_protocol-bindingType">
-     <xsd:annotation>
-        <xsd:documentation>
-	   Defines the type used for specifying the URI for the
-	   protocol binding used by the port-component.  For
-	   portability one could use one of the following tokens that
-	   alias the standard binding types:
-
-	    ##SOAP11_HTTP
-	    ##SOAP11_HTTP_MTOM
-            ##SOAP12_HTTP
-            ##SOAP12_HTTP_MTOM
-            ##XML_HTTP
-
-	   Other specifications could define tokens that start with ##
-	   to alias new standard binding URIs that are introduced.
-
-        </xsd:documentation>
-     </xsd:annotation>
-     <xsd:union memberTypes="xsd:anyURI javaee:service-ref_protocol-URIAliasType"/>
-  </xsd:simpleType>
-
-<!-- **************************************************** -->
-
-  <xsd:simpleType name="service-ref_qname-pattern">
-     <xsd:annotation>
-        <xsd:documentation>
-	     This is used to specify the QName pattern in the
-	     attribute service-name-pattern and port-name-pattern in
-	     the handler-chain element
-
-	     For example, the various forms acceptable here for
-	     service-name-pattern attribute in handler-chain element
-	     are :
-
-	     Exact Name: service-name-pattern="ns1:EchoService"
-
-		 In this case, handlers specified in this
-		 handler-chain element will apply to all ports with
-		 this exact service name. The namespace prefix must
-		 have been declared in a namespace declaration
-		 attribute in either the start-tag of the element
-		 where the prefix is used or in an an ancestor
-		 element (i.e. an element in whose content the
-		 prefixed markup occurs)
-
-	     Pattern : service-name-pattern="ns1:EchoService*"
-
-		 In this case, handlers specified in this
-		 handler-chain element will apply to all ports whose
-		 Service names are like EchoService1, EchoServiceFoo
-		 etc. The namespace prefix must have been declared in
-		 a namespace declaration attribute in either the
-		 start-tag of the element where the prefix is used or
-		 in an an ancestor element (i.e. an element in whose
-		 content the prefixed markup occurs)
-
-	     Wild Card : service-name-pattern="*"
-
-		In this case, handlers specified in this handler-chain
-		element will apply to ports of all service names.
-
-	    The same can be applied to port-name attribute in
-	    handler-chain element.
-
-        </xsd:documentation>
-     </xsd:annotation>
-
-     <xsd:restriction base="xsd:token">
-        <xsd:pattern value="\*|([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*\*?"/>
-     </xsd:restriction>
-
-  </xsd:simpleType>
-
-</xsd:schema>
-
diff --git a/jsf-api/doc/link-props.xml b/jsf-api/doc/link-props.xml
deleted file mode 100644
index ee5c721..0000000
--- a/jsf-api/doc/link-props.xml
+++ /dev/null
@@ -1,343 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Link Properties ============================================ -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          The character encoding of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Character Set</display-name>
-        <icon></icon>
-        <property-name>charset</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The position and shape of the hot spot on the screen
-          (for use in client-side image maps).
-        </description>
-        <display-name>Coordinates</display-name>
-        <icon></icon>
-        <property-name>coords</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The language code of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Language</display-name>
-        <icon></icon>
-        <property-name>hreflang</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The relationship from the current document
-          to the anchor specified by this hyperlink.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Relationship</display-name>
-        <icon></icon>
-        <property-name>rel</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          A reverse link from the anchor specified
-          by this hyperlink to the current document.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Reverse Link</display-name>
-        <icon></icon>
-        <property-name>rev</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The shape of the hot spot on the screen
-          (for use in client-side image maps).  Valid
-          values are:  default (entire region); rect
-          (rectangular region); circle (circular region);
-          and poly (polygonal region).
-        </description>
-        <display-name>Shape</display-name>
-        <icon></icon>
-        <property-name>shape</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Name of a frame where the resource
-          retrieved via this hyperlink is to
-          be displayed.
-        </description>
-        <display-name>Target Frame</display-name>
-        <icon></icon>
-        <property-name>target</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The content type of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Content Type</display-name>
-        <icon></icon>
-        <property-name>type</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that this element must never
-          receive focus or be included in a subsequent
-          submit.
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon></icon>
-        <property-name>disabled</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon></icon>
-        <property-name>onclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-            <behavior/>
-            <behavior>action</behavior>
-            <default-behavior>true</default-behavior>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon></icon>
-        <property-name>ondblclick</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon></icon>
-        <property-name>onmousedown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon></icon>
-        <property-name>onmouseup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon></icon>
-        <property-name>onmouseover</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon></icon>
-        <property-name>onmousemove</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon></icon>
-        <property-name>onmouseout</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon></icon>
-        <property-name>onkeypress</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon></icon>
-        <property-name>onkeydown</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon></icon>
-        <property-name>onkeyup</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-            <behavior/>
-        </property-extension>
-    </property>
-
-</root>
diff --git a/jsf-api/doc/list-props.xml b/jsf-api/doc/list-props.xml
deleted file mode 100644
index 94101e8..0000000
--- a/jsf-api/doc/list-props.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== List Properties ============================================ -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        Orientation of the list to be created.  Valid values
-        are "pageDirection" (list is laid out vertically), or
-        "lineDirection" (list is laid out horizontally).
-        </description>
-        <display-name>Layout</display-name>
-        <icon></icon>
-        <property-name>layout</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/listbox-props.xml b/jsf-api/doc/listbox-props.xml
deleted file mode 100644
index 5999d2b..0000000
--- a/jsf-api/doc/listbox-props.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Listbox Properties ========================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon></icon>
-        <property-name>disabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon></icon>
-        <property-name>enabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-        Number of available options to be shown at all times.
-        If not specified, all available options are shown.
-        </description>
-        <display-name>Size</display-name>
-        <icon></icon>
-        <property-name>size</property-name>
-        <property-class>int</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/menu-props.xml b/jsf-api/doc/menu-props.xml
deleted file mode 100644
index 38be320..0000000
--- a/jsf-api/doc/menu-props.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Menu Properties ========================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon></icon>
-        <property-name>disabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon></icon>
-        <property-name>enabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-</root>
\ No newline at end of file
diff --git a/jsf-api/doc/message-message-props.xml b/jsf-api/doc/message-message-props.xml
deleted file mode 100644
index 270fe21..0000000
--- a/jsf-api/doc/message-message-props.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Message+Message Properties ================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Class</display-name>
-        <icon></icon>
-        <property-name>errorClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Styles</display-name>
-        <icon></icon>
-        <property-name>errorStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Class</display-name>
-        <icon></icon>
-        <property-name>fatalClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Styles</display-name>
-        <icon></icon>
-        <property-name>fatalStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Class</display-name>
-        <icon></icon>
-        <property-name>infoClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Styles</display-name>
-        <icon></icon>
-        <property-name>infoStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether the detail portion of the
-          message should be displayed as a tooltip.
-        </description>
-        <display-name>Tooltip</display-name>
-        <icon></icon>
-        <property-name>tooltip</property-name>
-        <property-class>boolean</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Class</display-name>
-        <icon></icon>
-        <property-name>warnClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Styles</display-name>
-        <icon></icon>
-        <property-name>warnStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/messages-messages-props.xml b/jsf-api/doc/messages-messages-props.xml
deleted file mode 100644
index b80220b..0000000
--- a/jsf-api/doc/messages-messages-props.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Messages+Messages Properties =============================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Class</display-name>
-        <icon></icon>
-        <property-name>errorClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Styles</display-name>
-        <icon></icon>
-        <property-name>errorStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Class</display-name>
-        <icon></icon>
-        <property-name>fatalClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Styles</display-name>
-        <icon></icon>
-        <property-name>fatalStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Class</display-name>
-        <icon></icon>
-        <property-name>infoClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Styles</display-name>
-        <icon></icon>
-        <property-name>infoStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          The type of layout markup to use when rendering
-          error messages.  Valid values are "table" (an HTML
-          table) and "list" (an HTML list).  If not specified,
-          the default value is "list".
-        </description>
-        <display-name>Layout</display-name>
-        <icon></icon>
-        <property-name>layout</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <default-value>"list"</default-value>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether the detail portion of the
-          message should be displayed as a tooltip.
-        </description>
-        <display-name>Tooltip</display-name>
-        <icon></icon>
-        <property-name>tooltip</property-name>
-        <property-class>boolean</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Class</display-name>
-        <icon></icon>
-        <property-name>warnClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Styles</display-name>
-        <icon></icon>
-        <property-name>warnStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/not-jsf.gif b/jsf-api/doc/not-jsf.gif
deleted file mode 100644
index e5ea5f3..0000000
Binary files a/jsf-api/doc/not-jsf.gif and /dev/null differ
diff --git a/jsf-api/doc/output-format-props.xml b/jsf-api/doc/output-format-props.xml
deleted file mode 100644
index b0adf5c..0000000
--- a/jsf-api/doc/output-format-props.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Output+Format Properties =================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  This flag
-        is set to "true" by default.
-        </description>
-        <display-name>Escape Characters</display-name>
-        <icon></icon>
-        <property-name>escape</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>true</default-value>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/output-label-props.xml b/jsf-api/doc/output-label-props.xml
deleted file mode 100644
index 671b330..0000000
--- a/jsf-api/doc/output-label-props.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Output+Label Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        Client identifier of the component for which this element
-        is a label.
-        </description>
-        <display-name>Label For Identifier</display-name>
-        <icon></icon>
-        <property-name>for</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <required>false</required>
-        </property-extension>
-    </property>
-    <property>
-        <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  If omitted, this
-        flag is assumed to be "true".
-        </description>
-        <display-name>Escape Characters</display-name>
-        <icon></icon>
-        <property-name>escape</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>true</default-value>
-            <value-expression-enabled>true</value-expression-enabled>        
-        </property-extension>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/output-resource-props.xml b/jsf-api/doc/output-resource-props.xml
deleted file mode 100644
index 36cab95..0000000
--- a/jsf-api/doc/output-resource-props.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Output+Text Properties ===================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <attribute>
-        <description>
-            <![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]>
-        </description>
-        <display-name>Resource Name</display-name>
-        <icon></icon>
-        <attribute-name>name</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-            <required>false</required>
-            <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-
-    </attribute>
-    <attribute>
-        <description>
-            <![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]>
-        </description>
-        <display-name>Library Name</display-name>
-        <icon></icon>
-        <attribute-name>library</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-            <required>false</required>
-            <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-
-    </attribute>
-</root>
diff --git a/jsf-api/doc/output-text-props.xml b/jsf-api/doc/output-text-props.xml
deleted file mode 100644
index 5c475c8..0000000
--- a/jsf-api/doc/output-text-props.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Output+Text Properties ===================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  This flag
-        is set to "true" by default.
-        </description>
-        <display-name>Escape Characters</display-name>
-        <icon></icon>
-        <property-name>escape</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>true</default-value>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/panel-grid-props.xml b/jsf-api/doc/panel-grid-props.xml
deleted file mode 100644
index bd4f8e8..0000000
--- a/jsf-api/doc/panel-grid-props.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Panel+Grid Properties ====================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-        The number of columns to render before
-        starting a new row.
-        </description>
-        <display-name>Columns</display-name>
-        <icon></icon>
-        <property-name>columns</property-name>
-        <property-class>int</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/panel-group-props.xml b/jsf-api/doc/panel-group-props.xml
deleted file mode 100644
index 3d47b09..0000000
--- a/jsf-api/doc/panel-group-props.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Panel+Grid Propertys ====================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon></icon>
-        <property-name>style</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" property on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon></icon>
-        <property-name>styleClass</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>false</pass-through>
-        </property-extension>
-    </property>
-    <property>
-        <description>
-          The type of layout markup to use when rendering this group.
-          If the value is "block" the renderer must produce an HTML
-          "div" element.  Otherwise HTML "span" element must
-          be produced.
-        </description>
-        <display-name>Layout</display-name>
-        <icon></icon>
-        <property-name>layout</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/selectmany-checkbox-props.xml b/jsf-api/doc/selectmany-checkbox-props.xml
deleted file mode 100644
index c2fedea..0000000
--- a/jsf-api/doc/selectmany-checkbox-props.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== SelectMany+CheckboxList Properties ========================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Width (in pixels) of the border to be drawn
-          around the table containing the options list.
-        </description>
-        <display-name>Table Border</display-name>
-        <icon></icon>
-        <property-name>border</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to the rendered label
-          on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon></icon>
-        <property-name>disabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to the rendered label
-          on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon></icon>
-        <property-name>enabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to the rendered label
-          on selected options.
-        </description>
-        <display-name>Selected Label Class</display-name>
-        <icon></icon>
-        <property-name>selectedClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to the rendered label
-          on unselected options.
-        </description>
-        <display-name>Unselected Label Class</display-name>
-        <icon></icon>
-        <property-name>unselectedClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Orientation of the options list to be created.
-          Valid values are "pageDirection" (list is laid
-          out vertically), or "lineDirection" (list is
-          laid out horizontally).  If not specified, the
-          default value is "lineDirection".
-        </description>
-        <display-name>Layout</display-name>
-        <icon></icon>
-        <property-name>layout</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/selectmany-props.xml b/jsf-api/doc/selectmany-props.xml
deleted file mode 100644
index ba594e4..0000000
--- a/jsf-api/doc/selectmany-props.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UISelectMany Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description><![CDATA[<p class="changed_modified_2_0"> Optional
-        attribute that is a literal string that is the fully qualified
-        class name of a concrete class that implements
-        <code>java.util.Collection</code>, or an EL expression that
-        evaluates to either 1. such a String, or 2. the
-        <code>Class</code> object itself. </p>]]>
-        </description>
-        <display-name>Collection Type</display-name>
-        <icon></icon>
-        <property-name>collectionType</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <required>false</required>
-        </property-extension>
-    </property>
-    <property>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]>
-        </description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon></icon>
-        <property-name>hideNoSelectionOption</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-            <jsp-ignore>true</jsp-ignore>
-        </property-extension>
-    </property>
-
-</root>
-
diff --git a/jsf-api/doc/selectone-props.xml b/jsf-api/doc/selectone-props.xml
deleted file mode 100644
index 04f5d3f..0000000
--- a/jsf-api/doc/selectone-props.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== SelectOne+Radio Properties ================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]>
-        </description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon></icon>
-        <property-name>hideNoSelectionOption</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-            <jsp-ignore>true</jsp-ignore>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/selectone-radio-props.xml b/jsf-api/doc/selectone-radio-props.xml
deleted file mode 100644
index e796a6a..0000000
--- a/jsf-api/doc/selectone-radio-props.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== SelectOne+Radio Properties ================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Width (in pixels) of the border to be drawn
-          around the table containing the options list.
-        </description>
-        <display-name>Table Border</display-name>
-        <icon></icon>
-        <property-name>border</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to the rendered label
-          on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon></icon>
-        <property-name>disabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          CSS style class to apply to the rendered label
-          on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon></icon>
-        <property-name>enabledClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Orientation of the options list to be created.
-          Valid values are "pageDirection" (list is laid
-          out vertically), or "lineDirection" (list is
-          laid out horizontally).  If not specified, the
-          default value is "lineDirection".
-        </description>
-        <display-name>Layout</display-name>
-        <icon></icon>
-        <property-name>layout</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-</root>
diff --git a/jsf-api/doc/standard-html-renderkit-base.xml b/jsf-api/doc/standard-html-renderkit-base.xml
deleted file mode 100644
index 29d9bf3..0000000
--- a/jsf-api/doc/standard-html-renderkit-base.xml
+++ /dev/null
@@ -1,3469 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- =========== FULL CONFIGURATION FILE ================================== -->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:xi="http://www.w3.org/2001/XInclude"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">
-
-    <!-- Generic User Interface Components -->
-
-
-    <component>
-
-        <component-type>javax.faces.Column</component-type>
-        <component-class>javax.faces.component.UIColumn</component-class>
-        <facet>
-            <facet-name>header</facet-name>
-        </facet>
-        <facet>
-            <facet-name>footer</facet-name>
-        </facet>
-
-        <xi:include href="uicolumn-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Column</component-family>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Command</component-type>
-        <component-class>javax.faces.component.UICommand</component-class>
-
-        <xi:include href="uicommand-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Command</component-family>
-            <renderer-type>javax.faces.Button</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Data</component-type>
-        <component-class>javax.faces.component.UIData</component-class>
-
-        <xi:include href="uidata-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Data</component-family>
-            <renderer-type>javax.faces.Table</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Form</component-type>
-        <component-class>javax.faces.component.UIForm</component-class>
-
-        <xi:include href="uiform-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Form</component-family>
-            <renderer-type>javax.faces.Form</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Graphic</component-type>
-        <component-class>javax.faces.component.UIGraphic</component-class>
-
-        <xi:include href="uigraphic-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Graphic</component-family>
-            <renderer-type>javax.faces.Image</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Input</component-type>
-        <component-class>javax.faces.component.UIInput</component-class>
-
-        <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Input</component-family>
-            <renderer-type>javax.faces.Text</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Message</component-type>
-        <component-class>javax.faces.component.UIMessage</component-class>
-
-        <xi:include href="uimessage-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Message</component-family>
-            <renderer-type>javax.faces.Message</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Messages</component-type>
-        <component-class>javax.faces.component.UIMessages</component-class>
-
-        <xi:include href="uimessages-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Messages</component-family>
-            <renderer-type>javax.faces.Messages</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.NamingContainer</component-type>
-        <component-class>javax.faces.component.UINamingContainer</component-class>
-
-        <xi:include href="uinamingcontainer-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.NamingContainer</component-family>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Output</component-type>
-        <component-class>javax.faces.component.UIOutput</component-class>
-
-        <xi:include href="uioutput-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.Text</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.OutcomeTarget</component-type>
-        <component-class>javax.faces.component.UIOutcomeTarget</component-class>
-
-        <xi:include href="uioutcometarget-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.OutcomeTarget</component-family>
-            <renderer-type>javax.faces.Link</renderer-type>
-        </component-extension>
-
-    </component>
-    
-    <component>
-
-        <component-type>javax.faces.Panel</component-type>
-        <component-class>javax.faces.component.UIPanel</component-class>
-
-        <xi:include href="uipanel-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Panel</component-family>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.ViewParameter</component-type>
-        <component-class>javax.faces.component.UIViewParameter</component-class>
-
-        <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="uiparameter-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.ViewParameter</component-family>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.Parameter</component-type>
-        <component-class>javax.faces.component.UIParameter</component-class>
-
-        <xi:include href="uiparameter-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.Parameter</component-family>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.SelectBoolean</component-type>
-        <component-class>javax.faces.component.UISelectBoolean</component-class>
-
-        <xi:include href="uiselectboolean-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.SelectBoolean</component-family>
-            <renderer-type>javax.faces.Checkbox</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.SelectItem</component-type>
-        <component-class>javax.faces.component.UISelectItem</component-class>
-
-        <xi:include href="uiselectitem-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.SelectItem</component-family>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.SelectItems</component-type>
-        <component-class>javax.faces.component.UISelectItems</component-class>
-
-        <xi:include href="uiselectitems-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.SelectItems</component-family>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.SelectMany</component-type>
-        <component-class>javax.faces.component.UISelectMany</component-class>
-
-        <xi:include href="uiselectmany-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.SelectMany</component-family>
-            <renderer-type>javax.faces.Listbox</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.SelectOne</component-type>
-        <component-class>javax.faces.component.UISelectOne</component-class>
-
-        <xi:include href="uiselectone-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.SelectOne</component-family>
-            <renderer-type>javax.faces.Menu</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <component-type>javax.faces.ViewRoot</component-type>
-        <component-class>javax.faces.component.UIViewRoot</component-class>
-
-        <xi:include href="uiviewroot-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <component-family>javax.faces.ViewRoot</component-family>
-        </component-extension>
-
-    </component>
-
-
-    <!-- Concrete HTML Components -->
-
-    <component>
-                                                                                 
-        <description>
-            <![CDATA[<p>Represents a column that will be rendered 
-      in an HTML <code>table</code> element.</p>]]>
-        </description>
-        <display-name>Column</display-name>
-        <component-type>javax.faces.HtmlColumn</component-type>
-        <component-class>javax.faces.component.html.HtmlColumn</component-class>
-                                                                                 
-        <xi:include href="uicolumn-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="column-props.xml" xpointer="xpointer(/root/*)"/>
-                                                                                 
-        <component-extension>
-            <base-component-type>javax.faces.Column</base-component-type>
-        </component-extension>
-                                                                                 
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>input</code> element
-      for a button of type <code>submit</code> or <code>reset</code>.
-      The label text is specified by the component value.</p>]]>
-        </description>
-        <display-name>Command Button</display-name>
-        <component-type>javax.faces.HtmlCommandButton</component-type>
-        <component-class>javax.faces.component.html.HtmlCommandButton</component-class>
-
-        <xi:include href="uicommand-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="image-button-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="command-button-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Command</base-component-type>
-            <renderer-type>javax.faces.Button</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>a</code> element for a hyperlink that acts
-      like a submit button.  This component must be placed inside
-      a form, and requires JavaScript to be enabled in the client.</p>]]>
-        </description>
-        <display-name>Command Hyperlink</display-name>
-        <component-type>javax.faces.HtmlCommandLink</component-type>
-        <component-class>javax.faces.component.html.HtmlCommandLink</component-class>
-
-        <xi:include href="uicommand-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="link-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Command</base-component-type>
-            <renderer-type>javax.faces.Link</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a set of repeating data (segregated into
-      columns by child UIColumn components) that will
-      be rendered in an HTML <code>table</code> element.</p>]]>
-        </description>
-        <display-name>Data Table</display-name>
-        <component-type>javax.faces.HtmlDataTable</component-type>
-        <component-class>javax.faces.component.html.HtmlDataTable</component-class>
-
-        <xi:include href="uidata-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="table-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Data</base-component-type>
-            <renderer-type>javax.faces.Table</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>form</code> element.  Child input components
-      will be submitted unless they have been disabled.</p>]]>
-        </description>
-        <display-name>Form</display-name>
-        <component-type>javax.faces.HtmlForm</component-type>
-        <component-class>javax.faces.component.html.HtmlForm</component-class>
-
-        <xi:include href="uiform-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="form-form-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Form</base-component-type>
-            <renderer-type>javax.faces.Form</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>img</code> element, used to retrieve
-      and render a graphical image.</p>]]>
-        </description>
-        <display-name>Graphic Image</display-name>
-        <component-type>javax.faces.HtmlGraphicImage</component-type>
-        <component-class>javax.faces.component.html.HtmlGraphicImage</component-class>
-
-        <xi:include href="uigraphic-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="graphic-image-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Graphic</base-component-type>
-            <renderer-type>javax.faces.Image</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>hidden</code>.</p>]]>
-        </description>
-        <display-name>Input Hidden</display-name>
-        <component-type>javax.faces.HtmlInputHidden</component-type>
-        <component-class>javax.faces.component.html.HtmlInputHidden</component-class>
-
-        <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Input</base-component-type>
-            <renderer-type>javax.faces.Hidden</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>password</code>.  On a redisplay,
-      any previously entered value will <em>not</em>
-      be rendered (for security reasons) unless the
-      <code>redisplay</code> property is set to
-      <code>true</code>.</p>]]>
-        </description>
-        <display-name>Input Secret</display-name>
-        <component-type>javax.faces.HtmlInputSecret</component-type>
-        <component-class>javax.faces.component.html.HtmlInputSecret</component-class>
-
-        <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="text-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-secret-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Input</base-component-type>
-            <renderer-type>javax.faces.Secret</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>text</code>.</p>]]>
-        </description>
-        <display-name>Input Text</display-name>
-        <component-type>javax.faces.HtmlInputText</component-type>
-        <component-class>javax.faces.component.html.HtmlInputText</component-class>
-
-        <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="text-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Input</base-component-type>
-            <renderer-type>javax.faces.Text</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>textarea</code> element.</p>]]>
-        </description>
-        <display-name>Input Textarea</display-name>
-        <component-type>javax.faces.HtmlInputTextarea</component-type>
-        <component-class>javax.faces.component.html.HtmlInputTextarea</component-class>
-
-        <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-textarea-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Input</base-component-type>
-            <renderer-type>javax.faces.Textarea</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <display-name>Message</display-name>
-        <component-type>javax.faces.HtmlMessage</component-type>
-        <component-class>javax.faces.component.html.HtmlMessage</component-class>
-
-        <xi:include href="uimessage-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="message-message-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Message</base-component-type>
-            <renderer-type>javax.faces.Message</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <display-name>Messages</display-name>
-        <component-type>javax.faces.HtmlMessages</component-type>
-        <component-class>javax.faces.component.html.HtmlMessages</component-class>
-
-        <xi:include href="uimessages-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="messages-messages-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Messages</base-component-type>
-            <renderer-type>javax.faces.Messages</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a component that looks up a localized message in a
-      resource bundle, optionally uses it as a
-      <code>MessageFormat</code> pattern string and substitutes in
-      parameter values from nested <em>UIParameter</em> components, and
-      renders the result.  If the "dir" or "lang" attributes are
-      present, render a <code>span</code> element and pass them through
-      as attributes on the span.</p>]]>
-        </description>
-        <display-name>Output Format</display-name>
-        <component-type>javax.faces.HtmlOutputFormat</component-type>
-        <component-class>javax.faces.component.html.HtmlOutputFormat</component-class>
-
-        <xi:include href="uioutput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="output-format-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Output</base-component-type>
-            <renderer-type>javax.faces.Format</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>label</code> element, used to define
-      an accessible label for a corresponding input element.</p>]]>
-        </description>
-        <display-name>Output Label</display-name>
-        <component-type>javax.faces.HtmlOutputLabel</component-type>
-        <component-class>javax.faces.component.html.HtmlOutputLabel</component-class>
-
-        <xi:include href="uioutput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="output-label-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Output</base-component-type>
-            <renderer-type>javax.faces.Label</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>a</code> (hyperlink) element that may be
-      used to link to an arbitrary URL defined by the <code>value</code>
-      property.</p>]]>
-        </description>
-        <display-name>Output Hyperlink</display-name>
-        <component-type>javax.faces.HtmlOutputLink</component-type>
-        <component-class>javax.faces.component.html.HtmlOutputLink</component-class>
-
-        <xi:include href="uioutput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="link-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="direct-link-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Output</base-component-type>
-            <renderer-type>javax.faces.Link</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-       <description>
-            <![CDATA[<p>Represents an HTML <code>a</code> (hyperlink) element that may be
-      used to link to a URL handled by the Faces Servlet resolved preemptively using the logical
-      outcome defined by the <code>outcome</code> property.]]></description>
-        <display-name>Outcome Target Hyperlink</display-name>
-        <component-type>javax.faces.HtmlOutcomeTargetLink</component-type>
-        <component-class>javax.faces.component.html.HtmlOutcomeTargetLink</component-class>
-
-        <xi:include href="uioutcometarget-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="link-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="direct-link-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.OutcomeTarget</base-component-type>
-            <renderer-type>javax.faces.Link</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-       <description>
-            <![CDATA[<p>Represents an HTML <code>input</code> element of type "button" or image that
-            may be used to link to a URL handled by the Faces Servlet resolved preemptively using
-            the logical outcome defined by the <code>outcome</code> property. The button behaves like
-            a link, so the current form is not submitted when it is activated (the transitive of how
-            the UICommandLink behaves like a submit button).]]></description>
-        <display-name>Outcome Target Button</display-name>
-        <component-type>javax.faces.HtmlOutcomeTargetButton</component-type>
-        <component-class>javax.faces.component.html.HtmlOutcomeTargetButton</component-class>
-
-        <xi:include href="uioutcometarget-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="image-button-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="direct-link-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.OutcomeTarget</base-component-type>
-            <renderer-type>javax.faces.Button</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Renders the component value as text, optionally wrapping in a
-      <code>span</code> element if I18N attributes, CSS styles or style
-      classes are specified.</p>]]>
-        </description>
-        <display-name>Output Text</display-name>
-        <component-type>javax.faces.HtmlOutputText</component-type>
-        <component-class>javax.faces.component.html.HtmlOutputText</component-class>
-
-        <xi:include href="uioutput-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="output-text-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Output</base-component-type>
-            <renderer-type>javax.faces.Text</renderer-type>
-        </component-extension>
-
-    </component>
-    
-    <component>
-
-        <description>
-            <![CDATA[<p>Renders child components in a table, starting a new
-      row after the specified number of columns.</p>]]>
-        </description>
-        <display-name>Panel Grid</display-name>
-        <component-type>javax.faces.HtmlPanelGrid</component-type>
-        <component-class>javax.faces.component.html.HtmlPanelGrid</component-class>
-
-        <xi:include href="uipanel-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="table-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="panel-grid-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Panel</base-component-type>
-            <renderer-type>javax.faces.Grid</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Causes all child components of this component
-      to be rendered.  This is useful in scenarios
-      where a parent component is expecting a single
-      component to be present, but the application
-      wishes to render more than one.</p>]]>
-        </description>
-        <display-name>Panel Group</display-name>
-        <component-type>javax.faces.HtmlPanelGroup</component-type>
-        <component-class>javax.faces.component.html.HtmlPanelGroup</component-class>
-
-        <xi:include href="uipanel-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="panel-group-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Panel</base-component-type>
-            <renderer-type>javax.faces.Group</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>checkbox</code>.  The checkbox will
-      be rendered as checked, or not, based on the value
-      of the <code>value</code> property.</p>]]>
-        </description>
-        <display-name>Checkbox</display-name>
-        <component-type>javax.faces.HtmlSelectBooleanCheckbox</component-type>
-        <component-class>javax.faces.component.html.HtmlSelectBooleanCheckbox</component-class>
-
-        <xi:include href="uiselectboolean-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props-noclick.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props-nochange.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-valueChanged-click.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.SelectBoolean</base-component-type>
-            <renderer-type>javax.faces.Checkbox</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a multiple-selection component that is rendered
-      as a set of HTML <code>input</code> elements of type
-      <code>checkbox</code>.</p>]]>
-        </description>
-        <display-name>Multi-Select Checkbox</display-name>
-        <component-type>javax.faces.HtmlSelectManyCheckbox</component-type>
-        <component-class>javax.faces.component.html.HtmlSelectManyCheckbox</component-class>
-
-        <xi:include href="uiselectmany-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props-noclick.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props-nochange.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-valueChanged-click.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="selectmany-checkbox-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.SelectMany</base-component-type>
-            <renderer-type>javax.faces.Checkbox</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a multiple-selection component that is rendered
-      as an HTML <code>select</code> element, showing either all
-      available options or the specified number of options.</p>]]>
-        </description>
-        <display-name>Multi-Select Listbox</display-name>
-        <component-type>javax.faces.HtmlSelectManyListbox</component-type>
-        <component-class>javax.faces.component.html.HtmlSelectManyListbox</component-class>
-
-        <xi:include href="uiselectmany-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="listbox-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.SelectMany</base-component-type>
-            <renderer-type>javax.faces.Listbox</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a multiple-selection component that is rendered
-      as an HTML <code>select</code> element, showing a single
-      available option at a time.</p>]]>
-        </description>
-        <display-name>Multi-Select Menu</display-name>
-        <component-type>javax.faces.HtmlSelectManyMenu</component-type>
-        <component-class>javax.faces.component.html.HtmlSelectManyMenu</component-class>
-
-        <xi:include href="uiselectmany-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="menu-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.SelectMany</base-component-type>
-            <renderer-type>javax.faces.Menu</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a single-selection component that is rendered
-      as an HTML <code>select</code> element, showing either all
-      available options or the specified number of options.</p>]]>
-        </description>
-        <display-name>Listbox</display-name>
-        <component-type>javax.faces.HtmlSelectOneListbox</component-type>
-        <component-class>javax.faces.component.html.HtmlSelectOneListbox</component-class>
-
-        <xi:include href="uiselectone-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="listbox-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.SelectOne</base-component-type>
-            <renderer-type>javax.faces.Listbox</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a single-selection component that is rendered
-      as an HTML <code>select</code> element, showing a single
-      available option at a time.</p>]]>
-        </description>
-        <display-name>Menu</display-name>
-        <component-type>javax.faces.HtmlSelectOneMenu</component-type>
-        <component-class>javax.faces.component.html.HtmlSelectOneMenu</component-class>
-
-        <xi:include href="uiselectone-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="menu-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.SelectOne</base-component-type>
-            <renderer-type>javax.faces.Menu</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <component>
-
-        <description>
-            <![CDATA[<p>Represents a single-selection component that is rendered
-      as a set of HTML <code>input</code> elements of type
-      <code>radio</code>.</p>]]>
-        </description>
-        <display-name>Radio</display-name>
-        <component-type>javax.faces.HtmlSelectOneRadio</component-type>
-        <component-class>javax.faces.component.html.HtmlSelectOneRadio</component-class>
-
-        <xi:include href="uiselectone-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props-noclick.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="focus-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="input-props-nochange.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-valueChanged-click.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="selectone-radio-props.xml" xpointer="xpointer(/root/*)"/>
-        <component-extension>
-            <base-component-type>javax.faces.SelectOne</base-component-type>
-            <renderer-type>javax.faces.Radio</renderer-type>
-        </component-extension>
-
-    </component>
-
-    <!--
-         the following components are here merely for AttributeManager
-         generation.
-    -->
-
-    <component>
-        <description>NONE</description>
-        <display-name>head</display-name>
-        <component-type>javax.faces.OutputHead</component-type>
-        <component-class>javax.faces.component.html.HtmlHead</component-class>
-
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-
-        <component-extension>
-            <base-component-type>javax.faces.Output</base-component-type>
-            <renderer-type>javax.faces.Head</renderer-type>
-        </component-extension>
-    </component>
-
-    <component>
-        <description>NONE</description>
-        <display-name>body</display-name>
-        <component-type>javax.faces.OutputBody</component-type>
-        <component-class>javax.faces.component.html.HtmlBody</component-class>
-
-        <xi:include href="i18n-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="core-props.xml" xpointer="xpointer(/root/*)"/>
-        <xi:include href="events-props.xml" xpointer="xpointer(/root/*)"/>
-        <property>
-            <description>
-            </description>
-            <display-name></display-name>
-            <icon></icon>
-            <property-name>onload</property-name>
-            <property-class>java.lang.String</property-class>
-            <property-extension>
-                <pass-through>true</pass-through>
-                <behavior/>
-            </property-extension>
-        </property>
-
-        <property>
-            <description>
-            </description>
-            <display-name></display-name>
-            <icon></icon>
-            <property-name>onunload</property-name>
-            <property-class>java.lang.String</property-class>
-            <property-extension>
-                <pass-through>true</pass-through>
-                <behavior/>
-            </property-extension>
-        </property>
-
-        <component-extension>
-            <base-component-type>javax.faces.Output</base-component-type>
-            <renderer-type>javax.faces.Body</renderer-type>
-        </component-extension>
-    </component>
-
-
-    <!-- Standard HTML Renderkit -->
-
-    <render-kit>
-
-        <description>
-            <![CDATA[
-     The standard HTML RenderKit.  Please see the spec for additional
-     details for the standard render-kit.
-
-     <div class="changed_added_2_0">
-     <p>The following new renderers have been
-     added in this release of the specification.  The default
-     implementation of the spec must not expose these renderers to JSP
-     based views.</p>
-
-<dl>
-<dt>javax.faces.Output</dt>
-
-<dd>javax.faces.Body
-</dd>
-
-<dd>javax.faces.Head
-</dd>
-
-<dd>javax.faces.resource.Script
-</dd>
-
-<dd>javax.faces.resource.Stylesheet
-</dd>
-
-<dd>javax.faces.Composite
-</dd>
-
-
-</dl>
-
-     </div>
-
-     <p><a name="general_decoding">General</a> notes on decoding</p>
-
-     <ul>
-
-     <p>Only Renderers for components which cause data to sent to the
-     server on a page submit need to implement decode behavior.  In
-     practical terms, this means Renderers for components that implement
-     from <code>javax.faces.component.EditableValueHolder</code> or
-     <code>javax.faces.component.ActionSource</code> or Renderers for
-     <code>javax.faces.component.UIForm</code> components.  Renderers
-     for components that do not send data to the server on page submit
-     may choose to accept the no-op decode behavior of the
-     <code>javax.faces.render.Renderer</code> abstract class.  In the
-     Renderer descriptions that follow, the omission of a Decode
-     Behavior section indicates that this Renderer does no decoding.</p>
-
-     <p>If a Renderer chooses to implement decode behavior, it must
-     consult the "disabled" and "readonly" attributes of the component
-     to be rendered, if the value of either attribute is equal to,
-     ignoring case, the string "true" (without the quotes) the decode
-     method must take no action and return immediately.</p>
-
-     <div class="changed_added_2_0">
-     <p>If the component associated with the Renderer implements the
-     <code>javax.faces.component.behavior.ClientBehaviorHolder</code> interface,
-     process <code>javax.faces.component.behavior.ClientBehavior</code>s as follows:
-      <ul>
-      <li>Determine if there are <code>javax.faces.component.behavior.ClientBehavior</code>s
-      associated with this component by calling the implementation of
-      <code>javax.faces.component.behavior.ClientBehaviorHolder.getClientBehaviors</code>.</li>
-      <li>If there are <code>client behaviors</code>, determine the
-      client behavior event name from the request parameter:
-      <code>javax.faces.behavior.event</code>.</li>
-      <li>If that request parameter exists, get the <code>List</code> of
-      <code>javax.faces.component.behavior.ClientBehavior</code>s for the
-      behavior event name from the <code>Map</code> returned from
-      <code>javax.faces.component.behavior.ClientBehaviorHolder.getClientBehaviors</code>.</li>
-      <li>If there are <code>client behaviors</code> for the <code>behavior event name</code>,
-      determine the behavior source name from the request parameter:
-      <code>javax.faces.source</code>.</li>
-      <li>If the request parameter exists, and its value is the same as this
-      component's <code>clientId</code>, iterate over the <code>List</code> of
-      <code>javax.faces.component.behavior.ClientBehavior</code>s and call the
-      <code>decode()</code> method for each one.</li>
-      </ul>
-      Behavior decoding is applicable to components that are "readonly", but it is
-      not applicable to components that are "disabled".</p>
-      </div>
-
-     <p>
-
-     </ul>
-
-     <p><a name="general_encoding">General</a> notes on encoding</p>
-
-     <ul>
-
-     <p>If the value of the component's "rendered" property is false,
-     the component, and its children must not be rendered.</p>
-
-     <p>General notes regarding the <code>id</code> attribute</p>
-
-     <ul>
-
-     <p>All components, and therefore all tags for those components
-     support the <code>id</code> attribute.  This attribute is optional.
-     If not present its value is autogenerated by the implementation and
-     used for internal purposes only.  If present, an <code>id</code>
-     attribute must not start with the <code>String</code> listed as the
-     value of the constant <code>UIViewRoot.UNIQUE_ID_PREFIX</code>, and
-     it must be unique within the scope of the nearest component that is
-     a <code>NamingContainer</code>.  </p>
-
-     <p>All renderers must take the following action regarding the
-     <code>id</code> attribute: If the value returned from
-     <code>component.getId()</code> is non-<code>null</code> and does
-     not start with <code>UIViewRoot.UNIQUE_ID_PREFIX</code>, call
-     <code>component.getClientId()</code> and render the result as the
-     value of the <code>id</code> attribute in the markup for the
-     component.  See the javadoc for
-     <code>component.getClientId()</code> for details, particularly note
-     that the Renderer has a chance to modify the client id before it is
-     rendered. If the component doesn't generate any markup elements,
-     include the <code>id</code> attribte on a "span" element that
-     encloses the content for the component.</p>
-
-    <p>In addition to any action already specified in the renderers, all
-    renderers for <code>UIInput</code> components must take the
-    following action regarding the <code>id</code> attribute: Call
-    <code>component.getClientId()</code> and render the result as the
-    value of the <code>name</code> attribute.  This may cause some
-    renderers to have "id" and "name" attributes that have exactly the
-    same value.</p>
-
-    </ul>
-
-     <p>General notes regarding the rendering of JavaScript in the
-     standard components.</p>
-
-     <ul>
-
-       <p>The intent of the standard renderkit is to specify the minimal
-       Renderers a JSF implementation must provide.  As such, it is the
-       baseline for building JSF applications that are maximally
-       portable across JSF implementations and user agents.  Therefore,
-       the use of JavaScript must be minimized as not all browsers
-       support JavaScript, nor do all users enable JavaScript support in
-       their user agents.</p>
-
-       <p>Compliant implementations must only generate JavaScript in the
-       <a href="javax.faces.Commandjavax.faces.Link.html">
-       <code>javax.faces.Link</code></a> and <a
-       href="javax.faces.Commandjavax.faces.Button.html"><code>javax.faces.Button</code></a>
-       Renderers for the <code>javax.faces.Command</code></a> component.
-       The generation of JavaScript in any other Renderer in the
-       HTML_BASIC renderkit is not permitted.  However, any JavaScript
-       code provided by the user as the value of a passthru attribute,
-       such as "onmouseover", is excluded from this restriction.</p>
-
-     </ul>
-
-     <div class="changed_added_2_0">
-     <p><a name="general_behavior_encoding">General</a> notes regarding the rendering of component <code>Client Behaviors</code>.</p>
-
-     <ul>
-
-       <p>Components that implement the <code>javax.faces.component.behavior.ClientBehaviorHolder</code>
-       interface are eligable to have <code>ClientBehavior</code> instances attached to them. The standard
-       renderers are responsible for inserting the scripts produced by client behaviors into the component's
-       rendered content.  Components may obtain script from multiple sources.  Event handler scripts may be specified 
-       by page authors, scripts may be produced by client behaviors and renderers may produce ther own scripts.
-       When multiple scripts are present, the scripts must be chained together in this order:
-       <ul>
-       <li>User specified event handler scripts</li>
-       <li>client behavior scripts</li>
-       <li>renderer specific scripts</li>
-       </ul>
-       If any of the scripts in the chain returns <code>false</code>, subsequent script must not be executed.
-       The specification provides a utility function <code>jsf.util.chain</code> to handle this capability.  If there
-       are <code>UIParameter</code> children the parameter names and values must be passed into the client behavior
-       getScript method via the <code>ClientBehaviorContext</code>.</p> 
-         
-     </ul>
-     </div>
-
-
-    </ul>]]>
-
-        </description>
-
-        <renderer>
-
-            <description><![CDATA[<p><span
-            class="changed_modified_2_0">Renders an HTML "input"
-            element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If the value in the
-      <code>Map</code> for the value of the "clientId" property of the
-      component is <code>null</code>, create a String by concatenating
-      the value of the "clientId" property of the component with the
-      String ".x" (without the quotes).  Create another String in the
-      same manner, but concatenate ".y" (without the quotes).  If
-      <code>null</code> is the value in the <code>Map</code> for both
-      Strings, return from <code>decode()</code>.  If the value in the
-      <code>Map</code> for the value of the "clientId" property of the
-      component is not <code>null</code>, get the value of the "type"
-      attribute, and convert it to lower case.  If the result is equal
-      to the String "reset" (without the quotes), return from
-      <code>decode()</code>.  Otherwise, create a
-      <code>javax.faces.event.ActionEvent</code> around the component,
-      and pass it to the <code>queueEvent()</code> method of the
-      component, which must be an instance of
-      <code>UICommand</code>.</p>
-
-      </ul>
-
-
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render the clientId of the component as the value of the "name"
-      attribute.  Render the current value of the component as the value
-      of the "value" attribute. If "image" attribute is specified render
-      it as the value of the "src" attribute after passing it to the
-      <code>getResourceURL()</code> method of the
-      <code>ViewHandler</code> for this application, and passing the
-      result through the <code>encodeResourceURL()</code> method of the
-      <code>ExternalContext</code>.  <span
-      class="changed_added_2_0">Note that calling
-      <code>getResourceURL()</code> will prefix the context-root of the
-      current application if the value of the "src" attribute starts
-      with "/".</span> When handling the "image" attribute, the value
-      must not be escaped.  For example, <code>&</code> must not be
-      turned into <code>&amp;</code>.  If the "styleClass" attribute
-      is specified, render its value as the value of the "class"
-      attribute.  If the user has specified an "onclick" attribute,
-      append that JavaScript to any existing JavaScript <span
-      class="changed_modified_2_0_rev_a">already being output by the
-      implementation before rendering.</span></p>
-
-      <p class="changed_added_2_0">If the component being rendered by
-      this renderer has any <code>UIParameter</code> children, each one
-      of them must be rendered using the renderer for component-family:
-      "javax.faces.Input" and renderer-type: "javax.faces.Hidden".  For
-      discussion, this is called the hiddenRenderer.  A component with
-      component-type "javax.faces.Input" must be created for local use
-      in rendering each <code>UIParameter</code> child.  The "id"
-      property of the temporary component must be set to the "name" of
-      the <code>UIParameter</code>.  The "value" property of the
-      temporary component must be set to the "value" of the
-      <code>UIParameter</code>.  For each <code>UIParameter</code>
-      child, the hiddenRenderer must have its
-      <code>encodeBegin()</code>, <code>encodeChildren()</code>, and
-      <code>encodeEnd()</code> methods called, in order, passing the
-      temporary component as the second argument.</p>
-
-      </ul>
-            ]]>
-            </description>
-            <component-family>javax.faces.Command</component-family>
-            <renderer-type>javax.faces.Button</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/command-button-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="image-button-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="command-button-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML "a" anchor
-            element that acts like a form submit button when
-            clicked.</p>
-
-      <p>General Behaviour</p>
-
-      <p>Both the encode and decode behavior require the ability to get
-      the id/name for a hidden field, <span
-      class="changed_added_2_0">which may be rendered in markup or which
-      may be programmatically added via client DOM manipulation</span>,
-      whose value is set by the JavaScript form submit.  This name must
-      be constructed as follows:</p>
-
-      <ul>
-
-      <li><p>Get the clientId for the form of which this component is a
-      child.</p></li>
-
-      <li><p>Append
-      <code>NamingContainer.SEPARATOR_CHAR</code>.</p></li>
-
-      <li><p>Append a constant string that is the same for all command
-      link components in the tree.</p></li>
-
-      </ul>
-
-      <p>In the following text, this String is called
-      hiddenFieldName.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the "clientId" property of the component.  Obtain the
-      <code>Map</code> from the "requestParameterMap" property of the
-      <code>ExternalContext</code>.  Derive hiddenFieldName as above.
-      Get the entry in the <code>Map</code> under the key that is the
-      hiddenFieldName.  If the there is no entry, or the entry is the
-      empty String, or the entry is not equal to the value of the
-      "clientId" property, return immediately.  If there is an entry,
-      and its value is equal to the value of the "clientId" property,
-      create a new <code>javax.faces.event.ActionEvent</code> instance
-      around the component and call <code>queueActionEvent()</code> on
-      the component, passing the event.</p>
-
-      </ul>
-
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>If the value of the <code>disabled</code> attribute is
-      <code>true</code>, render a span element.  Render all the passthru
-      attributes and the <code>target</code> attribute as pass-through
-      attributes on the span, even though the <code>target</code>
-      attribute will have no effect on a span.  Render the current value
-      of the component as the content of the span.  Return.</p>
-
-      <p>If the <code>disabled</code> attribute is not present, or its
-      value is <code>false</code>, render an HTML <code>a</code>
-      element.  Render "#" as the value of the "href" attribute. Render
-      the current value of the component as the link text if it is
-      specified. Render JavaScript that is functionally equivalent to
-      the following as the value of the "onclick" attribute:</p>
-
-      <p><code>document.forms['CLIENT_ID']['hiddenFieldName'].value='CLIENT_ID';
-      document.forms['CLIENT_ID']['PARAM1_NAME'].value='PARAM1_VALUE';
-      document.forms['CLIENT_ID']['PARAM2_NAME'].value='PARAM2_VALUE';
-      return false;</code></p>
-
-      <p>document.forms['CLIENT_ID'].submit()" where hiddenFieldName is
-      as described above, CLIENT_ID is the clientId of the UICommand
-      component, PARAM*_NAME and PARAM*_VALUE are the names and values,
-      respectively, of any nested UIParameter children.  The name and
-      the value must be URLEncoded.  <span
-      class="changed_modified_2_0_rev_a">Note that the required url
-      encoding is handled by
-      <code>ResponseWrter.writeAttribute()</code>.</span> If an
-      "onclick" attribute was specified by the user, render this
-      JavaScript in a function, and render the user's JavaScript in a
-      function.  Render both functions in a choice function as
-      follows:</p>
-
-      <p><code>var a=function(){#USER_FUNCTION#};
-      var b=function(){#JSF_FUNCTION#};
-      return (a()==false) ? false : b();</code></p>
-      
-      <p>where #USER_FUNCTION# is the user's JavaScript and
-      #JSF_FUNCTION# is the JavaScript rendered by JSF.  The choice
-      function should operate such that if the user's JavaScript returns
-      true, then the rendered JavaScript will also execute.</p>
- 
-      <p>If the "styleClass" attribute is specified, render its value as
-      the value of the "class" attribute.  Render any non-UIParameter
-      output children as normal inside of the "a" element.  These will
-      appear as the link text.  Allow the form renderer to output a
-      single "input" element (for the entire page, regardless of how
-      many command link components are in the page) of "type" "hidden"
-      whose "name" is the value of hiddenFieldName, and which must not
-      have a "value" attribute.  Multiple occurrences of command link
-      components in the tree should not cause multiple hiddenFieldName
-      hidden fields.  Allow the form renderer to output an "input"
-      element of "type" "hidden" for each of the nested UIParameter
-      children, taking the name property (but not the value) from each
-      one in turn.  If the "disabled" attribute is specified, do not
-      render the HTML "a" anchor element or its "href" attribute.
-      Instead, render a "span" element.  If the "styleClass" attribute
-      is specified, render its value as the value of the "class"
-      attribute on the "span".  Render any pass-through attributes on
-      the "span".  The content of the span element comes from the value
-      of the component or its children as specified above.</p>
-
-      <p>If the user specified a <code>target</code> attribute, its
-      value must be set using javascript since the <code>onclick</code>
-      handler will prevent the target attribute from being generated.
-      This must be accomplished using JavaScript that is equivalent to
-      the following.</p>
-
-      <p><code>document.forms['CLIENT_ID'].target='TARGET';</code></p>
-
-      <p>Where TARGET is the value of the target attribute on the JSP
-      tag.</p>
-
-      </ul>]]>
-            </description>
-            <component-family>javax.faces.Command</component-family>
-            <renderer-type>javax.faces.Link</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/command-link-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="link-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-                <body-tag>true</body-tag>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description>
-                <![CDATA[
-      <p>Renders an HTML "table" element compliant with the HTML 401
-      specification.  Render the "caption" facet, if present, inside a
-      "caption" element immediately below the "table" element.  If the
-      "captionClass" attribute is specified, render its value as the
-      value of the "class" attribute on the "caption" element.  If the
-      "captionStyle" attribute is specified, render its value as the
-      value of the "style" attribute on the "caption" element.</p>
-      <p>Please consult the javadoc for <code>UIData</code> to
-      supplement this specification.  If the "styleClass" attribute is
-      specified, render its value as the value of the "class" attribute
-      on the "table" element.  Any pass-through attributes are also
-      rendered on the "table" element.  </p>
-
-     <p>Column Groups</p>
-
-     <ul>
-
-       <p>If the <code>UIData</code> component has a "colgroups" facet,
-       render its contents.  Consistent with the rules of facets in
-       general, this facet must have only one child.  In general, this
-       will be a <code>panel group</code> component that will contain
-       <code>colgroup</code> and <code>col</code> elements per the HTML
-       Table specification.  Use of column grouping can improve
-       accessibility.  This facet must be rendered before the table
-       header and footer.</p>
-
-     </ul>
-
-     <p>Rendering the header</p>
-
-     <ul>
-
-      <p>If the <code>UIData</code> component has a "header" facet, or
-      any of the child <code>UIColumn</code> components has a "header"
-      facet, render a "thead" element.  If the <code>UIData</code>
-      component has a "header" facet, encode its contents inside of "tr"
-      and "th" elements, respectively.  Output the value of the
-      "headerClass" attribute of the <code>UIData</code> component, if
-      present, as the value of the "class" attribute on the "th".
-      Output the number of child <code>UIColumn</code> components of the
-      <code>UIData</code> component as the value of the "colspan"
-      attribute on the "th".  Output "colgroup" as the value of the
-      "scope" attribute on the "th" element. </p>
-
-      <p>If any of the child <code>UIColumn</code> components has a
-      "header" facet render a "tr" element.  For each
-      <code>UIColumn</code> that actually has a "header" facet, render
-      it inside of a "th" element.  Columns that don't have a "header"
-      facet cause an empty "th" element to be rendered.  Output the 
-      value of the "headerClass" attribute of the <code>UIColumn</code>
-      component, if present, as the value of the "class" attribute on
-      the "th".  If the "headerClass" attribute of the <code>UIColumn</code>
-      component is not present, output the value of the "headerClass" 
-      attribute of the <code>UIData</code> component, if present, as
-      the value of the "class" attribute on the "th".  Output "col" as
-      the value of the "scope" attribute on the "th" element.
-      </p>
-
-      <p>Close out the "thead" element.</p>
-
-      </ul>
-
-      <p>Rendering the footer</p>
-
-      <ul>
-
-      <div class="changed_modified_2_0_rev_a">
-      <p>If the <code>UIData</code> component has a "footer" facet, or
-      any of the child <code>UIColumn</code> components has a "footer"
-      facet, render a "tfoot" element.  If the <code>UIData</code>
-      component has "footer" facets, encode the contents inside of a "tr"
-      element. </p>
-
-      <p>If any of the child <code>UIColumn</code> components has a
-      "footer" facet render a "td" element.  For each 
-      <code>UIColumn</code> that actually has a "footer" facet, render
-      it inside of a "td" element.  Columns that don't have a "footer"
-      facet cause an empty "td" element to be rendered.  Output the
-      value of the "footerClass" attribute of the <code>UIColumn</code>
-      component, if present, as the value of the "class" attribute on
-      the "td".  If the "footerClass" attribute of the <code>UIColumn</code>
-      component is not present, output the value of the "footerClass"
-      attribute of the <code>UIData</code> component, if present, as
-      the value of the "class" attribute on the "td".</p>
-
-      <p>If the <code>UIData</code> component has a "footer" facet,
-      encode its contents inside of "tr" and "td" elements, respectively.
-      Output the value of the "footerClass" attribute of the 
-      <code>UIData</code> component, if present, as the value of the 
-      "class" attribute on the "td".  Output the number of child 
-      <code>UIColumn</code> components of the <code>UIData</code> 
-      component as the value of the "colspan" attribute on the "td". </p>
-
-      <p>Close out the "tfoot" element.</p>
-      </div>
-
-      </ul>
-
-      <p>Rendering the table body</p>
-
-      <ul>
-
-      <p>Look at the value of the "bodyrows" attribute.  If present,
-      this must be a comma separated list of integers.  Each entry in
-      this list is the row index of the row before which a "tbody"
-      element should be rendered.</p>
-
-      <p>If there was no "bodyrows" attribute, or it was empty, render a
-      "tbody" element.  Keep track of the result of the "rows" property
-      on the <code>UIData</code> component.  Keep track of the number of
-      rows we have rendered so far.  Iterate through the rows.  Set the
-      "rowIndex" property of the <code>UIData</code> component to be
-      correct as we iterate through the rows.  Stop rendering children
-      and close out the "tbody" element if the "rowAvailable" property
-      of the <code>UIData</code> returned false.  If the current row
-      index is contained in the "bodyrows" attribute, check if a "tbody"
-      start element was rendered that needs to be closed, and if so,
-      close the "tbody" element.  Then render a "tbody" element start.
-      Otherwise, do not render a "tbody" element.</p>
-
-      <p>Output a "tr" element.  Output the value of the "rowClasses"
-      per the attribute description below.  For each
-      <code>UIColumn</code> child, if the column component has a
-      "rowHeader" attribute with a value of "true", output a "th"
-      element with a "scope" attribute with the value of "row".
-      Otherwise, if the column component has no "rowHeader" attribute,
-      or its value is false, output a "td" element.  In either case
-      attach the value of the "columnClasses" attribute of the
-      <code>UIData</code> component per the attribute description below.
-      Recursively encode each child of each <code>UIColumn</code> child.
-      Close out the "td" or "th" element.  When done with the row, close
-      out the "tr" element.  When done with all the rows, close out the
-      "tbody" element.</p>
-
-      </ul>
-
-     <p>When done rendering all the rows, set the "rowIndex" property of
-     the <code>UIData</code> to -1, and close out the "table"
-     element.</p>
-            ]]>
-            </description>
-
-            <component-family>javax.faces.Data</component-family>
-            <renderer-type>javax.faces.Table</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/data-table-renderer-class/text())"/>
-            </renderer-class>
-            <facet>
-                <facet-name>caption</facet-name>
-            </facet>
-            <facet>
-                <facet-name>header</facet-name>
-            </facet>
-            <facet>
-                <facet-name>footer</facet-name>
-            </facet>
-            <facet>
-                <facet-name>colgroups</facet-name>
-            </facet>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="table-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<span class="changed_modified_2_0">
-            Renders</span> an HTML "form" element.
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If the map contains
-      an entry for the "clientId" of this <code>UIForm</code> component,
-      call <code>setSubmitted(true)</code> on the form, otherwise call
-      <code>setSubmitted(false)</code> on the form.</p>
-
-      </ul>
-
-
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>The value of the "method" attribute must be "post".  The value
-      of the "action" attribute must be the result of passing the view
-      identifier of the current view to the <code>getActionURL()</code>
-      method of the <code>ViewHandler</code> for this application, then
-      passing that String to the <code>encodeActionURL()</code> method
-      on the <code>ExternalContext</code>.  The value of the acceptcharset
-      attribute must be rendered as the value of "accept-charset".
-      If the "styleClass" attribute is specified, render its value as the 
-      value of the "class" attribute.  Render a "name"
-      attribute with a value the same as the "id" attribute as described
-      in "<a href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General Notes on
-      Encoding</a>" regarding the "id" attribute for UIInput
-      components.  <p class="changed_added_2_0">Obtain the <code>UIViewRoot view identifier</code> and
-      use it to obtain an <code>action URL</code> by calling <code>ViewHandler.getActionURL</code>.
-      Use the <code>action URL</code> to obtain an <code>encoded action URL</code> by calling 
-      <code>ExternalContext.encodeActionURL</code>.  Obtain an 
-      <code>encoded partial action URL</code> by calling
-      <code>ExternalContext.encodePartialActionURL</code> using <code>action URL</code> as the argument.
-      Compare the result from <code>ExternalContext.encodePartialActionURL</code> with the
-      value from <code>ExternalContext.encodeActionURL()</code>.  If they are different, 
-      render a hidden field with the name <code>javax.faces.encodedURL</code> and the value
-      of this hidden field as the value from <code>ExternalContext.encodePartialActionURL</code>.</p>
-      Call <code>ViewHandler.writeState()</code>
-      before the the close of the "form" element.  Render all the
-      necessary hidden fields for all commandLink instances in the page
-      just before the close of the "form" element.  
-      <div class="changed_modified_2_0">
-      Just before rendering the closing <code></form></code> element tag, render 
-      any resources that have been targeted for this form:
-      <ul>
-      <li>Obtain a <code>UIViewRoot</code> instance.</li>
-      <li>Obtain a <code>List</code> of component resources targeted for
-      this form with a call to <code>UIViewRoot.getComponentResources()</code>
-      with the <code>String "form"</code> as the argument.</li>
-      <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances         
-      and call <code>encodeAll</code> on each <code>UIComponent</code> instance.
-      </ul>
-      </div>
-      </p>
-      </ul>
-      </div>]]>
-            </description>
-            <component-family>javax.faces.Form</component-family>
-            <renderer-type>javax.faces.Form</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/form-form-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="form-form-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-                <tag-name>form</tag-name>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p><span
-            class="changed_modified_2_0">Renders</span> an HTML "img"
-            element.  Render the clientId as the value of the "id"
-            attribute.</p>
-
-<div class="changed_modified_2_0">
-
-<p>Handling the Value</p>
-
-  <ul>
-
-    <p>If the "name" attribute is present, execute algorithm <a
-    href="javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource">Common Algorithm for Obtaining A Resource to Render</a> to obtain a <code>Resource</code> instance.  Call
-    <code>Resource.getRequestPath()</code> and output the result as the
-    value of the "src" attribute on the rendered markup.</p>
-
-    <p>Otherwise, if the "url" attribute is present, treat its value as
-    if it was the value of the "value" attribute.  Otherwise, if the
-    "value" attribute is present, render the value of the component as
-    the value of the "src" attribute, after passing it to the
-    <code>getResourceURL()</code> method of the <code>ViewHandler</code>
-    for this application, and passing the result through the
-    <code>encodeResourceURL()</code> method of the
-    <code>ExternalContext</code>.</p>
-
-    <p>When handling the "src" attribute,
-    the value must not be escaped.  For example, <code>&</code> must not
-    be turned into <code>&amp;</code>.  If the "styleClass"
-    attribute is specified, render its value as the value of the "class"
-    attribute.</p>
-
-  </ul>
-
-</div>]]></description>
-    <component-family>javax.faces.Graphic</component-family>
-    <renderer-type>javax.faces.Image</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/graphic-image-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="graphic-image-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="output-resource-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Renders an HTML "input" element of type
-      "hidden".</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>See the decode description for the <a
-      href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-      Text</a> renderer.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render the clientId of the component as the value of the
-      "name" attribute.  Render the current value of the component as
-      the value of the "value" attribute.</p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.Input</component-family>
-            <renderer-type>javax.faces.Hidden</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/input-hidden-renderer-class/text())"/>
-            </renderer-class>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Renders an HTML "input" element of "type" "password".</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>See the decode description for the <a
-      href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-      Text</a> renderer.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>
-      Render the clientId of the component as the value of the "name"
-      attribute.  Render the current value of the component as the value
-      of the "value" attribute, if and only if the "redisplay" component
-      attribute is the string "true".  If the "styleClass" attribute is
-      specified, render its value as the value of the "class"
-      attribute.</p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.Input</component-family>
-            <renderer-type>javax.faces.Secret</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/input-secret-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="text-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-secret-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Renders an HTML "input"
-      element of "type" "text".</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If the
-      <code>Map</code> contains an entry for the "clientId" of the
-      component, pass the value of the entry to the
-      <code>setSubmittedValue()</code> method of the component, which
-      must be an instance of <code>EditableValueHolder</code>.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>  Render the clientId of the component as
-      the value of the "name" attribute.  Render the current value of
-      the component as the value of the "value" attribute.  If the
-      "styleClass" attribute is specified, render its value as the value
-      of the "class" attribute.
-      </p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.Input</component-family>
-            <renderer-type>javax.faces.Text</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/input-text-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="text-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Renders an HTML "textarea" element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>See the encode description for the <a
-      href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-      Text</a> renderer.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>  Render the
-      clientId as the value of the "name" attribute.  Render the current
-      valu eof the component inside the "textarea"
-      element.</p> </ul>]]> </description>
-            <component-family>javax.faces.Input</component-family>
-            <renderer-type>javax.faces.Textarea</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/input-textarea-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-textarea-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Render a single message for a specific component.</p>
-
-      <p>Set-up for Rendering</p>
-
-      <ul>
-
-        <p>Obtain the "summary" and "detail" properties from
-        <code>UIMessage</code> component.  If not present, keep the
-        empty string as the value, respectively.  Obtain the first
-        <code>FacesMessage</code> to render from the component, using
-        the "for" property of the <code>UIMessage</code>.  This will be
-        the only message we render.  Obtain the severity style for this
-        message.  If the severity of the message is
-        <code>FacesMessage.SEVERITY_INFO</code>, the severity style
-        comes from the value of the "infoStyle" attribute.  If the
-        severity of the message is
-        <code>FacesMessage.SEVERITY_WARN</code>, the severity style
-        comes from the value of the "warnStyle" attribute, and so on for
-        each of the severities, <code>INFO, WARN, ERROR</code> and
-        <code>FATAL</code>.  The same rules apply for obtaining the
-        severity style class, but instead of "infoStyle, warnStyle", etc
-        use "infoClass, warnClass", etc.  Obtain the "style",
-        "styleClass" and "layout" attributes from the
-        <code>UIMessage</code> component.  If we have a "style"
-        attribute and a severity style attribute, use the severity style
-        attribute as the value of the "style" attribute.  If we have no
-        "style" attribute, but do have a severity style, use the
-        severity style as the value of the "style" attribute.  The same
-        precedence rules apply for the style class.  Obtain the value of
-        the <code>dir</code> and <code>lang</code> attributes.</p>
-
-      </ul>
-
-      <p>Rendering</p>
-
-      <ul>
-
-      <p>For the message renderer, we only render one row, for the first
-      message.  For the messages renderer, we render as many rows as we
-      have messages.  If any of the "dir", "lang", "style" or
-      "styleClass" attributes has a non-null value (as determined
-      above), render a "span" element, outputting the value of the
-      "style" attribute as the the value of the "style" attribute, and
-      outputting the value of the "styleClass" attribute as the value of
-      the "class" attribute on the "span" element.  Output the "dir" and
-      "lang" attributes as well, if they are present.  If the
-      <code>UIMessage</code> has a "tooltip" attribute with the value of
-      "true", and the <code>UIMessage</code> has "showSummary" and
-      "showDetail" properties with the value "true", if we haven't
-      already written out the "span", output the "summary" as the value
-      of the "title" attribute on the "span".  If we haven't already
-      written out a "title" attribute, and "showSummary" is true, output
-      the summary.  If "showDetail" is true, output the detail.  Close
-      out the span if necessary.</p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.Message</component-family>
-            <renderer-type>javax.faces.Message</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/message-message-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="message-message-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description>
-                <![CDATA[
-
-     <p><span class="changed_modified_2_0">The</span> same as for the
-     Message renderer, but output all the messages.  <span
-     class="changed_added_2_0">If an "id" attribute has been specified,
-     it must be rendered on the outermost markup corresponding to this
-     component.</span> If the value of the "layout" attribute is
-     "table", render nested "table", "tr", and "td" elements, in that
-     order.  If the value of the "layout" attribute is "list", or the
-     "layout" attribute is not specified, render nested "ul", "li"
-     elements, in that order.  Output the value of the "style" attribute
-     as the value of the "style" attribute, output the value of the
-     "styleClass" attribute as the value of the "class" attribute, and
-     output the dir and lang attributes.  Output these values on the
-     "table" element or the "ul" element.  Output the values of the
-     "errorStyle", "fatalStyle", "infoStyle", "warnStyle" attributes as
-     the value of the "style" attribute on either the "tr" element or
-     the "li" element.  Output the values of the "errorClass",
-     "fatalClass", "infoClass", "warnClass" attributes as the value of
-     the "class" attribute on either the "tr" element or the "li"
-     element.  The component is a <code>UIMessages</code>, and there is
-     no "for" attribute.  Therefore, use either <code>null</code> to
-     obtain the messages from the <code>FacesContext</code> or the empty
-     string if the components "globalOnly" property is
-     <code>true</code>.  If the layout was "table" close out the table
-     elements, otherwise, close out the list elements.</p>
-
-            ]]>
-            </description>
-
-            <component-family>javax.faces.Messages</component-family>
-            <renderer-type>javax.faces.Messages</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/messages-messages-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="messages-messages-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Render parameterized text.  Obtain the
-      <code>style</code>, <code>styleClass</code>, <code>dir</code>, and
-      <code>lang</code> attributees from this component.  If any are
-      present, render a "span" element.  Output the
-      <code>styleClass</code> attribute (if present) as the value of the
-      <code>class</code> attribute.  Output the <code>style</code>
-      attribute as the value of the <code>style</code> attribute.
-      Output the <code>dir</code> and <code>lang</code> attributes as
-      pass through attributes.  Accrue a list of the values of all child
-      <code>UIParameter</code> components of this component.  If there
-      are one or more accumulated parameter values, convert the list of
-      parameter values to an <code>Object</code> array, call
-      <code>MessageFormat.format()</code>, passing the
-      <code>value</code> of this component as the first argument, and
-      the array of parameter values as the second argument, and render
-      the result.  Otherwise, render the <code>value</code> of this
-      component unmodified.</p>]]>
-            </description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.Format</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-format-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="output-format-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description>Renders an HTML "label" element.  Render the current value
-      of the component as label text if it is specified. If a "for" attribute is
-      specified, find the component specified by the value of the "for"
-      attribute, and render its client id as the value of the "for" attribute.
-      If "styleClass" attribute is specified, render its value as the value
-      of the "class" attribute.</description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.Label</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-label-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="output-label-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[
-
-            <p>Render an HTML "a" anchor element.  The value of the
-            component is rendered as the value of the "href" attribute.
-            Any child UIParameter components <span
-            class="changed_modified_2_0_rev_a">whose
-            <code>disable</code> property is <code>false</code></span> are
-            appended to the String to be output as the value of the
-            "href" attribute as query parameters before rendering.  The
-            entire "href" string must be passed through a call to the
-            <code>encodeResourceURL()</code> method of the
-            <code>ExternalContext</code>.  The name of the UIParameter
-            goes on the left hand side, and the value of the UIParameter
-            on the right hand side.  The name and the value must be
-            URLEncoded.  <span class="changed_modified_2_0_rev_a">Note
-            that the required url encoding is handled by
-            <code>ResponseWrter.writeAttribute()</code>.</span> Each
-            UIParameter instance is separeted by an ampersand, as
-            dictated in the URL spec.  If the "styleClass" attribute is
-            specified, render its value as the value of the "class"
-            attribute.  If the "id" attribute is specified, follow the
-            same steps as mentioned in the "<a
-            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on Encoding</a>" regarding the "id" attribute for
-            UIInput components.  If the "disabled" attribute is
-            specified, do not render the HTML "a" anchor element or the
-            "href" element.  Instead, render a "span" element.  If the
-            "styleClass" attribute is specified, render its value as the
-            value of the "class" attribute on the "span".  Render any
-            pass-through attributes on the "span".
-
-            </p>]]>
-            </description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.Link</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-link-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="link-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-                <body-tag>true</body-tag>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<div
-            class="changed_added_2_0"><p>Render an HTML "a" anchor
-            element.  The value of the component is rendered as the
-            anchor text and the outcome of the component is used to
-            determine the target URL rendered in the "href" attribute.
-            Any child <code>UIParameter</code> components <span
-            class="changed_modified_2_0_rev_a">whose
-            <code>disable</code> property is <code>false</code></span>
-            are appended to the String to be output as the value of the
-            "href" attribute as query parameters before rendering.  The
-            entire "href" string must be passed through a call to the
-            <code>encodeResourceURL()</code> method of the
-            <code>ExternalContext</code>.  The name of the
-            <code>UIParameter</code> goes on the left hand side, and the
-            value of the <code>UIParameter</code> on the right hand
-            side.  The name and the value must be URLEncoded.  <span
-            class="changed_modified_2_0_rev_a">Note that the required
-            url encoding is handled by
-            <code>ResponseWrter.writeAttribute()</code>.</span> Each
-            <code>UIParameter</code> instance is separated by an
-            ampersand, as dictated in the URL spec.  If the "fragment"
-            attribute is specified, the value will be included at the
-            end of the resulting URL preceded by a hash mark.  If the
-            "styleClass" attribute is specified, render its value as the
-            value of the "class" attribute.  If the "id" attribute is
-            specified, follow the same steps as mentioned in the "<a
-            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on Encoding</a>" regarding the "id" attribute for
-            UIInput components.  If the "disabled" attribute is
-            specified, do not render the HTML "a" anchor element or the
-            "href" element.  Instead, render a "span" element.  If the
-            "styleClass" attribute is specified, render its value as the
-            value of the "class" attribute on the "span".  Render any
-            pass-through attributes on the "span".</p></div>]]>
-            </description>
-
-            <component-family>javax.faces.OutcomeTarget</component-family>
-            <renderer-type>javax.faces.Link</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/outcome-target-link-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="link-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="direct-link-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-                <body-tag>true</body-tag>
-                <jsp-ignore>true</jsp-ignore>
-                <tag-name>link</tag-name>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-            <description><![CDATA[<div
-      class="changed_added_2_0"><p>Render an HTML "input" element of
-      type "button".  The value of the component is rendered as the
-      button text and the outcome of the component is used to determine
-      the target URL which is activated by onclick.  If "image"
-      attribute is specified, render it as the value of the "src"
-      attribute after passing it to the <code>getResourceURL()</code>
-      method of the <code>ViewHandler</code> for this application, and
-      passing the result through the <code>encodeResourceURL()</code>
-      method of the <code>ExternalContext</code>. Any child
-      <code>UIParameter</code> components are appended to the String to
-      be used as the target URL as query parameters before rendering.
-      The entire target URL string must be passed through a call to the
-      <code>encodeResourceURL()</code> method of the
-      <code>ExternalContext</code>.  The name of the
-      <code>UIParameter</code> goes on the left hand side, and the value
-      of the <code>UIParameter</code> on the right hand side.  The name
-      and the value must be URLEncoded.  Each <code>UIParameter</code>
-      instance is separeted by an ampersand, as dictated in the URL
-      spec.  The final encoded result will be written out to the onclick
-      attribute of the button as "window.location.href = '<encoded HREF
-      value>'".  If the developer has specified a custom onlclick the
-      window.location.href name/value pair will be appended at the end
-      of the developer specified script.  If the "fragment" attribute is
-      specified, the value will be included at the end of the resulting
-      URL preceded by a hash mark.  If the "styleClass" attribute is
-      specified, render its value as the value of the "class" attribute.
-      If the "id" attribute is specified, follow the same steps as
-      mentioned in the "<a
-      href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-      Notes on Encoding</a>" regarding the "id" attribute for UIInput
-      components.  If the "disabled" attribute is specified, do not
-      render the "onclick" element and assign the "disabled" attribute a
-      value of true.</p></div>]]>
-
-            </description>
-            <component-family>javax.faces.OutcomeTarget</component-family>
-            <renderer-type>javax.faces.Button</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/outcome-target-button-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="image-button-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="direct-link-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-                <body-tag>true</body-tag>
-                <jsp-ignore>true</jsp-ignore>
-                <tag-name>button</tag-name>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description>If the "styleClass", "style", "dir" or "lang"
-      attributes are present, render a "span" element.  If the
-      "styleClass" attribute is present, render its value as the value
-      of the "class" attribute.  If the "style" attribute is present,
-      pass it thru.  If the "escape" attribute is not present, or it is
-      present and its value is "true" all angle brackets should be
-      converted to the ampersand xx semicolon syntax when rendering the
-      value of the "value" attribute as the value of the component.  If
-      the "escape" attribute is present and is "false" the value of the
-      component should be rendered as text without escaping.
-            </description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.Text</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-text-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="output-text-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[Renders an HTML "table" element, conforming to the
-      rules in the HTML 401 specification.  Render the "caption" facet, 
-      if present, inside a "caption" element immediately below the "table" element.  
-      If the "captionClass" attribute is specified, render its value as the value 
-      of the "class" attribute on the "caption" element.  If the "captionStyle" attribute
-      is specified, render its value as the value of the "style" attribute
-      on the "caption" element.  If the "styleClass" attribute is specified, render 
-      its value as the value of the "class" attribute.  Render the pass-through 
-      attributes in the table below.  Render the "header" facet, if present, inside of
-      "thead", "tr", and "th" elements, nested in that order.  If the
-      "headerClass" attribute is specifed, render its value as the value
-      of the "class" attribute on the "th" element.  Render "colgroup"
-      as the value of the "scope" attribute.  Render the value of the
-      "columns" attribute as the value of the "colspan" attribute on the
-      "th" element.  Render the "footer" facet if present, using similar
-      logic to the rendering of the "header", but replacing "thead" with
-      "tfoot", "th" with "td", and "headerClass" with "footerClass".
-      Render the children of the <code>UIPanel</code> component inside
-      of a "tbody" element.  Render the children based on the value of
-      the "columns" attribute, creating a new row each time a "columns"
-      worth of children have been rendered.  For the start of each row,
-      render a "tr" element.  Output the value of the "rowClasses" per
-      the attribute description below.  For each child, output a "td" 
-      element, attaching the value of the "columnClasses" attribute per
-      the attribute description below.  Recursively encode each child.
-      Close out the "td" element.  When done with the row, close out the 
-      "tr" element.  If a child has "rendered==false" it is not rendered, 
-      and the column counter must not be incremented.]]>
-            </description>
-            <component-family>javax.faces.Panel</component-family>
-            <renderer-type>javax.faces.Grid</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/panel-grid-renderer-class/text())"/>
-            </renderer-class>
-            <facet>
-                <facet-name>header</facet-name>
-            </facet>
-            <facet>
-                <facet-name>footer</facet-name>
-            </facet>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="table-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="panel-grid-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description>Intended for use in situations when only one
-      UIComponent child can be nested, such as in the case of facets.
-      If the "style" or "styleClass" attributes are present, and the "layout"
-      attribute is present with a value of "block", render a "div" element,
-      outputting the value of the "style" attribute as the value of the 
-      "style" attribute and the value of the "styleClass" attribute as the
-      value of the "class" attribute.  Otherwise, if the "layout" attribute
-      is not present, or the "layout" attribute contains a value other than
-      "block", render a "span" element, outputting the value of the 
-      "style" attribute as the value of the "style" attribute, and the value 
-      of the "styleClass" attribute as the value of the "class"
-      attribute. </description>
-            <component-family>javax.faces.Panel</component-family>
-            <renderer-type>javax.faces.Group</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/panel-group-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="panel-group-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Renders an HTML "input" element of type "checkbox".</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If there is no
-      entry in the <code>Map</code> for the "clientId" of this
-      component, pass "false" to the <code>setSubmittedValue()</code>
-      method of the component, which must be an instance of
-      <code>EditableValueHolder</code>.  If there is an entry, and its
-      value is equal, ignoring case and without quotes, to any of the
-      Strings: "on", "yes" or "true" pass true to the
-      <code>setSubmittedValue()</code> method of the component.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>
-      Render the clientId of the component as the value of the "name"
-      attribute.  If the current value of the component is "true",
-      output the "checked" attribute (must be rendered as checked="checked").  
-      If the "styleClass" attribute is specified, render its value as the value 
-      of the "class" attribute.</p> </ul>]]></description>
-            <component-family>javax.faces.SelectBoolean</component-family>
-            <renderer-type>javax.faces.Checkbox</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/selectboolean-checkbox-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML checkbox
-            list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectMany Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-      <p>Render a "table" element.  If the "styleClass" is specified,
-      render the value of the "styleClass" attribute as the value of the
-      "class" attribute on the "table" element. If the "style", or
-      "border" attributes are specified, pass them thru <span
-      class="changed_added_2_0">and render their values as the "style"
-      and "border" attributes on the "table", respectively.</span> If
-      the "layout" attribute is specified, and its value is
-      "pageDirection", render the children elements vertically,
-      otherwise horizontally, in the table.  If any of the children are
-      an instance of SelectItemGroup, render them as a nested table.
-      Each of the children are ultimately rendererd as follows.  Render
-      an "input" element of "type" "checkbox" for each child component.
-      Render the "name" attribute on the "input" element with the value
-      of the <code>clientId</code> of the component.  Render an "id"
-      attribute on the "input" element.  Each "id" value must be unique.
-      If the current SelectItem.isDisabled() returns true, render
-      "disabled" as the value of the "disabled" attribute.  Close out
-      the "input" element.  Render a "label" element.  Render the "for"
-      attribute of the "label" element whose value is the corresponding
-      "input" element's "id" value.  
-      <span
-      class="changed_added_2_0">If the current checkbox would be
-      rendered as being checked, and there is a "selectedClass"
-      attribute, append a space, followed by the value of the
-      "selectedClass" attribute to any existing "class" attribute value
-      on the label element.  Otherwise, render the value of the
-      "selectedClass" attribute as the value of the "class" attribute on
-      the label element.  If the current checkbox would be rendered as
-      being not checked, and there is a "unselectedClass" attribute,
-      append a space, followed by the value of the "unselectedClass"
-      attribute to any existing "class" attribute value on the label
-      element.  Otherwise, render the value of the "unselectedClass"
-      attribute as the value of the "class" attribute on the label
-      element.</span>  <span class="changed_modified_2_0_rev_a">If the 
-      current checkbox would be rendered as being disabled, and there is a 
-      "disabledClass" attribute, append a space, followed by the value 
-      of the "disabledClass" attribute to any existing "class" attribute 
-      value on the label element.  Otherwise, render the value of the 
-      "disabledClass" attribute as the value of the "class" attribute on 
-      the label element.  If the current checkbox would be rendered as 
-      being enabled, and there is an "enabledClass" attribute, append a 
-      space, followed by the value of the "enabledClass" attribute to any 
-      existing "class" attribute value on the label element.  Otherwise, 
-      render the value of the "enabledClass" attribute as the value of 
-      the "class" attribute on the label element.</span> Close out the starting 
-      "label" element and render the label value from SelectItem.getLabel().  
-      Close out the "label" element.  As an exception to the general rules about 
-      how to handle the "id" attribute, render it as an attribute on the outer "table"
-      element, the value of which is the <code>clientId</code> of the
-      component per the rules at the beginning of this specification.
-      The value of the current SelectItem is rendered as the value of
-      the "value" attribute.  Coerce the value of the currently rendered
-      child to the type of the parent UISelectMany value following the
-      Expression Language coercion rules, before comparing the values.
-      If the value of the enclosing UISelectMany matches the current
-      value, render "checked" as the value of the "checked" attribute.
-      See the <a href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option
-      elements" </a> specification for <code>ListboxRenderer</code> for
-      more detail on how to render the "option" elements in this
-      renderer.  <span class="changed_modified_2_0_rev_a">Note that this
-      renderer does not support <code>SelectItemGroup</code> elements,
-      so the text that describes the rendering of
-      <code>SelectItemGroup</code> does not apply to this
-      renderer.</span></p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.SelectMany</component-family>
-            <renderer-type>javax.faces.Checkbox</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/selectmany-checkbox-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectmany-checkbox-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectmany-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML option
-            list.</p>
-
-      <p>Decode Behavior</p>
-
-      <p>This section documents the decode behavior for all renderers
-      that handle <code>UISelectMany</code> or <code>UISelectOne</code>
-      components.</p>
-
-      <ul>
-
-      <p><a name="decodeMany">Decode Behavior for
-      <code>UISelectMany</code> components</a></p>
-
-      <ul>
-
-        <p>Obtain the <code>Map</code> from the
-        "requestParameterValuesMap" property of the
-        <code>ExternalContext</code>.  If the <code>Map</code> contains
-        an entry for the "clientId" of the component, pass the value of
-        the entry, cast to a <code>String []</code>, to the
-        <code>setSubmittedValue()</code> method of the component, which
-        must be an <code>EditableValueHolder</code>.  If the
-        <code>Map</code> does not contain an entry, create an empty
-        <code>String</code> array and call
-        <code>setSubmittedValue()</code> with it.</p>
-
-        <p class="changed_modified_2_0">Please check the javadoc for <a
-        href="../../javadocs/javax/faces/component/UISelectMany.html#getConvertedvalue">UISelectMany.getConvertedValue()</a>
-        for additional requirements for renderers that render this kind
-        of component.</p>
-
-      </ul>
-
-      <p><a name="decodeOne">Decode Behavior for
-      <code>UISelectOne</code> components</a></p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If there is a
-      <code>Map</code> entry for the "clientId" property of the
-      component, pass it to the <code>setSubmittedValue()</code> method
-      of the component. <span class="changed_added_2_0">If the
-      <code>Map</code> does not contain an entry, call
-      <code>setSubmittedValue()</code> passing an empty
-      <code>String</code> as the argument.</span> </p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render an HTML "select" element. Render the clientId of
-      the component as the value of the "name" attribute.  If the "styleClass"
-      attribute is specified, render its value as the value of the "class"
-      attribute on the "select" element.  If the component is a
-      <code>UISelectMany</code> instance, render "multiple" as the value of the
-      "multiple" attribute.  If the "size" attribute is specified, render its
-      value as the value of the "size" attribute.  Otherwise use the number of
-      items as the value of the "size" attribute.</p>
-
-      </ul>
-
-      <p><a name="option">Rendering the "option" elements</a></p>
-
-      <ul>
-
-      <p>The only valid children of this component are
-      <code>UISelectItem</code> or <code>UISelectItems</code>
-      instances. Iterate over the children of this component, and accrue
-      a list of <code>javax.faces.model.SelectItem</code> instances.
-      <span class="changed_added_2_0">If the current child is a
-      <code>SelectItem</code> whose <code>noSelctionProperty</code> is
-      <code>true</code>, <b>and</b> the <code>UISelectOne</code> or
-      <code>UISelectMany</code> parent of this option has one or more
-      selected values that <b>are not</b> the "no selection"
-      <code>SelectItem</code>, <b>and</b> the component has a
-      "hideNoSelectionLabel" attribute whose value is <code>true</code>,
-      then the current option, which is the "no selection" option, must
-      not be rendered.</span> If the current child is a
-      <code>UISelectItem</code> create a <code>SelectItem</code>instance
-      from its <code>itemValue, itemLabel</code>, <code
-      class="changed_added_2_0">itemEscaped</code>, and
-      <code>itemDescription</code> properties, add it to the list.  If
-      the current child is a <code>UISelectItems</code> instance, call
-      its <code>getValue()</code> method.  If the result is a
-      <code>SelectItem</code> bean, add it to the list.  If the result
-      is an array of <code>SelectItem</code> beans, add each one to the
-      list.  If the result is a <code>Collection</code> of
-      <code>SelectItem</code> beans, add each one to the list.  If the
-      result is a <code>Map</code>, create a <code>SelectItem</code>
-      bean for each entry in the <code>Map</code> using the key as the
-      label, the value as the value, and <code>null</code> as the
-      description.</p>
-
-      <p>Iterate over the list of <code>SelectItem</code> beans.  If the
-      current element is a <code>SelectItemGroup</code>, render an
-      "optgroup" element with a "label" attribute, the value of which is
-      the "label" property from the current element, then call
-      <code>getSelectItems()</code> and render each element as below.
-      If the current element is not a <code>SelectItemGroup</code>,
-      render an "option" element.  Follow the conversion rules in the
-      spec to obtain a renderable <code>String</code> from the "value"
-      property of the current element, render that as the value of the
-      "value" atribute.  Now it is time to see if the current element is
-      the selected value.  Call its <code>getSubmittedValue()</code>
-      method, casting the result to an <code>Object []</code>, otherwise
-      the component must be a <code>UISelectOne</code> instance, call
-      its <code>getSubmittedValue()</code> method and create an
-      <code>Object []</code> around the result.  Determine the type of
-      the resultant array, if the resultant array is non-null, otherwise
-      the type is <code>String</code>.  Coerce the current item value to
-      this type following the Expression Language coercion rules.  If
-      the resultant array is non-null, we look in the array for a value
-      that, when we pass the renderable value to its
-      <code>equals()</code> method, it returns <code>true</code>,
-      meaning the current element is selected.  If the resultant array
-      is <code>null</code>, if the component is a
-      <code>UISelectMany</code>, call its <code>getValue()</code>
-      method.  If the result is a <code>List</code> obtain the values in
-      the list as an array.  Otherwise, the component must be a
-      <code>UISelectOne</code> instance.  Call its
-      <code>getValue()</code> method, which must be an Object array.
-      Look for an element in the resultant array that, 1. when we pass
-      the renderable value to its <code>equals()</code> method, it
-      returns <code>true</code> , or 2. if the renderable value is null,
-      and there is a null element in the array, also conclude that the
-      current element is selected.  Otherwise the current element is not
-      selected.  Now, if the current value is selected, write out an
-      HTML boolean property "selected".  If the current
-      SelectItem.isDisabled() returns true, render "disabled" as the
-      value of the "disabled" attribute.  <span
-      class="changed_added_2_0">If the value of the <code>escape</code>
-      property is true, use the <code>writeText()</code> method of
-      <code>ResponseWriter</code> to write out the value of the
-      <code>label</code> property.  Otherwise, use the
-      <code>write()</code> method of the <code>ResponseWriter</code> to
-      do so.</span></p>
-
-      </ul>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.SelectMany</component-family>
-            <renderer-type>javax.faces.Listbox</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/selectmany-listbox-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="listbox-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectmany-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML option
-            list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectMany Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render an HTML "select" element.  Render the clientId of
-      the component as the value of the "name" attribute.  If the "styleClass"
-      attribute is specified, render its value as the value of the "class"
-      attribute on the "select" element. If the component
-      to be rendered is a UISelectMany, render "multiple" as the value of
-      the "multiple" attribute.  Render "1" as the value of the "size"
-      attribute.  See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option
-      elements" </a> specification for <code>ListboxRenderer</code> for
-      more detail on how to render the "option" elements in this
-      renderer.</p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.SelectMany</component-family>
-            <renderer-type>javax.faces.Menu</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/selectmany-menu-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="menu-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectmany-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Render an HTML option list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectOne Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-      <p>Render an HTML "select" element.  Render the clientId of
-      the component as the value of the "name" attribute.  If the "styleClass"
-      attribute is specified, render its value as the value of the "class"
-      attribute on the "select" element. If the component
-      to be rendered is a UISelectMany, render "multiple" as the value of
-      the "multiple" attribute.  If the "size" attribute is specified,
-      render its value as the value of the "size" attribute.  Otherwise
-      use the number of items as the value of the "size" attribute.  See
-      the <a href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option
-      elements" </a> specification for <code>ListboxRenderer</code> for
-      more detail on how to render the "option" elements in this
-      renderer.</p>
-
-      </ul>]]>
-            </description>
-            <component-family>javax.faces.SelectOne</component-family>
-            <renderer-type>javax.faces.Listbox</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/selectone-listbox-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="listbox-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectone-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p>Render an HTML option list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectOne Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render an HTML "select" element.  Render the clientId of the
-      component as the value of the "name" attribute.  If the
-      "styleClass" attribute is specified, render its value as the value
-      of the "class" attribute on the "select" element. If the component
-      to be rendered is a UISelectMany, render "true" as the value of
-      the "multiple" attribute.  Use the number of items as the value of
-      the "size" attribute.  See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering
-      the option elements" </a> specification for
-      <code>ListboxRenderer</code> for more detail on how to render the
-      "option" elements in this renderer.</p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.SelectOne</component-family>
-            <renderer-type>javax.faces.Menu</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/selectone-menu-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="menu-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectone-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-
-            <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> a set of html
-            "input" elements of type "radio".</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectOne Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render a "table" element. If the "styleClass" is specified,
-      render the value of the "styleClass" attribute as the value of the
-      "class" attribute on the "table" element. If the "style", "border"
-      attributes are specified, pass them thru <span
-      class="changed_added_2_0">and render their values as the "style"
-      and "border" attributes on the "table", respectively.</span>. If
-      the "layout" attribute is specified, and its value is
-      "pageDirection", render the children elements vertically,
-      otherwise horizontally, in the table.  If any of the children are
-      an instance of SelectItemGroup, render them as a nested table.
-      Each of the children are ultimately rendered as follows.  Render
-      an "input" element of "type" "radio" for each child component.
-      Render the "name" attribute on the "input" element with the value
-      of the <code>clientId</code> of the component.  Render an "id"
-      attribute on the "input" element.  Each "id" value must be unique.
-      If the current SelectItem.isDisabled() returns true, render
-      "disabled" as the value of the "disabled" attribute.  Close out
-      the "input" element.  Render a "label" element.  Render the "for"
-      attribute of the "label" element whose value is the corresponding
-      "input" element's "id" value.  Render any "style" as the "class"
-      attribute on the "label" element.  Close out the starting "label"
-      element and render the label value from SelectItem.getLabel().
-      Close out the "label" element.  As an exception to the general
-      rules about how to handle the "id" attribute, render it as an
-      attribute on the outer "table" element, the value of which is the
-      <code>clientId</code> of the component per the rules at the
-      beginning of this specification.  Coerce the value of the
-      currently rendered child to the type of the parent UISelectOne
-      value using the Expression Language coercion rules before
-      comparing the values.  If the value of the currently rendered
-      child is equal to the value of the parent UISelectOne, render an
-      appropriate HTML boolean value indicating "checked" for the
-      enclosing "input".  See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option elements" </a>
-      specification for <code>ListboxRenderer</code> for more detail on
-      how to render the "option" elements in this renderer.  <span
-      class="changed_modified_2_0_rev_a">Note that this renderer does
-      not support <code>SelectItemGroup</code> elements, so the text
-      that describes the rendering of <code>SelectItemGroup</code> does
-      not apply to this renderer.</span></p>
-
-      </ul>]]>
-
-            </description>
-            <component-family>javax.faces.SelectOne</component-family>
-            <renderer-type>javax.faces.Radio</renderer-type>
-            <renderer-class>
-                <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/selectone-radio-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="focus-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="input-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectone-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="selectone-radio-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-            <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Renders a composite component.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-	<ul>
-
-           <p>Ask the argument <code>UIComponent</code> for its facet
-           under the key <code>UIComponent.COMPOSITE_FACET_NAME</code>.
-           Such a facet must exist.  Call the <code>encodeAll()</code>
-           method on this facet.</p>
-
-	</ul>
-
-
-
-</div>]]></description>
-
-            <component-family>javax.faces.NamingContainer</component-family>
-            <renderer-type>javax.faces.Composite</renderer-type>
-            <renderer-class>
-               <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/naming-container-composite-renderer-class/text())"/>
-            </renderer-class>
-            <renderer-extension>
-                <ignore-all>true</ignore-all>
-            </renderer-extension>
-        </renderer>
-
-      <renderer>
-            <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Renders a facet at this particular point in the composite component VDL page.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-<p><code>encodeBegin()</code> and <code>encodeEnd()</code> must take no
-action for this renderer.  Due to the specification of the
-<code><composite:insertChildren></code> tag handler, the component
-passed to the <code>encodeChildern()</code> method of this renderer will
-be the component with <code>component-family</code>
-<code>javax.faces.Output</code> and <code>renderer-type</code> equal to
-the one for this renderer.  The implementation of
-<code>encodeBegin()</code>, must obtain the component attribute value
-under the key given by the value of the symbolic constant
-<code>UIComponent.FACETS_KEY</code> from the attributes map of the
-argument component.  If not found, throw <code>IOException</code>.  This
-value is referred to as "facetName" for discission.  Find the closest
-ancestor composite component in which the argument component is nested.
-If no such component can be found, thow <code>IOException</code>.
-Otherwise, get the facet whose name is "facetName".  If found call
-<code>encodeAll()</code> on the facet.</p>
-
-
-
-</div>]]></description>
-
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.CompositeFacet</renderer-type>
-            <renderer-class>
-               <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-composite-facet-renderer-class/text())"/>
-            </renderer-class>
-            <renderer-extension>
-               <ignore-all>true</ignore-all>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-            <description><![CDATA[<div class="changed_added_2_0">
-
-<p><span class="changed_modified_2_0_rev_a">Render</span> the markup for
-a <code><script></code> element that renders the script
-<code>Resource</code> specified by the optional <code>name</code>
-attribute and <code>library</code> attributes.</p>
-
-<p>The implementation of this renderer must have a <a target="_"
-href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
-annotation attached to it, at the class level, declaring <a target="_"
-href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
-as the value of the <code>systemEventClass</code> attribute.  The presence of
-this annotation on a renderer implies the renderer implements <a
-target="_"
-href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
-which this renderer must do.  The implementation of
-<code>processEvent()</code> must extract the <code>UIComponent</code>
-from the argument event and look for the presence of the key
-"<code>target</code>" in the component's attribute <code>Map</code>.  If
-and only if such a key is present, the implementation of
-<code>processEvent()</code> must pass the component to <a target="_"
-href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent)"><code>UIViewRoot.addComponentResource()</code></a>.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-        <p><a name="ResourceCommonGetResource">Common Algorithm for Obtaining A Resource to Render</a></p>
-
-        <ul>
-
-          <p>This algorithm is used by all resource renderers to obtain
-          a <code>Resource</code> instance which is then rendered in a
-          specific way depending on what kind of renderer is doing the
-          encoding.</p>
-
-          <ul>
-
-	  <li><p>Look in the component attribute <code>Map</code> for a
-	  value under the key <em>name</em>.</p></li>
-
-	  <li><p>Look in the component attribute <code>Map</code> for a
-	  value under the key <em>library</em>.  This attribute is
-	  optional, therefore, <em>library</em> may be
-	  <code>null</code>.</p></li>
-
-	  <li><p>Create the resource by calling
-	  <code>Application.getResourceHandler.createResource(<em>name</em>,
-	  <em>library</em>);</code>.</p></li>
-
-	  </p></li>
-
-          </ul>
-
-        </ul>
-
-        <p><a name="ResourceCommonEncode">Common Encode Behavior</a></p>
-
-      <ul>
-
-       <p>This algorithm is used by all resource renderers to render the
-       resource.</p>
-
-        <p><code>encodeBegin()</code> must take no action.</p>
-
-        <p>Because this renderer returns <code>true</code> from
-        <code>getRendersChildren()</code>, the <code>encodeChildren()
-        method must take the following action.</code></p>
-
-        	<ul>
-
-	  <li><p>If there is no <em>name</em> attribute, and the
-	  argument <code>component</code> has no children, and
-	  <code>ProjectStage</code> is not
-	  <code>ProjectStage.Production</code>, add a
-	  <code>FacesMessage</code> for this component's clientId to the
-	  <code>FacesContext</code> stating that if no name attribute is
-	  present, and no body content is present either, then the user
-	  should take action to correct this problem.  In this case,
-	  <code>encodeChildren()</code> must take no further
-	  action.</p></li>
-
-	  <li><p>If there is no <em>name</em> attribute and the argument
-	  <code>component</code> <b>does</b> have children, the renderer
-	  must ensure that those children are encoded as usual.</p></li>
-
-	  <li><p>If there <b>is</b> a <em>name</em> attribute and the
-	  argument <code>component</code> <b>does</b> have children, the
-	  renderer must log a descriptive localized message stating that
-	  the child content will be ignored.  The resource referenced by
-	  the <em>name</em> attribute will be rendered in
-	  <code>encodeEnd()</code>.</p></li>
-
-	  <li><p>If there <b>is</b> a <em>name attribute</em> and the
-	  argument <code>component</code> <b>does not</b> have children,
-	  <code>encodeChildren()</code> must take no action.</p></li>
-
-	</ul>
-
-       <p><code>encodeEnd()</code> must take specific action based on
-       the specific kind of resource being rendered.</p>
-
-      </ul>
-
-       <p>Use the algorithm <em>Common Encode Behavior</em> for
-       <code>encodeBegin()</code>, <code>encodeChildren()</code> and
-       <code>getRendersChildren()</code>.</p>
-
-        <p>For <code>encodeEnd()</code>, use the algorithm <em>Common
-        Algorithm for Obtaining A Resource to Render</em> above to
-        obtain a reference to the <code>Resource</code> to be
-        encoded.</p>
-
-        <p>If this is NOT the first time this <code>Resource</code> has
-        been referenced on this request take no action and return.</p>
-
-        <p>Render a script element.  Use the result from calling
-        <code>resource.getRequestPath()</code> as the value of the "src"
-        attribue and the result from calling
-        <code>resource.getContentType()</code> as the value of the "type"
-        attribute.</p>
-
-</p>
-
-
-
-       </ul>
-
-
-
-</div>]]></description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.resource.Script</renderer-type>
-            <renderer-class>
-               <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-script-renderer-class/text())"/>
-            </renderer-class>
-            <xi:include href="output-resource-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <attribute>
-                <description>
-
-                    <![CDATA[<div class="changed_added_2_0"><p>The
-                    <em>target</em> area for which this resource will be
-                    rendered.  For example, <em>target="head"</em> would
-                    cause the resource to be rendered within the
-                    <em>head</em> element.  <span
-                    class="changed_modified_2_0_rev_a">If no value is
-                    specififed, the script element is rendered at the
-                    same point in the view where the tag is
-                    located.</span> <span
-                    class="changed_modified_2_0_rev_a">Currently
-                    supported values for this attribute are "head",
-                    "body", and "form".</span></p></div>]]>
-
-                </description>
-                <display-name>Target</display-name>
-                <icon></icon>
-                <attribute-name>target</attribute-name>
-                <attribute-class>java.lang.String</attribute-class>
-                <attribute-extension>
-                    <required>false</required>
-                    <tag-attribute>true</tag-attribute>
-                </attribute-extension>
-
-            </attribute>
-            <renderer-extension>
-                <jsp-ignore>true</jsp-ignore>
-                <renders-children>true</renders-children>
-            </renderer-extension>            
-        </renderer>
-
-        <renderer>
-            <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Render the markup for a <code><link></code> element that
-renders the style <code>Resource</code> specified by the optional
-<code>name</code> and <code>library</code> attributes.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-       <p>Use the algorithm <em>Common Encode Behavior</em> for
-       <code>encodeBegin()</code>, <code>encodeChildren()</code> and
-       <code>getRendersChildren()</code>.</p>
-
-        <p>For <code>encodeEnd()</code>, use the algorithm <a
-        href="javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource">Common
-        Algorithm for Obtaining A Resource to Render</a> to obtain a
-        reference to the <code>Resource</code> to be encoded.</p>
-
-<p>Output a <code><link></code> element.  Use the result from
-calling <code>resource.getRequestPath()</code> as the value of the
-"href" attribute, the result from calling
-<code>resource.getContentType()</code> as the value of the "type"
-attribute, the literal string "stylesheet" as the value of the "rel"
-attribute, and the literal string "screen" as the value of the "media"
-attribute.</p>
-
-<p>The implementation of this renderer must have a <a target="_"
-href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
-annotation attached to it, at the class level, declaring <a target="_"
-href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
-as the value of the <code>systemEventClass</code> attribute.  The presence of
-this annotation on a renderer implies the renderer implements <a target="_"
-href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
-which this renderer must do.  The implementation of
-<code>processEvent()</code> must extract the <code>UIComponent</code>
-from the argument event pass it to <a target="_"
-href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent,%20java.lang.String)"><code>UIViewRoot.addComponentResource()</code></a>, specifying
-the literal string "<code>head</code>" as the last argument.</p>
-
-<p>The stylsheet renderer must ensure that any stylesheets are included in the <head> of the document. 
-</p>
-
-</div>]]></description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.resource.Stylesheet</renderer-type>
-            <renderer-class>
-               <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-stylesheet-renderer-class/text())"/>
-            </renderer-class>
-            <xi:include href="output-resource-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <renderer-extension>
-                <jsp-ignore>true</jsp-ignore>
-                <renders-children>true</renders-children>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-            <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Render the markup for a <code><head></code> element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-<p>Render the starting <code><head></code> element tag.  Any attributes declared on the element must be passed through
-unmodified to the rendered output.  
-At some point before rendering the
-      closing <code></head></code> element tag, render any resources that have been targeted
-      for this "head" element:
-      <ul>
-      <li>Obtain a <code>UIViewRoot</code> instance.</li>
-      <li>Obtain a <code>List</code> of component resources targeted for
-      this "head" element with a call to <code>UIViewRoot.getComponentResources()</code>
-      with the <code>String "head"</code> as the argument.</li>
-      <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
-      and call <code>encodeAll</code> on each <code>UIComponent</code> instance. 
-
-<p>Any attributes declared on the element must be passed through
-unmodified to the rendered output.</p>
-
-      </ul>
-
-      <p>Note that due to the cascading nature of CSS files, the order
-      in which these files have been added to the view must be preserved
-      when rendering the references to the files within the
-      <code><head></code> element.  Also, the end result of the
-      rendered <code><head></code> section must be that any CSS
-      files referenced due to previous calls to
-      <code>addComponentResource()</code> do not adversely interfere
-      with any CSS files manually placed in this section by the page
-      author.</p>
-
-      <p>Render the ending <code></head></code> element tag.</p>
-
-</div>]]></description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.Head</renderer-type>
-            <renderer-class>
-               <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-head-renderer-class/text())"/>
-            </renderer-class>
-
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <renderer-extension>
-                <jsp-ignore>true</jsp-ignore>
-                <tag-name>head</tag-name>
-            </renderer-extension>
-        </renderer>
-
-        <renderer>
-            <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Render the markup for a <code><body></code> element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-<p>Render the starting <code><body></code> element tag. Just before rendering the
-      closing <code></body></code> element tag, render any resources that have been targeted
-      for this "body" element:
-      <ul>
-      <li>Obtain a <code>UIViewRoot</code> instance.</li>
-
-      <li>Obtain a <code>List</code> of component resources targeted for
-      this "body" element with a call to
-      <code>UIViewRoot.getComponentResources()</code> with the
-      <code>String "body"</code> as the argument.  Render the ending
-      <code></body></code> element tag.</li>
-
-      <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
-      and call <code>encodeAll</code> on each <code>UIComponent</code> instance.
-      </ul>
-
-<p>Any attributes declared on the element must be passed through
-unmodified to the rendered output.</p>
-
-</div>]]></description>
-            <component-family>javax.faces.Output</component-family>
-            <renderer-type>javax.faces.Body</renderer-type>
-            <renderer-class>
-               <xi:include href="standard-html-renderkit-impl.xml" xpointer="xpointer(/root/output-body-renderer-class/text())"/>
-            </renderer-class>
- 
-            <xi:include href="core-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="i18n-attrs.xml" xpointer="xpointer(/root/*)"/>
-            <xi:include href="events-attrs.xml" xpointer="xpointer(/root/*)"/>
-
-            <attribute>
-               <description>
-                   Javascript code executed when the user agent finishes loading
-                   a window or all frames within a frameset.
-               </description>
-               <display-name>Body Onload Script</display-name>
-               <icon></icon>
-               <attribute-name>onload</attribute-name>
-               <attribute-class>java.lang.String</attribute-class>
-               <attribute-extension>
-                   <pass-through>true</pass-through>
-                   <behavior/>
-               </attribute-extension>
-            </attribute> 
-
-            <attribute>
-               <description>
-                   Javascript code executed when the user agent removes 
-                   a document from a window or frame. 
-               </description>
-               <display-name>Body Onunload Script</display-name>
-               <icon></icon>
-               <attribute-name>onunload</attribute-name>
-               <attribute-class>java.lang.String</attribute-class>
-               <attribute-extension>
-                   <pass-through>true</pass-through>
-                   <behavior/>
-               </attribute-extension>
-            </attribute> 
-
-            <renderer-extension>
-                <jsp-ignore>true</jsp-ignore>
-                <tag-name>body</tag-name>
-            </renderer-extension>
-        </renderer>
-
-
-    </render-kit>
-
-</faces-config>
diff --git a/jsf-api/doc/standard-html-renderkit.xml b/jsf-api/doc/standard-html-renderkit.xml
deleted file mode 100644
index 56f0f3d..0000000
--- a/jsf-api/doc/standard-html-renderkit.xml
+++ /dev/null
@@ -1,31193 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!-- =========== FULL CONFIGURATION FILE ================================== -->
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">
-  <!-- Generic User Interface Components -->
-  <component>
-    <component-type>javax.faces.Column</component-type>
-    <component-class>javax.faces.component.UIColumn</component-class>
-    <facet>
-      <facet-name>header</facet-name>
-    </facet>
-    <facet>
-      <facet-name>footer</facet-name>
-    </facet>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Column</component-family>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Command</component-type>
-    <component-class>javax.faces.component.UICommand</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing the application action to invoke
-          when this component is activated by the user.  The expression
-          must evaluate to a public method that takes no parameters, and
-          returns an Object (the toString() of which is called to derive
-          the logical outcome) which is passed to the NavigationHandler
-          for this application.
-        </description>
-      <display-name>Application Action</display-name>
-      <icon/>
-      <property-name>action</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                java.lang.Object action()
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing an action listener method that
-          will be notified when this component is activated by the user.
-          The expression must evaluate to a public method that takes an
-          ActionEvent parameter, with a return type of void, <span
-          class="changed_added_2_0">or to a public method that takes no
-          arguments with a return type of void.  In the latter case, the
-          method has no way of easily knowing where the event came from,
-          but this can be useful in cases where a notification is needed
-          that "some action happened".</span>
-
-</p>]]></description>
-      <display-name>Action Listener</display-name>
-      <icon/>
-      <property-name>actionListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void actionListener(javax.faces.event.ActionEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void actionListener()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that, if this component is activated by the user,
-          notifications should be delivered to interested listeners and actions
-          immediately (that is, during Apply Request Values phase) rather than
-          waiting until Invoke Application phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Command</component-family>
-      <renderer-type>javax.faces.Button</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Data</component-type>
-    <component-class>javax.faces.component.UIData</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Zero-relative row number of the first row to be displayed.  If this
-          property is set to zero, rendering will begin with the first row of
-          the underlying data.
-        </description>
-      <display-name>First Row Index</display-name>
-      <icon/>
-      <property-name>first</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether there is model data available for the row
-          selected by the current value of the "rowIndex" property.
-        </description>
-      <display-name>Row Available Flag</display-name>
-      <icon/>
-      <property-name>rowAvailable</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The number of rows of model data that are available for processing
-          by this component.  If the number of rows is unknown, this property
-          will be set to -1.
-        </description>
-      <display-name>Row Count</display-name>
-      <icon/>
-      <property-name>rowCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          An object representing the model data for the row selected by the
-          current value of the "rowIndex" property.
-        </description>
-      <display-name>Row Data</display-name>
-      <icon/>
-      <property-name>rowData</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Zero-relative index of the currently selected row from the underlying
-          model data.  No error will occur if this property is set to point at
-          a row for which no model data exists.  To ensure data availability,
-          check the state of the "rowAvailable" property after modifying this
-          property.
-        </description>
-      <display-name>Row Index</display-name>
-      <icon/>
-      <property-name>rowIndex</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The number of rows to display, starting with the one identified by the
-          "first" property.  If this value is set to zero, all available rows in
-          the underlying data model will be displayed.
-        </description>
-      <display-name>Rows To Display</display-name>
-      <icon/>
-      <property-name>rows</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Name of a request-scope attribute under which the model data for the
-          row selected by the current value of the "rowIndex" property (i.e.
-          also the current value of the "rowData" property) will be exposed.
-        </description>
-      <display-name>Row Data Attribute</display-name>
-      <icon/>
-      <property-name>var</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Data</component-family>
-      <renderer-type>javax.faces.Table</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Form</component-type>
-    <component-class>javax.faces.component.UIForm</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not this form was the one submitted by
-          the user.  If this flag is not set, child input components are not
-          processed.
-        </description>
-      <display-name>Submitted Flag</display-name>
-      <icon/>
-      <property-name>submitted</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not this form should prepend its id
-          to its descendent's id during the clientId generation process.
-          If this flag is not set, the default value is true.
-        </description>
-      <display-name>Prepend Id During getClientId()</display-name>
-      <icon/>
-      <property-name>prependId</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Form</component-family>
-      <renderer-type>javax.faces.Form</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Graphic</component-type>
-    <component-class>javax.faces.component.UIGraphic</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Context-relative URL to retrieve the resource associated with
-          this component.  This is an alias for the "value" property.
-        </description>
-      <display-name>Source URL</display-name>
-      <icon/>
-      <property-name>url</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Graphic</component-family>
-      <renderer-type>javax.faces.Image</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Input</component-type>
-    <component-class>javax.faces.component.UIInput</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Input</component-family>
-      <renderer-type>javax.faces.Text</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Message</component-type>
-    <component-class>javax.faces.component.UIMessage</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Client identifier of the component for which to display messages.
-        </description>
-      <display-name>Associated Client Id</display-name>
-      <icon/>
-      <property-name>for</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <required>true</required>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the detail portion of displayed messages
-          should be included.  Default value is "true".
-        </description>
-      <display-name>Show Detail</display-name>
-      <icon/>
-      <property-name>showDetail</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the summary portion of displayed messages
-          should be included.  Default value is "false".
-        </description>
-      <display-name>Show Summary</display-name>
-      <icon/>
-      <property-name>showSummary</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>false</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Message</component-family>
-      <renderer-type>javax.faces.Message</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Messages</component-type>
-    <component-class>javax.faces.component.UIMessages</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that only global messages (that is, messages not
-          associated with any client identifier) are to be displayed.
-          Default value is "false".
-        </description>
-      <display-name>Global Only</display-name>
-      <icon/>
-      <property-name>globalOnly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>false</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Client identifier of the component for which to display messages. This
-          attribute is mutually exclusive with globalOnly and take precedence
-          if used.
-        </description>
-      <display-name>Associated Client Id</display-name>
-      <icon/>
-      <property-name>for</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <required>false</required>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the detail portion of displayed messages
-          should be included.  Default value is "false".
-        </description>
-      <display-name>Show Detail</display-name>
-      <icon/>
-      <property-name>showDetail</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>false</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the summary portion of displayed messages
-          should be included.  Default value is "true".
-        </description>
-      <display-name>Show Summary</display-name>
-      <icon/>
-      <property-name>showSummary</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Messages</component-family>
-      <renderer-type>javax.faces.Messages</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.NamingContainer</component-type>
-    <component-class>javax.faces.component.UINamingContainer</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.NamingContainer</component-family>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Output</component-type>
-    <component-class>javax.faces.component.UIOutput</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Text</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.OutcomeTarget</component-type>
-    <component-class>javax.faces.component.UIOutcomeTarget</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The logical outcome used to resolve a navigation case.
-        </description>
-      <display-name>Outcome</display-name>
-      <icon/>
-      <property-name>outcome</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Whether to include page parameters in the target URI.
-        </description>
-      <display-name>Include Page Parameters</display-name>
-      <icon/>
-      <property-name>includeViewParams</property-name>
-      <property-class>java.lang.Boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Return the URI fragment, as specified in RFC 2396.
-        </description>
-      <display-name>HTML Fragment</display-name>
-      <icon/>
-      <property-name>fragment</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.OutcomeTarget</component-family>
-      <renderer-type>javax.faces.Link</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Panel</component-type>
-    <component-class>javax.faces.component.UIPanel</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Panel</component-family>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.ViewParameter</component-type>
-    <component-class>javax.faces.component.UIViewParameter</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Name of the parameter associated with this component.
-        </description>
-      <display-name>Property Name</display-name>
-      <icon/>
-      <property-name>name</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Value of the parameter associated with this component.
-        </description>
-      <display-name>Property Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.ViewParameter</component-family>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.Parameter</component-type>
-    <component-class>javax.faces.component.UIParameter</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Name of the parameter associated with this component.
-        </description>
-      <display-name>Property Name</display-name>
-      <icon/>
-      <property-name>name</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Value of the parameter associated with this component.
-        </description>
-      <display-name>Property Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.Parameter</component-family>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.SelectBoolean</component-type>
-    <component-class>javax.faces.component.UISelectBoolean</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            For output components, this is the same as the "value" property.
-            For input components, this is the most recently user-entered
-            value, which will be pushed to the application data model during
-            Update Model Values phase, if a value binding is present for the
-            "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            Flag indicating whether the user has selected this component.
-            This is an alias for the "value" property.
-        </description>
-      <display-name>Selected Flag</display-name>
-      <icon/>
-      <property-name>selected</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.SelectBoolean</component-family>
-      <renderer-type>javax.faces.Checkbox</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.SelectItem</component-type>
-    <component-class>javax.faces.component.UISelectItem</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Description of the selection item represented by this component.
-          This property may be used by tools.
-        </description>
-      <display-name>Item Description</display-name>
-      <icon/>
-      <property-name>itemDescription</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the selection item represented by this component
-          must be rendered as disabled.
-        </description>
-      <display-name>Item Disabled</display-name>
-      <icon/>
-      <property-name>itemDisabled</property-name>
-      <property-class>boolean</property-class>
-    </property>
-    <property>
-      <description>
-          Label of the selection item represented by this component.  This
-          property is displayed to the user when the containing input
-          component is rendered.
-        </description>
-      <display-name>Item Label</display-name>
-      <icon/>
-      <property-name>itemLabel</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          The value returned to the server when a user chooses the selection
-          item represented by this component.
-        </description>
-      <display-name>Item Value</display-name>
-      <icon/>
-      <property-name>itemValue</property-name>
-      <property-class>java.lang.Object</property-class>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.SelectItem</component-family>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.SelectItems</component-type>
-    <component-class>javax.faces.component.UISelectItems</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.SelectItems</component-family>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.SelectMany</component-type>
-    <component-class>javax.faces.component.UISelectMany</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Array containing the selected values for this component.
-          This is an alias for the "value" property.
-        </description>
-      <display-name>Selected Values</display-name>
-      <icon/>
-      <property-name>selectedValues</property-name>
-      <property-class>java.lang.Object[]</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.SelectMany</component-family>
-      <renderer-type>javax.faces.Listbox</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.SelectOne</component-type>
-    <component-class>javax.faces.component.UISelectOne</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.SelectOne</component-family>
-      <renderer-type>javax.faces.Menu</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <component-type>javax.faces.ViewRoot</component-type>
-    <component-class>javax.faces.component.UIViewRoot</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Locale to be used in localizing the rendered output of this view.
-        </description>
-      <display-name>Locale</display-name>
-      <icon/>
-      <property-name>locale</property-name>
-      <property-class>java.util.Locale</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Identifier of the RenderKit being used to display this view.
-        </description>
-      <display-name>Render Kit Id</display-name>
-      <icon/>
-      <property-name>renderKitId</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Identifier of the view represented by this component tree.
-        </description>
-      <display-name>View Id</display-name>
-      <icon/>
-      <property-name>viewId</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <component-family>javax.faces.ViewRoot</component-family>
-    </component-extension>
-  </component>
-  <!-- Concrete HTML Components -->
-  <component>
-    <description><![CDATA[<p>Represents a column that will be rendered 
-      in an HTML <code>table</code> element.</p>]]></description>
-    <display-name>Column</display-name>
-    <component-type>javax.faces.HtmlColumn</component-type>
-    <component-class>javax.faces.component.html.HtmlColumn</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any header generated for this column.
-        </description>
-      <display-name>Header CSS Classes</display-name>
-      <icon/>
-      <property-name>headerClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any footer generated for this column.
-        </description>
-      <display-name>Footer CSS Classes</display-name>
-      <icon/>
-      <property-name>footerClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this column is a row header column and
-          therefore cells in this column should be rendered with "th"
-          instead of "td" and must have the 'scope="row"' attribute.
-        </description>
-      <display-name>Column is Row Header</display-name>
-      <icon/>
-      <property-name>rowHeader</property-name>
-      <property-class>boolean</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Column</base-component-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>input</code> element
-      for a button of type <code>submit</code> or <code>reset</code>.
-      The label text is specified by the component value.</p>]]></description>
-    <display-name>Command Button</display-name>
-    <component-type>javax.faces.HtmlCommandButton</component-type>
-    <component-class>javax.faces.component.html.HtmlCommandButton</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing the application action to invoke
-          when this component is activated by the user.  The expression
-          must evaluate to a public method that takes no parameters, and
-          returns an Object (the toString() of which is called to derive
-          the logical outcome) which is passed to the NavigationHandler
-          for this application.
-        </description>
-      <display-name>Application Action</display-name>
-      <icon/>
-      <property-name>action</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                java.lang.Object action()
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing an action listener method that
-          will be notified when this component is activated by the user.
-          The expression must evaluate to a public method that takes an
-          ActionEvent parameter, with a return type of void, <span
-          class="changed_added_2_0">or to a public method that takes no
-          arguments with a return type of void.  In the latter case, the
-          method has no way of easily knowing where the event came from,
-          but this can be useful in cases where a notification is needed
-          that "some action happened".</span>
-
-</p>]]></description>
-      <display-name>Action Listener</display-name>
-      <icon/>
-      <property-name>actionListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void actionListener(javax.faces.event.ActionEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void actionListener()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that, if this component is activated by the user,
-          notifications should be delivered to interested listeners and actions
-          immediately (that is, during Apply Request Values phase) rather than
-          waiting until Invoke Application phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        Alternate textual description of the
-        element rendered by this component.
-      </description>
-      <display-name>Alternate Text</display-name>
-      <icon/>
-      <property-name>alt</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-        Absolute or relative URL of the
-        image to be displayed for this
-        button.  If specified, this
-        "input" element will be of type
-        "image".  Otherwise, it will be
-        of the type specified by the
-        "type" property with a label
-        specified by the "value"
-        property.  <span
-        class="changed_added_2_0">Note
-        that if the value of this
-        attribute starts with "/", the
-        rendered value for this
-        attribute will be prefixed with
-        the context-root for this
-        application.</span>
-      </p>]]></description>
-      <display-name>Image URL</display-name>
-      <icon/>
-      <property-name>image</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>action</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-         Type of button to create.  Valid values are "submit", "button",
-         and "reset".  If not specified, or not a valid value, the default
-         value is "submit".
-      </description>
-      <display-name>Button Type</display-name>
-      <icon/>
-      <property-name>type</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <default-value>"submit"</default-value>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Command</base-component-type>
-      <renderer-type>javax.faces.Button</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>a</code> element for a hyperlink that acts
-      like a submit button.  This component must be placed inside
-      a form, and requires JavaScript to be enabled in the client.</p>]]></description>
-    <display-name>Command Hyperlink</display-name>
-    <component-type>javax.faces.HtmlCommandLink</component-type>
-    <component-class>javax.faces.component.html.HtmlCommandLink</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing the application action to invoke
-          when this component is activated by the user.  The expression
-          must evaluate to a public method that takes no parameters, and
-          returns an Object (the toString() of which is called to derive
-          the logical outcome) which is passed to the NavigationHandler
-          for this application.
-        </description>
-      <display-name>Application Action</display-name>
-      <icon/>
-      <property-name>action</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                java.lang.Object action()
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing an action listener method that
-          will be notified when this component is activated by the user.
-          The expression must evaluate to a public method that takes an
-          ActionEvent parameter, with a return type of void, <span
-          class="changed_added_2_0">or to a public method that takes no
-          arguments with a return type of void.  In the latter case, the
-          method has no way of easily knowing where the event came from,
-          but this can be useful in cases where a notification is needed
-          that "some action happened".</span>
-
-</p>]]></description>
-      <display-name>Action Listener</display-name>
-      <icon/>
-      <property-name>actionListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void actionListener(javax.faces.event.ActionEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void actionListener()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that, if this component is activated by the user,
-          notifications should be delivered to interested listeners and actions
-          immediately (that is, during Apply Request Values phase) rather than
-          waiting until Invoke Application phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          The character encoding of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Character Set</display-name>
-      <icon/>
-      <property-name>charset</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The position and shape of the hot spot on the screen
-          (for use in client-side image maps).
-        </description>
-      <display-name>Coordinates</display-name>
-      <icon/>
-      <property-name>coords</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The language code of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Language</display-name>
-      <icon/>
-      <property-name>hreflang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The relationship from the current document
-          to the anchor specified by this hyperlink.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-      <display-name>Relationship</display-name>
-      <icon/>
-      <property-name>rel</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A reverse link from the anchor specified
-          by this hyperlink to the current document.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-      <display-name>Reverse Link</display-name>
-      <icon/>
-      <property-name>rev</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The shape of the hot spot on the screen
-          (for use in client-side image maps).  Valid
-          values are:  default (entire region); rect
-          (rectangular region); circle (circular region);
-          and poly (polygonal region).
-        </description>
-      <display-name>Shape</display-name>
-      <icon/>
-      <property-name>shape</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Name of a frame where the resource
-          retrieved via this hyperlink is to
-          be displayed.
-        </description>
-      <display-name>Target Frame</display-name>
-      <icon/>
-      <property-name>target</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The content type of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Content Type</display-name>
-      <icon/>
-      <property-name>type</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this element must never
-          receive focus or be included in a subsequent
-          submit.
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>action</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Command</base-component-type>
-      <renderer-type>javax.faces.Link</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a set of repeating data (segregated into
-      columns by child UIColumn components) that will
-      be rendered in an HTML <code>table</code> element.</p>]]></description>
-    <display-name>Data Table</display-name>
-    <component-type>javax.faces.HtmlDataTable</component-type>
-    <component-class>javax.faces.component.html.HtmlDataTable</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Zero-relative row number of the first row to be displayed.  If this
-          property is set to zero, rendering will begin with the first row of
-          the underlying data.
-        </description>
-      <display-name>First Row Index</display-name>
-      <icon/>
-      <property-name>first</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether there is model data available for the row
-          selected by the current value of the "rowIndex" property.
-        </description>
-      <display-name>Row Available Flag</display-name>
-      <icon/>
-      <property-name>rowAvailable</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The number of rows of model data that are available for processing
-          by this component.  If the number of rows is unknown, this property
-          will be set to -1.
-        </description>
-      <display-name>Row Count</display-name>
-      <icon/>
-      <property-name>rowCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          An object representing the model data for the row selected by the
-          current value of the "rowIndex" property.
-        </description>
-      <display-name>Row Data</display-name>
-      <icon/>
-      <property-name>rowData</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Zero-relative index of the currently selected row from the underlying
-          model data.  No error will occur if this property is set to point at
-          a row for which no model data exists.  To ensure data availability,
-          check the state of the "rowAvailable" property after modifying this
-          property.
-        </description>
-      <display-name>Row Index</display-name>
-      <icon/>
-      <property-name>rowIndex</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The number of rows to display, starting with the one identified by the
-          "first" property.  If this value is set to zero, all available rows in
-          the underlying data model will be displayed.
-        </description>
-      <display-name>Rows To Display</display-name>
-      <icon/>
-      <property-name>rows</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Name of a request-scope attribute under which the model data for the
-          row selected by the current value of the "rowIndex" property (i.e.
-          also the current value of the "rowData" property) will be exposed.
-        </description>
-      <display-name>Row Data Attribute</display-name>
-      <icon/>
-      <property-name>var</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Name or code of the background color for this table.
-        </description>
-      <display-name>Background Color</display-name>
-      <icon/>
-      <property-name>bgcolor</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Width (in pixels) of the border to be drawn
-          around this table.
-        </description>
-      <display-name>Table Border</display-name>
-      <icon/>
-      <property-name>border</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Definition of how much space the user agent should
-          leave between the border of each cell and its contents.
-        </description>
-      <display-name>Cell Padding</display-name>
-      <icon/>
-      <property-name>cellpadding</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Definition of how much space the user agent should
-          leave between the left side of the table and the
-          leftmost column, the top of the table and the top of
-          the top side of the topmost row, and so on for the
-          right and bottom of the table.  It also specifies
-          the amount of space to leave between cells.
-        </description>
-      <display-name>Cell Spacing</display-name>
-      <icon/>
-      <property-name>cellspacing</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the columns of this table.  A space separated list of
-          classes may also be specified for any individual column.  If
-          the number of elements in this list is less than the number of
-          actual column children of the UIData, no "class"
-          attribute is output for each column greater than the number of
-          elements in the list.  If the number of elements in the list
-          is greater than the number of actual column children of the
-          UIData, the elements at the posisiton in the list
-          after the last column are ignored.
-        </description>
-      <display-name>Column CSS Classes</display-name>
-      <icon/>
-      <property-name>columnClasses</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any footer generated for this table.
-        </description>
-      <display-name>Footer CSS Classes</display-name>
-      <icon/>
-      <property-name>footerClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Code specifying which sides of the frame surrounding
-          this table will be visible.  Valid values are:
-          none (no sides, default value); above (top side only);
-          below (bottom side only); hsides (top and bottom sides
-          only); vsides (right and left sides only); lhs (left
-          hand side only); rhs (right hand side only); box
-          (all four sides); and border (all four sides).
-        </description>
-      <display-name>Table Frame</display-name>
-      <icon/>
-      <property-name>frame</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any caption generated for this table.
-        </description>
-      <display-name>Caption CSS Classes</display-name>
-      <icon/>
-      <property-name>captionClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to be applied when this caption is rendered.
-        </description>
-      <display-name>Caption CSS Styles</display-name>
-      <icon/>
-      <property-name>captionStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any header generated for this table.
-        </description>
-      <display-name>Header CSS Classes</display-name>
-      <icon/>
-      <property-name>headerClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the rows of this table.  A space separated list of classes
-          may also be specified for any individual row.  Thes styles are
-          applied, in turn, to each row in the table.  For example, if
-          the list has two elements, the first style class in the list
-          is applied to the first row, the second to the second row, the
-          first to the third row, the second to the fourth row, etc.  In
-          other words, we keep iterating through the list until we reach
-          the end, and then we start at the beginning again.
-        </description>
-      <display-name>Row CSS Classes</display-name>
-      <icon/>
-      <property-name>rowClasses</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Code specifying which rules will appear between cells
-          within this table.  Valid values are:  none (no rules,
-          default value); groups (between row groups); rows
-          (between rows only); cols (between columns only); and
-          all (between all rows and columns).
-        </description>
-      <display-name>Table Rules</display-name>
-      <icon/>
-      <property-name>rules</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Summary of this table's purpose and structure, for
-          user agents rendering to non-visual media such as
-          speech and Braille.
-        </description>
-      <display-name>Table Summary</display-name>
-      <icon/>
-      <property-name>summary</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Width of the entire table, for visual user agents.
-        </description>
-      <display-name>Table Width</display-name>
-      <icon/>
-      <property-name>width</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Comma separated list of row indices for which a new
-          "tbody" element should be started (and any
-          previously opened one should be ended).
-        </description>
-      <display-name>Body Rows</display-name>
-      <icon/>
-      <property-name>bodyrows</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Data</base-component-type>
-      <renderer-type>javax.faces.Table</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>form</code> element.  Child input components
-      will be submitted unless they have been disabled.</p>]]></description>
-    <display-name>Form</display-name>
-    <component-type>javax.faces.HtmlForm</component-type>
-    <component-class>javax.faces.component.html.HtmlForm</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not this form was the one submitted by
-          the user.  If this flag is not set, child input components are not
-          processed.
-        </description>
-      <display-name>Submitted Flag</display-name>
-      <icon/>
-      <property-name>submitted</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not this form should prepend its id
-          to its descendent's id during the clientId generation process.
-          If this flag is not set, the default value is true.
-        </description>
-      <display-name>Prepend Id During getClientId()</display-name>
-      <icon/>
-      <property-name>prependId</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        List of content types that a server processing this form
-        will handle correctly
-        </description>
-      <display-name>Content Type</display-name>
-      <icon/>
-      <property-name>accept</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        List of character encodings for input data
-        that are accepted by the server processing
-        this form.
-        </description>
-      <display-name>Character Set</display-name>
-      <icon/>
-      <property-name>acceptcharset</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-        Content type used to submit the form to the server.  If not
-        specified, the default value is
-        "application/x-www-form-urlencoded".
-        </description>
-      <display-name>Encoding Type</display-name>
-      <icon/>
-      <property-name>enctype</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <default-value>"application/x-www-form-urlencoded"</default-value>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        Javascript code executed when this form is reset.
-        </description>
-      <display-name>Form Reset Script</display-name>
-      <icon/>
-      <property-name>onreset</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        Javascript code executed when this form is submitted.
-        </description>
-      <display-name>Form Submit Script</display-name>
-      <icon/>
-      <property-name>onsubmit</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        Name of a frame where the response
-        retrieved after this form submit is to
-        be displayed.
-        </description>
-      <display-name>Target Frame</display-name>
-      <icon/>
-      <property-name>target</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Form</base-component-type>
-      <renderer-type>javax.faces.Form</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>img</code> element, used to retrieve
-      and render a graphical image.</p>]]></description>
-    <display-name>Graphic Image</display-name>
-    <component-type>javax.faces.HtmlGraphicImage</component-type>
-    <component-class>javax.faces.component.html.HtmlGraphicImage</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Context-relative URL to retrieve the resource associated with
-          this component.  This is an alias for the "value" property.
-        </description>
-      <display-name>Source URL</display-name>
-      <icon/>
-      <property-name>url</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        Alternate textual description of the
-        element rendered by this component.
-        </description>
-      <display-name>Alternate Text</display-name>
-      <icon/>
-      <property-name>alt</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        Override for the height of this image.
-        </description>
-      <display-name>Image Height</display-name>
-      <icon/>
-      <property-name>height</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        Flag indicating that this image is to be used as a server side
-        image map.  Such an image must be enclosed within a hyperlink
-        ("a").  A value of false causes no attribute to be rendered, 
-        while a value of true causes the attribute to be rendered as
-        ismap="ismap".
-        </description>
-      <display-name>Image Map Flag</display-name>
-      <icon/>
-      <property-name>ismap</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        URI to a long description of the image
-        represented by this element.
-        </description>
-      <display-name>Long Description</display-name>
-      <icon/>
-      <property-name>longdesc</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        The name of a client side image map (an HTML "map"
-        element) for which this element provides the image.
-        </description>
-      <display-name>Use Image Map</display-name>
-      <icon/>
-      <property-name>usemap</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        Override for the width of this image.
-        </description>
-      <display-name>Image Width</display-name>
-      <icon/>
-      <property-name>width</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Graphic</base-component-type>
-      <renderer-type>javax.faces.Image</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>hidden</code>.</p>]]></description>
-    <display-name>Input Hidden</display-name>
-    <component-type>javax.faces.HtmlInputHidden</component-type>
-    <component-class>javax.faces.component.html.HtmlInputHidden</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Input</base-component-type>
-      <renderer-type>javax.faces.Hidden</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>password</code>.  On a redisplay,
-      any previously entered value will <em>not</em>
-      be rendered (for security reasons) unless the
-      <code>redisplay</code> property is set to
-      <code>true</code>.</p>]]></description>
-    <display-name>Input Secret</display-name>
-    <component-type>javax.faces.HtmlInputSecret</component-type>
-    <component-class>javax.faces.component.html.HtmlInputSecret</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Alternate textual description of the
-          element rendered by this component.
-        </description>
-      <display-name>Alternate Text</display-name>
-      <icon/>
-      <property-name>alt</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        If the value of this attribute is "off", render "off" as the value
-        of the attribute. This indicates that the  browser should
-        disable its autocomplete feature for this component.  This is
-        useful for components that perform autocompletion and do not
-        want the browser interfering.  If this attribute is not set or the value 
-        is "on", render nothing.
-        </description>
-      <display-name>Enable or disable browser autocompletion.</display-name>
-      <icon/>
-      <property-name>autocomplete</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          The maximum number of characters that may
-          be entered in this field.
-        </description>
-      <display-name>Maximum Length</display-name>
-      <icon/>
-      <property-name>maxlength</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The number of characters used to determine
-          the width of this field.
-        </description>
-      <display-name>Field Width</display-name>
-      <icon/>
-      <property-name>size</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        Flag indicating that any existing value
-        in this field should be rendered when the
-        form is created.  Because this is a potential
-        security risk, password values are not
-        displayed by default.
-        </description>
-      <display-name>Redisplay Flag</display-name>
-      <icon/>
-      <property-name>redisplay</property-name>
-      <property-class>boolean</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Input</base-component-type>
-      <renderer-type>javax.faces.Secret</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>text</code>.</p>]]></description>
-    <display-name>Input Text</display-name>
-    <component-type>javax.faces.HtmlInputText</component-type>
-    <component-class>javax.faces.component.html.HtmlInputText</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Alternate textual description of the
-          element rendered by this component.
-        </description>
-      <display-name>Alternate Text</display-name>
-      <icon/>
-      <property-name>alt</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        If the value of this attribute is "off", render "off" as the value
-        of the attribute. This indicates that the  browser should
-        disable its autocomplete feature for this component.  This is
-        useful for components that perform autocompletion and do not
-        want the browser interfering.  If this attribute is not set or the value 
-        is "on", render nothing.
-        </description>
-      <display-name>Enable or disable browser autocompletion.</display-name>
-      <icon/>
-      <property-name>autocomplete</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          The maximum number of characters that may
-          be entered in this field.
-        </description>
-      <display-name>Maximum Length</display-name>
-      <icon/>
-      <property-name>maxlength</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The number of characters used to determine
-          the width of this field.
-        </description>
-      <display-name>Field Width</display-name>
-      <icon/>
-      <property-name>size</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Input</base-component-type>
-      <renderer-type>javax.faces.Text</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>textarea</code> element.</p>]]></description>
-    <display-name>Input Textarea</display-name>
-    <component-type>javax.faces.HtmlInputTextarea</component-type>
-    <component-class>javax.faces.component.html.HtmlInputTextarea</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        The number of columns to be displayed.
-        </description>
-      <display-name>Columns</display-name>
-      <icon/>
-      <property-name>cols</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        The number of rows to be displayed.
-        </description>
-      <display-name>Rows</display-name>
-      <icon/>
-      <property-name>rows</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Input</base-component-type>
-      <renderer-type>javax.faces.Textarea</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <display-name>Message</display-name>
-    <component-type>javax.faces.HtmlMessage</component-type>
-    <component-class>javax.faces.component.html.HtmlMessage</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Client identifier of the component for which to display messages.
-        </description>
-      <display-name>Associated Client Id</display-name>
-      <icon/>
-      <property-name>for</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <required>true</required>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the detail portion of displayed messages
-          should be included.  Default value is "true".
-        </description>
-      <display-name>Show Detail</display-name>
-      <icon/>
-      <property-name>showDetail</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the summary portion of displayed messages
-          should be included.  Default value is "false".
-        </description>
-      <display-name>Show Summary</display-name>
-      <icon/>
-      <property-name>showSummary</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>false</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "ERROR".
-        </description>
-      <display-name>Error Class</display-name>
-      <icon/>
-      <property-name>errorClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "ERROR".
-        </description>
-      <display-name>Error Styles</display-name>
-      <icon/>
-      <property-name>errorStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "FATAL".
-        </description>
-      <display-name>Fatal Class</display-name>
-      <icon/>
-      <property-name>fatalClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "FATAL".
-        </description>
-      <display-name>Fatal Styles</display-name>
-      <icon/>
-      <property-name>fatalStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "INFO".
-        </description>
-      <display-name>Info Class</display-name>
-      <icon/>
-      <property-name>infoClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "INFO".
-        </description>
-      <display-name>Info Styles</display-name>
-      <icon/>
-      <property-name>infoStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the detail portion of the
-          message should be displayed as a tooltip.
-        </description>
-      <display-name>Tooltip</display-name>
-      <icon/>
-      <property-name>tooltip</property-name>
-      <property-class>boolean</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "WARN".
-        </description>
-      <display-name>Warning Class</display-name>
-      <icon/>
-      <property-name>warnClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "WARN".
-        </description>
-      <display-name>Warning Styles</display-name>
-      <icon/>
-      <property-name>warnStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Message</base-component-type>
-      <renderer-type>javax.faces.Message</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <display-name>Messages</display-name>
-    <component-type>javax.faces.HtmlMessages</component-type>
-    <component-class>javax.faces.component.html.HtmlMessages</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that only global messages (that is, messages not
-          associated with any client identifier) are to be displayed.
-          Default value is "false".
-        </description>
-      <display-name>Global Only</display-name>
-      <icon/>
-      <property-name>globalOnly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>false</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Client identifier of the component for which to display messages. This
-          attribute is mutually exclusive with globalOnly and take precedence
-          if used.
-        </description>
-      <display-name>Associated Client Id</display-name>
-      <icon/>
-      <property-name>for</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <required>false</required>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the detail portion of displayed messages
-          should be included.  Default value is "false".
-        </description>
-      <display-name>Show Detail</display-name>
-      <icon/>
-      <property-name>showDetail</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>false</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the summary portion of displayed messages
-          should be included.  Default value is "true".
-        </description>
-      <display-name>Show Summary</display-name>
-      <icon/>
-      <property-name>showSummary</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "ERROR".
-        </description>
-      <display-name>Error Class</display-name>
-      <icon/>
-      <property-name>errorClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "ERROR".
-        </description>
-      <display-name>Error Styles</display-name>
-      <icon/>
-      <property-name>errorStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "FATAL".
-        </description>
-      <display-name>Fatal Class</display-name>
-      <icon/>
-      <property-name>fatalClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "FATAL".
-        </description>
-      <display-name>Fatal Styles</display-name>
-      <icon/>
-      <property-name>fatalStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "INFO".
-        </description>
-      <display-name>Info Class</display-name>
-      <icon/>
-      <property-name>infoClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "INFO".
-        </description>
-      <display-name>Info Styles</display-name>
-      <icon/>
-      <property-name>infoStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          The type of layout markup to use when rendering
-          error messages.  Valid values are "table" (an HTML
-          table) and "list" (an HTML list).  If not specified,
-          the default value is "list".
-        </description>
-      <display-name>Layout</display-name>
-      <icon/>
-      <property-name>layout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <default-value>"list"</default-value>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the detail portion of the
-          message should be displayed as a tooltip.
-        </description>
-      <display-name>Tooltip</display-name>
-      <icon/>
-      <property-name>tooltip</property-name>
-      <property-class>boolean</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to any message
-          with a severity class of "WARN".
-        </description>
-      <display-name>Warning Class</display-name>
-      <icon/>
-      <property-name>warnClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to apply to any message
-          with a severity class of "WARN".
-        </description>
-      <display-name>Warning Styles</display-name>
-      <icon/>
-      <property-name>warnStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Messages</base-component-type>
-      <renderer-type>javax.faces.Messages</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a component that looks up a localized message in a
-      resource bundle, optionally uses it as a
-      <code>MessageFormat</code> pattern string and substitutes in
-      parameter values from nested <em>UIParameter</em> components, and
-      renders the result.  If the "dir" or "lang" attributes are
-      present, render a <code>span</code> element and pass them through
-      as attributes on the span.</p>]]></description>
-    <display-name>Output Format</display-name>
-    <component-type>javax.faces.HtmlOutputFormat</component-type>
-    <component-class>javax.faces.component.html.HtmlOutputFormat</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  This flag
-        is set to "true" by default.
-        </description>
-      <display-name>Escape Characters</display-name>
-      <icon/>
-      <property-name>escape</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Output</base-component-type>
-      <renderer-type>javax.faces.Format</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>label</code> element, used to define
-      an accessible label for a corresponding input element.</p>]]></description>
-    <display-name>Output Label</display-name>
-    <component-type>javax.faces.HtmlOutputLabel</component-type>
-    <component-class>javax.faces.component.html.HtmlOutputLabel</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        Client identifier of the component for which this element
-        is a label.
-        </description>
-      <display-name>Label For Identifier</display-name>
-      <icon/>
-      <property-name>for</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <required>false</required>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  If omitted, this
-        flag is assumed to be "true".
-        </description>
-      <display-name>Escape Characters</display-name>
-      <icon/>
-      <property-name>escape</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Output</base-component-type>
-      <renderer-type>javax.faces.Label</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>a</code> (hyperlink) element that may be
-      used to link to an arbitrary URL defined by the <code>value</code>
-      property.</p>]]></description>
-    <display-name>Output Hyperlink</display-name>
-    <component-type>javax.faces.HtmlOutputLink</component-type>
-    <component-class>javax.faces.component.html.HtmlOutputLink</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          The character encoding of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Character Set</display-name>
-      <icon/>
-      <property-name>charset</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The position and shape of the hot spot on the screen
-          (for use in client-side image maps).
-        </description>
-      <display-name>Coordinates</display-name>
-      <icon/>
-      <property-name>coords</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The language code of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Language</display-name>
-      <icon/>
-      <property-name>hreflang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The relationship from the current document
-          to the anchor specified by this hyperlink.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-      <display-name>Relationship</display-name>
-      <icon/>
-      <property-name>rel</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A reverse link from the anchor specified
-          by this hyperlink to the current document.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-      <display-name>Reverse Link</display-name>
-      <icon/>
-      <property-name>rev</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The shape of the hot spot on the screen
-          (for use in client-side image maps).  Valid
-          values are:  default (entire region); rect
-          (rectangular region); circle (circular region);
-          and poly (polygonal region).
-        </description>
-      <display-name>Shape</display-name>
-      <icon/>
-      <property-name>shape</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Name of a frame where the resource
-          retrieved via this hyperlink is to
-          be displayed.
-        </description>
-      <display-name>Target Frame</display-name>
-      <icon/>
-      <property-name>target</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The content type of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Content Type</display-name>
-      <icon/>
-      <property-name>type</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this element must never
-          receive focus or be included in a subsequent
-          submit.
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>action</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          The identifier of the page fragment which should
-          be brought into focus when the target page is
-          rendered. The value of this attribute is appended
-          to the end of target URL following a hash (#) mark.
-          This notation is part of the standard URL syntax.
-        </description>
-      <display-name>Fragment Identifier</display-name>
-      <icon/>
-      <property-name>fragment</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Output</base-component-type>
-      <renderer-type>javax.faces.Link</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>a</code> (hyperlink) element that may be
-      used to link to a URL handled by the Faces Servlet resolved preemptively using the logical
-      outcome defined by the <code>outcome</code> property.]]></description>
-    <display-name>Outcome Target Hyperlink</display-name>
-    <component-type>javax.faces.HtmlOutcomeTargetLink</component-type>
-    <component-class>javax.faces.component.html.HtmlOutcomeTargetLink</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The logical outcome used to resolve a navigation case.
-        </description>
-      <display-name>Outcome</display-name>
-      <icon/>
-      <property-name>outcome</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Whether to include page parameters in the target URI.
-        </description>
-      <display-name>Include Page Parameters</display-name>
-      <icon/>
-      <property-name>includeViewParams</property-name>
-      <property-class>java.lang.Boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Return the URI fragment, as specified in RFC 2396.
-        </description>
-      <display-name>HTML Fragment</display-name>
-      <icon/>
-      <property-name>fragment</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          The character encoding of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Character Set</display-name>
-      <icon/>
-      <property-name>charset</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The position and shape of the hot spot on the screen
-          (for use in client-side image maps).
-        </description>
-      <display-name>Coordinates</display-name>
-      <icon/>
-      <property-name>coords</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The language code of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Language</display-name>
-      <icon/>
-      <property-name>hreflang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The relationship from the current document
-          to the anchor specified by this hyperlink.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-      <display-name>Relationship</display-name>
-      <icon/>
-      <property-name>rel</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A reverse link from the anchor specified
-          by this hyperlink to the current document.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-      <display-name>Reverse Link</display-name>
-      <icon/>
-      <property-name>rev</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The shape of the hot spot on the screen
-          (for use in client-side image maps).  Valid
-          values are:  default (entire region); rect
-          (rectangular region); circle (circular region);
-          and poly (polygonal region).
-        </description>
-      <display-name>Shape</display-name>
-      <icon/>
-      <property-name>shape</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Name of a frame where the resource
-          retrieved via this hyperlink is to
-          be displayed.
-        </description>
-      <display-name>Target Frame</display-name>
-      <icon/>
-      <property-name>target</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The content type of the resource designated
-          by this hyperlink.
-        </description>
-      <display-name>Content Type</display-name>
-      <icon/>
-      <property-name>type</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this element must never
-          receive focus or be included in a subsequent
-          submit.
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>action</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          The identifier of the page fragment which should
-          be brought into focus when the target page is
-          rendered. The value of this attribute is appended
-          to the end of target URL following a hash (#) mark.
-          This notation is part of the standard URL syntax.
-        </description>
-      <display-name>Fragment Identifier</display-name>
-      <icon/>
-      <property-name>fragment</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.OutcomeTarget</base-component-type>
-      <renderer-type>javax.faces.Link</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>input</code> element of type "button" or image that
-            may be used to link to a URL handled by the Faces Servlet resolved preemptively using
-            the logical outcome defined by the <code>outcome</code> property. The button behaves like
-            a link, so the current form is not submitted when it is activated (the transitive of how
-            the UICommandLink behaves like a submit button).]]></description>
-    <display-name>Outcome Target Button</display-name>
-    <component-type>javax.faces.HtmlOutcomeTargetButton</component-type>
-    <component-class>javax.faces.component.html.HtmlOutcomeTargetButton</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The logical outcome used to resolve a navigation case.
-        </description>
-      <display-name>Outcome</display-name>
-      <icon/>
-      <property-name>outcome</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Whether to include page parameters in the target URI.
-        </description>
-      <display-name>Include Page Parameters</display-name>
-      <icon/>
-      <property-name>includeViewParams</property-name>
-      <property-class>java.lang.Boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Return the URI fragment, as specified in RFC 2396.
-        </description>
-      <display-name>HTML Fragment</display-name>
-      <icon/>
-      <property-name>fragment</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        Alternate textual description of the
-        element rendered by this component.
-      </description>
-      <display-name>Alternate Text</display-name>
-      <icon/>
-      <property-name>alt</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-        Absolute or relative URL of the
-        image to be displayed for this
-        button.  If specified, this
-        "input" element will be of type
-        "image".  Otherwise, it will be
-        of the type specified by the
-        "type" property with a label
-        specified by the "value"
-        property.  <span
-        class="changed_added_2_0">Note
-        that if the value of this
-        attribute starts with "/", the
-        rendered value for this
-        attribute will be prefixed with
-        the context-root for this
-        application.</span>
-      </p>]]></description>
-      <display-name>Image URL</display-name>
-      <icon/>
-      <property-name>image</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-
-    <property>
-      <description>
-          The identifier of the page fragment which should
-          be brought into focus when the target page is
-          rendered. The value of this attribute is appended
-          to the end of target URL following a hash (#) mark.
-          This notation is part of the standard URL syntax.
-        </description>
-      <display-name>Fragment Identifier</display-name>
-      <icon/>
-      <property-name>fragment</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.OutcomeTarget</base-component-type>
-      <renderer-type>javax.faces.Button</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Renders the component value as text, optionally wrapping in a
-      <code>span</code> element if I18N attributes, CSS styles or style
-      classes are specified.</p>]]></description>
-    <display-name>Output Text</display-name>
-    <component-type>javax.faces.HtmlOutputText</component-type>
-    <component-class>javax.faces.component.html.HtmlOutputText</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  This flag
-        is set to "true" by default.
-        </description>
-      <display-name>Escape Characters</display-name>
-      <icon/>
-      <property-name>escape</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <default-value>true</default-value>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Output</base-component-type>
-      <renderer-type>javax.faces.Text</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Renders child components in a table, starting a new
-      row after the specified number of columns.</p>]]></description>
-    <display-name>Panel Grid</display-name>
-    <component-type>javax.faces.HtmlPanelGrid</component-type>
-    <component-class>javax.faces.component.html.HtmlPanelGrid</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Name or code of the background color for this table.
-        </description>
-      <display-name>Background Color</display-name>
-      <icon/>
-      <property-name>bgcolor</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Width (in pixels) of the border to be drawn
-          around this table.
-        </description>
-      <display-name>Table Border</display-name>
-      <icon/>
-      <property-name>border</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Definition of how much space the user agent should
-          leave between the border of each cell and its contents.
-        </description>
-      <display-name>Cell Padding</display-name>
-      <icon/>
-      <property-name>cellpadding</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Definition of how much space the user agent should
-          leave between the left side of the table and the
-          leftmost column, the top of the table and the top of
-          the top side of the topmost row, and so on for the
-          right and bottom of the table.  It also specifies
-          the amount of space to leave between cells.
-        </description>
-      <display-name>Cell Spacing</display-name>
-      <icon/>
-      <property-name>cellspacing</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the columns of this table.  A space separated list of
-          classes may also be specified for any individual column.  If
-          the number of elements in this list is less than the number of
-          actual column children of the UIData, no "class"
-          attribute is output for each column greater than the number of
-          elements in the list.  If the number of elements in the list
-          is greater than the number of actual column children of the
-          UIData, the elements at the posisiton in the list
-          after the last column are ignored.
-        </description>
-      <display-name>Column CSS Classes</display-name>
-      <icon/>
-      <property-name>columnClasses</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any footer generated for this table.
-        </description>
-      <display-name>Footer CSS Classes</display-name>
-      <icon/>
-      <property-name>footerClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Code specifying which sides of the frame surrounding
-          this table will be visible.  Valid values are:
-          none (no sides, default value); above (top side only);
-          below (bottom side only); hsides (top and bottom sides
-          only); vsides (right and left sides only); lhs (left
-          hand side only); rhs (right hand side only); box
-          (all four sides); and border (all four sides).
-        </description>
-      <display-name>Table Frame</display-name>
-      <icon/>
-      <property-name>frame</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any caption generated for this table.
-        </description>
-      <display-name>Caption CSS Classes</display-name>
-      <icon/>
-      <property-name>captionClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style(s) to be applied when this caption is rendered.
-        </description>
-      <display-name>Caption CSS Styles</display-name>
-      <icon/>
-      <property-name>captionStyle</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any header generated for this table.
-        </description>
-      <display-name>Header CSS Classes</display-name>
-      <icon/>
-      <property-name>headerClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the rows of this table.  A space separated list of classes
-          may also be specified for any individual row.  Thes styles are
-          applied, in turn, to each row in the table.  For example, if
-          the list has two elements, the first style class in the list
-          is applied to the first row, the second to the second row, the
-          first to the third row, the second to the fourth row, etc.  In
-          other words, we keep iterating through the list until we reach
-          the end, and then we start at the beginning again.
-        </description>
-      <display-name>Row CSS Classes</display-name>
-      <icon/>
-      <property-name>rowClasses</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Code specifying which rules will appear between cells
-          within this table.  Valid values are:  none (no rules,
-          default value); groups (between row groups); rows
-          (between rows only); cols (between columns only); and
-          all (between all rows and columns).
-        </description>
-      <display-name>Table Rules</display-name>
-      <icon/>
-      <property-name>rules</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Summary of this table's purpose and structure, for
-          user agents rendering to non-visual media such as
-          speech and Braille.
-        </description>
-      <display-name>Table Summary</display-name>
-      <icon/>
-      <property-name>summary</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Width of the entire table, for visual user agents.
-        </description>
-      <display-name>Table Width</display-name>
-      <icon/>
-      <property-name>width</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Comma separated list of row indices for which a new
-          "tbody" element should be started (and any
-          previously opened one should be ended).
-        </description>
-      <display-name>Body Rows</display-name>
-      <icon/>
-      <property-name>bodyrows</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-
-    <property>
-      <description>
-        The number of columns to render before
-        starting a new row.
-        </description>
-      <display-name>Columns</display-name>
-      <icon/>
-      <property-name>columns</property-name>
-      <property-class>int</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Panel</base-component-type>
-      <renderer-type>javax.faces.Grid</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Causes all child components of this component
-      to be rendered.  This is useful in scenarios
-      where a parent component is expecting a single
-      component to be present, but the application
-      wishes to render more than one.</p>]]></description>
-    <display-name>Panel Group</display-name>
-    <component-type>javax.faces.HtmlPanelGroup</component-type>
-    <component-class>javax.faces.component.html.HtmlPanelGroup</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" property on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The type of layout markup to use when rendering this group.
-          If the value is "block" the renderer must produce an HTML
-          "div" element.  Otherwise HTML "span" element must
-          be produced.
-        </description>
-      <display-name>Layout</display-name>
-      <icon/>
-      <property-name>layout</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Panel</base-component-type>
-      <renderer-type>javax.faces.Group</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents an HTML <code>input</code> element
-      of type <code>checkbox</code>.  The checkbox will
-      be rendered as checked, or not, based on the value
-      of the <code>value</code> property.</p>]]></description>
-    <display-name>Checkbox</display-name>
-    <component-type>javax.faces.HtmlSelectBooleanCheckbox</component-type>
-    <component-class>javax.faces.component.html.HtmlSelectBooleanCheckbox</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            For output components, this is the same as the "value" property.
-            For input components, this is the most recently user-entered
-            value, which will be pushed to the application data model during
-            Update Model Values phase, if a value binding is present for the
-            "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            Flag indicating whether the user has selected this component.
-            This is an alias for the "value" property.
-        </description>
-      <display-name>Selected Flag</display-name>
-      <icon/>
-      <property-name>selected</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.SelectBoolean</base-component-type>
-      <renderer-type>javax.faces.Checkbox</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a multiple-selection component that is rendered
-      as a set of HTML <code>input</code> elements of type
-      <code>checkbox</code>.</p>]]></description>
-    <display-name>Multi-Select Checkbox</display-name>
-    <component-type>javax.faces.HtmlSelectManyCheckbox</component-type>
-    <component-class>javax.faces.component.html.HtmlSelectManyCheckbox</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Array containing the selected values for this component.
-          This is an alias for the "value" property.
-        </description>
-      <display-name>Selected Values</display-name>
-      <icon/>
-      <property-name>selectedValues</property-name>
-      <property-class>java.lang.Object[]</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Width (in pixels) of the border to be drawn
-          around the table containing the options list.
-        </description>
-      <display-name>Table Border</display-name>
-      <icon/>
-      <property-name>border</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to the rendered label
-          on disabled options.
-        </description>
-      <display-name>Disabled Label Class</display-name>
-      <icon/>
-      <property-name>disabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to the rendered label
-          on enabled options.
-        </description>
-      <display-name>Enabled Label Class</display-name>
-      <icon/>
-      <property-name>enabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to the rendered label
-          on selected options.
-        </description>
-      <display-name>Selected Label Class</display-name>
-      <icon/>
-      <property-name>selectedClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to the rendered label
-          on unselected options.
-        </description>
-      <display-name>Unselected Label Class</display-name>
-      <icon/>
-      <property-name>unselectedClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Orientation of the options list to be created.
-          Valid values are "pageDirection" (list is laid
-          out vertically), or "lineDirection" (list is
-          laid out horizontally).  If not specified, the
-          default value is "lineDirection".
-        </description>
-      <display-name>Layout</display-name>
-      <icon/>
-      <property-name>layout</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.SelectMany</base-component-type>
-      <renderer-type>javax.faces.Checkbox</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a multiple-selection component that is rendered
-      as an HTML <code>select</code> element, showing either all
-      available options or the specified number of options.</p>]]></description>
-    <display-name>Multi-Select Listbox</display-name>
-    <component-type>javax.faces.HtmlSelectManyListbox</component-type>
-    <component-class>javax.faces.component.html.HtmlSelectManyListbox</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Array containing the selected values for this component.
-          This is an alias for the "value" property.
-        </description>
-      <display-name>Selected Values</display-name>
-      <icon/>
-      <property-name>selectedValues</property-name>
-      <property-class>java.lang.Object[]</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-      <display-name>Disabled Label Class</display-name>
-      <icon/>
-      <property-name>disabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-      <display-name>Enabled Label Class</display-name>
-      <icon/>
-      <property-name>enabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-        Number of available options to be shown at all times.
-        If not specified, all available options are shown.
-        </description>
-      <display-name>Size</display-name>
-      <icon/>
-      <property-name>size</property-name>
-      <property-class>int</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.SelectMany</base-component-type>
-      <renderer-type>javax.faces.Listbox</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a multiple-selection component that is rendered
-      as an HTML <code>select</code> element, showing a single
-      available option at a time.</p>]]></description>
-    <display-name>Multi-Select Menu</display-name>
-    <component-type>javax.faces.HtmlSelectManyMenu</component-type>
-    <component-class>javax.faces.component.html.HtmlSelectManyMenu</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Array containing the selected values for this component.
-          This is an alias for the "value" property.
-        </description>
-      <display-name>Selected Values</display-name>
-      <icon/>
-      <property-name>selectedValues</property-name>
-      <property-class>java.lang.Object[]</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-      <display-name>Disabled Label Class</display-name>
-      <icon/>
-      <property-name>disabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-      <display-name>Enabled Label Class</display-name>
-      <icon/>
-      <property-name>enabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.SelectMany</base-component-type>
-      <renderer-type>javax.faces.Menu</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a single-selection component that is rendered
-      as an HTML <code>select</code> element, showing either all
-      available options or the specified number of options.</p>]]></description>
-    <display-name>Listbox</display-name>
-    <component-type>javax.faces.HtmlSelectOneListbox</component-type>
-    <component-class>javax.faces.component.html.HtmlSelectOneListbox</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-      <display-name>Disabled Label Class</display-name>
-      <icon/>
-      <property-name>disabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-      <display-name>Enabled Label Class</display-name>
-      <icon/>
-      <property-name>enabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-        Number of available options to be shown at all times.
-        If not specified, all available options are shown.
-        </description>
-      <display-name>Size</display-name>
-      <icon/>
-      <property-name>size</property-name>
-      <property-class>int</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.SelectOne</base-component-type>
-      <renderer-type>javax.faces.Listbox</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a single-selection component that is rendered
-      as an HTML <code>select</code> element, showing a single
-      available option at a time.</p>]]></description>
-    <display-name>Menu</display-name>
-    <component-type>javax.faces.HtmlSelectOneMenu</component-type>
-    <component-class>javax.faces.component.html.HtmlSelectOneMenu</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-      <display-name>Disabled Label Class</display-name>
-      <icon/>
-      <property-name>disabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-      <display-name>Enabled Label Class</display-name>
-      <icon/>
-      <property-name>enabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.SelectOne</base-component-type>
-      <renderer-type>javax.faces.Menu</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description><![CDATA[<p>Represents a single-selection component that is rendered
-      as a set of HTML <code>input</code> elements of type
-      <code>radio</code>.</p>]]></description>
-    <display-name>Radio</display-name>
-    <component-type>javax.faces.HtmlSelectOneRadio</component-type>
-    <component-class>javax.faces.component.html.HtmlSelectOneRadio</component-class>
-
-    <property>
-      <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-      <display-name>Attributes Map</display-name>
-      <icon/>
-      <property-name>attributes</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component Count</display-name>
-      <icon/>
-      <property-name>childCount</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-      <display-name>Child Component List</display-name>
-      <icon/>
-      <property-name>children</property-name>
-      <property-class>java.util.List</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-      <display-name>Facets Map</display-name>
-      <icon/>
-      <property-name>facets</property-name>
-      <property-class>java.util.Map</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-      <display-name>Component Family</display-name>
-      <icon/>
-      <property-name>family</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-      <display-name>Component Identifier</display-name>
-      <icon/>
-      <property-name>id</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-      <display-name>Parent Component</display-name>
-      <icon/>
-      <property-name>parent</property-name>
-      <property-class>javax.faces.component.UIComponent</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-      <display-name>Rendered Flag</display-name>
-      <icon/>
-      <property-name>rendered</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-      <display-name>Renderer Type</display-name>
-      <icon/>
-      <property-name>rendererType</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-      <display-name>Renders Children</display-name>
-      <icon/>
-      <property-name>rendersChildren</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-        <read-only>true</read-only>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Converter instance registered with this component.
-        </description>
-      <display-name>Converter</display-name>
-      <icon/>
-      <property-name>converter</property-name>
-      <property-class>javax.faces.convert.Converter</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-      <display-name>Local Value</display-name>
-      <icon/>
-      <property-name>localValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The current value of this component.
-        </description>
-      <display-name>Value</display-name>
-      <icon/>
-      <property-name>value</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether the "localValue" property
-          of this component has been set.  This property is
-          reset automatically when the "value" propertyis set.
-        </description>
-      <display-name>Local Value Set</display-name>
-      <icon/>
-      <property-name>localValueSet</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that the user is required to provide a submitted
-          value for this input component.
-        </description>
-      <display-name>Required Flag</display-name>
-      <icon/>
-      <property-name>required</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validation message for the "required"
-          facility, if the "required" facility is used.
-        </description>
-      <display-name>Required Message</display-name>
-      <icon/>
-      <property-name>requiredMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the converter message, replacing any message
-          that comes from the converter.
-        </description>
-      <display-name>Converter Message</display-name>
-      <icon/>
-      <property-name>converterMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A ValueExpression enabled attribute that, if present, will be
-          used as the text of the validator message, replacing any
-          message that comes from the validator.
-        </description>
-      <display-name>Validator Message</display-name>
-      <icon/>
-      <property-name>validatorMessage</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          The value submitted for this input component by the user, prior to
-          any required conversion or validation.
-        </description>
-      <display-name>Submitted Value</display-name>
-      <icon/>
-      <property-name>submittedValue</property-name>
-      <property-class>java.lang.Object</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          MethodExpression representing a validator method that will be called
-          during Process Validations to perform correctness checks on the
-          value of this component.  The expression must evaluate to a public
-          method that takes FacesContext, UIComponent, and Object parameters,
-          with a return type of void.
-        </description>
-      <display-name>Validator</display-name>
-      <icon/>
-      <property-name>validator</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-      </property-extension>
-    </property>
-    <property>
-      <description><![CDATA[<p>
-
-          MethodExpression representing a value change listener method
-          that will be notified when a new value has been set for this
-          input component.  The expression must evaluate to a public
-          method that takes a <code>ValueChangeEvent</code> parameter,
-          with a return type of void, <span class="changed_added_2_0">or
-          to a public method that takes no arguments with a return type
-          of void.  In the latter case, the method has no way of easily
-          knowing what the new value is, but this can be useful in cases
-          where a notification is needed that "this value
-          changed".</span>
-
-</p>]]></description>
-      <display-name>Value Change Listener</display-name>
-      <icon/>
-      <property-name>valueChangeListener</property-name>
-      <property-class>javax.el.MethodExpression</property-class>
-      <property-extension>
-        <method-signature>
-                void valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        <!-- PENDING modify tlddoc to handle an OR of method signatures 
-as required by 
-https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=447 
-            <method-signature>
-                void valueChange()
-            </method-signature>
--->
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component's value must be
-          converted and validated immediately (that is, during
-          Apply Request Values phase), rather than waiting
-          until Process Validations phase.
-        </description>
-      <display-name>Immediate Action</display-name>
-      <icon/>
-      <property-name>immediate</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <value-expression-enabled>true</value-expression-enabled>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating whether or not any required conversion or validation
-          on this component value has been performed successfully.
-        </description>
-      <display-name>Valid Flag</display-name>
-      <icon/>
-      <property-name>valid</property-name>
-      <property-class>valid</property-class>
-      <property-extension>
-        <tag-attribute>false</tag-attribute>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-      <display-name>Access Key</display-name>
-      <icon/>
-      <property-name>accesskey</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element loses focus.
-        </description>
-      <display-name>Focus Off Script</display-name>
-      <icon/>
-      <property-name>onblur</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when this element receives focus.
-        </description>
-      <display-name>Focus On Script</display-name>
-      <icon/>
-      <property-name>onfocus</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-      <display-name>Tab Index</display-name>
-      <icon/>
-      <property-name>tabindex</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-      <display-name>Disabled Flag</display-name>
-      <icon/>
-      <property-name>disabled</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-      <display-name>Text Select Script</display-name>
-      <icon/>
-      <property-name>onselect</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-      <display-name>Read Only Flag</display-name>
-      <icon/>
-      <property-name>readonly</property-name>
-      <property-class>boolean</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          A localized user presentable name for this component.
-        </description>
-      <display-name>Label</display-name>
-      <icon/>
-      <property-name>label</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <renderer-attribute-ignore>true</renderer-attribute-ignore>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-      <display-name>Input Change Script</display-name>
-      <icon/>
-      <property-name>onchange</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-        <behavior/>
-        <behavior>valueChange</behavior>
-        <default-behavior>true</default-behavior>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Width (in pixels) of the border to be drawn
-          around the table containing the options list.
-        </description>
-      <display-name>Table Border</display-name>
-      <icon/>
-      <property-name>border</property-name>
-      <property-class>int</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to the rendered label
-          on disabled options.
-        </description>
-      <display-name>Disabled Label Class</display-name>
-      <icon/>
-      <property-name>disabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          CSS style class to apply to the rendered label
-          on enabled options.
-        </description>
-      <display-name>Enabled Label Class</display-name>
-      <icon/>
-      <property-name>enabledClass</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-    <property>
-      <description>
-          Orientation of the options list to be created.
-          Valid values are "pageDirection" (list is laid
-          out vertically), or "lineDirection" (list is
-          laid out horizontally).  If not specified, the
-          default value is "lineDirection".
-        </description>
-      <display-name>Layout</display-name>
-      <icon/>
-      <property-name>layout</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.SelectOne</base-component-type>
-      <renderer-type>javax.faces.Radio</renderer-type>
-    </component-extension>
-  </component>
-  <!--
-         the following components are here merely for AttributeManager
-         generation.
-    -->
-  <component>
-    <description>NONE</description>
-    <display-name>head</display-name>
-    <component-type>javax.faces.OutputHead</component-type>
-    <component-class>javax.faces.component.html.HtmlHead</component-class>
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-    <component-extension>
-      <base-component-type>javax.faces.Output</base-component-type>
-      <renderer-type>javax.faces.Head</renderer-type>
-    </component-extension>
-  </component>
-  <component>
-    <description>NONE</description>
-    <display-name>body</display-name>
-    <component-type>javax.faces.OutputBody</component-type>
-    <component-class>javax.faces.component.html.HtmlBody</component-class>
-
-    <property>
-      <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-      <display-name>Direction</display-name>
-      <icon/>
-      <property-name>dir</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-      <display-name>Language Code</display-name>
-      <icon/>
-      <property-name>lang</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-      <display-name>CSS Styles</display-name>
-      <icon/>
-      <property-name>style</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-      <display-name>CSS Style Classes</display-name>
-      <icon/>
-      <property-name>styleClass</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>false</pass-through>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-      <display-name>Advisory Title</display-name>
-      <icon/>
-      <property-name>title</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-      </property-extension>
-    </property>
-
-
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-      <display-name>Button Click Script</display-name>
-      <icon/>
-      <property-name>onclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-      <display-name>Double Click Script</display-name>
-      <icon/>
-      <property-name>ondblclick</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-      <display-name>Mouse Down Script</display-name>
-      <icon/>
-      <property-name>onmousedown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-      <display-name>Mouse Up Script</display-name>
-      <icon/>
-      <property-name>onmouseup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-      <display-name>Mouse Over Script</display-name>
-      <icon/>
-      <property-name>onmouseover</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-      <display-name>Mouse Move Script</display-name>
-      <icon/>
-      <property-name>onmousemove</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-      <display-name>Mouse Out Script</display-name>
-      <icon/>
-      <property-name>onmouseout</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-      <display-name>Key Press Script</display-name>
-      <icon/>
-      <property-name>onkeypress</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-      <display-name>Key Down Script</display-name>
-      <icon/>
-      <property-name>onkeydown</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-      <display-name>Key Up Script</display-name>
-      <icon/>
-      <property-name>onkeyup</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-
-    <property>
-      <description>
-            </description>
-      <display-name/>
-      <icon/>
-      <property-name>onload</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <property>
-      <description>
-            </description>
-      <display-name/>
-      <icon/>
-      <property-name>onunload</property-name>
-      <property-class>java.lang.String</property-class>
-      <property-extension>
-        <pass-through>true</pass-through>
-        <behavior/>
-      </property-extension>
-    </property>
-    <component-extension>
-      <base-component-type>javax.faces.Output</base-component-type>
-      <renderer-type>javax.faces.Body</renderer-type>
-    </component-extension>
-  </component>
-  <!-- Standard HTML Renderkit -->
-  <render-kit>
-    <description><![CDATA[
-     The standard HTML RenderKit.  Please see the spec for additional
-     details for the standard render-kit.
-
-     <div class="changed_added_2_0">
-     <p>The following new renderers have been
-     added in this release of the specification.  The default
-     implementation of the spec must not expose these renderers to JSP
-     based views.</p>
-
-<dl>
-<dt>javax.faces.Output</dt>
-
-<dd>javax.faces.Body
-</dd>
-
-<dd>javax.faces.Head
-</dd>
-
-<dd>javax.faces.resource.Script
-</dd>
-
-<dd>javax.faces.resource.Stylesheet
-</dd>
-
-<dd>javax.faces.Composite
-</dd>
-
-
-</dl>
-
-     </div>
-
-     <p><a name="general_decoding">General</a> notes on decoding</p>
-
-     <ul>
-
-     <p>Only Renderers for components which cause data to sent to the
-     server on a page submit need to implement decode behavior.  In
-     practical terms, this means Renderers for components that implement
-     from <code>javax.faces.component.EditableValueHolder</code> or
-     <code>javax.faces.component.ActionSource</code> or Renderers for
-     <code>javax.faces.component.UIForm</code> components.  Renderers
-     for components that do not send data to the server on page submit
-     may choose to accept the no-op decode behavior of the
-     <code>javax.faces.render.Renderer</code> abstract class.  In the
-     Renderer descriptions that follow, the omission of a Decode
-     Behavior section indicates that this Renderer does no decoding.</p>
-
-     <p>If a Renderer chooses to implement decode behavior, it must
-     consult the "disabled" and "readonly" attributes of the component
-     to be rendered, if the value of either attribute is equal to,
-     ignoring case, the string "true" (without the quotes) the decode
-     method must take no action and return immediately.</p>
-
-     <div class="changed_added_2_0">
-     <p>If the component associated with the Renderer implements the
-     <code>javax.faces.component.behavior.ClientBehaviorHolder</code> interface,
-     process <code>javax.faces.component.behavior.ClientBehavior</code>s as follows:
-      <ul>
-      <li>Determine if there are <code>javax.faces.component.behavior.ClientBehavior</code>s
-      associated with this component by calling the implementation of
-      <code>javax.faces.component.behavior.ClientBehaviorHolder.getClientBehaviors</code>.</li>
-      <li>If there are <code>client behaviors</code>, determine the
-      client behavior event name from the request parameter:
-      <code>javax.faces.behavior.event</code>.</li>
-      <li>If that request parameter exists, get the <code>List</code> of
-      <code>javax.faces.component.behavior.ClientBehavior</code>s for the
-      behavior event name from the <code>Map</code> returned from
-      <code>javax.faces.component.behavior.ClientBehaviorHolder.getClientBehaviors</code>.</li>
-      <li>If there are <code>client behaviors</code> for the <code>behavior event name</code>,
-      determine the behavior source name from the request parameter:
-      <code>javax.faces.source</code>.</li>
-      <li>If the request parameter exists, and its value is the same as this
-      component's <code>clientId</code>, iterate over the <code>List</code> of
-      <code>javax.faces.component.behavior.ClientBehavior</code>s and call the
-      <code>decode()</code> method for each one.</li>
-      </ul>
-      Behavior decoding is applicable to components that are "readonly", but it is
-      not applicable to components that are "disabled".</p>
-      </div>
-
-     <p>
-
-     </ul>
-
-     <p><a name="general_encoding">General</a> notes on encoding</p>
-
-     <ul>
-
-     <p>If the value of the component's "rendered" property is false,
-     the component, and its children must not be rendered.</p>
-
-     <p>General notes regarding the <code>id</code> attribute</p>
-
-     <ul>
-
-     <p>All components, and therefore all tags for those components
-     support the <code>id</code> attribute.  This attribute is optional.
-     If not present its value is autogenerated by the implementation and
-     used for internal purposes only.  If present, an <code>id</code>
-     attribute must not start with the <code>String</code> listed as the
-     value of the constant <code>UIViewRoot.UNIQUE_ID_PREFIX</code>, and
-     it must be unique within the scope of the nearest component that is
-     a <code>NamingContainer</code>.  </p>
-
-     <p>All renderers must take the following action regarding the
-     <code>id</code> attribute: If the value returned from
-     <code>component.getId()</code> is non-<code>null</code> and does
-     not start with <code>UIViewRoot.UNIQUE_ID_PREFIX</code>, call
-     <code>component.getClientId()</code> and render the result as the
-     value of the <code>id</code> attribute in the markup for the
-     component.  See the javadoc for
-     <code>component.getClientId()</code> for details, particularly note
-     that the Renderer has a chance to modify the client id before it is
-     rendered. If the component doesn't generate any markup elements,
-     include the <code>id</code> attribte on a "span" element that
-     encloses the content for the component.</p>
-
-    <p>In addition to any action already specified in the renderers, all
-    renderers for <code>UIInput</code> components must take the
-    following action regarding the <code>id</code> attribute: Call
-    <code>component.getClientId()</code> and render the result as the
-    value of the <code>name</code> attribute.  This may cause some
-    renderers to have "id" and "name" attributes that have exactly the
-    same value.</p>
-
-    </ul>
-
-     <p>General notes regarding the rendering of JavaScript in the
-     standard components.</p>
-
-     <ul>
-
-       <p>The intent of the standard renderkit is to specify the minimal
-       Renderers a JSF implementation must provide.  As such, it is the
-       baseline for building JSF applications that are maximally
-       portable across JSF implementations and user agents.  Therefore,
-       the use of JavaScript must be minimized as not all browsers
-       support JavaScript, nor do all users enable JavaScript support in
-       their user agents.</p>
-
-       <p>Compliant implementations must only generate JavaScript in the
-       <a href="javax.faces.Commandjavax.faces.Link.html">
-       <code>javax.faces.Link</code></a> and <a
-       href="javax.faces.Commandjavax.faces.Button.html"><code>javax.faces.Button</code></a>
-       Renderers for the <code>javax.faces.Command</code></a> component.
-       The generation of JavaScript in any other Renderer in the
-       HTML_BASIC renderkit is not permitted.  However, any JavaScript
-       code provided by the user as the value of a passthru attribute,
-       such as "onmouseover", is excluded from this restriction.</p>
-
-     </ul>
-
-     <div class="changed_added_2_0">
-     <p><a name="general_behavior_encoding">General</a> notes regarding the rendering of component <code>Client Behaviors</code>.</p>
-
-     <ul>
-
-       <p>Components that implement the <code>javax.faces.component.behavior.ClientBehaviorHolder</code>
-       interface are eligable to have <code>ClientBehavior</code> instances attached to them. The standard
-       renderers are responsible for inserting the scripts produced by client behaviors into the component's
-       rendered content.  Components may obtain script from multiple sources.  Event handler scripts may be specified 
-       by page authors, scripts may be produced by client behaviors and renderers may produce ther own scripts.
-       When multiple scripts are present, the scripts must be chained together in this order:
-       <ul>
-       <li>User specified event handler scripts</li>
-       <li>client behavior scripts</li>
-       <li>renderer specific scripts</li>
-       </ul>
-       If any of the scripts in the chain returns <code>false</code>, subsequent script must not be executed.
-       The specification provides a utility function <code>jsf.util.chain</code> to handle this capability.  If there
-       are <code>UIParameter</code> children the parameter names and values must be passed into the client behavior
-       getScript method via the <code>ClientBehaviorContext</code>.</p> 
-         
-     </ul>
-     </div>
-
-
-    </ul>]]></description>
-    <renderer>
-      <description><![CDATA[<p><span
-            class="changed_modified_2_0">Renders an HTML "input"
-            element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If the value in the
-      <code>Map</code> for the value of the "clientId" property of the
-      component is <code>null</code>, create a String by concatenating
-      the value of the "clientId" property of the component with the
-      String ".x" (without the quotes).  Create another String in the
-      same manner, but concatenate ".y" (without the quotes).  If
-      <code>null</code> is the value in the <code>Map</code> for both
-      Strings, return from <code>decode()</code>.  If the value in the
-      <code>Map</code> for the value of the "clientId" property of the
-      component is not <code>null</code>, get the value of the "type"
-      attribute, and convert it to lower case.  If the result is equal
-      to the String "reset" (without the quotes), return from
-      <code>decode()</code>.  Otherwise, create a
-      <code>javax.faces.event.ActionEvent</code> around the component,
-      and pass it to the <code>queueEvent()</code> method of the
-      component, which must be an instance of
-      <code>UICommand</code>.</p>
-
-      </ul>
-
-
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render the clientId of the component as the value of the "name"
-      attribute.  Render the current value of the component as the value
-      of the "value" attribute. If "image" attribute is specified render
-      it as the value of the "src" attribute after passing it to the
-      <code>getResourceURL()</code> method of the
-      <code>ViewHandler</code> for this application, and passing the
-      result through the <code>encodeResourceURL()</code> method of the
-      <code>ExternalContext</code>.  <span
-      class="changed_added_2_0">Note that calling
-      <code>getResourceURL()</code> will prefix the context-root of the
-      current application if the value of the "src" attribute starts
-      with "/".</span> When handling the "image" attribute, the value
-      must not be escaped.  For example, <code>&</code> must not be
-      turned into <code>&amp;</code>.  If the "styleClass" attribute
-      is specified, render its value as the value of the "class"
-      attribute.  If the user has specified an "onclick" attribute,
-      append that JavaScript to any existing JavaScript <span
-      class="changed_modified_2_0_rev_a">already being output by the
-      implementation before rendering.</span></p>
-
-      <p class="changed_added_2_0">If the component being rendered by
-      this renderer has any <code>UIParameter</code> children, each one
-      of them must be rendered using the renderer for component-family:
-      "javax.faces.Input" and renderer-type: "javax.faces.Hidden".  For
-      discussion, this is called the hiddenRenderer.  A component with
-      component-type "javax.faces.Input" must be created for local use
-      in rendering each <code>UIParameter</code> child.  The "id"
-      property of the temporary component must be set to the "name" of
-      the <code>UIParameter</code>.  The "value" property of the
-      temporary component must be set to the "value" of the
-      <code>UIParameter</code>.  For each <code>UIParameter</code>
-      child, the hiddenRenderer must have its
-      <code>encodeBegin()</code>, <code>encodeChildren()</code>, and
-      <code>encodeEnd()</code> methods called, in order, passing the
-      temporary component as the second argument.</p>
-
-      </ul>
-            ]]></description>
-      <component-family>javax.faces.Command</component-family>
-      <renderer-type>javax.faces.Button</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.ButtonRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        Alternate textual description of the
-        element rendered by this component.
-      </description>
-        <display-name>Alternate Text</display-name>
-        <icon/>
-        <attribute-name>alt</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<p>
-        Absolute or relative URL of the
-        image to be displayed for this
-        button.  If specified, this
-        "input" element will be of type
-        "image".  Otherwise, it will be
-        of the type specified by the
-        "type" property with a label
-        specified by the "value"
-        property.  <span
-        class="changed_added_2_0">Note
-        that if the value of this
-        attribute starts with "/", the
-        rendered value for this
-        attribute will be prefixed with
-        the context-root for this
-        application.</span>
-      </p>]]></description>
-        <display-name>Image URL</display-name>
-        <icon/>
-        <attribute-name>image</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>action</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-         Type of button to create.  Valid values are "submit", "button",
-         and "reset".  If not specified, or not a valid value, the default
-         value is "submit".
-      </description>
-        <display-name>Button Type</display-name>
-        <icon/>
-        <attribute-name>type</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <default-value>"submit"</default-value>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML "a" anchor
-            element that acts like a form submit button when
-            clicked.</p>
-
-      <p>General Behaviour</p>
-
-      <p>Both the encode and decode behavior require the ability to get
-      the id/name for a hidden field, <span
-      class="changed_added_2_0">which may be rendered in markup or which
-      may be programmatically added via client DOM manipulation</span>,
-      whose value is set by the JavaScript form submit.  This name must
-      be constructed as follows:</p>
-
-      <ul>
-
-      <li><p>Get the clientId for the form of which this component is a
-      child.</p></li>
-
-      <li><p>Append
-      <code>NamingContainer.SEPARATOR_CHAR</code>.</p></li>
-
-      <li><p>Append a constant string that is the same for all command
-      link components in the tree.</p></li>
-
-      </ul>
-
-      <p>In the following text, this String is called
-      hiddenFieldName.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the "clientId" property of the component.  Obtain the
-      <code>Map</code> from the "requestParameterMap" property of the
-      <code>ExternalContext</code>.  Derive hiddenFieldName as above.
-      Get the entry in the <code>Map</code> under the key that is the
-      hiddenFieldName.  If the there is no entry, or the entry is the
-      empty String, or the entry is not equal to the value of the
-      "clientId" property, return immediately.  If there is an entry,
-      and its value is equal to the value of the "clientId" property,
-      create a new <code>javax.faces.event.ActionEvent</code> instance
-      around the component and call <code>queueActionEvent()</code> on
-      the component, passing the event.</p>
-
-      </ul>
-
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>If the value of the <code>disabled</code> attribute is
-      <code>true</code>, render a span element.  Render all the passthru
-      attributes and the <code>target</code> attribute as pass-through
-      attributes on the span, even though the <code>target</code>
-      attribute will have no effect on a span.  Render the current value
-      of the component as the content of the span.  Return.</p>
-
-      <p>If the <code>disabled</code> attribute is not present, or its
-      value is <code>false</code>, render an HTML <code>a</code>
-      element.  Render "#" as the value of the "href" attribute. Render
-      the current value of the component as the link text if it is
-      specified. Render JavaScript that is functionally equivalent to
-      the following as the value of the "onclick" attribute:</p>
-
-      <p><code>document.forms['CLIENT_ID']['hiddenFieldName'].value='CLIENT_ID';
-      document.forms['CLIENT_ID']['PARAM1_NAME'].value='PARAM1_VALUE';
-      document.forms['CLIENT_ID']['PARAM2_NAME'].value='PARAM2_VALUE';
-      return false;</code></p>
-
-      <p>document.forms['CLIENT_ID'].submit()" where hiddenFieldName is
-      as described above, CLIENT_ID is the clientId of the UICommand
-      component, PARAM*_NAME and PARAM*_VALUE are the names and values,
-      respectively, of any nested UIParameter children.  The name and
-      the value must be URLEncoded.  <span
-      class="changed_modified_2_0_rev_a">Note that the required url
-      encoding is handled by
-      <code>ResponseWrter.writeAttribute()</code>.</span> If an
-      "onclick" attribute was specified by the user, render this
-      JavaScript in a function, and render the user's JavaScript in a
-      function.  Render both functions in a choice function as
-      follows:</p>
-
-      <p><code>var a=function(){#USER_FUNCTION#};
-      var b=function(){#JSF_FUNCTION#};
-      return (a()==false) ? false : b();</code></p>
-      
-      <p>where #USER_FUNCTION# is the user's JavaScript and
-      #JSF_FUNCTION# is the JavaScript rendered by JSF.  The choice
-      function should operate such that if the user's JavaScript returns
-      true, then the rendered JavaScript will also execute.</p>
- 
-      <p>If the "styleClass" attribute is specified, render its value as
-      the value of the "class" attribute.  Render any non-UIParameter
-      output children as normal inside of the "a" element.  These will
-      appear as the link text.  Allow the form renderer to output a
-      single "input" element (for the entire page, regardless of how
-      many command link components are in the page) of "type" "hidden"
-      whose "name" is the value of hiddenFieldName, and which must not
-      have a "value" attribute.  Multiple occurrences of command link
-      components in the tree should not cause multiple hiddenFieldName
-      hidden fields.  Allow the form renderer to output an "input"
-      element of "type" "hidden" for each of the nested UIParameter
-      children, taking the name property (but not the value) from each
-      one in turn.  If the "disabled" attribute is specified, do not
-      render the HTML "a" anchor element or its "href" attribute.
-      Instead, render a "span" element.  If the "styleClass" attribute
-      is specified, render its value as the value of the "class"
-      attribute on the "span".  Render any pass-through attributes on
-      the "span".  The content of the span element comes from the value
-      of the component or its children as specified above.</p>
-
-      <p>If the user specified a <code>target</code> attribute, its
-      value must be set using javascript since the <code>onclick</code>
-      handler will prevent the target attribute from being generated.
-      This must be accomplished using JavaScript that is equivalent to
-      the following.</p>
-
-      <p><code>document.forms['CLIENT_ID'].target='TARGET';</code></p>
-
-      <p>Where TARGET is the value of the target attribute on the JSP
-      tag.</p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.Command</component-family>
-      <renderer-type>javax.faces.Link</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.CommandLinkRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          The character encoding of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Character Set</display-name>
-        <icon/>
-        <attribute-name>charset</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The position and shape of the hot spot on the screen
-          (for use in client-side image maps).
-        </description>
-        <display-name>Coordinates</display-name>
-        <icon/>
-        <attribute-name>coords</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The language code of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Language</display-name>
-        <icon/>
-        <attribute-name>hreflang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The relationship from the current document
-          to the anchor specified by this hyperlink.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Relationship</display-name>
-        <icon/>
-        <attribute-name>rel</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A reverse link from the anchor specified
-          by this hyperlink to the current document.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Reverse Link</display-name>
-        <icon/>
-        <attribute-name>rev</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The shape of the hot spot on the screen
-          (for use in client-side image maps).  Valid
-          values are:  default (entire region); rect
-          (rectangular region); circle (circular region);
-          and poly (polygonal region).
-        </description>
-        <display-name>Shape</display-name>
-        <icon/>
-        <attribute-name>shape</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Name of a frame where the resource
-          retrieved via this hyperlink is to
-          be displayed.
-        </description>
-        <display-name>Target Frame</display-name>
-        <icon/>
-        <attribute-name>target</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The content type of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Content Type</display-name>
-        <icon/>
-        <attribute-name>type</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this element must never
-          receive focus or be included in a subsequent
-          submit.
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>action</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-        <body-tag>true</body-tag>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[
-      <p>Renders an HTML "table" element compliant with the HTML 401
-      specification.  Render the "caption" facet, if present, inside a
-      "caption" element immediately below the "table" element.  If the
-      "captionClass" attribute is specified, render its value as the
-      value of the "class" attribute on the "caption" element.  If the
-      "captionStyle" attribute is specified, render its value as the
-      value of the "style" attribute on the "caption" element.</p>
-      <p>Please consult the javadoc for <code>UIData</code> to
-      supplement this specification.  If the "styleClass" attribute is
-      specified, render its value as the value of the "class" attribute
-      on the "table" element.  Any pass-through attributes are also
-      rendered on the "table" element.  </p>
-
-     <p>Column Groups</p>
-
-     <ul>
-
-       <p>If the <code>UIData</code> component has a "colgroups" facet,
-       render its contents.  Consistent with the rules of facets in
-       general, this facet must have only one child.  In general, this
-       will be a <code>panel group</code> component that will contain
-       <code>colgroup</code> and <code>col</code> elements per the HTML
-       Table specification.  Use of column grouping can improve
-       accessibility.  This facet must be rendered before the table
-       header and footer.</p>
-
-     </ul>
-
-     <p>Rendering the header</p>
-
-     <ul>
-
-      <p>If the <code>UIData</code> component has a "header" facet, or
-      any of the child <code>UIColumn</code> components has a "header"
-      facet, render a "thead" element.  If the <code>UIData</code>
-      component has a "header" facet, encode its contents inside of "tr"
-      and "th" elements, respectively.  Output the value of the
-      "headerClass" attribute of the <code>UIData</code> component, if
-      present, as the value of the "class" attribute on the "th".
-      Output the number of child <code>UIColumn</code> components of the
-      <code>UIData</code> component as the value of the "colspan"
-      attribute on the "th".  Output "colgroup" as the value of the
-      "scope" attribute on the "th" element. </p>
-
-      <p>If any of the child <code>UIColumn</code> components has a
-      "header" facet render a "tr" element.  For each
-      <code>UIColumn</code> that actually has a "header" facet, render
-      it inside of a "th" element.  Columns that don't have a "header"
-      facet cause an empty "th" element to be rendered.  Output the 
-      value of the "headerClass" attribute of the <code>UIColumn</code>
-      component, if present, as the value of the "class" attribute on
-      the "th".  If the "headerClass" attribute of the <code>UIColumn</code>
-      component is not present, output the value of the "headerClass" 
-      attribute of the <code>UIData</code> component, if present, as
-      the value of the "class" attribute on the "th".  Output "col" as
-      the value of the "scope" attribute on the "th" element.
-      </p>
-
-      <p>Close out the "thead" element.</p>
-
-      </ul>
-
-      <p>Rendering the footer</p>
-
-      <ul>
-
-      <div class="changed_modified_2_0_rev_a">
-      <p>If the <code>UIData</code> component has a "footer" facet, or
-      any of the child <code>UIColumn</code> components has a "footer"
-      facet, render a "tfoot" element.  If the <code>UIData</code>
-      component has "footer" facets, encode the contents inside of a "tr"
-      element. </p>
-
-      <p>If any of the child <code>UIColumn</code> components has a
-      "footer" facet render a "td" element.  For each 
-      <code>UIColumn</code> that actually has a "footer" facet, render
-      it inside of a "td" element.  Columns that don't have a "footer"
-      facet cause an empty "td" element to be rendered.  Output the
-      value of the "footerClass" attribute of the <code>UIColumn</code>
-      component, if present, as the value of the "class" attribute on
-      the "td".  If the "footerClass" attribute of the <code>UIColumn</code>
-      component is not present, output the value of the "footerClass"
-      attribute of the <code>UIData</code> component, if present, as
-      the value of the "class" attribute on the "td".</p>
-
-      <p>If the <code>UIData</code> component has a "footer" facet,
-      encode its contents inside of "tr" and "td" elements, respectively.
-      Output the value of the "footerClass" attribute of the 
-      <code>UIData</code> component, if present, as the value of the 
-      "class" attribute on the "td".  Output the number of child 
-      <code>UIColumn</code> components of the <code>UIData</code> 
-      component as the value of the "colspan" attribute on the "td". </p>
-
-      <p>Close out the "tfoot" element.</p>
-      </div>
-
-      </ul>
-
-      <p>Rendering the table body</p>
-
-      <ul>
-
-      <p>Look at the value of the "bodyrows" attribute.  If present,
-      this must be a comma separated list of integers.  Each entry in
-      this list is the row index of the row before which a "tbody"
-      element should be rendered.</p>
-
-      <p>If there was no "bodyrows" attribute, or it was empty, render a
-      "tbody" element.  Keep track of the result of the "rows" property
-      on the <code>UIData</code> component.  Keep track of the number of
-      rows we have rendered so far.  Iterate through the rows.  Set the
-      "rowIndex" property of the <code>UIData</code> component to be
-      correct as we iterate through the rows.  Stop rendering children
-      and close out the "tbody" element if the "rowAvailable" property
-      of the <code>UIData</code> returned false.  If the current row
-      index is contained in the "bodyrows" attribute, check if a "tbody"
-      start element was rendered that needs to be closed, and if so,
-      close the "tbody" element.  Then render a "tbody" element start.
-      Otherwise, do not render a "tbody" element.</p>
-
-      <p>Output a "tr" element.  Output the value of the "rowClasses"
-      per the attribute description below.  For each
-      <code>UIColumn</code> child, if the column component has a
-      "rowHeader" attribute with a value of "true", output a "th"
-      element with a "scope" attribute with the value of "row".
-      Otherwise, if the column component has no "rowHeader" attribute,
-      or its value is false, output a "td" element.  In either case
-      attach the value of the "columnClasses" attribute of the
-      <code>UIData</code> component per the attribute description below.
-      Recursively encode each child of each <code>UIColumn</code> child.
-      Close out the "td" or "th" element.  When done with the row, close
-      out the "tr" element.  When done with all the rows, close out the
-      "tbody" element.</p>
-
-      </ul>
-
-     <p>When done rendering all the rows, set the "rowIndex" property of
-     the <code>UIData</code> to -1, and close out the "table"
-     element.</p>
-            ]]></description>
-      <component-family>javax.faces.Data</component-family>
-      <renderer-type>javax.faces.Table</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.TableRenderer
-    </renderer-class>
-      <facet>
-        <facet-name>caption</facet-name>
-      </facet>
-      <facet>
-        <facet-name>header</facet-name>
-      </facet>
-      <facet>
-        <facet-name>footer</facet-name>
-      </facet>
-      <facet>
-        <facet-name>colgroups</facet-name>
-      </facet>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Name or code of the background color for this table.
-        </description>
-        <display-name>Background Color</display-name>
-        <icon/>
-        <attribute-name>bgcolor</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Width (in pixels) of the border to be drawn
-          around this table.
-        </description>
-        <display-name>Table Border</display-name>
-        <icon/>
-        <attribute-name>border</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Definition of how much space the user agent should
-          leave between the border of each cell and its contents.
-        </description>
-        <display-name>Cell Padding</display-name>
-        <icon/>
-        <attribute-name>cellpadding</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Definition of how much space the user agent should
-          leave between the left side of the table and the
-          leftmost column, the top of the table and the top of
-          the top side of the topmost row, and so on for the
-          right and bottom of the table.  It also specifies
-          the amount of space to leave between cells.
-        </description>
-        <display-name>Cell Spacing</display-name>
-        <icon/>
-        <attribute-name>cellspacing</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the columns of this table.  A space separated list of
-          classes may also be specified for any individual column.  If
-          the number of elements in this list is less than the number of
-          actual column children of the UIData, no "class"
-          attribute is output for each column greater than the number of
-          elements in the list.  If the number of elements in the list
-          is greater than the number of actual column children of the
-          UIData, the elements at the posisiton in the list
-          after the last column are ignored.
-        </description>
-        <display-name>Column CSS Classes</display-name>
-        <icon/>
-        <attribute-name>columnClasses</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any footer generated for this table.
-        </description>
-        <display-name>Footer CSS Classes</display-name>
-        <icon/>
-        <attribute-name>footerClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Code specifying which sides of the frame surrounding
-          this table will be visible.  Valid values are:
-          none (no sides, default value); above (top side only);
-          below (bottom side only); hsides (top and bottom sides
-          only); vsides (right and left sides only); lhs (left
-          hand side only); rhs (right hand side only); box
-          (all four sides); and border (all four sides).
-        </description>
-        <display-name>Table Frame</display-name>
-        <icon/>
-        <attribute-name>frame</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any caption generated for this table.
-        </description>
-        <display-name>Caption CSS Classes</display-name>
-        <icon/>
-        <attribute-name>captionClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this caption is rendered.
-        </description>
-        <display-name>Caption CSS Styles</display-name>
-        <icon/>
-        <attribute-name>captionStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any header generated for this table.
-        </description>
-        <display-name>Header CSS Classes</display-name>
-        <icon/>
-        <attribute-name>headerClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the rows of this table.  A space separated list of classes
-          may also be specified for any individual row.  Thes styles are
-          applied, in turn, to each row in the table.  For example, if
-          the list has two elements, the first style class in the list
-          is applied to the first row, the second to the second row, the
-          first to the third row, the second to the fourth row, etc.  In
-          other words, we keep iterating through the list until we reach
-          the end, and then we start at the beginning again.
-        </description>
-        <display-name>Row CSS Classes</display-name>
-        <icon/>
-        <attribute-name>rowClasses</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Code specifying which rules will appear between cells
-          within this table.  Valid values are:  none (no rules,
-          default value); groups (between row groups); rows
-          (between rows only); cols (between columns only); and
-          all (between all rows and columns).
-        </description>
-        <display-name>Table Rules</display-name>
-        <icon/>
-        <attribute-name>rules</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Summary of this table's purpose and structure, for
-          user agents rendering to non-visual media such as
-          speech and Braille.
-        </description>
-        <display-name>Table Summary</display-name>
-        <icon/>
-        <attribute-name>summary</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Width of the entire table, for visual user agents.
-        </description>
-        <display-name>Table Width</display-name>
-        <icon/>
-        <attribute-name>width</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Comma separated list of row indices for which a new
-          "tbody" element should be started (and any
-          previously opened one should be ended).
-        </description>
-        <display-name>Body Rows</display-name>
-        <icon/>
-        <attribute-name>bodyrows</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<span class="changed_modified_2_0">
-            Renders</span> an HTML "form" element.
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If the map contains
-      an entry for the "clientId" of this <code>UIForm</code> component,
-      call <code>setSubmitted(true)</code> on the form, otherwise call
-      <code>setSubmitted(false)</code> on the form.</p>
-
-      </ul>
-
-
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>The value of the "method" attribute must be "post".  The value
-      of the "action" attribute must be the result of passing the view
-      identifier of the current view to the <code>getActionURL()</code>
-      method of the <code>ViewHandler</code> for this application, then
-      passing that String to the <code>encodeActionURL()</code> method
-      on the <code>ExternalContext</code>.  The value of the acceptcharset
-      attribute must be rendered as the value of "accept-charset".
-      If the "styleClass" attribute is specified, render its value as the 
-      value of the "class" attribute.  Render a "name"
-      attribute with a value the same as the "id" attribute as described
-      in "<a href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General Notes on
-      Encoding</a>" regarding the "id" attribute for UIInput
-      components.  <p class="changed_added_2_0">Obtain the <code>UIViewRoot view identifier</code> and
-      use it to obtain an <code>action URL</code> by calling <code>ViewHandler.getActionURL</code>.
-      Use the <code>action URL</code> to obtain an <code>encoded action URL</code> by calling 
-      <code>ExternalContext.encodeActionURL</code>.  Obtain an 
-      <code>encoded partial action URL</code> by calling
-      <code>ExternalContext.encodePartialActionURL</code> using <code>action URL</code> as the argument.
-      Compare the result from <code>ExternalContext.encodePartialActionURL</code> with the
-      value from <code>ExternalContext.encodeActionURL()</code>.  If they are different, 
-      render a hidden field with the name <code>javax.faces.encodedURL</code> and the value
-      of this hidden field as the value from <code>ExternalContext.encodePartialActionURL</code>.</p>
-      Call <code>ViewHandler.writeState()</code>
-      before the the close of the "form" element.  Render all the
-      necessary hidden fields for all commandLink instances in the page
-      just before the close of the "form" element.  
-      <div class="changed_modified_2_0">
-      Just before rendering the closing <code></form></code> element tag, render 
-      any resources that have been targeted for this form:
-      <ul>
-      <li>Obtain a <code>UIViewRoot</code> instance.</li>
-      <li>Obtain a <code>List</code> of component resources targeted for
-      this form with a call to <code>UIViewRoot.getComponentResources()</code>
-      with the <code>String "form"</code> as the argument.</li>
-      <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances         
-      and call <code>encodeAll</code> on each <code>UIComponent</code> instance.
-      </ul>
-      </div>
-      </p>
-      </ul>
-      </div>]]></description>
-      <component-family>javax.faces.Form</component-family>
-      <renderer-type>javax.faces.Form</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.FormRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        List of content types that a server processing this form
-        will handle correctly
-        </description>
-        <display-name>Content Type</display-name>
-        <icon/>
-        <attribute-name>accept</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        List of character encodings for input data
-        that are accepted by the server processing
-        this form.
-        </description>
-        <display-name>Character Set</display-name>
-        <icon/>
-        <attribute-name>acceptcharset</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-        Content type used to submit the form to the server.  If not
-        specified, the default value is
-        "application/x-www-form-urlencoded".
-        </description>
-        <display-name>Encoding Type</display-name>
-        <icon/>
-        <attribute-name>enctype</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <default-value>"application/x-www-form-urlencoded"</default-value>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        Javascript code executed when this form is reset.
-        </description>
-        <display-name>Form Reset Script</display-name>
-        <icon/>
-        <attribute-name>onreset</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        Javascript code executed when this form is submitted.
-        </description>
-        <display-name>Form Submit Script</display-name>
-        <icon/>
-        <attribute-name>onsubmit</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        Name of a frame where the response
-        retrieved after this form submit is to
-        be displayed.
-        </description>
-        <display-name>Target Frame</display-name>
-        <icon/>
-        <attribute-name>target</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-        <tag-name>form</tag-name>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p><span
-            class="changed_modified_2_0">Renders</span> an HTML "img"
-            element.  Render the clientId as the value of the "id"
-            attribute.</p>
-
-<div class="changed_modified_2_0">
-
-<p>Handling the Value</p>
-
-  <ul>
-
-    <p>If the "name" attribute is present, execute algorithm <a
-    href="javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource">Common Algorithm for Obtaining A Resource to Render</a> to obtain a <code>Resource</code> instance.  Call
-    <code>Resource.getRequestPath()</code> and output the result as the
-    value of the "src" attribute on the rendered markup.</p>
-
-    <p>Otherwise, if the "url" attribute is present, treat its value as
-    if it was the value of the "value" attribute.  Otherwise, if the
-    "value" attribute is present, render the value of the component as
-    the value of the "src" attribute, after passing it to the
-    <code>getResourceURL()</code> method of the <code>ViewHandler</code>
-    for this application, and passing the result through the
-    <code>encodeResourceURL()</code> method of the
-    <code>ExternalContext</code>.</p>
-
-    <p>When handling the "src" attribute,
-    the value must not be escaped.  For example, <code>&</code> must not
-    be turned into <code>&amp;</code>.  If the "styleClass"
-    attribute is specified, render its value as the value of the "class"
-    attribute.</p>
-
-  </ul>
-
-</div>]]></description>
-      <component-family>javax.faces.Graphic</component-family>
-      <renderer-type>javax.faces.Image</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.ImageRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        Alternate textual description of the
-        element rendered by this component.
-        </description>
-        <display-name>Alternate Text</display-name>
-        <icon/>
-        <attribute-name>alt</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        Override for the height of this image.
-        </description>
-        <display-name>Image Height</display-name>
-        <icon/>
-        <attribute-name>height</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        Flag indicating that this image is to be used as a server side
-        image map.  Such an image must be enclosed within a hyperlink
-        ("a").  A value of false causes no attribute to be rendered, 
-        while a value of true causes the attribute to be rendered as
-        ismap="ismap".
-        </description>
-        <display-name>Image Map Flag</display-name>
-        <icon/>
-        <attribute-name>ismap</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        URI to a long description of the image
-        represented by this element.
-        </description>
-        <display-name>Long Description</display-name>
-        <icon/>
-        <attribute-name>longdesc</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        The name of a client side image map (an HTML "map"
-        element) for which this element provides the image.
-        </description>
-        <display-name>Use Image Map</display-name>
-        <icon/>
-        <attribute-name>usemap</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        Override for the width of this image.
-        </description>
-        <display-name>Image Width</display-name>
-        <icon/>
-        <attribute-name>width</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description><![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]></description>
-        <display-name>Resource Name</display-name>
-        <icon/>
-        <attribute-name>name</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-          <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]></description>
-        <display-name>Library Name</display-name>
-        <icon/>
-        <attribute-name>library</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-          <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Renders an HTML "input" element of type
-      "hidden".</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>See the decode description for the <a
-      href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-      Text</a> renderer.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render the clientId of the component as the value of the
-      "name" attribute.  Render the current value of the component as
-      the value of the "value" attribute.</p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.Input</component-family>
-      <renderer-type>javax.faces.Hidden</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.HiddenRenderer
-    </renderer-class>
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Renders an HTML "input" element of "type" "password".</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>See the decode description for the <a
-      href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-      Text</a> renderer.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>
-      Render the clientId of the component as the value of the "name"
-      attribute.  Render the current value of the component as the value
-      of the "value" attribute, if and only if the "redisplay" component
-      attribute is the string "true".  If the "styleClass" attribute is
-      specified, render its value as the value of the "class"
-      attribute.</p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.Input</component-family>
-      <renderer-type>javax.faces.Secret</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.SecretRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Alternate textual description of the
-          element rendered by this component.
-        </description>
-        <display-name>Alternate Text</display-name>
-        <icon/>
-        <attribute-name>alt</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        If the value of this attribute is "off", render "off" as the value
-        of the attribute. This indicates that the  browser should
-        disable its autocomplete feature for this component.  This is
-        useful for components that perform autocompletion and do not
-        want the browser interfering.  If this attribute is not set or the value 
-        is "on", render nothing.
-        </description>
-        <display-name>Enable or disable browser autocompletion.</display-name>
-        <icon/>
-        <attribute-name>autocomplete</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          The maximum number of characters that may
-          be entered in this field.
-        </description>
-        <display-name>Maximum Length</display-name>
-        <icon/>
-        <attribute-name>maxlength</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The number of characters used to determine
-          the width of this field.
-        </description>
-        <display-name>Field Width</display-name>
-        <icon/>
-        <attribute-name>size</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        Flag indicating that any existing value
-        in this field should be rendered when the
-        form is created.  Because this is a potential
-        security risk, password values are not
-        displayed by default.
-        </description>
-        <display-name>Redisplay Flag</display-name>
-        <icon/>
-        <attribute-name>redisplay</attribute-name>
-        <attribute-class>boolean</attribute-class>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Renders an HTML "input"
-      element of "type" "text".</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If the
-      <code>Map</code> contains an entry for the "clientId" of the
-      component, pass the value of the entry to the
-      <code>setSubmittedValue()</code> method of the component, which
-      must be an instance of <code>EditableValueHolder</code>.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>  Render the clientId of the component as
-      the value of the "name" attribute.  Render the current value of
-      the component as the value of the "value" attribute.  If the
-      "styleClass" attribute is specified, render its value as the value
-      of the "class" attribute.
-      </p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.Input</component-family>
-      <renderer-type>javax.faces.Text</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.TextRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Alternate textual description of the
-          element rendered by this component.
-        </description>
-        <display-name>Alternate Text</display-name>
-        <icon/>
-        <attribute-name>alt</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        If the value of this attribute is "off", render "off" as the value
-        of the attribute. This indicates that the  browser should
-        disable its autocomplete feature for this component.  This is
-        useful for components that perform autocompletion and do not
-        want the browser interfering.  If this attribute is not set or the value 
-        is "on", render nothing.
-        </description>
-        <display-name>Enable or disable browser autocompletion.</display-name>
-        <icon/>
-        <attribute-name>autocomplete</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          The maximum number of characters that may
-          be entered in this field.
-        </description>
-        <display-name>Maximum Length</display-name>
-        <icon/>
-        <attribute-name>maxlength</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The number of characters used to determine
-          the width of this field.
-        </description>
-        <display-name>Field Width</display-name>
-        <icon/>
-        <attribute-name>size</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Renders an HTML "textarea" element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>See the encode description for the <a
-      href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-      Text</a> renderer.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>  Render the
-      clientId as the value of the "name" attribute.  Render the current
-      valu eof the component inside the "textarea"
-      element.</p> </ul>]]></description>
-      <component-family>javax.faces.Input</component-family>
-      <renderer-type>javax.faces.Textarea</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.TextareaRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        The number of columns to be displayed.
-        </description>
-        <display-name>Columns</display-name>
-        <icon/>
-        <attribute-name>cols</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        The number of rows to be displayed.
-        </description>
-        <display-name>Rows</display-name>
-        <icon/>
-        <attribute-name>rows</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <value-expression-enabled>true</value-expression-enabled>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Render a single message for a specific component.</p>
-
-      <p>Set-up for Rendering</p>
-
-      <ul>
-
-        <p>Obtain the "summary" and "detail" properties from
-        <code>UIMessage</code> component.  If not present, keep the
-        empty string as the value, respectively.  Obtain the first
-        <code>FacesMessage</code> to render from the component, using
-        the "for" property of the <code>UIMessage</code>.  This will be
-        the only message we render.  Obtain the severity style for this
-        message.  If the severity of the message is
-        <code>FacesMessage.SEVERITY_INFO</code>, the severity style
-        comes from the value of the "infoStyle" attribute.  If the
-        severity of the message is
-        <code>FacesMessage.SEVERITY_WARN</code>, the severity style
-        comes from the value of the "warnStyle" attribute, and so on for
-        each of the severities, <code>INFO, WARN, ERROR</code> and
-        <code>FATAL</code>.  The same rules apply for obtaining the
-        severity style class, but instead of "infoStyle, warnStyle", etc
-        use "infoClass, warnClass", etc.  Obtain the "style",
-        "styleClass" and "layout" attributes from the
-        <code>UIMessage</code> component.  If we have a "style"
-        attribute and a severity style attribute, use the severity style
-        attribute as the value of the "style" attribute.  If we have no
-        "style" attribute, but do have a severity style, use the
-        severity style as the value of the "style" attribute.  The same
-        precedence rules apply for the style class.  Obtain the value of
-        the <code>dir</code> and <code>lang</code> attributes.</p>
-
-      </ul>
-
-      <p>Rendering</p>
-
-      <ul>
-
-      <p>For the message renderer, we only render one row, for the first
-      message.  For the messages renderer, we render as many rows as we
-      have messages.  If any of the "dir", "lang", "style" or
-      "styleClass" attributes has a non-null value (as determined
-      above), render a "span" element, outputting the value of the
-      "style" attribute as the the value of the "style" attribute, and
-      outputting the value of the "styleClass" attribute as the value of
-      the "class" attribute on the "span" element.  Output the "dir" and
-      "lang" attributes as well, if they are present.  If the
-      <code>UIMessage</code> has a "tooltip" attribute with the value of
-      "true", and the <code>UIMessage</code> has "showSummary" and
-      "showDetail" properties with the value "true", if we haven't
-      already written out the "span", output the "summary" as the value
-      of the "title" attribute on the "span".  If we haven't already
-      written out a "title" attribute, and "showSummary" is true, output
-      the summary.  If "showDetail" is true, output the detail.  Close
-      out the span if necessary.</p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.Message</component-family>
-      <renderer-type>javax.faces.Message</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.MessageRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Class</display-name>
-        <icon/>
-        <attribute-name>errorClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Styles</display-name>
-        <icon/>
-        <attribute-name>errorStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Class</display-name>
-        <icon/>
-        <attribute-name>fatalClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Styles</display-name>
-        <icon/>
-        <attribute-name>fatalStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Class</display-name>
-        <icon/>
-        <attribute-name>infoClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Styles</display-name>
-        <icon/>
-        <attribute-name>infoStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating whether the detail portion of the
-          message should be displayed as a tooltip.
-        </description>
-        <display-name>Tooltip</display-name>
-        <icon/>
-        <attribute-name>tooltip</attribute-name>
-        <attribute-class>boolean</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Class</display-name>
-        <icon/>
-        <attribute-name>warnClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Styles</display-name>
-        <icon/>
-        <attribute-name>warnStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[
-
-     <p><span class="changed_modified_2_0">The</span> same as for the
-     Message renderer, but output all the messages.  <span
-     class="changed_added_2_0">If an "id" attribute has been specified,
-     it must be rendered on the outermost markup corresponding to this
-     component.</span> If the value of the "layout" attribute is
-     "table", render nested "table", "tr", and "td" elements, in that
-     order.  If the value of the "layout" attribute is "list", or the
-     "layout" attribute is not specified, render nested "ul", "li"
-     elements, in that order.  Output the value of the "style" attribute
-     as the value of the "style" attribute, output the value of the
-     "styleClass" attribute as the value of the "class" attribute, and
-     output the dir and lang attributes.  Output these values on the
-     "table" element or the "ul" element.  Output the values of the
-     "errorStyle", "fatalStyle", "infoStyle", "warnStyle" attributes as
-     the value of the "style" attribute on either the "tr" element or
-     the "li" element.  Output the values of the "errorClass",
-     "fatalClass", "infoClass", "warnClass" attributes as the value of
-     the "class" attribute on either the "tr" element or the "li"
-     element.  The component is a <code>UIMessages</code>, and there is
-     no "for" attribute.  Therefore, use either <code>null</code> to
-     obtain the messages from the <code>FacesContext</code> or the empty
-     string if the components "globalOnly" property is
-     <code>true</code>.  If the layout was "table" close out the table
-     elements, otherwise, close out the list elements.</p>
-
-            ]]></description>
-      <component-family>javax.faces.Messages</component-family>
-      <renderer-type>javax.faces.Messages</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.MessagesRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Class</display-name>
-        <icon/>
-        <attribute-name>errorClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "ERROR".
-        </description>
-        <display-name>Error Styles</display-name>
-        <icon/>
-        <attribute-name>errorStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Class</display-name>
-        <icon/>
-        <attribute-name>fatalClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "FATAL".
-        </description>
-        <display-name>Fatal Styles</display-name>
-        <icon/>
-        <attribute-name>fatalStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Class</display-name>
-        <icon/>
-        <attribute-name>infoClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "INFO".
-        </description>
-        <display-name>Info Styles</display-name>
-        <icon/>
-        <attribute-name>infoStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          The type of layout markup to use when rendering
-          error messages.  Valid values are "table" (an HTML
-          table) and "list" (an HTML list).  If not specified,
-          the default value is "list".
-        </description>
-        <display-name>Layout</display-name>
-        <icon/>
-        <attribute-name>layout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <default-value>"list"</default-value>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating whether the detail portion of the
-          message should be displayed as a tooltip.
-        </description>
-        <display-name>Tooltip</display-name>
-        <icon/>
-        <attribute-name>tooltip</attribute-name>
-        <attribute-class>boolean</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Class</display-name>
-        <icon/>
-        <attribute-name>warnClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to apply to any message
-          with a severity class of "WARN".
-        </description>
-        <display-name>Warning Styles</display-name>
-        <icon/>
-        <attribute-name>warnStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Render parameterized text.  Obtain the
-      <code>style</code>, <code>styleClass</code>, <code>dir</code>, and
-      <code>lang</code> attributees from this component.  If any are
-      present, render a "span" element.  Output the
-      <code>styleClass</code> attribute (if present) as the value of the
-      <code>class</code> attribute.  Output the <code>style</code>
-      attribute as the value of the <code>style</code> attribute.
-      Output the <code>dir</code> and <code>lang</code> attributes as
-      pass through attributes.  Accrue a list of the values of all child
-      <code>UIParameter</code> components of this component.  If there
-      are one or more accumulated parameter values, convert the list of
-      parameter values to an <code>Object</code> array, call
-      <code>MessageFormat.format()</code>, passing the
-      <code>value</code> of this component as the first argument, and
-      the array of parameter values as the second argument, and render
-      the result.  Otherwise, render the <code>value</code> of this
-      component unmodified.</p>]]></description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Format</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.OutputMessageRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  This flag
-        is set to "true" by default.
-        </description>
-        <display-name>Escape Characters</display-name>
-        <icon/>
-        <attribute-name>escape</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <default-value>true</default-value>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description>Renders an HTML "label" element.  Render the current value
-      of the component as label text if it is specified. If a "for" attribute is
-      specified, find the component specified by the value of the "for"
-      attribute, and render its client id as the value of the "for" attribute.
-      If "styleClass" attribute is specified, render its value as the value
-      of the "class" attribute.</description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Label</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.LabelRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        Client identifier of the component for which this element
-        is a label.
-        </description>
-        <display-name>Label For Identifier</display-name>
-        <icon/>
-        <attribute-name>for</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  If omitted, this
-        flag is assumed to be "true".
-        </description>
-        <display-name>Escape Characters</display-name>
-        <icon/>
-        <attribute-name>escape</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <default-value>true</default-value>
-          <value-expression-enabled>true</value-expression-enabled>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[
-
-            <p>Render an HTML "a" anchor element.  The value of the
-            component is rendered as the value of the "href" attribute.
-            Any child UIParameter components <span
-            class="changed_modified_2_0_rev_a">whose
-            <code>disable</code> property is <code>false</code></span> are
-            appended to the String to be output as the value of the
-            "href" attribute as query parameters before rendering.  The
-            entire "href" string must be passed through a call to the
-            <code>encodeResourceURL()</code> method of the
-            <code>ExternalContext</code>.  The name of the UIParameter
-            goes on the left hand side, and the value of the UIParameter
-            on the right hand side.  The name and the value must be
-            URLEncoded.  <span class="changed_modified_2_0_rev_a">Note
-            that the required url encoding is handled by
-            <code>ResponseWrter.writeAttribute()</code>.</span> Each
-            UIParameter instance is separeted by an ampersand, as
-            dictated in the URL spec.  If the "styleClass" attribute is
-            specified, render its value as the value of the "class"
-            attribute.  If the "id" attribute is specified, follow the
-            same steps as mentioned in the "<a
-            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on Encoding</a>" regarding the "id" attribute for
-            UIInput components.  If the "disabled" attribute is
-            specified, do not render the HTML "a" anchor element or the
-            "href" element.  Instead, render a "span" element.  If the
-            "styleClass" attribute is specified, render its value as the
-            value of the "class" attribute on the "span".  Render any
-            pass-through attributes on the "span".
-
-            </p>]]></description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Link</renderer-type>
-      <renderer-class>
-       com.sun.faces.renderkit.html_basic.OutputLinkRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          The character encoding of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Character Set</display-name>
-        <icon/>
-        <attribute-name>charset</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The position and shape of the hot spot on the screen
-          (for use in client-side image maps).
-        </description>
-        <display-name>Coordinates</display-name>
-        <icon/>
-        <attribute-name>coords</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The language code of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Language</display-name>
-        <icon/>
-        <attribute-name>hreflang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The relationship from the current document
-          to the anchor specified by this hyperlink.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Relationship</display-name>
-        <icon/>
-        <attribute-name>rel</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A reverse link from the anchor specified
-          by this hyperlink to the current document.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Reverse Link</display-name>
-        <icon/>
-        <attribute-name>rev</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The shape of the hot spot on the screen
-          (for use in client-side image maps).  Valid
-          values are:  default (entire region); rect
-          (rectangular region); circle (circular region);
-          and poly (polygonal region).
-        </description>
-        <display-name>Shape</display-name>
-        <icon/>
-        <attribute-name>shape</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Name of a frame where the resource
-          retrieved via this hyperlink is to
-          be displayed.
-        </description>
-        <display-name>Target Frame</display-name>
-        <icon/>
-        <attribute-name>target</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The content type of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Content Type</display-name>
-        <icon/>
-        <attribute-name>type</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this element must never
-          receive focus or be included in a subsequent
-          submit.
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>action</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-        <body-tag>true</body-tag>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div
-            class="changed_added_2_0"><p>Render an HTML "a" anchor
-            element.  The value of the component is rendered as the
-            anchor text and the outcome of the component is used to
-            determine the target URL rendered in the "href" attribute.
-            Any child <code>UIParameter</code> components <span
-            class="changed_modified_2_0_rev_a">whose
-            <code>disable</code> property is <code>false</code></span>
-            are appended to the String to be output as the value of the
-            "href" attribute as query parameters before rendering.  The
-            entire "href" string must be passed through a call to the
-            <code>encodeResourceURL()</code> method of the
-            <code>ExternalContext</code>.  The name of the
-            <code>UIParameter</code> goes on the left hand side, and the
-            value of the <code>UIParameter</code> on the right hand
-            side.  The name and the value must be URLEncoded.  <span
-            class="changed_modified_2_0_rev_a">Note that the required
-            url encoding is handled by
-            <code>ResponseWrter.writeAttribute()</code>.</span> Each
-            <code>UIParameter</code> instance is separated by an
-            ampersand, as dictated in the URL spec.  If the "fragment"
-            attribute is specified, the value will be included at the
-            end of the resulting URL preceded by a hash mark.  If the
-            "styleClass" attribute is specified, render its value as the
-            value of the "class" attribute.  If the "id" attribute is
-            specified, follow the same steps as mentioned in the "<a
-            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on Encoding</a>" regarding the "id" attribute for
-            UIInput components.  If the "disabled" attribute is
-            specified, do not render the HTML "a" anchor element or the
-            "href" element.  Instead, render a "span" element.  If the
-            "styleClass" attribute is specified, render its value as the
-            value of the "class" attribute on the "span".  Render any
-            pass-through attributes on the "span".</p></div>]]></description>
-      <component-family>javax.faces.OutcomeTarget</component-family>
-      <renderer-type>javax.faces.Link</renderer-type>
-      <renderer-class>
-       com.sun.faces.renderkit.html_basic.OutcomeTargetLinkRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          The character encoding of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Character Set</display-name>
-        <icon/>
-        <attribute-name>charset</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The position and shape of the hot spot on the screen
-          (for use in client-side image maps).
-        </description>
-        <display-name>Coordinates</display-name>
-        <icon/>
-        <attribute-name>coords</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The language code of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Language</display-name>
-        <icon/>
-        <attribute-name>hreflang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The relationship from the current document
-          to the anchor specified by this hyperlink.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Relationship</display-name>
-        <icon/>
-        <attribute-name>rel</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A reverse link from the anchor specified
-          by this hyperlink to the current document.
-          The value of this attribute is a space-separated
-          list of link types.
-        </description>
-        <display-name>Reverse Link</display-name>
-        <icon/>
-        <attribute-name>rev</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The shape of the hot spot on the screen
-          (for use in client-side image maps).  Valid
-          values are:  default (entire region); rect
-          (rectangular region); circle (circular region);
-          and poly (polygonal region).
-        </description>
-        <display-name>Shape</display-name>
-        <icon/>
-        <attribute-name>shape</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Name of a frame where the resource
-          retrieved via this hyperlink is to
-          be displayed.
-        </description>
-        <display-name>Target Frame</display-name>
-        <icon/>
-        <attribute-name>target</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The content type of the resource designated
-          by this hyperlink.
-        </description>
-        <display-name>Content Type</display-name>
-        <icon/>
-        <attribute-name>type</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this element must never
-          receive focus or be included in a subsequent
-          submit.
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>action</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          The identifier of the page fragment which should
-          be brought into focus when the target page is
-          rendered. The value of this attribute is appended
-          to the end of target URL following a hash (#) mark.
-          This notation is part of the standard URL syntax.
-        </description>
-        <display-name>Fragment Identifier</display-name>
-        <icon/>
-        <attribute-name>fragment</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-        <body-tag>true</body-tag>
-        <jsp-ignore>true</jsp-ignore>
-        <tag-name>link</tag-name>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div
-      class="changed_added_2_0"><p>Render an HTML "input" element of
-      type "button".  The value of the component is rendered as the
-      button text and the outcome of the component is used to determine
-      the target URL which is activated by onclick.  If "image"
-      attribute is specified, render it as the value of the "src"
-      attribute after passing it to the <code>getResourceURL()</code>
-      method of the <code>ViewHandler</code> for this application, and
-      passing the result through the <code>encodeResourceURL()</code>
-      method of the <code>ExternalContext</code>. Any child
-      <code>UIParameter</code> components are appended to the String to
-      be used as the target URL as query parameters before rendering.
-      The entire target URL string must be passed through a call to the
-      <code>encodeResourceURL()</code> method of the
-      <code>ExternalContext</code>.  The name of the
-      <code>UIParameter</code> goes on the left hand side, and the value
-      of the <code>UIParameter</code> on the right hand side.  The name
-      and the value must be URLEncoded.  Each <code>UIParameter</code>
-      instance is separeted by an ampersand, as dictated in the URL
-      spec.  The final encoded result will be written out to the onclick
-      attribute of the button as "window.location.href = '<encoded HREF
-      value>'".  If the developer has specified a custom onlclick the
-      window.location.href name/value pair will be appended at the end
-      of the developer specified script.  If the "fragment" attribute is
-      specified, the value will be included at the end of the resulting
-      URL preceded by a hash mark.  If the "styleClass" attribute is
-      specified, render its value as the value of the "class" attribute.
-      If the "id" attribute is specified, follow the same steps as
-      mentioned in the "<a
-      href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-      Notes on Encoding</a>" regarding the "id" attribute for UIInput
-      components.  If the "disabled" attribute is specified, do not
-      render the "onclick" element and assign the "disabled" attribute a
-      value of true.</p></div>]]></description>
-      <component-family>javax.faces.OutcomeTarget</component-family>
-      <renderer-type>javax.faces.Button</renderer-type>
-      <renderer-class>
-       com.sun.faces.renderkit.html_basic.OutcomeTargetButtonRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        Alternate textual description of the
-        element rendered by this component.
-      </description>
-        <display-name>Alternate Text</display-name>
-        <icon/>
-        <attribute-name>alt</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<p>
-        Absolute or relative URL of the
-        image to be displayed for this
-        button.  If specified, this
-        "input" element will be of type
-        "image".  Otherwise, it will be
-        of the type specified by the
-        "type" property with a label
-        specified by the "value"
-        property.  <span
-        class="changed_added_2_0">Note
-        that if the value of this
-        attribute starts with "/", the
-        rendered value for this
-        attribute will be prefixed with
-        the context-root for this
-        application.</span>
-      </p>]]></description>
-        <display-name>Image URL</display-name>
-        <icon/>
-        <attribute-name>image</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          The identifier of the page fragment which should
-          be brought into focus when the target page is
-          rendered. The value of this attribute is appended
-          to the end of target URL following a hash (#) mark.
-          This notation is part of the standard URL syntax.
-        </description>
-        <display-name>Fragment Identifier</display-name>
-        <icon/>
-        <attribute-name>fragment</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-        <body-tag>true</body-tag>
-        <jsp-ignore>true</jsp-ignore>
-        <tag-name>button</tag-name>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description>If the "styleClass", "style", "dir" or "lang"
-      attributes are present, render a "span" element.  If the
-      "styleClass" attribute is present, render its value as the value
-      of the "class" attribute.  If the "style" attribute is present,
-      pass it thru.  If the "escape" attribute is not present, or it is
-      present and its value is "true" all angle brackets should be
-      converted to the ampersand xx semicolon syntax when rendering the
-      value of the "value" attribute as the value of the component.  If
-      the "escape" attribute is present and is "false" the value of the
-      component should be rendered as text without escaping.
-            </description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Text</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.TextRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        Flag indicating that characters that are sensitive
-        in HTML and XML markup must be escaped.  This flag
-        is set to "true" by default.
-        </description>
-        <display-name>Escape Characters</display-name>
-        <icon/>
-        <attribute-name>escape</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <default-value>true</default-value>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[Renders an HTML "table" element, conforming to the
-      rules in the HTML 401 specification.  Render the "caption" facet, 
-      if present, inside a "caption" element immediately below the "table" element.  
-      If the "captionClass" attribute is specified, render its value as the value 
-      of the "class" attribute on the "caption" element.  If the "captionStyle" attribute
-      is specified, render its value as the value of the "style" attribute
-      on the "caption" element.  If the "styleClass" attribute is specified, render 
-      its value as the value of the "class" attribute.  Render the pass-through 
-      attributes in the table below.  Render the "header" facet, if present, inside of
-      "thead", "tr", and "th" elements, nested in that order.  If the
-      "headerClass" attribute is specifed, render its value as the value
-      of the "class" attribute on the "th" element.  Render "colgroup"
-      as the value of the "scope" attribute.  Render the value of the
-      "columns" attribute as the value of the "colspan" attribute on the
-      "th" element.  Render the "footer" facet if present, using similar
-      logic to the rendering of the "header", but replacing "thead" with
-      "tfoot", "th" with "td", and "headerClass" with "footerClass".
-      Render the children of the <code>UIPanel</code> component inside
-      of a "tbody" element.  Render the children based on the value of
-      the "columns" attribute, creating a new row each time a "columns"
-      worth of children have been rendered.  For the start of each row,
-      render a "tr" element.  Output the value of the "rowClasses" per
-      the attribute description below.  For each child, output a "td" 
-      element, attaching the value of the "columnClasses" attribute per
-      the attribute description below.  Recursively encode each child.
-      Close out the "td" element.  When done with the row, close out the 
-      "tr" element.  If a child has "rendered==false" it is not rendered, 
-      and the column counter must not be incremented.]]></description>
-      <component-family>javax.faces.Panel</component-family>
-      <renderer-type>javax.faces.Grid</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.GridRenderer
-    </renderer-class>
-      <facet>
-        <facet-name>header</facet-name>
-      </facet>
-      <facet>
-        <facet-name>footer</facet-name>
-      </facet>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Name or code of the background color for this table.
-        </description>
-        <display-name>Background Color</display-name>
-        <icon/>
-        <attribute-name>bgcolor</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Width (in pixels) of the border to be drawn
-          around this table.
-        </description>
-        <display-name>Table Border</display-name>
-        <icon/>
-        <attribute-name>border</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Definition of how much space the user agent should
-          leave between the border of each cell and its contents.
-        </description>
-        <display-name>Cell Padding</display-name>
-        <icon/>
-        <attribute-name>cellpadding</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Definition of how much space the user agent should
-          leave between the left side of the table and the
-          leftmost column, the top of the table and the top of
-          the top side of the topmost row, and so on for the
-          right and bottom of the table.  It also specifies
-          the amount of space to leave between cells.
-        </description>
-        <display-name>Cell Spacing</display-name>
-        <icon/>
-        <attribute-name>cellspacing</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the columns of this table.  A space separated list of
-          classes may also be specified for any individual column.  If
-          the number of elements in this list is less than the number of
-          actual column children of the UIData, no "class"
-          attribute is output for each column greater than the number of
-          elements in the list.  If the number of elements in the list
-          is greater than the number of actual column children of the
-          UIData, the elements at the posisiton in the list
-          after the last column are ignored.
-        </description>
-        <display-name>Column CSS Classes</display-name>
-        <icon/>
-        <attribute-name>columnClasses</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any footer generated for this table.
-        </description>
-        <display-name>Footer CSS Classes</display-name>
-        <icon/>
-        <attribute-name>footerClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Code specifying which sides of the frame surrounding
-          this table will be visible.  Valid values are:
-          none (no sides, default value); above (top side only);
-          below (bottom side only); hsides (top and bottom sides
-          only); vsides (right and left sides only); lhs (left
-          hand side only); rhs (right hand side only); box
-          (all four sides); and border (all four sides).
-        </description>
-        <display-name>Table Frame</display-name>
-        <icon/>
-        <attribute-name>frame</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any caption generated for this table.
-        </description>
-        <display-name>Caption CSS Classes</display-name>
-        <icon/>
-        <attribute-name>captionClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this caption is rendered.
-        </description>
-        <display-name>Caption CSS Styles</display-name>
-        <icon/>
-        <attribute-name>captionStyle</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any header generated for this table.
-        </description>
-        <display-name>Header CSS Classes</display-name>
-        <icon/>
-        <attribute-name>headerClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the rows of this table.  A space separated list of classes
-          may also be specified for any individual row.  Thes styles are
-          applied, in turn, to each row in the table.  For example, if
-          the list has two elements, the first style class in the list
-          is applied to the first row, the second to the second row, the
-          first to the third row, the second to the fourth row, etc.  In
-          other words, we keep iterating through the list until we reach
-          the end, and then we start at the beginning again.
-        </description>
-        <display-name>Row CSS Classes</display-name>
-        <icon/>
-        <attribute-name>rowClasses</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Code specifying which rules will appear between cells
-          within this table.  Valid values are:  none (no rules,
-          default value); groups (between row groups); rows
-          (between rows only); cols (between columns only); and
-          all (between all rows and columns).
-        </description>
-        <display-name>Table Rules</display-name>
-        <icon/>
-        <attribute-name>rules</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Summary of this table's purpose and structure, for
-          user agents rendering to non-visual media such as
-          speech and Braille.
-        </description>
-        <display-name>Table Summary</display-name>
-        <icon/>
-        <attribute-name>summary</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Width of the entire table, for visual user agents.
-        </description>
-        <display-name>Table Width</display-name>
-        <icon/>
-        <attribute-name>width</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Comma separated list of row indices for which a new
-          "tbody" element should be started (and any
-          previously opened one should be ended).
-        </description>
-        <display-name>Body Rows</display-name>
-        <icon/>
-        <attribute-name>bodyrows</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description>
-        The number of columns to render before
-        starting a new row.
-        </description>
-        <display-name>Columns</display-name>
-        <icon/>
-        <attribute-name>columns</attribute-name>
-        <attribute-class>int</attribute-class>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description>Intended for use in situations when only one
-      UIComponent child can be nested, such as in the case of facets.
-      If the "style" or "styleClass" attributes are present, and the "layout"
-      attribute is present with a value of "block", render a "div" element,
-      outputting the value of the "style" attribute as the value of the 
-      "style" attribute and the value of the "styleClass" attribute as the
-      value of the "class" attribute.  Otherwise, if the "layout" attribute
-      is not present, or the "layout" attribute contains a value other than
-      "block", render a "span" element, outputting the value of the 
-      "style" attribute as the value of the "style" attribute, and the value 
-      of the "styleClass" attribute as the value of the "class"
-      attribute. </description>
-      <component-family>javax.faces.Panel</component-family>
-      <renderer-type>javax.faces.Group</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.GroupRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" property on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          The type of layout markup to use when rendering this group.
-          If the value is "block" the renderer must produce an HTML
-          "div" element.  Otherwise HTML "span" element must
-          be produced.
-        </description>
-        <display-name>Layout</display-name>
-        <icon/>
-        <attribute-name>layout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Renders an HTML "input" element of type "checkbox".</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If there is no
-      entry in the <code>Map</code> for the "clientId" of this
-      component, pass "false" to the <code>setSubmittedValue()</code>
-      method of the component, which must be an instance of
-      <code>EditableValueHolder</code>.  If there is an entry, and its
-      value is equal, ignoring case and without quotes, to any of the
-      Strings: "on", "yes" or "true" pass true to the
-      <code>setSubmittedValue()</code> method of the component.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>
-      Render the clientId of the component as the value of the "name"
-      attribute.  If the current value of the component is "true",
-      output the "checked" attribute (must be rendered as checked="checked").  
-      If the "styleClass" attribute is specified, render its value as the value 
-      of the "class" attribute.</p> </ul>]]></description>
-      <component-family>javax.faces.SelectBoolean</component-family>
-      <renderer-type>javax.faces.Checkbox</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.CheckboxRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML checkbox
-            list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectMany Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-      <p>Render a "table" element.  If the "styleClass" is specified,
-      render the value of the "styleClass" attribute as the value of the
-      "class" attribute on the "table" element. If the "style", or
-      "border" attributes are specified, pass them thru <span
-      class="changed_added_2_0">and render their values as the "style"
-      and "border" attributes on the "table", respectively.</span> If
-      the "layout" attribute is specified, and its value is
-      "pageDirection", render the children elements vertically,
-      otherwise horizontally, in the table.  If any of the children are
-      an instance of SelectItemGroup, render them as a nested table.
-      Each of the children are ultimately rendererd as follows.  Render
-      an "input" element of "type" "checkbox" for each child component.
-      Render the "name" attribute on the "input" element with the value
-      of the <code>clientId</code> of the component.  Render an "id"
-      attribute on the "input" element.  Each "id" value must be unique.
-      If the current SelectItem.isDisabled() returns true, render
-      "disabled" as the value of the "disabled" attribute.  Close out
-      the "input" element.  Render a "label" element.  Render the "for"
-      attribute of the "label" element whose value is the corresponding
-      "input" element's "id" value.  
-      <span
-      class="changed_added_2_0">If the current checkbox would be
-      rendered as being checked, and there is a "selectedClass"
-      attribute, append a space, followed by the value of the
-      "selectedClass" attribute to any existing "class" attribute value
-      on the label element.  Otherwise, render the value of the
-      "selectedClass" attribute as the value of the "class" attribute on
-      the label element.  If the current checkbox would be rendered as
-      being not checked, and there is a "unselectedClass" attribute,
-      append a space, followed by the value of the "unselectedClass"
-      attribute to any existing "class" attribute value on the label
-      element.  Otherwise, render the value of the "unselectedClass"
-      attribute as the value of the "class" attribute on the label
-      element.</span>  <span class="changed_modified_2_0_rev_a">If the 
-      current checkbox would be rendered as being disabled, and there is a 
-      "disabledClass" attribute, append a space, followed by the value 
-      of the "disabledClass" attribute to any existing "class" attribute 
-      value on the label element.  Otherwise, render the value of the 
-      "disabledClass" attribute as the value of the "class" attribute on 
-      the label element.  If the current checkbox would be rendered as 
-      being enabled, and there is an "enabledClass" attribute, append a 
-      space, followed by the value of the "enabledClass" attribute to any 
-      existing "class" attribute value on the label element.  Otherwise, 
-      render the value of the "enabledClass" attribute as the value of 
-      the "class" attribute on the label element.</span> Close out the starting 
-      "label" element and render the label value from SelectItem.getLabel().  
-      Close out the "label" element.  As an exception to the general rules about 
-      how to handle the "id" attribute, render it as an attribute on the outer "table"
-      element, the value of which is the <code>clientId</code> of the
-      component per the rules at the beginning of this specification.
-      The value of the current SelectItem is rendered as the value of
-      the "value" attribute.  Coerce the value of the currently rendered
-      child to the type of the parent UISelectMany value following the
-      Expression Language coercion rules, before comparing the values.
-      If the value of the enclosing UISelectMany matches the current
-      value, render "checked" as the value of the "checked" attribute.
-      See the <a href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option
-      elements" </a> specification for <code>ListboxRenderer</code> for
-      more detail on how to render the "option" elements in this
-      renderer.  <span class="changed_modified_2_0_rev_a">Note that this
-      renderer does not support <code>SelectItemGroup</code> elements,
-      so the text that describes the rendering of
-      <code>SelectItemGroup</code> does not apply to this
-      renderer.</span></p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.SelectMany</component-family>
-      <renderer-type>javax.faces.Checkbox</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.SelectManyCheckboxListRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Width (in pixels) of the border to be drawn
-          around the table containing the options list.
-        </description>
-        <display-name>Table Border</display-name>
-        <icon/>
-        <attribute-name>border</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to the rendered label
-          on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon/>
-        <attribute-name>disabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to the rendered label
-          on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon/>
-        <attribute-name>enabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to the rendered label
-          on selected options.
-        </description>
-        <display-name>Selected Label Class</display-name>
-        <icon/>
-        <attribute-name>selectedClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to the rendered label
-          on unselected options.
-        </description>
-        <display-name>Unselected Label Class</display-name>
-        <icon/>
-        <attribute-name>unselectedClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Orientation of the options list to be created.
-          Valid values are "pageDirection" (list is laid
-          out vertically), or "lineDirection" (list is
-          laid out horizontally).  If not specified, the
-          default value is "lineDirection".
-        </description>
-        <display-name>Layout</display-name>
-        <icon/>
-        <attribute-name>layout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0"> Optional
-        attribute that is a literal string that is the fully qualified
-        class name of a concrete class that implements
-        <code>java.util.Collection</code>, or an EL expression that
-        evaluates to either 1. such a String, or 2. the
-        <code>Class</code> object itself. </p>]]></description>
-        <display-name>Collection Type</display-name>
-        <icon/>
-        <attribute-name>collectionType</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]></description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon/>
-        <attribute-name>hideNoSelectionOption</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <value-expression-enabled>true</value-expression-enabled>
-          <jsp-ignore>true</jsp-ignore>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML option
-            list.</p>
-
-      <p>Decode Behavior</p>
-
-      <p>This section documents the decode behavior for all renderers
-      that handle <code>UISelectMany</code> or <code>UISelectOne</code>
-      components.</p>
-
-      <ul>
-
-      <p><a name="decodeMany">Decode Behavior for
-      <code>UISelectMany</code> components</a></p>
-
-      <ul>
-
-        <p>Obtain the <code>Map</code> from the
-        "requestParameterValuesMap" property of the
-        <code>ExternalContext</code>.  If the <code>Map</code> contains
-        an entry for the "clientId" of the component, pass the value of
-        the entry, cast to a <code>String []</code>, to the
-        <code>setSubmittedValue()</code> method of the component, which
-        must be an <code>EditableValueHolder</code>.  If the
-        <code>Map</code> does not contain an entry, create an empty
-        <code>String</code> array and call
-        <code>setSubmittedValue()</code> with it.</p>
-
-        <p class="changed_modified_2_0">Please check the javadoc for <a
-        href="../../javadocs/javax/faces/component/UISelectMany.html#getConvertedvalue">UISelectMany.getConvertedValue()</a>
-        for additional requirements for renderers that render this kind
-        of component.</p>
-
-      </ul>
-
-      <p><a name="decodeOne">Decode Behavior for
-      <code>UISelectOne</code> components</a></p>
-
-      <ul>
-
-      <p>Obtain the <code>Map</code> from the "requestParameterMap"
-      property of the <code>ExternalContext</code>.  If there is a
-      <code>Map</code> entry for the "clientId" property of the
-      component, pass it to the <code>setSubmittedValue()</code> method
-      of the component. <span class="changed_added_2_0">If the
-      <code>Map</code> does not contain an entry, call
-      <code>setSubmittedValue()</code> passing an empty
-      <code>String</code> as the argument.</span> </p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render an HTML "select" element. Render the clientId of
-      the component as the value of the "name" attribute.  If the "styleClass"
-      attribute is specified, render its value as the value of the "class"
-      attribute on the "select" element.  If the component is a
-      <code>UISelectMany</code> instance, render "multiple" as the value of the
-      "multiple" attribute.  If the "size" attribute is specified, render its
-      value as the value of the "size" attribute.  Otherwise use the number of
-      items as the value of the "size" attribute.</p>
-
-      </ul>
-
-      <p><a name="option">Rendering the "option" elements</a></p>
-
-      <ul>
-
-      <p>The only valid children of this component are
-      <code>UISelectItem</code> or <code>UISelectItems</code>
-      instances. Iterate over the children of this component, and accrue
-      a list of <code>javax.faces.model.SelectItem</code> instances.
-      <span class="changed_added_2_0">If the current child is a
-      <code>SelectItem</code> whose <code>noSelctionProperty</code> is
-      <code>true</code>, <b>and</b> the <code>UISelectOne</code> or
-      <code>UISelectMany</code> parent of this option has one or more
-      selected values that <b>are not</b> the "no selection"
-      <code>SelectItem</code>, <b>and</b> the component has a
-      "hideNoSelectionLabel" attribute whose value is <code>true</code>,
-      then the current option, which is the "no selection" option, must
-      not be rendered.</span> If the current child is a
-      <code>UISelectItem</code> create a <code>SelectItem</code>instance
-      from its <code>itemValue, itemLabel</code>, <code
-      class="changed_added_2_0">itemEscaped</code>, and
-      <code>itemDescription</code> properties, add it to the list.  If
-      the current child is a <code>UISelectItems</code> instance, call
-      its <code>getValue()</code> method.  If the result is a
-      <code>SelectItem</code> bean, add it to the list.  If the result
-      is an array of <code>SelectItem</code> beans, add each one to the
-      list.  If the result is a <code>Collection</code> of
-      <code>SelectItem</code> beans, add each one to the list.  If the
-      result is a <code>Map</code>, create a <code>SelectItem</code>
-      bean for each entry in the <code>Map</code> using the key as the
-      label, the value as the value, and <code>null</code> as the
-      description.</p>
-
-      <p>Iterate over the list of <code>SelectItem</code> beans.  If the
-      current element is a <code>SelectItemGroup</code>, render an
-      "optgroup" element with a "label" attribute, the value of which is
-      the "label" property from the current element, then call
-      <code>getSelectItems()</code> and render each element as below.
-      If the current element is not a <code>SelectItemGroup</code>,
-      render an "option" element.  Follow the conversion rules in the
-      spec to obtain a renderable <code>String</code> from the "value"
-      property of the current element, render that as the value of the
-      "value" atribute.  Now it is time to see if the current element is
-      the selected value.  Call its <code>getSubmittedValue()</code>
-      method, casting the result to an <code>Object []</code>, otherwise
-      the component must be a <code>UISelectOne</code> instance, call
-      its <code>getSubmittedValue()</code> method and create an
-      <code>Object []</code> around the result.  Determine the type of
-      the resultant array, if the resultant array is non-null, otherwise
-      the type is <code>String</code>.  Coerce the current item value to
-      this type following the Expression Language coercion rules.  If
-      the resultant array is non-null, we look in the array for a value
-      that, when we pass the renderable value to its
-      <code>equals()</code> method, it returns <code>true</code>,
-      meaning the current element is selected.  If the resultant array
-      is <code>null</code>, if the component is a
-      <code>UISelectMany</code>, call its <code>getValue()</code>
-      method.  If the result is a <code>List</code> obtain the values in
-      the list as an array.  Otherwise, the component must be a
-      <code>UISelectOne</code> instance.  Call its
-      <code>getValue()</code> method, which must be an Object array.
-      Look for an element in the resultant array that, 1. when we pass
-      the renderable value to its <code>equals()</code> method, it
-      returns <code>true</code> , or 2. if the renderable value is null,
-      and there is a null element in the array, also conclude that the
-      current element is selected.  Otherwise the current element is not
-      selected.  Now, if the current value is selected, write out an
-      HTML boolean property "selected".  If the current
-      SelectItem.isDisabled() returns true, render "disabled" as the
-      value of the "disabled" attribute.  <span
-      class="changed_added_2_0">If the value of the <code>escape</code>
-      property is true, use the <code>writeText()</code> method of
-      <code>ResponseWriter</code> to write out the value of the
-      <code>label</code> property.  Otherwise, use the
-      <code>write()</code> method of the <code>ResponseWriter</code> to
-      do so.</span></p>
-
-      </ul>
-
-      </ul>]]></description>
-      <component-family>javax.faces.SelectMany</component-family>
-      <renderer-type>javax.faces.Listbox</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.ListboxRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon/>
-        <attribute-name>disabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon/>
-        <attribute-name>enabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-        Number of available options to be shown at all times.
-        If not specified, all available options are shown.
-        </description>
-        <display-name>Size</display-name>
-        <icon/>
-        <attribute-name>size</attribute-name>
-        <attribute-class>int</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0"> Optional
-        attribute that is a literal string that is the fully qualified
-        class name of a concrete class that implements
-        <code>java.util.Collection</code>, or an EL expression that
-        evaluates to either 1. such a String, or 2. the
-        <code>Class</code> object itself. </p>]]></description>
-        <display-name>Collection Type</display-name>
-        <icon/>
-        <attribute-name>collectionType</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]></description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon/>
-        <attribute-name>hideNoSelectionOption</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <value-expression-enabled>true</value-expression-enabled>
-          <jsp-ignore>true</jsp-ignore>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> an HTML option
-            list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectMany Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render an HTML "select" element.  Render the clientId of
-      the component as the value of the "name" attribute.  If the "styleClass"
-      attribute is specified, render its value as the value of the "class"
-      attribute on the "select" element. If the component
-      to be rendered is a UISelectMany, render "multiple" as the value of
-      the "multiple" attribute.  Render "1" as the value of the "size"
-      attribute.  See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option
-      elements" </a> specification for <code>ListboxRenderer</code> for
-      more detail on how to render the "option" elements in this
-      renderer.</p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.SelectMany</component-family>
-      <renderer-type>javax.faces.Menu</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.MenuRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon/>
-        <attribute-name>disabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon/>
-        <attribute-name>enabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0"> Optional
-        attribute that is a literal string that is the fully qualified
-        class name of a concrete class that implements
-        <code>java.util.Collection</code>, or an EL expression that
-        evaluates to either 1. such a String, or 2. the
-        <code>Class</code> object itself. </p>]]></description>
-        <display-name>Collection Type</display-name>
-        <icon/>
-        <attribute-name>collectionType</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]></description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon/>
-        <attribute-name>hideNoSelectionOption</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <value-expression-enabled>true</value-expression-enabled>
-          <jsp-ignore>true</jsp-ignore>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Render an HTML option list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectOne Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-      <p>Render an HTML "select" element.  Render the clientId of
-      the component as the value of the "name" attribute.  If the "styleClass"
-      attribute is specified, render its value as the value of the "class"
-      attribute on the "select" element. If the component
-      to be rendered is a UISelectMany, render "multiple" as the value of
-      the "multiple" attribute.  If the "size" attribute is specified,
-      render its value as the value of the "size" attribute.  Otherwise
-      use the number of items as the value of the "size" attribute.  See
-      the <a href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option
-      elements" </a> specification for <code>ListboxRenderer</code> for
-      more detail on how to render the "option" elements in this
-      renderer.</p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.SelectOne</component-family>
-      <renderer-type>javax.faces.Listbox</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.ListboxRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon/>
-        <attribute-name>disabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon/>
-        <attribute-name>enabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-        Number of available options to be shown at all times.
-        If not specified, all available options are shown.
-        </description>
-        <display-name>Size</display-name>
-        <icon/>
-        <attribute-name>size</attribute-name>
-        <attribute-class>int</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]></description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon/>
-        <attribute-name>hideNoSelectionOption</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <value-expression-enabled>true</value-expression-enabled>
-          <jsp-ignore>true</jsp-ignore>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p>Render an HTML option list.</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectOne Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render an HTML "select" element.  Render the clientId of the
-      component as the value of the "name" attribute.  If the
-      "styleClass" attribute is specified, render its value as the value
-      of the "class" attribute on the "select" element. If the component
-      to be rendered is a UISelectMany, render "true" as the value of
-      the "multiple" attribute.  Use the number of items as the value of
-      the "size" attribute.  See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering
-      the option elements" </a> specification for
-      <code>ListboxRenderer</code> for more detail on how to render the
-      "option" elements in this renderer.</p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.SelectOne</component-family>
-      <renderer-type>javax.faces.Menu</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.MenuRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon/>
-        <attribute-name>disabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-         CSS style class to apply to the rendered label
-         on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon/>
-        <attribute-name>enabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]></description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon/>
-        <attribute-name>hideNoSelectionOption</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <value-expression-enabled>true</value-expression-enabled>
-          <jsp-ignore>true</jsp-ignore>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<p><span
-            class="changed_modified_2_0">Render</span> a set of html
-            "input" elements of type "radio".</p>
-
-      <p><a name="decode">Decode Behavior</a></p>
-
-      <ul>
-
-      <p>See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Decode
-      Behavior for UISelectOne Components"</a> section.</p>
-
-      </ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-      <p>Render a "table" element. If the "styleClass" is specified,
-      render the value of the "styleClass" attribute as the value of the
-      "class" attribute on the "table" element. If the "style", "border"
-      attributes are specified, pass them thru <span
-      class="changed_added_2_0">and render their values as the "style"
-      and "border" attributes on the "table", respectively.</span>. If
-      the "layout" attribute is specified, and its value is
-      "pageDirection", render the children elements vertically,
-      otherwise horizontally, in the table.  If any of the children are
-      an instance of SelectItemGroup, render them as a nested table.
-      Each of the children are ultimately rendered as follows.  Render
-      an "input" element of "type" "radio" for each child component.
-      Render the "name" attribute on the "input" element with the value
-      of the <code>clientId</code> of the component.  Render an "id"
-      attribute on the "input" element.  Each "id" value must be unique.
-      If the current SelectItem.isDisabled() returns true, render
-      "disabled" as the value of the "disabled" attribute.  Close out
-      the "input" element.  Render a "label" element.  Render the "for"
-      attribute of the "label" element whose value is the corresponding
-      "input" element's "id" value.  Render any "style" as the "class"
-      attribute on the "label" element.  Close out the starting "label"
-      element and render the label value from SelectItem.getLabel().
-      Close out the "label" element.  As an exception to the general
-      rules about how to handle the "id" attribute, render it as an
-      attribute on the outer "table" element, the value of which is the
-      <code>clientId</code> of the component per the rules at the
-      beginning of this specification.  Coerce the value of the
-      currently rendered child to the type of the parent UISelectOne
-      value using the Expression Language coercion rules before
-      comparing the values.  If the value of the currently rendered
-      child is equal to the value of the parent UISelectOne, render an
-      appropriate HTML boolean value indicating "checked" for the
-      enclosing "input".  See the <a
-      href="javax.faces.SelectManyjavax.faces.Listbox.html">"Rendering the option elements" </a>
-      specification for <code>ListboxRenderer</code> for more detail on
-      how to render the "option" elements in this renderer.  <span
-      class="changed_modified_2_0_rev_a">Note that this renderer does
-      not support <code>SelectItemGroup</code> elements, so the text
-      that describes the rendering of <code>SelectItemGroup</code> does
-      not apply to this renderer.</span></p>
-
-      </ul>]]></description>
-      <component-family>javax.faces.SelectOne</component-family>
-      <renderer-type>javax.faces.Radio</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.RadioRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Access key that, when pressed, transfers focus
-          to this element.
-        </description>
-        <display-name>Access Key</display-name>
-        <icon/>
-        <attribute-name>accesskey</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus.
-        </description>
-        <display-name>Focus Off Script</display-name>
-        <icon/>
-        <attribute-name>onblur</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element receives focus.
-        </description>
-        <display-name>Focus On Script</display-name>
-        <icon/>
-        <attribute-name>onfocus</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Position of this element in the tabbing order
-          for the current document.  This value must be
-          an integer between 0 and 32767.
-        </description>
-        <display-name>Tab Index</display-name>
-        <icon/>
-        <attribute-name>tabindex</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Flag indicating that this element must never receive focus or
-          be included in a subsequent submit.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as disabled="disabled".            
-        </description>
-        <display-name>Disabled Flag</display-name>
-        <icon/>
-        <attribute-name>disabled</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when this element loses focus
-          and its value has been modified since gaining focus.
-        </description>
-        <display-name>Input Change Script</display-name>
-        <icon/>
-        <attribute-name>onchange</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-          <behavior/>
-          <behavior>valueChange</behavior>
-          <default-behavior>true</default-behavior>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when text within this
-          element is selected by the user.
-        </description>
-        <display-name>Text Select Script</display-name>
-        <icon/>
-        <attribute-name>onselect</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Flag indicating that this component will prohibit changes by
-          the user.  The element may receive focus unless it has also
-          been disabled.  A value of false causes
-          no attribute to be rendered, while a value of true causes the
-          attribute to be rendered as readonly="readonly".
-        </description>
-        <display-name>Read Only Flag</display-name>
-        <icon/>
-        <attribute-name>readonly</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          A localized user presentable name for this component.
-        </description>
-        <display-name>Label</display-name>
-        <icon/>
-        <attribute-name>label</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <renderer-attribute-ignore>true</renderer-attribute-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description><![CDATA[<p class="changed_modified_2_0">
-          Flag indicating that, if this component is activated by the user,
-          The "no selection option", if any, must be hidden.</p>]]></description>
-        <display-name>Hide "No Selection" Option</display-name>
-        <icon/>
-        <attribute-name>hideNoSelectionOption</attribute-name>
-        <attribute-class>boolean</attribute-class>
-        <attribute-extension>
-          <value-expression-enabled>true</value-expression-enabled>
-          <jsp-ignore>true</jsp-ignore>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Width (in pixels) of the border to be drawn
-          around the table containing the options list.
-        </description>
-        <display-name>Table Border</display-name>
-        <icon/>
-        <attribute-name>border</attribute-name>
-        <attribute-class>int</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to the rendered label
-          on disabled options.
-        </description>
-        <display-name>Disabled Label Class</display-name>
-        <icon/>
-        <attribute-name>disabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          CSS style class to apply to the rendered label
-          on enabled options.
-        </description>
-        <display-name>Enabled Label Class</display-name>
-        <icon/>
-        <attribute-name>enabledClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-      <attribute>
-        <description>
-          Orientation of the options list to be created.
-          Valid values are "pageDirection" (list is laid
-          out vertically), or "lineDirection" (list is
-          laid out horizontally).  If not specified, the
-          default value is "lineDirection".
-        </description>
-        <display-name>Layout</display-name>
-        <icon/>
-        <attribute-name>layout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-      </attribute>
-
-      <renderer-extension>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Renders a composite component.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-	<ul>
-
-           <p>Ask the argument <code>UIComponent</code> for its facet
-           under the key <code>UIComponent.COMPOSITE_FACET_NAME</code>.
-           Such a facet must exist.  Call the <code>encodeAll()</code>
-           method on this facet.</p>
-
-	</ul>
-
-
-
-</div>]]></description>
-      <component-family>javax.faces.NamingContainer</component-family>
-      <renderer-type>javax.faces.Composite</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.CompositeRenderer
-    </renderer-class>
-      <renderer-extension>
-        <ignore-all>true</ignore-all>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Renders a facet at this particular point in the composite component VDL page.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-<p><code>encodeBegin()</code> and <code>encodeEnd()</code> must take no
-action for this renderer.  Due to the specification of the
-<code><composite:insertChildren></code> tag handler, the component
-passed to the <code>encodeChildern()</code> method of this renderer will
-be the component with <code>component-family</code>
-<code>javax.faces.Output</code> and <code>renderer-type</code> equal to
-the one for this renderer.  The implementation of
-<code>encodeBegin()</code>, must obtain the component attribute value
-under the key given by the value of the symbolic constant
-<code>UIComponent.FACETS_KEY</code> from the attributes map of the
-argument component.  If not found, throw <code>IOException</code>.  This
-value is referred to as "facetName" for discission.  Find the closest
-ancestor composite component in which the argument component is nested.
-If no such component can be found, thow <code>IOException</code>.
-Otherwise, get the facet whose name is "facetName".  If found call
-<code>encodeAll()</code> on the facet.</p>
-
-
-
-</div>]]></description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.CompositeFacet</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.CompositeFacetRenderer
-    </renderer-class>
-      <renderer-extension>
-        <ignore-all>true</ignore-all>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div class="changed_added_2_0">
-
-<p><span class="changed_modified_2_0_rev_a">Render</span> the markup for
-a <code><script></code> element that renders the script
-<code>Resource</code> specified by the optional <code>name</code>
-attribute and <code>library</code> attributes.</p>
-
-<p>The implementation of this renderer must have a <a target="_"
-href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
-annotation attached to it, at the class level, declaring <a target="_"
-href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
-as the value of the <code>systemEventClass</code> attribute.  The presence of
-this annotation on a renderer implies the renderer implements <a
-target="_"
-href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
-which this renderer must do.  The implementation of
-<code>processEvent()</code> must extract the <code>UIComponent</code>
-from the argument event and look for the presence of the key
-"<code>target</code>" in the component's attribute <code>Map</code>.  If
-and only if such a key is present, the implementation of
-<code>processEvent()</code> must pass the component to <a target="_"
-href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent)"><code>UIViewRoot.addComponentResource()</code></a>.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-        <p><a name="ResourceCommonGetResource">Common Algorithm for Obtaining A Resource to Render</a></p>
-
-        <ul>
-
-          <p>This algorithm is used by all resource renderers to obtain
-          a <code>Resource</code> instance which is then rendered in a
-          specific way depending on what kind of renderer is doing the
-          encoding.</p>
-
-          <ul>
-
-	  <li><p>Look in the component attribute <code>Map</code> for a
-	  value under the key <em>name</em>.</p></li>
-
-	  <li><p>Look in the component attribute <code>Map</code> for a
-	  value under the key <em>library</em>.  This attribute is
-	  optional, therefore, <em>library</em> may be
-	  <code>null</code>.</p></li>
-
-	  <li><p>Create the resource by calling
-	  <code>Application.getResourceHandler.createResource(<em>name</em>,
-	  <em>library</em>);</code>.</p></li>
-
-	  </p></li>
-
-          </ul>
-
-        </ul>
-
-        <p><a name="ResourceCommonEncode">Common Encode Behavior</a></p>
-
-      <ul>
-
-       <p>This algorithm is used by all resource renderers to render the
-       resource.</p>
-
-        <p><code>encodeBegin()</code> must take no action.</p>
-
-        <p>Because this renderer returns <code>true</code> from
-        <code>getRendersChildren()</code>, the <code>encodeChildren()
-        method must take the following action.</code></p>
-
-        	<ul>
-
-	  <li><p>If there is no <em>name</em> attribute, and the
-	  argument <code>component</code> has no children, and
-	  <code>ProjectStage</code> is not
-	  <code>ProjectStage.Production</code>, add a
-	  <code>FacesMessage</code> for this component's clientId to the
-	  <code>FacesContext</code> stating that if no name attribute is
-	  present, and no body content is present either, then the user
-	  should take action to correct this problem.  In this case,
-	  <code>encodeChildren()</code> must take no further
-	  action.</p></li>
-
-	  <li><p>If there is no <em>name</em> attribute and the argument
-	  <code>component</code> <b>does</b> have children, the renderer
-	  must ensure that those children are encoded as usual.</p></li>
-
-	  <li><p>If there <b>is</b> a <em>name</em> attribute and the
-	  argument <code>component</code> <b>does</b> have children, the
-	  renderer must log a descriptive localized message stating that
-	  the child content will be ignored.  The resource referenced by
-	  the <em>name</em> attribute will be rendered in
-	  <code>encodeEnd()</code>.</p></li>
-
-	  <li><p>If there <b>is</b> a <em>name attribute</em> and the
-	  argument <code>component</code> <b>does not</b> have children,
-	  <code>encodeChildren()</code> must take no action.</p></li>
-
-	</ul>
-
-       <p><code>encodeEnd()</code> must take specific action based on
-       the specific kind of resource being rendered.</p>
-
-      </ul>
-
-       <p>Use the algorithm <em>Common Encode Behavior</em> for
-       <code>encodeBegin()</code>, <code>encodeChildren()</code> and
-       <code>getRendersChildren()</code>.</p>
-
-        <p>For <code>encodeEnd()</code>, use the algorithm <em>Common
-        Algorithm for Obtaining A Resource to Render</em> above to
-        obtain a reference to the <code>Resource</code> to be
-        encoded.</p>
-
-        <p>If this is NOT the first time this <code>Resource</code> has
-        been referenced on this request take no action and return.</p>
-
-        <p>Render a script element.  Use the result from calling
-        <code>resource.getRequestPath()</code> as the value of the "src"
-        attribue and the result from calling
-        <code>resource.getContentType()</code> as the value of the "type"
-        attribute.</p>
-
-</p>
-
-
-
-       </ul>
-
-
-
-</div>]]></description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.resource.Script</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.ScriptRenderer
-    </renderer-class>
-
-      <attribute>
-        <description><![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]></description>
-        <display-name>Resource Name</display-name>
-        <icon/>
-        <attribute-name>name</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-          <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]></description>
-        <display-name>Library Name</display-name>
-        <icon/>
-        <attribute-name>library</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-          <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-      </attribute>
-
-      <attribute>
-        <description><![CDATA[<div class="changed_added_2_0"><p>The
-                    <em>target</em> area for which this resource will be
-                    rendered.  For example, <em>target="head"</em> would
-                    cause the resource to be rendered within the
-                    <em>head</em> element.  <span
-                    class="changed_modified_2_0_rev_a">If no value is
-                    specififed, the script element is rendered at the
-                    same point in the view where the tag is
-                    located.</span> <span
-                    class="changed_modified_2_0_rev_a">Currently
-                    supported values for this attribute are "head",
-                    "body", and "form".</span></p></div>]]></description>
-        <display-name>Target</display-name>
-        <icon/>
-        <attribute-name>target</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-          <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-      </attribute>
-      <renderer-extension>
-        <jsp-ignore>true</jsp-ignore>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Render the markup for a <code><link></code> element that
-renders the style <code>Resource</code> specified by the optional
-<code>name</code> and <code>library</code> attributes.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-       <p>Use the algorithm <em>Common Encode Behavior</em> for
-       <code>encodeBegin()</code>, <code>encodeChildren()</code> and
-       <code>getRendersChildren()</code>.</p>
-
-        <p>For <code>encodeEnd()</code>, use the algorithm <a
-        href="javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource">Common
-        Algorithm for Obtaining A Resource to Render</a> to obtain a
-        reference to the <code>Resource</code> to be encoded.</p>
-
-<p>Output a <code><link></code> element.  Use the result from
-calling <code>resource.getRequestPath()</code> as the value of the
-"href" attribute, the result from calling
-<code>resource.getContentType()</code> as the value of the "type"
-attribute, the literal string "stylesheet" as the value of the "rel"
-attribute, and the literal string "screen" as the value of the "media"
-attribute.</p>
-
-<p>The implementation of this renderer must have a <a target="_"
-href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
-annotation attached to it, at the class level, declaring <a target="_"
-href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
-as the value of the <code>systemEventClass</code> attribute.  The presence of
-this annotation on a renderer implies the renderer implements <a target="_"
-href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
-which this renderer must do.  The implementation of
-<code>processEvent()</code> must extract the <code>UIComponent</code>
-from the argument event pass it to <a target="_"
-href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent,%20java.lang.String)"><code>UIViewRoot.addComponentResource()</code></a>, specifying
-the literal string "<code>head</code>" as the last argument.</p>
-
-<p>The stylsheet renderer must ensure that any stylesheets are included in the <head> of the document. 
-</p>
-
-</div>]]></description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.resource.Stylesheet</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.StylesheetRenderer
-    </renderer-class>
-
-      <attribute>
-        <description><![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]></description>
-        <display-name>Resource Name</display-name>
-        <icon/>
-        <attribute-name>name</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-          <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description><![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]></description>
-        <display-name>Library Name</display-name>
-        <icon/>
-        <attribute-name>library</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <required>false</required>
-          <tag-attribute>true</tag-attribute>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <jsp-ignore>true</jsp-ignore>
-        <renders-children>true</renders-children>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Render the markup for a <code><head></code> element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-<p>Render the starting <code><head></code> element tag.  Any attributes declared on the element must be passed through
-unmodified to the rendered output.  
-At some point before rendering the
-      closing <code></head></code> element tag, render any resources that have been targeted
-      for this "head" element:
-      <ul>
-      <li>Obtain a <code>UIViewRoot</code> instance.</li>
-      <li>Obtain a <code>List</code> of component resources targeted for
-      this "head" element with a call to <code>UIViewRoot.getComponentResources()</code>
-      with the <code>String "head"</code> as the argument.</li>
-      <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
-      and call <code>encodeAll</code> on each <code>UIComponent</code> instance. 
-
-<p>Any attributes declared on the element must be passed through
-unmodified to the rendered output.</p>
-
-      </ul>
-
-      <p>Note that due to the cascading nature of CSS files, the order
-      in which these files have been added to the view must be preserved
-      when rendering the references to the files within the
-      <code><head></code> element.  Also, the end result of the
-      rendered <code><head></code> section must be that any CSS
-      files referenced due to previous calls to
-      <code>addComponentResource()</code> do not adversely interfere
-      with any CSS files manually placed in this section by the page
-      author.</p>
-
-      <p>Render the ending <code></head></code> element tag.</p>
-
-</div>]]></description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Head</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.HeadRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-      <renderer-extension>
-        <jsp-ignore>true</jsp-ignore>
-        <tag-name>head</tag-name>
-      </renderer-extension>
-    </renderer>
-    <renderer>
-      <description><![CDATA[<div class="changed_added_2_0">
-
-<p>Render the markup for a <code><body></code> element.</p>
-
-      <p>Decode Behavior</p>
-
-      <ul>
-
-<p>No action is required during decode for this renderer.</p>
-
-</ul>
-
-      <p>Encode Behavior</p>
-
-      <ul>
-
-<p>Render the starting <code><body></code> element tag. Just before rendering the
-      closing <code></body></code> element tag, render any resources that have been targeted
-      for this "body" element:
-      <ul>
-      <li>Obtain a <code>UIViewRoot</code> instance.</li>
-
-      <li>Obtain a <code>List</code> of component resources targeted for
-      this "body" element with a call to
-      <code>UIViewRoot.getComponentResources()</code> with the
-      <code>String "body"</code> as the argument.  Render the ending
-      <code></body></code> element tag.</li>
-
-      <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
-      and call <code>encodeAll</code> on each <code>UIComponent</code> instance.
-      </ul>
-
-<p>Any attributes declared on the element must be passed through
-unmodified to the rendered output.</p>
-
-</div>]]></description>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Body</renderer-type>
-      <renderer-class>
-        com.sun.faces.renderkit.html_basic.BodyRenderer
-    </renderer-class>
-
-      <attribute>
-        <description>
-          CSS style(s) to be applied when this component is rendered.
-        </description>
-        <display-name>CSS Styles</display-name>
-        <icon/>
-        <attribute-name>style</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-        </description>
-        <display-name>CSS Style Classes</display-name>
-        <icon/>
-        <attribute-name>styleClass</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>false</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Advisory title information about markup elements generated
-          for this component.
-        </description>
-        <display-name>Advisory Title</display-name>
-        <icon/>
-        <attribute-name>title</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Direction indication for text that does not inherit directionality.
-          Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).
-        </description>
-        <display-name>Direction</display-name>
-        <icon/>
-        <attribute-name>dir</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Code describing the language used in the generated markup
-          for this component.
-        </description>
-        <display-name>Language Code</display-name>
-        <icon/>
-        <attribute-name>lang</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-        </attribute-extension>
-      </attribute>
-
-
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          clicked over this element.
-        </description>
-        <display-name>Button Click Script</display-name>
-        <icon/>
-        <attribute-name>onclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          double clicked over this element.
-        </description>
-        <display-name>Double Click Script</display-name>
-        <icon/>
-        <attribute-name>ondblclick</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          pressed down over this element.
-        </description>
-        <display-name>Mouse Down Script</display-name>
-        <icon/>
-        <attribute-name>onmousedown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          released over this element.
-        </description>
-        <display-name>Mouse Up Script</display-name>
-        <icon/>
-        <attribute-name>onmouseup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved onto this element.
-        </description>
-        <display-name>Mouse Over Script</display-name>
-        <icon/>
-        <attribute-name>onmouseover</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved within this element.
-        </description>
-        <display-name>Mouse Move Script</display-name>
-        <icon/>
-        <attribute-name>onmousemove</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a pointer button is
-          moved away from this element.
-        </description>
-        <display-name>Mouse Out Script</display-name>
-        <icon/>
-        <attribute-name>onmouseout</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed and released over this element.
-        </description>
-        <display-name>Key Press Script</display-name>
-        <icon/>
-        <attribute-name>onkeypress</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          pressed down over this element.
-        </description>
-        <display-name>Key Down Script</display-name>
-        <icon/>
-        <attribute-name>onkeydown</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-          Javascript code executed when a key is
-          released over this element.
-        </description>
-        <display-name>Key Up Script</display-name>
-        <icon/>
-        <attribute-name>onkeyup</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-
-      <attribute>
-        <description>
-                   Javascript code executed when the user agent finishes loading
-                   a window or all frames within a frameset.
-               </description>
-        <display-name>Body Onload Script</display-name>
-        <icon/>
-        <attribute-name>onload</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <attribute>
-        <description>
-                   Javascript code executed when the user agent removes 
-                   a document from a window or frame. 
-               </description>
-        <display-name>Body Onunload Script</display-name>
-        <icon/>
-        <attribute-name>onunload</attribute-name>
-        <attribute-class>java.lang.String</attribute-class>
-        <attribute-extension>
-          <pass-through>true</pass-through>
-          <behavior/>
-        </attribute-extension>
-      </attribute>
-      <renderer-extension>
-        <jsp-ignore>true</jsp-ignore>
-        <tag-name>body</tag-name>
-      </renderer-extension>
-    </renderer>
-  </render-kit>
-</faces-config>
diff --git a/jsf-api/doc/table-props.xml b/jsf-api/doc/table-props.xml
deleted file mode 100644
index 6cd8537..0000000
--- a/jsf-api/doc/table-props.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Table Properties =========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Name or code of the background color for this table.
-        </description>
-        <display-name>Background Color</display-name>
-        <icon></icon>
-        <property-name>bgcolor</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Width (in pixels) of the border to be drawn
-          around this table.
-        </description>
-        <display-name>Table Border</display-name>
-        <icon></icon>
-        <property-name>border</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Definition of how much space the user agent should
-          leave between the border of each cell and its contents.
-        </description>
-        <display-name>Cell Padding</display-name>
-        <icon></icon>
-        <property-name>cellpadding</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Definition of how much space the user agent should
-          leave between the left side of the table and the
-          leftmost column, the top of the table and the top of
-          the top side of the topmost row, and so on for the
-          right and bottom of the table.  It also specifies
-          the amount of space to leave between cells.
-        </description>
-        <display-name>Cell Spacing</display-name>
-        <icon></icon>
-        <property-name>cellspacing</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the columns of this table.  A space separated list of
-          classes may also be specified for any individual column.  If
-          the number of elements in this list is less than the number of
-          actual column children of the UIData, no "class"
-          attribute is output for each column greater than the number of
-          elements in the list.  If the number of elements in the list
-          is greater than the number of actual column children of the
-          UIData, the elements at the posisiton in the list
-          after the last column are ignored.
-        </description>
-        <display-name>Column CSS Classes</display-name>
-        <icon></icon>
-        <property-name>columnClasses</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any footer generated for this table.
-        </description>
-        <display-name>Footer CSS Classes</display-name>
-        <icon></icon>
-        <property-name>footerClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Code specifying which sides of the frame surrounding
-          this table will be visible.  Valid values are:
-          none (no sides, default value); above (top side only);
-          below (bottom side only); hsides (top and bottom sides
-          only); vsides (right and left sides only); lhs (left
-          hand side only); rhs (right hand side only); box
-          (all four sides); and border (all four sides).
-        </description>
-        <display-name>Table Frame</display-name>
-        <icon></icon>
-        <property-name>frame</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any caption generated for this table.
-        </description>
-        <display-name>Caption CSS Classes</display-name>
-        <icon></icon>
-        <property-name>captionClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-                                                                                        
-    <property>
-        <description>
-          CSS style(s) to be applied when this caption is rendered.
-        </description>
-        <display-name>Caption CSS Styles</display-name>
-        <icon></icon>
-        <property-name>captionStyle</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Space-separated list of CSS style class(es) that will be
-          applied to any header generated for this table.
-        </description>
-        <display-name>Header CSS Classes</display-name>
-        <icon></icon>
-        <property-name>headerClass</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Comma-delimited list of CSS style classes that will be applied
-          to the rows of this table.  A space separated list of classes
-          may also be specified for any individual row.  Thes styles are
-          applied, in turn, to each row in the table.  For example, if
-          the list has two elements, the first style class in the list
-          is applied to the first row, the second to the second row, the
-          first to the third row, the second to the fourth row, etc.  In
-          other words, we keep iterating through the list until we reach
-          the end, and then we start at the beginning again.
-        </description>
-        <display-name>Row CSS Classes</display-name>
-        <icon></icon>
-        <property-name>rowClasses</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Code specifying which rules will appear between cells
-          within this table.  Valid values are:  none (no rules,
-          default value); groups (between row groups); rows
-          (between rows only); cols (between columns only); and
-          all (between all rows and columns).
-        </description>
-        <display-name>Table Rules</display-name>
-        <icon></icon>
-        <property-name>rules</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Summary of this table's purpose and structure, for
-          user agents rendering to non-visual media such as
-          speech and Braille.
-        </description>
-        <display-name>Table Summary</display-name>
-        <icon></icon>
-        <property-name>summary</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Width of the entire table, for visual user agents.
-        </description>
-        <display-name>Table Width</display-name>
-        <icon></icon>
-        <property-name>width</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-    <property>
-        <description>
-          Comma separated list of row indices for which a new
-          "tbody" element should be started (and any
-          previously opened one should be ended).
-        </description>
-        <display-name>Body Rows</display-name>
-        <icon></icon>
-        <property-name>bodyrows</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-</root>
diff --git a/jsf-api/doc/text-props.xml b/jsf-api/doc/text-props.xml
deleted file mode 100644
index 5931460..0000000
--- a/jsf-api/doc/text-props.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== Text Properties ============================================ -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Alternate textual description of the
-          element rendered by this component.
-        </description>
-        <display-name>Alternate Text</display-name>
-        <icon></icon>
-        <property-name>alt</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-        If the value of this attribute is "off", render "off" as the value
-        of the attribute. This indicates that the  browser should
-        disable its autocomplete feature for this component.  This is
-        useful for components that perform autocompletion and do not
-        want the browser interfering.  If this attribute is not set or the value 
-        is "on", render nothing.
-        </description>
-        <display-name>Enable or disable browser autocompletion.</display-name>
-        <icon></icon>
-        <property-name>autocomplete</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          The maximum number of characters that may
-          be entered in this field.
-        </description>
-        <display-name>Maximum Length</display-name>
-        <icon></icon>
-        <property-name>maxlength</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The number of characters used to determine
-          the width of this field.
-        </description>
-        <display-name>Field Width</display-name>
-        <icon></icon>
-        <property-name>size</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <pass-through>true</pass-through>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/uicolumn-props.xml b/jsf-api/doc/uicolumn-props.xml
deleted file mode 100644
index f560cc8..0000000
--- a/jsf-api/doc/uicolumn-props.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIColumn Properties ======================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-</root>
-
diff --git a/jsf-api/doc/uicommand-props.xml b/jsf-api/doc/uicommand-props.xml
deleted file mode 100644
index 53bfdc1..0000000
--- a/jsf-api/doc/uicommand-props.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UICommand Properties ======================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-    <xi:include href="actionsource-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          The current value of this component.
-        </description>
-        <display-name>Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/uicomponent-props.xml b/jsf-api/doc/uicomponent-props.xml
deleted file mode 100644
index c01f905..0000000
--- a/jsf-api/doc/uicomponent-props.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIComponent Properties ===================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <property>
-        <description><![CDATA[
-          A mutable Map of the attributes associated with
-          this component, keyed by attribute name.
-        ]]></description>
-        <display-name>Attributes Map</display-name>
-        <icon></icon>
-        <property-name>attributes</property-name>
-        <property-class>java.util.Map</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <read-only>true</read-only>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          The number of child components associated with
-          this component.
-        ]]></description>
-        <display-name>Child Component Count</display-name>
-        <icon></icon>
-        <property-name>childCount</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <read-only>true</read-only>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          A mutable List of the child components associated with
-          this component.
-        ]]></description>
-        <display-name>Child Component List</display-name>
-        <icon></icon>
-        <property-name>children</property-name>
-        <property-class>java.util.List</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <read-only>true</read-only>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          A mutable Map of the facets associated with
-          this component, keyed by facet name.
-        ]]></description>
-        <display-name>Facets Map</display-name>
-        <icon></icon>
-        <property-name>facets</property-name>
-        <property-class>java.util.Map</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <read-only>true</read-only>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          The component family to which this component belongs.  This property
-          is used to select an appropriate Renderer.
-        ]]></description>
-        <display-name>Component Family</display-name>
-        <icon></icon>
-        <property-name>family</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <read-only>true</read-only>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          The component identifier for this component.  This value must be
-          unique within the closest parent component that is a naming
-          container.
-        ]]></description>
-        <display-name>Component Identifier</display-name>
-        <icon></icon>
-        <property-name>id</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          The parent component for this component.  On the root component
-          in the component tree (which must be of type UIViewRoot), this
-          property is null.
-        ]]></description>
-        <display-name>Parent Component</display-name>
-        <icon></icon>
-        <property-name>parent</property-name>
-        <property-class>javax.faces.component.UIComponent</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <read-only>true</read-only>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.  The default value for this property is true.
-        ]]></description>
-        <display-name>Rendered Flag</display-name>
-        <icon></icon>
-        <property-name>rendered</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          Identifier used (in conjunction with the "family" property) to
-          select an appropriate Renderer to encode and decode this component.
-        ]]></description>
-        <display-name>Renderer Type</display-name>
-        <icon></icon>
-        <property-name>rendererType</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description><![CDATA[
-          Flag indicating whether or not this component takes responsibility
-          for rendering its own children.  This decision is normally delegated
-          to the associated Renderer, if there is one.
-        ]]></description>
-        <display-name>Renders Children</display-name>
-        <icon></icon>
-        <property-name>rendersChildren</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <read-only>true</read-only>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/uidata-props.xml b/jsf-api/doc/uidata-props.xml
deleted file mode 100644
index 5d981b0..0000000
--- a/jsf-api/doc/uidata-props.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIData Properties ========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Zero-relative row number of the first row to be displayed.  If this
-          property is set to zero, rendering will begin with the first row of
-          the underlying data.
-        </description>
-        <display-name>First Row Index</display-name>
-        <icon></icon>
-        <property-name>first</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether there is model data available for the row
-          selected by the current value of the "rowIndex" property.
-        </description>
-        <display-name>Row Available Flag</display-name>
-        <icon></icon>
-        <property-name>rowAvailable</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The number of rows of model data that are available for processing
-          by this component.  If the number of rows is unknown, this property
-          will be set to -1.
-        </description>
-        <display-name>Row Count</display-name>
-        <icon></icon>
-        <property-name>rowCount</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          An object representing the model data for the row selected by the
-          current value of the "rowIndex" property.
-        </description>
-        <display-name>Row Data</display-name>
-        <icon></icon>
-        <property-name>rowData</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Zero-relative index of the currently selected row from the underlying
-          model data.  No error will occur if this property is set to point at
-          a row for which no model data exists.  To ensure data availability,
-          check the state of the "rowAvailable" property after modifying this
-          property.
-        </description>
-        <display-name>Row Index</display-name>
-        <icon></icon>
-        <property-name>rowIndex</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-            <value-expression-enabled>true</value-expression-enabled>        
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The number of rows to display, starting with the one identified by the
-          "first" property.  If this value is set to zero, all available rows in
-          the underlying data model will be displayed.
-        </description>
-        <display-name>Rows To Display</display-name>
-        <icon></icon>
-        <property-name>rows</property-name>
-        <property-class>int</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The current value of this component.
-        </description>
-        <display-name>Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Name of a request-scope attribute under which the model data for the
-          row selected by the current value of the "rowIndex" property (i.e.
-          also the current value of the "rowData" property) will be exposed.
-        </description>
-        <display-name>Row Data Attribute</display-name>
-        <icon></icon>
-        <property-name>var</property-name>
-        <property-class>java.lang.String</property-class>       
-    </property>
-</root>
diff --git a/jsf-api/doc/uiform-props.xml b/jsf-api/doc/uiform-props.xml
deleted file mode 100644
index eff7ed0..0000000
--- a/jsf-api/doc/uiform-props.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIForm Properties ========================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Flag indicating whether or not this form was the one submitted by
-          the user.  If this flag is not set, child input components are not
-          processed.
-        </description>
-        <display-name>Submitted Flag</display-name>
-        <icon></icon>
-        <property-name>submitted</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-    <property>
-        <description>
-          Flag indicating whether or not this form should prepend its id
-          to its descendent's id during the clientId generation process.
-          If this flag is not set, the default value is true.
-        </description>
-        <display-name>Prepend Id During getClientId()</display-name>
-        <icon></icon>
-        <property-name>prependId</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>true</default-value>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/uigraphic-props.xml b/jsf-api/doc/uigraphic-props.xml
deleted file mode 100644
index 4ab1c76..0000000
--- a/jsf-api/doc/uigraphic-props.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIGraphic Properties ======================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Context-relative URL to retrieve the resource associated with
-          this component.  This is an alias for the "value" property.
-        </description>
-        <display-name>Source URL</display-name>
-        <icon></icon>
-        <property-name>url</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The current value of this component.
-        </description>
-        <display-name>Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/uiinput-props.xml b/jsf-api/doc/uiinput-props.xml
deleted file mode 100644
index f375cdf..0000000
--- a/jsf-api/doc/uiinput-props.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIInput Properties ========================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uioutput-props.xml" xpointer="xpointer(/root/*)"/>
-    <xi:include href="editable-props.xml" xpointer="xpointer(/root/*)"/>
-</root>
-
diff --git a/jsf-api/doc/uimessage-props.xml b/jsf-api/doc/uimessage-props.xml
deleted file mode 100644
index a799b01..0000000
--- a/jsf-api/doc/uimessage-props.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIMessage Properties ======================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Client identifier of the component for which to display messages.
-        </description>
-        <display-name>Associated Client Id</display-name>
-        <icon></icon>
-        <property-name>for</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <required>true</required>
-            <value-expression-enabled>true</value-expression-enabled>        
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether the detail portion of displayed messages
-          should be included.  Default value is "true".
-        </description>
-        <display-name>Show Detail</display-name>
-        <icon></icon>
-        <property-name>showDetail</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>true</default-value>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether the summary portion of displayed messages
-          should be included.  Default value is "false".
-        </description>
-        <display-name>Show Summary</display-name>
-        <icon></icon>
-        <property-name>showSummary</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>false</default-value>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/uimessages-props.xml b/jsf-api/doc/uimessages-props.xml
deleted file mode 100644
index 781fd45..0000000
--- a/jsf-api/doc/uimessages-props.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIMessages Properties ====================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Flag indicating that only global messages (that is, messages not
-          associated with any client identifier) are to be displayed.
-          Default value is "false".
-        </description>
-        <display-name>Global Only</display-name>
-        <icon></icon>
-        <property-name>globalOnly</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>false</default-value>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Client identifier of the component for which to display messages. This
-          attribute is mutually exclusive with globalOnly and take precedence
-          if used.
-        </description>
-        <display-name>Associated Client Id</display-name>
-        <icon></icon>
-        <property-name>for</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <required>false</required>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether the detail portion of displayed messages
-          should be included.  Default value is "false".
-        </description>
-        <display-name>Show Detail</display-name>
-        <icon></icon>
-        <property-name>showDetail</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>false</default-value>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating whether the summary portion of displayed messages
-          should be included.  Default value is "true".
-        </description>
-        <display-name>Show Summary</display-name>
-        <icon></icon>
-        <property-name>showSummary</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <default-value>true</default-value>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/uinamingcontainer-props.xml b/jsf-api/doc/uinamingcontainer-props.xml
deleted file mode 100644
index e1b7db2..0000000
--- a/jsf-api/doc/uinamingcontainer-props.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UINamingContainer Properties =============================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-</root>
-
diff --git a/jsf-api/doc/uioutcometarget-props.xml b/jsf-api/doc/uioutcometarget-props.xml
deleted file mode 100644
index 548ce95..0000000
--- a/jsf-api/doc/uioutcometarget-props.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UICommand Properties ======================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uioutput-props.xml" xpointer="xpointer(/root/*)"/>
-    <property>
-        <description>
-          The logical outcome used to resolve a navigation case.
-        </description>
-        <display-name>Outcome</display-name>
-        <icon></icon>
-        <property-name>outcome</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-    <property>
-        <description>
-          Whether to include page parameters in the target URI.
-        </description>
-        <display-name>Include Page Parameters</display-name>
-        <icon></icon>
-        <property-name>includeViewParams</property-name>
-        <property-class>java.lang.Boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-    <property>
-        <description>
-          Return the URI fragment, as specified in RFC 2396.
-        </description>
-        <display-name>HTML Fragment</display-name>
-        <icon></icon>
-        <property-name>fragment</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-   
-</root>
-
diff --git a/jsf-api/doc/uioutput-props.xml b/jsf-api/doc/uioutput-props.xml
deleted file mode 100644
index 4a28709..0000000
--- a/jsf-api/doc/uioutput-props.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIOutput Properties ======================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-    <xi:include href="valueholder-props.xml" xpointer="xpointer(/root/*)"/>
-</root>
-
diff --git a/jsf-api/doc/uipanel-props.xml b/jsf-api/doc/uipanel-props.xml
deleted file mode 100644
index 82bc505..0000000
--- a/jsf-api/doc/uipanel-props.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIPanel Properties ========================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-</root>
-
diff --git a/jsf-api/doc/uiparameter-props.xml b/jsf-api/doc/uiparameter-props.xml
deleted file mode 100644
index c5d7bbf..0000000
--- a/jsf-api/doc/uiparameter-props.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIParameter Properties ===================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Name of the parameter associated with this component.
-        </description>
-        <display-name>Property Name</display-name>
-        <icon></icon>
-        <property-name>name</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Value of the parameter associated with this component.
-        </description>
-        <display-name>Property Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/uiselectboolean-props.xml b/jsf-api/doc/uiselectboolean-props.xml
deleted file mode 100644
index 04bb00f..0000000
--- a/jsf-api/doc/uiselectboolean-props.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UISelectBoolean Properties ================================= -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <!-- manually include the properties for valueholder as we need to
-         special-case the handling of value -->
-
-    <property>
-        <description>
-            Converter instance registered with this component.
-        </description>
-        <display-name>Converter</display-name>
-        <icon></icon>
-        <property-name>converter</property-name>
-        <property-class>javax.faces.convert.Converter</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-            For output components, this is the same as the "value" property.
-            For input components, this is the most recently user-entered
-            value, which will be pushed to the application data model during
-            Update Model Values phase, if a value binding is present for the
-            "value" property.
-        </description>
-        <display-name>Local Value</display-name>
-        <icon></icon>
-        <property-name>localValue</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-            The current value of this component.
-        </description>
-        <display-name>Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Boolean</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <xi:include href="editable-props.xml" xpointer="xpointer(/root/*)"/>
-
-
-    <property>
-        <description>
-            Flag indicating whether the user has selected this component.
-            This is an alias for the "value" property.
-        </description>
-        <display-name>Selected Flag</display-name>
-        <icon></icon>
-        <property-name>selected</property-name>
-        <property-class>boolean</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/uiselectitem-props.xml b/jsf-api/doc/uiselectitem-props.xml
deleted file mode 100644
index 82359e0..0000000
--- a/jsf-api/doc/uiselectitem-props.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UISelectItem Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Description of the selection item represented by this component.
-          This property may be used by tools.
-        </description>
-        <display-name>Item Description</display-name>
-        <icon></icon>
-        <property-name>itemDescription</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          Flag indicating that the selection item represented by this component
-          must be rendered as disabled.
-        </description>
-        <display-name>Item Disabled</display-name>
-        <icon></icon>
-        <property-name>itemDisabled</property-name>
-        <property-class>boolean</property-class>
-    </property>
-
-    <property>
-        <description>
-          Label of the selection item represented by this component.  This
-          property is displayed to the user when the containing input
-          component is rendered.
-        </description>
-        <display-name>Item Label</display-name>
-        <icon></icon>
-        <property-name>itemLabel</property-name>
-        <property-class>java.lang.String</property-class>
-    </property>
-
-    <property>
-        <description>
-          The value returned to the server when a user chooses the selection
-          item represented by this component.
-        </description>
-        <display-name>Item Value</display-name>
-        <icon></icon>
-        <property-name>itemValue</property-name>
-        <property-class>java.lang.Object</property-class>
-    </property>
-
-    <property>
-        <description>
-          The current value of this component.
-        </description>
-        <display-name>Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/uiselectitems-props.xml b/jsf-api/doc/uiselectitems-props.xml
deleted file mode 100644
index 86d5aef..0000000
--- a/jsf-api/doc/uiselectitems-props.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UISelectItem Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          The current value of this component.
-        </description>
-        <display-name>Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/uiselectmany-props.xml b/jsf-api/doc/uiselectmany-props.xml
deleted file mode 100644
index a2d33e2..0000000
--- a/jsf-api/doc/uiselectmany-props.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UISelectMany Properties ==================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Array containing the selected values for this component.
-          This is an alias for the "value" property.
-        </description>
-        <display-name>Selected Values</display-name>
-        <icon></icon>
-        <property-name>selectedValues</property-name>
-        <property-class>java.lang.Object[]</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-</root>
-
diff --git a/jsf-api/doc/uiselectone-props.xml b/jsf-api/doc/uiselectone-props.xml
deleted file mode 100644
index e021344..0000000
--- a/jsf-api/doc/uiselectone-props.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UISelectOne Properties ===================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uiinput-props.xml" xpointer="xpointer(/root/*)"/>
-</root>
diff --git a/jsf-api/doc/uiviewroot-props.xml b/jsf-api/doc/uiviewroot-props.xml
deleted file mode 100644
index 78ea93e..0000000
--- a/jsf-api/doc/uiviewroot-props.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== UIViewRoot Properties ====================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root xmlns:xi="http://www.w3.org/2001/XInclude">
-    <xi:include href="uicomponent-props.xml" xpointer="xpointer(/root/*)"/>
-
-    <property>
-        <description>
-          Locale to be used in localizing the rendered output of this view.
-        </description>
-        <display-name>Locale</display-name>
-        <icon></icon>
-        <property-name>locale</property-name>
-        <property-class>java.util.Locale</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Identifier of the RenderKit being used to display this view.
-        </description>
-        <display-name>Render Kit Id</display-name>
-        <icon></icon>
-        <property-name>renderKitId</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          Identifier of the view represented by this component tree.
-        </description>
-        <display-name>View Id</display-name>
-        <icon></icon>
-        <property-name>viewId</property-name>
-        <property-class>java.lang.String</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/valueholder-props.xml b/jsf-api/doc/valueholder-props.xml
deleted file mode 100644
index d8b5028..0000000
--- a/jsf-api/doc/valueholder-props.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== ValueHolder Properties ===================================== -->
-
-
-<!-- template
-
-      <property>
-        <description>
-        </description>
-        <display-name></display-name>
-        <icon></icon>
-        <property-name></property-name>
-        <property-class>java.lang.String</property-class>
-      </property>
-
--->
-<root>
-    <property>
-        <description>
-          Converter instance registered with this component.
-        </description>
-        <display-name>Converter</display-name>
-        <icon></icon>
-        <property-name>converter</property-name>
-        <property-class>javax.faces.convert.Converter</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          For output components, this is the same as the "value" property.
-          For input components, this is the most recently user-entered
-          value, which will be pushed to the application data model during
-          Update Model Values phase, if a value binding is present for the
-          "value" property.
-        </description>
-        <display-name>Local Value</display-name>
-        <icon></icon>
-        <property-name>localValue</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <tag-attribute>false</tag-attribute>
-        </property-extension>
-    </property>
-
-    <property>
-        <description>
-          The current value of this component.
-        </description>
-        <display-name>Value</display-name>
-        <icon></icon>
-        <property-name>value</property-name>
-        <property-class>java.lang.Object</property-class>
-        <property-extension>
-            <value-expression-enabled>true</value-expression-enabled>
-        </property-extension>
-    </property>
-</root>
diff --git a/jsf-api/doc/web-facelettaglibrary_2_0.xsd b/jsf-api/doc/web-facelettaglibrary_2_0.xsd
deleted file mode 100644
index 6802f5b..0000000
--- a/jsf-api/doc/web-facelettaglibrary_2_0.xsd
+++ /dev/null
@@ -1,512 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-<xsd:schema
-      targetNamespace="http://java.sun.com/xml/ns/javaee"
-      xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-      xmlns:xml="http://www.w3.org/XML/1998/namespace"
-      elementFormDefault="qualified"
-      attributeFormDefault="unqualified"
-      version="2.0">
-    <xsd:include schemaLocation="javaee_5.xsd"/>
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-
-<xsd:annotation>
-        <xsd:documentation>
-
-            <![CDATA[
-
-            The XML Schema for the Tag Libraries in the JavaServer Faces
-            Standard Facelets View Declaration Language (Facelets VDL)
-            (Version 2.0).
-
-            JSF 2.0 Facelet Tag Libraries that wish to conform to this
-            schema must declare it in the following manner.
-
-            <facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibary_2_0.xsd"
-              version="2.0">
-
-            ...
-
-            </facelet-taglib>
-
-            The instance documents may indicate the published
-            version of the schema using xsi:schemaLocation attribute
-            for javaee namespace with the following location:
-
-            http://java.sun.com/xml/ns/javaee/web-facelettaglibary_2_0.xsd
-
-            ]]>
-
-        </xsd:documentation>
-    </xsd:annotation>
-
-
-
-    <xsd:element name="facelet-taglib" type="javaee:facelet-taglibType">
-        <xsd:unique name="facelet-taglib-tagname-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    tag-names must be unique within a document.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:selector xpath="javaee:tag"/>
-            <xsd:field xpath="javaee:tag-name"/>
-        </xsd:unique>
-        <xsd:unique name="faces-config-behavior-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Behavior IDs must be unique within a document.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:selector xpath="javaee:behavior"/>
-            <xsd:field xpath="javaee:behavior-id"/>
-        </xsd:unique>
-        <xsd:unique name="faces-config-converter-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Converter IDs must be unique within a document.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:selector xpath="javaee:converter"/>
-            <xsd:field xpath="javaee:converter-id"/>
-        </xsd:unique>
-        <xsd:unique name="faces-config-validator-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Validator IDs must be unique within a document.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:selector xpath="javaee:validator"/>
-            <xsd:field xpath="javaee:validator-id"/>
-        </xsd:unique>
-    </xsd:element>
-    <xsd:complexType name="facelet-taglibType">
-        <xsd:annotation>
-            <xsd:documentation>
-                The top level XML element in a facelet tag library XML file.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:choice>
-                <xsd:element name="library-class"
-                             type="javaee:fully-qualified-classType"/>
-                <xsd:sequence>
-                    <xsd:element name="namespace" type="javaee:string"/>
-                    <xsd:element minOccurs="0" maxOccurs="1"
-                                 name="composite-library-name"
-                                 type="javaee:fully-qualified-classType"/>
-                    <xsd:choice minOccurs="0" maxOccurs="unbounded">
-                        <xsd:element name="tag"
-                                     type="javaee:facelet-taglib-tagType"/>
-                        <xsd:element name="function"
-                                     type="javaee:facelet-taglib-functionType"/>
-
-                    </xsd:choice>
-                </xsd:sequence>
-            </xsd:choice>
-            <xsd:element name="taglib-extension"
-                         type="javaee:facelet-taglib-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-        <xsd:attribute name="version"
-                       type="javaee:facelet-taglib-versionType"
-                       use="required"/>
-    </xsd:complexType>
-    <xsd:complexType name="facelet-taglib-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for facelet-taglib. It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="facelet-taglib-tagType">
-        <xsd:annotation>
-            <xsd:documentation>
-                If the tag library XML file contains individual tag
-                declarations rather than pointing to a library-class or a
-                declaring a composite-library name, the individual tags are
-                enclosed in tag elements.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="tag-name"
-                         type="javaee:facelet-taglib-canonical-nameType"/>
-            <xsd:choice>
-                <xsd:element name="handler-class"
-                             type="javaee:fully-qualified-classType"/>
-                <xsd:element name="behavior"
-                             type="javaee:facelet-taglib-tag-behaviorType"/>
-                <xsd:element name="component"
-                             type="javaee:facelet-taglib-tag-componentType"/>
-                <xsd:element name="converter"
-                             type="javaee:facelet-taglib-tag-converterType"/>
-                <xsd:element name="validator"
-                             type="javaee:facelet-taglib-tag-validatorType"/>
-                <xsd:element name="source" type="javaee:string"/>
-            </xsd:choice>
-            <xsd:element name="attribute"
-                         type="javaee:facelet-taglib-tag-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="tag-extension"
-                         type="javaee:facelet-taglib-tag-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="facelet-taglib-tag-attributeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The attribute element defines an attribute for the nesting
-                tag. The attribute element may have several subelements
-                defining:
-
-                description a description of the attribute
-
-                name the name of the attribute
-
-                required whether the attribute is required or
-                optional
-
-                type the type of the attribute
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="name"
-                         type="javaee:xsdNMTOKENType"/>
-            <xsd:element name="required"
-                         type="javaee:generic-booleanType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        Defines if the nesting attribute is required or
-                        optional.
-
-                        If not present then the default is "false", i.e
-                        the attribute is optional.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="type"
-                             type="javaee:fully-qualified-classType"
-                             minOccurs="0">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            Defines the Java type of the attributes
-                            value. If this element is omitted, the
-                            expected type is assumed to be
-                            "java.lang.Object".
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-                <xsd:element name="method-signature"
-                             type="javaee:string"
-                             minOccurs="0">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            Defines the method signature for a MethodExpression-
-                            enabled attribute.
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <xsd:complexType name="facelet-taglib-tag-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for tag It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="facelet-taglib-functionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                If the tag library XML file contains individual function
-                declarations rather than pointing to a library-class or a
-                declaring a composite-library name, the individual functions are
-                enclosed in function elements.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="function-name" type="javaee:string"/>
-            <xsd:element name="function-class"
-                         type="javaee:fully-qualified-classType"/>
-            <xsd:element name="function-signature" type="javaee:string"/>
-        </xsd:sequence>
-    </xsd:complexType>
-    <xsd:complexType name="facelet-taglib-tag-behaviorType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Within a tag element, the behavior element encapsulates
-                information specific to a JSF Behavior.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element minOccurs="1" maxOccurs="1"
-                         name="behavior-id" type="javaee:string"/>
-            <xsd:element minOccurs="0" maxOccurs="1"
-                         name="handler-class"
-                         type="javaee:fully-qualified-classType"/>
-            <xsd:element name="behavior-extension"
-                         type="javaee:facelet-taglib-tag-behavior-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-    <xsd:complexType name="facelet-taglib-tag-behavior-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for behavior. It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-    <xsd:complexType name="facelet-taglib-tag-componentType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Within a tag element, the component element encapsulates
-                information specific to a JSF UIComponent.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="component-type" type="javaee:string"/>
-            <xsd:element minOccurs="0" maxOccurs="1"
-                         name="renderer-type" type="javaee:string"/>
-            <xsd:element minOccurs="0" maxOccurs="1"
-                         name="handler-class"
-                         type="javaee:fully-qualified-classType"/>
-            <xsd:element name="component-extension"
-                         type="javaee:facelet-taglib-tag-component-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-
-        </xsd:sequence>
-    </xsd:complexType>
-    <xsd:complexType name="facelet-taglib-tag-component-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for component It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="facelet-taglib-tag-converterType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Within a tag element, the converter element encapsulates
-                information specific to a JSF Converter.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element minOccurs="1" maxOccurs="1"
-                         name="converter-id" type="javaee:string"/>
-            <xsd:element minOccurs="0" maxOccurs="1"
-                         name="handler-class"
-                         type="javaee:fully-qualified-classType"/>
-            <xsd:element name="converter-extension"
-                         type="javaee:facelet-taglib-tag-converter-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-    <xsd:complexType name="facelet-taglib-tag-converter-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for converter It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="facelet-taglib-tag-validatorType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Within a tag element, the validator element encapsulates
-                information specific to a JSF Validator.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element minOccurs="1" maxOccurs="1"
-                         name="validator-id" type="javaee:string"/>
-            <xsd:element minOccurs="0" maxOccurs="1"
-                         name="handler-class"
-                         type="javaee:fully-qualified-classType"/>
-            <xsd:element name="validator-extension"
-                         type="javaee:facelet-taglib-tag-validator-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-    <xsd:complexType name="facelet-taglib-tag-validator-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for validator It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-    <xsd:simpleType name="facelet-taglib-versionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                This type contains the recognized versions of
-                facelet-taglib supported.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="2.0"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <xsd:complexType name="facelet-taglib-canonical-nameType">
-
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Defines the canonical name of a tag or attribute being
-                defined.
-
-                The name must conform to the lexical rules for an NCName
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:simpleContent>
-            <xsd:extension base="xsd:NCName">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-</xsd:schema>
diff --git a/jsf-api/doc/web-facesconfig_1_0.dtd b/jsf-api/doc/web-facesconfig_1_0.dtd
deleted file mode 100644
index d2826b8..0000000
--- a/jsf-api/doc/web-facesconfig_1_0.dtd
+++ /dev/null
@@ -1,909 +0,0 @@
-<!-- 
-/* 
-* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 
-* 
-* Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-* 
-* The contents of this file are subject to the terms of either the GNU 
-* General Public License Version 2 only ("GPL") or the Common Development 
-* and Distribution License("CDDL") (collectively, the "License").  You 
-* may not use this file except in compliance with the License. You can obtain 
-* a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html 
-* or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific 
-* language governing permissions and limitations under the License. 
-* 
-* When distributing the software, include this License Header Notice in each 
-* file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. 
-* Sun designates this particular file as subject to the "Classpath" exception 
-* as provided by Sun in the GPL Version 2 section of the License file that 
-* accompanied this code.  If applicable, add the following below the License 
-* Header, with the fields enclosed by brackets [] replaced by your own 
-* identifying information: "Portions Copyrighted [year] 
-* [name of copyright owner]" 
-* 
-* Contributor(s): 
-* 
-* If you wish your version of this file to be governed by only the CDDL or 
-* only the GPL Version 2, indicate your decision by adding "[Contributor] 
-* elects to include this software in this distribution under the [CDDL or GPL 
-* Version 2] license."  If you don't indicate a single choice of license, a 
-* recipient has the option to distribute your version of this file under 
-* either the CDDL, the GPL Version 2 or to extend the choice of license to 
-* its licensees as provided above.  However, if you add GPL Version 2 code 
-* and therefore, elected the GPL Version 2 license, then the option applies 
-* only if the new code is made subject to such option by the copyright 
-* holder. 
-*/ 
--->
-<!--
-    DTD for the JavaServer Faces Application Configuration File (Version 1.0)
-
-    To support validation of your configuration file(s), include the following
-    DOCTYPE element at the beginning (after the "xml" declaration):
-
-    <!DOCTYPE faces-config PUBLIC
-     "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
-     "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
-
--->
-
-
-<!-- ==================== Defined Types =================================== -->
-
-
-<!--
-    An "Action" is a String that represents a method binding
-    expression that points at a method with no arguments that returns a
-    String.  It must be bracketed with "#{}", for example,
-    "#{cardemo.buyCar}".
--->
-<!ENTITY % Action "CDATA">
-
-
-<!--
-    A "ClassName" is the fully qualified name of a Java class that is
-    instantiated to provide the functionality of the enclosing element.
--->
-<!ENTITY % ClassName "CDATA">
-
-
-<!--
-    An "Identifier" is a string of characters that conforms to the variable
-    naming conventions of the Java programming language (JLS Section ?.?.?).
--->
-<!ENTITY % Identifier "CDATA">
-
-
-<!--
-    A "JavaType" is either the fully qualified name of a Java class that is
-    instantiated to provide the functionality of the enclosing element, or
-    the name of a Java primitive type (such as int or char).  The class name
-    or primitive type may optionally be followed by "[]" to indicate that
-    the underlying data must be an array, rather than a scalar variable.
--->
-<!ENTITY % JavaType "CDATA">
-
-
-<!--
-    A "Language" is a lower case two-letter code for a language as defined
-    by ISL-639.
--->
-<!ENTITY % Language "CDATA">
-
-
-<!--
-    A "ResourcePath" is the relative or absolute path to a resource file
-    (such as a logo image).
--->
-<!ENTITY % ResourcePath "CDATA">
-
-
-<!--
-    A "Scope" is the well-known name of a scope in which managed beans may
-    optionally be defined to be created in.
--->
-<!ENTITY % Scope "(request|session|application)">
-
-
-
-<!--
-    A "ScopeOrNone" element defines the legal values for the
-    <managed-bean-scope> element's body content, which includes
-    all of the scopes respresented by the "Scope" type, plus the
-    "none" value indicating that a created bean should not be
-    stored into any scope.
--->
-<!ENTITY % ScopeOrNone "(request|session|application|none)">
-
-
-<!--
-    A "ViewIdPattern" is a pattern for matching view identifiers in
-    order to determine whether a particular navigation rule should be
-    fired.  It must contain one of the following values:
-
-    - The exact match for a view identifier that is recognized
-      by the the ViewHandler implementation being used (such as
-      "/index.jsp" if you are using the default ViewHandler).
-
-    - A proper prefix of a view identifier, plus a trailing "*"
-      character.  This pattern indicates that all view identifiers that
-      match the portion of the pattern up to the asterisk will match the
-      surrounding rule.  When more than one match exists, the match with
-      the longest pattern is selected.
-
-    - An "*" character, which means that this pattern applies to all
-      view identifiers.
--->
-<!ENTITY % ViewIdPattern "CDATA">
-
-
-<!-- ==================== Top Level Elements ============================== -->
-
-
-<!--
-    The "faces-config" element is the root of the configuration information
-    hierarchy, and contains nested elements for all of the other configuration
-    settings.
--->
-<!ELEMENT faces-config    ((application|factory|component|converter|managed-bean|navigation-rule|referenced-bean|render-kit|lifecycle|validator)*)>
-<!ATTLIST faces-config
-       xmlns CDATA #FIXED "http://java.sun.com/JSF/Configuration">
-
-
-
-<!-- ==================== Definition Elements ============================= -->
-
-
-<!--
-    The "application" element provides a mechanism to define the various
-    per-application-singleton implementation artifacts for a particular web
-    application that is utilizing JavaServer Faces.  For nested elements
-    that are not specified, the JSF implementation must provide a suitable
-    default.
--->
-<!ELEMENT application     ((action-listener|default-render-kit-id|message-bundle|navigation-handler|view-handler|state-manager|property-resolver|variable-resolver|locale-config)*)>
-
-
-<!--
-    The "factory" element provides a mechanism to define the various
-    Factories that comprise parts of the implementation of JavaServer
-    Faces.  For nested elements that are not specified, the JSF
-    implementation must provide a suitable default.
--->
-<!ELEMENT factory     ((application-factory|faces-context-factory|lifecycle-factory|render-kit-factory)*)>
-
-
-<!--
-    The "attribute" element represents a named, typed, value associated with
-    the parent UIComponent via the generic attributes mechanism.
-
-    Attribute names must be unique within the scope of the parent (or related)
-    component.
--->
-<!ELEMENT attribute       (description*, display-name*, icon*, attribute-name, attribute-class, default-value?, suggested-value?, attribute-extension*)>
-
-<!-- 
-    Extension element for attribute.  May contain implementation
-    specific content.
--->
-<!ELEMENT attribute-extension ANY>
-
-
-<!--
-    The "component" element represents a concrete UIComponent implementation
-    class that should be registered under the specified type identifier,
-    along with its associated properties and attributes.  Component types must
-    be unique within the entire web application.
-
-    Nested "attribute" elements identify generic attributes that are recognized
-    by the implementation logic of this component.  Nested "property" elements
-    identify JavaBeans properties of the component class that may be exposed
-    for manipulation via tools.
--->
-<!ELEMENT component       (description*, display-name*, icon*, component-type, component-class, attribute*, property*, component-extension*)>
-
-<!-- 
-    Extension element for component.  May contain implementation
-    specific content.
--->
-<!ELEMENT component-extension ANY>
-
-
-
-<!--
-    The "converter" element represents a concrete Converter implementation
-    class that should be registered under the specified converter identifier.
-    Converter identifiers must be unique within the entire web application.
-
-    Nested "attribute" elements identify generic attributes that may be
-    configured on the corresponding UIComponent in order to affect the
-    operation of the Converter.  Nested "property" elements identify JavaBeans
-    properties of the Converter implementation class that may be configured
-    to affect the operation of the Converter.
--->
-<!ELEMENT converter       (description*, display-name*, icon*, (converter-id | converter-for-class), converter-class, attribute*, property*)>
-
-
-<!--
-    The "icon" element contains "small-icon" and "large-icon" elements that
-    specify the resoruce paths for small and large GIF or JPG icon images
-    used to represent the parent element in a GUI tool.
--->
-<!ELEMENT icon            (small-icon?, large-icon?)>
-<!ATTLIST icon            xml:lang        %Language;      #IMPLIED>
-
-<!--
-    The "lifecycle" element provides a mechanism to specify
-    modifications to the behaviour of the default Lifecycle
-    implementation for this web application.
--->
-<!ELEMENT lifecycle       (phase-listener*)>
-
-<!--
-     The "locale-config" element allows the app developer to declare the
-     supported locales for this application.  
--->
-<!ELEMENT locale-config (default-locale?, supported-locale*)>
-
-<!--
-    The "managed-bean" element represents a JavaBean, of a particular class,
-    that will be dynamically instantiated at runtime (by the default
-    VariableResolver implementation) if it is referenced as the first element
-    of a value binding expression, and no corresponding bean can be
-    identified in any scope.  In addition to the creation of the managed bean,
-    and the optional storing of it into the specified scope, the nested
-    managed-property elements can be used to initialize the contents of
-    settable JavaBeans properties of the created instance.
--->
-<!ELEMENT managed-bean (description*, display-name*, icon*, managed-bean-name, managed-bean-class, managed-bean-scope, (managed-property* | map-entries | list-entries))>
-
-
-<!--
-    The "managed-property" element represents an individual property of a
-    managed bean that will be configured to the specified value (or value set)
-    if the corresponding managed bean is automatically created.
--->
-<!ELEMENT managed-property (description*, display-name*, icon*, property-name, property-class?, (map-entries|null-value|value|list-entries))>
-
-
-<!--
-    The "map-entry" element reprsents a single key-entry pair that
-    will be added to the computed value of a managed property of type
-    java.util.Map.
--->
-<!ELEMENT map-entry (key, (null-value|value))>
-
-
-<!--
-    The "map-entries' element represents a set of key-entry pairs that
-    will be added to the computed value of a managed property of type
-    java.util.Map.  In addition, the Java class types of the key and entry
-    values may be optionally declared.
--->
-<!ELEMENT map-entries (key-class?, value-class?, map-entry*)>
-
-
-<!--
-    The base name of a resource bundle representing the message resources
-    for this application.  See the JavaDocs for the "java.util.ResourceBundle"
-    class for more information on the syntax of resource bundle names.
--->
-
-<!ELEMENT message-bundle (#PCDATA)>
-
-
-<!--
-    The "navigation-case" element describes a particular combination of
-    conditions that must match for this case to be executed, and the
-    view id of the component tree that should be selected next.
--->
-<!ELEMENT navigation-case (description*, display-name*, icon*, from-action?, from-outcome?, to-view-id, redirect?)>
-
-
-<!--
-    The "navigation-rule" element represents an individual decision rule
-    that will be utilized by the default NavigationHandler
-    implementation to make decisions on what view should be displayed
-    next, based on the view id being processed.
--->
-<!ELEMENT navigation-rule (description*, display-name*, icon*, from-view-id?, navigation-case*)>
-
-
-<!--
-    The "property" element represents a JavaBean property of the Java class
-    represented by our parent element.
-
-    Property names must be unique within the scope of the Java class
-    that is represented by the parent element, and must correspond to
-    property names that will be recognized when performing introspection
-    against that class via java.beans.Introspector.
--->
-<!ELEMENT property        (description*, display-name*, icon*, property-name, property-class, default-value?, suggested-value?, property-extension*)>
-
-<!-- 
-    Extension element for property.  May contain implementation
-    specific content.
--->
-<!ELEMENT property-extension ANY>
-
-<!--
-    The "referenced-bean" element represents at design time the promise
-    that a Java object of the specified type will exist at runtime in some
-    scope, under the specified key.  This can be used by design time tools
-    to construct user interface dialogs based on the properties of the
-    specified class.  The presence or absence of a referenced bean
-    element has no impact on the JavaServer Faces runtime environment
-    inside a web application.
--->
-<!ELEMENT referenced-bean (description*, display-name*, icon*, referenced-bean-name, referenced-bean-class)>
-
-
-<!--
-    The "render-kit" element represents a concrete RenderKit implementation
-    that should be registered under the specified render-kit-id.  If no
-    render-kit-id is specified, the identifier of the default RenderKit
-    (RenderKitFactory.DEFAULT_RENDER_KIT) is assumed.
--->
-<!ELEMENT render-kit      (description*, display-name*, icon*, render-kit-id?, render-kit-class?, renderer*)>
-
-
-<!--
-    The "renderer" element represents a concrete Renderer implementation
-    class that should be registered under the specified component family
-    and renderer type identifiers, in the RenderKit associated with the
-    parent "render-kit" element.  Combinations of component family and renderer
-    type must be unique within the RenderKit associated with the parent
-    "render-kit" element.
-
-    Nested "attribute" elements identify generic component attributes that
-    are recognized by this renderer.
--->
-<!ELEMENT renderer        (description*, display-name*, icon*, component-family, renderer-type, renderer-class, attribute*, renderer-extension*)>
-
-<!-- 
-    Extension element for renderer.  May contain implementation
-    specific content.
--->
-<!ELEMENT renderer-extension ANY>
-
-<!--
-    The "validator" element represents a concrete Validator implementation
-    class that should be registered under the specified validator identifier.
-    Validator identifiers must be unique within the entire web application.
-
-    Nested "attribute" elements identify generic attributes that may be
-    configured on the corresponding UIComponent in order to affect the
-    operation of the Validator.  Nested "property" elements identify JavaBeans
-    properties of the Validator implementation class that may be configured
-    to affect the operation of the Validator.
--->
-<!ELEMENT validator       (description*, display-name*, icon*, validator-id, validator-class, attribute*, property*)>
-
-
-<!--
-    The "list-entries" element represents a set of initialization
-    elements for a managed property that is a java.util.List or an
-    array.  In the former case, the "value-class" element can optionally
-    be used to declare the Java type to which each value should be
-    converted before adding it to the Collection.
--->
-<!ELEMENT list-entries    (value-class?, (null-value|value)*)>
-
-
-<!-- ==================== Subordinate Elements ============================ -->
-
-
-<!--
-    The "action-listener" element contains the fully qualified class name
-    of the concrete ActionListener implementation class that will be called
-    during the Invoke Application phase of the request processing lifecycle.
-    It must be of type "ClassName".
--->
-<!ELEMENT action-listener (#PCDATA)>
-
-<!--
-    The "application-factory" element contains the fully qualified class
-    name of the concrete ApplicationFactory implementation class that
-    will be called when FactoryFinder.getFactory(APPLICATION_FACTORY) is
-    called. It must be of type "ClassName".
--->
-<!ELEMENT application-factory (#PCDATA)>
-
-<!--
-    The "attribute-class" element represents the Java type of the value
-    associated with this attribute name.  It must be of type "ClassName".
--->
-<!ELEMENT attribute-class (#PCDATA)>
-
-
-<!--
-    The "attribute-name" element represents the name under which the
-    corresponding value will be stored, in the generic attributes of the
-    UIComponent we are related to.
--->
-<!ELEMENT attribute-name  (#PCDATA)>
-
-
-<!--
-    The "component-class" element represents the fully qualified class name
-    of a concrete UIComponent implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT component-class (#PCDATA)>
-
-
-<!--
-    The "component-family" element represents the component family for
-    which the Renderer represented by the parent "renderer" element will be
-    used.
--->
-<!ELEMENT component-family (#PCDATA)>
-
-<!--
-    The "component-type" element represents the name under which the
-    corresponding UIComponent class should be registered.
--->
-<!ELEMENT component-type  (#PCDATA)>
-
-
-<!--
-    The "converter-class" element represents the fully qualified class name
-    of a concrete Converter implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT converter-class (#PCDATA)>
-
-
-<!--
-    The "converter-for-class" element represents the fully qualified class name
-    for which a Converter class will be registered.  It must be of
-    type "ClassName".
--->
-<!ELEMENT converter-for-class (#PCDATA)>
-
-
-<!--
-    The "converter-id" element represents the identifier under which the
-    corresponding Converter class should be registered.
--->
-<!ELEMENT converter-id    (#PCDATA)>
-
-<!--
-    The "default-render-kit-id" element allows the application to define
-    a renderkit to be used other than the standard one. 
--->
-<!ELEMENT default-render-kit-id   (#PCDATA)>
-
-<!--
-     The "default-locale" element declares the default locale for this
-     application instance.  It must be specified as
-     :language:[_:country:[_:variant:]] without the colons, for example
-     "ja_JP_SJIS".  The separators between the segments may be '-' or
-     '_'.
--->
-<!ELEMENT default-locale (#PCDATA)>
-
-<!--
-    The "default-value" contains the value for the property or attribute
-    in which this element resides.  This value differs from the
-    "suggested-value" in that the property or attribute must take the
-    value, whereas in "suggested-value" taking the value is optional.
--->
-<!ELEMENT default-value (#PCDATA)>
-
-<!--
-    The "description" element contains a textual description of the element
-    it is nested in, optionally flagged with a language code using the
-    "xml:lang" attribute.
--->
-<!ELEMENT description     ANY>
-<!ATTLIST description     xml:lang        %Language;      #IMPLIED>
-
-
-<!--
-    The "display-name" element is a short descriptive name describing the
-    entity associated with the element it is nested in, intended to be
-    displayed by tools, and optionally flagged with a language code using
-    the "xml:lang" attribute.
--->
-<!ELEMENT display-name    (#PCDATA)>
-<!ATTLIST display-name    xml:lang        %Language;      #IMPLIED>
-
-<!--
-    The "faces-context-factory" element contains the fully qualified
-    class name of the concrete FacesContextFactory implementation class
-    that will be called when
-    FactoryFinder.getFactory(FACES_CONTEXT_FACTORY) is called. It must
-    be of type "ClassName".
--->
-<!ELEMENT faces-context-factory (#PCDATA)>
-
-<!--
-    The "from-action" element contains an action reference expression
-    that must have been executed (by the default ActionListener for handling
-    application level events) in order to select this navigation rule.  If
-    not specified, this rule will be relevant no matter which action reference
-    was executed (or if no action reference was executed).
-
-    This value must be of type "Action".
--->
-<!ELEMENT from-action (#PCDATA)>
-
-
-<!--
-    The "from-outcome" element contains a logical outcome string returned
-    by the execution of an application action method selected via an
-    "actionRef" property (or a literal value specified by an "action"
-    property) of a UICommand component.  If specified, this rule will be
-    relevant only if the outcome value matches this element's value.  If
-    not specified, this rule will be relevant no matter what the outcome
-    value was.
--->
-<!ELEMENT from-outcome    (#PCDATA)>
-
-
-<!--
-    The "from-view-id" element contains the view identifier of the view
-    for which the containing navigation rule is relevant.  If no
-    "from-view" element is specified, this rule applies to navigation
-    decisions on all views.  If this element is not specified, a value
-    of "*" is assumed, meaning that this navigation rule applies to all
-    views.
-
-    This value must be of type "ViewIdPattern".
--->
-<!ELEMENT from-view-id    (#PCDATA)>
-
-
-<!--
-    The "key" element is the String representation of a map key that
-    will be stored in a managed property of type java.util.Map.  
--->
-<!ELEMENT key             (#PCDATA)>
-
-
-<!--
-    The "key-class" element defines the Java type to which each "key"
-    element in a set of "map-entry" elements will be converted to.  It
-    must be of type "ClassName".  If omitted, "java.lang.String"
-    is assumed.
--->
-<!ELEMENT key-class       (#PCDATA)>
-
-
-<!--
-    The "large-icon" element contains the resource path to a large (32x32)
-    icon image.  The image may be in either GIF or JPG format.
--->
-<!ELEMENT large-icon      (#PCDATA)>
-
-<!--
-    The "lifecycle-factory" element contains the fully qualified class name
-    of the concrete LifecycleFactory implementation class that will be called
-    when FactoryFinder.getFactory(LIFECYCLE_FACTORY) is called. It must be 
-    of type "ClassName".
--->
-<!ELEMENT lifecycle-factory (#PCDATA)>
-
-<!--
-    The "managed-bean-class" element represents the fully qualified class
-    name of the Java class that will be used to instantiate a new instance
-    if creation of the specified managed bean is requested.  It must be of
-    type "ClassName".
-
-    The specified class must conform to standard JavaBeans conventions.
-    In particular, it must have a public zero-arguments constructor, and
-    zero or more public property setters.
--->
-<!ELEMENT managed-bean-class  (#PCDATA)>
-
-
-<!--
-    The "managed-bean-name" element represents the attribute name under
-    which a managed bean will be searched for, as well as stored (unless
-    the "managed-bean-scope" value is "none").  It must be of type
-    "Identifier".
--->
-<!ELEMENT managed-bean-name (#PCDATA)>
-
-
-<!--
-    The "managed-bean-scope" element represents the scope into which a newly
-    created instance of the specified managed bean will be stored (unless
-    the value is "none").  It must be of type "ScopeOrNone".
--->
-<!ELEMENT managed-bean-scope (#PCDATA)>
-
-<!--
-    The "navigation-handler" element contains the fully qualified class name
-    of the concrete NavigationHandler implementation class that will be called
-    during the Invoke Application phase of the request processing lifecycle,
-    if the default ActionListener (provided by the JSF implementation) is used.
-    It must be of type "ClassName".
--->
-<!ELEMENT navigation-handler (#PCDATA)>
-
-<!--
-The "phase-listener" element contains the fully qualified class
-name of the concrete PhaseListener implementation class that will be
-registered on the Lifecycle. It must be of type "ClassName".
--->
-<!ELEMENT phase-listener (#PCDATA)>
-
-<!--
-    The "redirect" element indicates that navigation to the specified
-    "to-view-id" should be accomplished by performing an HTTP redirect
-    rather than the usual ViewHandler mechanisms.
--->
-<!ELEMENT redirect EMPTY>
-
-<!--
-    The "suggested-value" contains the value for the property or
-    attribute in which this element resides.  This value is advisory
-    only and is intended for tools to use when populating pallettes.
--->
-<!ELEMENT suggested-value (#PCDATA)>
-
-
-<!--
-
-    The "view-handler" element contains the fully qualified class name
-    of the concrete ViewHandler implementation class that will be called
-    during the Restore View and Render Response phases of the request
-    processing lifecycle.  The faces implementation must provide a
-    default implementation of this class
--->
-<!ELEMENT view-handler (#PCDATA)>
-
-<!--
-
-    The "state-manager" element contains the fully qualified class name
-    of the concrete StateManager implementation class that will be called
-    during the Restore View and Render Response phases of the request
-    processing lifecycle.  The faces implementation must provide a
-    default implementation of this class
--->
-<!ELEMENT state-manager (#PCDATA)>
-
-<!--
-    The "null-value" element indicates that the managed property in which we
-    are nested will be explicitly set to null if our managed bean is
-    automatically created.  This is different from omitting the managed
-    property element entirely, which will cause no property setter to be
-    called for this property.
-
-    The "null-value" element can only be used when the associated
-    "property-class" identifies a Java class, not a Java primitive.
--->
-<!ELEMENT null-value EMPTY>
-
-
-<!--
-    The "property-class" element represents the Java type of the value
-    associated with this property name.  It must be of type "JavaType".
-    If not specified, it can be inferred from existing classes; however,
-    this element should be specified if the configuration file is going
-    to be the source for generating the corresponding classes.
--->
-<!ELEMENT property-class  (#PCDATA)>
-
-
-<!--
-    The "property-name" element represents the JavaBeans property name
-    under which the corresponding value may be stored.
--->
-<!ELEMENT property-name   (#PCDATA)>
-
-
-<!--
-    The "property-resolver" element contains the fully qualified class name
-    of the concrete PropertyResolver implementation class that will be used
-    during the processing of value binding expressions.
-    It must be of type "ClassName".
--->
-<!ELEMENT property-resolver (#PCDATA)>
-
-
-<!--
-    The "referenced-bean-class" element represents the fully qualified class
-    name of the Java class (either abstract or concrete) or Java interface
-    implemented by the corresponding referenced bean.  It must be of type
-    "ClassName".
--->
-<!ELEMENT referenced-bean-class  (#PCDATA)>
-
-
-<!--
-    The "referenced-bean-name" element represents the attribute name under
-    which the corresponding referenced bean may be assumed to be stored,
-    in one of the scopes defined by the "Scope" type.  It must be of type
-    "Identifier".
--->
-<!ELEMENT referenced-bean-name (#PCDATA)>
-
-
-<!--
-    The "render-kit-id" element represents an identifier for the
-    RenderKit represented by the parent "render-kit" element.
--->
-<!ELEMENT render-kit-id   (#PCDATA)>
-
-
-<!--
-    The "render-kit-class" element represents the fully qualified class name
-    of a concrete RenderKit implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT render-kit-class (#PCDATA)>
-
-
-<!--
-    The "renderer-class" element represents the fully qualified class name
-    of a concrete Renderer implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT renderer-class  (#PCDATA)>
-
-<!--
-    The "render-kit-factory" element contains the fully qualified class name
-    of the concrete RenderKitFactory implementation class that will be called
-    when FactoryFinder.getFactory(RENDER_KIT_FACTORY) is called. It must be 
-    of type "ClassName".
--->
-<!ELEMENT render-kit-factory (#PCDATA)>
-
-<!--
-    The "renderer-type" element represents a renderer type identifier for the
-    Renderer represented by the parent "renderer" element.
--->
-<!ELEMENT renderer-type   (#PCDATA)>
-
-<!--
-    The "small-icon" element contains the resource path to a large (16x16)
-    icon image.  The image may be in either GIF or JPG format.
--->
-<!ELEMENT small-icon      (#PCDATA)>
-
-<!--
-     The "supported-locale" element allows authors to declare which
-     locales are supported in this application instance.
-
-     It must be specified as :language:[_:country:[_:variant:]] without
-     the colons, for example "ja_JP_SJIS".  The separators between the
-     segments may be '-' or '_'.
--->
-<!ELEMENT supported-locale (#PCDATA)>
-
-<!--
-    The "to-view" element contains the view identifier of the next view
-    that should be displayed if this navigation rule is matched.  It
-    must be of type "ViewId".
--->
-<!ELEMENT to-view-id      (#PCDATA)>
-
-
-<!--
-    The "validator-class" element represents the fully qualified class name
-    of a concrete Validator implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT validator-class (#PCDATA)>
-
-
-<!--
-    The "validator-id" element represents the identifier under which the
-    corresponding Validator class should be registered.
--->
-<!ELEMENT validator-id    (#PCDATA)>
-
-
-<!--
-    The "value" element is the String representation of a literal
-    value to which a scalar managed property will be set, or a value
-    binding expression ("#{...}") that will be used to calculate the
-    required value.  It will be converted as specified for the actual
-    property type.
--->
-<!ELEMENT value (#PCDATA)>
-
-
-<!--
-    The "value-class" element defines the Java type to which each
-    "value" element's value will be converted to, prior to adding it to
-    the "list-entries" list for a managed property that is a
-    java.util.List, or a "map-entries" map for a managed property that
-    is a java.util.Map.  It must be of type "ClassName".  If omitted,
-    "java.lang.String" is assumed.
--->
-<!ELEMENT value-class (#PCDATA)>
-
-<!--
-    The "variable-resolver" element contains the fully qualified class name
-    of the concrete VariableResolver implementation class that will be used
-    during the processing of value binding expressions.
-    It must be of type "ClassName".
--->
-<!ELEMENT variable-resolver (#PCDATA)>
-
-
-<!-- ============================ Identifier Attributes ==================== -->
-
-
-<!ATTLIST action-listener                   id ID #IMPLIED>
-<!ATTLIST application                       id ID #IMPLIED>
-<!ATTLIST application-factory               id ID #IMPLIED>
-<!ATTLIST attribute                         id ID #IMPLIED>
-<!ATTLIST attribute-class                   id ID #IMPLIED>
-<!ATTLIST attribute-extension               id ID #IMPLIED>
-<!ATTLIST attribute-name                    id ID #IMPLIED>
-<!ATTLIST component                         id ID #IMPLIED>
-<!ATTLIST component-class                   id ID #IMPLIED>
-<!ATTLIST component-extension               id ID #IMPLIED>
-<!ATTLIST component-family                  id ID #IMPLIED>
-<!ATTLIST component-type                    id ID #IMPLIED>
-<!ATTLIST converter                         id ID #IMPLIED>
-<!ATTLIST converter-class                   id ID #IMPLIED>
-<!ATTLIST converter-for-class               id ID #IMPLIED>
-<!ATTLIST converter-id                      id ID #IMPLIED>
-<!ATTLIST default-locale                    id ID #IMPLIED>
-<!ATTLIST default-render-kit-id             id ID #IMPLIED>
-<!ATTLIST default-value                     id ID #IMPLIED>
-<!ATTLIST description                       id ID #IMPLIED>
-<!ATTLIST display-name                      id ID #IMPLIED>
-<!ATTLIST faces-config                      id ID #IMPLIED>
-<!ATTLIST faces-context-factory             id ID #IMPLIED>
-<!ATTLIST factory                           id ID #IMPLIED>
-<!ATTLIST from-action                       id ID #IMPLIED>
-<!ATTLIST from-outcome                      id ID #IMPLIED>
-<!ATTLIST from-view-id                      id ID #IMPLIED>
-<!ATTLIST icon                              id ID #IMPLIED>
-<!ATTLIST key                               id ID #IMPLIED>
-<!ATTLIST key-class                         id ID #IMPLIED>
-<!ATTLIST large-icon                        id ID #IMPLIED>
-<!ATTLIST lifecycle                         id ID #IMPLIED>
-<!ATTLIST lifecycle-factory                 id ID #IMPLIED>
-<!ATTLIST list-entries                      id ID #IMPLIED>
-<!ATTLIST locale-config                     id ID #IMPLIED>
-<!ATTLIST managed-bean                      id ID #IMPLIED>
-<!ATTLIST managed-bean-class                id ID #IMPLIED>
-<!ATTLIST managed-bean-name                 id ID #IMPLIED>
-<!ATTLIST managed-bean-scope                id ID #IMPLIED>
-<!ATTLIST managed-property                  id ID #IMPLIED>
-<!ATTLIST map-entries                       id ID #IMPLIED>
-<!ATTLIST map-entry                         id ID #IMPLIED>
-<!ATTLIST message-bundle                    id ID #IMPLIED>
-<!ATTLIST navigation-case                   id ID #IMPLIED>
-<!ATTLIST navigation-handler                id ID #IMPLIED>
-<!ATTLIST navigation-rule                   id ID #IMPLIED>
-<!ATTLIST null-value                        id ID #IMPLIED>
-<!ATTLIST phase-listener                    id ID #IMPLIED>
-<!ATTLIST property                          id ID #IMPLIED>
-<!ATTLIST property-class                    id ID #IMPLIED>
-<!ATTLIST property-extension                id ID #IMPLIED>
-<!ATTLIST property-name                     id ID #IMPLIED>
-<!ATTLIST property-resolver                 id ID #IMPLIED>
-<!ATTLIST redirect                          id ID #IMPLIED>
-<!ATTLIST referenced-bean                   id ID #IMPLIED>
-<!ATTLIST referenced-bean-class             id ID #IMPLIED>
-<!ATTLIST referenced-bean-name              id ID #IMPLIED>
-<!ATTLIST render-kit                        id ID #IMPLIED>
-<!ATTLIST render-kit-class                  id ID #IMPLIED>
-<!ATTLIST render-kit-factory                id ID #IMPLIED>
-<!ATTLIST render-kit-id                     id ID #IMPLIED>
-<!ATTLIST renderer                          id ID #IMPLIED>
-<!ATTLIST renderer-class                    id ID #IMPLIED>
-<!ATTLIST renderer-extension                id ID #IMPLIED>
-<!ATTLIST renderer-type                     id ID #IMPLIED>
-<!ATTLIST small-icon                        id ID #IMPLIED>
-<!ATTLIST state-manager                     id ID #IMPLIED>
-<!ATTLIST suggested-value                   id ID #IMPLIED>
-<!ATTLIST supported-locale                  id ID #IMPLIED>
-<!ATTLIST to-view-id                        id ID #IMPLIED>
-<!ATTLIST validator                         id ID #IMPLIED>
-<!ATTLIST validator-class                   id ID #IMPLIED>
-<!ATTLIST validator-id                      id ID #IMPLIED>
-<!ATTLIST value                             id ID #IMPLIED>
-<!ATTLIST value-class                       id ID #IMPLIED>
-<!ATTLIST variable-resolver                 id ID #IMPLIED>
-<!ATTLIST view-handler                      id ID #IMPLIED>
-
diff --git a/jsf-api/doc/web-facesconfig_1_1.dtd b/jsf-api/doc/web-facesconfig_1_1.dtd
deleted file mode 100644
index a0ba368..0000000
--- a/jsf-api/doc/web-facesconfig_1_1.dtd
+++ /dev/null
@@ -1,929 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!--
-    DTD for the JavaServer Faces Application Configuration File (Version 1.1)
-
-    To support validation of your configuration file(s), include the following
-    DOCTYPE element at the beginning (after the "xml" declaration):
-
-    <!DOCTYPE faces-config PUBLIC
-     "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
-     "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
-
--->
-
-
-<!-- ==================== Defined Types =================================== -->
-
-
-<!--
-    An "Action" is a String that represents a method binding
-    expression that points at a method with no arguments that returns a
-    String.  It must be bracketed with "#{}", for example,
-    "#{cardemo.buyCar}".
--->
-<!ENTITY % Action "CDATA">
-
-
-<!--
-    A "ClassName" is the fully qualified name of a Java class that is
-    instantiated to provide the functionality of the enclosing element.
--->
-<!ENTITY % ClassName "CDATA">
-
-
-<!--
-    An "Identifier" is a string of characters that conforms to the variable
-    naming conventions of the Java programming language (JLS Section ?.?.?).
--->
-<!ENTITY % Identifier "CDATA">
-
-
-<!--
-    A "JavaType" is either the fully qualified name of a Java class that is
-    instantiated to provide the functionality of the enclosing element, or
-    the name of a Java primitive type (such as int or char).  The class name
-    or primitive type may optionally be followed by "[]" to indicate that
-    the underlying data must be an array, rather than a scalar variable.
--->
-<!ENTITY % JavaType "CDATA">
-
-
-<!--
-    A "Language" is a lower case two-letter code for a language as defined
-    by ISL-639.
--->
-<!ENTITY % Language "CDATA">
-
-
-<!--
-    A "ResourcePath" is the relative or absolute path to a resource file
-    (such as a logo image).
--->
-<!ENTITY % ResourcePath "CDATA">
-
-
-<!--
-    A "Scope" is the well-known name of a scope in which managed beans may
-    optionally be defined to be created in.
--->
-<!ENTITY % Scope "(request|session|application)">
-
-
-
-<!--
-    A "ScopeOrNone" element defines the legal values for the
-    <managed-bean-scope> element's body content, which includes
-    all of the scopes respresented by the "Scope" type, plus the
-    "none" value indicating that a created bean should not be
-    stored into any scope.
--->
-<!ENTITY % ScopeOrNone "(request|session|application|none)">
-
-
-<!--
-    A "ViewIdPattern" is a pattern for matching view identifiers in
-    order to determine whether a particular navigation rule should be
-    fired.  It must contain one of the following values:
-
-    - The exact match for a view identifier that is recognized
-      by the the ViewHandler implementation being used (such as
-      "/index.jsp" if you are using the default ViewHandler).
-
-    - A proper prefix of a view identifier, plus a trailing "*"
-      character.  This pattern indicates that all view identifiers that
-      match the portion of the pattern up to the asterisk will match the
-      surrounding rule.  When more than one match exists, the match with
-      the longest pattern is selected.
-
-    - An "*" character, which means that this pattern applies to all
-      view identifiers.
--->
-<!ENTITY % ViewIdPattern "CDATA">
-
-
-<!-- ==================== Top Level Elements ============================== -->
-
-
-<!--
-    The "faces-config" element is the root of the configuration information
-    hierarchy, and contains nested elements for all of the other configuration
-    settings.
--->
-<!ELEMENT faces-config    ((application|factory|component|converter|managed-bean|navigation-rule|referenced-bean|render-kit|lifecycle|validator)*)>
-<!ATTLIST faces-config
-       xmlns CDATA #FIXED "http://java.sun.com/JSF/Configuration">
-
-
-
-<!-- ==================== Definition Elements ============================= -->
-
-
-<!--
-    The "application" element provides a mechanism to define the various
-    per-application-singleton implementation artifacts for a particular web
-    application that is utilizing JavaServer Faces.  For nested elements
-    that are not specified, the JSF implementation must provide a suitable
-    default.
--->
-<!ELEMENT application     ((action-listener|default-render-kit-id|message-bundle|navigation-handler|view-handler|state-manager|property-resolver|variable-resolver|locale-config)*)>
-
-
-<!--
-    The "factory" element provides a mechanism to define the various
-    Factories that comprise parts of the implementation of JavaServer
-    Faces.  For nested elements that are not specified, the JSF
-    implementation must provide a suitable default.
--->
-<!ELEMENT factory     ((application-factory|faces-context-factory|lifecycle-factory|render-kit-factory)*)>
-
-
-<!--
-    The "attribute" element represents a named, typed, value associated with
-    the parent UIComponent via the generic attributes mechanism.
-
-    Attribute names must be unique within the scope of the parent (or related)
-    component.
--->
-<!ELEMENT attribute       (description*, display-name*, icon*, attribute-name, attribute-class, default-value?, suggested-value?, attribute-extension*)>
-
-<!-- 
-    Extension element for attribute.  May contain implementation
-    specific content.
--->
-<!ELEMENT attribute-extension ANY>
-
-
-<!--
-    The "component" element represents a concrete UIComponent implementation
-    class that should be registered under the specified type identifier,
-    along with its associated properties and attributes.  Component types must
-    be unique within the entire web application.
-
-    Nested "attribute" elements identify generic attributes that are recognized
-    by the implementation logic of this component.  Nested "property" elements
-    identify JavaBeans properties of the component class that may be exposed
-    for manipulation via tools.
--->
-<!ELEMENT component       (description*, display-name*, icon*, component-type, component-class, facet*, attribute*, property*, component-extension*)>
-
-<!-- 
-    Extension element for component.  May contain implementation
-    specific content.
--->
-<!ELEMENT component-extension ANY>
-
-<!--
-   Define the name and other design-time information for a facet that is
-   associated with a renderer or a component.
--->
-
-<!ELEMENT facet       (description*, display-name*, icon*, facet-name, facet-extension*)>
-
-<!-- 
-    Extension element for facet.  May contain implementation
-    specific content.
--->
-<!ELEMENT facet-extension ANY>
-
-<!--
-    The "facet-name" element represents the facet name under which a
-    UIComponent will be added to its parent.  It must be of type
-    "Identifier".
--->
-<!ELEMENT facet-name (#PCDATA)>
-
-<!--
-    The "converter" element represents a concrete Converter implementation
-    class that should be registered under the specified converter identifier.
-    Converter identifiers must be unique within the entire web application.
-
-    Nested "attribute" elements identify generic attributes that may be
-    configured on the corresponding UIComponent in order to affect the
-    operation of the Converter.  Nested "property" elements identify JavaBeans
-    properties of the Converter implementation class that may be configured
-    to affect the operation of the Converter.
--->
-<!ELEMENT converter       (description*, display-name*, icon*, (converter-id | converter-for-class), converter-class, attribute*, property*)>
-
-
-<!--
-    The "icon" element contains "small-icon" and "large-icon" elements that
-    specify the resoruce paths for small and large GIF or JPG icon images
-    used to represent the parent element in a GUI tool.
--->
-<!ELEMENT icon            (small-icon?, large-icon?)>
-<!ATTLIST icon            xml:lang        %Language;      #IMPLIED>
-
-<!--
-    The "lifecycle" element provides a mechanism to specify
-    modifications to the behaviour of the default Lifecycle
-    implementation for this web application.
--->
-<!ELEMENT lifecycle       (phase-listener*)>
-
-<!--
-     The "locale-config" element allows the app developer to declare the
-     supported locales for this application.  
--->
-<!ELEMENT locale-config (default-locale?, supported-locale*)>
-
-<!--
-    The "managed-bean" element represents a JavaBean, of a particular class,
-    that will be dynamically instantiated at runtime (by the default
-    VariableResolver implementation) if it is referenced as the first element
-    of a value binding expression, and no corresponding bean can be
-    identified in any scope.  In addition to the creation of the managed bean,
-    and the optional storing of it into the specified scope, the nested
-    managed-property elements can be used to initialize the contents of
-    settable JavaBeans properties of the created instance.
--->
-<!ELEMENT managed-bean (description*, display-name*, icon*, managed-bean-name, managed-bean-class, managed-bean-scope, (managed-property* | map-entries | list-entries))>
-
-
-<!--
-    The "managed-property" element represents an individual property of a
-    managed bean that will be configured to the specified value (or value set)
-    if the corresponding managed bean is automatically created.
--->
-<!ELEMENT managed-property (description*, display-name*, icon*, property-name, property-class?, (map-entries|null-value|value|list-entries))>
-
-
-<!--
-    The "map-entry" element reprsents a single key-entry pair that
-    will be added to the computed value of a managed property of type
-    java.util.Map.
--->
-<!ELEMENT map-entry (key, (null-value|value))>
-
-
-<!--
-    The "map-entries' element represents a set of key-entry pairs that
-    will be added to the computed value of a managed property of type
-    java.util.Map.  In addition, the Java class types of the key and entry
-    values may be optionally declared.
--->
-<!ELEMENT map-entries (key-class?, value-class?, map-entry*)>
-
-
-<!--
-    The base name of a resource bundle representing the message resources
-    for this application.  See the JavaDocs for the "java.util.ResourceBundle"
-    class for more information on the syntax of resource bundle names.
--->
-
-<!ELEMENT message-bundle (#PCDATA)>
-
-
-<!--
-    The "navigation-case" element describes a particular combination of
-    conditions that must match for this case to be executed, and the
-    view id of the component tree that should be selected next.
--->
-<!ELEMENT navigation-case (description*, display-name*, icon*, from-action?, from-outcome?, to-view-id, redirect?)>
-
-
-<!--
-    The "navigation-rule" element represents an individual decision rule
-    that will be utilized by the default NavigationHandler
-    implementation to make decisions on what view should be displayed
-    next, based on the view id being processed.
--->
-<!ELEMENT navigation-rule (description*, display-name*, icon*, from-view-id?, navigation-case*)>
-
-
-<!--
-    The "property" element represents a JavaBean property of the Java class
-    represented by our parent element.
-
-    Property names must be unique within the scope of the Java class
-    that is represented by the parent element, and must correspond to
-    property names that will be recognized when performing introspection
-    against that class via java.beans.Introspector.
--->
-<!ELEMENT property        (description*, display-name*, icon*, property-name, property-class, default-value?, suggested-value?, property-extension*)>
-
-<!-- 
-    Extension element for property.  May contain implementation
-    specific content.
--->
-<!ELEMENT property-extension ANY>
-
-<!--
-    The "referenced-bean" element represents at design time the promise
-    that a Java object of the specified type will exist at runtime in some
-    scope, under the specified key.  This can be used by design time tools
-    to construct user interface dialogs based on the properties of the
-    specified class.  The presence or absence of a referenced bean
-    element has no impact on the JavaServer Faces runtime environment
-    inside a web application.
--->
-<!ELEMENT referenced-bean (description*, display-name*, icon*, referenced-bean-name, referenced-bean-class)>
-
-
-<!--
-    The "render-kit" element represents a concrete RenderKit implementation
-    that should be registered under the specified render-kit-id.  If no
-    render-kit-id is specified, the identifier of the default RenderKit
-    (RenderKitFactory.DEFAULT_RENDER_KIT) is assumed.
--->
-<!ELEMENT render-kit      (description*, display-name*, icon*, render-kit-id?, render-kit-class?, renderer*)>
-
-
-<!--
-    The "renderer" element represents a concrete Renderer implementation
-    class that should be registered under the specified component family
-    and renderer type identifiers, in the RenderKit associated with the
-    parent "render-kit" element.  Combinations of component family and renderer
-    type must be unique within the RenderKit associated with the parent
-    "render-kit" element.
-
-    Nested "attribute" elements identify generic component attributes that
-    are recognized by this renderer.
--->
-<!ELEMENT renderer        (description*, display-name*, icon*, component-family, renderer-type, renderer-class, facet*, attribute*, renderer-extension*)>
-
-<!-- 
-    Extension element for renderer.  May contain implementation
-    specific content.
--->
-<!ELEMENT renderer-extension ANY>
-
-<!--
-    The "validator" element represents a concrete Validator implementation
-    class that should be registered under the specified validator identifier.
-    Validator identifiers must be unique within the entire web application.
-
-    Nested "attribute" elements identify generic attributes that may be
-    configured on the corresponding UIComponent in order to affect the
-    operation of the Validator.  Nested "property" elements identify JavaBeans
-    properties of the Validator implementation class that may be configured
-    to affect the operation of the Validator.
--->
-<!ELEMENT validator       (description*, display-name*, icon*, validator-id, validator-class, attribute*, property*)>
-
-
-<!--
-    The "list-entries" element represents a set of initialization
-    elements for a managed property that is a java.util.List or an
-    array.  In the former case, the "value-class" element can optionally
-    be used to declare the Java type to which each value should be
-    converted before adding it to the Collection.
--->
-<!ELEMENT list-entries    (value-class?, (null-value|value)*)>
-
-
-<!-- ==================== Subordinate Elements ============================ -->
-
-
-<!--
-    The "action-listener" element contains the fully qualified class name
-    of the concrete ActionListener implementation class that will be called
-    during the Invoke Application phase of the request processing lifecycle.
-    It must be of type "ClassName".
--->
-<!ELEMENT action-listener (#PCDATA)>
-
-<!--
-    The "application-factory" element contains the fully qualified class
-    name of the concrete ApplicationFactory implementation class that
-    will be called when FactoryFinder.getFactory(APPLICATION_FACTORY) is
-    called. It must be of type "ClassName".
--->
-<!ELEMENT application-factory (#PCDATA)>
-
-<!--
-    The "attribute-class" element represents the Java type of the value
-    associated with this attribute name.  It must be of type "ClassName".
--->
-<!ELEMENT attribute-class (#PCDATA)>
-
-
-<!--
-    The "attribute-name" element represents the name under which the
-    corresponding value will be stored, in the generic attributes of the
-    UIComponent we are related to.
--->
-<!ELEMENT attribute-name  (#PCDATA)>
-
-
-<!--
-    The "component-class" element represents the fully qualified class name
-    of a concrete UIComponent implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT component-class (#PCDATA)>
-
-
-<!--
-    The "component-family" element represents the component family for
-    which the Renderer represented by the parent "renderer" element will be
-    used.
--->
-<!ELEMENT component-family (#PCDATA)>
-
-<!--
-    The "component-type" element represents the name under which the
-    corresponding UIComponent class should be registered.
--->
-<!ELEMENT component-type  (#PCDATA)>
-
-
-<!--
-    The "converter-class" element represents the fully qualified class name
-    of a concrete Converter implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT converter-class (#PCDATA)>
-
-
-<!--
-    The "converter-for-class" element represents the fully qualified class name
-    for which a Converter class will be registered.  It must be of
-    type "ClassName".
--->
-<!ELEMENT converter-for-class (#PCDATA)>
-
-
-<!--
-    The "converter-id" element represents the identifier under which the
-    corresponding Converter class should be registered.
--->
-<!ELEMENT converter-id    (#PCDATA)>
-
-<!--
-    The "default-render-kit-id" element allows the application to define
-    a renderkit to be used other than the standard one. 
--->
-<!ELEMENT default-render-kit-id   (#PCDATA)>
-
-<!--
-     The "default-locale" element declares the default locale for this
-     application instance.  It must be specified as
-     :language:[_:country:[_:variant:]] without the colons, for example
-     "ja_JP_SJIS".  The separators between the segments may be '-' or
-     '_'.
--->
-<!ELEMENT default-locale (#PCDATA)>
-
-<!--
-    The "default-value" contains the value for the property or attribute
-    in which this element resides.  This value differs from the
-    "suggested-value" in that the property or attribute must take the
-    value, whereas in "suggested-value" taking the value is optional.
--->
-<!ELEMENT default-value (#PCDATA)>
-
-<!--
-    The "description" element contains a textual description of the element
-    it is nested in, optionally flagged with a language code using the
-    "xml:lang" attribute.
--->
-<!ELEMENT description     ANY>
-<!ATTLIST description     xml:lang        %Language;      #IMPLIED>
-
-
-<!--
-    The "display-name" element is a short descriptive name describing the
-    entity associated with the element it is nested in, intended to be
-    displayed by tools, and optionally flagged with a language code using
-    the "xml:lang" attribute.
--->
-<!ELEMENT display-name    (#PCDATA)>
-<!ATTLIST display-name    xml:lang        %Language;      #IMPLIED>
-
-<!--
-    The "faces-context-factory" element contains the fully qualified
-    class name of the concrete FacesContextFactory implementation class
-    that will be called when
-    FactoryFinder.getFactory(FACES_CONTEXT_FACTORY) is called. It must
-    be of type "ClassName".
--->
-<!ELEMENT faces-context-factory (#PCDATA)>
-
-<!--
-    The "from-action" element contains an action reference expression
-    that must have been executed (by the default ActionListener for handling
-    application level events) in order to select this navigation rule.  If
-    not specified, this rule will be relevant no matter which action reference
-    was executed (or if no action reference was executed).
-
-    This value must be of type "Action".
--->
-<!ELEMENT from-action (#PCDATA)>
-
-
-<!--
-    The "from-outcome" element contains a logical outcome string returned
-    by the execution of an application action method selected via an
-    "actionRef" property (or a literal value specified by an "action"
-    property) of a UICommand component.  If specified, this rule will be
-    relevant only if the outcome value matches this element's value.  If
-    not specified, this rule will be relevant no matter what the outcome
-    value was.
--->
-<!ELEMENT from-outcome    (#PCDATA)>
-
-
-<!--
-    The "from-view-id" element contains the view identifier of the view
-    for which the containing navigation rule is relevant.  If no
-    "from-view" element is specified, this rule applies to navigation
-    decisions on all views.  If this element is not specified, a value
-    of "*" is assumed, meaning that this navigation rule applies to all
-    views.
-
-    This value must be of type "ViewIdPattern".
--->
-<!ELEMENT from-view-id    (#PCDATA)>
-
-
-<!--
-    The "key" element is the String representation of a map key that
-    will be stored in a managed property of type java.util.Map.  
--->
-<!ELEMENT key             (#PCDATA)>
-
-
-<!--
-    The "key-class" element defines the Java type to which each "key"
-    element in a set of "map-entry" elements will be converted to.  It
-    must be of type "ClassName".  If omitted, "java.lang.String"
-    is assumed.
--->
-<!ELEMENT key-class       (#PCDATA)>
-
-
-<!--
-    The "large-icon" element contains the resource path to a large (32x32)
-    icon image.  The image may be in either GIF or JPG format.
--->
-<!ELEMENT large-icon      (#PCDATA)>
-
-<!--
-    The "lifecycle-factory" element contains the fully qualified class name
-    of the concrete LifecycleFactory implementation class that will be called
-    when FactoryFinder.getFactory(LIFECYCLE_FACTORY) is called. It must be 
-    of type "ClassName".
--->
-<!ELEMENT lifecycle-factory (#PCDATA)>
-
-<!--
-    The "managed-bean-class" element represents the fully qualified class
-    name of the Java class that will be used to instantiate a new instance
-    if creation of the specified managed bean is requested.  It must be of
-    type "ClassName".
-
-    The specified class must conform to standard JavaBeans conventions.
-    In particular, it must have a public zero-arguments constructor, and
-    zero or more public property setters.
--->
-<!ELEMENT managed-bean-class  (#PCDATA)>
-
-
-<!--
-    The "managed-bean-name" element represents the attribute name under
-    which a managed bean will be searched for, as well as stored (unless
-    the "managed-bean-scope" value is "none").  It must be of type
-    "Identifier".
--->
-<!ELEMENT managed-bean-name (#PCDATA)>
-
-
-<!--
-    The "managed-bean-scope" element represents the scope into which a newly
-    created instance of the specified managed bean will be stored (unless
-    the value is "none").  It must be of type "ScopeOrNone".
--->
-<!ELEMENT managed-bean-scope (#PCDATA)>
-
-<!--
-    The "navigation-handler" element contains the fully qualified class name
-    of the concrete NavigationHandler implementation class that will be called
-    during the Invoke Application phase of the request processing lifecycle,
-    if the default ActionListener (provided by the JSF implementation) is used.
-    It must be of type "ClassName".
--->
-<!ELEMENT navigation-handler (#PCDATA)>
-
-<!--
-The "phase-listener" element contains the fully qualified class
-name of the concrete PhaseListener implementation class that will be
-registered on the Lifecycle. It must be of type "ClassName".
--->
-<!ELEMENT phase-listener (#PCDATA)>
-
-<!--
-    The "redirect" element indicates that navigation to the specified
-    "to-view-id" should be accomplished by performing an HTTP redirect
-    rather than the usual ViewHandler mechanisms.
--->
-<!ELEMENT redirect EMPTY>
-
-<!--
-    The "suggested-value" contains the value for the property or
-    attribute in which this element resides.  This value is advisory
-    only and is intended for tools to use when populating pallettes.
--->
-<!ELEMENT suggested-value (#PCDATA)>
-
-
-<!--
-
-    The "view-handler" element contains the fully qualified class name
-    of the concrete ViewHandler implementation class that will be called
-    during the Restore View and Render Response phases of the request
-    processing lifecycle.  The faces implementation must provide a
-    default implementation of this class
--->
-<!ELEMENT view-handler (#PCDATA)>
-
-<!--
-
-    The "state-manager" element contains the fully qualified class name
-    of the concrete StateManager implementation class that will be called
-    during the Restore View and Render Response phases of the request
-    processing lifecycle.  The faces implementation must provide a
-    default implementation of this class
--->
-<!ELEMENT state-manager (#PCDATA)>
-
-<!--
-    The "null-value" element indicates that the managed property in which we
-    are nested will be explicitly set to null if our managed bean is
-    automatically created.  This is different from omitting the managed
-    property element entirely, which will cause no property setter to be
-    called for this property.
-
-    The "null-value" element can only be used when the associated
-    "property-class" identifies a Java class, not a Java primitive.
--->
-<!ELEMENT null-value EMPTY>
-
-
-<!--
-    The "property-class" element represents the Java type of the value
-    associated with this property name.  It must be of type "JavaType".
-    If not specified, it can be inferred from existing classes; however,
-    this element should be specified if the configuration file is going
-    to be the source for generating the corresponding classes.
--->
-<!ELEMENT property-class  (#PCDATA)>
-
-
-<!--
-    The "property-name" element represents the JavaBeans property name
-    under which the corresponding value may be stored.
--->
-<!ELEMENT property-name   (#PCDATA)>
-
-
-<!--
-    The "property-resolver" element contains the fully qualified class name
-    of the concrete PropertyResolver implementation class that will be used
-    during the processing of value binding expressions.
-    It must be of type "ClassName".
--->
-<!ELEMENT property-resolver (#PCDATA)>
-
-
-<!--
-    The "referenced-bean-class" element represents the fully qualified class
-    name of the Java class (either abstract or concrete) or Java interface
-    implemented by the corresponding referenced bean.  It must be of type
-    "ClassName".
--->
-<!ELEMENT referenced-bean-class  (#PCDATA)>
-
-
-<!--
-    The "referenced-bean-name" element represents the attribute name under
-    which the corresponding referenced bean may be assumed to be stored,
-    in one of the scopes defined by the "Scope" type.  It must be of type
-    "Identifier".
--->
-<!ELEMENT referenced-bean-name (#PCDATA)>
-
-
-<!--
-    The "render-kit-id" element represents an identifier for the
-    RenderKit represented by the parent "render-kit" element.
--->
-<!ELEMENT render-kit-id   (#PCDATA)>
-
-
-<!--
-    The "render-kit-class" element represents the fully qualified class name
-    of a concrete RenderKit implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT render-kit-class (#PCDATA)>
-
-
-<!--
-    The "renderer-class" element represents the fully qualified class name
-    of a concrete Renderer implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT renderer-class  (#PCDATA)>
-
-<!--
-    The "render-kit-factory" element contains the fully qualified class name
-    of the concrete RenderKitFactory implementation class that will be called
-    when FactoryFinder.getFactory(RENDER_KIT_FACTORY) is called. It must be 
-    of type "ClassName".
--->
-<!ELEMENT render-kit-factory (#PCDATA)>
-
-<!--
-    The "renderer-type" element represents a renderer type identifier for the
-    Renderer represented by the parent "renderer" element.
--->
-<!ELEMENT renderer-type   (#PCDATA)>
-
-<!--
-    The "small-icon" element contains the resource path to a large (16x16)
-    icon image.  The image may be in either GIF or JPG format.
--->
-<!ELEMENT small-icon      (#PCDATA)>
-
-<!--
-     The "supported-locale" element allows authors to declare which
-     locales are supported in this application instance.
-
-     It must be specified as :language:[_:country:[_:variant:]] without
-     the colons, for example "ja_JP_SJIS".  The separators between the
-     segments may be '-' or '_'.
--->
-<!ELEMENT supported-locale (#PCDATA)>
-
-<!--
-    The "to-view" element contains the view identifier of the next view
-    that should be displayed if this navigation rule is matched.  It
-    must be of type "ViewId".
--->
-<!ELEMENT to-view-id      (#PCDATA)>
-
-
-<!--
-    The "validator-class" element represents the fully qualified class name
-    of a concrete Validator implementation class.  It must be of
-    type "ClassName".
--->
-<!ELEMENT validator-class (#PCDATA)>
-
-
-<!--
-    The "validator-id" element represents the identifier under which the
-    corresponding Validator class should be registered.
--->
-<!ELEMENT validator-id    (#PCDATA)>
-
-
-<!--
-    The "value" element is the String representation of a literal
-    value to which a scalar managed property will be set, or a value
-    binding expression ("#{...}") that will be used to calculate the
-    required value.  It will be converted as specified for the actual
-    property type.
--->
-<!ELEMENT value (#PCDATA)>
-
-
-<!--
-    The "value-class" element defines the Java type to which each
-    "value" element's value will be converted to, prior to adding it to
-    the "list-entries" list for a managed property that is a
-    java.util.List, or a "map-entries" map for a managed property that
-    is a java.util.Map.  It must be of type "ClassName".  If omitted,
-    "java.lang.String" is assumed.
--->
-<!ELEMENT value-class (#PCDATA)>
-
-<!--
-    The "variable-resolver" element contains the fully qualified class name
-    of the concrete VariableResolver implementation class that will be used
-    during the processing of value binding expressions.
-    It must be of type "ClassName".
--->
-<!ELEMENT variable-resolver (#PCDATA)>
-
-
-<!-- ============================ Identifier Attributes ==================== -->
-
-
-<!ATTLIST action-listener                   id ID #IMPLIED>
-<!ATTLIST application                       id ID #IMPLIED>
-<!ATTLIST application-factory               id ID #IMPLIED>
-<!ATTLIST attribute                         id ID #IMPLIED>
-<!ATTLIST attribute-class                   id ID #IMPLIED>
-<!ATTLIST attribute-extension               id ID #IMPLIED>
-<!ATTLIST attribute-name                    id ID #IMPLIED>
-<!ATTLIST component                         id ID #IMPLIED>
-<!ATTLIST component-class                   id ID #IMPLIED>
-<!ATTLIST component-extension               id ID #IMPLIED>
-<!ATTLIST component-family                  id ID #IMPLIED>
-<!ATTLIST component-type                    id ID #IMPLIED>
-<!ATTLIST converter                         id ID #IMPLIED>
-<!ATTLIST converter-class                   id ID #IMPLIED>
-<!ATTLIST converter-for-class               id ID #IMPLIED>
-<!ATTLIST converter-id                      id ID #IMPLIED>
-<!ATTLIST default-locale                    id ID #IMPLIED>
-<!ATTLIST default-render-kit-id             id ID #IMPLIED>
-<!ATTLIST default-value                     id ID #IMPLIED>
-<!ATTLIST description                       id ID #IMPLIED>
-<!ATTLIST display-name                      id ID #IMPLIED>
-<!ATTLIST faces-config                      id ID #IMPLIED>
-<!ATTLIST faces-context-factory             id ID #IMPLIED>
-<!ATTLIST facet                             id ID #IMPLIED>
-<!ATTLIST facet-extension                   id ID #IMPLIED>
-<!ATTLIST facet-name                        id ID #IMPLIED>
-<!ATTLIST factory                           id ID #IMPLIED>
-<!ATTLIST from-action                       id ID #IMPLIED>
-<!ATTLIST from-outcome                      id ID #IMPLIED>
-<!ATTLIST from-view-id                      id ID #IMPLIED>
-<!ATTLIST icon                              id ID #IMPLIED>
-<!ATTLIST key                               id ID #IMPLIED>
-<!ATTLIST key-class                         id ID #IMPLIED>
-<!ATTLIST large-icon                        id ID #IMPLIED>
-<!ATTLIST lifecycle                         id ID #IMPLIED>
-<!ATTLIST lifecycle-factory                 id ID #IMPLIED>
-<!ATTLIST list-entries                      id ID #IMPLIED>
-<!ATTLIST locale-config                     id ID #IMPLIED>
-<!ATTLIST managed-bean                      id ID #IMPLIED>
-<!ATTLIST managed-bean-class                id ID #IMPLIED>
-<!ATTLIST managed-bean-name                 id ID #IMPLIED>
-<!ATTLIST managed-bean-scope                id ID #IMPLIED>
-<!ATTLIST managed-property                  id ID #IMPLIED>
-<!ATTLIST map-entries                       id ID #IMPLIED>
-<!ATTLIST map-entry                         id ID #IMPLIED>
-<!ATTLIST message-bundle                    id ID #IMPLIED>
-<!ATTLIST navigation-case                   id ID #IMPLIED>
-<!ATTLIST navigation-handler                id ID #IMPLIED>
-<!ATTLIST navigation-rule                   id ID #IMPLIED>
-<!ATTLIST null-value                        id ID #IMPLIED>
-<!ATTLIST phase-listener                    id ID #IMPLIED>
-<!ATTLIST property                          id ID #IMPLIED>
-<!ATTLIST property-class                    id ID #IMPLIED>
-<!ATTLIST property-extension                id ID #IMPLIED>
-<!ATTLIST property-name                     id ID #IMPLIED>
-<!ATTLIST property-resolver                 id ID #IMPLIED>
-<!ATTLIST redirect                          id ID #IMPLIED>
-<!ATTLIST referenced-bean                   id ID #IMPLIED>
-<!ATTLIST referenced-bean-class             id ID #IMPLIED>
-<!ATTLIST referenced-bean-name              id ID #IMPLIED>
-<!ATTLIST render-kit                        id ID #IMPLIED>
-<!ATTLIST render-kit-class                  id ID #IMPLIED>
-<!ATTLIST render-kit-factory                id ID #IMPLIED>
-<!ATTLIST render-kit-id                     id ID #IMPLIED>
-<!ATTLIST renderer                          id ID #IMPLIED>
-<!ATTLIST renderer-class                    id ID #IMPLIED>
-<!ATTLIST renderer-extension                id ID #IMPLIED>
-<!ATTLIST renderer-type                     id ID #IMPLIED>
-<!ATTLIST small-icon                        id ID #IMPLIED>
-<!ATTLIST state-manager                     id ID #IMPLIED>
-<!ATTLIST suggested-value                   id ID #IMPLIED>
-<!ATTLIST supported-locale                  id ID #IMPLIED>
-<!ATTLIST to-view-id                        id ID #IMPLIED>
-<!ATTLIST validator                         id ID #IMPLIED>
-<!ATTLIST validator-class                   id ID #IMPLIED>
-<!ATTLIST validator-id                      id ID #IMPLIED>
-<!ATTLIST value                             id ID #IMPLIED>
-<!ATTLIST value-class                       id ID #IMPLIED>
-<!ATTLIST variable-resolver                 id ID #IMPLIED>
-<!ATTLIST view-handler                      id ID #IMPLIED>
-
diff --git a/jsf-api/doc/web-facesconfig_1_2.xsd b/jsf-api/doc/web-facesconfig_1_2.xsd
deleted file mode 100644
index 7065ada..0000000
--- a/jsf-api/doc/web-facesconfig_1_2.xsd
+++ /dev/null
@@ -1,2074 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-
-<xsd:schema
-     targetNamespace="http://java.sun.com/xml/ns/javaee"
-     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-     xmlns:xml="http://www.w3.org/XML/1998/namespace"
-     elementFormDefault="qualified"
-     attributeFormDefault="unqualified"
-     version="1.2">
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-
-    <xsd:annotation>
-        <xsd:documentation>
-
-            <![CDATA[
-
-            The XML Schema for the JavaServer Faces Application
-            Configuration File (Version 1.2).
-
-            All JavaServer Faces configuration files must indicate
-            the JavaServer Faces schema by indicating the JavaServer
-            Faces namespace:
-
-            http://java.sun.com/xml/ns/javaee
-
-            and by indicating the version of the schema by
-            using the version element as shown below:
-
-            <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                    xsi:schemaLocation="..."
-                    version="1.2">
-                ...
-            </faces-config>
-
-            The instance documents may indicate the published
-            version of the schema using xsi:schemaLocation attribute
-            for javaee namespace with the following location:
-
-            http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd
-
-            ]]>
-
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:include schemaLocation="javaee_5.xsd"/>
-
-    <!-- **************************************************** -->
-
-    <xsd:element name = "faces-config" type="javaee:faces-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "faces-config" element is the root of the configuration
-                information hierarchy, and contains nested elements for all
-                of the other configuration settings.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:unique name="faces-config-converter-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Converter IDs must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:converter"/>
-            <xsd:field    xpath="javaee:converter-id"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-converter-for-class-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    'converter-for-class' element values must be unique
-                    within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:converter"/>
-            <xsd:field    xpath="javaee:converter-for-class"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-validator-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Validator IDs must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:validator"/>
-            <xsd:field    xpath="javaee:validator-id"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-managed-bean-name-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Managed bean names must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:managed-bean"/>
-            <xsd:field    xpath="javaee:managed-bean-name"/>
-        </xsd:unique>
-    </xsd:element>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "faces-config" element is the root of the configuration
-                information hierarchy, and contains nested elements for all
-                of the other configuration settings.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="application"
-                         type="javaee:faces-config-applicationType"/>
-            <xsd:element name="factory"
-                         type="javaee:faces-config-factoryType"/>
-            <xsd:element name="component"
-                         type="javaee:faces-config-componentType"/>
-            <xsd:element name="converter"
-                         type="javaee:faces-config-converterType"/>
-            <xsd:element name="managed-bean"
-                         type="javaee:faces-config-managed-beanType"/>
-            <xsd:element name="navigation-rule"
-                         type="javaee:faces-config-navigation-ruleType"/>
-            <xsd:element name="referenced-bean"
-                         type="javaee:faces-config-referenced-beanType"/>
-            <xsd:element name="render-kit"
-                         type="javaee:faces-config-render-kitType"/>
-            <xsd:element name="lifecycle"
-                         type="javaee:faces-config-lifecycleType"/>
-            <xsd:element name="validator"
-                         type="javaee:faces-config-validatorType"/>
-            <xsd:element name="faces-config-extension"
-                         type="javaee:faces-config-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:choice>
-            <xsd:attribute name = "id" type = "xsd:ID"/>
-            <xsd:attribute name="version"
-                type="javaee:faces-config-versionType"
-                use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for faces-config.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-applicationType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "application" element provides a mechanism to define the
-                various per-application-singleton implementation artifacts for
-                a particular web application that is utilizing 
-                JavaServer Faces.  For nested elements that are not specified, 
-                the JSF implementation must provide a suitable default.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="action-listener"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "action-listener" element contains the fully 
-                            qualified class name of the concrete 
-                            ActionListener implementation class that will be 
-                            called during the Invoke Application phase of the 
-                            request processing lifecycle.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-render-kit-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "default-render-kit-id" element allows the 
-                            application to define a renderkit to be used other 
-                            than the standard one. 
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="message-bundle"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The base name of a resource bundle representing 
-                            the message resources for this application.  See 
-                            the JavaDocs for the "java.util.ResourceBundle" 
-                            class for more information on the syntax of 
-                            resource bundle names.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="navigation-handler"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "navigation-handler" element contains the 
-                            fully qualified class name of the concrete 
-                            NavigationHandler implementation class that will 
-                            be called during the Invoke Application phase 
-                            of the request processing lifecycle, if the 
-                            default ActionListener (provided by the JSF 
-                            implementation) is used.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="view-handler"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "view-handler" element contains the fully 
-                            qualified class name of the concrete ViewHandler 
-                            implementation class that will be called during 
-                            the Restore View and Render Response phases of the 
-                            request processing lifecycle.  The faces 
-                            implementation must provide a default 
-                            implementation of this class.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="state-manager"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "state-manager" element contains the fully 
-                            qualified class name of the concrete StateManager 
-                            implementation class that will be called during 
-                            the Restore View and Render Response phases of the 
-                            request processing lifecycle.  The faces 
-                            implementation must provide a default 
-                            implementation of this class.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="el-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "el-resolver" element contains the fully
-                            qualified class name of the concrete
-                            javax.el.ELResolver implementation class
-                            that will be used during the processing of
-                            EL expressions.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "property-resolver" element contains the fully 
-                            qualified class name of the concrete 
-                            PropertyResolver implementation class that will 
-                            be used during the processing of value binding 
-                            expressions.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="variable-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "variable-resolver" element contains the fully
-                            qualified class name of the concrete 
-                            VariableResolver implementation class that will 
-                            be used during the processing of value binding 
-                            expressions.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element 
-                name="locale-config"
-                type="javaee:faces-config-locale-configType"/>
-            <xsd:element 
-                name="resource-bundle"
-                type="javaee:faces-config-application-resource-bundleType"/>
-            <xsd:element name="application-extension"
-                         type="javaee:faces-config-application-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            </xsd:choice>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="faces-config-application-resource-bundleType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-              The resource-bundle element inside the application element
-              references a java.util.ResourceBundle instance by name
-              using the var element.  ResourceBundles referenced in this
-              manner may be returned by a call to
-              Application.getResourceBundle() passing the current
-              FacesContext for this request and the value of the var
-              element below.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="base-name"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The fully qualified class name of the
-                        java.util.ResourceBundle instance.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="var"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The name by which this ResourceBundle instance
-                        is retrieved by a call to
-                        Application.getResourceBundle().
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-application-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for application.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-factoryType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "factory" element provides a mechanism to define the 
-                various Factories that comprise parts of the implementation 
-                of JavaServer Faces.  For nested elements that are not 
-                specified, the JSF implementation must provide a suitable 
-                default.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="application-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                        The "application-factory" element contains the 
-                        fully qualified class name of the concrete 
-                        ApplicationFactory implementation class that will 
-                        be called when 
-                        FactoryFinder.getFactory(APPLICATION_FACTORY) is
-                        called.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="faces-context-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                        The "faces-context-factory" element contains the
-                        fully qualified class name of the concrete
-                        FacesContextFactory implementation class that will
-                        be called when 
-                        FactoryFinder.getFactory(FACES_CONTEXT_FACTORY) 
-                        is called.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="lifecycle-factory"
-                        type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                        The "lifecycle-factory" element contains the fully
-                        qualified class name of the concrete LifecycleFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(LIFECYCLE_FACTORY) is called.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="render-kit-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "render-kit-factory" element contains the fully
-                        qualified class name of the concrete RenderKitFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(RENDER_KIT_FACTORY) is 
-                        called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="factory-extension"
-                         type="javaee:faces-config-factory-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:choice>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-factory-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for factory.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-attributeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "attribute" element represents a named, typed, value
-                associated with the parent UIComponent via the generic
-                attributes mechanism.
-
-                Attribute names must be unique within the scope of the parent
-                (or related) component.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="attribute-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "attribute-name" element represents the name under 
-                        which the corresponding value will be stored, in the 
-                        generic attributes of the UIComponent we are related 
-                        to.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "attribute-class" element represents the Java type
-                        of the value associated with this attribute name.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-value"
-                         type="javaee:faces-config-default-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="suggested-value"
-                         type="javaee:faces-config-suggested-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="attribute-extension"
-                         type="javaee:faces-config-attribute-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-attribute-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for attribute.  It may contain 
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-componentType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "component" element represents a concrete UIComponent
-                implementation class that should be registered under the
-                specified type identifier, along with its associated 
-                properties and attributes.  Component types must be unique 
-                within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that 
-                are recognized by the implementation logic of this component.
-                Nested "property" elements identify JavaBeans properties of 
-                the component class that may be exposed for manipulation 
-                via tools.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="component-type"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "component-type" element represents the name under 
-                        which the corresponding UIComponent class should be 
-                        registered.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="component-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "component-class" element represents the fully 
-                        qualified class name of a concrete UIComponent 
-                        implementation class.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet"
-                         type="javaee:faces-config-facetType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="component-extension"
-                         type="javaee:faces-config-component-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-component-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for component.  It may contain 
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-default-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "default-locale" element declares the default locale 
-                for this application instance.
-
-                It must be specified as :language:[_:country:[_:variant:]]
-                without the colons, for example "ja_JP_SJIS".  The
-                separators between the segments may be '-' or '_'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-localeType">
-                <xsd:attribute name="id" type="xsd:ID"/>                
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-
-    <xsd:complexType name="faces-config-default-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "default-value" contains the value for the property or
-                attribute in which this element resides.  This value differs
-                from the "suggested-value" in that the property or attribute
-                must take the value, whereas in "suggested-value" taking the
-                value is optional.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-el-expressionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                EL expressions present within a faces config file
-                must start with the character sequence of '#{' and
-                end with '}'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:string">
-            <xsd:pattern value="#\{.*\}"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-facetType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Define the name and other design-time information for a facet
-                that is associated with a renderer or a component.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="facet-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "facet-name" element represents the facet name 
-                        under which a UIComponent will be added to its parent.  
-                        It must be of type "Identifier".
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet-extension"
-                         type="javaee:faces-config-facet-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-facet-extensionType">
-         <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for facet.  It may contain implementation
-                specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-from-view-idType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The value of from-view-id must contain one of the following 
-                values:
-
-                  - The exact match for a view identifier that is recognized
-                    by the the ViewHandler implementation being used (such as
-                    "/index.jsp" if you are using the default ViewHandler).
-
-                  - A proper prefix of a view identifier, plus a trailing 
-                    "*" character.  This pattern indicates that all view 
-                    identifiers that match the portion of the pattern up to 
-                    the asterisk will match the surrounding rule.  When more 
-                    than one match exists, the match with the longest pattern 
-                    is selected.
-
-                  - An "*" character, which means that this pattern applies 
-                    to all view identifiers.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-from-actionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "from-action" element contains an action reference 
-                expression that must have been executed (by the default 
-                ActionListener for handling application level events) 
-                in order to select the navigation rule.  If not specified, 
-                this rule will be relevant no matter which action reference 
-                was executed (or if no action reference was executed).
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-el-expressionType">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-converterType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "converter" element represents a concrete Converter
-                implementation class that should be registered under the
-                specified converter identifier.  Converter identifiers must 
-                be unique within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that
-                may be configured on the corresponding UIComponent in order 
-                to affect the operation of the Converter.  Nested "property"
-                elements identify JavaBeans properties of the Converter
-                implementation class that may be configured to affect the
-                operation of the Converter.  "attribute" and "property" 
-                elements are intended to allow component developers to 
-                more completely describe their components to tools and users.
-                These elements have no required runtime semantics.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:choice>
-                <xsd:element name="converter-id"
-                             type="javaee:string">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            The "converter-id" element represents the 
-                            identifier under which the corresponding 
-                            Converter class should be registered.
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-                
-                <xsd:element name="converter-for-class"
-                             type="javaee:fully-qualified-classType">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            The "converter-for-class" element represents the 
-                            fully qualified class name for which a Converter 
-                            class will be registered.
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-            </xsd:choice>
-            
-            <xsd:element name="converter-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "converter-class" element represents the fully
-                        qualified class name of a concrete Converter 
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "attribute" elements identify generic
-                       attributes that may be configured on the
-                       corresponding UIComponent in order to affect the
-                       operation of the Converter.  This attribute is
-                       primarily for design-time tools and is not
-                       specified to have any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "property" elements identify JavaBeans
-                       properties of the Converter implementation class
-                       that may be configured to affect the operation of
-                       the Converter.  This attribute is primarily for
-                       design-time tools and is not specified to have
-                       any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="converter-extension"
-                         type="javaee:faces-config-converter-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-converter-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for converter.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-lifecycleType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "lifecycle" element provides a mechanism to specify
-                modifications to the behaviour of the default Lifecycle
-                implementation for this web application.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="phase-listener"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">
-                
-                <xsd:annotation>
-                    <xsd:documentation>
-                    
-                        The "phase-listener" element contains the fully 
-                        qualified class name of the concrete PhaseListener 
-                        implementation class that will be registered on 
-                        the Lifecycle.
-                    
-                    </xsd:documentation>
-            </xsd:annotation>                
-            </xsd:element>
-            <xsd:element name="lifecycle-extension"
-                         type="javaee:faces-config-lifecycle-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-lifecycle-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for lifecycle.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    
-    <!-- **************************************************** -->
-    
-    <xsd:simpleType name="faces-config-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The localeType defines valid locale defined by ISO-639-1
-                and ISO-3166.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:restriction base="xsd:string">
-            <xsd:pattern value="([a-z]{2})[_|\-]?([\p{L}]{2})?[_|\-]?(\w+)?"/>
-        </xsd:restriction>
-  </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-locale-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "locale-config" element allows the app developer to 
-                declare the supported locales for this application.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        
-        <xsd:sequence>
-            <xsd:element name="default-locale"
-                         type="javaee:faces-config-default-localeType"
-                         minOccurs="0">
-            </xsd:element>
-            <xsd:element name="supported-locale"
-                         type="javaee:faces-config-supported-localeType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">                
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-managed-beanType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "managed-bean" element represents a JavaBean, of a 
-                particular class, that will be dynamically instantiated 
-                at runtime (by the default VariableResolver implementation) 
-                if it is referenced as the first element of a value binding 
-                expression, and no corresponding bean can be identified in 
-                any scope.  In addition to the creation of the managed bean, 
-                and the optional storing of it into the specified scope, 
-                the nested managed-property elements can be used to 
-                initialize the contents of settable JavaBeans properties of 
-                the created instance.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="managed-bean-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-name" element represents the 
-                        attribute name under which a managed bean will 
-                        be searched for, as well as stored (unless the 
-                        "managed-bean-scope" value is "none").
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="managed-bean-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-class" element represents the fully
-                        qualified class name of the Java class that will be 
-                        used`to instantiate a new instance if creation of the 
-                        specified`managed bean is requested.
-
-                        The specified class must conform to standard JavaBeans
-                        conventions.  In particular, it must have a public
-                        zero-arguments constructor, and zero or more public
-                        property setters.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element 
-                name="managed-bean-scope"
-                type="javaee:faces-config-managed-bean-scopeOrNoneType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-scope" element represents the scope 
-                        into which a newly created instance of the specified 
-                        managed bean will be stored (unless the value is 
-                        "none").
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="managed-property"
-                             type="javaee:faces-config-managed-propertyType"
-                             minOccurs="0"
-                             maxOccurs="unbounded"/>
-                <xsd:element name="map-entries"
-                             type="javaee:faces-config-map-entriesType"/>
-                <xsd:element name="list-entries"
-                             type="javaee:faces-config-list-entriesType"/>
-            </xsd:choice>
-            <xsd:element name="managed-bean-extension"
-                         type="javaee:faces-config-managed-bean-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-managed-bean-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for managed-bean.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-    
-    <xsd:complexType name="faces-config-managed-bean-scopeOrNoneType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                <![CDATA[
-                Defines the legal values for the <managed-bean-scope>
-                element's body content, which includes all of the scopes
-                normally used in a web application, plus the "none" value
-                indicating that a created bean should not be stored into
-                any scope.
-                ]]>
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string">
-                <xsd:enumeration value="request"/>
-                <xsd:enumeration value="session"/>
-                <xsd:enumeration value="application"/>
-                <xsd:enumeration value="none"/>
-            </xsd:restriction>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-managed-propertyType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "managed-property" element represents an individual 
-                property of a managed bean that will be configured to the 
-                specified value (or value set) if the corresponding 
-                managed bean is automatically created.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="property-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "property-name" element represents the JavaBeans 
-                        property name under which the corresponding value may 
-                        be stored.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-class"
-                         type="javaee:java-typeType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                    
-                        The "property-class" element represents the Java type 
-                        of the value associated with this property name.  
-                        If not specified, it can be inferred from existing 
-                        classes; however, this element should be specified 
-                        if the configuration file is going to be the source 
-                        for generating the corresponding classes.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="map-entries"
-                             type="javaee:faces-config-map-entriesType"/>
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType">
-                </xsd:element>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-                <xsd:element name="list-entries"
-                             type="javaee:faces-config-list-entriesType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-map-entryType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "map-entry" element reprsents a single key-entry pair 
-                that will be added to the computed value of a managed 
-                property of type java.util.Map.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="key"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "key" element is the String representation of a 
-                        map key that will be stored in a managed property of 
-                        type java.util.Map.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType"/>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-map-entriesType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "map-entries' element represents a set of key-entry pairs 
-                that will be added to the computed value of a managed property 
-                of type java.util.Map.  In addition, the Java class types 
-                of the key and entry values may be optionally declared.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="key-class"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "key-class" element defines the Java type to which 
-                        each "key" element in a set of "map-entry" elements 
-                        will be converted to.  If omitted, "java.lang.String" 
-                        is assumed.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="value-class"
-                         type="javaee:faces-config-value-classType"
-                         minOccurs="0"/>                
-            <xsd:element name="map-entry"
-                         type="javaee:faces-config-map-entryType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-navigation-caseType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "navigation-case" element describes a particular 
-                combination of conditions that must match for this case to 
-                be executed, and the view id of the component tree that 
-                should be selected next.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="from-action"
-                         type="javaee:faces-config-from-actionType"
-                         minOccurs="0">
-            </xsd:element>
-            <xsd:element name="from-outcome"
-                         type="javaee:string" minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "from-outcome" element contains a logical outcome
-                        string returned by the execution of an application
-                        action method selected via an "actionRef" property
-                        (or a literal value specified by an "action" property)
-                        of a UICommand component.  If specified, this rule 
-                        will be relevant only if the outcome value matches 
-                        this element's value.  If not specified, this rule 
-                        will be relevant no matter what the outcome value was.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="to-view-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "to-view-id" element contains the view identifier 
-                        of the next view that should be displayed if this
-                        navigation rule is matched.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element 
-                name="redirect"
-                type="javaee:faces-config-redirectType" minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-navigation-ruleType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "navigation-rule" element represents an individual 
-                decision rule that will be utilized by the default 
-                NavigationHandler implementation to make decisions on 
-                what view should be displayed next, based on the 
-                view id being processed.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="from-view-id"
-                         type="javaee:faces-config-from-view-idType"
-                         minOccurs="0"/>
-            <xsd:element name="navigation-case"
-                         type="javaee:faces-config-navigation-caseType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element 
-                name="navigation-rule-extension"
-                type="javaee:faces-config-navigation-rule-extensionType"
-                minOccurs="0"
-                maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-navigation-rule-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for navigation-rule.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-null-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "null-value" element indicates that the managed
-                property in which we are nested will be explicitly
-                set to null if our managed bean is automatically
-                created.  This is different from omitting the managed
-                property element entirely, which will cause no
-                property setter to be called for this property.
-
-                The "null-value" element can only be used when the
-                associated "property-class" identifies a Java class,
-                not a Java primitive.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-    
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-propertyType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "property" element represents a JavaBean property of the 
-                Java class represented by our parent element.
-
-                Property names must be unique within the scope of the Java 
-                class that is represented by the parent element, and must 
-                correspond to property names that will be recognized when 
-                performing introspection against that class via 
-                java.beans.Introspector.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="property-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "property-name" element represents the JavaBeans 
-                        property name under which the corresponding value 
-                        may be stored.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-class"
-                         type="javaee:java-typeType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "property-class" element represents the Java type 
-                        of the value associated with this property name.  
-                        If not specified, it can be inferred from existing 
-                        classes; however, this element should be specified if 
-                        the configuration file is going to be the source for 
-                        generating the corresponding classes.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-value"
-                         type="javaee:faces-config-default-valueType"
-                         minOccurs="0"/>               
-            <xsd:element name="suggested-value"
-                         type="javaee:faces-config-suggested-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="property-extension"
-                         type="javaee:faces-config-property-extensionType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-property-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for property.  It may contain 
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-redirectType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                    The "redirect" element indicates that navigation to the
-                    specified "to-view-id" should be accomplished by 
-                    performing an HTTP redirect rather than the usual 
-                    ViewHandler mechanisms.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-referenced-beanType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "referenced-bean" element represents at design time the 
-                promise that a Java object of the specified type will exist at 
-                runtime in some scope, under the specified key.  This can be 
-                used by design time tools to construct user interface dialogs 
-                based on the properties of the specified class.  The presence 
-                or absence of a referenced bean element has no impact on the 
-                JavaServer Faces runtime environment inside a web application.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="referenced-bean-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "referenced-bean-name" element represents the 
-                        attribute name under which the corresponding 
-                        referenced bean may be assumed to be stored, in one 
-                        of 'request', 'session', or 'application' scopes.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="referenced-bean-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "referenced-bean-class" element represents the 
-                        fully qualified class name of the Java class 
-                        (either abstract or concrete) or Java interface 
-                        implemented by the corresponding referenced bean. 
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-render-kitType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "render-kit" element represents a concrete RenderKit 
-                implementation that should be registered under the specified 
-                render-kit-id.  If no render-kit-id is specified, the 
-                identifier of the default RenderKit 
-                (RenderKitFactory.DEFAULT_RENDER_KIT) is assumed.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="render-kit-id"
-                         type="javaee:string"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "render-kit-id" element represents an identifier 
-                        for the RenderKit represented by the parent 
-                        "render-kit" element.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="render-kit-class"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "render-kit-class" element represents the fully 
-                        qualified class name of a concrete RenderKit 
-                        implementation class.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="renderer"
-                         type="javaee:faces-config-rendererType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded"/>
-            <xsd:element name="render-kit-extension"
-                         type="javaee:faces-config-render-kit-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-rendererType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "renderer" element represents a concrete Renderer 
-                implementation class that should be registered under the 
-                specified component family and renderer type identifiers, 
-                in the RenderKit associated with the parent "render-kit" 
-                element.  Combinations of component family and 
-                renderer type must be unique within the RenderKit 
-                associated with the parent "render-kit" element.
-
-                Nested "attribute" elements identify generic component 
-                attributes that are recognized by this renderer.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="component-family"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "component-family" element represents the 
-                        component family for which the Renderer represented 
-                        by the parent "renderer" element will be used.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>                    
-            </xsd:element>
-            <xsd:element name="renderer-type"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "renderer-type" element represents a renderer type 
-                        identifier for the Renderer represented by the parent 
-                        "renderer" element.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="renderer-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "renderer-class" element represents the fully
-                        qualified class name of a concrete Renderer
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet"
-                         type="javaee:faces-config-facetType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="renderer-extension"
-                         type="javaee:faces-config-renderer-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-renderer-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for renderer.  It may contain implementation
-                specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-render-kit-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for render-kit.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-suggested-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "suggested-value" contains the value for the property or
-                attribute in which this element resides.  This value is 
-                advisory only and is intended for tools to use when 
-                populating pallettes.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-supported-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "supported-locale" element allows authors to declare
-                which locales are supported in this application instance.
-
-                It must be specified as :language:[_:country:[_:variant:]]
-                without the colons, for example "ja_JP_SJIS".  The
-                separators between the segments may be '-' or '_'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-localeType">
-                <xsd:attribute name="id" type="xsd:ID"/> 
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-validatorType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "validator" element represents a concrete Validator
-                implementation class that should be registered under the
-                specified validator identifier.  Validator identifiers must 
-                be unique within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that 
-                may be configured on the corresponding UIComponent in order 
-                to affect the operation of the Validator.  Nested "property"
-                elements identify JavaBeans properties of the Validator
-                implementation class that may be configured to affect the
-                operation of the Validator.  "attribute" and "property" 
-                elements are intended to allow component developers to 
-                more completely describe their components to tools and users.
-                These elements have no required runtime semantics.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="validator-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "validator-id" element represents the identifier 
-                        under which the corresponding Validator class should 
-                        be registered.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>                
-            </xsd:element>
-            <xsd:element name="validator-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "validator-class" element represents the fully 
-                        qualified class name of a concrete Validator 
-                        implementation class.  
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                       Nested "attribute" elements identify generic
-                       attributes that may be configured on the
-                       corresponding UIComponent in order to affect the
-                       operation of the Validator.  This attribute is
-                       primarily for design-time tools and is not
-                       specified to have any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-
-            </xsd:element>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "property" elements identify JavaBeans
-                       properties of the Validator implementation class
-                       that may be configured to affect the operation of
-                       the Validator.  This attribute is primarily for
-                       design-time tools and is not specified to have
-                       any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="validator-extension"
-                         type="javaee:faces-config-validator-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-validator-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for validator.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "value" element is the String representation of
-                a literal value to which a scalar managed property
-                will be set, or a value binding expression ("#{...}")
-                that will be used to calculate the required value.
-                It will be converted as specified for the actual
-                property type.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:union 
-            memberTypes="javaee:faces-config-el-expressionType xsd:string"/>
-    </xsd:simpleType>
-    
-    <!-- **************************************************** -->
-    
-    <xsd:complexType name="faces-config-value-classType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "value-class" element defines the Java type to which each
-                "value" element's value will be converted to, prior to adding 
-                it to the "list-entries" list for a managed property that is 
-                a java.util.List, or a "map-entries" map for a managed 
-                property that is a java.util.Map.  
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:fully-qualified-classType"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-list-entriesType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "list-entries" element represents a set of initialization
-                elements for a managed property that is a java.util.List or an
-                array.  In the former case, the "value-class" element can 
-                optionally be used to declare the Java type to which each 
-                value should be converted before adding it to the Collection.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="value-class"
-                         type="javaee:faces-config-value-classType"
-                         minOccurs="0"/>
-            <xsd:choice minOccurs="0" maxOccurs="unbounded">
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType"/>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-versionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                This type contains the recognized versions of
-                faces-config supported.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="1.2"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-</xsd:schema>
diff --git a/jsf-api/doc/web-facesconfig_2_0.xsd b/jsf-api/doc/web-facesconfig_2_0.xsd
deleted file mode 100644
index b90bc42..0000000
--- a/jsf-api/doc/web-facesconfig_2_0.xsd
+++ /dev/null
@@ -1,2737 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-
-<xsd:schema
-     targetNamespace="http://java.sun.com/xml/ns/javaee"
-     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-     xmlns:xml="http://www.w3.org/XML/1998/namespace"
-     elementFormDefault="qualified"
-     attributeFormDefault="unqualified"
-     version="2.0">
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-
-    <xsd:annotation>
-        <xsd:documentation>
-
-            <![CDATA[
-
-            The XML Schema for the JavaServer Faces Application
-            Configuration File (Version 2.0).
-
-            All JavaServer Faces configuration files must indicate
-            the JavaServer Faces schema by indicating the JavaServer
-            Faces namespace:
-
-            http://java.sun.com/xml/ns/javaee
-
-            and by indicating the version of the schema by
-            using the version element as shown below:
-
-            <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                    xsi:schemaLocation="..."
-                    version="2.0">
-                ...
-            </faces-config>
-
-            The instance documents may indicate the published
-            version of the schema using xsi:schemaLocation attribute
-            for javaee namespace with the following location:
-
-            http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
-
-            ]]>
-
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:include schemaLocation="javaee_5.xsd"/>
-
-    <!-- **************************************************** -->
-
-    <xsd:element name = "faces-config" type="javaee:faces-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "faces-config" element is the root of the configuration
-                information hierarchy, and contains nested elements for all
-                of the other configuration settings.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:unique name="faces-config-behavior-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Behavior IDs must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:behavior"/>
-            <xsd:field    xpath="javaee:behavior-id"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-converter-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Converter IDs must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:converter"/>
-            <xsd:field    xpath="javaee:converter-id"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-converter-for-class-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    'converter-for-class' element values must be unique
-                    within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:converter"/>
-            <xsd:field    xpath="javaee:converter-for-class"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-validator-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Validator IDs must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:validator"/>
-            <xsd:field    xpath="javaee:validator-id"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-managed-bean-name-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Managed bean names must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:managed-bean"/>
-            <xsd:field    xpath="javaee:managed-bean-name"/>
-        </xsd:unique>
-    </xsd:element>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "faces-config" element is the root of the configuration
-                information hierarchy, and contains nested elements for all
-                of the other configuration settings.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="application"
-                         type="javaee:faces-config-applicationType"/>
-            <xsd:element name="ordering"
-                         type="javaee:faces-config-orderingType"/>
-            <xsd:element name="absolute-ordering"
-                         type="javaee:faces-config-absoluteOrderingType"
-                         minOccurs="0"
-                         maxOccurs="1"/>
-            <xsd:element name="factory"
-                         type="javaee:faces-config-factoryType"/>
-            <xsd:element name="component"
-                         type="javaee:faces-config-componentType"/>
-            <xsd:element name="converter"
-                         type="javaee:faces-config-converterType"/>
-            <xsd:element name="managed-bean"
-                         type="javaee:faces-config-managed-beanType"/>
-            <xsd:element name="name"
-                         type="javaee:java-identifierType"
-                         minOccurs="0"
-                         maxOccurs="1">
-              <xsd:annotation>
-                  <xsd:documentation>
-                      
-                      The "name" element within the top level "faces-config"
-                      element declares the name of this application
-                      configuration resource.  Such names are used
-                      in the document ordering scheme specified in section
-                      JSF.11.4.6.
-                      
-                  </xsd:documentation>
-              </xsd:annotation>
-            </xsd:element>
-                             
-            <xsd:element name="navigation-rule"
-                         type="javaee:faces-config-navigation-ruleType"/>
-            <xsd:element name="referenced-bean"
-                         type="javaee:faces-config-referenced-beanType"/>
-            <xsd:element name="render-kit"
-                         type="javaee:faces-config-render-kitType"/>
-            <xsd:element name="lifecycle"
-                         type="javaee:faces-config-lifecycleType"/>
-            <xsd:element name="validator"
-                         type="javaee:faces-config-validatorType"/>
-            <xsd:element name="behavior"
-                         type="javaee:faces-config-behaviorType"/>
-            <xsd:element name="faces-config-extension"
-                         type="javaee:faces-config-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:choice>
-        <xsd:attribute name="metadata-complete"
-                       type="xsd:boolean"
-                       use="optional">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    The metadata-complete attribute defines whether this
-                    JavaServer Faces application is complete, or whether
-                    the class files available to this module and packaged with
-                    this application should be examined for annotations
-                    that specify configuration information.
-                    
-                    This attribute is only inspected on the application 
-                    configuration resource file located at "WEB-INF/faces-config.xml".
-                    The presence of this attribute on any application configuration
-                    resource other than the one located at "WEB-INF/faces-config.xml",
-                    including any files named using the javax.faces.CONFIG_FILES
-                    attribute, must be ignored.
-
-                    If metadata-complete is set to "true", the JavaServer Faces
-                    runtime must ignore any annotations that specify configuration
-                    information, which might be present in the class files
-                    of the application.
-
-                    If metadata-complete is not specified or is set to
-                    "false", the JavaServer Faces runtime must examine the class
-                    files of the application for annotations, as specified by
-                    the specification.
-
-                    If "WEB-INF/faces-config.xml" is not present, the JavaServer
-                    Faces runtime will assume metadata-complete to be "false".
-
-                    The value of this attribute will have no impact on
-                    runtime annotations such as @ResourceDependency or
-                    @ListenerFor.
-                </xsd:documentation>
-            </xsd:annotation>
-        </xsd:attribute>
-        <xsd:attribute name="id" type="xsd:ID" />
-        <xsd:attribute name="version"
-                       type="javaee:faces-config-versionType"
-                       use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for faces-config.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-
-    <xsd:complexType name="faces-config-orderingType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-              Please see section JSF.11.4.6 for the specification of this element.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="after" 
-                         type="javaee:faces-config-ordering-orderingType"
-                         minOccurs="0"
-                         maxOccurs="1"/>
-            <xsd:element name="before" 
-                         type="javaee:faces-config-ordering-orderingType"
-                         minOccurs="0"
-                         maxOccurs="1"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="faces-config-ordering-orderingType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                This element contains a sequence of "id" elements, each of which
-                refers to an application configuration resource by the "id"
-                declared on its faces-config element.  This element can also contain
-                a single "others" element which specifies that this document comes
-                before or after other documents within the application.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="name" type="javaee:java-identifierType" minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="others" type="javaee:faces-config-ordering-othersType" minOccurs="0" maxOccurs="1" />
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="faces-config-ordering-othersType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                This element indicates that the ordering sub-element in which
-                it was placed should take special action regarding the ordering
-                of this application resource relative to other
-                application configuration resources.  See section JSF.11.4.6
-                for the complete specification.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-
-    <xsd:complexType name="faces-config-absoluteOrderingType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-              Only relevant if this is placed within the /WEB-INF/faces-config.xml.
-              Please see section JSF.11.4.6 for the specification for details.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="name" type="javaee:java-identifierType" minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="others" type="javaee:faces-config-ordering-othersType" minOccurs="0" maxOccurs="1" />
-        </xsd:choice>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-
-    <xsd:complexType name="faces-config-applicationType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "application" element provides a mechanism to define the
-                various per-application-singleton implementation artifacts for
-                a particular web application that is utilizing
-                JavaServer Faces.  For nested elements that are not specified,
-                the JSF implementation must provide a suitable default.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="action-listener"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "action-listener" element contains the fully
-                            qualified class name of the concrete
-                            ActionListener implementation class that will be
-                            called during the Invoke Application phase of the
-                            request processing lifecycle.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-render-kit-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "default-render-kit-id" element allows the
-                            application to define a renderkit to be used other
-                            than the standard one.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="message-bundle"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The base name of a resource bundle representing
-                            the message resources for this application.  See
-                            the JavaDocs for the "java.util.ResourceBundle"
-                            class for more information on the syntax of
-                            resource bundle names.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="navigation-handler"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "navigation-handler" element contains the
-                            fully qualified class name of the concrete
-                            NavigationHandler implementation class that will
-                            be called during the Invoke Application phase
-                            of the request processing lifecycle, if the
-                            default ActionListener (provided by the JSF
-                            implementation) is used.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="view-handler"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "view-handler" element contains the fully
-                            qualified class name of the concrete ViewHandler
-                            implementation class that will be called during
-                            the Restore View and Render Response phases of the
-                            request processing lifecycle.  The faces
-                            implementation must provide a default
-                            implementation of this class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="state-manager"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "state-manager" element contains the fully
-                            qualified class name of the concrete StateManager
-                            implementation class that will be called during
-                            the Restore View and Render Response phases of the
-                            request processing lifecycle.  The faces
-                            implementation must provide a default
-                            implementation of this class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="el-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "el-resolver" element contains the fully
-                            qualified class name of the concrete
-                            javax.el.ELResolver implementation class
-                            that will be used during the processing of
-                            EL expressions.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "property-resolver" element contains the fully
-                            qualified class name of the concrete
-                            PropertyResolver implementation class that will
-                            be used during the processing of value binding
-                            expressions.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="variable-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "variable-resolver" element contains the fully
-                            qualified class name of the concrete
-                            VariableResolver implementation class that will
-                            be used during the processing of value binding
-                            expressions.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="resource-handler"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        <![CDATA[
-
-                            The "resource-handler" element contains the
-                            fully qualified class name of the concrete
-                            ResourceHandler implementation class that
-                            will be used during rendering and decoding
-                            of resource requests The standard
-                            constructor based decorator pattern used for
-                            other application singletons will be
-                            honored.
-
-                        ]]>
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="system-event-listener"
-                         type="javaee:faces-config-system-event-listenerType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-            </xsd:element>
-            <xsd:element
-                name="locale-config"
-                type="javaee:faces-config-locale-configType"/>
-            <xsd:element
-                name="resource-bundle"
-                type="javaee:faces-config-application-resource-bundleType"/>
-            <xsd:element name="application-extension"
-                         type="javaee:faces-config-application-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element
-                name="default-validators"
-                type="javaee:faces-config-default-validatorsType"/>
-            </xsd:choice>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="faces-config-application-resource-bundleType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-              The resource-bundle element inside the application element
-              references a java.util.ResourceBundle instance by name
-              using the var element.  ResourceBundles referenced in this
-              manner may be returned by a call to
-              Application.getResourceBundle() passing the current
-              FacesContext for this request and the value of the var
-              element below.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="base-name"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The fully qualified class name of the
-                        java.util.ResourceBundle instance.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="var"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The name by which this ResourceBundle instance
-                        is retrieved by a call to
-                        Application.getResourceBundle().
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-application-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for application.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-factoryType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "factory" element provides a mechanism to define the
-                various Factories that comprise parts of the implementation
-                of JavaServer Faces.  For nested elements that are not
-                specified, the JSF implementation must provide a suitable
-                default.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="application-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "application-factory" element contains the
-                        fully qualified class name of the concrete
-                        ApplicationFactory implementation class that will
-                        be called when
-                        FactoryFinder.getFactory(APPLICATION_FACTORY) is
-                        called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="exception-handler-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "exception-handler-factory" element contains the
-                        fully qualified class name of the concrete
-                        ExceptionHandlerFactory implementation class that will
-                        be called when
-                        FactoryFinder.getFactory(EXCEPTION_HANDLER_FACTORY)
-                        is called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="external-context-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "external-context-factory" element contains the
-                        fully qualified class name of the concrete
-                        ExternalContextFactory implementation class that will
-                        be called when
-                        FactoryFinder.getFactory(EXTERNAL_CONTEXT_FACTORY)
-                        is called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-
-            <xsd:element name="faces-context-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "faces-context-factory" element contains the
-                        fully qualified class name of the concrete
-                        FacesContextFactory implementation class that will
-                        be called when
-                        FactoryFinder.getFactory(FACES_CONTEXT_FACTORY)
-                        is called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-
-            <xsd:element name="partial-view-context-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "partial-view-context-factory" element contains the
-                        fully qualified class name of the concrete
-                        PartialViewContextFactory implementation class that will
-                        be called when FactoryFinder.getFactory
-                        (FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY) is called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-
-            <xsd:element name="lifecycle-factory"
-                        type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "lifecycle-factory" element contains the fully
-                        qualified class name of the concrete LifecycleFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(LIFECYCLE_FACTORY) is called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="view-declaration-language-factory"
-                        type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "view-declaration-language-factory" element contains
-                        the fully qualified class name of the concrete
-                        ViewDeclarationLanguageFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(VIEW_DECLARATION_FACTORY) is called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="tag-handler-delegate-factory"
-                        type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "tag-handler-delegate-factory" element contains
-                        the fully qualified class name of the concrete
-                        ViewDeclarationLanguageFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(TAG_HANDLER_DELEGATE_FACTORY) is called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="render-kit-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "render-kit-factory" element contains the fully
-                        qualified class name of the concrete RenderKitFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(RENDER_KIT_FACTORY) is
-                        called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="visit-context-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "visit-context-factory" element contains the fully
-                        qualified class name of the concrete VisitContextFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(VISIT_CONTEXT_FACTORY) is
-                        called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="factory-extension"
-                         type="javaee:faces-config-factory-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:choice>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-factory-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for factory.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-attributeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "attribute" element represents a named, typed, value
-                associated with the parent UIComponent via the generic
-                attributes mechanism.
-
-                Attribute names must be unique within the scope of the parent
-                (or related) component.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="attribute-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "attribute-name" element represents the name under
-                        which the corresponding value will be stored, in the
-                        generic attributes of the UIComponent we are related
-                        to.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "attribute-class" element represents the Java type
-                        of the value associated with this attribute name.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-value"
-                         type="javaee:faces-config-default-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="suggested-value"
-                         type="javaee:faces-config-suggested-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="attribute-extension"
-                         type="javaee:faces-config-attribute-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-attribute-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for attribute.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-componentType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "component" element represents a concrete UIComponent
-                implementation class that should be registered under the
-                specified type identifier, along with its associated
-                properties and attributes.  Component types must be unique
-                within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that
-                are recognized by the implementation logic of this component.
-                Nested "property" elements identify JavaBeans properties of
-                the component class that may be exposed for manipulation
-                via tools.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="component-type"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "component-type" element represents the name under
-                        which the corresponding UIComponent class should be
-                        registered.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="component-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "component-class" element represents the fully
-                        qualified class name of a concrete UIComponent
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet"
-                         type="javaee:faces-config-facetType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="component-extension"
-                         type="javaee:faces-config-component-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-component-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for component.  It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-default-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "default-locale" element declares the default locale
-                for this application instance.
-
-                It must be specified as :language:[_:country:[_:variant:]]
-                without the colons, for example "ja_JP_SJIS".  The
-                separators between the segments may be '-' or '_'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-localeType">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-
-    <xsd:complexType name="faces-config-default-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "default-value" contains the value for the property or
-                attribute in which this element resides.  This value differs
-                from the "suggested-value" in that the property or attribute
-                must take the value, whereas in "suggested-value" taking the
-                value is optional.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:restriction>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-el-expressionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                EL expressions present within a faces config file
-                must start with the character sequence of '#{' and
-                end with '}'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:string">
-            <xsd:pattern value="#\{.*\}"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-facetType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Define the name and other design-time information for a facet
-                that is associated with a renderer or a component.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="facet-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "facet-name" element represents the facet name
-                        under which a UIComponent will be added to its parent.
-                        It must be of type "Identifier".
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet-extension"
-                         type="javaee:faces-config-facet-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-facet-extensionType">
-         <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for facet.  It may contain implementation
-                specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-from-view-idType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The value of from-view-id must contain one of the following
-                values:
-
-                  - The exact match for a view identifier that is recognized
-                    by the the ViewHandler implementation being used (such as
-                    "/index.jsp" if you are using the default ViewHandler).
-
-                  - A proper prefix of a view identifier, plus a trailing
-                    "*" character.  This pattern indicates that all view
-                    identifiers that match the portion of the pattern up to
-                    the asterisk will match the surrounding rule.  When more
-                    than one match exists, the match with the longest pattern
-                    is selected.
-
-                  - An "*" character, which means that this pattern applies
-                    to all view identifiers.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:restriction>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-from-actionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "from-action" element contains an action reference
-                expression that must have been executed (by the default
-                ActionListener for handling application level events)
-                in order to select the navigation rule.  If not specified,
-                this rule will be relevant no matter which action reference
-                was executed (or if no action reference was executed).
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-el-expressionType">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-ifType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "if" element defines a condition that must resolve
-                to true in order for the navigation case on which it is
-                defined to be matched, with the existing match criteria
-                (action method and outcome) as a prerequiste, if present.
-                The condition is defined declaratively using a value
-                expression in the body of this element. The expression is
-                evaluated at the time the navigation case is being matched.
-                If the "from-outcome" is omitted and this element is
-                present, the navigation handler will match a null outcome
-                and use the condition return value to determine if the
-                case should be considered a match.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-el-expressionType">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-converterType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "converter" element represents a concrete Converter
-                implementation class that should be registered under the
-                specified converter identifier.  Converter identifiers must
-                be unique within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that
-                may be configured on the corresponding UIComponent in order
-                to affect the operation of the Converter.  Nested "property"
-                elements identify JavaBeans properties of the Converter
-                implementation class that may be configured to affect the
-                operation of the Converter.  "attribute" and "property"
-                elements are intended to allow component developers to
-                more completely describe their components to tools and users.
-                These elements have no required runtime semantics.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:choice>
-                <xsd:element name="converter-id"
-                             type="javaee:string">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            The "converter-id" element represents the
-                            identifier under which the corresponding
-                            Converter class should be registered.
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-
-                <xsd:element name="converter-for-class"
-                             type="javaee:fully-qualified-classType">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            The "converter-for-class" element represents the
-                            fully qualified class name for which a Converter
-                            class will be registered.
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-            </xsd:choice>
-
-            <xsd:element name="converter-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "converter-class" element represents the fully
-                        qualified class name of a concrete Converter
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "attribute" elements identify generic
-                       attributes that may be configured on the
-                       corresponding UIComponent in order to affect the
-                       operation of the Converter.  This attribute is
-                       primarily for design-time tools and is not
-                       specified to have any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "property" elements identify JavaBeans
-                       properties of the Converter implementation class
-                       that may be configured to affect the operation of
-                       the Converter.  This attribute is primarily for
-                       design-time tools and is not specified to have
-                       any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="converter-extension"
-                         type="javaee:faces-config-converter-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-converter-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for converter.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-lifecycleType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "lifecycle" element provides a mechanism to specify
-                modifications to the behaviour of the default Lifecycle
-                implementation for this web application.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="phase-listener"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "phase-listener" element contains the fully
-                        qualified class name of the concrete PhaseListener
-                        implementation class that will be registered on
-                        the Lifecycle.
-
-                    </xsd:documentation>
-            </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="lifecycle-extension"
-                         type="javaee:faces-config-lifecycle-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-lifecycle-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for lifecycle.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The localeType defines valid locale defined by ISO-639-1
-                and ISO-3166.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:restriction base="xsd:string">
-            <xsd:pattern value="([a-z]{2})[_|\-]?([\p{L}]{2})?[_|\-]?(\w+)?"/>
-        </xsd:restriction>
-  </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-locale-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "locale-config" element allows the app developer to
-                declare the supported locales for this application.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="default-locale"
-                         type="javaee:faces-config-default-localeType"
-                         minOccurs="0">
-            </xsd:element>
-            <xsd:element name="supported-locale"
-                         type="javaee:faces-config-supported-localeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-default-validatorsType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "default-validators" element allows the app developer to
-                register a set of validators, referenced by identifier, that
-                are automatically assigned to any EditableValueHolder component
-                in the application, unless overridden or disabled locally.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="validator-id"
-                         type="javaee:string"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "validator-id" element represents the identifier
-                        of a registered validator.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-managed-beanType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "managed-bean" element represents a JavaBean, of a
-                particular class, that will be dynamically instantiated
-                at runtime (by the default VariableResolver implementation)
-                if it is referenced as the first element of a value binding
-                expression, and no corresponding bean can be identified in
-                any scope.  In addition to the creation of the managed bean,
-                and the optional storing of it into the specified scope,
-                the nested managed-property elements can be used to
-                initialize the contents of settable JavaBeans properties of
-                the created instance.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="managed-bean-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-name" element represents the
-                        attribute name under which a managed bean will
-                        be searched for, as well as stored (unless the
-                        "managed-bean-scope" value is "none").
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="managed-bean-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-class" element represents the fully
-                        qualified class name of the Java class that will be
-                        used`to instantiate a new instance if creation of the
-                        specified`managed bean is requested.
-
-                        The specified class must conform to standard JavaBeans
-                        conventions.  In particular, it must have a public
-                        zero-arguments constructor, and zero or more public
-                        property setters.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element
-                name="managed-bean-scope"
-                type="javaee:faces-config-managed-bean-scopeOrNoneType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-scope" element represents the scope
-                        into which a newly created instance of the specified
-                        managed bean will be stored (unless the value is
-                        "none").
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="managed-property"
-                             type="javaee:faces-config-managed-propertyType"
-                             minOccurs="0"
-                             maxOccurs="unbounded"/>
-                <xsd:element name="map-entries"
-                             type="javaee:faces-config-map-entriesType"/>
-                <xsd:element name="list-entries"
-                             type="javaee:faces-config-list-entriesType"/>
-            </xsd:choice>
-            <xsd:element name="managed-bean-extension"
-                         type="javaee:faces-config-managed-bean-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="eager"
-                       type="xsd:boolean"
-                       use="optional">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    This attribute is only considered when associated with
-                    an application-scoped managed bean. If the value of the eager
-                    attribute is true the runtime must instantiate this class
-                    and store the instance within the application scope when the
-                    application starts.
-
-                    If eager is unspecified or is false, the default "lazy"
-                    instantiation and scoped storage of the managed bean
-                    will occur.
-
-                </xsd:documentation>
-            </xsd:annotation>
-        </xsd:attribute>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-managed-bean-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for managed-bean.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-managed-bean-scopeOrNoneType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                <![CDATA[
-                Defines the legal values for the <managed-bean-scope>
-                element's body content, which includes all of the scopes
-                normally used in a web application, plus the "none" value
-                indicating that a created bean should not be stored into
-                any scope.  Alternatively, an EL expression may be used
-                as the value of this element.  The result of evaluating this
-                expression must by of type java.util.Map.
-                ]]>
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string">
-            <xsd:pattern value="view|request|session|application|none|#\{.*\}"/>
-            </xsd:restriction>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-managed-propertyType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "managed-property" element represents an individual
-                property of a managed bean that will be configured to the
-                specified value (or value set) if the corresponding
-                managed bean is automatically created.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="property-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "property-name" element represents the JavaBeans
-                        property name under which the corresponding value may
-                        be stored.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-class"
-                         type="javaee:java-typeType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "property-class" element represents the Java type
-                        of the value associated with this property name.
-                        If not specified, it can be inferred from existing
-                        classes; however, this element should be specified
-                        if the configuration file is going to be the source
-                        for generating the corresponding classes.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="map-entries"
-                             type="javaee:faces-config-map-entriesType"/>
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType">
-                </xsd:element>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-                <xsd:element name="list-entries"
-                             type="javaee:faces-config-list-entriesType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-map-entryType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "map-entry" element reprsents a single key-entry pair
-                that will be added to the computed value of a managed
-                property of type java.util.Map.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="key"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "key" element is the String representation of a
-                        map key that will be stored in a managed property of
-                        type java.util.Map.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType"/>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-map-entriesType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "map-entries' element represents a set of key-entry pairs
-                that will be added to the computed value of a managed property
-                of type java.util.Map.  In addition, the Java class types
-                of the key and entry values may be optionally declared.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="key-class"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "key-class" element defines the Java type to which
-                        each "key" element in a set of "map-entry" elements
-                        will be converted to.  If omitted, "java.lang.String"
-                        is assumed.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="value-class"
-                         type="javaee:faces-config-value-classType"
-                         minOccurs="0"/>
-            <xsd:element name="map-entry"
-                         type="javaee:faces-config-map-entryType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-navigation-caseType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "navigation-case" element describes a particular
-                combination of conditions that must match for this case to
-                be executed, and the view id of the component tree that
-                should be selected next.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="from-action"
-                         type="javaee:faces-config-from-actionType"
-                         minOccurs="0">
-            </xsd:element>
-            <xsd:element name="from-outcome"
-                         type="javaee:string" minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "from-outcome" element contains a logical outcome
-                        string returned by the execution of an application
-                        action method selected via an "actionRef" property
-                        (or a literal value specified by an "action" property)
-                        of a UICommand component.  If specified, this rule
-                        will be relevant only if the outcome value matches
-                        this element's value.  If not specified, this rule
-                        will be relevant if the outcome value is non-null
-                        or, if the "if" element is present, will be relevant
-                        for any outcome value, with the assumption that the
-                        condition specified in the "if" element ultimately
-                        determines if this rule is a match.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="if"
-                         type="javaee:faces-config-ifType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Please see section JSF.7.4.2 for the specification of this element.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="to-view-id"
-                         type="javaee:faces-config-valueType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "to-view-id" element contains the view identifier
-                        of the next view that should be displayed if this
-                        navigation rule is matched. If the contents is a
-                        value expression, it should be resolved by the
-                        navigation handler to obtain the view identifier.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element
-                name="redirect"
-                type="javaee:faces-config-redirectType" minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-navigation-ruleType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "navigation-rule" element represents an individual
-                decision rule that will be utilized by the default
-                NavigationHandler implementation to make decisions on
-                what view should be displayed next, based on the
-                view id being processed.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="from-view-id"
-                         type="javaee:faces-config-from-view-idType"
-                         minOccurs="0"/>
-            <xsd:element name="navigation-case"
-                         type="javaee:faces-config-navigation-caseType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element
-                name="navigation-rule-extension"
-                type="javaee:faces-config-navigation-rule-extensionType"
-                minOccurs="0"
-                maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-navigation-rule-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for navigation-rule.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-null-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "null-value" element indicates that the managed
-                property in which we are nested will be explicitly
-                set to null if our managed bean is automatically
-                created.  This is different from omitting the managed
-                property element entirely, which will cause no
-                property setter to be called for this property.
-
-                The "null-value" element can only be used when the
-                associated "property-class" identifies a Java class,
-                not a Java primitive.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-propertyType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "property" element represents a JavaBean property of the
-                Java class represented by our parent element.
-
-                Property names must be unique within the scope of the Java
-                class that is represented by the parent element, and must
-                correspond to property names that will be recognized when
-                performing introspection against that class via
-                java.beans.Introspector.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="property-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "property-name" element represents the JavaBeans
-                        property name under which the corresponding value
-                        may be stored.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-class"
-                         type="javaee:java-typeType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "property-class" element represents the Java type
-                        of the value associated with this property name.
-                        If not specified, it can be inferred from existing
-                        classes; however, this element should be specified if
-                        the configuration file is going to be the source for
-                        generating the corresponding classes.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-value"
-                         type="javaee:faces-config-default-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="suggested-value"
-                         type="javaee:faces-config-suggested-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="property-extension"
-                         type="javaee:faces-config-property-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-property-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for property.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-redirectType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                    The "redirect" element indicates that navigation to the
-                    specified "to-view-id" should be accomplished by
-                    performing an HTTP redirect rather than the usual
-                    ViewHandler mechanisms.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="view-param"
-                         type="javaee:faces-config-redirect-viewParamType"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="redirect-param"
-                         type="javaee:faces-config-redirect-redirectParamType"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-        <xsd:attribute name="include-view-params" type="xsd:boolean" use="optional"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-redirect-viewParamType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                    This element was introduced due to a specification
-                    error, and is now deprecated.  The correct name for
-                    this element is "redirect-param" and its meaning is
-                    documented therein.  The "view-param" element is
-                    maintained to preserve backwards compatibility.
-                    Implementations must treat this element the same as
-                    "redirect-param".
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="name"
-                         type="javaee:string"
-                         minOccurs="1" maxOccurs="1"/>
-            <xsd:element name="value"
-                         type="javaee:string"
-                         minOccurs="1" maxOccurs="1"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-redirect-redirectParamType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                    The "redirect-param" element, only valid within
-                    a "redirect" element, contains child "name"
-                    and "value" elements that must be included in the
-                    redirect url when the redirect is performed.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="name"
-                         type="javaee:string"
-                         minOccurs="1" maxOccurs="1"/>
-            <xsd:element name="value"
-                         type="javaee:string"
-                         minOccurs="1" maxOccurs="1"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-referenced-beanType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "referenced-bean" element represents at design time the
-                promise that a Java object of the specified type will exist at
-                runtime in some scope, under the specified key.  This can be
-                used by design time tools to construct user interface dialogs
-                based on the properties of the specified class.  The presence
-                or absence of a referenced bean element has no impact on the
-                JavaServer Faces runtime environment inside a web application.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="referenced-bean-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "referenced-bean-name" element represents the
-                        attribute name under which the corresponding
-                        referenced bean may be assumed to be stored, in one
-                        of 'request', 'session', 'view', 'application'
-                        or a custom scope.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="referenced-bean-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "referenced-bean-class" element represents the
-                        fully qualified class name of the Java class
-                        (either abstract or concrete) or Java interface
-                        implemented by the corresponding referenced bean.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-render-kitType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "render-kit" element represents a concrete RenderKit
-                implementation that should be registered under the specified
-                render-kit-id.  If no render-kit-id is specified, the
-                identifier of the default RenderKit
-                (RenderKitFactory.DEFAULT_RENDER_KIT) is assumed.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="render-kit-id"
-                         type="javaee:string"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "render-kit-id" element represents an identifier
-                        for the RenderKit represented by the parent
-                        "render-kit" element.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="render-kit-class"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "render-kit-class" element represents the fully
-                        qualified class name of a concrete RenderKit
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="renderer"
-                         type="javaee:faces-config-rendererType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="client-behavior-renderer"
-                         type="javaee:faces-config-client-behavior-rendererType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="render-kit-extension"
-                         type="javaee:faces-config-render-kit-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-client-behavior-rendererType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "client-behavior-renderer" element represents a concrete
-                ClientBehaviorRenderer implementation class that should be
-                registered under the specified behavior renderer type identifier,
-                in the RenderKit associated with the parent "render-kit"
-                element.  Client Behavior renderer type must be unique within the RenderKit
-                associated with the parent "render-kit" element.
-
-                Nested "attribute" elements identify generic component
-                attributes that are recognized by this renderer.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="client-behavior-renderer-type"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "client-behavior-renderer-type" element represents a renderer type
-                        identifier for the Client Behavior Renderer represented by the parent
-                        "client-behavior-renderer" element.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="client-behavior-renderer-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "client-behavior-renderer-class" element represents the fully
-                        qualified class name of a concrete Client Behavior Renderer
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="faces-config-rendererType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "renderer" element represents a concrete Renderer
-                implementation class that should be registered under the
-                specified component family and renderer type identifiers,
-                in the RenderKit associated with the parent "render-kit"
-                element.  Combinations of component family and
-                renderer type must be unique within the RenderKit
-                associated with the parent "render-kit" element.
-
-                Nested "attribute" elements identify generic component
-                attributes that are recognized by this renderer.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="component-family"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "component-family" element represents the
-                        component family for which the Renderer represented
-                        by the parent "renderer" element will be used.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="renderer-type"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "renderer-type" element represents a renderer type
-                        identifier for the Renderer represented by the parent
-                        "renderer" element.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="renderer-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "renderer-class" element represents the fully
-                        qualified class name of a concrete Renderer
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet"
-                         type="javaee:faces-config-facetType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="renderer-extension"
-                         type="javaee:faces-config-renderer-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-renderer-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for renderer.  It may contain implementation
-                specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-render-kit-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for render-kit.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-suggested-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "suggested-value" contains the value for the property or
-                attribute in which this element resides.  This value is
-                advisory only and is intended for tools to use when
-                populating pallettes.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-supported-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "supported-locale" element allows authors to declare
-                which locales are supported in this application instance.
-
-                It must be specified as :language:[_:country:[_:variant:]]
-                without the colons, for example "ja_JP_SJIS".  The
-                separators between the segments may be '-' or '_'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-localeType">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-behaviorType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "behavior" element represents a concrete Behavior
-                implementation class that should be registered under the
-                specified behavior identifier.  Behavior identifiers must
-                be unique within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that
-                may be configured on the corresponding UIComponent in order
-                to affect the operation of the Behavior.  Nested "property"
-                elements identify JavaBeans properties of the Behavior
-                implementation class that may be configured to affect the
-                operation of the Behavior.  "attribute" and "property"
-                elements are intended to allow component developers to
-                more completely describe their components to tools and users.
-                These elements have no required runtime semantics.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="behavior-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "behavior-id" element represents the identifier
-                        under which the corresponding Behavior class should
-                        be registered.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="behavior-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "behavior-class" element represents the fully
-                        qualified class name of a concrete Behavior
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "attribute" elements identify generic
-                       attributes that may be configured on the
-                       corresponding UIComponent in order to affect the
-                       operation of the Behavior.  This attribute is
-                       primarily for design-time tools and is not
-                       specified to have any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-
-            </xsd:element>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "property" elements identify JavaBeans
-                       properties of the Behavior implementation class
-                       that may be configured to affect the operation of
-                       the Behavior.  This attribute is primarily for
-                       design-time tools and is not specified to have
-                       any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="behavior-extension"
-                         type="javaee:faces-config-behavior-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-behavior-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for behavior.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-validatorType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "validator" element represents a concrete Validator
-                implementation class that should be registered under the
-                specified validator identifier.  Validator identifiers must
-                be unique within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that
-                may be configured on the corresponding UIComponent in order
-                to affect the operation of the Validator.  Nested "property"
-                elements identify JavaBeans properties of the Validator
-                implementation class that may be configured to affect the
-                operation of the Validator.  "attribute" and "property"
-                elements are intended to allow component developers to
-                more completely describe their components to tools and users.
-                These elements have no required runtime semantics.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="validator-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "validator-id" element represents the identifier
-                        under which the corresponding Validator class should
-                        be registered.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="validator-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "validator-class" element represents the fully
-                        qualified class name of a concrete Validator
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "attribute" elements identify generic
-                       attributes that may be configured on the
-                       corresponding UIComponent in order to affect the
-                       operation of the Validator.  This attribute is
-                       primarily for design-time tools and is not
-                       specified to have any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-
-            </xsd:element>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "property" elements identify JavaBeans
-                       properties of the Validator implementation class
-                       that may be configured to affect the operation of
-                       the Validator.  This attribute is primarily for
-                       design-time tools and is not specified to have
-                       any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="validator-extension"
-                         type="javaee:faces-config-validator-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-validator-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for validator.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "value" element is the String representation of
-                a literal value to which a scalar managed property
-                will be set, or a value binding expression ("#{...}")
-                that will be used to calculate the required value.
-                It will be converted as specified for the actual
-                property type.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:union
-            memberTypes="javaee:faces-config-el-expressionType xsd:string"/>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-value-classType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "value-class" element defines the Java type to which each
-                "value" element's value will be converted to, prior to adding
-                it to the "list-entries" list for a managed property that is
-                a java.util.List, or a "map-entries" map for a managed
-                property that is a java.util.Map.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:fully-qualified-classType">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:restriction>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-list-entriesType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "list-entries" element represents a set of initialization
-                elements for a managed property that is a java.util.List or an
-                array.  In the former case, the "value-class" element can
-                optionally be used to declare the Java type to which each
-                value should be converted before adding it to the Collection.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="value-class"
-                         type="javaee:faces-config-value-classType"
-                         minOccurs="0"/>
-            <xsd:choice minOccurs="0" maxOccurs="unbounded">
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType"/>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-system-event-listenerType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The presence of this element within the "application" element in
-                an application configuration resource file indicates the
-                developer wants to add an SystemEventListener to this
-                application instance.  Elements nested within this element allow
-                selecting the kinds of events that will be delivered to the
-                listener instance, and allow selecting the kinds of classes that
-                can be the source of events that are delivered to the listener
-                instance.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="system-event-listener-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "system-event-listener-class" element contains
-                        the fully qualified class name of the concrete
-                        SystemEventListener implementation class that will be
-                        called when events of the type specified by the
-                        "system-event-class" are sent by the runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="system-event-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "system-event-class" element contains the fully
-                        qualified class name of the SystemEvent subclass for
-                        which events will be delivered to the class whose fully
-                        qualified class name is given by the
-                        "system-event-listener-class" element.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="source-class" minOccurs="0"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "source-class" element, if present, contains the
-                        fully qualified class name of the class that will be the
-                        source for the event to be delivered to the class whose
-                        fully qualified class name is given by the
-                        "system-event-listener-class" element.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-versionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                This type contains the recognized versions of
-                faces-config supported.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="2.0"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-</xsd:schema>
diff --git a/jsf-api/doc/web-facesuicomponent_2_0.xsd b/jsf-api/doc/web-facesuicomponent_2_0.xsd
deleted file mode 100644
index e7bd7c6..0000000
--- a/jsf-api/doc/web-facesuicomponent_2_0.xsd
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-
-
-<xsd:schema
-     targetNamespace="http://java.sun.com/xml/ns/javaee"
-     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-     xmlns:xml="http://www.w3.org/XML/1998/namespace"
-     elementFormDefault="qualified"
-     attributeFormDefault="unqualified"
-     version="2.0">
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-
-    <xsd:annotation>
-        <xsd:documentation>
-
-            <![CDATA[
-
-            The XML Schema for a JavaServer Faces UIComponent (Version 2.0).
-
-            The elements in this schema may be used in an XHTML page for
-            a composite component, by pulling in the composite namespace:
-            
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-      
-      <composite:interface>
-         <composite:attribute name="foo" default="bar" />
-      </composite:/interface>
-      <!-- the rest omitted -->
-</html>
-
-            The elements in this schema may also be used in a facelet taglibrary
-            file in the same manner:
-            
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xmlns:composite="http://java.sun.com/jsf/composite"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibary_2_0.xsd"
-              version="2.0">
-  <namespace>http://domain.com/test_schema</namespace>
-  <tag>
-    <tag-name>testSchema</tag-name>
-    <component>
-      <component-type>javax.faces.Input</component-type>
-      <renderer-type>javax.faces.Text</renderer-type>
-      <handler-class>com.sun.faces.facelets.tag.jsf.ComponentHandler</handler-class>
-      <component-extension>
-
-        <composite:attribute name="foo" default="bar" />
-
-      </component-extension>
-    </component>
-  </tag>
-</facelet-taglib>
-            
-            The instance documents may indicate the published
-            version of the schema using xsi:schemaLocation attribute
-            for javaee namespace with the following location:
-
-            http://java.sun.com/xml/ns/javaee/web-facesuicomponent_2_0.xsd
-
-            ]]>
-
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:include schemaLocation="javaee_5.xsd"/>
-
-    <!-- **************************************************** -->
-
-    <xsd:element name = "attribute" type="javaee:uicomponent-attributeType">
-    </xsd:element>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="uicomponent-attributeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "attribute" element declares an attribute of this 
-                ui component.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="attribute"
-                         type="javaee:uicomponent-attributeType"/>
-        </xsd:choice>
-
-        <xsd:attribute name="name"
-                       type="xsd:string"
-                       use="required"/>
-
-        <xsd:attribute name="displayName"
-                       type="xsd:string"
-                       use="optional"/>
-
-        <xsd:attribute name="shortDescription"
-                       type="xsd:string"
-                       use="optional"/>
-
-        <xsd:attribute name="default"
-                       type="xsd:string"
-                       use="optional"/>
-
-        <xsd:attribute name="method-signature"
-                       type="xsd:string"
-                       use="optional">
-
-	  <xsd:annotation>
-	      <xsd:documentation>
-                <![CDATA[
-
-	    Provides the signature of the Java method.  The syntax of
-	    the method-signature element is as follows (taken from
-	    function-signature in web-jsptaglibrary_2_1.xsd):
-
-		MethodSignature ::= ReturnType S MethodName S?
-				      '(' S? Parameters? S? ')'
-
-                ReturnType        ::= Type
-
-		MethodName        ::= Identifier
-
-		Parameters        ::=   Parameter
-				      | ( Parameter S? ',' S? Parameters )
-
-                Parameter         ::= Type
-
-		Where:
-
- 		    * Type is a basic type or a fully qualified
-		      Java class name (including package name),
-		      as per the 'Type' production in the Java
-		      Language Specification, Second Edition,
-		      Chapter 18.
-
-                    * Identifier is a Java identifier, as per
-		      the 'Identifier' production in the Java
-		      Language Specification, Second
-		      Edition, Chapter 18.
-
-	    Example:
-
-	    java.lang.String nickName( java.lang.String, int )
-
-                ]]>
-	      </xsd:documentation>
-	  </xsd:annotation>
-
-        </xsd:attribute>
-
-        <xsd:attribute name="applyTo"
-                       type="xsd:string"
-                       use="optional"/>
-
-        <xsd:attribute name="required"
-                       type="xsd:boolean"
-                       use="optional"/>
-
-        <xsd:attribute name="preferred"
-                       type="xsd:boolean"
-                       use="optional"/>
-
-        <xsd:attribute name="expert"
-                       type="xsd:boolean"
-                       use="optional"/>
-
-        
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-</xsd:schema>
diff --git a/jsf-api/doc/web-partialresponse_2_0.xsd b/jsf-api/doc/web-partialresponse_2_0.xsd
deleted file mode 100644
index 3b1b3bc..0000000
--- a/jsf-api/doc/web-partialresponse_2_0.xsd
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-
-<xsd:schema
-     targetNamespace="http://java.sun.com/xml/ns/javaee"
-     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-     xmlns:xml="http://www.w3.org/XML/1998/namespace"
-     elementFormDefault="qualified"
-     attributeFormDefault="unqualified"
-     version="2.0">
-
-  <xsd:annotation>
-    <xsd:documentation>
-
-      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-      
-      Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-      
-      The contents of this file are subject to the terms of either the
-      GNU General Public License Version 2 only ("GPL") or the Common
-      Development and Distribution License("CDDL") (collectively, the
-      "License").  You may not use this file except in compliance with
-      the License. You can obtain a copy of the License at
-      https://glassfish.dev.java.net/public/CDDL+GPL.html or
-      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
-      specific language governing permissions and limitations under the
-      License.
-      
-      When distributing the software, include this License Header
-      Notice in each file and include the License file at
-      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
-      particular file as subject to the "Classpath" exception as
-      provided by Sun in the GPL Version 2 section of the License file
-      that accompanied this code.  If applicable, add the following
-      below the License Header, with the fields enclosed by brackets []
-      replaced by your own identifying information:
-      "Portions Copyrighted [year] [name of copyright owner]"
-      
-      Contributor(s):
-      
-      If you wish your version of this file to be governed by only the
-      CDDL or only the GPL Version 2, indicate your decision by adding
-      "[Contributor] elects to include this software in this
-      distribution under the [CDDL or GPL Version 2] license."  If you
-      don't indicate a single choice of license, a recipient has the
-      option to distribute your version of this file under either the
-      CDDL, the GPL Version 2 or to extend the choice of license to its
-      licensees as provided above.  However, if you add GPL Version 2
-      code and therefore, elected the GPL Version 2 license, then the
-      option applies only if the new code is made subject to such
-      option by the copyright holder.
-      
-    </xsd:documentation>
-  </xsd:annotation>
-
-    <xsd:annotation>
-        <xsd:documentation>
-
-            <![CDATA[
-
-            The XML Schema for the JavaServer Faces (Version 2.0)  
-            Partial Response used in JSF Ajax frameworks.
-
-            ]]>
-
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:include schemaLocation="javaee_5.xsd"/>
-
-    <!-- **************************************************** -->
-
-    <xsd:element name = "partial-response" type="javaee:partial-responseType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "partial-response" element is the root of the partial 
-                response information hierarchy, and contains nested elements for all
-                possible elements that can exist in the response. 
-
-            </xsd:documentation>
-        </xsd:annotation>
-    </xsd:element>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="partial-responseType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "partial-response" element is the root of thei partial 
-                response information hierarchy, and contains nested elements for all
-                possible elements that can exist in the response. 
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:choice>
-            <xsd:element name="changes" 
-                         type="javaee:partial-response-changesType" 
-                         minOccurs="0" 
-                         maxOccurs="1"/>
-            <xsd:element name="redirect" 
-                         type="javaee:partial-response-redirectType"
-                         minOccurs="0" 
-                         maxOccurs="1"/>
-            <xsd:element name="error" 
-                         type="javaee:partial-response-errorType"
-                         minOccurs="0" 
-                         maxOccurs="1"/>
-        </xsd:choice>
-    </xsd:complexType>
-
-    <xsd:complexType name="partial-response-changesType">
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="update"
-                         type="javaee:partial-response-updateType"/>
-            <xsd:element name="insert"
-                         type="javaee:partial-response-insertType"/>
-            <xsd:element name="delete"
-                         type="javaee:partial-response-deleteType"/>
-            <xsd:element name="attributes"
-                         type="javaee:partial-response-attributesType"/>
-            <xsd:element name="eval" type="xsd:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "eval" element enables this element's contents to be executed as JavaScript.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="extension"
-                         type="javaee:partial-response-extensionType"/>
-        </xsd:choice>
-    </xsd:complexType>
-
-
-    <xsd:complexType name="partial-response-updateType">
-        <xsd:annotation> 
-            <xsd:documentation>
-               
-                The "update" element enables DOM elements matching the "id"
-                attribute to be updated with the contents of this element. 
-                    
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="xsd:string">
-                <xsd:attribute name="id" type="xsd:string" use="required"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <xsd:complexType name="partial-response-insertType">
-        <xsd:annotation> 
-            <xsd:documentation>
-                    
-                The "insert" element enables content to be inserted into the DOM
-                before or after an existing DOM element as specified by the
-                nested "before" or "after" elements.  The elements "before" and
-                "after" are mutually exclusive - one of them must be specified. 
-                    
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:choice minOccurs="1" maxOccurs="1">
-            <xsd:element name="before">
-                <xsd:complexType>
-                    <xsd:attribute name="id" type="xsd:string" use="required"/>
-                </xsd:complexType>
-            </xsd:element>
-            <xsd:element name="after">
-                <xsd:complexType>
-                    <xsd:attribute name="id" type="xsd:string" use="required"/>
-                </xsd:complexType>
-            </xsd:element>
-        </xsd:choice>
-    </xsd:complexType>
-
-    <xsd:complexType name="partial-response-deleteType">
-        <xsd:annotation> 
-            <xsd:documentation>
-                    
-                The "delete" element enables DOM elements matching the "id"
-                attribute to be removed. 
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="id" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="partial-response-attributesType">
-        <xsd:annotation> 
-            <xsd:documentation>
-                    
-                The "attributes" element enables attributes of DOM elements matching the "id"
-                attribute to be updated.  If this element is used, then it must contain at
-                least one "attribute" element. 
-                    
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="attribute" minOccurs="1" maxOccurs="unbounded">
-                <xsd:complexType>
-                    <xsd:attribute name="name" type="xsd:string" use="required"/>
-                    <xsd:attribute name="value" type="xsd:string" use="required"/>
-                </xsd:complexType>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="partial-response-redirectType">
-        <xsd:annotation> 
-            <xsd:documentation>
-                    
-                The "redirect" element enables a redirect to the location as specified by the
-                "url" attribute. 
-                    
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="url" type="xsd:anyURI" use="required"/>
-    </xsd:complexType>
-
-    <xsd:complexType name="partial-response-errorType">
-        <xsd:annotation> 
-            <xsd:documentation>
-                    
-                The "error" element contains error information from the server. 
-                    
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="error-name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-            <xsd:element name="error-message" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <xsd:complexType name="partial-response-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for partial response.  It may contain
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-</xsd:schema>
-
-
-
-
diff --git a/jsf-api/doc/xml.xsd b/jsf-api/doc/xml.xsd
deleted file mode 100644
index 72e0a32..0000000
--- a/jsf-api/doc/xml.xsd
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version='1.0'?>
-
-<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >
-<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
-
- <xs:annotation>
-  <xs:documentation>
-   See http://www.w3.org/XML/1998/namespace.html and
-   http://www.w3.org/TR/REC-xml for information about this namespace.
-  </xs:documentation>
- </xs:annotation>
-
- <xs:annotation>
-  <xs:documentation>This schema defines attributes and an attribute group
-        suitable for use by
-        schemas wishing to allow xml:base, xml:lang or xml:space attributes
-        on elements they define.
-
-        To enable this, such a schema must import this schema
-        for the XML namespace, e.g. as follows:
-        <schema . . .>
-         . . .
-         <import namespace="http://www.w3.org/XML/1998/namespace"
-                    schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
-
-        Subsequently, qualified reference to any of the attributes
-        or the group defined below will have the desired effect, e.g.
-
-        <type . . .>
-         . . .
-         <attributeGroup ref="xml:specialAttrs"/>
- 
-         will define a type which will schema-validate an instance
-         element with any of those attributes</xs:documentation>
- </xs:annotation>
-
- <xs:annotation>
-  <xs:documentation>In keeping with the XML Schema WG's standard versioning
-   policy, this schema document will persist at
-   http://www.w3.org/2001/03/xml.xsd.
-   At the date of issue it can also be found at
-   http://www.w3.org/2001/xml.xsd.
-   The schema document at that URI may however change in the future,
-   in order to remain compatible with the latest version of XML Schema
-   itself.  In other words, if the XML Schema namespace changes, the version
-   of this document at
-   http://www.w3.org/2001/xml.xsd will change
-   accordingly; the version at
-   http://www.w3.org/2001/03/xml.xsd will not change.
-  </xs:documentation>
- </xs:annotation>
-
- <xs:attribute name="lang" type="xs:language">
-  <xs:annotation>
-   <xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
-         codes as the enumerated possible values . . .</xs:documentation>
-  </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="space" default="preserve">
-  <xs:simpleType>
-   <xs:restriction base="xs:NCName">
-    <xs:enumeration value="default"/>
-    <xs:enumeration value="preserve"/>
-   </xs:restriction>
-  </xs:simpleType>
- </xs:attribute>
-
- <xs:attribute name="base" type="xs:anyURI">
-  <xs:annotation>
-   <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
-                     information about this attribute.</xs:documentation>
-  </xs:annotation>
- </xs:attribute>
-
- <xs:attributeGroup name="specialAttrs">
-  <xs:attribute ref="xml:base"/>
-  <xs:attribute ref="xml:lang"/>
-  <xs:attribute ref="xml:space"/>
- </xs:attributeGroup>
-
-</xs:schema>
diff --git a/jsf-api/interim-pom.xml b/jsf-api/interim-pom.xml
deleted file mode 100644
index 44fa154..0000000
--- a/jsf-api/interim-pom.xml
+++ /dev/null
@@ -1,329 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<project>
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>com.sun.faces</groupId>
-    <artifactId>jsf-api</artifactId>
-    <version>2.0.3-SNAPSHOT</version>
-    <packaging>jar</packaging>
-
-    <name>Sun's implementation of the JSF 2.0 specification API.</name>
-    <description>This is the master POM file for Sun's Implementation of the JSF 2.0 Specification.</description>
-    <url>http://java.sun.com/javaee/javaserverfaces/</url>
-
-    <licenses>
-        <license>
-            <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) plus GPL</name>
-            <url>https://glassfish.dev.java.net/public/CDDL+GPL.html</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-    <scm>
-        <url>https://mojarra.dev.java.net/svn/mojarra</url>
-        <connection>scm:svn:https://mojarra.dev.java.net/svn/mojarra</connection>
-    </scm>
-
-    <developers>
-        <developer>
-            <id>edburns</id>
-            <name>Ed Burns</name>
-            <email>ed.burns at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-6</timezone>
-        </developer>
-        <developer>
-            <id>rlubke</id>
-            <name>Ryan Lubke</name>
-            <email>Ryan.Lubke at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-9</timezone>
-        </developer>
-        <developer>
-            <id>rogerk</id>
-            <name>Roger Kitain</name>
-            <email>Roger.Kitain at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-6</timezone>
-        </developer>
-        <developer>
-            <id>driscoll</id>
-            <name>Jim Driscoll</name>
-            <email>jim.dirscoll at sun.com</email>
-            <organization>Sun Microsystems, Inc.</organization>
-            <roles>
-                <role>project-owner</role>
-            </roles>
-            <timezone>-9</timezone>
-        </developer>
-    </developers>
-
-    <!--
-    <repositories>
-        <repository>
-            <snapshots/>
-            <id>ibiblio</id>
-            <url>http://www.ibiblio.org/maven2/</url>
-        </repository>
-        <repository>
-            <id>maven2-repository.dev.java.net</id>
-            <name>Java.net Repository for Maven</name>
-            <url>http://download.java.net/maven/2/</url>
-            <layout>default</layout>
-        </repository>
-        <repository>
-            <snapshots/>
-            <id>codehaus</id>
-            <name>codehaus</name>
-            <url>http://repository.codehaus.org</url>
-        </repository>
-        <repository>
-            <snapshots/>
-            <id>java.net</id>
-            <name>Java.net Maven 1.x Repository for external projects</name>
-            <url>http://download.java.net/maven/1/</url>
-            <layout>legacy</layout>
-        </repository>
-        <repository>
-            <snapshots/>
-            <id>java.net.shared</id>
-            <name>Java.net Maven 1.x Repository for glassfish dependencies
-            </name>
-            <url>http://download.java.net/javaee5/external/shared</url>
-            <layout>legacy</layout>
-        </repository>
-    </repositories>
-    -->
-
-    <distributionManagement>
-        <repository>
-            <uniqueVersion>false</uniqueVersion>
-            <id>java.net-mavent2-repository</id>
-            <url>java-net:/maven2-repository/trunk/repository/</url>
-        </repository>
-    </distributionManagement>
-
-    <build>
-        <defaultGoal>compile</defaultGoal>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>get_build_date</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <tasks>
-                                <taskdef name="generateComponents" classname="com.sun.faces.ant.ComponentGenTask">
-                                    <classpath>
-                                        <path refid="apache.commons.classpath"/>
-                                        <pathelement location="${tools.dir}/build/classes"/>
-                                    </classpath>
-                                </taskdef>
-                                <generateComponents
-                                      generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-                                      facesConfig="${standard.renderkit.xml}"
-                                      fork="true">
-                                    <classpath>
-                                        <path refid="apache.commons.classpath"/>
-                                        <path refid="compile.classpath"/>
-                                        <pathelement location="${commons-beanutils.jar}" />
-                                        <pathelement location="${commons-digester.jar}" />
-                                        <pathelement location="${commons-collections.jar}" />
-                                        <pathelement location="${commons-logging.jar}" />
-                                        <pathelement location="${jsf-api.jar}"/>
-                                        <pathelement location="${tools.dir}/build/classes"/>
-                                    </classpath>
-                                    <assertions>
-                                        <enable/>
-                                    </assertions>
-                                    <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-                                </generateComponents>
-                            </tasks>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <version>2.1</version>
-                <executions>
-                    <execution>
-                        <id>attach-sources</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>jar-no-fork</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-
-        <extensions>
-            <extension>
-                <groupId>org.jvnet.wagon-svn</groupId>
-                <artifactId>wagon-svn</artifactId>
-                <version>1.8</version>
-            </extension>
-        </extensions>
-
-    </build>
-
-    <issueManagement>
-        <system>issueZilla</system>
-        <url>https://javaserverfaces.dev.java.net/servlets/ProjectIssues</url>
-    </issueManagement>
-
-    <mailingLists>
-        <mailingList>
-            <name>JSF 2.0 Specification Comments</name>
-            <post>jsr-314-comments at jcp.org</post>
-        </mailingList>
-        <mailingList>
-            <name>Mojarra Implementation Dev List</name>
-            <post>dev at javaserverfaces.dev.java.net</post>
-            <archive>https://javaserverfaces.dev.java.net/servlets/SummarizeList?listName=dev</archive>
-        </mailingList>
-    </mailingLists>
-
-    <contributors>
-        <contributor>
-            <name>Craig McClanahan</name>
-        </contributor>
-        <contributor>
-            <name>Deepak Gothe</name>
-        </contributor>
-        <contributor>
-            <name>Gregory Murray</name>
-        </contributor>
-        <contributor>
-            <name>Justyna Horwat</name>
-        </contributor>
-        <contributor>
-            <name>Jayashri Visvanathan</name>
-        </contributor>
-        <contributor>
-            <name>Jennifer Ball</name>
-        </contributor>
-        <contributor>
-            <name>Jacob Hookom</name>
-        </contributor>
-        <contributor>
-            <name>Raj Premkumar</name>
-        </contributor>
-        <contributor>
-            <name>Stan Silvert</name>
-        </contributor>
-        <contributor>
-            <name>Mike Youngstrom</name>
-        </contributor>
-        <contributor>
-            <name>Jason Lee</name>
-        </contributor>
-    </contributors>
-
-    <organization>
-        <name>Sun Microsystems, Inc</name>
-        <url>http://www.sun.com/</url>
-    </organization>
-
-    <dependencies>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet.jsp</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.el</groupId>
-            <artifactId>el-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>jstl</groupId>
-            <artifactId>jstl</artifactId>
-            <version>1.2</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>1.0.0.GA</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/jsf-api/mojarra-jsf-api.bnd b/jsf-api/mojarra-jsf-api.bnd
deleted file mode 100644
index 1be3c2f..0000000
--- a/jsf-api/mojarra-jsf-api.bnd
+++ /dev/null
@@ -1,58 +0,0 @@
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# Items to merge into the generated manifest
-Specification-Title: JavaServer Faces
-Specification-Version: @spec.version@
-Implementation-Title: @impl.name@
-Implementation-Version: @impl.version@
-Implementation-Vendor: Sun Microsystems, Inc.
-Implementation-Vendor-Id: com.sun
-Extension-Name: @extension.name@
-Probe-Provider-Xml-File-Names: META-INF/mojarra-jsf-api-probe-provider.xml
-
-# BND/OSGI Properties
-Export-Package: javax.faces.*;version=2.0
-Import-Package: javax.servlet.jsp.jstl.*;version=1.2,\
-  javax.validation.*;resolution:=optional, \
-  javax.servlet.jsp.*;version=2.1,\
-  javax.servlet.*;version=2.4,\
-  javax.el.*;version=2.1
-DynamicImport-Package: org.glassfish.flashlight.provider
-Include-Resource: META-INF=build/classes/META-INF,build/classes
-Bundle-Version: @osgi.version@
-Bundle-Name: Mojarra JSF API Implementation @impl.version@
-Bundle-Description: Mojarra JSF API (javax.faces/@spec.version@) @impl.version@
-Bundle-SymbolicName: javax.faces/com.sun.faces.mojarra-jsf-api
diff --git a/jsf-api/src/main/java/javax/faces/FacesException.java b/jsf-api/src/main/java/javax/faces/FacesException.java
deleted file mode 100644
index e8e30d8..0000000
--- a/jsf-api/src/main/java/javax/faces/FacesException.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces;
-
-
-/**
- * <p>This class encapsulates general JavaServer Faces exceptions.</p>
- */
-
-public class FacesException extends RuntimeException {
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public FacesException() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public FacesException(String message) {
-
-        super(message);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.  The detail
-     * message will be set to <code>(cause == null ? null :
-     * cause.toString()</code>
-     *
-     * @param cause The root cause for this exception
-     */
-    public FacesException(Throwable cause) {
-
-        super(cause == null ? null : cause.toString());
-        this.cause = cause;
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause The root cause for this exception
-     */
-    public FacesException(String message, Throwable cause) {
-
-        super(message);
-        this.cause = cause;
-
-    }
-
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    /**
-     * <p>The underlying exception that caused this exception.</p>
-     */
-    private Throwable cause = null;
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Return the cause of this exception, or <code>null</code> if the
-     * cause is nonexistent or unknown.</p>
-     */
-    public Throwable getCause() {
-
-        return (this.cause);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/FacesWrapper.java b/jsf-api/src/main/java/javax/faces/FacesWrapper.java
deleted file mode 100644
index d67f42d..0000000
--- a/jsf-api/src/main/java/javax/faces/FacesWrapper.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces;
-
-/**
- * <p class="changed_added_2_0">Any wrapper class in JSF that must provide
- * access to the object it wraps must implement this interface.</p>
- * 
- * @since 2.0
- */
-public interface FacesWrapper<T> {
-    
-    /**
-     * <p class="changed_added_2_0">A class that implements this
-     * interface uses this method to return an instance of the class
-     * being wrapped.</p>
-     * 
-     * @since 2.0
-     */
-    public T getWrapped();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/FactoryFinder.java b/jsf-api/src/main/java/javax/faces/FactoryFinder.java
deleted file mode 100644
index 335f35e..0000000
--- a/jsf-api/src/main/java/javax/faces/FactoryFinder.java
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces;
-
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Callable;
-import java.util.concurrent.FutureTask;
-import java.util.concurrent.Future;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.lang.reflect.Constructor;
-import java.net.URL;
-import java.net.URLConnection;
-
-
-/**
- * <p><strong class="changed_modified_2_0">FactoryFinder</strong>
- * implements the standard discovery algorithm for all factory objects
- * specified in the JavaServer Faces APIs.  For a given factory class
- * name, a corresponding implementation class is searched for based on
- * the following algorithm.  Items are listed in order of decreasing
- * search precedence:</p> 
-
- * <ul> 
-
- * <li><p>If the JavaServer Faces configuration file bundled into the
- * <code>WEB-INF</code> directory of the webapp contains a
- * <code>factory</code> entry of the given factory class name, that
- * factory is used.<p></li>
-
- * <li><p>If the JavaServer Faces configuration files named by the
- * <code>javax.faces.CONFIG_FILES</code> <code>ServletContext</code> init
- * parameter contain any <code>factory</code> entries of the given
- * factory class name, those factories are used, with the last one taking
- * precedence.</p></li> 
-
- * <li><p>If there are any JavaServer Faces configuration files bundled
- * into the <code>META-INF</code> directory of any jars on the
- * <code>ServletContext</code>'s resource paths, the
- * <code>factory</code> entries of the given factory class name in those
- * files are used, with the last one taking precedence.</p></li>
-
- * <li><p>If a <code>META-INF/services/{factory-class-name}</code>
- * resource is visible to the web application class loader for the
- * calling application (typically as a result of being present in the
- * manifest of a JAR file), its first line is read and assumed to be the
- * name of the factory implementation class to use.</p></li>
-
- * <li><p>If none of the above steps yield a match, the JavaServer Faces
- * implementation specific class is used.</p></li>
-
- * </ul>
-
- * <p>If any of the factories found on any of the steps above happen to
- * have a one-argument constructor, with argument the type being the
- * abstract factory class, that constructor is invoked, and the previous
- * match is passed to the constructor.  For example, say the container
- * vendor provided an implementation of {@link
- * javax.faces.context.FacesContextFactory}, and identified it in
- * <code>META-INF/services/javax.faces.context.FacesContextFactory</code>
- * in a jar on the webapp ClassLoader.  Also say this implementation
- * provided by the container vendor had a one argument constructor that
- * took a <code>FacesContextFactory</code> instance.  The
- * <code>FactoryFinder</code> system would call that one-argument
- * constructor, passing the implementation of
- * <code>FacesContextFactory</code> provided by the JavaServer Faces
- * implementation.</p>
-
- * <p>If a Factory implementation does not provide a proper one-argument
- * constructor, it must provide a zero-arguments constructor in order to
- * be successfully instantiated.</p>
-
- * <p>Once the name of the factory implementation class is located, the
- * web application class loader for the calling application is requested
- * to load this class, and a corresponding instance of the class will be
- * created.  A side effect of this rule is that each web application
- * will receive its own instance of each factory class, whether the
- * JavaServer Faces implementation is included within the web
- * application or is made visible through the container's facilities for
- * shared libraries.</p>
- */
-
-public final class FactoryFinder {
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * Package-private constructor to disable instantiation of this class.
-     */
-    FactoryFinder() {
-    }
-
-    // ----------------------------------------------------- Manifest Constants
-
-
-    /**
-     * <p>The property name for the
-     * {@link javax.faces.application.ApplicationFactory} class name.</p>
-     */
-    public final static String APPLICATION_FACTORY =
-         "javax.faces.application.ApplicationFactory";
-
-    /**
-     * <p class="changed_added_2_0">The property name for the {@link
-     * javax.faces.context.ExceptionHandlerFactory} class name.</p>
-     */
-    public final static String EXCEPTION_HANDLER_FACTORY =
-         "javax.faces.context.ExceptionHandlerFactory";
-
-    /**
-     * <p class="changed_added_2_0">The property name for the {@link
-     * javax.faces.context.ExternalContextFactory} class name.</p>
-     */
-    public final static String EXTERNAL_CONTEXT_FACTORY =
-         "javax.faces.context.ExternalContextFactory";
-
-    /**
-     * <p>The property name for the
-     * {@link javax.faces.context.FacesContextFactory} class name.</p>
-     */
-    public final static String FACES_CONTEXT_FACTORY =
-         "javax.faces.context.FacesContextFactory";
-
-    /**
-     * <p class="changed_added_2_0">The property name for the {@link
-     * javax.faces.context.PartialViewContextFactory} class name.</p>
-     */
-    public final static String PARTIAL_VIEW_CONTEXT_FACTORY =
-          "javax.faces.context.PartialViewContextFactory";
-
-    /**
-     * <p class="changed_added_2_0">The property name for the {@link
-     * javax.faces.component.visit.VisitContextFactory} class name.</p>
-     */
-    public final static String VISIT_CONTEXT_FACTORY =
-         "javax.faces.component.visit.VisitContextFactory";
-
-    /**
-     * <p>The property name for the
-     * {@link javax.faces.lifecycle.LifecycleFactory} class name.</p>
-     */
-    public final static String LIFECYCLE_FACTORY =
-         "javax.faces.lifecycle.LifecycleFactory";
-
-    /**
-     * <p>The property name for the
-     * {@link javax.faces.render.RenderKitFactory} class name.</p>
-     */
-    public final static String RENDER_KIT_FACTORY =
-         "javax.faces.render.RenderKitFactory";
-
-    /**
-     * <p class="changed_added_2_0">The property name for the {@link
-     * javax.faces.view.ViewDeclarationLanguage} class name.</p>
-     */
-    public final static String VIEW_DECLARATION_LANGUAGE_FACTORY =
-         "javax.faces.view.ViewDeclarationLanguageFactory";
-
-    /**
-     * <p class="changed_added_2_0">The property name for the {@link
-     * javax.faces.view.facelets.TagHandlerDelegate} class name.</p>
-     */
-    public final static String TAG_HANDLER_DELEGATE_FACTORY =
-         "javax.faces.view.facelets.TagHandlerDelegateFactory";
-
-    // ------------------------------------------------------- Static Variables
-
-    private static final FactoryManagerCache FACTORIES_CACHE =
-          new FactoryManagerCache();
-
-
-    /**
-     * <p>The set of JavaServer Faces factory classes for which the factory
-     * discovery mechanism is supported.  The entries in this list must be 
-     * alphabetically ordered according to the entire string, not just
-     * the last part!</p>
-     */
-    private static final String[] FACTORY_NAMES = {
-         APPLICATION_FACTORY,
-         VISIT_CONTEXT_FACTORY,
-         EXCEPTION_HANDLER_FACTORY,
-         EXTERNAL_CONTEXT_FACTORY,
-         FACES_CONTEXT_FACTORY,
-         LIFECYCLE_FACTORY,
-         VIEW_DECLARATION_LANGUAGE_FACTORY,
-         PARTIAL_VIEW_CONTEXT_FACTORY,
-         RENDER_KIT_FACTORY,
-         TAG_HANDLER_DELEGATE_FACTORY
-    
-    };
-
-    /**
-     * <p>Map of Class instances for the our factory names.</p>
-     */
-    private static Map<String, Class> factoryClasses = null;
-
-    private static final Logger LOGGER =
-         Logger.getLogger("javax.faces", "javax.faces.LogStrings");
-
-    // Ensure the factory names are sorted.
-    //
-    static {
-        Arrays.sort(FACTORY_NAMES);
-    }
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Create</span> (if
-     * necessary) and return a per-web-application instance of the
-     * appropriate implementation class for the specified JavaServer
-     * Faces factory class, based on the discovery algorithm described
-     * in the class description.</p>
-     *
-     * <p class="changed_added_2_0">The standard factories and wrappers
-     * in JSF all implement the interface {@link FacesWrapper}.  If the
-     * returned <code>Object</code> is an implementation of one of the
-     * standard factories, it must be legal to cast it to an instance of
-     * <code>FacesWrapper</code> and call {@link
-     * FacesWrapper#getWrapped} on the instance.</p>
-     *
-     * @param factoryName Fully qualified name of the JavaServer Faces factory
-     *                    for which an implementation instance is requested
-     * @throws FacesException           if the web application class loader
-     *                                  cannot be identified
-     * @throws FacesException           if an instance of the configured factory
-     *                                  implementation class cannot be loaded
-     * @throws FacesException           if an instance of the configured factory
-     *                                  implementation class cannot be instantiated
-     * @throws IllegalArgumentException if <code>factoryName</code> does not
-     *                                  identify a standard JavaServer Faces factory name
-     * @throws IllegalStateException    if there is no configured factory
-     *                                  implementation class for the specified factory name
-     * @throws NullPointerException     if <code>factoryname</code>
-     *                                  is null
-     */
-    public static Object getFactory(String factoryName)
-         throws FacesException {
-
-        validateFactoryName(factoryName);
-
-        // Identify the web application class loader
-        ClassLoader classLoader = getClassLoader();
-
-        FactoryManager manager =
-              FACTORIES_CACHE.getApplicationFactoryManager(classLoader);
-        return manager.getFactory(classLoader, factoryName);
-
-    }
-
-    /**
-     * <p>This method will store the argument
-     * <code>factoryName/implName</code> mapping in such a way that
-     * {@link #getFactory} will find this mapping when searching for a
-     * match.</p>
-     * <p/>
-     * <p>This method has no effect if <code>getFactory()</code> has
-     * already been called looking for a factory for this
-     * <code>factoryName</code>.</p>
-     * <p/>
-     * <p>This method can be used by implementations to store a factory
-     * mapping while parsing the Faces configuration file</p>
-     *
-     * @throws IllegalArgumentException if <code>factoryName</code> does not
-     *                                  identify a standard JavaServer Faces factory name
-     * @throws NullPointerException     if <code>factoryname</code>
-     *                                  is null
-     */
-    public static void setFactory(String factoryName,
-                                  String implName) {
-
-        validateFactoryName(factoryName);
-
-        // Identify the web application class loader
-        ClassLoader classLoader = getClassLoader();
-
-        FactoryManager manager =
-              FACTORIES_CACHE.getApplicationFactoryManager(classLoader);
-        manager.addFactory(factoryName, implName);
-
-    }
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Release</span> any
-     * references to factory instances associated with the class loader
-     * for the calling web application.  <span
-     * class="changed_modified_2_0">This method must be called during of
-     * web application shutdown.</span></p>
-     *
-     * @throws FacesException if the web application class loader
-     *                        cannot be identified
-     */
-    public static void releaseFactories() throws FacesException {
-
-        // Identify the web application class loader
-        ClassLoader cl = getClassLoader();
-
-        FACTORIES_CACHE.removeApplicationFactoryManager(cl);
-
-    }
-
-
-    // -------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Identify and return the class loader that is associated with the
-     * calling web application.</p>
-     *
-     * @throws FacesException if the web application class loader
-     *                        cannot be identified
-     */
-    private static ClassLoader getClassLoader() throws FacesException {
-
-        // J2EE 1.3 (and later) containers are required to make the
-        // web application class loader visible through the context
-        // class loader of the current thread.
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        if (cl == null) {
-            throw new FacesException("getContextClassLoader");
-        }
-        return (cl);
-
-    }
-
-
-    /**
-     * <p>Load and return an instance of the specified implementation
-     * class using the following algorithm.</p>
-     * <p/>
-     * <ol>
-     * <p/>
-     * <li><p>If the argument <code>implementations</code> list has
-     * more than one element, or exactly one element, interpret the
-     * last element in the list to be the fully qualified class name of
-     * a class implementing <code>factoryName</code>.  Instantiate that
-     * class and save it for return.  If the
-     * <code>implementations</code> list has only one element, skip
-     * this step.</p></li>
-     * <p/>
-     * <li><p>Look for a resource called
-     * <code>/META-INF/services/<factoryName></code>.  If found,
-     * interpret it as a properties file, and read out the first entry.
-     * Interpret the first entry as a fully qualify class name of a
-     * class that implements <code>factoryName</code>.  If we have an
-     * instantiated factory from the previous step <em>and</em> the
-     * implementing class has a one arg constructor of the type for
-     * <code>factoryName</code>, instantiate it, passing the
-     * instantiated factory from the previous step.  If there is no one
-     * arg constructor, just instantiate the zero arg constructor.  Save
-     * the newly instantiated factory for return, replacing the
-     * instantiated factory from the previous step.</p></li>
-     * <p/>
-     * <li><p>Treat each remaining element in the
-     * <code>implementations</code> list as a fully qualified class name
-     * of a class implementing <code>factoryName</code>.  If the current
-     * element has a one arg constructor of the type for
-     * <code>factoryName</code>, instantiate it, passing the
-     * instantiated factory from the previous or step iteration.  If
-     * there is no one arg constructor, just instantiate the zero arg
-     * constructor, replacing the instantiated factory from the previous
-     * step or iteration.</p></li>
-     * <p/>
-     * <li><p>Return the saved factory</p></li>
-     * <p/>
-     * </ol>
-     *
-     * @param classLoader     Class loader for the web application that will
-     *                        be loading the implementation class
-     * @param implementations A List of implementations for a given
-     *                        factory class.
-     * @throws FacesException if the specified implementation class
-     *                        cannot be loaded
-     * @throws FacesException if an instance of the specified implementation
-     *                        class cannot be instantiated
-     */
-    private static Object getImplementationInstance(ClassLoader classLoader,
-                                                    String factoryName,
-                                                    List implementations)
-    throws FacesException {
-
-        Object result = null;
-        String curImplClass;
-        int len;
-
-        // step 1.
-        if (null != implementations &&
-             (1 < (len = implementations.size()) || 1 == len)) {
-            curImplClass = (String) implementations.remove(len - 1);
-            // since this is the hard coded implementation default,
-            // there is no preceding implementation, so don't bother
-            // with a non-zero-arg ctor.
-            result = getImplGivenPreviousImpl(classLoader, factoryName,
-                 curImplClass, null);
-        }
-
-        // step 2.
-        List<String> fromServices = getImplNameFromServices(classLoader, factoryName);
-        if (fromServices != null) {
-            for (String name : fromServices) {
-                result = getImplGivenPreviousImpl(classLoader,
-                                                  factoryName,
-                                                  name,
-                                                  result);
-            }
-        }        
-
-        // step 3.
-        if (null != implementations) {
-            for (len = (implementations.size() - 1); 0 <= len; len--) {
-                curImplClass = (String) implementations.remove(len);
-                result = getImplGivenPreviousImpl(classLoader, factoryName,
-                     curImplClass, result);
-            }
-        }
-
-        return result;
-
-    }
-
-
-    /**
-     * <p>Perform the logic to get the implementation class for the
-     * second step of {@link FactoryFinder#getImplementationInstance(ClassLoader, String, java.util.List)}.</p>
-     */
-    private static List<String> getImplNameFromServices(ClassLoader classLoader,
-                                                        String factoryName) {
-
-        // Check for a services definition
-        List<String> result = null;
-        String resourceName = "META-INF/services/" + factoryName;
-        InputStream stream;
-        BufferedReader reader = null;
-        try {
-            Enumeration<URL> e = classLoader.getResources(resourceName);
-            while (e.hasMoreElements()) {
-                URL url = e.nextElement();
-                URLConnection conn = url.openConnection();
-                conn.setUseCaches(false);
-                stream = conn.getInputStream();
-                if (stream != null) {
-                    // Deal with systems whose native encoding is possibly
-                    // different from the way that the services entry was created
-                    try {
-                        reader =
-                              new BufferedReader(new InputStreamReader(stream,
-                                                                       "UTF-8"));
-                        if (result == null) {
-                            result = new ArrayList<String>(3);
-                        }
-                        result.add(reader.readLine());
-                    } catch (UnsupportedEncodingException uee) {
-                        reader =
-                              new BufferedReader(new InputStreamReader(stream));
-                    } finally {
-                        if (reader != null) {
-                            reader.close();
-                            reader = null;
-                        }
-                        if (stream != null) {
-                            stream.close();
-                            //noinspection UnusedAssignment
-                            stream = null;
-                        }
-                    }
-
-                }
-            }
-        } catch (IOException e) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           e.toString(),
-                           e);
-            }
-        } catch (SecurityException e) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           e.toString(),
-                           e);
-            }
-        }
-        return result;
-
-    }
-
-
-    /**
-     * <p>Implement the decorator pattern for the factory
-     * implementation.</p>
-     * <p/>
-     * <p>If <code>previousImpl</code> is non-<code>null</code> and the
-     * class named by the argument <code>implName</code> has a one arg
-     * contstructor of type <code>factoryName</code>, instantiate it,
-     * passing previousImpl to the constructor.</p>
-     * <p/>
-     * <p>Otherwise, we just instantiate and return
-     * <code>implName</code>.</p>
-     *
-     * @param classLoader  the ClassLoader from which to load the class
-     * @param factoryName  the fully qualified class name of the factory.
-     * @param implName     the fully qualified class name of a class that
-     *                     implements the factory.
-     * @param previousImpl if non-<code>null</code>, the factory
-     *                     instance to be passed to the constructor of the new factory.
-     */
-    private static Object getImplGivenPreviousImpl(ClassLoader classLoader,
-                                                   String factoryName,
-                                                   String implName,
-                                                   Object previousImpl) {
-        Class clazz;
-        Class factoryClass = null;
-        Class[] getCtorArg;
-        Object[] newInstanceArgs = new Object[1];
-        Constructor ctor;
-        Object result = null;
-
-        // if we have a previousImpl and the appropriate one arg ctor.
-        if ((null != previousImpl) &&
-             (null != (factoryClass = getFactoryClass(factoryName)))) {
-            try {
-                clazz = Class.forName(implName, false, classLoader);
-                getCtorArg = new Class[1];
-                getCtorArg[0] = factoryClass;
-                ctor = clazz.getConstructor(getCtorArg);
-                newInstanceArgs[0] = previousImpl;
-                result = ctor.newInstance(newInstanceArgs);
-            }
-            catch (NoSuchMethodException nsme) {
-                // fall through to "zero-arg-ctor" case
-                factoryClass = null;
-            }
-            catch (Exception e) {
-                throw new FacesException(implName, e);
-            }
-        }
-        if (null == previousImpl || null == factoryClass) {
-            // we have either no previousImpl or no appropriate one arg
-            // ctor.
-            try {
-                clazz = Class.forName(implName, false, classLoader);
-                // since this is the hard coded implementation default,
-                // there is no preceding implementation, so don't bother
-                // with a non-zero-arg ctor.
-                result = clazz.newInstance();
-            } catch (Exception e) {
-                throw new FacesException(implName, e);
-            }
-        }
-        return result;
-
-    }
-
-
-    /**
-     * @return the <code>java.lang.Class</code> for the argument
-     *         factory.
-     */
-    private static Class getFactoryClass(String factoryClassName) {
-
-        if (null == factoryClasses) {
-            factoryClasses = new HashMap<String, Class>(FACTORY_NAMES.length);
-            factoryClasses.put(APPLICATION_FACTORY,
-                 javax.faces.application.ApplicationFactory.class);
-            factoryClasses.put(EXCEPTION_HANDLER_FACTORY,
-                 javax.faces.context.ExceptionHandlerFactory.class);
-            factoryClasses.put(EXTERNAL_CONTEXT_FACTORY,
-                 javax.faces.context.ExternalContextFactory.class);
-            factoryClasses.put(FACES_CONTEXT_FACTORY,
-                 javax.faces.context.FacesContextFactory.class);
-            factoryClasses.put(VISIT_CONTEXT_FACTORY,
-                 javax.faces.component.visit.VisitContextFactory.class);
-            factoryClasses.put(LIFECYCLE_FACTORY,
-                 javax.faces.lifecycle.LifecycleFactory.class);
-            factoryClasses.put(PARTIAL_VIEW_CONTEXT_FACTORY,
-                 javax.faces.context.PartialViewContextFactory.class);
-            factoryClasses.put(RENDER_KIT_FACTORY,
-                 javax.faces.render.RenderKitFactory.class);
-            factoryClasses.put(VIEW_DECLARATION_LANGUAGE_FACTORY,
-                 javax.faces.view.ViewDeclarationLanguageFactory.class);
-            factoryClasses.put(TAG_HANDLER_DELEGATE_FACTORY,
-                 javax.faces.view.facelets.TagHandlerDelegateFactory.class);
-        }
-        return factoryClasses.get(factoryClassName);
-
-    }
-
-
-    /**
-     * Ensure the provided factory name is valid.
-     */
-    private static void validateFactoryName(String factoryName) {
-
-        if (factoryName == null) {
-            throw new NullPointerException();
-        }
-        if (Arrays.binarySearch(FACTORY_NAMES, factoryName) < 0) {
-            throw new IllegalArgumentException(factoryName);
-        }
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * Managed the mappings between a web application and its configured
-     * factories.
-     */
-    private static final class FactoryManagerCache {
-
-        private ConcurrentMap<ClassLoader,Future<FactoryManager>> applicationMap =
-              new ConcurrentHashMap<ClassLoader, Future<FactoryManager>>();
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        private FactoryManager getApplicationFactoryManager(ClassLoader cl) {
-
-            while (true) {
-                Future<FactoryManager> factories = applicationMap.get(cl);
-                if (factories == null) {
-                    Callable<FactoryManager> callable =
-                          new Callable<FactoryManager>() {
-                              public FactoryManager call()
-                                    throws Exception {
-                                  return new FactoryManager();
-                              }
-                          };
-
-                    FutureTask<FactoryManager> ft =
-                          new FutureTask<FactoryManager>(callable);
-                    factories = applicationMap.putIfAbsent(cl, ft);
-                    if (factories == null) {
-                        factories = ft;
-                        ft.run();
-                    }
-                }
-
-                try {
-                    return factories.get();
-                } catch (CancellationException ce) {
-                    if (LOGGER.isLoggable(Level.FINEST)) {
-                        LOGGER.log(Level.FINEST,
-                                   ce.toString(),
-                                   ce);
-                    }
-                    applicationMap.remove(cl);
-                } catch (InterruptedException ie) {
-                    if (LOGGER.isLoggable(Level.FINEST)) {
-                        LOGGER.log(Level.FINEST,
-                                   ie.toString(),
-                                   ie);
-                    }
-                    applicationMap.remove(cl);
-                } catch (ExecutionException ee) {
-                    throw new FacesException(ee);
-                }
-
-            }
-
-        }
-
-
-        public void removeApplicationFactoryManager(ClassLoader cl) {
-
-            applicationMap.remove(cl);
-
-        }
-
-    } // END FactoryCache
-
-
-    /**
-     * Maintains the factories for a single web application.
-     */
-    private static final class FactoryManager {
-
-        private final Map<String,Object> factories;
-        private final ReentrantReadWriteLock lock;
-
-
-        // -------------------------------------------------------- Consturctors
-
-
-        public FactoryManager() {
-            factories = new HashMap<String,Object>();
-            for (String name : FACTORY_NAMES) {
-                factories.put(name, new ArrayList(4));
-            }
-            lock = new ReentrantReadWriteLock(true);
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public void addFactory(String factoryName, String implementation) {
-
-            Object result = factories.get(factoryName);
-            lock.writeLock().lock();
-            try {
-                if (result instanceof List) {
-                    TypedCollections.dynamicallyCastList((List) result, String.class).add(0, implementation);
-                }
-            } finally {
-                lock.writeLock().unlock();
-            }
-        }
-
-
-        public Object getFactory(ClassLoader cl, String factoryName) {
-
-            Object factoryOrList;
-            lock.readLock().lock();
-            try {
-                factoryOrList = factories.get(factoryName);
-                if (!(factoryOrList instanceof List)) {
-                    return factoryOrList;
-                }
-            } finally {
-                lock.readLock().unlock();
-            }
-
-            // factory hasn't been constructed
-            lock.writeLock().lock();
-            try {
-                // double check the current value.  Another thread
-                // may have completed the initialization by the time
-                // this thread entered this block
-                factoryOrList = factories.get(factoryName);
-                if (!(factoryOrList instanceof List)) {
-                    return factoryOrList;
-                }
-                Object factory = getImplementationInstance(cl,
-                                                           factoryName,
-                                                           (List) factoryOrList);
-
-                if (factory == null) {
-                    ResourceBundle rb = LOGGER.getResourceBundle();
-                    String message = rb.getString("severe.no_factory");
-                    message = MessageFormat.format(message, factoryName);
-                    throw new IllegalStateException(message);
-                }
-
-                // Record and return the new instance
-                factories.put(factoryName, factory);
-                return (factory);
-            } finally {
-                lock.writeLock().unlock();
-            }
-        }
-
-    } // END FactoryManager
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings.properties b/jsf-api/src/main/java/javax/faces/LogStrings.properties
deleted file mode 100644
index 503f23b..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= Application was not properly initialized at startup, could not find Factory: {0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=Populating PropertyDescriptor Map for class ''{0}'' for Thread named ''{1}''.
-error.component.abortprocessing_thrown=AbortProcessingException thrown when processing event of type ''{0}'' during phase ''{1}'' for component with ID or Client ID of ''{2}''
-severe.component.unable_to_process_expression=Exception while processing expression {0} for attribute {1}.
-severe.component.uiviewroot_error_invoking_phaselistener=Exception invoking UIViewRoot PhaseListener {0}.
-warning.component.uiviewroot_non_serializable_attribute_viewmap=Setting non-serializable attribute value into ViewMap: (key: {0}, value class: {1})
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=Received ''{0}'' when invoking action listener ''{1}'' for component ''{2}''
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=Initialization of the JSF runtime either failed or did not occur.  Review the server''s log for details.
-servere.webapp.prejsf2.exception.handler.log_before={0} caught during beforePhase() processing of {1} : UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log_after={0} caught during afterPhase() processing of {1} : UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log={0} caught during processing of {1} : UIComponent-ClientId={2}, Message={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_de.properties b/jsf-api/src/main/java/javax/faces/LogStrings_de.properties
deleted file mode 100644
index 46e74fb..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_de.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= Die Anwendung wurde bei Systemstart nicht einwandfrei initialisiert, Factory konnte nicht gefunden werden: {0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=F\u00fcllen von PropertyDescriptor-Zuordnung f\u00fcr Klasse ''{0}'' f\u00fcr Thread mit dem Namen ''{1}''.
-error.component.abortprocessing_thrown=AbortProcessingException wird ausgel\u00f6st, wenn das Ereignis des Typs ''{0}'' w\u00e4hrend ''{1}'' f\u00fcr Komponente mit ID oder Client-ID von ''{2}'' verarbeitet wird.
-severe.component.unable_to_process_expression=Ausnahme beim Verarbeiten von Ausdruck {0} f\u00fcr Attribut {1}.
-severe.component.uiviewroot_error_invoking_phaselistener=Ausnahme ruft UIViewRoot PhaseListener {0} auf.
-warning.component.uiviewroot_non_serializable_attribute_viewmap=Der nicht serialisierbare Attributswert wird in ViewMap eingestellt: (Schl\u00fcssel: {0}, Wertklasse: {1})
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=Beim Aufrufen des Aktionszielger\u00e4ts ''{0}'' f\u00fcr Komponente ''{1}'' wurde ''{2}'' erhalten.
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=Die Initialisierung der JSF-Laufzeit schlug fehl oder ist nicht aufgetreten.  Pr\u00fcfen Sie die Details im Protokoll des Servers.
-servere.webapp.prejsf2.exception.handler.log_before={0} erfasst w\u00e4hrend beforePhase()-Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log_after={0} erfasst w\u00e4hrend afterPhase()-Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log={0} erfasst w\u00e4hrend Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_es.properties b/jsf-api/src/main/java/javax/faces/LogStrings_es.properties
deleted file mode 100644
index 8da9171..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_es.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= La aplicaci\u00f3n no se ha inicializado correctamente durante el inicio, no se encuentra la f\u00e1brica: {0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=Rellenando el mapa PropertyDescriptor para la clase ''{0}'' para el subproceso denominado ''{1}''.
-error.component.abortprocessing_thrown=Se ha arrojado AbortProcessingException al procesar el evento de tipo ''{0}'' durante la fase ''{1}'' para el componente con ID o ID de cliente ''{2}''
-severe.component.unable_to_process_expression=Excepci\u00f3n al procesar la expresi\u00f3n {0} para el atributo {1}.
-severe.component.uiviewroot_error_invoking_phaselistener=Excepci\u00f3n al invocar la escucha de fase UIViewRoot {0}.
-warning.component.uiviewroot_non_serializable_attribute_viewmap=Definiendo valor de atributo no serializable en ViewMap: (clave: {0}, clase de valor: {1})
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=Se ha recibido ''{0}'' al invocar la escucha de acci\u00f3n ''{1}'' para el componente ''{2}''
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=La inicializaci\u00f3n del tiempo de ejecuci\u00f3n JSF ha fallado o no se ha producido.  Revise el registro del servidor para m\u00e1s informaci\u00f3n.
-servere.webapp.prejsf2.exception.handler.log_before=Se ha interceptado {0} durante el procesamiento beforePhase() de {1} : UIComponent-ClientId={2}, Mensaje={3}
-servere.webapp.prejsf2.exception.handler.log_after=Se ha interceptado {0} durante el procesamiento afterPhase() de {1} : UIComponent-ClientId={2}, Mensaje={3}
-servere.webapp.prejsf2.exception.handler.log=Se ha interceptado {0} durante el procesamiento de {1} : UIComponent-ClientId={2}, Mensaje={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_fr.properties b/jsf-api/src/main/java/javax/faces/LogStrings_fr.properties
deleted file mode 100644
index a1e360a..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_fr.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= L''application n''a pas \u00e9t\u00e9 initialis\u00e9e correctement au d\u00e9marrage. Impossible de localiser la Fabrique : {0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=Remplissage du plan PropertyDescriptor pour la classe ''{0}'' de la Thread nomm\u00e9e ''{1}''.
-error.component.abortprocessing_thrown=Exception d''abandon de processus (AbortProcessingException) \u00e9mise lors du traitement de l''\u00e9v\u00e9nement de type ''{0}'' pendant la phase ''{1}'' du composant dont l''ID ou l''ID Client est ''{2}''
-severe.component.unable_to_process_expression=Exception lors du traitement de l''expression {0} de l''attribut {1}.
-severe.component.uiviewroot_error_invoking_phaselistener=Exception invoquant UIViewRoot PhaseListener {0}.
-warning.component.uiviewroot_non_serializable_attribute_viewmap=D\u00e9finition d''une valeur d''attribut non-s\u00e9rialisable dans ViewMap\u00a0: (cl\u00e9\u00a0: {0}, classe de la valeur\u00a0: {1})
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=R\u00e9ception de ''{0}'' lors de l''invocation du listener d''action ''{1}'' du composant ''{2}''
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=L''initialisation de l''ex\u00e9cution JSF a \u00e9chou\u00e9 ou ne s''est pas produite.  Consultez le journal du serveur pour plus de d\u00e9tails.
-servere.webapp.prejsf2.exception.handler.log_before={0} intercept\u00e9 durant le traitement de la m\u00e9thode beforePhase() de {1} : UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log_after={0} intercept\u00e9 durant le traitement de la m\u00e9thode afterPhase() de {1} : UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log={0} intercept\u00e9 durant le traitement de {1} : UIComponent-ClientId={2}, Message={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_ja.properties b/jsf-api/src/main/java/javax/faces/LogStrings_ja.properties
deleted file mode 100644
index 0fc7fc6..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_ja.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u8d77\u52d5\u6642\u306b\u6b63\u3057\u304f\u521d\u671f\u5316\u3055\u308c\u305a\u3001\u30d5\u30a1\u30af\u30c8\u30ea\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f: {0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=''{1}'' \u3068\u3044\u3046\u540d\u524d\u306e\u30b9\u30ec\u30c3\u30c9\u306b\u5bfe\u3057\u3066\u3001\u30af\u30e9\u30b9 ''{0}'' \u306e PropertyDescriptor \u30de\u30c3\u30d7\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002
-error.component.abortprocessing_thrown=ID \u307e\u305f\u306f Client ID \u304c ''{2}'' \u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30d5\u30a7\u30fc\u30ba ''{1}'' \u3067\u3001\u30bf\u30a4\u30d7\u304c ''{0}'' \u306e\u30a4\u30d9\u30f3\u30c8\u3092\u51e6\u7406\u3057\u3066\u3044\u308b\u3068\u304d\u306b AbortProcessingException \u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f
-severe.component.unable_to_process_expression=\u5c5e\u6027 {1} \u306e\u5f0f {0} \u306e\u51e6\u7406\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
-severe.component.uiviewroot_error_invoking_phaselistener=UIViewRoot PhaseListener {0} \u306e\u547c\u3073\u51fa\u3057\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
-warning.component.uiviewroot_non_serializable_attribute_viewmap=\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3067\u304d\u306a\u3044\u5c5e\u6027\u5024\u3092 ViewMap \u306b\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059: (\u30ad\u30fc: {0}\u3001\u5024\u30af\u30e9\u30b9: {1})
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 ''{2}'' \u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30ea\u30b9\u30ca\u30fc ''{1}'' \u306e\u547c\u3073\u51fa\u3057\u4e2d\u306b\u3001''{0}'' \u3092\u53d7\u3051\u53d6\u308a\u307e\u3057\u305f
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=JSF \u30e9\u30f3\u30bf\u30a4\u30e0\u306e\u521d\u671f\u5316\u306f\u3001\u5931\u6557\u3057\u305f\u304b\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u8a73\u7d30\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u306e\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-servere.webapp.prejsf2.exception.handler.log_before={1} \u306e beforePhase() \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientID ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
-servere.webapp.prejsf2.exception.handler.log_after={1} \u306e afterPhase() \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientID ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
-servere.webapp.prejsf2.exception.handler.log={1} \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientID ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_ko.properties b/jsf-api/src/main/java/javax/faces/LogStrings_ko.properties
deleted file mode 100644
index 10c29e6..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_ko.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uc2dc\uc791 \uc2dc \uc62c\ubc14\ub974\uac8c \ucd08\uae30\ud654\ub418\uc9c0 \uc54a\uc544 {0} \ud329\ud1a0\ub9ac\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=\uc774\ub984\uc774 "{0}"\uc778 \uc2a4\ub808\ub4dc\uc5d0 \ub300\ud574 \ud074\ub798\uc2a4 "{0}"\uc758 PropertyDescriptor \ub9f5\uc744 \uc785\ub825\ud558\ub294 \uc911\uc785\ub2c8\ub2e4.
-error.component.abortprocessing_thrown=ID \ub610\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 ID\uac00 "{2}"\uc778 \uad6c\uc131 \uc694\uc18c\uc5d0 \ub300\ud574 \ub2e8\uacc4 "{1}" \ub3d9\uc548 \uc774\ubca4\ud2b8 \uc720\ud615 "{0}"\uc744(\ub97c) \ucc98\ub9ac\ud558\ub294 \uc911\uc5d0 AbortProcessingException\uc774 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-severe.component.unable_to_process_expression={1} \uc18d\uc131\uc5d0 \ub300\ud55c \ud45c\ud604\uc2dd {0}\uc744(\ub97c) \ucc98\ub9ac\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-severe.component.uiviewroot_error_invoking_phaselistener=UIViewRoot PhaseListener {0}\uc744(\ub97c) \ud638\ucd9c\ud558\ub294 \uc911 \uc608\uc678\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-warning.component.uiviewroot_non_serializable_attribute_viewmap=\uc77c\ub828\ud654\ud560 \uc218 \uc5c6\ub294 \uc18d\uc131 \uac12\uc744 ViewMap\uc5d0 \uc124\uc815\ud558\ub294 \uc911: (\ud0a4: {0}, \uac12 \ud074\ub798\uc2a4: {1})
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=\uad6c\uc131 \uc694\uc18c "{2}"\uc758 \uc791\uc5c5 \uc218\uc2e0\uae30 "{1}"\uc744(\ub97c) \ud638\ucd9c\ud558\ub294 \uc911\uc5d0 "{0}"\uc774(\uac00) \uc218\uc2e0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=JSF \ub7f0\ud0c0\uc784 \ucd08\uae30\ud654\uac00 \uc2e4\ud328\ud588\uac70\ub098 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.  \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc11c\ubc84\uc758 \ub85c\uadf8\ub97c \uac80\ud1a0\ud558\uc2ed\uc2dc\uc624.
-servere.webapp.prejsf2.exception.handler.log_before={1}\uc758 beforePhase() \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
-servere.webapp.prejsf2.exception.handler.log_after={1}\uc758 afterPhase() \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
-servere.webapp.prejsf2.exception.handler.log={1} \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_pt_BR.properties b/jsf-api/src/main/java/javax/faces/LogStrings_pt_BR.properties
deleted file mode 100644
index d161b07..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_pt_BR.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= O aplicativo n\u00e3o foi iniciado corretamente na inicializa\u00e7\u00e3o. N\u00e3o foi poss\u00edvel encontrar F\u00e1brica: {0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=Populando\u00b7o Mapa de PropertyDescriptor da classe ''{0}'' para o Segmento denominado ''{1}''.
-error.component.abortprocessing_thrown=AbortProcessingException lan\u00e7ado durante o processamento do evento de tipo ''{0}'' na fase ''{1}'' do componente com a ID ou ID de cliente ''{2}''
-severe.component.unable_to_process_expression=Exce\u00e7\u00e3o criada durante o processamento da express\u00e3o {0} para o atributo {1}.
-severe.component.uiviewroot_error_invoking_phaselistener=Exce\u00e7\u00e3o criada ao invocar\u00b7UIViewRoot PhaseListener {0}.
-warning.component.uiviewroot_non_serializable_attribute_viewmap=Definindo valor de atributo n\u00e3o serializ\u00e1vel em ViewMap (chave: {0}, classe do valor: {1}).
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=''{0}'' recebido ao invocar escuta de a\u00e7\u00e3o ''{1}'' para o componente ''{2}''
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=A inicializa\u00e7\u00e3o do tempo de execu\u00e7\u00e3o de JSF falhou ou n\u00e3o ocorreu.  Consulte o log do servidor para obter detalhes.
-servere.webapp.prejsf2.exception.handler.log_before={0} obtido durante o processamento de beforePhase() de {1}: UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log_after={0} obtido durante o processamento de afterPhase() de {1}: UIComponent-ClientId={2}, Message={3}
-servere.webapp.prejsf2.exception.handler.log={0} obtido durante o processamento de {1}: UIComponent-ClientId={2}, Message={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_zh_CN.properties b/jsf-api/src/main/java/javax/faces/LogStrings_zh_CN.properties
deleted file mode 100644
index 3ee8060..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_zh_CN.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= \u542f\u52a8\u65f6\u6ca1\u6709\u6b63\u786e\u521d\u59cb\u5316\u5e94\u7528\u7a0b\u5e8f\uff0c\u65e0\u6cd5\u627e\u5230\u5de5\u5382\uff1a{0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=\u4e3a\u540d\u4e3a ''{1}'' \u7684\u7ebf\u7a0b\u7684\u7c7b ''{0}'' \u586b\u5145 PropertyDescriptor \u6620\u5c04\u3002
-error.component.abortprocessing_thrown=\u5bf9\u4e8e ID \u6216\u5ba2\u6237\u673a ID \u4e3a ''{2}'' \u7684\u7ec4\u4ef6\uff0c\u5f53\u5904\u7406\u7c7b\u578b ''{0}'' \u7684\u4e8b\u4ef6\u65f6\uff0c\u5728\u9636\u6bb5 ''{1}'' \u629b\u51fa AbortProcessingException
-severe.component.unable_to_process_expression=\u5904\u7406\u5c5e\u6027 {1} \u7684\u8868\u8fbe\u5f0f {0} \u65f6\u51fa\u73b0\u5f02\u5e38\u3002
-severe.component.uiviewroot_error_invoking_phaselistener=\u8c03\u7528 UIViewRoot PhaseListener {0} \u65f6\u51fa\u73b0\u5f02\u5e38\u3002
-warning.component.uiviewroot_non_serializable_attribute_viewmap=\u5c06\u4e0d\u53ef\u5e8f\u5217\u5316\u5c5e\u6027\u503c\u8bbe\u7f6e\u4e3a ViewMap\uff1a\uff08\u5bc6\u94a5\uff1a{0}\uff0c\u503c\u7c7b\uff1a{1}\uff09
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=\u8c03\u7528\u7ec4\u4ef6 ''{2}'' \u7684\u64cd\u4f5c\u4fa6\u542c\u5668 ''{1}'' \u65f6\u6536\u5230 ''{0}''
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=JSF \u8fd0\u884c\u65f6\u521d\u59cb\u5316\u5931\u8d25\u6216\u672a\u8fdb\u884c\u521d\u59cb\u5316\u3002\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u68c0\u67e5\u670d\u52a1\u5668\u7684\u65e5\u5fd7\u3002
-servere.webapp.prejsf2.exception.handler.log_before=\u5728 {1} \u7684 beforePhase() \u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
-servere.webapp.prejsf2.exception.handler.log_after=\u5728 {1} \u7684 afterPhase() \u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
-servere.webapp.prejsf2.exception.handler.log=\u5728 {1} \u7684\u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/LogStrings_zh_TW.properties b/jsf-api/src/main/java/javax/faces/LogStrings_zh_TW.properties
deleted file mode 100644
index bcb80c2..0000000
--- a/jsf-api/src/main/java/javax/faces/LogStrings_zh_TW.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-#
-# Logging key guideline:
-#   [level].[base package].[message_id]
-
-# Common -----------------------------------------------------------------------
-
-
-# PACKAGE javax.faces ----------------------------------------------------------
-severe.no_factory= \u672a\u5728\u555f\u52d5\u6642\u6b63\u78ba\u5730\u521d\u59cb\u5316\u61c9\u7528\u7a0b\u5f0f\uff0c\u627e\u4e0d\u5230\u5de5\u5ee0: {0}
-
-
-# PACKAGE javax.faces.application ----------------------------------------------
-
-
-# PACKAGE javax.faces.component ------------------------------------------------
-fine.component.populating_descriptor_map=\u6b63\u5728\u70ba\u540d\u70ba\u300c{1}\u300d\u7684\u57f7\u884c\u7dd2\u5beb\u5165\u985e\u5225\u300c{0}\u300d\u7684 PropertyDescriptor \u5c0d\u6620\u3002
-error.component.abortprocessing_thrown=\u5728 ID \u6216\u7528\u6236\u7aef ID \u70ba\u300c{2}\u300d\u7684\u5143\u4ef6\u7684\u968e\u6bb5\u300c{1}\u300d\uff0c\u8655\u7406\u985e\u578b\u70ba\u300c{0}\u300d\u7684\u4e8b\u4ef6\u6642\u4e1f\u51fa AbortProcessingException
-severe.component.unable_to_process_expression=\u8655\u7406\u5c6c\u6027 {1} \u7684\u8868\u793a\u5f0f {0} \u6642\u767c\u751f\u7570\u5e38\u3002 
-severe.component.uiviewroot_error_invoking_phaselistener=\u547c\u53eb UIViewRoot PhaseListener {0} \u6642\u767c\u751f\u7570\u5e38\u3002
-warning.component.uiviewroot_non_serializable_attribute_viewmap=\u5c07\u4e0d\u53ef\u4e32\u5217\u5316\u7684\u5c6c\u6027\u503c\u8a2d\u70ba ViewMap\uff1a(\u6a5f\u78bc: {0}\uff0c\u503c\u985e\u5225: {1})
-# PACKAGE javax.faces.context --------------------------------------------------
-
-
-# PACKAGE javax.faces.convert --------------------------------------------------
-
-
-# PACKAGE javax.faces.el -------------------------------------------------------
-
-
-# PACKAGE javax.faces.event ----------------------------------------------------
-severe.event.exception_invoking_processaction=\u547c\u53eb\u5143\u4ef6\u300c{2}\u300d\u7684\u52d5\u4f5c\u5075\u807d\u7a0b\u5f0f\u300c{1}\u300d\u6642\u6536\u5230\u300c{0}\u300d
-
-# PACKAGE javax.faces.lifecycle ------------------------------------------------
-
-
-# PACKAGE javax.faces.model ----------------------------------------------------
-
-
-# PACKAGE javax.faces.render ---------------------------------------------------
-
-
-# PACKAGE javax.faces.validator ------------------------------------------------
-
-
-# PACKAGE javax.faces.webapp ---------------------------------------------------
-severe.webapp.facesservlet.init_failed=\u521d\u59cb\u5316 JSF \u57f7\u884c\u968e\u6bb5\u5931\u6557\u6216\u672a\u767c\u751f\u3002\u8a73\u7d30\u8cc7\u8a0a\u8acb\u6aa2\u8996\u4f3a\u670d\u5668\u7684\u8a18\u9304\u6a94\u3002
-servere.webapp.prejsf2.exception.handler.log_before=\u5728 {1} \u7684 beforePhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
-servere.webapp.prejsf2.exception.handler.log_after=\u5728 {1} \u7684 afterPhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
-servere.webapp.prejsf2.exception.handler.log=\u5728\u8655\u7406 {1} \u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages.properties b/jsf-api/src/main/java/javax/faces/Messages.properties
deleted file mode 100644
index b7d378e..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}: Conversion error occurred.
-javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
-javax.faces.component.UIInput.UPDATE={0}: An error occurred when processing your submitted information. 
-javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid
-javax.faces.component.UISelectMany.INVALID={0}: Validation Error: Value is not valid
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' must be a signed decimal number.
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' must be a signed decimal number consisting of zero or more digits, that may be followed by a decimal point and fraction.  Example: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' must be a number consisting of one or more digits. Example: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' must be 'true' or 'false'.
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' must be 'true' or 'false'.  Any value other than 'true' will evaluate to 'false'.
-javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' must be a number between 0 and 255.
-javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' must be a number between 0 and 255.  Example: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' must be a valid character.
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' must be a valid ASCII character.
-javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' could not be understood as a date.
-javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' could not be understood as a date. Example: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' could not be understood as a time.
-javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' could not be understood as a time. Example: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' could not be understood as a date and time.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' could not be understood as a date and time. Example: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: A 'pattern' or 'type' attribute must be specified to convert the value ''{0}''.
-javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' must be a number between 4.9E-324 and 1.7976931348623157E308  Example: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' must be convertible to an enum.
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' must be convertible to an enum from the enum that contains the constant ''{1}''.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
-javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' must be a number between 1.4E-45 and 3.4028235E38  Example: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' must be a number between -2147483648 and 2147483647 Example: {1}
-javax.faces.converter.LongConverter.LONG={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' must be a number between -9223372036854775808 to 9223372036854775807 Example: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' could not be understood as a currency value.
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' could not be understood as a currency value. Example: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' could not be understood as a percentage.
-javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' could not be understood as a percentage. Example: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' is not a number.
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' is not a number. Example: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' is not a number pattern.
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' is not a number pattern. Example: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' must be a number between -32768 and 32767 Example: {1}
-javax.faces.converter.STRING={1}: Could not convert ''{0}'' to a string.
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of "{0}"
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.DoubleRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type
-javax.faces.validator.LengthValidator.MAXIMUM={1}: Validation Error: Length is greater than allowable maximum of ''{0}''
-javax.faces.validator.LengthValidator.MINIMUM={1}: Validation Error: Length is less than allowable minimum of ''{0}''
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of ''{0}''
-javax.faces.validator.LongRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.LongRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type.
-javax.faces.validator.NOT_IN_RANGE=Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex pattern must be set.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
-javax.faces.validator.RegexValidator.NOT_MATCHED=Regex Pattern not matched
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Error in regular expression.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Error in regular expression, ''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_de.properties b/jsf-api/src/main/java/javax/faces/Messages_de.properties
deleted file mode 100644
index c6f336d..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_de.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}: Umwandlungsfehler aufgetreten.
-javax.faces.component.UIInput.REQUIRED={0}: \u00dcberpr\u00fcfungsfehler: Wert ist erforderlich.
-javax.faces.component.UIInput.UPDATE={0}: Bei der Verarbeitung der angegebenen Informationen ist ein Fehler aufgetreten. 
-javax.faces.component.UISelectOne.INVALID={0}: \u00dcberpr\u00fcfungsfehler: Wert ist ung\u00fcltig.
-javax.faces.component.UISelectMany.INVALID={0}: \u00dcberpr\u00fcfungsfehler: Wert ist ung\u00fcltig.
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: Bei ''{0}'' muss es sich um eine Dezimalzahl mit Vorzeichen handeln.
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: Bei ''{0}'' muss es sich um eine Dezimalzahl mit Vorzeichen handeln, die aus null oder mehr Ziffern besteht, auf die ein Dezimalpunkt und ein Bruch folgen kann.  Beispiel: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln. Beispiel: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' muss ''true'' oder ''false'' sein.
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' muss ''true'' oder ''false'' sein.  Andere Werte als ''true'' werden als ''false'' ausgewertet.
-javax.faces.converter.ByteConverter.BYTE={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen 0 und 255 handeln.
-javax.faces.converter.ByteConverter.BYTE_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen 0 und 255 handeln.  Beispiel: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' muss ein g\u00fcltiges Zeichen sein.
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' muss ein g\u00fcltiges ASCII-Zeichen sein.
-javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' konnte nicht als Datum interpretiert werden.
-javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' konnte nicht als Datum interpretiert werden. Beispiel: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' konnte nicht als Uhrzeit interpretiert werden.
-javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' konnte nicht als Uhrzeit interpretiert werden. Beispiel: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' konnte nicht als Datum und Uhrzeit interpretiert werden.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' konnte nicht als Datum und Uhrzeit interpretiert werden. Beispiel: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: Zur Umwandlung des Werts ''{0}'' muss ein ''pattern''- bzw. ''type''-Attribut angegeben werden.
-javax.faces.converter.DoubleConverter.DOUBLE={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: Bei  ''{0}'' muss es sich um eine Zahl zwischen 4.9E-324 und 1.7976931348623157E308  handeln. Beispiel: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}''  muss in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen.
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' muss anhand der Aufz\u00e4hlung, die die Konstante ''{1}'' enth\u00e4lt, in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' muss anhand der Aufz\u00e4hlung in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen, es wurde jedoch keine Aufz\u00e4hlungsklasse angegeben.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' muss anhand der Aufz\u00e4hlung in eine Aufz\u00e4hlung umgewandelt werden k\u00f6nnen, es wurde jedoch keine Aufz\u00e4hlungsklasse angegeben.
-javax.faces.converter.FloatConverter.FLOAT={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen 1.4E-45 und 3.4028235E38 handeln. Beispiel: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen  -2147483648 und 2147483647 handeln. Beispiel:  {1}
-javax.faces.converter.LongConverter.LONG={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
-javax.faces.converter.LongConverter.LONG_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen -9223372036854775808 und 9223372036854775807  handeln. Beispiel: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' konnte nicht als W\u00e4hrungswert interpretiert werden.
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' konnte nicht als W\u00e4hrungswert interpretiert werden. Beispiel: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' konnte nicht als Prozentsatz interpretiert werden.
-javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' konnte nicht als Prozentsatz interpretiert werden. Beispiel: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' ist keine Zahl.
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' ist keine Zahl. Beispiel: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' ist kein Zahlenmuster.
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' ist kein Zahlenmuster. Beispiel: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: Bei ''{0}'' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
-javax.faces.converter.ShortConverter.SHORT_detail={2}: Bei ''{0}'' muss es sich um eine Zahl zwischen  -32768 und 32767 handeln. Beispiel: {1}
-javax.faces.converter.STRING={1}: Umwandlung von ''{0}'' in eine Zeichenkette nicht m\u00f6glich.
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist gr\u00f6\u00dfer als der zul\u00e4ssige Maximalwert "{0}"
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist kleiner als der zul\u00e4ssige Minimalwert "{0}"
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: \u00dcberpr\u00fcfungsfehler: Das angegebene Attribut liegt nicht zwischen den erwarteten Werten {0} und {1}.
-javax.faces.validator.DoubleRangeValidator.TYPE={0}: \u00dcberpr\u00fcfungsfehler: Wert ist nicht vom richtigen Typ 
-javax.faces.validator.LengthValidator.MAXIMUM={1}: \u00dcberpr\u00fcfungsfehler: L\u00e4nge ist gr\u00f6\u00dfer als der zul\u00e4ssige Maximalwert "{0}"
-javax.faces.validator.LengthValidator.MINIMUM={1}: \u00dcberpr\u00fcfungsfehler: L\u00e4nge ist kleiner als der zul\u00e4ssige Minimalwert "{0}"
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist gr\u00f6\u00dfer als der zul\u00e4ssige Maximalwert "{0}"
-javax.faces.validator.LongRangeValidator.MINIMUM={1}: \u00dcberpr\u00fcfungsfehler: Wert ist kleiner als der zul\u00e4ssige Minimalwert "{0}"
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: \u00dcberpr\u00fcfungsfehler: Das angegebene Attribut liegt nicht zwischen den erwarteten Werten {0} und {1}.
-javax.faces.validator.LongRangeValidator.TYPE={0}: \u00dcberpr\u00fcfungsfehler: Wert ist nicht vom richtigen Typ 
-javax.faces.validator.NOT_IN_RANGE=\u00dcberpr\u00fcfungsfehler: Das angegebene Attribut liegt nicht zwischen den erwarteten Werten {0} und {1}.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex-Muster muss festgelegt werden.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex-Muster muss einen nicht leeren Wert haben.
-javax.faces.validator.RegexValidator.NOT_MATCHED=Regex-Muster nicht angepasst
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex-Muster von ''{0}'' nicht angepasst
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Fehler in regul\u00e4rem Ausdruck.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Fehler in regul\u00e4rem Ausdruck,  ''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_en.properties b/jsf-api/src/main/java/javax/faces/Messages_en.properties
deleted file mode 100644
index 5966d99..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_en.properties
+++ /dev/null
@@ -1,110 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}: Conversion error occurred.
-javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
-javax.faces.component.UIInput.UPDATE={0}: An error occurred when processing your submitted information.
-javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid
-javax.faces.component.UISelectMany.INVALID={0}: Validation Error: Value is not valid
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' must be a signed decimal number.
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' must be a signed decimal number consisting of zero or more digits, that may be followed by a decimal point and fraction.  Example: {1}
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' must be a number consisting of one or more digits. Example: {1}
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' must be 'true' or 'false'.
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' must be 'true' or 'false'.  Any value other than 'true' will evaluate to 'false'.
-javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' must be a number between 0 and 255.
-javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' must be a number between 0 and 255.  Example: {1}
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' must be a valid character.
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' must be a valid ASCII character.
-javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' could not be understood as a date.
-javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' could not be understood as a date. Example: {1}
-javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' could not be understood as a time.
-javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' could not be understood as a time. Example: {1}
-javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' could not be understood as a date and time.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' could not be understood as a date and time. Example: {1}
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: A 'pattern' or 'type' attribute must be specified to convert the value ''{0}''.
-javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' must be a number between 4.9E-324 and 1.7976931348623157E308  Example: {1}
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' must be convertible to an enum.
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' must be convertible to an enum from the enum that contains the constant ''{1}''.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' must be convertible to an enum from the enum, but no enum class provided.
-javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' must be a number between 1.4E-45 and 3.4028235E38  Example: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' must be a number between -2147483648 and 2147483647 Example: {1}
-javax.faces.converter.LongConverter.LONG={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' must be a number between -9223372036854775808 to 9223372036854775807 Example: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' could not be understood as a currency value.
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' could not be understood as a currency value. Example: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' could not be understood as a percentage.
-javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' could not be understood as a percentage. Example: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' is not a number.
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' is not a number. Example: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' is not a number pattern.
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' is not a number pattern. Example: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' must be a number consisting of one or more digits.
-javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' must be a number between -32768 and 32767 Example: {1}
-javax.faces.converter.STRING={1}: Could not convert ''{0}'' to a string.
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of "{0}"
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.DoubleRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type
-javax.faces.validator.LengthValidator.MAXIMUM={1}: Validation Error: Length is greater than allowable maximum of ''{0}''
-javax.faces.validator.LengthValidator.MINIMUM={1}: Validation Error: Length is less than allowable minimum of ''{0}''
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Validation Error: Value is greater than allowable maximum of ''{0}''
-javax.faces.validator.LongRangeValidator.MINIMUM={1}: Validation Error: Value is less than allowable minimum of ''{0}''
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.LongRangeValidator.TYPE={0}: Validation Error: Value is not of the correct type.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex pattern must be set.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
-javax.faces.validator.RegexValidator.NOT_MATCHED=Regex Pattern not matched
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Error in regular expression.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Error in regular expression, ''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_es.properties b/jsf-api/src/main/java/javax/faces/Messages_es.properties
deleted file mode 100644
index 39665a8..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_es.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}: Se ha producido un error de conversi\u00f3n.
-javax.faces.component.UIInput.REQUIRED={0}: Error de validaci\u00f3n: se necesita un valor.
-javax.faces.component.UIInput.UPDATE={0}: Se ha producido un error al procesar la informaci\u00f3n enviada. 
-javax.faces.component.UISelectOne.INVALID={0}: Error de validaci\u00f3n: el valor no es v\u00e1lido
-javax.faces.component.UISelectMany.INVALID={0}: Error de validaci\u00f3n: el valor no es v\u00e1lido
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' debe ser un n\u00famero decimal positivo o negativo.
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' debe ser un n\u00famero decimal positivo o negativo formado por cero o m\u00e1s d\u00edgitos, que pueden incluir a continuaci\u00f3n una coma decimal y una fracci\u00f3n.  Ejemplo: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos. Ejemplo: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' debe ser 'true' o 'false'.
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' debe ser 'true' o 'false'.  Cualquier valor diferente a ''true'', se evaluar\u00e1 como ''false''.
-javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' debe ser un n\u00famero entre 0 y 255.
-javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' debe ser un n\u00famero entre 0 y 255.  Ejemplo: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' debe ser un car\u00e1cter v\u00e1lido.
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' debe ser un car\u00e1cter ASCII v\u00e1lido.
-javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' no se ha podido reconocer como fecha.
-javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' no se ha podido reconocer como fecha. Ejemplo: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' no se ha podido reconocer como hora.
-javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' no se ha podido reconocer como hora. Ejemplo: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' no se ha podido reconocer como fecha y hora.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' no se ha podido reconocer como fecha y hora. Ejemplo: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: Debe especificarse el atributo ''pattern'' o ''type'' para convertir el valor ''{0}''.
-javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' debe ser un n\u00famero entre 4.9E-324 y 1.7976931348623157E308  Ejemplo: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n.
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n a partir de la enumeraci\u00f3n que contiene la constante ''{1}''.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n a partir de la enumeraci\u00f3n, pero no se ha especificado ninguna clase de enumeraci\u00f3n.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' debe poder convertirse en una enumeraci\u00f3n a partir de la enumeraci\u00f3n, pero no se ha especificado ninguna clase de enumeraci\u00f3n.
-javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' debe ser un n\u00famero entre 1.4E-45 y 3.4028235E38  Ejemplo: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' debe ser un n\u00famero entre -2147483648 y 2147483647. Ejemplo: {1}
-javax.faces.converter.LongConverter.LONG={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
-javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' debe ser un n\u00famero entre -9223372036854775808 y 9223372036854775807. Ejemplo: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' no se ha podido reconocer como un valor de divisa.
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' no se ha podido reconocer como un valor de divisa. Ejemplo: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' no se ha podido reconocer como porcentaje.
-javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' no se ha podido reconocer como porcentaje. Ejemplo: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' no es un n\u00famero.
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' no es un n\u00famero. Ejemplo: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' no es un modelo de n\u00famero.
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' no es un modelo de n\u00famero. Ejemplo: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' debe ser un n\u00famero formado por uno o varios d\u00edgitos.
-javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' debe ser un n\u00famero entre -32768 y 32767. Ejemplo: {1}
-javax.faces.converter.STRING={1}: No se ha podido convertir ''{0}'' en una cadena.
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Error de validaci\u00f3n: el valor es mayor que el m\u00e1ximo permitido de "{0}"
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Error de validaci\u00f3n: el valor es inferior que el m\u00ednimo permitido de ''{0}''
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Error de validaci\u00f3n: el atributo especificado no est\u00e1 entre los valores esperados: {0} y {1}.
-javax.faces.validator.DoubleRangeValidator.TYPE={0}: Error de validaci\u00f3n: el valor no tiene el tipo correcto
-javax.faces.validator.LengthValidator.MAXIMUM={1}: Error de validaci\u00f3n: el largo es mayor que el m\u00e1ximo permitido de ''{0}''
-javax.faces.validator.LengthValidator.MINIMUM={1}: Error de validaci\u00f3n: el largo es inferior que el m\u00ednimo permitido de ''{0}''
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Error de validaci\u00f3n: el valor es mayor que el m\u00e1ximo permitido de ''{0}''
-javax.faces.validator.LongRangeValidator.MINIMUM={1}: Error de validaci\u00f3n: el valor es inferior que el m\u00ednimo permitido de ''{0}''
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Error de validaci\u00f3n: el atributo especificado no est\u00e1 entre los valores esperados: {0} y {1}.
-javax.faces.validator.LongRangeValidator.TYPE={0}: Error de validaci\u00f3n: el valor no tiene el tipo correcto.
-javax.faces.validator.NOT_IN_RANGE=Error de validaci\u00f3n: el atributo especificado no est\u00e1 entre los valores esperados: {0} y {1}.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Debe definirse el modelo Regex.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=El modelo Regex debe estar definido como un valor no vac\u00edo.
-javax.faces.validator.RegexValidator.NOT_MATCHED=El modelo Regex no coincide
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=El modelo Regex ''{0}'' no coincide
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Error en expresi\u00f3n regular
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Error en expresi\u00f3n regular, ''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_fr.properties b/jsf-api/src/main/java/javax/faces/Messages_fr.properties
deleted file mode 100644
index 3baf96a..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_fr.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}\u00a0: une erreur de conversion est survenue.
-javax.faces.component.UIInput.REQUIRED={0}\u00a0: erreur de validation. Vous devez indiquer une valeur.
-javax.faces.component.UIInput.UPDATE={0}\u00a0: une erreur est survenue lors du traitement des informations que vous avez soumises. 
-javax.faces.component.UISelectOne.INVALID={0}\u00a0: erreur de validation. La valeur est incorrecte.
-javax.faces.component.UISelectMany.INVALID={0}\u00a0: erreur de validation. La valeur est incorrecte.
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}\u00a0: ''{0}'' doit \u00eatre un nombre d\u00e9cimal sign\u00e9.
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre d\u00e9cimal sign\u00e9 compos\u00e9 de z\u00e9ro ou de plusieurs chiffres, pouvant \u00eatre suivis d'une virgule et d'une fraction.  Exemple\u00a0: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}\u00a0: ''{0}'' doit \u00eatre un nombre compos\u00e9 d'un ou de plusieurs chiffres.
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre compos\u00e9 d'un ou de plusieurs chiffres. Exemple\u00a0: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}\u00a0: ''{0}'' doit pr\u00e9senter la valeur 'true' ou 'false'.
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}\u00a0: ''{0}'' doit pr\u00e9senter la valeur 'true' ou 'false'.  Toute valeur diff\u00e9rente de 'true' sera \u00e9valu\u00e9e comme \u00e9tant 'false'.
-javax.faces.converter.ByteConverter.BYTE={2}\u00a0: ''{0}'' doit \u00eatre un nombre compris entre 0 et 255.
-javax.faces.converter.ByteConverter.BYTE_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre compris entre 0 et 255.  Exemple\u00a0: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}\u00a0: ''{0}'' doit \u00eatre un caract\u00e8re valide.
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}\u00a0: ''{0}'' doit \u00eatre un caract\u00e8re ASCII valide.
-javax.faces.converter.DateTimeConverter.DATE={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date.
-javax.faces.converter.DateTimeConverter.DATE_detail={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date. Exemple\u00a0: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant qu'heure.
-javax.faces.converter.DateTimeConverter.TIME_detail={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant qu'heure. Exemple\u00a0: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date et heure.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que date et heure. Exemple\u00a0: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}\u00a0: un attribut 'pattern' ou 'type' doit \u00eatre sp\u00e9cifi\u00e9 pour convertir la valeur ''{0}''.
-javax.faces.converter.DoubleConverter.DOUBLE={2}\u00a0: ''{0}'' doit \u00eatre un nombre compos\u00e9 d'un ou de plusieurs chiffres.
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre compris entre 4.9E-324 et 1.7976931348623157E308. Exemple\u00a0: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}\u00a0: ''{0}'' doit pouvoir \u00eatre converti en une valeur Enum.
-javax.faces.converter.EnumConverter.ENUM_detail={2}\u00a0: ''{0}'' doit pouvoir \u00eatre converti en une valeur Enum \u00e0 partir de la valeur Enum contenant la constante ''{1}''.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}\u00a0: ''{0}'' doit pouvoir \u00eatre converti en une valeur Enum \u00e0 partir de la valeur Enum, mais aucune classe Enum n'est fournie.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}\u00a0: ''{0}'' doit pouvoir \u00eatre converti en une valeur Enum \u00e0 partir de la valeur Enum, mais aucune classe Enum n'est fournie.
-javax.faces.converter.FloatConverter.FLOAT={2}\u00a0: ''{0}'' doit \u00eatre un nombre compos\u00e9 d'un ou de plusieurs chiffres.
-javax.faces.converter.FloatConverter.FLOAT_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre compris entre 1.4E-45 et 3.4028235E38. Exemple\u00a0: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}\u00a0: ''{0}'' doit \u00eatre un nombre compos\u00e9 d'un ou de plusieurs chiffres.
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre compris entre -2147483648 et 2147483647. Exemple\u00a0: {1}
-javax.faces.converter.LongConverter.LONG={2}\u00a0: ''{0}'' doit \u00eatre un nombre compos\u00e9 d'un ou de plusieurs chiffres.
-javax.faces.converter.LongConverter.LONG_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre compris entre -9223372036854775808 et 9223372036854775807. Exemple\u00a0: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que valeur mon\u00e9taire.
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que valeur mon\u00e9taire. Exemple\u00a0: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que pourcentage.
-javax.faces.converter.NumberConverter.PERCENT_detail={2}\u00a0: ''{0}'' n'a pas pu \u00eatre interpr\u00e9t\u00e9 en tant que pourcentage. Exemple\u00a0: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}\u00a0: ''{0}'' n'est pas un nombre.
-javax.faces.converter.NumberConverter.NUMBER_detail={2}\u00a0: ''{0}'' n'est pas un nombre. Exemple\u00a0: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}\u00a0: ''{0}'' n'est pas un format num\u00e9rique.
-javax.faces.converter.NumberConverter.PATTERN_detail={2}\u00a0: ''{0}'' n'est pas un format num\u00e9rique. Exemple\u00a0: {1}
-javax.faces.converter.ShortConverter.SHORT={2}\u00a0: ''{0}'' doit \u00eatre un nombre compos\u00e9 d'un ou de plusieurs chiffres.
-javax.faces.converter.ShortConverter.SHORT_detail={2}\u00a0: ''{0}'' doit \u00eatre un nombre compris entre -32768 et 32767. Exemple\u00a0: {1}
-javax.faces.converter.STRING={1}\u00a0: impossible de convertir ''{0}'' en cha\u00eene.
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}\u00a0: erreur de validation. La valeur est sup\u00e9rieure \u00e0 la valeur maximale autoris\u00e9e, "{0}".
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}\u00a0: erreur de validation. La valeur est inf\u00e9rieure \u00e0 la valeur minimale autoris\u00e9e, "{0}".
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}\u00a0: erreur de validation. L'attribut sp\u00e9cifi\u00e9 n'est pas compris entre les valeurs attendues {0} et {1}.
-javax.faces.validator.DoubleRangeValidator.TYPE={0}\u00a0: erreur de validation. La valeur n'est pas du type correct.
-javax.faces.validator.LengthValidator.MAXIMUM={1}\u00a0: erreur de validation. La longueur est sup\u00e9rieure \u00e0 la valeur maximale autoris\u00e9e, "{0}".
-javax.faces.validator.LengthValidator.MINIMUM={1}\u00a0: erreur de validation. La longueur est inf\u00e9rieure \u00e0 la valeur minimale autoris\u00e9e, "{0}".
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}\u00a0: erreur de validation. La valeur est sup\u00e9rieure \u00e0 la valeur maximale autoris\u00e9e, "{0}".
-javax.faces.validator.LongRangeValidator.MINIMUM={1}\u00a0: erreur de validation. La valeur est inf\u00e9rieure \u00e0 la valeur minimale autoris\u00e9e, "{0}".
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\u00a0: erreur de validation. L'attribut sp\u00e9cifi\u00e9 n'est pas compris entre les valeurs attendues {0} et {1}.
-javax.faces.validator.LongRangeValidator.TYPE={0}\u00a0: erreur de validation. La valeur n'est pas du type correct.
-javax.faces.validator.NOT_IN_RANGE=Erreur de validation\u00a0: l'attribut sp\u00e9cifi\u00e9 n'est pas compris entre les valeurs attendues {0} et {1}.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Le mod\u00e8le d'expression r\u00e9guli\u00e8re doit \u00eatre d\u00e9fini.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=La valeur d\u00e9finie du mod\u00e8le d'expression r\u00e9guli\u00e8re ne peut pas \u00eatre vide.
-javax.faces.validator.RegexValidator.NOT_MATCHED=Discordance du mod\u00e8le d'expression r\u00e9guli\u00e8re.
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Discordance du mod\u00e8le d'expression r\u00e9guli\u00e8re ''{0}''.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Erreur dans l'expression r\u00e9guli\u00e8re.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Erreur dans l'expression r\u00e9guli\u00e8re,  ''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_ja.properties b/jsf-api/src/main/java/javax/faces/Messages_ja.properties
deleted file mode 100644
index 9d0e9a4..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_ja.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}: \u5909\u63db\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
-javax.faces.component.UIInput.REQUIRED={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u5fc5\u8981\u3067\u3059\u3002
-javax.faces.component.UIInput.UPDATE={0}: \u9001\u4fe1\u60c5\u5831\u306e\u51e6\u7406\u6642\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 
-javax.faces.component.UISelectOne.INVALID={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093
-javax.faces.component.UISelectMany.INVALID={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' \u306f\u7b26\u53f7\u4ed8\u304d\u306e 10 \u9032\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' \u306f 0 \u6841\u4ee5\u4e0a\u306e\u7b26\u53f7\u4ed8\u304d\u306e 10 \u9032\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u3089\u305a\u3001\u305d\u306e\u3042\u3068\u306b\u5c0f\u6570\u70b9\u3068\u4eee\u6570\u304c\u7d9a\u304f\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u4f8b: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u4f8b: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' \u306f 'true' \u307e\u305f\u306f 'false' \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' \u306f 'true' \u307e\u305f\u306f 'false' \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002'true' \u4ee5\u5916\u306e\u5024\u306f\u3059\u3079\u3066 'false' \u306b\u8a55\u4fa1\u3055\u308c\u307e\u3059\u3002
-javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' \u306f 0 \u3068 255 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' \u306f 0 \u3068 255 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u4f8b: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' \u306f\u6709\u52b9\u306a\u6587\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' \u306f\u6709\u52b9\u306a ASCII \u6587\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}'' \u3092\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}'' \u3092\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}'' \u3092\u65e5\u4ed8\u3068\u6642\u523b\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: \u5024 ''{0}'' \u3092\u5909\u63db\u3059\u308b\u306b\u306f\u3001'pattern' \u307e\u305f\u306f 'type' \u5c5e\u6027\u3092\u6307\u5b9a\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' \u306f 4.9E-324 \u3068 1.7976931348623157E308 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093  \u4f8b: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' \u306f\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' \u306f\u5b9a\u6570 ''{1}'' \u3092\u542b\u3080\u5217\u6319\u578b\u304b\u3089\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' \u306f\u5217\u6319\u578b\u304b\u3089\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u304c\u3001\u5217\u6319\u578b\u30af\u30e9\u30b9\u306f\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' \u306f\u5217\u6319\u578b\u304b\u3089\u5217\u6319\u578b\u3078\u306e\u5909\u63db\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u304c\u3001\u5217\u6319\u578b\u30af\u30e9\u30b9\u306f\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' \u306f 1.4E-45 \u3068 3.4028235E38 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093  \u4f8b: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' \u306f -2147483648 \u3068 2147483647 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 \u4f8b: {1}
-javax.faces.converter.LongConverter.LONG={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' \u306f -9223372036854775808 \u3068 9223372036854775807 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 \u4f8b: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}'' \u3092\u901a\u8ca8\u306e\u5024\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}'' \u3092\u901a\u8ca8\u306e\u5024\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}'' \u3092\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}'' \u3092\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f8b: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' \u306f\u6570\u5b57\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' \u306f\u6570\u5b57\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4f8b: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' \u306f\u6570\u5b57\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' \u306f\u6570\u5b57\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4f8b: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' \u306f 1 \u6841\u4ee5\u4e0a\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
-javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' \u306f -32768 \u3068 32767 \u306e\u9593\u306e\u6570\u5b57\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 \u4f8b: {1}
-javax.faces.converter.STRING={1}: ''{0}'' \u3092\u6587\u5b57\u5217\u306b\u5909\u63db\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5927\u5024 "{0}" \u3092\u4e0a\u56de\u3063\u3066\u3044\u307e\u3059
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5c0f\u5024 "{0}" \u3092\u4e0b\u56de\u3063\u3066\u3044\u307e\u3059
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u6307\u5b9a\u3055\u308c\u305f\u5c5e\u6027\u304c {0} \u3068 {1} \u306e\u9593\u306e\u671f\u5f85\u5024\u306b\u3042\u308a\u307e\u305b\u3093\u3002
-javax.faces.validator.DoubleRangeValidator.TYPE={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u306e\u578b\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093
-javax.faces.validator.LengthValidator.MAXIMUM={1}: \u78BA \u8A8D \u306E \u9593 \u9055 \u3044: \u9577 \u3055 \u306F \u6B63 \u5F53 \u306A \u6700 \u5927 \u3088 \u308A \u5927 \u304D \u3044 ''{0}''
-javax.faces.validator.LengthValidator.MINIMUM={1}: \u78BA \u8A8D \u306E \u9593 \u9055 \u3044: \u9577 \u3055 \u306F \u6B63 \u5F53 \u306A \u6700 \u5C0F \u3088 \u308A \u3088 \u308A \u5C11 \u306A \u304F ''{0}'' \u3042 \u308B
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5927\u5024 "{0}" \u3092\u4e0a\u56de\u3063\u3066\u3044\u307e\u3059
-javax.faces.validator.LongRangeValidator.MINIMUM={1}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u304c\u8a31\u53ef\u3055\u308c\u308b\u6700\u5c0f\u5024 "{0}" \u3092\u4e0b\u56de\u3063\u3066\u3044\u307e\u3059
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u6307\u5b9a\u3055\u308c\u305f\u5c5e\u6027\u304c {0} \u3068 {1} \u306e\u9593\u306e\u671f\u5f85\u5024\u306b\u3042\u308a\u307e\u305b\u3093\u3002
-javax.faces.validator.LongRangeValidator.TYPE={0}: \u691c\u8a3c\u30a8\u30e9\u30fc: \u5024\u306e\u578b\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002
-javax.faces.validator.NOT_IN_RANGE=\u691c\u8a3c\u30a8\u30e9\u30fc: \u6307\u5b9a\u3055\u308c\u305f\u5c5e\u6027\u304c {0} \u3068 {1} \u306e\u9593\u306e\u671f\u5f85\u5024\u306b\u3042\u308a\u307e\u305b\u3093\u3002
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7a7a\u3067\u306a\u3044\u5024\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-javax.faces.validator.RegexValidator.NOT_MATCHED=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u4e00\u81f4\u3057\u307e\u305b\u3093
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3 ''{0}'' \u306b\u4e00\u81f4\u3057\u307e\u305b\u3093
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\u6b63\u898f\u8868\u73fe\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059\u3002
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\u6b63\u898f\u8868\u73fe\u306e\u30a8\u30e9\u30fc\u3001''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_ko.properties b/jsf-api/src/main/java/javax/faces/Messages_ko.properties
deleted file mode 100644
index 9054eb3..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_ko.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}: \ubcc0\ud658 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-javax.faces.component.UIInput.REQUIRED={0}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.
-javax.faces.component.UIInput.UPDATE={0}: \uc81c\ucd9c\ud55c \uc815\ubcf4\ub97c \ucc98\ub9ac\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. 
-javax.faces.component.UISelectOne.INVALID={0}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-javax.faces.component.UISelectMany.INVALID={0}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}''\uc740(\ub294) \uc11c\uba85\ub41c 10\uc9c4\uc218\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}''\uc740(\ub294) 0\uc790\ub9ac \uc774\uc0c1\uc758 \uc11c\uba85\ub41c 10\uc9c4\uc218\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc774 \uc22b\uc790 \ub4a4\uc5d0 \uc18c\uc218\uc810\uacfc \ubd84\uc218\uac00 \uc62c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.  \uc608: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}''\uc740(\ub294) 'true' \ub610\ub294 'false'\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}''\uc740(\ub294) 'true' \ub610\ub294 'false'\uc5ec\uc57c \ud569\ub2c8\ub2e4.  'true' \uc774\uc678\uc758 \uac12\uc740 'false'\ub85c \ud3c9\uac00\ub429\ub2c8\ub2e4.
-javax.faces.converter.ByteConverter.BYTE={2}: ''{0}''\uc740(\ub294) 0\uacfc 255 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}''\uc740(\ub294) 0\uacfc 255 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.  \uc608: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}''\uc740(\ub294) \uc720\ud6a8\ud55c \ubb38\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}''\uc740(\ub294) \uc720\ud6a8\ud55c ASCII \ubb38\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-javax.faces.converter.DateTimeConverter.DATE_detail={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}: ''{0}''\uc744(\ub97c) \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-javax.faces.converter.DateTimeConverter.TIME_detail={2}: ''{0}''\uc744(\ub97c) \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc \ubc0f \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: ''{0}''\uc744(\ub97c) \ub0a0\uc9dc \ubc0f \uc2dc\uac04\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: ''{0}'' \uac12\uc744 \ubcc0\ud658\ud558\ub824\uba74 '\ud328\ud134' \ub610\ub294 '\uc720\ud615' \uc18d\uc131\uc774 \uc9c0\uc815\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}''\uc740(\ub294) 4.9E-324\uc640 1.7976931348623157E308 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}''\uc744(\ub97c) enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}''\uc744(\ub97c) \uc0c1\uc218 ''{1}''\uc774(\uac00) \ud3ec\ud568\ub41c enum\uc5d0\uc11c \ud558\ub098\uc758 enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}''\uc744(\ub97c) enum\uc5d0\uc11c enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud558\uc9c0\ub9cc enum \ud074\ub798\uc2a4\uac00 \uc81c\uacf5\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}''\uc744(\ub97c) enum\uc5d0\uc11c enum\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc5b4\uc57c \ud558\uc9c0\ub9cc enum \ud074\ub798\uc2a4\uac00 \uc81c\uacf5\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}''\uc740(\ub294) 1.4E-45\uc640 3.4028235E38 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}''\uc740(\ub294) -2147483648\uacfc 2147483647 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.LongConverter.LONG={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}''\uc740(\ub294) -9223372036854775808\uacfc 9223372036854775807 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}: ''{0}''\uc744(\ub97c) \ud1b5\ud654 \uac12\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}: ''{0}''\uc744(\ub97c) \ud1b5\ud654 \uac12\uc73c\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}: ''{0}''\uc744(\ub97c) \ubc31\ubd84\uc728\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-javax.faces.converter.NumberConverter.PERCENT_detail={2}: ''{0}''\uc744(\ub97c) \ubc31\ubd84\uc728\ub85c \uc778\uc2dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}''\uc740(\ub294) \uc22b\uc790\uac00 \uc544\ub2d9\ub2c8\ub2e4.
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}''\uc740(\ub294) \uc22b\uc790\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}''\uc740(\ub294) \uc22b\uc790 \ud328\ud134\uc774 \uc544\ub2d9\ub2c8\ub2e4.
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}''\uc740(\ub294) \uc22b\uc790 \ud328\ud134\uc774 \uc544\ub2d9\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: ''{0}''\uc740(\ub294) \ud55c \uc790\ub9ac \uc774\uc0c1\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}''\uc740(\ub294) -32768\uacfc 32767 \uc0ac\uc774\uc758 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4. \uc608: {1}
-javax.faces.converter.STRING={1}: ''{0}''\uc744(\ub97c) \ubb38\uc790\uc5f4\ub85c \ubcc0\ud658\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\ub300\uac12 "{0}"\ubcf4\ub2e4 \ud07d\ub2c8\ub2e4.
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\uc18c\uac12 ''{0}''\ubcf4\ub2e4 \uc791\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: \uac80\uc99d \uc624\ub958: \uc9c0\uc815\ud55c \uc18d\uc131\uc774 \ud544\uc694\ud55c \uac12 \ubc94\uc704\uc778 {0} ~ {1}\uc5d0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.DoubleRangeValidator.TYPE={0}: \uac80\uc99d \uc624\ub958: \uac12 \uc720\ud615\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.LengthValidator.MAXIMUM={1}: \uae38 \uc774 \ub294 \ud5c8 \uc6a9 \uac00 \ub2a5 \ud55c \ucd5c \uc18c \ubcf4 \ub2e4 \ub294 \ubcf4 \ub2e4 \uc801 \uac8c ''{0}'' \uc774 \ub2e4.
-javax.faces.validator.LengthValidator.MINIMUM={1}: \ud655 \uc778 \uacfc \uc2e4: \uae38 \uc774 \ub294 \ud5c8 \uc6a9 \uac00 \ub2a5 \ud55c \ucd5c \uc18c \ubcf4 \ub2e4 \ub294 \ubcf4 \ub2e4 \uc801 \uac8c ''{0}'' \uc774 \ub2e4
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\ub300\uac12 ''{0}''\ubcf4\ub2e4 \ud07d\ub2c8\ub2e4.
-javax.faces.validator.LongRangeValidator.MINIMUM={1}: \uac80\uc99d \uc624\ub958: \uac12\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd5c\uc18c\uac12 ''{0}''\ubcf4\ub2e4 \uc791\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: \uac80\uc99d \uc624\ub958: \uc9c0\uc815\ud55c \uc18d\uc131\uc774 \ud544\uc694\ud55c \uac12 \ubc94\uc704\uc778 {0} ~ {1}\uc5d0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.LongRangeValidator.TYPE={0}: \uac80\uc99d \uc624\ub958: \uac12 \uc720\ud615\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.NOT_IN_RANGE=\uac80\uc99d \uc624\ub958: \uc9c0\uc815\ud55c \uc18d\uc131\uc774 \ud544\uc694\ud55c \uac12 \ubc94\uc704\uc778 {0} ~ {1}\uc5d0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=Regex \ud328\ud134\uc744 \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex \ud328\ud134\uc744 \ube44\uc5b4 \uc788\uc9c0 \uc54a\uc740 \uac12\uc73c\ub85c \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.
-javax.faces.validator.RegexValidator.NOT_MATCHED=Regex \ud328\ud134\uc744 \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=Regex \ud328\ud134 ''{0}''\uc744(\ub97c) \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\uc815\uaddc \ud45c\ud604\uc2dd \uc624\ub958\uc785\ub2c8\ub2e4.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\uc815\uaddc \ud45c\ud604\uc2dd \uc624\ub958, ''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_pt_BR.properties b/jsf-api/src/main/java/javax/faces/Messages_pt_BR.properties
deleted file mode 100644
index cd80b89..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_pt_BR.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}: Ocorreu um erro de convers\u00e3o.
-javax.faces.component.UIInput.REQUIRED={0}: Erro de valida\u00e7\u00e3o: o valor \u00e9 necess\u00e1rio.
-javax.faces.component.UIInput.UPDATE={0}: Ocorreu um erro ao processar as informa\u00e7\u00f5es enviadas. 
-javax.faces.component.UISelectOne.INVALID={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 v\u00e1lido
-javax.faces.component.UISelectMany.INVALID={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 v\u00e1lido
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' deve ser um n\u00famero decimal com sinal.
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' deve ser um n\u00famero decimal com sinal formado por zero ou mais d\u00edgitos, que pode ser seguido de um ponto ou fra\u00e7\u00e3o decimal.  Exemplo: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos. Exemplo: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' deve ser 'verdadeiro' ou 'falso'.
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' deve ser 'verdadeiro' ou 'falso'.  Qualquer valor diferente de 'verdadeiro' se avaliar\u00e1 como 'falso'.
-javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' deve ser um n\u00famero entre 0 e 255.
-javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' deve ser um n\u00famero entre 0 e 255.  Exemplo: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' deve ser um caractere v\u00e1lido.
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' deve ser um caractere v\u00e1lido ASCII.
-javax.faces.converter.DateTimeConverter.DATE={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data.
-javax.faces.converter.DateTimeConverter.DATE_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data. Exemplo: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma hora.
-javax.faces.converter.DateTimeConverter.TIME_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma hora. Exemplo: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data e hora.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma data e hora. Exemplo: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: Um atributo 'pattern' ou 'type' deve ser especificado para converter o valor ''{0}''.
-javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' deve ser um n\u00famero entre 4.9E-324 e 1.7976931348623157E308  Exemplo: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' deve ser convert\u00edvel em um enum.
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' deve ser convert\u00edvel em um enum de um enum que contenha a constante ''{1}''.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' deve ser convert\u00edvel em um enum do enum, mas sem nenhuma classe enum fornecida.
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' deve ser convert\u00edvel em um enum do enum, mas sem nenhuma classe enum fornecida.
-javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' deve ser um n\u00famero entre 1.4E-45 e 3.4028235E38  Exemplo: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' deve ser um n\u00famero entre -2147483648 e 2147483647 Exemplo: {1}
-javax.faces.converter.LongConverter.LONG={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
-javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' deve ser um n\u00famero entre -9223372036854775808 a 9223372036854775807 Exemplo: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como um valor monet\u00e1rio.
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como um valor monet\u00e1rio. Exemplo: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma porcentagem.
-javax.faces.converter.NumberConverter.PERCENT_detail={2}: n\u00e3o foi poss\u00edvel reconhecer ''{0}'' como uma porcentagem. Exemplo: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' n\u00e3o \u00e9 um n\u00famero.
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' n\u00e3o \u00e9 um n\u00famero. Exemplo: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' n\u00e3o \u00e9 um padr\u00e3o de n\u00famero.
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' n\u00e3o \u00e9 um padr\u00e3o de n\u00famero. Exemplo: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' deve ser um n\u00famero formado por um ou mais d\u00edgitos.
-javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' deve ser um n\u00famero entre -32768 e 32767 Exemplo: {1}
-javax.faces.converter.STRING={1}: n\u00e3o foi poss\u00edvel converter ''{0}'' em uma sequ\u00eancia.
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 maior do que o m\u00e1ximo permitido de "{0}"
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 menor do que o m\u00ednimo permitido de "{0}"
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Erro de valida\u00e7\u00e3o: o atributo especificado n\u00e3o est\u00e1 entre os valores esperados de {0} e {1}.
-javax.faces.validator.DoubleRangeValidator.TYPE={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 do tipo correto
-javax.faces.validator.LengthValidator.MAXIMUM={1}: Erro de valida\u00e7\u00e3o: o comprimento \u00e9 maior do que o m\u00e1ximo permitido de "{0}"
-javax.faces.validator.LengthValidator.MINIMUM={1}: Erro de valida\u00e7\u00e3o: o comprimento \u00e9 menor do que o m\u00ednimo permitido de "{0}"
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 maior do que o m\u00e1ximo permitido de "{0}"
-javax.faces.validator.LongRangeValidator.MINIMUM={1}: Erro de valida\u00e7\u00e3o: o valor \u00e9 menor do que o m\u00ednimo permitido de "{0}"
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Erro de valida\u00e7\u00e3o: o atributo especificado n\u00e3o est\u00e1 entre os valores esperados de {0} e {1}.
-javax.faces.validator.LongRangeValidator.TYPE={0}: Erro de valida\u00e7\u00e3o: o valor n\u00e3o \u00e9 do tipo correto.
-javax.faces.validator.NOT_IN_RANGE=Erro de valida\u00e7\u00e3o: o atributo especificado n\u00e3o est\u00e1 entre os valores esperados de {0} e {1}.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=O padr\u00e3o Regex deve ser definido.
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=O padr\u00e3o Regex deve ser definido como um valor n\u00e3o vazio.
-javax.faces.validator.RegexValidator.NOT_MATCHED=Padr\u00e3o Regex n\u00e3o corresponde
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=O padr\u00e3o Regex de ''{0}'' n\u00e3o corresponde
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=Erro na express\u00e3o regular.
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=Erro na express\u00e3o regular, ''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_zh_CN.properties b/jsf-api/src/main/java/javax/faces/Messages_zh_CN.properties
deleted file mode 100644
index 1c90b69..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_zh_CN.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}\uff1a\u51fa\u73b0\u8f6c\u6362\u9519\u8bef\u3002
-javax.faces.component.UIInput.REQUIRED={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u5fc5\u987b\u8f93\u5165\u503c\u3002
-javax.faces.component.UIInput.UPDATE={0}\uff1a\u5904\u7406\u63d0\u4ea4\u7684\u4fe1\u606f\u65f6\u51fa\u9519\u3002 
-javax.faces.component.UISelectOne.INVALID={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u65e0\u6548
-javax.faces.component.UISelectMany.INVALID={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u65e0\u6548
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: "{0}" \u5fc5\u987b\u662f\u5e26\u7b26\u53f7\u7684\u5341\u8fdb\u5236\u6570\u503c\u3002
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: "{0}" \u5fc5\u987b\u662f\u7531\u96f6\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u5e26\u7b26\u53f7\u5341\u8fdb\u5236\u6570\u503c\uff0c\u53ef\u4ee5\u540e\u8ddf\u5c0f\u6570\u70b9\u548c\u5c0f\u6570\u90e8\u5206\u3002\u793a\u4f8b: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002\u793a\u4f8b: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: "{0}" \u5fc5\u987b\u662f "true" \u6216 "false"\u3002
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: "{0}" \u5fc5\u987b\u662f "true" \u6216 "false"\u3002\u975e "true" \u503c\u90fd\u5c06\u4f1a\u88ab\u89c6\u4e3a "false"\u3002
-javax.faces.converter.ByteConverter.BYTE={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e 0 \u548c 255 \u4e4b\u95f4\u7684\u6570\u503c\u3002
-javax.faces.converter.ByteConverter.BYTE_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e 0 \u548c 255 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: "{0}" \u5fc5\u987b\u662f\u6709\u6548\u5b57\u7b26\u3002
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: "{0}" \u5fc5\u987b\u662f\u6709\u6548\u7684 ASCII \u5b57\u7b26\u3002
-javax.faces.converter.DateTimeConverter.DATE={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u3002
-javax.faces.converter.DateTimeConverter.DATE_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u3002\u793a\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65f6\u95f4\u3002
-javax.faces.converter.DateTimeConverter.TIME_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65f6\u95f4\u3002\u793a\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u548c\u65f6\u95f4\u3002
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u65e5\u671f\u548c\u65f6\u95f4\u3002\u793a\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}\uff1a\u5fc5\u987b\u6307\u5b9a "pattern" \u6216 "type" \u5c5e\u6027\u624d\u80fd\u8f6c\u6362\u503c "{0}"\u3002
-javax.faces.converter.DoubleConverter.DOUBLE={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e 4.9E-324 \u548c 1.7976931348623157E308 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: "{0}" \u5fc5\u987b\u80fd\u591f\u8f6c\u6362\u4e3a\u679a\u4e3e\u503c\u3002
-javax.faces.converter.EnumConverter.ENUM_detail={2}: "{0}" \u5fc5\u987b\u80fd\u591f\u4ece\u4e00\u4e2a\u542b\u6709\u5e38\u6570 "{1}" \u7684\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u53e6\u4e00\u4e2a\u679a\u4e3e\u503c\u3002
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: "{0}" \u5fc5\u987b\u80fd\u591f\u4ece\u4e00\u4e2a\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u53e6\u4e00\u4e2a\u679a\u4e3e\u503c\uff0c\u4f46\u672a\u63d0\u4f9b\u679a\u4e3e\u7c7b\u3002
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: "{0}" \u5fc5\u987b\u80fd\u591f\u4ece\u679a\u4e3e\u503c\u8f6c\u6362\u4e3a\u679a\u4e3e\u503c\uff0c\u4f46\u672a\u63d0\u4f9b\u679a\u4e3e\u7c7b\u3002
-javax.faces.converter.FloatConverter.FLOAT={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e 1.4E-45 \u548c 3.4028235E38 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -2147483648 \u548c 2147483647 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
-javax.faces.converter.LongConverter.LONG={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
-javax.faces.converter.LongConverter.LONG_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -9223372036854775808 \u548c 9223372036854775807 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u8d27\u5e01\u503c\u3002
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u8d27\u5e01\u503c\u3002\u793a\u4f8b: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u767e\u5206\u6570\u3002
-javax.faces.converter.NumberConverter.PERCENT_detail={2}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u7406\u89e3\u4e3a\u767e\u5206\u6570\u3002\u793a\u4f8b: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: "{0}" \u4e0d\u662f\u6570\u503c\u3002
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: "{0}" \u4e0d\u662f\u6570\u503c\u3002\u793a\u4f8b: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: "{0}" \u4e0d\u662f\u6570\u503c\u6a21\u5f0f\u3002
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: "{0}" \u4e0d\u662f\u6570\u503c\u6a21\u5f0f\u3002\u793a\u4f8b: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: "{0}" \u5fc5\u987b\u662f\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u6784\u6210\u7684\u6570\u503c\u3002
-javax.faces.converter.ShortConverter.SHORT_detail={2}: "{0}" \u5fc5\u987b\u662f\u4ecb\u4e8e -32768 \u548c 32767 \u4e4b\u95f4\u7684\u6570\u503c\u3002\u793a\u4f8b: {1}
-javax.faces.converter.STRING={1}\uff1a\u65e0\u6cd5\u5c06 "{0}" \u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32\u3002
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5927\u4e8e\u5141\u8bb8\u7684\u6700\u5927\u503c "{0}"
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5c0f\u4e8e\u5141\u8bb8\u7684\u6700\u5c0f\u503c "{0}"
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u6307\u5b9a\u7684\u5c5e\u6027\u4e0d\u5728\u9884\u671f\u503c {0} \u548c {1} \u4e4b\u95f4\u3002
-javax.faces.validator.DoubleRangeValidator.TYPE={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u4e0d\u662f\u6b63\u786e\u7684\u7c7b\u578b
-javax.faces.validator.LengthValidator.MAXIMUM={1}\u68c0 \u9a8c \u9519 \u8bef \uff1a \u957f \u5ea6 \u6bd4 \u5141 \u8bb8 \u7684 \u6700 \u591a \u4f1f \u5927 ''{0}''
-javax.faces.validator.LengthValidator.MINIMUM={1}\u68c0 \u9a8c \u9519 \u8bef \uff1a \u957f \u5ea6 \u6bd4 \u5141 \u8bb8 \u7684 \u6700 \u5c0f \u9650 \u5ea6 \u662f \u4e8e ''{0}''
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5927\u4e8e\u5141\u8bb8\u7684\u6700\u5927\u503c "{0}"
-javax.faces.validator.LongRangeValidator.MINIMUM={1}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u5c0f\u4e8e\u5141\u8bb8\u7684\u6700\u5c0f\u503c "{0}"
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u6307\u5b9a\u7684\u5c5e\u6027\u4e0d\u5728\u9884\u671f\u503c {0} \u548c {1} \u4e4b\u95f4\u3002
-javax.faces.validator.LongRangeValidator.TYPE={0}\uff1a\u9a8c\u8bc1\u9519\u8bef\uff1a\u503c\u4e0d\u662f\u6b63\u786e\u7684\u7c7b\u578b\u3002
-javax.faces.validator.NOT_IN_RANGE=\u9a8c\u8bc1\u9519\u8bef\uff1a\u6307\u5b9a\u7684\u5c5e\u6027\u4e0d\u5728\u9884\u671f\u503c {0} \u548c {1} \u4e4b\u95f4\u3002
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=\u5fc5\u987b\u8bbe\u7f6e Regex \u6a21\u5f0f\u3002
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=Regex \u6a21\u5f0f\u5fc5\u987b\u8bbe\u7f6e\u4e3a\u975e\u7a7a\u503c\u3002
-javax.faces.validator.RegexValidator.NOT_MATCHED=Regex \u6a21\u5f0f\u4e0d\u5339\u914d
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail="{0}" \u7684 Regex \u6a21\u5f0f\u4e0d\u5339\u914d
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\u6b63\u5219\u8868\u8fbe\u5f0f\u4e2d\u53d1\u751f\u9519\u8bef\u3002
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\u6b63\u5219\u8868\u8fbe\u5f0f\u4e2d\u53d1\u751f\u9519\u8bef\uff0c"{0}"
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/Messages_zh_TW.properties b/jsf-api/src/main/java/javax/faces/Messages_zh_TW.properties
deleted file mode 100644
index ae89d6a..0000000
--- a/jsf-api/src/main/java/javax/faces/Messages_zh_TW.properties
+++ /dev/null
@@ -1,112 +0,0 @@
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- #
- # Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- #
- # The contents of this file are subject to the terms of either the GNU
- # General Public License Version 2 only ("GPL") or the Common Development
- # and Distribution License("CDDL") (collectively, the "License").  You
- # may not use this file except in compliance with the License. You can obtain
- # a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- # or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- # language governing permissions and limitations under the License.
- #
- # When distributing the software, include this License Header Notice in each
- # file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- # Sun designates this particular file as subject to the "Classpath" exception
- # as provided by Sun in the GPL Version 2 section of the License file that
- # accompanied this code.  If applicable, add the following below the License
- # Header, with the fields enclosed by brackets [] replaced by your own
- # identifying information: "Portions Copyrighted [year]
- # [name of copyright owner]"
- #
- # Contributor(s):
- #
- # If you wish your version of this file to be governed by only the CDDL or
- # only the GPL Version 2, indicate your decision by adding "[Contributor]
- # elects to include this software in this distribution under the [CDDL or GPL
- # Version 2] license."  If you don't indicate a single choice of license, a
- # recipient has the option to distribute your version of this file under
- # either the CDDL, the GPL Version 2 or to extend the choice of license to
- # its licensees as provided above.  However, if you add GPL Version 2 code
- # and therefore, elected the GPL Version 2 license, then the option applies
- # only if the new code is made subject to such option by the copyright
- # holder.
- #
-
-# ==============================================================================
-# Component Errors
-# ==============================================================================
-javax.faces.component.UIInput.CONVERSION={0}\uff1a\u767c\u751f\u8f49\u63db\u932f\u8aa4\u3002
-javax.faces.component.UIInput.REQUIRED={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u5fc5\u9808\u6709\u503c\u3002
-javax.faces.component.UIInput.UPDATE={0}\uff1a\u8655\u7406\u60a8\u9001\u51fa\u7684\u8cc7\u8a0a\u6642\u767c\u751f\u932f\u8aa4\u3002 
-javax.faces.component.UISelectOne.INVALID={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u7121\u6548
-javax.faces.component.UISelectMany.INVALID={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u7121\u6548
-
-# ==============================================================================
-# Converter Errors
-# ==============================================================================
-javax.faces.converter.BigDecimalConverter.DECIMAL={2}: ''{0}'' \u5fc5\u9808\u662f\u5e36\u6b63\u8ca0\u865f\u7684\u5341\u9032\u5236\u6578\u5b57\u3002
-javax.faces.converter.BigDecimalConverter.DECIMAL_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u5e36\u6b63\u8ca0\u865f\u7684\u5341\u9032\u5236\u6578\u5b57\uff0c\u5305\u62ec\u96f6\u4f4d\u6216\u591a\u4f4d\u6578\uff0c\u53ef\u4ee5\u5f8c\u63a5\u5c0f\u6578\u9ede\u548c\u5206\u6578\u3002\u7bc4\u4f8b: {1} 
-javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
-javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002\u7bc4\u4f8b: {1} 
-javax.faces.converter.BooleanConverter.BOOLEAN={1}: ''{0}'' \u5fc5\u9808\u662f\u300ctrue\u300d\u6216\u300cfalse\u300d\u3002
-javax.faces.converter.BooleanConverter.BOOLEAN_detail={1}: ''{0}'' \u5fc5\u9808\u662f\u300ctrue\u300d\u6216\u300cfalse\u300d\u3002\u300ctrue\u300d\u4e4b\u5916\u7684\u4efb\u4f55\u503c\u5747\u6703\u8996\u70ba\u300cfalse\u300d\u3002
-javax.faces.converter.ByteConverter.BYTE={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 0 \u5230 255 \u4e4b\u9593\u7684\u6578\u5b57\u3002
-javax.faces.converter.ByteConverter.BYTE_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 0 \u5230 255 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1} 
-javax.faces.converter.CharacterConverter.CHARACTER={1}: ''{0}'' \u5fc5\u9808\u662f\u6709\u6548\u5b57\u5143\u3002
-javax.faces.converter.CharacterConverter.CHARACTER_detail={1}: ''{0}'' \u5fc5\u9808\u662f\u6709\u6548\u7684 ASCII \u5b57\u5143\u3002
-javax.faces.converter.DateTimeConverter.DATE={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u3002
-javax.faces.converter.DateTimeConverter.DATE_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u3002\u7bc4\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.TIME={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u6642\u9593\u3002
-javax.faces.converter.DateTimeConverter.TIME_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u6642\u9593\u3002\u7bc4\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.DATETIME={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u548c\u6642\u9593\u3002
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u65e5\u671f\u548c\u6642\u9593\u3002\u7bc4\u4f8b: {1} 
-javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}\uff1a\u5fc5\u9808\u6307\u5b9a\u300cpattern\u300d\u6216\u300ctype\u300d\u5c6c\u6027\u624d\u80fd\u8f49\u63db\u503c ''{0}''\u3002
-javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
-javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 4.9E-324 \u5230 1.7976931348623157E308 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1} 
-javax.faces.converter.EnumConverter.ENUM={2}: ''{0}'' \u5fc5\u9808\u53ef\u8f49\u63db\u70ba enum\u3002
-javax.faces.converter.EnumConverter.ENUM_detail={2}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e\u5305\u542b\u5e38\u6578\u300c{1}\u300d\u7684 enum \u8f49\u63db\u70ba enum\u3002
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS={1}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e enum \u8f49\u63db\u70ba enum\uff0c\u4f46\u662f\u672a\u63d0\u4f9b enum \u985e\u5225\u3002
-javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail={1}: ''{0}'' \u5fc5\u9808\u53ef\u5f9e enum \u8f49\u63db\u70ba enum\uff0c\u4f46\u662f\u672a\u63d0\u4f9b enum \u985e\u5225\u3002
-javax.faces.converter.FloatConverter.FLOAT={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
-javax.faces.converter.FloatConverter.FLOAT_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc 1.4E-45 \u5230 3.4028235E38 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.IntegerConverter.INTEGER={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
-javax.faces.converter.IntegerConverter.INTEGER_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -2147483648 \u5230 2147483647 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.LongConverter.LONG={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
-javax.faces.converter.LongConverter.LONG_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -9223372036854775808 \u5230 9223372036854775807 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.NumberConverter.CURRENCY={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u8ca8\u5e63\u503c\u3002
-javax.faces.converter.NumberConverter.CURRENCY_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u8ca8\u5e63\u503c\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.NumberConverter.PERCENT={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u767e\u5206\u6bd4\u3002
-javax.faces.converter.NumberConverter.PERCENT_detail={2}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u89e3\u8b80\u70ba\u767e\u5206\u6bd4\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.NumberConverter.NUMBER={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u3002
-javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.NumberConverter.PATTERN={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u6a23\u5f0f\u3002
-javax.faces.converter.NumberConverter.PATTERN_detail={2}: ''{0}'' \u4e0d\u662f\u6578\u5b57\u6a23\u5f0f\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.ShortConverter.SHORT={2}: ''{0}'' \u5fc5\u9808\u662f\u4e00\u4f4d\u6216\u591a\u4f4d\u6578\u3002
-javax.faces.converter.ShortConverter.SHORT_detail={2}: ''{0}'' \u5fc5\u9808\u662f\u4ecb\u65bc -32768 \u5230 32767 \u4e4b\u9593\u7684\u6578\u5b57\u3002\u7bc4\u4f8b: {1}
-javax.faces.converter.STRING={1}\uff1a\u7121\u6cd5\u5c07 ''{0}'' \u8f49\u63db\u70ba\u5b57\u4e32\u3002
-
-
-# ==============================================================================
-# Validator Errors
-# ==============================================================================
-javax.faces.validator.DoubleRangeValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
-javax.faces.validator.DoubleRangeValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
-javax.faces.validator.DoubleRangeValidator.TYPE={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u4e0d\u5c6c\u65bc\u6b63\u78ba\u7684\u985e\u578b
-javax.faces.validator.LengthValidator.MAXIMUM={1}\u6aa2 \u9a57 \u932f \u8aa4 \uff1a \u9577 \u5ea6 \u6bd4 \u5141 \u8a31 \u7684 \u6700 \u591a \u5049 \u5927 ''{0}''
-javax.faces.validator.LengthValidator.MINIMUM={1}\u6aa2 \u9a57 \u932f \u8aa4 \uff1a \u9577 \u5ea6 \u6bd4 \u5141 \u8a31 \u7684 \u6700 \u5c0f \u9650 \u5ea6 \u662f \u4e8 ''{0}''
-javax.faces.validator.LongRangeValidator.MAXIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5927\u65bc\u5141\u8a31\u7684\u6700\u5927\u503c ''{0}''
-javax.faces.validator.LongRangeValidator.MINIMUM={1}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u5c0f\u65bc\u5141\u8a31\u7684\u6700\u5c0f\u503c ''{0}''
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
-javax.faces.validator.LongRangeValidator.TYPE={0}\uff1a\u9a57\u8b49\u932f\u8aa4\uff1a\u503c\u4e0d\u5c6c\u65bc\u6b63\u78ba\u7684\u985e\u578b\u3002
-javax.faces.validator.NOT_IN_RANGE=\u9a57\u8b49\u932f\u8aa4\uff1a\u6307\u5b9a\u7684\u5c6c\u6027\u4e0d\u5728\u9810\u671f\u503c {0} \u548c {1} \u4e4b\u9593\u3002
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET=\u5fc5\u9808\u8a2d\u5b9a\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f\u3002
-javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail=\u5fc5\u9808\u5c07\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f\u8a2d\u70ba\u975e\u7a7a\u767d\u503c\u3002
-javax.faces.validator.RegexValidator.NOT_MATCHED=\u4e0d\u7b26\u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f
-javax.faces.validator.RegexValidator.NOT_MATCHED_detail=\u4e0d\u7b26 ''{0}'' \u5e38\u898f\u8868\u793a\u5f0f\u6a21\u5f0f
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION=\u5e38\u898f\u8868\u793a\u5f0f\u767c\u751f\u932f\u8aa4\u3002
-javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail=\u5e38\u898f\u8868\u793a\u5f0f\u767c\u751f\u932f\u8aa4\uff0c''{0}''
-javax.faces.validator.BeanValidator.MESSAGE={0}
-
-
diff --git a/jsf-api/src/main/java/javax/faces/application/Application.java b/jsf-api/src/main/java/javax/faces/application/Application.java
deleted file mode 100644
index 3145a74..0000000
--- a/jsf-api/src/main/java/javax/faces/application/Application.java
+++ /dev/null
@@ -1,1885 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.Map;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-
-import javax.el.ELContextListener;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.validator.Validator;
-import javax.faces.view.ViewDeclarationLanguage;
-
-
-/**
- * <p><strong class="changed_modified_2_0">Application</strong>
- * represents a per-web-application singleton object where applications
- * based on JavaServer Faces (or implementations wishing to provide
- * extended functionality) can register application-wide singletons that
- * provide functionality required by JavaServer Faces.  Default
- * implementations of each object are provided for cases where the
- * application does not choose to customize the behavior.</p>
- *
- * <p>The instance of {@link Application} is created by calling the
- * <code>getApplication()</code> method of {@link ApplicationFactory}.
- * Because this instance is shared, it must be implemented in a
- * thread-safe manner.</p>
- *
- * <p>The application also acts as a factory for several types of
- * Objects specified in the Faces Configuration file.  Please see {@link
- * Application#createComponent}, {@link Application#createConverter},
- * and {@link Application#createValidator}. </p>
- */
-
-public abstract class Application {
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    private Application defaultApplication;
-
-    // ------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the default {@link ActionListener} to be registered for
-     * all {@link javax.faces.component.ActionSource} components in this
-     * appication.  If not explicitly set, a default implementation must
-     * be provided that performs the
-     *
-     * following functions:</p>
-     * <ul>
-     * <li>The <code>processAction()</code> method must first call
-     *     <code>FacesContext.renderResponse()</code> in order to bypass
-     *     any intervening lifecycle phases, once the method returns.</li>
-     * <li>The <code>processAction()</code> method must next determine
-     *     the logical outcome of this event, as follows:
-     *     <ul>
-     *     <li>If the originating component has a non-<code>null</code>
-     *     <code>action</code> property, retrieve the {@link
-     *     MethodBinding} from the property, and call
-     *     <code>invoke()</code> on it.  Convert the returned value (if
-     *     any) to a String, and use it as the logical outcome.</li>
-
-     *     <li>Otherwise, the logical outcome is <code>null</code>.</li>
-     *     </ul></li>
-
-     * <li>The <code>processAction()</code> method must finally retrieve
-     *     the <code>NavigationHandler</code> instance for this
-     *     application and call {@link
-     *     NavigationHandler#handleNavigation} passing: 
-     *
-     *     <ul>
-
-     *     <li>the {@link FacesContext} for the current request</li>
-
-     *     <li>If there is a <code>MethodBinding</code> instance for the
-     *     <code>action</code> property of this component, the result of
-     *     calling {@link MethodBinding#getExpressionString} on it, null
-     *     otherwise</li>
-     *
-     *     <li>the logical outcome as determined above</li>
-     *
-     *     </ul>
-     *
-     *     </li>
-     * </ul>
-     *
-     * <p>Note that the specification for the default
-     * <code>ActionListener</code> contiues to call for the use of a
-     * <strong>deprecated</strong> property (<code>action</code>) and
-     * class (<code>MethodBinding</code>).  Unfortunately, this is
-     * necessary because the default <code>ActionListener</code> must
-     * continue to work with components that do not implement {@link
-     * javax.faces.component.ActionSource2}, and only implement {@link
-     * javax.faces.component.ActionSource}.</p>
-     */
-    public abstract ActionListener getActionListener();
-
-
-    /**
-     * <p>Set the default {@link ActionListener} to be registered for all
-     * {@link javax.faces.component.ActionSource} components.</p>
-     * </p>
-     *
-     * @param listener The new default {@link ActionListener}
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public abstract void setActionListener(ActionListener listener);
-
-    /**
-     * <p>Return the default <code>Locale</code> for this application.  If
-     * not explicitly set, <code>null</code> is returned.</p>
-     */ 
-    public abstract Locale getDefaultLocale();
-
-
-    /**
-     * <p>Set the default <code>Locale</code> for this application.</p>
-     *
-     * @param locale The new default <code>Locale</code>
-     *
-     * @throws NullPointerException if <code>locale</code>
-     *  is <code>null</code>
-     */
-    public abstract void setDefaultLocale(Locale locale);
-
-
-    /**
-     * <p>Return the <code>renderKitId</code> to be used for rendering
-     * this application.  If not explicitly set, <code>null</code> is
-     * returned.</p>
-     */
-    public abstract String getDefaultRenderKitId();
-
-
-    /**
-     * <p>Set the <code>renderKitId</code> to be used to render this
-     * application.  Unless the client has provided a custom {@link ViewHandler}
-     * that supports the use of multiple {@link javax.faces.render.RenderKit}
-     * instances in the same application, this method must only be called at
-     * application startup, before any Faces requests have been processed.
-     * This is a limitation of the current Specification, and may be lifted in
-     * a future release.</p>
-     */
-    public abstract void setDefaultRenderKitId(String renderKitId);
-
-
-
-    /**
-     * <p>Return the fully qualified class name of the
-     * <code>ResourceBundle</code> to be used for JavaServer Faces messages
-     * for this application.  If not explicitly set, <code>null</code>
-     * is returned.</p>
-     */
-    public abstract String getMessageBundle();
-
-
-    /**
-     * <p>Set the fully qualified class name of the <code>ResourceBundle</code>
-     * to be used for JavaServer Faces messages for this application.  See the
-     * JavaDocs for the <code>java.util.ResourceBundle</code> class for more
-     * information about the syntax for resource bundle names.</p>
-     *
-     * @param bundle Base name of the resource bundle to be used
-     *
-     * @throws NullPointerException if <code>bundle</code>
-     *  is <code>null</code>
-     */
-    public abstract void setMessageBundle(String bundle);
-
-
-    /**
-     * <p>Return the {@link NavigationHandler} instance that will be passed
-     * the outcome returned by any invoked application action for this
-     * web application.  If not explicitly set, a default implementation
-     * must be provided that performs the functions described in the
-     * {@link NavigationHandler} class description.</p>
-     */
-    public abstract NavigationHandler getNavigationHandler();
-
-
-    /**
-     * <p>Set the {@link NavigationHandler} instance that will be passed
-     * the outcome returned by any invoked application action for this
-     * web application.</p>
-     *
-     * @param handler The new {@link NavigationHandler} instance
-     *
-     * @throws NullPointerException if <code>handler</code>
-     *  is <code>null</code>
-     */
-    public abstract void setNavigationHandler(NavigationHandler handler);
-
-    /**
-     * <p class="changed_added_2_0">Return the singleton, stateless, thread-safe {@link
-     * ResourceHandler} for this application.  The JSF implementation
-     * must support the following techniques for declaring an alternate
-     * implementation of <code>ResourceHandler</code>.</p>
-     * <div class="changed_added_2_0">
-     * <ul>
-     *    <li><p>The <code>ResourceHandler</code> implementation is
-     *    declared in the application configuration resources by giving
-     *    the fully qualified class name as the value of the
-     *    <code><resource-handler></code> element within the
-     *    <code><application></code> element.  </p></li>
-     * </ul>
-     * <p>In all of the above cases, the runtime must employ the
-     * decorator pattern as for every other pluggable artifact in
-     * JSF.</p>
-
-     * <p class="changed_added_2_0">A default implementation is provided
-     * that throws <code>UnsupportedOperationException</code> so that
-     * users that decorate <code>Application</code> can continue to
-     * function</p>.
-
-
-     * </div>
-     * @since 2.0
-     */
-    public ResourceHandler getResourceHandler() {
-
-        if (defaultApplication != null) {
-            return defaultApplication.getResourceHandler();
-        }
-
-        throw new UnsupportedOperationException();
-        
-    }
-
-    /**
-     * <p class="changed_added_2_0">Set the {@link ResourceHandler} instance that will be utilized
-     * for rendering the markup for resources, and for satisfying client
-     * requests to serve up resources.</p>
-     * <div class="changed_added_2_0">
-     *
-     * @param resourceHandler The new <code>ResourceHandler</code> instance
-     *
-     * @throws IllegalStateException if this method is called after
-     * at least one request has been processed by the
-     * <code>Lifecycle</code> instance for this application.
-     * @throws NullPointerException if <code>resourceHandler</code>
-     *  is <code>null</code>
-     * </div>
-     * @since 2.0
-     */
-    public void setResourceHandler(ResourceHandler resourceHandler) {
-
-        if (defaultApplication != null) {
-            defaultApplication.setResourceHandler(resourceHandler);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-        
-    }
-    
-
-    /**
-     * <p>Return a {@link PropertyResolver} instance that wraps the
-     * {@link ELResolver} instance that Faces provides to the unified EL
-     * for the resolution of expressions that appear programmatically in
-     * an application.</p>
-     *
-     * <p>Note that this no longer returns the default
-     * <code>PropertyResolver</code> since that class is now a no-op
-     * that aids in allowing custom <code>PropertyResolver</code>s to
-     * affect the EL resolution process.</p>
-     *
-     * @deprecated This has been replaced by {@link #getELResolver}.  
-     */
-    public abstract PropertyResolver getPropertyResolver();
-
-
-    /**
-     * <p>Set the {@link PropertyResolver} instance that will be utilized
-     * to resolve method and value bindings.</p>
-     *
-     * <p>This method is now deprecated but the implementation must
-     * cause the argument to be set as the head of the legacy
-     * <code>PropertyResolver</code> chain, replacing any existing value
-     * that was set from the application configuration resources.</p>
-     *
-     *  <p>It is illegal to call this method after
-     * the application has received any requests from the client.  If an
-     * attempt is made to register a listener after that time it must have
-     * no effect. </p>
-     *
-     * @param resolver The new {@link PropertyResolver} instance
-     *
-     * @throws NullPointerException if <code>resolver</code>
-     *  is <code>null</code>
-     *
-     * @deprecated The recommended way to affect the execution of the EL
-     * is to provide an <code><el-resolver></code> element at the
-     * right place in the application configuration resources which will
-     * be considered in the normal course of expression evaluation.
-     * This method now will cause the argument <code>resolver</code> to
-     * be wrapped inside an implementation of {@link ELResolver} and
-     * exposed to the EL resolution system as if the user had called
-     * {@link #addELResolver}.
-     *
-     * @throws IllegalStateException if called after the first
-     * request to the {@link javax.faces.webapp.FacesServlet} has been
-     * serviced.
-     */
-    public abstract void setPropertyResolver(PropertyResolver resolver);
-    
-    /**
-     * <p>Find a <code>ResourceBundle</code> as defined in the
-     * application configuration resources under the specified name.  If
-     * a <code>ResourceBundle</code> was defined for the name, return an
-     * instance that uses the locale of the current {@link
-     * javax.faces.component.UIViewRoot}.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @return <code>ResourceBundle</code> for the current UIViewRoot,
-     * otherwise null
-     *
-     * @throws FacesException if a bundle was defined, but not resolvable
-     *
-     * @throws NullPointerException if ctx == null || name == null
-     *
-     * @since 1.2
-     */
-    
-    public ResourceBundle getResourceBundle(FacesContext ctx, String name) {
-
-        if (defaultApplication != null) {
-            return defaultApplication.getResourceBundle(ctx, name);
-        }
-        
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the project stage
-     * for the currently running application instance.  The default
-     * value is {@link ProjectStage#Production}</p> 
-
-     * <div class="changed_added_2_0"> <p>The implementation of this
-     * method must perform the following algorithm or an equivalent with
-     * the same end result to determine the value to return.</p> <ul>
-     *
-     * <p>If the value has already been determined by a previous call to
-     * this method, simply return that value.</p>
-
-     * <p>Look for a <code>JNDI</code> environment entry under the key
-     * given by the value of {@link
-     * ProjectStage#PROJECT_STAGE_JNDI_NAME} (return type of
-     * <code>java.lang.String</code>).  If found, continue with the
-     * algorithm below, otherwise, look for an entry in the
-     * <code>initParamMap</code> of the <code>ExternalContext</code>
-     * from the current <code>FacesContext</code> with the key given by
-     * the value of {@link ProjectStage#PROJECT_STAGE_PARAM_NAME}
-
-     * </p>
-     *
-     * <p>If a value is found, see if an enum constant can be
-     * obtained by calling <code>ProjectStage.valueOf()</code>, passing
-     * the value from the <code>initParamMap</code>.  If this succeeds
-     * without exception, save the value and return it.</p>
-     *
-     * <p>If not found, or any of the previous attempts to discover the
-     * enum constant value have failed, log a descriptive error message,
-     * assign the value as <code>ProjectStage.Production</code> and
-     * return it.</p>
-     *
-     * </ul>
-
-     * <p class="changed_added_2_0">A default implementation is provided
-     * that throws <code>UnsupportedOperationException</code> so that
-     * users that decorate <code>Application</code> can continue to
-     * function</p>.
-
-     * </div>
-     *
-     * @since 2.0
-     */
-    public ProjectStage getProjectStage() {
-        
-        if (defaultApplication != null) {
-            return defaultApplication.getProjectStage();
-        }
-        
-        return ProjectStage.Production;
-    }
-
-
-    /**
-     * <p>Return the {@link VariableResolver} that wraps the {@link
-     * ELResolver} instance that Faces provides to the unified EL for
-     * the resolution of expressions that appear programmatically in an
-     * application.  The implementation of the
-     * <code>VariableResolver</code>must pass <code>null</code> as the
-     * base argument for any methods invoked on the underlying
-     * <code>ELResolver</code>.</p>
-     *
-     * <p>Note that this method no longer returns the default
-     * <code>VariableResolver</code>, since that class now is a no-op
-     * that aids in allowing custom <code>VariableResolver</code>s to
-     * affect the EL resolution process.</p>
-     *
-     * @deprecated This has been replaced by {@link #getELResolver}.  
-     */
-    public abstract VariableResolver getVariableResolver();
-
-
-    /**
-     * <p>Set the {@link VariableResolver} instance that will be consulted
-     * to resolve method and value bindings.</p>
-     *
-     * <p>This method is now deprecated but the implementation must
-     * cause the argument to be set as the head of the legacy
-     * <code>VariableResolver</code> chain, replacing any existing value
-     * that was set from the application configuration resources.</p>
-     *
-     *  <p>It is illegal to call this method after
-     * the application has received any requests from the client.  If an
-     * attempt is made to register a listener after that time it must have 
-     * no effect.</p>
-     *
-     * @param resolver The new {@link VariableResolver} instance
-     *
-     * @throws NullPointerException if <code>resolver</code>
-     *  is <code>null</code>
-     *
-     * @deprecated The recommended way to affect the execution of the EL
-     * is to provide an <code><el-resolver></code> element at the
-     *
-     * right place in the application configuration resources which will
-     * be considered in the normal course of expression evaluation.
-     * This method now will cause the argument <code>resolver</code> to
-     * be wrapped inside an implementation of {@link ELResolver} and
-     * exposed to the EL resolution system as if the user had called
-     * {@link #addELResolver}.
-     *
-     * @throws IllegalStateException if called after the first
-     * request to the {@link javax.faces.webapp.FacesServlet} has been
-     * serviced.
-     */
-    public abstract void setVariableResolver(VariableResolver resolver);
-
-    /**
-     * <p>Cause an the argument <code>resolver</code> to be added to the
-     * resolver chain as specified in section JSF.5.5.1 of the JavaServer
-     * Faces Specification.</p>
-     *
-     * <p>It is not possible to remove an <code>ELResolver</code>
-     * registered with this method, once it has been registered.</p>
-     *
-     *  <p>It is illegal to register an <code>ELResolver</code> after
-     * the application has received any requests from the client.  If an
-     * attempt is made to register a listener after that time, an
-     * <code>IllegalStateException</code> must be thrown. This restriction is
-     * in place to allow the JSP container to optimize for the common
-     * case where no additional <code>ELResolver</code>s are in the
-     * chain, aside from the standard ones. It is permissible to add
-     * <code>ELResolver</code>s before or after initialization to a
-     * <code>CompositeELResolver</code> that is already in the
-     * chain.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * {@link Application}.</p>
-
-     * @throws IllegalStateException if called after the first
-     * request to the {@link javax.faces.webapp.FacesServlet} has been
-     * serviced.
-
-     * @since 1.2
-     */
-
-    public void addELResolver(ELResolver resolver) {
-
-        if (defaultApplication != null) {
-            defaultApplication.addELResolver(resolver);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    /**
-     * <p>Return the singleton {@link ELResolver} instance to be used
-     * for all EL resolution.  This is actually an instance of {@link
-     * javax.el.CompositeELResolver} that must contain the following
-     * <code>ELResolver</code> instances in the following order:</p>
-     *
-     * 	<ol>
-     *
-     *	  <li><p><code>ELResolver</code> instances declared using the
-     *	  <el-resolver> element in the application configuration
-     *	  resources.  </p></li>
-     *
-     *	  <li><p>An <code>implementation</code> that wraps the head of
-     *	  the legacy <code>VariableResolver</code> chain, as per section
-     *	  <i>VariableResolver ChainWrapper</i> in Chapter JSF.5 in the spec
-     *	  document.</p></li>
-     *
-     *	  <li><p>An <code>implementation</code> that wraps the head of
-     *	  the legacy <code>PropertyResolver</code> chain, as per section
-     *	  <i>PropertyResolver ChainWrapper</i> in Chapter JSF.5 in the spec
-     *	  document.</p></li>
-     *
-     *	  <li><p>Any <code>ELResolver</code> instances added by calls to
-     *	  {@link #addELResolver}.</p></li>
-     *
-     *	</ol>
-     *
-     * <p>The default implementation throws <code>UnsupportedOperationException</code>
-     * and is provided for the sole purpose of not breaking existing applications 
-     * that extend {@link Application}.</p>
-     *
-     * @since 1.2
-     */
-
-    public ELResolver getELResolver() {
-
-        if (defaultApplication != null) {
-            return defaultApplication.getELResolver();
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p>Return the {@link ViewHandler} instance that will be utilized
-     * during the <em>Restore View</em> and <em>Render Response</em>
-     * phases of the request processing lifecycle.  If not explicitly set,
-     * a default implementation must be provided that performs the functions
-     * described in the {@link ViewHandler} description in the
-     * JavaServer Faces Specification.</p>
-     */
-    public abstract ViewHandler getViewHandler();
-
-
-    /**
-     * <p>Set the {@link ViewHandler} instance that will be utilized
-     * during the <em>Restore View</em> and <em>Render Response</em>
-     * phases of the request processing lifecycle.</p>
-     *
-     * @param handler The new {@link ViewHandler} instance
-     *
-     * @throws IllegalStateException if this method is called after
-     * at least one request has been processed by the
-     * <code>Lifecycle</code> instance for this application.
-     * @throws NullPointerException if <code>handler</code>
-     *  is <code>null</code>
-     */
-    public abstract void setViewHandler(ViewHandler handler);
-
-
-
-    /**
-     * <p>Return the {@link StateManager} instance that will be utilized
-     * during the <em>Restore View</em> and <em>Render Response</em>
-     * phases of the request processing lifecycle.  If not explicitly set,
-     * a default implementation must be provided that performs the functions
-     * described in the {@link StateManager} description
-     * in the JavaServer Faces Specification.</p>
-     */
-    public abstract StateManager getStateManager();
-
-
-    /**
-     * <p>Set the {@link StateManager} instance that will be utilized
-     * during the <em>Restore View</em> and <em>Render Response</em>
-     * phases of the request processing lifecycle.</p>
-     *
-     * @param manager The new {@link StateManager} instance
-     *
-     * @throws IllegalStateException if this method is called after
-     * at least one request has been processed by the
-     * <code>Lifecycle</code> instance for this application.
-     * @throws NullPointerException if <code>manager</code>
-     *  is <code>null</code>
-     */
-    public abstract void setStateManager(StateManager manager);
-
-
-    // ------------------------------------------------------- Object Factories
-
-    /**
-     * <p><span class="changed_added_2_0">Register</span> a new mapping 
-     * of behavior id to the name of the corresponding
-     * {@link Behavior} class.  This allows subsequent calls
-     * to <code>createBehavior()</code> to serve as a factory for
-     * {@link Behavior} instances.</p>
-     *                                 
-     * @param behaviorId The behavior id to be registered
-     * @param behaviorClass The fully qualified class name of the
-     *  corresponding {@link Behavior} implementation
-     *                                                
-     * @throws NullPointerException if <code>behaviorId</code>
-     *  or <code>behaviorClass</code> is <code>null</code>
-     *  
-     * @since 2.0
-     */
-    public void addBehavior(String behaviorId, 
-        String behaviorClass) {
-
-        if (defaultApplication != null) {
-            defaultApplication.addBehavior(behaviorId, behaviorClass);
-        }
-
-    }
-    
-    /**
-     * <p><span class="changed_added_2_0">Instantiate</span> and
-     * return a new {@link Behavior} instance of the class specified by
-     * a previous call to <code>addBehavior()</code> for the specified
-     * behavior id.</p> 
-     *
-     * @param behaviorId The behavior id for which to create and
-     *  return a new {@link Behavior} instance
-     * 
-     * @throws FacesException if the {@link Behavior} cannot be
-     *  created
-     * @throws NullPointerException if <code>behaviorId</code>
-     *  is <code>null</code> 
-     */
-    public Behavior createBehavior(String behaviorId)
-    	throws FacesException {
-
-        if (defaultApplication != null) {
-            return defaultApplication.createBehavior(behaviorId);
-        }
-        return null;
-
-    }
-
-    /**
-     * <p>Return an <code>Iterator</code> over the set of currently registered
-     * behavior ids for this <code>Application</code>.</p>
-     */
-    public Iterator<String> getBehaviorIds() {
-
-        if (defaultApplication != null) {
-            return defaultApplication.getBehaviorIds();
-        }
-        return Collections.EMPTY_LIST.iterator();
-        
-    }
-
-    /**
-     * <p>Register a new mapping of component type to the name of the
-     * corresponding {@link UIComponent} class.  This allows subsequent calls
-     * to <code>createComponent()</code> to serve as a factory for
-     * {@link UIComponent} instances.</p>
-     *
-     * @param componentType The component type to be registered
-     * @param componentClass The fully qualified class name of the
-     *  corresponding {@link UIComponent} implementation
-     *
-     * @throws NullPointerException if <code>componentType</code> or
-     *  <code>componentClass</code> is <code>null</code>
-     */
-    public abstract void addComponent(String componentType,
-                                      String componentClass);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Instantiate</span> and
-     * return a new {@link UIComponent} instance of the class specified
-     * by a previous call to <code>addComponent()</code> for the
-     * specified component type.</p>
-     *
-     * <p class="changed_added_2_0">Before the component instance is
-     * returned, it must be inspected for the presence of a {@link
-     * javax.faces.event.ListenerFor} (or {@link
-     * javax.faces.event.ListenersFor}) or {@link ResourceDependency}
-     * (or {@link ResourceDependencies}) annotation.  If any of these
-     * annotations are present, the action listed in {@link
-     * javax.faces.event.ListenerFor} or {@link ResourceDependency} must
-     * be taken on the component, before it is returned from this
-     * method.  This variant of <code>createComponent</code> must
-     * <strong>not</strong> inspect the {@link
-     * javax.faces.render.Renderer} for the component to be returned for
-     * any of the afore mentioned annotations.  Such inspection is the
-     * province of {@link #createComponent(ValueExpression,
-     * FacesContext, String, String)} or {@link
-     * #createComponent(FacesContext, String, String)}.</p>
-
-     * @param componentType The component type for which to create and
-     * return a new {@link UIComponent} instance
-     *
-     * @throws FacesException if a {@link UIComponent} of the
-     *  specified type cannot be created
-     * @throws NullPointerException if <code>componentType</code>
-     *  is <code>null</code>
-     */ 
-    public abstract UIComponent createComponent(String componentType)
-        throws FacesException;
-
-
-
-    
-
-    /**
-     * <p>Wrap the argument <code>componentBinding</code> in an
-     * implementation of {@link ValueExpression} and call through to
-     * {@link
-     * #createComponent(javax.el.ValueExpression,javax.faces.context.FacesContext,java.lang.String)}.</p>
-     *
-     * @param componentBinding {@link ValueBinding} representing a
-     * component value binding expression (typically specified by the
-     * <code>component</code> attribute of a custom tag)
-     * @param context {@link FacesContext} for the current request
-     * @param componentType Component type to create if the {@link ValueBinding}
-     *  does not return a component instance
-     *
-     * @throws FacesException if a {@link UIComponent} cannot be created
-     * @throws NullPointerException if any parameter is <code>null</code>
-     *
-     *
-     * @deprecated This has been replaced by {@link
-     * #createComponent(javax.el.ValueExpression,javax.faces.context.FacesContext,java.lang.String)}.
-     */
-    public abstract UIComponent createComponent(ValueBinding componentBinding,
-                                                FacesContext context,
-                                                String componentType)
-	throws FacesException;
-
-    /**
-     * <p><span class="changed_modified_2_0">Call</span> the
-     * <code>getValue()</code> method on the specified {@link
-     * ValueExpression}.  If it returns a {@link UIComponent} instance,
-     * return it as the value of this method.  If it does not,
-     * instantiate a new {@link UIComponent} instance of the specified
-     * component type, pass the new component to the
-     * <code>setValue()</code> method of the specified {@link
-     * ValueExpression}, and return it.</p>
-     *
-     * <p class="changed_added_2_0">Before the component instance is
-     * returned, it must be inspected for the presence of a {@link
-     * javax.faces.event.ListenerFor} (or {@link
-     * javax.faces.event.ListenersFor}) or {@link ResourceDependency}
-     * (or {@link ResourceDependencies}) annotation.  If any of these
-     * annotations are present, the action listed in {@link
-     * javax.faces.event.ListenerFor} or {@link ResourceDependency} must
-     * be taken on the component, before it is returned from this
-     * method.  This variant of <code>createComponent</code> must
-     * <strong>not</strong> inspect the {@link
-     * javax.faces.render.Renderer} for the component to be returned for
-     * any of the afore mentioned annotations.  Such inspection is the
-     * province of {@link #createComponent(ValueExpression,
-     * FacesContext, String, String)} or {@link
-     * #createComponent(FacesContext, String, String)}.</p>
-     *
-     * @param componentExpression {@link ValueExpression} representing a
-     * component value expression (typically specified by the
-     * <code>component</code> attribute of a custom tag)
-     * @param context {@link FacesContext} for the current request
-     * @param componentType Component type to create if the {@link
-     * ValueExpression} does not return a component instance
-     * 
-     * @throws FacesException if a {@link UIComponent} cannot be created
-     * @throws NullPointerException if any parameter is <code>null</code>
-     *
-     * <p>A default implementation is provided that throws 
-     * <code>UnsupportedOperationException</code> so that users
-     * that decorate <code>Application</code> can continue to function.</p>
-     * 
-     * @since 1.2
-     */
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext context,
-                                       String componentType)
-    throws FacesException {
-
-        if (defaultApplication != null) {
-            return defaultApplication.createComponent(componentExpression,
-                                                      context,
-                                                      componentType);
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Like {@link
-     * #createComponent(ValueExpression, FacesContext, String)} except
-     * the <code>Renderer</code> for the component to be returned must
-     * be inspected for the annotations mentioned in {@link
-     * #createComponent(ValueExpression, FacesContext, String)} as
-     * specified in the documentation for that method.  The
-     * <code>Renderer</code> instance to inspect must be obtained by
-     * calling {@link FacesContext#getRenderKit} and calling {@link
-     * javax.faces.render.RenderKit#getRenderer} on the result, passing
-     * the argument <code>componentType</code> as the first argument and
-     * the result of calling {@link UIComponent#getFamily} on the newly
-     * created component as the second argument.  If no such
-     * <code>Renderer</code> can be found, a message must be logged with
-     * a helpful error message.  Otherwise, {@link
-     * UIComponent#setRendererType} must be called on the newly created
-     * <code>UIComponent</code> instance, passing the argument
-     * <code>rendererType</code> as the argument.</p>
-
-     * <p class="changed_added_2_0">A default implementation is provided
-     * that throws <code>UnsupportedOperationException</code> so that
-     * users that decorate <code>Application</code> can continue to
-     * function.</p>
-
-     *
-     * @param componentExpression {@link ValueExpression} representing a
-     * component value expression (typically specified by the
-     * <code>component</code> attribute of a custom tag)
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @param componentType Component type to create if the {@link
-     * ValueExpression} does not return a component instance
-     *
-     * @param rendererType The renderer-type of the
-     * <code>Renderer</code> that will render this component.  A
-     * <code>null</code> value must be accepted for this parameter.
-     *
-     * @throws FacesException if a {@link UIComponent} cannot be created
-     * @throws NullPointerException if any of the parameters
-     * <code>componentExpression</code>, <code>context</code>, or
-     * <code>componentType</code> are <code>null</code>
-     *
-     * @since 2.0
-     */
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext context,
-                                       String componentType,
-                                       String rendererType) {
-
-        if (defaultApplication != null) {
-            return defaultApplication.createComponent(componentExpression,
-                                                      context,
-                                                      componentType,
-                                                      rendererType);
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Like {@link
-     * #createComponent(String)} except the <code>Renderer</code> for
-     * the component to be returned must be inspected for the
-     * annotations mentioned in {@link #createComponent(ValueExpression,
-     * FacesContext, String)} as specified in the documentation for that
-     * method.  The <code>Renderer</code> instance to inspect must be
-     * obtained by calling {@link FacesContext#getRenderKit} and calling
-     * {@link javax.faces.render.RenderKit#getRenderer} on the result,
-     * passing the argument <code>componentType</code> as the first
-     * argument and the result of calling {@link UIComponent#getFamily}
-     * on the newly created component as the second argument.  If no
-     * such <code>Renderer</code> can be found, a message must be logged
-     * with a helpful error message.  Otherwise, {@link
-     * UIComponent#setRendererType} must be called on the newly created
-     * <code>UIComponent</code> instance, passing the argument
-     * <code>rendererType</code> as the argument.</p>
-
-     * <p class="changed_added_2_0">A default implementation is provided
-     * that throws <code>UnsupportedOperationException</code> so that
-     * users that decorate <code>Application</code> can continue to
-     * function</p>.
-
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @param componentType Component type to create
-     *
-     * @param rendererType The renderer-type of the
-     * <code>Renderer</code> that will render this component.  A
-     * <code>null</code> value must be accepted for this parameter.
-     *
-     * @throws FacesException if a {@link UIComponent} cannot be created
-     *
-     * @throws NullPointerException if any of the parameters
-     * <code>context</code>, or <code>componentType</code> are
-     * <code>null</code>
-     *
-     * @since 2.0
-     */
-    public UIComponent createComponent(FacesContext context,
-                                       String componentType,
-                                       String rendererType) {
-
-        if (defaultApplication != null) {
-            return defaultApplication.createComponent(context,
-                                               componentType,
-                                               rendererType);
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Instantiate and return a new {@link
-     * UIComponent} instance from the argument {@link Resource}.  An
-     * algorithm semantically equivalent to the following must be
-     * followed to instantiate the <code>UIComponent</code> to
-     * return.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * 	<ul>
-
-	  <li><p>Obtain a reference to the {@link
-	  ViewDeclarationLanguage} for this <code>Application</code>
-	  instance by calling {@link ViewHandler#getViewDeclarationLanguage},
-     *    passing the <code>viewId</code> found by calling 
-     *    {@link javax.faces.component.UIViewRoot#getViewId} on the 
-     *    {@link javax.faces.component.UIViewRoot} in the argument 
-     *    {@link FacesContext}.</p></li>
-
-
-	  <li><p>Obtain a reference to the <em>composite component
-	  metadata</em> for this composite component by calling {@link
-	  ViewDeclarationLanguage#getComponentMetadata}, passing the
-	  <code>facesContext</code> and <code>componentResource</code>
-	  arguments to this method.  This version of JSF specification
-	  uses JavaBeans as the API to the component metadata.</p></li>
-
-	  <li><p>Determine if the component author declared a
-	  <code>componentType</code> for this component instance by
-	  obtaining the <code>BeanDescriptor</code> from the component
-	  metadata and calling its <code>getValue()</code> method,
-	  passing {@link UIComponent#COMPOSITE_COMPONENT_TYPE_KEY} as
-	  the argument.  If non-<code>null</code>, the result must be a
-	  <code>ValueExpression</code> whose value is the
-	  <code>component-type</code> of the <code>UIComponent</code> to
-	  be created for this <code>Resource</code> component.  Call
-	  through to {@link #createComponent(java.lang.String)} to
-	  create the component.</p></li>
-
-	  <li><p>Otherwise, determine if a script based component for
-	  this <code>Resource</code> can be found by calling {@link
-	  ViewDeclarationLanguage#getScriptComponentResource}.  If the
-	  result is non-<code>null</code>, and is a script written in
-	  one of the languages listed in JSF.4.3 of the specification prose
-	  document, create a <code>UIComponent</code> instance from the
-	  script resource.</p></li>
-
-	  <li><p>Otherwise, let <em>library-name</em> be the return from
-	  calling {@link Resource#getLibraryName} on the argument
-	  <code>componentResource</code> and <em>resource-name</em> be
-	  the return from calling {@link Resource#getResourceName} on
-	  the argument <code>componentResource</code>.  Create a fully
-	  qualified Java class name by removing any file extension from
-	  <em>resource-name</em> and let <em>fqcn</em> be
-	  <code><em>library-name</em> + "." +
-	  <em>resource-name</em></code>. If a class with the name of
-	  <em>fqcn</em> cannot be found, take no action and continue to
-	  the next step.  If any of <code>InstantiationException</code>,
-	  <code>IllegalAccessException</code>, or
-	  <code>ClassCastException</code> are thrown, wrap the exception
-	  in a <code>FacesException</code> and re-throw it.  If any
-	  other exception is thrown, log the exception and
-	  continue to the next step.</p></li>
-
-	  <li><p>If none of the previous steps have yielded a
-	  <code>UIComponent</code> instance, call {@link
-	  #createComponent(java.lang.String)} passing
-	  "<code>javax.faces.NamingContainer</code>" as the
-	  argument.</p></li>
-
-	  <li><p>Call {@link UIComponent#setRendererType} on the
-	  <code>UIComponent</code> instance, passing
-	  "<code>javax.faces.Composite</code>" as the argument.</p></li>
-
-	  <li>
-
-          <p>Store the argument <code>Resource</code> in the
-	  attributes <code>Map</code> of the <code>UIComponent</code>
-	  under the key, {@link Resource#COMPONENT_RESOURCE_KEY}.
-	  </p>
-
-          </li>
-
-	  <li>
-
-          <p>Store <em>composite component metadata</em> in the
-	  attributes <code>Map</code> of the <code>UIComponent</code>
-	  under the key, {@link UIComponent#BEANINFO_KEY}.
-	  </p>
-
-          </li>
-
-	</ul>
-
-     * <p>Before the component instance is returned, it must be
-     * inspected for the presence of a {@link
-     * javax.faces.event.ListenerFor} annotation.  If this annotation is
-     * present, the action listed in {@link
-     * javax.faces.event.ListenerFor} must be taken on the component,
-     * before it is returned from this method.</p>
-
-     * <p>A default implementation is provided that throws
-     * <code>UnsupportedOperationException</code> so that users
-     * that decorate <code>Application</code> can continue to function.</p>
-     *
-     * </div>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param componentResource A {@link Resource} that points to a
-     * source file that provides an implementation of a component.
-     *
-     * @throws FacesException if a {@link UIComponent} from the {@link
-     * Resource} cannot be created
-
-     * @throws <code>NullPointerException</code> if any parameter is
-     * <code>null</code>
-     * 
-     * @throws NullPointerException if unable, for any reason, to obtain a 
-     * <code>ViewDeclarationLanguage</code> instance as described above.
-     *
-     * @since 2.0
-     */
-    public UIComponent createComponent(FacesContext context,
-                                       Resource componentResource) {
-
-        if (defaultApplication != null) {
-            return defaultApplication.createComponent(context,
-                                                      componentResource);
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the set of currently defined
-     * component types for this <code>Application</code>.</p>
-     */
-    public abstract Iterator<String> getComponentTypes();
-
-    /**
-     * <p>Register a new mapping of converter id to the name of the
-     * corresponding {@link Converter} class.  This allows subsequent calls
-     * to <code>createConverter()</code> to serve as a factory for
-     * {@link Converter} instances.</p>
-     *
-     * @param converterId The converter id to be registered
-     * @param converterClass The fully qualified class name of the
-     *  corresponding {@link Converter} implementation
-     *
-     * @throws NullPointerException if <code>converterId</code>
-     *  or <code>converterClass</code> is <code>null</code>
-     */
-    public abstract void addConverter(String converterId, 
-				      String converterClass);
-
-
-    /**
-     * <p>Register a new converter class that is capable of performing
-     * conversions for the specified target class.</p>
-     *
-     * @param targetClass The class for which this converter is registered
-     * @param converterClass The fully qualified class name of the
-     *  corresponding {@link Converter} implementation
-     *
-     * @throws NullPointerException if <code>targetClass</code>
-     *  or <code>converterClass</code> is <code>null</code>
-     */
-    public abstract void addConverter(Class<?> targetClass,
-                                      String converterClass);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Instantiate</span> and
-     * return a new {@link Converter} instance of the class specified by
-     * a previous call to <code>addConverter()</code> for the specified
-     * converter id.</p>
-     *
-     * <p class="changed_added_2_0">If the <code>toLowerCase()</code> of
-     * the <code>String</code> represenation of the value of the
-     * "<code>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</code>"
-     * application configuration parameter is "<code>true</code>"
-     * (without the quotes) and the <code>Converter</code> instance to
-     * be returned is an instance of {@link
-     * javax.faces.convert.DateTimeConverter}, {@link
-     * javax.faces.convert.DateTimeConverter#setTimeZone} must be
-     * called, passing the return from
-     * <code>TimeZone.getDefault()</code>.</p>
-
-     * <p class="changed_added_2_0">The argument
-     * <code>converter</code> must be inspected for the presence of the
-     * {@link javax.faces.application.ResourceDependency} annotation.
-     * If the <code>ResourceDependency</code> annotation is present,
-     * the action described in <code>ResourceDependency</code> must
-     * be taken.  If the <code>ResourceDependency</code> annotation is
-     * not present, the argument <code>converter</code> must be inspected 
-     * for the presence of the {@link 
-     * javax.faces.application.ResourceDependencies} annotation.
-     * If the <code>ResourceDependencies</code> annotation
-     * is present, the action described in <code>ResourceDependencies</code>
-     * must be taken.</p>
-     *
-     * @param converterId The converter id for which to create and
-     *  return a new {@link Converter} instance
-     *
-     * @throws FacesException if the {@link Converter} cannot be
-     *  created
-     * @throws NullPointerException if <code>converterId</code>
-     *  is <code>null</code>
-     */ 
-    public abstract Converter createConverter(String converterId);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Instantiate</span> and return
-     * a new {@link Converter} instance of the class that has registered
-     * itself as capable of performing conversions for objects of the
-     * specified type.  If no such {@link Converter} class can be
-     * identified, return <code>null</code>.</p>
-     *
-     * <p>To locate an appropriate {@link Converter} class, the following
-     * algorithm is performed, stopping as soon as an appropriate {@link
-     * Converter} class is found:</p>
-     * <ul>
-     * <li>Locate a {@link Converter} registered for the target class itself.
-     *     </li>
-     * <li>Locate a {@link Converter} registered for interfaces that are
-     *     implemented by the target class (directly or indirectly).</li>
-     * <li>Locate a {@link Converter} registered for the superclass (if any)
-     *     of the target class, recursively working up the inheritance
-     *     hierarchy.</li>
-     * </ul>
-     *
-     * <p>If the <code>Converter</code> has a single argument constructor that
-     * accepts a <code>Class</code>, instantiate the <code>Converter</code>
-     * using that constructor, passing the argument <code>targetClass</code> as
-     * the sole argument.  Otherwise, simply use the zero-argument constructor.
-     * </p>
-     *
-     * <p class="changed_added_2_0">If the <code>toLowerCase()</code> of
-     * the <code>String</code> represenation of the value of the
-     * "<code>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</code>"
-     * application configuration parameter is "<code>true</code>"
-     * (without the quotes) and the <code>Converter</code> instance to
-     * be returned is an instance of {@link
-     * javax.faces.convert.DateTimeConverter}, {@link
-     * javax.faces.convert.DateTimeConverter#setTimeZone} must be
-     * called, passing the return from
-     * <code>TimeZone.getDefault()</code>.</p>
-     *
-     * @param targetClass Target class for which to return a {@link Converter}
-     *
-     * @throws FacesException if the {@link Converter} cannot be
-     *  created
-     * @throws NullPointerException if <code>targetClass</code>
-     *  is <code>null</code>
-     */
-    public abstract Converter createConverter(Class<?> targetClass);
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the set of currently registered
-     * converter ids for this <code>Application</code>.</p>
-     */
-    public abstract Iterator<String> getConverterIds();
-
-    
-    /**
-     * <p>Return an <code>Iterator</code> over the set of <code>Class</code>
-     * instances for which {@link Converter} classes have been explicitly
-     * registered.</p>
-     */
-    public abstract Iterator<Class<?>> getConverterTypes();
-
-    
-    /**
-     * <p class="changed_added_2_0">Register a validator by its id that
-     * is applied to all <code>UIInput</code> components in a view.  The
-     * validator to most often serve this role is the
-     * <code>BeanValidator</code>.  The usage contract for this method
-     * assumes that the validator has been registered using the normal
-     * “by-id” registration mechanism.</p>
-     *
-     * <p>An implementation is provided that takes no action
-     * so that users that decorate
-     * the <code>Application</code> continue to work.
-     *
-     * @since 2.0
-     */
-    public void addDefaultValidatorId(String validatorId) {
-
-        if (defaultApplication != null) {
-            defaultApplication.addDefaultValidatorId(validatorId);
-        } 
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return an immutable <code>Map</code> over 
-     * the set of currently registered default validator IDs and their class
-     * name for this <code>Application</code>.</p>
-     *
-     * <p>An implementation is provided that returns <code>Collections.emptyMap</code>
-     * so that users that decorate
-     * the <code>Application</code> continue to work.
-     *
-     * @since 2.0
-     */
-    public Map<String,String> getDefaultValidatorInfo() {
-
-        if (defaultApplication != null) {
-            return defaultApplication.getDefaultValidatorInfo();
-        }
-        return Collections.emptyMap();
-
-    }
-
-
-    /**
-     * <p>Return the {@link ExpressionFactory} instance for this
-     * application.  This instance is used by the convenience method
-     * {@link #evaluateExpressionGet}.</p>
-     *
-     * <p>The implementation must return the
-     * <code>ExpressionFactory</code> from the JSP container by calling
-     * <code>JspFactory.getDefaultFactory().getJspApplicationContext(servletContext).getExpressionFactory()</code>. </p>
-     *
-     * <p>An implementation is provided that throws 
-     * <code>UnsupportedOperationException</code> so that users that decorate
-     * the <code>Application</code> continue to work.
-     *
-     * @since 1.2
-     */
-
-    public ExpressionFactory getExpressionFactory() {
-
-        if (defaultApplication != null) {
-            return defaultApplication.getExpressionFactory();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * <p>Get a value by evaluating an expression.</p>
-     *
-     * <p>Call {@link #getExpressionFactory} then call {@link
-     * ExpressionFactory#createValueExpression} passing the argument
-     * <code>expression</code> and <code>expectedType</code>.  Call
-     * {@link FacesContext#getELContext} and pass it to {@link
-     * ValueExpression#getValue}, returning the result.</p>
-     *
-     * <p>An implementation is provided that throws 
-     * <code>UnsupportedOperationException</code> so that users that decorate
-     * the <code>Application</code> continue to work.
-     *
-     */
-
-    public <T> T evaluateExpressionGet(FacesContext context,
-                                       String expression,
-                                       Class<? extends T> expectedType) throws ELException {
-
-        if (defaultApplication != null) {
-            return defaultApplication.evaluateExpressionGet(context,
-                                                            expression,
-                                                            expectedType);
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * <p>Call {@link #getExpressionFactory} then call {@link
-     * ExpressionFactory#createMethodExpression}, passing the given
-     * arguments, and wrap the result in a <code>MethodBinding</code>
-     * implementation, returning it.</p>
-     *
-     * @param ref Method binding expression for which to return a
-     *  {@link MethodBinding} instance
-     * @param params Parameter signatures that must be compatible with those
-     *  of the method to be invoked, or a zero-length array or <code>null</code>
-     *  for a method that takes no parameters
-     *
-     * @throws NullPointerException if <code>ref</code>
-     *  is <code>null</code>
-     * @throws ReferenceSyntaxException if the specified <code>ref</code>
-     *  has invalid syntax
-     *
-     * @deprecated This has been replaced by calling {@link
-     * #getExpressionFactory} then {@link
-     * ExpressionFactory#createMethodExpression}.
-     */
-    public abstract MethodBinding createMethodBinding(String ref,
-                                                      Class<?> params[])
-        throws ReferenceSyntaxException;
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the supported
-     * <code>Locale</code>s for this appication.</p>
-     */ 
-    public abstract Iterator<Locale> getSupportedLocales();
-
-
-    /**
-     * <p>Set the <code>Locale</code> instances representing the supported
-     * <code>Locale</code>s for this application.</p>
-     *
-     * @param locales The set of supported <code>Locale</code>s
-     *  for this application
-     *
-     * @throws NullPointerException if the argument
-     * <code>newLocales</code> is <code>null</code>.
-     *
-     */ 
-    public abstract void setSupportedLocales(Collection<Locale> locales);
-
-    /**
-     * <p>Provide a way for Faces applications to register an
-     * <code>ELContextListener</code> that will be notified on creation
-     * of <code>ELContext</code> instances.  This listener will be
-     * called once per request.</p>
-     * 
-     * <p>An implementation is provided that throws 
-     * <code>UnsupportedOperationException</code> so that users that decorate
-     * the <code>Application</code> continue to work.
-     *
-     * @since 1.2
-     */
-
-    public void addELContextListener(ELContextListener listener) {
-
-        if (defaultApplication != null) {
-            defaultApplication.addELContextListener(listener);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    /**
-     * <p>Remove the argument <code>listener</code> from the list of
-     * {@link ELContextListener}s.  If <code>listener</code> is null, no
-     * exception is thrown and no action is performed.  If
-     * <code>listener</code> is not in the list, no exception is thrown
-     * and no action is performed.</p>
-     *
-     * <p>An implementation is provided that throws 
-     * <code>UnsupportedOperationException</code> so that users that decorate
-     * the <code>Application</code> continue to work.
-     * 
-     * @since 1.2
-     */
-
-    public void removeELContextListener(ELContextListener listener) {
-
-        if (defaultApplication != null) {
-            defaultApplication.removeELContextListener(listener);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    /**
-     * <p>If no calls have been made to {@link #addELContextListener},
-     * this method must return an empty array.</p>
-     *
-     * <p>Otherwise, return an array representing the list of listeners
-     * added by calls to {@link #addELContextListener}.</p>
-     *
-     * <p>An implementation is provided that throws 
-     * <code>UnsupportedOperationException</code> so that users that decorate
-     * the <code>Application</code> continue to work.
-     *
-     * @since 1.2
-     */
-
-    public ELContextListener [] getELContextListeners() {
-
-        if (defaultApplication != null) {
-            return defaultApplication.getELContextListeners();
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p>Register a new mapping of validator id to the name of the
-     * corresponding {@link Validator} class.  This allows subsequent calls
-     * to <code>createValidator()</code> to serve as a factory for
-     * {@link Validator} instances.</p>
-     *
-     * @param validatorId The validator id to be registered
-     * @param validatorClass The fully qualified class name of the
-     *  corresponding {@link Validator} implementation
-     *
-     * @throws NullPointerException if <code>validatorId</code>
-     *  or <code>validatorClass</code> is <code>null</code>
-     */
-    public abstract void addValidator(String validatorId, 
-				      String validatorClass);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Instantiate</span> and
-     * return a new {@link Validator} instance of the class specified by
-     * a previous call to <code>addValidator()</code> for the specified
-     * validator id.</p>
-
-     * <p class="changed_added_2_0">The argument
-     * <code>validator</code> must be inspected for the presence of the
-     * {@link javax.faces.application.ResourceDependency} annotation.
-     * If the <code>ResourceDependency</code> annotation is present,
-     * the action described in <code>ResourceDependency</code> must
-     * be taken.  If the <code>ResourceDependency</code> annotation is
-     * not present, the argument <code>validator</code> must be inspected 
-     * for the presence of the {@link 
-     * javax.faces.application.ResourceDependencies} annotation.
-     * If the <code>ResourceDependencies</code> annotation
-     * is present, the action described in <code>ResourceDependencies</code>
-     * must be taken.</p>
-
-     * @param validatorId The validator id for which to create and
-     *  return a new {@link Validator} instance
-     *
-     * @throws FacesException if a {@link Validator} of the
-     *  specified id cannot be created
-     * @throws NullPointerException if <code>validatorId</code>
-     *  is <code>null</code>
-     */ 
-    public abstract Validator createValidator(String validatorId)
-        throws FacesException;
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the set of currently registered
-     * validator ids for this <code>Application</code>.</p>
-     */
-    public abstract Iterator<String> getValidatorIds();
-
-
-    /**
-     * <p>Call {@link #getExpressionFactory} then call {@link
-     * ExpressionFactory#createValueExpression}, passing the argument
-     * <code>ref</code>, <code>Object.class</code> for the expectedType,
-     * and <code>null</code>, for the fnMapper.</p>
-     *
-     *
-     * @param ref Value binding expression for which to return a
-     *  {@link ValueBinding} instance
-     *
-     * @throws NullPointerException if <code>ref</code>
-     *  is <code>null</code>
-     * @throws ReferenceSyntaxException if the specified <code>ref</code>
-     *  has invalid syntax
-     *
-     * @deprecated This has been replaced by calling {@link
-     * #getExpressionFactory} then {@link
-     * ExpressionFactory#createValueExpression}.
-     */
-    public abstract ValueBinding createValueBinding(String ref)
-        throws ReferenceSyntaxException;
-
-
-    /**
-     * <p class="changed_added_2_0">If {@link javax.faces.context.FacesContext#isProcessingEvents()} is
-     * <code>true</code> and there are one or more listeners
-     * for events of the type represented by
-     * <code>systemEventClass</code>, call those listeners, passing
-     * <code>source</code> as the source of the event.  The
-     * implementation should be as fast as possible in determining
-     * whether or not a listener for the given
-     * <code>systemEventClass</code> and <code>source</code> has been
-     * installed, and should return immediately once such a
-     * determination has been made.  The implementation of
-     * <code>publishEvent</code> must honor the requirements stated in
-     * {@link #subscribeToEvent} regarding the storage and retrieval of
-     * listener instances.  Specifically, if {@link
-     * #subscribeToEvent(Class,Class,SystemEventListener)} was called,
-     * the <code>sourceClass</code> argument must match exactly the
-     * <code>Class</code> of the <code>source</code> argument in the
-     * call to <code>publishEvent()</code>.  The implementation must not
-     * do any inheritance hierarachy inspection when looking for a match
-     * between the <code>sourceClass</code> passed to {@link
-     * #subscribeToEvent(Class,Class,SystemEventListener)} and the
-     * <code>sourceClass</code> passed to <code>publishEvent()</code> in
-     * order to find any listeners to which the event should be
-     * published.  In the case where the <code>Class</code> of the
-     * <code>source</code> argument does not match the
-     * <code>Class</code> of the <code>sourceClass</code> used when the
-     * listener was subscribed using <code>subscribeToEvent()</code>,
-     * {@link #publishEvent(FacesContext,Class,Class,Object)} can be used to
-     * provide the <code>Class</code> used to perform the listener lookup and
-     * match.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p>The default implementation must implement an algorithm
-     * semantically equivalent to the following to locate listener
-     * instances and to invoke them.</p>
-     *
-     * 	<ul>
-     *
-     * <li><p>If the <code>source</code> argument implements {@link
-     * javax.faces.event.SystemEventListenerHolder}, call {@link
-     * javax.faces.event.SystemEventListenerHolder#getListenersForEventClass}
-     * on it, passing the <code>systemEventClass</code> argument.  If
-     * the list is not empty, perform algorithm
-     * <em>traverseListenerList</em> on the list.</p></li>
-
-     * <li><p>If any <em>view</em> level listeners have been installed
-     * by previous calls to {@link #subscribeToEvent(Class, Class,
-     * javax.faces.event.SystemEventListener)} on the {@link
-     * javax.faces.component.UIViewRoot}, perform algorithm
-     * <em>traverseListenerList</em> on the list of listeners for that
-     * event installed on the <code>UIViewRoot</code>.</p></li>
-
-     * <li><p>If any <code>Application</code> level listeners have
-     * been installed by previous calls to {@link
-     * #subscribeToEvent(Class, Class,
-     *     javax.faces.event.SystemEventListener)}, perform algorithm
-     * <em>traverseListenerList</em> on the list.</p></li>
-     *
-     * <li><p>If any <code>Application</code> level listeners have
-     * been installed by previous calls to {@link
-     * #subscribeToEvent(Class, javax.faces.event.SystemEventListener)},
-     * perform algorithm <em>traverseListenerList</em> on the
-     * list.</p></li>
-     *
-     * </ul>
-     *
-     * <p>If the act of invoking the <code>processListener</code> method
-     * causes an {@link javax.faces.event.AbortProcessingException} to
-     * be thrown, processing of the listeners must be aborted, no
-     * further processing of the listeners for this event must take
-     * place, and the exception must be logged with
-     * <code>Level.SEVERE</code>.</p>
-     *
-     * <p>Algorithm <em>traverseListenerList</em>: For each listener in
-     * the list,</p>
-     *
-     * <ul>
-     *
-     * <li><p>Call {@link
-     * javax.faces.event.SystemEventListener#isListenerForSource}, passing the
-     * <code>source</code> argument.  If this returns
-     * <code>false</code>, take no action on the listener.</p></li>
-     *
-     * <li><p>Otherwise, if the event to be passed to the listener
-     * instances has not yet been constructed, construct the event,
-     * passing <code>source</code> as the argument to the
-     * one-argument constructor that takes an <code>Object</code>.
-     * This same event instance must be passed to all listener
-     * instances.</p></li>
-     *
-     * <li><p>Call {@link javax.faces.event.SystemEvent#isAppropriateListener},
-     * passing the listener instance as the argument.  If this
-     * returns <code>false</code>, take no action on the
-     * listener.</p></li>
-     *
-     * <li><p>Call {@link javax.faces.event.SystemEvent#processListener},
-     * passing the listener instance.  </p></li>
-     *
-     * </ul>
-
-     * <p class="changed_added_2_0">A default implementation is provided
-     * that throws <code>UnsupportedOperationException</code> so that
-     * users that decorate <code>Application</code> can continue to
-     * function</p>.
-
-     * </div>
-     *
-     * @param context the <code>FacesContext</code> for the current request
-     * @param systemEventClass The <code>Class</code> of event that is
-     * being published.
-     * @param source The source for the event of type
-     * <code>systemEventClass</code>.
-     *
-     * @throws NullPointerException if either <code>context</code>,
-     * <code>systemEventClass</code> or <code>source</code> is <code>null</code>
-     *
-     * @since 2.0
-     *
-     */
-    public void publishEvent(FacesContext context,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Object source) {
-
-        if (defaultApplication != null) {
-            defaultApplication.publishEvent(context, systemEventClass, source);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">This method functions exactly like
-     * {@link #publishEvent(FacesContext,Class,Object)}, except the run-time
-     * must use the argument <code>sourceBaseType</code> to find the matching
-     * listener instead of using the <code>Class</code> of the
-     * <code>source</code> argument.</p>
-     *
-     * <p class="changed_added_2_0">A default implementation is provided
-     * that throws <code>UnsupportedOperationException</code> so that
-     * users that decorate <code>Application</code> can continue to
-     * function</p>.
-     *
-     * @param context the <code>FacesContext</code> for the current request
-     * @param systemEventClass The <code>Class</code> of event that is
-     * being published.
-     * @param sourceBaseType The <code>Class</code> of the source event
-     * that must be used to lookup the listener to which this event must
-     * be published.  If this argument is <code>null</code> the return
-     * from <code>source.getClass()</code> must be used as the
-     * <code>sourceBaseType</code>.
-     * @param source The source for the event of type
-     * <code>systemEventClass</code>.
-     *
-     * @throws NullPointerException if any arguments except for
-     * <code>sourceBaseType</code> are <code>null</code>
-     *
-     * @since 2.0
-     */
-
-
-    public void publishEvent(FacesContext context,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Class<?> sourceBaseType,
-                             Object source) {
-
-        if (defaultApplication != null) {
-            defaultApplication.publishEvent(context,
-                                            systemEventClass,
-                                            sourceBaseType,
-                                            source);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-
-    /**
-     * <p class="changed_added_2_0">Install the listener instance
-     * referenced by argument <code>listener</code> into the
-     * application as a listener for events of type
-     * <code>systemEventClass</code> that originate from objects of type
-     * <code>sourceClass</code>.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p>If argument <code>sourceClass</code> is non-<code>null</code>,
-     * <code>sourceClass</code> and <code>systemEventClass</code> must be
-     * used to store the argument <code>listener</code> in the application in
-     * such a way that the <code>listener</code> can be quickly looked
-     * up by the implementation of {@link #publishEvent} given
-     * <code>systemEventClass</code> and an instance of the
-     * <code>Class</code> referenced by <code>sourceClass</code>.  If
-     * argument <code>sourceClass</code> is <code>null</code>, the
-     * <code>listener</code> must be discoverable by the implementation
-     * of {@link #publishEvent} given only <code>systemEventClass</code>.
-     * </p>
-     *
-     * </div>
-     *
-     * @param systemEventClass the <code>Class</code> of event for which
-     * <code>listener</code> must be fired.
-     *
-     * @param sourceClass the <code>Class</code> of the instance which
-     * causes events of type <code>systemEventClass</code> to be fired.
-     * May be <code>null</code>.
-     *
-     * @param listener the implementation of {@link
-     * javax.faces.event.SystemEventListener} whose {@link
-     * javax.faces.event.SystemEventListener#processEvent} method must be called when
-     * events of type <code>systemEventClass</code> are fired.
-     *
-     * @throws <code>NullPointerException</code> if any combination of
-     * <code>systemEventClass</code>, or <code>listener</code> are
-     * <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 Class<?> sourceClass,
-                                 SystemEventListener listener) {
-
-        if (defaultApplication != null) {
-            defaultApplication.subscribeToEvent(systemEventClass,
-                                                sourceClass,
-                                                listener);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Install the listener instance
-     * referenced by argument <code>listener</code> into application as
-     * a listener for events of type <code>systemEventClass</code>.  The
-     * default implementation simply calls through to {@link
-     * #subscribeToEvent(Class, Class,
-     * javax.faces.event.SystemEventListener)} passing <code>null</code>
-     * as the <code>sourceClass</code> argument</p>
-     *
-     * <p class="changed_added_2_0">A default implementation is provided
-     * that throws <code>UnsupportedOperationException</code> so that
-     * users that decorate <code>Application</code> can continue to
-     * function</p>.
-
-     * @param systemEventClass the <code>Class</code> of event for which
-     * <code>listener</code> must be fired.</p>
-
-     * @param listener the implementation of {@link
-     * javax.faces.event.SystemEventListener} whose {@link
-     * javax.faces.event.SystemEventListener#processEvent} method must
-     * be called when events of type <code>systemEventClass</code> are
-     * fired.
-
-     * @throws <code>NullPointerException</code> if any combination of
-     * <code>systemEventClass</code>, or <code>listener</code> are
-     * <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 SystemEventListener listener) {
-
-        if (defaultApplication != null) {
-            defaultApplication.subscribeToEvent(systemEventClass, listener);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Remove the listener instance
-     * referenced by argument <code>listener</code> from the application
-     * as a listener for events of type
-     * <code>systemEventClass</code> that originate from objects of type
-     * <code>sourceClass</code>.  See {@link
-     * #subscribeToEvent(Class, Class,
-     * javax.faces.event.SystemEventListener)} for the specification
-     * of how the listener is stored, and therefore, how it must be
-     * removed.</p>
-     *
-     * @param systemEventClass the <code>Class</code> of event for which
-     * <code>listener</code> must be fired.
-     *
-     * @param sourceClass the <code>Class</code> of the instance which
-     * causes events of type <code>systemEventClass</code> to be fired.
-     * May be <code>null</code>.
-     *
-     * @param listener the implementation of {@link
-     * javax.faces.event.SystemEventListener} to remove from the internal data
-     * structure.
-     *
-     * @throws <code>NullPointerException</code> if any combination of
-     * <code>context</code>,
-     * <code>systemEventClass</code>, or <code>listener</code> are
-     * <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     Class<?> sourceClass,
-                                     SystemEventListener listener) {
-
-        if (defaultApplication != null) {
-            defaultApplication.unsubscribeFromEvent(systemEventClass,
-                                                    sourceClass,
-                                                    listener);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Remove the listener instance
-     * referenced by argument <code>listener</code> from the application
-     * as a listener for events of type <code>systemEventClass</code>.  The
-     * default implementation simply calls through to {@link #unsubscribeFromEvent(Class, javax.faces.event.SystemEventListener)}
-     * passing <code>null</code> as the <code>sourceClass</code> argument</p>
-     *
-     * @param systemEventClass the <code>Class</code> of event for which
-     * <code>listener</code> must be fired.
-     *
-     * @param listener the implementation of {@link
-     * javax.faces.event.SystemEventListener} to remove from the internal data
-     * structure.
-     *
-     * @throws <code>NullPointerException</code> if any combination of
-     * <code>context</code>, <code>systemEventClass</code>, or
-     * <code>listener</code> are
-     * <code>null</code>.                http://java.sun.com/javaee/javaserverfaces/reference/api/index.html
-     *
-     * @since 2.0
-     */
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     SystemEventListener listener) {
-
-        if (defaultApplication != null) {
-            defaultApplication.unsubscribeFromEvent(systemEventClass, listener);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ApplicationFactory.java b/jsf-api/src/main/java/javax/faces/application/ApplicationFactory.java
deleted file mode 100644
index aa70fa0..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ApplicationFactory.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import javax.faces.FacesWrapper;
-
-
-/**
- * <p><strong class="changed_modified_2_0">ApplicationFactory</strong> is a 
- * factory object that creates
- * (if needed) and returns {@link Application} instances.  Implementations of
- * JavaServer Faces must provide at least a default implementation of
- * {@link Application}.</p>
- *
- * <p>There must be one {@link ApplicationFactory} instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- * <pre>
- *   ApplicationFactory factory = (ApplicationFactory)
- *    FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
- * </pre>
- */
-
-public abstract class ApplicationFactory implements FacesWrapper<ApplicationFactory> {
-
-
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-    public ApplicationFactory getWrapped() {
-        return null;
-    }
-    
-    /**
-     * <p>Create (if needed) and return an {@link Application} instance
-     * for this web application.</p>
-     */
-    public abstract Application getApplication();
-
-
-    /**
-     * <p>Replace the {@link Application} instance that will be
-     * returned for this web application.</p>
-     *
-     * @throws NullPointerException if <code>application</code>
-     *  is <code>null</code>.
-
-     * @param application The replacement {@link Application} instance
-     */
-    public abstract void setApplication(Application application);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ApplicationWrapper.java b/jsf-api/src/main/java/javax/faces/application/ApplicationWrapper.java
deleted file mode 100644
index d727f15..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ApplicationWrapper.java
+++ /dev/null
@@ -1,730 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import javax.el.ELContextListener;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.FacesWrapper;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.validator.Validator;
-
-
-/**
- * <p class="changed_added_2_0">Provides a simple implementation of
- * {@link Application} that can be subclassed by developers wishing
- * to provide specialized behavior to an existing {@link
- * Application} instance.  The default implementation of all methods
- * is to call through to the wrapped {@link Application}.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance we are wrapping.</p>
- *
- * </div>
- *
- * @since 2.0
- */
-public abstract class ApplicationWrapper extends Application implements FacesWrapper<Application> {
-
-    public abstract Application getWrapped();
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getActionListener} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ActionListener getActionListener() {
-        return getWrapped().getActionListener();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setActionListener(javax.faces.event.ActionListener)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setActionListener(ActionListener listener) {
-        getWrapped().setActionListener(listener);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getDefaultLocale} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Locale getDefaultLocale() {
-        return getWrapped().getDefaultLocale();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setDefaultLocale(java.util.Locale)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setDefaultLocale(Locale locale) {
-        getWrapped().setDefaultLocale(locale);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getDefaultRenderKitId} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public String getDefaultRenderKitId() {
-        return getWrapped().getDefaultRenderKitId();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addDefaultValidatorId(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addDefaultValidatorId(String validatorId) {
-        getWrapped().addDefaultValidatorId(validatorId);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getDefaultValidatorInfo} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Map<String, String> getDefaultValidatorInfo() {
-        return getWrapped().getDefaultValidatorInfo();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setDefaultRenderKitId(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setDefaultRenderKitId(String renderKitId) {
-        getWrapped().setDefaultRenderKitId(renderKitId);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getMessageBundle} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public String getMessageBundle() {
-        return getWrapped().getMessageBundle();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setMessageBundle(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setMessageBundle(String bundle) {
-        getWrapped().setMessageBundle(bundle);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getNavigationHandler} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public NavigationHandler getNavigationHandler() {
-        return getWrapped().getNavigationHandler();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setNavigationHandler(NavigationHandler)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setNavigationHandler(NavigationHandler handler) {
-        getWrapped().setNavigationHandler(handler);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getPropertyResolver} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public PropertyResolver getPropertyResolver() {
-        return getWrapped().getPropertyResolver();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setPropertyResolver(javax.faces.el.PropertyResolver)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setPropertyResolver(PropertyResolver resolver) {
-        getWrapped().setPropertyResolver(resolver);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getVariableResolver} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public VariableResolver getVariableResolver() {
-        return getWrapped().getVariableResolver();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setVariableResolver(javax.faces.el.VariableResolver)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setVariableResolver(VariableResolver resolver) {
-        getWrapped().setVariableResolver(resolver);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getViewHandler} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ViewHandler getViewHandler() {
-        return getWrapped().getViewHandler();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setViewHandler(ViewHandler)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setViewHandler(ViewHandler handler) {
-        getWrapped().setViewHandler(handler);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getStateManager} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public StateManager getStateManager() {
-        return getWrapped().getStateManager();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setStateManager(StateManager)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setStateManager(StateManager manager) {
-        getWrapped().setStateManager(manager);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addComponent(String, String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addComponent(String componentType, String componentClass) {
-        getWrapped().addComponent(componentType, componentClass);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createComponent(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public UIComponent createComponent(String componentType)
-          throws FacesException {
-        return getWrapped().createComponent(componentType);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createComponent(javax.faces.el.ValueBinding, javax.faces.context.FacesContext, String)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public UIComponent createComponent(ValueBinding componentBinding,
-                                       FacesContext context,
-                                       String componentType)
-          throws FacesException {
-        return getWrapped().createComponent(componentBinding,
-                                            context,
-                                            componentType);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getComponentTypes} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Iterator<String> getComponentTypes() {
-        return getWrapped().getComponentTypes();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addConverter(String, String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addConverter(String converterId, String converterClass) {
-        getWrapped().addConverter(converterId, converterClass);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addConverter(Class, String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addConverter(Class<?> targetClass, String converterClass) {
-        getWrapped().addConverter(targetClass, converterClass);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createConverter(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Converter createConverter(String converterId) {
-        return getWrapped().createConverter(converterId);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createConverter(Class)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Converter createConverter(Class<?> targetClass) {
-        return getWrapped().createConverter(targetClass);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getConverterIds} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Iterator<String> getConverterIds() {
-        return getWrapped().getConverterIds();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getConverterTypes} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Iterator<Class<?>> getConverterTypes() {
-        return getWrapped().getConverterTypes();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createMethodBinding(String, Class[])} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public MethodBinding createMethodBinding(String ref, Class<?>[] params)
-          throws ReferenceSyntaxException {
-        return getWrapped().createMethodBinding(ref, params);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getSupportedLocales} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Iterator<Locale> getSupportedLocales() {
-        return getWrapped().getSupportedLocales();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setSupportedLocales(java.util.Collection)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setSupportedLocales(Collection<Locale> locales) {
-        getWrapped().setSupportedLocales(locales);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addBehavior(String, String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addBehavior(String behaviorId, String behaviorClass) {
-        getWrapped().addBehavior(behaviorId, behaviorClass);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createBehavior(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Behavior createBehavior(String behaviorId) throws FacesException {
-        return getWrapped().createBehavior(behaviorId);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getBehaviorIds} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Iterator<String> getBehaviorIds() {
-        return getWrapped().getBehaviorIds();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addValidator(String, String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addValidator(String validatorId, String validatorClass) {
-        getWrapped().addValidator(validatorId, validatorClass);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createValidator(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Validator createValidator(String validatorId) throws FacesException {
-        return getWrapped().createValidator(validatorId);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getValidatorIds} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public Iterator<String> getValidatorIds() {
-        return getWrapped().getValidatorIds();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createValueBinding(String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ValueBinding createValueBinding(String ref)
-          throws ReferenceSyntaxException {
-        return getWrapped().createValueBinding(ref);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getResourceHandler} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ResourceHandler getResourceHandler() {
-        return getWrapped().getResourceHandler();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#setResourceHandler(ResourceHandler)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void setResourceHandler(ResourceHandler resourceHandler) {
-        getWrapped().setResourceHandler(resourceHandler);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getResourceBundle(javax.faces.context.FacesContext, String)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ResourceBundle getResourceBundle(FacesContext ctx, String name) {
-        return getWrapped().getResourceBundle(ctx, name);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getProjectStage} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ProjectStage getProjectStage() {
-        return getWrapped().getProjectStage();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addELResolver(javax.el.ELResolver)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addELResolver(ELResolver resolver) {
-        getWrapped().addELResolver(resolver);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getELResolver} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ELResolver getELResolver() {
-        return getWrapped().getELResolver();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext context,
-                                       String componentType)
-          throws FacesException {
-        return getWrapped().createComponent(componentExpression, context, componentType);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String, String)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext context,
-                                       String componentType,
-                                       String rendererType) {
-        return getWrapped().createComponent(componentExpression, context, componentType, rendererType);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createComponent(javax.faces.context.FacesContext, String, String)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public UIComponent createComponent(FacesContext context,
-                                       String componentType,
-                                       String rendererType) {
-        return getWrapped().createComponent(context, componentType, rendererType);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#createComponent(javax.faces.context.FacesContext, Resource)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public UIComponent createComponent(FacesContext context,
-                                       Resource componentResource) {
-        return getWrapped().createComponent(context, componentResource);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getExpressionFactory} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ExpressionFactory getExpressionFactory() {
-        return getWrapped().getExpressionFactory();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#evaluateExpressionGet(javax.faces.context.FacesContext, String, Class)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public <T> T evaluateExpressionGet(FacesContext context,
-                                       String expression,
-                                       Class<? extends T> expectedType)
-          throws ELException {
-        return getWrapped().evaluateExpressionGet(context, expression, expectedType);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#addELContextListener(javax.el.ELContextListener)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void addELContextListener(ELContextListener listener) {
-        getWrapped().addELContextListener(listener);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#removeELContextListener(javax.el.ELContextListener)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void removeELContextListener(ELContextListener listener) {
-        getWrapped().removeELContextListener(listener);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#getELContextListeners} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public ELContextListener[] getELContextListeners() {
-        return getWrapped().getELContextListeners();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#publishEvent(javax.faces.context.FacesContext, Class, Object)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void publishEvent(FacesContext context,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Object source) {
-        getWrapped().publishEvent(context, systemEventClass, source);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#publishEvent(javax.faces.context.FacesContext, Class, Class, Object)}
-     * on the wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void publishEvent(FacesContext context,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Class<?> sourceBaseType,
-                             Object source) {
-        getWrapped().publishEvent(context,
-                                  systemEventClass,
-                                  sourceBaseType,
-                                  source);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#subscribeToEvent(Class, Class, javax.faces.event.SystemEventListener)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 Class<?> sourceClass,
-                                 SystemEventListener listener) {
-        getWrapped().subscribeToEvent(systemEventClass, sourceClass, listener);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#subscribeToEvent(Class, javax.faces.event.SystemEventListener)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 SystemEventListener listener) {
-        getWrapped().subscribeToEvent(systemEventClass, listener);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#unsubscribeFromEvent(Class, Class, javax.faces.event.SystemEventListener)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     Class<?> sourceClass,
-                                     SystemEventListener listener) {
-        getWrapped().unsubscribeFromEvent(systemEventClass, sourceClass, listener);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Application#unsubscribeFromEvent(Class, javax.faces.event.SystemEventListener)} on the
-     * wrapped {@link Application} object.</p>
-     */
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     SystemEventListener listener) {
-        getWrapped().unsubscribeFromEvent(systemEventClass, listener);
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ConfigurableNavigationHandler.java b/jsf-api/src/main/java/javax/faces/application/ConfigurableNavigationHandler.java
deleted file mode 100644
index 2c557b5..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ConfigurableNavigationHandler.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.context.FacesContext;
-
-/**
- * <p
- * class="changed_added_2_0"><strong>ConfigurableNavigationHandler</strong>
- * extends the contract of {@link NavigationHandler} to allow runtime
- * inspection of the {@link NavigationCase}s that make up the rule-base
- * for navigation.  An implementation compliant with the version of the
- * specification in which this class was introduced (or a later version)
- * must make it so that its <code>NavigationHandler</code> is an
- * extension of this class.</p>
- *
- * @since 2.0
- */
-public abstract class ConfigurableNavigationHandler extends NavigationHandler {
-    
-    /**
-     * <p class="changed_added_2_0">Return the {@link NavigationCase}
-     * representing the navigation that would be taken had {@link
-     * NavigationHandler#handleNavigation} been called with the same
-     * arguments or <code>null</code> if there is no such case.</p>
-     *
-     * @param context The {@link FacesContext} for the current request
-     * @param fromAction The action binding expression that was evaluated
-     *  to retrieve the specified outcome, or <code>null</code> if the
-     *  outcome was acquired by some other means
-     * @param outcome The logical outcome returned by a previous invoked
-     *  application action (which may be <code>null</code>)
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */ 
-
-    public abstract NavigationCase getNavigationCase(FacesContext context,
-            String fromAction, 
-            String outcome);
-    
-
-    /**
-     * <p class="changed_added_2_0">Return a <code>Map<String,
-     * Set<NavigationCase>></code> where the keys are
-     * <code><from-view-id></code> values and the values are
-     * <code>Set<NavigationCase></code> where each element in the
-     * Set is a <code>NavigationCase</code> that applies to that
-     * <code><from-view-id></code>.  The implementation must
-     * support live modifications to this <code>Map</code>.</p>
-     *
-     * @since 2.0
-     */
-    public abstract Map<String, Set<NavigationCase>> getNavigationCases();
-    
-    /**
-     * <p class="changed_added_2_0">A convenience method to signal the
-     * JavaServer Faces implementation to perform navigaton
-     * with the provided outcome. When the NavigationHandler is invoked,
-     * the current viewId is treated as the "from viewId" and the "from action"
-     * is null.</p>
-     * 
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public void performNavigation(String outcome) {
-        this.handleNavigation(FacesContext.getCurrentInstance(), null, outcome);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/FacesMessage.java b/jsf-api/src/main/java/javax/faces/application/FacesMessage.java
deleted file mode 100644
index 031744f..0000000
--- a/jsf-api/src/main/java/javax/faces/application/FacesMessage.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * <p><strong>FacesMessage</strong> represents a single validation (or
- * other) message, which is typically associated with a particular
- * component in the view.  A {@link javax.faces.application.FacesMessage} instance may be created
- * based on a specific <code>messageId</code>.  The specification defines
- * the set of <code>messageId</code>s for which there must be
- * {@link javax.faces.application.FacesMessage} instances.</p>
- *
- * <p>The implementation must take the following steps when creating
- * <code>FacesMessage</code> instances given a <code>messageId</code>:</p>
- *
- * <ul>
- *
- * <p>Call {@link Application#getMessageBundle}.  If
- * non-<code>null</code>, locate the named <code>ResourceBundle</code>,
- * using the <code>Locale</code> from the current {@link
- * javax.faces.component.UIViewRoot} and see if it has a value for the
- * argument <code>messageId</code>.  If it does, treat the value as the
- * <code>summary</code> of the <code>FacesMessage</code>.  If it does
- * not, or if {@link Application#getMessageBundle} returned
- * <code>null</code>, look in the <code>ResourceBundle</code> named by
- * the value of the constant {@link #FACES_MESSAGES} and see if it has a
- * value for the argument <code>messageId</code>.  If it does, treat the
- * value as the <code>summary</code> of the <code>FacesMessage</code>.
- * If it does not, there is no initialization information for the
- * <code>FacesMessage</code> instance.</p>
- *
- * <p>In all cases, if a <code>ResourceBundle</code> hit is found for
- * the <code>{messageId}</code>, look for further hits under the key
- * <code>{messageId}_detail</code>. Use this value, if present, as 
- * the <code>detail</code> for the returned <code>FacesMessage</code>.</p>
- *
- * <p>Make sure to perform any parameter substitution required for the
- * <code>summary</code> and <code>detail</code> of the
- * <code>FacesMessage</code>.</p>
- *
- * </ul>
- *
- */
-
-public class FacesMessage implements Serializable {
-
-
-    // --------------------------------------------------------------- Constants
-
-
-    /**
-     * <p><code>ResourceBundle</code> identifier for messages whose
-     * message identifiers are defined in the JavaServer Faces
-     * specification.</p>
-     */
-    public static final String FACES_MESSAGES = "javax.faces.Messages";
-
-
-    // ------------------------------------------------- Message Severity Levels
-
-
-    // Any new Severity values must go at the end of the list, or we will break
-    // backwards compatibility on serialized instances
-
-
-    private static final String SEVERITY_INFO_NAME = "INFO";
-    /**
-     * <p>Message severity level indicating an informational message
-     * rather than an error.</p>
-     */
-    public static final Severity SEVERITY_INFO = 
-	new Severity(SEVERITY_INFO_NAME);
-
-
-    private static final String SEVERITY_WARN_NAME = "WARN";
-    /**
-     * <p>Message severity level indicating that an error might have
-     * occurred.</p>
-     */
-    public static final Severity SEVERITY_WARN = 
-	new Severity(SEVERITY_WARN_NAME);
-
-
-    private static final String SEVERITY_ERROR_NAME = "ERROR";
-    /**
-     * <p>Message severity level indicating that an error has
-     * occurred.</p>
-     */
-    public static final Severity SEVERITY_ERROR = 
-	new Severity(SEVERITY_ERROR_NAME);
-
-
-    private static final String SEVERITY_FATAL_NAME = "FATAL";
-    /**
-     * <p>Message severity level indicating that a serious error has
-     * occurred.</p>
-     */
-    public static final Severity SEVERITY_FATAL = 
-	new Severity(SEVERITY_FATAL_NAME);
-
-
-    /**
-     * <p>Array of all defined values, ascending order of ordinal value.
-     *  Be sure you include any new instances created above, in the
-     * same order.</p>
-     */
-    private static final Severity[] values =
-    { SEVERITY_INFO, SEVERITY_WARN, SEVERITY_ERROR, SEVERITY_FATAL };
-    
-
-    /**
-     * <p>Immutable <code>List</code> of valid {@link javax.faces.application.FacesMessage.Severity}
-     * instances, in ascending order of their ordinal value.</p>
-     */
-    public static final List VALUES = 
-	Collections.unmodifiableList(Arrays.asList(values));
-
-    private static Map<String,Severity> _MODIFIABLE_MAP =
-         new HashMap<String,Severity>(4, 1.0f);
-    
-    static {
-	for (int i = 0, len = values.length; i < len; i++) {
-	    _MODIFIABLE_MAP.put(values[i].severityName, values[i]);
-	}
-    }
-    
-
-    /**
-     * <p>Immutable <code>Map</code> of valid {@link javax.faces.application.FacesMessage.Severity}
-     * instances, keyed by name.</p>
-     */
-    public final static Map VALUES_MAP = 
-	Collections.unmodifiableMap(_MODIFIABLE_MAP);
-    
-    private static final long serialVersionUID = -1180773928220076822L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new {@link javax.faces.application.FacesMessage} with no initial
-     * values. The severity is set to Severity.INFO.</p>
-     */
-    public FacesMessage() {
-
-        super();
-
-    }
-
-    /**
-     * <p>Construct a new {@link javax.faces.application.FacesMessage} with just a summary.  The
-     * detail is <code>null</code>, the severity is set to
-     * <code>Severity.INFO</code>.</p>
-     */
-    public FacesMessage(String summary) {
-
-        super();
-        setSummary(summary);
-    }
-
-
-
-
-    /**
-     * <p>Construct a new {@link javax.faces.application.FacesMessage} with the specified initial
-     * values.  The severity is set to Severity.INFO.</p>
-     *
-     * @param summary Localized summary message text
-     * @param detail Localized detail message text
-     *
-     * @throws IllegalArgumentException if the specified severity level
-     *  is not one of the supported values
-     */
-    public FacesMessage(String summary, String detail) {
-
-        super();
-        setSummary(summary);
-        setDetail(detail);
-
-    }
-
-
-    /**
-     * <p>Construct a new <code>FacesMessage</code> with the specified
-     * initial values.</p>
-     *
-     * @param severity the severity
-     * @param summary Localized summary message text
-     * @param detail Localized detail message text
-     *
-     * @throws IllegalArgumentException if the specified severity level
-     *  is not one of the supported values
-     */
-    public FacesMessage(Severity severity, String summary, 
-			String detail) {
-
-        super();
-	setSeverity(severity);
-        setSummary(summary);
-        setDetail(detail);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private Severity severity = FacesMessage.SEVERITY_INFO;
-    private String summary = null;
-    private String detail = null;
-    private boolean rendered;
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Return the localized detail text.  If no localized detail text has
-     * been defined for this message, return the localized summary text
-     * instead.</p>
-     */
-    public String getDetail() {
-
-	if (this.detail == null) {
-	    return (this.summary);
-	} else {
-	    return (this.detail);
-	}
-
-    }
-
-
-    /**
-     * <p>Set the localized detail text.</p>
-     *
-     * @param detail The new localized detail text
-     */
-    public void setDetail(String detail) {
-
-        this.detail = detail;
-
-    }
-
-
-    /**
-     * <p>Return the severity level.</p>
-     */
-    public Severity getSeverity() {
-
-        return (this.severity);
-
-    }
-
-
-    /**
-     * <p>Set the severity level.</p>
-     *
-     * @param severity The new severity level
-     *
-     * @throws IllegalArgumentException if the specified severity level
-     *  is not one of the supported values
-     */
-    public void setSeverity(Severity severity) {
-	
-        if ((severity.getOrdinal() < SEVERITY_INFO.getOrdinal()) || 
-	    (severity.getOrdinal() > SEVERITY_FATAL.getOrdinal())) {
-            throw new IllegalArgumentException(String.valueOf(severity));
-        }
-        this.severity = severity;
-	
-    }
-
-
-    /**
-     * <p>Return the localized summary text.</p>
-     */
-    public String getSummary() {
-
-        return (this.summary);
-
-    }
-
-
-    /**
-     * <p>Set the localized summary text.</p>
-     *
-     * @param summary The new localized summary text
-     */
-    public void setSummary(String summary) {
-
-        this.summary = summary;
-
-    }
-
-
-    /**
-     * @return <code>true</code> if {@link #rendered()} has been called, otherwise
-     *  <code>false</code>
-     *
-     * @since 2.0
-     */
-    public boolean isRendered() {
-
-        return rendered;
-
-    }
-
-    /**
-     * <p>Marks this message as having been rendered to the client.</p>
-     *
-     * @since 2.0
-     */
-    public void rendered() {
-
-        this.rendered = true;
-
-    }
-    
-
-    /**
-     * <p>Persist {@link javax.faces.application.FacesMessage} artifacts,
-     * including the non serializable <code>Severity</code>.</p>
-     */
-    private void writeObject(ObjectOutputStream out) throws IOException {
-        out.writeInt(getSeverity().getOrdinal());
-        out.writeObject(getSummary());
-        out.writeObject(getDetail());
-        out.writeObject(isRendered());
-    }
-
-    /**
-     * <p>Reconstruct {@link javax.faces.application.FacesMessage} from
-     * serialized artifacts.</p>
-     */
-    private void readObject(ObjectInputStream in)
-        throws IOException, ClassNotFoundException {
-        severity = SEVERITY_INFO;
-        summary = null;
-        detail = null;
-        int ordinal = in.readInt();
-        if (ordinal == SEVERITY_INFO.getOrdinal()) {
-            setSeverity(FacesMessage.SEVERITY_INFO);
-        } else if (ordinal == SEVERITY_WARN.getOrdinal()) {
-            setSeverity(FacesMessage.SEVERITY_WARN);
-        } else if (ordinal == SEVERITY_ERROR.getOrdinal()) {
-            setSeverity(FacesMessage.SEVERITY_ERROR);
-        } else if (ordinal == SEVERITY_FATAL.getOrdinal()) {
-            setSeverity(FacesMessage.SEVERITY_FATAL);
-        }
-        setSummary((String)in.readObject());
-        setDetail((String)in.readObject());
-        this.rendered = (Boolean) in.readObject();
-    }
-
-    /**
-     * <p>Class used to represent message severity levels in a typesafe
-     * enumeration.</p>
-     */
-    public static class Severity implements Comparable {
-
-
-	// -------------------------------------------------------  Constructors
-
-	
-	/**
-	 * <p>Private constructor to disable the creation of new
-	 * instances.</p>
-	 */
-	private Severity(String newSeverityName) {
-	    severityName = newSeverityName;
-	}
-	
-	
-	// -------------------------------------------------- Instance Variables
-	
-	
-	/**
-	 * <p>The ordinal value assigned to this instance.</p>
-	 */
-	private final int ordinal = nextOrdinal++;
-	
-
-	/**
-	 * <p>The (optional) name for this severity.</p>
-	 */
-        String severityName = null;
-	
-	
-	// -----------------------------------------------------  Public Methods
-
-
-	/**
-	 * <p>Compare this {@link javax.faces.application.FacesMessage.Severity} instance to the
-	 * specified one.  Returns a negative integer, zero, or a
-	 * positive integer if this object is less than, equal to, or
-	 * greater than the specified object.</p>
-	 *
-	 * @param other The other object to be compared to
-	 */
-	public int compareTo(Object other) {
-	    return this.ordinal - ((Severity) other).ordinal;
-	}
-	
-	
-	/**
-	 * <p>Return the ordinal value of this {@link
-	 * FacesMessage.Severity} instance.</p>
-	 */
-	public int getOrdinal() {
-	    return (this.ordinal);
-	}
-	
-
-	/**
-	 * <p>Return a String representation of this {@link
-	 * FacesMessage.Severity} instance.</p>
-	 */
-	public String toString() {
-	    if (null == severityName) {
-		return (String.valueOf(this.ordinal));
-	    }
-	    return (String.valueOf(this.severityName) + ' ' + this.ordinal);
-	}
-	
-	
-	// ---------------------------------------------------  Static Variables
-	
-	
-	/**
-	 * <p>Static counter returning the ordinal value to be assigned to the
-	 * next instance that is created.</p>
-	 */
-	private static int nextOrdinal = 0;
-	
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/NavigationCase.java b/jsf-api/src/main/java/javax/faces/application/NavigationCase.java
deleted file mode 100644
index 9ff703e..0000000
--- a/jsf-api/src/main/java/javax/faces/application/NavigationCase.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Map;
-import java.util.List;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0"><strong>NavigationCase</strong>
- * represents a <code><navigation-case></code> in the navigation
- * rule base, as well as the <code><from-view-id></code> inside
- * which this <code><navigation-case></code> is nested.</p>
- *
- * @since 2.0
- */
-public class NavigationCase {
-
-    private final String fromViewId;
-    private final String fromAction;
-    private final String fromOutcome;
-    private final String condition;
-    private final String toViewId;
-    private final Map<String,List<String>> parameters;
-    private final boolean redirect;
-    private final boolean includeViewParams;
-
-    private ValueExpression toViewIdExpr;
-    private ValueExpression conditionExpr;
-    private String toString;
-    private int hashCode;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0"> Construct a new
-     * <code>NavigationCase</code> based on the provided arguments.  See
-     * section JSF.7.4.2 for how a <code>NavigationCase</code> is used
-     * by the standard {@link ConfigurableNavigationHandler}</p>
-     *
-     * @param fromViewId return from {@link #getFromViewId}
-     * @param fromAction return from {@link #getFromAction}
-     * @param fromOutcome return from {@link #getFromOutcome}
-     * @param condition A string to be interpreted as a
-     * <code>ValueExpression</code> by a call to {@link #getCondition}
-     * @param toViewId return from {@link #getToViewId}
-     * @param parameters return from {@link #getParameters}
-     * @param redirect return from {@link #isRedirect}
-     * @param includeViewParams return {@link #isIncludeViewParams}
-     */
-    public NavigationCase(String fromViewId,
-                          String fromAction,
-                          String fromOutcome,
-                          String condition,
-                          String toViewId,
-                          Map<String,List<String>> parameters,
-                          boolean redirect,
-                          boolean includeViewParams) {
-
-        this.fromViewId = fromViewId;
-        this.fromAction = fromAction;
-        this.fromOutcome = fromOutcome;
-        this.condition = condition;
-        this.toViewId = toViewId;
-        this.parameters = parameters;
-        this.redirect = redirect;
-        this.includeViewParams = includeViewParams;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p class="changed_added_2_0">Construct an absolute URL to this
-     * <code>NavigationCase</code> instance using {@link
-     * javax.faces.application.ViewHandler#getActionURL} on the path
-     * portion of the url.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     *
-     * @throws MalformedURLException if the process of constructing the
-     * URL causes this exception to be thrown.
-     */
-    public URL getActionURL(FacesContext context) throws MalformedURLException {
-
-        ExternalContext extContext = context.getExternalContext();
-        return new URL(extContext.getRequestScheme(),
-                extContext.getRequestServerName(),
-                extContext.getRequestServerPort(),
-                context.getApplication().getViewHandler().getActionURL(context, getToViewId(context)));
-        
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Construct an absolute URL to this
-     * <code>NavigationCase</code> instance using {@link
-     * javax.faces.application.ViewHandler#getResourceURL} on the path
-     * portion of the url.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     *
-     * @throws MalformedURLException if the process of constructing the
-     * URL causes this exception to be thrown.
-     */
-    public URL getResourceURL(FacesContext context) throws MalformedURLException {
-        
-        ExternalContext extContext = context.getExternalContext();
-
-        return new URL(extContext.getRequestScheme(),
-                extContext.getRequestServerName(),
-                extContext.getRequestServerPort(),
-                context.getApplication().getViewHandler().getResourceURL(context, getToViewId(context)));
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Construct an absolute URL suitable for a
-     * "redirect" to this <code>NavigationCase</code> instance using {@link
-     * javax.faces.application.ViewHandler#getRedirectURL} on the path
-     * portion of the url.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     *
-     * @throws MalformedURLException if the process of constructing the
-     * URL causes this exception to be thrown.
-     */
-    public URL getRedirectURL(FacesContext context) throws MalformedURLException {
-
-        ExternalContext extContext = context.getExternalContext();
-
-        return new URL(extContext.getRequestScheme(),
-                extContext.getRequestServerName(),
-                extContext.getRequestServerPort(),
-                context.getApplication().getViewHandler().getRedirectURL(context,
-                                                                         getToViewId(context),
-                                                                         getParameters(),
-                                                                         isIncludeViewParams()));
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Construct an absolute URL suitable for a
-     * bookmarkable link to this <code>NavigationCase</code> instance using {@link
-     * javax.faces.application.ViewHandler#getBookmarkableURL} on the path
-     * portion of the url.  This URL may include view parameters specified
-     * as metadata within the view.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     *
-     * @throws MalformedURLException if the process of constructing the
-     * URL causes this exception to be thrown.
-     */
-    public URL getBookmarkableURL(FacesContext context) throws MalformedURLException {
-
-        ExternalContext extContext = context.getExternalContext();
-        return new URL(extContext.getRequestScheme(),
-                extContext.getRequestServerName(),
-                extContext.getRequestServerPort(),
-                context.getApplication().getViewHandler().getBookmarkableURL(context,
-                                                                             getToViewId(context),
-                                                                             getParameters(),
-                                                                             isIncludeViewParams()));
-    }
-
-    
-    /**
-     * <p class="changed_added_2_0">Return the
-     * <code><from-view-id></code> of the
-     * <code><navigation-rule></code> inside which this
-     * <code><navigation-case></code> is nested.</p>
-     */
-    public String getFromViewId() {
-
-        return fromViewId;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the <code><from-action>
-     * for this <code><navigation-case></code></code></p>
-     */
-    public String getFromAction() {
-
-        return fromAction;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the <code><from-outcome>
-     * for this <code><navigation-case></code></code></p>
-     */
-    public String getFromOutcome() {
-
-        return fromOutcome;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Evaluates the <code><to-view-id></code>
-     * for this <code><navigation-case></code></p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     *
-     * @return the view ID that should be navigated to
-     */
-    public String getToViewId(FacesContext context) {
-
-        if (toViewIdExpr == null) {
-            ExpressionFactory factory =
-                  context.getApplication().getExpressionFactory();
-            toViewIdExpr = factory.createValueExpression(context.getELContext(),
-                                                         toViewId,
-                                                         String.class);
-        }
-        String toViewId = (String) toViewIdExpr.getValue(context.getELContext());
-        if (toViewId.charAt(0) != '/') {
-            toViewId = '/' + toViewId;
-        }
-
-        return toViewId;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Test if this navigation case has an
-     * associated <code><if></code> element.
-     *
-     * @return <code>true</code> if there's an <code><if></code>
-     *  element associated with this <code><navigation-case></code>,
-     *  otherwise <code>false</code>
-     */
-    public boolean hasCondition() {
-
-        return (condition != null);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Evaluates the
-     * <code><if></code> for this
-     * <code><navigation-case></code>, if any.  The expression to
-     * be evaluated is passed into the constructor as a string.  When
-     * the expression is evaluated, its value must be coerced into a
-     * <code>boolean</code> per the normail EL coercion rules.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     *
-     * @return <code>null</code> if there is no <code><if></code> element
-     *  associated with this <code><navigation-case></code>, otherwise
-     *  return the evaluation result of the condition
-     *
-     * @throws any exceptions encountered during the process of
-     * evaluating the expression or obtaining its value.
-     */
-    public Boolean getCondition(FacesContext context) {
-
-        if (conditionExpr == null && condition != null) {
-            ExpressionFactory factory =
-                  context.getApplication().getExpressionFactory();
-            conditionExpr = factory.createValueExpression(context.getELContext(),
-                                                          condition,
-                                                          Boolean.class);
-        }
-
-        return ((conditionExpr != null)
-                ? (Boolean) conditionExpr.getValue(context.getELContext())
-                : null);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the parameters to be included
-     * for navigation cases requiring a redirect.  If no parameters are
-     * defined, <code>null</code> will be returned.  The keys in the
-     * <code>Map</code> are parameter names.  For each key, the
-     * corresponding value is a <code>List</code> of unconverted
-     * values.</p>
-     */
-    public Map<String, List<String>> getParameters() {
-
-        return parameters;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the
-     * <code><redirect></code> value for this
-     * <code><navigation-case></code>.  This will be
-     * <code>true</code> if the new view should be navigated to via a
-     * {@link javax.faces.context.ExternalContext#redirect(String)}</p>
-     */
-    public boolean isRedirect() {
-
-        return redirect;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the
-     * <code><redirect></code> value for this
-     * <code><navigation-case></code>.  This will be
-     * <code>true</code> if the view parametets should be encoded into
-     * the redirect URL (only applies to redirect case)</p>
-     */
-    public boolean isIncludeViewParams() {
-
-        return includeViewParams;
-
-    }
-
-
-    @Override
-    public boolean equals(Object o) {
-
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        NavigationCase that = (NavigationCase) o;
-
-        return (redirect == that.redirect
-               && !(fromAction != null
-                    ? !fromAction.equals(that.fromAction)
-                    : that.fromAction != null)
-               && !(fromOutcome != null
-                    ? !fromOutcome.equals(that.fromOutcome)
-                    : that.fromOutcome != null)
-               && !(condition != null
-                    ? !condition.equals(that.condition)
-                    : that.condition != null)
-               && !(fromViewId != null
-                    ? !fromViewId.equals(that.fromViewId)
-                    : that.fromViewId != null)
-               && !(toViewId != null
-                    ? !toViewId.equals(that.toViewId)
-                    : that.toViewId != null)
-               && !(parameters != null
-                    ? !parameters.equals(that.parameters)
-                    : that.parameters != null));
-
-    }
-
-    
-    @Override
-    public int hashCode() {
-
-        if (hashCode == 0) {
-            int result = fromViewId != null ? fromViewId.hashCode() : 0;
-            result = 31 * result + (fromAction != null
-                                    ? fromAction.hashCode()
-                                    : 0);
-            result = 31 * result + (fromOutcome != null
-                                    ? fromOutcome.hashCode()
-                                    : 0);
-            result = 31 * result + (condition != null
-                                    ? condition.hashCode()
-                                    : 0);
-            result = 31 * result + (toViewId != null ? toViewId.hashCode() : 0);
-            result = 31 * result + (redirect ? 1 : 0);
-            result = 31 * result + (parameters != null ? parameters.hashCode() : 0);
-            hashCode = result;
-        }
-        return hashCode;
-
-    }
-
-
-    @Override
-    public String toString() {
-
-        if (toString == null) {
-            StringBuilder sb = new StringBuilder(64);
-            sb.append("NavigationCase{");
-            sb.append("fromViewId='").append(fromViewId).append('\'');
-            sb.append(", fromAction='").append(fromAction).append('\'');
-            sb.append(", fromOutcome='").append(fromOutcome).append('\'');
-            sb.append(", if='").append(condition).append('\'');
-            sb.append(", toViewId='").append(toViewId).append('\'');
-            sb.append(", faces-redirect=").append(redirect);
-            sb.append(", includeViewParams=").append(includeViewParams).append('\'');
-            sb.append(", parameters=").append(((parameters != null) ? parameters.toString() : ""));
-            sb.append('}');
-            toString = sb.toString();
-        }
-        return toString;
-
-    }
- 
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/NavigationHandler.java b/jsf-api/src/main/java/javax/faces/application/NavigationHandler.java
deleted file mode 100644
index f730a00..0000000
--- a/jsf-api/src/main/java/javax/faces/application/NavigationHandler.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><span class="changed_modified_2_0">A</a> 
- * <strong>NavigationHandler</strong> is passed the outcome string
- * returned by an application action invoked for this application, and will
- * use this (along with related state information) to choose the view to
- * be displayed next.</p>
- *
- * <p>A default implementation of <code>NavigationHandler</code> must be
- * provided by the JSF implementation, which will be utilized unless
- * <code>setNavigationHandler()</code> is called to establish a different one.
- * <span class="changed_added_2_0">An implementation
- * of this class must be thread-safe.</span>
- * This default instance will compare the view identifier of the current
- * view, the specified action binding, and the specified outcome against
- * any navigation rules provided in <code>faces-config.xml</code> file(s).
- * If a navigation case matches, the current view will be changed by a call
- * to <code>FacesContext.setViewRoot()</code>.  Note that a <code>null</code>
- * outcome value will never match any navigation rule, so it can be used as an
- * indicator that the current view should be redisplayed.</p>
- */
-
-public abstract class NavigationHandler {
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> navigation
-     * processing based on the state information in the specified {@link
-     * FacesContext}, plus the outcome string returned by an executed
-     * application action.</p>
-     *
-     * <p class="changed_added_2_0">If the implementation class also
-     * extends {@link ConfigurableNavigationHandler}, the implementation
-     * must guarantee that the logic used in a call to {@link
-     * ConfigurableNavigationHandler#getNavigationCase} is used in this
-     * method to determine the correct navigation.</p>
-     *
-     * <p class="changed_added_2_0">This method must set the render targets
-     * (used in partial rendering) to <code>render all </code>
-     * invoking {@link javax.faces.context.PartialViewContext#setRenderAll})
-     * if the view identifier has changed as the result of an application
-     * action (to take into account <code>Ajax requests</code>).</p> 
-     *
-     * @param context The {@link FacesContext} for the current request
-     * @param fromAction The action binding expression that was evaluated
-     *  to retrieve the specified outcome, or <code>null</code> if the
-     *  outcome was acquired by some other means
-     * @param outcome The logical outcome returned by a previous invoked
-     *  application action (which may be <code>null</code>)
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void handleNavigation(FacesContext context,
-                                          String fromAction,
-                                          String outcome);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ProjectStage.java b/jsf-api/src/main/java/javax/faces/application/ProjectStage.java
deleted file mode 100644
index 338c555..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ProjectStage.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.application;
-
-/**
-
- * <p class="changed_added_2_0">This class enables a feature similar to
- * the <code><a target="_"
- * href="http://wiki.rubyonrails.org/rails/pages/Environments">RAILS_ENV</a></code>
- * feature of the Ruby on Rails web framework.  The constants in this
- * class represent the current state of the running application in a
- * typical product development lifecycle.  The value of this state may
- * be queried at any time after application startup by calling {@link
- * Application#getProjectStage}.</p>
-
- * @since 2.0
- */
-public enum ProjectStage {
-
-    /**
-     * <p class="changed_added_2_0">
-     * This value indicates the currently running application is right
-     * now, at this moment, being developed.  This value will usually be
-     * set during iterative development.</p>
-     */
-    Development,
-    /**
-     * <p class="changed_added_2_0">
-     * This value indicates the currently running application is
-     * undergoing unit testing.
-     * </p>
-     */
-    UnitTest,
-    /**
-     * <p class="changed_added_2_0">
-     * This value indicates the currently running application is
-     * undergoing system testing.
-     * </p>
-     */
-    SystemTest,
-    /**
-     * <p class="changed_added_2_0">
-     * This value indicates the currently running application is
-     * deployed in production.
-     * </p>
-     */
-    Production;
-
-    /**
-     * <p class="changed_added_2_0">
-     * The value of this constant is the value of the
-     * <code>param-name</code> for setting the current value to be
-     * returned by {@link Application#getProjectStage}.
-     * </p>
-     */
-    public static final String PROJECT_STAGE_PARAM_NAME =
-          "javax.faces.PROJECT_STAGE";
-
-    
-    /**
-     * <p class="changed_added_2_0">
-     * The value of this constant is the name used for JNDI lookups
-     * for setting the current value to be returned by
-     * {@link Application#getProjectStage}.
-     * </p>
-     */
-    public static final String PROJECT_STAGE_JNDI_NAME =
-          "java:comp/env/jsf/ProjectStage";
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/Resource.java b/jsf-api/src/main/java/javax/faces/application/Resource.java
deleted file mode 100644
index ea80e5a..0000000
--- a/jsf-api/src/main/java/javax/faces/application/Resource.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.application;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Map;
-
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">An instance of <code>Resource</code> is a Java
- * object representation of the artifact that is served up in response
- * to a <i>resource request</i> from the client.  Instances of
- * <code>Resource</code> are normally created and initialized via calls
- * to {@link ResourceHandler#createResource}.  See the documentation for
- * {@link ResourceHandler} for more information.</p>
- *
- * <div class="changed_added_2_0">
- * </div>
- *
- * @since 2.0
- */
-public abstract class Resource {
-    
-    /**
-     * <p class="changed_added_2_0">This constant is used as the key in the 
-     * component attribute map of a composite component to associate 
-     * the component with its <code>Resource</code> instance.  The
-     * value for this key is the actual <code>Resource</code> instance.</p>
-     * 
-     */
-    public static final String COMPONENT_RESOURCE_KEY = 
-            "javax.faces.application.Resource.ComponentResource";
-
-
-    private String contentType;
-
-    private String libraryName;
-
-    private String resourceName;
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p class="changed_added_2_0">Return the MIME content-type for this resource.</p>
-     * @return the MIME content-type for this resource.
-     */
-    public String getContentType() {
-
-        return contentType;
-
-    }
-
-
-    /**
-
-     * <p class="changed_added_2_0">Set the MIME content-type for this
-     * resource.  The default implementation performs no validation on
-     * the argument.</p>
-     * @param contentType the MIME content-type for this resource.  The
-     * default implementation must accept <code>null</code> as a
-     * parameter.  
-     */
-    public void setContentType(String contentType) {
-
-        this.contentType = contentType;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the libraryName for this
-     * resource.  May be <code>null</code>.  The libraryName for a
-     * resource is an optional String that indicates membership in a
-     * "resource library".  All resources with the same libraryName
-     * belong to the same "resource library".  The "resource library"
-     * concept allows disambiguating resources that have the same
-     * resourceName.  See {@link ResourceHandler} for more
-     * information.</p>
-     *
-     * @return Return the libraryName for this resource.  May be
-     * <code>null</code>.
-     */
-    public String getLibraryName() {
-
-        return libraryName;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Set the libraryName for this resource.</p>
-     * @param libraryName the libraryName for this resource.  The
-     * default implementation must accept <code>null</code> for the
-     * <em>libraryName</em>.
-     */
-    public void setLibraryName(String libraryName) {
-
-        this.libraryName = libraryName;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the resourceName for this resource.
-     * Will never be null.  All <code>Resource</code> instances must
-     * have a resourceName.</p>
-     * @return Return the resourceName for this resource.  Will never be
-     * null.
-     */
-    public String getResourceName() {
-
-        return resourceName;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Set the resourceName for this resource.</p>
-     * @param resourceName a non-null String.
-     *
-     * @throws NullPointerException if argument
-     * <code>resourceName</code> is null.
-     */
-    public void setResourceName(String resourceName) {
-
-        if (null == resourceName) {
-            throw new NullPointerException("PENDING_I18N: All resources must have a non-null resourceName.");
-        }
-
-        this.resourceName = resourceName;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">If the current request is a resource
-     * request, (that is, {@link ResourceHandler#isResourceRequest}
-     * returns <code>true</code>), return an <code>InputStream</code>
-     * containing the bytes of the resource.  Otherwise, throw an
-     * <code>IOException</code>.</p>
-     * @return an <code>InputStream</code> containing the bytes of the
-     * resource.</p>
-     *
-     * @throws IOException if the current request is not a resource request.
-     */
-    public abstract InputStream getInputStream() throws IOException;
-
-
-    /**
-     * <p class="changed_added_2_0">Returns a mutable
-     * <code>Map<String, String></code> whose entries will be sent
-     * as response headers during {@link
-     * ResourceHandler#handleResourceRequest}.  The entries in this map
-     * must not persist beyond the scope of a single request.  Any
-     * modifications made to the map after the resource has been served
-     * will be ignored by the run-time.</p>
-     *
-     * @return a mutable <code>Map<String, String></code> of
-     * headers that will be included with the response.
-     */
-    public abstract Map<String, String> getResponseHeaders();
-
-
-    /**
-     * <p class="changed_added_2_0">Return a path to this resource such
-     * that, when the browser resolves it against the base URI for the
-     * view that includes the resource, and issues a GET request to the
-     * resultant fully qualified URL, the bytes of the resource are
-     * returned in response.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p>The default implementation must
-     * implement the following algorithm.  For discussion, the return
-     * result from this method will be called <em>result</em>.</p>
-     *
-     * <ul>
-     *
-     * <li><p>Get the context-root for this web application, not ending
-     * in slash.  For discussion this will be caled
-     * <em>contextRoot</em>.</p></li>
-     *
-     * <li><p>Discover if the <code>FacesServlet</code> is prefix or
-     * extension mapped, and the value of the mapping (including the
-     * leading '.'  in the case of extension mapping).  For discussion,
-     * this will be <em>facesServletMapping</em>.</p>
-     *
-     * <p>If prefix mapped, <em>result</em> must be</p>
-     *
-     * <ul><p><code>result = <em>contextRoot</em> + '/' +
-     * <em>facesServletMapping</em> + {@link
-     * ResourceHandler#RESOURCE_IDENTIFIER} + '/' + {@link
-     * #getResourceName}</code></p></ul>
-     *
-     * <p>If extension mapped, <em>result</em> must be</p>
-     *
-     * <ul><p><code>result = <em>contextRoot</em> + {@link
-     * ResourceHandler#RESOURCE_IDENTIFIER} + {@link #getResourceName} +
-     * <em>facesServletMapping</em></code></p></ul>
-     *
-     * </li>
-     *
-     * <li><p>If {@link #getLibraryName} returns non-<code>null</code>,
-     * build up a string, called <em>resourceMetaData</em> for
-     * discussion, as follows:</p>
-     *
-     * <ul>
-     *
-     * <p><code>resourceMetaData = "?ln=" + {@link
-     * #getLibraryName}</code></p>
-     *
-     * </ul>
-     *
-     * <p>Append <em>resourceMetaData</em> to <em>result</em>.</p>
-     *
-     * </li>
-     *
-     * <li><p>Make it portlet safe by passing the result through {@link
-     * ViewHandler#getResourceURL}.</p></li>
-     *
-     * </ul>
-     *
-     * </div>
-     *
-     * @return the path to this resource, intended to be included in the
-     * encoded view that is sent to the browser when sending a faces
-     * response.
-     */
-    public abstract String getRequestPath();
-
-
-    /**
-     * <p class="changed_added_2_0">Return an actual <code>URL</code>
-     * instance that refers to this resource instance.</p>
-     *
-     * @return Return an actual <code>URL</code> instance that refers to
-     * this resource instance.
-     */
-    public abstract URL getURL();
-
-
-    /**
-     * <p class="changed_added_2_0">Call through to {@link
-     * #getRequestPath} and return the result.</p>
-     *
-     * @return Call through to {@link #getRequestPath} and return the
-     * result.
-     */
-    public String toString() {
-        return getRequestPath();
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if the
-     * user-agent requesting this resource needs an update.  Returns
-     * <code>false</code> otherwise.  
-     *
-     * @return <code>true</code> or <code>false</code> depending on
-     * whether or not the user-agent needs an update of this resource.
-     */
-    public abstract boolean userAgentNeedsUpdate(FacesContext context);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ResourceDependencies.java b/jsf-api/src/main/java/javax/faces/application/ResourceDependencies.java
deleted file mode 100644
index 8de23a7..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ResourceDependencies.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">Container annotation to specify multiple
- * {@link ResourceDependency} annotations on a single class.  Example:</p>
-
-<pre><code>
-@ResourceDependencies( {
-  @ResourceDependency(library="corporate", name="css_master.css"),
-  @ResourceDependency(library="client01", name="layout.css"),
-  @ResourceDependency(library="corporate", name="typography.css"),
-  @ResourceDependency(library="client01", name="colorAndMedia.css"),
-  @ResourceDependency(library="corporate", name="table2.css"),
-  @ResourceDependency(library="fancy", name="commontaskssection.css"),
-  @ResourceDependency(library="fancy", name="progressBar.css"),
-  @ResourceDependency(library="fancy", name="css_ns6up.css")
-                       })
-</code></pre>
-
-
- * <div class="changed_added_2_0">
-
- * <p>The action described in {@link ResourceDependency} must be taken for each
- * <code>@ResourceDependency</code> present in the container
- * annotation. </p>
-
- * </div>
- */
- at Retention(value=RetentionPolicy.RUNTIME)
- at Target(value=ElementType.TYPE)
- at Inherited
-public @interface ResourceDependencies {
-    
-    ResourceDependency[] value();
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ResourceDependency.java b/jsf-api/src/main/java/javax/faces/application/ResourceDependency.java
deleted file mode 100644
index 50b5d85..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ResourceDependency.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-
-/**
- * <p class="changed_added_2_0">Instances of {@link
- * javax.faces.component.UIComponent} or {@link
- * javax.faces.render.Renderer} that have this annotation (or {@link
- * ResourceDependencies} attached at the class level will automatically
- * have a resource dependency added so that the named resource will be
- * present in user agent's view of the <code>UIViewRoot</code> in which
- * this component or renderer is used.</p>
-
- * <p/>
-
- * <div class="changed_added_2_0">
-
- * <p/>
-
- * <p>The default implementation must support attaching this annotation
- * to {@link javax.faces.component.UIComponent} or {@link
- * javax.faces.render.Renderer} classes.  In both cases, the event that
- * precipitates the processing of this annotation is the insertion of a
- * <code>UIComponent</code> instance into the view hierarchy on an
- * initial request for a view.  When that event happens, the following
- * action must be taken.  </p>
-
- * <ol>
- * <li><p> If this annotation is not present on the class in question, no action
- * must be taken.  </p></li>
- *
- * <li><p>Create a {@link javax.faces.component.UIOutput} instance by passing
- * <code>javax.faces.Output</code>. to {@link Application#createComponent(java.lang.String)}.</p></li>
- *
- * <li><p>Get the annotation instance from the class and obtain the values of
- * the <em>name</em>, <em>library</em>, and <em>target</em>
- * attributes.</p></li>
- *
- * <li><p>If <em>library</em> is the empty string, let <em>library</em> be
- * <code>null</code>.</p></li>
- *
- * <li><p>If <em>target</em> is the empty string, let <em>target</em> be
- * <code>null</code>.</p></li>
- *
- * <li><p>Obtain the <em>renderer-type</em> for the resource <em>name</em> by
- * passing <em>name</em> to {@link ResourceHandler#getRendererTypeForResourceName}.</p></li>
- *
- * <li><p>Call <code>setRendererType</code> on the <code>UIOutput</code>
- * instance, passing the <em>renderer-type</em>.</p></li>
- *
- * <li><p>Obtain the <code>Map</code> of attributes from the
- * <code>UIOutput</code> component by calling {@link javax.faces.component.UIComponent#getAttributes}.</p></li>
- *
- * <li><p>Store the <em>name</em> into the attributes <code>Map</code> under the
- * key "name".</p></li>
- *
- * <li><p>If <em>library</em> is non-<code>null</code>, store it under the key
- * "library".</p></li>
- *
- * <li><p>If <em>target</em> is non-<code>null</code>, store it under the key
- * "target". </p></li>
- *
- * <li><p>Otherwise, if <em>target</em> is <code>null</code>, call {@link
- * javax.faces.component.UIViewRoot#addComponentResource(javax.faces.context.FacesContext,
- * javax.faces.component.UIComponent)}, passing the <code>UIOutput</code>
- * instance as the second argument.</p></li>
- * </ol>
-
- * <p>Example:</p>
-
-<pre><code>
-  @ResourceDependency(library="corporate", name="colorAndMedia.css"),
-</code></pre>
-
-
- * </div>
- *
- * @since 2.0
- */
- at Retention(value = RetentionPolicy.RUNTIME)
- at Target(value = ElementType.TYPE)
- at Inherited
-public @interface ResourceDependency {
-
-    /**
-     * <p class="changed_added_2_0">The <em>resourceName</em> of the
-     * resource pointed to by this <code>ResourceDependency</code>.  It
-     * is valid to have EL Expressions in the value of this attribute,
-     * as long as the expression resolves to an instance of the expected
-     * type.</p>
-     */
-    public String name();
-
-    /**
-     * <p class="changed_added_2_0">The <em>libraryName</em> in which
-     * the resource pointed to by this <code>ResourceDependency</code>
-     * resides.  If not specified, defaults to the empty string.  It is
-     * valid to have EL Expressions in the value of this attribute, as
-     * long as the expression resolves to an instance of the expected
-     * type.</p>
-     */
-    public String library() default "";
-
-    /**
-     * <p class="changed_added_2_0">The value given for this attribute
-     * will be passed as the "target" argument to {@link
-     * javax.faces.component.UIViewRoot#addComponentResource(javax.faces.context.FacesContext,
-     * javax.faces.component.UIComponent, java.lang.String)}.  If this
-     * attribute is specified, {@link
-     * javax.faces.component.UIViewRoot#addComponentResource(javax.faces.context.FacesContext,javax.faces.component.UIComponent)}
-     * must be called instead, as described above.  It is valid to have
-     * EL Expressions in the value of this attribute, as long as the
-     * expression resolves to an instance of the expected type.</p>
-     */
-    public String target() default "";
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ResourceHandler.java b/jsf-api/src/main/java/javax/faces/application/ResourceHandler.java
deleted file mode 100644
index 32e70b4..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ResourceHandler.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.io.IOException;
-
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p class="changed_added_2_0"><strong>ResourceHandler</strong> is the
- * run-time API by which {@link javax.faces.component.UIComponent} and
- * {@link javax.faces.render.Renderer} instances can reference {@link
- * Resource} instances.  An implementation of this class must be thread-safe.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p class="javadocSection">Packaging Resources</p>
- *
- * <ul>
- *
- *  <p>ResourceHandler defines a path based packaging convention for
- *  resources.  The default implementation of
- *  <code>ResourceHandler</code> must support packaging resources in the
- *  classpath or in the web application root. See section JSF.2.6.1 of the
- *  spec prose document <a
- *  href="../../../overview-summary.html#prose_document">linked in the
- *  overview summary</a> for the normative specification of packaging
- *  resources.</p>
-
- * <p>Briefly, The default implementation must support packaging
- * resources in the web application root under the path</p>
- *
- * <p><code>resources/<resourceIdentifier></code></p>
- *
- * <p>relative to the web app root.</p>
- *
- * <p>For the default implementation, resources packaged in the
- * classpath must reside under the JAR entry name</p>
- *
- * <p><code>META-INF/resources/<resourceIdentifier></code></p>
-
- * <p><code><resourceIdentifier></code> consists of several
- * segments, specified as follows.</p>
-
- * <p><code>[localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion]</code></p>
-
- * <p class="changed_modified_2_0_rev_a">None of the segments in the
- * resourceIdentifier may be relative paths, such as
- * ‘../otherLibraryName’.</p>
-
- * <p>Note that <em>resourceName</em> is the only required segment.</p>
- *
- * </ul>
- *
- * <p class="javadocSection">Encoding Resources</p>
- *
- * <ul>
- *
- *  <p>During the handling of view requests, the JSF run-time may be
- *  called upon to encode a resource in such a way as to instruct the
- *  user-agent to make a subsequent resource request.  This behavior is
- *  orchestrated by one of the resource renderers
- *  (<code>ScriptRenderer</code>, <code>StylesheetRenderer</code>,
- *  <code>ImageRenderer</code>), which all call {@link Resource#getRequestPath}
- *  to obtain the encoded URI for the resource.  See {@link
- *  Resource#getRequestPath} and the Standard HTML RenderKit specification for
- *  the complete specification.</p>
- *
- * </ul>
- *
- * <p class="javadocSection">Decoding Resources</p>
- *
- * <ul>
- *
- *  <p>During the handling of resource requests, the JSF run-time will
- *  be called upon to decode a resource in such a way as to serve up
- *  the bytes of the resource to the user-agent.  This behavior is
- *  orchestrated by {@link #handleResourceRequest}, which calls {@link
- *  Resource#getInputStream} to obtain bytes of the resource.  See
- *  {@link #handleResourceRequest} for the complete specification.</p>
- *
- * </ul>
- *
- * </div>
- *
- * @since 2.0
- */
-public abstract class ResourceHandler {
-
-    /**
-
-     * <p class="changed_added_2_0">{@link Resource#getRequestPath} returns the
-     * value of this constant as the prefix of the URI.  {@link
-     * #handleResourceRequest(javax.faces.context.FacesContext)} looks for the value of this constant
-     * within the request URI to determine if the request is a resource
-     * request or a view request.</p>
-
-     */
-    public static final String RESOURCE_IDENTIFIER = "/javax.faces.resource";
-
-
-    /**
-     * <p class="changed_added_2_0">The name of a key within the
-     * application message bundle named by the return from {@link
-     * Application#getMessageBundle} whose value is the locale prefix
-     * used to find a packaged resource to return from {@link
-     * #createResource} (or one of its variants).
-     */
-
-    public static final String LOCALE_PREFIX = 
-	"javax.faces.resource.localePrefix";
-
-
-
-    /**
-     * <p class="changed_added_2_0">The <code>ServletContext</code> init
-     * parameter consulted by the {@link #handleResourceRequest} to tell
-     * which kinds of resources must never be served up in response to a
-     * resource request.  The value of this parameter is a single space
-     * separated list of file extensions, including the leading '.'
-     * character (without the quotes).  If not specified, the default
-     * value given in the value of the {@link
-     * #RESOURCE_EXCLUDES_DEFAULT_VALUE} constant is used.  If manually
-     * specified, the given value entirely overrides the default one and
-     * does not supplement it.  </p>
-     */
-    public static final String RESOURCE_EXCLUDES_PARAM_NAME =
-          "javax.faces.RESOURCE_EXCLUDES";
-
-    /**
-     * <p class="changed_added_2_0">The default value for the {@link
-     * #RESOURCE_EXCLUDES_PARAM_NAME} init param.</p>
-     */
-    public static final String RESOURCE_EXCLUDES_DEFAULT_VALUE =
-          ".class .jsp .jspx .properties .xhtml";
-
-
-
-    // ---------------------------------------------------------- Public Methods
-    
-
-    /**
-     * <p class="changed_added_2_0">Create an instance of
-     * <code>Resource</code> given the argument
-     * <code>resourceName</code>.  The content-type of the resource is
-     * derived by passing the <em>resourceName</em> to {@link
-     * javax.faces.context.ExternalContext#getMimeType}</p>
-
-     * <div class="changed_added_2_0">
-
-     * <p>The algorithm specified in section JSF.2.6.1.4 of the spec prose
-     * document <a
-     * href="../../../overview-summary.html#prose_document">linked in
-     * the overview summary</a> must be executed to create the
-     * <code>Resource</code></p>
-
-     * </div>
-
-     * @param resourceName the name of the resource.
-     *
-     * @throws NullPointerException if <code>resourceName</code> is
-     *  <code>null</code>.
-     *
-     * @return a newly created <code>Resource</code> instance, suitable
-     * for use in encoding or decoding the named resource.
-     */
-    public abstract Resource createResource(String resourceName);
-
-
-    /**
-     * <p class="changed_added_2_0">Create an instance of
-     * <code>Resource</code> with a resourceName given by the value of
-     * the argument <code>resourceName</code> that is a member of the
-     * library named by the argument <code>libraryName</code>.  The
-     * content-type of the resource is derived by passing the
-     * <em>resourceName</em> to
-     * {@link javax.faces.context.ExternalContext#getMimeType}.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * <p>The algorithm specified in section JSF.2.6.1.4 of the spec prose
-     * document <a
-     * href="../../../overview-summary.html#prose_document">linked in
-     * the overview summary</a> must be executed to create the
-     * <code>Resource</code></p>
-
-     * </div>
-
-     * @param resourceName the name of the resource.
-     *
-     * @param libraryName the name of the library in which this resource
-     * resides, may be <code>null</code>. <span
-     * class="changed_modified_2_0_rev_a">May not include relative
-     * paths, such as "../".</span>
-     *
-     * @throws <code>NullPointerException</code> if
-     * <code>resourceName</code> is <code>null</code>
-     *
-     * @return a newly created <code>Resource</code> instance, suitable
-     * for use in encoding or decoding the named resource.
-     */
-    public abstract Resource createResource(String resourceName,
-                                            String libraryName);
-
-
-    /**
-     * <p class="changed_added_2_0">Create an instance of
-     * <code>Resource</code> with a <em>resourceName</em> given by the
-     * value of the argument <code>resourceName</code> that is a member
-     * of the library named by the argument <code>libraryName</code>
-     * that claims to have the content-type given by the argument
-     * <code>content-type</code>.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * <p>The algorithm specified in section JSF.2.6.1.4 of the spec prose
-     * document <a
-     * href="../../../overview-summary.html#prose_document">linked in
-     * the overview summary</a> must be executed to create the
-     * <code>Resource</code></p>
-
-     * </div>
-
-     * @param resourceName the name of the resource.
-     *
-     * @param libraryName the name of the library in which this resource
-     * resides, may be <code>null</code>.  <span
-     * class="changed_modified_2_0_rev_a">May not include relative
-     * paths, such as "../".</span>
-     *
-     * @param contentType the mime content that this
-     * <code>Resource</code> instance will return from {@link
-     * Resource#getContentType}.  If the value is <code>null</code>, The
-     * content-type of the resource is derived by passing the
-     * <em>resourceName</em> to {@link
-     * javax.faces.context.ExternalContext#getMimeType}</p>
-     *
-     * @throws <code>NullPointerException</code> if
-     * <code>resourceName</code> is <code>null</code>.
-     *
-     * @return a newly created <code>Resource</code> instance, suitable
-     * for use in encoding or decoding the named resource.
-     */
-    public abstract Resource createResource(String resourceName,
-                                            String libraryName,
-                                            String contentType);
-    
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if the 
-     * resource library named by the argument <code>libraryName</code>
-     * can be found.</p>
-     *
-     * @since 2.0
-     * 
-     */
-    
-    public abstract boolean libraryExists(String libraryName);
-
-
-    /**
-     * <p class="changed_added_2_0">This method specifies the contract
-     * for satisfying resource requests.  This method is called from
-     * {@link javax.faces.webapp.FacesServlet#service} after that method
-     * determines the current request is a resource request by calling
-     * {@link #isResourceRequest}.  Thus, <code>handleResourceRequest</code>
-     * may assume that the current request is a resource request.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p>The default implementation must implement an algorithm
-     * semantically identical to the following algorithm.</p>
-     *
-     * For discussion, in all cases when a status code is to be set,
-     * this spec talks only using the Servlet API, but it is understood
-     * that in a portlet environment the appropriate equivalent API must
-     * be used.
-     *
-     * <ul>
-     *
-     * <li><p>If the <em>resourceIdentifier</em> ends with any of the
-     * extensions listed in the value of the {@link
-     * #RESOURCE_EXCLUDES_PARAM_NAME} init parameter,
-     * <code>HttpServletRequest.SC_NOT_FOUND</code> must be passed to
-     * <code>HttpServletResponse.setStatus()</code>, then
-     * <code>handleResourceRequest</code> must immediately return.</p></li>
-     *
-     * <li><p>Extract the <em>resourceName</em> from the
-     * <em>resourceIdentifier</em> by taking the substring of
-     * <em>resourceIdentifier</em> that starts at <code>{@link
-     * #RESOURCE_IDENTIFIER}.length() + 1</code> and goes to the end of
-     * <em>resourceIdentifier</em>.  If no <em>resourceName</em> can be
-     * extracted, <code>HttpServletRequest.SC_NOT_FOUND</code> must be
-     * passed to <code>HttpServletResponse.setStatus()</code>, then
-     * <code>handleResourceRequest</code> must immediately return.</p></li>
-     *
-     * <li><p>Extract the <em>libraryName</em> from the request by
-     * looking in the request parameter map for an entry under the key
-     * "ln", without the quotes.  If found, use its value as the
-     * <em>libraryName</em>.</p></li>
-     *
-     * <li><p>If <em>resourceName</em> and <em>libraryName</em> are
-     * present, call {@link #createResource(String, String)} to create
-     * the <code>Resource</code>.  If only <em>resourceName</em> is
-     * present, call {@link #createResource(String)} to create the
-     * <code>Resource</code>.  If the <code>Resource</code> cannot be
-     * successfully created,
-     * <code>HttpServletRequest.SC_NOT_FOUND</code> must be passed to
-     * <code>HttpServletResponse.setStatus()</code>, then
-     * <code>handleResourceRequest</code> must immediately return.</p></li>
-     *
-     * <li><p>Call {@link Resource#userAgentNeedsUpdate}.  If this
-     * method returns false,
-     * <code>HttpServletRequest.SC_NOT_MODIFIED</code> must be passed to
-     * <code>HttpServletResponse.setStatus()</code>, then
-     * <code>handleResourceRequest</code> must immediately return.</p></li>
-     *
-     * <li><p>Pass the result of {@link Resource#getContentType} to
-     * <code>HttpServletResponse.setContentType.</code> </p></li>
-     *
-     * <li><p>Call {@link Resource#getResponseHeaders}.  For each entry
-     * in this <code>Map</code>, call
-     * <code>HttpServletResponse.setHeader()</code>, passing the key as
-     * the first argument and the value as the second argument.</p></li>
-     *
-     * <li><p>Call {@link Resource#getInputStream} and serve up the
-     * bytes of the resource to the response.</p></li>
-     *
-     * <li><p>Call <code>HttpServletResponse.setContentLength()</code>
-     * passing the byte count of the resource.</p></li>
-     *
-     * <li><p>If an <code>IOException</code> is thrown during any of the
-     * previous steps, log a descriptive, localized message, including
-     * the <em>resourceName</em> and <em>libraryName</em> (if present).
-     * Then, <code>HttpServletRequest.SC_NOT_FOUND</code> must be passed
-     * to <code>HttpServletResponse.setStatus()</code>, then
-     * <code>handleResourceRequest</code> must immediately return.</p></li>
-     *
-     * <li><p>In all cases in this method, any streams, channels,
-     * sockets, or any other IO resources must be closed before this
-     * method returns.</p></li>
-     *
-     * </ul>
-     *
-     * </div>
-     *
-     * @param context the {@link javax.faces.context.FacesContext} for this
-     * request
-     */
-    public abstract void handleResourceRequest(FacesContext context)
-    throws IOException;
-
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if the
-     * current request is a resource request.  This method is called by
-     * {@link javax.faces.webapp.FacesServlet#service} to determine if
-     * this request is a <em>view request</em> or a <em>resource
-     * request</em>.</p>
-     *
-     * @param context the {@link javax.faces.context.FacesContext} for this
-     * request
-     * @return <code>true</code> if the current request is a resource
-     * request, <code>false</code> otherwise.
-     */
-    public abstract boolean isResourceRequest(FacesContext context);
-    
-    /**
-     * <p class="changed_added_2_0">Return the <code>renderer-type</code> for a 
-     * {@link javax.faces.render.Renderer} that is capable of rendering this 
-     * resource. The default implementation must return values according to the
-     * following table.  If no <code>renderer-type</code> can be determined,
-     * <code>null</code> must be returned.</p> 
-     * 
-     * <table border="1">
-     * 
-     * <tr>
-     * 
-     * <th>example resource name</th>
-     * 
-     * <th>renderer-type</th>
-     * 
-     * </tr>
-     * 
-     * <tr>
-     * 
-     * <td>mycomponent.js</td>
-     * 
-     * <td><code>javax.faces.resource.Script</code></td>
-     * 
-     * </tr>
-     * 
-     * <tr>
-     * 
-     * <td>mystyle.css</td>
-     * 
-     * <td><code>javax.faces.resource.Stylesheet</code></td>
-     * 
-     * </tr>
-     * 
-     * </table>
-     */
-    
-    public abstract String getRendererTypeForResourceName(String resourceName);
-    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ResourceHandlerWrapper.java b/jsf-api/src/main/java/javax/faces/application/ResourceHandlerWrapper.java
deleted file mode 100644
index 88f0c87..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ResourceHandlerWrapper.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.io.IOException;
-
-import javax.faces.FacesWrapper;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">Provides a simple implementation of
- * {@link ResourceHandler} that can be subclassed by developers wishing
- * to provide specialized behavior to an existing {@link
- * ResourceHandler} instance.  The default implementation of all methods
- * is to call through to the wrapped {@link ResourceHandler}.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance we are wrapping.</p>
- *
- * </div>
- *
- * @since 2.0
- */
-public abstract class ResourceHandlerWrapper extends ResourceHandler implements FacesWrapper<ResourceHandler> {
-
-    /**
-     * @return the instance that we are wrapping.
-     */ 
-    public abstract ResourceHandler getWrapped();
-
-
-    // -------------------------------------------- Methods from ResourceHandler
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResourceHandler#createResource(String)} on the
-     * wrapped {@link ResourceHandler} object.</p>
-     */
-    public Resource createResource(String resourceName) {
-
-        return getWrapped().createResource(resourceName);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResourceHandler#createResource(String, String)} on the wrapped
-     * {@link ResourceHandler} object.</p>
-     */
-    public Resource createResource(String resourceName, String libraryName) {
-
-        return getWrapped().createResource(resourceName, libraryName);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResourceHandler#createResource(String, String,
-     * String)} on the wrapped {@link ResourceHandler} object.</p>
-     */
-    public Resource createResource(String resourceName,
-                                   String libraryName,
-                                   String contentType) {
-
-        return getWrapped().createResource(resourceName,
-                                           libraryName,
-                                           contentType);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link
-     * ResourceHandler#handleResourceRequest(javax.faces.context.FacesContext)}
-     * on the wrapped {@link ResourceHandler} object.</p>
-     */
-    public void handleResourceRequest(FacesContext context) throws IOException {
-
-        getWrapped().handleResourceRequest(context);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResourceHandler#isResourceRequest(javax.faces.context.FacesContext)} on the
-     * wrapped {@link ResourceHandler} object.</p>
-     */
-    public boolean isResourceRequest(FacesContext context) {
-
-        return getWrapped().isResourceRequest(context);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResourceHandler#libraryExists(String)} on the
-     * wrapped {@link ResourceHandler} object.</p>
-     */
-    public boolean libraryExists(String libraryName) {
-
-        return getWrapped().libraryExists(libraryName);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResourceHandler#getRendererTypeForResourceName(String)} on the
-     * wrapped {@link ResourceHandler} object.</p>
-     */
-    public String getRendererTypeForResourceName(String resourceName) {
-
-        return getWrapped().getRendererTypeForResourceName(resourceName);
-
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ResourceWrapper.java b/jsf-api/src/main/java/javax/faces/application/ResourceWrapper.java
deleted file mode 100644
index 2438307..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ResourceWrapper.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Map;
-
-import javax.faces.FacesWrapper;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">Provides a simple implementation of
- * {@link Resource} that can be subclassed by developers wishing to
- * provide specialized behavior to an existing {@link Resource}
- * instance.  The default implementation of all methods is to call
- * through to the wrapped {@link Resource}.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>Usage: extend
- * this class and override {@link #getWrapped} to return the instance we
- * are wrapping.</p>
- *
- * </div>
- *
- * @since 2.0
- */
-public abstract class ResourceWrapper extends Resource implements FacesWrapper<Resource> {
-
-    /**
-     * @return the instance that we are wrapping.
-     */ 
-    public abstract Resource getWrapped();
-
-
-    // --------------------------------------------------- Methods from Resource
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Resource#getInputStream} on the wrapped {@link
-     * ResourceHandler} object.</p>
-     */
-    public InputStream getInputStream() throws IOException {
-
-        return getWrapped().getInputStream();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Resource#getURL} on the wrapped {@link
-     * ResourceHandler} object.</p>
-     */
-    public URL getURL() {
-
-        return getWrapped().getURL();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Resource#getResponseHeaders} on the wrapped {@link
-     * ResourceHandler} object.</p>
-     */
-    public Map<String, String> getResponseHeaders() {
-
-        return getWrapped().getResponseHeaders();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Resource#getRequestPath} on the wrapped {@link
-     * ResourceHandler} object.</p>
-     */
-    public String getRequestPath() {
-
-        return getWrapped().getRequestPath();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link Resource#userAgentNeedsUpdate} on the wrapped {@link
-     * ResourceHandler} object.</p>
-     */
-    public boolean userAgentNeedsUpdate(FacesContext context) {
-
-        return getWrapped().userAgentNeedsUpdate(context);
-        
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/StateManager.java b/jsf-api/src/main/java/javax/faces/application/StateManager.java
deleted file mode 100644
index 49125d8..0000000
--- a/jsf-api/src/main/java/javax/faces/application/StateManager.java
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.ResponseStateManager;
-
-import java.io.IOException;
-
-
-/**
- * <p><strong class="changed_modified_2_0">StateManager</strong> directs the 
- * process of saving and
- * restoring the view between requests.  <span class="changed_added_2_0">An
- * implementation
- * of this class must be thread-safe.</span>  The {@link StateManager}
- * instance for an application is retrieved from the {@link Application}
- * instance, and thus cannot know any details of the markup language
- * created by the {@link RenderKit} being used to render a view.  The
- * {@link StateManager} utilizes a helper object ({@link
- * ResponseStateManager}), that is provided by the {@link RenderKit}
- * implementation and is therefore aware of the markup language
- * details.</p>
- */
-
-public abstract class StateManager {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The <code>ServletContext</code> init parameter consulted by
-     * the <code>StateManager</code> to tell where the state should be
-     * saved.  Valid values are given as the values of the constants:
-     * {@link #STATE_SAVING_METHOD_CLIENT} or {@link
-     * #STATE_SAVING_METHOD_SERVER}.</p>
-     * <p/>
-     * <p>If this parameter is not specified, the default value is the
-     * value of the constant {@link #STATE_SAVING_METHOD_CLIENT}. </p>
-     */
-    public static final String STATE_SAVING_METHOD_PARAM_NAME =
-          "javax.faces.STATE_SAVING_METHOD";
-
-    /**
-     * <p class="changed_added_2_0">The <code>ServletContext</code> init
-     * parameter consulted by the runtime to determine if the partial
-     * state saving mechanism should be used.</p>
-
-     * <div class="changed_added_2_0">
-
-     * <p>If undefined, the runtime must determine the version level of
-     * the application.</p>
-     *
-     * <ul>
-
-     * <li><p>For applications versioned at 1.2 and under, the runtime
-     * must not use the partial state saving mechanism.</li><p>
-
-     * <li><p>For applications versioned at 2.0 and above, the runtime
-     * must use the partial state saving mechanism.</p></li>
-
-     * </ul>
-
-     * <p>If this parameter is defined, and the application is versioned
-     * at 1.2 and under, the runtime must not use the partial state
-     * saving mechanism.  Otherwise, If this param is defined, and
-     * calling <code>toLowerCase().equals("true")</code> on a
-     * <code>String</code> representation of its value returns
-     * <code>true</code>, the runtime must use partial state mechanism.
-     * Otherwise the partial state saving mechanism must not be
-     * used.</p>
-
-     * </div>
-     *
-     * @since 2.0
-     */
-   
-    public static final String PARTIAL_STATE_SAVING_PARAM_NAME =
-          "javax.faces.PARTIAL_STATE_SAVING";
-
-
-    /**
-     * <p class="changed_added_2_0">The runtime must interpret the value
-     * of this parameter as a comma separated list of view IDs, each of
-     * which must have their state saved using the state saving
-     * mechanism specified in JSF 1.2.</p>
-     */
-    public static final String FULL_STATE_SAVING_VIEW_IDS_PARAM_NAME =
-          "javax.faces.FULL_STATE_SAVING_VIEW_IDS";
-
-
-    /**
-     * <p>Constant value for the initialization parameter named by
-     * the <code>STATE_SAVING_METHOD_PARAM_NAME</code> that indicates
-     * state saving should take place on the client.</p>
-     */                                   
-    public static final String STATE_SAVING_METHOD_CLIENT = "client";
-
-
-    /**
-     * <p>Constant value for the initialization parameter named by
-     * the <code>STATE_SAVING_METHOD_PARAM_NAME</code> that indicates
-     * state saving should take place on the server.</p>
-     */
-    public static final String STATE_SAVING_METHOD_SERVER = "server";
-
-    // ---------------------------------------------------- State Saving Methods
-
-
-    /**
-     * <p>Return the tree structure and component state information for the
-     * view contained in the specified {@link FacesContext} instance as an
-     * object of type <code>StateManager.SerializedView</code>.  If there
-     * is no state information to be saved, return <code>null</code>
-     * instead.</p>
-     * <p/>
-     * <p>Components may opt out of being included in the serialized view
-     * by setting their <code>transient</code> property to <code>true</code>.
-     * This must cause the component itself, as well as all of that component's
-     * children and facets, to be omitted from the saved  tree structure
-     * and component state information.</p>
-     * <p/>
-     * <p>This method must also enforce the rule that, for components with
-     * non-null <code>id</code>s, all components that are descendants of the
-     * same nearest {@link NamingContainer} must have unique identifiers.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-      *
-     * @throws IllegalStateException if more than one component or
-     *                               facet within the same {@link NamingContainer} in this view has
-     *                               the same non-<code>null</code> component id
-     * @deprecated this has been replaced by {@link #saveView}.  The
-     * default implementation calls <code>saveView</code> and inspects the 
-     * return.  If the return is an <code>Object []</code>, it casts the
-     * result to an <code>Object []</code> wrapping the first and second
-     * elements in an instance of {@link SerializedView}, which it then
-     * returns.  Otherwise, it return <code>null</code>
-     */
-    public SerializedView saveSerializedView(FacesContext context) {
-
-        Object stateObj = saveView(context);
-        SerializedView result = null;
-        if (null != stateObj) {
-            if (stateObj instanceof Object[]) {
-                Object [] state = (Object[]) stateObj;
-                if (state.length == 2) {
-                    result = new SerializedView(state[0], state[1]);
-                }
-            }
-        } 
-        return result;
-    }
-
-    /**
-     * <p>Return an opaque <code>Object</code> containing sufficient
-     * information for this same instance to restore the state of the
-     * current {@link UIViewRoot} on a subsequent request.  The returned
-     * object must implement <code>java.io.Serializable</code>. If there
-     * is no state information to be saved, return <code>null</code>
-     * instead.</p>
-     * <p/>
-     * <p>Components may opt out of being included in the serialized view
-     * by setting their <code>transient</code> property to <code>true</code>.
-     * This must cause the component itself, as well as all of that component's
-     * children and facets, to be omitted from the saved  tree structure
-     * and component state information.</p>
-     * <p/>
-     * <p>This method must also enforce the rule that, for components with
-     * non-null <code>id</code>s, all components that are descendants of the
-     * same nearest {@link NamingContainer} must have unique identifiers.</p>
-     * <p/>
-     * <p>For backwards compatability with existing
-     * <code>StateManager</code> implementations, the default
-     * implementation of this method calls {@link #saveSerializedView}
-     * and creates and returns a two element <code>Object</code> array
-     * with element zero containing the <code>structure</code> property
-     * and element one containing the <code>state</code> property of the
-     * <code>SerializedView</code>.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws IllegalStateException if more than one component or
-     *                               facet within the same {@link NamingContainer} in this view has
-     *                               the same non-<code>null</code> component id
-     * @since 1.2
-     */
-    public Object saveView(FacesContext context) {
-        SerializedView view = saveSerializedView(context);
-        Object stateArray[] = {view.getStructure(),
-                               view.getState()};
-        return stateArray;
-    }
-
-
-    /**
-     * <p>Convenience method, which must be called by
-     * <code>saveSerializedView()</code>, to construct and return a
-     * <code>Serializable</code> object that represents the structure
-     * of the entire component tree (including children and facets)
-     * of this view.</p>
-     * <p/>
-     * <p>Components may opt-out of being included in the tree structure
-     * by setting their <code>transient</code> property to <code>true</code>.
-     * This must cause the component itself, as well as all of that component's
-     * children and facets, to be omitted from the saved  tree structure
-     * information.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @deprecated the distinction between tree structure and component
-     *             state is now an implementation detail.  The default
-     *             implementation returns <code>null</code>.
-     */
-    protected Object getTreeStructureToSave(FacesContext context) {
-        return null;
-    }
-
-
-    /**
-     * <p>Convenience method, which must be called by
-     * <code>saveSerializedView()</code>, to construct and return a
-     * <code>Serializable</code> object that represents the state of
-     * all component properties, attributes, and attached objects, for
-     * the entire component tree (including children and facets)
-     * of this view.</p>
-     * <p/>
-     * <p>Components may opt-out of being included in the component state
-     * by setting their <code>transient</code> property to <code>true</code>.
-     * This must cause the component itself, as well as all of that component's
-     * children and facets, to be omitted from the saved component state
-     * information.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @deprecated the distinction between tree structure and component
-     *             state is now an implementation detail.  The default
-     *             implementation returns <code>null</code>.
-     */
-    protected Object getComponentStateToSave(FacesContext context) {
-        return null;
-    }
-
-    /**
-     * <p>Save the state represented in the specified state
-     * <code>Object</code> instance, in an implementation dependent
-     * manner.</p>
-     * <p/>
-     * <p>This method will typically simply delegate the actual
-     * writing to the <code>writeState()</code> method of the
-     * {@link ResponseStateManager} instance provided by the
-     * {@link RenderKit} being used to render this view.  This
-     * method assumes that the caller has positioned the
-     * {@link ResponseWriter} at the correct position for the
-     * saved state to be written.</p>
-     * <p/>
-     * <p>For backwards compatability with existing
-     * <code>StateManager</code> implementations, the default
-     * implementation of this method checks if the argument is an
-     * instance of <code>Object []</code> of length greater than or
-     * equal to two.  If so, it creates a <code>SerializedView</code>
-     * instance with the tree structure coming from element zero and
-     * the component state coming from element one and calls through to
-     * {@link
-     * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView)}.
-     * If not, does nothing.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param state   the Serializable state to be written,
-     *                as returned by {@link #saveSerializedView}
-     *
-     * @since 1.2
-     */
-    public void writeState(FacesContext context, Object state)
-          throws IOException {
-        if (null != state && state.getClass().isArray() &&
-            state.getClass().getComponentType().equals(Object.class)) {
-            Object stateArray[] = (Object[]) state;
-            if (2 == stateArray.length) {
-                SerializedView view = new SerializedView(stateArray[0],
-                                                         stateArray[1]);
-                writeState(context, view);
-            }
-        }
-    }
-
-    /**
-     * <p>Save the state represented in the specified
-     * <code>SerializedView</code> isntance, in an implementation
-     * dependent manner.</p>
-     * <p/>
-     * <p>This method must consult the context initialization parameter
-     * named by the symbolic constant
-     * <code>StateManager.STATE_SAVING_METHOD_PARAM_NAME</code>
-     * to determine whether state should be saved on the client or the
-     * server.  If not present, client side state saving is assumed.</p>
-     * <p/>
-     * <p>If the init parameter indicates that client side state
-     * saving should be used, this method must delegate the actual
-     * writing to the <code>writeState()</code> method of the
-     * {@link ResponseStateManager} instance provided by the
-     * {@link RenderKit} being used to render this view.  This
-     * method assumes that the caller has positioned the
-     * {@link ResponseWriter} at the correct position for the
-     * saved state to be written.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param state   the serialized state to be written
-     *
-     * @deprecated This method has been replaced by {@link
-     *             #writeState(javax.faces.context.FacesContext,java.lang.Object)}.
-     *             The default implementation calls the non-deprecated variant
-     * of the method passing an <code>Object []</code> as the second
-     * argument, where the first element of the array is the return from
-     * <code>getStructure()</code> and the second is the return from
-     * <code>getState()</code> on the argument <code>state</code>.
-     * 
-     */
-    public void writeState(FacesContext context,
-                           SerializedView state) throws IOException {
-
-        if (state != null) {
-            writeState(context, new Object[]{state.getStructure(),
-                                             state.getState()});
-        }
-        
-    }
-
-    // ------------------------------------------------- State Restoring Methods
-
-
-    /**
-     * <p>Restore the tree structure and the component state of the view
-     * for the specified <code>viewId</code>, in an implementation dependent
-     * manner, and return the restored {@link UIViewRoot}.  If there is no
-     * saved state information available for this <code>viewId</code>,
-     * return <code>null</code> instead.</p>
-     * <p/>
-     * <p>This method must consult the context initialization parameter
-     * named by the symbolic constant
-     * <code>StateManager.STATE_SAVING_METHOD_PARAM_NAME</code>
-     * to determine whether state should be saved on the client or the
-     * server.  If not present, client side state saving is assumed.</p>
-     * <p/>
-     * <p>If the init parameter indicates that client side state
-     * saving should be used, this method must call the
-     * <code>getTreeStructureToRestore()</code> and (if the previous method
-     * call returned a non-null value) <code>getComponentStateToRestore()</code>
-     * methods of the {@link ResponseStateManager} instance provided by the
-     * {@link RenderKit} responsible for this view.</p>
-     *
-     * @param context     {@link FacesContext} for the current request
-     * @param viewId      View identifier of the view to be restored
-     * @param renderKitId the renderKitId used to render this response.
-     *                    Must not be <code>null</code>.
-     *
-     * @throws IllegalArgumentException if <code>renderKitId</code>
-     *                                  is <code>null</code>.
-     */
-    public abstract UIViewRoot restoreView(FacesContext context, String viewId,
-                                           String renderKitId);
-
-
-    /**
-     * <p>Convenience method, which must be called by
-     * <code>restoreView()</code>, to construct and return a {@link UIViewRoot}
-     * instance (populated with children and facets) representing the
-     * tree structure of the component tree being restored.  If no saved
-     * state information is available, return <code>null</code> instead.</p>
-     *
-     * @param context     {@link FacesContext} for the current request
-     * @param viewId      View identifier of the view to be restored
-     * @param renderKitId the renderKitId used to render this response.
-     *                    Must not be <code>null</code>.
-     *
-     * @throws IllegalArgumentException if <code>renderKitId</code>
-     *                                  is <code>null</code>.
-     * @deprecated the distinction between tree structure and component
-     *             state is now an implementation detail.  The default
-     *             implementation returns <code>null</code>.
-     */
-    protected UIViewRoot restoreTreeStructure(FacesContext context,
-                                              String viewId,
-                                              String renderKitId) {
-        return null;
-    }
-
-
-    /**
-     * <p>Convenience method, which must be called by
-     * <code>restoreView()</code>, to restore the attributes, properties,
-     * and attached objects of all components in the restored component tree.
-     * </p>
-     *
-     * @param context     {@link FacesContext} for the current request
-     * @param viewRoot    {@link UIViewRoot} returned by a previous call
-     *                    to <code>restoreTreeStructure()</code>
-     * @param renderKitId the renderKitId used to render this response.
-     *                    Must not be <code>null</code>.
-     *
-     * @throws IllegalArgumentException if <code>renderKitId</code>
-     *                                  is <code>null</code>.
-     * @deprecated the distinction between tree structure and component
-     *             state is now an implementation detail.  The default
-     *             implementation does nothing.
-     */
-    protected void restoreComponentState(FacesContext context,
-                                         UIViewRoot viewRoot,
-                                         String renderKitId) {
-    }
-
-
-    private Boolean savingStateInClient = null;
-
-    /**
-     * @return <code>true</code> if and only if the value of the
-     *         <code>ServletContext</code> init parameter named by the value of
-     *         the constant {@link #STATE_SAVING_METHOD_PARAM_NAME} is equal to
-     *         the value of the constant {@link #STATE_SAVING_METHOD_CLIENT}.
-     *         <code>false</code> otherwise.
-     *
-     * @throws NullPointerException if <code>context</code> is
-     *                              <code>null</code>.
-     */
-
-    public boolean isSavingStateInClient(FacesContext context) {
-        if (null != savingStateInClient) {
-            return savingStateInClient.booleanValue();
-        }
-        savingStateInClient = Boolean.FALSE;
-
-        String saveStateParam = context.getExternalContext().
-              getInitParameter(STATE_SAVING_METHOD_PARAM_NAME);
-        if (saveStateParam != null &&
-            saveStateParam.equalsIgnoreCase(STATE_SAVING_METHOD_CLIENT)) {
-            savingStateInClient = Boolean.TRUE;
-        }
-        return savingStateInClient.booleanValue();
-    }
-
-    /**
-     * <p>Convenience struct for encapsulating tree structure and
-     * component state.  This is necessary to allow the API to be
-     * flexible enough to work in JSP and non-JSP environments.</p>
-     *
-     * @deprecated This class was not marked <code>Serializable</code>
-     *             in the 1.0 version of the spec.  It was also not a static inner
-     *             class, so it can't be made to be <code>Serializable</code>.
-     *             Therefore, it is being deprecated in version 1.2 of the spec.
-     *             The replacement is to use an implementation dependent
-     *             <code>Object</code>.
-     */
-
-    public class SerializedView extends Object {
-        private Object structure = null;
-        private Object state = null;
-
-        public SerializedView(Object newStructure, Object newState) {
-            structure = newStructure;
-            state = newState;
-        }
-
-        public Object getStructure() {
-            return structure;
-        }
-
-        public Object getState() {
-            return state;
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0">
-     * Convenience method to return the view state as a <code>String</code> with
-     * no <code>RenderKit</code> specific markup.
-     *
-     * This default implementation of this method will call {@link #saveView(javax.faces.context.FacesContext)}
-     * and passing the result to and returning the resulting value from
-     * {@link ResponseStateManager#getViewState(javax.faces.context.FacesContext, Object)}.
-     * </p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @since 2.0
-     */
-    public String getViewState(FacesContext context) {
-
-        Object state = saveView(context);
-        if (state != null) {
-            return context.getRenderKit().getResponseStateManager()
-                  .getViewState(context, state);
-        }
-        return null;
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/StateManagerWrapper.java b/jsf-api/src/main/java/javax/faces/application/StateManagerWrapper.java
deleted file mode 100644
index 3b14efa..0000000
--- a/jsf-api/src/main/java/javax/faces/application/StateManagerWrapper.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIViewRoot;
-
-import java.io.IOException;
-import javax.faces.FacesWrapper;
-
-/**
- * <p>Provides a simple implementation of {@link StateManager} that can
- * be subclassed by developers wishing to provide specialized behavior
- * to an existing {@link StateManager} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link StateManager}.</p>
- *
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance we are wrapping.</p>
- *
- * @since 1.2
- */
-public abstract class StateManagerWrapper extends StateManager implements FacesWrapper<StateManager> {
-
-    /**
-     * @return the instance that we are wrapping.
-     */ 
-
-    public abstract StateManager getWrapped();
-
-    // ----------------------- Methods from javax.faces.application.StateManager
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#saveSerializedView(javax.faces.context.FacesContext)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#saveSerializedView(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-    public SerializedView saveSerializedView(FacesContext context) {
-
-        return getWrapped().saveSerializedView(context);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#saveView(javax.faces.context.FacesContext)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#saveView(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-    public Object saveView(FacesContext context) {
-        return getWrapped().saveView(context);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#getTreeStructureToSave(javax.faces.context.FacesContext)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#getTreeStructureToSave(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-    protected Object getTreeStructureToSave(FacesContext context) {
-
-        return getWrapped().getTreeStructureToSave(context);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#getComponentStateToSave(javax.faces.context.FacesContext)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#getComponentStateToSave(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-    protected Object getComponentStateToSave(FacesContext context) {
-
-        return getWrapped().getComponentStateToSave(context);
-
-    }
-
-    /**
-     * <p>The default behavior of this method is to call {@link
-     * StateManager#writeState(javax.faces.context.FacesContext,
-     * java.lang.Object)} on the wrapped {@link StateManager}
-     * object.</p>
-     *
-     * @see StateManager#writeState(javax.faces.context.FacesContext,
-     * java.lang.Object)
-     * @since 1.2
-     */
-    public void writeState(FacesContext context,
-                           Object state)
-    throws IOException {
-
-        getWrapped().writeState(context, state);
-
-    }
-
-
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#writeState(javax.faces.context.FacesContext, javax.faces.application.StateManager.SerializedView)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#writeState(javax.faces.context.FacesContext, javax.faces.application.StateManager.SerializedView)
-     * @since 1.2
-     */
-    public void writeState(FacesContext context,
-                           SerializedView state)
-    throws IOException {
-
-        getWrapped().writeState(context, state);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#restoreView(javax.faces.context.FacesContext, String, String)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#restoreView(javax.faces.context.FacesContext, String, String)
-     * @since 1.2
-     */
-    public UIViewRoot restoreView(FacesContext context, String viewId,
-                                  String renderKitId) {
-
-        return getWrapped().restoreView(context, viewId, renderKitId);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#restoreTreeStructure(javax.faces.context.FacesContext, String, String)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#restoreTreeStructure(javax.faces.context.FacesContext, String, String)
-     * @since 1.2
-     */
-    protected UIViewRoot restoreTreeStructure(FacesContext context,
-                                              String viewId,
-                                              String renderKitId) {
-
-        return getWrapped().restoreTreeStructure(context, viewId, renderKitId);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#restoreComponentState(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot, String)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#restoreComponentState(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot, String)
-     * @since 1.2
-     */
-    protected void restoreComponentState(FacesContext context,
-                                         UIViewRoot viewRoot,
-                                         String renderKitId) {
-
-        getWrapped().restoreComponentState(context, viewRoot, renderKitId);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link StateManager#isSavingStateInClient(javax.faces.context.FacesContext)}
-     * on the wrapped {@link StateManager} object.</p>
-     *
-     * @see StateManager#isSavingStateInClient(javax.faces.context.FacesContext) 
-     * @since 1.2
-     */
-    public boolean isSavingStateInClient(FacesContext context) {
-
-        return getWrapped().isSavingStateInClient(context);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link StateManager#getViewState(javax.faces.context.FacesContext)} on the
-     * wrapped {@link StateManager} object.</p>
-     *
-     * @since 2.0
-     */
-    @Override
-    public String getViewState(FacesContext context) {
-
-        return getWrapped().getViewState(context);
-
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ViewExpiredException.java b/jsf-api/src/main/java/javax/faces/application/ViewExpiredException.java
deleted file mode 100644
index 92f696e..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ViewExpiredException.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.application;
-
-import javax.faces.FacesException;
-
-/**
- * <p>Implementations must throw this {@link FacesException} when
- * attempting to restore the view {@link StateManager#restoreView(javax.faces.context.FacesContext, String, String)} 
- * results in failure on postback.</p>
- *
- * @since 1.2
- */
-
-public class ViewExpiredException extends FacesException {
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public ViewExpiredException() {
-
-        super();
-
-    }
-
-    /**
-     *<p>Construct a new exception with the specified view identifier.</p>
-     *
-     * @param viewId The view identifier for this exception
-     */
-    public ViewExpiredException(String viewId) {
-        
-        this.viewId = viewId;
-        
-    }
-    
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param viewId The view identifier for this exception
-     */
-    public ViewExpiredException(String message, String viewId) {
-
-        super(message);
-        this.viewId = viewId;
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.  The detail
-     * message will be set to <code>(cause == null ? null :
-     * cause.toString()</code>
-     *
-     * @param cause The root cause for this exception
-     * @param viewId The view identifier for this exception
-     */
-    public ViewExpiredException(Throwable cause, String viewId) {
-
-        super(cause);
-        this.viewId = viewId;
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause The root cause for this exception
-     * @param viewId The view identifier for this exception
-     */
-    public ViewExpiredException(String message, Throwable cause, String viewId) {
-
-        super(message, cause);
-        this.viewId = viewId;
-
-    }
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    /**
-     * <p>The view identifier of the view that could not be restored.</p>
-     */
-    private String viewId = null;
-    
-    
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Return the view identifier of this exception, or <code>null</code> if the
-     * view identifier is nonexistent or unknown.</p>
-     */
-    public String getViewId() {
-
-        return (this.viewId);
-
-    }
-
-    /**
-     * <p>Return the message for this exception prepended with the view identifier
-     * if the view identifier is not <code>null</code>, otherwise, return the 
-     * message.</p>
-     */
-    public String getMessage() {
-
-        if (viewId != null) {
-            return "viewId:" + viewId + " - " + super.getMessage();
-        }
-        return super.getMessage();
-
-    }
-    
-}
-
-    
-    
diff --git a/jsf-api/src/main/java/javax/faces/application/ViewHandler.java b/jsf-api/src/main/java/javax/faces/application/ViewHandler.java
deleted file mode 100644
index 88b08e7..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ViewHandler.java
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.view.ActionSource2AttachedObjectHandler;
-import javax.faces.view.ActionSource2AttachedObjectTarget;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.view.AttachedObjectTarget;
-import javax.faces.view.EditableValueHolderAttachedObjectHandler;
-import javax.faces.view.EditableValueHolderAttachedObjectTarget;
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.view.ValueHolderAttachedObjectHandler;
-import javax.faces.view.ValueHolderAttachedObjectTarget;
-
-
-
-/**
- * <p><strong><span
- * class="changed_modified_2_0">ViewHandler</span></strong> is the
- * pluggablity mechanism for allowing implementations of or applications
- * using the JavaServer Faces specification to provide their own
- * handling of the activities in the <em>Render Response</em> and
- * <em>Restore View</em> phases of the request processing lifecycle.
- * This allows for implementations to support different response
- * generation technologies, as well as alternative strategies for saving
- * and restoring the state of each view.  <span class="changed_added_2_0">An
- * implementation
- * of this class must be thread-safe.</span></p>
- *
- * <p>Please see {@link StateManager} for information on how the
- * <code>ViewHandler</code> interacts the {@link StateManager}. </p>
-
- * <p class="changed_added_2_0">Version 2 of the specification formally
- * introduced the concept of <em>View Declaration Language</em>.  A View
- * Declaration Language (VDL) is a syntax used to declare user
- * interfaces comprised of instances of JSF {@link UIComponent}s.  Any
- * of the responsibilities of the <code>ViewHandler</code> that
- * specifically deal with the VDL sub-system are now the domain of the
- * VDL implementation. These responsibilities are defined on the {@link
- * ViewDeclarationLanguage} class.  The <code>ViewHandler</code>
- * provides {@link #getViewDeclarationLanguage} as a convenience method
- * to access the VDL implementation given a <code>viewId</code>.</p>
- *
- */
-
-public abstract class ViewHandler {
-
-    private static Logger log = Logger.getLogger("javax.faces.application");
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The key, in the session's attribute set, under which the
-     * response character encoding may be stored and retrieved.</p>
-     *
-     */
-    public static final String CHARACTER_ENCODING_KEY =
-	"javax.faces.request.charset";
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Allow</span> the web
-     * application to define a <span class="changed_modified_2_0">list
-     * of alternate suffixes</span> for pages containing JSF content.
-     * <span class="changed_modified_2_0">This list is a space separated
-     * list of values of the form
-     * <i><code>.<extension></code></i>.  The first physical
-     * resource whose extension matches one of the configured extensions
-     * will be the suffix used to create the view ID.</span> If this
-     * init parameter is not specified, the default value is taken from
-     * the value of the constant {@link #DEFAULT_SUFFIX}.</p>
-     */
-    public static final String DEFAULT_SUFFIX_PARAM_NAME = 
-	"javax.faces.DEFAULT_SUFFIX";
-
-
-    /**
-     * <p>The value to use for the default extension if the webapp is using
-     * url extension mapping.</p>
-     */
-    public static final String DEFAULT_SUFFIX = ".xhtml .jsp";
-    
-    /**
-     * <p class="changed_added_2_0">Allow the web application to define an
-     * alternate suffix for Facelet based XHTML pages containing JSF content.
-     * If this init parameter is not specified, the default value is
-     * taken from the value of the constant {@link #DEFAULT_FACELETS_SUFFIX}</p>
-     * 
-     * @since 2.0
-     */
-    
-    public static final String FACELETS_SUFFIX_PARAM_NAME = 
-            "javax.faces.FACELETS_SUFFIX";
-    
-    /**
-     * <p class="changed_added_2_0">The value to use for the default extension 
-     * for Facelet based XHTML pages if the webapp is using
-     * url extension mapping.</p>
-     * 
-     * @since 2.0
-     */
-    public static final String DEFAULT_FACELETS_SUFFIX = ".xhtml";
-    
-    /**
-     * <p class="changed_added_2_0">Allow the web application to define
-     * a semicolon (;) separated list of strings that is used to forcibly
-     * declare that certain pages in the application must be interpreted
-     * as using Facelets, regardless of their extension.  Each entry in the 
-     * semicolon (;) separated list of strings is either a file extension, as in 
-     * <code>*.xhtml</code>, or a resource prefix (starting with '/' and 
-     * interpreted as relative to the web application root), as in 
-     * <code>/user/*</code>.  The latter class of entry can also take the form
-     * of <code>/<filename>.<extension>*</code> such as
-     * <code>/login.jsp*</code>.  The runtime must also consider the
-     * <code>facelets.VIEW_MAPPINGS</code> param name as an alias to this
-     * param name for backwards compatibility with existing Facelets 
-     * applications.</p>
-     * 
-     * @since 2.0
-     */
-    
-    public static final String FACELETS_VIEW_MAPPINGS_PARAM_NAME = 
-            "javax.faces.FACELETS_VIEW_MAPPINGS";
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /** 
-     * <p>Returns an appropriate {@link Locale} to use for this and
-     * subsequent requests for the current client.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * 
-     * @throws NullPointerException if <code>context</code> is 
-     *  <code>null</code>
-     */
-     public abstract Locale calculateLocale(FacesContext context);
-     
-     /**
-      * <p>Returns the correct character encoding to be used for this request.</p>
-      *
-      * <p>The following algorithm is employed.</p>
-      *
-      * <ul>
-      *
-      * <li><p>Examine the <code>Content-Type</code> request header.  If it has 
-      * a <code>charset</code> parameter, extract it and return that as the 
-      * encoding.</p></li>
-      *
-      * <li><p>If no <code>charset</code> parameter was found, check for the 
-      * existence of a session by calling {@link ExternalContext#getSession(boolean)} 
-      * passing <code>false</code> as the argument.  If that method returns 
-      * <code>true</code>, get the session Map by calling 
-      * {@link ExternalContext#getSessionMap} and look for a value under the 
-      * key given by the value of the symbolic constant 
-      * {@link ViewHandler#CHARACTER_ENCODING_KEY}.
-      * If present, return the value, converted to String.</p></li>
-      *
-      * <li><p>Otherwise, return <code>null</code></p></li>
-      *
-      * </ul>
-      *
-      * @since 1.2
-      */ 
-     
-     public String calculateCharacterEncoding(FacesContext context) {
-         ExternalContext extContext = context.getExternalContext();
-         Map<String,String> headerMap = extContext.getRequestHeaderMap();
-         String contentType = headerMap.get("Content-Type");
-         String charEnc = null;
-         
-         // look for a charset in the Content-Type header first.
-         if (null != contentType) {
-             // see if this header had a charset
-             String charsetStr = "charset=";
-             int len = charsetStr.length();
-             int idx = contentType.indexOf(charsetStr);
-             
-             // if we have a charset in this Content-Type header AND it
-             // has a non-zero length.
-             if (idx != -1 && idx + len < contentType.length()) {
-                 charEnc = contentType.substring(idx + len);
-             }
-         }
-         
-         // failing that, look in the session for a previously saved one
-         if (null == charEnc) {
-             if (null != extContext.getSession(false)) {
-                 charEnc = (String) extContext.getSessionMap().get(CHARACTER_ENCODING_KEY);
-             }
-         }
-         
-         return charEnc;
-     }
-
-
-    /** 
-     * <p>Return an appropriate <code>renderKitId</code> for this and
-     * subsequent requests from the current client.  It is an error for
-     * this method to return <code>null</code>.</p>
-     *
-     * <p>The default return value is {@link
-     * javax.faces.render.RenderKitFactory#HTML_BASIC_RENDER_KIT}.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * 
-     * @throws NullPointerException if <code>context</code> is 
-     *  <code>null</code>
-     */
-    public abstract String calculateRenderKitId(FacesContext context);
-
-
-    /**
-     * <p><strong class="changed_modified_2_0">Create</strong> and
-     * return a new {@link UIViewRoot} instance initialized with
-     * information from the argument <code>FacesContext</code> and
-     * <code>viewId</code>.  <span class="changed_modified_2_0">Locate
-     * the {@link ViewDeclarationLanguage} implementation for the VDL
-     * used in the view.  The argument <code>viewId</code> must be
-     * converted to a physical <code>viewId</code> that can refer to an
-     * actual resource suitable for use by the
-     * <code>ViewDeclarationLanguage</code> {@link
-     * ViewDeclarationLanguage#createView}, which must be called by
-     * this method.</span>
-
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract UIViewRoot createView(FacesContext context, String viewId);
-
-    /**
-     * <p class="changed_added_2_0">Derive and return the viewId from
-     * the current request, or the argument input by following the
-     * algorithm defined in specification section JSF.7.5.2.</p>
-     *
-     * <p>The default implementation of this method simply returns
-     * rawViewId unchanged.</p>
-     *
-     * @param context the <code>FacesContext</code> for this request
-     *
-     * @param rawViewId the <code>viewId</code> to derive,
-     *
-     * @since 2.0
-     */
-    public String deriveViewId(FacesContext context, String rawViewId) {
-
-        return rawViewId;
-
-    }
-    
-
-    /**
-     * <p class="changed_modified_2_0">If the value returned from this
-     * method is used as the <code>file</code> argument to the
-     * four-argument constructor for <code>java.net.URL</code> (assuming
-     * appropriate values are used for the first three arguments), then
-     * a client making a request to the <code>toExternalForm()</code> of
-     * that <code>URL</code> will select the argument
-     * <code>viewId</code> for traversing the JSF lifecycle.  Please see
-     * section JSF.7.5.2 for the complete specification.</p>
-     *
-     * @param context {@link FacesContext} for this request
-     * @param viewId View identifier of the desired view
-     *
-     * @throws IllegalArgumentException if <code>viewId</code> is not
-     * valid for this <code>ViewHandler</code>, or does not start with
-     * "/".
-     * @throws NullPointerException if <code>context</code> or
-     *  <code>viewId</code> is <code>null</code>.
-     */
-    public abstract String getActionURL(FacesContext context, String viewId);
-
-
-    /**
-     * <p class="changed_modified_2_0">If the value returned from this
-     * method is used as the <code>file</code> argument to the
-     * four-argument constructor for <code>java.net.URL</code> (assuming
-     * appropriate values are used for the first three arguments), then
-     * a client making a request to the <code>toExternalForm()</code> of
-     * that <code>URL</code> will select the argument <code>path</code>
-     * for direct rendering.  If the specified path starts with a slash,
-     * it must be treated as context relative; otherwise, it must be
-     * treated as relative to the action URL of the current view.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param path Resource path to convert to a URL
-     *
-     * @throws IllegalArgumentException if <code>viewId</code> is not
-     *  valid for this <code>ViewHandler</code>.
-     * @throws NullPointerException if <code>context</code> or
-     *  <code>path</code> is <code>null</code>.
-     */
-    public abstract String getResourceURL(FacesContext context, String path);
-
-
-    /**
-     * <p class="changed_added_2_0"> Return a JSF action URL derived
-     * from the <code>viewId</code> argument that is suitable to be used
-     * by the {@link NavigationHandler} to issue a redirect request to
-     * the URL using a NonFaces request.  Compiliant implementations
-     * must implement this method as specified in section JSF.7.5.2.
-     * The default implementation simply calls through to {@link
-     * #getActionURL}, passing the arguments <code>context</code> and
-     * <code>viewId</code>.</p>
-     *
-     * @param context           The FacesContext processing this request
-     * @param viewId            The view identifier of the target page
-     * @param parameters        A mapping of parameter names to one or more values
-     * @param includeViewParams A flag indicating whether view parameters should be encoded into this URL
-     * @since 2.0
-     */
-    public String getRedirectURL(FacesContext context,
-                                 String viewId,
-                                 Map<String,List<String>>parameters,
-                                 boolean includeViewParams) {
-        
-        return getActionURL(context, viewId);
-
-    }
-
-
-    /**
-
-     * <p class="changed_added_2_0"> Return a JSF action URL derived
-     * from the viewId argument that is suitable to be used as the
-     * target of a link in a JSF response. Compiliant implementations
-     * must implement this method as specified in section JSF.7.5.2.
-     * The default implementation simply calls through to {@link
-     * #getActionURL}, passing the arguments <code>context</code> and
-     * <code>viewId</code>.</p>
-     *
-     * @param context           The FacesContext processing this request
-     * @param viewId            The view identifier of the target page
-     * @param parameters        A mapping of parameter names to one or more values
-     * @param includeViewParams A flag indicating whether view parameters should be encoded into this URL
-     *
-     * @since 2.0
-     */
-    public String getBookmarkableURL(FacesContext context,
-                                     String viewId,
-                                     Map<String,List<String>> parameters,
-                                     boolean includeViewParams) {
-
-        return getActionURL(context, viewId);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the {@link
-     * ViewDeclarationLanguage} instance used for this <code>ViewHandler</code>
-     * instance.</p>
-     * 
-     * <div class="changed_added_2_0">
-     * 
-     * <p>The default implementation must use {@link
-     * javax.faces.view.ViewDeclarationLanguageFactory#getViewDeclarationLanguage}
-     * to obtain the appropriate <code>ViewDeclarationLanguage</code>
-     * implementation for the argument <code>viewId</code>.  Any
-     * exceptions thrown as a result of invoking that method must not be
-     * swallowed.</p>
-     * 
-     * <p>The default implementation of this method returns null.</p>
-     * 
-     * </div>
-
-     * @since 2.0
-     */
-    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context,
-                                                              String viewId) {
-
-        return null;
-
-    }
-
-    
-    /**
-     *
-     * <p><span class="changed_modified_2_0">Initialize</span> the view
-     * for the request processing lifecycle.</p>
-     *
-     * <p>This method must be called at the beginning of the <em>Restore
-     * View Phase</em> of the Request Processing Lifecycle.  It is responsible 
-     * for performing any per-request initialization necessary to the operation
-     * of the lifycecle.</p>
-     *
-     * <p class="changed_modified_2_0">The default implementation must
-     * perform the following actions.  If {@link
-     * ExternalContext#getRequestCharacterEncoding} returns
-     * <code>null</code>, call {@link #calculateCharacterEncoding} and
-     * pass the result, if non-<code>null</code>, into the {@link
-     * ExternalContext#setRequestCharacterEncoding} method.  If {@link
-     * ExternalContext#getRequestCharacterEncoding} returns
-     * non-<code>null</code> take no action.</p>
-
-     * @throws FacesException if a problem occurs setting the encoding,
-     * such as the <code>UnsupportedEncodingException</code> thrown 
-     * by the underlying Servlet or Portlet technology when the encoding is not
-     * supported.
-     *
-     */
-    
-    public void initView(FacesContext context) throws FacesException {
-        String encoding = calculateCharacterEncoding(context);
-        if (null != encoding) {
-            try {
-                context.getExternalContext().setRequestCharacterEncoding(encoding);
-            } catch (UnsupportedEncodingException e) {
-                // PENDING(edburns): I18N
-                String message = "Can't set encoding to: " + encoding +
-                        " Exception:" + e.getMessage();
-                if (log.isLoggable(Level.WARNING)) {
-                    log.fine(message);
-                }
-                throw new FacesException(message, e);
-                
-            }
-        }
-    }
-    
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> whatever
-     * actions are required to render the response view to the response
-     * object associated with the current {@link FacesContext}.</p>
-
-     * <p class="changed_added_2_0">Otherwise, the default
-     * implementation must obtain a reference to the {@link
-     * ViewDeclarationLanguage} for the <code>viewId</code> of the
-     * argument <code>viewToRender</code> and call its {@link
-     * ViewDeclarationLanguage#renderView} method, returning the result
-     * and not swallowing any exceptions thrown by that method.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param viewToRender the view to render
-     *
-     * @throws IOException if an input/output error occurs
-     * @throws NullPointerException if <code>context</code> or
-     * <code>viewToRender</code> is <code>null</code>
-     * @throws FacesException if a servlet error occurs
-     */
-    public abstract void renderView(FacesContext context, UIViewRoot viewToRender)
-        throws IOException, FacesException;
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> whatever
-     * actions are required to restore the view associated with the
-     * specified {@link FacesContext} and <code>viewId</code>.  It may
-     * delegate to the <code>restoreView</code> of the associated {@link
-     * StateManager} to do the actual work of restoring the view.  If
-     * there is no available state for the specified
-     * <code>viewId</code>, return <code>null</code>.</p>
-
-     * <p class="changed_added_2_0">Otherwise, the default implementation
-     * must obtain a reference to the {@link ViewDeclarationLanguage}
-     * for this <code>viewId</code> and call its {@link
-     * ViewDeclarationLanguage#restoreView} method, returning the result
-     * and not swallowing any exceptions thrown by that method.</p>
-
-     * @param context {@link FacesContext} for the current request
-     * @param viewId the view identifier for the current request
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     * @throws FacesException if a servlet error occurs
-     */
-    public abstract UIViewRoot restoreView(FacesContext context, String viewId);
-
-    
-    /**
-     * <p>Take any appropriate action to either immediately
-     * write out the current state information (by calling
-     * {@link StateManager#writeState}, or noting where state information
-     * should later be written.</p>
-     *
-     * <p class="changed_added_2_0">This method must do nothing if the current
-     * request is an <code>Ajax</code> request.  When responding to 
-     * <code>Ajax</code> requests, the state is obtained by calling
-     * {@link StateManager#getViewState}
-     * and then written into the <code>Ajax</code> response during final
-     * encoding 
-     * ({@link javax.faces.component.UIViewRoot#encodeEnd}. 
-     * </p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws IOException if an input/output error occurs
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void writeState(FacesContext context) throws IOException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/ViewHandlerWrapper.java b/jsf-api/src/main/java/javax/faces/application/ViewHandlerWrapper.java
deleted file mode 100644
index 280de64..0000000
--- a/jsf-api/src/main/java/javax/faces/application/ViewHandlerWrapper.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.application;
-
-import java.util.List;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIViewRoot;
-import javax.faces.FacesException;
-
-import java.util.Locale;
-import java.util.Map;
-import java.io.IOException;
-import javax.faces.FacesWrapper;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.view.ViewDeclarationLanguage;
-
-/**
- * <p>Provides a simple implementation of {@link ViewHandler} that can
- * be subclassed by developers wishing to provide specialized behavior
- * to an existing {@link ViewHandler} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link ViewHandler}.</p>
- *
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance we are wrapping.</p>
- *
- * @since 1.2
- */
-public abstract class ViewHandlerWrapper extends ViewHandler implements FacesWrapper<ViewHandler> {
-
-
-    /**
-     * @return the instance that we are wrapping.
-     */ 
-
-    public abstract ViewHandler getWrapped();
-
-
-    // ------------------------ Methods from javax.faces.application.ViewHandler
-
-
-    /**
-     * 
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#calculateCharacterEncoding(javax.faces.context.FacesContext)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#calculateCharacterEncoding(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-
-    public String calculateCharacterEncoding(FacesContext context) {
-
-        return getWrapped().calculateCharacterEncoding(context);
-
-    }
-        
-    /**
-     * 
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#calculateLocale(javax.faces.context.FacesContext)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#calculateLocale(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-    public Locale calculateLocale(FacesContext context) {
-
-        return getWrapped().calculateLocale(context);
-
-    }
-
-
-    /**
-     *
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#deriveViewId(javax.faces.context.FacesContext, String)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#deriveViewId(javax.faces.context.FacesContext, String)
-     * @since 2.0
-     */
-    @Override
-    public String deriveViewId(FacesContext context, String input) {
-
-        return getWrapped().deriveViewId(context, input);
-
-    }
-
-    
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#calculateRenderKitId(javax.faces.context.FacesContext)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#calculateRenderKitId(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-    public String calculateRenderKitId(FacesContext context) {
-
-        return getWrapped().calculateRenderKitId(context);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#createView(javax.faces.context.FacesContext, String)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#createView(javax.faces.context.FacesContext, String)
-     * @since 1.2
-     */
-    public UIViewRoot createView(FacesContext context, String viewId) {
-
-        return getWrapped().createView(context, viewId);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#getActionURL(javax.faces.context.FacesContext, String)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#getActionURL(javax.faces.context.FacesContext, String)
-     * @since 1.2
-     */
-    public String getActionURL(FacesContext context, String viewId) {
-
-        return getWrapped().getActionURL(context, viewId);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#getRedirectURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#getRedirectURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)
-     * @since 2.0
-     */
-    @Override
-    public String getRedirectURL(FacesContext context,
-                                 String viewId,
-                                 Map<String,List<String>> parameters,
-                                 boolean includeViewParams) {
-
-        return getWrapped().getRedirectURL(context,
-                                           viewId,
-                                           parameters,
-                                           includeViewParams);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#getBookmarkableURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#getBookmarkableURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)
-     * @since 2.0
-     */
-    @Override
-    public String getBookmarkableURL(FacesContext context,
-                                     String viewId,
-                                     Map<String,List<String>> parameters,
-                                     boolean includeViewParams) {
-
-        return getWrapped().getBookmarkableURL(context,
-                                               viewId,
-                                               parameters,
-                                               includeViewParams);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#getResourceURL(javax.faces.context.FacesContext, String)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#getResourceURL(javax.faces.context.FacesContext, String)
-     * @since 1.2
-     */
-    public String getResourceURL(FacesContext context, String path) {
-
-        return getWrapped().getResourceURL(context, path);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#getViewDeclarationLanguage}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @since 2.0
-     */
-    @Override
-    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context,
-                                                              String viewId) {
-
-        return getWrapped().getViewDeclarationLanguage(context, viewId);
-        
-    }
-    
-    
-    
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#initView}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#initView
-     * @since 1.2
-     */
-    public void initView(FacesContext context) throws FacesException {
-        
-        getWrapped().initView(context);
-    }
-    
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
-     * @since 1.2
-     */
-    public void renderView(FacesContext context, UIViewRoot viewToRender)
-    throws IOException, FacesException {
-
-        getWrapped().renderView(context, viewToRender);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#restoreView(javax.faces.context.FacesContext, String)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#restoreView(javax.faces.context.FacesContext, String)
-     * @since 1.2
-     */
-    public UIViewRoot restoreView(FacesContext context, String viewId) {
-
-        return getWrapped().restoreView(context, viewId);
-
-    }    
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ViewHandler#writeState(javax.faces.context.FacesContext)}
-     * on the wrapped {@link ViewHandler} object.</p>
-     *
-     * @see ViewHandler#writeState(javax.faces.context.FacesContext)
-     * @since 1.2
-     */
-    public void writeState(FacesContext context) throws IOException {
-	getWrapped().writeState(context);
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/application/package.html b/jsf-api/src/main/java/javax/faces/application/package.html
deleted file mode 100644
index c513a25..0000000
--- a/jsf-api/src/main/java/javax/faces/application/package.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-  @(#)package.html	1.60 98/01/27
-
-  Copyright 2004 Sun Microsystems, Inc. 901 San Antonio Road,
-  Palo Alto, California, 94303, U.S.A.  All Rights Reserved.
-
-  This software is the confidential and proprietary information of Sun
-  Microsystems, Inc. ("Confidential Information").  You shall not
-  disclose such Confidential Information and shall use it only in
-  accordance with the terms of the license agreement you entered into
-  with Sun.
-
-  CopyrightVersion 1.2
-
--->
-</head>
-<body bgcolor="white">
-
-<p><span class="changed_modified_2_0">APIs</span> that are used to link an
-application's business logic objects to JavaServer Faces, as well as
-convenient pluggable mechanisms to manage the execution of an
-application that is based on JavaServer Faces.  The main class in this
-package is {@link javax.faces.application.Application}.</p>
-
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/bean/ApplicationScoped.java b/jsf-api/src/main/java/javax/faces/bean/ApplicationScoped.java
deleted file mode 100644
index d5007f9..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/ApplicationScoped.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-
-/**
-
- * <p class="changed_added_2_0">When this annotation, along with {@link
- * ManagedBean} is found on a class, the runtime must act as if a
- * <code><managed-bean-scope>application<managed-bean-scope></code>
- * element was declared for the corresponding managed bean.</p>
-
- *
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface ApplicationScoped {
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/CustomScoped.java b/jsf-api/src/main/java/javax/faces/bean/CustomScoped.java
deleted file mode 100644
index 63e3855..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/CustomScoped.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">When this annotation, along with {@link
- * ManagedBean} is found on a class, the runtime must act as if a
- * <code><managed-bean-scope>VALUE<managed-bean-scope></code>
- * element was declared for the corresponding managed bean, where VALUE
- * is the value of the {@link #value} attribute, which must be an EL
- * expression that evaluates to a <code>Map</code>.</p>
-
- * <p class="changed_added_2_0">Developers must take care when using
- * custom scopes to ensure that any object references made to or from a
- * custom scoped bean consider the necessary scope lifetimes.  The
- * runtime is not required to perform any validations for such
- * considerations.</p>
-
-
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface CustomScoped {
-
-    public String value();
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/ManagedBean.java b/jsf-api/src/main/java/javax/faces/bean/ManagedBean.java
deleted file mode 100644
index 793824d..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/ManagedBean.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a managed
- * bean class.  Classes must be scanned for the presence of this
- * annotation at application startup, before any requests have been
- * serviced.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>The value of the {@link #name} attribute is taken to be the
- * <em>managed-bean-name</em>.  If the value of the <em>name</em>
- * attribute is unspecified or is the empty <code>String</code>, the
- * <em>managed-bean-name</em> is derived from taking the unqualified
- * class name portion of the fully qualified class name and converting
- * the first character to lower case.  For example, if the
- * <code>ManagedBean</code> annotation is on a class with the fully
- * qualified class name <code>com.foo.Bean</code>, and there is no
- * <em>name</em> attribute on the annotation, the
- * <em>managed-bean-name</em> is taken to be <code>bean</code>.  The
- * fully qualified class name of the class to which this annotation is
- * attached is taken to be the <em>managed-bean-class</em>.</p>
-
- * <p>The scope of the managed bean is declared using one of {@link
- * NoneScoped}, {@link RequestScoped}, {@link ViewScoped}, {@link
- * SessionScoped}, {@link ApplicationScoped}, or {@link CustomScoped}
- * annotations.  If the scope annotations are omitted, the bean must be
- * handled as if the {@link RequestScoped} annotation is present.</p>
-
- * <p> If the value of the {@link #eager} attribute is
- * <code>true</code>, and the <code>managed-bean-scope</code> value is
- * "application", the runtime must instantiate this class when the
- * application starts.  This instantiation and storing of the instance
- * must happen before any requests are serviced.  If <em>eager</em> is
- * unspecified or <code>false</code>, or the
- * <code>managed-bean-scope</code> is something other than
- * "application", the default "lazy" instantiation and scoped storage of
- * the managed bean happens.</p>
- *
- * <p>When the runtime processes this annotation, if a managed bean
- * exists whose name is equal to the derived <em>managed-bean-name</em>,
- * a <code>FacesException</code> must be thrown and the
- * application must not be placed in service.</p>
- *
- * <p>A class tagged with this annotation must have a public
- * zero-argument constructor.  If such a constructor is not defined on
- * the class, a <code>FacesException</code> must be thrown and the
- * application must not be placed in service.</p>
- *
- * </div>
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface ManagedBean {
-
-    /** <p class="changed_added_2_0">Taken to be the
-     * <code>managed-bean-name</code>.  See class documentation for
-     * details.</p>
-     */
-
-    String name() default "";
-
-
-    /** <p class="changed_added_2_0">Taken to be the value of the
-     * <code>eager</code> attribute of the <code>managed-bean</code>.
-     * See class documentation for details.</p>
-     */
-    boolean eager() default false;
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/ManagedProperty.java b/jsf-api/src/main/java/javax/faces/bean/ManagedProperty.java
deleted file mode 100644
index ac9c286..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/ManagedProperty.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * field of a class annotated with {@link ManagedBean} instructs the
- * system to inject a value into this property as described in section
- * JSF.5.3 of the spec prose document in the
- * <code><managed-property></code> subsection. The time of
- * instantiation is dictated by the value of the attributes on the usage
- * of <code>ManagedBean</code> and by the application logic itself.  The
- * value of the {@link #value} attribute may be a literal
- * <code>String</code> or a <code>ValueExpression</code>.  If the
- * latter, the expression must not be evaluated until the bean is
- * instantiated.  The value of the name attribute is taken to be the
- * <em>managed-property-name</em> for this property.  If not specified,
- * the <em>managed-property-name</em> is taken to be the name of the
- * field to which this is attribute is attached.</p>
- *
- * <p class="changed_added_2_0">If this annotation is present on a class
- * that does not have the <code>ManagedBean</code> annotation, the
- * implementation must take no action on this annotation.</p>
- */
-
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.FIELD)
-public @interface ManagedProperty {
-
-    /** <p class="changed_added_2_0">Taken to be the
-     * <code>managed-property-name</code>.  See class documentation for
-     * details.</p>
-     */
-    String name() default "";
-
-
-    /** <p class="changed_added_2_0">Taken to be the value that is
-     * injected into the field.  See class documentation for
-     * details.</p>
-     */
-    String value();
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/NoneScoped.java b/jsf-api/src/main/java/javax/faces/bean/NoneScoped.java
deleted file mode 100644
index 3d3334c..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/NoneScoped.java
+++ /dev/null
@@ -1,58 +0,0 @@
-
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">When this annotation, along with {@link
- * ManagedBean} is found on a class, the runtime must act as if a
- * <code><managed-bean-scope>none<managed-bean-scope></code>
- * element was declared for the corresponding managed bean.</p>
- *
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface NoneScoped {
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/ReferencedBean.java b/jsf-api/src/main/java/javax/faces/bean/ReferencedBean.java
deleted file mode 100644
index 778a3ed..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/ReferencedBean.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class is equivalent to the <em>referenced-bean</em> element
- * in the application configuration resources.</p>
- *
- * @since 2.0
- */
- at Retention(RetentionPolicy.CLASS)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface ReferencedBean {
-
-    /** <p class="changed_added_2_0">Taken to be the
-     * <code>referenced-bean-name</code>.  See class documentation for
-     * {@link ManagedBean} for details.</p>
-     */
-
-    String name() default "";
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/RequestScoped.java b/jsf-api/src/main/java/javax/faces/bean/RequestScoped.java
deleted file mode 100644
index 4295db5..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/RequestScoped.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">When this annotation, along with {@link
- * ManagedBean} is found on a class, the runtime must act as if a
- * <code><managed-bean-scope>request<managed-bean-scope></code>
- * element was declared for the corresponding managed bean.</p>
- *
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface RequestScoped {
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/SessionScoped.java b/jsf-api/src/main/java/javax/faces/bean/SessionScoped.java
deleted file mode 100644
index 88d7fa4..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/SessionScoped.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">When this annotation, along with {@link
- * ManagedBean} is found on a class, the runtime must act as if a
- * <code><managed-bean-scope>session<managed-bean-scope></code>
- * element was declared for the corresponding managed bean.</p>
- *
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface SessionScoped {
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/ViewScoped.java b/jsf-api/src/main/java/javax/faces/bean/ViewScoped.java
deleted file mode 100644
index 4a26ca8..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/ViewScoped.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.bean;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">When this annotation, along with {@link
- * ManagedBean} is found on a class, the runtime must act as if a
- * <code><managed-bean-scope>view<managed-bean-scope></code>
- * element was declared for the corresponding managed bean.</p>
- *
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface ViewScoped {
-}
diff --git a/jsf-api/src/main/java/javax/faces/bean/package.html b/jsf-api/src/main/java/javax/faces/bean/package.html
deleted file mode 100644
index dd3727e..0000000
--- a/jsf-api/src/main/java/javax/faces/bean/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-  @(#)package.html	1.60 98/01/27
-
-  Copyright 2004 Sun Microsystems, Inc. 901 San Antonio Road, 
-  Palo Alto, California, 94303, U.S.A.  All Rights Reserved.
-
-  This software is the confidential and proprietary information of Sun
-  Microsystems, Inc. ("Confidential Information").  You shall not
-  disclose such Confidential Information and shall use it only in
-  accordance with the terms of the license agreement you entered into
-  with Sun.
-
-  CopyrightVersion 1.2
-
--->
-</head>
-<body bgcolor="white">
-
-<p class="changed_added_2_0">These javadoc files constitute the
-“Faces Managed Bean Annotation Specification for Containers
-Conforming to Servlet 2.5 and Beyond”</p>
-
-<div class="changed_added_2_0">
-
-<p>At the time of this writing, a forthcoming JCP effort is being
-planned to extract the specification for managed beans from JSF and
-place it into its own specification.  To account for this effort and to
-avoid introducing classes into JSF 2.0 that would have to be deprecated
-when this effort is complete, implementations of JSF 2.0 are not
-required to implement the “Faces Managed Bean Annotation
-Specification for Containers Conforming to Servlet 2.5”.  However,
-JSF implementations are strongly encouraged to implement this
-specification, as it provides significant improvements in ease of
-use.</p>
-
-<p>The annotations must be processed as specified in section JSF.11.5.1.</p>
-
-
-</div>
-
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/component/ActionSource.java b/jsf-api/src/main/java/javax/faces/component/ActionSource.java
deleted file mode 100644
index 0d659f0..0000000
--- a/jsf-api/src/main/java/javax/faces/component/ActionSource.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.el.MethodBinding;
-
-
-
-/**
- * <p><strong>ActionSource</strong> is an interface that may be implemented
- * by any concrete {@link UIComponent} that wishes to be a source of
- * {@link ActionEvent}s, including the ability to invoke application
- * actions via the default {@link ActionListener} mechanism.</p>
- */
-
-public interface ActionSource {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>If the implementing class also implements {@link
-     * ActionSource2}, the implementation of this method must call
-     * through to {@link ActionSource2#getActionExpression} and examine
-     * the result.  If the result came from a previous call to {@link
-     * #setAction}, extract the <code>MethodBinding</code> from it and
-     * return it.  Otherwise, wrap the returned {@link
-     * javax.el.MethodExpression} in a <code>MethodBinding</code>
-     * implementation, and return it.</p>
-     * 
-     * <p>If the implementing class does not implement
-     * <code>ActionSource2</code>, return the {@link
-     * MethodBinding}pointing at the application action to be invoked,
-     * if this {@link UIComponent} is activated by the user, during the
-     * <em>Apply Request Values</em> or <em>Invoke Application</em>
-     * phase of the request processing lifecycle, depending on the value
-     * of the <code>immediate</code> property.</p>
-     *
-     * @deprecated This has been replaced by {@link
-     * ActionSource2#getActionExpression}.
-     */
-    public MethodBinding getAction();
-
-    /**
-     * <p>If the implementing class also implements {@link
-     * ActionSource2}, the implementation of this method must wrap the
-     * argument <code>action</code> in a class that implements {@link
-     * javax.el.MethodExpression} and call through to {@link
-     * ActionSource2#setActionExpression}, passing the wrapped
-     * <code>action</code>.</p>
-     *
-     * <p>If the implementing class does not implement
-     * <code>ActionSource2</code>, set the {@link MethodBinding}
-     * pointing at the appication action to be invoked, if this {@link
-     * UIComponent} is activated by the user, during the <em>Apply
-     * Request Values</em> or <em>Invoke Application</em> phase of the
-     * request processing lifecycle, depending on the value of the
-     * <code>immediate</code> property.</p>
-     *
-     * <p>Any method referenced by such an expression must be public, with
-     * a return type of <code>String</code>, and accept no parameters.</p>
-     *
-     * @param action The new MethodBinding expression
-     *
-     * @deprecated This has been replaced by {@link
-     * ActionSource2#setActionExpression(javax.el.MethodExpression)}.
-     */
-    public void setAction(MethodBinding action);
-
-
-    /**
-     * <p>If {@link #setActionListener} was not previously called
-     * for this instance, this method must return <code>null</code>.  If
-     * it was called, this method must return the exact
-     * <code>MethodBinding</code> instance that was passed to {@link
-     * #setActionListener}.</p>
-     *
-     * <p> The method to be invoked, if this {@link UIComponent} is
-     * activated by the user, will be called during the <em>Apply
-     * Request Values</em> or <em>Invoke Application</em> phase of the
-     * request processing lifecycle, depending upon the value of the
-     * <code>immediate</code> property.</p>
-     *
-     * @deprecated Use {@link #getActionListeners} instead.
-     */
-    public MethodBinding getActionListener();
-
-
-    /**
-     * <p>Wrap the argument <code>actionListener</code> in an
-     * implementation of {@link ActionListener}
-     * and store it in the internal data structure that backs the {@link
-     * #getActionListeners} method, taking care to over-write any
-     * instance that was stored by a previous call to
-     * <code>setActionListener</code>.</p>
-     *
-     * <p>Any method referenced by such an expression must be public, with
-     * a return type of <code>void</code>, and accept a single parameter of
-     * type <code>ActionEvent</code>.</p>
-     *
-     * @param actionListener The new method binding expression
-     *
-     * @deprecated This has been replaced by {@link
-     * #addActionListener(javax.faces.event.ActionListener)}.
-     */
-    public void setActionListener(MethodBinding actionListener);
-
-    /**
-     * <p>Return a flag indicating that the default {@link ActionListener}
-     * provided by the JavaServer Faces implementation should be executed
-     * immediately (that is, during <em>Apply Request Values</em> phase
-     * of the request processing lifecycle), rather than waiting until the
-     * <em>Invoke Application</em> phase.  The default value for this
-     * property must be <code>false</code>.</p>
-     */
-    public boolean isImmediate();
-
-
-    /**
-     * <p>Set the "immediate execution" flag for this {@link UIComponent}.</p>
-     *
-     * @param immediate The new immediate execution flag
-     */
-    public void setImmediate(boolean immediate);
-
-
-    // -------------------------------------------------- Event Listener Methods
-
-
-    /**
-     * <p>Add a new {@link ActionListener} to the set of listeners interested
-     * in being notified when {@link ActionEvent}s occur.</p>
-     *
-     * @param listener The {@link ActionListener} to be added
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public void addActionListener(ActionListener listener);
-
-
-    /**
-     * <p>Return the set of registered {@link ActionListener}s for this
-     * {@link ActionSource} instance.  If there are no registered listeners,
-     * a zero-length array is returned.</p>
-     */
-    public abstract ActionListener[] getActionListeners();
-
-
-    /**
-     * <p>Remove an existing {@link ActionListener} (if any) from the set of
-     * listeners interested in being notified when {@link ActionEvent}s
-     * occur.</p>
-     *
-     * @param listener The {@link ActionListener} to be removed
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public void removeActionListener(ActionListener listener);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/ActionSource2.java b/jsf-api/src/main/java/javax/faces/component/ActionSource2.java
deleted file mode 100644
index 324f240..0000000
--- a/jsf-api/src/main/java/javax/faces/component/ActionSource2.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.el.MethodExpression;
-import javax.faces.event.ActionListener;
-
-
-
-/**
- * <p><strong>ActionSource2</strong> extends {@link ActionSource} and
- * provides a JavaBeans property analogous to the "<code>action</code>"
- * property on <code>ActionSource</code>.  The difference is the type of
- * this property is a {@link MethodExpression} rather than a
- * <code>MethodBinding</code>.  This allows the
- * <code>ActionSource</code> concept to leverage the new Unified EL
- * API.</p>
- *
- * @since 1.2
- */
-
-public interface ActionSource2 extends ActionSource {
-
-
-    // -------------------------------------------------------------- Properties
-
-    /**
-     * <p>Return the {@link MethodExpression} pointing at the application
-     * action to be invoked, if this {@link UIComponent} is activated by
-     * the user, during the <em>Apply Request Values</em> or <em>Invoke
-     * Application</em> phase of the request processing lifecycle,
-     * depending on the value of the <code>immediate</code>
-     * property.</p>
-     *
-     * <p>Note that it's possible that the returned
-     * <code>MethodExpression</code> is just a wrapper around a
-     * <code>MethodBinding</code> instance whith was set by a call to
-     * {@link ActionSource#setAction}.  This makes it possible for the
-     * default {@link ActionListener} to continue to work properly with
-     * older components.</p>
-     */
-    public MethodExpression getActionExpression();
-
-    /**
-     * <p>Set the {@link MethodExpression} pointing at the appication
-     * action to be invoked, if this {@link UIComponent} is activated by
-     * the user, during the <em>Apply Request Values</em> or <em>Invoke
-     * Application</em> phase of the request processing lifecycle,
-     * depending on the value of the <code>immediate</code>
-     * property.</p>
-     *
-     * <p>Any method referenced by such an expression must be public, with
-     * a return type of <code>String</code>, and accept no parameters.</p>
-     *
-     * @param action The new method expression
-     */
-    public void setActionExpression(MethodExpression action);
-
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/AttachedObjectListHolder.java b/jsf-api/src/main/java/javax/faces/component/AttachedObjectListHolder.java
deleted file mode 100644
index fdf32d4..0000000
--- a/jsf-api/src/main/java/javax/faces/component/AttachedObjectListHolder.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-import java.util.List;
-import java.util.ArrayList;
-import java.lang.reflect.Array;
-
-/**
- * <p>
- * Utility class to enable partial state saving of Lists of attached objects
- * such as <code>FacesListener</code>s or <code>Validator</code>s.
- * </p>
- */
- at SuppressWarnings({"unchecked"})
-class AttachedObjectListHolder<T> implements PartialStateHolder {
-
-    private boolean initialState;
-    private List<T> attachedObjects = new ArrayList<T>(2);
-
-
-    // ------------------------------------- Methods from PartialStateHolder
-
-
-    public void markInitialState() {
-
-        if (!attachedObjects.isEmpty()) {
-            for (T t : attachedObjects) {
-                if (t instanceof PartialStateHolder) {
-                    ((PartialStateHolder) t).markInitialState();
-                }
-            }
-        }
-        initialState = true;
-
-    }
-
-
-    public boolean initialStateMarked() {
-
-        return initialState;
-
-    }
-
-
-    public void clearInitialState() {
-
-        if (!attachedObjects.isEmpty()) {
-            for (T t : attachedObjects) {
-                if (t instanceof PartialStateHolder) {
-                    ((PartialStateHolder) t).clearInitialState();
-                }
-            }
-        }
-        initialState = false;
-
-    }
-
-
-    // -------------------------------------------- Methods from StateHolder
-
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (attachedObjects == null) {
-            return null;
-        }
-        if (initialState) {
-            Object[] attachedObjects = new Object[this.attachedObjects.size()];
-            boolean stateWritten = false;
-            for (int i = 0, len = attachedObjects.length; i < len; i++) {
-                T attachedObject = this.attachedObjects.get(i);
-                if (attachedObject instanceof StateHolder) {
-                    StateHolder sh = (StateHolder) attachedObject;
-                    if (!sh.isTransient()) {
-                        attachedObjects[i] = sh.saveState(context);
-                    }
-                    if (attachedObjects[i] != null) {
-                        stateWritten = true;
-                    }
-                }
-            }
-            return ((stateWritten) ? attachedObjects : null);
-        } else {
-
-            Object[] attachedObjects = new Object[this.attachedObjects.size()];
-            for (int i = 0, len = attachedObjects.length; i < len; i++) {
-                attachedObjects[i] = UIComponentBase.saveAttachedState(context, this.attachedObjects.get(i));
-            }
-            return (attachedObjects);
-        }
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-
-        Object[] attachedObjects = (Object[]) state;
-        if (attachedObjects.length > 0 && attachedObjects[0] instanceof StateHolderSaver) {
-            // overwrite the existing attachedObjects with those included
-            // in the full state.
-            if (this.attachedObjects != null) {
-                this.attachedObjects.clear();
-            } else {
-                this.attachedObjects = new ArrayList<T>(2);
-            }
-            for (int i = 0, len = attachedObjects.length; i < len; i++) {
-                T restored = (T) ((StateHolderSaver) attachedObjects[i]).restore(context);
-                if (restored != null) {
-                    this.attachedObjects.add(restored);
-                }
-            }
-        } else {
-            // assume 1:1 relation between existing attachedObjects and state
-            for (int i = 0, len = attachedObjects.length; i < len; i++) {
-                T l = this.attachedObjects.get(i);
-                if (l instanceof StateHolder) {
-                    ((StateHolder) l).restoreState(context, attachedObjects[i]);
-                }
-            }
-        }
-
-    }
-
-
-    public boolean isTransient() {
-
-        return false;
-
-    }
-
-
-    public void setTransient(boolean newTransientValue) {
-
-        // no-op
-
-    }
-
-
-    // ------------------------------------------------------ Public Methods
-
-
-    void add(T attachedObject) {
-
-        clearInitialState();
-        attachedObjects.add(attachedObject);
-
-    }
-
-    void remove(T attachedObject) {
-
-        clearInitialState();
-        attachedObjects.remove(attachedObject);
-
-    }
-
-    T[] asArray(Class<T> type) {
-
-        return new ArrayList<T>(attachedObjects).toArray((T[])Array.newInstance(type, attachedObjects.size()));
-        
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/ComponentStateHelper.java b/jsf-api/src/main/java/javax/faces/component/ComponentStateHelper.java
deleted file mode 100644
index e2b79df..0000000
--- a/jsf-api/src/main/java/javax/faces/component/ComponentStateHelper.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-import static javax.faces.component.UIComponentBase.saveAttachedState;
-import static javax.faces.component.UIComponentBase.restoreAttachedState;
-import javax.el.ValueExpression;
-import java.util.*;
-import java.io.Serializable;
-
-/**A base implementation for
- * maps which implement the PartialStateHolder interface.
- *
- * This can be used as a base-class for all
- * state-holder implementations in components,
- * converters and validators and other implementations
- * of the StateHolder interface.
- */
- at SuppressWarnings({"unchecked"})
-class ComponentStateHelper implements StateHelper {
-
-    private UIComponent component;
-    private boolean isTransient;
-    private Map<Serializable, Object> deltaMap;
-    private Map<Serializable, Object> defaultMap;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ComponentStateHelper(UIComponent component) {
-
-        this.component = component;
-        this.deltaMap = new HashMap<Serializable,Object>();
-        this.defaultMap = new HashMap<Serializable,Object>();
-        
-    }
-
-
-    // ------------------------------------------------ Methods from StateHelper
-
-
-    /**
-     * Put the object in the main-map
-     * and/or the delta-map, if necessary.
-     *
-     * @param key
-     * @param value
-     * @return the original value in the delta-map, if not present, the old value in the main map
-     */
-    public Object put(Serializable key, Object value) {
-
-        if(component.initialStateMarked() || value instanceof PartialStateHolder) {
-            Object retVal = deltaMap.put(key, value);
-
-            if(retVal==null) {
-                return defaultMap.put(key,value);
-            }
-            else {
-                defaultMap.put(key,value);
-                return retVal;
-            }
-        }
-        else {
-            return defaultMap.put(key,value);
-        }
-    }
-
-
-    /**
-     * We need to remove from both
-     * maps, if we do remove an existing key.
-     *
-     * @param key
-     * @return the removed object in the delta-map. if not present, the removed object from the main map
-     */
-    public Object remove(Serializable key) {
-        if(component.initialStateMarked()) {
-            Object retVal = deltaMap.remove(key);
-
-            if(retVal==null) {
-                return defaultMap.remove(key);
-            }
-            else {
-                defaultMap.remove(key);
-                return retVal;
-            }
-        }
-        else {
-            return defaultMap.remove(key);
-        }
-    }
-
-
-    /**
-     * @see StateHelper#put(java.io.Serializable, String, Object)
-     */
-    public Object put(Serializable key, String mapKey, Object value) {
-
-        Object ret = null;
-        if (component.initialStateMarked()) {
-            Map<String,Object> dMap = (Map<String,Object>) deltaMap.get(key);
-            if (dMap == null) {
-                dMap = new HashMap<String,Object>(5);
-                deltaMap.put(key, dMap);
-            }
-            ret = dMap.put(mapKey, value);
-
-        }
-        Map<String,Object> map = (Map<String,Object>) get(key);
-        if (map == null) {
-            map = new HashMap<String,Object>(8);
-            defaultMap.put(key, map);
-        }
-        if (ret == null) {
-            return map.put(mapKey, value);
-        } else {
-            map.put(mapKey, value);
-            return ret;
-        }
-
-    }
-
-
-    /**
-     * Get the object from the main-map.
-     * As everything is written through
-     * from the delta-map to the main-map, this
-     * should be enough.
-     *
-     * @param key
-     * @return
-     */
-    public Object get(Serializable key) {
-        return defaultMap.get(key);
-    }
-
-
-    /**
-     * @see StateHelper#eval(java.io.Serializable)
-     */
-    public Object eval(Serializable key) {
-        return eval(key, null);
-    }
-
-
-    /**
-     * @see StateHelper#eval(java.io.Serializable, Object)
-     */
-    public Object eval(Serializable key, Object defaultValue) {
-        Object retVal = get(key);
-        if (retVal == null) {
-            ValueExpression ve = component.getValueExpression(key.toString());
-            if (ve != null) {
-                retVal = ve.getValue(component.getFacesContext().getELContext());
-            }
-
-        }
-
-        return ((retVal != null) ? retVal : defaultValue);
-    }
-
-
-    /**
-     * @see StateHelper#add(java.io.Serializable, Object)
-     */
-    public void add(Serializable key, Object value) {
-
-        if (component.initialStateMarked()) {
-            List<Object> deltaList = (List<Object>) deltaMap.get(key);
-            if (deltaList == null) {
-                deltaList = new ArrayList<Object>(4);
-                deltaMap.put(key, deltaList);
-            }
-            deltaList.add(value);
-        }
-        List<Object> items = (List<Object>) get(key);
-        if (items == null) {
-            items = new ArrayList<Object>(4);
-            defaultMap.put(key, items);
-        }
-        items.add(value);
-
-    }
-
-
-    /**
-     * @see StateHelper#remove(java.io.Serializable, Object)
-     */
-    public Object remove(Serializable key, Object valueOrKey) {
-        Object source = get(key);
-        if (source instanceof Collection) {
-            return removeFromList(key, valueOrKey);
-        } else if (source instanceof Map) {
-            return removeFromMap(key, valueOrKey.toString());
-        }
-        return null;
-    }
-
-
-    // ------------------------------------------------ Methods from StateHolder
-
-
-    /**
-     * One and only implementation of
-     * save-state - makes all other implementations
-     * unnecessary.
-     *
-     * @param context
-     * @return the saved state
-     */
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if(component.initialStateMarked()) {
-            return saveMap(context, deltaMap);
-        }
-        else {
-            return saveMap(context, defaultMap);
-        }
-    }
-
-
-
-    /**
-     * One and only implementation of
-     * restore state. Makes all other implementations
-     * unnecessary.
-     *
-     * @param context FacesContext
-     * @param state the state to be restored.
-     */
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-        Object[] savedState = (Object[]) state;
-        if (savedState[savedState.length - 1] != null) {
-            component.initialState = (Boolean) savedState[savedState.length - 1];
-        }
-        int length = (savedState.length-1)/2;
-        for (int i = 0; i < length; i++) {
-           Object value = savedState[i * 2 + 1];
-           if (Void.TYPE.equals(value)) {
-               value = null;
-           }
-            Serializable serializable = (Serializable) savedState[i * 2];
-            if (value != null) {
-                if (value instanceof Collection) {
-                    value = restoreAttachedState(context, value);
-                } else if (value instanceof StateHolderSaver) {
-                    value = ((StateHolderSaver) value).restore(context);
-                } else {
-                    value = (value instanceof Serializable
-                             ? value
-                             : restoreAttachedState(context, value));
-                }
-            }
-            if (value instanceof Map) {
-                for (Map.Entry<String, Object> entry : ((Map<String, Object>) value)
-                      .entrySet()) {
-                    this.put(serializable, entry.getKey(), entry.getValue());
-                }
-            } else if (value instanceof List) {
-                List<Object> list = (List) get(serializable);
-                for (Object o : ((List<Object>) value)) {
-                    if (list == null || !list.contains(o)) {
-                        this.add(serializable, o);
-                    }
-                }
-            } else {
-                put(serializable, value);
-            }
-        }
-    }
-
-
-    /**
-     * @see javax.faces.component.StateHolder#isTransient()
-     */
-    public boolean isTransient() {
-        return isTransient;
-    }
-
-    
-    /**
-     * @see StateHolder#setTransient(boolean)
-     */
-    public void setTransient(boolean newTransientValue) {
-        isTransient = newTransientValue;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private Object saveMap(FacesContext context, Map<Serializable, Object> map) {
-
-        if (map.isEmpty()) {
-            if (!component.initialStateMarked()) {
-                // only need to propagate the component's delta status when
-                // delta tracking has been disabled.  We're assuming that
-                // the VDL will reset the status when the view is reconstructed,
-                // so no need to save the state if the saved state is the default.
-                return new Object[] { component.initialStateMarked() };
-            }
-            return null;
-        }
-
-        Object[] savedState = new Object[map.size() * 2 + 1];
-
-        int i=0;
-
-        for(Map.Entry<Serializable, Object> entry : map.entrySet()) {
-            Object value = entry.getValue();
-            if (value == null) {
-                value = Void.TYPE;
-            }
-            savedState[i * 2] = entry.getKey();
-            if (value instanceof Collection
-                  || value instanceof StateHolder
-                  || value instanceof Map
-                  || !(value instanceof Serializable)) {
-                value = saveAttachedState(context,value);
-            }
-            savedState[i * 2 + 1] = value;
-            i++;
-        }
-        if (!component.initialStateMarked()) {
-            savedState[savedState.length - 1] = component.initialStateMarked();
-        }
-        return savedState;
-
-    }
-
-
-    private Object removeFromList(Serializable key, Object value) {
-        Object ret = null;
-        if (component.initialStateMarked() || value instanceof PartialStateHolder) {
-            Collection<Object> deltaList = (Collection<Object>) deltaMap.get(key);
-            if (deltaList != null) {
-                ret = deltaList.remove(value);
-                if (deltaList.isEmpty()) {
-                    deltaMap.remove(key);
-                }
-            }
-        }
-        Collection<Object> list = (Collection<Object>) get(key);
-        if (list != null) {
-            if (ret == null) {
-                ret = list.remove(value);
-            } else {
-                list.remove(value);
-            }
-            if (list.isEmpty()) {
-                defaultMap.remove(key);
-            }
-        }
-        return ret;
-    }
-
-
-    private Object removeFromMap(Serializable key, String mapKey) {
-        Object ret = null;
-        if (component.initialStateMarked()) {
-            Map<String,Object> dMap = (Map<String,Object>) deltaMap.get(key);
-            if (dMap != null) {
-                ret = dMap.remove(mapKey);
-                if (dMap.isEmpty()) {
-                    deltaMap.remove(key);
-                }
-            }
-        }
-        Map<String,Object> map = (Map<String,Object>) get(key);
-        if (map != null) {
-            if (ret == null) {
-                ret = map.remove(mapKey);
-            } else {
-                map.remove(mapKey);
-
-            }
-            if (map.isEmpty()) {
-                defaultMap.remove(key);
-            }
-        }
-        if (ret != null && !component.initialStateMarked()) {
-            deltaMap.remove(key);
-        }
-        return ret;
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/ContextCallback.java b/jsf-api/src/main/java/javax/faces/component/ContextCallback.java
deleted file mode 100644
index 77f3228..0000000
--- a/jsf-api/src/main/java/javax/faces/component/ContextCallback.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-
-/**
- *
- * <p>A simple callback interace that enables taking action on a
- * specific UIComponent (either facet or child) in the view while
- * preserving any contextual state for that component instance in the
- * view.</p>
- *
- */
-public interface ContextCallback {
-    
-    /**
-     * <p>This method will be called by an implementation of {@link
-     * UIComponent#invokeOnComponent} and must be passed the component
-     * with the <code>clientId</code> given as an argument to
-     * <code>invokeOnComponent</code>.  At the point in time when this
-     * method is called, the argument <code>target</code> is guaranteed
-     * to be in the proper state with respect to its ancestors in the
-     * View.</p>
-     *
-     * @param context the <code>FacesContext</code> for this request.
-     *
-     * @param target the {@link UIComponent} that was located by
-     * <code>clientId</code> by a call to {@link
-     * UIComponent#invokeOnComponent}.
-     */
-    
-    public void invokeContextCallback(FacesContext context, 
-				      UIComponent target);
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/EditableValueHolder.java b/jsf-api/src/main/java/javax/faces/component/EditableValueHolder.java
deleted file mode 100644
index 387802a..0000000
--- a/jsf-api/src/main/java/javax/faces/component/EditableValueHolder.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.validator.Validator;
-import javax.faces.el.MethodBinding;
-import javax.faces.render.Renderer;
-
-
-/**
- * <p><strong class="changed_modified_2_0">EditableValueHolder</strong>
- * is an extension of ValueHolder that describes additional features
- * supported by editable components, including {@link ValueChangeEvent}s
- * and {@link Validator}s.
- */
-
-public interface EditableValueHolder extends ValueHolder {
-
-    /**
-     * <p>Return the submittedValue value of this component.  This
-     * method should only be used by the <code>encodeBegin()</code>
-     * and/or <code>encodeEnd()</code> methods of this component, or its
-     * corresponding {@link Renderer}.  <span
-     * class="changed_modified_2_0_rev_a">The action taken based on
-     * whether the value is <code>null</code>, empty, or
-     * non-<code>null</code> is determined based on the value of the
-     * <code>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</code>context-param.</span></p>
-     */
-    public Object getSubmittedValue();
-
-    /**
-     * <p class="changed_added_2_0">Convenience method to reset this
-     * component's value to the un-initialized state.</p>
-     *
-     * @since 2.0
-     */
-
-    public void resetValue();
-
-
-    /**
-     * <p>Set the submittedValue value of this component.  This method
-     * should only be used by the <code>decode()</code> and
-     * <code>validate()</code> method of this component, or its
-     * corresponding {@link Renderer}.  <span
-     * class="changed_modified_2_0_rev_a">The action taken based on
-     * whether the value is <code>null</code>, empty, or
-     * non-<code>null</code> is determined based on the value of the
-     * <code>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</code>context-param.</span></p>
-
-     * @param submittedValue The new submitted value
-     */
-    public void setSubmittedValue(Object submittedValue);
-
-    /**
-     * Return the "local value set" state for this component.
-     * Calls to <code>setValue()</code> automatically reset
-     * this property to <code>true</code>.
-     */
-    public boolean isLocalValueSet();
-
-    /**
-     * Sets the "local value set" state for this component.
-     */
-    public void setLocalValueSet(boolean localValueSet);
-
-
-
-    /**
-     * <p>Return a flag indicating whether the local value of this component
-     * is valid (no conversion error has occurred).</p>
-     */
-    public boolean isValid();
-
-
-    /**
-     * <p>Set a flag indicating whether the local value of this component
-     * is valid (no conversion error has occurred).</p>
-     *
-     * @param valid The new valid flag
-     */
-    public void setValid(boolean valid);
-
-
-    /**
-     * <p>Return the "required field" state for this component.</p>
-     */
-    public boolean isRequired();
-
-    /**
-     * <p>Set the "required field" state for this component.</p>
-     *
-     * @param required The new "required field" state
-     */
-    public void setRequired(boolean required);
-
-    /**
-     * <p>Return the "immediate" state for this component.</p>
-     */
-    public boolean isImmediate();
-
-    /**
-     * <p>Set the "immediate" state for this component.  When
-     * set to true, the component's value will be converted
-     * and validated immediately in the <em>Apply Request Values</em>
-     * phase, and {@link ValueChangeEvent}s will be delivered
-     * in that phase as well.  The default value for this
-     * property must be <code>false</code>.</p>
-     *
-     * @param immediate The new "immediate" state
-     */
-    public void setImmediate(boolean immediate);
-
-    /**
-     * <p>If {@link #setValidator} was not previously called for this
-     * instance, this method must return <code>null</code>.  If it was
-     * called, this method must return the exact
-     * <code>MethodBinding</code> instance that was passed to {@link
-     * #setValidator}.</p>
-     *
-     * <p>This method will be called during the <em>Process
-     * Validations</em> or <em>Apply Request Values</em> phases
-     * (depending on the value of the <code>immediate</code>
-     * property). </p>
-     *
-     * @deprecated {@link #getValidators} should be used instead.
-     */
-    public MethodBinding getValidator();
-
-    /**
-     * <p>Wrap the argument <code>validatorBinding</code> in an
-     * implementation of {@link javax.faces.validator.Validator} and
-     * store it in the internal data structure that backs the {@link
-     * #getValidators} method, taking care to over-write any instance
-     * that was stored by a previous call to <code>setValidator</code>.
-     * </p>
-     *
-     * <p>The argument method will be called during the <em>Process
-     * Validations</em> or <em>Apply Request Values</em> phases
-     * (depending on the value of the <code>immediate</code>
-     * property). </p>
-     *
-     * <p>Any method referenced by such an expression must be public,
-     * with a return type of <code>void</code>, and accept parameters of
-     * type {@link javax.faces.context.FacesContext}, {@link
-     * UIComponent}, and <code>Object</code>.</p>
-     *
-     * @param validatorBinding The new <code>MethodBinding</code> instance
-     * 
-     * @deprecated Use {@link #addValidator} instead, obtaining the
-     * argument {@link Validator} by creating an instance of {@link
-     * javax.faces.validator.MethodExpressionValidator}.
-     */
-    public void setValidator(MethodBinding validatorBinding);
-
-    /**
-     * <p>If {@link #setValueChangeListener} was not previously called
-     * for this instance, this method must return <code>null</code>.  If
-     * it was called, this method must return the exact
-     * <code>MethodBinding</code> instance that was passed to {@link
-     * #setValueChangeListener}.</p>
-     *
-     * @deprecated Use {@link #getValueChangeListeners} instead.
-     */
-    public MethodBinding getValueChangeListener();
-
-    /**
-     * <p>Wrap the argument <code>valueChangeMethod</code> in an
-     * implementation of {@link ValueChangeListener}
-     * and store it in the internal data structure that backs the {@link
-     * #getValueChangeListeners} method, taking care to over-write any
-     * instance that was stored by a previous call to
-     * <code>setValueChangeListener</code>.</p>
-     *
-     * <p>This argument method will be called during the <em>Process
-     * Validations</em> or <em>Apply Request Values</em> phases
-     * (depending on the value of the <code>immediate</code>
-     * property). </p>
-     *
-     * <p>Any method referenced by such an expression must be public,
-     * with a return type of <code>void</code>, and accept a parameter
-     * of type {@link javax.faces.event.ValueChangeEvent}.</p>
-     *
-     * @param valueChangeMethod The new method binding instance 
-     *
-     * @deprecated Use {@link #addValueChangeListener} instead, obtaining the
-     * argument {@link ValueChangeListener} by creating an instance of {@link
-     * javax.faces.event.MethodExpressionValueChangeListener}.
-     */
-    public void setValueChangeListener(MethodBinding valueChangeMethod);
-
-    /**
-     * <p>Add a {@link
-     * Validator} instance to the set associated with this
-     * component.</p>
-     *
-     * @param validator The {@link Validator} to add
-     *
-     * @throws NullPointerException if <code>validator</code>
-     *  is null
-     */
-    public void addValidator(Validator validator);
-
-    /**
-     * <p>Return the set of registered {@link Validator}s for this
-     * component instance.  If there are no registered validators,
-     * a zero-length array is returned.</p>
-     */
-    public Validator[] getValidators();
-
-    /**
-     * <p>Remove a {@link Validator} instance from the set associated with
-     * this component, if it was previously associated.
-     * Otherwise, do nothing.</p>
-     *
-     * @param validator The {@link Validator} to remove
-     */
-    public void removeValidator(Validator validator);
-
-    /**
-     * <p>Add a new {@link ValueChangeListener} to the set of listeners
-     * interested in being notified when {@link ValueChangeEvent}s occur.</p>
-     *
-     * @param listener The {@link ValueChangeListener} to be added
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public void addValueChangeListener(ValueChangeListener listener);
-
-    /**
-     * <p>Return the set of registered {@link ValueChangeListener}s for this
-     * component instance.  If there are no registered listeners,
-     * a zero-length array is returned.</p>
-     */
-    public ValueChangeListener[] getValueChangeListeners();
-
-    /**
-     * <p>Remove an existing {@link ValueChangeListener} (if any) from the
-     * set of listeners interested in being notified when
-     * {@link ValueChangeEvent}s occur.</p>
-     *
-     * @param listener The {@link ValueChangeListener} to be removed
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public void removeValueChangeListener(ValueChangeListener listener);
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/FacesComponent.java b/jsf-api/src/main/java/javax/faces/component/FacesComponent.java
deleted file mode 100644
index 1298ea6..0000000
--- a/jsf-api/src/main/java/javax/faces/component/FacesComponent.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a {@link
- * UIComponent}.  The value of the {@link #value} attribute is taken to
- * be the <em>component-type</em> and the fully qualified class name of
- * the class to which this annotation is attached is taken to be the
- * <em>component-class</em>.  The implementation must guarantee that for
- * each class annotated with <code>FacesComponent</code>, found with the
- * scanning algorithm in section JSF.11.5, {@link
- * javax.faces.application.Application#addComponent(java.lang.String,java.lang.String)}
- * is called, passing the derived <em>component-type</em> as the first
- * argument and the derived <em>component-class</em> as the second
- * argument.  The implementation must guarantee that all such calls to
- * <code>addComponent()</code> happen during application startup time
- * and before any requests are serviced.</p>
-
- */ 
-
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface FacesComponent {
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>component-type</em> with which
-     * instances of this class of component can be instantiated by
-     * calling {@link
-     * javax.faces.application.Application#createComponent(java.lang.String)}</p>
-     */ 
-
-    String value();
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/MethodBindingAdapterBase.java b/jsf-api/src/main/java/javax/faces/component/MethodBindingAdapterBase.java
deleted file mode 100644
index c9c3500..0000000
--- a/jsf-api/src/main/java/javax/faces/component/MethodBindingAdapterBase.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-/**
- * <p>Base class for classes that wrap a <code>MethodBinding</code> and
- * implement a faces listener-like interface.</p>
- *
- */ 
-
-abstract class MethodBindingAdapterBase extends Object {
-    
-    /**
-     * <p>Recursively interrogate the <code>cause</code> property of the
-     * argument <code>exception</code> and stop recursing either when it
-     * is an instance of <code>expectedExceptionClass</code> or
-     * <code>null</code>.  Return the result.</p>
-     */
-
-    Throwable getExpectedCause(Class expectedExceptionClass, 
-			       Throwable exception) {
-	Throwable result = exception.getCause();
-	if (null != result) {
-	    if (!expectedExceptionClass.isAssignableFrom(result.getClass())) {
-		result = getExpectedCause(expectedExceptionClass, result);
-	    }
-	}
-	return result;
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/MethodBindingValidator.java b/jsf-api/src/main/java/javax/faces/component/MethodBindingValidator.java
deleted file mode 100644
index c3da2c7..0000000
--- a/jsf-api/src/main/java/javax/faces/component/MethodBindingValidator.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-
-import javax.faces.el.MethodBinding;
-import javax.faces.el.EvaluationException;
-import javax.faces.context.FacesContext;
-
-/**
- * <p><strong>MethodBindingValidator</strong> is an {@link
- * ValidatorListener} that wraps a {@link MethodBinding}. When it
- * receives a {@link ActionEvent}, it executes a method on an
- * object identified by the {@link MethodBinding}.</p>
- */
-
-class MethodBindingValidator extends MethodBindingAdapterBase implements Validator, StateHolder {
-
-
-    // ------------------------------------------------------ Instance Variables
-    
-    private MethodBinding methodBinding = null;
-
-    public MethodBindingValidator() {}
-
-    
-    /**
-     * <p>Construct a {@link Validator} that contains a {@link
-     * MethodBinding}.</p>
-     */
-    public MethodBindingValidator(MethodBinding methodBinding) {
-
-        super();
-        this.methodBinding = methodBinding;
-
-    }
-
-    public MethodBinding getWrapped() {
-	return methodBinding;
-    }
-
-
-    // ------------------------------------------------------- Validator
-
-    public void validate(FacesContext context,
-                         UIComponent  component,
-                         Object       value) throws ValidatorException {
-	if (null == context || null == component) {
-	    throw new NullPointerException();
-	}
-        try {
-            methodBinding.invoke(context, new Object[] {context, component, 
-							value});
-        } 
-	catch (EvaluationException ee) {
-	    Throwable cause = this.getExpectedCause(ValidatorException.class,
-						    ee);
-	    if (cause instanceof ValidatorException) {
-		throw ((ValidatorException) cause);
-	    }
-	    if (cause instanceof RuntimeException) {
-		throw ((RuntimeException) cause);
-	    }
-	    throw new IllegalStateException(ee);
-        }
-	
-	
-    }
-
-
-
-    // 
-    // Methods from StateHolder
-    //
-
-    
-
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	Object result = null;
-	if (!tranzient) {
-	    if (methodBinding instanceof StateHolder) {
-		Object [] stateStruct = new Object[2];
-		
-		// save the actual state of our wrapped methodBinding
-		stateStruct[0] = ((StateHolder)methodBinding).saveState(context);
-		// save the class name of the methodBinding impl
-		stateStruct[1] = methodBinding.getClass().getName();
-
-		result = stateStruct;
-	    }
-	    else {
-		result = methodBinding;
-	    }
-	}
-
-	return result;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	// if we have state
-	if (null == state) {
-	    return;
-	}
-	
-	if (!(state instanceof MethodBinding)) {
-	    Object [] stateStruct = (Object []) state;
-	    Object savedState = stateStruct[0];
-	    String className = stateStruct[1].toString();
-	    MethodBinding result = null;
-	    
-	    Class toRestoreClass;
-	    if (null != className) {
-		try {
-		    toRestoreClass = loadClass(className, this);
-		}
-		catch (ClassNotFoundException e) {
-		    throw new IllegalStateException(e);
-		}
-		
-		if (null != toRestoreClass) {
-		    try {
-			result = 
-			    (MethodBinding) toRestoreClass.newInstance();
-		    }
-		    catch (InstantiationException e) {
-			throw new IllegalStateException(e);
-		    }
-		    catch (IllegalAccessException a) {
-			throw new IllegalStateException(a);
-		    }
-		}
-		
-		if (null != result && null != savedState) {
-		    // don't need to check transient, since that was
-		    // done on the saving side.
-		    ((StateHolder)result).restoreState(context, savedState);
-		}
-		methodBinding = result;
-	    }
-	}
-	else {
-	    methodBinding = (MethodBinding) state;
-	}
-    }
-
-    private boolean tranzient = false;
-
-    public boolean isTransient() {
-	return tranzient;
-    }
-
-    public void setTransient(boolean newTransientValue) {
-	tranzient = newTransientValue;
-    }
-
-    //
-    // Helper methods for StateHolder
-    //
-
-    private static Class loadClass(String name, 
-            Object fallbackClass) throws ClassNotFoundException {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return Class.forName(name, false, loader);
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/MethodBindingValueChangeListener.java b/jsf-api/src/main/java/javax/faces/component/MethodBindingValueChangeListener.java
deleted file mode 100644
index b6b1492..0000000
--- a/jsf-api/src/main/java/javax/faces/component/MethodBindingValueChangeListener.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.MethodBinding;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-
-/**
- * <p><strong>MethodBindingValueChangeListener</strong> is an {@link
- * ValueChangeListenerListener} that wraps a {@link MethodBinding}. When it
- * receives a {@link ValueChangeEvent}, it executes a method on an
- * object identified by the {@link MethodBinding}.</p>
- */
-
-class MethodBindingValueChangeListener extends MethodBindingAdapterBase implements ValueChangeListener, StateHolder {
-
-
-    // ------------------------------------------------------ Instance Variables
-    
-    private MethodBinding methodBinding = null;
-
-    public MethodBindingValueChangeListener() {}
-
-    
-    /**
-     * <p>Construct a {@link ValueChangeListener} that contains a {@link
-     * MethodBinding}.</p>
-     */
-    public MethodBindingValueChangeListener(MethodBinding methodBinding) {
-
-        super();
-        this.methodBinding = methodBinding;
-
-    }
-
-    public MethodBinding getWrapped() {
-	return methodBinding;
-    }
-
-
-    // ------------------------------------------------------- Event Method
-
-    /**
-     * @throws NullPointerException {@inheritDoc}     
-     * @throws AbortProcessingException {@inheritDoc}     
-     */ 
-    public void processValueChange(ValueChangeEvent actionEvent) throws AbortProcessingException {
-                         
-        if (actionEvent == null) {
-            throw new NullPointerException();
-        }
-        try {
-            FacesContext context = FacesContext.getCurrentInstance();
-            methodBinding.invoke(context, new Object[] {actionEvent});
-        } 
-	catch (EvaluationException ee) {
-	    Throwable cause = 
-		this.getExpectedCause(AbortProcessingException.class, ee);
-	    if (cause instanceof AbortProcessingException) {
-		throw  ((AbortProcessingException) cause);
-	    }
-	    if (cause instanceof RuntimeException) {
-		throw ((RuntimeException) cause);
-	    }
-	    throw new IllegalStateException(ee);
-        }
-    }
-
-    // 
-    // Methods from StateHolder
-    //
-
-    
-
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	Object result = null;
-	if (!tranzient) {
-	    if (methodBinding instanceof StateHolder) {
-		Object [] stateStruct = new Object[2];
-		
-		// save the actual state of our wrapped methodBinding
-		stateStruct[0] = ((StateHolder)methodBinding).saveState(context);
-		// save the class name of the methodBinding impl
-		stateStruct[1] = methodBinding.getClass().getName();
-
-		result = stateStruct;
-	    }
-	    else {
-		result = methodBinding;
-	    }
-	}
-
-	return result;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	// if we have state
-	if (null == state) {
-	    return;
-	}
-	
-	if (!(state instanceof MethodBinding)) {
-	    Object [] stateStruct = (Object []) state;
-	    Object savedState = stateStruct[0];
-	    String className = stateStruct[1].toString();
-	    MethodBinding result = null;
-	    
-	    Class toRestoreClass;
-	    if (null != className) {
-		try {
-		    toRestoreClass = loadClass(className, this);
-		}
-		catch (ClassNotFoundException e) {
-		    throw new IllegalStateException(e);
-		}
-		
-		if (null != toRestoreClass) {
-		    try {
-			result = 
-			    (MethodBinding) toRestoreClass.newInstance();
-		    }
-		    catch (InstantiationException e) {
-			throw new IllegalStateException(e);
-		    }
-		    catch (IllegalAccessException a) {
-			throw new IllegalStateException(a);
-		    }
-		}
-		
-		if (null != result && null != savedState) {
-		    // don't need to check transient, since that was
-		    // done on the saving side.
-		    ((StateHolder)result).restoreState(context, savedState);
-		}
-		methodBinding = result;
-	    }
-	}
-	else {
-	    methodBinding = (MethodBinding) state;
-	}
-    }
-
-    private boolean tranzient = false;
-
-    public boolean isTransient() {
-	return tranzient;
-    }
-
-    public void setTransient(boolean newTransientValue) {
-	tranzient = newTransientValue;
-    }
-
-    //
-    // Helper methods for StateHolder
-    //
-
-    private static Class loadClass(String name, 
-            Object fallbackClass) throws ClassNotFoundException {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return Class.forName(name, false, loader);
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/NamingContainer.java b/jsf-api/src/main/java/javax/faces/component/NamingContainer.java
deleted file mode 100644
index 96f559f..0000000
--- a/jsf-api/src/main/java/javax/faces/component/NamingContainer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-/**
- * <p><strong class="changed_modified_2_0">NamingContainer</strong> is an 
- * interface that must be
- * implemented by any {@link UIComponent} that wants to be a naming
- * container.  Naming containers affect the behavior of the
- * {@link UIComponent#findComponent} and {@link UIComponent#getClientId}
- * methods;  see those methods for further information.</p>
- */
-
-public interface NamingContainer {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p class="changed_modified_2_0">The separator character used in 
-     * component identifiers to demarcate
-     * navigation to a child naming container.</p>
-     * 
-     * @deprecated use {@link UINamingContainer#getSeparatorChar(javax.faces.context.FacesContext)}
-     */
-    public static final char SEPARATOR_CHAR = ':';
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/PartialStateHolder.java b/jsf-api/src/main/java/javax/faces/component/PartialStateHolder.java
deleted file mode 100644
index c1b9171..0000000
--- a/jsf-api/src/main/java/javax/faces/component/PartialStateHolder.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.component;
-
-import java.io.Serializable;
-
-/**
- * <p class="changed_added_2_0">Components that want to leverage the
- * partial state saving feature must implement this interface instead of
- * implementing {@link StateHolder}, from which this interface
- * inherits.</p>
- * @since 2.0
- */
-public interface PartialStateHolder extends StateHolder {
-
-
-    /**
-     * <p class="changed_added_2_0">The runtime must ensure that the
-     * {@link #markInitialState} method is called on each instance of
-     * this interface in the view at the appropriate time to indicate
-     * the component is in its initial state.  The implementor of the
-     * interface must ensure that {@link #initialStateMarked} returns
-     * <code>true</code> from the time <code>markInitialState()</code>
-     * is called until {@link #clearInitialState} is called, after which
-     * time <code>initialStateMarked()</code> must return
-     * <code>false</code>.  Also, during the time that the instance
-     * returns <code>true</code> from <code>initialStateMarked()</code>,
-     * the implementation must return only the state that has changed in
-     * its implementation of {@link StateHolder#saveState}.</p>
-     * @since 2.0
-     */
-    void markInitialState();
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if delta
-     * state changes are being tracked, otherwise <code>false</code></p>
-     * @since 2.0
-     */
-    boolean initialStateMarked();
-
-
-    /**
-     * <p class="changed_added_2_0">Reset the PartialStateHolder to a
-     * non-delta tracking state.</p>
-     * @since 2.0
-     */
-    void clearInitialState();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/SelectItemsIterator.java b/jsf-api/src/main/java/javax/faces/component/SelectItemsIterator.java
deleted file mode 100644
index 3279ed5..0000000
--- a/jsf-api/src/main/java/javax/faces/component/SelectItemsIterator.java
+++ /dev/null
@@ -1,675 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Map;
-import java.util.ListIterator;
-import java.io.ObjectOutputStream;
-import java.io.IOException;
-import java.io.NotSerializableException;
-import java.io.ObjectInputStream;
-import java.lang.reflect.Array;
-
-import javax.faces.model.SelectItem;
-import javax.faces.context.FacesContext;
-import javax.el.ValueExpression;
-
-
-/**
- * <p>Package private class for iterating over the set of {@link SelectItem}s
- * for a parent {@link UISelectMany} or {@link UISelectOne}.</p>
- *
- * // RELEASE_PENDING (rlubke,driscoll) performanc review
- */
-final class SelectItemsIterator implements Iterator<SelectItem> {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct an iterator instance for the specified parent component.</p>
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param parent The parent {@link UIComponent} whose children will be
-     *  processed
-     */
-    public SelectItemsIterator(FacesContext ctx, UIComponent parent) {
-
-        kids = parent.getChildren().listIterator();
-        this.ctx = ctx;
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    /**
-     * <p>Iterator over the SelectItem elements pointed at by a
-     * <code>UISelectItems</code> component, or <code>null</code>.</p>
-     */
-    private Iterator<SelectItem> items;
-
-
-    /**
-     * <p>Iterator over the children of the parent component.</p>
-     */
-    private ListIterator<UIComponent> kids;
-
-
-    /**
-     * Expose single SelectItems via an Iterator.  This iterator will be
-     * reset/reused for each individual SelectItem instance encountered.
-     */
-    private SingleElementIterator singleItemIterator;
-
-
-    /**
-     * The {@link FacesContext} for the current request.
-     */
-    private FacesContext ctx;
-
-
-    // -------------------------------------------------------- Iterator Methods
-
-
-    /**
-     * <p>Return <code>true</code> if the iteration has more elements.</p>
-     */
-    public boolean hasNext() {
-
-        if (items != null) {
-            if (items.hasNext()) {
-                return (true);
-            } else {
-                items = null;
-            }
-        }
-        Object next = findNextValidChild();
-        while (next != null) {
-            initializeItems(next);
-            if (items != null) {
-                return true;
-            } else {
-                next = findNextValidChild();
-            }
-        }
-        return false;
-
-    }
-
-
-    /**
-     * <p>Return the next element in the iteration.</p>
-     *
-     * @throws NoSuchElementException if there are no more elements
-     */
-    @SuppressWarnings({"unchecked"})
-    public SelectItem next() {
-
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-        if (items != null) {
-            return (items.next());
-        }
-        return next();
-
-    }
-
-
-    /**
-     * <p>Throw UnsupportedOperationException.</p>
-     */
-    public void remove() {
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>
-     * Initializes the <code>items</code> instance variable with an
-     * <code>Iterator</code> appropriate to the UISelectItem(s) value.
-     * </p>
-     */
-    private void initializeItems(Object kid) {
-
-        if (kid instanceof UISelectItem) {
-            UISelectItem ui = (UISelectItem) kid;
-            SelectItem item = (SelectItem) ui.getValue();
-            if (item == null) {
-                item = new SelectItem(ui.getItemValue(),
-                                      ui.getItemLabel(),
-                                      ui.getItemDescription(),
-                                      ui.isItemDisabled(),
-                                      ui.isItemEscaped(),
-                                      ui.isNoSelectionOption());
-            }
-            updateSingeItemIterator(item);
-            items = singleItemIterator;
-        } else if (kid instanceof UISelectItems) {
-            UISelectItems ui = (UISelectItems) kid;
-            Object value = ui.getValue();
-            if (value != null) {
-                if (value instanceof SelectItem) {
-                    updateSingeItemIterator((SelectItem) value);
-                    items = singleItemIterator;
-                } else if (value.getClass().isArray()) {
-                    items = new ArrayIterator(ctx, (UISelectItems) kid, value);
-                } else if (value instanceof Iterable) {
-                    items = new IterableItemIterator(ctx,
-                                                     (UISelectItems) kid,
-                                                     (Iterable<?>) value);
-                } else if (value instanceof Map) {
-                    items = new MapIterator((Map) value);
-                } else {
-                    throw new IllegalArgumentException();
-                }
-            }
-            if (items != null && !items.hasNext()) {
-                items = null;
-            }
-        } 
-
-    }
-
-
-    /**
-     * @return the next valid child for processing
-     */
-    private Object findNextValidChild() {
-
-        if (kids.hasNext()) {
-            Object next = kids.next();
-            while (kids.hasNext() && !(next instanceof UISelectItem || next instanceof UISelectItems)) {
-                next = kids.next();
-            }
-            if (next instanceof UISelectItem || next instanceof UISelectItems) {
-                return next;
-            }
-        }
-        return null;
-
-    }
-
-
-    /**
-     * Update the <code>singleItemIterator</code> with the provided
-     * <code>item</code>
-     * @param item the {@link SelectItem} to expose as an Iterator
-     */
-    private void updateSingeItemIterator(SelectItem item) {
-
-        if (singleItemIterator == null) {
-            singleItemIterator = new SingleElementIterator();
-        }
-        singleItemIterator.updateItem(item);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Exposes single {@link SelectItem} instances as an Iterator.
-     */
-    private static final class SingleElementIterator implements Iterator<SelectItem> {
-
-        private SelectItem item;
-        private boolean nextCalled;
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return !nextCalled;
-
-        }
-
-
-        public SelectItem next() {
-
-            if (nextCalled) {
-                throw new NoSuchElementException();
-            }
-            nextCalled = true;
-            return item;
-
-        }
-
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private void updateItem(SelectItem item) {
-
-            this.item = item;
-            nextCalled = false;
-
-        }
-
-    } // END SingleElementIterator
-
-
-    /**
-     * Iterates over a <code>Map</code> of values exposing each entry as a SelectItem.
-     * Note that this will do so re-using the same SelectItem but changing
-     * the value and label as appropriate.
-     */
-    private static final class MapIterator implements Iterator<SelectItem> {
-
-        private SelectItem item = new SelectItem();
-        private Iterator iterator;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        private MapIterator(Map map) {
-
-            this.iterator = map.entrySet().iterator();
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return iterator.hasNext();
-
-        }
-
-
-        public SelectItem next() {
-
-            Map.Entry entry = (Map.Entry) iterator.next();
-            Object key = entry.getKey();
-            Object value = entry.getValue();
-            item.setLabel(((key != null) ? key.toString() : value.toString()));
-            item.setValue(((value != null) ? value : ""));
-            return item;
-            
-        }
-
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-
-        }
-
-    } // END MapIterator
-
-
-    /**
-     * <p>
-     * Base class to support iterating over Collections or Arrays that may
-     * or may not contain <code>SelectItem</code> instances.
-     * </p>
-     */
-    private static abstract class GenericObjectSelectItemIterator implements Iterator<SelectItem> {
-
-        /**
-         * SelectItem that is updated based on the current Object being
-         * iterated over.
-         */
-        private GenericObjectSelectItem genericObjectSI;
-
-        /**
-         * The source <code>UISelectItems</code>.
-         */
-        protected UISelectItems sourceComponent;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        protected GenericObjectSelectItemIterator(UISelectItems sourceComponent) {
-
-            this.sourceComponent = sourceComponent;
-
-        }
-
-
-        // --------------------------------------------------- Protected Methods
-
-
-        protected SelectItem getSelectItemFor(FacesContext ctx, Object value) {
-
-            if (genericObjectSI == null) {
-                genericObjectSI = new GenericObjectSelectItem(sourceComponent);
-            }
-
-            genericObjectSI.updateItem(ctx, value);
-            return genericObjectSI;
-            
-        }
-
-
-        // ------------------------------------------------------ Nested Classes
-
-
-        /**
-         * A <code>SelectItem</code> implementation to support generating
-         * unique <code>SelectItem</code> values based on <code>ValueExpressions</code>
-         * from the owning {@link UISelectItems} instance.
-         */
-        @SuppressWarnings({"serial"})
-        private static final class GenericObjectSelectItem extends SelectItem {
-
-
-            private static final String VAR = "var";
-            private static final String ITEM_VALUE = "itemValue";
-            private static final String ITEM_LABEL = "itemLabel";
-            private static final String ITEM_DESCRIPTION = "itemDescription";
-            private static final String ITEM_ESCAPED = "itemLabelEscaped";
-            private static final String ITEM_DISABLED = "itemDisabled";
-            private static final String NO_SELECTION_OPTION = "noSelectionOption";
-
-            /**
-             * Resolves to the value of the <code>SelectItem</code>.
-             */
-            private ValueExpression itemValue;
-
-            /**
-             * Resolves to the label of the <code>SelectItem</code>.
-             */
-            private ValueExpression itemLabel;
-
-            /**
-             * Resolves to the description of the <code>SelectItem</code>.
-             */
-            private ValueExpression itemDescription;
-
-            /**
-             * Determines the value for the escaped property of the <code>SelectItem</code>.
-             */
-            private ValueExpression itemEscaped;
-
-            /**
-             * Determines the value for the disabled property of the <code>SelectItem</code>/
-             */
-            private ValueExpression itemDisabled;
-
-            /**
-             * Determines the value for the noSelectionOption property of the <code>SelectItem</code>/
-             */
-            private ValueExpression noSelectionOption;
-
-            /**
-             * The request-scoped variable under which the current object
-             * will be exposed.
-             */
-            private String var;
-
-            private UISelectItems sourceComponent;
-
-            // -------------------------------------------------------- Constructors
-
-
-            private GenericObjectSelectItem(UISelectItems sourceComponent) {
-
-                var = (String) sourceComponent.getAttributes().get(VAR);
-                this.sourceComponent = sourceComponent;
-                //itemValue = sourceComponent.getValueExpression(ITEM_VALUE);
-                //itemLabel = sourceComponent.getValueExpression(ITEM_LABEL);
-                //itemDescription = sourceComponent.getValueExpression(ITEM_DESCRIPTION);
-                //itemEscaped = sourceComponent.getValueExpression(ITEM_ESCAPED);
-                //itemDisabled = sourceComponent.getValueExpression(ITEM_DISABLED);
-                //noSelectionOption = sourceComponent.getValueExpression(NO_SELECTION_OPTION);
-
-            }
-
-            // ----------------------------------------------------- Private Methods
-
-
-            /**
-             * Updates the <code>SelectItem</code> properties based on the
-             * current value.
-             *
-             * @param ctx the {@link FacesContext} for the current request
-             * @param value the value to build the updated values from
-             */
-            private void updateItem(FacesContext ctx, Object value) {
-
-                Map<String, Object> reqMap =
-                      ctx.getExternalContext().getRequestMap();
-                Object oldVarValue = null;
-                if (var != null) {
-                    oldVarValue = reqMap.put(var, value);
-                }
-                try {
-                    Map<String,Object> attrs = sourceComponent.getAttributes();
-                    Object itemValueResult = attrs.get(ITEM_VALUE);
-                    Object itemLabelResult = attrs.get(ITEM_LABEL);
-                    Object itemDescriptionResult = attrs.get(ITEM_DESCRIPTION);
-                    Object itemEscapedResult = attrs.get(ITEM_ESCAPED);
-                    Object itemDisabledResult = attrs.get(ITEM_DISABLED);
-                    Object noSelectionOptionResult = attrs.get(NO_SELECTION_OPTION);
-                    setValue(((itemValueResult != null) ? itemValueResult : value));
-                    setLabel(((itemLabelResult != null)
-                                  ? itemLabelResult.toString()
-                                  : value.toString()));
-                    setDescription(((itemDescriptionResult != null)
-                                        ? itemDescriptionResult.toString()
-                                        : null));
-                    setEscape(((itemEscapedResult != null)
-                                   ? Boolean.valueOf(itemEscapedResult.toString())
-                                   : false));
-                    setDisabled(((itemDisabledResult != null)
-                                     ? Boolean.valueOf(itemDisabledResult.toString())
-                                     : false));
-                    setNoSelectionOption(((noSelectionOptionResult != null)
-                                     ? Boolean.valueOf(noSelectionOptionResult.toString())
-                                    : false));
-                } finally {
-                    if (var != null) {
-                        if (oldVarValue != null) {
-                            reqMap.put(var, oldVarValue);
-                        } else {
-                            reqMap.remove(var);
-                        }
-                    }
-                }
-
-            }
-
-
-            // --------------------------------------- Methods from Serializable
-
-
-            private void writeObject(ObjectOutputStream out) throws IOException {
-
-                throw new NotSerializableException();
-
-            }
-
-
-            private void readObject(ObjectInputStream in) throws IOException {
-
-                throw new NotSerializableException();
-
-            }
-
-        } // END GenericObjectSelectItem
-
-    } // END GenericObjectSelectItemIterator
-
-
-    /**
-     * Handles arrays of <code>SelectItem</code>s, generic Objects,
-     * or combintations of both.
-     *
-     * A single <code>GenericObjectSelectItem</code> will be leverage for any
-     * non-<code>SelectItem</code> objects encountered.
-     */
-    private static final class ArrayIterator extends GenericObjectSelectItemIterator {
-
-
-        private FacesContext ctx;
-        private Object array;
-        private int count;
-        private int index;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        private ArrayIterator(FacesContext ctx,
-                              UISelectItems sourceComponent,
-                              Object array) {
-
-            super(sourceComponent);
-            this.ctx = ctx;
-            this.array = array;
-            count = Array.getLength(array);
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return (index < count);
-
-        }
-
-        public SelectItem next() {
-
-            if (index >= count) {
-                throw new NoSuchElementException();
-            }
-
-            Object item = Array.get(array, index++);
-            if (item instanceof SelectItem) {
-                return (SelectItem) item;
-            } else {
-                return getSelectItemFor(ctx, item);
-            }
-
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-
-    } // END ArrayIterator
-
-
-    /**
-     * Handles Collections of <code>SelectItem</code>s, generic Objects,
-     * or combintations of both.
-     *
-     * A single <code>GenericObjectSelectItem</code> will be leverage for any
-     * non-<code>SelectItem</code> objects encountered.
-     */
-    private static final class IterableItemIterator extends GenericObjectSelectItemIterator {
-
-
-        private FacesContext ctx;
-        private Iterator<?> iterator;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        private IterableItemIterator(FacesContext ctx,
-                                     UISelectItems sourceComponent,
-                                     Iterable<?> iterable) {
-
-            super(sourceComponent);
-            this.ctx = ctx;
-            this.iterator = iterable.iterator();
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return iterator.hasNext();
-
-        }
-
-
-        public SelectItem next() {
-
-            Object item = iterator.next();
-            if (item instanceof SelectItem) {
-                return (SelectItem) item;
-            } else {
-                return getSelectItemFor(ctx, item);
-            }
-
-        }
-
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-            
-        }
-
-    } // END CollectionItemIterator
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/SelectUtils.java b/jsf-api/src/main/java/javax/faces/component/SelectUtils.java
deleted file mode 100644
index cf74447..0000000
--- a/jsf-api/src/main/java/javax/faces/component/SelectUtils.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.el.ExpressionFactory;
-import javax.el.ELException;
-
-/**
- * Contains common utility methods used by both {@link UISelectOne} and {@link
- * UISelectMany}.
- */
-class SelectUtils {
-
-
-    // ------------------------------------------------------------ Constructors
-
-    
-    private SelectUtils() { }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-    /**
-     * <p>Return <code>true</code> if the specified value matches one of the
-     * available options, performing a recursive search if if a {@link
-     * javax.faces.model.SelectItemGroup} instance is detected.</p>
-     *
-     * @param ctx          {@link FacesContext} for the current request
-     * @param value        {@link UIComponent} value to be tested
-     * @param items        Iterator over the {@link javax.faces.model.SelectItem}s
-     *                     to be checked
-     * @param converter    the {@link Converter} associated with this component
-     */
-    static boolean matchValue(FacesContext ctx,
-                              UIComponent component,
-                              Object value,
-                              Iterator<SelectItem> items,
-                              Converter converter) {
-
-        while (items.hasNext()) {
-            SelectItem item = items.next();
-            if (item instanceof SelectItemGroup) {
-                SelectItem subitems[] =
-                      ((SelectItemGroup) item).getSelectItems();
-                if ((subitems != null) && (subitems.length > 0)) {
-                    if (matchValue(ctx, component, value, new ArrayIterator(subitems), converter)) {
-                        return (true);
-                    }
-                }
-            } else {
-                Object compareValue = null;
-                
-                try {
-                    compareValue = doConversion(ctx, component, item, value,
-                        converter);
-                } catch (IllegalStateException ise) {
-                    continue;
-                }
-                
-                if (null == compareValue && null == value) {
-                    return true;
-                }
-
-                if (value.equals(compareValue)) {
-                    return (true);
-                }
-            }
-        }
-        return (false);
-
-    }
-    
-    /**
-     * Returns true iff component has a {@link UISelectItem} child
-     * whose itemValue exactly matches the argument value
-     * @param ctx
-     * @param component
-     * @param value
-     * @param items
-     * @return
-     */
-    
-    static boolean valueIsNoSelectionOption(FacesContext ctx,
-            UIComponent component,
-            Object value,
-            Iterator<SelectItem> items,
-            Converter converter) {
-        boolean result = false;
-        
-        while (items.hasNext()) {
-            SelectItem item = items.next();
-            if (item instanceof SelectItemGroup) {
-                SelectItem subitems[] =
-                      ((SelectItemGroup) item).getSelectItems();
-                if ((subitems != null) && (subitems.length > 0)) {
-                    if (valueIsNoSelectionOption(ctx, component, value, new ArrayIterator(subitems), converter)) {
-                        result = true;
-                        break;
-                    }
-                }
-            } else {
-                Object compareValue = null;
-                
-                try {
-                    compareValue = doConversion(ctx, component, item, value,
-                        converter);
-                } catch (IllegalStateException ise) {
-                    continue;
-                }
-                
-                if (null == compareValue && null == value &&
-                    item.isNoSelectionOption()) {
-                    result = true;
-                    break;
-                } else if (value.equals(compareValue) && item.isNoSelectionOption()) {
-                    result = true;
-                    break;
-                }
-            }
-            
-        }
-        
-        return result;
-    }
-    
-    private static Object doConversion(FacesContext ctx, 
-            UIComponent component, SelectItem item, 
-            Object value, Converter converter) throws IllegalStateException {
-        Object itemValue = item.getValue();
-        if (itemValue == null && value == null) {
-            return (null);
-        }
-        if ((value == null) ^ (itemValue == null)) {
-            throw new IllegalStateException("Either value was null, or itemValue was null, but not both.");
-        }
-        Object compareValue;
-        if (converter == null) {
-            compareValue =
-                    coerceToModelType(ctx, itemValue, value.getClass());
-        } else {
-            compareValue = itemValue;
-            if (compareValue instanceof String
-                 && !(value instanceof String)) {
-                // type mismatch between the time and the value we're
-                // comparing.  Invoke the Converter.
-                compareValue = converter.getAsObject(ctx,
-                        component,
-                        (String) compareValue);
-            }
-        }
-
-        return compareValue;
-    }
-
-
-    /**
-     * Coerce the provided value to the specified type using EL coercion.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param value the value to coerce
-     * @param toType the type <code>value</code> should be coerced to
-     *
-     * @return the result of the EL coersion
-     *
-     * @see ExpressionFactory#coerceToType(Object, Class)
-     */
-    private static Object coerceToModelType(FacesContext ctx,
-                                            Object value,
-                                            Class toType) {
-
-        Object newValue;
-        try {
-            ExpressionFactory ef = ctx.getApplication().getExpressionFactory();
-            newValue = ef.coerceToType(value, toType);
-        } catch (ELException ele) {
-            newValue = value;
-        } catch (IllegalArgumentException iae) {
-            // If coerceToType fails, per the docs it should throw
-            // an ELException, however, GF 9.0 and 9.0u1 will throw
-            // an IllegalArgumentException instead (see GF issue 1527).
-            newValue = value;
-        }
-
-        return newValue;
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Exposes an Array via an <code>Iterator</code>
-     */
-    static class ArrayIterator implements Iterator {
-
-        public ArrayIterator(Object items[]) {
-            this.items = items;
-        }
-
-        private Object items[];
-        private int index = 0;
-
-        public boolean hasNext() {
-            return (index < items.length);
-        }
-
-        public Object next() {
-            try {
-                return (items[index++]);
-            } catch (IndexOutOfBoundsException e) {
-                throw new NoSuchElementException();
-            }
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-    } // END ArrayIterator
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/StateHelper.java b/jsf-api/src/main/java/javax/faces/component/StateHelper.java
deleted file mode 100644
index 223bfd8..0000000
--- a/jsf-api/src/main/java/javax/faces/component/StateHelper.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package javax.faces.component;
-
-import java.io.Serializable;
-
-/**
- * <p class="changed_added_2_0">Define a <code>Map</code>-like contract
- * that makes it easier for components to implement {@link
- * PartialStateHolder}.  Each {@link UIComponent} in the view will
- * return an implementation of this interface from its {@link
- * UIComponent#getStateHelper} method.</p>
- *
- * @since 2.0
- */
-public interface StateHelper extends StateHolder {
-
-
-    /**
-     * <p class="changed_added_2_0">Return the previously stored value
-     * and store the specified key/value pair.  This is intended to
-     * store data that would otherwise reside in an instance variable on
-     * the component.</p>
-
-     * @since 2.0
-
-     * @param key the key for the value
-     * @param value the value
-     */
-    Object put(Serializable key, Object value);
-
-
-    /**
-     * <p class="changed_added_2_0">Remove the key/value pair from the
-     * helper, returning the value previously stored under this key.</p>
-     * @param key the key to remove
-     * @since 2.0
-     */
-    Object remove(Serializable key);
-
-
-    /**
-     * <p class="changed_added_2_0">Store the specified
-     * <code>mapKey</code>/<code>value</code> in a <code>Map</code> that
-     * is internal to the helper, and return the previously stored
-     * value.  The <code>Map</code> will then be associated with
-     * <code>key</code>.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * <p>It's important to note for delta tracking that any
-     * modifications to the internal <code>Map</code> be made through
-     * this method or {@link StateHelper#remove(java.io.Serializable,
-     * Object)}.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     * @param key the key of the map itself
-     * @param mapKey the key within the internal map
-     * @param value the value for the key in the internal map
-     */
-    Object put(Serializable key, String mapKey, Object value);
-
-
-    /**
-     * <p class="changed_added_2_0">Return the value currently
-     * associated with the specified <code>key</code> if any.</p>
-     * @param key the key for which the value should be returned.
-     * @since 2.0
-     */
-    Object get(Serializable key);
-
-
-    /**
-     * <p class="changed_added_2_0">Attempts to find a value associated
-     * with the specified key, using the value expression collection
-     * from the component if no such value is found.
-     * @param key the name of the value in the internal map, or the name
-     * of a value expression in the components value expression
-     * collection.</p>
-     *
-     * @since 2.0
-     */
-    Object eval(Serializable key);
-
-
-    /**
-     * <p class="changed_added_2_0">Performs the same logic as {@link
-     * #eval(java.io.Serializable)} } but if no value is found, this
-     * will return the specified <code>defaultValue</code></p>
-
-     * @param key the key for which the value should be returned.
-     * @param defaultValue the value to return if no value is found in
-     * the call to <code>eval()</code>.
-     * @since 2.0
-     */
-    Object eval(Serializable key, Object defaultValue);
-
-
-    /**
-     * <p class="changed_added_2_0">Store the specified
-     * <code>value</code> in a <code>List</code> that is internal to the
-     * <code>StateHelper</code>.</p>
-     *
-     * <p class="changed_added_2_0">It's important to note for delta
-     * tracking that any modifications to the internal <code>List</code>
-     * be made through this method or {@link
-     * StateHelper#remove(java.io.Serializable, Object)}.</p>
-     *
-     * @param key the key for which the value should be returned.
-     * @param value the value to add
-     * @since 2.0
-     */
-    void add(Serializable key, Object value);
-
-
-    /**
-     * <p class="changed_added_2_0">Remove a value from the inner data
-     * structure.  Look in the inner data structure for the value at the
-     * given <code>key</code>.  If the value is a <code>Map</code>,
-     * remove and return the value under the key given by the
-     * <code>valueOrKey</code> argument.  If the value is a
-     * <code>Collection</code>, simply remove the value given by
-     * the argument <code>valueOrKey</code> and return null.</p>
-     *
-     * @param key the key of in the inner data structure whose value is
-     * a <code>Collection</code> or <code>Map</code>
-     * @param valueOrKey the value or key to be removed.
-     */
-    Object remove(Serializable key, Object valueOrKey);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/StateHolder.java b/jsf-api/src/main/java/javax/faces/component/StateHolder.java
deleted file mode 100644
index f6eefd2..0000000
--- a/jsf-api/src/main/java/javax/faces/component/StateHolder.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-
-/**
- *
- * <p>This interface is implemented by classes that need to save their
- * state between requests.</p>
- *
- * <p>An implementor <strong>must</strong> implement both {@link
- * #saveState} and {@link #restoreState} methods in this class, since
- * these two methods have a tightly coupled contract between themselves.
- * In other words, if there is an ineritance hierarchy, it is not
- * permissable to have the {@link #saveState} and {@link #restoreState}
- * methods reside at different levels of the hierarchy.</p>
- *
- * <p>An implementor must have a public no-args constructor.</p>
- *
- */
-
-public interface StateHolder {
-
-    /**
-     * <p> Gets the state of the instance as a
-     * <code>Serializable</code> Object.<p>
-     *
-     * <p>If the class that implements this interface has references to
-     * instances that implement StateHolder (such as a
-     * <code>UIComponent</code> with event handlers, validators, etc.)
-     * this method must call the {@link #saveState} method on all those
-     * instances as well.  <strong>This method must not save the state
-     * of children and facets.</strong> That is done via the {@link
-     * javax.faces.application.StateManager}</p>
-     *
-     * <p>This method must not alter the state of the implementing
-     * object.  In other words, after executing this code:</p>
-     *
-     * <code><pre>
-     * Object state = component.saveState(facesContext);
-     * </pre></code>
-     *
-     * <p><code>component</code> should be the same as before executing
-     * it.</p>
-     *
-     * <p>The return from this method must be <code>Serializable</code></p>
-     * 
-     * @throws NullPointerException if <code>context</code> is null
-     */
-
-    public Object saveState(FacesContext context);
-
-    /**
-     *
-     * <p> Perform any processing required to restore the state from the
-     * entries in the state Object.</p>
-     *
-     * <p>If the class that implements this interface has references to
-     * instances that also implement StateHolder (such as a
-     * <code>UIComponent</code> with event handlers, validators, etc.)
-     * this method must call the {@link #restoreState} method on all those
-     * instances as well. </p>
-     * 
-     * @throws NullPointerException if either <code>context</code> or
-     *  <code>state</code> are <code>null</code>
-     */
-
-    public void restoreState(FacesContext context, Object state);
-
-    /**
-     *
-     * <p>If true, the Object implementing this interface must not
-     * participate in state saving or restoring.</p>
-     */
-
-    public boolean isTransient();
-
-    /**
-     * <p>Denotes whether or not the Object implementing this interface must
-     * or must not participate in state saving or restoring.</p>
-     * 
-     * @param newTransientValue boolean pass <code>true</code> if this Object 
-     *  will not participate in state saving or restoring, otherwise
-     *  pass <code>false</code>.
-     */ 
-    public void setTransient(boolean newTransientValue);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIColumn.java b/jsf-api/src/main/java/javax/faces/component/UIColumn.java
deleted file mode 100644
index 05cec74..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIColumn.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-/**
- * <p><strong>UIColumn</strong> is a {@link UIComponent} that represents
- * a single column of data within a parent {@link UIData} component.</p>
- */
-
-public class UIColumn extends UIComponentBase {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Column";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Column";
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Create a new {@link UIColumn} instance with default property
-     * values.</p>
-     */
-    public UIColumn() {
-
-        super();
-        setRendererType(null);
-
-    }
-
-  
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the footer facet of the column (if any).  A convenience
-     * method for <code>getFacet("footer")</code>.</p>
-     */
-    public UIComponent getFooter() {
-
-        return getFacet("footer");
-
-    }
-
-
-    /**
-     * <p>Set the footer facet of the column.  A convenience
-     * method for <code>getFacets().put("footer", footer)</code>.</p>
-     * 
-     * @param footer the new footer facet
-     * 
-     * @throws NullPointerException if <code>footer</code> is
-     *   <code>null</code>
-     */
-    public void setFooter(UIComponent footer) {
-
-        getFacets().put("footer", footer);
-
-    }
-
-
-    /**
-     * <p>Return the header facet of the column (if any).  A convenience
-     * method for <code>getFacet("header")</code>.</p>
-     */
-    public UIComponent getHeader() {
-
-        return getFacet("header");
-
-    }
-
-
-    /**
-     * <p>Set the header facet of the column.  A convenience
-     * method for <code>getFacets().put("header", header)</code>.</p>
-     * 
-     * @param header the new header facet
-     * 
-     * @throws NullPointerException if <code>header</code> is
-     *   <code>null</code>
-     */
-    public void setHeader(UIComponent header) {
-
-        getFacets().put("header", header);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UICommand.java b/jsf-api/src/main/java/javax/faces/component/UICommand.java
deleted file mode 100644
index b8ed897..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UICommand.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.el.MethodExpression;
-import javax.faces.application.Application;
-import javax.faces.context.FacesContext;
-import javax.faces.el.MethodBinding;
-import javax.faces.event.*;
-import javax.faces.render.Renderer;
-
-
-/**
- * <p><strong>UICommand</strong> is a {@link UIComponent} that represents
- * a user interface component which, when activated by the user, triggers
- * an application specific "command" or "action".  Such a component is
- * typically rendered as a push button, a menu item, or a hyperlink.</p>
- *
- * <p>When the <code>decode()</code> method of this {@link UICommand}, or
- * its corresponding {@link Renderer}, detects that this control has been
- * activated, it will queue an {@link ActionEvent}.
- * Later on, the <code>broadcast()</code> method will ensure that this
- * event is broadcast to all interested listeners.</p>
- * 
- * <p>Listeners will be invoked in the following order:
- * <ol>
- *  <li>{@link ActionListener}s, in the order in which they were registered.
- *  <li>The "actionListener" {@link MethodExpression} (which will cover
- *  the "actionListener" that was set as a <code>MethodBinding</code>).
- *  <li>The default {@link ActionListener}, retrieved from the
- *      {@link Application} - and therefore, any attached "action"
- *      {@link MethodExpression}.
- * </ol>
- * </p>
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Button</code>".  This value can be changed by calling the
- * <code>setRendererType()</code> method.</p>
- */
-
-public class UICommand extends UIComponentBase
-    implements ActionSource2 {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Command";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Command";
-
-
-    /**
-     * Properties that are tracked by state saving.
-     */
-    enum PropertyKeys {
-        value,
-        immediate,
-        methodBindingActionListener,
-        actionExpression,
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UICommand} instance with default property
-     * values.</p>
-     */
-    public UICommand() {
-
-        super();
-        setRendererType("javax.faces.Button");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    // ------------------------------------------------- ActionSource/ActionSource2 Properties
-
-
-    /**
-     * {@inheritDoc}
-     *
-     * @deprecated This has been replaced by {@link #getActionExpression}.
-     */
-    public MethodBinding getAction() {
-        MethodBinding result = null;
-        MethodExpression me;
-
-        if (null != (me = getActionExpression())) {
-            // if the MethodExpression is an instance of our private
-            // wrapper class.
-            if (me.getClass().equals(MethodExpressionMethodBindingAdapter.class)) {
-                result = ((MethodExpressionMethodBindingAdapter) me).getWrapped();
-            } else {
-                // otherwise, this is a real MethodExpression.  Wrap it
-                // in a MethodBinding.
-                result = new MethodBindingMethodExpressionAdapter(me);
-            }
-        }
-        return result;
-
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @deprecated This has been replaced by {@link #setActionExpression(javax.el.MethodExpression)}.
-     */
-    public void setAction(MethodBinding action) {
-        MethodExpressionMethodBindingAdapter adapter;
-        if (null != action) {
-            adapter = new MethodExpressionMethodBindingAdapter(action);
-            setActionExpression(adapter);
-        } else {
-            setActionExpression(null);
-        }
-    }
-    
-    /**
-     * {@inheritDoc}
-     * @deprecated Use {@link #getActionListeners} instead.
-     */
-    public MethodBinding getActionListener() {
-        return (MethodBinding) getStateHelper().get(PropertyKeys.methodBindingActionListener);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @deprecated This has been replaced by {@link #addActionListener(javax.faces.event.ActionListener)}.
-     */
-    public void setActionListener(MethodBinding actionListener) {
-        getStateHelper().put(PropertyKeys.methodBindingActionListener, actionListener);
-    } 
-
-    /**
-     * <p>The immediate flag.</p>
-     */
-    //private Boolean immediate;
-
-
-    public boolean isImmediate() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, false);
-
-    }
-
-
-    public void setImmediate(boolean immediate) {
-
-        getStateHelper().put(PropertyKeys.immediate, immediate);
-
-    }
-
-
-
-    /**
-     * <p>Returns the <code>value</code> property of the
-     * <code>UICommand</code>. This is most often rendered as a label.</p>
-     */
-    public Object getValue() {
-
-        return getStateHelper().eval(PropertyKeys.value);
-
-    }
-
-
-    /**
-     * <p>Sets the <code>value</code> property of the <code>UICommand</code>.
-     * This is most often rendered as a label.</p>
-     *
-     * @param value the new value
-     */
-    public void setValue(Object value) {
-
-        getStateHelper().put(PropertyKeys.value, value);
-
-    }
-
-
-    // ---------------------------------------------------- ActionSource / ActionSource2 Methods
-
-    
-    public MethodExpression getActionExpression() {
-        return (MethodExpression) getStateHelper().get(PropertyKeys.actionExpression);
-    }
-    
-    public void setActionExpression(MethodExpression actionExpression) {
-        getStateHelper().put(PropertyKeys.actionExpression, actionExpression);
-    }
-    
-    /** 
-     * @throws NullPointerException {@inheritDoc}
-     */ 
-    public void addActionListener(ActionListener listener) {
-
-        addFacesListener(listener);
-
-    }
-    
-    public ActionListener[] getActionListeners() {
-
-        ActionListener al[] = (ActionListener [])
-        getFacesListeners(ActionListener.class);
-        return (al);
-
-    }
-
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */ 
-    public void removeActionListener(ActionListener listener) {
-
-        removeFacesListener(listener);
-
-    }
-
-
-    // ----------------------------------------------------- UIComponent Methods
-
-
-    /**
-     * <p>In addition to to the default {@link UIComponent#broadcast}
-     * processing, pass the {@link ActionEvent} being broadcast to the
-     * method referenced by <code>actionListener</code> (if any),
-     * and to the default {@link ActionListener} registered on the
-     * {@link javax.faces.application.Application}.</p>
-     *
-     * @param event {@link FacesEvent} to be broadcast
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     * @throws IllegalArgumentException if the implementation class
-     *  of this {@link FacesEvent} is not supported by this component
-     * @throws NullPointerException if <code>event</code> is
-     * <code>null</code>
-     */
-    public void broadcast(FacesEvent event) throws AbortProcessingException {
-
-        // Perform standard superclass processing (including calling our
-        // ActionListeners)
-        super.broadcast(event);
-
-        if (event instanceof ActionEvent) {
-            FacesContext context = getFacesContext();
-            
-            // Notify the specified action listener method (if any)
-            MethodBinding mb = getActionListener();
-            if (mb != null) {
-                mb.invoke(context, new Object[] { event });
-            }
-
-            // Invoke the default ActionListener
-            ActionListener listener =
-              context.getApplication().getActionListener();
-            if (listener != null) {
-                listener.processAction((ActionEvent) event);
-            }
-        }
-    }
-
-    /**
-
-     * <p>Intercept <code>queueEvent</code> and take the following
-     * action.  If the event is an <code>{@link ActionEvent}</code>,
-     * obtain the <code>UIComponent</code> instance from the event.  If
-     * the component is an <code>{@link ActionSource}</code> obtain the
-     * value of its "immediate" property.  If it is true, mark the
-     * phaseId for the event to be
-     * <code>PhaseId.APPLY_REQUEST_VALUES</code> otherwise, mark the
-     * phaseId to be <code>PhaseId.INVOKE_APPLICATION</code>.  The event
-     * must be passed on to <code>super.queueEvent()</code> before
-     * returning from this method.</p>
-
-     */
-
-    public void queueEvent(FacesEvent e) {
-        UIComponent c = e.getComponent();
-        if (e instanceof ActionEvent && c instanceof ActionSource) {
-            if (((ActionSource) c).isImmediate()) {
-                e.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-            } else {
-                e.setPhaseId(PhaseId.INVOKE_APPLICATION);
-            }
-        }
-        super.queueEvent(e);
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIComponent.java b/jsf-api/src/main/java/javax/faces/component/UIComponent.java
deleted file mode 100644
index d03e835..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIComponent.java
+++ /dev/null
@@ -1,2478 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import java.util.MissingResourceException;
-import java.util.PropertyResourceBundle;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.FacesWrapper;
-import javax.faces.application.Resource;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitHint;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostRestoreStateEvent;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.event.FacesEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.FacesListener;
-import javax.faces.event.SystemEventListenerHolder;
-import javax.faces.render.Renderer;
-
-/**
- * <p><strong class="changed_modified_2_0">UIComponent</strong> is the
- * base class for all user interface components in JavaServer Faces.
- * The set of {@link UIComponent} instances associated with a particular
- * request and response are organized into a component tree under a
- * {@link UIViewRoot} that represents the entire content of the request
- * or response.</p>
- *
- * <p>For the convenience of component developers,
- * {@link UIComponentBase} provides the default
- * behavior that is specified for a {@link UIComponent}, and is the base class
- * for all of the concrete {@link UIComponent} "base" implementations.
- * Component writers are encouraged to subclass
- * {@link UIComponentBase}, instead of directly
- * implementing this abstract class, to reduce the impact of any future changes
- * to the method signatures.</p>
- *
- * <p class="changed_added_2_0">If the {@link
- * javax.faces.event.ListenerFor} annotation is attached to the class
- * definition of a <code>Component</code>, that class must also
- * implement {@link javax.faces.event.ComponentSystemEventListener}.
- * </p>
-
- */
-
-public abstract class UIComponent implements PartialStateHolder, SystemEventListenerHolder,
-        ComponentSystemEventListener {
-
-    private static Logger LOGGER = Logger.getLogger("javax.faces.component",
-            "javax.faces.LogStrings");
-    
-    /**
-     * <p class="changed_added_2_0">The key to which the
-     * <code>UIComponent</code> currently being processed will be
-     * associated with within the {@link FacesContext} attributes map.</p>
-     *
-     * @see javax.faces.context.FacesContext#getAttributes()
-     *
-     * @since 2.0
-     */
-    public static final String CURRENT_COMPONENT = "javax.faces.component.CURRENT_COMPONENT";
-
-    /**
-     * <p class="changed_added_2_0">The key to which the
-     * <em>composite</em> <code>UIComponent</code> currently being
-     * processed will be associated with within the {@link FacesContext}
-     * attributes map.</p>
-     *
-     * @see javax.faces.context.FacesContext#getAttributes()
-     *
-     * @since 2.0
-     */
-    public static final String CURRENT_COMPOSITE_COMPONENT = "javax.faces.component.CURRENT_COMPOSITE_COMPONENT";
-
-    /**
-     * <p class="changed_added_2_0">The value of this constant is used as the key in the
-     * component attribute map, the value for which is a
-     * <code>java.beans.BeanInfo</code> implementation describing the composite
-     * component.  This <code>BeanInfo</code> is known as the 
-     * <em>composite component BeanInfo</em>.</p>
-     *
-     * @since 2.0
-     */
-    public static final String BEANINFO_KEY = "javax.faces.component.BEANINFO_KEY";
-
-
-    /**
-     * <p class="changed_added_2_0">The value of this constant is used as the key
-     * in the <em>composite component BeanDescriptor</em> for the 
-     * <code>Map<PropertyDescriptor></code> that contains meta-information
-     * for the declared facets for this composite component.
-     * This map must contain an entry under the key {@link #COMPOSITE_FACET_NAME}, even
-     * if no facets were explicitly declared.  See {@link #COMPOSITE_FACET_NAME}.</p>
-     *
-     * @since 2.0
-     */
-    public static final String FACETS_KEY = "javax.faces.component.FACETS_KEY";
-    
-    /**
-     * <p class="changed_added_2_0">The value of this constant is used as the key
-     * in the component attributes <code>Map</code> for the 
-     * {@link javax.faces.view.Location} in the view at which this component 
-     * instance resides.</p>
-     *
-     * @since 2.0
-     */
-    public static final String VIEW_LOCATION_KEY = "javax.faces.component.VIEW_LOCATION_KEY";
-    
-    /**
-     * <p class="changed_added_2_0">The value of this constant is used as the key
-     * in the <em>composite component BeanDescriptor</em> for a 
-     * <code>ValueExpression</code> that evaluates to the 
-     * <code>component-type</code> of the <em>composite component root</em>
-     * <code>UIComponent</code> for this composite component, if
-     * one was declared by the composite component author.</p>
-     *
-     * @since 2.0
-     */
-    public static final String COMPOSITE_COMPONENT_TYPE_KEY = "javax.faces.component.COMPOSITE_COMPONENT_TYPE";
-    
-    /**
-     * <p class="changed_added_2_0">The value of this constant is used as the key
-     * in the <code>Map</code> returned as described in {@link #FACETS_KEY}
-     * for the 
-     * <code>PropertyDescriptor</code> describing the composite component facet.
-     * The value of this constant is also used as the key in the <code>Map</code>
-     * returned from {@link #getFacets}.  In this case, it refers to the actual
-     * facet that is the {@link javax.faces.component.UIPanel} that is the parent of the all
-     * of the components in the <code><composite:implementation></code>
-     * section of the <em>composite component VDL file</em>.</p>
-     *
-     * @since 2.0
-     */
-    public static final String COMPOSITE_FACET_NAME = "javax.faces.component.COMPOSITE_FACET_NAME";
-
-    enum PropertyKeysPrivate {
-        attributesThatAreSet
-    }
-
-    /**
-     * Properties that are tracked by state saving.
-     */
-    enum PropertyKeys {
-        rendered,
-        attributes,
-        bindings,
-        rendererType,
-        systemEventListeners,
-        behaviors
-    }
-
-    /**
-     * List of attributes that have been set on the component (this
-     * may be from setValueExpression, the attributes map, or setters
-     * from the concrete HTML components.  This allows
-     * for faster rendering of attributes as this list is authoratative
-     * on what has been set.
-     */
-    List<String> attributesThatAreSet;
-    StateHelper stateHelper = null;
-    UIComponent compositeParent;
-
-
-    // -------------------------------------------------------------- Attributes
-
-
-    /**
-     * <p>Return a mutable 
-     * <code>Map</code> representing the attributes
-     * (and properties, see below) associated wth this {@link UIComponent},
-     * keyed by attribute name (which must be a String).  The returned
-     * implementation must support all of the standard and optional
-     * <code>Map</code> methods, plus support the following additional
-     * requirements:</p>
-     * <ul>
-     * <li>The <code>Map</code> implementation must implement
-     *     the <code>java.io.Serializable</code> interface.</li>
-     * <li>Any attempt to add a <code>null</code> key or value must
-     *     throw a <code>NullPointerException</code>.</li>
-     * <li>Any attempt to add a key that is not a String must throw
-     *     a <code>ClassCastException</code>.</li>
-     * <li>If the attribute name specified as a key matches a property
-     *     of this {@link UIComponent}'s implementation class, the following
-     *     methods will have special behavior:
-     *     <ul>
-     *     <li><code>containsKey</code> - Return <code>false</code>.</li>
-     *     <li><code>get()</code> - If the property is readable, call
-     *         the getter method and return the returned value (wrapping
-     *         primitive values in their corresponding wrapper classes);
-     *         otherwise throw <code>IllegalArgumentException</code>.</li>
-     *     <li><code>put()</code> - If the property is writeable, call
-     *         the setter method to set the corresponding value (unwrapping
-     *         primitive values in their corresponding wrapper classes).
-     *         If the property is not writeable, or an attempt is made to
-     *         set a property of primitive type to <code>null</code>,
-     *         throw <code>IllegalArgumentException</code>.</li>
-     *     <li><code>remove</code> - Throw
-     *         <code>IllegalArgumentException</code>.</li>
-     *     </ul></li>
-     * </ul>
-     * 
-     */
-    public abstract Map<String, Object> getAttributes();
-    
-    
-    // ---------------------------------------------------------------- Bindings
-
-
-    /**
-     *
-     * <p>Call through to {@link #getValueExpression} and examine the
-     * result.  If the result is an instance of the wrapper class
-     * mandated in {@link #setValueBinding}, extract the
-     * <code>ValueBinding</code> instance and return it.  Otherwise,
-     * wrap the result in an implementation of
-     * <code>ValueBinding</code>, and return it.</p>
-     *
-     * @param name Name of the attribute or property for which to retrieve a
-     *  {@link ValueBinding}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated This has been replaced by {@link #getValueExpression}.
-     */
-    public abstract ValueBinding getValueBinding(String name);
-
-
-    /**
-     * <p>Wrap the argument <code>binding</code> in an implementation of
-     * {@link ValueExpression} and call through to {@link
-     * #setValueExpression}.</p>
-     *
-     * @param name Name of the attribute or property for which to set a
-     *  {@link ValueBinding}
-     * @param binding The {@link ValueBinding} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueBinding}
-     *
-     * @throws IllegalArgumentException if <code>name</code> is one of
-     *  <code>id</code> or <code>parent</code>
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated This has been replaced by {@link #setValueExpression}.
-     */
-    public abstract void setValueBinding(String name, ValueBinding binding);
-
-    // The set of ValueExpressions for this component, keyed by property
-    // name This collection is lazily instantiated
-    // The set of ValueExpressions for this component, keyed by property
-    // name This collection is lazily instantiated
-    @Deprecated
-    protected Map<String,ValueExpression> bindings = null;
-
-    /**
-     * <p>Return the {@link ValueExpression} used to calculate the value for the
-     * specified attribute or property name, if any.</p>
-     *
-     * <p>This method must be overridden and implemented for components that
-     * comply with JSF 1.2 and later.</p>
-     *
-     * @since 1.2
-     *
-     * @param name Name of the attribute or property for which to retrieve a
-     *  {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     */
-    public ValueExpression getValueExpression(String name) {
-
-        if (name == null) {
-            throw new NullPointerException();
-        }
-
-        Map<String,ValueExpression> map = (Map<String,ValueExpression>)
-              getStateHelper().get(UIComponentBase.PropertyKeys.bindings);
-        return ((map != null) ? map.get(name) : null);
-
-    }
-
-    /**
-     * <p>Set the {@link ValueExpression} used to calculate the value
-     * for the specified attribute or property name, if any.</p>
-     *
-     * <p>The implementation must call {@link
-     * ValueExpression#isLiteralText} on the argument
-     * <code>expression</code>.  If <code>isLiteralText()</code> returns
-     * <code>true</code>, invoke {@link ValueExpression#getValue} on the
-     * argument expression and pass the result as the <code>value</code>
-     * parameter in a call to <code>this.{@link
-     * #getAttributes()}.put(name, value)</code> where <code>name</code>
-     * is the argument <code>name</code>.  If an exception is thrown as
-     * a result of calling {@link ValueExpression#getValue}, wrap it in
-     * a {@link javax.faces.FacesException} and re-throw it.  If
-     * <code>isLiteralText()</code> returns <code>false</code>, simply
-     * store the un-evaluated <code>expression</code> argument in the
-     * collection of <code>ValueExpression</code>s under the key given
-     * by the argument <code>name</code>.</p>
-     *
-     * <p>This method must be overridden and implemented for components that
-     * comply with JSF 1.2 and later.</p>
-     *
-     * @since 1.2
-     *
-     * @param name Name of the attribute or property for which to set a
-     *  {@link ValueExpression}
-     * @param binding The {@link ValueExpression} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueExpression}
-     *
-     * @throws IllegalArgumentException if <code>name</code> is one of
-     *  <code>id</code> or <code>parent</code>
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     */
-    public void setValueExpression(String name, ValueExpression binding) {
-
-        if (name == null) {
-            throw new NullPointerException();
-        } else if ("id".equals(name) || "parent".equals(name)) {
-            throw new IllegalArgumentException();
-        }
-
-        if (binding != null) {
-            if (!binding.isLiteralText()) {
-                //if (bindings == null) {
-                //    //noinspection CollectionWithoutInitialCapacity
-                //    bindings = new HashMap<String, ValueExpression>();
-                //}
-                // add this binding name to the 'attributesThatAreSet' list
-                //List<String> sProperties = (List<String>)
-                //      getStateHelper().get(PropertyKeysPrivate.attributesThatAreSet);
-
-                 List<String> sProperties =
-                      (List<String>) getStateHelper().get(PropertyKeysPrivate.attributesThatAreSet);
-                if (sProperties == null) {
-                    getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, name);
-                } else if (!sProperties.contains(name)) {
-                    getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, name);
-                }
-                getStateHelper().put(UIComponentBase.PropertyKeys.bindings,
-                                     name,
-                                     binding);
-                //bindings.put(name, binding);
-            } else {
-                ELContext context =
-                    FacesContext.getCurrentInstance().getELContext();
-                try {
-                    getAttributes().put(name, binding.getValue(context));
-                } catch (ELException ele) {
-                    throw new FacesException(ele);
-                }
-            }
-        } else {
-            //if (bindings != null) {
-                // remove this binding name from the 'attributesThatAreSet' list
-//                List<String> sProperties = getAttributesThatAreSet(false);
-//                if (sProperties != null) {
-//                    sProperties.remove(name);
-//                }
-                getStateHelper().remove(PropertyKeysPrivate.attributesThatAreSet,
-                                        name);
-                getStateHelper().remove(UIComponentBase.PropertyKeys.bindings, name);
-                //bindings.remove(name);
-               // if (bindings.isEmpty()) {
-               //     bindings = null;
-               // }
-            }
-       // }
-
-    }
-
-    // -------------------------------------------------------------- Properties
-
-    boolean initialState;
-
-    /**
-     * <p class="changed_added_2_0">An implementation of {@link
-     * PartialStateHolder#markInitialState}, this method is called by
-     * the runtime to indicate that the instance should start tracking
-     * changes to its state.</p>
-     * @since 2.0
-     */
-    public void markInitialState() {
-        initialState = true;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">An implementation of {@link
-     * PartialStateHolder#initialStateMarked}, this method is called by
-     * the runtime to test if the {@link
-     * PartialStateHolder#markInitialState} method was called.</p>
-     * @since 2.0
-     */
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">An implementation of {@link
-     * PartialStateHolder#clearInitialState}, this method is called by
-     * the runtime to tell the instance to stop tracking state
-     * changes.</p>
-     * @since 2.0
-     */
-    public void clearInitialState() {
-        initialState = false;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the {@link StateHelper}
-     * instance used to help this component implement {@link
-     * PartialStateHolder}.</p>
-     * @since 2.0
-     */
-    protected StateHelper getStateHelper() {
-        return getStateHelper(true);
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Like {@link #getStateHelper()}, but
-     * only create a state helper instance if the argument
-     * <code>creat</code> is <code>true</code>.</p>
-     * @param create if <code>true</code>, a new {@link StateHelper}
-     * instance will be created if it does not exist already.  If
-     * <code>false</code>, and there is no existing
-     * <code>StateHelper</code> instance, one will not be created and
-     * <code>null</code> will be returned.
-     * @since 2.0
-     */
-    protected StateHelper getStateHelper(boolean create) {
-
-        if (create && stateHelper == null) {
-            stateHelper = new ComponentStateHelper(this);
-        }
-        return stateHelper;
-
-    }
-
-
-    private boolean isInView;
-
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if this
-     * component is within the view hierarchy otherwise
-     * <code>false</code></code>
-     *
-     * @since 2.0
-     */
-    public boolean isInView() {
-        return isInView;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Updates the status as to whether or
-     * not this component is currently within the view hierarchy.
-     * <strong>This method must never be called by developers; a {@link
-     * UIComponent}'s internal implementation will call it as components
-     * are added to or removed from a parent's child <code>List</code>
-     * or facet <code>Map</code></strong>.</p>
-     *
-     * @param isInView flag indicating whether or not this component is within
-     *  the view hierachy
-     *
-     * @since 2.0
-     */
-    public void setInView(boolean isInView) {
-        this.isInView = isInView;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Enable EL to access the <code>clientId</code>
-     * of a component.  This is particularly useful in combination with the 
-     * <code>component</code> and <code>cc</code> implicit
-     * objects.  A default implementation is provided that simply calls
-     * {@link FacesContext#getCurrentInstance} and then calls through to
-     * {@link #getClientId(FacesContext)}.</p>
-     * 
-     * @since 2.0
-     */
-    
-    public String getClientId() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        return getClientId(context);
-    }
-
-
-    /**
-     * <p>Return a client-side identifier for this component, generating
-     * one if necessary.  The associated {@link Renderer}, if any,
-     * will be asked to convert the clientId to a form suitable for
-     * transmission to the client.</p>
-     *
-     * <p>The return from this method must be the same value throughout
-     * the lifetime of the instance, unless the <code>id</code> property
-     * of the component is changed, or the component is placed in
-     * a {@link NamingContainer} whose client ID changes (for example,
-     * {@link UIData}).  However, even in these cases, consecutive
-     * calls to this method must always return the same value.  The
-     * implementation must follow these steps in determining the
-     * clientId:</p>
-     *
-     * <p>Find the closest ancestor to <b>this</b> component in the view
-     * hierarchy that implements <code>NamingContainer</code>.  Call
-     * <code>getContainerClientId()</code> on it and save the result as
-     * the <code>parentId</code> local variable.  Call {@link #getId} on
-     * <b>this</b> component and save the result as the
-     * <code>myId</code> local variable.  If <code>myId</code> is
-     * <code>null</code>, call
-     * <code>context.getViewRoot().createUniqueId()</code> and assign
-     * the result to myId.  If <code>parentId</code> is
-     * non-<code>null</code>, let <code>myId</code> equal <code>parentId
-     * + {@link UINamingContainer#getSeparatorChar} + myId</code>.  Call
-     * {@link Renderer#convertClientId}, passing <code>myId</code>, and
-     * return the result.</p>
-     *
-     * @param context The {@link FacesContext} for the current request
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract String getClientId(FacesContext context);
-
-    /**
-     * <p>Allow components that implement {@link NamingContainer} to
-     * selectively disable prepending their clientId to their
-     * descendent's clientIds by breaking the prepending logic into a
-     * seperately callable method.  See {@link #getClientId} for usage.</p>
-     *
-     * <p>By default, this method will call through to {@link
-     * #getClientId} and return the result.
-     *
-     * @since 1.2
-     *
-     *  @throws NullPointerException if <code>context</code> is
-     *  <code>null</code>
-     */
-    public String getContainerClientId(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        return this.getClientId(context);
-    }
-
-    /**
-     * <p>Return the identifier of the component family to which this
-     * component belongs.  This identifier, in conjunction with the value
-     * of the <code>rendererType</code> property, may be used to select
-     * the appropriate {@link Renderer} for this component instance.</p>
-     */
-    public abstract String getFamily();
-
-
-    /**
-     * <p>Return the component identifier of this {@link UIComponent}.</p>
-     */
-    public abstract String getId();
-
-
-    /**
-     * <p>Set the component identifier of this {@link UIComponent} (if any).
-     * Component identifiers must obey the following syntax restrictions:</p>
-     * <ul>
-     * <li>Must not be a zero-length String.</li>
-     * <li>First character must be a letter or an underscore ('_').</li>
-     * <li>Subsequent characters must be a letter, a digit,
-     *     an underscore ('_'), or a dash ('-').</li>
-     * <li>
-     * </ul>
-     *
-     * <p>Component identifiers must also obey the following semantic
-     * restrictions (note that this restriction is <strong>NOT</strong>
-     * enforced by the <code>setId()</code> implementation):</p>
-     * <ul>
-     * <li>The specified identifier must be unique among all the components
-     *     (including facets) that are descendents of the nearest ancestor
-     *     {@link UIComponent} that is a {@link NamingContainer}, or within
-     *     the scope of the entire component tree if there is no such
-     *     ancestor that is a {@link NamingContainer}.</li>
-     * </ul>
-     *
-     * @param id The new component identifier, or <code>null</code> to indicate
-     *  that this {@link UIComponent} does not have a component identifier
-     *
-     * @throws IllegalArgumentException if <code>id</code> is not
-     *  syntactically valid
-     */
-    public abstract void setId(String id);
-
-
-    /**
-     * <p>Return the parent {@link UIComponent} of this
-     * <code>UIComponent</code>, if any.  A component must allow child
-     * components to be added to and removed from the list of children
-     * of this component, even though the child component returns null
-     * from <code>getParent( )</code>.</p>
-     */
-    public abstract UIComponent getParent();
-
-
-    /**
-     * <p class="changed_modified_2_0">Set the parent
-     * <code>UIComponent</code> of this <code>UIComponent</code>.  <span
-     * class="changed_added_2_0">If <code>parent.isInView()</code>
-     * returns <code>true</code>, calling this method will first cause a
-     * {@link javax.faces.event.PreRemoveFromViewEvent} to be published,
-     * for this node, and then the children of this node.  Then, once
-     * the re-parenting has occurred, a {@link
-     * javax.faces.event.PostAddToViewEvent} will be published as well,
-     * first for this node, and then for the node's children, <span
-     * class="changed_modified_2_0_rev_a">but only if any of the
-     * following conditions are true.</span></p>
-
-     * <div class="changed_modified_2_0_rev_a">
-
-     *     <ul>
-
-     *       <li><p>{@link
-     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
-     *       {@link javax.faces.event.PhaseId#RESTORE_VIEW} and partial
-     *       state saving is enabled.</p></li>
-
-     *       <li><p>{@link javax.faces.context.FacesContext#isPostback}
-     *       returns <code>false</code> and {@link
-     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
-     *       something other than {@link
-     *       javax.faces.event.PhaseId#RESTORE_VIEW}</p></li>
-
-     *    </ul>
-
-     * </div>
-
-
-     * <p class="changed_modified_2_0"> <strong>This method must never
-     * be called by developers; a {@link UIComponent}'s internal
-     * implementation will call it as components are added to or removed
-     * from a parent's child <code>List</code> or facet
-     * <code>Map</code></strong></span>.</p>
-     *
-     * @param parent The new parent, or <code>null</code> for the root node
-     *  of a component tree
-     */
-    public abstract void setParent(UIComponent parent);
-
-
-    /**
-     * <p>Return <code>true</code> if this component (and its children)
-     * should be rendered during the <em>Render Response</em> phase
-     * of the request processing lifecycle.</p>
-     */
-    public abstract boolean isRendered();
-
-
-    /**
-     * <p>Set the <code>rendered</code> property of this
-     * {@link UIComponent}.</p>
-     *
-     * @param rendered If <code>true</code> render this component;
-     *  otherwise, do not render this component
-     */
-    public abstract void setRendered(boolean rendered);
-
-
-    /**
-     * <p>Return the {@link Renderer} type for this {@link UIComponent}
-     * (if any).</p>
-     */
-    public abstract String getRendererType();
-
-
-    /**
-     * <p>Set the {@link Renderer} type for this {@link UIComponent},
-     * or <code>null</code> for components that render themselves.</p>
-     *
-     * @param rendererType Logical identifier of the type of
-     *  {@link Renderer} to use, or <code>null</code> for components
-     *  that render themselves
-     */
-    public abstract void setRendererType(String rendererType);
-
-
-    /**
-     * <p>Return a flag indicating whether this component is responsible
-     * for rendering its child components.  The default implementation
-     * in {@link UIComponentBase#getRendersChildren} tries to find the
-     * renderer for this component.  If it does, it calls {@link
-     * Renderer#getRendersChildren} and returns the result.  If it
-     * doesn't, it returns false.  As of version 1.2 of the JavaServer
-     * Faces Specification, component authors are encouraged to return
-     * <code>true</code> from this method and rely on {@link
-     * UIComponentBase#encodeChildren}.</p>
-     */
-    public abstract boolean getRendersChildren();
-    
-
-    
-    private Map<String, String> resourceBundleMap = null;
-    
-    /**
-     * <p class="changed_added_2_0">Return a
-     * <code>Map<String,String></code> of the
-     * <code>ResourceBundle</code> for this component.  A component may
-     * have a <code>ResourceBundle</code> associated with it.  This
-     * bundle may contain localized properties relating to instances of
-     * this component.  The default implementation first looks for a
-     * <code>ResourceBundle</code> with a base name equal to the fully
-     * qualified class name of the current <code>UIComponent this</code>
-     * and <code>Locale</code> equal to the <code>Locale</code> of the
-     * current <code>UIViewRoot</code>.  If no such bundle is found, and
-     * the component is a composite component, let <em>resourceName</em>
-     * be the <em>resourceName</em> of the {@link Resource} for this
-     * composite component, replacing the file extension with
-     * ".properties".  Let <em>libraryName</em> be the
-     * <em>libraryName</em> of the the {@link Resource} for this
-     * composite component.  Call {@link
-     * javax.faces.application.ResourceHandler#createResource(java.lang.String,java.lang.String)},
-     * passing the derived <em>resourceName</em> and
-     * <em>libraryName</em>.  Note that this will automatically allow
-     * for the localization of the <code>ResourceBundle</code> due to
-     * the localization facility implemented in
-     * <code>createResource</code>, which is specified in section
-     * JSF.2.6.1.3 of the spec prose document.  If the resultant {@link
-     * Resource} exists and can be found, the <code>InputStream</code>
-     * for the resource is used to create a <code>ResourceBundle</code>.
-     * If either of the two previous steps for obtaining the
-     * <code>ResourceBundle</code> for this component is successful, the
-     * <code>ResourceBundle</code> is wrapped in a
-     * <code>Map<String,String></code> and returned.  Otherwise
-     * <code>Collections.EMPTY_MAP</code> is returned.</p>
-     *
-     * @since 2.0
-     */
-    public Map<String,String> getResourceBundleMap() {
-        
-        if (null == resourceBundleMap) {
-            // See if there is a ResourceBundle under the FQCN for this class
-            String className = this.getClass().getName();
-            Locale currentLocale = null;
-            FacesContext context = null;
-            UIViewRoot root = null;
-            ResourceBundle resourceBundle = null;
-            
-            // Step 1: look for a ResourceBundle under the FQCN of this instance
-            if (null != (context = FacesContext.getCurrentInstance())) {
-                if (null != (root = context.getViewRoot())) {
-                    currentLocale = root.getLocale();
-                }
-            }
-            if (null == currentLocale) {
-                currentLocale = Locale.getDefault();
-            }
-            try {
-                resourceBundle = 
-                        ResourceBundle.getBundle(className, currentLocale);
-            } catch (MissingResourceException e) {
-                // It is not an error if there is no ResourceBundle
-            }
-            
-            // Step 2: if this is a composite component, look for a 
-            // ResourceBundle as a Resource
-            if (null == resourceBundle) {
-                if (this.getAttributes().containsKey(Resource.COMPONENT_RESOURCE_KEY)) {
-                    Resource ccResource = (Resource)
-                            this.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
-                    if (null != ccResource) {
-                        if (null != (ccResource = 
-                                findComponentResourceBundleLocaleMatch(context, 
-                                ccResource.getResourceName(), 
-                                ccResource.getLibraryName()))) {
-                            try {
-                                InputStream propertiesInputStream = ccResource.getInputStream();
-                                resourceBundle = new PropertyResourceBundle(propertiesInputStream);
-                            } catch (IOException ex) {
-                                Logger.getLogger(UIComponent.class.getName()).log(Level.SEVERE, null, ex);
-                            }
-                        }
-                    }
-                }
-            }
-            
-            // Step 3: if the previous steps yielded a ResourceBundle, wrap it
-            // with a Map
-            
-            if (null != resourceBundle) {
-                final ResourceBundle bundle = resourceBundle;
-                resourceBundleMap = 
-                        new Map() {
-                            // this is an immutable Map
-
-                            public String toString() {
-                                StringBuffer sb = new StringBuffer();
-                                Iterator<Map.Entry<String, Object>> entries =
-                                        this.entrySet().iterator();
-                                Map.Entry<String, Object> cur;
-                                while (entries.hasNext()) {
-                                    cur = entries.next();
-                                    sb.append(cur.getKey()).append(": ").append(cur.getValue()).append('\n');
-                                }
-
-                                return sb.toString();
-                            }
-
-                            // Do not need to implement for immutable Map
-                            public void clear() {
-                                throw new UnsupportedOperationException();
-                            }
-
-
-                            public boolean containsKey(Object key) {
-                                boolean result = false;
-                                if (null != key) {
-                                    result = (null != bundle.getObject(key.toString()));
-                                }
-                                return result;
-                            }
-
-
-                            public boolean containsValue(Object value) {
-                                Enumeration<String> keys = bundle.getKeys();
-                                boolean result = false;
-                                while (keys.hasMoreElements()) {
-                                    Object curObj = bundle.getObject(keys.nextElement());
-                                    if ((curObj == value) ||
-                                            ((null != curObj) && curObj.equals(value))) {
-                                        result = true;
-                                        break;
-                                    }
-                                }
-                                return result;
-                            }
-
-
-                            public Set<Map.Entry<String, Object>> entrySet() {
-                                HashMap<String, Object> mappings = new HashMap<String, Object>();
-                                Enumeration<String> keys = bundle.getKeys();
-                                while (keys.hasMoreElements()) {
-                                    String key = keys.nextElement();
-                                    Object value = bundle.getObject(key);
-                                    mappings.put(key, value);
-                                }
-                                return mappings.entrySet();
-                            }
-
-
-                            @Override
-                            public boolean equals(Object obj) {
-                                return !((obj == null) || !(obj instanceof Map))
-                                         && entrySet().equals(((Map) obj).entrySet());
-
-                            }
-
-
-                            public Object get(Object key) {
-                                if (null == key) {
-                                    return null;
-                                }
-                                try {
-                                    return bundle.getObject(key.toString());
-                                } catch (MissingResourceException e) {
-                                    return "???" + key + "???";
-                                }
-                            }
-
-
-                            public int hashCode() {
-                                return bundle.hashCode();
-                            }
-
-
-                            public boolean isEmpty() {
-                                Enumeration<String> keys = bundle.getKeys();
-                                return !keys.hasMoreElements();
-                            }
-
-
-                            public Set keySet() {
-                                Set<String> keySet = new HashSet<String>();
-                                Enumeration<String> keys = bundle.getKeys();
-                                while (keys.hasMoreElements()) {
-                                    keySet.add(keys.nextElement());
-                                }
-                                return keySet;
-                            }
-
-
-                            // Do not need to implement for immutable Map
-                            public Object put(Object k, Object v) {
-                                throw new UnsupportedOperationException();
-                            }
-
-
-                            // Do not need to implement for immutable Map
-                            public void putAll(Map t) {
-                                throw new UnsupportedOperationException();
-                            }
-
-
-                            // Do not need to implement for immutable Map
-                            public Object remove(Object k) {
-                                throw new UnsupportedOperationException();
-                            }
-
-
-                            public int size() {
-                                int result = 0;
-                                Enumeration<String> keys = bundle.getKeys();
-                                while (keys.hasMoreElements()) {
-                                    keys.nextElement();
-                                    result++;
-                                }
-                                return result;
-                            }
-
-
-                            public java.util.Collection values() {
-                                ArrayList<Object> result = new ArrayList<Object>();
-                                Enumeration<String> keys = bundle.getKeys();
-                                while (keys.hasMoreElements()) {
-                                    result.add(
-                                            bundle.getObject(keys.nextElement()));
-                                }
-                                return result;
-                            }
-                        };
-
-            }
-
-            if (null == resourceBundleMap) {
-                resourceBundleMap = Collections.EMPTY_MAP;
-            }
-
-        }
-        
-        return resourceBundleMap;
-    }
-
-    // PENDING(rlubke): I'm sure there's a more efficient
-    // way to handle this.
-    private Resource findComponentResourceBundleLocaleMatch(FacesContext context, 
-            String resourceName, String libraryName) {
-        Resource result = null;
-        ResourceBundle resourceBundle = null;
-        int i;
-        if (-1 != (i = resourceName.lastIndexOf("."))) {
-            resourceName = resourceName.substring(0, i) +
-                    ".properties";
-            if (null != context) {
-                result = context.getApplication().getResourceHandler().
-                        createResource(resourceName, libraryName);
-                try {
-                    InputStream propertiesInputStream = result.getInputStream();
-                    resourceBundle = new PropertyResourceBundle(propertiesInputStream);
-                } catch (IOException ex) {
-                    Logger.getLogger(UIComponent.class.getName()).log(Level.SEVERE, null, ex);
-                }
-            }
-        }
-        result = (null != resourceBundle) ? result : null;
-        
-        return result;
-    }
-    
-    
-    // This is necessary for JSF components that extend from UIComponent
-    // directly rather than extending from UIComponentBase.  Such components
-    // may need to have implementations provided for methods that originated
-    // from a spec version more recent than the version with which the component
-    // complies.  Currently this private property is only consulted in the
-    // getValueExpression() method.
-    private boolean isUIComponentBase;
-    private boolean isUIComponentBaseIsSet = false;
-
-    private boolean isUIComponentBase() {
-        if (!isUIComponentBaseIsSet) {
-            isUIComponentBase = (this instanceof UIComponentBase);
-        }
-
-        return isUIComponentBase;
-    }
-
-
-    // ------------------------------------------------- Tree Management Methods
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> a mutable
-     * <code>List</code> representing the child {@link UIComponent}s
-     * associated with this component.  The returned implementation must
-     * support all of the standard and optional <code>List</code>
-     * methods, plus support the following additional requirements:</p>
-     * <ul> <li>The <code>List</code> implementation must implement the
-     * <code>java.io.Serializable</code> interface.</li> <li>Any attempt
-     * to add a <code>null</code> must throw a NullPointerException</li>
-     * <li>Any attempt to add an object that does not implement {@link
-     * UIComponent} must throw a ClassCastException.</li> <li>Whenever a
-     * new child component is added, the <code>parent</code> property of
-     * the child must be set to this component instance.  If the
-     * <code>parent</code> property of the child was already non-null,
-     * the child must first be removed from its previous parent (where
-     * it may have been either a child or a facet).</li> <li>Whenever an
-     * existing child component is removed, the <code>parent</code>
-     * property of the child must be set to <code>null</code>.</li>
-
-     * <li class="changed_modified_2_1"><p>After the child component has
-     *     been added to the view, {@link
-     *     javax.faces.application.Application#publishEvent} must be
-     *     called, passing {@link
-     *     javax.faces.event.PostAddToViewEvent}<code>.class</code> as
-     *     the first argument and the newly added component as the
-     *     second argument if any the following cases are true.</p>
-     *
-     *     <ul>
-
-     *       <li><p>{@link
-     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
-     *       {@link javax.faces.event.PhaseId#RESTORE_VIEW} and partial
-     *       state saving is enabled.</p></li>
-
-     *       <li><p>{@link javax.faces.context.FacesContext#isPostback}
-     *       returns <code>false</code> and {@link
-     *       javax.faces.context.FacesContext#getCurrentPhaseId} returns
-     *       something other than {@link
-     *       javax.faces.event.PhaseId#RESTORE_VIEW}</p></li>
-
-     *    </ul>
-
-     * </li>
-
-     * </ul>
-     */
-    public abstract List<UIComponent> getChildren();
-
-
-    /**
-     * <p>Return the number of child {@link UIComponent}s that are
-     * associated with this {@link UIComponent}.  If there are no
-     * children, this method must return 0.  The method must not cause
-     * the creation of a child component list.</p>
-     */
-    public abstract int getChildCount();
-
-
-    /**
-     * <p>Search for and return the {@link UIComponent} with an <code>id</code>
-     * that matches the specified search expression (if any), according to the
-     * algorithm described below.</p>
-     *
-     * <p>For a method to find a component given a simple
-     * <code>clientId</code>, see {@link #invokeOnComponent}.</p>
-     *
-     * <p>Component identifiers are required to be unique within the scope of
-     * the closest ancestor {@link NamingContainer} that encloses this
-     * component (which might be this component itself).  If there are no
-     * {@link NamingContainer} components in the ancestry of this component,
-     * the root component in the tree is treated as if it were a
-     * {@link NamingContainer}, whether or not its class actually implements
-     * the {@link NamingContainer} interface.</p>
-     *
-     * <p>A <em>search expression</em> consists of either an identifier
-     * (which is matched exactly against the <code>id</code> property of
-     * a {@link UIComponent}, or a series of such identifiers linked by
-     * the {@link UINamingContainer#getSeparatorChar} character value.
-     * The search algorithm should operates as follows, though alternate
-     * alogrithms may be used as long as the end result is the same:</p>
-
-     * <ul>
-     * <li>Identify the {@link UIComponent} that will be the base for searching,
-     *     by stopping as soon as one of the following conditions is met:
-     *     <ul>
-     *     <li>If the search expression begins with the the separator character
-     *         (called an "absolute" search expression),
-     *         the base will be the root {@link UIComponent} of the component
-     *         tree.  The leading separator character will be stripped off,
-     *         and the remainder of the search expression will be treated as
-     *         a "relative" search expression as described below.</li>
-     *     <li>Otherwise, if this {@link UIComponent} is a
-     *         {@link NamingContainer} it will serve as the basis.</li>
-     *     <li>Otherwise, search up the parents of this component.  If
-     *         a {@link NamingContainer} is encountered, it will be the base.
-     *         </li>
-     *     <li>Otherwise (if no {@link NamingContainer} is encountered)
-     *         the root {@link UIComponent} will be the base.</li>
-     *     </ul></li>
-     * <li>The search expression (possibly modified in the previous step) is now
-     *     a "relative" search expression that will be used to locate the
-     *     component (if any) that has an <code>id</code> that matches, within
-     *     the scope of the base component.  The match is performed as follows:
-     *     <ul>
-     *     <li>If the search expression is a simple identifier, this value is
-     *         compared to the <code>id</code> property, and then recursively
-     *         through the facets and children of the base {@link UIComponent}
-     *         (except that if a descendant {@link NamingContainer} is found,
-     *         its own facets and children are not searched).</li>
-     *     <li>If the search expression includes more than one identifier
-     *         separated by the separator character, the first identifier is
-     *         used to locate a {@link NamingContainer} by the rules in the
-     *         previous bullet point.  Then, the <code>findComponent()</code>
-     *         method of this {@link NamingContainer} will be called, passing
-     *         the remainder of the search expression.</li>
-     *     </ul></li>
-     * </ul>
-     *
-     * @param expr Search expression identifying the {@link UIComponent}
-     *  to be returned
-     *
-     * @return the found {@link UIComponent}, or <code>null</code>
-     *  if the component was not found.
-     *
-     * @throws IllegalArgumentException if an intermediate identifier
-     *  in a search expression identifies a {@link UIComponent} that is
-     *  not a {@link NamingContainer}
-     * @throws NullPointerException if <code>expr</code>
-     *  is <code>null</code>
-     */
-    public abstract UIComponent findComponent(String expr);
-
-    /**
-     * <p>Starting at this component in the View hierarchy, search for a
-     * component with a <code>clientId</code> equal to the argument
-     * <code>clientId</code> and, if found, call the {@link
-     * ContextCallback#invokeContextCallback} method on the argument
-     * <code>callback</code>, passing the current {@link FacesContext}
-     * and the found component as arguments. This method is similar to
-     * {@link #findComponent} but it does not support the leading {@link
-     * UINamingContainer#getSeparatorChar} syntax for searching from the
-     * root of the View.</p>
-     *
-     * <p>The default implementation will first check if
-     * <code>this.getClientId()</code> is equal to the argument
-     * <code>clientId</code>.  If so, call the {@link
-     * ContextCallback#invokeContextCallback} method on the argument callback,
-     * passing through the <code>FacesContext</code> argument and
-     * passing this as the component argument.  If an
-     * <code>Exception</code> is thrown by the callback, wrap it in a
-     * {@link FacesException} and re-throw it.  Otherwise, return
-     * <code>true</code>.</p>
-     *
-     * <p>Otherwise, for each component returned by {@link
-     * #getFacetsAndChildren}, call <code>invokeOnComponent()</code>
-     * passing the arguments to this method, in order.  The first time
-     * <code>invokeOnComponent()</code> returns true, abort traversing
-     * the rest of the <code>Iterator</code> and return
-     * <code>true</code>.</p>
-     *
-     * <p>When calling {@link ContextCallback#invokeContextCallback}
-     * the implementation of this method must guarantee that the state
-     * of the component passed to the callback correctly reflects the
-     * component's position in the View hierarchy with respect to any
-     * state found in the argument <code>clientId</code>.  For example,
-     * an iterating component such as {@link UIData} will need to set
-     * its row index to correctly reflect the argument
-     * <code>clientId</code> before finding the appropriate child
-     * component backed by the correct row.  When the callback returns,
-     * either normally or by throwing an <code>Exception</code> the
-     * implementation of this method must restore the state of the view
-     * to the way it was before invoking the callback.</p>
-     *
-     * <p>If none of the elements from {@link
-     * #getFacetsAndChildren} returned <code>true</code> from
-     * <code>invokeOnComponent()</code>, return <code>false</code>.</p>
-     *
-     * <p>Simple usage example to find a component by
-     * <code>clientId</code>.</p>
-
-* <pre><code>
-private UIComponent found = null;
-
-private void doFind(FacesContext context, String clientId) {
-  context.getViewRoot().invokeOnComponent(context, clientId,
-      new ContextCallback() {
-         public void invokeContextCallback(FacesContext context,
-                                       UIComponent component) {
-           found = component;
-         }
-      });
-}
-* </code></pre>
-
-     *
-     *
-     * @since 1.2
-     *
-     * @param context the {@link FacesContext} for the current request
-     *
-     * @param clientId the client identifier of the component to be passed
-     * to the argument callback.
-     *
-     * @param callback an implementation of the Callback interface.
-     *
-     * @throws NullPointerException if any of the arguments are null
-     *
-     * @throws FacesException if the argument Callback throws an
-     * Exception, it is wrapped in a <code>FacesException</code> and re-thrown.
-     *
-     * @return <code>true</code> if the a component with the given
-     * <code>clientId</code> is found, the callback method was
-     * successfully invoked passing that component as an argument, and
-     * no Exception was thrown.  Returns <code>false</code> if no
-     * component with the given <code>clientId</code> is found.
-     *
-     */
-
-    public boolean invokeOnComponent(FacesContext context, String clientId,
-            ContextCallback callback) throws FacesException {
-        if (null == context || null == clientId || null == callback) {
-            throw new NullPointerException();
-        }
-
-        boolean found = false;
-        if (clientId.equals(this.getClientId(context))) {
-            try {
-                callback.invokeContextCallback(context, this);
-                return true;
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        } else {
-            Iterator<UIComponent> itr = this.getFacetsAndChildren();
-
-            while (itr.hasNext() && !found) {
-                found = itr.next().invokeOnComponent(context, clientId,
-                        callback);
-            }
-        }
-        return found;
-    }
-
-    // ------------------------------------------------ Facet Management Methods
-
-
-    /**
-     * <p>Return a mutable <code>Map</code> representing the facet
-     * {@link UIComponent}s associated with this {@link UIComponent},
-     * keyed by facet name (which must be a String).  The returned
-     * implementation must support all of the standard and optional
-     * <code>Map</code> methods, plus support the following additional
-     * requirements:</p>
-
-     * <ul>
-     * <li>The <code>Map</code> implementation must implement
-     *     the <code>java.io.Serializable</code> interface.</li>
-     * <li>Any attempt to add a <code>null</code> key or value must
-     *     throw a NullPointerException.</li>
-     * <li>Any attempt to add a key that is not a String must throw
-     *     a ClassCastException.</li>
-     * <li>Any attempt to add a value that is not a {@link UIComponent}
-     *     must throw a ClassCastException.</li>
-     * <li>Whenever a new facet {@link UIComponent} is added:
-     *     <ul>
-     *     <li>The <code>parent</code> property of the component must be set to
-     *         this component instance.</li>
-     *     <li>If the <code>parent</code> property of the component was already
-     *     non-null, the component must first be removed from its previous
-     *     parent (where it may have been either a child or a facet).</li>
-     *     </ul></li>
-
-     * <li>Whenever an existing facet {@link UIComponent} is removed:
-     *     <ul>
-     *     <li>The <code>parent</code> property of the facet must be
-     *         set to <code>null</code>.</li>
-     *     </ul></li>
-     * </ul>
-     */
-    public abstract Map<String, UIComponent> getFacets();
-
-    /**
-     * <p>Return the number of facet {@link UIComponent}s that are
-     * associated with this {@link UIComponent}.  If there are no
-     * facets, this method must return 0.  The method must not cause
-     * the creation of a facet component map.</p>
-     *
-     * <p>For backwards compatability with classes that extend UIComponent
-     * directly, a default implementation is provided that simply calls
-     * {@link #getFacets} and then calls the <code>size()</code> method on the
-     * returned <code>Map</code>.  A more optimized version of this method is
-     * provided in {@link UIComponentBase#getFacetCount}.
-     *
-     * @since 1.2
-     */
-    public int getFacetCount() {
-        return (getFacets().size());
-    }
-
-
-
-    /**
-     * <p>Convenience method to return the named facet, if it exists, or
-     * <code>null</code> otherwise.  If the requested facet does not
-     * exist, the facets Map must not be created.</p>
-     *
-     * @param name Name of the desired facet
-     */
-    public abstract UIComponent getFacet(String name);
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the facet followed by child
-     * {@link UIComponent}s of this {@link UIComponent}.
-     * Facets are returned in an undefined order, followed by
-     * all the children in the order they are stored in the child list. If this
-     * component has no facets or children, an empty <code>Iterator</code>
-     * is returned.</p>
-     *
-     * <p>The returned <code>Iterator</code> must not support the
-     * <code>remove()</code> operation.</p>
-     */
-    public abstract Iterator<UIComponent> getFacetsAndChildren();
-
-
-    // -------------------------------------------- Lifecycle Processing Methods
-
-
-    /**
-     * <p>Broadcast the specified {@link FacesEvent} to all registered
-     * event listeners who have expressed an interest in events of this
-     * type.  Listeners are called in the order in which they were
-     * added.</p>  
-     * <p class="changed_added_2_0">If the <code>event</code> is an instance of 
-     * {@link javax.faces.event.BehaviorEvent} and the current 
-     * <code>component</code> is the source of the <code>event</code>
-     * call {@link javax.faces.event.BehaviorEvent#getBehavior} to get the
-     * {@link javax.faces.component.behavior.Behavior} for the event. 
-
-     * <span class="changed_modified_2_0_rev_a">Call {@link
-     * javax.faces.component.behavior.Behavior#broadcast(javax.faces.event.BehaviorEvent)}
-     * on the <code>Behavior</code> instance</span>.</p>
-     *
-     * @param event The {@link FacesEvent} to be broadcast
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     * @throws IllegalArgumentException if the implementation class
-     *  of this {@link FacesEvent} is not supported by this component
-     * @throws NullPointerException if <code>event</code> is
-     * <code>null</code>
-     */
-    public abstract void broadcast(FacesEvent event)
-        throws AbortProcessingException;
-
-
-    /**
-     * <p>Decode any new state of this {@link UIComponent} from the
-     * request contained in the specified {@link FacesContext}, and store
-     * this state as needed.</p>
-     * <p>During decoding, events may be enqueued for later processing
-     * (by event listeners who have registered an interest),  by calling
-     * <code>queueEvent()</code>.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void decode(FacesContext context);
-    
-    /**
-     * <p class="changed_added_2_0">Perform a tree visit starting at
-     * this node in the tree.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p>UIComponent.visitTree() implementations do not invoke the
-     * {@link VisitCallback} directly, but instead call {@link
-     * VisitContext#invokeVisitCallback} to invoke the callback.  This
-     * allows {@code VisitContext} implementations to provide optimized
-     * tree traversals, for example by only calling the {@code
-     * VisitCallback} for a subset of components.</p>
-     *
-     * <p>UIComponent.visitTree() implementations must call
-     * UIComponent.pushComponentToEL() before performing the
-     * visit and UIComponent.popComponentFromEL() after the
-     * visit.</p>
-     *
-     * @param context the <code>VisitContext</code> for this visit
-     * @param callback the <code>VisitCallback</code> instance
-     * whose <code>visit</code> method will be called
-     * for each node visited.
-     * @return component implementations may return <code>true</code> 
-     *   to indicate that the tree visit is complete (eg. all components
-     *   that need to be visited have been visited).  This results in
-     *   the tree visit being short-circuited such that no more components
-     *   are visited.
-     *
-     * </div>
-     *
-     * @see VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()
-     *
-     * @since 2.0
-     */
-    public boolean visitTree(VisitContext context, 
-                             VisitCallback callback) {
-
-        // First check to see whether we are visitable.  If not
-        // short-circuit out of this subtree, though allow the
-        // visit to proceed through to other subtrees.
-        if (!isVisitable(context))
-            return false;
-
-        // Push ourselves to EL before visiting
-        FacesContext facesContext = context.getFacesContext();
-        pushComponentToEL(facesContext, null);
-
-        try {
-            // Visit ourselves.  Note that we delegate to the 
-            // VisitContext to actually perform the visit.
-            VisitResult result = context.invokeVisitCallback(this, callback);
-
-            // If the visit is complete, short-circuit out and end the visit
-            if (result == VisitResult.COMPLETE)
-              return true;
-
-            // Visit children if necessary
-            if (result == VisitResult.ACCEPT) {
-                Iterator<UIComponent> kids = this.getFacetsAndChildren();
-
-                while(kids.hasNext()) {
-                    boolean done = kids.next().visitTree(context, callback);
-
-                    // If any kid visit returns true, we are done.
-                    if (done)
-                        return true;
-                }
-            }
-        }
-        finally {
-            // Pop ourselves off the EL stack
-            popComponentFromEL(facesContext);
-        }
-
-        // Return false to allow the visit to continue
-        return false;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if this
-     * component should be visited, <code>false</code> otherwise.
-     * Called by {@link UIComponent#visitTree UIComponent.visitTree()}
-     * to determine whether this component satisfies the hints returned
-     * by {@link javax.faces.component.visit.VisitContext#getHints}.</p>
-
-     * <div class="changed_added_2_0">
-
-     * <p>If this method returns false, the tree visited is
-     * short-circuited such that neither the component nor any of its
-     * descendents will be visited></p> 
-
-     * <p>Custom {@code visitTree()} implementations may call this
-     * method to determine whether the component is visitable before
-     * performing any visit-related processing.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     */
-    protected boolean isVisitable(VisitContext context) {
-
-        // VisitHints currently defines two hints that affect 
-        // visitability: VIIST_RENDERED and VISIT_TRANSIENT.
-        // Check for both of these and if set, verify that 
-        // we comply.
-        Set<VisitHint> hints = context.getHints();
-
-        if ((hints.contains(VisitHint.SKIP_UNRENDERED) && 
-                !this.isRendered())                    ||
-            (hints.contains(VisitHint.SKIP_TRANSIENT)  && 
-                this.isTransient())) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * <p><span class="changed_modified_2_0">If</span> our
-     * <code>rendered</code> property is <code>true</code>, render the
-     * beginning of the current state of this {@link UIComponent} to the
-     * response contained in the specified {@link FacesContext}. 
-     * Call {@link #pushComponentToEL(javax.faces.context.FacesContext,javax.faces.component.UIComponent)}.
-     * Call {@link javax.faces.application.Application#publishEvent}, passing
-     * {@link javax.faces.event.PreRenderComponentEvent}<code>.class</code> as the
-     * first argument and the component instance to be rendered as the
-     * second argument.</p></li>
-
-     * <p>If a {@link Renderer} is associated with this {@link
-     * UIComponent}, the actual encoding will be delegated to
-     * {@link Renderer#encodeBegin(FacesContext, UIComponent)}.
-     * </p>
-     *
-     * <p class="changed_added_2_0">If our <code>rendered</code> property is
-     * <code>false</code>, call {@link #pushComponentToEL(javax.faces.context.FacesContext,javax.faces.component.UIComponent)}
-     * and return immediately.</p>
-     *
-     * @param context {@link FacesContext} for the response we are creating
-     *
-     * @throws IOException if an input/output error occurs while rendering
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void encodeBegin(FacesContext context) throws IOException;
-
-
-    /**
-     * <p>If our <code>rendered</code> property is <code>true</code>,
-     * render the child {@link UIComponent}s of this {@link UIComponent}.
-     * This method will only be called
-     * if the <code>rendersChildren</code> property is <code>true</code>.</p>
-     *
-     * <p>If a {@link Renderer} is associated with this {@link UIComponent},
-     * the actual encoding will be delegated to
-     * {@link Renderer#encodeChildren(FacesContext, UIComponent)}.
-     * <span class="changed_modified_2_0">If no {@link Renderer} is associated
-     * with this {@link UIComponent}, iterate over each of the children of this
-     * component and call 
-     * {@link #encodeAll(javax.faces.context.FacesContext)}.</span></p>
-     *
-     * @param context {@link FacesContext} for the response we are creating
-     *
-     * @throws IOException if an input/output error occurs while rendering
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void encodeChildren(FacesContext context) throws IOException;
-
-
-    /**
-     * <p><span class="changed_modified_2_0">If</span> our
-     * <code>rendered</code> property is <code>true</code>, render the
-     * ending of the current state of this {@link UIComponent}.</p>
-     *
-     * <p>If a {@link Renderer} is associated with this {@link UIComponent},
-     * the actual encoding will be delegated to
-     * {@link Renderer#encodeEnd(FacesContext, UIComponent)}.</p>
-     *
-     * <p class="changed_added_2_0">Call {@link
-     * UIComponent#popComponentFromEL}. before returning regardless of the value
-     *  of the <code>rendered</code> property.</p>
-     *
-     * @param context {@link FacesContext} for the response we are creating
-     *
-     * @throws IOException if an input/output error occurs while rendering
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void encodeEnd(FacesContext context) throws IOException;
-
-    /**
-     * <p>If this component
-     * returns <code>true</code> from {@link #isRendered}, take the
-     * following action.</p>
-     *
-     * <p>Render this component and all its children that return
-     * <code>true</code> from <code>isRendered()</code>, regardless of
-     * the value of the {@link #getRendersChildren} flag.</p></li>
-
-     * @since 1.2
-     *
-     * @throws IOException if an input/output error occurs while rendering
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public void encodeAll(FacesContext context) throws IOException {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (!isRendered()) {
-            return;
-        }
-
-        encodeBegin(context);
-        if (getRendersChildren()) {
-            encodeChildren(context);
-        } else if (this.getChildCount() > 0) {
-            for (UIComponent kid : getChildren()) {
-                kid.encodeAll(context);
-            }
-        }
-
-        encodeEnd(context);
-
-    }
-
-
-    private UIComponent previouslyPushed = null;
-    private UIComponent previouslyPushedCompositeComponent = null;
-    private boolean pushed;
-    private int depth;
-
-    /**
-     * <p class="changed_added_2_0">Push the current
-     * <code>UIComponent</code> <code>this</code> to the {@link FacesContext}
-     * attribute map using the key {@link #CURRENT_COMPONENT} saving the previous
-     * <code>UIComponent</code> associated with {@link #CURRENT_COMPONENT} for a
-     * subsequent call to {@link #popComponentFromEL}.</p>
-     *
-     * <pclass="changed_added_2_0">This method and <code>popComponentFromEL()</code> form the basis for
-     * the contract that enables the EL Expression "<code>#{component}</code>" to
-     * resolve to the "current" component that is being processed in the
-     * lifecycle.  The requirements for when <code>pushComponentToEL()</code> and
-     * <code>popComponentFromEL()</code> must be called are specified as
-     * needed in the javadoc for this class.</p>
-     *
-     * <p class="changed_added_2_0">After
-     * <code>pushComponentToEL()</code> returns, a call to {@link
-     * #getCurrentComponent} must return <code>this</code>
-     * <code>UIComponent</code> instance until
-     * <code>popComponentFromEL()</code> is called, after which point
-     * the previous <code>UIComponent</code> instance will be returned
-     * from <code>getCurrentComponent()</code></p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @param component the <code>component</code> to push to the EL.  If
-     *  <code>component</code> is <code>null</code> the <code>UIComponent</code>
-     *  instance that this call was invoked upon will be pushed to the EL.
-     *
-     * @throws NullPointerException if <code>context</code> is <code>null</code>
-     *
-     * @see javax.faces.context.FacesContext#getAttributes()
-     *
-     * @since 2.0
-     */
-    public final void pushComponentToEL(FacesContext context, UIComponent component) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (null == component) {
-            component = this;
-        }
-
-        Map<Object,Object> contextMap = context.getAttributes();
-
-        if (contextMap.get(CURRENT_COMPONENT) == component) {
-            depth++;
-            return;
-        }
-        if (contextMap.get(CURRENT_COMPOSITE_COMPONENT) == component) {
-            depth++;
-            return;
-        }
-
-        pushed = true;
-        previouslyPushed = (UIComponent) contextMap.put(CURRENT_COMPONENT, component);
-        // If this is a composite component...
-        if (UIComponent.isCompositeComponent(component)) {
-            // make it so #{cc} resolves to this composite
-            // component, preserving the previous value if present
-            previouslyPushedCompositeComponent =
-                    (UIComponent) contextMap.put(CURRENT_COMPOSITE_COMPONENT, component);
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Pop the current
-     * <code>UIComponent</code> from the {@link FacesContext} attributes map
-     * so that the previous <code>UIComponent</code>, if any, becomes the current
-     * component.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     * 
-     * @throws NullPointerException if <code>context</code> is <code>null</code>
-     *
-     * @see javax.faces.context.FacesContext#getAttributes()
-     *
-     * @since 2.0
-     */
-    public final void popComponentFromEL(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (depth > 0) {
-            depth--;
-            return;
-        }
-        
-        Map<Object,Object> contextMap = context.getAttributes();
-        if (contextMap != null) {
-
-            if (!pushed) {
-                return;
-            }
-            UIComponent c;
-            pushed = false;
-            if (previouslyPushed != null) {
-                c = (UIComponent) contextMap.put(CURRENT_COMPONENT, previouslyPushed);
-            } else {
-                c = (UIComponent) contextMap.remove(CURRENT_COMPONENT);
-            }
-
-            if (c != null && UIComponent.isCompositeComponent(c)) {
-                if (previouslyPushedCompositeComponent != null) {
-                    contextMap.put(CURRENT_COMPOSITE_COMPONENT,
-                                   previouslyPushedCompositeComponent);
-                } else {
-                    contextMap.remove(CURRENT_COMPOSITE_COMPONENT);
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if
-     * <code>component</code> is a composite component, otherwise
-     * <code>false</code>.</p>
-     *
-     * @param component the {@link UIComponent} to test
-     *
-     * @throws NullPointerException if <code>component</code> is <code>null</code>
-     * @since 2.0
-     */
-    public static boolean isCompositeComponent(UIComponent component) {
-
-        if (component == null) {
-            throw new NullPointerException();
-        }
-        return (component.getAttributes().containsKey(Resource.COMPONENT_RESOURCE_KEY));
-
-    }
-
-
-    /**
-     * <p>
-     * Finds the nearest composite component parent of the specified component.
-     * </p>
-     *
-     * @param component the component from which to start the search from
-     *
-     * @return if <code>component</code> is <code>null</code>, return
-     *  <code>null</code>, otherwise search the component's parent hierachy
-     *  for the nearest parent composite component.  If no parent composite
-     *  component is found, return <code>null</code>
-     *
-     * @since 2.0
-     */
-    public static UIComponent getCompositeComponentParent(UIComponent component) {
-
-        if (component == null) {
-            return null;
-        } else {
-            if (component.compositeParent != null) {
-                return component.compositeParent;
-            }
-            UIComponent parent = component.getParent();
-            while (parent != null) {
-                if (UIComponent.isCompositeComponent(parent)) {
-                    if (component.isInView()) {
-                        component.compositeParent = parent;
-                    }
-                    return parent;
-                }
-                parent = parent.getParent();
-            }
-            return null;
-        }
-        
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>UIComponent</code>
-     * instance that is currently processing.  This is equivalent to
-     * evaluating the EL expression "<code>#{component}</code>" and
-     * doing a <code>getValue</code> operation on the resultant
-     * <code>ValueExpression</code>.</p>
-     *
-     * <p class="changed_added_2_0">This method must return
-     * <code>null</code> if there is no currently processing
-     * <code>UIComponent</code></p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public static UIComponent getCurrentComponent(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        Map<Object, Object> contextMap = context.getAttributes();
-        return (UIComponent) contextMap.get(CURRENT_COMPONENT);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the closest ancestor
-     * component, relative to the component returned from {@link
-     * #getCurrentComponent}, that is a composite component, or
-     * <code>null</code> if no such component exists.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     * 
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public static UIComponent getCurrentCompositeComponent(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        Map<Object, Object> contextMap = context.getAttributes();
-        return (UIComponent) contextMap.get(CURRENT_COMPOSITE_COMPONENT);
-
-    }
-    
-    // -------------------------------------------------- Event Listener Methods
-
-
-    /**
-     * <p>Add the specified {@link FacesListener} to the set of listeners
-     * registered to receive event notifications from this {@link UIComponent}.
-     * It is expected that {@link UIComponent} classes acting as event sources
-     * will have corresponding typesafe APIs for registering listeners of the
-     * required type, and the implementation of those registration methods
-     * will delegate to this method.  For example:</p>
-     * <pre>
-     * public class FooEvent extends FacesEvent { ... }
-     *
-     * public interface FooListener extends FacesListener {
-     *   public void processFoo(FooEvent event);
-     * }
-     *
-     * public class FooComponent extends UIComponentBase {
-     *   ...
-     *   public void addFooListener(FooListener listener) {
-     *     addFacesListener(listener);
-     *   }
-     *   public void removeFooListener(FooListener listener) {
-     *     removeFacesListener(listener);
-     *   }
-     *   ...
-     * }
-     * </pre>
-     *
-     * @param listener The {@link FacesListener} to be registered
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    protected abstract void addFacesListener(FacesListener listener);
-
-
-    /**
-     * <p>Return an array of registered {@link FacesListener}s that are
-     * instances of the specified class.  If there are no such registered
-     * listeners, a zero-length array is returned.  The returned
-     * array can be safely be cast to an array strongly typed to
-     * an element type of <code>clazz</code>.</p>
-     *
-     * @param clazz Class that must be implemented by a {@link FacesListener}
-     *  for it to be returned
-     *
-     * @throws IllegalArgumentException if <code>class</code> is not,
-     *  and does not implement, {@link FacesListener}
-     * @throws NullPointerException if <code>clazz</code>
-     *  is <code>null</code>
-     */
-    protected abstract FacesListener[] getFacesListeners(Class clazz);
-
-
-    /**
-     * <p>Remove the specified {@link FacesListener} from the set of listeners
-     * registered to receive event notifications from this {@link UIComponent}.
-     *
-     * @param listener The {@link FacesListener} to be deregistered
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    protected abstract void removeFacesListener(FacesListener listener);
-
-
-    /**
-     * <p>Queue an event for broadcast at the end of the current request
-     * processing lifecycle phase.  The default implementation in
-     * {@link UIComponentBase} must delegate this call to the
-     * <code>queueEvent()</code> method of the parent {@link UIComponent}.</p>
-     *
-     * @param event {@link FacesEvent} to be queued
-     *
-     * @throws IllegalStateException if this component is not a
-     *  descendant of a {@link UIViewRoot}
-     * @throws NullPointerException if <code>event</code>
-     *  is <code>null</code>
-     */
-    public abstract void queueEvent(FacesEvent event);
-
-    /**
-     * <p class="changed_added_2_0">Install the listener instance
-     * referenced by argument <code>componentListener</code> as a
-     * listener for events of type <code>eventClass</code> originating
-     * from this specific instance of <code>UIComponent</code>.  The
-     * default implementation creates an inner {@link
-     * SystemEventListener} instance that wraps argument
-     * <code>componentListener</code> as the <code>listener</code>
-     * argument.  This inner class must call through to the argument
-     * <code>componentListener</code> in its implementation of {@link
-     * SystemEventListener#processEvent} and its implementation of
-     * {@link SystemEventListener#isListenerForSource} must return
-     * true if the instance class of this <code>UIComponent</code> is
-     * assignable from the argument to
-     * <code>isListenerForSource</code>.</p>
-     *
-     * @param eventClass the <code>Class</code> of event for which
-     * <code>listener</code> must be fired.
-     * @param componentListener the implementation of {@link
-     * ComponentSystemEventListener} whose {@link
-     * ComponentSystemEventListener#processEvent} method must be called
-     * when events of type <code>facesEventClass</code> are fired.
-     *
-     * @throws <code>NullPointerException</code> if any of the
-     * arguments are <code>null</code>.
-     *
-     * @since 2.0                                             
-     */
-    public void subscribeToEvent(Class<? extends SystemEvent> eventClass,
-                                 ComponentSystemEventListener componentListener) {
-
-        if (eventClass == null) {
-            throw new NullPointerException();
-        }
-        if (componentListener == null) {
-            throw new NullPointerException();
-        }
-
-        if (initialStateMarked()) {
-            initialState = false;
-        }
-        if (null == listenersByEventClass) {
-            listenersByEventClass = new HashMap<Class<? extends SystemEvent>,
-                                                List<SystemEventListener>>(3, 1.0f);
-        }
-        SystemEventListener facesLifecycleListener =
-              new ComponentSystemEventListenerAdapter(componentListener, this);
-        List<SystemEventListener> listenersForEventClass =
-              listenersByEventClass.get(eventClass);
-        if (listenersForEventClass == null) {
-            listenersForEventClass = new ArrayList<SystemEventListener>(3);
-            listenersByEventClass.put(eventClass, listenersForEventClass);
-        }
-        if (!listenersForEventClass.contains(facesLifecycleListener)) {
-            listenersForEventClass.add(facesLifecycleListener);
-        }
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Remove the listener instance
-     *     referenced by argument <code>componentListener</code> as a
-     *     listener for events of type <code>eventClass</code>
-     *     originating from this specific instance of
-     *     <code>UIComponent</code>.  When doing the comparison to
-     *     determine if an existing listener is equal to the argument
-     *     <code>componentListener</code> (and thus must be removed),
-     *     the <code>equals()</code> method on the <em>existing
-     *     listener</em> must be invoked, passing the argument
-     *     <code>componentListener</code>, rather than the other way
-     *     around.</p>
-     *
-     * @param eventClass the <code>Class</code> of event for which
-     * <code>listener</code> must be removed.
-     * @param componentListener the implementation of {@link
-     * ComponentSystemEventListener} whose {@link
-     * ComponentSystemEventListener#processEvent} method must no longer be called
-     * when events of type <code>eventClass</code> are fired.
-     *
-     * @throws <code>NullPointerException</code> if any of the
-     * arguments are <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass,
-                                     ComponentSystemEventListener componentListener) {
-
-        if (eventClass == null) {
-            throw new NullPointerException();
-        }
-        if (componentListener == null) {
-            throw new NullPointerException();
-        }
-
-        List<SystemEventListener> listeners =
-              getListenersForEventClass(eventClass);
-        if (listeners != null && !listeners.isEmpty()) {
-            for (Iterator<SystemEventListener> i = listeners.iterator(); i.hasNext();) {
-                SystemEventListener item = i.next();
-                ComponentSystemEventListenerAdapter csla =
-                      (ComponentSystemEventListenerAdapter) item;
-                ComponentSystemEventListener l = csla.getWrapped();
-                if (l.equals(componentListener)) {
-                    i.remove();
-                    break;
-                }
-            }
-        }
-
-    }
-
-    Map<Class<? extends SystemEvent>, List<SystemEventListener>> listenersByEventClass;
-
-    /**
-     * <p class="changed_added_2_0">Return the
-     * <code>SystemEventListener</code> instances registered on this
-     * <code>UIComponent</code> instance that are interested in events
-     * of type <code>eventClass</code>.</p>
-     *
-     * @param eventClass the <code>Class</code> of event for which the
-     * listeners must be returned.
-
-     * @throws NullPointerException if argument <code>eventClass</code> is <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> eventClass) {
-
-        if (eventClass == null) {
-            throw new NullPointerException();
-        }
-        List<SystemEventListener> result = null;
-        if (listenersByEventClass != null) {
-            result = listenersByEventClass.get(eventClass);
-        }
-        return result;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Starting with "this", return the closest 
-     * component in the ancestry that is a <code>NamingContainer</code>
-     * or <code>null</code> if none can be found.</p>
-     *
-     * @since 2.0
-     */
-    public UIComponent getNamingContainer() {
-        UIComponent namingContainer = this;
-        while (namingContainer != null) {
-            if (namingContainer instanceof NamingContainer) {
-                return namingContainer;
-            }
-            namingContainer = namingContainer.getParent();
-        }
-        return null;
-    }
-
-    // ------------------------------------------------ Lifecycle Phase Handlers
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> the
-     * component tree processing required by the <em>Restore View</em>
-     * phase of the request processing lifecycle for all facets of this
-     * component, all children of this component, and this component
-     * itself, as follows.</p> <ul> <li
-     * class="changed_modified_2_0">Call the <code>restoreState()</code>
-     * method of this component.</li> 
-     *
-     * <li class="changed_added_2_0">Call
-     * {@link UIComponent#pushComponentToEL}.  </li>
-
-     * <li>Call the <code>processRestoreState()</code> method of all
-     * facets and children of this {@link UIComponent} in the order
-     * determined by a call to <code>getFacetsAndChildren()</code>.
-     * <span class="changed_added_2_0">After returning from the
-     * <code>processRestoreState()</code> method on a child or facet,
-     * call {@link UIComponent#popComponentFromEL}</span></li>
-
-     * </ul>
-     *
-     * <p>This method may not be called if the state saving method is
-     * set to server.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void processRestoreState(FacesContext context,
-                                             Object state);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> the
-     * component tree processing required by the <em>Apply Request
-     * Values</em> phase of the request processing lifecycle for all
-     * facets of this component, all children of this component, and
-     * this component itself, as follows.</p>
-
-     * <ul>
-     * <li>If the <code>rendered</code> property of this {@link UIComponent}
-     *     is <code>false</code>, skip further processing.</li>
-     * <li class="changed_added_2_0">Call {@link #pushComponentToEL}.</li>
-     * <li>Call the <code>processDecodes()</code> method of all facets
-     *     and children of this {@link UIComponent}, in the order determined
-     *     by a call to <code>getFacetsAndChildren()</code>.</li>
-
-     * <li>Call the <code>decode()</code> method of this component.</li>
-
-     * <li>Call {@link #popComponentFromEL} from inside of a
-     * <code>finally block, just before returning.</code></li>
-
-
-
-     * <li>If a <code>RuntimeException</code> is thrown during
-     *     decode processing, call {@link FacesContext#renderResponse}
-     *     and re-throw the exception.</li>
-     * </ul>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void processDecodes(FacesContext context);
-
-    /**
-     * <p class="changed_added_2_0">The default implementation performs
-     * the following action.  If the argument <code>event</code> is an
-     * instance of {@link PostRestoreStateEvent}, call
-     * <code>this.</code>{@link #getValueExpression} passing the literal
-     * string “binding”, without the quotes, as the
-     * argument.  If the result is non-<code>null</code>, set the value
-     * of the <code>ValueExpression</code> to be <code>this</code>.</p>
-     */ 
-
-    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
-        if (event instanceof PostRestoreStateEvent) {
-	    assert(this == event.getComponent());
-            // if this component has a component value reference expression,
-            // make sure to populate the ValueExpression for it.
-            ValueExpression valueExpression;
-            if (null != (valueExpression = this.getValueExpression("binding"))) {
-                valueExpression.setValue(FacesContext.getCurrentInstance().getELContext(), 
-                        this);
-            }
-
-        }
-    }
-    
-    
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> the
-     * component tree processing required by the <em>Process
-     * Validations</em> phase of the request processing lifecycle for
-     * all facets of this component, all children of this component, and
-     * this component itself, as follows.</p>
-
-     * <ul>
-     * <li>If the <code>rendered</code> property of this {@link UIComponent}
-     *     is <code>false</code>, skip further processing.</li>
-     * <li class="changed_added_2_0">Call {@link #pushComponentToEL}.</li>
-     * <li>Call the <code>processValidators()</code> method of all facets
-     *     and children of this {@link UIComponent}, in the order determined
-     *     by a call to <code>getFacetsAndChildren()</code>.</li>
-     * <li>After returning from calling
-     * <code>getFacetsAndChildren()</code> call {@link
-     * UIComponent#popComponentFromEL}.</li>
-     * </ul>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void processValidators(FacesContext context);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> the
-     * component tree processing required by the <em>Update Model
-     * Values</em> phase of the request processing lifecycle for all
-     * facets of this component, all children of this component, and
-     * this component itself, as follows.</p> 
-
-     * <ul> 
-
-     * <li>If the <code>rendered</code> property of this {@link
-     * UIComponent} is <code>false</code>, skip further processing.</li>
-
-     * <li class="changed_added_2_0">Call {@link
-     * #pushComponentToEL}.</li>
-
-     * <li>Call the <code>processUpdates()</code> method of all facets
-     * and children of this {@link UIComponent}, in the order determined
-     * by a call to <code>getFacetsAndChildren()</code>.  <span
-     * class="changed_added_2_0">After returning from the
-     * <code>processUpdates()</code> method on a child or facet, call
-     * {@link UIComponent#popComponentFromEL}</span></li>
- 
-    * </ul>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void processUpdates(FacesContext context);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> the
-     * component tree processing required by the state saving portion of
-     * the <em>Render Response</em> phase of the request processing
-     * lifecycle for all facets of this component, all children of this
-     * component, and this component itself, as follows.</p>
-
-     * <ul>
-     *
-     * <li>consult the <code>transient</code> property of this
-     * component.  If true, just return <code>null</code>.</li>
-
-     * <li class="changed_added_2_0">Call {@link
-     * #pushComponentToEL}.</li>
-
-     * <li>Call the <code>processSaveState()</code> method of all facets
-     * and children of this {@link UIComponent} in the order determined
-     * by a call to <code>getFacetsAndChildren()</code>, skipping
-     * children and facets that are transient.  Ensure that {@link
-     * #popComponentFromEL} is called correctly after each child or
-     * facet.</li>
-     *
-     * <li>Call the <code>saveState()</code> method of this component.</li>
-     *
-     * <li>Encapsulate the child state and your state into a
-     * Serializable Object and return it.</li> 
-     *
-     * </ul>
-     *
-     * <p>This method may not be called if the state saving method is
-     * set to server.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract Object processSaveState(FacesContext context);
-
-
-    // ----------------------------------------------------- Convenience Methods
-
-
-    /**
-     * <p>Convenience method to return the {@link FacesContext} instance
-     * for the current request.</p>
-     */
-    protected abstract FacesContext getFacesContext();
-
-
-    /**
-     * <p>Convenience method to return the {@link Renderer} instance
-     * associated with this component, if any; otherwise, return
-     * <code>null</code>.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     */
-    protected abstract Renderer getRenderer(FacesContext context);
-
-
-    // --------------------------------------------------------- Package Private
-
-
-    static final class ComponentSystemEventListenerAdapter
-       implements SystemEventListener, StateHolder, FacesWrapper<ComponentSystemEventListener> {
-
-        ComponentSystemEventListener wrapped;
-        Class<?> instanceClass;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        ComponentSystemEventListenerAdapter() {
-
-            // necessary for state saving
-
-        }
-
-
-        ComponentSystemEventListenerAdapter(ComponentSystemEventListener wrapped,
-                                            UIComponent component) {
-
-            this.wrapped = wrapped;
-            this.instanceClass = component.getClass();
-
-        }
-
-
-        // ------------------------------------ Methods from SystemEventListener
-
-
-        public void processEvent(SystemEvent event) throws AbortProcessingException {
-
-            wrapped.processEvent((ComponentSystemEvent) event);
-
-        }
-
-
-        public boolean isListenerForSource(Object component) {
-
-            if (wrapped instanceof SystemEventListener) {
-                return ((SystemEventListener) wrapped).isListenerForSource(component);
-            } else {
-                return instanceClass.isAssignableFrom(component.getClass());
-            }
-
-        }
-
-
-        // -------------------------------------------- Methods from StateHolder
-
-        public Object saveState(FacesContext context) {
-
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            return new Object[] {
-                  ((wrapped instanceof UIComponent) ? null : new StateHolderSaver(context, wrapped)),
-                  instanceClass
-            };
-
-        }
-
-
-        public void restoreState(FacesContext context, Object state) {
-
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            if (state == null) {
-                return;
-            }
-            Object[] s = (Object[]) state;
-            Object listener = s[0];
-            wrapped = (ComponentSystemEventListener) ((listener == null)
-                                                      ? UIComponent .getCurrentComponent(context)
-                                                      : ((StateHolderSaver) listener).restore(context));
-            instanceClass = (Class<?>) s[1];
-            
-        }
-
-
-        public boolean isTransient() {
-
-            if (wrapped instanceof StateHolder) {
-                return ((StateHolder) wrapped).isTransient();
-            }
-            return false;
-
-        }
-
-
-        public void setTransient(boolean newTransientValue) {
-
-            // no-op
-
-        }
-
-
-        // ------------------------------------------- Methods from FacesWrapper
-
-
-        public ComponentSystemEventListener getWrapped() {
-
-            return wrapped;
-
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        @Override
-        public int hashCode() {
-
-            return (wrapped.hashCode() ^ instanceClass.hashCode());
-
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-
-            if (!(obj instanceof ComponentSystemEventListenerAdapter)) {
-                return false;
-            }
-            ComponentSystemEventListenerAdapter in =
-                  (ComponentSystemEventListenerAdapter) obj;
-            return (wrapped.equals(in.wrapped)
-                    && instanceClass.equals(in.instanceClass));
-            
-        }
-    } // END ComponentSystemEventListenerAdapter
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIComponentBase.java b/jsf-api/src/main/java/javax/faces/component/UIComponentBase.java
deleted file mode 100644
index 23bdee2..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIComponentBase.java
+++ /dev/null
@@ -1,3232 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.BehaviorEvent;
-import javax.faces.event.FacesEvent;
-import javax.faces.event.FacesListener;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.event.PostValidateEvent;
-import javax.faces.event.PreRemoveFromViewEvent;
-import javax.faces.event.PreRenderComponentEvent;
-import javax.faces.event.PreValidateEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.render.Renderer;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Array;
-import java.lang.reflect.Modifier;
-import java.util.AbstractCollection;
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.WeakHashMap;
-import java.util.Map.Entry;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p><strong class="changed_modified_2_0">UIComponentBase</strong> is a
- * convenience base class that implements the default concrete behavior
- * of all methods defined by {@link UIComponent}.</p>
- * <p/>
- * <p>By default, this class defines <code>getRendersChildren()</code>
- * to find the renderer for this component and call its
- * <code>getRendersChildren()</code> method.  The default implementation
- * on the <code>Renderer</code> returns <code>false</code>.  As of
- * version 1.2 of the JavaServer Faces Specification, component authors
- * are encouraged to return <code>true</code> from this method and rely
- * on the implementation of {@link #encodeChildren} in this class and in
- * the Renderer ({@link Renderer#encodeChildren}).  Subclasses that wish
- * to manage the rendering of their children should override this method
- * to return <code>true</code> instead.</p>
- */
-public abstract class UIComponentBase extends UIComponent {
-
-
-    // -------------------------------------------------------------- Attributes
-
-    private static Logger LOGGER = Logger.getLogger("javax.faces.component",
-            "javax.faces.LogStrings");
-
-    private static final String ADDED = UIComponentBase.class.getName() + ".ADDED";
-
-
-    /**
-     * <p>Each entry is an map of <code>PropertyDescriptor</code>s describing
-     * the properties of a concrete {@link UIComponent} implementation, keyed
-     * by the corresponding <code>java.lang.Class</code>.</p>
-     * <p/>
-     * <p><strong>IMPLEMENTATION NOTE</strong> - This is implemented as a
-     * <code>WeakHashMap</code> so that, even if this class is embedded in a
-     * container's class loader that is a parent to webapp class loaders,
-     * references to the classes will eventually expire.</p>
-     */
-    @SuppressWarnings({"CollectionWithoutInitialCapacity"})
-    private static Map<Class<?>, Map<String, PropertyDescriptor>>
-            descriptors =
-            new WeakHashMap<Class<?>, Map<String, PropertyDescriptor>>();
-
-    /**
-     * Reference to the map of <code>PropertyDescriptor</code>s for this class
-     * in the <code>descriptors<code> <code>Map<code>.
-     */
-    private Map<String, PropertyDescriptor> pdMap = null;
-
-    /**
-     * <p>An EMPTY_OBJECT_ARRAY argument list to be passed to reflection methods.</p>
-     */
-    private static final Object EMPTY_OBJECT_ARRAY[] = new Object[0];
-
-    public UIComponentBase() {
-        populateDescriptorsMapIfNecessary();
-    }
-
-    private void populateDescriptorsMapIfNecessary() {
-        Class<?> clazz = this.getClass();
-        pdMap = descriptors.get(clazz);
-        if (null != pdMap) {
-            return;
-        }
-
-        // load the property descriptors for this class.
-        PropertyDescriptor pd[] = getPropertyDescriptors();
-        if (pd != null) {
-            pdMap = new HashMap<String, PropertyDescriptor>(pd.length, 1.0f);
-            for (PropertyDescriptor aPd : pd) {
-                pdMap.put(aPd.getName(), aPd);
-            }
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE, "fine.component.populating_descriptor_map",
-                        new Object[]{clazz,
-                                Thread.currentThread().getName()});
-            }
-
-            // Check again
-            Map<String, PropertyDescriptor> reCheckMap =
-                    descriptors.get(clazz);
-            if (null != reCheckMap) {
-                return;
-            }
-            descriptors.put(clazz, pdMap);
-        }
-
-
-    }
-
-
-    /**
-     * <p>Return an array of <code>PropertyDescriptors</code> for this
-     * {@link UIComponent}'s implementation class.  If no descriptors
-     * can be identified, a zero-length array will be returned.</p>
-     *
-     * @throws FacesException if an introspection exception occurs
-     */
-    private PropertyDescriptor[] getPropertyDescriptors() {
-        PropertyDescriptor[] pd;
-        try {
-            pd = Introspector.getBeanInfo(this.getClass()).
-                    getPropertyDescriptors();
-        } catch (IntrospectionException e) {
-            throw new FacesException(e);
-        }
-        return (pd);
-    }
-
-
-    /**
-     * <p>The <code>Map</code> containing our attributes, keyed by
-     * attribute name.</p>
-     */
-    private AttributesMap attributes = null;
-
-
-    public Map<String, Object> getAttributes() {
-
-        if (attributes == null) {
-            attributes = new AttributesMap(this);
-        }
-        return (attributes);
-
-    }
-
-
-    // ---------------------------------------------------------------- Bindings
-
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws NullPointerException {@inheritDoc}
-     * @deprecated This has been replaced by {@link #getValueExpression}.
-     */
-    public ValueBinding getValueBinding(String name) {
-
-        if (name == null) {
-            throw new NullPointerException();
-        }
-        ValueBinding result = null;
-        ValueExpression ve;
-
-        if (null != (ve = getValueExpression(name))) {
-            // if the ValueExpression is an instance of our private
-            // wrapper class.
-            if (ve.getClass().equals(ValueExpressionValueBindingAdapter.class)) {
-                result = ((ValueExpressionValueBindingAdapter) ve).getWrapped();
-            } else {
-                // otherwise, this is a real ValueExpression.  Wrap it
-                // in a ValueBinding.
-                result = new ValueBindingValueExpressionAdapter(ve);
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws IllegalArgumentException {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     * @deprecated This has been replaced by {@link #setValueExpression}.
-     */
-    public void setValueBinding(String name, ValueBinding binding) {
-        if (name == null) {
-            throw new NullPointerException();
-        }
-        if (binding != null) {
-            ValueExpressionValueBindingAdapter adapter =
-                    new ValueExpressionValueBindingAdapter(binding);
-            setValueExpression(name, adapter);
-        } else {
-            setValueExpression(name, null);
-        }
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>The assigned client identifier for this component.</p>
-     */
-    private String clientId = null;
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getClientId(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // if the clientId is not yet set
-        if (this.clientId == null) {
-            UIComponent namingContainerAncestor =
-                    this.getNamingContainerAncestor();
-            UIComponent parent = namingContainerAncestor;
-            String parentId = null;
-
-            // give the parent the opportunity to first
-            // grab a unique clientId
-            if (parent != null) {
-                parentId = parent.getContainerClientId(context);
-            }
-
-            // now resolve our own client id
-            this.clientId = getId();
-            if (this.clientId == null) {
-                String generatedId;
-                if (null != namingContainerAncestor &&
-                    namingContainerAncestor instanceof UniqueIdVendor) {
-                    generatedId = ((UniqueIdVendor)namingContainerAncestor).createUniqueId(context, null);
-                }
-                else {
-                    generatedId = context.getViewRoot().createUniqueId();
-                }
-                setId(generatedId);
-                this.clientId = getId();
-            }
-            if (parentId != null) {
-                StringBuilder idBuilder =
-                        new StringBuilder(parentId.length()
-                                + 1
-                                + this.clientId.length());
-                this.clientId = idBuilder.append(parentId)
-                        .append(UINamingContainer.getSeparatorChar(context))
-                        .append(this.clientId).toString();
-            }
-
-            // allow the renderer to convert the clientId
-            Renderer renderer = this.getRenderer(context);
-            if (renderer != null) {
-                this.clientId = renderer.convertClientId(context, this.clientId);
-            }
-        }
-        return this.clientId;
-    }
-
-    /**
-     * <p>The component identifier for this component.</p>
-     */
-    private String id = null;
-
-
-    public String getId() {
-
-        return (id);
-
-    }
-
-    private UIComponent getNamingContainerAncestor() {
-	UIComponent namingContainer = this.getParent();
-        while (namingContainer != null) {
-            if (namingContainer instanceof NamingContainer) {
-                return namingContainer;
-            }
-            namingContainer = namingContainer.getParent();
-        }
-        return null;
-    }
-
-
-    /**
-     * @throws IllegalArgumentException {@inheritDoc}
-     * @throws IllegalStateException    {@inheritDoc}
-     */
-    public void setId(String id) {
-
-        // if the current ID is not null, and the passed
-        // argument is the same, no need to validate it
-        // as it has already been validated.
-        if (this.id == null || !(this.id.equals(id))) {
-            validateId(id);
-            this.id = id;
-        }
-
-        this.clientId = null; // Erase any cached value
-
-    }
-
-
-    /**
-     * <p>The parent component for this component.</p>
-     */
-    private UIComponent parent = null;
-
-
-    public UIComponent getParent() {
-        return (this.parent);
-    }
-
-
-    public void setParent(UIComponent parent) {
-
-
-        if (parent == null) {
-            if (this.parent != null) {
-                doPreRemoveProcessing(FacesContext.getCurrentInstance(), this);
-                this.parent = parent;
-            }
-            compositeParent = null;
-        } else {
-            this.parent = parent;
-            if (this.getAttributes().get(ADDED) == null) {
-                // add an attribute to this component here to indiciate that
-                // it's being processed.  If we don't do this, and the component
-                // is re-parented, the events could fire again in certain cases
-                // and cause a stack overflow.
-                this.getAttributes().put(ADDED, Boolean.TRUE);
-                doPostAddProcessing(FacesContext.getCurrentInstance(), this);
-                // remove the attribute once we've returned from the event
-                // processing.
-                this.getAttributes().remove(ADDED);
-            }
-        }
-
-    }
-
-
-
-    public boolean isRendered() {
-        
-	return Boolean.valueOf(getStateHelper().eval(PropertyKeys.rendered, Boolean.TRUE).toString());        
-    }
-
-
-    public void setRendered(boolean rendered) {
-        getStateHelper().put(PropertyKeys.rendered, rendered);
-    }
-
-
-    public String getRendererType() {
-
-        return (String) getStateHelper().eval(PropertyKeys.rendererType);
-        
-    }
-
-
-    public void setRendererType(String rendererType) {
-
-        getStateHelper().put(PropertyKeys.rendererType, rendererType);
-
-    }
-
-
-    public boolean getRendersChildren() {
-        boolean result = false;
-
-        Renderer renderer;
-        if (getRendererType() != null) {
-            if (null !=
-                    (renderer = getRenderer(getFacesContext()))) {
-                result = renderer.getRendersChildren();
-            }
-        }
-        return result;
-
-    }
-
-    // ------------------------------------------------- Tree Management Methods
-
-
-    /*
-     * <p>The <code>List</code> containing our child components.</p>
-     */
-    private List<UIComponent> children = null;
-
-
-    public List<UIComponent> getChildren() {
-
-        if (children == null) {
-            children = new ChildrenList(this);
-        }
-        return (children);
-
-    }
-
-
-    // Do not allocate the children List to answer this question
-    public int getChildCount() {
-
-        if (children != null) {
-            return (children.size());
-        } else {
-            return (0);
-        }
-
-    }
-
-
-    /**
-     * <p>If the specified {@link UIComponent} has a non-null parent,
-     * remove it as a child or facet (as appropriate) of that parent.
-     * As a result, the <code>parent</code> property will always be
-     * <code>null</code> when this method returns.</p>
-     *
-     * @param component {@link UIComponent} to have any parent erased
-     */
-    private static void eraseParent(UIComponent component) {
-
-        UIComponent parent = component.getParent();
-        if (parent == null) {
-            return;
-        }
-        if (parent.getChildCount() > 0) {
-            List children = parent.getChildren();
-            int index = children.indexOf(component);
-            if (index >= 0) {
-                children.remove(index);
-                return;
-            }
-        }
-        if (parent.getFacetCount() > 0) {
-            Map facets = parent.getFacets();
-            Iterator entries = facets.entrySet().iterator();
-            while (entries.hasNext()) {
-                Map.Entry entry = (Map.Entry) entries.next();
-                //noinspection ObjectEquality
-                if (entry.getValue() == component) {
-                    entries.remove();
-                    return;
-                }
-            }
-        }
-
-        // Throw an exception for the "cannot happen" case
-        throw new IllegalStateException("Parent was not null, " +
-                "but this component not related");
-
-    }
-
-    /**
-     * <p>Throw <code>IllegalArgumentException</code> if the specified
-     * component identifier is non-<code>null</code> and not
-     * syntactically valid.  </p>
-     *
-     * @param id The component identifier to test
-     */
-    private static void validateId(String id) {
-
-        if (id == null) {
-            return;
-        }
-        int n = id.length();
-        if (n < 1) {
-            throw new IllegalArgumentException("Empty id attribute is not allowed");
-        }
-        for (int i = 0; i < n; i++) {
-            char c = id.charAt(i);
-            if (i == 0) {
-                if (!Character.isLetter(c) && (c != '_')) {
-                    throw new IllegalArgumentException(id);
-                }
-            } else {
-                if (!Character.isLetter(c) &&
-                        !Character.isDigit(c) &&
-                        (c != '-') && (c != '_')) {
-                    throw new IllegalArgumentException(id);
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public UIComponent findComponent(String expr) {
-        if (expr == null) {
-            throw new NullPointerException();
-        }
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        final char sepChar = UINamingContainer.getSeparatorChar(ctx);
-        final String SEPARATOR_STRING = String.valueOf(sepChar);
-
-        if (expr.length() == 0) {
-            // if an empty value is provided, fail fast.
-            throw new IllegalArgumentException("\"\"");
-        }
-
-        // Identify the base component from which we will perform our search
-        UIComponent base = this;
-        if (expr.charAt(0) == sepChar) {
-            // Absolute searches start at the root of the tree
-            while (base.getParent() != null) {
-                base = base.getParent();
-            }
-            // Treat remainder of the expression as relative
-            expr = expr.substring(1);
-        } else if (!(base instanceof NamingContainer)) {
-            // Relative expressions start at the closest NamingContainer or root
-            while (base.getParent() != null) {
-                if (base instanceof NamingContainer) {
-                    break;
-                }
-                base = base.getParent();
-            }
-        }
-
-        // Evaluate the search expression (now guaranteed to be relative)
-        UIComponent result = null;
-        String[] segments = expr.split(SEPARATOR_STRING);
-        for (int i = 0, length = (segments.length - 1);
-             i < segments.length;
-             i++, length--) {
-            result = findComponent(base, segments[i], (i == 0));
-            // the first element of the expression may match base.id
-            // (vs. a child if of base)
-            if (i == 0 && result == null &&
-                    segments[i].equals(base.getId())) {
-                result = base;
-            }
-            if (result != null && (!(result instanceof NamingContainer)) && length > 0) {
-                throw new IllegalArgumentException(segments[i]);
-            }
-            if (result == null) {
-                break;
-            }
-            base = result;
-        }
-
-        // Return the final result of our search
-        return (result);
-
-    }
-
-
-    /**
-     * <p>Return the {@link UIComponent} (if any) with the specified
-     * <code>id</code>, searching recursively starting at the specified
-     * <code>base</code>, and examining the base component itself, followed
-     * by examining all the base component's facets and children (unless
-     * the base component is a {@link NamingContainer}, in which case the
-     * recursive scan is skipped.</p>
-     *
-     * @param base Base {@link UIComponent} from which to search
-     * @param id   Component identifier to be matched
-     */
-    private static UIComponent findComponent(UIComponent base,
-                                             String id,
-                                             boolean checkId) {
-        if (checkId && id.equals(base.getId())) {
-            return base;
-        }
-        // Search through our facets and children
-        UIComponent result = null;
-        for (Iterator i = base.getFacetsAndChildren(); i.hasNext();) {
-            UIComponent kid = (UIComponent) i.next();
-            if (!(kid instanceof NamingContainer)) {
-                if (checkId && id.equals(kid.getId())) {
-                    result = kid;
-                    break;
-                }
-                result = findComponent(kid, id, true);
-                if (result != null) {
-                    break;
-                }
-            } else if (id.equals(kid.getId())) {
-                result = kid;
-                break;
-            }
-        }
-        return (result);
-
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws NullPointerException {@inheritDoc}
-     * @throws FacesException       {@inheritDoc}
-     * @since 1.2
-     */
-    public boolean invokeOnComponent(FacesContext context, String clientId,
-                                     ContextCallback callback)
-            throws FacesException {
-        return super.invokeOnComponent(context, clientId, callback);
-    }
-
-
-    // ------------------------------------------------ Facet Management Methods
-
-
-    /*
-     * <p>The <code>Map</code> containing our related facet components.</p>
-     */
-    private Map<String, UIComponent> facets = null;
-
-
-    public Map<String, UIComponent> getFacets() {
-
-        if (facets == null) {
-            facets = new FacetsMap(this);
-        }
-        return (facets);
-
-    }
-
-    // Do not allocate the children List to answer this question
-    public int getFacetCount() {
-
-        if (facets != null) {
-            return (facets.size());
-        } else {
-            return (0);
-        }
-
-    }
-
-
-    // Do not allocate the facets Map to answer this question
-    public UIComponent getFacet(String name) {
-
-        if (facets != null) {
-            return (facets.get(name));
-        } else {
-            return (null);
-        }
-
-    }
-
-
-    public Iterator<UIComponent> getFacetsAndChildren() {
-
-        Iterator<UIComponent> result;
-        int childCount = this.getChildCount(),
-                facetCount = this.getFacetCount();
-        // If there are neither facets nor children
-        if (0 == childCount && 0 == facetCount) {
-            result = EMPTY_ITERATOR;
-        }
-        // If there are only facets and no children
-        else if (0 == childCount) {
-            Collection<UIComponent> unmodifiable =
-                    Collections.unmodifiableCollection(getFacets().values());
-            result = unmodifiable.iterator();
-        }
-        // If there are only children and no facets
-        else if (0 == facetCount) {
-            List<UIComponent> unmodifiable =
-                    Collections.unmodifiableList(getChildren());
-            result = unmodifiable.iterator();
-        }
-        // If there are both children and facets
-        else {
-            result = new FacetsAndChildrenIterator(this);
-        }
-        return result;
-    }
-
-
-    // -------------------------------------------- Lifecycle Processing Methods
-
-    /**
-     * @throws AbortProcessingException {@inheritDoc}
-     * @throws IllegalStateException    {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     */
-    public void broadcast(FacesEvent event)
-        throws AbortProcessingException {
-
-        if (event == null) {
-            throw new NullPointerException();
-        }
-        if (event instanceof BehaviorEvent) {
-            BehaviorEvent behaviorEvent = (BehaviorEvent) event;
-            Behavior behavior = behaviorEvent.getBehavior();
-            behavior.broadcast(behaviorEvent);
-        }
-
-        if (listeners == null) {
-            return;
-        }
-
-        for (FacesListener listener : listeners.asArray(FacesListener.class)) {
-            if (event.isAppropriateListener(listener)) {
-                event.processListener(listener);
-            }
-        }
-    }
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void decode(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        String rendererType = getRendererType();
-        if (rendererType != null) {
-            Renderer renderer = this.getRenderer(context);
-            if (renderer != null) {
-                renderer.decode(context, this);
-            } else {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Can't get Renderer for type " + rendererType);
-                }
-            }
-        }
-    }
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void encodeBegin(FacesContext context) throws IOException {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        pushComponentToEL(context, null);
-
-        if (!isRendered()) {
-            return;
-        }
-
-        context.getApplication().publishEvent(context,
-                                              PreRenderComponentEvent.class,
-                                              this);
-
-        String rendererType = getRendererType();
-        if (rendererType != null) {
-            Renderer renderer = this.getRenderer(context);
-            if (renderer != null) {
-                renderer.encodeBegin(context, this);
-            } else {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Can't get Renderer for type " + rendererType);
-                }
-            }
-        }
-
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void encodeChildren(FacesContext context) throws IOException {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!isRendered()) {
-            return;
-        }
-        String rendererType = getRendererType();
-        if (rendererType != null) {
-            Renderer renderer = this.getRenderer(context);
-            if (renderer != null) {
-                renderer.encodeChildren(context, this);
-            }
-            // We've already logged for this component
-        } else {
-            if (getChildCount() > 0) {
-                for (UIComponent child : getChildren()) {
-                    child.encodeAll(context);
-                }
-            }
-        }
-    }
-
-
-    /**
-     * @throws IOException          {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void encodeEnd(FacesContext context) throws IOException {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!isRendered()) {
-            popComponentFromEL(context);
-            return;
-        }
-        String rendererType = getRendererType();
-        if (rendererType != null) {
-            Renderer renderer = this.getRenderer(context);
-            if (renderer != null) {
-                renderer.encodeEnd(context, this);
-            } else {
-                // We've already logged for this component
-            }
-        }
-        popComponentFromEL(context);
-
-    }
-
-    // -------------------------------------------------- Event Listener Methods
-
-    private AttachedObjectListHolder<FacesListener> listeners;
-
-    /**
-     * <p>Add the specified {@link FacesListener} to the set of listeners
-     * registered to receive event notifications from this {@link UIComponent}.
-     * It is expected that {@link UIComponent} classes acting as event sources
-     * will have corresponding typesafe APIs for registering listeners of the
-     * required type, and the implementation of those registration methods
-     * will delegate to this method.  For example:</p>
-     * <pre>
-     * public class FooEvent extends FacesEvent {
-     *   ...
-     *   protected boolean isAppropriateListener(FacesListener listener) {
-     *     return (listener instanceof FooListener);
-     *   }
-     *   protected void processListener(FacesListener listener) {
-     *     ((FooListener) listener).processFoo(this);
-     *   }
-     *   ...
-     * }
-     * <p/>
-     * public interface FooListener extends FacesListener {
-     *   public void processFoo(FooEvent event);
-     * }
-     * <p/>
-     * public class FooComponent extends UIComponentBase {
-     *   ...
-     *   public void addFooListener(FooListener listener) {
-     *     addFacesListener(listener);
-     *   }
-     *   public void removeFooListener(FooListener listener) {
-     *     removeFacesListener(listener);
-     *   }
-     *   ...
-     * }
-     * </pre>
-     *
-     * @param listener The {@link FacesListener} to be registered
-     * @throws NullPointerException if <code>listener</code>
-     *                              is <code>null</code>
-     */
-    protected void addFacesListener(FacesListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-
-        if (listeners == null) {
-            listeners = new AttachedObjectListHolder<FacesListener>();
-        }
-
-        listeners.add(listener);
-
-    }
-
-
-    /**
-     * @throws IllegalArgumentException {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     */
-    protected FacesListener[] getFacesListeners(Class clazz) {
-
-        if (clazz == null) {
-            throw new NullPointerException();
-        }
-        if (!FacesListener.class.isAssignableFrom(clazz)) {
-            throw new IllegalArgumentException();
-        }
-
-        if (this.listeners == null) {
-            return (FacesListener[]) Array.newInstance(clazz, 0);
-        }
-        FacesListener[] listeners = this.listeners.asArray(FacesListener.class);
-        if (listeners.length == 0) {
-            return (FacesListener[]) Array.newInstance(clazz, 0);
-        }
-
-        List<FacesListener> results = new ArrayList<FacesListener>(listeners.length);
-        for (FacesListener listener : listeners) {
-            if (((Class<?>) clazz).isAssignableFrom(listener.getClass())) {
-                results.add(listener);
-            }
-        }
-
-        return (results.toArray
-                ((FacesListener[]) Array.newInstance(clazz,
-                        results.size())));
-
-    }
-
-
-    /**
-     * <p>Remove the specified {@link FacesListener} from the set of listeners
-     * registered to receive event notifications from this {@link UIComponent}.
-     *
-     * @param listener The {@link FacesListener} to be deregistered
-     * @throws NullPointerException if <code>listener</code>
-     *                              is <code>null</code>
-     */
-    protected void removeFacesListener(FacesListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-
-        if (listeners != null) {
-            listeners.remove(listener);
-        }
-
-    }
-
-    /**
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws NullPointerException  {@inheritDoc}
-     */
-    public void queueEvent(FacesEvent event) {
-
-        if (event == null) {
-            throw new NullPointerException();
-        }
-        UIComponent parent = getParent();
-        if (parent == null) {
-            throw new IllegalStateException();
-        } else {
-            parent.queueEvent(event);
-        }
-
-    }
-
-
-    // ------------------------------------------------ Lifecycle Phase Handlers
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processDecodes(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Skip processing if our rendered flag is false
-        if (!isRendered()) {
-            return;
-        }
-
-        pushComponentToEL(context, null);
-
-        // Process all facets and children of this component
-        Iterator kids = getFacetsAndChildren();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            kid.processDecodes(context);
-        }
-
-        // Process this component itself
-        try {
-            decode(context);
-        } catch (RuntimeException e) {
-            context.renderResponse();
-            throw e;
-        } finally {
-            popComponentFromEL(context);
-        }
-
-    }
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processValidators(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Skip processing if our rendered flag is false
-        if (!isRendered()) {
-            return;
-        }
-
-        pushComponentToEL(context, null);
-
-        Application app = context.getApplication();
-        app.publishEvent(context, PreValidateEvent.class, this);
-        // Process all the facets and children of this component
-        Iterator kids = getFacetsAndChildren();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            kid.processValidators(context);
-        }
-        app.publishEvent(context, PostValidateEvent.class, this);
-        popComponentFromEL(context);
-
-    }
-
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processUpdates(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Skip processing if our rendered flag is false
-        if (!isRendered()) {
-            return;
-        }
-
-        pushComponentToEL(context, null);
-
-        // Process all facets and children of this component
-        Iterator kids = getFacetsAndChildren();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            kid.processUpdates(context);
-
-        }
-        popComponentFromEL(context);
-        
-    }
-
-    private static final int MY_STATE = 0;
-    private static final int CHILD_STATE = 1;
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object processSaveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (this.isTransient()) {
-            return null;
-        }
-        Object[] stateStruct = new Object[2];
-        Object[] childState = EMPTY_ARRAY;
-
-        pushComponentToEL(context, null);
-
-        // Process this component itself
-        stateStruct[MY_STATE] = saveState(context);
-
-        // determine if we have any children to store
-        int count = this.getChildCount() + this.getFacetCount();
-        if (count > 0) {
-
-            // this arraylist will store state
-            List<Object> stateList = new ArrayList<Object>(count);
-
-            // if we have children, add them to the stateList
-            if (this.getChildCount() > 0) {
-                Iterator kids = getChildren().iterator();
-                UIComponent kid;
-                while (kids.hasNext()) {
-                    kid = (UIComponent) kids.next();
-                    if (!kid.isTransient()) {
-                        stateList.add(kid.processSaveState(context));
-                        popComponentFromEL(context);
-                    }
-                }
-            }
-
-            pushComponentToEL(context, null);
-
-            // if we have facets, add them to the stateList
-            if (this.getFacetCount() > 0) {
-                Iterator myFacets = getFacets().entrySet().iterator();
-                UIComponent facet;
-                Object facetState;
-                Object[] facetSaveState;
-                Map.Entry entry;
-                while (myFacets.hasNext()) {
-                    entry = (Map.Entry) myFacets.next();
-                    facet = (UIComponent) entry.getValue();
-                    if (!facet.isTransient()) {
-                        facetState = facet.processSaveState(context);
-                        popComponentFromEL(context);
-                        facetSaveState = new Object[2];
-                        facetSaveState[0] = entry.getKey();
-                        facetSaveState[1] = facetState;
-                        stateList.add(facetSaveState);
-                    }
-                }
-            }
-
-            // finally, capture the stateList and replace the original,
-            // EMPTY_OBJECT_ARRAY Object array
-            childState = stateList.toArray();
-        }
-
-        stateStruct[CHILD_STATE] = childState;
-        return stateStruct;
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processRestoreState(FacesContext context,
-                                    Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        Object[] stateStruct = (Object[]) state;
-        Object[] childState = (Object[]) stateStruct[CHILD_STATE];
-
-        // Process this component itself
-        restoreState(context, stateStruct[MY_STATE]);
-
-        int i = 0;
-
-        // Process all the children of this component
-        if (this.getChildCount() > 0) {
-            for (UIComponent kid : getChildren()) {
-                if (kid.isTransient()) {
-                    continue;
-                }
-                Object currentState = childState[i++];
-                if (currentState == null) {
-                    continue;
-                }
-                pushComponentToEL(context, null);
-                kid.processRestoreState(context, currentState);
-                popComponentFromEL(context);
-            }
-        }
-
-        // process all of the facets of this component
-        if (this.getFacetCount() > 0) {
-            int facetsSize = getFacets().size();
-            int j = 0;
-            Object[] facetSaveState;
-            String facetName;
-            UIComponent facet;
-            Object facetState;
-            while (j < facetsSize) {
-                if (null != (facetSaveState = (Object[]) childState[i++])) {
-                    facetName = (String) facetSaveState[0];
-                    facetState = facetSaveState[1];
-                    facet = getFacets().get(facetName);
-                    pushComponentToEL(context, null);
-                    facet.processRestoreState(context, facetState);
-                    popComponentFromEL(context);
-                }
-                ++j;
-            }
-        }
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-    protected FacesContext getFacesContext() {
-
-        // PENDING(edburns): we can't use the cache ivar because we
-        // don't always know when to clear it.  For example, in the
-        // "save state in server" case, the UIComponent instances stick
-        // around between requests, yielding stale facesContext
-        // references.  If there was some way to clear the facesContext
-        // cache ivar for each node in the tree *after* the
-        // render-response phase, then we could keep a cache ivar.  As
-        // it is now, we must always use the Thread Local Storage
-        // solution.
-
-        return FacesContext.getCurrentInstance();
-
-    }
-
-
-    protected Renderer getRenderer(FacesContext context) {
-
-        String rendererType = getRendererType();
-        Renderer result = null;
-        if (rendererType != null) {
-            result = context.getRenderKit().getRenderer(getFamily(),
-                    rendererType);
-            if (null == result) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Can't get Renderer for type " + rendererType);
-                }
-            }
-        } else {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                String id = this.getId();
-                id = (null != id) ? id : this.getClass().getName();
-                LOGGER.fine("No renderer-type for component " + id);
-            }
-        }
-        return result;
-    }
-
-
-    // ---------------------------------------------- PartialStateHolder Methods
-
-    /**
-     * <p class="changed_added_2_0">For each of the attached objects on
-     * this instance that implement {@link PartialStateHolder}, call
-     * {@link PartialStateHolder#markInitialState} on the attached object.</p> 
-     * @since 2.0
-     */
-    @Override
-    public void markInitialState() {
-        super.markInitialState();
-
-        if (listeners != null) {
-            listeners.markInitialState();
-        }
-        if (listenersByEventClass != null) {
-            for (List<SystemEventListener> listener : listenersByEventClass.values()) {
-                if (listener instanceof PartialStateHolder) {
-                    ((PartialStateHolder) listener).markInitialState();
-                }
-            }
-        }
-        if (behaviors != null) {
-            for (Entry<String, List<ClientBehavior>> entry : behaviors.entrySet()) {
-                for (ClientBehavior behavior : entry.getValue()) {
-                    if (behavior instanceof PartialStateHolder) {
-                        ((PartialStateHolder) behavior).markInitialState();
-                    }
-                }
-            }
-        }
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">For each of the attached objects on
-     * this instance that implement {@link PartialStateHolder}, call
-     * {@link PartialStateHolder#clearInitialState} on the attached object.</p> 
-     * @since 2.0
-     */
-    @Override
-    public void clearInitialState() {
-        super.clearInitialState();
-        if (listeners != null) {
-            listeners.clearInitialState();
-        }
-        if (listenersByEventClass != null) {
-            for (List<SystemEventListener> listener : listenersByEventClass.values()) {
-                if (listener instanceof PartialStateHolder) {
-                    ((PartialStateHolder) listener).clearInitialState();
-                }
-            }
-        }
-        if (behaviors != null) {
-            for (Entry<String, List<ClientBehavior>> entry : behaviors.entrySet()) {
-                for (ClientBehavior behavior : entry.getValue()) {
-                    if (behavior instanceof PartialStateHolder) {
-                        ((PartialStateHolder) behavior).clearInitialState();
-                    }
-                }
-            }
-        }
-    }
-
-    private Object[] values;
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        assert (!transientFlag);
-        if (initialStateMarked()) {
-            Object savedFacesListeners = ((listeners != null) ? listeners.saveState(context) : null);
-            Object savedSysEventListeners = saveSystemEventListeners(context);
-            Object savedBehaviors = saveBehaviorsState(context);
-            Object savedBindings = null;
-            if (bindings != null) {
-                savedBindings = saveBindingsState(context);
-            }
-            Object savedHelper = null;
-            if (stateHelper != null) {
-                savedHelper = stateHelper.saveState(context);
-            }
-            if (savedFacesListeners == null
-                  && savedSysEventListeners == null
-                  && savedBehaviors == null
-                  && savedBindings == null
-                  && savedHelper == null) {
-                return null;
-            } else {
-                if (values == null || values.length != 5) {
-                    values = new Object[5];
-                }
-
-                // since we're saving partial state, skip id and clientId
-                // as this will be reconstructed from the template execution
-                // when the view is restored
-                values[0] = savedFacesListeners;
-                values[1] = savedSysEventListeners;
-                values[2] = savedBehaviors;
-                values[3] = savedBindings;
-                values[4] = savedHelper;
-                return values;
-            }
-        } else {
-            if (values == null || values.length != 6) {
-                values = new Object[6];
-            }
-
-            values[0] = ((listeners != null) ? listeners.saveState(context) : null);
-            values[1] = saveSystemEventListeners(context);
-            values[2] = saveBehaviorsState(context);
-            if (bindings != null) {
-                values[3] = saveBindingsState(context);
-            }
-            if (stateHelper != null) {
-                values[4] = stateHelper.saveState(context);
-            }
-            values[5] = id;
-
-            return (values);
-        }
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (state == null) {
-            return;
-        }
-        values = (Object[]) state;
-
-        if (values[0] != null) {
-            if (listeners == null) {
-                listeners = new AttachedObjectListHolder<FacesListener>();
-            }
-            listeners.restoreState(context, values[0]);
-        }
-        if (values[1] != null) {
-            Map m = restoreSystemEventListeners(context, values[1]);
-            if (listenersByEventClass != null) {
-                listenersByEventClass.putAll(m);
-            } else {
-                listenersByEventClass = m;
-            }
-        }
-        if (values[2] != null) {
-            behaviors = restoreBehaviorsState(context, values[2]);
-        }
-        if (values[3] != null) {
-            bindings = restoreBindingsState(context, values[3]);
-        }
-        if(values[4] != null) {
-            getStateHelper().restoreState(context, values[4]);
-        }
-        if (values.length == 6) {
-            // this means we've saved full state and need to do a little more
-            // work to finish the job
-            if (values[5] != null) {
-                id = (String) values[5];
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>Flag indicating a desire to now participate in state saving.</p>
-     */
-    private boolean transientFlag = false;
-
-    public boolean isTransient() {
-
-        return (this.transientFlag);
-
-    }
-
-
-    public void setTransient(boolean transientFlag) {
-
-        this.transientFlag = transientFlag;
-
-    }
-
-    // -------------------------------------- Helper methods for state saving
-
-    // --------- methods used by UIComponents to save their attached Objects.
-
-    /**
-     * <p class="changed_modified_2_0">This method is called by {@link
-     * UIComponent} subclasses that want to save one or more attached
-     * objects.  It is a convenience method that does the work of saving
-     * attached objects that may or may not implement the {@link
-     * StateHolder} interface.  Using this method implies the use of
-     * {@link #restoreAttachedState} to restore the attached
-     * objects.</p>
-     * <p/>
-     * <p>This method supports saving attached objects of the following
-     * type: <code>Object</code>s, <code>null</code> values, and <code
-     * class="changed_modified_2_0">Collection</code>s of these objects.
-     * If any contained objects are not <code
-     * class="changed_modified_2_0">Collection</code>s and do not
-     * implement {@link StateHolder}, they must have zero-argument
-     * public constructors.  The exact structure of the returned object
-     * is undefined and opaque, but will be serializable.  </p>
-     *
-     * @param context        the {@link FacesContext} for this request.
-     * @param attachedObject the object, which may be a
-     *                       <code>List</code> instance, or an Object.  The
-     *                       <code>attachedObject</code> (or the elements that comprise
-     *                       <code>attachedObject</code> may implement {@link StateHolder}.
-     * @throws NullPointerException if the context argument is null.
-     */
-
-    public static Object saveAttachedState(FacesContext context,
-                                           Object attachedObject) {
-        if (null == context) {
-            throw new NullPointerException();
-        }
-        if (null == attachedObject) {
-            return null;
-        }
-        Object result;
-        Class mapOrCollectionClass = attachedObject.getClass();
-        boolean newWillSucceed = true;
-        // first, test for newability of the class.
-        try {
-            int modifiers = mapOrCollectionClass.getModifiers();
-            newWillSucceed = Modifier.isPublic(modifiers);
-            if (newWillSucceed) {
-                newWillSucceed = null != mapOrCollectionClass.getConstructor();
-            }
-        } catch (Exception e) {
-            newWillSucceed = false;
-        }
-
-
-        if (newWillSucceed && attachedObject instanceof Collection) {
-            Collection attachedCollection = (Collection) attachedObject;
-            List<StateHolderSaver> resultList = null;
-            for (Object item : attachedCollection) {
-                if (item != null) {
-                    if (item instanceof StateHolder && ((StateHolder) item).isTransient()) {
-                        continue;
-                    }
-                    if (resultList == null) {
-                        resultList = new ArrayList<StateHolderSaver>(attachedCollection.size() + 1);
-                        resultList.add(new StateHolderSaver(context, mapOrCollectionClass));
-                    }
-                    resultList.add(new StateHolderSaver(context, item));
-                }
-            }
-            result = resultList;
-        } else if (newWillSucceed && attachedObject instanceof Map) {
-            Map<Object, Object> attachedMap = (Map<Object, Object>) attachedObject;
-            List<StateHolderSaver> resultList = null;
-            Object key, value;
-            for (Map.Entry<Object, Object> entry : attachedMap.entrySet()) {
-                key = entry.getKey();
-                if (key instanceof StateHolder && ((StateHolder)key).isTransient()) {
-                    continue;
-                }
-                value = entry.getValue();
-                if (value instanceof StateHolder && ((StateHolder)value).isTransient()) {
-                    continue;
-                }
-                if (resultList == null) {
-                    resultList = new ArrayList<StateHolderSaver>(attachedMap.size()*2 + 1);
-                    resultList.add(new StateHolderSaver(context, mapOrCollectionClass));
-                }
-                resultList.add(new StateHolderSaver(context, key));
-                resultList.add(new StateHolderSaver(context, value));
-            }
-            result = resultList;
-        } else {
-            result = new StateHolderSaver(context, attachedObject);
-        }
-
-        return result;
-    }
-
-    /**
-     * <p>This method is called by {@link UIComponent} subclasses that
-     * need to restore the objects they saved using {@link
-     * #saveAttachedState}.  This method is tightly coupled with {@link
-     * #saveAttachedState}.</p>
-     * <p/>
-     * <p>This method supports restoring all attached objects types
-     * supported by {@link #saveAttachedState}.</p>
-     *
-     * @param context  the {@link FacesContext} for this request
-     * @param stateObj the opaque object returned from {@link
-     *                 #saveAttachedState}
-     * @throws NullPointerException  if context is null.
-     * @throws IllegalStateException if the object is not
-     *                               previously returned by {@link #saveAttachedState}.
-     */
-
-    public static Object restoreAttachedState(FacesContext context,
-                                              Object stateObj)
-            throws IllegalStateException {
-        if (null == context) {
-            throw new NullPointerException();
-        }
-        if (null == stateObj) {
-            return null;
-        }
-        Object result;
-
-        if (stateObj instanceof List) {
-            List<StateHolderSaver> stateList = (List<StateHolderSaver>) stateObj;
-            StateHolderSaver collectionSaver = stateList.get(0);
-            Class mapOrCollection = (Class) collectionSaver.restore(context);
-            if (Collection.class.isAssignableFrom(mapOrCollection)) {
-                Collection<Object> retCollection = null;
-                try {
-                    retCollection = (Collection<Object>) mapOrCollection.newInstance();
-                } catch (Exception e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE, e.toString(), e);
-                    }
-                    throw new IllegalStateException("Unknown object type");
-                }
-                for (int i = 1, len = stateList.size(); i < len; i++) {
-                    try {
-                        retCollection.add(stateList.get(i).restore(context));
-                    } catch (ClassCastException cce) {
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE, cce.toString(), cce);
-                        }
-                        throw new IllegalStateException("Unknown object type");
-                    }
-                }
-                result = retCollection;
-            } else {
-                // If we were doing assertions: assert(mapOrList.isAssignableFrom(Map.class));
-                Map<Object, Object> retMap = null;
-                try {
-                    retMap = (Map<Object,Object>) mapOrCollection.newInstance();
-                } catch (Exception e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE, e.toString(), e);
-                    }
-                    throw new IllegalStateException("Unknown object type");
-                }
-                for (int i = 1, len = stateList.size(); i < len; i+=2) {
-                    try {
-                        retMap.put(stateList.get(i).restore(context),
-                                   stateList.get(i+1).restore(context));
-                    } catch (ClassCastException cce) {
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE, cce.toString(), cce);
-                        }
-                        throw new IllegalStateException("Unknown object type");
-                    }
-                }
-                result = retMap;
-
-            }
-        } else if (stateObj instanceof StateHolderSaver) {
-            StateHolderSaver saver = (StateHolderSaver) stateObj;
-            result = saver.restore(context);
-        } else {
-            throw new IllegalStateException("Unknown object type");
-        }
-        return result;
-    }
-
-    private static Map<String, ValueExpression> restoreBindingsState(FacesContext context, Object state) {
-
-        if (state == null) {
-            return (null);
-        }
-        Object values[] = (Object[]) state;
-        String names[] = (String[]) values[0];
-        Object states[] = (Object[]) values[1];
-        Map<String, ValueExpression> bindings = new HashMap<String, ValueExpression>(names.length);
-        for (int i = 0; i < names.length; i++) {
-            bindings.put(names[i],
-                    (ValueExpression) restoreAttachedState(context, states[i]));
-        }
-        return (bindings);
-
-    }
-
-
-    private Object saveBindingsState(FacesContext context) {
-
-        if (bindings == null) {
-            return (null);
-        }
-
-        Object values[] = new Object[2];
-        values[0] = bindings.keySet().toArray(new String[bindings.size()]);
-
-        Object[] bindingValues = bindings.values().toArray();
-        for (int i = 0; i < bindingValues.length; i++) {
-            bindingValues[i] = saveAttachedState(context, bindingValues[i]);
-        }
-
-        values[1] = bindingValues;
-
-        return (values);
-
-    }
-
-    private Object saveSystemEventListeners(FacesContext ctx) {
-
-        if (listenersByEventClass == null) {
-            return null;
-        }
-
-        int size = listenersByEventClass.size();
-        Object listeners[][] = new Object[size][2];
-        int idx = 0;
-        boolean savedState = false;
-        for (Entry<Class<? extends SystemEvent>, List<SystemEventListener>> e : listenersByEventClass.entrySet()) {
-            Object[] target = listeners[idx++];
-            target[0] = e.getKey();
-            target[1] = saveAttachedState(ctx, e.getValue());
-            if (target[1] == null) {
-                target[0] = null;
-            } else {
-                savedState = true;
-            }
-        }
-
-        return ((savedState) ? listeners : null);
-
-    }
-
-
-    private Map<Class<? extends SystemEvent>, List<SystemEventListener>> restoreSystemEventListeners(FacesContext ctx, Object state) {
-
-        if (state == null) {
-            return null;
-        }
-
-        Object[][] listeners = (Object[][]) state;
-        Map<Class<? extends SystemEvent>, List<SystemEventListener>> m =
-                new HashMap<Class<? extends SystemEvent>, List<SystemEventListener>>(listeners.length, 1.0f);
-        for (int i = 0, len = listeners.length; i < len; i++) {
-            Object[] source = listeners[i];
-            m.put((Class<? extends SystemEvent>) source[0],
-                    (List<SystemEventListener>) restoreAttachedState(ctx, source[1]));
-        }
-
-        return m;
-    }
-
-
-    Map<String, PropertyDescriptor> getDescriptorMap() {
-        return pdMap;
-    }
-
-
-    private void doPostAddProcessing(FacesContext context, UIComponent added) {
-
-        if (parent.isInView()) {
-            publishAfterViewEvents(context, context.getApplication(), added);
-        }
-
-    }
-
-    private void doPreRemoveProcessing(FacesContext context,
-                                       UIComponent toRemove) {
-
-        if (parent.isInView()) {
-            disconnectFromView(context, context.getApplication(), toRemove);
-        }
-
-    }
-
-    //------------------------------------------------------------- BehaviorHolder stub methods.
-
-    /**
-     * behaviors associated with this component.
-     */
-    private BehaviorsMap behaviors;
-
-    /**
-     * <p class="changed_added_2_0">This is a default implementation of
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder#addClientBehavior}.
-     * <code>UIComponent</code> does not implement the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
-     * but provides default implementations for the methods defined by
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
-     * subclass implementations.   Subclasses that wish to support the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract must
-     * declare that the subclass implements
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must provide
-     * an implementation of
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.</p>
-     *
-     * @param eventName the logical name of the client-side event to attach
-     *        the behavior to.
-     * @param  behavior the {@link javax.faces.component.behavior.Behavior} 
-     * instance to attach for the specified event name.
-     *
-     * @since 2.0
-     */
-    public void addClientBehavior(String eventName, ClientBehavior behavior) {
-        assertClientBehaviorHolder();
-        // First, make sure that the event is supported.  We don't want
-        // to bother attaching behaviors for unsupported events.
-
-        Collection<String> eventNames = getEventNames();
-
-        // getClientEventNames() is spec'ed to require a non-null Set.
-        // If getClientEventNames() returns null, throw an exception
-        // to indicate that the API in not being used properly.
-        if (eventNames == null) {
-            throw new IllegalStateException(
-                "Attempting to add a Behavior to a component " +
-                "that does not support any event types. "     +
-                  "getEventTypes() must return a non-null Set.");
-        }
-
-        if (eventNames.contains(eventName)) {
-
-            if (initialStateMarked()) {
-                // a Behavior has been added dynamically.  Update existing
-                // Behaviors, if any, to save their full state.
-                if (behaviors != null) {
-                    for (Entry<String, List<ClientBehavior>> entry : behaviors
-                          .entrySet()) {
-                        for (ClientBehavior b : entry.getValue()) {
-                            if (b instanceof PartialStateHolder) {
-                                ((PartialStateHolder) behavior).clearInitialState();
-                            }
-                        }
-                    }
-                }
-            }
-            // We've got an event that we support, create our Map
-            // if necessary
-
-            if (null == behaviors) {
-                // Typically we only have a small number of behaviors for
-                // any component - in most cases only 1.  Using a very small
-                // initial capacity so that we keep the footprint to a minimum.
-                Map<String, List<ClientBehavior>> modifiableMap =
-                    new HashMap<String, List<ClientBehavior>>(5,1.0f);
-                behaviors = new BehaviorsMap(modifiableMap);
-            }
-
-            List<ClientBehavior> eventBehaviours = behaviors.get(eventName);
-
-            if (null == eventBehaviours) {
-                // Again using small initial capacity - we typically
-                // only have 1 Behavior per event type.
-                eventBehaviours = new ArrayList<ClientBehavior>(3);
-                behaviors.getModifiableMap().put(eventName, eventBehaviours);
-            }
-
-            eventBehaviours.add(behavior);
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0">This is a default implementation of
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.
-     * <code>UIComponent</code> does not implement the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
-     * but provides default implementations for the methods defined by
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
-     * subclass implementations.   Subclasses that wish to support the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract
-     * must declare that the subclass implements
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must
-     * override this method to return a non-Empty <code>Collection</code>
-     * of the client event names that the component supports.</p>
-     *
-     * @since 2.0
-     */
-    public Collection<String> getEventNames() {
-        assertClientBehaviorHolder();
-        // Note: we intentionally return null here even though this
-        // is not a valid value.  The result is that addClientBehavior()
-        // will fail with an IllegalStateException if getEventNames()
-        // is not overridden.  This should make it obvious to the
-        // component author that something is wrong.
-        return null;
-    }
-
-    /**
-     * <p class="changed_added_2_0">This is a default implementation of
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getClientBehaviors}.
-     * <code>UIComponent</code> does not implement the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
-     * but provides default implementations for the methods defined by
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
-     * subclass implementations.   Subclasses that wish to support the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract
-     * must declare that the subclass implements
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must add
-     * an implementation of
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.</p>
-     *
-     * @since 2.0
-     */
-    public Map<String, List<ClientBehavior>> getClientBehaviors() {
-        if (null == behaviors) {
-            return Collections.emptyMap();
-        }
-
-        return behaviors;
-    }
-
-    /**
-     * <p class="changed_added_2_0">This is a default implementation of
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getDefaultEventName}.
-     * <code>UIComponent</code> does not implement the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} interface,
-     * but provides default implementations for the methods defined by
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} to simplify
-     * subclass implementations.   Subclasses that wish to support the
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder} contract
-     * must declare that the subclass implements
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder}, and must
-     * provide an implementation of
-     * {@link javax.faces.component.behavior.ClientBehaviorHolder#getEventNames}.</p>
-     */
-    public String getDefaultEventName() {
-        assertClientBehaviorHolder();
-        // Our default implementation just returns null - no default
-        // event name;
-        return null;
-    }
-
-    /**
-     * {@link UIComponentBase} has stub methods from the {@link ClientBehaviorHolder} interface,
-     * but these method should be used only with componets that really implement holder interface.
-     * For an any other classes this method throws {@link IllegalStateException}
-     * @throws IllegalStateException
-     */
-    private void assertClientBehaviorHolder() {
-        if (!isClientBehaviorHolder()) {
-            throw new IllegalStateException(
-                "Attempting to use a Behavior feature with a component " +
-                "that does not support any event types. "     +
-                "Component must implement BehaviourHolder interface.");
-        }
-    }
-
-    /**
-     * @return true if component implements {@link ClientBehaviorHolder} interface.
-     */
-    private boolean isClientBehaviorHolder() {
-        return ClientBehaviorHolder.class.isInstance(this);
-    }
-
-    /**
-     * Save state of the behaviors map.
-     * @param context the {@link FacesContext} for this request.
-     * @return map converted to the array of <code>Object</code> or null if no behaviors have been set.
-     */
-    private Object saveBehaviorsState(FacesContext context){
-        Object state = null;
-        if (null != behaviors && behaviors.size() >0){
-            boolean stateWritten = false;
-            Object[] attachedBehaviors = new Object[behaviors.size()];
-            int i = 0;
-            for (List<ClientBehavior> eventBehaviors : behaviors.values()) {
-                // we need to take different action depending on whether
-                // or not markInitialState() was called.  If it's not called,
-                // assume JSF 1.2 style state saving and call through to
-                // saveAttachedState(), otherwise, call saveState() on the
-                // behaviors directly.
-                Object[] attachedEventBehaviors = new Object[eventBehaviors.size()];
-                for (int j = 0; j < attachedEventBehaviors.length; j++) {
-                    attachedEventBehaviors[j] = ((initialStateMarked())
-                                                 ? saveBehavior(context, eventBehaviors.get(j))
-                                                 : saveAttachedState(context, eventBehaviors.get(j)));
-                    if (!stateWritten) {
-                        stateWritten = (attachedEventBehaviors[j] != null);
-                    }
-                }
-                attachedBehaviors[i++] = attachedEventBehaviors;
-            }
-            if (stateWritten) {
-                state = new Object[]{behaviors.keySet().toArray(new String[behaviors.size()]),attachedBehaviors};
-            }
-        }
-        return state;
-    }
-
-    /**
-     * @param context the {@link FacesContext} for this request.
-     * @param state saved state of the {@link Behavior}'s attached to the component.
-     * @return restored <code>Map</code> of the behaviors.
-     */
-    private BehaviorsMap restoreBehaviorsState(FacesContext context, Object state) {
-
-        if (null != state) {
-            Object[] values = (Object[]) state;
-            String[] names = (String[])values[0];
-            Object[] attachedBehaviors = (Object[]) values[1];
-            // we need to take different action depending on whether
-            // or not markInitialState() was called.  If it's not called,
-            // assume JSF 1.2 style state saving and call through to
-            // restoreAttachedState(), otherwise, call restoreState() on the
-            // behaviors directly.
-            if (!initialStateMarked()) {
-                Map<String, List<ClientBehavior>> modifiableMap = new HashMap<String, List<ClientBehavior>>(
-                      names.length,
-                      1.0f);
-                for (int i = 0; i < attachedBehaviors.length; i++) {
-                    Object[] attachedEventBehaviors = (Object[]) attachedBehaviors[i];
-                    ArrayList<ClientBehavior> eventBehaviors =
-                          new ArrayList<ClientBehavior>(attachedBehaviors.length);
-                    for (int j = 0; j < attachedEventBehaviors.length; j++) {
-                        eventBehaviors.add((ClientBehavior) restoreAttachedState(context,
-                                                                                 attachedEventBehaviors[j]));
-                    }
-
-                    modifiableMap.put(names[i], eventBehaviors);
-                }
-
-                return new BehaviorsMap(modifiableMap);
-            } else {
-                for (int i = 0, len = names.length; i < len; i++) {
-                    // assume the behaviors have already been populated by
-                    // execution of the template.  Process the state in the
-                    // same order that the names were saved.
-                    List<ClientBehavior> existingBehaviors =
-                          behaviors.get(names[i]);
-                    restoreBehaviors(context, existingBehaviors, (Object[]) attachedBehaviors[i]);
-                }
-                return behaviors;
-            }
-        }
-        return null;
-    }
-
-    private Object saveBehavior(FacesContext ctx, ClientBehavior behavior) {
-
-        // if the Behavior isn't a StateHolder, do nothing as it will be
-        // added to the BehaviorMap when the template is re-executed.
-        return ((behavior instanceof StateHolder)
-                ? ((StateHolder) behavior).saveState(ctx)
-                : null);
-
-    }
-
-
-    private void restoreBehaviors(FacesContext ctx, List<ClientBehavior> existingBehaviors, Object[] state) {
-
-        // this method assumes a one to one correspondence in both length and
-        // order.
-        for (int i = 0, len = state.length; i < len; i++) {
-            ClientBehavior behavior = existingBehaviors.get(i);
-            if (state[i] == null) {
-                // nothing to do...move on
-                continue;
-            }
-            // if the Behavior is a StateHolder, invoke restoreState
-            // passing in the current state.  If it's not, just ignore
-            // it and move along.
-            if (behavior instanceof StateHolder) {
-                ((StateHolder) behavior).restoreState(ctx, state[i]);
-            }
-        }
-    }
-
-
-    private static void publishAfterViewEvents(FacesContext context,
-                                               Application application,
-                                               UIComponent component) {
-
-        component.setInView(true);
-        try {
-            component.pushComponentToEL(context, component);
-            application.publishEvent(context, PostAddToViewEvent.class, component);
-            if (component.getChildCount() > 0) {
-                Collection<UIComponent> clist =
-                      new ArrayList<UIComponent>(component.getChildren());
-                for (UIComponent c : clist) {
-                    publishAfterViewEvents(context, application, c);
-                }
-            }
-
-            if (component.getFacetCount() > 0) {
-                Collection<UIComponent> clist =
-                      new ArrayList<UIComponent>(component.getFacets().values());
-                for (UIComponent c : clist) {
-                    publishAfterViewEvents(context, application, c);
-                }
-            }
-        } finally {
-            component.popComponentFromEL(context);
-        }
-
-    }
-
-
-    private static void disconnectFromView(FacesContext context,
-                                           Application application,
-                                           UIComponent component) {
-
-        application.publishEvent(context,
-                                 PreRemoveFromViewEvent.class,
-                                 component);
-        component.setInView(false);
-        component.compositeParent = null;
-        if (component.getChildCount() > 0) {
-            List<UIComponent> children = component.getChildren();
-            for (UIComponent c : children) {
-                disconnectFromView(context, application, c);
-            }
-        }
-        if (component.getFacetCount() > 0) {
-            Map<String, UIComponent> facets = component.getFacets();
-            for (UIComponent c : facets.values()) {
-                disconnectFromView(context, application, c);
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Classes
-
-    // For state saving
-    private final static Object[] EMPTY_ARRAY = new Object[0];
-
-    // Empty iterator for short circuiting operations
-    private final static Iterator<UIComponent> EMPTY_ITERATOR = new Iterator<UIComponent>() {
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        public UIComponent next() {
-            throw new NoSuchElementException("Empty Iterator");
-        }
-
-        public boolean hasNext() {
-            return false;
-        }
-    };
-
-    // Private implementation of Map that supports the functionality
-    // required by UIComponent.getFacets()
-    // HISTORY:
-    //   Versions 1.333 and older used inheritence to provide the
-    //     basic map functionality.  This was wasteful since a
-    //     component could be completely configured via ValueExpressions
-    //     or (Bindings) which means an EMPTY_OBJECT_ARRAY Map would always be
-    //     present when it wasn't needed.  By using composition,
-    //     we control if and when the Map is instantiated thereby
-    //     reducing uneeded object allocation.  This change also
-    //     has a nice side effect in state saving since we no
-    //     longer need to duplicate the map, we just provide the
-    //     private 'attributes' map directly to the state saving process.
-    private static class AttributesMap implements Map<String, Object>, Serializable {
-
-        // this KEY is special to the AttributesMap - this allows the implementation
-        // to access the the List containing the attributes that have been set
-        private static final String ATTRIBUTES_THAT_ARE_SET_KEY =
-                UIComponentBase.class.getName() + ".attributesThatAreSet";
-
-        //private Map<String, Object> attributes;
-        private transient Map<String, PropertyDescriptor> pdMap;
-        private transient UIComponent component;
-        private static final long serialVersionUID = -6773035086539772945L;
-
-        // -------------------------------------------------------- Constructors
-
-        private AttributesMap(UIComponent component) {
-
-            this.component = component;
-            this.pdMap = ((UIComponentBase) component).getDescriptorMap();
-
-        }
-
-        public boolean containsKey(Object keyObj) {
-            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(keyObj)) {
-                return true;
-            }
-            String key = (String) keyObj;
-            PropertyDescriptor pd =
-                    getPropertyDescriptor(key);
-            if (pd == null) {
-                Map<String,Object> attributes = (Map<String,Object>)
-                      component.getStateHelper().get(PropertyKeys.attributes);
-                if (attributes != null) {
-                    return attributes.containsKey(key);
-                } else {
-                    return (false);
-                }
-            } else {
-                return (false);
-            }
-        }
-
-        public Object get(Object keyObj) {
-            String key = (String) keyObj;
-            Object result = null;
-            if (key == null) {
-                throw new NullPointerException();
-            }
-            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(key)) {
-                result = component.getStateHelper().get(UIComponent.PropertyKeysPrivate.attributesThatAreSet);
-            }
-            Map<String,Object> attributes = (Map<String,Object>)
-                  component.getStateHelper().get(PropertyKeys.attributes);
-            if (null == result) {
-                PropertyDescriptor pd =
-                        getPropertyDescriptor(key);
-                if (pd != null) {
-                    try {
-                        Method readMethod = pd.getReadMethod();
-                        if (readMethod != null) {
-                            result = (readMethod.invoke(component,
-                                    EMPTY_OBJECT_ARRAY));
-                        } else {
-                            throw new IllegalArgumentException(key);
-                        }
-                    } catch (IllegalAccessException e) {
-                        throw new FacesException(e);
-                    } catch (InvocationTargetException e) {
-                        throw new FacesException(e.getTargetException());
-                    }
-                } else if (attributes != null) {
-                    if (attributes.containsKey(key)) {
-                        result = attributes.get(key);
-                    }
-                }
-            }
-            if (null == result) {
-                ValueExpression ve = component.getValueExpression(key);
-                if (ve != null) {
-                    try {
-                        result = ve.getValue(component.getFacesContext().getELContext());
-                    } catch (ELException e) {
-                        throw new FacesException(e);
-                    }
-                }
-            }
-
-            return result;
-        }
-
-        public Object put(String keyValue, Object value) {
-            if (keyValue == null) {
-                throw new NullPointerException();
-            }
-
-            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(keyValue)) {
-                if (component.attributesThatAreSet == null) {
-                    if (value instanceof List) {
-                        component.getStateHelper().put(UIComponent.PropertyKeysPrivate.attributesThatAreSet,
-                                                       value);
-                    }
-                }
-                return null;
-            }
-
-            PropertyDescriptor pd =
-                    getPropertyDescriptor(keyValue);
-            if (pd != null) {
-                try {
-                    Object result = null;
-                    Method readMethod = pd.getReadMethod();
-                    if (readMethod != null) {
-                        result = readMethod.invoke
-                                (component, EMPTY_OBJECT_ARRAY);
-                    }
-                    Method writeMethod = pd.getWriteMethod();
-                    if (writeMethod != null) {
-                        writeMethod.invoke
-                                (component, value);
-                    } else {
-                        // TODO: i18n
-                        throw new IllegalArgumentException("Setter not found for property " + keyValue);
-                    }
-                    return (result);
-                } catch (IllegalAccessException e) {
-                    throw new FacesException(e);
-                } catch (InvocationTargetException e) {
-                    throw new FacesException
-                            (e.getTargetException());
-                }
-            } else {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-
-                List<String> sProperties =
-                      (List<String>) component.getStateHelper().get(PropertyKeysPrivate.attributesThatAreSet);
-                if (sProperties == null) {
-                    component.getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, keyValue);
-                } else if (!sProperties.contains(keyValue)) {
-                    component.getStateHelper().add(PropertyKeysPrivate.attributesThatAreSet, keyValue);
-                }
-                return putAttribute(keyValue, value);
-            }
-        }
-
-        public void putAll(Map<? extends String, ?> map) {
-            if (map == null) {
-                throw new NullPointerException();
-            }
-
-            for (Map.Entry<? extends String, ?> entry : map.entrySet()) {
-                this.put(entry.getKey(), entry.getValue());
-            }
-        }
-
-        public Object remove(Object keyObj) {
-            String key = (String) keyObj;
-            if (key == null) {
-                throw new NullPointerException();
-            }
-            if (ATTRIBUTES_THAT_ARE_SET_KEY.equals(key)) {
-                return null;
-            }
-            PropertyDescriptor pd =
-                    getPropertyDescriptor(key);
-            if (pd != null) {
-                throw new IllegalArgumentException(key);
-            } else {
-                Map<String,Object> attributes = getAttributes();
-                if (attributes != null) {
-                    component.getStateHelper().remove(UIComponent.PropertyKeysPrivate.attributesThatAreSet,
-                                                      key);
-                    return (component.getStateHelper().remove(PropertyKeys.attributes,
-                                                              key));
-                } else {
-                    return null;
-                }
-            }
-        }
-
-
-        public int size() {
-            Map attributes = getAttributes();
-            return (attributes != null ? attributes.size() : 0);
-        }
-
-        public boolean isEmpty() {
-            Map attributes = getAttributes();
-            return (attributes == null || attributes.isEmpty());
-        }
-
-        public boolean containsValue(java.lang.Object value) {
-            Map attributes= getAttributes();
-            return (attributes != null && attributes.containsValue(value));
-        }
-
-        public void clear() {
-            component.getStateHelper().remove(PropertyKeys.attributes);
-            component.getStateHelper().remove(PropertyKeysPrivate.attributesThatAreSet);
-        }
-
-        public Set<String> keySet() {
-            Map<String,Object> attributes = getAttributes();
-            if (attributes != null)
-                return Collections.unmodifiableSet(attributes.keySet());
-            return Collections.emptySet();
-        }
-
-        public Collection<Object> values() {
-            Map<String,Object> attributes = getAttributes();
-            if (attributes != null)
-                return Collections.unmodifiableCollection(attributes.values());
-            return Collections.emptyList();
-        }
-
-        public Set<Entry<String, Object>> entrySet() {
-            Map<String,Object> attributes = getAttributes();
-            if (attributes != null)
-                return Collections.unmodifiableSet(attributes.entrySet());
-            return Collections.emptySet();
-        }
-
-        public boolean equals(Object o) {
-            if (o == this) {
-                return true;
-            }
-
-            if (!(o instanceof Map)) {
-                return false;
-            }
-            Map t = (Map) o;
-            if (t.size() != size()) {
-                return false;
-            }
-
-            try {
-                for (Object e : entrySet()) {
-                    Entry entry = (Entry) e;
-                    Object key = entry.getKey();
-                    Object value = entry.getValue();
-                    if (value == null) {
-                        if (!(t.get(key) == null && t.containsKey(key))) {
-                            return false;
-                        }
-                    } else {
-                        if (!value.equals(t.get(key))) {
-                            return false;
-                        }
-                    }
-                }
-            } catch (ClassCastException unused) {
-                return false;
-            } catch (NullPointerException unused) {
-                return false;
-            }
-
-            return true;
-        }
-
-
-        public int hashCode() {
-            int h = 0;
-            for (Object o : entrySet()) {
-                h += o.hashCode();
-            }
-            return h;
-        }
-
-        private Map<String,Object> getAttributes() {
-            return (Map<String,Object>) component.getStateHelper().get(
-                  PropertyKeys.attributes);
-        }
-
-        private Object putAttribute(String key, Object value) {
-            return component.getStateHelper().put(PropertyKeys.attributes,
-                                                  key,
-                                                  value);
-        }
-
-
-        /**
-         * <p>Return the <code>PropertyDescriptor</code> for the specified
-         * property name for this {@link UIComponent}'s implementation class,
-         * if any; otherwise, return <code>null</code>.</p>
-         *
-         * @param name Name of the property to return a descriptor for
-         * @throws FacesException if an introspection exception occurs
-         */
-        PropertyDescriptor getPropertyDescriptor(String name) {
-            if (pdMap != null) {
-                return (pdMap.get(name));
-            }
-            return (null);
-        }
-
-        // ----------------------------------------------- Serialization Methods
-
-        // This is dependent on serialization occuring with in a
-        // a Faces request, however, since UIComponentBase.{save,restore}State()
-        // doesn't actually serialize the AttributesMap, these methods are here
-        // purely to be good citizens.
-
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            out.writeObject(component.getClass());
-            //noinspection NonSerializableObjectPassedToObjectStream
-            out.writeObject(component.saveState(FacesContext.getCurrentInstance()));
-        }
-
-        private void readObject(ObjectInputStream in)
-                throws IOException, ClassNotFoundException {
-            //noinspection unchecked
-            Class clazz = (Class) in.readObject();
-            try {
-                component = (UIComponent) clazz.newInstance();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-            component.restoreState(FacesContext.getCurrentInstance(), in.readObject());
-        }
-    }
-
-
-    // Private implementation of List that supports the functionality
-    // required by UIComponent.getChildren()
-    private static class ChildrenList extends ArrayList<UIComponent> {
-
-        private UIComponent component;
-
-        public ChildrenList(UIComponent component) {
-            super(6);
-            this.component = component;
-        }
-
-        public void add(int index, UIComponent element) {
-            if (element == null) {
-                throw new NullPointerException();
-            } else if ((index < 0) || (index > size())) {
-                throw new IndexOutOfBoundsException();
-            } else {
-                eraseParent(element);
-                super.add(index, element);
-                element.setParent(component);
-
-            }
-        }
-
-        public boolean add(UIComponent element) {
-            if (element == null) {
-                throw new NullPointerException();
-            } else {
-                eraseParent(element);
-                boolean result = super.add(element);
-                element.setParent(component);
-                return result;
-            }
-        }
-
-        public boolean addAll(Collection<? extends UIComponent> collection) {
-            Iterator<UIComponent> elements =
-                    (new ArrayList<UIComponent>(collection)).iterator();
-            boolean changed = false;
-            while (elements.hasNext()) {
-                UIComponent element = elements.next();
-                if (element == null) {
-                    throw new NullPointerException();
-                } else {
-                    add(element);
-                    changed = true;
-                }
-            }
-            return (changed);
-        }
-
-        public boolean addAll(int index, Collection<? extends UIComponent> collection) {
-            Iterator<UIComponent> elements =
-                    (new ArrayList<UIComponent>(collection)).iterator();
-            boolean changed = false;
-            while (elements.hasNext()) {
-                UIComponent element = elements.next();
-                if (element == null) {
-                    throw new NullPointerException();
-                } else {
-                    add(index++, element);
-                    changed = true;
-                }
-            }
-            return (changed);
-        }
-
-        public void clear() {
-            int n = size();
-            if (n < 1) {
-                return;
-            }
-            for (int i = 0; i < n; i++) {
-                UIComponent child = get(i);
-                child.setParent(null);
-            }
-            super.clear();
-        }
-
-        public Iterator<UIComponent> iterator() {
-            return (new ChildrenListIterator(this));
-        }
-
-        public ListIterator<UIComponent> listIterator() {
-            return (new ChildrenListIterator(this));
-        }
-
-        public ListIterator<UIComponent> listIterator(int index) {
-            return (new ChildrenListIterator(this, index));
-        }
-
-        public UIComponent remove(int index) {
-            UIComponent child = get(index);
-            super.remove(index);
-            child.setParent(null);
-            return (child);
-        }
-
-        public boolean remove(Object elementObj) {
-            UIComponent element = (UIComponent) elementObj;
-            if (element == null) {
-                throw new NullPointerException();
-            }
-
-            if (super.remove(element)) {
-                element.setParent(null);
-                return (true);
-            } else {
-                return (false);
-            }
-        }
-
-        public boolean removeAll(Collection<?> collection) {
-            boolean result = false;
-            for (Object elements : collection) {
-                if (remove(elements)) {
-                    result = true;
-                }
-            }
-            return (result);
-        }
-
-        public boolean retainAll(Collection<?> collection) {
-            boolean modified = false;
-            Iterator<?> items = iterator();
-            while (items.hasNext()) {
-                if (!collection.contains(items.next())) {
-                    items.remove();
-                    modified = true;
-                }
-            }
-            return (modified);
-        }
-
-        public UIComponent set(int index, UIComponent element) {
-            if (element == null) {
-                throw new NullPointerException();
-            } else if ((index < 0) || (index >= size())) {
-                throw new IndexOutOfBoundsException();
-            } else {
-                eraseParent(element);
-                UIComponent previous = get(index);
-                super.set(index, element);
-                previous.setParent(null);
-                element.setParent(component);
-                return (previous);
-            }
-        }
-    }
-
-
-    // Private implementation of ListIterator for ChildrenList
-    private static class ChildrenListIterator implements ListIterator<UIComponent> {
-
-
-        public ChildrenListIterator(ChildrenList list) {
-            this.list = list;
-            this.index = 0;
-        }
-
-        public ChildrenListIterator(ChildrenList list, int index) {
-            this.list = list;
-            if ((index < 0) || (index > list.size())) {
-                throw new IndexOutOfBoundsException(String.valueOf(index));
-            } else {
-                this.index = index;
-            }
-        }
-
-
-        private ChildrenList list;
-        private int index;
-        private int last = -1; // Index last returned by next() or previous()
-
-        // Iterator methods
-
-        public boolean hasNext() {
-            return (index < list.size());
-        }
-
-        public UIComponent next() {
-            try {
-                UIComponent o = list.get(index);
-                last = index++;
-                return (o);
-            } catch (IndexOutOfBoundsException e) {
-                throw new NoSuchElementException(String.valueOf(index));
-            }
-        }
-
-        public void remove() {
-            if (last == -1) {
-                throw new IllegalStateException();
-            }
-            list.remove(last);
-            if (last < index) {
-                index--;
-            }
-            last = -1;
-        }
-
-        // ListIterator methods
-
-        public void add(UIComponent o) {
-            last = -1;
-            list.add(index++, o);
-        }
-
-        public boolean hasPrevious() {
-            return (index > 1);
-        }
-
-        public int nextIndex() {
-            return (index);
-        }
-
-        public UIComponent previous() {
-            try {
-                int current = index - 1;
-                UIComponent o = list.get(current);
-                last = current;
-                index = current;
-                return (o);
-            } catch (IndexOutOfBoundsException e) {
-                throw new NoSuchElementException();
-            }
-        }
-
-        public int previousIndex() {
-            return (index - 1);
-        }
-
-        public void set(UIComponent o) {
-            if (last == -1) {
-                throw new IllegalStateException();
-            }
-            list.set(last, o);
-        }
-
-    }
-
-
-    // Private implementation of Iterator for getFacetsAndChildren()
-    private final static class FacetsAndChildrenIterator implements Iterator<UIComponent> {
-
-        private Iterator<UIComponent> iterator;
-        private boolean childMode;
-        private UIComponent c;
-
-        public FacetsAndChildrenIterator(UIComponent c) {
-            this.c = c;
-            this.childMode = false;
-        }
-
-        private void update() {
-            if (this.iterator == null) {
-                // we must guarantee that 'iterator' is never null
-                if (this.c.getFacetCount() != 0) {
-                    this.iterator = this.c.getFacets().values().iterator();
-                    this.childMode = false;
-                } else if (this.c.getChildCount() != 0) {
-                    this.iterator = this.c.getChildren().iterator();
-                    this.childMode = true;
-                } else {
-                    this.iterator = EMPTY_ITERATOR;
-                    this.childMode = true;
-                }
-            } else if (!this.childMode
-                    && !this.iterator.hasNext()
-                    && this.c.getChildCount() != 0) {
-                this.iterator = this.c.getChildren().iterator();
-                this.childMode = true;
-            }
-        }
-
-        public boolean hasNext() {
-            this.update();
-            return this.iterator.hasNext();
-        }
-
-        public UIComponent next() {
-            this.update();
-            return this.iterator.next();
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    // Private implementation of Map that supports the functionality
-    // required by UIComponent.getFacets()
-    private static class FacetsMap extends HashMap<String, UIComponent> {
-
-        private UIComponent component;
-
-        public FacetsMap(UIComponent component) {
-            super(3, 1.0f);
-            this.component = component;
-        }
-
-        public void clear() {
-            Iterator<String> keys = keySet().iterator();
-            while (keys.hasNext()) {
-                keys.next();
-                keys.remove();
-            }
-            super.clear();
-        }
-
-        public Set<Map.Entry<String, UIComponent>> entrySet() {
-            return (new FacetsMapEntrySet(this));
-        }
-
-        public Set<String> keySet() {
-            return (new FacetsMapKeySet(this));
-        }
-
-        public UIComponent put(String key, UIComponent value) {
-            if ((key == null) || (value == null)) {
-                throw new NullPointerException();
-            } else //noinspection ConstantConditions
-                if (!(key instanceof String) ||
-                        !(value instanceof UIComponent)) {
-                    throw new ClassCastException();
-                }
-            UIComponent previous = super.get(key);
-            if (previous != null) {
-                previous.setParent(null);
-            }
-            eraseParent(value);
-            UIComponent result = super.put(key, value);
-            value.setParent(component);
-
-            return (result);
-        }
-
-        public void putAll(Map<? extends String, ? extends UIComponent> map) {
-            if (map == null) {
-                throw new NullPointerException();
-            }
-            for (Map.Entry<? extends String, ? extends UIComponent> entry : map.entrySet()) {
-                put(entry.getKey(), entry.getValue());
-            }
-        }
-
-        public UIComponent remove(Object key) {
-            UIComponent previous = get(key);
-            if (previous != null) {
-                previous.setParent(null);
-            }
-            super.remove(key);
-            return (previous);
-        }
-
-        public Collection<UIComponent> values() {
-            return (new FacetsMapValues(this));
-        }
-
-        Iterator<String> keySetIterator() {
-            return ((new ArrayList<String>(super.keySet())).iterator());
-        }
-
-    }
-
-
-    // Private implementation of Set for FacetsMap.getEntrySet()
-    private static class FacetsMapEntrySet extends AbstractSet<Map.Entry<String, UIComponent>> {
-
-        public FacetsMapEntrySet(FacetsMap map) {
-            this.map = map;
-        }
-
-        private FacetsMap map = null;
-
-        public boolean add(Map.Entry<String, UIComponent> o) {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean addAll(Collection<? extends Map.Entry<String, UIComponent>> c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void clear() {
-            map.clear();
-        }
-
-        public boolean contains(Object o) {
-            if (o == null) {
-                throw new NullPointerException();
-            }
-            if (!(o instanceof Map.Entry)) {
-                return (false);
-            }
-            Map.Entry e = (Map.Entry) o;
-            Object k = e.getKey();
-            Object v = e.getValue();
-            if (!map.containsKey(k)) {
-                return (false);
-            }
-            if (v == null) {
-                return (map.get(k) == null);
-            } else {
-                return (v.equals(map.get(k)));
-            }
-        }
-
-        public boolean isEmpty() {
-            return (map.isEmpty());
-        }
-
-        public Iterator<Map.Entry<String, UIComponent>> iterator() {
-            return (new FacetsMapEntrySetIterator(map));
-        }
-
-        public boolean remove(Object o) {
-            if (o == null) {
-                throw new NullPointerException();
-            }
-            if (!(o instanceof Map.Entry)) {
-                return (false);
-            }
-            Object k = ((Map.Entry) o).getKey();
-            if (map.containsKey(k)) {
-                map.remove(k);
-                return (true);
-            } else {
-                return (false);
-            }
-        }
-
-        public boolean removeAll(Collection c) {
-            boolean result = false;
-            for (Object element : c) {
-                if (remove(element)) {
-                    result = true;
-                }
-            }
-            return (result);
-        }
-
-        public boolean retainAll(Collection c) {
-            boolean result = false;
-            Iterator v = iterator();
-            while (v.hasNext()) {
-                if (!c.contains(v.next())) {
-                    v.remove();
-                    result = true;
-                }
-            }
-            return (result);
-        }
-
-        public int size() {
-            return (map.size());
-        }
-
-    }
-
-
-    // Private implementation of Map.Entry for FacetsMapEntrySet
-    private static class FacetsMapEntrySetEntry implements Map.Entry<String, UIComponent> {
-
-        public FacetsMapEntrySetEntry(FacetsMap map, String key) {
-            this.map = map;
-            this.key = key;
-        }
-
-        private FacetsMap map;
-        private String key;
-
-        public boolean equals(Object o) {
-            if (o == null) {
-                return (false);
-            }
-            if (!(o instanceof Map.Entry)) {
-                return (false);
-            }
-            Map.Entry e = (Map.Entry) o;
-            if (key == null) {
-                if (e.getKey() != null) {
-                    return (false);
-                }
-            } else {
-                if (!key.equals(e.getKey())) {
-                    return (false);
-                }
-            }
-            UIComponent v = map.get(key);
-            if (v == null) {
-                if (e.getValue() != null) {
-                    return (false);
-                }
-            } else {
-                if (!v.equals(e.getValue())) {
-                    return (false);
-                }
-            }
-            return (true);
-        }
-
-        public String getKey() {
-            return (key);
-        }
-
-        public UIComponent getValue() {
-            return (map.get(key));
-        }
-
-        public int hashCode() {
-            Object value = map.get(key);
-            return (((key == null) ? 0 : key.hashCode()) ^
-                    ((value == null) ? 0 : value.hashCode()));
-        }
-
-        public UIComponent setValue(UIComponent value) {
-            UIComponent previous = map.get(key);
-            map.put(key, value);
-            return (previous);
-        }
-
-    }
-
-
-    // Private implementation of Set for FacetsMap.getEntrySet().iterator()
-    private static class FacetsMapEntrySetIterator implements Iterator<Map.Entry<String, UIComponent>> {
-
-        public FacetsMapEntrySetIterator(FacetsMap map) {
-            this.map = map;
-            this.iterator = map.keySetIterator();
-        }
-
-        private FacetsMap map = null;
-        private Iterator<String> iterator = null;
-        private Map.Entry<String, UIComponent> last = null;
-
-        public boolean hasNext() {
-            return (iterator.hasNext());
-        }
-
-        public Map.Entry<String, UIComponent> next() {
-            last = new FacetsMapEntrySetEntry(map, iterator.next());
-            return (last);
-        }
-
-        public void remove() {
-            if (last == null) {
-                throw new IllegalStateException();
-            }
-            map.remove(((Map.Entry) last).getKey());
-            last = null;
-        }
-
-    }
-
-
-    // Private implementation of Set for FacetsMap.getKeySet()
-    private static class FacetsMapKeySet extends AbstractSet<String> {
-
-        public FacetsMapKeySet(FacetsMap map) {
-            this.map = map;
-        }
-
-        private FacetsMap map = null;
-
-        public boolean add(String o) {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean addAll(Collection<? extends String> c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void clear() {
-            map.clear();
-        }
-
-        public boolean contains(Object o) {
-            return (map.containsKey(o));
-        }
-
-        public boolean containsAll(Collection c) {
-            for (Object item : c) {
-                if (!map.containsKey(item)) {
-                    return (false);
-                }
-            }
-            return (true);
-        }
-
-        public boolean isEmpty() {
-            return (map.isEmpty());
-        }
-
-        public Iterator<String> iterator() {
-            return (new FacetsMapKeySetIterator(map));
-        }
-
-        public boolean remove(Object o) {
-            if (map.containsKey(o)) {
-                map.remove(o);
-                return (true);
-            } else {
-                return (false);
-            }
-        }
-
-        public boolean removeAll(Collection c) {
-            boolean result = false;
-            for (Object item : c) {
-                if (map.containsKey(item)) {
-                    map.remove(item);
-                    result = true;
-                }
-            }
-            return (result);
-        }
-
-        public boolean retainAll(Collection c) {
-            boolean result = false;
-            Iterator v = iterator();
-            while (v.hasNext()) {
-                if (!c.contains(v.next())) {
-                    v.remove();
-                    result = true;
-                }
-            }
-            return (result);
-        }
-
-        public int size() {
-            return (map.size());
-        }
-
-    }
-
-
-    // Private implementation of Set for FacetsMap.getKeySet().iterator()
-    private static class FacetsMapKeySetIterator implements Iterator<String> {
-
-        public FacetsMapKeySetIterator(FacetsMap map) {
-            this.map = map;
-            this.iterator = map.keySetIterator();
-        }
-
-        private FacetsMap map = null;
-        private Iterator<String> iterator = null;
-        private String last = null;
-
-        public boolean hasNext() {
-            return (iterator.hasNext());
-        }
-
-        public String next() {
-            last = iterator.next();
-            return (last);
-        }
-
-        public void remove() {
-            if (last == null) {
-                throw new IllegalStateException();
-            }
-            map.remove(last);
-            last = null;
-        }
-
-    }
-
-
-    // Private implementation of Collection for FacetsMap.values()
-    private static class FacetsMapValues extends AbstractCollection<UIComponent> {
-
-        public FacetsMapValues(FacetsMap map) {
-            this.map = map;
-        }
-
-        private FacetsMap map;
-
-        public boolean add(UIComponent o) {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean addAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void clear() {
-            map.clear();
-        }
-
-        public boolean isEmpty() {
-            return (map.isEmpty());
-        }
-
-        public Iterator<UIComponent> iterator() {
-            return (new FacetsMapValuesIterator(map));
-        }
-
-        public int size() {
-            return (map.size());
-        }
-
-
-    }
-
-
-    // Private implementation of Iterator for FacetsMap.values().iterator()
-    private static class FacetsMapValuesIterator implements Iterator<UIComponent> {
-
-        public FacetsMapValuesIterator(FacetsMap map) {
-            this.map = map;
-            this.iterator = map.keySetIterator();
-        }
-
-        private FacetsMap map = null;
-        private Iterator<String> iterator = null;
-        private Object last = null;
-
-        public boolean hasNext() {
-            return (iterator.hasNext());
-        }
-
-        public UIComponent next() {
-            last = iterator.next();
-            return (map.get(last));
-        }
-
-        public void remove() {
-            if (last == null) {
-                throw new IllegalStateException();
-            }
-            map.remove(last);
-            last = null;
-        }
-
-    }
-
-    // Private static member class that provide access to Behaviors.
-    // Note that this Map must be unmodifiable to the external world,
-    // but UIComponentBase itself needs to be able to write to the Map.
-    // We solve these requirements wrapping the underlying modifiable
-    // Map inside of a unmodifiable map and providing private access to
-    // the underlying (modifable) Map
-    private static class BehaviorsMap extends AbstractMap<String, List<ClientBehavior>>{
-        private Map<String, List<ClientBehavior>> unmodifiableMap;
-        private Map<String, List<ClientBehavior>> modifiableMap;
-
-        private BehaviorsMap(Map<String, List<ClientBehavior>> modifiableMap) {
-            this.modifiableMap = modifiableMap;
-            this.unmodifiableMap = Collections.unmodifiableMap(modifiableMap);
-        }
-
-        public Set<Entry<String, List<ClientBehavior>>> entrySet() {
-            return unmodifiableMap.entrySet();
-        }
-
-        private Map<String, List<ClientBehavior>> getModifiableMap() {
-            return modifiableMap;
-        }
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIData.java b/jsf-api/src/main/java/javax/faces/component/UIData.java
deleted file mode 100644
index db9dcd0..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIData.java
+++ /dev/null
@@ -1,1950 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitHint;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.FacesEvent;
-import javax.faces.event.FacesListener;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PostValidateEvent;
-import javax.faces.event.PreValidateEvent;
-import javax.faces.model.ArrayDataModel;
-import javax.faces.model.DataModel;
-import javax.faces.model.ListDataModel;
-import javax.faces.model.ResultDataModel;
-import javax.faces.model.ResultSetDataModel;
-import javax.faces.model.ScalarDataModel;
-import javax.servlet.jsp.jstl.sql.Result;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.sql.ResultSet;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Iterator;
-
-
-
-// ------------------------------------------------------------- Private Classes
-// Private class to represent saved state information
-/**
- * <p><strong>UIData</strong> is a {@link UIComponent} that supports data
- * binding to a collection of data objects represented by a {@link DataModel}
- * instance, which is the current value of this component itself (typically
- * established via a {@link ValueExpression}). During iterative processing over
- * the rows of data in the data model, the object for the current row is exposed
- * as a request attribute under the key specified by the <code>var</code>
- * property.</p>
- * <p/>
- * <p>Only children of type {@link UIColumn} should be processed by renderers
- * associated with this component.</p>
- * <p/>
- * <p>By default, the <code>rendererType</code> property is set to
- * <code>javax.faces.Table</code>.  This value can be changed by calling the
- * <code>setRendererType()</code> method.</p>
- */
-
-public class UIData extends UIComponentBase
-      implements NamingContainer, UniqueIdVendor {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Data";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Data";
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIData} instance with default property
-     * values.</p>
-     */
-    public UIData() {
-
-        super();
-        setRendererType("javax.faces.Table");
-
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    /**
-     * Properties that are tracked by state saving.
-     */
-    enum PropertyKeys {
-        /**
-         * <p>The first row number (zero-relative) to be displayed.</p>
-         */
-        first,
-
-        /**
-         * <p>The zero-relative index of the current row number, or -1 for no
-         * current row association.</p>
-         */
-        rowIndex,
-
-        /**
-         * <p>The number of rows to display, or zero for all remaining rows in the
-         * table.</p>
-         */
-        rows,
-
-        /**
-         * <p>This map contains <code>SavedState</code> instances for each
-         * descendant component, keyed by the client identifier of the descendant.
-         * Because descendant client identifiers will contain the
-         * <code>rowIndex</code> value of the parent, per-row state information is
-         * actually preserved.</p>
-         */
-        saved,
-
-        /**
-         * <p>The local value of this {@link UIComponent}.</p>
-         */
-        value,
-
-        /**
-         * <p>The request scope attribute under which the data object for the
-         * current row will be exposed when iterating.</p>
-         */
-        var,
-
-        /**
-         * <p>Last id vended by {@link UIData#createUniqueId(javax.faces.context.FacesContext, String)}.</p>
-         */
-        lastId
-    }
-
-
-    /**
-     * <p>The {@link DataModel} associated with this component, lazily
-     * instantiated if requested.  This object is not part of the saved and
-     * restored state of the component.</p>
-     */
-    private DataModel model = null;
-
-
-    /**
-     * <p> During iteration through the rows of this table, This ivar is used to
-     * store the previous "var" value for this instance.  When the row iteration
-     * is complete, this value is restored to the request map.
-     */
-    private Object oldVar;
-
-
-    /**
-     * <p>Holds the base client ID that will be used to generate per-row
-     * client IDs (this will be null if this UIData is nested within another).</p>
-     *
-     * <p>This is not part of the component state.</p>
-     */
-    private String baseClientId = null;
-
-
-    /**
-     * <p> Length of the cached <code>baseClientId</code> plus one for
-     * the {@link UINamingContainer#getSeparatorChar}. </p>
-     *
-     * <p>This is not part of the component state.</p>
-     */
-    private int baseClientIdLength;
-
-
-    /**
-     * <p>StringBuilder used to build per-row client IDs.</p>
-     *
-     * <p>This is not part of the component state.</p>
-     */
-    private StringBuilder clientIdBuilder = null;
-
-
-    /**
-     * <p>Flag indicating whether or not this UIData instance is nested
-     * within another UIData instance</p>
-     *
-     * <p>This is not part of the component state.</p>
-     */
-    private Boolean isNested = null;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the zero-relative row number of the first row to be
-     * displayed.</p>
-     */
-    public int getFirst() {
-
-        return (Integer) getStateHelper().eval(PropertyKeys.first, 0);
-
-    }
-
-
-    /**
-     * <p>Set the zero-relative row number of the first row to be
-     * displayed.</p>
-     *
-     * @param first New first row number
-     *
-     * @throws IllegalArgumentException if <code>first</code> is negative
-     */
-    public void setFirst(int first) {
-
-        if (first < 0) {
-            throw new IllegalArgumentException(String.valueOf(first));
-        }
-        getStateHelper().put(PropertyKeys.first, first);
-
-    }
-
-
-    /**
-     * <p>Return the footer facet of this component (if any).  A convenience
-     * method for <code>getFacet("footer")</code>.</p>
-     */
-    public UIComponent getFooter() {
-
-        return getFacet("footer");
-
-    }
-
-
-    /**
-     * <p>Set the footer facet of this component.  A convenience method for
-     * <code>getFacets().put("footer", footer)</code>.</p>
-     *
-     * @param footer the new footer facet
-     *
-     * @throws NullPointerException if <code>footer</code> is <code>null</code>
-     */
-    public void setFooter(UIComponent footer) {
-
-        getFacets().put("footer", footer);
-
-    }
-
-
-    /**
-     * <p>Return the header facet of this component (if any).  A convenience
-     * method for <code>getFacet("header")</code>.</p>
-     */
-    public UIComponent getHeader() {
-
-        return getFacet("header");
-
-    }
-
-
-    /**
-     * <p>Set the header facet of this component.  A convenience method for
-     * <code>getFacets().put("header", header)</code>.</p>
-     *
-     * @param header the new header facet
-     *
-     * @throws NullPointerException if <code>header</code> is <code>null</code>
-     */
-    public void setHeader(UIComponent header) {
-
-        getFacets().put("header", header);
-
-    }
-
-
-    /**
-     * <p>Return a flag indicating whether there is <code>rowData</code>
-     * available at the current <code>rowIndex</code>.  If no
-     * <code>wrappedData</code> is available, return <code>false</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row availability
-     */
-    public boolean isRowAvailable() {
-
-        return (getDataModel().isRowAvailable());
-
-    }
-
-
-    /**
-     * <p>Return the number of rows in the underlying data model.  If the number
-     * of available rows is unknown, return -1.</p>
-     *
-     * @throws FacesException if an error occurs getting the row count
-     */
-    public int getRowCount() {
-
-        return (getDataModel().getRowCount());
-
-    }
-
-
-    /**
-     * <p>Return the data object representing the data for the currently
-     * selected row index, if any.</p>
-     *
-     * @throws FacesException           if an error occurs getting the row data
-     * @throws IllegalArgumentException if now row data is available at the
-     *                                  currently specified row index
-     */
-    public Object getRowData() {
-
-        return (getDataModel().getRowData());
-
-    }
-
-
-    /**
-     * <p>Return the zero-relative index of the currently selected row.  If we
-     * are not currently positioned on a row, return -1.  This property is
-     * <strong>not</strong> enabled for value binding expressions.</p>
-     *
-     * @throws FacesException if an error occurs getting the row index
-     */
-    public int getRowIndex() {
-
-        return (Integer) getStateHelper().eval(PropertyKeys.rowIndex, -1);
-
-    }
-
-
-    /**
-     * <p>Set the zero relative index of the current row, or -1 to indicate that
-     * no row is currently selected, by implementing the following algorithm.
-     * It is possible to set the row index at a value for which the underlying
-     * data collection does not contain any row data.  Therefore, callers may
-     * use the <code>isRowAvailable()</code> method to detect whether row data
-     * will be available for use by the <code>getRowData()</code> method.</p>
-     *</p>
-     * <ul>
-     * <li>Save current state information for all descendant components (as
-     *     described below).
-     * <li>Store the new row index, and pass it on to the {@link DataModel}
-     *     associated with this {@link UIData} instance.</li>
-     * <li>If the new <code>rowIndex</code> value is -1:
-     *     <ul>
-     *     <li>If the <code>var</code> property is not null,
-     *         remove the corresponding request scope attribute (if any).</li>
-     *     <li>Reset the state information for all descendant components
-     *         (as described below).</li>
-     *     </ul></li>
-     * <li>If the new <code>rowIndex</code> value is not -1:
-     *     <ul>
-     *     <li>If the <code>var</code> property is not null, call
-     *         <code>getRowData()</code> and expose the resulting data object
-     *         as a request scope attribute whose key is the <code>var</code>
-     *         property value.</li>
-     *     <li>Reset the state information for all descendant components
-     *         (as described below).
-     *     </ul></li>
-     * </ul>
-     *
-     * <p>To save current state information for all descendant components,
-     * {@link UIData} must maintain per-row information for each descendant
-     * as follows:<p>
-     * <ul>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>, save
-     *     the state of its <code>localValue</code> property.</li>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
-     *     save the state of the <code>localValueSet</code> property.</li>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>, save
-     *     the state of the <code>valid</code> property.</li>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
-     *     save the state of the <code>submittedValue</code> property.</li>
-     * </ul>
-     *
-     * <p>To restore current state information for all descendant components,
-     * {@link UIData} must reference its previously stored information for the
-     * current <code>rowIndex</code> and call setters for each descendant
-     * as follows:</p>
-     * <ul>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
-     *     restore the <code>value</code> property.</li>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
-     *     restore the state of the <code>localValueSet</code> property.</li>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
-     *     restore the state of the <code>valid</code> property.</li>
-     * <li>If the descendant is an instance of <code>EditableValueHolder</code>,
-     *     restore the state of the <code>submittedValue</code> property.</li>
-     * </ul>
-     *
-     * @param rowIndex The new row index value, or -1 for no associated row
-     *
-     * @throws FacesException if an error occurs setting the row index
-     * @throws IllegalArgumentException if <code>rowIndex</code>
-     *  is less than -1
-     */
-    public void setRowIndex(int rowIndex) {
-
-        // Save current state for the previous row index
-        saveDescendantState();
-
-        // Update to the new row index        
-        //this.rowIndex = rowIndex;
-        getStateHelper().put(PropertyKeys.rowIndex, rowIndex);
-        DataModel localModel = getDataModel();
-        localModel.setRowIndex(rowIndex);
-        
-        // if rowIndex is -1, clear the cache
-        if (rowIndex == -1) {
-            setDataModel(null);
-        }
-        
-        // Clear or expose the current row data as a request scope attribute
-        String var = (String) getStateHelper().get(PropertyKeys.var);
-        if (var != null) {
-            Map<String, Object> requestMap =
-                  getFacesContext().getExternalContext().getRequestMap();
-            if (rowIndex == -1) {
-                oldVar = requestMap.remove(var);
-            } else if (isRowAvailable()) {
-                requestMap.put(var, getRowData());
-            } else {
-                requestMap.remove(var);
-                if (null != oldVar) {
-                    requestMap.put(var, oldVar);
-                    oldVar = null;
-                }
-            }
-        }
-
-        // Reset current state information for the new row index
-        restoreDescendantState();
-
-    }
-
-
-    /**
-     * <p>Return the number of rows to be displayed, or zero for all remaining
-     * rows in the table.  The default value of this property is zero.</p>
-     */
-    public int getRows() {
-
-
-        return (Integer) getStateHelper().eval(PropertyKeys.rows, 0);
-
-    }
-
-
-    /**
-     * <p>Set the number of rows to be displayed, or zero for all remaining rows
-     * in the table.</p>
-     *
-     * @param rows New number of rows
-     *
-     * @throws IllegalArgumentException if <code>rows</code> is negative
-     */
-    public void setRows(int rows) {
-
-        if (rows < 0) {
-            throw new IllegalArgumentException(String.valueOf(rows));
-        }
-        getStateHelper().put(PropertyKeys.rows, rows);
-
-    }
-
-
-    /**
-     * <p>Return the request-scope attribute under which the data object for the
-     * current row will be exposed when iterating.  This property is
-     * <strong>not</strong> enabled for value binding expressions.</p>
-     */
-    public String getVar() {
-
-        return (String) getStateHelper().get(PropertyKeys.var);
-
-    }
-
-
-    /**
-     * <p>Set the request-scope attribute under which the data object for the
-     * current row wil be exposed when iterating.</p>
-     *
-     * @param var The new request-scope attribute name
-     */
-    public void setVar(String var) {
-
-        getStateHelper().put(PropertyKeys.var, var);
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-
-
-    /**
-     * <p>Return the value of the UIData.  This value must either be
-     * be of type {@link DataModel}, or a type that can be adapted
-     * into a {@link DataModel}.  <code>UIData</code> will automatically
-     * adapt the following types:</p>
-     * <ul>
-     * <li>Arrays</li>
-     * <li><code>java.util.List</code></li>
-     * <li><code>java.sql.ResultSet</code></li>
-     * <li><code>javax.servlet.jsp.jstl.sql.Result</code></li>
-     * </ul>
-     * <p>All other types will be adapted using the {@link ScalarDataModel}
-     * class, which will treat the object as a single row of data.</p>
-     */
-    public Object getValue() {
-
-        return getStateHelper().eval(PropertyKeys.value);
-
-    }
-
-
-    /**
-     * <p>Set the value of the <code>UIData</code>.  This value must either be
-     * be of type {@link DataModel}, or a type that can be adapted into a {@link
-     * DataModel}.</p>
-     *
-     * @param value the new value
-     */
-    public void setValue(Object value) {
-        setDataModel(null);
-        getStateHelper().put(PropertyKeys.value, value);
-
-    }
-
-    // ----------------------------------------------------- UIComponent Methods
-
-
-    /**
-     * <p>If "name" is something other than "value", "var", or "rowIndex", rely
-     * on the superclass conversion from <code>ValueBinding</code> to
-     * <code>ValueExpression</code>.</p>
-     *
-     * @param name    Name of the attribute or property for which to set a
-     *                {@link ValueBinding}
-     * @param binding The {@link ValueBinding} to set, or <code>null</code> to
-     *                remove any currently set {@link ValueBinding}
-     *
-     * @throws IllegalArgumentException if <code>name</code> is one of
-     *                                  <code>id</code>, <code>parent</code>,
-     *                                  <code>var</code>, or <code>rowIndex</code>
-     * @throws NullPointerException     if <code>name</code> is <code>null</code>
-     * @deprecated This has been replaced by {@link #setValueExpression(java.lang.String,
-     *javax.el.ValueExpression)}.
-     */
-    public void setValueBinding(String name, ValueBinding binding) {
-
-        if ("value".equals(name)) {
-            setDataModel(null);
-        } else if ("var".equals(name) || "rowIndex".equals(name)) {
-            throw new IllegalArgumentException();
-        }
-        super.setValueBinding(name, binding);
-
-    }
-
-    /**
-     * <p>Set the {@link ValueExpression} used to calculate the value for the
-     * specified attribute or property name, if any.  In addition, if a {@link
-     * ValueExpression} is set for the <code>value</code> property, remove any
-     * synthesized {@link DataModel} for the data previously bound to this
-     * component.</p>
-     *
-     * @param name    Name of the attribute or property for which to set a
-     *                {@link ValueExpression}
-     * @param binding The {@link ValueExpression} to set, or <code>null</code>
-     *                to remove any currently set {@link ValueExpression}
-     *
-     * @throws IllegalArgumentException if <code>name</code> is one of
-     *                                  <code>id</code>, <code>parent</code>,
-     *                                  <code>var</code>, or <code>rowIndex</code>
-     * @throws NullPointerException     if <code>name</code> is <code>null</code>
-     * @since 1.2
-     */
-    public void setValueExpression(String name, ValueExpression binding) {
-
-        if ("value".equals(name)) {
-            this.model = null;
-        } else if ("var".equals(name) || "rowIndex".equals(name)) {
-            throw new IllegalArgumentException();
-        }
-        super.setValueExpression(name, binding);
-
-    }
-
-    /**
-     * <p>Return a client identifier for this component that includes the
-     * current value of the <code>rowIndex</code> property, if it is not set to
-     * -1.  This implies that multiple calls to <code>getClientId()</code> may
-     * return different results, but ensures that child components can
-     * themselves generate row-specific client identifiers (since {@link UIData}
-     * is a {@link NamingContainer}).</p>
-     *
-     * @throws NullPointerException if <code>context</code> is <code>null</code>
-     */
-    public String getClientId(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // If baseClientId and clientIdBuilder are both null, this is the
-        // first time that getClientId() has been called.
-        // If we're not nested within another UIData, then:
-        //   - create a new StringBuilder assigned to clientIdBuilder containing
-        //   our client ID.
-        //   - toString() the builder - this result will be our baseClientId
-        //     for the duration of the component
-        //   - append UINamingContainer.getSeparatorChar() to the builder
-        //  If we are nested within another UIData, then:
-        //   - create an empty StringBuilder that will be used to build
-        //     this instance's ID
-        if (baseClientId == null && clientIdBuilder == null) {
-            if (!isNestedWithinUIData()) {
-                clientIdBuilder = new StringBuilder(super.getClientId(context));
-                baseClientId = clientIdBuilder.toString();
-                baseClientIdLength = (baseClientId.length() + 1);
-                clientIdBuilder.append(UINamingContainer.getSeparatorChar(context));
-                clientIdBuilder.setLength(baseClientIdLength);
-            } else {
-                clientIdBuilder = new StringBuilder();
-            }
-        }
-        int rowIndex = getRowIndex();
-        if (rowIndex >= 0) {
-            String cid;
-            if (!isNestedWithinUIData()) {
-                // we're not nested, so the clientIdBuilder is already
-                // primed with clientID +
-                // UINamingContainer.getSeparatorChar().  Append the
-                // current rowIndex, and toString() the builder.  reset
-                // the builder to it's primed state.
-                cid = clientIdBuilder.append(rowIndex).toString();
-                clientIdBuilder.setLength(baseClientIdLength);
-            } else {
-                // we're nested, so we have to build the ID from scratch
-                // each time.  Reuse the same clientIdBuilder instance
-                // for each call by resetting the length to 0 after
-                // the ID has been computed.
-                cid = clientIdBuilder.append(super.getClientId(context))
-                      .append(UINamingContainer.getSeparatorChar(context)).append(rowIndex)
-                      .toString();
-                clientIdBuilder.setLength(0);
-            }
-            return (cid);
-        } else {
-            if (!isNestedWithinUIData()) {
-                // Not nested and no row available, so just return our baseClientId
-                return (baseClientId);
-            } else {
-                // nested and no row available, return the result of getClientId().
-                // this is necessary as the client ID will reflect the row that
-                // this table represents
-                return super.getClientId(context);
-            }
-        }
-
-    }
-
-    /**
-     * <p>Override behavior from {@link
-     * UIComponentBase#invokeOnComponent} to provide special care for
-     * positioning the data properly before finding the component and
-     * invoking the callback on it.  If the argument
-     * <code>clientId</code> is equal to <code>this.getClientId()</code>
-     * simply invoke the <code>contextCallback</code>, passing the
-     * <code>context</code> argument and <b>this</b> as arguments, and
-     * return <code>true.</code> If the argument <code>clientId</code>
-     * is not equal to <code>this.getClientId()</code>, inspect each of
-     * the facet children of this <code>UIData</code> instance and for
-     * each one, compare its <code>clientId</code> with the argument
-     * <code>clientId</code>.  If there is a match, invoke the
-     * <code>contextCallback</code>, passing the <code>context</code>
-     * argument and <b>this</b> as arguments, and return
-     * <code>true</code>. Otherwise, attempt to extract a rowIndex from
-     * the <code>clientId</code>.  For example, if the argument
-     * <code>clientId</code> was <code>form:data:3:customerHeader</code>
-     * the rowIndex would be <code>3</code>.  Let this value be called
-     * <code>newIndex</code>. The current rowIndex of this instance must
-     * be saved aside and restored before returning in all cases,
-     * regardless of the outcome of the search or if any exceptions are
-     * thrown in the process.</p>
-     *
-     * <p>The implementation of this method must never return <code>true</code>
-     * if setting the rowIndex of this instance to be equal to
-     * <code>newIndex</code> causes this instance to return <code>false</code>
-     * from {@link #isRowAvailable}.</p>
-     *
-     * @throws NullPointerException {@inheritDoc}
-     * @throws FacesException       {@inheritDoc}  Also throws <code>FacesException</code>
-     *                              if any exception is thrown when deriving the
-     *                              rowIndex from the argument <code>clientId</code>.
-     * @since 1.2
-     */
-    public boolean invokeOnComponent(FacesContext context, String clientId,
-                                     ContextCallback callback)
-          throws FacesException {
-        if (null == context || null == clientId || null == callback) {
-            throw new NullPointerException();
-        }
-
-        String myId = super.getClientId(context);
-        boolean found = false;
-        if (clientId.equals(myId)) {
-            try {
-                callback.invokeContextCallback(context, this);
-                return true;
-            }
-            catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-
-        // check the facets, if any, of UIData
-        if (this.getFacetCount() > 0) {
-            for (UIComponent c : this.getFacets().values()) {
-                if (clientId.equals(c.getClientId(context))) {
-                    callback.invokeContextCallback(context, c);
-                    return true;
-                }
-            }
-        }
-
-        // check column level facets, if any
-        if (this.getChildCount() > 0) {
-            for (UIComponent column : this.getChildren()) {
-                if (column instanceof UIColumn) {
-                    if (column.getFacetCount() > 0) {
-                        for (UIComponent facet : column.getFacets().values()) {
-                            if (facet.invokeOnComponent(context, clientId, callback)) {
-                                return true;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        int lastSep, newRow, savedRowIndex = this.getRowIndex();
-        try {
-            char sepChar = UINamingContainer.getSeparatorChar(context);
-            // If we need to strip out the rowIndex from our id
-            // PENDING(edburns): is this safe with respect to I18N?
-            if (myId.endsWith(sepChar + Integer.toString(savedRowIndex, 10))) {
-                lastSep = myId.lastIndexOf(sepChar);
-                assert (-1 != lastSep);
-                myId = myId.substring(0, lastSep);
-            }
-
-            // myId will be something like form:outerData for a non-nested table,
-            // and form:outerData:3:data for a nested table.
-            // clientId will be something like form:outerData:3:outerColumn
-            // for a non-nested table.  clientId will be something like
-            // outerData:3:data:3:input for a nested table.
-            if (clientId.startsWith(myId)) {
-                int preRowIndexSep, postRowIndexSep;
-
-                if (-1 != (preRowIndexSep =
-                      clientId.indexOf(sepChar,
-                                       myId.length()))) {
-                    // Check the length
-                    if (++preRowIndexSep < clientId.length()) {
-                        if (-1 != (postRowIndexSep =
-                              clientId.indexOf(sepChar,
-                                               preRowIndexSep + 1))) {
-                            try {
-                                newRow = Integer
-                                      .valueOf(clientId.substring(preRowIndexSep,
-                                                                  postRowIndexSep))
-                                      .intValue();
-                            } catch (NumberFormatException ex) {
-                                // PENDING(edburns): I18N
-                                String message =
-                                      "Trying to extract rowIndex from clientId \'"
-                                      +
-                                      clientId
-                                      + "\' "
-                                      + ex.getMessage();
-                                throw new NumberFormatException(message);
-                            }
-                            this.setRowIndex(newRow);
-                            if (this.isRowAvailable()) {
-                                found = super.invokeOnComponent(context,
-                                                                clientId,
-                                                                callback);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        catch (FacesException fe) {
-            throw fe;
-        }
-        catch (Exception e) {
-            throw new FacesException(e);
-        }
-        finally {
-            this.setRowIndex(savedRowIndex);
-        }
-        return found;
-    }
-
-
-    /**
-     * <p>Override the default {@link UIComponentBase#queueEvent} processing to
-     * wrap any queued events in a wrapper so that we can reset the current row
-     * index in <code>broadcast()</code>.</p>
-     *
-     * @param event {@link FacesEvent} to be queued
-     *
-     * @throws IllegalStateException if this component is not a descendant of a
-     *                               {@link UIViewRoot}
-     * @throws NullPointerException  if <code>event</code> is <code>null</code>
-     */
-    public void queueEvent(FacesEvent event) {
-
-        super.queueEvent(new WrapperEvent(this, event, getRowIndex()));
-
-    }
-
-
-    /**
-     * <p>Override the default {@link UIComponentBase#broadcast} processing to
-     * unwrap any wrapped {@link FacesEvent} and reset the current row index,
-     * before the event is actually broadcast.  For events that we did not wrap
-     * (in <code>queueEvent()</code>), default processing will occur.</p>
-     *
-     * @param event The {@link FacesEvent} to be broadcast
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *                                  implementation that no further
-     *                                  processing on the current event should
-     *                                  be performed
-     * @throws IllegalArgumentException if the implementation class of this
-     *                                  {@link FacesEvent} is not supported by
-     *                                  this component
-     * @throws NullPointerException     if <code>event</code> is <code>null</code>
-     */
-    public void broadcast(FacesEvent event)
-          throws AbortProcessingException {
-
-        if (!(event instanceof WrapperEvent)) {
-            super.broadcast(event);
-            return;
-        }
-        FacesContext context = FacesContext.getCurrentInstance();
-        // Set up the correct context and fire our wrapped event
-        WrapperEvent revent = (WrapperEvent) event;
-        if (isNestedWithinUIData()) {
-            setDataModel(null);
-        }
-        int oldRowIndex = getRowIndex();
-        setRowIndex(revent.getRowIndex());
-        FacesEvent rowEvent = revent.getFacesEvent();
-        UIComponent source = rowEvent.getComponent();
-        UIComponent compositeParent = null;
-        try {
-            if (!UIComponent.isCompositeComponent(source)) {
-                compositeParent = UIComponent.getCompositeComponentParent(source);
-            }
-            if (compositeParent != null) {
-                compositeParent.pushComponentToEL(context, null);
-            }
-            source.pushComponentToEL(context, null);
-            source.broadcast(rowEvent);
-        } finally {
-            source.popComponentFromEL(context);
-            if (compositeParent != null) {
-                compositeParent.popComponentFromEL(context);
-            }
-        }
-        setRowIndex(oldRowIndex);
-
-    }
-
-    /**
-     * <p>In addition to the default behavior, ensure that any saved per-row
-     * state for our child input components is discarded unless it is needed to
-     * rerender the current page with errors.
-     *
-     * @param context FacesContext for the current request
-     *
-     * @throws IOException          if an input/output error occurs while
-     *                              rendering
-     * @throws NullPointerException if <code>context</code> is <code>null</code>
-     */
-    public void encodeBegin(FacesContext context) throws IOException {
-
-        preEncode(context);
-        super.encodeBegin(context);
-
-    }
-
-
-    /**
-     * <p>Override the default {@link UIComponentBase#processDecodes} processing
-     * to perform the following steps.</p> <ul> <li>If the <code>rendered</code>
-     * property of this {@link UIComponent} is <code>false</code>, skip further
-     * processing.</li> <li>Set the current <code>rowIndex</code> to -1.</li>
-     * <li>Call the <code>processDecodes()</code> method of all facets of this
-     * {@link UIData}, in the order determined by a call to
-     * <code>getFacets().keySet().iterator()</code>.</li> <li>Call the
-     * <code>processDecodes()</code> method of all facets of the {@link
-     * UIColumn} children of this {@link UIData}.</li> <li>Iterate over the set
-     * of rows that were included when this component was rendered (i.e. those
-     * defined by the <code>first</code> and <code>rows</code> properties),
-     * performing the following processing for each row: <ul> <li>Set the
-     * current <code>rowIndex</code> to the appropriate value for this row.</li>
-     * <li>If <code>isRowAvailable()</code> returns <code>true</code>, iterate
-     * over the children components of each {@link UIColumn} child of this
-     * {@link UIData} component, calling the <code>processDecodes()</code>
-     * method for each such child.</li> </ul></li> <li>Set the current
-     * <code>rowIndex</code> to -1.</li> <li>Call the <code>decode()</code>
-     * method of this component.</li> <li>If a <code>RuntimeException</code> is
-     * thrown during decode processing, call {@link FacesContext#renderResponse}
-     * and re-throw the exception.</li> </ul>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws NullPointerException if <code>context</code> is <code>null</code>
-     */
-    public void processDecodes(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!isRendered()) {
-            return;
-        }
-
-        pushComponentToEL(context, this);
-        preDecode(context);
-        iterate(context, PhaseId.APPLY_REQUEST_VALUES);
-        decode(context);
-        popComponentFromEL(context);
-
-    }
-
-
-    /**
-     * <p>Override the default {@link UIComponentBase#processValidators}
-     * processing to perform the following steps.</p> <ul> <li>If the
-     * <code>rendered</code> property of this {@link UIComponent} is
-     * <code>false</code>, skip further processing.</li> <li>Set the current
-     * <code>rowIndex</code> to -1.</li> <li>Call the <code>processValidators()</code>
-     * method of all facets of this {@link UIData}, in the order determined by a
-     * call to <code>getFacets().keySet().iterator()</code>.</li> <li>Call the
-     * <code>processValidators()</code> method of all facets of the {@link
-     * UIColumn} children of this {@link UIData}.</li> <li>Iterate over the set
-     * of rows that were included when this component was rendered (i.e. those
-     * defined by the <code>first</code> and <code>rows</code> properties),
-     * performing the following processing for each row: <ul> <li>Set the
-     * current <code>rowIndex</code> to the appropriate value for this row.</li>
-     * <li>If <code>isRowAvailable()</code> returns <code>true</code>, iterate
-     * over the children components of each {@link UIColumn} child of this
-     * {@link UIData} component, calling the <code>processValidators()</code>
-     * method for each such child.</li> </ul></li> <li>Set the current
-     * <code>rowIndex</code> to -1.</li> </ul>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws NullPointerException if <code>context</code> is <code>null</code>
-     */
-    public void processValidators(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!isRendered()) {
-            return;
-        }
-        pushComponentToEL(context, this);
-        Application app = context.getApplication();
-        app.publishEvent(context, PreValidateEvent.class, this);
-        preValidate(context);
-        iterate(context, PhaseId.PROCESS_VALIDATIONS);
-        app.publishEvent(context, PostValidateEvent.class, this);
-        popComponentFromEL(context);
-
-    }
-
-
-    /**
-     * <p>Override the default {@link UIComponentBase#processUpdates}
-     * processing to perform the following steps.</p>
-     * <ul>
-     * <li>If the <code>rendered</code> property of this {@link UIComponent}
-     *     is <code>false</code>, skip further processing.</li>
-     * <li>Set the current <code>rowIndex</code> to -1.</li>
-     * <li>Call the <code>processUpdates()</code> method of all facets
-     *     of this {@link UIData}, in the order determined
-     *     by a call to <code>getFacets().keySet().iterator()</code>.</li>
-     * <li>Call the <code>processUpdates()</code> method of all facets
-     *     of the {@link UIColumn} children of this {@link UIData}.</li>
-     * <li>Iterate over the set of rows that were included when this
-     *     component was rendered (i.e. those defined by the <code>first</code>
-     *     and <code>rows</code> properties), performing the following
-     *     processing for each row:
-     *     <ul>
-     *     <li>Set the current <code>rowIndex</code> to the appropriate
-     *         value for this row.</li>
-     *     <li>If <code>isRowAvailable()</code> returns <code>true</code>,
-     *         iterate over the children components of each {@link UIColumn}
-     *         child of this {@link UIData} component, calling the
-     *         <code>processUpdates()</code> method for each such child.</li>
-     *     </ul></li>
-     * <li>Set the current <code>rowIndex</code> to -1.</li>
-     * </ul>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws NullPointerException if <code>context</code> is <code>null</code>
-     */
-    public void processUpdates(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!isRendered()) {
-            return;
-        }
-
-        pushComponentToEL(context, this);
-        preUpdate(context);
-        iterate(context, PhaseId.UPDATE_MODEL_VALUES);
-        popComponentFromEL(context);
-        // This is not a EditableValueHolder, so no further processing is required
-
-    }
-
-    public String createUniqueId(FacesContext context, String seed) {
-        Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
-        int lastId = ((i != null) ? i : 0);
-        getStateHelper().put(PropertyKeys.lastId,  ++lastId);
-        return UIViewRoot.UNIQUE_ID_PREFIX + (seed == null ? lastId : seed);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Override the behavior in {@link
-     * UIComponent#visitTree} to handle iteration correctly.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * <p>If the {@link UIComponent#isVisitable} method of this instance
-     * returns <code>false</code>, take no action and return.</p>
-
-     * <p>Call {@link UIComponent#pushComponentToEL} and
-     * invoke the visit callback on this <code>UIData</code> instance as
-     * described in {@link UIComponent#visitTree}.  Let the result of
-     * the invoctaion be <em>visitResult</em>.  If <em>visitResult</em>
-     * is {@link VisitResult#COMPLETE}, take no further action and
-     * return <code>true</code>.  Otherwise, determine if we need to
-     * visit our children.  The default implementation calls {@link
-     * VisitContext#getSubtreeIdsToVisit} passing <code>this</code> as
-     * the argument.  If the result of that call is non-empty, let
-     * <em>doVisitChildren</em> be <code>true</code>.  If
-     * <em>doVisitChildren</em> is <code>true</code> and
-     * <em>visitResult</em> is {@link VisitResult#ACCEPT}, take the
-     * following action.<p>
-
-     * <ul>
-
-     * 	  <li><p>If this component has facets, call {@link
-     * 	  UIComponent#getFacets} on this instance and invoke the
-     * 	  <code>values()</code> method.  For each
-     * 	  <code>UIComponent</code> in the returned <code>Map</code>,
-     * 	  call {@link UIComponent#visitTree}.</p></li>
-
-     * 	  <li><p>If this component has children, for each 
-     * 	  <code>UIColumn</code> child:</p>
-     * 
-     *    <p>Call {@link VisitContext#invokeVisitCallback} on that 
-          <code>UIColumn</code> instance.
-     *    If such a call returns <code>true</code>, terminate visiting and 
-          return <code>true</code> from this method.</p>
-     * 
-     *    <p>If the child <code>UIColumn</code> has facets, call
-     *    {@link UIComponent#visitTree} on each one.</p>
-     *
-     *    <p>Take no action on non-<code>UIColumn</code> children.</p></li>
-     *
-     *    <li><p>Save aside the result of a call to {@link
-     *    #getRowIndex}.</p>
-
-     *    <p>For each child component of this <code>UIData</code> that is
-     *    also an instance of {@link UIColumn}, 
-     *    </p>
-
-     * 	  <p>Iterate over the rows.</p>
-
-     * <ul>
-
-     * 	  <li><p>Let <em>rowsToProcess</em> be the return from {@link
-     * 	  #getRows}.  </p></li>
-
-     * 	  <li><p>Let <em>rowIndex</em> be the return from {@link
-     * 	  #getFirst} - 1.</p></li>
-
-     * 	  <li><p>While the number of rows processed is less than
-     * 	  <em>rowsToProcess</em>, take the following actions.</p>
-
-     * <p>Call {@link #setRowIndex}, passing the current row index.</p>
-
-     * <p>If {@link #isRowAvailable} returns <code>false</code>, take no
-     * further action and return <code>false</code>.</p>
-     *
-     * <p>Call {@link UIComponent#visitTree} on each of the children of this
-     * <code>UIColumn</code> instance.</p>
-
-     *     </li>
-
-     * </ul>
-
-     *    </li>
-
-     * </ul>
-
-     * <p>Call {@link #popComponentFromEL} and restore the saved row
-     * index with a call to {@link #setRowIndex}.</p>
-
-     * <p>Return <code>false</code> to allow the visiting to
-     * continue.</p>
-
-     * </div>
-     *
-     * @param context the <code>VisitContext</code> that provides
-     * context for performing the visit.
-     *
-     * @param callback the callback to be invoked for each node
-     * encountered in the visit.
-
-     * @throws NullPointerException if any of the parameters are
-     * <code>null</code>.
-
-     * 
-     */
-    @Override
-    public boolean visitTree(VisitContext context, 
-                             VisitCallback callback) {
-
-        // First check to see whether we are visitable.  If not
-        // short-circuit out of this subtree, though allow the
-        // visit to proceed through to other subtrees.
-        if (!isVisitable(context))
-            return false;
-
-        FacesContext facesContext = context.getFacesContext();
-        // NOTE: that the visitRows local will be obsolete once the
-        //       appropriate visit hints have been added to the API
-        boolean visitRows = requiresRowIteration(facesContext);
-
-        // Clear out the row index is one is set so that
-        // we start from a clean slate.
-        int oldRowIndex = -1;
-        if (visitRows) {
-            oldRowIndex = getRowIndex();
-            setRowIndex(-1);
-        }
-
-        // Push ourselves to EL
-        pushComponentToEL(facesContext, null);
-
-        try {
-
-            // Visit ourselves.  Note that we delegate to the 
-            // VisitContext to actually perform the visit.
-            VisitResult result = context.invokeVisitCallback(this, callback);
-
-            // If the visit is complete, short-circuit out and end the visit
-            if (result == VisitResult.COMPLETE)
-                return true;
-
-            // Visit children, short-circuiting as necessary
-            // NOTE: that the visitRows parameter will be obsolete once the
-            //       appropriate visit hints have been added to the API
-            if ((result == VisitResult.ACCEPT) && doVisitChildren(context, visitRows)) {
-
-                // First visit facets
-                // NOTE: that the visitRows parameter will be obsolete once the
-                //       appropriate visit hints have been added to the API
-                if (visitFacets(context, callback, visitRows))
-                    return true;
-
-                // Next column facets
-                // NOTE: that the visitRows parameter will be obsolete once the
-                //       appropriate visit hints have been added to the API
-                if (visitColumnsAndColumnFacets(context, callback, visitRows))
-                    return true;
-
-                // And finally, visit rows
-                // NOTE: that the visitRows parameter will be obsolete once the
-                //       appropriate visit hints have been added to the API
-                if (visitRows(context, callback, visitRows))
-                    return true;
-            }
-        }
-        finally {
-            // Clean up - pop EL and restore old row index
-            popComponentFromEL(facesContext);
-            if (visitRows) {
-                setRowIndex(oldRowIndex);
-            }
-        }
-
-        // Return false to allow the visit to continue
-        return false;
-    }
-
-
-    // --------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Return the internal {@link DataModel} object representing the data
-     * objects that we will iterate over in this component's rendering.</p>
-     * <p/>
-     * <p>If the model has been cached by a previous call to {@link
-     * #setDataModel}, return it.  Otherwise call {@link #getValue}.  If the
-     * result is null, create an empty {@link ListDataModel} and return it.  If
-     * the result is an instance of {@link DataModel}, return it.  Otherwise,
-     * adapt the result as described in {@link #getValue} and return it.</p>
-     */
-    protected DataModel getDataModel() {
-
-        // Return any previously cached DataModel instance
-        if (this.model != null) {
-            return (model);
-        }
-
-        // Synthesize a DataModel around our current value if possible
-        Object current = getValue();
-        if (current == null) {
-            setDataModel(new ListDataModel(Collections.EMPTY_LIST));
-        } else if (current instanceof DataModel) {
-            setDataModel((DataModel) current);
-        } else if (current instanceof List) {
-            setDataModel(new ListDataModel((List) current));
-        } else if (Object[].class.isAssignableFrom(current.getClass())) {
-            setDataModel(new ArrayDataModel((Object[]) current));
-        } else if (current instanceof ResultSet) {
-            setDataModel(new ResultSetDataModel((ResultSet) current));
-        } else if (current instanceof Result) {
-            setDataModel(new ResultDataModel((Result) current));
-        } else {
-            setDataModel(new ScalarDataModel(current));
-        }
-        return (model);
-
-    }
-
-    /**
-     * <p>Set the internal DataModel.  This <code>UIData</code> instance must
-     * use the given {@link DataModel} as its internal value representation from
-     * now until the next call to <code>setDataModel</code>.  If the given
-     * <code>DataModel</code> is <code>null</code>, the internal
-     * <code>DataModel</code> must be reset in a manner so that the next call to
-     * {@link #getDataModel} causes lazy instantion of a newly refreshed
-     * <code>DataModel</code>.</p>
-     * <p/>
-     * <p>Subclasses might call this method if they either want to restore the
-     * internal <code>DataModel</code> during the <em>Restore View</em> phase or
-     * if they want to explicitly refresh the current <code>DataModel</code> for
-     * the <em>Render Response</em> phase.</p>
-     *
-     * @param dataModel the new <code>DataModel</code> or <code>null</code> to
-     *                  cause the model to be refreshed.
-     */
-
-    protected void setDataModel(DataModel dataModel) {
-        this.model = dataModel;
-    }
-
-    // ---------------------------------------------------- Private Methods
-
-
-    /**
-     * Called by {@link UIData#visitTree} to determine whether or not the
-     * <code>visitTree</code> implementation should visit the rows of UIData
-     * or by manipulating the row index before visiting the components themselves.
-     *
-     * Once we have the appropriate Visit hints for state saving, this method
-     * will become obsolete.
-     *
-     * @param ctx the <code>FacesContext</code> for the current request
-     *
-     * @return true if row index manipulation is required by the visit to this
-     *  UIData instance
-     */
-    private boolean requiresRowIteration(FacesContext ctx) {
-
-        return (!PhaseId.RESTORE_VIEW.equals(ctx.getCurrentPhaseId()));
-
-    }
-
-
-    // Perform pre-decode initialization work.  Note that this
-    // initialization may be performed either during a normal decode
-    // (ie. processDecodes()) or during a tree visit (ie. visitTree()).
-    private void preDecode(FacesContext context) {
-        setDataModel(null); // Re-evaluate even with server-side state saving
-        Map<String, SavedState> saved =
-              (Map<String, SavedState>) getStateHelper().get(PropertyKeys.saved);
-        if (null == saved || !keepSaved(context)) {
-            //noinspection CollectionWithoutInitialCapacity
-            getStateHelper().remove(PropertyKeys.saved);
-        }
-    }
-
-    // Perform pre-validation initialization work.  Note that this
-    // initialization may be performed either during a normal validation
-    // (ie. processValidators()) or during a tree visit (ie. visitTree()).
-    private void preValidate(FacesContext context) {
-        if (isNestedWithinUIData()) {
-            setDataModel(null);
-        }
-    }
-
-    // Perform pre-update initialization work.  Note that this
-    // initialization may be performed either during normal update
-    // (ie. processUpdates()) or during a tree visit (ie. visitTree()).
-    private void preUpdate(FacesContext context) {
-        if (isNestedWithinUIData()) {
-            setDataModel(null);
-        }
-    }
-
-    // Perform pre-encode initialization work.  Note that this
-    // initialization may be performed either during a normal encode
-    // (ie. encodeBegin()) or during a tree visit (ie. visitTree()).
-    private void preEncode(FacesContext context) {
-        setDataModel(null); // re-evaluate even with server-side state saving
-        if (!keepSaved(context)) {
-            ////noinspection CollectionWithoutInitialCapacity
-            //saved = new HashMap<String, SavedState>();
-            getStateHelper().remove(PropertyKeys.saved);
-        }
-    }
-
-    /**
-     * <p>Perform the appropriate phase-specific processing and per-row
-     * iteration for the specified phase, as follows:
-     * <ul>
-     * <li>Set the <code>rowIndex</code> property to -1, and process the facets
-     *     of this {@link UIData} component exactly once.</li>
-     * <li>Set the <code>rowIndex</code> property to -1, and process the facets
-     *     of the {@link UIColumn} children of this {@link UIData} component
-     *     exactly once.</li>
-     * <li>Iterate over the relevant rows, based on the <code>first</code>
-     *     and <code>row</code> properties, and process the children
-     *     of the {@link UIColumn} children of this {@link UIData} component
-     *     once per row.</li>
-     * </ul>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param phaseId {@link PhaseId} of the phase we are currently running
-     */
-    private void iterate(FacesContext context, PhaseId phaseId) {
-
-        // Process each facet of this component exactly once
-        setRowIndex(-1);
-        if (getFacetCount() > 0) {
-            for (UIComponent facet : getFacets().values()) {
-                if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
-                    facet.processDecodes(context);
-                } else if (phaseId == PhaseId.PROCESS_VALIDATIONS) {
-                    facet.processValidators(context);
-                } else if (phaseId == PhaseId.UPDATE_MODEL_VALUES) {
-                    facet.processUpdates(context);
-                } else {
-                    throw new IllegalArgumentException();
-                }
-            }
-        }
-
-        // Process each facet of our child UIColumn components exactly once
-        setRowIndex(-1);
-        if (getChildCount() > 0) {
-            for (UIComponent column : getChildren()) {
-                if (!(column instanceof UIColumn) || !column.isRendered()) {
-                    continue;
-                }
-                if (column.getFacetCount() > 0) {
-                    for (UIComponent columnFacet : column.getFacets().values()) {
-                        if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
-                            columnFacet.processDecodes(context);
-                        } else if (phaseId == PhaseId.PROCESS_VALIDATIONS) {
-                            columnFacet.processValidators(context);
-                        } else if (phaseId == PhaseId.UPDATE_MODEL_VALUES) {
-                            columnFacet.processUpdates(context);
-                        } else {
-                            throw new IllegalArgumentException();
-                        }
-                    }
-                }
-            }
-        }
-
-        // Iterate over our UIColumn children, once per row
-        int processed = 0;
-        int rowIndex = getFirst() - 1;
-        int rows = getRows();
-
-        while (true) {
-
-            // Have we processed the requested number of rows?
-            if ((rows > 0) && (++processed > rows)) {
-                break;
-            }
-
-            // Expose the current row in the specified request attribute
-            setRowIndex(++rowIndex);
-            if (!isRowAvailable()) {
-                break; // Scrolled past the last row
-            }
-
-            // Perform phase-specific processing as required
-            // on the *children* of the UIColumn (facets have
-            // been done a single time with rowIndex=-1 already)
-            if (getChildCount() > 0) {
-                for (UIComponent kid : getChildren()) {
-                    if (!(kid instanceof UIColumn) || !kid.isRendered()) {
-                        continue;
-                    }
-                    if (kid.getChildCount() > 0) {
-                        for (UIComponent grandkid : kid.getChildren()) {
-                            if (!grandkid.isRendered()) {
-                                continue;
-                            }
-                            if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
-                                grandkid.processDecodes(context);
-                            } else if (phaseId == PhaseId.PROCESS_VALIDATIONS) {
-                                grandkid.processValidators(context);
-                            } else if (phaseId == PhaseId.UPDATE_MODEL_VALUES) {
-                                grandkid.processUpdates(context);
-                            } else {
-                                throw new IllegalArgumentException();
-                            }
-                        }
-                    }
-                }
-            }
-
-        }
-
-        // Clean up after ourselves
-        setRowIndex(-1);
-
-    }
-
-    // Tests whether we need to visit our children as part of
-    // a tree visit
-    private boolean doVisitChildren(VisitContext context, boolean visitRows) {
-
-        // Just need to check whether there are any ids under this
-        // subtree.  Make sure row index is cleared out since 
-        // getSubtreeIdsToVisit() needs our row-less client id.
-        if (visitRows) {
-            setRowIndex(-1);
-        }
-        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
-        assert(idsToVisit != null);
-
-        // All ids or non-empty collection means we need to visit our children.
-        return (!idsToVisit.isEmpty());
-    }
-
-    // Performs pre-phase initialization before visiting children
-    // (if necessary).
-    private void preVisitChildren(VisitContext visitContext) {
-
-        // If EXECUTE_LIFECYCLE hint is set, we need to do
-        // lifecycle-related initialization before visiting children
-        if (visitContext.getHints().contains(VisitHint.EXECUTE_LIFECYCLE)) {
-            FacesContext facesContext = visitContext.getFacesContext();
-            PhaseId phaseId = facesContext.getCurrentPhaseId();
-
-            if (phaseId == PhaseId.APPLY_REQUEST_VALUES)
-                preDecode(facesContext);
-            else if (phaseId == PhaseId.PROCESS_VALIDATIONS)
-                preValidate(facesContext);
-            else if (phaseId == PhaseId.UPDATE_MODEL_VALUES)
-                preUpdate(facesContext);
-            else if (phaseId == PhaseId.RENDER_RESPONSE)
-                preEncode(facesContext);
-        }
-    }
-
-    // Visit each facet of this component exactly once.
-    private boolean visitFacets(VisitContext context,
-                                VisitCallback callback,
-                                boolean visitRows) {
-
-        if (visitRows) {
-            setRowIndex(-1);
-        }
-        if (getFacetCount() > 0) {
-            for (UIComponent facet : getFacets().values()) {
-                if (facet.visitTree(context, callback))
-                    return true;
-            }
-        }
-
-        return false;
-    }
-
-    // Visit each UIColumn and any facets it may have defined exactly once
-    private boolean visitColumnsAndColumnFacets(VisitContext context,
-                                                VisitCallback callback,
-                                                boolean visitRows) {
-        if (visitRows) {
-            setRowIndex(-1);
-        }
-        if (getChildCount() > 0) {
-            for (UIComponent column : getChildren()) {
-                if (column instanceof UIColumn) {
-                    VisitResult result = context.invokeVisitCallback(column, callback); // visit the column directly
-                    if (result == VisitResult.COMPLETE) {
-                        return true;
-                    }
-                    if (column.getFacetCount() > 0) {
-                        for (UIComponent columnFacet : column.getFacets().values()) {
-                            if (columnFacet.visitTree(context, callback)) {
-                                return true;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        return false;
-    }
-
-    // Visit each column and row
-    private boolean visitRows(VisitContext context,
-                              VisitCallback callback,
-                              boolean visitRows) {
-
-        // Iterate over our UIColumn children, once per row
-        int processed = 0;
-        int rowIndex = 0;
-        int rows = 0;
-        if (visitRows) {
-            rowIndex = getFirst() - 1;
-            rows = getRows();
-        }
-
-        while (true) {
-
-            // Have we processed the requested number of rows?
-            if (visitRows) {
-                if ((rows > 0) && (++processed > rows)) {
-                    break;
-                }
-                // Expose the current row in the specified request attribute
-                setRowIndex(++rowIndex);
-                if (!isRowAvailable()) {
-                    break; // Scrolled past the last row
-                }
-            }
-
-            // Visit as required on the *children* of the UIColumn
-            // (facets have been done a single time with rowIndex=-1 already)
-            if (getChildCount() > 0) {
-                for (UIComponent kid : getChildren()) {
-                    if (!(kid instanceof UIColumn)) {
-                        continue;
-                    }
-                    if (kid.getChildCount() > 0) {
-                    for (UIComponent grandkid : kid.getChildren()) {
-                            if (grandkid.visitTree(context, callback)) {
-                                return true;
-                            }
-                        }
-                    }
-                }
-            }
-
-            if (!visitRows) {
-                break;
-            }
-
-        }
-
-        return false;
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if we need to keep the saved
-     * per-child state information.  This will be the case if any of the
-     * following are true:</p>
-     *
-     * <ul>
-     *
-     * <li>there are messages queued with severity ERROR or FATAL.</li>
-     *
-     * <li>this <code>UIData</code> instance is nested inside of another
-     * <code>UIData</code> instance</li>
-     *
-     * </ul>
-     *
-     * @param context {@link FacesContext} for the current request
-     */
-    private boolean keepSaved(FacesContext context) {
-
-        return (contextHasErrorMessages(context) || isNestedWithinUIData());
-
-    }
-
-
-    private Boolean isNestedWithinUIData() {
-        if (isNested == null) {
-            UIComponent parent = this;
-            while (null != (parent = parent.getParent())) {
-                if (parent instanceof UIData) {
-                    isNested = Boolean.TRUE;
-                    break;
-                }
-            }
-            if (isNested == null) {
-                isNested = Boolean.FALSE;
-            }
-            return isNested;
-        } else {
-            return isNested;
-        }
-    }
-
-
-    private boolean contextHasErrorMessages(FacesContext context) {
-
-        FacesMessage.Severity sev = context.getMaximumSeverity();
-        return (sev != null && (FacesMessage.SEVERITY_ERROR.compareTo(sev) >= 0));
-
-    }
-
-
-    /**
-     * <p>Restore state information for all descendant components, as described
-     * for <code>setRowIndex()</code>.</p>
-     */
-    private void restoreDescendantState() {
-
-        FacesContext context = getFacesContext();
-        if (getChildCount() > 0) {
-            for (UIComponent kid : getChildren()) {
-                if (kid instanceof UIColumn) {
-                    restoreDescendantState(kid, context);
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>Restore state information for the specified component and its
-     * descendants.</p>
-     *
-     * @param component Component for which to restore state information
-     * @param context   {@link FacesContext} for the current request
-     */
-    private void restoreDescendantState(UIComponent component,
-                                        FacesContext context) {
-
-        // Reset the client identifier for this component
-        String id = component.getId();
-        component.setId(id); // Forces client id to be reset
-        Map<String, SavedState> saved = (Map<String,SavedState>)
-            getStateHelper().get(PropertyKeys.saved);
-        // Restore state for this component (if it is a EditableValueHolder)
-        if (component instanceof EditableValueHolder) {
-            EditableValueHolder input = (EditableValueHolder) component;
-            String clientId = component.getClientId(context);
-
-            SavedState state = saved.get(clientId);
-            if (state == null) {
-                state = new SavedState();
-            }
-            input.setValue(state.getValue());
-            input.setValid(state.isValid());
-            input.setSubmittedValue(state.getSubmittedValue());
-            // This *must* be set after the call to setValue(), since
-            // calling setValue() always resets "localValueSet" to true.
-            input.setLocalValueSet(state.isLocalValueSet());
-        } else if (component instanceof UIForm) {
-            UIForm form = (UIForm) component;
-            String clientId = component.getClientId(context);
-            SavedState state = saved.get(clientId);
-            if (state == null) {
-                state = new SavedState();
-            }
-            form.setSubmitted(state.getSubmitted());
-            state.setSubmitted(form.isSubmitted());
-        }
-
-        // Restore state for children of this component
-        if (component.getChildCount() > 0) {
-            for (UIComponent kid : component.getChildren()) {
-                restoreDescendantState(kid, context);
-            }
-        }
-
-        // Restore state for facets of this component
-        if (component.getFacetCount() > 0) {
-            for (UIComponent facet : component.getFacets().values()) {
-                restoreDescendantState(facet, context);
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>Save state information for all descendant components, as described for
-     * <code>setRowIndex()</code>.</p>
-     */
-    private void saveDescendantState() {
-
-        FacesContext context = getFacesContext();
-        if (getChildCount() > 0) {
-            for (UIComponent kid : getChildren()) {
-                if (kid instanceof UIColumn) {
-                    saveDescendantState(kid, context);
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>Save state information for the specified component and its
-     * descendants.</p>
-     *
-     * @param component Component for which to save state information
-     * @param context   {@link FacesContext} for the current request
-     */
-    private void saveDescendantState(UIComponent component,
-                                     FacesContext context) {
-
-        // Save state for this component (if it is a EditableValueHolder)
-        Map<String, SavedState> saved = (Map<String, SavedState>)
-              getStateHelper().get(PropertyKeys.saved);
-        if (component instanceof EditableValueHolder) {
-            EditableValueHolder input = (EditableValueHolder) component;
-            SavedState state = null;
-            String clientId = component.getClientId(context);
-            if (saved == null) {
-                state = new SavedState();
-                getStateHelper().put(PropertyKeys.saved, clientId, state);
-            }
-            if (state == null) {
-                state = saved.get(clientId);
-                if (state == null) {
-                    state = new SavedState();
-                    //saved.put(clientId, state);
-                    getStateHelper().put(PropertyKeys.saved, clientId, state);
-                }
-            }
-            state.setValue(input.getLocalValue());
-            state.setValid(input.isValid());
-            state.setSubmittedValue(input.getSubmittedValue());
-            state.setLocalValueSet(input.isLocalValueSet());
-        } else if (component instanceof UIForm) {
-            UIForm form = (UIForm) component;
-            String clientId = component.getClientId(context);
-            SavedState state = null;
-            if (saved == null) {
-                state = new SavedState();
-                getStateHelper().put(PropertyKeys.saved, clientId, state);
-            }
-            if (state == null) {
-                state = saved.get(clientId);
-                if (state == null) {
-                    state = new SavedState();
-                    //saved.put(clientId, state);
-                    getStateHelper().put(PropertyKeys.saved, clientId, state);
-                }
-            }
-            state.setSubmitted(form.isSubmitted());
-        }
-
-        // Save state for children of this component
-        if (component.getChildCount() > 0) {
-            for (UIComponent uiComponent : component.getChildren()) {
-                saveDescendantState(uiComponent, context);
-            }
-        }
-
-        // Save state for facets of this component
-        if (component.getFacetCount() > 0) {
-            for (UIComponent facet : component.getFacets().values()) {
-                saveDescendantState(facet, context);
-            }
-        }
-
-    }
-
-}
- at SuppressWarnings({"SerializableHasSerializationMethods",
-      "NonSerializableFieldInSerializableClass"})
-class SavedState implements Serializable {
-
-    private static final long serialVersionUID = 2920252657338389849L;
-    private Object submittedValue;
-    private boolean submitted;
-
-    Object getSubmittedValue() {
-        return (this.submittedValue);
-    }
-
-    void setSubmittedValue(Object submittedValue) {
-        this.submittedValue = submittedValue;
-    }
-
-    private boolean valid = true;
-
-    boolean isValid() {
-        return (this.valid);
-    }
-
-    void setValid(boolean valid) {
-        this.valid = valid;
-    }
-
-    private Object value;
-
-    Object getValue() {
-        return (this.value);
-    }
-
-    public void setValue(Object value) {
-        this.value = value;
-    }
-
-    private boolean localValueSet;
-
-    boolean isLocalValueSet() {
-        return (this.localValueSet);
-    }
-
-    public void setLocalValueSet(boolean localValueSet) {
-        this.localValueSet = localValueSet;
-    }
-
-    public boolean getSubmitted() {
-        return this.submitted;
-    }
-
-    public void setSubmitted(boolean submitted) {
-        this.submitted = submitted;
-    }
-
-    public String toString() {
-        return ("submittedValue: " + submittedValue +
-                " value: " + value +
-                " localValueSet: " + localValueSet);
-    }
-
-}
-
-
-// Private class to wrap an event with a row index
-class WrapperEvent extends FacesEvent {
-
-
-    public WrapperEvent(UIComponent component, FacesEvent event, int rowIndex) {
-        super(component);
-        this.event = event;
-        this.rowIndex = rowIndex;
-    }
-
-    private FacesEvent event = null;
-    private int rowIndex = -1;
-
-    public FacesEvent getFacesEvent() {
-        return (this.event);
-    }
-
-    public int getRowIndex() {
-        return (this.rowIndex);
-    }
-
-    public PhaseId getPhaseId() {
-        return (this.event.getPhaseId());
-    }
-
-    public void setPhaseId(PhaseId phaseId) {
-        this.event.setPhaseId(phaseId);
-    }
-
-    public boolean isAppropriateListener(FacesListener listener) {
-        return (false);
-    }
-
-    public void processListener(FacesListener listener) {
-        throw new IllegalStateException();
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIForm.java b/jsf-api/src/main/java/javax/faces/component/UIForm.java
deleted file mode 100644
index f577aea..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIForm.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import java.util.Collection;
-import java.util.Iterator;
-import javax.faces.application.Application;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PostValidateEvent;
-import javax.faces.event.PreValidateEvent;
-
-
-/**
- * <p><strong>UIForm</strong> is a {@link UIComponent} that represents an
- * input form to be presented to the user, and whose child components represent
- * (among other things) the input fields to be included when the form is
- * submitted.</p>
- * <p/>
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Form</code>".  This value can be changed by calling the
- * <code>setRendererType()</code> method.</p>
- */
-
-public class UIForm extends UIComponentBase implements NamingContainer, UniqueIdVendor {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Form";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Form";
-
-
-    /**
-     * Properties that are tracked by state saving.
-     */
-    enum PropertyKeys {
-
-        /**
-         * <p>The prependId flag.</p>
-         */
-        prependId,
-
-        /**
-         * <p>Last id vended by {@link UIForm#createUniqueId(javax.faces.context.FacesContext, String)}.</p>
-         */
-        lastId
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIForm} instance with default property
-     * values.</p>
-     */
-    public UIForm() {
-
-        super();
-        setRendererType("javax.faces.Form");
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-    //private int lastId = 0;
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>The form submitted flag for this {@link UIForm}.</p>
-     */
-    private boolean submitted = false;
-
-
-    /**
-     * <p>Returns the current value of the <code>submitted</code>
-     * property.  The default value is <code>false</code>.  See {@link
-     * #setSubmitted} for details.</p>
-     */
-    public boolean isSubmitted() {
-
-        return (this.submitted);
-
-    }
-
-
-    /**
-     * <p>If <strong>this</strong> <code>UIForm</code> instance (as
-     * opposed to other forms in the page) is experiencing a submit
-     * during this request processing lifecycle, this method must be
-     * called, with <code>true</code> as the argument, during the {@link
-     * UIComponent#decode} for this <code>UIForm</code> instance.  If
-     * <strong>this</strong> <code>UIForm</code> instance is
-     * <strong>not</strong> experiencing a submit, this method must be
-     * called, with <code>false</code> as the argument, during the
-     * {@link UIComponent#decode} for this <code>UIForm</code>
-     * instance.</p>
-     * <p/>
-     * <p>The value of a <code>UIForm</code>'s submitted property must
-     * not be saved as part of its state.</p>
-     */
-    public void setSubmitted(boolean submitted) {
-
-        this.submitted = submitted;
-
-    }
-
-    /**
-     * <p>The prependId flag.</p>
-     */
-    //private Boolean prependId;
-
-
-    public boolean isPrependId() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.prependId, true);
-
-    }
-
-
-    public void setPrependId(boolean prependId) {
-
-        getStateHelper().put(PropertyKeys.prependId, prependId);
-
-    }
-
-    // ----------------------------------------------------- UIComponent Methods
-
-
-    /**
-     * <p>Override {@link UIComponent#processDecodes} to ensure that the
-     * form is decoded <strong>before</strong> its children.  This is
-     * necessary to allow the <code>submitted</code> property to be
-     * correctly set.</p>
-     *
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processDecodes(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Process this component itself
-        decode(context);
-
-        // if we're not the submitted form, don't process children.
-        if (!isSubmitted()) {
-            return;
-        }
-
-        // Process all facets and children of this component
-        Iterator kids = getFacetsAndChildren();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            kid.processDecodes(context);
-        }
-
-    }
-
-
-    /**
-     * <p>Override {@link UIComponent#processValidators} to ensure that
-     * the children of this <code>UIForm</code> instance are only
-     * processed if {@link #isSubmitted} returns <code>true</code>.</p>
-     *
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processValidators(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!isSubmitted()) {
-            return;
-        }
-        pushComponentToEL(context, this);
-        Application app = context.getApplication();
-        app.publishEvent(context, PreValidateEvent.class, this);
-        // Process all the facets and children of this component
-        Iterator kids = getFacetsAndChildren();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            kid.processValidators(context);
-        }
-        app.publishEvent(context, PostValidateEvent.class, this);
-        popComponentFromEL(context);
-
-    }
-
-
-    /**
-     * <p>Override {@link UIComponent#processUpdates} to ensure that the
-     * children of this <code>UIForm</code> instance are only processed
-     * if {@link #isSubmitted} returns <code>true</code>.</p>
-     *
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processUpdates(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!isSubmitted()) {
-            return;
-        }
-
-        // Process all facets and children of this component
-        Iterator kids = getFacetsAndChildren();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            kid.processUpdates(context);
-        }
-
-    }
-
-    public String createUniqueId(FacesContext context, String seed) {
-        Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
-        int lastId = ((i != null) ? i : 0);
-        getStateHelper().put(PropertyKeys.lastId,  ++lastId);
-        return UIViewRoot.UNIQUE_ID_PREFIX + (seed == null ? lastId : seed);
-    }
-    
-    /**
-     * <p>Override the {@link UIComponent#getContainerClientId} to allow
-     * users to disable this form from prepending its <code>clientId</code> to
-     * its descendent's <code>clientIds</code> depending on the value of
-     * this form's {@link #isPrependId} property.</p>
-     */
-    public String getContainerClientId(FacesContext context) {
-        if (this.isPrependId()) {
-            return super.getContainerClientId(context);
-        } else {
-            UIComponent parent = this.getParent();
-            while (parent != null) {
-                if (parent instanceof NamingContainer) {
-                    return parent.getContainerClientId(context);
-                }
-                parent = parent.getParent();
-            }
-        }
-        return null;
-    }
-
-   
-    /**
-     * @see UIComponent#visitTree
-     */
-    @Override
-    public boolean visitTree(VisitContext context,
-                             VisitCallback callback) {
-
-        // NamingContainers can optimize partial tree visits by taking advantage
-        // of the fact that it is possible to detect whether any ids to visit
-        // exist underneath the NamingContainer.  If no such ids exist, there
-        // is no need to visit the subtree under the NamingContainer.
-
-        // UIForm is a bit different from other NamingContainers.  It only acts
-        // as a NamingContainer when prependId is true.  Note that if it 
-        // weren't for this, we could push this implementation up in to
-        // UIComponent and share it across all NamingContainers.  Instead,
-        // we currently duplicate this implementation in UIForm and 
-        // UINamingContainer, so that we can check isPrependId() here.
-
-        if (!this.isPrependId()) {
-            return super.visitTree(context, callback);
-        }
-
-        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
-        assert (idsToVisit != null);
-
-        // If we have ids to visit, let the superclass implementation
-        // handle the visit
-        if (!idsToVisit.isEmpty()) {
-            return super.visitTree(context, callback);
-        }
-
-        // If we have no child ids to visit, just visit ourselves, if
-        // we are visitable.
-        if (isVisitable(context)) {
-            FacesContext facesContext = context.getFacesContext();
-            pushComponentToEL(facesContext, null);
-
-            try {
-                VisitResult result = context.invokeVisitCallback(this, callback);
-                return (result == VisitResult.COMPLETE);
-            }
-            finally {
-                popComponentFromEL(facesContext);
-            }
-        }
-
-        // Done visiting this subtree.  Return false to allow 
-        // visit to continue.
-        return false;
-    }
-}
-
diff --git a/jsf-api/src/main/java/javax/faces/component/UIGraphic.java b/jsf-api/src/main/java/javax/faces/component/UIGraphic.java
deleted file mode 100644
index 2b9a1a1..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIGraphic.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.el.ValueExpression;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-
-
-/**
- * <p><strong>UIGraphic</strong> is a {@link UIComponent} that displays
- * a graphical image to the user.  The user cannot manipulate this component;
- * it is for display purposes only.</p>
- *
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Image</code>".  This value can be changed by calling the
- * <code>setRendererType()</code> method.</p>
- */
-
-public class UIGraphic extends UIComponentBase {
-
-    /**
-     * Properties that are tracked by state saving.
-     */
-    enum PropertyKeys {
-
-        /**
-         * <p>The local value of this {@link UIComponent}.</p>
-         */
-        value
-    }
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Graphic";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Graphic";
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIGraphic} instance with default property
-     * values.</p>
-     */
-    public UIGraphic() {
-
-        super();
-        setRendererType("javax.faces.Image");
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    //private Object value = null;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the image URL for this {@link UIGraphic}.  This method is a
-     * typesafe alias for <code>getValue()</code>.</p>
-     */
-    public String getUrl() {
-
-        return ((String) getValue());
-
-    }
-
-
-    /**
-     * <p>Set the image URL for this {@link UIGraphic}.  This method is a
-     * typesafe alias for <code>setValue()</code>.</p>
-     *
-     * @param url The new image URL
-     */
-    public void setUrl(String url) {
-
-        setValue(url);
-
-    }
-
-
-
-
-    /**
-     * <p>Returns the <code>value</code> property of the
-     * <code>UIGraphic</code>. This will typically be rendered as an URL.</p>
-     */
-    public Object getValue() {
-
-        return getStateHelper().eval(PropertyKeys.value);
-
-    }
-
-
-    /**
-     * <p>Sets the <code>value</code> property of the <code>UIGraphic</code>.
-     * This will typically be rendered as an URL.</p>
-     * 
-     * @param value the new value
-     */
-    public void setValue(Object value) {
-
-        getStateHelper().put(PropertyKeys.value, value);
-
-    }
-
-
-    // ---------------------------------------------------------------- Bindings
-
-
-    /**
-     * <p>Return any {@link ValueBinding} set for <code>value</code> if a
-     * {@link ValueBinding} for <code>url</code> is requested; otherwise,
-     * perform the default superclass processing for this method.</p>
-     *
-     * @param name Name of the attribute or property for which to retrieve
-     *  a {@link ValueBinding}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated This has been replaced by {@link #getValueExpression(java.lang.String)}.
-     */
-    public ValueBinding getValueBinding(String name) {
-
-        if ("url".equals(name)) {
-            return (super.getValueBinding("value"));
-        } else {
-            return (super.getValueBinding(name));
-        }
-
-    }
-
-
-    /**
-     * <p>Store any {@link ValueBinding} specified for <code>url</code>
-     * under <code>value</code> instead; otherwise, perform the default
-     * superclass processing for this method.  In all cases, the
-     * superclass is relied on to convert the <code>ValueBinding</code>
-     * to a <code>ValueExpression</code>.</p>
-     *
-     * @param name Name of the attribute or property for which to set
-     *  a {@link ValueBinding}
-     * @param binding The {@link ValueBinding} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueBinding}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated This has been replaced by {@link #setValueExpression}.
-     */
-    public void setValueBinding(String name, ValueBinding binding) {
-
-        if ("url".equals(name)) {
-            super.setValueBinding("value", binding);
-        } else {
-            super.setValueBinding(name, binding);
-        }
-
-    }
-
-    /**
-     * <p>Return any {@link ValueExpression} set for <code>value</code> if a
-     * {@link ValueExpression} for <code>url</code> is requested; otherwise,
-     * perform the default superclass processing for this method.</p>
-     *
-     * @param name Name of the attribute or property for which to retrieve
-     *  a {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     * @since 1.2
-     */
-    public ValueExpression getValueExpression(String name) {
-
-        if ("url".equals(name)) {
-            return (super.getValueExpression("value"));
-        } else {
-            return (super.getValueExpression(name));
-        }
-
-    }
-    
-    /**
-     * <p>Store any {@link ValueExpression} specified for <code>url</code> under
-     * <code>value</code> instead; otherwise, perform the default superclass
-     * processing for this method.</p>
-     *
-     * @param name Name of the attribute or property for which to set
-     *  a {@link ValueExpression}
-     * @param binding The {@link ValueExpression} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     * @since 1.2
-     */
-    public void setValueExpression(String name, ValueExpression binding) {
-
-        if ("url".equals(name)) {
-            super.setValueExpression("value", binding);
-        } else {
-            super.setValueExpression(name, binding);
-        }
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIInput.java b/jsf-api/src/main/java/javax/faces/component/UIInput.java
deleted file mode 100644
index f62c028..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIInput.java
+++ /dev/null
@@ -1,1496 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import java.util.Map;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.ExceptionHandler;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.faces.el.MethodBinding;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PostValidateEvent;
-import javax.faces.event.PreValidateEvent;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.render.Renderer;
-import javax.faces.validator.BeanValidator;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-
-/**
- * <p><span class="changed_modified_2_0"><strong>UIInput</strong></span>
- * is a {@link UIComponent} that represents a component that both
- * displays output to the user (like {@link UIOutput} components do) and
- * processes request parameters on the subsequent request that need to
- * be decoded.  There are no restrictions on the data type of the local
- * value, or the object referenced by the value binding expression (if
- * any); however, individual {@link javax.faces.render.Renderer}s will
- * generally impose restrictions on the type of data they know how to
- * display.</p> 
- *
- * <p>During the <em>Apply Request Values</em> phase
- * of the request processing lifecycle, the decoded value of this
- * component, usually but not necessarily a String, must be stored - but
- * not yet converted - using <code>setSubmittedValue()</code>.  If the
- * component wishes to indicate that no particular value was submitted,
- * it can either do nothing, or set the submitted value to
- * <code>null</code>.</p>
-
- * <p>By default, during the <em>Process Validators</em> phase of the
- * request processing lifecycle, the submitted value will be converted
- * to a typesafe object, and, if validation succeeds, stored as a local
- * value using <code>setValue()</code>.  However, if the
- * <code>immediate</code> property is set to <code>true</code>, this
- * processing will occur instead at the end of the <em>Apply Request
- * Values</em> phase.</p> 
-
- * <p>During the <em>Render Response</em> phase of the request
- * processing lifecycle, conversion for output occurs as for {@link
- * UIOutput}.</p>
-
- * <p>When the <code>validate()</code> method of this {@link UIInput}
- * detects that a value change has actually occurred, and that all
- * validations have been successfully passed, it will queue a {@link
- * ValueChangeEvent}.  Later on, the <code>broadcast()</code> method
- * will ensure that this event is broadcast to all interested listeners.
- * This event will be delivered by default in the <em>Process
- * Validators</em> phase, but can be delivered instead during <em>Apply
- * Request Values</em> if the <code>immediate</code> property is set to
- * <code>true</code>. <span class="changed_added_2_0">If the validation
- * fails, the implementation must call {@link
- * FacesContext#validationFailed}.</span></p>
-
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>Text</code>".  This value can be changed by calling the
- * <code>setRendererType()</code> method.</p>
- */
-
-public class UIInput extends UIOutput implements EditableValueHolder {
-
-    /* PENDING_2_1 (edburns,rogerk) this should be exposed as public constant */
-    private static final String EMPTY_STRING_AS_NULL =
-          "javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL";
-
-    private static final String BEANS_VALIDATION_AVAILABLE =
-          "javax.faces.private.BEANS_VALIDATION_AVAILABLE";
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Input";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Input";
-
-
-    /**
-     * <p>The message identifier of the
-     * {@link javax.faces.application.FacesMessage} to be created if
-     * a conversion error occurs, and neither the page author nor
-     * the {@link ConverterException} provides a message.</p>
-     */
-    public static final String CONVERSION_MESSAGE_ID =
-         "javax.faces.component.UIInput.CONVERSION";
-
-
-    /**
-     * <p>The message identifier of the
-     * {@link javax.faces.application.FacesMessage} to be created if
-     * a required check fails.</p>
-     */
-    public static final String REQUIRED_MESSAGE_ID =
-         "javax.faces.component.UIInput.REQUIRED";
-
-    /**
-     * <p>The message identifier of the
-     * {@link javax.faces.application.FacesMessage} to be created if
-     * a model update error occurs, and the thrown exception has
-     * no message.</p>
-     */
-    public static final String UPDATE_MESSAGE_ID =
-         "javax.faces.component.UIInput.UPDATE";
-
-
-    /**
-     * <p class="changed_added_2_0">The name of an application parameter
-     * that indicates how empty values should be handled with respect to
-     * validation.  See {@link #validateValue} for the allowable values
-     * and specification of how they should be interpreted.</p>
-     */
-
-    public static final String VALIDATE_EMPTY_FIELDS_PARAM_NAME = 
-	"javax.faces.VALIDATE_EMPTY_FIELDS";
-    
-    private static final Validator[] EMPTY_VALIDATOR = new Validator[0];
-
-    private Boolean emptyStringIsNull;
-
-    private Boolean validateEmptyFields;
-
-    enum PropertyKeys {
-        /**
-     * <p>The "localValueSet" state for this component.
-     */
-        localValueSet,
-
-        /**
-         * <p>If the input is required or not.</p>
-         */
-        required,
-
-        /**
-         * <p>Custom message to be displayed if input is required but non was submitted.</p>
-         */
-        requiredMessage,
-
-        /**
-         * <p>Custom message to be displayed when conversion fails.</p>
-         */
-        converterMessage,
-
-        /**
-         * <p>Custom message to be displayed when validation fails.</p>
-         */
-        validatorMessage,
-
-        /**
-         * <p>Flag indicating whether or not this component is valid.</p>
-         */
-        valid,
-
-        /**
-         * <p>Flag indicating when conversion/validation should occur.</p>
-         */
-        immediate,
-
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIInput} instance with default property
-     * values.</p>
-     */
-    public UIInput() {
-
-        super();
-        setRendererType("javax.faces.Text");
-
-    }
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>The submittedValue value of this {@link UIInput} component.</p>
-     */
-    private Object submittedValue = null;
-
-
-    /**
-     * <p>Return the submittedValue value of this {@link UIInput} component.
-     * This method should only be used by the <code>decode()</code> and
-     * <code>validate()</code> method of this component, or
-     * its corresponding {@link Renderer}.</p>
-     */
-    public Object getSubmittedValue() {
-
-        return (this.submittedValue);
-
-    }
-
-
-    /**
-     * <p>Set the submittedValue value of this {@link UIInput} component.
-     * This method should only be used by the <code>decode()</code> and
-     * <code>validate()</code> method of this component, or
-     * its corresponding {@link Renderer}.</p>
-     *
-     * @param submittedValue The new submitted value
-     */
-    public void setSubmittedValue(Object submittedValue) {
-
-        this.submittedValue = submittedValue;
-
-    }
-
-    public void setValue(Object value) {
-        super.setValue(value);
-        // Mark the local value as set.
-        setLocalValueSet(true);
-    }
-
-    /**
-     * <p>Convenience method to reset this component's value to the
-     * un-initialized state.  This method does the following:</p>
-     * <p/>
-     * <p>Call {@link #setValue} passing <code>null</code>.</p>
-     * <p/>
-     * <p>Call {@link #setSubmittedValue} passing <code>null</code>.</p>
-     * <p/>
-     * <p>Call {@link #setLocalValueSet} passing <code>false</code>.</p>
-     * <p/>
-     * <p>Call {@link #setValid} passing <code>true</code>.</p>
-     * <p/>
-     * <p>Upon return from this call if the instance had a
-     * <code>ValueBinding</code> associated with it for the "value"
-     * property, this binding is evaluated when {@link
-     * UIOutput#getValue} is called.  Otherwise, <code>null</code> is
-     * returned from <code>getValue()</code>.</p>
-     */
-
-    public void resetValue() {
-        this.setValue(null);
-        this.setSubmittedValue(null);
-        this.setLocalValueSet(false);
-        this.setValid(true);
-    }
-
-
-    /**
-     * Return the "local value set" state for this component.
-     * Calls to <code>setValue()</code> automatically reset
-     * this property to <code>true</code>.
-     */
-    public boolean isLocalValueSet() {
-        return (Boolean) getStateHelper().eval(PropertyKeys.localValueSet, false);
-    }
-
-    /**
-     * Sets the "local value set" state for this component.
-     */
-    public void setLocalValueSet(boolean localValueSet) {
-        getStateHelper().put(PropertyKeys.localValueSet, localValueSet);
-    }
-
-
-    /**
-     * <p>Return the "required field" state for this component.</p>
-     */
-    public boolean isRequired() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.required, false);
-
-    }
-
-
-    /**
-     * <p>If there has been a call to {@link #setRequiredMessage} on this
-     * instance, return the message.  Otherwise, call {@link #getValueExpression}
-     * passing the key "requiredMessage", get the result of the expression, and return it.
-     * Any {@link ELException}s thrown during the call to <code>getValue()</code>
-     * must be wrapped in a {@link FacesException} and rethrown.
-     */
-
-    public String getRequiredMessage() {
-
-        return (String) getStateHelper().eval(PropertyKeys.requiredMessage);
-
-    }
-
-    /**
-     * <p>Override any {@link ValueExpression} set for the "requiredMessage"
-     * with the literal argument provided to this method.  Subsequent calls
-     * to {@link #getRequiredMessage} will return this value;</p>
-     *
-     * @param message the literal message value to be displayed in the event
-     *                the user hasn't supplied a value and one is required.
-     */
-
-    public void setRequiredMessage(String message) {
-
-        getStateHelper().put(PropertyKeys.requiredMessage,  message);
-
-    }
-
-
-    /**
-     * <p>If there has been a call to {@link #setConverterMessage} on this
-     * instance, return the message.  Otherwise, call {@link #getValueExpression}
-     * passing the key "converterMessage", get the result of the expression, and return it.
-     * Any {@link ELException}s thrown during the call to <code>getValue()</code>
-     * must be wrapped in a {@link FacesException} and rethrown.
-     */
-
-    public String getConverterMessage() {
-
-        return (String) getStateHelper().eval(PropertyKeys.converterMessage);
-
-    }
-
-    /**
-     * <p>Override any {@link ValueExpression} set for the "converterMessage"
-     * with the literal argument provided to this method.  Subsequent calls
-     * to {@link #getConverterMessage} will return this value;</p>
-     *
-     * @param message the literal message value to be displayed in the event
-     *                conversion fails.
-     */
-
-    public void setConverterMessage(String message) {
-
-        getStateHelper().put(PropertyKeys.converterMessage, message);
-
-    }
-
-
-    /**
-     * <p>If there has been a call to {@link #setValidatorMessage} on this
-     * instance, return the message.  Otherwise, call {@link #getValueExpression}
-     * passing the key "validatorMessage", get the result of the expression, and return it.
-     * Any {@link ELException}s thrown during the call to <code>getValue()</code>
-     * must be wrapped in a {@link FacesException} and rethrown.
-     */
-
-    public String getValidatorMessage() {
-
-        return (String) getStateHelper().eval(PropertyKeys.validatorMessage);
-
-    }
-
-    /**
-     * <p>Override any {@link ValueExpression} set for the "validatorMessage"
-     * with the literal argument provided to this method.  Subsequent calls
-     * to {@link #getValidatorMessage} will return this value;</p>
-     *
-     * @param message the literal message value to be displayed in the event
-     *                validation fails.
-     */
-
-    public void setValidatorMessage(String message) {
-
-        getStateHelper().put(PropertyKeys.validatorMessage, message);
-
-    }
-
-
-    public boolean isValid() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.valid, true);
-
-    }
-
-
-    public void setValid(boolean valid) {
-
-        getStateHelper().put(PropertyKeys.valid, valid);
-
-    }
-
-
-    /**
-     * <p>Set the "required field" state for this component.</p>
-     *
-     * @param required The new "required field" state
-     */
-    public void setRequired(boolean required) {
-
-        getStateHelper().put(PropertyKeys.required, required);
-
-    }
-
-
-    public boolean isImmediate() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.immediate, false);
-
-    }
-
-
-    public void setImmediate(boolean immediate) {
-
-        getStateHelper().put(PropertyKeys.immediate, immediate);
-
-    }
-
-
-    /**
-     * <p>Return a <code>MethodBinding</code> pointing at a
-     * method that will be called during <em>Process Validations</em>
-     * phase of the request processing lifecycle, to validate the current
-     * value of this component.</p>
-     *
-     * @deprecated {@link #getValidators} should be used instead.
-     */
-    public MethodBinding getValidator() {
-        MethodBinding result = null;
-
-        Validator[] curValidators = getValidators();
-        // go through our lisetners list and find the one and only
-        // MethodBindingValidator instance, if present.
-        if (null != curValidators) {
-            for (int i = 0; i < curValidators.length; i++) {
-                // We are guaranteed to have at most one instance of
-                // MethodBindingValidator in the curValidators list.
-                if (MethodBindingValidator.class ==
-                     curValidators[i].getClass()) {
-                    result = ((MethodBindingValidator) curValidators[i]).
-                         getWrapped();
-                    break;
-                }
-            }
-        }
-        return result;
-
-    }
-
-
-    /**
-     * <p>Set a <code>MethodBinding</code> pointing at a
-     * method that will be called during <em>Process Validations</em>
-     * phase of the request processing lifecycle, to validate the current
-     * value of this component.</p>
-     * <p/>
-     * <p>Any method referenced by such an expression must be public, with
-     * a return type of <code>void</code>, and accept parameters of type
-     * {@link FacesContext}, {@link UIComponent}, and <code>Object</code>.</p>
-     *
-     * @param validatorBinding The new <code>MethodBinding</code> instance
-     * @deprecated Use {@link #addValidator} instead, obtaining the
-     *             argument {@link Validator} by creating an instance of {@link
-     *             javax.faces.validator.MethodExpressionValidator}.
-     */
-    public void setValidator(MethodBinding validatorBinding) {
-        Validator[] curValidators = getValidators();
-        // see if we need to null-out, or replace an existing validator
-        if (null != curValidators) {
-            for (int i = 0; i < curValidators.length; i++) {
-                // if we want to remove the validatorBinding
-                if (null == validatorBinding) {
-                    // We are guaranteed to have at most one instance of
-                    // MethodBindingValidator in the curValidators
-                    // list.
-                    if (MethodBindingValidator.class ==
-                         curValidators[i].getClass()) {
-                        removeValidator(curValidators[i]);
-                        return;
-                    }
-                }
-                // if we want to replace the validatorBinding
-                else //noinspection ObjectEquality
-                    if (validatorBinding == curValidators[i]) {
-                    removeValidator(curValidators[i]);
-                    break;
-                }
-            }
-        }
-        addValidator(new MethodBindingValidator(validatorBinding));
-
-    }
-
-    public MethodBinding getValueChangeListener() {
-        MethodBinding result = null;
-
-        ValueChangeListener[] curListeners = getValueChangeListeners();
-        // go through our lisetners list and find the one and only
-        // MethodBindingValueChangeListener instance, if present.
-        if (null != curListeners) {
-            for (int i = 0; i < curListeners.length; i++) {
-                // We are guaranteed to have at most one instance of
-                // MethodBindingValueChangeListener in the curListeners list.
-                if (MethodBindingValueChangeListener.class ==
-                     curListeners[i].getClass()) {
-                    result = ((MethodBindingValueChangeListener) curListeners[i]).
-                         getWrapped();
-                    break;
-                }
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     *
-     * @deprecated Use {@link #addValueChangeListener} instead, obtaining the
-     *             argument {@link ValueChangeListener} by creating an instance of {@link
-     *             javax.faces.event.MethodExpressionValueChangeListener}.
-     */
-    public void setValueChangeListener(MethodBinding valueChangeListener) {
-
-        ValueChangeListener[] curListeners = getValueChangeListeners();
-        // see if we need to null-out, or replace an existing listener
-        if (null != curListeners) {
-            for (int i = 0; i < curListeners.length; i++) {
-                // if we want to remove the valueChangeListener
-                if (null == valueChangeListener) {
-                    // We are guaranteed to have at most one instance of
-                    // MethodBindingValueChangeListener in the curListeners
-                    // list.
-                    if (MethodBindingValueChangeListener.class ==
-                         curListeners[i].getClass()) {
-                        removeFacesListener(curListeners[i]);
-                        return;
-                    }
-                }
-                // if we want to replace the valueChangeListener
-                else //noinspection ObjectEquality
-                    if (valueChangeListener == curListeners[i]) {
-                    removeFacesListener(curListeners[i]);
-                    break;
-                }
-            }
-        }
-        addValueChangeListener(new MethodBindingValueChangeListener(valueChangeListener));
-    }
-
-    // ----------------------------------------------------- UIComponent Methods
-
-
-    /**
-     * <p>
-     * In addition to the actions taken in {@link UIOutput}
-     * when {@link PartialStateHolder#markInitialState()} is called,
-     * check if any of the installed {@link Validator}s are PartialStateHolders and
-     * if so, call {@link javax.faces.component.PartialStateHolder#markInitialState()}
-     * as appropriate.
-     * </p>
-     */
-    @Override
-    public void markInitialState() {
-
-        super.markInitialState();
-        if (validators != null) {
-            validators.markInitialState();
-        }
-
-    }
-
-
-    @Override
-    public void clearInitialState() {
-
-        if (initialStateMarked()) {
-            super.clearInitialState();
-            if (validators != null) {
-                validators.clearInitialState();
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>Specialized decode behavior on top of that provided by the
-     * superclass.  In addition to the standard
-     * <code>processDecodes</code> behavior inherited from {@link
-     * UIComponentBase}, calls <code>validate()</code> if the the
-     * <code>immediate</code> property is true; if the component is
-     * invalid afterwards or a <code>RuntimeException</code> is thrown,
-     * calls {@link FacesContext#renderResponse}.  </p>
-     *
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processDecodes(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Skip processing if our rendered flag is false
-        if (!isRendered()) {
-            return;
-        }
-
-        super.processDecodes(context);
-
-        if (isImmediate()) {
-            executeValidate(context);
-        }
-    }
-
-    /**
-     * <p>In addition to the standard <code>processValidators</code> behavior
-     * inherited from {@link UIComponentBase}, calls <code>validate()</code>
-     * if the <code>immediate</code> property is false (which is the
-     * default);  if the component is invalid afterwards, calls
-     * {@link FacesContext#renderResponse}.
-     * If a <code>RuntimeException</code> is thrown during
-     * validation processing, calls {@link FacesContext#renderResponse}
-     * and re-throw the exception.
-     * </p>
-     *
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processValidators(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Skip processing if our rendered flag is false
-        if (!isRendered()) {
-            return;
-        }
-
-        pushComponentToEL(context, this);
-
-        if (!isImmediate()) {
-            Application application = context.getApplication();
-            application.publishEvent(context, PreValidateEvent.class, this);
-            executeValidate(context);
-            application.publishEvent(context, PostValidateEvent.class, this);
-        }
-        for (Iterator<UIComponent> i = getFacetsAndChildren(); i.hasNext(); ) {
-            i.next().processValidators(context);
-        }
-
-        popComponentFromEL(context);
-    }
-
-    /**
-     * <p>In addition to the standard <code>processUpdates</code> behavior
-     * inherited from {@link UIComponentBase}, calls
-     * <code>updateModel()</code>.
-     * If the component is invalid afterwards, calls
-     * {@link FacesContext#renderResponse}.
-     * If a <code>RuntimeException</code> is thrown during
-     * update processing, calls {@link FacesContext#renderResponse}
-     * and re-throw the exception.
-     * </p>
-     *
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void processUpdates(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Skip processing if our rendered flag is false
-        if (!isRendered()) {
-            return;
-        }
-
-        super.processUpdates(context);
-
-        try {
-            updateModel(context);
-        } catch (RuntimeException e) {
-            context.renderResponse();
-            throw e;
-        }
-
-        if (!isValid()) {
-            context.renderResponse();
-        }
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void decode(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Force validity back to "true"
-        setValid(true);
-        super.decode(context);
-    }
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span>
-     * the following algorithm to update the model data
-     * associated with this {@link UIInput}, if any, as appropriate.</p>
-     * <ul>
-     * <li>If the <code>valid</code> property of this component is
-     * <code>false</code>, take no further action.</li>
-     * <li>If the <code>localValueSet</code> property of this component is
-     * <code>false</code>, take no further action.</li>
-     * <li>If no {@link ValueExpression} for <code>value</code> exists,
-     * take no further action.</li>
-     * <li>Call <code>setValue()</code> method of the {@link ValueExpression}
-     * to update the value that the {@link ValueExpression} points at.</li>
-     * <li>If the <code>setValue()</code> method returns successfully:
-     * <ul>
-     * <li>Clear the local value of this {@link UIInput}.</li>
-     * <li>Set the <code>localValueSet</code> property of this
-     * {@link UIInput} to false.</li>
-     * </ul></li>
-     * <li>If the <code>setValue()</code> method throws an Exception:
-     * <ul>
-     * <li class="changed_modified_2_0">Enqueue an error message.  Create a 
-     * {@link FacesMessage} with the id {@link #UPDATE_MESSAGE_ID}.  Create a
-     * {@link UpdateModelException}, passing the <code>FacesMessage</code> and 
-     * the caught exception to the constructor.  Create an 
-     * {@link ExceptionQueuedEventContext}, passing the <code>FacesContext</code>, 
-     * the <code>UpdateModelException</code>, this component instance, and
-     * {@link PhaseId#UPDATE_MODEL_VALUES} to its constructor.  Call 
-     * {@link FacesContext#getExceptionHandler} and then call 
-     * {@link ExceptionHandler#processEvent}, passing the 
-     * <code>ExceptionQueuedEventContext</code>.
-     * </li>
-     * <li>Set the <code>valid</code> property of this {@link UIInput}
-     * to <code>false</code>.</li>
-     * </ul></li>
-     * The exception must not be re-thrown.  This enables tree traversal
-     * to continue for this lifecycle phase, as in all the other lifecycle
-     * phases. 
-     * </ul>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     * @throws NullPointerException if <code>context</code>
-     *                              is <code>null</code>
-     */
-    public void updateModel(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (!isValid() || !isLocalValueSet()) {
-            return;
-        }
-        ValueExpression ve = getValueExpression("value");
-        if (ve != null) {
-            Throwable caught = null;
-            FacesMessage message = null;
-            try {
-                ve.setValue(context.getELContext(), getLocalValue());
-                setValue(null);
-                setLocalValueSet(false);
-            } catch (ELException e) {
-                caught = e;
-                String messageStr = e.getMessage();
-                Throwable result = e.getCause();
-                while (null != result &&
-                     result.getClass().isAssignableFrom(ELException.class)) {
-                    messageStr = result.getMessage();
-                    result = result.getCause();
-                }
-                if (null == messageStr) {
-                    message =
-                         MessageFactory.getMessage(context, UPDATE_MESSAGE_ID,
-                              MessageFactory.getLabel(
-                                   context, this));
-                } else {
-                    message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                               messageStr,
-                                               messageStr);
-                }
-                setValid(false);
-            } catch (Exception e) {
-                caught = e;
-                message =
-                     MessageFactory.getMessage(context, UPDATE_MESSAGE_ID,
-                          MessageFactory.getLabel(
-                               context, this));
-                setValid(false);
-            }
-            if (caught != null) {
-                assert(message != null);
-                // PENDING(edburns): verify this is in the spec.
-                @SuppressWarnings({"ThrowableInstanceNeverThrown"})
-                UpdateModelException toQueue =
-                      new UpdateModelException(message, caught);
-                ExceptionQueuedEventContext eventContext =
-                      new ExceptionQueuedEventContext(context,
-                                                toQueue,
-                                                this,
-                                                PhaseId.UPDATE_MODEL_VALUES);
-                context.getApplication().publishEvent(context,
-                                                      ExceptionQueuedEvent.class,
-                                                      eventContext);
-                
-            }
-            
-        }
-    }
-    
-    // ------------------------------------------------------ Validation Methods
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> the
-     * following algorithm to validate the local value of this {@link
-     * UIInput}.</p>
-
-     * <ul>
-
-     * <li>Retrieve the submitted value with {@link #getSubmittedValue}.
-     * If this returns <code>null</code>, exit without further
-     * processing.  (This indicates that no value was submitted for this
-     * component.)</li>
-
-     * <p/>
-
-     * <li><span class="changed_modified_2_0">If the
-     * <code>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</code>
-     * context parameter value is <code>true</code> (ignoring case), and
-     * <code>getSubmittedValue()</code> returns a zero-length
-     * <code>String</code> call <code>{@link #setSubmittedValue}</code>,
-     * passing <code>null</code> as the argument and continue processing
-     * using <code>null</code> as the current submitted
-     * value.</code></span></li>
-
-     * <p/>
-
-     * <li> Convert the submitted value into a "local value" of the
-     * appropriate data type by calling {@link #getConvertedValue}.</li>
-     * <li><span class="changed_added_2_0_rev_a">If conversion fails:
-     * <ul>
-     * <li>Enqueue an appropriate error message by calling the
-     * <code>addMessage()</code> method on the
-     * <code>FacesContext</code>.</li>
-     * <li>Set the <code>valid</code> property
-     * on this component to <code>false</code> </li>
-     * </ul></span>
-     * </li>
-
-     * <p/>
-     * <li>Validate the property by calling {@link #validateValue}.</li>
-     * <p/>
-     * <li>If the <code>valid</code> property of this component is still
-     * <code>true</code>, retrieve the previous value of the component
-     * (with <code>getValue()</code>), store the new local value using
-     * <code>setValue()</code>, and reset the submitted value to
-     * null.  If the local value is different from
-     * the previous value of this component, fire a
-     * {@link ValueChangeEvent} to be broadcast to all interested
-     * listeners.</li>
-     * </ul>
-     * <p/>
-     * <p>Application components implementing {@link UIInput} that wish to
-     * perform validation with logic embedded in the component should perform
-     * their own correctness checks, and then call the
-     * <code>super.validate()</code> method to perform the standard
-     * processing described above.</p>
-     *
-     * @param context The {@link FacesContext} for the current request
-     * @throws NullPointerException if <code>context</code>
-     *                              is null
-     */
-    public void validate(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Submitted value == null means "the component was not submitted
-        // at all".  
-        Object submittedValue = getSubmittedValue();
-        if (submittedValue == null) {
-            return;
-        }
-
-        // If non-null, an instanceof String, and we're configured to treat
-        // zero-length Strings as null:
-        //   call setSubmittedValue(null)
-        if ((considerEmptyStringNull(context)
-             && submittedValue instanceof String 
-             && ((String) submittedValue).length() == 0)) {
-            setSubmittedValue(null);
-            submittedValue = null;
-        }
-
-        Object newValue = null;
-
-        try {
-            newValue = getConvertedValue(context, submittedValue);
-        }
-        catch (ConverterException ce) {
-            addConversionErrorMessage(context, ce);
-            setValid(false);
-        }
-
-        validateValue(context, newValue);
-
-        // If our value is valid, store the new value, erase the
-        // "submitted" value, and emit a ValueChangeEvent if appropriate
-        if (isValid()) {
-            Object previous = getValue();
-            setValue(newValue);
-            setSubmittedValue(null);
-            if (compareValues(previous, newValue)) {
-                queueEvent(new ValueChangeEvent(this, previous, newValue));
-            }
-        }
-
-    }
-
-    /**
-     * <p>Convert the submitted value into a "local value" of the
-     * appropriate data type, if necessary.  Employ the following
-     * algorithm to do so:</p>
-     * <ul>
-     * <li>If a <code>Renderer</code> is present, call
-     * <code>getConvertedValue()</code> to convert the submitted
-     * value.</li>
-     * <li>If no <code>Renderer</code> is present, and the submitted
-     * value is a String, locate a {@link Converter} as follows:
-     * <ul>
-     * <li>If <code>getConverter()</code> returns a non-null {@link Converter},
-     * use that instance.</li>
-     * <li>Otherwise, if a value binding for <code>value</code> exists,
-     * call <code>getType()</code> on it.
-     * <ul>
-     * <li>If this call returns <code>null</code>, assume the output
-     * type is <code>String</code> and perform no conversion.</li>
-     * <li>Otherwise, call
-     * <code>Application.createConverter(Class)</code>
-     * to locate any registered {@link Converter} capable of
-     * converting data values of the specified type.</li>
-     * </ul>
-     * </li>
-     * </ul>
-     * <li>If a {@link Converter} instance was located, call its
-     * <code>getAsObject()</code> method to perform the conversion.
-     * <span class="changed_modified_2_0_rev_a">If conversion fails, the
-     * <code>Converter</code> will have thrown
-     * a <code>ConverterException</code> which is declared as a checked exception
-     * on this method, and thus must be handled by the caller.</span></li>
-     * <li>Otherwise, use the submitted value without any conversion</li>
-     * </ul>
-     * </li>
-     * <p/>
-     * </p>
-     * <p/>
-     * <p>This method can be overridden by subclasses for more specific
-     * behavior.</p>
-     */
-
-
-    protected Object getConvertedValue(FacesContext context,
-                                       Object newSubmittedValue) throws ConverterException {
-        Renderer renderer = getRenderer(context);
-        Object newValue;
-
-        if (renderer != null) {
-            newValue = renderer.getConvertedValue(context, this,
-                 newSubmittedValue);
-        } else if (newSubmittedValue instanceof String) {
-            // If there's no Renderer, and we've got a String,
-            // run it through the Converter (if any)
-            Converter converter = getConverterWithType(context);
-            if (converter != null) {
-                newValue = converter.getAsObject(context, this,
-                     (String) newSubmittedValue);
-            } else {
-                newValue = newSubmittedValue;
-            }
-        } else {
-            newValue = newSubmittedValue;
-        }
-        return newValue;
-    }
-
-    /**
-     * <p><span class="changed_modified_2_0">Set</span> the "valid"
-     * property according to the below algorithm.</p>
-
-     * <ul>
-
-     * <li>
-
-     * <p>If the <code>valid</code> property on this component is
-     * still <code>true</code>, and the <code>required</code> property
-     * is also <code>true</code>, ensure that the local value is not
-     * empty (where "empty" is defined as <code>null</code> or a
-     * zero-length String).  If the local value is empty:</p>
-
-     * <ul>
-
-     * <li><p>Enqueue an appropriate error message by calling the
-     * <code>addMessage()</code> method on the <code>FacesContext</code>
-     * instance for the current request.  If the {@link
-     * #getRequiredMessage} returns non-<code>null</code>, use the value
-     * as the <code>summary</code> and <code>detail</code> in the {@link
-     * FacesMessage} that is enqueued on the <code>FacesContext</code>,
-     * otherwise use the message for the {@link #REQUIRED_MESSAGE_ID}.
-     * </li> <li>Set the <code>valid</code> property on this component
-     * to <code>false</code>.</p></li> 
-
-     * <li><p class="changed_modified_2_0">If calling {@link
-     * ValidatorException#getFacesMessages} returns
-     * non-<code>null</code>, each message should be added to the
-     * <code>FacesContext</code>.  Otherwise the single message returned
-     * from {@link ValidatorException#getFacesMessage} should be
-     * added.</p></li>
-     *
-     * </ul>
-
-     * </li>
-     *
-     *
-     * <li class="changed_added_2_0"><p>Otherwise, if the
-     * <code>valid</code> property on this component is still
-     * <code>true</code>, take the following action to determine if
-     * validation of this component should proceed.</p>
-
-     * <ul>
-     *
-     * <li><p>If the value is not empty, validation should proceed.</p></li>
-
-     * <li><p>If the value is empty, but the system has been directed to
-     * validate empty fields, validation should proceed.  The
-     * implementation must obtain the init parameter <code>Map</code>
-     * from the <code>ExternalContext</code> and inspect the value for
-     * the key given by the value of the symbolic constant {@link
-     * #VALIDATE_EMPTY_FIELDS_PARAM_NAME}.  If there is no value under
-     * that key, use the same key and look in the application map from
-     * the <code>ExternalContext</code>.  If the value is
-     * <code>null</code> or equal to the string
-     * “<code>auto</code>” (without the quotes) take
-     * appropriate action to determine if Bean Validation is present in
-     * the runtime environment.  If not, validation should not proceed.
-     * If so, validation should proceed.  If the value is equal
-     * (ignoring case) to “<code>true</code>” (without the
-     * quotes) validation should proceed.  Otherwise, validation should
-     * not proceed.</p></li>
-
-     * <p>If the above determination indicates that validation should
-     * proceed, call the <code>validate()</code> method of each {@link
-     * Validator} registered for this {@link UIInput}, followed by the
-     * method pointed at by the <code>validatorBinding</code> property
-     * (if any).  If any of these validators or the method throws a
-     * {@link ValidatorException}, catch the exception, add its message
-     * (if any) to the {@link FacesContext}, and set the
-     * <code>valid</code> property of this component to false.</li>
-
-     * </ul>
-     */
-
-    protected void validateValue(FacesContext context, Object newValue) {
-        // If our value is valid, enforce the required property if present
-        if (isValid() && isRequired() && isEmpty(newValue)) {
-            String requiredMessageStr = getRequiredMessage();
-            FacesMessage message;
-            if (null != requiredMessageStr) {
-                message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                           requiredMessageStr,
-                                           requiredMessageStr);
-            } else {
-                message =
-                     MessageFactory.getMessage(context, REQUIRED_MESSAGE_ID,
-                          MessageFactory.getLabel(
-                               context, this));
-            }
-            context.addMessage(getClientId(context), message);
-            setValid(false);
-        }
-
-        // If our value is valid and not empty or empty w/ validate empty fields enabled, call all validators
-        if (isValid() && (!isEmpty(newValue) || validateEmptyFields(context))) {
-            if (validators != null) {
-                Validator[] validators = this.validators.asArray(Validator.class);
-                for (Validator validator : validators) {
-                    try {
-                        validator.validate(context, this, newValue);
-                    }
-                    catch (ValidatorException ve) {
-                        // If the validator throws an exception, we're
-                        // invalid, and we need to add a message
-                        setValid(false);
-                        FacesMessage message;
-                        String validatorMessageString = getValidatorMessage();
-
-                        if (null != validatorMessageString) {
-                            message =
-                                  new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                   validatorMessageString,
-                                                   validatorMessageString);
-                            message.setSeverity(FacesMessage.SEVERITY_ERROR);
-                        } else {
-                            Collection<FacesMessage> messages = ve.getFacesMessages();
-                            if (null != messages) {
-                                message = null;
-                                String cid = getClientId(context);
-                                for (FacesMessage m : messages) {
-                                    context.addMessage(cid, m);
-                                }
-                            } else {
-                                message = ve.getFacesMessage();
-                            }
-                        }
-                        if (message != null) {
-                            context.addMessage(getClientId(context), message);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if the new value is different from the
-     * previous value.</p>
-     *
-     * @param previous old value of this component (if any)
-     * @param value    new value of this component (if any)
-     */
-    protected boolean compareValues(Object previous, Object value) {
-
-        if (previous == null) {
-            return (value != null);
-        } else if (value == null) {
-            return (true);
-        } else {
-            return (!(previous.equals(value)));
-        }
-
-    }
-
-
-    /**
-     * Executes validation logic.
-     */
-    private void executeValidate(FacesContext context) {
-        try {
-            validate(context);
-        } catch (RuntimeException e) {
-            context.renderResponse();
-            throw e;
-        }
-
-        if (!isValid()) {
-            context.validationFailed();
-            context.renderResponse();
-        }
-    }
-
-    public static boolean isEmpty(Object value) {
-
-        if (value == null) {
-            return (true);
-        } else if ((value instanceof String) &&
-             (((String) value).length() < 1)) {
-            return (true);
-        } else if (value.getClass().isArray()) {
-            if (0 == java.lang.reflect.Array.getLength(value)) {
-                return (true);
-            }
-        } else if (value instanceof List) {
-            if (((List) value).isEmpty()) {
-                return (true);
-            }
-        }
-        return (false);
-    }
-
-
-    /**
-     * <p>The set of {@link Validator}s associated with this
-     * <code>UIComponent</code>.</p>
-     */
-    AttachedObjectListHolder<Validator> validators;
-
-
-    /**
-     * <p>Add a {@link Validator} instance to the set associated with
-     * this {@link UIInput}.</p>
-     *
-     * @param validator The {@link Validator} to add
-     * @throws NullPointerException if <code>validator</code>
-     *                              is null
-     */
-    public void addValidator(Validator validator) {
-
-        if (validator == null) {
-            throw new NullPointerException();
-        }
-
-        if (validators == null) {
-            validators = new AttachedObjectListHolder<Validator>();
-        }
-        validators.add(validator);
-
-    }
-    
-
-    /**
-     * <p>Return the set of registered {@link Validator}s for this
-     * {@link UIInput} instance.  If there are no registered validators,
-     * a zero-length array is returned.</p>
-     */
-    public Validator[] getValidators() {
-
-        return ((validators != null) ? validators.asArray(Validator.class) : EMPTY_VALIDATOR);
-
-    }
-
-
-    /**
-     * <p>Remove a {@link Validator} instance from the set associated with
-     * this {@link UIInput}, if it was previously associated.
-     * Otherwise, do nothing.</p>
-     *
-     * @param validator The {@link Validator} to remove
-     */
-    public void removeValidator(Validator validator) {
-
-        if (validator == null) {
-            return;
-        }
-
-        if (validators != null) {
-            validators.remove(validator);
-        }
-
-    }
-
-    // ------------------------------------------------ Event Processing Methods
-
-
-    /**
-     * <p>Add a new {@link ValueChangeListener} to the set of listeners
-     * interested in being notified when {@link ValueChangeEvent}s occur.</p>
-     *
-     * @param listener The {@link ValueChangeListener} to be added
-     * @throws NullPointerException if <code>listener</code>
-     *                              is <code>null</code>
-     */
-    public void addValueChangeListener(ValueChangeListener listener) {
-
-        addFacesListener(listener);
-
-    }
-
-
-    /**
-     * <p>Return the set of registered {@link ValueChangeListener}s for this
-     * {@link UIInput} instance.  If there are no registered listeners,
-     * a zero-length array is returned.</p>
-     */
-    public ValueChangeListener[] getValueChangeListeners() {
-
-        return (ValueChangeListener[]) getFacesListeners(ValueChangeListener.class);
-    }
-
-
-    /**
-     * <p>Remove an existing {@link ValueChangeListener} (if any) from the
-     * set of listeners interested in being notified when
-     * {@link ValueChangeEvent}s occur.</p>
-     *
-     * @param listener The {@link ValueChangeListener} to be removed
-     * @throws NullPointerException if <code>listener</code>
-     *                              is <code>null</code>
-     */
-    public void removeValueChangeListener(ValueChangeListener listener) {
-
-        removeFacesListener(listener);
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-
-    private Object[] values;
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (values == null) {
-            values = new Object[4];
-        }
-
-        values[0] = super.saveState(context);
-        values[1] = emptyStringIsNull;
-        values[2] = validateEmptyFields;
-        values[3] = ((validators != null) ? validators.saveState(context) : null);
-        return (values);
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (state == null) {
-            return;
-        }
-        values = (Object[]) state;
-        super.restoreState(context, values[0]);
-        emptyStringIsNull = (Boolean) values[1];
-        validateEmptyFields = (Boolean) values[2];
-        if (values[3] != null) {
-            if (validators == null) {
-                validators = new AttachedObjectListHolder<Validator>();
-            }
-            validators.restoreState(context, values[3]);
-        }
-
-    }
-
-    private Converter getConverterWithType(FacesContext context) {
-        Converter converter = getConverter();
-        if (converter != null) {
-            return converter;
-        }
-
-        ValueExpression valueExpression = getValueExpression("value");
-        if (valueExpression == null) {
-            return null;
-        }
-
-        Class converterType;
-        try {
-            converterType = valueExpression.getType(context.getELContext());
-        }
-        catch (ELException e) {
-            throw new FacesException(e);
-        }
-
-        // if converterType is null, String, or Object, assume
-        // no conversion is needed
-        if (converterType == null ||
-             converterType == String.class ||
-             converterType == Object.class) {
-            return null;
-        }
-
-        // if getType returns a type for which we support a default
-        // conversion, acquire an appropriate converter instance.
-        try {
-            Application application = context.getApplication();
-            return application.createConverter(converterType);
-        } catch (Exception e) {
-            return (null);
-        }
-    }
-
-    private void addConversionErrorMessage(FacesContext context,
-                                           ConverterException ce) {
-        FacesMessage message;
-        String converterMessageString = getConverterMessage();
-        if (null != converterMessageString) {
-            message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                       converterMessageString,
-                                       converterMessageString);
-        } else {
-            message = ce.getFacesMessage();
-            if (message == null) {
-                message = MessageFactory.getMessage(context,
-                     CONVERSION_MESSAGE_ID);                
-                if (message.getDetail() == null) {
-                    message.setDetail(ce.getMessage());
-                }
-            }
-        }
-
-        context.addMessage(getClientId(context), message);
-    }
-
-
-    private boolean considerEmptyStringNull(FacesContext ctx) {
-
-        if (emptyStringIsNull == null) {
-            String val = ctx.getExternalContext().getInitParameter(EMPTY_STRING_AS_NULL);
-            emptyStringIsNull = Boolean.valueOf(val);
-        }
-
-        return emptyStringIsNull;
-        
-    }
-
-    private boolean validateEmptyFields(FacesContext ctx) {
-
-        if (validateEmptyFields == null) {
-            ExternalContext extCtx = ctx.getExternalContext();
-            String val = extCtx.getInitParameter(VALIDATE_EMPTY_FIELDS_PARAM_NAME);
-
-            if (null == val) {
-                val = (String) extCtx.getApplicationMap().get(VALIDATE_EMPTY_FIELDS_PARAM_NAME);
-            }
-            if (val == null || "auto".equals(val)) {
-                validateEmptyFields = isBeansValidationAvailable(ctx);
-            } else {
-                validateEmptyFields = Boolean.valueOf(val);
-            }
-        }
-
-        return validateEmptyFields;
-
-    }
-    
-    private boolean isBeansValidationAvailable(FacesContext context) {
-        boolean result = false;
-
-        Map<String,Object> appMap = context.getExternalContext().getApplicationMap();
-        
-        if (appMap.containsKey(BEANS_VALIDATION_AVAILABLE)) {
-            result = (Boolean) appMap.get(BEANS_VALIDATION_AVAILABLE);
-        } else {
-            try {
-                new BeanValidator();
-                appMap.put(BEANS_VALIDATION_AVAILABLE, result = true);
-            } catch (Throwable t) {
-                appMap.put(BEANS_VALIDATION_AVAILABLE, Boolean.FALSE);
-            }
-        }
-
-        return result;
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIMessage.java b/jsf-api/src/main/java/javax/faces/component/UIMessage.java
deleted file mode 100644
index 9875a9a..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIMessage.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><span class="changed_modified_2_0_rev_a">This</span> component is
- * responsible for displaying messages for a specific {@link
- * UIComponent}, identified by a <code>clientId</code> <span
- * class="changed_modified_2_0_rev_a"> or component id relative to the
- * closest ancestor <code>NamingContainer</code></span>.  The component
- * obtains the messages from the {@link FacesContext}.</p>
- *
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Message</code>".  This value can be changed by
- * calling the <code>setRendererType()</code> method.</p>
-
- * 
- */
-
-public class UIMessage extends UIComponentBase {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Message";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Message";
-
-
-    enum PropertyKeys {
-
-        forValue("for"),
-        showDetail,
-        showSummary,
-        redisplay;
-
-        String toString;
-
-        PropertyKeys(String toString) {
-            this.toString = toString;
-        }
-
-        PropertyKeys() {
-        }
-
-        public String toString() {
-            return ((this.toString != null) ? this.toString : super.toString());
-        }
-
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIMessage} instance with default property
-     * values.</p>
-     */
-    public UIMessage() {
-
-        super();
-        setRendererType("javax.faces.Message");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p><span class="changed_modified_2_0_rev_a">Return the Identifier
-     * of the component for which to render error messages. If this
-     * component is within the same NamingContainer as the target
-     * component, this must be the component identifier. Otherwise, it
-     * must be an absolute component identifier (starting with ":"). See
-     * the {@link UIComponent#findComponent} for more
-     * information.</span></p>
-     */
-    public String getFor() {
-
-        return (String) getStateHelper().eval(PropertyKeys.forValue);
-
-    }
-
-
-    /**
-     * <p>Set <span class="changed_modified_2_0_rev_a">the
-     * identifier</span> of the component for which this component
-     * represents associated message(s) (if any).  This property must be
-     * set before the message is displayed.</p>
-     *
-     * @param newFor The new client id
-     */
-    public void setFor(String newFor) {
-
-        getStateHelper().put(PropertyKeys.forValue, newFor);
-
-    }
-
-
-    /**
-     * <p>Return the flag indicating whether the <code>detail</code>
-     * property of the associated message(s) should be displayed.
-     * Defaults to <code>true</code>.</p>
-     */
-    public boolean isShowDetail() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.showDetail, true);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether the <code>detail</code> property
-     * of the associated message(s) should be displayed.</p>
-     *
-     * @param showDetail The new flag
-     */
-    public void setShowDetail(boolean showDetail) {
-
-        getStateHelper().put(PropertyKeys.showDetail, showDetail);
-
-    }
-
-
-    /**
-     * <p>Return the flag indicating whether the <code>summary</code>
-     * property of the associated message(s) should be displayed.
-     * Defaults to <code>false</code>.</p>
-     */
-    public boolean isShowSummary() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.showSummary, false);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether the <code>summary</code> property
-     * of the associated message(s) should be displayed.</p>
-     *
-     * @param showSummary The new flag value
-     */
-    public void setShowSummary(boolean showSummary) {
-
-        getStateHelper().put(PropertyKeys.showSummary, showSummary);
-
-    }
-
-
-    /**
-     * @return <code>true</code> if this <code>UIMessage</code> instance should
-     *  redisplay {@link javax.faces.application.FacesMessage}s that have already been handled,
-     *  otherwise returns <code>false</code>.  By default this method will
-     *  always return <code>true</code> if {@link #setRedisplay(boolean)} has
-     *  not been called.
-     *
-     * @since 2.0
-     */
-    public boolean isRedisplay() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.redisplay, true);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether the <code>detail</code> property
-     * of the associated message(s) should be displayed.</p>
-     *
-     * @param redisplay flag indicating whether previously handled messages
-     *  are redisplayed or not
-     *
-     * @since 2.0
-     */
-    public void setRedisplay(boolean redisplay) {
-
-        getStateHelper().put(PropertyKeys.redisplay, redisplay);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIMessages.java b/jsf-api/src/main/java/javax/faces/component/UIMessages.java
deleted file mode 100644
index 06b254e..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIMessages.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-
-/**
- * <p>The renderer for this component is responsible for obtaining the
- * messages from the {@link FacesContext} and displaying them to the
- * user.</p>
- *
- * <p>This component supports the <code>Messages</code> renderer-type.</p>
- *
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Messages</code>".  This value can be changed by
- * calling the <code>setRendererType()</code> method.</p>
- *
- * 
- */
-
-public class UIMessages extends UIComponentBase {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Messages";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Messages";
-
-
-    enum PropertyKeys {
-        forValue("for"),
-        globalOnly,
-        showDetail,
-        showSummary,
-        redisplay;
-
-        String toString;
-
-        PropertyKeys(String toString) {
-            this.toString = toString;
-        }
-
-        PropertyKeys() {
-        }
-
-        public String toString() {
-            return ((this.toString != null) ? this.toString : super.toString());
-        }
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIMessages} instance with default property
-     * values.</p>
-     */
-    public UIMessages() {
-
-        super();
-        setRendererType("javax.faces.Messages");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the client identifier of the
-     * component for which this component represents associated message(s)
-     * (if any).</p>
-     */
-    public String getFor() {
-
-        return (String) getStateHelper().eval(PropertyKeys.forValue);
-
-    }
-
-
-    /**
-     * <p>Set the client identifier of the component for which this
-     * component represents associated message(s) (if any).  This
-     * property must be set before the message is displayed.</p>
-     *
-     * @param newFor The new client id
-     */
-    public void setFor(String newFor) {
-
-        getStateHelper().put(PropertyKeys.forValue, newFor);
-
-    }
-
-    /**
-     * <p>Return the flag indicating whether only global messages (that
-     * is, messages with no associated client identifier) should be
-     * rendered.  Mutually exclusive with the "for" property which takes
-	 * precedence. Defaults to false.</p>
-     */
-    public boolean isGlobalOnly() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.globalOnly, false);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether only global messages (that is,
-     * messages with no associated client identifier) should be rendered.</p>
-     *
-     * @param globalOnly The new flag value
-     */
-    public void setGlobalOnly(boolean globalOnly) {
-
-        getStateHelper().put(PropertyKeys.globalOnly, globalOnly);
-
-    }
-
-    /**
-     * <p>Return the flag indicating whether the <code>detail</code>
-     * property of the associated message(s) should be displayed.
-     * Defaults to false.</p>
-     */
-    public boolean isShowDetail() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.showDetail, false);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether the <code>detail</code> property
-     * of the associated message(s) should be displayed.</p>
-     *
-     * @param showDetail The new flag
-     */
-    public void setShowDetail(boolean showDetail) {
-
-        getStateHelper().put(PropertyKeys.showDetail, showDetail);
-    }
-
-
-    /**
-     * <p>Return the flag indicating whether the <code>summary</code>
-     * property of the associated message(s) should be displayed.
-     * Defaults to true.</p>
-     */
-    public boolean isShowSummary() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.showSummary, true);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether the <code>summary</code> property
-     * of the associated message(s) should be displayed.</p>
-     *
-     * @param showSummary The new flag value
-     */
-    public void setShowSummary(boolean showSummary) {
-
-        getStateHelper().put(PropertyKeys.showSummary, showSummary);
-
-    }
-
-
-    /**
-     * @return <code>true</code> if this <code>UIMessage</code> instance should
-     *  redisplay {@link javax.faces.application.FacesMessage}s that have already been handled,
-     *  otherwise returns <code>false</code>.  By default this method will
-     *  always return <code>true</code> if {@link #setRedisplay(boolean)} has
-     *  not been called.
-     *
-     * @since 2.0
-     */
-    public boolean isRedisplay() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.redisplay, true);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether the <code>detail</code> property
-     * of the associated message(s) should be displayed.</p>
-     *
-     * @param redisplay flag indicating whether previously handled messages
-     *  are redisplayed or not
-     *
-     * @since 2.0
-     */
-    public void setRedisplay(boolean redisplay) {
-
-        getStateHelper().put(PropertyKeys.redisplay, redisplay);
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UINamingContainer.java b/jsf-api/src/main/java/javax/faces/component/UINamingContainer.java
deleted file mode 100644
index 7ab034e..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UINamingContainer.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import java.util.Collection;
-
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><strong class="changed_modified_2_0">UINamingContainer</strong> is a
- * convenience base class for components that wish to implement {@link
- * NamingContainer} functionality.</p>
- */
-
-public class UINamingContainer extends UIComponentBase
-      implements NamingContainer, UniqueIdVendor, StateHolder {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.NamingContainer";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.NamingContainer";
-
-    /**
-     * <p class="changed_added_2_0">The context-param that allows the separator
-     * char for clientId strings to be set on a per-web application basis.</p>
-     *
-     * @since 2.0
-     */
-    public static final String SEPARATOR_CHAR_PARAM_NAME =
-          "javax.faces.SEPARATOR_CHAR";
-
-
-    enum PropertyKeys {
-           lastId
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UINamingContainer} instance with default property
-     * values.</p>
-     */
-    public UINamingContainer() {
-
-        super();
-        setRendererType(null);
-
-    }
-    
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the character used to separate
-     * segments of a clientId.  The implementation must determine if there is a
-     * <<code>context-param</code>> with the value given by the value of
-     * the symbolic constant {@link #SEPARATOR_CHAR_PARAM_NAME}.  If there is a
-     * value for this param, the first character of the value must be returned
-     * from this method.  Otherwise, the value of the symbolic constant {@link
-     * NamingContainer#SEPARATOR_CHAR} must be returned.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @since 2.0
-     */
-    public static char getSeparatorChar(FacesContext context) {
-
-
-        Character separatorChar =
-              (Character) context.getAttributes().get(SEPARATOR_CHAR_PARAM_NAME);
-        if (separatorChar == null) {
-            String initParam = context.getExternalContext().getInitParameter(SEPARATOR_CHAR_PARAM_NAME);
-            separatorChar = NamingContainer.SEPARATOR_CHAR;
-            if (initParam != null) {
-                initParam = initParam.trim();
-                if (initParam.length() != 0) {
-                    separatorChar = initParam.charAt(0);
-                }
-            }
-            context.getAttributes().put(SEPARATOR_CHAR_PARAM_NAME, separatorChar);
-        }
-        return separatorChar;
-
-    }
-
-    /**
-     * @see UIComponent#visitTree
-     */
-    @Override
-    public boolean visitTree(VisitContext context, 
-                               VisitCallback callback) {
-
-        // NamingContainers can optimize partial tree visits by taking advantage
-        // of the fact that it is possible to detect whether any ids to visit
-        // exist underneath the NamingContainer.  If no such ids exist, there
-        // is no need to visit the subtree under the NamingContainer.
-        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
-        assert(idsToVisit != null);
-
-        // If we have ids to visit, let the superclass implementation
-        // handle the visit
-        if (!idsToVisit.isEmpty()) {
-            return super.visitTree(context, callback);
-        }
-
-        // If we have no child ids to visit, just visit ourselves, if
-        // we are visitable.
-        if (isVisitable(context)) {
-            FacesContext facesContext = context.getFacesContext();
-            pushComponentToEL(facesContext, null);
-
-            try {
-                VisitResult result = context.invokeVisitCallback(this, callback);
-                return (result == VisitResult.COMPLETE);
-            }
-            finally {
-                popComponentFromEL(facesContext);
-            }
-        }
-
-        // Done visiting this subtree.  Return false to allow 
-        // visit to continue.
-        return false;
-    }
-
-     public String createUniqueId(FacesContext context, String seed) {
-        Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
-        int lastId = ((i != null) ? i : 0);
-        getStateHelper().put(PropertyKeys.lastId,  ++lastId);
-        return UIViewRoot.UNIQUE_ID_PREFIX + (seed == null ? lastId : seed);
-     }
-
-}
-
diff --git a/jsf-api/src/main/java/javax/faces/component/UIOutcomeTarget.java b/jsf-api/src/main/java/javax/faces/component/UIOutcomeTarget.java
deleted file mode 100644
index c992154..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIOutcomeTarget.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p class="changed_added_2_0">This component is paired with the
- * <code>javax.faces.Button</code> or <code>javax.faces.Link</code>
- * renderers and encapsulates properties relating to the rendering of
- * outcomes directly to the response.  This enables bookmarkability in
- * JSF applications.</p>
- *
- * @since 2.0
- */
-public class UIOutcomeTarget extends UIOutput {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.OutcomeTarget";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.OutcomeTarget";
-
-
-    enum PropertyKeys {
-        includeViewParams,
-        outcome
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIOutcomeTarget} instance with default property
-     * values.</p>
-     */
-    public UIOutcomeTarget() {
-        super();
-        setRendererType("javax.faces.Link");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    @Override
-    public String getFamily() {
-        return COMPONENT_FAMILY;
-    }
-
-    
-    /**
-     * <p class="changed_added_2_0">Return whether or not the view
-     * parameters should be encoded into the target url.</p>
-     *
-     * @since 2.0
-     */
-    public boolean isIncludeViewParams() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.includeViewParams, false);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Set whether or not the page
-     * parameters should be encoded into the target url.</p>
-     *
-     * @param includeViewParams The state of the switch for encoding
-     * page parameters
-     *
-     * @since 2.0
-     */
-    public void setIncludeViewParams(boolean includeViewParams) {
-
-        getStateHelper().put(PropertyKeys.includeViewParams, includeViewParams);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Returns the <code>outcome</code>
-     * property of the <code>UIOutcomeTarget</code>. This value is
-     * passed to the {@link javax.faces.application.NavigationHandler}
-     * when resolving the target url of this component.</p>
-     *
-     * @since 2.0
-     */
-    public String getOutcome() {
-
-        return (String) getStateHelper().eval(PropertyKeys.outcome);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Sets the <code>outcome</code>
-     * property of the <code>UIOutcomeTarget</code>.  This value is
-     * passed to the NavigationHandler when resolving the target url of
-     * this component.</p>
-     *
-     * @since 2.0
-     *
-     * @param outcome the navigation outcome
-     */
-    public void setOutcome(String outcome) {
-
-        getStateHelper().put(PropertyKeys.outcome, outcome);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIOutput.java b/jsf-api/src/main/java/javax/faces/component/UIOutput.java
deleted file mode 100644
index e89e94f..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIOutput.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-
-
-/**
- * <p><strong>UIOutput</strong> is a {@link UIComponent} that has a
- * value, optionally retrieved from a model tier bean via a value
- * expression, that is displayed to the user.  The user cannot directly
- * modify the rendered value; it is for display purposes only.</p>
- *
- * <p>During the <em>Render Response</em> phase of the request processing
- * lifecycle, the current value of this component must be
- * converted to a String (if it is not already), according to the following
- * rules:</p>
- * <ul>
- * <li>If the current value is not <code>null</code>, and is not already
- *     a <code>String</code>, locate a {@link Converter} (if any) to use
- *     for the conversion, as follows:
- *     <ul>
- *     <li>If <code>getConverter()</code> returns a non-null {@link Converter},
- *         use that one, otherwise</li>
- *     <li>If <code>Application.createConverter(Class)</code>, passing the
- *         current value's class, returns a non-null {@link Converter},
- *         use that one.</li>
- *     </ul></li>
- * <li>If the current value is not <code>null</code> and a {@link Converter}
- *     was located, call its <code>getAsString()</code> method to perform
- *     the conversion.</li>
- * <li>If the current value is not <code>null</code> but no {@link Converter}
- *     was located, call <code>toString()</code> on the current value to perform
- *     the conversion.</li>
- * </ul>
- *
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Text</code>".  This value can be changed by calling the
- * <code>setRendererType()</code> method.</p>
- */
-
-public class UIOutput extends UIComponentBase
-    implements ValueHolder {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Output";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Output";
-
-
-    enum PropertyKeys {
-        value,
-        converter
-    }
-
-    private Converter converter;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIOutput} instance with default property
-     * values.</p>
-     */
-    public UIOutput() {
-
-        super();
-        setRendererType("javax.faces.Text");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    // --------------------------------------- EditableValueHolder Properties
-
-
-    public Converter getConverter() {
-
-        if (this.converter != null) {
-            return (this.converter);
-        }
-        return (Converter) getStateHelper().eval(PropertyKeys.converter);
-
-    }
-
-
-    public void setConverter(Converter converter) {
-
-        clearInitialState();
-        // we don't push the converter to the StateHelper
-        // if it's been explicitly set (i.e. it's not a ValueExpression
-        // reference
-        this.converter = converter;
-
-    }
-
-
-    public Object getLocalValue() {
-
-        return getStateHelper().get(PropertyKeys.value);
-
-    }
-
-
-    public Object getValue() {
-
-        return getStateHelper().eval(PropertyKeys.value);
-
-    }
-
-
-    public void setValue(Object value) {
-
-        getStateHelper().put(PropertyKeys.value, value);
-
-    }
-
-
-    /**
-     * <p>
-     * In addition to the actions taken in {@link UIComponentBase}
-     * when {@link PartialStateHolder#markInitialState()} is called,
-     * check if the installed {@link Converter} is a PartialStateHolder and
-     * if it is, call {@link javax.faces.component.PartialStateHolder#markInitialState()}
-     * on it.
-     * </p>
-     */
-    @Override
-    public void markInitialState() {
-
-        super.markInitialState();
-        Converter c = getConverter();
-        if (c != null && c instanceof PartialStateHolder) {
-            ((PartialStateHolder) c).markInitialState();
-        }
-
-    }
-
-
-    @Override
-    public void clearInitialState() {
-
-        if (initialStateMarked()) {
-            super.clearInitialState();
-            Converter c = getConverter();
-            if (c != null && c instanceof PartialStateHolder) {
-                ((PartialStateHolder) c).clearInitialState();
-            }
-        }
-
-    }
-
-
-    @Override
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        Object[] values = (Object[]) super.saveState(context);
-        Object converterState = null;
-        if (converter != null) {
-            if (!initialStateMarked()) {
-                // we saving the full state
-                converterState = saveAttachedState(context, converter);
-            } else {
-                if (converter instanceof StateHolder) {
-                    StateHolder sh = (StateHolder) converter;
-                    if (!sh.isTransient()) {
-                        converterState = ((StateHolder) converter).saveState(context);
-                    }
-                }
-            }
-        }
-        if (converterState != null || values != null) {
-            return new Object[] { values, converterState };
-        }
-        return values;
-
-    }
-
-    
-    @Override
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (state == null) {
-            return;
-        }
-        Object[] values = (Object[]) state;
-        super.restoreState(context, values[0]);
-        Object converterState = values[1];
-        if (converterState instanceof StateHolderSaver) {
-            // this means full state was saved and as such
-            // overwrite any existing converter with the saved
-            // converter
-            converter = (Converter) restoreAttachedState(context,
-                                                         converterState);
-        } else {
-            // apply any saved state to the existing converter
-            if (converterState != null && converter instanceof StateHolder) {
-                ((StateHolder) converter)
-                      .restoreState(context, converterState);
-            }
-        }
-
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIPanel.java b/jsf-api/src/main/java/javax/faces/component/UIPanel.java
deleted file mode 100644
index 1cb2431..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIPanel.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-/**
- * <p><strong>UIPanel</strong> is a {@link UIComponent} that manages the
- * layout of its child components.</p>
- */
-
-public class UIPanel extends UIComponentBase {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Panel";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Panel";
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIPanel} instance with default property
-     * values.</p>
-     */
-    public UIPanel() {
-
-        super();
-        setRendererType(null);
-
-    }
-
-
-    // -------------------------------------------------- UIComponent Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIParameter.java b/jsf-api/src/main/java/javax/faces/component/UIParameter.java
deleted file mode 100644
index 95c45cf..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIParameter.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-
-/**
- * <p><strong>UIParameter</strong> is a {@link UIComponent} that represents
- * an optionally named configuration parameter for a parent component.</p>
- *
- * <p>Parent components should retrieve the value of a parameter by calling
- * <code>getValue()</code>.  In this way, the parameter value can be set
- * directly on the component (via <code>setValue()</code>), or retrieved
- * indirectly via the value binding expression.</p>
- *
- * <p>In some scenarios, it is necessary to provide a parameter name, in
- * addition to the parameter value that is accessible via the
- * <code>getValue()</code> method.
- * {@link javax.faces.render.Renderer}s that support parameter names on their
- * nested {@link UIParameter} child components should document
- * their use of this property.</p>
- *
- */
-
-public class UIParameter extends UIComponentBase {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.Parameter";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.Parameter";
-
-
-    enum PropertyKeys {
-        name,
-        value,
-        disble
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIParameter} instance with default property
-     * values.</p>
-     */
-    public UIParameter() {
-
-        super();
-        setRendererType(null);
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the optional parameter name for this parameter.</p>
-     */
-    public String getName() {
-
-        return (String) getStateHelper().eval(PropertyKeys.name);
-
-    }
-
-
-    /**
-     * <p>Set the optional parameter name for this parameter.</p>
-     *
-     * @param name The new parameter name,
-     *  or <code>null</code> for no name
-     */
-    public void setName(String name) {
-
-        getStateHelper().put(PropertyKeys.name, name);
-
-    }
-
-
-
-    /**
-     * <p>Returns the <code>value</code> property of the
-     * <code>UIParameter</code>.</p>
-     */
-    public Object getValue() {
-
-        return getStateHelper().eval(PropertyKeys.value);
-
-    }
-
-
-    /**
-     * <p>Sets the <code>value</code> property of the\
-     * <code>UIParameter</code>.</p>
-     *
-     * @param value the new value
-     */
-    public void setValue(Object value) {
-
-        getStateHelper().put(PropertyKeys.value, value);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the value of the <code>disable</code>
-     * directive for this component. This directive determines whether the
-     * parameter value should be disabled by assigning it a null value.
-     * If true, the <code>value</code> set on this component is ignored.</p>
-     * @since 2.0
-     */
-    public boolean isDisable() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.disble, false);
-
-    }
-
-    /**
-     * <p>Sets the <code>disable</code> property of the <code>UIParameter</code>.</p>
-     * @param disable
-     * @since 2.0
-     */
-    public void setDisable(boolean disable) {
-
-        getStateHelper().put(PropertyKeys.disble, disable);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UISelectBoolean.java b/jsf-api/src/main/java/javax/faces/component/UISelectBoolean.java
deleted file mode 100644
index 61ccdfe..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UISelectBoolean.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.el.ValueExpression;
-import javax.faces.el.ValueBinding;
-
-
-/**
- * <p><strong>UISelectBoolean</strong> is a {@link UIComponent} that
- * represents a single boolean (<code>true</code> or <code>false</code>) value.
- * It is most commonly rendered as a checkbox.</p>
- *
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Checkbox</code>".  This value can be changed by
- * calling the <code>setRendererType()</code> method.</p>
- */
-
-public class UISelectBoolean extends UIInput {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.SelectBoolean";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.SelectBoolean";
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UISelectBoolean} instance with default
-     * property values.</p>
-     */
-    public UISelectBoolean() {
-
-        super();
-        setRendererType("javax.faces.Checkbox");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the local value of the selected state of this component.
-     * This method is a typesafe alias for <code>getValue()</code>.</p>
-     */
-    public boolean isSelected() {
-
-        Boolean value = (Boolean) getValue();
-        if (value != null) {
-            return (value.booleanValue());
-        } else {
-            return (false);
-        }
-
-    }
-
-
-    /**
-     * <p>Set the local value of the selected state of this component.
-     * This method is a typesafe alias for <code>setValue()</code>.</p>
-     *
-     * @param selected The new selected state
-     */
-    public void setSelected(boolean selected) {
-
-        if (selected) {
-            setValue(Boolean.TRUE);
-        } else {
-            setValue(Boolean.FALSE);
-        }
-
-    }
-
-
-    // ---------------------------------------------------------------- Bindings
-
-
-    /**
-     * <p>Return any {@link ValueBinding} set for <code>value</code> if a
-     * {@link ValueBinding} for <code>selected</code> is requested; otherwise,
-     * perform the default superclass processing for this method.</p>
-     *
-     * <p>Rely on the superclass implementation to wrap the returned
-     * <code>ValueExpression</code> in a <code>ValueBinding</code>.</p>
-     *
-     * @param name Name of the attribute or property for which to retrieve
-     *  a {@link ValueBinding}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated This has been replaced by {@link
-     * #getValueExpression}.
-     */
-    public ValueBinding getValueBinding(String name) {
-
-        if ("selected".equals(name)) {
-            return (super.getValueBinding("value"));
-        } else {
-            return (super.getValueBinding(name));
-        }
-
-    }
-
-
-    /**
-     * <p>Store any {@link ValueBinding} specified for <code>selected</code>
-     * under <code>value</code> instead; otherwise, perform the default
-     * superclass processing for this method.</p>
-     *
-     * <p>Rely on the superclass implementation to wrap the argument
-     * <code>ValueBinding</code> in a <code>ValueExpression</code>.</p>
-     *
-     * @param name Name of the attribute or property for which to set
-     *  a {@link ValueBinding}
-     * @param binding The {@link ValueBinding} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueBinding}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated This has been replaced by {@link #setValueExpression}.
-     */
-    public void setValueBinding(String name, ValueBinding binding) {
-
-        if ("selected".equals(name)) {
-            super.setValueBinding("value", binding);
-        } else {
-            super.setValueBinding(name, binding);
-        }
-
-    }
-
-    /**
-     * <p>Return any {@link ValueExpression} set for <code>value</code>
-     * if a {@link ValueExpression} for <code>selected</code> is
-     * requested; otherwise, perform the default superclass processing
-     * for this method.</p>
-     *
-     * @param name Name of the attribute or property for which to retrieve
-     *  a {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     * @since 1.2
-     */
-    public ValueExpression getValueExpression(String name) {
-
-        if ("selected".equals(name)) {
-            return (super.getValueExpression("value"));
-        } else {
-            return (super.getValueExpression(name));
-        }
-
-    }
-    
-    /**
-     * <p>Store any {@link ValueExpression} specified for <code>selected</code>
-     * under <code>value</code> instead; otherwise, perform the default
-     * superclass processing for this method.</p>
-     *
-     * @param name Name of the attribute or property for which to set
-     *  a {@link ValueExpression}
-     * @param binding The {@link ValueExpression} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     * @since 1.2
-     */
-    public void setValueExpression(String name, ValueExpression binding) {
-
-        if ("selected".equals(name)) {
-            super.setValueExpression("value", binding);
-        } else {
-            super.setValueExpression(name, binding);
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UISelectItem.java b/jsf-api/src/main/java/javax/faces/component/UISelectItem.java
deleted file mode 100644
index 2765179..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UISelectItem.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.model.SelectItem;
-
-
-
-/**
- * <p><strong class="changed_modified_2_0">UISelectItem</strong> is a
- * component that may be nested inside a {@link UISelectMany} or {@link
- * UISelectOne} component, and causes the addition of a {@link
- * SelectItem} instance to the list of available options for the parent
- * component.  The contents of the {@link SelectItem} can be specified
- * in one of the following ways:</p> <ul> <li>The <code>value</code>
- * attribute's value is an instance of {@link SelectItem}.</li> <li>The
- * associated {@link javax.el.ValueExpression} points at a model data
- * item of type {@link SelectItem}.</li> <li>A new {@link SelectItem}
- * instance is synthesized from the values of the
- * <code>itemDescription</code>, <code>itemDisabled</code>,
- * <code>itemLabel</code>, <code>itemEscaped</code>, and
- * <code>itemValue</code> attributes.</li> </ul>
- */
-
-public class UISelectItem extends UIComponentBase {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.SelectItem";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.SelectItem";
-
-
-    enum PropertyKeys {
-        itemDescription,
-        itemDisabled,
-        itemEscaped,
-        itemLabel,
-        itemValue,
-        value,
-        noSelectionOption
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UISelectItem} instance with default property
-     * values.</p>
-     */
-    public UISelectItem() {
-
-        super();
-        setRendererType(null);
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the description for this selection item.</p>
-     */
-    public String getItemDescription() {
-
-        return (String) getStateHelper().eval(PropertyKeys.itemDescription);
-
-    }
-
-
-    /**
-     * <p>Set the description for this selection item.</p>
-     *
-     * @param itemDescription The new description
-     */
-    public void setItemDescription(String itemDescription) {
-
-        getStateHelper().put(PropertyKeys.itemDescription, itemDescription);
-
-    }
-
-    /**
-     * <p>Return the disabled setting for this selection item.</p>
-     */
-    public boolean isItemDisabled() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.itemDisabled, false);
-
-    }
-
-    /**
-     * <p>Set the disabled value for this selection item.</p>
-     *
-     * @param itemDisabled The new disabled flag
-     */
-    public void setItemDisabled(boolean itemDisabled) {
-
-        getStateHelper().put(PropertyKeys.itemDisabled, itemDisabled);
-
-    }
-    
-    /**
-     * <p>Return the escape setting for the label of this selection item.</p>
-     */
-    public boolean isItemEscaped() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.itemEscaped, true);
-
-    }
-
-    /**
-     * <p>Set the escape value for the label of this selection item.</p>
-     *
-     * @param itemEscaped The new disabled flag
-     */
-    public void setItemEscaped(boolean itemEscaped) {
-
-        getStateHelper().put(PropertyKeys.itemEscaped, itemEscaped);
-
-    }
-    
-
-    /**
-     * <p>Return the localized label for this selection item.</p>
-     */
-    public String getItemLabel() {
-
-        return (String) getStateHelper().eval(PropertyKeys.itemLabel);
-
-    }
-
-
-    /**
-     * <p>Set the localized label for this selection item.</p>
-     *
-     * @param itemLabel The new localized label
-     */
-    public void setItemLabel(String itemLabel) {
-
-        getStateHelper().put(PropertyKeys.itemLabel, itemLabel);
-
-    }
-
-
-    /**
-     * <p>Return the server value for this selection item.</p>
-     */
-    public Object getItemValue() {
-
-        return getStateHelper().eval(PropertyKeys.itemValue);
-
-    }
-
-
-    /**
-     * <p>Set the server value for this selection item.</p>
-     *
-     * @param itemValue The new server value
-     */
-    public void setItemValue(Object itemValue) {
-
-        getStateHelper().put(PropertyKeys.itemValue, itemValue);
-
-    }
-
-
-
-    /**
-     * <p>Returns the <code>value</code> property of the
-     * <code>UISelectItem</code>.</p>
-     */
-    public Object getValue() {
-
-        return getStateHelper().eval(PropertyKeys.value);
-
-    }
-
-
-    /**
-     * <p>Sets the <code>value</code> property of the
-     * <code>UISelectItem</code>.</p>
-     * 
-     * @param value the new value
-     */
-    public void setValue(Object value) {
-
-        getStateHelper().put(PropertyKeys.value,  value);
-
-    }
-    
-    /** <p class="changed_added_2_0">Return the value of the
-     * <code>noSelectionOption</code> property.  If the value of this
-     * property is <code>true</code>, the system interprets the option
-     * represented by this <code>UISelectItem</code> instance as
-     * representing a "no selection" option.  See {@link
-     * UISelectOne#validateValue} and {@link UISelectMany#validateValue}
-     * for usage.</p>
-     *
-     * @since 2.0
-     */
-    public boolean isNoSelectionOption() {
-
-        return (Boolean) getStateHelper().eval(PropertyKeys.noSelectionOption, false);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Set the value of the
-     * <code>noSelectionOption</code> property.</p>
-     *
-     * @since 2.0
-     */
-    public void setNoSelectionOption(boolean noSelectionOption) {
-
-        getStateHelper().put(PropertyKeys.noSelectionOption, noSelectionOption);
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UISelectItems.java b/jsf-api/src/main/java/javax/faces/component/UISelectItems.java
deleted file mode 100644
index 32bdd1d..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UISelectItems.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.model.SelectItem;
-
-
-/**
- * <p><strong>UISelectItems</strong> is a component that may be nested
- * inside a {@link UISelectMany} or {@link UISelectOne} component, and
- * causes the addition of one or more {@link SelectItem} instances to the
- * list of available options in the parent component.  The
- * <code>value</code> of this component (set either directly, or acquired
- * indirectly a {@link javax.el.ValueExpression}, can be of any
- * of the following types:</p>
- * <ul>
- * <li><em>Single instance of {@link SelectItem}</em> - This instance is
- *     added to the set of available options for the parent tag.</li>
- * <li><em>Array of {@link SelectItem}</em> - This set of instances is
- *     added to the set of available options for the parent component,
- *     in ascending subscript order.</li>
- * <li><em>Collection of {@link SelectItem}</em> - This set of instances is
- *     added to the set of available options for the parent component,
- *     in the order provided by an iterator over them.</li>
- * <li><em>Map</em> - The keys of this object (once converted to
- *     Strings) are assumed to be labels, and the values of this object
- *     (once converted to Strings)
- *     are assumed to be values, of {@link SelectItem} instances that will
- *     be constructed dynamically and added to the set of available options
- *     for the parent component, in the order provided by an iterator over
- *     the keys.</li>
- * </ul>
- */
-
-public class UISelectItems extends UIComponentBase {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.SelectItems";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.SelectItems";
-
-
-    enum PropertyKeys {
-        value
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UISelectItems} instance with default property
-     * values.</p>
-     */
-    public UISelectItems() {
-
-        super();
-        setRendererType(null);
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    // -------------------------------------------------- ValueHolder Properties
-
-
-    /**
-     * <p>Returns the <code>value</code> property of the
-     * <code>UISelectItems</code>.</p>
-     */
-    public Object getValue() {
-
-        return getStateHelper().eval(PropertyKeys.value);
-
-    }
-
-
-    /**
-     * <p>Sets the <code>value</code> property of the
-     * <code>UISelectItems</code>.</p>
-     * 
-     * @param value the new value
-     */
-    public void setValue(Object value) {
-
-        getStateHelper().put(PropertyKeys.value, value);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UISelectMany.java b/jsf-api/src/main/java/javax/faces/component/UISelectMany.java
deleted file mode 100644
index 0c852bc..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UISelectMany.java
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.lang.reflect.Array;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import javax.el.ValueExpression;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.convert.Converter;
-
-
-/**
- * <p><strong class="changed_modified_2_0">UISelectMany</strong> is a
- * {@link UIComponent} that represents the user's choice of a zero or
- * more items from among a discrete set of available options.  The user
- * can modify the selected values.  Optionally, the component can be
- * preconfigured with zero or more currently selected items, by storing
- * them as an array <span class="changed_added_2_0">or
- * <code>Collection</code></span> in the <code>value</code> property of
- * the component.</p>
- *
- * <p>This component is generally rendered as a select box or a group of
- * checkboxes.</p>
- *
- * <p>By default, the <code>rendererType</code> property must be set to
- * "<code>javax.faces.Listbox</code>".  This value can be changed by
- * calling the <code>setRendererType()</code> method.</p>
- *
- * <p>The {@link javax.faces.render.Renderer} for this component must
- * perform the following logic on <a
- * name="#getConvertedValue"><code>getConvertedValue()</code></a>:</p>
- *
- * <ul>
- *
- * <p>Obtain the {@link javax.faces.convert.Converter} using the following algorithm:</p>
- *
- * <ul> 
- *
- * <p>If the component has an attached {@link javax.faces.convert.Converter}, use it.</p>
- *
- * <p>If not, look for a {@link ValueExpression} for <code>value</code>
- * (if any).  The {@link ValueExpression} must point to something that
- * is:</p>
- *
- * <ul> <li><p>An array of primitives (such as <code>int[]</code>).
- * Look up the registered by-class {@link javax.faces.convert.Converter}
- * for this primitive type.</p></li> 
-
- * <li><p>An array of objects (such as <code>Integer[]</code> or
- * <code>String[]</code>).  Look up the registered by-class {@link
- * javax.faces.convert.Converter} for the underlying element
- * type.</p></li> 
-
- * <li class="changed_added_2_0"><p>A <code>java.util.Collection</code>.
- * Do not convert the values.</p></li>
-
- * </ul>
- *
- * <p>If for any reason a <code>Converter</code> cannot be found, assume
- * the type to be a String array.</p>
-
- * </ul>
-
- * <p>Use the selected {@link javax.faces.convert.Converter} (if any) to
- * convert each element in the values array from the request to the
- * proper type, <span class="changed_added_2_0">and store the result of
- * each conversion in a data structure, called
- * <em>targetForConvertedValues</em> for discussion.  Create
- * <em>targetForConvertedValues</em> using the following
- * algorithm.</span></p>
-
- * <div class="changed_added_2_0">
-
- * <ul>
-
- * <li><p>If the component has a <code>ValueExpression</code> for
- * <code>value</code> and the type of the expression is an array, let
- * <em>targetForConvertedValues</em> be a new array of the expected
- * type.</p></li>
-
-
- * <li><p>If the component has a <code>ValueExpression</code> for
- * <code>value</code>, let <em>modelType</em> be the type of the value
- * expression.  If <em>modelType</em> is a <code>Collection</code>, do
- * the following to arrive at <em>targetForConvertedValues</em>:</p>
-
- * <ul>
-
- * <li><p>Ask the component for its attribute under the key
- * "<code>collectionType</code>", without the quotes.  If there is a
- * value for that key, the value must be a String that is a fully
- * qualified Java class name, or a <code>Class</code> object, or a
- * <code>ValueExpression</code> that evaluates to a String or a
- * <code>Class</code>.  In all cases, the value serves to identify the
- * concrete type of the class that implements <code>Collection</code>.
- * For discussion, this is called <em>collectionType</em>.  Let
- * <em>targetForConvertedValues</em> be a new instance of
- * <code>Collection</code> implemented by the concrete class specified
- * in <em>collectionType</em>.  If, <em>collectionType</em> can not be
- * discovered, or an instance of <code>Collection</code> implemented by
- * the concrete class specified in <em>collectionType</em> cannot be
- * created, throw a {@link javax.faces.FacesException} with a correctly
- * localized error message.  Note that <code>FacesException</code> is
- * thrown instead of <code>ConverterException</code> because this case
- * would only arise from developer error, rather than end-user
- * error.</p></li>
-
- * <li><p>If there is no "<code>collectionType</code>" attribute, call
- * <code>getValue()</code> on the component.  The result will implement
- * <code>Collection</code>.  If the result also implements
- * <code>Cloneable</code>, let <em>targetForConvertedValues</em> be the
- * result of calling its <code>clone()</code> method, then calling
- * <code>clear()</code> on the cloned <code>Collection</code>.  If
- * unable to clone the value for any reason, log a message and proceed
- * to the next step.</p></li>
-
- * <li><p>If <em>modelType</em> is a concrete class, let
- * <em>targetForConvertedValues</em> be a new instance of that class.
- * Otherwise, the concrete type for <em>targetForConvertedValues</em> is
- * taken from the following table.  All classes are in the
- * <code>java.util</code> package.  All collections must be created with
- * an initial capacity equal to the length of the values array from the
- * request.</p>
-
- * <table border="1">
-
- * <tr>
-
- * <th>If <em>modelType</em> is an instance of</th>
- 
- * <th>then <em>targetForConvertedValues</em> must be an instance
- * of</th>
-
- * </tr>
-
- * <tr>
-
- * <td><code>SortedSet</code></td>
-
- * <td><code>TreeSet</code></td>
-
- * </tr>
-
- * <tr>
-
- * <td><code>Queue</code></td>
-
- * <td><code>LinkedList</code></td>
-
- * </tr>
-
- * <tr>
-
- * <td><code>Set</code></td>
-
- * <td><code>HashSet</code></td>
-
- * </tr>
-
- * <tr>
-
- * <td>anything else</td>
-
- * <td><code>ArrayList</code></td>
-
- * </tr>
-
- * </table>
-
- * </li>
-
- * </ul>
-
- * <li><p>If the component does not have a <code>ValueExpression</code>
- * for <code>value</code>, let <em>targetForConvertedValues</em> be an
- * array of type <code>Object</code>.</p>
-
- * </ul>
-
- * </div>
-
- * <p>Return <em>targetForConvertedValues</em> after populating it with
- * the converted values.</p>
-
- * </ul>
- *
- */
-
-public class UISelectMany extends UIInput {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.SelectMany";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.SelectMany";
-
-
-    /**
-     * <p>The message identifier of the
-     * {@link javax.faces.application.FacesMessage} to be created if
-     * a value not matching the available options is specified.
-     */
-    public static final String INVALID_MESSAGE_ID =
-        "javax.faces.component.UISelectMany.INVALID";
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UISelectMany} instance with default property
-     * values.</p>
-     */
-    public UISelectMany() {
-
-        super();
-        setRendererType("javax.faces.Listbox");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the currently selected values, or <code>null</code> if there
-     * are no currently selected values.  This is a typesafe alias for
-     * <code>getValue()</code>.</p>
-     */
-    public Object[] getSelectedValues() {
-
-        return ((Object[]) getValue());
-
-    }
-
-
-    /**
-     * <p>Set the currently selected values, or <code>null</code> to indicate
-     * that there are no currently selected values.  This is a typesafe
-     * alias for <code>setValue()</code>.</p>
-     *
-     * @param selectedValues The new selected values (if any)
-     */
-    public void setSelectedValues(Object selectedValues[]) {
-
-        setValue(selectedValues);
-
-    }
-
-
-    // ---------------------------------------------------------------- Bindings
-
-
-    /**
-     * <p>Return any {@link ValueBinding} set for <code>value</code> if
-     * a {@link ValueBinding} for <code>selectedValues</code> is
-     * requested; otherwise, perform the default superclass processing
-     * for this method.</p>
-     *
-     * <p>This method relies on the superclass to provide the
-     * <code>ValueExpression</code> to <code>ValueBinding</code>
-     * wrapping.</p>
-     *
-     * @param name Name of the attribute or property for which to retrieve
-     *  a {@link ValueBinding}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated this has been replaced by {@link #getValueExpression(java.lang.String)}.
-     */
-    public ValueBinding getValueBinding(String name) {
-
-        if ("selectedValues".equals(name)) {
-            return (super.getValueBinding("value"));
-        } else {
-            return (super.getValueBinding(name));
-        }
-
-    }
-
-
-    /**
-     * <p>Store any {@link ValueBinding} specified for
-     * <code>selectedValues</code> under <code>value</code> instead;
-     * otherwise, perform the default superclass processing for this
-     * method.</p>
-     *
-     * <p>This method relies on the superclass to wrap the argument
-     * <code>ValueBinding</code> in a <code>ValueExpression</code>.</p>
-     *
-     * @param name Name of the attribute or property for which to set
-     *  a {@link ValueBinding}
-     * @param binding The {@link ValueBinding} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueBinding}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     *
-     * @deprecated This has been replaced by {@link #setValueExpression(java.lang.String, javax.el.ValueExpression)}.
-     */
-    public void setValueBinding(String name, ValueBinding binding) {
-
-        if ("selectedValues".equals(name)) {
-            super.setValueBinding("value", binding);
-        } else {
-            super.setValueBinding(name, binding);
-        }
-
-    }
-
-    /**
-     * <p>Return any {@link ValueExpression} set for <code>value</code> if a
-     * {@link ValueExpression} for <code>selectedValues</code> is requested;
-     * otherwise, perform the default superclass processing for this method.</p>
-     *
-     * @param name Name of the attribute or property for which to retrieve
-     *  a {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     * @since 1.2
-     */
-    public ValueExpression getValueExpression(String name) {
-
-        if ("selectedValues".equals(name)) {
-            return (super.getValueExpression("value"));
-        } else {
-            return (super.getValueExpression(name));
-        }
-
-    }
-    
-    /**
-     * <p>Store any {@link ValueExpression} specified for
-     * <code>selectedValues</code> under <code>value</code> instead;
-     * otherwise, perform the default superclass processing for this method.</p>
-     *
-     * @param name Name of the attribute or property for which to set
-     *  a {@link ValueExpression}
-     * @param binding The {@link ValueExpression} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     * @since 1.2
-     */
-    public void setValueExpression(String name, ValueExpression binding) {
-
-        if ("selectedValues".equals(name)) {
-            super.setValueExpression("value", binding);
-        } else {
-            super.setValueExpression(name, binding);
-        }
-
-    }
-    
-    // --------------------------------------------------------- UIInput Methods
-
-
-    /**
-     * <p>Return <code>true</code> if the new value is different from the
-     * previous value. Value comparison must not be sensitive to element order.
-     * </p>
-     *
-     * @param previous old value of this component
-     * @param value new value of this component
-     */
-    protected boolean compareValues(Object previous, Object value) {
-
-        if ((previous == null) && (value != null)) {
-            return (true);
-        } else if ((previous != null) && (value == null)) {
-            return (true);
-        } else if ((previous == null)) {
-            return (false);
-        }
-
-        boolean valueChanged = false;
-        Object oldarray[];
-        Object newarray[];
-
-        // The arrays may be arrays of primitives;  for simplicity,
-        // perform the boxing here.
-        if (!(previous instanceof Object[])) {
-            previous = toObjectArray(previous);
-        }
-
-        if (!(value instanceof Object[])) {
-            value = toObjectArray(value);
-        }
-
-        // If values are still not of the type Object[], it is perhaps a
-        // mistake by the renderers, so return false, so that
-        // ValueChangedEvent is not queued in this case.
-        if (!(previous instanceof Object[]) || 
-              !(value instanceof Object[])) {
-              return false;
-        }
-        oldarray = (Object[]) previous;
-        newarray = (Object[])value;
-       
-        // If we got here then both the arrays cannot be null
-        // if their lengths vary, return false.
-        if ( oldarray.length != newarray.length) {
-            return true;
-        }
-        
-        // make sure every element in the previous array occurs the same
-        // number of times in the current array. This should help us
-        // to find out the values changed are not. Since we cannot assume
-        // the browser will send the elements in the same order everytime,
-        // it will not suffice to just compare the element position and position.
-        int count1;
-        int count2;
-        for ( int i= 0; i < oldarray.length; ++i ) {
-            count1 = countElementOccurrence(oldarray[i], oldarray);
-            count2 = countElementOccurrence(oldarray[i], newarray);
-            if ( count1 != count2 ) {
-                valueChanged = true;
-                break;
-            }     
-        }    
-        return valueChanged;
-
-    }    
-
-    
-    /**
-     * <p>Return the number of occurrances of a particular element in the
-     * array.</p>
-     *
-     * @param element object whose occurrance is to be counted in the array.
-     * @param array object representing the old value of this component.
-     */
-    private static int countElementOccurrence(Object element, Object[] array) {
-
-        int count = 0;
-        for ( int i= 0; i < array.length; ++i ) {
-            Object arrayElement = array[i];
-            if (arrayElement != null && element != null) {
-                if (arrayElement.equals(element)) {
-                    count ++;
-                }
-            }
-        }    
-        return count;
-
-    }    
-
-    
-    /**
-     * Convert an array of primitives to an array of boxed objects.
-     * @param primitiveArray object containing the primitive values
-     * @return an Object array, or null if the incoming value is not
-     * in fact an array at all.
-     */
-    private static Object[] toObjectArray(Object primitiveArray) {
-        if (primitiveArray == null) {
-            throw new NullPointerException();
-        }
-        
-        if (primitiveArray instanceof Object[]) {
-            return (Object[]) primitiveArray;
-        }
-
-        if (primitiveArray instanceof Collection) {
-            return ((Collection) primitiveArray).toArray();
-        }
-          
-        Class clazz = primitiveArray.getClass();
-        if (!clazz.isArray()) {
-            return null;
-        }
-
-        int length = Array.getLength(primitiveArray);
-        Object[] array = new Object[length];
-        for (int i = 0; i < length; i++) {
-            array[i] = Array.get(primitiveArray, i);
-        }
-
-        return array;
-    }
-
-    // ------------------------------------------------------ Validation Methods
-
-    
-
-    /**
-     * <p><span class="changed_modified_2_0">In</span> addition to the standard
-     * validation behavior inherited from {@link UIInput}, ensure that
-     * any specified values are equal to one of the available options.
-     * Before comparing each option, coerce the option value type to the
-     * type of this component's value following the Expression Language
-     * coercion rules.  If the specified value is not equal to any of
-     * the options, enqueue an error message and set the
-     * <code>valid</code> property to <code>false</code>.</p>
-     *
-     * <p class="changed_modified_2_0">This method must explicitly
-     * support a value argument that is a single value or a value
-     * argument that is a <code>Collection</code> or Array of
-     * values.</p>
-
-     * <p class="changed_added_2_0">If {@link #isRequired} returns
-     * <code>true</code>, and the current value is equal to the value of
-     * an inner {@link UISelectItem} whose {@link
-     * UISelectItem#isNoSelectionOption} method returns
-     * <code>true</code>, enqueue an error message and set the
-     * <code>valid</code> property to <code>false</code>.</p>
-
-     * @param context The {@link FacesContext} for the current request
-     *
-     * @param value The converted value to test for membership.
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-
-    protected void validateValue(FacesContext context, Object value) {
-        super.validateValue(context, value);
-
-        // Skip validation if it is not necessary
-        if (!isValid() || (value == null)) {
-            return;
-        }
-        
-        boolean doAddMessage = false;
-
-        // Ensure that the values match one of the available options
-        // Don't arrays cast to "Object[]", as we may now be using an array
-        // of primitives
-        Converter converter = getConverter();
-        for (Iterator i = getValuesIterator(value); i.hasNext(); ) {
-            Iterator items = new SelectItemsIterator(context, this);
-            Object currentValue = i.next();
-            if (!SelectUtils.matchValue(context,
-                                        this,
-                                        currentValue,
-                                        items,
-                                        converter)) {
-                doAddMessage = true;
-                break;
-            }
-        }
-        
-        // Ensure that if the value is noSelection and a
-        // value is required, a message is queued
-        if (isRequired()) {
-            for (Iterator i = getValuesIterator(value); i.hasNext();) {
-                Iterator items = new SelectItemsIterator(context, this);
-                Object currentValue = i.next();
-                if (SelectUtils.valueIsNoSelectionOption(context,
-                        this,
-                        currentValue,
-                        items,
-                        converter)) {
-                    doAddMessage = true;
-                    break;
-                }
-            }
-        }
-        
-        if (doAddMessage) {
-            // Enqueue an error message if an invalid value was specified
-            FacesMessage message =
-                    MessageFactory.getMessage(context,
-                    INVALID_MESSAGE_ID,
-                    MessageFactory.getLabel(context, this));
-            context.addMessage(getClientId(context), message);
-            setValid(false);
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private Iterator getValuesIterator(Object value) {
-
-        if (value instanceof Collection) {
-            return ((Collection) value).iterator();
-        } else {
-            return (new ArrayIterator(value));
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Exposes an Array as an Iterator.
-     */
-    private static final class ArrayIterator implements Iterator {
-
-        private int length;
-        private int idx = 0;
-        private Object value;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        ArrayIterator(Object value) {
-
-            this.value = value;
-            length = Array.getLength(value);
-
-        }
-
-
-        // ------------------------------------------------------------ Iterator
-
-
-        public boolean hasNext() {
-            return (idx < length);
-        }
-
-
-        public Object next() {
-
-            if (idx >= length) {
-                throw new NoSuchElementException();
-            } else {
-                return Array.get(value, idx++);
-            }
-            
-        }
-
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-
-        }
-
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UISelectOne.java b/jsf-api/src/main/java/javax/faces/component/UISelectOne.java
deleted file mode 100644
index e0377f5..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UISelectOne.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><strong class="changed_modified_2_0">UISelectOne</strong> is a
- * {@link UIComponent} that represents the user's choice of zero or one
- * items from among a discrete set of available options.  The user can
- * modify the selected value.  Optionally, the component can be
- * preconfigured with a currently selected item, by storing it as the
- * <code>value</code> property of the component.</p>
- *
- * <p>This component is generally rendered as a select box or a group of
- * radio buttons.</p>
- *
- * <p>By default, the <code>rendererType</code> property is set to
- * "<code>javax.faces.Menu</code>".  This value can be changed by
- * calling the <code>setRendererType()</code> method.</p>
- */
-
-public class UISelectOne extends UIInput {
-
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.SelectOne";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.SelectOne";
-
-
-    /**
-     * <p>The message identifier of the
-     * {@link javax.faces.application.FacesMessage} to be created if
-     * a value not matching the available options is specified.
-     */
-    public static final String INVALID_MESSAGE_ID =
-        "javax.faces.component.UISelectOne.INVALID";
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UISelectOne} instance with default property
-     * values.</p>
-     */
-    public UISelectOne() {
-
-        super();
-        setRendererType("javax.faces.Menu");
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    // ------------------------------------------------------ Validation Methods
-
-
-    /**
-     * <p><span class="changed_modified_2_0">In</span> addition to the
-     * standard validation behavior inherited from {@link UIInput},
-     * ensure that any specified value is equal to one of the available
-     * options.  Before comparing each option, coerce the option value
-     * type to the type of this component's value following the
-     * Expression Language coercion rules.  If the specified value is
-     * not equal to any of the options, enqueue an error message and set
-     * the <code>valid</code> property to <code>false</code>.</p>
-     *
-     * <p class="changed_added_2_0">If {@link #isRequired} returns
-     * <code>true</code>, and the current value is equal to the value of
-     * an inner {@link UISelectItem} whose {@link
-     * UISelectItem#isNoSelectionOption} method returns
-     * <code>true</code>, enqueue an error message and set the
-     * <code>valid</code> property to <code>false</code>.</p>
-     *
-     * @param context The {@link FacesContext} for the current request
-     *
-     * @param value The converted value to test for membership.
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    protected void validateValue(FacesContext context, Object value) {
-
-        // Skip validation if it is not necessary
-        super.validateValue(context, value);
-
-        if (!isValid() || (value == null)) {
-            return;
-        }
-
-        // Ensure that the value matches one of the available options
-        boolean found = SelectUtils.matchValue(getFacesContext(),
-                                               this,
-                                               value,
-                                               new SelectItemsIterator(context, this),
-                                               getConverter());
-
-        boolean isNoSelection = SelectUtils.valueIsNoSelectionOption(getFacesContext(),
-                                               this,
-                                               value,
-                                               new SelectItemsIterator(context, this),
-                                               getConverter());
-
-        // Enqueue an error message if an invalid value was specified
-        if ((!found) || 
-            (isRequired() && isNoSelection)) {
-            FacesMessage message =
-                MessageFactory.getMessage(context, INVALID_MESSAGE_ID,
-                     MessageFactory.getLabel(context, this));
-            context.addMessage(getClientId(context), message);
-            setValid(false);
-        }
-        
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIViewParameter.java b/jsf-api/src/main/java/javax/faces/component/UIViewParameter.java
deleted file mode 100644
index 32e4251..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIViewParameter.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import java.io.IOException;
-import javax.el.ValueExpression;
-import javax.faces.FactoryFinder;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-
-/**
- * <p class="changed_added_2_0"><strong>UIViewParameter</strong> represents a
- * binding between a request parameter and a model property or {@link UIViewRoot}
- * property. This is a bi-directional binding.</p>
- *
- * <div class="changed_added_2_0">
-
- * <p>The {@link javax.faces.view.ViewDeclarationLanguage}
- * implementation must cause an instance of this component to appear in
- * the view for each occurrence of an <code><f:viewParam /></code>
- * element placed inside of an <code><f:metadata /></code>
- * element.  The user must place this facet within the
- * <code>UIViewRoot</code>.</p>
-
- * <p>Because this class extends <code>UIInput</code> any actions that
- * one would normally take on a <code>UIInput</code> instance are valid
- * for instances of this class.  Instances of this class participate in
- * the regular JSF lifecycle, including on Ajax requests.</p>
-
- * </div>
- *
- * @since 2.0
- */
-public class UIViewParameter extends UIInput {
-
-    
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard component type for this component.</p>
-     */
-    public static final String COMPONENT_TYPE = "javax.faces.ViewParameter";
-
-
-    /**
-     * <p>The standard component family for this component.</p>
-     */
-    public static final String COMPONENT_FAMILY = "javax.faces.ViewParameter";
-
-
-    enum PropertyKeys {
-        name,
-        submittedValue
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    private Renderer inputTextRenderer = null;
-    
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIViewParameter} instance with default
-     * property values.</p>
-     */
-    public UIViewParameter() {
-
-        super();
-        setRendererType(null);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    /**
-     * <p>The raw value is the "implicit" binding for this view parameter. This property
-     * maintains the submitted value of the view parameter for the duration of the request.
-     * If the view parameter does not explicitly specify a value expression, then when the
-     * request ends, this value is stored with the state of this component to use as the
-     * submitted value on an ensuing postback.</p>
-     */
-    private String rawValue;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    @Override
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the request parameter name
-     * from which the value is retrieved.</p>
-     * @since 2.0
-     */
-    public String getName() {
-
-        return (String) getStateHelper().eval(PropertyKeys.name);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Set the request parameter name from
-     * which the value is retrieved.</p>
-     *
-     * @param name The new request parameter name.
-     * @since 2.0
-     */
-    public void setName(String name) {
-
-        getStateHelper().put(PropertyKeys.name, name);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return <code>false</code>.  The
-     * immediate setting is not relevant for view parameters and must be
-     * assumed to be <code>false</code>.</p>
-     * @since 2.0
-     */
-    @Override
-    public boolean isImmediate() {
-        return false;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Assume that the submitted value is
-     * always a string.</p>
-     * @since 2.0
-     */
-    @Override
-    public String getSubmittedValue() {
-        return (String) getStateHelper().get(PropertyKeys.submittedValue);
-    }
-
-    /**
-     * PENDING (docs)  Interesting that submitted value isn't saved by the parent
-     * @param submittedValue The new submitted value
-     */
-    @Override
-    public void setSubmittedValue(Object submittedValue) {
-        getStateHelper().put(PropertyKeys.submittedValue, submittedValue);
-    }
-
-    // ----------------------------------------------------- UIComponent Methods
-
-
-    // This is the "Apply Request Phase" step
-    // QUESTION should we just override processDecodes() directly?
-    // ANSWER: In this case, no.  We don't want to take responsibility for 
-    // traversing any children we may have in the future.
-
-    /**
-     * <p class="changed_added_2_0">Override behavior from superclass to
-     * pull a value from the incoming request parameter map under the
-     * name given by {@link #getName} and store it with a call to {@link
-     * UIInput#setSubmittedValue}.</p>
-     * @since 2.0
-     */
-    @Override
-    public void decode(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // QUESTION can we move forward and support an array? no different than UISelectMany; perhaps need to know
-        // if the value expression is single or multi-valued
-        // ANSWER: I'd rather not right now.
-        String paramValue = context.getExternalContext().getRequestParameterMap().get(getName());
-
-        // submitted value will stay as previous value (null on initial request) if a parameter is absent
-        if (paramValue != null) {
-            setSubmittedValue(paramValue);
-        }
-
-        rawValue = (String) getSubmittedValue();
-        setValid(true);
-
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Specialize superclass behavior to treat
-     * <code>null</code> differently.  In this class, a <code>null</code> value
-     * along with the "required" flag being set to <code>true</code> will
-     * cause a validation failure. </p>
-     * @param context
-     * @since 2.0
-     */
-
-    @Override
-    public void processValidators(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // Skip processing if our rendered flag is false
-        if (!isRendered()) {
-            return;
-        }
-
-        // we have to override since UIInput assumes that a null value means don't check
-        if (getSubmittedValue() == null && isRequired()) {
-            String requiredMessageStr = getRequiredMessage();
-            FacesMessage message;
-            if (null != requiredMessageStr) {
-                message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                           requiredMessageStr,
-                                           requiredMessageStr);
-            } else {
-                message =
-                     MessageFactory.getMessage(context, REQUIRED_MESSAGE_ID,
-                          MessageFactory.getLabel(
-                               context, this));
-            }
-            context.addMessage(getClientId(context), message);
-            setValid(false);
-            context.validationFailed();
-            context.renderResponse();
-        }
-        else {
-            super.processValidators(context);
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0">Call through to superclass {@link
-     * UIInput#updateModel} then take the additional action of pushing
-     * the value into request scope if and only if the value is not a
-     * value expression, is valid, and the local value was set on this
-     * lifecycle execution.</p>
-     * @since 2.0
-     */
-
-    @Override
-    public void updateModel(FacesContext context) {
-        super.updateModel(context);
-        if (!hasValueExpression() && isValid() && isLocalValueSet()) {
-            // QUESTION should this be done even when a value expression is present?
-            // ANSWER: I don't see why not.
-            context.getExternalContext().getRequestMap().put(getName(), getLocalValue());
-        }
-    }
-
-    // This is called during the real "Render Response" phase
-
-    /**
-     * <p class="changed_added_2_0">Called specially by {@link
-     * UIViewRoot#encodeEnd}, this method simply sets the submitted
-     * value to be the return from {@link #getStringValue}.</p>
-     * @since 2.0
-     */
-    @Override
-    public void encodeAll(FacesContext context) throws IOException {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        // if there is a value expression, update view parameter w/ latest value after render
-        // QUESTION is it okay that a null string value may be suppressing the view parameter value?
-        // ANSWER: I'm not sure.
-        setSubmittedValue(getStringValue(context));
-    }
-
-    /**
-     * <p class="changed_added_2_0">If the value of this parameter comes
-     * from a <code>ValueExpression</code> return the value of the
-     * expression, otherwise, return the local value.</p>
-     *
-     * @since 2.0
-     */
-
-    public String getStringValue(FacesContext context) {
-        String result = null;
-        if (hasValueExpression()) {
-            result = getStringValueFromModel(context);
-        } else {
-            result = (null != rawValue) ? rawValue : (String) getValue();
-        }
-        return result;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Manually perform standard conversion
-     * steps to get a string value from the value expression.</p>
-     *
-     * @since 2.0
-     */
-
-    public String getStringValueFromModel(FacesContext context)
-        throws ConverterException {
-        ValueExpression ve = getValueExpression("value");
-        if (ve == null) {
-            return null;
-        }
-
-        Object currentValue = ve.getValue(context.getELContext());
-
-        // If there is a converter attribute, use it to to ask application
-        // instance for a converter with this identifer.
-        Converter c = getConverter();
-
-        if (c == null) {
-            // if value is null and no converter attribute is specified, then
-            // return null (null has meaning for a view parameters; it means remove it).
-            if (currentValue == null) {
-                return null;
-            }
-            // Do not look for "by-type" converters for Strings
-            if (currentValue instanceof String) {
-                return (String) currentValue;
-            }
-
-            // if converter attribute set, try to acquire a converter
-            // using its class type.
-
-            Class converterType = currentValue.getClass();
-            c = context.getApplication().createConverter(converterType);
-
-            // if there is no default converter available for this identifier,
-            // assume the model type to be String.
-            if (c == null) {
-                return currentValue.toString();
-            }
-        }
-
-        return c.getAsString(context, this, currentValue);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Because this class has no {@link
-     * Renderer}, leverage the one from the standard HTML_BASIC {@link
-     * RenderKit} with <code>component-family: javax.faces.Input</code>
-     * and <code>renderer-type: javax.faces.Text</code> and call its
-     * {@link Renderer#getConvertedValue} method.</p>
-     *
-     * @since 2.0
-     */ 
-    @Override
-    protected Object getConvertedValue(FacesContext context, Object submittedValue)
-          throws ConverterException {
-
-        return getInputTextRenderer(context).getConvertedValue(context, this, 
-                submittedValue);
-
-    }
-    
-    private Renderer getInputTextRenderer(FacesContext context) {
-        if (null == inputTextRenderer) {
-            RenderKitFactory rkf = (RenderKitFactory) 
-                    FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-            RenderKit standard = rkf.getRenderKit(context, RenderKitFactory.HTML_BASIC_RENDER_KIT);
-            inputTextRenderer = standard.
-                    getRenderer("javax.faces.Input", "javax.faces.Text");
-        }
-        assert(null != inputTextRenderer);
-        return inputTextRenderer;
-    }
-
-    // ----------------------------------------------------- Helper Methods
-
-    private boolean hasValueExpression() {
-        return null != getValueExpression("value");
-    }
-
-    
-    /**
-     * <p class="changed_added_2_0">Inner class to encapsulate a
-     * <code>UIViewParameter</code> instance so that it may be safely
-     * referenced regardless of whether or not the current view is the
-     * same as the view in which this <code>UIViewParameter</code>
-     * resides.</p>
-     * @since 2.0
-     */
-    
-    public static class Reference {
-        
-        private StateHolderSaver saver;
-        private int indexInParent;
-        private String viewIdAtTimeOfConstruction;
-        
-	/**
-	 * <p class="changed_added_2_0">Construct a reference to a
-	 * <code>UIViewParameter</code>.  This constructor cause the
-	 * {@link StateHolder#saveState} method to be called on
-	 * argument <code>UIViewParameter</code>.</p>
-	 *
-	 * @param context the <code>FacesContext</code>for this request
-	 * @param indexInParent the index of the
-	 * <code>UIViewParameter</code> in its parent
-	 * <code>UIPanel</code>.
-	 * @param viewIdAtTimeOfConstruction the viewId of the view in
-	 * which the <code>UIViewParameter</code> is included.  This may
-	 * not be the same as the viewId from the <code>context</code>
-	 * argument.
-	 *
-	 * @since 2.0
-	 */
-        public Reference(FacesContext context, 
-                UIViewParameter param, 
-                int indexInParent,
-                String viewIdAtTimeOfConstruction)     {
-            this.saver = new StateHolderSaver(context, param);
-            this.indexInParent = indexInParent;
-            this.viewIdAtTimeOfConstruction = viewIdAtTimeOfConstruction;
-        }
-
-	/**
-	 * <p class="changed_added_2_0">Return the
-	 * <code>UIViewParameter</code> to which this instance refers.
-	 * If the current viewId is the same as the viewId passed to our
-	 * constructor, use the index passed to the constructor to find
-	 * the actual <code>UIViewParameter</code> instance and return
-	 * it.  Otherwise, call {@link StateHolder#restoreState} on the
-	 * saved state and return the result.</p>
-	 *
-	 * @param context the <code>FacesContext</code>for this request
-	 *
-	 * @since 2.0
-	 */
-        
-        public UIViewParameter getUIViewParameter(FacesContext context) {
-            UIViewParameter result = null;
-            UIViewRoot root = context.getViewRoot();
-            // If the view root is the same as when we were constructed...
-            if (this.viewIdAtTimeOfConstruction.equals(root.getViewId())) {
-                // get the actual view parameter from the tree...
-                UIComponent metadataFacet = root.getFacet(UIViewRoot.METADATA_FACET_NAME);
-                result = (UIViewParameter) metadataFacet.getChildren().get(indexInParent);
-            } else {
-                // otherwise, use the saved one
-                result = (UIViewParameter) this.saver.restore(context);
-            }
-            
-            return result;
-        }
-        
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UIViewRoot.java b/jsf-api/src/main/java/javax/faces/component/UIViewRoot.java
deleted file mode 100644
index b96880d..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UIViewRoot.java
+++ /dev/null
@@ -1,1800 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.el.MethodExpression;
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import javax.faces.webapp.FacesServlet;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ListIterator;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.event.*;
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.view.ViewMetadata;
-
-
-/**
- * <p><strong class="changed_modified_2_0"><span
- * class="changed_modified_2_0_rev_a">UIViewRoot</span></strong> is the
- * UIComponent that represents the root of the UIComponent tree.  This
- * component renders markup as the response to Ajax requests.  It also
- * serves as the root of the component tree, and as a place to hang
- * per-view {@link PhaseListener}s.</p>
- *
- * <p>For each of the following lifecycle phase methods:</p>
-
- * <ul>
-
- * <li><p>{@link #processDecodes} </p></li>
-
- * <li><p>{@link #processValidators} </p></li>
-
- * <li><p>{@link #processUpdates} </p></li>
-
- * <li><p>{@link #processApplication} </p></li>
-
- * <li><p>RenderResponse, via {@link #encodeBegin} and {@link
- * #encodeEnd} </p></li>
-
- * </ul>
-
- * <p>Take the following action regarding
- * <code>PhaseListener</code>s.</p>
-
- * <ul>
-
- * <p>Initialize a state flag to <code>false</code>.</p>
-
- * <p>If {@link #getBeforePhaseListener} returns non-<code>null</code>,
- * invoke the listener, passing in the correct corresponding {@link
- * PhaseId} for this phase.</p>
-
- * <p>Upon return from the listener, call {@link
- * FacesContext#getResponseComplete} and {@link
- * FacesContext#getRenderResponse}.  If either return <code>true</code>
- * set the internal state flag to <code>true</code>. </p>
-
- * <p>If or one or more listeners have been added by a call to {@link
- * #addPhaseListener}, invoke the <code>beforePhase</code> method on
- * each one whose {@link PhaseListener#getPhaseId} matches the current
- * phaseId, passing in the same <code>PhaseId</code> as in the previous
- * step.</p>
-
- * <p>Upon return from each listener, call {@link
- * FacesContext#getResponseComplete} and {@link
- * FacesContext#getRenderResponse}.  If either return <code>true</code>
- * set the internal state flag to <code>true</code>. </p>
-
-
- * <p>Execute any processing for this phase if the internal state flag
- * was not set.</p>
-
- * <p>If {@link #getAfterPhaseListener} returns non-<code>null</code>,
- * invoke the listener, passing in the correct corresponding {@link
- * PhaseId} for this phase.</p>
- * <p/>
- * <p>If or one or more listeners have been added by a call to {@link
- * #addPhaseListener}, invoke the <code>afterPhase</code> method on each
- * one whose {@link PhaseListener#getPhaseId} matches the current
- * phaseId, passing in the same <code>PhaseId</code> as in the previous
- * step.</p>
- * <p/>
- * <p/>
- * </ul>
- */
-
-public class UIViewRoot extends UIComponentBase implements UniqueIdVendor {
-
-    // ------------------------------------------------------ Manifest Constants
-
-    public static final String METADATA_FACET_NAME = "javax_faces_metadata";
-    
-    /**
-     * <p class="changed_added_2_0">The key in the value set of the
-     * <em>view metadata BeanDescriptor</em>, the value of which is a 
-     * <code>List<{@link UIViewParameter.Reference}></code>.</p>
-     *
-     * @since 2.0
-     */
-    public static final String VIEW_PARAMETERS_KEY = "javax.faces.component.VIEW_PARAMETERS_KEY";
-    
-    /** <p>The standard component type for this component.</p> */
-    public static final String COMPONENT_TYPE = "javax.faces.ViewRoot";
-
-
-    /** <p>The standard component family for this component.</p> */
-    public static final String COMPONENT_FAMILY = "javax.faces.ViewRoot";
-
-
-    /**
-     * <p>The prefix that will be used for identifiers generated
-     * by the <code>createUniqueId()</code> method.
-     */
-    static public final String UNIQUE_ID_PREFIX = "j_id";
-
-    private static Lifecycle lifecycle;
-
-    private static final Logger LOGGER =
-          Logger.getLogger("javax.faces", "javax.faces.LogStrings");
-
-    private static final String LOCATION_IDENTIFIER_PREFIX = "javax_faces_location_";
-    private static final Map<String,String> LOCATION_IDENTIFIER_MAP =
-          new HashMap<String,String>(6, 1.0f);
-    static {
-        LOCATION_IDENTIFIER_MAP.put("head", LOCATION_IDENTIFIER_PREFIX + "HEAD");
-        LOCATION_IDENTIFIER_MAP.put("form", LOCATION_IDENTIFIER_PREFIX + "FORM");
-        LOCATION_IDENTIFIER_MAP.put("body", LOCATION_IDENTIFIER_PREFIX + "BODY");        
-    }
-
-    enum PropertyKeys {
-        /**
-         * <p>The render kit identifier of the {@link javax.faces.render.RenderKit} associated
-         * wth this view.</p>
-         */
-        renderKitId,
-        /**
-         * <p>The view identifier of this view.</p>
-         */
-        viewId,
-        locale,
-        lastId,
-        beforePhase,
-        afterPhase,
-        phaseListeners,
-        viewScope  // RELEASE_PENDING
-    }
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Create a new {@link UIViewRoot} instance with default property
-     * values.</p>
-     */
-    public UIViewRoot() {
-
-        super();
-        setRendererType(null);
-        setId(createUniqueId());
-
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    /**
-     * <p>Set and cleared during the lifetime of a lifecycle phase.  Has
-     * no meaning between phases.  If <code>true</code>, the lifecycle
-     * processing for the current phase must not take place.</p>
-     */
-    private boolean skipPhase;
-
-    /**
-     * <p>Set and cleared during the lifetime of a lifecycle phase.  Has no
-     * meaning between phases.  If <code>true</code>, the
-     * <code>MethodExpression</code> associated with <code>afterPhase</code>
-     * will not be invoked nor will any PhaseListeners associated with this
-     * UIViewRoot.
-     */
-    private boolean beforeMethodException;
-
-    /**
-     * <p>Set and cleared during the lifetime of a lifecycle phase.  Has no
-     * meaning between phases.
-     */
-    private ListIterator<PhaseListener> phaseListenerIterator;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p class="changed_added_2_0">Return <code>trues</code>.</p>
-     *
-     * @since 2.0
-     */
-    @Override
-    public boolean isInView() {
-
-        return true;
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Overridden to take no action.</p>
-     *
-     * @since 2.0
-     * @param isInView
-     */
-    @Override
-    public void setInView(boolean isInView) {
-        // no-op
-    }
-
-    /**
-     * @see UIComponent#getFamily()
-     */
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    /**
-     * <p>Return the render kit identifier of the {@link
-     * javax.faces.render.RenderKit} associated with this view.  Unless
-     * explicitly set, as in {@link
-     * javax.faces.application.ViewHandler#createView}, the returned
-     * value will be <code>null.</code></p>
-     */
-    public String getRenderKitId() {
-
-        return (String) getStateHelper().eval(PropertyKeys.renderKitId);
-
-    }
-
-
-    /**
-     * <p>Set the render kit identifier of the {@link javax.faces.render.RenderKit}
-     * associated with this view.  This method may be called at any time
-     * between the end of <em>Apply Request Values</em> phase of the
-     * request processing lifecycle (i.e. when events are being broadcast)
-     * and the beginning of the <em>Render Response</em> phase.</p>
-     *
-     * @param renderKitId The new {@link javax.faces.render.RenderKit} identifier,
-     *                    or <code>null</code> to disassociate this view with any
-     *                    specific {@link javax.faces.render.RenderKit} instance
-     */
-    public void setRenderKitId(String renderKitId) {
-
-        getStateHelper().put(PropertyKeys.renderKitId, renderKitId);
-
-    }
-
-
-    /** <p>Return the view identifier for this view.</p> */
-    public String getViewId() {
-
-        return (String) getStateHelper().get(PropertyKeys.viewId);
-
-    }
-
-
-    /**
-     * <p>Set the view identifier for this view.</p>
-     *
-     * @param viewId The new view identifier
-     */
-    public void setViewId(String viewId) {
-        getFacesContext().getAttributes().put("com.sun.faces.viewId", viewId);
-
-
-        getStateHelper().put(PropertyKeys.viewId, viewId);
-
-    }
-
-    // ------------------------------------------------ Event Management Methods
-
-
-    /**
-     * <p>Return the {@link MethodExpression} that will be invoked
-     * before this view is rendered.</p>
-     *
-     * @return the {@link MethodExpression} that will be invoked before
-     *         this view is rendered.
-     * @since 1.2
-     */
-    public MethodExpression getBeforePhaseListener() {
-
-        return (MethodExpression) getStateHelper().get(PropertyKeys.beforePhase);
-    }
-
-    /**
-     * <p><span class="changed_modified_2_0">Allow</span> an arbitrary
-     * method to be called for the "beforePhase" event as the UIViewRoot
-     * runs through its lifecycle.  This method will be called for all
-     * phases except {@link PhaseId#RESTORE_VIEW}.  Unlike a true
-     * {@link PhaseListener}, this approach doesn't allow for only
-     * receiving {@link PhaseEvent}s for a given phase.</p> <p/> <p>The
-     * method must conform to the signature of {@link
-     * PhaseListener#beforePhase}.</p>
-     *
-     * @param newBeforePhase the {@link MethodExpression} that will be
-     *                       invoked before this view is rendered.
-     * @since 1.2
-     */
-    public void setBeforePhaseListener(MethodExpression newBeforePhase) {
-        getStateHelper().put(PropertyKeys.beforePhase, newBeforePhase);
-    }
-
-    /**
-     * <p>Return the {@link MethodExpression} that will be invoked after
-     * this view is rendered.</p>
-     *
-     * @return the {@link MethodExpression} that will be invoked after
-     *         this view is rendered.
-     *
-     * @since 1.2
-     */
-    public MethodExpression getAfterPhaseListener() {
-        return (MethodExpression) getStateHelper().get(PropertyKeys.afterPhase);
-    }
-
-    /**
-     * <p><span class="changed_modified_2_0">Allow</span> an arbitrary
-     * method to be called for the "afterPhase" event as the UIViewRoot
-     * runs through its lifecycle.  This method will be called for all
-     * phases <span class="changed_modified_2_0">including {@link
-     * PhaseId#RESTORE_VIEW}</span>.  Unlike a true {@link
-     * PhaseListener}, this approach doesn't allow for only receiving
-     * {@link PhaseEvent}s for a given phase.</p> <p/> <p>The method
-     * must conform to the signature of {@link
-     * PhaseListener#afterPhase}.</p>
-     *
-     * @param newAfterPhase the {@link MethodExpression} that will be
-     *                      invoked after this view is rendered.
-     *
-     * @since 1.2
-     */
-    public void setAfterPhaseListener(MethodExpression newAfterPhase) {
-        getStateHelper().put(PropertyKeys.afterPhase, newAfterPhase);
-    }
-
-
-    /**
-     * <p>If the argument <code>toRemove</code> is in the list of {@link
-     * PhaseListener}s for this instance, it must be removed.</p>
-     * @param toRemove the {@link PhaseListener} to remove.
-     *
-     * @since 1.2
-     */
-    public void removePhaseListener(PhaseListener toRemove) {
-
-        getStateHelper().remove(PropertyKeys.phaseListeners, toRemove);
-    }
-
-    /**
-     * <p>Add the argument <code>newPhaseListener</code> to the list of
-     * {@link PhaseListener}s on this <code>UIViewRoot</code>.</p>
-     *
-     * @param newPhaseListener the {@link PhaseListener} to add
-     *
-     * @since 1.2
-     */
-    public void addPhaseListener(PhaseListener newPhaseListener) {
-
-        getStateHelper().add(PropertyKeys.phaseListeners, newPhaseListener);
-
-    }
-
-    
-    /**
-     * 
-     * <p class="changed_added_2_0">Return an unmodifiable list of the 
-     * <code>PhaseListener</code> instances attached to this 
-     * <code>UIViewRoot</code> instance.</p>
-     *
-     * @since 2.0
-     */
-    public List<PhaseListener> getPhaseListeners() {
-
-        //noinspection unchecked
-        List<PhaseListener> result = (List<PhaseListener>)
-              getStateHelper().get(PropertyKeys.phaseListeners);
-
-        return ((result != null)
-                ? Collections.unmodifiableList(result)
-                : Collections.unmodifiableList(Collections.<PhaseListener>emptyList()));
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Add argument <code>component</code>,
-     * which is assumed to represent a resource instance, as a resource
-     * to this view.  A resource instance is rendered by a resource
-     * <code>Renderer</code>, as described in the Standard HTML
-     * RenderKit. The default implementation must call through to
-     * {@link #addComponentResource(javax.faces.context.FacesContext, 
-     * javax.faces.component.UIComponent, java.lang.String)}.</p>
-     *
-     * <div class="changed_added_2_0">
-     * <p>
-     * 
-     * @param context {@link FacesContext} for the current request
-     * @param componentResource The {@link UIComponent} representing a 
-     * {@link javax.faces.application.Resource} instance
-     *
-     * @since 2.0
-     */
-    public void addComponentResource(FacesContext context, UIComponent componentResource) {
-        addComponentResource(context, componentResource, null);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Add argument <code>component</code>,
-     * which is assumed to represent a resource instance, as a resource
-     * to this view.  A resource instance is rendered by a resource
-     * <code>Renderer</code>, as described in the Standard HTML
-     * RenderKit. </p>
-     *
-     * <div class="changed_added_2_0">
-
-     * <p> The <code>component</code> must be added using the following
-     * algorithm:</p>
-
-     * <ul>
-
-     * <li><p>If the <code>target</code> argument is <code>null</code>,
-     * look for a <code>target</code> attribute on the
-     * <code>component</code>.  If there is no <code>target</code>
-     * attribute, set <code>target</code> to be the default value
-     * <code>head</code></p></li>
-
-     * <li><p>Call {@link #getComponentResources} to obtain the child
-     * list for the given target.</p></li>
-     *
-     * <li><p>If the component ID of <code>componentResource</code> matches the
-     * the ID of a resource that has allready been added, remove the old
-     * resource.</p></li>
-
-     * <li><p>Add the <code>component</code> resource to the
-     * list.</p></li>
-
-     * </ul>
-
-     * </div>
-     *  
-     * @param context {@link FacesContext} for the current request
-     * @param componentResource The {@link UIComponent} representing a 
-     * {@link javax.faces.application.Resource} instance 
-     * @param target The name of the facet for which the {@link UIComponent} will be added
-     *
-     * @since 2.0
-     */
-    public void addComponentResource(FacesContext context, UIComponent componentResource, String target) {
-        final Map<String,Object> attributes = componentResource.getAttributes();
-        // look for a target in the component attribute set if arg is not set.
-        if (target == null) {
-            target = (String) attributes.get("target");
-        }
-        if (target == null) {
-            target = "head";
-        }
-        List<UIComponent> facetChildren = getComponentResources(context,
-                                                                target,
-                                                                true);
-        String id = componentResource.getId();
-        if (id != null) {
-            for (UIComponent c : facetChildren) {
-                if (id.equals(c.getId())) {
-                    facetChildren.remove(c);
-                }
-            }
-        }
-        // add the resource to the facet
-        facetChildren.add(componentResource);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return an unmodifiable
-     * <code>List</code> of {@link UIComponent}s for the provided
-     * <code>target</code> agrument.  Each <code>component</code> in the
-     * <code>List</code> is assumed to represent a resource
-     * instance.</p>
-     *
-     * <div class="changed_added_2_0">
-     * <p>The default implementation must use an algorithm equivalent to the
-     * the following.</p>
-     * <ul>
-     * <li>Locate the facet for the <code>component</code> by calling <code>getFacet()</code> using
-     * <code>target</code> as the argument.</li>
-
-     * <li>If the facet is not found, create the facet by calling
-     * <code>context.getApplication().createComponent().</code> <span
-     * class="changed_modified_2_0_rev_a">The argument to this method
-     * must refer to a component that extends {@link UIPanel} and
-     * overrides the <code>encodeAll()</code> method to take no action.
-     * This is necessary to prevent component resources from being
-     * inadvertently rendered.</span></li>
-
-     * <ul>
-     * <li>Set the <code>id</code> of the facet to be <code>target</code></li>
-     * <li>Add the facet to the facets <code>Map</code> using <code>target</code> as the key</li>
-     * </ul>
-     * <li>return the children of the facet</li>
-     * </ul>
-
-     * </div>
-     *
-     * @param target The name of the facet for which the components will be returned. 
-     *
-     * @return A <code>List</code> of {@link UIComponent} children of
-     * the facet with the name <code>target</code>.  If no children are
-     * found for the facet, return <code>Collections.emptyList()</code>.
-     *
-     * @throws NullPointerException if <code>target</code> or
-     * <code>context</code> is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public List<UIComponent> getComponentResources(FacesContext context, 
-                                                   String target) {
-        if (target == null) {
-            throw new NullPointerException();
-        }
-
-        List<UIComponent> resources = getComponentResources(context,
-                                                            target,
-                                                            false);
-
-        return ((resources != null)
-                ? resources
-                : Collections.<UIComponent>emptyList());
-
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Remove argument <code>component</code>,
-     * which is assumed to represent a resource instance, as a resource
-     * to this view.</p>
-     *
-     * <div class="changed_added_2_0">
-     * <p>
-     * 
-     * @param context {@link FacesContext} for the current request
-     * @param componentResource The {@link UIComponent} representing a 
-     * {@link javax.faces.application.Resource} instance
-     *
-     * @since 2.0
-     */
-    public void removeComponentResource(FacesContext context, UIComponent componentResource) {
-        removeComponentResource(context, componentResource, null);
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Remove argument <code>component</code>,
-     * which is assumed to represent a resource instance, as a resource
-     * to this view.  A resource instance is rendered by a resource
-     * <code>Renderer</code>, as described in the Standard HTML
-     * RenderKit. </p>
-     *
-     * <div class="changed_added_2_0">
-     * <p>
-     * The <code>component</code> must be removed using the following algorithm:
-     * <ul>
-     * <li>If the <code>target</code> argument is <code>null</code>, look for a <code>target</code>
-     * attribute on the <code>component</code>.<br>
-     * If there is no <code>target</code> attribute, set <code>target</code> to be the default value <code>head</code></li>
-     * <li>Call {@link #getComponentResources} to obtain the child list for the
-     * given target.</li>
-     * <li>Remove the <code>component</code> resource from the child list.</li>
-     * </ul>
-     * </p>
-     * </div>
-     *  
-     * @param context {@link FacesContext} for the current request
-     * @param componentResource The {@link UIComponent} representing a 
-     * {@link javax.faces.application.Resource} instance 
-     * @param target The name of the facet for which the {@link UIComponent} will be added
-     *
-     * @since 2.0
-     */
-    public void removeComponentResource(FacesContext context, UIComponent componentResource, String target) {
-
-        final Map<String,Object> attributes = componentResource.getAttributes();
-        // look for a target in the component attribute set if arg is not set.
-        if (target == null) {
-            target = (String) attributes.get("target");
-        }
-        if (target == null) {
-            target = "head";
-        }
-        List<UIComponent> facetChildren = getComponentResources(context,
-                                                                target,
-                                                                false);
-        if (facetChildren != null) {
-            facetChildren.remove(componentResource);
-        }
-
-    }
-
-    /**
-     * <p>An array of Lists of events that have been queued for later
-     * broadcast, with one List for each lifecycle phase.  The list
-     * indices match the ordinals of the PhaseId instances.  This
-     * instance is lazily instantiated.  This list is
-     * <strong>NOT</strong> part of the state that is saved and restored
-     * for this component.</p>
-     */
-    private List<List<FacesEvent>> events = null;
-
-
-    /**
-     * <p>Override the default {@link UIComponentBase#queueEvent} behavior to
-     * accumulate the queued events for later broadcasting.</p>
-     *
-     * @param event {@link FacesEvent} to be queued
-     *
-     * @throws IllegalStateException if this component is not a
-     *                               descendant of a {@link UIViewRoot}
-     * @throws NullPointerException  if <code>event</code>
-     *                               is <code>null</code>
-     */
-    public void queueEvent(FacesEvent event) {
-
-        if (event == null) {
-            throw new NullPointerException();
-        }
-        // We are a UIViewRoot, so no need to check for the ISE
-        if (events == null) {
-            int len = PhaseId.VALUES.size();
-            List<List<FacesEvent>> events = new ArrayList<List<FacesEvent>>(len);
-            for (int i = 0; i < len; i++) {
-                events.add(new ArrayList<FacesEvent>(5));
-            }
-            this.events = events;
-        }
-        events.get(event.getPhaseId().getOrdinal()).add(event);
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Broadcast any events that have been
-     * queued.  First broadcast events that have been queued for {@link
-     * PhaseId#ANY_PHASE}.  Then broadcast ane events that have been
-     * queued for the current phase.  In both cases, {@link
-     * UIComponent#pushComponentToEL} must be called before the event is
-     * broadcast, and {@link UIComponent#popComponentFromEL} must be
-     * called after the return from the broadcast, even in the case of
-     * an exception.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param phaseId {@link PhaseId} of the current phase
-
-     * @since 2.0
-     */
-    public void broadcastEvents(FacesContext context, PhaseId phaseId) {
-
-        if (null == events) {
-            // no events have been queued
-            return;
-        }
-        boolean hasMoreAnyPhaseEvents;
-        boolean hasMoreCurrentPhaseEvents;
-
-        List<FacesEvent> eventsForPhaseId =
-             events.get(PhaseId.ANY_PHASE.getOrdinal());
-
-        // keep iterating till we have no more events to broadcast.
-        // This is necessary for events that cause other events to be
-        // queued.  PENDING(edburns): here's where we'd put in a check
-        // to prevent infinite event queueing.
-        do {
-            // broadcast the ANY_PHASE events first
-            if (null != eventsForPhaseId) {
-                // We cannot use an Iterator because we will get
-                // ConcurrentModificationException errors, so fake it
-                while (!eventsForPhaseId.isEmpty()) {
-                    FacesEvent event =
-                          eventsForPhaseId.get(0);
-                    UIComponent source = event.getComponent();
-                    UIComponent compositeParent = null;
-                    try {
-                        if (!UIComponent.isCompositeComponent(source)) {
-                            compositeParent = UIComponent.getCompositeComponentParent(source);
-                        }
-                        if (compositeParent != null) {
-                            compositeParent.pushComponentToEL(context, null);
-                        }
-                        source.pushComponentToEL(context, null);
-                        source.broadcast(event);
-                    } catch (AbortProcessingException e) {
-                        context.getApplication().publishEvent(context,
-                                                              ExceptionQueuedEvent.class,
-                                                              new ExceptionQueuedEventContext(context,
-                                                                                        e,
-                                                                                        source,
-                                                                                        phaseId));
-                    }
-                    finally {
-                        source.popComponentFromEL(context);
-                        if (compositeParent != null) {
-                            compositeParent.popComponentFromEL(context);
-                        }
-                    }
-                    eventsForPhaseId.remove(0); // Stay at current position
-                }
-            }
-
-            // then broadcast the events for this phase.
-            if (null != (eventsForPhaseId = events.get(phaseId.getOrdinal()))) {
-                // We cannot use an Iterator because we will get
-                // ConcurrentModificationException errors, so fake it
-                while (!eventsForPhaseId.isEmpty()) {
-                    FacesEvent event = eventsForPhaseId.get(0);
-                    UIComponent source = event.getComponent();
-                    UIComponent compositeParent = null;
-                    try {
-                        if (!UIComponent.isCompositeComponent(source)) {
-                            compositeParent = getCompositeComponentParent(source);
-                        }
-                        if (compositeParent != null) {
-                            compositeParent.pushComponentToEL(context, null);
-                        }
-                        source.pushComponentToEL(context, null);
-                        source.broadcast(event);
-                    } catch (AbortProcessingException ape) {
-                        // A "return" here would abort remaining events too
-                        context.getApplication().publishEvent(context,
-                                                              ExceptionQueuedEvent.class,
-                                                              new ExceptionQueuedEventContext(context,
-                                                                                        ape,
-                                                                                        source,
-                                                                                        phaseId));
-                    }
-                    finally {
-                        source.popComponentFromEL(context);
-                        if (compositeParent != null) {
-                            compositeParent.popComponentFromEL(context);
-                        }
-                    }
-                    eventsForPhaseId.remove(0); // Stay at current position
-                }
-            }
-
-            // true if we have any more ANY_PHASE events
-            hasMoreAnyPhaseEvents =
-                  (null != (eventsForPhaseId =
-                        events.get(PhaseId.ANY_PHASE.getOrdinal()))) &&
-                        !eventsForPhaseId.isEmpty();
-            // true if we have any more events for the argument phaseId
-            hasMoreCurrentPhaseEvents =
-                  (null != events.get(phaseId.getOrdinal())) &&
-                  !events.get(phaseId.getOrdinal()).isEmpty();
-
-        } while (hasMoreAnyPhaseEvents || hasMoreCurrentPhaseEvents);
-    
-    }
-
-    // ------------------------------------------------ Lifecycle Phase Handlers
-
-
-    private void initState() {
-        skipPhase = false;
-        beforeMethodException = false;
-        //noinspection unchecked
-        List<PhaseListener> listeners =
-              (List<PhaseListener>) getStateHelper().get(PropertyKeys.phaseListeners);
-        phaseListenerIterator =
-              ((listeners != null) ? listeners.listIterator() : null);
-    }
-
-    // avoid creating the PhaseEvent if possible by doing redundant
-    // null checks.
-    private void notifyBefore(FacesContext context, PhaseId phaseId) {
-        if (getBeforePhaseListener() != null || phaseListenerIterator != null) {
-            notifyPhaseListeners(context, phaseId, true);
-        }
-    }
-    
-    // avoid creating the PhaseEvent if possible by doing redundant
-    // null checks.
-    private void notifyAfter(FacesContext context, PhaseId phaseId) {
-        if (getAfterPhaseListener() != null || phaseListenerIterator != null) {
-            notifyPhaseListeners(context, phaseId, false);
-        }
-    }
-
-
-    /**
-     * <p class="changed_added_2_0"><span
-     * class="changed_deleted_2_0_rev_a">The</span> default
-     * implementation must call {@link
-     * UIComponentBase#processRestoreState} from within a
-     * <code>try</code> block.  The <code>try</code> block must have a
-     * <code>finally</code> block that ensures that no {@link
-     * FacesEvent}s remain in the event queue. <a
-     * class="changed_deleted_2_0_rev_a" title="text removed in 2.0 Rev a: and that the this.visitTree is called, passing a ContextCallback that takes the following action: call the processEvent method of the current component. The argument event must be an instance of PostRestoreStateEvent whose component property is the current component in the traversal.">   </a> </p>
-     * @param context the <code>FacesContext</code> for this requets
-     * @param state the opaque state object obtained from the {@link
-     * javax.faces.application.StateManager}
-     */
-    @Override
-    public void processRestoreState(FacesContext context, Object state) {
-
-        // hack to work around older state managers that may not set the
-        // view root early enough
-        if (context.getViewRoot() == null) {
-            context.setViewRoot(this);
-        }
-        super.processRestoreState(context, state);
-
-    }
-    
-
-    /**
-     * <div class="changed_added_2_0">
-     * <p>Perform partial processing by calling
-     * {@link javax.faces.context.PartialViewContext#processPartial} with
-     * {@link PhaseId#APPLY_REQUEST_VALUES} if:
-     * <ul>
-     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>true</code> and we don't have a request to process all 
-     * components in the view
-     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
-     * <code>false</code>)</li>
-     * </ul>
-     * Perform full processing by calling 
-     * {@link UIComponentBase#processDecodes} if one of the following 
-     * conditions are met:
-     * <ul>
-     * <li> {@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>true</code> and we have a request to process all 
-     * components in the view
-     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
-     * <code>true</code>)</li>
-     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>false</code></li>
-     * </ul>
-     * </p>
-     * </div>
-     * <p class="changed_modified_2_0">Override the default 
-     * {@link UIComponentBase#processDecodes} behavior to broadcast any queued 
-     * events after the default processing or partial processing has been 
-     * completed and to clear out any events for later phases if the event 
-     * processing for this phase caused {@link FacesContext#renderResponse} 
-     * or {@link FacesContext#responseComplete} to be called.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *                              is <code>null</code>
-     */
-    @Override
-    public void processDecodes(FacesContext context) {
-        initState();
-        notifyBefore(context, PhaseId.APPLY_REQUEST_VALUES);
-
-        try {
-            if (!skipPhase) {
-                if (context.getPartialViewContext().isPartialRequest() &&
-                    !context.getPartialViewContext().isExecuteAll()) {
-                    context.getPartialViewContext().processPartial(PhaseId.APPLY_REQUEST_VALUES);
-                } else {
-                    super.processDecodes(context);
-                }
-                broadcastEvents(context, PhaseId.APPLY_REQUEST_VALUES);
-            }
-        } finally {
-            clearFacesEvents(context);
-            notifyAfter(context, PhaseId.APPLY_REQUEST_VALUES);
-        }
-    }
-
-    /**
-     * <p><span class="changed_added_2_0">Override</span> the default
-     * {@link UIComponentBase#encodeBegin} behavior.  If
-     * {@link #getBeforePhaseListener} returns non-<code>null</code>,
-     * invoke it, passing a {@link PhaseEvent} for the {@link
-     * PhaseId#RENDER_RESPONSE} phase.  If the internal list populated
-     * by calls to {@link #addPhaseListener} is non-empty, any listeners
-     * in that list must have their {@link PhaseListener#beforePhase}
-     * method called, passing the <code>PhaseEvent</code>.  Any errors
-     * that occur during invocation of any of the the beforePhase
-     * listeners must be logged and swallowed.  After listeners are invoked
-     * call superclass processing.</p>
-     */
-    @Override
-    public void encodeBegin(FacesContext context) throws IOException {
-        initState();
-        notifyBefore(context, PhaseId.RENDER_RESPONSE);
-
-        if (!context.getResponseComplete()) {
-            super.encodeBegin(context);
-        }
-    }
-
-    /** 
-     * <p class="changed_added_2_0">If {@link
-     * javax.faces.context.PartialViewContext#isAjaxRequest} returns 
-     * <code>true</code>, perform partial rendering by calling
-     * {@link javax.faces.context.PartialViewContext#processPartial} with 
-     * {@link PhaseId#RENDER_RESPONSE}.  If {@link
-     * javax.faces.context.PartialViewContext#isAjaxRequest} returns
-     * <code>false</code>, delegate to the parent {@link
-     * javax.faces.component.UIComponentBase#encodeChildren} method.</p>
-     *
-     * @since 2.0
-     */
-    @Override
-    public void encodeChildren(FacesContext context) throws IOException {
-        if (context.getPartialViewContext().isAjaxRequest()) {
-            context.getPartialViewContext().processPartial(PhaseId.RENDER_RESPONSE);
-        } else {
-            super.encodeChildren(context);
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0"> If {@link #getAfterPhaseListener}
-     * returns non-<code>null</code>, invoke it, passing a {@link
-     * PhaseEvent} for the {@link PhaseId#RENDER_RESPONSE} phase.  Any
-     * errors that occur during invocation of the afterPhase listener
-     * must be logged and swallowed.  If the current view has view
-     * parameters, as indicated by a non-empty and
-     * non-<code>UnsupportedOperationException</code> throwing return
-     * from {@link javax.faces.view.ViewDeclarationLanguage#getViewMetadata(javax.faces.context.FacesContext, String)},
-     * call {@link UIViewParameter#encodeAll} on each parameter.  If
-     * calling <code>getViewParameters()</code> causes
-     * <code>UnsupportedOperationException</code> to be thrown, the
-     * exception must be silently swallowed.</p>
-     */
-    @Override
-    public void encodeEnd(FacesContext context) throws IOException {
-        super.encodeEnd(context);
-        encodeViewParameters(context);
-        notifyAfter(context, PhaseId.RENDER_RESPONSE);               
-    }
-
-    /**
-     * <p class="changed_added_2_0">Call {@link UIComponentBase#getRendersChildren}
-     * If {@link javax.faces.context.PartialViewContext#isAjaxRequest}
-     * returns <code>true</code> this method must return <code>true</code>.</p>
-     *
-     * @since 2.0
-     */
-    @Override
-    public boolean getRendersChildren() {
-        boolean value = super.getRendersChildren();
-        FacesContext context = FacesContext.getCurrentInstance();
-
-        if (context.getPartialViewContext().isAjaxRequest()) {
-            value = true;
-        }
-        return value;
-    }
-
-    /**
-     * <p>Utility method that notifies phaseListeners for the given
-     * phaseId.  Assumes that either or both the MethodExpression or
-     * phaseListeners data structure are non-null.</p>
-     *
-     * @param context   the context for this request
-     * @param phaseId   the {@link PhaseId} of the current phase
-     * @param isBefore, if true, notify beforePhase listeners.  Notify
-     *                  afterPhase listeners otherwise.
-     */
-    private void notifyPhaseListeners(FacesContext context,
-                                      PhaseId phaseId,
-                                      boolean isBefore) {
-        PhaseEvent event = createPhaseEvent(context, phaseId);
-
-        MethodExpression beforePhase = getBeforePhaseListener();
-        MethodExpression afterPhase = getAfterPhaseListener();
-        boolean hasPhaseMethodExpression =
-              (isBefore && (null != beforePhase)) ||
-              (!isBefore && (null != afterPhase) && !beforeMethodException);
-        MethodExpression expression = isBefore ? beforePhase : afterPhase;
-
-        if (hasPhaseMethodExpression) {
-            try {
-                expression.invoke(context.getELContext(), new Object[]{event});
-                skipPhase = context.getResponseComplete() ||
-                            context.getRenderResponse();
-            }
-            catch (Exception e) {
-                if (isBefore) {
-                    beforeMethodException = true;
-                }
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "severe.component.unable_to_process_expression",
-                               new Object[] { expression.getExpressionString(),
-                                              (isBefore ? "beforePhase" : "afterPhase")});
-                }
-                return;
-            }
-        }
-        if (phaseListenerIterator != null && !beforeMethodException) {
-            while ((isBefore)
-                   ? phaseListenerIterator.hasNext()
-                   : phaseListenerIterator.hasPrevious()) {
-                PhaseListener curListener = ((isBefore)
-                                             ? phaseListenerIterator.next()
-                                             : phaseListenerIterator
-                                                   .previous());
-                if (phaseId == curListener.getPhaseId() ||
-                    PhaseId.ANY_PHASE == curListener.getPhaseId()) {
-                    try {
-                        if (isBefore) {
-                            curListener.beforePhase(event);
-                        } else {
-                            curListener.afterPhase(event);
-                        }
-                        skipPhase = context.getResponseComplete() ||
-                                    context.getRenderResponse();
-                    }
-                    catch (Exception e) {
-                        if (isBefore && phaseListenerIterator.hasPrevious()) {
-                            phaseListenerIterator.previous();
-                        }
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE,
-                                       "severe.component.uiviewroot_error_invoking_phaselistener",
-                                       curListener.getClass().getName());
-                        }
-                        return;
-                    }
-                }
-            }
-        }
-    }
-
-    private static PhaseEvent createPhaseEvent(FacesContext context,
-                                               PhaseId phaseId)
-    throws FacesException {
-
-        if (lifecycle == null) {
-            LifecycleFactory lifecycleFactory = (LifecycleFactory)
-                  FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-            String lifecycleId =
-                  context.getExternalContext()
-                        .getInitParameter(FacesServlet.LIFECYCLE_ID_ATTR);
-            if (lifecycleId == null) {
-                lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
-            }
-            lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
-        }
-
-        return (new PhaseEvent(context, phaseId, lifecycle));
-
-    }
-
-
-    /**
-     * <div class="changed_added_2_0">
-     * <p>Perform partial processing by calling
-     * {@link javax.faces.context.PartialViewContext#processPartial} with
-     * {@link PhaseId#PROCESS_VALIDATIONS} if:
-     * <ul>
-     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>true</code> and we don't have a request to process all
-     * components in the view
-     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
-     * <code>false</code>)</li>
-     * </ul>
-     * Perform full processing by calling
-     * {@link UIComponentBase#processValidators} if one of the following
-     * conditions are met:
-     * <ul>
-     * <li> {@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>true</code> and we have a request to process all
-     * components in the view
-     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
-     * <code>true</code>)</li>
-     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>false</code></li>
-     * </ul>
-     * </p>
-     * </div>
-     * <p class="changed_modified_2_0">Override the default 
-     * {@link UIComponentBase#processValidators} behavior to broadcast any 
-     * queued events after the default processing or partial processing has been 
-     * completed and to clear out any events for later phases if the event 
-     * processing for this phase caused {@link FacesContext#renderResponse} or 
-     * {@link FacesContext#responseComplete} to be called.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *                              is <code>null</code>
-     */
-    @Override
-    public void processValidators(FacesContext context) {
-        initState();
-        notifyBefore(context, PhaseId.PROCESS_VALIDATIONS);
-
-        try {
-            if (!skipPhase) {
-                if (context.getPartialViewContext().isPartialRequest() &&
-                    !context.getPartialViewContext().isExecuteAll()) {
-                    context.getPartialViewContext().processPartial(PhaseId.PROCESS_VALIDATIONS);
-                } else {
-                    super.processValidators(context);
-                }
-                broadcastEvents(context, PhaseId.PROCESS_VALIDATIONS);
-            }
-        } finally {
-            clearFacesEvents(context);
-            notifyAfter(context, PhaseId.PROCESS_VALIDATIONS);
-        }
-    }
-
-    /**
-     * <div class="changed_added_2_0">
-     * <p>Perform partial processing by calling
-     * {@link javax.faces.context.PartialViewContext#processPartial} with
-     * {@link PhaseId#UPDATE_MODEL_VALUES} if:
-     * <ul>
-     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>true</code> and we don't have a request to process all
-     * components in the view
-     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
-     * <code>false</code>)</li>
-     * </ul>
-     * Perform full processing by calling
-     * {@link UIComponentBase#processUpdates} if one of the following
-     * conditions are met:
-     * <ul>
-     * <li> {@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>true</code> and we have a request to process all
-     * components in the view
-     * ({@link javax.faces.context.PartialViewContext#isExecuteAll} returns
-     * <code>true</code>)</li>
-     * <li>{@link javax.faces.context.PartialViewContext#isPartialRequest}
-     * returns <code>false</code></li>
-     * </ul>
-     * </p>
-     *</div>
-     * <p class="changed_modified_2_0">Override the default {@link UIComponentBase}
-     * behavior to broadcast any queued events after the default processing or 
-     * partial processing has been completed and to clear out any events for 
-     * later phases if the event processing for this phase caused 
-     * {@link FacesContext#renderResponse} or
-     * {@link FacesContext#responseComplete} to be called.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *                              is <code>null</code>
-     */
-    @Override
-    public void processUpdates(FacesContext context) {
-        initState();
-        notifyBefore(context, PhaseId.UPDATE_MODEL_VALUES);
-
-        try {
-            if (!skipPhase) {
-                if (context.getPartialViewContext().isPartialRequest() &&
-                    !context.getPartialViewContext().isExecuteAll()) {
-                    context.getPartialViewContext().processPartial(PhaseId.UPDATE_MODEL_VALUES);
-                } else {
-                    super.processUpdates(context);
-                }
-                broadcastEvents(context, PhaseId.UPDATE_MODEL_VALUES);
-            }
-        } finally {
-            clearFacesEvents(context);
-            notifyAfter(context, PhaseId.UPDATE_MODEL_VALUES);
-        }
-    }
-
-    /**
-     * <p>Broadcast any events that have been queued for the <em>Invoke
-     * Application</em> phase of the request processing lifecycle
-     * and to clear out any events for later phases if the event processing
-     * for this phase caused {@link FacesContext#renderResponse} or
-     * {@link FacesContext#responseComplete} to be called.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     *
-     * @throws NullPointerException if <code>context</code>
-     *                              is <code>null</code>
-     */
-    public void processApplication(FacesContext context) {
-        initState();
-        notifyBefore(context, PhaseId.INVOKE_APPLICATION);
-        try {
-            if (!skipPhase) {
-                // NOTE - no tree walk is performed; this is a UIViewRoot-only operation
-                broadcastEvents(context, PhaseId.INVOKE_APPLICATION);
-            }
-        } finally {
-            clearFacesEvents(context);
-            notifyAfter(context, PhaseId.INVOKE_APPLICATION);
-        }
-    }
-
-
-    // clear out the events if we're skipping to render-response
-    // or if there is a response complete signal.
-    private void clearFacesEvents(FacesContext context) {
-        if (context.getRenderResponse() || context.getResponseComplete()) {
-            if (events != null) {
-                for (List<FacesEvent> eventList : events) {
-                    if (eventList != null) {
-                        eventList.clear();
-                    }
-                }
-                events = null;
-            }
-        }
-    }
-
-    /**
-     * <p>Generate an identifier for a component.  The identifier will
-     * be prefixed with UNIQUE_ID_PREFIX, and will be unique within
-     * this UIViewRoot.</p>
-     */
-    public String createUniqueId() {
-        return createUniqueId(getFacesContext(), null);
-    }
-
-    /**<p>Generate an identifier for a component. The identifier
-     * will be prefixed with UNIQUE_ID_PREFIX, and will be unique
-     * within this UIViewRoot. Optionally, a unique seed value can
-     * be supplied by component creators which should be
-     * included in the generated unique id.</p>
-     *
-     * @param context FacesContext
-     * @param seed an optional seed value - e.g. based on the position of the component in the VDL-template
-     * @return a unique-id in this component-container
-     */
-    public String createUniqueId(FacesContext context, String seed) {
-        if (seed != null) {
-            return UIViewRoot.UNIQUE_ID_PREFIX + seed;
-        } else {
-            Integer i = (Integer) getStateHelper().get(PropertyKeys.lastId);
-            int lastId = ((i != null) ? i : 0);
-            getStateHelper().put(PropertyKeys.lastId,  ++lastId);
-            return UIViewRoot.UNIQUE_ID_PREFIX + lastId;
-        }
-    }
-
-
-    /**
-     * <p>Return the <code>Locale</code> to be used in localizing the
-     * response being created for this view.</p>
-     * <p/>
-     * <p>Algorithm:</p>
-     * <p/>
-     * <p>If we have a <code>locale</code> ivar, return it.  If we have
-     * a value expression for "locale", get its value.  If the value is
-     * <code>null</code>, return the result of calling {@link
-     * javax.faces.application.ViewHandler#calculateLocale}.  If the
-     * value is an instance of <code>java.util.Locale</code> return it.
-     * If the value is a String, convert it to a
-     * <code>java.util.Locale</code> and return it.  If there is no
-     * value expression for "locale", return the result of calling {@link
-     * javax.faces.application.ViewHandler#calculateLocale}.</p>
-     *
-     * @return The current <code>Locale</code> obtained by executing the
-     *         above algorithm.
-     */
-    public Locale getLocale() {
-
-        Object result = getStateHelper().eval(PropertyKeys.locale);
-
-        if (result != null) {
-            Locale locale = null;
-            if (result instanceof Locale) {
-                    locale = (Locale) result;
-            } else if (result instanceof String) {
-                   locale = getLocaleFromString((String) result);
-            }
-            return locale;
-        } else {
-            FacesContext context = getFacesContext();
-            return context.getApplication().getViewHandler().calculateLocale(context);
-        }
-
-    }
-
-
-    // W3C XML specification refers to IETF RFC 1766 for language code
-    // structure, therefore the value for the xml:lang attribute should
-    // be in the form of language or language-country or
-    // language-country-variant.
-
-    private static Locale getLocaleFromString(String localeStr)
-        throws IllegalArgumentException {
-        // length must be at least 2.
-        if (null == localeStr || localeStr.length() < 2) {
-            throw new IllegalArgumentException("Illegal locale String: " +
-                                               localeStr);
-        }
-
-        Locale result = null;
-        String lang = null;
-        String country = null;
-        String variant = null;
-        char[] seps = {
-            '-',
-            '_'
-        };
-        int inputLength = localeStr.length();
-        int i = 0;
-        int j = 0;
-
-        // to have a language, the length must be >= 2
-        if ((inputLength >= 2) &&
-            ((i = indexOfSet(localeStr, seps, 0)) == -1)) {
-            // we have only Language, no country or variant
-            if (2 != localeStr.length()) {
-                throw new
-                    IllegalArgumentException("Illegal locale String: " +
-                                             localeStr);
-            }
-            lang = localeStr.toLowerCase();
-        }
-
-        // we have a separator, it must be either '-' or '_'
-        if (i != -1) {
-            lang = localeStr.substring(0, i);
-            // look for the country sep.
-            // to have a country, the length must be >= 5
-            if ((inputLength >= 5) &&
-                (-1 == (j = indexOfSet(localeStr, seps, i + 1)))) {
-                // no further separators, length must be 5
-                if (inputLength != 5) {
-                    throw new
-                        IllegalArgumentException("Illegal locale String: " +
-                                                 localeStr);
-                }
-                country = localeStr.substring(i + 1);
-            }
-            if (j != -1) {
-                country = localeStr.substring(i + 1, j);
-                // if we have enough separators for language, locale,
-                // and variant, the length must be >= 8.
-                if (inputLength >= 8) {
-                    variant = localeStr.substring(j + 1);
-                } else {
-                    throw new
-                        IllegalArgumentException("Illegal locale String: " +
-                                                 localeStr);
-                }
-            }
-        }
-        if (variant != null && country != null && lang != null) {
-            result = new Locale(lang, country, variant);
-        } else if (lang != null && country != null) {
-            result = new Locale(lang, country);
-        } else if (lang != null) {
-            result = new Locale(lang, "");
-        }
-        return result;
-    }
-
-
-    /**
-     * @param str local string
-     * @param set the substring
-     * @param fromIndex starting index
-     * @return starting at <code>fromIndex</code>, the index of the
-     *         first occurrence of any substring from <code>set</code> in
-     *         <code>toSearch</code>, or -1 if no such match is found
-     */
-    private static int indexOfSet(String str, char[] set, int fromIndex) {
-        int result = -1;
-        for (int i = fromIndex, len = str.length(); i < len; i++) {
-            for (int j = 0, innerLen = set.length; j < innerLen; j++) {
-                if (str.charAt(i) == set[j]) {
-                    result = i;
-                    break;
-                }
-            }
-            if (-1 != result) {
-                break;
-            }
-        }
-        return result;
-    }
-
-    /**
-     * <p>Set the <code>Locale</code> to be used in localizing the
-     * response being created for this view. </p>
-     *
-     * @param locale The new localization Locale
-     */
-    public void setLocale(Locale locale) {
-
-        getStateHelper().put(PropertyKeys.locale, locale);
-        // Make sure to appraise the EL of this switch in Locale.
-        FacesContext.getCurrentInstance().getELContext().setLocale(locale);
-
-    }
-    
-    private Map<String, Object> viewScope = null;
-
-    /**
-     * <p class="changed_added_2_0">This implementation simply calls through to {@link
-     * #getViewMap(boolean)}, passing <code>true</code> as the argument, and
-     * returns the result.</p>
-     * <div class="changed_added_2_0">
-     *
-     * @since 2.0
-     */
-    public Map<String, Object> getViewMap() {
-
-        return getViewMap(true);
-        
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns a <code>Map</code> that acts as the
-     * interface to the data store that is the "view scope", or, if this
-     * instance does not have such a <code>Map</code> and the
-     * <code>create</code> argument is <code>true</code>, creates one and
-     * returns it.  This map must be instantiated lazily and cached for return
-     * from subsequent calls to this method on this <code>UIViewRoot</code>
-     * instance. {@link javax.faces.application.Application#publishEvent} must
-     * be called, passing {@link PostConstructViewMapEvent}<code>.class</code> as the
-     * first argument and this <code>UIViewRoot</code> instance as the second
-     * argument.</p>
-     *
-     * <p>The returned <code>Map</code> must be implemented such that calling
-     * <code>clear()</code> on the <code>Map</code> causes {@link javax.faces.application.Application#publishEvent} to be
-     * called, passing {@link PreDestroyViewMapEvent}<code>.class</code>
-     * as the first argument and this <code>UIViewRoot</code> instance
-     * as the second argument.</p>
-
-     * <p class="changed_modified_2_0_rev_a">Depending upon application
-     * configuration, objects stored in the view map may need to be
-     * <code>Serializable</code>.  In general, it is a good idea to
-     * ensure that any objects stored in the view map are
-     * <code>Serializable</code>.</p>
-     * 
-     * <p>See {@link FacesContext#setViewRoot} for the specification of when the
-     * <code>clear()</code> method must be called.</p>
-     * <p/>
-     * </div>
-     *
-     * @param create <code>true</code> to create a new <code>Map</code> for this
-     *               instance if necessary; <code>false</code> to return
-     *               <code>null</code> if there's no current <code>Map</code>.
-     *
-     * @since 2.0
-     */
-    public Map<String, Object> getViewMap(boolean create) {
-
-        if (create && viewScope == null) {
-            viewScope = new ViewMap(getFacesContext().getApplication().getProjectStage());
-            getFacesContext().getApplication()
-                  .publishEvent(getFacesContext(),
-                                PostConstructViewMapEvent.class,
-                                this);
-        }
-        return viewScope;
-        
-    }
-
-    Map<Class<? extends SystemEvent>,List<SystemEventListener>> viewListeners;
-
-
-    /**
-     * <p class="changed_added_2_0">Install the listener instance
-     * referenced by argument <code>listener</code> into the
-     * <code>UIViewRoot</code> as a listener for events of type
-     * <code>systemEventClass</code>.</p>
-     *
-     * <p>Note that installed listeners are not maintained as part of the
-     * <code>UIViewRoot</code>'s state.</p>
-     *
-     * @param systemEvent the <code>Class</code> of event for which
-     *  <code>listener</code> must be fired.
-
-     * @param listener the implementation of {@link
-     *  javax.faces.event.SystemEventListener} whose {@link
-     *  javax.faces.event.SystemEventListener#processEvent} method must
-     *  be called when events of type <code>systemEventClass</code> are
-     *  fired.
-     *
-     * @throws <code>NullPointerException</code> if <code>systemEventClass</code>
-     *  or <code>listener</code> are <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void subscribeToViewEvent(Class<? extends SystemEvent> systemEvent,
-                                     SystemEventListener listener) {
-
-        if (systemEvent == null) {
-            throw new NullPointerException();
-        }
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-        
-        if (viewListeners == null) {
-            viewListeners = new HashMap<Class<? extends SystemEvent>, List<SystemEventListener>>(4, 1.0f);
-        }
-        List<SystemEventListener> listeners = viewListeners.get(systemEvent);
-        if (listeners == null) {
-            listeners = new CopyOnWriteArrayList<SystemEventListener>();
-            viewListeners.put(systemEvent, listeners);
-        }
-        listeners.add(listener);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Remove the listener instance
-     * referenced by argument <code>listener</code> from the
-     * <code>UIViewRoot</code> as a listener for events of type
-     * <code>systemEventClass</code>.
-     *
-     * @param systemEvent the <code>Class</code> of event for which
-     *  <code>listener</code> must be fired.
-     * @param listener the implementation of {@link
-     *  javax.faces.event.SystemEventListener} whose {@link
-     *  javax.faces.event.SystemEventListener#processEvent} method must
-     *  be called when events of type <code>systemEventClass</code> are
-     *  fired.
-     *
-     * @throws <code>NullPointerException</code> if
-     * <code>systemEventClass</code> or <code>listener</code> are
-     * <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void unsubscribeFromViewEvent(Class<? extends SystemEvent> systemEvent,
-                                         SystemEventListener listener) {
-
-        if (systemEvent == null) {
-            throw new NullPointerException();
-        }
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-
-        if (viewListeners != null) {
-            List<SystemEventListener> listeners = viewListeners.get(systemEvent);
-            if (listeners != null) {
-                listeners.remove(listener);
-            }
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the
-     * <code>SystemEventListener</code> instances registered on this
-     * <code>UIComponent</code> instance that are interested in events
-     * of type <code>eventClass</code>.</p>
-     *
-     * @param systemEvent the <code>Class</code> of event for which the
-     * listeners must be returned.
-
-     * @throws NullPointerException if argument <code>systemEvent</code>
-     * is <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public List<SystemEventListener> getViewListenersForEventClass(Class<? extends SystemEvent> systemEvent) {
-
-        if (systemEvent == null) {
-            throw new NullPointerException();
-        }
-        if (viewListeners != null) {
-            return viewListeners.get(systemEvent);
-        }
-        return null;
-        
-    }
-    
-
-    private void encodeViewParameters(FacesContext context) {
-
-        ViewDeclarationLanguage vdl = context.getApplication().getViewHandler().
-                    getViewDeclarationLanguage(context, getViewId());
-
-        if (vdl == null) {
-            return;
-        }
-        ViewMetadata metadata = vdl.getViewMetadata(context, getViewId());
-        if (metadata != null) { // perhaps it's not supported
-            Collection<UIViewParameter> params =
-                  ViewMetadata.getViewParameters(this);
-            if (params.isEmpty()) {
-                return;
-            }
-
-            try {
-                for (UIViewParameter param : params) {
-                    param.encodeAll(context);
-                }
-            } catch (IOException e) {
-                // IOException is forced by contract and is not expected to be thrown in this case
-                throw new RuntimeException("Unexpected IOException", e);
-            }
-        }
-    }
-
-    // END TENATIVE
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-
-    private Object[] values;
-
-    @Override
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (values == null) {
-            values = new Object[2];
-        }
-
-        values[0] = super.saveState(context);
-        values[1] = saveAttachedState(context, viewScope);
-        return (values);
-
-    }
-
-    @Override
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-        
-        values = (Object[]) state;
-        super.restoreState(context, values[0]);
-        //noinspection unchecked
-        viewScope = (Map<String,Object>) restoreAttachedState(context, values[1]);
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static String getIdentifier(String target) {
-
-        // check map
-        String id = LOCATION_IDENTIFIER_MAP.get(target);
-        if (id == null) {
-            id = LOCATION_IDENTIFIER_PREFIX + target;
-            LOCATION_IDENTIFIER_MAP.put(target, id);
-        }
-        return id;
-
-    }
-
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    private List<UIComponent> getComponentResources(FacesContext context,
-                                                    String target,
-                                                    boolean create) {
-
-        String location = getIdentifier(target);
-        UIComponent facet = getFacet(location);
-        if (facet == null && create) {
-            // Using an implementation specific component type to prevent
-            // component resources being rendered at the incorrect time if
-            // a caller calls UIViewRoot.encodeAll().
-            facet = context.getApplication().createComponent("javax.faces.ComponentResourceContainer");
-            facet.setId(location);
-            getFacets().put(location, facet);
-        }
-
-        return ((facet != null) ? facet.getChildren() : null);
-
-    }
-    
-
-    private static final class ViewMap extends HashMap<String,Object> {
-
-        private static final long serialVersionUID = -1l;
-
-        private ProjectStage stage;
-
-        
-        // -------------------------------------------------------- Constructors
-
-
-        ViewMap(ProjectStage stage) {
-
-            this.stage = stage;
-
-        }
-
-
-        // ---------------------------------------------------- Methods from Map
-
-
-        @Override
-        public void clear() {
-
-            FacesContext context = FacesContext.getCurrentInstance();
-            context.getApplication().publishEvent(context,
-                                                  PreDestroyViewMapEvent.class,
-                                                  context.getViewRoot());
-            super.clear();
-
-        }
-
-
-        @Override
-        public Object put(String key, Object value) {
-
-            if (value != null && ProjectStage.Development.equals(stage) && !(value instanceof Serializable)) {
-                LOGGER.log(Level.WARNING,
-                           "warning.component.uiviewroot_non_serializable_attribute_viewmap",
-                           new Object[] { key, value.getClass().getName() });
-            }
-            return super.put(key, value);
-
-        }
-
-
-        @Override
-        public void putAll(Map<? extends String,?> m) {
-
-            for (Map.Entry<? extends String,?> entry : m.entrySet()) {
-                String k = entry.getKey();
-                Object v = entry.getValue();
-                this.put(k, v);
-            }
-
-        }
-
-
-    } // END ViewMap
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UniqueIdVendor.java b/jsf-api/src/main/java/javax/faces/component/UniqueIdVendor.java
deleted file mode 100644
index 000ec2a..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UniqueIdVendor.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0"><strong>UniqueIdVendor</strong> is an
- * interface implemented by <code>UIComponents</code> that also
- * implement {@link NamingContainer} so that they can provide unique ids
- * based on their own clientId.  This will reduce the amount of id
- * generation variance between different renderings of the same view and
- * is helpful for improved state saving.</p>
- *
- * @since 2.0
- */
-public interface UniqueIdVendor {
-
-
-    /**<p>Generate an identifier for a component. The identifier
-     * will be prefixed with UNIQUE_ID_PREFIX, and will be unique
-     * within this component-container. Optionally, a unique seed value can
-     * be supplied by component creators which should be
-     * included in the generated unique id.</p>
-     *
-     * @param context FacesContext
-     * @param seed an optional seed value - e.g. based on the position of the component in the VDL-template
-     * @return a unique-id in this component-container
-     */
-    public String createUniqueId(FacesContext context, String seed);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/UpdateModelException.java b/jsf-api/src/main/java/javax/faces/component/UpdateModelException.java
deleted file mode 100644
index 63ea3a0..0000000
--- a/jsf-api/src/main/java/javax/faces/component/UpdateModelException.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-
-/**
- * <p class="changed_added_2_0">This exception indicates a failure to 
- * update the model and is created to wrap any exception
- * that occurs during {@link UIInput#updateModel}. The exception is then passed 
- * to {@link javax.faces.context.ExceptionHandler#processEvent}, where
- * the <code>ExceptionHandler</code> has an opportunity to handle it.</p>
- *
- * @since 2.0
- */
-public class UpdateModelException extends FacesException {
-
-    private static final long serialVersionUID = 6081145672680351218L;
-
-    private FacesMessage facesMessage;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Store the argument
-     * <code>facesMessage</code> so it may be returned from {@link
-     * #getFacesMessage} and pass the argument <code>cause</code> to the
-     * super constructor.</p>
-     * @param facesMessage the message for the exception
-     * @param cause the cause of this exception
-     *
-     * @since 2.0
-     */
-    public UpdateModelException(FacesMessage facesMessage,  
-                                Throwable cause) {
-
-        super(cause);
-        this.facesMessage = facesMessage;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-    /**
-     * <p class="changed_added_2_0">Return the <code>FacesMessage</code>
-     * passed to the constructor.</p>
-     *
-     * @since 2.0
-     */
-
-    public FacesMessage getFacesMessage() {
-
-        return this.facesMessage;
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/ValueHolder.java b/jsf-api/src/main/java/javax/faces/component/ValueHolder.java
deleted file mode 100644
index 53ec73c..0000000
--- a/jsf-api/src/main/java/javax/faces/component/ValueHolder.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.convert.Converter;
-import javax.el.ValueExpression;
-
-
-/**
- * <p><strong class="changed_modified_2_0">ValueHolder</strong> is an
- * interface that may be implemented by any concrete {@link UIComponent}
- * that wishes to support a local value, as well as access data in the
- * model tier via a <em>value expression</em>, and support conversion
- * between String and the model tier data's native data type.
- */
-
-public interface ValueHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-    /**
-     * <p>Return the local value of this {@link UIComponent} (if any),
-     * without evaluating any associated {@link ValueExpression}.</p>
-     */
-    public Object getLocalValue();
-
-
-    /**
-     * <p>Gets the value of this {@link UIComponent}.  If validation
-     * failed, as indicated by 
-     * {@link javax.faces.context.FacesContext#isValidationFailed}
-     * returning <code>true</code>, always return the local value.
-     * Otherwise, first, consult the local value property of this
-     * component.  If non-<code>null</code> return it.  If
-     * <code>null</code>, see if we have a {@link ValueExpression} for
-     * the <code>value</code> property.  If so, return the result of
-     * evaluating the property, otherwise return <code>null</code>.
-     * Note that because the specification for {@link
-     * UIComponent#setValueBinding} requires a call through to {@link
-     * UIComponent#setValueExpression}, legacy tags will continue to
-     * work.</p>
-     */
-    public Object getValue();
-
-
-    /**
-      * <p>Set the value of this {@link UIComponent} (if any).</p>
-      *
-      * @param value The new local value
-      */
-    public void setValue(Object value);
-
-
-    /**
-     * <p>Return the {@link Converter} (if any)
-     * that is registered for this {@link UIComponent}.</p>
-     */
-    public Converter getConverter();
-
-
-    /**
-     * <p>Set the {@link Converter} (if any) that is registered for this
-     * {@link UIComponent}.</p>
-     *
-     * @param converter New {@link Converter} (or <code>null</code>)
-     */
-    public void setConverter(Converter converter);
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/AjaxBehavior.java b/jsf-api/src/main/java/javax/faces/component/behavior/AjaxBehavior.java
deleted file mode 100644
index 3e4de8e..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/AjaxBehavior.java
+++ /dev/null
@@ -1,732 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
- 
-package javax.faces.component.behavior;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AjaxBehaviorListener;
-
-
-/**
- * <p class="changed_added_2_0">An instance of this class is added
- * as a {@link ClientBehavior} to a component using the 
- * {@link javax.faces.component.behavior.ClientBehaviorHolder#addClientBehavior} 
- * contract that components implement.  The presence of this 
- * {@link ClientBehavior} will cause the rendering of JavaScript that 
- * produces an <code>Ajax</code> request using the 
- * specification public JavaScript API when the component is 
- * rendered.</p> 
- *
- * @since 2.0
- */
-public class AjaxBehavior extends ClientBehaviorBase {
-
-    /**
-     * <p class="changed_added_2_0">The standard id for this behavior.</p>
-     */
-    public static final String BEHAVIOR_ID = "javax.faces.behavior.Ajax";
-
-    private static final Set<ClientBehaviorHint> HINTS = 
-        Collections.unmodifiableSet(EnumSet.of(ClientBehaviorHint.SUBMITTING));
-
-    private String onerror;
-    private String onevent;
-    private List<String> execute;
-    private List<String> render;
-    private Boolean disabled;
-    private Boolean immediate;
-
-    private Map<String, ValueExpression> bindings;
-
-    // ---------------------------------------------------------- Public Methods
-    @Override
-    public String getRendererType() {
-        // We use the same sring for both the behavior id and the renderer 
-        // type.
-        return  BEHAVIOR_ID;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">
-     * This method returns an unmodifiable <code>Set</code> containing
-     * the {@link ClientBehaviorHint} <code>SUBMITTING</code>.</p> 
-     *
-     * @return unmodifiable set containing the hint {@link ClientBehaviorHint}
-     * <code>SUBMITTING</code>.
-     *
-     * @since 2.0
-     */
-    public Set<ClientBehaviorHint> getHints() {
-        return HINTS;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>String</code> of
-     * JavaScript function name that will be used to identify
-     * the client callback function that should be run in the event of
-     * an error.
-     *
-     * @since 2.0
-     */
-    public String getOnerror() {
-
-        return (String) eval(ONERROR, onerror);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Sets the JavaScript function name 
-     * that will be used to identify the client callback function that 
-     * should be run in the event of an error.
-     *
-     * @param onerror the error handling function name
-     *
-     * @since 2.0
-     */
-    public void setOnerror(String onerror) {
-
-        this.onerror = onerror;
-
-        clearInitialState();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>String</code> of
-     * JavaScript function name that will be used to identify the
-     * client callback function that should be run on the occurance
-     * of a client-side event.
-     *
-     * @since 2.0
-     */
-    public String getOnevent() {
-
-        return (String) eval(ONEVENT, onevent);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Sets the JavaScript function name 
-     * that will be used to identify the client callback function that 
-     * should be run in response to event activity.
-     *
-     * @param onevent the event handling function name
-     *
-     * @since 2.0
-     */
-    public void setOnevent(String onevent) {
-
-        this.onevent = onevent;
-
-        clearInitialState();
-   }
-
-    /**
-     * <p class="changed_added_2_0">Return a non-empty
-     * <code>Collection<String></code> of component
-     * identifiers that will be used to identify components that should be
-     * processed during the <code>execute</code> phase of the request
-     * processing lifecycle.</p>
-     * <p>Note that the returned collection may be unmodifiable.  Modifications
-     * should be performed by calling {@link #setExecute}.</p>
-     *
-     * @since 2.0
-     */
-    public Collection<String> getExecute() {
-
-        return getCollectionValue(EXECUTE, execute);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Sets the component identifiers that 
-     * will be used to identify components that should be
-     * processed during the <code>execute</code> phase of the request
-     * processing lifecycle.</p>
-     *
-     * @param execute the ids of components to execute
-     *
-     * @since 2.0
-     */
-    public void setExecute(Collection<String> execute) {
-
-        this.execute = copyToList(execute);
-
-        clearInitialState();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return a non-empty
-     * <code>Collection<String></code> of component
-     * identifiers that will be used to identify components that should be
-     * processed during the <code>render</code> phase of the request
-     * processing lifecycle.</p>
-     * <p>Note that the returned collection may be unmodifiable.  Modifications
-     * should be performed by calling {@link #setRender}.</p>
-     *
-     * @since 2.0
-     */
-    public Collection<String> getRender() {
-
-        return getCollectionValue(RENDER, render);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Sets the component identifiers that 
-     * will be used to identify components that should be
-     * processed during the <code>render</code> phase of the request
-     * processing lifecycle.</p>
-     *
-     * @param render the ids of components to render
-     *
-     * @since 2.0
-     */
-    public void setRender(Collection<String> render) {
-
-        this.render = copyToList(render);
-
-        clearInitialState();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the disabled status of this behavior.</p>
-     *
-     * @since 2.0
-     */
-    public boolean isDisabled() {
-
-        Boolean result = (Boolean) eval(DISABLED, disabled);
-        return ((result != null) ? result : false);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Sets the disabled status of this 
-     * behavior.</p>
-     *
-     * @since 2.0
-     */
-    public void setDisabled(boolean disabled) {
-
-        this.disabled = disabled;
-
-        clearInitialState();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the immediate status of this 
-     * behaivor.</p>
-     *
-     * @since 2.0
-     */
-    public boolean isImmediate() {
-        Boolean result = (Boolean) eval(IMMEDIATE, immediate);
-        return ((result != null) ? result : false);
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Sets the immediate status of this 
-     * behavior.</p>
-     *
-     * @since 2.0
-     */
-    public void setImmediate(boolean immediate) {
-
-        this.immediate = immediate;
-
-        clearInitialState();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Tests whether the immediate attribute
-     * is specified.  Returns true if the immediate attribute is specified,
-     * either as a locally set property or as a value expression.  This
-     * information allows an associated client behavior renderer to fall back
-     * on the parent component's immediate status when immediate is not 
-     * explicitly specified on the <code>AjaxBehavior</code>.
-     * </p>
-     *
-     * @since 2.0
-     */
-    public boolean isImmediateSet() {
-        return ((immediate != null) || (getValueExpression(IMMEDIATE) != null));
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns the {@link ValueExpression}
-     * used to calculate the value for the specified property name, if any.
-     * </p>
-     *
-     * @param name Name of the property for which to retrieve a
-     *  {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     */
-    public ValueExpression getValueExpression(String name) {
-
-        if (name == null) {
-            throw new NullPointerException();
-        }
-
-        return ((bindings == null) ? null : bindings.get(name));
-    }
-
-    /**
-     * <p class="changed_added_2_0">Sets the {@link ValueExpression} 
-     * used to calculate the value for the specified property name.</p>
-     * </p>
-     *
-     * @param name Name of the property for which to set a
-     *  {@link ValueExpression}
-     * @param binding The {@link ValueExpression} to set, or <code>null</code>
-     *  to remove any currently set {@link ValueExpression}
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     */
-    public void setValueExpression(String name, ValueExpression binding) {
-
-        if (name == null) {
-            throw new NullPointerException();
-        }
-
-        if (binding != null) {
-
-            if (binding.isLiteralText()) {
-                setLiteralValue(name, binding);
-            } else {
-                if (bindings == null) {
-
-                    // We use a very small initial capacity on this HashMap.
-                    // The goal is not to reduce collisions, but to keep the
-                    // memory footprint small.  It is very unlikely that an
-                    // an AjaxBehavior would have more than 1 or 2 bound 
-                    // properties - and even if more are present, it's okay
-                    // if we have some collisions - will still be fast.
-                    bindings = new HashMap<String, ValueExpression>(6,1.0f);
-                }
-
-                bindings.put(name, binding);
-            }
-        } else {
-            if (bindings != null) {
-                bindings.remove(name);
-                if (bindings.isEmpty()) {
-                    bindings = null;
-                }
-            }
-        }
-
-        clearInitialState();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Add the specified {@link AjaxBehaviorListener}
-     * to the set of listeners registered to receive event notifications
-     * from this {@link AjaxBehavior}.</p>
-     *
-     * @param listener The {@link AjaxBehaviorListener} to be registered
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public void addAjaxBehaviorListener(AjaxBehaviorListener listener) {
-        addBehaviorListener(listener);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Remove the specified {@link AjaxBehaviorListener}
-     * from the set of listeners registered to receive event notifications
-     * from this {@link AjaxBehavior}.</p>
-     *
-     * @param listener The {@link AjaxBehaviorListener} to be removed
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public void removeAjaxBehaviorListener(AjaxBehaviorListener listener) {
-        removeBehaviorListener(listener);
-    }
-
-    @Override
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        Object[] values;
-
-        Object superState = super.saveState(context);
-
-        if (initialStateMarked()) {
-            if (superState == null) {
-                values = null;
-            } else {
-                values = new Object[] { superState };
-            }
-        } else {
-            values = new Object[8];
-      
-            values[0] = superState;
-            values[1] = onerror;
-            values[2] = onevent;
-            values[3] = disabled;
-            values[4] = immediate;
-            values[5] = saveList(execute);
-            values[6] = saveList(render);
-            values[7] = saveBindings(context, bindings);
-        }
-
-        return values;
-    }
-
-    @Override
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-
-            Object[] values = (Object[]) state;
-            super.restoreState(context, values[0]);
-
-            if (values.length != 1) {
-                onerror = (String)values[1];
-                onevent = (String)values[2];
-                disabled = (Boolean)values[3];
-                immediate = (Boolean)values[4];
-                execute = restoreList(EXECUTE, values[5]);
-                render = restoreList(RENDER, values[6]);
-                bindings = restoreBindings(context, values[7]);
-
-                // If we saved state last time, save state again next time.
-                clearInitialState();
-            }
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    // Utility for saving bindings state
-    private static Object saveBindings(FacesContext context,
-                                       Map<String, ValueExpression> bindings) {
-
-        // Note: This code is copied from UIComponentBase.  In a future
-        // version of the JSF spec, it would be useful to define a
-        // attribute/property/bindings/state helper object that can be
-        // shared across components/behaviors/validaters/converters.
-        
-        if (bindings == null) {
-            return (null);
-        }
-
-        Object values[] = new Object[2];
-        values[0] = bindings.keySet().toArray(new String[bindings.size()]);
-
-        Object[] bindingValues = bindings.values().toArray();
-        for (int i = 0; i < bindingValues.length; i++) {
-            bindingValues[i] = UIComponentBase.saveAttachedState(context, bindingValues[i]);
-        }
-
-        values[1] = bindingValues;
-
-        return (values);
-    }
-
-    // Utility for restoring bindings from state
-    private static Map<String, ValueExpression> restoreBindings(FacesContext context,
-                                                                Object state) {
-
-        // Note: This code is copied from UIComponentBase.  See note above
-        // in saveBindings().
-
-        if (state == null) {
-            return (null);
-        }
-        Object values[] = (Object[]) state;
-        String names[] = (String[]) values[0];
-        Object states[] = (Object[]) values[1];
-        Map<String, ValueExpression> bindings = new HashMap<String, ValueExpression>(names.length);
-        for (int i = 0; i < names.length; i++) {
-            bindings.put(names[i],
-                    (ValueExpression) UIComponentBase.restoreAttachedState(context, states[i]));
-        }
-        return (bindings);
-    }
-
-
-    // Save the List<String>, either as a String (single element) or as
-    // a String[] (multiple elements.
-    private static Object saveList(List<String> list) {
-        if ((list == null) || list.isEmpty()) {
-            return null;
-        }
-
-        int size = list.size();
-
-        if (size == 1) {
-            return list.get(0);
-        }
-
-        return list.toArray(new String[size]);
-    }
-
-    // Restore the list from a String (single element) or a String[]
-    // (multiple elements)
-    private static List<String> restoreList(String propertyName, 
-                                            Object state) {
-
-        if (state == null) {
-            return null;
-        }
-
-        List<String> list = null;
-
-        if (state instanceof String) {
-            list = toSingletonList(propertyName, (String)state);
-        } else if (state instanceof String[]) {
-            list = Collections.unmodifiableList(Arrays.asList((String[])state));
-        }
-
-        return list;
-    }
-      
-    private Object eval(String propertyName, Object value) {
-
-        if (value != null) {
-            return value;
-        }
-
-        ValueExpression expression = getValueExpression(propertyName);
-
-        if (expression != null) {
-            FacesContext ctx = FacesContext.getCurrentInstance();
-            return expression.getValue(ctx.getELContext());
-        }
-
-        return null;
-    }
-
-
-    @SuppressWarnings("unchecked")
-    private Collection<String> getCollectionValue(String propertyName,
-                                                  Collection<String> collection) {
-        if (collection!= null) {
-            return collection;
-        }
-
-        Collection<String> result = null;
-        ValueExpression expression = getValueExpression(propertyName);
-
-        if (expression != null) {
-
-            FacesContext ctx = FacesContext.getCurrentInstance();
-            Object value = expression.getValue(ctx.getELContext());
-
-            if (value != null) {
-
-                if (value instanceof Collection) {
-                    // Unchecked cast to Collection<String>
-                    return (Collection<String>)value;
-                }
-
-                result = toList(propertyName, expression, value);
-            }
-        }
-
-        return result == null ? Collections.<String>emptyList() : result;
-    }
-
-    // Sets a property, converting it from a literal
-    private void setLiteralValue(String propertyName,
-                                 ValueExpression expression) {
-
-        assert(expression.isLiteralText());
-
-        Object value;
-        ELContext context = FacesContext.getCurrentInstance().getELContext();
-
-        try {
-            value = expression.getValue(context);
-        } catch (ELException ele) {
-            throw new FacesException(ele);
-        }
-
-        if (ONEVENT.equals(propertyName)) {
-            onevent = (String)value;
-        } else if (ONERROR.equals(propertyName)) {
-            onerror = (String)value;
-        } else if (IMMEDIATE.equals(propertyName)) {
-            immediate = (Boolean)value;
-        } else if (DISABLED.equals(propertyName)) {
-            disabled = (Boolean)value;
-        } else if (EXECUTE.equals(propertyName)) {
-            execute = toList(propertyName, expression, value);
-        } else if (RENDER.equals(propertyName)) {
-            render = toList(propertyName, expression, value);
-        }
-    }
-
-    // Converts the specified object to a List<String>
-    private static List<String> toList(String propertyName,
-                                ValueExpression expression,
-                                Object value) {
-
-        if (value instanceof String) {
-
-            String strValue = (String)value;
-
-            // If the value contains no spaces, we can optimize.
-            // This is worthwhile, since the execute/render lists
-            // will often only contain a single value.
-            if (strValue.indexOf(' ') == -1) {
-                return toSingletonList(propertyName, strValue);
-            }
-
-            // We're stuck splitting up the string.
-            String[] values = SPLIT_PATTERN.split(strValue);
-            if ((values == null) || (values.length == 0)) {
-                return null;
-            }
-
-            // Note that we could create a Set out of the values if
-            // we care about removing duplicates.  However, the
-            // presence of duplicates does not real harm.  They will
-            // be consolidated during the partial view traversal.  So,
-            // just create an list - garbage in, garbage out.
-            return Collections.unmodifiableList(Arrays.asList(values));
-        }
-
-        // RELEASE_PENDING i18n ;
-        throw new FacesException(expression.toString()
-                                 + " : '"
-                                 + propertyName
-                                 + "' attribute value must be either a String or a Collection");
-    }
-
-    // Converts a String with no spaces to a singleton list
-    private static List<String> toSingletonList(String propertyName,
-                                         String value) {
-        if ((null == value) || (value.length() == 0)) {
-            return null;
-        }
-
-        if (value.charAt(0) == '@') {
-            // These are very common, so we use shared copies
-            // of these collections instead of re-creating.
-            List<String> list;
-
-            if (ALL.equals(value)) {
-                list = ALL_LIST;
-            } else if (FORM.equals(value)){
-                list = FORM_LIST;
-            } else if (THIS.equals(value)) {
-                list = THIS_LIST; 
-            } else if (NONE.equals(value)) {
-                list = NONE_LIST;
-            } else {
-                // RELEASE_PENDING i18n ;
-                throw new FacesException(value
-                                     + " : Invalid id keyword specified for '"
-                                     + propertyName
-                                     + "' attribute");
-            }
-            
-            return list;
-        }
-         
-        return Collections.singletonList(value);
-    }
-
-    // Makes a defensive copy of the collection, converting to a List
-    // (to make state saving a bit easier).
-    private List<String> copyToList(Collection<String> collection) {
- 
-        if ((collection == null) || collection.isEmpty()) {
-            return null;
-        }
-
-       return Collections.unmodifiableList(new ArrayList<String>(collection));
-    }
-
-    // Property name constants
-    private static final String ONEVENT = "onevent";
-    private static final String ONERROR = "onerror";
-    private static final String IMMEDIATE = "immediate";
-    private static final String DISABLED = "disabled";
-    private static final String EXECUTE = "execute";
-    private static final String RENDER = "render";
-
-    // Id keyword constants
-    private static String ALL = "@all";
-    private static String FORM = "@form";
-    private static String THIS = "@this";
-    private static String NONE = "@none";
-
-    // Shared execute/render collections
-    private static List<String> ALL_LIST = Collections.singletonList("@all");
-    private static List<String> FORM_LIST = Collections.singletonList("@form");
-    private static List<String> THIS_LIST = Collections.singletonList("@this");
-    private static List<String> NONE_LIST = Collections.singletonList("@none");
-
-    // Pattern used for execute/render string splitting
-    private static Pattern SPLIT_PATTERN = Pattern.compile(" ");
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/Behavior.java b/jsf-api/src/main/java/javax/faces/component/behavior/Behavior.java
deleted file mode 100644
index ba332a1..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/Behavior.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.BehaviorEvent;
-import javax.faces.event.BehaviorListener;
-import javax.faces.render.RenderKit;
-
-/**
- * <p class="changed_added_2_0">The <strong>Behavior</strong> interface is 
- * the root API of the component behavior model.  Behaviors are objects that 
- * are attached to {@link UIComponent}s in order to enhance components with 
- * functionality not explicitly defined by the component implementation itself.
- * The component behavior API is intended to support different types of 
- * behavior contracts, and possibly different types of interactions between 
- * behaviors and components.  The first such contract is the 
- * {@link ClientBehavior}, which defines a mechanism by which script-producing
- * behaviors attach scripts to components for execution on the client.  In the
- * future other types of behavior contracts may be added.</p>
- * 
- * <p>Like other attached objects (converters, validators) Behavior instances 
- * are created via the {@link javax.faces.application.Application} object.  See 
- * {@link javax.faces.application.Application#createBehavior} for more details.</p>
- *
- * @since 2.0
- */
-public interface Behavior {
-
-    /**
-     * <p class="changed_added_2_0">Broadcast the specified 
-     * {@link BehaviorEvent} to all registered
-     * event listeners who have expressed an interest in events of this
-     * type.  Listeners are called in the order in which they were
-     * added.</p>
-     *
-     * @param event The {@link BehaviorEvent} to be broadcast
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     * @throws IllegalArgumentException if the implementation class
-     *  of this {@link BehaviorEvent} is not supported by this component
-     * @throws NullPointerException if <code>event</code> is
-     * <code>null</code>
-     *
-     * @since 2.0
-     */
-    public void broadcast(BehaviorEvent event);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/BehaviorBase.java b/jsf-api/src/main/java/javax/faces/component/behavior/BehaviorBase.java
deleted file mode 100644
index b24a016..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/BehaviorBase.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.faces.component.PartialStateHolder;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.BehaviorEvent;
-import javax.faces.event.BehaviorListener;
-
-/**
- * <p class="changed_added_2_0"><strong>BehaviorBase</strong> is a
- * convenience base class that provides a default implementation of the 
- * {@link Behavior} contract.  It also provides behavior listener registration 
- * and state saving support.</p>
- * </p>
- *
- * @since 2.0
- */
-public class BehaviorBase implements Behavior, PartialStateHolder {
-	
- /**
-     * <p>Our {@link javax.faces.event.BehaviorListener}s.  This data
-     * structure is lazily instantiated as necessary.</p>
-     */
-    private List<BehaviorListener> listeners;
-
-    // Flag indicating a desire to not participate in state saving.
-    private boolean transientFlag = false;
-
-    // Flag indicating that initial state has been marked.
-    private boolean initialState = false;
-
-    /**
-     * <p class="changed_added_2_0">Default implementation of 
-     * {@link Behavior#broadcast}.  Delivers the specified 
-     * {@link BehaviorEvent} to all registered {@link BehaviorListener} 
-     * event listeners who have expressed an interest in events of 
-     * this type.  Listeners are called in the order in which they were 
-     * registered (added).</p>
-     *
-     * @param event The {@link BehaviorEvent} to be broadcast
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     * @throws IllegalArgumentException if the implementation class
-     *  of this {@link BehaviorEvent} is not supported by this component
-     * @throws NullPointerException if <code>event</code> is
-     * <code>null</code>
-     *
-     * @since 2.0
-     */
-    public void broadcast(BehaviorEvent event)
-        throws AbortProcessingException {
-
-        if (null != listeners) {
-            for (BehaviorListener listener : listeners) {
-                if (event.isAppropriateListener(listener)) {
-                    event.processListener(listener);
-                }
-            }
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0">Implementation of
-     * {@link javax.faces.component.StateHolder#isTransient}.
-     */
-    public boolean isTransient() {
-        return transientFlag;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Implementation of
-     * {@link javax.faces.component.StateHolder#setTransient}.
-     */
-    public void setTransient(boolean transientFlag) {
-        this.transientFlag = transientFlag;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Implementation of
-     * {@link javax.faces.component.StateHolder#saveState}.
-     */
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        
-        // If initial state has been marked, we don't need to
-        // save any state.
-        if (initialStateMarked()) {
-            return null;
-        }
-
-        // At the moment, the only state we need to save is our listeners
-        return UIComponentBase.saveAttachedState(context, listeners);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Implementation of
-     * {@link javax.faces.component.StateHolder#restoreState}.
-     */
-    @SuppressWarnings("unchecked")
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-
-        if (state != null) {
-
-            // Unchecked cast from Object to List<BehaviorListener>
-            listeners = (List<BehaviorListener>)UIComponentBase.restoreAttachedState(context, state);
-
-            // If we saved state last time, save state again next time.
-            clearInitialState();
-        }
-    }
-
-  
-    /**
-     * <p class="changed_added_2_0">Implementation of
-     * {@link javax.faces.component.PartialStateHolder#markInitialState}.
-     */
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Implementation of
-     * {@link javax.faces.component.PartialStateHolder#initialStateMarked}.
-     */
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Clears the initial state flag, causing
-     * the behavior to revert from partial to full state saving.</p>
-     */
-    public void clearInitialState() {
-        initialState = false;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Add the specified {@link BehaviorListener} 
-     * to the set of listeners registered to receive event notifications 
-     * from this {@link Behavior}.
-     * It is expected that {@link Behavior} classes acting as event sources
-     * will have corresponding typesafe APIs for registering listeners of the
-     * required type, and the implementation of those registration methods
-     * will delegate to this method.  For example:</p>
-     * <pre>
-     * public class AjaxBehaviorEvent extends BehaviorEvent { ... }
-     *
-     * public interface AjaxBehaviorListener extends BehaviorListener {
-     *   public void processAjaxBehavior(FooEvent event);
-     * }
-     *
-     * public class AjaxBehavior extends ClientBehaviorBase {
-     *   ...
-     *   public void addAjaxBehaviorListener(AjaxBehaviorListener listener) {
-     *     addBehaviorListener(listener);
-     *   }
-     *   public void removeAjaxBehaviorListener(AjaxBehaviorListener listener) {
-     *     removeBehaviorListener(listener);
-     *   }
-     *   ...
-     * }
-     * </pre>
-     *
-     * @param listener The {@link BehaviorListener} to be registered
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    protected void addBehaviorListener(BehaviorListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-        if (listeners == null) {
-            //noinspection CollectionWithoutInitialCapacity
-            listeners = new ArrayList<BehaviorListener>();
-        }
-        listeners.add(listener);
-
-        clearInitialState();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Remove the specified 
-     * {@link BehaviorListener} from the set of listeners
-     * registered to receive event notifications from this 
-     * {@link Behavior}.
-     *
-     * @param listener The {@link BehaviorListener} to be deregistered
-     * @throws NullPointerException if <code>listener</code>
-     *                              is <code>null</code>
-     *
-     * @since 2.0
-     */
-    protected void removeBehaviorListener(BehaviorListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-        if (listeners == null) {
-            return;
-        }
-        listeners.remove(listener);
-
-        clearInitialState();
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehavior.java b/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehavior.java
deleted file mode 100644
index 05d28fc..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehavior.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.BehaviorEvent;
-import javax.faces.event.BehaviorListener;
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.RenderKit;
-
-/**
- * <p class="changed_added_2_0"><strong>ClientBehavior</strong> is the
- * base contract for {@link Behavior}s that attach script content to
- * client-side events exposed by {@link ClientBehaviorHolder}
- * components.  Instances of <code>ClientBehavior</code> may be attached
- * to components that implement the {@link ClientBehaviorHolder}
- * contract by calling {@link ClientBehaviorHolder#addClientBehavior}.
- * Once a <code>ClientBehavior</code> has been attached to a {@link
- * ClientBehaviorHolder} component, the component calls {@link
- * #getScript} to obtain the behavior's script and the component wires
- * this up to the appropriate client-side event handler.  Note that the
- * script content returned by this method is always in-line script
- * content.  If the implementing class wants to invoke functions defined
- * in other script resources, the implementing class must use the
- * {@link javax.faces.application.ResourceDependency} or {@link
- * javax.faces.application.ResourceDependencies} annotation. </p>
- *
- * @since 2.0
- */
-public interface ClientBehavior extends Behavior {
-	
-
-    /**
-     * <p class="changed_added_2_0">Return the script that implements this
-     * ClientBehavior's client-side logic.</p>
-     *
-     * <div  class="changed_added_2_0">
-     *
-     * <p>ClientBehavior.getScript() implementations are allowed to return
-     * null to indicate that no script is required for this particular
-     * getScript() call.  For example, a ClientBehavior implementation may
-     * return null if the Behavior is disabled.
-     * </p>
-     *
-     * </div>
-     *
-     * @param behaviorContext the {@link ClientBehaviorContext} that provides
-     * properties that might influence this getScript() call.  Note that
-     * ClientBehaviorContext instances are short-lived objects that are only
-     * valid for the duration of the call to getScript().  ClientBehavior
-     * implementations must not hold onto references to ClientBehaviorContexts.
-     *
-     * @return script that provides the client-side behavior, or null
-     * if no script is required.
-     * @throws NullPointerException if <code>behaviorContext</code> is 
-     * <code>null</code>
-     *
-     * @since 2.0
-     */      
-    public String getScript(ClientBehaviorContext behaviorContext);
-
-    /**
-     * <p class="changed_added_2_0">Decode any new state of this 
-     * {@link ClientBehavior} from the
-     * request contained in the specified {@link FacesContext}.</p>
-     *
-     * <div  class="changed_added_2_0">
-     *
-     * <p>During decoding, events may be enqueued for later processing
-     * (by event listeners who have registered an interest),  by calling
-     * <code>queueEvent()</code>. Default implementation delegates decoding 
-     * to {@link javax.faces.render.ClientBehaviorRenderer#decode(FacesContext, UIComponent, ClientBehavior)}</p>
-     *
-     * </div>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     * @param component {@link UIComponent} the component associated with this {@link Behavior} 
-     *
-     * @throws NullPointerException if <code>context</code> or 
-     * <code>component<code> is <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void decode(FacesContext context, UIComponent component);
-
-    /**
-     * <p class="changed_added_2_0">Returns hints that describe the
-     * behavior of the ClientBehavior implementation.  The hints may
-     * impact how Renderers behave in the presence of Behaviors.  For
-     * example, when a Behavior that specifies
-     * <code>ClientBehaviorHint.SUBMITTING</code> is present, the
-     * Renderer may choose to alternate the scripts that it generates
-     * itself.</p>
-     *   
-     * @return a non-null, unmodifiable collection of ClientBehaviorHints.
-     *
-     * @since 2.0
-     */
-    public Set<ClientBehaviorHint> getHints();
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorBase.java b/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorBase.java
deleted file mode 100644
index 49c2569..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorBase.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-import java.util.Collections;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.RenderKit;
-
-/**
- * <p class="changed_added_2_0"><strong>ClientBehaviorBase</strong> is a
- * convenience base class that implements the default concrete behavior
- * of all methods defined by {@link ClientBehavior}.</p>
- *
- * <div  class="changed_added_2_0">
- *
- * <p>Subclasses should either override getRendererType() to identify
- * the {@link ClientBehaviorRenderer} to delegate to, or they should override 
- * <code>getScript()</code> to locally generate the desired Behavior 
- * script, and <code>decode()</code>.
- * </p>
- *
- * </div>
- *
- * @since 2.0
- */
-public class ClientBehaviorBase extends BehaviorBase implements ClientBehavior {
-	
-
-    private static final Logger logger = Logger.getLogger("javax.faces.component.behavior",
-    "javax.faces.LogStrings");
-
-    /**
-     * <p class="changed_added_2_0">Default implementation of of {@link
-     * ClientBehavior#getScript}.  If a {@link ClientBehaviorRenderer}
-     * is available for the specified behavior renderer type, this
-     * method delegates to the {@link ClientBehaviorRenderer#getScript}
-     * method.  Otherwise, this method returns null.  </p>
-     *
-     * @param behaviorContext the {@link ClientBehaviorContext}
-     *
-     * @return the script provided by the associated
-     * ClientBehaviorRenderer, or null if no ClientBehaviorRenderer is
-     * available.
-     *
-     * @throws NullPointerException if <code>behaviorContext</code> is 
-     * <code>null</code>
-     *
-     * @since 2.0
-     */
-    public String getScript(ClientBehaviorContext behaviorContext) {
-
-        if (null == behaviorContext) {
-            throw new NullPointerException();
-        }
-
-    	ClientBehaviorRenderer renderer = getRenderer(behaviorContext.getFacesContext());
-        String script = null;
-    	if (null != renderer){
-            script = renderer.getScript(behaviorContext, this);
-    	}
-        return script;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Default implementation of of {@link
-     * ClientBehavior#decode}.  If a {@link ClientBehaviorRenderer} is
-     * available for the specified behavior renderer type, this method
-     * delegates to the ClientBehaviorRenderer's decode() method.
-     * Otherwise, no decoding is performed.  </p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     * @param component {@link UIComponent} the component associated with this {@link ClientBehavior} 
-     *
-     * @throws NullPointerException if <code>context</code> or 
-     * <code>component<code> is <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void decode(FacesContext context,
-                       UIComponent component) {
-    
-        if (null == context || null == component) {
-            throw new NullPointerException();
-        }
-
-    	ClientBehaviorRenderer renderer = getRenderer(context);
-    	if (null != renderer){
-            renderer.decode(context, component, this);
-    	}
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Returns the renderer type of the
-     * {@link ClientBehaviorRenderer} to use for the behavior.   The default 
-     * implementation returns null.  Subclasses should either override this 
-     * method to return a string that identifies the type of 
-     * {@link ClientBehaviorRenderer} to use, or should override 
-     * {@link #getScript} and perform script rendering locally in the 
-     * {@link ClientBehavior} implementation.
-     * </p>
-     * @return the default renderer type, which is null.
-     *
-     * @since 2.0
-     */
-    public String getRendererType() {
-        return null;
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Default implementation of 
-     * {@link ClientBehavior#getHints()}.  
-     * By default, no hints are specified, and this method returns an empty,
-     * umodifiable set.</p>
-     *   
-     * @return an empty, unmodifiable set of {@link ClientBehaviorHint}s.
-     *
-     * @since 2.0
-     */
-    public Set<ClientBehaviorHint> getHints() {
-        return Collections.emptySet();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Convenience method to return the
-     * {@link ClientBehaviorRenderer} instance associated with this
-     * {@link ClientBehavior}, if any; otherwise, return
-     * <code>null</code>.  </p>
-
-     * @param context {@link FacesContext} for the request we are processing
-     * @return {@link ClientBehaviorRenderer} instance from the current {@link RenderKit} or null.
-     *
-     * @throws NullPointerException if <code>context</code> is null. 
-     *
-     * @since 2.0
-     */
-    protected ClientBehaviorRenderer getRenderer(FacesContext context) {
-    	if (null == context){
-            throw new NullPointerException();
-    	}
-    	ClientBehaviorRenderer renderer = null;
-        String rendererType = getRendererType();
-        if (null != rendererType){
-            RenderKit renderKit = context.getRenderKit();
-            if (null != renderKit){
-                renderer = renderKit.getClientBehaviorRenderer(rendererType);
-            }
-            if (null == renderer){
-                if (logger.isLoggable(Level.FINE)){
-                    logger.fine("Can't get  behavior renderer for type " + rendererType);
-                }				
-            }
-        } else {
-            if(logger.isLoggable(Level.FINE)){
-                logger.fine("No renderer-type for behavior " + this.getClass().getName());
-            }
-        }
-        return renderer;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorContext.java b/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorContext.java
deleted file mode 100644
index e3ae748..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorContext.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0"><strong>ClientBehaviorContext</strong>
- * provides context information that may be useful to 
- * {@link javax.faces.component.behavior.ClientBehavior#getScript}
- * implementations.
- * </p>
- *
- * @since 2.0
- */
-public abstract class ClientBehaviorContext {
-	
-    /**
-     * <p class="changed_added_2_0">Creates a ClientBehaviorContext instance.</p>
-     *
-     * @param context the <code>FacesContext</code> for the current request.
-     * @param component the component instance to which the 
-     * <code>ClientBehavior</code> is attached.
-     * @param eventName the name of the behavior event to which the
-     * <code>ClientBehavior</code> is attached.
-     * @param sourceId the id to use as the ClientBehavior's "source".
-     * @param parameters the collection of parameters for submitting
-     * ClientBehaviors to include in the request.
-     * @return a <code>ClientBehaviorContext</code> instance configured with the
-     * provided values.
-     * @throws NullPointerException if <code>context</code>,
-     * <code>component</code> or <code>eventName</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public static ClientBehaviorContext createClientBehaviorContext(FacesContext context,
-                                                        UIComponent component,
-                                                        String eventName,
-                                                        String sourceId,
-                                                        Collection<ClientBehaviorContext.Parameter> parameters) {
-
-        return new ClientBehaviorContextImpl(context, component, eventName, sourceId, parameters);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns the {@link FacesContext} for 
-     * the current request.</p>
-     *
-     * @since 2.0
-     */
-    abstract public FacesContext getFacesContext();
-
-    /**
-     * <p class="changed_added_2_0">Returns the {@link UIComponent} that is 
-     * requesting the {@link ClientBehavior} script.</p>
-     *
-     * @since 2.0
-     */
-    abstract public UIComponent getComponent();
-
-    /**
-     * <p class="changed_added_2_0">Returns the name of the behavior event 
-     * for which the ClientBehavior script is being requested. </p>
-     *
-     * @since 2.0
-     */
-    abstract public String getEventName();
-
-    /**
-     * <p class="changed_added_2_0">Returns an id for use as the 
-     * {@link ClientBehavior} source.  ClientBehavior implementations that submit back 
-     * to the Faces lifecycle are required to identify which component 
-     * triggered the ClientBehavior-initiated request via the 
-     * <code>javax.faces.source</code> request parameter.  In 
-     * most cases, th source id can be trivially derived from the element 
-     * to which the behavior's client-side script is attached - ie. the 
-     * source id is typically the id of this element.  However, in components 
-     * which produce more complex content, the behavior script may not be able to
-     * determine the correct id to use for the javax.faces.source
-     * value.  The {@link ClientBehaviorContext#getSourceId} method allows the component 
-     * to pass this information into the {@link ClientBehavior#getScript}
-     * implementation.</p>
-     *
-     * @return the id for the behavior's script to use as the "source", or
-     * null if the Behavior's script can identify the source from the DOM.
-     *
-     * @since 2.0
-     */
-    abstract public String getSourceId();
-
-    /**
-     * <p class="changed_added_2_0">Returns parameters that "submitting" 
-     * {@link ClientBehavior} implementations should include when posting back data 
-     * into the Faces lifecycle.  If no parameters are specified, this method
-     * returns an empty (non-null) collection.</p>
-     *
-     * @since 2.0
-     */
-    abstract public Collection<ClientBehaviorContext.Parameter> getParameters();
-
-    // Little static member class that provides a default implementation
-    private static final class ClientBehaviorContextImpl extends ClientBehaviorContext {
-        private FacesContext context;
-        private UIComponent component;
-        private String eventName;
-        private String sourceId;
-        private Collection<ClientBehaviorContext.Parameter> parameters;
-
-        private ClientBehaviorContextImpl(FacesContext context,
-                                    UIComponent component,
-                                    String eventName,
-                                    String sourceId,
-                                    Collection<ClientBehaviorContext.Parameter> parameters) {
-
-            if (null == context) {
-                throw new NullPointerException();
-            }
-
-            if (null == component) {
-                throw new NullPointerException();
-            }
-
-            if (null == eventName) {
-                throw new NullPointerException();
-            }
-
-            this.context = context;
-            this.component = component;
-            this.eventName = eventName;
-            this.sourceId = sourceId;
-
-            this.parameters =  (parameters == null) ? 
-                                   Collections.<ClientBehaviorContext.Parameter>emptyList() : 
-                                   parameters;
-        }        
-
-        @Override
-        public FacesContext getFacesContext() {
-            return context;
-        }
-
-        @Override
-        public UIComponent getComponent() {
-            return component;
-        }
-
-        @Override
-        public String getEventName() {
-            return eventName;
-        }
-
-        @Override
-        public String getSourceId() {
-            return sourceId;
-        }
-
-        @Override
-        public Collection<ClientBehaviorContext.Parameter> getParameters() {
-            return parameters;
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0"><strong>Parameter</strong> instances
-     * represent name/value pairs that "submitting" ClientBehavior implementations
-     * should include when posting back into the Faces lifecycle.  ClientBehavior
-     * implementations can determine which Parameters to include by calling
-     * ClientBehaviorContext.getParameters().
-     * </p>
-     *
-     * @since 2.0
-     */
-    public static class Parameter {
-
-        private String name;
-        private Object value;
-
-        /**
-         * <p class="changed_added_2_0">Creates a Parameter instance.</p>
-         * @param name the name of the parameter
-         * @param value the value of the parameter
-         * @throws NullPointerException if <code>name</code>
-         * is null.
-         *
-         * @since 2.0
-         */
-        public Parameter(String name, Object value) {
-
-            if (null == name) {
-                throw new NullPointerException();
-            }
-
-            this.name = name;
-            this.value = value;
-        }
-
-        /**
-         * <p class="changed_added_2_0">Returns the Parameter's name.</p>
-         *
-         * @since 2.0
-         */
-        public String getName() {
-            return name;
-        }
-
-        /**
-         * <p class="changed_added_2_0">Returns the Parameter's value.</p>
-         *
-         * @since 2.0
-         */
-        public Object getValue() {
-            return value;
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorHint.java b/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorHint.java
deleted file mode 100644
index 0600290..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorHint.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-/**
- * <p class="changed_added_2_0">An enum that specifies hints that describes
- * the behavior of ClientBehavior implementations.</p>
- *
- * @see ClientBehavior#getHints ClientBehavior.getHints()
- *
- * @since 2.0
- */
-public enum ClientBehaviorHint {
-
-  /** 
-   * Hint that indicates that ClientBehavior implementation posts back to the
-   * server.  Renderers that normally attach postback-related scripts
-   * may choose to omit such scripts when a submitting ClientBehavior is
-   * present.
-   */
-  SUBMITTING
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorHolder.java b/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorHolder.java
deleted file mode 100644
index 9c584e8..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/ClientBehaviorHolder.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-import java.util.Map;
-
-/**
-*<p class="changed_added_2_0">The <strong>ClientBehaviorHolder</strong> 
-* interface may be implemented by any concrete 
-* {@link javax.faces.component.UIComponent} that wishes to support
-* client behaviors as defined by {@link ClientBehavior}.</p>
-*
-* @since 2.0
-*/
-public interface ClientBehaviorHolder {
-
-    /**
-     * <p class="changed_added_2_0">Attaches a {@link ClientBehavior} to 
-     * the component implementing this interface for the specified event.
-     * Valid event names for a UIComponent implementation are defined by 
-     * {@code ClientBehaviorHolder.getEventNames()}.</p>
-     *
-     * @param eventName the logical name of the client-side event to
-     * attach the behavior to.
-     * @param  behavior the {@link ClientBehavior} instance to attach
-     * for the specified event name.
-     *
-     * @since 2.0
-     */
-    public void addClientBehavior(String eventName, ClientBehavior behavior);
-
-    /**
-     * <p class="changed_added_2_0">Returns a non-null, unmodifiable 
-     * <code>Collection</code> containing the names of the logical 
-     * events supported by the component implementing this interface.</p>
-     *
-     * @since 2.0
-     */
-    public Collection<String> getEventNames();
-
-    /**
-     * <p class="changed_added_2_0">Returns a non-null, unmodifiable
-     * <code>Map</code> that contains the the {@link ClientBehavior}s that
-     * have been attached to the component implementing this interface.
-     * The keys in this <code>Map</code> are event names defined by
-     * {@link #getEventNames}.</p>
-     *
-     * @since 2.0
-     */
-    public Map<String, List<ClientBehavior>> getClientBehaviors();
-
-    /**
-     * <p class="changed_added_2_0">Returns the default event
-     * name for this <code>ClientBehaviorHolder</code> implementation.  
-     * This must be one of the event names returned by
-     * {@link #getEventNames} or null if the component does not have
-     * a default event.
-     *
-     * @since 2.0
-     */
-    public String getDefaultEventName();
-}
-
- 
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/FacesBehavior.java b/jsf-api/src/main/java/javax/faces/component/behavior/FacesBehavior.java
deleted file mode 100644
index 4ea257a..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/FacesBehavior.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.behavior;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a {@link
- * Behavior}.  The value of this annotation attribute is taken to be the 
- * <em>behavior-id</em> with which instances of this class of behavior 
- * can be instantiated by calling {@link
- * javax.faces.application.Application#createBehavior(java.lang.String)}</p>
- *
- * @since 2.0
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface FacesBehavior {
-    String value();
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/behavior/package.html b/jsf-api/src/main/java/javax/faces/component/behavior/package.html
deleted file mode 100644
index f0a9e70..0000000
--- a/jsf-api/src/main/java/javax/faces/component/behavior/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.component.behavior"</title>
-<body bgcolor="white">
-
-<p><span class="changed_added_2_0">APIs for attaching additional behavior to 
-user interface components.</span></p>
-
-</body>
-</html>
-
diff --git a/jsf-api/src/main/java/javax/faces/component/html/package.html b/jsf-api/src/main/java/javax/faces/component/html/package.html
deleted file mode 100644
index e013c6a..0000000
--- a/jsf-api/src/main/java/javax/faces/component/html/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.component.html"</title>
-<body bgcolor="white">
-<p>Specialized user interface component classes for HTML.</p>
-</body>
-</html>
-
diff --git a/jsf-api/src/main/java/javax/faces/component/package.html b/jsf-api/src/main/java/javax/faces/component/package.html
deleted file mode 100644
index 41d4819..0000000
--- a/jsf-api/src/main/java/javax/faces/component/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.component"</title>
-<body bgcolor="white">
-
-<p><span class="changed_modified_2_0"><span class="changed_modified_2_0_rev_a">Fundamental</span></span> APIs for user
-interface components.</p>
-
-<p>For your convenience here is a UML class diagram of the classes in
-this package.</p>
-
-<img src="UIComponentHierarchy.jpg" />
-
-</body>
-</html>
-
diff --git a/jsf-api/src/main/java/javax/faces/component/visit/VisitCallback.java b/jsf-api/src/main/java/javax/faces/component/visit/VisitCallback.java
deleted file mode 100644
index fe90b14..0000000
--- a/jsf-api/src/main/java/javax/faces/component/visit/VisitCallback.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.visit;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p class="changed_added_2_0">A simple callback interface that enables 
- * taking action on a specific UIComponent (either facet or child) during 
- * a component tree visit.</p>
- * 
- * @see UIComponent#visitTree UIComponent.visitTree()
- *
- * @since 2.0
- */
-public interface VisitCallback {
-    
-    /**
-     * <p>This method is called during component tree visits by 
-     * {@link VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()} 
-     * to visit the specified component.  At the point in time when this 
-     * method is called, the argument {@code target} is guaranteed
-     * to be in the proper state with respect to its ancestors in the
-     * View.</p>
-     *
-     * @param context the {@link VisitContext} for this tree visit.
-     *
-     * @param target the {@link UIComponent} to visit
-     *
-     * @return a {@link VisitResult} that indicates whether to continue
-     *   visiting the component's subtree, skip visiting the component's
-     *   subtree or end the visit.
-     */
-    public VisitResult visit(VisitContext context, UIComponent target);
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/visit/VisitContext.java b/jsf-api/src/main/java/javax/faces/component/visit/VisitContext.java
deleted file mode 100644
index 4d91dfe..0000000
--- a/jsf-api/src/main/java/javax/faces/component/visit/VisitContext.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.visit;
-
-import java.util.AbstractCollection;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.faces.FactoryFinder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- *
- * <p class="changed_added_2_0">A context object that is used to hold 
- * state relating to performing a component tree visit.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>Component tree visits are initiated by calling {@link
- * UIComponent#visitTree}, at which point both a
- * {@link VisitContext} and a {@link VisitCallback} must be provided.</p>
- * </div>
- *
- * @see UIComponent#visitTree UIComponent.visitTree()
- * @see VisitCallback
- *
- * @since 2.0
- */
-abstract public class VisitContext {
-
-    // Design notes: The VisitContext contract could be defined
-    // as an interface.  However, there is the potential that we
-    // may need to add new methods in the future, so leaving as 
-    // an abstract class in order to have room to grow.
-    // 
-    // Since we are an abstract class rather than an interface,
-    // we could provide implementations of of some of the simpler
-    // methods (eg. getFacesContext() and getHints()) to avoid 
-    // duplicating this code in VisitContext implementations.
-    // However, doing so would mean that "wrapping" VisitContext
-    // implementations would be forced to pick up such implementations,
-    // so going with a pure contract (no implementation).
-
-    /**
-     * <p class="changed_added_2_0">This unmodifiable Collection is
-     * returned by <code>getIdsToVisit()</code> and
-     * <code>getSubtreeIdsToVisit()</code> in cases where all ids should
-     * be visited.</p>
-
-     * <p class="changed_added_2_0">To simplify logic for
-     * <code>visitTree()</code> implementations, this Collection always
-     * returns <code>false</code> for <code>isEmpty</code>.  All other
-     * methods throw <code>UnsupportedOperationException</code>.</p>
-     *
-     * @since 2.0
-     */
-    // Note: We cannot use Collections.emptyList() as that returns
-    // a shared instance - we want to unique instance to allow for
-    // identity tests.
-    static public final Collection<String> ALL_IDS = 
-        new AbstractCollection<String>() {
-
-            @Override
-            public Iterator<String> iterator() {
-                throw new UnsupportedOperationException(
-                    "VisitContext.ALL_IDS does not support this operation");
-            }
-
-            @Override
-            public int size() {
-                throw new UnsupportedOperationException(
-                    "VisitContext.ALL_IDS does not support this operation");
-            }
-
-            @Override
-            public boolean isEmpty() {
-                return false;
-            }
-        };
-
-    /**
-     * <p class="changed_added_2_0">Returns the FacesContext for the
-     * current request.</p>
-     * @since 2.0
-     */
-    abstract public FacesContext getFacesContext();
-
-    /**
-     * <p class="changed_added_2_0"> Returns the ids of the components
-     * to visit.  </p>
-
-     * <p class="changed_added_2_0"> In the case of a full tree visit,
-     * this method returns the ALL_IDS collection.  Otherwise, if a
-     * partial visit is beign performed, returns a modifiable collection
-     * containing the client ids of the components that should be
-     * visited.  </p>
-     */
-    abstract public Collection<String> getIdsToVisit();
-
-    /**
-     * <p class="changed_added_2_0"> Given a {@link
-     * javax.faces.component.NamingContainer} component, returns the
-     * client ids of any components underneath the NamingContainer that
-     * should be visited.  </p>
-
-     * <div class="changed_added_2_0">
-
-     * <p> This method is called by NamingContainer visitTree()
-     * implementations to determine whether the NamingContainer contains
-     * components to be visited.  In the case where no such components
-     * exist, the NamingContainer can short-circuit the tree visit and
-     * avoid descending into child subtrees.  </p>
-
-     * <p> In addition, iterating components such as UIData may be able
-     * to use the returned ids to determine which iterated states
-     * (ie. rows) need to be visited.  This allows the visit traversal
-     * to be contstrained such only those rows that contain visit
-     * targets need to be traversed.  </p>
-
-     * </div>
-
-     * @param component a NamingContainer component
-     * @return an unmodifiable Collection containing the client ids of 
-     *   any components underneath the NamingContainer that are known to be
-     *   targets of the tree visit.  If no such components exist, returns 
-     *   an empty Collection.  If all components underneath the 
-     *   NamingContainer should be visited, returns the
-     *   {@code VisitContext.ALL_IDS} collection.
-     * @throws IllegalArgumentException if {@code component} is not
-     *  an instance of NamingContainer
-     */
-    abstract public Collection<String> getSubtreeIdsToVisit(UIComponent component);
-
-    /**
-     * <p>Called by {@link UIComponent#visitTree UIComponent.visitTree()}
-     * to visit a single component.</p>
-     *
-     * @param component the component to visit
-     * @param callback the VisitCallback to call
-     * @return a VisitResult value that indicates whether to continue
-     *   visiting the component's subtree, skip visiting the component's
-     *   subtree or abort the visit altogether.
-     */
-    abstract public VisitResult invokeVisitCallback(UIComponent component, 
-                                                    VisitCallback callback); 
-
-    /**
-     * <p>Returns hints that influence the behavior of the tree visit.</p>
-     *
-     * <p>Interested parties, such as 
-     * {@link UIComponent#visitTree UIComponent.visitTree()} implementations,
-     * may check to see whether a particular hint is present by calling
-     * {@code VisitContext.getHints().contains()}, passing in one of the
-     * hints defined by {@link VisitHint}.
-     *   
-     * @return a non-empty, unmodifiable collection of VisitHints
-     */
-    abstract public Set<VisitHint> getHints();
-
-
-    /**
-     * <p>Returns a VisitContext instance that is initialized with the
-     * specified ids and hintsfor use with {@link
-     * UIComponent#visitTree}.</p>
-     *
-     * @param context the FacesContext for the current request
-     * @param ids the client ids of the components to visit.  If null,
-     *   all components will be visited.
-     * @param hints the VisitHints to apply to the visit.  If
-     * <code>null</code>, no hints are applied.
-
-     * @return a VisitContext instance that is initialized with the 
-     *   specified ids and hints.
-     */
-    public static VisitContext createVisitContext(FacesContext context,
-                                                  Collection<String> ids,
-                                                  Set<VisitHint> hints) {
-
-        VisitContextFactory factory = (VisitContextFactory)
-                FactoryFinder.getFactory(FactoryFinder.VISIT_CONTEXT_FACTORY);
-        return factory.getVisitContext(context, ids, hints);
-
-    }
-
-    /**
-     * <p>Creates a VisitContext instance for use with 
-     * {@link UIComponent#visitTree UIComponent.visitTree()}.
-     * This method can be used to obtain a VisitContext instance
-     * when all components should be visited with the default
-     * visit hints.</p>
-     * @param context the FacesContext for the current request
-     * @return a VisitContext instance
-     */
-    public static VisitContext createVisitContext(FacesContext context) {
-
-        return createVisitContext(context, null, null);
-        
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/visit/VisitContextFactory.java b/jsf-api/src/main/java/javax/faces/component/visit/VisitContextFactory.java
deleted file mode 100644
index 6fed491..0000000
--- a/jsf-api/src/main/java/javax/faces/component/visit/VisitContextFactory.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.visit;
-
-import java.util.Collection;
-import java.util.Set;
-import javax.faces.FacesWrapper;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">Provide for separation of interface and
- * implementation for the {@link VisitContext} contract.</p>
- * 
-
- * @since 2.0
- */
-public abstract class VisitContextFactory implements FacesWrapper<VisitContextFactory> {
-
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     * @since 2.0
-     */
-    public VisitContextFactory getWrapped() {
-        return null;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return a new {@link VisitContext}
-     * instance.</p>
-     * @param context the <code>FacesContext</code> for this request.
-     * @param ids a <code>Collection</code> of clientIds to visit.  If
-     * <code>null</code> all components will be visited.
-     * @param hints the <code>VisitHints</code> that apply to this
-     * visit.
-     * @since 2.0
-     */
-    public abstract VisitContext getVisitContext(FacesContext context, 
-            Collection<String> ids, Set<VisitHint> hints);
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/visit/VisitContextWrapper.java b/jsf-api/src/main/java/javax/faces/component/visit/VisitContextWrapper.java
deleted file mode 100644
index 885cddb..0000000
--- a/jsf-api/src/main/java/javax/faces/component/visit/VisitContextWrapper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.visit;
-
-import java.util.Collection;
-import java.util.Set;
-import javax.faces.FacesWrapper;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">Provides a simple implementation of
- * {@link VisitContext} that can be subclassed by developers wishing to
- * provide specialized behavior to an existing {@link VisitContext}
- * instance.  The default implementation of all methods is to call
- * through to the wrapped {@link VisitContext} instance.</p>
- *
- * <p class="changed_added_2_0">Usage: extend this class and override
- * {@link #getWrapped} to return the instance we are wrapping.</p>
- *
- * @since 2.0
- */
-public abstract class VisitContextWrapper extends VisitContext implements FacesWrapper<VisitContext>{
-
-    @Override
-    public FacesContext getFacesContext() {
-        return getWrapped().getFacesContext();
-    }
-
-    @Override
-    public Set<VisitHint> getHints() {
-        return getWrapped().getHints();
-    }
-
-    @Override
-    public Collection<String> getIdsToVisit() {
-        return getWrapped().getIdsToVisit();
-    }
-
-    @Override
-    public Collection<String> getSubtreeIdsToVisit(UIComponent component) {
-        return getWrapped().getSubtreeIdsToVisit(component);
-    }
-
-    @Override
-    public VisitResult invokeVisitCallback(UIComponent component, VisitCallback callback) {
-        return getWrapped().invokeVisitCallback(component, callback);
-    }
-
-    public abstract VisitContext getWrapped();
-
-    
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/visit/VisitHint.java b/jsf-api/src/main/java/javax/faces/component/visit/VisitHint.java
deleted file mode 100644
index 138461d..0000000
--- a/jsf-api/src/main/java/javax/faces/component/visit/VisitHint.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.visit;
-
-/**
- * <p class="changed_added_2_0">An enum that specifies hints that impact
- * the behavior of a component tree visit.</p>
-
- * @since 2.0
- */
-public enum VisitHint {
-
-  /** 
-   * <p class="changed_added_2_0">Hint that indicates that only the
-   * rendered subtrees should be visited.</p>
-   * @since 2.0
-   */
-  SKIP_UNRENDERED,
-
-  /** 
-   * <p class="changed_added_2_0">Hint that indicates that only
-   * non-transient subtrees should be visited.</p>
-   * @since 2.0
-   */
-  SKIP_TRANSIENT,
-
-  /**
-   * <p class="changed_added_2_0">Hint that indicates that the visit is
-   * being performed as part of lifecycle phase execution and as such
-   * phase-specific actions (initialization) may be taken.</p>
-   * @since 2.0
-   */
-  EXECUTE_LIFECYCLE
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/visit/VisitResult.java b/jsf-api/src/main/java/javax/faces/component/visit/VisitResult.java
deleted file mode 100644
index 8f36610..0000000
--- a/jsf-api/src/main/java/javax/faces/component/visit/VisitResult.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component.visit;
-
-/**
- *
- * <p class="changed_added_2_0">An enum that specifies the possible 
- * results of a call to {@link VisitCallback#visit}.
- * </p>
- *
- * @see VisitCallback#visit VisitCallback.visit()
- *
- * @since 2.0
- */
-public enum VisitResult {
-
-  /**
-   * <p class="changed_added_2_0">This result indicates that the tree
-   * visit should descend into current component's subtree.</p>
-   * @since 2.0
-   */ 
-  ACCEPT,
-
-  /**
-   * <p class="changed_added_2_0">This result indicates that the tree
-   * visit should continue, but should skip the current component's
-   * subtree.</p>
-   */ 
-  REJECT,
-
-  /**
-   * <p class="changed_added_2_0">This result indicates that the tree
-   * visit should be terminated.</p>
-   */ 
-  COMPLETE
-}
diff --git a/jsf-api/src/main/java/javax/faces/component/visit/package.html b/jsf-api/src/main/java/javax/faces/component/visit/package.html
deleted file mode 100644
index 0e60f2d..0000000
--- a/jsf-api/src/main/java/javax/faces/component/visit/package.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.component.visit"</title>
-<body bgcolor="white">
-
-<p class="changed_added_2_0">APIs for traversing a user interface
-component view.</p>
-
-<div class="changed_added_2_0">
-
-<p>The following example visits all nodes in the view.</p>
-
-<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1">UIViewRoot root = facesContext.<span class="me1">getViewRoot</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
-<li class="li2"><div class="de2">root.<span class="me1">visitTree</span><span class="br0">(</span>VisitContext.<span class="me1">createVisitContext</span><span class="br0">(</span>context<span class="br0">)</span>, </div></li>
-<li class="li1"><div class="de1">               <span class="kw2">new</span> VisitCallback<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
-<li class="li2"><div class="de2">                   <span class="kw2">public</span> VisitResult visit<span class="br0">(</span>VisitContext context, </div></li>
-<li class="li1"><div class="de1">                                            UIComponent target<span class="br0">)</span> <span class="br0">{</span></div></li>
-<li class="li2"><div class="de2">                       <span class="co1">// take some action on target</span></div></li>
-<li class="li1"><div class="de1">                       <span class="kw2">return</span> VisitResult.<span class="me1">ACCEPT</span>;</div></li>
-<li class="li2"><div class="de2">                   <span class="br0">}</span></div></li>
-<li class="li1"><div class="de1">               <span class="br0">}</span><span class="br0">)</span>; </div></li></ol></div></div>
-
-<p>The following example visits two subtrees within the component
-view.</p>
-
-<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1">Set<String> toVisit = getSet<span class="br0">(</span><span class="st0">"form1:optionsPanel"</span>, <span class="st0">"form2:detailPanel"</span><span class="br0">)</span>;</div></li>
-<li class="li2"><div class="de2">UIViewRoot root = facesContext.<span class="me1">getViewRoot</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
-<li class="li1"><div class="de1">root.<span class="me1">visitTree</span><span class="br0">(</span>VisitContext.<span class="me1">createVisitContext</span><span class="br0">(</span>context, toVisit, <span class="kw2">null</span><span class="br0">)</span>, </div></li>
-<li class="li2"><div class="de2">               <span class="kw2">new</span> VisitCallback<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
-<li class="li1"><div class="de1">                   <span class="kw2">public</span> VisitResult visit<span class="br0">(</span>VisitContext context, </div></li>
-<li class="li2"><div class="de2">                                            UIComponent target<span class="br0">)</span> <span class="br0">{</span></div></li>
-<li class="li1"><div class="de1">                       <span class="co1">// take some action on target</span></div></li>
-<li class="li2"><div class="de2">                       <span class="kw2">return</span> VisitResult.<span class="me1">ACCEPT</span>;</div></li>
-<li class="li1"><div class="de1">                   <span class="br0">}</span></div></li>
-<li class="li2"><div class="de2">               <span class="br0">}</span><span class="br0">)</span>; </div></li></ol></div></div>
-
-<p>Note that every child node of those two subtrees is visited.</p>
-
-</div>
-
-</body>
-</html>
-
diff --git a/jsf-api/src/main/java/javax/faces/context/ExceptionHandler.java b/jsf-api/src/main/java/javax/faces/context/ExceptionHandler.java
deleted file mode 100644
index 9f39c39..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ExceptionHandler.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import javax.faces.FacesException;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-
-
-/**
- * <p class="changed_added_2_0"><strong>ExceptionHandler</strong> is the
- * central point for handling <em>unexpected</em>
- * <code>Exception</code>s that are thrown during the Faces
- * lifecycle. The <code>ExceptionHandler</code> must not be notified of
- * any <code>Exception</code>s that occur during application startup or
- * shutdown.</p>
-
- * <div class="changed_added_2_0">
- *
- * <p>See the specification prose document for the requirements for the
- * default implementation.  <code>Exception</code>s may be passed to the
- * <code>ExceptionHandler</code> in one of two ways:</p>
- *
- * <ul>
- *
- * <li><p>by ensuring that <code>Exception</code>s are not caught, or
- * are caught and re-thrown.</p>
- *
- *         <p>This approach allows the <code>ExceptionHandler</code>
- *         facility specified in section JSF.6.2 to operate on the
- *         <code>Exception</code>.</p>
- *
- *         </li>
- *
- * <li><p>By using the system event facility to publish an {@link
- * ExceptionQueuedEvent} that wraps the <code>Exception</code>.</p>
- *
- *         <p>This approach requires manually publishing the {@link
- *         ExceptionQueuedEvent}, but allows more information about the
- *         <code>Exception</code>to be stored in the event.  The
- *         following code is an example of how to do this.</p>
- *
- * <pre><code>
- *
- * //...
- * } catch (Exception e) {
- *   FacesContext ctx = FacesContext.getCurrentInstance();
- *   ExceptionQueuedEventContext eventContext = new ExceptionQueuedEventContext(ctx, e);
- *   eventContext.getAttributes().put("key", "value");
- *   ctx.getApplication().publishEvent(ExceptionQueuedEvent.class, eventContext);
- * }
- *
- * </code></pre>
- *
- *            <p>Because the <code>Exception</code> must not be re-thrown
- *            when using this approach, lifecycle processing may continue
- *            as normal, allowing more <code>Exception</code>s to be
- *            published if necessary.</p>
- *
- *         </li>
- * </ul>
- *
- * <p>With either approach, any <code>ExceptionQueuedEvent</code> instances
- * that are published in this way are accessible to the {@link #handle}
- * method, which is called at the end of each lifecycle phase, as
- * specified in section JSF.6.2.</p>
-
- * <p>Instances of this class are request scoped and are created by
- * virtue of {@link FacesContextFactory#getFacesContext} calling {@link
- * ExceptionHandlerFactory#getExceptionHandler}.</p>
- *
- * </div>
- *
- * @since 2.0
- */
-public abstract class ExceptionHandler implements SystemEventListener {
-
-   /**
-    * <p class="changed_added_2_0">Take action to handle the
-    * <code>Exception</code> instances residing inside the {@link
-    * ExceptionQueuedEvent} instances that have been queued by calls to
-    * <code>Application().publishEvent(ExceptionQueuedEvent.class,
-    * <em>eventContext</em>)</code>.  The requirements of the default
-    * implementation are detailed in section JSF.6.2.1.</p>
-
-    * @throws FacesException if and only if a problem occurs while
-    * performing the algorithm to handle the <code>Exception</code>, not
-    * as a means of conveying a handled <code>Exception</code> itself.
-    *
-    * @since 2.0
-    */
-    public abstract void handle() throws FacesException;
-
-
-    /**
-     * <p class="changed_added_2_0">Return the first
-     * <code>ExceptionQueuedEvent</code> handled by this handler.</p>
-     */
-    public abstract ExceptionQueuedEvent getHandledExceptionQueuedEvent();
-
-
-    /**
-     * <p class="changed_added_2_0">Return an <code>Iterable</code> over
-     * all <code>ExceptionQueuedEvent</code>s that have not yet been handled
-     * by the {@link #handle} method.</p>
-     */
-    public abstract Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents();
-
-
-    /**
-     * <p class="changed_added_2_0">The default implementation must
-     * return an <code>Iterable</code> over all
-     * <code>ExceptionQueuedEvent</code>s that have been handled by the {@link
-     * #handle} method.</p>
-     */
-    public abstract Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents();
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public abstract void processEvent(SystemEvent exceptionQueuedEvent) throws AbortProcessingException;
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public abstract boolean isListenerForSource(Object source);
-
-    
-    /**
-     * <p class="changed_added_2_0">Unwrap the argument <code>t</code>
-     * until the unwrapping encounters an Object whose
-     * <code>getClass()</code> is not equal to
-     * <code>FacesException.class</code> or
-     * <code>javax.el.ELException.class</code>.  If there is no root cause, <code>null</code> is returned.</p>
-
-     * @throws NullPointerException if argument <code>t</code> is
-     * <code>null</code>.
-
-     * @since 2.0
-     */
-    public abstract Throwable getRootCause(Throwable t);
-
-}
-
diff --git a/jsf-api/src/main/java/javax/faces/context/ExceptionHandlerFactory.java b/jsf-api/src/main/java/javax/faces/context/ExceptionHandlerFactory.java
deleted file mode 100644
index 3ea4732..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ExceptionHandlerFactory.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import javax.faces.FacesWrapper;
-
-/**
- * <p class="changed_added_2_0"><strong>ExceptionHandlerFactory</strong>
- * is a factory object that creates (if needed) and returns a new {@link
- * ExceptionHandler} instance.</p>
- *
- * <div class="changed_added_2_0">
-
- * <p>There must be one <code>ExceptionHandlerFactory</code> instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- *
- * <pre><code>
- *   ExceptionHandlerFactory factory = (ExceptionHandlerFactory)
- *    FactoryFinder.getFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY);
- * </code></pre>
- *
-
- * </div>
- *
- * @since 2.0
- */
-
-public abstract class ExceptionHandlerFactory implements FacesWrapper<ExceptionHandlerFactory> {
-
-
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     */
-    public ExceptionHandlerFactory getWrapped() {
-        return null;
-    }
-
-    
-    /**
-     * <p class="changed_added_2_0">Create and return a A new
-     * <code>ExceptionHandler</code> instance.  The implementation must return
-     * an <code>ExceptionHandler</code> instance suitable for the environment.
-     * For example, in some cases it may be desirable for an 
-     * <code>ExceptionHandler</code> to write error information
-     * to the response instead of throwing exceptions as in the case of
-     * Ajax applications.</p> 
-     */
-    public abstract ExceptionHandler getExceptionHandler();
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/ExceptionHandlerWrapper.java b/jsf-api/src/main/java/javax/faces/context/ExceptionHandlerWrapper.java
deleted file mode 100644
index fe1891f..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ExceptionHandlerWrapper.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import javax.faces.FacesException;
-import javax.faces.FacesWrapper;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.SystemEvent;
-
-/**
- * <p>Provides a simple implementation of {@link ExceptionHandler} that can
- * be subclassed by developers wishing to provide specialized behavior
- * to an existing {@link ExceptionHandler} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link ExceptionHandler} instance.</p>
- *
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance we are wrapping.</p>
- *
- * @since 2.0
- */
-public abstract class ExceptionHandlerWrapper extends ExceptionHandler implements FacesWrapper<ExceptionHandler> {
-
-
-    // ----------------------------------------------- Methods from FacesWrapper
-
-
-    /**
-     * @return the wrapped {@link ExceptionHandler} instance
-     * @see javax.faces.FacesWrapper#getWrapped() 
-     */
-    public abstract ExceptionHandler getWrapped();
-
-
-    // ------------------------------------------- Methods from ExceptionHandler
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExceptionHandler#getHandledExceptionQueuedEvent()}
-     * on the wrapped {@link ExceptionHandler} object.</p>
-     *
-     * @see ExceptionHandler#getHandledExceptionQueuedEvent()
-     */
-    public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
-        return getWrapped().getHandledExceptionQueuedEvent();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExceptionHandler#handle()}
-     * on the wrapped {@link ExceptionHandler} object.</p>
-     *
-     * @see javax.faces.context.ExceptionHandler#handle()
-     */
-    public void handle() throws FacesException {
-        getWrapped().handle();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExceptionHandler#isListenerForSource(Object)}
-     * on the wrapped {@link ExceptionHandler} object.</p>
-     *
-     * @see javax.faces.context.ExceptionHandler#isListenerForSource(Object) ()
-     */
-    public boolean isListenerForSource(Object source) {
-        return getWrapped().isListenerForSource(source);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)}
-     * on the wrapped {@link ExceptionHandler} object.</p>
-     *
-     * @see javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)
-     */
-    public void processEvent(SystemEvent event) throws AbortProcessingException {
-        getWrapped().processEvent(event);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExceptionHandler#getRootCause(Throwable)}
-     * on the wrapped {@link ExceptionHandler} object.</p>
-     *
-     * @see javax.faces.context.ExceptionHandler#getRootCause(Throwable)
-     */
-    public Throwable getRootCause(Throwable t) {
-        return getWrapped().getRootCause(t);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to call
-     * {@link ExceptionHandler#getHandledExceptionQueuedEvents()} on the wrapped
-     * {@link ExceptionHandler} object.</p>
-     *
-     * @see ExceptionHandler#getHandledExceptionQueuedEvents()
-     */
-    public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
-        return getWrapped().getHandledExceptionQueuedEvents();
-    }
-
-    
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExceptionHandler#getUnhandledExceptionQueuedEvents()}
-     * on the wrapped {@link ExceptionHandler} object.</p>
-     *
-     * @see ExceptionHandler#getUnhandledExceptionQueuedEvents()
-     */
-    public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
-        return getWrapped().getUnhandledExceptionQueuedEvents();
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/ExternalContext.java b/jsf-api/src/main/java/javax/faces/context/ExternalContext.java
deleted file mode 100644
index 9d6d5f4..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ExternalContext.java
+++ /dev/null
@@ -1,1848 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved.
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- */
-
-package javax.faces.context;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.Principal;
-import java.util.*;
-
-
-/**
- * <p><span class="changed_modified_2_0">This</span> class allows the
- * Faces API to be unaware of the nature of its containing application
- * environment.  In particular, this class allows JavaServer Faces based
- * appications to run in either a Servlet or a Portlet environment.</p>
- *
- * <p class="changed_modified_2_0">The documentation for this class only
- * specifies the behavior for the <em>Servlet</em> implementation of
- * <code>ExternalContext</code>.  The <em>Portlet</em> implementation of
- * <code>ExternalContext</code> is specified under the revision of the
- * <span style="text-decoration: underline;">Portlet Bridge
- * Specification for JavaServer Faces</span> JSR that corresponds to
- * this version of the JSF specification.  See the Preface of the
- * "prose document", <a
- * href="../../../overview-summary.html#overview_description">linked
- * from the javadocs</a>, for a reference.</p>
-
- * <p class="changed_added_2_0">If a reference to an
- * <code>ExternalContext</code> is obtained during application startup or shutdown
- * time, any method documented as "valid to call this method during
- * application startup or shutdown" must be supported during application startup or shutdown
- * time.  The result of calling a method during application startup or shutdown time
- * that does not have this designation is undefined.</p>
-
-
- */
-
-public abstract class ExternalContext {
-
-    
-    @SuppressWarnings({"UnusedDeclaration"})
-    private ExternalContext defaultExternalContext;
-    
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>String identifier for BASIC authentication.</p>
-     */
-    public static final String BASIC_AUTH = "BASIC";
-
-
-    /**
-     * <p>String identifier for CLIENT_CERT authentication.</p>
-     */
-    public static final String CLIENT_CERT_AUTH = "CLIENT_CERT";
-
-
-    /**
-     * <p>String identifier for DIGEST authentication.</p>
-     */
-    public static final String DIGEST_AUTH = "DIGEST";
-
-
-    /**
-     * <p>String identifier for FORM authentication.</p>
-     */
-    public static final String FORM_AUTH = "FORM";
-
-
-
-    // ---------------------------------------------------------- Public Methods
-
-    /**
-     * <p class="changed_added_2_0">Adds the cookie represented by the
-     * arguments to the response.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must be accomplished by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> method
-     * <code>addCookie()</code>.  The <code>Cookie</code> argument must
-     * be constructed by passing the <code>name</code> and
-     * <code>value</code> parameters.  If the <code>properties</code>
-     * arugument is non-<code>null</code> and not empty, the
-     * <code>Cookie</code> instance must be initialized as described
-     * below.</p>
-     *
-     * <table border="1">
-     *
-     * <tr>
-     *
-     * <th>Key in "values" <code>Map</code></th>
-     *
-     * <th>Expected type of value.</th>
-     *
-     * <th>Name of setter method on <code>Cookie</code> instance to be
-     * set with the value from the <code>Map</code>.  </th>
-     *
-     * </tr>
-     *
-     * <tr>
-     *
-     * <td>comment</td>
-     *
-     * <td>String</td>
-     *
-     * <td>setComment</td>
-     *
-     * </tr>
-     *
-     * <tr>
-     *
-     * <td>domain</td>
-     *
-     * <td>String</td>
-     *
-     * <td>setDomain</td>
-     *
-     * </tr>
-     *
-     * <tr>
-     *
-     * <td>maxAge</td>
-     *
-     * <td>Integer</td>
-     *
-     * <td>setMaxAge</td>
-     *
-     * </tr>
-     *
-     * <tr>
-     *
-     * <td>secure</td>
-     *
-     * <td>Boolean</td>
-     *
-     * <td>setSecure</td>
-     *
-     * </tr>
-     *
-     * <tr>
-     *
-     * <td>path</td>
-     *
-     * <td>String</td>
-     *
-     * <td>setPath</td>
-     *
-     * </tr>
-     *
-     * </table>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @param name To be passed as the first argument to the
-     * <code>Cookie</code> constructor.
-     *
-     * @param value To be passed as the second argument to the
-     * <code>Cookie</code> constructor.
-     *
-     * @param properties A <code>Map</code> containg key/value pairs to be passed
-     * as arguments to the setter methods as described above.
-     *
-     * @throws IllegalArgumentException if the <code>properties
-     * Map</code> is not-<code>null</code> and not empty and contains
-     * any keys that are not one of the keys listed above.
-     *
-     * @since 2.0
-     */
-
-    public void addResponseCookie(String name,
-                                  String value,
-                                  Map<String, Object> properties) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.addResponseCookie(name, value, properties);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p>Dispatch a request to the specified resource to create output
-     * for this response.</p>
-     *
-     * <p><em>Servlet:</em> This must be accomplished by calling the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>getRequestDispatcher(path)</code>, and calling the
-     * <code>forward()</code> method on the resulting object.</p>
-     *
-     * @param path Context relative path to the specified resource,
-     *  which must start with a slash ("/") character
-     *
-     * @throws javax.faces.FacesException thrown if a <code>ServletException</code> occurs
-     * @throws IllegalArgumentException if no request dispatcher
-     *  can be created for the specified path
-     * @throws IOException if an input/output error occurs
-     * @throws NullPointerException if <code>path</code>
-     *  is <code>null</code>
-     */
-    public abstract void dispatch(String path)
-	throws IOException;
-
-
-    /**
-     * <p>Return the input URL, after performing any rewriting needed to
-     * ensure that it will correctly identify an addressable action in the
-     * current application.<p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletResponse</code> method
-     * <code>encodeURL(url)</code>.</p>
-     *
-     * @param url The input URL to be encoded
-     *
-     * @throws NullPointerException if <code>url</code>
-     *  is <code>null</code>
-     */
-    public abstract String encodeActionURL(String url);
-    
-
-    /**
-     * <p>Return the specified name, after prefixing it with a namespace
-     * that ensures that it will be unique within the context of a
-     * particular page.</p>
-     *
-     * <p><em>Servlet:</em> The input value must be returned unchanged.</p>
-     *
-     * @param name Name to be encoded
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     */
-    public abstract String encodeNamespace(String name);
-
-
-    /**
-     * <p>Return the input URL, after performing any rewriting needed to
-     * ensure that it will correctly identify an addressable resource in the
-     * current application.<p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletResponse</code> method
-     * <code>encodeURL(url)</code>.</p>
-     *
-     * @param url The input URL to be encoded
-     *
-     * @throws NullPointerException if <code>url</code>
-     *  is <code>null</code>
-     */
-    // PENDING(craigmcc) - Currently identical to encodeActionURL()
-    public abstract String encodeResourceURL(String url);
-    
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> a mutable
-     * <code>Map</code> representing the application scope attributes
-     * for the current application.  The returned <code>Map</code> must
-     * implement the entire contract for a modifiable map as described
-     * in the JavaDocs for <code>java.util.Map</code>.  Modifications
-     * made in the <code>Map</code> must cause the corresponding changes
-     * in the set of application scope attributes.  Particularly the
-     * <code>clear()</code>, <code>remove()</code>, <code>put()</code>,
-     * <code>putAll()</code>, and <code>get()</code> operations must
-     * take the appropriate action on the underlying data structure.</p>
-     *
-     * <p>For any of the <code>Map</code> methods that cause an element
-     * to be removed from the underlying data structure, the following
-     * action regarding managed-beans must be taken.  If the element to
-     * be removed is a managed-bean, and it has one or more public
-     * no-argument void return methods annotated with
-     * <code>javax.annotation.PreDestroy</code>, each such method must
-     * be called before the element is removed from the underlying data
-     * structure.  Elements that are not managed-beans, but do happen to
-     * have methods with that annotation must not have those methods
-     * called on removal.  Any exception thrown by the
-     * <code>PreDestroy</code> annotated methods must by caught and not
-     * rethrown.  The exception may be logged.</p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called at startup or shutdown time, this
-     * method returns a <code>Map</code> that is backed by the same
-     * container context instance (<code>ServletContext</code> or
-     * <code>PortletContext</code>) as the one returned by calling
-     * <code>getApplicationMap()</code> on the
-     * <code>ExternalContext</code> returned by the
-     * <code>FacesContext</code> during an actual request.</p>
-     *
-     * <p><em>Servlet:</em>  This must be the set of attributes available via
-     * the <code>javax.servlet.ServletContext</code> methods
-     * <code>getAttribute()</code>, <code>getAttributeNames()</code>,
-     * <code>removeAttribute()</code>, and <code>setAttribute()</code>.</p>
-     *
-     */
-    public abstract Map<String, Object> getApplicationMap();
-
-
-    /**
-     * <p>Return the name of the authentication scheme used to authenticate
-     * the current user, if any; otherwise, return <code>null</code>.
-     * For standard authentication schemes, the returned value will match
-     * one of the following constants:
-     * <code>BASIC_AUTH</code>, <code>CLIENT_CERT_AUTH</code>,
-     * <code>DIGEST_AUTH</code>, or <code>FORM_AUTH</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>getAuthType()</code>.</p>
-     *
-     */
-    public abstract String getAuthType();
-
-
-    /**
-     * <p class="changed_added_2_0">Return the threadsafe {@link Flash}
-     * for this application.  The default implementation will throw
-     * <code>UnsupportedOperationException</code>.  Compliant JSF
-     * runtimes must provide an implementation of this method.</p>
-     *
-     * @since 2.0
-     */ 
-
-    public Flash getFlash() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getFlash();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }    
-
-
-
-
-    /**
-     * <p class="changed_added_2_0">Returns the MIME type of the
-     * specified file or <code>null</code> if the MIME type is not
-     * known.  The MIME type is determined by the container.</p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method calls through to the
-     * <code>getMimeType()</code> method on the same container
-     * context instance (<code>ServletContext</code> or
-     * <code>PortletContext</code>) as the one used when calling
-     * <code>getMimeType()</code> on the
-     * <code>ExternalContext</code> returned by the
-     * <code>FacesContext</code> during an actual request.</p>
-
-     * <div class="changed_added_2_0">
- 
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>getMimeType()</code>.</p>
-     *
-     * </div>
-     *
-     * @param file The file for which the mime type should be obtained.
-
-     *
-     * @since 2.0
-     */
-    public String getMimeType(String file) {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getMimeType(file);
-        }
-
-        throw new UnsupportedOperationException();
-        
-    }
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> the
-     * application environment object instance for the current
-     * appication.</p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this returns the same container context instance
-     * (<code>ServletContext</code> or <code>PortletContext</code>) as
-     * the one returned when calling <code>getContext()</code> on the
-     * <code>ExternalContext</code> returned by the
-     * <code>FacesContext</code> during an actual request.</p>
-
-     *
-     * <p><em>Servlet:</em>  This must be the current application's
-     * <code>javax.servlet.ServletContext</code> instance.</p>
-     *
-     */
-    public abstract Object getContext();
-
-    /**
-     * 
-     * <p class="changed_added_2_0">Return the name of the container
-     * context for this application.  </p>
-     *
-     * <p class="changed_added_2_0">Return the result of calling
-     * <code>getServletContextName()</code> on the
-     * <code>ServletContext</code> instance for this application.  It is
-     * valid to call this method during application startup or shutdown.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     *
-     */
-
-    public String getContextName() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getContextName();
-        }
-
-        throw new UnsupportedOperationException();
-        
-    }
-
-
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> the value of
-     * the specified application initialization parameter (if any).</p>
-     *
-     * <p><em>Servlet:</em> This must be the result of the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>getInitParameter(name)</code>.</p>
-     *
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method calls through to the actual container
-     * context to return the init parameter value.</p>
-
-     * @param name Name of the requested initialization parameter
-     *
-     * @throws NullPointerException if <code>name</code>
-     *  is <code>null</code>
-     */
-    public abstract String getInitParameter(String name);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span></span> an
-     * immutable <code>Map</code> whose keys are the set of application
-     * initialization parameter names configured for this application,
-     * and whose values are the corresponding parameter values.  The
-     * returned <code>Map</code> must implement the entire contract for
-     * an unmodifiable map as described in the JavaDocs for
-     * <code>java.util.Map</code>.</p>
-     *
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method returns a <code>Map</code> that is backed by
-     * the same container context instance (<code>ServletContext</code>
-     * or <code>PortletContext</code>) as the one returned by calling
-     * <code>getInitParameterMap()</code> on the
-     * <code>ExternalContext</code> returned by the
-     * <code>FacesContext</code> during an actual request.</p>
-     *
-     * <p><em>Servlet:</em> This result must be as if it were synthesized
-     * by calling the <code>javax.servlet.ServletContext</code>
-     * method <code>getInitParameterNames</code>, and putting
-     * each configured parameter name/value pair into the result.</p>
-     *
-     */
-    public abstract Map getInitParameterMap();
-    
-
-    /**
-     * <p>Return the login name of the user making the current request
-     * if any; otherwise, return <code>null</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>getRemoteUser()</code>.</p>
-     *
-     */
-    public abstract String getRemoteUser();
-
-
-    /**
-     * <p>Return the environment-specific object instance for the current
-     * request.</p>
-     *
-     * <p><em>Servlet:</em>  This must be the current request's
-     * <code>javax.servlet.http.HttpServletRequest</code> instance.</p>
-     *
-     */
-    public abstract Object getRequest();
-
-    /**
-     * <p>Set the environment-specific request to be returned by
-     * subsequent calls to {@link #getRequest}.  This may be used to
-     * install a wrapper for the request.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     *
-     * @since 1.2
-     */
-    public void setRequest(Object request) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setRequest(request);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Returns the name of the scheme used
-     * to make this request, for example, http, https, or ftp.</p>
-     *
-     * <div class="changed_added_2_0">
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletRequest</code> method
-     * <code>getScheme()</code>.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     */
-    public String getRequestScheme() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getRequestScheme();
-        }
-
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns the host name of the server
-     * to which the request was sent.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletRequest</code> method
-     * <code>getServerName()</code>.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     */
-    public String getRequestServerName() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getRequestServerName();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns the port number to which
-     * the request was sent.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletRequest</code> method
-     * <code>getServerPort()</code>.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     */
-    public int getRequestServerPort() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getRequestServerPort();
-        }
-
-        throw new UnsupportedOperationException();
-    }
-    
-    /**
-     *
-     * <p>Overrides the name of the character 
-     * encoding used in the body of this request.</p>
-     *
-     * <p>Calling this method after the request has been accessed will have no
-     * no effect, unless a <code>Reader</code> or <code>Stream</code> has been
-     * obtained from the request, in which case an <code>IllegalStateException</code>
-     * is thrown.</p>
-     *
-     * <p><em>Servlet:</em> This must call through to the
-     * <code>javax.servlet.ServletRequest</code> method
-     * <code>setCharacterEncoding()</code>.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @throws java.io.UnsupportedEncodingException if this is not a valid
-     * encoding 
-     *
-     * @since 1.2
-     *
-     */
-    public void setRequestCharacterEncoding(String encoding) throws UnsupportedEncodingException {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setRequestCharacterEncoding(encoding);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns a String containing the real
-     * path for a given virtual path. </p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>getRealPath()</code>.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * </div>
-     *
-     * @param path The context of the requested initialization parameter
-     *
-     * @since 2.0
-     */
-    public String getRealPath(String path) {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getRealPath(path);
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p>Return the portion of the request URI that identifies the web
-     * application context for this request.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>getContextPath()</code>.</p>
-     *
-     */
-    public abstract String getRequestContextPath();
-
-
-    /**
-     * <p>Return an immutable <code>Map</code> whose keys are the set of
-     * cookie names included in the current request, and whose
-     * values (of type <code>javax.servlet.http.Cookie</code>)
-     * are the first (or only) cookie for each cookie name
-     * returned by the underlying request.  The returned
-     * <code>Map</code> must implement the entire contract for an unmodifiable
-     * map as described in the JavaDocs for <code>java.util.Map</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>getCookies()</code>, unless <code>null</code> was returned,
-     * in which case this must be a zero-length array.</p>
-     *
-     */
-    public abstract Map<String, Object> getRequestCookieMap();
-    
-
-    /**
-     * <p>Return an immutable <code>Map</code> whose keys are the set of
-     * request header names included in the current request, and whose
-     * values (of type String) are the first (or only) value for each
-     * header name returned by the underlying request.  The returned
-     * <code>Map</code> must implement the entire contract for an unmodifiable
-     * map as described in the JavaDocs for <code>java.util.Map</code>.  In
-     * addition, key comparisons must be performed in a case insensitive
-     * manner.</p>
-     *
-     * <p><em>Servlet:</em> This must be the set of headers available via
-     * the <code>javax.servlet.http.HttpServletRequest</code> methods
-     * <code>getHeader()</code> and <code>getHeaderNames()</code>.</p>
-     *
-     */
-    public abstract Map<String, String> getRequestHeaderMap();
-    
-
-    /**
-     * <p>Return an immutable <code>Map</code> whose keys are the set of
-     * request header names included in the current request, and whose
-     * values (of type String[]) are all of the value for each
-     * header name returned by the underlying request.  The returned
-     * <code>Map</code> must implement the entire contract for an unmodifiable
-     * map as described in the JavaDocs for <code>java.util.Map</code>.  In
-     * addition, key comparisons must be performed in a case insensitive
-     * manner.</p>
-     *
-     * <p><em>Servlet:</em> This must be the set of headers available via
-     * the <code>javax.servlet.http.HttpServletRequest</code> methods
-     * <code>getHeaders()</code> and <code>getHeaderNames()</code>.</p>
-     *
-     */
-    public abstract Map<String, String []> getRequestHeaderValuesMap();
-    
-
-    /**
-     * <p>Return the preferred <code>Locale</code> in which the client
-     * will accept content.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletRequest</code> method
-     * <code>getLocale()</code>.</p>
-     *
-     */
-    public abstract Locale getRequestLocale();
-    
-
-    /**
-     * <p>Return an <code>Iterator</code> over the preferred
-     * <code>Locale</code>s specified in the request, in decreasing
-     * order of preference.</p>
-     *
-     * <p><em>Servlet:</em> This must be an <code>Iterator</code>
-     * over the values returned by the <code>javax.servlet.ServletRequest</code>
-     * method <code>getLocales()</code>.</p>
-     *
-     */
-    public abstract Iterator<Locale> getRequestLocales();
-
-
-    /**
-     * <p>Return a mutable <code>Map</code> representing the request
-     * scope attributes for the current application.  The returned
-     * <code>Map</code> must implement the entire contract for a
-     * modifiable map as described in the JavaDocs for
-     * <code>java.util.Map</code>.  Modifications made in the
-     * <code>Map</code> must cause the corresponding changes in the set
-     * of request scope attributes.  Particularly the
-     * <code>clear()</code>, <code>remove()</code>, <code>put()</code>,
-     * <code>putAll()</code>, and <code>get()</code> operations must
-     * take the appropriate action on the underlying data structure.</p>
-     *
-     * <p>For any of the <code>Map</code> methods that cause an element
-     * to be removed from the underlying data structure, the following
-     * action regarding managed-beans must be taken.  If the element to
-     * be removed is a managed-bean, and it has one or more public
-     * no-argument void return methods annotated with
-     * <code>javax.annotation.PreDestroy</code>, each such method must
-     * be called before the element is removed from the underlying data
-     * structure.  Elements that are not managed-beans, but do happen to
-     * have methods with that annotation must not have those methods
-     * called on removal.  Any exception thrown by the
-     * <code>PreDestroy</code> annotated methods must by caught and not
-     * rethrown.  The exception may be logged.</p>
-     *
-     * <p><em>Servlet:</em>  This must be the set of attributes available via
-     * the <code>javax.servlet.ServletRequest</code> methods
-     * <code>getAttribute()</code>, <code>getAttributeNames()</code>,
-     * <code>removeAttribute()</code>, and <code>setAttribute()</code>.</p>
-     *
-     */
-    public abstract Map<String, Object> getRequestMap();
-
-
-    /**
-     * <p>Return an immutable <code>Map</code> whose keys are the set of
-     * request parameters names included in the current request, and whose
-     * values (of type String) are the first (or only) value for each
-     * parameter name returned by the underlying request.  The returned
-     * <code>Map</code> must implement the entire contract for an unmodifiable
-     * map as described in the JavaDocs for <code>java.util.Map</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the set of parameters available via
-     * the <code>javax.servlet.ServletRequest</code> methods
-     * <code>getParameter()</code> and <code>getParameterNames()</code>.</p>
-     *
-     */
-    public abstract Map<String, String> getRequestParameterMap();
-    
-
-    /**
-     * <p>Return an <code>Iterator</code> over the names of all request
-     * parameters included in the current request.</p>
-     *
-     * <p><em>Servlet:</em> This must be an <code>Iterator</code> over the
-     * values returned by the <code>javax.servlet.ServletRequest</code>
-     * method <code>getParameterNames()</code>.</p>
-     *
-     */
-    public abstract Iterator<String> getRequestParameterNames();
-
-
-    /**
-     * <p>Return an immutable <code>Map</code> whose keys are the set of
-     * request parameters names included in the current request, and whose
-     * values (of type String[]) are all of the values for each
-     * parameter name returned by the underlying request.  The returned
-     * <code>Map</code> must implement the entire contract for an unmodifiable
-     * map as described in the JavaDocs for <code>java.util.Map</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the set of parameters available via
-     * the <code>javax.servlet.ServletRequest</code> methods
-     * <code>getParameterValues()</code> and
-     * <code>getParameterNames()</code>.</p>
-     *
-     */
-    public abstract Map<String, String []> getRequestParameterValuesMap();
-    
-
-    /**
-     * <p>Return the extra path information (if any) included in the
-     * request URI; otherwise, return <code>null</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>getPathInfo()</code>.</p>
-     *
-     */
-    public abstract String getRequestPathInfo();
-    
-
-    /**
-     * <p>Return the servlet path information (if any) included in the
-     * request URI; otherwise, return <code>null</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>getServletPath()</code>.</p>
-     *
-     */
-    public abstract String getRequestServletPath();
-    
-    /**
-     *
-     * <p> Return the character encoding currently being used
-     * to interpret this request.</p>
-     *
-     * <p><em>Servlet:</em> This must return the value returned by the
-     * <code>javax.servlet.ServletRequest</code> method
-     * <code>getCharacterEncoding()</code>.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @since 1.2
-     *
-     */
-    public String getRequestCharacterEncoding() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getRequestCharacterEncoding();
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     *
-     * <p>Return the MIME Content-Type for this request.  If not
-     * available, return <code>null</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must return the value returned by the
-     * <code>javax.servlet.ServletRequest</code> method
-     * <code>getContentType()</code>.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @since 1.2
-     */
-    public String getRequestContentType() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getRequestContentType();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the result
-     * of calling <code>getContentLenth()</code> on the
-     * <code>ServletRequest</code> instance for this request.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @since 2.0
-     */
-
-    public int getRequestContentLength() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getRequestContentLength();
-        }
-
-        throw new UnsupportedOperationException();
-        
-    }
-
-
-    /**
-     *
-     * <p>Returns the name of the character encoding (MIME charset) used for 
-     * the body sent in this response. </p>
-     *
-     * <p><em>Servlet:</em> This must return the value returned by the
-     * <code>javax.servlet.ServletResponse</code> method
-     * <code>getCharacterEncoding()</code>.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @since 1.2
-     */
-    public String getResponseCharacterEncoding() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getResponseCharacterEncoding();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-    
-    /**
-     *
-     * <p>Return the MIME Content-Type for this response.  If not
-     * available, return <code>null</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must return the value returned by the
-     * <code>javax.servlet.ServletResponse</code> method
-     * <code>getContentType()</code>.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @since 1.2
-     */
-    public String getResponseContentType() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getResponseContentType();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> a
-     * <code>URL</code> for the application resource mapped to the
-     * specified path, if it exists; otherwise, return
-     * <code>null</code>.</p>
-     *
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method calls through to the
-     * <code>getResource()</code> method on the same container
-     * context instance (<code>ServletContext</code> or
-     * <code>PortletContext</code>) as the one used when calling
-     * <code>getResource()</code> on the
-     * <code>ExternalContext</code> returned by the
-     * <code>FacesContext</code> during an actual request.</p>
-
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>getResource(path)</code>.</p>
-     *
-     * @param path The path to the requested resource, which must
-     *  start with a slash ("/" character
-     *
-     * @throws MalformedURLException if the specified path
-     *  is not in the correct form
-     * @throws NullPointerException if <code>path</code>
-     *  is <code>null</code>
-     */
-    public abstract URL getResource(String path) throws MalformedURLException;
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> an
-     * <code>InputStream</code> for an application resource mapped to
-     * the specified path, if it exists; otherwise, return
-     * <code>null</code>.</p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method calls through to the
-     * <code>getResourceAsStream()</code> method on the same container
-     * context instance (<code>ServletContext</code> or
-     * <code>PortletContext</code>) as the one used when calling
-     * <code>getResourceAsStream()</code> on the
-     * <code>ExternalContext</code> returned by the
-     * <code>FacesContext</code> during an actual request.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>getResourceAsStream(path)</code>.</p>
-     *
-     * @param path The path to the requested resource, which must
-     *  start with a slash ("/" character
-     *
-     * @throws NullPointerException if <code>path</code>
-     *  is <code>null</code>
-     */
-    public abstract InputStream getResourceAsStream(String path);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> the
-     * <code>Set</code> of resource paths for all application resources
-     * whose resource path starts with the specified argument.</p>
-     *
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method calls through to the
-     * <code>getResourcePaths()</code> method on the same container
-     * context instance (<code>ServletContext</code> or
-     * <code>PortletContext</code>) as the one used when calling
-     * <code>getResourcePaths()</code> on the
-     * <code>ExternalContext</code> returned by the
-     * <code>FacesContext</code> during an actual request.</p>
-
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>getResourcePaths(path).</code></p>
-     *
-     * @param path Partial path used to match resources, which must
-     *  start with a slash ("/") character
-     *
-     * @throws NullPointerException if <code>path</code>
-     *  is <code>null</code>
-     */
-    public abstract Set<String> getResourcePaths(String path);
-
-
-    /**
-     * <p>Return the environment-specific object instance for the current
-     * response.</p>
-     *
-     * <p><em>Servlet:</em>  This is the current request's
-     * <code>javax.servlet.http.HttpServletResponse</code> instance.</p>
-     *
-     */
-    public abstract Object getResponse();
-
-    /**
-     * <p>Set the environment-specific response to be returned by
-     * subsequent calls to {@link #getResponse}.  This may be used to
-     * install a wrapper for the response.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     *
-     * @since 1.2
-     */
-    public void setResponse(Object response) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setResponse(response);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns an <code>OutputStream</code>
-     * suitable for writing binary data to the user-agent.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must return the value returned by the
-     * <code>javax.servlet.ServletResponse</code> method
-     * <code>getOutputStream()</code>.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     */
-    public OutputStream getResponseOutputStream() throws IOException {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getResponseOutputStream();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Returns a <code>Writer</code>
-     * suitable for writing character data to the user-agent.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must return the value returned by the
-     * {@link javax.servlet.ServletResponse#getWriter}.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     */
-    public Writer getResponseOutputWriter() throws IOException {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getResponseOutputWriter();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-    
-    
-    /**
-     *
-     * <p>Sets the character encoding (MIME charset) of the response being sent 
-     * to the client, for example, to UTF-8.</p>
-     *
-     * <p><em>Servlet:</em> This must call through to the
-     * <code>javax.servlet.ServletResponse</code> method
-     * <code>setCharacterEncoding()</code>.</p>
-     *
-     * <p>The default implementation throws 
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     *
-     * @since 1.2
-     *
-     */
-    public void setResponseCharacterEncoding(String encoding) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setResponseCharacterEncoding(encoding);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-    
-
-    /**
-     * <p class="changed_added_2_0">Sets the content type of the
-     * response being sent to the client, if the response has not been
-     * committed yet.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must call
-     * <code>setContentType()</code> on the underlying
-     * <code>javax.servlet.ServletResponse</code> instance.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @param contentType The content type to be set as the contentType
-     * of the response.
-     *
-     * @since 2.0
-     */
-    public void setResponseContentType(String contentType) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setResponseContentType(contentType);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p>If the <code>create</code> parameter is <code>true</code>,
-     * create (if necessary) and return a session instance associated
-     * with the current request.  If the <code>create</code> parameter
-     * is <code>false</code> return any existing session instance
-     * associated with the current request, or return <code>null</code> if
-     * there is no such session.</p>
-     *
-     * <p><em>Servlet:</em> This must return the result of calling
-     * <code>getSession(create)</code> on the underlying
-     * <code>javax.servlet.http.HttpServletRequest</code> instance.</p>
-     *
-     * @param create Flag indicating whether or not a new session should be
-     *  created if there is no session associated with the current request
-     */
-    public abstract Object getSession(boolean create);
-
-
-    /**
-     * <p>Return a mutable <code>Map</code> representing the session
-     * scope attributes for the current application.  The returned
-     * <code>Map</code> must implement the entire contract for a
-     * modifiable map as described in the JavaDocs for
-     * <code>java.util.Map</code>.  Modifications made in the
-     * <code>Map</code> must cause the corresponding changes in the set
-     * of session scope attributes.  Particularly the
-     * <code>clear()</code>, <code>remove()</code>, <code>put()</code>,
-     * and <code>get()</code> operations must take the appropriate
-     * action on the underlying data structure.  Accessing attributes
-     * via this <code>Map</code> must cause the creation of a session
-     * associated with the current request, if such a session does not
-     * already exist.</p>
-     *
-     * <p>For any of the <code>Map</code> methods that cause an element
-     * to be removed from the underlying data structure, the following
-     * action regarding managed-beans must be taken.  If the element to
-     * be removed is a managed-bean, and it has one or more public
-     * no-argument void return methods annotated with
-     * <code>javax.annotation.PreDestroy</code>, each such method must
-     * be called before the element is removed from the underlying data
-     * structure.  Elements that are not managed-beans, but do happen to
-     * have methods with that annotation must not have those methods
-     * called on removal.  Any exception thrown by the
-     * <code>PreDestroy</code> annotated methods must by caught and not
-     * rethrown.  The exception may be logged.</p>
-     *
-     * <p><em>Servlet:</em>  This must be the set of attributes available via
-     * the <code>javax.servlet.http.HttpSession</code> methods
-     * <code>getAttribute()</code>, <code>getAttributeNames()</code>,
-     * <code>removeAttribute()</code>, and <code>setAttribute()</code>.</p>
-     *
-     */
-    public abstract Map<String, Object> getSessionMap();
-
-
-    /**
-     * <p>Return the <code>Principal</code> object containing the name of
-     * the current authenticated user, if any; otherwise, return
-     * <code>null</code>.</p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>getUserPrincipal()</code>.</p>
-     *
-     */
-    public abstract Principal getUserPrincipal();
-
-
-    /**
-     * <p class="changed_added_2_0">Invalidates this session then unbinds any objects bound to it.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpSession</code> method
-     * <code>invalidate()</code>.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * </div>
-     *
-     * @since 2.0
-     */
-    public void invalidateSession() {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.invalidateSession();
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if the currently authenticated user is
-     * included in the specified role.  Otherwise, return <code>false</code>.
-     * </p>
-     *
-     * <p><em>Servlet:</em> This must be the value returned by the
-     * <code>javax.servlet.http.HttpServletRequest</code> method
-     * <code>isUserInRole(role)</code>.</p>
-     *
-     * @param role Logical role name to be checked
-     *
-     * @throws NullPointerException if <code>role</code>
-     *  is <code>null</code>
-     */
-    public abstract boolean isUserInRole(String role);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Log</span> the specified
-     * message to the application object.</p>
-     *
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this calls the <code>log()</code> method on the same
-     * container context instance (<code>ServletContext</code> or
-     * <code>PortletContext</code>) as the one used during a call to
-     * <code>log()</code> on the <code>ExternalContext</code> returned
-     * by the <code>FacesContext</code> during an actual request.</p>
-     *
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>log(String)</code>.</p>
-     *
-     * @param message Message to be logged
-     *
-     * @throws NullPointerException if <code>message</code>
-     *  is <code>null</code>
-     */
-    public abstract void log(String message);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Log</span> the specified
-     * message and exception to the application object.</p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this calls the <code>log()</code> method on the same
-     * container context instance (<code>ServletContext</code> or
-     * <code>PortletContext</code>) as the one used when calling
-     * <code>log()</code> on the <code>ExternalContext</code> returned
-     * by the <code>FacesContext</code> during an actual request.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.ServletContext</code> method
-     * <code>log(String,Throwable)</code>.</p>
-     *
-     * @param message Message to be logged
-     * @param exception Exception to be logged
-     *
-     * @throws NullPointerException if <code>message</code>
-     *  or <code>exception</code> is <code>null</code>
-     */
-    public abstract void log(String message, Throwable exception);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Redirect</span> a request 
-     * to the specified URL, and cause the
-     * <code>responseComplete()</code> method to be called on the
-     * {@link FacesContext} instance for the current request.</p>
-     *
-     * <p class="changed_added_2_0">The implementation must determine if
-     * the request is an <code>Ajax</code> request by obtaining a  
-     * {@link PartialViewContext} instance from the {@link FacesContext} and
-     * calling {@link PartialViewContext#isAjaxRequest()}.</p>
-     *
-     * <p><em>Servlet:</em> <span class="changed_modified_2_0">For
-     * non <code>Ajax</code> requests, this must be accomplished by calling 
-     * the <code>javax.servlet.http.HttpServletResponse</code> method
-     * <code>sendRedirect()</code>.</span> <div class="changed_added_2_0">
-     * For Ajax requests, the implementation must:
-     * <ul>
-     * <li>Get a {@link PartialResponseWriter} instance from the 
-     * {@link FacesContext}.</li>
-     * <li>Call {@link #setResponseContentType} with <code>text/xml</code></li>
-     * <li>Call {@link #setResponseCharacterEncoding} with <code>UTF-8</code></li>
-     * <li>Call {@link #addResponseHeader} with <code>Cache-Control</code>, 
-     * <code>no-cache</code></li>
-     * <li>Call {@link PartialResponseWriter#startDocument}</li>
-     * <li>Call {@link PartialResponseWriter#redirect} with the <code>url</code>
-     * argument.</li>
-     * <li>Call {@link PartialResponseWriter#endDocument}</li>
-     * </ul>
-     * </div>
-     * </p>
-     *
-     * @param url Absolute URL to which the client should be redirected
-     *
-     * @throws IllegalArgumentException if the specified url is relative
-     * @throws IllegalStateException if, in a portlet environment,
-     *  the current response object is a <code>RenderResponse</code>
-     *  instead of an <code>ActionResponse</code>
-     * @throws IllegalStateException if, in a servlet environment,
-     *  the current response has already been committed
-     * @throws IOException if an input/output error occurs
-     */
-    public abstract void redirect(String url)
-	throws IOException;
-
-    /**
-     * <p class="changed_added_2_0">Set the response header with the given name and value.</p>
-     *
-     * <p><em>Servlet:</em>This must be performed by calling the 
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>setHeader</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @param name The name of the response header.
-     * @param value The value of the response header.
-     *
-     * @since 2.0
-     */
-    public void setResponseHeader(String name, String value) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setResponseHeader(name, value);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Add the given name and value to the response header.</p>
-     *
-     * <p><em>Servlet:</em>This must be performed by calling the 
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>addHeader</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @param name The name of the response header.
-     * @param value The value of the response header.
-     *
-     * @since 2.0
-     */
-    public void addResponseHeader(String name, String value) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.addResponseHeader(name, value);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-        
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Set the buffer size for the current response.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>setBufferSize</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @param size the new buffer size
-     *
-     * @since 2.0
-     */
-    public void setResponseBufferSize(int size) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setResponseBufferSize(size);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the buffer size for the current response.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>getBufferSize</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @since 2.0
-     */
-    public int getResponseBufferSize() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.getResponseBufferSize();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Check if the current response has been committed.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>isCommitted</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @since 2.0
-     */
-    public boolean isResponseCommitted() {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.isResponseCommitted();
-        }
-        throw new UnsupportedOperationException();
-        
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Resets the current response.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>reset</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @since 2.0
-     */
-    public void responseReset() {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.responseReset();
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Sends an HTTP status code with message.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>sendError</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @param statusCode an HTTP status code
-     * @param message an option message to detail the cause of the code
-     *
-     * @since 2.0
-     */
-    public void responseSendError(int statusCode, String message) throws IOException {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.responseSendError(statusCode, message);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-        
-    }
-
-
-     /**
-     * <p class="changed_added_2_0">Sets the HTTP status code for the response.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>setStatus</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @param statusCode an HTTP status code
-     *
-     * @since 2.0
-     */
-    public void setResponseStatus(int statusCode) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setResponseStatus(statusCode);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Flushes the buffered response content to the
-     * client.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>flushBuffer</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @since 2.0
-     */
-    public void responseFlushBuffer() throws IOException {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.responseFlushBuffer();
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Set the content length of the response.</p>
-     *
-     * <p><em>Servlet:</em> This must be performed by calling the
-     * <code>javax.servlet.http.HttpServletResponse</code> <code>setContentLength</code>
-     * method.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.</p>
-     *
-     * @since 2.0
-     */
-    public void setResponseContentLength(int length) {
-
-        if (defaultExternalContext != null) {
-            defaultExternalContext.setResponseContentLength(length);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">
-     * The purpose of this method is to generate a query string from the collection of Parameter
-     * objects provided by the parameters argument and append that query string to the baseUrl.
-     * This method must be able to encode the parameters to a baseUrl that may or may not have
-     * existing query parameters. The parameter values should be encoded appropriately for the
-     * environment so that the resulting URL can be used as the target of a link (e.g., in an
-     * href attribute) in a JSF response.  It's possible for an ExternalContext implementation to
-     * override this method in any way that would make the URL bookmarkable in that environment.
-     * </p>
-     *
-     * <p>
-     * The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided for
-     * the sole purpose of not breaking existing applications that
-     * extend this class.
-     * </p>
-     *
-     * @param baseUrl    The base URL onto which the query string generated by this method will be appended. The URL may contain query parameters.
-     * @param parameters The collection of Parameter objects, representing name=value pairs that are used to produce a query string
-     * @since 2.0
-     */
-    public String encodeBookmarkableURL(String baseUrl,
-                                        Map<String, List<String>> parameters) {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.encodeBookmarkableURL(baseUrl,
-                                                                parameters);
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * The purpose of this method is to generate a query string from the collection of Parameter
-     * objects provided by the parameters argument and append that query string to the baseUrl.
-     * This method must be able to encode the parameters to a baseUrl that may or may not have existing query parameters. The parameter values should be encoded appropriately for the
-     * environment so that the resulting URL can be used as the target of a redirect. It's
-     * possible for an ExternalContext implementation to override this method to accomodate the
-     * definition of redirect for that environment.
-     *
-     * @param baseUrl    The base URL onto which the query string generated by this method will be appended. The URL may contain query parameters.
-     * @param parameters The collection of Parameter objects, representing name=value pairs that are used to produce a query string
-     * @since 2.0
-     */
-    public String encodeRedirectURL(String baseUrl,
-                                    Map<String,List<String>> parameters) {
-
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.encodeRedirectURL(baseUrl, parameters);
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the input URL, after performing
-     * any rewriting needed to ensure that it can be used in a partial page
-     * submission (ajax request) to correctly identify an addressable action
-     * in the current application.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p><p>
-     *
-     * <p><em>Servlet:</em>Returns the same encoded URL as the
-     * {@link #encodeActionURL(String url)} method.</p>
-     *
-     * <p><em>Portlet:</em>Returns an encoded URL that, upon HTTP POST, will
-     * invoke the RESOURCE_PHASE of the portlet lifecycle.</p>
-     *
-     * </div>
-     *
-     * @param url The input URL to be encoded
-     *
-     * @throws NullPointerException if <code>url</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public String encodePartialActionURL(String url) {
-        if (defaultExternalContext != null) {
-            return defaultExternalContext.encodePartialActionURL(url);
-        }
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/ExternalContextFactory.java b/jsf-api/src/main/java/javax/faces/context/ExternalContextFactory.java
deleted file mode 100644
index f65ee07..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ExternalContextFactory.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import javax.faces.FacesException;
-import javax.faces.FacesWrapper;
-
-/**
- * <p><strong class="changed_modified_2_0">ExternalContextFactory</strong> 
- * is a factory object that creates
- * (if needed) and returns new {@link ExternalContext} instances, initialized
- * for the processing of the specified request and response objects.</p>
- *
- * <p>There must be one <code>ExternalContextFactory</code> instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- * <pre>
- *   ExternalContextFactory factory = (ExternalContextFactory)
- *    FactoryFinder.getFactory(FactoryFinder.EXTERNAL_CONTEXT_FACTORY);
- * </pre>
- *
- */
-
-public abstract class ExternalContextFactory implements FacesWrapper<ExternalContextFactory> {
-
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-
-    public ExternalContextFactory getWrapped() {
-        return null;
-    }
-
-    /**
-     * <p><span class="changed_added_2_0">Create</span> (if needed)
-     * and return an {@link ExternalContext} instance that is initialized
-     * for the processing of the specified request and response objects,
-     * for this web application.</p>
-     *
-     * @param context In servlet environments, the
-     * <code>ServletContext</code> that is associated with this web
-     * application
-     * @param request In servlet environments, the
-     * <code>ServletRequest</code> that is to be processed
-     * @param response In servlet environments, the
-     * <code>ServletResponse</code> that is to be processed
-     *
-     * @throws FacesException if a {@link ExternalContext} cannot be
-     *  constructed for the specified parameters
-     * @throws NullPointerException if any of the parameters
-     *  are <code>null</code>
-     */
-    public abstract ExternalContext getExternalContext
-        (Object context, Object request,
-         Object response) throws FacesException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/ExternalContextWrapper.java b/jsf-api/src/main/java/javax/faces/context/ExternalContextWrapper.java
deleted file mode 100644
index 729fc17..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ExternalContextWrapper.java
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.*;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.security.Principal;
-
-import javax.faces.FacesWrapper;
-
-/**
- * <p class="changed_added_2_0">Provides a simple implementation of 
- * {@link ExternalContext} that can
- * be subclassed by developers wishing to provide specialized behavior
- * to an existing {@link ExternalContext} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link ExternalContext} instance.</p>
- *
- * <p class="changed_added_2_0">Usage: extend this class and override 
- * {@link #getWrapped} to
- * return the instance being wrapping.</p>
- *
- * @since 2.0
- */
-public abstract class ExternalContextWrapper extends ExternalContext implements FacesWrapper<ExternalContext> {
-
-
-    // ----------------------------------------------- Methods from FacesWrapper
-
-
-    /**
-     * @return the wrapped {@link ExternalContext} instance
-     * @see javax.faces.FacesWrapper#getWrapped()
-     */
-    public abstract ExternalContext getWrapped();
-
-
-    // -------------------------------------------- Methods from ExternalContext
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#dispatch(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#dispatch(String)
-     */
-    public void dispatch(String path) throws IOException {
-        getWrapped().dispatch(path);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#encodeActionURL(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#encodeActionURL(String)
-     */
-    public String encodeActionURL(String url) {
-        return getWrapped().encodeActionURL(url);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#encodeNamespace(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#encodeNamespace(String)
-     */
-    public String encodeNamespace(String name) {
-        return getWrapped().encodeNamespace(name);
-    }
-
-    @Override
-    public String encodePartialActionURL(String url) {
-        return getWrapped().encodePartialActionURL(url);
-    }
-    
-    
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#encodeResourceURL(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#encodeResourceURL(String)
-     */
-    public String encodeResourceURL(String url) {
-        return getWrapped().encodeResourceURL(url);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getApplicationMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getApplicationMap()
-     */
-    public Map<String, Object> getApplicationMap() {
-        return getWrapped().getApplicationMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getAuthType}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getAuthType()
-     */
-    public String getAuthType() {
-        return getWrapped().getAuthType();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getContext}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getContext()
-     */
-    public Object getContext() {
-        return getWrapped().getContext();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getInitParameter(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getInitParameter(String)
-     */
-    public String getInitParameter(String name) {
-        return getWrapped().getInitParameter(name);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getInitParameterMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getInitParameterMap()
-     */
-    public Map getInitParameterMap() {
-        return getWrapped().getInitParameterMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRemoteUser}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRemoteUser()
-     */
-    public String getRemoteUser() {
-        return getWrapped().getRemoteUser();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequest}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequest()
-     */
-    public Object getRequest() {
-        return getWrapped().getRequest();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestContextPath}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestContextPath() 
-     */
-    public String getRequestContextPath() {
-        return getWrapped().getRequestContextPath();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestCookieMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestCookieMap()
-     */
-    public Map<String, Object> getRequestCookieMap() {
-        return getWrapped().getRequestCookieMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestHeaderMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestHeaderMap()
-     */
-    public Map<String, String> getRequestHeaderMap() {
-        return getWrapped().getRequestHeaderMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestHeaderValuesMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestHeaderValuesMap()
-     */
-    public Map<String, String[]> getRequestHeaderValuesMap() {
-        return getWrapped().getRequestHeaderValuesMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestLocale}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestLocale() 
-     */
-    public Locale getRequestLocale() {
-        return getWrapped().getRequestLocale();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestLocales}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestLocales()
-     */
-    public Iterator<Locale> getRequestLocales() {
-        return getWrapped().getRequestLocales();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestMap() 
-     */
-    public Map<String, Object> getRequestMap() {
-        return getWrapped().getRequestMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestParameterMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestParameterMap()
-     */
-    public Map<String, String> getRequestParameterMap() {
-        return getWrapped().getRequestParameterMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestParameterNames}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestParameterNames()
-     */
-    public Iterator<String> getRequestParameterNames() {
-        return getWrapped().getRequestParameterNames();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestParameterValuesMap}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestParameterValuesMap()
-     */
-    public Map<String, String[]> getRequestParameterValuesMap() {
-        return getWrapped().getRequestParameterValuesMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestPathInfo}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestPathInfo()
-     */
-    public String getRequestPathInfo() {
-        return getWrapped().getRequestPathInfo();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestServletPath}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestServletPath()
-     */
-    public String getRequestServletPath() {
-        return getWrapped().getRequestServletPath();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResource(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResource(String) 
-     */
-    public URL getResource(String path) throws MalformedURLException {
-        return getWrapped().getResource(path);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResourceAsStream(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResourceAsStream(String)
-     */
-    public InputStream getResourceAsStream(String path) {
-        return getWrapped().getResourceAsStream(path);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResourcePaths(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResourcePaths(String)
-     */
-    public Set<String> getResourcePaths(String path) {
-        return getWrapped().getResourcePaths(path);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResponse}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResponse()
-     */
-    public Object getResponse() {
-        return getWrapped().getResponse();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getSession(boolean)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getSession(boolean)
-     */
-    public Object getSession(boolean create) {
-        return getWrapped().getSession(create);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getAuthType}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getAuthType()
-     */
-    public Map<String, Object> getSessionMap() {
-        return getWrapped().getSessionMap();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getUserPrincipal}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getUserPrincipal()
-     */
-    public Principal getUserPrincipal() {
-        return getWrapped().getUserPrincipal();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#isUserInRole(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#isUserInRole(String)
-     */
-    public boolean isUserInRole(String role) {
-        return getWrapped().isUserInRole(role);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#log(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#log(String)
-     */
-    public void log(String message) {
-        getWrapped().log(message);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#log(String, Throwable)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#log(String, Throwable)
-     */
-    public void log(String message, Throwable exception) {
-        getWrapped().log(message, exception);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#redirect(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#redirect(String)
-     */
-    public void redirect(String url) throws IOException {
-        getWrapped().redirect(url);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#addResponseCookie(String, String, Map)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#addResponseCookie(String, String, Map)
-     */
-    @Override
-    public void addResponseCookie(String name,
-                                  String value,
-                                  Map<String, Object> properties) {
-        getWrapped().addResponseCookie(name, value, properties);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getMimeType(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getMimeType(String)
-     */
-    @Override
-    public String getMimeType(String file) {
-        return getWrapped().getMimeType(file);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getContextName}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getContextName()
-     */
-    @Override
-    public String getContextName() {
-        return getWrapped().getContextName();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#setRequest(Object)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setRequest(Object)
-     */
-    @Override
-    public void setRequest(Object request) {
-        getWrapped().setRequest(request);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestScheme}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestScheme()
-     */
-    @Override
-    public String getRequestScheme() {
-        return getWrapped().getRequestScheme();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestServerName}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestServerName()
-     */
-    @Override
-    public String getRequestServerName() {
-        return getWrapped().getRequestServerName();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestServerPort}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestServerPort()
-     */
-    @Override
-    public int getRequestServerPort() {
-        return getWrapped().getRequestServerPort();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#setRequestCharacterEncoding(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setRequestCharacterEncoding(String)
-     */
-    @Override
-    public void setRequestCharacterEncoding(String encoding)
-    throws UnsupportedEncodingException {
-        getWrapped().setRequestCharacterEncoding(encoding);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRealPath(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRealPath(String)
-     */
-    @Override
-    public String getRealPath(String path) {
-        return getWrapped().getRealPath(path);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestCharacterEncoding}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestCharacterEncoding()
-     */
-    @Override
-    public String getRequestCharacterEncoding() {
-        return getWrapped().getRequestCharacterEncoding();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestContentType}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestContentType()
-     */
-    @Override
-    public String getRequestContentType() {
-        return getWrapped().getRequestContentType();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getRequestContentLength}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getRequestContentLength()
-     */
-    @Override
-    public int getRequestContentLength() {
-        return getWrapped().getRequestContentLength();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResponseCharacterEncoding}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResponseCharacterEncoding()
-     */
-    @Override
-    public String getResponseCharacterEncoding() {
-        return getWrapped().getResponseCharacterEncoding();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResponseContentType}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResponseContentType()
-     */
-    @Override
-    public String getResponseContentType() {
-        return getWrapped().getResponseContentType();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#setResponse(Object)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setResponse(Object)
-     */
-    @Override
-    public void setResponse(Object response) {
-        getWrapped().setResponse(response);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResponseOutputStream}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResponseOutputStream()
-     */
-    @Override
-    public OutputStream getResponseOutputStream() throws IOException {
-        return getWrapped().getResponseOutputStream();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResponseOutputWriter}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResponseOutputWriter()
-     */
-    @Override
-    public Writer getResponseOutputWriter() throws IOException {
-        return getWrapped().getResponseOutputWriter();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResponseCharacterEncoding}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResponseCharacterEncoding()
-     */
-    @Override
-    public void setResponseCharacterEncoding(String encoding) {
-        getWrapped().setResponseCharacterEncoding(encoding);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#setResponseContentType(String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setResponseContentType(String)
-     */
-    @Override
-    public void setResponseContentType(String contentType) {
-        getWrapped().setResponseContentType(contentType);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#invalidateSession}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#invalidateSession()
-     */
-    @Override
-    public void invalidateSession() {
-        getWrapped().invalidateSession();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#setResponseHeader(String,String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setResponseHeader(String,String)
-     */
-    @Override
-    public void setResponseHeader(String name, String value) {
-        getWrapped().setResponseHeader(name, value);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#addResponseHeader(String,String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#addResponseHeader(String,String)
-     */
-    @Override
-    public void addResponseHeader(String name, String value) {
-        getWrapped().addResponseHeader(name, value);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#setResponseBufferSize(int)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setResponseBufferSize(int)
-     */
-    @Override
-    public void setResponseBufferSize(int size) {
-        getWrapped().setResponseBufferSize(size);   
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getResponseBufferSize()}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#getResponseBufferSize()
-     */
-    @Override
-    public int getResponseBufferSize() {
-        return getWrapped().getResponseBufferSize();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#isResponseCommitted()}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#isResponseCommitted()
-     */
-    @Override
-    public boolean isResponseCommitted() {
-        return getWrapped().isResponseCommitted();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#responseReset()}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#responseReset()
-     */
-    @Override
-    public void responseReset() {
-        getWrapped().responseReset();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#responseSendError(int,String)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#responseSendError(int,String)
-     */
-    @Override
-    public void responseSendError(int statusCode, String message) throws IOException {
-        getWrapped().responseSendError(statusCode, message);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#setResponseStatus(int)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setResponseStatus(int)
-     */
-    @Override
-    public void setResponseStatus(int statusCode) {
-        getWrapped().setResponseStatus(statusCode);    
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExternalContext#responseFlushBuffer()}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#responseFlushBuffer()
-     */
-    @Override
-    public void responseFlushBuffer() throws IOException {
-        getWrapped().responseFlushBuffer();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExternalContext#setResponseContentLength(int)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#setResponseContentLength(int)
-     */
-    @Override
-    public void setResponseContentLength(int length) {
-        getWrapped().setResponseContentLength(length);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExternalContext#encodeBookmarkableURL(String, java.util.Map)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#encodeBookmarkableURL(String, java.util.Map)
-     */
-    @Override
-    public String encodeBookmarkableURL(String baseUrl, Map<String, List<String>> parameters) {
-        return getWrapped().encodeBookmarkableURL(baseUrl, parameters);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.ExternalContext#encodeRedirectURL(String, java.util.Map)}
-     * on the wrapped {@link ExternalContext} object.</p>
-     *
-     * @see javax.faces.context.ExternalContext#encodeRedirectURL(String, java.util.Map)
-     */
-    @Override
-    public String encodeRedirectURL(String baseUrl, Map<String, List<String>> parameters) {
-        return getWrapped().encodeRedirectURL(baseUrl, parameters);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ExternalContext#getFlash()} on the wrapped {@link ExternalContext}
-     * object.</p?
-     *
-     * @see javax.faces.context.ExternalContext#getFlash()
-     */
-    @Override
-    public Flash getFlash() {
-        return getWrapped().getFlash();
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/FacesContext.java b/jsf-api/src/main/java/javax/faces/context/FacesContext.java
deleted file mode 100644
index 5500b13..0000000
--- a/jsf-api/src/main/java/javax/faces/context/FacesContext.java
+++ /dev/null
@@ -1,778 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.application.ProjectStage;
-import javax.faces.application.FacesMessage.Severity;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.render.RenderKit;
-
-import javax.el.ELContext;
-import javax.faces.event.PhaseId;
-
-
-/**
- * <p><strong class="changed_modified_2_0">FacesContext</strong>
- * contains all of the per-request state information related to the
- * processing of a single JavaServer Faces request, and the rendering of
- * the corresponding response.  It is passed to, and potentially
- * modified by, each phase of the request processing lifecycle.</p>
- *
- * <p>A {@link FacesContext} instance is associated with a particular
- * request at the beginning of request processing, by a call to the
- * <code>getFacesContext()</code> method of the {@link FacesContextFactory}
- * instance associated with the current web application.  The instance
- * remains active until its <code>release()</code> method is called, after
- * which no further references to this instance are allowed.  While a
- * {@link FacesContext} instance is active, it must not be referenced
- * from any thread other than the one upon which the servlet container
- * executing this web application utilizes for the processing of this request.
- * </p>
- */
-
-public abstract class FacesContext {
-
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    private FacesContext defaultFacesContext;
-    private boolean processingEvents = true;
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> the {@link
-     * Application} instance associated with this web application.</p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, returns the correct current {@link
-     * javax.faces.application.Application} instance.</p>
-
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract Application getApplication();
-    
-    
-    /**
-     * <p class="changed_added_2_0">Return a mutable <code>Map</code> 
-     * representing the attributes associated wth this
-     * <code>FacesContext</code> instance.  This <code>Map</code> is 
-     * useful to store attributes that you want to go out of scope when the
-     * Faces lifecycle for the current request ends, which is not always the same 
-     * as the request ending, especially in the case of Servlet filters
-     * that are invoked <strong>after</strong> the Faces lifecycle for this
-     * request completes.  Accessing this <code>Map</code> does not cause any 
-     * events to fire, as is the case with the other maps: for request, session, and 
-     * application scope.  When {@link #release()} is invoked, the attributes
-     * must be cleared.</p>
-     * 
-     * <div class="changed_added_2_0">
-     * 
-     * <p>The <code>Map</code> returned by this method is not associated with
-     * the request.  If you would like to get or set request attributes,
-     * see {@link ExternalContext#getRequestMap}.  
-     * 
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * </div>
-     * 
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-
-    public Map<Object, Object> getAttributes() {
-
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.getAttributes();
-        }
-        throw new UnsupportedOperationException();
- 
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the {@link PartialViewContext}
-     * for this request.  The {@link PartialViewContext} is used to control 
-     * the processing of specified components during the execute portion of
-     * the request processing lifecycle (known as partial processing) and
-     * the rendering of specified components (known as partial rendering).
-     * This method must return a new {@link PartialViewContext} if one
-     * does not already exist.</p>
-     * 
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-      
-    public PartialViewContext getPartialViewContext() {
-
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.getPartialViewContext();
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the client identifiers for
-     * which at least one {@link javax.faces.application.FacesMessage} has been queued.  If there are no
-     * such client identifiers, an empty <code>Iterator</code> is returned.
-     * If any messages have been queued that were not associated with any
-     * specific client identifier, a <code>null</code> value will be included
-     * in the iterated values.  The elements in the <code>Iterator</code> must
-     * be returned in the order in which they were added with {@link #addMessage}.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract Iterator<String> getClientIdsWithMessages();
-
-    /**
-     * <p>Return the <code>ELContext</code> instance for this
-     * <code>FacesContext</code> instance.  This <code>ELContext</code>
-     * instance has the same lifetime and scope as the
-     * <code>FacesContext</code> instance with which it is associated,
-     * and may be created lazily the first time this method is called
-     * for a given <code>FacesContext</code> instance.  Upon creation of
-     * the ELContext instance, the implementation must take the
-     * following action: </p>
-     *
-     *	<ul>
-     *
-     *	  <li><p>Call the {@link ELContext#putContext} method on the
-     *	  instance, passing in <code>FacesContext.class</code> and the
-     *	  <code>this</code> reference for the <code>FacesContext</code>
-     *    instance itself.</p></li>
-     *
-     *    <li><p>If the <code>Collection</code> returned by {@link
-     *    javax.faces.application.Application#getELContextListeners} is
-     *    non-empty, create an instance of {@link
-     *    javax.el.ELContextEvent} and pass it to each {@link
-     *    javax.el.ELContextListener} instance in the
-     *    <code>Collection</code> by calling the {@link
-     *    javax.el.ELContextListener#contextCreated} method.</p></li>
-     *
-     * </ul>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 1.2
-     */ 
-
-    public ELContext getELContext() {
-
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.getELContext();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the {@link ExceptionHandler}
-     * for this request.</p>
-     */ 
-    public ExceptionHandler getExceptionHandler() {
-
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.getExceptionHandler();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-    
-    /**
-     * <p class="changed_added_2_0">Set the {@link ExceptionHandler} for
-     * this request.</p>
-     *
-     * @param exceptionHandler the <code>ExceptionHandler</code> for
-     * this request.
-     */ 
-    public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-
-        if (defaultFacesContext != null) {
-            defaultFacesContext.setExceptionHandler(exceptionHandler);
-        } else {
-           throw new UnsupportedOperationException();
-        }
-        
-    }
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> the {@link
-     * ExternalContext} instance for this <code>FacesContext</code>
-     * instance.</p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method returns an {@link ExternalContext} instance
-     * with the special behaviors indicated in the javadoc for that
-     * class.  Methods document as being valid to call during
-     * application startup or shutdown must be supported.</p>
-
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract ExternalContext getExternalContext();
-
-
-    /**
-     * <p>Return the maximum severity level recorded on any
-     * {@link javax.faces.application.FacesMessage}s that has been queued, whether or not they are
-     * associated with any specific {@link UIComponent}.  If no such messages
-     * have been queued, return <code>null</code>.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract Severity getMaximumSeverity();
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the {@link javax.faces.application.FacesMessage}s
-     * that have been queued, whether or not they are associated with any
-     * specific client identifier.  If no such messages have been queued,
-     * return an empty <code>Iterator</code>.  The elements of the <code>Iterator</code>
-     * must be returned in the order in which they were added with calls to {@link 
-     * #addMessage}.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract Iterator<FacesMessage> getMessages();
-
-    /**
-     * <p class="changed_added_2_0">Like {@link #getMessages}, but
-     * returns a <code>List<FacesMessage></code>,
-     * enabling use from EL expressions.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @return an immutable <code>List</code> which is effectively a snapshot
-     *  of the messages present at the time of invocation.
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */ 
-    public List<FacesMessage> getMessageList() {
-
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.getMessageList();
-        }
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Like {@link
-     * #getMessages(java.lang.String)}, but returns a
-     * <code>List<FacesMessage></code> of messages for the
-     * component with client id matching argument
-     * <code>clientId</code>.</p>
-     *
-     * <p>The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     *
-     * @return an immutable <code>List</code> which is effectively a snapshot
-     *  of the messages present at the time of invocation.
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */ 
-
-    public List<FacesMessage> getMessageList(String clientId) {
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.getMessageList(clientId);
-        }
-        throw new UnsupportedOperationException();
-    }
-
-
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the {@link javax.faces.application.FacesMessage}s that
-     * have been queued that are associated with the specified client identifier
-     * (if <code>clientId</code> is not <code>null</code>), or over the
-     * {@link javax.faces.application.FacesMessage}s that have been queued that are not associated with
-     * any specific client identifier (if <code>clientId</code> is
-     * <code>null</code>).  If no such messages have been queued, return an
-     * empty <code>Iterator</code>.  The elements of the <code>Iterator</code>
-     * must be returned in the order in which they were added with calls to {@link 
-     * #addMessage}.</p>
-     *
-     * @param clientId The client identifier for which messages are
-     *  requested, or <code>null</code> for messages not associated with
-     *  any client identifier
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract Iterator<FacesMessage> getMessages(String clientId);
-
-
-    /**
-     * <p>Return the {@link RenderKit} instance for the render kit identifier
-     * specified on our {@link UIViewRoot}, if there is one.  If there is no
-     * current {@link UIViewRoot}, if the {@link UIViewRoot} does not have a
-     * specified <code>renderKitId</code>, or if there is no {@link RenderKit}
-     * for the specified identifier, return <code>null</code> instead.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract RenderKit getRenderKit();
-
-
-    /**
-     * <p>Return <code>true</code> if the <code>renderResponse()</code>
-     * method has been called for the current request.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract boolean getRenderResponse();
-
-
-    /**
-     * <p>Return <code>true</code> if the <code>responseComplete()</code>
-     * method has been called for the current request.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract boolean getResponseComplete();
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if the <code>validationFailed()</code>
-     * method has been called for the current request.</p>
-     * 
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public boolean isValidationFailed() {
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.isValidationFailed();
-        }
-
-        throw new UnsupportedOperationException();
-        
-    }
-
-    /**
-     * <p>Return the {@link ResponseStream} to which components should
-     * direct their binary output.  Within a given response, components
-     * can use either the ResponseStream or the ResponseWriter,
-     * but not both.
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract ResponseStream getResponseStream();
-
-
-    /**
-     * <p>Set the {@link ResponseStream} to which components should
-     * direct their binary output.
-     *
-     * @param responseStream The new ResponseStream for this response
-     *
-     * @throws NullPointerException if <code>responseStream</code>
-     *  is <code>null</code>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract void setResponseStream(ResponseStream responseStream);
-
-
-    /**
-     * <p>Return the {@link ResponseWriter} to which components should
-     * direct their character-based output.  Within a given response,
-     * components can use either the ResponseStream or the ResponseWriter,
-     * but not both.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract ResponseWriter getResponseWriter();
-
-
-    /**
-     * <p>Set the {@link ResponseWriter} to which components should
-     * direct their character-based output.
-     *
-     * @param responseWriter The new ResponseWriter for this response
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     * @throws NullPointerException if <code>responseWriter</code>
-     *  is <code>null</code>
-     */
-    public abstract void setResponseWriter(ResponseWriter responseWriter);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Return</span> the root
-     * component that is associated with the this request.  </p>
-
-     * <p class="changed_added_2_0">It is valid to call this method
-     * during application startup or shutdown.  If called during application
-     * startup or shutdown, this method returns a new <code>UIViewRoot</code> with
-     * its locale set to <code>Locale.getDefault()</code>.</p>
-
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract UIViewRoot getViewRoot();
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Set</span> the root
-     * component that is associated with this request.  This method can
-     * only be called by the application handler (or a class that the
-     * handler calls), and only during the <em>Invoke Application</em>
-     * phase of the request processing lifecycle.</p>
-
-     * <p class="changed_added_2_0">If the current
-     * <code>UIViewRoot</code> is non-<code>null</code>, and calling
-     * <code>equals()</code> on the argument <code>root</code>, passing
-     * the current <code>UIViewRoot</code> returns <code>false</code>,
-     * the <code>clear</code> method must be called on the
-     * <code>Map</code> returned from {@link UIViewRoot#getViewMap}.</p>
-     *
-     * @param root The new component {@link UIViewRoot} component
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     * @throws NullPointerException if <code>root</code>
-     *  is <code>null</code>
-     */
-    public abstract void setViewRoot(UIViewRoot root);
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Append a {@link javax.faces.application.FacesMessage} to the set of messages associated with
-     * the specified client identifier, if <code>clientId</code> is
-     * not <code>null</code>.  If <code>clientId</code> is <code>null</code>,
-     * this {@link javax.faces.application.FacesMessage} is assumed to not be associated with any
-     * specific component instance.</p>
-     *
-     * @param clientId The client identifier with which this message is
-     *  associated (if any)
-     * @param message The message to be appended
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     * @throws NullPointerException if <code>message</code>
-     *  is <code>null</code>
-     */
-    public abstract void addMessage(String clientId, FacesMessage message);
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Release</span> any
-     * resources associated with this <code>FacesContext</code>
-     * instance.  Faces implementations may choose to pool instances in
-     * the associated {@link FacesContextFactory} to avoid repeated
-     * object creation and garbage collection.  After
-     * <code>release()</code> is called on a <code>FacesContext</code>
-     * instance (until the <code>FacesContext</code> instance has been
-     * recycled by the implementation for re-use), calling any other
-     * methods will cause an <code>IllegalStateException</code> to be
-     * thrown.</p>
-
-     * <p class="changed_added_2_0">If a call was made to {@link
-     * #getAttributes} during the processing for this request, the
-     * implementation must call <code>clear()</code> on the
-     * <code>Map</code> returned from <code>getAttributes()</code>, and
-     * then de-allocate the data-structure behind that
-     * <code>Map</code>.</p>
-
-     * <p>The implementation must call {@link #setCurrentInstance}
-     * passing <code>null</code> to remove the association between this
-     * thread and this dead <code>FacesContext</code> instance.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract void release();
-
-
-    /**
-     * <p>Signal the JavaServer faces implementation that, as soon as the
-     * current phase of the request processing lifecycle has been completed,
-     * control should be passed to the <em>Render Response</em> phase,
-     * bypassing any phases that have not been executed yet.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract void renderResponse();
-
-    /**
-     * <p class="changed_added_2_0">
-     * This utility method simply returns the result of
-     * {@link javax.faces.render.ResponseStateManager#isPostback(FacesContext)}.
-     * </p>
-     *
-     * <p class="changed_added_2_0">The default implementation throws
-     * <code>UnsupportedOperationException</code> and is provided
-     * for the sole purpose of not breaking existing applications that extend
-     * this class.</p>
-     * 
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public boolean isPostback() {
-
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.isPostback();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * <p>Signal the JavaServer Faces implementation that the HTTP response
-     * for this request has already been generated (such as an HTTP redirect),
-     * and that the request processing lifecycle should be terminated as soon
-     * as the current phase is completed.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract void responseComplete();
-    
-    /**
-     * <p class="changed_added_2_0">Sets a flag which indicates that a conversion or
-     * validation error occurred while processing the inputs. Inputs consist of
-     * either page parameters or form bindings. This flag can be read using
-     * {@link #isValidationFailed}.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public void validationFailed() {
-
-        if (defaultFacesContext != null) {
-            defaultFacesContext.validationFailed();
-        } else {
-            throw new UnsupportedOperationException();
-        }
-        
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the value last set on this
-     * <code>FacesContext</code> instance when {@link #setCurrentPhaseId}
-     * was called.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public PhaseId getCurrentPhaseId() {
-
-        if (defaultFacesContext != null) {
-            return defaultFacesContext.getCurrentPhaseId();
-        }
-
-        throw new UnsupportedOperationException();
-
-    }
-    
-    /**
-     * <p class="changed_added_2_0">The implementation must call this method
-     * at the earliest possble point in time after entering into a new phase
-     * in the request processing lifecycle.</p>
-     * 
-     * @param currentPhaseId The {@link javax.faces.event.PhaseId} for the 
-     * current phase.
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public void setCurrentPhaseId(PhaseId currentPhaseId) {
-
-        if (defaultFacesContext != null) {
-            defaultFacesContext.setCurrentPhaseId(currentPhaseId);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Allows control of wheter or not the runtime
-     * will publish events when {@link Application#publishEvent(FacesContext, Class, Object)} or
-     * {@link Application#publishEvent(FacesContext, Class, Class, Object)} is called.</p>
-     *
-     * @param processingEvents flag indicating events should be processed or not
-     */
-    public void setProcessingEvents(boolean processingEvents) {
-        this.processingEvents = processingEvents;    
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Returns a flag indicating whether or
-     * not the runtime should publish events when asked to do so.</p>
-     * @return <code>true</code> if events should be published, otherwise
-     *  <code>false</code>
-     */
-    public boolean isProcessingEvents() {
-        return this.processingEvents;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if the
-     * current {@link ProjectStage} as returned by the {@link
-     * Application} instance is equal to <code>stage</code>, otherwise
-     * return <code>false</code></p>
-
-     * @param stage the {@link ProjectStage} to check
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     * @throws NullPointerException if <code>stage</code> is <code>null</code>
-     */
-    public boolean isProjectStage(ProjectStage stage) {
-
-        if (stage == null) {
-            throw new NullPointerException();
-        }
-        return (stage.equals(getApplication().getProjectStage()));
-
-    }
-    
-
-    // ---------------------------------------------------------- Static Methods
-
-
-    /**
-     * <p>The <code>ThreadLocal</code> variable used to record the
-     * {@link FacesContext} instance for each processing thread.</p>
-     */
-    private static ThreadLocal<FacesContext> instance = new ThreadLocal<FacesContext>() {
-            protected FacesContext initialValue() { return (null); }
-        };
-
-
-    /**
-     * <p class="changed_modified_2_0">Return the {@link FacesContext}
-     * instance for the request that is being processed by the current
-     * thread.  If called during application initialization or shutdown,
-     * any method documented as "valid to call this method during
-     * application startup or shutdown" must be supported during
-     * application startup or shutdown time.  The result of calling a
-     * method during application startup or shutdown time that does not
-     * have this designation is undefined.</p>
-     */
-    public static FacesContext getCurrentInstance() {
-
-        return (instance.get());
-
-    }
-
-
-    /**
-     * <p>Set the {@link FacesContext} instance for the request that is
-     * being processed by the current thread.</p>
-     *
-     * @param context The {@link FacesContext} instance for the current
-     * thread, or <code>null</code> if this thread no longer has a
-     * <code>FacesContext</code> instance.
-     *
-     */
-    protected static void setCurrentInstance(FacesContext context) {
-
-        if (context == null) {
-            instance.remove();
-        } else {
-            instance.set(context);
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/FacesContextFactory.java b/jsf-api/src/main/java/javax/faces/context/FacesContextFactory.java
deleted file mode 100644
index 5dda195..0000000
--- a/jsf-api/src/main/java/javax/faces/context/FacesContextFactory.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import javax.faces.FacesException;
-import javax.faces.FacesWrapper;
-import javax.faces.lifecycle.Lifecycle;
-
-
-/**
- * <p><strong class="changed_modified_2_0">FacesContextFactory</strong> 
- * is a factory object that creates
- * (if needed) and returns new {@link FacesContext} instances, initialized
- * for the processing of the specified request and response objects.
- * Implementations may take advantage of the calls to the
- * <code>release()</code> method of the allocated {@link FacesContext}
- * instances to pool and recycle them, rather than creating a new instance
- * every time.</p>
- *
- * <p>There must be one <code>FacesContextFactory</code> instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- * <pre>
- *   FacesContextFactory factory = (FacesContextFactory)
- *    FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
- * </pre>
- *
- */
-
-public abstract class FacesContextFactory implements FacesWrapper<FacesContextFactory> {
-
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-
-    public FacesContextFactory getWrapped() {
-        return null;
-    }
-
-    /**
-     * <p><span class="changed_modified_2_0">Create</span> (if needed)
-     * and return a {@link FacesContext} instance that is initialized
-     * for the processing of the specified request and response objects,
-     * utilizing the specified {@link Lifecycle} instance, for this web
-     * application.</p>
-     *
-     * <p>The implementation of this method must ensure that calls to the
-     * <code>getCurrentInstance()</code> method of {@link FacesContext},
-     * from the same thread that called this method, will return the same
-     * {@link FacesContext} instance until the <code>release()</code>
-     * method is called on that instance.</p>
-
-     * <p class="changed_added_2_0">The implementation must call
-     * {@link ExternalContextFactory#getExternalContext} to produce the
-     * {@link ExternalContext} for the {@link FacesContext} instance.</p>
-
-     * <p class="changed_added_2_0">The default implementation must call
-     * {@link ExceptionHandlerFactory#getExceptionHandler} and make it
-     * so the return from that method is what gets returned from a call
-     * to {@link FacesContext#getExceptionHandler} on the returned
-     * <code>FacesContext</code> instance.</p>
-     *
-     * @param context In servlet environments, the
-     * <code>ServletContext</code> that is associated with this web
-     * application
-     * @param request In servlet environments, the
-     * <code>ServletRequest</code> that is to be processed
-     * @param response In servlet environments, the
-     * <code>ServletResponse</code> that is to be processed
-     * @param lifecycle The {@link Lifecycle} instance being used
-     *  to process this request
-     *
-     * @throws FacesException if a {@link FacesContext} cannot be
-     *  constructed for the specified parameters
-     * @throws NullPointerException if any of the parameters
-     *  are <code>null</code>
-     */
-    public abstract FacesContext getFacesContext
-        (Object context, Object request,
-         Object response, Lifecycle lifecycle)
-        throws FacesException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/FacesContextWrapper.java b/jsf-api/src/main/java/javax/faces/context/FacesContextWrapper.java
deleted file mode 100644
index 2ef3ce1..0000000
--- a/jsf-api/src/main/java/javax/faces/context/FacesContextWrapper.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.List;
-
-import javax.faces.FacesWrapper;
-import javax.faces.event.PhaseId;
-import javax.faces.component.UIViewRoot;
-import javax.faces.render.RenderKit;
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.application.ProjectStage;
-import javax.el.ELContext;
-
-/**
- * <p>Provides a simple implementation of {@link FacesContext} that can
- * be subclassed by developers wishing to provide specialized behavior
- * to an existing {@link FacesContext} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link FacesContext} instance.</p>
- *
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance being wrapping.</p>
- *
- * @since 2.0
- */
-public abstract class FacesContextWrapper extends FacesContext implements FacesWrapper<FacesContext> {
-
-
-    // ----------------------------------------------- Methods from FacesWrapper
-
-
-    /**
-     * @return the wrapped {@link FacesContext} instance
-     * @see javax.faces.FacesWrapper#getWrapped()
-     */
-    public abstract FacesContext getWrapped();
-
-
-    // ----------------------------------------------- Methods from FacesContext
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getApplication()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getApplication()
-     */
-    public Application getApplication() {
-        return getWrapped().getApplication();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.FacesContext#getClientIdsWithMessages()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see FacesContext#getClientIdsWithMessages()
-     */
-    public Iterator<String> getClientIdsWithMessages() {
-        return getWrapped().getClientIdsWithMessages();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getExternalContext()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getExternalContext()
-     */
-    public ExternalContext getExternalContext() {
-        return getWrapped().getExternalContext();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getMaximumSeverity()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getMaximumSeverity()
-     */
-    public FacesMessage.Severity getMaximumSeverity() {
-        return getWrapped().getMaximumSeverity();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getMessages()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getMessages()
-     */
-    public Iterator<FacesMessage> getMessages() {
-        return getWrapped().getMessages();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getMessages(String)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getMessages(String)
-     */
-    public Iterator<FacesMessage> getMessages(String clientId) {
-        return getWrapped().getMessages(clientId);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getRenderKit()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getRenderKit()
-     */
-    public RenderKit getRenderKit() {
-        return getWrapped().getRenderKit();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getRenderResponse()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getRenderResponse()
-     */
-    public boolean getRenderResponse() {
-        return getWrapped().getRenderResponse();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getResponseComplete()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getResponseComplete()
-     */
-    public boolean getResponseComplete() {
-        return getWrapped().getResponseComplete();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getResponseStream()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getResponseStream()
-     */
-    public ResponseStream getResponseStream() {
-        return getWrapped().getResponseStream();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#setResponseStream(ResponseStream)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#setResponseStream(ResponseStream)
-     */
-    public void setResponseStream(ResponseStream responseStream) {
-        getWrapped().setResponseStream(responseStream);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getResponseWriter()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getResponseWriter()
-     */
-    public ResponseWriter getResponseWriter() {
-        return getWrapped().getResponseWriter();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#setResponseWriter(ResponseWriter)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#setResponseWriter(ResponseWriter)
-     */
-    public void setResponseWriter(ResponseWriter responseWriter) {
-        getWrapped().setResponseWriter(responseWriter);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getViewRoot()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getViewRoot()
-     */
-    public UIViewRoot getViewRoot() {
-        return getWrapped().getViewRoot();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#setViewRoot(UIViewRoot)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#setViewRoot(UIViewRoot)
-     */
-    public void setViewRoot(UIViewRoot root) {
-        getWrapped().setViewRoot(root);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#addMessage(String, FacesMessage)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#addMessage(String, FacesMessage)
-     */
-    public void addMessage(String clientId, FacesMessage message) {
-        getWrapped().addMessage(clientId, message);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#release()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#release()
-     */
-    public void release() {
-        getWrapped().release();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#renderResponse()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#renderResponse()
-     */
-    public void renderResponse() {
-        getWrapped().renderResponse();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#responseComplete()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#responseComplete()
-     */
-    public void responseComplete() {
-        getWrapped().responseComplete();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getAttributes()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getAttributes()
-     */
-    @Override
-    public Map<Object, Object> getAttributes() {
-        return getWrapped().getAttributes();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getPartialViewContext()} ()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getPartialViewContext()
-     */
-    @Override
-    public PartialViewContext getPartialViewContext() {
-        return getWrapped().getPartialViewContext();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getELContext()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getELContext()
-     */
-    @Override
-    public ELContext getELContext() {
-        return getWrapped().getELContext();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getExceptionHandler()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getExceptionHandler()
-     */
-    @Override
-    public ExceptionHandler getExceptionHandler() {
-        return getWrapped().getExceptionHandler();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#setExceptionHandler(ExceptionHandler)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#setExceptionHandler(ExceptionHandler)
-     */
-    @Override
-    public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-        getWrapped().setExceptionHandler(exceptionHandler);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getMessageList()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getMessageList()
-     */
-    @Override
-    public List<FacesMessage> getMessageList() {
-        return getWrapped().getMessageList();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getMessageList(String)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getMessageList(String)
-     */
-    @Override
-    public List<FacesMessage> getMessageList(String clientId) {
-        return getWrapped().getMessageList(clientId);
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#isPostback()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#isPostback()
-     */
-    @Override
-    public boolean isPostback() {
-        return getWrapped().isPostback();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#getCurrentPhaseId()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#getCurrentPhaseId()
-     */
-    @Override
-    public PhaseId getCurrentPhaseId() {
-        return getWrapped().getCurrentPhaseId();
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#setCurrentPhaseId(PhaseId)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#setCurrentPhaseId(PhaseId)
-     */
-    @Override
-    public void setCurrentPhaseId(PhaseId currentPhaseId) {
-        getWrapped().setCurrentPhaseId(currentPhaseId);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.FacesContext#isValidationFailed}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see FacesContext#isValidationFailed
-     */
-    @Override
-    public boolean isValidationFailed() {
-
-        return getWrapped().isValidationFailed();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.FacesContext#validationFailed()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see FacesContext#validationFailed()
-     */
-    @Override
-    public void validationFailed() {
-
-        getWrapped().validationFailed();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link FacesContext#setProcessingEvents(boolean)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see javax.faces.context.FacesContext#setProcessingEvents(boolean)
-     */
-    @Override
-    public void setProcessingEvents(boolean processingEvents) {
-        getWrapped().setProcessingEvents(processingEvents);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.FacesContext#isProcessingEvents()}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see FacesContext#isProcessingEvents()
-     */
-    @Override
-    public boolean isProcessingEvents() {
-        return getWrapped().isProcessingEvents();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.context.FacesContext#isProjectStage(javax.faces.application.ProjectStage)}
-     * on the wrapped {@link FacesContext} object.</p>
-     *
-     * @see FacesContext#isProjectStage(javax.faces.application.ProjectStage) 
-     */
-    @Override
-    public boolean isProjectStage(ProjectStage stage) {
-        return getWrapped().isProjectStage(stage);    
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/Flash.java b/jsf-api/src/main/java/javax/faces/context/Flash.java
deleted file mode 100644
index 91eb9fc..0000000
--- a/jsf-api/src/main/java/javax/faces/context/Flash.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import java.util.Map;
-
-/**
- * <p class="changed_added_2_0">The <strong>Flash</strong> concept is
- * taken from <a target="_"
- * href="http://api.rubyonrails.com/classes/ActionController/Flash.html">Ruby
- * on Rails</a> and provides a way to pass temporary objects between the
- * user views generated by the faces lifecycle.  As in Rails, anything
- * one places in the flash will be exposed to the next view encountered
- * by the same user session and then cleared out.  It is important to
- * note that “next view” may have the same view id as
- * the previous view.</p>
- * 
- * <div class="changed_added_2_0">
- *
- * <p><b>Implementation Requirements</b></p>
- *
- * <p>The flash is a <span class="changed_modified_2_0_a">session</span>
- * scoped object that must be thread safe.</p>
-
- * <p>The implementation requirements will be described in terms of the
- * runtime traversing the JSF lifecycle.  The flash exposes a
- * <code>Map</code> interface over two logical maps.  The choice of
- * which logical map is accessed depends on the current faces lifecycle
- * phase.  One logical map is for the current traversal and the other is
- * for the next traversal.  During the execute portion of the lifecycle,
- * all flash accesses are sent to the current traversal map.  During the
- * render portion of the lifecycle, all flash accesses are sent to the
- * next traversal map.  On the next traversal through the lifecycle, the
- * implementation must ensure that the current traversal map is the next
- * traversal map of the previous traversal.  Here is an example for
- * illustration purposes only.</p>
- *
- * <ul>
- *
- * <p>Consider an initial request to the faces lifecycle</p>
- *
- * <p>Traversal N, execute phase: skipped on initial request.</p>
- *
- * <p>Traversal N, render phase: flash access goes to flash[N].</p>
- *
- * <p>Traversal N+1, execute phase: flash access goes to flash[N].</p>
- *
- * <p>Traversan N+1, render phase: flash access goes to flash[N+1].</p>
- *
- * </ul>
- *
- * <p>The implementation must ensure the proper behaviour of the flash
- * is preserved even in the case of a
- * <code><navigation-case></code> that contains a
- * <code><redirect /></code>.  The implementation must ensure the
- * proper behavior of the flash is preserved even in the case of
- * adjacent GET requests on the same session.  This allows Faces
- * applications to fully utilize the “Post/Redirect/Get”
- * design pattern.</p>
- *
- * <p>The implementation must allow the user to access the flash via the
- * EL implicit object <code>flash</code> and also via {@link
- * javax.faces.context.ExternalContext#getFlash}.  The implementation must
- * ensure that the flash is usable from both JSP and from Facelets for
- * JSF 2.  In addition to exposing the <code>Map</code> interface, there
- * are several features exposed as methods on the <code>Flash</code>
- * itself.  Each of these features may be accessed via the EL as well,
- * as described in the javadocs.</p>
- *
- * <p>EL Usage Example</p>
-
- * <ul>
- *
- * <p>First page</p>
- *
-<code><pre>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-<!-- extra code removed -->
-  <c:set target="#{flash}" property="foo" value="fooValue" />
-
-</pre></code>
-
- * <p>Next page</p>
- *
-<code><pre>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html">
-<!-- extra code removed -->
-  <h:outputText value="#{flash.foo}" /> will be "fooValue"
-  without the quotes.
-
-</pre></code>
-
- * </ul>
- *
- * <p>The same usage syntax must be available in JSP.</p>
-
- * <p>Note that extra action must be taken when using the flash in
- * concert with output components that cause the browser to issue a GET
- * request when clicked, such as <code>h:button</code> and
- * <code>h:link</code>.  The following example illustrates one way to
- * use the flash in such circumstances.</p>
-
- * <ul>
-
- * <p>First page</p>
-
-<code><pre>
-<h:button id="nextButton" value="Next (button)" outcome="next.xhtml">
-  <f:param name="foo" value="bar"/>
-</h:button>
-</pre></code>
-
- * <p>Next page</p>
-
-<code><pre>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html">
-<f:metadata>
-  <f:viewParam name="foo" id="foo" value="#{flash.now.foo}" />
-</f:metadata>
-<head /><body>
-foo = #{flash.foo}
-</body>
-</html>
-</pre></code>
-
- * </ul>
-
- * <p>Note that this example uses <code>#{flash.now}</code> on the
- * second page.  This is because the value doesn't actuall enter the
- * flash until the server is processing the GET request sent by the
- * browser due to the button being clicked.</p>
-
- * </div>
- *
- * @since 2.0
-
- */
-public abstract class Flash implements Map<String, Object> {
-    
-
-    /**
-     * <p class="changed_added_2_0">Return the value of this JavaBeans
-     * property for the flash for this session.  This value determines
-     * whether or not any {@link javax.faces.application.FacesMessage}
-     * instances queued in the current {@link
-     * javax.faces.context.FacesContext} must be preserved so they are
-     * accessible on the next traversal of the lifecycle on this
-     * session, regardless of the request being a redirect after post,
-     * or a normal postback.  <code>Map</code> accesses for the special
-     * key “<code>keepMessages</code>” must return the value
-     * of this JavaBeans property.</p>
-
-     * <div class="changed_added_2_0">
-
-     *
-     * <p>EL Usage Example</p>
-
-     * <ul>
-     *
-     * <p>First page</p>
-     *
-<code><pre>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-<!-- extra code removed -->
-  <c:set target="#{flash}" property="keepMessages" value="true" />
-
-</pre></code>
-
-     * <p>Next page</p>
-     *
-<code><pre>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html">
-<!-- extra code removed -->
-  <h:messages /> Any messages present on the first page must be displayed on 
-  this page.
-
-</pre></code>
-
-     * </ul>
-     *
-     * </div>
-     *
-     * @since 2.0
-     *
-     */
-    public abstract boolean isKeepMessages();
-
-    /**
-     * <p class="changed_added_2_0">Setter for <code>keepMessages</code>
-     * JavaBeans property.  See {@link #isKeepMessages}.</p>
-     *
-     * @param newValue the new value for this property on this session.
-     *
-     * @since 2.0
-     */
-    public abstract void setKeepMessages(boolean newValue);
-
-    /**
-     * <p class="changed_added_2_0">Return the value of this property
-     * for the flash for this session.  This must be <code>false</code>
-     * unless:</p>
-
-     * <div class="changed_added_2_0">
-
-     *
-     * <ul>
-     *
-     *  <li><p>{@link #setRedirect} was called for the current
-     *  lifecycle traversal with <code>true</code> as the
-     *  argument.</p></li>
-     *
-     * <li><p>The current lifecycle traversal for this session is in the
-     * “execute” phase and the previous traversal had {@link
-     * #setRedirect} called with <code>true</code> as the
-     * argument.</p></li>
-     *
-     * </div>
-
-     */
-    
-    public abstract boolean isRedirect();
-
-    /**
-     * <p class="changed_added_2_0">Setting this property to
-     * <code>true</code> indicates that the next request on this session
-     * will be a redirect.  Recall that on a redirect, the server sends
-     * a special response to the client instructing it to issue a new
-     * request to a specific URI.  The implementation must insure that
-     * reading the value of this property on that request will return
-     * <code>true</code>.  </p>
-
-     * <div class="changed_added_2_0">
-
-     * <p>EL Usage Example</p>
-
-     * <ul>
-     *
-<code><pre>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-<!-- extra code removed -->
-  <c:set target="#{flash}" property="redirect" value="true" />
-
-</pre></code>
-
-     * </ul>
-     *
-     * </div>
-
-     * 
-     * @param newValue the new value for this property on this session.
-     *
-     * @since 2.0
-     *
-     */
-    
-    public abstract void setRedirect(boolean newValue);
-
-    /**
-     * <p class="changed_added_2_0">Puts a value in the flash so that it
-     * can be accessed on this traversal of the lifecycle, rather than
-     * on the next traversal.  This is simply an alias for putting a
-     * value in the request map.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * <p>EL Usage Example</p>
-
-     * <ul>
-     *
-<code><pre>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-<!-- extra code removed -->
-  <c:set target="#{flash.now}" property="bar" value="barValue" />
-
-  <p>Value of \#{flash.now.bar}, should be barValue.</p>
-
-  <h:outputText value="#{flash.now.bar}" />
-
-</pre></code>
-
-     * </ul>
-     *
-     * </div>
-     *
-     * @param key the key for this entry
-
-     * @param value the value for this entry
-
-     * @since 2.0
-
-     */
-    
-    public abstract void putNow(String key, Object value);
-
-    /**
-     * <p class="changed_added_2_0">Causes a value stored with a
-     * previous call to {@link #putNow}, its EL equivalent, or to the
-     * request <code>Map</code>, to be promoted to the flash so that is
-     * available on the next traversal through the lifecycle on this
-     * session.</p>
-     *
-     * @param key if argument <code>key</code> is the name of an entry
-     * previously stored to the flash on this traversal through the
-     * lifecycle via a call to {@link #putNow}, or to a set to the EL
-     * expression <code>#{flash.now.<i><key></i>}</code>, or to the
-     * request <code>Map</code>, to be promoted to the flash as if a call
-     * to <code>put()</code> or a set to the expression
-     * <code>#{flash.<i><key></i>}</code> was being called.
-     */
-    
-    public abstract void keep(String key);
-
-
-    /**
-     * <p class="changed_added_2_0">Called before the execution of every
-     * lifecycle phase, this method allows implementations to take the
-     * necessary actions to provide the Flash scope contract as it
-     * applies to the request procesing lifecycle. </p>
-     *
-     * @param ctx the <code>FacesContext</code> for this request.
-     */
-    public abstract void doPrePhaseActions(FacesContext ctx);
-
-
-    /**
-     * <p class="changed_added_2_0">Called after the execution of every
-     * lifecycle phase, this method allows implementations to take the
-     * necessary actions to provide the Flash scope contract as it
-     * applies to the request procesing lifecycle. </p>
-     *
-     * @param ctx the <code>FacesContext</code> for this request.
-     */
-    public abstract void doPostPhaseActions(FacesContext ctx);
-    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/PartialResponseWriter.java b/jsf-api/src/main/java/javax/faces/context/PartialResponseWriter.java
deleted file mode 100644
index eca02fd..0000000
--- a/jsf-api/src/main/java/javax/faces/context/PartialResponseWriter.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import java.io.IOException;
-import java.util.Map;
-
-/**
- * <p class="changed_added_2_0"><strong>PartialResponseWriter</strong>
- * decorates an existing <code>ResponseWriter</code> to support the
- * generation of a partial response suitable for Ajax operations.
- * In addition to the markup generation methods inherited from
- * <code>javax.faces.context.ResponseWriter</code>, this class provides
- * methods for constructing the standard partial response elements.</p>
- *
- * @since 2.0
- */
-public class PartialResponseWriter extends ResponseWriterWrapper {
-    // True when we need to close a start tag
-    //
-    private boolean inChanges = false;
-
-    // True when we need to close a before insert tag
-    //
-    private boolean inInsertBefore = false;
-
-    // True when we need to close afer insert tag
-    //
-    private boolean inInsertAfter = false;
-
-    ResponseWriter writer;
-
-    /**
-     * <p class="changed_added_2_0">Reserved ID value to indicate
-     * entire ViewRoot.</p>
-     *
-     * @since 2.0
-     */
-    public static final String RENDER_ALL_MARKER = "javax.faces.ViewRoot";
-
-    /**
-     * <p class="changed_added_2_0">Reserved ID value to indicate
-     * serialized ViewState.</p>
-     *
-     * @since 2.0
-     */
-    public static final String VIEW_STATE_MARKER = "javax.faces.ViewState";
-
-    /**
-     * <p class="changed_added_2_0">Create a <code>PartialResponseWriter</code>.</p>
-     *
-     * @param writer The writer to wrap.
-     * @since 2.0
-     */
-    public PartialResponseWriter(ResponseWriter writer) {
-        this.writer = writer;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the wrapped
-     * {@link ResponseWriter} instance.</p>
-     *
-     * @see ResponseWriterWrapper#getWrapped()
-     * @since 2.0
-     */
-    public ResponseWriter getWrapped() {
-        return writer;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the start of a partial response.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void startDocument() throws IOException {
-        ResponseWriter writer = getWrapped();
-        String encoding = writer.getCharacterEncoding( );
-        if( encoding == null ) {
-            encoding = "utf-8";
-        }
-        writer.write("<?xml version='1.0' encoding='" + encoding + "'?>\n");
-        writer.startElement("partial-response", null);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the end of a partial response.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void endDocument() throws IOException {
-        endChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.endElement("partial-response");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the start of an insert operation
-     * where the contents will be inserted before the specified target node.</p>
-     *
-     * @param targetId ID of the node insertion should occur before
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void startInsertBefore(String targetId)
-            throws IOException {
-        startChangesIfNecessary();
-        inInsertBefore = true;
-        ResponseWriter writer = getWrapped();
-        writer.startElement("insert", null);
-        writer.startElement("before", null);
-        writer.writeAttribute("id", targetId, null);
-        writer.startCDATA();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the start of an insert operation
-     * where the contents will be inserted after the specified target node.</p>
-     *
-     * @param targetId ID of the node insertion should occur after
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void startInsertAfter(String targetId)
-            throws IOException {
-        startChangesIfNecessary();
-        inInsertAfter = true;
-        ResponseWriter writer = getWrapped();
-        writer.startElement("insert", null);
-        writer.startElement("after", null);
-        writer.writeAttribute("id", targetId, null);
-        writer.startCDATA();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the end of an insert operation.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void endInsert() throws IOException {
-        ResponseWriter writer = getWrapped();
-        writer.endCDATA();
-        if (inInsertBefore) {
-            writer.endElement("before");
-            inInsertBefore = false;
-        } else if (inInsertAfter) {
-            writer.endElement("after");
-            inInsertAfter = false;
-        }
-        writer.endElement("insert");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the start of an update operation.</p>
-     *
-     * @param targetId ID of the node to be updated
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void startUpdate(String targetId) throws IOException {
-        startChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.startElement("update", null);
-        writer.writeAttribute("id", targetId, null);
-        writer.startCDATA();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the end of an update operation.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void endUpdate() throws IOException {
-        ResponseWriter writer = getWrapped();
-        writer.endCDATA();
-        writer.endElement("update");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write an attribute update operation.</p>
-     *
-     * @param targetId   ID of the node to be updated
-     * @param attributes Map of attribute name/value pairs to be updated
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void updateAttributes(String targetId, Map<String, String> attributes)
-            throws IOException {
-        startChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.startElement("attributes", null);
-        writer.writeAttribute("id", targetId, null);
-        for (Map.Entry<String, String> entry : attributes.entrySet()) {
-            writer.startElement("attribute", null);
-            writer.writeAttribute("name", entry.getKey(), null);
-            writer.writeAttribute("value", entry.getValue(), null);
-            writer.endElement("attribute");
-        }
-        writer.endElement("attributes");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write a delete operation.</p>
-     *
-     * @param targetId ID of the node to be deleted
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void delete(String targetId) throws IOException {
-        startChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.startElement("delete", null);
-        writer.writeAttribute("id", targetId, null);
-        writer.endElement("delete");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write a redirect operation.</p>
-     *
-     * @param url URL to redirect to
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void redirect(String url) throws IOException {
-        endChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.startElement("redirect", null);
-        writer.writeAttribute("url", url, null);
-        writer.endElement("redirect");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the start of an eval operation.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void startEval() throws IOException {
-        startChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.startElement("eval", null);
-        writer.startCDATA();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the end of an eval operation.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void endEval() throws IOException {
-        ResponseWriter writer = getWrapped();
-        writer.endCDATA();
-        writer.endElement("eval");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the start of an extension operation.</p>
-     *
-     * @param attributes String name/value pairs for extension element attributes
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void startExtension(Map<String, String> attributes) throws IOException {
-        endChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.startElement("extension", null);
-        if (attributes != null && !attributes.isEmpty()) {
-            for (Map.Entry<String, String> entry : attributes.entrySet()) {
-                writer.writeAttribute(entry.getKey(), entry.getValue(), null);
-            }
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the end of an extension operation.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void endExtension() throws IOException {
-        ResponseWriter writer = getWrapped();
-        writer.endElement("extension");
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the start of an error.</p>
-     *
-     * @param errorName Descriptive string for the error
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void startError(String errorName) throws IOException {
-        endChangesIfNecessary();
-        ResponseWriter writer = getWrapped();
-        writer.startElement("error", null);
-        writer.startElement("error-name", null);
-        writer.write(errorName);
-        writer.endElement("error-name");
-        writer.startElement("error-message", null);
-        writer.startCDATA();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Write the end of an error.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     * @since 2.0
-     */
-    public void endError() throws IOException {
-        ResponseWriter writer = getWrapped();
-        writer.endCDATA();
-        writer.endElement("error-message");
-        writer.endElement("error");
-    }
-
-    private void startChangesIfNecessary() throws IOException {
-        if (!inChanges) {
-            ResponseWriter writer = getWrapped();
-            writer.startElement("changes", null);
-            inChanges = true;
-        }
-    }
-
-    private void endChangesIfNecessary() throws IOException {
-        if (inChanges) {
-            ResponseWriter writer = getWrapped();
-            writer.endElement("changes");
-            inChanges = false;
-        }
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/PartialViewContext.java b/jsf-api/src/main/java/javax/faces/context/PartialViewContext.java
deleted file mode 100644
index fd2abb3..0000000
--- a/jsf-api/src/main/java/javax/faces/context/PartialViewContext.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import java.util.Collection;
-
-import javax.faces.event.PhaseId;
-
-/**
- * <p><strong class="changed_added_2_0">PartialViewContext</strong>
- * contains methods and properties that pertain to partial request
- * processing and partial response rendering on a view.</p> 
- *
- * <p>The {@link PartialViewContext} instance is used to determine if
- * the current request indicates the requirement to perform 
- * <code>partial processing</code> and/or <code>partial rendering</code>.
- * Partial processing is the processing of selected components 
- * through the <code>execute</code> portion of the request processing
- * lifecycle.  Partial rendering is the rendering of specified
- * components in the <code>Render Response Phase</code> of the
- * request processing lifecycle.</p>
- * 
- */
-
-public abstract class PartialViewContext {
-
-
-    /**
-     * <p class="changed_added_2_0">
-     * The request parameter name whose request parameter value 
-     * is a <code>Collection</code> of client identifiers identifying the
-     * components that must be processed during the 
-     * <em>Render Response</em> phase of the request processing 
-     * lifecycle.</p>
-     *
-     * @since 2.0
-     */
-    public static final String PARTIAL_RENDER_PARAM_NAME =
-          "javax.faces.partial.render";
-
-
-    /**
-     * <p class="changed_added_2_0">
-     * The request parameter name whose request parameter value 
-     * is a <code>Collection</code> of client identifiers identifying the
-     * components that must be processed during the 
-     * <em>Apply Request Values</em>, <em>Process Validations</em>,
-     * and <em>Update Model Values</em> phases of the request 
-     * processing lifecycle.</p>
-     *
-     * @since 2.0
-     */
-    public static final String PARTIAL_EXECUTE_PARAM_NAME =
-          "javax.faces.partial.execute";
-
-    /**
-     * <p class="changed_added_2_0">
-     * The value that when used with {@link #PARTIAL_EXECUTE_PARAM_NAME}
-     * or {@link #PARTIAL_RENDER_PARAM_NAME} indicates these phases
-     * must be skipped.</p>
-     *
-     * @since 2.0
-     */
-    public static final String ALL_PARTIAL_PHASE_CLIENT_IDS = "@all";
-
-
-    // -------------------------------------------------------------- Properties
-    
-    /**
-     * <p class="changed_added_2_0">Return a
-     * <code>Collection</code> of client identifiers from the current request
-     * with the request parameter name {@link #PARTIAL_EXECUTE_PARAM_NAME}.
-     * If there is no such request parameter, return an empty <code>Collection</code>.
-     * These client identifiers are used to identify components that
-     * will be processed during the <code>execute</code> phase of the
-     * request processing lifecycle.  The returned <code>Collection</code> is
-     * mutable.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract Collection<String> getExecuteIds();
-    
-    /**
-     * <p class="changed_added_2_0">Return a
-     * <code>Collection</code> of client identifiers from the current request
-     * with the request parameter name {@link #PARTIAL_RENDER_PARAM_NAME}.
-     * If there is no such request parameter, return an empty <code>Collection</code>.
-     * These client identifiers are used to identify components that
-     * will be processed during the <code>render</code> phase of the
-     * request processing lifecycle.  The returned <code>Collection</code> is 
-     * mutable.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract Collection<String> getRenderIds();
-
-    /**
-     * <p class="changed_added_2_0">Return the {@link ResponseWriter}
-     * to which components should
-     * direct their output for partial view rendering.  Within a given
-     * response, components can use either the ResponseStream or the
-     * ResponseWriter, but not both.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract PartialResponseWriter getPartialResponseWriter();
-
-    /**
-     * <p class="changed_added_2_0">
-     * Return <code>true</code> if the request header 
-     * <code>Faces-Request</code> is present with the value
-     * <code>partial/ajax</code>. 
-     * Otherwise, return <code>false</code>.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract boolean isAjaxRequest();
-
-    /**
-     * <p class="changed_added_2_0">
-     * Return <code>true</code> {@link #isAjaxRequest} returns
-     * <code>true</code> or if the request header
-     * <code>Faces-Request</code> is present with the value
-     * <code>partial/process</code>. 
-     * Otherwise, return <code>false</code>.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract boolean isPartialRequest();
-
-    /**
-     * <p class="changed_added_2_0">
-     * Return <code>true</code> if {@link #isAjaxRequest}
-     * returns <code>true</code> and {@link #PARTIAL_EXECUTE_PARAM_NAME}
-     * is present in the current request with the value
-     * {@link #ALL_PARTIAL_PHASE_CLIENT_IDS}.</p>
-     * Otherwise, return <code>false</code>.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract boolean isExecuteAll();
-
-    /**
-     * <p class="changed_added_2_0">
-     * Return <code>true</code> if {@link #isAjaxRequest}
-     * returns <code>true</code> and {@link #PARTIAL_RENDER_PARAM_NAME}
-     * is present in the current request with the value
-     * {@link #ALL_PARTIAL_PHASE_CLIENT_IDS}.</p>
-     * Otherwise, return <code>false</code>.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract boolean isRenderAll();
-
-    /**
-     * <p class="changed_added_2_0">
-     * Indicate the entire view must be rendered if
-     * <code>renderAll</code> is <code>true</code>.</p>
-     *
-     * @param renderAll the value <code>true</code> indicates
-     * the entire view must be rendered.
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-    public abstract void setRenderAll(boolean renderAll);
-    
-    /**
-     * <p class="changed_added_2_0">
-     * Dynamically indicate that this is a partial request.</p>
-     *
-     * @param isPartialRequest the value <code>true</code> indicates
-     * this is a partial request.
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     *
-     * @since 2.0
-     */
-
-    public abstract void setPartialRequest(boolean isPartialRequest);
-
-    /**
-     * <p><span class="changed_added_2.0">Release</span> any
-     * resources associated with this <code>PartialViewContext</code>
-     * instance.</p>
-     *
-     * @throws IllegalStateException if this method is called after
-     *  this instance has been released
-     */
-    public abstract void release();
-
-    /**
-     * <p class="changed_added_2_0">Perform lifecycle processing on 
-     * components during the indicated <code>phaseId</code>.  Only 
-     * those components with identifiers existing in the 
-     * <code>Collection</code> returned from {@link #getExecuteIds} 
-     * and {@link #getRenderIds} will be processed.</p>  
-     *
-     * @param phaseId the {@link javax.faces.event.PhaseId} that indicates
-     * the lifecycle phase the components will be processed in. 
-     */ 
-    public abstract void processPartial(PhaseId phaseId);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/PartialViewContextFactory.java b/jsf-api/src/main/java/javax/faces/context/PartialViewContextFactory.java
deleted file mode 100644
index 04e5649..0000000
--- a/jsf-api/src/main/java/javax/faces/context/PartialViewContextFactory.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import javax.faces.FacesWrapper;
-
-/**
- * <p class="changed_modified_2_0">PartialViewContextFactory is a
- * factory object that creates (if needed) and returns new {@link
- * PartialViewContext} instances.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>There must be one <code>PartialViewContextFactory</code> instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- * <pre>
- *   PartialViewContextFactory factory = (PartialViewContextFactory)
- *    FactoryFinder.getFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY);
- * </pre>
- *
- * </div>
- *
- * @since 2.0
- */
-public abstract class PartialViewContextFactory implements FacesWrapper<PartialViewContextFactory> {
-
-
-    // ----------------------------------------------- Methods from FacesWrapper
-
-
-    /**
-     * @see javax.faces.FacesWrapper#getWrapped()
-     */
-    public PartialViewContextFactory getWrapped() {
-
-        return null;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p><span class="changed_modified_2_0">Create</span> (if needed)
-     * and return a {@link PartialViewContext} instance that is initialized
-     * using the current {@link FacesContext} instance.</p>
-     *
-     * @param context the {@link FacesContext} for the current request. 
-     */
-    public abstract PartialViewContext getPartialViewContext(FacesContext context);
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/PartialViewContextWrapper.java b/jsf-api/src/main/java/javax/faces/context/PartialViewContextWrapper.java
deleted file mode 100644
index 0da3c5c..0000000
--- a/jsf-api/src/main/java/javax/faces/context/PartialViewContextWrapper.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import java.util.Collection;
-
-import javax.faces.FacesWrapper;
-import javax.faces.event.PhaseId;
-
-/**
- * <p>Provides a simple implementation of {@link PartialViewContext} that can
- * be subclassed by developers wishing to provide specialized behavior
- * to an existing {@link PartialViewContext} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link ExternalContext} instance.</p>
- *
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance being wrapping.</p>
- *
- * @since 2.0
- */
-public abstract class PartialViewContextWrapper extends PartialViewContext implements FacesWrapper<PartialViewContext> {
-
-
-    // ----------------------------------------------- Methods from FacesWrapper
-
-
-    /**
-     * @return the wrapped {@link PartialViewContext} instance
-     * @see javax.faces.FacesWrapper#getWrapped()
-     */
-    public abstract PartialViewContext getWrapped();
-
-
-    // ----------------------------------------- Methods from PartialViewContext
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#getExecuteIds()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#getExecuteIds()
-     */
-    public Collection<String> getExecuteIds() {
-        return getWrapped().getExecuteIds();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#getRenderIds()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#getRenderIds()
-     */
-    public Collection<String> getRenderIds() {
-        return getWrapped().getRenderIds();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#getPartialResponseWriter()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#getPartialResponseWriter()
-     */
-    public PartialResponseWriter getPartialResponseWriter() {
-        return getWrapped().getPartialResponseWriter();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#isAjaxRequest()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see javax.faces.context.PartialViewContext#isAjaxRequest()
-     */
-    public boolean isAjaxRequest() {
-        return getWrapped().isAjaxRequest();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#isPartialRequest()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#isPartialRequest()
-     */
-    public boolean isPartialRequest() {
-        return getWrapped().isPartialRequest();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#isExecuteAll()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#isExecuteAll()
-     */
-    public boolean isExecuteAll() {
-        return getWrapped().isExecuteAll();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#isRenderAll()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#isRenderAll()
-     */
-    public boolean isRenderAll() {
-        return getWrapped().isRenderAll();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#setRenderAll(boolean)}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#setRenderAll(boolean)
-     */
-    public void setRenderAll(boolean renderAll) {
-        getWrapped().setRenderAll(renderAll);
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#release()}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#release()
-     */
-    public void release() {
-        getWrapped().release();
-    }
-
-     /**
-     * <p>The default behavior of this method is to
-     * call {@link PartialViewContext#processPartial(PhaseId)}
-     * on the wrapped {@link PartialViewContext} object.</p>
-     *
-     * @see PartialViewContext#processPartial(PhaseId)
-     */
-    public void processPartial(PhaseId phaseId) {
-        getWrapped().processPartial(phaseId);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/ResponseStream.java b/jsf-api/src/main/java/javax/faces/context/ResponseStream.java
deleted file mode 100644
index e73d451..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ResponseStream.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-
-import java.io.OutputStream;
-
-
-/**
- * <p><strong>ResponseStream</strong> is an interface describing an adapter
- * to an underlying output mechanism for binary output.</p>
- */
-
-public abstract class ResponseStream extends OutputStream {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/ResponseWriter.java b/jsf-api/src/main/java/javax/faces/context/ResponseWriter.java
deleted file mode 100644
index f55f27e..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ResponseWriter.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-
-import javax.faces.component.UIComponent;
-import java.io.IOException;
-import java.io.Writer;
-
-
-/**
- * <p><strong>ResponseWriter</strong> is an abstract class describing an
- * adapter to an underlying output mechanism for character-based output.
- * In addition to the low-level <code>write()</code> methods inherited from
- * <code>java.io.Writer</code>, this class provides utility methods
- * that are useful in producing elements and attributes for markup languages
- * like HTML and XML.</p>
- */
-
-public abstract class ResponseWriter extends Writer {
-
-
-    /**
-     * <p>Return the content type (such as "text/html") for this {@link
-     * ResponseWriter}.  Note: this must not include the "charset="
-     * suffix.</p>
-     */
-    public abstract String getContentType();
-
-
-    /**
-     * <p>Return the character encoding (such as "ISO-8859-1") for this
-     * {@link ResponseWriter}.  Please see <a
-     * href="http://www.iana.org/assignments/character-sets">the
-     * IANA</a> for a list of character encodings.</p>
-     */
-    public abstract String getCharacterEncoding();
-
-
-    /**
-     * <p>Flush any ouput buffered by the output method to the
-     * underlying Writer or OutputStream.  This method
-     * will not flush the underlying Writer or OutputStream;  it
-     * simply clears any values buffered by this {@link ResponseWriter}.</p>
-     */
-    public abstract void flush() throws IOException;
-
-
-    /**
-     * <p>Write whatever text should begin a response.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    public abstract void startDocument() throws IOException;
-
-
-    /**
-     * <p>Write whatever text should end a response.  If there is an open
-     * element that has been created by a call to <code>startElement()</code>,
-     * that element will be closed first.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    public abstract void endDocument() throws IOException;
-
-
-    /**
-     * <p>Write the start of an element, up to and including the
-     * element name.  Once this method has been called, clients can
-     * call the <code>writeAttribute()</code> or
-     * <code>writeURIAttribute()</code> methods to add attributes and
-     * corresponding values.  The starting element will be closed
-     * (that is, the trailing '>' character added)
-     * on any subsequent call to <code>startElement()</code>,
-     * <code>writeComment()</code>,
-     * <code>writeText()</code>, <code>endElement()</code>,
-     * <code>endDocument()</code>, <code>close()</code>,
-     * <code>flush()</code>, or <code>write()</code>.</p>
-     *
-     * @param name      Name of the element to be started
-     * @param component The {@link UIComponent} (if any) to which
-     *                  this element corresponds
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>name</code>
-     *                              is <code>null</code>
-     */
-    public abstract void startElement(String name, UIComponent component)
-            throws IOException;
-
-
-    /**
-     * <p>Write the end of an element, after closing any open element
-     * created by a call to <code>startElement()</code>.  Elements must be
-     * closed in the inverse order from which they were opened; it is an
-     * error to do otherwise.</p>
-     *
-     * @param name Name of the element to be ended
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>name</code>
-     *                              is <code>null</code>
-     */
-    public abstract void endElement(String name) throws IOException;
-
-
-    /**
-     * <p>Write an attribute name and corresponding value, after converting
-     * that text to a String (if necessary), and after performing any escaping
-     * appropriate for the markup language being rendered.
-     * This method may only be called after a call to
-     * <code>startElement()</code>, and before the opened element has been
-     * closed.</p>
-     *
-     * @param name     Attribute name to be added
-     * @param value    Attribute value to be added
-     * @param property Name of the property or attribute (if any) of the
-     *                 {@link UIComponent} associated with the containing element,
-     *                 to which this generated attribute corresponds
-     * @throws IllegalStateException if this method is called when there
-     *                               is no currently open element
-     * @throws IOException           if an input/output error occurs
-     * @throws NullPointerException  if <code>name</code> is
-     *                               <code>null</code>
-     */
-    public abstract void writeAttribute(String name, Object value,
-                                        String property)
-            throws IOException;
-
-
-    /**
-     * <p>Write a URI attribute name and corresponding value, after converting
-     * that text to a String (if necessary), and after performing any encoding
-     * appropriate to the markup language being rendered.
-     * This method may only be called after a call to
-     * <code>startElement()</code>, and before the opened element has been
-     * closed.</p>
-     *
-     * @param name     Attribute name to be added
-     * @param value    Attribute value to be added
-     * @param property Name of the property or attribute (if any) of the
-     *                 {@link UIComponent} associated with the containing element,
-     *                 to which this generated attribute corresponds
-     * @throws IllegalStateException if this method is called when there
-     *                               is no currently open element
-     * @throws IOException           if an input/output error occurs
-     * @throws NullPointerException  if <code>name</code> is
-     *                               <code>null</code>
-     */
-    public abstract void writeURIAttribute(String name, Object value,
-                                           String property)
-            throws IOException;
-
-    /**
-     * <p class="changed_added_2_0">Open an XML <code>CDATA</code>
-     * block.  Note that XML does not allow nested <code>CDATA</code>
-     * blocks, though this method does not enforce that constraint.  The
-     * default implementation of this method takes no action when
-     * invoked.</p>
-     * @throws IOException if input/output error occures
-     */
-    public void startCDATA() throws IOException {
-
-    }
-
-
-    /**
-
-     * <p class="changed_added_2_0">Close an XML <code>CDATA</code>
-     * block.  The default implementation of this method takes no action
-     * when invoked.</p>
-
-     * @throws IOException if input/output error occures
-     */
-    public void endCDATA() throws IOException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * <p>Write a comment containing the specified text, after converting
-     * that text to a String (if necessary), and after performing any escaping
-     * appropriate for the markup language being rendered.  If there is
-     * an open element that has been created by a call to
-     * <code>startElement()</code>, that element will be closed first.</p>
-     *
-     * @param comment Text content of the comment
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>comment</code>
-     *                              is <code>null</code>
-     */
-    public abstract void writeComment(Object comment) throws IOException;
-
-
-    /**
-     * <p>Write an object, after converting it to a String (if necessary),
-     * and after performing any escaping appropriate for the markup language
-     * being rendered.  If there is an open element that has been created
-     * by a call to <code>startElement()</code>, that element will be closed
-     * first.</p>
-     *
-     * @param text     Text to be written
-     * @param property Name of the property or attribute (if any) of the
-     *                 {@link UIComponent} associated with the containing element,
-     *                 to which this generated text corresponds
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>text</code>
-     *                              is <code>null</code>
-     */
-    public abstract void writeText(Object text, String property)
-            throws IOException;
-
-    /**
-     * <p>Write an object, after converting it to a String (if
-     * necessary), and after performing any escaping appropriate for the
-     * markup language being rendered.  This method is equivalent to
-     * {@link #writeText(java.lang.Object,java.lang.String)} but adds a
-     * <code>component</code> property to allow custom
-     * <code>ResponseWriter</code> implementations to associate a
-     * component with an arbitrary portion of text.</p>
-     * <p/>
-     * <p>The default implementation simply ignores the
-     * <code>component</code> argument and calls through to {@link
-     * #writeText(java.lang.Object,java.lang.String)}</p>
-     *
-     * @param text      Text to be written
-     * @param component The {@link UIComponent} (if any) to which
-     *                  this element corresponds
-     * @param property  Name of the property or attribute (if any) of the
-     *                  {@link UIComponent} associated with the containing element,
-     *                  to which this generated text corresponds
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>text</code>
-     *                              is <code>null</code>
-     * @since 1.2
-     */
-    public void writeText(Object text, UIComponent component, String property)
-            throws IOException {
-        writeText(text, property);
-    }
-
-
-    /**
-     * <p>Write text from a character array, after any performing any
-     * escaping appropriate for the markup language being rendered.
-     * If there is an open element that has been created by a call to
-     * <code>startElement()</code>, that element will be closed first.</p>
-     *
-     * @param text Text to be written
-     * @param off  Starting offset (zero-relative)
-     * @param len  Number of characters to be written
-     * @throws IndexOutOfBoundsException if the calculated starting or
-     *                                   ending position is outside the bounds of the character array
-     * @throws IOException               if an input/output error occurs
-     * @throws NullPointerException      if <code>text</code>
-     *                                   is <code>null</code>
-     */
-    public abstract void writeText(char text[], int off, int len)
-            throws IOException;
-
-
-    /**
-     * <p>Create and return a new instance of this {@link ResponseWriter},
-     * using the specified <code>Writer</code> as the output destination.</p>
-     *
-     * @param writer The <code>Writer</code> that is the output destination
-     */
-    public abstract ResponseWriter cloneWithWriter(Writer writer);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/ResponseWriterWrapper.java b/jsf-api/src/main/java/javax/faces/context/ResponseWriterWrapper.java
deleted file mode 100644
index 4700f8a..0000000
--- a/jsf-api/src/main/java/javax/faces/context/ResponseWriterWrapper.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.context;
-
-import javax.faces.FacesWrapper;
-import javax.faces.component.UIComponent;
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * <p><span class="changed_modified_2_0">Provides</span> a simple implementation
- * of {@link ResponseWriter} that
- * can be subclassed by developers wishing to provide specialized
- * behavior to an existing {@link ResponseWriter} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link ResponseWriter}.</p>
- * <p/>
- * <p>Usage: extend this class and override {@link #getWrapped} to
- * return the instance we are wrapping.</p>
- *
- * @since 1.2
- */
-public abstract class ResponseWriterWrapper extends ResponseWriter implements FacesWrapper<ResponseWriter> {
-
-
-    /**
-     * <p class="changed_modified_2_0">Return the instance that we are wrapping.
-     * As of version 2, this method is public.</p>
-     */
-
-    public abstract ResponseWriter getWrapped();
-
-    // -------------------------- Methods from javax.faces.contxt.ResponseWriter
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#getContentType()}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#getContentType()
-     * @since 1.2
-     */
-    public String getContentType() {
-
-        return getWrapped().getContentType();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#getCharacterEncoding()}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#getCharacterEncoding()
-     * @since 1.2
-     */
-    public String getCharacterEncoding() {
-
-        return getWrapped().getCharacterEncoding();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#flush()}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#flush()
-     * @since 1.2
-     */
-    public void flush() throws IOException {
-
-        getWrapped().flush();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#startDocument()}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#startDocument()
-     * @since 1.2
-     */
-    public void startDocument() throws IOException {
-
-        getWrapped().startDocument();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#endDocument()}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#endDocument()
-     * @since 1.2
-     */
-    public void endDocument() throws IOException {
-
-        getWrapped().endDocument();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#startElement(String, javax.faces.component.UIComponent)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#startElement(String, javax.faces.component.UIComponent)
-     * @since 1.2
-     */
-    public void startElement(String name, UIComponent component)
-            throws IOException {
-
-        getWrapped().startElement(name, component);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResponseWriter#startCDATA} on the wrapped
-     * {@link ResponseWriter} object.</p>
-     * @since 2.0
-     * @throws IOException on any read/write error
-     */
-    public void startCDATA() throws IOException {
-        getWrapped().startCDATA();
-    }
-
-    /**
-     * <p class="changed_added_2_0">The default behavior of this method
-     * is to call {@link ResponseWriter#endCDATA} on the wrapped
-     * {@link ResponseWriter} object.</p>
-     * @since 2.0
-     * @throws IOException on any read/write error
-     */
-    public void endCDATA() throws IOException {
-        getWrapped().endCDATA();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#endElement(String)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#endElement(String)
-     * @since 1.2
-     * @throws IOException on any read/write error
-     */
-    public void endElement(String name) throws IOException {
-
-        getWrapped().endElement(name);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#writeAttribute(String, Object, String)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#writeAttribute(String, Object, String)
-     * @since 1.2
-     */
-    public void writeAttribute(String name, Object value, String property)
-            throws IOException {
-
-        getWrapped().writeAttribute(name, value, property);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#writeURIAttribute(String, Object, String)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#writeURIAttribute(String, Object, String)
-     * @since 1.2
-     */
-    public void writeURIAttribute(String name, Object value, String property)
-            throws IOException {
-
-        getWrapped().writeURIAttribute(name, value, property);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#writeComment(Object)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#writeComment(Object)
-     * @since 1.2
-     */
-    public void writeComment(Object comment) throws IOException {
-
-        getWrapped().writeComment(comment);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#writeText(Object, String)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#writeText(Object, String)
-     * @since 1.2
-     */
-    public void writeText(Object text, String property) throws IOException {
-
-        getWrapped().writeText(text, property);
-
-    }
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#writeText(Object, UIComponent, String)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#writeText(Object, String)
-     * @since 1.2
-     */
-
-    public void writeText(Object text, UIComponent component, String property)
-            throws IOException {
-        getWrapped().writeText(text, component, property);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#writeText(char[], int, int)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#writeText(char[], int, int)
-     * @since 1.2
-     */
-    public void writeText(char[] text, int off, int len) throws IOException {
-
-        getWrapped().writeText(text, off, len);
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#cloneWithWriter(java.io.Writer)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#cloneWithWriter(java.io.Writer)
-     * @since 1.2
-     */
-    public ResponseWriter cloneWithWriter(Writer writer) {
-
-        return getWrapped().cloneWithWriter(writer);
-
-    }
-
-
-    // --------------------------------------------- Methods from java.io.Writer
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#close()}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#close()
-     * @since 1.2
-     */
-    public void close() throws IOException {
-
-        getWrapped().close();
-
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link ResponseWriter#write(char[], int, int)}
-     * on the wrapped {@link ResponseWriter} object.</p>
-     *
-     * @see ResponseWriter#write(char[], int, int)
-     * @since 1.2
-     */
-    public void write(char[] cbuf, int off, int len) throws IOException {
-
-        getWrapped().write(cbuf, off, len);
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/context/package.html b/jsf-api/src/main/java/javax/faces/context/package.html
deleted file mode 100644
index 0f600f0..0000000
--- a/jsf-api/src/main/java/javax/faces/context/package.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.context"</title>
-</head>
-<body bgcolor="white">
-<p><span class="changed_modified_2_0">Classes</span> and interfaces
-defining per-request state information.  The main class in this package
-is {@link javax.faces.context.FacesContext}, which is the access point
-for all per-request information, as well as the gateway to several other
-helper classes.</p>
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/convert/BigDecimalConverter.java b/jsf-api/src/main/java/javax/faces/convert/BigDecimalConverter.java
deleted file mode 100644
index 34d57c3..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/BigDecimalConverter.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import java.math.BigDecimal;
-
-
-/**
- * <p>{@link Converter} implementation for
- * <code>java.math.BigDecimal</code> values.</p>
- */
-
-public class BigDecimalConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.BigDecimal";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>BigDecimal</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String DECIMAL_ID =
-         "javax.faces.converter.BigDecimalConverter.DECIMAL";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>BigDecimal</code> value to
-     * <code>String</code> fails.  The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (new BigDecimal(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           DECIMAL_ID,
-                                           value,
-                                           "198.23",
-                                           MessageFactory.getLabel(context,
-                                                                   component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-
-
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (value.toString());
-        } catch (Exception e) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           STRING_ID,
-                                           value,
-                                           MessageFactory.getLabel(context,
-                                                                   component)),
-                                           e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/BigIntegerConverter.java b/jsf-api/src/main/java/javax/faces/convert/BigIntegerConverter.java
deleted file mode 100644
index 91b7fe6..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/BigIntegerConverter.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import java.math.BigInteger;
-
-
-/**
- * <p>{@link Converter} implementation for
- * <code>java.math.BigInteger</code> values.</p>
- */
-
-public class BigIntegerConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.BigInteger";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>BigInteger</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String BIGINTEGER_ID =
-         "javax.faces.converter.BigIntegerConverter.BIGINTEGER";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>BigInteger</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (new BigInteger(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           BIGINTEGER_ID,
-                                           value,
-                                           "9876",
-                                           MessageFactory.getLabel(context,
-                                                                   component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (value.toString());
-        } catch (Exception e) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           STRING_ID,
-                                           value,
-                                           MessageFactory.getLabel(context,
-                                                                   component)),
-                                           e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/BooleanConverter.java b/jsf-api/src/main/java/javax/faces/convert/BooleanConverter.java
deleted file mode 100644
index 9b919ce..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/BooleanConverter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Boolean</code>
- * (and boolean primitive) values.</p>
- */
-
-public class BooleanConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Boolean";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Boolean</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String BOOLEAN_ID =
-         "javax.faces.converter.BooleanConverter.BOOLEAN";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Boolean</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        // Let them know that the value being converted is not specifically
-        // "true" or "false".
-        try {
-            return (Boolean.valueOf(value));
-        } catch (Exception e) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           BOOLEAN_ID,
-                                           value,
-                                           MessageFactory.getLabel(context,
-                                                                   component)),
-                                           e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        try {
-            return value.toString();
-        } catch (Exception e) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           STRING_ID,
-                                           value,
-                                           MessageFactory.getLabel(context,
-                                                                   component)),
-                                           e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/ByteConverter.java b/jsf-api/src/main/java/javax/faces/convert/ByteConverter.java
deleted file mode 100644
index 208b6a6..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/ByteConverter.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Byte</code>
- * (and byte primitive) values.</p>
- */
-
-public class ByteConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Byte";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Byte</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String BYTE_ID =
-         "javax.faces.converter.ByteConverter.BYTE";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Byte</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (Byte.valueOf(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           BYTE_ID,
-                                           value,
-                                           "254",
-                                           MessageFactory.getLabel(context,
-                                                                   component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (Byte.toString(((Byte) value).byteValue()));
-        } catch (Exception e) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           STRING_ID,
-                                           value,
-                                           MessageFactory.getLabel(context,
-                                                                   component)),
-                                           e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/CharacterConverter.java b/jsf-api/src/main/java/javax/faces/convert/CharacterConverter.java
deleted file mode 100644
index ff6d89e..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/CharacterConverter.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Character</code>
- * (and char primitive) values.</p>
- */
-
-public class CharacterConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Character";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Character</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String CHARACTER_ID =
-         "javax.faces.converter.CharacterConverter.CHARACTER";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Character</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (value.charAt(0));
-        } catch (Exception e) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                                           CHARACTER_ID,
-                                           value,
-                                           MessageFactory.getLabel(context,
-                                                                   component)),
-                                           e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        try {
-            return (value.toString());
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/Converter.java b/jsf-api/src/main/java/javax/faces/convert/Converter.java
deleted file mode 100644
index f2df8d5..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/Converter.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><strong class="changed_modified_2_0">Converter</strong> is an
- * interface describing a Java class that can perform Object-to-String
- * and String-to-Object conversions between model data objects and a
- * String representation of those objects that is suitable for
- * rendering.</p>
-
- * <p/>
- * <p>{@link Converter} implementations must have a zero-arguments public
- * constructor.  In addition, if the {@link Converter} class wishes to have
- * configuration property values saved and restored with the component tree,
- * the implementation must also implement {@link StateHolder}.</p>
- * <p/>
- * <p>Starting with version 1.2 of the specification, an exception to the above
- * zero-arguments constructor requirement has been introduced.  If a converter has
- * a single argument constructor that takes a <code>Class</code> instance and
- * the <code>Class</code> of the data to be converted is
- * known at converter instantiation time, this constructor
- * must be used to instantiate the converter instead of the zero-argument
- * version.  This enables the per-class conversion
- * of Java enumerated types.</p>
- * <p/>
- * <p>If any <code>Converter</code> implementation requires a
- * <code>java.util.Locale</code> to perform its job, it must obtain that
- * <code>Locale</code> from the {@link javax.faces.component.UIViewRoot}
- * of the current {@link FacesContext}, unless the
- * <code>Converter</code> maintains its own <code>Locale</code> as part
- * of its state.</p>
- *
- * <p class="changed_added_2_0">If the class implementing
- * <code>Converter</code> has a {@link
- * javax.faces.application.ResourceDependency} annotation, the action
- * described in <code>ResourceDependency</code> must be taken when
- * {@link javax.faces.component.ValueHolder#setConverter} is called.
- * If the class implementing <code>Converter</code> has a {@link
- * javax.faces.application.ResourceDependencies} annotation, the
- * action described in <code>ResourceDependencies</code> must be taken 
- * when {@link javax.faces.component.ValueHolder#setConverter} is called.</p>
- */
-
-public interface Converter {
-
-
-    /**
-     * <p>Convert the specified string value, which is associated with
-     * the specified {@link UIComponent}, into a model data object that
-     * is appropriate for being stored during the <em>Apply Request
-     * Values</em> phase of the request processing lifecycle.</p>
-     *
-     * @param context   {@link FacesContext} for the request being processed
-     * @param component {@link UIComponent} with which this model object
-     *                  value is associated
-     * @param value     String value to be converted (may be <code>null</code>)
-     * @return <code>null</code> if the value to convert is <code>null</code>,
-     *         otherwise the result of the conversion
-     * @throws ConverterException   if conversion cannot be successfully
-     *                              performed
-     * @throws NullPointerException if <code>context</code> or
-     *                              <code>component</code> is <code>null</code>
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value);
-
-
-    /**
-     * <p>Convert the specified model object value, which is associated with
-     * the specified {@link UIComponent}, into a String that is suitable
-     * for being included in the response generated during the
-     * <em>Render Response</em> phase of the request processing
-     * lifeycle.</p>
-     *
-     * @param context   {@link FacesContext} for the request being processed
-     * @param component {@link UIComponent} with which this model object
-     *                  value is associated
-     * @param value     Model object value to be converted
-     *                  (may be <code>null</code>)
-     * @return a zero-length String if value is <code>null</code>,
-     *         otherwise the result of the conversion
-     * @throws ConverterException   if conversion cannot be successfully
-     *                              performed
-     * @throws NullPointerException if <code>context</code> or
-     *                              <code>component</code> is <code>null</code>
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/ConverterException.java b/jsf-api/src/main/java/javax/faces/convert/ConverterException.java
deleted file mode 100644
index 907c571..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/ConverterException.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-
-
-/**
- * <p><strong>ConverterException</strong> is an exception thrown by the
- * <code>getAsObject()</code> or <code>getAsText()</code> method of a
- * {@link Converter}, to indicate that the requested conversion cannot
- * be performed.</p>
- */
-
-public class ConverterException extends FacesException {
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public ConverterException() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public ConverterException(String message) {
-
-        super(message);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.  The detail
-     * message will be set to <code>(cause == null ? null :
-     * cause.toString()</code>
-     *
-     * @param cause The root cause for this exception
-     */
-    public ConverterException(Throwable cause) {
-
-        super(cause);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause   The root cause for this exception
-     */
-    public ConverterException(String message, Throwable cause) {
-
-        super(message, cause);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public ConverterException(FacesMessage message) {
-
-        super(message.getSummary());
-        this.facesMessage = message;
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause   The root cause for this exception
-     */
-    public ConverterException(FacesMessage message, Throwable cause) {
-
-        super(message.getSummary(), cause);
-        this.facesMessage = message;
-
-    }
-
-    /**
-     * <p>Returns the FacesMessage associated with this exception; this
-     * will only be available if the converter that thew this exception
-     * instance placed it there.
-     */
-    public FacesMessage getFacesMessage() {
-        return facesMessage;
-    }
-
-    private FacesMessage facesMessage;
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/DateTimeConverter.java b/jsf-api/src/main/java/javax/faces/convert/DateTimeConverter.java
deleted file mode 100644
index c1f5c4b..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/DateTimeConverter.java
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.PartialStateHolder;
-import javax.faces.context.FacesContext;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.util.Date</code>
- * values.</p>
- * <p/>
- * <p>The <code>getAsObject()</code> method parses a String into a
- * <code>java.util.Date</code>, according to the following algorithm:</p>
- * <ul>
- * <li>If the specified String is null, return
- * a <code>null</code>.  Otherwise, trim leading and trailing
- * whitespace before proceeding.</li>
- * <li>If the specified String - after trimming - has a zero length,
- * return <code>null</code>.</li>
- * <li>If the <code>locale</code> property is not null,
- * use that <code>Locale</code> for managing parsing.  Otherwise, use the
- * <code>Locale</code> from the <code>UIViewRoot</code>.</li>
- * <li>If a <code>pattern</code> has been specified, its syntax must conform
- * the rules specified by <code>java.text.SimpleDateFormat</code>.  Such
- * a pattern will be used to parse, and the <code>type</code>,
- * <code>dateStyle</code>, and <code>timeStyle</code> properties
- * will be ignored.</li>
- * <li>If a <code>pattern</code> has not been specified, parsing will be based
- * on the <code>type</code> property, which expects a date value, a time
- * value, or both.  Any date and time values included will be parsed in
- * accordance to the styles specified by <code>dateStyle</code> and
- * <code>timeStyle</code>, respectively.</li>
- * <li>If a <code>timezone</code> has been specified, it must be passed
- * to the underlying <code>DateFormat</code> instance.  Otherwise
- * the "GMT" timezone is used.</li>
- * <li>In all cases, parsing must be non-lenient; the given string must
- * strictly adhere to the parsing format.</li>
- * </ul>
- * <p/>
- * <p>The <code>getAsString()</code> method expects a value of type
- * <code>java.util.Date</code> (or a subclass), and creates a formatted
- * String according to the following algorithm:</p>
- * <ul>
- * <li>If the specified value is null, return a zero-length String.</li>
- * <li>If the specified value is a String, return it unmodified.</li>
- * <li>If the <code>locale</code> property is not null,
- * use that <code>Locale</code> for managing formatting.  Otherwise, use the
- * <code>Locale</code> from the <code>UIViewRoot</code>.</li>
- * <li>If a <code>timezone</code> has been specified, it must be passed
- * to the underlying <code>DateFormat</code> instance.  Otherwise
- * the "GMT" timezone is used.</li>
- * <li>If a <code>pattern</code> has been specified, its syntax must conform
- * the rules specified by <code>java.text.SimpleDateFormat</code>.  Such
- * a pattern will be used to format, and the <code>type</code>,
- * <code>dateStyle</code>, and <code>timeStyle</code> properties
- * will be ignored.</li>
- * <li>If a <code>pattern</code> has not been specified, formatting will be
- * based on the <code>type</code> property, which includes a date value,
- * a time value, or both into the formatted String.  Any date and time
- * values included will be formatted in accordance to the styles specified
- * by <code>dateStyle</code> and <code>timeStyle</code>, respectively.</li>
- * </ul>
- */
-
-public class DateTimeConverter implements Converter, PartialStateHolder {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.DateTime";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Date</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String DATE_ID =
-         "javax.faces.converter.DateTimeConverter.DATE";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Time</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String TIME_ID =
-         "javax.faces.converter.DateTimeConverter.TIME";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>DateTime</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String DATETIME_ID =
-         "javax.faces.converter.DateTimeConverter.DATETIME";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>DateTime</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-
-    private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT");
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private String dateStyle = "default";
-    private Locale locale = null;
-    private String pattern = null;
-    private String timeStyle = "default";
-    private TimeZone timeZone = DEFAULT_TIME_ZONE;
-    private String type = "date";
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the style to be used to format or parse dates.  If not set,
-     * the default value, <code>default</code>, is returned.</p>
-     */
-    public String getDateStyle() {
-
-        return (this.dateStyle);
-
-    }
-
-
-    /**
-     * <p>Set the style to be used to format or parse dates.  Valid values
-     * are <code>default</code>, <code>short</code>, <code>medium</code>,
-     * <code>long</code>, and <code>full</code>.
-     * An invalid value will cause a {@link ConverterException} when
-     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
-     *
-     * @param dateStyle The new style code
-     */
-    public void setDateStyle(String dateStyle) {
-
-        clearInitialState();
-        this.dateStyle = dateStyle;
-
-    }
-
-
-    /**
-     * <p>Return the <code>Locale</code> to be used when parsing or formatting
-     * dates and times. If not explicitly set, the <code>Locale</code> stored
-     * in the {@link javax.faces.component.UIViewRoot} for the current
-     * request is returned.</p>
-     */
-    public Locale getLocale() {
-
-        if (this.locale == null) {
-            this.locale =
-                 getLocale(FacesContext.getCurrentInstance());
-        }
-        return (this.locale);
-
-    }
-
-
-    /**
-     * <p>Set the <code>Locale</code> to be used when parsing or formatting
-     * dates and times.  If set to <code>null</code>, the <code>Locale</code>
-     * stored in the {@link javax.faces.component.UIViewRoot} for the current
-     * request will be utilized.</p>
-     *
-     * @param locale The new <code>Locale</code> (or <code>null</code>)
-     */
-    public void setLocale(Locale locale) {
-
-        clearInitialState();
-        this.locale = locale;
-
-    }
-
-
-    /**
-     * <p>Return the format pattern to be used when formatting and
-     * parsing dates and times.</p>
-     */
-    public String getPattern() {
-
-        return (this.pattern);
-
-    }
-
-
-    /**
-     * <p>Set the format pattern to be used when formatting and parsing
-     * dates and times.  Valid values are those supported by
-     * <code>java.text.SimpleDateFormat</code>.
-     * An invalid value will cause a {@link ConverterException} when
-     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
-     *
-     * @param pattern The new format pattern
-     */
-    public void setPattern(String pattern) {
-
-        clearInitialState();
-        this.pattern = pattern;
-
-    }
-
-
-    /**
-     * <p>Return the style to be used to format or parse times.  If not set,
-     * the default value, <code>default</code>, is returned.</p>
-     */
-    public String getTimeStyle() {
-
-        return (this.timeStyle);
-
-    }
-
-
-    /**
-     * <p>Set the style to be used to format or parse times.  Valid values
-     * are <code>default</code>, <code>short</code>, <code>medium</code>,
-     * <code>long</code>, and <code>full</code>.
-     * An invalid value will cause a {@link ConverterException} when
-     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
-     *
-     * @param timeStyle The new style code
-     */
-    public void setTimeStyle(String timeStyle) {
-
-        clearInitialState();
-        this.timeStyle = timeStyle;
-
-    }
-
-
-    /**
-     * <p>Return the <code>TimeZone</code> used to interpret a time value.
-     * If not explicitly set, the default time zone of <code>GMT</code>
-     * returned.</p>
-     */
-    public TimeZone getTimeZone() {
-
-        return (this.timeZone);
-
-    }
-
-
-    /**
-     * <p>Set the <code>TimeZone</code> used to interpret a time value.</p>
-     *
-     * @param timeZone The new time zone
-     */
-    public void setTimeZone(TimeZone timeZone) {
-
-        clearInitialState();
-        this.timeZone = timeZone;
-
-    }
-
-
-    /**
-     * <p>Return the type of value to be formatted or parsed.
-     * If not explicitly set, the default type, <code>date</code>
-     * is returned.</p>
-     */
-    public String getType() {
-
-        return (this.type);
-
-    }
-
-
-    /**
-     * <p>Set the type of value to be formatted or parsed.
-     * Valid values are <code>both</code>, <code>date</code>, or
-     * <code>time</code>.
-     * An invalid value will cause a {@link ConverterException} when
-     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
-     *
-     * @param type The new date style
-     */
-    public void setType(String type) {
-
-        clearInitialState();
-        this.type = type;
-
-    }
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        Object returnValue = null;
-        DateFormat parser = null;
-
-        try {
-
-            // If the specified value is null or zero-length, return null
-            if (value == null) {
-                return (null);
-            }
-            value = value.trim();
-            if (value.length() < 1) {
-                return (null);
-            }
-
-            // Identify the Locale to use for parsing
-            Locale locale = getLocale(context);
-
-            // Create and configure the parser to be used
-            parser = getDateFormat(locale);
-            if (null != timeZone) {
-                parser.setTimeZone(timeZone);
-            }
-
-            // Perform the requested parsing
-            returnValue = parser.parse(value);
-        } catch (ParseException e) {
-            if ("date".equals(type)) {
-                throw new ConverterException(MessageFactory.getMessage(
-                     context, DATE_ID, value,
-                     parser.format(new Date(System.currentTimeMillis())),
-                     MessageFactory.getLabel(context, component)), e);
-            } else if ("time".equals(type)) {
-                throw new ConverterException(MessageFactory.getMessage(
-                     context, TIME_ID, value,
-                     parser.format(new Date(System.currentTimeMillis())),
-                     MessageFactory.getLabel(context, component)), e);
-            } else if ("both".equals(type)) {
-                throw new ConverterException(MessageFactory.getMessage(
-                     context, DATETIME_ID, value,
-                     parser.format(new Date(System.currentTimeMillis())),
-                     MessageFactory.getLabel(context, component)), e);
-            }
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-        return returnValue;
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        try {
-
-            // If the specified value is null, return a zero-length String
-            if (value == null) {
-                return "";
-            }
-
-            // If the incoming value is still a string, play nice
-            // and return the value unmodified
-            if (value instanceof String) {
-                return (String) value;
-            }
-
-            // Identify the Locale to use for formatting
-            Locale locale = getLocale(context);
-
-            // Create and configure the formatter to be used
-            DateFormat formatter = getDateFormat(locale);
-            if (null != timeZone) {
-                formatter.setTimeZone(timeZone);
-            }
-
-            // Perform the requested formatting
-            return (formatter.format(value));
-
-        } catch (ConverterException e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        } catch (Exception e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        }
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Return a <code>DateFormat</code> instance to use for formatting
-     * and parsing in this {@link Converter}.</p>
-     *
-     * @param locale  The <code>Locale</code> used to select formatting
-     *                and parsing conventions
-     * @throws ConverterException if no instance can be created
-     */
-    private DateFormat getDateFormat(Locale locale) {
-
-        // PENDING(craigmcc) - Implement pooling if needed for performance?
-
-        if (pattern == null && type == null) {
-            throw new IllegalArgumentException("Either pattern or type must" +
-                 " be specified.");
-        }
-
-        DateFormat df;
-        if (pattern != null) {
-            df = new SimpleDateFormat(pattern, locale);
-        } else if (type.equals("both")) {
-            df = DateFormat.getDateTimeInstance
-                 (getStyle(dateStyle), getStyle(timeStyle), locale);
-        } else if (type.equals("date")) {
-            df = DateFormat.getDateInstance(getStyle(dateStyle), locale);
-        } else if (type.equals("time")) {
-            df = DateFormat.getTimeInstance(getStyle(timeStyle), locale);
-        } else {
-            // PENDING(craigmcc) - i18n
-            throw new IllegalArgumentException("Invalid type: " + type);
-        }
-        df.setLenient(false);
-        return (df);
-
-    }
-
-
-    /**
-     * <p>Return the <code>Locale</code> we will use for localizing our
-     * formatting and parsing processing.</p>
-     *
-     * @param context The {@link FacesContext} for the current request
-     */
-    private Locale getLocale(FacesContext context) {
-
-        // PENDING(craigmcc) - JSTL localization context?
-        Locale locale = this.locale;
-        if (locale == null) {
-            locale = context.getViewRoot().getLocale();
-        }
-        return (locale);
-
-    }
-
-
-    /**
-     * <p>Return the style constant for the specified style name.</p>
-     *
-     * @param name Name of the style for which to return a constant
-     * @throws ConverterException if the style name is not valid
-     */
-    private static int getStyle(String name) {
-
-        if ("default".equals(name)) {
-            return (DateFormat.DEFAULT);
-        } else if ("short".equals(name)) {
-            return (DateFormat.SHORT);
-        } else if ("medium".equals(name)) {
-            return (DateFormat.MEDIUM);
-        } else if ("long".equals(name)) {
-            return (DateFormat.LONG);
-        } else if ("full".equals(name)) {
-            return (DateFormat.FULL);
-        } else {
-            // PENDING(craigmcc) - i18n
-            throw new ConverterException("Invalid style '" + name + '\'');
-        }
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            Object values[] = new Object[6];
-            values[0] = dateStyle;
-            values[1] = locale;
-            values[2] = pattern;
-            values[3] = timeStyle;
-            values[4] = timeZone;
-            values[5] = type;
-            return (values);
-        }
-        return null;
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-            Object values[] = (Object[]) state;
-            dateStyle = (String) values[0];
-            locale = (Locale) values[1];
-            pattern = (String) values[2];
-            timeStyle = (String) values[3];
-            timeZone = (TimeZone) values[4];
-            type = (String) values[5];
-        }
-
-    }
-
-
-    private boolean transientFlag = false;
-
-
-    public boolean isTransient() {
-        return (transientFlag);
-    }
-
-
-    public void setTransient(boolean transientFlag) {
-        this.transientFlag = transientFlag;
-    }
-
-    private boolean initialState;
-
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/DoubleConverter.java b/jsf-api/src/main/java/javax/faces/convert/DoubleConverter.java
deleted file mode 100644
index 7d405b3..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/DoubleConverter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Double</code>
- * (and double primitive) values.</p>
- */
-
-public class DoubleConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Double";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Double</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String DOUBLE_ID =
-         "javax.faces.converter.DoubleConverter.DOUBLE";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Double</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (Double.valueOf(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, DOUBLE_ID, value, "1999999",
-                 MessageFactory.getLabel(context, component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (Double.toString(((Number) value).doubleValue()));
-        } catch (Exception e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/EnumConverter.java b/jsf-api/src/main/java/javax/faces/convert/EnumConverter.java
deleted file mode 100644
index 745b614..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/EnumConverter.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.PartialStateHolder;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><span class="changed_modified_2_0">{@link Converter}</span> implementation for <code>java.lang.Enum</code>
- * (and enum primitive) values.</p>
- *
- * @since 1.2
- */
-
-public class EnumConverter implements Converter, PartialStateHolder {
-
-    // for StateHolder
-    public EnumConverter() {
-
-    }
-
-    public EnumConverter(Class targetClass) {
-        this.targetClass = (Class<? extends Enum>) targetClass;
-    }
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Enum";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Enum</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by one of the enum constants or the empty
-     * string if none can be found.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String ENUM_ID =
-         "javax.faces.converter.EnumConverter.ENUM";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Enum</code> fails and no target class has been
-     * provided.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String ENUM_NO_CLASS_ID =
-         "javax.faces.converter.EnumConverter.ENUM_NO_CLASS";
-
-    // ----------------------------------------------------- Converter Methods
-
-    private Class<? extends Enum> targetClass;
-
-
-    /**
-     * <p>Convert the <code>value</code> argument to one of the enum
-     * constants of the class provided in our constructor.  If no
-     * target class argument has been provided to the constructor of
-     * this instance, throw a <code>ConverterException</code>
-     * containing the {@link #ENUM_NO_CLASS_ID} message with proper
-     * parameters.  If the <code>value</code> argument is <code>null</code>
-     * or it  has a length of zero, return <code>null</code>.
-     * Otherwise, perform the equivalent of <code>Enum.valueOf</code> using
-     * target class and <code>value</code> and return the <code>Object</code>.
-     * If the conversion fails, throw a <code>ConverterException</code>
-     * containing the {@link #ENUM_ID} message with proper parameters.
-     * </p>
-     *
-     * @param context   the <code>FacesContext</code> for this request.
-     * @param component the <code>UIComponent</code> to which this value
-     *                  will be applied.
-     * @param value     the String <code>value</code> to be converted to
-     *                  <code>Object</code>.
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        if (targetClass == null) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                      ENUM_NO_CLASS_ID,
-                      value,
-                      MessageFactory.getLabel(context,
-                           component)));
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return Enum.valueOf(targetClass, value);
-        } catch (IllegalArgumentException iae) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                      ENUM_ID,
-                      value,
-                      value,
-                      MessageFactory.getLabel(context,
-                           component)), iae);
-        }
-
-    }
-
-    /**
-     * <p>Convert the enum constant given by the <code>value</code>
-     * argument into a String.  If no target class argument has been
-     * provided to the constructor of this instance, throw a
-     * <code>ConverterException</code> containing the {@link
-     * #ENUM_NO_CLASS_ID} message with proper parameters. If the
-     * <code>value</code> argument is <code>null</code>, return
-     * <code>null</code>.  If the value is an instance of the provided
-     * target class, return its string value by <span
-     * class="changed_added_2_0">casting it to a
-     * <code>java.lang.Enum</code> and returning the result of calling
-     * the <code>name()</code> method.</span> Otherwise, throw a {@link
-     * ConverterException} containing the {@link #ENUM_ID} message with
-     * proper parameters.</p>
-     *
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        if (targetClass == null) {
-            throw new ConverterException(
-                 MessageFactory.getMessage(context,
-                      ENUM_NO_CLASS_ID,
-                      value,
-                      MessageFactory.getLabel(context,
-                           component)));
-        }
-
-        // If the specified value is null, return null
-        if (value == null) {
-            return (null);
-        }
-
-        if (targetClass.isInstance(value)) {
-            return ((Enum)value).name();
-        }
-
-        throw new ConverterException(
-             MessageFactory.getMessage(context,
-                  ENUM_ID,
-                  value,
-                  value,
-                  MessageFactory.getLabel(context,
-                       component)));
-    }
-
-    // ----------------------------------------------------------- StateHolder
-
-    public void restoreState(FacesContext facesContext, Object object) {
-        if (facesContext == null) {
-            throw new NullPointerException();
-        }
-        if (object != null) {
-            this.targetClass = (Class<? extends Enum>) object;
-        }
-    }
-
-    public Object saveState(FacesContext facesContext) {
-        if (facesContext == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            return this.targetClass;
-        }
-        return null;
-    }
-
-    private boolean isTransient = false;
-
-    public void setTransient(boolean b) {
-        isTransient = b;
-    }
-
-    public boolean isTransient() {
-        return isTransient;
-    }
-
-    private boolean initialState;
-
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/FacesConverter.java b/jsf-api/src/main/java/javax/faces/convert/FacesConverter.java
deleted file mode 100644
index 50c09cc..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/FacesConverter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a {@link
- * Converter}.  The value of the {@link #value} attribute is taken to be
- * <em>converter-id</em>, the value of the {@link #forClass} attribute
- * is taken to be <em>converter-for-class</em> and the fully qualified
- * class name of the class to which this annotation is attached is taken
- * to be the <em>converter-class</em>.  The implementation must
- * guarantee that for each class annotated with
- * <code>FacesConverter</code>, found with the algorithm in section JSF.11.5,
- * the proper variant of <code>Application.addConverter()</code> is
- * called.  If <em>converter-id</em> is not the empty string, {@link
- * javax.faces.application.Application#addConverter(java.lang.String,java.lang.String)}
- * is called, passing the derived <em>converter-id</em> as the first
- * argument and the derived <em>converter-class</em> as the second
- * argument.  If <em>converter-id</em> is the empty string, {@link
- * javax.faces.application.Application#addConverter(java.lang.Class,java.lang.String)}
- * is called, passing the <em>converter-for-class</em> as the first
- * argument and the derived <em>converter-class</em> as the second
- * argument.  The implementation must guarantee that all such calls to
- * <code>addConverter()</code> happen during application startup time
- * and before any requests are serviced.</p>
- *
- */
-
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface FacesConverter {
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>converter-id</em> with which
-     * instances of this class of converter can be instantiated by
-     * calling {@link
-     * javax.faces.application.Application#createConverter(java.lang.String)}.</p>
-     */ 
-
-    String value() default "";
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>converter-for-class</em> with
-     * which instances of this class of converter can be instantiated by
-     * calling {@link
-     * javax.faces.application.Application#createConverter(java.lang.Class)}.</p>
-     */ 
-
-    Class forClass() default Object.class;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/FloatConverter.java b/jsf-api/src/main/java/javax/faces/convert/FloatConverter.java
deleted file mode 100644
index 2aa5c9a..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/FloatConverter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Float</code>
- * (and float primitive) values.</p>
- */
-
-public class FloatConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Float";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Float</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String FLOAT_ID =
-         "javax.faces.converter.FloatConverter.FLOAT";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Float</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (Float.valueOf(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, FLOAT_ID, value, "2000000000",
-                 MessageFactory.getLabel(context, component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (Float.toString(((Number) value).floatValue()));
-        } catch (Exception e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/IntegerConverter.java b/jsf-api/src/main/java/javax/faces/convert/IntegerConverter.java
deleted file mode 100644
index aacc7ef..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/IntegerConverter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Integer</code>
- * (and int primitive) values.</p>
- */
-
-public class IntegerConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Integer";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Integer</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String INTEGER_ID =
-         "javax.faces.converter.IntegerConverter.INTEGER";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Integer</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (Integer.valueOf(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, INTEGER_ID, value, "9346",
-                 MessageFactory.getLabel(context, component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (Integer.toString(((Number) value).intValue()));
-        } catch (Exception e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/LongConverter.java b/jsf-api/src/main/java/javax/faces/convert/LongConverter.java
deleted file mode 100644
index 61b7a77..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/LongConverter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Long</code>
- * (and long primitive) values.</p>
- */
-
-public class LongConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Long";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Long</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String LONG_ID =
-         "javax.faces.converter.LongConverter.LONG";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Long</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (Long.valueOf(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, LONG_ID, value, "98765432",
-                 MessageFactory.getLabel(context, component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (Long.toString(((Number) value).longValue()));
-        } catch (Exception e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/NumberConverter.java b/jsf-api/src/main/java/javax/faces/convert/NumberConverter.java
deleted file mode 100644
index 8a3f36f..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/NumberConverter.java
+++ /dev/null
@@ -1,983 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.PartialStateHolder;
-import javax.faces.context.FacesContext;
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.NumberFormat;
-import java.text.ParseException;
-import java.util.Locale;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Number</code>
- * values.</p>
- * <p/>
- * <p>The <code>getAsObject()</code> method parses a String into an
- * <code>java.lang.Double</code> or <code>java.lang.Long</code>, according
- * to the following algorithm:</p>
- * <ul>
- * <li>If the specified String is null, return
- * a <code>null</code>.  Otherwise, trim leading and trailing
- * whitespace before proceeding.</li>
- * <li>If the specified String - after trimming - has a zero length,
- * return <code>null</code>.</li>
- * <li>If the <code>locale</code> property is not null,
- * use that <code>Locale</code> for managing parsing.  Otherwise, use the
- * <code>Locale</code> from the <code>UIViewRoot</code>.</li>
- * <li>If a <code>pattern</code> has been specified, its syntax must conform
- * the rules specified by <code>java.text.DecimalFormat</code>.  Such
- * a pattern will be used to parse, and the <code>type</code> property
- * will be ignored.</li>
- * <li>If a <code>pattern</code> has not been specified, parsing will be based
- * on the <code>type</code> property, which expects a currency, a number,
- * or a percent.  The parse pattern for currencies, numbers, and
- * percentages is determined by calling the
- * <code>getCurrencyInstance()</code>, <code>getNumberInstance()</code>,
- * or <code>getPercentInstance()</code> method of the
- * <code>java.text.NumberFormat</code> class, passing in the selected
- * <code>Locale</code>.</li>
- * <li>If the <code>integerOnly</code> property has been set to true, only
- * the integer portion of the String will be parsed.  See the JavaDocs
- * for the <code>setParseIntegerOnly()</code> method of the
- * <code>java.text.NumberFormat</code> class for more information.</li>
- * </ul>
- * <p/>
- * <p>The <code>getAsString()</code> method expects a value of type
- * <code>java.lang.Number</code> (or a subclass), and creates a formatted
- * String according to the following algorithm:</p>
- * <ul>
- * <li>If the specified value is null, return a zero-length String.</li>
- * <li>If the specified value is a String, return it unmodified.</li>
- * <li>If the <code>locale</code> property is not null,
- * use that <code>Locale</code> for managing formatting.  Otherwise, use the
- * <code>Locale</code> from the <code>FacesContext</code>.</li>
- * <li>If a <code>pattern</code> has been specified, its syntax must conform
- * the rules specified by <code>java.text.DecimalFormat</code>.  Such
- * a pattern will be used to format, and the <code>type</code> property
- * (along with related formatting options described in the next paragraph)
- * will be ignored.</li>
- * <li>If a <code>pattern</code> has not been specified, formatting will be
- * based on the <code>type</code> property, which formats the value as a
- * currency, a number, or a percent.  The format pattern for currencies,
- * numbers, and percentages is determined by calling the
- * percentages is determined by calling the
- * <code>getCurrencyInstance()</code>, <code>getNumberInstance()</code>,
- * or <code>getPercentInstance()</code> method of the
- * <code>java.text.NumberFormat</code> class, passing in the selected
- * <code>Locale</code>.  In addition, the following properties will be
- * applied to the format pattern, if specified:
- * <ul>
- * <li>If the <code>groupingUsed</code> property is <code>true</code>, the
- * <code>setGroupingUsed(true)</code> method on the corresponding
- * <code>NumberFormat</code> instance will be called.</li>
- * <li>The minimum and maximum number of digits in the integer and
- * fractional portions of the result will be configured based on
- * any values set for the <code>maxFractionDigits</code>,
- * <code>maxIntegerDigits</code>, <code>minFractionDigits</code>,
- * and <code>minIntegerDigits</code> properties.</li>
- * <li>If the type is set to <code>currency</code>, it is also possible
- * to configure the currency symbol to be used, using either the
- * <code>currencyCode</code> or <code>currencySymbol</code> properties.
- * If both are set, the value for <code>currencyCode</code> takes
- * precedence on a JDK 1.4 (or later) JVM; otherwise, the value
- * for <code>currencySymbol</code> takes precedence.</li>
- * </ul></li>
- * </ul>
- */
-
-public class NumberConverter implements Converter, PartialStateHolder {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Number";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Number</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String CURRENCY_ID =
-         "javax.faces.converter.NumberConverter.CURRENCY";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Number</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>                              HA
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String NUMBER_ID =
-         "javax.faces.converter.NumberConverter.NUMBER";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Number</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String PATTERN_ID =
-         "javax.faces.converter.NumberConverter.PATTERN";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Number</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String PERCENT_ID =
-         "javax.faces.converter.NumberConverter.PERCENT";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Number</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-
-     private static final String NBSP = "\u00a0";
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private String currencyCode = null;
-    private String currencySymbol = null;
-    private Boolean groupingUsed = true;
-    private Boolean integerOnly = false;
-    private Integer maxFractionDigits;
-    private Integer maxIntegerDigits;
-    private Integer minFractionDigits;
-    private Integer minIntegerDigits;
-    private Locale locale = null;
-    private String pattern = null;
-    private String type = "number";
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the ISO 4217 currency code used by <code>getAsString()</code>
-     * with a <code>type</code> of <code>currency</code>.  If not set,
-     * the value used will be based on the formatting <code>Locale</code>.</p>
-     */
-    public String getCurrencyCode() {
-
-        return (this.currencyCode);
-
-    }
-
-
-    /**
-     * <p>Set the ISO 4217 currency code used by <code>getAsString()</code>
-     * with a <code>type</code> of <code>currency</code>.</p>
-     *
-     * @param currencyCode The new currency code
-     */
-    public void setCurrencyCode(String currencyCode) {
-
-        clearInitialState();
-        this.currencyCode = currencyCode;
-
-    }
-
-
-    /**
-     * <p>Return the currency symbol used by <code>getAsString()</code>
-     * with a <code>type</code> of <code>currency</code>.  If not set,
-     * the value used will be based on the formatting <code>Locale</code>.</p>
-     */
-    public String getCurrencySymbol() {
-
-        return (this.currencySymbol);
-
-    }
-
-
-    /**
-     * <p>Set the currency symbol used by <code>getAsString()</code>
-     * with a <code>type</code> of <code>currency</code>.</p>
-     *
-     * @param currencySymbol The new currency symbol
-     */
-    public void setCurrencySymbol(String currencySymbol) {
-
-        clearInitialState();
-        this.currencySymbol = currencySymbol;
-
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if <code>getAsString</code> should include
-     * grouping separators if necessary.  If not modified, the default value
-     * is <code>true</code>.</p>
-     */
-    public boolean isGroupingUsed() {
-
-        return (this.groupingUsed != null ? this.groupingUsed : true);
-
-    }
-
-
-    /**
-     * <p>Set the flag indicating whether <code>getAsString()</code> should
-     * include grouping separators if necessary.</p>
-     *
-     * @param groupingUsed The new grouping used flag
-     */
-    public void setGroupingUsed(boolean groupingUsed) {
-
-        clearInitialState();
-        this.groupingUsed = groupingUsed;
-
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if only the integer portion of the given
-     * value should be returned from <code>getAsObject()</code>.  If not
-     * modified, the default value is <code>false</code>.</p>
-     */
-    public boolean isIntegerOnly() {
-
-        return (this.integerOnly != null ? this.integerOnly : false);
-
-    }
-
-
-    /**
-     * <p>Set to <code>true</code> if only the integer portion of the given
-     * value should be returned from <code>getAsObject()</code>.</p>
-     *
-     * @param integerOnly The new integer-only flag
-     */
-    public void setIntegerOnly(boolean integerOnly) {
-
-        clearInitialState();
-        this.integerOnly = integerOnly;
-
-    }
-
-
-    /**
-     * <p>Return the maximum number of digits <code>getAsString()</code> should
-     * render in the fraction portion of the result.</p>
-     */
-    public int getMaxFractionDigits() {
-
-        return (this.maxFractionDigits != null ? this.maxFractionDigits : 0);
-
-    }
-
-
-    /**
-     * <p>Set the maximum number of digits <code>getAsString()</code> should
-     * render in the fraction portion of the result.  If not set, the number of
-     * digits depends on the value being converted.</p>
-     *
-     * @param maxFractionDigits The new limit
-     */
-    public void setMaxFractionDigits(int maxFractionDigits) {
-
-        clearInitialState();
-        this.maxFractionDigits = maxFractionDigits;
-
-    }
-
-
-    /**
-     * <p>Return the maximum number of digits <code>getAsString()</code> should
-     * render in the integer portion of the result.</p>
-     */
-    public int getMaxIntegerDigits() {
-
-        return (this.maxIntegerDigits != null ? this.maxIntegerDigits : 0);
-
-    }
-
-
-    /**
-     * <p>Set the maximum number of digits <code>getAsString()</code> should
-     * render in the integer portion of the result.  If not set, the number of
-     * digits depends on the value being converted.</p>
-     *
-     * @param maxIntegerDigits The new limit
-     */
-    public void setMaxIntegerDigits(int maxIntegerDigits) {
-
-        clearInitialState();
-        this.maxIntegerDigits = maxIntegerDigits;
-
-    }
-
-
-    /**
-     * <p>Return the minimum number of digits <code>getAsString()</code> should
-     * render in the fraction portion of the result.</p>
-     */
-    public int getMinFractionDigits() {
-
-        return (this.minFractionDigits != null ? this.minFractionDigits : 0);
-
-    }
-
-
-    /**
-     * <p>Set the minimum number of digits <code>getAsString()</code> should
-     * render in the fraction portion of the result.  If not set, the number of
-     * digits depends on the value being converted.</p>
-     *
-     * @param minFractionDigits The new limit
-     */
-    public void setMinFractionDigits(int minFractionDigits) {
-
-        clearInitialState();
-        this.minFractionDigits = minFractionDigits;
-
-    }
-
-
-    /**
-     * <p>Return the minimum number of digits <code>getAsString()</code> should
-     * render in the integer portion of the result.</p>
-     */
-    public int getMinIntegerDigits() {
-
-        return (this.minIntegerDigits != null ? this.minIntegerDigits : 0);
-
-    }
-
-
-    /**
-     * <p>Set the minimum number of digits <code>getAsString()</code> should
-     * render in the integer portion of the result.  If not set, the number of
-     * digits depends on the value being converted.</p>
-     *
-     * @param minIntegerDigits The new limit
-     */
-    public void setMinIntegerDigits(int minIntegerDigits) {
-
-        clearInitialState();
-        this.minIntegerDigits = minIntegerDigits;
-
-    }
-
-
-    /**
-     * <p>Return the <code>Locale</code> to be used when parsing numbers.
-     * If this value is <code>null</code>, the <code>Locale</code> stored
-     * in the {@link javax.faces.component.UIViewRoot} for the current request
-     * will be utilized.</p>
-     */
-    public Locale getLocale() {
-
-        if (this.locale == null) {
-            this.locale =
-                 getLocale(FacesContext.getCurrentInstance());
-        }
-        return (this.locale);
-
-    }
-
-
-    /**
-     * <p>Set the <code>Locale</code> to be used when parsing numbers.
-     * If set to <code>null</code>, the <code>Locale</code> stored in the
-     * {@link javax.faces.component.UIViewRoot} for the current request
-     * will be utilized.</p>
-     *
-     * @param locale The new <code>Locale</code> (or <code>null</code>)
-     */
-    public void setLocale(Locale locale) {
-
-        clearInitialState();
-        this.locale = locale;
-
-    }
-
-
-    /**
-     * <p>Return the format pattern to be used when formatting and
-     * parsing numbers.</p>
-     */
-    public String getPattern() {
-
-        return (this.pattern);
-
-    }
-
-
-    /**
-     * <p>Set the format pattern to be used when formatting and parsing
-     * numbers.  Valid values are those supported by
-     * <code>java.text.DecimalFormat</code>.
-     * An invalid value will cause a {@link ConverterException} when
-     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
-     *
-     * @param pattern The new format pattern
-     */
-    public void setPattern(String pattern) {
-
-        clearInitialState();
-        this.pattern = pattern;
-
-    }
-
-
-    /**
-     * <p>Return the number type to be used when formatting and parsing numbers.
-     * If not modified, the default type is <code>number</code>.</p>
-     */
-    public String getType() {
-
-        return (this.type);
-
-    }
-
-
-    /**
-     * <p>Set the number type to be used when formatting and parsing numbers.
-     * Valid values are <code>currency</code>, <code>number</code>, or
-     * <code>percent</code>.
-     * An invalid value will cause a {@link ConverterException} when
-     * <code>getAsObject()</code> or <code>getAsString()</code> is called.</p>
-     *
-     * @param type The new number style
-     */
-    public void setType(String type) {
-
-        clearInitialState();
-        this.type = type;
-
-    }
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        Object returnValue = null;
-        NumberFormat parser = null;
-
-        try {
-
-            // If the specified value is null or zero-length, return null
-            if (value == null) {
-                return (null);
-            }
-            value = value.trim();
-            if (value.length() < 1) {
-                return (null);
-            }
-
-            // Identify the Locale to use for parsing
-            Locale locale = getLocale(context);
-
-            // Create and configure the parser to be used
-            parser = getNumberFormat(locale);
-            if (((pattern != null) && pattern.length() != 0)
-                 || "currency".equals(type)) {
-                configureCurrency(parser);
-            }
-            parser.setParseIntegerOnly(isIntegerOnly());
-            boolean groupSepChanged = false;
-            // BEGIN HACK 4510618
-            // This lovely bit of code is for a workaround in some
-            // oddities in the JDK's parsing code.
-            // See:  http://bugs.sun.com/view_bug.do?bug_id=4510618
-            if (parser instanceof DecimalFormat) {
-                DecimalFormat dParser = (DecimalFormat) parser;
-
-                // Take a small hit in performance to avoid a loss in
-                // precision due to DecimalFormat.parse() returning Double
-                ValueExpression ve = component.getValueExpression("value");
-                if (ve != null) {
-                    Class<?> expectedType = ve.getType(context.getELContext());
-                    if (expectedType.isAssignableFrom(BigDecimal.class)) {
-                        dParser.setParseBigDecimal(true);
-                    }
-                }
-                DecimalFormatSymbols symbols =
-                      dParser.getDecimalFormatSymbols();
-                if (symbols.getGroupingSeparator() == '\u00a0') {
-                    groupSepChanged = true;
-                    String tValue;
-                    if (value.contains(NBSP)) {
-                        tValue = value.replace('\u00a0', ' ');
-                    } else {
-                        tValue = value;
-                    }
-                    symbols.setGroupingSeparator(' ');
-                    dParser.setDecimalFormatSymbols(symbols);
-                    try {
-                        return dParser.parse(tValue);
-                    } catch (ParseException pe) {
-                        if (groupSepChanged) {
-                            symbols.setGroupingSeparator('\u00a0');
-                            dParser.setDecimalFormatSymbols(symbols);
-                        }
-                    }
-                }
-            }
-            // END HACK 4510618
-
-            // Perform the requested parsing
-            returnValue = parser.parse(value);
-        } catch (ParseException e) {
-            if (pattern != null) {
-                throw new ConverterException(MessageFactory.getMessage(
-                     context, PATTERN_ID, value, "#,##0.0#",
-                     MessageFactory.getLabel(context, component)), e);
-            } else if (type.equals("currency")) {
-                throw new ConverterException(MessageFactory.getMessage(
-                     context, CURRENCY_ID, value,
-                     parser.format(99.99),
-                     MessageFactory.getLabel(context, component)), e);
-            } else if (type.equals("number")) {
-                throw new ConverterException(MessageFactory.getMessage(
-                     context, NUMBER_ID, value,
-                     parser.format(99),
-                     MessageFactory.getLabel(context, component)), e);
-            } else if (type.equals("percent")) {
-                throw new ConverterException(MessageFactory.getMessage(
-                     context, PERCENT_ID, value,
-                     parser.format(.75),
-                     MessageFactory.getLabel(context, component)), e);
-            }
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-        return returnValue;
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        try {
-
-            // If the specified value is null, return a zero-length String
-            if (value == null) {
-                return "";
-            }
-
-            // If the incoming value is still a string, play nice
-            // and return the value unmodified
-            if (value instanceof String) {
-                return (String) value;
-            }
-
-            // Identify the Locale to use for formatting
-            Locale locale = getLocale(context);
-
-            // Create and configure the formatter to be used
-            NumberFormat formatter =
-                 getNumberFormat(locale);
-            if (((pattern != null) && pattern.length() != 0)
-                 || "currency".equals(type)) {
-                configureCurrency(formatter);
-            }
-            configureFormatter(formatter);
-
-            // Perform the requested formatting
-            return (formatter.format(value));
-
-        } catch (ConverterException e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        } catch (Exception e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        }
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static Class currencyClass;
-
-    static {
-        try {
-            currencyClass = Class.forName("java.util.Currency");
-            // container's runtime is J2SE 1.4 or greater
-        } catch (Exception ignored) {
-        }
-    }
-
-    private static final Class[] GET_INSTANCE_PARAM_TYPES =
-         new Class[]{String.class};
-
-
-    /**
-     * <p/>
-     * Override the formatting locale's default currency symbol with the
-     * specified currency code (specified via the "currencyCode" attribute) or
-     * currency symbol (specified via the "currencySymbol" attribute).</p>
-     * <p/>
-     * <p>If both "currencyCode" and "currencySymbol" are present,
-     * "currencyCode" takes precedence over "currencySymbol" if the
-     * java.util.Currency class is defined in the container's runtime (that
-     * is, if the container's runtime is J2SE 1.4 or greater), and
-     * "currencySymbol" takes precendence over "currencyCode" otherwise.</p>
-     * <p/>
-     * <p>If only "currencyCode" is given, it is used as a currency symbol if
-     * java.util.Currency is not defined.</p>
-     * <pre>
-     * Example:
-     * <p/>
-     * JDK    "currencyCode" "currencySymbol" Currency symbol being displayed
-     * -----------------------------------------------------------------------
-     * all         ---            ---         Locale's default currency symbol
-     * <p/>
-     * <1.4        EUR            ---         EUR
-     * >=1.4       EUR            ---         Locale's currency symbol for Euro
-     * <p/>
-     * all         ---           \u20AC       \u20AC
-     * <p/>
-     * <1.4        EUR           \u20AC       \u20AC
-     * >=1.4       EUR           \u20AC       Locale's currency symbol for Euro
-     * </pre>
-     *
-     * @param formatter The <code>NumberFormatter</code> to be configured
-     */
-    private void configureCurrency(NumberFormat formatter) throws Exception {
-
-        // Implementation copied from JSTL's FormatNumberSupport.setCurrency()
-
-        String code = null;
-        String symbol = null;
-
-        if ((currencyCode == null) && (currencySymbol == null)) {
-            return;
-        }
-
-        if ((currencyCode != null) && (currencySymbol != null)) {
-            if (currencyClass != null)
-                code = currencyCode;
-            else
-                symbol = currencySymbol;
-        } else if (currencyCode == null) {
-            symbol = currencySymbol;
-        } else {
-            if (currencyClass != null)
-                code = currencyCode;
-            else
-                symbol = currencyCode;
-        }
-
-        if (code != null) {
-            Object[] methodArgs = new Object[1];
-
-            /*
-            * java.util.Currency.getInstance()
-            */
-            Method m = currencyClass.getMethod("getInstance",
-                 GET_INSTANCE_PARAM_TYPES);
-            methodArgs[0] = code;
-            Object currency = m.invoke(null, methodArgs);
-
-            /*
-            * java.text.NumberFormat.setCurrency()
-            */
-            Class[] paramTypes = new Class[1];
-            paramTypes[0] = currencyClass;
-            Class numberFormatClass = Class.forName("java.text.NumberFormat");
-            m = numberFormatClass.getMethod("setCurrency", paramTypes);
-            methodArgs[0] = currency;
-            m.invoke(formatter, methodArgs);
-        } else {
-            /*
-            * Let potential ClassCastException propagate up (will almost
-            * never happen)
-            */
-            DecimalFormat df = (DecimalFormat) formatter;
-            DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
-            dfs.setCurrencySymbol(symbol);
-            df.setDecimalFormatSymbols(dfs);
-        }
-
-    }
-
-
-    /**
-     * <p>Configure the specified <code>NumberFormat</code> based on the
-     * formatting properties that have been set.</p>
-     *
-     * @param formatter The <code>NumberFormat</code> instance to configure
-     */
-    private void configureFormatter(NumberFormat formatter) {
-
-        formatter.setGroupingUsed(groupingUsed);
-        if (isMaxIntegerDigitsSet()) {
-            formatter.setMaximumIntegerDigits(maxIntegerDigits);
-        }
-        if (isMinIntegerDigitsSet()) {
-            formatter.setMinimumIntegerDigits(minIntegerDigits);
-        }
-        if (isMaxFractionDigitsSet()) {
-            formatter.setMaximumFractionDigits(maxFractionDigits);
-        }
-        if (isMinFractionDigitsSet()) {
-            formatter.setMinimumFractionDigits(minFractionDigits);
-        }
-
-    }
-
-
-    private boolean isMaxIntegerDigitsSet() {
-
-        return (maxIntegerDigits != null);
-
-    }
-
-
-    private boolean isMinIntegerDigitsSet() {
-
-        return (minIntegerDigits != null);
-
-    }
-
-
-    private boolean isMaxFractionDigitsSet() {
-
-        return (maxFractionDigits != null);
-
-    }
-
-
-    private boolean isMinFractionDigitsSet() {
-
-        return (minFractionDigits != null);
-
-    }
-
-
-    /**
-     * <p>Return the <code>Locale</code> we will use for localizing our
-     * formatting and parsing processing.</p>
-     *
-     * @param context The {@link FacesContext} for the current request
-     */
-    private Locale getLocale(FacesContext context) {
-
-        // PENDING(craigmcc) - JSTL localization context?
-        Locale locale = this.locale;
-        if (locale == null) {
-            locale = context.getViewRoot().getLocale();
-        }
-        return (locale);
-
-    }
-
-
-    /**
-     * <p>Return a <code>NumberFormat</code> instance to use for formatting
-     * and parsing in this {@link Converter}.</p>
-     *
-     * @param locale The <code>Locale</code> used to select formatting
-     *               and parsing conventions
-     * @throws ConverterException if no instance can be created
-     */
-    private NumberFormat getNumberFormat(Locale locale) {
-
-        if (pattern == null && type == null) {
-            throw new IllegalArgumentException("Either pattern or type must" +
-                 " be specified.");
-        }
-
-        // PENDING(craigmcc) - Implement pooling if needed for performance?
-
-        // If pattern is specified, type is ignored
-        if (pattern != null) {
-            DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
-            return (new DecimalFormat(pattern, symbols));
-        }
-
-        // Create an instance based on the specified type
-        else if (type.equals("currency")) {
-            return (NumberFormat.getCurrencyInstance(locale));
-        } else if (type.equals("number")) {
-            return (NumberFormat.getNumberInstance(locale));
-        } else if (type.equals("percent")) {
-            return (NumberFormat.getPercentInstance(locale));
-        } else {
-            // PENDING(craigmcc) - i18n
-            throw new ConverterException
-                 (new IllegalArgumentException(type));
-        }
-
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            Object values[] = new Object[11];
-            values[0] = currencyCode;
-            values[1] = currencySymbol;
-            values[2] = groupingUsed;
-            values[3] = integerOnly;
-            values[4] = maxFractionDigits;
-            values[5] = maxIntegerDigits;
-            values[6] = minFractionDigits;
-            values[7] = minIntegerDigits;
-            values[8] = locale;
-            values[9] = pattern;
-            values[10] = type;
-            return (values);
-        }
-        return null;
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-            Object values[] = (Object[]) state;
-            currencyCode = (String) values[0];
-            currencySymbol = (String) values[1];
-            groupingUsed = (Boolean) values[2];
-            integerOnly = (Boolean) values[3];
-            maxFractionDigits = (Integer) values[4];
-            maxIntegerDigits = (Integer) values[5];
-            minFractionDigits = (Integer) values[6];
-            minIntegerDigits = (Integer) values[7];
-            locale = (Locale) values[8];
-            pattern = (String) values[9];
-            type = (String) values[10];
-        }
-
-    }
-
-
-    private boolean transientFlag = false;
-
-
-    public boolean isTransient() {
-        return (transientFlag);
-    }
-
-
-    public void setTransient(boolean transientFlag) {
-        this.transientFlag = transientFlag;
-    }
-
-
-    private boolean initialState;
-
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/ShortConverter.java b/jsf-api/src/main/java/javax/faces/convert/ShortConverter.java
deleted file mode 100644
index 61ddde8..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/ShortConverter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.convert;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>{@link Converter} implementation for <code>java.lang.Short</code>
- * (and short primitive) values.</p>
- */
-
-public class ShortConverter implements Converter {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String CONVERTER_ID = "javax.faces.Short";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion to <code>Short</code> fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by an example value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String SHORT_ID =
-         "javax.faces.converter.ShortConverter.SHORT";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the conversion of the <code>Short</code> value to
-     * <code>String</code> fails.   The message format string for this message
-     * may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> relaced by the unconverted value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String STRING_ID =
-         "javax.faces.converter.STRING";
-
-    // ------------------------------------------------------- Converter Methods
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null or zero-length, return null
-        if (value == null) {
-            return (null);
-        }
-        value = value.trim();
-        if (value.length() < 1) {
-            return (null);
-        }
-
-        try {
-            return (Short.valueOf(value));
-        } catch (NumberFormatException nfe) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, SHORT_ID, value, "32456",
-                 MessageFactory.getLabel(context, component)), nfe);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-    }
-
-    /**
-     * @throws ConverterException   {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-
-        // If the specified value is null, return a 
-        // zero-length String
-        if (value == null) {
-            return "";
-        }
-
-        // If the incoming value is still a string, play nice
-        // and return the value unmodified
-        if (value instanceof String) {
-            return (String) value;
-        }
-
-        try {
-            return (Short.toString(((Number) value).shortValue()));
-        } catch (Exception e) {
-            throw new ConverterException(MessageFactory.getMessage(
-                 context, STRING_ID, value,
-                 MessageFactory.getLabel(context, component)), e);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/convert/package.html b/jsf-api/src/main/java/javax/faces/convert/package.html
deleted file mode 100644
index 23ad44f..0000000
--- a/jsf-api/src/main/java/javax/faces/convert/package.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-    <title>Package Description for "javax.faces.convert"</title>
-</head>
-<body bgcolor="white">
-
-<p><span class="changed_modified_2_0">Contains</span> classes and
-interfaces defining converters.  The main class in this package is
-{@link javax.faces.convert.Converter}.</p>
-
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/el/CompositeComponentExpressionHolder.java b/jsf-api/src/main/java/javax/faces/el/CompositeComponentExpressionHolder.java
deleted file mode 100644
index 560e1bd..0000000
--- a/jsf-api/src/main/java/javax/faces/el/CompositeComponentExpressionHolder.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.el;
-
-import javax.el.ValueExpression;
-
-/**
- * This interface <em>must</em> be implemented by the <code>Map</code>
- * returned by the composite component <code>ELResolver</code>,
- * described in section JSF.5.6.2.2 of the specification, when
- * evaluating <code>#{cc.attrs}</code> epressions.
- *
- * @since 2.0
- */
-public interface CompositeComponentExpressionHolder {
-
-    /**
-     * @param name that attribute name which may be assocated with a
-     * <code>ValueExpression</code>
-     * @return the <code>ValueExpression</code> associated with </code>name</code>
-     *  otherwise return <code>null</code>
-     */
-    ValueExpression getExpression(String name);
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/EvaluationException.java b/jsf-api/src/main/java/javax/faces/el/EvaluationException.java
deleted file mode 100644
index 66a9855..0000000
--- a/jsf-api/src/main/java/javax/faces/el/EvaluationException.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-import javax.faces.FacesException;
-
-
-/**
- * <p>An exception reporting an error that occurred during the evaluation
- * of an expression in a {@link MethodBinding} or {@link ValueBinding}.</p>
- *
- * @deprecated This has been replaced by {@link javax.el.ELException}.
- */
-
-public class EvaluationException extends FacesException {
-
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public EvaluationException() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public EvaluationException(String message) {
-
-        super(message);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.  The detail
-     * message will be set to <code>(cause == null ? null :
-     * cause.toString()</code>
-     *
-     * @param cause The root cause for this exception
-     */
-    public EvaluationException(Throwable cause) {
-
-        super(cause);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause The root cause for this exception
-     */
-    public EvaluationException(String message, Throwable cause) {
-
-        super(message, cause);
-
-    }
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/MethodBinding.java b/jsf-api/src/main/java/javax/faces/el/MethodBinding.java
deleted file mode 100644
index 877cd16..0000000
--- a/jsf-api/src/main/java/javax/faces/el/MethodBinding.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><strong>MethodBinding</strong> is an object that can be used
- * to call an arbitrary public method, on an instance that is acquired by
- * evaluatng the leading portion of a method binding expression via a
- * {@link ValueBinding}.  An immutable {@link MethodBinding} for a particular
- * method binding expression can be acquired by calling the
- * <code>createMethodBinding()</code> method of the
- * {@link javax.faces.application.Application} instance for this web
- * application.</p>
- *
- *
- * @deprecated This has been replaced by {@link javax.el.MethodExpression}.
- */
-
-public abstract class MethodBinding {
-
-
-    /**
-     * <p>Return the return value (if any) resulting from a call to the
-     * method identified by this method binding expression, passing it
-     * the specified parameters, relative to the specified {@link FacesContext}.
-     * </p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param params Array of parameters to be passed to the called method,
-     *  or <code>null</code> for no parameters
-     *
-     * @throws EvaluationException if an exception is thrown
-     *  by the called method (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws MethodNotFoundException if no suitable method can be found
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract Object invoke(FacesContext context, Object params[])
-        throws EvaluationException, MethodNotFoundException;
-
-
-    /**
-     * <p>Return the Java class representing the return type from the
-     * method identified by this method binding expression.  </p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws MethodNotFoundException if no suitable method can be found
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract Class getType(FacesContext context)
-        throws MethodNotFoundException;
-
-    /**
-     * <p>Return the (possibly <code>null</code>) expression String,
-     * with leading and trailing delimiters, from which this
-     * <code>MethodBinding</code> was built.  The default implementation
-     * returns <code>null</code>.</p>
-     *
-     */
-    public String getExpressionString() {
-	return null;
-    }
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/MethodNotFoundException.java b/jsf-api/src/main/java/javax/faces/el/MethodNotFoundException.java
deleted file mode 100644
index d93cd55..0000000
--- a/jsf-api/src/main/java/javax/faces/el/MethodNotFoundException.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-/**
- * <p>An exception caused by a method name that cannot be resolved
- * against a base object.</p>
- *
- * @deprecated This has been replaced by {@link
- * javax.el.MethodNotFoundException}.
- */
-
-public class MethodNotFoundException extends EvaluationException {
-
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public MethodNotFoundException() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public MethodNotFoundException(String message) {
-
-        super(message);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.  The detail
-     * message will be set to <code>(cause == null ? null :
-     * cause.toString()</code>
-     *
-     * @param cause The root cause for this exception
-     */
-    public MethodNotFoundException(Throwable cause) {
-
-        super(cause);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause The root cause for this exception
-     */
-    public MethodNotFoundException(String message, Throwable cause) {
-
-        super(message, cause);
-
-    }
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/PropertyNotFoundException.java b/jsf-api/src/main/java/javax/faces/el/PropertyNotFoundException.java
deleted file mode 100644
index 3059a99..0000000
--- a/jsf-api/src/main/java/javax/faces/el/PropertyNotFoundException.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-/**
- * <p>An exception caused by a property name that cannot be resolved
- * against a base object.</p>
- *
- * @deprecated This has been replaced by {@link
- * javax.el.PropertyNotFoundException}.
- */
-
-public class PropertyNotFoundException extends EvaluationException {
-
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public PropertyNotFoundException() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public PropertyNotFoundException(String message) {
-
-        super(message);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.  The detail
-     * message will be set to <code>(cause == null ? null :
-     * cause.toString()</code>
-     *
-     * @param cause The root cause for this exception
-     */
-    public PropertyNotFoundException(Throwable cause) {
-
-        super(cause);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause The root cause for this exception
-     */
-    public PropertyNotFoundException(String message, Throwable cause) {
-
-        super(message, cause);
-
-    }
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/PropertyResolver.java b/jsf-api/src/main/java/javax/faces/el/PropertyResolver.java
deleted file mode 100644
index 7d4b08e..0000000
--- a/jsf-api/src/main/java/javax/faces/el/PropertyResolver.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-/**
- * <p><strong>PropertyResolver</strong> represents a pluggable mechanism
- * for accessing a "property" of an underlying Java object instance.
- * Different {@link PropertyResolver} implementations can support
- * property resolution on instances of different Java classes (such as
- * introspection-based access to properties of a JavaBeans component, or
- * <code>get()</code> and <code>put()</code> calls on a
- * <code>java.util.Map</code> instance).</p>
- * <p>All implementations must respect the rules for JavaBeans component,
- * <code>java.util.Map</code>, <code>java.util.List</code> and array
- * instances defined for each method but are allowed to add custom
- * semantics for other types.</p>
- *
- * @deprecated This has been replaced by {@link javax.el.ELResolver}.  
- */
-
-public abstract class PropertyResolver {
-
-
-    /**
-     * <p>Return the value of the specified property from the specified
-     * base object.</p>
-     * <p>For a bean base object, the property is coerced to a
-     * <code>String</code> and used as the property name.
-     * For all other base object types (e.g., a Map), the property is used
-     * without any coercing.</p>
-     *
-     * @param base The base object whose property value is to be returned
-     * @param property The property to be returned
-     * @return The property value, or <code>null</code> if <code>base</code>
-     *  or <code>property</code> is <code>null</code>, or if the property
-     *  doesn't exist and the base object is a <code>Map</code> instance
-     *
-     * @throws EvaluationException if an exception is thrown while getting
-     *  the property value (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the specified property
-     *  for a bean base object does not exist or is not readable
-     */
-    public abstract Object getValue(Object base, Object property)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Return the value at the specified index of the specified
-     * base object.</p>
-     *
-     * @param base The base object whose property value is to be returned
-     * @param index The index of the value to return
-     * @return The property value, or <code>null</code> if <code>base</code>
-     *  is <code>null</code>, or if the index is out of bounds for the base
-     *  object
-     *
-     * @throws EvaluationException if an exception is thrown while getting
-     *  the property value (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the index is out of
-     *  bounds or if <code>base</code> is <code>null</code>
-     */
-    public abstract Object getValue(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Set the specified value of the specified property on
-     * the specified base object.</p>
-     * <p>For a bean base object, the property is coerced to a
-     * <code>String</code> and used as the property name.
-     * For all other base object types (e.g., a Map), the property is used
-     * without any coercing.</p>
-     *
-     * @param base The base object whose property value is to be set
-     * @param property The property to be set
-     * @param value The value of the property to be set
-     *
-     * @throws EvaluationException if an exception is thrown while setting
-     *  the property value (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the specified bean base
-     *  object property does not exist or is not writeable, or if
-     *  <code>base</code> or <code>name</code> is <code>null</code>
-     */
-    public abstract void setValue(Object base, Object property, Object value)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Set the value at the specified index of the specified
-     * base object.</p>
-     *
-     * @param base The base object whose property value is to be set
-     * @param index The index of the value to set
-     * @param value The value to be set
-     *
-     * @throws EvaluationException if an exception is thrown while setting
-     *  the property value (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the index is out of
-     *  bounds or if <code>base</code> is <code>null</code>
-     */
-    public abstract void setValue(Object base, int index, Object value)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Checks if the specified property is read-only.</p>
-     * <p>For a bean base object, the property is coerced to a
-     * <code>String</code> and used as the property name.
-     * For all other base object types (e.g., a Map), the property is used
-     * without any coercing.</p>
-     *
-     * @param base The base object whose property is to be analyzed
-     * @param property The property to be analyzed
-     * @return <code>true</code> if the specified property of the specified
-     *  base object is known to be immutable; otherwise <code>false</code>
-     *
-     * @throws EvaluationException if an exception is thrown while testing
-     *  the property (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the specified bean base
-     *  object property does not exist or if <code>base</code> or 
-     *  <code>property</code> is <code>null</code>
-     */
-    public abstract boolean isReadOnly(Object base, Object property)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Checks if the specified index is read-only.</p>
-     *
-     * @param base The base object whose property is to be analyzed
-     * @param index The index of the value whose type is to be returned
-     * @return <code>true</code> if the value at the specified index of
-     *  the specified base object is known to be immutable; otherwise,
-     *  <code>false</code>
-     *
-     * @throws EvaluationException if an exception is thrown while testing
-     *  the property (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the index is out of
-     *  bounds or if <code>base</code> is <code>null</code>
-     */
-    public abstract boolean isReadOnly(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Return the <code>java.lang.Class</code> representing the type
-     * of the specified property.  An instance of any Object of that
-     * type my be set as the value of that property, as long as the
-     * property is not read-only.  The actual value of the property, if
-     * non-null, is guaranteed to be an instance of this type, or an
-     * instance of a subclass of this type.  This method is also useful
-     * for discovering the type of Objects that may be set as the value
-     * of the property.</p>
-     *
-     * <p>For a bean base object, the property is coerced to a
-     * <code>String</code> and used as the property name.  For all other
-     * base object types (e.g., a Map), the property is used without any
-     * coercing.</p>
-     *
-     * @param base The base object whose property is to be analyzed
-     * @param property The property to be analyzed
-     * @return the <code>java.lang.Class</code> representing the type of
-     *  the specified property of the specified base object, if it can be
-     *  determined; otherwise <code>null</code>
-     *
-     * @throws EvaluationException if an exception is thrown while testing
-     *  the property (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the specified bean base
-     *  object property does not exist or if <code>base</code> or
-     *  <code>property</code> is <code>null</code>
-     */
-    public abstract Class getType(Object base, Object property)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Return the <code>java.lang.Class</code> representing the type of
-     * the specified index.</p>
-     *
-     * @param base The base object whose property is to be analyzed
-     * @param index The index of the value whose type is to be returned
-     * @return The <code>java.lang.Class</code> representing the type of
-     *  value at the specified index of the specified base object, if it
-     *  can be determined; otherwise <code>null</code>
-     *
-     * @throws EvaluationException if an exception is thrown while testing
-     *  the property (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws PropertyNotFoundException if the index is out of
-     *  bounds or if <code>base</code> is <code>null</code>
-     */
-    public abstract Class getType(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/ReferenceSyntaxException.java b/jsf-api/src/main/java/javax/faces/el/ReferenceSyntaxException.java
deleted file mode 100644
index 6cdb034..0000000
--- a/jsf-api/src/main/java/javax/faces/el/ReferenceSyntaxException.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-/**
- * <p>An exception reporting a syntax error in a method binding expression
- * or value binding expression.</p>
- *
- * @deprecated This has been replaced by {@link javax.el.ELException}.
- */
-
-public class ReferenceSyntaxException extends EvaluationException {
-
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public ReferenceSyntaxException() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public ReferenceSyntaxException(String message) {
-
-        super(message);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.  The detail
-     * message will be set to <code>(cause == null ? null :
-     * cause.toString()</code>
-     *
-     * @param cause The root cause for this exception
-     */
-    public ReferenceSyntaxException(Throwable cause) {
-
-        super(cause);
-
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause The root cause for this exception
-     */
-    public ReferenceSyntaxException(String message, Throwable cause) {
-
-        super(message, cause);
-
-    }
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/ValueBinding.java b/jsf-api/src/main/java/javax/faces/el/ValueBinding.java
deleted file mode 100644
index 64b5293..0000000
--- a/jsf-api/src/main/java/javax/faces/el/ValueBinding.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><strong>ValueBinding</strong> is an object that can be used
- * to access the property represented by an action or value binding
- * expression.  An immutable {@link ValueBinding} for a particular value binding
- * can be acquired by calling the <code>createValueBinding()</code> method of
- * the {@link javax.faces.application.Application} instance for this web
- * application.</p>
- *
- * @deprecated This has been replaced by {@link javax.el.ValueExpression}.
- */
-
-public abstract class ValueBinding {
-
-
-    /**
-     * <p>Return the value of the property represented by this
-     * {@link ValueBinding}, relative to the specified {@link FacesContext}.
-     * </p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws EvaluationException if an exception is thrown while getting
-     *  the value (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     * @throws PropertyNotFoundException if a specified property name
-     *  does not exist, or is not readable
-     */
-    public abstract Object getValue(FacesContext context)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Set the value of the property represented by this
-     * {@link ValueBinding}, relative to the specified {@link FacesContext}.
-     * </p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param value The new value to be set
-     *
-     * @throws EvaluationException if an exception is thrown while setting
-     *  the value (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     * @throws PropertyNotFoundException if a specified property name
-     *  does not exist, or is not writeable
-     */
-    public abstract void setValue(FacesContext context, Object value)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Return <code>true</code> if the specified property of the specified
-     * property is known to be immutable; otherwise, return
-     * <code>false</code>.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws EvaluationException if an exception is thrown while getting
-     *  the description of the property (the thrown exception must be
-     *  included as the <code>cause</code> property of this exception)
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     * @throws PropertyNotFoundException if a specified property name
-     *  does not exist
-     */
-    public abstract boolean isReadOnly(FacesContext context)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Return the type of the property represented by this
-     * {@link ValueBinding}, relative to the specified {@link FacesContext}.
-     * </p>
-     *
-     * @param context {@link FacesContext} for the current request
-     *
-     * @throws EvaluationException if an exception is thrown while getting
-     *  the description of the property (the thrown exception must be
-     *  included as the <code>cause</code> property of this exception)
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     * @throws PropertyNotFoundException if a specified property name
-     *  does not exist
-     */
-    public abstract Class getType(FacesContext context)
-        throws EvaluationException, PropertyNotFoundException;
-
-
-    /**
-     * <p>Return the (possibly <code>null</code>) expression String,
-     * including the delimiters, from which this
-     * <code>ValueBinding</code> was built.</p>
-     *
-     */
-    public String getExpressionString() {
-	return null;
-    }
-
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/VariableResolver.java b/jsf-api/src/main/java/javax/faces/el/VariableResolver.java
deleted file mode 100644
index affcf79..0000000
--- a/jsf-api/src/main/java/javax/faces/el/VariableResolver.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.el;
-
-
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><strong>VariableResolver</strong> represents a pluggable mechanism
- * for resolving a top-level variable reference at evaluation time.</p>
- *
- * @deprecated This has been replaced by {@link javax.el.ELResolver}
- * when operating with a <code>null</code> <code>base</code> argument.
- */
-
-public abstract class VariableResolver {
-
-
-    /**
-     * <p>Resolve the specified variable name, and return the corresponding
-     * object, if any; otherwise, return <code>null</code>.</p>
-     *
-     * @param context {@link FacesContext} against which to resolve
-     *  this variable name
-     * @param name Name of the variable to be resolved
-     *
-     * @throws EvaluationException if an exception is thrown while resolving
-     *  the variable name (the thrown exception must be included as the
-     *  <code>cause</code> property of this exception)
-     * @throws NullPointerException if <code>context</code>
-     *  or <code>name</code> is <code>null</code>
-     */
-    public abstract Object resolveVariable(FacesContext context, String name)
-        throws EvaluationException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/el/package.html b/jsf-api/src/main/java/javax/faces/el/package.html
deleted file mode 100644
index 0452691..0000000
--- a/jsf-api/src/main/java/javax/faces/el/package.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.el"</title>
-</head>
-<body bgcolor="white">
-<p><b>DEPRECATED</b> Classes and interfaces for evaluating and
-processing reference expressions.  The main class in this package is
-{@link javax.faces.el.ValueBinding}, which is the runtime representation
-of a reference expression.  <code>ValueBinding</code> provides methods
-to get and set the value of the expression.</p>
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/event/AbortProcessingException.java b/jsf-api/src/main/java/javax/faces/event/AbortProcessingException.java
deleted file mode 100644
index 0dca156..0000000
--- a/jsf-api/src/main/java/javax/faces/event/AbortProcessingException.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.event;
-
-
-import javax.faces.FacesException;
-
-
-/**
- * <p>An exception that may be thrown by event listeners to terminate the
- * processing of the current event.</p>
- */
-
-public class AbortProcessingException extends FacesException {
-
-    /**
-     * <p>Construct a new exception with no detail message or root cause.</p>
-     */
-    public AbortProcessingException() {
-        super();
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * no root cause.</p>
-     *
-     * @param message The detail message for this exception
-     */
-    public AbortProcessingException(String message) {
-        super(message);
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified root cause.</p>
-     *
-     * @param cause The root cause for this exception
-     */
-    public AbortProcessingException(Throwable cause) {
-        super(cause);
-    }
-
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause The root cause for this exception
-     */
-    public AbortProcessingException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ActionEvent.java b/jsf-api/src/main/java/javax/faces/event/ActionEvent.java
deleted file mode 100644
index 1c0cb9b..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ActionEvent.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import javax.faces.component.UIComponent;
-
-
-/**
- * <p>An {@link ActionEvent} represents the activation of a user interface
- * component (such as a <code>UICommand</code>).</p>
- */
-
-public class ActionEvent extends FacesEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new event object from the specified source component
-     * and action command.</p>
-     *
-     * @param component Source {@link UIComponent} for this event
-     *
-     * @throws IllegalArgumentException if <code>component</code> is
-     *  <code>null</code>
-     */
-    public ActionEvent(UIComponent component) {
-
-        super(component);
-
-    }
-
-
-    // ------------------------------------------------- Event Broadcast Methods
-
-
-    public  boolean isAppropriateListener(FacesListener listener) {
-
-        return (listener instanceof ActionListener);
-
-    }
-
-    /**
-     * @throws AbortProcessingException {@inheritDoc}
-     */ 
-    public void processListener(FacesListener listener) {
-
-        ((ActionListener) listener).processAction(this);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ActionListener.java b/jsf-api/src/main/java/javax/faces/event/ActionListener.java
deleted file mode 100644
index fcea2c3..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ActionListener.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import javax.faces.component.UIComponent;
-
-
-/**
- * <p><span class="changed_modified_2_0">A</span> listener interface for 
- * receiving {@link ActionEvent}s.  <span class="changed_added_2_0">An
- * implementation
- * of this interface must be thread-safe.</span>  A class that
- * is interested in receiving such events implements this interface, and then
- * registers itself with the source {@link UIComponent} of interest, by
- * calling <code>addActionListener()</code>.</p>
- */
-
-public interface ActionListener extends FacesListener  {
-
-
-    /**
-     * <p>Invoked when the action described by the specified
-     * {@link ActionEvent} occurs.</p>
-     *
-     * @param event The {@link ActionEvent} that has occurred
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     */
-    public void processAction(ActionEvent event)
-        throws AbortProcessingException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/AjaxBehaviorEvent.java b/jsf-api/src/main/java/javax/faces/event/AjaxBehaviorEvent.java
deleted file mode 100644
index f9c6671..0000000
--- a/jsf-api/src/main/java/javax/faces/event/AjaxBehaviorEvent.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-
-/**
- * <p><strong class="changed_added_2_0">AjaxBehaviorEvent</strong>
- * represents the component behavior  specific to 
- * <code>Ajax</code>).</p>
- *
- * @since 2.0
- */
-public class AjaxBehaviorEvent extends BehaviorEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Construct a new event object 
-     * from the specified source component and Ajax behavior.</p>
-     *
-     * @param component Source {@link UIComponent} for this event
-     * @param behavior {@link Behavior} for this event
-     *
-     * @throws IllegalArgumentException if <code>component</code> or
-     * <code>ajaxBehavior</code> is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public AjaxBehaviorEvent(UIComponent component, Behavior behavior) {
-
-        super(component, behavior);
-
-    }
-
-
-    // ------------------------------------------------- Event Broadcast Methods
-
-
-    /**
-     * <p class="changed_added_2_0">Return <code>true</code> if this 
-     * {@link FacesListener} is an instance of a the appropriate 
-     * listener class that this event supports.</p>
-     *
-     * @param listener {@link FacesListener} to evaluate
-     *
-     * @since 2.0
-     */
-    public  boolean isAppropriateListener(FacesListener listener) {
-
-        return (listener instanceof AjaxBehaviorListener);
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Broadcast this event instance 
-     * to the specified {@link FacesListener}, by whatever mechanism 
-     * is appropriate.  Typically, this will be accomplished by calling 
-     * an event processing method, and passing this instance as a 
-     * parameter.</p>
-     *
-     * @param listener {@link FacesListener} to invoke 
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     *
-     * @since 2.0
-     */ 
-    public void processListener(FacesListener listener) {
-
-        ((AjaxBehaviorListener) listener).processAjaxBehavior(this);
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/AjaxBehaviorListener.java b/jsf-api/src/main/java/javax/faces/event/AjaxBehaviorListener.java
deleted file mode 100644
index 0fab8f8..0000000
--- a/jsf-api/src/main/java/javax/faces/event/AjaxBehaviorListener.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-/**
- * <p class="changed_added_2_0">By implementing this class, an object
- * indicates that it is a listener for one or more kinds of {@link
- * BehaviorEvent}s.</p>
- *
- * @since 2.0
- */
-public interface AjaxBehaviorListener extends BehaviorListener {
-
-
-    /**
-     * <p class="changed_added_2_0">
-     *
-     * @param event the <code>AjaxBehaviorEvent</code> instance that
-     * is being processed.
-     *
-     * @throws AbortProcessingException if lifecycle processing should
-     * cease for this request.
-     *
-     * @since 2.0
-     */
-    public void processAjaxBehavior(AjaxBehaviorEvent event) 
-        throws AbortProcessingException;
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/BehaviorEvent.java b/jsf-api/src/main/java/javax/faces/event/BehaviorEvent.java
deleted file mode 100644
index 89f9af8..0000000
--- a/jsf-api/src/main/java/javax/faces/event/BehaviorEvent.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.event.FacesEvent;
-
-/**
- * <p><strong class="changed_added_2_0">BehaviorEvent</strong> is
- * the event that can be generated from component 
- * {@link javax.faces.component.behavior.Behavior}.
- * </p>
- *
- * @since 2.0
- */
-public abstract class BehaviorEvent extends FacesEvent {
-
-    private final Behavior behavior;
-
-    /**
-     * <p class="changed_added_2_0">Construct a new event object 
-     * from the specified source component and <code>behavior</code>.</p>
-     *
-     * @param component Source {@link UIComponent} for this event
-     * @param behavior {@link Behavior} that sent this event
-     *
-     * @throws IllegalArgumentException if <code>component</code> or 
-     * <code>behavior</code> is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public BehaviorEvent(UIComponent component, Behavior behavior) {
-        super(component);
-
-        if (null == behavior) {
-            throw new IllegalArgumentException("Behavior agrument cannot be null");
-        }
-        
-        this.behavior = behavior;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the source {@link Behavior} 
-     * that sent this event.
-     *
-     * @since 2.0
-     */
-    public Behavior getBehavior() {
-        return behavior;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/BehaviorListener.java b/jsf-api/src/main/java/javax/faces/event/BehaviorListener.java
deleted file mode 100644
index 17ee5bc..0000000
--- a/jsf-api/src/main/java/javax/faces/event/BehaviorListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-/**
- * <p class="changed_added_2_0">A generic base interface for event 
- * listeners for various types of {@link BehaviorEvent}s.  All listener 
- * interfaces for specific {@link BehaviorEvent} event types must 
- * extend this interface.</p>
- *
- * <p>Implementations of this interface must have a zero-args public
- * constructor.  If the class that implements this interface has state
- * that needs to be saved and restored between requests, the class must
- * also implement {@link javax.faces.component.StateHolder}.</p>
- *
- * @since 2.0
- */
-public interface BehaviorListener extends FacesListener {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ComponentSystemEvent.java b/jsf-api/src/main/java/javax/faces/event/ComponentSystemEvent.java
deleted file mode 100644
index 844f78e..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ComponentSystemEvent.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p><strong class="changed_added_2_0">ComponentSystemEvent</strong> is
- * the base class for {@link SystemEvent}s that are specific to a {@link
- * UIComponent} instance.</p>
- *
- * @since 2.0
- */
-public abstract class ComponentSystemEvent extends SystemEvent {
-
-    private static final long serialVersionUID = -4726746661822507506L;
-
-    
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Pass the argument
-     * <code>component</code> to the superclass constructor.</p>
-
-     * @param component the <code>UIComponent</code> reference to be
-     * passed to the superclass constructor.
-     *
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     * 
-     * @since 2.0
-     */
-    public ComponentSystemEvent(UIComponent component) {
-        super(component);
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p class="changed_added_2_0">the source {@link UIComponent} that sent this event.</p>
-     * 
-     * @since 2.0
-     */
-    public UIComponent getComponent() {
-
-        return ((UIComponent) getSource());
-
-    }    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ComponentSystemEventListener.java b/jsf-api/src/main/java/javax/faces/event/ComponentSystemEventListener.java
deleted file mode 100644
index 771b1e9..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ComponentSystemEventListener.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-/**
- *  <p class="changed_added_2_0">Implementors of this class do not need
- *  an <code>isListenerForSource()</code> method because they are only
- *  installed on specific component instances, therefore the
- *  <code>isListenerForSource()</code> method is implicit.  Also, the 
- * {@link #processEvent} method on this interface takes a 
- * {@link ComponentSystemEvent} because the event will always be associated with
- * a {@link javax.faces.component.UIComponent} instance.</p>
- *
- * @since 2.0
- */
-public interface ComponentSystemEventListener extends FacesListener {
-
-    /**
-     * <p>When called, the listener can assume that any guarantees given
-     * in the javadoc for the specific {@link SystemEvent}
-     * subclass are true.</p>
-     *
-     * @param event the <code>ComponentSystemEvent</code> instance that
-     * is being processed.
-     *
-     * @throws AbortProcessingException if lifecycle processing should
-     * cease for this request.
-     */
-    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException;
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/EventHierarchy.jpg b/jsf-api/src/main/java/javax/faces/event/EventHierarchy.jpg
deleted file mode 100644
index b375ab2..0000000
Binary files a/jsf-api/src/main/java/javax/faces/event/EventHierarchy.jpg and /dev/null differ
diff --git a/jsf-api/src/main/java/javax/faces/event/ExceptionQueuedEvent.java b/jsf-api/src/main/java/javax/faces/event/ExceptionQueuedEvent.java
deleted file mode 100644
index bd64a53..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ExceptionQueuedEvent.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-/**
- * <p class="changed_added_2_0">The system event facility will create an
- * instance of this class whenever {@link
- * javax.faces.application.Application#publishEvent} is called with
- * <code>ExceptionQueuedEvent.class</code> as <code>systemEventClass</code>
- * argument.  In this case, an instance of {@link ExceptionQueuedEventContext}
- * must be passed as the <code>source</code> argument.  The specification
- * for <code>publishEvent()</code>, requires the instantiation of the
- * <code>systemEventClass</code> argument, passing the
- * <code>source</code> argument to the constructor.</p>
- *
- * @since 2.0
- */
-public class ExceptionQueuedEvent extends SystemEvent {
-    
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>ExceptionQueuedEvent</code> that indicates the argument
-     * <code>ExceptionQueuedEventContext</code> occurred.</p>
-     *
-     * @param eventContext the <code>ExceptionQueuedEventContext</code> that
-     * contextualizes this <code>ExceptionQueuedEvent</code>.
-     *
-     * @since 2.0
-     */
-
-    public ExceptionQueuedEvent(ExceptionQueuedEventContext eventContext) {
-        super(eventContext);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the
-     * <code>ExceptionQueuedEventContext</code> for this event instance.</p>
-     *
-     * @since 2.0
-     */
-
-    public ExceptionQueuedEventContext getContext() {
-	return (ExceptionQueuedEventContext) getSource();
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ExceptionQueuedEventContext.java b/jsf-api/src/main/java/javax/faces/event/ExceptionQueuedEventContext.java
deleted file mode 100644
index 440dbf6..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ExceptionQueuedEventContext.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Collections;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p class="changed_added_2_0">This helper class provides context to
- * the {@link ExceptionQueuedEvent} regarding the state of the system at the
- * point in time when the <code>ExceptionQueuedEvent</code> occurs and links
- * the <code>ExceptionQueuedEvent</code> to the {@link
- * javax.faces.context.ExceptionHandler} by virtue of implementing
- * {@link SystemEventListener}.</p>
- *
- * @since 2.0
- */
-
-public class ExceptionQueuedEventContext implements SystemEventListenerHolder {
-
-    /**
-     * <p class="changed_added_2_0">The presence of an entry under this
-     * key in the <code>Map</code> returned from {@link #getAttributes}
-     * indicates the event occurred during the “before
-     * phase” part of the current lifecycle phase.</p>
-     */
-    public static final String IN_BEFORE_PHASE_KEY =
-          ExceptionQueuedEventContext.class.getName() + ".IN_BEFORE_PHASE";
-    
-    /**
-     * <p class="changed_added_2_0">The presence of an entry under this
-     * key in the <code>Map</code> returned from {@link #getAttributes}
-     * indicates the event occurred during the “after
-     * phase” part of the current lifecycle phase.</p>
-     */
-    public static final String IN_AFTER_PHASE_KEY =
-          ExceptionQueuedEventContext.class.getName() + ".IN_AFTER_PHASE";
-
-    private FacesContext context;
-    private Throwable thrown;
-    private UIComponent component;
-    private PhaseId phaseId;
-    private Map<Object, Object> attributes;
-    private List<SystemEventListener> listener;
-
-    
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>ExceptionQueuedEventContext</code> that indicates the argument
-     * <code>Throwable</code> just occurred.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param thrown the <code>Throwable</code> that is the context for
-     * this <code>ExceptionQueuedEventContext</code> instance.
-     */
-    public ExceptionQueuedEventContext(FacesContext context, Throwable thrown) {
-
-        this(context, thrown, null, null);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>ExceptionQueuedEventContext</code> that indicates the argument
-     * <code>Throwable</code> just occurred, relevant to the argument
-     * <code>component</code>.
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param thrown the <code>Throwable</code> that is the context for
-     * this <code>ExceptionQueuedEventContext</code> instance.
-     * @param component the {@link UIComponent} instance to which this
-     * <code>ExceptionQueuedEventContext</code> pertains
-
-     */
-    public ExceptionQueuedEventContext(FacesContext context,
-                                 Throwable thrown,
-                                 UIComponent component) {
-
-        this (context, thrown, component, null);
-
-    }
-            
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>ExceptionQueuedEventContext</code> that indicates the argument
-     * <code>Throwable</code> just occurred, relevant to the argument
-     * <code>component</code>, during the lifecycle phase
-     * <code>phaseId</code>.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-
-     * @param thrown the <code>Throwable</code> that is the context for
-     * this <code>ExceptionQueuedEventContext</code> instance.
-     *
-     * @param component the <code>UIComponent</code> that is relevant to
-     * the context.
-     *
-     * @param phaseId the <code>PhaseId</code> at the time this
-     * <code>ExeceptionEventContext</code> is created.
-     */
-    public ExceptionQueuedEventContext(FacesContext context,
-                                 Throwable thrown,
-                                 UIComponent component,
-                                 PhaseId phaseId) {
-
-        this.context = context;
-        this.thrown = thrown;
-        this.component = component;
-        this.phaseId = ((phaseId == null)
-                           ? context.getCurrentPhaseId()
-                           : phaseId);
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     * @return the {@link FacesContext} used to create this
-     *  <code>ExceptionQueuedEventContext</code> instance.
-     */
-    public FacesContext getContext() {
-
-        return context;
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>exception</code>
-     * property.</p>
-     */
-    public Throwable getException() {
-
-        return thrown;
-
-    }
-
-    
-    /**
-     * <p class="changed_added_2_0">Return the <code>UIComponent</code>
-     * which was being processed when the exception was thrown. If none
-     * or not available, this will be <code>null</code>.</p>
-     */
-    public UIComponent getComponent() {
-
-        return this.component;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>PhaseId</code>
-     * which was being processed when the exception was thrown. If none
-     * or not available, this will be <code>null</code>.</p>
-     */
-    public PhaseId getPhaseId() {
-
-        return this.phaseId;
-
-    }
-
-
-    /**
-     * @return <code>true</code> if the exception occurred during the
-     *  <code>before phase</code> processing for a particular lifecycle
-     *  phase
-     */
-    public boolean inBeforePhase() {
-
-        return isAttributeDefined(IN_BEFORE_PHASE_KEY);
-
-    }
-
-
-    /**
-     * @return <code>true</code> if the exception occurred during the
-     *  <code>after phase</code> processing for a particular lifecycle
-     *  phase
-     */
-    public boolean inAfterPhase() {
-
-        return isAttributeDefined(IN_AFTER_PHASE_KEY);
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">A <code>Map</code> of attributes
-     * relevant to the context of this <code>ExceptionQueuedEvent</code>.</p>
-     */
-    public Map<Object, Object> getAttributes() {
-
-        if (null == attributes) {
-            attributes = new HashMap<Object,Object>();
-        }
-        return attributes;
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return a <code>List</code> that
-     * contains a single entry, the {@link
-     * javax.faces.context.ExceptionHandler} for the current
-     * request.</p>
-     */
-    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> facesEventClass) {
-
-        if (null == listener) {
-            List<SystemEventListener> list = new ArrayList<SystemEventListener>(1);
-            list.add(context.getExceptionHandler());
-            listener = Collections.unmodifiableList(list);
-        }
-        return listener;
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private boolean isAttributeDefined(String key) {
-
-        return ((attributes != null) && attributes.containsKey(key));
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/FacesEvent.java b/jsf-api/src/main/java/javax/faces/event/FacesEvent.java
deleted file mode 100644
index 74cc62b..0000000
--- a/jsf-api/src/main/java/javax/faces/event/FacesEvent.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import java.util.EventObject;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-
-
-/**
- * <p><strong>FacesEvent</strong> is the base class for user interface and
- * application events that can be fired by {@link UIComponent}s.  Concrete
- * event classes must subclass {@link FacesEvent} in order to be supported
- * by the request processing lifecycle.</p>
- */
-
-public abstract class FacesEvent extends EventObject {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new event object from the specified source component.</p>
-     *
-     * @param component Source {@link UIComponent} for this event
-     *
-     * @throws IllegalArgumentException if <code>component</code> is
-     *  <code>null</code>
-     */
-    public FacesEvent(UIComponent component) {
-
-        super(component);
-
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the source {@link UIComponent} that sent this event.
-     */
-    public UIComponent getComponent() {
-
-        return ((UIComponent) getSource());
-
-    }
-
-    private PhaseId phaseId = PhaseId.ANY_PHASE;
-
-    /**
-     * <p>Return the identifier of the request processing phase during
-     * which this event should be delivered.  Legal values are the
-     * singleton instances defined by the {@link PhaseId} class,
-     * including <code>PhaseId.ANY_PHASE</code>, which is the default
-     * value.</p>
-     */
-    public PhaseId getPhaseId() {
-	return phaseId;
-    }
-   
-    /**
-     * <p>Set the {@link PhaseId} during which this event will be
-     * delivered.</p>
-     *
-     * @throws IllegalArgumentException phaseId is null.
-     *
-     */ 
-
-    public void setPhaseId(PhaseId phaseId) {
-	if (null == phaseId) {
-	    throw new IllegalArgumentException();
-	}
-	this.phaseId = phaseId;
-    }
-
-
-    // ------------------------------------------------- Event Broadcast Methods
-
-
-    /**
-     * <p>Convenience method to queue this event for broadcast at the end
-     * of the current request processing lifecycle phase.</p>
-     *
-     * @throws IllegalStateException if the source component for this
-     *  event is not a descendant of a {@link UIViewRoot}
-     */
-    public void queue() {
-
-        getComponent().queueEvent(this);
-
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if this {@link FacesListener} is an instance
-     * of a listener class that this event supports.  Typically, this will be
-     * accomplished by an "instanceof" check on the listener class.</p>
-     *
-     * @param listener {@link FacesListener} to evaluate
-     */
-    public abstract boolean isAppropriateListener(FacesListener listener);
-
-
-    /**
-     * <p>Broadcast this {@link FacesEvent} to the specified
-     * {@link FacesListener}, by whatever mechanism is appropriate.  Typically,
-     * this will be accomplished by calling an event processing method, and
-     * passing this {@link FacesEvent} as a paramter.</p>
-     *
-     * @param listener {@link FacesListener} to send this {@link FacesEvent} to
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     */
-    public abstract void processListener(FacesListener listener);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/FacesListener.java b/jsf-api/src/main/java/javax/faces/event/FacesListener.java
deleted file mode 100644
index 9cf5e50..0000000
--- a/jsf-api/src/main/java/javax/faces/event/FacesListener.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import java.util.EventListener;
-
-
-/**
- * <p>A generic base interface for event listeners for various types of
- * {@link FacesEvent}s.  All listener interfaces for specific
- * {@link FacesEvent} event types must extend this interface.</p>
- *
- * <p>Implementations of this interface must have a zero-args public
- * constructor.  If the class that implements this interface has state
- * that needs to be saved and restored between requests, the class must
- * also implement {@link javax.faces.component.StateHolder}.</p>
- */
-
-public interface FacesListener extends EventListener {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ListenerFor.java b/jsf-api/src/main/java/javax/faces/event/ListenerFor.java
deleted file mode 100644
index 40f990d..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ListenerFor.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">Classes tagged with this annotation are
- * installed as listeners using the method {@link
- * javax.faces.application.Application#subscribeToEvent} or {@link
- * javax.faces.component.UIComponent#subscribeToEvent} (depending on the
- * circumstances, described below).</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>The default implementation must support attaching this annotation
- * to {@link javax.faces.component.UIComponent} or {@link
- * javax.faces.render.Renderer} classes.  In both cases, the annotation
- * processing described herein must commence during the implementation
- * of any variant of {@link
- * javax.faces.application.Application}<code>.createComponent()</code>
- * and must complete before the <code>UIComponent</code> instance is
- * returned from <code>createComponent()</code>. The annotation
- * processing must proceed according to an algorithm semantically
- * equivalent to the following.</p>
-
- * <ul>
-
-          <li><p> If this annotation is not present on the class in
-          question, no action must be taken.  </p></li>
-
-          <p>Determine the "target" on which to call
-          <code>subscribeToEvent</code>.</p>
-
-          <p>If the class to which this annotation is attached
-          implements {@link ComponentSystemEventListener} and is a
-          <code>UIComponent</code> instance, "target" is the
-          <code>UIComponent</code> instance.</p>
-
-          <p>If the class to which this annotation is attached
-          implements {@link ComponentSystemEventListener} and is a
-          <code>Renderer</code> instance, "target" is the
-          <code>UIComponent</code> instance that is to be rendered by
-          this <code>Renderer</code> instance.</p>
-
-          <p>If the class to which this annotation is attached
-          implements {@link ComponentSystemEventListener} and is neither
-          an instance of <code>Renderer</code> nor
-          <code>UIComponent</code>, the action taken is
-          unspecified. This case must not trigger any kind of error.</p>
-
-	  <p>If the class to which this annotation is attached
-	  implements <code>SystemEventListener</code> and does not
-	  implement <code>ComponentSystemEventListener</code>, "target"
-	  is the {@link javax.faces.application.Application}
-	  instance.</p>
-
-          </li>
-
-	  <li>
-
-          <p>Determine the variant of <code>subscribeToEvent()</code>to
-          call and the parameters to pass to it.</p>
-
-          <p>If "target" is a <code>UIComponent</code> call {@link
-          javax.faces.component.UIComponent#subscribeToEvent(Class,
-          ComponentSystemEventListener)}, passing the {@link
-          #systemEventClass} of the annotation as the first argument and
-          the instance of the class to which this annotation is attached
-          (which must implement
-          <code>ComponentSystemEventListener</code>) as the second
-          argument.</p>
-
-          <p>If "target" is the {@link
-          javax.faces.application.Application} instance, inspect the
-          value of the {@link #sourceClass} annotation attribute value.</p>
-
-          <p>If the value is <code>Void.class</code>, call {@link
-          javax.faces.application.Application#subscribeToEvent(Class,
-          SystemEventListener)}, passing the value of {@link
-          #systemEventClass} as the first argument and the instance of the
-          class to which this annotation is attached (which must
-          implement <code>SystemEventListener) as the second
-          argument.</code></p>
-
-          <p>Otherwise, call {@link
-          javax.faces.application.Application#subscribeToEvent(Class,
-          Class, SystemEventListener)}, passing the value of {@link
-          #systemEventClass} as the first argument, the value of {@link
-          #sourceClass} as the second argument, and the instance of the
-          class to which this annotation is attached (which must
-          implement <code>SystemEventListener) as the third
-          argument.</code></p>
-
-          </li>
-
- * </ul>
-
- * <p>Example: The standard renderer for
- * <code>javax.faces.resource.Stylesheet</code> must have the following
- * annotation declaration:</p>
-
- * <pre><code>@ListenerFor(systemEventClass=PostAddToViewEvent.class)</code></pre>
-
- * <p>This will cause the renderer to be added as a listener for the
- * {@link PostAddToViewEvent} to all components that list it as their
- * renderer.</p>
-
- * </div>
- *
- * @since 2.0
- */
-
- at Retention(value=RetentionPolicy.RUNTIME)
- at Target(value=ElementType.TYPE)
- at Inherited
-public @interface ListenerFor {
-
-    /**
-     * <p class="changed_added_2_0">The kind of system event for which
-     * this class will be installed as a listener.  The implementation
-     * only supports exact matches on the <code>Class</code> and must
-     * not honor subclass relationships.  It is valid to have EL
-     * Expressions in the value of this attribute, as long as the
-     * expression resolves to an instance of the expected type.</p>
-     */
-
-    public Class<? extends SystemEvent> systemEventClass();
-
-
-    /**
-     * <p class="changed_added_2_0">The kind of object that emits events
-     * of the type given by the value of the {@link #systemEventClass}
-     * attribute.  It is valid to have EL Expressions in the value of
-     * this attribute, as long as the expression resolves to an instance
-     * of the expected type.</p>
-     */ 
-    public Class sourceClass() default Void.class;
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ListenersFor.java b/jsf-api/src/main/java/javax/faces/event/ListenersFor.java
deleted file mode 100644
index f569efe..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ListenersFor.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.event;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-
-
-/**
- * <p class="changed_added_2_0">Container annotation to specify multiple
- * {@link ListenerFor} annotations on a single class.  Example:</p>
-
- * <pre><code>
-
-    @ListenersFor({
-        @ListenerFor(systemEventClass=PostAddToViewEvent.class),
-        @ListenerFor(systemEventClass=BeforeRenderEvent.class,
-                     sourceClass=CustomOutput.class)
-    })
-
- * </code></pre>
-
- * <div class="changed_added_2_0">
-
- * <p>The action described in {@link ListenerFor} must be taken for each
- * <code>@ListenerFor</code> present in the container
- * annotation. </p>
-
- * </div>
-
- * @since 2.0
- */
- at Retention(value= RetentionPolicy.RUNTIME)
- at Target(value= ElementType.TYPE)
- at Inherited
-public @interface ListenersFor {
-
-    ListenerFor[] value();
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/MethodExpressionActionListener.java b/jsf-api/src/main/java/javax/faces/event/MethodExpressionActionListener.java
deleted file mode 100644
index 7ad9566..0000000
--- a/jsf-api/src/main/java/javax/faces/event/MethodExpressionActionListener.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.MethodExpression;
-import javax.faces.context.FacesContext;
-import javax.faces.component.StateHolder;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.io.StringWriter;
-import java.io.PrintWriter;
-import javax.el.MethodNotFoundException;
-
-/**
- * <p><strong><span
- * class="changed_modified_2_0">MethodExpressionActionListener</span></strong>
- * is an {@link ActionListener} that wraps a {@link
- * MethodExpression}. When it receives a {@link ActionEvent}, it
- * executes a method on an object identified by the {@link
- * MethodExpression}.</p>
- */
-
-public class MethodExpressionActionListener implements ActionListener,
-    StateHolder {
-
-    private static final Logger LOGGER =
-          Logger.getLogger("javax.faces.event", "javax.faces.LogStrings");
-    
-
-    // ------------------------------------------------------ Instance Variables
-
-    private MethodExpression methodExpressionOneArg = null;
-    private MethodExpression methodExpressionZeroArg = null;
-    private boolean isTransient;
-    private final static Class[] ACTION_LISTENER_ZEROARG_SIG = new Class[] { };
-
-    public MethodExpressionActionListener() { }
-
-    /**
-     * <p><span class="changed_modified_2_0">Construct<span
-     * class="changed_modified_2_0"> a {@link ValueChangeListener} that
-     * contains a {@link MethodExpression}.  <span
-     * class="changed_added_2_0">To accomodate method expression targets
-     * that take no arguments instead of taking an {@link ActionEvent}
-     * argument</span>, the implementation of this class must take the
-     * argument <code>methodExpressionOneArg</code>, extract its
-     * expression string, and create another
-     * <code>MethodExpression</code> whose expected param types match
-     * those of a zero argument method.  The usage requirements for both
-     * of these <code>MethodExpression</code> instances are described in
-     * {@link #processAction}.</span></p>
-     *
-     * @param methodExpressionOneArg a <code>MethodExpression</code>
-     * that points to a method that returns <code>void</code> and takes
-     * a single argument of type {@link ActionEvent}.
-     */
-    public MethodExpressionActionListener(MethodExpression methodExpressionOneArg) {
-
-        super();
-        this.methodExpressionOneArg = methodExpressionOneArg;
-        FacesContext context = FacesContext.getCurrentInstance();
-        ELContext elContext = context.getELContext();
-        this.methodExpressionZeroArg = context.getApplication().
-                getExpressionFactory().createMethodExpression(elContext, 
-                  methodExpressionOneArg.getExpressionString(), Void.class, 
-                  ACTION_LISTENER_ZEROARG_SIG);
-
-    }
-
-    public MethodExpressionActionListener(MethodExpression methodExpressionOneArg,
-            MethodExpression methodExpressionZeroArg) {
-
-        super();
-        this.methodExpressionOneArg = methodExpressionOneArg;
-        this.methodExpressionZeroArg = methodExpressionZeroArg;
-
-    }
-
-    // ------------------------------------------------------- Event Method
-
-    /**
-     * <p><span class="changed_modified_2_0">Call</span> through to the
-     * {@link MethodExpression} passed in our constructor.  <span
-     * class="changed_added_2_0">First, try to invoke the
-     * <code>MethodExpression</code> passed to the constructor of this
-     * instance, passing the argument {@link ActionEvent} as the
-     * argument.  If a {@link MethodNotFoundException} is thrown, call
-     * to the zero argument <code>MethodExpression</code> derived from
-     * the <code>MethodExpression</code> passed to the constructor of
-     * this instance.  If that fails for any reason, throw an {@link
-     * AbortProcessingException}, including the cause of the
-     * failure.</span></p>
-     * 
-     * @throws NullPointerException {@inheritDoc}     
-     * @throws AbortProcessingException {@inheritDoc}     
-     */
-    public void processAction(ActionEvent actionEvent) throws AbortProcessingException {
-
-        Throwable cause = null;
-        Throwable thrown = null;
-        if (actionEvent == null) {
-            throw new NullPointerException();
-        }
-        FacesContext context = FacesContext.getCurrentInstance();
-        ELContext elContext = context.getELContext();
-        try {
-            methodExpressionOneArg.invoke(elContext, new Object[] {actionEvent});
-        } catch (MethodNotFoundException mnfe) {
-          if (null != methodExpressionZeroArg) {
-                try {
-                    // try to invoke a no-arg version
-                    methodExpressionZeroArg.invoke(elContext, new Object[]{});
-                }
-                catch (ELException ee) {
-                    cause = ee.getCause();
-                    thrown = ee;
-                }
-              
-          }
-        } catch (ELException ee) {
-            cause = ee.getCause();
-            thrown = ee;
-        }
-        if (null != thrown) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           "severe.event.exception_invoking_processaction",
-                           new Object[]{
-                                 cause == null ? thrown.getClass().getName() : cause.getClass().getName(),
-                                 methodExpressionOneArg.getExpressionString(),
-                                 actionEvent.getComponent().getId()
-                           });
-                StringWriter writer = new StringWriter(1024);
-                if (cause == null) {
-                    thrown.printStackTrace(new PrintWriter(writer));
-                } else {
-                    cause.printStackTrace(new PrintWriter(writer));
-                }
-                LOGGER.severe(writer.toString());
-            }
-            throw cause == null ? new AbortProcessingException(thrown.getMessage(), 
-                    thrown) : new AbortProcessingException(thrown.getMessage(), cause);
-            
-        }
-    }
-
-
-    // ------------------------------------------------ Methods from StateHolder
-
-
-    /**
-     * <p class="changed_modified_2_0">Both {@link MethodExpression}
-     * instances described in the constructor must be saved.</p>
-     */
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        return new Object[] { methodExpressionOneArg, methodExpressionZeroArg  };
-
-    }
-
-
-    /**
-     * <p class="changed_modified_2_0">Both {@link MethodExpression}
-     * instances described in the constructor must be restored.</p>
-     */
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-        methodExpressionOneArg = (MethodExpression) ((Object[]) state)[0];
-        methodExpressionZeroArg = (MethodExpression) ((Object[]) state)[1];
-
-    }
-
-
-    public boolean isTransient() {
-
-        return isTransient;
-
-    }
-
-
-    public void setTransient(boolean newTransientValue) {
-
-        isTransient = newTransientValue;
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/MethodExpressionValueChangeListener.java b/jsf-api/src/main/java/javax/faces/event/MethodExpressionValueChangeListener.java
deleted file mode 100644
index 728f253..0000000
--- a/jsf-api/src/main/java/javax/faces/event/MethodExpressionValueChangeListener.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.MethodExpression;
-import javax.el.MethodNotFoundException;
-import javax.faces.context.FacesContext;
-import javax.faces.component.StateHolder;
-
-/**
- * <p><strong><span
- * class="changed_modified_2_0">MethodExpressionValueChangeListener</span></strong>
- * is a {@link ValueChangeListener} that wraps a {@link
- * MethodExpression}. When it receives a {@link ValueChangeEvent}, it
- * executes a method on an object identified by the {@link
- * MethodExpression}.</p>
- */
-
-public class MethodExpressionValueChangeListener implements ValueChangeListener,
-    StateHolder {
-
-
-    // ------------------------------------------------------ Instance Variables
-    
-    private MethodExpression methodExpressionOneArg = null;
-    private MethodExpression methodExpressionZeroArg = null;
-    private boolean isTransient;
-    private final static Class[] VALUECHANGE_LISTENER_ZEROARG_SIG = new Class[] { };
-    
-
-    public MethodExpressionValueChangeListener() { }
-
-   /**
-     * <p><span class="changed_modified_2_0">Construct</span> a {@link
-     * ValueChangeListener} that contains a {@link
-     * MethodExpression}.<span
-     * class="changed_added_2_0">To accomodate method expression targets
-     * that take no arguments instead of taking a {@link
-     * ValueChangeEvent} argument</span>, the implementation of this
-     * class must take the argument <code>methodExpressionOneArg</code>,
-     * extract its expression string, and create another
-     * <code>MethodExpression</code> whose expected param types match
-     * those of a zero argument method.  The usage requirements for both
-     * of these <code>MethodExpression</code> instances are described in
-     * {@link #processValueChange}.</span></p>
-     *
-     * @param methodExpressionOneArg a <code>MethodExpression</code>
-     * that points to a method that returns <code>void</code> and takes
-     * a single argument of type {@link ValueChangeEvent}.
-     */
-    public MethodExpressionValueChangeListener(MethodExpression methodExpressionOneArg) {
-
-        super();
-        this.methodExpressionOneArg = methodExpressionOneArg;
-        FacesContext context = FacesContext.getCurrentInstance();
-        ELContext elContext = context.getELContext();
-        this.methodExpressionZeroArg = context.getApplication().
-                getExpressionFactory().createMethodExpression(elContext, 
-                  methodExpressionOneArg.getExpressionString(), Void.class, 
-                  VALUECHANGE_LISTENER_ZEROARG_SIG);
-    }
-
-   /**
-     * <p>Construct a {@link ValueChangeListener} that contains a {@link MethodExpression}.</p>
-     */
-    public MethodExpressionValueChangeListener(MethodExpression methodExpressionOneArg,
-            MethodExpression methodExpressionZeroArg) {
-
-        super();
-        this.methodExpressionOneArg = methodExpressionOneArg;
-        this.methodExpressionZeroArg = methodExpressionZeroArg;
-
-    }
-
-    // ------------------------------------------------------- Event Method
-
-    /**
-     * <p><span class="changed_modified_2_0">Call</span> through to the
-     * {@link MethodExpression} passed in our constructor.  <span
-     * class="changed_added_2_0">First, try to invoke the
-     * <code>MethodExpression</code> passed to the constructor of this
-     * instance, passing the argument {@link ValueChangeEvent} as the
-     * argument.  If a {@link MethodNotFoundException} is thrown, call
-     * to the zero argument <code>MethodExpression</code> derived from
-     * the <code>MethodExpression</code> passed to the constructor of
-     * this instance.  If that fails for any reason, throw an {@link
-     * AbortProcessingException}, including the cause of the
-     * failure.</span></p>
-     * 
-     * @throws NullPointerException {@inheritDoc}     
-     * @throws AbortProcessingException {@inheritDoc}     
-     */ 
-    public void processValueChange(ValueChangeEvent valueChangeEvent) throws AbortProcessingException {
-                         
-        if (valueChangeEvent == null) {
-            throw new NullPointerException();
-        }
-        FacesContext context = FacesContext.getCurrentInstance();
-        ELContext elContext = context.getELContext();
-        // PENDING: The corresponding code in MethodExpressionActionListener
-        // has an elaborate message capture, logging, and rethrowing block.
-        // Why not here?
-        try {
-            methodExpressionOneArg.invoke(elContext, new Object[] {valueChangeEvent});
-        } catch (MethodNotFoundException mnf) {
-            if (null != methodExpressionZeroArg) {
-
-                try {
-                    // try to invoke a no-arg version
-                    methodExpressionZeroArg.invoke(elContext, new Object[]{});
-                }
-                catch (ELException ee) {
-                    throw new AbortProcessingException(ee.getMessage(), ee.getCause());
-                }
-            }
-        } catch (ELException ee) {
-            throw new AbortProcessingException(ee.getMessage(), ee.getCause());
-        }
-    }
-
-
-    // ------------------------------------------------ Methods from StateHolder
-
-
-    /**
-     * <p class="changed_modified_2_0">Both {@link MethodExpression}
-     * instances described in the constructor must be saved.</p>
-     */
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        return new Object[] { methodExpressionOneArg, methodExpressionZeroArg };
-
-    }
-
-
-    /**
-     * <p class="changed_modified_2_0">Both {@link MethodExpression}
-     * instances described in the constructor must be restored.</p>
-     */
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-        methodExpressionOneArg = (MethodExpression) ((Object[]) state)[0];
-        methodExpressionZeroArg = (MethodExpression) ((Object[]) state)[1];
-
-    }
-
-
-    public boolean isTransient() {
-
-        return isTransient;
-
-    }
-
-
-    public void setTransient(boolean newTransientValue) {
-
-        isTransient = newTransientValue;
-
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/NamedEvent.java b/jsf-api/src/main/java/javax/faces/event/NamedEvent.java
deleted file mode 100644
index 4d94254..0000000
--- a/jsf-api/src/main/java/javax/faces/event/NamedEvent.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a {@link
- * ComponentSystemEvent} for use with the <code><f:event /></code>
- * tag in a page.  The value of the {@link #shortName} attribute is taken to
- * be the short name for the {@link javax.faces.event.ComponentSystemEvent}.
- * If the <em>shortName</em> has already been registered, the current class 
- * must be added to a
- * List of of duplicate events for that name.  If the event name is then 
- * referenced by an
- * application, a <code>FacesException</code> must be thrown listing the 
- * <em>shortName</em> and the offending classes.</p>
- * @since 2.0
- */
-
- at Documented
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface NamedEvent {
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the short name for the  {@link
-     * javax.faces.event.ComponentSystemEvent}.  If the value of this
-     * attribute is ommitted, the following algorithm must be used
-     * by the code that processes this annotation to determine its value.</p>
-     * 
-     * <div class="changed_added_2_0">
-
-	<ol>
-
-	  <li><p>Get the unqualified class name (e.g.,
-	  <code>UserLoginEvent</code>) </p></li>
-
-	  <li><p>Strip off the trailing "Event", if present (e.g.,
-	  <code>UserLogin</code>) </p></li>
-
-	  <li><p>Convert the first character to lower-case (e.g.,
-	  <code>userLogin</code>) </p></li>
-
-	  <li><p>Prepend the package name to the lower-cased name.
-	  </p></li>
-
-	</ol>
-
-     *
-     * </div>
-     */
-    String shortName() default "";
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PhaseEvent.java b/jsf-api/src/main/java/javax/faces/event/PhaseEvent.java
deleted file mode 100644
index 9afc916..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PhaseEvent.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import java.util.EventObject;
-import javax.faces.context.FacesContext;
-import javax.faces.lifecycle.Lifecycle;
-
-
-/**
- * <p><strong>PhaseEvent</strong> represents the beginning or ending of
- * processing for a particular phase of the request processing lifecycle,
- * for the request encapsulated by the specified {@link FacesContext}.</p>
- */
-
-public class PhaseEvent extends EventObject {
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Construct a new event object from the specified parameters.
-     * The specified {@link Lifecycle} will be the source of this event.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param phaseId Identifier of the current request processing
-     *  lifecycle phase
-     * @param lifecycle Lifecycle instance
-     *
-     * @throws NullPointerException if <code>context</code> or
-     *  <code>phaseId</code> or <code>Lifecycle</code>is <code>null</code>
-     */
-    public PhaseEvent(FacesContext context, PhaseId phaseId, 
-            Lifecycle lifecycle) {
-
-        super(lifecycle);
-        if ( phaseId == null || context == null || lifecycle == null) {
-            throw new NullPointerException();
-        }
-	this.phaseId = phaseId;
-        this.context = context;
-
-    }
-
-
-    // ------------------------------------------------------------- Properties
-
-    private FacesContext context = null;
-    
-    /**
-     * <p>Return the {@link FacesContext} for the request being processed.</p>
-     */
-    public FacesContext getFacesContext() {
-
-        return context;
-
-    }
-
-
-    private PhaseId phaseId = null;
-
-
-    /**
-     * <p>Return the {@link PhaseId} representing the current request
-     * processing lifecycle phase.</p>
-     */
-    public PhaseId getPhaseId() {
-
-	return (this.phaseId);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PhaseId.java b/jsf-api/src/main/java/javax/faces/event/PhaseId.java
deleted file mode 100644
index 2148859..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PhaseId.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-
-/**
- * <p>Typesafe enumeration of the legal values that may be returned by the
- * <code>getPhaseId()</code> method of the {@link FacesEvent} interface.
- */
-
-public class PhaseId implements Comparable {
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Private constructor to disable the creation of new instances.</p>
-     */
-    private PhaseId(String newPhaseName) {
-        phaseName = newPhaseName;
-    }
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    /**
-     * <p>The ordinal value assigned to this instance.</p>
-     */
-    private final int ordinal = nextOrdinal++;
-
-    /**
-     * <p>The (optional) name for this phase.</p>
-     */
-
-    private String phaseName = null;
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Compare this {@link PhaseId} instance to the specified one.
-     * Returns a negative integer, zero, or a positive integer if this
-     * object is less than, equal to, or greater than the specified object.</p>
-     *
-     * @param other The other object to be compared to
-     */
-    public int compareTo(Object other) {
-
-        return this.ordinal - ((PhaseId) other).ordinal;
-
-    }
-
-
-    /**
-     * <p>Return the ordinal value of this {@link PhaseId} instance.</p>
-     */
-    public int getOrdinal() {
-
-        return (this.ordinal);
-
-    }
-
-
-    /**
-     * <p>Return a String representation of this {@link PhaseId} instance.</p>
-     */
-    public String toString() {
-        if (null == phaseName) {
-            return (String.valueOf(this.ordinal));
-        }
-
-        return (String.valueOf(this.phaseName) + ' ' + this.ordinal);
-    }
-
-
-    // ------------------------------------------------------- Static Variables
-
-
-    /**
-     * <p>Static counter returning the ordinal value to be assigned to the
-     * next instance that is created.</p>
-     */
-    private static int nextOrdinal = 0;
-
-
-    // ------------------------------------------------------ Create Instances
-
-
-    // Any new Phase values must go at the end of the list, or we will break
-    // backwards compatibility on serialized instances
-
-
-    private static final String ANY_PHASE_NAME = "ANY";
-    /**
-     * <p>Identifier that indicates an interest in events, no matter
-     * which request processing phase is being performed.</p>
-     */
-    public static final PhaseId ANY_PHASE = new PhaseId(ANY_PHASE_NAME);
-
-
-    private static final String RESTORE_VIEW_NAME = "RESTORE_VIEW";
-    /**
-     * <p>Identifier that indicates an interest in events queued for
-     * the <em>Restore View</em> phase of the request
-     * processing lifecycle.</p>
-     */
-    public static final PhaseId RESTORE_VIEW = new PhaseId(RESTORE_VIEW_NAME);
-
-
-    private static final String APPLY_REQUEST_VALUES_NAME = "APPLY_REQUEST_VALUES";
-    /**
-     * <p>Identifier that indicates an interest in events queued for
-     * the <em>Apply Request Values</em> phase of the request
-     * processing lifecycle.</p>
-     */
-    public static final PhaseId APPLY_REQUEST_VALUES = new PhaseId(APPLY_REQUEST_VALUES_NAME);
-
-
-    private static final String PROCESS_VALIDATIONS_NAME = "PROCESS_VALIDATIONS";
-    /**
-     * <p>Identifier that indicates an interest in events queued for
-     * the <em>Process Validations</em> phase of the request
-     * processing lifecycle.</p>
-     */
-    public static final PhaseId PROCESS_VALIDATIONS = new PhaseId(PROCESS_VALIDATIONS_NAME);
-
-
-    private static final String UPDATE_MODEL_VALUES_NAME = "UPDATE_MODEL_VALUES";
-    /**
-     * <p>Identifier that indicates an interest in events queued for
-     * the <em>Update Model Values</em> phase of the request
-     * processing lifecycle.</p>
-     */
-    public static final PhaseId UPDATE_MODEL_VALUES = new PhaseId(UPDATE_MODEL_VALUES_NAME);
-
-
-    private static final String INVOKE_APPLICATION_NAME = "INVOKE_APPLICATION";
-    /**
-     * <p>Identifier that indicates an interest in events queued for
-     * the <em>Invoke Application</em> phase of the request
-     * processing lifecycle.</p>
-     */
-    public static final PhaseId INVOKE_APPLICATION = new PhaseId(INVOKE_APPLICATION_NAME);
-
-    private static final String RENDER_RESPONSE_NAME = "RENDER_RESPONSE";
-    /**
-     * <p>Identifier for the <em>Render Response</em> phase of the
-     * request processing lifecycle.</p>
-     */
-    public static final PhaseId RENDER_RESPONSE = new PhaseId(RENDER_RESPONSE_NAME);
-
-
-    /**
-     * <p>Array of all defined values, ascending order of ordinal value.
-     * Be sure you include any new instances created above, in the
-     * same order.</p>
-     */
-    private static final PhaseId[] values =
-            {ANY_PHASE, RESTORE_VIEW, APPLY_REQUEST_VALUES,
-                    PROCESS_VALIDATIONS, UPDATE_MODEL_VALUES, INVOKE_APPLICATION, RENDER_RESPONSE};
-
-
-    /**
-     * <p>List of valid {@link PhaseId} instances, in ascending order
-     * of their ordinal value.</p>
-     */
-    public static final List<PhaseId> VALUES =
-            Collections.unmodifiableList(Arrays.asList(values));
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PhaseListener.java b/jsf-api/src/main/java/javax/faces/event/PhaseListener.java
deleted file mode 100644
index 036dc82..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PhaseListener.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import java.io.Serializable;
-import java.util.EventListener;
-
-
-/**
- * <p>An interface implemented by objects that wish to be notified at
- * the beginning and ending of processing for each standard phase of the
- * request processing lifecycle.</p>
- */
-
-public interface PhaseListener extends EventListener, Serializable {
-
-
-    /**
-     * <p>Handle a notification that the processing for a particular
-     * phase has just been completed.</p>
-     */
-    public void afterPhase(PhaseEvent event);
-
-
-    /**
-     * <p>Handle a notification that the processing for a particular
-     * phase of the request processing lifecycle is about to begin.</p>
-     */
-    public void beforePhase(PhaseEvent event);
-
-
-    /**
-     * <p>Return the identifier of the request processing phase during
-     * which this listener is interested in processing {@link PhaseEvent}
-     * events.  Legal values are the singleton instances defined by the
-     * {@link PhaseId} class, including <code>PhaseId.ANY_PHASE</code>
-     * to indicate an interest in being notified for all standard phases.</p>
-     */
-    public PhaseId getPhaseId();
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PostAddToViewEvent.java b/jsf-api/src/main/java/javax/faces/event/PostAddToViewEvent.java
deleted file mode 100644
index bc626f1..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PostAddToViewEvent.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p class="changed_added_2_0">When an instance of this event is passed
- * to {@link SystemEventListener#processEvent} or {@link
- * ComponentSystemEventListener#processEvent}, the listener
- * implementation may assume that the <code>source</code> of this event
- * instance is a {@link UIComponent} instance and that either that
- * instance or an ancestor of that instance was just added to the view.
- * Therefore, the implementation may assume it is safe to call {@link
- * UIComponent#getParent}, {@link UIComponent#getClientId}, and other
- * methods that depend upon the component instance being added into the
- * view.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>The implementation must guarantee that {@link
- * javax.faces.application.Application#publishEvent} is called,
- * immediately after any <code>UIComponent</code> instance is added to
- * the view hierarchy <strong>except</strong> in the case where {@link
- * javax.faces.render.ResponseStateManager#isPostback} returns
- * <code>true</code> <strong>at the same time as</strong> {@link
- * javax.faces.context.FacesContext#getCurrentPhaseId} returns {@link
- * javax.faces.event.PhaseId#RESTORE_VIEW}.  When both of those
- * conditions are met, {@link
- * javax.faces.application.Application#publishEvent} must not be called.</p>
- * 
- * </div>
- *
- * @since 2.0
- */
-public class PostAddToViewEvent extends ComponentSystemEvent {
-
-    
-    private static final long serialVersionUID = -1113592223476173895L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>PostAddToViewEvent</code> that indicates the argument
-     * <code>component</code> was just added to the view.</p>
-
-     * @param component the <code>UIComponent</code> that has just been
-     * added to the view.
-     *
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PostAddToViewEvent(UIComponent component) {
-
-        super(component);
-
-    }
-
-
-    // --------------------------------------- Methods from ComponentSystemEvent
-
-
-    /**
-     * <p class="changed_added_2_0">Returns <code>true</code> if and
-     * only if the argument <code>listener</code> is an instance of
-     * {@link SystemEventListener}.</p>
-     * @param listener
-     */
-    @Override
-    public boolean isAppropriateListener(FacesListener listener) {
-        
-        return (listener instanceof SystemEventListener);
-
-    }
-    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PostAddToViewNonPDLEvent.java b/jsf-api/src/main/java/javax/faces/event/PostAddToViewNonPDLEvent.java
deleted file mode 100644
index 433506c..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PostAddToViewNonPDLEvent.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p>Erroneously added.  Please ignore.</p>
- *
- * @since 2.0
- */
-public class PostAddToViewNonPDLEvent extends PostAddToViewEvent {
-
-    
-
-    public PostAddToViewNonPDLEvent(UIComponent component) {
-        super(component);
-
-    }    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PostConstructApplicationEvent.java b/jsf-api/src/main/java/javax/faces/event/PostConstructApplicationEvent.java
deleted file mode 100644
index 4a3ff9c..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PostConstructApplicationEvent.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.event;
-
-import javax.faces.application.Application;
-
-/**
- * <p class="changed_added_2_0">This event must be published by the
- * runtime after all configuration resources have been parsed and
- * processed.</p>
- *
- * <p class="changed_added_2_0">This event is useful for listeners that
- * need to perform custom post-configuration processing without having
- * to rely on <code>ServletContextListener</code>s which may be invoked
- * before the JavaServer Faces runtime has started it's configuration
- * process.</p>
- *
- * @since 2.0
- */
-public class PostConstructApplicationEvent extends SystemEvent {
-
-    private static final long serialVersionUID = -3918703770970591309L;
-
-    /**
-     * <p class="changed_added_2_0">Constructs a new
-     * <code>AppliationPostConstructEvent</code> for this
-     * application.</p>
-     * @param application the application that has been configured
-     * @since 2.0
-     */
-
-    public PostConstructApplicationEvent(Application application) {
-        super(application);
-    }
-
-    /**
-     * <p class="changed_added_2_0">The source {@link Application} that sent this event.</p>
-     * 
-     * @since 2.0
-     */
-
-    public Application getApplication() {
-        return (Application) getSource();
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PostConstructCustomScopeEvent.java b/jsf-api/src/main/java/javax/faces/event/PostConstructCustomScopeEvent.java
deleted file mode 100644
index 3d1af18..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PostConstructCustomScopeEvent.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-/**
- * <p class="changed_added_2_0">This class is provided to allow custom
- * scopes to publish a "post construct" event in the same way that other
- * scopes do to let the application become aware of the beginning of the
- * scope.  The runtime must listen for this event and invoke any
- * <code>PostConstruct</code> annotated methods on any of the beans in
- * this scope as appropriate.  The following code can be used as a
- * template for publishing such an event.</p> <code><pre>
-
-Map<String, Object> myScope = getMyScope(); 
-ScopeContext scopeContext = new ScopeContext("myScope", myScope);
-applicationPublishEvent(PostConstructCustomScopeEvent.class, scopeContext);
-</pre></code>
-
- * <p></p>
- *
- * @since 2.0
- */
-public class PostConstructCustomScopeEvent extends SystemEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-    /**
-     * <p class="changed_added_2_0">An instance of this event indicates
-     * that the custom scope enclosed within the argument
-     * <code>scopeContext</code> was just created.</p>
-
-     * @param scopeContext A structure that contains the name of the
-     * scope and the scope itself exposed as a <code>Map<String,
-     * Object></code>.
-
-     */
-    public PostConstructCustomScopeEvent(ScopeContext scopeContext) {
-
-        super(scopeContext);
-        
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>ScopeContext</code>
-     * for this event.</p>
-     */
-    public ScopeContext getContext() {
-
-        return (ScopeContext) getSource();
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PostConstructViewMapEvent.java b/jsf-api/src/main/java/javax/faces/event/PostConstructViewMapEvent.java
deleted file mode 100644
index d6620af..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PostConstructViewMapEvent.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIViewRoot;
-
-/**
- *
- * <p class="changed_added_2_0">This event must be published by a call
- * to {javax.faces.application.Application#publishEvent} when the view
- * map is first created.  This must happen on the first time a call is
- * made to {@link UIViewRoot#getViewMap} on a <code>UIViewRoot</code>
- * instance.  The source for this event is the
- * <code>UIViewRoot<code>.</p>
- *
- * @since 2.0
- */
-public class PostConstructViewMapEvent extends ComponentSystemEvent {
-
-    private static final long serialVersionUID = 8684338297976265379L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>PostConstructViewMapEvent</code> that indicates the argument
-     * <code>root</code> was just associated with its view map.</p>
-
-     * @param root the <code>UIViewRoot</code> for which a view map has
-     * just been created.
-     *
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PostConstructViewMapEvent(UIViewRoot root) {
-        super(root);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PostRestoreStateEvent.java b/jsf-api/src/main/java/javax/faces/event/PostRestoreStateEvent.java
deleted file mode 100644
index 7484efb..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PostRestoreStateEvent.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p class="changed_added_2_0">When an instance of this event is passed
- * to {@link SystemEventListener#processEvent} or {@link
- * ComponentSystemEventListener#processEvent}, the listener
- * implementation may assume that the <code>source</code> of this event
- * instance is in a tree that has just had its state restored.</p>
- *
- * @since 2.0
- */
-public class PostRestoreStateEvent extends ComponentSystemEvent {
-    
-    static final long serialVersionUID = -1007196479122154347L;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>PostRestoreStateEvent</code> that indicates the argument
-     * <code>component</code> just had its state restored.</p>
-
-     * @param component the <code>UIComponent</code> whose state was just restored.
-
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PostRestoreStateEvent(UIComponent component) {
-        super(component);
-    }
-    
-    public void setComponent(UIComponent newComponent) {
-        this.source = newComponent;
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PostValidateEvent.java b/jsf-api/src/main/java/javax/faces/event/PostValidateEvent.java
deleted file mode 100644
index da397db..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PostValidateEvent.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p class="changed_added_2_0"></p>
- *
- * @since 2.0
- */
-public class PostValidateEvent extends ComponentSystemEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-
-     * <p class="changed_added_2_0"></p>
-
-     * @param component the <code>UIComponent</code> that is about to be
-     * validated.
-
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PostValidateEvent(UIComponent component) {
-        super(component);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PreDestroyApplicationEvent.java b/jsf-api/src/main/java/javax/faces/event/PreDestroyApplicationEvent.java
deleted file mode 100644
index 4d9a6cc..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PreDestroyApplicationEvent.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.application.Application;
-
-/**
- * <p class="changed_added_2_0">This event must be published by the
- * runtime <em>before</em> the factories associated with this {@link
- * Application} are released.</p>
- *
- * <p class="changed_added_2_0">This event is useful for listeners that
- * need to perform custom shutdown processing without having to rely on
- * <code>ServletContextListener</code>s which will be invoked after all
- * of the application artifacts have been removed.</p>
- *
- * @since 2.0
- */
-public class PreDestroyApplicationEvent extends SystemEvent {
-
-    private static final long serialVersionUID = 8105212785161493162L;
-
-    /**
-     * <p class="changed_added_2_0">Constructs a new
-     * <code>PreDestroyApplicationEvent</code> for this application.</p>
-     *
-     * @param application the application that has been configured
-     *
-     * @since 2.0
-     */
-    public PreDestroyApplicationEvent(Application application) {
-        super(application); 
-    }
-    
-    /**
-     * <p class="changed_added_2_0">The source {@link Application} that sent this event.</p>
-     * 
-     * @since 2.0
-     */
-
-    public Application getApplication() {
-        return (Application) getSource();
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PreDestroyCustomScopeEvent.java b/jsf-api/src/main/java/javax/faces/event/PreDestroyCustomScopeEvent.java
deleted file mode 100644
index e819b15..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PreDestroyCustomScopeEvent.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-/**
- * <p class="changed_added_2_0">This class is provided to allow custom
- * scopes to publish a "pre construct" event in the same way that other
- * scopes do to let the application become aware of the beginning of the
- * scope.  The runtime must listen for this event and invoke any
- * <code>PreDestroy</code> annotated methods on any of the beans in this
- * scope as appropriate.  See the example code on {@link
- * PostConstructCustomScopeEvent} for a usage example, replacing classes
- * as appropriate to make sense for this class.</p>
-
- * @since 2.0
- */
-public class PreDestroyCustomScopeEvent extends SystemEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-    /**
-     * <p class="changed_added_2_0">An instance of this event indicates
-     * that the custom scope enclosed within the argument
-     * <code>scopeContext</code> is about to end.</p>
-
-     * @param scopeContext A structure that contains the name of the
-     * scope and the scope itself exposed as a <code>Map<String,
-     * Object></code>.
-
-     */
-    public PreDestroyCustomScopeEvent(ScopeContext scopeContext) {
-
-        super(scopeContext);
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>ScopeContext</code>
-     * for this event.</p>
-     */
-    public ScopeContext getContext() {
-
-        return (ScopeContext) getSource();
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PreDestroyViewMapEvent.java b/jsf-api/src/main/java/javax/faces/event/PreDestroyViewMapEvent.java
deleted file mode 100644
index 38e3000..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PreDestroyViewMapEvent.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIViewRoot;
-
-/**
- *
- * <p class="changed_added_2_0">This event must be published by a call
- * to {@link javax.faces.application.Application#publishEvent} when the
- * <code>clear</code> method is called on the map returned from {@link
- * UIViewRoot#getViewMap}.
- *
- * @since 2.0
- */
-public class PreDestroyViewMapEvent extends ComponentSystemEvent {
-
-    private static final long serialVersionUID = 4470489935758914483L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>ViewMapDestroydEvent</code> that indicates the argument
-     * <code>root</code> just had its associated view map destroyed.</p>
-
-     * @param root the <code>UIViewRoot</code> for which the view map has
-     * just been destroyed.
-     *
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PreDestroyViewMapEvent(UIViewRoot root) {
-        super(root);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PreRemoveFromViewEvent.java b/jsf-api/src/main/java/javax/faces/event/PreRemoveFromViewEvent.java
deleted file mode 100644
index 1f5709d..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PreRemoveFromViewEvent.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p class="changed_added_2_0">When an instance of this event is passed
- * to {@link SystemEventListener#processEvent} or {@link
- * ComponentSystemEventListener#processEvent}, the listener
- * implementation may assume that the <code>source</code> of this event
- * instance is a {@link UIComponent} instance that is about to be
- * removed from the view.  Therefore, the implementation may assume it
- * is safe to call {@link UIComponent#getParent}, {@link
- * UIComponent#getClientId}, and other methods that depend upon the
- * component instance being added into the view.</p> 
-
- * @since 2.0
- */
-public class PreRemoveFromViewEvent extends ComponentSystemEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>BeforeRemoveFromView</code> that indicates the argument
-     * <code>component</code> is about to be removed from the view.</p>
-
-     * @param component the <code>UIComponent</code> that is about to be
-     * removed from the view.
-     *
-     * @throws IllegalArgumentException if <code>component</code> is
-     *  <code>null</code>
-     */
-    public PreRemoveFromViewEvent(UIComponent component) {
-
-        super(component);
-
-    }
-
-
-    // --------------------------------------- Methods from ComponentSystemEvent
-
-
-    /**
-     * <p class="changed_added_2_0">Returns <code>true</code> if and
-     * only if the argument <code>listener</code> is an instance of
-     * {@link SystemEventListener}.</p>
-     * @param listener
-     */
-    @Override
-    public boolean isAppropriateListener(FacesListener listener) {
-
-        return (listener instanceof SystemEventListener);
-        
-    }
-    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PreRenderComponentEvent.java b/jsf-api/src/main/java/javax/faces/event/PreRenderComponentEvent.java
deleted file mode 100644
index aae3eee..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PreRenderComponentEvent.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p class="changed_added_2_0">When an instance of this event is passed
- * to {@link SystemEventListener#processEvent} or {@link
- * ComponentSystemEventListener#processEvent}, the listener
- * implementation may assume that the <code>source</code> of this event
- * instance is the {@link UIComponent} instance that is about to be
- * rendered and that it is safe to call {@link
- * UIComponent#getParent}, {@link UIComponent#getClientId}, and other
- * methods that depend upon the component instance being in the
- * view.</p>
- *
- * @since 2.0
- */
-public class PreRenderComponentEvent extends ComponentSystemEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>PreRenderComponentEvent</code> that indicates the argument
-     * <code>component</code> is about to be rendered.</p>
-
-     * @param component the <code>UIComponent</code> that is about to be
-     * rendered.
-
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PreRenderComponentEvent(UIComponent component) {
-        super(component);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PreRenderViewEvent.java b/jsf-api/src/main/java/javax/faces/event/PreRenderViewEvent.java
deleted file mode 100644
index 6fb7045..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PreRenderViewEvent.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIViewRoot;
-
-/**
- *
- * <p class="changed_added_2_0">When an instance of this event is passed
- * to {@link SystemEventListener#processEvent} or {@link
- * ComponentSystemEventListener#processEvent}, the listener
- * implementation may assume that the <code>source</code> of this event
- * instance is the {@link UIViewRoot} instance that is about to be
- * rendered.</p>
-
- * <div class="changed_added_2_0">
- *
- * <p>It is valid for a listener for this event to change the {@link
- * UIViewRoot} in the current {@link javax.faces.context.FacesContext},
- * but the listener must ensure that the new <code>UIViewRoot</code> was
- * created with a call to {@link
- * javax.faces.application.ViewHandler#createView}, and that the view is
- * fully populated with the children to be traversed during render.  The
- * listener implementation may call {@link
- * javax.faces.view.ViewDeclarationLanguage#buildView} to populate
- * the <code>UIViewRoot</code>.</p>
- *
- * </div>
- *
- * @since 2.0
- */
-public class PreRenderViewEvent extends ComponentSystemEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-
-     * <p class="changed_added_2_0">Instantiate a new
-     * <code>PreRenderViewEvent</code> that indicates the argument
-     * <code>root</code> is about to be rendered.</p>
-
-     * @param root the <code>UIViewRoot</code> that is about to be
-     * rendered.
-
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PreRenderViewEvent(UIViewRoot root) {
-        super(root);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/PreValidateEvent.java b/jsf-api/src/main/java/javax/faces/event/PreValidateEvent.java
deleted file mode 100644
index c96971f..0000000
--- a/jsf-api/src/main/java/javax/faces/event/PreValidateEvent.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import javax.faces.component.UIComponent;
-
-/**
- *
- * <p class="changed_added_2_0"></p>
- *
- * @since 2.0
- */
-public class PreValidateEvent extends ComponentSystemEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-
-     * <p class="changed_added_2_0"></p>
-
-     * @param component the <code>UIComponent</code> that is about to be
-     * validated.
-
-     * @throws <code>IllegalArgumentException</code> if the argument is <code>null</code>.
-     */
-    public PreValidateEvent(UIComponent component) {
-        super(component);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ScopeContext.java b/jsf-api/src/main/java/javax/faces/event/ScopeContext.java
deleted file mode 100644
index efb8442..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ScopeContext.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import java.util.Map;
-
-/**
- * <p class="changed_added_2_0">A structure that contains the name of
- * the scope and the scope itself exposed as a <code>Map<String,
- * Object></code>.</p>
- *
- * @since 2.0
- */
-public class ScopeContext {
-
-    private String scopeName;
-    private Map<String,Object> scope;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Construct this structure with the
-     * supplied arguments.</p>
-     * @param scopeName the name of the scope
-     * @param scope the scope itself
-     */
-    public ScopeContext(String scopeName, Map<String, Object> scope) {
-
-        this.scopeName = scopeName;
-        this.scope = scope;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p class="changed_added_2_0">Return the name of this custom
-     * scope.</p>
-     */
-    public String getScopeName() {
-
-        return scopeName;
-
-    }
-
-
-    /**
-     * <p class="changed_modified_2_0">Return the scope itself, exposed
-     * as a <code>Map</code>.</p>
-     */
-    public Map<String, Object> getScope() {
-
-        return scope;
-        
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/SystemEvent.java b/jsf-api/src/main/java/javax/faces/event/SystemEvent.java
deleted file mode 100644
index 3d6a846..0000000
--- a/jsf-api/src/main/java/javax/faces/event/SystemEvent.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import java.util.EventObject;
-
-/**
- * <p><strong class="changed_added_2_0">SystemEvent</strong> is the base
- * class for non-application specific events that can be fired by
- * arbitrary objects.</p>
- *
- * @since 2.0
- */
-public abstract class SystemEvent extends EventObject {
-
-    private static final long serialVersionUID = 2696415667461888462L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p class="changed_added_2_0">Pass the argument
-     * <code>source</code> to the superclass constructor.</p>
-
-     * @param source the <code>source</code> reference to be
-     * passed to the superclass constructor.
-     *
-     * @throws <code>IllegalArgumentException</code> if the argument is
-     * <code>null</code>.
-     */
-    public SystemEvent(Object source) {
-        super(source);
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Return <code>true</code> if this {@link FacesListener} is an
-     * instance of a the appropriate listener class that this event
-     * supports.</p>
-     *
-     * @param listener {@link FacesListener} to evaluate
-     */
-    public boolean isAppropriateListener(FacesListener listener) {
-
-        return (listener instanceof SystemEventListener);
-
-    }
-
-
-    /**
-     * <p>Broadcast this event instance to the specified
-     * {@link FacesListener}, by whatever mechanism is appropriate.  Typically,
-     * this will be accomplished by calling an event processing method, and
-     * passing this instance as a paramter.</p>
-     *
-     * @param listener {@link FacesListener} to send this {@link FacesEvent} to
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     */
-    public void processListener(FacesListener listener) {
-
-        ((SystemEventListener) listener).processEvent(this);
-
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/SystemEventListener.java b/jsf-api/src/main/java/javax/faces/event/SystemEventListener.java
deleted file mode 100644
index 72d3afc..0000000
--- a/jsf-api/src/main/java/javax/faces/event/SystemEventListener.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-/**
- * <p class="changed_added_2_0">By implementing this class, an object
- * indicates that it is a listener for one or more kinds of {@link
- * SystemEvent}s.  The exact type of event that will cause the
- * implementing class's {@link #processEvent} method to be called is
- * indicated by the <code>facesEventClass</code> argument passed when
- * the listener is installed using {@link
- * javax.faces.application.Application#subscribeToEvent}.</p>
- *
- * @since 2.0
- */
-public interface SystemEventListener extends FacesListener {
-
-
-    /**
-     * <p>When called, the listener can assume that any guarantees given
-     * in the javadoc for the specific {@link SystemEvent}
-     * subclass are true.</p>
-     *
-     * @param event the <code>SystemEvent</code> instance that
-     * is being processed.
-     *
-     * @throws AbortProcessingException if lifecycle processing should
-     * cease for this request.
-     */
-    public void processEvent(SystemEvent event) throws AbortProcessingException;
-
-    /**
-     * <p>This method must return <code>true</code> if and only if this
-     * listener instance is interested in receiving events from the
-     * instance referenced by the <code>source</code> parameter.</p>
-     *
-     * @param source the source that is inquiring about the
-     * appropriateness of sending an event to this listener instance.  
-     */ 
-    public boolean isListenerForSource(Object source);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/SystemEventListenerHolder.java b/jsf-api/src/main/java/javax/faces/event/SystemEventListenerHolder.java
deleted file mode 100644
index 2263664..0000000
--- a/jsf-api/src/main/java/javax/faces/event/SystemEventListenerHolder.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import java.util.List;
-
-
-/**
- * <p class="changed_added_2_0">Classes that implement this interface
- * agree to maintain a list of {@link SystemEventListener} instances
- * for each kind of {@link SystemEvent} they can generate.  This
- * interface enables arbitrary Objects to act as the source for {@link
- * SystemEvent} instances.</p>
- *
- * <p>If the implementing class is a {@link
- * javax.faces.component.UIComponent} or is referenced by a
- * <code>UIComponent</code>, care must be taken to ensure that the
- * implementing class, and all the members of the list returned by
- * {@link #getListenersForEventClass} work correctly with the state
- * management system.  One way to ensure this is to have the class and
- * the list members implement {@link javax.faces.component.StateHolder}
- * or {@link java.io.Serializable}.</p>
- *
- * @since 2.0
- */
-
-public interface SystemEventListenerHolder {
-
-    /**
-     * <div class="changed_added_2_0">
-     * <p>Return a <code>List</code> of {@link SystemEventListener}
-     * instances that have been installed into the class implementing
-     * this interface.</p>
-     * </div>
-     */
-    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> facesEventClass);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ValueChangeEvent.java b/jsf-api/src/main/java/javax/faces/event/ValueChangeEvent.java
deleted file mode 100644
index b9e42f7..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ValueChangeEvent.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import javax.faces.component.UIComponent;
-
-
-/**
- * <p>A {@link ValueChangeEvent} is a notification that the local value of
- * the source component has been change as a result of user interface
- * activity.  It is not fired unless validation of the new value was
- * completed successfully.</p>
- */
-
-public class ValueChangeEvent extends FacesEvent {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new event object from the specified source component,
-     * old value, and new value.</p>
-     *
-     * <p>The default {@link PhaseId} for this event is {@link
-     * PhaseId#ANY_PHASE}.</p>
-     *
-     * @param component Source {@link UIComponent} for this event
-     * @param oldValue The previous local value of this {@link UIComponent}
-     * @param newValue The new local value of thie {@link UIComponent}
-     *
-     * @throws IllegalArgumentException if <code>component</code> is
-     *  <code>null</code>
-     */
-    public ValueChangeEvent(UIComponent component,
-                             Object oldValue, Object newValue) {
-
-        super(component);
-        this.oldValue = oldValue;
-        this.newValue = newValue;
-    }
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>The previous local value of the source {@link UIComponent}.</p>
-     */
-    private Object oldValue = null;
-
-
-    /**
-     * <p>Return the previous local value of the source {@link UIComponent}.
-     * </p>
-     */
-    public Object getOldValue() {
-
-        return (this.oldValue);
-
-    }
-
-
-    /**
-     * <p>The current local value of the source {@link UIComponent}.</p>
-     */
-    private Object newValue = null;
-
-
-    /**
-     * <p>Return the current local value of the source {@link UIComponent}.
-     * </p>
-     */
-    public Object getNewValue() {
-
-        return (this.newValue);
-
-    }
-
-
-    // ------------------------------------------------- Event Broadcast Methods
-
-
-    public boolean isAppropriateListener(FacesListener listener) {
-
-        return (listener instanceof ValueChangeListener);
-
-    }
-
-    /**
-     * @throws AbortProcessingException {@inheritDoc}
-     */ 
-    public void processListener(FacesListener listener) {
-
-        ((ValueChangeListener) listener).processValueChange(this);
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ValueChangeListener.java b/jsf-api/src/main/java/javax/faces/event/ValueChangeListener.java
deleted file mode 100644
index cdab2b5..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ValueChangeListener.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-
-import javax.faces.component.UIComponent;
-
-
-/**
- * <p>A listener interface for receiving {@link ValueChangeEvent}s.  A class
- * that is interested in receiving such events implements this interface, and
- * then registers itself with the source {@link UIComponent} of interest, by
- * calling <code>addValueChangeListener()</code>.</p>
- */
-
-public interface ValueChangeListener extends FacesListener {
-
-
-    /**
-     * <p>Invoked when the value change described by the specified
-     * {@link ValueChangeEvent} occurs.</p>
-     *
-     * @param event The {@link ValueChangeEvent} that has occurred
-     *
-     * @throws AbortProcessingException Signal the JavaServer Faces
-     *  implementation that no further processing on the current event
-     *  should be performed
-     */
-    public void processValueChange(ValueChangeEvent event)
-        throws AbortProcessingException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/ViewMapListener.java b/jsf-api/src/main/java/javax/faces/event/ViewMapListener.java
deleted file mode 100644
index 12dcfdf..0000000
--- a/jsf-api/src/main/java/javax/faces/event/ViewMapListener.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-/**
- * <p class="changed_added_2_0">Marker interface for {@link
- * SystemEvent}s that indicate the view map has been created ({@link
- * PostConstructViewMapEvent}, or destroyed ({@link
- * PreDestroyViewMapEvent}).</p>
- *
- * @since 2.0
- */
-public interface ViewMapListener extends SystemEventListener {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/event/package.html b/jsf-api/src/main/java/javax/faces/event/package.html
deleted file mode 100644
index cce1349..0000000
--- a/jsf-api/src/main/java/javax/faces/event/package.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.event"</title>
-</head>
-<body bgcolor="white">
-
-<p><span class="changed_modified_2_0">Interfaces</span> describing
-events and event listeners, and concrete event implementation classes.
-All events extend from {@link javax.faces.event.FacesEvent} and all
-listeners extend from {@link javax.faces.event.FacesListener}.</p>
-
-<p>For your convenience here is a UML class diagram of the classes in
-this package.</p>
-
-<a href="EventHierarchy.jpg" target="_"><img width="640" height="473" src="EventHierarchy.jpg" /></a>
-
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/lifecycle/Lifecycle.java b/jsf-api/src/main/java/javax/faces/lifecycle/Lifecycle.java
deleted file mode 100644
index 89cdd61..0000000
--- a/jsf-api/src/main/java/javax/faces/lifecycle/Lifecycle.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.lifecycle;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseListener;
-
-
-/**
- * <p><strong>Lifecycle</strong> manages the
- * processing of the entire lifecycle of a particular JavaServer Faces
- * request.  It is responsible for executing all of the phases that have
- * been defined by the JavaServer Faces Specification, in the specified
- * order, unless otherwise directed by activities that occurred during
- * the execution of each phase.</p>
- *
- * <p>An instance of <code>Lifecycle</code> is created by calling the
- * <code>getLifecycle()</code> method of {@link LifecycleFactory}, for
- * a specified lifecycle identifier.  Because this instance is
- * shared across multiple simultaneous requests, it must be implemented
- * in a thread-safe manner.</p>
- */
-
-public abstract class Lifecycle {
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Register a new {@link PhaseListener} instance that is interested in
-     * being notified before and after the processing for standard phases of
-     * the request processing lifecycle.</p>
-     *
-     * @param listener The {@link PhaseListener} to be registered
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public abstract void addPhaseListener(PhaseListener listener);
-
-
-    /**
-     * <p>Execute all of the phases of the request processing lifecycle,
-     * up to but not including the <em>Render Response</em> phase,
-     * as described in the JavaServer Faces Specification, in the specified
-     * order.  The processing flow can be affected (by the application,
-     * by components, or by event listeners) by calls to the
-     * <code>renderResponse()</code> or <code>responseComplete()</code>
-     * methods of the {@link FacesContext} instance associated with
-     * the current request.</p>
-     *
-     * @param context FacesContext for the request to be processed
-     *
-     * @throws FacesException if thrown during the execution of the
-     *  request processing lifecycle
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void execute(FacesContext context) throws FacesException;
-
-
-    /**
-     * <p>Return the set of registered {@link PhaseListener}s for this
-     * {@link Lifecycle} instance.  If there are no registered listeners,
-     * a zero-length array is returned.</p>
-     */
-    public abstract PhaseListener[] getPhaseListeners();
-
-
-    /**
-     * <p>Deregister an existing {@link PhaseListener} instance that is no
-     * longer interested in being notified before and after the processing
-     * for standard phases of the request processing lifecycle.  If no such
-     * listener instance has been registered, no action is taken.</p>
-     *
-     * @param listener The {@link PhaseListener} to be deregistered
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public abstract void removePhaseListener(PhaseListener listener);
-
-
-    /**
-     * <p>Execute the <em>Render Response</em> phase of the request
-     * processing lifecycle, unless the <code>responseComplete()</code>
-     * method has been called on the {@link FacesContext} instance
-     * associated with the current request.</p>
-     *
-     * @param context FacesContext for the request being processed
-     *
-     * @throws FacesException if an exception is thrown during the execution
-     *  of the request processing lifecycle
-     * @throws NullPointerException if <code>context</code>
-     *  is <code>null</code>
-     */
-    public abstract void render(FacesContext context) throws FacesException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/lifecycle/LifecycleFactory.java b/jsf-api/src/main/java/javax/faces/lifecycle/LifecycleFactory.java
deleted file mode 100644
index f719a3b..0000000
--- a/jsf-api/src/main/java/javax/faces/lifecycle/LifecycleFactory.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.lifecycle;
-
-import java.util.Iterator;
-import javax.faces.FacesWrapper;
-
-
-/**
- * <p><strong class="changed_modified_2_0">LifecycleFactory</strong> is
- * a factory object that creates (if needed) and returns {@link
- * Lifecycle} instances.  Implementations of JavaServer Faces must
- * provide at least a default implementation of {@link Lifecycle}.
- * Advanced implementations (or external third party libraries) MAY
- * provide additional {@link Lifecycle} implementations (keyed by
- * lifecycle identifiers) for performing different types of request
- * processing on a per-request basis.</p>
- *
- * <p>There must be one <code>LifecycleFactory</code> instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- * <pre>
- *   LifecycleFactory factory = (LifecycleFactory)
- *    FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
- * </pre>
- */
-
-public abstract class LifecycleFactory implements FacesWrapper<LifecycleFactory> {
-    
-    
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-
-    public LifecycleFactory getWrapped() {
-        return null;
-    }
-    
-
-
-    /**
-     * <p>The lifecycle identifier for the default {@link Lifecycle} instance
-     * for this JavaServer Faces implementation.</p>
-     */
-    public static final String DEFAULT_LIFECYCLE = "DEFAULT";
-
-
-    /**
-     * <p>Register a new {@link Lifecycle} instance, associated with
-     * the specified <code>lifecycleId</code>, to be supported by this
-     * <code>LifecycleFactory</code>.  This method may be called at
-     * any time, and makes the corresponding {@link Lifecycle} instance
-     * available throughout the remaining lifetime of this web application.
-     * </p>
-     *
-     * @param lifecycleId Identifier of the new {@link Lifecycle}
-     * @param lifecycle {@link Lifecycle} instance that we are registering
-     *
-     * @throws IllegalArgumentException if a {@link Lifecycle} with the
-     *  specified <code>lifecycleId</code> has already been registered
-     * @throws NullPointerException if <code>lifecycleId</code>
-     *  or <code>lifecycle</code> is <code>null</code>
-     */
-    public abstract void addLifecycle(String lifecycleId,
-                                      Lifecycle lifecycle);
-
-
-    /**
-     * <p>Create (if needed) and return a {@link Lifecycle} instance
-     * for the specified lifecycle identifier.  The set of available
-     * lifecycle identifiers is available via the
-     * <code>getLifecycleIds()</code> method.</p>
-     *
-     * <p>Each call to <code>getLifecycle()</code> for the same
-     * <code>lifecycleId</code>, from within the same web application,
-     * must return the same {@link Lifecycle} instance.</p>
-     *
-     * @param lifecycleId Lifecycle identifier of the requested
-     *  {@link Lifecycle} instance
-     *
-     * @throws IllegalArgumentException if no {@link Lifecycle} instance
-     *  can be returned for the specified identifier
-     * @throws NullPointerException if <code>lifecycleId</code>
-     *  is <code>null</code>
-     */
-    public abstract Lifecycle getLifecycle(String lifecycleId);
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the set of lifecycle
-     * identifiers supported by this factory.  This set must include
-     * the value specified by <code>LifecycleFactory.DEFAULT_LIFECYCLE</code>.
-     * </p>
-     */
-    public abstract Iterator<String> getLifecycleIds();
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/lifecycle/package.html b/jsf-api/src/main/java/javax/faces/lifecycle/package.html
deleted file mode 100644
index e932408..0000000
--- a/jsf-api/src/main/java/javax/faces/lifecycle/package.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.lifecycle"</title>
-</head>
-<body bgcolor="white">
-    <p><span class="changed_modified_2_0">Classes</span> and interfaces defining lifecycle management for the
-JavaServer Faces implementation.  The main class in this package is
-{@link javax.faces.lifecycle.Lifecycle}.  <code>Lifecycle</code> is the
-gateway to executing the request processing lifecycle.
-</p>
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/model/ArrayDataModel.java b/jsf-api/src/main/java/javax/faces/model/ArrayDataModel.java
deleted file mode 100644
index d57c7f4..0000000
--- a/jsf-api/src/main/java/javax/faces/model/ArrayDataModel.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import javax.faces.FacesException;
-
-
-/**
- * <p><strong>ArrayDataModel</strong> is a convenience implementation of
- * {@link DataModel} that wraps an array of Java objects.</p>
- */
-
-public class ArrayDataModel<E> extends DataModel<E> {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new {@link ArrayDataModel} with no specified
-     * wrapped data.</p>
-     */
-    public ArrayDataModel() {
-
-        this(null);
-
-    }
-
-
-    /**
-     * <p>Construct a new {@link ArrayDataModel} wrapping the specified
-     * array.</p>
-     *
-     * @param array Array to be wrapped (if any)
-     */
-    public ArrayDataModel(E[] array) {
-
-        super();
-        setWrappedData(array);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The array we are wrapping
-    private Object array[];
-
-
-    // The current row index (zero relative)
-    private int index = -1;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return <code>true</code> if there is <code>wrappedData</code>
-     * available, and the current value of <code>rowIndex</code> is greater
-     * than or equal to zero, and less than the length of the array.  Otherwise,
-     * return <code>false</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row availability
-     */
-    public boolean isRowAvailable() {
-
-        if (array == null) {
-	    return (false);
-        } else if ((index >= 0) && (index < array.length)) {
-            return (true);
-        } else {
-            return (false);
-        }
-
-    }
-
-
-    /**
-     * <p>If there is <code>wrappedData</code> available, return the
-     * length of the array.  If no <code>wrappedData</code> is available,
-     * return -1.</p>
-     *
-     * @throws FacesException if an error occurs getting the row count
-     */
-    public int getRowCount() {
-
-        if (array == null) {
-	    return (-1);
-        }
-        return (array.length);
-
-    }
-
-
-    /**
-     * <p>If row data is available, return the array element at the index
-     * specified by <code>rowIndex</code>.  If no wrapped data is available,
-     * return <code>null</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row data
-     * @throws IllegalArgumentException if now row data is available
-     *  at the currently specified row index
-     */
-    @SuppressWarnings({"unchecked"})
-    public E getRowData() {
-
-        if (array == null) {
-	    return (null);
-        } else if (!isRowAvailable()) {
-            throw new NoRowAvailableException();
-        } else {
-            return ((E) array[index]);
-        }
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}     
-     */ 
-    public int getRowIndex() {
-
-        return (index);
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */ 
-    public void setRowIndex(int rowIndex) {
-
-        if (rowIndex < -1) {
-            throw new IllegalArgumentException();
-        }
-        int old = index;
-        index = rowIndex;
-	if (array == null) {
-	    return;
-	}
-	DataModelListener [] listeners = getDataModelListeners();
-        if ((old != index) && (listeners != null)) {
-            Object rowData = null;
-            if (isRowAvailable()) {
-                rowData = getRowData();
-            }
-            DataModelEvent event =
-                new DataModelEvent(this, index, rowData);
-            int n = listeners.length;
-            for (int i = 0; i < n; i++) {
-		if (null != listeners[i]) {
-		    listeners[i].rowSelected(event);
-		}
-            }
-        }
-
-    }
-
-
-    public Object getWrappedData() {
-
-        return (this.array);
-
-    }
-
-
-    /**
-     * @throws ClassCastException if <code>data</code> is
-     *  non-<code>null</code> and is not an array of Java objects.
-     */
-    public void setWrappedData(Object data) {
-
-        if (data == null) {
-            array = null;
-            setRowIndex(-1);
-        } else {
-            array = (Object[]) data;
-            index = -1;
-            setRowIndex(0);
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/DataModel.java b/jsf-api/src/main/java/javax/faces/model/DataModel.java
deleted file mode 100644
index ecf5882..0000000
--- a/jsf-api/src/main/java/javax/faces/model/DataModel.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIData;
-
-
-/**
- * <p><span class="changed_modified_2_0"><strong>DataModel</strong></span>
- * is an abstraction around arbitrary data
- * binding technologies that can be used to adapt a variety of data sources
- * for use by JavaServer Faces components that support per-row processing
- * for their child components (such as {@link UIData}.</p>
- *
- * <p>The data collection underlying a {@link DataModel} instance is
- * modeled as a collection of row objects that can be accessed by
- * a zero-relative cursor (row index).  The APIs provide mechanisms to
- * position to a specified zero-relative row index, and to retrieve an
- * object that represents the data that corresponds to the current
- * row index.</p>
- *
- * <p>A concrete {@link DataModel} instance is attached to a particular
- * collection of underlying data by calling the <code>setWrappedData()</code>
- * method.  It can be detached from that underlying data collection by
- * passing a <code>null</code> parameter to this method.</p>
- *
- * <p>Concrete {@link DataModel} implementations must provide a public
- * zero-arguments constructor that calls <code>setWrappedData(null)</code>.
- * A convenience constructor that takes a wrapped object of the appropriate
- * type (and passes it on via a call to <code>setWrappedData()</code>,
- * should also be provided.</p>
- *
- * <p>Event listeners may be registered to receive notifications
- * of when a new row index is selected.</p>
- */
-
-public abstract class DataModel<E> implements Iterable<E> {
-
-
-    private static final DataModelListener[] EMPTY_DATA_MODEL_LISTENER =
-         new DataModelListener[0];
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return a flag indicating whether there is <code>rowData</code>
-     * available at the current <code>rowIndex</code>.  If no
-     * <code>wrappedData</code> is available, return <code>false</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row availability
-     */
-    public abstract boolean isRowAvailable();
-
-
-    /**
-     * <p>Return the number of rows of data objects represented by this
-     * {@link DataModel}.  If the number of rows is unknown, or no
-     * <code>wrappedData</code> is available, return -1.</p>
-     *
-     * @throws FacesException if an error occurs getting the row count
-     */
-    public abstract int getRowCount();
-
-
-    /**
-     * <p>Return an object representing the data for the currenty selected
-     * row index.  If no <code>wrappedData</code> is available, return
-     * <code>null</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row data
-     * @throws IllegalArgumentException if now row data is available
-     *  at the currently specified row index
-     */
-    public abstract E getRowData();
-
-
-    /**
-     * <p>Return the zero-relative index of the currently selected row.  If
-     * we are not currently positioned on a row, or no <code>wrappedData</code>
-     * is available, return -1.</p>
-     *
-     * @throws FacesException if an error occurs getting the row index
-     */
-    public abstract int getRowIndex();
-
-
-    /**
-     * <p>Set the zero-relative index of the currently selected row, or -1
-     * to indicate that we are not positioned on a row.  It is
-     * possible to set the row index at a value for which the underlying data
-     * collection does not contain any row data.  Therefore, callers may
-     * use the <code>isRowAvailable()</code> method to detect whether row data
-     * will be available for use by the <code>getRowData()</code> method.</p>
-     *
-     * <p>If there is no <code>wrappedData</code> available when this method
-     * is called, the specified <code>rowIndex</code> is stored (and may be
-     * retrieved by a subsequent call to <code>getRowData()</code>), but no
-     * event is sent.  Otherwise, if the currently selected row index is
-     * changed by this call, a {@link DataModelEvent} will be sent to the
-     * <code>rowSelected()</code> method of all registered
-     * {@link DataModelListener}s.</p>
-     *
-     * @param rowIndex The new zero-relative index (must be non-negative)
-     *
-     * @throws FacesException if an error occurs setting the row index
-     * @throws IllegalArgumentException if <code>rowIndex</code>
-     *  is less than -1
-     */
-    public abstract void setRowIndex(int rowIndex);
-
-
-    /**
-     * <p>Return the object representing the data wrapped by this
-     * {@link DataModel}, if any.</p>
-     */
-    public abstract Object getWrappedData();
-
-
-    /**
-     * <p>Set the object representing the data collection wrapped by this
-     * {@link DataModel}.  If the specified <code>data</code> is
-     * <code>null</code>, detach this {@link DataModel} from any previously
-     * wrapped data collection instead.</p>
-     *
-     * <p>If <code>data</code> is non-<code>null</code>, the currently selected
-     * row index must be set to zero, and a {@link DataModelEvent} must be sent
-     * to the <code>rowSelected()</code> method of all registered
-     * {@link DataModelListener}s indicating that this row is now selected.</p>
-     *
-     * @param data Data collection to be wrapped, or <code>null</code> to
-     *  detach from any previous data collection
-     *
-     * @throws ClassCastException if <code>data</code> is not of the
-     *  appropriate type for this {@link DataModel} implementation
-     */
-    public abstract void setWrappedData(Object data);
-
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    /**
-     * <p>The list of registered {@link DataModelListener}s for this
-     * {@link DataModel}.  This variable will be <code>null</code> unless
-     * there is at least one registered listener.</p>
-     */
-    private List<DataModelListener> listeners = null;
-
-
-    // --------------------------------------------- Event Listener Registration
-
-
-    /**
-     * <p>Add a new {@link DataModelListener} to the set interested in
-     * notifications from this {@link DataModel}.</p>
-     *
-     * @param listener The new {@link DataModelListener} to be registered
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public void addDataModelListener(DataModelListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-        if (listeners == null) {
-            //noinspection CollectionWithoutInitialCapacity
-            listeners = new ArrayList<DataModelListener>();
-        }
-        listeners.add(listener);
-
-    }
-
-
-    /**
-     * <p>Return the set of {@link DataModelListener}s interested in
-     * notifications from this {@link DataModel}.  If there are no such
-     * listeners, an empty array is returned.</p>
-     */
-    public DataModelListener[] getDataModelListeners() {
-
-	if (listeners == null) {
-	    return EMPTY_DATA_MODEL_LISTENER;
-	} else {
-	    return listeners.toArray
-		    (new DataModelListener[listeners.size()]);
-	}
-
-    }
-
-
-    /**
-     * <p>Remove an existing {@link DataModelListener} from the set
-     * interested in notifications from this {@link DataModel}.</p>
-     *
-     * @param listener The old {@link DataModelListener} to be deregistered
-     *
-     * @throws NullPointerException if <code>listener</code>
-     *  is <code>null</code>
-     */
-    public void removeDataModelListener(DataModelListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException();
-        }
-        if (listeners != null) {
-            listeners.remove(listener);
-            if (listeners.isEmpty()) {
-                listeners = null;
-            }
-        }
-
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return a read-only <code>Iterator</code> over the
-     * row data for this model.</p>
-     * 
-     * @since 2.0
-     */
-    public Iterator<E> iterator() {
-
-        return new DataModelIterator<E>(this);
-        
-    }
-    
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    @SuppressWarnings({"unchecked"})
-    private static final class DataModelIterator<T> implements Iterator<T> {
-
-        private DataModel<T> model;
-        private int index;
-
-        
-        // -------------------------------------------------------- Constructors
-
-
-        DataModelIterator(DataModel<T> model) {
-
-            this.model = model;
-            this.model.setRowIndex(index);
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        /**
-         * @see java.util.Iterator#hasNext()
-         */
-        public boolean hasNext() {
-
-            return model.isRowAvailable();
-
-        }
-
-
-        /**
-         * @see java.util.Iterator#next()
-         */
-        public T next() {
-
-            if (!model.isRowAvailable()) {
-                throw new NoSuchElementException();
-            }
-            Object o = model.getRowData();
-            model.setRowIndex(++index);
-            return (T) o;
-
-        }
-
-
-        /**
-         * Unsupported.
-         * @see java.util.Iterator#remove()
-         */
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-
-        }
-
-    } // END DataModelIterator
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/DataModelEvent.java b/jsf-api/src/main/java/javax/faces/model/DataModelEvent.java
deleted file mode 100644
index 534a388..0000000
--- a/jsf-api/src/main/java/javax/faces/model/DataModelEvent.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.EventObject;
-
-
-/**
- * <p><strong>DataModelEvent</strong> represents an event of interest to
- * registered listeners that occurred on the specified {@link DataModel}.</p>
- */
-
-public class DataModelEvent extends EventObject {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct an event object that is associated with the specified
-     * row index and associated data.</p>
-     *
-     * @param model The {@link DataModel} on which this event occurred
-     * @param index The zero relative row index for which this event occurred,
-     *   or -1 for no specific row association
-     * @param data Representation of the data for the row specified by
-     *  <code>index</code>, or <code>null</code> for no particular row data
-     */
-    public DataModelEvent(DataModel model, int index, Object data) {
-
-	super(model);
-	this.index = index;
-	this.data = data;
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private Object data = null;
-
-
-    private int index = 0;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the {@link DataModel} that fired this event.</p>
-     */
-    public DataModel getDataModel() {
-
-	return ((DataModel) getSource());
-
-    }
-
-
-    /**
-     * <p>Return the object representing the data for the specified row index,
-     * or <code>null</code> for no associated row data.</p>
-     */
-    public Object getRowData() {
-
-	return (this.data);
-
-    }
-
-
-    /**
-     * <p>Return the row index for this event, or -1 for no specific row.</p>
-     */
-    public int getRowIndex() {
-
-	return (this.index);
-
-    }
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/DataModelListener.java b/jsf-api/src/main/java/javax/faces/model/DataModelListener.java
deleted file mode 100644
index 5254404..0000000
--- a/jsf-api/src/main/java/javax/faces/model/DataModelListener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.EventListener;
-
-
-/**
- * <p><strong>DataModelListener</strong> represents an event listener that
- * wishes to be notified of {@link DataModelEvent}s occurring on a
- * particular {@link DataModel} instance.</p>
- */
-
-public interface DataModelListener extends EventListener {
-
-
-    /**
-     * <p>Notification that a particular row index, with the associated
-     * row data, has been selected for processing.</p>
-     *
-     * @param event The {@link DataModelEvent} we are processing
-     */
-    public void rowSelected(DataModelEvent event);
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/ListDataModel.java b/jsf-api/src/main/java/javax/faces/model/ListDataModel.java
deleted file mode 100644
index 5d4bf74..0000000
--- a/jsf-api/src/main/java/javax/faces/model/ListDataModel.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.List;
-import javax.faces.FacesException;
-
-
-/**
- * <p><strong>ListDataModel</strong> is a convenience implementation of
- * {@link DataModel} that wraps an <code>List</code> of Java objects.</p>
- */
-
-public class ListDataModel<E> extends DataModel<E> {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new {@link ListDataModel} with no specified
-     * wrapped data.</p>
-     */
-    public ListDataModel() {
-
-        this(null);
-
-    }
-
-
-    /**
-     * <p>Construct a new {@link ListDataModel} wrapping the specified
-     * list.</p>
-     *
-     * @param list List to be wrapped (if any)
-     */
-    public ListDataModel(List<E> list) {
-
-        super();
-        setWrappedData(list);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The current row index (zero relative)
-    private int index = -1;
-
-
-    // The list we are wrapping
-    private List list;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return <code>true</code> if there is <code>wrappedData</code>
-     * available, and the current value of <code>rowIndex</code> is greater
-     * than or equal to zero, and less than the size of the list.  Otherwise,
-     * return <code>false</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row availability
-     */
-    public boolean isRowAvailable() {
-
-        if (list == null) {
-	    return (false);
-        } else if ((index >= 0) && (index < list.size())) {
-            return (true);
-        } else {
-            return (false);
-        }
-
-    }
-
-
-    /**
-     * <p>If there is <code>wrappedData</code> available, return the
-     * length of the list.  If no <code>wrappedData</code> is available,
-     * return -1.</p>
-     *
-     * @throws FacesException if an error occurs getting the row count
-     */
-    public int getRowCount() {
-
-        if (list == null) {
-	    return (-1);
-        }
-        return (list.size());
-
-    }
-
-
-    /**
-     * <p>If row data is available, return the array element at the index
-     * specified by <code>rowIndex</code>.  If no wrapped data is available,
-     * return <code>null</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row data
-     * @throws IllegalArgumentException if now row data is available
-     *  at the currently specified row index
-     */
-    public E getRowData() {
-
-        if (list == null) {
-	    return (null);
-        } else if (!isRowAvailable()) {
-            throw new NoRowAvailableException();
-        } else {
-            return ((E) list.get(index));
-        }
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}     
-     */ 
-    public int getRowIndex() {
-
-        return (index);
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */ 
-    public void setRowIndex(int rowIndex) {
-
-        if (rowIndex < -1) {
-            throw new IllegalArgumentException();
-        }
-        int old = index;
-        index = rowIndex;
-	if (list == null) {
-	    return;
-	}
-	DataModelListener [] listeners = getDataModelListeners();
-        if ((old != index) && (listeners != null)) {
-            Object rowData = null;
-            if (isRowAvailable()) {
-                rowData = getRowData();
-            }
-            DataModelEvent event =
-                new DataModelEvent(this, index, rowData);
-            int n = listeners.length;
-            for (int i = 0; i < n; i++) {
-		if (null != listeners[i]) {
-		    listeners[i].rowSelected(event);
-		}
-            }
-        }
-
-    }
-
-
-    public Object getWrappedData() {
-
-        return (this.list);
-
-    }
-
-
-    /**
-     * @throws ClassCastException if <code>data</code> is
-     *  non-<code>null</code> and is not a <code>List</code>
-     */
-    public void setWrappedData(Object data) {
-
-        if (data == null) {
-            list = null;
-            setRowIndex(-1);
-        } else {
-            list = (List) data;
-            index = -1;
-            setRowIndex(0);
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/NoRowAvailableException.java b/jsf-api/src/main/java/javax/faces/model/NoRowAvailableException.java
deleted file mode 100644
index b8f1754..0000000
--- a/jsf-api/src/main/java/javax/faces/model/NoRowAvailableException.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.model;
-
-/**
- * Custom exception to be thrown by the default <code>DataModel</code> implementations.
- * This exception extends IllegalArgumentException and is package private so
- * the TCK will continue to pass, but the exception type is more descriptive.
- */
-class NoRowAvailableException extends IllegalArgumentException {
-
-    private static final long serialVersionUID = 3794135774633215459L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public NoRowAvailableException() {
-        super();
-    }
-
-
-    public NoRowAvailableException(String s) {
-        super(s);
-    }
-
-
-    public NoRowAvailableException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-
-    public NoRowAvailableException(Throwable cause) {
-        super(cause);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/ResultDataModel.java b/jsf-api/src/main/java/javax/faces/model/ResultDataModel.java
deleted file mode 100644
index 1e86ca4..0000000
--- a/jsf-api/src/main/java/javax/faces/model/ResultDataModel.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.SortedMap;
-import javax.faces.FacesException;
-import javax.servlet.jsp.jstl.sql.Result;
-
-
-/**
- * <p><strong>ResultDataModel</strong> is a convenience implementation of
- * {@link DataModel} that wraps a JSTL <code>Result</code> object, typically
- * representing the results of executing an SQL query via JSTL tags.</p>
- */
-
-public class ResultDataModel extends DataModel<SortedMap<String,Object>> {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new {@link ResultDataModel} with no specified
-     * wrapped data.</p>
-     */
-    public ResultDataModel() {
-
-        this(null);
-
-    }
-
-
-    /**
-     * <p>Construct a new {@link ResultDataModel} wrapping the specified
-     * <code>Result</code>.</p>
-     *
-     * @param result <code>Result</code> to be wrapped (if any)
-     */
-    public ResultDataModel(Result result) {
-
-        super();
-        setWrappedData(result);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The current row index (zero relative)
-    private int index = -1;
-
-
-    // The Result we are wrapping
-    private Result result = null;
-
-
-    // The individual rows of this Result, each represented as a Map
-    // with column names as keys and associated data values as values
-    private SortedMap rows[] = null;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return <code>true</code> if there is <code>wrappedData</code>
-     * available, and the current value of <code>rowIndex</code> is greater
-     * than or equal to zero, and less than the length of the array returned
-     * by calling <code>getRows()</code> on the underlying <code>Result</code>.
-     * Otherwise, return <code>false</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row availability
-     */ 
-    public boolean isRowAvailable() {
-
-        if (result == null) {
-	    return (false);
-        } else if ((index >= 0) && (index < rows.length)) {
-            return (true);
-        } else {
-            return (false);
-        }
-
-    }
-
-
-    /**
-     * <p>If there is <code>wrappedData</code> available, return the
-     * length of the array returned by calling <code>getRows()</code>
-     * on the underlying <code>Result</code>.  If no <code>wrappedData</code>
-     * is available, return -1.</p>
-     *
-     * @throws FacesException if an error occurs getting the row count
-     */
-    public int getRowCount() {
-
-        if (result == null) {
-	    return (-1);
-        }
-        return (rows.length);
-
-    }
-
-
-    /**
-     * <p>If row data is available, return the <code>SortedMap</code> array
-     * element at the index specified by <code>rowIndex</code> of the
-     * array returned by calling <code>getRows()</code> on the underlying
-     * <code>Result</code>.  If no wrapped data is available,
-     * return <code>null</code>.</p>
-     *
-     * <p>Note that, if a non-<code>null</code> <code>Map</code> is returned
-     * by this method, it will contain the values of the columns for the
-     * current row, keyed by column name.  Column name comparisons must be
-     * performed in a case-insensitive manner.</p>
-     *
-     * @throws FacesException if an error occurs getting the row data
-     * @throws IllegalArgumentException if now row data is available
-     *  at the currently specified row index
-     */
-    public SortedMap<String,Object> getRowData() {
-
-        if (result == null) {
-	    return (null);
-        } else if (!isRowAvailable()) {
-            throw new NoRowAvailableException();
-        } else {
-            //noinspection unchecked
-            return ((SortedMap<String,Object>)rows[index]);
-        }
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}     
-     */ 
-    public int getRowIndex() {
-
-        return (index);
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */ 
-    public void setRowIndex(int rowIndex) {
-
-        if (rowIndex < -1) {
-            throw new IllegalArgumentException();
-        }
-        int old = index;
-        index = rowIndex;
-	if (result == null) {
-	    return;
-	}
-	DataModelListener [] listeners = getDataModelListeners();
-        if ((old != index) && (listeners != null)) {
-            SortedMap<String,Object> rowData = null;
-            if (isRowAvailable()) {
-                rowData = getRowData();
-            }
-            DataModelEvent event =
-                new DataModelEvent(this, index, rowData);
-            int n = listeners.length;
-            for (int i = 0; i < n; i++) {
-		if (null != listeners[i]) {
-		    listeners[i].rowSelected(event);
-		}
-            }
-        }
-
-    }
-
-
-    public Object getWrappedData() {
-
-        return (this.result);
-
-    }
-
-
-    /**
-     * @throws ClassCastException if <code>data</code> is
-     *  non-<code>null</code> and is not a <code>Result</code>
-     */
-    public void setWrappedData(Object data) {
-
-        if (data == null) {
-            result = null;
-            rows = null;
-            setRowIndex(-1);
-        } else {
-            result = (Result) data;
-            rows = result.getRows();
-            index = -1;
-            setRowIndex(0);
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/ResultSetDataModel.java b/jsf-api/src/main/java/javax/faces/model/ResultSetDataModel.java
deleted file mode 100644
index d7847a1..0000000
--- a/jsf-api/src/main/java/javax/faces/model/ResultSetDataModel.java
+++ /dev/null
@@ -1,813 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.util.AbstractCollection;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.NotSerializableException;
-import java.io.ObjectOutputStream;
-
-import javax.faces.FacesException;
-
-
-/**
- * <p><strong>ResultSetDataModel</strong> is a convenience implementation of
- * {@link DataModel} that wraps a <code>ResultSet</code> of Java objects.
- * Note that the specified <code>ResultSet</code> <strong>MUST</strong>
- * be scrollable.  In addition, if input components (that will be updating
- * model values) reference this object in value binding expressions, the
- * specified <code>ResultSet</code> <strong>MUST</strong> be updatable.</p>
- */
-
-public class ResultSetDataModel extends DataModel<Map<String,Object>> {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new {@link ResultSetDataModel} with no specified
-     * wrapped data.</p>
-     */
-    public ResultSetDataModel() {
-
-        this(null);
-
-    }
-
-
-    /**
-     * <p>Construct a new {@link ResultSetDataModel} wrapping the specified
-     * <code>ResultSet</code>.</p>
-     *
-     * @param resultSet <code>ResultSet</code> to be wrapped (if any)
-     */
-    public ResultSetDataModel(ResultSet resultSet) {
-
-        super();
-        setWrappedData(resultSet);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The current row index (zero relative)
-    private int index = -1;
-
-
-    // The metadata for the ResultSet we are wrapping (lazily instantiated)
-    private ResultSetMetaData metadata = null;
-
-
-    // The ResultSet we are wrapping
-    private ResultSet resultSet = null;
-
-
-    // Has the row at the current index been updated?
-    private boolean updated = false;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return <code>true</code> if there is <code>wrappedData</code>
-     * available, and the result of calling <code>absolute()</code> on the
-     * underlying <code>ResultSet</code>, passing the current value of
-     * <code>rowIndex</code> plus one (to account for the fact that
-     * <code>ResultSet</code> uses one-relative indexing), returns
-     * <code>true</code>.  Otherwise, return <code>false</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row availability
-     */ 
-    public boolean isRowAvailable() {
-
-        if (resultSet == null) {
-	    return (false);
-        } else if (index < 0) {
-            return (false);
-        }
-        try {
-            if (resultSet.absolute(index + 1)) {
-                return (true);
-            } else {
-                return (false);
-            }
-        } catch (SQLException e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-
-    /**
-     * <p>Return -1, since <code>ResultSet</code> does not provide a
-     * standard way to determine the number of available rows without
-     * scrolling through the entire <code>ResultSet</code>, and this can
-     * be very expensive if the number of rows is large.</p>
-     *
-     * @throws FacesException if an error occurs getting the row count
-     */
-    public int getRowCount() {
-
-	return (-1);
-
-    }
-
-
-    /**
-     * <p>If row data is available, return a <code>Map</code> representing
-     * the values of the columns for the row specified by <code>rowIndex</code>,
-     * keyed by the corresponding column names.  If no wrapped data is
-     * available, return <code>null</code>.</p>
-     *
-     * <p>If a non-<code>null</code> <code>Map</code> is returned, its behavior
-     * must correspond to the contract for a mutable <code>Map</code> as
-     * described in the JavaDocs for <code>AbstractMap</code>, with the
-     * following exceptions and specialized behavior:</p>
-     * <ul>
-
-     * <li>The <code>Map</code>, and any supporting objects it returns,
-     *     must perform all column name comparisons in a
-     *     case-insensitive manner.  This case-insensitivity must be
-     *     implemented using a case-insensitive <code>Comparator</code>,
-     *     such as
-     *     <code>String.CASE_INSENSITIVE_ORDER</code>.</li>
-
-     * <li>The following methods must throw
-     *     <code>UnsupportedOperationException</code>:  <code>clear()</code>,
-     *     <code>remove()</code>.</li>
-     * <li>The <code>entrySet()</code> method must return a <code>Set</code>
-     *     that has the following behavior:
-     *     <ul>
-     *     <li>Throw <code>UnsupportedOperationException</code> for any attempt
-     *         to add or remove entries from the <code>Set</code>, either
-     *         directly or indirectly through an <code>Iterator</code>
-     *         returned by the <code>Set</code>.</li>
-     *     <li>Updates to the <code>value</code> of an entry in this
-     *         <code>set</code> must write through to the corresponding
-     *         column value in the underlying <code>ResultSet</code>.</li>
-     *     </ul></li>
-     * <li>The <code>keySet()</code> method must return a <code>Set</code>
-     *     that throws <code>UnsupportedOperationException</code> on any
-     *     attempt to add or remove keys, either directly or through an
-     *     <code>Iterator</code> returned by the <code>Set</code>.</li>
-     * <li>The <code>put()</code> method must throw
-     *     <code>IllegalArgumentException</code> if a key value for which
-     *     <code>containsKey()</code> returns <code>false</code> is
-     *     specified.  However, if a key already present in the <code>Map</code>
-     *     is specified, the specified value must write through to the
-     *     corresponding column value in the underlying <code>ResultSet</code>.
-     *     </li>
-     * <li>The <code>values()</code> method must return a
-     *     <code>Collection</code> that throws
-     *     <code>UnsupportedOperationException</code> on any attempt to add
-     *     or remove values, either directly or through an <code>Iterator</code>
-     *     returned by the <code>Collection</code>.</li>
-     * </ul>
-     *
-     * @throws FacesException if an error occurs getting the row data
-     * @throws IllegalArgumentException if now row data is available
-     *  at the currently specified row index
-     */ 
-    public Map<String,Object> getRowData() {
-
-        if (resultSet == null) {
-	    return (null);
-        } else if (!isRowAvailable()) {
-            throw new NoRowAvailableException();
-        }
-        try {
-            getMetaData();
-            return (new ResultSetMap(this, String.CASE_INSENSITIVE_ORDER));
-        } catch (SQLException e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}     
-     */ 
-    public int getRowIndex() {
-
-        return (index);
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */ 
-    public void setRowIndex(int rowIndex) {
-
-        if (rowIndex < -1) {
-            throw new IllegalArgumentException();
-        }
-
-        // Tell the ResultSet that the previous row was updated if necessary
-        if (updated && (resultSet != null)) {
-            try {
-		if (!resultSet.rowDeleted()) {
-		    resultSet.updateRow();
-		}
-                updated = false;
-            } catch (SQLException e) {
-                throw new FacesException(e);
-            }
-        }
-
-        int old = index;
-        index = rowIndex;
-	if (resultSet == null) {
-	    return;
-	}
-	DataModelListener [] listeners = getDataModelListeners();
-        if ((old != index) && (listeners != null)) {
-            Object rowData = null;
-            if (isRowAvailable()) {
-                rowData = getRowData();
-            }
-            DataModelEvent event =
-                new DataModelEvent(this, index, rowData);
-            int n = listeners.length;
-            for (int i = 0; i < n; i++) {
-		if (null != listeners[i]) {
-		    listeners[i].rowSelected(event);
-		}
-            }
-        }
-
-
-    }
-
-
-    public Object getWrappedData() {
-
-        return (this.resultSet);
-
-    }
-
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     */
-    public void setWrappedData(Object data) {
-
-        if (data == null) {
-            metadata = null;
-            resultSet = null;
-            setRowIndex(-1);
-        } else {
-            metadata = null;
-            resultSet = (ResultSet) data;
-            index = -1;
-            setRowIndex(0);
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Return the <code>ResultSetMetaData</code> for the
-     * <code>ResultSet</code> we are wrapping, caching it the first time
-     * it is returned.</p>
-     *
-     * @throws FacesException if the <code>ResultSetMetaData</code>
-     *  cannot be acquired
-     */
-    private ResultSetMetaData getMetaData() {
-
-        if (metadata == null) {
-            try {
-                metadata = resultSet.getMetaData();
-            } catch (SQLException e) {
-                throw new FacesException(e);
-            }
-        }
-        return (metadata);
-
-    }
-
-
-    /**
-     * <p>Mark the current row as having been updated, so that we will call
-     * <code>updateRow()</code> before moving elsewhere.</p>
-     */
-    private void updated() {
-
-        this.updated = true;
-
-    }
-
-
-    // --------------------------------------------------------- Private Classes
-
-
-    // Private implementation of Map that delegates column get and put
-    // operations to the underlying ResultSet, after setting the required
-    // row index
-    // NOT SERIALIZABLE
-    @SuppressWarnings({"serial"})
-    private static class ResultSetMap extends TreeMap<String,Object> {
-
-        private ResultSetDataModel model;
-
-        public ResultSetMap(ResultSetDataModel model,
-                            Comparator<String> comparator) throws SQLException {
-
-            super(comparator);
-            this.model = model;
-            index = model.index;
-            model.resultSet.absolute(index + 1);
-            int n = model.metadata.getColumnCount();
-            for (int i = 1; i <= n; i++) {
-                super.put(model.metadata.getColumnName(i),
-                          model.metadata.getColumnName(i));
-            }
-        }
-
-        // The zero-relative row index of our row
-        private int index;
-
-        // Removing entries is not allowed
-        public void clear() {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean containsValue(Object value) {
-            for (Iterator i = entrySet().iterator(); i .hasNext(); ) {
-                Map.Entry entry = (Map.Entry) i.next();
-                Object contained = entry.getValue();
-                 if (value == null) {
-                    if (contained == null) {
-                        return (true);
-                    }
-                } else {
-                    if (value.equals(contained)) {
-                        return (true);
-                    }
-                }
-            }
-            return (false);
-        }
-
-        public Set<Map.Entry<String,Object>> entrySet() {
-            return (new ResultSetEntries(this));
-        }
-
-        public Object get(Object key) {
-            if (!containsKey(key)) {
-                return (null);
-            }
-            try {
-                model.resultSet.absolute(index + 1);
-                return (model.resultSet.getObject((String) realKey(key)));
-            } catch (SQLException e) {
-                throw new FacesException(e);
-            }
-        }
-
-        public Set<String> keySet() {
-            return (new ResultSetKeys(this));
-        }
-
-        public Object put(String key, Object value) {
-            if (!containsKey(key)) {
-                throw new IllegalArgumentException();
-            }
-            
-            try {
-                model.resultSet.absolute(index + 1);
-                Object previous = model.resultSet.getObject((String) realKey(key));
-                if ((previous == null) && (value == null)) {
-                    return (previous);
-                } else if ((previous != null) && (value != null) &&
-                           previous.equals(value)) {
-                    return (previous);
-                }
-                model.resultSet.updateObject((String) realKey(key), value);
-                model.updated();
-                return (previous);
-            } catch (SQLException e) {
-                throw new FacesException(e);
-            }
-        }
-
-        public void putAll(Map<? extends String, ? extends Object> map) {
-            for (Map.Entry<? extends String, ? extends Object> entry : map.entrySet()) {
-                put(entry.getKey(), entry.getValue());
-            }
-        }
-
-        // Removing entries is not allowed
-        public Object remove(Object key) {
-            throw new UnsupportedOperationException();
-        }
-
-        public Collection<Object> values() {
-            return (new ResultSetValues(this));
-        }
-
-        Object realKey(Object key) {
-            return (super.get(key));
-        }
-
-        Iterator<String> realKeys() {
-            return (super.keySet().iterator());
-        }
-
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            throw new NotSerializableException();
-        }
-
-        private void readObject(ObjectInputStream in) throws IOException {
-            throw new NotSerializableException();
-        }
-
-    }
-
-
-    // Private implementation of Set that implements the entrySet() behavior
-    // for ResultSetMap
-    private static class ResultSetEntries extends AbstractSet<Map.Entry<String,Object>> {
-
-        public ResultSetEntries(ResultSetMap map) {
-            this.map = map;
-        }
-
-        private ResultSetMap map;
-
-        // Adding entries is not allowed
-        public boolean add(Map.Entry<String,Object> o) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Adding entries is not allowed
-        public boolean addAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Removing entries is not allowed
-        public void clear() {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean contains(Object o) {
-            if (o == null) {
-                throw new NullPointerException();
-            }
-            if (!(o instanceof Map.Entry)) {
-                return (false);
-            }
-            Map.Entry e = (Map.Entry) o;
-            Object k = e.getKey();
-            Object v = e.getValue();
-            if (!map.containsKey(k)) {
-                return (false);
-            }
-            if (v == null) {
-                return (map.get(k) == null);
-            } else {
-                return (v.equals(map.get(k)));
-            }
-        }
-
-        public boolean isEmpty() {
-            return (map.isEmpty());
-        }
-
-        public Iterator<Map.Entry<String,Object>> iterator() {
-            return (new ResultSetEntriesIterator(map));
-        }
-
-        // Removing entries is not allowed
-        public boolean remove(Object o) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Removing entries is not allowed
-        public boolean removeAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Removing entries is not allowed
-        public boolean retainAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public int size() {
-            return (map.size());
-        }
-
-    }
-
-
-    // Private implementation of Iterator that implements the iterator()
-    // behavior for the Set returned by entrySet() from ResultSetMap
-    private static class ResultSetEntriesIterator implements Iterator<Map.Entry<String,Object>> {
-
-        public ResultSetEntriesIterator(ResultSetMap map) {
-            this.map = map;
-            this.keys = map.keySet().iterator();
-        }
-
-        private ResultSetMap map = null;
-        private Iterator<String> keys = null;
-
-        public boolean hasNext() {
-            return (keys.hasNext());
-        }
-
-        public Map.Entry<String,Object> next() {
-            String key = keys.next();
-            return (new ResultSetEntry(map, key));
-        }
-
-        // Removing entries is not allowed
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    // Private implementation of Map.Entry that implements the behavior for
-    // a single entry from the Set returned by entrySet() from ResultSetMap
-    private static class ResultSetEntry implements Map.Entry<String,Object> {
-
-        public ResultSetEntry(ResultSetMap map, String key) {
-            this.map = map;
-            this.key = key;
-        }
-
-        private ResultSetMap map;
-        private String key;
-
-        public boolean equals(Object o) {
-            if (o == null) {
-                return (false);
-            }
-            if (!(o instanceof Map.Entry)) {
-                return (false);
-            }
-            Map.Entry e = (Map.Entry) o;
-            if (key == null) {
-                if (e.getKey() != null) {
-                    return (false);
-                }
-            } else {
-                if (!key.equals(e.getKey())) {
-                    return (false);
-                }
-            }
-            Object v = map.get(key);
-            if (v == null) {
-                if (e.getValue() != null) {
-                    return (false);
-                }
-            } else {
-                if (!v.equals(e.getValue())) {
-                    return (false);
-                }
-            }
-            return (true);
-        }
-
-        public String getKey() {
-            return (key);
-        }
-
-        public Object getValue() {
-            return (map.get(key));
-        }
-
-        public int hashCode() {
-            Object value = map.get(key);
-            return (((key == null) ? 0 : key.hashCode()) ^
-                    ((value == null) ? 0 : value.hashCode()));
-        }
-
-        public Object setValue(Object value) {
-            Object previous = map.get(key);
-            map.put(key, value);
-            return (previous);
-        }
-
-    }
-
-
-    // Private implementation of Set that implements the keySet() behavior
-    // for ResultSetMap
-    private static class ResultSetKeys extends AbstractSet<String> {
-
-        public ResultSetKeys(ResultSetMap map) {
-            this.map = map;
-        }
-
-        private ResultSetMap map;
-
-        // Adding keys is not allowed
-        public boolean add(String o) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Adding keys is not allowed
-        public boolean addAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Removing keys is not allowed
-        public void clear() {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean contains(Object o) {
-            return (map.containsKey(o));
-        }
-
-        public boolean isEmpty() {
-            return (map.isEmpty());
-        }
-
-        public Iterator<String> iterator() {
-            return (new ResultSetKeysIterator(map));
-        }
-
-        // Removing keys is not allowed
-        public boolean remove(Object o) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Removing keys is not allowed
-        public boolean removeAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        // Removing keys is not allowed
-        public boolean retainAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public int size() {
-            return (map.size());
-        }
-
-    }
-
-
-    // Private implementation of Iterator that implements the iterator()
-    // behavior for the Set returned by keySet() from ResultSetMap
-    private static class ResultSetKeysIterator implements Iterator<String> {
-
-        public ResultSetKeysIterator(ResultSetMap map) {
-            this.keys = map.realKeys();
-        }
-
-        private Iterator<String> keys = null;
-
-        public boolean hasNext() {
-            return (keys.hasNext());
-        }
-
-        public String next() {
-            return (keys.next());
-        }
-
-        // Removing keys is not allowed
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-    // Private implementation of Collection that implements the behavior
-    // for the Collection returned by values() from ResultSetMap
-    private static class ResultSetValues extends AbstractCollection<Object> {
-
-        public ResultSetValues(ResultSetMap map) {
-            this.map = map;
-        }
-
-        private ResultSetMap map;
-
-        public boolean add(Object o) {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean addAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void clear() {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean contains(Object value) {
-            return (map.containsValue(value));
-        }
-
-        public Iterator<Object> iterator() {
-            return (new ResultSetValuesIterator(map));
-        }
-
-        public boolean remove(Object o) {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean removeAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean retainAll(Collection c) {
-            throw new UnsupportedOperationException();
-        }
-
-        public int size() {
-            return (map.size());
-        }
-
-    }
-
-
-    // Private implementation of Iterator that implements the behavior
-    // for the Iterator returned by values().iterator() from ResultSetMap
-    private static class ResultSetValuesIterator implements Iterator<Object> {
-
-        public ResultSetValuesIterator(ResultSetMap map) {
-            this.map = map;
-            this.keys = map.keySet().iterator();
-        }
-
-        private ResultSetMap map;
-        private Iterator<String> keys;
-
-        public boolean hasNext() {
-            return (keys.hasNext());
-        }
-
-        public Object next() {
-            return (map.get(keys.next()));
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/ScalarDataModel.java b/jsf-api/src/main/java/javax/faces/model/ScalarDataModel.java
deleted file mode 100644
index 5783dea..0000000
--- a/jsf-api/src/main/java/javax/faces/model/ScalarDataModel.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import javax.faces.FacesException;
-
-
-/**
- * <p><strong>ScalarDataModel</strong> is a convenience implementation of
- * {@link DataModel} that wraps an individual Java object.</p>
- */
-
-public class ScalarDataModel<E> extends DataModel<E> {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a new {@link ScalarDataModel} with no specified
-     * wrapped data.</p>
-     */
-    public ScalarDataModel() {
-
-        this(null);
-
-    }
-
-
-    /**
-     * <p>Construct a new {@link ScalarDataModel} wrapping the specified
-     * scalar object.</p>
-     *
-     * @param scalar Scalar to be wrapped (if any)
-     */
-    public ScalarDataModel(E scalar) {
-
-        super();
-        setWrappedData(scalar);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The currently selected row index (zero-relative)
-    private int index;
-
-
-    // The scalar we are wrapping
-    private E scalar;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return <code>true</code> if there is <code>wrappedData</code>
-     * available, and the current value of <code>rowIndex</code> is zero.
-     * Otherwise, return <code>false</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row availability
-     */
-    public boolean isRowAvailable() {
-
-        if (scalar == null) {
-	    return (false);
-        } else if (index == 0) {
-            return (true);
-        } else {
-            return (false);
-        }
-
-    }
-
-
-    /**
-     * <p>If there is <code>wrappedData</code> available, return 1.
-     * If no <code>wrappedData</code> is available, return -1.</p>
-     *
-     * @throws FacesException if an error occurs getting the row count
-     */
-    public int getRowCount() {
-
-        if (scalar == null) {
-	    return (-1);
-        }
-        return (1);
-
-    }
-
-
-    /**
-     * <p>If wrapped data is available, return the wrapped data instance.
-     * Otherwise, return <code>null</code>.</p>
-     *
-     * @throws FacesException if an error occurs getting the row data
-     * @throws IllegalArgumentException if now row data is available
-     *  at the currently specified row index
-     */
-    public E getRowData() {
-
-        if (scalar == null) {
-	    return (null);
-        } else if (!isRowAvailable()) {
-            throw new NoRowAvailableException();
-        } else {
-            //noinspection unchecked
-            return (scalar);
-        }
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}     
-     */ 
-    public int getRowIndex() {
-
-        return (index);
-
-    }
-
-
-    /**
-     * @throws FacesException {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */ 
-    public void setRowIndex(int rowIndex) {
-
-        if (rowIndex < -1) {
-            throw new IllegalArgumentException();
-        }
-        int old = index;
-        index = rowIndex;
-	if (scalar == null) {
-	    return;
-	}
-	DataModelListener [] listeners = getDataModelListeners();
-        if ((old != index) && (listeners != null)) {
-            Object rowData = null;
-            if (isRowAvailable()) {
-                rowData = getRowData();
-            }
-            DataModelEvent event =
-                new DataModelEvent(this, index, rowData);
-            int n = listeners.length;
-            for (int i = 0; i < n; i++) {
-		if (null != listeners[i]) {
-		    listeners[i].rowSelected(event);
-		}
-            }
-        }
-
-    }
-
-
-    public Object getWrappedData() {
-
-        return (this.scalar);
-
-    }
-
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     */
-    public void setWrappedData(Object data) {
-
-        if (data == null) {
-            scalar = null;
-            setRowIndex(-1);
-        } else {
-            scalar = (E) data;
-            index = -1;
-            setRowIndex(0);
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/SelectItem.java b/jsf-api/src/main/java/javax/faces/model/SelectItem.java
deleted file mode 100644
index 51bd832..0000000
--- a/jsf-api/src/main/java/javax/faces/model/SelectItem.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.io.Serializable;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UISelectOne;
-
-
-/**
- * <p><strong class="changed_modified_2_0">SelectItem</strong> represents a
- * single <em>item</em> in the list of supported <em>items</em>
- * associated with a {@link UISelectMany} or {@link UISelectOne}
- * component.</p>
- */
-
-public class SelectItem implements Serializable {
-
-    private static final long serialVersionUID = 876782311414654999L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a <code>SelectItem</code> with no initialized property
-     * values.</p>
-     */
-    public SelectItem() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a <code>SelectItem</code> with the specified value.  The
-     * <code>label</code> property will be set to the value (converted to a
-     * String, if necessary), the <code>description</code> property will be
-     * set to <code>null</code>, the <code>disabled</code> property will be set to 
-     * <code>false</code>, and the <code>escape</code> property will be set to
-     ( <code>true</code>.</p>
-     *
-     * @param value Value to be delivered to the model if this
-     *  item is selected by the user
-     */
-    public SelectItem(Object value) {
-
-        this(value, value == null ? null : value.toString(), null, false, true, false);
-
-    }
-
-
-    /**
-     * <p>Construct a <code>SelectItem</code> with the specified value and
-     * label.  The <code>description</code> property will be set to
-     * <code>null</code>, the <code>disabled</code> property will be
-     * set to <code>false</code>, and the <code>escape</code> property will
-     * be set to <code>true</code>.</p>
-     *
-     * @param value Value to be delivered to the model if this
-     *  item is selected by the user
-     * @param label Label to be rendered for this item in the response
-     */
-    public SelectItem(Object value, String label) {
-
-        this(value, label, null, false, true, false);
-
-    }
-
-
-    /**
-     * <p>Construct a <code>SelectItem</code> instance with the specified
-     * value, label and description.  This <code>disabled</code> property
-     * will be set to <code>false</code>,  and the <code>escape</code> 
-     * property will be set to <code>true</code>.</p>
-     *
-     * @param value Value to be delivered to the model if this
-     *  item is selected by the user
-     * @param label Label to be rendered for this item in the response
-     * @param description Description of this item, for use in tools
-     */
-    public SelectItem(Object value, String label, String description) {
-
-        this(value, label, description, false, true, false);
-
-    }
-
-
-    /**
-     * <p>Construct a <code>SelectItem</code> instance with the specified
-     * property values.   The <code>escape</code> property will be set 
-     * to <code>true</code>.</p>
-     *
-     * @param value Value to be delivered to the model if this
-     *  item is selected by the user
-     * @param label Label to be rendered for this item in the response
-     * @param description Description of this item, for use in tools
-     * @param disabled Flag indicating that this option is disabled
-     */
-    public SelectItem(Object value, String label, String description,
-                      boolean disabled) {
-
-        this(value, label, description, disabled, true, false);
-
-    }
-    
-    /**
-     * <p>Construct a <code>SelectItem</code> instance with the specified
-     * property values.</p>
-     *
-     * @param value Value to be delivered to the model if this
-     *  item is selected by the user
-     * @param label Label to be rendered for this item in the response
-     * @param description Description of this item, for use in tools
-     * @param disabled Flag indicating that this option is disabled
-     * @param escape Flag indicating that the text of this option should be
-     * escaped when rendered.
-     * @since 1.2
-     */
-    public SelectItem(Object value, String label, String description,
-                      boolean disabled, boolean escape) {
-
-        this(value, label, description, disabled, escape, false);
-
-    }
-    
-    
-    /**
-     * <p>Construct a <code>SelectItem</code> instance with the specified
-     * property values.</p>
-     *
-     * @param value Value to be delivered to the model if this
-     *  item is selected by the user
-     * @param label Label to be rendered for this item in the response
-     * @param description Description of this item, for use in tools
-     * @param disabled Flag indicating that this option is disabled
-     * @param escape Flag indicating that the text of this option should be
-     * escaped when rendered.
-     * @param noSelectionOption Flag indicating that the current option is a "no selection" option
-     * @since 1.2
-     */
-    public SelectItem(Object value, String label, String description,
-                      boolean disabled, boolean escape, boolean noSelectionOption) {
-
-        super();
-        setValue(value);
-        setLabel(label);
-        setDescription(description);
-        setDisabled(disabled);
-        setEscape(escape);
-        setNoSelectionOption(noSelectionOption);
-
-    }
-
-    
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private String description = null;
-    private boolean disabled = false;
-    private String label = null;
-    @SuppressWarnings({"NonSerializableFieldInSerializableClass"})
-    private Object value = null;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return a description of this item, for use in development tools.
-     */
-    public String getDescription() {
-
-        return (this.description);
-
-    }
-
-
-    /**
-     * <p>Set the description of this item, for use in development tools.</p>
-     *
-     * @param description The new description
-     */
-    public void setDescription(String description) {
-
-        this.description = description;
-
-    }
-
-
-    /**
-     * <p>Return the disabled flag for this item, which should modify the
-     * rendered output to make this item unavailable for selection by the user
-     * if set to <code>true</code>.</p>
-     */
-    public boolean isDisabled() {
-
-        return (this.disabled);
-
-    }
-
-
-    /**
-     * <p>Set the disabled flag for this item, which should modify the
-     * rendered output to make this item unavailable for selection by the user
-     * if set to <code>true</code>.</p>
-     *
-     * @param disabled The new disabled flag
-     */
-    public void setDisabled(boolean disabled) {
-
-        this.disabled = disabled;
-
-    }
-
-
-    /**
-     * <p>Return the label of this item, to be rendered visibly for the user.
-     */
-    public String getLabel() {
-
-        return (this.label);
-
-    }
-
-
-    /**
-     * <p>Set the label of this item, to be rendered visibly for the user.
-     *
-     * @param label The new label
-     */
-    public void setLabel(String label) {
-
-        this.label = label;
-
-    }
-
-
-    /**
-     * <p>Return the value of this item, to be delivered to the model
-     * if this item is selected by the user.
-     */
-    public Object getValue() {
-
-        return (this.value);
-
-    }
-
-
-    /**
-     * <p>Set the value of this item, to be delivered to the model
-     * if this item is selected by this user.
-     *
-     * @param value The new value
-     *
-     */
-    public void setValue(Object value) {
-
-        this.value = value;
-
-    }
-
-    private boolean escape;
-
-    /**
-     * <p class="changed_added_2_0">If and only if this returns
-     * <code>true</code>, the code that renders this select item must
-     * escape the label using escaping syntax appropriate to the content
-     * type being rendered.  </p>
-     *
-     * @since 2.0
-     */
-    public boolean isEscape() {
-        return this.escape;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Set the value of the escape
-     * property.  See {@link #isEscape}.</p>
-     *
-     * @since 2.0
-     */
-    public void setEscape(boolean escape) {
-        this.escape = escape;
-    }
-    
-    private boolean noSelectionOption = false;
-
-    /** <p class="changed_added_2_0">Return the value of the
-     * <code>noSelectionOption</code> property.  If the value of this
-     * property is <code>true</code>, the system interprets the option
-     * represented by this <code>SelectItem</code> instance as
-     * representing a "no selection" option.  See {@link
-     * UISelectOne#validateValue} and {@link UISelectMany#validateValue}
-     * for usage.</p>
-     *
-     * @since 2.0
-     */
-
-    public boolean isNoSelectionOption() {
-        return noSelectionOption;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Set the value of the
-     * <code>noSelectionOption</code> property.</p>
-     *
-     * @since 2.0
-     */
-
-    public void setNoSelectionOption(boolean noSelectionOption) {
-        this.noSelectionOption = noSelectionOption;
-    }
-
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/SelectItemGroup.java b/jsf-api/src/main/java/javax/faces/model/SelectItemGroup.java
deleted file mode 100644
index 2fe4dab..0000000
--- a/jsf-api/src/main/java/javax/faces/model/SelectItemGroup.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UISelectOne;
-
-
-/**
- * <p><strong>SelectItemGroup</strong> is a subclass of {@link SelectItem} that
- * identifies a set of options that will be made available as a subordinate
- * "submenu" or "options list", depending upon the requirements of the
- * {@link UISelectMany} or {@link UISelectOne} renderer that is actually used.
- * In general, the <code>value</code> property of this instance will be ignored,
- * and the <code>label</code> property of this instance will be used to label
- * the submenu.</p>
- *
- * <p>Although it is feasible to incorporate {@link SelectItemGroup} instances
- * in he <code>selectItems</code> property of this instance (thereby creating
- * a data structure suitable for cascading submenus), some renderers may place
- * restrictions on the level of nesting they support.  For example, HTML based
- * renderers that create an <code><select></code> element will typically
- * render this instance as an <code><optgroup></code> element, but the
- * HTML 4.01 Specification disallows nested option groups.</p>
- */
-
-public class SelectItemGroup extends SelectItem {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a <code>SelectItemGroup</code> with no initialized property
-     * values.</p>
-     */
-    public SelectItemGroup() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a <code>SelectItemGroup</code> with the specified label
-     * and no associated <code>selectItem</code>s.  The <code>value</code>
-     * property will be set to a zero-length String, the
-     * <code>description</code> property will be set to <code>null</code>,
-     * and the <code>disabled</code> property will be set to false.</p>
-     *
-     * @param label Label to be rendered for this group in the response
-     *
-     * @throws NullPointerException if <code>label</code>
-     *  is <code>false</code>
-     */
-    public SelectItemGroup(String label) {
-
-        super("", label);
-
-    }
-
-
-    /**
-     * <p>Construct a <code>SelectItemGroup</code> with the specified
-     * properties.  The <code>value</code> property will be set to a
-     * zero-length String.</p>
-     *
-     * @param label Label to be rendered for this group in the response
-     * @param description Description of this group, for use in tools
-     * @param disabled Flag indicating that this group is disabled
-     * @param selectItems Array of {@link SelectItem} describing the
-     *  items available in this group
-     *
-     * @throws NullPointerException if <code>label</code>
-     *  or <code>selectItems</code> is <code>false</code>
-     */
-    public SelectItemGroup(String label, String description, boolean disabled,
-                           SelectItem selectItems[]) {
-
-        super("", label, description, disabled);
-        setSelectItems(selectItems);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private SelectItem selectItems[] = null;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the set of subordinate {@link SelectItem}s for this group.</p>
-     */
-    public SelectItem[] getSelectItems() {
-
-        return (this.selectItems);
-
-    }
-
-
-    /**
-     * <p>Set the set of subordinate {@link SelectItem}s for this group.</p>
-     *
-     * @param selectItems The new set of subordinate items
-     *
-     * @throws NullPointerException if <code>selectItems</code>
-     *  is <code>null</code>
-     */
-    public void setSelectItems(SelectItem selectItems[]) {
-
-        if (selectItems == null) {
-            throw new NullPointerException();
-        }
-        this.selectItems = selectItems;
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/model/package.html b/jsf-api/src/main/java/javax/faces/model/package.html
deleted file mode 100644
index a0b13e2..0000000
--- a/jsf-api/src/main/java/javax/faces/model/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.model"</title>
-<body bgcolor="white">
-    <p><span class="changed_modified_2_0">Standard</span> model data 
-    beans for JavaServer Faces.</p>
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/package.html b/jsf-api/src/main/java/javax/faces/package.html
deleted file mode 100644
index cd65f41..0000000
--- a/jsf-api/src/main/java/javax/faces/package.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-  @(#)package.html	1.60 98/01/27
-
-  Copyright 2004 Sun Microsystems, Inc. 901 San Antonio Road, 
-  Palo Alto, California, 94303, U.S.A.  All Rights Reserved.
-
-  This software is the confidential and proprietary information of Sun
-  Microsystems, Inc. ("Confidential Information").  You shall not
-  disclose such Confidential Information and shall use it only in
-  accordance with the terms of the license agreement you entered into
-  with Sun.
-
-  CopyrightVersion 1.2
-
--->
-</head>
-<body bgcolor="white">
-
-<span class="changed_modified_2_0">Top</span> level classes for the 
-JavaServer(tm) Faces API.  The most important
-class in the package is {@link javax.faces.FactoryFinder}, which is the
-mechanism by which users can override many of the key pieces of the
-implementation with their own.
-
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/render/ClientBehaviorRenderer.java b/jsf-api/src/main/java/javax/faces/render/ClientBehaviorRenderer.java
deleted file mode 100644
index aac343a..0000000
--- a/jsf-api/src/main/java/javax/faces/render/ClientBehaviorRenderer.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorContext;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>A <strong class="changed_added_2_0">ClientBehaviorRenderer</strong> produces
- * the client-side script that implements a {@link ClientBehavior}'s client-side 
- * logic.  It can also enqueue server-side {@link javax.faces.event.BehaviorEvent}s that may be
- * processed later by event listeners that have registered an interest.</p> 
- *
- * <p>Individual {@link ClientBehaviorRenderer} instances will be instantiated as 
- * requested during the rendering process, and will remain in existence for the
- * remainder of the lifetime of a web application.  Because each instance
- * may be invoked from more than one request processing thread simultaneously,
- * they MUST be programmed in a thread-safe manner.</p>
- *
- * @since 2.0
- */
-
-public abstract class ClientBehaviorRenderer {
-    
-    
-    // ------------------------------------------------------ Rendering Methods
-
-    /**
-     * <p class="changed_added_2_0">Return the script that implements this
-     * ClientBehavior's client-side logic.  The default implementation returns 
-     * <code>null</code>.</p>
-     *
-     * <p>ClientBehaviorRenderer.getScript() implementations are allowed to return
-     * null to indicate that no script is required for this particular
-     * getScript() call.  For example, a ClientBehaviorRenderer implementation may
-     * return null if the associated ClientBehavior is disabled.
-     * </p>
-     *
-     * @param behaviorContext the {@link ClientBehaviorContext} that provides
-     * properties that might influence this getScript() call.  Note that
-     * ClientBehaviorContext instances are short-lived objects that are only
-     * valid for the duration of the call to getScript().  ClientBehaviorRenderer
-     * implementations must not hold onto references to ClientBehaviorContexts.
-     *
-     * @param behavior the ClientBehavior instance that generates script.
-     *
-     * @return script that provides the client-side behavior, or null
-     * if no script is required.
-     *
-     * @since 2.0
-     *
-     */
-    public String getScript(ClientBehaviorContext behaviorContext, 
-                            ClientBehavior behavior) {
-
-        return null;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Decode any new state of this {@link ClientBehavior} 
-     * from the request contained in the specified {@link FacesContext}.</p>
-     *
-     * <p>During decoding, events may be enqueued for later processing
-     * (by event listeners who have registered an interest),  by calling
-     * <code>queueEvent()</code>.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     * @param component {@link UIComponent} the component associated with this 
-     * {@link javax.faces.component.behavior.Behavior}
-     * @param behavior {@link ClientBehavior} the behavior instance
-     *
-     * @throws NullPointerException if <code>context</code>,
-     *  <code>component</code> <code>behavior</code> is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public void decode(FacesContext context,
-                       UIComponent component,
-                       ClientBehavior behavior) {
-
-        if (null == context || null == component || behavior == null) {
-            throw new NullPointerException();
-        }
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/FacesBehaviorRenderer.java b/jsf-api/src/main/java/javax/faces/render/FacesBehaviorRenderer.java
deleted file mode 100644
index 1400ec8..0000000
--- a/jsf-api/src/main/java/javax/faces/render/FacesBehaviorRenderer.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a {@link
- * ClientBehaviorRenderer}.  The value of the {@link #renderKitId} attribute is taken
- * to be the <em>render-kit-id</em> to which an instance of this
- * <code>Renderer</code> is to be added.  There must be a public
- * zero-argument constructor on any class where this annotation appears.
- * The implementation must indicate a fatal error if such a constructor
- * does not exist and the application must not be placed in service.
- * Within that {@link RenderKit}, The value of the {@link #rendererType}
- * attribute is taken to be the <em>renderer-type</em>
- * The implementation must guarantee that
- * for each class annotated with <code>FacesBehaviorRenderer</code>, 
- * found with the algorithm in section JSF.11.5,
- * the following actions are taken.</p>
-
- * <div class="changed_added_2_0">
-
- * <ul>
-
- *        <li><p>Obtain a reference to the {@link RenderKitFactory} for
- *        this application.</p></li>
-
-          <li><p>See if a <code>RenderKit</code> exists for
-          <em>render-kit-id</em>.  If so, let that instance be
-          <em>renderKit</em> for discussion.  If not, the implementation
-          must indicate a fatal error if such a <code>RenderKit</code>
-          does not exist and the application must not be placed in
-          service.</p></li>
-
-          <li><p>Create an instance of this class using the public
-          zero-argument constructor.</p></li>
-
-          <li><p>Call {@link RenderKit#addClientBehaviorRenderer} on
-          <em>renderKit</em>, passing <em>type</em> as the
-          first argument, and a {@link ClientBehaviorRenderer} instance as
-          the second argument.</p></li>
-
- * </ul>
-
-
- * </div>
- *
- * @since 2.0
-
- */
-
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface FacesBehaviorRenderer {
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>render-kit-id</em> in which an
-     * instance of this class of <code>Renderer</code> must be
-     * installed.</p>
-     *
-     * @since 2.0
-     */ 
-
-    String renderKitId() default RenderKitFactory.HTML_BASIC_RENDER_KIT;
-
-    String rendererType();
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/FacesRenderer.java b/jsf-api/src/main/java/javax/faces/render/FacesRenderer.java
deleted file mode 100644
index 651dff8..0000000
--- a/jsf-api/src/main/java/javax/faces/render/FacesRenderer.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a {@link
- * Renderer}.  The value of the {@link #renderKitId} attribute is taken
- * to be the <em>render-kit-id</em> to which an instance of this
- * <code>Renderer</code> is to be added.  There must be a public
- * zero-argument constructor on any class where this annotation appears.
- * The implementation must indicate a fatal error if such a constructor
- * does not exist and the application must not be placed in service.
- * Within that {@link RenderKit}, The value of the {@link #rendererType}
- * attribute is taken to be the <em>renderer-type</em>, and the value of
- * the {@link #componentFamily} attribute is to be taken as the
- * <em>component-family</em>.  The implementation must guarantee that
- * for each class annotated with <code>FacesRenderer</code>, found with
- * the algorithm in section JSF.11.5,
- * the following actions are taken.</p>
-
- * <div class="changed_added_2_0">
-
- * <ul>
-
- * 	  <li><p>Obtain a reference to the {@link RenderKitFactory} for
- * 	  this application.</p></li>
-
-	  <li><p>See if a <code>RenderKit</code> exists for
-	  <em>render-kit-id</em>.  If so, let that instance be
-	  <em>renderKit</em> for discussion.  If not, the implementation
-	  must indicate a fatal error if such a <code>RenderKit</code>
-	  does not exist and the application must not be placed in
-	  service.</p></li>
-
-	  <li><p>Create an instance of this class using the public
-	  zero-argument constructor.</p></li>
-
-	  <li><p>Call {@link RenderKit#addRenderer} on
-	  <em>renderKit</em>, passing <em>component-family</em> as the
-	  first argument, <em>renderer-type</em> as the second, and the
-	  newly instantiated <code>RenderKit</code> instance as the
-	  third argument.</p></li>
-
- * </ul>
-
-
- * </div>
-
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface FacesRenderer {
-
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>render-kit-id</em> in which an
-     * instance of this class of <code>Renderer</code> must be
-     * installed.</p>
-     */ 
-
-    String renderKitId() default RenderKitFactory.HTML_BASIC_RENDER_KIT;
-
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>renderer-type</em> which, in
-     * combination with {@link #componentFamily} can be used to obtain a
-     * reference to an instance of this {@link Renderer} by calling
-     * {@link javax.faces.render.RenderKit#getRenderer(java.lang.String,
-     * java.lang.String)}.</p>
-     */ 
-
-    String rendererType();
-
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>component-family</em> which, in
-     * combination with {@link #rendererType} can be used to obtain a
-     * reference to an instance of this {@link Renderer} by calling
-     * {@link javax.faces.render.RenderKit#getRenderer(java.lang.String,
-     * java.lang.String)}.</p>
-     */ 
-
-    String componentFamily();
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/RenderKit.java b/jsf-api/src/main/java/javax/faces/render/RenderKit.java
deleted file mode 100644
index edbdf4a..0000000
--- a/jsf-api/src/main/java/javax/faces/render/RenderKit.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.ResponseWriter;
-import javax.faces.context.ResponseStream;
-import java.io.Writer;
-import java.io.OutputStream;
-import java.util.Iterator;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-
-/**
- * <p><span
- * class="changed_modified_2_0"><strong>RenderKit</strong></span>
- * represents a collection of {@link Renderer} instances that, together,
- * know how to render JavaServer Faces {@link UIComponent} instances for
- * a specific client.  Typically, {@link RenderKit}s are specialized for
- * some combination of client device type, markup language, and/or user
- * <code>Locale</code>.  A {@link RenderKit} also acts as a Factory for
- * associated {@link Renderer} instances, which perform the actual
- * rendering process for each component.</p>
- *
- * <p>A typical JavaServer Faces implementation will configure one or
- * more {@link RenderKit} instances at web application startup.  They
- * are made available through calls to the <code>getRenderKit()</code>
- * methods of {@link RenderKitFactory}.  Because {@link RenderKit}
- * instances are shared, they must be implemented in a thread-safe
- * manner.  Due to limitations in the current specification having
- * multiple <code>RenderKit</code> instances at play in the same
- * application requires a custom {@link
- * javax.faces.application.ViewHandler} instance that is aware of how to
- * deal with this case.  This limitation will be lifted in a future
- * version of the spec.</p>
- *
- * <p>The <code>RenderKit</code> instance must also vend a {@link
- * ResponseStateManager} instance, which is used in the process of
- * saving and restoring tree structure and state.</p>
- */
-public abstract class RenderKit {
-
-
-    /**
-     * <p>Register the specified {@link Renderer} instance, associated with the
-     * specified component <code>family</code> and <code>rendererType</code>,
-     * to the set of {@link Renderer}s registered with this {@link RenderKit},
-     * replacing any previously registered {@link Renderer} for this
-     * combination of identifiers.</p>
-     *
-     * @param family Component family of the {@link Renderer} to register
-     * @param rendererType Renderer type of the {@link Renderer} to register
-     * @param renderer {@link Renderer} instance we are registering
-     *
-     * @throws NullPointerException if <code>family</code> or
-     *  <code>rendererType</code> or <code>renderer</code> is null
-     */
-    public abstract void addRenderer(String family, String rendererType,
-                                     Renderer renderer);
-
-
-    /**
-     * <p>Return the {@link Renderer} instance most recently registered for
-     * the specified component <code>family</code> and
-     * <code>rendererType</code>, if any; otherwise, return
-     * <code>null</code>.</p>
-     *
-     * @param family Component family of the requested
-     *  {@link Renderer} instance
-     * @param rendererType Renderer type of the requested
-     *  {@link Renderer} instance
-     *
-     * @throws NullPointerException if <code>family</code> or
-     *  <code>rendererType</code> is <code>null</code>
-     */
-    public abstract Renderer getRenderer(String family, String rendererType);
-
-
-    /**
-     * <p>Return an instance of {@link ResponseStateManager} to handle
-     * rendering technology specific state management decisions.</p>
-     */
-    public abstract ResponseStateManager getResponseStateManager();
-
-
-    /**
-     * <p>Use the provided <code>Writer</code> to create a new {@link
-     * ResponseWriter} instance for the specified (optional) content
-     * type, and character encoding.</p>
-     *
-     * <p>Implementors are advised to consult the
-     * <code>getCharacterEncoding()</code> method of class {@link
-     * javax.servlet.ServletResponse} to get the required value for the
-     * characterEncoding for this method.  Since the <code>Writer</code>
-     * for this response will already have been obtained (due to it
-     * ultimately being passed to this method), we know that the
-     * character encoding cannot change during the rendering of the
-     * response.</p>
-     *
-     * @param writer the Writer around which this {@link ResponseWriter}
-     * must be built.
-     *
-     * @param contentTypeList an "Accept header style" list of content
-     * types for this response, or <code>null</code> if the RenderKit
-     * should choose the best fit.  As of the current version, the
-     * values accepted by the Standard render-kit for this parameter
-     * include any valid "Accept header style" String that includes the
-     * String <code>text/html</code>,
-     * <code>application/xhtml+xml</code>, <code>application/xml</code>
-     * or <code>text/xml</code>.  This may change in a future version.
-     * The RenderKit must support a value for this argument that comes
-     * straight from the <code>Accept</code> HTTP header, and therefore
-     * requires parsing according to the specification of the
-     * <code>Accept</code> header.  Please see <a
-     * href="http://www.ietf.org/rfc/rfc2616.txt?number=2616">Section
-     * 14.1 of RFC 2616</a> for the specification of the
-     * <code>Accept</code> header.
-     *
-     * @param characterEncoding such as "ISO-8859-1" for this
-     * ResponseWriter, or <code>null</code> if the
-     * <code>RenderKit</code> should choose the best fit.  Please see <a
-     * href="http://www.iana.org/assignments/character-sets">the
-     * IANA</a> for a list of character encodings.
-     *
-     * @return a new {@link ResponseWriter}.
-     *
-     * @throws IllegalArgumentException if no matching content type
-     * can be found in <code>contentTypeList</code>, no appropriate
-     * content type can be found with the implementation dependent best
-     * fit algorithm, or no matching character encoding can be found for
-     * the argument <code>characterEncoding</code>.
-     *
-     */
-    public abstract ResponseWriter createResponseWriter(Writer writer,
-							String contentTypeList,
-							String characterEncoding);
-
-
-    /** 
-     * <p>Use the provided <code>OutputStream</code> to create a new
-     * {@link ResponseStream} instance.</p>
-     *
-     */ 
-    public abstract ResponseStream createResponseStream(OutputStream out);
-
-
-    /**
-     * <p class="changed_added_2_0">Return an <code>Iterator</code> over
-     * the component-family entries supported by this
-     * <code>RenderKit</code> instance.</p>
-     *
-     * <p class="changed_added_2_0">
-     * The default implementation of this method returns an empty
-     * <code>Iterator</code>
-     * </p>
-     *
-     * @since 2.0
-     *
-     */
-    public Iterator<String> getComponentFamilies() {
-
-        Set<String> empty = Collections.emptySet();
-        return empty.iterator();
-
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Return an <code>Iterator</code> over
-     * the renderer-type entries for the given component-family.</p>
-     *
-     * <p class="changed_added_2_0">If the specified <code>componentFamily</code>
-     * is not known to this <code>RenderKit</code> implementation, return
-     * an empty <code>Iterator</code></p>
-     *
-     * <p class="changed_added_2_0">
-     * The default implementation of this method returns an empty
-     * <code>Iterator</code>
-     * </p>
-     *
-     * @param componentFamily one of the members of the
-     * <code>Iterator</code> returned by {@link #getComponentFamilies}.
-     *
-     * @since 2.0
-     */
-    public Iterator<String> getRendererTypes(String componentFamily) {
-
-        Set<String> empty = Collections.emptySet();
-        return empty.iterator();
-
-    }
-    
-    /**
-     * <p>Register the specified {@link ClientBehaviorRenderer} instance, 
-     * associated with the specified component <code>type</code>,
-     * to the set of {@link ClientBehaviorRenderer}s registered with this 
-     * {@link RenderKit}, replacing any previously registered 
-     * {@link ClientBehaviorRenderer} for this type.</p>
-     *
-     * @param type type of the {@link ClientBehaviorRenderer} to register
-     * @param renderer {@link ClientBehaviorRenderer} instance we are registering
-     *
-     * @throws NullPointerException if <code>type</code> or 
-     * <code>renderer</code> is null
-     *
-     * @since 2.0
-     */
-    public void addClientBehaviorRenderer(String type, ClientBehaviorRenderer renderer) {
-        throw new UnsupportedOperationException("The default implementation must override this method");
-    }
-    
-    /**
-     * <p>Return the {@link ClientBehaviorRenderer} instance most recently 
-     * registered for the specified <code>type</code>, if any; 
-     * otherwise, return <code>null</code>.</p>
-     *
-     * @param type type of the requested
-     *  {@link ClientBehaviorRenderer} instance
-     *
-     * @throws NullPointerException if <code>type</code>
-     *  is <code>null</code>
-     *
-     * @since 2.0
-     */
-    public ClientBehaviorRenderer getClientBehaviorRenderer(String type) {
-        throw new UnsupportedOperationException("The default implementation must override this method");
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Return an <code>Iterator</code> over
-     * the {@link ClientBehaviorRenderer} types.</p>
-     *
-     * @since 2.0
-     */
-    public Iterator<String> getClientBehaviorRendererTypes() {
-        throw new UnsupportedOperationException("The default implementation must override this method");		
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/RenderKitFactory.java b/jsf-api/src/main/java/javax/faces/render/RenderKitFactory.java
deleted file mode 100644
index d8f68e9..0000000
--- a/jsf-api/src/main/java/javax/faces/render/RenderKitFactory.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-
-import java.util.Iterator;
-import javax.faces.FacesWrapper;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p><strong class="changed_modified_2_0">RenderKitFactory</strong> is a 
- * factory object that registers
- * and returns {@link RenderKit} instances.  Implementations of
- * JavaServer Faces must provide at least a default implementation of
- * {@link RenderKit}.  Advanced implementations (or external third party
- * libraries) may provide additional {@link RenderKit} implementations
- * (keyed by render kit identifiers) for performing different types of
- * rendering for the same components.</p>
- *
- * <p>There must be one {@link RenderKitFactory} instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- * <pre>
- *   RenderKitFactory factory = (RenderKitFactory)
- *    FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
- * </pre>
- */
-
-public abstract class RenderKitFactory implements FacesWrapper<RenderKitFactory> {
-    
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-
-    public RenderKitFactory getWrapped() {
-        return null;
-    }
-    
-    /**
-     * <p>The render kit identifier of the default {@link RenderKit} instance
-     * for this JavaServer Faces implementation.</p>
-     */
-    public static final String HTML_BASIC_RENDER_KIT = "HTML_BASIC";
-
-
-    /**
-     * <p>Register the specified {@link RenderKit} instance, associated with
-     * the specified <code>renderKitId</code>, to be supported by this
-     * {@link RenderKitFactory}, replacing any previously registered
-     * {@link RenderKit} for this identifier.</p>
-     *
-     * @param renderKitId Identifier of the {@link RenderKit} to register
-     * @param renderKit {@link RenderKit} instance that we are registering
-     *
-     * @throws NullPointerException if <code>renderKitId</code> or
-     *  <code>renderKit</code> is <code>null</code>
-     */
-    public abstract void addRenderKit(String renderKitId,
-                                      RenderKit renderKit);
-
-
-    /**
-     * <p>Return a {@link RenderKit} instance for the specified render
-     * kit identifier, possibly customized based on dynamic
-     * characteristics of the specified {@link FacesContext}, if
-     * non-<code>null</code>.  If there is no registered {@link
-     * RenderKit} for the specified identifier, return
-     * <code>null</code>.  The set of available render kit identifiers
-     * is available via the <code>getRenderKitIds()</code> method.</p>
-     *
-     * @param context FacesContext for the request currently being
-     * processed, or <code>null</code> if none is available.
-     * @param renderKitId Render kit identifier of the requested
-     *  {@link RenderKit} instance
-     *
-     * @throws IllegalArgumentException if no {@link RenderKit} instance
-     *  can be returned for the specified identifier
-     * @throws NullPointerException if <code>renderKitId</code> is
-     * <code>null</code>
-     */
-    public abstract RenderKit getRenderKit(FacesContext context, 
-					   String renderKitId);
-
-
-    /**
-     * <p>Return an <code>Iterator</code> over the set of render kit
-     * identifiers registered with this factory.  This set must include
-     * the value specified by <code>RenderKitFactory.HTML_BASIC_RENDER_KIT</code>.
-     * </p>
-     */
-    public abstract Iterator<String> getRenderKitIds();
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/RenderKitWrapper.java b/jsf-api/src/main/java/javax/faces/render/RenderKitWrapper.java
deleted file mode 100644
index 23eaddc..0000000
--- a/jsf-api/src/main/java/javax/faces/render/RenderKitWrapper.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.Iterator;
-import javax.faces.FacesWrapper;
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-
-/**
- * <p class="changed_modified_2_0">Provides a simple implementation of 
- * {@link RenderKit} that
- * can be subclassed by developers wishing to provide specialized
- * behavior to an existing {@link RenderKit} instance.  The default
- * implementation of all methods is to call through to the wrapped
- * {@link RenderKit}.</p>
- *
- * <p class="changed_added_2_0">Usage: extend this class and override {@link #getWrapped} to
- * return the instance we are wrapping.</p>
- *
- * @since 2.0
- */
-public abstract class RenderKitWrapper extends RenderKit implements FacesWrapper<RenderKit> {
-
-    /**
-     * @return the wrapped {@link RenderKit} instance
-     * @see javax.faces.FacesWrapper#getWrapped()
-     */
-    public abstract RenderKit getWrapped();
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link RenderKit#addRenderer(String, String, Renderer)}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see RenderKit#addRenderer(String, String, Renderer)
-     */
-    @Override
-    public void addRenderer(String family, String rendererType, Renderer renderer) {
-        getWrapped().addRenderer(family, rendererType, renderer);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link RenderKit#createResponseStream(java.io.OutputStream)}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see RenderKit#createResponseStream(java.io.OutputStream)  
-     */
-    @Override
-    public ResponseStream createResponseStream(OutputStream out) {
-        return getWrapped().createResponseStream(out);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link RenderKit#createResponseWriter(java.io.Writer, String, String)}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see RenderKit#createResponseWriter(java.io.Writer, String, String)
-     */
-    @Override
-    public ResponseWriter createResponseWriter(Writer writer, String contentTypeList, String characterEncoding) {
-        return getWrapped().createResponseWriter(writer, contentTypeList, characterEncoding);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link RenderKit#getRenderer(String, String)}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see RenderKit#getRenderer(String, String)
-     */
-    @Override
-    public Renderer getRenderer(String family, String rendererType) {
-        return getWrapped().getRenderer(family, rendererType);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.render.RenderKit#getResponseStateManager()}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see javax.faces.render.RenderKit#getResponseStateManager()
-     */
-    @Override
-    public ResponseStateManager getResponseStateManager() {
-        return getWrapped().getResponseStateManager();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.render.RenderKit#getComponentFamilies()}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see javax.faces.render.RenderKit#getComponentFamilies()
-     */
-    @Override
-    public Iterator<String> getComponentFamilies() {
-        return getWrapped().getComponentFamilies();
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link RenderKit#getRendererTypes(String)}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see RenderKit#getRendererTypes(String)
-     */
-    @Override
-    public Iterator<String> getRendererTypes(String componentFamily) {
-        return getWrapped().getRendererTypes(componentFamily);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link RenderKit#addClientBehaviorRenderer(String, ClientBehaviorRenderer)}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see RenderKit#addClientBehaviorRenderer(String, ClientBehaviorRenderer)
-     */
-    @Override
-    public void addClientBehaviorRenderer(String type, ClientBehaviorRenderer renderer) {
-        getWrapped().addClientBehaviorRenderer(type, renderer);
-    }
-    
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link RenderKit#getClientBehaviorRenderer(String)}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see RenderKit#getClientBehaviorRenderer(String)
-     */
-    @Override
-    public ClientBehaviorRenderer getClientBehaviorRenderer(String type) {
-        return getWrapped().getClientBehaviorRenderer(type);
-    }
-
-
-    /**
-     * <p>The default behavior of this method is to
-     * call {@link javax.faces.render.RenderKit#getClientBehaviorRendererTypes()}
-     * on the wrapped {@link RenderKit} object.</p>
-     *
-     * @see javax.faces.render.RenderKit#getClientBehaviorRendererTypes()
-     */
-    @Override
-    public Iterator<String> getClientBehaviorRendererTypes() {
-        return getWrapped().getClientBehaviorRendererTypes();
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/Renderer.java b/jsf-api/src/main/java/javax/faces/render/Renderer.java
deleted file mode 100644
index 10b3709..0000000
--- a/jsf-api/src/main/java/javax/faces/render/Renderer.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import javax.faces.component.UIComponent;
-import javax.faces.convert.ConverterException;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>A <strong class="changed_modified_2_0">Renderer</strong> converts
- * the internal representation of {@link UIComponent}s into the output
- * stream (or writer) associated with the response we are creating for a
- * particular request.  Each <code>Renderer</code> knows how to render
- * one or more {@link UIComponent} types (or classes), and advertises a
- * set of render-dependent attributes that it recognizes for each
- * supported {@link UIComponent}.</p>
- *
- * <p>Families of {@link Renderer}s are packaged as a {@link RenderKit},
- * and together support the rendering of all of the {@link UIComponent}s
- * in a view associated with a {@link FacesContext}.  Within the set of
- * {@link Renderer}s for a particular {@link RenderKit}, each must be
- * uniquely identified by the <code>rendererType</code> property.</p>
- *
- * <p>Individual {@link Renderer} instances will be instantiated as requested
- * during the rendering process, and will remain in existence for the
- * remainder of the lifetime of a web application.  Because each instance
- * may be invoked from more than one request processing thread simultaneously,
- * they MUST be programmed in a thread-safe manner.</p>
- *
- * <div class="changed_added_2_0">
-
- * <p>If the {@link javax.faces.event.ListenerFor} annotation is
- * attached to the class definition of a <code>Renderer</code>, that
- * class must also implement {@link
- * javax.faces.event.ComponentSystemEventListener}, and the action
- * pertaining to the processing of <code>ResourceDependency</code> on a
- * <code>Renderer</code> described in {@link
- * javax.faces.event.ListenerFor} must be taken. </p>
-
- * <p>If the {@link javax.faces.application.ResourceDependency}
- * annotation is attached to the class definition of a
- * <code>Renderer</code>, the action pertaining to the processing of
- * <code>ResourceDependency</code> on a <code>Renderer</code> described
- * in {@link UIComponent#getChildren} must be taken. </p>
-
- * </div>
- */
-
-public abstract class Renderer {
-    
-    
-    // ------------------------------------------------------ Rendering Methods
-
-
-    /**
-     * <p>Decode any new state of the specified {@link UIComponent}
-     * from the request contained in the specified {@link FacesContext},
-     * and store that state on the {@link UIComponent}.</p>
-     *
-     * <p>During decoding, events may be enqueued for later processing
-     * (by event listeners that have registered an interest), by calling
-     * <code>queueEvent()</code> on the associated {@link UIComponent}.
-     * </p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     * @param component {@link UIComponent} to be decoded.
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  or <code>component</code> is <code>null</code>
-     */
-    public void decode(FacesContext context, UIComponent component) {
-	if (null == context || null == component) {
-	    throw new NullPointerException();
-	}
-    }
-
-
-    /**
-     * <p>Render the beginning specified {@link UIComponent} to the
-     * output stream or writer associated with the response we are creating.
-     * If the conversion attempted in a previous call to
-     * <code>getConvertedValue()</code> for this component failed, the state
-     * information saved during execution
-     * of <code>decode()</code> should be used to reproduce the incorrect
-     * input.</p>
-     *
-     * @param context {@link FacesContext} for the request we are processing
-     * @param component {@link UIComponent} to be rendered
-     *
-     * @throws IOException if an input/output error occurs while rendering
-     * @throws NullPointerException if <code>context</code>
-     *  or <code>component</code> is null
-     */
-    public void encodeBegin(FacesContext context,
-			    UIComponent component)
-        throws IOException {
-	if (null == context || null == component) {
-	    throw new NullPointerException();
-	}
-    }
-
-
-    /**
-     * <p>Render the child components of this {@link UIComponent}, following
-     * the rules described for <code>encodeBegin()</code> to acquire the
-     * appropriate value to be rendered.  This method will only be called
-     * if the <code>rendersChildren</code> property of this component
-     * is <code>true</code>.</p>
-     *
-     * @param context {@link FacesContext} for the response we are creating
-     * @param component {@link UIComponent} whose children are to be rendered
-     *
-     * @throws IOException if an input/output error occurs while rendering
-     * @throws NullPointerException if <code>context</code>
-     *  or <code>component</code> is <code>null</code>
-     */
-    public void encodeChildren(FacesContext context, UIComponent component)
-        throws IOException {
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-        if (component.getChildCount() > 0) {
-        	Iterator<UIComponent> kids = component.getChildren().iterator();
-        	while (kids.hasNext()) {
-        	    UIComponent kid = kids.next();
-        	    kid.encodeAll(context);
-        	}
-        }
-    }
-
-
-    /**
-     * <p>Render the ending of the current state of the specified
-     * {@link UIComponent}, following the rules described for
-     * <code>encodeBegin()</code> to acquire the appropriate value
-     * to be rendered.</p>
-     *
-     * @param context {@link FacesContext} for the response we are creating
-     * @param component {@link UIComponent} to be rendered
-     *
-     * @throws IOException if an input/output error occurs while rendering
-     * @throws NullPointerException if <code>context</code>
-     *  or <code>component</code> is <code>null</code>
-     */
-    public void encodeEnd(FacesContext context,
-			  UIComponent component)
-        throws IOException {
-	if (null == context || null == component) {
-	    throw new NullPointerException();
-	}
-    }
-
-    /**
-     * <p>Convert the component generated client id to a form suitable
-     * for transmission to the client.</p>
-     *
-     * <p>The default implementation returns the argument
-     * <code>clientId</code> unchanged.</p>
-     *
-     * @param context {@link FacesContext} for the current request
-     * @param clientId the client identifier to be converted to client a
-     * specific format.
-     *
-     * @throws NullPointerException if <code>context</code>
-     *  or <code>clientId</code> is <code>null</code>
-     */ 
-    public String convertClientId(FacesContext context, String clientId) {
-
-        if ((context == null) || (clientId == null)) {
-            throw new NullPointerException();
-        }
-        return (clientId);
-
-    }
-
-    /**
-     * <p>Return a flag indicating whether this {@link Renderer} is responsible
-     * for rendering the children the component it is asked to render.
-     * The default implementation returns <code>false</code>.</p>
-     */
-
-    public boolean getRendersChildren() {
-	return false;
-    }
-
-
-    /**
-     * <p>Attempt to convert previously stored state information into an
-     * object of the type required for this component (optionally using the
-     * registered {@link javax.faces.convert.Converter} for this component,
-     * if there is one).  If conversion is successful, the new value
-     * should be returned from this method;  if not, a
-     * {@link ConverterException} should be thrown.</p>
-     * 
-     * @param context {@link FacesContext} for the request we are processing
-     * @param component {@link UIComponent} to be decoded.
-     * @param submittedValue a value stored on the component during
-     *    <code>decode</code>.
-     * 
-     * @throws ConverterException if the submitted value
-     *   cannot be converted successfully.
-     * @throws NullPointerException if <code>context</code>
-     *  or <code>component</code> is <code>null</code>
-     */
-    public Object getConvertedValue(FacesContext context,
-                                    UIComponent  component,
-                                    Object       submittedValue)
-        throws ConverterException {
-        if ((context == null) || (component == null)) {
-            throw new NullPointerException();
-        }
-        return submittedValue;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/ResponseStateManager.java b/jsf-api/src/main/java/javax/faces/render/ResponseStateManager.java
deleted file mode 100644
index 7c0a89a..0000000
--- a/jsf-api/src/main/java/javax/faces/render/ResponseStateManager.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.render;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.application.StateManager;
-import javax.faces.application.StateManager.SerializedView;
-
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-
-
-/**
- * <p><strong class="changed_modified_2_0">ResponseStateManager</strong>
- * is the helper class to {@link javax.faces.application.StateManager}
- * that knows the specific rendering technology being used to generate
- * the response.  It is a singleton abstract class, vended by the {@link
- * RenderKit}.  This class knows the mechanics of saving state, whether
- * it be in hidden fields, session, or some combination of the two.</p>
- */
-
-public abstract class ResponseStateManager {
-    
-    private static Logger log = Logger.getLogger("javax.faces.render");
-
-    /**
-     * <p>The name of the request parameter used by the default
-     * implementation of {@link
-     * javax.faces.application.ViewHandler#calculateRenderKitId} to
-     * derive a RenderKit ID.</p>
-     */
-    public static final String RENDER_KIT_ID_PARAM =
-            "javax.faces.RenderKitId";
-            
-    /**
-     * <p><span class="changed_modified_2_0">Implementations</span> must
-     * use this value as the name and id of the client parameter in
-     * which to save the state between requests.</p>
-
-     * <p class="changed_added_2_0">It is strongly recommend that
-     * implementations guard against cross site scripting attacks by at
-     * least making the value of this parameter difficult to
-     * predict.</p>
-     *
-     * @since 1.2
-     */
-
-    public static final String VIEW_STATE_PARAM = "javax.faces.ViewState";
-
-    /*       
-     * <p>Take the argument <code>state</code> and write it into the
-     * output using the current {@link ResponseWriter}, which must be
-     * correctly positioned already.</p>
-     *
-     * <p>If the state is to be written out to hidden fields, the
-     * implementation must take care to make all necessary character
-     * replacements to make the Strings suitable for inclusion as an
-     * HTTP request paramater.</p>
-     *
-     * <p>If the state saving method for this application is {@link
-     * javax.faces.application.StateManager#STATE_SAVING_METHOD_CLIENT},
-     * the implementation may encrypt the state to be saved to the
-     * client.  We recommend that the state be unreadable by the client,
-     * and also be tamper evident.  The reference implementation follows
-     * these recommendations.  </p>
-     *
-     * <p>If the state saving method for this application is {@link
-     * javax.faces.application.StateManager#STATE_SAVING_METHOD_SERVER},
-     * and the current request is an <code>Ajax</code> request
-     * {@link javax.faces.context.PartialViewContext.isAjaxRequest} returns
-     * <code>true</code>), use the current view state identifier if it is
-     * available (do not generate a new identifier).</p>
-     * 
-     * <p>Write out the render kit identifier associated with this 
-     * <code>ResponseStateManager</code> implementation with the name
-     * as the value of the <code>String</code> constant 
-     * <code>ResponseStateManager.RENDER_KIT_ID_PARAM</code>.  The  
-     * render kit identifier must not be written if:</p>
-     * <ul>
-     * <li>it is the default render kit identifier as returned by 
-     * {@link Application#getDefaultRenderKitId()} or</li>
-     * <li>the render kit identfier is the value of 
-     * <code>RenderKitFactory.HTML_BASIC_RENDER_KIT</code> and 
-     * {@link Application.getDefaultRenderKitId()} returns <code>null</code>.
-     * </li>
-     * </ul> 
-     *
-     * <p>For backwards compatability with existing
-     * <code>ResponseStateManager</code> implementations, the default
-     * implementation of this method checks if the argument is an
-     * instance of <code>SerializedView</code>.  If so, it calls through
-     * to {@link
-     * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView}.
-     * If not, it expects the state to be a two element Object array.  It creates 
-     * an instance of <code>SerializedView</code> and
-     * stores the state as the treeStructure, and passes it to {@link
-     * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView}.</p>
-     *
-     *
-     * @since 1.2
-     *
-     * @param context The {@link FacesContext} instance for the current request
-     * @param state The serialized state information previously saved
-     * @throws IOException if the state argument is not an array of length 2.
-     *
-     */
-    public void writeState(FacesContext context,
-        Object state) throws IOException {
-        
-	SerializedView view;
-	if (state instanceof SerializedView) {
-	    view = (SerializedView) state;
-	}
-	else {
-            if (state instanceof Object[]) {
-                Object[] stateArray = (Object[])state;
-                if (2 == stateArray.length) {
-	            StateManager stateManager = 
-		        context.getApplication().getStateManager();
-	            view = stateManager.new SerializedView(stateArray[0], 
-                        stateArray[1]);
-                } else {
-                    //PENDING - I18N
-                    if (log.isLoggable(Level.SEVERE)) {
-                        log.log(Level.SEVERE, "State is not an expected array of length 2.");
-                    }
-                    throw new IOException("State is not an expected array of length 2.");
-                }
-            } else {
-                //PENDING - I18N
-                if (log.isLoggable(Level.SEVERE)) {
-                    log.log(Level.SEVERE, "State is not an expected array of length 2.");
-                }
-                throw new IOException("State is not an expected array of length 2.");
-            }
-	}
-	writeState(context, view);
-    }
-
-    /**
-     * <p>Take the argument <code>state</code> and write it into
-     * the output using the current {@link ResponseWriter}, which
-     * must be correctly positioned already.</p>
-     *
-     * <p>If the {@link
-     * javax.faces.application.StateManager.SerializedView} is to be
-     * written out to hidden fields, the implementation must take care
-     * to make all necessary character replacements to make the Strings
-     * suitable for inclusion as an HTTP request paramater.</p>
-     *
-     * <p>If the state saving method for this application is {@link
-     * javax.faces.application.StateManager#STATE_SAVING_METHOD_CLIENT},
-     * the implementation may encrypt the state to be saved to the
-     * client.  We recommend that the state be unreadable by the client,
-     * and also be tamper evident.  The reference implementation follows
-     * these recommendations.  </p>
-     *
-     * @deprecated This method has been replaced by {@link
-     * #writeState(javax.faces.context.FacesContext,java.lang.Object)}.
-     * The default implementation creates a two element
-     * <code>Object</code> array with the first element being the return
-     * from calling {@link SerializedView#getStructure}, and the second
-     * being the return from {@link SerializedView#getState}.  It then
-     * passes this <code>Object</code> array to {@link #writeState}.
-     * 
-     * @param context The {@link FacesContext} instance for the current request
-     * @param state The serialized state information previously saved
-     *
-     */
-    public void writeState(FacesContext context,
-                           SerializedView state) throws IOException {
-
-        if (state != null) {
-            writeState(context, new Object[]{state.getStructure(),
-                                             state.getState()});
-        }
-        
-    }
-
-    /**
-     * <p>The implementation must inspect the current request and return
-     * an Object representing the tree structure and component state
-     * passed in to a previous invocation of {@link
-     * #writeState(javax.faces.context.FacesContext,java.lang.Object)}.</p>
-     *
-     * <p>For backwards compatability with existing
-     * <code>ResponseStateManager</code> implementations, the default
-     * implementation of this method calls {@link
-     * #getTreeStructureToRestore} and {@link
-     * #getComponentStateToRestore} and creates and returns a two
-     * element <code>Object</code> array with element zero containing
-     * the <code>structure</code> property and element one containing
-     * the <code>state</code> property of the
-     * <code>SerializedView</code>.</p>
-     *
-     * @since 1.2
-     *
-     * @param context The {@link FacesContext} instance for the current request
-     * @param viewId View identifier of the view to be restored
-     *
-     * @return the tree structure and component state Object passed in
-     * to <code>writeState</code>.  If this is an initial request, this
-     * method returns <code>null</code>.
-     */
- 
-    public Object getState(FacesContext context, String viewId) {
-	Object stateArray[] = { getTreeStructureToRestore(context, viewId),
-				getComponentStateToRestore(context) };
-	return stateArray;
-    }
-
-
-    /**
-     * <p>The implementation must inspect the current request and return
-     * the tree structure Object passed to it on a previous invocation of
-     * <code>writeState()</code>.</p>
-     *
-     * @deprecated This method has been replaced by {@link #getState}.
-     * The default implementation returns <code>null</code>.
-     *
-     * @param context The {@link FacesContext} instance for the current request
-     * @param viewId View identifier of the view to be restored
-     *
-     */
-    public Object getTreeStructureToRestore(FacesContext context, 
-					    String viewId) {
-	return null;
-    }
-
-
-    /**
-     * <p>The implementation must inspect the current request and return
-     * the component state Object passed to it on a previous invocation
-     * of <code>writeState()</code>.</p>
-     *
-     * @deprecated This method has been replaced by {@link #getState}.
-     * The default implementation returns <code>null</code>.
-     *
-     * @param context The {@link FacesContext} instance for the current request
-     *
-     */
-    public Object getComponentStateToRestore(FacesContext context) {
-	return null;
-    }
-
-    /**
-     * <p>Return true if the current request is a postback.  This method
-     * is leveraged from the <i>Restore View Phase</i> to determine if
-     * {@link javax.faces.application.ViewHandler#restoreView} or {@link
-     * javax.faces.application.ViewHandler#createView} should be called.
-     * The default implementation must return <code>true</code> if this
-     * <code>ResponseStateManager</code> instance wrote out state on a
-     * previous request to which this request is a postback,
-     * <code>false</code> otherwise.</p>
-     *
-     * <p>The implementation if this method for the Standard HTML
-     * RenderKit must consult the {@link
-     * javax.faces.context.ExternalContext}'s
-     * <code>requestParameterMap</code> and return <code>true</code> if
-     * and only if there is a key equal to the value of the symbolic
-     * constant {@link #VIEW_STATE_PARAM}.</p>
-     *
-     * <p>For backwards compatability with implementations of
-     * <code>ResponseStateManager</code> prior to JSF 1.2, a default
-     * implementation is provided that consults the {@link
-     * javax.faces.context.ExternalContext}'s <code>requestParameterMap</code> and return
-     * <code>true</code> if its size is greater than 0.</p>
-     *
-     * @since 1.2
-     */
-
-    public boolean isPostback(FacesContext context) {
-        return (!context.getExternalContext().getRequestParameterMap().isEmpty());
-    }
-
-
-    /**
-     * <p>
-     * Return the specified state as a <code>String</code> without any markup
-     * related to the rendering technology supported by this ResponseStateManager.
-     * </p>
-     * 
-     * @param context the {@link FacesContext} for the current request
-     * @param state the state from which the String version will be generated
-     *  from
-     * @return the view state for this request without any markup specifics
-     *
-     * @since 2.0
-     */
-    public String getViewState(FacesContext context, Object state) {
-        return null;
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/render/package.html b/jsf-api/src/main/java/javax/faces/render/package.html
deleted file mode 100644
index 77712ba..0000000
--- a/jsf-api/src/main/java/javax/faces/render/package.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.render"</title>
-</head>
-<body bgcolor="white">
-<p><span class="changed_modified_2_0">Classes</span> and interfaces
-defining the rendering model.  The main class in this package is {@link
-javax.faces.render.RenderKit}.  <code>RenderKit</code> vends a set of
-{@link javax.faces.render.Renderer} instances which provide rendering
-capability for a specific client device type.</p>
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/validator/BeanValidator.java b/jsf-api/src/main/java/javax/faces/validator/BeanValidator.java
deleted file mode 100644
index f276bd9..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/BeanValidator.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-import java.lang.reflect.Array;
-import java.util.*;
-import java.util.logging.Logger;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.component.PartialStateHolder;
-import javax.validation.ConstraintViolation;
-import javax.validation.MessageInterpolator;
-import javax.validation.Validation;
-import javax.validation.ValidatorContext;
-import javax.validation.ValidationException;
-import javax.validation.ValidatorFactory;
-import javax.validation.groups.Default;
-
-/**
- * <p class="changed_added_2_0">A Validator that delegates validation
- * of the bean property to the Bean Validation API.</p>
- * @since 2.0
- */
-public class BeanValidator implements Validator, PartialStateHolder {
-    
-    private static final Logger LOGGER =
-         Logger.getLogger("javax.faces.validator", "javax.faces.LogStrings");
-
-    private String validationGroups;
-
-    private transient Class[] cachedValidationGroups;
-
-    /**
-     * <p class="changed_added_2_0">The standard validator id for this
-     * validator, as defined by the JSF specification.</p>
-     */
-    public static final String VALIDATOR_ID = "javax.faces.Bean";
-
-	/**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * a constraint failure is found.  The message format string for
-     * this message may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the interpolated message from Bean Validation.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     * <p>The message format string provided by the default implementation should be a the placeholder {0},
-     * thus fully delegating the message handling to Bean Validation. A developer can override this message
-     * format string to make it conform to other JSF validator messages (i.e., by including the component label)</p>
-     */
-    public static final String MESSAGE_ID = "javax.faces.validator.BeanValidator.MESSAGE";
-
-    /**
-     * <p class="changed_added_2_0">The name of the servlet context
-     * attribute which holds the object used by JSF to obtain Validator
-     * instances.  If the servlet context attribute is missing or
-     * contains a null value, JSF is free to use this servlet context
-     * attribute to store the ValidatorFactory bootstrapped by this
-     * validator.</p>
-     */
-    public static final String VALIDATOR_FACTORY_KEY = "javax.faces.validator.beanValidator.ValidatorFactory";
-
-    /**
-     * <p class="changed_added_2_0">The delimiter that is used to
-     * separate the list of fully-qualified group names as strings.</p>
-     */
-    public static final String VALIDATION_GROUPS_DELIMITER = ",";
-
-    /**
-     * <p class="changed_added_2_0">The regular expression pattern that
-     * identifies an empty list of validation groups.</p>
-     */
-    public static final String EMPTY_VALIDATION_GROUPS_PATTERN = "^[\\W" + VALIDATION_GROUPS_DELIMITER + "]*$";
-    
-    /**
-     * <p class="changed_added_2_0">If this param is defined, and
-     * calling <code>toLowerCase().equals(“true”)</code> on a 
-     * <code>String</code> representation of its value returns 
-     * <code>true</code>, the runtime must not automatically add the
-     * validator with validator-id equal to the value of the symbolic
-     * constant {@link #VALIDATOR_ID} to the list of default validators.  
-     * Setting this parameter to <code>true</code> will have the effect 
-     * of disabling the automatic installation of Bean Validation to 
-     * every input component in every view in the application, though 
-     * manual installation is still possible.</p>
-     * 
-     */
-    public static final String DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME =
-            "javax.faces.validator.DISABLE_DEFAULT_BEAN_VALIDATOR";
-
-    /**
-     * <p class="changed_added_2_0">A comma-separated list of validation
-     * groups which are used to filter which validations get checked by
-     * this validator. If the validationGroupsArray attribute is omitted or
-     * is empty, the validation groups will be inherited from the branch
-     * defaults or, if there are no branch defaults, the {@link
-     * javax.validation.groups.Default} group will be used.</p>
-     *
-     * @param validationGroups comma-separated list of validation groups
-     * (string with only spaces and commas treated as null)
-     */
-
-    public void setValidationGroups(String validationGroups) {
-
-        clearInitialState();
-        // treat empty list as null
-        if (validationGroups != null && validationGroups.matches(EMPTY_VALIDATION_GROUPS_PATTERN)) {
-            validationGroups = null;
-        }
-        
-        // only clear cache of validation group classes if value is changing
-        if ((validationGroups == null && this.validationGroups != null) ||
-            (validationGroups != null && !validationGroups.equals(this.validationGroups))) {
-            this.cachedValidationGroups = null;
-        }
-        
-        this.validationGroups = validationGroups;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the validation groups passed
-     * to the Validation API when checking constraints.  If the
-     * validationGroupsArray attribute is omitted or empty, the validation
-     * groups will be inherited from the branch defaults, or if there
-     * are no branch defaults, the {@link
-     * javax.validation.groups.Default} group will be used.</p>
-     */
-    public String getValidationGroups() {
-        return validationGroups;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Verify that the value is valid
-     * according to the Bean Validation constraints.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * <p>Obtain a {@link ValidatorFactory} instance by calling {@link
-     * javax.validation.Validation#buildDefaultValidatorFactory}.</p>
-
-     * <p>Let <em>validationGroupsArray</em> be a <code>Class []</code>
-     * representing validator groups set on the component by the tag
-     * handler for this validator.  The first search component
-     * terminates the search for the validation groups value.  If no
-     * such value is found use the class name of {@link
-     * javax.validation.groups.Default} as the value of the validation
-     * groups.</p>
-
-     * <p>Let <em>valueExpression</em> be the return from calling {@link
-     * UIComponent#getValueExpression} on the argument
-     * <em>component</em>, passing the literal string
-     * “value” (without the quotes) as an argument.  If this
-     * application is running in an environment with a Unified EL
-     * Implementation for Java EE6 or later, obtain the
-     * <code>ValueReference</code> from <em>valueExpression</em> and let
-     * <em>valueBaseClase</em> be the return from calling
-     * <code>ValueReference.getBase()</code> and <em>valueProperty</em>
-     * be the return from calling
-     * <code>ValueReference.getProperty()</code>.  If an earlier version
-     * of the Unified EL is present, use the appropriate methods to
-     * inspect <em>valueExpression</em> and derive values for
-     * <em>valueBaseClass</em> and <em>valueProperty</em>.</p>
-
-     * <p>If no <code>ValueReference</code> can be obtained, take no
-     * action and return.</p>
-
-     * <p>If <code>ValueReference.getBase()</code> return
-     * <code>null</code>, take no action and return.</p>
-
-     * <p>Obtain the {@link ValidatorContext} from the {@link
-     * ValidatorFactory}.</p>
-
-     * <p>Decorate the {@link MessageInterpolator} returned from {@link
-     * ValidatorFactory#getMessageInterpolator} with one that leverages
-     * the <code>Locale</code> returned from {@link
-     * javax.faces.component.UIViewRoot#getLocale}, and store it in the
-     * <code>ValidatorContext</code> using {@link
-     * ValidatorContext#messageInterpolator}.</p>
-
-     * <p>Obtain the {@link javax.validation.Validator} instance from
-     * the <code>validatorContext</code>.</p>
-
-     * <p>Obtain a <code>javax.validation.BeanDescriptor</code> from the
-     * <code>javax.validation.Validator</code>.  If
-     * <code>hasConstraints()</code> on the <code>BeanDescriptor</code>
-     * returns false, take no action and return.  Otherwise proceed.</p>
-
-     * <p>Call {@link javax.validation.Validator#validateValue}, passing
-     * <em>valueBaseClass</em>, <em>valueProperty</em>, the
-     * <em>value</em> argument, and <em>validatorGroupsArray</em> as
-     * arguments.</p>
-
-     * <p>If the returned <code>Set<{@link
-     * ConstraintViolation}></code> is non-empty, for each element in
-     * the <code>Set</code>, create a {@link FacesMessage} where the
-     * summary and detail are the return from calling {@link
-     * ConstraintViolation#getMessage}.  Capture all such
-     * <code>FacesMessage</code> instances into a
-     * <code>Collection</code> and pass them to {@link
-     * ValidatorException#ValidatorException(java.util.Collection)},
-     * throwing the new exception.</p>
-
-     * </div>
-     *
-     * @param context {@inheritDoc}
-     * @param component {@inheritDoc}
-     * @param value {@inheritDoc}
-     *
-     * @throws ValidatorException   {@inheritDoc}
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (component == null) {
-            throw new NullPointerException();
-        }
-        ValueExpression valueExpression = component.getValueExpression("value");
-        if (valueExpression == null) {
-            return;
-        }
-
-        ValidatorFactory validatorFactory;
-        Object cachedObject = context.getExternalContext().getApplicationMap().get(VALIDATOR_FACTORY_KEY);
-        if (cachedObject instanceof ValidatorFactory) {
-            validatorFactory = (ValidatorFactory) cachedObject;
-        }
-        else {
-            try {
-                validatorFactory = Validation.buildDefaultValidatorFactory();
-            }
-            catch (ValidationException e) {
-                throw new FacesException("Could not build a default Bean Validator factory", e);
-            }
-            context.getExternalContext().getApplicationMap().put(VALIDATOR_FACTORY_KEY, validatorFactory);
-        }
-
-        ValidatorContext validatorContext = validatorFactory.usingContext();
-        MessageInterpolator jsfMessageInterpolator = 
-                new JsfAwareMessageInterpolator(context, 
-                           validatorFactory.getMessageInterpolator());
-        validatorContext.messageInterpolator(jsfMessageInterpolator);
-        javax.validation.Validator beanValidator = validatorContext.getValidator();
-        Class[] validationGroupsArray = parseValidationGroups(getValidationGroups());
-        
-        // PENDING(rlubke, driscoll): When EL 1.3 is present, we won't need
-        // this.
-        
-        ValueExpressionAnalyzer expressionAnalyzer = 
-                new ValueExpressionAnalyzer(valueExpression);
-        
-        ValueReference valueReference = expressionAnalyzer.getReference(context.getELContext());
-        if (valueReference == null) {
-            return;
-        }
-        if (isResolvable(valueReference, valueExpression)) {
-            Set<ConstraintViolation> violations = null;
-            try {
-                //noinspection unchecked
-                violations =
-                        beanValidator.validateValue(valueReference.getBaseClass(),
-                                                    valueReference.getProperty(),
-                                                    value,
-                                                    validationGroupsArray);
-            } catch (IllegalArgumentException iae) {
-                String failureMessage = "Unable to validate expression " +
-                        valueExpression.getExpressionString() +
-               " using Bean Validation.  Unable to get value of expression. "+
-                        " Message from Bean Validation: " + iae.getMessage();
-                LOGGER.fine(failureMessage);
-            }
-
-            if (violations != null && !violations.isEmpty()) {
-                ValidatorException toThrow;
-                if (1 == violations.size()) {
-                    ConstraintViolation violation = violations.iterator().next();
-                    toThrow = new ValidatorException(MessageFactory.getMessage(
-                          context,
-                          MESSAGE_ID,
-                          violation.getMessage(),
-                          MessageFactory.getLabel(context, component)));
-                } else {
-                    Set<FacesMessage> messages = new LinkedHashSet<FacesMessage>(
-                          violations.size());
-                    for (ConstraintViolation violation : violations) {
-                        messages.add(MessageFactory.getMessage(context,
-                                                               MESSAGE_ID,
-                                                               violation.getMessage(),
-                                                               MessageFactory.getLabel(
-                                                                     context,
-                                                                     component)));
-                    }
-                    toThrow = new ValidatorException(messages);
-                }
-                throw toThrow;
-            }
-        } else {
-        }
-        
-    }
-    
-    private boolean isResolvable(ValueReference ref, 
-            ValueExpression valueExpression) {
-        Boolean result = null;
-        String failureMessage = null;
-        
-        if (null == valueExpression) {
-            failureMessage = "Unable to validate expression using Bean "+ 
-                    "Validation.  Expression must not be null.";
-            result = false;
-        } else if (null == ref) {
-            failureMessage = "Unable to validate expression " + 
-                    valueExpression.getExpressionString() +
-                    " using Bean Validation.  Unable to get value of expression.";
-            result = false;
-        } else {
-            Class baseClass = ref.getBaseClass();
-
-            // case 1, base classes of Map, List, or Array are not resolvable
-            if (null != baseClass) {
-                if (Map.class.isAssignableFrom(baseClass) ||
-                        Collection.class.isAssignableFrom(baseClass) ||
-                        Array.class.isAssignableFrom(baseClass)) {
-                    failureMessage = "Unable to validate expression " + valueExpression.getExpressionString() +
-                            " using Bean Validation.  Expression evaluates to a Map, List or array.";
-                    result = false;
-                }
-            }
-        }
-
-        result = ((null != result) ? result : true);
-        if (!result) {
-            LOGGER.fine(failureMessage);
-        }
-
-        return result;
-    }
-    
-
-    private Class[] parseValidationGroups(String validationGroupsStr) {
-        if (cachedValidationGroups != null) {
-            return cachedValidationGroups;
-        }
-
-        if (validationGroupsStr == null) {
-            cachedValidationGroups = new Class[] { Default.class };
-            return cachedValidationGroups;
-        }
-
-        List<Class> validationGroupsList = new ArrayList<Class>();
-        String[] classNames = validationGroupsStr.split(VALIDATION_GROUPS_DELIMITER);
-        for (String className : classNames) {
-            className = className.trim();
-            if (className.length() == 0) {
-                continue;
-            }
-
-            if (className.equals(Default.class.getName())) {
-                validationGroupsList.add(Default.class);
-            }
-            else {
-                try {
-                    validationGroupsList.add(Class.forName(className, false, Thread.currentThread().getContextClassLoader()));
-                } catch (ClassNotFoundException e1) {
-                    try {
-                        validationGroupsList.add(Class.forName(className));
-                    } catch (ClassNotFoundException e2) {
-                        throw new FacesException("Validation group not found: " + className);
-                    }
-                }
-            }
-        }
-
-        cachedValidationGroups = validationGroupsList.toArray(new Class[validationGroupsList.size()]);
-        return cachedValidationGroups;
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            Object values[] = new Object[1];
-            values[0] = validationGroups;
-            return values;
-        }
-        return null;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-            Object values[] = (Object[]) state;
-            validationGroups = (String) values[0];
-        }
-    }
-
-    private boolean initialState;
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-
-    private boolean transientValue = false;
-
-    public boolean isTransient() {
-        return this.transientValue;
-    }
-
-    public void setTransient(boolean transientValue) {
-        this.transientValue = transientValue;
-    }
-
-    private static class JsfAwareMessageInterpolator implements MessageInterpolator {
-
-        private FacesContext context;
-        private MessageInterpolator delegate;
-
-        public JsfAwareMessageInterpolator(FacesContext context, MessageInterpolator delegate) {
-            this.context = context;
-            this.delegate = delegate;
-        }
-
-        public String interpolate(String message, MessageInterpolator.Context context) {
-            Locale locale = this.context.getViewRoot().getLocale();
-            if (locale == null) {
-                locale = Locale.getDefault();
-            }
-            return delegate.interpolate(message, context, locale);
-        }
-
-        public String interpolate(String message, MessageInterpolator.Context context, Locale locale) {
-            return delegate.interpolate(message, context, locale);
-        }
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/DoubleRangeValidator.java b/jsf-api/src/main/java/javax/faces/validator/DoubleRangeValidator.java
deleted file mode 100644
index e76eb69..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/DoubleRangeValidator.java
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.PartialStateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-/**
- * <p><strong>DoubleRangeValidator</strong> is a {@link Validator} that checks
- * the value of the corresponding component against specified minimum and
- * maximum values.  The following algorithm is implemented:</p>
- * <ul>
- * <li>If the passed value is <code>null</code>, exit immediately.</li>
- * <li>If the current component value is not a floating point type, or
- * a String that is convertible to double, throw a
- * {@link ValidatorException} containing a
- * TYPE_MESSAGE_ID message.</li>
- * <li>If both a <code>maximum</code> and <code>minimum</code> property
- * has been configured on this {@link Validator}, check the component
- * value against both limits.  If the component value is not within
- * this specified range, throw a {@link ValidatorException} containing a
- * {@link #NOT_IN_RANGE_MESSAGE_ID} message.</li>
- * <li>If a <code>maximum</code> property has been configured on this
- * {@link Validator}, check the component value against
- * this limit.  If the component value is greater than the
- * specified maximum, throw a {@link ValidatorException} containing a
- * MAXIMUM_MESSAGE_ID message.</li>
- * <li>If a <code>minimum</code> property has been configured on this
- * {@link Validator}, check the component value against
- * this limit.  If the component value is less than the
- * specified minimum, throw a {@link ValidatorException} containing a
- * MINIMUM_MESSAGE_ID message.</li>
- * </ul>
- * <p/>
- * <p>For all of the above cases that cause a {@link ValidatorException}
- * to be thrown, if there are parameters to the message that match up
- * with validator parameters, the values of these parameters must be
- * converted using the {@link Converter} registered in the application
- * under the converter id <code>javax.faces.Number</code>.  This allows
- * the values to be localized according to the current
- * <code>Locale</code>.</p>
- */
-
-public class DoubleRangeValidator implements Validator, PartialStateHolder {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String VALIDATOR_ID = "javax.faces.DoubleRange";
-
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage}
-     * to be created if the maximum value check fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured maximum value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String MAXIMUM_MESSAGE_ID =
-         "javax.faces.validator.DoubleRangeValidator.MAXIMUM";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage}
-     * to be created if the minimum value check fails.  The message format
-     * string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured minimum value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String MINIMUM_MESSAGE_ID =
-         "javax.faces.validator.DoubleRangeValidator.MINIMUM";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the maximum or minimum value check fails, and both the maximum
-     * and minimum values for this validator have been set.  The message
-     * format string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured minimum value.</li>
-     * <li><code>{1}</code> replaced by the configured maximum value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String NOT_IN_RANGE_MESSAGE_ID =
-         "javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage}
-     * to be created if the current value of this component is not of the
-     * correct type.   The message format string for this message may
-     * optionally include a <code>{0}</code> placeholder that will be
-     * replaced by a <code>String</code> whose value is the label of
-     * the input component that produced this message.</p>
-     */
-    public static final String TYPE_MESSAGE_ID =
-         "javax.faces.validator.DoubleRangeValidator.TYPE";
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a {@link Validator} with no preconfigured limits.</p>
-     */
-    public DoubleRangeValidator() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a {@link Validator} with the specified preconfigured
-     * limit.</p>
-     *
-     * @param maximum Maximum value to allow
-     */
-    public DoubleRangeValidator(double maximum) {
-
-        super();
-        setMaximum(maximum);
-
-    }
-
-
-    /**
-     * <p>Construct a {@link Validator} with the specified preconfigured
-     * limits.</p>
-     *
-     * @param maximum Maximum value to allow
-     * @param minimum Minimum value to allow
-     */
-    public DoubleRangeValidator(double maximum, double minimum) {
-
-        super();
-        setMaximum(maximum);
-        setMinimum(minimum);
-
-    }
-
-    // -------------------------------------------------------------- Properties
-
-
-    private Double maximum;
-
-    /**
-     * <p>Return the maximum value to be enforced by this {@link
-     * Validator} or <code>Double.MAX_VALUE</code> if it has not been
-     * set.</p>
-     */
-    public double getMaximum() {
-
-        return (this.maximum != null ? this.maximum : Double.MAX_VALUE);
-
-    }
-
-
-    /**
-     * <p>Set the maximum value to be enforced by this {@link Validator}.</p>
-     *
-     * @param maximum The new maximum value
-     */
-    public void setMaximum(double maximum) {
-
-        clearInitialState();
-        this.maximum = maximum;
-
-    }
-
-
-    private Double minimum;
-
-
-    /**
-     * <p>Return the minimum value to be enforced by this {@link
-     * Validator}, or <code>Double.MIN_VALUE</code> if it has not been
-     * set.</p>
-     */
-    public double getMinimum() {
-
-        return (this.minimum != null ? this.minimum : Double.MIN_VALUE);
-
-    }
-
-
-    /**
-     * <p>Set the minimum value to be enforced by this {@link Validator}.</p>
-     *
-     * @param minimum The new minimum value
-     */
-    public void setMinimum(double minimum) {
-
-        clearInitialState();
-        this.minimum = minimum;
-
-    }
-
-    // ------------------------------------------------------- Validator Methods
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws ValidatorException   {@inheritDoc}
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) throws ValidatorException {
-        if ((context == null) || (component == null)) {
-            throw new NullPointerException();
-        }
-        if (value != null) {
-            try {
-                double converted = doubleValue(value);
-                if (isMaximumSet() &&
-                     (converted > maximum)) {
-                    if (isMinimumSet()) {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  NOT_IN_RANGE_MESSAGE_ID,
-                                  stringValue(component, minimum, context),
-                                  stringValue(component, maximum, context),
-                                  MessageFactory.getLabel(context, component)));
-
-                    } else {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  MAXIMUM_MESSAGE_ID,
-                                  stringValue(component, maximum, context),
-                                  MessageFactory.getLabel(context, component)));
-                    }
-                }
-                if (isMinimumSet() &&
-                     (converted < minimum)) {
-                    if (isMaximumSet()) {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  NOT_IN_RANGE_MESSAGE_ID,
-                                  stringValue(component, minimum, context),
-                                  stringValue(component, maximum, context),
-                                  MessageFactory.getLabel(context, component)));
-
-                    } else {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  MINIMUM_MESSAGE_ID,
-                                  stringValue(component, minimum, context),
-                                  MessageFactory.getLabel(context, component)));
-                    }
-                }
-            } catch (NumberFormatException e) {
-                throw new ValidatorException(MessageFactory.getMessage
-                     (context, TYPE_MESSAGE_ID,
-                          MessageFactory.getLabel(context, component)), e);
-            }
-        }
-
-    }
-
-
-    public boolean equals(Object otherObj) {
-
-        if (!(otherObj instanceof DoubleRangeValidator)) {
-            return false;
-        }
-        DoubleRangeValidator other = (DoubleRangeValidator) otherObj;
-        return ((this.getMaximum() == other.getMaximum())
-                && (this.getMinimum() == other.getMinimum())
-                && (this.isMaximumSet() == other.isMaximumSet())
-                && (this.isMinimumSet() == other.isMinimumSet()));
-
-    }
-
-
-    public int hashCode() {
-
-        int hashCode = (Double.valueOf(this.getMinimum()).hashCode()
-             + Double.valueOf(this.getMaximum()).hashCode()
-             + Boolean.valueOf(isMinimumSet()).hashCode()
-             + Boolean.valueOf(isMaximumSet()).hashCode());
-        return (hashCode);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Return the specified attribute value, converted to a
-     * <code>double</code>.</p>
-     *
-     * @param attributeValue The attribute value to be converted
-     * @throws NumberFormatException if conversion is not possible
-     */
-    private static double doubleValue(Object attributeValue)
-         throws NumberFormatException {
-
-        if (attributeValue instanceof Number) {
-            return (((Number) attributeValue).doubleValue());
-        } else {
-            return (Double.parseDouble(attributeValue.toString()));
-        }
-
-    }
-
-    private static String stringValue(UIComponent component,
-                                      Double toConvert,
-                                      FacesContext context) {
-
-        Converter converter = context.getApplication().createConverter("javax.faces.Number");
-        return converter.getAsString(context, component, toConvert);
-
-    }
-
-    private boolean isMaximumSet() {
-
-        return (maximum != null);
-
-    }
-
-
-    private boolean isMinimumSet() {
-
-        return (minimum != null);
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            Object values[] = new Object[2];
-            values[0] = maximum;
-            values[1] = minimum;
-            return (values);
-        }
-        return null;
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-            Object values[] = (Object[]) state;
-            maximum = (Double) values[0];
-            minimum = (Double) values[1];
-        }
-
-    }
-
-
-    private boolean transientValue = false;
-
-
-    public boolean isTransient() {
-
-        return (this.transientValue);
-
-    }
-
-
-    public void setTransient(boolean transientValue) {
-
-        this.transientValue = transientValue;
-
-    }
-
-    private boolean initialState;
-
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/FacesValidator.java b/jsf-api/src/main/java/javax/faces/validator/FacesValidator.java
deleted file mode 100644
index 03b1e1b..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/FacesValidator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.Inherited;
-
-/**
- * <p class="changed_added_2_0">The presence of this annotation on a
- * class automatically registers the class with the runtime as a {@link
- * Validator}.  The value of the {@link #value} attribute is taken to be
- * the <em>validator-id</em> and the fully qualified class name of the
- * class to which this annotation is attached is taken to be the
- * <em>validator-class</em>.  The implementation must guarantee that for
- * each class annotated with <code>FacesValidator</code>, found with the
- * algorithm in section JSF.11.5,
- * {@link
- * javax.faces.application.Application#addValidator(java.lang.String,java.lang.String)}
- * is called, passing the derived <em>validator-id</em> as the first
- * argument and the derived <em>validator-class</em> as the second
- * argument.  The implementation must guarantee that all such calls to
- * <code>addValidator()</code> happen during application startup time
- * and before any requests are serviced.</p>
- *
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.TYPE)
- at Inherited
-public @interface FacesValidator {
-
-    /**
-     * <p class="changed_added_2_0">The value of this annotation
-     * attribute is taken to be the <em>validator-id</em> with which
-     * instances of this class of component can be instantiated by
-     * calling {@link
-     * javax.faces.application.Application#createValidator(java.lang.String)}.</p>
-     */ 
-
-    String value();
-
-    /**
-     * <p class="changed_added_2_0">If <code>true</code>, the validator
-     * id for this annotation is added to the list of default validators
-     * by a call to {@link
-     * javax.faces.application.Application#addDefaultValidatorId}.</p>
-     */ 
-
-    boolean isDefault() default false;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/LengthValidator.java b/jsf-api/src/main/java/javax/faces/validator/LengthValidator.java
deleted file mode 100644
index 190bbe6..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/LengthValidator.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.PartialStateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-/**
- * <p><strong>LengthValidator</strong> is a {@link Validator} that checks
- * the number of characters in the String representation of the value of the
- * associated component.  The following algorithm is implemented:</p>
- * <ul>
- * <li>Convert the passed value to a String, if necessary, by calling its
- * <code>toString()</code> method.</li>
- * <li>If a <code>maximum</code> property has been configured on this
- * {@link Validator}, check the length of the converted
- * String against this limit.  If the String length is larger than the
- * specified maximum, throw a {@link ValidatorException} containing a
- * a MAXIMUM_MESSAGE_ID message.</li>
- * <li>If a <code>minimum</code> property has been configured on this
- * {@link Validator}, check the length of the converted
- * String against this limit.  If the String length is less than the
- * specified minimum, throw a {@link ValidatorException} containing a
- * a MINIMUM_MESSAGE_ID message.</li>
- * </ul>
- * <p/>
- * <p>For all of the above cases that cause a {@link ValidatorException}
- * to be thrown, if there are parameters to the message that match up
- * with validator parameters, the values of these parameters must be
- * converted using the {@link Converter} registered in the application
- * under the converter id <code>javax.faces.Number</code>.  This allows
- * the values to be localized according to the current
- * <code>Locale</code>.</p>
- */
-
-public class LengthValidator implements Validator, PartialStateHolder {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard validator id for this validator.</p>
-     */
-    public static final String VALIDATOR_ID = "javax.faces.Length";
-
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the maximum length check fails.   The message format string for
-     * this message may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured maximum length.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String MAXIMUM_MESSAGE_ID =
-         "javax.faces.validator.LengthValidator.MAXIMUM";
-
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the minimum length check fails.   The message format string for
-     * this message may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured minimum length.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String MINIMUM_MESSAGE_ID =
-         "javax.faces.validator.LengthValidator.MINIMUM";
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a {@link Validator} with no preconfigured limits.</p>
-     */
-    public LengthValidator() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a {@link Validator} with the specified preconfigured
-     * limit.</p>
-     *
-     * @param maximum Maximum value to allow
-     */
-    public LengthValidator(int maximum) {
-
-        super();
-        setMaximum(maximum);
-
-    }
-
-
-    /**
-     * <p>Construct a {@link Validator} with the specified preconfigured
-     * limits.</p>
-     *
-     * @param maximum Maximum value to allow
-     * @param minimum Minimum value to allow
-     */
-    public LengthValidator(int maximum, int minimum) {
-
-        super();
-        setMaximum(maximum);
-        setMinimum(minimum);
-
-    }
-
-    // -------------------------------------------------------------- Properties
-
-
-    private Integer maximum;
-
-
-    /**
-     * <p>Return the maximum length to be enforced by this {@link
-     * Validator}, or <code>0</code> if the maximum has not been
-     * set.</p>
-     */
-    public int getMaximum() {
-
-        return (this.maximum != null ? this.maximum : 0);
-
-    }
-
-
-    /**
-     * <p>Set the maximum length to be enforced by this {@link Validator}.</p>
-     *
-     * @param maximum The new maximum value
-     */
-    public void setMaximum(int maximum) {
-
-        clearInitialState();
-        this.maximum = maximum;
-
-    }
-
-
-    private Integer minimum;
-
-
-    /**
-     * <p>Return the minimum length to be enforced by this {@link
-     * Validator}, or <code>0</code> if the minimum has not been
-     * set.</p>
-     */
-    public int getMinimum() {
-
-        return (this.minimum != null ? this.minimum : 0);
-
-    }
-
-
-    /**
-     * <p>Set the minimum length to be enforced by this {@link Validator}.</p>
-     *
-     * @param minimum The new minimum value
-     */
-    public void setMinimum(int minimum) {
-
-        clearInitialState();
-        this.minimum = minimum;
-
-    }
-
-    // ------------------------------------------------------- Validator Methods
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws ValidatorException   {@inheritDoc}
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) throws ValidatorException {
-
-        if ((context == null) || (component == null)) {
-            throw new NullPointerException();
-        }
-        if (value != null) {
-            String converted = stringValue(value);
-            if (isMaximumSet() &&
-                 (converted.length() > maximum)) {
-                throw new ValidatorException(MessageFactory.getMessage
-                     (context,
-                          MAXIMUM_MESSAGE_ID,
-                          integerToString(component, maximum, context),
-                          MessageFactory.getLabel(context, component)));
-            }
-            if (isMinimumSet() &&
-                 (converted.length() < minimum)) {
-                throw new ValidatorException(MessageFactory.getMessage
-                     (context,
-                          MINIMUM_MESSAGE_ID,
-                          integerToString(component, minimum, context),
-                          MessageFactory.getLabel(context, component)));
-            }
-        }
-
-    }
-
-
-    public boolean equals(Object otherObj) {
-
-        if (!(otherObj instanceof LengthValidator)) {
-            return false;
-        }
-        LengthValidator other = (LengthValidator) otherObj;
-        return ((this.getMaximum() == other.getMaximum())
-                && (this.getMinimum() == other.getMinimum())
-                && (this.isMinimumSet() == other.isMinimumSet())
-                && (this.isMaximumSet() == other.isMaximumSet()));
-
-    }
-
-    public int hashCode() {
-
-        int hashCode = (Integer.valueOf(getMinimum()).hashCode()
-                         + Integer.valueOf(getMaximum()).hashCode()
-                         + Boolean.valueOf(isMaximumSet()).hashCode()
-                         + Boolean.valueOf(isMinimumSet()).hashCode());
-        return (hashCode);
-
-    }
-
-    // -------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Return the specified attribute value, converted to a
-     * <code>String</code>.</p>
-     *
-     * @param attributeValue The attribute value to be converted
-     */
-    private static String stringValue(Object attributeValue) {
-
-        if (attributeValue == null) {
-            return (null);
-        } else if (attributeValue instanceof String) {
-            return ((String) attributeValue);
-        } else {
-            return (attributeValue.toString());
-        }
-
-    }
-
-    private static String integerToString(UIComponent component,
-                                          Integer toConvert,
-                                          FacesContext context) {
-
-        Converter converter =
-             context.getApplication().createConverter("javax.faces.Number");
-        return converter.getAsString(context, component, toConvert);
-
-    }
-
-
-    private boolean isMaximumSet() {
-
-        return (maximum != null);
-
-    }
-
-
-    private boolean isMinimumSet() {
-
-        return (minimum != null);
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            Object values[] = new Object[2];
-            values[0] = maximum;
-            values[1] = minimum;
-            return (values);
-        }
-        return null;
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-            Object values[] = (Object[]) state;
-            maximum = (Integer) values[0];
-            minimum = (Integer) values[1];
-        }
-
-    }
-
-
-    private boolean transientValue = false;
-
-
-    public boolean isTransient() {
-
-        return (this.transientValue);
-
-    }
-
-
-    public void setTransient(boolean transientValue) {
-
-        this.transientValue = transientValue;
-
-    }
-
-    private boolean initialState;
-
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/LongRangeValidator.java b/jsf-api/src/main/java/javax/faces/validator/LongRangeValidator.java
deleted file mode 100644
index a055337..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/LongRangeValidator.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.PartialStateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-
-/**
- * <p><strong>LongRangeValidator</strong> is a {@link Validator} that checks
- * the value of the corresponding component against specified minimum and
- * maximum values.  The following algorithm is implemented:</p>
- * <ul>
- * <li>If the passed value is <code>null</code>, exit immediately.</li>
- * <li>If the current component value is not a floating point type, or
- * a String that is convertible to long,
- * throw a {@link ValidatorException} containing a
- * TYPE_MESSAGE_ID message.</li>
- * <li>If both a <code>maximum</code> and <code>minimum</code> property
- * has been configured on this {@link Validator}, check the component
- * value against both limits.  If the component value is not within
- * this specified range, throw a {@link ValidatorException} containing a
- * {@link #NOT_IN_RANGE_MESSAGE_ID} message.</li>
- * <li>If a <code>maximum</code> property has been configured on this
- * {@link Validator}, check the component value against
- * this limit.  If the component value is greater than the
- * specified maximum, throw a {@link ValidatorException} containing a
- * MAXIMUM_MESSAGE_ID message.</li>
- * <li>If a <code>minimum</code> property has been configured on this
- * {@link Validator}, check the component value against
- * this limit.  If the component value is less than the
- * specified minimum, throw a {@link ValidatorException} containing a
- * MINIMUM_MESSAGE_ID message.</li>
- * </ul>
- * <p/>
- * <p>For all of the above cases that cause a {@link ValidatorException}
- * to be thrown, if there are parameters to the message that match up
- * with validator parameters, the values of these parameters must be
- * converted using the {@link Converter} registered in the application
- * under the converter id <code>javax.faces.Number</code>.  This allows
- * the values to be localized according to the current
- * <code>Locale</code>.</p>
- */
-
-public class LongRangeValidator implements Validator, PartialStateHolder {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String VALIDATOR_ID = "javax.faces.LongRange";
-
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the maximum value check fails.  The message format string for
-     * this message may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured maximum value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String MAXIMUM_MESSAGE_ID =
-         "javax.faces.validator.LongRangeValidator.MAXIMUM";
-
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the minimum value check fails.  The message format string for
-     * this message may optionally include the following placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured minimum value.</li>
-     * <li><code>{1}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String MINIMUM_MESSAGE_ID =
-         "javax.faces.validator.LongRangeValidator.MINIMUM";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the maximum or minimum value check fails, and both the maximum
-     * and minimum values for this validator have been set.  The message
-     * format string for this message may optionally include the following
-     * placeholders:
-     * <ul>
-     * <li><code>{0}</code> replaced by the configured minimum value.</li>
-     * <li><code>{1}</code> replaced by the configured maximum value.</li>
-     * <li><code>{2}</code> replaced by a <code>String</code> whose value
-     * is the label of the input component that produced this message.</li>
-     * </ul></p>
-     */
-    public static final String NOT_IN_RANGE_MESSAGE_ID =
-         "javax.faces.validator.LongRangeValidator.NOT_IN_RANGE";
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the current value of this component is not of the correct type.
-     * The message format string for this message may
-     * optionally include a <code>{0}</code> placeholder that will be
-     * replaced by a <code>String</code> whose value is the label of
-     * the input component that produced this message.</p>
-     */
-    public static final String TYPE_MESSAGE_ID =
-         "javax.faces.validator.LongRangeValidator.TYPE";
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct a {@link Validator} with no preconfigured limits.</p>
-     */
-    public LongRangeValidator() {
-
-        super();
-
-    }
-
-
-    /**
-     * <p>Construct a {@link Validator} with the specified preconfigured
-     * limit.</p>
-     *
-     * @param maximum Maximum value to allow
-     */
-    public LongRangeValidator(long maximum) {
-
-        super();
-        setMaximum(maximum);
-
-    }
-
-
-    /**
-     * <p>Construct a {@link Validator} with the specified preconfigured
-     * limits.</p>
-     *
-     * @param maximum Maximum value to allow
-     * @param minimum Minimum value to allow
-     */
-    public LongRangeValidator(long maximum, long minimum) {
-
-        super();
-        setMaximum(maximum);
-        setMinimum(minimum);
-
-    }
-
-    // -------------------------------------------------------------- Properties
-
-
-    private Long maximum;
-
-
-    /**
-     * <p>Return the maximum value to be enforced by this {@link Validator}.</p>
-     */
-    public long getMaximum() {
-
-        return (this.maximum != null ? this.maximum : 0);
-
-    }
-
-
-    /**
-     * <p>Set the maximum value to be enforced by this {@link Validator}.</p>
-     *
-     * @param maximum The new maximum value
-     */
-    public void setMaximum(long maximum) {
-
-        clearInitialState();
-        this.maximum = maximum;
-
-    }
-
-
-    private Long minimum;
-
-
-    /**
-     * <p>Return the minimum value to be enforced by this {@link Validator}.</p>
-     */
-    public long getMinimum() {
-
-        return (this.minimum != null ? this.minimum : 0);
-
-    }
-
-
-    /**
-     * <p>Set the minimum value to be enforced by this {@link Validator}.</p>
-     *
-     * @param minimum The new minimum value
-     */
-    public void setMinimum(long minimum) {
-
-        clearInitialState();
-        this.minimum = minimum;
-
-    }
-
-    // ------------------------------------------------------- Validator Methods
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws ValidatorException   {@inheritDoc}
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) throws ValidatorException {
-
-        if ((context == null) || (component == null)) {
-            throw new NullPointerException();
-        }
-        if (value != null) {
-            try {
-                long converted = longValue(value);
-                if (isMaximumSet() &&
-                     (converted > maximum)) {
-                    if (isMinimumSet()) {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  NOT_IN_RANGE_MESSAGE_ID,
-                                  stringValue(component, minimum, context),
-                                  stringValue(component, maximum, context),
-                                  MessageFactory.getLabel(context, component)));
-
-                    } else {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  MAXIMUM_MESSAGE_ID,
-                                  stringValue(component, maximum, context),
-                                  MessageFactory.getLabel(context, component)));
-                    }
-                }
-                if (isMinimumSet() &&
-                     (converted < minimum)) {
-                    if (isMaximumSet()) {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  NOT_IN_RANGE_MESSAGE_ID,
-                                  stringValue(component, minimum, context),
-                                  stringValue(component, maximum, context),
-                                  MessageFactory.getLabel(context, component)));
-
-                    } else {
-                        throw new ValidatorException(MessageFactory.getMessage
-                             (context,
-                                  MINIMUM_MESSAGE_ID,
-                                  stringValue(component, minimum, context),
-                                  MessageFactory.getLabel(context, component)));
-                    }
-                }
-            } catch (NumberFormatException e) {
-                throw new ValidatorException(MessageFactory.getMessage
-                     (context, TYPE_MESSAGE_ID,
-                          MessageFactory.getLabel(context, component)), e);
-            }
-        }
-
-    }
-
-
-    public boolean equals(Object otherObj) {
-
-        if (!(otherObj instanceof LongRangeValidator)) {
-            return false;
-        }
-        LongRangeValidator other = (LongRangeValidator) otherObj;
-        return ((this.getMaximum() == other.getMaximum())
-                && (this.getMinimum() == other.getMinimum())
-                && (this.isMaximumSet() == other.isMaximumSet())
-                && (this.isMinimumSet() == other.isMinimumSet()));
-
-    }
-
-
-    public int hashCode() {
-
-        int hashCode = Long.valueOf(getMinimum()).hashCode()
-             + Long.valueOf(getMaximum()).hashCode()
-             + Boolean.valueOf(isMinimumSet()).hashCode()
-             + Boolean.valueOf(isMaximumSet()).hashCode();
-        return (hashCode);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Return the specified attribute value, converted to a
-     * <code>long</code>.</p>
-     *
-     * @param attributeValue The attribute value to be converted
-     * @throws NumberFormatException if conversion is not possible
-     */
-    private static long longValue(Object attributeValue)
-         throws NumberFormatException {
-
-        if (attributeValue instanceof Number) {
-            return (((Number) attributeValue).longValue());
-        } else {
-            return (Long.parseLong(attributeValue.toString()));
-        }
-
-    }
-
-    private static String stringValue(UIComponent component,
-                                      Long toConvert,
-                                      FacesContext context) {
-
-        Converter converter =
-             context.getApplication().createConverter("javax.faces.Number");
-        return converter.getAsString(context, component, toConvert);
-
-    }
-
-    private boolean isMinimumSet() {
-
-        return (minimum != null);
-
-    }
-
-    private boolean isMaximumSet() {
-
-        return (maximum != null);
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            Object values[] = new Object[2];
-            values[0] = maximum;
-            values[1] = minimum;
-            return (values);
-        }
-        return null;
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-            Object values[] = (Object[]) state;
-            maximum = (Long) values[0];
-            minimum = (Long) values[1];
-        }
-
-    }
-
-
-    private boolean transientValue = false;
-
-
-    public boolean isTransient() {
-
-        return (this.transientValue);
-
-    }
-
-
-    public void setTransient(boolean transientValue) {
-
-        this.transientValue = transientValue;
-
-    }
-
-    private boolean initialState;
-
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/MethodExpressionValidator.java b/jsf-api/src/main/java/javax/faces/validator/MethodExpressionValidator.java
deleted file mode 100644
index de95e46..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/MethodExpressionValidator.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.MethodExpression;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * <p><strong>MethodExpressionValidator</strong> is a {@link Validator} that
- * wraps a {@link MethodExpression}, and it performs validation by executing
- * a method on an object identified by the {@link MethodExpression}.</p>
- */
-
-public class MethodExpressionValidator implements Validator, StateHolder {
-
-    // ------------------------------------------------------ Instance Variables
-
-    private MethodExpression methodExpression = null;
-
-    public MethodExpressionValidator() {
-
-        super();
-
-    }
-
-    /**
-     * <p>Construct a {@link Validator} that contains a {@link MethodExpression}.</p>
-     */
-    public MethodExpressionValidator(MethodExpression methodExpression) {
-
-        super();
-        this.methodExpression = methodExpression;
-
-    }
-
-    // ------------------------------------------------------- Validator Methods
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws ValidatorException   {@inheritDoc}
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) throws ValidatorException {
-
-        if ((context == null) || (component == null)) {
-            throw new NullPointerException();
-        }
-        if (value != null) {
-            try {
-                ELContext elContext = context.getELContext();
-                methodExpression.invoke(elContext, new Object[]{context, component, value});
-            } catch (ELException ee) {
-                Throwable e = ee.getCause();
-                if (e instanceof ValidatorException) {
-                    throw (ValidatorException) e;
-                }
-                String errInfo = ee.getMessage();
-                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                        errInfo,
-                                                        errInfo);
-                throw new ValidatorException(message, ee.getCause());
-            }
-        }
-
-    }
-
-    // ----------------------------------------------------- StateHolder Methods
-
-
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        Object values[] = new Object[1];
-        values[0] = methodExpression;
-        return (values);
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-        Object values[] = (Object[]) state;
-        methodExpression = (MethodExpression) values[0];
-    }
-
-
-    private boolean transientValue = false;
-
-
-    public boolean isTransient() {
-
-        return (this.transientValue);
-
-    }
-
-
-    public void setTransient(boolean transientValue) {
-
-        this.transientValue = transientValue;
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/RegexValidator.java b/jsf-api/src/main/java/javax/faces/validator/RegexValidator.java
deleted file mode 100644
index 0f03a7d..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/RegexValidator.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.application.FacesMessage;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-import javax.faces.component.PartialStateHolder;
-
-/**
- * <p class="changed_added_2_0">A Validator that checks against a
- * Regular Expression (which is the pattern property).  The pattern must
- * resolve to a String that follows the java.util.regex standards.</p>
- * @since 2.0
- */
-public class RegexValidator implements Validator, PartialStateHolder {
-
-    private String regex;
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String VALIDATOR_ID = "javax.faces.RegularExpression";
-
-    /**
-     * <p>The message identifier of the {@link
-     * javax.faces.application.FacesMessage} to be created if the value
-     * returned from {@link #getPattern} is <code>null</code> or the
-     * empty String.</p>
-     */
-    public static final String PATTERN_NOT_SET_MESSAGE_ID =
-         "javax.faces.validator.RegexValidator.PATTERN_NOT_SET";
-
-    /**
-     * <p>The message identifier of the {@link
-     * javax.faces.application.FacesMessage} to be created if the act of
-     * matching the value against the pattern returned from {@link
-     * #getPattern} fails because the value does not match the
-     * pattern.</p>
-     */
-    public static final String NOT_MATCHED_MESSAGE_ID =
-         "javax.faces.validator.RegexValidator.NOT_MATCHED";
-
-    /**
-     * <p>The message identifier of the {@link
-     * javax.faces.application.FacesMessage} to be created if the act of
-     * matching the value against the pattern returned from {@link
-     * #getPattern} fails because of a
-     * <code>PatternSyntaxException</code>.</p>
-     */
-    public static final String MATCH_EXCEPTION_MESSAGE_ID =
-         "javax.faces.validator.RegexValidator.MATCH_EXCEPTION";
-
-
-    /**
-     * <p>The Regular Expression property to validate against.</p>
-     *
-     * @param pattern a regular expression pattern
-     */
-    public void setPattern(String pattern) {
-        clearInitialState();
-        this.regex = pattern;
-    }
-
-    /**
-     * <p>Return the <code>ValueExpression</code> that yields the
-     * regular expression pattern when evaluated.</p>
-     */
-
-    public String getPattern() {
-        return this.regex;
-    }
-
-    /**
-
-     * </p>Validate a String against a regular expression pattern.  The
-     * full regex pattern must be matched in order to pass the
-     * validation.</p>
-
-     * @param context {@inheritDoc}
-     * @param component {@inheritDoc}
-     * @param value {@inheritDoc}
-
-     * @throws NullPointerException {@inheritDoc}
-     * @throws ValidatorException   {@inheritDoc}
-
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (component == null) {
-            throw new NullPointerException();
-        }
-        
-        if (value == null) {
-            return;
-        }
-
-        FacesMessage fmsg;
-
-        Locale locale = context.getViewRoot().getLocale();
-
-        if (regex == null || regex.length() == 0) {
-            fmsg = MessageFactory.getMessage(locale,
-                    PATTERN_NOT_SET_MESSAGE_ID,
-                    (Object) null);
-            throw new ValidatorException(fmsg);
-        }
-
-        try {
-            Pattern pattern = Pattern.compile(regex);
-            Matcher matcher = pattern.matcher((String) value);
-            if (!matcher.matches()) {
-                Object[] params = { regex };
-                fmsg = MessageFactory.getMessage(locale,
-                        NOT_MATCHED_MESSAGE_ID,
-                        params);
-                throw new ValidatorException(fmsg);
-            }
-        } catch (PatternSyntaxException pse) {
-            fmsg = MessageFactory.getMessage(locale,
-                    MATCH_EXCEPTION_MESSAGE_ID,
-                    (Object) null);
-            throw new ValidatorException(fmsg, pse);
-        }
-    }
-    
-    // ----------------------------------------------------- StateHolder Methods
-
-
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (!initialStateMarked()) {
-            Object values[] = new Object[1];
-            values[0] = regex;
-
-            return (values);
-        }
-        return null;
-
-    }
-
-
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state != null) {
-            Object values[] = (Object[]) state;
-            regex = (String) values[0];
-        }
-
-    }
-
-
-    private boolean transientValue = false;
-
-
-    public boolean isTransient() {
-
-        return (this.transientValue);
-
-    }
-
-
-    public void setTransient(boolean transientValue) {
-
-        this.transientValue = transientValue;
-
-    }
-
-
-    private boolean initialState;
-
-    public void markInitialState() {
-        initialState = true;
-    }
-
-    public boolean initialStateMarked() {
-        return initialState;
-    }
-
-    public void clearInitialState() {
-        initialState = false;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/RequiredValidator.java b/jsf-api/src/main/java/javax/faces/validator/RequiredValidator.java
deleted file mode 100644
index 925e8fb..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/RequiredValidator.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-import java.util.List;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIInput;
-
-/**
- * <p class="changed_added_2_0">A Validator that checks for an empty
- * value in the same way that UIInput checks for a value. In fact, this validator
- * is equivalent to setting the required attribute on the input component to true.</p>
- *
- * @since 2.0
- */
-public class RequiredValidator implements Validator {
-
-    /**
-     * <p>The standard converter id for this converter.</p>
-     */
-    public static final String VALIDATOR_ID = "javax.faces.Required";
-
-    /**
-
-     * </p>Verify that the converted object value is not null.</p>
-
-     * @param context {@inheritDoc}
-     * @param component {@inheritDoc}
-     * @param value {@inheritDoc}
-
-     * @throws ValidatorException   {@inheritDoc}
-
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) {
-
-        if (UIInput.isEmpty(value)) {
-            FacesMessage msg;
-            String requiredMessageStr = null;
-            if (component instanceof UIInput) {
-                requiredMessageStr = ((UIInput) component).getRequiredMessage();
-            }
-
-            // respect the message string override on the component to emulate required="true" behavior
-            if (requiredMessageStr != null) {
-                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, requiredMessageStr, requiredMessageStr);
-            }
-            else {
-                msg = MessageFactory.getMessage(context, UIInput.REQUIRED_MESSAGE_ID,
-                    MessageFactory.getLabel(context, component));
-            }
-
-            throw new ValidatorException(msg);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-api/src/main/java/javax/faces/validator/Validator.java b/jsf-api/src/main/java/javax/faces/validator/Validator.java
deleted file mode 100644
index 75ee285..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/Validator.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import java.util.EventListener;
-
-
-/**
- * <p>A <strong class="changed_modified_2_0">Validator</strong>
- * implementation is a class that can perform validation (correctness
- * checks) on a {@link javax.faces.component.EditableValueHolder}.  Zero
- * or more <code>Validator</code>s can be associated with each {@link
- * javax.faces.component.EditableValueHolder} in the view, and are
- * called during the <em>Process Validations</em> phase of the request
- * processing lifecycle.</p>
-
- * <p/>
- * <p>Individual {@link Validator}s should examine the value and
- * component that they are passed, and throw a {@link ValidatorException}
- * containing a {@link javax.faces.application.FacesMessage}, documenting
- * any failures to conform to the required rules.
- * <p/>
- * <p>For maximum generality, {@link Validator} instances may be
- * configurable based on properties of the {@link Validator} implementation
- * class.  For example, a range check {@link Validator} might support
- * configuration of the minimum and maximum values to be used.</p>
- * <p/>
- * <p>{@link Validator} implementations must have a zero-arguments
- * public constructor.  In addition, if the {@link Validator} class
- * wishes to have configuration property values saved and restored with
- * the view, the implementation must also implement {@link
- * StateHolder}.</p>
-
- * <p class="changed_added_2_0">If the class implementing
- * <code>Validator</code> has a {@link
- * javax.faces.application.ResourceDependency} annotation, the action
- * described in <code>ResourceDependency</code> must be taken when
- * {@link javax.faces.component.EditableValueHolder#addValidator} is
- * called.  If the class implementing <code>Validator</code> has a {@link
- * javax.faces.application.ResourceDependencies} annotation, the
- * action described in <code>ResourceDependencies</code> must be taken
- * when {@link javax.faces.component.EditableValueHolder#addValidator} 
- * is called.</p>
-
- */
-
-public interface Validator extends EventListener {
-
-    /**
-     * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
-     * the maximum or minimum value check fails, and both the maximum
-     * and minimum values for this validator have been set.  The message
-     * format string for this message may optionally include a
-     * <code>{0}</code> placeholder, which will be replaced by the
-     * configured minimum value, and a <code>{1}</code> placeholder,
-     * which will be replaced by the configured maximum value.</p>
-     *
-     * @deprecated Use {@link DoubleRangeValidator#NOT_IN_RANGE_MESSAGE_ID} or
-     *             {@link LongRangeValidator#NOT_IN_RANGE_MESSAGE_ID} instead.
-     */
-    public static final String NOT_IN_RANGE_MESSAGE_ID =
-         "javax.faces.validator.NOT_IN_RANGE";
-
-    /**
-     * <p><span class="changed_modified_2_0">Perform</span> the
-     * correctness checks implemented by this {@link Validator} against
-     * the specified {@link UIComponent}.  If any violations are found,
-     * a {@link ValidatorException} will be thrown containing the {@link
-     * javax.faces.application.FacesMessage} describing the failure.
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p>For a validator to be fully compliant with Version 2 and later
-     * of the specification, it must not fail validation on
-     * <code>null</code> or empty values unless it is specifically
-     * intended to address <code>null</code> or empty values.  An
-     * application-wide <code><context-param></code> is provided
-     * to allow validators designed for JSF 1.2 to work with JSF 2 and
-     * later. The <code>javax.faces.VALIDATE_EMPTY_FIELDS</code>
-     * <code><context-param></code> must be set to
-     * <code>false</code> to enable this backwards compatibility
-     * behavior.</p>
-     *
-     * </div>
-     *
-     * @param context   FacesContext for the request we are processing
-     * @param component UIComponent we are checking for correctness
-     * @param value     the value to validate
-     * @throws ValidatorException   if validation fails
-     * @throws NullPointerException if <code>context</code>
-     *                              or <code>component</code> is <code>null</code>
-     */
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) throws ValidatorException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/ValidatorException.java b/jsf-api/src/main/java/javax/faces/validator/ValidatorException.java
deleted file mode 100644
index 26ad911..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/ValidatorException.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-import java.util.Collection;
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-
-
-/**
- * <p>A <strong class="changed_modified_2_0">ValidatorException</strong> is an exception
- * thrown by the <code>validate()</code> method of a
- * {@link Validator} to indicate that validation failed.
- */
-public class ValidatorException extends FacesException {
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Construct a new exception with the specified message and
-     * no root cause.</p>
-     *
-     * @param message The message for this exception
-     */
-    public ValidatorException(FacesMessage message) {
-
-        super(message.getSummary());
-        this.message = message;
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Allow this one exception to contain
-     * multiple messages.</p>
-     * @param messages
-     * 
-     * @since 2.0
-     */
-
-    public ValidatorException(Collection<FacesMessage> messages) {
-        this.messages = messages;
-    }
-
-    /**
-     * <p>Construct a new exception with the specified detail message and
-     * root cause.</p>
-     *
-     * @param message The detail message for this exception
-     * @param cause   The root cause for this exception
-     */
-    public ValidatorException(FacesMessage message, Throwable cause) {
-
-        super(message.getSummary(), cause);
-        this.message = message;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Allow this one exception to contain
-     * multiple messages, while passing on the root cause to the superclass</p>
-     * @param messages the detail messages for this exception
-     * @param cause the root cause for this exception
-     * 
-     * @since 2.0
-     */
-
-    public ValidatorException(Collection<FacesMessage> messages, Throwable cause) {
-        super(messages.isEmpty() ? "" : messages.iterator().next().getSummary(),
-              cause);
-        this.messages = messages;
-    }
-
-    /**
-     * <p class="changed_modified_2_0">Returns the <code>FacesMessage</code>
-     * associated with 
-     * the exception.  If this instance
-     * was created with a constructor that takes 
-     * <code>Collection<FacesMessage></code>, this method returns the first
-     * message in the <code>Collection</code></p>
-     */
-    public FacesMessage getFacesMessage() {
-        FacesMessage result = this.message;
-        if (null == result && null != this.messages && !this.messages.isEmpty()) {
-            result = messages.iterator().next();
-        }
-        return result;
-    }
-    
-    
-    /**
-     * <p class="changed_modified_2_0">If this instance was created with a 
-     * constructor that takes 
-     * <code>Collection<FacesMessage></code>, this method returns the passed
-     * collection, otherwise this method returns <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-
-    public Collection<FacesMessage> getFacesMessages() {
-        return this.messages;
-    }
-
-    private FacesMessage message;
-    private Collection<FacesMessage> messages;
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/ValueExpressionAnalyzer.java b/jsf-api/src/main/java/javax/faces/validator/ValueExpressionAnalyzer.java
deleted file mode 100644
index 34e8dda..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/ValueExpressionAnalyzer.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-import java.util.Locale;
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.FunctionMapper;
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import javax.faces.el.CompositeComponentExpressionHolder;
-
-/**
- * Analyzes a {@link ValueExpression} and provides access to the base object and property
- * name to which the expression maps via the getReference() method.
- */
-class ValueExpressionAnalyzer {
-    private ValueExpression expression;
-
-    public ValueExpressionAnalyzer(ValueExpression expression) {
-        this.expression = expression;
-    }
-
-    public ValueReference getReference(ELContext elContext) {
-        InterceptingResolver resolver = new InterceptingResolver(elContext.getELResolver());
-        try {
-            expression.setValue(decorateELContext(elContext, resolver), null);
-        } catch (ELException ele) {
-            return null;
-        }
-        ValueReference reference = resolver.getValueReference();
-        if (reference != null) {
-            Object base = reference.getBase();
-            if (base instanceof CompositeComponentExpressionHolder) {
-                ValueExpression ve = ((CompositeComponentExpressionHolder) base).getExpression(reference.getProperty());
-                if (ve != null) {
-                    this.expression = ve;
-                    reference = getReference(elContext);
-                }
-            }
-        }
-        return reference;
-    }
-
-    private ELContext decorateELContext(final ELContext context, final ELResolver resolver) {
-        return new ELContext() {
-
-            // punch in our new ELResolver
-            @Override
-            public ELResolver getELResolver() {
-                return resolver;
-            }
-
-            // The rest of the methods simply delegate to the existing context
-
-            @Override
-            public Object getContext(Class key) {
-                return context.getContext(key);
-            }
-
-            @Override
-            public Locale getLocale() {
-                return context.getLocale();
-            }
-
-            @Override
-            public boolean isPropertyResolved() {
-                return context.isPropertyResolved();
-            }
-
-            @Override
-            public void putContext(Class key, Object contextObject) {
-                context.putContext(key, contextObject);
-            }
-
-            @Override
-            public void setLocale(Locale locale) {
-                context.setLocale(locale);
-            }
-
-            @Override
-            public void setPropertyResolved(boolean resolved) {
-                context.setPropertyResolved(resolved);
-            }
-
-            @Override
-            public FunctionMapper getFunctionMapper() {
-                return context.getFunctionMapper();
-            }
-
-            @Override
-            public VariableMapper getVariableMapper() {
-                return context.getVariableMapper();
-            }
-        };
-    }
-
-    private static class InterceptingResolver extends ELResolver {
-
-        private ELResolver delegate;
-        private ValueReference valueReference;
-
-        public InterceptingResolver(ELResolver delegate) {
-            this.delegate = delegate;
-        }
-
-        public ValueReference getValueReference() {
-            return valueReference;
-        }
-
-        // Capture the base and property rather than write the value
-        @Override
-        public void setValue(ELContext context, Object base, Object property, Object value) {
-            if (base != null && property != null) {
-                context.setPropertyResolved(true);
-                valueReference = new ValueReference(base, property.toString());
-            }
-        }
-
-        // The rest of the methods simply delegate to the existing context
-
-        @Override
-        public Object getValue(ELContext context, Object base, Object property) {
-            return delegate.getValue(context, base, property);
-        }
-
-        @Override
-        public Class<?> getType(ELContext context, Object base, Object property) {
-            return delegate.getType(context, base, property);
-        }
-
-
-        @Override
-        public boolean isReadOnly(ELContext context, Object base, Object property) {
-            return delegate.isReadOnly(context, base, property);
-        }
-
-        @Override
-        public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
-            return delegate.getFeatureDescriptors(context, base);
-        }
-
-        @Override
-        public Class<?> getCommonPropertyType(ELContext context, Object base) {
-            return delegate.getCommonPropertyType(context, base);
-        }
-
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/validator/ValueReference.java b/jsf-api/src/main/java/javax/faces/validator/ValueReference.java
deleted file mode 100644
index 98b8f45..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/ValueReference.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-class ValueReference {
-    private Object base;
-    private String property;
-
-    public ValueReference(Object base, String property) {
-        this.base = base;
-        this.property = property;
-    }
-
-    public Class getBaseClass() {
-        return base.getClass();
-    }
-
-    public Object getBase() {
-        return base;
-    }
-
-    public String getProperty() {
-        return property;
-    }
-}
\ No newline at end of file
diff --git a/jsf-api/src/main/java/javax/faces/validator/package.html b/jsf-api/src/main/java/javax/faces/validator/package.html
deleted file mode 100644
index d80579e..0000000
--- a/jsf-api/src/main/java/javax/faces/validator/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head>
-    <title>Package Description for "javax.faces.validator"</title>
-</head>
-<body bgcolor="white">
-<p><span class="changed_modified_2_0">Interface</span> defining the
-validator model, and concrete validator implementation classes.</p>
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/view/ActionSource2AttachedObjectHandler.java b/jsf-api/src/main/java/javax/faces/view/ActionSource2AttachedObjectHandler.java
deleted file mode 100644
index 2906a86..0000000
--- a/jsf-api/src/main/java/javax/faces/view/ActionSource2AttachedObjectHandler.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-/**
- * <p class="changed_added_2_0">A VDL handler that exposes {@link
- * javax.faces.event.ActionListener} to a <em>page author</em>.  The
- * default implementation of Facelets must provide an implemention of
- * this in the handler for the <code><f:actionListener></code>
- * tag.</p>
- *
- * @since 2.0
- */
-public interface ActionSource2AttachedObjectHandler extends AttachedObjectHandler {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/ActionSource2AttachedObjectTarget.java b/jsf-api/src/main/java/javax/faces/view/ActionSource2AttachedObjectTarget.java
deleted file mode 100644
index dd6fcbe..0000000
--- a/jsf-api/src/main/java/javax/faces/view/ActionSource2AttachedObjectTarget.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-/**
- * <p class="changed_added_2_0">A marker interface for VDL tags that
- * represent <code><composite:actionSource/></code> for use by the
- * <em>composite component page author</em>.</p>
- *
- * @since 2.0
- */
-public interface ActionSource2AttachedObjectTarget extends AttachedObjectTarget {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/AttachedObjectHandler.java b/jsf-api/src/main/java/javax/faces/view/AttachedObjectHandler.java
deleted file mode 100644
index 78be372..0000000
--- a/jsf-api/src/main/java/javax/faces/view/AttachedObjectHandler.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.view;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">The abstract base interface for a
- * handler representing an <em>attached object</em> in a VDL page.
- * Subinterfaces are provided for the common attached objects that
- * expose {@link javax.faces.component.behavior.Behavior}, {@link
- * javax.faces.convert.Converter}s, {@link
- * javax.faces.validator.Validator}s, {@link
- * javax.faces.event.ValueChangeListener}s, and {@link
- * javax.faces.event.ActionListener}s for use by <em>page
- * authors</em>.</p>
- *
- * @since 2.0
- */
-public interface AttachedObjectHandler {
-
-    /**
-     * <p class="changed_added_2_0">Take the argument
-     * <code>parent</code> and apply this attached object to it.  The
-     * action taken varies with class that implements one of the
-     * subinterfaces of this interface.</p>
-     * @param context The <code>FacesContext</code> for this request
-     * @param parent The <code>UIComponent</code> to which this
-     * particular attached object must be applied.
-     */
-    public void applyAttachedObject(FacesContext context, UIComponent parent);
-
-
-    /**
-     * <p class="changed_added_2_0">Return the value of the "for"
-     * attribute specified by the <em>page author</em> on the tag for
-     * this <code>AttachedObjectHandler</code>.</p>
-     */
-    public String getFor();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/AttachedObjectTarget.java b/jsf-api/src/main/java/javax/faces/view/AttachedObjectTarget.java
deleted file mode 100644
index 8df2bb1..0000000
--- a/jsf-api/src/main/java/javax/faces/view/AttachedObjectTarget.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.view;
-
-import java.util.List;
-import javax.faces.component.UIComponent;
-
-/**
- * <p class="changed_added_2_0">Within the declaration of a
- * <em>composite component</em>, an <code>AttachedObjectTarget</code>
- * allows the <em>composite component author</em> to expose the
- * semantics of an inner component to the <em>page author</em> without
- * exposing the rendering or implementation details of the <em>inner
- * component</em>.  See {@link
- * ViewDeclarationLanguage#getComponentMetadata} for the context in
- * which implementations of this interface are used.</p>
- * 
- * <p class="changed_added_2_0">The implementation must ensure that 
- * this instance is thread safe and may be shared among different component 
- * trees.</p>
-
- * <div class="changed_added_2_0">
-
- * <p>Subinterfaces are provided for the common behavioral interfaces:
- * {@link javax.faces.component.behavior.Behavior}, {@link
- * javax.faces.component.ValueHolder}, {@link
- * javax.faces.component.EditableValueHolder} and {@link
- * javax.faces.component.ActionSource2}.  The default VDL implementation
- * must provide a corresponding Facelets tag handler for each of the
- * subinterfaces of this interface.  </p>
-
- * </div>
- *
- * @since 2.0
- */
-public interface AttachedObjectTarget {
-
-    /**
-     * <p class="changed_added_2_0">The key in the value set of the
-     * <em>composite component <code>BeanDescriptor</code></em>, the
-     * value for which is a
-     * <code>List<AttachedObjectTarget></code>.</p>
-     */
-    public static final String ATTACHED_OBJECT_TARGETS_KEY =
-            "javax.faces.view.AttachedObjectTargets";
-
-
-    /**
-     * <p class="changed_added_2_0">Returns the
-     * <code>List<UIComponent></code> that this
-     * <code>AttachedObjectTarget</code> exposes.  Each <em>attached
-     * object</em> exposed by the <em>composite component author</em>
-     * may point at multiple <code>UIComponent</code> instances within
-     * the composite component.  This method is used by the {@link
-     * javax.faces.view.ViewDeclarationLanguage#retargetAttachedObjects}
-     * method to take the appropriate action on the attached object.</p>
-     *
-     */
-    public List<UIComponent> getTargets(UIComponent topLevelComponent);
-
-
-    /**
-     * <p class="changed_added_2_0">Returns the name by which this
-     * attached object target is exposed to the <em>page
-     * author</em>.</p>
-     * 
-     */
-    public String getName();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/BehaviorHolderAttachedObjectHandler.java b/jsf-api/src/main/java/javax/faces/view/BehaviorHolderAttachedObjectHandler.java
deleted file mode 100644
index fc925ec..0000000
--- a/jsf-api/src/main/java/javax/faces/view/BehaviorHolderAttachedObjectHandler.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-import javax.faces.view.AttachedObjectHandler;
-
-/**
- * <p class="changed_added_2_0">Represent an attached object that is a
- * <code>BehaviorHolder</code> in a VDL page.</p>
- */
-public interface BehaviorHolderAttachedObjectHandler extends AttachedObjectHandler {
-
-    /**
-     * <p class="changed_added_2_0">Return the client event name to
-     * which this behavior applies.</p>
-     *
-     * @since 2.0
-     */
-    public String getEventName();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/BehaviorHolderAttachedObjectTarget.java b/jsf-api/src/main/java/javax/faces/view/BehaviorHolderAttachedObjectTarget.java
deleted file mode 100644
index 08a0b4e..0000000
--- a/jsf-api/src/main/java/javax/faces/view/BehaviorHolderAttachedObjectTarget.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-/**
- * <p class="changed_added_2_0">Represent a <code>BehaviorHolder</code>
- * attached object target in a VDL page.</p>
- */
-public interface BehaviorHolderAttachedObjectTarget extends AttachedObjectTarget {
-
-    public abstract boolean isDefaultEvent();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/EditableValueHolderAttachedObjectHandler.java b/jsf-api/src/main/java/javax/faces/view/EditableValueHolderAttachedObjectHandler.java
deleted file mode 100644
index 33515dc..0000000
--- a/jsf-api/src/main/java/javax/faces/view/EditableValueHolderAttachedObjectHandler.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.view;
-
-/**
- * <p class="changed_added_2_0">A VDL handler that exposes {@link
- * javax.faces.validator.Validator} or {@link
- * javax.faces.event.ValueChangeListener} to a <em>page author</em>.
- * The default implementation of Facelets must provide an implemention
- * of this in the handler for the <code><f:validator></code> (and
- * any tags for any of the standard validators) and
- * <code><f:valueChangeListener></code> tags.</p>
- *
- * @since 2.0
- */
-public interface EditableValueHolderAttachedObjectHandler extends ValueHolderAttachedObjectHandler {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/EditableValueHolderAttachedObjectTarget.java b/jsf-api/src/main/java/javax/faces/view/EditableValueHolderAttachedObjectTarget.java
deleted file mode 100644
index a9081a4..0000000
--- a/jsf-api/src/main/java/javax/faces/view/EditableValueHolderAttachedObjectTarget.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.view;
-
-/**
- * <p class="changed_added_2_0">A marker interface for VDL tags that
- * represent <code><composite:editableValueHolder/></code> for use
- * by the <em>composite component page author</em>.</p>
- *
- * @since 2.0
- */
-public interface EditableValueHolderAttachedObjectTarget extends ValueHolderAttachedObjectTarget {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/Location.java b/jsf-api/src/main/java/javax/faces/view/Location.java
deleted file mode 100644
index fa9a951..0000000
--- a/jsf-api/src/main/java/javax/faces/view/Location.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view;
-
-import java.io.Serializable;
-
-/**
- * <p class="changed_added_2_0">An object that represents the Location
- * of a tag or attribute of a tag in a View Declaration Language
- * file.</p>
- *
- * @since 2.0
- * 
- */
-public class Location implements Serializable {
-
-    private final String path;
-
-    private final int line;
-
-    private final int column;
-
-    public Location(String path, int line, int column) {
-        this.path = path;
-        this.line = line;
-        this.column = column;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the estimated character column.</p>
-     * 
-     */
-    public int getColumn() {
-        return column;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the line number in the page
-     * for this location.</p>
-     * 
-     */
-    public int getLine() {
-        return line;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the file path to the page
-     * represented by this location.</p>
-     * 
-     */
-    public String getPath() {
-        return path;
-    }
-
-    public String toString() {
-        return path + " @" + this.line + "," + this.column;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/StateManagementStrategy.java b/jsf-api/src/main/java/javax/faces/view/StateManagementStrategy.java
deleted file mode 100644
index 1315f1c..0000000
--- a/jsf-api/src/main/java/javax/faces/view/StateManagementStrategy.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">Encapsulate the saving and restoring of
- * the view to enable the VDL to take over the responsibility for
- * handling this feature. Because {@link
- * ViewDeclarationLanguage#getStateManagementStrategy} is required to
- * return <code>null</code> for JSP views and non-<code>null</code> for
- * views authored in Facelets for JSF 2, this specification only applys
- * to Facelets for JSF 2.</p>
- *
- * @since 2.0
- */
-public abstract class StateManagementStrategy {
-
-    
-    /**
-     * <p class="changed_added_2_0">Return the state of the current view
-     * in an <code>Object</code> that implements
-     * <code>Serializable</code>.  The default implementation must
-     * perform the following algorithm or its semantic equivalent.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * 	<ol>
-
-	  <li><p>If the <code>UIViewRoot</code> of the current view is
-	  marked <code>transient</code>, return <code>null</code>
-	  immediately.  </p></li>
-
-	<li><p>Traverse the view and verify that each of the client ids
-	are unique.  Throw <code>IllegalStateException</code> if more
-	than one client id are the same.</p></li>
-
-	  <li><p>Visit the tree using {@link
-	  javax.faces.component.UIComponent#visitTree}.  For each node,
-	  call {@link javax.faces.component.UIComponent#saveState},
-	  saving the returned <code>Object</code> in a way such that it
-	  can be restored given only its client id.  Special care must
-	  be taken to handle the case of components that were added or
-	  deleted programmatically during this lifecycle traversal,
-	  rather than by the VDL.  </p></li>
-
-	</ol>
-
-     * <p>The implementation must ensure that the {@link
-     * javax.faces.component.UIComponent#saveState} method is called for
-     * each node in the tree.</p>
-
-     * <p>The data structure used to save the state obtained by
-     * executing the above algorithm must be <code>Serializable</code>,
-     * and all of the elements within the data structure must also be
-     * <code>Serializable</code>.</p>
-
-     * </div>
-
-     * @param context the <code>FacesContext</code> for this request.
-     *
-     * @since 2.0
-     */
-
-    public abstract Object saveView(FacesContext context);
-    
-    /**
-     * <p class="changed_added_2_0">Restore the state of the view with
-     * information in the request.  The default implementation must
-     * perform the following algorithm or its semantic equivalent.</p>
-     *
-     * <div class="changed_added_2_0">
-
-     * 	<ol>
-
-	  <li><p>Build the view from the markup.  For all components in
-	  the view that do not have an explicitly assigned id in the
-	  markup, the values of those ids must be the same as on an
-	  initial request for this view.  This view will not contain
-	  any components programmatically added during the previous
-	  lifecycle run, and it <b>will</b> contain components that were
-	  programmatically deleted on the previous lifecycle run.  Both
-	  of these cases must be handled.</p></li>
-
-	  <li><p>Call {@link
-	  javax.faces.render.ResponseStateManager#getState} to obtain
-	  the data structure returned from the previous call to {@link
-	  #saveView}.</p></li>
-
-	  <li><p>Visit the tree using {@link
-	  javax.faces.component.UIComponent#visitTree}.  For each node,
-	  call {@link javax.faces.component.UIComponent#restoreState},
-	  passing the state saved corresponding to the current client
-	  id.</p></li>
-
-	  <li><p>Ensure that any programmatically deleted components are
-	  removed.</p></li>
-
-	  <li><p>Ensure any programmatically added components are added.
-	  </p></li>
-
-	</ol>
-
-     * <p>The implementation must ensure that the {@link
-     * javax.faces.component.UIComponent#restoreState} method is called
-     * for each node in the tree, except for those that were
-     * programmatically deleted on the previous run through the
-     * lifecycle.</p>
-
-     * </div>
-     *
-     * @param context the <code>FacesContext</code> for this request
-
-     * @param viewId the view identifier for which the state should be restored
-
-     * @param renderKitId the render kit id for this state.
-
-     * @since 2.0
-     */
-
-    public abstract UIViewRoot restoreView(FacesContext context, String viewId,
-                                           String renderKitId);
-
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/ValueHolderAttachedObjectHandler.java b/jsf-api/src/main/java/javax/faces/view/ValueHolderAttachedObjectHandler.java
deleted file mode 100644
index 86ce118..0000000
--- a/jsf-api/src/main/java/javax/faces/view/ValueHolderAttachedObjectHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.view;
-
-/**
- * <p class="changed_added_2_0">A VDL handler that exposes {@link
- * javax.faces.convert.Converter} to a <em>page author</em>.  The
- * default implementation of Facelets must provide an implemention of
- * this in the handler for the <code><f:converter></code> (and any
- * tags for any of the standard converters) tags.</p>
- *
- * @since 2.0
- */
-public interface ValueHolderAttachedObjectHandler extends AttachedObjectHandler {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/ValueHolderAttachedObjectTarget.java b/jsf-api/src/main/java/javax/faces/view/ValueHolderAttachedObjectTarget.java
deleted file mode 100644
index 7a34402..0000000
--- a/jsf-api/src/main/java/javax/faces/view/ValueHolderAttachedObjectTarget.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package javax.faces.view;
-
-/**
- * <p class="changed_added_2_0">A marker interface for VDL tags that
- * represent <code><composite:valueHolder/></code> for use by the
- * <em>composite component page author</em>.</p>
- *
- * @since 2.0
- */
-public interface ValueHolderAttachedObjectTarget extends AttachedObjectTarget {
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/ViewDeclarationLanguage.java b/jsf-api/src/main/java/javax/faces/view/ViewDeclarationLanguage.java
deleted file mode 100644
index 9524b4e..0000000
--- a/jsf-api/src/main/java/javax/faces/view/ViewDeclarationLanguage.java
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-import java.beans.BeanInfo;
-import java.io.IOException;
-import java.util.List;
-import javax.faces.application.Resource;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">The contract that a view declaration
- * language must implement to interact with the JSF runtime.  An
- * implementation of this class must be thread-safe.</p>
- *
- * <div class="changed_added_2_0">
- * 
- * <p>Instances of this class are application scoped and must be
- * obtained from the {@link ViewDeclarationLanguageFactory}.</p>
-
- * </div>
- * 
- * @since 2.0
- * 
- */
-public abstract class ViewDeclarationLanguage {
-
-    /**
-     * <p class="changed_added_2_0">Return a reference to the component
-     * metadata for the composite component represented by the argument
-     * <code>componentResource</code>, or <code>null</code> if the
-     * metadata cannot be found.  See section JSF.7.6.2 for the
-     * specification of the default implementation. JSP implementations
-     * must throw <code>UnsupportedOperationException</code>.</p>
-     *
-     * @param context The <code>FacesContext</code> for this request.
-     * @param componentResource The <code>Resource</code> that represents the component.
-     * @since 2.0
-     *
-     * @throws NullPointerException if any of the arguments are
-     * <code>null</code>.
-     *
-     * @throws javax.faces.FacesException if there is an error in
-     * obtaining the metadata
-     *
-     * @throws UnsupportedOperationException if this is a JSP VDL
-     * implementation.
-     */
-    public abstract BeanInfo getComponentMetadata(FacesContext context, Resource componentResource);
-
-
-    /**
-     * <p class="changed_added_2_0">Return a reference to the view
-     * metadata for the view represented by the argument
-     * <code>viewId</code>, or <code>null</code> if the metadata cannot
-     * be found.  See section JSF.7.6.2 for the specification of the
-     * default implementation.  Facelets for JSF 2 implementation must
-     * return non-<code>null</code>. JSP implementations must return
-     * <code>null</code>.</p>
-     *
-     * @param context The <code>FacesContext</code> for this request.
-     * @param viewId the view id from whith to extract the metadata
-     * @since 2.0
-     *
-     * @throws NullPointerException if any of the arguments are
-     * <code>null</code>.
-     *
-     * @throws javax.faces.FacesException if there is an error in
-     * obtaining the metadata
-     */
-    public abstract ViewMetadata getViewMetadata(FacesContext context, String viewId);
-
-
-    /**
-     * <p class="changed_added_2_0">Take implementation specific action
-     * to discover a <code>Resource</code> given the argument
-     * <code>componentResource</code>.  See section JSF.7.6.2 for the
-     * specification of the default implementation.  JSP implementations
-     * must throw <code>UnsupportedOperationException</code>.</p>
-     *
-     * @param context The <code>FacesContext</code> for this request.
-     * @param componentResource The <code>Resource</code> that represents the component.
-     * @since 2.0
-     *
-     * @throws NullPointerException if any of the arguments are
-     * <code>null</code>.
-     *
-     * @throws javax.faces.FacesException if there is an error in
-     * obtaining the script component resource
-     * @throws UnsupportedOperationException if this is a JSP VDL
-     * implementation.
-     */
-    public abstract Resource getScriptComponentResource(FacesContext context,
-                                                        Resource componentResource);
-    
-    
-    /**
-     * <p class="changed_added_2_0">Create a <code>UIViewRoot</code>
-     * from the VDL contained in the artifact referenced by the argument
-     * <code>viewId</code>.  See section JSF.7.6.2 for the specification of
-     * the default implementation.</p>
-     *
-     * @param context the <code>FacesContext</code> for this request.
-     * @param viewId the identifier of an artifact that contains the VDL
-     * syntax that describes this view.
-     *
-     * @throws NullPointerException if any of the arguments are
-     * <code>null</code>
-
-     * @since 2.0
-     */
-
-    public abstract UIViewRoot createView(FacesContext context,
-                                 String viewId);
-    
-    /**
-     * <p class="changed_added_2_0">Restore a <code>UIViewRoot</code>
-     * from a previously created view.  See section JSF.7.6.2 for the
-     * specification of the default implementation.</p>
-     *
-     * @param context the <code>FacesContext</code> for this request.
-     * @param viewId the identifier for a previously rendered view.
-     *
-     * @throws NullPointerException if any of the arguments are
-     * <code>null</code>
-     */
-    public abstract UIViewRoot restoreView(FacesContext context, String viewId);
-
-
-    /**
-     * <p class="changed_added_2_0">Assuming the component metadata for
-     * argument <code>topLevelComponent</code> has been made available
-     * by an earlier call to {@link
-     * ViewDeclarationLanguage#getComponentMetadata}, leverage the
-     * component metadata for the purpose of re-targeting attached
-     * objects from the top level composite component to the individual
-     * {@link AttachedObjectTarget} instances inside the composite
-     * component.  This method must be called by the {@link
-     * ViewDeclarationLanguage} implementation when creating the
-     * <code>UIComponent</code> tree when a composite component usage is
-     * encountered.</p>
-     *
-     * <div class="changed_added_2_0">
-     *
-     * <p>An algorithm semantically equivalent to the following must be
-     * implemented.</p>
-     *
-     *<ul>
-     *
-     *<li><p>Obtain the metadata for the composite component.
-     *Currently this entails getting the value of the {@link
-     *UIComponent#BEANINFO_KEY} component attribute, which will be
-     *an instance of <code>BeanInfo</code>.  If the metadata cannot
-     *be found, log an error message and return.</p></li>
-     *
-     *<li><p>Get the <code>BeanDescriptor</code> from the
-     *<code>BeanInfo</code>.</p></li>
-     *
-     *<li><p>Get the value of the {@link
-     *AttachedObjectTarget#ATTACHED_OBJECT_TARGETS_KEY} from the
-     *<code>BeanDescriptor</code>'s <code>getValue()</code> method.
-     *This will be a <code>List<{@link
-     *AttachedObjectTarget}></code>.  Let this be
-     *<em>targetList</em>.</p></li>
-     *
-     *<li><p>For each <em>curHandler</em> entry in the argument
-     *<code>handlers</code></p>
-     *
-     *<ul>
-     *
-     *<li><p>Let <em>forAttributeValue</em> be the return from
-     *{@link AttachedObjectHandler#getFor}.  </p></li>
-     *
-     *<li><p>For each <em>curTarget</em> entry in
-     *<em>targetList</em>, the first of the following items that
-     *causes a match will take this action:</p>
-     *
-     *<p style="margin-left: 3em;">For each <code>UIComponent</code> in the
-     *list returned from <em>curTarget.getTargets()</em>, call
-     *<em>curHandler.<a
-     *href="AttachedObjectHandler.html#applyAttachedObject">applyAttachedObject()</a></em>,
-     *passing the <code>FacesContext</code> and the
-     *<code>UIComponent</code>.</p>
-     *
-     *<p>and cause this inner loop to terminate.</p>
-     *
-     *<ul>
-     *
-     *<li><p>If <em>curHandler</em> is an instance of {@link
-     *ActionSource2AttachedObjectHandler} and <em>curTarget</em> is an
-     *instance of {@link ActionSource2AttachedObjectTarget}, and
-     *<em>curTarget.getName()</em> is equal to <em>curTargetName</em>,
-     *consider it a match.</p></li>
-     *
-     *<li><p>If <em>curHandler</em> is an instance of {@link
-     *EditableValueHolderAttachedObjectHandler} and <em>curTarget</em>
-     *is an instance of {@link EditableValueHolderAttachedObjectTarget},
-     *and <em>curTarget.getName()</em> is equal to
-     *<em>curTargetName</em>, consider it a match.</p></li>
-     *
-     *<li><p>If <em>curHandler</em> is an instance of {@link
-     *ValueHolderAttachedObjectHandler} and <em>curTarget</em> is an
-     *instance of {@link ValueHolderAttachedObjectTarget}, and
-     *<em>curTarget.getName()</em> is equal to <em>curTargetName</em>,
-     *consider it a match.</p></li>
-
-     *<li><p>If <em>curHandler</em> is an instance of {@link
-     *BehaviorHolderAttachedObjectHandler} and <em>curTarget</em> is an
-     *instance of {@link BehaviorHolderAttachedObjectTarget}, and either
-     *of the following conditions are true,</p>
-
-     * <ul>
-     *
-     * <li><em>curHandler.getEventName()</em> is not <code>null</code>
-     * and is equal to <em>curTargetName</em>.</li>
-     *
-     * <li><em>curHandler.getEventName()</em> is <code>null</code> and
-     * <em>curTarget.isDefaultEvent()</em> is <code>true</code>.</li>
-     *
-     * </ul>
-
-     *<p>consider it a match.</p></li>
-
-     *</ul>
-     *</li>
-     *</ul>
-     *</li>
-     *</ul>
-
-     * <p>The implementation must support retargeting attached objects
-     * from the top level compsite component to targets that are
-     * composite and non-composite components.</p>
-     *
-     * <p>An implementation is provided that will throw
-     * <code>UnsupportedOperationException</code>.  A Faces implementation
-     * compliant with version 2.0 and beyond of the specification must 
-     * override this method.</p>
-     *
-     * </div>
-     *
-     * @param context the FacesContext for this request.
-     *
-     * @param topLevelComponent The UIComponent in the view to which the
-     * attached objects must be attached.  This UIComponent must have
-     * its component metadata already associated and available from via
-     * the JavaBeans API.
-     *
-     * @throws NullPointerException if any of the arguments are
-     * <code>null</code>.
-
-     * @since 2.0
-     *
-     */
-    public void retargetAttachedObjects(FacesContext context,
-                                        UIComponent topLevelComponent,
-                                        List<AttachedObjectHandler> handlers)  {
-        
-        // no-op
-
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Assuming the component metadata for
-     * argument <code>topLevelComponent</code> has been made available
-     * by an earlier call to {@link
-     * ViewDeclarationLanguage#getComponentMetadata}, leverage the
-     * component metadata for the purpose of re-targeting any method
-     * expressions from the top level component to the appropriate inner
-     * component.  For each attribute that is a
-     * <code>MethodExpression</code> (as indicated by the presence of a
-     * "<code>method-signature</code>" attribute and the absence of a
-     * "<code>type</code>" attribute), the following action must be
-     * taken:</p>
-
-     * <div class="changed_added_2_0">
-     *
-     * <ul>
-     *
-     * <li><p>Get the value of the <em>targets</em> attribute.  If the
-     * value is a <code>ValueExpression</code> evaluate it.  If there is
-     * no <em>targets</em> attribute, let the name of the metadata
-     * element be the evaluated value of the <em>targets
-     * attribute.</em></p></li>
-     * 
-     * <li><p>Interpret <em>targets</em> as a space (not tab) separated
-     * list of ids. For each entry in the list:</p>
-     * 
-     * <ul>
-     *
-     * <li><p>Find the inner component of the
-     * <em>topLevelComponent</em> with the id equal to
-     * the current list entry.  For discussion, this component is called
-     * <em>target</em>.  If not found, log and error and continue to
-     * the next attribute.</p></li>
-     *
-     * <li><p>For discussion the declared name of the attribute is
-     * called <em>name</em>.</p></li>
-     *
-     * <li><p>In the attributes map of the
-     * <em>topLevelComponent</em>, look up the entry under the key
-     * <em>name</em>.  Assume the result is a
-     * <code>ValueExpression</code>.  For discussion, this is
-     * <em>attributeValueExpression</em>.  If not found, log an error
-     * and continue to the next attribute.</p></li>
-     *
-     * <li><p>If <em>name</em> is equal to the string "action", or
-     * "actionListener" without the quotes, assume <em>target</em> is
-     * an {@link javax.faces.component.ActionSource2}.</p></li>
-     *
-     * <li><p>If <em>name</em> is equal to the string "validator", or
-     * "valueChangeListener" without the quotes, assume
-     * <em>target</em> is an {@link
-     * javax.faces.component.EditableValueHolder}.</p></li>
-     *
-     * <li><p>Call <code>getExpressionString()</code> on the
-     * <em>attributeValueExpression</em> and use that string to
-     * create a <code>MethodExpression</code> of the appropriate
-     * signature for <em>name</em>.</p></li>
-     *
-     * <li><p>If <em>name</em> is not equal to any of the previously
-     * listed strings, call <code>getExpressionString()</code> on the
-     * <em>attributeValueExpression</em> and use that string to
-     * create a <code>MethodExpression</code> where the signature is
-     * created based on the value of the
-     * "<code>method-signature</code>" attribute of the
-     * <code><composite:attribute /></code> tag.</p></li>
-     *
-     * <li><p>Let the resultant <code>MethodExpression</code> be
-     * called <em>attributeMethodExpression</em> for discussion.
-     * </p></li>
-     *
-     * <li><p>If <em>name</em> is equal to the string "action"
-     * without the quotes, call {@link
-     * javax.faces.component.ActionSource2#setActionExpression} on
-     * <em>target</em>, passing <em>attributeMethodExpression</em>.</p></li>
-     *
-     * <li><p>If <em>name</em> is equal to the string
-     * "actionListener" without the quotes, call {@link
-     * javax.faces.component.ActionSource#addActionListener} on
-     * <em>target</em>, passing <em>attributeMethodExpression</em>
-     * wrapped in a {@link javax.faces.event.MethodExpressionActionListener}.</p></li>
-     *
-     * <li><p>If <em>name</em> is equal to the string
-     * "validator" without the quotes, call {@link
-     * javax.faces.component.EditableValueHolder#addValidator} on <em>target</em>,
-     * passing <em>attributeMethodExpression</em> wrapped in a {@link
-     * javax.faces.validator.MethodExpressionValidator}.</p></li>
-     *
-     * <li><p>If <em>name</em> is equal to the string
-     * "valueChangeListener" without the quotes, call {@link
-     * javax.faces.component.EditableValueHolder#addValueChangeListener} on
-     * <em>target</em>, passing <em>attributeMethodExpression</em> wrapped in a
-     * {@link javax.faces.event.MethodExpressionValueChangeListener}.</p></li>
-     *
-     * <li><p>Otherwise, assume that the <code>MethodExpression</code>
-     * should be placed in the components attribute set.  The runtme
-     * must create the <code>MethodExpression</code> instance based on
-     * the value of the "<code>method-signature</code>"
-     * attribute.</p></li>
-
-     * </ul>
-     * 
-     * </li>
-     * 
-     * </ul>
-     *
-     * <p>An implementation is provided that will throw
-     * <code>UnsupportedOperationException</code>.  A Faces implementation
-     * compliant with version 2.0 and beyond of the specification must 
-     * override this method.</p>
-     *
-     * </div>
-     *
-     * @param context the FacesContext for this request.
-     *
-     * @param topLevelComponent The UIComponent in the view to which the
-     * attached objects must be attached.  This UIComponent must have
-     * its component metadata already associated and available from via
-     * the JavaBeans API.
-     *
-     * @throws NullPointerException if <code>context</code>
-     * or <code>topLevelComponent</code> is <code>null</code>.
-     *
-     * @since 2.0
-     */
-    public void retargetMethodExpressions(FacesContext context,
-                                          UIComponent topLevelComponent) {
-
-        // no-op
-        
-    }
-
-    /**
-     * <p class="changed_added_2_0">Take any actions specific to this
-     * VDL implementation to cause the argument <code>UIViewRoot</code>
-     * which must have been created via a call to {@link #createView},
-     * to be populated with children.</p>
-
-     * <div class="changed_added_2_0">
-
-     * <p>The Facelets implementation must insure that markup comprising
-     * the view must be executed, with the {@link
-     * javax.faces.component.UIComponent} instances in the view being
-     * encountered in the same depth-first order as in other lifecycle
-     * methods defined on <code>UIComponent</code>, and added to the
-     * view (but not rendered) during the traversal. The runtime must
-     * guarantee that the view must be fully populated before any of the
-     * following happen.</p>
-
-     * <ul>
-     *
-     * <li><p>The {@link javax.faces.event.PhaseListener#afterPhase}
-     * method of any <code>PhaseListener</code>s attached to the
-     * application is called</p></li>
-
-     * <li><p>The {@link javax.faces.component.UIViewRoot} phase
-     * listener installed via {@link
-     * javax.faces.component.UIViewRoot#setAfterPhaseListener} or {@link
-     * javax.faces.component.UIViewRoot#addPhaseListener} are called.</p></li>
-     *
-     * </ul>
-
-     * <p>The implementation must take no action if the argument
-     * <code>root</code> already has non-metadata children.  See section
-     * JSF.7.6.2.3 for the view metadata specification.</p>
-
-     * </div>
-
-     * @param context the <code>FacesContext</code> for this request
-
-     * @param root the <code>UIViewRoot</code> to populate with children
-     * using techniques specific to this VDL implementation.
-     */
-    public abstract void buildView(FacesContext context, UIViewRoot root)
-    throws IOException;
-
-    
-    /**
-     * <p class="changed_added_2_0">Render a view rooted at
-     * argument<code>view</code>. See section JSF.7.6.2 for the
-     * specification of the default implementation.</p>
-     *
-     * @param context the <code>FacesContext</code> for this request.
-     * @param view the <code>UIViewRoot</code> from an early call to
-     * {@link #createView} or {@link #restoreView}.
-     *
-     * @throws NullPointerException if any of the arguments are
-     * <code>null</code>
-     */
-    public abstract void renderView(FacesContext context,
-                                    UIViewRoot view)
-    throws IOException;
-    
-    /**
-     * <p class="changed_added_2_0">For implementations that want to
-     * control the implementation of state saving and restoring, the
-     * {@link StateManagementStrategy} allows them to do so.  Returning
-     * <code>null</code> indicates that the implementation wishes the
-     * runtime to handle the state saving and restoring.
-     * Implementations that provide the VDL for Facelets for JSF 2.0 and
-     * later must return non-<code>null</code> from this method.</p>
-     *
-     *
-     * @since 2.0
-     */ 
-
-    public abstract StateManagementStrategy getStateManagementStrategy(FacesContext context,
-            String viewId);
-    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/ViewDeclarationLanguageFactory.java b/jsf-api/src/main/java/javax/faces/view/ViewDeclarationLanguageFactory.java
deleted file mode 100644
index fca9fdc..0000000
--- a/jsf-api/src/main/java/javax/faces/view/ViewDeclarationLanguageFactory.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-import javax.faces.FacesWrapper;
-
-/**
- * <p class="changed_added_2_0"><strong>ViewDeclarationLanguageFactory</strong>
- * is a factory object that creates (if needed) and returns a new {@link
- * ViewDeclarationLanguage} instance based on the VDL found in a specific
- * view.</p>
- *
- * <div class="changed_added_2_0">
- * 
- * <p>There must be one <code>ViewDeclarationLanguageFactory</code> instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- *
- * <pre><code>
- *   ViewDeclarationLanguageFactory factory = (ViewDeclarationLanguageFactory)
- *    FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
- * </code></pre>
- *
-
- * </div>
- *
- * @since 2.0
- */
-
-public abstract class ViewDeclarationLanguageFactory implements FacesWrapper<ViewDeclarationLanguageFactory> {
-
-
-    /**
-     * <p class="changed_added_2_0">If this factory has been decorated, the 
-     * implementation doing the decorating may override this method to provide
-     * access to the implementation being wrapped.  A default implementation
-     * is provided that returns <code>null</code>.</p>
-     */
-    public ViewDeclarationLanguageFactory getWrapped() {
-        return null;
-    }
-
-    
-    /**
-     * <p class="changed_added_2_0">Return the
-     * <code>ViewDeclarationLanguage</code> instance suitable for
-     * handling the VDL contained in the page referenced by the argument
-     * <code>viewId</code>.  The default implementation must return a
-     * valid <code>ViewDeclarationLanguage</code> instance for views
-     * written in either JSP or Facelets for JSF 2.</p>
-     * 
-     * @param viewId the viewId to be inspected for an appropriate 
-     * <code>ViewDeclarationLanguage</code> implementation for the VDL used
-     * in the view.
-     * 
-     * @since 2.0
-     * 
-     * @throws NullPointerException if <code>viewId</code> is null.
-     * 
-     */
-    public abstract ViewDeclarationLanguage getViewDeclarationLanguage(String viewId);
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/ViewMetadata.java b/jsf-api/src/main/java/javax/faces/view/ViewMetadata.java
deleted file mode 100644
index 9770d35..0000000
--- a/jsf-api/src/main/java/javax/faces/view/ViewMetadata.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.List;
-import javax.faces.component.UIViewParameter;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0"/> <code>ViewMetadata</code> is
- * reponsible for extracting and providing view parameter metadata from
- * VDL views.  Because {@link ViewDeclarationLanguage#getViewMetadata}
- * is required to return <code>null</code> for JSP views and
- * non-<code>null</code> for views authored in Facelets for JSF 2, this
- * specification only applys to Facelets for JSF 2.  </p>
- *
- * @since 2.0
- */
-public abstract class ViewMetadata {
-
-
-    /**
-     * <p class="changed_added_2_0"/>
-     * @return the view ID for which this <code>ViewMetadata</code> instance
-     *  was created
-     */
-    public abstract String getViewId();
-
-
-    /**
-     * <p class="changed_added_2_0"> Creates a new {@link UIViewRoot}
-     * containing only view parameter metadata.  The processing of
-     * building this <code>UIViewRoot</code> with metadata should not
-     * cause any events to be published to the application.  The
-     * implementation must call {@link FacesContext#setProcessingEvents}
-     * passing <code>false</code> as the argument, at the beginning of
-     * the method, and pass <code>true</code> to the same method at the
-     * end.  The implementation must ensure that this happens regardless
-     * of ant exceptions that may be thrown.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @return a <code>UIViewRoot</code> containing only view parameter metadata
-     *  (if any)
-     */
-    public abstract UIViewRoot createMetadataView(FacesContext context);
-
-
-    /**
-     * <p class="changed_added_2_0"> Utility method to extract view
-     * metadata from the provided {@link UIViewRoot}.  </p>
-     *
-     * @param root the {@link UIViewRoot} from which the metadata will
-     * be extracted from
-     *
-     * @return a <code>Collection</code> of {@link UIViewParameter}
-     * instances.  If the view has no metadata, the collection will be
-     * empty.
-     */
-    public static Collection<UIViewParameter> getViewParameters(UIViewRoot root) {
-
-        Collection<UIViewParameter> params;
-        UIComponent metadataFacet = root.getFacet(UIViewRoot.METADATA_FACET_NAME);
-
-        if (metadataFacet == null) {
-            params = Collections.emptyList();
-        } else {
-            params = new ArrayList<UIViewParameter>();
-            List<UIComponent> children = metadataFacet.getChildren();
-            int len = children.size();
-            for (int i = 0; i < len; i++) {
-                UIComponent c = children.get(i);
-                if (c instanceof UIViewParameter) {
-                    params.add((UIViewParameter) c);
-                }
-            }
-        }
-
-        return params;
-
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/AttributeHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/AttributeHandler.java
deleted file mode 100644
index c3a3fc7..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/AttributeHandler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package javax.faces.view.facelets;
-
-
-/**
- * <p class="changed_added_2_0">An interface that allows other code 
- * to identify FaceletHandlers that correspond to component attributes.</p>
- *
- * @since 2.0
- */
-public interface AttributeHandler {
-
-    /**
-     * <p class="changed_added_2_0">Returns the resolved literal String value 
-     * of the attribute name after evaluating EL.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-     */
-    public String getAttributeName(FaceletContext ctx);
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/BehaviorConfig.java b/jsf-api/src/main/java/javax/faces/view/facelets/BehaviorConfig.java
deleted file mode 100644
index 3ed4b69..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/BehaviorConfig.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.view.facelets.TagConfig;
-
-/**
- * <p class="changed_added_2_0">Convey the id of a behavior declared in
- * a view.</p>
- *
- * @since 2.0
- */
-public interface BehaviorConfig extends TagConfig {
-
-    /**
-     * <p>Return the value of the behavior-id.</p>
-     *
-     * @since 2.0
-     */
-    public String getBehaviorId();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/BehaviorHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/BehaviorHandler.java
deleted file mode 100644
index 0b949f8..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/BehaviorHandler.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.view.BehaviorHolderAttachedObjectHandler;
-
-/**
- * <p class="changed_added_2_0">The {@link FaceletHandler} that
- * corresponds to attached objects that represent an instance of {@link
- * javax.faces.component.behavior.ClientBehavior} that must be added to
- * the parent component, which must implement {@link
- * javax.faces.component.behavior.ClientBehaviorHolder}, with a call to
- * {@link
- * javax.faces.component.behavior.ClientBehaviorHolder#addClientBehavior}.
- * The current specification defines one Facelet element for this sort
- * of attached object, <code><f:ajax></code>.</p>
- */ 
-
-public class BehaviorHandler extends FaceletsAttachedObjectHandler implements BehaviorHolderAttachedObjectHandler {
-
-    private final TagAttribute event;
-    
-    private String behaviorId;
-
-    private TagHandlerDelegate helper;
-
-    public BehaviorHandler(BehaviorConfig config) {
-        super(config);
-        this.behaviorId = config.getBehaviorId();
-        this.event = this.getAttribute("event");
-        if (null != event && !event.isLiteral()){
-            throw new TagException(this.tag, "The 'event' attribute for behavior tag must be a literal");
-        }
-    }
-    
-    public TagAttribute getEvent() {
-        return this.event;
-    }
-    
-    public String getEventName() {
-        if (null != getEvent()) {
-            return getEvent().getValue();
-        }
-        return null;
-    }
-    
-    @Override
-    protected TagHandlerDelegate getTagHandlerDelegate() {
-        if (null == helper) {
-            helper = delegateFactory.createBehaviorHandlerDelegate(this);
-        }
-        return helper;
-    }
-
-    public String getBehaviorId() {
-        return behaviorId;
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/ComponentConfig.java b/jsf-api/src/main/java/javax/faces/view/facelets/ComponentConfig.java
deleted file mode 100644
index 158408e..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/ComponentConfig.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-/**
- * <p class="changed_added_2_0">Passed to the constructor of {@link
- * ComponentHandler}.  Represents a component-type/renderer-type
- * pair.</p>
- *
- * @since 2.0
- * 
- */
-public interface ComponentConfig extends TagConfig {
-    /**
-     * <p class="changed_added_2_0">ComponentType to pass to the
-     * <code>Application</code>. Cannot be <code>null</code>.
-     * 
-     * @since 2.0
-     */
-    public String getComponentType();
-
-    /**
-     * <p class="changed_added_2_0">RendererType to set on created
-     * <code>UIComponent</code> instances.
-     *
-     * @since 2.0
-     */
-    public String getRendererType();
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/ComponentHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/ComponentHandler.java
deleted file mode 100644
index 944bb40..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/ComponentHandler.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIPanel;
-
-
-/**
- * <p class="changed_added_2_0">Public base class for markup element
- * instances that map to {@link UIComponent} instances in the view.</p>
- *
- * <div class="changed_added_2_0">
- *
- * <p>The implementation must guarantee that the <code>apply()</code>
- * method is overridden and takes the following actions, in this order.
- * These actions must only happen the first time this facelet is applied
- * for each user.  Subsequent applications must take no action.</p>
-
- * <ol>
-
- * 	  <li><p>The <code>UIComponent</code> represented by this
- * 	  element is created with the appropriate
- * 	  <code>Application.createComponent()</code> method.  </p></li>
-
-	  <li><p>Each attribute specified in the markup is correctly
-	  applied to the component instance, as specified in the VDLDocs
-	  for this element.  </p></li>
-
-	  <li><p>If project stage is #{@link javax.faces.application.ProjectStage#Development},
-      Put the {@link javax.faces.view.Location} for this
-	  element into the component attribute <code>Map</code> under
-	  the key given by the value of the symbolic constant {@link
-	  javax.faces.component.UIComponent#VIEW_LOCATION_KEY}.
-	  </p></li>
-
-	  <li><p>Set the id of the component.  If the id is specified
-	  manually by the page author, that value must be set as the id.
-	  Otherwise, the closest ancestor component that is an instance
-	  of {@link javax.faces.component.UniqueIdVendor} must be
-	  located and its {@link
-	  javax.faces.component.UniqueIdVendor#createUniqueId} method
-	  must be called to derive the id.  If no such instance can be
-	  found, call {@link
-	  javax.faces.component.UIViewRoot#createUniqueId} to derive the
-	  id.</p></li>
-
-	  <li><p>The rendererType property of the component is set properly.
-	  </p></li>
-
-	  <li><p>{@link #onComponentCreated} is called.
-	  </p></li>
-
-	  <li><p>{@link UIComponent#pushComponentToEL} is called on the
-	  newly created component.</p></li>
-
-	  <li><p>The next handler in the facelet chain is applied.  This
-	  will cause the component to be populated with children.
-	  </p></li>
-
-	  <li><p>The component is added to its parent in the view.
-	  </p></li>
-
-	  <li><p>{@link UIComponent#popComponentFromEL} is called on the
-	  newly created component.</p></li>
-
-	  <li><p>Call {@link UIComponent#markInitialState}.
-	  </p></li>
-
- * </ol>
- *
- * </div>
- *
- * @since 2.0
- */
-public class ComponentHandler extends DelegatingMetaTagHandler {
-    
-    private TagHandlerDelegate helper = null;
-    private ComponentConfig componentConfig = null;
-
-    /**
-     * <p class="changed_added_2_0">Leverage the {@link
-     * TagHandlerDelegateFactory} provided by the implementation to create
-     * an instance of {@link TagHandlerDelegate} designed for use with
-     * <code>ComponentHandler</code>.</p>
-     *
-     * @since 2.0
-     */ 
-    public ComponentHandler(ComponentConfig config) {
-        super(config);
-        this.componentConfig = config;
-    }
-    
-    @Override
-    protected TagHandlerDelegate getTagHandlerDelegate() {
-        if (null == helper) {
-            helper = delegateFactory.createComponentHandlerDelegate(this);
-        }
-        return helper;
-    }
-    
-    public ComponentConfig getComponentConfig() {
-        return this.componentConfig;
-    }
-    
-    
-    /**
-     * <p class="changed_added_2_0">This method is guaranteed to be
-     * called after the component has been created but before it has
-     * been populated with children.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-
-     * @param c the <code>UIComponent</code> that has just been created.
-     *
-     * @param parent the parent <code>UIComponent</code> of the
-     * component represented by this element instance.
-     *
-     * @since 2.0
-     */
-    public void onComponentCreated(FaceletContext ctx, UIComponent c, 
-            UIComponent parent) {
-        
-    }
-    
-    /**
-     * <p class="changed_added_2_0">This method is guaranteed to be
-     * called after the component has been populated with children.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-
-     * @param c the <code>UIComponent</code> that has just been
-     * populated with children.
-     *
-     * @param parent the parent <code>UIComponent</code> of the
-     * component represented by this element instance.
-     *
-     * @since 2.0
-     */
-    public void onComponentPopulated(FaceletContext ctx, UIComponent c, 
-            UIComponent parent) {
-        
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Determine if the passed component is 
-     * not null and if it's new to the tree.  This operation can be used for determining if attributes
-     * should be wired to the component.</p>
-     * 
-     * @param component the component you wish to modify
-     * @since 2.0
-     */
-    public static boolean isNew(UIComponent component) {
-        
-        UIComponent c = component;
-        if (c != null) {
-            UIComponent parent = c.getParent();
-            if (parent != null) {
-                if (UIComponent.isCompositeComponent(parent)) {
-                    c = parent;
-                }
-            }
-            return c.getParent() == null;
-        } else {
-            return false;
-        }
-
-    }
-
-    
-    
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/CompositeFaceletHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/CompositeFaceletHandler.java
deleted file mode 100644
index 8f3545e..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/CompositeFaceletHandler.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import java.io.IOException;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-
-
-/**
- * <p class="changed_added_2_0">A FaceletHandler that is derived of 1 or
- * more, inner FaceletHandlers. This class would be found if the next
- * FaceletHandler is structually, a body with multiple child elements as
- * defined in XML.  This class enables the Facelet runtime to traverse
- * the tree of {@link FaceletHandler} instances built by the Facelets
- * compiler.</p>
- *
- */
-public final class CompositeFaceletHandler implements FaceletHandler {
-
-    private final FaceletHandler[] children;
-    private final int len;
-
-    public CompositeFaceletHandler(FaceletHandler[] children) {
-        this.children = children;
-        this.len = children.length;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Calls apply on any child handlers.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-     *
-     * @param parent the parent <code>UIComponent</code> of the
-     * component represented by this element instance.
-     * @since 2.0
-     */
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        for (int i = 0; i < len; i++) {
-            this.children[i].apply(ctx, parent);
-        }
-    }
-
-    /**
-     * <p class="changed_added_2_0">Returns the array of child
-     * handlers contained by this handler.</p>
-     */
-    public FaceletHandler[] getHandlers() {
-        return this.children;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/ConverterConfig.java b/jsf-api/src/main/java/javax/faces/view/facelets/ConverterConfig.java
deleted file mode 100644
index 603ce20..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/ConverterConfig.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-/**
- * <p class="changed_added_2_0">A Facelet version of the JSP {@link
- * javax.faces.webapp.ConverterTag}.  All the attributes specified in
- * the documentation for the converter tags are valid attributes.</p>
- *
- * @since 2.0
- * 
- */
-public interface ConverterConfig extends TagConfig {
-
-    /**
-     * <p class="changed_added_2_0">Return the converter id to be used
-     * in instantiating this converter</p>
-     */
-    public String getConverterId();
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/ConverterHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/ConverterHandler.java
deleted file mode 100644
index d28bae5..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/ConverterHandler.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.view.ValueHolderAttachedObjectHandler;
-
-/**
- * <p class="changed_added_2_0">Handles setting a {@link
- * javax.faces.convert.Converter} instance on a {@link
- * javax.faces.component.ValueHolder} parent. Will wire all attributes
- * set to the <code>Converter</code> instance created/fetched. Uses the
- * "binding" attribute for grabbing instances to apply attributes
- * to. </p>
- *
- * <p class="changed_added_2_0">Will only set/create
- * <code>Converter</code> if the passed <code>UIComponent</code>'s
- * <code>parent</code> is <code>null</code>, signifying that it wasn't
- * restored from an existing tree.</p>
- * 
- */
-public class ConverterHandler extends FaceletsAttachedObjectHandler implements ValueHolderAttachedObjectHandler {
-
-    
-    private String converterId;
-    
-    
-    private TagHandlerDelegate helper;
-
-    public ConverterHandler(ConverterConfig config) {
-        super(config);
-        this.converterId = config.getConverterId();
-    }
-
-    @Override
-    protected TagHandlerDelegate getTagHandlerDelegate() {
-        if (null == helper) {
-            helper = delegateFactory.createConverterHandlerDelegate(this);
-        }
-        return helper;
-
-    }
-
-    public String getConverterId(FaceletContext ctx) {
-        if (converterId == null) {
-            TagAttribute idAttr = getAttribute("converterId");
-            if (idAttr == null) {
-                return null;
-            } else {
-                return idAttr.getValue(ctx);
-            }
-        }
-        return converterId;
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/DelegatingMetaTagHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/DelegatingMetaTagHandler.java
deleted file mode 100644
index ec1c3b2..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/DelegatingMetaTagHandler.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view.facelets;
-
-import java.io.IOException;
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.component.UIComponent;
-
-/**
- * <p class="changed_added_2_0">Enable the JSF implementation to provide
- * the appropriate behavior for the kind of {@link MetaTagHandler}
- * subclass for each kind of element in the view, while providing a
- * base-class from which those wanting to make a Java language custom
- * tag handler can inherit.  The JSF runtime provides the implementation
- * of {@link #getTagHandlerDelegate} for the appropriate subclass.</p>
- */
-
-public abstract class DelegatingMetaTagHandler extends MetaTagHandler {
-    
-    private final TagAttribute binding;
-
-    private final TagAttribute disabled;
-    
-    protected TagHandlerDelegateFactory delegateFactory;
-    
-    public DelegatingMetaTagHandler(TagConfig config) {
-        super(config);
-        this.binding = this.getAttribute("binding");
-        this.disabled = this.getAttribute("disabled");
-        delegateFactory = (TagHandlerDelegateFactory)
-                FactoryFinder.getFactory(FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY);
-    }
-    
-    protected abstract TagHandlerDelegate getTagHandlerDelegate();
-    
-    // Properties ----------------------------------------
-
-    public boolean isDisabled(FaceletContext ctx) {
-        return disabled != null && Boolean.TRUE.equals(disabled.getBoolean(ctx));
-    }
-    
-    public TagAttribute getBinding() {
-        return this.binding;
-    }
-    
-    public Tag getTag() {
-        return this.tag;
-    }
-    
-    public String getTagId() {
-        return this.tagId;
-    }
-    
-    public TagAttribute getTagAttribute(String localName) {
-        return super.getAttribute(localName);
-    }
-    
-    @Override
-    public void setAttributes(FaceletContext ctx, Object instance) {
-        super.setAttributes(ctx, instance);
-    }
-    
-    // Methods ----------------------------------------
-    
-
-    /**
-     * <p class="changed_added_2_0">The default implementation simply
-     * calls through to {@link TagHandlerDelegate#apply}.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-     *
-     * @param parent the parent <code>UIComponent</code> of the
-     * component represented by this element instance.
-     * @since 2.0
-     */
-
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        getTagHandlerDelegate().apply(ctx, parent);
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Invoke the <code>apply()</code>
-     * method on this instance's {@link TagHandler#nextHandler}.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-     *
-     * @param c the <code>UIComponent</code> of the
-     * component represented by this element instance.
-     * @since 2.0
-     */
-
-    public void applyNextHandler(FaceletContext ctx, UIComponent c) 
-            throws IOException, FacesException, ELException {
-        // first allow c to get populated
-        this.nextHandler.apply(ctx, c);
-    }
-    
-    /**
-     * <p class="changed_added_2_0">The default implementation simply
-     * calls through to {@link TagHandlerDelegate#createMetaRuleset} and
-     * returns the result.</p>
-     *
-     * @param type the <code>Class</code> for which the
-     * <code>MetaRuleset</code> must be created.
-     *
-     * @since 2.0
-     */
-
-    @Override
-    protected MetaRuleset createMetaRuleset(Class type) {
-        return getTagHandlerDelegate().createMetaRuleset(type);
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletContext.java b/jsf-api/src/main/java/javax/faces/view/facelets/FaceletContext.java
deleted file mode 100644
index 2fc2197..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletContext.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import java.io.IOException;
-import java.net.URL;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ExpressionFactory;
-import javax.el.FunctionMapper;
-import javax.el.VariableMapper;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">Context representative of a single
- * request from a Facelet.  This instance is passed to nearly every
- * method call in this API.</p>
- *
- * @since 2.0
- */
-public abstract class FaceletContext extends ELContext {
-    
-    // The key in the FacesContext attribute map
-    // for the FaceletContext instance.
-    public static final String FACELET_CONTEXT_KEY = 
-            "com.sun.faces.facelets.FACELET_CONTEXT";
-
-    /**
-     * <p class="changed_added_2_0">The current FacesContext bound to
-     * this "request".  Must not be <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-    public abstract FacesContext getFacesContext();
-
-    /**
-     * <p class="changed_added_2_0">Generate a unique ID for the passed
-     * String</p>
-     * 
-     * @param base the string from which to generate the ID.
-     *
-     * @since 2.0
-     */
-    public abstract String generateUniqueId(String base);
-
-    /**
-     * <p class="changed_added_2_0">The ExpressionFactory to use within
-     * the Facelet this context is executing upon.  Must not be
-     * <code>null</code>.</p>
-     * 
-     * @since 2.0
-     */
-
-    public abstract ExpressionFactory getExpressionFactory();
-
-    /**
-     * <p class="changed_added_2_0">Set the VariableMapper to use in EL
-     * evaluation/creation.</p>
-     * 
-     * @param varMapper the new <code>VariableMapper</code>
-     *
-     * @since 2.0
-     */
-    public abstract void setVariableMapper(VariableMapper varMapper);
-
-    /**
-     * <p class="changed_added_2_0">Set the FunctionMapper to use in EL
-     * evaluation/creation.</p>
-     * 
-     * @param fnMapper the new <code>FunctionMapper</code>
-     *
-     * @since 2.0
-     */
-    public abstract void setFunctionMapper(FunctionMapper fnMapper);
-
-    /**
-     * <p class="changed_added_2_0">Support method which is backed by
-     * the current VariableMapper.</p>
-     * 
-     * @param name the name of the attribute
-     * @param value the value of the attribute
-     *
-     * @since 2.0
-     */
-    public abstract void setAttribute(String name, Object value);
-
-    /**
-     * <p class="changed_added_2_0">Return an attribute set by a
-     * previous call to {@link #setAttribute}.  Support method which is
-     * backed by the current VariableMapper</p>
-     * 
-     * @param name the name of the attribute to return.
-     * @since 2.0
-     */
-    public abstract Object getAttribute(String name);
-
-    /**
-     * <p class="changed_added_2_0">Include another Facelet defined at
-     * some path, relative to the executing context, not the current
-     * Facelet (same as include directive in JSP)</p>
-     * 
-     * @param parent the <code>UIComponent</code> that will be the
-     * parent of any components in the included facelet.
-     * @param relativePath the path of the resource containing the
-     * facelet markup, relative to the current markup
-
-     * @throws IOException if unable to load <code>relativePath</code>
-
-     * @throws FaceletException if unable to parse the markup loaded from <code>relativePath</code>
-
-     * @throws FacesException if unable to create child <code>UIComponent</code> instances
-
-     * @throws ELException if any of the expressions in the markup
-     * loaded from <code>relativePath</code> fail
-     *
-     * @since 2.0
-     */
-    public abstract void includeFacelet(UIComponent parent, String relativePath)
-    throws IOException;
-
-    /**
-     * <p class="changed_added_2_0">Include another Facelet defined at
-     * some path, absolute to this ClassLoader/OS</p>
-     * 
-     * @param parent the <code>UIComponent</code> that will be the
-     * parent of any components in the included facelet.
-
-     * @param absolutePath the absolute path to the resource containing
-     * the facelet markup
-
-     * @throws IOException if unable to load <code>relativePath</code>
-
-     * @throws FaceletException if unable to parse the markup loaded from <code>relativePath</code>
-
-     * @throws FacesException if unable to create child <code>UIComponent</code> instances
-
-     * @throws ELException if any of the expressions in the markup
-     * loaded from <code>relativePath</code> fail
-
-     */
-    public abstract void includeFacelet(UIComponent parent, URL absolutePath)
-    throws IOException;
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletException.java b/jsf-api/src/main/java/javax/faces/view/facelets/FaceletException.java
deleted file mode 100644
index 33d76b9..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletException.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.FacesException;
-
-/**
- * <p class="changed_added_2_0">An Exception from the Facelet
- * implementation</p>
- * 
- * @since 2.0
- */
-public class FaceletException extends FacesException {
-
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * <p class="changed_added_2_0">Create an empty
-     * <code>FaceletException</code>.</p>
-     */
-    public FaceletException() {
-        super();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Create a
-     * <code>FaceletException</code> with argument <code>message</code>
-     * as the message.</p>
-     * @param message the textual message to display for the exception.
-     */
-    public FaceletException(String message) {
-        super(message);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Wrap argument <code>cause</code>
-     * within this <code>FaceletException</code> instance.</p>
-     * @param cause the <code>Throwable</code> to wrap
-     */
-    public FaceletException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Wrap argument <code>cause</code> in
-     * a <code>FaceletException</code> instance, with a message given by
-     * the argument <code>message</code>.</p>
-     *  
-     * @param message the message for the <code>FacesException</code>
-     * @param cause the root cause
-     */
-    public FaceletException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/FaceletHandler.java
deleted file mode 100644
index 81639cc..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletHandler.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import java.io.IOException;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-
-/**
- * <p class="changed_added_2_0">This is the root class for markup
- * elements in Facelets VDL.  Facelets is XHTML, and XHTML is XML, and
- * the root unit of abstraction in XML is the element.  A
- * <code>FaceletHandler</code> instance represents an XML element at
- * runtime.  Two direct implementations exist to embody the contract for
- * more specific behavior.</p>
- *
- * <div class="changed_added_2_0">
-
- * <dl>
-
- * <dt>{@link CompositeFaceletHandler}</dt>
-
- * <dd>A container for other <code>FaceletHandler</code>s</dd>
-
- * <dt>{@link TagHandler}</dt>
-
- * <dd>The foundation class for <code>FaceletHandler</code>s associated
- * with markup in a Facelet document.</dd>
-
- * </dl>
-
- * </div>
-
- * @since 2.0
- */
-public interface FaceletHandler {
-
-    /**
-     * <p class="changed_added_2_0">Process changes on a particular
-     * UIComponent</p>
-     * 
-     * @param ctx the current FaceletContext instance for this execution
-     * @param parent the parent UIComponent to operate upon
-
-     * @throws IOException if unable to load <code>relativePath</code>
-
-     * @throws FaceletException if unable to parse the markup loaded from <code>relativePath</code>
-
-     * @throws FacesException if unable to create child <code>UIComponent</code> instances
-
-     * @throws ELException if any of the expressions in the markup
-     * loaded from <code>relativePath</code> fail
-
-     * @since 2.0
-
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-    throws IOException;
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletsAttachedObjectHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/FaceletsAttachedObjectHandler.java
deleted file mode 100644
index 00109bc..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/FaceletsAttachedObjectHandler.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-import javax.faces.component.UIComponent;
-
-import javax.faces.context.FacesContext;
-import javax.faces.view.AttachedObjectHandler;
-
-/**
- * <p class="changed_added_2_0">Root class for all tag handlers that
- * represent attached objetcts in a Facelets page.</p>
- */
-public abstract class FaceletsAttachedObjectHandler extends DelegatingMetaTagHandler implements AttachedObjectHandler {
-
-    /**
-     * <p>Call through to super</p>
-     * @param config configure this handler instance
-     */
-    public FaceletsAttachedObjectHandler(TagConfig config) {
-        super(config);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the underlying handler for
-     * this tag handler instance.</p>
-     */
-    protected final AttachedObjectHandler getAttachedObjectHandlerHelper() {
-        return (AttachedObjectHandler) this.getTagHandlerDelegate();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Take the necessary actions to apply
-     * the attached object represented by the tag for the concrete
-     * subclass of this class to the argument <code>parent</code>.</p>
-     * @param ctx the <code>FacesContext</code> for this request
-     * @param parent The <code>UIComponent</code> to which this attached
-     * object must be applied.
-     */
-    public final void applyAttachedObject(FacesContext ctx, UIComponent parent) {
-        getAttachedObjectHandlerHelper().applyAttachedObject(ctx, parent);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the value of the "for"
-     * attribute.  This enables the runtime to know to which inner
-     * component this attached object should be retargeted.</p>
-     */
-    public final String getFor() {
-        return getAttachedObjectHandlerHelper().getFor();
-    }
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/FacetHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/FacetHandler.java
deleted file mode 100644
index 3ec9d23..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/FacetHandler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">An interface that allows other code 
- * to identify FaceletHandlers that correspond to component facets.</p>
- *
- * @since 2.0
- */
-public interface FacetHandler {
-
-    /**
-     * <p class="changed_added_2_0">Returns the resolved literal String value 
-     * of the facet name after evaluating EL.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-     */
-    public String getFacetName(FaceletContext ctx);
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/MetaRule.java b/jsf-api/src/main/java/javax/faces/view/facelets/MetaRule.java
deleted file mode 100644
index 5038f72..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/MetaRule.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-/**
- * <p class="changed_added_2_0">The root class of the abstraction that
- * dictates how attributes on a markup element in a Facelets VDL page
- * are wired to the JSF API object instance associated with that
- * element.  The single method on this interface, {@link #applyRule},
- * returns an encapsulation of the behavior that actually does the work
- * of handling the attribute and its value.  There are implementations of
- * specific concrete subclasses of this class for all the basic kinds of
- * elements that appear in Facelets VDL pages: components,
- * non-components, and attached objects.</p>
- *
- * <div class="changed_added_2_0">
-
- * <p>For example, consider this markup:</p>
-
-<code><pre><h:inputText value="#{user.userid}" 
-                valueChangeListener="#{user.newUserId}" /></pre></code>
-
- * Two <code>MetaRule</code> instances are involved in this example.</p>
-
- * <ol>
- *
- * <li><p>The first has
- * an <code>applyRule()</code> method that returns a {@link Metadata}
- * instance that, when its <code>applyMetada()</code> method is called,
- * dictates how the "value" attribute is processed: calling {@link
- * javax.faces.component.UIComponent#setValueExpression} on the
- * <code>UIComponent</code> instance associated with the
- * <code><h:inputText></code> element.</p></li>
-
- * <li><p>The second has an <code>applyRule()</code> method that returns
- * a {@link Metadata} instance that, when its
- * <code>applyMetadata()</code> method is called, dictates how the
- * "valueChangeListener" attribute is processed: calling {@link
- * javax.faces.component.EditableValueHolder#addValueChangeListener}.</p></li>
-
- * </ol>
-
- * </div>
- *
- * @since 2.0
- */
-public abstract class MetaRule {
-
-    
-    /**
-     * <p class="changed_added_2_0">Return an abstraction that takes
-     * appropriate action given the kind of rule represented by the
-     * argument <code>name</code>, in the context of this particular
-     * concrete subclass of <code>MetaRule</code>.  The abstraction must
-     * encapsulate the value from the argument
-     * <code>attribute</code>.</p>
-     * @since 2.0
-     * @param name the name for this rule.  This will generally be the
-     * name of a tag attribute in the VDL.
-     * @param attribute the name/value pair for this attribute on this
-     * particular instance of an element in the page.
-     * @param meta the <code>MetadataTarged</code> that can be used to
-     * discern what kind of action to encapsulate within the abstraction
-     * to be returned.
-
-     */
-    public abstract Metadata applyRule(String name, TagAttribute attribute,
-            MetadataTarget meta);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/MetaRuleset.java b/jsf-api/src/main/java/javax/faces/view/facelets/MetaRuleset.java
deleted file mode 100644
index 1363b10..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/MetaRuleset.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">A mutable set of rules to be used in
- * auto-wiring state to a particular object instance. Rules assigned to
- * this object will be composed into a single Metadata instance which
- * will encapsulate the ruleset.</p>
- *
- * @since 2.0
- */
-public abstract class MetaRuleset {
-
-
-    /**
-     * <p class="changed_added_2_0">Customize this
-     * <code>MetaRuleset</code> instance to advise it to ignore the
-     * attribute named by the <code>attribute</code> argument, returning
-     * <code>this</code>.</p>
-     * @param attribute the name of the attribute to ignore.
-     * 
-     * @since 2.0
-     */
-    public abstract MetaRuleset ignore(String attribute);
-
-    /**
-     * <p class="changed_added_2_0">Customize this
-     * <code>MetaRuleset</code> instance to advise it to ignore all
-     * attributes, returning
-     * <code>this</code>.</p>
-     * @since 2.0
-     */
-    public abstract MetaRuleset ignoreAll();
-
-    /**
-     * <p class="changed_added_2_0">Customize this
-     * <code>MetaRuleset</code> by removing the attribute named by
-     * argument <code>attribute</code> and re-adding it under the name
-     * given by the argument <code>property</code>, returning
-     * <code>this</code>.</p>
-     * @since 2.0
-     */
-    public abstract MetaRuleset alias(String attribute, String property);
-
-    /**
-     * <p class="changed_added_2_0">Add another {@link Metadata} to this
-     * ruleset, returning <code>this</code>.</p>
-     * @since 2.0
-     */
-    public abstract MetaRuleset add(Metadata mapper);
-
-    /**
-     * <p class="changed_added_2_0">Add another {@link MetaRule} to this
-     * ruleset, returning <code>this</code>.</p>
-     * @since 2.0
-     */
-    public abstract MetaRuleset addRule(MetaRule rule);
-
-    /**
-     * <p class="changed_added_2_0">Take actions to apply the rule.</p>
-     * 
-     */
-    public abstract Metadata finish();
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/MetaTagHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/MetaTagHandler.java
deleted file mode 100644
index d460fc7..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/MetaTagHandler.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-
-/**
- * <p class="changed_added_2_0">Every kind of markup element in Facelets
- * VDL that has attributes that need to take action on a JSF Java API
- * artifact is associated with an instance of this class.  This class is
- * an abstraction to enable a rule based method for directing how
- * different kinds of elements take different kinds of actions in the
- * JSF Java API.  For example, consider this markup:</p>
- *
- * <div class="changed_added_2_0">
-
-<code><pre><h:inputText value="#{user.userid}" 
-                valueChangeListener="#{user.newUserId}" /></pre></code>
-
- * <p>This markup element corresponds to an instance of {@link
- * javax.faces.component.html.HtmlInputText} in the view.
- * <code>HtmlImputText</code> has a number of attributes that are to be
- * exposed to the page author.  <code>HtmlInputText</code> also
- * implements {@link javax.faces.component.EditableValueHolder}, which
- * extends {@link javax.faces.component.ValueHolder}.  Each of these
- * interfaces also expose a number of attributes to the page author.</p>
-
- * <p>Facelets employes the strategy pattern to allow the manner in
- * which all possible attributes are handled based on the nature of the
- * JSF Java API artifact associated with the markup element.</p>
-
- * <p>Subclasses override the {@link #createMetaRuleset} method to
- * return a {@link MetaRuleset} instance encapsulating all the strategies
- * for all the attributes that make sense for this particular markup
- * element.  The runtime calls the {@link #setAttributes(FaceletContext, Object)}
- * method to cause those rules to be executed and applied.</p>
- *
- * </div>
- * 
- * @since 2.0
- */
-public abstract class MetaTagHandler extends TagHandler {
-
-    private Class lastType = Object.class;
-
-    private Metadata mapper;
-
-    public MetaTagHandler(TagConfig config) {
-        super(config);
-    }
-
-    /**
-     * Extend this method in order to add your own rules.
-     * 
-     * @param type
-     */
-    protected abstract MetaRuleset createMetaRuleset(Class type);
-
-    /**
-     * Invoking/extending this method will cause the results of the created
-     * MetaRuleset to auto-wire state to the passed instance.
-     * 
-     * @param ctx
-     * @param instance
-     */
-    protected void setAttributes(FaceletContext ctx, Object instance) {
-        if (instance != null) {
-            Class type = instance.getClass();
-            if (mapper == null || !this.lastType.equals(type)) {
-                this.lastType = type;
-                this.mapper = this.createMetaRuleset(type).finish();
-            }
-            this.mapper.applyMetadata(ctx, instance);
-        }
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/Metadata.java b/jsf-api/src/main/java/javax/faces/view/facelets/Metadata.java
deleted file mode 100644
index 155687f..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/Metadata.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-/**
- * <p class="changed_added_2_0">There are concrete subclasses within the
- * implementation that map concepts in the Facelet VDL page to JSF Java
- * API calls the appropriate instances.  For example, the
- * “<code>validator</code>” attribute on an input component
- * is specified to point to a <code>MethodExpression</code> that
- * references a method that performs the validation.  There is a
- * concrete subclass of <code>Metadata</code> to perform this action
- * when that attribute appears in a Facelet VDL page.</p>
- *
- * @since 2.0
- */
-public abstract class Metadata {
-
-    /**
-     * <p class="changed_added_2_0">Take the action prescribed in the
-     * JSF specification for this particular VDL element attribute.</p>
-     * 
-     * @param ctx The FaceletContext for this request.
-     * @param instance The instance from the JSF Java API on which the
-     * action should be taken.  For example, an instance of {@link
-     * javax.faces.component.EditableValueHolder}.
-     */
-    public abstract void applyMetadata(FaceletContext ctx, Object instance);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/MetadataTarget.java b/jsf-api/src/main/java/javax/faces/view/facelets/MetadataTarget.java
deleted file mode 100644
index 1b6ce48..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/MetadataTarget.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-
-/**
- * <p class="changed_added_2_0">Information used with {@link MetaRule}
- * for determining how and what {@link Metadata} should be wired.</p>
- *
- * @since 2.0
- */
-public abstract class MetadataTarget {
-
-    /**
-     * <p class="changed_added_2_0">Return a beans
-     * <code>PropertyDescriptor</code> for the property with name given
-     * by argument <code>name</code>.</p>
-     * @param name the name of the property for which the
-     * <code>PropertyDescriptor</code> must be returned.
-     */
-    public abstract PropertyDescriptor getProperty(String name);
-
-    /**
-     * <p class="changed_added_2_0">Return true if the target for this
-     * metadata element is an instance of the argument
-     * <code>type</code>.</p>
-     * @param type the <code>Class</code> to test for the instance of.
-     */
-    public abstract boolean isTargetInstanceOf(Class type);
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>Class</code> of the
-     * metadata target.</p>
-     */
-    public abstract Class getTargetClass();
-
-    /**
-     * <p class="changed_added_2_0">Return a 
-     * <code>Class</code> for the property with name given
-     * by argument <code>name</code>.</p>
-     * @param name the name of the property for which the
-     * <code>Class</code> must be returned.
-     */
-    public abstract Class getPropertyType(String name);
-
-    /**
-     * <p class="changed_added_2_0">Return a <code>Method</code> for the
-     * setter of the property with name given by argument
-     * <code>name</code>.</p>
-     * @param name the name of the property for which the
-     * <code>Method</code> must be returned.
-     */
-    public abstract Method getWriteMethod(String name);
-
-    /**
-     * <p class="changed_added_2_0">Return a <code>Method</code> for the
-     * getter of the property with name given by argument
-     * <code>name</code>.</p>
-     * @param name the name of the property for which the
-     * <code>Method</code> must be returned.
-     */
-    public abstract Method getReadMethod(String name);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/ResourceResolver.java b/jsf-api/src/main/java/javax/faces/view/facelets/ResourceResolver.java
deleted file mode 100644
index 4bfcde1..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/ResourceResolver.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import java.net.URL;
-
-/**
- * <p class="changed_added_2_0">Provide a hook to decorate or override
- * the way that Facelets loads template files.  A default implementation
- * must be provided that satisfies the requirements for loading
- * templates as in Pre-JSF 2.0 Facelets.</p>
-
- * <div class="changed_added_2_0">
-
- * <p>If a <code><context-param></code> with the param name equal
- * to the value of {@link #FACELETS_RESOURCE_RESOLVER_PARAM_NAME}
- * exists, the runtime must interpret its value as a fully qualified
- * classname of a java class that extends <code>ResourceResolver</code>
- * and has a zero argument public constructor or a one argument public
- * constructor where the type of the argument is
- * <code>ResourceResolver</code>. If this param is set and its value
- * does not conform to those requirements, the runtime must log a
- * message and continue. If it does conform to these requirements and
- * has a one-argument constructor, the default
- * <code>ResourceResolver</code> must be passed to the constructor. If
- * it has a zero argument constructor it is invoked directly. In either
- * case, the new <code>ResourceResolver</code> replaces the old
- * one. </p>
-
- * </div>
-
- */
-
-public abstract class ResourceResolver {
-
-    public static final String FACELETS_RESOURCE_RESOLVER_PARAM_NAME = 
-        "javax.faces.FACELETS_RESOURCE_RESOLVER";
-
-    /**
-     * <p class="changed_added_2_0">Returns the <code>URL</code> of a
-     * Facelet template file.  Called by the Facelets Runtime to load a
-     * template file referred to in a Facelets page.</p>
-
-     * @param path the internal path to the template resource.
-
-     */
-    abstract public URL resolveUrl(String path);
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/Tag.java b/jsf-api/src/main/java/javax/faces/view/facelets/Tag.java
deleted file mode 100644
index 75dc6f5..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/Tag.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.view.Location;
-
-/**
- * <p class="changed_added_2_0">The runtime must create an instance of
- * this class for each element in the Facelets XHTML view. A {@link
- * TagConfig} subinterface instance is responsible for providing an
- * instance of <code>Tag</code> to the {@link TagHandler} instance that
- * is passed the <code>TagConfig</code> in its constructor.</p>
- * 
- * @since 2.0
- */
-public final class Tag {
-    private final TagAttributes attributes;
-
-    private final Location location;
-
-    private final String namespace;
-
-    private final String localName;
-
-    private final String qName;
-
-    public Tag(Location location, String namespace, String localName,
-            String qName, TagAttributes attributes) {
-        this.location = location;
-        this.namespace = namespace;
-        this.localName = localName;
-        this.qName = qName;
-        this.attributes = attributes;
-    }
-
-    public Tag(Tag orig, TagAttributes attributes) {
-        this(orig.getLocation(), orig.getNamespace(), orig.getLocalName(), orig
-                .getQName(), attributes);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return an object encapsulating the
-     * {@link TagAttributes} specified on this element in the view.</p>
-     * 
-     */
-    public TagAttributes getAttributes() {
-        return attributes;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the XML local name of the
-     * tag. For example, <my:tag /> would be "tag".</p>
-     * 
-     */
-    public String getLocalName() {
-        return localName;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the {@link Location} of this
-     * <code>Tag</code> instance in the Facelet view.</p>
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the resolved XML Namespace
-     * for this tag in the Facelets view.</p>
-     */
-    public String getNamespace() {
-        return namespace;
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the XML qualified name for
-     * this tag.  For example, <my:tag /> would be "my:tag".
-     * 
-     */
-    public String getQName() {
-        return qName;
-    }
-
-    public String toString() {
-        return this.location + " <" + this.qName + ">";
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagAttribute.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagAttribute.java
deleted file mode 100644
index 6839be7..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagAttribute.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.view.Location;
-import javax.el.ExpressionFactory;
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
-
-/**
- * <p class="changed_added_2_0">Representation of an XML attribute
- * name=value pair on an XML element in a Facelet file.</p>
- * 
- * @since 2.0
- */
-public abstract class TagAttribute {
-
-    /**
-     * If literal, return
-     * {@link Boolean#getBoolean(java.lang.String) Boolean.getBoolean(java.lang.String)}
-     * passing our value, otherwise call
-     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
-     * 
-     * @see Boolean#getBoolean(java.lang.String)
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return boolean value
-     */
-    public abstract boolean getBoolean(FaceletContext ctx);
-
-    /**
-     * If literal, call
-     * {@link Integer#parseInt(java.lang.String) Integer.parseInt(String)},
-     * otherwise call
-     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
-     * 
-     * @see Integer#parseInt(java.lang.String)
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return int value
-     */
-    public abstract int getInt(FaceletContext ctx);
-
-    /**
-     * Local name of this attribute
-     * 
-     * @return local name of this attribute
-     */
-    public abstract String getLocalName();
-
-    /**
-     * The location of this attribute in the FaceletContext
-     * 
-     * @return the TagAttribute's location
-     */
-    public abstract Location getLocation();
-
-    /**
-     * Create a MethodExpression, using this attribute's value as the expression
-     * String.
-     * 
-     * @see ExpressionFactory#createMethodExpression(javax.el.ELContext,
-     *      java.lang.String, java.lang.Class, java.lang.Class[])
-     * @see MethodExpression
-     * @param ctx
-     *            FaceletContext to use
-     * @param type
-     *            expected return type
-     * @param paramTypes
-     *            parameter type
-     * @return a MethodExpression instance
-     */
-    public abstract MethodExpression getMethodExpression(FaceletContext ctx, Class type,
-            Class[] paramTypes);
-    
-    /**
-     * The resolved Namespace for this attribute
-     * 
-     * @return resolved Namespace
-     */
-    public abstract String getNamespace();
-
-    /**
-     * Delegates to getObject with Object.class as a param
-     * 
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return Object representation of this attribute's value
-     */
-    public abstract Object getObject(FaceletContext ctx);
-
-    /**
-     * The qualified name for this attribute
-     * 
-     * @return the qualified name for this attribute
-     */
-    public abstract String getQName();
-
-    /**
-     * Return the literal value of this attribute
-     * 
-     * @return literal value
-     */
-    public abstract String getValue();
-
-    /**
-     * If literal, then return our value, otherwise delegate to getObject,
-     * passing String.class.
-     * 
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return String value of this attribute
-     */
-    public abstract String getValue(FaceletContext ctx);
-
-    /**
-     * If literal, simply coerce our String literal value using an
-     * ExpressionFactory, otherwise create a ValueExpression and evaluate it.
-     * 
-     * @see ExpressionFactory#coerceToType(java.lang.Object, java.lang.Class)
-     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
-     *      java.lang.String, java.lang.Class)
-     * @see ValueExpression
-     * @param ctx
-     *            FaceletContext to use
-     * @param type
-     *            expected return type
-     * @return Object value of this attribute
-     */
-    public abstract Object getObject(FaceletContext ctx, Class type);
-
-    /**
-     * Create a ValueExpression, using this attribute's literal value and the
-     * passed expected type.
-     * 
-     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
-     *      java.lang.String, java.lang.Class)
-     * @see ValueExpression
-     * @param ctx
-     *            FaceletContext to use
-     * @param type
-     *            expected return type
-     * @return ValueExpression instance
-     */
-    public abstract ValueExpression getValueExpression(FaceletContext ctx, Class type);
-
-    /**
-     * If this TagAttribute is literal (not #{..} or ${..})
-     * 
-     * @return true if this attribute is literal
-     */
-    public abstract boolean isLiteral();
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagAttributeException.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagAttributeException.java
deleted file mode 100644
index 65fda61..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagAttributeException.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">An Exception caused by a {@link
- * TagAttribute}</p>
- *
- * @since 2.0
- */
-public final class TagAttributeException extends FaceletException {
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    public TagAttributeException(TagAttribute attr) {
-        super(attr.toString());
-    }
-
-    public TagAttributeException(TagAttribute attr, String message) {
-        super(attr + " " + message);
-    }
-
-    public TagAttributeException(TagAttribute attr, Throwable cause) {
-        super(attr + " " + cause.getMessage(), cause);
-    }
-
-    public TagAttributeException(TagAttribute attr, String message,
-            Throwable cause) {
-        super(attr + " " + message, cause);
-    }
-
-    /**
-     * 
-     */
-    public TagAttributeException(Tag tag, TagAttribute attr) {
-        super(print(tag, attr));
-    }
-
-    private static String print(Tag tag, TagAttribute attr) {
-        return tag.getLocation() + " <" + tag.getQName() + " " + attr.getQName()
-                + "=\"" + attr.getValue() + "\">";
-    }
-
-    /**
-     * @param message
-     */
-    public TagAttributeException(Tag tag, TagAttribute attr, String message) {
-        super(print(tag, attr) + " " + message);
-    }
-
-    /**
-     * @param cause
-     */
-    public TagAttributeException(Tag tag, TagAttribute attr, Throwable cause) {
-        super(print(tag, attr) + " " + cause.getMessage(), cause);
-    }
-
-    /**
-     * @param message
-     * @param cause
-     */
-    public TagAttributeException(Tag tag, TagAttribute attr, String message,
-            Throwable cause) {
-        super(print(tag, attr) + " " + message, cause);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagAttributes.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagAttributes.java
deleted file mode 100644
index 6a1a5ba..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagAttributes.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">A set of TagAttributes, usually
- * representing all attributes on a Tag.</p>
- *
- * @since 2.0
- */
-public abstract class TagAttributes {
-
-    /**
-     * Return an array of all TagAttributes in this set
-     * 
-     * @return a non-null array of TagAttributes
-     */
-    public abstract TagAttribute[] getAll();
-
-    /**
-     * Using no namespace, find the TagAttribute
-     * 
-     * @see #get(String, String)
-     * @param localName
-     *            tag attribute name
-     * @return the TagAttribute found, otherwise null
-     */
-    public abstract TagAttribute get(String localName);
-
-    /**
-     * Find a TagAttribute that matches the passed namespace and local name.
-     * 
-     * @param ns
-     *            namespace of the desired attribute
-     * @param localName
-     *            local name of the attribute
-     * @return a TagAttribute found, otherwise null
-     */
-    public abstract TagAttribute get(String ns, String localName);
-
-    /**
-     * Get all TagAttributes for the passed namespace
-     * 
-     * @param namespace
-     *            namespace to search
-     * @return a non-null array of TagAttributes
-     */
-    public abstract TagAttribute[] getAll(String namespace);
-
-    /**
-     * A list of Namespaces found in this set
-     * 
-     * @return a list of Namespaces found in this set
-     */
-    public abstract String[] getNamespaces();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagConfig.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagConfig.java
deleted file mode 100644
index 7ca6fcd..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagConfig.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">Passed to the constructor of {@link
- * TagHandler} subclass, it defines the document definition of the
- * handler we are instantiating.</p>
- *
- * @since 2.0
- */
-public interface TagConfig {
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>Tag</code>
-     * representing this handler.</p>
-     */
-    public Tag getTag();
-
-    /**
-     * <p class="changed_added_2_0">The next {@link FaceletHandler}
-     * (child or children) to be applied.  This must never be
-     * <code>null</code>.</p>
-     */
-    public FaceletHandler getNextHandler();
-
-    /**
-     * <p class="changed_added_2_0">A document-unique id, follows the
-     * convention "_tagId##"</p>
-     */
-    public String getTagId();
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagDecorator.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagDecorator.java
deleted file mode 100644
index 7cb1703..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagDecorator.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-/**
- * Provides the ability to completely change the Tag before it's processed for
- * compiling with the associated TagHandler.
- * <p />
- * You could take <input type="text" /> and convert it to <h:inputText />
- * before compiling.
- */
-public interface TagDecorator {
-
-    /**
-     * If handled, return a new Tag instance, otherwise return null
-     * 
-     * @param tag
-     *            tag to be decorated
-     * @return a decorated tag, otherwise null
-     */
-    public Tag decorate(Tag tag);
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagException.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagException.java
deleted file mode 100644
index 7c36aa3..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagException.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">An Exception caused by a {@link Tag}</p>
- * 
- * @since 2.0
- */
-public final class TagException extends FaceletException {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
-     * so the exception can reference its information.</p>
-     * @param tag the <code>Tag</code> that caused this exception.
-     */
-    public TagException(Tag tag) {
-        super(tag.toString());
-    }
-
-    /**
-     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
-     * so the exception can reference its information.</p>
-     * @param tag the <code>Tag</code> that caused this exception.
-     * @param message a message describing the exception
-     */
-    public TagException(Tag tag, String message) {
-        super(tag + " " + message);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
-     * so the exception can reference its information.</p>
-     * @param tag the <code>Tag</code> that caused this exception.
-     * @param cause the root cause for this exception.
-     */
-    public TagException(Tag tag, Throwable cause) {
-        super(tag.toString(), cause);
-    }
-
-    /**
-     * <p class="changed_added_2_0">Wrap the argument <code>tag</code>
-     * so the exception can reference its information.</p>
-     * @param tag the <code>Tag</code> that caused this exception.
-     * @param message a message describing the exception
-     * @param cause the root cause for this exception.
-     */
-    public TagException(Tag tag, String message, Throwable cause) {
-        super(tag + " " + message, cause);
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagHandler.java
deleted file mode 100644
index 3202aaf..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagHandler.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-/**
- * <p class="changed_added_2_0">Foundation class for
- * <code>FaceletHandler</code>s associated with a markup element in a
- * Facelet document.  This class introduces the concept of <a
- * href="TagAttribute.html">XML attributes</a> to Facelets.  See the <a
- * href="#TagHandler(javax.faces.view.facelets.TagConfig)">constructor</a>
- * documentation for more details.</p>
- * 
- *
- * @since 2.0
- */
-public abstract class TagHandler implements FaceletHandler {
-
-    /**
-     * <p class="changed_added_2_0">See {@link TagConfig#getTagId}.</p>
-     */
-
-    protected final String tagId;
-
-    /**
-     * <p class="changed_added_2_0">A reference to the <code>Tag</code>
-     * instance corresponding to this <code>TagHandler</code>
-     * instance.</p>
-     */
-
-    protected final Tag tag;
-
-    /**
-     * <p class="changed_added_2_0">A reference to the
-     * <code>FaceletHandler</code> that represents the first nested
-     * child of this <code>TagHandler</code> instance.</p>
-     */
-
-    protected final FaceletHandler nextHandler;
-
-    /**
-     * <p class="changed_added_2_0">Every <code>TagHandler</code>
-     * instance is associated with a {@link Tag}.  Each <code>Tag</code>
-     * instance has a {@link TagAttributes} property, which is simply a
-     * collection of {@link TagAttribute} instances.  Extract and save
-     * as protected instance variables the {@link TagConfig#getTagId},
-     * {@link TagConfig#getTag} and {@link TagConfig#getNextHandler}
-     * returns from the argument <code>TagConfig</code>.  This
-     * constructor is only called when the Facelets View is compiled.
-     * </p>
-     *
-     * @param config The structure that contains useful to the operation
-     * of this instance.
-     */
-
-    public TagHandler(TagConfig config) {
-        this.tagId = config.getTagId();
-        this.tag = config.getTag();
-        this.nextHandler = config.getNextHandler();
-    }
-
-    /**
-     * Utility method for fetching the appropriate TagAttribute
-     * 
-     * @param localName
-     *            name of attribute
-     * @return TagAttribute if found, otherwise null
-     */
-    protected final TagAttribute getAttribute(String localName) {
-        return this.tag.getAttributes().get(localName);
-    }
-
-    /**
-     * Utility method for fetching a required TagAttribute
-     * 
-     * @param localName
-     *            name of the attribute
-     * @return TagAttribute if found, otherwise error
-     * @throws TagException
-     *             if the attribute was not found
-     */
-    protected final TagAttribute getRequiredAttribute(String localName)
-            throws TagException {
-        TagAttribute attr = this.getAttribute(localName);
-        if (attr == null) {
-            throw new TagException(this.tag, "Attribute '" + localName
-                    + "' is required");
-        }
-        return attr;
-    }
-    
-
-    public String toString() {
-        return this.tag.toString();
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagHandlerDelegate.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagHandlerDelegate.java
deleted file mode 100644
index 92ff3ea..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagHandlerDelegate.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view.facelets;
-
-import java.io.IOException;
-import javax.faces.component.UIComponent;
-
-
-/**
- * <p class="changed_added_2_0">Abstract class that defines methods
- * relating to helping tag handler instances.  This abstraction enables
- * implementation details to be hidden by the JSF implementation while
- * still allowing concrete classes to be defined for extension by
- * users.</p>
- * 
- * @since 2.0
- */
-
-public abstract class TagHandlerDelegate {
-
-    /**
-     * <p class="changed_added_2_0">Return a {@link MetaRuleset}
-     * particular to this kind of tag handler.  Called from classes that
-     * implement {@link MetaTagHandler}.</p>
-     *
-     * @param type the <code>Class</code> for which the
-     * <code>MetaRuleset</code> must be created.
-     *
-     * @since 2.0
-     */ 
-    
-    public abstract MetaRuleset createMetaRuleset(Class type);
-    
-
-    /**
-     * <p class="changed_added_2_0">Called by classes that implement
-     * {@link javax.faces.view.facelets.FaceletHandler} in their
-     * implementation of <code>apply()</code>.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this request
-     *
-     * @param comp the <code>UIComponent</code> that corresponds to this
-     * element.
-     *
-     */
-    public abstract void apply(FaceletContext ctx, UIComponent comp)
-    throws IOException;
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TagHandlerDelegateFactory.java b/jsf-api/src/main/java/javax/faces/view/facelets/TagHandlerDelegateFactory.java
deleted file mode 100644
index 9fb3590..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TagHandlerDelegateFactory.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">Abstract factory for creating instances
- * of {@link TagHandlerDelegate}.</p>
- *
- * @since 2.0
- */
-public abstract class TagHandlerDelegateFactory {
-    
-    /**
-     * <p class="changed_added_2_0">Create and return a {@link
-     * TagHandlerDelegate} instance designed for use with {@link
-     * ComponentHandler}.</p>
-     *
-     * @param owner the <code>ComponentHandler</code> instance being
-     * helped by this helper instance.
-     *
-     * @since 2.0
-     */ 
-    public abstract TagHandlerDelegate createComponentHandlerDelegate(ComponentHandler owner);
-
-    /**
-     * <p class="changed_added_2_0">Create and return a {@link
-     * TagHandlerDelegate} instance designed for use with {@link
-     * ValidatorHandler}.</p>
-     *
-     * @param owner the <code>ValidatorHandler</code> instance being
-     * helped by this helper instance.
-     *
-     * @since 2.0
-     */ 
-    public abstract TagHandlerDelegate createValidatorHandlerDelegate(ValidatorHandler owner);
-
-    /**
-     * <p class="changed_added_2_0">Create and return a {@link
-     * TagHandlerDelegate} instance designed for use with {@link
-     * ConverterHandler}.</p>
-     *
-     * @param owner the <code>ValidatorHandler</code> instance being
-     * helped by this helper instance.
-     *
-     * @since 2.0
-     */ 
-    public abstract TagHandlerDelegate createConverterHandlerDelegate(ConverterHandler owner);
-
-    /**
-     * <p class="changed_added_2_0">Create and return a {@link
-     * TagHandlerDelegate} instance designed for use with {@link
-     * BehaviorHandler}.</p>
-     *
-     * @param owner the <code>ValidatorHandler</code> instance being
-     * helped by this helper instance.
-     *
-     * @since 2.0
-     */ 
-    public abstract TagHandlerDelegate createBehaviorHandlerDelegate(BehaviorHandler owner);
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/TextHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/TextHandler.java
deleted file mode 100644
index 1e0dcce..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/TextHandler.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package javax.faces.view.facelets;
-
-/**
- * <p class="changed_added_2_0">An interface that allows other code 
- * to identify FaceletHandlers that may provide text (String) content.</p>
- *
- * @since 2.0
- */
-public interface TextHandler {
-
-    /**
-     * <p class="changed_added_2_0">Returns the literal String value of the 
-     * contained text.</p>
-     */
-    public String getText();
-    
-    /**
-     * <p class="changed_added_2_0">Returns the resolved literal String value 
-     * of the contained text after evaluating EL.</p>
-     *
-     * @param ctx the <code>FaceletContext</code> for this view execution
-     */
-    public String getText(FaceletContext ctx);
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/ValidatorConfig.java b/jsf-api/src/main/java/javax/faces/view/facelets/ValidatorConfig.java
deleted file mode 100644
index 89653a6..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/ValidatorConfig.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-
-/**
- * <p class="changed_added_2_0">Used in creating <code>ValidatorHandler</code>
- * and all implementations.</p>
- *
- * @since 2.0
- * 
- */
-public interface ValidatorConfig extends TagConfig {
-
-    /**
-     * <p class="changed_added_2_0">Return the validator-id associated with a 
-     * particular validator in your faces-config</p>
-     * @since 2.0
-     */
-    public String getValidatorId();
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/ValidatorHandler.java b/jsf-api/src/main/java/javax/faces/view/facelets/ValidatorHandler.java
deleted file mode 100644
index ba92d5e..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/ValidatorHandler.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.faces.view.facelets;
-
-import javax.faces.view.EditableValueHolderAttachedObjectHandler;
-
-/**
- * <p class="changed_added_2_0">Handles setting a {@link
- * javax.faces.validator.Validator} instance on an {@link
- * javax.faces.component.EditableValueHolder} parent. Will wire all
- * attributes set to the <code>Validator</code> instance
- * created/fetched. Uses the "binding" attribute for grabbing instances
- * to apply attributes to.</p> 
-
- * <p>Will only set/create Validator is the passed UIComponent's parent
- * is null, signifying that it wasn't restored from an existing
- * tree.</p>
-
- */
-public class ValidatorHandler extends FaceletsAttachedObjectHandler implements EditableValueHolderAttachedObjectHandler {
-
-    private String validatorId;
-    
-    private TagHandlerDelegate helper;
-
-    private ValidatorConfig config;
-
-
-    /**
-     * <p class="changed_added_2_0">Construct this instance around the configuration information in argument <code>config</code></p>
-     * @param config the <code>TagConfig</code> subclass for this kind
-     * of attached object.
-     */
-    public ValidatorHandler(ValidatorConfig config) {
-        super(config);
-        this.config = config;
-        this.validatorId = config.getValidatorId();
-    }
-
-    /**
-     * <p class="changed_added_2_0">Return the implementation specific
-     * delegate instance that provides the bulk of the work for this
-     * handler instance.</p>
-     */
-    @Override
-    protected TagHandlerDelegate getTagHandlerDelegate() {
-        if (null == helper) {
-            helper = delegateFactory.createValidatorHandlerDelegate(this);
-        }
-        return helper;
-    }
-
-    /**
-     * <p>Retrieve the id of the validator that is to be created and
-     * added to the parent <code>EditableValueHolder</code>.  All
-     * subclasses should override this method because it is important
-     * for Facelets to have a unique way of identifying the validators
-     * that are added to this <code>EditableValueHolder</code> and
-     * allows exclusions to work properly. An exclusion is a validator
-     * declaration that has the attribute "disabled" which resolves to
-     * false, instructing Facelets not to register a default validator
-     * with the same id.</p>
-     */
-    public String getValidatorId(FaceletContext ctx) {
-        if (validatorId == null) {
-            TagAttribute idAttr = getAttribute("validatorId");
-            if (idAttr == null) {
-                return null;
-            } else {
-                return idAttr.getValue(ctx);
-            }
-        }
-        return validatorId;
-    }
-
-
-    /**
-     * <p class="changed_added_2_0">Return the <code>TagConfig</code>
-     * subclass used to configure this handler instance.</p>
-     */
-    public ValidatorConfig getValidatorConfig() {
-
-        return config;
-        
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/view/facelets/package.html b/jsf-api/src/main/java/javax/faces/view/facelets/package.html
deleted file mode 100644
index 6a387c0..0000000
--- a/jsf-api/src/main/java/javax/faces/view/facelets/package.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.view.facelets"</title>
-</head>
-<body bgcolor="white">
-
-<p class="changed_added_2_0">This package contains public classes for
-the Java code API of Facelets.  The vast majority of Facelets users have
-no need to access the Java API and can get all their work done using the
-tag-level API.  These classes are provided for users that have a need
-for a Java API that allows participation in the execution of a Facelets
-View, which happens as a result of the runtime calling <a
-href="../ViewDeclarationLanguage.html#buildView(javax.faces.context.FacesContext,%20javax.faces.component.UIViewRoot)"><code>ViewDeclarationLanguage.buildView()</code></a>.
-    </p>
-
-<div class="changed_added_2_0">
-
-<p>
-
-<img src="Facelets.jpg" alt="UML Class Diagram of classes in this package" />
-
-</p>
-
-<p>The most common usecase for participating in the execution of a
-Facelets View is to provide a custom tag handler in those cases when the
-non-Java API methods for doing so is not sufficient.  In such cases,
-Java classes may extend from <code><a
-href="ComponentHandler.html">ComponentHandler</a></code>, <code><a
-href="BehaviorHandler.html">BehaviorHandler</a></code>, <code><a
-href="ConverterHandler.html">ConverterHandler</a></code>, or <code><a
-href="ValidatorHandler.html">ValidatorHandler</a></code> depending upon
-the kind of JSF Java API artifact they want to represent in the Facelets
-VDL page.</p>
-
-</div>
-
-</body> </html>
diff --git a/jsf-api/src/main/java/javax/faces/view/package.html b/jsf-api/src/main/java/javax/faces/view/package.html
deleted file mode 100644
index b476ee9..0000000
--- a/jsf-api/src/main/java/javax/faces/view/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.view"</title>
-</head>
-<body bgcolor="white">
-
-<p class="changed_added_2_0">Classes for defining a View Declaration
-Language (VDL) for authoring JavaServer Faces user interfaces.  The root
-class in this package is <a
-href="ViewDeclarationLanguageFactory.html"><code>ViewDeclarationLanguageFactory</code>.</a>
-Interfaces and classes required for the Facelets for JSF 2
-implementation are also defined in package <a
-href="facelets/package-summary.html"><code>javax.faces.view.facelets</code></a>.</p>
-
-</body>
-</html>
diff --git a/jsf-api/src/main/java/javax/faces/webapp/AttributeTag.java b/jsf-api/src/main/java/javax/faces/webapp/AttributeTag.java
deleted file mode 100644
index 5c3f17b..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/AttributeTag.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-
-/**
- * <p>Tag implementation that adds an attribute with a specified name
- * and String value to the component whose tag it is nested inside,
- * if the component does not already contain an attribute with the
- * same name.  This tag creates no output to the page currently
- * being created.</p>
- *
- * @deprecated The Faces implementation must now provide the
- * implementation for this class.
- */
-
-public class AttributeTag extends TagSupport {
-
-
-    // ---------------------------------------------------------- Static Members
-
-
-    private static final long serialVersionUID = -7782950243436672334L;
-
-
-    // ------------------------------------------------------------- Attributes
-
-
-    /**
-     * <p>The name of the attribute to be created, if not already present.
-     */
-    private String name = null;
-
-
-    /**
-     * <p>Set the attribute name.</p>
-     *
-     * @param name The new attribute name
-     */
-    public void setName(String name) {
-
-        this.name = name;
-
-    }
-
-
-    /**
-     * <p>The value to be associated with this attribute, if it is created.</p>
-     */
-    private String value = null;
-
-
-
-    /**
-     * <p>Set the attribute value.</p>
-     *
-     * @param value The new attribute value
-     */
-    public void setValue(String value) {
-
-        this.value = value;
-
-    }
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Register the specified attribute name and value with the
-     * {@link UIComponent} instance associated with our most immediately
-     * surrounding {@link UIComponentTag} instance, if this {@link UIComponent}
-     * does not already have a value for the specified attribute name.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) { // PENDING - i18n
-            throw new JspException("Not nested in a UIComponentTag");
-        }
-
-        // Add this attribute if it is not already defined
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) { // PENDING - i18n
-            throw new JspException("No component associated with UIComponentTag");
-        }
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        ExpressionFactory exprFactory =
-            context.getApplication().getExpressionFactory();
-        ELContext elContext = context.getELContext();
-
-        String nameVal = (String) 
-                  exprFactory.createValueExpression(elContext, name, String.class)
-                      .getValue(elContext);
-        Object valueVal =
-                exprFactory.createValueExpression(elContext, value, Object.class)
-                    .getValue(elContext);
-
-        if (component.getAttributes().get(nameVal) == null) {
-            component.getAttributes().put(nameVal, valueVal);
-        }
-        return (SKIP_BODY);
-
-    }
-
-
-    public int doEndTag() throws JspException {
-	this.release();
-	return (EVAL_PAGE);
-    }
-
-    
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.name = null;
-        this.value = null;
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/ConverterELTag.java b/jsf-api/src/main/java/javax/faces/webapp/ConverterELTag.java
deleted file mode 100644
index af1e2fe..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/ConverterELTag.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-
-
-
-
-
-/**
- * <p><strong>ConverterELTag</strong> is a base class for all JSP custom
- * actions that create and register a <code>Converter</code> instance on
- * the {@link ValueHolder} associated with our most immediate
- * surrounding instance of a tag whose implementation class is a
- * subclass of {@link UIComponentClassicTagBase}.  To avoid creating duplicate
- * instances when a page is redisplayed, creation and registration of a
- * {@link Converter} occurs <strong>only</strong> if the corresponding
- * {@link UIComponent} was created (by the owning {@link
- * UIComponentTag}) during the execution of the current page.</p>
- *
- * <p>This class may be used as a base class for tag instances that
- * support specific {@link Converter} subclasses.</p>
- *
- * <p>Subclasses of this class must implement the
- * <code>createConverter()</code> method, which creates and returns a
- * {@link Converter} instance.  Any configuration properties that specify
- * behavior of this {@link Converter} must have been set by the
- * <code>createConverter()</code> method.  Generally, this occurs
- * by copying corresponding attribute values on the tag instance.</p>
- *
- * <p>This tag creates no output to the page currently being created.  It
- * is used solely for the side effect of {@link Converter} creation.</p>
- *
- */
-
-public abstract class ConverterELTag extends TagSupport {
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the specified {@link Converter}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentClassicTagBase} instance, if
-     * the {@link UIComponent} instance was created by this execution of the
-     * containing JSP page.  If the localValue of the
-     * {@link UIComponent} is a String, attempt to convert it.</p></p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) { // PENDING - i18n
-            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }
-
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {            
-            //PENDING i18n
-            throw new JspException("Can't create Component from tag.");
-        }
-        if (!(component instanceof ValueHolder)) {
-            //PENDING i18n
-            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-        
-        Converter converter = createConverter();
-        
-        if (converter == null) {
-            throw new JspException("Can't create class of type:"+
-                    " javax.faces.convert.Converter, converter is null");
-        }
-        
-        ValueHolder vh = (ValueHolder)component;
-        FacesContext context = FacesContext.getCurrentInstance();
-        
-        // Register an instance with the appropriate component
-        vh.setConverter(converter);
-        
-        // Once the converter has been set, attempt to convert the
-        // incoming "value"
-        Object localValue = vh.getLocalValue();
-        if (localValue instanceof String) {
-            try {
-                localValue = converter.getAsObject(context, (UIComponent)vh, (String) localValue);
-                vh.setValue(localValue);
-            }
-            catch (ConverterException ce) {
-                // PENDING - Ignore?  Throw an exception?  Set the local
-                // value back to "null" and log a warning?
-            }
-        }        
-  
-        return (SKIP_BODY);
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Create and return a new {@link Converter} to be registered
-     * on our surrounding {@link UIComponent}.</p>
-     *
-     * @throws JspException if a new instance cannot be created
-     */
-    protected abstract Converter createConverter()
-        throws JspException;
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/ConverterTag.java b/jsf-api/src/main/java/javax/faces/webapp/ConverterTag.java
deleted file mode 100644
index 06e784a..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/ConverterTag.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-
-
-
-
-
-/**
- * <p><strong>ConverterTag</strong> is a base class for all JSP custom actions
- * that create and register a <code>Converter</code> instance on the
- * {@link ValueHolder} associated with our most immediate
- * surrounding instance of a tag whose implementation class is a subclass
- * of {@link UIComponentTag}.  To avoid creating duplicate instances when
- * a page is redisplayed, creation and registration of a {@link Converter}
- * occurs <strong>only</strong> if the corresponding {@link UIComponent} was
- * created (by the owning {@link UIComponentTag}) during the execution of the
- * current page.</p>
- *
- * <p>This class may be used directly to implement a generic converter
- * registration tag (based on the converter-id specified by the
- * <code>converterId</code> attribute), or as a base class for tag
- * instances that support specific {@link Converter} subclasses.  This
- * <code>converterId</code> attribute must refer to one of the well
- * known converter-ids, or a custom converter-id as defined in a
- * <code>faces-config.xml</code> file.</p>
- *
- * <p>Subclasses of this class must implement the
- * <code>createConverter()</code> method, which creates and returns a
- * {@link Converter} instance.  Any configuration properties that specify
- * behavior of this {@link Converter} must have been set by the
- * <code>createConverter()</code> method.  Generally, this occurs
- * by copying corresponding attribute values on the tag instance.</p>
- *
- * <p>This tag creates no output to the page currently being created.  It
- * is used solely for the side effect of {@link Converter} creation.</p>
- *
- * @deprecated This has been partially replaced by {@link
- * ConverterELTag}.  The remainder of the functionality, namely, the
- * binding facility and the implementation of the {@link
- * #createConverter} method, is now an implementation detail.
- */
-
-public class ConverterTag extends TagSupport {
-
-
-    // ---------------------------------------------------------- Static Members
-
-
-    private static final long serialVersionUID = -5909792518081427720L;
-
-
-    // -------------------------------------------------------------- Attributes
-
-    /**
-     * <p>The identifier of the {@link Converter} instance to be created.</p>
-     */
-    private String converterId = null;
-    
-    /**
-     * <p>The {@link ValueExpression} that evaluates to an object that 
-     * implements {@link Converter}.</p>
-     */
-    private String binding = null;
-
-    /**
-     * <p>Set the identifer of the {@link Converter} instance to be created.
-     *
-     * @param converterId The identifier of the converter instance to be
-     * created.
-     */
-    public void setConverterId(String converterId) {
-
-        this.converterId = converterId;
-
-    }
-
-    /**
-     * <p>Set the expression that will be used to create a {@link ValueExpression}
-     * that references a backing bean property of the {@link Converter} instance to 
-     * be created.</p>
-     *
-     * @param binding The new expression
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public void setBinding(String binding) 
-        throws JspException {
-        if (binding!= null && !UIComponentTag.isValueReference(binding)) {
-            // PENDING i18n
-            throw new JspException("Invalid Expression:"+binding);
-        }
-        this.binding = binding;
-    }
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the specified {@link Converter}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentTag} instance, if
-     * the {@link UIComponent} instance was created by this execution of the
-     * containing JSP page.  If the localValue of the
-     * {@link UIComponent} is a String, attempt to convert it.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-            UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) { // PENDING - i18n
-            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }
-
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {            
-            //PENDING i18n
-            throw new JspException("Can't create Component from tag.");
-        }
-        if (!(component instanceof ValueHolder)) {
-            //PENDING i18n
-            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-        
-        Converter converter = createConverter();
-        
-        if (converter == null) {
-            //noinspection NonConstantStringShouldBeStringBuffer
-            String converterError = null;
-            if (binding != null) {
-                converterError = binding;
-            }
-            if (converterId != null) {
-                if (converterError != null) {
-                    converterError += " or " + converterId;
-                } else {
-                    converterError = converterId;
-                }
-            }
-
-            // PENDING i18n
-            throw new JspException("Can't create class of type:"+
-                    "javax.faces.convert.Converter for:"+converterError);
-        }
-
-        ValueHolder vh = (ValueHolder)component;
-        FacesContext context = FacesContext.getCurrentInstance();
-        
-        // Register an instance with the appropriate component
-        vh.setConverter(converter);
-        
-        // Once the converter has been set, attempt to convert the
-        // incoming "value"
-        Object localValue = vh.getLocalValue();
-        if (localValue instanceof String) {
-            try {
-                localValue = converter.getAsObject(context, (UIComponent)vh, (String) localValue);
-                vh.setValue(localValue);
-            }
-            catch (ConverterException ce) {
-                // PENDING - Ignore?  Throw an exception?  Set the local
-                // value back to "null" and log a warning?
-            }
-        }        
-  
-        return (SKIP_BODY);
-
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.converterId = null;
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Create and return a new {@link Converter} to be registered
-     * on our surrounding {@link UIComponent}.</p>
-     *
-     * @throws JspException if a new instance cannot be created
-     */
-    protected Converter createConverter()
-        throws JspException {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        Converter converter = null;
-        ValueExpression vb = null;
-        
-        // If "binding" is set, use it to create a converter instance.
-        if (binding != null) {
-            try {
-		vb = 
-                context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), binding, Object.class);
-		if (vb != null) {
-                    converter = (Converter)vb.getValue(context.getELContext());
-                    if (converter != null) {
-                        return converter;
-                    }
-                }
-            } catch (Exception e) {
-                throw new JspException(e);
-            }
-        }
-        // If "converterId" is set, use it to create the converter
-        // instance.  If "converterId" and "binding" are both set, store the 
-        // converter instance in the value of the property represented by
-        // the value binding expression.      
-        if (converterId != null) {
-            try {
-                String converterIdVal = converterId;
-                if (UIComponentTag.isValueReference(converterId)) {
-                    ValueExpression idBinding =
-                        context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), converterId, Object.class);
-                    converterIdVal = (String) idBinding.getValue(context.getELContext());
-                }
-                converter = context.getApplication().createConverter(converterIdVal);
-                if (converter != null) {
-                    if (vb != null) {
-                        vb.setValue(context.getELContext(), converter);
-                    }
-                }
-            } catch (Exception e) {
-                throw new JspException(e);
-            }
-        }
-        return converter;
-    }
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/FacesServlet.java b/jsf-api/src/main/java/javax/faces/webapp/FacesServlet.java
deleted file mode 100644
index 789f2e0..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/FacesServlet.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import java.util.ResourceBundle;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.application.ResourceHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.UnavailableException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-
-/**
- * <p><strong class="changed_modified_2_0">FacesServlet</strong> is a
- * servlet that manages the request processing lifecycle for web
- * applications that are utilizing JavaServer Faces to construct the
- * user interface.</p>
- */
-
-public final class FacesServlet implements Servlet {
-
-
-    /**
-     * <p>Context initialization parameter name for a comma delimited list
-     * of context-relative resource paths (in addition to
-     * <code>/WEB-INF/faces-config.xml</code> which is loaded automatically
-     * if it exists) containing JavaServer Faces configuration information.</p>
-     */
-    public static final String CONFIG_FILES_ATTR =
-        "javax.faces.CONFIG_FILES";
-
-
-    /**
-     * <p>Context initialization parameter name for the lifecycle identifier
-     * of the {@link Lifecycle} instance to be utilized.</p>
-     */
-    public static final String LIFECYCLE_ID_ATTR =
-        "javax.faces.LIFECYCLE_ID";
-
-
-    /**
-     * The <code>Logger</code> for this class.
-     */
-    private static final Logger LOGGER =
-          Logger.getLogger("javax.faces.webapp", "javax.faces.LogStrings");
-
-
-    /**
-     * <p>Factory for {@link FacesContext} instances.</p>
-     */
-    private FacesContextFactory facesContextFactory = null;
-
-
-    /**
-     * <p>The {@link Lifecycle} instance to use for request processing.</p>
-     */
-    private Lifecycle lifecycle = null;
-
-
-    /**
-     * <p>The <code>ServletConfig</code> instance for this servlet.</p>
-     */
-    private ServletConfig servletConfig = null;
-
-
-    /**
-     * <p>Release all resources acquired at startup time.</p>
-     */
-    public void destroy() {
-
-        facesContextFactory = null;
-        lifecycle = null;
-        servletConfig = null;
-
-    }
-
-
-    /**
-     * <p>Return the <code>ServletConfig</code> instance for this servlet.</p>
-     */
-    public ServletConfig getServletConfig() {
-
-        return (this.servletConfig);
-
-    }
-
-
-    /**
-     * <p>Return information about this Servlet.</p>
-     */
-    public String getServletInfo() {
-
-        return (this.getClass().getName());
-
-    }
-
-
-    /**
-     * <p>Acquire the factory instances we will require.</p>
-     *
-     * @throws ServletException if, for any reason, the startup of
-     * this Faces application failed.  This includes errors in the
-     * config file that is parsed before or during the processing of
-     * this <code>init()</code> method.
-     */
-    public void init(ServletConfig servletConfig) throws ServletException {
-
-        // Save our ServletConfig instance
-        this.servletConfig = servletConfig;
-
-        // Acquire our FacesContextFactory instance
-        try {
-            facesContextFactory = (FacesContextFactory)
-                FactoryFinder.getFactory
-                (FactoryFinder.FACES_CONTEXT_FACTORY);
-        } catch (FacesException e) {
-            ResourceBundle rb = LOGGER.getResourceBundle();
-            String msg = rb.getString("severe.webapp.facesservlet.init_failed");
-            Throwable rootCause = (e.getCause() != null) ? e.getCause() : e;
-            LOGGER.log(Level.SEVERE, msg, rootCause);
-            throw new UnavailableException(msg);
-        }
-
-        // Acquire our Lifecycle instance
-        try {
-            LifecycleFactory lifecycleFactory = (LifecycleFactory)
-                FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-            String lifecycleId ;
-
-            // First look in the servlet init-param set
-            if (null == (lifecycleId = servletConfig.getInitParameter(LIFECYCLE_ID_ATTR))) {
-                // If not found, look in the context-param set 
-                lifecycleId = servletConfig.getServletContext().getInitParameter
-                    (LIFECYCLE_ID_ATTR);
-            }
-
-            if (lifecycleId == null) {
-                lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
-            }
-            lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
-        } catch (FacesException e) {
-            Throwable rootCause = e.getCause();
-            if (rootCause == null) {
-                throw e;
-            } else {
-                throw new ServletException(e.getMessage(), rootCause);
-            }
-        }
-
-    }
-
-
-    /**
-     * <p class="changed_modified_2_0">Process an incoming request, and create the
-     * corresponding response according to the following
-     * specification.</p>
-     * 
-     * <div class="changed_modified_2_0">
-     *
-     * <p>If the <code>request</code> and <code>response</code>
-     * arguments to this method are not instances of
-     * <code>HttpServletRequest</code> and
-     * <code>HttpServletResponse</code>, respectively, the results of
-     * invoking this method are undefined.</p>
-     *
-     * <p>This method must respond to requests that start with the
-     * following strings by invoking the <code>sendError</code> method
-     * on the response argument (cast to
-     * <code>HttpServletResponse</code>), passing the code
-     * <code>HttpServletResponse.SC_NOT_FOUND</code> as the
-     * argument. </p>
-     *
-     * <ul>
-     *
-<pre><code>
-/WEB-INF/
-/WEB-INF
-/META-INF/
-/META-INF
-</code></pre>
-     *
-     * </ul>
-     *
-     
-     * <p>If none of the cases described above in the specification for
-     * this method apply to the servicing of this request, the following
-     * action must be taken to service the request.</p>
-
-     * <p>Acquire a {@link FacesContext} instance for this request.</p>
-
-     * <p>Acquire the <code>ResourceHandler</code> for this request by
-     * calling {@link
-     * javax.faces.application.Application#getResourceHandler}.  Call
-     * {@link
-     * javax.faces.application.ResourceHandler#isResourceRequest}.  If
-     * this returns <code>true</code> call {@link
-     * javax.faces.application.ResourceHandler#handleResourceRequest}.
-     * If this returns <code>false</code>, call {@link
-     * javax.faces.lifecycle.Lifecycle#execute} followed by {@link
-     * javax.faces.lifecycle.Lifecycle#render}.  If a {@link
-     * javax.faces.FacesException} is thrown in either case, extract the
-     * cause from the <code>FacesException</code>.  If the cause is
-     * <code>null</code> extract the message from the
-     * <code>FacesException</code>, put it inside of a new
-     * <code>ServletException</code> instance, and pass the
-     * <code>FacesException</code> instance as the root cause, then
-     * rethrow the <code>ServletException</code> instance.  If the cause
-     * is an instance of <code>ServletException</code>, rethrow the
-     * cause.  If the cause is an instance of <code>IOException</code>,
-     * rethrow the cause.  Otherwise, create a new
-     * <code>ServletException</code> instance, passing the message from
-     * the cause, as the first argument, and the cause itself as the
-     * second argument.</p>
-
-     * In a finally block, {@link
-     * javax.faces.context.FacesContext#release} must be called.
-
-     * </div>
-     *
-     * @param request The servlet request we are processing
-     * @param response The servlet response we are creating
-     *
-     * @throws IOException if an input/output error occurs during processing
-     * @throws ServletException if a servlet error occurs during processing
-
-     */
-    public void service(ServletRequest request,
-                        ServletResponse response)
-        throws IOException, ServletException {
-
-        requestStart(((HttpServletRequest) request).getRequestURI()); // V3 Probe hook
-
-        // If prefix mapped, then ensure requests for /WEB-INF are
-        // not processed.
-        String pathInfo = ((HttpServletRequest) request).getPathInfo();
-        if (pathInfo != null) {
-            pathInfo = pathInfo.toUpperCase();
-            if (pathInfo.startsWith("/WEB-INF/")
-                || pathInfo.equals("/WEB-INF")
-                || pathInfo.startsWith("/META-INF/")
-                || pathInfo.equals("/META-INF")) {
-                ((HttpServletResponse) response).
-                      sendError(HttpServletResponse.SC_NOT_FOUND);
-                return;
-            }
-        }    
-        
-        // Acquire the FacesContext instance for this request
-        FacesContext context = facesContextFactory.getFacesContext
-              (servletConfig.getServletContext(), request, response, lifecycle);
-
-        // Execute the request processing lifecycle for this request
-        try {
-            ResourceHandler handler =
-                  context.getApplication().getResourceHandler();
-            if (handler.isResourceRequest(context)) {
-                handler.handleResourceRequest(context);
-            } else {
-                lifecycle.execute(context);
-                lifecycle.render(context);
-            }
-        } catch (FacesException e) {
-            Throwable t = e.getCause();
-            if (t == null) {
-                throw new ServletException(e.getMessage(), e);
-            } else {
-                if (t instanceof ServletException) {
-                    throw ((ServletException) t);
-                } else if (t instanceof IOException) {
-                    throw ((IOException) t);
-                } else {
-                    throw new ServletException(t.getMessage(), t);
-                }
-            }
-        }
-
-        requestEnd(); // V3 Probe hook
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * DO NOT REMOVE. Necessary for V3 probe monitoring.
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    private void requestStart(String requestUri) { }
-
-
-    /**
-     * DO NOT REMOVE. Necessary for V3 probe monitoring.
-     */
-    private void requestEnd() { }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/FacetTag.java b/jsf-api/src/main/java/javax/faces/webapp/FacetTag.java
deleted file mode 100644
index 2fc421d..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/FacetTag.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-
-/**
- * <p><strong>FacetTag</strong> is the JSP mechanism for denoting a
- * {@link javax.faces.component.UIComponent} is to be added as a
- * <code>facet</code> to the component associated with its parent.</p>
- *
- * <p>A <strong>FacetTag</strong> must have one and only one
- * child.  This child must be a {@link UIComponentTag} instance representing
- * a single {@link javax.faces.component.UIComponent} instance.</p>
- */
-
-public class FacetTag extends TagSupport {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>The name of this facet.  This will be used as the facet name for
-     * our <code>UIComponentTag</code> child in our <code>UIComponentTag</code>
-     * parent's facet list.</p>
-     */ 
-    private String name = null;
-
-
-    /**
-     * <p>Return the name to be assigned to this facet.</p>
-     */
-    public String getName() {
-
-	return (name);
-
-    }
-    
-
-    /**
-     * <p>Set the name to be assigned to this facet.</p>
-     *
-     * @param name The new facet name
-     */
-    public void setName(String name) {
-
-	this.name = name;
-
-    }
-
-
-    // ------------------------------------------------------------- Tag Methods
-
-
-    /**
-     * <p>Release any resources allocated by this tag instance.
-     */
-    public void release() {
-
-        super.release();
-        this.name = null;
-
-    }
-
-
-    /**
-     * <p>Return <code>EVAL_BODY_INCLUDE</code> to cause nested body
-     * content to be evaluated.</p>
-     */
-    public int doStartTag() throws JspException {
-
-        return (EVAL_BODY_INCLUDE);
-
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/PreJsf2ExceptionHandlerFactory.java b/jsf-api/src/main/java/javax/faces/webapp/PreJsf2ExceptionHandlerFactory.java
deleted file mode 100644
index c350b8f..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/PreJsf2ExceptionHandlerFactory.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.util.LinkedList;
-import java.util.Collections;
-import java.util.Iterator;
-
-import javax.faces.context.ExceptionHandlerFactory;
-import javax.faces.context.ExceptionHandler;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.event.PhaseId;
-import javax.el.ELException;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UpdateModelException;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p class="changed_added_2_0">This {@link ExceptionHandlerFactory} instance 
- * produces JSF 1.2 compatible
- * {@link ExceptionHandler} instances.  The {@link ExceptionHandler#handle} 
- * method of the <code>ExceptionHandler</code> produced by this factory must 
- * meet the following requirements</p>
- * <div class="changed_added_2_0">
- * 
- * <ul>
- * 
- * <li><p>Any
- * exceptions thrown before or after phase execution will be logged and 
- * swallowed.</p></li>
- * 
- * <li><p>The implementation must examine
- * the <code>Exception</code> within each of the unhandled exception
- * events.  If the <code>Exception</code> is an instance of
- * {@link UpdateModelException}, extract the {@link FacesMessage} from
- * the <code>UpdateModelException</code>.  Log a <code>SEVERE</code>
- * message to the log and queue the <code>FacesMessage</code> 
- * on the {@link FacesContext}, using the <code>clientId</code> of
- * the source component in a call to 
- * {@link FacesContext#addMessage(java.lang.String, javax.faces.application.FacesMessage)}</p></li>
- * 
- * </ul>
- * 
- * </div>
- *
- * @since 2.0
- */
-public class PreJsf2ExceptionHandlerFactory extends ExceptionHandlerFactory {
-
-
-    // ------------------------------------ Methods from ExceptionHandlerFactory
-
-
-    /**
-     * @return a new {@link ExceptionHandler} that behaves in a fashion compatible
-     *  with specifications prior to JavaServerFaces 1.2
-     */
-    public ExceptionHandler getExceptionHandler() {
-
-        return new PreJsf2ExceptionHandler();
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * JSF 1.2-style <code>ExceptionHandler</code> implementation.
-     */
-    private static final class PreJsf2ExceptionHandler extends ExceptionHandler {
-
-
-        private static final Logger LOGGER =
-              Logger.getLogger("javax.faces.webapp", "javax.faces.LogStrings");
-
-        private static final String LOG_BEFORE_KEY =
-              "servere.webapp.prejsf2.exception.handler.log_before";
-        private static final String LOG_AFTER_KEY =
-              "servere.webapp.prejsf2.exception.handler.log_after";
-        private static final String LOG_KEY =
-              "servere.webapp.prejsf2.exception.handler.log";
-
-
-        private LinkedList<ExceptionQueuedEvent> unhandledExceptions;
-        private LinkedList<ExceptionQueuedEvent> handledExceptions;
-        private ExceptionQueuedEvent handled;
-
-
-        // ------------------------------------------- Methods from ExceptionHandler
-
-
-        /**
-         * @see ExceptionHandler at getHandledExceptionQueuedEvent()
-         */
-        public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
-
-            return handled;
-
-        }
-
-
-        /**
-         * 
-         * 
-         * @since 2.0
-         */
-        public void handle() throws FacesException {
-
-            for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();) {
-                ExceptionQueuedEvent event = i.next();
-                ExceptionQueuedEventContext context =
-                      (ExceptionQueuedEventContext) event.getSource();
-                try {
-                    Throwable t = context.getException();
-                    if (isRethrown(t, (context.inBeforePhase() || context.inAfterPhase()))) {
-                        handled = event;
-                        Throwable unwrapped = getRootCause(t);
-                        if (unwrapped != null) {
-                            throw new FacesException(unwrapped.getMessage(), unwrapped);
-                        } else {
-                            if (t instanceof FacesException) {
-                                throw (FacesException) t;
-                            } else {
-                                throw new FacesException(t.getMessage(), t);
-                            }
-                        }
-                    } else {
-                        log(context);
-                    }
-
-                } finally {
-                    if (handledExceptions == null) {
-                        handledExceptions =
-                              new LinkedList<ExceptionQueuedEvent>();
-                    }
-                    handledExceptions.add(event);
-                    i.remove();
-                }
-            }
-
-        }
-
-
-        /**
-         * @see javax.faces.context.ExceptionHandler#isListenerForSource(Object)
-         */
-        public boolean isListenerForSource(Object source) {
-
-            return (source instanceof ExceptionQueuedEventContext);
-
-        }
-
-
-        /**
-         * @see javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)
-         */
-        public void processEvent(SystemEvent event)
-              throws AbortProcessingException {
-
-            if (event != null) {
-                if (unhandledExceptions == null) {
-                    unhandledExceptions = new LinkedList<ExceptionQueuedEvent>();
-                }
-                unhandledExceptions.add((ExceptionQueuedEvent) event);
-            }
-
-        }
-
-
-        /**
-         * @see ExceptionHandler#getRootCause(Throwable)
-         */
-        public Throwable getRootCause(Throwable t) {
-
-            if (t == null) {
-                return null;
-            }
-            if (shouldUnwrap(t.getClass())) {
-                Throwable root = t.getCause();
-                if (root != null) {
-                    Throwable tmp = getRootCause(root);
-                    if (tmp == null) {
-                        return root;
-                    } else {
-                        return tmp;
-                    }
-                } else {
-                    return t;
-                }
-            }
-            return t;
-
-        }
-
-
-        /**
-         * @see javax.faces.context.ExceptionHandler#getUnhandledExceptionQueuedEvents()
-         */
-        public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
-
-            return ((unhandledExceptions != null)
-                    ? unhandledExceptions
-                    : Collections.<ExceptionQueuedEvent>emptyList());
-
-        }
-
-
-        /**
-         * @return
-         *
-         * @see javax.faces.context.ExceptionHandler#getHandledExceptionQueuedEvents()
-         */
-        public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
-
-            return ((handledExceptions != null)
-                    ? handledExceptions
-                    : Collections.<ExceptionQueuedEvent>emptyList());
-
-        }
-
-
-        // --------------------------------------------------------- Private Methods
-
-
-        /**
-         * @param c <code>Throwable</code> implementation class
-         *
-         * @return <code>true</code> if <code>c</code> is FacesException.class or
-         *         ELException.class
-         */
-        private boolean shouldUnwrap(Class<? extends Throwable> c) {
-
-            return (FacesException.class.equals(c) || ELException.class.equals(c));
-
-        }
-
-
-        private boolean isRethrown(Throwable t, boolean isBeforeOrAfterPhase) {
-
-            return (!isBeforeOrAfterPhase &&
-                    !(t instanceof AbortProcessingException) &&
-                    !(t instanceof UpdateModelException));
-
-        }
-
-        
-        private void log(ExceptionQueuedEventContext exceptionContext) {
-
-            Throwable t = exceptionContext.getException();
-            UIComponent c = exceptionContext.getComponent();
-            if (t instanceof UpdateModelException) {
-                FacesContext context = FacesContext.getCurrentInstance();
-                FacesMessage message = ((UpdateModelException)t).getFacesMessage();
-                LOGGER.log(Level.SEVERE, message.getSummary(), t.getCause());
-                context.addMessage(c.getClientId(context), message);
-            } else {
-                boolean beforePhase = exceptionContext.inBeforePhase();
-                boolean afterPhase = exceptionContext.inAfterPhase();
-                PhaseId phaseId = exceptionContext.getPhaseId();
-                String key = getLoggingKey(beforePhase, afterPhase);
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                            key,
-                            new Object[]{t.getClass().getName(),
-                                        phaseId.toString(),
-                                        ((c != null)
-                                         ? c.getClientId(exceptionContext.getContext())
-                                         : ""),
-                                        t.getMessage()});
-                    LOGGER.log(Level.SEVERE, t.getMessage(), t);
-                }
-            }
-
-        }
-
-        private String getLoggingKey(boolean beforePhase, boolean afterPhase) {
-            if (beforePhase) {
-                return LOG_BEFORE_KEY;
-            } else if (afterPhase) {
-                return LOG_AFTER_KEY;
-            } else {
-                return LOG_KEY;
-            }
-        }
-
-    } // END PreJsf2ExceptionHandler
-    
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/UIComponentBodyTag.java b/jsf-api/src/main/java/javax/faces/webapp/UIComponentBodyTag.java
deleted file mode 100644
index 6b279cb..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/UIComponentBodyTag.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-/**
- * <p><strong>UIComponentBodyTag</strong> is a base class for all JSP custom
- * actions, related to a UIComponent, that need to process their tag bodies.
- * </p>
- *
- * @deprecated All component tags now implement <code>BodyTag</code>.
- * This class has been replaced by {@link UIComponentELTag}.
- */
-
-public abstract class UIComponentBodyTag extends UIComponentTag {
-
-    // remove all methods since UIComponentTag is now a body tag.
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/UIComponentClassicTagBase.java b/jsf-api/src/main/java/javax/faces/webapp/UIComponentClassicTagBase.java
deleted file mode 100644
index 7864f54..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/UIComponentClassicTagBase.java
+++ /dev/null
@@ -1,1942 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.jstl.core.LoopTag;
-import javax.servlet.jsp.tagext.BodyContent;
-import javax.servlet.jsp.tagext.BodyTag;
-import javax.servlet.jsp.tagext.JspIdConsumer;
-import javax.servlet.jsp.tagext.Tag;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-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 java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Level;
-
-
-/**
- * <p><strong><code>UIComponentTagBase</code></strong> is the base class
- * for all JSP tags that use the "classic" JSP tag interface that
- * correspond to a {@link javax.faces.component.UIComponent} instance in
- * the view.  In Faces 1.2, all component tags are <code>BodyTag</code>
- * instances to allow for the execution of the page to build the
- * component tree, but not render it.  Rendering happens only after the
- * component tree is completely built.</p>
- *
- * <p>{@link UIComponentTag} extends
- * <code>UIComponentClassicTagBase</code> to add support for properties
- * that conform to the Faces 1.1 EL.</p>
- *
- * <p>{@link UIComponentELTag} extends
- * <code>UIComponentClassicTagBase</code> class to add support for
- * properties that conform to the EL API.</p>
- *
- * <p>The default implementation allows the proper interweaving of
- * template text, non-Faces JSP tag output, and Faces component tag
- * output in the same page, as expected by the page author.</p>
- *
- * <p>The CASE markers in the following example will be cited in the
- * method descriptions of this class.</p>
- *
- * <ul>
- *
- * <li><p>CASE 1 describes template text and/or non-component custom tag
- * output occurring as the child of a component tag, but before the
- * first component tag child of that component tag.</p></li>
- *
- * <li><p>CASE 2 describes template text and/or non-component custom tag
- * output occurring between two sibling component tags.</p></li>
- *
- * <li><p>CASE 3 describes template text and/or non-component custom tag
- * output occurring as the child content of an <f:verbatim>
- * tag at any point in the page.</p></li>
- *
- * <li><p>CASE 4 describes template text and/or non-component custom tag
- * output occurring between the last child component tag and its
- * enclosing parent component tag's end tag.</p></li>
- *
- * </ul>
- *
- * <code><pre>
-
-    <h:panelGrid style="color:red" border="4" columns="2">
-      CASE 1
-      <h:outputText value="component 1"/>
-      CASE 2
-      <h:outputText value="component 2"/>
-      <f:verbatim>CASE 3</f:verbatim>
-      <c:out value="${pageScope.CASE4}" />
-    </h:panelGrid>
-
- * </pre></code>
- *
- * <p>The preceding arrangement of faces component tags, must yield
- * markup that will render identically to the following (assuming that
- * <code>${pageScope.CASE4}</code> evaluates to "<code>CASE 4</code>"
- * without the quotes).</p>
- *
- * <code><pre>
-
-<table border="4" style="color:red">
-
-  <tbody>
-
-    <tr><td>CASE 1</td></tr> <tr><td>component 1</td></tr>
-
-    <tr><td>CASE 2</td> <tr><td>component 2</td></tr>
-
-    <tr><td>CASE 3</td> <td>CASE 4</td></tr>
-
-  </tbody>
-
-</table>
-
- * </pre></code>
-
- *
- */
-
-public abstract class UIComponentClassicTagBase extends UIComponentTagBase implements JspIdConsumer, BodyTag {
-
-    // ------------------------------------------------------ Manifest Constants
-    /**
-     * <p>The facesContext scope attribute under which a component tag stack
-     * for the current facesContext will be maintained.</p>
-     */
-    private static final String COMPONENT_TAG_STACK_ATTR =
-        "javax.faces.webapp.COMPONENT_TAG_STACK";
-
-    /**
-     * <p>The {@link UIComponent} attribute under which we will store a
-     * <code>List</code> of the component identifiers of child components
-     * created on the previous generation of this page (if any).</p>
-     */
-    private static final String JSP_CREATED_COMPONENT_IDS =
-        "javax.faces.webapp.COMPONENT_IDS";
-
-
-    /**
-     * <p>The {@link UIComponent} attribute under which we will store a
-     * <code>List</code> of the facet names of facets created on the previous
-     * generation of this page (if any).
-     */
-    private static final String JSP_CREATED_FACET_NAMES =
-        "javax.faces.webapp.FACET_NAMES";
-
-
-    /**
-     * <p>The attribute name under which we will store all {@link UIComponent}
-     * IDs of the current translation unit.</p>
-     */
-    private static final String GLOBAL_ID_VIEW =
-        "javax.faces.webapp.GLOBAL_ID_VIEW";
-
-    /**
-     * <p>The attribute name under which we will store the {@link FacesContext}
-     * for this request.</p>
-     */
-    private static final String CURRENT_FACES_CONTEXT =
-        "javax.faces.webapp.CURRENT_FACES_CONTEXT";
-
-    /**
-     * <p>The attribute name under which we will store the {@link UIViewRoot}
-     * for this request.</p>
-     */
-    private static final String CURRENT_VIEW_ROOT =
-        "javax.faces.webapp.CURRENT_VIEW_ROOT";
-
-    /**
-     * Used as the prefix for ids.  This is necessary to avoid
-     * uniqueness conflicts with the transient verbatim components.
-     */
-    protected static final String UNIQUE_ID_PREFIX =
-	UIViewRoot.UNIQUE_ID_PREFIX + '_';
-
-    /**
-     * Used to store the previousJspId Map in facesContextScope
-     */
-    private static final String PREVIOUS_JSP_ID_SET =
-	"javax.faces.webapp.PREVIOUS_JSP_ID_SET";
-
-    /**
-     * This is a <code>Page</code> scoped marker to help us
-     * keep track of the different execution context we could
-     * be operating within, e.g. an include, or a tag file.
-     * The value of the attribute is an Integer that is unqiue
-     * to this page context.
-     */
-    private static final String JAVAX_FACES_PAGECONTEXT_MARKER =
-         "javax.faces.webapp.PAGECONTEXT_MARKER";
-
-    /**
-     * This is a <code>facesContext</code> scoped attribute which contains
-     * an AtomicInteger which we use to increment the PageContext
-     * count.
-     */
-    private static final String JAVAX_FACES_PAGECONTEXT_COUNTER =
-         "javax.faces.webapp.PAGECONTEXT_COUNTER";
-
-    // ------------------------------------------------------ Instance Variables
-    /**
-     * <p>The <code>bodyContent</code> for this tag handler.</p>
-     */
-    protected BodyContent bodyContent = null;
-
-    /**
-     * <p>The {@link UIComponent} that is being encoded by this tag,
-     * if any.</p>
-     */
-    private UIComponent component = null;
-
-
-    /**
-     * <p>The {@link FacesContext} for the request being processed, if any.
-     * </p>
-     */
-    private FacesContext context = null;
-
-
-    /**
-     * <p>Was a new component instance dynamically created when our
-     * <code>findComponent()</code> method was called.</p>
-     */
-    private boolean created = false;
-
-
-    /**
-     * <p>The <code>Lst</code> of {@link UIComponent} ids created or located
-     * by nested {@link UIComponentTag}s while processing the current
-     * request.</p>
-     */
-    private List<String> createdComponents = null;
-
-
-    /**
-     * <p>The <code>List</code> of facet names created or located by nested
-     * {@link UIComponentTag}s while processing the current request.</p>
-     */
-    private List<String> createdFacets = null;
-
-
-    /**
-     * <p>The JSP <code>PageContext</code> for the page we are embedded in.</p>
-     */
-    protected PageContext pageContext = null;
-
-
-    /**
-     * <p>The JSP <code>Tag</code> that is the parent of this tag.</p>
-     */
-    private Tag parent = null;
-
-    /**
-     * {@link #setJspId}
-     */
-
-    private String jspId = null;
-
-    /**
-     * Only consulted in setJspId to detect the iterator case.
-     * Set in {@link #release}.  Never cleared.
-     */
-
-    //private String oldJspId = null;
-
-    /**
-     * This is simply the jspId prefixed by {@link #UNIQUE_ID_PREFIX}.
-     */
-
-    private String facesJspId = null;
-
-    /**
-     * <p>The component identifier for the associated component.</p>
-     */
-    private String id = null;
-
-    /**
-     * Caches the nearest enclosing {@link UIComponentClassicTagBase} of this
-     * tag. This is used for duplicate id detection.
-     */
-    private UIComponentClassicTagBase parentTag = null;
-
-    /**
-     * Set to true if this component is nested inside of an iterating
-     * tag
-     */
-    private boolean isNestedInIterator = false;
-
-    // --------------------------------------------- Support Methods for Tag
-
-    //
-    // Simple methods to be overridden by subclasses if necessary
-    //
-
-    /**
-     * <p>Return the flag value that should be returned from the
-     * <code>doStart()</code> method when it is called.  Subclasses
-     * may override this method to return the appropriate value.</p>
-     *
-     * @throws JspException to cause <code>doStart()</code> to
-     *  throw an exception
-     */
-    protected int getDoStartValue() throws JspException {
-
-	int result = EVAL_BODY_BUFFERED;
-
-	return result;
-    }
-
-    /**
-     * <p>Return the flag value that should be returned from the
-     * <code>doEnd()</code> method when it is called.  Subclasses
-     * may override this method to return the appropriate value.</p>
-     *
-     * @throws JspException to cause <code>doEnd()</code> to
-     *  throw an exception
-     */
-    protected int getDoEndValue() throws JspException {
-
-        return (EVAL_PAGE);
-
-    }
-
-    /**
-     * <p>Delegate to the <code>encodeBegin()</code> method of our
-     * corresponding {@link UIComponent}.  This method is called from
-     * <code>doStartTag()</code>.  Normally, delegation occurs unconditionally;
-     * however, this method is abstracted out so that advanced tags can
-     * conditionally perform this call.
-     *
-     * @throws IOException if an input/output error occurs
-     *
-     * @deprecated No encoding is done during JSP page execution.
-     * Encoding is deferred until the page has completed executing to
-     * allow the entire tree to be built before any encoding occurs.
-     */
-    protected void encodeBegin() throws IOException {
-
-        component.encodeBegin(context);
-
-    }
-
-
-    /**
-     * <p>Delegate to the <code>encodeChildren()</code> method of our
-     * corresponding {@link UIComponent}.  This method is called from
-     * <code>doStartTag()</code>.  Normally, delegation occurs unconditionally;
-     * however, this method is abstracted out so that advanced tags can
-     * conditionally perform this call.
-     *
-     * @throws IOException if an input/output error occurs
-     *
-     * @deprecated No encoding is done during JSP page execution.
-     * Encoding is deferred until the page has completed executing to
-     * allow the entire tree to be built before any encoding occurs.
-     */
-    protected void encodeChildren() throws IOException {
-
-        component.encodeChildren(context);
-
-    }
-
-
-    /**
-     * <p>Delegate to the <code>encodeEnd()</code> method of our
-     * corresponding {@link UIComponent}.  This method is called from
-     * <code>doStartTag()</code>.  Normally, delegation occurs unconditionally;
-     * however, this method is abstracted out so that advanced tags can
-     * conditionally perform this call.
-     *
-     * @throws IOException if an input/output error occurs
-     *
-     * @deprecated No encoding is done during JSP page execution.
-     * Encoding is deferred until the page has completed executing to
-     * allow the entire tree to be built before any encoding occurs.
-     */
-    protected void encodeEnd() throws IOException {
-
-        component.encodeEnd(context);
-
-    }
-
-    // --------------------------------------------------------- Tag Properties
-
-
-    /**
-     * <p>Set the <code>PageContext</code> of the page containing this
-     * tag instance.</p>
-     *
-     * @param pageContext The enclosing <code>PageContext</code>
-     */
-    public void setPageContext(PageContext pageContext) {
-
-        this.pageContext = pageContext;
-
-    }
-
-
-    /**
-     * <p>Return the <code>Tag</code> that is the parent of this instance.</p>
-     */
-    public Tag getParent() {
-
-        return (this.parent);
-
-    }
-
-
-    /**
-     * <p>Set the <code>Tag</code> that is the parent of this instance.</p>
-     *
-     * @param parent The new parent <code>Tag</code>
-     */
-    public void setParent(Tag parent) {
-
-        this.parent = parent;
-
-    }
-
-
-
-
-    //
-    // Complex methods to support Tag
-    //
-
-    /**
-     * <p>Set up the {@link javax.faces.context.ResponseWriter} for the
-     * current response, if this has not been done already.</p>
-     *
-     * <p>@deprecated.  {@link
-     * javax.faces.application.ViewHandler#renderView} is now
-     * responsible for setting up the response writer.  This method is
-     * now a no-op.</p>
-
-     */
-    protected void setupResponseWriter() {
-    }
-
-
-    /**
-     * <p>Create a new child component using <code>createComponent</code>,
-     * initialize its properties, and add it to its parent as a child.
-     * </p>
-     * @param context {@link FacesContext} for the current request
-     * @param parent Parent {@link UIComponent} for the new child
-     * @param componentId Component identifier for the new child,
-     *  or <code>null</code> for no explicit identifier
-     */
-    private UIComponent createChild(FacesContext context, UIComponent parent,
-                                    String componentId) throws JspException {
-
-        UIComponent component = createComponent(context, componentId);
-        UIComponentTagBase parentTag = getParentUIComponentClassicTagBase(pageContext);
-        int indexOfNextChildTag = parentTag.getIndexOfNextChildTag();
-        if (indexOfNextChildTag > parent.getChildCount()) {
-            indexOfNextChildTag = parent.getChildCount();
-        }
-        parent.getChildren().add(indexOfNextChildTag, component);
-        created = true;
-        return (component);
-
-    }
-
-    /**
-     * <p>Create a new child component using <code>createComponent</code>,
-     * initialize its properties, and add it to its parent as a facet.
-     * </p>
-     * @param context {@link FacesContext} for the current request
-     * @param parent Parent {@link UIComponent} of the new facet
-     * @param name Name of the new facet
-     * @param newId id of the new facet
-     */
-    private UIComponent createFacet(FacesContext context, UIComponent parent,
-                                    String name, String newId) throws JspException {
-
-        UIComponent component = createComponent(context, newId);
-        parent.getFacets().put(name, component);
-        created = true;
-        return (component);
-
-    }
-
-    /**
-     * <p>Return a child with the specified component id from the specified
-     * component, if any; otherwise, return <code>null</code>.</p>
-     *
-     * @param component {@link UIComponent} to be searched
-     * @param componentId Component id to search for
-     */
-    private static UIComponent getChild(UIComponent component, String componentId) {
-
-        Iterator<UIComponent> kids = component.getChildren().iterator();
-        while (kids.hasNext()) {
-            UIComponent kid = kids.next();
-            if (componentId.equals(kid.getId())) {
-                return (kid);
-            }
-        }
-        return (null);
-
-    }
-
-    /**
-     * <p>Find and return the {@link UIComponent}, from the component
-     * tree, that corresponds to this tag handler instance.  If there
-     * is no such {@link UIComponent}, create one
-     * and add it as a child or facet of the {@link UIComponent} associated
-     * with our nearest enclosing {@link UIComponentTag}.  The process for
-     * locating or creating the component is:</p>
-     * <ol>
-     * <li>If we have previously located this component, return it.</li>
-     * <li>Locate the parent component by looking for a parent
-     *     {@link UIComponentTag} instance, and ask it for its component.
-     *     If there is no parent {@link UIComponentTag} instance, this tag
-     *     represents the root component, so get it from the current
-     *     <code>Tree</code> and return it.</li>
-     * <li>If this {@link UIComponentTag} instance has the
-     *     <code>facetName</code> attribute set, ask the parent
-     *     {@link UIComponent} for a facet with this name.  If not found,
-     *     create one, call <code>setProperties()</code> with the new
-     *     component as a parameter, and register it under this name.
-     *     Return the found or created facet {@link UIComponent}.</li>
-     * <li>Determine the component id to be assigned to the new
-     *     component, as follows:  if this {@link UIComponentTag} has
-     *     an <code>id</code> attribute set, use that value; otherwise,
-     *     generate an identifier that is guaranteed to be the same for
-     *     this {@link UIComponent} every time this page is processed
-     *     (i.e. one based on the location of all {@link UIComponentTag}
-     *     instances without an <code>id</code> attribute set).</li>
-     * <li>Ask the parent {@link UIComponent} for a child with this identifier.
-     *     If not found, create one, call <code>setProperties()</code>
-     *     with the new component as a parameter, and register it as a child
-     *     with this identifier.  Return the found or created
-     *     child {@link UIComponent}.</li>
-     * </ol>
-     * <p>When creating a component, the process is:</p>
-     * <ol>
-     * <li>Retrieve the component type by calling
-     * {@link UIComponentTag#getComponentType}</li>
-     * <li>If the component has a <code>binding</code> attribute,
-     * create an expression from it, and call
-     * {@link Application#createComponent} with that expression,
-     * the {@link FacesContext}, and the component type.  Store the
-     * expression using the key <code>"binding"</code>.</li>
-     * <li>Otherwise, call {@link Application#createComponent} with
-     * only the component type.
-     * <li>Call <code>setProperties()</code>.
-     * <li>Add the new component as a child or facet of its parent</li>
-     * </ol>
-     */
-    protected UIComponent findComponent(FacesContext context)
-	throws JspException {
-
-        // Step 1 -- Have we already found the relevant component?
-        if (component != null) {
-            return (component);
-        }
-
-        // Step 2 -- Identify the component that is, or will be, our parent
-        UIComponentClassicTagBase parentTag =
-	    getParentUIComponentClassicTagBase(pageContext);
-        UIComponent parentComponent;
-        if (parentTag != null) {
-            parentComponent = parentTag.getComponentInstance();
-        } else {
-	    // Special case.  The component to be found is the
-	    // UIViewRoot.
-	    // see if this is the first time this tag instance is trying
-	    // to be bound to the UIViewRoot
-	    parentComponent = context.getViewRoot();
-            // Has this UIViewRoot instance had a tag bound to it
-            // before?
-            if (null ==
-                parentComponent.getAttributes().get(CURRENT_VIEW_ROOT)) {
-                // No it hasn't.
-
-                // make sure setProperties() and setId() are called
-                // once per UIViewRoot instance.
-		try {
-		    setProperties(parentComponent);
-		}
-		catch (FacesException e) {
-		    if (e.getCause() instanceof JspException) {
-			throw ((JspException)e.getCause());
-		    }
-		    throw e;
-		}
-
-                if (null != this.id) {
-                    parentComponent.setId(this.id);
-                }
-		else {
-		    assert(null != getFacesJspId());
-		    parentComponent.setId(getFacesJspId());
-		}
-                parentComponent.getAttributes().put(CURRENT_VIEW_ROOT,
-                                                    CURRENT_VIEW_ROOT);
-                created = true;
-            }
-            else if (hasBinding()) {
-		try {
-		    setProperties(parentComponent);
-		}
-		catch (FacesException e) {
-		    if (e.getCause() instanceof JspException) {
-			throw ((JspException)e.getCause());
-		    }
-		    throw e;
-		}
-            }
-
-	    // this is not the first time this tag instance is trying to
-	    // be bound to this UIViewRoot, take no extra action.
-
-            component = parentComponent;
-            return (component);
-        }
-
-        // Step 3 -- Calculate the component identifier for this component
-        String newId = createId(context);
-
-        // Step 4 -- Create or return a facet with the specified name (if any)
-        String facetName = getFacetName();
-        if (facetName != null) {
-            component = parentComponent.getFacets().get(facetName);
-            if (component == null) {
-                component = createFacet(context, parentComponent, facetName,
-                        newId);
-            }
-            return (component);
-        }
-
-        // Step 5 -- Create or return a child with the specified id
-        component = getChild(parentComponent, newId);
-        if (component == null) {
-            component = createChild(context, parentComponent, newId);
-        }
-        return (component);
-
-    }
-
-    //
-    // Tag tree navigation
-    //
-
-    /**
-     * <p>Locate and return the nearest enclosing {@link UIComponentClassicTagBase}
-     * if any; otherwise, return <code>null</code>.</p>
-     *
-     * @param context <code>PageContext</code> for the current page
-     */
-    public static UIComponentClassicTagBase getParentUIComponentClassicTagBase(PageContext context) {
-
-        FacesContext facesContext = getFacesContext(context);
-        List list = (List) facesContext.getAttributes()
-              .get(COMPONENT_TAG_STACK_ATTR);
-
-        if (list != null) {
-            return ((UIComponentClassicTagBase) list.get(list.size() - 1));
-        } else {
-            return (null);
-        }
-
-    }
-
-    //
-    // Methods related to the createdComponents and createdFacets lists.
-    //
-
-    protected int getIndexOfNextChildTag() {
-
-        if (createdComponents != null) {
-            return (createdComponents.size());
-        } else {
-            return (0);
-        }
-
-    }
-
-    protected void addChild(UIComponent child) {
-
-        if (createdComponents == null) {
-            createdComponents = new ArrayList<String>(6);
-        }
-        createdComponents.add(child.getId());
-    }
-
-    /*
-     * Adds argument child to component tree as a child of this component.
-     */
-    
-    void addChildToComponentAndTag(UIComponent child) {
-        UIComponent myComponent = this.getComponentInstance();
-
-        int indexOfNextChildTag = this.getIndexOfNextChildTag();
-        if (indexOfNextChildTag > myComponent.getChildCount()) {
-            indexOfNextChildTag = myComponent.getChildCount();
-        }
-        myComponent.getChildren().add(indexOfNextChildTag, child);
-        this.addChild(child);        
-    }
-
-    protected void addFacet(String name) {
-
-        if (createdFacets == null) {
-            //noinspection CollectionWithoutInitialCapacity
-            createdFacets = new ArrayList<String>(3);
-        }
-        createdFacets.add(name);
-
-    }
-
-    /**
-     * <p>Pop the top {@link UIComponentTag} instance off of our component tag
-     * stack, deleting the stack if this was the last entry.</p>
-     */
-    private void popUIComponentClassicTagBase() {
-        Map<Object, Object> contextMap =
-              context.getAttributes();
-        List list = (List) contextMap.get(COMPONENT_TAG_STACK_ATTR);
-
-        // if an exception occurred in a nested  tag,
-        //there could be a few tags left in the stack.
-        UIComponentClassicTagBase uic = null;
-        while (list != null && uic != this) {
-            int idx = list.size() - 1;
-            uic = (UIComponentClassicTagBase) list.get(idx);
-            list.remove(idx);
-            if (idx < 1) {
-                contextMap.remove(COMPONENT_TAG_STACK_ATTR);
-                list = null;
-            }
-        }
-    }
-
-
-    /**
-     * <p>Push the specified {@link UIComponentTag} instance onto our component
-     * tag stack, creating a stack if necessary.</p>
-     */
-    private void pushUIComponentClassicTagBase() {
-
-        Map<Object,Object> contextMap =
-              context.getAttributes();
-        List<UIComponentClassicTagBase> list = TypedCollections.dynamicallyCastList((List)
-              contextMap.get(COMPONENT_TAG_STACK_ATTR), UIComponentClassicTagBase.class);
-        if (list == null) {
-            //noinspection CollectionWithoutInitialCapacity
-            list = new ArrayList<UIComponentClassicTagBase>();
-            contextMap.put(COMPONENT_TAG_STACK_ATTR, list);
-        }
-        list.add(this);
-
-    }
-
-
-    /**
-     * <p>Retrieve from the {@link UIComponent} corresponding to this tag
-     * handler the list of all child component ids created by
-     * {@link UIComponentTag} instances the previous time this tree was
-     * rendered.  Compare it to the list of children created during this
-     * page processing pass, and remove all children present on the old list
-     * but not in the new list.  Save the list as a {@link UIComponent}
-     * attribute so that it gets saved as part of the component's state.</p>
-     */
-    private void removeOldChildren() {
-
-        // Remove old children that are no longer present
-        List<String> oldList = TypedCollections.dynamicallyCastList(
-            (List) component.getAttributes().get(JSP_CREATED_COMPONENT_IDS), String.class);
-        if (oldList != null && !oldList.isEmpty()) {
-
-            if (createdComponents != null) {
-
-                // Components not in the new list need to be removed
-                Iterator<String> olds = oldList.iterator();
-                while (olds.hasNext()) {
-                    String old = olds.next();
-                    if (!createdComponents.contains(old)) {
-                        UIComponent child = component.findComponent(old);
-                        // if a component is marked transient, it would have
-                        // been already removed from the child list, but the
-                        // oldList would still have it.  In addition, the component
-                        // might have manually been removed.  So, if findComponent
-                        // isn't successful, don't call remove child (it will NPE)
-                        if ( child != null) {
-                            component.getChildren().remove(child);
-                        }
-                    }
-                }
-
-            } else {
-
-                // All old components need to be removed
-                Iterator<String> olds = oldList.iterator();
-                while (olds.hasNext()) {
-                    String old = olds.next();
-                    UIComponent child = component.findComponent(old);
-                    if (child != null) {
-                        component.getChildren().remove(child);
-                    }
-                }
-
-            }
-
-        }
-
-        // Save the current list as a component attribute
-        if (createdComponents != null) {
-            component.getAttributes().put(JSP_CREATED_COMPONENT_IDS,
-                                          createdComponents);
-        } else {
-            component.getAttributes().remove(JSP_CREATED_COMPONENT_IDS);
-        }
-        createdComponents = null;
-
-    }
-
-
-    /**
-     * <p>Retrieve from the {@link UIComponent} corresponding to this tag
-     * handler the list of all facet names created by {@link UIComponentTag}
-     * instances the previous time this tree was rendered.  Compare it to the
-     * list of facets created during this page processing pass, and remove
-     * all facets present on the old list but not in the new list.  Save the
-     * list as a {@link UIComponent} attribute so that it gets saved as part
-     * of the component's state.</p>
-     */
-    private void removeOldFacets() {
-
-        // Remove old facets that are no longer present
-        List<String> oldList = TypedCollections.dynamicallyCastList(
-            (List) component.getAttributes().get(JSP_CREATED_FACET_NAMES), String.class);
-        if (oldList != null) {
-
-            if (createdFacets != null) {
-
-                // Facets not in the new list need to be removed
-                Iterator<String> olds = oldList.iterator();
-                while (olds.hasNext()) {
-                    String old = olds.next();
-                    if (!createdFacets.contains(old)) {
-                        component.getFacets().remove(old);
-                    }
-                }
-
-            } else {
-
-                // All old facets need to be removed
-                Iterator<String> olds = oldList.iterator();
-                while (olds.hasNext()) {
-                    String old = olds.next();
-                    component.getFacets().remove(old);
-                }
-
-            }
-
-        }
-
-        // Save the current list as a component attribute
-        if (createdFacets != null) {
-            component.getAttributes().put(JSP_CREATED_FACET_NAMES,
-                                          createdFacets);
-        } else {
-            component.getAttributes().remove(JSP_CREATED_FACET_NAMES);
-        }
-        createdFacets = null;
-
-    }
-
-    //
-    // Methods to support content interweaving
-    //
-
-    /**
-     *
-     * <p>Create a transient UIOutput component from the body content,
-     * of this tag instance or return null if there is no body content,
-     * the body content is whitespace, or the body content is a
-     * comment.</p>
-     */
-
-    protected UIComponent createVerbatimComponentFromBodyContent() {
-        UIOutput verbatim = null;
-        String bodyContentString;
-        String trimString;
-        if (null != bodyContent &&
-             null != (bodyContentString = bodyContent.getString()) &&
-             0 < (trimString = bodyContent.getString().trim()).length()) {
-            if (!(trimString.startsWith("<!--") &&
-                 trimString.endsWith("-->"))) {
-                verbatim = createVerbatimComponent();
-                verbatim.setValue(bodyContentString);
-                bodyContent.clearBody();
-            } else {
-                StringBuilder content = new StringBuilder(trimString.length());
-                int sIdx = trimString.indexOf("<!--");
-                int eIdx = trimString.indexOf("-->", sIdx);
-                while (sIdx >= 0 && eIdx >= 0) {
-                    if (sIdx == 0) {
-                        trimString = trimString.substring(eIdx + 3);
-                    } else {
-                        content.append(trimString.substring(0, sIdx));
-                        trimString = trimString.substring(eIdx + 3);
-                    }
-                    sIdx = trimString.indexOf("<!--");
-                    eIdx = trimString.indexOf("-->", sIdx);
-                }
-                content.append(trimString);
-                String result = content.toString();
-                if (result.trim().length() > 0) {
-                    verbatim = createVerbatimComponent();
-                    verbatim.setValue(content.toString());
-                }
-                bodyContent.clearBody();
-            }
-        }
-        return verbatim;
-    }
-
-    /**
-     * <p>Use the {@link Application} instance to create a new component
-     * with the following characteristics.</p>
-     *
-     * <p><code>componentType</code> is
-     * <code>javax.faces.HtmlOutputText</code>.</p>
-     *
-     * <p><code>transient</code> is <code>true</code>.</p>
-     *
-     * <p><code>escape</code> is <code>false</code>.</p>
-     *
-     * <p><code>id</code> is
-     * <code>FacesContext.getViewRoot().createUniqueId()</code></p>
-     *
-     */
-
-    protected UIOutput createVerbatimComponent() {
-	assert(null != getFacesContext());
-	UIOutput verbatim;
-	Application application = getFacesContext().getApplication();
-	verbatim = (UIOutput)
-	    application.createComponent("javax.faces.HtmlOutputText");
-	verbatim.setTransient(true);
-	verbatim.getAttributes().put("escape", Boolean.FALSE);
-	verbatim.setId(getFacesContext().getViewRoot().createUniqueId());
-	return verbatim;
-    }
-
-    /**
-     * <p>Add <i>verbatim</i> as a sibling of <i>component</i> in
-     * <i>component</i> in the parent's child list.  <i>verbatim</i> is
-     * added to the list at the position immediatly preceding
-     * <i>component</i>.</p>
-     */
-
-    protected void addVerbatimBeforeComponent(
-          UIComponentClassicTagBase parentTag,
-          UIComponent verbatim,
-          UIComponent component) {
-
-        UIComponent parent = component.getParent();
-        if (null == parent) {
-            return;
-        }
-
-        List<UIComponent> children = parent.getChildren();
-        // EDGE CASE:
-            // Consider CASE 1 or 2 where the component is provided via a
-            // component binding in session or application scope.
-            // The automatically created UIOuput instances for the template text
-            // will already be present.  Check the JSP_CREATED_COMPONENT_IDS attribute,
-            // if present and the number of created components is the same
-            // as the number of children replace at a -1 offset from the current
-            // value of indexOfComponentInParent, otherwise, call add()
-        List createdIds = (List)
-              parent.getAttributes().get(JSP_CREATED_COMPONENT_IDS);
-        int indexOfComponentInParent = children.indexOf(component);
-        boolean replace =
-              (indexOfComponentInParent > 0 && createdIds != null &&
-              createdIds.size() == children.size());
-        if (replace) {
-            UIComponent oldVerbatim = children.get(indexOfComponentInParent - 1);
-            if (oldVerbatim instanceof UIOutput && oldVerbatim.isTransient()) {
-                children.set((indexOfComponentInParent - 1), verbatim);
-            } else {
-                children.add(indexOfComponentInParent, verbatim);
-            }
-        } else {
-            children.add(indexOfComponentInParent, verbatim);
-        }
-        parentTag.addChild(verbatim);
-    }
-
-    /**
-     * <p>Add <i>verbatim</i> as a sibling of <i>component</i> in
-     * <i>component</i> in the parent's child list.  <i>verbatim</i> is
-     * added to the list at the position immediatly following
-     * <i>component</i>.</p>
-     */
-
-    protected void addVerbatimAfterComponent(UIComponentClassicTagBase parentTag,
-					   UIComponent verbatim,
-					   UIComponent component) {
-	int indexOfComponentInParent;
-	UIComponent parent = component.getParent();
-
-	// invert the order of this if and the assignment below.  Since this line is
-	// here, it appears an early return is acceptable/desired if parent is null,
-	// and, if it is null, we should probably check for that before we try to
-	// access it.  2006-03-15 jdl
-	if (null == parent) {
-	    return;
-	}
-	List<UIComponent> children = parent.getChildren();
-	indexOfComponentInParent = children.indexOf(component);
-	if (children.size() - 1 == indexOfComponentInParent) {
-	    children.add(verbatim);
-	}
-	else {
-	    children.add(indexOfComponentInParent + 1, verbatim);
-	}
-	parentTag.addChild(verbatim);
-    }
-
-    // ------------------------------------------------------------ Tag Methods
-
-    /**
-     *
-     * <p>Perform any processing necessary to find (or create) the
-     * {@link UIComponent} instance in the view corresponding to this
-     * tag instance in the page and, if and only if a component was
-     * created, insert it into the tree at the proper location as
-     * expected by the page author.  Secondarily, cause a transient
-     * {@link UIOutput} component to be created and placed in the tree
-     * <b>before</b> the <code>UIComponent</code> instance for
-     * <b>this</b> tag.  The value of this <code>UIOutput</code>
-     * component must include anything covered by <code>CASE 1</code> or
-     * <code>CASE 2</code> in the class description.</p>
-     *
-     * <p>The default implementation, which is intended to be sufficient
-     * for most components, implements this secondary requirement by
-     * calling {@link #getParentUIComponentClassicTagBase}, and calling
-     * {@link #createVerbatimComponentFromBodyContent} on the result.
-     * It then adds the returned component to the tree <b>before</b> the
-     * actual component for <b>this</b> tag instance instance by calling
-     * {@link #addVerbatimBeforeComponent}.</p>
-     *
-     * <p>Before returning, the component is pushed onto the component
-     * stack for this response to enable the {@link
-     * #getParentUIComponentClassicTagBase} method to work properly.</p>
-     *
-     * <p>The flag value to be returned is acquired by calling the
-     * <code>getDoStartValue()</code> method, which tag subclasses may
-     * override if they do not want the default value.</p>
-     *
-     * @throws JspException if an error occurs
-     */
-    public int doStartTag() throws JspException {
-	// make sure that these ivars are reset at the beginning of the
-	// lifecycle for this tag.
-	createdComponents = null;
-	createdFacets = null;
-	UIComponent verbatim = null;
-
-        context = getFacesContext();
-	if (null == context) {
-	    // PENDING(edburns): I18N
-	    throw new JspException("Can't find FacesContext");
-	}
-
-        parentTag = getParentUIComponentClassicTagBase(pageContext);
-        Map<Object,Object> contextMap = context.getAttributes();
-        Map<String,UIComponentTagBase> componentIds;
-        if (parentTag == null) {
-            // create the map if we're the top level UIComponentTag
-            //noinspection CollectionWithoutInitialCapacity
-            componentIds = new HashMap<String,UIComponentTagBase>();
-            contextMap.put(GLOBAL_ID_VIEW, componentIds);
-        } else {
-            componentIds = TypedCollections.dynamicallyCastMap((Map)
-        	contextMap.get(GLOBAL_ID_VIEW), String.class, UIComponentTagBase.class);
-        }
-
-        // If we're not inside of a facet, and if we are inside of a
-        // rendersChildren==true component, stuff any template text or
-        // custom tag output into a transient component.
-        if (null == getFacetName() &&
-            null != parentTag) {
-            Tag p = this.getParent();
-            // If we're not inside a JSP tag or we're not inside
-            // a UIComponentTag flush the buffer
-            if (null == p || !(p instanceof UIComponentTagBase)) {
-                JspWriter out = pageContext.getOut();
-                if (!(out instanceof BodyContent)) {
-                    try {
-                        out.flush();
-                    }
-                    catch (IOException ioe) {
-                        throw new JspException(ioe);
-                    }
-                }
-            }
-            verbatim = parentTag.createVerbatimComponentFromBodyContent();
-        }
-
-        // Locate the UIComponent associated with this UIComponentTag,
-        // creating one if necessary
-        component = findComponent(context);
-
-	// if we have a verbatim component, add it after this component.
-	if (null != verbatim) {
-	    addVerbatimBeforeComponent(parentTag,
-				       verbatim, component);
-	}
-
-        Object tagInstance = null;
-        String clientId = null;
-        if (this.id != null) {
-            clientId = component.getClientId(context);
-              UIComponentClassicTagBase temp = (UIComponentClassicTagBase)
-                 componentIds.get(clientId);
-            // According to the JavaDocs for JspIdConsumer tag handlers
-            // that implement this interface are not to be pooled, however
-            // due to a bug in Jasper this is not the case.
-            // Because of this, two tags with the same ID within the same
-            // naming container will not be detected as duplicates.  So
-            // in order to ensure we detect it, if the instance is the same,
-            // verify the JSP IDs are different.  If they are, then continue,
-            // if they aren't, then we're dealing with EVAL_BODY_AGAIN (see
-            // below)
-            //noinspection ObjectEquality
-            if (temp == this
-                 && !this.getJspId().equals(temp.getJspId())) {
-                tagInstance = this;
-            } else if (temp != null
-                         && temp != this
-                         && this.getJspId().equals(temp.getJspId())) {
-                // new instance, same JSP ID - this is the EVAL_BODY_AGAIN case.
-                tagInstance = temp;
-            }
-        }
-
-        // If we have a tag instance, then, most likely, a tag handler
-        // returned EVAL_BODY_AGAIN somewhere.  Make sure the instance
-        // returned is the same as the current instance and if this is the case,
-        // do not perform ID validation as it has already been done.
-        if (tagInstance == null) {
-
-            // only check for id uniqueness if the author has manually given
-            // us an id.
-            if (null != this.id) {
-
-                // assert component ID uniqueness
-                if (clientId != null) {
-                    if (componentIds.containsKey(clientId)) {
-                        // PENDING i18n
-                        StringWriter writer = new StringWriter(128);
-                        printTree(context.getViewRoot(), clientId, writer, 0);
-                        String msg = "Duplicate component id: '"
-                                     + clientId
-                                     + "', first used in tag: '"
-                                     + componentIds.get(clientId).getClass().getName()
-                                     + "'\n"
-                                     + writer.toString();
-                        throw new JspException(new IllegalStateException(msg));
-                    } else {
-                        componentIds.put(clientId, this);
-                    }
-                }
-            }
-
-            // Add to parent's list of created components or facets if needed
-
-            if (parentTag != null) {
-                if (getFacetName() == null) {
-                    parentTag.addChild(component);
-                } else {
-                    parentTag.addFacet(getFacetName());
-                }
-            }
-        }
-
-	// Rendering is deferred until after the tree is completely
-	// created
-
-        // Return the appropriate control value
-        pushUIComponentClassicTagBase();
-        return (getDoStartValue());
-
-    }
-
-
-    /**
-     *
-     * <p>Perform any processing necessary to handle the content
-     * implications of CASE 3 in the class description.</p>
-     *
-     * <p>The default implementation, which is intended to be sufficient
-     * for most components, calls {@link
-     * #createVerbatimComponentFromBodyContent} on <b>this</b> instance
-     * and adds it as a child of the component for this tag's component
-     * at the <b>end</b> of the child list.  In addition, the following
-     * housekeeping steps are taken.</p>
-     *
-     * <ul>
-     *
-     * <li>Retrieve from the {@link UIComponent} the set of component
-     * ids of child components created by {@link UIComponentTag}
-     * instances the last time this page was processed (if any).
-     * Compare it to the list of children created during this page
-     * processing pass, and remove all children present in the old list
-     * but not the new.  Save the new list as a component attribute so
-     * that it gets saved as part of the component's state.</li>
-     *
-     * <li>Retrieve from the {@link UIComponent} the set of facet names
-     * of facets created by {@link UIComponentTag} instances the last
-     * time this page was processed (if any).  Compare it to the list of
-     * facets created during this page processing pass, and remove all
-     * facets present in the old list but not the new.  Save the new
-     * list as a component attribute so that it gets saved as part of
-     * the component's state.</li>
-     *
-     * <li>Release all references to the component, and pop it from the
-     * component stack for this response, removing the stack if this was
-     * the outermost component.</li> </ul>
-     *
-     * <p>The flag value to be returned is acquired by calling the
-     * <code>getDoEndValue()</code> method, which tag subclasses may
-     * override if they do not want the default value.</p>
-     *
-     * @throws JspException if an error occurs
-     */
-    public int doEndTag() throws JspException {
-
-        // Remove old children and facets as needed
-        popUIComponentClassicTagBase();
-        removeOldChildren();
-        removeOldFacets();
-
-        // Render the children (if needed) and  end of the component
-        // associated with this tag
-        try {
-	    UIComponent verbatim;
-	    UIComponentClassicTagBase parentTag =
-		getParentUIComponentClassicTagBase(pageContext);
-
-	    if (null != (verbatim = this.createVerbatimComponentFromBodyContent())) {
-                component.getChildren().add(verbatim);
-		if (null != parentTag) {
-		    parentTag.addChild(verbatim);
-		}
-	    }
-
-	    // else, we don't render rendersChildren==true
-	    // components here
-
-        } catch (Throwable e) {
-            throw new JspException(e);
-        } finally {
-            component = null;
-            context = null;
-        }
-
-        // Return the appropriate control value
-        created = false;
-
-	this.release();
-        return (getDoEndValue());
-
-    }
-
-    /**
-     * <p>Release any resources allocated during the execution of this
-     * tag handler.</p>
-     */
-    public void release() {
-
-        this.parent = null;
-
-        this.id = null;
-        this.facesJspId = null;
-        this.created = false;
-	this.bodyContent = null;
-        this.isNestedInIterator = false;
-    }
-
-    // -------------------------------------------- Support methods for BodyTag
-
-    /**
-     * <p>Return the flag value that should be returned from the
-     * <code>doAfterBody()</code> method when it is called.  Subclasses
-     * may override this method to return the appropriate value.</p>
-     */
-    protected int getDoAfterBodyValue() throws JspException {
-
-        return (SKIP_BODY);
-
-    }
-
-    // -------------------------------------------------------- BodyTag Methods
-
-    /**
-     * <p>Set the <code>bodyContent</code> for this tag handler.  This method
-     * is invoked by the JSP page implementation object at most once per
-     * action invocation, before <code>doInitiBody()</code>.  This method
-     * will not be invoked for empty tags or for non-empty tags whose
-     * <code>doStartTag()</code> method returns <code>SKIP_BODY</code> or
-     * <code>EVAL_BODY_INCLUDE</code>.</p>
-     *
-     * @param bodyContent The new <code>BodyContent</code> for this tag
-     */
-    public void setBodyContent(BodyContent bodyContent) {
-
-        this.bodyContent = bodyContent;
-
-    }
-
-    /**
-     * <p>Get the <code>JspWriter</code> from our <code>BodyContent</code>.
-     * </p>
-     */
-    public JspWriter getPreviousOut() {
-
-        return (this.bodyContent.getEnclosingWriter());
-
-    }
-
-    public BodyContent getBodyContent() {
-
-        return (this.bodyContent);
-
-    }
-
-
-
-    /**
-     * <p>Prepare for evaluation of the body.  This method is invoked by the
-     * JSP page implementation object after <code>setBodyContent()</code>
-     * and before the first time the body is to be evaluated.  This method
-     * will not be invoked for empty tags or for non-empty tags whose
-     * <code>doStartTag()</code> method returns <code>SKIP_BODY</code>
-     * or <code>EVAL_BODY_INCLUDE</code>.</p>
-     *
-     * @throws JspException if an error is encountered
-     */
-    public void doInitBody() throws JspException {
-
-        ; // Default implementation does nothing
-
-    }
-
-    /**
-     *
-     * <p>Perform any processing necessary to handle the content
-     * implications of CASE 4 in the class description.</p>
-     *
-     * <p>Return result from {@link #getDoAfterBodyValue}</p>
-     * @throws JspException if an error is encountered
-     */
-    public int doAfterBody() throws JspException {
-
-	UIComponent verbatim;
-	UIComponentClassicTagBase parentTag =
-	    getParentUIComponentClassicTagBase(pageContext);
-
-	// if we are the root tag, or if we are inside of a
-	// rendersChildren==true component
-        //noinspection ObjectEquality
-        if (this == parentTag ||
-	    (null != parentTag &&
-	     parentTag.getComponentInstance().getRendersChildren())) {
-	    // stuff the template text or custom tag output into a
-	    // transient component
-	    if (null != (verbatim = this.createVerbatimComponentFromBodyContent())) {
-            // EDGE CASE:
-            // Consider CASE 4 where the component is provided via a
-            // component binding in session or application scope.
-            // The verbatim instance will already be present.  If we
-            // add again, the user will get duplicate component ID
-            // errors.  Check the JSP_CREATED_COMPONENT_IDS attribute.  If it is not present, we
-            // need to add the new verbatim child.  If it is present, assume it is a
-            // List and check its size.  If the size of the list is equal to the
-            // number of children currently in the component, replace the replace
-            // the child of this component at the index derived as follows.  If
-            // indexOfChildInParent is 0, replace the child at the 0th index with
-            // the new verbatim child.  Otherwise, replace the child at the
-            // (indexOfChildInParent - 1)th index with the new verbatim child.
-            List createdIds = (List)
-                  component.getAttributes().get(JSP_CREATED_COMPONENT_IDS);
-            if (createdIds != null) {
-                int listIdx = component.getChildCount();
-                if (createdIds.size() == listIdx) {
-                    component.getChildren().set((listIdx - 1), verbatim);
-                } else {
-                    component.getChildren().add(verbatim);
-                }
-            } else {
-                component.getChildren().add(verbatim);
-            }
-            parentTag.addChild(verbatim);
-        }
-	}
-
-        return (getDoAfterBodyValue());
-
-    }
-
-    // ----------------------------------------------- Methods relating to Id
-
-    /**
-     * <p>Set the component identifier for our component.  If the
-     * argument begins with {@link
-     * UIViewRoot#UNIQUE_ID_PREFIX} throw an
-     * <code>IllegalArgumentException</code></p>
-     *
-     * @param id The new component identifier.  This may not start with
-     * {@link UIViewRoot#UNIQUE_ID_PREFIX}.
-     *
-     * @throws IllegalArgumentException if the argument is
-     * non-<code>null</code> and starts with {@link
-     * UIViewRoot#UNIQUE_ID_PREFIX}.
-     */
-    public void setId(String id) {
-	if (null != id && id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
-	    throw new IllegalArgumentException();
-	}
-
-        this.id = id;
-
-    }
-
-    /**
-     * <p>Return the <code>id</code> value assigned by the page author.</p>
-     */
-    protected String getId() {
-
-	return (id);
-
-    }
-
-    /**
-     * <p>If this method has been called before on this tag's useful
-     * lifetime (before {@link #release} was called), return the
-     * previously returned value.  Otherwise, if {@link #getJspId}
-     * returns non-<code>null</code>, prepend {@link #UNIQUE_ID_PREFIX}
-     * to the <code>jspId</code> and return the result.</p>
-     */
-
-    protected String getFacesJspId() {
-        if (null == facesJspId) {
-            if (null != jspId) {
-                facesJspId = UNIQUE_ID_PREFIX + jspId;
-                // if this tag happens to be nested within <c:forEach>,
-                //  jspId will be the same for each iteration. So it is
-                // transformed into a unique "id" by appending a counter which
-                // gets stored in request scope with jspId as the key for use
-                // during the next iteration.
-                if (isDuplicateId(facesJspId)) {
-                    facesJspId = generateIncrementedId(facesJspId);
-                }
-            } else {
-                // jspId will be null if we're running in a container
-                // that doesn't support JspIdConsumer
-                facesJspId = getFacesContext().getViewRoot().createUniqueId();
-            }
-        }
-        return facesJspId;
-    }
-
-    /**
-     * Returns true if a component already exists with the same
-     * <code>id</code>. This will be the case if this tag is
-     * nested within <code><c:forEach></code> tag or any other JSTL loop tag
-     * or if the page has components with the same <code>Id</code>.
-     *
-     * @param componentId <code>id</code> to be looked up for possible
-     * duplication.
-     * @return true if this nested with <code>facesJspId</code> is duplicate.
-     */
-    private boolean isDuplicateId(String componentId) {
-        boolean result = false;
-        if (parentTag != null) {
-
-            if (parentTag.isNestedInIterator) {
-                return true;
-            }
-             List childComponents = parentTag.createdComponents;
-            // PENDING: Need to analyze the impact of this look up on pages
-            // with several levels of nesting.
-            if (childComponents != null) {
-                result = childComponents.contains(componentId);
-                if (result && (!isNestedInIterator)) {
-                    return true;
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /*
-     * Appends a counter to the passed in <code>id</code> and stores the
-     * <code>id</code> and counter information in request scope.
-     *
-     * @return String <code>id</code> with a counter appended to it.
-     */
-    private String generateIncrementedId (String componentId) {
-        Map<Object,Object> contextMap = getFacesContext().getAttributes();
-        Integer serialNum = (Integer) contextMap.get(componentId);
-        if (null == serialNum) {
-            serialNum = 1;
-        } else {
-            serialNum = serialNum.intValue() + 1;
-        }
-        contextMap.put(componentId, serialNum);
-        componentId = componentId + UNIQUE_ID_PREFIX + serialNum.intValue();
-        return componentId;
-    }
-
-    /**
-     * Returns the <code>List</code> of {@link UIComponent} ids created or
-     * located by nested {@link UIComponentTag}s while processing the current
-     * request.</p>
-     */
-    protected List<String> getCreatedComponents() {
-        return createdComponents;
-    }
-
-    /**
-     * <p>Create the component identifier to be used for this component.</p>
-     */
-    private String createId(FacesContext context)
-    throws JspException {
-
-	if (this.id == null) {
-	    return getFacesJspId();
-	} else {
-            // if this tag happens to be nested within <c:forEach>, jspId
-            // will be the same for each iteration. So it is
-            // transformed into a unique "id" by appending a counter which gets
-            // stored in request scope with jspId as the key for use during next
-            // iteration.
-        if (isDuplicateId(this.id)) {
-            if (!isSpecifiedIdUnique(this.id)) {
-                if (isNestedInIterator) {
-                    this.id = generateIncrementedId(this.id);
-                } else {
-                    StringWriter writer = new StringWriter(128);
-                    printTree(context.getViewRoot(), this.id, writer, 0);
-                    String msg = "Component ID '"
-                                 + this.id
-                                 + "' has already been used"
-                                 + " in the view.\n"
-                                 + "See below for the view up to the point of"
-                                 + " the detected error.\n"
-                                 + writer.toString();
-                    throw new JspException(msg);
-                }
-            }
-        }
-        return (this.id);
-    }
-
-    }
-
-
-    /**
-     * @param id the component ID
-     * @return <code>true</code> if this ID is unique within the closest naming
-     *  container, otherwise <code>false</code>
-     */
-    private boolean isSpecifiedIdUnique(String id) {
-
-        UIComponentClassicTagBase containerTag = getParentNamingContainerTag();
-        UIComponent c = containerTag.component.findComponent(id);
-        if (c == null) {
-            return true;
-        } else {
-            UIComponent parent = c.getParent();
-            if (parent.equals(this.parentTag.component)) {
-                // the component we found has the same parent, If we find
-                // a sibling with the same ID, return true so that the
-                // id is incremented, otherwise, return false.
-                List<String> created = this.parentTag.createdComponents;
-                return !(created != null && created.contains(id));
-            } else {
-                return false;
-            }
-        }
-
-    }
-
-
-    /**
-     * @return the parent tag that represents the closest NamingContainer
-     *  component.
-     */
-    private UIComponentClassicTagBase getParentNamingContainerTag() {
-        if (this.parentTag == null) {
-            return this;
-        }
-        UIComponentClassicTagBase parent = this.parentTag;
-        while (parent != null) {
-            if (parent.component instanceof NamingContainer
-                    || parent.parentTag == null && parent.component instanceof UIViewRoot) {
-                return parent;
-            }
-            parent = parent.parentTag;
-        }
-        return null;
-
-    }
-
-
-    // ------------------------------------------------   JspIdConsumer Methods
-
-
-    /**
-     * <p>Defined on {@link JspIdConsumer}.  This method is called by
-     * the container before {@link #doStartTag}.  The argument is
-     * guaranteed to be unique within the page.</p>
-     *
-     * <p>IMPLEMENTATION NOTE:  This method will detect where we
-     * are in an include and assign a unique ID for each include
-     * in a particular 'logical page'.  This allows us to avoid
-     * possible duplicate ID situations for included pages that
-     * have components without explicit IDs.</p>
-     *
-     * @param id the container generated id for this tag, guaranteed to
-     * be unique within the page.
-     */
-
-    public void setJspId(String id) {
-        // reset JSP ID here instead of release as we may need
-        // to check the ID after the tag has been used
-        this.jspId = null;
-
-        Map<Object,Object> contextMap =
-             getFacesContext().getAttributes();
-        AtomicInteger aInt = (AtomicInteger) contextMap.get(JAVAX_FACES_PAGECONTEXT_COUNTER);
-        if (aInt == null) {
-            aInt = new AtomicInteger();
-            contextMap.put(JAVAX_FACES_PAGECONTEXT_COUNTER, aInt);
-        }
-
-        Integer pcId = (Integer)
-             pageContext.getAttribute(JAVAX_FACES_PAGECONTEXT_MARKER,
-                                      PageContext.PAGE_SCOPE);
-        if (pcId == null) {
-            pcId = aInt.incrementAndGet();
-            pageContext.setAttribute(JAVAX_FACES_PAGECONTEXT_MARKER, pcId);
-        }
-        if (pcId.intValue() > 1) {
-            StringBuilder builder = new StringBuilder(id.length() + 3);
-            builder.append(id).append("pc").append(pcId);
-            jspId = builder.toString();
-        } else {
-            jspId = id;
-        }
-
-        facesJspId = null;
-        updatePreviousJspIdAndIteratorStatus(jspId);
-    }
-
-    /**
-     * <p>Called from {@link #setJspId} to update the value saved for
-     * the previous call to {@link #setJspId} for this component <b>on
-     * this request</b>.  If this method is presented with the same
-     * argument <code>id</code> for the same tag instance more than once
-     * on the same request, then we know that the tag instance lies
-     * inside an iterator tag, such as <code>c:forEach</code>.  If so,
-     * we set the <code>isNestedInIterator</code> ivar to
-     * <code>true</code> otherwise, we set it to <code>false</code>.</p>
-     *
-     * <p>The implementation for this method stores a Map from tag
-     * instance to id String as a request scoped attribute.  This map
-     * contains the value used as the previousJspId and compared with
-     * the argument <code>id</code>.
-     *
-     * @param id the id to be compared with the previous id, if any, for
-     * this tag instance on this request.
-     */
-
-    private void updatePreviousJspIdAndIteratorStatus(String id) {
-        Set<String> previousJspIdSet;
-
-        if (null == (previousJspIdSet = TypedCollections.dynamicallyCastSet((Set)
-            pageContext.getAttribute(PREVIOUS_JSP_ID_SET, PageContext.PAGE_SCOPE), String.class))) {
-            //noinspection CollectionWithoutInitialCapacity
-            pageContext.setAttribute(PREVIOUS_JSP_ID_SET,
-                                     previousJspIdSet = new HashSet<String>(),
-                                     PageContext.PAGE_SCOPE);
-        }
-
-        // detect the iterator case
-        if (previousJspIdSet.contains(id)) {
-            if (log.isLoggable(Level.FINEST)) {
-                log.log(Level.FINEST, "Id " + id +
-                        " is nested within an iterating tag.");
-            }
-            isNestedInIterator = true;
-        } else {
-            isNestedInIterator = false;
-            previousJspIdSet.add(id);
-        }
-    }
-
-
-    public String getJspId() {
-	return jspId;
-    }
-
-    // ------------------------------------------------------- Abstract methods
-
-    /**
-     * <p>Override properties and attributes of the specified component,
-     * if the corresponding properties of this tag handler instance were
-     * explicitly set.  This method must be called <strong>ONLY</strong>
-     * if the specified {@link UIComponent} was in fact created during
-     * the execution of this tag handler instance, and this call will occur
-     * <strong>BEFORE</strong> the {@link UIComponent} is added to
-     * the view.</p>
-     *
-     * <p>Tag subclasses that want to support additional set properties
-     * must ensure that the base class <code>setProperties()</code>
-     * method is still called.  A typical implementation that supports
-     * extra properties <code>foo</code> and <code>bar</code> would look
-     * something like this:</p>
-     * <pre>
-     * protected void setProperties(UIComponent component) {
-     *   super.setProperties(component);
-     *   if (foo != null) {
-     *     component.setAttribute("foo", foo);
-     *   }
-     *   if (bar != null) {
-     *     component.setAttribute("bar", bar);
-     *   }
-     * }
-     * </pre>
-     *
-     * <p>The default implementation overrides the following properties:</p>
-     * <ul>
-     * <li><code>rendered</code> - Set if a value for the
-     *     <code>rendered</code> property is specified for
-     *     this tag handler instance.</li>
-     * <li><code>rendererType</code> - Set if the <code>getRendererType()</code>
-     *     method returns a non-null value.</li>
-     * </ul>
-     *
-     * @param component {@link UIComponent} whose properties are to be
-     *  overridden
-     */
-    protected abstract void setProperties(UIComponent component);
-
-
-    /**
-     * <p>Create and return a new child component of the type returned
-     * by calling <code>getComponentType()</code>.  If this {@link
-     * UIComponentTag} has a non-null <code>binding</code> attribute,
-     * this is done by call {@link Application#createComponent} with the
-     * expression created for the <code>binding</code> attribute, and
-     * the expression will be stored on the component.  Otherwise,
-     * {@link Application#createComponent} is called with only the
-     * component type.  Finally, initialize the components id and other
-     * properties.  </p>
-     * @param context {@link FacesContext} for the current request
-     * @param newId id of the component
-     */
-
-    protected abstract UIComponent createComponent(FacesContext context,
-						   String newId) throws JspException;
-
-    /**
-     * <p>Return <code>true</code> if this component has a
-     * non-<code>null</code> binding attribute.  This method is
-     * necessary to allow subclasses that expose the
-     * <code>binding</code> property as an Faces 1.1 style EL property
-     * as well as subclasses that expose it as an EL API property.</p>
-     */
-
-    protected abstract boolean hasBinding();
-
-    // --------------------------------------------------------- Properties
-
-    /**
-     * <p>Return the {@link UIComponent} instance that is associated with
-     * this tag instance.  This method is designed to be used by tags nested
-     * within this tag, and only returns useful results between the
-     * execution of <code>doStartTag()</code> and <code>doEndTag()</code>
-     * on this tag instance.</p>
-     */
-    public UIComponent getComponentInstance() {
-
-        return (this.component);
-
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if we dynamically created a new component
-     * instance during execution of this tag.  This method is designed to be
-     * used by tags nested within this tag, and only returns useful results
-     * between the execution of <code>doStartTag()</code> and
-     * <code>doEndTag()</code> on this tag instance.</p>
-     */
-    public boolean getCreated() {
-
-        return (this.created);
-
-    }
-
-
-    protected FacesContext getFacesContext() {
-
-	if (context == null) {
-            if (null == (context = (FacesContext)
-                    pageContext.getAttribute(CURRENT_FACES_CONTEXT))) {
-                context = FacesContext.getCurrentInstance();
-
-                if (context == null) { // PENDING - i18n
-                    throw new RuntimeException("Cannot find FacesContext");
-                }
-
-                // store the current FacesContext for use by other
-                // UIComponentTags in the same page
-                pageContext.setAttribute(CURRENT_FACES_CONTEXT, context);
-            }
-	}
-
-	return (context);
-
-    }
-
-
-    /**
-     * <p>Return the facet name that we should be stored under, if any;
-     * otherwise, return null (indicating that we will be a child component).
-     * </p>
-     */
-    protected String getFacetName() {
-
-        Tag parent = getParent();
-        if (parent instanceof FacetTag) {
-            return (((FacetTag) parent).getName());
-        } else {
-            return (null);
-        }
-
-    }
-
-
-    private static FacesContext getFacesContext(PageContext pageContext) {
-
-        FacesContext context = (FacesContext)
-             pageContext.getAttribute(CURRENT_FACES_CONTEXT);
-        if (context == null) {
-            context = FacesContext.getCurrentInstance();
-            if (context == null) {
-                 throw new RuntimeException("Cannot find FacesContext");
-            } else {
-                pageContext.setAttribute(CURRENT_FACES_CONTEXT, context);
-            }
-        }
-
-        return (context);
-
-    }
-
-    private static void printTree(UIComponent root,
-                                  String duplicateId,
-                                  Writer out,
-                                  int curDepth) {
-        if (null == root) {
-            return;
-        }
-
-        if (duplicateId.equals(root.getId())) {
-            indentPrintln(out, "+id: " + root.getId() + "  <===============",
-                          curDepth);
-        } else {
-            indentPrintln(out, "+id: " + root.getId(), curDepth);
-        }
-        //noinspection ObjectToString
-        indentPrintln(out, " type: " + root.toString(), curDepth);
-
-        curDepth++;
-        // print all the facets of this component
-        for (UIComponent uiComponent : root.getFacets().values()) {
-            printTree(uiComponent, duplicateId, out, curDepth);
-        }
-        // print all the children of this component
-        for (UIComponent uiComponent : root.getChildren()) {
-            printTree(uiComponent, duplicateId, out, curDepth);
-        }
-
-    }
-
-    private static void indentPrintln(Writer out, String str, int curDepth) {
-
-        // handle indentation
-        try {
-            for (int i = 0; i < curDepth; i++) {
-                out.write("  ");
-            }
-            out.write(str + '\n');
-        } catch (IOException ex) {
-            // ignore
-        }
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/UIComponentELTag.java b/jsf-api/src/main/java/javax/faces/webapp/UIComponentELTag.java
deleted file mode 100644
index ce3ab79..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/UIComponentELTag.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.el.ELException;
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.Tag;
-
-
-/**
- * <p>{@link UIComponentELTag} specializes its superclass to allow for
- * properties that take their values from EL API expressions.</p>
- *
- * <p>This tag is designed for use with Faces version 1.2 and JSP
- * version 2.1 containers.</p>
- *
- */
-
-public abstract class UIComponentELTag extends UIComponentClassicTagBase implements Tag {
-
-
-    // ------------------------------------------------------------- Attributes
-
-
-    /**
-     * <p>The value binding expression (if any) used to wire up this component
-     * to a {@link UIComponent} property of a JavaBean class.</p>
-     */
-    private ValueExpression binding = null;
-
-
-    /**
-     * <p>Set the value expression for our component.</p>
-     *
-     * @param binding The new value expression
-     *
-     * @throws JspException if an error occurs
-     */
-    public void setBinding(ValueExpression binding) throws JspException {
-	this.binding = binding;
-    }
-
-    protected boolean hasBinding() {
-	return null != binding;
-    }
-
-    /**
-     * <p>An override for the rendered attribute associated with our
-     * {@link UIComponent}.</p>
-     */
-    private ValueExpression rendered = null;
-
-
-    /**
-     * <p>Set an override for the rendered attribute.</p>
-     *
-     * @param rendered The new value for rendered attribute
-     */
-    public void setRendered(ValueExpression rendered) {
-        this.rendered = rendered;
-    }
-
-    /**
-     * <p>Return the {@link ELContext} for the {@link FacesContext} for
-     * this request.</p>
-     *
-     * <p>This is a convenience for
-     * <code>getFacesContext().getELContext()</code>.</p>
-     */
-
-    protected ELContext getELContext() {
-	FacesContext fc = getFacesContext();
-	ELContext result = null;
-	if (null != fc) {
-	    result = fc.getELContext();
-	}
-	return result;
-    }
-
-
-    // ------------------------------------------------------------ Tag Methods
-
-
-
-    /**
-     * <p>Release any resources allocated during the execution of this
-     * tag handler.</p>
-     */
-    public void release() {
-
-	this.binding = null;
-        this.rendered = null;
-	super.release();
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-    /**
-     * <p>Override properties and attributes of the specified component,
-     * if the corresponding properties of this tag handler instance were
-     * explicitly set.  This method must be called <strong>ONLY</strong>
-     * if the specified {@link UIComponent} was in fact created during
-     * the execution of this tag handler instance, and this call will occur
-     * <strong>BEFORE</strong> the {@link UIComponent} is added to
-     * the view.</p>
-     *
-     * <p>Tag subclasses that want to support additional set properties
-     * must ensure that the base class <code>setProperties()</code>
-     * method is still called.  A typical implementation that supports
-     * extra properties <code>foo</code> and <code>bar</code> would look
-     * something like this:</p>
-     * <pre>
-     * protected void setProperties(UIComponent component) {
-     *   super.setProperties(component);
-     *   if (foo != null) {
-     *     component.setAttribute("foo", foo);
-     *   }
-     *   if (bar != null) {
-     *     component.setAttribute("bar", bar);
-     *   }
-     * }
-     * </pre>
-     *
-     * <p>The default implementation overrides the following properties:</p>
-     * <ul>
-     * <li><code>rendered</code> - Set if a value for the
-     *     <code>rendered</code> property is specified for
-     *     this tag handler instance.</li>
-     * <li><code>rendererType</code> - Set if the <code>getRendererType()</code>
-     *     method returns a non-null value.</li>
-     * </ul>
-     *
-     * @param component {@link UIComponent} whose properties are to be
-     *  overridden
-     */
-    protected void setProperties(UIComponent component) {
-        // The "id" property is explicitly set when components are created
-        // so it does not need to be set here
-        if (rendered != null) {
-            if (rendered.isLiteralText()) {
-                try {
-                    component.setRendered(Boolean.valueOf(rendered.getExpressionString())
-                            .booleanValue());
-                } catch (ELException e) {
-                    throw new FacesException(e);
-                }
-            } else {
-                component.setValueExpression("rendered", rendered);
-            }
-        }
-        if (getRendererType() != null) {
-            component.setRendererType(getRendererType());
-        }
-
-    }
-
-
-    /**
-     * <p>Create and return a new child component of the type returned by
-     * calling <code>getComponentType()</code>.  If this {@link UIComponentELTag}
-     * has a non-null <code>binding</code> attribute, this is done by
-     * call {@link Application#createComponent} with the {@link ValueExpression}
-     * created for the <code>binding</code> attribute, and the
-     * {@link ValueExpression} will be stored on the component.  Otherwise,
-     * {@link Application#createComponent} is called with only 
-     * the component type.  Finally, initialize the components id
-     * and other properties.
-     * </p>
-     * @param context {@link FacesContext} for the current request
-     * @param newId id of the component
-     */
-    protected UIComponent createComponent(FacesContext context, String newId) throws JspException {
-        UIComponent component;
-        Application application = context.getApplication();
-        if (binding != null) {
-            component = application.createComponent(binding, context,
-                                                    getComponentType());
-	    component.setValueExpression("binding", binding);
-        } else {
-            component = application.createComponent(getComponentType());
-        }
-
-        component.setId(newId);
-        setProperties(component);
-
-        return component;
-    }
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/UIComponentTag.java b/jsf-api/src/main/java/javax/faces/webapp/UIComponentTag.java
deleted file mode 100644
index e02d64e..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/UIComponentTag.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-
-
-/**
- * <p>{@link UIComponentTag} is the base class for all JSP custom
- * actions that correspond to user interface components in a page that is
- * rendered by JavaServer Faces.</p>
- *
- * <p>In this version of the specification, <code>UIComponentTag</code>
- * extends {@link UIComponentClassicTagBase} to add properties that use
- * the Faces 1.1 Expression Language.</p>
- *
- * @deprecated Use of this class has been replaced with {@link
- * UIComponentELTag}, which extends
- * <code>UIComponentClassicTagBase</code> to add properties that use the
- * EL API introduced as part of JSP 2.1.
- */
-
-public abstract class UIComponentTag extends UIComponentClassicTagBase implements Tag {
-
-    // ------------------------------------------------------------- Properties
-
-    /**
-     * <p>The value binding expression (if any) used to wire up this component
-     * to a {@link UIComponent} property of a JavaBean class.</p>
-     */
-    private String binding = null;
-
-
-    /**
-     * <p>Set the value binding expression for our component.</p>
-     *
-     * @param binding The new value binding expression
-     *
-     * @throws IllegalArgumentException if the specified binding is not a
-     * valid value binding expression.
-     */
-    public void setBinding(String binding) throws JspException {
-	if (!isValueReference(binding)) {
-	    throw new IllegalArgumentException();
-        }
-
-	this.binding = binding;
-    }
-
-    protected boolean hasBinding() {
-	return null != binding;
-    }
-
-
-
-    /**
-     * <p>An override for the rendered attribute associated with our
-     * {@link UIComponent}.</p>
-     */
-    private String rendered = null;
-
-
-    /**
-     * <p>Set an override for the rendered attribute.</p>
-     *
-     * @param rendered The new value for rendered attribute
-     */
-    public void setRendered(String rendered) {
-
-        this.rendered = rendered;
-
-    }
-
-
-    /**
-     * <p>Flag indicating whether or not rendering should occur.</p>
-     */
-    private boolean suppressed = false;
-
-
-    protected boolean isSuppressed() {
-
-        return (suppressed);
-
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if the specified value conforms to the
-     * syntax requirements of a value binding expression.  Such expressions
-`    * may be used on most component tag attributes to signal a desire for
-     * deferred evaluation of the attribute or property value to be set on
-     * the underlying {@link UIComponent}.</p>
-     *
-     * @param value The value to evaluate
-     *
-     * @throws NullPointerException if <code>value</code> is
-     *  <code>null</code>
-     */
-    public static boolean isValueReference(String value) {
-
-	if (value == null) {
-	    throw new NullPointerException();
-	}
-	int start = value.indexOf("#{");
-	if ((start != -1) && (start < value.indexOf('}', start))) {
-            return true;
-        }
-        return false;
-
-    }
-
-    // ------------------------------------------ Methods from Tag
-
-    /**
-     * <p>Release any resources allocated during the execution of this
-     * tag handler.</p>
-     */
-    public void release() {
-	
-	this.suppressed = false;
-	this.binding = null;
-        this.rendered = null;
-	super.release();
-    }
-
-
-    // ----------------  Concrete Implementations of methods from superclass
-
-    /**
-     * @param component {@inheritDoc} 
-     */
-    protected void setProperties(UIComponent component) {
-        // The "id" property is explicitly set when components are created
-        // so it does not need to be set here
-        if (rendered != null) {
-	    if (isValueReference(rendered)) {
-		ValueBinding vb =
-		    getFacesContext().getApplication().createValueBinding(rendered);
-		component.setValueBinding("rendered", vb);
-	    } else {
-		component.setRendered(Boolean.valueOf(rendered).booleanValue());
-	    }
-        }
-	if (getRendererType() != null) {
-	    component.setRendererType(getRendererType());
-	}
-
-    }
-
-
-
-
-
-    /**
-     * <p>Implement <code>createComponent</code> using Faces 1.1 EL
-     * API.</p>
-     * 
-     * @param context {@inheritDoc} 
-     * @param newId {@inheritDoc}
-     */
-    protected UIComponent createComponent(FacesContext context, String newId) {
-        UIComponent component;
-        Application application = context.getApplication();
-        if (binding != null) {
-            ValueBinding vb = application.createValueBinding(binding);
-            component = application.createComponent(vb, context,
-                                                    getComponentType());
-	    component.setValueBinding("binding", vb);
-        } else {
-            component = application.createComponent(getComponentType());
-        }
-
-        component.setId(newId);
-        setProperties(component);
-
-        return component;
-    }
-
-
-    // Tag tree navigation
-
-    /**
-     * <p>Locate and return the nearest enclosing {@link UIComponentTag}
-     * if any; otherwise, return <code>null</code>.</p>
-     *
-     * @param context <code>PageContext</code> for the current page
-     */
-    public static UIComponentTag getParentUIComponentTag(PageContext context) {
-
-        UIComponentClassicTagBase result =
-             getParentUIComponentClassicTagBase(context);
-        if (!(result instanceof UIComponentTag)) {
-            return new UIComponentTagAdapter(result);
-        }
-        return ((UIComponentTag) result);
-
-    }
-
-
-    // --------------------------------------------------------- Private Classes
-
-
-    /**
-     * This adatper exposes a UIComponentClassicTagBase as a UIComponentTag
-     * for 1.1 component libraries that rely on UIComponent.getParentUIComponentTag().
-     *
-     * This will work for most use cases, but there are probably some edge
-     * cases out there that we're not aware of.
-     */
-    private static class UIComponentTagAdapter extends UIComponentTag {
-
-        UIComponentClassicTagBase classicDelegate;
-
-        public UIComponentTagAdapter(UIComponentClassicTagBase classicDelegate) {
-
-            this.classicDelegate = classicDelegate;
-
-        }
-
-        public String getComponentType() {
-            return classicDelegate.getComponentType();
-        }
-
-        public String getRendererType() {
-            return classicDelegate.getRendererType();
-        }
-
-        public int doStartTag() throws JspException {
-            throw new IllegalStateException();
-        }
-
-        public int doEndTag() throws JspException {
-            throw new IllegalStateException();
-        }
-
-        public UIComponent getComponentInstance() {
-            return classicDelegate.getComponentInstance();
-        }
-
-        public boolean getCreated() {
-            return classicDelegate.getCreated();
-        }
-
-        public Tag getParent() {
-            return classicDelegate.getParent();
-        }
-
-        public void setParent(Tag parent) {
-            throw new IllegalStateException();
-        }
-                
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/UIComponentTagBase.java b/jsf-api/src/main/java/javax/faces/webapp/UIComponentTagBase.java
deleted file mode 100644
index 0f98c2f..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/UIComponentTagBase.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-import javax.el.ELContext;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.servlet.jsp.tagext.JspTag;
-
-import java.util.logging.Logger;
-
-/**
- * <p><strong><code>UIComponentTagBase</code></strong> is the base class
- * for all JSP tags that correspond to a {@link
- * javax.faces.component.UIComponent} instance in the view.  This base
- * class allows a single view to be described in a JSP page consisting
- * of both {@link UIComponentELTag} and {@link UIComponentTag}
- * instances.</p>
- */
-
-public abstract class UIComponentTagBase extends Object implements JspTag {
-    
-    protected static Logger log = Logger.getLogger("javax.faces.webapp", 
-            "javax.faces.LogStrings");
-
-    /**
-     * <p>Return the {@link FacesContext} instance for the current
-     * request.  This value will be non-<code>null</code> only from the
-     * beginning of <code>doStartTag()</code> through the end of
-     * <code>doEndTag()</code> for each tag instance.</p>
-     */
-    protected abstract FacesContext getFacesContext();
-
-    /**
-     * <p>Return the {@link ELContext} for the {@link FacesContext} for
-     * this request.</p>
-     *
-     * <p>This is a convenience for
-     * <code>getFacesContext().getELContext()</code>.</p>
-     */
-
-    protected ELContext getELContext() {
-	FacesContext fc = getFacesContext();
-	ELContext result = null;
-	if (null != fc) {
-	    result = fc.getELContext();
-	}
-	return result;
-    }
-
-
-    /**
-     * <p>Add the component identifier of the specified {@link UIComponent}
-     * to the list of component identifiers created or located by nested
-     * {@link UIComponentTag}s processing this request.</p>
-     *
-     * @param child New child whose identifier should be added
-     */
-    protected abstract void addChild(UIComponent child);
-
-    /**
-     * <p>Add the facet name of the specified facet to the list of
-     * facet names created or located by nested {@link UIComponentTag}s
-     * processing this request.</p>
-     *
-     * @param name Facet name to be added
-     */
-    protected abstract void addFacet(String name);
-
-    /**
-     * <p>Set the component identifier for the component corresponding
-     * to this tag instance.  If the argument begins with {@link
-     * javax.faces.component.UIViewRoot#UNIQUE_ID_PREFIX} throw an
-     * <code>IllegalArgumentException</code></p>
-     *
-     * @param id The new component identifier.  This may not start with
-     * {@link javax.faces.component.UIViewRoot#UNIQUE_ID_PREFIX}.
-     *
-     * @throws IllegalArgumentException if the argument is
-     * non-<code>null</code> and starts with {@link
-     * javax.faces.component.UIViewRoot#UNIQUE_ID_PREFIX}.
-     */
-    public abstract void setId(String id);
-
-    /**
-     * <p>Return the component type for the component that is or will be
-     * bound to this tag.  This value can be passed to
-     * {@link javax.faces.application.Application#createComponent} to create
-     * the {@link UIComponent} instance for this tag.  Subclasses must
-     * override this method to return the appropriate value.</p>
-     */
-    public abstract String getComponentType();
-
-    /**
-     * <p>Return the <code>rendererType</code> property that selects the
-     * <code>Renderer</code> to be used for encoding this component, or
-     * <code>null</code> to ask the component to render itself directly.
-     * Subclasses must override this method to return the appropriate value.
-     * </p>
-     */
-    public abstract String getRendererType();
-
-    /**
-     * <p>Return the {@link UIComponent} instance that is associated with
-     * this tag instance.  This method is designed to be used by tags nested
-     * within this tag, and only returns useful results between the
-     * execution of <code>doStartTag()</code> and <code>doEndTag()</code>
-     * on this tag instance.</p>
-     */
-    public abstract UIComponent getComponentInstance();
-
-    /**
-     * <p>Return <code>true</code> if we dynamically created a new component
-     * instance during execution of this tag.  This method is designed to be
-     * used by tags nested within this tag, and only returns useful results
-     * between the execution of <code>doStartTag()</code> and
-     * <code>doEndTag()</code> on this tag instance.</p>
-     */
-    public abstract boolean getCreated();
-
-    /**
-     * <p>Return the index of the next child to be added as a child of
-     * this tag.  The default implementation maintains a list of created
-     * components and returns the size of the list.</p>
-     */
-
-    protected abstract int getIndexOfNextChildTag();
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/ValidatorELTag.java b/jsf-api/src/main/java/javax/faces/webapp/ValidatorELTag.java
deleted file mode 100644
index 9e3fc7f..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/ValidatorELTag.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-
-
-/**
- * <p><strong>ValidatorELTag</strong> is a base class for all JSP custom actions
- * that create and register a <code>Validator</code> instance on the
- * {@link EditableValueHolder} associated with our most immediate surrounding instance
- * of a tag whose implementation class is a subclass of {@link UIComponentTag}.
- * To avoid creating duplicate instances when a page is redisplayed,
- * creation and registration of a {@link Validator} occurs
- * <strong>only</strong> if the corresponding {@link UIComponent} was
- * created (by the owning {@link UIComponentTagBase}) during the execution of the
- * current page.</p>
- *
- * <p>This class must be used as a base class for tag instances that
- * support specific {@link Validator} subclasses.</p>
- *
- * <p>Subclasses of this class must implement the
- * <code>createValidator()</code> method, which creates and returns a
- * {@link Validator} instance.  Any configuration properties that specify
- * the limits to be enforced by this {@link Validator} must have been
- * set by the <code>createValidator()</code> method.  Generally, this occurs
- * by copying corresponding attribute values on the tag instance.</p>
- *
- * <p>This tag creates no output to the page currently being created.  It
- * is used solely for the side effect of {@link Validator} creation.</p>
- *
- */
-
-public abstract class ValidatorELTag extends TagSupport {
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the specified {@link Validator}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentTagBase} instance, if
-     * the {@link UIComponent} instance was created by this execution of the
-     * containing JSP page.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-        
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) { 
-       	    //PENDING i18n
-            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }
-        
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {            
-            //PENDING i18n
-            throw new JspException("Can't create Component from tag.");
-        }
-        if (!(component instanceof EditableValueHolder)) {
-            // PENDING i18n
-            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-
-        Validator validator = createValidator();
-        
-        if (validator == null) {
-            // PENDING i18n
-            throw new JspException("Can't create class of type:"+
-                " javax.faces.validator.Validator.  Validator is null");
-        }
-
-        // Register an instance with the appropriate component
-        ((EditableValueHolder)component).addValidator(validator);
-        
-        return (SKIP_BODY);
-
-    }
-
-
-    // ------------------------------------------------------ Protected Methods
-
-
-    /**
-     * <p>Create and return a new {@link Validator} to be registered
-     * on our surrounding {@link UIComponent}.</p>
-     *
-     * @throws JspException if a new instance cannot be created
-     */
-    protected abstract Validator createValidator()
-        throws JspException;
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/ValidatorTag.java b/jsf-api/src/main/java/javax/faces/webapp/ValidatorTag.java
deleted file mode 100644
index 7048c17..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/ValidatorTag.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-import javax.el.ValueExpression;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-
-
-/**
- * <p><strong>ValidatorTag</strong> is a base class for all JSP custom actions
- * that create and register a <code>Validator</code> instance on the
- * {@link EditableValueHolder} associated with our most immediate surrounding instance
- * of a tag whose implementation class is a subclass of {@link UIComponentTag}.
- * To avoid creating duplicate instances when a page is redisplayed,
- * creation and registration of a {@link Validator} occurs
- * <strong>only</strong> if the corresponding {@link UIComponent} was
- * created (by the owning {@link UIComponentTag}) during the execution of the
- * current page.</p>
- *
- * <p>This class may be used directly to implement a generic validator
- * registration tag (based on the validator-id specified by the
- * <code>id</code> attribute), or as a base class for tag instances that
- * support specific {@link Validator} subclasses.  This <code>id</code>
- * attribute must refer to one of the well known validator-ids, or a
- * custom validator-id as defined in a <code>faces-config.xml</code>
- * file.</p>
- *
- * <p>Subclasses of this class must implement the
- * <code>createValidator()</code> method, which creates and returns a
- * {@link Validator} instance.  Any configuration properties that specify
- * the limits to be enforced by this {@link Validator} must have been
- * set by the <code>createValidator()</code> method.  Generally, this occurs
- * by copying corresponding attribute values on the tag instance.</p>
- *
- * <p>This tag creates no output to the page currently being created.  It
- * is used solely for the side effect of {@link Validator} creation.</p>
- *
- * @deprecated This has been partially replaced by {@link
- * ValidatorELTag}.  The remainder of the functionality, namely, the
- * binding facility and the implementation of the {@link
- * #createValidator} method, is now an implementation detail.
- */
-
-public class ValidatorTag extends TagSupport {
-
-
-    // ---------------------------------------------------------- Static Members
-
-
-    private static final long serialVersionUID = -5562623615418158868L;
-
-
-    // ------------------------------------------------------------- Attributes
-
-    /**
-     * <p>The identifier of the {@link Validator} instance to be created.</p>
-     */
-    private String validatorId = null;
-    
-    /**
-     * <p>The {@link ValueExpression} that evaluates to an object that 
-     * implements {@link Validator}.</p>
-     */
-    private String binding = null;
-
-    /**
-     * <p>Set the identifer of the {@link Validator} instance to be created.
-     *
-     * @param validatorId The new identifier of the validator instance to be
-     *                    created.
-     */
-    public void setValidatorId(String validatorId) {
-
-        this.validatorId = validatorId;
-
-    }
-
-    /**
-     * <p>Set the expression that will be used to create a {@link ValueExpression} 
-     * that references a backing bean property of the {@link Validator} instance to 
-     * be created.</p>
-     *
-     * @param binding The new expression 
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public void setBinding(String binding) 
-        throws JspException {
-        if (binding != null && !UIComponentTag.isValueReference(binding)) {
-            //PENDING i18n
-            throw new JspException("Invalid Expression:"+binding);
-        }
-        this.binding = binding;
-    }
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the specified {@link Validator}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentTag} instance, if
-     * the {@link UIComponent} instance was created by this execution of the
-     * containing JSP page.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-        
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) { 
-       	    //PENDING i18n
-            throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }
-        
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {            
-            //PENDING i18n
-            throw new JspException("Can't create Component from tag.");
-        }
-        if (!(component instanceof EditableValueHolder)) {
-            // PENDING i18n
-            throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
-                    this.getClass().getName());
-        }
-
-        Validator validator = createValidator();
-        
-        if (validator == null) {
-            //noinspection NonConstantStringShouldBeStringBuffer
-            String validateError = null;
-            if (binding != null) {
-                validateError = binding;
-            }
-            if (validatorId != null) {
-                if (validateError != null) {
-                    validateError += " or " + validatorId;
-                } else {
-                    validateError = validatorId;
-                }
-            }
-                
-            // PENDING i18n
-            throw new JspException("Can't create class of type:"+
-                "javax.faces.validator.Validator from:"+validateError);
-        }
-
-        // Register an instance with the appropriate component
-        ((EditableValueHolder)component).addValidator(validator);
-        
-        return (SKIP_BODY);
-
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.id = null;
-
-    }
-
-
-    // ------------------------------------------------------ Protected Methods
-
-
-    /**
-     * <p>Create and return a new {@link Validator} to be registered
-     * on our surrounding {@link UIComponent}.</p>
-     *
-     * @throws JspException if a new instance cannot be created
-     */
-    protected Validator createValidator()
-        throws JspException {
-        
-        FacesContext context = FacesContext.getCurrentInstance();
-        Validator validator = null;
-        ValueExpression vb = null;
-        
-        // If "binding" is set, use it to create a validator instance.
-        if (binding != null) {
-            try {
-                vb = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), 
-                        binding, Object.class);
-                if (vb != null) {
-                    validator = (Validator)vb.getValue(context.getELContext());
-                    if (validator != null) {
-                        return validator;
-                    }
-                }
-            } catch (Exception e) {
-                throw new JspException(e);
-            }
-        } 
-        // If "validatorId" is set, use it to create the validator
-        // instance.  If "validatorId" and "binding" are both set, store the 
-        // validator instance in the value of the property represented by
-        // the value binding expression.      
-        if (validatorId != null) {
-            try {
-                String validatorIdVal = validatorId;
-                if (UIComponentTag.isValueReference(validatorId)) {
-                    ValueExpression idBinding = context.getApplication().
-                        getExpressionFactory().createValueExpression(context.getELContext(), 
-                            validatorId, Object.class);
-                    validatorIdVal = (String)idBinding.getValue(context.getELContext());
-                }
-                validator = context.getApplication().createValidator(validatorIdVal);
-                if (validator != null) { 
-                    if (vb != null) {
-                        vb.setValue(context.getELContext(), validator);
-                    }
-                }
-            } catch (Exception e) {
-                throw new JspException(e);
-            }
-        }
-        return validator;
-    }
-
-
-}
diff --git a/jsf-api/src/main/java/javax/faces/webapp/package.html b/jsf-api/src/main/java/javax/faces/webapp/package.html
deleted file mode 100644
index 51d7205..0000000
--- a/jsf-api/src/main/java/javax/faces/webapp/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
-<head>
-<title>Package Description for "javax.faces.webapp"</title>
-</head>
-<body bgcolor="white">
-
-<p><span class="changed_modified_2_0">Classes</span> required for
-integration of JavaServer Faces into web applications, including a
-standard servlet, <span class="changed_deleted_2_0">base classes for JSP
-custom component tags, and concrete tag implementations for core
-tags</span>.</p>
-</body>
-</html>
diff --git a/jsf-api/src/main/resources/jsf-api.css b/jsf-api/src/main/resources/jsf-api.css
deleted file mode 100644
index b0f23f9..0000000
--- a/jsf-api/src/main/resources/jsf-api.css
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Change bars from http://www.geocities.com/hentaihelper/2atimlin.htm */
-
-/* put a red "change" bar in the left margin			*/
-/*
-   .changed_added_2_0 { cursor: url(changed_added_2_0_cursor.png), auto;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-   .changed_modified_2_0 { cursor: url(changed_modified_2_0_cursor.png), auto;
-                 background: url(changed_modified_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:orange }
-
-   .changed_deleted_2_0 { cursor: url(changed_deleted_2_0_cursor.png), auto;
-                 background: url(changed_deleted_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:red;
-                 text-decoration: line-through; }
-*/
-
-   .changed_added_2_0_rev_a { cursor: url(changed_added_2_0_rev_a_cursor.cur), auto;
-                 background: url(changed_added_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-   .changed_modified_2_0_rev_a { cursor: url(changed_modified_2_0_rev_a_cursor.cur), auto;
-                 background: url(changed_modified_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:orange }
-
-   .changed_deleted_2_0_rev_a { cursor: url(changed_deleted_2_0_rev_a_cursor.cur), auto;
-                 background: url(changed_deleted_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:red;
-                 text-decoration: line-through; }
-
-
-.javadocSection { font-size: large; }
-
-.java .de1, .java .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
-.java  {font-family: monospace;}
-.java .imp {font-weight: bold; color: red;}
-.java li {background: #ffffff;}
-.java li.li2 {background: #f8f8f8;}
-.java .kw1 {color: #b1b100;}
-.java .kw2 {color: #000000; font-weight: bold;}
-.java .kw3 {color: #aaaadd; font-weight: bold;}
-.java .kw4 {color: #993333;}
-.java .co1 {color: #808080; font-style: italic;}
-.java .co2 {color: #a1a100;}
-.java .coMULTI {color: #808080; font-style: italic;}
-.java .es0 {color: #000099; font-weight: bold;}
-.java .br0 {color: #66cc66;}
-.java .st0 {color: #ff0000;}
-.java .nu0 {color: #cc66cc;}
-.java .me1 {color: #006600;}
-.java .me2 {color: #006600;}
-
-
-div.syntax
-{
-background:white;
-}
-
-div.syntax a
-{
-	font-family: 'Courier New', Courier, monospace; 
-	font-weight: normal;
-	color:black;
-	text-decoration:underline;
-}
diff --git a/jsf-api/src/main/resources/jsf.js b/jsf-api/src/main/resources/jsf.js
deleted file mode 100644
index 3ddfdfc..0000000
--- a/jsf-api/src/main/resources/jsf.js
+++ /dev/null
@@ -1,2247 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notices:
- *
- * Copyright 2004 The Apache Software Foundation
- * Copyright 2004-2008 Emmanouil Batsis, mailto: mbatsis at users full stop sourceforge full stop net
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- @project JSF JavaScript Library
- @version 2.0
- @description This is the standard implementation of the JSF JavaScript Library.
- */
-
-/**
- * Register with OpenAjax
- */
-if (typeof OpenAjax !== "undefined" &&
-    typeof OpenAjax.hub.registerLibrary !== "undefined") {
-    OpenAjax.hub.registerLibrary("jsf", "www.sun.com", "2.0", null);
-}
-
-// Detect if this is already loaded, and if loaded, if it's a higher version
-if (!((jsf && jsf.specversion && jsf.specversion > 20000 ) &&
-      (jsf.implversion && jsf.implversion > 2))) {
-
-    /**
-     * The top level global namespace for JavaServer Faces functionality.
-     * @name jsf
-     * @namespace
-     */
-    var jsf = {};
-
-    /**
-     * The namespace for Ajax functionality.
-     * @name jsf.ajax
-     * @namespace
-     * @exec
-     */
-    jsf.ajax = function() {
-
-        var eventListeners = [];
-        var errorListeners = [];
-
-        /**
-         * Determine if the current browser is part of Microsoft's failed attempt at
-         * standards modification.
-         * @ignore
-         */
-        var isIE = function isIE() {
-            if (typeof isIECache !== "undefined") {
-                return isIECache;
-            }
-            isIECache =
-                   document.all && window.ActiveXObject &&
-                   navigator.userAgent.toLowerCase().indexOf("msie") > -1 &&
-                   navigator.userAgent.toLowerCase().indexOf("opera") == -1;
-            return isIECache;
-        };
-        var isIECache;
-
-        /**
-         * Determine if loading scripts into the page executes the script.
-         * This is instead of doing a complicated browser detection algorithm.  Some do, some don't.
-         * @returns {boolean} does including a script in the dom execute it?
-         * @ignore
-         */
-        var isAutoExecCache;
-        var isAutoExec = function isAutoExec() {
-            try {
-                if (typeof isAutoExecCache !== "undefined") {
-                    return isAutoExecCache;
-                }
-                var autoExecTestString = "<script>var mojarra = mojarra || {};mojarra.autoExecTest = true;</script>";
-                var tempElement = document.createElement('span');
-                tempElement.innerHTML = autoExecTestString;
-                var body = document.getElementsByTagName('body')[0];
-                var tempNode = body.appendChild(tempElement);
-                if (mojarra && mojarra.autoExecTest) {
-                    isAutoExecCache = true;
-                    delete mojarra.autoExecTest;
-                } else {
-                    isAutoExecCache = false;
-                }
-                deleteNode(tempNode);
-                return isAutoExecCache;
-            } catch (ex) {
-                // OK, that didn't work, we'll have to make an assumption
-                if (typeof isAutoExecCache === "undefined") {
-                    isAutoExecCache = false;
-                }
-                return isAutoExecCache;
-            }
-        };
-
-        /**
-         * @ignore
-         */
-        var getTransport = function getTransport() {
-            var methods = [
-                function() {
-                    return new XMLHttpRequest();
-                },
-                function() {
-                    return new ActiveXObject('Msxml2.XMLHTTP');
-                },
-                function() {
-                    return new ActiveXObject('Microsoft.XMLHTTP');
-                }
-            ];
-
-            var returnVal;
-            for (var i = 0, len = methods.length; i < len; i++) {
-                try {
-                    returnVal = methods[i]();
-                } catch(e) {
-                    continue;
-                }
-                return returnVal;
-            }
-            throw new Error('Could not create an XHR object.');
-        };
-
-        /**
-         * Find instance of passed String via getElementById
-         * @ignore
-         */
-        var $ = function $() {
-            var results = [], element;
-            for (var i = 0; i < arguments.length; i++) {
-                element = arguments[i];
-                if (typeof element == 'string') {
-                    element = document.getElementById(element);
-                }
-                results.push(element);
-            }
-            return results.length > 1 ? results : results[0];
-        };
-
-        /**
-         * Get the form element which encloses the supplied element.
-         * @param element - element to act against in search
-         * @returns form element representing enclosing form, or first form if none found.
-         * @ignore
-         */
-        var getForm = function getForm(element) {
-            if (element) {
-                var form = $(element);
-                while (form) {
-
-                    if (form.nodeName && (form.nodeName.toLowerCase() == 'form')) {
-                        return form;
-                    }
-                    if (form.form) {
-                        return form.form;
-                    }
-                    if (form.parentNode) {
-                        form = form.parentNode;
-                    } else {
-                        form = null;
-                    }
-                }
-                return document.forms[0];
-            }
-            return null;
-        };
-
-        /**
-         * Check if a value exists in an array
-         * @ignore
-         */
-        var isInArray = function isInArray(array, value) {
-            for (var i = 0; i < array.length; i++) {
-                if (array[i] === value) {
-                    return true;
-                }
-            }
-            return false;
-        };
-
-
-        /**
-         * Evaluate JavaScript code in a global context.
-         * @param src JavaScript code to evaluate
-         * @ignore
-         */
-        var globalEval = function globalEval(src) {
-            if (window.execScript) {
-                window.execScript(src);
-                return;
-            }
-            // We have to wrap the call in an anon function because of a firefox bug, where this is incorrectly set
-            // We need to explicitly call window.eval because of a Chrome peculiarity
-            var fn = function() {
-                window.eval.call(window,src);
-            };
-            fn();
-        };
-
-        /**
-         * Get all scripts from supplied string, return them as an array for later processing.
-         * @param str
-         * @returns {array} of script text
-         * @ignore
-         */
-        var stripScripts = function stripScripts(str) {
-            // Regex to find all scripts in a string
-            var findscripts = /<script[^>]*>([\S\s]*?)<\/script>/igm;
-            // Regex to find one script, to isolate it's content [2] and attributes [1]
-            var findscript = /<script([^>]*)>([\S\s]*?)<\/script>/im;
-            // Regex to remove leading cruft
-            var stripStart = /^\s*(<!--)*\s*(\/\/)*\s*(\/\*)*\s*(<!\[CDATA\[)*/;
-            // Regex to find src attribute
-            var findsrc = /src="([\S]*?)"/im;
-            var initialnodes = [];
-            var scripts = [];
-            initialnodes = str.match(findscripts);
-            while (!!initialnodes && initialnodes.length > 0) {
-                var scriptStr = [];
-                scriptStr = initialnodes.shift().match(findscript);
-                var src = [];
-                // check if src specified
-                src = scriptStr[1].match(findsrc);
-                var script;
-                if ( !!src && src[1]) {
-                    // if this is a file, load it
-                    var url = src[1];
-                    // if this is another copy of jsf.js, don't load it
-                    // it's never necessary, and can make debugging difficult
-                    if (/\/javax.faces.resource\/jsf.js\?ln=javax\.faces/.test(url)) {
-                        script = false;
-                    } else {
-                        script = loadScript(url);
-                    }
-                } else if (!!scriptStr && scriptStr[2]){
-                    // else get content of tag, without leading CDATA and such
-                    script = scriptStr[2].replace(stripStart,"");
-                } else {
-                    script = false;
-                }
-                if (!!script) {
-                    scripts.push(script);
-                }
-            }
-            return scripts;
-        };
-
-        /**
-         * Load a script via a url, use synchronous XHR request.  This is liable to be slow,
-         * but it's probably the only correct way.
-         * @param url the url to load
-         * @ignore
-         */
-        var loadScript = function loadScript(url) {
-            var xhr = getTransport();
-            if (xhr === null) {
-                return "";
-            }
-
-            xhr.open("GET", url, false);
-            xhr.setRequestHeader("Content-Type", "application/x-javascript");
-            xhr.send(null);
-
-            // PENDING graceful error handling
-            if (xhr.readyState == 4 && xhr.status == 200) {
-                    return xhr.responseText;
-            }
-
-            return "";
-        };
-
-        /**
-         * Run an array of scripts text
-         * @param scripts array of script nodes
-         * @ignore
-         */
-        var runScripts = function runScripts(scripts) {
-            if (!scripts || scripts.length === 0) {
-                return;
-            }
-
-            var head = document.getElementsByTagName('head')[0] || document.documentElement;
-            while (scripts.length) {
-                // create script node
-                var scriptNode = document.createElement('script');
-                scriptNode.type = 'text/javascript';
-                scriptNode.text = scripts.shift(); // add the code to the script node
-                head.appendChild(scriptNode); // add it to the page
-                head.removeChild(scriptNode); // then remove it
-            }
-        };
-
-        /**
-         * Replace DOM element with a new tagname and supplied innerHTML
-         * @param element element to replace
-         * @param tempTagName new tag name to replace with
-         * @param src string new content for element
-         * @ignore
-         */
-        var elementReplaceStr = function elementReplaceStr(element, tempTagName, src) {
-
-            var temp = document.createElement(tempTagName);
-            if (element.id) {
-                temp.id = element.id;
-            }
-
-            // Creating a head element isn't allowed in IE, and faulty in most browsers,
-            // so it is not allowed
-            if (element.nodeName.toLowerCase() === "head") {
-                throw new Error("Attempted to replace a head element - this is not allowed.");
-            } else {
-                var scripts = [];
-                if (isAutoExec()) {
-                    temp.innerHTML = src;
-                } else {
-                    // Get scripts from text
-                    scripts = stripScripts(src);
-                    // Remove scripts from text
-                    src = src.replace(/<script[^>]*>([\S\s]*?)<\/script>/igm,"");
-                    temp.innerHTML = src;
-                }
-            }
-
-            replaceNode(temp, element);            
-            runScripts(scripts);
-
-        };
-
-        /**
-         * Get a string with the concatenated values of all string nodes under the given node
-         * @param  oNode the given DOM node
-         * @param  deep boolean - whether to recursively scan the children nodes of the given node for text as well. Default is <code>false</code>
-         * @ignore
-         * Note:  This code originally from Sarissa: http://dev.abiss.gr/sarissa
-         * It has been modified to fit into the overall codebase
-         */
-        var getText = function getText(oNode, deep) {
-            var Node = {ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4,
-                ENTITY_REFERENCE_NODE: 5,  ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7,
-                COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10,
-                DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12};
-
-            var s = "";
-            var nodes = oNode.childNodes;
-            for (var i = 0; i < nodes.length; i++) {
-                var node = nodes[i];
-                var nodeType = node.nodeType;
-                if (nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE) {
-                    s += node.data;
-                } else if (deep === true && (nodeType == Node.ELEMENT_NODE ||
-                                             nodeType == Node.DOCUMENT_NODE ||
-                                             nodeType == Node.DOCUMENT_FRAGMENT_NODE)) {
-                    s += getText(node, true);
-                }
-            }
-            return s;
-        };
-
-        var PARSED_OK = "Document contains no parsing errors";
-        var PARSED_EMPTY = "Document is empty";
-        var PARSED_UNKNOWN_ERROR = "Not well-formed or other error";
-        var getParseErrorText;
-        if (isIE()) {
-            /**
-             * Note: This code orginally from Sarissa: http://dev.abiss.gr/sarissa
-             * @ignore
-             */
-            getParseErrorText = function (oDoc) {
-                var parseErrorText = PARSED_OK;
-                if (oDoc && oDoc.parseError && oDoc.parseError.errorCode && oDoc.parseError.errorCode !== 0) {
-                    parseErrorText = "XML Parsing Error: " + oDoc.parseError.reason +
-                                     "\nLocation: " + oDoc.parseError.url +
-                                     "\nLine Number " + oDoc.parseError.line + ", Column " +
-                                     oDoc.parseError.linepos +
-                                     ":\n" + oDoc.parseError.srcText +
-                                     "\n";
-                    for (var i = 0; i < oDoc.parseError.linepos; i++) {
-                        parseErrorText += "-";
-                    }
-                    parseErrorText += "^\n";
-                }
-                else if (oDoc.documentElement === null) {
-                    parseErrorText = PARSED_EMPTY;
-                }
-                return parseErrorText;
-            };
-        } else { // (non-IE)
-
-            /**
-             * <p>Returns a human readable description of the parsing error. Useful
-             * for debugging. Tip: append the returned error string in a <pre>
-             * element if you want to render it.</p>
-             * @param  oDoc The target DOM document
-             * @returns {String} The parsing error description of the target Document in
-             *          human readable form (preformated text)
-             * @ignore
-             * Note:  This code orginally from Sarissa: http://dev.abiss.gr/sarissa
-             */
-            getParseErrorText = function (oDoc) {
-                var parseErrorText = PARSED_OK;
-                if ((!oDoc) || (!oDoc.documentElement)) {
-                    parseErrorText = PARSED_EMPTY;
-                } else if (oDoc.documentElement.tagName == "parsererror") {
-                    parseErrorText = oDoc.documentElement.firstChild.data;
-                    parseErrorText += "\n" + oDoc.documentElement.firstChild.nextSibling.firstChild.data;
-                } else if (oDoc.getElementsByTagName("parsererror").length > 0) {
-                    var parsererror = oDoc.getElementsByTagName("parsererror")[0];
-                    parseErrorText = getText(parsererror, true) + "\n";
-                } else if (oDoc.parseError && oDoc.parseError.errorCode !== 0) {
-                    parseErrorText = PARSED_UNKNOWN_ERROR;
-                }
-                return parseErrorText;
-            };
-        }
-
-        if ((typeof(document.importNode) == "undefined") && isIE()) {
-            try {
-                /**
-                 * Implementation of importNode for the context window document in IE.
-                 * If <code>oNode</code> is a TextNode, <code>bChildren</code> is ignored.
-                 * @param oNode the Node to import
-                 * @param bChildren whether to include the children of oNode
-                 * @returns the imported node for further use
-                 * @ignore
-                 * Note:  This code orginally from Sarissa: http://dev.abiss.gr/sarissa
-                 */
-                document.importNode = function(oNode, bChildren) {
-                    var tmp;
-                    if (oNode.nodeName == '#text') {
-                        return document.createTextNode(oNode.data);
-                    }
-                    else {
-                        if (oNode.nodeName == "tbody" || oNode.nodeName == "tr") {
-                            tmp = document.createElement("table");
-                        }
-                        else if (oNode.nodeName == "td") {
-                            tmp = document.createElement("tr");
-                        }
-                        else if (oNode.nodeName == "option") {
-                            tmp = document.createElement("select");
-                        }
-                        else {
-                            tmp = document.createElement("div");
-                        }
-                        if (bChildren) {
-                            tmp.innerHTML = oNode.xml ? oNode.xml : oNode.outerHTML;
-                        } else {
-                            tmp.innerHTML = oNode.xml ? oNode.cloneNode(false).xml : oNode.cloneNode(false).outerHTML;
-                        }
-                        return tmp.getElementsByTagName("*")[0];
-                    }
-                };
-            } catch(e) {
-            }
-        }
-        // Setup Node type constants for those browsers that don't have them (IE)
-        var Node = {ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4,
-            ENTITY_REFERENCE_NODE: 5,  ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7,
-            COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10,
-            DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12};
-
-        // PENDING - add support for removing handlers added via DOM 2 methods
-        /**
-         * Delete all events attached to a node
-         * @param node
-         * @ignore
-         */
-        var clearEvents = function clearEvents(node) {
-            if (!node) {
-                return;
-            }
-
-            // don't do anything for text and comment nodes - unnecessary
-            if (node.nodeType == Node.TEXT_NODE || node.nodeType == Node.COMMENT_NODE) {
-                return;
-            }
-
-            var events = ['abort', 'blur', 'change', 'error', 'focus', 'load', 'reset', 'resize', 'scroll', 'select', 'submit', 'unload',
-            'keydown', 'keypress', 'keyup', 'click', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'dblclick' ];
-            try {
-                for (var e in events) {
-                    if (events.hasOwnProperty(e)) {
-                        node[e] = null;
-                    }
-                }
-            } catch (ex) {
-                // it's OK if it fails, at least we tried
-            }
-        };
-
-        /**
-         * Deletes node
-         * @param node
-         * @ignore
-         */
-        var deleteNode = function deleteNode(node) {
-            if (!node) {
-                return;
-            }
-            if (!isIE()) {
-                // nothing special required
-                if (!node.parentNode) {
-                    // if there's no parent, there's nothing to do
-                    return;
-                }
-                node.parentNode.removeChild(node);
-                return;
-            }
-            // The rest of this code is specialcasing for IE
-            if (node.nodeName.toLowerCase() === "body") {
-                // special case for removing body under IE.
-                deleteChildren(node);
-                try {
-                    node.outerHTML = '';
-                } catch (ex) {
-                    // fails under some circumstances, but not in RI
-                    // supplied responses.  If we've gotten here, it's
-                    // fairly safe to leave a lingering body tag rather than
-                    // fail outright
-                }
-                return;
-            }
-            var temp = node.ownerDocument.createElement('div');
-            var parent = node.parentNode;
-            temp.appendChild(parent.removeChild(node));
-            // Now clean up the temporary element
-            try {
-                temp.outerHTML = ''; //prevent leak in IE
-            } catch (ex) {
-                // at least we tried.  Fails in some circumstances,
-                // but not in RI supplied responses.  Better to leave a lingering
-                // temporary div than to fail outright.
-            }
-        };
-
-        /**
-         * Deletes all children of a node
-         * @param node
-         * @ignore
-         */
-        var deleteChildren = function deleteChildren(node) {
-            if (!node) {
-                return;
-            }
-            for (var x = node.childNodes.length - 1; x >= 0; x--) { //delete all of node's children
-                var childNode = node.childNodes[x];
-                deleteNode(childNode);
-            }
-        };
-
-        /**
-         * <p> Copies the childNodes of nodeFrom to nodeTo</p>
-         *
-         * @param  nodeFrom the Node to copy the childNodes from
-         * @param  nodeTo the Node to copy the childNodes to
-         * @ignore
-         * Note:  This code originally from Sarissa:  http://dev.abiss.gr/sarissa
-         * It has been modified to fit into the overall codebase
-         */
-        var copyChildNodes = function copyChildNodes(nodeFrom, nodeTo) {
-
-            if ((!nodeFrom) || (!nodeTo)) {
-                throw "Both source and destination nodes must be provided";
-            }
-
-            deleteChildren(nodeTo);
-            var nodes = nodeFrom.childNodes;
-            // if within the same doc, just move, else copy and delete
-            if (nodeFrom.ownerDocument == nodeTo.ownerDocument) {
-                while (nodeFrom.firstChild) {
-                    nodeTo.appendChild(nodeFrom.firstChild);
-                }
-            } else {
-                var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument;
-                var i;
-                if (typeof(ownerDoc.importNode) != "undefined") {
-                    for (i = 0; i < nodes.length; i++) {
-                        nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));
-                    }
-                } else {
-                    for (i = 0; i < nodes.length; i++) {
-                        nodeTo.appendChild(nodes[i].cloneNode(true));
-                    }
-                }
-            }
-        };
-
-
-        /**
-         * Replace one node with another.  Necessary for handling IE memory leak.
-         * @param node
-         * @param newNode
-         */
-        var replaceNode = function replaceNode(newNode, node) {
-               if(isIE()){
-                    node.parentNode.insertBefore(newNode, node);
-                    deleteNode(node);
-               } else {
-                    node.parentNode.replaceChild(newNode, node);
-               }
-        };
-
-
-        /**
-         * copy all attributes from one element to another - except id
-         * @param target element to copy attributes to
-         * @param source element to copy attributes from
-         * @ignore
-         */
-        var cloneAttributes = function cloneAttributes(target, source) {
-
-            // enumerate core element attributes - without 'dir' as special case
-            var coreElementAttributes = ['className', 'title', 'lang', 'xml:lang'];
-
-            // Enumerate additional input element attributes
-            var inputElementAttributes =
-                    [   'name', 'value', 'checked', 'disabled', 'readOnly',
-                        'size', 'maxLength', 'src', 'alt', 'useMap', 'isMap',
-                        'tabIndex', 'accessKey', 'accept', 'type'
-                    ];
-
-            // Enumerate all the names of the event listeners
-            var listenerNames =
-                    [ 'onclick', 'ondblclick', 'onmousedown', 'onmousemove', 'onmouseout',
-                        'onmouseover', 'onmouseup', 'onkeydown', 'onkeypress', 'onkeyup',
-                        'onhelp', 'onblur', 'onfocus', 'onchange', 'onload', 'onunload', 'onabort',
-                        'onreset', 'onselect', 'onsubmit'
-                    ];
-
-            var iIndex, iLength; // for loop variables
-            var attributeName; // name of the attribute to set
-            var newValue, oldValue; // attribute values in each element
-
-            // First, copy over core attributes
-            for (iIndex = 0,iLength = coreElementAttributes.length; iIndex < iLength; iIndex++) {
-                attributeName = coreElementAttributes[iIndex];
-                newValue = source[attributeName];
-                oldValue = target[attributeName];
-                if (oldValue != newValue) {
-                    target[attributeName] = newValue;
-                }
-            }
-
-            // Next, if it's an input, copy those over
-            if (target.nodeName.toLowerCase() === 'input') {
-                for (iIndex = 0,iLength = inputElementAttributes.length; iIndex < iLength; iIndex++) {
-                    attributeName = inputElementAttributes[iIndex];
-                    newValue = source[attributeName];
-                    oldValue = target[attributeName];
-                    if (oldValue != newValue) {
-                        target[attributeName] = newValue;
-                    }
-                }
-            }
-            //'style' attribute special case
-            var newStyle = source.getAttribute('style');
-            var oldStyle = target.getAttribute('style');
-            if (newStyle != oldStyle) {
-                if (isIE()) {
-                    target.style.setAttribute('cssText', newStyle, 0);
-                } else {
-                    target.setAttribute('style',newStyle);
-                }
-            }
-            for (var lIndex = 0, lLength = listenerNames.length; lIndex < lLength; lIndex++) {
-                var name = listenerNames[lIndex];
-                target[name] = source[name] ? source[name] : null;
-                if (source[name]) {
-                    source[name] = null;
-                }
-            }
-            // Special case for 'dir' attribute
-            if (!isIE() && source.dir != target.dir) {
-                target.dir = source.dir ? source.dir : null;
-            }
-        };
-
-        /**
-         * Replace an element from one document into another
-         * @param newElement new element to put in document
-         * @param origElement original element to replace
-         * @ignore
-         */
-        var elementReplace = function elementReplace(newElement, origElement) {
-            copyChildNodes(newElement, origElement);
-            // sadly, we have to reparse all over again
-            // to reregister the event handlers and styles
-            // PENDING do some performance tests on large pages
-            origElement.innerHTML = origElement.innerHTML;
-
-            try {
-                cloneAttributes(origElement, newElement);
-            } catch (ex) {
-                // if in dev mode, report an error, else try to limp onward
-                if (jsf.getProjectStage() == "Development") {
-                    throw new Error("Error updating attributes");
-                }
-            }
-            deleteNode(newElement);
-
-        };
-
-        /**
-         * Create a new document, then select the body element within it
-         * @param docStr Stringified version of document to create
-         * @return element the body element
-         * @ignore
-         */
-        var getBodyElement = function getBodyElement(docStr) {
-
-            var doc;  // intermediate document we'll create
-            var body; // Body element to return
-
-            if (typeof DOMParser !== "undefined") {  // FF, S, Chrome
-                doc = (new DOMParser()).parseFromString(docStr, "text/xml");
-            } else if (typeof ActiveXObject !== "undefined") { // IE
-                doc = new ActiveXObject("MSXML2.DOMDocument");
-                doc.loadXML(docStr);
-            } else {
-                throw new Error("You don't seem to be running a supported browser");
-            }
-
-            if (getParseErrorText(doc) !== PARSED_OK) {
-                throw new Error(getParseErrorText(doc));
-            }
-
-            body = doc.getElementsByTagName("body")[0];
-
-            if (!body) {
-                throw new Error("Can't find body tag in returned document.");
-            }
-
-            return body;
-        };
-
-        /**
-         * Do update.
-         * @param element element to update
-         * @param context context of request
-         * @ignore
-         */
-        var doUpdate = function doUpdate(element, context) {
-            var id, content, markup, state;
-            var stateForm;
-            var scripts = []; // temp holding value for array of script nodes
-
-            id = element.getAttribute('id');
-            if (id === "javax.faces.ViewState") {
-
-                state = element.firstChild;
-
-                // Now set the view state from the server into the DOM
-                // but only for the form that submitted the request.
-
-                stateForm = document.getElementById(context.formid);
-                if (!stateForm || !stateForm.elements) {
-                    // if the form went away for some reason, or it lacks elements 
-                    // we're going to just return silently.
-                    return;
-                }
-                var field = stateForm.elements["javax.faces.ViewState"];
-                if (typeof field == 'undefined') {
-                    field = document.createElement("input");
-                    field.type = "hidden";
-                    field.name = "javax.faces.ViewState";
-                    stateForm.appendChild(field);
-                }
-                field.value = state.nodeValue;
-
-                // Now set the view state from the server into the DOM
-                // for any form that is a render target.
-
-                if (typeof context.render !== 'undefined' && context.render !== null) {
-                    var temp = context.render.split(' ');
-                    for (var i = 0; i < temp.length; i++) {
-                        if (temp.hasOwnProperty(i)) {
-                            // See if the element is a form and
-                            // the form is not the one that caused the submission..
-                            var f = document.forms[temp[i]];
-                            if (typeof f !== 'undefined' && f !== null && f.id !== context.formid) {
-                                field = f.elements["javax.faces.ViewState"];
-                                if (typeof field === 'undefined') {
-                                    field = document.createElement("input");
-                                    field.type = "hidden";
-                                    field.name = "javax.faces.ViewState";
-                                    f.appendChild(field);
-                                }
-                                field.value = state.nodeValue;
-                            }
-                        }
-                    }
-                }
-                return;
-            }
-
-            // join the CDATA sections in the markup
-            markup = '';
-            for (var j = 0; j < element.childNodes.length; j++) {
-                content = element.childNodes[j];
-                markup += content.nodeValue;
-            }
-
-            var src = markup;
-
-            // If our special render all markup is present..
-            if (id === "javax.faces.ViewRoot" || id === "javax.faces.ViewBody") {
-                var bodyStartEx = new RegExp("< *body[^>]*>", "gi");
-                var bodyEndEx = new RegExp("< */ *body[^>]*>", "gi");
-                var newsrc;
-
-                var docBody = document.getElementsByTagName("body")[0];
-                var bodyStart = bodyStartEx.exec(src);
-
-                if (bodyStart !== null) { // replace body tag
-                    // First, try with XML manipulation
-                    try {
-                        // Get scripts from text
-                        scripts = stripScripts(src);
-                        // Remove scripts from text
-                        newsrc = src.replace(/<script[^>]*>([\S\s]*?)<\/script>/igm, "");
-                        elementReplace(getBodyElement(newsrc), docBody);
-                        runScripts(scripts);
-                    } catch (e) {
-                        // OK, replacing the body didn't work with XML - fall back to quirks mode insert
-                        var srcBody, bodyEnd;
-                        // if src contains </body>
-                        bodyEnd = bodyEndEx.exec(src);
-                        if (bodyEnd !== null) {
-                            srcBody = src.substring(bodyStartEx.lastIndex,
-                                    bodyEnd.index);
-                        } else { // can't find the </body> tag, punt
-                            srcBody = src.substring(bodyStartEx.lastIndex);
-                        }
-                        // replace body contents with innerHTML - note, script handling happens within function
-                        elementReplaceStr(docBody, "body", srcBody);
-
-                    }
-
-                } else {  // replace body contents with innerHTML - note, script handling happens within function
-                    elementReplaceStr(docBody, "body", src);
-                }
-            } else if (id === "javax.faces.ViewHead") {
-                throw new Error("javax.faces.ViewHead not supported - browsers cannot reliably replace the head's contents");
-            } else {
-                var d = $(id);
-                if (!d) {
-                    throw new Error("During update: " + id + " not found");
-                }
-                var parent = d.parentNode;
-                // Trim space padding before assigning to innerHTML
-                var html = src.replace(/^\s+/g, '').replace(/\s+$/g, '');
-                var parserElement = document.createElement('div');
-                var tag = d.nodeName.toLowerCase();
-                var tableElements = ['td', 'th', 'tr', 'tbody', 'thead', 'tfoot'];
-                var isInTable = false;
-                for (var tei = 0, tel = tableElements.length; tei < tel; tei++) {
-                    if (tableElements[tei] == tag) {
-                        isInTable = true;
-                        break;
-                    }
-                }
-                if (isInTable) {
-
-                    if (isAutoExec()) {
-                        // Create html
-                        parserElement.innerHTML = '<table>' + html + '</table>';
-                    } else {
-                        // Get the scripts from the text
-                        scripts = stripScripts(html);
-                        // Remove scripts from text
-                        html = html.replace(/<script[^>]*>([\S\s]*?)<\/script>/igm,"");
-                        parserElement.innerHTML = '<table>' + html + '</table>';
-                    }
-                    var newElement = parserElement.firstChild;
-                    //some browsers will also create intermediary elements such as table>tbody>tr>td
-                    while ((null !== newElement) && (id !== newElement.id)) {
-                        newElement = newElement.firstChild;
-                    }
-                    parent.replaceChild(newElement, d);
-                    runScripts(scripts);
-                } else if (d.nodeName.toLowerCase() === 'input') {
-                    // special case handling for 'input' elements
-                    // in order to not lose focus when updating,
-                    // input elements need to be added in place.
-                    parserElement = document.createElement('div');
-                    parserElement.innerHTML = html;
-                    newElement = parserElement.firstChild;
-
-                    cloneAttributes(d, newElement);
-                    deleteNode(parserElement);
-                } else if (html.length > 0) {
-                    if (isAutoExec()) {
-                        // Create html
-                        parserElement.innerHTML = html;
-                    } else {
-                        // Get the scripts from the text
-                        scripts = stripScripts(html);
-                        // Remove scripts from text
-                        html = html.replace(/<script[^>]*>([\S\s]*?)<\/script>/igm,"");
-                        parserElement.innerHTML = html;
-                    }
-                    replaceNode(parserElement.firstChild, d);
-                    deleteNode(parserElement);
-                    runScripts(scripts);
-                }
-            }
-        };
-
-        /**
-         * Delete a node specified by the element.
-         * @param element
-         * @ignore
-         */
-        var doDelete = function doDelete(element) {
-            var id = element.getAttribute('id');
-            var target = $(id);
-            deleteNode(target);
-        };
-
-        /**
-         * Insert a node specified by the element.
-         * @param element
-         * @ignore
-         */
-        var doInsert = function doInsert(element) {
-            var scripts = [];
-            var target = $(element.firstChild.getAttribute('id'));
-            var parent = target.parentNode;
-            var tempElement = document.createElement('span');
-            var html = element.firstChild.firstChild.nodeValue;
-
-            if (isAutoExec()) {
-                // Create html
-                tempElement.innerHTML = html;
-            } else {
-                // Get the scripts from the text
-                scripts = stripScripts(html);
-                // Remove scripts from text
-                html = html.replace(/<script[^>]*>([\S\s]*?)<\/script>/igm,"");
-                tempElement.innerHTML = html;
-            }
-            if (element.firstChild.nodeName === 'after') {
-                // Get the next in the list, to insert before
-                target = target.nextSibling;
-            }  // otherwise, this is a 'before' element
-            if (!!tempElement.innerHTML) { // check if only scripts were inserted - if so, do nothing here
-                parent.insertBefore(tempElement.firstChild, target);
-            }
-            runScripts(scripts);
-            deleteNode(tempElement);
-        };
-
-        /**
-         * Modify attributes of given element id.
-         * @param element
-         * @ignore
-         */
-        var doAttributes = function doAttributes(element) {
-
-            // Get id of element we'll act against
-            var id = element.getAttribute('id');
-
-            var target = $(id);
-
-            if (!target) {
-                throw new Error("The specified id: " + id + " was not found in the page.");
-            }
-
-            // There can be multiple attributes modified.  Loop through the list.
-            var nodes = element.childNodes;
-            for (var i = 0; i < nodes.length; i++) {
-                var name = nodes[i].getAttribute('name');
-                var value = nodes[i].getAttribute('value');
-                if (!isIE()) {
-                    target.setAttribute(name, value);
-                } else { // if it's IE, then quite a bit more work is required
-                    if (name === 'class') {
-                        name = 'className';
-                        target.setAttribute(name, value, 0);
-                    } else if (name === "for") {
-                        name = 'htmlFor';
-                        target.setAttribute(name, value, 0);
-                    } else if (name === 'style') {
-                        target.style.setAttribute('cssText', value, 0);
-                    } else if (name.substring(0, 2) === 'on') {
-                        var fn = function(value) {
-                            return function() {
-                                window.execScript(value);
-                            };
-                        }(value);
-                        target.setAttribute(name, fn, 0);
-                    } else if (name === 'dir') {
-                        if (jsf.getProjectStage() == 'Development') {
-                            throw new Error("Cannot set 'dir' attribute in IE");
-                        }
-                    } else {
-                        target.setAttribute(name, value, 0);
-                    }
-                }
-            }
-        };
-
-        /**
-         * Eval the CDATA of the element.
-         * @param element to eval
-         * @ignore
-         */
-        var doEval = function doEval(element) {
-            var evalText = element.firstChild.nodeValue;
-            globalEval(evalText);
-        };
-
-        /**
-         * Ajax Request Queue
-         * @ignore
-         */
-        var Queue = new function Queue() {
-
-            // Create the internal queue
-            var queue = [];
-
-
-            // the amount of space at the front of the queue, initialised to zero
-            var queueSpace = 0;
-
-            /** Returns the size of this Queue. The size of a Queue is equal to the number
-             * of elements that have been enqueued minus the number of elements that have
-             * been dequeued.
-             * @ignore
-             */
-            this.getSize = function getSize() {
-                return queue.length - queueSpace;
-            };
-
-            /** Returns true if this Queue is empty, and false otherwise. A Queue is empty
-             * if the number of elements that have been enqueued equals the number of
-             * elements that have been dequeued.
-             * @ignore
-             */
-            this.isEmpty = function isEmpty() {
-                return (queue.length === 0);
-            };
-
-            /** Enqueues the specified element in this Queue.
-             *
-             * @param element - the element to enqueue
-             * @ignore
-             */
-            this.enqueue = function enqueue(element) {
-                // Queue the request
-                queue.push(element);
-            };
-
-
-            /** Dequeues an element from this Queue. The oldest element in this Queue is
-             * removed and returned. If this Queue is empty then undefined is returned.
-             *
-             * @returns Object The element that was removed from the queue.
-             * @ignore
-             */
-            this.dequeue = function dequeue() {
-                // initialise the element to return to be undefined
-                var element = undefined;
-
-                // check whether the queue is empty
-                if (queue.length) {
-                    // fetch the oldest element in the queue
-                    element = queue[queueSpace];
-
-                    // update the amount of space and check whether a shift should occur
-                    if (++queueSpace * 2 >= queue.length) {
-                        // set the queue equal to the non-empty portion of the queue
-                        queue = queue.slice(queueSpace);
-                        // reset the amount of space at the front of the queue
-                        queueSpace = 0;
-                    }
-                }
-                // return the removed element
-                try {
-                    return element;
-                } finally {
-                    element = null; // IE 6 leak prevention
-                }
-            };
-
-            /** Returns the oldest element in this Queue. If this Queue is empty then
-             * undefined is returned. This function returns the same value as the dequeue
-             * function, but does not remove the returned element from this Queue.
-             * @ignore
-             */
-            this.getOldestElement = function getOldestElement() {
-                // initialise the element to return to be undefined
-                var element = undefined;
-
-                // if the queue is not element then fetch the oldest element in the queue
-                if (queue.length) {
-                    element = queue[queueSpace];
-                }
-                // return the oldest element
-                try {
-                    return element;
-                } finally {
-                    element = null; //IE 6 leak prevention
-                }
-            };
-        }();
-
-
-        /**
-         * AjaxEngine handles Ajax implementation details.
-         * @ignore
-         */
-        var AjaxEngine = function AjaxEngine() {
-
-            var req = {};                  // Request Object
-            req.url = null;                // Request URL
-            req.context = {};              // Context of request and response
-            req.context.sourceid = null;   // Source of this request
-            req.context.onerror = null;    // Error handler for request
-            req.context.onevent = null;    // Event handler for request
-            req.context.formid = null;     // Form that's the context for this request
-            req.xmlReq = null;             // XMLHttpRequest Object
-            req.async = true;              // Default - Asynchronous
-            req.parameters = {};           // Parameters For GET or POST
-            req.queryString = null;        // Encoded Data For GET or POST
-            req.method = null;             // GET or POST
-            req.status = null;             // Response Status Code From Server
-            req.fromQueue = false;         // Indicates if the request was taken off the queue
-            // before being sent.  This prevents the request from
-            // entering the queue redundantly.
-
-            req.que = Queue;
-
-            // Get an XMLHttpRequest Handle
-            req.xmlReq = getTransport();
-            if (req.xmlReq === null) {
-                return null;
-            }
-
-            function noop() {}
-            
-            // Set up request/response state callbacks
-            /**
-             * @ignore
-             */
-            req.xmlReq.onreadystatechange = function() {
-                if (req.xmlReq.readyState === 4) {
-                    req.onComplete();
-                    // next two lines prevent closure/ciruclar reference leaks
-                    // of XHR instances in IE
-                    req.xmlReq.onreadystatechange = noop;
-                    req.xmlReq = null;
-                }
-            };
-
-            /**
-             * This function is called when the request/response interaction
-             * is complete.  If the return status code is successfull,
-             * dequeue all requests from the queue that have completed.  If a
-             * request has been found on the queue that has not been sent,
-             * send the request.
-             * @ignore
-             */
-            req.onComplete = function onComplete() {
-                if (req.xmlReq.status && (req.xmlReq.status >= 200 && req.xmlReq.status < 300)) {
-                    sendEvent(req.xmlReq, req.context, "complete");
-                    jsf.ajax.response(req.xmlReq, req.context);
-                } else {
-                    sendEvent(req.xmlReq, req.context, "complete");
-                    sendError(req.xmlReq, req.context, "httpError");
-                }
-
-                // Regardless of whether the request completed successfully (or not),
-                // dequeue requests that have been completed (readyState 4) and send
-                // requests that ready to be sent (readyState 0).
-
-                var nextReq = req.que.getOldestElement();
-                if (nextReq === null || typeof nextReq === 'undefined') {
-                    return;
-                }
-                while ((typeof nextReq.xmlReq !== 'undefined' && nextReq.xmlReq !== null) &&
-                       nextReq.xmlReq.readyState === 4) {
-                    req.que.dequeue();
-                    nextReq = req.que.getOldestElement();
-                    if (nextReq === null || typeof nextReq === 'undefined') {
-                        break;
-                    }
-                }
-                if (nextReq === null || typeof nextReq === 'undefined') {
-                    return;
-                }
-                if ((typeof nextReq.xmlReq !== 'undefined' && nextReq.xmlReq !== null) &&
-                    nextReq.xmlReq.readyState === 0) {
-                    nextReq.fromQueue = true;
-                    nextReq.sendRequest();
-                }
-            };
-
-            /**
-             * Utility method that accepts additional arguments for the AjaxEngine.
-             * If an argument is passed in that matches an AjaxEngine property, the
-             * argument value becomes the value of the AjaxEngine property.
-             * Arguments that don't match AjaxEngine properties are added as
-             * request parameters.
-             * @ignore
-             */
-            req.setupArguments = function(args) {
-                for (var i in args) {
-                    if (args.hasOwnProperty(i)) {
-                        if (typeof req[i] === 'undefined') {
-                            req.parameters[i] = args[i];
-                        } else {
-                            req[i] = args[i];
-                        }
-                    }
-                }
-            };
-
-            /**
-             * This function does final encoding of parameters, determines the request method
-             * (GET or POST) and sends the request using the specified url.
-             * @ignore
-             */
-            req.sendRequest = function() {
-                if (req.xmlReq !== null) {
-                    // if there is already a request on the queue waiting to be processed..
-                    // just queue this request
-                    if (!req.que.isEmpty()) {
-                        if (!req.fromQueue) {
-                            req.que.enqueue(req);
-                            return;
-                        }
-                    }
-                    // If the queue is empty, queue up this request and send
-                    if (!req.fromQueue) {
-                        req.que.enqueue(req);
-                    }
-                    // Some logic to get the real request URL
-                    if (req.generateUniqueUrl && req.method == "GET") {
-                        req.parameters["AjaxRequestUniqueId"] = new Date().getTime() + "" + req.requestIndex;
-                    }
-                    var content = null; // For POST requests, to hold query string
-                    for (var i in req.parameters) {
-                        if (req.parameters.hasOwnProperty(i)) {
-                            if (req.queryString.length > 0) {
-                                req.queryString += "&";
-                            }
-                            req.queryString += encodeURIComponent(i) + "=" + encodeURIComponent(req.parameters[i]);
-                        }
-                    }
-                    if (req.method === "GET") {
-                        if (req.queryString.length > 0) {
-                            req.url += ((req.url.indexOf("?") > -1) ? "&" : "?") + req.queryString;
-                        }
-                    }
-                    req.xmlReq.open(req.method, req.url, req.async);
-                    if (req.method === "POST") {
-                        if (typeof req.xmlReq.setRequestHeader !== 'undefined') {
-                            req.xmlReq.setRequestHeader('Faces-Request', 'partial/ajax');
-                            req.xmlReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
-                        }
-                        content = req.queryString;
-                    }
-                    // note that async == false is not a supported feature.  We may change it in ways
-                    // that break existing programs at any time, with no warning.
-                    if(!req.async) {
-                        req.xmlReq.onreadystatechange = null; // no need for readystate change listening
-                    }
-                    sendEvent(req.xmlReq, req.context, "begin");
-                    req.xmlReq.send(content);
-                    if(!req.async){
-                        req.onComplete();
-                }
-                }
-            };
-
-            return req;
-        };
-
-        /**
-         * Error handling callback.
-         * Assumes that the request has completed.
-         * @ignore
-         */
-        var sendError = function sendError(request, context, status, description, serverErrorName, serverErrorMessage) {
-
-            // Possible errornames:
-            // httpError
-            // emptyResponse
-            // serverError
-            // malformedXML
-
-            var sent = false;
-            var data = {};  // data payload for function
-            data.type = "error";
-            data.status = status;
-            data.source = context.sourceid;
-            data.responseCode = request.status;
-            data.responseXML = request.responseXML;
-            data.responseText = request.responseText;
-
-            // ensure data source is the dom element and not the ID
-            // per 14.4.1 of the 2.0 specification.
-            if (typeof data.source === 'string') {
-                data.source = document.getElementById(data.source);
-            }
-
-            if (description) {
-                data.description = description;
-            } else if (status == "httpError") {
-                if (data.responseCode === 0) {
-                    data.description = "The Http Transport returned a 0 status code.  This is usually the result of mixing ajax and full requests.  This is usually undesired, for both performance and data integrity reasons.";
-                } else {
-                    data.description = "There was an error communicating with the server, status: " + data.responseCode;
-                }
-            } else if (status == "serverError") {
-                data.description = serverErrorMessage;
-            } else if (status == "emptyResponse") {
-                data.description = "An empty response was received from the server.  Check server error logs.";
-            } else if (status == "malformedXML") {
-                if (getParseErrorText(data.responseXML) !== PARSED_OK) {
-                    data.description = getParseErrorText(data.responseXML);
-                } else {
-                    data.description = "An invalid XML response was received from the server.";
-                }
-            }
-
-            if (status == "serverError") {
-                data.errorName = serverErrorName;
-                data.errorMessage = serverErrorMessage;
-            }
-
-            // If we have a registered callback, send the error to it.
-            if (context.onerror) {
-                context.onerror.call(null, data);
-                sent = true;
-            }
-
-            for (var i in errorListeners) {
-                if (errorListeners.hasOwnProperty(i)) {
-                    errorListeners[i].call(null, data);
-                    sent = true;
-                }
-            }
-
-            if (!sent && jsf.getProjectStage() === "Development") {
-                if (status == "serverError") {
-                    alert("serverError: " + serverErrorName + " " + serverErrorMessage);
-                } else {
-                    alert(status + ": " + data.description);
-                }
-            }
-        };
-
-        /**
-         * Event handling callback.
-         * Request is assumed to have completed, except in the case of event = 'begin'.
-         * @ignore
-         */
-        var sendEvent = function sendEvent(request, context, status) {
-
-            var data = {};
-            data.type = "event";
-            data.status = status;
-            data.source = context.sourceid;
-            // ensure data source is the dom element and not the ID
-            // per 14.4.1 of the 2.0 specification.
-            if (typeof data.source === 'string') {
-                data.source = document.getElementById(data.source);
-            }
-            if (status !== 'begin') {
-                data.responseCode = request.status;
-                data.responseXML = request.responseXML;
-                data.responseText = request.responseText;
-            }
-
-            if (context.onevent) {
-                context.onevent.call(null, data);
-            }
-
-            for (var i in eventListeners) {
-                if (eventListeners.hasOwnProperty(i)) {
-                    eventListeners[i].call(null, data);
-                }
-            }
-        };
-
-        // Use module pattern to return the functions we actually expose
-        return {
-            /**
-             * Register a callback for error handling.
-             * <p><b>Usage:</b></p>
-             * <pre><code>
-             * jsf.ajax.addOnError(handleError);
-             * ...
-             * var handleError = function handleError(data) {
-             * ...
-             * }
-             * </pre></code>
-             * <p><b>Implementation Requirements:</b></p>
-             * This function must accept a reference to an existing JavaScript function.
-             * The JavaScript function reference must be added to a list of callbacks, making it possible
-             * to register more than one callback by invoking <code>jsf.ajax.addOnError</code>
-             * more than once.  This function must throw an error if the <code>callback</code>
-             * argument is not a function.
-             *
-             * @member jsf.ajax
-             * @param callback a reference to a function to call on an error
-             */
-            addOnError: function addOnError(callback) {
-                if (typeof callback === 'function') {
-                    errorListeners[errorListeners.length] = callback;
-                } else {
-                    throw new Error("jsf.ajax.addOnError:  Added a callback that was not a function.");
-                }
-            },
-            /**
-             * Register a callback for event handling.
-             * <p><b>Usage:</b></p>
-             * <pre><code>
-             * jsf.ajax.addOnEvent(statusUpdate);
-             * ...
-             * var statusUpdate = function statusUpdate(data) {
-             * ...
-             * }
-             * </pre></code>
-             * <p><b>Implementation Requirements:</b></p>
-             * This function must accept a reference to an existing JavaScript function.
-             * The JavaScript function reference must be added to a list of callbacks, making it possible
-             * to register more than one callback by invoking <code>jsf.ajax.addOnEvent</code>
-             * more than once.  This function must throw an error if the <code>callback</code>
-             * argument is not a function.
-             *
-             * @member jsf.ajax
-             * @param callback a reference to a function to call on an event
-             */
-            addOnEvent: function addOnEvent(callback) {
-                if (typeof callback === 'function') {
-                    eventListeners[eventListeners.length] = callback;
-                } else {
-                    throw new Error("jsf.ajax.addOnEvent: Added a callback that was not a function");
-                }
-            },
-            /**
-             * <p>Send an asynchronous Ajax request to the server.
-             * <p><b>Usage:</b></p>
-             * <pre><code>
-             * Example showing all optional arguments:
-             *
-             * <commandButton id="button1" value="submit"
-             *     onclick="jsf.ajax.request(this,event,
-             *       {execute:'button1',render:'status',onevent: handleEvent,onerror: handleError});return false;"/>
-             * </commandButton/>
-             * </pre></code>
-             * <p><b>Implementation Requirements:</b></p>
-             * This function must:
-             * <ul>
-             * <li>Be used within the context of a <code>form</code>.</li>
-             * <li>Capture the element that triggered this Ajax request
-             * (from the <code>source</code> argument, also known as the
-             * <code>source</code> element.</li>
-             * <li>If the <code>source</code> element is <code>null</code> or
-             * <code>undefined</code> throw an error.</li>
-             * <li>If the <code>source</code> argument is not a <code>string</code> or
-             * DOM element object, throw an error.</li>
-             * <li>If the <code>source</code> argument is a <code>string</code>, find the
-             * DOM element for that <code>string</code> identifier.
-             * <li>If the DOM element could not be determined, throw an error.</li>
-             * <li>If the <code>onerror</code> and <code>onevent</code> arguments are set,
-             * they must be functions, or throw an error.
-             * <li>Determine the <code>source</code> element's <code>form</code>
-             * element.</li>
-             * <li>Get the <code>form</code> view state by calling
-             * {@link jsf.getViewState} passing the
-             * <code>form</code> element as the argument.</li>
-             * <li>Collect post data arguments for the Ajax request.
-             * <ul>
-             * <li>The following name/value pairs are required post data arguments:
-             * <table border="1">
-             * <tr>
-             * <th>name</th>
-             * <th>value</th>
-             * </tr>
-             * <tr>
-             * <td><code>javax.faces.ViewState</code></td>
-             * <td><code>Contents of javax.faces.ViewState hidden field.  This is included when
-             * {@link jsf.getViewState} is used.</code></td>
-             * </tr>
-             * <tr>
-             * <td><code>javax.faces.partial.ajax</code></td>
-             * <td><code>true</code></td>
-             * </tr>
-             * <tr>
-             * <td><code>javax.faces.source</code></td>
-             * <td><code>The identifier of the element that triggered this request.</code></td>
-             * </tr>
-             * </table>
-             * </li>
-             * </ul>
-             * </li>
-             * <li>Collect optional post data arguments for the Ajax request.
-             * <ul>
-             * <li>Determine additional arguments (if any) from the <code>options</code>
-             * argument. If <code>options.execute</code> exists:
-             * <ul>
-             * <li>If the keyword <code>@none</code> is present, do not create and send
-             * the post data argument <code>javax.faces.partial.execute</code>.</li>
-             * <li>If the keyword <code>@all</code> is present, create the post data argument with
-             * the name <code>javax.faces.partial.execute</code> and the value <code>@all</code>.</li>
-             * <li>Otherwise, there are specific identifiers that need to be sent.  Create the post
-             * data argument with the name <code>javax.faces.partial.execute</code> and the value as a
-             * space delimited <code>string</code> of client identifiers.</li>
-             * </ul>
-             * </li>
-             * <li>If <code>options.execute</code> does not exist, create the post data argument with the
-             * name <code>javax.faces.partial.execute</code> and the value as the identifier of the
-             * element that caused this request.</li>
-             * <li>If <code>options.render</code> exists:
-             * <ul>
-             * <li>If the keyword <code>@none</code> is present, do not create and send
-             * the post data argument <code>javax.faces.partial.render</code>.</li>
-             * <li>If the keyword <code>@all</code> is present, create the post data argument with
-             * the name <code>javax.faces.partial.render</code> and the value <code>@all</code>.</li>
-             * <li>Otherwise, there are specific identifiers that need to be sent.  Create the post
-             * data argument with the name <code>javax.faces.partial.render</code> and the value as a
-             * space delimited <code>string</code> of client identifiers.</li>
-             * </ul>
-             * <li>If <code>options.render</code> does not exist do not create and send the
-             * post data argument <code>javax.faces.partial.render</code>.</li>
-             * <li>Determine additional arguments (if any) from the <code>event</code>
-             * argument.  The following name/value pairs may be used from the
-             * <code>event</code> object:
-             * <ul>
-             * <li><code>target</code> - the ID of the element that triggered the event.</li>
-             * <li><code>captured</code> - the ID of the element that captured the event.</li>
-             * <li><code>type</code> - the type of event (ex: onkeypress)</li>
-             * <li><code>alt</code> - <code>true</code> if ALT key was pressed.</li>
-             * <li><code>ctrl</code> - <code>true</code> if CTRL key was pressed.</li>
-             * <li><code>shift</code> - <code>true</code> if SHIFT key was pressed. </li>
-             * <li><code>meta</code> - <code>true</code> if META key was pressed. </li>
-             * <li><code>right</code> - <code>true</code> if right mouse button
-             * was pressed. </li>
-             * <li><code>left</code> - <code>true</code> if left mouse button
-             * was pressed. </li>
-             * <li><code>keycode</code> - the key code.
-             * </ul>
-             * </li>
-             * </ul>
-             * </li>
-             * <li>Encode the set of post data arguments.</li>
-             * <li>Join the encoded view state with the encoded set of post data arguments
-             * to form the <code>query string</code> that will be sent to the server.</li>
-             * <li>Create a request <code>context</code> object and set the properties:
-             * <ul><li><code>source</code> (the source DOM element for this request)</li>
-             * <li><code>onerror</code> (the error handler for this request)</li>
-             * <li><code>onevent</code> (the event handler for this request)</li></ul>
-             * The request context will be used during error/event handling.</li>
-             * <li>Send a <code>begin</code> event following the procedure as outlined
-             * in the Chapter 13 "Sending Events" section of the spec prose document <a
-             *  href="../../javadocs/overview-summary.html#prose_document">linked in the
-             *  overview summary</a></li>
-             * <li>Set the request header with the name: <code>Faces-Request</code> and the
-             * value: <code>partial/ajax</code>.</li>
-             * <li>Determine the <code>posting URL</code> as follows: If the hidden field
-             * <code>javax.faces.encodedURL</code> is present in the submitting form, use its
-             * value as the <code>posting URL</code>.  Otherwise, use the <code>action</code>
-             * property of the <code>form</code> element as the <code>URL</code>.</li>
-             * <li>Send the request as an <code>asynchronous POST</code> using the
-             * <code>posting URL</code> that was determined in the previous step.</li>
-             * </ul>
-             * Before the request is sent it must be put into a queue to ensure requests
-             * are sent in the same order as when they were initiated.  The request callback function
-             * must examine the queue and determine the next request to be sent.  The behavior of the
-             * request callback function must be as follows:
-             * <ul>
-             * <li>If the request completed successfully invoke {@link jsf.ajax.response}
-             * passing the <code>request</code> object.</li>
-             * <li>If the request did not complete successfully, notify the client.</li>
-             * <li>Regardless of the outcome of the request (success or error) every request in the
-             * queue must be handled.  Examine the status of each request in the queue starting from
-             * the request that has been in the queue the longest.  If the status of the request is
-             * <code>complete</code> (readyState 4), dequeue the request (remove it from the queue).
-             * If the request has not been sent (readyState 0), send the request.  Requests that are
-             * taken off the queue and sent should not be put back on the queue.</li>
-             * </ul>
-             *
-             * </p>
-             *
-             * @param source The DOM element that triggered this Ajax request, or an id string of the
-             * element to use as the triggering element.
-             * @param event The DOM event that triggered this Ajax request.  The
-             * <code>event</code> argument is optional.
-             * @param options The set of available options that can be sent as
-             * request parameters to control client and/or server side
-             * request processing. Acceptable name/value pair options are:
-             * <table border="1">
-             * <tr>
-             * <th>name</th>
-             * <th>value</th>
-             * </tr>
-             * <tr>
-             * <td><code>execute</code></td>
-             * <td><code>space seperated list of client identifiers</code></td>
-             * </tr>
-             * <tr>
-             * <td><code>render</code></td>
-             * <td><code>space seperated list of client identifiers</code></td>
-             * </tr>
-             * <tr>
-             * <td><code>onevent</code></td>
-             * <td><code>function to callback for event</code></td>
-             * </tr>
-             * <tr>
-             * <td><code>onerror</code></td>
-             * <td><code>function to callback for error</code></td>
-             * </tr>
-             * <tr>
-             * <td><code>params</code></td>
-             * <td><code>object containing parameters to include in the request</code></td>
-             * </tr>
-             * </table>
-             * The <code>options</code> argument is optional.
-             * @member jsf.ajax
-             * @function jsf.ajax.request
-             * @throws Error if first required argument <code>element</code> is not specified
-             */
-            request: function request(source, event, options) {
-
-                var element, form;   //  Element variables
-                var all, none;
-
-                if (typeof source === 'undefined' || source === null) {
-                    throw new Error("jsf.ajax.request: source not set");
-                }
-
-                // set up the element based on source
-                if (typeof source === 'string') {
-                    element = document.getElementById(source);
-                } else if (typeof source === 'object') {
-                    element = source;
-                } else {
-                    throw new Error("jsf.request: source must be object or string");
-                }
-                // attempt to handle case of name unset
-                // this might be true in a badly written composite component
-                if (!element.name) {
-                    element.name = element.id;
-                }
-
-                if (typeof(options) === 'undefined' || options === null) {
-                    options = {};
-                }
-
-                // Error handler for this request
-                var onerror = false;
-
-                if (options.onerror && typeof options.onerror === 'function') {
-                    onerror = options.onerror;
-                } else if (options.onerror && typeof options.onerror !== 'function') {
-                    throw new Error("jsf.ajax.request: Added an onerror callback that was not a function");
-                }
-
-                // Event handler for this request
-                var onevent = false;
-
-                if (options.onevent && typeof options.onevent === 'function') {
-                    onevent = options.onevent;
-                } else if (options.onevent && typeof options.onevent !== 'function') {
-                    throw new Error("jsf.ajax.request: Added an onevent callback that was not a function");
-                }
-
-                form = getForm(element);
-                if (!form) {
-                    throw new Error("jsf.ajax.request: Method must be called within a form");
-                }
-                var viewState = jsf.getViewState(form);
-
-                // Set up additional arguments to be used in the request..
-                // Make sure "javax.faces.source" is set up.
-                // If there were "execute" ids specified, make sure we
-                // include the identifier of the source element in the
-                // "execute" list.  If there were no "execute" ids
-                // specified, determine the default.
-
-                var args = {};
-
-                args["javax.faces.source"] = element.id;
-
-                if (event && !!event.type) {
-                    args["javax.faces.partial.event"] = event.type;
-                }
-
-                // If we have 'execute' identifiers:
-                // Handle any keywords that may be present.
-                // If @none present anywhere, do not send the
-                // "javax.faces.partial.execute" parameter.
-                // The 'execute' and 'render' lists must be space
-                // delimited.
-
-                if (options.execute) {
-                    none = options.execute.search(/@none/);
-                    if (none < 0) {
-                        all = options.execute.search(/@all/);
-                        if (all < 0) {
-                            options.execute = options.execute.replace("@this", element.id);
-                            options.execute = options.execute.replace("@form", form.id);
-                            var temp = options.execute.split(' ');
-                            if (!isInArray(temp, element.name)) {
-                                options.execute = element.name + " " + options.execute;
-                            }
-                        } else {
-                            options.execute = "@all";
-                        }
-                        args["javax.faces.partial.execute"] = options.execute;
-                    }
-                } else {
-                    options.execute = element.name + " " + element.id;
-                    args["javax.faces.partial.execute"] = options.execute;
-                }
-
-                if (options.render) {
-                    none = options.render.search(/@none/);
-                    if (none < 0) {
-                        all = options.render.search(/@all/);
-                        if (all < 0) {
-                            options.render = options.render.replace("@this", element.id);
-                            options.render = options.render.replace("@form", form.id);
-                        } else {
-                            options.render = "@all";
-                        }
-                        args["javax.faces.partial.render"] = options.render;
-                    }
-                }
-
-                // remove non-passthrough options
-                delete options.execute;
-                delete options.render;
-                delete options.onerror;
-                delete options.onevent;
-                // copy all other options to args
-                for (var property in options) {
-                    if (options.hasOwnProperty(property)) {
-                        args[property] = options[property];
-                    }
-                }
-
-                args["javax.faces.partial.ajax"] = "true";
-                args["method"] = "POST";
-
-                // Determine the posting url
-
-                var encodedUrlField = form.elements["javax.faces.encodedURL"];
-                if (typeof encodedUrlField == 'undefined') {
-                    args["url"] = form.action;
-                } else {
-                    args["url"] = encodedUrlField.value;
-                }
-
-                var ajaxEngine = new AjaxEngine();
-                ajaxEngine.setupArguments(args);
-                ajaxEngine.queryString = viewState;
-                ajaxEngine.context.onevent = onevent;
-                ajaxEngine.context.onerror = onerror;
-                ajaxEngine.context.sourceid = element.id;
-                ajaxEngine.context.formid = form.id;
-                ajaxEngine.context.render = args["javax.faces.partial.render"];
-                ajaxEngine.sendRequest();
-
-                // null out element variables to protect against IE memory leak
-                element = null;
-                form = null;
-
-            },
-            /**
-             * <p>Receive an Ajax response from the server.
-             * <p><b>Usage:</b></p>
-             * <pre><code>
-             * jsf.ajax.response(request, context);
-             * </pre></code>
-             * <p><b>Implementation Requirements:</b></p>
-             * This function must evaluate the markup returned in the
-             * <code>request.responseXML</code> object and perform the following action:
-             * <ul>
-             * <p>If there is no XML response returned, signal an <code>emptyResponse</code>
-             * error. If the XML response does not follow the format as outlined
-             * in Appendix A of the spec prose document <a
-             *  href="../../javadocs/overview-summary.html#prose_document">linked in the
-             *  overview summary</a> signal a <code>malformedError</code> error.  Refer to
-             * section "Signaling Errors" in Chapter 13 of the spec prose document <a
-             *  href="../../javadocs/overview-summary.html#prose_document">linked in the
-             *  overview summary</a>.</p>
-             * <p>If the response was successfully processed, send a <code>success</code>
-             * event as outlined in Chapter 13 "Sending Events" section of the spec prose
-             * document <a
-             * href="../../javadocs/overview-summary.html#prose_document">linked in the
-             * overview summary</a>.</p>
-             * <p><i>Update Element Processing</i></p>
-             * The <code>update</code> element is used to update a single DOM element.  The
-             * "id" attribute of the <code>update</code> element refers to the DOM element that
-             * will be updated.  The contents of the <code>CDATA</code> section is the data that 
-             * will be used when updating the contents of the DOM element as specified by the
-             * <code><update></code> element identifier.
-             * <li>If an <code>update</code> element is found in the response
-             * with the identifier <code>javax.faces.ViewRoot</code>:
-             * <pre><code><update id="javax.faces.ViewRoot">
-             *    <![CDATA[...]]>
-             * </update></code></pre>
-             * Update the entire DOM replacing the appropriate <code>head</code> and/or
-             * <code>body</code> sections with the content from the response.</li>
-             * <li>If an <code>update</code> element is found in the response with the identifier
-             * <code>javax.faces.ViewState</code>:
-             * <pre><code><update id="javax.faces.ViewState">
-             *    <![CDATA[...]]>
-             * </update></code></pre>
-             * locate and update the submitting form's <code>javax.faces.ViewState</code> value
-             * with the <code>CDATA</code> contents from the response.</li>
-             * <li>If an <code>update</code> element is found in the response with the identifier
-             * <code>javax.faces.ViewHead</code>:
-             * <pre><code><update id="javax.faces.ViewHead">
-             *    <![CDATA[...]]>
-             * </update></code></pre>
-             * update the document's <code>head</code> section with the <code>CDATA</code>
-             * contents from the response.</li>
-             * <li>If an <code>update</code> element is found in the response with the identifier
-             * <code>javax.faces.ViewBody</code>:
-             * <pre><code><update id="javax.faces.ViewBody">
-             *    <![CDATA[...]]>
-             * </update></code></pre>
-             * update the document's <code>body</code> section with the <code>CDATA</code>
-             * contents from the response.</li>
-             * <li>For any other <code><update></code> element:
-             * <pre><code><update id="update id">
-             *    <![CDATA[...]]>
-             * </update></code></pre>
-             * Find the DOM element with the identifier that matches the
-             * <code><update></code> element identifier, and replace its contents with
-             * the <code><update></code> element's <code>CDATA</code> contents.</li>
-             * </li>
-             * <p><i>Insert Element Processing</i></p>
-             * <li>If an <code><insert></code> element is found in the response with the
-             * attribute <code>before</code>:
-             * <pre><code><insert id="insert id" before="before id">
-             *    <![CDATA[...]]>
-             * </insert></code></pre>
-             * <ul>
-             * <li>Extract this <code><insert></code> element's <code>CDATA</code> contents
-             * from the response.</li>
-             * <li>Find the DOM element whose identifier matches <code>before id</code> and insert
-             * the <code><insert></code> element's <code>CDATA</code> content before
-             * the DOM element in the document.</li>
-             * </ul>
-             * </li>
-             * <li>If an <code><insert></code> element is found in the response with the
-             * attribute <code>after</code>:
-             * <pre><code><insert id="insert id" after="after id">
-             *    <![CDATA[...]]>
-             * </insert></code></pre>
-             * <ul>
-             * <li>Extract this <code><insert></code> element's <code>CDATA</code> contents
-             * from the response.</li>
-             * <li>Find the DOM element whose identifier matches <code>after id</code> and insert
-             * the <code><insert></code> element's <code>CDATA</code> content after
-             * the DOM element in the document.</li>
-             * </ul>
-             * </li>
-             * <p><i>Delete Element Processing</i></p>
-             * <li>If a <code><delete></code> element is found in the response:
-             * <pre><code><delete id="delete id"/></code></pre>
-             * Find the DOM element whose identifier matches <code>delete id</code> and remove it
-             * from the DOM.</li>
-             * <p><i>Element Attribute Update Processing</i></p>
-             * <li>If an <code><attributes></code> element is found in the response:
-             * <pre><code><attributes id="id of element with attribute">
-             *    <attribute name="attribute name" value="attribute value">
-             *    ...
-             * &lt/attributes></code></pre>
-             * <ul>
-             * <li>Find the DOM element that matches the <code><attributes></code> identifier.</li>
-             * <li>For each nested <code><attribute></code> element in <code><attribute></code>,
-             * update the DOM element attribute value (whose name matches <code>attribute name</code>),
-             * with <code>attribute value</code>.</li>
-             * </ul>
-             * </li>
-             * <p><i>JavaScript Processing</i></p>
-             * <li>If an <code><eval></code> element is found in the response:
-             * <pre><code><eval>
-             *    <![CDATA[...JavaScript...]]>
-             * </eval></code></pre>
-             * <ul>
-             * <li>Extract this <code><eval></code> element's <code>CDATA</code> contents
-             * from the response and execute it as if it were JavaScript code.</li>
-             * </ul>
-             * </li>
-             * <p><i>Redirect Processing</i></p>
-             * <li>If a <code><redirect></code> element is found in the response:
-             * <pre><code><redirect url="redirect url"/></code></pre>
-             * Cause a redirect to the url <code>redirect url</code>.</li>
-             * <p><i>Error Processing</i></p>
-             * <li>If an <code><error></code> element is found in the response:
-             * <pre><code><error>
-             *    <error-name>..fully qualified class name string...<error-name>
-             *    <error-message><![CDATA[...]]><error-message>
-             * </error></code></pre>
-             * Extract this <code><error></code> element's <code>error-name</code> contents
-             * and the <code>error-message</code> contents. Signal a <code>serverError</code> passing
-             * the <code>errorName</code> and <code>errorMessage</code>.  Refer to
-             * section "Signaling Errors" in Chapter 13 of the spec prose document <a
-             *  href="../../javadocs/overview-summary.html#prose_document">linked in the
-             *  overview summary</a>.</li>
-             * <p><i>Extensions</i></p>
-             * <li>The <code><extensions></code> element provides a way for framework
-             * implementations to provide their own information.</li>
-             * </ul>
-             *
-             * </p>
-             *
-             * @param request The <code>XMLHttpRequest</code> instance that
-             * contains the status code and response message from the server.
-             *
-             * @param context An object containing the request context, including the following properties:
-             * the source element, per call onerror callback function, and per call onevent callback function.
-             *
-             * @throws  Error if request contains no data
-             *
-             * @function jsf.ajax.response
-             */
-            response: function response(request, context) {
-                if (!request) {
-                    throw new Error("jsf.ajax.response: Request parameter is unset");
-                }
-
-                // ensure context source is the dom element and not the ID
-                // per 14.4.1 of the 2.0 specification.  We're doing it here
-                // *before* any errors or events are propagated becasue the
-                // DOM element may be removed after the update has been processed.
-                if (typeof context.sourceid === 'string') {
-                    context.sourceid = document.getElementById(context.sourceid);
-                }
-
-                var xml = request.responseXML;
-                if (xml === null) {
-                    sendError(request, context, "emptyResponse");
-                    return;
-                }
-
-                if (getParseErrorText(xml) !== PARSED_OK) {
-                    sendError(request, context, "malformedXML");
-                    return;
-                }
-
-                var responseType = xml.getElementsByTagName("partial-response")[0].firstChild;
-
-                if (responseType.nodeName === "error") { // it's an error
-                    var errorName = responseType.firstChild.firstChild.nodeValue;
-                    var errorMessage = responseType.firstChild.nextSibling.firstChild.nodeValue;
-                    sendError(request, context, "serverError", null, errorName, errorMessage);
-                    return;
-                }
-
-
-                if (responseType.nodeName === "redirect") {
-                    window.location = responseType.getAttribute("url");
-                    return;
-                }
-
-
-                if (responseType.nodeName !== "changes") {
-                    sendError(request, context, "malformedXML", "Top level node must be one of: changes, redirect, error, received: " + responseType.nodeName + " instead.");
-                    return;
-                }
-
-
-                var changes = responseType.childNodes;
-
-                try {
-                    for (var i = 0; i < changes.length; i++) {
-                        switch (changes[i].nodeName) {
-                            case "update":
-                                doUpdate(changes[i], context);
-                                break;
-                            case "delete":
-                                doDelete(changes[i]);
-                                break;
-                            case "insert":
-                                doInsert(changes[i]);
-                                break;
-                            case "attributes":
-                                doAttributes(changes[i]);
-                                break;
-                            case "eval":
-                                doEval(changes[i]);
-                                break;
-                            case "extension":
-                                // no action
-                                break;
-                            default:
-                                sendError(request, context, "malformedXML", "Changes allowed are: update, delete, insert, attributes, eval, extension.  Received " + changes[i].nodeName + " instead.");
-                                return;
-                        }
-                    }
-                } catch (ex) {
-                    sendError(request, context, "malformedXML", ex.message);
-                    return;
-                }
-                sendEvent(request, context, "success");
-
-            }
-        };
-    }();
-
-    /**
-     *
-     * <p>Return the value of <code>Application.getProjectStage()</code> for
-     * the currently running application instance.  Calling this method must
-     * not cause any network transaction to happen to the server.</p>
-     * <p><b>Usage:</b></p>
-     * <pre><code>
-     * var stage = jsf.getProjectStage();
-     * if (stage === ProjectStage.Development) {
-     *  ...
-     * } else if stage === ProjectStage.Production) {
-     *  ...
-     * }
-     * </code></pre>
-     *
-     * @returns String <code>String</code> representing the current state of the
-     * running application in a typical product development lifecycle.  Refer
-     * to <code>javax.faces.application.Application.getProjectStage</code> and
-     * <code>javax.faces.application.ProjectStage</code>.
-     * @function jsf.getProjectStage
-     */
-    jsf.getProjectStage = function() {
-        // First, return cached value if available
-        if (typeof mojarra !== 'undefined' && typeof mojarra.projectStageCache !== 'undefined') {
-            return mojarra.projectStageCache;
-        }
-        var scripts = document.getElementsByTagName("script"); // nodelist of scripts
-        var script; // jsf.js script
-        var s = 0; // incremental variable for for loop
-        var stage; // temp value for stage
-        var match; // temp value for match
-        while (s < scripts.length) {
-            if (typeof scripts[s].src === 'string' && scripts[s].src.match('\/javax\.faces\.resource\/jsf\.js\?.*ln=javax\.faces')) {
-                script = scripts[s].src;
-                break;
-            }
-            s++;
-        }
-        if (typeof script == "string") {
-            match = script.match("stage=(.*)");
-            if (match) {
-                stage = match[1];
-            }
-        }
-        if (typeof stage === 'undefined' || !stage) {
-            stage = "Production";
-        }
-
-        mojarra = mojarra || {};
-        mojarra.projectStageCache = stage;
-
-        return mojarra.projectStageCache;
-    };
-
-
-    /**
-     * <p>Collect and encode state for input controls associated
-     * with the specified <code>form</code> element.  This will include
-     * all input controls of type <code>hidden</code>.</p>
-     * <p><b>Usage:</b></p>
-     * <pre><code>
-     * var state = jsf.getViewState(form);
-     * </pre></code>
-     *
-     * @param form The <code>form</code> element whose contained
-     * <code>input</code> controls will be collected and encoded.
-     * Only successful controls will be collected and encoded in
-     * accordance with: <a href="http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2">
-     * Section 17.13.2 of the HTML Specification</a>.
-     *
-     * @returns String The encoded state for the specified form's input controls.
-     * @function jsf.getViewState
-     */
-    jsf.getViewState = function(form) {
-        if (!form) {
-            throw new Error("jsf.getViewState:  form must be set");
-        }
-        var els = form.elements;
-        var len = els.length;
-        // create an array which we'll use to hold all the intermediate strings
-        // this bypasses a problem in IE when repeatedly concatenating very
-        // large strings - we'll perform the concatenation once at the end
-        var qString = [];
-        var addField = function(name, value) {
-            var tmpStr = "";
-            if (qString.length > 0) {
-                tmpStr = "&";
-            }
-            tmpStr += encodeURIComponent(name) + "=" + encodeURIComponent(value);
-            qString.push(tmpStr);
-        };
-        for (var i = 0; i < len; i++) {
-            var el = els[i];
-            if (!el.disabled) {
-                switch (el.type) {
-                    case 'text':
-                    case 'password':
-                    case 'hidden':
-                    case 'textarea':
-                        addField(el.name, el.value);
-                        break;
-                    case 'select-one':
-                        if (el.selectedIndex >= 0) {
-                            addField(el.name, el.options[el.selectedIndex].value);
-                        }
-                        break;
-                    case 'select-multiple':
-                        for (var j = 0; j < el.options.length; j++) {
-                            if (el.options[j].selected) {
-                                addField(el.name, el.options[j].value);
-                            }
-                        }
-                        break;
-                    case 'checkbox':
-                    case 'radio':
-                        if (el.checked) {
-                            addField(el.name, el.value);
-                        }
-                        break;
-                }
-            }
-        }
-        // concatenate the array
-        return qString.join("");
-    };
-
-    /**
-     * The namespace for JavaServer Faces JavaScript utilities.
-     * @name jsf.util
-     * @namespace
-     */
-    jsf.util = {};
-
-    /**
-     * <p>A varargs function that invokes an arbitrary number of scripts.
-     * If any script in the chain returns false, the chain is short-circuited
-     * and subsequent scripts are not invoked.  Any number of scripts may
-     * specified after the <code>event</code> argument.</p>
-     *
-     * @param source The DOM element that triggered this Ajax request, or an
-     * id string of the element to use as the triggering element.
-     * @param event The DOM event that triggered this Ajax request.  The
-     * <code>event</code> argument is optional.
-     *
-     * @returns boolean <code>false</code> if any scripts in the chain return <code>false</code>,
-     *  otherwise returns <code>true</code>
-     * 
-     * @function jsf.util.chain
-     */
-    jsf.util.chain = function(source, event) {
-
-        if (arguments.length < 3) {
-            return true;
-        }
-
-        // RELEASE_PENDING rogerk - shouldn't this be getElementById instead of null
-        var thisArg = (typeof source === 'object') ? source : null;
-
-        // Call back any scripts that were passed in
-        for (var i = 2; i < arguments.length; i++) {
-
-            var f = new Function("event", arguments[i]);
-            var returnValue = f.call(thisArg, event);
-
-            if (returnValue === false) {
-                return false;
-            }
-        }
-        return true;
-        
-    };
-
-    /**
-     * <p>An integer specifying the specification version that this file implements.
-     * It's format is: rightmost two digits, bug release number, next two digits,
-     * minor release number, leftmost digits, major release number.
-     * This number may only be incremented by a new release of the specification.</p>
-     */
-    jsf.specversion = 20000;
-
-    /**
-     * <p>An integer specifying the implementation version that this file implements.
-     * It's a monotonically increasing number, reset with every increment of
-     * <code>jsf.specversion</code>
-     * This number is implementation dependent.</p>
-     */
-    jsf.implversion = 3;
-
-
-} //end if version detection block
diff --git a/jsf-api/src/main/resources/managed-bean-overview.html b/jsf-api/src/main/resources/managed-bean-overview.html
deleted file mode 100644
index 2ab44b1..0000000
--- a/jsf-api/src/main/resources/managed-bean-overview.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-  @(#)package.html	1.60 98/01/27
-
-  Copyright 1998 Sun Microsystems, Inc. 901 San Antonio Road, 
-  Palo Alto, California, 94303, U.S.A.  All Rights Reserved.
-
-  This software is the confidential and proprietary information of Sun
-  Microsystems, Inc. ("Confidential Information").  You shall not
-  disclose such Confidential Information and shall use it only in
-  accordance with the terms of the license agreement you entered into
-  with Sun.
-
-  CopyrightVersion 1.2
-
--->
-</head>
-<body bgcolor="white">
-
-<p class="changed_added_2_0">Please see the <a
-href="#overview_description">description</a> for the specification of
-managed bean annotations in JSF 2.0.<p>
-
-<div class="changed_added_2_0">
-
-<p>These javadoc files constitute the “Faces Managed Bean
-Annotation Specification for Containers Conforming to Servlet 2.5 and Beyond”</p>
-
-<p>At the time of this writing, a forthcoming JCP effort is being
-planned to extract the specification for managed beans from JSF and
-place it into its own specification.  To account for this effort and to
-avoid introducing classes into JSF 2.0 that would have to be deprecated
-when this effort is complete, implementations of JSF 2.0 are not
-required to implement the “Faces Managed Bean Annotation
-Specification for Containers Conforming to Servlet 2.5”.  However,
-JSF implementations are strongly encouraged to implement this
-specification, as it provides significant improvements in ease of
-use.</p>
-
-<p>The annotations must be processed as specified in section JSF.11.5.1.</p>
-
-</div>
-
-</body>
-</html>
diff --git a/jsf-api/src/main/resources/mojarra-jsf-api-probe-provider.xml b/jsf-api/src/main/resources/mojarra-jsf-api-probe-provider.xml
deleted file mode 100644
index cb01750..0000000
--- a/jsf-api/src/main/resources/mojarra-jsf-api-probe-provider.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<probe-providers>
-    <probe-provider moduleProviderName="glassfish" moduleName="jsf"
-                    probeProviderName="faces-servlet"
-                    class="javax.faces.webapp.FacesServlet">
-        <probe name="requestStart">
-            <method>requestStart</method>
-            <probe-param type="java.lang.String" name="requestUri"/>
-            <return-param type="void"/>
-        </probe>
-        <probe name="requestEnd">
-            <method>requestEnd</method>
-            <return-param type="void"/>
-        </probe>
-    </probe-provider>
-</probe-providers>
\ No newline at end of file
diff --git a/jsf-api/src/main/resources/overview.html b/jsf-api/src/main/resources/overview.html
deleted file mode 100644
index 5d5be8c..0000000
--- a/jsf-api/src/main/resources/overview.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-  @(#)package.html	1.60 98/01/27
-
-  Copyright 1998 Sun Microsystems, Inc. 901 San Antonio Road, 
-  Palo Alto, California, 94303, U.S.A.  All Rights Reserved.
-
-  This software is the confidential and proprietary information of Sun
-  Microsystems, Inc. ("Confidential Information").  You shall not
-  disclose such Confidential Information and shall use it only in
-  accordance with the terms of the license agreement you entered into
-  with Sun.
-
-  CopyrightVersion 1.2
-
--->
-</head>
-<body bgcolor="white">
-
-<p>Please see the <a href="#overview_description">description</a> for a
-list of normative documents in the JavaServer<sup>TM</sup>
-Specification.<p>
-
-<p>The Java Server Faces Specification is composed of several documents:</p>
-
-<table border="1">
-
-<colgroup>
-
-  <col />
-  <col width="0*" />
-
-</colgroup>
-
-<thead>
-
-<tr>
-
-<th>Specification Document</th>  <th>Available formats</th>
-
-</tr>
-
-</thead>
-
-<tbody>
-
-<tr class="changed_modified_2_0">
-
-<td><span class="changed_modified_2_0_rev_a">The API Javadocs (this document)</span></td>
-
-<td>generated HTML
-</td>
-
-</tr>
-
-<tr class="changed_modified_2_0">
-
-<td>The Standard HTML RenderKit Specification</td>
-
-<td><a target="_" href="../renderkitdocs/index.html">generated HTML</a></td>
-
-</tr>
-
-<tr class="changed_deleted_2_0">
-
-<td>The JSP Taglibarydocs</td>
-
-<td><a target="_" href="../vdldocs/jsp/index.html">generated HTML</a>
-</td>
-
-</tr>
-
-<tr class="changed_added_2_0">
-
-<td>The Facelets Taglibarydocs (including the new "composite" Facelets
-tag library)</td>
-
-<td><a target="_" href="../vdldocs/facelets/index.html">generated HTML</a>
-</td>
-
-</tr>
-
-<tr class="changed_added_2_0">
-
-<td>The JSDoc for the JavaScript API (including Ajax functionality)</td>
-
-<td><a target="_" href="../jsdocs/index.html">generated HTML</a>
-</td>
-
-</tr>
-
-
-<tr  class="changed_modified_2_0">
-
-<td><a name="prose_document">The prose document</a></td>
-
-<td><a target="_" href="../JSF_ at build.number@.pdf">PDF</a></td>
-
-</tr>
-
-</tbody>
-
-</table>
-
-<p>The following table includes sub-specifications that are not required
-to be implemented for compliance with JSF 2.0.  Implementations are
-strongly recommend to implement these specifications to maximize the
-ease of use for the users.</p>
-
-<table border="1">
-
-<colgroup>
-
-  <col />
-  <col width="0*" />
-
-</colgroup>
-
-<thead>
-
-<tr>
-
-<th>Specification Document</th>  <th>Available formats</th>
-
-</tr>
-
-</thead>
-
-<tbody>
-
-<tr class="changed_added_2_0">
-
-<td>Faces Managed Bean Annotation Specification For Containers Conforming to Servlet 2.5 and Beyond</td>
-
-<td><a target="_" href="../managed-bean-javadocs/index.html">generated HTML</a></td>
-
-</tr>
-
-</tbody>
-
-</table>
-
-<p>If the generated portions of the specification were generated with
-change notification enabled, the following color codes indicate the
-nature of the change.  Non color coded change-bars are included in the
-non-generated portion of the specification.  Please see the preface in
-the spec prose document for a list of changes.</p>
-
-<table>
-
-<tr>
-
-<td class="changed_added_2_0">Added in version 2.0
-</td>
-
-</tr>
-
-<tr>
-
-<td class="changed_modified_2_0">Modified in version 2.0
-</td>
-
-</tr>
-
-<tr>
-
-<td class="changed_deleted_2_0">Deleted or deprecated in version 2.0
-</td>
-
-</tr>
-
-
-
-</table>
-
-
-</body>
-</html>
diff --git a/jsf-api/src/test/java/javax/faces/FactoryFinderTestCase.java b/jsf-api/src/test/java/javax/faces/FactoryFinderTestCase.java
deleted file mode 100644
index ad64918..0000000
--- a/jsf-api/src/test/java/javax/faces/FactoryFinderTestCase.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces;
-
-
-import java.io.IOException;
-import java.io.File;
-import java.util.Iterator;
-import java.util.List;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Unit tests for {@link UISelectBooleanBase}.</p>
- */
-
-public class FactoryFinderTestCase extends TestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FactoryFinderTestCase(String name) {
-        super(name);
-    }
-
-    public static String FACTORIES[][] = {
-	{ FactoryFinder.APPLICATION_FACTORY, 
-	  "com.sun.faces.mock.MockApplicationFactory"
-	},
-	{ FactoryFinder.EXTERNAL_CONTEXT_FACTORY, 
-	  "com.sun.faces.mock.MockExternalContextFactory"
-	},
-	{ FactoryFinder.FACES_CONTEXT_FACTORY, 
-	  "com.sun.faces.mock.MockFacesContextFactory"
-	},
-	{ FactoryFinder.LIFECYCLE_FACTORY, 
-	  "com.sun.faces.mock.MockLifecycleFactory"
-	},
-	{ FactoryFinder.RENDER_KIT_FACTORY, 
-	  "com.sun.faces.mock.MockRenderKitFactory"
-	}
-    };
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-        super.setUp();
-	for (int i = 0, len = FACTORIES.length; i < len; i++) {
-	    System.getProperties().remove(FACTORIES[i][0]);
-	}
-    }
-
-    
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(FactoryFinderTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() throws Exception {
-        super.tearDown();
-	FactoryFinder.releaseFactories();
-	for (int i = 0, len = FACTORIES.length; i < len; i++) {
-	    System.getProperties().remove(FACTORIES[i][0]);
-	}
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     * <p>verify that the overrides specified in the faces-config.xml in
-     * the user's webapp take precedence.</p>
-     */
-
-    public void testFacesConfigCase() throws Exception {
-	Object factory = null;
-	Class clazz = null;
-
-	FactoryFinder.releaseFactories();
-	int len, i = 0;
-
-	// simulate the "faces implementation specific" part
-	for (i = 0, len = FACTORIES.length; i < len; i++) {
-	    FactoryFinder.setFactory(FACTORIES[i][0],
-				     FACTORIES[i][1]);
-	}
-
-	// simulate the "WEB-INF/services" part
-	// this is done by the build.xml file
-	
-	// simulate the "webapp faces-config.xml" part
-	FactoryFinder.setFactory(FactoryFinder.FACES_CONTEXT_FACTORY,
-				 "javax.faces.mock.MockFacesContextFactoryExtender2");
-
-	for (i = 0, len = FACTORIES.length; i < len; i++) {
-	    clazz = Class.forName(FACTORIES[i][0]);
-	    factory = FactoryFinder.getFactory(FACTORIES[i][0]);
-	    assertTrue("Factory for " + clazz.getName() + 
-		       " not of expected type.",
-		       clazz.isAssignableFrom(factory.getClass()));
-	    clazz = Class.forName(FACTORIES[i][1]);
-	    assertTrue("Factory " + FACTORIES[i][1] + " not of expected type",
-		       clazz.isAssignableFrom(factory.getClass()));
-
-	}
-	// verify that the delegation works
-	assertTrue(System.getProperty(FACTORIES[2][0]).equals("javax.faces.mock.MockFacesContextFactoryExtender2"));
-	assertTrue(System.getProperty("oldImpl").equals("javax.faces.mock.MockFacesContextFactoryExtender"));
-
-        // Verify IllegalStateException when factory not found 
-	FactoryFinder.releaseFactories();
-	FactoryFinder.setFactory(FACTORIES[0][0], FACTORIES[0][1]);
-	FactoryFinder.setFactory(FACTORIES[1][0], FACTORIES[1][1]);
-	FactoryFinder.setFactory(FACTORIES[2][0], FACTORIES[2][1]);
-	FactoryFinder.setFactory(FACTORIES[4][0], FACTORIES[4][1]);
-        boolean exceptionThrown = false;
-        try {
-            factory = FactoryFinder.getFactory(FACTORIES[3][0]); 
-        } catch(IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }    
-
-    /**
-     * <p>In the absence of webapp faces-config.xml, verify that the
-     * overrides specified in the META-INF/services take precedence.</p>
-     */
-
-    public void testServicesCase() throws Exception {
-	Object factory = null;
-	Class clazz = null;
-
-	FactoryFinder.releaseFactories();
-	int len, i = 0;
-
-	// simulate the "faces implementation specific" part
-	for (i = 0, len = FACTORIES.length; i < len; i++) {
-	    FactoryFinder.setFactory(FACTORIES[i][0],
-				     FACTORIES[i][1]);
-	}
-
-	// simulate the "WEB-INF/services" part
-	// this is done by the build.xml file
-
-	// this testcase omits the "webapp faces-config.xml" simulation
-	
-	for (i = 0, len = FACTORIES.length; i < len; i++) {
-	    clazz = Class.forName(FACTORIES[i][0]);
-	    factory = FactoryFinder.getFactory(FACTORIES[i][0]);
-	    assertTrue("Factory for " + clazz.getName() + 
-		       " not of expected type.",
-		       clazz.isAssignableFrom(factory.getClass()));
-	    clazz = Class.forName(FACTORIES[i][1]);
-	    assertTrue("Factory " + FACTORIES[i][1] + " not of expected type",
-		       clazz.isAssignableFrom(factory.getClass()));
-
-	}
-	// verify that the delegation works
-	assertTrue(System.getProperty(FACTORIES[2][0]).equals("javax.faces.mock.MockFacesContextFactoryExtender"));
-	assertTrue(System.getProperty("oldImpl").equals("com.sun.faces.mock.MockFacesContextFactory"));
-
-
-    }
-
-    // ------------------------------------------- helpers
-    public static void printRelevantSystemProperties() {
-	System.out.println("++++++Relevant System Properties: ");
-	for (int i = 0, len = FACTORIES.length; i < len; i++) {
-	    System.out.println(FACTORIES[i][0] + ": " + 
-			       System.getProperty(FACTORIES[i][0]));
-	}
-    }
-}
diff --git a/jsf-api/src/test/java/javax/faces/FactoryFinderTestCase2.java b/jsf-api/src/test/java/javax/faces/FactoryFinderTestCase2.java
deleted file mode 100644
index ad0dde1..0000000
--- a/jsf-api/src/test/java/javax/faces/FactoryFinderTestCase2.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces;
-
-
-import java.io.IOException;
-import java.io.File;
-import java.util.Iterator;
-import java.util.List;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Unit tests for {@link UISelectBooleanBase}.</p>
- */
-
-public class FactoryFinderTestCase2 extends TestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FactoryFinderTestCase2(String name) {
-        super(name);
-    }
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-        super.setUp();
-	for (int i = 0, len = FactoryFinderTestCase.FACTORIES.length; i < len; i++) {
-	    System.getProperties().remove(FactoryFinderTestCase.FACTORIES[i][0]);
-	}
-    }
-
-    
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(FactoryFinderTestCase2.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() throws Exception {
-        super.tearDown();
-	FactoryFinder.releaseFactories();
-	for (int i = 0, len = FactoryFinderTestCase.FACTORIES.length; i < len; i++) {
-	    System.getProperties().remove(FactoryFinderTestCase.FACTORIES[i][0]);
-	}
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-    /**
-     * <p>In the absence of webapp faces-config.xml and
-     * META-INF/services, verify that the overrides specified in
-     * the implementation faces-config.xml take precedence.</p>
-     */
-
-    public void testJSFImplCase() throws Exception {
-	Object factory = null;
-	Class clazz = null;
-
-	FactoryFinder.releaseFactories();
-	int len, i = 0;
-	
-	// this testcase only simulates the "faces implementation
-	// specific" part
-
-	for (i = 0, len = FactoryFinderTestCase.FACTORIES.length; i < len; i++) {
-	    FactoryFinder.setFactory(FactoryFinderTestCase.FACTORIES[i][0],
-				     FactoryFinderTestCase.FACTORIES[i][1]);
-	}
-	
-	for (i = 0, len = FactoryFinderTestCase.FACTORIES.length; i < len; i++) {
-	    clazz = Class.forName(FactoryFinderTestCase.FACTORIES[i][0]);
-	    factory = FactoryFinder.getFactory(FactoryFinderTestCase.FACTORIES[i][0]);
-	    assertTrue("Factory for " + clazz.getName() + 
-		       " not of expected type.",
-		       clazz.isAssignableFrom(factory.getClass()));
-	    clazz = Class.forName(FactoryFinderTestCase.FACTORIES[i][1]);
-	    assertTrue("Factory " + FactoryFinderTestCase.FACTORIES[i][1] + " not of expected type",
-		       clazz.isAssignableFrom(factory.getClass()));
-
-	}
-    }
-}
diff --git a/jsf-api/src/test/java/javax/faces/Messages.properties b/jsf-api/src/test/java/javax/faces/Messages.properties
deleted file mode 100644
index 5b7e896..0000000
--- a/jsf-api/src/test/java/javax/faces/Messages.properties
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# The contents of this file are subject to the terms
-# of the Common Development and Distribution License
-# (the License). You may not use this file except in
-# compliance with the License.
-# 
-# You can obtain a copy of the License at
-# https://javaserverfaces.dev.java.net/CDDL.html or
-# legal/CDDLv1.0.txt. 
-# See the License for the specific language governing
-# permission and limitations under the License.
-# 
-# When distributing Covered Code, include this CDDL
-# Header Notice in each file and include the License file
-# at legal/CDDLv1.0.txt.    
-# If applicable, add the following below the CDDL Header,
-# with the fields enclosed by brackets [] replaced by
-# your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# [Name of File] [ver.__] [Date]
-# 
-# Copyright 2005 Sun Microsystems Inc. All Rights Reserved
-#
-
-javax.faces.validator.NOT_IN_RANGE=Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.NOT_IN_RANGE_detail=The value must be between {0} and {1}.
-javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.DoubleRangeValidator.LIMIT=Validation Error: Specified attribute cannot be converted to proper type.
-javax.faces.validator.DoubleRangeValidator.MAXIMUM=Validation Error: Value is greater than allowable maximum of ''{0}''.
-javax.faces.validator.DoubleRangeValidator.MINIMUM=Validation Error: Value is less than allowable minimum of ''{0}''.
-javax.faces.validator.DoubleRangeValidator.TYPE=Validation Error: Value is not of the correct type.
-javax.faces.validator.LengthValidator.LIMIT=Validation Error: Specified attribute cannot be converted to proper type.
-javax.faces.validator.LengthValidator.MAXIMUM=Validation Error: Value is greater than allowable maximum of ''{0}''.
-javax.faces.validator.LengthValidator.MINIMUM=Validation Error: Value is less than allowable minimum of ''{0}''.
-javax.faces.component.UIInput.CONVERSION={0}: Conversion error during model data update
-javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
-javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid.
-javax.faces.component.UISelectMany.INVALID={0}: Validation Error: Value is not valid.
-javax.faces.validator.RequiredValidator.FAILED=Validation Error: Value is required.
-javax.faces.validator.LongRangeValidator.LIMIT=Validation Error: Specified attribute cannot be converted to proper type.
-javax.faces.validator.LongRangeValidator.MAXIMUM=Validation Error: Value is greater than allowable maximum of ''{0}''.
-javax.faces.validator.LongRangeValidator.MINIMUM=Validation Error: Value is less than allowable minimum of ''{0}''.
-javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}: Validation Error: Specified attribute is not between the expected values of {0} and {1}.
-javax.faces.validator.LongRangeValidator.TYPE=Validation Error: Value is not of the correct type.
-javax.faces.validator.NOT_IN_RANGE_detail=Please re-enter a valid number.
-
-# Test messages for lookups
-buckaroo=banzai
-john=bigboote
diff --git a/jsf-api/src/test/java/javax/faces/TestUtil.java b/jsf-api/src/test/java/javax/faces/TestUtil.java
deleted file mode 100644
index 23d5c93..0000000
--- a/jsf-api/src/test/java/javax/faces/TestUtil.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.Iterator;
-import javax.faces.component.UIComponent;
-import javax.faces.component.ValueHolder;
-import javax.faces.model.SelectItem;
-
-public class TestUtil extends Object {
-
-    public static boolean keepWaiting = true;
-
-    /** 
-     * Usage: <P>
-     *
-     * Place a call to this method in the earliest possible entry point of
-     * your servlet app.  It will cause the app to enter into an infinite
-     * loop, sleeping until the static var keepWaiting is set to false.  The
-     * idea is that you attach your debugger to the servlet, then, set a
-     * breakpont in this method.  When it is hit, you use the debugger to set
-     * the keepWaiting class var to false.
-     */
-
-    public static void waitForDebugger() {
-	while (keepWaiting) {
-	    try {
-		Thread.sleep(5000);
-	    }
-	    catch (InterruptedException e) {
-		System.out.println("DebugUtil.waitForDebugger(): Exception: " + 
-				   e.getMessage());
-	    }
-	}
-    }
-
-    /**
-     * <p>If both args are <code>null</code>, return
-     * <code>true</code>.</p>
-     *
-     * <p>If both args are <code>non-null</code>, return
-     * s1.equals(s2)</p>.
-     *
-     * <p>Otherwise, return <code>false</code>.</p>
-     *
-     */
-
-    public static boolean equalsWithNulls(Object s1, Object s2) {
-	if (null == s1 && null == s2) {
-	    return true;
-	}
-
-	if (null != s1 && null != s2) {
-	    return s1.equals(s2);
-	}
-
-	return false;
-    }
-    
-    private static int curDepth = 0;
-
-    private static void indentPrintln(Writer out, String str) {
-        int i = 0;
-
-        // handle indentation
-        try {
-            for (i = 0; i < curDepth; i++) {
-                out.write("  ");
-            }
-            out.write(str + "\n");
-        } catch (IOException ex) {}
-    }
-
-    /**
-     * Output of printTree() as a String. 
-     * Useful when used with a Logger. For example:
-     *    logger.log(DebugUtil.printTree(root));
-     */
-    public static String printTree(UIComponent root) {
-        StringWriter writer = new StringWriter();
-        printTree(root, writer);
-        return writer.toString();
-    }
-
-    /**
-     * Output of printTree() to a PrintStream. 
-     * Usage:
-     *    DebugUtil.printTree(root, System.out);
-     */
-    public static void printTree(UIComponent root, PrintStream out) {
-        PrintWriter writer = new PrintWriter(out);
-        printTree(root, writer);
-        writer.flush();
-    }
-
-    public static void printTree(UIComponent root, Writer out) {
-        if (null == root) {
-            return;
-        }
-        int i = 0;
-        Object value = null;
-
-/* PENDING
-   indentPrintln(out, "===>Type:" + root.getComponentType());
-*/
-        indentPrintln(out, "id:" + root.getId());
-        indentPrintln(out, "type:" + root.toString());
-
-        Iterator items = null;
-        SelectItem curItem = null;
-        int j = 0;
-        
-        if (root instanceof ValueHolder) {
-            value = ((ValueHolder)root).getValue();
-        }
-        indentPrintln(out, "value= " + value);
-        
-        Iterator<String> it = root.getAttributes().keySet().iterator();
-        if (it != null) {
-            while (it.hasNext()) {
-                String attrValue = null, attrName = it.next();
-                Object attrObj = root.getAttributes().get(attrName);
-                
-                if (null != attrObj) {
-                    // chop off the address since we don't want to print
-                    // out anything that'll vary from invocation to
-                    // invocation
-                    attrValue = attrObj.toString();
-                    int at = 0;
-                    boolean doTruncate = false;
-                    if (-1 == (at = attrValue.indexOf("$"))) {
-                        if (-1 != (at = attrValue.indexOf("@"))) {
-                            doTruncate = true;
-                        }
-                    } else {
-                        doTruncate = true;
-                    }
-                    
-                    if (doTruncate) {
-                        attrValue = attrValue.substring(0, at);
-                    }
-                } else {
-                    attrValue = (String) attrObj;
-                }
-                
-                indentPrintln(out, "attr=" + attrName +
-                        " : " + attrValue);
-            }
-        }
-
-
-        curDepth++;
-        Iterator<UIComponent> componentIter = root.getChildren().iterator();
-        Iterator<UIComponent> facets = root.getFacets().values().iterator();
-        // print all the facets of this component
-        while(facets.hasNext()) {
-            printTree(facets.next(), out);
-        }
-        // print all the children of this component
-        while (componentIter.hasNext()) {
-            printTree(componentIter.next(), out);
-        }
-        curDepth--;
-    }
-
-    
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/NamingContainerTestCase.java b/jsf-api/src/test/java/javax/faces/component/NamingContainerTestCase.java
deleted file mode 100644
index 1b333f7..0000000
--- a/jsf-api/src/test/java/javax/faces/component/NamingContainerTestCase.java
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import com.sun.faces.mock.MockApplication;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-import java.util.HashMap;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-
-
-/**
- * <p>Unit tests for the {@link NamingContainer} functionality of all the
- * standard component classes.</p>
- */
-
-public class NamingContainerTestCase extends TestCase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The root of the component tree to be tested
-    private UIViewRoot root = null;
-
-    // Mock object instances for our tests
-    protected MockApplication         application = null;
-    protected MockServletConfig       config = null;
-    protected MockExternalContext     externalContext = null;
-    protected MockFacesContext        facesContext = null;
-    protected MockLifecycle           lifecycle = null;
-    protected MockHttpServletRequest  request = null;
-    protected MockHttpServletResponse response = null;
-    protected MockServletContext      servletContext = null;
-    protected MockHttpSession         session = null;
-
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    // Construct a new instance of this test case.
-    public NamingContainerTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        
-        // Set up Servlet API Objects
-        servletContext = new MockServletContext();
-        servletContext.addInitParameter("appParamName", "appParamValue");
-        servletContext.setAttribute("appScopeName", "appScopeValue");
-        config = new MockServletConfig(servletContext);
-        session = new MockHttpSession();
-        session.setAttribute("sesScopeName", "sesScopeValue");
-        request = new MockHttpServletRequest(session);
-        request.setAttribute("reqScopeName", "reqScopeValue");
-        response = new MockHttpServletResponse();
-
-        // Set up Faces API Objects
-	FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
-				 "com.sun.faces.mock.MockApplicationFactory");
-	FactoryFinder.setFactory(FactoryFinder.RENDER_KIT_FACTORY,
-				 "com.sun.faces.mock.MockRenderKitFactory");
-
-        externalContext =
-            new MockExternalContext(servletContext, request, response);
-        lifecycle = new MockLifecycle();
-        facesContext = new MockFacesContext(externalContext, lifecycle);
-        ApplicationFactory applicationFactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        application = (MockApplication) applicationFactory.getApplication();
-        facesContext.setApplication(application);
-	root = new UIViewRoot();
-
-	root.setViewId("/viewId");
-        root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        facesContext.setViewRoot(root);
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = new MockRenderKit();        
-        try {
-            renderKitFactory.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT,
-                                          renderKit);
-        } catch (IllegalArgumentException e) {
-            ;
-        }
-        Map map = new HashMap();
-        externalContext.setRequestParameterMap(map);
-
-
-        
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(NamingContainerTestCase.class));
-
-    }
-
-
-    // Tear down instance variables required by this test case.
-    public void tearDown() {
-
-        root = null;
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test nested NamingContainer callbacks
-    public void testNested() {
-
-        TestNamingContainer a = new TestNamingContainer(); a.setId("a");
-        TestNamingContainer b = new TestNamingContainer(); b.setId("b");
-        TestNamingContainer d = new TestNamingContainer(); d.setId("d");
-        UIPanel e = new UIPanel(); e.setId("e");
-        UIPanel g = new UIPanel(); g.setId("g");
-        a.getChildren().add(b);
-        b.getChildren().add(d);
-        b.getChildren().add(g);
-        d.getChildren().add(e);
-
-        TestNamingContainer.trace(null);
-        assertTrue(a == a.findComponent("a"));
-       
-        TestNamingContainer.trace(null);
-        assertTrue(a == a.findComponent(":a"));
-        
-        TestNamingContainer.trace(null);
-        assertTrue(b == a.findComponent("b"));
-        
-        TestNamingContainer.trace(null);
-        assertTrue(b == a.findComponent(":b"));
-       
-        TestNamingContainer.trace(null);
-        assertTrue(d == a.findComponent("b:d"));
-       
-        TestNamingContainer.trace(null);
-        assertTrue(d == a.findComponent(":b:d"));
-        
-        TestNamingContainer.trace(null);
-        assertTrue(e == a.findComponent("b:d:e"));
-       
-        TestNamingContainer.trace(null);
-        assertTrue(e == a.findComponent(":b:d:e"));
-        
-        TestNamingContainer.trace(null);
-        assertTrue(g == a.findComponent("b:g"));
-        
-        TestNamingContainer.trace(null);
-        assertTrue(g == a.findComponent(":b:g"));        
-
-    }
-    
-    // Test nested NamingContainer callbacks
-    public void testNested2() {
-
-        TestNamingContainer a = new TestNamingContainer(); a.setId("a");
-        TestNamingContainer b = new TestNamingContainer(); b.setId("b");
-        TestNamingContainer d = new TestNamingContainer(); d.setId("b");
-        UIPanel e = new UIPanel(); e.setId("e");
-        UIPanel g = new UIPanel(); g.setId("g");
-        a.getChildren().add(b);
-        b.getChildren().add(d);
-        b.getChildren().add(g);
-        d.getChildren().add(e);
-
-        TestNamingContainer.trace(null);
-        assertTrue(a == a.findComponent("a"));       
-
-        TestNamingContainer.trace(null);
-        assertTrue(a == a.findComponent(":a"));        
-
-        TestNamingContainer.trace(null);
-        assertTrue(b == a.findComponent("b"));        
-
-        TestNamingContainer.trace(null);
-        assertTrue(b == a.findComponent(":b"));       
-
-        TestNamingContainer.trace(null);
-        assertTrue(d == a.findComponent("b:b"));          
-
-        TestNamingContainer.trace(null);
-        assertTrue(d == a.findComponent(":b:b"));         
-
-        TestNamingContainer.trace(null);
-        assertTrue(e == a.findComponent("b:b:e"));       
-
-        TestNamingContainer.trace(null);
-        assertTrue(e == a.findComponent(":b:b:e"));        
-
-        TestNamingContainer.trace(null);
-        assertTrue(g == a.findComponent("b:g"));        
-
-        TestNamingContainer.trace(null);
-        assertTrue(g == a.findComponent(":b:g"));        
-
-    }
-
-
-    // Test standard NamingContainer functionality
-    public void testStandard() {
-
-        // Set up a component hierarchy as follows (component ids in quotes):
-        // "a" - UIViewRoot at head of hierarchy
-        // "a" has children "b" and "c"
-        // "b" has children "d" and "g"
-        // "d" has children "e" and "f"
-        // "c" has children "h" and "i"
-        // Components "b" and "d" implement NamingContainer
-        UIViewRoot a = (UIViewRoot) root; a.setId("a");
-        UIForm b = new UIForm(); b.setId("b");
-        UIPanel c = new UIPanel(); c.setId("c");
-        UINamingContainer d = new UINamingContainer(); d.setId("d");
-        UIPanel e = new UIPanel(); e.setId("e");
-        UIPanel f = new UIPanel(); f.setId("f");
-        UIPanel g = new UIPanel(); g.setId("g");
-        UIPanel h = new UIPanel(); h.setId("h");
-        UIPanel i = new UIPanel(); i.setId("i");
-        a.getChildren().add(b);
-        a.getChildren().add(c);
-        b.getChildren().add(d);
-        b.getChildren().add(g);
-        c.getChildren().add(h);
-        c.getChildren().add(i);
-        d.getChildren().add(e);
-        d.getChildren().add(f);
-
-        // Positive relative searches from "a"
-        assertTrue(a == a.findComponent("a"));
-        assertTrue(b == a.findComponent("b"));
-        assertTrue(c == a.findComponent("c"));
-        assertTrue(d == a.findComponent("b:d"));
-        assertTrue(e == a.findComponent("b:d:e"));
-        assertTrue(f == a.findComponent("b:d:f"));
-        assertTrue(g == a.findComponent("b:g"));
-        assertTrue(h == a.findComponent("h"));
-        assertTrue(i == a.findComponent("i"));
-
-        // Negative relative searches from "a"
-        assertNull(a.findComponent("d"));
-        assertNull(a.findComponent("e"));
-        assertNull(a.findComponent("f"));
-        assertNull(a.findComponent("g"));
-
-        // Positive relative searches from "b"
-        assertTrue(b == b.findComponent("b"));
-        assertTrue(d == b.findComponent("d"));
-        assertTrue(e == b.findComponent("d:e"));
-        assertTrue(f == b.findComponent("d:f"));
-        assertTrue(g == b.findComponent("g"));
-
-        // Negative relative searches from "b"
-        assertNull(b.findComponent("a"));
-        assertNull(b.findComponent("c"));
-        assertNull(b.findComponent("e"));
-        assertNull(b.findComponent("f"));
-        assertNull(b.findComponent("h"));
-        assertNull(b.findComponent("i"));
-
-        // Positive relative searches from "c"
-        assertTrue(a == c.findComponent("a"));
-        assertTrue(b == c.findComponent("b"));
-        assertTrue(c == c.findComponent("c"));
-        assertTrue(d == c.findComponent("b:d"));
-        assertTrue(e == c.findComponent("b:d:e"));
-        assertTrue(f == c.findComponent("b:d:f"));
-        assertTrue(g == c.findComponent("b:g"));
-        assertTrue(h == c.findComponent("h"));
-        assertTrue(i == c.findComponent("i"));
-
-        // Negative relative searches from "c"
-        assertNull(c.findComponent("d"));
-        assertNull(c.findComponent("e"));
-        assertNull(c.findComponent("f"));
-        assertNull(c.findComponent("g"));
-
-        // Positive relative searches from "d"
-        assertTrue(d == d.findComponent("d"));
-        assertTrue(e == d.findComponent("e"));
-        assertTrue(f == d.findComponent("f"));
-
-        // Negative relative searches from "d"
-        assertNull(d.findComponent("a"));
-        assertNull(d.findComponent("b"));
-        assertNull(d.findComponent("c"));
-        assertNull(d.findComponent("g"));
-        assertNull(d.findComponent("h"));
-        assertNull(d.findComponent("i"));
-
-        // Positive relative searches from "e"
-        assertTrue(d == e.findComponent("d"));
-        assertTrue(e == e.findComponent("e"));
-        assertTrue(f == e.findComponent("f"));
-
-        // Negative relative searches from "e"
-        assertNull(e.findComponent("a"));
-        assertNull(e.findComponent("b"));
-        assertNull(e.findComponent("c"));
-        assertNull(e.findComponent("g"));
-        assertNull(e.findComponent("h"));
-        assertNull(e.findComponent("i"));
-
-        // Positive relative searches from "f"
-        assertTrue(d == f.findComponent("d"));
-        assertTrue(e == f.findComponent("e"));
-        assertTrue(f == f.findComponent("f"));
-
-        // Negative relative searches from "f"
-        assertNull(f.findComponent("a"));
-        assertNull(f.findComponent("b"));
-        assertNull(f.findComponent("c"));
-        assertNull(f.findComponent("g"));
-        assertNull(f.findComponent("h"));
-        assertNull(f.findComponent("i"));
-
-        // Positive relative searches from "g"
-        assertTrue(b == g.findComponent("b"));
-        assertTrue(d == g.findComponent("d"));
-        assertTrue(e == g.findComponent("d:e"));
-        assertTrue(f == g.findComponent("d:f"));
-        assertTrue(g == g.findComponent("g"));
-
-        // Negative relative searches from "g"
-        assertNull(g.findComponent("a"));
-        assertNull(g.findComponent("c"));
-        assertNull(g.findComponent("e"));
-        assertNull(g.findComponent("f"));
-        assertNull(g.findComponent("h"));
-        assertNull(g.findComponent("i"));
-
-        // Positive relative searches from "h"
-        assertTrue(a == h.findComponent("a"));
-        assertTrue(b == h.findComponent("b"));
-        assertTrue(c == h.findComponent("c"));
-        assertTrue(d == h.findComponent("b:d"));
-        assertTrue(e == h.findComponent("b:d:e"));
-        assertTrue(f == h.findComponent("b:d:f"));
-        assertTrue(g == h.findComponent("b:g"));
-        assertTrue(h == h.findComponent("h"));
-        assertTrue(i == h.findComponent("i"));
-
-        // Negative relative searches from "h"
-        assertNull(h.findComponent("d"));
-        assertNull(h.findComponent("e"));
-        assertNull(h.findComponent("f"));
-        assertNull(h.findComponent("g"));
-
-        // Positive relative searches from "i"
-        assertTrue(a == i.findComponent("a"));
-        assertTrue(b == i.findComponent("b"));
-        assertTrue(c == i.findComponent("c"));
-        assertTrue(d == i.findComponent("b:d"));
-        assertTrue(e == i.findComponent("b:d:e"));
-        assertTrue(f == i.findComponent("b:d:f"));
-        assertTrue(g == i.findComponent("b:g"));
-        assertTrue(h == i.findComponent("h"));
-        assertTrue(i == i.findComponent("i"));
-
-        // Negative relative searches from "i"
-        assertNull(i.findComponent("d"));
-        assertNull(i.findComponent("e"));
-        assertNull(i.findComponent("f"));
-        assertNull(i.findComponent("g"));
-
-        // Absolute searches from "a"
-        assertTrue(a == a.findComponent(":a"));
-        assertTrue(b == a.findComponent(":b"));
-        assertTrue(c == a.findComponent(":c"));
-        assertTrue(d == a.findComponent(":b:d"));
-        assertTrue(e == a.findComponent(":b:d:e"));
-        assertTrue(f == a.findComponent(":b:d:f"));
-        assertTrue(g == a.findComponent(":b:g"));
-        assertTrue(h == a.findComponent(":h"));
-        assertTrue(i == a.findComponent(":i"));
-
-        // Absolute searches from "b"
-        assertTrue(a == b.findComponent(":a"));
-        assertTrue(b == b.findComponent(":b"));
-        assertTrue(c == b.findComponent(":c"));
-        assertTrue(d == b.findComponent(":b:d"));
-        assertTrue(e == b.findComponent(":b:d:e"));
-        assertTrue(f == b.findComponent(":b:d:f"));
-        assertTrue(g == b.findComponent(":b:g"));
-        assertTrue(h == b.findComponent(":h"));
-        assertTrue(i == b.findComponent(":i"));
-
-        // Absolute searches from "c"
-        assertTrue(a == c.findComponent(":a"));
-        assertTrue(b == c.findComponent(":b"));
-        assertTrue(c == c.findComponent(":c"));
-        assertTrue(d == c.findComponent(":b:d"));
-        assertTrue(e == c.findComponent(":b:d:e"));
-        assertTrue(f == c.findComponent(":b:d:f"));
-        assertTrue(g == c.findComponent(":b:g"));
-        assertTrue(h == c.findComponent(":h"));
-        assertTrue(i == c.findComponent(":i"));
-
-        // Absolute searches from "d"
-        assertTrue(a == d.findComponent(":a"));
-        assertTrue(b == d.findComponent(":b"));
-        assertTrue(c == d.findComponent(":c"));
-        assertTrue(d == d.findComponent(":b:d"));
-        assertTrue(e == d.findComponent(":b:d:e"));
-        assertTrue(f == d.findComponent(":b:d:f"));
-        assertTrue(g == d.findComponent(":b:g"));
-        assertTrue(h == d.findComponent(":h"));
-        assertTrue(i == d.findComponent(":i"));
-
-        // Absolute searches from "e"
-        assertTrue(a == e.findComponent(":a"));
-        assertTrue(b == e.findComponent(":b"));
-        assertTrue(c == e.findComponent(":c"));
-        assertTrue(d == e.findComponent(":b:d"));
-        assertTrue(e == e.findComponent(":b:d:e"));
-        assertTrue(f == e.findComponent(":b:d:f"));
-        assertTrue(g == e.findComponent(":b:g"));
-        assertTrue(h == e.findComponent(":h"));
-        assertTrue(i == e.findComponent(":i"));
-
-        // Absolute searches from "f"
-        assertTrue(a == f.findComponent(":a"));
-        assertTrue(b == f.findComponent(":b"));
-        assertTrue(c == f.findComponent(":c"));
-        assertTrue(d == f.findComponent(":b:d"));
-        assertTrue(e == f.findComponent(":b:d:e"));
-        assertTrue(f == f.findComponent(":b:d:f"));
-        assertTrue(g == f.findComponent(":b:g"));
-        assertTrue(h == f.findComponent(":h"));
-        assertTrue(i == f.findComponent(":i"));
-
-        // Absolute searches from "g"
-        assertTrue(a == g.findComponent(":a"));
-        assertTrue(b == g.findComponent(":b"));
-        assertTrue(c == g.findComponent(":c"));
-        assertTrue(d == g.findComponent(":b:d"));
-        assertTrue(e == g.findComponent(":b:d:e"));
-        assertTrue(f == g.findComponent(":b:d:f"));
-        assertTrue(g == g.findComponent(":b:g"));
-        assertTrue(h == g.findComponent(":h"));
-        assertTrue(i == g.findComponent(":i"));
-
-        // Absolute searches from "h"
-        assertTrue(a == h.findComponent(":a"));
-        assertTrue(b == h.findComponent(":b"));
-        assertTrue(c == h.findComponent(":c"));
-        assertTrue(d == h.findComponent(":b:d"));
-        assertTrue(e == h.findComponent(":b:d:e"));
-        assertTrue(f == h.findComponent(":b:d:f"));
-        assertTrue(g == h.findComponent(":b:g"));
-        assertTrue(h == h.findComponent(":h"));
-        assertTrue(i == h.findComponent(":i"));
-
-        // Absolute searches from "i"
-        assertTrue(a == i.findComponent(":a"));
-        assertTrue(b == i.findComponent(":b"));
-        assertTrue(c == i.findComponent(":c"));
-        assertTrue(d == i.findComponent(":b:d"));
-        assertTrue(e == i.findComponent(":b:d:e"));
-        assertTrue(f == i.findComponent(":b:d:f"));
-        assertTrue(g == i.findComponent(":b:g"));
-        assertTrue(h == i.findComponent(":h"));
-        assertTrue(i == i.findComponent(":i"));
-
-        // Cases that should throw exceptions
-        try {
-            a.findComponent(null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent("a:c:h");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent("a:c:i");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent(":a:c:h");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent(":a:c:i");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent("c:h");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent("c:i");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent(":c:h");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-        try {
-            a.findComponent(":c:i");
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException ex) {
-            ; // Expected result
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/StateHolderSaverTestCase.java b/jsf-api/src/test/java/javax/faces/component/StateHolderSaverTestCase.java
deleted file mode 100644
index 722c1d6..0000000
--- a/jsf-api/src/test/java/javax/faces/component/StateHolderSaverTestCase.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.convert.IntegerConverter;
-
-
-public class StateHolderSaverTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------------------ Constructors
-
-
-    // Construct a new instance of this test case.
-    public StateHolderSaverTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(StateHolderSaverTestCase.class));
-
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testLifecycleManagement() { }
-
-
-    public void testChildrenRecursive() {}
-
-
-    public void testComponentReconnect() {}
-
-
-    public void testComponentRemoval() {}
-
-
-    public void testStateHolder() throws Exception {}
-
-
-    public void testValueBindings() {}
-
-
-    public void testImplementsStateHolder() throws Exception {
-	StateHolderSaver saver = null;
-	UIInput 
-	    postSave,
-	    preSave = new UIInput();
-	preSave.setId("id1");
-	preSave.setRendererType(null);
-	
-	saver = new StateHolderSaver(facesContext, preSave);
-	postSave = (UIInput) saver.restore(facesContext);
-	assertEquals(postSave.getId(), preSave.getId());
-    }
-
-    public void testImplementsSerializable() throws Exception {
-	StateHolderSaver saver = null;
-	String 
-	    preSave = "hello",
-	    postSave = null;
-
-	saver = new StateHolderSaver(facesContext, preSave);
-	postSave = (String) saver.restore(facesContext);
-	assertTrue(preSave.equals(postSave));
-    }
-
-    public void testImplementsNeither() throws Exception {
-	StateHolderSaver saver = null;
-	IntegerConverter  
-	    preSave = new IntegerConverter(),
-	    postSave = null;
-
-	saver = new StateHolderSaver(facesContext, preSave);
-	postSave = (IntegerConverter) saver.restore(facesContext);
-	assertTrue(true); // lack of ClassCastException
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestActionListener.java b/jsf-api/src/test/java/javax/faces/component/TestActionListener.java
deleted file mode 100644
index eae11dc..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestActionListener.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-
-
-/**
- * <p>Test {@link ActionListener} implementation.</p>
- */
-
-public class TestActionListener implements ActionListener, StateHolder {
-
-    public TestActionListener() {
-    }
-
-    public TestActionListener(String id) {
-        this.id = id;
-    }
-
-    private String id = null;
-
-
-    // ----------------------------------------------------------- Pubic Methods
-
-
-    public String getId() {
-        return (this.id);
-    }
-
-    public void processAction(ActionEvent event) {
-        trace(getId() + "@" + event.getPhaseId().toString());
-    }
-
-    public boolean equals(Object otherObj) {
-	if (!(otherObj instanceof TestActionListener)) {
-	    return false;
-	}
-	TestActionListener other = (TestActionListener) otherObj;
-	if ((null != id && null == other.id) ||
-	    (null == id && null != other.id)) {
-	    return false;
-	}
-	boolean idsAreEqual = true;
-	if (null != id) {
-	    idsAreEqual = id.equals(other.id);
-	}
-	return idsAreEqual;
-    }
-	    
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-    //
-    // methods from StateHolder
-    //
-
-    public Object saveState(FacesContext context) {
-	return id;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-	id = (String) state;
-    }
-
-    public boolean isTransient() { return false;
-    }
-
-    public void setTransient(boolean newT) {}
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestCommand.java b/jsf-api/src/test/java/javax/faces/component/TestCommand.java
deleted file mode 100644
index 584c983..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestCommand.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.util.List;
-
-
-/**
- * <p>Test {@link UICommand} subclass.</p>
- */
-
-public class TestCommand extends UICommand {
-
-
-    public TestCommand() {
-        super();
-    }
-
-    public TestCommand(String id) {
-        setId(id);
-    }
-
-    /* PENDING(craigmcc) - listeners is private on UIComponentBase now
-    public List[] getListeners() {
-        return (this.listeners);
-    }
-    */
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestCommandActionListener.java b/jsf-api/src/test/java/javax/faces/component/TestCommandActionListener.java
deleted file mode 100644
index b765597..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestCommandActionListener.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-
-
-/**
- * <p>Test implementation of {@link ActionListener}.</p>
- */
-
-public class TestCommandActionListener implements ActionListener {
-
-    protected String actionListenerId = null;
- 
-    public TestCommandActionListener(String actionListenerId) {
-	this.actionListenerId = actionListenerId;
-    }
-    
-    public void processAction(ActionEvent event) {
-        trace(actionListenerId);
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestComponent.java b/jsf-api/src/test/java/javax/faces/component/TestComponent.java
deleted file mode 100644
index 1d53139..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestComponent.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
-
-
-/**
- * <p>Test <code>UIComponent</code> for unit tests.</p>
- */
-
-public class TestComponent extends UIComponentBase {
-
-
-    public TestComponent() {
-        this("test");
-    }
-
-    public TestComponent(String componentId) {
-        super();
-        setId(componentId);
-    }
-
-    public String getComponentType() {
-        return ("TestComponent");
-    }
-
-
-    public String getFamily() {
-        return ("Test");
-    }
-
-
-    // -------------------------------------------------- Trace-Enabled Methods
-
-
-    public void decode(FacesContext context) {
-        trace("d-" + getId());
-        super.decode(context);
-    }
-
-
-    public void encodeBegin(FacesContext context) throws IOException {
-        trace("eB-" + getId());
-        super.encodeBegin(context);
-    }
-
-
-    public void encodeChildren(FacesContext context) throws IOException {
-        trace("eC-" + getId());
-        super.encodeChildren(context);
-    }
-
-
-    public void encodeEnd(FacesContext context) throws IOException {
-        trace("eE-" + getId());
-        super.encodeEnd(context);
-    }
-
-
-    public void updateModel(FacesContext context) {
-        trace("u-" + getId());
-        //        super.updateModel(context);
-    }
-
-
-    public void processDecodes(FacesContext context) {
-        trace("pD-" + getId());
-        super.processDecodes(context);
-    }
-
-
-    public void processValidators(FacesContext context) {
-        trace("pV-" + getId());
-        super.processValidators(context);
-    }
-
-
-    public void processUpdates(FacesContext context) {
-        trace("pU-" + getId());
-        super.processUpdates(context);
-    }
-
-    public void callPushComponent(FacesContext context) {
-        pushComponentToEL(context,null);
-    }
-
-    public void callPopComponent(FacesContext context) {
-        popComponentFromEL(context);
-    }
-
-
-    // --------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestDataActionListener.java b/jsf-api/src/test/java/javax/faces/component/TestDataActionListener.java
deleted file mode 100644
index 5e6b34c..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestDataActionListener.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>Test {@link ActionListener} implementation.</p>
- */
-
-public class TestDataActionListener implements ActionListener {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestDataActionListener() {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void processAction(ActionEvent event) {
-
-        trace(event.getComponent().getClientId
-              (FacesContext.getCurrentInstance()));
-
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestDataBean.java b/jsf-api/src/test/java/javax/faces/component/TestDataBean.java
deleted file mode 100644
index 4831eec..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestDataBean.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.Serializable;
-
-
-// Test JavaBean for DataMode Tests
-public class TestDataBean implements Serializable {
-
-    private String command;
-    public String getCommand() {
-        return (this.command);
-    }
-    public void setCommand(String command) {
-        this.command = command;
-    }
-
-    private String input;
-    public String getInput() {
-        return (this.input);
-    }
-    public void setInput(String input) {
-        this.input = input;
-    }
-
-    private String output;
-    public String getOutput() {
-        return (this.output);
-    }
-    public void setOutput(String output) {
-        this.output = output;
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestDataValidator.java b/jsf-api/src/test/java/javax/faces/component/TestDataValidator.java
deleted file mode 100644
index 0a54d81..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestDataValidator.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-
-
-/**
- * <p>Test {@link Validator} implementation.</p>
- */
-
-public class TestDataValidator implements Validator {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestDataValidator() {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void validate(FacesContext context, UIComponent component, Object valueObj) {
-        trace(component.getClientId(context));
-        String value = (String) valueObj;
-        if (value == null) {
-            value = "";
-        }
-        trace(value);
-        if ("bad".equals(value)) {
-            trace("ERROR");
-            throw new ValidatorException(
-                               new FacesMessage(FacesMessage.SEVERITY_ERROR,
-						component.getClientId(context),
-						null));
-        }
-
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestDataValueChangeListener.java b/jsf-api/src/test/java/javax/faces/component/TestDataValueChangeListener.java
deleted file mode 100644
index 7d0ea5f..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestDataValueChangeListener.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.context.FacesContext;
-
-
-/**
- * <p>Test {@link ValueChangeListener} implementation.</p>
- */
-
-public class TestDataValueChangeListener implements ValueChangeListener {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestDataValueChangeListener() {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void processValueChange(ValueChangeEvent event) {
-        trace(event.getComponent().getClientId
-              (FacesContext.getCurrentInstance()));
-        Object oldValue = event.getOldValue();
-        if (oldValue == null) {
-            oldValue = "<<NULL>>";
-        }
-        trace(oldValue.toString());
-        Object newValue = event.getNewValue();
-        if (newValue == null) {
-            newValue = "<<NULL>>";
-        }
-        trace(newValue.toString());
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestEvent.java b/jsf-api/src/test/java/javax/faces/component/TestEvent.java
deleted file mode 100644
index 4563b6d..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestEvent.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.component.UIComponent;
-import javax.faces.event.FacesEvent;
-import javax.faces.event.FacesListener;
-
-public class TestEvent extends FacesEvent {
-
-    public TestEvent(UIComponent component) {
-        this(component, null);
-    }
-
-    public TestEvent(UIComponent component, String id) {
-        super(component);
-        this.id = id;
-    }
-
-    private String id;
-
-    public String getId() {
-        return (this.id);
-    }
-
-    public  boolean isAppropriateListener(FacesListener listener) {
-        return (listener instanceof TestListener);
-    }
-
-    public void processListener(FacesListener listener) {
-        ((TestListener) listener).processTest(this);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestInput.java b/jsf-api/src/test/java/javax/faces/component/TestInput.java
deleted file mode 100644
index 3e0db4a..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestInput.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.util.List;
-
-
-/**
- * <p>Test {@link UIInput} subclass.</p>
- */
-
-public class TestInput extends UIInput {
-
-
-    public TestInput() {
-        super();
-    }
-
-    public TestInput(String id) {
-        setId(id);
-    }
-
-    /* PENDING(craigmcc) - listeners is private on UIComponentBase now
-    public List[] getListeners() {
-        return (this.listeners);
-    }
-    */
-
-    public boolean compareValues(Object previous, Object value) {
-        return (super.compareValues(previous, value));
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestInputValidator.java b/jsf-api/src/test/java/javax/faces/component/TestInputValidator.java
deleted file mode 100644
index 191701d..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestInputValidator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.util.Collections;
-import java.util.Iterator;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIComponent;
-import javax.faces.component.StateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-
-
-/**
- * <p>Test implementation of {@link Validator}.</p>
- */
-
-public class TestInputValidator implements Validator {
-
-    protected String validatorId = null;
- 
-    public TestInputValidator(String validatorId) {
-	this.validatorId = validatorId;
-    }
-    
-    public void validate(FacesContext context, UIComponent component, Object value) {
-        trace(validatorId);
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestInputValueChangeListener.java b/jsf-api/src/test/java/javax/faces/component/TestInputValueChangeListener.java
deleted file mode 100644
index 907be58..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestInputValueChangeListener.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-
-
-/**
- * <p>Test implementation of {@link ValueChangeListener}.</p>
- */
-
-public class TestInputValueChangeListener implements ValueChangeListener {
-
-    protected String valueChangeListenerId = null;
- 
-    public TestInputValueChangeListener(String valueChangeListenerId) {
-	this.valueChangeListenerId = valueChangeListenerId;
-    }
-    
-    public void processValueChange(ValueChangeEvent event) {
-        trace(valueChangeListenerId);
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestListener.java b/jsf-api/src/test/java/javax/faces/component/TestListener.java
deleted file mode 100644
index 61fcdd9..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestListener.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.FacesListener;
-
-public class TestListener implements FacesListener {
-
-
-    public TestListener(String id,
-                        String fromId, String toId) {
-        this.id = id;
-        this.fromId = fromId; // When an event with this id is received ...
-        this.toId = toId;     // queue an additional event with this id
-    }
-
-
-    public TestListener(String id) {
-        this.id = id;
-    }
-
-    public TestListener(String id, boolean abort) {
-        this.id = id;
-        this.abort = abort;
-    }
-
-
-    private boolean abort = false;
-    private String fromId = null;
-    private String id = null;
-    private String toId = null;
-
-
-    public String getId() {
-        return (this.id);
-    }
-
-    public void processTest(TestEvent event) {
-        if (getId() != null) {
-            trace(getId());
-        }
-        if (event.getId() != null) {
-            trace(event.getId());
-            if (event.getId().equals(fromId)) {
-                event.getComponent().queueEvent
-                    (new TestEvent(event.getComponent(), toId));
-            }
-        }
-        if (abort) {
-            throw new AbortProcessingException();
-        }
-    }
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestNamingContainer.java b/jsf-api/src/test/java/javax/faces/component/TestNamingContainer.java
deleted file mode 100644
index 9b7224f..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestNamingContainer.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-/**
- * <p>Test {@link NamingContainer} implementation with tracing.</p>
- */
-
-public class TestNamingContainer extends UINamingContainer {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestNamingContainer() {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public UIComponent findComponent(String expr) {
-
-        trace(getId());
-        trace(expr);
-        return (super.findComponent(expr));
-
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestSelectMany.java b/jsf-api/src/test/java/javax/faces/component/TestSelectMany.java
deleted file mode 100644
index 85d6369..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestSelectMany.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.util.List;
-
-
-/**
- * <p>Test {@link UISelectMany} subclass.</p>
- */
-
-public class TestSelectMany extends UISelectMany {
-
-
-    public boolean compareValues(Object previous, Object value) {
-        return (super.compareValues(previous, value));
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestValidator.java b/jsf-api/src/test/java/javax/faces/component/TestValidator.java
deleted file mode 100644
index 9041181..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestValidator.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.util.Collections;
-import java.util.Iterator;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIComponent;
-import javax.faces.component.StateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-
-
-/**
- * <p>Test implementation of {@link Validator}.</p>
- */
-
-public class TestValidator implements Validator, StateHolder {
-
-    protected String validateState = null;
- 
-    public TestValidator(String newState) {
-	validateState = newState;
-    }
-    
-    public TestValidator() {}
-
-    public void validate(FacesContext context, UIComponent component, Object value) {
-        ;  // No action taken
-    }
-
-    public boolean equals(Object otherObj) {
-	if (!(otherObj instanceof TestValidator)) {
-	    return false;
-	}
-	TestValidator other = (TestValidator) otherObj;
-	if (!((validateState == null && other.validateState == null) ||
-	    (validateState != null && other.validateState != null))) {
-	    return  false;
-	}
-	if (validateState != null) {
-	    if (!validateState.equals(other.validateState)) {
-		return false;
-	    }
-	}
-	return true;
-    }
-
-    //
-    // methods from StateHolder
-    //
-    
-    public Object saveState(FacesContext context) {
-	return validateState;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-	validateState = (String) state;
-    }
-
-    public boolean isTransient() { return false;
-    }
-
-    public void setTransient(boolean newT) {}
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestValueChangeListener.java b/jsf-api/src/test/java/javax/faces/component/TestValueChangeListener.java
deleted file mode 100644
index f0fff9a..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestValueChangeListener.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.context.FacesContext;
-
-/**
- * <p>Test {@link ValueChangeListener} implementation.</p>
- */
-
-public class TestValueChangeListener implements ValueChangeListener, StateHolder {
-
-    // ------------------------------------------------------------ Constructors
-
-    /**
-     *
-     * Called from state system.
-     */
-    public TestValueChangeListener() {
-    }
-
-
-    public TestValueChangeListener(String id) {
-        this.id = id;
-    }
-
-    private String id = null;
-
-
-    // ----------------------------------------------------------- Pubic Methods
-
-
-    public String getId() {
-        return (this.id);
-    }
-
-    public void processValueChange(ValueChangeEvent event) {
-        trace(getId());
-    }
-
-
-    // ---------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-    // this needs to be named differently because other test methods
-    // rely on the standard equal method.
-    public boolean isEqual(Object otherObj) {
-	if (!(otherObj instanceof TestValueChangeListener)) {
-	    return false;
-	}
-	TestValueChangeListener other = (TestValueChangeListener) otherObj;
-	if ((null != id && null == other.id) ||
-	    (null == id && null != other.id)) {
-	    return false;
-	}
-	boolean idsAreEqual = true;
-	if (null != id) {
-	    idsAreEqual = id.equals(other.id);
-	}
-	return idsAreEqual;
-    }
-
-    //
-    // methods from StateHolder
-    //
-
-    public Object saveState(FacesContext context) {
-	return id;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-	id = (String) state;
-    }
-
-    public boolean isTransient() { return false;
-    }
-
-    public void setTransient(boolean newT) {}
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/TestValueChangeListenerWithBackReference.java b/jsf-api/src/test/java/javax/faces/component/TestValueChangeListenerWithBackReference.java
deleted file mode 100644
index c762b63..0000000
--- a/jsf-api/src/test/java/javax/faces/component/TestValueChangeListenerWithBackReference.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.context.FacesContext;
-import javax.faces.TestUtil;
-
-/**
- * <p>Test {@link ValueChangeListener} implementation.</p>
- */
-
-public class TestValueChangeListenerWithBackReference extends TestValueChangeListener implements StateHolder {
-
-    // ------------------------------------------------------------ Constructors
-
-    /**
-     *
-     * Called from state system.
-     */
-    public TestValueChangeListenerWithBackReference() {
-    }
-
-
-    public TestValueChangeListenerWithBackReference(String id, 
-						     UIComponent yourComponent) {
-	super(id);
-	this.yourComponent = yourComponent;
-    }
-
-
-    public TestValueChangeListenerWithBackReference(String id) {
-        super(id);
-    }
-
-    private UIComponent yourComponent = null;
-
-
-    // this needs to be named differently because other test methods
-    // rely on the standard equal method.
-    public boolean isEqual(Object otherObj) {
-	if (!(otherObj instanceof TestValueChangeListenerWithBackReference)) {
-	    return false;
-	}
-	TestValueChangeListenerWithBackReference other = 
-	    (TestValueChangeListenerWithBackReference) otherObj;
-	
-	boolean 
-	    superIsEqual = super.isEqual(otherObj),
-	    yourComponentsIdsAreEqual = false;
-	if (null == yourComponent && null == other.yourComponent) {
-	    yourComponentsIdsAreEqual = true;
-	}
-	else if (null != yourComponent && null != other.yourComponent) {
-	    yourComponentsIdsAreEqual = 
-		TestUtil.equalsWithNulls(yourComponent.getId(),
-					 other.yourComponent.getId());
-	}
-	
-	boolean result = superIsEqual && yourComponentsIdsAreEqual;
-	return result;
-    }
-
-    //
-    // methods from StateHolder
-    //
-
-    public void setComponent(UIComponent yourComponent) {
-	this.yourComponent = yourComponent;
-    }
-
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIColumnTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIColumnTestCase.java
deleted file mode 100644
index 93d96f2..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIColumnTestCase.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UIColumn}.</p>
- */
-
-public class UIColumnTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIColumnTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-
-    public void setUp() {
-        super.setUp();
-        component = new UIColumn();
-        expectedFamily = UIColumn.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = null;
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIColumnTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test attribute-property transparency
-
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UIColumn column = (UIColumn) component;
-
-    }
-
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-
-    // Test a pristine UIColumn instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIColumn column = (UIColumn) component;
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIColumn column = (UIColumn) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIColumn column = (UIColumn) component;
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-
-    protected UIComponent createComponent() {
-        UIComponent component = new UIColumn();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UICommandTestCase.java b/jsf-api/src/test/java/javax/faces/component/UICommandTestCase.java
deleted file mode 100644
index dae7b27..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UICommandTestCase.java
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import com.sun.faces.mock.MockExternalContext;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.context.FacesContext;
-import javax.faces.el.MethodBinding;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.event.PhaseId;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * <p>Unit tests for {@link UICommand}.</p>
- */
-
-public class UICommandTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UICommandTestCase(String name) {
-        super(name);
-    }
-
-    private static Class actionListenerSignature[] = {ActionEvent.class};
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-
-    public void setUp() {
-        super.setUp();
-        component = new UICommand();
-        expectedFamily = UICommand.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = "javax.faces.Button";
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UICommandTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test order of action listener calls with actionListener also
-
-    public void PENDING_FIXME_testActionOrder() throws Exception {
-
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-                FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit =
-                renderKitFactory.getRenderKit(facesContext,
-                        RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        renderKit.addRenderer(UICommand.COMPONENT_FAMILY,
-                "javax.faces.Button", new ButtonRenderer());
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UICommand command = (UICommand) component;
-        MethodBinding binding = facesContext.getApplication().
-                createMethodBinding("#{l3.processAction}",
-                        actionListenerSignature);
-        MethodBinding actionBinding = facesContext.getApplication().
-                createMethodBinding("#{l4.test}", null);
-        command.setId("command");
-        command.addActionListener(new TestCommandActionListener("l1"));
-        command.addActionListener(new TestCommandActionListener("l2"));
-        command.setActionListener(binding);
-        command.setAction(actionBinding);
-        command.setImmediate(true);
-        request.setAttribute("l3", new TestCommandActionListener("l3"));
-
-        // Override the default action listener to test ordering
-        ActionListener oldDefaultActionListener =
-                facesContext.getApplication().getActionListener();
-        facesContext.getApplication().setActionListener(
-                new TestCommandActionListener("14"));
-        Map map = new HashMap();
-        map.put(command.getClientId(facesContext), "");
-        MockExternalContext econtext =
-                (MockExternalContext) facesContext.getExternalContext();
-        econtext.setRequestParameterMap(map);
-        TestCommandActionListener.trace(null);
-        root.processDecodes(facesContext);
-        assertEquals("/l1/l2/l3/14", TestCommandActionListener.trace());
-
-        // Restore the default action listener
-        facesContext.getApplication().setActionListener(
-                oldDefaultActionListener);
-    }
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UICommand command = (UICommand) component;
-        Application app = facesContext.getApplication();
-        MethodBinding methodBinding = null;
-
-        assertEquals(command.getValue(),
-                (String) component.getAttributes().get("value"));
-        command.setValue("foo");
-        assertEquals("foo", (String) component.getAttributes().get("value"));
-        command.setValue(null);
-        assertNull((String) component.getAttributes().get("value"));
-        component.getAttributes().put("value", "bar");
-        assertEquals("bar", command.getValue());
-        component.getAttributes().put("value", null);
-        assertNull(command.getValue());
-
-        assertEquals(command.getAction(),
-                (MethodBinding) command.getAttributes().get("action"));
-        command.setAction(methodBinding =
-                app.createMethodBinding("#{foo.bar}", null));
-        assertEquals(methodBinding,
-                (MethodBinding) command.getAttributes().get("action"));
-        command.setAction(null);
-        assertNull((MethodBinding) command.getAttributes().get("action"));
-        methodBinding = app.createMethodBinding("#{bar.baz}", null);
-        command.getAttributes().put("action", methodBinding);
-        assertEquals(methodBinding, command.getAction());
-        command.getAttributes().put("action", null);
-        assertNull(command.getAction());
-
-        assertEquals(command.getActionListener(),
-                (MethodBinding) command.getAttributes().get("actionListener"));
-        methodBinding = app.createMethodBinding("#{foo.yoyo}",
-                actionListenerSignature);
-        command.setActionListener(methodBinding);
-        assertEquals(methodBinding,
-                (MethodBinding) command.getAttributes().get("actionListener"));
-        command.setActionListener(null);
-        assertNull((MethodBinding)
-                command.getAttributes().get("actionListener"));
-        methodBinding = app.createMethodBinding("#{foo.buckaroo}",
-                actionListenerSignature);
-        command.getAttributes().put("actionListener", methodBinding);
-        assertEquals(methodBinding, command.getActionListener());
-        command.getAttributes().put("actionListener", null);
-        assertNull(command.getActionListener());
-
-    }
-
-    // Test event queuing and broadcasting (any phase listeners)
-    public void testEventsGeneric() {
-
-        UICommand command = (UICommand) component;
-        command.setRendererType(null);
-        ActionEvent event = new ActionEvent(command);
-
-        // Register three listeners
-        command.addActionListener
-                (new TestActionListener("AP0"));
-        command.addActionListener
-                (new TestActionListener("AP1"));
-        command.addActionListener
-                (new TestActionListener("AP2"));
-
-        // Fire events and evaluate results
-        TestActionListener.trace(null);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(command);
-        command.queueEvent(event);
-        root.processDecodes(facesContext);
-        root.processValidators(facesContext);
-        root.processApplication(facesContext);
-        assertEquals("/AP0 at INVOKE_APPLICATION 5/AP1 at INVOKE_APPLICATION 5/AP2 at INVOKE_APPLICATION 5",
-                TestActionListener.trace());
-
-    }
-
-    // Test event queuing and broadcasting (mixed phase listeners)
-    public void testEventsMixed() {
-
-        UICommand command = (UICommand) component;
-        command.setRendererType(null);
-        ActionEvent event = new ActionEvent(command);
-
-        // Register three listeners
-        command.addActionListener
-                (new TestActionListener("ARV"));
-        command.addActionListener
-                (new TestActionListener("PV"));
-        command.addActionListener
-                (new TestActionListener("AP"));
-
-        // Fire events and evaluate results
-        TestActionListener.trace(null);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(command);
-        command.queueEvent(event);
-        root.processDecodes(facesContext);
-        root.processValidators(facesContext);
-        root.processApplication(facesContext);
-        assertEquals("/ARV at INVOKE_APPLICATION 5/PV at INVOKE_APPLICATION 5/AP at INVOKE_APPLICATION 5",
-                TestActionListener.trace());
-
-    }
-
-    // Test event queuing and broadcasting (mixed phase listeners), with
-    // immediate set.
-    public void testEventsMixedImmediate() {
-
-        UICommand command = (UICommand) component;
-        command.setImmediate(true);
-        command.setRendererType(null);
-        ActionEvent event = new ActionEvent(command);
-
-        // Register three listeners
-        command.addActionListener
-                (new TestActionListener("ARV"));
-        command.addActionListener
-                (new TestActionListener("PV"));
-        command.addActionListener
-                (new TestActionListener("AP"));
-
-        // Fire events and evaluate results
-        TestActionListener.trace(null);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(command);
-        command.queueEvent(event);
-        root.processDecodes(facesContext);
-        root.processValidators(facesContext);
-        root.processApplication(facesContext);
-        assertEquals("/ARV at APPLY_REQUEST_VALUES 2/PV at APPLY_REQUEST_VALUES 2/AP at APPLY_REQUEST_VALUES 2",
-                TestActionListener.trace());
-
-    }
-
-
-    // Test listener registration and deregistration
-    public void testListeners() {
-
-        TestCommand command = new TestCommand();
-        TestActionListener listener = null;
-
-        command.addActionListener
-                (new TestActionListener("ARV0"));
-        command.addActionListener
-                (new TestActionListener("ARV1"));
-        command.addActionListener
-                (new TestActionListener("PV0"));
-        command.addActionListener
-                (new TestActionListener("PV1"));
-        command.addActionListener
-                (new TestActionListener("PV2"));
-
-        ActionListener listeners[] = command.getActionListeners();
-        assertEquals(5, listeners.length);
-        command.removeActionListener(listeners[2]);
-        listeners = command.getActionListeners();
-        assertEquals(4, listeners.length);
-
-    }
-
-    // Test empty listener list
-    public void testEmptyListeners() {
-
-        TestCommand command = new TestCommand();
-        TestActionListener listener = null;
-
-        //No listeners added, should be empty
-        ActionListener listeners[] = command.getActionListeners();
-        assertEquals(0, listeners.length);
-
-    }
-
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-    // Test a pristine UICommand instance
-    public void testPristine() {
-
-        super.testPristine();
-        UICommand command = (UICommand) component;
-
-        assertNull("no value", command.getValue());
-        assertNull("no action", command.getAction());
-        assertNull("no actionListener", command.getActionListener());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UICommand command = (UICommand) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UICommand command = (UICommand) component;
-        Application app = facesContext.getApplication();
-
-        // value
-        command.setValue("foo.bar");
-        assertEquals("expected value",
-                "foo.bar", command.getValue());
-        command.setValue(null);
-        assertNull("erased value", command.getValue());
-
-        MethodBinding methodBinding = null;
-
-        command.setAction(methodBinding =
-                app.createMethodBinding("#{foo.bar}", null));
-        assertEquals(methodBinding, command.getAction());
-        command.setAction(null);
-        assertNull(command.getAction());
-
-        methodBinding = app.createMethodBinding("#{foo.yoyo}",
-                actionListenerSignature);
-        command.setActionListener(methodBinding);
-        assertEquals(methodBinding, command.getActionListener());
-        command.setActionListener(null);
-        assertNull(command.getActionListener());
-
-    }
-
-    public void testNestedCommands() {
-        UIViewRoot root = new UIViewRoot();
-        UICommand c1 = new UICommand();
-        UICommand c2 = new UICommand();
-        root.getChildren().add(c1);
-        c2.setImmediate(true);
-        c1.getChildren().add(c2);
-        ActionEvent ae = new ActionEvent(c2);
-        c2.queueEvent(ae);
-        assertTrue(ae.getPhaseId().equals(PhaseId.APPLY_REQUEST_VALUES));
-
-        root = new UIViewRoot();
-        c1 = new UICommand();
-        c2 = new UICommand();
-        root.getChildren().add(c1);
-        c1.setImmediate(true);
-        c2.setImmediate(false);
-        c1.getChildren().add(c2);
-        ae = new ActionEvent(c2);
-        c2.queueEvent(ae);
-        assertTrue(ae.getPhaseId().equals(PhaseId.INVOKE_APPLICATION));
-    }
-
-    public void PENDING_FIXME_testValueBindings() {
-
-        super.testValueBindings();
-        UICommand test = (UICommand) component;
-
-        // "immediate" property
-        request.setAttribute("foo", Boolean.FALSE);
-        boolean initial = test.isImmediate();
-        if (initial) {
-            request.setAttribute("foo", Boolean.FALSE);
-        } else {
-            request.setAttribute("foo", Boolean.TRUE);
-        }
-        test.setValueBinding("immediate", application.createValueBinding("#{foo}"));
-        assertEquals(!initial, test.isImmediate());
-        test.setImmediate(initial);
-        assertEquals(initial, test.isImmediate());
-        assertNotNull(test.getValueBinding("immediate"));
-
-        // "value" property
-        request.setAttribute("foo", "bar");
-        test.setValue(null);
-        assertNull(test.getValue());
-        test.setValueBinding("value", application.createValueBinding("#{foo}"));
-        assertNotNull(test.getValueBinding("value"));
-        assertEquals("bar", test.getValue());
-        test.setValue("baz");
-        assertEquals("baz", test.getValue());
-        test.setValue(null);
-        assertEquals("bar", test.getValue());
-        test.setValueBinding("value", null);
-        assertNull(test.getValueBinding("value"));
-        assertNull(test.getValue());
-
-    }
-
-    public void testGetActionListeners() throws Exception {
-        UICommand command = (UICommand) component;
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(command);
-
-        TestActionListener
-                ta1 = new TestActionListener("ta1"),
-                ta2 = new TestActionListener("ta2");
-
-        command.addActionListener(ta1);
-        command.addActionListener(ta2);
-        ActionListener[] listeners = (ActionListener[])
-                command.getActionListeners();
-        assertEquals(2, listeners.length);
-        TestActionListener[] taListeners = (TestActionListener[])
-                command.getFacesListeners(TestActionListener.class);
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Check that the properties on the specified components are equal
-
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-        super.checkProperties(comp1, comp2);
-        UICommand c1 = (UICommand) comp1;
-        UICommand c2 = (UICommand) comp2;
-        assertEquals(c1.getAction(), c2.getAction());
-        assertEquals(c1.getActionListener(), c2.getActionListener());
-    }
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UICommand();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-        super.populateComponent(component);
-        UICommand c = (UICommand) component;
-        Application app = facesContext.getApplication();
-        MethodBinding methodBinding = null;
-
-        c.setAction(methodBinding = app.createMethodBinding("#{foo.bar}",
-                null));
-        c.setActionListener(methodBinding =
-                app.createMethodBinding("#{baz.bop}",
-                        actionListenerSignature));
-    }
-
-
-    protected boolean listenersAreEqual(FacesContext context,
-                                        UICommand comp1,
-                                        UICommand comp2) {
-        ActionListener[] list1 = comp1.getActionListeners();
-        ActionListener[] list2 = comp2.getActionListeners();
-        // make sure they're either both null or both non-null
-        if ((null == list1 && null != list2) ||
-                (null != list1 && null == list2)) {
-            return false;
-        }
-        if (null == list1) {
-            return true;
-        }
-        int j = 0, outerLen = list1.length;
-        boolean result = true;
-        if (outerLen != list2.length) {
-            return false;
-        }
-        for (j = 0; j < outerLen; j++) {
-            result = list1[j].equals(list2[j]);
-            if (!result) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    // --------------------------------------------------------- Private Classes
-
-
-    // "Button" Renderer
-
-    class ButtonRenderer extends Renderer {
-
-        public void decode(FacesContext context, UIComponent component) {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-            if (!(component instanceof ActionSource)) {
-                return;
-            }
-            String clientId = component.getClientId(context);
-            Map params = context.getExternalContext().getRequestParameterMap();
-            if (params.containsKey(clientId)) {
-                component.queueEvent(new ActionEvent(component));
-            }
-
-        }
-
-        public void encodeBegin(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-        public void encodeChildren(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-        public void encodeEnd(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIComponentBaseAttachedStateTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIComponentBaseAttachedStateTestCase.java
deleted file mode 100644
index 1c59eaa..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIComponentBaseAttachedStateTestCase.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import com.sun.faces.mock.MockFacesContext;
-import java.util.HashMap;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import javax.faces.context.FacesContext;
-import javax.faces.event.FacesListener;
-import javax.faces.event.ValueChangeListener;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
-/**
- * @author edburns
- */
-public class UIComponentBaseAttachedStateTestCase extends TestCase {
-
-    private UIComponentBase component;
-    private MockFacesContext facesContext = null;
-
-
-    public UIComponentBaseAttachedStateTestCase(String arg0) {
-        super(arg0);
-    }
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIComponentBaseAttachedStateTestCase.class));
-    }
-
-    public void setUp() throws Exception {
-        super.setUp();
-        component = new UIOutput();
-        facesContext = new MockFacesContext();
-    }
-
-    public void testAttachedObjectsSet() throws Exception {
-        Set<ValueChangeListener> returnedAttachedObjects = null,
-                attachedObjects = new HashSet<ValueChangeListener>();
-        ValueChangeListener toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        Object result = UIComponentBase.saveAttachedState(facesContext, attachedObjects);
-        returnedAttachedObjects = (Set<ValueChangeListener>)
-                UIComponentBase.restoreAttachedState(facesContext, result);
-
-    }
-
-    public void testAttachedObjectsStack() throws Exception {
-        Stack<ValueChangeListener> returnedAttachedObjects = null,
-                attachedObjects = new Stack<ValueChangeListener>();
-        ValueChangeListener toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        Object result = UIComponentBase.saveAttachedState(facesContext, attachedObjects);
-        returnedAttachedObjects = (Stack<ValueChangeListener>)
-                UIComponentBase.restoreAttachedState(facesContext, result);
-    }
-
-    public void testAttachedObjectsMap() throws Exception {
-        Map<String, ValueChangeListener> returnedAttachedObjects = null,
-                attachedObjects = new HashMap<String, ValueChangeListener>();
-        ValueChangeListener toAdd = new TestValueChangeListener();
-        attachedObjects.put("one",toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.put("two", toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.put("three", toAdd);
-        Object result = UIComponentBase.saveAttachedState(facesContext, attachedObjects);
-        returnedAttachedObjects = (Map<String, ValueChangeListener>)
-                UIComponentBase.restoreAttachedState(facesContext, result);
-    }
-
-    // Regression test for bug #907
-    public void testAttachedObjectsCount() throws Exception {
-        Set<ValueChangeListener> returnedAttachedObjects = null,
-                attachedObjects = new HashSet<ValueChangeListener>();
-        ValueChangeListener toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        toAdd = new TestValueChangeListener();
-        attachedObjects.add(toAdd);
-        Object result = UIComponentBase.saveAttachedState(facesContext, attachedObjects);
-        returnedAttachedObjects = (Set<ValueChangeListener>)
-                UIComponentBase.restoreAttachedState(facesContext, result);
-        int firstSize = returnedAttachedObjects.size();
-        returnedAttachedObjects = (Set<ValueChangeListener>)
-                UIComponentBase.restoreAttachedState(facesContext, result);
-        int secondSize = returnedAttachedObjects.size();
-        assertEquals(firstSize, secondSize);
-    }
-
-
-    public void testFacesListenerState() {
-
-        UIComponent component = new UIOutput();
-        TestFacesListener listener = new TestFacesListener();
-        listener.setValue("initial");
-        component.addFacesListener(listener);
-        component.markInitialState();
-        assertTrue(component.initialStateMarked());
-        assertTrue(listener.initialStateMarked());
-
-        Object state = component.saveState(facesContext);
-        assertNull(state);
-
-        component = new UIOutput();
-        listener = new TestFacesListener();
-        component.addFacesListener(listener);
-        listener.setValue("initial");
-        component.markInitialState();
-        listener.setValue("newvalue");
-        state = component.saveState(facesContext);
-        assertNotNull(state);
-
-        // verify that state is applied to existing Listener instances.
-        component = new UIOutput();
-        listener = new TestFacesListener();
-        component.addFacesListener(listener);
-        listener.setValue("newinitial");
-        component.restoreState(facesContext, state);
-        assertTrue("newvalue".equals(listener.getValue()));
-
-        // verify listeners are overwritten when using full state saving
-        component = new UIOutput();
-        listener = new TestFacesListener();
-        component.addFacesListener(listener);
-        listener.setValue("initial");
-        state = component.saveState(facesContext);
-        assertNotNull(state);
-        listener.setValue("postsave");
-
-        component.restoreState(facesContext, state);
-        TestFacesListener l = (TestFacesListener) component.getFacesListeners(TestFacesListener.class)[0];
-        assertTrue(l != listener);
-        assertTrue("initial".equals(l.getValue()));
-
-    }
-
-    public void testTransientListenersState() {
-
-        UIComponent output = new UIOutput();
-        output.markInitialState();
-        TestFacesListener l1 = new TestFacesListener();
-        TestFacesListener l2 = new TestFacesListener();
-        TestFacesListener l3 = new TestFacesListener();
-        TestFacesListener l4 = new TestFacesListener();
-        l1.setValue("l1");
-        l2.setValue("l2");
-        l3.setValue("l3");
-        l4.setValue("l4");
-        l2.setTransient(true);
-        l4.setTransient(true);
-
-        output.addFacesListener(l1);
-        output.addFacesListener(l2);
-        output.addFacesListener(l3);
-        output.addFacesListener(l4);
-
-        Object state = output.saveState(facesContext);
-        assertNotNull(state);
-        output = new UIOutput();
-        output.restoreState(facesContext, state);
-        FacesListener[] listeners = output.getFacesListeners(TestFacesListener.class);
-        assertTrue(listeners.length == 2);
-        assertEquals("l1", ((TestFacesListener) listeners[0]).getValue());
-        assertEquals("l3", ((TestFacesListener) listeners[1]).getValue());
-
-        output = new UIOutput();
-        output.markInitialState();
-        output.addFacesListener(l2);
-        state = output.saveState(facesContext);
-        assertNotNull(state);
-        output = new UIOutput();
-        output.restoreState(facesContext, state);
-        listeners = output.getFacesListeners(TestFacesListener.class);
-        assertTrue(listeners.length == 0);
-        
-    }
-
-
-    public void testTransientListenersState2() {
-
-        UIComponent output = new UIOutput();
-        TestFacesListener l1 = new TestFacesListener();
-        TestFacesListener l2 = new TestFacesListener();
-        TestFacesListener l3 = new TestFacesListener();
-        TestFacesListener l4 = new TestFacesListener();
-        l1.setValue("l1");
-        l2.setValue("l2");
-        l3.setValue("l3");
-        l4.setValue("l4");
-        l2.setTransient(true);
-        l4.setTransient(true);
-
-        output.addFacesListener(l1);
-        output.addFacesListener(l2);
-        output.addFacesListener(l3);
-        output.addFacesListener(l4);
-
-        Object state = output.saveState(facesContext);
-        assertNotNull(state);
-        output = new UIOutput();
-        output.restoreState(facesContext, state);
-        FacesListener[] listeners = output.getFacesListeners(TestFacesListener.class);
-        assertTrue(listeners.length == 2);
-        assertEquals("l1", ((TestFacesListener) listeners[0]).getValue());
-        assertEquals("l3", ((TestFacesListener) listeners[1]).getValue());
-
-        output = new UIOutput();
-        output.addFacesListener(l2);
-        state = output.saveState(facesContext);
-        assertNotNull(state);
-        output = new UIOutput();
-        output.restoreState(facesContext, state);
-        listeners = output.getFacesListeners(TestFacesListener.class);
-        assertTrue(listeners.length == 0);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    public static final class TestFacesListener implements FacesListener, PartialStateHolder {
-
-        private boolean initialState;
-        private String value;
-        private boolean trans;
-
-        public String getValue() {
-            return value;
-        }
-
-        public void setValue(String value) {
-            clearInitialState();
-            this.value = value;
-        }
-
-        public void markInitialState() {
-            initialState = true;
-        }
-
-        public boolean initialStateMarked() {
-            return initialState;
-        }
-
-        public void clearInitialState() {
-            initialState = false;
-        }
-
-        public Object saveState(FacesContext context) {
-
-            return ((!initialState) ? new Object[]{value} : null);
-
-        }
-
-        public void restoreState(FacesContext context, Object state) {
-
-            if (state != null) {
-                Object[] values = (Object[]) state;
-                value = (String) values[0];
-            }
-
-        }
-
-        public boolean isTransient() {
-            return trans;
-        }
-
-        public void setTransient(boolean trans) {
-            this.trans = trans;
-        }
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIComponentBaseBehaviorTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIComponentBaseBehaviorTestCase.java
deleted file mode 100644
index bd9ab9a..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIComponentBaseBehaviorTestCase.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorContext;
-import javax.faces.component.behavior.ClientBehaviorHint;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.event.BehaviorEvent;
-import java.io.Serializable;
-import java.util.*;
-
-/**
- * <p class="changed_added_2_0">
- * Test case for component behaviors.
- * </p>
- *
- * @since 2.0
- */
-public class UIComponentBaseBehaviorTestCase extends UIComponentTestCase {
-
-    private static final String ONTEST = "ontest";
-    private static final String ONCLICK = "onclick";
-    private static final String ONCHANGE = "onchange";
-    private static final String TEST_FAMILY = "javax.faces.Test";
-    private static final Collection<String> EVENTS = set(ONTEST, ONCLICK, ONCHANGE);
-
-    /**
-     * @author asmirnov
-     */
-    public static class BehaviorComponent extends UIComponentBase implements ClientBehaviorHolder {
-
-
-        /* (non-Javadoc)
-           * @see javax.faces.component.UIComponent#getFamily()
-           */
-        @Override
-        public String getFamily() {
-            return TEST_FAMILY;
-        }
-
-        @Override
-        public Collection<String> getEventNames() {
-            return EVENTS;
-        }
-
-        @Override
-        public String getDefaultEventName() {
-            return ONTEST;
-        }
-
-    }
-
-    @SuppressWarnings("serial")
-    public static class TestBehavior implements ClientBehavior, Serializable {
-
-        private static final Set<ClientBehaviorHint> HINTS =
-                Collections.unmodifiableSet(EnumSet.of(ClientBehaviorHint.SUBMITTING));
-
-        private static int sequence = 0;
-
-        private final int id;
-
-        public TestBehavior() {
-            id = sequence++;
-        }
-
-        public String getRendererType() {
-            return TEST_FAMILY;
-        }
-
-        public Set<ClientBehaviorHint> getHints() {
-            return HINTS;
-        }
-
-        public void broadcast(BehaviorEvent event) {
-        }
-
-        public void decode(FacesContext context, UIComponent component) {
-        }
-
-        public String getScript(ClientBehaviorContext bContext) {
-            return null;
-        }
-
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + id;
-            return result;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj)
-                return true;
-            if (obj == null)
-                return false;
-            if (getClass() != obj.getClass())
-                return false;
-            TestBehavior other = (TestBehavior) obj;
-            if (id != other.id)
-                return false;
-            return true;
-        }
-
-        @Override
-        public String toString() {
-            return "Behavior #" + id;
-        }
-
-    }
-
-    public UIComponentBaseBehaviorTestCase(String name) {
-        super(name);
-    }
-
-    /* (non-Javadoc)
-      * @see javax.faces.component.UIComponentTestCase#setUp()
-      */
-    public void setUp() {
-        super.setUp();
-    }
-
-    /* (non-Javadoc)
-      * @see javax.faces.component.UIComponentTestCase#tearDown()
-      */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    /**
-     * Test method for {@link javax.faces.component.UIComponentBase#saveState(javax.faces.context.FacesContext)}.
-     */
-    public void testSaveState() {
-        BehaviorComponent comp = new BehaviorComponent();
-        // Cast component to the interface, to be sure about method definition.
-        ClientBehaviorHolder holder = (ClientBehaviorHolder) comp;
-        TestBehavior behavior = new TestBehavior();
-        holder.addClientBehavior(ONCLICK, behavior);
-        TestBehavior behavior2 = new TestBehavior();
-        holder.addClientBehavior(ONCLICK, behavior2);
-        TestBehavior behavior3 = new TestBehavior();
-        holder.addClientBehavior(ONCHANGE, behavior3);
-        Object state = comp.saveState(facesContext);
-        BehaviorComponent restoredComp = new BehaviorComponent();
-        restoredComp.restoreState(facesContext, state);
-        Map<String, List<ClientBehavior>> behaviors = restoredComp.getClientBehaviors();
-        assertFalse(behaviors.isEmpty());
-        assertTrue(behaviors.containsKey(ONCLICK));
-        assertTrue(behaviors.containsKey(ONCHANGE));
-        assertFalse(behaviors.containsKey(ONTEST));
-        assertEquals(2, behaviors.entrySet().size());
-        assertEquals(2, behaviors.keySet().size());
-        assertEquals(2, behaviors.values().size());
-        assertEquals(2, behaviors.get(ONCLICK).size());
-        assertEquals(1, behaviors.get(ONCHANGE).size());
-        assertEquals(behavior3, behaviors.get(ONCHANGE).get(0));
-        assertEquals(behavior, behaviors.get(ONCLICK).get(0));
-        assertEquals(behavior2, behaviors.get(ONCLICK).get(1));
-
-    }
-
-    public void testNonClientBehaviorHolder() throws Exception {
-        UIInput input = new UIInput();
-        try {
-            input.addClientBehavior(ONTEST, new TestBehavior());
-        } catch (IllegalStateException e) {
-            return;
-        }
-        assertFalse(true);
-    }
-
-    /**
-     * Test method for {@link javax.faces.component.UIComponentBase#addClientBehavior(java.lang.String, javax.faces.component.behavior.Behavior)}.
-     */
-    public void testAddBehavior() {
-        BehaviorComponent comp = new BehaviorComponent();
-        // Cast component to the interface, to be sure about method definition.
-        ClientBehaviorHolder holder = (ClientBehaviorHolder) comp;
-        holder.addClientBehavior(ONCLICK, new TestBehavior());
-        holder.addClientBehavior(ONCLICK, new TestBehavior());
-        holder.addClientBehavior(ONCHANGE, new TestBehavior());
-        try {
-            holder.addClientBehavior("foo", new TestBehavior());
-        } catch (IllegalArgumentException e) {
-            return;
-        }
-        assertFalse(true);
-    }
-
-    /**
-     * Test method for {@link javax.faces.component.UIComponentBase#getEventNames()}.
-     */
-    public void testGetEventNames() {
-        BehaviorComponent comp = new BehaviorComponent();
-        ClientBehaviorHolder holder = (ClientBehaviorHolder) comp;
-        assertEquals(EVENTS, holder.getEventNames());
-    }
-
-    /**
-     * Test method for {@link javax.faces.component.UIComponentBase#getClientBehaviors()}.
-     */
-    public void testGetBehaviors() {
-        BehaviorComponent comp = new BehaviorComponent();
-        // Cast component to the interface, to be sure about method definition.
-        ClientBehaviorHolder holder = (ClientBehaviorHolder) comp;
-        Map<String, List<ClientBehavior>> behaviors = holder.getClientBehaviors();
-        assertTrue(behaviors.isEmpty());
-        assertFalse(behaviors.containsKey(ONCLICK));
-        assertFalse(behaviors.containsValue(new TestBehavior()));
-        assertEquals(0, behaviors.entrySet().size());
-        holder.addClientBehavior(ONCLICK, new TestBehavior());
-        holder.addClientBehavior(ONCLICK, new TestBehavior());
-        holder.addClientBehavior(ONCHANGE, new TestBehavior());
-        assertFalse(behaviors.isEmpty());
-        assertTrue(behaviors.containsKey(ONCLICK));
-        assertTrue(behaviors.containsKey(ONCHANGE));
-        assertFalse(behaviors.containsKey(ONTEST));
-        assertEquals(2, behaviors.entrySet().size());
-        assertEquals(2, behaviors.keySet().size());
-        assertEquals(2, behaviors.values().size());
-        assertEquals(2, behaviors.get(ONCLICK).size());
-        assertEquals(1, behaviors.get(ONCHANGE).size());
-    }
-
-    /**
-     * Test method for {@link javax.faces.component.UIComponentBase#getDefaultEventName()}.
-     */
-    public void testGetDefaultEventName() {
-        BehaviorComponent comp = new BehaviorComponent();
-        // Cast component to the interface, to be sure about method definition.
-        ClientBehaviorHolder holder = (ClientBehaviorHolder) comp;
-        assertEquals(ONTEST, holder.getDefaultEventName());
-    }
-
-    public static <T> Set<T> set(T... ts) {
-        return new HashSet<T>(Arrays.asList(ts));
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIComponentBaseTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIComponentBaseTestCase.java
deleted file mode 100644
index 260d848..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIComponentBaseTestCase.java
+++ /dev/null
@@ -1,1872 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import com.sun.faces.mock.MockValueBinding;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.*;
-import javax.faces.validator.ValidatorException;
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.*;
-
-
-/**
- * <p>Base unit tests for all {@link UIComponentBase} subclasses.</p>
- */
-
-public class UIComponentBaseTestCase extends UIComponentTestCase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // Mock object instances for our tests
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIComponentBaseTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-
-    public void setUp() {
-
-        // Set up the component under test
-        super.setUp();
-        component = new TestComponent(expectedId);
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIComponentBaseTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        externalContext.setRequestParameterMap(null);
-
-        super.tearDown();
-        application = null;
-        config = null;
-        externalContext = null;
-        facesContext = null;
-        lifecycle = null;
-        request = null;
-        response = null;
-        servletContext = null;
-        session = null;
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test lifecycle management methods
-
-    public void testLifecycleManagement() {
-
-        checkLifecycleParentRendered();
-        checkLifecycleParentUnrendered();
-        checkLifecycleSelfRendered();
-        checkLifecycleSelfUnrendered();
-
-
-    }
-
-
-    public void testComponentToFromEL() {
-
-        final String key = UIComponent.CURRENT_COMPONENT;
-        TestComponent c = new TestComponent();
-        facesContext.getAttributes().clear();
-        assertNull(facesContext.getAttributes().get(key));
-        c.pushComponentToEL(facesContext, null);
-        assertTrue(facesContext.getAttributes().get(key) == c);
-        c.popComponentFromEL(facesContext);
-        assertNull(facesContext.getAttributes().get(key));
-
-        // ensure a push/pop seqeunce restores the previous component
-        TestComponent c1 = new TestComponent();
-        facesContext.getAttributes().put(key, c1);
-        c.pushComponentToEL(facesContext, null);
-        assertTrue(facesContext.getAttributes().get(key) == c);
-        c.popComponentFromEL(facesContext);
-        assertTrue(facesContext.getAttributes().get(key) == c1);
-
-    }
-
-
-    public void testComponentToFromEL2() throws Exception {
-
-        final String key = UIComponent.CURRENT_COMPONENT;
-        final FacesContext ctx = facesContext;
-        TestComponent c = new TestComponent();
-        TestComponent c2 = new TestComponent();
-        UIComponent eeo = new UIComponentOverrideEncodeEnd();
-        TestComponent c3 = new TestComponent();
-        UIComponent ebo = new UIComponentOverrideEncodeBegin();
-
-        c.encodeBegin(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c);
-        c2.encodeBegin(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c2);
-        c2.encodeEnd(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c);
-        c.encodeEnd(ctx);
-        assertNull(UIComponent.getCurrentComponent(ctx));
-
-        // sanity check for the case where a component overrides
-        // encodeBegin() without calling super or pushComponentToEL
-        c.encodeBegin(ctx);
-        c2.encodeBegin(ctx);
-        ebo.encodeBegin(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c2);
-        ebo.encodeEnd(ctx); // if the component wasn't pushed
-        // it shouldn't be popped.
-        assertEquals(UIComponent.getCurrentComponent(ctx), c2);
-        c2.encodeEnd(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c);
-        c.encodeEnd(ctx);
-        assertNull(UIComponent.getCurrentComponent(ctx));
-
-
-        // sanity check for the case where a component overrides
-        // encodeEnd() without calling super or popComponentFromEL
-        c.encodeBegin(ctx);
-        c2.encodeBegin(ctx);
-        eeo.encodeBegin(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), eeo);
-        eeo.encodeEnd(ctx);
-        // this is ugly.  Because of a component not doing calling
-        // super() or popComponentFromEL, c2 won't be visible
-        // as the current component.
-        assertEquals(UIComponent.getCurrentComponent(ctx), eeo);
-        c2.encodeEnd(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c);
-        c.encodeEnd(ctx);
-        assertNull(UIComponent.getCurrentComponent(ctx));
-
-        UIComponent eeo2 = new UIComponentOverrideEncodeEnd();
-        c.encodeBegin(ctx);
-        c2.encodeBegin(ctx);
-        eeo.encodeBegin(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), eeo);
-        c3.encodeBegin(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c3);
-        eeo2.encodeBegin(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), eeo2);
-        eeo2.encodeEnd(ctx);
-        // this is ugly.
-        assertEquals(UIComponent.getCurrentComponent(ctx), eeo2);
-        c3.encodeEnd(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), eeo);
-        eeo.encodeEnd(ctx);
-        // this is ugly.
-        assertEquals(UIComponent.getCurrentComponent(ctx), eeo);
-        c2.encodeEnd(ctx);
-        assertEquals(UIComponent.getCurrentComponent(ctx), c);
-        c.encodeEnd(ctx);
-        assertNull(UIComponent.getCurrentComponent(ctx));
-
-    }
-
-    public void testEncodeChildren() throws Exception {
-        TestComponent.trace(null);
-        UIComponent comp1 = new TestComponent("one");
-        UIComponent comp2 = new TestComponent("two");
-        UIComponent comp3 = new TestComponent("three");
-        UIComponent comp4 = new TestComponent("four");
-
-        comp1.getChildren().add(comp2);
-        comp1.getChildren().add(comp3);
-        comp1.getChildren().add(comp4);
-
-        comp1.encodeChildren(facesContext);
-        System.out.println("Actual:   " + TestComponent.trace());
-        System.out.println("Expected: " + "/eC-one/eB-two/eE-two/eB-three/eE-three/eB-four/eE-four");
-        assertEquals("/eC-one/eB-two/eE-two/eB-three/eE-three/eB-four/eE-four", TestComponent.trace());
-
-    }
-
-
-    // Test recursive adding and removing child trees with ids
-    public void testChildrenRecursive() {
-
-        // Create the components we will need
-        UIComponent testComponent = new TestComponent();
-        UIComponent child1 = new TestComponent("child1");
-        UIComponent child2 = new TestComponent("child2");
-        UIComponent child3 = new TestComponent("child3");
-
-        // Prepare ancestry tree before adding to base component
-        child1.getChildren().add(child2);
-        child2.getChildren().add(child3);
-
-        // Verify that no child ids are visible yet
-        assertNull(testComponent.findComponent("child1"));
-        assertNull(testComponent.findComponent("child2"));
-        assertNull(testComponent.findComponent("child3"));
-
-        // Add the entire tree
-        testComponent.getChildren().add(child1);
-
-        // Verify that all named children get added
-        assertEquals(child1, testComponent.findComponent("child1"));
-        assertEquals(child2, testComponent.findComponent("child2"));
-        assertEquals(child3, testComponent.findComponent("child3"));
-
-        // Remove the entire tree
-        testComponent.getChildren().remove(child1);
-
-        // Verify that child ids are no longer visible
-        assertNull(testComponent.findComponent("child1"));
-        assertNull(testComponent.findComponent("child2"));
-        assertNull(testComponent.findComponent("child3"));
-
-    }
-
-    public void testChildrenAndFacetsWithNullGetParent() throws Exception {
-        TestComponent child = new TestComponent() {
-            public UIComponent getParent() {
-                return null;
-            }
-        };
-        component.getChildren().add(child);
-        assertNull(component.getChildren().get(0).getParent());
-        TestComponent facet = new TestComponent() {
-            public UIComponent getParent() {
-                return null;
-            }
-        };
-        component.getFacets().put("nullParent", facet);
-        assertNull(component.getFacets().get("nullParent").getParent());
-    }
-
-
-    // Test reconnecting a child or facet to a different component
-    public void testComponentReconnect() {
-
-        UIComponent parent1 = new TestComponent();
-        UIComponent parent2 = new TestComponent();
-
-        // Reconnect an existing child as a child
-        checkChildCount(parent1, 0);
-        checkChildCount(parent2, 0);
-        parent1.getChildren().add(component);
-        checkChildCount(parent1, 1);
-        checkChildCount(parent2, 0);
-        checkChildPresent(parent1, component, 0);
-        parent2.getChildren().add(component);
-        checkChildCount(parent1, 0);
-        checkChildCount(parent2, 1);
-        checkChildPresent(parent2, component, 0);
-        parent2.getChildren().clear();
-        checkChildCount(parent1, 0);
-        checkChildCount(parent2, 0);
-
-        // Reconnect an existing child as a facet
-        checkChildCount(parent1, 0);
-        checkFacetCount(parent2, 0);
-        parent1.getChildren().add(component);
-        checkChildCount(parent1, 1);
-        checkFacetCount(parent2, 0);
-        checkChildPresent(parent1, component, 0);
-        parent2.getFacets().put("facet", component);
-        checkChildCount(parent1, 0);
-        checkFacetCount(parent2, 1);
-        checkFacetPresent(parent2, "facet", component);
-        parent2.getFacets().clear();
-        checkChildCount(parent1, 0);
-        checkFacetCount(parent2, 0);
-
-        // Reconnect an existing facet as a child
-        checkFacetCount(parent1, 0);
-        checkChildCount(parent2, 0);
-        parent1.getFacets().put("facet", component);
-        checkFacetCount(parent1, 1);
-        checkChildCount(parent2, 0);
-        checkFacetPresent(parent1, "facet", component);
-        parent2.getChildren().add(component);
-        checkFacetCount(parent1, 0);
-        checkChildCount(parent2, 1);
-        checkChildPresent(parent2, component, 0);
-        parent2.getChildren().clear();
-        checkFacetCount(parent1, 0);
-        checkChildCount(parent2, 0);
-
-    }
-
-
-    // Test removing components from our naming container.
-    public void testComponentRemoval() {
-
-        UIComponent testComponent = new TestComponent();
-        UIComponent child1 = new TestComponent("child1");
-        UIComponent child2 = new TestComponent("child2");
-        UIComponent child3 = new TestComponent("child3");
-        UIComponent child = null;
-
-        //adding children to naming container
-        testComponent.getChildren().add(child1);
-        testComponent.getChildren().add(child2);
-        testComponent.getChildren().add(child3);
-
-        // make sure children are stored in naming container properly
-        Iterator kidItr = null;
-
-        kidItr = testComponent.getFacetsAndChildren();
-
-        child = (UIComponent) kidItr.next();
-        assertTrue(child.equals(child1));
-
-        child = (UIComponent) kidItr.next();
-        assertTrue(child.equals(child2));
-
-        child = (UIComponent) kidItr.next();
-        assertTrue(child.equals(child3));
-
-        //make sure child is removed from component and naming container
-        //pass in a component to remove method
-        testComponent.getChildren().remove(child1);
-
-        kidItr = testComponent.getFacetsAndChildren();
-
-        child = (UIComponent) kidItr.next();
-        assertTrue(child.equals(child2));
-
-        child = (UIComponent) kidItr.next();
-        assertTrue(child.equals(child3));
-
-        //make sure child is removed from component and naming container
-        //pass an index to remove method
-        testComponent.getChildren().remove(0);
-
-        kidItr = testComponent.getFacetsAndChildren();
-
-        child = (UIComponent) kidItr.next();
-        assertTrue(child.equals(child3));
-
-        //make sure child is removed from component and naming container
-        //remove all children
-        testComponent.getChildren().clear();
-
-        kidItr = testComponent.getFacetsAndChildren();
-        assertTrue(!kidItr.hasNext());
-    }
-
-
-    public void testStateHolder() throws Exception {
-
-        // Set up the components we will need
-        UIComponent parent = new TestComponent("root");
-        UIComponent preSave = createComponent();
-        UIComponent facet1 = createComponent();
-        facet1.setId("facet1");
-        preSave.getFacets().put("facet1 key", facet1);
-        UIComponent facet2 = createComponent();
-        facet2.setId("facet2");
-        preSave.getFacets().put("facet2 key", facet2);
-        parent.getChildren().add(preSave);
-        populateComponent(preSave);
-        UIComponent postSave = createComponent();
-
-        // Save and restore state and compare the results
-        Object state = preSave.saveState(facesContext);
-        assertNotNull(state);
-        postSave.restoreState(facesContext, state);
-        checkComponents(preSave, postSave);
-        checkValueBindings(preSave, postSave);
-        checkComponentListeners(preSave, postSave);
-    }
-
-
-    public void testStateHolder2() throws Exception {
-
-        UIComponent c = new UIComponentListener();
-        c.subscribeToEvent(PostAddToViewEvent.class, (ComponentSystemEventListener) c);
-        Object state = c.saveState(facesContext);
-        c = new UIComponentListener();
-        c.pushComponentToEL(facesContext, c);
-        c.restoreState(facesContext, state);
-        c.popComponentFromEL(facesContext);
-        assertTrue(c.getListenersForEventClass(PostAddToViewEvent.class).size() == 1);
-
-    }
-
-
-    public void testValueBindings() {
-
-        UIComponentBase test = (UIComponentBase) component;
-
-        // generic attributes
-        request.setAttribute("foo", "bar");
-        Object result = test.getAttributes().get("childCount");
-        test.getAttributes().clear();
-        assertNull(test.getAttributes().get("baz"));
-        test.setValueBinding("baz", application.createValueBinding("#{foo}"));
-        assertEquals("bar", test.getAttributes().get("baz"));
-        test.getAttributes().put("baz", "bop");
-        assertEquals("bop", test.getAttributes().get("baz"));
-        test.getAttributes().remove("baz");
-        assertEquals("bar", test.getAttributes().get("baz"));
-        test.setValueBinding("baz", null);
-        assertNull(test.getAttributes().get("baz"));
-
-        // "id" property
-        try {
-            test.setValueBinding("id",
-                    application.createValueBinding("#{foo}"));
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected response
-        }
-
-        // "parent" property
-        try {
-            test.setValueBinding("parent",
-                    application.createValueBinding("#{foo}"));
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected response
-        }
-
-        // "rendered" property
-        request.setAttribute("foo", Boolean.FALSE);
-        boolean initial = test.isRendered();
-        if (initial) {
-            request.setAttribute("foo", Boolean.FALSE);
-        } else {
-            request.setAttribute("foo", Boolean.TRUE);
-        }
-        test.setValueBinding("rendered", application.createValueBinding("#{foo}"));
-        assertEquals(!initial, test.isRendered());
-        test.setRendered(initial);
-        assertEquals(initial, test.isRendered());
-        assertNotNull(test.getValueBinding("rendered"));
-
-        // "rendererType" property
-        request.setAttribute("foo", "bar");
-        test.setRendererType(null);
-        assertNull(test.getRendererType());
-        test.setValueBinding("rendererType", application.createValueBinding("#{foo}"));
-        assertNotNull(test.getValueBinding("rendererType"));
-        assertEquals("bar", test.getRendererType());
-        test.setRendererType("baz");
-        assertEquals("baz", test.getRendererType());
-        test.setRendererType(null);
-        assertEquals("bar", test.getRendererType());
-        test.setValueBinding("rendererType", null);
-        assertNull(test.getValueBinding("rendererType"));
-        assertNull(test.getRendererType());
-
-    }
-
-    public void testValueExpressions() throws Exception {
-
-        UIComponentBase test = (UIComponentBase) component;
-
-        // generic attributes
-        request.setAttribute("foo", "bar");
-        test.getAttributes().clear();
-        assertNull(test.getAttributes().get("baz"));
-        test.setValueExpression("baz", application.getExpressionFactory().createValueExpression(facesContext.getELContext(), "#{foo}", String.class));
-        assertEquals("bar", test.getAttributes().get("baz"));
-        test.getAttributes().put("baz", "bop");
-        assertEquals("bop", test.getAttributes().get("baz"));
-        test.getAttributes().remove("baz");
-        assertEquals("bar", test.getAttributes().get("baz"));
-        test.setValueExpression("baz", null);
-        assertNull(test.getAttributes().get("baz"));
-
-        // "id" property
-        try {
-            test.setValueExpression("id",
-                    application.getExpressionFactory().createValueExpression(facesContext.getELContext(), "#{foo}", String.class));
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected response
-        }
-
-        // "parent" property
-        try {
-            test.setValueExpression("parent",
-                    application.getExpressionFactory().createValueExpression(facesContext.getELContext(), "#{foo}", UIComponent.class));
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected response
-        }
-
-        // "rendered" property
-        request.setAttribute("foo", Boolean.FALSE);
-        test.setValueExpression("rendered", null);
-        boolean initial = test.isRendered();
-        if (initial) {
-            request.setAttribute("foo", Boolean.FALSE);
-        } else {
-            request.setAttribute("foo", Boolean.TRUE);
-        }
-        test.setValueExpression("rendered", application.getExpressionFactory().createValueExpression(facesContext.getELContext(), "#{foo}", Boolean.class));
-        assertEquals(!initial, test.isRendered());
-        test.setRendered(initial);
-        assertEquals(initial, test.isRendered());
-        assertNotNull(test.getValueExpression("rendered"));
-
-        // "rendererType" property
-        request.setAttribute("foo", "bar");
-        test.setRendererType(null);
-        assertNull(test.getRendererType());
-        test.setValueExpression("rendererType", application.getExpressionFactory().createValueExpression(facesContext.getELContext(), "#{foo}", String.class));
-        assertNotNull(test.getValueExpression("rendererType"));
-        assertEquals("bar", test.getRendererType());
-        test.setRendererType("baz");
-        assertEquals("baz", test.getRendererType());
-        test.setRendererType(null);
-        assertEquals("bar", test.getRendererType());
-        test.setValueExpression("rendererType", null);
-        assertNull(test.getValueExpression("rendererType"));
-        assertNull(test.getRendererType());
-
-    }
-
-    public void testValueExpressionValueBindingIdempotency() throws Exception {
-
-        UIComponentBase test = (UIComponentBase) component;
-
-        request.setAttribute("foo", "bar");
-        test.getAttributes().clear();
-        assertNull(test.getAttributes().get("baz"));
-        ValueBinding binding = null;
-        ValueExpression expression = null;
-
-        binding = application.createValueBinding("#{foo}");
-        test.setValueBinding("baz", binding);
-        expression = test.getValueExpression("baz");
-
-        assertEquals(binding.getExpressionString(),
-                expression.getExpressionString());
-        test.setValueBinding("baz", null);
-
-        expression = application.getExpressionFactory().createValueExpression(facesContext.getELContext(), "#{foo}", String.class);
-        test.setValueExpression("baz", expression);
-        binding = test.getValueBinding("baz");
-        assertEquals(binding.getExpressionString(),
-                expression.getExpressionString());
-        test.setValueBinding("baz", null);
-
-    }
-
-    public void testMethodBindingAdapterBaseException() throws Exception {
-        IllegalThreadStateException itse = new IllegalThreadStateException("The root cause!");
-        AbortProcessingException ape = new CustomAbortProcessingException(itse);
-        InvocationTargetException ite1 = new InvocationTargetException(ape);
-        InvocationTargetException ite2 = new InvocationTargetException(ite1);
-        InvocationTargetException ite3 = new InvocationTargetException(ite2);
-        MethodBindingValueChangeListener mbvcl =
-                new MethodBindingValueChangeListener();
-        Throwable expected =
-                mbvcl.getExpectedCause(AbortProcessingException.class, ite3);
-        assertEquals(expected, ape);
-
-        ValidatorException ve = new ValidatorException(new FacesMessage(),
-                itse);
-        ite1 = new InvocationTargetException(ve);
-        ite2 = new InvocationTargetException(ite1);
-        ite3 = new InvocationTargetException(ite2);
-
-        MethodBindingValidator mbv = new MethodBindingValidator();
-        expected =
-                mbv.getExpectedCause(ValidatorException.class, ite3);
-        assertEquals(expected, ve);
-    }
-
-
-    // --------------------------------------------------------- support Methods
-
-
-    // Check that the attributes on the specified components are equal
-
-    protected void checkAttributes(UIComponent comp1, UIComponent comp2) {
-        assertEquals(comp1.getAttributes(), comp2.getAttributes());
-    }
-
-
-    // Check that the specified components are equal
-    protected void checkComponents(UIComponent comp1, UIComponent comp2) {
-        checkAttributes(comp1, comp2);
-        // checkFacets(comp1, comp2); // Not saved and restored by component
-        checkProperties(comp1, comp2);
-    }
-
-
-    // Check lifecycle processing when parent "rendered" property is "true"
-    private void checkLifecycleParentRendered() {
-
-        // Put our component under test in a tree under a UIViewRoot
-        component.getAttributes().clear();
-        component.getChildren().clear();
-        component.getFacets().clear();
-        component.setRendered(true);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        UIPanel panel = new UIPanel();
-        panel.setRendered(true);
-        root.getChildren().add(panel);
-        panel.getChildren().add(component);
-
-        // Establish a view with multiple facets and children
-        UIComponent facet1 = new TestComponent("f1");
-        UIComponent facet2 = new TestComponent("f2");
-        UIComponent facet3 = new TestComponent("f3");
-        component.getFacets().put("f1", facet1);
-        component.getFacets().put("f2", facet2);
-        component.getFacets().put("f3", facet3);
-        checkFacetCount(component, 3);
-        UIComponent child1 = new TestComponent("c1");
-        UIComponent child2 = new TestComponent("c2");
-        UIComponent child3 = new TestComponent("c3");
-        component.getChildren().add(child1);
-        component.getChildren().add(child2);
-        component.getChildren().add(child3);
-        checkChildCount(component, 3);
-        UIComponent child2a = new TestComponent("c2a");
-        UIComponent child2b = new TestComponent("c2b");
-        child2.getChildren().add(child2a);
-        child2.getChildren().add(child2b);
-        checkChildCount(child2, 2);
-
-        // Enqueue a single FacesEvent for each component
-        component.queueEvent(new TestEvent(component));
-        component.queueEvent(new TestEvent(facet1));
-        component.queueEvent(new TestEvent(facet2));
-        component.queueEvent(new TestEvent(facet3));
-        component.queueEvent(new TestEvent(child1));
-        component.queueEvent(new TestEvent(child2));
-        component.queueEvent(new TestEvent(child3));
-        component.queueEvent(new TestEvent(child2a));
-        component.queueEvent(new TestEvent(child2b));
-
-        // Test processDecodes()
-        TestComponent.trace(null);
-        component.processDecodes(facesContext);
-        assertEquals("processDecodes",
-                lifecycleTrace("pD", "d"),
-                TestComponent.trace());
-
-        // Test processValidators()
-        TestComponent.trace(null);
-        component.processValidators(facesContext);
-        assertEquals("processValidators",
-                lifecycleTrace("pV", null),
-                TestComponent.trace());
-
-        // Test processUpdates()
-        TestComponent.trace(null);
-        component.processUpdates(facesContext);
-        assertEquals("processUpdates",
-                lifecycleTrace("pU", null),
-                TestComponent.trace());
-
-    }
-
-
-    // Check lifecycle processing when parent "rendered" property is "false"
-    private void checkLifecycleParentUnrendered() {
-
-        // Put our component under test in a tree under a UIViewRoot
-        component.getAttributes().clear();
-        component.getChildren().clear();
-        component.getFacets().clear();
-        component.setRendered(true);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        UIPanel panel = new UIPanel();
-        panel.setRendered(false);
-        root.getChildren().add(panel);
-        panel.getChildren().add(component);
-
-        // Establish a view with multiple facets and children
-        UIComponent facet1 = new TestComponent("f1");
-        UIComponent facet2 = new TestComponent("f2");
-        UIComponent facet3 = new TestComponent("f3");
-        component.getFacets().put("f1", facet1);
-        component.getFacets().put("f2", facet2);
-        component.getFacets().put("f3", facet3);
-        checkFacetCount(component, 3);
-        UIComponent child1 = new TestComponent("c1");
-        UIComponent child2 = new TestComponent("c2");
-        UIComponent child3 = new TestComponent("c3");
-        component.getChildren().add(child1);
-        component.getChildren().add(child2);
-        component.getChildren().add(child3);
-        checkChildCount(component, 3);
-        UIComponent child2a = new TestComponent("c2a");
-        UIComponent child2b = new TestComponent("c2b");
-        child2.getChildren().add(child2a);
-        child2.getChildren().add(child2b);
-        checkChildCount(child2, 2);
-
-        // Enqueue a single FacesEvent for each component
-        component.queueEvent(new TestEvent(component));
-        component.queueEvent(new TestEvent(facet1));
-        component.queueEvent(new TestEvent(facet2));
-        component.queueEvent(new TestEvent(facet3));
-        component.queueEvent(new TestEvent(child1));
-        component.queueEvent(new TestEvent(child2));
-        component.queueEvent(new TestEvent(child3));
-        component.queueEvent(new TestEvent(child2a));
-        component.queueEvent(new TestEvent(child2b));
-
-        // Test processDecodes()
-        TestComponent.trace(null);
-        component.processDecodes(facesContext);
-        assertEquals("processDecodes",
-                lifecycleTrace("pD", "d"),
-                TestComponent.trace());
-
-        // Test processValidators()
-        TestComponent.trace(null);
-        component.processValidators(facesContext);
-        assertEquals("processValidators",
-                lifecycleTrace("pV", null),
-                TestComponent.trace());
-
-        // Test processUpdates()
-        TestComponent.trace(null);
-        component.processUpdates(facesContext);
-        assertEquals("processUpdates",
-                lifecycleTrace("pU", null),
-                TestComponent.trace());
-
-    }
-
-
-    // Check lifecycle processing when our "rendered" property is "true"
-    private void checkLifecycleSelfRendered() {
-
-        // Put our component under test in a tree under a UIViewRoot
-        component.getAttributes().clear();
-        component.getChildren().clear();
-        component.getFacets().clear();
-        component.setRendered(true);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Establish a view with multiple facets and children
-        UIComponent facet1 = new TestComponent("f1");
-        UIComponent facet2 = new TestComponent("f2");
-        UIComponent facet3 = new TestComponent("f3");
-        component.getFacets().put("f1", facet1);
-        component.getFacets().put("f2", facet2);
-        component.getFacets().put("f3", facet3);
-        checkFacetCount(component, 3);
-        UIComponent child1 = new TestComponent("c1");
-        UIComponent child2 = new TestComponent("c2");
-        UIComponent child3 = new TestComponent("c3");
-        component.getChildren().add(child1);
-        component.getChildren().add(child2);
-        component.getChildren().add(child3);
-        checkChildCount(component, 3);
-        UIComponent child2a = new TestComponent("c2a");
-        UIComponent child2b = new TestComponent("c2b");
-        child2.getChildren().add(child2a);
-        child2.getChildren().add(child2b);
-        checkChildCount(child2, 2);
-
-        // Enqueue a single FacesEvent for each component
-        component.queueEvent(new TestEvent(component));
-        component.queueEvent(new TestEvent(facet1));
-        component.queueEvent(new TestEvent(facet2));
-        component.queueEvent(new TestEvent(facet3));
-        component.queueEvent(new TestEvent(child1));
-        component.queueEvent(new TestEvent(child2));
-        component.queueEvent(new TestEvent(child3));
-        component.queueEvent(new TestEvent(child2a));
-        component.queueEvent(new TestEvent(child2b));
-
-        // Test processDecodes()
-        TestComponent.trace(null);
-        component.processDecodes(facesContext);
-        assertEquals("processDecodes",
-                lifecycleTrace("pD", "d"),
-                TestComponent.trace());
-
-        // Test processValidators()
-        TestComponent.trace(null);
-        component.processValidators(facesContext);
-        assertEquals("processValidators",
-                lifecycleTrace("pV", null),
-                TestComponent.trace());
-
-        // Test processUpdates()
-        TestComponent.trace(null);
-        component.processUpdates(facesContext);
-        assertEquals("processUpdates",
-                lifecycleTrace("pU", null),
-                TestComponent.trace());
-
-    }
-
-
-    // Check lifecycle processing when our "rendered" property is "false"
-    private void checkLifecycleSelfUnrendered() {
-
-        // Put our component under test in a tree under a UIViewRoot
-        component.getAttributes().clear();
-        component.getChildren().clear();
-        component.getFacets().clear();
-        component.setRendered(false);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Establish a view with multiple facets and children
-        UIComponent facet1 = new TestComponent("f1");
-        UIComponent facet2 = new TestComponent("f2");
-        UIComponent facet3 = new TestComponent("f3");
-        component.getFacets().put("f1", facet1);
-        component.getFacets().put("f2", facet2);
-        component.getFacets().put("f3", facet3);
-        checkFacetCount(component, 3);
-        UIComponent child1 = new TestComponent("c1");
-        UIComponent child2 = new TestComponent("c2");
-        UIComponent child3 = new TestComponent("c3");
-        component.getChildren().add(child1);
-        component.getChildren().add(child2);
-        component.getChildren().add(child3);
-        checkChildCount(component, 3);
-        UIComponent child2a = new TestComponent("c2a");
-        UIComponent child2b = new TestComponent("c2b");
-        child2.getChildren().add(child2a);
-        child2.getChildren().add(child2b);
-        checkChildCount(child2, 2);
-
-        // Enqueue a single FacesEvent for each component
-        component.queueEvent(new TestEvent(component));
-        component.queueEvent(new TestEvent(facet1));
-        component.queueEvent(new TestEvent(facet2));
-        component.queueEvent(new TestEvent(facet3));
-        component.queueEvent(new TestEvent(child1));
-        component.queueEvent(new TestEvent(child2));
-        component.queueEvent(new TestEvent(child3));
-        component.queueEvent(new TestEvent(child2a));
-        component.queueEvent(new TestEvent(child2b));
-
-        // Test processDecodes()
-        TestComponent.trace(null);
-        component.processDecodes(facesContext);
-        assertEquals("processDecodes",
-                lifecycleTrace("pD", "d"),
-                TestComponent.trace());
-
-        // Test processValidators()
-        TestComponent.trace(null);
-        component.processValidators(facesContext);
-        assertEquals("processValidators",
-                lifecycleTrace("pV", null),
-                TestComponent.trace());
-
-        // Test processUpdates()
-        TestComponent.trace(null);
-        component.processUpdates(facesContext);
-        assertEquals("processUpdates",
-                lifecycleTrace("pU", null),
-                TestComponent.trace());
-
-    }
-
-
-    // Check that the properties on the specified components are equal
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-        assertEquals(comp1.getClientId(facesContext),
-                comp2.getClientId(facesContext));
-        assertEquals(comp1.getId(), comp2.getId());
-        assertEquals(comp1.isRendered(), comp2.isRendered());
-        assertEquals(comp1.getRendererType(), comp2.getRendererType());
-        assertEquals(comp1.getRendersChildren(), comp2.getRendersChildren());
-    }
-
-
-    // Check that the configured ValueBindings got restored
-    protected void checkValueBindings(UIComponent comp1, UIComponent comp2) {
-
-        ValueBinding vb1, vb2;
-
-        vb1 = comp1.getValueBinding("baz");
-        vb2 = comp2.getValueBinding("baz");
-        assertEquals(((MockValueBinding) vb1).ref(),
-                ((MockValueBinding) vb2).ref());
-
-        vb1 = comp1.getValueBinding("bop");
-        vb2 = comp2.getValueBinding("bop");
-        assertEquals(((MockValueBinding) vb1).ref(),
-                ((MockValueBinding) vb2).ref());
-
-    }
-
-
-    protected void checkComponentListeners(UIComponent control, UIComponent toValidate) {
-
-        List<SystemEventListener> lc = control.getListenersForEventClass(PostAddToViewEvent.class);
-        List<SystemEventListener> tvl = toValidate.getListenersForEventClass(PostAddToViewEvent.class);
-        List<SystemEventListener> lc2 = control.getListenersForEventClass(PostConstructViewMapEvent.class);
-        List<SystemEventListener> tvl2 = toValidate.getListenersForEventClass(PostConstructViewMapEvent.class);
-        assertTrue(lc.size() == tvl.size());
-        assertTrue(lc2.size() == tvl2.size());
-
-    }
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        return (new TestComponent());
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-
-        component.getAttributes().put("foo", "foo value");
-        component.getAttributes().put("bar", "bar value");
-        component.setId("componentId");
-        component.getClientId(facesContext); // Forces evaluation
-        component.setRendered(false);
-        component.setRendererType(null); // Since we have no renderers
-
-        component.setValueBinding("baz",
-                application.createValueBinding("baz.value"));
-        component.setValueBinding("bop",
-                application.createValueBinding("bop.value"));
-        component.subscribeToEvent(PostAddToViewEvent.class,
-                new ComponentListener());
-        component.subscribeToEvent(PostAddToViewEvent.class,
-                new ComponentListener());
-        component.subscribeToEvent(PostConstructViewMapEvent.class,
-                new ComponentListener());
-
-    }
-
-
-    /**
-     * Construct and return a lifecycle method call trace for the specified
-     * method names.
-     *
-     * @param lmethod Name of the lifecycle method under test
-     * @param cmethod Name of the component method that corresponds
-     */
-    protected String lifecycleTrace(String lmethod, String cmethod) {
-        StringBuffer sb = new StringBuffer();
-        lifecycleTrace(lmethod, cmethod, component, sb);
-        return (sb.toString());
-    }
-
-    protected void lifecycleTrace(String lmethod, String cmethod,
-                                  UIComponent component, StringBuffer sb) {
-
-
-        // Append the call for this lifecycle method
-        String id = component.getId();
-        sb.append("/" + lmethod + "-" + id);
-        if (!component.isRendered()) {
-            return;
-        }
-
-        // Append the calls for each facet
-        Iterator names = component.getFacets().keySet().iterator();
-        while (names.hasNext()) {
-            String name = (String) names.next();
-            sb.append("/" + lmethod + "-" + name);
-            if ((cmethod != null) &&
-                    ((UIComponent) component.getFacets().get(name)).isRendered()) {
-                sb.append("/" + cmethod + "-" + name);
-            }
-        }
-
-        // Append the calls for each child
-        Iterator kids = component.getChildren().iterator();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            lifecycleTrace(lmethod, cmethod, kid, sb);
-        }
-
-        // Append the call for this component's component method
-        if ((cmethod != null) && component.isRendered()) {
-            sb.append("/" + cmethod + "-" + id);
-        }
-
-    }
-
-    public void testGetFacetsAndChildren() {
-
-        UIComponent testComponent = new TestComponent();
-        UIComponent child1 = new TestComponent("child1");
-        UIComponent child2 = new TestComponent("child2");
-        UIComponent child3 = new TestComponent("child3");
-        UIComponent facet1 = new TestComponent("facet1");
-        UIComponent facet2 = new TestComponent("facet2");
-        UIComponent facet3 = new TestComponent("facet3");
-
-        testComponent.getChildren().add(child1);
-        testComponent.getChildren().add(child2);
-        testComponent.getChildren().add(child3);
-        testComponent.getFacets().put("facet1", facet1);
-        testComponent.getFacets().put("facet2", facet2);
-        testComponent.getFacets().put("facet3", facet3);
-
-        Iterator iter = testComponent.getFacetsAndChildren();
-        Object cur = null;
-        boolean exceptionThrown = false;
-        assertTrue(iter.hasNext());
-
-        try {
-            iter.remove();
-        }
-        catch (UnsupportedOperationException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        // facets are returned in an undefined order.
-        cur = iter.next();
-        assertTrue(cur == facet1 || cur == facet2 || cur == facet3);
-        cur = iter.next();
-        assertTrue(cur == facet1 || cur == facet2 || cur == facet3);
-        cur = iter.next();
-        assertTrue(cur == facet1 || cur == facet2 || cur == facet3);
-
-        // followed by components, in the order added
-        cur = iter.next();
-        assertTrue(cur == child1);
-        cur = iter.next();
-        assertTrue(cur == child2);
-        cur = iter.next();
-        assertTrue(cur == child3);
-
-        assertTrue(!iter.hasNext());
-
-    }
-
-    private Object foundComponent = null;
-
-    /**
-     * <p>Build a tree with the following layout.</p>
-     * <code><pre>
-     * root: id: root
-     * <p/>
-     *   form1: id: form1
-     * <p/>
-     *     panel1: id: panel
-     * <p/>
-     *       input1: id: input1
-     * <p/>
-     *       input2: id: input2
-     * <p/>
-     *   form2: id: form2
-     * <p/>
-     *     panel2: id: panel
-     * <p/>
-     *       input3: id: input1
-     * <p/>
-     *       input4: id: input2
-     * </pre></code>
-     *
-     * @return a Map<String, UIComponent>.  The key is the string before the
-     *         first : in the above layout.  The value is the component instance.
-     *         Note that the keys in the map are <b>not</b> the ids.
-     */
-
-    private Map<String, UIComponent> setupInvokeOnComponentTree() {
-        UIViewRoot root = new UIViewRoot();
-        UIForm form1 = new UIForm();
-        UIPanel panel1 = new UIPanel();
-        UIInput input1 = new UIInput();
-        UIInput input2 = new UIInput();
-        UIForm form2 = new UIForm();
-        UIPanel panel2 = new UIPanel();
-        UIInput input3 = new UIInput();
-        UIInput input4 = new UIInput();
-
-        root.setId("root");
-        form1.setId("form1");
-        panel1.setId("panel");
-        input1.setId("input1");
-        input2.setId("input2");
-
-        form2.setId("form2");
-        panel2.setId("panel");
-        input3.setId("input1");
-        input4.setId("input2");
-
-        root.getChildren().add(form1);
-        form1.getChildren().add(panel1);
-        panel1.getChildren().add(input1);
-        panel1.getChildren().add(input2);
-
-        root.getChildren().add(form2);
-        form2.getChildren().add(panel2);
-        panel2.getChildren().add(input3);
-        panel2.getChildren().add(input4);
-        Map<String, UIComponent> result = new HashMap<String, UIComponent>();
-        result.put("root", root);
-        result.put("form1", form1);
-        result.put("panel1", panel1);
-        result.put("input1", input1);
-        result.put("input2", input2);
-        result.put("form2", form2);
-        result.put("panel2", panel2);
-        result.put("input3", input3);
-        result.put("input4", input4);
-
-        return result;
-    }
-
-
-    public void testInvokeOnComponentPositive() throws Exception {
-
-        Map<String, UIComponent> tree = setupInvokeOnComponentTree();
-
-        UIViewRoot root = (UIViewRoot) tree.get("root");
-        UIInput input1 = (UIInput) tree.get("input1");
-
-        foundComponent = null;
-        boolean result = false;
-
-        result = root.invokeOnComponent(facesContext,
-                input1.getClientId(facesContext),
-                new ContextCallback() {
-                    public void invokeContextCallback(FacesContext context, UIComponent component) {
-                        foundComponent = component;
-                    }
-                });
-        assertEquals(input1, foundComponent);
-        assertTrue(result);
-
-    }
-
-    public void testInvokeOnComponentNegative() throws Exception {
-        Map<String, UIComponent> tree = setupInvokeOnComponentTree();
-
-        UIViewRoot root = (UIViewRoot) tree.get("root");
-        UIInput input4 = (UIInput) tree.get("input4");
-
-        foundComponent = null;
-        boolean result = false;
-        boolean exceptionThrown = false;
-
-        // Negative case 0, null pointers
-        exceptionThrown = false;
-        FacesContext nullContext = null;
-        ContextCallback nullCallback = null;
-        try {
-            root.invokeOnComponent(nullContext, "form:input7",
-                    nullCallback);
-        }
-        catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            root.invokeOnComponent(facesContext, null,
-                    nullCallback);
-        }
-        catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            root.invokeOnComponent(nullContext, null,
-                    nullCallback);
-        }
-        catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        // Negative case 1, not found component.
-        result = root.invokeOnComponent(facesContext,
-                "form:input7",
-                new ContextCallback() {
-                    public void invokeContextCallback(FacesContext context, UIComponent component) {
-                        foundComponent = component;
-                    }
-                });
-        assertNull(foundComponent);
-        assertTrue(!result);
-
-        // Negative case 2A, callback throws exception with found component
-        foundComponent = null;
-        result = false;
-        exceptionThrown = false;
-        try {
-            result = root.invokeOnComponent(facesContext,
-                    "form2:input2",
-                    new ContextCallback() {
-                        public void invokeContextCallback(FacesContext context, UIComponent component) {
-                            foundComponent = component;
-                            // When else am I going to get the chance to throw this exception?
-                            throw new IllegalStateException();
-                        }
-                    });
-        } catch (FacesException e) {
-            assertTrue(e.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        assertEquals(foundComponent, input4);
-        assertTrue(!result);
-
-        // Negative case 2B, callback throws exception with not found component
-        foundComponent = null;
-        result = false;
-        exceptionThrown = false;
-        try {
-            result = root.invokeOnComponent(facesContext,
-                    "form2:input6",
-                    new ContextCallback() {
-                        public void invokeContextCallback(FacesContext context, UIComponent component) {
-                            foundComponent = component;
-                            // When else am I going to get the chance to throw this exception?
-                            throw new IllegalStateException();
-                        }
-                    });
-        } catch (FacesException e) {
-            assertTrue(e.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertTrue(!exceptionThrown);
-        assertNull(foundComponent);
-        assertTrue(!result);
-
-
-    }
-
-    public void testInvokeOnComponentWithPrependId() throws Exception {
-        Map<String, UIComponent> tree = setupInvokeOnComponentTree();
-
-        UIViewRoot root = (UIViewRoot) tree.get("root");
-        UIForm truePrependIdForm = (UIForm) tree.get("form1");
-        UIForm falsePrependIdForm = (UIForm) tree.get("form2");
-        UIInput truePrependIdInput = (UIInput) tree.get("input2");
-        UIInput falsePrependIdInput = (UIInput) tree.get("input3");
-
-        truePrependIdForm.setPrependId(true);
-        falsePrependIdForm.setPrependId(false);
-
-        foundComponent = null;
-        boolean result = false;
-        boolean exceptionThrown = false;
-
-        // Case 1, positive find with prependId == true
-        result = root.invokeOnComponent(facesContext,
-                "form1:input2",
-                new ContextCallback() {
-                    public void invokeContextCallback(FacesContext context, UIComponent component) {
-                        foundComponent = component;
-                    }
-                });
-        assertEquals(truePrependIdInput, foundComponent);
-        assertTrue(result);
-
-        // Case 2, negative find with prependId == true
-        foundComponent = null;
-        result = false;
-
-        result = root.invokeOnComponent(facesContext,
-                "form9:input5",
-                new ContextCallback() {
-                    public void invokeContextCallback(FacesContext context, UIComponent component) {
-                        foundComponent = component;
-                    }
-                });
-        assertNull(foundComponent);
-        assertTrue(!result);
-
-        // Case 3, exception positive find with prependId == true
-        foundComponent = null;
-        result = false;
-        exceptionThrown = false;
-        try {
-
-
-            result = root.invokeOnComponent(facesContext,
-                    "form1:input2",
-                    new ContextCallback() {
-                        public void invokeContextCallback(FacesContext context, UIComponent component) {
-                            foundComponent = component;
-                            throw new IllegalStateException();
-                        }
-                    });
-        }
-        catch (FacesException e) {
-            assertTrue(e.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertEquals(truePrependIdInput, foundComponent);
-        assertTrue(!result);
-        assertTrue(exceptionThrown);
-
-        // Case 4, exception negative find with prependId == true
-        foundComponent = null;
-        result = false;
-        exceptionThrown = false;
-        try {
-
-
-            result = root.invokeOnComponent(facesContext,
-                    "formFozzy:inputKermit",
-                    new ContextCallback() {
-                        public void invokeContextCallback(FacesContext context, UIComponent component) {
-                            foundComponent = component;
-                            throw new IllegalStateException();
-                        }
-                    });
-        }
-        catch (FacesException e) {
-            assertTrue(e.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertNull(foundComponent);
-        assertTrue(!result);
-        assertTrue(!exceptionThrown);
-
-        // Case 5, positive find with prependId == false
-        result = root.invokeOnComponent(facesContext,
-                "input1",
-                new ContextCallback() {
-                    public void invokeContextCallback(FacesContext context, UIComponent component) {
-                        foundComponent = component;
-                    }
-                });
-        assertEquals(falsePrependIdInput, foundComponent);
-        assertTrue(result);
-
-        // Case 6, negative find with prependId == false
-        foundComponent = null;
-        result = false;
-
-        result = root.invokeOnComponent(facesContext,
-                "input99",
-                new ContextCallback() {
-                    public void invokeContextCallback(FacesContext context, UIComponent component) {
-                        foundComponent = component;
-                    }
-                });
-        assertNull(foundComponent);
-        assertTrue(!result);
-
-        // Case 3, exception positive find with prependId == false
-        foundComponent = null;
-        result = false;
-        exceptionThrown = false;
-        try {
-
-
-            result = root.invokeOnComponent(facesContext,
-                    "input1",
-                    new ContextCallback() {
-                        public void invokeContextCallback(FacesContext context, UIComponent component) {
-                            foundComponent = component;
-                            throw new IllegalStateException();
-                        }
-                    });
-        }
-        catch (FacesException e) {
-            assertTrue(e.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertEquals(falsePrependIdInput, foundComponent);
-        assertTrue(!result);
-        assertTrue(exceptionThrown);
-
-        // Case 4, exception negative find with prependId == false
-        foundComponent = null;
-        result = false;
-        exceptionThrown = false;
-        try {
-
-
-            result = root.invokeOnComponent(facesContext,
-                    "inputKermit",
-                    new ContextCallback() {
-                        public void invokeContextCallback(FacesContext context, UIComponent component) {
-                            foundComponent = component;
-                            throw new IllegalStateException();
-                        }
-                    });
-        }
-        catch (FacesException e) {
-            assertTrue(e.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertNull(foundComponent);
-        assertTrue(!result);
-        assertTrue(!exceptionThrown);
-
-
-    }
-
-
-    public void testChildrenListAfterAddPublish() {
-
-        Listener listener = new Listener();
-        application.subscribeToEvent(PostAddToViewEvent.class, listener);
-
-        UIComponent c1 = createComponent();
-        c1.setInView(true);
-        UIComponent c2 = createComponent();
-        c2.setInView(true);
-        UIComponent c3 = createComponent();
-        c3.setInView(true);
-
-        c1.getChildren().add(c2);
-        SystemEvent e = listener.getEvent();
-        assertNotNull(e);
-        assertTrue(e.getSource() == c2);
-        assertTrue(((UIComponent) e.getSource()).getParent() == c1);
-        listener.reset();
-        c2.getChildren().add(c3);
-        e = listener.getEvent();
-        assertNotNull(e);
-        assertTrue(e.getSource() == c3);
-        assertTrue(((UIComponent) e.getSource()).getParent() == c2);
-
-        //ensure events are re-published if the event is added
-        listener.reset();
-        c2.getChildren().remove(c3);
-        c1.getChildren().add(c3);
-        e = listener.getEvent();
-        assertNotNull(e);
-        assertTrue(e.getSource() == c3);
-        assertTrue(((UIComponent) e.getSource()).getParent() == c1);
-
-        application.unsubscribeFromEvent(PostAddToViewEvent.class, listener);
-
-    }
-
-    public void testFacetMapAfterAddViewPublish() {
-
-        QueueingListener listener = new QueueingListener();
-        application.subscribeToEvent(PostAddToViewEvent.class, listener);
-
-        UIComponent c1 = createComponent();
-        UIComponent c2 = createComponent();
-        UIComponent c3 = createComponent();
-
-        List<SystemEvent> e = listener.getEvents();
-        Map<String, UIComponent> facets = c1.getFacets();
-        facets.put("c2", c2);
-        assertTrue("Expected Event queue size of 0, found: " + e.size(), e.size() == 0);
-
-        UIViewRoot root = new UIViewRoot();
-        root.getChildren().add(c1);
-        assertTrue("Expected Event queue size of 2, found: " + e.size(), e.size() == 2);
-        assertTrue(e.get(0).getSource() == c1);
-        assertTrue(e.get(1).getSource() == c2);
-
-        // remove c1 from the root and add c3 as a facet to c1 - no events should be
-        // published
-        e.clear();
-        root.getChildren().remove(c1);
-        facets = c1.getFacets();
-        facets.put("c3", c3);
-        assertTrue("Expected Event queue size of 0, found: " + e.size(), e.size() == 0);
-
-        // reorganize the facet structure to ensure nested facets work
-        facets.remove("c3");
-        c2.getFacets().put("c3", c3);
-        root.getChildren().add(c1);
-        assertTrue("Expected Event queue size of 3, found: " + e.size(), e.size() == 3);
-        assertTrue(e.get(0).getSource() == c1);
-        assertTrue(e.get(1).getSource() == c2);
-        assertTrue(e.get(2).getSource() == c3);
-
-        e.clear();
-        // ensure clear() method disconnects the facets from the view
-        facets.clear();
-        c2.getFacets().remove("c3");
-        c2.getFacets().put("c3", c3);
-        assertTrue("Expected Event queue size of 0, found: " + e.size(), e.size() == 0);
-
-        application.unsubscribeFromEvent(PostAddToViewEvent.class, listener);
-
-    }
-
-    public void testChildrenListAfterAddViewPublish() {
-
-        QueueingListener listener = new QueueingListener();
-        application.subscribeToEvent(PostAddToViewEvent.class, listener);
-
-        UIComponent c1 = createComponent();
-        UIComponent c2 = createComponent();
-        UIComponent c3 = createComponent();
-        UIComponent c4 = createComponent();
-        c1.getChildren().add(c2);
-        List<SystemEvent> e = listener.getEvents();
-        assertTrue(e.isEmpty());
-        c2.getChildren().add(c3);
-        assertTrue(e.isEmpty());
-        UIViewRoot root = new UIViewRoot();
-        root.getChildren().add(c1);
-
-        // sub-tree has been added to the view.  Ensure that subsequent additions
-        // to that sub-tree cause the PostAddToViewEvent to fire.
-        c2.getChildren().add(c4);
-        assertTrue("Expected Event queue size of 4, found: " + e.size(), e.size() == 4);
-
-        UIComponent[] comps = {
-                c1, c2, c3, c4
-        };
-        for (int i = 0; i < comps.length; i++) {
-            assertTrue("Index " + i + " invalid", e.get(i).getSource() == comps[i]);
-        }
-
-        // remove c1 and it's children from the subview, then remove and
-        // re-add one of the children in the sub-tree.  No event should
-        // be fired
-        e.clear();
-        root.getChildren().remove(c1);
-        c2.getChildren().remove(c4);
-        c2.getChildren().add(c4);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-
-        c2.getChildren().remove(c4);
-        c1.getChildren().add(c4);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-
-        // re-wire c1 as a child of root and ensure all children get re-notified
-        root.getChildren().add(c1);
-        assertTrue("Expected Event queue size of 4, found: " + e.size(), e.size() == 4);
-
-        for (int i = 0; i < comps.length; i++) {
-            assertTrue("Index " + i + " invalid", e.get(i).getSource() == comps[i]);
-        }
-
-        // validate clearing c1's children (effectively removing them from the view
-        // will result in no events being fired of components are added to any of
-        // the disconnected children.
-        // At this point in the test, c2 and c4 are children of c1, and c3
-        // is a child of c2.
-        c1.getChildren().clear();
-        UIComponent temp = createComponent();
-        e.clear();
-        c2.getChildren().add(temp);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-        c2.getChildren().remove(temp);
-        c3.getChildren().add(temp);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-        c3.getChildren().remove(temp);
-        c4.getChildren().add(temp);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-        c4.getChildren().remove(temp);
-
-        // now add c2 and c4 as children of c1.  This should cause three
-        // events to fire
-        c1.getChildren().add(c2);
-        c1.getChildren().add(c4);
-        assertTrue("Expected Event queue size of 3, found: " + e.size(), e.size() == 3);
-
-        UIComponent[] comps2 = {
-                c2, c3, c4
-        };
-        for (int i = 0; i < comps2.length; i++) {
-            assertTrue("Index " + i + " invalid", e.get(i).getSource() == comps2[i]);
-        }
-
-        // validate add(int, UIComponent) fires events
-        e.clear();
-        c1.getChildren().remove(c4);
-        c1.getChildren().add(0, c4);
-
-        assertTrue(c1.getChildren().get(0) == c4);
-        assertTrue(c1.getChildren().get(1) == c2);
-        assertTrue("Expected Event queue size of 1, found: " + e.size(), e.size() == 1);
-        assertTrue(e.get(0).getSource() == c4);
-
-        // validate addAll(Collection<UIComponent>) fires events
-        e.clear();
-        c1.getChildren().clear();
-        List<UIComponent> children = new ArrayList<UIComponent>(2);
-        Collections.addAll(children, c2, c4);
-        c1.getChildren().addAll(children);
-        assertTrue(c1.getChildren().get(0) == c2);
-        assertTrue(c1.getChildren().get(1) == c4);
-        assertTrue("Expected Event queue size of 3, found: " + e.size(), e.size() == 3);
-        assertTrue(e.get(0).getSource() == c2);
-        assertTrue(e.get(2).getSource() == c4);
-
-        // validate addAll(int, Collection<UIComponent>) fires events
-        e.clear();
-        children = new ArrayList<UIComponent>(2);
-        UIComponent t1 = createComponent();
-        UIComponent t2 = createComponent();
-        Collections.addAll(children, t1, t2);
-        c1.getChildren().addAll(0, children);
-        assertTrue(c1.getChildren().get(0) == t1);
-        assertTrue(c1.getChildren().get(1) == t2);
-        assertTrue(c1.getChildren().get(2) == c2);
-        assertTrue(c1.getChildren().get(3) == c4);
-        assertTrue("Expected Event queue size of 2, found: " + e.size(), e.size() == 2);
-        assertTrue(e.get(0).getSource() == t1);
-        assertTrue(e.get(1).getSource() == t2);
-
-        // validate retainAll(Collection<UIComponent> properly disconnects
-        // the components from the view such that events aren't fired
-        // if children are added to them
-        e.clear();
-        List<UIComponent> retained = new ArrayList<UIComponent>(2);
-        Collections.addAll(retained, c2, c4);
-        c1.getChildren().retainAll(retained);
-        assertTrue(c1.getChildren().size() == 2);
-        assertTrue(c1.getChildren().get(0) == c2);
-        assertTrue(c1.getChildren().get(1) == c4);
-        t1.getChildren().add(t2);
-        assertTrue("Expected Event queue size of 0, found: " + e.size(), e.size() == 0);
-
-        // test set(int, UIComponent) properly fires an event if the parent
-        // the component is being added to is wired to the view
-        e.clear();
-        c1.getChildren().set(0, t1);
-        assertTrue(c1.getChildren().size() == 2);
-        assertTrue(c1.getChildren().get(0) == t1);
-        assertTrue(c1.getChildren().get(1) == c4);
-        assertTrue("Expected Event queue size of 2, found: " + e.size(), e.size() == 2);
-        assertTrue(e.get(0).getSource() == t1);
-        assertTrue(e.get(1).getSource() == t2);
-
-        // c2 was removed by the set operation, so ensure it's marked as
-        // having been removed from the view by ensuring events aren't fired.
-        e.clear();
-        UIComponent t3 = createComponent();
-        c2.getChildren().add(t3);
-        assertTrue("Expected Event queue size of 0, found: " + e.size(), e.size() == 0);
-
-        application.unsubscribeFromEvent(PostAddToViewEvent.class, listener);
-
-        // validate Iterator.remove() over c1's children correctly disconnects
-        // the children from the view
-        for (Iterator<UIComponent> i = c1.getChildren().iterator(); i.hasNext();) {
-            i.next();
-            i.remove();
-        }
-
-        // at this point, t1 and c4 should be disconnected meaning adding children
-        // to t1, t2, or c4 should result in no events being fired
-        e.clear();
-        t1.getChildren().add(temp);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-        t1.getChildren().remove(temp);
-        t2.getChildren().add(temp);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-        t2.getChildren().remove(temp);
-        c4.getChildren().add(temp);
-        assertTrue("AfterAddToView events queued after a sub-tree was removed from the view, and a child added to the sub-view",
-                e.isEmpty());
-        c4.getChildren().remove(temp);
-
-    }
-
-
-    public void testEncodeBeginPublish() throws Exception {
-
-        Listener listener = new Listener();
-        application.subscribeToEvent(PreRenderComponentEvent.class, listener);
-
-        UIComponent c1 = createComponent();
-        c1.encodeBegin(facesContext);
-        SystemEvent e = listener.getEvent();
-        assertNotNull(e);
-        assertTrue(e.getSource() == c1);
-        listener.reset();
-        c1.encodeChildren(facesContext);
-        assertNull(listener.getEvent());
-        c1.encodeEnd(facesContext);
-        assertNull(listener.getEvent());
-
-        application.unsubscribeFromEvent(PreRenderComponentEvent.class, listener);
-
-    }
-
-
-    // --------------------------------------------------------- Private Classes
-
-
-    public static final class Listener implements SystemEventListener {
-
-        private SystemEvent event;
-
-        public void processEvent(SystemEvent event)
-                throws AbortProcessingException {
-            this.event = event;
-        }
-
-        public boolean isListenerForSource(Object source) {
-            return (source instanceof UIComponent);
-        }
-
-        public SystemEvent getEvent() {
-            return event;
-        }
-
-        public void reset() {
-            event = null;
-        }
-    }
-
-
-    public static final class QueueingListener implements SystemEventListener {
-
-        private List<SystemEvent> events = new ArrayList<SystemEvent>();
-
-        public void processEvent(SystemEvent event)
-                throws AbortProcessingException {
-            events.add(event);
-        }
-
-        public boolean isListenerForSource(Object source) {
-            return (source instanceof UIComponent);
-        }
-
-        public List<SystemEvent> getEvents() {
-            return events;
-        }
-
-        public void reset() {
-            events.clear();
-        }
-    }
-
-
-    public static final class ComponentListener implements ComponentSystemEventListener {
-
-        public void processEvent(ComponentSystemEvent event)
-                throws AbortProcessingException {
-
-        }
-    }
-
-
-    public static final class UIComponentListener extends UIComponentBase implements ComponentSystemEventListener {
-
-        public String getFamily() {
-            return "family";
-        }
-
-        public void processEvent(ComponentSystemEvent event)
-                throws AbortProcessingException {
-        }
-
-    }
-
-
-    public static final class UIComponentOverrideEncodeBegin extends UIComponentBase {
-
-        public String getFamily() {
-            return "UIComponentOverrideEncodeBegin";
-        }
-
-        @Override
-        public void encodeBegin(FacesContext context) throws IOException {
-            // no-op
-        }
-
-    }
-
-
-    public static final class UIComponentOverrideEncodeEnd extends UIComponentBase {
-
-        public String getFamily() {
-            return "UIComponentOverrideEncodeEnd";
-        }
-
-        @Override
-        public void encodeEnd(FacesContext context) throws IOException {
-            // no-op
-        }
-    }
-
-
-    public static final class CustomAbortProcessingException extends AbortProcessingException {
-        public CustomAbortProcessingException() {
-            super();
-        }
-
-        public CustomAbortProcessingException(String message) {
-            super(message);
-        }
-
-        public CustomAbortProcessingException(Throwable cause) {
-            super(cause);
-        }
-
-        public CustomAbortProcessingException(String message, Throwable cause) {
-            super(message, cause);
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIComponentTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIComponentTestCase.java
deleted file mode 100644
index 2ca712d..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIComponentTestCase.java
+++ /dev/null
@@ -1,2140 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import com.sun.faces.mock.*;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.event.PostValidateEvent;
-import javax.faces.event.PreValidateEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import java.io.Serializable;
-import java.util.*;
-
-
-/**
- * <p>Base unit tests for all {@link UIComponent} implementation classes.</p>
- */
-
-public class UIComponentTestCase extends TestCase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The component to be tested
-    protected UIComponent component = null;
-
-    // The set of attribute names expected on a pristine component instance
-    protected String expectedAttributes[] = null;
-
-    // The expected component family on a pristine component instance
-    protected String expectedFamily = null;
-
-    // The expected component identifier on a pristine component instance
-    protected String expectedId = null;
-
-    // The expected rendered on a pristine component instance
-    protected boolean expectedRendered = true;
-
-    // The expected rendererType on a pristine component instance
-    protected String expectedRendererType = null;
-
-    // The expected rendersChildren on a pristine component instance
-    protected boolean expectedRendersChildren = false;
-
-    private Map.Entry<String, UIComponent> bogusEntry =
-            new Map.Entry<String, UIComponent>() {
-                public boolean equals(Object r) {
-                    return false;
-                }
-
-                public String getKey() {
-                    return "key";
-                }
-
-                public int hashCode() {
-                    return 0;
-                }
-
-                public UIComponent getValue() {
-                    return null;
-                }
-
-                public UIComponent setValue(UIComponent value) {
-                    return null;
-                }
-
-            };
-
-    // Mock object instances for our tests
-    protected MockApplication application = null;
-    protected MockServletConfig config = null;
-    protected MockExternalContext externalContext = null;
-    protected MockFacesContext facesContext = null;
-    protected MockLifecycle lifecycle = null;
-    protected MockHttpServletRequest request = null;
-    protected MockHttpServletResponse response = null;
-    protected MockServletContext servletContext = null;
-    protected MockHttpSession session = null;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    // Construct a new instance of this test case.
-
-    public UIComponentTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-
-    public void setUp() {
-
-        expectedAttributes = new String[0];
-        expectedFamily = "Test";
-        expectedId = "test";
-        expectedRendered = true;
-        expectedRendererType = null;
-        expectedRendersChildren = false;
-
-        // Set up Servlet API Objects
-        servletContext = new MockServletContext();
-        servletContext.addInitParameter("appParamName", "appParamValue");
-        servletContext.setAttribute("appScopeName", "appScopeValue");
-        config = new MockServletConfig(servletContext);
-        session = new MockHttpSession();
-        session.setAttribute("sesScopeName", "sesScopeValue");
-        request = new MockHttpServletRequest(session);
-        request.setAttribute("reqScopeName", "reqScopeValue");
-        response = new MockHttpServletResponse();
-
-        // Set up Faces API Objects
-        FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
-                "com.sun.faces.mock.MockApplicationFactory");
-        FactoryFinder.setFactory(FactoryFinder.RENDER_KIT_FACTORY,
-                "com.sun.faces.mock.MockRenderKitFactory");
-
-        externalContext =
-                new MockExternalContext(servletContext, request, response);
-        Map map = new HashMap();
-        externalContext.setRequestParameterMap(map);
-        lifecycle = new MockLifecycle();
-        facesContext = new MockFacesContext(externalContext, lifecycle);
-        ApplicationFactory applicationFactory = (ApplicationFactory)
-                FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        application = (MockApplication) applicationFactory.getApplication();
-        facesContext.setApplication(application);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.setViewId("/viewId");
-        facesContext.setViewRoot(root);
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-                FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = new MockRenderKit();
-        try {
-            renderKitFactory.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT,
-                    renderKit);
-        } catch (IllegalArgumentException e) {
-            ;
-        }
-
-        component = new TestComponent(expectedId);
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(UIComponentTestCase.class));
-
-    }
-
-
-    // Tear down instance variables required by this test case.
-    public void tearDown() {
-
-        component = null;
-        expectedAttributes = null;
-        expectedFamily = null;
-        expectedId = null;
-        expectedRendered = true;
-        expectedRendererType = null;
-        expectedRendersChildren = false;
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testValidationEvents() {
-        Listener prelistener = new Listener();
-        Listener postlistener = new Listener();
-        List<String> ldata = new ArrayList<String>();
-        ldata.add("one");
-        UIViewRoot root = new UIViewRoot();
-        root.setId("root");
-        root.subscribeToEvent(PreValidateEvent.class, prelistener);
-        root.subscribeToEvent(PostValidateEvent.class, postlistener);
-        UIOutput out = new UIOutput();
-        out.setId("out");
-        out.subscribeToEvent(PreValidateEvent.class, prelistener);
-        out.subscribeToEvent(PostValidateEvent.class, postlistener);
-        root.getChildren().add(out);
-        UIForm f = new UIForm();
-        f.setSubmitted(true);
-        f.setId("form");
-        f.subscribeToEvent(PreValidateEvent.class, prelistener);
-        f.subscribeToEvent(PostValidateEvent.class, postlistener);
-        root.getChildren().add(f);
-        UIData data = new UIData();
-        data.setId("data");
-        data.subscribeToEvent(PreValidateEvent.class, prelistener);
-        data.subscribeToEvent(PostValidateEvent.class, postlistener);
-        data.setValue(ldata);
-        UIColumn c = new UIColumn();
-        c.setId("column");
-        c.subscribeToEvent(PreValidateEvent.class, prelistener);
-        c.subscribeToEvent(PostValidateEvent.class, postlistener);
-        UIInput in = new UIInput();
-        in.setId("in");
-        in.subscribeToEvent(PreValidateEvent.class, prelistener);
-        in.subscribeToEvent(PostValidateEvent.class, postlistener);
-        in.addValidator(new ValidationSignal());
-        c.getChildren().add(in);
-        data.getChildren().add(c);
-        f.getChildren().add(data);
-        data.setRowIndex(0);
-        UIComponent col = data.getChildren().get(0);
-        ((UIInput) col.getChildren().get(0)).setSubmittedValue("hello");
-        data.setRowIndex(-1);
-        root.processValidators(facesContext);
-        assertEquals("root/out/form/data/in/", "root/out/form/data/in/", prelistener.getResults());
-        assertEquals("out/*/in/data/form/root/", "out/*/in/data/form/root/", postlistener.getResults());
-
-    }
-
-    // Test behavior of Map returned by getAttributes()
-
-    public void testAttributesMap() {
-
-        // Initialize some attributes
-        Map attributes = component.getAttributes();
-        attributes.put("foo", "bar");
-        attributes.put("baz", "bop");
-
-        // Test containsKey()
-        assertTrue(attributes.containsKey("foo"));
-        assertTrue(attributes.containsKey("baz"));
-        assertTrue(!attributes.containsKey("bar"));
-        assertTrue(!attributes.containsKey("bop"));
-        assertTrue(!attributes.containsKey("id")); // Property name
-        assertTrue(!attributes.containsKey("parent")); // Property name
-
-        // Test get()
-        assertEquals("bar", (String) attributes.get("foo"));
-        assertEquals("bop", (String) attributes.get("baz"));
-        assertNull((String) attributes.get("bar"));
-        assertNull((String) attributes.get("bop"));
-        component.setId("oldvalue");
-        assertEquals("oldvalue", (String) attributes.get("id")); // Property
-        component.setRendered(false);
-        assertTrue(!((Boolean) attributes.get("rendered")).booleanValue());
-        component.setRendered(true);
-        assertTrue(((Boolean) attributes.get("rendered")).booleanValue());
-
-        // Test put()
-        try {
-            attributes.put(null, "dummy");
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-        try {
-            attributes.put(new java.util.Date(), "dummy");
-            fail("Should have thrown ClassCastException");
-        } catch (ClassCastException e) {
-            ; // Expected result
-        }
-        try {
-            attributes.put("rendersChildren", null); // Primitive property
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-        try {
-            attributes.put("rendersChildren", Boolean.TRUE); // Write-only
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-        attributes.put("id", "newvalue");
-        assertEquals("newvalue", (String) attributes.get("id"));
-        assertEquals("newvalue", component.getId());
-        attributes.put("rendered", Boolean.TRUE);
-        assertTrue(component.isRendered());
-        attributes.put("rendered", Boolean.FALSE);
-        assertTrue(!component.isRendered());
-
-        // Test remove()
-        attributes.remove("baz");
-        assertTrue(!attributes.containsKey("baz"));
-        assertNull(attributes.get("baz"));
-        try {
-            attributes.remove("id");
-            fail("Should have thrown IllegalArgumentException()");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-    }
-
-
-    // Negative tests on attribute methods
-    public void testAttributesNegative() {
-
-        // getAttributes().get() - null
-        try {
-            Object value = component.getAttributes().get(null);
-            fail("should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-
-        // getAttributes().put() - null
-        try {
-            component.getAttributes().put(null, "bar");
-            fail("should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-
-    }
-
-
-    // Positive tests on attribute methods
-    public void testAttributesPositive() {
-
-        checkAttributeCount(component, expectedAttributes.length);
-        checkAttributeMissing(component, "foo");
-        checkAttributeMissing(component, "baz");
-
-        component.getAttributes().put("foo", "bar");
-        checkAttributeCount(component, expectedAttributes.length + 1);
-        checkAttributePresent(component, "foo", "bar");
-        checkAttributeMissing(component, "baz");
-
-        component.getAttributes().put("baz", "bop");
-        checkAttributeCount(component, expectedAttributes.length + 2);
-        checkAttributePresent(component, "foo", "bar");
-        checkAttributePresent(component, "baz", "bop");
-
-        component.getAttributes().put("baz", "boo");
-        checkAttributeCount(component, expectedAttributes.length + 2);
-        checkAttributePresent(component, "foo", "bar");
-        checkAttributePresent(component, "baz", "boo");
-
-        component.getAttributes().remove("foo");
-        checkAttributeCount(component, expectedAttributes.length + 1);
-        checkAttributeMissing(component, "foo");
-        checkAttributePresent(component, "baz", "boo");
-
-    }
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        assertEquals(component.getChildren(),
-                (List) component.getAttributes().get("children"));
-
-        assertEquals(component.getFacets(),
-                (Map) component.getAttributes().get("facets"));
-
-        assertEquals(component.getId(),
-                (String) component.getAttributes().get("id"));
-
-        assertEquals(component.getParent(),
-                (UIComponent) component.getAttributes().get("parent"));
-
-        assertEquals(component.isRendered(),
-                ((Boolean) component.getAttributes().get("rendered")).
-                        booleanValue());
-        component.setRendered(false);
-        assertEquals(Boolean.FALSE,
-                (Boolean) component.getAttributes().get("rendered"));
-        component.setRendered(true);
-        assertEquals(Boolean.TRUE,
-                (Boolean) component.getAttributes().get("rendered"));
-        component.getAttributes().put("rendered", Boolean.FALSE);
-        assertTrue(!component.isRendered());
-        component.getAttributes().put("rendered", Boolean.TRUE);
-        assertTrue(component.isRendered());
-
-        component.setRendererType("foo");
-        assertEquals("foo",
-                (String) component.getAttributes().get("rendererType"));
-        component.setRendererType(null);
-        assertNull((String) component.getAttributes().get("rendererType"));
-        component.getAttributes().put("rendererType", "bar");
-        assertEquals("bar", component.getRendererType());
-        component.getAttributes().put("rendererType", null);
-        assertNull(component.getRendererType());
-
-        assertEquals(component.getRendersChildren(),
-                ((Boolean) component.getAttributes().
-                        get("rendersChildren")).booleanValue());
-
-    }
-
-
-    // Test getChildren().iterator()
-    public void testChildrenIterator() {
-
-        Iterator kids;
-
-        // Construct components we will need
-        UIComponent comp0 = new TestComponent(null);
-        UIComponent comp1 = new TestComponent("comp1");
-        UIComponent comp2 = new TestComponent("comp2");
-        UIComponent comp3 = new TestComponent("comp3");
-        UIComponent comp4 = new TestComponent("comp4");
-        UIComponent comp5 = new TestComponent("comp5");
-        List comps = new ArrayList();
-        comps.add(comp0);
-        comps.add(comp1);
-        comps.add(comp2);
-        comps.add(comp3);
-        comps.add(comp4);
-        comps.add(comp5);
-
-        // Test hasNext() and next()
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        kids = component.getChildren().iterator();
-        assertTrue(kids.hasNext());
-        assertEquals(comp0, (UIComponent) kids.next());
-        assertEquals(comp1, (UIComponent) kids.next());
-        assertEquals(comp2, (UIComponent) kids.next());
-        assertEquals(comp3, (UIComponent) kids.next());
-        assertEquals(comp4, (UIComponent) kids.next());
-        assertEquals(comp5, (UIComponent) kids.next());
-        assertTrue(!kids.hasNext());
-
-        // Test remove()
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        kids = component.getChildren().iterator();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            if ((kid == comp2) || (kid == comp4)) {
-                kids.remove();
-            }
-        }
-        kids = component.getChildren().iterator();
-        assertTrue(kids.hasNext());
-        assertEquals(comp0, (UIComponent) kids.next());
-        assertEquals(comp1, (UIComponent) kids.next());
-        assertEquals(comp3, (UIComponent) kids.next());
-        assertEquals(comp5, (UIComponent) kids.next());
-        assertTrue(!kids.hasNext());
-
-    }
-
-
-    // Test getChildren().listIterator()
-    public void testChildrenListIterator() {
-
-        ListIterator kids;
-
-        // Construct components we will need
-        UIComponent comp0 = new TestComponent(null);
-        UIComponent comp1 = new TestComponent("comp1");
-        UIComponent comp2 = new TestComponent("comp2");
-        UIComponent comp3 = new TestComponent("comp3");
-        UIComponent comp4 = new TestComponent("comp4");
-        UIComponent comp5 = new TestComponent("comp5");
-        UIComponent comp6 = new TestComponent("comp6");
-        List comps = new ArrayList();
-        comps.add(comp0);
-        comps.add(comp1);
-        comps.add(comp2);
-        comps.add(comp3);
-        comps.add(comp4);
-        comps.add(comp5);
-
-        // Test hasNext(), next(), and nextIndex()
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        kids = component.getChildren().listIterator();
-        assertTrue(kids.hasNext());
-        assertEquals(0, kids.nextIndex());
-        assertEquals(comp0, (UIComponent) kids.next());
-        assertEquals(1, kids.nextIndex());
-        assertEquals(comp1, (UIComponent) kids.next());
-        assertEquals(2, kids.nextIndex());
-        assertEquals(comp2, (UIComponent) kids.next());
-        assertEquals(3, kids.nextIndex());
-        assertEquals(comp3, (UIComponent) kids.next());
-        assertEquals(4, kids.nextIndex());
-        assertEquals(comp4, (UIComponent) kids.next());
-        assertEquals(5, kids.nextIndex());
-        assertEquals(comp5, (UIComponent) kids.next());
-        assertEquals(6, kids.nextIndex());
-        assertTrue(!kids.hasNext());
-
-        // Test hasPrevious(), previous(), and previousIndex()
-        assertTrue(kids.hasPrevious());
-        assertEquals(5, kids.previousIndex());
-        assertEquals(comp5, (UIComponent) kids.previous());
-        assertEquals(4, kids.previousIndex());
-        assertEquals(comp4, (UIComponent) kids.previous());
-        assertEquals(3, kids.previousIndex());
-        assertEquals(comp3, (UIComponent) kids.previous());
-        assertEquals(2, kids.previousIndex());
-        assertEquals(comp2, (UIComponent) kids.previous());
-        assertEquals(1, kids.previousIndex());
-        assertEquals(comp1, (UIComponent) kids.previous());
-        assertEquals(0, kids.previousIndex());
-        assertEquals(comp0, (UIComponent) kids.previous());
-        assertEquals(-1, kids.previousIndex());
-        assertTrue(!kids.hasPrevious());
-
-        // Test remove()
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        kids = component.getChildren().listIterator();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            if ((kid == comp2) || (kid == comp4)) {
-                kids.remove();
-            }
-        }
-        kids = component.getChildren().listIterator();
-        assertTrue(kids.hasNext());
-        assertEquals(comp0, (UIComponent) kids.next());
-        assertEquals(comp1, (UIComponent) kids.next());
-        assertEquals(comp3, (UIComponent) kids.next());
-        assertEquals(comp5, (UIComponent) kids.next());
-        assertTrue(!kids.hasNext());
-
-        // Test set()
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        kids = component.getChildren().listIterator();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            if (kid == comp2) {
-                kids.set(comp6);
-            }
-        }
-        kids = component.getChildren().listIterator();
-        assertTrue(kids.hasNext());
-        assertEquals(0, kids.nextIndex());
-        assertEquals(comp0, (UIComponent) kids.next());
-        assertEquals(1, kids.nextIndex());
-        assertEquals(comp1, (UIComponent) kids.next());
-        assertEquals(2, kids.nextIndex());
-        assertEquals(comp6, (UIComponent) kids.next());
-        assertEquals(3, kids.nextIndex());
-        assertEquals(comp3, (UIComponent) kids.next());
-        assertEquals(4, kids.nextIndex());
-        assertEquals(comp4, (UIComponent) kids.next());
-        assertEquals(5, kids.nextIndex());
-        assertEquals(comp5, (UIComponent) kids.next());
-        assertEquals(6, kids.nextIndex());
-        assertTrue(!kids.hasNext());
-
-        // Test add()
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        kids = component.getChildren().listIterator();
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-            if (kid == comp2) {
-                kids.add(comp6);
-            }
-        }
-        kids = component.getChildren().listIterator();
-        assertTrue(kids.hasNext());
-        assertEquals(0, kids.nextIndex());
-        assertEquals(comp0, (UIComponent) kids.next());
-        assertEquals(1, kids.nextIndex());
-        assertEquals(comp1, (UIComponent) kids.next());
-        assertEquals(2, kids.nextIndex());
-        assertEquals(comp2, (UIComponent) kids.next());
-        assertEquals(3, kids.nextIndex());
-        assertEquals(comp6, (UIComponent) kids.next());
-        assertEquals(4, kids.nextIndex());
-        assertEquals(comp3, (UIComponent) kids.next());
-        assertEquals(5, kids.nextIndex());
-        assertEquals(comp4, (UIComponent) kids.next());
-        assertEquals(6, kids.nextIndex());
-        assertEquals(comp5, (UIComponent) kids.next());
-        assertEquals(7, kids.nextIndex());
-        assertTrue(!kids.hasNext());
-
-        // Test listIterator(int)
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        kids = component.getChildren().listIterator(2);
-        assertTrue(kids.hasNext());
-        assertTrue(kids.hasPrevious());
-        assertEquals(2, kids.nextIndex());
-        assertEquals(1, kids.previousIndex());
-        assertEquals(comp2, (UIComponent) kids.next());
-        assertEquals(comp3, (UIComponent) kids.next());
-        assertEquals(comp4, (UIComponent) kids.next());
-        assertEquals(comp4, (UIComponent) kids.previous());
-        assertEquals(comp3, (UIComponent) kids.previous());
-        assertEquals(comp2, (UIComponent) kids.previous());
-        assertEquals(comp1, (UIComponent) kids.previous());
-
-        // Test IOB exception for list iterator
-        component.getChildren().clear();
-        component.getChildren().addAll(comps);
-        try {
-            component.getChildren().listIterator(-1);
-            fail("Should throw IndexOutOfBoundsException on index -1");
-        } catch (IndexOutOfBoundsException e) {
-            ;//Expected result
-        }
-
-        try {
-            component.getChildren().listIterator(component.getChildren().size() + 1);
-            fail("Should throw IndexOutOfBoundsException on index = size() + 1");
-        } catch (IndexOutOfBoundsException e) {
-            ;//Expected result
-        }
-
-        //Iterate with list iterator in reverse order
-        int i = component.getChildren().size() - 1;
-        for (ListIterator<UIComponent> li = component.getChildren().listIterator(
-                component.getChildren().size()); li.hasPrevious();) {
-
-            assertEquals(comps.get(i--), li.previous());
-        }
-
-    }
-
-
-    // Negative tests on children methods
-    public void testChidrenNegative() {
-
-        // Construct components we will need
-        UIComponent comp0 = new TestComponent(null);
-        UIComponent comp1 = new TestComponent("comp1");
-        UIComponent comp2 = new TestComponent("comp2");
-        UIComponent comp3 = new TestComponent("comp3");
-
-        // Set up and verify initial state
-        List children = component.getChildren();
-        children.add(comp0);
-        children.add(comp1);
-        children.add(comp2);
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // add(Object) - ClassCastException
-        try {
-            children.add("String");
-            fail("Should have thrown ClassCastException");
-        } catch (ClassCastException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // add(Object) - NullPointerException
-        try {
-            children.add(null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // add(int,Object) - ClassCastException
-        try {
-            children.add(1, "String");
-            fail("Should have thrown ClassCastException");
-        } catch (ClassCastException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // add(int,Object) - IndexOutOfBoundsException low
-        try {
-            children.add(-1, comp3);
-            fail("Should have thrown IndexOutOfBoundsException low");
-        } catch (IndexOutOfBoundsException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // add(int,Object) - IndexOutOfBoundsException high
-        try {
-            children.add(4, comp3);
-            fail("Should have thrown IndexOutOfBoundsException high");
-        } catch (IndexOutOfBoundsException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // add(int,Object) - NullPointerException
-        try {
-            children.add(1, null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // set(int,Object) - ClassCastException
-        try {
-            children.set(1, "String");
-            fail("Should have thrown ClassCastException");
-        } catch (ClassCastException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // set(int,Object) - IndexOutOfBoundsException low
-        try {
-            children.set(-1, comp3);
-            fail("Should have thrown IndexOutOfBoundsException low");
-        } catch (IndexOutOfBoundsException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // set(int,Object) - IndexOutOfBoundsException high
-        try {
-            children.set(4, comp3);
-            fail("Should have thrown IndexOutOfBoundsException high");
-        } catch (IndexOutOfBoundsException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-        // set(int,Object) - NullPointerException
-        try {
-            children.set(1, null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildMissing(component, comp3);
-
-    }
-
-
-    // Positive tests on children methods
-    public void testChildrenPositive() {
-
-        // Construct components we will need
-        UIComponent comp0 = new TestComponent(null);
-        UIComponent comp1 = new TestComponent("comp1");
-        UIComponent comp2 = new TestComponent("comp2");
-        UIComponent comp3 = new TestComponent("comp3");
-        UIComponent comp4 = new TestComponent("comp4");
-        UIComponent comp5 = new TestComponent("comp5");
-        UIComponent comp6 = new TestComponent("comp6");
-
-        // Verify initial state
-        List children = component.getChildren();
-        checkChildMissing(component, comp0);
-        checkChildCount(component, 0);
-        checkChildMissing(component, comp1);
-        checkChildMissing(component, comp2);
-        checkChildMissing(component, comp3);
-        checkChildMissing(component, comp4);
-        checkChildMissing(component, comp5);
-        checkChildMissing(component, comp6);
-
-        // add(Object)
-        children.add(comp1);
-        checkChildCount(component, 1);
-        checkChildMissing(component, comp0);
-        checkChildPresent(component, comp1, 0);
-        checkChildMissing(component, comp2);
-        checkChildMissing(component, comp3);
-        checkChildMissing(component, comp4);
-        checkChildMissing(component, comp5);
-        checkChildMissing(component, comp6);
-
-        // add(int, Object)
-        children.add(0, comp0);
-        checkChildCount(component, 2);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildMissing(component, comp2);
-        checkChildMissing(component, comp3);
-        checkChildMissing(component, comp4);
-        checkChildMissing(component, comp5);
-        checkChildMissing(component, comp6);
-
-        // addAll(Collection)
-        ArrayList list1 = new ArrayList();
-        list1.add(comp4);
-        list1.add(comp5);
-        children.addAll(list1);
-        checkChildCount(component, 4);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildMissing(component, comp2);
-        checkChildMissing(component, comp3);
-        checkChildPresent(component, comp4, 2);
-        checkChildPresent(component, comp5, 3);
-        checkChildMissing(component, comp6);
-
-        // addAll(int, Collection)
-        ArrayList list2 = new ArrayList();
-        list2.add(comp2);
-        list2.add(comp3);
-        children.addAll(2, list2);
-        checkChildCount(component, 6);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildPresent(component, comp3, 3);
-        checkChildPresent(component, comp4, 4);
-        checkChildPresent(component, comp5, 5);
-        checkChildMissing(component, comp6);
-
-        // contains(Object) is tested in checkChildPresent / checkChildMissing
-
-        // containsAll(Collection)
-        assertTrue(children.containsAll(list1));
-        assertTrue(children.containsAll(list2));
-
-        // get(int) is tested in checkChildPresent / checkChildMissing
-
-        // indexOf(Object) is tested in checkChildPresent / checkChildMissing
-
-        // isEmpty() is tested in checkChildCount
-
-        // iterator() is tested in testChildrenIterator
-
-        // listIterator() is tested in testChildrenListIterator
-
-        // toArray(Object[])
-        UIComponent kids[] =
-                (UIComponent[]) children.toArray(new UIComponent[0]);
-        assertEquals(comp0, kids[0]);
-        assertEquals(comp1, kids[1]);
-        assertEquals(comp2, kids[2]);
-        assertEquals(comp3, kids[3]);
-        assertEquals(comp4, kids[4]);
-        assertEquals(comp5, kids[5]);
-
-        // subList(int,int)
-        List subList = children.subList(3, 5);
-        assertEquals(2, subList.size());
-        assertEquals(comp3, (UIComponent) subList.get(0));
-        assertEquals(comp4, (UIComponent) subList.get(1));
-
-        // set(int,Object)
-        children.set(4, comp6);
-        checkChildCount(component, 6);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildPresent(component, comp3, 3);
-        checkChildMissing(component, comp4);
-        checkChildPresent(component, comp5, 5);
-        checkChildPresent(component, comp6, 4);
-        assertTrue(!children.containsAll(list1));
-        assertTrue(children.containsAll(list2));
-
-        // remove(int)
-        children.remove(4);
-        checkChildCount(component, 5);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildPresent(component, comp2, 2);
-        checkChildPresent(component, comp3, 3);
-        checkChildMissing(component, comp4);
-        checkChildPresent(component, comp5, 4);
-        checkChildMissing(component, comp6);
-        assertTrue(!children.containsAll(list1));
-        assertTrue(children.containsAll(list2));
-
-        // removeAll(Collection)
-        children.removeAll(list2);
-        checkChildCount(component, 3);
-        checkChildPresent(component, comp0, 0);
-        checkChildPresent(component, comp1, 1);
-        checkChildMissing(component, comp2);
-        checkChildMissing(component, comp3);
-        checkChildMissing(component, comp4);
-        checkChildPresent(component, comp5, 2);
-        checkChildMissing(component, comp6);
-        assertTrue(!children.containsAll(list1));
-        assertTrue(!children.containsAll(list2));
-
-        // retainAll()
-        ArrayList list3 = new ArrayList();
-        list3.add(comp1);
-        list3.add(comp3);
-        list3.add(comp5);
-        children.retainAll(list3);
-        checkChildCount(component, 2);
-        checkChildMissing(component, comp0);
-        checkChildPresent(component, comp1, 0);
-        checkChildMissing(component, comp2);
-        checkChildMissing(component, comp3);
-        checkChildMissing(component, comp4);
-        checkChildPresent(component, comp5, 1);
-        checkChildMissing(component, comp6);
-        assertTrue(!children.containsAll(list3));
-
-        // size() is tested in checkChildCount
-
-        // clear()
-        children.clear();
-        checkChildCount(component, 0);
-        assertNull(comp0.getParent());
-        assertNull(comp1.getParent());
-        assertNull(comp2.getParent());
-        assertNull(comp3.getParent());
-        assertNull(comp4.getParent());
-        assertNull(comp5.getParent());
-        assertNull(comp6.getParent());
-
-    }
-
-
-    // Test replacing a child with a new one that has the same id
-    public void testChidrenReplace() {
-
-        TestComponent child1 = new TestComponent("child");
-        TestComponent child2 = new TestComponent("child");
-
-        checkChildCount(component, 0);
-        component.getChildren().add(child1);
-        checkChildCount(component, 1);
-        checkChildPresent(component, child1, 0);
-        checkChildMissing(component, child2);
-        component.getChildren().set(0, child2);
-        checkChildCount(component, 1);
-        checkChildMissing(component, child1);
-        checkChildPresent(component, child2, 0);
-        component.getChildren().clear();
-        checkChildCount(component, 0);
-
-    }
-
-
-    // Test Set returned by getFacets().entrySet()
-    public void testFacetsMapEntrySet() {
-
-        Map facets;
-        Set matches;
-        Set entrySet;
-        Iterator entries;
-
-        // Construct the pre-load set of facets we will need
-        UIComponent facet1 = new TestComponent("facet1");
-        UIComponent facet2 = new TestComponent("facet2");
-        UIComponent facet3 = new TestComponent("facet3");
-        UIComponent facet4 = new TestComponent("facet4");
-        UIComponent facet5 = new TestComponent("facet5");
-        UIComponent facet6 = new TestComponent("facet6"); // Not normally added
-        Map preload = new HashMap<String, UIComponent>();
-        preload.put("a", facet1);
-        preload.put("b", facet2);
-        preload.put("c", facet3);
-        preload.put("d", facet4);
-        preload.put("e", facet5);
-
-        // Test add()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        try {
-            entrySet.add(bogusEntry);
-            fail("Should have thrown UnsupportedOperationExcepton");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-        // Test addAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        try {
-            entrySet.addAll(preload.values());
-            fail("Should have thrown UnsupportedOperationExcepton");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-
-        // Test clear()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        assertEquals(5, facets.size());
-        assertEquals(5, entrySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-        entrySet.clear();
-        assertEquals(0, facets.size());
-        assertEquals(0, entrySet.size());
-        checkFacetMissing(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetMissing(component, "e", facet5);
-
-        // Test contains()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        assertTrue(entrySet.contains(new TestMapEntry("a", facet1)));
-        assertTrue(entrySet.contains(new TestMapEntry("b", facet2)));
-        assertTrue(entrySet.contains(new TestMapEntry("c", facet3)));
-        assertTrue(entrySet.contains(new TestMapEntry("d", facet4)));
-        assertTrue(entrySet.contains(new TestMapEntry("e", facet5)));
-        assertTrue(!entrySet.contains(new TestMapEntry("f", facet6)));
-
-        // Test containsAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        matches = new HashSet();
-        matches.add(new TestMapEntry("a", facet1));
-        matches.add(new TestMapEntry("c", facet3));
-        matches.add(new TestMapEntry("d", facet4));
-        assertTrue(entrySet.containsAll(matches));
-        matches = new HashSet();
-        matches.add(new TestMapEntry("a", facet1));
-        matches.add(new TestMapEntry("c", facet3));
-        matches.add(new TestMapEntry("f", facet6));
-        assertTrue(!entrySet.containsAll(matches));
-
-        // Test iterator().hasNext() and iterator().next()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        matches = new HashSet();
-        entries = entrySet.iterator();
-        while (entries.hasNext()) {
-            matches.add(entries.next());
-        }
-        assertTrue(entrySet.equals(matches));
-
-        // Test iterator().remove()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        entries = entrySet.iterator();
-        while (entries.hasNext()) {
-            Map.Entry entry = (Map.Entry) entries.next();
-            if ("b".equals(entry.getKey()) || "d".equals(entry.getKey())) {
-                entries.remove();
-            }
-        }
-        assertEquals(3, facets.size());
-        assertEquals(3, entrySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test iterator() based modify-value
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        entries = entrySet.iterator();
-        while (entries.hasNext()) {
-            Map.Entry entry = (Map.Entry) entries.next();
-            if ("c".equals(entry.getKey())) {
-                entry.setValue(facet6);
-            }
-        }
-        assertEquals(5, facets.size());
-        assertEquals(5, entrySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetPresent(component, "c", facet6);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test remove()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        entrySet.remove(new TestMapEntry("c", facet3));
-        assertEquals(4, facets.size());
-        assertEquals(4, entrySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test removeAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        matches = new HashSet();
-        matches.add(new TestMapEntry("b", facet2));
-        matches.add(new TestMapEntry("d", facet4));
-        entrySet.removeAll(matches);
-        assertEquals(3, facets.size());
-        assertEquals(3, entrySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test retainAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        entrySet = facets.entrySet();
-        matches = new HashSet();
-        matches.add(new TestMapEntry("b", facet2));
-        matches.add(new TestMapEntry("d", facet4));
-        matches.add(new TestMapEntry("f", facet6));
-        entrySet.retainAll(matches);
-        assertEquals(2, facets.size());
-        assertEquals(2, entrySet.size());
-        checkFacetMissing(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetMissing(component, "e", facet5);
-
-    }
-
-
-    // Test Set returned by getFacets().keySet()
-    public void testFacetsMapKeySet() {
-
-        Map facets;
-        Set matches;
-        Set keySet;
-        Iterator keys;
-
-        // Construct the pre-load set of facets we will need
-        UIComponent facet1 = new TestComponent("facet1");
-        UIComponent facet2 = new TestComponent("facet2");
-        UIComponent facet3 = new TestComponent("facet3");
-        UIComponent facet4 = new TestComponent("facet4");
-        UIComponent facet5 = new TestComponent("facet5");
-        UIComponent facet6 = new TestComponent("facet6"); // Not normally added
-        Map preload = new HashMap();
-        preload.put("a", facet1);
-        preload.put("b", facet2);
-        preload.put("c", facet3);
-        preload.put("d", facet4);
-        preload.put("e", facet5);
-
-        // Test add()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        try {
-            keySet.add("bogusEntry");
-            fail("Should have thrown UnsupportedOperationExcepton");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-        // Test addAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        try {
-            keySet.addAll(preload.values());
-            fail("Should have thrown UnsupportedOperationExcepton");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-
-        // Test clear()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        assertEquals(5, facets.size());
-        assertEquals(5, keySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-        keySet.clear();
-        assertEquals(0, facets.size());
-        assertEquals(0, keySet.size());
-        checkFacetMissing(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetMissing(component, "e", facet5);
-
-        // Test contains()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        assertTrue(keySet.contains("a"));
-        assertTrue(keySet.contains("b"));
-        assertTrue(keySet.contains("c"));
-        assertTrue(keySet.contains("d"));
-        assertTrue(keySet.contains("e"));
-        assertTrue(!keySet.contains("f"));
-
-        // Test containsAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        matches = new HashSet();
-        matches.add("a");
-        matches.add("c");
-        matches.add("d");
-        assertTrue(keySet.containsAll(matches));
-        matches = new HashSet();
-        matches.add("a");
-        matches.add("c");
-        matches.add("f");
-        assertTrue(!keySet.containsAll(matches));
-
-        // Test iterator().hasNext() and iterator().next()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        matches = new HashSet();
-        keys = keySet.iterator();
-        while (keys.hasNext()) {
-            matches.add(keys.next());
-        }
-        assertTrue(keySet.equals(matches));
-
-        // Test iterator().remove()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        keys = keySet.iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            if ("b".equals(key) || "d".equals(key)) {
-                keys.remove();
-            }
-        }
-        assertEquals(3, facets.size());
-        assertEquals(3, keySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-
-        // Test remove()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        keySet.remove("c");
-        assertEquals(4, facets.size());
-        assertEquals(4, keySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test removeAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        matches = new HashSet();
-        matches.add("b");
-        matches.add("d");
-        keySet.removeAll(matches);
-        assertEquals(3, facets.size());
-        assertEquals(3, keySet.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test retainAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        keySet = facets.keySet();
-        matches = new HashSet();
-        matches.add("b");
-        matches.add("d");
-        matches.add("f");
-        keySet.retainAll(matches);
-        assertEquals(2, facets.size());
-        assertEquals(2, keySet.size());
-        checkFacetMissing(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetMissing(component, "e", facet5);
-
-    }
-
-
-    // Test Collection returned by getFacets().values()
-    public void testFacetsMapValues() {
-
-        Map facets;
-        Collection matches;
-        Collection values;
-        Iterator vals;
-
-        // Construct the pre-load set of facets we will need
-        UIComponent facet1 = new TestComponent("facet1");
-        UIComponent facet2 = new TestComponent("facet2");
-        UIComponent facet3 = new TestComponent("facet3");
-        UIComponent facet4 = new TestComponent("facet4");
-        UIComponent facet5 = new TestComponent("facet5");
-        UIComponent facet6 = new TestComponent("facet6"); // Not normally added
-        Map preload = new HashMap();
-        preload.put("a", facet1);
-        preload.put("b", facet2);
-        preload.put("c", facet3);
-        preload.put("d", facet4);
-        preload.put("e", facet5);
-
-        // Test add()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        try {
-            values.add(new TestComponent("facet0"));
-            fail("Should have thrown UnsupportedOperationExcepton");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-        // Test addAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        try {
-            values.addAll(preload.values());
-            fail("Should have thrown UnsupportedOperationExcepton");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-
-        // Test clear()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        assertEquals(5, facets.size());
-        assertEquals(5, values.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-        values.clear();
-        assertEquals(0, facets.size());
-        assertEquals(0, values.size());
-        checkFacetMissing(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetMissing(component, "e", facet5);
-
-        // Test contains()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        assertTrue(values.contains(facet1));
-        assertTrue(values.contains(facet2));
-        assertTrue(values.contains(facet3));
-        assertTrue(values.contains(facet4));
-        assertTrue(values.contains(facet5));
-        assertTrue(!values.contains(facet6));
-
-        // Test containsAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        matches = new ArrayList();
-        matches.add(facet1);
-        matches.add(facet3);
-        matches.add(facet4);
-        assertTrue(values.containsAll(matches));
-        matches = new ArrayList();
-        matches.add(facet1);
-        matches.add(facet3);
-        matches.add(facet6);
-        assertTrue(!values.containsAll(matches));
-
-        // Test iterator().hasNext() and iterator().next()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        matches = new ArrayList();
-        vals = values.iterator();
-        while (vals.hasNext()) {
-            matches.add(vals.next());
-        }
-        assertTrue(matches.containsAll(values));
-
-        // Test iterator().remove()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        vals = values.iterator();
-        while (vals.hasNext()) {
-            UIComponent val = (UIComponent) vals.next();
-            if (facet2.equals(val) || facet4.equals(val)) {
-                vals.remove();
-            }
-        }
-        assertEquals(3, facets.size());
-        assertEquals(3, values.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test remove()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        values.remove(facet3);
-        assertEquals(4, facets.size());
-        assertEquals(4, values.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test removeAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        matches = new ArrayList();
-        matches.add(facet2);
-        matches.add(facet4);
-        values.removeAll(matches);
-        assertEquals(3, facets.size());
-        assertEquals(3, values.size());
-        checkFacetPresent(component, "a", facet1);
-        checkFacetMissing(component, "b", facet2);
-        checkFacetPresent(component, "c", facet3);
-        checkFacetMissing(component, "d", facet4);
-        checkFacetPresent(component, "e", facet5);
-
-        // Test retainAll()
-        facets = component.getFacets();
-        facets.clear();
-        facets.putAll(preload);
-        values = facets.values();
-        matches = new ArrayList();
-        matches.add(facet2);
-        matches.add(facet4);
-        matches.add(facet6);
-        values.retainAll(matches);
-        assertEquals(2, facets.size());
-        assertEquals(2, values.size());
-        checkFacetMissing(component, "a", facet1);
-        checkFacetPresent(component, "b", facet2);
-        checkFacetMissing(component, "c", facet3);
-        checkFacetPresent(component, "d", facet4);
-        checkFacetMissing(component, "e", facet5);
-
-    }
-
-
-    // Negative tests on facet methods
-    public void testFacetsNegative() {
-
-        // Construct components we will need
-        UIComponent facet1 = new TestComponent("facet1");
-        UIComponent facet2 = new TestComponent("facet2");
-        UIComponent facet3 = new TestComponent("facet3");
-
-        // Set up and verify initial conditions
-        Map facets = component.getFacets();
-        facets.put("facet1", facet1);
-        facets.put("facet2", facet2);
-        checkFacetCount(component, 2);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetPresent(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-
-        // put(Object,Object) - null first argument
-        try {
-            facets.put(null, facet3);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-        checkFacetCount(component, 2);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetPresent(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-
-        // put(Object,Object) - null second argument
-        try {
-            facets.put("facet3", null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        }
-        checkFacetCount(component, 2);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetPresent(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-
-        // put(Object,Object) - non-String first argument
-        try {
-            facets.put(facet3, facet3);
-            fail("Should have thrown ClassCastException");
-        } catch (ClassCastException e) {
-            ; // Expected result
-        }
-        checkFacetCount(component, 2);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetPresent(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-
-        // put(Object,Object) - non-UIComponent second argument
-        try {
-            facets.put("facet3", "facet3");
-            fail("Should have thrown ClassCastException");
-        } catch (ClassCastException e) {
-            ; // Expected result
-        }
-        checkFacetCount(component, 2);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetPresent(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-
-    }
-
-
-    // Positive tests on facet methods
-    public void testFacetsPositive() {
-
-        // Construct components we will need
-        UIComponent facet1 = new TestComponent("facet1");
-        UIComponent facet2 = new TestComponent("facet2");
-        UIComponent facet3 = new TestComponent("facet3");
-        UIComponent facet4 = new TestComponent("facet4");
-        UIComponent facet5 = new TestComponent("facet5");
-        UIComponent facet6 = new TestComponent("facet6");
-
-        // Verify initial conditions
-        Map facets = component.getFacets();
-        checkFacetCount(component, 0);
-        checkFacetMissing(component, "facet1", facet1);
-        checkFacetMissing(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-        checkFacetMissing(component, "facet4", facet4);
-        checkFacetMissing(component, "facet5", facet5);
-
-        // containsKey(Object) is tested in checkFacetMissing / checkFacetPresent
-
-        // containsValue(Object) is tested in checkFacetMissing / checkFacetPresent
-
-        // entrySet() is tested in testFacetsMapEntrySet()
-
-        // get(Object) is tested in checkFacetMissing / checkFacetPresent
-
-        // isEmpty() is tested in checkFacetCount
-
-        // keySet() is tested in testFacetsMapKeySet()
-
-        // put(Object,Object)
-        facets.put("facet1", facet1);
-        checkFacetCount(component, 1);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetMissing(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-        checkFacetMissing(component, "facet4", facet4);
-        checkFacetMissing(component, "facet5", facet5);
-
-        // put(Object,Object)
-        facets.put("facet4", facet4);
-        checkFacetCount(component, 2);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetMissing(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-        checkFacetPresent(component, "facet4", facet4);
-        checkFacetMissing(component, "facet5", facet5);
-
-        // putAll(Map)
-        Map map = new HashMap();
-        map.put("facet2", facet2);
-        map.put("facet3", facet3);
-        facets.putAll(map);
-        checkFacetCount(component, 4);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetPresent(component, "facet2", facet2);
-        checkFacetPresent(component, "facet3", facet3);
-        checkFacetPresent(component, "facet4", facet4);
-        checkFacetMissing(component, "facet5", facet5);
-
-        // remove(Object)
-        facets.remove("facet3");
-        checkFacetCount(component, 3);
-        checkFacetPresent(component, "facet1", facet1);
-        checkFacetPresent(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-        checkFacetPresent(component, "facet4", facet4);
-        checkFacetMissing(component, "facet5", facet5);
-
-        // values() is tested in testFacetsMapValues()
-
-        // clear()
-        facets.clear();
-        checkFacetCount(component, 0);
-        checkFacetMissing(component, "facet1", facet1);
-        checkFacetMissing(component, "facet2", facet2);
-        checkFacetMissing(component, "facet3", facet3);
-        checkFacetMissing(component, "facet4", facet4);
-        checkFacetMissing(component, "facet5", facet5);
-
-    }
-
-
-    // Test a pristine UIComponent instance 
-    public void testPristine() {
-
-        // Validate attributes
-        checkAttributeCount(component, expectedAttributes.length);
-        for (int i = 0; i < expectedAttributes.length; i++) {
-            checkAttributePresent(component, expectedAttributes[i], null);
-        }
-
-        // Validate properties
-        assertEquals("expected family",
-                expectedFamily, component.getFamily());
-        assertEquals("expected id",
-                expectedId, component.getId());
-        assertNull("no parent", component.getParent());
-        assertEquals("expected rendered",
-                expectedRendered, component.isRendered());
-        assertEquals("expected rendererType",
-                expectedRendererType, component.getRendererType());
-        assertEquals("expected rendersChildren",
-                expectedRendersChildren, component.getRendersChildren());
-
-        // Validate children and facets
-        checkChildCount(component, 0);
-        checkFacetCount(component, 0);
-        int n = 0;
-        Iterator items = component.getFacetsAndChildren();
-        assertNotNull("iterator returned", items);
-        while (items.hasNext()) {
-            items.next();
-            n++;
-        }
-        assertEquals("facets and children", 0, n);
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        // id - zero length
-        try {
-            component.setId("");
-            fail("should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-        // id - leading digits
-        try {
-            component.setId("1abc");
-            fail("should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-        // id - invalid characters 1
-        try {
-            component.setId("a*c");
-            fail("should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-        // id - invalid characters 2
-        try {
-            component.setId(" abc");
-            fail("should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-        // id - invalid characters 3
-        try {
-            component.setId("-abc");
-            fail("should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        // id - simple name
-        component.setId("foo");
-        assertEquals("expected id",
-                "foo", component.getId());
-
-        // id - complex name
-        component.setId("a123-bcd_e");
-        assertEquals("expected id",
-                "a123-bcd_e", component.getId());
-
-        // parent
-        UIComponent parent = new TestComponent("parent");
-        component.setParent(parent);
-        assertEquals("expected parent",
-                parent, component.getParent());
-
-        // rendered
-        component.setRendered(!expectedRendered);
-        assertEquals("expected rendered",
-                !expectedRendered, component.isRendered());
-
-        // rendererType
-        component.setRendererType("foo");
-        assertEquals("expected rendererType",
-                "foo", component.getRendererType());
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Validate that the specified number of attributes are present.
-
-    protected void checkAttributeCount(UIComponent component, int count) {
-        int result = 0;
-        Iterator names = component.getAttributes().keySet().iterator();
-        while (names.hasNext()) {
-            names.next();
-            result++;
-        }
-        assertEquals("attribute count", count, result);
-    }
-
-
-    // Validate that the specified attribute name is not present
-    protected void checkAttributeMissing(UIComponent component,
-                                         String name) {
-        assertNull("Attribute " + name + " should be missing",
-                component.getAttributes().get(name));
-        Iterator keys = component.getAttributes().keySet().iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            if (name.equals(key)) {
-                fail("Attribute " + name + " should not be in names list");
-            }
-        }
-    }
-
-
-    // Validate that the specified attribute name is present with the
-    // specified value (if value is not null)
-    protected void checkAttributePresent(UIComponent component,
-                                         String name, Object value) {
-        assertNotNull("attribute " + name + " should be present",
-                component.getAttributes().get(name));
-        if (value != null) {
-            assertEquals("attribute " + name + " value should be equal",
-                    value, component.getAttributes().get(name));
-        }
-        Iterator keys = component.getAttributes().keySet().iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            if (name.equals(key)) {
-                if (value != null) {
-                    assertEquals("attribute " + name + " value should match",
-                            value, component.getAttributes().get(name));
-                }
-                return;
-            }
-        }
-        fail("attribute " + name + " should be in name list");
-
-    }
-
-
-    // Validate that the specified number of children are present
-    protected void checkChildCount(UIComponent component, int count) {
-        assertEquals("child count 1", count, component.getChildCount());
-        assertEquals("child count 2",
-                count, component.getChildren().size());
-        assertEquals("child count 3", count, component.getChildCount());
-        if (count == 0) {
-            assertTrue("children empty", component.getChildren().isEmpty());
-        } else {
-            assertTrue("children not empty", !component.getChildren().isEmpty());
-        }
-    }
-
-
-    // Validate that the specified child is not present
-    protected void checkChildMissing(UIComponent component,
-                                     UIComponent child) {
-        assertNull("child " + child + " has no parent",
-                child.getParent());
-        List children = component.getChildren();
-        assertTrue("child " + child + " should not be contained",
-                !children.contains(child));
-        assertEquals("child " + child + " should not be found by indexOf",
-                -1, children.indexOf(child));
-        for (int i = 0; i < children.size(); i++) {
-            if (child.equals((UIComponent) children.get(i)))
-                fail("child " + child + " should be missing");
-        }
-    }
-
-
-    // Validate that the specified child is present at the specified index
-    protected void checkChildPresent(UIComponent component,
-                                     UIComponent child, int index) {
-        List children = component.getChildren();
-        assertTrue("child " + child + " should be contained",
-                children.contains(child));
-        assertEquals("child " + child + " should be found by indexOf",
-                index, children.indexOf(child));
-        UIComponent kid = (UIComponent) children.get(index);
-        assertEquals("child " + child + " should be present",
-                child, kid);
-        assertEquals("child " + child + " has correct parent",
-                component, kid.getParent());
-    }
-
-
-    // Validate that the specified number of facets is present
-    protected void checkFacetCount(UIComponent component, int count) {
-        assertEquals("facet count",
-                count, component.getFacets().size());
-        if (count == 0) {
-            assertTrue("facets empty",
-                    component.getFacets().isEmpty());
-        } else {
-            assertTrue("facets not empty",
-                    !component.getFacets().isEmpty());
-        }
-    }
-
-
-    // Validate that the specified facet is not present
-    protected void checkFacetMissing(UIComponent component,
-                                     String name, UIComponent facet) {
-        assertNull("facet " + name + " has no parent",
-                facet.getParent());
-        Map facets = component.getFacets();
-        assertTrue("facet " + name + " key not present",
-                !facets.containsKey(name));
-        assertTrue("facet " + name + " value not present",
-                !facets.containsValue(facet));
-        assertNull("facet " + name + " key not found by get",
-                facets.get(name));
-        assertNull("facet " + name + " not returned by getFacet(String)",
-                component.getFacet(name));
-        Iterator keys = facets.keySet().iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            if (name.equals(key)) {
-                fail("facet " + name + " found in keys");
-            }
-        }
-        Iterator values = facets.values().iterator();
-        while (values.hasNext()) {
-            UIComponent value = (UIComponent) values.next();
-            if (facet.equals(value)) {
-                fail("facet " + name + " found in values");
-            }
-        }
-    }
-
-
-    // Validate that the specified facet is present
-    protected void checkFacetPresent(UIComponent component,
-                                     String name, UIComponent facet) {
-
-        assertEquals("facet " + name + " has correct parent",
-                component, facet.getParent());
-        Map facets = component.getFacets();
-        assertTrue("facet " + name + " key is present",
-                facets.containsKey(name));
-        assertTrue("facet " + name + " value is present",
-                facets.containsValue(facet));
-        assertEquals("facet " + name + " has correct value",
-                facet, (UIComponent) facets.get(name));
-        assertTrue("facet " + name + " returned by getFacet(String)",
-                facet == component.getFacet(name));
-        boolean found = false;
-        Iterator keys = facets.keySet().iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            if (name.equals(key)) {
-                found = true;
-                break;
-            }
-        }
-        if (!found) {
-            fail("facet " + name + " not found in keys");
-        }
-        found = false;
-        Iterator values = facets.values().iterator();
-        while (values.hasNext()) {
-            UIComponent value = (UIComponent) values.next();
-            if (facet.equals(value)) {
-                found = true;
-                break;
-            }
-        }
-        if (!found) {
-            fail("facet " + name + " not found in values");
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Classes
-
-
-    // Test Implementation of Map.Entry
-
-    private class TestMapEntry implements Map.Entry {
-
-        public TestMapEntry(Object key, Object value) {
-            this.key = key;
-            this.value = value;
-        }
-
-        private Object key;
-        private Object value;
-
-        public boolean equals(Object o) {
-            if (o == null) {
-                return (false);
-            }
-            if (!(o instanceof Map.Entry)) {
-                return (false);
-            }
-            Map.Entry e = (Map.Entry) o;
-            if (key == null) {
-                if (e.getKey() != null) {
-                    return (false);
-                }
-            } else {
-                if (!key.equals(e.getKey())) {
-                    return (false);
-                }
-            }
-            if (value == null) {
-                if (e.getValue() != null) {
-                    return (false);
-                }
-            } else {
-                if (!value.equals(e.getValue())) {
-                    return (false);
-                }
-            }
-            return (true);
-        }
-
-        public Object getKey() {
-            return (key);
-        }
-
-        public Object getValue() {
-            return (value);
-        }
-
-        public int hashCode() {
-            return (((key == null) ? 0 : key.hashCode()) ^
-                    ((value == null) ? 0 : value.hashCode()));
-        }
-
-        public Object setValue(Object value) {
-            Object previous = this.value;
-            this.value = value;
-            return (previous);
-        }
-
-    }
-
-
-    public static class Listener implements ComponentSystemEventListener, Serializable {
-
-        private StringBuilder sb = new StringBuilder();
-
-        public void processEvent(ComponentSystemEvent event)
-              throws AbortProcessingException {
-            UIComponent source = ((UIComponent) event.getSource());
-            Boolean validatorCalled = (Boolean) source.getAttributes().remove("vCalled");
-            if (validatorCalled != null) {
-                sb.append("*/");
-            }
-            sb.append(source.getId()).append('/');
-        }
-
-        public String getResults() {
-            return sb.toString();
-        }
-    }
-
-
-    public static class ValidationSignal implements Validator {
-
-        public void validate(FacesContext context,
-                             UIComponent component,
-                             Object value) throws ValidatorException {
-
-            component.getAttributes().put("vCalled", Boolean.TRUE);
-
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataHeaderBean.java b/jsf-api/src/test/java/javax/faces/component/UIDataHeaderBean.java
deleted file mode 100644
index a622032..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataHeaderBean.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-
-
-// Bean used to verify that command and input components in the header facet
-
-// of a column only get processed once, instead of once per row.
-public class UIDataHeaderBean {
-
-
-    private int actionCount = 0;
-
-    public int getActionCount() {
-        return actionCount;
-    }
-
-    private int updateCount = 0;
-
-    public int getUpdateCount() {
-        return updateCount;
-    }
-
-    private int validateCount = 0;
-
-    public int getValidateCount() {
-        return validateCount;
-    }
-
-
-    // Action method for a command in the header facet
-    public void action(ActionEvent event) {
-        actionCount++;
-    }
-
-
-    // Read/write property so that we can count updates
-    private String value = "Initial Value";
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-        updateCount++;
-    }
-
-
-    // Validator method for an input in the header facet
-    public void validate(FacesContext context, UIComponent component,
-                         Object value) {
-        validateCount++;
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase.java
deleted file mode 100644
index 87df0cc..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase.java
+++ /dev/null
@@ -1,2697 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.ActionEvent;
-
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockResponseWriter;
-
-import javax.faces.FacesException;
-import javax.faces.TestUtil;
-import javax.faces.component.UIComponentBaseTestCase;
-import javax.faces.model.DataModel;
-import javax.faces.model.ListDataModel;
-import javax.faces.render.Renderer;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UIData}.</p>
- */
-
-public class UIDataTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIDataTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-
-    public void setUp() {
-        super.setUp();
-        component = new UIData();
-        expectedFamily = UIData.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = "javax.faces.Table";
-        expectedRendersChildren = true;
-        beans = new ArrayList();
-        for (int i = 0; i < 10; i++) {
-            TestDataBean bean = new TestDataBean();
-            bean.setCommand("command" + i);
-            bean.setInput("input" + i);
-            bean.setOutput("output" + i);
-            beans.add(bean);
-        }
-        model = new ListDataModel(beans);
-        assertEquals(10, model.getRowCount());
-        swriter = new StringWriter();
-        facesContext.setResponseWriter(new MockResponseWriter(swriter, null));
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIDataTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-        beans = null;
-        model = null;
-        swriter = null;
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The list of beans represented by our DataModel instance
-    protected List beans = null;
-
-
-    // The DataModel wrapping our list of beans
-    protected DataModel model = null;
-
-
-    // The StringWriter used to buffer our rendered output
-    protected StringWriter swriter = null;
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testClearDataModelCache() throws Exception {
-
-        UIData data = (UIData) component;
-        data.setValue(new String[]{"A", "B"});
-        DataModel model = data.getDataModel();
-
-        // setting row index to -1 clears the model cache
-        data.setRowIndex(-1);
-        DataModel model2 = data.getDataModel();
-        System.out.println(model.toString() + ' ' + model2.toString());
-        assertTrue(model != model2);
-
-    }
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UIData data = (UIData) component;
-
-        assertEquals(data.getValue(),
-                (String) component.getAttributes().get("value"));
-        data.setValue("foo");
-        assertEquals("foo", (String) component.getAttributes().get("value"));
-        data.setValue(null);
-        assertNull((String) component.getAttributes().get("value"));
-        component.getAttributes().put("value", "bar");
-        assertEquals("bar", data.getValue());
-        component.getAttributes().put("value", null);
-        assertNull(data.getValue());
-
-        data.setFirst(6);
-        assertEquals(data.getFirst(),
-                ((Integer) data.getAttributes().get("first")).intValue());
-        data.getAttributes().put("first", new Integer(7));
-        assertEquals(data.getFirst(),
-                ((Integer) data.getAttributes().get("first")).intValue());
-
-        data.setRows(10);
-        assertEquals(data.getRows(),
-                ((Integer) data.getAttributes().get("rows")).intValue());
-        data.getAttributes().put("rows", new Integer(20));
-        assertEquals(data.getRows(),
-                ((Integer) data.getAttributes().get("rows")).intValue());
-
-        assertEquals(data.getVar(),
-                (String) data.getAttributes().get("var"));
-        data.setVar("foo");
-        assertEquals("foo", (String) data.getAttributes().get("var"));
-        data.setVar(null);
-        assertNull((String) data.getAttributes().get("var"));
-        data.getAttributes().put("var", "bar");
-        assertEquals("bar", data.getVar());
-        data.getAttributes().put("var", null);
-        assertNull(data.getVar());
-
-    }
-
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-
-    // Test a UIData instance with a pristine DataModel and "var"
-    public void testModelPristine() throws Exception {
-
-        UIData data = (UIData) component;
-        setupModel();
-        assertEquals("correct first", 3, data.getFirst());
-        assertEquals("correct rowCount", beans.size(), data.getRowCount());
-        assertEquals("correct rowIndex", -1, data.getRowIndex());
-        assertEquals("correct rows", 5, data.getRows());
-        assertTrue("correct value", model == (DataModel) data.getValue());
-
-    }
-
-
-    // Test reading the per-row data values
-    public void testModelRead() throws Exception {
-
-        ValueBinding vb = application.createValueBinding("foo");
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-        UIData data = (UIData) component;
-        setupModel();
-        setupRenderers();
-        setupTree(true);
-
-        for (int i = 0; i < beans.size(); i++) {
-
-            // Set the row index
-            data.setRowIndex(i);
-            assertEquals(i, data.getRowIndex());
-
-            // Validate the row data
-            assertTrue(beans.get(i) == data.getRowData());
-            TestDataBean bean = (TestDataBean) data.getRowData();
-            assertNotNull("Row " + i + " data exists", bean);
-            assertEquals("command" + i, bean.getCommand());
-            assertEquals("input" + i, bean.getInput());
-            assertEquals("output" + i, bean.getOutput());
-
-            // Validate the exposed value
-            Object foo = vb.getValue(facesContext);
-            assertNotNull("Row " + i + " data exposed", foo);
-            assertTrue("Row " + i + " data correct",
-                    foo == bean);
-
-            // Validate value references to the exposed value
-            assertEquals("command" + i, vbCommand.getValue(facesContext));
-            assertEquals("input" + i, vbInput.getValue(facesContext));
-            assertEquals("output" + i, vbOutput.getValue(facesContext));
-
-        }
-
-        data.setRowIndex(-1);
-        Object foo = vb.getValue(facesContext);
-        assertNull("Data object removed", foo);
-
-    }
-
-
-    // Test writing the per-row data values
-    public void testModelWrite() throws Exception {
-
-        ValueBinding vb = application.createValueBinding("foo");
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-        UIData data = (UIData) component;
-        setupModel();
-        setupRenderers();
-        setupTree(true);
-
-        for (int i = 0; i < beans.size(); i++) {
-
-            // Set the row index (skipping even rows)
-            if ((i % 2) == 0) {
-                continue;
-            }
-            data.setRowIndex(i);
-            assertEquals(i, data.getRowIndex());
-
-            // Validate the row data
-            assertTrue(beans.get(i) == data.getRowData());
-            TestDataBean bean = (TestDataBean) data.getRowData();
-            assertNotNull("Row " + i + " data exists", bean);
-
-            // Validate the exposed value
-            Object foo = vb.getValue(facesContext);
-            assertNotNull("Row " + i + " data exposed", foo);
-            assertTrue("Row " + i + " data correct",
-                    foo == bean);
-
-            // Update via the exposed bean
-            bean.setCommand("command" + i + "A");
-            bean.setInput("input" + i + "B");
-            bean.setOutput("output" + i + "C");
-
-            // Validate updated value references
-            assertEquals("command" + i + "A", vbCommand.getValue(facesContext));
-            assertEquals("input" + i + "B", vbInput.getValue(facesContext));
-            assertEquals("output" + i + "C", vbOutput.getValue(facesContext));
-
-            // Update via value references
-            vbCommand.setValue(facesContext, "command" + i + "D");
-            vbInput.setValue(facesContext, "input" + i + "E");
-            vbOutput.setValue(facesContext, "output" + i + "F");
-
-            // Validate bean properties
-            assertEquals("command" + i + "D", bean.getCommand());
-            assertEquals("input" + i + "E", bean.getInput());
-            assertEquals("output" + i + "F", bean.getOutput());
-
-        }
-
-
-        // Revalidate the entire collection to catch stray updates
-        for (int i = 0; i < beans.size(); i++) {
-            data.setRowIndex(i);
-            assertEquals(i, data.getRowIndex());
-            TestDataBean bean = (TestDataBean) data.getRowData();
-            assertNotNull("Row " + i + " data exists", bean);
-            if ((i % 2) == 0) {
-                assertEquals("command" + i, bean.getCommand());
-                assertEquals("input" + i, bean.getInput());
-                assertEquals("output" + i, bean.getOutput());
-            } else {
-                assertEquals("command" + i + "D", bean.getCommand());
-                assertEquals("input" + i + "E", bean.getInput());
-                assertEquals("output" + i + "F", bean.getOutput());
-            }
-        }
-
-    }
-
-
-    // Test a pristine UIData instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIData data = (UIData) component;
-
-        assertNull("no value", data.getValue());
-        assertEquals("no first", 0, data.getFirst());
-        assertEquals("no rows", 0, data.getRows());
-        assertNull("no var", data.getVar());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIData data = (UIData) component;
-
-        try {
-            data.setFirst(-1);
-            fail("Should have thrown IAE");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-        try {
-            data.setRows(-1);
-            fail("Should have thrown IAE");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIData data = (UIData) component;
-
-        // value
-        data.setValue("foo.bar");
-        assertEquals("expected value",
-                "foo.bar", data.getValue());
-        data.setValue(null);
-        assertNull("erased value", data.getValue());
-        data.setFirst(0);
-        data.setFirst(11);
-        data.setRows(0);
-        data.setRows(20);
-        data.setVar(null);
-        data.setVar("foo");
-
-    }
-
-
-    // Test request processing lifecycle (successful input)
-    public void testTreeLifecycle() throws Exception {
-
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-        String before[] =
-                {"input3", "input4", "input5", "input6", "input7"};
-        String after[] =
-                {"input3", "input4A", "input5", "input6B", "input7"};
-        String nulls[] =
-                {null, null, null, null, null};
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        UICommand command = setupTree(true);
-        UIData data = (UIData) component;
-        checkLocalValues(nulls);
-
-        // Set up our fake request parameters (two command invocations)
-        Map params = new HashMap();
-        params.put("data:5:command", "");
-        params.put("data:7:command", "");
-        params.put("data:3:input", "input3");
-        params.put("data:4:input", "input4A");
-        params.put("data:5:input", "input5");
-        params.put("data:6:input", "input6B");
-        params.put("data:7:input", "input7");
-        MockExternalContext econtext =
-                (MockExternalContext) facesContext.getExternalContext();
-        econtext.setRequestParameterMap(params);
-        checkMessages(0);
-
-        // Simulate the Request Processing Lifecycle
-        TestDataActionListener.trace(null);
-        TestDataValidator.trace(null);
-        TestDataValueChangeListener.trace(null);
-        UIViewRoot root = (UIViewRoot) data.getParent();
-
-        //   APPLY REQUEST VALUES
-        command.setImmediate(true);
-        root.processDecodes(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("", TestDataValidator.trace());
-        assertEquals("", TestDataValueChangeListener.trace());
-        checkMessages(0);
-        checkSubmittedValues(after);
-
-        //   PERFORM VALIDATIONS
-        root.processValidators(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("/data:3:input/input3" +
-                "/data:4:input/input4A" +
-                "/data:5:input/input5" +
-                "/data:6:input/input6B" +
-                "/data:7:input/input7",
-                TestDataValidator.trace());
-        assertEquals("/data:4:input/input4/input4A" +
-                "/data:6:input/input6/input6B",
-                TestDataValueChangeListener.trace());
-        checkLocalValues(after);
-        checkModelInputs(before);
-        checkMessages(0);
-
-        //   UPDATE MODEL VALUES
-        root.processUpdates(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("/data:3:input/input3" +
-                "/data:4:input/input4A" +
-                "/data:5:input/input5" +
-                "/data:6:input/input6B" +
-                "/data:7:input/input7",
-                TestDataValidator.trace());
-        assertEquals("/data:4:input/input4/input4A" +
-                "/data:6:input/input6/input6B",
-                TestDataValueChangeListener.trace());
-        checkModelInputs(after);
-        checkMessages(0);
-        checkLocalValues(nulls);
-
-        //   RENDER RESPONSE
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_3.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_3.xml");
-
-    }
-
-    UIComponent getNamingContainer(UIComponent start) {
-        UIComponent namingContainer = start.getParent();
-        while (namingContainer != null) {
-            if (namingContainer instanceof NamingContainer) {
-                return namingContainer;
-            }
-            namingContainer = namingContainer.getParent();
-        }
-        return null;
-    }
-
-
-    public void testInvokeOnComponent() throws Exception {
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        UIViewRoot viewRoot = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        viewRoot.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        viewRoot.setViewId("/view");
-        facesContext.setViewRoot(viewRoot);
-
-        UIForm form1 = new UIForm(), form2 = new UIForm();
-        form1.setId("form1");
-        form2.setId("form2");
-        viewRoot.getChildren().add(form1);
-        viewRoot.getChildren().add(form2);
-        setupTree2(form1, true, true);
-
-        // replace the "component" ivar with a new instance.
-        component = new UIData();
-        List beans = new ArrayList();
-
-        for (int i = 0; i < 10; i++) {
-            TestDataBean bean = new TestDataBean();
-            bean.setCommand("command" + i);
-            bean.setInput("input" + i);
-            bean.setOutput("output" + i);
-            beans.add(bean);
-        }
-        DataModel model = new ListDataModel(beans);
-        assertEquals(10, model.getRowCount());
-
-        setupModel();
-        setupTree2(form2, true, true);
-
-        boolean exceptionThrown = false, found = false;
-        // At this point we have two forms, each containing a UIData 
-
-        UIData data1 = (UIData) viewRoot.findComponent("form1:data");
-        UIData data2 = (UIData) viewRoot.findComponent("form2:data");
-        assertNotNull(data1);
-        assertNotNull(data2);
-
-        // Negative case 0, null pointers
-        exceptionThrown = false;
-        FacesContext nullContext = null;
-        ContextCallback nullCallback = null;
-        try {
-            viewRoot.invokeOnComponent(nullContext, "form:input7",
-                    nullCallback);
-        }
-        catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            viewRoot.invokeOnComponent(facesContext, null,
-                    nullCallback);
-        }
-        catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            viewRoot.invokeOnComponent(nullContext, null,
-                    nullCallback);
-        }
-        catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-
-        // Case 1, positive invoke on form1:data:commandHeader component of the 4th row
-        found = false;
-        data1.setRowIndex(3);
-        assertEquals(3, data1.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "form1:data:4:commandHeader",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        UIData data = (UIData) getNamingContainer(component);
-                        UIForm form = (UIForm) getNamingContainer(data);
-                        assertEquals(4, data.getRowIndex());
-                        assertEquals("form1", form.getId());
-                        assertEquals("commandHeader", component.getId());
-                    }
-                });
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(found);
-
-        // Case 2, positive invoke on form2:data:commandHeader component of the 5th row
-        data2.setRowIndex(4);
-        found = false;
-        assertEquals(4, data2.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "form2:data:5:commandHeader",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        UIData data = (UIData) getNamingContainer(component);
-                        UIForm form = (UIForm) getNamingContainer(data);
-                        assertEquals(5, data.getRowIndex());
-                        assertEquals("form2", form.getId());
-                        assertEquals("commandHeader", component.getId());
-                    }
-                });
-        assertEquals(4, data2.getRowIndex());
-        assertTrue(found);
-
-        // Case 3, not found invoke on form2:data:5:yoyodyne
-        data2.setRowIndex(4);
-        found = false;
-        assertEquals(4, data2.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "form2:data:5:yoyodyne",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        fail();
-                    }
-                });
-        assertEquals(4, data2.getRowIndex());
-        assertTrue(!found);
-
-        // Case 4, not found due to invalid rowIndex
-        data1.setRowIndex(3);
-        found = false;
-        assertEquals(3, data1.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "form1:data:999:commandHeader",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        fail();
-                    }
-                });
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(!found);
-
-        // Case 5, not found due to invalid clientId (too many ':')
-        data2.setRowIndex(6);
-        found = false;
-        exceptionThrown = false;
-        assertEquals(6, data2.getRowIndex());
-        try {
-            found = viewRoot.invokeOnComponent(facesContext, "form2:data::7:commandHeader",
-                    new ContextCallback() {
-
-                        public void invokeContextCallback(FacesContext context,
-                                                          UIComponent component) {
-                            fail();
-                        }
-                    });
-        }
-        catch (FacesException fe) {
-            assertTrue(fe.getCause() instanceof NumberFormatException);
-            exceptionThrown = true;
-        }
-        assertEquals(6, data2.getRowIndex());
-        assertTrue(!found);
-        assertTrue(exceptionThrown);
-
-        // Case 6, not found due to callback throwing Exception
-        found = false;
-        exceptionThrown = true;
-        data1.setRowIndex(3);
-        assertEquals(3, data1.getRowIndex());
-        try {
-            found = viewRoot.invokeOnComponent(facesContext, "form1:data:4:commandHeader",
-                    new ContextCallback() {
-
-                        public void invokeContextCallback(FacesContext context,
-                                                          UIComponent component) {
-                            throw new IllegalStateException();
-                        }
-                    });
-        } catch (FacesException ex) {
-            assertTrue(ex.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(!found);
-        assertTrue(exceptionThrown);
-
-        // Case 7, positive: ensure UIData-level facets are considered
-        found = false;
-        data1.setRowIndex(3);
-        assertEquals(3, data1.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "form1:data:uidataHeader",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        UIData data = (UIData) getNamingContainer(component);
-                        UIForm form = (UIForm) getNamingContainer(data);
-                        assertEquals("form1", form.getId());
-                        assertEquals("uidataHeader", component.getId());
-                    }
-                });
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(found);
-
-        found = false;
-        data1.setRowIndex(3);
-        assertEquals(3, data1.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "form1:data:uidataFooter",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        UIData data = (UIData) getNamingContainer(component);
-                        UIForm form = (UIForm) getNamingContainer(data);
-                        assertEquals("form1", form.getId());
-                        assertEquals("uidataFooter", component.getId());
-                    }
-                });
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(found);
-
-
-    }
-
-
-    public void testInvokeOnComponent2() throws Exception {
-
-        setupModel();
-        setupRenderers();
-        UIViewRoot viewRoot = facesContext.getApplication().getViewHandler().createView(facesContext, "/view");
-        viewRoot.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        facesContext.setViewRoot(viewRoot);
-        UIForm form = new UIForm();
-        form.setId("form");
-        viewRoot.getChildren().add(form);
-        UIData data = (UIData) component;
-        data.setId("data3");
-        form.getChildren().add(data);
-        UIColumn column = new UIColumn();
-        data.getChildren().add(column);
-        UIOutput output = new UIOutput();
-        output.setId("test4");
-        column.getChildren().add(output);
-
-        data.setRowIndex(3);
-        assertEquals(3, data.getRowIndex());
-        boolean found = viewRoot.invokeOnComponent(facesContext, "form:data3:4:test4",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        UIData data = (UIData) getNamingContainer(component);
-                        UIForm form = (UIForm) getNamingContainer(data);
-                        assertEquals(4, data.getRowIndex());
-                        assertEquals("form", form.getId());
-                        assertEquals("test4", component.getId());
-                    }
-                });
-        assertEquals(3, data.getRowIndex());
-        assertTrue(found);
-
-    }
-
-    /**
-     * <p>Test invokeOnComponent on the following tree.</p>
-     * <p/>
-     * <code><pre>
-     * id:null
-     * type:UIViewRoot
-     * <p/>
-     *   id:outerData
-     *   type:UIData
-     * <p/>
-     *     id:outerColumn
-     *     type:UIColumn
-     * <p/>
-     *       id:form1
-     *       type:UIForm
-     * <p/>
-     *         id:data
-     *         type:UIData
-     * <p/>
-     *           id:commandColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:commandFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:commandHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:command
-     *             type:UICommand
-     * <p/>
-     *           id:inputColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:inputFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:inputHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:input
-     *             type:UIInput
-     * <p/>
-     *           id:outputColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:outputFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:outputHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:output
-     *             type:UIOutput
-     * <p/>
-     *           id:constantColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:constantFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:constantHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:constant
-     *             type:UIOutput
-     * <p/>
-     *       id:form2
-     *       type:UIForm
-     * <p/>
-     *         id:data
-     *         type:UIData
-     * <p/>
-     *           id:commandColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:commandFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:commandHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:command
-     *             type:UICommand
-     * <p/>
-     *           id:inputColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:inputFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:inputHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:input
-     *             type:UIInput
-     * <p/>
-     *           id:outputColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:outputFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:outputHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:output
-     *             type:UIOutput
-     * <p/>
-     *           id:constantColumn
-     *           type:UIColumn
-     * <p/>
-     *             id:constantFooter
-     *             type:UIOutput
-     * <p/>
-     *             id:constantHeader
-     *             type:UIOutput
-     * <p/>
-     *             id:constant
-     *             type:UIOutput
-     * </pre></code>
-     */
-
-    public void testInvokeOnComponentNested() throws Exception {
-
-        UIData
-                outer = (UIData) component,
-                inner = new UIData();
-        List innerBeans = new ArrayList();
-        for (int i = 0; i < 3; i++) {
-            TestDataBean bean = new TestDataBean();
-            bean.setCommand("innerCommand" + i);
-            bean.setInput("innerInput" + i);
-            bean.setOutput("innerOutput" + i);
-            innerBeans.add(bean);
-        }
-        DataModel innerDataModel = new ListDataModel(innerBeans);
-
-
-        // set up the model for the outer table.
-        setupModel();
-
-        // set up the tree for the outer data table
-        setupRenderers();
-        UIViewRoot viewRoot = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        viewRoot.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        viewRoot.setViewId("/view");
-        facesContext.setViewRoot(viewRoot);
-        outer.setId("outerData");
-        viewRoot.getChildren().add(outer);
-
-        UIColumn column = new UIColumn();
-        column.setId("outerColumn");
-        outer.getChildren().add(column);
-
-        // Set up for this test
-        setupModel();
-
-        UIForm form1 = new UIForm(), form2 = new UIForm();
-        form1.setId("form1");
-        form2.setId("form2");
-        column.getChildren().add(form1);
-        column.getChildren().add(form2);
-
-        // replace the "component" ivar with a new instance.
-        component = new UIData();
-        List beans = new ArrayList();
-
-        for (int i = 0; i < 10; i++) {
-            TestDataBean bean = new TestDataBean();
-            bean.setCommand("command" + i);
-            bean.setInput("input" + i);
-            bean.setOutput("output" + i);
-            beans.add(bean);
-        }
-        DataModel model = new ListDataModel(beans);
-        assertEquals(10, model.getRowCount());
-
-        setupModel();
-        setupTree(form1, true, true);
-
-        component = new UIData();
-        beans = new ArrayList();
-
-        for (int i = 0; i < 10; i++) {
-            TestDataBean bean = new TestDataBean();
-            bean.setCommand("command" + i);
-            bean.setInput("input" + i);
-            bean.setOutput("output" + i);
-            beans.add(bean);
-        }
-        model = new ListDataModel(beans);
-        assertEquals(10, model.getRowCount());
-
-        setupModel();
-        setupTree(form2, true, true);
-
-        boolean exceptionThrown = false, found = false;
-        // At this point we have two forms, each containing a UIData
-        UIData outerData = (UIData) viewRoot.findComponent("outerData");
-        UIData data1 = (UIData) viewRoot.findComponent("outerData:form1:data");
-        UIData data2 = (UIData) viewRoot.findComponent("outerData:form2:data");
-        assertNotNull(data1);
-        assertNotNull(data2);
-
-
-        // Case 1, positive invoke on form1:data:commandHeader component of the 4th row
-        found = false;
-        outerData.setRowIndex(1);
-        assertEquals(1, outerData.getRowIndex());
-        data1.setRowIndex(3);
-        assertEquals(3, data1.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "outerData:2:form1:data:4:commandHeader",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        UIData data = (UIData) getNamingContainer(component);
-                        UIForm form = (UIForm) getNamingContainer(data);
-                        assertEquals(4, data.getRowIndex());
-                        assertEquals("form1", form.getId());
-                        assertEquals("commandHeader", component.getId());
-                    }
-                });
-        assertEquals(1, outerData.getRowIndex());
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(found);
-
-        // Case 2, positive invoke on form2:data:commandHeader component of the 5th row
-        outerData.setRowIndex(3);
-        assertEquals(3, outerData.getRowIndex());
-        data2.setRowIndex(4);
-        found = false;
-        assertEquals(4, data2.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "outerData:1:form2:data:5:commandHeader",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        UIData data = (UIData) getNamingContainer(component);
-                        UIForm form = (UIForm) getNamingContainer(data);
-                        assertEquals(5, data.getRowIndex());
-                        assertEquals("form2", form.getId());
-                        assertEquals("commandHeader", component.getId());
-                    }
-                });
-        assertEquals(3, outerData.getRowIndex());
-        assertEquals(4, data2.getRowIndex());
-        assertTrue(found);
-
-        // Case 3, not found invoke on form2:data:5:yoyodyne
-        outerData.setRowIndex(1);
-        assertEquals(1, outerData.getRowIndex());
-        data2.setRowIndex(4);
-        found = false;
-        assertEquals(4, data2.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "outerData:2:form2:data:5:yoyodyne",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        fail();
-                    }
-                });
-        assertEquals(1, outerData.getRowIndex());
-        assertEquals(4, data2.getRowIndex());
-        assertTrue(!found);
-
-        // Case 4, not found due to invalid rowIndex
-        outerData.setRowIndex(1);
-        assertEquals(1, outerData.getRowIndex());
-        data1.setRowIndex(3);
-        found = false;
-        assertEquals(3, data1.getRowIndex());
-        found = viewRoot.invokeOnComponent(facesContext, "outerData:3:form1:data:999:commandHeader",
-                new ContextCallback() {
-
-                    public void invokeContextCallback(FacesContext context,
-                                                      UIComponent component) {
-                        fail();
-                    }
-                });
-        assertEquals(1, outerData.getRowIndex());
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(!found);
-
-        // Case 5, not found due to invalid clientId (too many ':')
-        outerData.setRowIndex(3);
-        assertEquals(3, outerData.getRowIndex());
-        data2.setRowIndex(6);
-        found = false;
-        exceptionThrown = false;
-        assertEquals(6, data2.getRowIndex());
-        try {
-            found = viewRoot.invokeOnComponent(facesContext, "outerData:1:form2:data::7:commandHeader",
-                    new ContextCallback() {
-
-                        public void invokeContextCallback(FacesContext context,
-                                                          UIComponent component) {
-                            fail();
-                        }
-                    });
-        }
-        catch (FacesException fe) {
-            assertTrue(fe.getCause() instanceof NumberFormatException);
-            exceptionThrown = true;
-        }
-        assertEquals(3, outerData.getRowIndex());
-        assertEquals(6, data2.getRowIndex());
-        assertTrue(!found);
-        assertTrue(exceptionThrown);
-
-        // Case 6, not found due to callback throwing Exception
-        found = false;
-        exceptionThrown = true;
-        outerData.setRowIndex(3);
-        assertEquals(3, outerData.getRowIndex());
-        data1.setRowIndex(3);
-        assertEquals(3, data1.getRowIndex());
-        try {
-            found = viewRoot.invokeOnComponent(facesContext, "outerData:1:form1:data:4:commandHeader",
-                    new ContextCallback() {
-
-                        public void invokeContextCallback(FacesContext context,
-                                                          UIComponent component) {
-                            throw new IllegalStateException();
-                        }
-                    });
-        } catch (FacesException ex) {
-            assertTrue(ex.getCause() instanceof IllegalStateException);
-            exceptionThrown = true;
-        }
-        assertEquals(3, outerData.getRowIndex());
-        assertEquals(3, data1.getRowIndex());
-        assertTrue(!found);
-        assertTrue(exceptionThrown);
-
-
-    }
-
-    // Test request processing lifecycle (with controls in header facets)
-    public void PENDING_FIXME_testTreeLifecycleFacets() throws Exception {
-
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-        String before[] =
-                {"input3", "input4", "input5", "input6", "input7"};
-        String after[] =
-                {"input3", "input4A", "input5", "input6B", "input7"};
-        String nulls[] =
-                {null, null, null, null, null};
-
-        // Instantiate and store a bean used to count calls
-        UIDataHeaderBean hb = new UIDataHeaderBean();
-        facesContext.getExternalContext().getRequestMap().
-                put("hb", hb);
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        UICommand command = setupTree(false); // command and input in headers
-        UIData data = (UIData) component;
-        checkLocalValues(nulls);
-
-        // Set up our fake request parameters (three command invocations)
-        Map params = new HashMap();
-        params.put("data:hcommand", "");
-        params.put("data:5:command", "");
-        params.put("data:7:command", "");
-        params.put("data:hinput", "New Value");
-        params.put("data:3:input", "input3");
-        params.put("data:4:input", "input4A");
-        params.put("data:5:input", "input5");
-        params.put("data:6:input", "input6B");
-        params.put("data:7:input", "input7");
-        MockExternalContext econtext =
-                (MockExternalContext) facesContext.getExternalContext();
-        econtext.setRequestParameterMap(params);
-        checkMessages(0);
-
-        // Simulate the Request Processing Lifecycle
-        TestDataActionListener.trace(null);
-        TestDataValidator.trace(null);
-        TestDataValueChangeListener.trace(null);
-        UIViewRoot root = (UIViewRoot) data.getParent();
-
-        //   APPLY REQUEST VALUES
-        command.setImmediate(true);
-        root.processDecodes(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("", TestDataValidator.trace());
-        assertEquals("", TestDataValueChangeListener.trace());
-        checkMessages(0);
-        checkSubmittedValues(after);
-
-        //   PERFORM VALIDATIONS
-        root.processValidators(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("/data:3:input/input3" +
-                "/data:4:input/input4A" +
-                "/data:5:input/input5" +
-                "/data:6:input/input6B" +
-                "/data:7:input/input7",
-                TestDataValidator.trace());
-        assertEquals("/data:4:input/input4/input4A" +
-                "/data:6:input/input6/input6B",
-                TestDataValueChangeListener.trace());
-        checkLocalValues(after);
-        checkModelInputs(before);
-        checkMessages(0);
-
-        //   UPDATE MODEL VALUES
-        root.processUpdates(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("/data:3:input/input3" +
-                "/data:4:input/input4A" +
-                "/data:5:input/input5" +
-                "/data:6:input/input6B" +
-                "/data:7:input/input7",
-                TestDataValidator.trace());
-        assertEquals("/data:4:input/input4/input4A" +
-                "/data:6:input/input6/input6B",
-                TestDataValueChangeListener.trace());
-        checkModelInputs(after);
-        checkMessages(0);
-        checkLocalValues(nulls);
-        assertEquals("Header input property updated",
-                "New Value", hb.getValue());
-
-        //   RENDER RESPONSE
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_8.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_8.xml");
-
-        // Check call counts
-        assertEquals("header action called once", 1, hb.getActionCount());
-        assertEquals("header validate called once", 1, hb.getValidateCount());
-        assertEquals("header update called once", 1, hb.getUpdateCount());
-
-    }
-
-
-    // Test request processing lifecycle (modify model in Invoke Application)
-    public void testTreeModify1() throws Exception {
-
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-        String before[] =
-                {"input3", "input4", "input5", "input6", "input7"};
-        String after[] =
-                {"input3", "input4A", "input5", "input6B", "input7"};
-        String nulls[] =
-                {null, null, null, null, null};
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        UICommand command = setupTree(true);
-        UIData data = (UIData) component;
-        checkLocalValues(nulls);
-
-        // Set up our fake request parameters (two command invocations)
-        Map params = new HashMap();
-        params.put("data:5:command", "");
-        params.put("data:7:command", "");
-        params.put("data:3:input", "input3");
-        params.put("data:4:input", "input4A");
-        params.put("data:5:input", "input5");
-        params.put("data:6:input", "input6B");
-        params.put("data:7:input", "input7");
-        MockExternalContext econtext =
-                (MockExternalContext) facesContext.getExternalContext();
-        econtext.setRequestParameterMap(params);
-        checkMessages(0);
-
-        // Simulate the Request Processing Lifecycle
-        TestDataActionListener.trace(null);
-        TestDataValidator.trace(null);
-        TestDataValueChangeListener.trace(null);
-        UIViewRoot root = (UIViewRoot) data.getParent();
-
-        //   APPLY REQUEST VALUES
-        command.setImmediate(true);
-        root.processDecodes(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("", TestDataValidator.trace());
-        assertEquals("", TestDataValueChangeListener.trace());
-        checkMessages(0);
-        checkSubmittedValues(after);
-
-        //   PERFORM VALIDATIONS
-        root.processValidators(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("/data:3:input/input3" +
-                "/data:4:input/input4A" +
-                "/data:5:input/input5" +
-                "/data:6:input/input6B" +
-                "/data:7:input/input7",
-                TestDataValidator.trace());
-        assertEquals("/data:4:input/input4/input4A" +
-                "/data:6:input/input6/input6B",
-                TestDataValueChangeListener.trace());
-        checkLocalValues(after);
-        checkModelInputs(before);
-        checkMessages(0);
-
-        //   UPDATE MODEL VALUES
-        root.processUpdates(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("/data:3:input/input3" +
-                "/data:4:input/input4A" +
-                "/data:5:input/input5" +
-                "/data:6:input/input6B" +
-                "/data:7:input/input7",
-                TestDataValidator.trace());
-        assertEquals("/data:4:input/input4/input4A" +
-                "/data:6:input/input6/input6B",
-                TestDataValueChangeListener.trace());
-        checkModelInputs(after);
-        checkMessages(0);
-        checkLocalValues(nulls);
-
-        // INVOKE APPLICATION
-        beans.remove(5);
-
-        //   RENDER RESPONSE
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_6.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_6.xml");
-
-    }
-
-
-    // Test request processing lifecycle (modify model in Apply Request Values)
-    public void testTreeModify2() throws Exception {
-
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-        String before[] =
-                {"input3", "input4", "input5", "input6", "input7"};
-        String after[] =
-                {"input3", "input4A", "input5", "input6B", "input7"};
-        String nulls[] =
-                {null, null, null, null, null};
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        UICommand command = setupTree(true);
-        UIData data = (UIData) component;
-        checkLocalValues(nulls);
-
-        // Set up our fake request parameters (two command invocations)
-        Map params = new HashMap();
-        params.put("data:5:command", "");
-        params.put("data:7:command", "");
-        params.put("data:3:input", "input3");
-        params.put("data:4:input", "input4A");
-        params.put("data:5:input", "input5");
-        params.put("data:6:input", "input6B");
-        params.put("data:7:input", "input7");
-        MockExternalContext econtext =
-                (MockExternalContext) facesContext.getExternalContext();
-        econtext.setRequestParameterMap(params);
-        checkMessages(0);
-
-        // Simulate the Request Processing Lifecycle
-        TestDataActionListener.trace(null);
-        TestDataValidator.trace(null);
-        TestDataValueChangeListener.trace(null);
-        UIViewRoot root = (UIViewRoot) data.getParent();
-
-        //   APPLY REQUEST VALUES
-        command.setImmediate(true);
-        root.processDecodes(facesContext);
-        assertEquals("/data:5:command" +
-                "/data:7:command",
-                TestDataActionListener.trace());
-        assertEquals("", TestDataValidator.trace());
-        assertEquals("", TestDataValueChangeListener.trace());
-        checkMessages(0);
-        checkSubmittedValues(after);
-
-        beans.remove(5); // Simulate model modification in immediate=true action
-
-        //   PERFORM VALIDATIONS - skipped
-
-        //   UPDATE MODEL VALUES - skipped
-
-        // INVOKE APPLICATION - skipped
-
-        //   RENDER RESPONSE
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_7.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_7.xml");
-
-    }
-
-
-    // Test rendering the tree and validate the output twice
-    public void testTreeRendering() throws Exception {
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        setupTree(true);
-
-        // Validate the rendered output
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_1.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_1.xml");
-
-    }
-
-
-    // Test rendering the tree when there are not enough available rows
-    public void testTreeTail() throws Exception {
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        setupTree(true);
-
-        // Validate the rendered output
-        ((UIData) component).setFirst(7);
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_5.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_5.xml");
-
-    }
-
-
-    // Test updating the tree's per-row values and validate the output twice
-    public void testTreeUpdating() throws Exception {
-
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        setupTree(true);
-        UIData data = (UIData) component;
-
-        // Use value references to update certain values directly
-        data.setRowIndex(4);
-        vbCommand.setValue(facesContext, "command4A");
-        vbInput.setValue(facesContext, "input4B");
-        vbOutput.setValue(facesContext, "output4C");
-        data.setRowIndex(6);
-        vbCommand.setValue(facesContext, "command6D");
-        vbInput.setValue(facesContext, "input6E");
-        vbOutput.setValue(facesContext, "output6F");
-        data.setRowIndex(-1);
-
-        // Validate the response (twice)
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_2.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_2.xml");
-
-    }
-
-
-    // Test request processing lifecycle (validation errors)
-    public void testTreeValidation() throws Exception {
-
-        ValueBinding vbCommand = application.createValueBinding("foo.command");
-        ValueBinding vbInput = application.createValueBinding("foo.input");
-        ValueBinding vbOutput = application.createValueBinding("foo.output");
-        String before[] =
-                {"input3", "input4", "input5", "input6", "input7"};
-
-        // Set up for this test
-        setupModel();
-        setupRenderers();
-        setupTree(true);
-        UIData data = (UIData) component;
-
-        // Set up our fake request parameters (no command invocations)
-        Map params = new HashMap();
-        params.put("data:3:input", "input3A");
-        params.put("data:4:input", "bad");
-        params.put("data:5:input", "input5");
-        params.put("data:6:input", "bad");
-        params.put("data:7:input", "input7B");
-        MockExternalContext econtext =
-                (MockExternalContext) facesContext.getExternalContext();
-        econtext.setRequestParameterMap(params);
-
-        // Simulate the Request Processing Lifecycle
-        TestDataActionListener.trace(null);
-        TestDataValidator.trace(null);
-        TestDataValueChangeListener.trace(null);
-        UIViewRoot root = (UIViewRoot) data.getParent();
-
-        //   APPLY REQUEST VALUES
-        root.processDecodes(facesContext);
-        assertEquals("", TestDataActionListener.trace());
-        assertEquals("", TestDataValidator.trace());
-        assertEquals("", TestDataValueChangeListener.trace());
-        checkMessages(0);
-
-        //   PERFORM VALIDATIONS
-        root.processValidators(facesContext);
-        assertEquals("", TestDataActionListener.trace());
-        assertEquals("/data:3:input/input3A" +
-                "/data:4:input/bad/ERROR" +
-                "/data:5:input/input5" +
-                "/data:6:input/bad/ERROR" +
-                "/data:7:input/input7B",
-                TestDataValidator.trace());
-        assertEquals("/data:3:input/input3/input3A" +
-                "/data:7:input/input7/input7B",
-                TestDataValueChangeListener.trace());
-        checkModelInputs(before);
-        checkMessages(2);
-
-        //   UPDATE MODEL VALUES - skipped due to validation errors
-
-        //   RENDER RESPONSE (twice)
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_4.xml");
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_4.xml");
-
-    }
-
-    public void testNestedTablesWithIds() throws Exception {
-        UIData
-                outer = (UIData) component,
-                inner = new UIData();
-        List innerBeans = new ArrayList();
-        for (int i = 0; i < 3; i++) {
-            TestDataBean bean = new TestDataBean();
-            bean.setCommand("innerCommand" + i);
-            bean.setInput("innerInput" + i);
-            bean.setOutput("innerOutput" + i);
-            innerBeans.add(bean);
-        }
-        DataModel innerDataModel = new ListDataModel(innerBeans);
-
-        // set up the model for the outer table.
-        setupModel();
-
-        // set up the tree for the outer data table
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        root.setViewId("/view");
-        facesContext.setViewRoot(root);
-        outer.setId("outerData");
-        root.getChildren().add(outer);
-
-        UIColumn column = new UIColumn();
-        column.setId("outerColumn");
-        outer.getChildren().add(column);
-
-
-        component = inner;
-        setupModel();
-        setupTree(column, true, true);
-
-        UIDataHeaderBean hb = new UIDataHeaderBean();
-        facesContext.getExternalContext().getRequestMap().
-                put("hb", hb);
-
-        HashMap foo = new HashMap();
-        foo.put("input", "input");
-        foo.put("output", "output");
-        foo.put("component", "component");
-        request.setAttribute("foo", foo);
-        request.removeAttribute("foo");
-        setupRenderers();
-
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_9_withIds.xml");
-    }
-
-    public void PENDING_FIXME_testNestedTablesWithoutIds() throws Exception {
-        UIData
-                outer = (UIData) component,
-                inner = new UIData();
-        List innerBeans = new ArrayList();
-        for (int i = 0; i < 3; i++) {
-            TestDataBean bean = new TestDataBean();
-            bean.setCommand("innerCommand" + i);
-            bean.setInput("innerInput" + i);
-            bean.setOutput("innerOutput" + i);
-            innerBeans.add(bean);
-        }
-        DataModel innerDataModel = new ListDataModel(innerBeans);
-
-        // set up the model for the outer table.
-        setupModel();
-
-        // set up the tree for the outer data table
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        root.setViewId("/view");
-        facesContext.setViewRoot(root);
-        root.getChildren().add(outer);
-
-        UIColumn column = new UIColumn();
-        outer.getChildren().add(column);
-
-
-        component = inner;
-        setupModel();
-        setupTree(column, true, false);
-
-        UIDataHeaderBean hb = new UIDataHeaderBean();
-        facesContext.getExternalContext().getRequestMap().
-                put("hb", hb);
-
-        HashMap foo = new HashMap();
-        foo.put("input", "input");
-        foo.put("output", "output");
-        foo.put("component", "component");
-        request.setAttribute("foo", foo);
-        request.removeAttribute("foo");
-        setupRenderers();
-
-        renderResponse();
-        checkResponse("/javax/faces/component/UIDataTestCase_9_withoutIds.xml");
-    }
-
-
-    public void PENDING_FIXME_testValueBindings() {
-
-        super.testValueBindings();
-        UIData test = (UIData) component;
-
-        // "first" property
-        request.setAttribute("foo", new Integer(5));
-        test.setValueBinding("first", application.createValueBinding("#{foo}"));
-        assertEquals(5, test.getFirst());
-        test.setFirst(10);
-        assertEquals(10, test.getFirst());
-        assertNotNull(test.getValueBinding("first"));
-
-        // "rowIndex" property
-        try {
-            request.setAttribute("foo", new Integer(5));
-            test.setValueBinding("rowIndex",
-                    application.createValueBinding("#{foo}"));
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-        request.removeAttribute("foo");
-
-        // "rows" property
-        request.setAttribute("foo", new Integer(5));
-        test.setValueBinding("rows", application.createValueBinding("#{foo}"));
-        assertEquals(5, test.getRows());
-        test.setRows(10);
-        assertEquals(10, test.getRows());
-        assertNotNull(test.getValueBinding("rows"));
-
-        // "value" property
-        request.setAttribute("foo", "bar");
-        test.setValue(null);
-        assertNull(test.getValue());
-        test.setValueBinding("value", application.createValueBinding("#{foo}"));
-        assertNotNull(test.getValueBinding("value"));
-        assertEquals("bar", test.getValue());
-        test.setValue("baz");
-        assertEquals("baz", test.getValue());
-        test.setValue(null);
-        assertEquals("bar", test.getValue());
-        test.setValueBinding("value", null);
-        assertNull(test.getValueBinding("value"));
-        assertNull(test.getValue());
-
-        // "var" property
-        try {
-            request.setAttribute("foo", "bar");
-            test.setValueBinding("var",
-                    application.createValueBinding("#{foo}"));
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            ; // Expected result
-        }
-        request.removeAttribute("foo");
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Check that the per-row local values of the input component are correct
-
-    protected void checkLocalValues(String values[]) {
-
-        UIData data = (UIData) component;
-        int first = data.getFirst();
-        for (int i = 0; i < values.length; i++) {
-            data.setRowIndex(i + first);
-            assertTrue("Row " + (i + first) + " available",
-                    data.isRowAvailable());
-            UIInput input = (UIInput) data.findComponent("input");
-            assertNotNull("Row " + (i + first) + " input exists", input);
-            assertEquals("Row " + (i + first) + " input clientId",
-                    "data:" + (i + first) + ":input",
-                    input.getClientId(facesContext));
-            assertEquals("Row " + (i + first) + " input localValue",
-                    values[i],
-                    (String) input.getLocalValue());
-        }
-        data.setRowIndex(-1);
-
-    }
-
-    // Check that the per-row submitted values of the input component are correct
-    protected void checkSubmittedValues(String values[]) {
-
-        UIData data = (UIData) component;
-        int first = data.getFirst();
-        for (int i = 0; i < values.length; i++) {
-            data.setRowIndex(i + first);
-            assertTrue("Row " + (i + first) + " available",
-                    data.isRowAvailable());
-            UIInput input = (UIInput) data.findComponent("input");
-            assertNotNull("Row " + (i + first) + " input exists", input);
-            assertEquals("Row " + (i + first) + " input clientId",
-                    "data:" + (i + first) + ":input",
-                    input.getClientId(facesContext));
-            assertEquals("Row " + (i + first) + " input submittedValue",
-                    values[i],
-                    (String) input.getSubmittedValue());
-        }
-        data.setRowIndex(-1);
-
-    }
-
-
-    // Check that the number of queued messages equals the expected count
-    // and that eacdh of them is of severity ERROR
-    protected void checkMessages(int expected) {
-
-        int n = 0;
-        Iterator messages = facesContext.getMessages();
-        while (messages.hasNext()) {
-            FacesMessage message = (FacesMessage) messages.next();
-            assertEquals("Severity == ERROR",
-                    FacesMessage.SEVERITY_ERROR,
-                    message.getSeverity());
-            n++;
-        }
-        assertEquals("expected message count", expected, n);
-
-    }
-
-
-    // Check the current values of the model objects being rendered
-    protected void checkModelInputs(String values[]) {
-
-        for (int i = 0; i < values.length; i++) {
-            TestDataBean bean = (TestDataBean) beans.get(i + 3);
-            assertEquals("correct input value", values[i], bean.getInput());
-        }
-
-    }
-
-
-    // Check that the properties on the specified components are equal
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-
-        super.checkProperties(comp1, comp2);
-        UIData d1 = (UIData) comp1;
-        UIData d2 = (UIData) comp2;
-        assertEquals(d1.getFirst(), d2.getFirst());
-        assertEquals(d1.getRows(), d2.getRows());
-        assertEquals(d1.getVar(), d2.getVar());
-
-    }
-
-
-    // Check the rendered response against the specified golden resource
-    protected void checkResponse(String resource) throws Exception {
-
-        InputStream stream = this.getClass().getResourceAsStream(resource);
-        Reader reader = new InputStreamReader(stream);
-        String response = swriter.getBuffer().toString();
-        int chars = 0;
-        boolean eof = false;
-        boolean errors = false;
-        int lines = 0;
-        while (true) {
-
-            lines++;
-
-            // Read the next line from the response
-            StringBuffer actual = new StringBuffer();
-            while (true) {
-                if (chars >= response.length()) {
-                    eof = true;
-                    break;
-                }
-                char ch = response.charAt(chars++);
-                if (ch == '<') {
-                    actual.append(ch);
-                    break;
-                }
-            }
-            if (eof) {
-                break;
-            }
-            while (true) {
-                if (chars >= response.length()) {
-                    eof = true;
-                    break;
-                }
-                char ch = response.charAt(chars++);
-                actual.append(ch);
-                if (ch == '>') {
-                    break;
-                }
-            }
-            if (eof) {
-                break;
-            }
-
-            // Read the corresponding line from the resource
-            StringBuffer expect = new StringBuffer();
-            while (true) {
-                int ch = reader.read();
-                if (ch < 0) {
-                    eof = true;
-                    break;
-                }
-                if ((char) ch == '<') {
-                    expect.append((char) ch);
-                    break;
-                }
-            }
-            if (eof) {
-                break;
-            }
-            while (true) {
-                int ch = reader.read();
-                if (ch < 0) {
-                    eof = true;
-                    break;
-                }
-                expect.append((char) ch);
-                if ((char) ch == '>') {
-                    break;
-                }
-            }
-            if (eof) {
-                break;
-            }
-
-            // Compare the expected and actual lines
-            if (!expect.toString().equals(actual.toString())) {
-                errors = true;
-                System.err.println("EXP(" + lines + "): " + expect.toString());
-                System.err.println("ACT(" + lines + "): " + actual.toString());
-            }
-
-        }
-
-        reader.close();
-        assertTrue("no golden resource mismatches", !errors);
-
-    }
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UIData();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-        super.populateComponent(component);
-        UIData d = (UIData) component;
-        d.setFirst(5);
-        d.setRows(10);
-        d.setVar("foo");
-    }
-
-
-    // Render the entire response tree
-    private void renderResponse() throws IOException {
-        swriter.getBuffer().setLength(0);
-        renderResponse(facesContext.getViewRoot());
-    }
-
-
-    // Render the response tree recursively
-    private void renderResponse(UIComponent component) throws IOException {
-        component.encodeBegin(facesContext);
-        if (component.getRendersChildren()) {
-            component.encodeChildren(facesContext);
-        } else {
-            Iterator kids = component.getChildren().iterator();
-            while (kids.hasNext()) {
-                renderResponse((UIComponent) kids.next());
-            }
-        }
-        component.encodeEnd(facesContext);
-    }
-
-    // Set up the UIData properties for an associated DataModel
-    protected void setupModel() throws Exception {
-        UIData data = (UIData) component;
-        data.setFirst(3);
-        data.setRows(5);
-        data.setVar("foo");
-        data.setValue(model);
-        assertNotNull(data.getValue());
-        assertTrue(model == data.getValue());
-    }
-
-
-    // Set up dummy renderers
-    protected void setupRenderers() throws Exception {
-
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-                FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit =
-                renderKitFactory.getRenderKit(facesContext,
-                        RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        renderKit.addRenderer(UICommand.COMPONENT_FAMILY,
-                "javax.faces.Button", new ButtonRenderer());
-        renderKit.addRenderer(UIData.COMPONENT_FAMILY,
-                "javax.faces.Table", new TableRenderer());
-        renderKit.addRenderer(UIInput.COMPONENT_FAMILY,
-                "javax.faces.Text", new TextRenderer());
-        renderKit.addRenderer(UIOutput.COMPONENT_FAMILY,
-                "javax.faces.Text", new TextRenderer());
-
-    }
-
-    /* If labels == true the tree looks like this
-
-     * root: viewId: /view
-     *
-     *  data: id: data
-     *
-     *    column: id: commandColumn
-     *
-     *      facets
-     *
-     *	      header: id: commandHeader
-     *
-     *	      footer: id: commandFooter
-     *
-     *      command: id: command value: #{foo.command}
-     *               actionListener: TestDataActionListener()
-     *
-     *    column: id: inputColumn
-     *
-     *      facets:
-     *
-     *        header: id: inputHeader
-     *
-     *        footer: id: inputFooter
-     *
-     *      input: id: input value: #{foo.input} validator: TestDataValidator
-     *             valueChangeListener: TestValueChangeListener:
-     *
-     *    column: id: outputColumn
-     *
-     *      facets:
-     *
-     *        header: id: outputHeader
-     *
-     *        header: id: inputHeader
-     *
-     *       output: id: output: value: #{foo.output}
-     *
-     *    column: id: constantColumn
-     *
-     *      facets:
-     *
-     *        header: id: outputHeader
-     *
-     *        header: id: inputHeader
-     *
-     *      constant: id: constant: value: Constant Value
-     *
-     * If labels == false, the tree looks like
-     * root: viewId: /view
-     *
-     *   data: id: data
-     *
-     *     column: id commandColumn
-     *
-     *       facets:
-     *
-     *         header: UICommand id: commandAction actionListener: #{hb.action}
-     *                 value: Command Action
-     *
-     *         footer: UIOutput id: commandFooter
-     *
-     *       command: id: command value: #{foo.command}
-     *                actionListener: TestDataActionListener()
-     *
-     *     column: id inputColumn
-     *
-     *       facets:
-     *
-     *         header: UIInput id: hinput validator: #{hb.validate}
-     *
-     *                 value: #{hb.value}
-     *
-     *         footer: UIOutput id: inputFooter
-     *
-     *       input: id: input value: #{foo.input} validator: TestDataValidator
-     *              valueChangeListener: TestValueChangeListener:
-     *
-     *     column: id: outputColumn
-     *
-     *       facets:
-     *
-     *         header: id: outputHeader
-     *
-     *         header: id: inputHeader
-     *
-     *       output: id: output: value: #{foo.output}
-     *
-     *    column: id: constantColumn
-     *
-     *      facets:
-     *
-     *        header: id: outputHeader
-     *
-     *        header: id: inputHeader
-     *
-     *      constant: id: constant: value: Constant Value
-     *
-     *
-     *
-     */
-
-    // Set up the component tree corresponding to the data model
-    // labels==true - header facet of command and input contain labels
-    // labels==false - header facet of command and input contain controls
-
-    protected UICommand setupTree(boolean labels) throws Exception {
-        return setupTree(null, labels, true);
-    }
-
-    // Set up the component tree corresponding to the data model
-    // labels==true - header facet of command and input contain labels
-    // labels==false - header facet of command and input contain controls
-    // ids==true hard coded ids
-    // ids==false no ids
-    protected UICommand setupTree(UIComponent root, boolean labels, boolean ids) throws Exception {
-
-        // Attach our UIData to the view root
-        UIData data = (UIData) component;
-        if (ids) {
-            data.setId("data");
-        }
-        if (null == root) {
-            UIViewRoot viewRoot = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-            viewRoot.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-            viewRoot.setViewId("/view");
-            facesContext.setViewRoot(viewRoot);
-            root = viewRoot;
-        }
-        root.getChildren().add(data);
-
-        // Set up columns with facets and fields for each property
-        UIColumn column;
-        UICommand command;
-        UIInput input;
-        UIOutput output;
-        UIOutput label;
-        UIOutput constant;
-        UICommand hcommand;
-        UIInput hinput;
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("commandColumn");
-        }
-        if (labels) {
-            label = new UIOutput();
-            if (ids) {
-                label.setId("commandHeader");
-            }
-            label.setValue("Command Header");
-            column.getFacets().put("header", label);
-        } else {
-            hcommand = new UICommand();
-            if (ids) {
-                hcommand.setId("hcommand");
-            }
-            hcommand.setImmediate(true);
-            hcommand.setActionListener
-                    (application.createMethodBinding
-                            ("#{hb.action}",
-                                    new Class[]{ActionEvent.class}));
-            hcommand.setValue("Command Action");
-            column.getFacets().put("header", hcommand);
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("commandFooter");
-        }
-        label.setValue("Command Footer");
-        column.getFacets().put("footer", label);
-        command = new UICommand();
-        if (ids) {
-            command.setId("command");
-        }
-        command.setValueBinding("value",
-                application.createValueBinding("#{foo.command}"));
-        column.getChildren().add(command);
-        data.getChildren().add(column);
-        command.addActionListener(new TestDataActionListener());
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("inputColumn");
-        }
-        if (labels) {
-            label = new UIOutput();
-            if (ids) {
-                label.setId("inputHeader");
-            }
-            label.setValue("Input Header");
-            column.getFacets().put("header", label);
-        } else {
-            hinput = new UIInput();
-            if (ids) {
-                hinput.setId("hinput");
-            }
-            hinput.setValidator
-                    (application.createMethodBinding
-                            ("#{hb.validate}",
-                                    new Class[]{FacesContext.class,
-                                            UIComponent.class,
-                                            Object.class}));
-            hinput.setValueBinding
-                    ("value",
-                            application.createValueBinding("#{hb.value}"));
-            column.getFacets().put("header", hinput);
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("inputFooter");
-        }
-        label.setValue("Input Footer");
-        column.getFacets().put("footer", label);
-        input = new UIInput();
-        if (ids) {
-            input.setId("input");
-        }
-        input.setValueBinding("value",
-                application.createValueBinding("#{foo.input}"));
-        column.getChildren().add(input);
-        data.getChildren().add(column);
-        input.addValidator(new TestDataValidator());
-        input.addValueChangeListener(new TestDataValueChangeListener());
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("outputColumn");
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("outputHeader");
-        }
-        label.setValue("Output Header");
-        column.getFacets().put("header", label);
-        label = new UIOutput();
-        if (ids) {
-            label.setId("outputFooter");
-        }
-        label.setValue("Output Footer");
-        column.getFacets().put("footer", label);
-        output = new UIOutput();
-        if (ids) {
-            output.setId("output");
-        }
-        output.setValueBinding("value",
-                application.createValueBinding("#{foo.output}"));
-        column.getChildren().add(output);
-        data.getChildren().add(column);
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("constantColumn");
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("constantHeader");
-        }
-        label.setValue("Constant Header");
-        column.getFacets().put("header", label);
-        label = new UIOutput();
-        if (ids) {
-            label.setId("constantFooter");
-        }
-        label.setValue("Constant Footer");
-        column.getFacets().put("footer", label);
-        constant = new UIOutput();
-        if (ids) {
-            constant.setId("constant");
-        }
-        constant.setValue("Constant Value");
-        column.getChildren().add(constant);
-        data.getChildren().add(column);
-
-        return command;
-
-    }
-
-    // Set up the component tree corresponding to the data model
-    // labels==true - header facet of command and input contain labels
-    // labels==false - header facet of command and input contain controls
-    // ids==true hard coded ids
-    // ids==false no ids
-    protected UICommand setupTree2(UIComponent root,
-                                   boolean labels,
-                                   boolean ids) throws Exception {
-
-        // Attach our UIData to the view root
-        UIData data = (UIData) component;
-        if (ids) {
-            data.setId("data");
-        }
-        if (null == root) {
-            UIViewRoot viewRoot = facesContext.getApplication().getViewHandler()
-                    .createView(facesContext, null);
-            viewRoot.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-            viewRoot.setViewId("/view");
-            facesContext.setViewRoot(viewRoot);
-            root = viewRoot;
-        }
-        root.getChildren().add(data);
-
-        // setup a UIData-level header and footer
-        UIOutput header = new UIOutput();
-        header.setId("uidataHeader");
-        data.getFacets().put("header", header);
-        header.getClientId(facesContext);
-        UIOutput footer = new UIOutput();
-        footer.setId("uidataFooter");
-        data.getFacets().put("footer", footer);
-        footer.getClientId(facesContext);
-
-        // Set up columns with facets and fields for each property
-        UIColumn column;
-        UICommand command;
-        UIInput input;
-        UIOutput output;
-        UIOutput label;
-        UIOutput constant;
-        UICommand hcommand;
-        UIInput hinput;
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("commandColumn");
-        }
-        if (labels) {
-            label = new UIOutput();
-            if (ids) {
-                label.setId("commandHeader");
-            }
-            label.setValue("Command Header");
-            column.getFacets().put("header", label);
-        } else {
-            hcommand = new UICommand();
-            if (ids) {
-                hcommand.setId("hcommand");
-            }
-            hcommand.setImmediate(true);
-            hcommand.setActionListener
-                    (application.createMethodBinding
-                            ("#{hb.action}",
-                                    new Class[]{ActionEvent.class}));
-            hcommand.setValue("Command Action");
-            column.getFacets().put("header", hcommand);
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("commandFooter");
-        }
-        label.setValue("Command Footer");
-        column.getFacets().put("footer", label);
-        command = new UICommand();
-        if (ids) {
-            command.setId("command");
-        }
-        command.setValueBinding("value",
-                application.createValueBinding("#{foo.command}"));
-        column.getChildren().add(command);
-        data.getChildren().add(column);
-        command.addActionListener(new TestDataActionListener());
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("inputColumn");
-        }
-        if (labels) {
-            label = new UIOutput();
-            if (ids) {
-                label.setId("inputHeader");
-            }
-            label.setValue("Input Header");
-            column.getFacets().put("header", label);
-        } else {
-            hinput = new UIInput();
-            if (ids) {
-                hinput.setId("hinput");
-            }
-            hinput.setValidator
-                    (application.createMethodBinding
-                            ("#{hb.validate}",
-                                    new Class[]{FacesContext.class,
-                                            UIComponent.class,
-                                            Object.class}));
-            hinput.setValueBinding
-                    ("value",
-                            application.createValueBinding("#{hb.value}"));
-            column.getFacets().put("header", hinput);
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("inputFooter");
-        }
-        label.setValue("Input Footer");
-        column.getFacets().put("footer", label);
-        input = new UIInput();
-        if (ids) {
-            input.setId("input");
-        }
-        input.setValueBinding("value",
-                application.createValueBinding("#{foo.input}"));
-        column.getChildren().add(input);
-        data.getChildren().add(column);
-        input.addValidator(new TestDataValidator());
-        input.addValueChangeListener(new TestDataValueChangeListener());
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("outputColumn");
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("outputHeader");
-        }
-        label.setValue("Output Header");
-        column.getFacets().put("header", label);
-        label = new UIOutput();
-        if (ids) {
-            label.setId("outputFooter");
-        }
-        label.setValue("Output Footer");
-        column.getFacets().put("footer", label);
-        output = new UIOutput();
-        if (ids) {
-            output.setId("output");
-        }
-        output.setValueBinding("value",
-                application.createValueBinding("#{foo.output}"));
-        column.getChildren().add(output);
-        data.getChildren().add(column);
-
-        column = new UIColumn();
-        if (ids) {
-            column.setId("constantColumn");
-        }
-        label = new UIOutput();
-        if (ids) {
-            label.setId("constantHeader");
-        }
-        label.setValue("Constant Header");
-        column.getFacets().put("header", label);
-        label = new UIOutput();
-        if (ids) {
-            label.setId("constantFooter");
-        }
-        label.setValue("Constant Footer");
-        column.getFacets().put("footer", label);
-        constant = new UIOutput();
-        if (ids) {
-            constant.setId("constant");
-        }
-        constant.setValue("Constant Value");
-        column.getChildren().add(constant);
-        data.getChildren().add(column);
-
-        return command;
-
-    }
-
-
-    // --------------------------------------------------------- Private Classes
-
-
-    // "Button" Renderer
-
-    class ButtonRenderer extends Renderer {
-
-        public void decode(FacesContext context, UIComponent component) {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-            if (!(component instanceof ActionSource)) {
-                return;
-            }
-            String clientId = component.getClientId(context);
-            Map params = context.getExternalContext().getRequestParameterMap();
-            if (params.containsKey(clientId)) {
-                component.queueEvent(new ActionEvent(component));
-            }
-
-        }
-
-        public void encodeBegin(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-            ResponseWriter writer = context.getResponseWriter();
-            writer.write
-                    ("<button id='" + component.getClientId(context) + "' value='" +
-                            ((UICommand) component).getValue() + "'/>\n");
-
-        }
-
-        public void encodeChildren(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-        public void encodeEnd(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-    }
-
-
-    // "Table" Renderer
-    class TableRenderer extends Renderer {
-
-        public boolean getRendersChildren() {
-            return true;
-        }
-
-        public void decode(FacesContext context, UIComponent component) {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-        public void encodeBegin(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-            UIData data = (UIData) component;
-            ResponseWriter writer = context.getResponseWriter();
-
-            // Render the beginning of the table
-            data.setRowIndex(-1);
-            String tableId = data.getClientId(context);
-            writer.write
-                    ("<table id='" + tableId + "'>\n");
-            UIComponent header = (UIComponent) data.getFacet("header");
-            if (header != null) {
-                writer.write
-                        ("<table-header id='" + header.getClientId(context) +
-                                "'>\n");
-                encodeRecursive(context, header);
-                writer.write("</table-header>\n");
-            }
-
-            // Render the column headers
-
-
-        }
-
-        public void encodeChildren(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-            UIData data = (UIData) component;
-            ResponseWriter writer = context.getResponseWriter();
-            Iterator kids;
-
-            // Render the column headers
-            kids = data.getChildren().iterator();
-            data.setRowIndex(-1);
-            while (kids.hasNext()) {
-                UIComponent kid = (UIComponent) kids.next();
-                if (!(kid instanceof UIColumn)) {
-                    continue;
-                }
-                UIColumn column = (UIColumn) kid;
-                UIComponent header = column.getFacet("header");
-                if (header != null) {
-                    String headerClientId = header.getClientId(context);
-                    writer.write("<column-header id='" +
-                            headerClientId + "'>\n");
-                    encodeRecursive(context, header);
-                    writer.write("</column-header>\n");
-                }
-            }
-
-            // Render the individual rows
-            int done = 0;
-            int rows = data.getRows();
-            int rowId = data.getFirst() - 1;
-            while (true) {
-                if ((rows > 0) && (++done > rows)) {
-                    break;
-                }
-                data.setRowIndex(++rowId);
-                if (!data.isRowAvailable()) {
-                    break;
-                }
-                writer.write("<table-row rowId='" + rowId + "'>\n");
-                kids = data.getChildren().iterator();
-                while (kids.hasNext()) {
-                    UIComponent kid = (UIComponent) kids.next();
-                    if (!(kid instanceof UIColumn)) {
-                        continue;
-                    }
-                    UIColumn column = (UIColumn) kid;
-                    String columnClientId = column.getClientId(context);
-                    writer.write("<column id='" + columnClientId +
-                            "'>\n");
-                    encodeRecursive(context, column);
-                    writer.write("</column>\n");
-                }
-                writer.write("</table-row>\n");
-            }
-
-            // Render the column footers
-            kids = data.getChildren().iterator();
-            data.setRowIndex(-1);
-            while (kids.hasNext()) {
-                UIComponent kid = (UIComponent) kids.next();
-                if (!(kid instanceof UIColumn)) {
-                    continue;
-                }
-                UIColumn column = (UIColumn) kid;
-                UIComponent footer = column.getFacet("footer");
-                if (footer != null) {
-                    String footerClientId = footer.getClientId(context);
-                    writer.write("<column-footer id='" +
-                            footerClientId + "'>\n");
-                    encodeRecursive(context, footer);
-                    writer.write("</column-footer>\n");
-                }
-            }
-
-        }
-
-        public void encodeEnd(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-            UIData data = (UIData) component;
-            ResponseWriter writer = context.getResponseWriter();
-
-            // Render the ending of the table
-            UIComponent footer = (UIComponent) data.getFacet("footer");
-            if (footer != null) {
-                writer.write
-                        ("<table-footer id='" + footer.getClientId(context) +
-                                "'>\n");
-                encodeRecursive(context, footer);
-                writer.write("</table-footer>\n");
-            }
-            writer.write("</table>\n");
-
-        }
-
-        private void encodeRecursive(FacesContext context,
-                                     UIComponent component)
-                throws IOException {
-
-            component.encodeBegin(context);
-            if (component.getRendersChildren()) {
-                component.encodeChildren(context);
-            } else {
-                Iterator kids = component.getChildren().iterator();
-                while (kids.hasNext()) {
-                    UIComponent kid = (UIComponent) kids.next();
-                    encodeRecursive(context, kid);
-                }
-            }
-            component.encodeEnd(context);
-        }
-
-
-    }
-
-
-    // "Text" Renderer
-    // NOTE - No conversion processing, assumes only Strings!
-    class TextRenderer extends Renderer {
-
-        public void decode(FacesContext context, UIComponent component) {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-            if (!(component instanceof UIInput)) {
-                return;
-            }
-            UIInput input = (UIInput) component;
-            String clientId = input.getClientId(context);
-
-            // Decode incoming request parameters
-            Map params = context.getExternalContext().getRequestParameterMap();
-            if (params.containsKey(clientId)) {
-                input.setSubmittedValue((String) params.get(clientId));
-            }
-        }
-
-        public void encodeBegin(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-            Object value;
-            if (component instanceof UIInput) {
-                UIInput input = (UIInput) component;
-                value = input.getSubmittedValue();
-                if (value == null) {
-                    value = input.getValue();
-                }
-            } else {
-                value = ((UIOutput) component).getValue();
-            }
-
-            ResponseWriter writer = context.getResponseWriter();
-            writer.write
-                    ("<text id='" + component.getClientId(context) + "' value='" +
-                            value + "'/>\n");
-
-        }
-
-        public void encodeChildren(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-        public void encodeEnd(FacesContext context, UIComponent component)
-                throws IOException {
-
-            if ((context == null) || (component == null)) {
-                throw new NullPointerException();
-            }
-
-        }
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_1.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_1.xml
deleted file mode 100644
index dff3f1f..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_1.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<table id='data'>
-<column-header id='data:commandHeader'>
-<text id='data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='data:inputHeader'>
-<text id='data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='data:3:commandColumn'>
-<button id='data:3:command' value='command3'/>
-</column>
-<column id='data:3:inputColumn'>
-<text id='data:3:input' value='input3'/>
-</column>
-<column id='data:3:outputColumn'>
-<text id='data:3:output' value='output3'/>
-</column>
-<column id='data:3:constantColumn'>
-<text id='data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='data:4:commandColumn'>
-<button id='data:4:command' value='command4'/>
-</column>
-<column id='data:4:inputColumn'>
-<text id='data:4:input' value='input4'/>
-</column>
-<column id='data:4:outputColumn'>
-<text id='data:4:output' value='output4'/>
-</column>
-<column id='data:4:constantColumn'>
-<text id='data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='data:5:commandColumn'>
-<button id='data:5:command' value='command5'/>
-</column>
-<column id='data:5:inputColumn'>
-<text id='data:5:input' value='input5'/>
-</column>
-<column id='data:5:outputColumn'>
-<text id='data:5:output' value='output5'/>
-</column>
-<column id='data:5:constantColumn'>
-<text id='data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='data:6:commandColumn'>
-<button id='data:6:command' value='command6'/>
-</column>
-<column id='data:6:inputColumn'>
-<text id='data:6:input' value='input6'/>
-</column>
-<column id='data:6:outputColumn'>
-<text id='data:6:output' value='output6'/>
-</column>
-<column id='data:6:constantColumn'>
-<text id='data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command7'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input7'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output7'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_2.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_2.xml
deleted file mode 100644
index ddadcf2..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_2.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<table id='data'>
-<column-header id='data:commandHeader'>
-<text id='data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='data:inputHeader'>
-<text id='data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='data:3:commandColumn'>
-<button id='data:3:command' value='command3'/>
-</column>
-<column id='data:3:inputColumn'>
-<text id='data:3:input' value='input3'/>
-</column>
-<column id='data:3:outputColumn'>
-<text id='data:3:output' value='output3'/>
-</column>
-<column id='data:3:constantColumn'>
-<text id='data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='data:4:commandColumn'>
-<button id='data:4:command' value='command4A'/>
-</column>
-<column id='data:4:inputColumn'>
-<text id='data:4:input' value='input4B'/>
-</column>
-<column id='data:4:outputColumn'>
-<text id='data:4:output' value='output4C'/>
-</column>
-<column id='data:4:constantColumn'>
-<text id='data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='data:5:commandColumn'>
-<button id='data:5:command' value='command5'/>
-</column>
-<column id='data:5:inputColumn'>
-<text id='data:5:input' value='input5'/>
-</column>
-<column id='data:5:outputColumn'>
-<text id='data:5:output' value='output5'/>
-</column>
-<column id='data:5:constantColumn'>
-<text id='data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='data:6:commandColumn'>
-<button id='data:6:command' value='command6D'/>
-</column>
-<column id='data:6:inputColumn'>
-<text id='data:6:input' value='input6E'/>
-</column>
-<column id='data:6:outputColumn'>
-<text id='data:6:output' value='output6F'/>
-</column>
-<column id='data:6:constantColumn'>
-<text id='data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command7'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input7'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output7'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_3.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_3.xml
deleted file mode 100644
index 184ebc1..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_3.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<table id='data'>
-<column-header id='data:commandHeader'>
-<text id='data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='data:inputHeader'>
-<text id='data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='data:3:commandColumn'>
-<button id='data:3:command' value='command3'/>
-</column>
-<column id='data:3:inputColumn'>
-<text id='data:3:input' value='input3'/>
-</column>
-<column id='data:3:outputColumn'>
-<text id='data:3:output' value='output3'/>
-</column>
-<column id='data:3:constantColumn'>
-<text id='data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='data:4:commandColumn'>
-<button id='data:4:command' value='command4'/>
-</column>
-<column id='data:4:inputColumn'>
-<text id='data:4:input' value='input4A'/>
-</column>
-<column id='data:4:outputColumn'>
-<text id='data:4:output' value='output4'/>
-</column>
-<column id='data:4:constantColumn'>
-<text id='data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='data:5:commandColumn'>
-<button id='data:5:command' value='command5'/>
-</column>
-<column id='data:5:inputColumn'>
-<text id='data:5:input' value='input5'/>
-</column>
-<column id='data:5:outputColumn'>
-<text id='data:5:output' value='output5'/>
-</column>
-<column id='data:5:constantColumn'>
-<text id='data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='data:6:commandColumn'>
-<button id='data:6:command' value='command6'/>
-</column>
-<column id='data:6:inputColumn'>
-<text id='data:6:input' value='input6B'/>
-</column>
-<column id='data:6:outputColumn'>
-<text id='data:6:output' value='output6'/>
-</column>
-<column id='data:6:constantColumn'>
-<text id='data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command7'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input7'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output7'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_4.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_4.xml
deleted file mode 100644
index 2566e8b..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_4.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<table id='data'>
-<column-header id='data:commandHeader'>
-<text id='data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='data:inputHeader'>
-<text id='data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='data:3:commandColumn'>
-<button id='data:3:command' value='command3'/>
-</column>
-<column id='data:3:inputColumn'>
-<text id='data:3:input' value='input3A'/>
-</column>
-<column id='data:3:outputColumn'>
-<text id='data:3:output' value='output3'/>
-</column>
-<column id='data:3:constantColumn'>
-<text id='data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='data:4:commandColumn'>
-<button id='data:4:command' value='command4'/>
-</column>
-<column id='data:4:inputColumn'>
-<text id='data:4:input' value='bad'/>
-</column>
-<column id='data:4:outputColumn'>
-<text id='data:4:output' value='output4'/>
-</column>
-<column id='data:4:constantColumn'>
-<text id='data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='data:5:commandColumn'>
-<button id='data:5:command' value='command5'/>
-</column>
-<column id='data:5:inputColumn'>
-<text id='data:5:input' value='input5'/>
-</column>
-<column id='data:5:outputColumn'>
-<text id='data:5:output' value='output5'/>
-</column>
-<column id='data:5:constantColumn'>
-<text id='data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='data:6:commandColumn'>
-<button id='data:6:command' value='command6'/>
-</column>
-<column id='data:6:inputColumn'>
-<text id='data:6:input' value='bad'/>
-</column>
-<column id='data:6:outputColumn'>
-<text id='data:6:output' value='output6'/>
-</column>
-<column id='data:6:constantColumn'>
-<text id='data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command7'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input7B'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output7'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_5.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_5.xml
deleted file mode 100644
index c660cbf..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_5.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<table id='data'>
-<column-header id='data:commandHeader'>
-<text id='data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='data:inputHeader'>
-<text id='data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command7'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input7'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output7'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='8'>
-<column id='data:8:commandColumn'>
-<button id='data:8:command' value='command8'/>
-</column>
-<column id='data:8:inputColumn'>
-<text id='data:8:input' value='input8'/>
-</column>
-<column id='data:8:outputColumn'>
-<text id='data:8:output' value='output8'/>
-</column>
-<column id='data:8:constantColumn'>
-<text id='data:8:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='9'>
-<column id='data:9:commandColumn'>
-<button id='data:9:command' value='command9'/>
-</column>
-<column id='data:9:inputColumn'>
-<text id='data:9:input' value='input9'/>
-</column>
-<column id='data:9:outputColumn'>
-<text id='data:9:output' value='output9'/>
-</column>
-<column id='data:9:constantColumn'>
-<text id='data:9:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_6.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_6.xml
deleted file mode 100644
index 4d16525..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_6.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<table id='data'>
-<column-header id='data:commandHeader'>
-<text id='data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='data:inputHeader'>
-<text id='data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='data:3:commandColumn'>
-<button id='data:3:command' value='command3'/>
-</column>
-<column id='data:3:inputColumn'>
-<text id='data:3:input' value='input3'/>
-</column>
-<column id='data:3:outputColumn'>
-<text id='data:3:output' value='output3'/>
-</column>
-<column id='data:3:constantColumn'>
-<text id='data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='data:4:commandColumn'>
-<button id='data:4:command' value='command4'/>
-</column>
-<column id='data:4:inputColumn'>
-<text id='data:4:input' value='input4A'/>
-</column>
-<column id='data:4:outputColumn'>
-<text id='data:4:output' value='output4'/>
-</column>
-<column id='data:4:constantColumn'>
-<text id='data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='data:5:commandColumn'>
-<button id='data:5:command' value='command6'/>
-</column>
-<column id='data:5:inputColumn'>
-<text id='data:5:input' value='input6B'/>
-</column>
-<column id='data:5:outputColumn'>
-<text id='data:5:output' value='output6'/>
-</column>
-<column id='data:5:constantColumn'>
-<text id='data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='data:6:commandColumn'>
-<button id='data:6:command' value='command7'/>
-</column>
-<column id='data:6:inputColumn'>
-<text id='data:6:input' value='input7'/>
-</column>
-<column id='data:6:outputColumn'>
-<text id='data:6:output' value='output7'/>
-</column>
-<column id='data:6:constantColumn'>
-<text id='data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command8'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input8'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output8'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_7.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_7.xml
deleted file mode 100644
index c039451..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_7.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<table id='data'>
-<column-header id='data:commandHeader'>
-<text id='data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='data:inputHeader'>
-<text id='data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='data:3:commandColumn'>
-<button id='data:3:command' value='command3'/>
-</column>
-<column id='data:3:inputColumn'>
-<text id='data:3:input' value='input3'/>
-</column>
-<column id='data:3:outputColumn'>
-<text id='data:3:output' value='output3'/>
-</column>
-<column id='data:3:constantColumn'>
-<text id='data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='data:4:commandColumn'>
-<button id='data:4:command' value='command4'/>
-</column>
-<column id='data:4:inputColumn'>
-<text id='data:4:input' value='input4'/>
-</column>
-<column id='data:4:outputColumn'>
-<text id='data:4:output' value='output4'/>
-</column>
-<column id='data:4:constantColumn'>
-<text id='data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='data:5:commandColumn'>
-<button id='data:5:command' value='command6'/>
-</column>
-<column id='data:5:inputColumn'>
-<text id='data:5:input' value='input6'/>
-</column>
-<column id='data:5:outputColumn'>
-<text id='data:5:output' value='output6'/>
-</column>
-<column id='data:5:constantColumn'>
-<text id='data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='data:6:commandColumn'>
-<button id='data:6:command' value='command7'/>
-</column>
-<column id='data:6:inputColumn'>
-<text id='data:6:input' value='input7'/>
-</column>
-<column id='data:6:outputColumn'>
-<text id='data:6:output' value='output7'/>
-</column>
-<column id='data:6:constantColumn'>
-<text id='data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command8'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input8'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output8'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_8.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_8.xml
deleted file mode 100644
index a90679b..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_8.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<table id='data'>
-<column-header id='data:hcommand'>
-<button id='data:hcommand' value='Command Action'/>
-</column-header>
-<column-header id='data:hinput'>
-<text id='data:hinput' value='New Value'/>
-</column-header>
-<column-header id='data:outputHeader'>
-<text id='data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='data:constantHeader'>
-<text id='data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='data:3:commandColumn'>
-<button id='data:3:command' value='command3'/>
-</column>
-<column id='data:3:inputColumn'>
-<text id='data:3:input' value='input3'/>
-</column>
-<column id='data:3:outputColumn'>
-<text id='data:3:output' value='output3'/>
-</column>
-<column id='data:3:constantColumn'>
-<text id='data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='data:4:commandColumn'>
-<button id='data:4:command' value='command4'/>
-</column>
-<column id='data:4:inputColumn'>
-<text id='data:4:input' value='input4A'/>
-</column>
-<column id='data:4:outputColumn'>
-<text id='data:4:output' value='output4'/>
-</column>
-<column id='data:4:constantColumn'>
-<text id='data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='data:5:commandColumn'>
-<button id='data:5:command' value='command5'/>
-</column>
-<column id='data:5:inputColumn'>
-<text id='data:5:input' value='input5'/>
-</column>
-<column id='data:5:outputColumn'>
-<text id='data:5:output' value='output5'/>
-</column>
-<column id='data:5:constantColumn'>
-<text id='data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='data:6:commandColumn'>
-<button id='data:6:command' value='command6'/>
-</column>
-<column id='data:6:inputColumn'>
-<text id='data:6:input' value='input6B'/>
-</column>
-<column id='data:6:outputColumn'>
-<text id='data:6:output' value='output6'/>
-</column>
-<column id='data:6:constantColumn'>
-<text id='data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='data:7:commandColumn'>
-<button id='data:7:command' value='command7'/>
-</column>
-<column id='data:7:inputColumn'>
-<text id='data:7:input' value='input7'/>
-</column>
-<column id='data:7:outputColumn'>
-<text id='data:7:output' value='output7'/>
-</column>
-<column id='data:7:constantColumn'>
-<text id='data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='data:commandFooter'>
-<text id='data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='data:inputFooter'>
-<text id='data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='data:outputFooter'>
-<text id='data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='data:constantFooter'>
-<text id='data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_9_withIds.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_9_withIds.xml
deleted file mode 100644
index a354efa..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_9_withIds.xml
+++ /dev/null
@@ -1,502 +0,0 @@
-<table id='outerData'>
-<table-row rowId='3'>
-<column id='outerData:3:outerColumn'>
-<table id='outerData:3:data'>
-<column-header id='outerData:3:data:commandHeader'>
-<text id='outerData:3:data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='outerData:3:data:inputHeader'>
-<text id='outerData:3:data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='outerData:3:data:outputHeader'>
-<text id='outerData:3:data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='outerData:3:data:constantHeader'>
-<text id='outerData:3:data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='outerData:3:data:3:commandColumn'>
-<button id='outerData:3:data:3:command' value='command3'/>
-</column>
-<column id='outerData:3:data:3:inputColumn'>
-<text id='outerData:3:data:3:input' value='input3'/>
-</column>
-<column id='outerData:3:data:3:outputColumn'>
-<text id='outerData:3:data:3:output' value='output3'/>
-</column>
-<column id='outerData:3:data:3:constantColumn'>
-<text id='outerData:3:data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='outerData:3:data:4:commandColumn'>
-<button id='outerData:3:data:4:command' value='command4'/>
-</column>
-<column id='outerData:3:data:4:inputColumn'>
-<text id='outerData:3:data:4:input' value='input4'/>
-</column>
-<column id='outerData:3:data:4:outputColumn'>
-<text id='outerData:3:data:4:output' value='output4'/>
-</column>
-<column id='outerData:3:data:4:constantColumn'>
-<text id='outerData:3:data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='outerData:3:data:5:commandColumn'>
-<button id='outerData:3:data:5:command' value='command5'/>
-</column>
-<column id='outerData:3:data:5:inputColumn'>
-<text id='outerData:3:data:5:input' value='input5'/>
-</column>
-<column id='outerData:3:data:5:outputColumn'>
-<text id='outerData:3:data:5:output' value='output5'/>
-</column>
-<column id='outerData:3:data:5:constantColumn'>
-<text id='outerData:3:data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='outerData:3:data:6:commandColumn'>
-<button id='outerData:3:data:6:command' value='command6'/>
-</column>
-<column id='outerData:3:data:6:inputColumn'>
-<text id='outerData:3:data:6:input' value='input6'/>
-</column>
-<column id='outerData:3:data:6:outputColumn'>
-<text id='outerData:3:data:6:output' value='output6'/>
-</column>
-<column id='outerData:3:data:6:constantColumn'>
-<text id='outerData:3:data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='outerData:3:data:7:commandColumn'>
-<button id='outerData:3:data:7:command' value='command7'/>
-</column>
-<column id='outerData:3:data:7:inputColumn'>
-<text id='outerData:3:data:7:input' value='input7'/>
-</column>
-<column id='outerData:3:data:7:outputColumn'>
-<text id='outerData:3:data:7:output' value='output7'/>
-</column>
-<column id='outerData:3:data:7:constantColumn'>
-<text id='outerData:3:data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='outerData:3:data:commandFooter'>
-<text id='outerData:3:data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='outerData:3:data:inputFooter'>
-<text id='outerData:3:data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='outerData:3:data:outputFooter'>
-<text id='outerData:3:data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='outerData:3:data:constantFooter'>
-<text id='outerData:3:data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='outerData:4:outerColumn'>
-<table id='outerData:4:data'>
-<column-header id='outerData:4:data:commandHeader'>
-<text id='outerData:4:data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='outerData:4:data:inputHeader'>
-<text id='outerData:4:data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='outerData:4:data:outputHeader'>
-<text id='outerData:4:data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='outerData:4:data:constantHeader'>
-<text id='outerData:4:data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='outerData:4:data:3:commandColumn'>
-<button id='outerData:4:data:3:command' value='command3'/>
-</column>
-<column id='outerData:4:data:3:inputColumn'>
-<text id='outerData:4:data:3:input' value='input3'/>
-</column>
-<column id='outerData:4:data:3:outputColumn'>
-<text id='outerData:4:data:3:output' value='output3'/>
-</column>
-<column id='outerData:4:data:3:constantColumn'>
-<text id='outerData:4:data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='outerData:4:data:4:commandColumn'>
-<button id='outerData:4:data:4:command' value='command4'/>
-</column>
-<column id='outerData:4:data:4:inputColumn'>
-<text id='outerData:4:data:4:input' value='input4'/>
-</column>
-<column id='outerData:4:data:4:outputColumn'>
-<text id='outerData:4:data:4:output' value='output4'/>
-</column>
-<column id='outerData:4:data:4:constantColumn'>
-<text id='outerData:4:data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='outerData:4:data:5:commandColumn'>
-<button id='outerData:4:data:5:command' value='command5'/>
-</column>
-<column id='outerData:4:data:5:inputColumn'>
-<text id='outerData:4:data:5:input' value='input5'/>
-</column>
-<column id='outerData:4:data:5:outputColumn'>
-<text id='outerData:4:data:5:output' value='output5'/>
-</column>
-<column id='outerData:4:data:5:constantColumn'>
-<text id='outerData:4:data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='outerData:4:data:6:commandColumn'>
-<button id='outerData:4:data:6:command' value='command6'/>
-</column>
-<column id='outerData:4:data:6:inputColumn'>
-<text id='outerData:4:data:6:input' value='input6'/>
-</column>
-<column id='outerData:4:data:6:outputColumn'>
-<text id='outerData:4:data:6:output' value='output6'/>
-</column>
-<column id='outerData:4:data:6:constantColumn'>
-<text id='outerData:4:data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='outerData:4:data:7:commandColumn'>
-<button id='outerData:4:data:7:command' value='command7'/>
-</column>
-<column id='outerData:4:data:7:inputColumn'>
-<text id='outerData:4:data:7:input' value='input7'/>
-</column>
-<column id='outerData:4:data:7:outputColumn'>
-<text id='outerData:4:data:7:output' value='output7'/>
-</column>
-<column id='outerData:4:data:7:constantColumn'>
-<text id='outerData:4:data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='outerData:4:data:commandFooter'>
-<text id='outerData:4:data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='outerData:4:data:inputFooter'>
-<text id='outerData:4:data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='outerData:4:data:outputFooter'>
-<text id='outerData:4:data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='outerData:4:data:constantFooter'>
-<text id='outerData:4:data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='outerData:5:outerColumn'>
-<table id='outerData:5:data'>
-<column-header id='outerData:5:data:commandHeader'>
-<text id='outerData:5:data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='outerData:5:data:inputHeader'>
-<text id='outerData:5:data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='outerData:5:data:outputHeader'>
-<text id='outerData:5:data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='outerData:5:data:constantHeader'>
-<text id='outerData:5:data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='outerData:5:data:3:commandColumn'>
-<button id='outerData:5:data:3:command' value='command3'/>
-</column>
-<column id='outerData:5:data:3:inputColumn'>
-<text id='outerData:5:data:3:input' value='input3'/>
-</column>
-<column id='outerData:5:data:3:outputColumn'>
-<text id='outerData:5:data:3:output' value='output3'/>
-</column>
-<column id='outerData:5:data:3:constantColumn'>
-<text id='outerData:5:data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='outerData:5:data:4:commandColumn'>
-<button id='outerData:5:data:4:command' value='command4'/>
-</column>
-<column id='outerData:5:data:4:inputColumn'>
-<text id='outerData:5:data:4:input' value='input4'/>
-</column>
-<column id='outerData:5:data:4:outputColumn'>
-<text id='outerData:5:data:4:output' value='output4'/>
-</column>
-<column id='outerData:5:data:4:constantColumn'>
-<text id='outerData:5:data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='outerData:5:data:5:commandColumn'>
-<button id='outerData:5:data:5:command' value='command5'/>
-</column>
-<column id='outerData:5:data:5:inputColumn'>
-<text id='outerData:5:data:5:input' value='input5'/>
-</column>
-<column id='outerData:5:data:5:outputColumn'>
-<text id='outerData:5:data:5:output' value='output5'/>
-</column>
-<column id='outerData:5:data:5:constantColumn'>
-<text id='outerData:5:data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='outerData:5:data:6:commandColumn'>
-<button id='outerData:5:data:6:command' value='command6'/>
-</column>
-<column id='outerData:5:data:6:inputColumn'>
-<text id='outerData:5:data:6:input' value='input6'/>
-</column>
-<column id='outerData:5:data:6:outputColumn'>
-<text id='outerData:5:data:6:output' value='output6'/>
-</column>
-<column id='outerData:5:data:6:constantColumn'>
-<text id='outerData:5:data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='outerData:5:data:7:commandColumn'>
-<button id='outerData:5:data:7:command' value='command7'/>
-</column>
-<column id='outerData:5:data:7:inputColumn'>
-<text id='outerData:5:data:7:input' value='input7'/>
-</column>
-<column id='outerData:5:data:7:outputColumn'>
-<text id='outerData:5:data:7:output' value='output7'/>
-</column>
-<column id='outerData:5:data:7:constantColumn'>
-<text id='outerData:5:data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='outerData:5:data:commandFooter'>
-<text id='outerData:5:data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='outerData:5:data:inputFooter'>
-<text id='outerData:5:data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='outerData:5:data:outputFooter'>
-<text id='outerData:5:data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='outerData:5:data:constantFooter'>
-<text id='outerData:5:data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='outerData:6:outerColumn'>
-<table id='outerData:6:data'>
-<column-header id='outerData:6:data:commandHeader'>
-<text id='outerData:6:data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='outerData:6:data:inputHeader'>
-<text id='outerData:6:data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='outerData:6:data:outputHeader'>
-<text id='outerData:6:data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='outerData:6:data:constantHeader'>
-<text id='outerData:6:data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='outerData:6:data:3:commandColumn'>
-<button id='outerData:6:data:3:command' value='command3'/>
-</column>
-<column id='outerData:6:data:3:inputColumn'>
-<text id='outerData:6:data:3:input' value='input3'/>
-</column>
-<column id='outerData:6:data:3:outputColumn'>
-<text id='outerData:6:data:3:output' value='output3'/>
-</column>
-<column id='outerData:6:data:3:constantColumn'>
-<text id='outerData:6:data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='outerData:6:data:4:commandColumn'>
-<button id='outerData:6:data:4:command' value='command4'/>
-</column>
-<column id='outerData:6:data:4:inputColumn'>
-<text id='outerData:6:data:4:input' value='input4'/>
-</column>
-<column id='outerData:6:data:4:outputColumn'>
-<text id='outerData:6:data:4:output' value='output4'/>
-</column>
-<column id='outerData:6:data:4:constantColumn'>
-<text id='outerData:6:data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='outerData:6:data:5:commandColumn'>
-<button id='outerData:6:data:5:command' value='command5'/>
-</column>
-<column id='outerData:6:data:5:inputColumn'>
-<text id='outerData:6:data:5:input' value='input5'/>
-</column>
-<column id='outerData:6:data:5:outputColumn'>
-<text id='outerData:6:data:5:output' value='output5'/>
-</column>
-<column id='outerData:6:data:5:constantColumn'>
-<text id='outerData:6:data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='outerData:6:data:6:commandColumn'>
-<button id='outerData:6:data:6:command' value='command6'/>
-</column>
-<column id='outerData:6:data:6:inputColumn'>
-<text id='outerData:6:data:6:input' value='input6'/>
-</column>
-<column id='outerData:6:data:6:outputColumn'>
-<text id='outerData:6:data:6:output' value='output6'/>
-</column>
-<column id='outerData:6:data:6:constantColumn'>
-<text id='outerData:6:data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='outerData:6:data:7:commandColumn'>
-<button id='outerData:6:data:7:command' value='command7'/>
-</column>
-<column id='outerData:6:data:7:inputColumn'>
-<text id='outerData:6:data:7:input' value='input7'/>
-</column>
-<column id='outerData:6:data:7:outputColumn'>
-<text id='outerData:6:data:7:output' value='output7'/>
-</column>
-<column id='outerData:6:data:7:constantColumn'>
-<text id='outerData:6:data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='outerData:6:data:commandFooter'>
-<text id='outerData:6:data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='outerData:6:data:inputFooter'>
-<text id='outerData:6:data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='outerData:6:data:outputFooter'>
-<text id='outerData:6:data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='outerData:6:data:constantFooter'>
-<text id='outerData:6:data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='outerData:7:outerColumn'>
-<table id='outerData:7:data'>
-<column-header id='outerData:7:data:commandHeader'>
-<text id='outerData:7:data:commandHeader' value='Command Header'/>
-</column-header>
-<column-header id='outerData:7:data:inputHeader'>
-<text id='outerData:7:data:inputHeader' value='Input Header'/>
-</column-header>
-<column-header id='outerData:7:data:outputHeader'>
-<text id='outerData:7:data:outputHeader' value='Output Header'/>
-</column-header>
-<column-header id='outerData:7:data:constantHeader'>
-<text id='outerData:7:data:constantHeader' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='outerData:7:data:3:commandColumn'>
-<button id='outerData:7:data:3:command' value='command3'/>
-</column>
-<column id='outerData:7:data:3:inputColumn'>
-<text id='outerData:7:data:3:input' value='input3'/>
-</column>
-<column id='outerData:7:data:3:outputColumn'>
-<text id='outerData:7:data:3:output' value='output3'/>
-</column>
-<column id='outerData:7:data:3:constantColumn'>
-<text id='outerData:7:data:3:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='outerData:7:data:4:commandColumn'>
-<button id='outerData:7:data:4:command' value='command4'/>
-</column>
-<column id='outerData:7:data:4:inputColumn'>
-<text id='outerData:7:data:4:input' value='input4'/>
-</column>
-<column id='outerData:7:data:4:outputColumn'>
-<text id='outerData:7:data:4:output' value='output4'/>
-</column>
-<column id='outerData:7:data:4:constantColumn'>
-<text id='outerData:7:data:4:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='outerData:7:data:5:commandColumn'>
-<button id='outerData:7:data:5:command' value='command5'/>
-</column>
-<column id='outerData:7:data:5:inputColumn'>
-<text id='outerData:7:data:5:input' value='input5'/>
-</column>
-<column id='outerData:7:data:5:outputColumn'>
-<text id='outerData:7:data:5:output' value='output5'/>
-</column>
-<column id='outerData:7:data:5:constantColumn'>
-<text id='outerData:7:data:5:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='outerData:7:data:6:commandColumn'>
-<button id='outerData:7:data:6:command' value='command6'/>
-</column>
-<column id='outerData:7:data:6:inputColumn'>
-<text id='outerData:7:data:6:input' value='input6'/>
-</column>
-<column id='outerData:7:data:6:outputColumn'>
-<text id='outerData:7:data:6:output' value='output6'/>
-</column>
-<column id='outerData:7:data:6:constantColumn'>
-<text id='outerData:7:data:6:constant' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='outerData:7:data:7:commandColumn'>
-<button id='outerData:7:data:7:command' value='command7'/>
-</column>
-<column id='outerData:7:data:7:inputColumn'>
-<text id='outerData:7:data:7:input' value='input7'/>
-</column>
-<column id='outerData:7:data:7:outputColumn'>
-<text id='outerData:7:data:7:output' value='output7'/>
-</column>
-<column id='outerData:7:data:7:constantColumn'>
-<text id='outerData:7:data:7:constant' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='outerData:7:data:commandFooter'>
-<text id='outerData:7:data:commandFooter' value='Command Footer'/>
-</column-footer>
-<column-footer id='outerData:7:data:inputFooter'>
-<text id='outerData:7:data:inputFooter' value='Input Footer'/>
-</column-footer>
-<column-footer id='outerData:7:data:outputFooter'>
-<text id='outerData:7:data:outputFooter' value='Output Footer'/>
-</column-footer>
-<column-footer id='outerData:7:data:constantFooter'>
-<text id='outerData:7:data:constantFooter' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_9_withoutIds.xml b/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_9_withoutIds.xml
deleted file mode 100644
index 31008a3..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIDataTestCase_9_withoutIds.xml
+++ /dev/null
@@ -1,502 +0,0 @@
-<table id='j_id0'>
-<table-row rowId='3'>
-<column id='j_id0:3:j_id3'>
-<table id='j_id0:3:j_id1'>
-<column-header id='j_id0:3:j_id1:j_id4'>
-<text id='j_id0:3:j_id1:j_id4' value='Command Header'/>
-</column-header>
-<column-header id='j_id0:3:j_id1:j_id5'>
-<text id='j_id0:3:j_id1:j_id5' value='Input Header'/>
-</column-header>
-<column-header id='j_id0:3:j_id1:j_id6'>
-<text id='j_id0:3:j_id1:j_id6' value='Output Header'/>
-</column-header>
-<column-header id='j_id0:3:j_id1:j_id7'>
-<text id='j_id0:3:j_id1:j_id7' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='j_id0:3:j_id1:3:j_id8'>
-<button id='j_id0:3:j_id1:3:j_id9' value='command3'/>
-</column>
-<column id='j_id0:3:j_id1:3:j_id10'>
-<text id='j_id0:3:j_id1:3:j_id2' value='input3'/>
-</column>
-<column id='j_id0:3:j_id1:3:j_id11'>
-<text id='j_id0:3:j_id1:3:j_id12' value='output3'/>
-</column>
-<column id='j_id0:3:j_id1:3:j_id13'>
-<text id='j_id0:3:j_id1:3:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='j_id0:3:j_id1:4:j_id8'>
-<button id='j_id0:3:j_id1:4:j_id9' value='command4'/>
-</column>
-<column id='j_id0:3:j_id1:4:j_id10'>
-<text id='j_id0:3:j_id1:4:j_id2' value='input4'/>
-</column>
-<column id='j_id0:3:j_id1:4:j_id11'>
-<text id='j_id0:3:j_id1:4:j_id12' value='output4'/>
-</column>
-<column id='j_id0:3:j_id1:4:j_id13'>
-<text id='j_id0:3:j_id1:4:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='j_id0:3:j_id1:5:j_id8'>
-<button id='j_id0:3:j_id1:5:j_id9' value='command5'/>
-</column>
-<column id='j_id0:3:j_id1:5:j_id10'>
-<text id='j_id0:3:j_id1:5:j_id2' value='input5'/>
-</column>
-<column id='j_id0:3:j_id1:5:j_id11'>
-<text id='j_id0:3:j_id1:5:j_id12' value='output5'/>
-</column>
-<column id='j_id0:3:j_id1:5:j_id13'>
-<text id='j_id0:3:j_id1:5:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='j_id0:3:j_id1:6:j_id8'>
-<button id='j_id0:3:j_id1:6:j_id9' value='command6'/>
-</column>
-<column id='j_id0:3:j_id1:6:j_id10'>
-<text id='j_id0:3:j_id1:6:j_id2' value='input6'/>
-</column>
-<column id='j_id0:3:j_id1:6:j_id11'>
-<text id='j_id0:3:j_id1:6:j_id12' value='output6'/>
-</column>
-<column id='j_id0:3:j_id1:6:j_id13'>
-<text id='j_id0:3:j_id1:6:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='j_id0:3:j_id1:7:j_id8'>
-<button id='j_id0:3:j_id1:7:j_id9' value='command7'/>
-</column>
-<column id='j_id0:3:j_id1:7:j_id10'>
-<text id='j_id0:3:j_id1:7:j_id2' value='input7'/>
-</column>
-<column id='j_id0:3:j_id1:7:j_id11'>
-<text id='j_id0:3:j_id1:7:j_id12' value='output7'/>
-</column>
-<column id='j_id0:3:j_id1:7:j_id13'>
-<text id='j_id0:3:j_id1:7:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='j_id0:3:j_id1:j_id15'>
-<text id='j_id0:3:j_id1:j_id15' value='Command Footer'/>
-</column-footer>
-<column-footer id='j_id0:3:j_id1:j_id16'>
-<text id='j_id0:3:j_id1:j_id16' value='Input Footer'/>
-</column-footer>
-<column-footer id='j_id0:3:j_id1:j_id17'>
-<text id='j_id0:3:j_id1:j_id17' value='Output Footer'/>
-</column-footer>
-<column-footer id='j_id0:3:j_id1:j_id18'>
-<text id='j_id0:3:j_id1:j_id18' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='j_id0:4:j_id3'>
-<table id='j_id0:4:j_id1'>
-<column-header id='j_id0:4:j_id1:j_id4'>
-<text id='j_id0:4:j_id1:j_id4' value='Command Header'/>
-</column-header>
-<column-header id='j_id0:4:j_id1:j_id5'>
-<text id='j_id0:4:j_id1:j_id5' value='Input Header'/>
-</column-header>
-<column-header id='j_id0:4:j_id1:j_id6'>
-<text id='j_id0:4:j_id1:j_id6' value='Output Header'/>
-</column-header>
-<column-header id='j_id0:4:j_id1:j_id7'>
-<text id='j_id0:4:j_id1:j_id7' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='j_id0:4:j_id1:3:j_id8'>
-<button id='j_id0:4:j_id1:3:j_id9' value='command3'/>
-</column>
-<column id='j_id0:4:j_id1:3:j_id10'>
-<text id='j_id0:4:j_id1:3:j_id2' value='input3'/>
-</column>
-<column id='j_id0:4:j_id1:3:j_id11'>
-<text id='j_id0:4:j_id1:3:j_id12' value='output3'/>
-</column>
-<column id='j_id0:4:j_id1:3:j_id13'>
-<text id='j_id0:4:j_id1:3:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='j_id0:4:j_id1:4:j_id8'>
-<button id='j_id0:4:j_id1:4:j_id9' value='command4'/>
-</column>
-<column id='j_id0:4:j_id1:4:j_id10'>
-<text id='j_id0:4:j_id1:4:j_id2' value='input4'/>
-</column>
-<column id='j_id0:4:j_id1:4:j_id11'>
-<text id='j_id0:4:j_id1:4:j_id12' value='output4'/>
-</column>
-<column id='j_id0:4:j_id1:4:j_id13'>
-<text id='j_id0:4:j_id1:4:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='j_id0:4:j_id1:5:j_id8'>
-<button id='j_id0:4:j_id1:5:j_id9' value='command5'/>
-</column>
-<column id='j_id0:4:j_id1:5:j_id10'>
-<text id='j_id0:4:j_id1:5:j_id2' value='input5'/>
-</column>
-<column id='j_id0:4:j_id1:5:j_id11'>
-<text id='j_id0:4:j_id1:5:j_id12' value='output5'/>
-</column>
-<column id='j_id0:4:j_id1:5:j_id13'>
-<text id='j_id0:4:j_id1:5:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='j_id0:4:j_id1:6:j_id8'>
-<button id='j_id0:4:j_id1:6:j_id9' value='command6'/>
-</column>
-<column id='j_id0:4:j_id1:6:j_id10'>
-<text id='j_id0:4:j_id1:6:j_id2' value='input6'/>
-</column>
-<column id='j_id0:4:j_id1:6:j_id11'>
-<text id='j_id0:4:j_id1:6:j_id12' value='output6'/>
-</column>
-<column id='j_id0:4:j_id1:6:j_id13'>
-<text id='j_id0:4:j_id1:6:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='j_id0:4:j_id1:7:j_id8'>
-<button id='j_id0:4:j_id1:7:j_id9' value='command7'/>
-</column>
-<column id='j_id0:4:j_id1:7:j_id10'>
-<text id='j_id0:4:j_id1:7:j_id2' value='input7'/>
-</column>
-<column id='j_id0:4:j_id1:7:j_id11'>
-<text id='j_id0:4:j_id1:7:j_id12' value='output7'/>
-</column>
-<column id='j_id0:4:j_id1:7:j_id13'>
-<text id='j_id0:4:j_id1:7:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='j_id0:4:j_id1:j_id15'>
-<text id='j_id0:4:j_id1:j_id15' value='Command Footer'/>
-</column-footer>
-<column-footer id='j_id0:4:j_id1:j_id16'>
-<text id='j_id0:4:j_id1:j_id16' value='Input Footer'/>
-</column-footer>
-<column-footer id='j_id0:4:j_id1:j_id17'>
-<text id='j_id0:4:j_id1:j_id17' value='Output Footer'/>
-</column-footer>
-<column-footer id='j_id0:4:j_id1:j_id18'>
-<text id='j_id0:4:j_id1:j_id18' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='j_id0:5:j_id3'>
-<table id='j_id0:5:j_id1'>
-<column-header id='j_id0:5:j_id1:j_id4'>
-<text id='j_id0:5:j_id1:j_id4' value='Command Header'/>
-</column-header>
-<column-header id='j_id0:5:j_id1:j_id5'>
-<text id='j_id0:5:j_id1:j_id5' value='Input Header'/>
-</column-header>
-<column-header id='j_id0:5:j_id1:j_id6'>
-<text id='j_id0:5:j_id1:j_id6' value='Output Header'/>
-</column-header>
-<column-header id='j_id0:5:j_id1:j_id7'>
-<text id='j_id0:5:j_id1:j_id7' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='j_id0:5:j_id1:3:j_id8'>
-<button id='j_id0:5:j_id1:3:j_id9' value='command3'/>
-</column>
-<column id='j_id0:5:j_id1:3:j_id10'>
-<text id='j_id0:5:j_id1:3:j_id2' value='input3'/>
-</column>
-<column id='j_id0:5:j_id1:3:j_id11'>
-<text id='j_id0:5:j_id1:3:j_id12' value='output3'/>
-</column>
-<column id='j_id0:5:j_id1:3:j_id13'>
-<text id='j_id0:5:j_id1:3:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='j_id0:5:j_id1:4:j_id8'>
-<button id='j_id0:5:j_id1:4:j_id9' value='command4'/>
-</column>
-<column id='j_id0:5:j_id1:4:j_id10'>
-<text id='j_id0:5:j_id1:4:j_id2' value='input4'/>
-</column>
-<column id='j_id0:5:j_id1:4:j_id11'>
-<text id='j_id0:5:j_id1:4:j_id12' value='output4'/>
-</column>
-<column id='j_id0:5:j_id1:4:j_id13'>
-<text id='j_id0:5:j_id1:4:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='j_id0:5:j_id1:5:j_id8'>
-<button id='j_id0:5:j_id1:5:j_id9' value='command5'/>
-</column>
-<column id='j_id0:5:j_id1:5:j_id10'>
-<text id='j_id0:5:j_id1:5:j_id2' value='input5'/>
-</column>
-<column id='j_id0:5:j_id1:5:j_id11'>
-<text id='j_id0:5:j_id1:5:j_id12' value='output5'/>
-</column>
-<column id='j_id0:5:j_id1:5:j_id13'>
-<text id='j_id0:5:j_id1:5:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='j_id0:5:j_id1:6:j_id8'>
-<button id='j_id0:5:j_id1:6:j_id9' value='command6'/>
-</column>
-<column id='j_id0:5:j_id1:6:j_id10'>
-<text id='j_id0:5:j_id1:6:j_id2' value='input6'/>
-</column>
-<column id='j_id0:5:j_id1:6:j_id11'>
-<text id='j_id0:5:j_id1:6:j_id12' value='output6'/>
-</column>
-<column id='j_id0:5:j_id1:6:j_id13'>
-<text id='j_id0:5:j_id1:6:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='j_id0:5:j_id1:7:j_id8'>
-<button id='j_id0:5:j_id1:7:j_id9' value='command7'/>
-</column>
-<column id='j_id0:5:j_id1:7:j_id10'>
-<text id='j_id0:5:j_id1:7:j_id2' value='input7'/>
-</column>
-<column id='j_id0:5:j_id1:7:j_id11'>
-<text id='j_id0:5:j_id1:7:j_id12' value='output7'/>
-</column>
-<column id='j_id0:5:j_id1:7:j_id13'>
-<text id='j_id0:5:j_id1:7:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='j_id0:5:j_id1:j_id15'>
-<text id='j_id0:5:j_id1:j_id15' value='Command Footer'/>
-</column-footer>
-<column-footer id='j_id0:5:j_id1:j_id16'>
-<text id='j_id0:5:j_id1:j_id16' value='Input Footer'/>
-</column-footer>
-<column-footer id='j_id0:5:j_id1:j_id17'>
-<text id='j_id0:5:j_id1:j_id17' value='Output Footer'/>
-</column-footer>
-<column-footer id='j_id0:5:j_id1:j_id18'>
-<text id='j_id0:5:j_id1:j_id18' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='j_id0:6:j_id3'>
-<table id='j_id0:6:j_id1'>
-<column-header id='j_id0:6:j_id1:j_id4'>
-<text id='j_id0:6:j_id1:j_id4' value='Command Header'/>
-</column-header>
-<column-header id='j_id0:6:j_id1:j_id5'>
-<text id='j_id0:6:j_id1:j_id5' value='Input Header'/>
-</column-header>
-<column-header id='j_id0:6:j_id1:j_id6'>
-<text id='j_id0:6:j_id1:j_id6' value='Output Header'/>
-</column-header>
-<column-header id='j_id0:6:j_id1:j_id7'>
-<text id='j_id0:6:j_id1:j_id7' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='j_id0:6:j_id1:3:j_id8'>
-<button id='j_id0:6:j_id1:3:j_id9' value='command3'/>
-</column>
-<column id='j_id0:6:j_id1:3:j_id10'>
-<text id='j_id0:6:j_id1:3:j_id2' value='input3'/>
-</column>
-<column id='j_id0:6:j_id1:3:j_id11'>
-<text id='j_id0:6:j_id1:3:j_id12' value='output3'/>
-</column>
-<column id='j_id0:6:j_id1:3:j_id13'>
-<text id='j_id0:6:j_id1:3:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='j_id0:6:j_id1:4:j_id8'>
-<button id='j_id0:6:j_id1:4:j_id9' value='command4'/>
-</column>
-<column id='j_id0:6:j_id1:4:j_id10'>
-<text id='j_id0:6:j_id1:4:j_id2' value='input4'/>
-</column>
-<column id='j_id0:6:j_id1:4:j_id11'>
-<text id='j_id0:6:j_id1:4:j_id12' value='output4'/>
-</column>
-<column id='j_id0:6:j_id1:4:j_id13'>
-<text id='j_id0:6:j_id1:4:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='j_id0:6:j_id1:5:j_id8'>
-<button id='j_id0:6:j_id1:5:j_id9' value='command5'/>
-</column>
-<column id='j_id0:6:j_id1:5:j_id10'>
-<text id='j_id0:6:j_id1:5:j_id2' value='input5'/>
-</column>
-<column id='j_id0:6:j_id1:5:j_id11'>
-<text id='j_id0:6:j_id1:5:j_id12' value='output5'/>
-</column>
-<column id='j_id0:6:j_id1:5:j_id13'>
-<text id='j_id0:6:j_id1:5:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='j_id0:6:j_id1:6:j_id8'>
-<button id='j_id0:6:j_id1:6:j_id9' value='command6'/>
-</column>
-<column id='j_id0:6:j_id1:6:j_id10'>
-<text id='j_id0:6:j_id1:6:j_id2' value='input6'/>
-</column>
-<column id='j_id0:6:j_id1:6:j_id11'>
-<text id='j_id0:6:j_id1:6:j_id12' value='output6'/>
-</column>
-<column id='j_id0:6:j_id1:6:j_id13'>
-<text id='j_id0:6:j_id1:6:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='j_id0:6:j_id1:7:j_id8'>
-<button id='j_id0:6:j_id1:7:j_id9' value='command7'/>
-</column>
-<column id='j_id0:6:j_id1:7:j_id10'>
-<text id='j_id0:6:j_id1:7:j_id2' value='input7'/>
-</column>
-<column id='j_id0:6:j_id1:7:j_id11'>
-<text id='j_id0:6:j_id1:7:j_id12' value='output7'/>
-</column>
-<column id='j_id0:6:j_id1:7:j_id13'>
-<text id='j_id0:6:j_id1:7:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='j_id0:6:j_id1:j_id15'>
-<text id='j_id0:6:j_id1:j_id15' value='Command Footer'/>
-</column-footer>
-<column-footer id='j_id0:6:j_id1:j_id16'>
-<text id='j_id0:6:j_id1:j_id16' value='Input Footer'/>
-</column-footer>
-<column-footer id='j_id0:6:j_id1:j_id17'>
-<text id='j_id0:6:j_id1:j_id17' value='Output Footer'/>
-</column-footer>
-<column-footer id='j_id0:6:j_id1:j_id18'>
-<text id='j_id0:6:j_id1:j_id18' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='j_id0:7:j_id3'>
-<table id='j_id0:7:j_id1'>
-<column-header id='j_id0:7:j_id1:j_id4'>
-<text id='j_id0:7:j_id1:j_id4' value='Command Header'/>
-</column-header>
-<column-header id='j_id0:7:j_id1:j_id5'>
-<text id='j_id0:7:j_id1:j_id5' value='Input Header'/>
-</column-header>
-<column-header id='j_id0:7:j_id1:j_id6'>
-<text id='j_id0:7:j_id1:j_id6' value='Output Header'/>
-</column-header>
-<column-header id='j_id0:7:j_id1:j_id7'>
-<text id='j_id0:7:j_id1:j_id7' value='Constant Header'/>
-</column-header>
-<table-row rowId='3'>
-<column id='j_id0:7:j_id1:3:j_id8'>
-<button id='j_id0:7:j_id1:3:j_id9' value='command3'/>
-</column>
-<column id='j_id0:7:j_id1:3:j_id10'>
-<text id='j_id0:7:j_id1:3:j_id2' value='input3'/>
-</column>
-<column id='j_id0:7:j_id1:3:j_id11'>
-<text id='j_id0:7:j_id1:3:j_id12' value='output3'/>
-</column>
-<column id='j_id0:7:j_id1:3:j_id13'>
-<text id='j_id0:7:j_id1:3:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='4'>
-<column id='j_id0:7:j_id1:4:j_id8'>
-<button id='j_id0:7:j_id1:4:j_id9' value='command4'/>
-</column>
-<column id='j_id0:7:j_id1:4:j_id10'>
-<text id='j_id0:7:j_id1:4:j_id2' value='input4'/>
-</column>
-<column id='j_id0:7:j_id1:4:j_id11'>
-<text id='j_id0:7:j_id1:4:j_id12' value='output4'/>
-</column>
-<column id='j_id0:7:j_id1:4:j_id13'>
-<text id='j_id0:7:j_id1:4:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='5'>
-<column id='j_id0:7:j_id1:5:j_id8'>
-<button id='j_id0:7:j_id1:5:j_id9' value='command5'/>
-</column>
-<column id='j_id0:7:j_id1:5:j_id10'>
-<text id='j_id0:7:j_id1:5:j_id2' value='input5'/>
-</column>
-<column id='j_id0:7:j_id1:5:j_id11'>
-<text id='j_id0:7:j_id1:5:j_id12' value='output5'/>
-</column>
-<column id='j_id0:7:j_id1:5:j_id13'>
-<text id='j_id0:7:j_id1:5:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='6'>
-<column id='j_id0:7:j_id1:6:j_id8'>
-<button id='j_id0:7:j_id1:6:j_id9' value='command6'/>
-</column>
-<column id='j_id0:7:j_id1:6:j_id10'>
-<text id='j_id0:7:j_id1:6:j_id2' value='input6'/>
-</column>
-<column id='j_id0:7:j_id1:6:j_id11'>
-<text id='j_id0:7:j_id1:6:j_id12' value='output6'/>
-</column>
-<column id='j_id0:7:j_id1:6:j_id13'>
-<text id='j_id0:7:j_id1:6:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<table-row rowId='7'>
-<column id='j_id0:7:j_id1:7:j_id8'>
-<button id='j_id0:7:j_id1:7:j_id9' value='command7'/>
-</column>
-<column id='j_id0:7:j_id1:7:j_id10'>
-<text id='j_id0:7:j_id1:7:j_id2' value='input7'/>
-</column>
-<column id='j_id0:7:j_id1:7:j_id11'>
-<text id='j_id0:7:j_id1:7:j_id12' value='output7'/>
-</column>
-<column id='j_id0:7:j_id1:7:j_id13'>
-<text id='j_id0:7:j_id1:7:j_id14' value='Constant Value'/>
-</column>
-</table-row>
-<column-footer id='j_id0:7:j_id1:j_id15'>
-<text id='j_id0:7:j_id1:j_id15' value='Command Footer'/>
-</column-footer>
-<column-footer id='j_id0:7:j_id1:j_id16'>
-<text id='j_id0:7:j_id1:j_id16' value='Input Footer'/>
-</column-footer>
-<column-footer id='j_id0:7:j_id1:j_id17'>
-<text id='j_id0:7:j_id1:j_id17' value='Output Footer'/>
-</column-footer>
-<column-footer id='j_id0:7:j_id1:j_id18'>
-<text id='j_id0:7:j_id1:j_id18' value='Constant Footer'/>
-</column-footer>
-</table>
-</column>
-</table-row>
-</table>
diff --git a/jsf-api/src/test/java/javax/faces/component/UIFormTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIFormTestCase.java
deleted file mode 100644
index 45f6d21..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIFormTestCase.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIInput;
-import javax.faces.render.RenderKitFactory;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UIForm}.</p>
- */
-
-public class UIFormTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIFormTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UIForm();
-        expectedFamily = UIForm.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = "javax.faces.Form";
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIFormTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-
-    // Test a pristine UIForm instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIForm form = (UIForm) component;
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIForm form = (UIForm) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIForm form = (UIForm) component;
-
-    }
-
-    // test prependId does the right thing.
-    public void testPrependId() throws Exception {
-
-	UIForm form = null;
-	UIInput input = null;
-    UINamingContainer container = null;
-	UIViewRoot root = null;
-	
-	// Case 1: no user specified id anywhere, isPrependId==true
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-	
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 1: no user specified id anywhere, isPrependId==true .",
-		     "j_id0:j_id1", input.getClientId(facesContext));
-
-
-	// Case 2: user specified id on form only, isPrependId==true
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);	
-	form.setId("form");
-
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 2: user specified id on form only, isPrependId==true .",
-		     "form:j_id0", input.getClientId(facesContext));
-
-	// Case 3: user specified id on input only, isPrependId==true
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);	
-	input.setId("input");
-
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 3: user specified id on input only, isPrependId==true .",
-		     "j_id0:input", input.getClientId(facesContext));
-
-	// Case 4: user specified id everywhere, isPrependId==true
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);	
-	form.setId("form");
-	input.setId("input");
-
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 4: user specified id everywhere, isPrependId==true .",
-		     "form:input", input.getClientId(facesContext));
-
-	// Case 5: no user specified id anywhere, isPrependId==false
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);	
-	form.setPrependId(false);
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 5: no user specified id anywhere, isPrependId==false .",
-		     "j_id0", input.getClientId(facesContext));
-
-
-	// Case 6: user specified id on form only, isPrependId==false
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);	
-	form.setPrependId(false);
-	form.setId("form");
-
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 6: user specified id on form only, isPrependId==false .",
-		     "j_id0", input.getClientId(facesContext));
-
-	// Case 7: user specified id on input only, isPrependId==false
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);	
-	form.setPrependId(false);
-	input.setId("input");
-
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 7: user specified id on input only, isPrependId==false .",
-		     "input", input.getClientId(facesContext));
-
-	// Case 8: user specified id everywhere, isPrependId==false
-	root = new UIViewRoot();
-	form = new UIForm();
-	input = new UIInput();
-	root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);	
-	form.setPrependId(false);
-	form.setId("form");
-	input.setId("input");
-
-	form.getChildren().add(input);
-	root.getChildren().add(form);
-
-	facesContext.setViewRoot(root);
-
-	assertEquals("Case 8: user specified id everywhere, isPrependId==false .",
-		     "input", input.getClientId(facesContext));
-
-	// Case 9: UIForm only, no user specified id, isPrependId==true
-	form = new UIForm();
-	assertEquals("Case 9: UIForm only, no user specified id, isPrepend==true",
-		     "j_id0", form.getClientId(facesContext));
-
-	// Case 10: UIForm only, no user specified id, isPrependId==false
-	form = new UIForm();
-	form.setPrependId(false);
-	assertEquals("Case 10: UIForm only, no user specified id, isPrependId==false",
-		     "j_id1", form.getClientId(facesContext));
-    
-    
-    // Case 11: UIForm has a parent NamingContainer, isPrependId==true"
-    root = new UIViewRoot();
-    container = new UINamingContainer();
-    form = new UIForm();
-    input = new UIInput();
-    root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);    
-    form.setPrependId(true);
-    container.setId("subview");
-    form.setId("form");
-    input.setId("input");
-    
-    form.getChildren().add(input);
-    container.getChildren().add(form);
-    root.getChildren().add(container);
-    
-    facesContext.setViewRoot(root);
-    
-    assertEquals("Case 11: UIForm has a parent NamingContainer, isPrependId==true",
-            "subview:form:input", input.getClientId(facesContext));
-    
-    // Case 12: UIForm has a parent NamingContainer, isPrependId==false
-    form.setPrependId(false);
-    input.setId("input");
-    assertEquals("Case 12: UIForm has a parent NamingContainer, isPrependId==false",
-            "subview:input", input.getClientId(facesContext));
-    
-
-    }
-
-    public void testSaveState() throws Exception {
-        UIForm form = new UIForm();
-        form.getAttributes().put("foo", "bar");
-        form.setPrependId(true);
-        Object state = form.saveState(facesContext);
-        form = new UIForm();
-        form.restoreState(facesContext, state);
-        assertTrue("bar".equals(form.getAttributes().get("foo")));
-        assertTrue(form.isPrependId());
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIGraphicTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIGraphicTestCase.java
deleted file mode 100644
index 27af5ab..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIGraphicTestCase.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import javax.faces.el.ValueBinding;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UIGraphic}.</p>
- */
-
-public class UIGraphicTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIGraphicTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UIGraphic();
-        expectedFamily = UIGraphic.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = "javax.faces.Image";
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIGraphicTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UIGraphic graphic = (UIGraphic) component;
-
-        assertEquals(graphic.getValue(),
-                     (String) component.getAttributes().get("value"));
-        graphic.setValue("foo");
-        assertEquals("foo", (String) component.getAttributes().get("value"));
-        graphic.setValue(null);
-        assertNull((String) component.getAttributes().get("value"));
-        component.getAttributes().put("value", "bar");
-        assertEquals("bar", graphic.getValue());
-        component.getAttributes().put("value", null);
-        assertNull(graphic.getValue());
-
-        assertEquals(graphic.getUrl(),
-                     (String) graphic.getAttributes().get("url"));
-        graphic.setUrl("foo");
-        assertEquals("foo", (String) graphic.getAttributes().get("url"));
-        graphic.setUrl(null);
-        assertNull((String) graphic.getAttributes().get("url"));
-        graphic.getAttributes().put("url", "bar");
-        assertEquals("bar", graphic.getUrl());
-        graphic.getAttributes().put("url", null);
-        assertNull(graphic.getUrl());
-
-    }
-
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-    // Test a pristine UIGraphic instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIGraphic graphic = (UIGraphic) component;
-
-        assertNull("no value", graphic.getValue());
-        assertNull("no url", graphic.getUrl());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIGraphic graphic = (UIGraphic) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIGraphic graphic = (UIGraphic) component;
-
-        // value
-        graphic.setValue("foo.bar");
-        assertEquals("expected value",
-                     "foo.bar", graphic.getValue());
-        graphic.setValue(null);
-        assertNull("erased value", graphic.getValue());
-
-        // Test transparency between "value" and "url" properties
-        graphic.setUrl("foo");
-        assertEquals("foo", (String) graphic.getValue());
-        graphic.setUrl(null);
-        assertNull(graphic.getValue());
-        graphic.setValue("bar");
-        assertEquals("bar", graphic.getUrl());
-        graphic.setValue(null);
-        assertNull(graphic.getUrl());
-
-        // Transparency applies to value bindings as well
-        assertNull(graphic.getValueBinding("url"));
-        assertNull(graphic.getValueBinding("value"));
-        request.setAttribute("foo", "bar");
-        ValueBinding vb = application.createValueBinding("#{foo}");
-        graphic.setValueBinding("url", vb);
-        assertTrue(vb == graphic.getValueBinding("url"));
-        assertTrue(vb == graphic.getValueBinding("value"));
-        graphic.setValueBinding("url", null);
-        assertNull(graphic.getValueBinding("url"));
-        assertNull(graphic.getValueBinding("value"));
-        graphic.setValueBinding("value", vb);
-        assertTrue(vb == graphic.getValueBinding("url"));
-        assertTrue(vb == graphic.getValueBinding("value"));
-        graphic.setValueBinding("url", null);
-        assertNull(graphic.getValueBinding("url"));
-        assertNull(graphic.getValueBinding("value"));
-
-    }
-
-
-    public void PENDING_FIXME_testValueBindings() {
-
-	super.testValueBindings();
-	UIGraphic test = (UIGraphic) component;
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UIGraphic();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIInputAttachedObjectStateTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIInputAttachedObjectStateTestCase.java
deleted file mode 100644
index 8c2c407..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIInputAttachedObjectStateTestCase.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.framework.TestCase;
-
-import javax.faces.context.FacesContext;
-import javax.faces.validator.LengthValidator;
-import javax.faces.validator.Validator;
-
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockApplication;
-
-
-public class UIInputAttachedObjectStateTestCase extends TestCase {
-
-    private MockFacesContext facesContext;
-
-    public UIInputAttachedObjectStateTestCase(String arg0) {
-        super(arg0);
-    }
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIInputAttachedObjectStateTestCase.class));
-    }
-
-    public void setUp() throws Exception {
-        super.setUp();
-        facesContext = new MockFacesContext();
-        facesContext.setApplication(new MockApplication());
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testValidatorState() {
-
-        UIInput input = new UIInput();
-        LengthValidator l1 = new LengthValidator();
-        LengthValidator l2 = new LengthValidator();
-        input.addValidator(l1);
-        input.addValidator(l2);
-        l1.setMinimum(1);
-        l2.setMinimum(2);
-        input.markInitialState();
-        assertTrue(input.initialStateMarked());
-        assertTrue(l1.initialStateMarked());
-        assertTrue(l2.initialStateMarked());
-
-        Object state = input.saveState(facesContext);
-        assertTrue(state instanceof Object[]);
-        assertTrue(((Object[]) state)[3] == null);
-
-        input = new UIInput();
-        l1 = new LengthValidator();
-        l2 = new LengthValidator();
-        input.addValidator(l1);
-        input.addValidator(l2);
-        l1.setMinimum(1);
-        l2.setMinimum(2);
-        input.markInitialState();
-        l2.setMinimum(3);
-        assertTrue(input.initialStateMarked());
-        assertTrue(l1.initialStateMarked());
-        assertTrue(!l2.initialStateMarked());
-        state = input.saveState(facesContext);
-        assertTrue(state instanceof Object[]);
-        Object[] validatorState = (Object[]) ((Object[]) state)[3];
-        assertNotNull(validatorState);
-        assertNull(validatorState[0]);
-        assertNotNull(validatorState[1]);
-        assertTrue(!(validatorState[1] instanceof StateHolderSaver));
-        input = new UIInput();
-        l1 = new LengthValidator();
-        l2 = new LengthValidator();
-        l1.setMinimum(1);
-        l2.setMinimum(2);
-        input.addValidator(l1);
-        input.addValidator(l2);
-        input.restoreState(facesContext, state);
-        assertTrue(l1.getMinimum() == 1);
-        assertTrue(l2.getMinimum() == 3);
-        assertTrue(input.getValidators().length == 2);
-
-        input = new UIInput();
-        l1 = new LengthValidator();
-        l2 = new LengthValidator();
-        input.addValidator(l1);
-        input.addValidator(l2);
-        l1.setMinimum(1);
-        l2.setMinimum(2);
-        input.markInitialState();
-        LengthValidator l3 = new LengthValidator();
-        l3.setMinimum(3);
-        input.addValidator(l3);
-        state = input.saveState(facesContext);
-        assertNotNull(validatorState);
-        assertTrue(state instanceof Object[]);
-        validatorState = (Object[]) ((Object[]) state)[3];
-        assertNotNull(validatorState);
-        assertTrue(validatorState.length == 3);
-        assertNotNull(validatorState[0]);
-        assertNotNull(validatorState[1]);
-        assertNotNull(validatorState[2]);
-        assertTrue(validatorState[0] instanceof StateHolderSaver);
-        assertTrue(validatorState[1] instanceof StateHolderSaver);
-        assertTrue(validatorState[2] instanceof StateHolderSaver);
-
-        input = new UIInput();
-        l1 = new LengthValidator();
-        l2 = new LengthValidator();
-        l3 = new LengthValidator();
-        LengthValidator l4 = new LengthValidator();
-        input.addValidator(l1);
-        input.addValidator(l2);
-        input.addValidator(l3);
-        input.addValidator(l4);
-        l1.setMinimum(100);
-        l2.setMinimum(101);
-        l3.setMinimum(102);
-        l4.setMinimum(103);
-        assertTrue(input.getValidators().length == 4);
-        input.markInitialState();
-        input.restoreState(facesContext, state);
-        assertTrue(input.getValidators().length == 3);
-       
-        Validator[] validators = input.getValidators();
-        for (int i = 0, len = validators.length; i < len; i++) {
-            LengthValidator v = (LengthValidator) validators[i];
-            assertTrue(v.getMinimum() == (i + 1));
-        }
-
-    }
-    
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIInputTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIInputTestCase.java
deleted file mode 100644
index bb19c11..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIInputTestCase.java
+++ /dev/null
@@ -1,682 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.el.MethodBinding;
-import javax.faces.event.PhaseId;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.validator.Validator;
-import java.util.Iterator;
-
-
-/**
- * <p>Unit tests for {@link UIInput}.</p>
- */
-
-public class UIInputTestCase extends UIOutputTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIInputTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UIInput();
-        expectedFamily = UIInput.COMPONENT_FAMILY;
-        expectedRendererType = "javax.faces.Text";
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIInputTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UIInput input = (UIInput) component;
-
-        assertEquals(input.getSubmittedValue(),
-                (String) input.getAttributes().get("submittedValue"));
-        input.setSubmittedValue("foo");
-        assertEquals("foo", (String) input.getAttributes().get("submittedValue"));
-        input.setSubmittedValue(null);
-        assertNull((String) input.getAttributes().get("submittedValue"));
-        input.getAttributes().put("submittedValue", "bar");
-        assertEquals("bar", input.getSubmittedValue());
-        input.getAttributes().put("submittedValue", null);
-        assertNull(input.getSubmittedValue());
-
-        input.setRequired(true);
-        assertEquals(Boolean.TRUE,
-                (Boolean) input.getAttributes().get("required"));
-        input.setRequired(false);
-        assertEquals(Boolean.FALSE,
-                (Boolean) input.getAttributes().get("required"));
-        input.getAttributes().put("required", Boolean.TRUE);
-        assertTrue(input.isRequired());
-        input.getAttributes().put("required", Boolean.FALSE);
-        assertTrue(!input.isRequired());
-
-        assertEquals(input.isValid(), true);
-        assertEquals(input.isValid(),
-                ((Boolean) component.getAttributes().get("valid")).
-                        booleanValue());
-        input.setValid(false);
-        assertEquals(input.isValid(),
-                ((Boolean) component.getAttributes().get("valid")).
-                        booleanValue());
-        component.getAttributes().put("valid", Boolean.TRUE);
-        assertEquals(input.isValid(),
-                ((Boolean) component.getAttributes().get("valid")).
-                        booleanValue());
-
-    }
-
-
-    // Test the compareValues() method
-    public void testCompareValues() {
-
-        TestInput input = new TestInput();
-        Object value1a = "foo";
-        Object value1b = "foo";
-        Object value2 = "bar";
-        Object value3 = null;
-
-        assertTrue(!input.compareValues(value1a, value1a));
-        assertTrue(!input.compareValues(value1a, value1b));
-        assertTrue(!input.compareValues(value1b, value1b));
-        assertTrue(!input.compareValues(value2, value2));
-        assertTrue(!input.compareValues(value3, value3));
-
-        assertTrue(input.compareValues(value1a, value2));
-        assertTrue(input.compareValues(value1a, value3));
-        assertTrue(input.compareValues(value2, value3));
-        assertTrue(input.compareValues(value3, value2));
-
-    }
-
-
-    // Test event queuing and broadcasting (any phase listeners)
-    public void testEventsGeneric() {
-
-        UIInput input = (UIInput) component;
-        ValueChangeEvent event = new ValueChangeEvent(input, null, null);
-
-        // Register three listeners
-        input.addValueChangeListener
-                (new TestValueChangeListener("AP0"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("AP1"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("AP2"));
-
-        // Fire events and evaluate results
-        TestValueChangeListener.trace(null);
-        input.broadcast(event);
-        assertEquals("/AP0/AP1/AP2",
-                TestValueChangeListener.trace());
-
-    }
-
-
-    // Test event queuing and broadcasting (mixed phase listeners)
-    public void testEventsMixed() {
-
-        UIInput input = (UIInput) component;
-        input.setRendererType(null);
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(input);
-        ValueChangeEvent event = null;
-
-        // Register three listeners
-        input.addValueChangeListener
-                (new TestValueChangeListener("ARV"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("PV"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("AP"));
-
-        TestValueChangeListener.trace(null);
-        event = new ValueChangeEvent(input, null, null);
-        event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-        input.queueEvent(event);
-
-        event = new ValueChangeEvent(input, null, null);
-        event.setPhaseId(PhaseId.PROCESS_VALIDATIONS);
-        input.queueEvent(event);
-
-        event = new ValueChangeEvent(input, null, null);
-        event.setPhaseId(PhaseId.INVOKE_APPLICATION);
-        input.queueEvent(event);
-
-        // Fire events and evaluate results
-        root.processDecodes(facesContext);
-        root.processValidators(facesContext);
-        root.processApplication(facesContext);
-        assertEquals("/ARV/PV/AP/ARV/PV/AP/ARV/PV/AP",
-                TestValueChangeListener.trace());
-
-    }
-
-    // Test listener registration and deregistration
-    public void testListeners() {
-
-        TestInput input = new TestInput();
-        TestValueChangeListener listener = null;
-
-        input.addValueChangeListener
-                (new TestValueChangeListener("ARV0"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("ARV1"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("PV0"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("PV1"));
-        input.addValueChangeListener
-                (new TestValueChangeListener("PV2"));
-
-        ValueChangeListener listeners[] = input.getValueChangeListeners();
-        assertEquals(5, listeners.length);
-        input.removeValueChangeListener(listeners[2]);
-        listeners = input.getValueChangeListeners();
-        assertEquals(4, listeners.length);
-
-    }
-
-    // Test empty listener list
-    public void testEmptyListeners() {
-
-        TestInput input = new TestInput();
-        TestValueChangeListener listener = null;
-
-        //No listeners added, should be empty
-        ValueChangeListener listeners[] = input.getValueChangeListeners();
-        assertEquals(0, listeners.length);
-
-    }
-
-    // Test a pristine UIInput instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIInput input = (UIInput) component;
-
-        assertNull("no submittedValue", input.getSubmittedValue());
-        assertTrue("not required", !input.isRequired());
-        assertTrue("is valid", input.isValid());
-        assertTrue("is not immediate", !input.isImmediate());
-        assertNull("no validatorBinding", input.getValidator());
-        assertNull("no valueChangeListener", input.getValueChangeListener());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIInput input = (UIInput) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIInput input = (UIInput) component;
-
-        input.setSubmittedValue("foo");
-        assertEquals("foo", input.getSubmittedValue());
-        input.setSubmittedValue(null);
-        assertNull(input.getSubmittedValue());
-
-        input.setRequired(true);
-        assertTrue(input.isRequired());
-        input.setRequired(false);
-        assertTrue(!input.isRequired());
-
-        input.setValid(false);
-        assertTrue(!input.isValid());
-        input.setValid(true);
-        assertTrue(input.isValid());
-
-        Application app = facesContext.getApplication();
-        MethodBinding methodBinding = null;
-
-        input.setValidator(methodBinding =
-                app.createMethodBinding("#{foo.bar}", null));
-        assertEquals(methodBinding, input.getValidator());
-        input.setValidator(null);
-        assertNull(input.getValidator());
-
-        input.setValueChangeListener(methodBinding =
-                app.createMethodBinding("#{foo.bar}", null));
-        assertEquals(methodBinding, input.getValueChangeListener());
-        input.setValueChangeListener(null);
-        assertNull(input.getValueChangeListener());
-
-    }
-
-
-    // Test updating model values
-    public void testUpdateModel() throws Exception {
-
-        // Set up test bean as a request attribute
-        TestDataBean test = new TestDataBean();
-        test.setCommand("old command");
-        request.setAttribute("test", test);
-
-        // Point at the "command" property
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UIInput input = (UIInput) component;
-        input.setValueBinding
-                ("value",
-                        application.createValueBinding("#{test.command}"));
-        checkMessages(0);
-
-        // Perform update on a valid value
-        input.setValid(true);
-        input.setValue("new command");
-        assertEquals("new command", input.getLocalValue());
-        input.updateModel(facesContext);
-        assertEquals("new command", test.getCommand());
-        assertNull(input.getLocalValue());
-        assertTrue(input.isValid());
-        checkMessages(0);
-        input.resetValue();
-        assertNull(input.getLocalValue());
-        assertEquals("new command", input.getValue());
-        assertNull(input.getSubmittedValue());
-        assertTrue(input.isValid());
-        assertTrue(!input.isLocalValueSet());
-
-        // Skip update on an invalid value
-        input.setValid(false);
-        input.setValue("bad command");
-        assertEquals("bad command", input.getLocalValue());
-        input.updateModel(facesContext);
-        assertEquals("new command", test.getCommand());
-        assertEquals("bad command", input.getLocalValue());
-        assertTrue(!input.isValid());
-        checkMessages(0);
-
-        // Log conversion error on update failure
-        input.setValid(true);
-        input.setValue(new Integer(5));
-        assertEquals(new Integer(5), (Integer) input.getLocalValue());
-        input.updateModel(facesContext);
-        assertEquals("new command", test.getCommand());
-        assertEquals(new Integer(5), (Integer) input.getLocalValue());
-        assertTrue(!input.isValid());
-        checkMessages(1);
-
-        // Perform update on a null value
-        input.setValid(true);
-        input.setValue(null);
-        assertNull(input.getLocalValue());
-        input.updateModel(facesContext);
-        assertNull(test.getCommand());
-        assertNull(input.getLocalValue());
-        assertTrue(input.isValid());
-        checkMessages(1);
-
-    }
-
-
-    // Test order of validator calls with validator also
-    public void testValidateOrder() throws Exception {
-
-        Class validateParams[] = {FacesContext.class, UIComponent.class,
-                Object.class};
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UIInput input = (UIInput) component;
-        input.addValidator(new TestInputValidator("v1"));
-        input.addValidator(new TestInputValidator("v2"));
-        Application app = facesContext.getApplication();
-        MethodBinding methodBinding = null;
-
-        input.setValidator(methodBinding =
-                app.createMethodBinding("v3.validate", validateParams));
-        assertEquals(methodBinding, input.getValidator());
-        request.setAttribute("v3", new TestInputValidator("v3"));
-        TestInputValidator.trace(null);
-        setupNewValue(input);
-        root.processValidators(facesContext);
-        assertEquals("/v1/v2/v3", TestInputValidator.trace());
-
-    }
-
-
-    // Test validation of a required field
-    public void testValidateRequired() throws Exception {
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UIInput input = (UIInput) component;
-        input.setRequired(true);
-        checkMessages(0);
-
-        input.setValid(true);
-        input.setSubmittedValue("foo");
-        input.validate(facesContext);
-        checkMessages(0);
-        assertTrue(input.isValid());
-
-        input.getAttributes().put("label", "mylabel");
-        input.setValid(true);
-        input.setSubmittedValue("");
-        input.validate(facesContext);
-        checkMessages(1);
-        assertTrue(!input.isValid());
-
-        Iterator messages = facesContext.getMessages();
-        while (messages.hasNext()) {
-            FacesMessage message = (FacesMessage) messages.next();
-            assertTrue(message.getSummary().indexOf("mylabel") >= 0);
-        }
-
-        input.setValid(true);
-        input.setSubmittedValue(null);
-        input.validate(facesContext);
-        // awiner: this was formerly "checkMessages(2)", but a submitted
-        // value of null now explicitly means _do not validate_.
-        checkMessages(1);
-        // awiner: And this next line flipped as well
-        assertTrue(input.isValid());
-    }
-
-
-    // Test that appropriate properties are value binding enabled
-    public void testValueBindings() {
-
-        super.testValueBindings();
-        UIInput test = (UIInput) component;
-
-        // "required" property
-        request.setAttribute("foo", Boolean.FALSE);
-        boolean initial = test.isRequired();
-        if (initial) {
-            request.setAttribute("foo", Boolean.FALSE);
-        } else {
-            request.setAttribute("foo", Boolean.TRUE);
-        }
-        test.setValueBinding("required", application.createValueBinding("#{foo}"));
-        assertEquals(!initial, test.isRequired());
-        test.setRequired(initial);
-        assertEquals(initial, test.isRequired());
-        assertNotNull(test.getValueBinding("required"));
-
-        // "value" property
-        request.setAttribute("foo", "bar");
-        test.setValue(null);
-        assertNull(test.getValue());
-        test.setValueBinding("value", application.createValueBinding("#{foo}"));
-        assertNotNull(test.getValueBinding("value"));
-        assertEquals("bar", test.getValue());
-        test.setValue("baz");
-        assertEquals("baz", test.getValue());
-        test.setValue(null);
-        assertEquals("bar", test.getValue());
-        test.setValueBinding("value", null);
-        assertNull(test.getValueBinding("value"));
-        assertNull(test.getValue());
-
-        // "immediate" property
-        request.setAttribute("foo", Boolean.FALSE);
-        boolean initialImmediate = test.isImmediate();
-        if (initialImmediate) {
-            request.setAttribute("foo", Boolean.FALSE);
-        } else {
-            request.setAttribute("foo", Boolean.TRUE);
-        }
-        test.setValueBinding("immediate", application.createValueBinding("#{foo}"));
-        assertEquals(!initialImmediate, test.isImmediate());
-        test.setImmediate(initialImmediate);
-        assertEquals(initialImmediate, test.isImmediate());
-        assertNotNull(test.getValueBinding("immediate"));
-    }
-
-
-    // Test order of value change calls with valueChangeListener also
-    public void testValueChangeOrder() throws Exception {
-
-        Class signature[] = {ValueChangeEvent.class};
-        Application app = facesContext.getApplication();
-        MethodBinding methodBinding = null;
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UIInput input = (UIInput) component;
-        input.addValueChangeListener(new TestInputValueChangeListener("l1"));
-        input.addValueChangeListener(new TestInputValueChangeListener("l2"));
-        input.setValueChangeListener(app.createMethodBinding("l3.processValueChange", signature));
-        request.setAttribute("l3", new TestInputValueChangeListener("l3"));
-        TestInputValueChangeListener.trace(null);
-        setupNewValue(input);
-        root.processValidators(facesContext);
-        assertEquals("/l1/l2/l3", TestInputValueChangeListener.trace());
-
-    }
-
-
-    // Test order of value change calls with valueChangeListener also
-    public void testImmediate() throws Exception {
-
-        Class signature[] = {ValueChangeEvent.class};
-        Application app = facesContext.getApplication();
-        MethodBinding methodBinding = null;
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UIInput input = (UIInput) component;
-        input.setImmediate(true);
-        input.addValueChangeListener(new TestInputValueChangeListener("l1"));
-        input.addValueChangeListener(new TestInputValueChangeListener("l2"));
-        input.setValueChangeListener(app.createMethodBinding("l3.processValueChange", signature));
-        request.setAttribute("l3", new TestInputValueChangeListener("l3"));
-        TestInputValueChangeListener.trace(null);
-        setupNewValue(input);
-        root.processValidators(facesContext);
-        // No ValueChangeEvent should get delivered, because
-        // "immediate" processing fires during processDecodes(), not
-        // processValidators()
-        assertEquals("", TestInputValueChangeListener.trace());
-
-    }
-
-    public void testGetValueChangeListeners() throws Exception {
-        UIInput command = (UIInput) component;
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(command);
-
-        TestValueChangeListener
-                ta1 = new TestValueChangeListener("ta1"),
-                ta2 = new TestValueChangeListener("ta2");
-
-        command.addValueChangeListener(ta1);
-        command.addValueChangeListener(ta2);
-        ValueChangeListener[] listeners = (ValueChangeListener[])
-                command.getValueChangeListeners();
-        assertEquals(2, listeners.length);
-        TestValueChangeListener[] taListeners = (TestValueChangeListener[])
-                command.getFacesListeners(TestValueChangeListener.class);
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Check that the number of queued messages equals the expected count
-    // and that each of them is of severity ERROR
-    protected void checkMessages(int expected) {
-
-        facesContext.getExceptionHandler().handle();
-
-        int n = 0;
-        Iterator messages = facesContext.getMessages();
-        while (messages.hasNext()) {
-            FacesMessage message = (FacesMessage) messages.next();
-            assertEquals("Severity == ERROR",
-                    FacesMessage.SEVERITY_ERROR,
-                    message.getSeverity());
-            n++;
-            // System.err.println(message.getSummary());
-        }
-        assertEquals("expected message count", expected, n);
-
-    }
-
-
-    // Check that the properties on the specified components are equal
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-        super.checkProperties(comp1, comp2);
-        UIInput i1 = (UIInput) comp1;
-        UIInput i2 = (UIInput) comp2;
-        // "submittedValue" is not preserved across state-saves
-        //        assertEquals(i1.getSubmittedValue(), i2.getSubmittedValue());
-        assertEquals(i1.isRequired(), i2.isRequired());
-        assertEquals(i1.isValid(), i2.isValid());
-        assertEquals(i1.getValidator(), i2.getValidator());
-        assertEquals(i1.getValueChangeListener(), i2.getValueChangeListener());
-    }
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UIInput();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-        super.populateComponent(component);
-        UIInput i = (UIInput) component;
-        i.setSubmittedValue("submittedValue");
-        i.setValid(false);
-        i.setRequired(true);
-        Application app = facesContext.getApplication();
-        MethodBinding methodBinding = null;
-
-        i.setValidator(methodBinding =
-                app.createMethodBinding("#{foo.bar}", null));
-        i.setValueChangeListener(app.createMethodBinding("#{baz.bop}", null));
-    }
-
-
-    protected boolean listenersAreEqual(FacesContext context,
-                                        UIInput comp1,
-                                        UIInput comp2) {
-
-        ValueChangeListener list1[] = comp1.getValueChangeListeners();
-        ValueChangeListener list2[] = comp2.getValueChangeListeners();
-        assertNotNull(list1);
-        assertNotNull(list2);
-        assertEquals(list1.length, list2.length);
-        for (int i = 0; i < list1.length; i++) {
-            assertTrue(list1[i].getClass() == list2[i].getClass());
-        }
-        return true;
-
-    }
-
-
-    protected void setupNewValue(UIInput input) {
-
-        input.setSubmittedValue("foo");
-
-    }
-
-
-    protected boolean validatorsAreEqual(FacesContext context,
-                                         UIInput comp1,
-                                         UIInput comp2) {
-
-        Validator list1[] = comp1.getValidators();
-        Validator list2[] = comp2.getValidators();
-        assertNotNull(list1);
-        assertNotNull(list2);
-        assertEquals(list1.length, list2.length);
-        for (int i = 0; i < list1.length; i++) {
-            assertTrue(list1[i].getClass() == list2[i].getClass());
-        }
-        return (true);
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIOutputAttachedObjectStateTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIOutputAttachedObjectStateTestCase.java
deleted file mode 100644
index 3860874..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIOutputAttachedObjectStateTestCase.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.mock.MockFacesContext;
-
-import javax.faces.context.FacesContext;
-import javax.faces.convert.DateTimeConverter;
-import javax.faces.convert.Converter;
-
-
-public class UIOutputAttachedObjectStateTestCase extends TestCase {
-
-    private FacesContext facesContext;
-
-    public UIOutputAttachedObjectStateTestCase(String arg0) {
-        super(arg0);
-    }
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIOutputAttachedObjectStateTestCase.class));
-    }
-
-    public void setUp() throws Exception {
-        super.setUp();
-        facesContext = new MockFacesContext();
-    }
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testConverterState() {
-
-        UIOutput output = new UIOutput();
-        DateTimeConverter converter = new DateTimeConverter();
-        converter.setPattern("MM-dd-yy");
-        output.setConverter(converter);
-        output.markInitialState();
-        assertTrue(output.initialStateMarked());
-        assertTrue(converter.initialStateMarked());
-
-        Object result = output.saveState(facesContext);
-        // initial state has been marked an no changes
-        // have occurred, we should have null state.
-        assertNull(result);
-
-        // setup the scenario again, but this time,
-        // update the converter pattern.
-        output = new UIOutput();
-        converter = new DateTimeConverter();
-        converter.setPattern("MM-dd-yy");
-        output.setConverter(converter);
-        output.markInitialState();
-        assertTrue(output.initialStateMarked());
-        assertTrue(converter.initialStateMarked());
-
-        // now tweak the converter
-        converter.setPattern("dd-MM-yy");
-        result = output.saveState(facesContext);
-        assertTrue(result instanceof Object[]);
-        Object[] state = (Object[]) result;
-
-        // state should have a lenght of 2.  The first element
-        // is the state from UIComponentBase, where the second
-        // is the converter state.  The first element in this
-        // case should be null
-        assertTrue(state.length == 2);
-        assertTrue(state[0] == null);
-        assertTrue(state[1] != null);
-
-        output = new UIOutput();
-        converter = new DateTimeConverter();
-        output.setConverter(converter);
-
-        // now validate what we've restored
-        // first, ensure converter is null.  This will
-        // be the case when initialState has been marked
-        // for the component.
-        output.restoreState(facesContext, state);
-        assertTrue(output.getConverter() != null);
-        assertTrue("dd-MM-yy".equals(converter.getPattern()));
-
-        // now validate the case where UIOutput has some event
-        // that adds a converter *after* initial state has been
-        // marked.  This will cause the component to save full
-        // state.
-        output = new UIOutput();
-        output.markInitialState();
-        output.setConverter(converter);
-        assertTrue(!output.initialStateMarked());
-        assertTrue(!converter.initialStateMarked());
-
-        result = output.saveState(facesContext);
-        assertNotNull(result);
-
-        // this time, both elements in the state array will not
-        // be null.  If we call retoreState() on a new component instance
-        // without setting a converter, we should have a new DateTimeConverter
-        // *with* the expected pattern.
-        assertTrue(result instanceof Object[]);
-        state = (Object[]) result;
-        assertTrue(state.length == 2);
-        assertTrue(state[1] instanceof StateHolderSaver);
-        output = new UIOutput();
-        assertNull(output.getConverter());
-        output.restoreState(facesContext, state);
-        Converter c = output.getConverter();
-        assertNotNull(c);
-        assertTrue(c instanceof DateTimeConverter);
-        converter = (DateTimeConverter) c;
-        assertTrue("dd-MM-yy".equals(converter.getPattern()));
-
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIOutputTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIOutputTestCase.java
deleted file mode 100644
index c929442..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIOutputTestCase.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.convert.Converter;
-import javax.faces.convert.DateTimeConverter;
-import javax.faces.convert.LongConverter;
-import javax.faces.convert.ShortConverter;
-
-
-/**
- * <p>Unit tests for {@link UIOutput}.</p>
- */
-
-public class UIOutputTestCase extends ValueHolderTestCaseBase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIOutputTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UIOutput();
-        expectedFamily = UIOutput.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = "javax.faces.Text";
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIOutputTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UIOutput output = (UIOutput) component;
-
-    }
-
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-
-    // Test a pristine UIOutput instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIOutput output = (UIOutput) component;
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIOutput output = (UIOutput) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIOutput output = (UIOutput) component;
-
-    }
-
-
-    public void testValueBindings() {
-
-	super.testValueBindings();
-	UIOutput test = (UIOutput) component;
-
-	// "converter" property
-	request.setAttribute("foo", new LongConverter());
-	test.setConverter(null);
-	assertNull(test.getConverter());
-	test.setValueBinding("converter", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("converter"));
-	assertTrue(test.getConverter() instanceof LongConverter);
-	test.setConverter(new ShortConverter());
-	assertTrue(test.getConverter() instanceof ShortConverter);
-	test.setConverter(null);
-	assertTrue(test.getConverter() instanceof LongConverter);
-	test.setValueBinding("converter", null);
-	assertNull(test.getValueBinding("converter"));
-	assertNull(test.getConverter());
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-
-    
-
-
-    
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UIOutput();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIPanelTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIPanelTestCase.java
deleted file mode 100644
index 87455aa..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIPanelTestCase.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIPanel;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UIPanel}.</p>
- */
-
-public class UIPanelTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIPanelTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UIPanel();
-        expectedFamily = UIPanel.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = null;
-        expectedRendersChildren = false;
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIPanelTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-    // Test a pristine UIPanel instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIPanel panel = (UIPanel) component;
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIPanel panel = (UIPanel) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIPanel panel = (UIPanel) component;
-
-    }
-
-
-    public void PENDING_FIXME_testValueBindings() {
-
-	super.testValueBindings();
-	UIPanel test = (UIPanel) component;
-
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UIPanel();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIParameterTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIParameterTestCase.java
deleted file mode 100644
index 957fbc2..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIParameterTestCase.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import javax.faces.context.FacesContext;
-import javax.faces.TestUtil;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UIParameter}.</p>
- */
-
-public class UIParameterTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIParameterTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UIParameter();
-        expectedFamily = UIParameter.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = null;
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UIParameterTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UIParameter parameter = (UIParameter) component;
-
-        assertEquals(parameter.getValue(),
-                     (String) component.getAttributes().get("value"));
-        parameter.setValue("foo");
-        assertEquals("foo", (String) component.getAttributes().get("value"));
-        parameter.setValue(null);
-        assertNull((String) component.getAttributes().get("value"));
-        component.getAttributes().put("value", "bar");
-        assertEquals("bar", parameter.getValue());
-        component.getAttributes().put("value", null);
-        assertNull(parameter.getValue());
-
-        assertEquals(parameter.getName(),
-                     (String) parameter.getAttributes().get("name"));
-        parameter.setName("foo");
-        assertEquals("foo", (String) parameter.getAttributes().get("name"));
-        parameter.setName(null);
-        assertNull((String) parameter.getAttributes().get("name"));
-        parameter.getAttributes().put("name", "bar");
-        assertEquals("bar", parameter.getName());
-        parameter.getAttributes().put("name", null);
-        assertNull(parameter.getName());
-
-    }
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-    // Test a pristine UIParameter instance
-    public void testPristine() {
-
-        super.testPristine();
-        UIParameter parameter = (UIParameter) component;
-
-        assertNull("no value", parameter.getValue());
-        assertNull("no name", parameter.getName());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UIParameter parameter = (UIParameter) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UIParameter parameter = (UIParameter) component;
-
-        // value
-        parameter.setValue("foo.bar");
-        assertEquals("expected value",
-                     "foo.bar", parameter.getValue());
-        parameter.setValue(null);
-        assertNull("erased value", parameter.getValue());
-
-        parameter.setName("foo");
-        assertEquals("foo", parameter.getName());
-        parameter.setName(null);
-        assertNull(parameter.getName());
-
-    }
-
-
-    public void testValueBindings() {
-
-	super.testValueBindings();
-	UIParameter test = (UIParameter) component;
-
-	// "name" property
-	request.setAttribute("foo", "bar");
-	test.setName(null);
-	assertNull(test.getName());
-	test.setValueBinding("name", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("name"));
-	assertEquals("bar", test.getName());
-	test.setName("baz");
-	assertEquals("baz", test.getName());
-	test.setName(null);
-	assertEquals("bar", test.getName());
-	test.setValueBinding("name", null);
-	assertNull(test.getValueBinding("name"));
-	assertNull(test.getName());
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Check that the properties on the specified components are equal
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-
-        super.checkProperties(comp1, comp2);
-        UIParameter p1 = (UIParameter) comp1;
-        UIParameter p2 = (UIParameter) comp2;
-        assertEquals(p1.getName(), p2.getName());
-
-    }
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UIParameter();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-        super.populateComponent(component);
-        UIParameter p = (UIParameter) component;
-        p.setName("foo");
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UISelectBooleanTestCase.java b/jsf-api/src/test/java/javax/faces/component/UISelectBooleanTestCase.java
deleted file mode 100644
index 87b4d32..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UISelectBooleanTestCase.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectBoolean;
-import javax.faces.el.ValueBinding;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UISelectBoolean}.</p>
- */
-
-public class UISelectBooleanTestCase extends UIInputTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UISelectBooleanTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UISelectBoolean();
-        expectedFamily = UISelectBoolean.COMPONENT_FAMILY;
-        expectedRendererType = "javax.faces.Checkbox";
-    }
-
-    
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UISelectBooleanTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UISelectBoolean selectBoolean = (UISelectBoolean) component;
-
-        selectBoolean.setSelected(false);
-        assertEquals(Boolean.FALSE,
-                     (Boolean) selectBoolean.getAttributes().get("selected"));
-        selectBoolean.setSelected(true);
-        assertEquals(Boolean.TRUE,
-                     (Boolean) selectBoolean.getAttributes().get("selected"));
-        selectBoolean.getAttributes().put("selected", Boolean.FALSE);
-        assertTrue(!selectBoolean.isSelected());
-        selectBoolean.getAttributes().put("selected", Boolean.TRUE);
-        assertTrue(selectBoolean.isSelected());
-
-    }
-
-
-    // Test a pristine UISelectBoolean instance
-    public void testPristine() {
-
-        super.testPristine();
-        UISelectBoolean selectBoolean = (UISelectBoolean) component;
-
-        assertTrue("not selected", !selectBoolean.isSelected());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UISelectBoolean selectBoolean = (UISelectBoolean) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UISelectBoolean selectBoolean = (UISelectBoolean) component;
-
-        selectBoolean.setSelected(true);
-        assertTrue(selectBoolean.isSelected());
-        assertEquals(Boolean.TRUE,
-                     (Boolean) selectBoolean.getValue());
-        selectBoolean.setSelected(false);
-        assertTrue(!selectBoolean.isSelected());
-        assertEquals(Boolean.FALSE,
-                     (Boolean) selectBoolean.getValue());
-
-        // Test transparency between "value" and "selected" properties
-        selectBoolean.setValue(Boolean.TRUE);
-        assertTrue(selectBoolean.isSelected());
-        selectBoolean.setValue(Boolean.FALSE);
-        assertTrue(!selectBoolean.isSelected());
-        selectBoolean.setValue(null);
-        assertTrue(!selectBoolean.isSelected());
-
-        // Transparency applies to value bindings as well
-        assertNull(selectBoolean.getValueBinding("selected"));
-        assertNull(selectBoolean.getValueBinding("value"));
-        request.setAttribute("foo", Boolean.TRUE);
-        ValueBinding vb = application.createValueBinding("#{foo}");
-        selectBoolean.setValueBinding("selected", vb);
-        assertTrue(vb == selectBoolean.getValueBinding("selected"));
-        assertTrue(vb == selectBoolean.getValueBinding("value"));
-        selectBoolean.setValueBinding("selected", null);
-        assertNull(selectBoolean.getValueBinding("selected"));
-        assertNull(selectBoolean.getValueBinding("value"));
-        selectBoolean.setValueBinding("value", vb);
-        assertTrue(vb == selectBoolean.getValueBinding("selected"));
-        assertTrue(vb == selectBoolean.getValueBinding("value"));
-        selectBoolean.setValueBinding("selected", null);
-        assertNull(selectBoolean.getValueBinding("selected"));
-        assertNull(selectBoolean.getValueBinding("value"));
-
-    }
-
-
-    public void testValueBindings() {
-
-	super.testValueBindings();
-	UISelectBoolean test = (UISelectBoolean) component;
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UISelectBoolean();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UISelectItemSub.java b/jsf-api/src/test/java/javax/faces/component/UISelectItemSub.java
deleted file mode 100644
index 3f164d3..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UISelectItemSub.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.component.UISelectItem;
-
-
-// Subclass of UISelectItem to provide a convenience constructor
-
-public class UISelectItemSub extends UISelectItem {
-
-    public UISelectItemSub(String value, String label, String description) {
-        super();
-        setItemValue(value);
-        setItemLabel(label);
-        setItemDescription(description);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UISelectItemTestCase.java b/jsf-api/src/test/java/javax/faces/component/UISelectItemTestCase.java
deleted file mode 100644
index d034b7e..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UISelectItemTestCase.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectItem;
-import javax.faces.context.FacesContext;
-import javax.faces.model.SelectItem;
-import javax.faces.TestUtil;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UISelectItem}.</p>
- */
-
-public class UISelectItemTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UISelectItemTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UISelectItem();
-        expectedFamily = UISelectItem.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = null;
-    }
-
-    
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UISelectItemTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UISelectItem selectItem = (UISelectItem) component;
-
-        assertEquals(selectItem.getValue(),
-                     component.getAttributes().get("value"));
-        SelectItem item = new SelectItem("foo");
-        selectItem.setValue(item);
-        assertEquals(item, component.getAttributes().get("value"));
-        selectItem.setValue(null);
-
-        assertNull(component.getAttributes().get("value"));
-        component.getAttributes().put("value", "bar");
-        assertEquals("bar", selectItem.getValue());
-        component.getAttributes().put("value", null);
-        assertNull(selectItem.getValue());
-
-        assertEquals(selectItem.getItemDescription(),
-                     (String) selectItem.getAttributes().get("itemDescription"));
-        selectItem.setItemDescription("foo");
-        assertEquals("foo", (String) selectItem.getAttributes().get("itemDescription"));
-        selectItem.setItemDescription(null);
-        assertNull((String) selectItem.getAttributes().get("itemDescription"));
-        selectItem.getAttributes().put("itemDescription", "bar");
-        assertEquals("bar", selectItem.getItemDescription());
-        selectItem.getAttributes().put("itemDescription", null);
-        assertNull(selectItem.getItemDescription());
-
-        assertEquals(selectItem.isItemDisabled(),
-                     ((Boolean) selectItem.getAttributes().get("itemDisabled")).
-                      booleanValue());
-        selectItem.setItemDisabled(true);
-        assertTrue(((Boolean) selectItem.getAttributes().
-                   get("itemDisabled")).booleanValue());
-        selectItem.setItemDisabled(false);
-        assertFalse(((Boolean) selectItem.getAttributes().
-                    get("itemDisabled")).booleanValue());
-        selectItem.getAttributes().put("itemDisabled", Boolean.FALSE);
-        assertFalse(selectItem.isItemDisabled());
-        selectItem.getAttributes().put("itemDisabled", Boolean.TRUE);
-        assertTrue(selectItem.isItemDisabled());
-
-        assertEquals(selectItem.getItemLabel(),
-                     (String) selectItem.getAttributes().get("itemLabel"));
-        selectItem.setItemLabel("foo");
-        assertEquals("foo", (String) selectItem.getAttributes().get("itemLabel"));
-        selectItem.setItemLabel(null);
-        assertNull((String) selectItem.getAttributes().get("itemLabel"));
-        selectItem.getAttributes().put("itemLabel", "bar");
-        assertEquals("bar", selectItem.getItemLabel());
-        selectItem.getAttributes().put("itemLabel", null);
-        assertNull(selectItem.getItemLabel());
-
-        assertEquals(selectItem.getItemValue(),
-                     (String) selectItem.getAttributes().get("itemValue"));
-        selectItem.setItemValue("foo");
-        assertEquals("foo", (String) selectItem.getAttributes().get("itemValue"));
-        selectItem.setItemValue(null);
-        assertNull((String) selectItem.getAttributes().get("itemValue"));
-        selectItem.getAttributes().put("itemValue", "bar");
-        assertEquals("bar", selectItem.getItemValue());
-        selectItem.getAttributes().put("itemValue", null);
-        assertNull(selectItem.getItemValue());
-
-    }
-
-
-    // Test a pristine UISelectItem instance
-    public void testPristine() {
-
-        super.testPristine();
-        UISelectItem selectItem = (UISelectItem) component;
-
-        assertNull("no value", selectItem.getValue());
-        assertNull("no itemDescription", selectItem.getItemDescription());
-        assertFalse("no itemDisabled", selectItem.isItemDisabled());
-        assertNull("no itemLabel", selectItem.getItemLabel());
-        assertNull("no itemValue", selectItem.getItemValue());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UISelectItem selectItem = (UISelectItem) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UISelectItem selectItem = (UISelectItem) component;
-
-        // value
-        SelectItem item = new SelectItem("foo");
-        selectItem.setValue(item);
-        assertEquals("expected value",
-                     item, selectItem.getValue());
-        selectItem.setValue(null);
-        assertNull("erased value", selectItem.getValue());
-
-        selectItem.setItemDescription("foo");
-        assertEquals("foo", selectItem.getItemDescription());
-        selectItem.setItemDescription(null);
-        assertNull(selectItem.getItemDescription());
-
-        selectItem.setItemDisabled(false);
-        assertFalse(selectItem.isItemDisabled());
-        selectItem.setItemDisabled(true);
-        assertTrue(selectItem.isItemDisabled());
-
-        selectItem.setItemLabel("foo");
-        assertEquals("foo", selectItem.getItemLabel());
-        selectItem.setItemLabel(null);
-        assertNull(selectItem.getItemLabel());
-
-        selectItem.setItemValue("foo");
-        assertEquals("foo", selectItem.getItemValue());
-        selectItem.setItemValue(null);
-        assertNull(selectItem.getItemValue());
-
-    }
-
-
-    public void PENDING_FIXME_testValueBindings() {
-
-	super.testValueBindings();
-	UISelectItem test = (UISelectItem) component;
-
-	// "itemDescription" property
-	request.setAttribute("foo", "bar");
-	test.setItemDescription(null);
-	assertNull(test.getItemDescription());
-	test.setValueBinding("itemDescription", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("itemDescription"));
-	assertEquals("bar", test.getItemDescription());
-	test.setItemDescription("baz");
-	assertEquals("baz", test.getItemDescription());
-	test.setItemDescription(null);
-	assertEquals("bar", test.getItemDescription());
-	test.setValueBinding("itemDescription", null);
-	assertNull(test.getValueBinding("itemDescription"));
-	assertNull(test.getItemDescription());
-
-	// "itemDisabled" property
-        assertFalse(test.isItemDisabled());
-	request.setAttribute("foo", Boolean.TRUE);
-	test.setValueBinding("itemDisabled", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("itemDisabled"));
-	assertTrue(test.isItemDisabled());
-        test.setItemDisabled(false);
-        assertFalse(test.isItemDisabled());
-	test.setValueBinding("itemDisabled", null);
-	assertNull(test.getValueBinding("itemDisabled"));
-	assertFalse(test.isItemDisabled());
-
-	// "itemLabel" property
-	request.setAttribute("foo", "bar");
-	test.setItemLabel(null);
-	assertNull(test.getItemLabel());
-	test.setValueBinding("itemLabel", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("itemLabel"));
-	assertEquals("bar", test.getItemLabel());
-	test.setItemLabel("baz");
-	assertEquals("baz", test.getItemLabel());
-	test.setItemLabel(null);
-	assertEquals("bar", test.getItemLabel());
-	test.setValueBinding("itemLabel", null);
-	assertNull(test.getValueBinding("itemLabel"));
-	assertNull(test.getItemLabel());
-
-	// "itemValue" property
-	request.setAttribute("foo", "bar");
-	test.setItemValue(null);
-	assertNull(test.getItemValue());
-	test.setValueBinding("itemValue", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("itemValue"));
-	assertEquals("bar", test.getItemValue());
-	test.setItemValue("baz");
-	assertEquals("baz", test.getItemValue());
-	test.setItemValue(null);
-	assertEquals("bar", test.getItemValue());
-	test.setValueBinding("itemValue", null);
-	assertNull(test.getValueBinding("itemValue"));
-	assertNull(test.getItemValue());
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Check that the properties on the specified components are equal
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-
-        super.checkProperties(comp1, comp2);
-        UISelectItem si1 = (UISelectItem) comp1;
-        UISelectItem si2 = (UISelectItem) comp2;
-        assertEquals(si1.getItemDescription(), si2.getItemDescription());
-        assertEquals(si1.isItemDisabled(), si2.isItemDisabled());
-        assertEquals(si1.getItemLabel(), si2.getItemLabel());
-        assertEquals(si1.getItemValue(), si2.getItemValue());
-
-    }
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UISelectItem();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-        super.populateComponent(component);
-        UISelectItem si = (UISelectItem) component;
-        si.setItemDescription("item description");
-        si.setItemLabel("item label");
-        si.setItemValue("item value");
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UISelectItemsTestCase.java b/jsf-api/src/test/java/javax/faces/component/UISelectItemsTestCase.java
deleted file mode 100644
index 26f0622..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UISelectItemsTestCase.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectItems;
-import javax.faces.model.SelectItem;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link UISelectItems}.</p>
- */
-
-public class UISelectItemsTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UISelectItemsTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UISelectItems();
-        expectedFamily = UISelectItems.COMPONENT_FAMILY;
-        expectedId = null;
-        expectedRendererType = null;
-    }
-
-    
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UISelectItemsTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test attribute-property transparency
-    public void testAttributesTransparency() {
-
-        super.testAttributesTransparency();
-        UISelectItems selectItems = (UISelectItems) component;
-
-        assertEquals(selectItems.getValue(),
-                     component.getAttributes().get("value"));
-        SelectItem item = new SelectItem("foo");
-        selectItems.setValue(item);
-        assertEquals(item, component.getAttributes().get("value"));
-        selectItems.setValue(null);
-        assertNull(component.getAttributes().get("value"));
-        component.getAttributes().put("value", "bar");
-        assertEquals("bar", selectItems.getValue());
-        component.getAttributes().put("value", null);
-        assertNull(selectItems.getValue());
-
-    }
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-    // Test a pristine UISelectItems instance
-    public void testPristine() {
-
-        super.testPristine();
-        UISelectItems selectItems = (UISelectItems) component;
-        assertNull("no value", selectItems.getValue());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UISelectItems selectItems = (UISelectItems) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UISelectItems selectItems = (UISelectItems) component;
-
-        // value
-        SelectItem item = new SelectItem("foo");
-        selectItems.setValue(item);
-        assertEquals("expected value",
-                     item, selectItems.getValue());
-        selectItems.setValue(null);
-        assertNull("erased value", selectItems.getValue());
-    }
-
-
-    public void testValueBindings() {
-
-	super.testValueBindings();
-	UISelectItems test = (UISelectItems) component;
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UISelectItems();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UISelectManyTestCase.java b/jsf-api/src/test/java/javax/faces/component/UISelectManyTestCase.java
deleted file mode 100644
index ae521b2..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UISelectManyTestCase.java
+++ /dev/null
@@ -1,707 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.el.ValueBinding;
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-import javax.faces.model.ListDataModel;
-
-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 java.util.HashSet;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.NoSuchElementException;
-
-
-/**
- * <p>Unit tests for {@link UISelectMany}.</p>
- */
-
-public class UISelectManyTestCase extends UIInputTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UISelectManyTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UISelectMany();
-        expectedFamily = UISelectMany.COMPONENT_FAMILY;
-        expectedRendererType = "javax.faces.Listbox";
-    }
-
-    
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UISelectManyTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test the compareValues() method
-    public void testCompareValues() {
-
-        TestSelectMany selectMany = new TestSelectMany();
-        Object values1a[] = new Object[] { "foo", "bar", "baz" };
-        Object values1b[] = new Object[] { "foo", "baz", "bar" };
-        Object values1c[] = new Object[] { "baz", "foo", "bar" };
-        Object values2[] = new Object[] { "foo", "bar" };
-        Object values3[] = new Object[] { "foo", "bar", "baz", "bop" };
-        Object values4[] = null;
-
-        assertTrue(!selectMany.compareValues(values1a, values1a));
-        assertTrue(!selectMany.compareValues(values1a, values1b));
-        assertTrue(!selectMany.compareValues(values1a, values1c));
-        assertTrue(!selectMany.compareValues(values2, values2));
-        assertTrue(!selectMany.compareValues(values3, values3));
-        assertTrue(!selectMany.compareValues(values4, values4));
-
-        assertTrue(selectMany.compareValues(values1a, values2));
-        assertTrue(selectMany.compareValues(values1a, values3));
-        assertTrue(selectMany.compareValues(values1a, values4));
-        assertTrue(selectMany.compareValues(values2, values3));
-        assertTrue(selectMany.compareValues(values2, values4));
-        assertTrue(selectMany.compareValues(values4, values1a));
-        assertTrue(selectMany.compareValues(values4, values2));
-        assertTrue(selectMany.compareValues(values4, values3));
-
-    }
-
-
-    // Test a pristine UISelectMany instance
-    public void testPristine() {
-
-        super.testPristine();
-        UISelectMany selectMany = (UISelectMany) component;
-
-        assertNull("no selectedValues", selectMany.getSelectedValues());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UISelectMany selectMany = (UISelectMany) component;
-
-        Object values[] = new Object[] { "foo", "bar" };
-
-        selectMany.setSelectedValues(values);
-        assertEquals(values, selectMany.getSelectedValues());
-        assertEquals(values, selectMany.getValue());
-        selectMany.setSelectedValues(null);
-        assertNull(selectMany.getSelectedValues());
-        assertNull(selectMany.getValue());
-
-        // Test transparency between "value" and "selectedValues" properties
-        selectMany.setValue(values);
-        assertEquals(values, selectMany.getSelectedValues());
-        assertEquals(values, selectMany.getValue());
-        selectMany.setValue(null);
-        assertNull(selectMany.getSelectedValues());
-        assertNull(selectMany.getValue());
-
-        // Transparency applies to value bindings as well
-        assertNull(selectMany.getValueBinding("selectedValues"));
-        assertNull(selectMany.getValueBinding("value"));
-        request.setAttribute("foo", new Object[] { "bar", "baz" });
-        ValueBinding vb = application.createValueBinding("#{foo}");
-        selectMany.setValueBinding("selectedValues", vb);
-        assertTrue(vb == selectMany.getValueBinding("selectedValues"));
-        assertTrue(vb == selectMany.getValueBinding("value"));
-        selectMany.setValueBinding("selectedValues", null);
-        assertNull(selectMany.getValueBinding("selectedValues"));
-        assertNull(selectMany.getValueBinding("value"));
-        selectMany.setValueBinding("value", vb);
-        assertTrue(vb == selectMany.getValueBinding("selectedValues"));
-        assertTrue(vb == selectMany.getValueBinding("value"));
-        selectMany.setValueBinding("selectedValues", null);
-        assertNull(selectMany.getValueBinding("selectedValues"));
-        assertNull(selectMany.getValueBinding("value"));
-
-    }
-
-
-
-    // Test validation of value against the valid list
-    public void testValidation() throws Exception {
-
-        // Put our component under test in a tree under a UIViewRoot
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Add valid options to the component under test
-        UISelectMany selectMany = (UISelectMany) component;
-        selectMany.getChildren().add(new UISelectItemSub("foo", null, null));
-        selectMany.getChildren().add(new UISelectItemSub("bar", null, null));
-        selectMany.getChildren().add(new UISelectItemSub("baz", null, null));
-
-        // Validate two values that are on the list
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new Object[] { "foo", "baz" });
-        selectMany.validate(facesContext);
-        assertTrue(selectMany.isValid());
-
-        // Validate one value on the list and one not on the list
-        selectMany.getAttributes().put("label", "mylabel");
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new Object[] { "bar", "bop"});
-        selectMany.setRendererType(null); // We don't have any renderers
-        selectMany.validate(facesContext);
-        assertTrue(!selectMany.isValid());
-
-        Iterator messages = facesContext.getMessages();
-        while (messages.hasNext()) {
-            FacesMessage message = (FacesMessage) messages.next();
-            assertTrue(message.getSummary().indexOf("mylabel") >= 0);
-        }
-
-
-    }
-
-
-    // Test validation of component with UISelectItems pointing to map
-    public void testValidation2() throws Exception {
-
-         // Put our component under test in a tree under a UIViewRoot
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Add valid options to the component under test
-        Map<String,String> map = new HashMap<String,String>();
-        map.put("key_foo", "foo");
-        map.put("key_bar", "bar");
-        map.put("key_baz", "baz");
-        UISelectItems items = new UISelectItems();
-        items.setValue(map);
-        UISelectMany selectMany = (UISelectMany) component;
-        selectMany.getChildren().add(items);
-
-        // Validate two values that are on the list
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new Object[] { "foo", "baz" });
-        selectMany.validate(facesContext);
-        assertTrue(selectMany.isValid());
-
-        // Validate one value on the list and one not on the list
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new Object[] { "bar", "bop"});
-        selectMany.setRendererType(null); // We don't have any renderers
-        selectMany.validate(facesContext);
-        assertTrue(!selectMany.isValid());
-
-    }
-
-
-    // Test validation of component with UISelectItems pointing to Set and the
-    // value of the component is Set
-    public void testValidation3() throws Exception {
-
-        Set<SelectItem> items = new HashSet<SelectItem>();
-        items.add(new SelectItem("foo"));
-        items.add(new SelectItem("bar"));
-        items.add(new SelectItem("baz"));
-        Set<String> submittedValues = new HashSet<String>();
-        submittedValues.add("bar");
-        submittedValues.add("baz");
-        Set<String> invalidValues = new HashSet<String>();
-        invalidValues.add("bar");
-        invalidValues.add("car");
-        testValidateWithCollection(items,
-                                   submittedValues,
-                                   invalidValues);
-
-    }
-
-    // Test validation of component with UISelectItems pointing to List
-    public void testValidation4() throws Exception {
-
-        List<SelectItem> items = new ArrayList<SelectItem>();
-        items.add(new SelectItem("foo"));
-        items.add(new SelectItem("bar"));
-        items.add(new SelectItem("baz"));
-        List<String> submittedValues = new ArrayList<String>();
-        submittedValues.add("bar");
-        submittedValues.add("baz");
-        ArrayList<String> invalidValues = new ArrayList<String>();
-        invalidValues.add("bar");
-        invalidValues.add("car");
-        testValidateWithCollection(items,
-                                   submittedValues,
-                                   invalidValues);
-
-    }
-
-
-    // Test validation of component with UISelectItems pointing to an Array
-    public void testValidation5() throws Exception {
-
-        // Put our component under test in a tree under a UIViewRoot
-        UIViewRoot root = facesContext.getApplication().getViewHandler()
-              .createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Add valid options to the component under test
-        SelectItem[] itemsArray = {
-              new SelectItem("foo"),
-              new SelectItem("bar"),
-              new SelectItem("baz")
-        };
-        UISelectItems items = new UISelectItems();
-        items.setValue(itemsArray);
-        UISelectMany selectMany = (UISelectMany) component;
-        selectMany.getChildren().add(items);
-
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new String[] { "bar", "baz" });
-        selectMany.validate(facesContext);
-        assertTrue(selectMany.isValid());
-
-        // Validate one value on the list and one not on the list
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new String[] { "bar", "car" });
-        selectMany.setRendererType(null); // We don't have any renderers
-        selectMany.validate(facesContext);
-        assertTrue(!selectMany.isValid());
-
-    }
-
-
-    private void testValidateWithCollection(Collection<SelectItem> selectItems,
-                                            Object validValues,
-                                            Object invalidValues)
-    throws Exception {
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        UISelectItems itemsComponent = new UISelectItems();
-        itemsComponent.setValue(selectItems);
-        UISelectMany selectMany = (UISelectMany) component;
-        selectMany.setRendererType(null);
-        selectMany.getChildren().add(itemsComponent);
-
-        selectMany.setValue(true);
-        selectMany.setSubmittedValue(validValues);
-        selectMany.validate(facesContext);
-        assertTrue(selectMany.isValid());
-        selectMany.updateModel(facesContext);
-
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(invalidValues);
-        selectMany.validate(facesContext);
-        assertTrue(!selectMany.isValid());
-
-    }
-
-
-    private String legalValues[] =
-    { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3" };
-
-
-    private String illegalValues[] =
-    { "D1", "D2", "Group A", "Group B", "Group C" };
-
-    // Test validation against a nested list of available options
-    public void testValidateNested() throws Exception {
-
-        // Set up UISelectMany with nested UISelectItems
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UISelectMany selectMany = (UISelectMany) component;
-        UISelectItems selectItems = new UISelectItems();
-        selectItems.setValue(setupOptions());
-        selectMany.getChildren().add(selectItems);
-        selectMany.setRequired(true);
-        checkMessages(0);
-
-        // Verify that all legal values will validate
-        for (int i = 0; i < legalValues.length; i++) {
-            selectMany.setValid(true);
-            selectMany.setSubmittedValue
-                (new Object[] { legalValues[0], legalValues[i] });
-            selectMany.validate(facesContext);
-            assertTrue("Value '" + legalValues[i] + "' found",
-                       selectMany.isValid());
-            checkMessages(0);
-        }
-
-        // Verify that illegal values will not validate
-        for (int i = 0; i < illegalValues.length; i++) {
-            selectMany.setValid(true);
-            selectMany.setSubmittedValue
-                (new Object[] { legalValues[0], illegalValues[i] });
-            selectMany.validate(facesContext);
-            assertTrue("Value '" + illegalValues[i] + "' not found",
-                       !selectMany.isValid());
-            checkMessages(i + 1);
-        }
-
-
-    }
-
-    // Test validation against a nested Set of available options
-    public void testValidateNestedSet() throws Exception {
-
-        // Set up UISelectMany with nested UISelectItems
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UISelectMany selectMany = (UISelectMany) component;
-        UISelectItems selectItems = new UISelectItems();
-        selectItems.setValue(setupOptionsSet());
-        selectMany.getChildren().add(selectItems);
-        selectMany.setRequired(true);
-        checkMessages(0);
-
-        // Verify that all legal values will validate
-        for (int i = 0; i < legalValues.length; i++) {
-            selectMany.setValid(true);
-            selectMany.setSubmittedValue
-                (new Object[] { legalValues[0], legalValues[i] });
-            selectMany.validate(facesContext);
-            assertTrue("Value '" + legalValues[i] + "' found",
-                       selectMany.isValid());
-            checkMessages(0);
-        }
-
-        // Verify that illegal values will not validate
-        for (int i = 0; i < illegalValues.length; i++) {
-            selectMany.setValid(true);
-            selectMany.setSubmittedValue
-                (new Object[] { legalValues[0], illegalValues[i] });
-            selectMany.validate(facesContext);
-            assertTrue("Value '" + illegalValues[i] + "' not found",
-                       !selectMany.isValid());
-            checkMessages(i + 1);
-        }
-
-
-    }
-
-
-    // Test validation of a required field
-    public void testValidateRequired() throws Exception {
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UISelectMany selectMany = (UISelectMany) component;
-        selectMany.getChildren().add(new UISelectItemSub("foo", null, null));
-        selectMany.getChildren().add(new UISelectItemSub("bar", null, null));
-        selectMany.getChildren().add(new UISelectItemSub("baz", null, null));
-        selectMany.setRequired(true);
-        checkMessages(0);
-
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new Object[] { "foo" });
-        selectMany.validate(facesContext);
-        checkMessages(0);
-        assertTrue(selectMany.isValid());
-
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(new Object[] { "" });
-        selectMany.validate(facesContext);
-        checkMessages(1);
-        assertTrue(!selectMany.isValid());
-
-        selectMany.setValid(true);
-        selectMany.setSubmittedValue(null);
-	// this execution of validate shouldn't add any messages to the
-	// queue, since a value of null means "don't validate".  This is
-	// different behavior than in previous versions of this
-	// testcase, which expected the UISelectMany.validate() to
-	// operate on the previously validated value, which is not
-	// correct.
-        selectMany.validate(facesContext);
-        checkMessages(1);
-	// since we're setting the submitted value to null, we don't
-	// want validation to occurr, therefore, the valid state of the
-	// componet should be as we left it.
-        assertTrue(selectMany.isValid());
-
-    }
-
-
-    // Test that appropriate properties are value binding enabled
-    public void testValueBindings() {
-
-	super.testValueBindings();
-	UISelectMany test = (UISelectMany) component;
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-    public void testSelectItemsIterator() {
-        // sub test 1: non-selectitem at end 
-        UISelectMany selectMany = (UISelectMany) component;
-        selectMany.getChildren().add(new UISelectItemSub("orr", null, null));
-        UIParameter param = new UIParameter();
-        param.setName("param");
-        param.setValue("paramValue");
-        selectMany.getChildren().add(param);
-        selectMany.getChildren().add(new UISelectItemSub("esposito", null, null));
-        Iterator<SelectItem> iter = new SelectItemsIterator(facesContext, selectMany);
-        while (iter.hasNext()) {
-            Object object = iter.next();
-            assertTrue(object instanceof javax.faces.model.SelectItem);
-            assertTrue((((SelectItem)object).getValue().equals("orr")) ||
-                (((SelectItem)object).getValue().equals("esposito")));
-        }
-
-        // sub test 2: non-selectitem in middle
-        selectMany = new UISelectMany();
-        selectMany.getChildren().add(new UISelectItemSub("gretsky", null, null));
-        selectMany.getChildren().add(param);
-        selectMany.getChildren().add(new UISelectItemSub("howe", null, null));
-        iter = new SelectItemsIterator(facesContext, selectMany);
-        while (iter.hasNext()) {
-            Object object = iter.next();
-            assertTrue(object instanceof javax.faces.model.SelectItem);
-            assertTrue((((SelectItem)object).getValue().equals("gretsky")) ||
-                (((SelectItem)object).getValue().equals("howe")));
-        }
-
-        // sub test 3: Empty collection
-        selectMany = new UISelectMany();
-        UISelectItems items = new UISelectItems();
-        items.setValue(Collections.emptyList());
-        selectMany.getChildren().add(items);
-        iter = new SelectItemsIterator(facesContext, selectMany);
-        assertTrue(!iter.hasNext());
-        try {
-            iter.next();
-            assertTrue(false);
-        } catch (NoSuchElementException nsee) {
-            // expected
-        }
-
-
-        // sub test 4: items exposed as generic collection of non-SelectItem
-        //             instances
-        Collection<Integer> cItems = new ArrayList<Integer>(5);
-        Collections.addAll(cItems, 0, 1, 2, 3, 4);
-        selectMany = new UISelectMany();
-        items = new UISelectItems();
-        items.setValue(cItems);
-        selectMany.getChildren().add(items);
-        iter = new SelectItemsIterator(facesContext, selectMany);
-        SelectItem previous = null;
-        for (int i = 0, len = cItems.size(); i < len; i++) {
-            assertTrue(iter.hasNext());
-            SelectItem item = iter.next();
-            assertNotNull(item);
-            assertEquals(i, item.getValue());
-            assertEquals(Integer.toString(i), item.getLabel());
-            assertNull(item.getDescription());
-            assertFalse(item.isDisabled());
-            assertFalse(item.isEscape());
-            if (previous != null) {
-                // using fly-weight pattern make sure we use the same
-                // instance through out the iteration
-                assertTrue(item == previous);
-            }
-            previous = item;
-        }
-        assertFalse(iter.hasNext());
-        try {
-            iter.next();
-            assertTrue(false);
-        } catch (NoSuchElementException nsee) {
-            // expected
-        }
-
-        // sub-test 5: DataModel providing the instances to produce
-        //             SelectItems from
-        selectMany = new UISelectMany();
-        items = new UISelectItems();
-        items.setValue(new ListDataModel<Integer>((List<Integer>) cItems));
-        selectMany.getChildren().add(items);
-        iter = new SelectItemsIterator(facesContext, selectMany);
-        previous = null;
-        for (int i = 0, len = cItems.size(); i < len; i++) {
-            assertTrue(iter.hasNext());
-            SelectItem item = iter.next();
-            assertNotNull(item);
-            assertEquals(i, item.getValue());
-            assertEquals(Integer.toString(i), item.getLabel());
-            assertNull(item.getDescription());
-            assertFalse(item.isDisabled());
-            assertFalse(item.isEscape());
-            if (previous != null) {
-                // using fly-weight pattern make sure we use the same
-                // instance through out the iteration
-                assertTrue(item == previous);
-            }
-            previous = item;
-        }
-        assertFalse(iter.hasNext());
-        try {
-            iter.next();
-            assertTrue(false);
-        } catch (NoSuchElementException nsee) {
-            // expected
-        }
-
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UISelectMany();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    protected void setupNewValue(UIInput input) {
-
-        input.setSubmittedValue(new Object[] { "foo" });
-        UISelectItem si = new UISelectItem();
-        si.setItemValue("foo");
-        si.setItemLabel("foo label");
-        input.getChildren().add(si);
-
-    }
-
-
-    // Create an options list with nested groups
-    protected List setupOptions() {
-        SelectItemGroup group, subgroup;
-        subgroup = new SelectItemGroup("Group C");
-        subgroup.setSelectItems(new SelectItem[]
-            { new SelectItem("C1"),
-              new SelectItem("C2"),
-              new SelectItem("C3") });
-        List options = new ArrayList();
-        options.add(new SelectItem("A1"));
-        group = new SelectItemGroup("Group B");
-        group.setSelectItems(new SelectItem[]
-            { new SelectItem("B1"),
-              subgroup,
-              new SelectItem("B2"),
-              new SelectItem("B3") });
-        
-        options.add(group);
-        options.add(new SelectItem("A2"));
-        options.add(new SelectItem("A3"));
-        return (options);
-    }
-
-    // Create an options list with nested groups
-    protected Set setupOptionsSet() {
-        SelectItemGroup group, subgroup;
-        subgroup = new SelectItemGroup("Group C");
-        subgroup.setSelectItems(new SelectItem[]
-            { new SelectItem("C1"),
-              new SelectItem("C2"),
-              new SelectItem("C3") });
-        Set<SelectItem> options = new HashSet<SelectItem>();
-        options.add(new SelectItem("A1"));
-        group = new SelectItemGroup("Group B");
-        group.setSelectItems(new SelectItem[]
-            { new SelectItem("B1"),
-              subgroup,
-              new SelectItem("B2"),
-              new SelectItem("B3") });
-        options.add(group);
-        options.add(new SelectItem("A2"));
-        options.add(new SelectItem("A3"));
-        return (options);
-    }
-
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UISelectOneTestCase.java b/jsf-api/src/test/java/javax/faces/component/UISelectOneTestCase.java
deleted file mode 100644
index badd488..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UISelectOneTestCase.java
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-
-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 java.util.HashSet;
-import java.util.Collection;
-import java.util.Collections;
-
-
-/**
- * <p>Unit tests for {@link UISelectOne}.</p>
- */
-
-public class UISelectOneTestCase extends UIInputTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UISelectOneTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UISelectOne();
-        expectedFamily = UISelectOne.COMPONENT_FAMILY;
-        expectedRendererType = "javax.faces.Menu";
-    }
-
-    
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(UISelectOneTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test a pristine UISelectOne instance
-    public void testPristine() {
-
-        super.testPristine();
-        UISelectOne selectOne = (UISelectOne) component;
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        UISelectOne selectOne = (UISelectOne) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        UISelectOne selectOne = (UISelectOne) component;
-
-    }
-
-
-    // Test validation of value against the valid list
-    public void testValidation() throws Exception {
-
-        // Put our component under test in a tree under a UIViewRoot
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Add valid options to the component under test
-        UISelectOne selectOne = (UISelectOne) component;
-        selectOne.getChildren().add(new UISelectItemSub("foo", null, null));
-        selectOne.getChildren().add(new UISelectItemSub("bar", null, null));
-        selectOne.getChildren().add(new UISelectItemSub("baz", null, null));
-
-        // Validate a value that is on the list
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("bar");
-        selectOne.setRendererType(null); // We don't have any renderers
-        selectOne.validate(facesContext);
-        assertTrue(selectOne.isValid());
-
-        // Validate a value that is not on the list
-        selectOne.getAttributes().put("label", "mylabel");
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("bop");
-        selectOne.validate(facesContext);
-        assertTrue(!selectOne.isValid());
-        Iterator messages = facesContext.getMessages();
-        while (messages.hasNext()) {
-            FacesMessage message = (FacesMessage) messages.next();
-            assertTrue(message.getSummary().indexOf("mylabel") >= 0);
-        }
-    }
-
-    // Test validation of component with UISelectItems pointing to map
-    public void testValidation2() throws Exception {
-
-         // Put our component under test in a tree under a UIViewRoot
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Add valid options to the component under test
-        Map map = new HashMap();
-        map.put("key_foo", "foo");
-        map.put("key_bar", "bar");
-        map.put("key_baz", "baz");
-        UISelectItems items = new UISelectItems();
-        items.setValue(map);
-        UISelectOne selectOne = (UISelectOne) component;
-        selectOne.getChildren().add(items);
-
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("foo");
-        selectOne.validate(facesContext);
-        assertTrue(selectOne.isValid());
-
-        // Validate one value on the list and one not on the list
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("car");
-        selectOne.setRendererType(null); // We don't have any renderers
-        selectOne.validate(facesContext);
-        assertTrue(!selectOne.isValid());
-
-    }
-
-
-    // Test validation of component with UISelectItems pointing to Set
-    public void testValidation3() throws Exception {
-
-        Set<SelectItem> items = new HashSet<SelectItem>();
-        items.add(new SelectItem("foo"));
-        items.add(new SelectItem("bar"));
-        items.add(new SelectItem("baz"));
-
-        testValidateWithCollection(items, "bar", "car");
-        
-    }
-
-    // Test validation of component with UISelectItems pointing to List
-    public void testValidation4() throws Exception {
-
-        List<SelectItem> items = new ArrayList<SelectItem>();
-        items.add(new SelectItem("foo"));
-        items.add(new SelectItem("bar"));
-        items.add(new SelectItem("baz"));
-
-        testValidateWithCollection(items, "bar", "car");
-
-    }
-
-
-    // Test validation of component with UISelectItems pointing to an Array
-    public void testValidation5() throws Exception {
-
-         // Put our component under test in a tree under a UIViewRoot
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        // Add valid options to the component under test
-        SelectItem[] itemsArray = {
-              new SelectItem("foo"),
-              new SelectItem("bar"),
-              new SelectItem("baz")
-        };
-        UISelectItems items = new UISelectItems();
-        items.setValue(itemsArray);
-        UISelectOne selectOne = (UISelectOne) component;
-        selectOne.getChildren().add(items);
-
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("foo");
-        selectOne.validate(facesContext);
-        assertTrue(selectOne.isValid());
-
-        // Validate one value on the list and one not on the list
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("car");
-        selectOne.setRendererType(null); // We don't have any renderers
-        selectOne.validate(facesContext);
-        assertTrue(!selectOne.isValid());
-
-    }
-
-
-    private void testValidateWithCollection(Collection<SelectItem> selectItems,
-                                            String validValue,
-                                            String invalidValue)
-    throws Exception {
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-
-        UISelectItems itemsComponent = new UISelectItems();
-        itemsComponent.setValue(selectItems);
-        UISelectOne selectOne = (UISelectOne) component;
-        selectOne.setRendererType(null);
-        selectOne.getChildren().add(itemsComponent);
-
-        selectOne.setValue(true);
-        selectOne.setSubmittedValue(validValue);
-        selectOne.validate(facesContext);
-        assertTrue(selectOne.isValid());
-        selectOne.updateModel(facesContext);
-
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue(invalidValue);
-        selectOne.validate(facesContext);
-        assertTrue(!selectOne.isValid());
-
-    }
-
-
-    private String legalValues[] =
-    { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3" };
-
-
-    private String illegalValues[] =
-    { "D1", "D2", "Group A", "Group B", "Group C" };
-
-    // Test validation against a nested list of available options
-    public void testValidateNested() throws Exception {
-
-        // Set up UISelectOne with nested UISelectItems
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UISelectOne selectOne = (UISelectOne) component;
-        UISelectItems selectItems = new UISelectItems();
-        selectItems.setValue(setupOptions());
-        selectOne.getChildren().add(selectItems);
-        selectOne.setRequired(true);
-        checkMessages(0);
-
-        // Verify that all legal values will validate
-        for (int i = 0; i < legalValues.length; i++) {
-            selectOne.setValid(true);
-            selectOne.setSubmittedValue(legalValues[i]);
-            selectOne.validate(facesContext);
-            assertTrue("Value '" + legalValues[i] + "' found",
-                       selectOne.isValid());
-            checkMessages(0);
-        }
-
-        // Verify that illegal values will not validate
-        for (int i = 0; i < illegalValues.length; i++) {
-            selectOne.setValid(true);
-            selectOne.setSubmittedValue(illegalValues[i]);
-            selectOne.validate(facesContext);
-            assertTrue("Value '" + illegalValues[i] + "' not found",
-                       !selectOne.isValid());
-            checkMessages(i + 1);
-        }
-
-
-    }
-
-
-    // Test validation of a required field
-    public void testValidateRequired() throws Exception {
-
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        root.getChildren().add(component);
-        UISelectOne selectOne = (UISelectOne) component;
-        selectOne.getChildren().add(new UISelectItemSub("foo", null, null));
-        selectOne.getChildren().add(new UISelectItemSub("bar", null, null));
-        selectOne.getChildren().add(new UISelectItemSub("baz", null, null));
-        selectOne.setRequired(true);
-        checkMessages(0);
-
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("foo");
-        selectOne.validate(facesContext);
-        checkMessages(0);
-        assertTrue(selectOne.isValid());
-
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue("");
-        selectOne.validate(facesContext);
-        checkMessages(1);
-        assertTrue(!selectOne.isValid());
-
-        selectOne.setValid(true);
-        selectOne.setSubmittedValue(null);
-        // awiner: see UIInputTestCase
-        selectOne.validate(facesContext);
-        checkMessages(1);
-        assertTrue(selectOne.isValid());
-
-    }
-
-
-    // Test that appropriate properties are value binding enabled
-    public void PENDING_FIXME_testValueBindings() {
-
-	super.testValueBindings();
-	UISelectOne test = (UISelectOne) component;
-
-	// "value" property
-	request.setAttribute("foo", "bar");
-	test.setValue(null);
-	assertNull(test.getValue());
-	test.setValueBinding("value", application.createValueBinding("#{foo}"));
-	assertNotNull(test.getValueBinding("value"));
-	assertEquals("bar", test.getValue());
-	test.setValue("baz");
-	assertEquals("baz", test.getValue());
-	test.setValue(null);
-	assertEquals("bar", test.getValue());
-	test.setValueBinding("value", null);
-	assertNull(test.getValueBinding("value"));
-	assertNull(test.getValue());
-
-    }
-
-    public void testSelectItemsIterator() {
-        // sub test 1 : non-selectItem at end
-        UISelectOne selectOne = (UISelectOne) component;
-        selectOne.getChildren().add(new UISelectItemSub("orr", null, null));
-        selectOne.getChildren().add(new UISelectItemSub("esposito", null, null));
-        UIParameter param = new UIParameter();
-        param.setName("param");
-        param.setValue("paramValue");
-        selectOne.getChildren().add(param);
-        Iterator iter = new SelectItemsIterator(facesContext, selectOne);
-        while (iter.hasNext()) {
-            Object object = iter.next();
-            assertTrue(object instanceof javax.faces.model.SelectItem);
-            assertTrue((((SelectItem)object).getValue().equals("orr")) || 
-                (((SelectItem)object).getValue().equals("esposito")));
-        }
-
-        // sub test 2: non-selectitem in middle
-        selectOne = new UISelectOne();
-        selectOne.getChildren().add(new UISelectItemSub("gretsky", null, null));
-        selectOne.getChildren().add(param);
-        selectOne.getChildren().add(new UISelectItemSub("howe", null, null));
-        iter = new SelectItemsIterator(facesContext, selectOne);
-        while (iter.hasNext()) {
-            Object object = iter.next();
-            assertTrue(object instanceof javax.faces.model.SelectItem);
-            assertTrue((((SelectItem)object).getValue().equals("gretsky")) || 
-                (((SelectItem)object).getValue().equals("howe")));
-        }
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UISelectOne();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    protected void setupNewValue(UIInput input) {
-
-        input.setSubmittedValue("foo");
-        UISelectItem si = new UISelectItem();
-        si.setItemValue("foo");
-        si.setItemLabel("foo label");
-        input.getChildren().add(si);
-
-    }
-
-
-    // Create an options list with nested groups
-    protected List setupOptions() {
-        SelectItemGroup group, subgroup;
-        subgroup = new SelectItemGroup("Group C");
-        subgroup.setSelectItems(new SelectItem[]
-            { new SelectItem("C1"),
-              new SelectItem("C2"),
-              new SelectItem("C3") });
-        List options = new ArrayList();
-        options.add(new SelectItem("A1"));
-        group = new SelectItemGroup("Group B");
-        group.setSelectItems(new SelectItem[]
-            { new SelectItem("B1"),
-              subgroup,
-              new SelectItem("B2"),
-              new SelectItem("B3") });
-        options.add(group);
-        options.add(new SelectItem("A2"));
-        options.add(new SelectItem("A3"));
-        return (options);
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/UIViewRootTestCase.java b/jsf-api/src/test/java/javax/faces/component/UIViewRootTestCase.java
deleted file mode 100644
index 2687d72..0000000
--- a/jsf-api/src/test/java/javax/faces/component/UIViewRootTestCase.java
+++ /dev/null
@@ -1,1077 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import com.sun.faces.mock.MockRenderKit;
-import java.lang.reflect.Field;
-import java.util.List;
-import java.util.Locale;
-import java.io.IOException;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseListener;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostConstructViewMapEvent;
-import javax.faces.event.PreDestroyViewMapEvent;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-import javax.el.ValueExpression;
-import javax.el.MethodExpression;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-
-/**
- * <p>Test case for the <strong>javax.faces.UIViewRoot</strong>
- * concrete class.</p>
- */
-
-public class UIViewRootTestCase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIViewRootTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-
-        return (new TestSuite(UIViewRootTestCase.class));
-
-    }
-
-    public static String FACTORIES[][] = {
-	{ FactoryFinder.APPLICATION_FACTORY, 
-	  "com.sun.faces.mock.MockApplicationFactory"
-	},
-	{ FactoryFinder.FACES_CONTEXT_FACTORY, 
-	  "com.sun.faces.mock.MockFacesContextFactory"
-	},
-	{ FactoryFinder.LIFECYCLE_FACTORY, 
-	  "com.sun.faces.mock.MockLifecycleFactory"
-	},
-	{ FactoryFinder.RENDER_KIT_FACTORY, 
-	  "com.sun.faces.mock.MockRenderKitFactory"
-	}
-    };
-
-    public void setUp() {
-        FactoryFinder.releaseFactories();
-	super.setUp();
-	for (int i = 0, len = FACTORIES.length; i < len; i++) {
-	    System.getProperties().remove(FACTORIES[i][0]);
-	}
-
-	FactoryFinder.releaseFactories();
-	int len, i = 0;
-
-	// simulate the "faces implementation specific" part
-	for (i = 0, len = FACTORIES.length; i < len; i++) {
-	    FactoryFinder.setFactory(FACTORIES[i][0],
-				     FACTORIES[i][1]);
-	}
-        
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-	root.setViewId("/viewId");
-        facesContext.setViewRoot(root);
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = new MockRenderKit();
-        try {
-            renderKitFactory.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT,
-                                          renderKit);
-        } catch (IllegalArgumentException e) {
-            ;
-        }
-
-	
-    }
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-
-        component = null;
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testAddGetComponentResources() {
-
-        application.addComponent("javax.faces.ComponentResourceContainer", Container.class.getName());
-        UIViewRoot root = new UIViewRoot();
-        UIOutput resource = new UIOutput();
-
-        // no target argument should result in target being head
-        root.addComponentResource(facesContext, resource);
-        List<UIComponent> components = root.getComponentResources(facesContext, "head");
-        assertNotNull(components);
-        assertTrue(components.size() == 1);
-        assertTrue(components.get(0) == resource);
-        UIOutput resource2 = new UIOutput();
-        root.addComponentResource(facesContext, resource2);
-        assertTrue(components.size() == 2);
-        assertTrue(components.get(1) == resource2);
-        root.addComponentResource(facesContext, resource2, "form");
-        components = root.getComponentResources(facesContext, "form");
-        assertTrue(components.size() == 1);
-        root.addComponentResource(facesContext, resource2, "body");
-        components = root.getComponentResources(facesContext, "body");
-        assertTrue(components.size() == 1);
-
-        // the default implementation masks the facet name values
-        // of head and form to ensure there are no collisions with valid
-        // facets by the name.  Calling UIViewRoot.getFacet("head") or
-        // get("form") will return null.
-        assertNull(root.getFacet("head"));
-        assertNull(root.getFacet("form"));
-        assertNull(root.getFacet("body"));
-        assertNotNull(root.getFacet("javax_faces_location_HEAD"));
-        assertNotNull(root.getFacet("javax_faces_location_FORM"));
-        assertNotNull(root.getFacet("javax_faces_location_BODY"));
-
-        // custom locations will also be masked
-        root.addComponentResource(facesContext, resource2, "gt");
-        assertNotNull(root.getFacet("javax_faces_location_gt"));
-        components = root.getComponentResources(facesContext, "gt");
-        assertTrue(components.size() == 1);
-
-    }
-
-
-    // Test AbortProcessingException support
-    public void testAbortProcessingException() {
-
-        // Register three listeners, with the second one set to abort
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-        root.addFacesListener
-            (new TestListener("a", false));
-        root.addFacesListener
-            (new TestListener("b", true));
-        root.addFacesListener
-            (new TestListener("c", false));
-
-        // Queue two event and check the results
-        TestListener.trace(null);
-        TestEvent event1 = new TestEvent(root, "1");
-        event1.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-        root.queueEvent(event1);
-        TestEvent event2 = new TestEvent(root, "2");
-        event2.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-        root.queueEvent(event2);
-        root.processDecodes(facesContext);
-        assertEquals("/a/1/b/1/a/2/b/2", TestListener.trace());
-
-    }
-
-
-    // Test event queuing and dequeuing during broadcasting
-    public void testEventBroadcasting() {
-
-        // Register a listener that will conditionally queue a new event
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-
-        root.addFacesListener
-            (new TestListener("t", "2", "4"));
-        TestListener.trace(null);
-
-        // Queue some events, including the trigger one
-	TestEvent event = new TestEvent(root, "1");
-	event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-        root.queueEvent(event);
-	event = new TestEvent(root, "2");
-	event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-        root.queueEvent(event);
-	event = new TestEvent(root, "3");
-	event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-        root.queueEvent(event);
-
-        // Simulate the Apply Request Values phase
-        root.processDecodes(facesContext);
-
-        // Validate the results (expect 4th event to also be queued)
-        String expected = "/t/1/t/2/t/3/t/4";
-        assertEquals(expected, TestListener.trace());
-
-    }
-
-
-    // Test event queuing and broadcasting
-    public void testEventQueuing() {
-
-        // Check for correct ifecycle management processing of event broadcast
-        checkEventQueueing(PhaseId.APPLY_REQUEST_VALUES);
-        checkEventQueueing(PhaseId.PROCESS_VALIDATIONS);
-        checkEventQueueing(PhaseId.UPDATE_MODEL_VALUES);
-        checkEventQueueing(PhaseId.INVOKE_APPLICATION);
-        checkEventQueueing(PhaseId.ANY_PHASE);
-
-    }
-
-    public void testLocaleFromVB() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-        ValueExpression expression = application.getExpressionFactory().createValueExpression(facesContext.getELContext(),
-											      "#{locale}", Object.class);
-	request.setAttribute("locale", Locale.CHINESE);
-	assertEquals(Locale.getDefault(), root.getLocale());
-	root.setValueExpression("locale", expression);
-	assertEquals(Locale.CHINESE, root.getLocale());
-
-           // test locale from String
-        request.setAttribute("locale", "en");
-        assertEquals(new Locale("en"), root.getLocale());
-        request.setAttribute("locale", "en_IE");
-        assertEquals(new Locale("en", "IE"), root.getLocale());
-        request.setAttribute("locale", "en_IE_EURO");
-        assertEquals(new Locale("en", "IE", "EURO"), root.getLocale());
-        
-    root.setLocale(Locale.CANADA_FRENCH);
-	assertEquals(Locale.CANADA_FRENCH, root.getLocale());
-    }
-
-    public void testUninitializedInstance() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-        assertEquals(javax.faces.render.RenderKitFactory.HTML_BASIC_RENDER_KIT,
-		     root.getRenderKitId());
-	assertEquals(Locale.getDefault(), root.getLocale());
-	
-    }
-
-    public void testPhaseMethExpression() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-        doTestPhaseMethodExpression(root, false);
-    }
-
-    public void testPhaseMethExpressionSkipping() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	doTestPhaseMethodExpression(root, true);
-    }
-
-    public void testPhaseListener() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	doTestPhaseListener(root, false);
-    }
-
-    public void testPhaseListenerSkipping() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	doTestPhaseListener(root, true);
-    }
-
-    public void testPhaseMethodExpressionAndListener() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	doTestPhaseMethodExpressionAndListener(root, false);
-    }
-
-    public void testPhaseMethodExpressionAndListenerSkipping() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	doTestPhaseMethodExpressionAndListener(root, true);
-    }
-
-    public void testPhaseMethExpressionState() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	Object state = root.saveState(facesContext);
-	root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	root.restoreState(facesContext, state);
-
-	doTestPhaseMethodExpression(root, false);
-    }
-
-    public void testPhaseListenerState() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	Object state = root.saveState(facesContext);
-	root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	root.restoreState(facesContext, state);
-
-	doTestPhaseListener(root, false);
-    }
-
-    public void testPhaseMethodExpressionAndListenerState() throws Exception {
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	Object state = root.saveState(facesContext);
-	root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	root.restoreState(facesContext, state);
-
-	doTestPhaseMethodExpressionAndListener(root, false);
-    }
-
-
-    public void testPhaseListenerExceptions() throws Exception {
-        PhaseId[] ids = {
-              PhaseId.APPLY_REQUEST_VALUES,
-              PhaseId.PROCESS_VALIDATIONS,
-              PhaseId.UPDATE_MODEL_VALUES,
-              PhaseId.INVOKE_APPLICATION,
-              PhaseId.RENDER_RESPONSE };
-        Class[] args = new Class[]{PhaseEvent.class};
-        MethodExpression beforeExpression = facesContext.getApplication()
-              .getExpressionFactory()
-              .createMethodExpression(facesContext.getELContext(),
-                                      "#{bean.beforePhase}", null,
-                                      args);
-        MethodExpression afterExpression = facesContext.getApplication()
-              .getExpressionFactory()
-              .createMethodExpression(facesContext.getELContext(),
-                                      "#{bean.afterPhase}", null,
-                                      args);
-        for (PhaseId id : ids) {
-            UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-            PhaseListenerBean bean = new PhaseListenerBean(id, true, false);
-            PhaseListenerBean pl1 = new PhaseListenerBean(id);
-            PhaseListenerBean pl2 = new PhaseListenerBean(id);
-            facesContext.getExternalContext().getRequestMap().put("bean", bean);
-            root.setBeforePhaseListener(beforeExpression);
-            root.setAfterPhaseListener(afterExpression);
-            root.addPhaseListener(pl1);
-            root.addPhaseListener(pl2);
-
-            // validate behavior
-            callRightLifecycleMethodGivenPhaseId(root, id);
-            assertTrue(bean.isBeforePhaseCalled());
-            assertTrue(!bean.isAfterPhaseCalled());
-            assertTrue(!pl1.isBeforePhaseCalled());
-            assertTrue(!pl1.isAfterPhaseCalled());
-            assertTrue(!pl2.isBeforePhaseCalled());
-            assertTrue(!pl2.isAfterPhaseCalled());
-
-            // ensure PLs are invoked properly in the case of exceptions
-            root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-            bean = new PhaseListenerBean(id);
-            pl1 = new PhaseListenerBean(id, true, false);
-            pl2 = new PhaseListenerBean(id);
-            facesContext.getExternalContext().getRequestMap().put("bean", bean);
-            root.setBeforePhaseListener(beforeExpression);
-            root.setAfterPhaseListener(afterExpression);
-            root.addPhaseListener(pl1);
-            root.addPhaseListener(pl2);
-
-            // validate behavior
-            callRightLifecycleMethodGivenPhaseId(root, id);
-            assertTrue(bean.isBeforePhaseCalled());
-            assertTrue(bean.isAfterPhaseCalled());
-            assertTrue(pl1.isBeforePhaseCalled());
-            assertTrue(!pl1.isAfterPhaseCalled());
-            assertTrue(!pl2.isBeforePhaseCalled());
-            assertTrue(!pl2.isAfterPhaseCalled());
-        }
-
-    }
-
-
-	
-    public void doTestPhaseMethodExpression(UIViewRoot root, 
-					 boolean skipping) throws Exception {
-	PhaseSkipTestComponent comp = null;
-	if (skipping) {
-	    comp = new PhaseSkipTestComponent();
-	    root.getChildren().add(comp);
-	    facesContext.responseComplete();
-	}
-	doTestPhaseMethodExpressionWithPhaseId(root, 
-					    PhaseId.APPLY_REQUEST_VALUES);
-	if (skipping) {
-	    assertTrue(!comp.isDecodeCalled());
-	}
-	doTestPhaseMethodExpressionWithPhaseId(root, PhaseId.PROCESS_VALIDATIONS);
-	if (skipping) {
-	    assertTrue(!comp.isProcessValidatorsCalled());
-	}
-	doTestPhaseMethodExpressionWithPhaseId(root, PhaseId.UPDATE_MODEL_VALUES);
-	if (skipping) {
-	    assertTrue(!comp.isProcessUpdatesCalled());
-	}
-	doTestPhaseMethodExpressionWithPhaseId(root, PhaseId.INVOKE_APPLICATION);
-	doTestPhaseMethodExpressionWithPhaseId(root, PhaseId.RENDER_RESPONSE);
-	if (skipping) {
-	    assertTrue(!comp.isEncodeBeginCalled());
-	}
-	
-    }
-
-    public void doTestPhaseMethodExpressionWithPhaseId(UIViewRoot root, 
-						    PhaseId phaseId) throws Exception {
-	PhaseListenerBean phaseListenerBean = new PhaseListenerBean(phaseId);
-	facesContext.getExternalContext().getRequestMap().put("bean",
-							    phaseListenerBean);
-	Class [] args = new Class [] { PhaseEvent.class };
-	MethodExpression 
-	    beforeExpression = facesContext.getApplication().getExpressionFactory().createMethodExpression(facesContext.getELContext(),
-										    "#{bean.beforePhase}", null,
-										    args),
-	    afterExpression = facesContext.getApplication().getExpressionFactory().createMethodExpression(facesContext.getELContext(),
-										   "#{bean.afterPhase}", null, 
-										   args);
-	root.setBeforePhaseListener(beforeExpression);
-	root.setAfterPhaseListener(afterExpression);
-
-	callRightLifecycleMethodGivenPhaseId(root, phaseId);
-
-	assertTrue(phaseListenerBean.isBeforePhaseCalled());
-	assertTrue(phaseListenerBean.isAfterPhaseCalled());
-	
-	
-    }
-
-
-    public void doTestPhaseListener(UIViewRoot root, 
-				    boolean skipping) throws Exception {
-	PhaseSkipTestComponent comp = null;
-	if (skipping) {
-	    comp = new PhaseSkipTestComponent();
-	    root.getChildren().add(comp);
-	    facesContext.responseComplete();
-	}
-	doTestPhaseListenerWithPhaseId(root, 
-					    PhaseId.APPLY_REQUEST_VALUES);
-	if (skipping) {
-	    assertTrue(!comp.isDecodeCalled());
-	}
-	doTestPhaseListenerWithPhaseId(root, PhaseId.PROCESS_VALIDATIONS);
-	if (skipping) {
-	    assertTrue(!comp.isProcessValidatorsCalled());
-	}
-	doTestPhaseListenerWithPhaseId(root, PhaseId.UPDATE_MODEL_VALUES);
-	if (skipping) {
-	    assertTrue(!comp.isProcessUpdatesCalled());
-	}
-	doTestPhaseListenerWithPhaseId(root, PhaseId.INVOKE_APPLICATION);
-	doTestPhaseListenerWithPhaseId(root, PhaseId.RENDER_RESPONSE);
-	if (skipping) {
-	    assertTrue(!comp.isEncodeBeginCalled());
-	}
-
-    }
-
-    public void doTestPhaseListenerWithPhaseId(UIViewRoot root,
-					       PhaseId phaseId) throws Exception {
-	PhaseListenerBean phaseListener = new PhaseListenerBean(phaseId);
-	root.addPhaseListener(phaseListener);
-
-	callRightLifecycleMethodGivenPhaseId(root, phaseId);
-
-	assertTrue(phaseListener.isBeforePhaseCalled());
-	assertTrue(phaseListener.isAfterPhaseCalled());
-	
-	
-    }
-
-
-    public void doTestPhaseMethodExpressionAndListener(UIViewRoot root, 
-						    boolean skipping) throws Exception {
-	PhaseSkipTestComponent comp = null;
-	if (skipping) {
-	    comp = new PhaseSkipTestComponent();
-	    root.getChildren().add(comp);
-	    facesContext.responseComplete();
-	}
-	doTestPhaseMethodExpressionAndListenerWithPhaseId(root, 
-						       PhaseId.APPLY_REQUEST_VALUES);
-	if (skipping) {
-	    assertTrue(!comp.isDecodeCalled());
-	}
-	doTestPhaseMethodExpressionAndListenerWithPhaseId(root, 
-						       PhaseId.PROCESS_VALIDATIONS);
-	if (skipping) {
-	    assertTrue(!comp.isProcessValidatorsCalled());
-	}
-	doTestPhaseMethodExpressionAndListenerWithPhaseId(root, 
-						       PhaseId.UPDATE_MODEL_VALUES);
-	if (skipping) {
-	    assertTrue(!comp.isProcessUpdatesCalled());
-	}
-	doTestPhaseMethodExpressionAndListenerWithPhaseId(root, 
-						       PhaseId.INVOKE_APPLICATION);
-	doTestPhaseMethodExpressionAndListenerWithPhaseId(root, 
-						       PhaseId.RENDER_RESPONSE);
-	if (skipping) {
-	    assertTrue(!comp.isEncodeBeginCalled());
-	}
-
-    }
-
-    public void doTestPhaseMethodExpressionAndListenerWithPhaseId(UIViewRoot root,
-							       PhaseId phaseId) throws Exception {
-	PhaseListenerBean phaseListener = new PhaseListenerBean(phaseId);
-	PhaseListenerBean phaseListenerBean = new PhaseListenerBean(phaseId);
-	facesContext.getExternalContext().getRequestMap().put("bean",
-							    phaseListenerBean);
-	Class [] args = new Class [] { PhaseEvent.class };
-	MethodExpression 
-	    beforeExpression = facesContext.getApplication().getExpressionFactory().createMethodExpression(facesContext.getELContext(),
-													   "#{bean.beforePhase}", null,
-													   args),
-	    afterExpression = facesContext.getApplication().getExpressionFactory().createMethodExpression(facesContext.getELContext(),
-													  "#{bean.afterPhase}", null,
-													  args);
-	root.setBeforePhaseListener(beforeExpression);
-	root.setAfterPhaseListener(afterExpression);
-	root.addPhaseListener(phaseListener);
-
-	callRightLifecycleMethodGivenPhaseId(root, phaseId);
-
-	assertTrue(phaseListenerBean.isBeforePhaseCalled());
-	assertTrue(phaseListenerBean.isAfterPhaseCalled());
-	assertTrue(phaseListener.isBeforePhaseCalled());
-	assertTrue(phaseListener.isAfterPhaseCalled());
-	
-    }
-    
-    private void checkEventQueuesSizes(List<List> events,
-	int applyEventsSize, int valEventsSize, int updateEventsSize, int appEventsSize) {
-        List applyEvents = events.get(PhaseId.APPLY_REQUEST_VALUES.getOrdinal());
-        assertEquals("Apply-Request-Values Event Count", applyEventsSize, applyEvents.size());
-        List valEvents = events.get(PhaseId.PROCESS_VALIDATIONS.getOrdinal());
-        assertEquals("Process-Validations Event Count", valEventsSize, valEvents.size());
-        List updateEvents = events.get(PhaseId.UPDATE_MODEL_VALUES.getOrdinal());
-        assertEquals("Update-Model Event Count", updateEventsSize, updateEvents.size());
-        List appEvents = events.get(PhaseId.INVOKE_APPLICATION.getOrdinal());
-        assertEquals("Invoke-Application Event Count", appEventsSize, appEvents.size());
-    }
-
-    // Test Events List Clearing
-    public void testEventsListClear() {
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-        TestEvent event1, event2, event3, event4 = null;
-        event1 = new TestEvent(root, "1");
-        event1.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
-        root.queueEvent(event1);
-        event2 = new TestEvent(root, "2");
-        event2.setPhaseId(PhaseId.PROCESS_VALIDATIONS);
-        root.queueEvent(event2);
-        event3 = new TestEvent(root, "3");
-        event3.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
-        root.queueEvent(event3);
-        event4 = new TestEvent(root, "4");
-        event4.setPhaseId(PhaseId.INVOKE_APPLICATION);
-        root.queueEvent(event4);
-        final Field fields[] = UIViewRoot.class.getDeclaredFields();
-        Field field = null;
-        List<List> events = null;
-        for (int i = 0; i < fields.length; ++i) {
-            if ("events".equals(fields[i].getName())) {
-                field = fields[i];
-                field.setAccessible(true);
-                try {
-                    events = TypedCollections.dynamicallyCastList((List) field.get(root), List.class);
-                } catch (Exception e) {
-                    assertTrue(false);
-                }
-                break;
-            }
-        }
-        // CASE: renderReponse not set; responseComplete not set;
-        // check for existence of events before processDecodes
-        checkEventQueuesSizes(events, 1, 1, 1, 1);
-        root.processDecodes(facesContext);
-        // there should be no events
-        checkEventQueuesSizes(events, 0, 1, 1, 1);
-                                                                                     
-        // requeue apply request event
-        root.queueEvent(event1);
-        // CASE: renderReponse set;
-        // check for existence of events before processValidators
-        checkEventQueuesSizes(events, 1, 1, 1, 1);
-        facesContext.renderResponse();
-        root.processValidators(facesContext);
-        // there should be no events
-        checkEventQueuesSizes(events, 0, 0, 0, 0);
-
-        // reset FacesContext
-        facesContext.setRenderResponse(false);
-        facesContext.setResponseComplete(false);
-        // requeue all events
-        root.queueEvent(event1);
-        root.queueEvent(event2);
-        root.queueEvent(event3);
-        root.queueEvent(event4);
-        try {
-            events = TypedCollections.dynamicallyCastList((List) field.get(root), List.class);
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-        // CASE: response set;
-        // check for existence of events before processValidators
-        checkEventQueuesSizes(events, 1, 1, 1, 1);
-        facesContext.renderResponse();
-        root.processValidators(facesContext);
-        // there should be no events
-        checkEventQueuesSizes(events, 0, 0, 0, 0);
-
-        // reset FacesContext
-        facesContext.setRenderResponse(false);
-        facesContext.setResponseComplete(false);
-        // requeue all events
-        root.queueEvent(event1);
-        root.queueEvent(event2);
-        root.queueEvent(event3);
-        root.queueEvent(event4);
-        try {
-            events = TypedCollections.dynamicallyCastList((List) field.get(root), List.class);
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-        // CASE: response complete;
-        // check for existence of events before processUpdates
-        checkEventQueuesSizes(events, 1, 1, 1, 1);
-        facesContext.responseComplete();
-        root.processUpdates(facesContext);
-        // there should be no events
-        checkEventQueuesSizes(events, 0, 0, 0, 0);
-
-        // reset FacesContext
-        facesContext.setRenderResponse(false);
-        facesContext.setResponseComplete(false);
-        // requeue all events
-        root.queueEvent(event1);
-        root.queueEvent(event2);
-        root.queueEvent(event3);
-        root.queueEvent(event4);
-        try {
-            events = TypedCollections.dynamicallyCastList((List) field.get(root), List.class);
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-        // CASE: response complete;
-        // check for existence of events before processApplication
-        checkEventQueuesSizes(events, 1, 1, 1, 1);
-        facesContext.responseComplete();
-        root.processApplication(facesContext);
-        // there should be no events
-        checkEventQueuesSizes(events, 0, 0, 0, 0);
-                                                                                     
-        //finally, get the internal events list one more time
-        //to make sure it is null
-        try {
-            events = TypedCollections.dynamicallyCastList((List) field.get(root), List.class);
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-        assertNull("events", events);
-    }
-                                                                             
-
-
-    private void callRightLifecycleMethodGivenPhaseId(UIViewRoot root,
-						      PhaseId phaseId) throws Exception {
-	if (phaseId.getOrdinal() == PhaseId.APPLY_REQUEST_VALUES.getOrdinal()) {
-	    root.processDecodes(facesContext);
-	}
-	else if(phaseId.getOrdinal() == PhaseId.PROCESS_VALIDATIONS.getOrdinal()) {
-	    root.processValidators(facesContext);
-	} else if(phaseId.getOrdinal() == PhaseId.UPDATE_MODEL_VALUES.getOrdinal()) {
-	    root.processUpdates(facesContext);
-	} else if(phaseId.getOrdinal() == PhaseId.INVOKE_APPLICATION.getOrdinal()) {
-	    root.processApplication(facesContext);
-	} else if(phaseId.getOrdinal() == PhaseId.RENDER_RESPONSE.getOrdinal()) {
-	    root.encodeBegin(facesContext);
-	    root.encodeEnd(facesContext);
-	}
-    }
-
-    // --------------------------------------------------------- Support Methods
-
-
-    private void checkEventQueueing(PhaseId phaseId) {
-
-        // NOTE:  Current semantics for ANY_PHASE listeners is that
-        // the event should be delivered exactly once, so the existence
-        // of such a listener does not cause the event to remain queued.
-        // Therefore, the expected string is the same as for any
-        // phase-specific listener, and it should get matched after
-        // Apply Request Values processing since that is first phase
-        // for which events are fired
-
-        // Register an event listener for the specified phase id
-        UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-        facesContext.setViewRoot(root);
-	TestEvent event = null;
-        TestListener listener = new TestListener("t");
-        root.addFacesListener(listener);
-
-        // Queue some events to be processed
-	event = new TestEvent(root, "1");
-	event.setPhaseId(phaseId);
-        root.queueEvent(event);
-	event = new TestEvent(root, "2");
-	event.setPhaseId(phaseId);
-        root.queueEvent(event);
-        String expected = "/t/1/t/2";
-
-        // Fire off the relevant lifecycle methods and check expected results
-        TestListener.trace(null);
-        assertEquals("", TestListener.trace());
-        root.processDecodes(facesContext);
-        if (PhaseId.APPLY_REQUEST_VALUES.equals(phaseId) ||
-            PhaseId.ANY_PHASE.equals(phaseId)) {
-            assertEquals(expected, TestListener.trace());
-        } else {
-            assertEquals("", TestListener.trace());
-        }
-        root.processValidators(facesContext);
-        if (PhaseId.PROCESS_VALIDATIONS.equals(phaseId) ||
-            PhaseId.APPLY_REQUEST_VALUES.equals(phaseId) ||
-            PhaseId.APPLY_REQUEST_VALUES.equals(phaseId) ||
-            PhaseId.ANY_PHASE.equals(phaseId)) {
-            assertEquals(expected, TestListener.trace());
-        } else {
-            assertEquals("", TestListener.trace());
-        }
-        root.processUpdates(facesContext);
-        if (PhaseId.UPDATE_MODEL_VALUES.equals(phaseId) ||
-            PhaseId.PROCESS_VALIDATIONS.equals(phaseId) ||
-            PhaseId.APPLY_REQUEST_VALUES.equals(phaseId) ||
-            PhaseId.ANY_PHASE.equals(phaseId)) {
-            assertEquals(expected, TestListener.trace());
-        } else {
-            assertEquals("", TestListener.trace());
-        }
-        root.processApplication(facesContext);
-        assertEquals(expected, TestListener.trace());
-        
-    }
-    
-    // These overrides are necessary because our normal setup
-    // calls releaseFactories, which makes it impossible to get clientIds.
-    
-    public void testInvokeOnComponentPositive() throws Exception {
-        super.setUp();
-        super.testInvokeOnComponentPositive();
-    }
-    
-    public void testInvokeOnComponentNegative() throws Exception {
-        super.setUp();
-        super.testInvokeOnComponentNegative();
-    }
-
-    public void testInvokeOnComponentWithPrependId() throws Exception {
-        super.setUp();
-        super.testInvokeOnComponentWithPrependId();
-    }
-
-
-    @Override
-    public void testChildrenListAfterAddViewPublish() {
-
-        // overridding to do nothing.  UIViewRoot is a special cases
-        // and there should always only be on UIViewRoot in a tree
-        
-    }
-
-    @Override
-    public void testFacetMapAfterAddViewPublish() {
-
-        // overridding to do nothing.  UIViewRoot is a special cases
-        // and there should always only be on UIViewRoot in a tree
-
-    }
-
-    
-    // ensure calling clear() on the ViewMap will
-    // invoke registered listeners.
-    public void testViewMapEventsTest() {
-
-        ViewMapListener listener = new ViewMapListener();
-        Application app = facesContext.getApplication();
-        app.subscribeToEvent(PostConstructViewMapEvent.class,
-                             UIViewRoot.class,
-                             listener);
-        app.subscribeToEvent(PreDestroyViewMapEvent.class,
-                             UIViewRoot.class,
-                             listener);
-        UIViewRoot root = new UIViewRoot();
-        assertTrue(!listener.wasProcessEventInvoked());
-        root.getViewMap();
-        assertTrue(listener.wasProcessEventInvoked());
-        listener.reset();
-        root.getViewMap();
-        assertTrue(!listener.wasProcessEventInvoked());
-        root.getViewMap().clear();
-        assertTrue(listener.wasProcessEventInvoked());
-        listener.reset();
-        root.getViewMap().clear();
-        assertTrue(listener.wasProcessEventInvoked());
-        
-        root = new UIViewRoot();
-        listener.reset();
-        assertTrue(!listener.wasProcessEventInvoked());
-        root.getViewMap(false);
-        assertTrue(!listener.wasProcessEventInvoked());
-
-        app.unsubscribeFromEvent(PostConstructViewMapEvent.class,
-                                 UIViewRoot.class,
-                                 listener);
-        app.unsubscribeFromEvent(PreDestroyViewMapEvent.class,
-                                 UIViewRoot.class,
-                                 listener);
-
-        app.subscribeToEvent(PostConstructViewMapEvent.class,
-                             listener);
-        app.subscribeToEvent(PreDestroyViewMapEvent.class,
-                             listener);
-        listener.reset();
-        root = new UIViewRoot();
-        assertTrue(!listener.wasProcessEventInvoked());
-        root.getViewMap();
-        assertTrue(listener.wasProcessEventInvoked());
-        assertTrue(listener.getPassedEvent() instanceof PostConstructViewMapEvent);
-        listener.reset();
-        root.getViewMap();
-        assertTrue(!listener.wasProcessEventInvoked());
-        root.getViewMap().clear();
-        assertTrue(listener.wasProcessEventInvoked());
-        assertTrue(listener.getPassedEvent() instanceof PreDestroyViewMapEvent);
-        listener.reset();
-        root.getViewMap().clear();
-        assertTrue(listener.getPassedEvent() instanceof PreDestroyViewMapEvent);
-        assertTrue(listener.wasProcessEventInvoked());
-
-    }
-
-    public void testViewMapSaveRestore() throws Exception {
-        UIViewRoot root = new UIViewRoot();
-        Map<String, Object> viewMap = root.getViewMap();
-        viewMap.put("one", "one");
-        Object saved = root.saveState(facesContext);
-        root = new UIViewRoot();
-        root.restoreState(facesContext, saved);
-        viewMap = root.getViewMap();
-        assertEquals("one", viewMap.get("one"));
-    }
-    
-
-    // Check that the properties on the specified components are equal
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-
-        super.checkProperties(comp1, comp2);
-        UIViewRoot vr1 = (UIViewRoot) comp1;
-        UIViewRoot vr2 = (UIViewRoot) comp2;
-        assertEquals(vr2.getRenderKitId(), vr2.getRenderKitId());
-        assertEquals(vr1.getViewId(), vr2.getViewId());
-        assertEquals(vr1.getLocale(), vr2.getLocale());
-
-    }
-
-
-    // Create a pristine component of the type to be used in state holder tests
-    protected UIComponent createComponent() {
-        UIComponent component = new UIViewRoot();
-        component.setRendererType(null);
-        return (component);
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-        super.populateComponent(component);
-        UIViewRoot vr = (UIViewRoot) component;
-        vr.setRenderKitId("foo");
-        vr.setViewId("bar");
-        vr.setLocale(new Locale("fr", "FR"));
-    }
-
-    public static class PhaseListenerBean extends Object
-          implements PhaseListener {
-        private boolean beforePhaseCalled = false;
-        private boolean afterPhaseCalled = false;
-        private PhaseId phaseId = null;
-        private boolean exceptionBefore;
-        private boolean exceptionAfter;
-
-        public PhaseListenerBean(PhaseId phaseId) {
-            this.phaseId = phaseId;
-        }
-
-        public PhaseListenerBean(PhaseId phaseId,
-                                 boolean exceptionBefore,
-                                 boolean exceptionAfter) {
-            this(phaseId);
-            this.exceptionBefore = exceptionBefore;
-            this.exceptionAfter = exceptionAfter;
-        }
-
-        public boolean isBeforePhaseCalled() {
-            return beforePhaseCalled;
-        }
-
-        public boolean isAfterPhaseCalled() {
-            return afterPhaseCalled;
-        }
-
-        public void beforePhase(PhaseEvent e) {
-            beforePhaseCalled = true;
-            if (exceptionBefore) {
-                throw new RuntimeException();
-            }
-        }
-
-        public void afterPhase(PhaseEvent e) {
-            afterPhaseCalled = true;
-            if (exceptionAfter) {
-                throw new RuntimeException();
-            }
-        }
-
-        public PhaseId getPhaseId() {
-            return phaseId;
-        }
-
-    }
-
-    public static class PhaseSkipTestComponent extends UIInput {
-
-	private boolean decodeCalled = false;
-	
-	public void decode(FacesContext context) {
-	    decodeCalled = true;
-	}
-	public boolean isDecodeCalled() { return decodeCalled; }
-
-	private boolean encodeBeginCalled = false;
-
-	public void encodeBegin(FacesContext context) throws IOException {
-	    encodeBeginCalled = true;
-	}
-
-	public boolean isEncodeBeginCalled() { return encodeBeginCalled; }
-
-
-	private boolean processValidatorsCalled = false;
-	
-	public void processValidators(FacesContext context) {
-	    processValidatorsCalled = true;
-	}
-
-	public boolean isProcessValidatorsCalled() { 
-	    return processValidatorsCalled; 
-	}
-
-	private boolean processUpdatesCalled = false;
-
-	public void processUpdates(FacesContext context) {	
-	    processUpdatesCalled = true;
-	}
-
-	public boolean isProcessUpdatesCalled() { 
-	    return processUpdatesCalled; 
-	}
-        
-
-    }
-
-    private static final class ViewMapListener implements SystemEventListener {
-
-        private boolean processEventInvoked;
-        private SystemEvent event;
-
-        public void processEvent(SystemEvent event)
-        throws AbortProcessingException {
-            this.event = event;
-            processEventInvoked = true;
-        }
-
-        public boolean isListenerForSource(Object source) {
-            return (source instanceof UIViewRoot);
-        }
-
-        public boolean wasProcessEventInvoked() {
-            return processEventInvoked;
-        }
-
-        public SystemEvent getPassedEvent() {
-            return event;
-        }
-
-        public void reset() {
-            processEventInvoked = false;
-            event = null;
-        }
-
-    }
-
-    public static class Container extends UIPanel {
-
-        @Override
-        public void encodeAll(FacesContext context) throws IOException {
-
-        }
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/component/ValueHolderTestCaseBase.java b/jsf-api/src/test/java/javax/faces/component/ValueHolderTestCaseBase.java
deleted file mode 100644
index 334c067..0000000
--- a/jsf-api/src/test/java/javax/faces/component/ValueHolderTestCaseBase.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.component;
-
-
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.convert.Converter;
-import javax.faces.convert.LongConverter;
-import javax.faces.convert.NumberConverter;
-import javax.faces.convert.ShortConverter;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Field;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link ValueHolder}.  Any test case for a
- * component class that implements {@link ValueHolder} should
- * extend this class.</p>
- */
-
-public abstract class ValueHolderTestCaseBase extends UIComponentBaseTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ValueHolderTestCaseBase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() {
-        super.setUp();
-        component = new UIOutput();
-        expectedId = null;
-        expectedRendererType = "Text";
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(ValueHolderTestCaseBase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testAttributesTransparencyNonDeterministic() throws Exception {
-	final int numThreads = 30;
-	final Boolean outcomes[] = new Boolean[numThreads];
-	Runnable runnables[] = new Runnable[numThreads];
-        int i = 0;
-        
-        for (i = 0; i < outcomes.length; i++) {
-            outcomes[i] = null;
-        }
-
-	for (i = 0; i < runnables.length; i++) {
-	    runnables[i] = new Runnable() {
-                public void run() {
-                    int threadNum = 0;
-                    try {
-                        threadNum = Integer.valueOf(Thread.currentThread().
-                                getName()).intValue();
-                    } catch (NumberFormatException ex) {
-                        fail("Expected thread name to be an integer");
-                    }
-                    // Even threadNums use HtmlInputText, odd use this component
-                    boolean isEven = (threadNum % 2) == 0;
-                    ValueHolder vh = null;
-                    UIComponent newComp = null;
-                    if (isEven) {
-                        newComp = new HtmlInputText();
-                        vh = (ValueHolder) newComp;
-                    }
-                    else {
-                        try {
-                            newComp = ValueHolderTestCaseBase.this.component.getClass().newInstance();
-                            vh = (ValueHolder) newComp;
-                                    
-                        } catch (IllegalAccessException ex) {
-                            fail("Can't instantiate class of " + ValueHolderTestCaseBase.this.component.getClass().getName());
-                        } catch (InstantiationException ex) {
-                            fail("Can't instantiate class of " + ValueHolderTestCaseBase.this.component.getClass().getName());
-                        }
-                    }
-                    try {
-                        boolean result = doTestAttributesTransparency(vh, newComp);
-                        outcomes[threadNum] = new Boolean(result);
-                    }
-                    catch (Throwable e) {
-                        e.printStackTrace();
-                        outcomes[threadNum] = new Boolean(false);
-                    }
-                }
-            };
-	}
-        clearDescriptors();
-        Thread thread = null;
-        for (i = 0; i < runnables.length; i++) {
-            thread = new Thread(runnables[i], "" + i);
-            thread.start();
-        }
-        
-        // Keep polling the outcomes array until there are no nulls.
-        boolean foundNull = false;
-        while (!foundNull) {
-            for (i = 0; i < outcomes.length; i++) {
-                if (null != outcomes[i]) {
-                    foundNull = true;
-                }
-            }
-            Thread.currentThread().sleep(500);
-        }
-		    
-        for (i = 0; i < outcomes.length; i++) {
-            if (!outcomes[i].booleanValue()) {
-                fail("Thread " + i + " failed");
-            }
-        }
-
-    }
-    
-    private void clearDescriptors() throws Exception {
-        Field descriptorsField = UIComponentBase.class.getDeclaredField("descriptors");
-        descriptorsField.setAccessible(true);
-        WeakHashMap<Class<?>, Map<String, PropertyDescriptor>> descriptors =
-              (WeakHashMap<Class<?>, Map<String, PropertyDescriptor>>) descriptorsField
-                    .get(null);
-        descriptors.clear();        
-    }
-
-    public void testAttributesTransparency() {
-        super.testAttributesTransparency();
-        ValueHolder vh = (ValueHolder) component;
-        doTestAttributesTransparency(vh, component);
-    }
-
-    // Test attribute-property transparency
-    public boolean doTestAttributesTransparency(ValueHolder vh, UIComponent newComp) {
-
-
-        assertEquals(vh.getValue(),
-                     (String) newComp.getAttributes().get("value"));
-        vh.setValue("foo");
-        assertEquals("foo", (String) newComp.getAttributes().get("value"));
-        vh.setValue(null);
-        assertNull((String) newComp.getAttributes().get("value"));
-        newComp.getAttributes().put("value", "bar");
-        assertEquals("bar", vh.getValue());
-        newComp.getAttributes().put("value", null);
-        assertNull(vh.getValue());
-
-        assertEquals(vh.getConverter(),
-                     (String) newComp.getAttributes().get("converter"));
-        vh.setConverter(new LongConverter());
-        assertNotNull((Converter) newComp.getAttributes().get("converter"));
-        assertTrue(newComp.getAttributes().get("converter")
-                   instanceof LongConverter);
-        vh.setConverter(null);
-        assertNull(newComp.getAttributes().get("converter"));
-        newComp.getAttributes().put("converter", new ShortConverter());
-        assertNotNull(vh.getConverter());
-        assertTrue(vh.getConverter() instanceof ShortConverter);
-        newComp.getAttributes().put("converter", null);
-        assertNull(vh.getConverter());
-
-        return true;
-    }
-
-
-    // Suppress lifecycle tests since we do not have a renderer
-    public void testLifecycleManagement() {
-    }
-
-
-    // Test a pristine ValueHolderBase instance
-    public void testPristine() {
-
-        super.testPristine();
-        ValueHolder vh = (ValueHolder) component;
-
-        // Validate properties
-        assertNull("no value", vh.getValue());
-        assertNull("no converter", vh.getConverter());
-
-    }
-
-
-    // Test setting properties to invalid values
-    public void testPropertiesInvalid() throws Exception {
-
-        super.testPropertiesInvalid();
-        ValueHolder vh = (ValueHolder) component;
-
-    }
-
-
-    // Test setting properties to valid values
-    public void testPropertiesValid() throws Exception {
-
-        super.testPropertiesValid();
-        ValueHolder vh = (ValueHolder) component;
-
-        // value
-        vh.setValue("foo.bar");
-        assertEquals("expected value",
-                     "foo.bar", vh.getValue());
-        vh.setValue(null);
-        assertNull("erased value", vh.getValue());
-
-        // converter
-        vh.setConverter(new LongConverter());
-        assertTrue("expected converter",
-                   vh.getConverter() instanceof LongConverter);
-        vh.setConverter(null);
-        assertNull("erased converter", vh.getConverter());
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Check that the properties of the NumberConverters are equal
-    protected void checkNumberConverter(NumberConverter nc1,
-                                        NumberConverter nc2) {
-
-        assertEquals(nc1.getCurrencyCode(), nc2.getCurrencyCode());
-        assertEquals(nc1.getCurrencySymbol(), nc2.getCurrencySymbol());
-        assertEquals(nc1.isGroupingUsed(), nc2.isGroupingUsed());
-        assertEquals(nc1.isIntegerOnly(), nc2.isIntegerOnly());
-        assertEquals(nc1.getMaxFractionDigits(), nc2.getMaxFractionDigits());
-        assertEquals(nc1.getMaxIntegerDigits(), nc2.getMaxIntegerDigits());
-        assertEquals(nc1.getMinFractionDigits(), nc2.getMinFractionDigits());
-        assertEquals(nc1.getMinIntegerDigits(), nc2.getMinIntegerDigits());
-        assertEquals(nc1.getLocale(), nc2.getLocale());
-        assertEquals(nc1.getPattern(), nc2.getPattern());
-        assertEquals(nc1.getType(), nc2.getType());
-
-    }
-
-
-    // Check that the properties on the specified components are equal
-    protected void checkProperties(UIComponent comp1, UIComponent comp2) {
-
-        super.checkProperties(comp1, comp2);
-        ValueHolder vh1 = (ValueHolder) comp1;
-        ValueHolder vh2 = (ValueHolder) comp2;
-        assertEquals(vh1.getValue(), vh2.getValue());
-        checkNumberConverter((NumberConverter) vh1.getConverter(),
-                             (NumberConverter) vh2.getConverter());
-    }
-
-
-    // Populate a pristine component to be used in state holder tests
-    protected void populateComponent(UIComponent component) {
-
-        super.populateComponent(component);
-        ValueHolder vh = (ValueHolder) component;
-        vh.setValue("component value");
-        vh.setConverter(createNumberConverter());
-
-    }
-
-
-    // Create and configure a NumberConverter
-    protected NumberConverter createNumberConverter() {
-
-        NumberConverter nc = new NumberConverter();
-        nc.setCurrencyCode("USD");
-        nc.setCurrencySymbol("$");
-        nc.setGroupingUsed(false);
-        nc.setIntegerOnly(true);
-        nc.setMaxFractionDigits(2);
-        nc.setMaxIntegerDigits(10);
-        nc.setMinFractionDigits(2);
-        nc.setMinIntegerDigits(5);
-        nc.setType("currency");
-        return (nc);
-
-    }
-
-
-    protected void checkNumberConverters(NumberConverter nc1,
-                               NumberConverter nc2) {
-
-        assertNotNull(nc1);
-        assertNotNull(nc2);
-        assertEquals(nc1.getCurrencyCode(), nc2.getCurrencyCode());
-        assertEquals(nc1.getCurrencySymbol(), nc2.getCurrencySymbol());
-        assertEquals(nc1.isGroupingUsed(), nc2.isGroupingUsed());
-        assertEquals(nc1.isIntegerOnly(), nc2.isIntegerOnly());
-        assertEquals(nc1.getMaxFractionDigits(), nc2.getMaxFractionDigits());
-        assertEquals(nc1.getMaxIntegerDigits(), nc2.getMaxIntegerDigits());
-        assertEquals(nc1.getMinFractionDigits(), nc2.getMinFractionDigits());
-        assertEquals(nc1.getMinIntegerDigits(), nc2.getMinIntegerDigits());
-        assertEquals(nc1.getLocale(), nc2.getLocale());
-        assertEquals(nc1.getPattern(), nc2.getPattern());
-        assertEquals(nc1.getType(), nc2.getType());
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/event/PhaseIdTest.java b/jsf-api/src/test/java/javax/faces/event/PhaseIdTest.java
deleted file mode 100644
index 1f06036..0000000
--- a/jsf-api/src/test/java/javax/faces/event/PhaseIdTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.event;
-
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.Iterator;
-
-public class PhaseIdTest extends TestCase
-{
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-public PhaseIdTest()
-{
-    super();
-}
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testToString() {
-	Iterator valueIter = PhaseId.VALUES.iterator();
-	String cur = null;
-	while (valueIter.hasNext()) {
-	    cur = (String) valueIter.next().toString();
-	    System.out.println(cur);
-	    assertTrue(cur.length() > 3);
-	}
-	
-    }
-
-} // end of class PhaseIdTest
diff --git a/jsf-api/src/test/java/javax/faces/mock/MockFacesContextFactoryExtender.java b/jsf-api/src/test/java/javax/faces/mock/MockFacesContextFactoryExtender.java
deleted file mode 100644
index bf9e4bf..0000000
--- a/jsf-api/src/test/java/javax/faces/mock/MockFacesContextFactoryExtender.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.mock;
-
-import com.sun.faces.mock.MockFacesContextFactory;
-import javax.faces.FactoryFinder;
-import javax.faces.context.FacesContextFactory;
-
-public class MockFacesContextFactoryExtender extends MockFacesContextFactory {
-    public MockFacesContextFactoryExtender() {}
-    public MockFacesContextFactoryExtender(FacesContextFactory oldImpl) {
-	System.setProperty(FactoryFinder.FACES_CONTEXT_FACTORY, 
-			   this.getClass().getName());
-	System.setProperty("oldImpl", oldImpl.getClass().getName());
-    }
-}
-
diff --git a/jsf-api/src/test/java/javax/faces/mock/MockFacesContextFactoryExtender2.java b/jsf-api/src/test/java/javax/faces/mock/MockFacesContextFactoryExtender2.java
deleted file mode 100644
index 235163e..0000000
--- a/jsf-api/src/test/java/javax/faces/mock/MockFacesContextFactoryExtender2.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.mock;
-
-import com.sun.faces.mock.MockFacesContextFactory;
-import javax.faces.FactoryFinder;
-import javax.faces.context.FacesContextFactory;
-
-public class MockFacesContextFactoryExtender2 extends MockFacesContextFactory {
-    public MockFacesContextFactoryExtender2() {}
-    public MockFacesContextFactoryExtender2(FacesContextFactory oldImpl) {
-	System.setProperty(FactoryFinder.FACES_CONTEXT_FACTORY, 
-			   this.getClass().getName());
-	System.setProperty("oldImpl", oldImpl.getClass().getName());
-    }
-}
-
diff --git a/jsf-api/src/test/java/javax/faces/model/ArrayDataModelTestCase.java b/jsf-api/src/test/java/javax/faces/model/ArrayDataModelTestCase.java
deleted file mode 100644
index e83b196..0000000
--- a/jsf-api/src/test/java/javax/faces/model/ArrayDataModelTestCase.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link ArrayDataModel}.</p>
- */
-
-public class ArrayDataModelTestCase extends DataModelTestCaseBase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ArrayDataModelTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-
-        beans = new TestBean[5];
-        for (int i = 0; i < beans.length; i++) {
-            beans[i] = new TestBean();
-        }
-        configure();
-        model = new ArrayDataModel<TestBean>(beans);
-        super.setUp();
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(ArrayDataModelTestCase.class));
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/model/DataModelTestCaseBase.java b/jsf-api/src/test/java/javax/faces/model/DataModelTestCaseBase.java
deleted file mode 100644
index 399394f..0000000
--- a/jsf-api/src/test/java/javax/faces/model/DataModelTestCaseBase.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.lang.reflect.Method;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Abstract base class for {@link DataModel} tests.</p>
- */
-
-public abstract class DataModelTestCaseBase extends TestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public DataModelTestCaseBase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The array of beans we will be wrapping (must be initialized before setUp)
-    protected TestBean beans[] = new TestBean[0];
-
-
-    // The DataModel we are testing
-    protected DataModel model = null;
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Configure the properties of the beans we will be wrapping
-    protected void configure() {
-
-        for (int i = 0; i < beans.length; i++) {
-            TestBean bean = beans[i];
-            bean.setBooleanProperty((i % 2) == 0);
-            bean.setBooleanSecond(!bean.getBooleanProperty());
-            bean.setByteProperty((byte) i);
-            bean.setDoubleProperty(((double) i) * 100.0);
-            bean.setFloatProperty(((float) i) * ((float) 10.0));
-            bean.setIntProperty(1000 * i);
-            bean.setLongProperty((long) 10000 * (long) i);
-            bean.setStringProperty("This is string " + i);
-        }
-
-    }
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-
-        // Subclasses must create "beans", call "configure()", create "model"
-        super.setUp();
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(DataModelTestCaseBase.class));
-
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() throws Exception {
-
-        super.tearDown();
-        beans = null;
-        model = null;
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test invalid arguments to listener methods
-    public void testInvalidListeners() throws Exception {
-
-        try {
-            model.addDataModelListener(null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            // Expected result
-        }
-
-        try {
-            model.removeDataModelListener(null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            // Expected result
-        }
-
-
-    }
-
-
-    // Test positioning to all rows in ascending order
-    public void testPositionAscending() throws Exception {
-
-        StringBuffer sb = new StringBuffer();
-        model.setRowIndex(-1);
-        model.addDataModelListener(new TestListener());
-        TestListener.trace(null);
-
-        int n = model.getRowCount();
-        for (int i = 0; i < n; i++) {
-            checkRow(i);
-            sb.append("/").append(i);
-        }
-        assertEquals(sb.toString(), TestListener.trace());
-
-    }
-
-
-    // Test positioning to all rows in descending order
-    public void testPositionDescending() throws Exception {
-
-        StringBuffer sb = new StringBuffer();
-        model.setRowIndex(-1);
-        model.addDataModelListener(new TestListener());
-        TestListener.trace(null);
-
-        int n = model.getRowCount();
-        for (int i = (n - 1); i >= 0; i--) {
-            checkRow(i);
-            sb.append("/").append(i);
-        }
-        assertEquals(sb.toString(), TestListener.trace());
-
-    }
-
-
-    // Test a pristine DataModel instance
-    public void testPristine() throws Exception {
-
-        // Unopened instance
-        assertNotNull("beans exists", beans);
-        assertNotNull("model exists", model);
-
-        // Correct row count
-        if (model instanceof ResultSetDataModel) {
-            assertEquals("correct row count", -1, model.getRowCount());
-        } else {
-            assertEquals("correct row count", beans.length,
-                         model.getRowCount());
-        }
-
-        // Correct row index
-        assertEquals("correct row index", 0, model.getRowIndex());
-
-    }
-
-
-    // Test removing listener
-    public void testRemoveListener() throws Exception {
-
-        TestListener listener = new TestListener();
-        TestListener.trace(null);
-        model.addDataModelListener(listener);
-        model.setRowIndex(-1);
-        model.setRowIndex(0);
-        model.setRowIndex(0); // No movement so no event
-        model.setRowIndex(-1);
-        model.removeDataModelListener(listener);
-        model.setRowIndex(0);
-        assertEquals("/-1/0/-1", TestListener.trace());
-
-    }
-
-
-    // Test resetting the wrapped data (should trigger an event
-    public void testReset() throws Exception {
-
-        TestListener listener = new TestListener();
-        TestListener.trace(null);
-        model.addDataModelListener(listener);
-
-        assertEquals(0, model.getRowIndex());
-        model.setWrappedData(model.getWrappedData());
-        assertEquals("/0", TestListener.trace());
-
-    }
-
-
-    // Test row available manipulations
-    public void testRowAvailable() throws Exception {
-
-        // Position to the "no current row" position
-        model.setRowIndex(-1);
-        assertTrue(!model.isRowAvailable());
-
-        // Position to an arbitrarily high row number
-        model.setRowIndex(beans.length);
-        assertTrue(!model.isRowAvailable());
-
-        // Position to a known good row number
-        model.setRowIndex(0);
-        assertTrue(model.isRowAvailable());
-
-    }
-
-
-    // Test the ability to update through the Map returned by getRowData()
-    public void testRowData() throws Exception {
-
-        // Retrieve the row data for row zero
-        model.setRowIndex(0);
-        Object data = model.getRowData();
-        assertNotNull(data);
-
-        // Modify several property values
-        TestBean bean = beans[0];
-        bean.setBooleanProperty(!bean.getBooleanProperty());
-        if (data instanceof Map) {
-            ((Map) data).put("booleanProperty",
-                             bean.getBooleanProperty() ?
-                             Boolean.TRUE : Boolean.FALSE);
-        } else {
-            Method m = data.getClass().getMethod("setBooleanProperty", Boolean.TYPE);
-            m.invoke(data, bean.getBooleanProperty() ? Boolean.TRUE : Boolean.FALSE);
-        }
-        bean.setIntProperty(bean.getIntProperty() + 5);
-        if (data instanceof Map) {
-            ((Map) data).put("intProperty",
-                             bean.getIntProperty());
-        } else {
-            Method m = data.getClass().getMethod("setIntProperty", Integer.TYPE);
-            m.invoke(data, bean.getIntProperty());
-        }
-        bean.setStringProperty(bean.getStringProperty() + "XYZ");
-        if (data instanceof Map) {
-            ((Map) data).put("stringProperty",
-                             bean.getStringProperty() + "XYZ");
-        } else {
-            Method m = data.getClass().getMethod("setStringProperty", String.class);
-            m.invoke(data, bean.getStringProperty());
-        }
-
-        // Ensure that all the modifications flowed through to beans[0]
-        assertEquals(bean.getBooleanProperty(),
-                     beans[0].getBooleanProperty());
-        assertEquals(bean.isBooleanSecond(),
-                     beans[0].isBooleanSecond());
-        assertEquals(bean.getByteProperty(),
-                     beans[0].getByteProperty());
-        assertEquals(bean.getDoubleProperty(),
-                     beans[0].getDoubleProperty(), 0.005);
-        assertEquals(bean.getFloatProperty(),
-                     beans[0].getFloatProperty(), (float) 0.005);
-        assertEquals(bean.getIntProperty(),
-                     beans[0].getIntProperty());
-        assertEquals(bean.getLongProperty(),
-                     beans[0].getLongProperty());
-        assertEquals(bean.getStringProperty(),
-                     beans[0].getStringProperty());
-
-    }
-
-
-    // Test row index manipulations
-    public void testRowIndex() throws Exception {
-
-        assertEquals("correct row index", 0, model.getRowIndex());
-
-        // Positive setRowIndex() tests
-        model.setRowIndex(0);
-        model.setRowIndex(-1);
-
-        // Negative setRowIndex() tests
-        try {
-            model.setRowIndex(-2);
-            fail("Should have thrown IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            // Expected result
-        }
-
-    }
-
-    public void testIterator() {
-
-        Iterator iterator = model.iterator();
-        if (!(model instanceof ScalarDataModel)) {
-            for (int i = 0; i < 5; i++) {
-                System.out.println("Index: " + i);
-                assertTrue(iterator.hasNext());
-                assertNotNull(iterator.next());
-            }
-        } else {
-            assertTrue(iterator.hasNext());
-            assertNotNull(iterator.next());
-        }
-
-        assertTrue(!iterator.hasNext());
-        try {
-            iterator.next();
-            assertTrue(false);
-        } catch (NoSuchElementException nsee) {
-            // expected
-        }
-
-    }
-
-
-    // Test resetting the wrapped data to null
-    public void testWrapped() throws Exception {
-
-        model.setWrappedData(null);
-        assertTrue(!model.isRowAvailable());
-        assertEquals(-1, model.getRowCount());
-        assertNull(model.getRowData());
-        assertEquals(-1, model.getRowIndex());
-        assertNull(model.getWrappedData());
-
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected TestBean data() throws Exception {
-
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof TestBean);
-        return ((TestBean) data);
-
-    }
-
-
-    protected void checkRow(int i) throws Exception {
-
-        model.setRowIndex(i);
-        String prompt = "Row " + i + " property ";
-        TestBean bean = data();
-        assertNotNull("Row " + i + " data", bean);
-        assertEquals(prompt + "booleanProperty",
-                     beans[i].getBooleanProperty(),
-                     bean.getBooleanProperty());
-        assertEquals(prompt + "booleanSecond",
-                     beans[i].isBooleanSecond(),
-                     bean.isBooleanSecond());
-        assertEquals(prompt + "byteProperty",
-                     beans[i].getByteProperty(),
-                     bean.getByteProperty());
-        assertEquals(prompt + "doubleProperty",
-                     "" + beans[i].getDoubleProperty(),
-                     "" + bean.getDoubleProperty());
-        assertEquals(prompt + "floatProperty",
-                     "" + beans[i].getFloatProperty(),
-                     "" + bean.getFloatProperty());
-        assertEquals(prompt + "intProperty",
-                     beans[i].getIntProperty(),
-                     bean.getIntProperty());
-        assertEquals(prompt + "longProperty",
-                     beans[i].getLongProperty(),
-                     bean.getLongProperty());
-        assertEquals(prompt + "nullProperty",
-                     beans[i].getNullProperty(),
-                     bean.getNullProperty());
-        assertEquals(prompt + "readOnlyProperty",
-                     beans[i].getReadOnlyProperty(),
-                     bean.getReadOnlyProperty());
-        assertEquals(prompt + "shortProperty",
-                     beans[i].getShortProperty(),
-                     bean.getShortProperty());
-        assertEquals(prompt + "stringProperty",
-                     beans[i].getStringProperty(),
-                     bean.getStringProperty());
-        assertEquals(prompt + "writeOnlyProperty",
-                     beans[i].getWriteOnlyPropertyValue(),
-                     bean.getWriteOnlyPropertyValue());
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/model/ListDataModelTestCase.java b/jsf-api/src/test/java/javax/faces/model/ListDataModelTestCase.java
deleted file mode 100644
index 9269891..0000000
--- a/jsf-api/src/test/java/javax/faces/model/ListDataModelTestCase.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link ListDataModel}.</p>
- */
-
-public class ListDataModelTestCase extends DataModelTestCaseBase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ListDataModelTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-
-        List<TestBean> list = new ArrayList<TestBean>();
-        for (int i = 0; i < 5; i++) {
-            list.add(new TestBean());
-        }
-        beans = list.toArray(new TestBean[5]);
-        configure();
-        model = new ListDataModel<TestBean>(list);
-        super.setUp();
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(ListDataModelTestCase.class));
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/model/ResultDataModelTestCase.java b/jsf-api/src/test/java/javax/faces/model/ResultDataModelTestCase.java
deleted file mode 100644
index bdbb243..0000000
--- a/jsf-api/src/test/java/javax/faces/model/ResultDataModelTestCase.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.Map;
-import javax.faces.context.FacesContext;
-import com.sun.faces.mock.MockResult;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link ResultDataModel}.</p>
- */
-
-public class ResultDataModelTestCase extends DataModelTestCaseBase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ResultDataModelTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The Result passed to our ResultDataModel
-    protected MockResult result = null;
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-
-        beans = new TestBean[5];
-        for (int i = 0; i < beans.length; i++) {
-            beans[i] = new TestBean();
-        }
-        configure();
-        result = new MockResult(beans);
-        model = new ResultDataModel(result);
-        super.setUp();
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(ResultDataModelTestCase.class));
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected TestBean data() throws Exception {
-
-        Object data = model.getRowData();
-        assertTrue(data instanceof Map);
-        TestBean bean = new TestBean();
-        Map map = (Map) data;
-
-        bean.setBooleanProperty
-            (((Boolean) map.get("booleanProperty")).booleanValue());
-        bean.setBooleanSecond
-            (((Boolean) map.get("booleanSecond")).booleanValue());
-        bean.setByteProperty
-            (((Byte) map.get("byteProperty")).byteValue());
-        bean.setDoubleProperty
-            (((Double) map.get("doubleProperty")).doubleValue());
-        bean.setFloatProperty
-            (((Float) map.get("floatProperty")).floatValue());
-        bean.setIntProperty
-            (((Integer) map.get("intProperty")).intValue());
-        bean.setLongProperty
-            (((Long) map.get("longProperty")).longValue());
-        bean.setNullProperty((String) map.get("nullProperty"));
-        bean.setShortProperty
-            (((Short) map.get("shortProperty")).shortValue());
-        bean.setStringProperty((String) map.get("stringProperty"));
-        bean.setWriteOnlyProperty
-            ((String) map.get("writeOnlyPropertyValue"));
-
-        return (bean);
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/model/ResultSetDataModelTestCase.java b/jsf-api/src/test/java/javax/faces/model/ResultSetDataModelTestCase.java
deleted file mode 100644
index 76bcfd4..0000000
--- a/jsf-api/src/test/java/javax/faces/model/ResultSetDataModelTestCase.java
+++ /dev/null
@@ -1,669 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.faces.context.FacesContext;
-import com.sun.faces.mock.MockResultSet;
-import com.sun.faces.mock.MockResultSetMetaData;
-import javax.faces.model.DataModel;
-import javax.faces.model.DataModelEvent;
-import javax.faces.model.DataModelListener;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link ArrayDataModel}.</p>
- */
-
-public class ResultSetDataModelTestCase extends DataModelTestCaseBase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ResultSetDataModelTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // The ResultSet passed to our ResultSetDataModel
-    protected MockResultSet result = null;
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-
-        beans = new TestBean[5];
-        for (int i = 0; i < beans.length; i++) {
-            beans[i] = new TestBean();
-        }
-        configure();
-        result = new MockResultSet(beans);
-        model = new ResultSetDataModel(result);
-        super.setUp();
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(ResultSetDataModelTestCase.class));
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test ((Map) getRowData()).containsKey()
-    public void testRowDataContainsKey() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-
-        // Test exact match on column names
-        assertTrue(map.containsKey("booleanProperty"));
-        assertTrue(map.containsKey("booleanSecond"));
-        assertTrue(map.containsKey("byteProperty"));
-        assertTrue(map.containsKey("doubleProperty"));
-        assertTrue(map.containsKey("floatProperty"));
-        assertTrue(map.containsKey("intProperty"));
-        assertTrue(map.containsKey("longProperty"));
-        assertTrue(map.containsKey("stringProperty"));
-
-        // Test inexact match on column names
-        assertTrue(map.containsKey("booleanPROPERTY"));
-        assertTrue(map.containsKey("booleanSECOND"));
-        assertTrue(map.containsKey("bytePROPERTY"));
-        assertTrue(map.containsKey("doublePROPERTY"));
-        assertTrue(map.containsKey("floatPROPERTY"));
-        assertTrue(map.containsKey("intPROPERTY"));
-        assertTrue(map.containsKey("longPROPERTY"));
-        assertTrue(map.containsKey("stringPROPERTY"));
-
-        // Test false return on invalid column names
-        assertTrue(!map.containsKey("foo"));
-        assertTrue(!map.containsKey("FOO"));
-        assertTrue(!map.containsKey("bar"));
-        assertTrue(!map.containsKey("BAR"));
-
-    }
-
-
-    // Test ((Map) getRowData()).containsValue()
-    public void testRowDataContainsValue() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-
-        // Test positive results
-        assertTrue(map.containsValue(Boolean.TRUE));
-        assertTrue(map.containsValue(Boolean.FALSE));
-        assertTrue(map.containsValue(new Byte((byte) 1)));
-        assertTrue(map.containsValue(new Double((double) 100.0)));
-        assertTrue(map.containsValue(new Float((float) 10.0)));
-        assertTrue(map.containsValue(new Integer((int) 1000)));
-        assertTrue(map.containsValue(new Long((long) 10000)));
-        assertTrue(map.containsValue("This is string 1"));
-
-        // Test negative results
-        assertTrue(!map.containsValue("foo"));
-        assertTrue(!map.containsValue(new Integer(654321)));
-
-    }
-
-
-    // Test ((Map) getRowData()).entrySet()
-    public void testRowDataEntrySet() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-        Set set = map.entrySet();
-
-        // Test exact match postive results
-        assertTrue(set.contains
-                   (new TestEntry("booleanProperty",
-                                  Boolean.FALSE)));
-        assertTrue(set.contains
-                   (new TestEntry("booleanSecond",
-                                  Boolean.TRUE)));
-        assertTrue(set.contains
-                   (new TestEntry("byteProperty",
-                                  new Byte((byte) 1))));
-        assertTrue(set.contains
-                   (new TestEntry("doubleProperty",
-                                  new Double((double) 100.0))));
-        assertTrue(set.contains
-                   (new TestEntry("floatProperty",
-                                  new Float((float) 10.0))));
-        assertTrue(set.contains
-                   (new TestEntry("intProperty",
-                                  new Integer((int) 1000))));
-        assertTrue(set.contains
-                   (new TestEntry("longProperty",
-                                  new Long((long) 10000))));
-        assertTrue(set.contains
-                   (new TestEntry("stringProperty", "This is string 1")));
-
-        // Test exact match postive results
-        assertTrue(set.contains
-                   (new TestEntry("booleanPROPERTY",
-                                  Boolean.FALSE)));
-        assertTrue(set.contains
-                   (new TestEntry("booleanSECOND",
-                                  Boolean.TRUE)));
-        assertTrue(set.contains
-                   (new TestEntry("bytePROPERTY",
-                                  new Byte((byte) 1))));
-        assertTrue(set.contains
-                   (new TestEntry("doublePROPERTY",
-                                  new Double((double) 100.0))));
-        assertTrue(set.contains
-                   (new TestEntry("floatPROPERTY",
-                                  new Float((float) 10.0))));
-        assertTrue(set.contains
-                   (new TestEntry("intPROPERTY",
-                                  new Integer((int) 1000))));
-        assertTrue(set.contains
-                   (new TestEntry("longPROPERTY",
-                                  new Long((long) 10000))));
-        assertTrue(set.contains
-                   (new TestEntry("stringPROPERTY", "This is string 1")));
-
-        // Test negative results
-        assertTrue(!set.contains(new TestEntry("foo", "bar")));
-        assertTrue(!set.contains(new TestEntry("FOO", "bar")));
-        assertTrue(!set.contains(new TestEntry("baz", "bop")));
-        assertTrue(!set.contains(new TestEntry("BAZ", "bop")));
-
-        // Test other methods
-        assertTrue(!set.isEmpty());
-
-        // Test updating through the entry set
-        Iterator entries = set.iterator();
-        while (entries.hasNext()) {
-            Map.Entry entry = (Map.Entry) entries.next();
-            if ("stringProperty".equalsIgnoreCase((String) entry.getKey())) {
-                entry.setValue("This is string 1 modified");
-            }
-        }
-        assertEquals("This is string 1 modified",
-                     beans[1].getStringProperty());
-        assertEquals("This is string 1 modified",
-                     (String) map.get("stringProperty"));
-        assertEquals("This is string 1 modified",
-                     (String) map.get("stringPROPERTY"));
-        result.absolute(2); // ResultSet indexing is one-relative
-        assertEquals("This is string 1 modified",
-                     (String) result.getObject("stringProperty"));
-
-
-    }
-
-
-    // Test ((Map) getRowData()).get()
-    public void testRowDataGet() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-
-        // Test exact match on column names
-        assertEquals(Boolean.FALSE,
-                     (Boolean) map.get("booleanProperty"));
-        assertEquals(Boolean.TRUE,
-                     (Boolean) map.get("booleanSecond"));
-        assertEquals(new Byte((byte) 1),
-                     (Byte) map.get("byteProperty"));
-        assertEquals(new Double((double) 100.0),
-                     (Double) map.get("doubleProperty"));
-        assertEquals(new Float((float) 10.0),
-                     (Float) map.get("floatProperty"));
-        assertEquals(new Integer((int) 1000),
-                     (Integer) map.get("intProperty"));
-        assertEquals(new Long((long) 10000),
-                     (Long) map.get("longProperty"));
-        assertEquals("This is string 1",
-                     (String) map.get("stringProperty"));
-
-        // Test inexact match on column names
-        assertEquals(Boolean.FALSE,
-                     (Boolean) map.get("booleanPROPERTY"));
-        assertEquals(Boolean.TRUE,
-                     (Boolean) map.get("booleanSECOND"));
-        assertEquals(new Byte((byte) 1),
-                     (Byte) map.get("bytePROPERTY"));
-        assertEquals(new Double((double) 100.0),
-                     (Double) map.get("doublePROPERTY"));
-        assertEquals(new Float((float) 10.0),
-                     (Float) map.get("floatPROPERTY"));
-        assertEquals(new Integer((int) 1000),
-                     (Integer) map.get("intPROPERTY"));
-        assertEquals(new Long((long) 10000),
-                     (Long) map.get("longPROPERTY"));
-        assertEquals("This is string 1",
-                     (String) map.get("stringPROPERTY"));
-
-        // Test null return on non-existent column names
-        assertNull(map.get("foo"));
-        assertNull(map.get("FOO"));
-        assertNull(map.get("bar"));
-        assertNull(map.get("bar"));
-
-    }
-
-
-    // Test ((Map) getRowData()).keySet()
-    public void testRowDataKeySet() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-        Set set = map.keySet();
-
-        // Test exact match postive results
-        assertTrue(set.contains("booleanProperty"));
-        assertTrue(set.contains("booleanSecond"));
-        assertTrue(set.contains("byteProperty"));
-        assertTrue(set.contains("doubleProperty"));
-        assertTrue(set.contains("floatProperty"));
-        assertTrue(set.contains("intProperty"));
-        assertTrue(set.contains("longProperty"));
-        assertTrue(set.contains("stringProperty"));
-
-        // Test inexact match positive results
-        assertTrue(set.contains("booleanPROPERTY"));
-        assertTrue(set.contains("booleanSECOND"));
-        assertTrue(set.contains("bytePROPERTY"));
-        assertTrue(set.contains("doublePROPERTY"));
-        assertTrue(set.contains("floatPROPERTY"));
-        assertTrue(set.contains("intPROPERTY"));
-        assertTrue(set.contains("longPROPERTY"));
-        assertTrue(set.contains("stringPROPERTY"));
-
-        // Test negative results
-        assertTrue(!set.contains("foo"));
-        assertTrue(!set.contains("FOO"));
-        assertTrue(!set.contains("bar"));
-        assertTrue(!set.contains("BAR"));
-
-        // Test other methods
-        assertTrue(!set.isEmpty());
-
-    }
-
-
-    // Test ((Map) getRowData()).put()
-    public void testRowDataPut() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-
-    }
-
-
-    // Test unsupported operations on ((Map) getRowData())
-    public void testRowDataUnsupported() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-
-        // clear()
-        try {
-            map.clear();
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-        // entrySet()
-        Set entrySet = map.entrySet();
-        try {
-            entrySet.add(new TestEntry("foo", "bar"));
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        List mapEntries = new ArrayList();
-        mapEntries.add(new TestEntry("foo", "bar"));
-        mapEntries.add(new TestEntry("baz", "bop"));
-        try {
-            entrySet.addAll(mapEntries);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            entrySet.clear();
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            Iterator iterator = entrySet.iterator();
-            iterator.next();
-            iterator.remove();
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            entrySet.remove(new TestEntry("foo", "bar"));
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            entrySet.removeAll(mapEntries);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            entrySet.retainAll(mapEntries);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-        // keySet()
-        Set keySet = map.keySet();
-        try {
-            keySet.add("foo");
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        List mapKeys = new ArrayList();
-        mapKeys.add("foo");
-        mapKeys.add("bar");
-        try {
-            keySet.addAll(mapKeys);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            keySet.clear();
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            Iterator iterator = keySet.iterator();
-            iterator.next();
-            iterator.remove();
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            keySet.remove(new TestEntry("foo", "bar"));
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            keySet.removeAll(mapKeys);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            keySet.retainAll(mapKeys);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-        // remove()
-        try {
-            map.remove("foo");
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-        // values()
-        Collection values = map.values();
-        try {
-            values.add("foo");
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        List list = new ArrayList();
-        list.add("foo");
-        list.add("bar");
-        try {
-            values.addAll(list);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            values.clear();
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            Iterator iterator = values.iterator();
-            iterator.next();
-            iterator.remove();
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            values.remove("foo");
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            values.removeAll(list);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-        try {
-            values.retainAll(list);
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            ; // Expected result
-        }
-
-    }
-
-
-    // Test ((Map) getRowData()).values()
-    public void testRowDataValues() throws Exception {
-
-        // Position to row 1 and retrieve the corresponding Map
-        model.setRowIndex(1);
-        assertTrue(model.isRowAvailable());
-        Object data = model.getRowData();
-        assertNotNull(data);
-        assertTrue(data instanceof Map);
-        Map map = (Map) data;
-        Collection values = map.values();
-
-        // Test positive results
-        assertTrue(values.contains(Boolean.TRUE));
-        assertTrue(values.contains(Boolean.FALSE));
-        assertTrue(values.contains(new Byte((byte) 1)));
-        assertTrue(values.contains(new Double((double) 100.0)));
-        assertTrue(values.contains(new Float((float) 10.0)));
-        assertTrue(values.contains(new Integer((int) 1000)));
-        assertTrue(values.contains(new Long((long) 10000)));
-        assertTrue(values.contains("This is string 1"));
-
-        // Test negative results
-        assertTrue(!values.contains("foo"));
-        assertTrue(!values.contains(new Integer(654321)));
-
-        // Test other methods
-        assertTrue(!values.isEmpty());
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected TestBean data() throws Exception {
-
-        Object data = model.getRowData();
-        assertTrue(data instanceof Map);
-        TestBean bean = new TestBean();
-        Map map = (Map) data;
-
-        bean.setBooleanProperty
-            (((Boolean) map.get("booleanProperty")).booleanValue());
-        bean.setBooleanSecond
-            (((Boolean) map.get("booleanSecond")).booleanValue());
-        bean.setByteProperty
-            (((Byte) map.get("byteProperty")).byteValue());
-        bean.setDoubleProperty
-            (((Double) map.get("doubleProperty")).doubleValue());
-        bean.setFloatProperty
-            (((Float) map.get("floatProperty")).floatValue());
-        bean.setIntProperty
-            (((Integer) map.get("intProperty")).intValue());
-        bean.setLongProperty
-            (((Long) map.get("longProperty")).longValue());
-        bean.setNullProperty((String) map.get("nullProperty"));
-        bean.setShortProperty
-            (((Short) map.get("shortProperty")).shortValue());
-        bean.setStringProperty((String) map.get("stringProperty"));
-        bean.setWriteOnlyProperty
-            ((String) map.get("writeOnlyPropertyValue"));
-
-        return (bean);
-
-    }
-
-
-    class TestEntry implements Map.Entry {
-
-        public TestEntry(Object key, Object value) {
-            this.key = key;
-            this.value = value;
-        }
-
-        private Object key;
-        private Object value;
-
-        public Object getKey() { return key; }
-        public Object getValue() { return value; }
-        public Object setValue(Object value) {
-            Object previous = this.value;
-            this.value = value;
-            return previous;
-        }
-
-        public boolean equals(Object o) {
-            if (!(o instanceof Map.Entry)) {
-                return (false);
-            }
-            Map.Entry e = (Map.Entry) o;
-            return (key == null ?
-                    e.getKey() == null : key.equals(e.getKey())) &&
-                (value == null ?
-                 e.getValue() == null : value.equals(e.getValue()));
-        }
-        
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/model/ScalarDataModelTestCase.java b/jsf-api/src/test/java/javax/faces/model/ScalarDataModelTestCase.java
deleted file mode 100644
index 58300b2..0000000
--- a/jsf-api/src/test/java/javax/faces/model/ScalarDataModelTestCase.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for {@link ScalarDataModel}.</p>
- */
-
-public class ScalarDataModelTestCase extends DataModelTestCaseBase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ScalarDataModelTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-
-        beans = new TestBean[1];
-        beans[0] = new TestBean();
-        configure();
-        model = new ScalarDataModel<TestBean>(beans[0]);
-        super.setUp();
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(ScalarDataModelTestCase.class));
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/model/TestBean.java b/jsf-api/src/test/java/javax/faces/model/TestBean.java
deleted file mode 100644
index 5603089..0000000
--- a/jsf-api/src/test/java/javax/faces/model/TestBean.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-/**
- * <p>JavaBean for data model tests.</p>
- */
-
-public class TestBean extends com.sun.faces.mock.model.TestBean {
-
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/model/TestListener.java b/jsf-api/src/test/java/javax/faces/model/TestListener.java
deleted file mode 100644
index abcff09..0000000
--- a/jsf-api/src/test/java/javax/faces/model/TestListener.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.model;
-
-
-/**
- * <p>Test implementation of DataModelListener.</p>
- */
-
-public class TestListener implements DataModelListener {
-
-
-    // ----------------------------------------------- DataModelListener Methods
-
-
-    public void rowSelected(DataModelEvent event) {
-        Object rowData = event.getRowData();
-        int rowIndex = event.getRowIndex();
-        trace("" + rowIndex);
-        if ((rowIndex >= 0) && (rowData == null)) {
-            throw new IllegalArgumentException("rowIndex=" + rowIndex +
-                                               " but rowData is null");
-        } else if ((rowIndex == -1) && (rowData != null)) {
-            throw new IllegalArgumentException("rowIndex=" + rowIndex +
-                                               " but rowData is not null");
-        } else if (rowIndex < -1) {
-            throw new IllegalArgumentException("rowIndex=" + rowIndex);
-        }
-            
-    }
-
-
-    // ---------------------------------------------------------- Static Methods
-
-
-    private static StringBuffer trace = new StringBuffer();
-
-
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-    public static void trace(String value) {
-        if (value == null) {
-            trace = new StringBuffer();
-        } else {
-            trace.append("/");
-            trace.append(value);
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/validator/DoubleRangeValidatorTestCase.java b/jsf-api/src/test/java/javax/faces/validator/DoubleRangeValidatorTestCase.java
deleted file mode 100644
index f6bea20..0000000
--- a/jsf-api/src/test/java/javax/faces/validator/DoubleRangeValidatorTestCase.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import java.util.Locale;
-
-import javax.faces.component.UIInput;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Unit tests for {@link DoubleRangeValidator}.</p>
- */
-
-public class DoubleRangeValidatorTestCase extends ValidatorTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public DoubleRangeValidatorTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(DoubleRangeValidatorTestCase.class));
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testLocaleHonored() {
-	DoubleRangeValidator validator = new DoubleRangeValidator();
-	validator.setMinimum(10.1);
-	validator.setMaximum(20.1);
-	boolean exceptionThrown = false;
-	UIInput component = new UIInput();
-	String message;
-	Locale.setDefault(Locale.US);
-	facesContext.getViewRoot().setLocale(Locale.US);
-	
-	try {
-	    validator.validate(facesContext, component, "5.1");
-	    fail("Exception not thrown");
-	}
-	catch (ValidatorException e) {
-	    exceptionThrown = true;
-	    message = e.getMessage();
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("10.1"));
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("20.1"));
-	}
-	assertTrue(exceptionThrown);
-
-	exceptionThrown = false;
-	Locale.setDefault(Locale.GERMAN);
-	facesContext.getViewRoot().setLocale(Locale.GERMAN);
-
-	try {
-	    validator.validate(facesContext, component, "5");
-	    fail("Exception not thrown");
-	}
-	catch (ValidatorException e) {
-	    exceptionThrown = true;
-	    message = e.getMessage();
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("10,1"));
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("20,1"));
-	}
-	assertTrue(exceptionThrown);
-
-    }
-
-    public void testHashCode() {
-        DoubleRangeValidator validator1 = new DoubleRangeValidator();
-        DoubleRangeValidator validator2 = new DoubleRangeValidator();
-
-        validator1.setMinimum(10.0d);
-        validator1.setMaximum(15.1d);
-        validator2.setMinimum(10.0d);
-        validator2.setMaximum(15.1d);
-
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-
-        validator2.setMaximum(15.2d);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-
-        validator1 = new DoubleRangeValidator();
-        validator2 = new DoubleRangeValidator();
-
-        validator1.setMinimum(10.0d);
-        validator2.setMinimum(10.0d);
-
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-
-        validator1.setMinimum(11.0d);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-
-        validator1.setMinimum(10.0d);
-        validator1.setMaximum(10.1d);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/validator/LengthValidatorTestCase.java b/jsf-api/src/test/java/javax/faces/validator/LengthValidatorTestCase.java
deleted file mode 100644
index 5e5de11..0000000
--- a/jsf-api/src/test/java/javax/faces/validator/LengthValidatorTestCase.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import java.util.Locale;
-
-import javax.faces.component.UIInput;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Unit tests for {@link LengthValidator}.</p>
- */
-
-public class LengthValidatorTestCase extends ValidatorTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public LengthValidatorTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(LengthValidatorTestCase.class));
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testLocaleHonored() {
-	LengthValidator validator = new LengthValidator();
-	validator.setMinimum(1000);
-	validator.setMaximum(2000);
-	boolean exceptionThrown = false;
-	UIInput component = new UIInput();
-	String message;
-	Locale.setDefault(Locale.US);
-	facesContext.getViewRoot().setLocale(Locale.US);
-	
-	try {
-	    validator.validate(facesContext, component, 
-			       "Not at all long enough");
-	    fail("Exception not thrown");
-	}
-	catch (ValidatorException e) {
-	    exceptionThrown = true;
-	    message = e.getMessage();
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("1,000"));
-	}
-	assertTrue(exceptionThrown);
-
-	exceptionThrown = false;
-	Locale.setDefault(Locale.GERMAN);
-	facesContext.getViewRoot().setLocale(Locale.GERMAN);
-
-	try {
-	    validator.validate(facesContext, component, 
-			       "Still not long enough");
-	    fail("Exception not thrown");
-	}
-	catch (ValidatorException e) {
-	    exceptionThrown = true;
-	    message = e.getMessage();
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("1.000"));
-	}
-	assertTrue(exceptionThrown);
-
-    }
-
-    public void testHashCode() {
-        LengthValidator validator1 = new LengthValidator();
-        LengthValidator validator2 = new LengthValidator();
-
-        validator1.setMinimum(10);
-        validator1.setMaximum(15);
-        validator2.setMinimum(10);
-        validator2.setMaximum(15);
-
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-
-        validator2.setMaximum(16);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-
-        validator1 = new LengthValidator();
-        validator2 = new LengthValidator();
-
-        validator1.setMinimum(10);
-        validator2.setMinimum(10);
-
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-
-        validator1.setMinimum(11);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-
-        validator1.setMinimum(10);
-        validator1.setMaximum(10);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/validator/LongRangeValidatorTestCase.java b/jsf-api/src/test/java/javax/faces/validator/LongRangeValidatorTestCase.java
deleted file mode 100644
index 8a25a1c..0000000
--- a/jsf-api/src/test/java/javax/faces/validator/LongRangeValidatorTestCase.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import java.util.Locale;
-
-import javax.faces.component.UIInput;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Unit tests for {@link LongRangeValidator}.</p>
- */
-
-public class LongRangeValidatorTestCase extends ValidatorTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public LongRangeValidatorTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(LongRangeValidatorTestCase.class));
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testLocaleHonored() {
-	LongRangeValidator validator = new LongRangeValidator();
-	validator.setMinimum(10100);
-	validator.setMaximum(20100);
-	boolean exceptionThrown = false;
-	UIInput component = new UIInput();
-	String message;
-	Locale.setDefault(Locale.US);
-	facesContext.getViewRoot().setLocale(Locale.US);
-	
-	try {
-	    validator.validate(facesContext, component, "5100");
-	    fail("Exception not thrown");
-	}
-	catch (ValidatorException e) {
-	    exceptionThrown = true;
-	    message = e.getMessage();
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("10,100"));
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("20,100"));
-	}
-	assertTrue(exceptionThrown);
-
-	exceptionThrown = false;
-	Locale.setDefault(Locale.GERMAN);
-	facesContext.getViewRoot().setLocale(Locale.GERMAN);
-
-	try {
-	    validator.validate(facesContext, component, "5100");
-	    fail("Exception not thrown");
-	}
-	catch (ValidatorException e) {
-	    exceptionThrown = true;
-	    message = e.getMessage();
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("10.100"));
-	    assertTrue("message: \"" + message + "\" missing localized chars.",
-		       -1 != message.indexOf("20.100"));
-	}
-	assertTrue(exceptionThrown);
-
-    }
-
-    public void testHashCode() {
-        LongRangeValidator validator1 = new LongRangeValidator();
-        LongRangeValidator validator2 = new LongRangeValidator();
-
-        validator1.setMinimum(10l);
-        validator1.setMaximum(15l);
-        validator2.setMinimum(10l);
-        validator2.setMaximum(15l);
-
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-
-        validator2.setMaximum(16l);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-
-        validator1 = new LongRangeValidator();
-        validator2 = new LongRangeValidator();
-
-        validator1.setMinimum(10l);
-        validator2.setMinimum(10l);
-
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-        assertTrue(validator1.hashCode() == validator2.hashCode());
-
-        validator1.setMinimum(11l);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-
-        validator1.setMinimum(10l);
-        validator1.setMaximum(11l);
-
-        assertTrue(validator1.hashCode() != validator2.hashCode());
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/validator/RegexValidatorTestCase.java b/jsf-api/src/test/java/javax/faces/validator/RegexValidatorTestCase.java
deleted file mode 100644
index 5bada19..0000000
--- a/jsf-api/src/test/java/javax/faces/validator/RegexValidatorTestCase.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import javax.faces.component.UIInput;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Unit tests for {@link RegexValidator}.</p>
- */
-
-public class RegexValidatorTestCase extends ValidatorTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public RegexValidatorTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(RegexValidatorTestCase.class));
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testPatternMatch() {
-        String patternStr = "t.*";
-        RegexValidator validator = new RegexValidator();
-        validator.setPattern(patternStr);
-        UIInput component = new UIInput();
-        String checkme = "test";
-        try {
-            validator.validate(facesContext, component, checkme);
-            assertTrue(true);
-        } catch (ValidatorException ve) {
-            fail("Exception thrown "+ve.getMessage());
-        }
-    }
-
-    public void testPatterMismatch() {
-        String patternStr = "t.*";
-        RegexValidator validator = new RegexValidator();
-        validator.setPattern(patternStr);
-        UIInput component = new UIInput();
-        String checkme = "jest";
-        try {
-            validator.validate(facesContext, component, checkme);
-            fail("Exception not thrown when tested "+checkme+" against "+patternStr);
-        } catch (ValidatorException ve) {
-            String detail = ve.getFacesMessage().getDetail();
-            System.out.println("Detail in test: "+detail);
-            assertTrue(detail.equalsIgnoreCase("Regex pattern of 't.*' not matched"));
-        }
-    }
-}
diff --git a/jsf-api/src/test/java/javax/faces/validator/ValidatorTestCase.java b/jsf-api/src/test/java/javax/faces/validator/ValidatorTestCase.java
deleted file mode 100644
index bb8e37f..0000000
--- a/jsf-api/src/test/java/javax/faces/validator/ValidatorTestCase.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.validator;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.FacesEvent;
-import com.sun.faces.mock.MockApplication;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockRenderKitFactory;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-import com.sun.faces.mock.MockValueBinding;
-import javax.faces.TestUtil;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.component.UIViewRoot;
-
-/**
- * <p>Base unit tests for all {@link Validator} implementations.</p>
- */
-
-public class ValidatorTestCase extends TestCase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // Mock object instances for our tests
-    protected MockApplication         application = null;
-    protected MockServletConfig       config = null;
-    protected MockExternalContext     externalContext = null;
-    protected MockFacesContext        facesContext = null;
-    protected MockLifecycle           lifecycle = null;
-    protected MockHttpServletRequest  request = null;
-    protected MockHttpServletResponse response = null;
-    protected MockServletContext      servletContext = null;
-    protected MockHttpSession         session = null;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ValidatorTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() throws Exception {
-
-        // Set up Servlet API Objects
-        servletContext = new MockServletContext();
-        servletContext.addInitParameter("appParamName", "appParamValue");
-        servletContext.setAttribute("appScopeName", "appScopeValue");
-        config = new MockServletConfig(servletContext);
-        session = new MockHttpSession();
-        session.setAttribute("sesScopeName", "sesScopeValue");
-        request = new MockHttpServletRequest(session);
-        request.setAttribute("reqScopeName", "reqScopeValue");
-        response = new MockHttpServletResponse();
-
-        // Set up Faces API Objects
-	FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
-				 "com.sun.faces.mock.MockApplicationFactory");
-	FactoryFinder.setFactory(FactoryFinder.RENDER_KIT_FACTORY,
-				 "com.sun.faces.mock.MockRenderKitFactory");
-
-        externalContext =
-            new MockExternalContext(servletContext, request, response);
-        lifecycle = new MockLifecycle();
-        facesContext = new MockFacesContext(externalContext, lifecycle);
-        ApplicationFactory applicationFactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        application = (MockApplication) applicationFactory.getApplication();
-        facesContext.setApplication(application);
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-	root.setViewId("/viewId");
-        facesContext.setViewRoot(root);
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = new MockRenderKit();
-        try {
-            renderKitFactory.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT,
-                                          renderKit);
-        } catch (IllegalArgumentException e) {
-            ;
-        }
-        super.setUp();
-
-    }
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-        return (new TestSuite(ValidatorTestCase.class));
-    }
-
-
-    // Tear down instance variables required by ths test case
-    public void tearDown() throws Exception {
-
-        super.tearDown();
-        application = null;
-        config = null;
-        externalContext = null;
-        facesContext = null;
-        lifecycle = null;
-        request = null;
-        response = null;
-        servletContext = null;
-        session = null;
-
-    }
-
-    public void testNoOp() {
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/AttributeTagTestCase.java b/jsf-api/src/test/java/javax/faces/webapp/AttributeTagTestCase.java
deleted file mode 100644
index 3ce00e0..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/AttributeTagTestCase.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.sun.faces.mock.MockApplication;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockJspWriter;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockPageContext;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockRenderKitFactory;
-import com.sun.faces.mock.MockServlet;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-
-
-/**
- * <p>Unit tests for <code>AttributeTag</code>.</p>
- */
-
-public class AttributeTagTestCase extends TagTestCaseBase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    protected UIComponentTag ctag = null; // Component tag
-    protected UIComponentTag rtag = null; // Root tag
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public AttributeTagTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up our root and component tags.
-     */
-    public void setUp() throws Exception {
-
-        super.setUp();
-
-        rtag = new TestTag("ROOT", "root") {
-                protected void setProperties(UIComponent component) {
-                }
-            };
-        rtag.setPageContext(this.pageContext);
-        ctag = new TestOutputTag();
-        ctag.setParent(this.rtag);
-        ctag.setPageContext(this.pageContext);
-
-        rtag.doStartTag();
-        ctag.doStartTag();
-
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-
-        return (new TestSuite(AttributeTagTestCase.class));
-
-    }
-
-
-    /**
-     * Clear our root and component tags.
-     */
-    public void tearDown() throws Exception {
-
-        ctag.doEndTag();
-        rtag.doEndTag();
-
-        ctag = null;
-        rtag = null;
-
-        super.tearDown();
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test literal name and literal value
-    public void testLiteralLiteral() throws Exception {
-
-        UIComponent component = ((UIComponentTag) ctag).getComponentInstance();
-        assertNotNull(component);
-        assertTrue(!component.getAttributes().containsKey("foo"));
-        AttributeTag tag = new AttributeTag();
-        tag.setName("foo");
-        tag.setValue("bar");
-        add(tag);
-        tag.doStartTag();
-        assertEquals("bar",
-                     (String) component.getAttributes().get("foo"));
-        tag.doEndTag();
-        
-    }
-
-    // Test literal name and expression value
-    public void testLiteralExpression() throws Exception {
-
-        UIComponent component = ((UIComponentTag) ctag).getComponentInstance();
-        assertNotNull(component);
-        assertTrue(!component.getAttributes().containsKey("foo"));
-        AttributeTag tag = new AttributeTag();
-        tag.setName("foo");
-        tag.setValue("#{barValue}");
-        add(tag);
-        request.setAttribute("barValue", "bar");
-        tag.doStartTag();
-        assertEquals("bar",
-                     (String) component.getAttributes().get("foo"));
-        tag.doEndTag();
-        
-    }
-
-
-    // Test expression name and literal value
-    public void testExpressionLiteral() throws Exception {
-
-        UIComponent component = ((UIComponentTag) ctag).getComponentInstance();
-        assertNotNull(component);
-        assertTrue(!component.getAttributes().containsKey("foo"));
-        AttributeTag tag = new AttributeTag();
-        tag.setName("#{fooValue}");
-        tag.setValue("bar");
-        add(tag);
-        request.setAttribute("fooValue", "foo");
-        tag.doStartTag();
-        assertEquals("bar",
-                     (String) component.getAttributes().get("foo"));
-        tag.doEndTag();
-        
-    }
-
-
-    // Test expression name and expression value
-    public void testExpressionExpression() throws Exception {
-
-        UIComponent component = ((UIComponentTag) ctag).getComponentInstance();
-        assertNotNull(component);
-        assertTrue(!component.getAttributes().containsKey("foo"));
-        AttributeTag tag = new AttributeTag();
-        tag.setName("#{fooValue}");
-        tag.setValue("#{barValue}");
-        add(tag);
-        request.setAttribute("fooValue", "foo");
-        request.setAttribute("barValue", "bar");
-        tag.doStartTag();
-        assertEquals("bar",
-                     (String) component.getAttributes().get("foo"));
-        tag.doEndTag();
-        
-    }
-
-
-    // Test pre-existing attribute
-    public void testPreExisting() throws Exception {
-
-        UIComponent component = ((UIComponentTag) ctag).getComponentInstance();
-        assertNotNull(component);
-        component.getAttributes().put("foo", "bap");
-        AttributeTag tag = new AttributeTag();
-        tag.setName("foo");
-        tag.setValue("bar");
-        add(tag);
-        tag.doStartTag();
-        assertEquals("bap",
-                     (String) component.getAttributes().get("foo"));
-        tag.doEndTag();
-        
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    // Add the specified AttributeTag to our component tag
-    protected void add(AttributeTag tag) {
-
-        tag.setParent(root);
-        tag.setPageContext(this.pageContext);
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigAttribute.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigAttribute.java
deleted file mode 100644
index 8e74e21..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigAttribute.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-/**
- * <p>Config Bean for an Attribute.</p>
- */
-public class ConfigAttribute extends ConfigFeature {
-
-    private String attributeClass;
-    public String getAttributeClass() {
-        return (this.attributeClass);
-    }
-    public void setAttributeClass(String attributeClass) {
-        this.attributeClass = attributeClass;
-    }
-
-    private String attributeName;
-    public String getAttributeName() {
-        return (this.attributeName);
-    }
-    public void setAttributeName(String attributeName) {
-        this.attributeName = attributeName;
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigBase.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigBase.java
deleted file mode 100644
index 42a4fd0..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigBase.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * <p>Base bean for parsing configuration information.</p>
- */
-public class ConfigBase {
-
-
-    // ---------------------------------------------------------- <application>
-
-
-    private String actionListener = null;
-    public String getActionListener() {
-        return (this.actionListener);
-    }
-    public void setActionListener(String actionListener) {
-        this.actionListener = actionListener;
-    }
-
-    private String navigationHandler = null;
-    public String getNavigationHandler() {
-        return (this.navigationHandler);
-    }
-    public void setNavigationHandler(String navigationHandler) {
-        this.navigationHandler = navigationHandler;
-    }
-
-    private String propertyResolver = null;
-    public String getPropertyResolver() {
-        return (this.propertyResolver);
-    }
-    public void setPropertyResolver(String propertyResolver) {
-        this.propertyResolver = propertyResolver;
-    }
-
-    private String variableResolver = null;
-    public String getVariableResolver() {
-        return (this.variableResolver);
-    }
-    public void setVariableResolver(String variableResolver) {
-        this.variableResolver = variableResolver;
-    }
-
-
-    // ------------------------------------------------------------ <component>
-
-
-    private Map components = null;
-    public void addComponent(ConfigComponent component) {
-        if (components == null) {
-            components = new HashMap();
-        }
-        components.put(component.getComponentType(), component);
-    }
-    public Map getComponents() {
-        if (components == null) {
-            return (Collections.EMPTY_MAP);
-        } else {
-            return (this.components);
-        }
-    }
-
-
-    // ------------------------------------------------------------ <converter>
-
-
-    private Map converters = null;
-    public void addConverter(ConfigConverter converter) {
-        if (converters == null) {
-            converters = new HashMap();
-        }
-        converters.put(converter.getConverterId(), converter);
-    }
-    public Map getConverters() {
-        if (converters == null) {
-            return (Collections.EMPTY_MAP);
-        } else {
-            return (this.converters);
-        }
-    }
-
-
-    // ------------------------------------------------------------ <validator>
-
-
-    private Map validators = null;
-    public void addValidator(ConfigValidator validator) {
-        if (validators == null) {
-            validators = new HashMap();
-        }
-        validators.put(validator.getValidatorId(), validator);
-    }
-    public Map getValidators() {
-        if (validators == null) {
-            return (Collections.EMPTY_MAP);
-        } else {
-            return (this.validators);
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigComponent.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigComponent.java
deleted file mode 100644
index f38f1eb..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigComponent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-/**
- * <p>Config Bean for an Component.</p>
- */
-public class ConfigComponent extends ConfigFeature {
-
-    private String componentClass;
-    public String getComponentClass() {
-        return (this.componentClass);
-    }
-    public void setComponentClass(String componentClass) {
-        this.componentClass = componentClass;
-    }
-
-    private String componentType;
-    public String getComponentType() {
-        return (this.componentType);
-    }
-    public void setComponentType(String componentType) {
-        this.componentType = componentType;
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigConverter.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigConverter.java
deleted file mode 100644
index 2085473..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigConverter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-/**
- * <p>Config Bean for a Converter.</p>
- */
-public class ConfigConverter extends ConfigFeature {
-
-    private String converterId;
-    public String getConverterId() {
-        return (this.converterId);
-    }
-    public void setConverterId(String converterId) {
-        this.converterId = converterId;
-    }
-
-    private String converterClass;
-    public String getConverterClass() {
-        return (this.converterClass);
-    }
-    public void setConverterClass(String converterClass) {
-        this.converterClass = converterClass;
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigFeature.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigFeature.java
deleted file mode 100644
index 568c58c..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigFeature.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * <p>Base bean for configuration beans that have common feature elements.</p>
- */
-public abstract class ConfigFeature {
-
-
-    private Map attributes = null;
-    public void addAttribute(ConfigAttribute attribute) {
-        if (attributes == null) {
-            attributes = new HashMap();
-        }
-        attributes.put(attribute.getAttributeName(), attribute);
-    }
-    public Map getAttributes() {
-        if (attributes == null) {
-            return (Collections.EMPTY_MAP);
-        } else {
-            return (attributes);
-        }
-    }
-
-
-    private String description;
-    public String getDescription() {
-        return (this.description);
-    }
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-
-    private String displayName;
-    public String getDisplayName() {
-        return (this.displayName);
-    }
-    public void setDisplayName(String displayName) {
-        this.displayName = displayName;
-    }
-
-
-    private String largeIcon;
-    public String getLargeIcon() {
-        return (this.largeIcon);
-    }
-    public void setLargeIcon(String largeIcon) {
-        this.largeIcon = largeIcon;
-    }
-
-
-    private Map properties = null;
-    public void addProperty(ConfigProperty property) {
-        if (properties == null) {
-            properties = new HashMap();
-        }
-        properties.put(property.getPropertyName(), property);
-    }
-    public Map getProperties() {
-        if (properties == null) {
-            return (Collections.EMPTY_MAP);
-        } else {
-            return (properties);
-        }
-    }
-
-
-    private String smallIcon;
-    public String getSmallIcon() {
-        return (this.smallIcon);
-    }
-    public void setSmallIcon(String smallIcon) {
-        this.smallIcon = smallIcon;
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigFileTestCase.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigFileTestCase.java
deleted file mode 100644
index a6dfae0..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigFileTestCase.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.commons.digester.Digester;
-
-import org.xml.sax.InputSource;
-import com.sun.faces.config.DigesterFactory;
-
-/**
- * <p>Unit tests for Configuration File processing.</p>
- */
-
-public class ConfigFileTestCase extends TestCase {
-
-
-    // The public identifier of our DTD
-    protected String CONFIG_DTD_PUBLIC_ID =
-        "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN";
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    /**
-     * The Digester instance we will use to parse configuration files.
-     */
-    protected Digester digester = null;
-
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ConfigFileTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // --------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-
-        digester = createDigester();
-        configureRules(digester);
-
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-
-        return (new TestSuite(ConfigFileTestCase.class));
-
-    }
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-
-        digester = null;
-
-    }
-
-
-    // ------------------------------------------------ Individual Test Methods
-
-
-    // Test parsing an empty configuration file
-    public void testEmpty() throws Exception {
-
-        ConfigBase base =
-            parseConfig(relativeURL("test/javax/faces/webapp/config-file-0.xml"));
-        assertNotNull(base);
-
-    }
-
-
-    // Test parsing a full configuration file
-    public void testFull() throws Exception {
-
-        // Retrieve entire configuration metadata instance
-        ConfigBase base =
-            parseConfig(relativeURL("test/javax/faces/webapp/config-file-1.xml"));
-        assertNotNull(base);
-
-        // <application>
-        assertEquals("com.mycompany.MyActionListener",
-                     base.getActionListener());
-        assertEquals("com.mycompany.MyNavigationHandler",
-                     base.getNavigationHandler());
-        assertEquals("com.mycompany.MyPropertyResolver",
-                     base.getPropertyResolver());
-        assertEquals("com.mycompany.MyVariableResolver",
-                     base.getVariableResolver());
-
-        // <component>
-        Map components = base.getComponents();
-        assertNotNull(components);
-        ConfigComponent ccomp1 = (ConfigComponent) components.get("Command");
-        assertNotNull(ccomp1);
-        assertEquals("User Interface Command Component",
-                     ccomp1.getDescription());
-        assertEquals("User Interface Command",
-                     ccomp1.getDisplayName());
-        assertEquals("Command",
-                     ccomp1.getComponentType());
-        assertEquals("javax.faces.component.UICommand",
-                     ccomp1.getComponentClass());
-        assertNull(ccomp1.getLargeIcon());
-        assertNull(ccomp1.getSmallIcon());
-        assertEquals(0, ccomp1.getAttributes().size());
-        assertEquals(0, ccomp1.getProperties().size());
-
-        // <converter>
-        Map converters = base.getConverters();
-        assertNotNull(converters);
-        ConfigConverter cc1 = (ConfigConverter) converters.get("First");
-        assertNotNull(cc1);
-        assertEquals("First Converter Description",
-                     cc1.getDescription());
-        assertEquals("First Converter Display Name",
-                     cc1.getDisplayName());
-        assertEquals("firstConverter.gif",
-                     cc1.getLargeIcon());
-        assertEquals("firstConverter.jpg",
-                     cc1.getSmallIcon());
-        assertEquals("First",
-                     cc1.getConverterId());
-        assertEquals("com.mycompany.MyFirstConverter",
-                     cc1.getConverterClass());
-        assertEquals(1, cc1.getAttributes().size());
-        ConfigAttribute cc1a1 =
-            (ConfigAttribute) cc1.getAttributes().get("attr1");
-        assertNotNull(cc1a1);
-        assertEquals("First Converter Attribute 1 Description",
-                     cc1a1.getDescription());
-        assertEquals("First Converter Attribute 1 Display Name",
-                     cc1a1.getDisplayName());
-        assertNull(cc1a1.getLargeIcon());
-        assertNull(cc1a1.getSmallIcon());
-        assertEquals("attr1",
-                     cc1a1.getAttributeName());
-        assertEquals("java.lang.String",
-                     cc1a1.getAttributeClass());
-        assertEquals(0, cc1.getProperties().size());
-        ConfigConverter cc2 = (ConfigConverter) converters.get("Second");
-        assertNotNull(cc2);
-        assertEquals("Second Converter Description",
-                     cc2.getDescription());
-        assertEquals("Second Converter Display Name",
-                     cc2.getDisplayName());
-        assertEquals("secondConverter.gif",
-                     cc2.getLargeIcon());
-        assertEquals("secondConverter.jpg",
-                     cc2.getSmallIcon());
-        assertEquals("Second",
-                     cc2.getConverterId());
-        assertEquals("com.mycompany.MySecondConverter",
-                     cc2.getConverterClass());
-        assertEquals(0, cc2.getAttributes().size());
-        assertEquals(1, cc2.getProperties().size());
-        ConfigProperty cc2p1 =
-            (ConfigProperty) cc2.getProperties().get("prop1");
-        assertNotNull(cc2p1);
-        assertEquals("Second Converter Property 1 Description",
-                     cc2p1.getDescription());
-        assertEquals("Second Converter Property 1 Display Name",
-                     cc2p1.getDisplayName());
-        assertNull(cc2p1.getLargeIcon());
-        assertNull(cc2p1.getSmallIcon());
-        assertEquals("prop1",
-                     cc2p1.getPropertyName());
-        assertEquals("java.lang.String",
-                     cc2p1.getPropertyClass());
-
-        // <validator>
-        Map validators = base.getValidators();
-        assertNotNull(validators);
-        ConfigValidator cv1 = (ConfigValidator) validators.get("First");
-        assertNotNull(cv1);
-        assertEquals("First Validator Description",
-                     cv1.getDescription());
-        assertEquals("First Validator Display Name",
-                     cv1.getDisplayName());
-        assertEquals("firstValidator.gif",
-                     cv1.getLargeIcon());
-        assertEquals("firstValidator.jpg",
-                     cv1.getSmallIcon());
-        assertEquals("First",
-                     cv1.getValidatorId());
-        assertEquals("com.mycompany.MyFirstValidator",
-                     cv1.getValidatorClass());
-        assertEquals(1, cv1.getAttributes().size());
-        ConfigAttribute cv1a1 =
-            (ConfigAttribute) cv1.getAttributes().get("attr1");
-        assertNotNull(cv1a1);
-        assertEquals("First Validator Attribute 1 Description",
-                     cv1a1.getDescription());
-        assertEquals("First Validator Attribute 1 Display Name",
-                     cv1a1.getDisplayName());
-        assertNull(cv1a1.getLargeIcon());
-        assertNull(cv1a1.getSmallIcon());
-        assertEquals("attr1",
-                     cv1a1.getAttributeName());
-        assertEquals("java.lang.String",
-                     cv1a1.getAttributeClass());
-        assertEquals(0, cv1.getProperties().size());
-        ConfigValidator cv2 = (ConfigValidator) validators.get("Second");
-        assertNotNull(cv2);
-        assertEquals("Second Validator Description",
-                     cv2.getDescription());
-        assertEquals("Second Validator Display Name",
-                     cv2.getDisplayName());
-        assertEquals("secondValidator.gif",
-                     cv2.getLargeIcon());
-        assertEquals("secondValidator.jpg",
-                     cv2.getSmallIcon());
-        assertEquals("Second",
-                     cv2.getValidatorId());
-        assertEquals("com.mycompany.MySecondValidator",
-                     cv2.getValidatorClass());
-        assertEquals(0, cv2.getAttributes().size());
-        assertEquals(1, cv2.getProperties().size());
-        ConfigProperty cv2p1 =
-            (ConfigProperty) cv2.getProperties().get("prop1");
-        assertNotNull(cv2p1);
-        assertEquals("Second Validator Property 1 Description",
-                     cv2p1.getDescription());
-        assertEquals("Second Validator Property 1 Display Name",
-                     cv2p1.getDisplayName());
-        assertNull(cv2p1.getLargeIcon());
-        assertNull(cv2p1.getSmallIcon());
-        assertEquals("prop1",
-                     cv2p1.getPropertyName());
-        assertEquals("java.lang.String",
-                     cv2p1.getPropertyClass());
-
-    }
-
-
-    // Test a pristine Digester instance
-    public void testPristine() {
-    }
-
-
-    // ------------------------------------------------------ Protected Methods
-
-
-    // Create a Digester instance with no rules yet
-    protected Digester createDigester() throws Exception {
-
-        digester = DigesterFactory.newInstance(true).createDigester();        
-        return (digester);
-
-    }
-
-
-    // Configure the matching rules for the specified Digester instance
-    // Rules assume that a ConfigBase bean is pushed on the stack first
-    protected void configureRules(Digester digester) {
-
-        configureRulesApplication(digester);
-        configureRulesConverter(digester);
-        configureRulesComponent(digester);
-        configureRulesValidator(digester);
-
-    }
-
-
-    // Configure the rules for an <application> element
-    protected void configureRulesApplication(Digester digester) {
-
-        digester.addCallMethod("faces-config/application/action-listener",
-                               "setActionListener", 0);
-        digester.addCallMethod("faces-config/application/navigation-handler",
-                               "setNavigationHandler", 0);
-        digester.addCallMethod("faces-config/application/property-resolver",
-                               "setPropertyResolver", 0);
-        digester.addCallMethod("faces-config/application/variable-resolver",
-                               "setVariableResolver", 0);
-
-    }
-
-
-    // Configure the rules for a <attribute> element
-    protected void configureRulesAttribute(Digester digester, String prefix) {
-
-        digester.addObjectCreate(prefix,
-                                 "javax.faces.webapp.ConfigAttribute");
-        digester.addSetNext(prefix,
-                            "addAttribute",
-                            "javax.faces.webapp.ConfigAttribute");
-        configureRulesFeature(digester, prefix);
-        digester.addCallMethod(prefix + "/attribute-name",
-                               "setAttributeName", 0);
-        digester.addCallMethod(prefix + "/attribute-class",
-                               "setAttributeClass", 0);
-
-    }
-
-
-    // Configure the rules for a <component> element
-    protected void configureRulesComponent(Digester digester) {
-
-        String prefix = "faces-config/component";
-
-        digester.addObjectCreate(prefix,
-                                 "javax.faces.webapp.ConfigComponent");
-        digester.addSetNext(prefix,
-                            "addComponent",
-                            "javax.faces.webapp.ConfigComponent");
-        configureRulesFeature(digester, prefix);
-        digester.addCallMethod(prefix + "/component-type",
-                               "setComponentType", 0);
-        digester.addCallMethod(prefix + "/component-class",
-                               "setComponentClass", 0);
-        configureRulesAttribute(digester, prefix + "/attribute");
-        configureRulesProperty(digester, prefix + "/property");
-
-    }
-
-
-    // Configure the rules for a <converter> element
-    protected void configureRulesConverter(Digester digester) {
-
-        String prefix = "faces-config/converter";
-
-        digester.addObjectCreate(prefix,
-                                 "javax.faces.webapp.ConfigConverter");
-        digester.addSetNext(prefix,
-                            "addConverter",
-                            "javax.faces.webapp.ConfigConverter");
-        configureRulesFeature(digester, prefix);
-        digester.addCallMethod(prefix + "/converter-id",
-                               "setConverterId", 0);
-        digester.addCallMethod(prefix + "/converter-class",
-                               "setConverterClass", 0);
-        configureRulesAttribute(digester, prefix + "/attribute");
-        configureRulesProperty(digester, prefix + "/property");
-
-    }
-
-
-    // Configure the generic feature rules for the specified prefix
-    protected void configureRulesFeature(Digester digester, String prefix) {
-
-        digester.addCallMethod(prefix + "/description",
-                               "setDescription", 0);
-        digester.addCallMethod(prefix + "/display-name",
-                               "setDisplayName", 0);
-        digester.addCallMethod(prefix + "/icon/large-icon",
-                               "setLargeIcon", 0);
-        digester.addCallMethod(prefix + "/icon/small-icon",
-                               "setSmallIcon", 0);
-
-    }
-
-
-    // Configure the rules for a <property> element
-    protected void configureRulesProperty(Digester digester, String prefix) {
-
-        digester.addObjectCreate(prefix,
-                                 "javax.faces.webapp.ConfigProperty");
-        digester.addSetNext(prefix,
-                            "addProperty",
-                            "javax.faces.webapp.ConfigProperty");
-        configureRulesFeature(digester, prefix);
-        digester.addCallMethod(prefix + "/property-name",
-                               "setPropertyName", 0);
-        digester.addCallMethod(prefix + "/property-class",
-                               "setPropertyClass", 0);
-
-    }
-
-
-    // Configure the rules for a <validator> element
-    protected void configureRulesValidator(Digester digester) {
-
-        String prefix = "faces-config/validator";
-
-        digester.addObjectCreate(prefix,
-                                 "javax.faces.webapp.ConfigValidator");
-        digester.addSetNext(prefix,
-                            "addValidator",
-                            "javax.faces.webapp.ConfigValidator");
-        configureRulesFeature(digester, prefix);
-        digester.addCallMethod(prefix + "/validator-id",
-                               "setValidatorId", 0);
-        digester.addCallMethod(prefix + "/validator-class",
-                               "setValidatorClass", 0);
-        configureRulesAttribute(digester, prefix + "/attribute");
-        configureRulesProperty(digester, prefix + "/property");
-
-    }
-
-
-    // Parse the configuration file at the specified URL
-    protected ConfigBase parseConfig(URL config) throws Exception {
-
-        digester.clear();
-        digester.push(new ConfigBase());
-        InputSource iso = new InputSource(config.toExternalForm());
-        InputStream ist = config.openStream();
-        iso.setByteStream(ist);
-        ConfigBase base = (ConfigBase) digester.parse(iso);
-        ist.close();
-        return (base);
-
-    }
-
-
-    // Return the URL of the specified path, relative to our base directory
-    protected URL relativeURL(String relativePath) throws Exception {
-
-        File file = new File(System.getProperty("base.dir"), relativePath);
-        return (file.toURL());
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigProperty.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigProperty.java
deleted file mode 100644
index 62969bd..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigProperty.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-/**
- * <p>Config Bean for an Property.</p>
- */
-public class ConfigProperty extends ConfigFeature {
-
-    private String propertyClass;
-    public String getPropertyClass() {
-        return (this.propertyClass);
-    }
-    public void setPropertyClass(String propertyClass) {
-        this.propertyClass = propertyClass;
-    }
-
-    private String propertyName;
-    public String getPropertyName() {
-        return (this.propertyName);
-    }
-    public void setPropertyName(String propertyName) {
-        this.propertyName = propertyName;
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConfigValidator.java b/jsf-api/src/test/java/javax/faces/webapp/ConfigValidator.java
deleted file mode 100644
index c5e7dbe..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConfigValidator.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-/**
- * <p>Config Bean for a Validator.</p>
- */
-public class ConfigValidator extends ConfigFeature {
-
-    private String validatorId;
-    public String getValidatorId() {
-        return (this.validatorId);
-    }
-    public void setValidatorId(String validatorId) {
-        this.validatorId = validatorId;
-    }
-
-    private String validatorClass;
-    public String getValidatorClass() {
-        return (this.validatorClass);
-    }
-    public void setValidatorClass(String validatorClass) {
-        this.validatorClass = validatorClass;
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ConverterTagTestCase.java b/jsf-api/src/test/java/javax/faces/webapp/ConverterTagTestCase.java
deleted file mode 100644
index 43096c2..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ConverterTagTestCase.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.ValueHolder;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.IntegerConverter;
-import javax.faces.event.FacesEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.sun.faces.mock.MockApplication;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockJspWriter;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockPageContext;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockRenderKitFactory;
-import com.sun.faces.mock.MockServlet;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-
-
-/**
- * <p>Unit tests for <code>ConverterTag</code>.</p>
- */
-
-public class ConverterTagTestCase extends TagTestCaseBase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    protected UIComponentTag ctag = null; // Component tag
-    protected UIComponentTag rtag = null; // Root tag
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ConverterTagTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up our root and component tags.
-     */
-    public void setUp() throws Exception {
-
-        super.setUp();
-
-        rtag = new TestTag("ROOT", "root") {
-                protected void setProperties(UIComponent component) {
-                }
-            };
-        rtag.setPageContext(this.pageContext);
-        ctag = new TestOutputTag();
-        ctag.setParent(this.rtag);
-        ctag.setPageContext(this.pageContext);
-
-        rtag.doStartTag();
-        ctag.doStartTag();
-
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-
-        return (new TestSuite(ConverterTagTestCase.class));
-
-    }
-
-
-    /**
-     * Clear our root and component tags.
-     */
-    public void tearDown() throws Exception {
-
-        ctag.doEndTag();
-        rtag.doEndTag();
-
-        ctag = null;
-        rtag = null;
-
-        super.tearDown();
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test literal converter id
-    public void testLiteral() throws Exception {
-
-        UIComponent component = ctag.getComponentInstance();
-        assertNotNull(component);
-        assertNull(((ValueHolder) component).getConverter());
-        ConverterTag tag = new ConverterTag();
-        tag.setConverterId("Integer");
-        add(tag);
-        tag.doStartTag();
-        Converter converter = ((ValueHolder) component).getConverter();
-        assertNotNull(converter);
-        assertTrue(converter instanceof IntegerConverter);
-        tag.doEndTag();
-        
-    }
-
-    // Test expression converter id
-    public void testExpression() throws Exception {
-
-        UIComponent component = ctag.getComponentInstance();
-        assertNotNull(component);
-        assertNull(((ValueHolder) component).getConverter());
-        ConverterTag tag = new ConverterTag();
-        tag.setConverterId("#{foo}");
-        add(tag);
-        request.setAttribute("foo", "Integer");
-        tag.doStartTag();
-        Converter converter = ((ValueHolder) component).getConverter();
-        assertNotNull(converter);
-        assertTrue(converter instanceof IntegerConverter);
-        tag.doEndTag();
-        
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    // Add the specified ConverterTag to our component tag
-    protected void add(ConverterTag tag) {
-
-        tag.setParent(ctag);
-        tag.setPageContext(this.pageContext);
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/FacetTagTestCase.java b/jsf-api/src/test/java/javax/faces/webapp/FacetTagTestCase.java
deleted file mode 100644
index 9e2dd21..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/FacetTagTestCase.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.sun.faces.mock.MockApplication;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockJspWriter;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockPageContext;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockRenderKitFactory;
-import com.sun.faces.mock.MockServlet;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-
-
-/**
- * <p>Unit tests for <code>FacetTag</code>.</p>
- */
-
-public class FacetTagTestCase extends TagTestCaseBase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    protected UIComponentTag ctag = null; // Component tag
-    protected FacetTag ftag = null;       // Facet tag
-    protected UIComponentTag rtag = null; // Root tag
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FacetTagTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up our root and component tags.
-     */
-    public void setUp() throws Exception {
-
-        super.setUp();
-
-        rtag = new TestTag("ROOT", "root") {
-                protected void setProperties(UIComponent component) {
-                }
-            };
-        rtag.setPageContext(this.pageContext);
-
-        ftag = new FacetTag();
-        ftag.setPageContext(this.pageContext);
-        ftag.setParent(this.rtag);
-
-        ctag = new TestOutputTag();
-        ctag.setPageContext(this.pageContext);
-        ctag.setParent(this.ftag);
-
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-
-        return (new TestSuite(FacetTagTestCase.class));
-
-    }
-
-
-    /**
-     * Clear our root and component tags.
-     */
-    public void tearDown() throws Exception {
-
-        ctag = null;
-        ftag = null;
-        rtag = null;
-
-        super.tearDown();
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test literal facet name
-    public void testLiteral() throws Exception {
-
-        rtag.doStartTag();
-        ftag.setName("foo");
-        ftag.doStartTag();
-        ctag.doStartTag();
-
-        UIComponent component = rtag.getComponentInstance();
-        assertNotNull(component);
-        UIComponent facet = component.getFacet("foo");
-        assertNotNull(facet);
-        assertTrue(facet instanceof UIOutput);
-        
-        ctag.doEndTag();
-        ftag.doEndTag();
-        rtag.doEndTag();
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/NamingTag.java b/jsf-api/src/test/java/javax/faces/webapp/NamingTag.java
deleted file mode 100644
index 40769e6..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/NamingTag.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.faces.component.UIComponent;
-
-
-// Test UINamingContainer Tag
-public class NamingTag extends UIComponentTag {
-
-    public String getComponentType() {
-        return ("TestNamingContainer");
-    }
-
-    public String getRendererType() {
-        return (null);
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/TagTestCaseBase.java b/jsf-api/src/test/java/javax/faces/webapp/TagTestCaseBase.java
deleted file mode 100644
index d048d7d..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/TagTestCaseBase.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.sun.faces.mock.MockApplication;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockJspWriter;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockPageContext;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockRenderKitFactory;
-import com.sun.faces.mock.MockServlet;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-
-
-/**
- * <p>Base unit tests for all UIComponentTag classes.</p>
- */
-
-public class TagTestCaseBase extends TestCase {
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    protected MockApplication         application = null;
-    protected MockServletConfig       config = null;
-    protected MockExternalContext     externalContext = null;
-    protected MockFacesContext        facesContext = null;
-    protected MockLifecycle           lifecycle = null;
-    protected MockPageContext         pageContext = null;
-    protected MockHttpServletRequest  request = null;
-    protected MockHttpServletResponse response = null;
-    protected MockServlet             servlet = null;
-    protected MockServletContext      servletContext = null;
-    protected MockHttpSession         session = null;
-
-    protected Tag                     root = null;
-
-
-    // ---------------------------------------------------------- Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public TagTestCaseBase(String name) {
-
-        super(name);
-
-    }
-
-
-    // -------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-
-        // Set up Servlet API Objects
-        servletContext = new MockServletContext();
-        config = new MockServletConfig(servletContext);
-        servlet = new MockServlet(config);
-        session = new MockHttpSession();
-        request = new MockHttpServletRequest(session);
-        response = new MockHttpServletResponse();
-
-        // Set up JSP API Objects
-        pageContext = new MockPageContext();
-        pageContext.initialize(servlet, request, response, null,
-                               true, 1024, true);
-
-        // Set up Faces API Objects
-	FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
-				 "com.sun.faces.mock.MockApplicationFactory");
-	FactoryFinder.setFactory(FactoryFinder.RENDER_KIT_FACTORY,
-				 "com.sun.faces.mock.MockRenderKitFactory");
-        externalContext =
-            new MockExternalContext(servletContext, request, response);
-        externalContext.setRequestParameterMap(new HashMap());
-        lifecycle = new MockLifecycle();
-        facesContext = new MockFacesContext(externalContext, lifecycle);
-        ApplicationFactory applicationFactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        application = (MockApplication) applicationFactory.getApplication();
-        facesContext.setApplication(application);
-	UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null);
-	root.setViewId("/root");
-        facesContext.setViewRoot(root);
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = new MockRenderKit();
-        try {
-            renderKitFactory.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT,
-                                          renderKit);
-        } catch (IllegalArgumentException e) {
-            ;
-        }
-
-    }
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() throws Exception {
-
-        application = null;
-        config = null;
-        externalContext = null;
-        facesContext = null;
-        lifecycle = null;
-        pageContext = null;
-        request = null;
-        response = null;
-        servlet = null;
-        servletContext = null;
-        session = null;
-
-        root = null;
-
-    }
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/TestComponent.java b/jsf-api/src/test/java/javax/faces/webapp/TestComponent.java
deleted file mode 100644
index 7e685ce..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/TestComponent.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.el.ValueBinding;
-
-
-// Test UIComponent Class
-public class TestComponent extends UIComponentBase {
-
-
-    public TestComponent() {
-        super();
-    }
-
-
-    public TestComponent(String id) {
-        super();
-        setId(id);
-    }
-
-
-    public String getFamily() {
-        return ("Test");
-    }
-
-
-    private String label = null;
-
-    public String getLabel() {
-        if (this.label != null) {
-            return (this.label);
-        }
-        ValueBinding vb = getValueBinding("label");
-        if (vb != null) {
-            return ((String) vb.getValue(getFacesContext()));
-        } else {
-            return (null);
-        }
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-
-    private boolean rendersChildren = false;
-
-    public boolean getRendersChildren() {
-        return (this.rendersChildren);
-    }
-
-    public void setRendersChildren(boolean rendersChildren) {
-        this.rendersChildren = rendersChildren;
-    }
-
-    public void encodeBegin(FacesContext context) throws IOException {
-        if (!isRendered()) {
-            return;
-        }
-        ResponseWriter writer = context.getResponseWriter();
-        writer.write("/b");
-        String id = getId();
-        if (id != null) {
-            writer.write(id);
-        }
-    }
-
-
-    public void encodeChildren(FacesContext context) throws IOException {
-        if (isRendered()) {
-            super.encodeChildren(context);
-        }
-    }
-
-
-    public void encodeEnd(FacesContext context) throws IOException {
-        if (!isRendered()) {
-            return;
-        }
-        ResponseWriter writer = context.getResponseWriter();
-        writer.write("/e");
-        String id = getId();
-        if (id != null) {
-            writer.write(id);
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/TestInputTag.java b/jsf-api/src/test/java/javax/faces/webapp/TestInputTag.java
deleted file mode 100644
index 254b97a..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/TestInputTag.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.el.ValueBinding;
-
-
-// Test UIInput Tag
-public class TestInputTag extends UIComponentTag {
-
-    public TestInputTag() {
-        super();
-    }
-
-
-    public TestInputTag(String componentId) {
-        super();
-        setId(componentId);
-    }
-
-    private boolean rendersChildren = false;
-    private boolean rendersChildrenSet = false;
-
-    public void setRendersChildren(boolean rendersChildren) {
-        this.rendersChildren = rendersChildren;
-        this.rendersChildrenSet = true;
-    }
-
-    public void release() {
-        super.release();
-        this.rendersChildrenSet = false;
-    }
-
-    public String getComponentType() {
-        return ("TestInput");
-    }
-
-    public String getRendererType() {
-        return ("TestRenderer");
-    }
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        if (rendersChildrenSet) {
-            ((TestComponent) component).setRendersChildren(rendersChildren);
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/TestOutputTag.java b/jsf-api/src/test/java/javax/faces/webapp/TestOutputTag.java
deleted file mode 100644
index 6dec8cb..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/TestOutputTag.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.el.ValueBinding;
-
-
-// Test UIOutput Tag
-public class TestOutputTag extends UIComponentTag {
-
-    public TestOutputTag() {
-        super();
-    }
-
-
-    public TestOutputTag(String componentId) {
-        super();
-        setId(componentId);
-    }
-
-    private boolean rendersChildren = false;
-    private boolean rendersChildrenSet = false;
-
-    public void setRendersChildren(boolean rendersChildren) {
-        this.rendersChildren = rendersChildren;
-        this.rendersChildrenSet = true;
-    }
-
-    public void release() {
-        super.release();
-        this.rendersChildrenSet = false;
-    }
-
-    public String getComponentType() {
-        return ("TestOutput");
-    }
-
-    public String getRendererType() {
-        return ("TestRenderer");
-    }
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        if (rendersChildrenSet) {
-            ((TestComponent) component).setRendersChildren(rendersChildren);
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/TestTag.java b/jsf-api/src/test/java/javax/faces/webapp/TestTag.java
deleted file mode 100644
index d57f8b9..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/TestTag.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.el.ValueBinding;
-
-
-// Test UIComponent Tag
-public class TestTag extends UIComponentTag {
-
-    public TestTag() {
-        super();
-    }
-
-
-    public TestTag(String componentId) {
-        this(componentId, componentId);
-    }
-
-    public TestTag(String componentId, String label) {
-        super();
-        setId(componentId);
-        setLabel(label);
-    }
-
-    private String label = null;
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    private boolean rendersChildren = false;
-    private boolean rendersChildrenSet = false;
-
-    public void setRendersChildren(boolean rendersChildren) {
-        this.rendersChildren = rendersChildren;
-        this.rendersChildrenSet = true;
-    }
-
-    public void release() {
-        super.release();
-        this.label = null;
-        this.rendersChildrenSet = false;
-    }
-
-    public String getComponentType() {
-        return ("TestComponent");
-    }
-
-    public String getRendererType() {
-        return (null);
-    }
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        if (rendersChildrenSet) {
-            ((TestComponent) component).setRendersChildren(rendersChildren);
-        }
-        if (label != null) {
-            if (isValueReference(label)) {
-                ValueBinding vb =
-                    getFacesContext().getApplication().
-		    createValueBinding(label);
-                component.setValueBinding("label", vb);
-            } else {
-                ((TestComponent) component).setLabel(label);
-            }
-        }
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/UIComponentTagTestCase.java b/jsf-api/src/test/java/javax/faces/webapp/UIComponentTagTestCase.java
deleted file mode 100644
index d4b2ffb..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/UIComponentTagTestCase.java
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.FacesEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.sun.faces.mock.MockApplication;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockJspWriter;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockPageContext;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockRenderKitFactory;
-import com.sun.faces.mock.MockServlet;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-
-
-/**
- * <p>Base unit tests for all UIComponentTag classes.</p>
- */
-
-public class UIComponentTagTestCase extends TagTestCaseBase {
-
-
-    // ----------------------------------------------------- Instance Variables
-
-    protected Map                     tags = new HashMap();
-
-
-    // ---------------------------------------------------------- Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UIComponentTagTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // -------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-
-        return (new TestSuite(UIComponentTagTestCase.class));
-
-    }
-
-    /**
-     * <p>Since the JSP tag no longer creates the response writer, we
-     * must do it ourselves.</p>
-     */ 
-
-    public void setUp() throws Exception {
-	super.setUp();
-
-        ResponseWriter writer = facesContext.getResponseWriter();
-        if (writer == null) {
-	    RenderKitFactory renderFactory = (RenderKitFactory)
-		FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-	    RenderKit renderKit = 
-		renderFactory.getRenderKit
-                (facesContext, facesContext.getViewRoot().getRenderKitId());
-            writer = 
-		renderKit.createResponseWriter(new Writer() {
-		    public void close() throws IOException {
-			pageContext.getOut().close();
-		    }
-		    public void flush() throws IOException {
-                        // PENDING(craigmcc) - causes problems with includes
-			// pageContext.getOut().flush();
-		    }
-                    public void write(char cbuf) throws IOException {
-			pageContext.getOut().write(cbuf);
-		    }
-		    public void write(char[] cbuf, int off, 
-				      int len) throws IOException {
-			pageContext.getOut().write(cbuf, off, len);
-		    }
-		    public void write(int c) throws IOException {
-			pageContext.getOut().write(c);
-		    }
-		    public void write(String str) throws IOException {
-			pageContext.getOut().write(str);
-		    }
-		    public void write(String str, int off, 
-				      int len) throws IOException {
-			pageContext.getOut().write(str, off, len);
-		    }
-		},
-                                               null,
-            pageContext.getRequest().getCharacterEncoding());
-	    
-            facesContext.setResponseWriter(writer);
-	}
-    }
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() throws Exception {
-        tags.clear();
-	super.tearDown();
-
-    }
-
-
-    // ------------------------------------------------ Individual Test Methods
-
-
-    // Test multiple tag rendering with ids
-    public void testMultipleTagWithId() throws Exception {
-
-        configure("C1", "C2", true, false);
-
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/bC1/eC1/bC2/eC2/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-        reset();
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/bC1/eC1/bC2/eC2/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-
-    }
-
-
-    // Test multiple tag rendering with missing id
-    // Scenario 1 -- both ids missing
-    public void testMultipleTagWithoutId1() throws Exception {
-
-        configure(null, null, true, false);
-
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0/b" + UIViewRoot.UNIQUE_ID_PREFIX + "1/e" + UIViewRoot.UNIQUE_ID_PREFIX + "1/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-c1/" + UIViewRoot.UNIQUE_ID_PREFIX + "1-c2/B3-b3", tree());
-        verifyB2();
-
-        reset();
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0/b" + UIViewRoot.UNIQUE_ID_PREFIX + "1/e" + UIViewRoot.UNIQUE_ID_PREFIX + "1/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-c1/" + UIViewRoot.UNIQUE_ID_PREFIX + "1-c2/B3-b3", tree());
-        verifyB2();
-
-    }
-
-
-    // Test multiple tag rendering with missing id
-    // Scenario 2 -- first id missing
-    public void testMultipleTagWithoutId2() throws Exception {
-
-        configure(null, "C2", true, false);
-
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0/bC2/eC2/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-
-        reset();
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0/bC2/eC2/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-
-    }
-
-
-    // Test multiple tag rendering with missing id
-    // Scenario 3 -- second id missing
-    public void testMultipleTagWithoutId3() throws Exception {
-
-        configure("C1", null, true, false);
-
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/bC1/eC1/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-c2/B3-b3", tree());
-        verifyB2();
-
-        reset();
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/bC1/eC1/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-c2/B3-b3", tree());
-        verifyB2();
-
-    }
-
-
-    // Test a pristine setup environment
-    public void testPristine() {
-
-        assertNotNull(config);
-        assertNotNull(facesContext);
-        assertNotNull(pageContext);
-        assertNotNull(request);
-        assertNotNull(response);
-        assertNotNull(servlet);
-        assertNotNull(servletContext);
-        assertNotNull(session);
-
-        assertNull(root);
-        assertEquals(0, tags.size());
-
-    }
-
-
-    // Test suppressing rendering with rendered=false
-    public void testRenderedFalse() throws Exception {
-
-        configure("C1", "C2", false, false);
-
-        render();
-        assertEquals("/bA/bB1/eB1/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-
-        reset();
-        render();
-        assertEquals("/bA/bB1/eB1/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-
-    }
-
-
-    // Test a component that takes responsibility for rendering children
-    public void testRendersChildren() throws Exception {
-
-        configure("C1", "C2", true, true);
-
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-
-        reset();
-        render();
-        assertEquals("/bA/bB1/eB1/bB2/eB2/bB3/eB3/eA", text());
-        assertEquals("/ROOT/A-a/B1-b1/B2-b2/C1-c1/C2-c2/B3-b3", tree());
-        verifyB2();
-
-    }
-
-
-    // Test single tag rendering with id
-    public void testSingleTagWithId() throws Exception {
-
-        add(null, new TestTag("A", "a"));
-
-        render();
-        assertEquals("/bA/eA", text());
-        assertEquals("/ROOT/A-a", tree());
-
-        reset();
-        render();
-        assertEquals("/bA/eA", text());
-        assertEquals("/ROOT/A-a", tree());
-
-    }
-
-
-    // Test single tag rendering without id
-    public void testSingleTagWithoutId() throws Exception {
-
-        add(null, new TestTag(null, "a"));
-
-        render();
-        assertEquals("/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0", text());
-        assertEquals("/ROOT/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-a", tree());
-
-        reset();
-        render();
-        assertEquals("/b" + UIViewRoot.UNIQUE_ID_PREFIX + "0/e" + UIViewRoot.UNIQUE_ID_PREFIX + "0", text());
-        assertEquals("/ROOT/" + UIViewRoot.UNIQUE_ID_PREFIX + "0-a", tree());
-
-    }
-
-    public void testUniqueId() throws Exception {
-	UIComponentTag tag = new TestTag();
-	boolean exceptionThrown = false;
-	try {
-	    tag.setId(UIViewRoot.UNIQUE_ID_PREFIX + "ha");
-	}
-	catch (IllegalArgumentException e) {
-	    exceptionThrown = true;
-	}
-	assertTrue(exceptionThrown);
-	
-	exceptionThrown = false;
-	try {
-	    tag.setId("ha");
-	}
-	catch (IllegalArgumentException e) {
-	    exceptionThrown = true;
-	}
-	assertTrue(!exceptionThrown);
-
-    }
-
-
-    // Test configuring value bindings instead of literal values
-    public void testValueBindings() throws Exception {
-
-	TestTag tag = new TestTag();
-	tag.setLabel("#{foo}");
-	tag.setRendered("#{bar}");
-	add(root, tag);
-	request.setAttribute("foo", "bap");
-	request.setAttribute("bar", Boolean.FALSE);
-	reset();
-	render();
-
-	UIViewRoot vr = facesContext.getViewRoot();
-	assertEquals(1, vr.getChildren().size());
-	UIComponent component = (UIComponent) vr.getChildren().get(0);
-	assertEquals("bap", ((TestComponent) component).getLabel());
-	assertTrue(!component.isRendered());
-	assertNotNull(component.getValueBinding("label"));
-	assertNotNull(component.getValueBinding("rendered"));
-
-    }
-
-
-    // ------------------------------------------------------ Protected Methods
-
-
-    // Add a new child tag with the specified parent (null==root tag)
-    protected void add(Tag parent, Tag child) {
-
-        if (parent == null) {
-            if (root != null) {
-                throw new IllegalStateException("Root tag already set");
-            }
-	    root = new TestTag("ROOT", "root") {
-		    protected void setProperties(UIComponent component) {
-		    }
-		};
-	    add(root, child);
-	    root.setPageContext(this.pageContext);
-        } else {
-            List children = (List) tags.get(parent);
-            if (children == null) {
-                children = new ArrayList();
-                tags.put(parent, children);
-            }
-            children.add(child);
-            child.setParent(parent);
-        }
-        child.setPageContext(this.pageContext);
-
-    }
-
-
-    // Configure the tree of tags, with specified ids for C1 and C2
-    protected void configure(String id1, String id2,
-                             boolean rendered, boolean children) {
-
-        UIComponentTag a = new TestTag("A", "a");
-        UIComponentTag b2 = new TestTag("B2", "b2");
-        b2.setRendered(rendered ? "true" : "false");
-        ((TestTag) b2).setRendersChildren(children);
-        FacetTag f1 = new FacetTag();
-        f1.setName("header");
-        FacetTag f2 = new FacetTag();
-        f2.setName("footer");
-
-        add(null, a);
-        add(a, new TestTag("B1", "b1"));
-        add(a, b2);
-        add(a, new TestTag("B3", "b3"));
-        add(b2, f1);
-        add(f1, new TestTag("H", "h"));
-        add(b2, new TestTag(id1, "c1"));
-        add(b2, new TestTag(id2, "c2"));
-        add(b2, f2);
-        add(f2, new TestTag("F", "f"));
-
-    }
-
-
-    // Release all tags on the current page
-    protected void release() {
-
-        if (root != null) {
-            release(root);
-            root = null;
-        }
-
-    }
-
-    protected void release(Tag tag) {
-
-        List children = (List) tags.get(tag);
-        if (children != null) {
-            Iterator kids = children.iterator();
-            while (kids.hasNext()) {
-                release((Tag) kids.next());
-            }
-            tags.remove(tag);
-        }
-        tag.setParent(null);
-        tag.setPageContext(null);
-
-    }
-
-
-    // Render the current page by recursively processing all of the tags
-    protected void render() throws JspException {
-
-        if (root != null) {
-            render(root);
-        }
-
-	try {
-	    facesContext.getViewRoot().encodeAll(facesContext);
-	}
-	catch (IOException e) {
-	    throw new JspException(e);
-	}
-
-    }
-
-    protected void render(Tag tag) throws JspException {
-
-        tag.doStartTag();
-        List children = (List) tags.get(tag);
-        if (children != null) {
-            Iterator kids = children.iterator();
-            while (kids.hasNext()) {
-                render((Tag) kids.next());
-            }
-        }
-        tag.doEndTag();
-
-    }
-
-
-    // Reset the output buffer in our fake writer
-    protected void reset() throws IOException {
-
-        pageContext.clearPageScope();
-        pageContext.removeAttribute("javax.faces.webapp.AUTO_INDEX",
-                                    PageContext.REQUEST_SCOPE);
-        MockJspWriter writer = (MockJspWriter) pageContext.getOut();
-        writer.clearBuffer();
-
-    }
-
-
-    // Return a String of all the component ids in treewalk order
-    protected String tree() {
-
-        UIComponent component = facesContext.getViewRoot();
-        StringBuffer sb = new StringBuffer();
-        tree(component, sb);
-        return (sb.toString());
-
-    }
-
-    protected void tree(UIComponent component, StringBuffer sb) {
-
-        sb.append("/");
-        if (component.getId() != null) {
-            sb.append(component.getId());
-        }
-        if (component instanceof TestComponent) {
-            String label = ((TestComponent) component).getLabel();
-            if (label != null) {
-                sb.append("-");
-                sb.append(label);
-            }
-        }
-        Iterator kids = component.getChildren().iterator();
-        while (kids.hasNext()) {
-            tree((UIComponent) kids.next(), sb);
-        }
-
-    }
-
-
-    // Return the rendered text
-    protected String text() {
-
-        MockJspWriter writer = (MockJspWriter) pageContext.getOut();
-        return (writer.getBuffer());
-
-    }
-
-
-    // Verify the characteristics of a component with id "B2"
-    protected void verifyB2() {
-
-        UIComponent b2c = facesContext.getViewRoot().findComponent("B2");
-        assertNotNull("B2 component exists", b2c);
-        assertEquals("B2 component id", "B2", b2c.getId());
-        assertEquals("B2 child count", 2,
-                     b2c.getChildren().size());
-        assertNotNull("B2 header facet",
-                      (UIComponent) b2c.getFacets().get("header"));
-        assertNotNull("B2 footer facet",
-                      (UIComponent) b2c.getFacets().get("footer"));
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/ValidatorTagTestCase.java b/jsf-api/src/test/java/javax/faces/webapp/ValidatorTagTestCase.java
deleted file mode 100644
index 3d1ecde..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/ValidatorTagTestCase.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.faces.webapp;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.LengthValidator;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.sun.faces.mock.MockApplication;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockJspWriter;
-import com.sun.faces.mock.MockLifecycle;
-import com.sun.faces.mock.MockPageContext;
-import com.sun.faces.mock.MockRenderKit;
-import com.sun.faces.mock.MockRenderKitFactory;
-import com.sun.faces.mock.MockServlet;
-import com.sun.faces.mock.MockServletConfig;
-import com.sun.faces.mock.MockServletContext;
-
-
-/**
- * <p>Unit tests for <code>ValidatorTag</code>.</p>
- */
-
-public class ValidatorTagTestCase extends TagTestCaseBase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    protected UIComponentTag ctag = null; // Component tag
-    protected UIComponentTag rtag = null; // Root tag
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ValidatorTagTestCase(String name) {
-
-        super(name);
-
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up our root and component tags.
-     */
-    public void setUp() throws Exception {
-
-        super.setUp();
-
-        rtag = new TestTag("ROOT", "root") {
-                protected void setProperties(UIComponent component) {
-                }
-            };
-        rtag.setPageContext(this.pageContext);
-        ctag = new TestInputTag();
-        ctag.setParent(this.rtag);
-        ctag.setPageContext(this.pageContext);
-
-        rtag.doStartTag();
-        ctag.doStartTag();
-
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-
-        return (new TestSuite(ValidatorTagTestCase.class));
-
-    }
-
-
-    /**
-     * Clear our root and component tags.
-     */
-    public void tearDown() throws Exception {
-
-        ctag.doEndTag();
-        rtag.doEndTag();
-
-        ctag = null;
-        rtag = null;
-
-        super.tearDown();
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test literal validator id
-    public void testLiteral() throws Exception {
-
-        UIComponent component = ctag.getComponentInstance();
-        assertNotNull(component);
-        assertEquals(0, ((EditableValueHolder) component).getValidators().length);
-        ValidatorTag tag = new ValidatorTag();
-        tag.setValidatorId("Length");
-        add(tag);
-        tag.doStartTag();
-        Validator validator = ((EditableValueHolder) component).getValidators()[0];
-        assertNotNull(validator);
-        assertTrue(validator instanceof LengthValidator);
-        tag.doEndTag();
-        
-    }
-
-
-    // Test expression validator id
-    public void testExpression() throws Exception {
-
-        UIComponent component = ctag.getComponentInstance();
-        assertNotNull(component);
-        assertEquals(0, ((EditableValueHolder) component).getValidators().length);
-        ValidatorTag tag = new ValidatorTag();
-        tag.setValidatorId("#{foo}");
-        request.setAttribute("foo", "Length");
-        add(tag);
-        tag.doStartTag();
-        Validator validator = ((EditableValueHolder) component).getValidators()[0];
-        assertNotNull(validator);
-        assertTrue(validator instanceof LengthValidator);
-        tag.doEndTag();
-        
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    // Add the specified ValidatorTag to our component tag
-    protected void add(ValidatorTag tag) {
-
-        tag.setParent(ctag);
-        tag.setPageContext(this.pageContext);
-
-    }
-
-
-}
diff --git a/jsf-api/src/test/java/javax/faces/webapp/config-file-0.xml b/jsf-api/src/test/java/javax/faces/webapp/config-file-0.xml
deleted file mode 100644
index 53e1789..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/config-file-0.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ========== EMPTY CONFIGURATION FILE ================================== -->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2"/>
diff --git a/jsf-api/src/test/java/javax/faces/webapp/config-file-1.xml b/jsf-api/src/test/java/javax/faces/webapp/config-file-1.xml
deleted file mode 100644
index f91aa7b..0000000
--- a/jsf-api/src/test/java/javax/faces/webapp/config-file-1.xml
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <!-- Initial application element with partial values -->
-  <application id="applicationElement">
-    <action-listener>com.mycompany.MyActionListener</action-listener>
-    <variable-resolver>com.mycompany.OldVariableResolver</variable-resolver>
-  </application>
-
-
-  <!-- Second validator -->
-  <validator>
-    <description>Second Validator Description</description>
-    <display-name>Second Validator Display Name</display-name>
-    <icon>
-      <small-icon>secondValidator.jpg</small-icon>
-      <large-icon>secondValidator.gif</large-icon>
-    </icon>
-    <validator-id>Second</validator-id>
-    <validator-class>com.mycompany.MySecondValidator</validator-class>
-    <property>
-      <description>Second Validator Property 1 Description</description>
-      <display-name>Second Validator Property 1 Display Name</display-name>
-      <property-name>prop1</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-  </validator>
-
-
-  <!-- First validator -->
-  <validator>
-    <description>First Validator Description</description>
-    <display-name>First Validator Display Name</display-name>
-    <icon>
-      <small-icon>firstValidator.jpg</small-icon>
-      <large-icon>firstValidator.gif</large-icon>
-    </icon>
-    <validator-id>First</validator-id>
-    <validator-class>com.mycompany.MyFirstValidator</validator-class>
-    <attribute>
-      <description>First Validator Attribute 1 Description</description>
-      <display-name>First Validator Attribute 1 Display Name</display-name>
-      <attribute-name>attr1</attribute-name>
-      <attribute-class>java.lang.String</attribute-class>
-    </attribute>
-  </validator>
-
-
-  <!-- First component -->
-  <component>
-    <description>User Interface Command Component</description>
-    <display-name>User Interface Command</display-name>
-    <component-type>Command</component-type>
-    <component-class>javax.faces.component.UICommand</component-class>
-  </component>
-
-
-  <!-- First converter -->
-  <converter>
-    <description>First Converter Description</description>
-    <display-name>First Converter Display Name</display-name>
-    <icon>
-      <small-icon>firstConverter.jpg</small-icon>
-      <large-icon>firstConverter.gif</large-icon>
-    </icon>
-    <converter-id>First</converter-id>
-    <converter-class>com.mycompany.MyFirstConverter</converter-class>
-    <attribute>
-      <description>First Converter Attribute 1 Description</description>
-      <display-name>First Converter Attribute 1 Display Name</display-name>
-      <attribute-name>attr1</attribute-name>
-      <attribute-class>java.lang.String</attribute-class>
-    </attribute>
-  </converter>
-
-
-  <!-- Second application element with overapping values -->
-  <application>
-    <navigation-handler>
-      com.mycompany.MyNavigationHandler
-    </navigation-handler>
-    <property-resolver>com.mycompany.MyPropertyResolver</property-resolver>
-    <variable-resolver>com.mycompany.MyVariableResolver</variable-resolver>
-  </application>
-
-
-  <!-- Second converter -->
-  <converter>
-    <description>Second Converter Description</description>
-    <display-name>Second Converter Display Name</display-name>
-    <icon>
-      <small-icon>secondConverter.jpg</small-icon>
-      <large-icon>secondConverter.gif</large-icon>
-    </icon>
-    <converter-id>Second</converter-id>
-    <converter-class>com.mycompany.MySecondConverter</converter-class>
-    <property>
-      <description>Second Converter Property 1 Description</description>
-      <display-name>Second Converter Property 1 Display Name</display-name>
-      <property-name>prop1</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-  </converter>
-
-  <!-- Third converter (by-type) -->
-  <converter>
-    <description>Third Converter Description</description>
-    <display-name>Third Converter Display Name</display-name>
-    <icon>
-      <small-icon>thirdConverter.jpg</small-icon>
-      <large-icon>thirdConverter.gif</large-icon>
-    </icon>
-    <converter-for-class>java.util.Date</converter-for-class>
-    <converter-class>com.mycompany.MyThirdConverter</converter-class>
-    <property>
-      <description>Third Converter Property 1 Description</description>
-      <display-name>Third Converter Property 1 Display Name</display-name>
-      <property-name>prop1</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-  </converter>
-
-
-  <!-- First navigation rule (global) -->
-  <navigation-rule>
-    <description>
-      This is the set of rules that provides default navigation
-      independent of the request view.
-    </description>
-    <display-name>Default Navigation Rules</display-name>
-    <!-- Can also be omitted, since this is the default -->
-    <from-view-id> * </from-view-id>
-    <!-- Logout button on every page -->
-    <navigation-case>
-      <from-action>#{UserBean.Logout}</from-action>
-      <to-view-id>/logout.jsp</to-view-id>
-    </navigation-case>
-    <!-- Generic "not logged in" handler -->
-    <navigation-case>
-      <from-outcome>loginRequired</from-outcome>
-      <to-view-id>/must-login-first.jsp</to-view-id>
-      <redirect/>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Second navigation rule (login page only) -->
-  <navigation-rule>
-    <from-view-id> /login.jsp </from-view-id>
-    <!-- Login action was invoked successfully -->
-    <navigation-case>
-      <from-action>#{UserBean.login}</from-action>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/home.jsp</to-view-id>
-    </navigation-case>
-    <!-- User registration required -->
-    <navigation-case>
-      <from-action>#{UserBean.register}</from-action>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/get-user-info.jsp</to-view-id>
-    </navigation-case>
-    <!-- User registration failed -->
-    <navigation-case>
-      <from-action>#{UserBean.register}</from-action>
-      <from-outcome>duplicate</from-outcome>
-      <to-view-id>/try-another-name.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Third navigation rule (more global stuff) -->
-  <navigation-rule>
-    <!-- Omit the request view id this time -->
-    <!-- General search form handling -->
-    <navigation-case>
-      <from-action>#{SearchForm.go}</from-action>
-      <to-view-id>/search-results.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Fourth navigation rule (special search handling) -->
-  <navigation-rule>
-    <!-- Search works differently for part of the app -->
-    <from-view-id>/movies/*</from-view-id>
-    <!-- Special search form handling -->
-    <navigation-case>
-      <from-action>#{SearchForm.go}</from-action>
-      <to-view-id>/movies/movie-search-results.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- First managed bean -->
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      Auto-creates the form handler for new customers into request scope
-      if it is not already present.
-    </description>
-    <display-name>New Customer Form Handler</display-name>
-    <managed-bean-name>NewCustomerFormHandler</managed-bean-name>
-    <managed-bean-class>
-      com.example.formhandler.NewCustomerFormHandler
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <!-- Managed property initializations -->
-    <managed-property>
-      <property-name>minimumAge</property-name>
-      <value>#{initParam.minimumCustomerAge}</value>
-    </managed-property>
-    <managed-property>
-      <property-name>maximumAge</property-name>
-      <value>65</value>
-    </managed-property>
-    <managed-property>
-      <property-name>nationality</property-name>
-      <null-value/>
-    </managed-property>
-    <managed-property>
-      <property-name>allowableValues</property-name>
-      <!-- Assume the type is java.util.List -->
-      <list-entries>
-        <value-class>java.lang.Integer</value-class>
-        <value>10</value>
-        <value>20</value>
-        <value>60</value>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <property-name>firstNames</property-name>
-      <!-- Assume the type is java.util.List or java.lang.String[] -->
-      <list-entries>
-        <value>Thomas</value>
-        <value>#{someOtherBean.someName}</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <description>
-        Map property with a description.
-      </description>
-      <display-name>Claim Amounts</display-name>
-      <property-name>claimAmounts</property-name>
-      <map-entries>
-        <key-class>java.lang.String</key-class> <!-- Default so redundant -->
-        <value-class>java.lang.Double</value-class>
-        <map-entry>
-          <key>fire</key>
-          <value>1000.00</value>
-        </map-entry>
-        <map-entry>
-          <key>water</key>
-          <value>#{claimConfiguration.waterDamageAmount}</value>
-        </map-entry>
-        <map-entry>
-          <key>earthquake</key>
-          <null-value/>
-        </map-entry>
-      </map-entries>
-    </managed-property>
-  </managed-bean>
-
-
-  <!-- First referenced bean -->
-  <referenced-bean>
-    <description>
-      This element represents a JDBC DataSource that will be
-      initialized through some external means, and made available
-      in some scope (most likely application).
-    </description>
-    <display-name>Database Connection Pool</display-name>
-    <referenced-bean-name>connectionPool</referenced-bean-name>
-    <referenced-bean-class>javax.sql.DataSource</referenced-bean-class>
-  </referenced-bean>
-
-
-</faces-config>
diff --git a/jsf-api/template-src/MethodBindingMethodExpressionAdapter.java b/jsf-api/template-src/MethodBindingMethodExpressionAdapter.java
deleted file mode 100644
index 7934f17..0000000
--- a/jsf-api/template-src/MethodBindingMethodExpressionAdapter.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
- 
-package @package@;
-
-import java.io.Serializable;
-
-import javax.faces.component.StateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.MethodBinding;
-
-import javax.el.MethodExpression;
-import javax.el.MethodInfo;
-import javax.el.ELException;
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-
-import java.util.Arrays;
-import java.lang.reflect.Method;
-
-/**
- * <p>Wrap a MethodExpression instance and expose it as a MethodBinding</p>
- *
- */
- at protection@ class MethodBindingMethodExpressionAdapter extends MethodBinding implements StateHolder, 
-    Serializable {
-
-    private static final long serialVersionUID = @serialVersionUID@;
-
-    private MethodExpression methodExpression= null;
-    private boolean tranzient;
-
-    public MethodBindingMethodExpressionAdapter() {} // for StateHolder
-    
-    @protection@ MethodBindingMethodExpressionAdapter(MethodExpression methodExpression) {
-        this.methodExpression = methodExpression;    
-    }
-
-    public Object invoke(FacesContext context, Object params[])
-        throws javax.faces.el.EvaluationException, javax.faces.el.MethodNotFoundException {
-	assert(null != methodExpression);
-        if ( context == null ) {
-            throw new NullPointerException("FacesConext -> null");
-        }
-        
-	Object result = null;
-	try {
-	    result = methodExpression.invoke(context.getELContext(),
-					     params);
-	}
-	catch (javax.el.MethodNotFoundException e) {
-	    throw new javax.faces.el.MethodNotFoundException(e);
-	}
-	catch (javax.el.PropertyNotFoundException e) {
-	    throw new EvaluationException(e);
-	}
-	catch (ELException e) {
-            Throwable cause = e.getCause();
-            if (cause == null) {
-                cause = e;
-            }
-            throw new EvaluationException(cause);
-	} catch (NullPointerException e) {
-	    throw new javax.faces.el.MethodNotFoundException(e);
-	}
-	return result;
-    }
-
-    public Class getType(FacesContext context) throws javax.faces.el.MethodNotFoundException {
-	assert(null != methodExpression);
-	if (context == null) {
-	        throw new NullPointerException("FacesConext -> null");
-    }
-	Class result = null;
-        if ( context == null ) {
-            throw new NullPointerException();
-        }
-        
-	try {
-	    MethodInfo mi = 
-		methodExpression.getMethodInfo(context.getELContext());
-	    result = mi.getReturnType();
-	}
-	catch (javax.el.PropertyNotFoundException e) {
-	    throw new javax.faces.el.MethodNotFoundException(e);
-	}
-	catch (javax.el.MethodNotFoundException e) {
-	    throw new javax.faces.el.MethodNotFoundException(e);
-	}
-	catch (ELException e) {
-	    throw new javax.faces.el.MethodNotFoundException(e);
-	}
-	return result;
-    }
-    
-   
-    public String getExpressionString() {
-	assert(null != methodExpression);
-        return methodExpression.getExpressionString();
-    }
-
-    public boolean equals(Object other) {
-        if (this == other) {
-            return true;       
-        }
-        if (other instanceof MethodBindingMethodExpressionAdapter) {
-            return methodExpression.equals(((MethodBindingMethodExpressionAdapter) other).getWrapped());                        
-        } else if (other instanceof MethodBinding) {
-            MethodBinding binding = (MethodBinding) other;
-            
-            // We'll need to do a little leg work to determine
-            // if the MethodBinding is equivalent to the 
-            // wrapped MethodExpression
-            String expr = binding.getExpressionString();
-            int idx = expr.indexOf('.');
-            String target = expr.substring(0, idx).substring(2);
-            String t = expr.substring(idx + 1);
-            String method = t.substring(0, (t.length() - 1));
-            
-            FacesContext context = FacesContext.getCurrentInstance();
-            ELContext elContext = context.getELContext();
-            MethodInfo controlInfo = methodExpression.getMethodInfo(elContext);
-            
-            // ensure the method names are the same
-            if (!controlInfo.getName().equals(method)) {
-                return false;
-            }
-            
-            // Using the target, create an expression and evaluate
-            // it.           
-            ExpressionFactory factory = context.getApplication().getExpressionFactory();
-            ValueExpression ve = factory.createValueExpression(elContext,
-                                                               "#{" + target + '}',
-                                                               Object.class);
-            if (ve == null) {
-                return false;                                                               
-            }
-            
-            Object result = ve.getValue(elContext);
-            
-            if (result == null) {
-                return false;
-            }
-            
-            // Get all of the methods with the matching name and try
-            // to find a match based on controlInfo's return and parameter
-            // types
-            Class type = binding.getType(context);
-            Method[] methods = result.getClass().getMethods();
-            for (Method meth : methods) {
-                if (meth.getName().equals(method)
-                     && type.equals(controlInfo.getReturnType())
-                     && Arrays.equals(meth.getParameterTypes(), 
-                                      controlInfo.getParamTypes())) {
-                    return true;                      
-                }
-            }
-        }
-        
-        return false;
-        
-    }
-
-    public int hashCode() {
-	assert(null != methodExpression);
-
-	return methodExpression.hashCode();
-    }
-
-
-    public boolean isTransient() {
-        return this.tranzient;
-    }
-    
-    public void setTransient(boolean tranzient) {
-        this.tranzient = tranzient;
-    }
-    
-    public Object saveState(FacesContext context){
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	Object result = null;
-	if (!tranzient) {
-	    if (methodExpression instanceof StateHolder) {
-		Object [] stateStruct = new Object[2];
-		
-		// save the actual state of our wrapped methodExpression
-		stateStruct[0] = ((StateHolder)methodExpression).saveState(context);
-		// save the class name of the methodExpression impl
-		stateStruct[1] = methodExpression.getClass().getName();
-
-		result = stateStruct;
-	    }
-	    else {
-		result = methodExpression;
-	    }
-	}
-
-	return result;
-	
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	// if we have state
-	if (null == state) {
-	    return;
-	}
-	
-	if (!(state instanceof MethodExpression)) {
-	    Object [] stateStruct = (Object []) state;
-	    Object savedState = stateStruct[0];
-	    String className = stateStruct[1].toString();
-	    MethodExpression result = null;
-	    
-	    Class toRestoreClass = null;
-	    if (null != className) {
-		try {
-		    toRestoreClass = loadClass(className, this);
-		}
-		catch (ClassNotFoundException e) {
-		    throw new IllegalStateException(e.getMessage());
-		}
-		
-		if (null != toRestoreClass) {
-		    try {
-			result = 
-			    (MethodExpression) toRestoreClass.newInstance();
-		    }
-		    catch (InstantiationException e) {
-			throw new IllegalStateException(e.getMessage());
-		    }
-		    catch (IllegalAccessException a) {
-			throw new IllegalStateException(a.getMessage());
-		    }
-		}
-		
-		if (null != result && null != savedState) {
-		    // don't need to check transient, since that was
-		    // done on the saving side.
-		    ((StateHolder)result).restoreState(context, savedState);
-		}
-		methodExpression = result;
-	    }
-	}
-	else {
-	    methodExpression = (MethodExpression) state;
-	}
-    }
-    
-    public MethodExpression getWrapped() {
-        return methodExpression;
-    }
-
-    //
-    // Helper methods for StateHolder
-    //
-
-    private static Class loadClass(String name, 
-            Object fallbackClass) throws ClassNotFoundException {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return Class.forName(name, true, loader);
-    }
- 
-
-
-}
diff --git a/jsf-api/template-src/MethodExpressionMethodBindingAdapter.java b/jsf-api/template-src/MethodExpressionMethodBindingAdapter.java
deleted file mode 100644
index a279e86..0000000
--- a/jsf-api/template-src/MethodExpressionMethodBindingAdapter.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
- 
-package @package@;
-
-import javax.el.MethodExpression;
-import javax.el.ELException;
-import javax.el.ELContext;
-import javax.el.MethodInfo;
-import javax.faces.el.MethodBinding;
-import javax.faces.context.FacesContext;
-import javax.faces.component.StateHolder;
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-
-import java.util.Arrays;
-import java.lang.reflect.Method;
-import java.io.Serializable;
-
-/**
- * <p>Wrap a MethodBinding instance and expose it as a
- * MethodExpression.</p>
- */
-
- at protection@ class MethodExpressionMethodBindingAdapter extends MethodExpression implements Serializable, StateHolder {
-
-    private static final long serialVersionUID = @serialVersionUID@;
-
-    public MethodExpressionMethodBindingAdapter() {} // for StateHolder
-
-    private MethodBinding binding = null;
-
-    @protection@ MethodExpressionMethodBindingAdapter(MethodBinding binding) {
-	assert(null != binding);
-	this.binding = binding;
-    }
-
-    //
-    // Methods from MethodExpression
-    //
-
-    private transient MethodInfo info = null;
-
-    public MethodInfo getMethodInfo(ELContext context) throws ELException {
-	assert(null != binding);
-	
-	if (context == null) {
-	    throw new NullPointerException("ELContext -> null");
-    }
-
-	if (null == info) {
-	    FacesContext facesContext = (FacesContext) 
-		context.getContext(FacesContext.class);
-	    if (null != facesContext) {
-		try {
-		    //PENDING - we should find a way to provide more information
-		    info = new MethodInfo(null, binding.getType(facesContext), null);
-		}
-		catch (Exception e) {
-		    throw new ELException(e);
-		}
-	    }
-	}
-		
-	return info;
-    }
-    
-    public Object invoke(ELContext context, Object[] params) throws ELException {
-	assert(null != binding);
-	
-	if (context == null) {
-	    throw new NullPointerException("ELContext -> null");
-    }
-
-	Object result = null;
-	FacesContext facesContext = (FacesContext) 
-	    context.getContext(FacesContext.class);
-	if (null != facesContext) {
-	    try {
-		result = binding.invoke(facesContext, params);
-	    }
-	    catch (Exception e) {
-		throw new ELException(e);
-	    }
-	}
-	return result;
-    }
-
-    public String getExpressionString() {
-	assert(null != binding);
-	return binding.getExpressionString();
-	
-    }
-
-    public boolean isLiteralText() {
-        assert (binding != null);
-        String expr = binding.getExpressionString();
-        return (!(expr.startsWith("#{")
-            && expr.endsWith("}")));    
-    }
-
-    public boolean equals(Object other) {              
-        
-        if (other == this) {
-            return true;
-        }
-        
-        if (other instanceof MethodExpressionMethodBindingAdapter) {
-            MethodBinding ob = ((MethodExpressionMethodBindingAdapter) other).getWrapped();
-            return (binding.equals(ob));
-        } else if (other instanceof MethodExpression) {
-            MethodExpression expression = (MethodExpression) other;
-            
-            // We'll need to do a little leg work to determine
-            // if the MethodBinding is equivalent to the 
-            // wrapped MethodExpression
-            String expr = binding.getExpressionString();
-            int idx = expr.indexOf('.');
-            String target = expr.substring(0, idx).substring(2);
-            String t = expr.substring(idx + 1);
-            String method = t.substring(0, (t.length() - 1));
-            
-            FacesContext context = FacesContext.getCurrentInstance();
-            ELContext elContext = context.getELContext();
-            MethodInfo controlInfo = expression.getMethodInfo(elContext);
-            
-            // ensure the method names are the same
-            if (!controlInfo.getName().equals(method)) {
-                return false;
-            }
-            
-            // Using the target, create an expression and evaluate
-            // it.           
-            ExpressionFactory factory = context.getApplication().getExpressionFactory();
-            ValueExpression ve = factory.createValueExpression(elContext,
-                                                               "#{" + target + '}',
-                                                               Object.class);
-            if (ve == null) {
-                return false;
-            }                
-                                              
-            Object result = ve.getValue(elContext);
-            
-            if (result == null) {
-                return false;
-            }
-            
-            
-            // Get all of the methods with the matching name and try
-            // to find a match based on controlInfo's return and parameter
-            // types
-            Method[] methods = result.getClass().getMethods();
-            for (Method meth : methods) {
-                if (meth.getName().equals(method)
-                     && meth.getReturnType().equals(controlInfo.getReturnType())
-                     && Arrays.equals(meth.getParameterTypes(), 
-                                      controlInfo.getParamTypes())) {
-                    return true;                      
-                }
-            }
-        }
-        return false;
-        
-    }
-
-    public int hashCode() {
-	assert(null != binding);
-
-	return binding.hashCode();
-    }
-    
-    public String getDelimiterSyntax() {
-       // PENDING (visvan) Implementation
-        return "";
-    }
-    
-    // 
-    // Methods from StateHolder
-    //
-
-    
-
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	Object result = null;
-	if (!tranzient) {
-	    if (binding instanceof StateHolder) {
-		Object [] stateStruct = new Object[2];
-		
-		// save the actual state of our wrapped binding
-		stateStruct[0] = ((StateHolder)binding).saveState(context);
-		// save the class name of the binding impl
-		stateStruct[1] = binding.getClass().getName();
-
-		result = stateStruct;
-	    }
-	    else {
-		result = binding;
-	    }
-	}
-
-	return result;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	// if we have state
-	if (null == state) {
-	    return;
-	}
-	
-	if (!(state instanceof MethodBinding)) {
-	    Object [] stateStruct = (Object []) state;
-	    Object savedState = stateStruct[0];
-	    String className = stateStruct[1].toString();
-	    MethodBinding result = null;
-	    
-	    Class toRestoreClass = null;
-	    if (null != className) {
-		try {
-		    toRestoreClass = loadClass(className, this);
-		}
-		catch (ClassNotFoundException e) {
-		    throw new IllegalStateException(e.getMessage());
-		}
-		
-		if (null != toRestoreClass) {
-		    try {
-			result = 
-			    (MethodBinding) toRestoreClass.newInstance();
-		    }
-		    catch (InstantiationException e) {
-			throw new IllegalStateException(e.getMessage());
-		    }
-		    catch (IllegalAccessException a) {
-			throw new IllegalStateException(a.getMessage());
-		    }
-		}
-		
-		if (null != result && null != savedState) {
-		    // don't need to check transient, since that was
-		    // done on the saving side.
-		    ((StateHolder)result).restoreState(context, savedState);
-		}
-		binding = result;
-	    }
-	}
-	else {
-	    binding = (MethodBinding) state;
-	}
-    }
-
-    private boolean tranzient = false;
-
-    public boolean isTransient() {
-	return tranzient;
-    }
-
-    public void setTransient(boolean newTransientMethod) {
-	tranzient = newTransientMethod;
-    }
-
-    //
-    // Helper methods for StateHolder
-    //
-
-    private static Class loadClass(String name, 
-            Object fallbackClass) throws ClassNotFoundException {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-         return Class.forName(name, true, loader);
-    }
- 
-
-    // 
-    // methods used by classes aware of this class's wrapper nature
-    //
-
-    public MethodBinding getWrapped() {
-	return binding;
-    }
-
-}
diff --git a/jsf-api/template-src/ValueBindingValueExpressionAdapter.java b/jsf-api/template-src/ValueBindingValueExpressionAdapter.java
deleted file mode 100644
index ff2e93e..0000000
--- a/jsf-api/template-src/ValueBindingValueExpressionAdapter.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
- 
-package @package@;
-
-import java.io.Serializable;
-
-import javax.faces.component.StateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-
-import javax.el.ValueExpression;
-import javax.el.ELException;
-
-/**
- * <p>Wrap a ValueExpression instance and expose it as a ValueBinding</p>
- *
- * @author Jacob Hookom
- */
- at protection@ class ValueBindingValueExpressionAdapter extends ValueBinding implements StateHolder, 
-    Serializable {
-
-    private static final long serialVersionUID = @serialVersionUID@;
-
-    private ValueExpression valueExpression= null;
-    private boolean tranzient;
-
-    public ValueBindingValueExpressionAdapter() {} // for StateHolder
-    
-    @protection@ ValueBindingValueExpressionAdapter(ValueExpression valueExpression) {
-        this.valueExpression = valueExpression;    
-    }
-    
-   
-    /* (non-Javadoc)
-     * @see javax.faces.el.ValueBinding#getExpressionString()
-     */
-    public String getExpressionString() {
-	assert(null != valueExpression);
-        return valueExpression.getExpressionString();
-    }
-
-    /* (non-Javadoc)
-     * @see javax.faces.el.ValueBinding#getType(javax.faces.context.FacesContext)
-     */
-    public Class getType(FacesContext context) throws EvaluationException,
-            PropertyNotFoundException {
-            
-        if (context == null) {
-	        throw new NullPointerException("FacesContext -> null");
-        }
-        Class result = null;
-        try {
-            result = valueExpression.getType(context.getELContext());
-        } catch (javax.el.PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(pnfe);
-        } catch (ELException elex) {
-            throw new EvaluationException(elex);
-        } 
-        return result;
-    }
-
-    /* (non-Javadoc)
-     * @see javax.faces.el.ValueBinding#getValue(javax.faces.context.FacesContext)
-     */
-    public Object getValue(FacesContext context) throws EvaluationException,
-            PropertyNotFoundException {
-        if (context == null) {
-	        throw new NullPointerException("FacesContext -> null");
-        }
-        Object result = null;
-        try {
-            result = valueExpression.getValue(context.getELContext());
-        } catch (javax.el.PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(pnfe);
-        } catch (ELException elex) {
-            throw new EvaluationException(elex);
-        }
-        return result;
-    }
-
-    /* (non-Javadoc)
-     * @see javax.faces.el.ValueBinding#isReadOnly(javax.faces.context.FacesContext)
-     */
-    public boolean isReadOnly(FacesContext context) throws EvaluationException,
-            PropertyNotFoundException {
-            
-        if (context == null) {
-	        throw new NullPointerException("FacesContext -> null");
-        }
-        boolean result = false;
-        try {
-            result = valueExpression.isReadOnly(context.getELContext());
-        } catch (ELException elex) {
-            throw new EvaluationException(elex);
-        }
-        return result;
-    }
-    
-    
-
-    /* (non-Javadoc)
-     * @see javax.faces.el.ValueBinding#setValue(javax.faces.context.FacesContext, java.lang.Object)
-     */
-    public void setValue(FacesContext context, Object value)
-            throws EvaluationException, PropertyNotFoundException {
-            
-        if (context == null) {
-	        throw new NullPointerException("FacesContext -> null");
-        }
-        try {
-            valueExpression.setValue(context.getELContext(), value);
-        } catch (javax.el.PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(pnfe);
-        } catch (javax.el.PropertyNotWritableException pnwe) {
-            throw new PropertyNotFoundException(pnwe);
-        } catch (ELException elex) {
-            throw new EvaluationException(elex);
-        }
-    }
-    
-    public boolean isTransient() {
-        return this.tranzient;
-    }
-    
-    public void setTransient(boolean tranzient) {
-        this.tranzient = tranzient;
-    }
-    
-    public Object saveState(FacesContext context){
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	Object result = null;
-	if (!tranzient) {
-	    if (valueExpression instanceof StateHolder) {
-		Object [] stateStruct = new Object[2];
-		
-		// save the actual state of our wrapped valueExpression
-		stateStruct[0] = ((StateHolder)valueExpression).saveState(context);
-		// save the class name of the valueExpression impl
-		stateStruct[1] = valueExpression.getClass().getName();
-
-		result = stateStruct;
-	    }
-	    else {
-		result = valueExpression;
-	    }
-	}
-
-	return result;
-	
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	// if we have state
-	if (null == state) {
-	    return;
-	}
-	
-	if (!(state instanceof ValueExpression)) {
-	    Object [] stateStruct = (Object []) state;
-	    Object savedState = stateStruct[0];
-	    String className = stateStruct[1].toString();
-	    ValueExpression result = null;
-	    
-	    Class toRestoreClass = null;
-	    if (null != className) {
-		try {
-		    toRestoreClass = loadClass(className, this);
-		}
-		catch (ClassNotFoundException e) {
-		    throw new IllegalStateException(e.getMessage());
-		}
-		
-		if (null != toRestoreClass) {
-		    try {
-			result = 
-			    (ValueExpression) toRestoreClass.newInstance();
-		    }
-		    catch (InstantiationException e) {
-			throw new IllegalStateException(e.getMessage());
-		    }
-		    catch (IllegalAccessException a) {
-			throw new IllegalStateException(a.getMessage());
-		    }
-		}
-		
-		if (null != result && null != savedState) {
-		    // don't need to check transient, since that was
-		    // done on the saving side.
-		    ((StateHolder)result).restoreState(context, savedState);
-		}
-		valueExpression = result;
-	    }
-	}
-	else {
-	    valueExpression = (ValueExpression) state;
-	}
-    }
-    
-    public boolean equals(Object other) {
-    
-        if (other == this) {
-            return true;
-        }
-        
-        if (other instanceof ValueBindingValueExpressionAdapter) {
-            ValueExpression expr = 
-                ((ValueBindingValueExpressionAdapter) other).getWrapped();
-            return (valueExpression.equals(expr));
-        } else if (other instanceof ValueBinding) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ValueBinding otherVB = (ValueBinding) other;
-            Class type = otherVB.getType(context);
-            if (type != null) {
-                return type.equals(valueExpression.getType(context.getELContext()));               
-            }            
-        }
-        return false;
-        
-    }
-
-    public int hashCode() {    
-        assert(null != valueExpression);
-        return valueExpression.hashCode();
-    }
-    
-    public ValueExpression getWrapped() {
-        return valueExpression;
-    }
-
-    //
-    // Helper methods for StateHolder
-    //
-
-    private static Class loadClass(String name, 
-            Object fallbackClass) throws ClassNotFoundException {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return Class.forName(name, true, loader);
-    }
- 
-
-
-}
diff --git a/jsf-api/template-src/ValueExpressionValueBindingAdapter.java b/jsf-api/template-src/ValueExpressionValueBindingAdapter.java
deleted file mode 100644
index 380fd26..0000000
--- a/jsf-api/template-src/ValueExpressionValueBindingAdapter.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
- 
-package @package@;
-
-import javax.el.ValueExpression;
-import javax.el.ELException;
-import javax.el.ELContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.context.FacesContext;
-import javax.faces.component.StateHolder;
-
-import java.io.Serializable;
-
-/**
- * <p>Wrap a ValueBinding instance and expose it as a
- * ValueExpression.</p>
- */
-
- at protection@ class ValueExpressionValueBindingAdapter extends ValueExpression implements Serializable, StateHolder {
-
-    private static final long serialVersionUID = @serialVersionUID@;
-
-    public ValueExpressionValueBindingAdapter() {}
-
-    private ValueBinding binding = null;
-
-    @protection@ ValueExpressionValueBindingAdapter(ValueBinding binding) {
-	assert(null != binding);
-	this.binding = binding;
-    }
-
-    //
-    // Methods from ValueExpression
-    //
-
-    public Object getValue(ELContext context) throws ELException {
-	assert(null != binding);
-	if (context == null) {
-	    throw new NullPointerException("ELContext -> null");
-    }
-	Object result = null;
-	FacesContext facesContext = (FacesContext) 
-	    context.getContext(FacesContext.class);
-	assert(null != facesContext);
-	try {
-	    result = binding.getValue(facesContext);
-	}
-	catch (Throwable e) {
-	    throw new ELException(e);
-	}
-	return result;
-    }
-
-    public void setValue(ELContext context, Object value) throws ELException {
-	assert(null != binding);
-	if (context == null) {
-	    throw new NullPointerException("ELContext -> null");
-    }
-	FacesContext facesContext = (FacesContext) 
-	    context.getContext(FacesContext.class);
-	assert(null != facesContext);
-	try {
-	    binding.setValue(facesContext, value);
-	}
-	catch (Throwable e) {
-	    throw new ELException(e);
-	}
-    }
-
-
-    public boolean isReadOnly(ELContext context) throws ELException {
-	assert(null != binding);
-	if (context == null) {
-	    throw new NullPointerException("ELContext -> null");
-    }
-	boolean result = false;
-	FacesContext facesContext = (FacesContext) 
-	    context.getContext(FacesContext.class);
-	assert(null != facesContext);
-	try {
-	    result = binding.isReadOnly(facesContext);
-	}
-	catch (Throwable e) {
-	    throw new ELException(e);
-	}
-	return result;
-    }
-
-    public Class<?> getType(ELContext context) throws ELException {
-	assert(null != binding);
-	if (context == null) {
-	    throw new NullPointerException("ELContext -> null");
-    }
-	Class result = null;
-	FacesContext facesContext = (FacesContext) 
-	    context.getContext(FacesContext.class);
-	assert(null != facesContext);
-	try {
-	    result = binding.getType(facesContext);
-	}
-	catch (Throwable e) {
-	    throw new ELException(e);
-	}
-	return result;
-    }
-
-    /**
-     * <p>Always return <code>false</code> since we can't possibly know
-     * if this is a literal text binding or not.</p>
-     */
-
-    public boolean isLiteralText() {
-	return false;
-    }
-    
-    public Class<?> getExpectedType() {
-	assert(null != binding);
-	Class result = null;
-	FacesContext context = FacesContext.getCurrentInstance();
-	try {
-	    Object value = binding.getValue(context);
-	    result = value.getClass();
-	}
-	catch (Throwable e) {
-	    result = null;
-	}
-	return result;
-    }
-
-    public String getExpressionString() {
-	assert(null != binding);
-	return binding.getExpressionString();
-	
-    }
-
-    public boolean equals(Object other) {
-    
-        if (other == this) {
-            return true;
-        }
-        
-        if (other instanceof ValueExpressionValueBindingAdapter) {
-            ValueBinding vb = 
-                ((ValueExpressionValueBindingAdapter) other).getWrapped();
-            return (binding.equals(vb));
-        } else if (other instanceof ValueExpression) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ValueExpression otherVE = (ValueExpression) other;
-            Class type = binding.getType(context);
-            if (type != null) {
-                return type.equals(otherVE.getType(context.getELContext()));
-            }            
-        }
-        return false;
-        
-    }
-
-    public int hashCode() {
-	assert(null != binding);
-
-	return binding.hashCode();
-    }
-    
-    public String getDelimiterSyntax() {
-        // PENDING (visvan) Implementation
-        return "";
-    }
-    
-    // 
-    // Methods from StateHolder
-    //
-
-    
-
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	Object result = null;
-	if (!tranzient) {
-	    if (binding instanceof StateHolder) {
-		Object [] stateStruct = new Object[2];
-		
-		// save the actual state of our wrapped binding
-		stateStruct[0] = ((StateHolder)binding).saveState(context);
-		// save the class name of the binding impl
-		stateStruct[1] = binding.getClass().getName();
-
-		result = stateStruct;
-	    }
-	    else {
-		result = binding;
-	    }
-	}
-
-	return result;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-	// if we have state
-	if (null == state) {
-	    return;
-	}
-	
-	if (!(state instanceof ValueBinding)) {
-	    Object [] stateStruct = (Object []) state;
-	    Object savedState = stateStruct[0];
-	    String className = stateStruct[1].toString();
-	    ValueBinding result = null;
-	    
-	    Class toRestoreClass = null;
-	    if (null != className) {
-		try {
-		    toRestoreClass = loadClass(className, this);
-		}
-		catch (ClassNotFoundException e) {
-		    throw new IllegalStateException(e.getMessage());
-		}
-		
-		if (null != toRestoreClass) {
-		    try {
-			result = 
-			    (ValueBinding) toRestoreClass.newInstance();
-		    }
-		    catch (InstantiationException e) {
-			throw new IllegalStateException(e.getMessage());
-		    }
-		    catch (IllegalAccessException a) {
-			throw new IllegalStateException(a.getMessage());
-		    }
-		}
-		
-		if (null != result && null != savedState) {
-		    // don't need to check transient, since that was
-		    // done on the saving side.
-		    ((StateHolder)result).restoreState(context, savedState);
-		}
-		binding = result;
-	    }
-	}
-	else {
-	    binding = (ValueBinding) state;
-	}
-    }
-
-    private boolean tranzient = false;
-
-    public boolean isTransient() {
-	return tranzient;
-    }
-
-    public void setTransient(boolean newTransientValue) {
-	tranzient = newTransientValue;
-    }
-
-    //
-    // Helper methods for StateHolder
-    //
-
-    private static Class loadClass(String name, 
-            Object fallbackClass) throws ClassNotFoundException {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return Class.forName(name, true, loader);
-    }
- 
-
-    // 
-    // methods used by classes aware of this class's wrapper nature
-    //
-
-    public ValueBinding getWrapped() {
-	return binding;
-    }
-
-}
diff --git a/jsf-ri/DEBUGGING_CACTUS_TESTS.txt b/jsf-ri/DEBUGGING_CACTUS_TESTS.txt
deleted file mode 100644
index 7a3df94..0000000
--- a/jsf-ri/DEBUGGING_CACTUS_TESTS.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-If a cactus goldenfile test fails, you can find information by:
-
-1) Looking in the jsf-ri/web directory for the goldenfile that corresponds to the vaule returned
-by the tests's getExpectedOutputFilename() method.  For instance, here:
-
-
-    public String getExpectedOutputFilename() {
-        return "RenderResponse_correct";
-    }
-
-
-2) Now that you know what the test *should* look like, check what it actually looks like by
-looking in the server logs.  You'll see an error like this:
-
-File Comparison failed: diff -u /Users/netdance/Work/sources/mojarra/jsf-ri/build/test/FacesResponse.txt /Users/netdance/Work/sources/mojarra/jsf-ri/build/test/RenderResponse_correct|#]
-
-3) Run the diff, you'll see the differences in the file.
-
-4) Update the file, replacing the parts that have changed because of your fix/mod.
-
-
diff --git a/jsf-ri/LICENSE-APACHE.txt b/jsf-ri/LICENSE-APACHE.txt
deleted file mode 100644
index 422da59..0000000
--- a/jsf-ri/LICENSE-APACHE.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-Copyright (C) 2002 The Apache Software Foundation. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modifica- tion, are permitted provided that the following conditions are
-met:
-
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions, and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-3. The end-user documentation included with the redistribution, if
-any,must include the following acknowledgment: "This product includes
-software developed by the Apache Software Foundation
-(http://www.apache.org/)." Alternately, this acknowledgment may appear
-in the software itself, if and wherever such third-party acknowledgments
-normally appear.
-
-4. The names "Apache Commons" and "Apache Software Foundation" must not
-be used to endorse or promote products derived from this software
-without prior written permission. For written permission, please contact
-apache at apache.org.
-
-5. Products derived from this software may not be called "Apache", nor
-may "Apache" appear in their name, without prior written permission of
-the Apache Software Foundation.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
-NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLU- DING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE. This software consists of voluntary
-contributions made by many individuals on behalf of the Apache Software
-Foundation. For more information on the Apache Software Foundation,
-please see <http://www.apache.org/>.
diff --git a/jsf-ri/LICENSE.TXT b/jsf-ri/LICENSE.TXT
deleted file mode 100644
index b4ffbe7..0000000
--- a/jsf-ri/LICENSE.TXT
+++ /dev/null
@@ -1,96 +0,0 @@
-COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 
-
-1. Definitions. 
-
-1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications. 
-
-1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. 
-
-1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. 
-
-1.4. Executable means the Covered Software in any form other than Source Code. 
-
-1.5. Initial Developer means the individual or entity that first makes Original Software available under this License. 
-
-1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. 
-
-1.7. License means this document. 
-
-1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 
-
-1.9. Modifications means the Source Code and Executable form of any of the following: A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; B. Any new file that contains any part of the Original Software or previous Modification; or C. Any new file that is contributed or otherwise made available under the terms of this License. 
-
-1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License. 
-
-1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 
-
-1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. 
-
-1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding sh [...]
-
-2. License Grants.
-
-2.1. The Initial Developer Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: 
-
-(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and 
-
-(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof);
-
-(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License;
-
-(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. 
-
-2.2. Contributor Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: 
-
-(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and 
-
-(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). 
-
-(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-
-(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. 
-
-3. Distribution Obligations. 
-
-3.1. Availability of Source Code. Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they  [...]
-
-3.2. Modifications. The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. 
-
-3.3. Required Notices. You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. 
-
-3.4. Application of Additional Terms. You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must m [...]
-
-3.5. Distribution of Executable Versions. You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute  [...]
-
-3.6. Larger Works. You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. 
-
-4. Versions of the License. 
-
-4.1. New Versions. Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. 
-
-4.2. Effect of New Versions. You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the versi [...]
-
-4.3. Modified Versions. When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. 
-
-5. DISCLAIMER OF WARRANTY. COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHE [...]
-
-6. TERMINATION. 
-
-6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 
-
-6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights gran [...]
-
-6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. 
-
-7. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR M [...]
-
-8. U.S. GOVERNMENT END USERS. The Covered Software is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R. 252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only tho [...]
-
-9. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions [...]
-
-10. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 
-**********************************************************************
-
-NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL): This code is released under the CDDL and shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
-
-*********************************************************************
diff --git a/jsf-ri/THIRDPARTYLICENSEREADME.txt b/jsf-ri/THIRDPARTYLICENSEREADME.txt
deleted file mode 100644
index 4447816..0000000
--- a/jsf-ri/THIRDPARTYLICENSEREADME.txt
+++ /dev/null
@@ -1,348 +0,0 @@
-DO NOT TRANSLATE OR LOCALIZE.
-
-A) The following software may be included in this product: Apache Commons Logging,  Apache Commons Digester, Apache Commons Bean Utils, Apache Commons Collections..  Use of any of this software is governed by the terms of the license below: 
-
-/*
- * ====================================================================
- * 
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgement may appear in the software itself,
- *    if and wherever such third-party acknowledgements normally appear.
- *
- * 4. The names "Apache", "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written 
- *    permission, please contact apache at apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their name without prior 
- *    written permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */ 
- 
-B) The following software may be included in this product: Mozilla, Mozilla Rhino JS.  Use of any of this software is governed by the terms of the license below: 
-
-MOZILLA PUBLIC LICENSE
-Version 1.1
-
-1. Definitions.
-
-      1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party.
-
-      1.1. ''Contributor'' means each entity that creates or contributes to the creation of Modifications.
-
-      1.2. ''Contributor Version'' means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
-
-      1.3. ''Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
-
-      1.4. ''Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data.
-
-      1.5. ''Executable'' means Covered Code in any form other than Source Code.
-
-      1.6. ''Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
-
-      1.7. ''Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
-
-      1.8. ''License'' means this document.
-
-      1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
-
-      1.9. ''Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
-            A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
-
-            B. Any new file that contains any part of the Original Code or previous Modifications.
-       
-      1.10. ''Original Code'' means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
-
-      1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation,  method, process, and apparatus claims, in any patent Licensable by grantor.
-
-      1.11. ''Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate dec [...]
-
-1.12. "You'' (or "Your")  means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise [...]
-
-2. Source Code License.
-
-      2.1. The Initial Developer Grant.
-      The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
-            (a)  under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and
-
-            (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof).
-              (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License.
-
-            (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code;  or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices.
-       
-      2.2. Contributor Grant.
-      Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license
-             
-            (a)  under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and
-
-            (b) under Patent Claims infringed by the making, using, or selling of  Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of  Modifications made by that Contributor with its Contributor Version (or portions of such combination).
-
-            (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code.
-
-      (d)    Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2)  separate from the Contributor Version;  3)  for infringements caused by: i) third party modifications of Contributor Version or ii)  the combination of Modifications made by that Contributor with other software  (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the [...]
-
-
-3. Distribution Obligations.
-
-      3.1. Application of License.
-      The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or rest [...]
-
-      3.2. Availability of Source Code.
-      Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months [...]
-
-      3.3. Description of Modifications.
-      You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the ori [...]
-
-      3.4. Intellectual Property Matters
-            (a) Third Party Claims.
-            If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as desc [...]
-
-            (b) Contributor APIs.
-            If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file.
-       
-                (c)    Representations.
-      Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License.
-
-
-      3.5. Required Notices.
-      You must duplicate the notice in Exhibit A in each file of the Source Code.  If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice.  If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A.  You must also duplicate this License in any documentatio [...]
-
-      3.6. Distribution of Executable Versions.
-      You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You  [...]
-
-      3.7. Larger Works.
-You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
-If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited b [...]
-
-5. Application of this License.
-
-This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-      6.1. New Versions.
-      Netscape Communications Corporation (''Netscape'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
-
-      6.2. Effect of New Versions.
-      Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License.
-
-      6.3. Derivative Works.
-If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases ''Mozilla'', ''MOZILLAPL'', ''MOZPL'', ''Netscape'', "MPL", ''NPL'' or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains ter [...]
-
-7. DISCLAIMER OF WARRANTY.
-
-COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NE [...]
-
-8. TERMINATION.
-
-      8.1.  This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
-
-      8.2.  If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant")  alleging that:
-
-      (a)  such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i)  agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) w [...]
-
-      (b)  any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant.
-
-      8.3.  If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
-
-8.4.  In the event of termination under Sections 8.1 or 8.2 above,  all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
-UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DA [...]
-
-10. U.S. GOVERNMENT END USERS.
-
-The Covered Code is a ''commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ''commercial computer software'' and ''commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
-
-11. MISCELLANEOUS.
-
-This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered o [...]
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-Initial Developer may designate portions of the Covered Code as ?Multiple-Licensed?.  ?Multiple-Licensed? means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the MPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A.
-
-
-EXHIBIT A -Mozilla Public License.
-
-      ``The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
-      http://www.mozilla.org/MPL/
-
-      Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
-      ANY KIND, either express or implied. See the License for the specific language governing rights and
-      limitations under the License.
-
-      The Original Code is ______________________________________.
-
-      The Initial Developer of the Original Code is ________________________. Portions created by
-       ______________________ are Copyright (C) ______ _______________________. All Rights
-      Reserved.
-
-      Contributor(s): ______________________________________.
-
-      Alternatively, the contents of this file may be used under the terms of the _____ license (the  ?[___] License?), in which case the provisions of [______] License are applicable  instead of those above.  If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting  the provisions above and replace  them with the notice and other provisions r [...]
-
-[NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] 
-
-
-C) The following software may be included in this product:htmlunit.  Use of any of this software is governed by the terms of the license below: 
-
-Project License 
-
-/*
-* Copyright (c) 2002, 2003 Gargoyle Software Inc. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice,
-*    this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright notice,
-*    this list of conditions and the following disclaimer in the documentation
-*    and/or other materials provided with the distribution.
-* 3. The end-user documentation included with the redistribution, if any, must
-*    include the following acknowledgment:
-*
-*       "This product includes software developed by Gargoyle Software Inc.
-*        (http://www.GargoyleSoftware.com/)."
-*
-*    Alternately, this acknowledgment may appear in the software itself, if
-*    and wherever such third-party acknowledgments normally appear.
-* 4. The name "Gargoyle Software" must not be used to endorse or promote
-*    products derived from this software without prior written permission.
-*    For written permission, please contact info at GargoyleSoftware.com.
-* 5. Products derived from this software may not be called "HtmlUnit", nor may
-*    "HtmlUnit" appear in their name, without prior written permission of
-*    Gargoyle Software Inc.
-*
-* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
-* SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-* OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE,
-* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-C) The following software may be included in this product: neckohtml.  Use of any of this software is governed by the terms of the license below: 
-
-
-The CyberNeko Software License, Version 1.0
-
- 
-(C) Copyright 2002, Andy Clark.  All rights reserved.
- 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer. 
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-3. The end-user documentation included with the redistribution,
-   if any, must include the following acknowledgment:  
-     "This product includes software developed by Andy Clark."
-   Alternately, this acknowledgment may appear in the software itself,
-   if and wherever such third-party acknowledgments normally appear.
-
-4. The names "CyberNeko" and "NekoHTML" must not be used to endorse
-   or promote products derived from this software without prior 
-   written permission. For written permission, please contact 
-   andy at cyberneko.net.
-
-5. Products derived from this software may not be called "NekoHTML",
-   nor may "NekoHTML" appear in their name, without prior written
-   permission of the author.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 
-OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
-BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE, 
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-====================================================================
-
-This license is based on the Apache Software License, version 1.1.
-
-D) The following software may be included in this product: JSTL.  Use of any of this software is governed by the terms of the license below: 
-
-
-Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (base64 @ miginfocom . com)
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-Redistributions of source code must retain the above copyright notice, this list
-of conditions and the following disclaimer.
-
-Redistributions in binary form must reproduce the above copyright notice, this
-list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.  Neither the name of the MiG InfoCom AB nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWIS [...]
-
-
diff --git a/jsf-ri/build-source.xml b/jsf-ri/build-source.xml
deleted file mode 100644
index 8d93de4..0000000
--- a/jsf-ri/build-source.xml
+++ /dev/null
@@ -1,678 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ************ JSF build file ************************************** -->
-
-<project name="JSF-RI" default="main" basedir=".">
-
-
-    <!-- ************ Per user local properties ******************************* -->
-
-    <property file="${user.home}/build.properties"/>    
-    <property file="../build.properties"/>    
-    <import file="${jsf.build.home}/common/ant/source-build-setup.xml"/>
-
-
-    <!-- ******************* Structural ************************** -->
-
-    <!-- The base directory for compilation targets -->
-    <property name="build.dir" value="build"/>
-    <property name="target.dir" value="target"/>
-   <property name="build.classes.dir" value="${build.dir}/classes"/>
-    <property name="build.generate.dir" value="${build.dir}/generate"/>
-    <property name="build.generate.tld.dir"
-              value="${build.generate.dir}/conf/share"/>
-
-    <!-- The base directory for binary dependency libs under local version
-         control -->
-    <property name="local.lib.dir"
-              value="${basedir}/../lib"/>
-
-    <!-- The base directory for distribution targets -->
-    <property name="dist.dir" value="${basedir}/dist"/>
-
-    <!-- The base directory for component sources -->
-    <property name="source.dir" value="${basedir}/src"/>
-
-    <!-- The base directory for component tests -->
-    <property name="test.dir" value="${basedir}/test"/>
-
-    <!-- Misc -->
-    <property name="conf.share.dir" value="${basedir}/conf/share"/>
-    <property name="name" value="jsf-impl"/>
-
-    <property name="dependency.base.dir" value="${jsf.build.home}/dependencies"/>
-    <property name="dependency.jar.dir" value="${dependency.base.dir}/jars"/>
-    <property name="yuicompressor.jar" value="${dependency.jar.dir}/yuicompressor.jar"/>
-
-    <path id="impl.compile.classpath">
-        <pathelement location="${jsf-api.jar}"/>
-        <path refid="apache.commons.classpath"/>
-        <path refid="compile.classpath"/>
-        <pathelement location="${tools.dir}/build/classes"/>
-    </path>
-
-
-    <!-- ************ Executable Targets ************************************** -->
-
-
-    <target name="init"
-            description="Initialize and evaluate conditionals">
-        <echo message="-------- ${impl.name} ${impl.version} --------"/>
-    </target>
-
-    <target name="prepare" depends="init"
-            description="Prepare build directory">
-        <mkdir dir="${build.dir}"/>
-        <mkdir dir="${build.generate.dir}"/>
-        <mkdir dir="${build.generate.tld.dir}"/>
-        <mkdir dir="${build.classes.dir}"/>
-        <mkdir dir="${build.classes.dir}/com/sun/faces/xhtml"/>
-        <mkdir dir="${build.dir}/javadocs"/>
-        <mkdir dir="${build.dir}/vdldocs/jsp"/>
-        <mkdir dir="${build.dir}/vdldocs/facelets"/>
-        <mkdir dir="${build.dir}/lib"/>
-        <antcall target="delete.and.remkdir.build.generate.dir" />
-    </target>
-
-    <target name="delete.and.remkdir.build.generate.dir"
-            unless="skip.delete.generate">
-        <delete dir="${build.generate.dir}"/>
-        <mkdir dir="${build.generate.dir}"/>
-    </target>
-
-    <target name="copy.template.sources" depends="prepare"
-            description="Copy template sources from ${tools.dir}/template-source">
-
-        <mkdir dir="${build.generate.dir}/com/sun/faces/util"/>
-        <filter token="protection" value="public"/>
-
-        <filter token="package" value="com.sun.faces.util"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/com/sun/faces/util"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/com/sun/faces/util"
-              filtering="true"/>
-        <filter token="package" value="com.sun.faces.application.view"/>
-        <copy file="${tools.dir}/template-src/StateHolderSaver.java"
-              todir="${build.generate.dir}/com/sun/faces/application/view"
-              filtering="true"/>
-
-        <filter token="protection" value="public"/>
-
-        <filter token="package" value="com.sun.faces.application"/>
-        <copy todir="${build.generate.dir}/com/sun/faces/application"
-              filtering="true">
-            <fileset dir="${api.dir}/template-src">
-                <include name="*Adapter.java"/>
-            </fileset>
-        </copy>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/MethodBindingMethodExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="6351778415298720238L"/>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/MethodExpressionMethodBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="5639227653537610567L"/>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/ValueExpressionValueBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="2990621816592041196L"/>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/ValueBindingValueExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="7410146713650507654L"/>
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/view/StateHolderSaver.java"
-              token="@serialVersionUID@"
-              value="4866548262845392093L"/>
-    </target>
-
-    <target name="check.taglib.generation.necessity">
-        <uptodate property="skip.taglib.generation"
-                  targetfile="${build.generate.dir}/last-taglib-generation">
-            <srcfiles dir="${api.dir}/doc">
-                <include name="standard-html-renderkit.xml"/>
-            </srcfiles>
-        </uptodate>
-    </target>
-
-    <target name="generate"
-            depends="check.taglib.generation.necessity"
-            unless="skip.taglib.generation">
-        <path id="ant.classpath">
-            <pathelement location="${myenv.ANT_HOME}/lib/ant.jar"/>
-        </path>
-
-        <copy todir="${build.dir}">
-            <fileset dir="${tools.dir}/conf">
-                <include name="TAG-*"/>
-            </fileset>
-        </copy>
-
-        <mkdir dir="${tools.dir}/build/classes"/>
-        <jsf.javac srcdir="${tools.dir}/src/main/java"
-               destdir="${tools.dir}/build/classes">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <path refid="ant.classpath"/>
-            </classpath>
-        </jsf.javac>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${tools.dir}/src/main/java"
-                     includes="**/*.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${impl.dir}/src"
-                     includes="**/LogStrings.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes/com/sun/faces"
-              flatten="true">
-            <fileset dir="${api.dir}/doc"
-                      includes="*.dtd,*.xsd"/>
-        </copy>
-        <taskdef name="generateTaglib"
-                 classname="com.sun.faces.ant.TaglibGenTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <taskdef name="generateAttrManager"
-                 classname="com.sun.faces.ant.AttributeManagerGenTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <generateTaglib
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <jvmarg line="${debug.jvm.args}"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateTaglib>
-        <generateAttrManager
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <jvmarg line="${debug.jvm.args}"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateAttrManager>
-        <!--
-        <copy todir="${build.generate.dir}">
-
-
-            <fileset dir="${tools.dir}/src/main/java">
-                <include name="com/sun/faces/config/DigesterFactory.java"/>
-                <include name="com/sun/faces/config/beans/*.java"/>
-                <include name="com/sun/faces/config/rules/*.java"/>
-                <include name="com/sun/faces/util/*.java"/>
-            </fileset>
-
-        </copy>
-        -->
-
-
-        <touch file="${build.generate.dir}/last-taglib-generation"/>
-
-        <antcall target="create.runtime.config"/>
-
-    </target>
-
-    <target name="compile" depends="prepare,generate,copy.template.sources"
-            description="Just compile the classes">
-
-        <!-- Run javac through everything -->
-        <jsf.javac srcdir="${source.dir}:${build.generate.dir}"
-                   destdir="${build.classes.dir}"
-                   excludes="**/ManagedBeanFactoryImpl.java">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-            </classpath>
-        </jsf.javac>
-
-        <copy todir="${build.classes.dir}">
-            <fileset dir="${source.dir}" includes="**/*.properties,**/*.js,**/*.xsd"/>
-            <!--<fileset dir="${tools.dir}/src/main/java" includes="**/*.properties"/>-->
-        </copy>
-
-        <!-- Massage the version number into LogStrings.properties -->
-        <replace dir="${build.classes.dir}/com/sun/faces/"
-                 token="|version.string|"
-                 value="${impl.version.number} (${build.type} ${build.number})">
-            <include name="LogStrings*.properties"/>
-        </replace>
-
-        <copy todir="${build.classes.dir}/com/sun/faces">
-            <fileset dir="${api.dir}/doc">
-                <include name="*.dtd"/>
-                <include name="standard-html-renderkit.xml"/>
-                <include name="*.xsd"/>
-            </fileset>
-        </copy>
-
-        <concat destfile="${build.classes.dir}/META-INF/resources/javax.faces/jsf-uncompressed.js" fixlastline="yes">
-            <filelist dir="${api.dir}/src/main/resources">
-                <file name="jsf.js"/>
-            </filelist>
-            <filelist  dir="${basedir}/resources">
-                <file name="mojarra.js"/>
-            </filelist>
-        </concat>
-
-        <java jar="${yuicompressor.jar}" fork="true" failonerror="true"
-            args="-o ${build.classes.dir}/META-INF/resources/javax.faces/jsf.js ${build.classes.dir}/META-INF/resources/javax.faces/jsf-uncompressed.js"/>
-        <!--
-            RELEASE_PENDING (rlubke,driscoll)
-            For now these are copied to the root of the jsf-impl.jar, but
-            eventually they should be in com.sun.faces per the copy statement
-            above.
-        -->
-        <copy todir="${build.classes.dir}/com/sun/faces/xhtml">
-            <fileset dir="${conf.share.dir}/xhtml">
-                <include name="*.dtd"/>
-                <include name="*.ent"/>
-            </fileset>
-        </copy>
-
-        <copy file="conf/share/javax.servlet.ServletContainerInitializer"
-              toDir="${build.classes.dir}/META-INF/services" />
-        <copy toDir="${build.classes.dir}/com/sun/faces/metadata/taglib">
-            <fileset dir="${conf.share.dir}">
-                <include name="*.taglib.xml" /> 
-            </fileset>
-        </copy>
-        <copy file="${build.generate.tld.dir}/html_basic.tld"
-              toDir="${build.classes.dir}/META-INF"/>
-        <copy file="conf/xslt/jsf1_0-1_1toSchema.xsl"
-              toDir="${build.classes.dir}/com/sun/faces"/>
-        <copy file="conf/xslt/facelets1_0-2_0toSchema.xsl"
-              toDir="${build.classes.dir}/com/sun/faces"/>
-        <unzip src="${jsf.build.home}/lib/injectionproviders.jar"
-               dest="${build.classes.dir}"/>
-        <copy todir="${build.classes.dir}/META-INF">
-            <fileset dir="${conf.share.dir}">
-                <include name="jsf_core.tld"/>
-                <include name="mojarra_ext.tld"/>
-                <include name="mojarra_ext.taglib.xml"/>
-                <include name="facelet-dev*.xml"/>
-                <include name="error-include.xhtml"/>
-            </fileset>
-        </copy>
-
-    </target>
-
-    <target name="clean"
-            description="Clean build and distribution directories">
-        <ant antfile="build-tests.xml" target="remove.tstamp"/>
-        <delete dir="${build.dir}"/>
-        <delete dir="${target.dir}"/>
-        <delete dir="${dist.dir}"/>
-        <delete dir="${impl.test.results.dir}"/>
-        <delete>
-            <fileset dir="." includes="**/*~" defaultexcludes="no"/>
-            <fileset dir="." includes="**/.nbattrs" defaultexcludes="no"/>
-        </delete>
-        <delete file="jsf-${impl.version}.zip"/>
-        <delete file="jsf-${impl.version}_src.zip"/>
-        <ant dir="${basedir}/systest" inheritall="false" target="clean"/>
-        <ant dir="${basedir}/systest-per-webapp" inheritall="false"
-             target="clean"/>
-         <delete dir="${tools.dir}/build"/>
-    </target>
-
-    <target name="all" depends="clean,prepare,compile"
-            description="Clean and compile all components"/>
-
-    <!-- Create the source distribution -->
-    <target name="ri.source">
-        <zip destfile="${dist.dir}/jsf-ri-src-${impl.version}.zip">
-            <zipfileset dir="${basedir}"
-                        includes="build.xml build-tests.xml README COPYRIGHT LICENSE*.*"
-                        prefix="jsf-ri-src-${impl.version}"/>
-            <zipfileset dir="${source.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/src"/>
-            <zipfileset dir="${test.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/test"/>
-            <zipfileset dir="${basedir}"
-                        includes="conf/** web/**"
-                        prefix="jsf-ri-src-${impl.version}"/>
-        </zip>
-    </target>
-
-
-    <target name="dist" depends="jars" description="Build distribution files">
-
-        <mkdir dir="${dist.dir}"/>
-
-        <antcall target="vdldocs"/>
-
-        <!-- Create the binary distribution -->
-        <zip destfile="${dist.dir}/jsf-ri-${impl.version}.zip">
-            <zipfileset dir="${build.dir}"
-                        includes="lib/**,vdldocs/**"
-                        prefix="jsf-ri-${impl.version}"/>
-        </zip>
-
-        <!-- Create a buildable source distribution -->
-        <zip destfile="${dist.dir}/jsf-ri-src-${impl.version}.zip">
-            <zipfileset dir="${basedir}"
-                        includes="build.xml build-tests.xml README COPYRIGHT LICENSE*.*"
-                        prefix="jsf-ri-src-${impl.version}"/>
-            <zipfileset dir="${source.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/src"/>
-
-            <zipfileset dir="${test.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/test"/>
-            <zipfileset dir="${basedir}/systest"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/systest"/>
-        </zip>
-        <antcall target="ri.source"/>
-
-    </target>
-
-    <target name="vdldocs">
-
-      <antcall target="jsp.tlddocs" />
-      <antcall target="facelets.tlddocs" />
-
-    </target>
-
-    <target name="jsp.tlddocs">
-        <java fork="true" jar="${tlddoc.jar}">
-            <arg line="-d ${build.dir}/vdldocs/jsp"/>
-            <arg line="-windowtitle 'JSF ${spec.version} View Declaration Language: JSP Variant'"/>
-            <arg value="${build.generate.tld.dir}/html_basic.tld"/>
-            <arg value="${conf.share.dir}/jsf_core.tld"/>
-        </java>
-        <copy todir="${build.dir}/vdldocs/jsp">
-           <fileset dir="${basedir}/../jsf-api/doc/">
-             <include name="changed*.png" />
-           </fileset>
-        </copy>
-
-    </target>
-
-    <target name="facelets.tlddocs">
-        <taskdef name="generateFaceletsTld"
-                 classname="com.sun.faces.ant.FaceletsTLDGenTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-
-        <generateFaceletsTld
-              generatorConfig="${tools.dir}/conf/FaceletsHtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <jvmarg line="${debug.jvm.args}"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateFaceletsTld>
-        <java fork="true" jar="${tlddoc.jar}">
-            <arg line="-d ${build.dir}/vdldocs/facelets"/>
-            <arg line="-windowtitle 'JSF ${spec.version} View Declaration Language: Facelets Variant'"/>
-            <arg line="-xslt ${conf.share.dir}/tlddoc-resources"/>
-            <arg value="${conf.share.dir}/facelets_jsf_core.tld"/>
-            <arg value="${build.generate.tld.dir}/facelets_html_basic.tld"/>
-            <arg value="${conf.share.dir}/composite.tld"/>
-            <arg value="${conf.share.dir}/ui.tld"/>
-            <arg value="${conf.share.dir}/jstl-core.tld"/>
-            <arg value="${conf.share.dir}/jstl-fn.tld"/>
-        </java>
-        <copy todir="${build.dir}/vdldocs/facelets">
-           <fileset dir="${basedir}/../jsf-api/doc/">
-             <include name="changed*.png" />
-           </fileset>
-        </copy>
-
-    </target>
-
-
-    <target name="compile.test" depends="prepare,compile"
-            description="Run unit tests">
-
-        <ant antfile="build-tests.xml" target="compile.test"/>
-
-    </target>
-
-    <target name="test"
-             depends="init.test,run.junit.test,run.cactus.test,run.systest,run.systest-per-webapp"
-            description="Run all unit and system tests"/>
-
-    <target name="init.test">
-        <mkdir dir="${impl.test.results.dir}"/>
-    </target>
-
-    <target name="run.systest" description="Run system tests"
-            depends="init.test">              
-        <ant dir="${basedir}/systest" inheritall="false" target="test"/>        
-    </target>
-
-    <target name="run.systest-per-webapp"
-            description="Run per-webapp system tests"
-            depends="init.test,compile.test">
-        <ant dir="${basedir}/systest-per-webapp" inheritall="false"
-             target="test"/>
-        <ant dir="${basedir}/systest-per-webapp" inheritall="false"
-             target="remove"/>
-    </target>
-
-
-    <target name="run.junit.test" depends="init.test,compile.test"
-            description="Run unit tests not requiring cactus">
-        <ant antfile="build-tests.xml" target="run.test"/>
-    </target>
-
-    <target name="run.cactus.test" depends="init.test,compile.test"
-            description="Run unit tests requiring cactus">
-        <ant antfile="build-tests.xml" target="execute.cactus.tests"/>
-    </target>
-
-    <target name="force.run.cactus.test" depends="init.test,compile.test"
-            description="Run unit tests requiring cactus, forcing reinstall">
-        <ant antfile="build-tests.xml" target="force.execute.cactus.tests"/>
-    </target>   
-
-    <target name="prepare.test.webapp" depends="init.test">
-        <echo>Invoking target prepare.test.webapp</echo>
-        <ant antfile="build-tests.xml" target="prepare.test.webapp"/>
-        <echo>Invoking target build.war in systest</echo>
-        <ant dir="${basedir}/systest" inheritall="false" target="build.war"/>
-    </target>
-
-    <!-- 
-         =================================================================== 
-           Create the jars
-         =================================================================== 
-    -->
-
-    <target name="jars" depends="compile">
-
-        <copy file="${basedir}/mojarra-jsf-impl.bnd" tofile="tmp.bnd"/>
-        <replace file="tmp.bnd"
-                 token="@spec.version@"
-                 value="${spec.version}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.name@"
-                 value="${impl.name}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.version@"
-                 value="${impl.version}"/>
-        <if>
-            <equals arg1="${build.type}" arg2=""/>
-            <then>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}"/>
-            </then>
-            <else>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}-${build.type}"/>
-            </else>
-        </if>
-        <replace file="tmp.bnd"
-                 token="@extension.name@"
-                 value="com.sun.faces"/>
-        <jsf.osgi.jar jarfile="${build.dir}/lib/${name}.jar"
-                      bndfile="tmp.bnd"
-                      basedir="${build.classes.dir}"
-                      extension-name="com.sun.faces"/>
-        <delete file="tmp.bnd"/>
-    </target>
-
-    <target name="main" depends="jars"/>
-
-    <target name="create.runtime.config">
-<!--    in="${build.dir}/classes/com/sun/faces/standard-html-renderkit.xml"-->
-        <xslt in="${api.dir}/doc/standard-html-renderkit.xml" 
-              out="merged.xml"
-              style="conf/xslt/merge-config.xsl">
-        </xslt>
-        <replace file="${basedir}/merged.xml">
-            <replacetoken><![CDATA[xmlns:jsf="http://java.sun.com/xml/ns/javaee"]]></replacetoken>
-            <replacevalue><![CDATA[]]></replacevalue>
-        </replace>
-        <replace file="${basedir}/merged.xml">
-            <replacetoken><![CDATA[ >]]></replacetoken>
-            <replacevalue><![CDATA[>]]></replacevalue>
-        </replace>
-        <xslt in="${basedir}/merged.xml"
-              out="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml"
-              style="conf/xslt/prune-tool-data.xsl">
-        </xslt>
-        <replace file="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml">
-            <replacetoken><![CDATA[xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"]]></replacetoken>
-        </replace>
-        <replace file="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml">
-            <replacetoken><![CDATA[ >]]></replacetoken>
-            <replacevalue><![CDATA[>]]></replacevalue>
-        </replace>
-        <replace file="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml">
-            <replacetoken><![CDATA[<faces-config>]]></replacetoken>
-            <replacevalue><![CDATA[
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">]]>
-            </replacevalue>
-        </replace>
-        <delete file="${basedir}/merged.xml"/>
-    </target>
-
-
-    <target name="passthru">
-        <ant antfile="build-tests.xml" target="passthru"/>
-    </target>
-
-    <target name="prepare.cactus.webapp">
-        <ant antfile="build-tests.xml" target="prepare.test.webapp"/>
-    </target>
-
-     <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO YOUR LOCAL
-       M2 REPOSITORY
-    -->
-
-    <target name="mvn.deploy.snapshot.local" description="Deploy a SNAPSHOT build to the local maven repo">
-        <mvn.deploy.snapshot.local type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted.local">
-        <mvn.deploy.promoted.local type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.release.local">
-        <mvn.deploy.release.local type="impl"/>
-    </target>
-
-
-    <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO THE
-       JAVA.NET M2 REPOSITORY
-    -->
-     <target name="mvn.deploy.snapshot">
-        <mvn.deploy.snapshot type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted">
-        <mvn.deploy.promoted type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.release">
-        <mvn.deploy.release type="impl"/>
-    </target>
-
-    
-</project>
diff --git a/jsf-ri/build-tests.xml b/jsf-ri/build-tests.xml
deleted file mode 100644
index d7f9fef..0000000
--- a/jsf-ri/build-tests.xml
+++ /dev/null
@@ -1,524 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<project name="Java Server Faces Unit Tests" basedir=".">
-
-    <!--
-            This is a generic build.xml file for Ant that is used to run the
-            Java Server Faces unit tests. This build file *must* be called from the
-            build.xml file in order to inherit most of it's needed properties
-            (See below for the list of these properties).
-    -->
-
-    <!-- ========== Prerequisite Properties =================================== -->
-
-    <!-- ========== Initialization Properties ================================= -->
-
-    <!-- ========== Derived Properties ======================================== -->
-
-    <!--
-            These property values are derived from values defined above, and
-            generally should NOT be overridden by command line settings
-    -->
-
-    <property file="${user.home}/build.properties"/>
-    <property file="../build.properties"/>
-    <import file="${jsf.build.home}/common/ant/common.xml"/>    
-
-    <!-- Default value for debugging arguments is no.  Override in
-         build.properties -->
-    <property name="debug.jvm.args" value=""/>
-
-    <!-- Source directory for tests -->
-    <property name="src.test.dir" value="${basedir}/test"/>
-
-    <!-- Configuration directory for tests -->
-    <property name="conf.test.dir" value="conf/test"/>
-
-    <!-- Output directory for tests -->
-    <property name="out.test.dir" value="${basedir}/build/test"/>
-
-    <!-- Compilation Classpath -->
-    <path id="test.compile.classpath">
-        <pathelement location="${conf.test.dir}"/>
-        <pathelement location="${jsf-api.jar}"/>      
-        <pathelement location="${jsf-impl.jar}"/>
-        <pathelement location="${jsf.test.jar}"/>
-        <path refid="compile.classpath"/>
-        <path refid="cactus.compile.classpath"/>        
-        <!-- <path refid="apache.commons.classpath"/> -->
-    </path>
-
-    <path id="test.runtime.classpath">
-        <pathelement location="${out.test.dir}/classes"/>
-        <pathelement location="${conf.test.dir}"/> 
-        <pathelement location="${jsf-api.jar}"/>      
-        <pathelement location="${jsf-impl.jar}"/>
-        <pathelement location="${jsf.test.jar}"/>
-        <!-- Temporary until javax.security is available on maven -->
-        <pathelement location="${dependency.base.dir}/glassfish/lib/javaee.jar"/>
-        <path refid="cactus.runtime.classpath"/>        
-    </path>
-
-    <!-- ========== Executable Targets ======================================== -->
-
-    <!--
-            Initialization of custom Ant tasks
-    -->
-    <target name="init">
-        <taskdef name="runservertests"
-                 classname="org.apache.cactus.integration.ant.RunServerTestsTask">
-            <classpath>
-                <path refid="test.runtime.classpath"/>
-            </classpath>
-        </taskdef>
-
-        <uptodate property="skip.build"
-                  targetfile="${out.test.dir}/last-testrun">
-            <srcfiles dir="${basedir}">
-                <include name="src/**/*.*"/>
-                <include name="test/**/*.*"/>
-                <include name="conf/**/*.*"/>
-                <include name="web/test/**/*.*"/>       
-            </srcfiles>
-        </uptodate>
-    </target>
-
-
-    <!-- 
-            Create directories and copy files for the struts tests
-    -->
-    <target name="prepare.test" depends="init">
-
-       
-        <mkdir dir="${out.test.dir}/classes"/>
-        <!-- Create a lib directory where needed libs for the test war will
-             be put -->
-        <!--<mkdir dir="${out.test.dir}/WEB-INF/lib"/>
-
-        <copy file="${build.classes}/com/sun/faces/util/MessageFactory.class"
-              tofile="${out.test.dir}/WEB-INF/classes/com/sun/faces/util/MessageFactory.class"/>
-        <copy file="${build.classes}/com/sun/faces/util/MessageFactory$BindingFacesMessage.class"
-              tofile="${out.test.dir}/WEB-INF/classes/com/sun/faces/util/MessageFactory$BindingFacesMessage.class"/>-->
-
-    </target>
-
-    <!-- 
-            Compile unit tests
-    -->
-    <target name="compile.test" depends="prepare.test">
-        <mkdir dir="${out.test.dir}/classes/com/sun/faces/application"/>
-        <filter token="package" value="com.sun.faces.application"/>
-        <filter token="protection" value="public"/>
-        <copy todir="${out.test.dir}/classes/com/sun/faces/application"
-              filtering="true">
-            <fileset dir="${api.dir}/template-src">
-                <include name="*Adapter.java"/>
-            </fileset>
-        </copy>
-        <replace
-              file="${out.test.dir}/classes/com/sun/faces/application/MethodBindingMethodExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="6351778415298720238L"/>
-
-        <replace
-              file="${out.test.dir}/classes/com/sun/faces/application/MethodExpressionMethodBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="5639227653537610567L"/>
-
-        <replace
-              file="${out.test.dir}/classes/com/sun/faces/application/ValueExpressionValueBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="2990621816592041196L"/>
-
-        <replace
-              file="${out.test.dir}/classes/com/sun/faces/application/ValueBindingValueExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="7410146713650507654L"/>
-        <jsf.javac srcdir="${src.test.dir}"
-                   destdir="${out.test.dir}/classes"
-                   excludes="**/ConfigFileTestCase.java">
-            <classpath>
-                <path refid="test.compile.classpath"/>
-            </classpath>
-        </jsf.javac>
-        <jsf.javac srcdir="${out.test.dir}/classes"
-                   destdir="${out.test.dir}/classes"
-                   excludes="**/ConfigFileTestCase.java">
-            <classpath>
-                <path refid="test.compile.classpath"/>
-            </classpath>    
-        </jsf.javac>
-    </target>    
-
-    <target name="prepare.test.webapp" unless="skip.build"
-            description="put the test webapp in the WAR file format in out.test.dir"
-            depends="compile.test">
-        <filter token="test.root.dir" value="${out.test.dir}"/>
-        <copy file="${conf.test.dir}/web.xml" todir="${out.test.dir}"
-              filtering="on"/>
-
-         <delete dir="${out.test.dir}/classes/META-INF/services" />
-         <mkdir dir="${out.test.dir}/classes/META-INF/services"/>
-         <echo
-              file="${out.test.dir}/classes/META-INF/services/javax.faces.context.ExceptionHandlerFactory">javax.faces.webapp.PreJsf2ExceptionHandlerFactory</echo>
-
-        <jsf.war basedir="${basedir}/build"
-                 archive-name="test"
-                 webxml="${out.test.dir}/web.xml">
-            <archive-elements>
-                <zipfileset dir="${src.test.dir}"
-                            includes="**/*.properties,**/*.xml"
-                            prefix="WEB-INF/classes"/>
-                <zipfileset dir="${out.test.dir}/classes"
-                            prefix="WEB-INF/classes"/>                
-                <zipfileset dir="${cactus.home}/lib"
-                            prefix="WEB-INF/lib"
-                            includes="cactus*.jar,
-                                      aspect*.jar,
-                                      commons-logging*.jar"
-                            excludes="*ant*.jar,cactus-1.*.jar"/>
-                <zipfileset dir="${jsf.build.home}/lib"
-                            prefix="WEB-INF/lib"
-                            includes="cactus*.jar"/>
-                <zipfileset file="${junit.jar}"
-                            prefix="WEB-INF/lib"/>
-                <zipfileset file="${jsf.test.jar}"
-                            prefix="WEB-INF/lib"/>
-                <zipfileset dir="${basedir}/web/test"
-                            includes="*.jsp,*.xml,*.gif,*html"
-                            excludes="**/CVS/**"/>
-                <zipfileset dir="${cactus.home}/web"
-                            includes="jspRedirector.jsp"/>
-                <zipfileset dir="${basedir}/web/test/WEB-INF"
-                            prefix="WEB-INF"/>
-                <zipfileset dir="${basedir}/web/test/resources"
-                            prefix="resources"/>
-            </archive-elements>
-        </jsf.war>        
-        <copy todir="${out.test.dir}">
-            <fileset dir="${basedir}/web/test"
-                     excludes="*.jsp,*.xml,*.gif,*html,**/WEB-INF/**"/>
-        </copy>
-
-        <mkdir dir="${basedir}/build/target/test" />
-        <unzip src="${basedir}/build/test.war" overwrite="true"
-               dest="${basedir}/build/target/test" />
-
-    </target>
-
-    <target name="execute.cactus.tests" depends="prepare.test.webapp">
-        <antcall target="undeploy"/>
-        <antcall target="deploy"/>
-        <touch file="${out.test.dir}/last-testrun"/>
-        <antcall target="run.cactus.test"/>
-        <antcall target="undeploy"/>
-    </target>
-
-    <target name="force.execute.cactus.tests">
-        <antcall target="remove.tstamp"/>
-        <antcall target="execute.cactus.tests"/>
-    </target>
-
-    <target name="remove.tstamp">
-        <delete file="${out.test.dir}/last-testrun"/>
-    </target>
-
-    <target name="deploy"
-            description="Deploy the Cactus test application">
-        <deploydir.artifact explodedWarDir="${basedir}/build/target/test"
-                         appName="test"/>
-    </target>
-
-    <target name="undeploy"
-            description="Undeploy the jsf-systest application">
-        <undeploy.artifact artifact="${basedir}/build/test.war"
-                           appName="test"/>
-    </target>
-
-    <!--
-            Start the Cactus test using JUnit test runner.
-    -->
-    <target name="run.cactus.test">
-        <jsf.junit classpath-refid="test.runtime.classpath"
-                   test-results-dir="${impl.test.results.dir}"
-                   explodedWarDir="${basedir}/build/target/test">
-            <custom-sysproperties>
-                <sysproperty key="cactus.contextURL"
-                             value="http://${container.host}:${container.port}/test"/>
-            </custom-sysproperties>
-            <suite>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.TestRenderers_1"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.TestRenderers_2"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.TestRenderers_3"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.TestRenderers_4"/>
-
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.resource.TestResourceManager"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.resource.TestResourceHandlerImpl"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.resource.TestResourceImpl"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.TestAdapters"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.io.TestIO"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestInjection"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestActionListenerImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestApplicationFactoryImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestApplicationImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestApplicationEvents"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestApplicationImpl_Config"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.TestFacesMessage"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.TestHASDeprStateManagerImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestNavigationHandler"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestJSF2NavigationHandler"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.application.TestStateManagerImpl"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.TestViewHandlerImpl"/>
-                <!--
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.config.ConfigFileTestCase"/>
-                -->
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.component.visit.TestTreeWithUIRepeatVisit"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.component.visit.TestTreeWithUIDataVisit"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.component.visit.TestTreeVisit"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.config.ConfigureListenerTestCase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.config.TestConfigListener"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.config.TestManagedBeanFactory"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.config.TestFacesConfigOrdering"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.config.TestFactoryInjection"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.context.TestExceptionHandler"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.context.TestExternalContextFactoryImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.context.TestExternalContextImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.context.TestFacesContextFactoryImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.context.TestFacesContextImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.convert.TestConverters"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.el.TestResourceELResolver"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.impl.TestELImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.impl.TestUnifiedELImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestPropertyResolverImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestFacesResourceBundleELResolver"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestValueBindingImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestValueExpressionImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestValueBindingImpl_Model"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestValueExpressionImpl_Model"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestVariableResolverImpl"/>
-            	
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestMethodRef"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestMethodExpressionImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestRenderResponsePhase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestApplyRequestValuesPhase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestInvokeApplicationPhase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestLifecycleFactoryImpl"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestLifecycleImpl"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.lifecycle.TestLifecycleImpl_initial"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestPhase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestProcessEvents"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestProcessValidationsPhase"/>
-                <!-- Commented out.  This test relies heavily on a bug in
-                     FacesContext.setViewRoot() that allowed one to pass a null
-                     value in.  This test case needs to be revisited.
-                <test todir="${impl.test.results.dir}" 
-                      name="com.sun.faces.lifecycle.TestRestoreViewPhase"/> -->
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.lifecycle.TestUpdateModelValuesPhase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.TestComponentType"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.TestHtmlResponseWriter"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.TestRendererConversions"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.renderkit.html_basic.MenuRendererTestCase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.TestContentTypes"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.TestRenderKit"/>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.renderkit.TestRenderKitFactory"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.TestRenderKitUtils"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.taglib.TlvTestCase"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.taglib.jsf_core.TestLoadBundleTag"/>                
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.taglib.jsf_core.TestValidatorTags"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.taglib.jsf_core.TestViewTag"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.util.TestUtil"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.util.TestUtil_messages"/>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.taglib.jsf_core.TestCoreTagsVBEnabled"/>
-            	<!-- To run the following tests, uncomment
-                 following tests and set javax.faces.STATE_SAVING_METHOD 
-                 property in conf/test/web.xml to client. Tests that 
-                 excercise save state in server code have to be commented as 
-                 well 
-                <test todir="${impl.test.results.dir}"  
-                      name="com.sun.faces.lifecycle.TestSaveStateInPage"/>
-                <test todir="${impl.test.results.dir}"  
-                      name="com.sun.faces.lifecycle.TestRestoreViewFromPage"/> -->
-            </suite>
-
-        </jsf.junit>       
-    </target>
-
-    <target name="run.cactus.test.single">
-        <jsf.junit classpath-refid="test.runtime.classpath"
-                   test-results-dir="${impl.test.results.dir}"
-                   explodedWarDir="${basedir}/build/target/test">
-            <custom-sysproperties>
-                <sysproperty key="cactus.contextURL"
-                             value="http://${container.host}:${container.port}/test"/>
-            </custom-sysproperties>
-            <suite>
-                <test todir="${impl.test.results.dir}"
-                    name="com.sun.faces.application.resource.TestResourceHandlerImpl"/>
-            </suite>
-
-        </jsf.junit>       
-    </target>
-
-
-    <target name="run.test" depends="compile.test">
-        <jsf.junit classpath-refid="test.runtime.classpath"
-                   test-results-dir="${impl.test.results.dir}" assert.classes="-ea:com.sun.faces.el.ChainAwareVariableResolver">
-            <suite>
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.util.TestUtil_local"/>  
-                <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.el.TestNestedELResolver"/>  
-                 <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.util.TestLRUMap_local"/>
-                 <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.util.TestHtmlUtils"/>
-                 <test todir="${impl.test.results.dir}"
-                      name="com.sun.faces.renderkit.html_basic.HtmlResponseWriterTest"/>
-
-            </suite>    
-        </jsf.junit>
-    </target>
-    
-     <target name="config.compile"            
-            description="Compile standalone JUnit tests">
-
-        <mkdir dir="${basedir}/build/test"/>
-        <jsf.javac srcdir="${basedir}/test"
-                   destdir="${basedir}/build/test/classes"
-                   includes="com/sun/faces/config/TestComponent.java,
-                             com/sun/faces/config/TestConverter.java,
-                             com/sun/faces/config/TestRenderer.java,
-                             com/sun/faces/config/TestValidator.java,
-                             com/sun/faces/mock/*.java"
-                   excludes="com/sun/faces/config/ConfigFileTestCase.java,
-                             com/sun/faces/config/ConfigureListenerTestCase.java">
-
-            <classpath>
-                <path refid="test.compile.classpath"/>
-                
-            </classpath>    
-        </jsf.javac>      
-        <copy todir="${basedir}/build/test/classes">
-            <fileset dir="${basedir}/test"
-                     includes="**/*.properties"/>
-        </copy>
-    </target>    
-
-    <target name="passthru">
-
-      <antcall target="deploy"/>
-      <antcall target="run.cactus.test.single" />
-      <antcall target="undeploy"/>
-       
-    </target>
-
-</project>
diff --git a/jsf-ri/build.xml b/jsf-ri/build.xml
deleted file mode 100644
index 4ee8502..0000000
--- a/jsf-ri/build.xml
+++ /dev/null
@@ -1,769 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ************ JSF build file ************************************** -->
-
-<project name="JSF-RI" default="main" basedir=".">
-
-
-    <!-- ************ Per user local properties ******************************* -->
-
-    <property file="${user.home}/build.properties"/>    
-    <property file="../build.properties"/>    
-    <import file="${jsf.build.home}/common/ant/common.xml"/>
-
-
-    <!-- ******************* Structural ************************** -->
-
-    <!-- The base directory for compilation targets -->
-    <property name="build.dir" value="build"/>
-    <property name="target.dir" value="target"/>
-   <property name="build.classes.dir" value="${build.dir}/classes"/>
-    <property name="build.generate.dir" value="${build.dir}/generate"/>
-    <property name="build.generate.tld.dir"
-              value="${build.generate.dir}/conf/share"/>
-
-    <!-- The base directory for binary dependency libs under local version
-         control -->
-    <property name="local.lib.dir"
-              value="${basedir}/../lib"/>
-
-    <!-- The base directory for distribution targets -->
-    <property name="dist.dir" value="${basedir}/dist"/>
-
-    <!-- The base directory for component sources -->
-    <property name="source.dir" value="${basedir}/src/main/java"/>
-    <property name="resource.dir" value="${basedir}/src/main/resources"/>
-
-    <!-- The base directory for component tests -->
-    <property name="test.dir" value="${basedir}/test"/>
-
-    <!-- Misc -->
-    <property name="conf.share.dir" value="${basedir}/conf/share"/>
-    <property name="name" value="jsf-impl"/>
-
-    <property name="dependency.base.dir" value="${jsf.build.home}/dependencies"/>
-    <property name="dependency.jar.dir" value="${dependency.base.dir}/jars"/>
-    <property name="yuicompressor.jar" value="${dependency.jar.dir}/yuicompressor.jar"/>
-    <property name="build.javadocs.dir" value="${build.dir}/javadocs"/>
-    <property name="javadoc.private" value="true"/>
-    <property name="javadoc.protected" value="false"/>
-    <property name="DocName" value="Mojarra Implementation Javadoc"/>
-
-    <path id="impl.compile.classpath">
-        <pathelement location="${jsf-api.jar}"/>
-        <path refid="apache.commons.classpath"/>
-        <path refid="compile.classpath"/>
-        <pathelement location="${tools.dir}/build/classes"/>
-    </path>
-
-
-    <!-- ************ Executable Targets ************************************** -->
-
-
-    <target name="init"
-            description="Initialize and evaluate conditionals">
-        <echo message="-------- ${impl.name} ${impl.version} --------"/>
-    </target>
-
-    <target name="prepare" depends="init"
-            description="Prepare build directory">
-        <mkdir dir="${build.dir}"/>
-        <mkdir dir="${build.generate.dir}"/>
-        <mkdir dir="${build.generate.tld.dir}"/>
-        <mkdir dir="${build.classes.dir}"/>
-        <mkdir dir="${build.classes.dir}/com/sun/faces/xhtml"/>
-        <mkdir dir="${build.javadocs.dir}"/>
-        <mkdir dir="${build.dir}/vdldocs/jsp"/>
-        <mkdir dir="${build.dir}/vdldocs/facelets"/>
-        <mkdir dir="${build.dir}/lib"/>
-        <antcall target="delete.and.remkdir.build.generate.dir" />
-    </target>
-
-    <target name="delete.and.remkdir.build.generate.dir"
-            unless="skip.delete.generate">
-        <delete dir="${build.generate.dir}"/>
-        <mkdir dir="${build.generate.dir}"/>
-    </target>
-
-    <target name="copy.template.sources" depends="prepare"
-            description="Copy template sources from ${tools.dir}/template-source">
-
-        <mkdir dir="${build.generate.dir}/com/sun/faces/util"/>
-        <filter token="protection" value="public"/>
-
-        <filter token="package" value="com.sun.faces.util"/>
-        <copy file="${tools.dir}/template-src/MessageFactory.java"
-              todir="${build.generate.dir}/com/sun/faces/util"
-              filtering="true"/>
-        <copy file="${tools.dir}/template-src/TypedCollections.java"
-              todir="${build.generate.dir}/com/sun/faces/util"
-              filtering="true"/>
-        <filter token="package" value="com.sun.faces.application.view"/>
-        <copy file="${tools.dir}/template-src/StateHolderSaver.java"
-              todir="${build.generate.dir}/com/sun/faces/application/view"
-              filtering="true"/>
-
-        <filter token="protection" value="public"/>
-
-        <filter token="package" value="com.sun.faces.application"/>
-        <copy todir="${build.generate.dir}/com/sun/faces/application"
-              filtering="true">
-            <fileset dir="${api.dir}/template-src">
-                <include name="*Adapter.java"/>
-            </fileset>
-        </copy>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/MethodBindingMethodExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="6351778415298720238L"/>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/MethodExpressionMethodBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="5639227653537610567L"/>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/ValueExpressionValueBindingAdapter.java"
-              token="@serialVersionUID@"
-              value="2990621816592041196L"/>
-
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/ValueBindingValueExpressionAdapter.java"
-              token="@serialVersionUID@"
-              value="7410146713650507654L"/>
-        <replace
-              file="${build.generate.dir}/com/sun/faces/application/view/StateHolderSaver.java"
-              token="@serialVersionUID@"
-              value="4866548262845392093L"/>
-    </target>
-
-    <target name="check.taglib.generation.necessity">
-        <uptodate property="skip.taglib.generation"
-                  targetfile="${build.generate.dir}/last-taglib-generation">
-            <srcfiles dir="${api.dir}/doc">
-                <include name="standard-html-renderkit.xml"/>
-            </srcfiles>
-        </uptodate>
-    </target>
-
-    <target name="generate"
-            depends="check.taglib.generation.necessity"
-            unless="skip.taglib.generation">
-        <path id="ant.classpath">
-            <pathelement location="${myenv.ANT_HOME}/lib/ant.jar"/>
-        </path>
-
-        <copy todir="${build.dir}">
-            <fileset dir="${tools.dir}/conf">
-                <include name="TAG-*"/>
-            </fileset>
-        </copy>
-
-        <mkdir dir="${tools.dir}/build/classes"/>
-        <jsf.javac srcdir="${tools.dir}/src/main/java"
-               destdir="${tools.dir}/build/classes">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <path refid="ant.classpath"/>
-            </classpath>
-        </jsf.javac>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${tools.dir}/src/main/java"
-                     includes="**/*.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes">
-            <fileset dir="${impl.dir}/src/main/resources"
-                     includes="**/LogStrings.properties"/>
-        </copy>
-        <copy todir="${tools.dir}/build/classes/com/sun/faces"
-              flatten="true">
-            <fileset dir="${api.dir}/doc"
-                      includes="*.dtd,*.xsd"/>
-        </copy>
-        <taskdef name="generateTaglib"
-                 classname="com.sun.faces.ant.TaglibGenTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <taskdef name="generateAttrManager"
-                 classname="com.sun.faces.ant.AttributeManagerGenTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-        <generateTaglib
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <jvmarg line="${debug.jvm.args}"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateTaglib>
-        <generateAttrManager
-              generatorConfig="${tools.dir}/conf/HtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <jvmarg line="${debug.jvm.args}"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateAttrManager>
-        <!--
-        <copy todir="${build.generate.dir}">
-
-
-            <fileset dir="${tools.dir}/src/main/java">
-                <include name="com/sun/faces/config/DigesterFactory.java"/>
-                <include name="com/sun/faces/config/beans/*.java"/>
-                <include name="com/sun/faces/config/rules/*.java"/>
-                <include name="com/sun/faces/util/*.java"/>
-            </fileset>
-
-        </copy>
-        -->
-
-
-        <touch file="${build.generate.dir}/last-taglib-generation"/>
-
-        <antcall target="create.runtime.config"/>
-
-    </target>
-
-    <target name="compile" depends="prepare,generate,copy.template.sources"
-            description="Just compile the classes">
-
-        <!-- Run javac through everything -->
-        <jsf.javac srcdir="${source.dir}:${build.generate.dir}"
-                   destdir="${build.classes.dir}"
-                   excludes="**/ManagedBeanFactoryImpl.java">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-            </classpath>
-        </jsf.javac>
-
-        <copy todir="${build.classes.dir}">
-            <fileset dir="${resource.dir}" includes="**/*.properties,**/*.js,**/*.xsd"/>
-            <!--<fileset dir="${tools.dir}/src/main/java" includes="**/*.properties"/>-->
-        </copy>
-
-        <!-- Massage the version number into LogStrings.properties -->
-        <replace dir="${build.classes.dir}/com/sun/faces/"
-                 token="|version.string|"
-                 value="${impl.version.number} (${build.type} ${build.number})">
-            <include name="LogStrings*.properties"/>
-        </replace>
-
-        <copy todir="${build.classes.dir}/com/sun/faces">
-            <fileset dir="${api.dir}/doc">
-                <include name="*.dtd"/>
-                <include name="standard-html-renderkit.xml"/>
-                <include name="*.xsd"/>
-            </fileset>
-        </copy>
-
-        <concat destfile="${build.classes.dir}/META-INF/resources/javax.faces/jsf-uncompressed.js" fixlastline="yes">
-            <filelist dir="${api.dir}/src/main/resources">
-                <file name="jsf.js"/>
-            </filelist>
-            <filelist  dir="${basedir}/resources">
-                <file name="mojarra.js"/>
-            </filelist>
-        </concat>
-
-        <java jar="${yuicompressor.jar}" fork="true" failonerror="true"
-            args="-o ${build.classes.dir}/META-INF/resources/javax.faces/jsf.js ${build.classes.dir}/META-INF/resources/javax.faces/jsf-uncompressed.js"/>
-        <!--
-            RELEASE_PENDING (rlubke,driscoll)
-            For now these are copied to the root of the jsf-impl.jar, but
-            eventually they should be in com.sun.faces per the copy statement
-            above.
-        -->
-        <copy todir="${build.classes.dir}/com/sun/faces/xhtml">
-            <fileset dir="${conf.share.dir}/xhtml">
-                <include name="*.dtd"/>
-                <include name="*.ent"/>
-            </fileset>
-        </copy>
-
-        <copy file="conf/share/javax.servlet.ServletContainerInitializer"
-              toDir="${build.classes.dir}/META-INF/services" />
-        <copy toDir="${build.classes.dir}/com/sun/faces/metadata/taglib">
-            <fileset dir="${conf.share.dir}">
-                <include name="*.taglib.xml" /> 
-            </fileset>
-        </copy>
-        <copy file="${build.generate.tld.dir}/html_basic.tld"
-              toDir="${build.classes.dir}/META-INF"/>
-        <copy file="conf/xslt/jsf1_0-1_1toSchema.xsl"
-              toDir="${build.classes.dir}/com/sun/faces"/>
-        <copy file="conf/xslt/facelets1_0-2_0toSchema.xsl"
-              toDir="${build.classes.dir}/com/sun/faces"/>
-        <unzip src="${jsf.build.home}/lib/injectionproviders.jar"
-               dest="${build.classes.dir}"/>
-        <copy todir="${build.classes.dir}/META-INF">
-            <fileset dir="${conf.share.dir}">
-                <include name="jsf_core.tld"/>
-                <include name="mojarra_ext.tld"/>
-                <include name="mojarra_ext.taglib.xml"/>
-                <include name="facelet-dev*.xml"/>
-                <include name="error-include.xhtml"/>
-            </fileset>
-        </copy>
-
-    </target>
-
-    <target name="clean"
-            description="Clean build and distribution directories">
-        <ant antfile="build-tests.xml" target="remove.tstamp"/>
-        <delete dir="${build.dir}"/>
-        <delete dir="${target.dir}"/>
-        <delete dir="${dist.dir}"/>
-        <delete dir="${impl.test.results.dir}"/>
-        <delete>
-            <fileset dir="." includes="**/*~" defaultexcludes="no"/>
-            <fileset dir="." includes="**/.nbattrs" defaultexcludes="no"/>
-        </delete>
-        <delete file="jsf-${impl.version}.zip"/>
-        <delete file="jsf-${impl.version}_src.zip"/>
-        <ant dir="${basedir}/systest" inheritall="false" target="clean"/>
-        <ant dir="${basedir}/systest-per-webapp" inheritall="false"
-             target="clean"/>
-         <delete dir="${tools.dir}/build"/>
-    </target>
-
-    <target name="all" depends="clean,prepare,compile"
-            description="Clean and compile all components"/>
-
-    <!-- Create the source distribution -->
-    <target name="ri.source">
-        <zip destfile="${dist.dir}/jsf-ri-src-${impl.version}.zip">
-            <zipfileset dir="${basedir}"
-                        includes="build.xml build-tests.xml README COPYRIGHT LICENSE*.*"
-                        prefix="jsf-ri-src-${impl.version}"/>
-            <zipfileset dir="${source.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/src"/>
-            <zipfileset dir="${resource.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/resources"/>
-            <zipfileset dir="${test.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/test"/>
-            <zipfileset dir="${basedir}"
-                        includes="conf/** web/**"
-                        prefix="jsf-ri-src-${impl.version}"/>
-        </zip>
-    </target>
-
-
-    <target name="dist" depends="jars" description="Build distribution files">
-
-        <mkdir dir="${dist.dir}"/>
-
-        <antcall target="vdldocs"/>
-
-        <!-- Create the binary distribution -->
-        <zip destfile="${dist.dir}/jsf-ri-${impl.version}.zip">
-            <zipfileset dir="${build.dir}"
-                        includes="lib/**,vdldocs/**"
-                        prefix="jsf-ri-${impl.version}"/>
-        </zip>
-
-        <!-- Create a buildable source distribution -->
-        <zip destfile="${dist.dir}/jsf-ri-src-${impl.version}.zip">
-            <zipfileset dir="${basedir}"
-                        includes="build.xml build-tests.xml README COPYRIGHT LICENSE*.*"
-                        prefix="jsf-ri-src-${impl.version}"/>
-            <zipfileset dir="${source.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/src"/>
-
-            <zipfileset dir="${test.dir}"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/test"/>
-            <zipfileset dir="${basedir}/systest"
-                        excludes="**/CVS/**"
-                        prefix="jsf-ri-src-${impl.version}/systest"/>
-        </zip>
-        <antcall target="ri.source"/>
-
-    </target>
-
-    <target name="vdldocs">
-
-      <antcall target="jsp.tlddocs" />
-      <antcall target="facelets.tlddocs" />
-
-    </target>
-
-    <target name="jsp.tlddocs">
-        <java fork="true" jar="${tlddoc.jar}">
-            <arg line="-d ${build.dir}/vdldocs/jsp"/>
-            <arg line="-windowtitle 'JSF ${spec.version} View Declaration Language: JSP Variant'"/>
-            <arg value="${build.generate.tld.dir}/html_basic.tld"/>
-            <arg value="${conf.share.dir}/jsf_core.tld"/>
-        </java>
-        <copy todir="${build.dir}/vdldocs/jsp">
-           <fileset dir="${basedir}/../jsf-api/doc/">
-             <include name="changed*.png" />
-             <include name="changed*.cur" />
-           </fileset>
-        </copy>
-
-    </target>
-
-    <target name="facelets.tlddocs">
-        <taskdef name="generateFaceletsTld"
-                 classname="com.sun.faces.ant.FaceletsTLDGenTask">
-            <classpath>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-        </taskdef>
-
-        <generateFaceletsTld
-              generatorConfig="${tools.dir}/conf/FaceletsHtmlBasicTaglib21.properties"
-              facesConfig="${standard.renderkit.xml}"
-              fork="true">
-            <classpath>
-                <path refid="impl.compile.classpath"/>
-                <pathelement location="${tools.dir}/build/classes"/>
-            </classpath>
-            <sysproperty key="java.endorsed.dirs" value="${endorsed.dirs}"/>
-            <jvmarg line="${debug.jvm.args}"/>
-            <assertions>
-                <enable/>
-            </assertions>
-        </generateFaceletsTld>
-        <java fork="true" jar="${tlddoc.jar}">
-            <arg line="-d ${build.dir}/vdldocs/facelets"/>
-            <arg line="-windowtitle 'JSF ${spec.version} View Declaration Language: Facelets Variant'"/>
-            <arg line="-xslt ${conf.share.dir}/tlddoc-resources"/>
-            <arg value="${conf.share.dir}/facelets_jsf_core.tld"/>
-            <arg value="${build.generate.tld.dir}/facelets_html_basic.tld"/>
-            <arg value="${conf.share.dir}/composite.tld"/>
-            <arg value="${conf.share.dir}/ui.tld"/>
-            <arg value="${conf.share.dir}/jstl-core.tld"/>
-            <arg value="${conf.share.dir}/jstl-fn.tld"/>
-        </java>
-        <copy todir="${build.dir}/vdldocs/facelets">
-           <fileset dir="${basedir}/../jsf-api/doc/">
-             <include name="changed*.png" />
-             <include name="changed*.cur" />
-           </fileset>
-        </copy>
-        <copy failonerror="false" overwrite="true" todir="${build.dir}/vdldocs/facelets/h">
-           <fileset dir="${basedir}/../jsf-api/build/generate/facesdoc/HTML_BASIC">
-             <include name="javax.faces.Outputjavax.faces.resource.Script.html" />
-           </fileset>
-        </copy>
-
-    </target>
-
-
-    <target name="compile.test" depends="prepare,compile"
-            description="Run unit tests">
-
-        <ant antfile="build-tests.xml" target="compile.test"/>
-
-    </target>
-
-    <target name="test"
-             depends="update,init.test,run.junit.test,run.cactus.test,run.systest,run.systest-per-webapp"
-            description="Run all unit and system tests"/>
-
-    <target name="init.test">
-        <mkdir dir="${impl.test.results.dir}"/>
-    </target>
-
-    <target name="run.systest" description="Run system tests"
-            depends="init.test">              
-        <ant dir="${basedir}/systest" inheritall="false" target="test"/>        
-    </target>
-
-    <target name="run.systest-per-webapp"
-            description="Run per-webapp system tests"
-            depends="init.test,compile.test">
-        <ant dir="${basedir}/systest-per-webapp" inheritall="false"
-             target="test"/>
-        <ant dir="${basedir}/systest-per-webapp" inheritall="false"
-             target="remove"/>
-    </target>
-
-
-    <target name="run.junit.test" depends="init.test,compile.test"
-            description="Run unit tests not requiring cactus">
-        <ant antfile="build-tests.xml" target="run.test"/>
-    </target>
-
-    <target name="run.cactus.test" depends="init.test,compile.test"
-            description="Run unit tests requiring cactus">
-        <ant antfile="build-tests.xml" target="execute.cactus.tests"/>
-    </target>
-
-    <target name="force.run.cactus.test" depends="init.test,compile.test"
-            description="Run unit tests requiring cactus, forcing reinstall">
-        <ant antfile="build-tests.xml" target="force.execute.cactus.tests"/>
-    </target>   
-
-    <target name="prepare.test.webapp" depends="init.test">
-        <echo>Invoking target prepare.test.webapp</echo>
-        <ant antfile="build-tests.xml" target="prepare.test.webapp"/>
-        <echo>Invoking target build.war in systest</echo>
-        <ant dir="${basedir}/systest" inheritall="false" target="build.war"/>
-    </target>
-
-    <!-- 
-         =================================================================== 
-           Create the jars
-         =================================================================== 
-    -->
-
-    <target name="jars" depends="compile">
-
-        <copy file="${basedir}/mojarra-jsf-impl.bnd" tofile="tmp.bnd"/>
-        <replace file="tmp.bnd"
-                 token="@spec.version@"
-                 value="${spec.version}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.name@"
-                 value="${impl.name}"/>
-        <replace file="tmp.bnd"
-                 token="@impl.version@"
-                 value="${impl.version}"/>
-        <if>
-            <equals arg1="${build.type}" arg2=""/>
-            <then>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}"/>
-            </then>
-            <else>
-                <replace file="tmp.bnd"
-                         token="@osgi.version@"
-                         value="${impl.version.number}-${build.type}"/>
-            </else>
-        </if>
-        <replace file="tmp.bnd"
-                 token="@extension.name@"
-                 value="com.sun.faces"/>
-        <jsf.osgi.jar jarfile="${build.dir}/lib/${name}.jar"
-                      bndfile="tmp.bnd"
-                      basedir="${build.classes.dir}"
-                      extension-name="com.sun.faces"/>
-        <delete file="tmp.bnd"/>
-    </target>
-
-    <target name="main" depends="update,jars"/>
-
-    <target name="create.runtime.config">
-<!--    in="${build.dir}/classes/com/sun/faces/standard-html-renderkit.xml"-->
-        <xslt in="${api.dir}/doc/standard-html-renderkit.xml" 
-              out="merged.xml"
-              style="conf/xslt/merge-config.xsl">
-        </xslt>
-        <replace file="${basedir}/merged.xml">
-            <replacetoken><![CDATA[xmlns:jsf="http://java.sun.com/xml/ns/javaee"]]></replacetoken>
-            <replacevalue><![CDATA[]]></replacevalue>
-        </replace>
-        <replace file="${basedir}/merged.xml">
-            <replacetoken><![CDATA[ >]]></replacetoken>
-            <replacevalue><![CDATA[>]]></replacevalue>
-        </replace>
-        <xslt in="${basedir}/merged.xml"
-              out="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml"
-              style="conf/xslt/prune-tool-data.xsl">
-        </xslt>
-        <replace file="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml">
-            <replacetoken><![CDATA[xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"]]></replacetoken>
-        </replace>
-        <replace file="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml">
-            <replacetoken><![CDATA[ >]]></replacetoken>
-            <replacevalue><![CDATA[>]]></replacevalue>
-        </replace>
-        <replace file="${build.dir}/classes/com/sun/faces/jsf-ri-runtime.xml">
-            <replacetoken><![CDATA[<faces-config>]]></replacetoken>
-            <replacevalue><![CDATA[
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">]]>
-            </replacevalue>
-        </replace>
-        <delete file="${basedir}/merged.xml"/>
-        <copy file="${basedir}/resources/empty-faces-config.xml"
-              todir="${build.dir}/classes/com/sun/faces" />
-    </target>
-
-
-    <target name="passthru">
-        <ant antfile="build-tests.xml" target="passthru"/>
-    </target>
-
-    <target name="prepare.cactus.webapp">
-        <ant antfile="build-tests.xml" target="prepare.test.webapp"/>
-    </target>
-
-     <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO YOUR LOCAL
-       M2 REPOSITORY
-    -->
-
-    <target name="mvn.deploy.snapshot.local" description="Deploy a SNAPSHOT build to the local maven repo">
-        <mvn.deploy.snapshot.local type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted.local">
-        <mvn.deploy.promoted.local type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.release.local">
-        <mvn.deploy.release.local type="impl"/>
-    </target>
-
-
-    <!--
-       USE THE FOLLOWING TARGETS TO PUSH VARIOUS BUILD TYPES TO THE
-       JAVA.NET M2 REPOSITORY
-    -->
-     <target name="mvn.deploy.snapshot">
-        <mvn.deploy.snapshot type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.promoted">
-        <mvn.deploy.promoted type="impl"/>
-    </target>
-
-
-    <target name="mvn.deploy.release">
-        <mvn.deploy.release type="impl"/>
-    </target>
-
-    <target name="apply.netbeans.186761.hack">
-
-      <copy todir="${source.dir}">
-
-        <fileset dir="${build.generate.dir}">
-          <include name="**/*.java" />
-        </fileset>
-
-      </copy>
-
-    </target>
-
-    <target name="remove.netbeans.186761.hack">
-
-      <delete failonerror="false">
-
-        <fileset dir="${source.dir}">
-          <include name="**/TypedCollections.java" />
-          <include name="**/MessageFactory.java" />
-          <include name="**/AttributeManager.java" />
-          <include name="**/MethodBindingMethodExpressionAdapter.java" />
-          <include name="**/ValueBindingValueExpressionAdapter.java" />
-          <include name="**/MethodExpressionMethodBindingAdapter.java" />
-          <include name="**/ValueExpressionValueBindingAdapter.java" />
-          <include name="**/StateHolderSaver.java" />
-        </fileset>
-
-      </delete>
-
-      <delete failonerror="false">
-        <fileset dir="${source.dir}/com/sun/faces/taglib/html_basic">
-          <include name="*.java" />
-          <exclude name="ColumnTag.java" />
-          <exclude name="CommandTagParserImpl.java" />
-          <exclude name="HtmlBasicValidator.java" />
-        </fileset>
-      </delete>
-
-    </target>
-
-    <target name="javadoc_check">
-        <uptodate property="javadoc.notrequired"
-                  targetfile="${build.javadocs.dir}/packages.html">
-            <srcfiles dir="${source.dir}" includes="**/*.java"/>
-            <srcfiles dir="${build.generate.dir}" includes="**/*.java"/>
-        </uptodate>
-    </target>
-
-    <target name="javadocs"
-            depends="prepare,javadoc_check,generate,generate.javadocs"
-            unless="javadoc.notrequired"
-            description="Create the JavaDoc API documentation">
-
-    </target>
-
-
-    <target name="generate.javadocs">
-        <javadoc packagenames="javax.*"
-                 destdir="${build.javadocs.dir}"
-                 private="${javadoc.private}"
-                 link="http://java.sun.com/javase/6/docs/api/"
-                 protected="${javadoc.protected}"
-                 windowtitle="${DocName} (${spec.version})"
-                 source="1.5"
-                 doctitle="${DocName} (${spec.version})"
-                 bottom="Copyright © 2002-2010 Sun Microsystems, Inc. All Rights Reserved.">
-            <fileset dir="${source.dir}">
-                <include name="com/sun/faces/spi/**/*.java"/>
-            </fileset>
-            <classpath refid="impl.compile.classpath"/>
-        </javadoc>
-
-    </target>
-
-    
-</project>
diff --git a/jsf-ri/conf/basic/META-INF/faces-config.xml b/jsf-ri/conf/basic/META-INF/faces-config.xml
deleted file mode 100644
index 2955e27..0000000
--- a/jsf-ri/conf/basic/META-INF/faces-config.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2"/>
diff --git a/jsf-ri/conf/share/composite.taglib.xml b/jsf-ri/conf/share/composite.taglib.xml
deleted file mode 100644
index 91888c2..0000000
--- a/jsf-ri/conf/share/composite.taglib.xml
+++ /dev/null
@@ -1,1710 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-              version="2.0">
-    <description>
-
-
-        </pre>
-
-        <div class="changed_added_2_0">
-
-        <p>Describes the Facelets2 tag library used for declaring and
-        defining
-        the usage contract for composite UI Components. When authoring a
-        composite component, use of this tag library is largely optional,
-        though always recommended. Declaring and defining a composite
-        component with this taglib provides valuable information about the
-        component that can be used by tools and users of the composite
-        component. In most cases, a composite component can be authored
-        without declaring and defining its usage contract with this taglib.
-        PENDING: the limit of what one can do without declaring and defining a
-        usage contract must be cleary specified and documented. PENDING: The
-        implementation team must help discover these limits.
-        </p>
-
-        <h2>Creating a Composite Component</h2>
-
-        <p>The default implementation must support authoring A composite
-        component is declared by creating a Facelets2 file inside of a resource
-        library. (See section JSF.2.6 of the specification prose document for
-        more information about resource libraries.) A composite component
-        must reside within a resource library. It is not possible to create a
-        composite component without putting it inside of a resource
-        library.</p>
-
-        <p>The default XML namespace URI of the taglib that contains the
-        composite component, for use in <em>the using page</em>, is
-        <code>http://java.sun.com/jsf/composite/&lt;composite-library-name&gt;</code>,
-        where <code>&lt;composite-library-name&gt;</code> is
-        the name of the
-        resource library. For example:</p>
-
-        <pre><code>
-        &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        <br />
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br
-        />
-        &lt;html xmlns="http://www.w3.org/1999/xhtml"<br />
-        xmlns:h="http://java.sun.com/jsf/html"<br />
-        xmlns:f="http://java.sun.com/jsf/core"<br />
-        xmlns:ui="http://java.sun.com/jsf/facelets"<br />
-        xmlns:ez="<i>http://java.sun.com/jsf/composite/<b>ezcomp</b></i>"&gt;<br
-        />
-        ...<br />
-        </code></pre>
-
-        <p>This declares that any Facelets2 file in the resource
-        library called <code>ezcomp</code> can be used as a regular
-        JSF UI
-        component in a view with the above namespace declaration by using the
-        "<code>ez</code>" prefix. For example, placing a file called
-        <code>foo.xhtml</code> in a resource library called <code>ezcomp</code>
-        would make that file accessible like this.</p>
-
-        <pre><code>
-        &lt;ez:foo /&gt;
-        </code></pre>
-
-
-        <p>The implementation must also support declaring the
-        namespace of the tag library in a JSF VDL tag library descriptor.
-        This descriptor file is optional and is useful for component vendors
-        that do not want to use the default XML namespace. This version of
-        the proposal currently uses the facelet taglib descriptor syntax. For
-        example: </p>
-
-        <pre><code>
-        &lt;facelet-taglib&gt;<br />
-        &lt;namespace&gt;http://domain.com/path&lt;/namespace&gt;
-        <br />
-        &lt;composite-library-name&gt;compositeTest&lt;/composite-library-name&gt;
-        <br />
-        &lt;/facelet-taglib&gt; <br />
-        </code></pre>
-
-        <p>Components from that taglibrary may be used in a using page by
-        declaring them in the XML namespace for that view:</p>
-
-        <pre><code>
-        &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        <br />
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br
-        />
-        &lt;html xmlns="http://www.w3.org/1999/xhtml"<br />
-        xmlns:h="http://java.sun.com/jsf/html"<br />
-        xmlns:f="http://java.sun.com/jsf/core"<br />
-        xmlns:ui="http://java.sun.com/jsf/facelets"<br />
-        xmlns:ez="<i><b>http://domain.com/path/namespace</b></i>"&gt;<br
-        />
-        ...<br />
-        </code></pre>
-
-
-        <p><a name="composite_example">Below is an example of a
-        fairly
-        involved composite component declaration. Such a declaration might
-        appear in <code>foo.xhtml</code>.</a></p>
-
-        <div class="syntax"><div class="html4strict"
-        style="font-family: monospace;"><ol><li class="li1"><div
-        class="de1"><span class="sc2">&lt;<a
-        href="interface.html">composite:interface</a> <span
-        class="kw3">name</span>=<span class="st0">&quot;foo&quot;</span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-        &nbsp;displayName=<span class="st0">&quot;Very Simple
-        Login Panel&quot;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-        &nbsp;preferred=<span class="st0">&quot;true&quot;</span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-        &nbsp;expert=<span class="st0">&quot;false&quot;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-        &nbsp;shortDescription=<span class="st0">&quot;An
-        illustration of the composite component feature&quot;</span><span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc2">&lt;<a href="attribute.html">composite:attribute</a>
-        <span class="kw3">name</span>=<span class="st0">&quot;model&quot;</span>
-        required=<span class="st0">&quot;true&quot;</span><span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; <span
-        class="sc2">&lt;composite:attribute <span class="kw3">name</span>=<span
-        class="st0">&quot;loginAction&quot;</span> required=<span
-        class="st0">&quot;true&quot;</span> method-signature=<span
-        class="st0">&quot;java.lang.Object action()&quot;</span>/
-        <span class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc2"><span class="kw2">&lt;</span>/composite:attribute&gt;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp; <span
-        class="sc2">&lt;composite:attribute <span class="kw3">name</span>=<span
-        class="st0">&quot;valueChangeListener&quot;</span>
-        targets=<span class="st0">&quot;username&quot;</span>
-        /<span class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc2">&lt;composite:attribute <span class="kw3">name</span>=<span
-        class="st0">&quot;specialMethodExpression&quot;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp;method-signature=<span class="st0">&quot;com.foo.User
-        validateCurrentUser()&quot;</span> /<span class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc2">&lt;composite:attribute <span class="kw3">name</span>=<span
-        class="st0">&quot;loginButtonLabel&quot;</span>
-        default=<span class="st0">&quot;Login&quot;</span> /<span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; <span
-        class="sc2">&lt;<a href="editableValueHolder.html">composite:editableValueHolder</a>
-        <span class="kw3">name</span>=<span class="st0">&quot;username&quot;</span>
-        /<span class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-        class="st0">&quot;loginEvent&quot;</span> /<span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; <span
-        class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-        class="st0">&quot;cancelEvent&quot;</span> /<span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-        class="st0">&quot;allEvents&quot;</span> targets=<span
-        class="st0">&quot;loginEvent cancelEvent&quot;</span> /<span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1"><span class="sc2"><span
-        class="kw2">&lt;</span>/composite:interface&gt;</span></div></li>
-        <li class="li2"><div class="de2"><span class="sc2">&lt;<a
-        href="implementation.html">composite:implementation</a> <span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc2">&lt;ui:decorate template=<span class="st0">&quot;fooTemplate.xhtml&quot;</span><span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc2">&lt;ui:define <span class="kw3">name</span>=<span
-        class="st0">&quot;header&quot;</span><span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc2"><span class="kw2">&lt;p&gt;</span></span>This
-        is the login panel header<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc2"><span class="kw2">&lt;</span>/ui:define&gt;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc2">&lt;ui:define <span class="kw3">name</span>=<span
-        class="st0">&quot;body&quot;</span><span class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc2"><span class="kw2">&lt;p&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp;<span class="sc2">&lt;h:inputText <span
-        class="kw3">id</span>=<span class="st0">&quot;username&quot;</span>
-        /<span class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc2"><span class="kw2">&lt;/p&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc2"><span class="kw2">&lt;p&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc2">&lt;h:commandButton <span
-        class="kw3">id</span>=<span class="st0">&quot;loginEvent&quot;</span>
-        </div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp;<span class="kw3">value</span>=<span
-        class="st0">&quot;#{cc.attrs.loginButtonLabel}&quot;</span><span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc2"><span class="kw2">&lt;</span>/h:commandButton&gt;</span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc2">&lt;h:commandButton <span
-        class="kw3">id</span>=<span class="st0">&quot;cancelEvent&quot;</span>
-        <span class="kw3">value</span>=<span class="st0">&quot;Cancel&quot;</span>
-        <span class="kw3">action</span>=<span class="st0">&quot;cancel&quot;</span><span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc2"><span class="kw2">&lt;</span>/h:commandButton&gt;</span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc2">&lt;special:validateUserButton
-        </div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; validateUser=<span class="st0">&quot;#{cc.attrs.specialMethodExpression}&quot;</span>
-        /<span class="kw2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc2"><span class="kw2">&lt;/p&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; <span
-        class="sc2"><span class="kw2">&lt;</span>/ui:define&gt;</span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; <span
-        class="sc2">&lt;ui:define <span class="kw3">name</span>=<span
-        class="st0">&quot;footer&quot;</span><span
-        class="kw2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;<span
-        class="sc2"><span class="kw2">&lt;p&gt;</span></span>This
-        is the login panel footer<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; <span
-        class="sc2"><span class="kw2">&lt;</span>/ui:define&gt;</span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; <span
-        class="sc2"><span class="kw2">&lt;</span>/ui:decorate&gt;</span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1"><span class="sc2"><span
-        class="kw2">&lt;</span>/composite:implementation&gt;</span>
-        </div></li></ol></div></div>
-
-        <p>The values for attributes in a composite component VDL file can
-        be
-        fully localized by putting them inside a ResourceBundle in the same
-        directory as the VDL view and accessing them with the per-component
-        resource bundle syntax. Consider the file <code>foo.xhtml</code>,
-        in
-        the resource library <code>ezcomp</code>. The
-        <code>shortDescription</code> element could be changed to
-        be:</p>
-
-        <pre><code>
-        &lt;composite:interface
-        shortDescription="#{cc.resourceBundleMap.shortDescription}" &gt;
-        </code></pre>
-
-        <p>In this case, In the same <code>ezcomp</code>
-        directory as
-        <code>foo.xhtml</code>, there would be a <code>foo.properties</code>
-        file that would contain this entry:</p>
-
-        <pre><code>
-        shortDescription=A really nifty login panel.
-        </code></pre>
-
-        <p>The normal localization rules for <code>ResourceBundle</code>
-        would
-        apply.</p>
-
-        </div>
-
-
-        <pre>
-
-
-    </description>
-    <namespace>http://java.sun.com/jsf/composite</namespace>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-
-            <p>This element declares the usage contract for a composite
-            component. Optionally, and at the component author's
-            discretion, this contract exposes the features of one or
-            more inner components to the page author. The page author
-            can work with the composite component as a single component
-            whose feature set is the union of the features declared in
-            the usage contract.</p>
-
-            <p>For example, consider a composite component that
-            implements the functionality of a "login panel". Such a
-            component would likely have two text fields and one button.
-            The user of such a component might like to do one or more of
-            the following.</p>
-
-            <ul>
-
-            <li><p>Be able to listen for the <code>ActionEvent</code>
-            on the button.</p>
-
-            <p>In this case, a
-            <code>&lt;composite:actionSource&gt;</code>
-            element is
-            included in the usage contract that refers to the inner
-            button in the <code>&lt;composite:implementation&gt;</code>
-            section.</p>
-
-            </li>
-
-            <li><p>Provide an "action" to invoke when the button is
-            pressed.
-            </p>
-
-            <p>In this case, a
-            <code>&lt;composite:attribute&gt;</code> element
-            is included
-            in the usage contract that refers to the inner button in the
-            <code>&lt;composite:implementation&gt;</code>
-            section and
-            declares the proper method signature for an "action".</p>
-
-            </li>
-
-            <li><p>Provide parameters to the composite component for
-            labels and other rendering specific aspects of the composite
-            component.</p>
-
-            <p>In this case, one or more
-            <code>&lt;composite:attribute&gt;</code>
-            elements are included
-            in the usage contract and those parameters are referred to in
-            the <code>&lt;composite:implementation&gt;</code>
-            section
-            using EL expressions like
-            <code>#{cc.attrs.usernameLabel}</code>,
-            assuming <code>usernameLabel</code> is the <code>name</code>
-            of one of the <code>&lt;composite:attribute&gt;</code>
-            elements in the usage contract.</p>
-
-            </li>
-
-
-            <li><p>Add <code>ValueChangeListener</code>s,
-            <code>Converter</code>s, or <code>Validator</code>s
-            to either
-            or both text fields.
-            </p>
-
-            <p>In this case, a
-            <code>&lt;composite:editableValueHolder&gt;</code>
-            element is
-            included in the usage contract that refers to the inner text
-            field in the <code>&lt;composite:implementation&gt;</code>
-            section. In the case of wanting to enable only adding a
-            <code>Converter</code> (and not a
-            <code>ValueChangeListener</code> or <code>Validator</code>,
-            a
-            <code>&lt;composite:valueHolder&gt;</code>
-            element would be
-            used.</p>
-
-            </li>
-
-            <li><p>Add facet children to the login panel.</p>
-
-            <p>In this case, a <code>&lt;composite:facet&gt;</code>
-            element is included in the usage contract that refers to the
-            inner <code>&lt;composite:renderFacet&gt;</code>
-            element in
-            the <code>&lt;composite:implementation&gt;</code>
-            section.
-            </p>
-
-            </li>
-
-
-            </ul>
-
-            <p>For each of the behaviorial interfaces in Section JSF.3.2
-            of
-            the specification, there is a tag in the
-            <code>composite:</code> library to nest inside of the
-            <code>&lt;composite:interface&gt;</code>
-            section.
-            </p>
-
-
-            <p>If the <code>&lt;composite:interface&gt;</code>
-            section
-            is not present in a <em>VDL view</em>, the contract will
-            be
-            inferred as described in the specification. There must be
-            zero or one of these elements in a composite component VDL
-            file. If a <code>&lt;composite:interface&gt;</code>
-            element
-            does appear, there must be an accompanying
-            <code>&lt;composite:implementation&gt;</code>
-            element in the
-            same VDL file. </p>
-
-            <p><b>Nesting of composite components</b></p>
-
-            <p>The implementation must support nesting of composite
-            components. Specifically, it must be possible for the
-            <code>&lt;composite:implementation&gt;</code>
-            section of a
-            composite component to act as the <em>using page</em>
-            for
-            another composite component. When a composite component
-            exposes a behavioral interface to the <em>using page</em>,
-            such as a <code>&lt;composite:actionSource&gt;</code>,
-            <code>&lt;composite:editableValueHolder&gt;</code>,
-            <code>&lt;composite:valueHolder&gt;</code> or
-            other
-            behavioral interface, it must be possible to
-            &#8220;propogate&#8221; the exposure of such an interface in
-            the case of a nested composite component. The composite
-            component author must ensure that the value of the
-            <code>name</code> attributes exactly match at all levels
-            of
-            the nesting to enable this exposure to work. The
-            implementation is not required to support
-            &#8220;re-mapping&#8221; of names in a nested composite
-            component.</p>
-
-            <p>For example, consider this nested composite component.</p>
-
-            <p>Using page</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;ez:actionSourceOuter&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;f:actionListener <span class="kw3">for</span>=<span
-            class="st0">&quot;button1&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/ez:actionSourceOuter&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>actionSourceOuter.xhtml: Outer composite component</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-            class="st0">&quot;button1&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1"><span class="sc2">&lt;composite:implementation&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;ez:actionSourceInner /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:implementation&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>actionSourceInner.xhtml: the composite component used
-            within a
-            composite component.</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-            class="st0">&quot;button1&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1"><span class="sc2">&lt;composite:implementation&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;h:commandButton <span class="kw3">id</span>=<span
-            class="st0">&quot;button1&quot;</span> <span
-            class="kw3">value</span>=<span class="st0">&quot;the
-            real button&quot;</span> /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:implementation&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>The <code>id</code> of the <code>&lt;h:commandButton&gt;</code>
-            on
-            line 6 of actionSourceInner.xhtml must match the <code>name</code>
-            on
-            line 2 of that file (this is a standard requirement for all
-            composite
-            components, nested or not). That <code>id</code> must
-            also match the
-            <code>name</code> on line 2 of actionSourceOuter.xhtml,
-            and the
-            <code>for</code> on line 2 of the using page.</p>
-
-            <p>The implementation must support any level of nesting as
-            long as the
-            <code>for</code>, <code>name</code>, and
-            <code>id</code> values match
-            up. Furthermore, the <code>targets</code> attribute is
-            also valid for
-            use in this nested fashion.</p>
-
-            <p><b>Naming containers within composite components</b></p>
-
-            <p>Composite components are themselves naming containers so
-            that any
-            possible id conflicts between inner components and components in the
-            using page are avoided. However, special care must be taken when
-            using
-            naming containers in the <code>&lt;composite:implementation&gt;</code>
-            section. In such cases the value of the &#8220;name&#8221;
-            attribute,
-            or the values of the &#8220;targets&#8221; attribute must be
-            used with a
-            clientId relative to the <em>top level component</em> to
-            expose any
-            attached object targets to the using page. For example:</p>
-
-            <p>Using page</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;ez:loginButton&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;f:actionListener <span class="kw3">for</span>=<span
-            class="st0">&quot;button&quot;</span> <span
-            class="kw3">binding</span>=<span class="st0">&quot;#{foo.actionListener}&quot;</span>
-            /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/ez:loginButton&gt;</span>
-            </div></li></ol></div></div>
-
-
-            <p>loginButton.xhtml</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-            class="st0">&quot;button&quot;</span> targets=<span
-            class="st0">&quot;form:button&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1"><span class="sc2">&lt;composite:implementation&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1">&nbsp; <span
-            class="sc2">&lt;h:form <span class="kw3">id</span>=<span
-            class="st0">&quot;form&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            <span class="sc2">&lt;h:commandButton <span class="kw3">id</span>=<span
-            class="st0">&quot;button&quot;</span> <span
-            class="kw3">value</span>=<span class="st0">&quot;Submit&quot;</span>
-            /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; <span
-            class="sc2"><span class="kw2">&lt;</span>/h:form&gt;</span></div></li>
-            <li class="li2"><div class="de2"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:implementation&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>Because the button on line 8 resides within a form, it must
-            be
-            referred to using a client id, relative to the <em>top level
-            component</em>, in the "targets" attribute on line 2. Using a
-            relative
-            clientId is required due to the semantics of
-            <code>UIComponent.findComponent()</code>.</p>
-
-            </div>
-
-        </description>
-        <tag-name>interface</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.InterfaceHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The name of this composite component.
-                Advisory only. The real name is taken from the
-                filename. The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>
-
-            </description>
-            <name>name</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The <code>component-type</code> of the <code>UIComponent</code>
-                that
-                will serve as the <em>composite component root</em>
-                for this composite
-                component. The declared <code>component-family</code>
-                for this
-                component must be <code>javax.faces.NamingContainer</code>.</p></div>
-
-            </description>
-            <name>componentType</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The name to display in a tool palette
-                containing this component. The value of this attribute will be
-                set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>
-
-            </description>
-            <name>displayName</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Is this a "preferred" component. The value
-                of this attribute will be set as the value for this
-                property on the <em>composite component bean
-                descriptor</em>.</p></div>
-
-            </description>
-            <name>preferred</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Is this component only for expert users?
-                The value of this attribute will be set as the value for
-                this property on the <em>composite component bean
-                descriptor</em>.</p></div>
-
-            </description>
-            <name>expert</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>A short description of the purpose of this
-                component. The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>
-
-            </description>
-            <name>shortDescription</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-            <div class="changed_added_2_0">
-            <p>Defines the implementation of the composite
-            component. There must be zero or one of these in a
-            composite component markup file. If a
-            <code>&lt;composite:interface&gt;</code> element
-            appears,
-            there must be a corresponding
-            <code>&lt;composite-implementation&gt;</code>
-            element. If no
-            <code>&lt;composite:interface&gt;</code> element
-            appears,
-            the <code>&lt;composite-implementation&gt;</code>
-            element is
-            optional. </p> </div>
-        </description>
-        <tag-name>implementation</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.ImplementationHandler</handler-class>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Declares an attribute that may be given to an instance of
-            the
-            <em>composite component</em> tag for this composite
-            component. There
-            may be zero or many of these inside of the
-            <code>&lt;composite:interface</code>&gt;
-            section. This element may be
-            nested within other <code>&lt;composite:attribute&gt;</code>
-            elements to
-            convey a usage contract that includes nested properties.</p>
-
-            <p>Please see <a href="tld-summary.html#composite_example">summary
-            page</a> for a usage example.</p>
-
-            <p>The <em>top level component</em> in which this
-            element is
-            ultimately nested must be a <code>NamingContainer</code>.
-            There are certain component properties that must not be
-            exposed using this element. The motivation for this
-            restriction is that the mapping of markup attributes to
-            component properties/attributes does not allow for these
-            attributes to be set. The following properties must not be
-            exposed using this element.</p>
-
-            <ul>
-            <li><p>binding</p></li>
-            <li><p>id</p></li>
-            <li><p>inView</p></li>
-            <li><p>parent</p></li>
-            <li><p>rendered</p></li>
-            <li><p>rendererType</p></li>
-            <li><p>transient</p></li>
-            </ul>
-
-            </div>
-        </description>
-        <tag-name>attribute</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.AttributeHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The name of the attribute as it must appear on the <em>composite
-                component tag</em> in the <em>using page</em>.
-                If the value of the
-                <em>name</em> attribute is equal to (without the
-                quotes)
-                &#8220;action&#8221;, &#8221;actionListener&#8221;,
-                &#8220;validator&#8221;, or &#8220;valueChangeListener&#8221;,
-                the
-                action described in <a target="_"
-                href="../../../javadocs/javax/faces/application/ViewHandler.html#retargetMethodExpressions(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent)">ViewHandler.retargetMethodExpressions()</a>
-                must be taken to handle the attribute. In these cases, the
-                <code>method-signature</code> attribute, if present,
-                must be ignored as
-                its value is derived as described in
-                <code>retargetMethodExpressions()</code>.</div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-
-                <p>If this element has a <code>method-signature</code>
-                attribute, the
-                value of the <code>targets</code> attribute must be
-                interpreted as a
-                space (not tab) separated list of client ids (relative to the
-                <em>top
-                level component</em>) of components within the
-                <code>&lt;composite:implementation&gt;</code>
-                section. Space is used as
-                the delimiter for compatibility with the IDREFS and NMTOKENS
-                data types
-                from the XML Schema. Each entry in the list must be interpreted
-                as the
-                id of an inner component to which the <code>MethodExpression</code>
-                from
-                the <em>composite component tag</em> in the <em>using
-                page</em> must be
-                applied. If this element has a <code>method-signature</code>
-                attribute,
-                but no <code>targets</code> attribute, the value of
-                the
-                <code>name</code> attribute is used as the single
-                entry in the list. If
-                the value of the <code>name</code> attribute is <strong>not</strong>
-                one
-                of the special values listed in the description of the <code>name
-                attribute</code>, <code>targets</code> (or its
-                derived value) need not
-                correspond to the id of an inner component.</p>
-
-                </div>
-
-            </description>
-            <name>targets</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>If this attribute is not required, and a
-                value is not supplied by the page author, use this as
-                the default value.</p></div>
-
-            </description>
-            <name>default</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The name to display in a tool palette
-                containing this component. The value of this attribute will be
-                set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>
-
-            </description>
-            <name>displayName</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>True if the page author must supply a value
-                for this attribute.</p></div>
-
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Is this a "preferred" component. The value
-                of this attribute will be set as the value for this
-                property on the <em>composite component bean
-                descriptor</em>.</p></div>
-
-            </description>
-            <name>preferred</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Is this component only for expert users?
-                The value of this attribute will be set as the value for
-                this property on the <em>composite component bean
-                descriptor</em>.</p></div>
-
-            </description>
-            <name>expert</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>A short description of the purpose of this
-                component. The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>
-
-            </description>
-            <name>shortDescription</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Declares that this attribute must be a <code>MethodExpression</code>
-                whose method signature is described by the value of this
-                attribute. The
-                signature must be described using fully qualified class names
-                wherever a
-                type is required. This attribute is mutually exclusive with the
-                "type"
-                attribute. If both attributes are present, the
-                "method-signature"
-                attribute is ignored.</p>
-
-                <p>PENDING: when this file is generated from the
-                web-facesuicomponent_2_0.xsd, we will not need to copy the
-                content here
-                manually.</p>
-
-                <p>Provides the signature of the Java method. The syntax
-                of
-                the method-signature element is as follows (taken from
-                function-signature in web-jsptaglibrary_2_1.xsd):</p>
-
-                <p>MethodSignature ::= ReturnType S MethodName S?
-                '(' S? Parameters? S? ')'</p>
-
-                <p>ReturnType ::= Type</p>
-
-                <p>MethodName ::= Identifier</p>
-
-                <p>Parameters ::= Parameter
-                | ( Parameter S? ',' S? Parameters )</p>
-
-                <p>Parameter ::= Type</p>
-
-                <p>Where:</p>
-
-                <ul>
-
-                <li><p>Type is a basic type or a fully qualified
-                Java class name (including package name),
-                as per the 'Type' production in the Java
-                Language Specification, Second Edition,
-                Chapter 18.</p></li>
-
-                <li><p>Identifier is a Java identifier, as per
-                the 'Identifier' production in the Java
-                Language Specification, Second
-                Edition, Chapter 18.</p></li>
-
-                </ul>
-
-                <p>Example:</p>
-
-                <p><code>java.lang.String nickName(
-                java.lang.String, int )</code></p>
-
-
-                </div>
-
-            </description>
-            <name>method-signature</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Declares that this attribute must be a <code>ValueExpression</code>
-                whose expected type is given by the value of this attribute. If
-                not
-                specified, and no "method-signature" attribute is present,
-                <code>java.lang.Object</code> is assumed. This
-                attribute is mutually
-                exclusive with the "method-signature" attribute. If both attributes are
-                present, the
-                "method-signature" attribute is ignored. </p> </div>
-
-            </description>
-            <name>type</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-
-            <p>Declares that this composite component supports a facet
-            with the
-            name given by the value of the "name" attribute. </p>
-
-            <p>Please see <code>&lt;<a
-            href="interface.html">composite:interface</a>&gt;</code>
-            for a usage
-            example.</p>
-
-
-            </div>
-        </description>
-        <tag-name>facet</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.DeclareFacetHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The name of the attribute as it must appear
-                on the <em>composite component tag</em> in the
-                <em>using page</em>.</p></div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The name to display in a tool palette
-                containing this component. The value of this attribute will be
-                set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>
-
-            </description>
-            <name>displayName</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>True if the page author must supply a facet with this
-                name.</p></div>
-
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Is this a "preferred" facet. The value
-                of this attribute will be set as the value for this
-                property on the <em>composite component bean
-                descriptor</em>.</p></div>
-
-            </description>
-            <name>preferred</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>Is this facet only for expert users?
-                The value of this attribute will be set as the value for
-                this property on the <em>composite component bean
-                descriptor</em>.</p></div>
-
-            </description>
-            <name>expert</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>A short description of the purpose of this
-                facet. The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>
-
-            </description>
-            <name>shortDescription</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-
-            <p>This element is used in the
-            <code>&lt;composite:implementation&gt;</code>
-            section. The facet with
-            the name equal to the value of the name attribute, given by the page
-            author in the using page, will be rendered at this point in the
-            composite component VDL view. </p>
-
-
-            <p>The implementation of this tag handler must insert a
-            component with <code>component-type</code>
-            <code>javax.faces.Output</code> and <code>renderer-type</code>
-            <code>javax.faces.CompositeFacet</code> as a
-            child at this point in the component tree.</p>
-
-            <p>The implementation of this tag handler must store an
-            attribute into
-            the created component's attribute map under the key given by the
-            value
-            of the symbolic constant <code>UIComponent.FACETS_KEY</code>.
-            The value
-            for this key must be the evaluated value of the "name" attribute.</p>
-
-            </div>
-        </description>
-        <tag-name>renderFacet</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.RenderFacetHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>The value of the name attribute as it must appear on an
-                <code>&lt;f:facet&gt;</code> tag nested
-                within the <em>composite
-                component tag</em> in the <em>using page</em>.</p></div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <div class="changed_added_2_0">
-
-                <p>If <code>true</code>, and there is no such
-                facet present on the top
-                level component, a <code>TagException</code> must be
-                thrown, containing
-                the <code>Location</code>, the facet name, and a
-                localized descriptive
-                error message.</p>
-
-                </div>
-
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-
-            <p>This element is used in the
-            <code>&lt;composite:implementation&gt;</code>
-            section. Any child
-            components or template text within the composite component tag in
-            the
-            using page will be re-parented into the composite component at the
-            point
-            indicated by this tag's placement within the
-            <code>&lt;composite:implementation&gt;</code>
-            section. The normal
-            use-case for this element is to have only one occurrence within the
-            <code>&lt;composite:implementation&gt;</code>
-            section. Inserting
-            multiple occurrences may cause duplicate id errors. The results are
-            undefined if there are multiple occurrences of this element in the
-            <code>&lt;composite:implementation&gt;</code>
-            section.</p>
-
-            </div>
-        </description>
-        <tag-name>insertChildren</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.InsertChildrenHandler</handler-class>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Declares that the composite component whose
-            contract is declared by the
-            <code>&lt;composite:interface&gt;</code> in
-            which this
-            element is nested exposes an implementation of
-            <code>ValueHolder</code> suitable for use as the target
-            of
-            <em>attached objects</em> in <em>the using page</em>.
-            Any attached objects suitable for implementations of
-            <code>ValueHolder</code> may be attached to the
-            composite
-            component. Consider this excerpt from <em>the using
-            page</em>:
-            </p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;ez:foo&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;f:converter <span class="kw3">for</span>=<span
-            class="st0">&quot;userid&quot;</span> binding=<span
-            class="st0">&quot;#{bean.converter}&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/ez:foo&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>Line 2 refers to the
-            <code>&lt;composite:valueHolder&gt;</code>
-            declaration on
-            line 2 of <code>foo.xhtml</code>:</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;composite:valueHolder <span class="kw3">name</span>=<span
-            class="st0">&quot;userid&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1"><span class="sc2">&lt;composite:implementation&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;h:inputText <span class="kw3">id</span>=<span
-            class="st0">&quot;userid&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:implementation&gt;</span>
-            </div></li></ol></div></div>
-
-            <p></p>
-
-            <p>It is possible to declare that a single
-            <code>&lt;composite:valueHolder&gt;</code>
-            element should cause multiple
-            components within the <code>&lt;composite:implementation&gt;</code>
-            section to be the targets of an <em>attached object</em>
-            in the
-            using page. Assuming the same <em>using page</em>
-            excerpt as
-            above, the revised <em>VDL view</em> is:</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;composite:valueHolder targets=<span
-            class="st0">&quot;userid,password&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:interface&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1"><span class="sc2">&lt;composite:implementation&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;h:inputText <span class="kw3">id</span>=<span
-            class="st0">&quot;userid&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; <span
-            class="sc2">&lt;h:inputText <span class="kw3">id</span>=<span
-            class="st0">&quot;password&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:implementation&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>In this case, the "targets" attribute on the
-            <code>&lt;composite:valueHolder&gt;</code>
-            element, on line 2 above,
-            replaces the "name" attribute in the previous example. "targets" is
-            a
-            list of ids of client ids (relative to the <em>top level
-            component</em>)
-            within the <code>&lt;composite:implementation&gt;</code>
-            section. In
-            this case, "targets" refers to the <code>&lt;h:inputText&gt;</code>
-            components on lines 6 and 7 above.</p>
-
-            <p>Please see <code>&lt;<a
-            href="interface.html">composite:interface</a>&gt;</code>
-            for a usage
-            example.</p>
-
-            </div>
-        </description>
-        <tag-name>valueHolder</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.ValueHolderAttachedObjectTargetHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                The value of this attribute maps back to the "for" attribute on
-                an attachable object
-                nested within a composite component. If the "targets" attribute
-                is not specified,
-                this value also represents the component ID of the target
-                component within the
-                that the <code>&lt;composite:implementation&gt;</code>
-                ActionListener should be mapped to.
-                </p>
-                </div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>If present, this must be a space (not tab) separated
-                list of client
-                ids (relative to the <em>top level component</em>)
-                of components within
-                the <code>&lt;composite:implementation&gt;</code>
-                section. Space is
-                used as the delimiter for compatibility with the IDREFS and
-                NMTOKENS
-                data types from the XML Schema. </p></div>
-
-            </description>
-            <name>targets</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Declares that the composite component whose
-            contract is declared by the
-            <code>&lt;composite:interface&gt;</code> in
-            which this
-            element is nested exposes an implementation of
-            <code>EditableValueHolder</code> suitable for use as the
-            target of <em>attached objects</em> in <em>the
-            using
-            page</em>. Any attached objects suitable for
-            implementations of <code>EditableValueHolder</code> may
-            be
-            attached to the composite component.The example from <a
-            href="valueHolder.html"><code>&lt;composite:valueHolder&gt;</code></a>
-            still applies.
-            </p>
-
-            <p>Please see <code>&lt;<a
-            href="interface.html">composite:interface</a>&gt;</code>
-            for a usage
-            example.</p>
-
-            </div>
-        </description>
-        <tag-name>editableValueHolder</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.EditableValueHolderAttachedObjectTargetHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                The value of this attribute maps back to the "for" attribute on
-                an attachable object
-                nested within a composite component. If the "targets" attribute
-                is not specified,
-                this value also represents the component ID of the target
-                component within the
-                that the <code>&lt;composite:implementation&gt;</code>
-                ActionListener should be mapped to.
-                </p>
-                </div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>If present, this must be a space (not tab) separated
-                list of client
-                ids (relative to the <em>top level component</em>)
-                of components within
-                the <code>&lt;composite:implementation&gt;</code>
-                section. Space is
-                used as the delimiter for compatibility with the IDREFS and
-                NMTOKENS
-                data types from the XML Schema.</p></div>
-
-            </description>
-            <name>targets</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Declares that the composite component whose
-            contract is declared by the
-            <code>&lt;composite:interface&gt;</code> in
-            which this
-            element is nested exposes an implementation of
-            <code>ActionSource2</code> suitable for use as the
-            target of
-            <em>attached objects</em> in <em>the using page</em>.
-            Any attached objects suitable for implementations of
-            <code>ActionSource2</code> may be attached to the
-            composite
-            component. Consider this excerpt from <em>the using
-            page</em>:
-            </p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;ez:loginPanel <span
-            class="kw3">id</span>=<span class="st0">&quot;loginPanel&quot;</span>
-            model=<span class="st0">&quot;#{bean}&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;f:valueChangeListener <span class="kw3">for</span>=<span
-            class="st0">&quot;username&quot;</span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-            &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;
-            &nbsp; binding=<span class="st0">&quot;#{bean.useridValueChangeListener}&quot;</span>
-            /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;f:actionListener <span class="kw3">for</span>=<span
-            class="st0">&quot;loginEvent&quot;</span> </div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-            &nbsp; &nbsp; binding=<span class="st0">&quot;#{bean.loginEventListener}&quot;</span>
-            /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1">&nbsp; <span
-            class="sc2">&lt;f:actionListener <span class="kw3">for</span>=<span
-            class="st0">&quot;cancelEvent&quot;</span> </div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-            &nbsp; &nbsp; binding=<span class="st0">&quot;#{bean.cancelEventListener}&quot;</span>
-            /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp;</div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;f:actionListener <span class="kw3">for</span>=<span
-            class="st0">&quot;allEvents&quot;</span> </div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-            &nbsp; &nbsp; binding=<span class="st0">&quot;#{bean.allEventsListener}&quot;</span>
-            /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/ez:loginPanel&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>The <code>&lt;f:actionListener&gt;</code>
-            elements on lines 4, 7, and 10
-            refer to the <em>attached objects</em> declared on lines
-            2, 3 and 4 below.</p>
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc2">&lt;composite:interface
-            <span class="kw3">name</span>=<span class="st0">&quot;loginPanel&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-            class="st0">&quot;loginEvent&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; <span
-            class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-            class="st0">&quot;cancelEvent&quot;</span> /<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;composite:actionSource <span class="kw3">name</span>=<span
-            class="st0">&quot;allEvents&quot;</span> targets=<span
-            class="st0">&quot;loginEvent cancelEvent&quot;</span>
-            /<span class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;</span>/composite:interface&gt;</span>
-            </div></li></ol></div></div>
-
-            <p>Most of the concepts from example content from <a
-            href="valueHolder.html"><code>&lt;composite:valueHolder&gt;</code></a>
-            also applies in the case of
-            <code>&lt;composite:actionSource&gt;</code>.</p>
-
-            <p>Please see <code>&lt;<a
-            href="interface.html">composite:interface</a>&gt;</code>
-            for a usage
-            example.</p>
-
-
-            </div>
-        </description>
-        <tag-name>actionSource</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.ActionSource2AttachedObjectTargetHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                The value of this attribute maps back to the "for" attribute on
-                an attachable object
-                nested within a composite component. If the "targets" attribute
-                is not specified,
-                this value also represents the component ID of the target
-                component within the
-                that the <code>&lt;composite:implementation&gt;</code>
-                ActionListener should be mapped to.
-                </p>
-                </div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>If present, this must be a space (not tab) separated
-                list of client
-                ids (relative to the <em>top level component</em>)
-                of components within
-                the <code>&lt;composite:implementation&gt;</code>
-                section. Space is
-                used as the delimiter for compatibility with the IDREFS and
-                NMTOKENS
-                data types from the XML Schema.</p></div>
-
-            </description>
-            <name>targets</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Used within a <code>&lt;composite:interface&gt;</code>
-            section,
-            within any sub-element of that section, to include XML content not
-            defined by this specification. This element can be used to
-            incorporate
-            <a target="_" href="http://jcp.org/en/jsr/detail?id=276">JSR-276</a>
-            metadata into a composite component.</p>
-
-            </div>
-        </description>
-        <tag-name>extension</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.ExtensionHandler</handler-class>
-    </tag>
-    <tag>
-        <description>
-
-            <div class="changed_added_2_0">
-
-            <p>The presence of this tag in a
-            <code>&lt;composite:implementation&gt;</code>
-            section must cause the
-            named facet to be taken from the facet map of the <em>top
-            level
-            component</em> and inserted as a facet child of the component
-            in which
-            this element is nested.</p>
-
-            </div>
-
-        </description>
-        <tag-name>insertFacet</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.composite.InsertFacetHandler</handler-class>
-        <attribute>
-            <description>
-
-                <div class="changed_added_2_0">
-
-                <p>The name of the facet child on the <em>top level
-                component</em> which
-                must be inserted as a facet child of the component in which this
-                element
-                is nested.</p>
-
-                </div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <div class="changed_added_2_0">
-
-                <p>If <code>true</code>, and there is no such
-                facet present on the top
-                level component, a <code>TagException</code> must be
-                thrown, containing
-                the <code>Location</code>, the facet name, and a
-                localized descriptive
-                error message.</p>
-
-                </div>
-
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-    </tag>
-</facelet-taglib>
diff --git a/jsf-ri/conf/share/composite.tld b/jsf-ri/conf/share/composite.tld
deleted file mode 100644
index cf6060c..0000000
--- a/jsf-ri/conf/share/composite.tld
+++ /dev/null
@@ -1,1715 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<taglib xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">
-
-<!-- ============== Tag Library Description Elements ============= -->
-
-    <description>
-
-<![CDATA[
-
-</pre>
-
-<div class="changed_added_2_0">
-
-  <p>Describes the Facelets2 tag library used for declaring and defining
-  the usage contract for composite UI Components.  When authoring a
-  composite component, use of this tag library is largely optional,
-  though always recommended.  Declaring and defining a composite
-  component with this taglib provides valuable information about the
-  component that can be used by tools and users of the composite
-  component. In most cases, a composite component can be authored
-  without declaring and defining its usage contract with this taglib.
-  PENDING: the limit of what one can do without declaring and defining a
-  usage contract must be cleary specified and documented.  PENDING: The
-  implementation team must help discover these limits.
-  </p>
-
-<h2>Creating a Composite Component</h2>
-
-  <p>The default implementation must support authoring A composite
-  component is declared by creating a Facelets2 file inside of a resource
-  library.  (See section JSF.2.6 of the specification prose document for
-  more information about resource libraries.)  A composite component
-  must reside within a resource library.  It is not possible to create a
-  composite component without putting it inside of a resource
-  library.</p>
-
-  <p>The default XML namespace URI of the taglib that contains the
-  composite component, for use in <em>the using page</em>, is
-  <code>http://java.sun.com/jsf/composite/<composite-library-name></code>,
-  where <code><composite-library-name></code> is the name of the
-  resource library.  For example:</p>
-
-<pre><code>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <br />
-            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br />
-<html xmlns="http://www.w3.org/1999/xhtml"<br />
-      xmlns:h="http://java.sun.com/jsf/html"<br />
-      xmlns:f="http://java.sun.com/jsf/core"<br />
-      xmlns:ui="http://java.sun.com/jsf/facelets"<br />
-      xmlns:ez="<i>http://java.sun.com/jsf/composite/<b>ezcomp</b></i>"><br />
-...<br />
-</code></pre>
-
-<p>This declares that any Facelets2 file in the resource
-library called <code>ezcomp</code> can be used as a regular JSF UI
-component in a view with the above namespace declaration by using the
-"<code>ez</code>" prefix.  For example, placing a file called
-<code>foo.xhtml</code> in a resource library called <code>ezcomp</code>
-would make that file accessible like this.</p>
-
-<pre><code>
-<ez:foo />
-</code></pre>
-
-
-  <p>The implementation must also support declaring the
-  namespace of the tag library in a JSF VDL tag library descriptor.
-  This descriptor file is optional and is useful for component vendors
-  that do not want to use the default XML namespace.  This version of
-  the proposal currently uses the facelet taglib descriptor syntax.  For
-  example: </p>
-
-<pre><code>
-<facelet-taglib><br />
-    <namespace>http://domain.com/path</namespace> <br />
-    <composite-library-name>compositeTest</composite-library-name> <br />
-</facelet-taglib> <br />
-</code></pre>
-
-  <p>Components from that taglibrary may be used in a using page by
-  declaring them in the XML namespace for that view:</p>
-
-<pre><code>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <br />
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br />
-<html xmlns="http://www.w3.org/1999/xhtml"<br />
-      xmlns:h="http://java.sun.com/jsf/html"<br />
-      xmlns:f="http://java.sun.com/jsf/core"<br />
-      xmlns:ui="http://java.sun.com/jsf/facelets"<br />
-      xmlns:ez="<i><b>http://domain.com/path/namespace</b></i>"><br />
-...<br />
-</code></pre>
-
-
-  <p><a name="composite_example">Below is an example of a fairly
-  involved composite component declaration.  Such a declaration might
-  appear in <code>foo.xhtml</code>.</a></p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><<a href="interface.html">composite:interface</a> <span class="kw3">name</span>=<span class="st0">"foo"</span></div></li>
-<li class="li2"><div class="de2">                     displayName=<span class="st0">"Very Simple Login Panel"</span></div></li>
-<li class="li1"><div class="de1">                     preferred=<span class="st0">"true"</span></div></li>
-<li class="li2"><div class="de2">                     expert=<span class="st0">"false"</span></div></li>
-<li class="li1"><div class="de1">                     shortDescription=<span class="st0">"An illustration of the composite component feature"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><<a href="attribute.html">composite:attribute</a> <span class="kw3">name</span>=<span class="st0">"model"</span> required=<span class="st0">"true"</span><span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><composite:attribute <span class="kw3">name</span>=<span class="st0">"loginAction"</span> required=<span class="st0">"true"</span> method-signature=<span class="st0">"java.lang.Object action()"</span>/ <span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><span class="kw2"><</span>/composite:attribute></span></div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><composite:attribute <span class="kw3">name</span>=<span class="st0">"valueChangeListener"</span> targets=<span class="st0">"username"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:attribute <span class="kw3">name</span>=<span class="st0">"specialMethodExpression"</span></div></li>
-<li class="li1"><div class="de1">                       method-signature=<span class="st0">"com.foo.User validateCurrentUser()"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:attribute <span class="kw3">name</span>=<span class="st0">"loginButtonLabel"</span> default=<span class="st0">"Login"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><<a href="editableValueHolder.html">composite:editableValueHolder</a> <span class="kw3">name</span>=<span class="st0">"username"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"loginEvent"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"cancelEvent"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"allEvents"</span> targets=<span class="st0">"loginEvent cancelEvent"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:interface></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><<a href="implementation.html">composite:implementation</a> <span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><ui:decorate template=<span class="st0">"fooTemplate.xhtml"</span><span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">    <span class="sc2"><ui:define <span class="kw3">name</span>=<span class="st0">"header"</span><span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">      <span class="sc2"><span class="kw2"><p></span></span>This is the login panel header<span class="sc2"><span class="kw2"></p></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">    <span class="sc2"><span class="kw2"><</span>/ui:define></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">    <span class="sc2"><ui:define <span class="kw3">name</span>=<span class="st0">"body"</span><span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">      <span class="sc2"><span class="kw2"><p></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">         <span class="sc2"><h:inputText <span class="kw3">id</span>=<span class="st0">"username"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">      <span class="sc2"><span class="kw2"></p></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">      <span class="sc2"><span class="kw2"><p></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">        <span class="sc2"><h:commandButton <span class="kw3">id</span>=<span class="st0">"loginEvent"</span> </div></li>
-<li class="li1"><div class="de1">                         <span class="kw3">value</span>=<span class="st0">"#{cc.attrs.loginButtonLabel}"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">        <span class="sc2"><span class="kw2"><</span>/h:commandButton></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">        <span class="sc2"><h:commandButton <span class="kw3">id</span>=<span class="st0">"cancelEvent"</span> <span class="kw3">value</span>=<span class="st0">"Cancel"</span> <span class="kw3">action</span>=<span class="st0">"cancel"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">        <span class="sc2"><span class="kw2"><</span>/h:commandButton></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">        <span class="sc2"><special:validateUserButton </div></li>
-<li class="li2"><div class="de2">          validateUser=<span class="st0">"#{cc.attrs.specialMethodExpression}"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">      <span class="sc2"><span class="kw2"></p></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><span class="kw2"><</span>/ui:define></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><ui:define <span class="kw3">name</span>=<span class="st0">"footer"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">     <span class="sc2"><span class="kw2"><p></span></span>This is the login panel footer<span class="sc2"><span class="kw2"></p></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><span class="kw2"><</span>/ui:define></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><span class="kw2"><</span>/ui:decorate></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:implementation></span> </div></li></ol></div></div>
-
-<p>The values for attributes in a composite component VDL file can be
-fully localized by putting them inside a ResourceBundle in the same
-directory as the VDL view and accessing them with the per-component
-resource bundle syntax.  Consider the file <code>foo.xhtml</code>, in
-the resource library <code>ezcomp</code>.  The
-<code>shortDescription</code> element could be changed to be:</p>
-
-<pre><code>
-<composite:interface shortDescription="#{cc.resourceBundleMap.shortDescription}" >
-</code></pre>
-
-<p>In this case, In the same <code>ezcomp</code> directory as
-<code>foo.xhtml</code>, there would be a <code>foo.properties</code>
-file that would contain this entry:</p>
-
-<pre><code>
-shortDescription=A really nifty login panel.
-</code></pre>
-
-<p>The normal localization rules for <code>ResourceBundle</code> would
-apply.</p>
-
-</div>
-
-
-
-<pre>
-
-]]>
-
-    </description>
-
-    <tlib-version>
-        2.1
-    </tlib-version>
-
-    <short-name>
-        composite
-    </short-name>
-
-    <uri>
-        http://java.sun.com/jsf/composite
-    </uri>
-
-<!-- ===================== HTML 4.0 basic tags ====================== -->
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-
-            <p><span class="changed_modified_2_0_rev_a">This</span>
-            element declares the usage contract for a composite
-            component.  Optionally, and at the component author's
-            discretion, this contract exposes the features of one or
-            more inner components to the page author.  The page author
-            can work with the composite component as a single component
-            whose feature set is the union of the features declared in
-            the usage contract.</p>
-
-            <p>For example, consider a composite component that
-            implements the functionality of a "login panel".  Such a
-            component would likely have two text fields and one button.
-            The user of such a component might like to do one or more of
-            the following.</p>
-
-            <ul>
-
-	  <li><p>Be able to listen for the <code>ActionEvent</code>
-            on the button.</p>
-
-           <p>In this case, a
-            <code><composite:actionSource></code> element is
-            included in the usage contract that refers to the inner
-            button in the <code><composite:implementation></code>
-            section.</p>
-
-          </li>
-
-	  <li><p>Provide an "action" to invoke when the button is pressed.
-	  </p>
-
-           <p>In this case, a
-            <code><composite:attribute></code> element is included
-            in the usage contract that refers to the inner button in the
-            <code><composite:implementation></code> section and
-            declares the proper method signature for an "action".</p>
-
-</li>
-
-	  <li><p>Provide parameters to the composite component for
-	  labels and other rendering specific aspects of the composite
-	  component.</p>
-
-          <p>In this case, one or more
-          <code><composite:attribute></code> elements are included
-          in the usage contract and those parameters are referred to in
-          the <code><composite:implementation></code> section
-          using EL expressions like
-          <code>#{cc.attrs.usernameLabel}</code>,
-          assuming <code>usernameLabel</code> is the <code>name</code>
-          of one of the <code><composite:attribute></code>
-          elements in the usage contract.</p>
-
-          </li>
-
-
-	  <li><p>Add <code>ValueChangeListener</code>s,
-	  <code>Converter</code>s, or <code>Validator</code>s to either
-	  or both text fields.
-	  </p>
-
-           <p>In this case, a
-           <code><composite:editableValueHolder></code> element is
-           included in the usage contract that refers to the inner text
-           field in the <code><composite:implementation></code>
-           section.  In the case of wanting to enable only adding a
-           <code>Converter</code> (and not a
-           <code>ValueChangeListener</code> or <code>Validator</code>, a
-           <code><composite:valueHolder></code> element would be
-           used.</p>
-
-            </li>
-
-	  <li><p>Add facet children to the login panel.</p>
-
-          <p>In this case, a <code><composite:facet></code>
-          element is included in the usage contract that refers to the
-          inner <code><composite:renderFacet></code> element in
-          the <code><composite:implementation></code> section.
-          </p>
-
-           </li>
-
-
-            </ul>
-
-            <p>For each of the behaviorial interfaces in Section JSF.3.2 of
-            the specification, there is a tag in the
-            <code>composite:</code> library to nest inside of the
-            <code><composite:interface></code> section.
-            </p>
-
-
-            <p>If the <code><composite:interface></code> section
-            is not present in a <em>VDL view</em>, the contract will be
-            inferred as described in the specification.  There must be
-            zero or one of these elements in a composite component VDL
-            file.  If a <code><composite:interface></code> element
-            does appear, there must be an accompanying
-            <code><composite:implementation></code> element in the
-            same VDL file.  </p>
-
-           <p><b>Nesting of composite components</b></p>
-
-           <p>The implementation must support nesting of composite
-           components.  Specifically, it must be possible for the
-           <code><composite:implementation></code> section of a
-           composite component to act as the <em>using page</em> for
-           another composite component.  When a composite component
-           exposes a behavioral interface to the <em>using page</em>,
-           such as a <code><composite:actionSource></code>,
-           <code><composite:editableValueHolder></code>,
-           <code><composite:valueHolder></code> or other
-           behavioral interface, it must be possible to
-           “propogate” the exposure of such an interface in
-           the case of a nested composite component.  The composite
-           component author must ensure that the value of the
-           <code>name</code> attributes exactly match at all levels of
-           the nesting to enable this exposure to work.  The
-           implementation is not required to support
-           “re-mapping” of names in a nested composite
-           component.</p>
-
-           <p>For example, consider this nested composite component.</p>
-
-           <p>Using page</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><ez:actionSourceOuter></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:actionListener <span class="kw3">for</span>=<span class="st0">"button1"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/ez:actionSourceOuter></span> </div></li></ol></div></div>
-
-<p>actionSourceOuter.xhtml: Outer composite component</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><composite:interface></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"button1"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:interface></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1"><span class="sc2"><composite:implementation></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><ez:actionSourceInner /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:implementation></span> </div></li></ol></div></div>
-
-<p>actionSourceInner.xhtml: the composite component used within a
-composite component.</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><composite:interface></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"button1"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:interface></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1"><span class="sc2"><composite:implementation></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><h:commandButton <span class="kw3">id</span>=<span class="st0">"button1"</span> <span class="kw3">value</span>=<span class="st0">"the real button"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:implementation></span> </div></li></ol></div></div>
-
-<p>The <code>id</code> of the <code><h:commandButton></code> on
-line 6 of actionSourceInner.xhtml must match the <code>name</code> on
-line 2 of that file (this is a standard requirement for all composite
-components, nested or not).  That <code>id</code> must also match the
-<code>name</code> on line 2 of actionSourceOuter.xhtml, and the
-<code>for</code> on line 2 of the using page.</p>
-
-<p>The implementation must support any level of nesting as long as the
-<code>for</code>, <code>name</code>, and <code>id</code> values match
-up.  Furthermore, the <code>targets</code> attribute is also valid for
-use in this nested fashion.</p>
-
-<p><b>Naming containers within composite components</b></p>
-
-<p>Composite components are themselves naming containers so that any
-possible id conflicts between inner components and components in the
-using page are avoided.  However, special care must be taken when using
-naming containers in the <code><composite:implementation></code>
-section.  In such cases the value of the “name” attribute,
-or the values of the “targets” attribute must be used with a
-clientId relative to the <em>top level component</em> to expose any
-attached object targets to the using page.  For example:</p>
-
-           <p>Using page</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><ez:loginButton></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:actionListener <span class="kw3">for</span>=<span class="st0">"button"</span> <span class="kw3">binding</span>=<span class="st0">"#{foo.actionListener}"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/ez:loginButton></span> </div></li></ol></div></div>
-
-
-<p>loginButton.xhtml</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><composite:interface></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"button"</span> targets=<span class="st0">"form:button"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:interface></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1"><span class="sc2"><composite:implementation></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><h:form <span class="kw3">id</span>=<span class="st0">"form"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">    <span class="sc2"><h:commandButton <span class="kw3">id</span>=<span class="st0">"button"</span> <span class="kw3">value</span>=<span class="st0">"Submit"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><span class="kw2"><</span>/h:form></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><</span>/composite:implementation></span> </div></li></ol></div></div>
-
-<p>Because the button on line 8 resides within a form, it must be
-referred to using a client id, relative to the <em>top level
-component</em>, in the "targets" attribute on line 2.  Using a relative
-clientId is required due to the semantics of
-<code>UIComponent.findComponent()</code>.</p>
-
-</div>
-]]>
-        </description>
-        <name>
-            interface
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The name of this composite component.
-                Advisory only.  The real name is taken from the
-                filename.  The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The <code>component-type</code> of the <code>UIComponent</code> that
-will serve as the <em>composite component root</em> for this composite
-component.  The declared <code>component-family</code> for this
-component must be <code>javax.faces.NamingContainer</code>.</p></div>]]>
-
-            </description>
-            <name>
-                componentType
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The name to display in a tool palette
-                containing this component.  The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                displayName
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Is this a "preferred" component.  The value
-                of this attribute will be set as the value for this
-                property on the <em>composite component bean
-                descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                preferred
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Is this component only for expert users?
-                The value of this attribute will be set as the value for
-                this property on the <em>composite component bean
-                descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                expert
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>    
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>A short description of the purpose of this
-                component.  The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                shortDescription
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>  
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-
-<p> The "hidden" flag is used to identify features that are intended only for tool use, and which should not be exposed to humans.</p>
-
-</div>]]>
-                
-            </description>
-            <name>hidden</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>  </tag>
-
-    <tag>
-        <description>
-            <![CDATA[
-<div class="changed_added_2_0">
-<p>Defines the implementation of the composite
-            component.  There must be zero or one of these in a
-            composite component markup file.  If a
-            <code><composite:interface></code> element appears,
-            there must be a corresponding
-            <code><composite-implementation></code> element. If no
-            <code><composite:interface></code> element appears,
-            the <code><composite-implementation></code> element is
-            optional.  </p> </div>]]>
-        </description>
-        <name>
-            implementation
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-  </tag>
-
-  <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p><span class="changed_modified_2_0_rev_a">Declares</span> an attribute that may be given to an instance of the
-<em>composite component</em> tag for this composite component.  There
-may be zero or many of these inside of the
-<code><composite:interface</code>> section.  This element may be
-nested within other <code><composite:attribute></code> elements to
-convey a usage contract that includes nested properties.</p>
-
-<p>Please see <a href="tld-summary.html#composite_example">summary
-page</a> for a usage example.</p>
-
-            <p>The <em>top level component</em> in which this element is
-            ultimately nested must be a <code>NamingContainer</code>.
-            There are certain component properties that must not be
-            exposed using this element.  The motivation for this
-            restriction is that the mapping of markup attributes to
-            component properties/attributes does not allow for these
-            attributes to be set.  The following properties must not be
-            exposed using this element.</p>
-
-  	<ul>
-  	  <li><p>binding</p></li>
-  	  <li><p>id</p></li>
-  	  <li><p>inView</p></li>
-  	  <li><p>parent</p></li>
-  	  <li><p>rendered</p></li>
-  	  <li><p>rendererType</p></li>
-  	  <li><p>transient</p></li>
- 	</ul>
-
-</div>]]>
-        </description>
-        <name>
-            attribute
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The name of the attribute as it must appear on the <em>composite
-component tag</em> in the <em>using page</em>.  If the value of the
-<em>name</em> attribute is equal to (without the quotes)
-“action”, “actionListener”,
-“validator”, or “valueChangeListener”, the
-action described in <a target="_"
-href="../../../javadocs/javax/faces/application/ViewHandler.html#retargetMethodExpressions(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent)">ViewHandler.retargetMethodExpressions()</a>
-must be taken to handle the attribute.  In these cases, the
-<code>method-signature</code> attribute, if present, must be ignored as
-its value is derived as described in
-<code>retargetMethodExpressions()</code>.</div>]]>
-
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>If this element has a <code>method-signature</code> attribute, the
-value of the <code>targets</code> attribute must be interpreted as a
-space (not tab) separated list of client ids (relative to the <em>top
-level component</em>) of components within the
-<code><composite:implementation></code> section.  Space is used as
-the delimiter for compatibility with the IDREFS and NMTOKENS data types
-from the XML Schema.  Each entry in the list must be interpreted as the
-id of an inner component to which the <code>MethodExpression</code> from
-the <em>composite component tag</em> in the <em>using page</em> must be
-applied.  If this element has a <code>method-signature</code> attribute,
-but no <code>targets</code> attribute, the value of the
-<code>name</code> attribute is used as the single entry in the list.  If
-the value of the <code>name</code> attribute is <strong>not</strong> one
-of the special values listed in the description of the <code>name
-attribute</code>, <code>targets</code> (or its derived value) need not
-correspond to the id of an inner component.</p>
-
-</div>]]>
-
-            </description>
-            <name>
-                targets
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>If this attribute is not required, and a
-                value is not supplied by the page author, use this as
-                the default value.</p></div>]]>
-
-            </description>
-            <name>
-                default
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The name to display in a tool palette
-                containing this component.  The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                displayName
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>True if the page author must supply a value
-                for this attribute.  The default value is false.</p></div>]]>
-
-            </description>
-            <name>
-                required
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Is this a "preferred" component.  The value
-                of this attribute will be set as the value for this
-                property on the <em>composite component bean
-                descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                preferred
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Is this component only for expert users?
-                The value of this attribute will be set as the value for
-                this property on the <em>composite component bean
-                descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                expert
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>    
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>A short description of the purpose of this
-                component.  The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                shortDescription
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>  
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Declares that this attribute must be a <code>MethodExpression</code>
-whose method signature is described by the value of this attribute.  The
-signature must be described using fully qualified class names wherever a
-type is required.  This attribute is mutually exclusive with the "type"
-attribute.  If both attributes are present, the "method-signature"
-attribute is ignored.</p> 
-
-<p>PENDING: when this file is generated from the
-web-facesuicomponent_2_0.xsd, we will not need to copy the content here
-manually.</p>
-
-	    <p>Provides the signature of the Java method.  The syntax of
-	    the method-signature element is as follows (taken from
-	    function-signature in web-jsptaglibrary_2_1.xsd):</p>
-
-		<p>MethodSignature ::= ReturnType S MethodName S?
-				      '(' S? Parameters? S? ')'</p>
-
-                <p>ReturnType        ::= Type</p>
-
-		<p>MethodName        ::= Identifier</p>
-
-		<p>Parameters        ::=   Parameter
-				      | ( Parameter S? ',' S? Parameters )</p>
-
-                <p>Parameter         ::= Type</p>
-
-		<p>Where:</p>
-
-<ul>
-
- 		    <li><p>Type is a basic type or a fully qualified
-		      Java class name (including package name),
-		      as per the 'Type' production in the Java
-		      Language Specification, Second Edition,
-		      Chapter 18.</p></li>
-
-                    <li><p>Identifier is a Java identifier, as per
-		      the 'Identifier' production in the Java
-		      Language Specification, Second
-		      Edition, Chapter 18.</p></li>
-
-</ul>
-
-	    <p>Example:</p>
-
-	    <p><code>java.lang.String nickName( java.lang.String, int )</code></p>
-
-
-
-</div>]]>
-
-            </description>
-            <name>
-                method-signature
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Declares that this attribute must be a <code>ValueExpression</code>
-whose expected type is given by the value of this attribute.  If not
-specified, and no "method-signature" attribute is present,
-<code>java.lang.Object</code> is assumed.  This attribute is mutually
-exclusive with the "method-signature" attribute. If both attributes are present, the
-"method-signature" attribute is ignored. </p> </div>]]>
-
-            </description>
-            <name>
-                type
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>  
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-
-<p> The "hidden" flag is used to identify features that are intended only for tool use, and which should not be exposed to humans.</p>
-
-</div>]]>
-                
-            </description>
-            <name>hidden</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>
-  </tag>
-
-  <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-
-<p><span class="changed_modified_2_0_rev_a">Declares</span> that this
-composite component supports a facet with the name given by the value of
-the "name" attribute. </p>
-
-<p>Please see <code><<a
-href="interface.html">composite:interface</a>></code> for a usage
-example.</p>
-
-
-</div>]]>
-        </description>
-        <name>
-            facet
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The name of the attribute as it must appear
-                on the <em>composite component tag</em> in the
-                <em>using page</em>.</p></div>]]>
-
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The name to display in a tool palette
-                containing this component.  The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                displayName
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>True if the page author must supply a facet with this name.</p></div>]]>
-
-            </description>
-            <name>
-                required
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Is this a "preferred" facet.  The value
-                of this attribute will be set as the value for this
-                property on the <em>composite component bean
-                descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                preferred
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>Is this facet only for expert users?
-                The value of this attribute will be set as the value for
-                this property on the <em>composite component bean
-                descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                expert
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>    
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>A short description of the purpose of this
-                facet.  The value of this attribute will be set as
-                the value for this property on the <em>composite
-                component bean descriptor</em>.</p></div>]]>
-
-            </description>
-            <name>
-                shortDescription
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>  
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-
-<p> The "hidden" flag is used to identify features that are intended only for tool use, and which should not be exposed to humans.</p>
-
-</div>]]>
-                
-            </description>
-            <name>hidden</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>  </tag>
-
-  <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-
-<p>This element is used in the
-<code><composite:implementation></code> section.  The facet with
-the name equal to the value of the name attribute, given by the page
-author in the using page, will be rendered at this point in the
-composite component VDL view. </p>
-
-
-            <p>The implementation of this tag handler must insert a
-            component with <code>component-type</code>
-            <code>javax.faces.Output</code> and <code>renderer-type</code>
-            <code>javax.faces.CompositeFacet</code> as a
-            child at this point in the component tree.</p>
-
-<p>The implementation of this tag handler must store an attribute into
-the created component's attribute map under the key given by the value
-of the symbolic constant <code>UIComponent.FACETS_KEY</code>.  The value
-for this key must be the evaluated value of the "name" attribute.</p>
-
-</div>]]>
-        </description>
-        <name>
-            renderFacet
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>The value of the name attribute as it must appear on an
-<code><f:facet></code> tag nested within the <em>composite
-component tag</em> in the <em>using page</em>.</p></div>]]>
-
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>If <code>true</code>, and there is no such facet present on the top
-level component, a <code>TagException</code> must be thrown, containing
-the <code>Location</code>, the facet name, and a localized descriptive
-error message.</p>
-
-</div>]]>
-                
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>
-  </tag>
-
-  <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-
-<p>This element is used in the
-<code><composite:implementation></code> section.  Any child
-components or template text within the composite component tag in the
-using page will be re-parented into the composite component at the point
-indicated by this tag's placement within the
-<code><composite:implementation></code> section.  The normal
-use-case for this element is to have only one occurrence within the
-<code><composite:implementation></code> section.  Inserting
-multiple occurrences may cause duplicate id errors.  The results are
-undefined if there are multiple occurrences of this element in the
-<code><composite:implementation></code> section.</p>
-
-</div>]]>
-        </description>
-        <name>
-            insertChildren
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-  </tag>
-
-  <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p><span class="changed_modified_2_0_rev_a">Declares</span> that the
-composite component whose contract is declared by the
-<code><composite:interface></code> in which this element is nested
-exposes an implementation of <code>ValueHolder</code> suitable for use
-as the target of <em>attached objects</em> in <em>the using page</em>.
-Any attached objects suitable for implementations of
-<code>ValueHolder</code> may be attached to the composite component.
-Consider this excerpt from <em>the using page</em>:
-            </p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><ez:foo></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:converter <span class="kw3">for</span>=<span class="st0">"userid"</span> binding=<span class="st0">"#{bean.converter}"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/ez:foo></span> </div></li></ol></div></div>
-
-           <p>Line 2 refers to the
-           <code><composite:valueHolder></code> declaration on
-           line 2 of <code>foo.xhtml</code>:</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><composite:interface></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:valueHolder <span class="kw3">name</span>=<span class="st0">"userid"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:interface></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1"><span class="sc2"><composite:implementation></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><h:inputText <span class="kw3">id</span>=<span class="st0">"userid"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:implementation></span> </div></li></ol></div></div>
-
-<p></p>
-
-<p>It is possible to declare that a single
-<code><composite:valueHolder></code> element should cause multiple
-components within the <code><composite:implementation></code>
-section to be the targets of an <em>attached object</em> in the
-using page.  Assuming the same <em>using page</em> excerpt as
-above, the revised <em>VDL view</em> is:</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><composite:interface></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:valueHolder targets=<span class="st0">"userid,password"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:interface></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1"><span class="sc2"><composite:implementation></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><h:inputText <span class="kw3">id</span>=<span class="st0">"userid"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><h:inputText <span class="kw3">id</span>=<span class="st0">"password"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><</span>/composite:implementation></span> </div></li></ol></div></div>
-
-<p>In this case, the "targets" attribute on the
-<code><composite:valueHolder></code> element, on line 2 above,
-replaces the "name" attribute in the previous example.  "targets" is a
-list of ids of client ids (relative to the <em>top level component</em>)
-within the <code><composite:implementation></code> section.  In
-this case, "targets" refers to the <code><h:inputText></code>
-components on lines 6 and 7 above.</p>
-
-<p>Please see <code><<a
-href="interface.html">composite:interface</a>></code> for a usage
-example.</p>
-
-</div>]]>
-        </description>
-        <name>
-            valueHolder
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>
-  The value of this attribute maps back to the "for" attribute on an attachable object
-  nested within a composite component.   If the "targets" attribute is not specified,
-  this value also represents the component ID of the target component within the
-  that the <code><composite:implementation></code>
-  ActionListener should be mapped to.  
-</p>
-</div>]]>
-
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>If present, this must be a space (not tab) separated list of client
-ids (relative to the <em>top level component</em>) of components within
-the <code><composite:implementation></code> section.  Space is
-used as the delimiter for compatibility with the IDREFS and NMTOKENS
-data types from the XML Schema.  </p></div>]]>
-
-            </description>
-            <name>
-                targets
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-
-<p> The "hidden" flag is used to identify features that are intended only for tool use, and which should not be exposed to humans.</p>
-
-</div>]]>
-                
-            </description>
-            <name>hidden</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>  
-  </tag>
-
-  <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p><span class="changed_modified_2_0_rev_a">Declares</span> that the
-composite component whose contract is declared by the
-<code><composite:interface></code> in which this element is nested
-exposes an implementation of <code>EditableValueHolder</code> suitable
-for use as the target of <em>attached objects</em> in <em>the using
-page</em>.  Any attached objects suitable for implementations of
-<code>EditableValueHolder</code> may be attached to the composite
-component.The example from <a
-href="valueHolder.html"><code><composite:valueHolder></code></a>
-still applies.
-            </p>
-
-<p>Please see <code><<a
-href="interface.html">composite:interface</a>></code> for a usage
-example.</p>
-
-</div>]]>
-        </description>
-        <name>
-            editableValueHolder
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>
-  The value of this attribute maps back to the "for" attribute on an attachable object
-  nested within a composite component.   If the "targets" attribute is not specified,
-  this value also represents the component ID of the target component within the
-  that the <code><composite:implementation></code>
-  ActionListener should be mapped to.  
-</p>
-</div>]]>
-            
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>If present, this must be a space (not tab) separated list of client
-ids (relative to the <em>top level component</em>) of components within
-the <code><composite:implementation></code> section.  Space is
-used as the delimiter for compatibility with the IDREFS and NMTOKENS
-data types from the XML Schema.</p></div>]]>
-
-            </description>
-            <name>
-                targets
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-
-<p> The "hidden" flag is used to identify features that are intended only for tool use, and which should not be exposed to humans.</p>
-
-</div>]]>
-                
-            </description>
-            <name>hidden</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>  </tag>
-
-  <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p><span class="changed_modified_2_0_rev_a">Declares</span> that the
-composite component whose contract is declared by the
-<code><composite:interface></code> in which this element is nested
-exposes an implementation of <code>ActionSource2</code> suitable for use
-as the target of <em>attached objects</em> in <em>the using page</em>.
-Any attached objects suitable for implementations of
-<code>ActionSource2</code> may be attached to the composite component.
-Consider this excerpt from <em>the using page</em>:
-            </p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><ez:loginPanel <span class="kw3">id</span>=<span class="st0">"loginPanel"</span> model=<span class="st0">"#{bean}"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:valueChangeListener <span class="kw3">for</span>=<span class="st0">"username"</span></div></li>
-<li class="li1"><div class="de1">                             binding=<span class="st0">"#{bean.useridValueChangeListener}"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:actionListener <span class="kw3">for</span>=<span class="st0">"loginEvent"</span> </div></li>
-<li class="li1"><div class="de1">                    binding=<span class="st0">"#{bean.loginEventListener}"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><f:actionListener <span class="kw3">for</span>=<span class="st0">"cancelEvent"</span> </div></li>
-<li class="li2"><div class="de2">                    binding=<span class="st0">"#{bean.cancelEventListener}"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:actionListener <span class="kw3">for</span>=<span class="st0">"allEvents"</span> </div></li>
-<li class="li1"><div class="de1">                    binding=<span class="st0">"#{bean.allEventsListener}"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/ez:loginPanel></span> </div></li></ol></div></div>
-
-<p>The <code><f:actionListener></code> elements on lines 4, 7, and 10
-refer to the <em>attached objects</em> declared on lines 2, 3 and 4 below.</p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><composite:interface <span class="kw3">name</span>=<span class="st0">"loginPanel"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"loginEvent"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"cancelEvent"</span> /<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><composite:actionSource <span class="kw3">name</span>=<span class="st0">"allEvents"</span> targets=<span class="st0">"loginEvent cancelEvent"</span> /<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><</span>/composite:interface></span> </div></li></ol></div></div>
-
-<p>Most of the concepts from example content from <a
-href="valueHolder.html"><code><composite:valueHolder></code></a>
-also applies in the case of
-<code><composite:actionSource></code>.</p>
-
-<p>Please see <code><<a
-href="interface.html">composite:interface</a>></code> for a usage
-example.</p>
-
-
-</div>]]>
-        </description>
-        <name>
-            actionSource
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p>
-  The value of this attribute maps back to the "for" attribute on an attachable object
-  nested within a composite component.   If the "targets" attribute is not specified,
-  this value also represents the component ID of the target component within the
-  that the <code><composite:implementation></code>
-  ActionListener should be mapped to. 
-</p>
-</div>]]>
-
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-<p><span class="changed_modified_2_0_rev_a">If</span>  present, this must be a space (not tab) separated list of client
-ids (relative to the <em>top level component</em>) of components within
-the <code><composite:implementation></code> section.  Space is
-used as the delimiter for compatibility with the IDREFS and NMTOKENS
-data types from the XML Schema.</p></div>]]>
-
-            </description>
-            <name>
-                targets
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-
-<p> The "hidden" flag is used to identify features that are intended only for tool use, and which should not be exposed to humans.</p>
-
-</div>]]>
-                
-            </description>
-            <name>hidden</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>
-  </tag>
-
-<tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p>Used within a <code><composite:interface></code> section,
-within any sub-element of that section, to include XML content not
-defined by this specification.  This element can be used to incorporate
-<a target="_" href="http://jcp.org/en/jsr/detail?id=276">JSR-276</a>
-metadata into a composite component.</p>
-
-</div>]]>
-        </description>
-        <name>
-            extension
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-  </tag>
-
-
-    <tag>
-        <description>
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>The presence of this tag in a
-<code><composite:implementation></code> section must cause the
-named facet to be taken from the facet map of the <em>top level
-component</em> and inserted as a facet child of the component in which
-this element is nested.</p>
-
-</div>]]>
-
-        </description>
-        <name>
-            insertFacet
-        </name>
-        <tag-class></tag-class>
-        <body-content>empty</body-content>
-        <attribute>
-            <description>
-                                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>The name of the facet child on the <em>top level component</em> which
-must be inserted as a facet child of the component in which this element
-is nested.</p>
-
-</div>]]>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>If <code>true</code>, and there is no such facet present on the top
-level component, a <code>TagException</code> must be thrown, containing
-the <code>Location</code>, the facet name, and a localized descriptive
-error message.</p>
-
-</div>]]>
-                
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>
-    </tag>
-
-</taglib>
diff --git a/jsf-ri/conf/share/error-include.xhtml b/jsf-ri/conf/share/error-include.xhtml
deleted file mode 100644
index 296f589..0000000
--- a/jsf-ri/conf/share/error-include.xhtml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:mp="http://java.sun.com/mojarra/private/functions">
-<head>
-    <title>not rendered</title>
-</head>
-<body>
-<!--
-    NOTE: Content here is duplicated in facelet-dev-error.xml.
-          If content is changed here, please see if the change
-          is also applicable to facelet-dev-error.xml as well.
--->
-    <ui:composition>
-        <div id="javax.faces.error.xhtml" style="padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;" >
-        <h:outputScript>
-        function faceletstoggle(id) {
-            var style = document.getElementById(id).style;
-            if ("block" == style.display) {
-                style.display = "none";
-                document.getElementById(id+"Off").style.display = "inline";
-                document.getElementById(id+"On").style.display = "none";
-            } else {
-                style.display = "block";
-                document.getElementById(id+"Off").style.display = "none";
-                document.getElementById(id+"On").style.display = "inline";
-            }
-        }
-        </h:outputScript>
-        <c:set var="e" value="#{requestScope['javax.servlet.error.exception']}" scope="request" />
-        <c:set var="uri" value="#{requestScope['javax.servlet.error.request_uri']}" scope="request" />
-        <c:set var="errorView" value="#{requestScope['com.sun.faces.error.view']}" scope="request" />
-            <div id="error" style="border: 1px solid #900;">
-                <span style="text-decoration: none; color: #339;">URI: #{uri}</span>
-                <br/>
-                <span style="text-decoration: none; color: #339;">#{mp:writeMessage(facesContext.responseWriter, e)}</span>
-            </div>
-            <h2 style="font-size: large; color: #339;">
-                <a style="text-decoration: none; color: #339;" href="#" onclick="faceletstoggle('trace'); return false;">
-                    <span id="traceOff">+</span><span id="traceOn" style="display: none;">-</span> Stack Trace
-                </a>
-             </h2>
-             <div style="padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9; display:none" id="trace"><pre><code>#{mp:writeException(facesContext.responseWriter, e)}</code></pre></div>
-            <h2 style="font-size: large; color: #339;">
-                <a style="text-decoration: none; color: #339;" href="#" onclick="faceletstoggle('tree'); return false;">
-                    <span id="treeOff">+</span><span id="treeOn" style="display: none;">-</span> Component Tree
-                </a>
-            </h2>
-            <div style="padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9; display:none" id="tree"><code>#{mp:writeComponent(facesContext.responseWriter, errorView)}</code></div>
-
-            <h2 style="font-size: large; color: #339;">
-                <a style="text-decoration: none; color: #339;" href="#" onclick="faceletstoggle('vars'); return false;">
-                    <span id="varsOff">+</span><span id="varsOn" style="display: none;">-</span> Scoped Variables
-                </a>
-            </h2>
-            <div style="padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9; display:none;" id="vars">#{mp:writeVariables(facesContext.responseWriter, facesContext)}</div>
-
-            <div style="padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9; text-align: right; color: #666;">Generated by Mojarra/Facelets</div>
-
-    </div>
-    </ui:composition>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/conf/share/facelet-dev-debug.xml b/jsf-ri/conf/share/facelet-dev-debug.xml
deleted file mode 100644
index f31e274..0000000
--- a/jsf-ri/conf/share/facelet-dev-debug.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
- This file incorporates work covered by the following copyright and
- permission notice:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-<title>Debug - @@message@@</title>
-<style type="text/css">
-body, div, span, td, th, caption { font-family: 'Trebuchet MS', Verdana, Arial, Sans-Serif; font-size: small; }
-ul, li, pre { padding: 0; margin: 0; }
-h1 { color: #090; }
-h2, h2 span { font-size: large; color: #339; }
-h2 a { text-decoration: none; color: #339; }
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-#view { color: #090; font-weight: bold; font-size: medium; }
-#tree, #vars { display: none; }
-code { font-size: medium; }
-#tree dl { color: #006; }
-#tree dd { margin-top: 2px; margin-bottom: 2px; }
-#tree dt { border: 1px solid #DDD; padding: 4px; border-left: 2px solid #666; font-family: "Courier New", Courier, mono; font-size: small; }
-.uicText { color: #999;  }
-table { border: 1px solid #CCC; border-collapse: collapse; border-spacing: 0px; width: 100%; text-align: left; }
-td { border: 1px solid #CCC; }
-thead tr th { padding: 2px; color: #030; background-color: #F9F9F9; }
-tbody tr td { padding: 10px 6px; }
-table caption { text-align: left; padding: 10px 0; font-size: large; }
-</style>
-<style type="text/css" media="print">
-#trace, #tree, #vars { display: block; }
-</style>
-<script language="javascript" type="text/javascript">
-function faceletstoggle(id) {
-    var style = document.getElementById(id).style;
-    if ("block" == style.display) {
-        style.display = "none";
-        document.getElementById(id+"Off").style.display = "inline";
-        document.getElementById(id+"On").style.display = "none";
-    } else {
-        style.display = "block";
-        document.getElementById(id+"Off").style.display = "none";
-        document.getElementById(id+"On").style.display = "inline";
-    }
-}
-</script>
-</head>
-<body>
-<h1>Debug Output</h1>
-<div id="error" class="grayBox" style="border: 1px solid #090;">@@message@@</div>
-<h2><a href="#" onclick="faceletstoggle('tree'); return false;"><span id="treeOff">+</span><span id="treeOn" style="display: none;">-</span> Component Tree</a></h2>
-<div id="tree" class="grayBox"><code>@@tree@@</code></div>
-<h2><a href="#" onclick="faceletstoggle('vars'); return false;"><span id="varsOff">+</span><span id="varsOn" style="display: none;">-</span> Scoped Variables</a></h2>
-<div id="vars">@@vars@@</div>
-<div class="grayBox" style="text-align: right; color: #666;">@@now@@ - Generated by Mojara/Facelets</div>
-</body>
-</html>
diff --git a/jsf-ri/conf/share/facelet-dev-error.xml b/jsf-ri/conf/share/facelet-dev-error.xml
deleted file mode 100644
index 112a138..0000000
--- a/jsf-ri/conf/share/facelet-dev-error.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
- This file incorporates work covered by the following copyright and
- permission notice:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-<title>Error - @@message@@</title>
-<style type="text/css">
-body, div, span, td, th, caption { font-family: 'Trebuchet MS', Verdana, Arial, Sans-Serif; font-size: small; }
-ul, li, pre { padding: 0; margin: 0; }
-h1 { color: #900; }
-h2, h2 span { font-size: large; color: #339; }
-h2 a { text-decoration: none; color: #339; }
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-#error { color: #900; font-weight: bold; font-size: medium; }
-#trace, #tree, #vars { display: none; }
-code { font-size: medium; }
-#tree dl { color: #006; }
-#tree dd { margin-top: 2px; margin-bottom: 2px; }
-#tree dt { border: 1px solid #DDD; padding: 4px; border-left: 2px solid #666; font-family: "Courier New", Courier, mono; font-size: small; }
-.uicText { color: #999;  }
-table { border: 1px solid #CCC; border-collapse: collapse; border-spacing: 0px; width: 100%; text-align: left; }
-td { border: 1px solid #CCC; }
-thead tr th { padding: 2px; color: #030; background-color: #F9F9F9; }
-tbody tr td { padding: 10px 6px; }
-table caption { text-align: left; padding: 10px 0; font-size: large; }
-</style>
-<style type="text/css" media="print">
-#trace, #tree, #vars { display: block; }
-</style>
-<script language="javascript" type="text/javascript">
-function faceletstoggle(id) {
-    var style = document.getElementById(id).style;
-    if ("block" == style.display) {
-        style.display = "none";
-        document.getElementById(id+"Off").style.display = "inline";
-        document.getElementById(id+"On").style.display = "none";
-    } else {
-        style.display = "block";
-        document.getElementById(id+"Off").style.display = "none";
-        document.getElementById(id+"On").style.display = "inline";
-    }
-}
-</script>
-</head>
-<body>
-<div id="javax.faces.error.xhtml">
-<h1>An Error Occurred:</h1>
-<div id="error" class="grayBox" style="border: 1px solid #900;">@@message@@</div>
-<h2><a href="#" onclick="faceletstoggle('trace'); return false;"><span id="traceOff">+</span><span id="traceOn" style="display: none;">-</span> Stack Trace</a></h2>
-<div id="trace" class="grayBox"><pre><code>@@trace@@</code></pre></div>
-<h2><a href="#" onclick="faceletstoggle('tree'); return false;"><span id="treeOff">+</span><span id="treeOn" style="display: none;">-</span> Component Tree</a></h2>
-<div id="tree" class="grayBox"><code>@@tree@@</code></div>
-<h2><a href="#" onclick="faceletstoggle('vars'); return false;"><span id="varsOff">+</span><span id="varsOn" style="display: none;">-</span> Scoped Variables</a></h2>
-<div id="vars">@@vars@@</div>
-<div class="grayBox" style="text-align: right; color: #666;">@@now@@ - Generated by Mojarra/Facelets</div>
-</div>
-</body>
-</html>
diff --git a/jsf-ri/conf/share/facelets_jsf_core.taglib.xml b/jsf-ri/conf/share/facelets_jsf_core.taglib.xml
deleted file mode 100644
index 07a114f..0000000
--- a/jsf-ri/conf/share/facelets_jsf_core.taglib.xml
+++ /dev/null
@@ -1,2085 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-                version="2.0">
-    <description>
-        The core JavaServer Faces custom actions that are independent of
-        any particular RenderKit.
-    </description>
-    <namespace>http://java.sun.com/jsf/core</namespace>
-    <tag>
-        <description>
-
-            <p>Register an ActionListener instance on the
-            UIComponent associated with the closest parent UIComponent
-            custom action.</p>
-        </description>
-        <tag-name>actionListener</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.ActionListenerHandler</handler-class>
-        <attribute>
-            <description>
-                Fully qualified Java class name of an ActionListener to be
-                created and registered.
-            </description>
-            <name>type</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Value binding expression that evaluates to an object that
-                implements javax.faces.event.ActionListener.
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.event.ActionListener</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Add an attribute to the UIComponent associated with the closest
-            parent UIComponent custom action.
-        </description>
-        <tag-name>attribute</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.AttributeHandler</handler-class>
-        <attribute>
-            <description>
-                The name of the component attribute to be set.
-            </description>
-            <name>name</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The value of the component attribute to be set.
-            </description>
-            <name>value</name>
-            <type>java.lang.Object</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a DateTimeConverter instance on the UIComponent associated
-            with the closest parent UIComponent custom action.
-        </description>
-        <tag-name>convertDateTime</tag-name>
-        <converter>
-            <converter-id>javax.faces.DateTime</converter-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ConvertDateTimeHandler</handler-class>
-        </converter>
-        <attribute>
-            <description>
-                Predefined formatting style which determines how the date
-                component of a date string is to be formatted and parsed.
-                Applied only if type is "date" or "both". Valid values
-                are "default", "short", "medium", "long", and "full".
-                Default value is "default".
-            </description>
-            <name>dateStyle</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Locale whose predefined styles for dates and times are used
-                during formatting or parsing. If not specified, the Locale
-                returned by FacesContext.getViewRoot().getLocale() will be used.
-                Value must be either a VB expression that evaluates to a
-                java.util.Locale instance, or a String that is valid to pass as
-                the first argument to the constructor java.util.Locale(String
-                language, String country). The empty string is passed as the
-                second argument.
-            </description>
-            <name>locale</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Custom formatting pattern which determines how the
-                date/time string should be formatted and parsed.
-            </description>
-            <name>pattern</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Predefined formatting style which determines how the
-                time component of a date string is to be formatted and
-                parsed. Applied only if type is "time" or "both".
-                Valid values are "default", "short", "medium", "long",
-                and "full". Default value is "default".
-            </description>
-            <name>timeStyle</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Time zone in which to interpret any time information in the date
-                String. Value must be either a VB expression that evaluates to
-                a java.util.TimeZone instance, or a String that is a timezone ID
-                as described in the javadocs for
-                java.util.TimeZone.getTimeZone().
-            </description>
-            <name>timeZone</name>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Specifies what contents the string value will be
-                formatted to include, or parsed expecting. Valid
-                values are "date", "time", and "both". Default
-                value is "date".
-            </description>
-            <name>type</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                javax.faces.convert.DateTimeConverter.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.convert.DateTimeConverter</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a NumberConverter instance on the UIComponent associated
-            with the closest parent UIComponent custom action.
-        </description>
-        <tag-name>convertNumber</tag-name>
-         <converter>
-            <converter-id>javax.faces.Number</converter-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ConvertNumberHandler</handler-class>
-        </converter>
-        <attribute>
-            <description>
-                ISO 4217 currency code, applied only when
-                formatting currencies.
-            </description>
-            <name>currencyCode</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Currency symbol, applied only when formatting
-                currencies.
-            </description>
-            <name>currencySymbol</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag specifying whether formatted output will
-                contain grouping separators. Expressions must
-                evaluate to a boolean. Default value
-                is true.
-            </description>
-            <name>groupingUsed</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag specifying whether only the integer part
-                of the value will be formatted and parsed.
-                Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>integerOnly</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description><p>
-
-                <span class="changed_modified_2_0">Locale</span>
-                whose
-                predefined styles for numbers are used during formatting
-                and parsing. If not specified, the Locale returned by
-                FacesContext.getViewRoot().getLocale() will be used.
-                Expressions must evaluate to a java.util.Locale <span
-                class="changed_modified_2_0">or a String that is valid to
-                pass as the first argument to the constructor
-                java.util.Locale(String language, String country). The
-                empty string is passed as the second argument.</span>
-
-                </p></description>
-            <name>locale</name>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum number of digits that will be formatted
-                in the fractional portion of the output. Expressions
-                must evaluate to an int.
-            </description>
-            <name>maxFractionDigits</name>
-            <type>java.lang.Integer</type>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum number of digits that will be formatted
-                in the integer portion of the output. Expressions
-                must evaluate to an int.
-            </description>
-            <name>maxIntegerDigits</name>
-            <type>java.lang.Integer</type>
-        </attribute>
-        <attribute>
-            <description>
-                Minimum number of digits that will be formatted
-                in the fractional portion of the output. Expressions
-                must evaluate to an int.
-            </description>
-            <name>minFractionDigits</name>
-            <type>java.lang.Integer</type>
-        </attribute>
-        <attribute>
-            <description>
-                Minimum number of digits that will be formatted
-                in the integer portion of the output. Expressions
-                must evaluate to an int.
-            </description>
-            <name>minIntegerDigits</name>
-            <type>java.lang.Integer</type>
-        </attribute>
-        <attribute>
-            <description>
-                Custom formatting pattern which determins how the
-                number string should be formatted and parsed.
-            </description>
-            <name>pattern</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Specifies how the number string will be formatted
-                and parsed. Valid values are "number", "currency",
-                and "percent". Default value is "number".
-            </description>
-            <name>type</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                javax.faces.convert.NumberConverter.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.convert.NumberConverter</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a named Converter instance on the UIComponent
-            associated with the closest parent UIComponent custom action.
-        </description>
-        <tag-name>converter</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.ConvertDelegateHandler</handler-class>
-        <attribute>
-            <description>
-                Converter identifier of the Converter instance to be
-                created and registered.
-            </description>
-            <name>converterId</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an object that
-                implements javax.faces.convert.Converter.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-        <p class="changed_added_2_0">Register an AjaxBehavior instance
-        on one or more UIComponents implementing the
-        ClientBehaviorHolder interface.  This tag may be nested witin a
-        single component (enabling Ajax for a single component), or it
-        may be "wrapped" around multiple components (enabling Ajax for
-        many components).</p>
-
-        <p class="changed_added_2_0">The String value for ids
-        specified for execute and render may be specified as a search
-        expression as outlined in the JavaDocs for
-        <code>UIComponent.findComponent()</code>. The implementation
-        must resolve these ids as specified for
-        <code>UIComponent.findComponent()</code>.  
-        </p>
-
-        </description>
-        <tag-name>ajax</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.AjaxHandler</handler-class>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A value of "true" indicates
-                the
-                AjaxBehavior should not be rendered. A value of "false"
-                indicates
-                the AjaxBehavior should be rendered. "false" is the default.</p>
-
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A String identifying the type
-                of event
-                the Ajax action will apply to. If specified, it must be one of
-                the
-                events supported by the component the Ajax behavior is being
-                applied to.
-                For HTML components this would be the set of supported DOM
-                events for the
-                component, plus "action" for Faces ActionSource components and
-                "valueChange"
-                for Faces EditableValueHolder components. If not specified, the
-                default
-                event is determined for the component. The DOM event name is the
-                actual DOM
-                event name (for example: "click") as opposed to (for example:
-                "onclick").</p>
-
-            </description>
-            <name>event</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">Evaluates to
-                Collection<String>.  This is a space separated
-                list of client ids of components that will participate
-                in the "execute" portion of the Request Processing
-                Lifecycle. If a literal is specified the identifiers
-                must be space delimited. Any of the keywords "@this",
-                "@form", "@all", "@none" may be specified in the
-                identifier list.  If not specified, the default value of
-                "@this" is assumed.  <span
-                class="changed_modified_2_0_rev_a">For example,
-                <code>@this clientIdOne
-                clientIdTwo</code>.</span></p>
-
-            </description>
-            <name>execute</name>
-            <required>false</required>
-            <type>java.util.Collection</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">If "true" behavior events
-                generated from this behavior
-                are broadcast during Apply Request Values phase. Otherwise, the
-                events will be
-                broadcast during Invoke Aplications phase</p>
-
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">Method expression referencing
-                a method
-                that will be called when an AjaxBehaviorEvent has been
-                broadcast for the listener.</p>
-
-            </description>
-            <name>listener</name>
-            <required>false</required>
-            <method-signature>public void
-                processAjaxBehavior(javax.faces.event.AjaxBehaviorEvent event)
-                throws javax.faces.event.AbortProcessingException
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">The name of the JavaScript
-                function that will handle UI events.</p>
-
-            </description>
-            <name>onevent</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">The name of the JavaScript
-                function that will handle errors.</p>
-
-            </description>
-            <name>onerror</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">Evaluates to
-                Collection<String>.  This is a space separated
-                list of client ids of components that will participate
-                in the "render" portion of the Request Processing
-                Lifecycle. If a literal is specified the identifiers
-                must be space delimited. Any of the keywords "@this",
-                "@form", "@all", "@none" may be specified in the
-                identifier list. If not specified, the default value of
-                "@none" is assumed.  <span
-                class="changed_modified_2_0_rev_a">For example,
-                <code>@this clientIdOne
-                clientIdTwo</code>.</span></p>
-
-            </description>
-            <name>render</name>
-            <required>false</required>
-            <type>java.util.Collection</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-            <p class="changed_added_2_0">Allow JSF page authors to
-            install <code>ComponentSystemEventListener</code>
-            instances
-            on a component in a page.</p>
-
-            <div class="changed_added_2_0">
-
-            <p></p>
-
-            </div>
-
-        </description>
-        <tag-name>event</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.EventHandler</handler-class>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">Name of the event for which
-                to install a listener. The following table lists the
-                valid values for this attribute, and the corresponding
-                event type for which the listener action is
-                registered.</p>
-
-                <table border="1">
-                <tr>
-
-                <th>value for "<code>type</code>" tag
-                attribute</th>
-
-                <th>Type of event sent to listener method
-                </th>
-
-                </tr>
-
-                <tr>
-
-                <td>preRenderComponent
-                </td>
-
-                <td>javax.faces.event.PreRenderComponentEvent
-                </td>
-
-                </tr>
-
-                <tr>
-
-                <td>postAddToView
-                </td>
-
-                <td>javax.faces.event.PostAddToViewEvent
-                </td>
-
-                </tr>
-
-                <tr>
-
-                <td>preValidate
-                </td>
-
-                <td>javax.faces.event.PreValidateEvent
-                </td>
-
-                </tr>
-
-                <tr>
-
-                <td>postValidate
-                </td>
-
-                <td>javax.faces.event.PostValidateEvent
-                </td>
-
-                </tr>
-
-                </table>
-
-                <div class="changed_added_2_0">
-
-                <p>In addition to these values, the fully qualified class
-                name of any
-                java class that extends
-                <code>javax.faces.event.ComponentSystemEvent</code>
-                may be used as the
-                value of the "type" attribute.</p>
-
-                <p>Also, the <code>@javax.faces.event.NamedEvent</code>
-                annotation may
-                be attached to any java class that extends
-                <code>javax.faces.event.ComponentSystemEvent</code>.
-                This enables that
-                event to be referenced from this attribute, as descibed in the
-                javadocs
-                for <code>@NamedEvent</code>.</p>
-
-                </div>
-
-
-            </description>
-            <name>type</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description><![CDATA[
-
-              <p class="changed_modified_2_0_rev_a">The expression must
-              evaluate to a public method that takes a
-              <code>ComponentSystemEvent</code> parameter, with a return
-              type of void, or to a public method that takes no
-              arguments with a return type of void. In the latter case,
-              the method has no way of easily knowing where the event
-              came from, but this can be useful in cases where a
-              notification is needed that "an event happened".</p>
-
-              ]]>              
-            </description>
-            <name>listener</name>
-            <required>true</required>
-            <method-signature>public void
-                listener(javax.faces.event.ComponentSystemEvent event) throws
-                javax.faces.event.AbortProcessingException
-            </method-signature>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-            <p>Register a named facet on the UIComponent associated with
-            the closest parent UIComponent custom action.</p>
-
-
-        </description>
-        <tag-name>facet</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.FacetHandler</handler-class>
-        <attribute>
-            <description>
-                Name of the facet to be created.
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-            <p class="changed_added_2_0">Declare the metadata
-            facet for this view. This must be a child of the
-            <code>&lt;f:view&gt;</code>. This tag
-            must reside within the top level XHTML file for the given
-            viewId<span class="changed_modified_2_0_rev_a">, or in a
-            template client, but</span> not in a template. The
-            implementation must insure that the direct child of the
-            facet is a <code>UIPanel</code>, even if there
-            is only one child of the facet. The implementation must set
-            the id of the <code>UIPanel</code> to be the
-            value of the
-            <code>UIViewRoot.METADATA_FACET_NAME</code>
-            symbolic constant.</p>
-
-            <div class="changed_added_2_0">
-
-            <p>The implementation must allow templating for this element
-            according
-            to the following pattern.</p>
-
-            <p>template client XHTML view, view01.xhtml</p>
-
-            </div>
-
-            <div class="html4strict" style="font-family: monospace;"><ol><li
-            class="li1"><div class="de1"><span class="sc2">&lt;ui:composition
-            template=<span class="st0">&quot;template.xhtml&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            <span class="sc2">&lt;ui:define <span class="kw3">name</span>=<span
-            class="st0">&quot;metadata&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; <span class="sc2">&lt;f:metadata&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; &nbsp; <span class="sc2">&lt;f:viewParam
-            <span class="kw3">name</span>=<span class="st0">&quot;id&quot;</span>/<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; <span class="sc2"><span class="kw2">&lt;</span>/f:metadata&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            <span class="sc2"><span class="kw2">&lt;</span>/ui:define&gt;</span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            <span class="sc2">&lt;ui:define <span class="kw3">name</span>=<span
-            class="st0">&quot;content&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;h1&gt;</span></span>The
-            big news stories of the day<span class="sc2"><span
-            class="kw2">&lt;/h1&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            <span class="sc2"><span class="kw2">&lt;</span>/ui:define&gt;</span></div></li>
-            <li class="li2"><div class="de2"><span class="sc2"><span
-            class="kw2">&lt;</span>/ui:composition&gt;</span>
-            </div></li></ol></div></div>
-
-            <div class="changed_added_2_0">
-            <p>Note line 4. The page author must ensure that the
-            <code>&lt;f:metadata&gt;</code> element does not
-            appear on a template or
-            included page. It must reside on the root page that corresponds to
-            the
-            viewId.</p>
-
-            <p>The template page, template.xhtml</p>
-
-            </div>
-
-
-            <div class="html4strict" style="font-family: monospace;"><ol><li
-            class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;html</span> xmlns=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; xmlns:ui=<span class="st0">&quot;http://java.sun.com/jsf/facelets&quot;</span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; xmlns:f=<span class="st0">&quot;http://java.sun.com/jsf/core&quot;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; xml:<span class="kw3">lang</span>=<span
-            class="st0">&quot;en&quot;</span> <span
-            class="kw3">lang</span>=<span class="st0">&quot;en&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp;</div></li>
-            <li class="li2"><div class="de2"><span class="sc2"><span
-            class="kw2">&lt;body&gt;</span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2">&lt;f:view&gt;</span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            </div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; &nbsp; <span class="sc2">&lt;ui:insert <span
-            class="kw3">name</span>=<span class="st0">&quot;metadata&quot;</span>/<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;</div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            <span class="sc2"><span class="kw2">&lt;div</span>
-            <span class="kw3">id</span>=<span class="st0">&quot;container&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; &nbsp; <span class="sc2">&lt;ui:insert <span
-            class="kw3">name</span>=<span class="st0">&quot;content&quot;</span>/<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div></li>
-            <li class="li2"><div class="de2"><span class="sc2"><span
-            class="kw2">&lt;</span>/f:view&gt;</span></div></li>
-            <li class="li1"><div class="de1"><span class="sc2"><span
-            class="kw2">&lt;/body&gt;</span></span></div></li>
-            <li class="li2"><div class="de2"><span class="sc2"><span
-            class="kw2">&lt;/html&gt;</span></span> </div></li></ol></div></div>
-
-            <p>The page author is not <em>required</em> to use
-            templating, but if
-            they do, it must be done as shown above, (or with
-            <code>&lt;ui:include&gt;</code> in a similar
-            manner).</p>
-
-            </div>
-
-
-        </description>
-        <tag-name>metadata</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.MetadataHandler</handler-class>
-    </tag>
-    <tag>
-        <description>
-            Load a resource bundle localized for the Locale of the current
-            view, and expose it as a java.util.Map in the request attributes
-            of the current request under the key specified by the value of the
-            "var" attribute of this tag. The Map must behave such that if a
-            get() call is made for a key that does not exist in the Map, the
-            literal string ???KEY??? is returned from the Map, where KEY is
-            the key being looked up in the Map, instead of a
-            MissingResourceException being thrown. If the ResourceBundle does
-            not exist, a JspException must be thrown.
-        </description>
-        <tag-name>loadBundle</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.LoadBundleHandler</handler-class>
-        <attribute>
-            <description>
-                Base name of the resource bundle
-                to be loaded.
-            </description>
-            <name>basename</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of a request scope attribute under which
-                the resource bundle will be exposed as a Map.
-            </description>
-            <name>var</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Add a child UIParameter component to the UIComponent
-            associated with the closest parent UIComponent custom
-            action.
-        </description>
-        <tag-name>param</tag-name>
-        <component>
-            <component-type>javax.faces.Parameter</component-type>
-            <renderer-type/>
-        </component>
-        <attribute>
-            <description>
-                ValueExpression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-        <attribute>
-            <description>
-                Component identifier of the UIParameter component
-                to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of the parameter to be created.
-            </description>
-            <name>name</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Value of the parameter to be set.
-            </description>
-            <name>value</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description><![CDATA[
-
-                <p>Flag enabling or disabling the inclusion of the
-                parameter.  <span
-                class="changed_modified_2_0_rev_a">This flag is
-                consulted by renderers that consider the
-                <code>UIParameter</code> component associated with this
-                <code><f:param></code> during their rendering.
-                Such renderers include <code>javax.faces.Output
-                javax.faces.Link</code> and
-                <code>javax.faces.OutcomeTarget
-                javax.faces.Link</code>.</span></p>
-
-
-            ]]>
-            </description>
-            <name>disable</name>
-            <type>boolean</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-            <p class="changed_added_2_0">Used inside of the metada facet
-            of a view, this tag causes a <a target="_"
-            href="../../../javadocs/javax/faces/component/UIViewParameter.html">UIViewParameter</a>
-            to be attached as metadata for the current view. Because
-            <code>UIViewParameter</code> extends <code>UIInput</code>
-            all of the attributes and nested child content for any
-            <code>UIInput</code> tags are valid on this tag as well.</p>
-
-        </description>
-        <tag-name>viewParam</tag-name>
-        <component>
-            <component-type>javax.faces.Parameter</component-type>
-            <renderer-type/>
-        </component>
-        <attribute>
-            <description>
-                The name of the request parameter from which the value for this component
-                is retrieved on an initial request or to override the stored value on a
-                postback.
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression to which the value of the request parameter, as
-                determined by the name attribute, is bound. The resolved value of this
-                expression is used when encoding the view parameter into a bookmarkable link or
-                redirect URL with view parameter encoding enabled. If this attribute is omitted,
-                the value of the request parameter will instead be the local value of the
-                UIViewParameter.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                The maximum number of characters that may
-                be entered in this field.
-            </description>
-            <name>maxlength</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0"><span
-                class="changed_deleted_2_0_rev_a">If present, this
-                attribute refers to the value of one of the exposed
-                attached objects within the composite component inside
-                of which this tag is nested.</span></p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a PhaseListener instance on the UIViewRoot in which
-            this tag is nested.
-        </description>
-        <tag-name>phaseListener</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.PhaseListenerHandler</handler-class>
-        <attribute>
-            <description>
-                Fully qualified Java class name of an PhaseListener to be
-                created and registered.
-            </description>
-            <name>type</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Value binding expression that evaluates to an object that
-                implements javax.faces.event.PhaseListener.
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.event.PhaseListener</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Add a child UISelectItem component to the UIComponent
-            associated with the closest parent UIComponent custom
-            action.
-        </description>
-        <tag-name>selectItem</tag-name>
-        <component>
-            <component-type>javax.faces.SelectItem</component-type>
-            <renderer-type/>
-        </component>
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-        <attribute>
-            <description>
-                Component identifier of the UISelectItem
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Description of this option, for use in
-                development tools.
-            </description>
-            <name>itemDescription</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the option created
-                by this component is disabled. Expressions
-                must evaluate to a boolean. Default value
-                is false.
-            </description>
-            <name>itemDisabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Label to be displayed to the user
-                for this option.
-            </description>
-            <name>itemLabel</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that characters that are sensitive in
-                the value of the <code>itemLabel</code>
-                attribute must be escaped. This flag is set to "true" by
-                default.
-            </description>
-            <name>escapeItem</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Value to be returned to the server if this
-                option is selected by the user.
-            </description>
-            <name>itemValue</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Value binding expression pointing at a
-                SelectItem instance containing the
-                information for this option.
-            </description>
-            <name>value</name>
-            <type>javax.faces.model.SelectItem</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the option created by this
-                component represents the special "no selection"
-                option. Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>noSelectionOption</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span class="changed_modified_2_0">Add</span> a
-            child UISelectItems component to the UIComponent associated
-            with the closed parent UIComponent custom action.</p>
-
-            <p class="changed_modified_2_0">When iterating over the
-            select items, <code>toString()</code> must be called on
-            the
-            string rendered attribute values.</p>
-
-            <p class="changed_added_2_0">Version 2 of the specification
-            introduces
-            several new attributes, described below. These are: var, itemValue,
-            itemLabel, itemDescription, itemDisabled, and itemLabelEscaped.</p>
-
-
-        </description>
-        <tag-name>selectItems</tag-name>
-        <component>
-            <component-type>javax.faces.SelectItems</component-type>
-            <renderer-type/>
-        </component>
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-        <attribute>
-            <description>
-                Component identifier of the UISelectItems
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <p>Value expression pointing at <span
-                class="changed_modified_2_0">any <code>Collection</code>
-                or array.</span> The member elements may be instances of
-                <code>SelectItem</code> <span
-                class="changed_added_2_0">or any Java Object. In the
-                case where the member elements are plain Java Objects,
-                several additional attributes must be used by the page
-                author to correctly identify the data to the enclosing
-                <code>UISelectOne</code> or <code>UISelectMany</code>
-                component, as shown in the following example.</span>
-
-                <div class="syntax"><div class="html4strict"
-                style="font-family: monospace;"><ol><li class="li1"><div
-                class="de1"><span class="sc2">&lt;h:selectOneListbox
-                <span class="kw3">size</span>=<span class="st0">&quot;1&quot;</span>
-                <span class="kw3">id</span>=<span class="st0">&quot;escape02&quot;</span>
-                <span class="kw3">value</span>=<span class="st0">&quot;#{select05NoSelection.initialCollectionValues}&quot;</span><span
-                class="kw2">&gt;</span></span></div></li>
-                <li class="li2"><div class="de2">&nbsp; <span
-                class="sc2">&lt;f:selectItems <span class="kw3">value</span>=<span
-                class="st0">&quot;#{select05NoSelection.hobbitList}&quot;</span></div></li>
-                <li class="li1"><div class="de1">&nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp;var=<span class="st0">&quot;n&quot;</span></div></li>
-                <li class="li2"><div class="de2">&nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp;itemValue=<span class="st0">&quot;#{n}&quot;</span></div></li>
-                <li class="li1"><div class="de1">&nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp;itemLabel=<span class="st0">&quot;#{n.bio}&quot;</span></div></li>
-                <li class="li2"><div class="de2">&nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp;itemDescription=<span class="st0">&quot;#{n.description}&quot;</span></div></li>
-                <li class="li1"><div class="de1">&nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp;itemDisabled=<span class="st0">&quot;#{n.disabled}&quot;</span></div></li>
-                <li class="li2"><div class="de2">&nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp;itemLabelEscaped=<span class="st0">&quot;true&quot;</span></div></li>
-                <li class="li1"><div class="de1">&nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp;noSelectionValue=<span class="st0">&quot;#{select05NoSelection.hobbitList[0]}&quot;</span>/<span
-                class="kw2">&gt;</span></span></div></li>
-                <li class="li2"><div class="de2"><span
-                class="sc2"><span class="kw2">&lt;</span>/h:selectOneListbox&gt;</span>
-                </div></li></ol></div></div>
-
-                <p class="changed_added_2_0">In the preceding example, the
-                <code>value</code> attribute on line 1 points to a
-                <code>Collection&lt;HobbitBean&gt;</code>.
-                <code>HobbitBean</code> is
-                just a regular Java Object (POJO) that conforms to JavaBeans
-                naming
-                conventions for its properties. The <code>value</code>
-                attribute on
-                line 2 points to a <code>List&lt;HobbitBean&gt;</code>,
-                though it could
-                just as well point to a <code>Collection</code>,
-                array, or
-                <code>javax.faces.model.DataModel</code>. The
-                attributes on lines 3
-                through 9, inclusive, leverage the fact that the value is a
-                collection
-                of POJOs.
-                </p>
-
-
-                </p>
-
-
-            </description>
-            <name>value</name>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <p class="changed_added_2_0">Expose the value from the
-                <code>value</code> attribute under this request
-                scoped key so that it
-                may be referred to in EL for the value of other attributes.</p>
-
-
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">evaluates to a
-                <code>Collection</code>, array, or <code>Map</code>
-                from which the items
-                to be shown will be rendered.</p>
-
-            </description>
-            <name>itemValue</name>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">evaluates to a String that
-                will
-                serve as the label to be shown for the item.</p>
-
-            </description>
-            <name>itemLabel</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <p class="changed_added_2_0">evaluates to a String that
-                will
-                serve as the description to be shown for the item.</p>
-
-            </description>
-            <name>itemDescription</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">evaluates to a boolean that
-                will
-                determine if the item value is selectable or not.</p>
-
-            </description>
-            <name>itemDisabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">evaluates to a boolean that
-                will
-                determine if the rendered markup for the item receives normal
-                JSF HTML escaping or not.</p>
-
-            </description>
-            <name>itemLabelEscaped</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">Is either an EL expression
-                pointing to the element in the value collection whose value
-                should be
-                marked as a &#8220;no selection&#8221; item, or a
-                literal string that
-                exactly matches the value of the item in the collection that
-                must be
-                marked as the &#8220;no selection&#8221; item. If the
-                user selects such
-                an item <strong>and</strong> the field is marked as
-                required, then it
-                will not pass validation.</p>
-
-            </description>
-            <name>noSelectionValue</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Register an ActionListener instance on the UIComponent
-            associated with the closest parent UIComponent custom action.
-            This actionListener will cause the value given by the "value"
-            attribute to be set into the ValueExpression given by the "target"
-            attribute.</p>
-
-            <p>The implementation of this tag creates a special
-            <code>ActionListener</code> instance and registers it on
-            the
-            <code>ActionSource</code> associated with our most
-            immediate surrounding
-            instance of a tag whose implementation class is a subclass of
-            <code>UIComponentTag</code>. This tag creates no output
-            to the page
-            currently being created.</p>
-
-            <p>The <code>ActionListener</code> instance
-            created and installed by
-            this tag has the following behavior and contract.</p>
-
-            <ul>
-
-            <li>Only create and register the <code>ActionListener</code>
-            instance
-            the first time the component for this tag is created</li>
-
-            <li>The "target" and "value" tag attributes are
-            ValueExpression
-            instances and are stored unevaluated as instance variables of the
-            listener.</li>
-
-            <li>When the listener executes, perform the following:
-            <ul>
-            Call getValue() on the "value" ValueExpression.
-            </ul>
-            <ul>
-            If value of the "value" expression is null, call setValue() on
-            the "target" ValueExpression with the null value.
-            </ul>
-            <ul>
-            If the value of the "value" expression is not null, call getType()
-            on the "value" and "target" ValueExpressions to determine their
-            property types.
-            </ul>
-            <ul>
-            Coerce the value of the "value" expression to the "target"
-            expression value type following the Expression Language coercion
-            rules. Call setValue() on the "target" ValueExpression with the
-            resulting value.
-            </ul>
-            <ul>
-            If either coercion or the execution of setValue() fails throw an
-            AbortProcessingException.
-            </ul>
-            </li>
-
-            </ul>
-        </description>
-        <tag-name>setPropertyActionListener</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.SetPropertyActionListenerHandler</handler-class>
-        <attribute>
-            <description>
-                ValueExpression to be stored as the value of the target
-                attribute.
-            </description>
-            <name>value</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                ValueExpression that is the destination of the value
-                attribute.
-            </description>
-            <name>target</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Container action for all JavaServer Faces core and
-            custom component actions used on a nested page via
-            "jsp:include" or any custom action that dynamically
-            includes another page from the same web application,
-            such as JSTL's "c:import".
-        </description>
-        <tag-name>subview</tag-name>
-        <component>
-            <component-type>javax.faces.NamingContainer</component-type>
-            <renderer-type/>
-        </component>
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-        <attribute>
-            <description>
-                Component identifier of the UINamingContainer
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether this component (and its
-                children) should be rendered. Expressions must
-                evaluate to a boolean.
-            </description>
-            <name>rendered</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a DoubleRangeValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <tag-name>validateDoubleRange</tag-name>
-        <validator>
-            <validator-id>javax.faces.DoubleRange</validator-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
-        </validator>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-
-            </description>
-            <name>disabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum value allowed for this component.
-            </description>
-            <name>maximum</name>
-            <type>java.lang.Double</type>
-        </attribute>
-        <attribute>
-            <description>
-                Minimum value allowed for this component.
-            </description>
-            <name>minimum</name>
-            <type>java.lang.Double</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                DoubleRangeValidator.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.validator.DoubleRangeValidator</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a LengthValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <tag-name>validateLength</tag-name>
-        <validator>
-            <validator-id>javax.faces.Length</validator-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
-        </validator>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-
-            </description>
-            <name>disabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum length allowed for this component.
-            </description>
-            <name>maximum</name>
-            <type>java.lang.Integer</type>
-        </attribute>
-        <attribute>
-            <description>
-                Minimum length allowed for this component.
-            </description>
-            <name>minimum</name>
-            <type>java.lang.Integer</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                LenghtValidator.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.validator.LengthValidator</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a LongRangeValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <tag-name>validateLongRange</tag-name>
-        <validator>
-            <validator-id>javax.faces.LongRange</validator-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
-        </validator>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-
-            </description>
-            <name>disabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum value allowed for this component.
-            </description>
-            <name>maximum</name>
-            <type>java.lang.Long</type>
-        </attribute>
-        <attribute>
-            <description>
-                Minimum value allowed for this component.
-            </description>
-            <name>minimum</name>
-            <type>java.lang.Long</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                LongRangeValidator.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.validator.LongRangeValidator</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description><p>
-
-            <span class="changed_added_2_0">
-            A validator that delegates the validation of the local value
-            to the Bean Validation API. The validationGroups attribute
-            serves as a filter that instructs the Bean Validation API which
-            contraints to enforce. If there are any constraint violations
-            reported by Bean Validation, the value is considered invalid.
-
-            </p>
-        </description>
-        <tag-name>validateBean</tag-name>
-        <validator>
-            <validator-id>javax.faces.Bean</validator-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
-        </validator>
-        <attribute>
-            <description>
-                A comma-separated list of validation groups. A validation group
-                is a fully-qualified class name.
-            </description>
-            <name>validationGroups</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-
-            </description>
-            <name>disabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                BeanValidator.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.validator.BeanValidator</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description><p>
-
-            <span class="changed_added_2_0">
-            A validator that uses the pattern attribute to validate the
-            wrapping component. The entire pattern is matched against
-            the String value of the component. If it matches, it's
-            valid.
-
-            </p>
-        </description>
-        <tag-name>validateRegex</tag-name>
-        <validator>
-            <validator-id>javax.faces.RegularExpression</validator-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
-        </validator>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-
-            </description>
-            <name>disabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A regular expression pattern. Remember that, like in
-                all Java strings, backslash must be escaped with another
-                backslash.
-            </description>
-            <name>pattern</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                RegexValidator.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.validator.RegexValidator</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-            <p class="changed_added_2_0">A validator that enforces
-            the presence of a value. It has the same affect as setting the
-            required attribute on a UIInput to true.</p>
-
-        </description>
-        <tag-name>validateRequired</tag-name>
-        <validator>
-            <validator-id>javax.faces.Required</validator-id>
-            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
-        </validator>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-
-            </description>
-            <name>disabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                RequiredValidator.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.validator.RequiredValidator</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-            <p><span class="changed_modified_2_0">Register</span>
-            a named
-            Validator instance on the UIComponent associated with the
-            closest parent UIComponent custom action.</p>
-
-            <div class="changed_added_2_0">
-
-            <p>Usage outside of an <code>EditableValueHolder</code>
-            parent</p>
-
-            <p>If this element is nested within a
-            <code>UIComponent</code> tag that has other
-            <code>UIComponent</code> children, the validator will be
-            automatically added to all the child components as well as
-            this one. The implementation must ensure this occurs even if
-            the parent of this element is not an instance of
-            <code>EditableValueHolder</code>.</p>
-
-            </div>
-
-        </description>
-        <tag-name>validator</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
-        <attribute>
-            <description>
-                <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-
-            </description>
-            <name>disabled</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Validator identifier of the Validator
-                to be created and registered.
-            </description>
-            <name>validatorId</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an object that implements
-                the javax.faces.validator.Validator interface.
-            </description>
-            <name>binding</name>
-            <type>javax.faces.validator.Validator</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Register a ValueChangeListener instance on the UIComponent
-            associated with the closest parent UIComponent custom
-            action.
-        </description>
-        <tag-name>valueChangeListener</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jsf.core.ValueChangeListenerHandler</handler-class>
-        <attribute>
-            <description>
-                Fully qualified Java class name of a
-                ValueChangeListener to be created and registered.
-            </description>
-            <name>type</name>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Value binding expression that evaluates to an object that
-                implements javax.faces.event.ValueChangeListener.
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.event.ValueChangeListener</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <p class="changed_added_2_0">If present, this attribute
-                refers
-                to the value of one of the exposed attached objects within the
-                composite component inside of which this tag is nested.</p>
-
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Create and register a child UIOutput component
-            associated with the closest parent UIComponent
-            custom action, which renders nested body content.
-        </description>
-        <tag-name>verbatim</tag-name>
-        <component>
-            <component-type>javax.faces.Output</component-type>
-            <renderer-type>javax.faces.Text</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Flag indicating that generated markup must
-                be escaped in a manner that is appropriate
-                for the markup language to be rendered.
-                Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>escape</name>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>java.lang.Boolean</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Container for all JavaServer Faces core and custom
-            component actions used on a page.
-        </description>
-        <tag-name>view</tag-name>
-        <component>
-            <component-type>javax.faces.ViewRoot</component-type>
-            <renderer-type/>
-        </component>
-        <attribute>
-            <description>
-                Locale to use for localizing this page. Expressions
-                must evaluate to a java.util.Locale or to a String
-                that is converted to a Locale.
-            </description>
-            <name>locale</name>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Identifier for the RenderKit to use for
-                rendering this page.
-            </description>
-            <name>renderKitId</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Specifies the content-type of the response.
-            </description>
-            <name>contentType</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-
-        <attribute>
-            <description>
-                Specifies the character encoding that should be used for the
-                response.
-            </description>
-            <name>encoding</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                MethodBinding pointing to a method that takes a
-                javax.faces.event.PhaseEvent and returns void. This method
-                will be called before every phase except for restore view.
-            </description>
-            <name>beforePhase</name>
-            <required>false</required>
-            <method-signature>void beforePhase(javax.faces.event.PhaseEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-
-                MethodBinding pointing to a method that takes a
-                javax.faces.event.PhaseEvent and returns void. This method
-                will be called after every phase except for restore view.
-            </description>
-            <name>afterPhase</name>
-            <required>false</required>
-            <method-signature>void afterPhase(javax.faces.event.PhaseEvent)
-            </method-signature>
-        </attribute>
-    </tag>
-</facelet-taglib>
diff --git a/jsf-ri/conf/share/facelets_jsf_core.tld b/jsf-ri/conf/share/facelets_jsf_core.tld
deleted file mode 100644
index d6e3782..0000000
--- a/jsf-ri/conf/share/facelets_jsf_core.tld
+++ /dev/null
@@ -1,2474 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<taglib xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
-    version="2.1">
-
-
-    <!-- ========== Tag Library Description Elements ========================= -->
-
-    <description>
-        The core JavaServer Faces custom actions that are independent of
-        any particular RenderKit.
-    </description>
-    <tlib-version>1.2</tlib-version>
-    <short-name>f</short-name>
-    <uri>http://java.sun.com/jsf/core</uri>
-
-
-
-    <!-- ========== Tag Library Validator ==================================== -->
-
-
-    <!-- This TLV verifies that a Faces tag has an ID if it is a
-         child or sibling of a JSTL conditional or iterator tag  -->
- <validator>
-   <description>
-      This tag library validator verifies certain semantic restrictions on the
-      use of JavaServer Faces component actions, including the requirement that
-      component tags nested inside a JSTL conditional tag must have a value
-      specified for the "id" attribute.
-   </description>
-     <validator-class>
-      com.sun.faces.taglib.jsf_core.CoreValidator
-     </validator-class>
- </validator>
-
-
-    <!-- ============== Configuration Listener ============== -->
-
-    <!--
-          This ServletContextListener initializes the runtime environment
-          of the JavaServer Faces Reference Implementation when a web
-          application including it is initialized by the container.
-    -->
-    <listener>
-       <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
-    </listener>      
-
-    <!-- ========== Tag Descriptions ========================================= -->
-
-
- <tag>
-     <description>
-
-        <![CDATA[<p>Register an ActionListener instance on the
-        UIComponent associated with the closest parent UIComponent
-        custom action.</p>]]>
-     </description>
-     <name>actionListener</name>
-     <tag-class>com.sun.faces.taglib.jsf_core.ActionListenerTag</tag-class>
-     <body-content>empty</body-content>
-
-     <attribute>
-         <description>
-            Fully qualified Java class name of an ActionListener to be
-            created and registered.
-         </description>
-         <name>type</name>
-         <required>false</required>
-         <deferred-value>
-             <type>java.lang.String</type>
-         </deferred-value>         
-
-     </attribute>
-
-    <attribute>
-      <description>
-        Value binding expression that evaluates to an object that 
-        implements javax.faces.event.ActionListener.
-      </description>
-      <name>binding</name>
-      <required>false</required>
-      <deferred-value>
-          <type>javax.faces.event.ActionListener</type>
-      </deferred-value>         
-
-    </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-
-
-
- </tag>
-
-
-    <tag>
-        <description>
-            Add an attribute to the UIComponent associated with the closest
-            parent UIComponent custom action.
-        </description>
-        <name>attribute</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.AttributeTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                The name of the component attribute to be set.
-            </description>
-            <name>name</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                The value of the component attribute to be set.
-            </description>
-            <name>value</name>
-                <deferred-value>
-                    <type>java.lang.Object</type>
-                </deferred-value>
-        </attribute>
-    </tag>
-
-
-    <tag>
-        <description>
-            Register a DateTimeConverter instance on the UIComponent associated
-            with the closest parent UIComponent custom action.
-        </description>
-        <name>convertDateTime</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ConvertDateTimeTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Predefined formatting style which determines how the date
-                component of a date string is to be formatted and parsed.
-                Applied only if type is "date" or "both".  Valid values
-                are "default", "short", "medium", "long", and "full".
-                Default value is "default".
-            </description>
-            <name>dateStyle</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Locale whose predefined styles for dates and times are used
-                during formatting or parsing.  If not specified, the Locale
-                returned by FacesContext.getViewRoot().getLocale() will be used.
-                Value must be either a VB expression that evaluates to a
-                java.util.Locale instance, or a String that is valid to pass as
-                the first argument to the constructor java.util.Locale(String
-                language, String country).  The empty string is passed as the
-                second argument.
-            </description>
-            <name>locale</name>
-            <required>false</required>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Custom formatting pattern which determines how the
-                date/time string should be formatted and parsed.
-            </description>
-            <name>pattern</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Predefined formatting style which determines how the
-                time component of a date string is to be formatted and
-                parsed.  Applied only if type is "time" or "both".
-                Valid values are "default", "short", "medium", "long",
-                and "full".  Default value is "default".
-            </description>
-            <name>timeStyle</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Time zone in which to interpret any time information in the date
-                String.  Value must be either a VB expression that evaluates to
-                a java.util.TimeZone instance, or a String that is a timezone ID
-                as described in the javadocs for
-                java.util.TimeZone.getTimeZone().
-            </description>
-            <name>timeZone</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Specifies what contents the string value will be
-                formatted to include, or parsed expecting.  Valid
-                values are "date", "time", and "both".  Default
-                value is "date".
-            </description>
-            <name>type</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                javax.faces.convert.DateTimeConverter.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.convert.DateTimeConverter</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-    <tag>
-        <description>
-            Register a NumberConverter instance on the UIComponent associated
-            with the closest parent UIComponent custom action.
-        </description>
-        <name>convertNumber</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ConvertNumberTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                ISO 4217 currency code, applied only when
-                formatting currencies.
-            </description>
-            <name>currencyCode</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Currency symbol, applied only when formatting
-                currencies.
-            </description>
-            <name>currencySymbol</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag specifying whether formatted output will
-                contain grouping separators.  Expressions must
-                evaluate to a boolean.  Default value
-                is true.
-            </description>
-            <name>groupingUsed</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag specifying whether only the integer part
-                of the value will be formatted and parsed.
-                Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>integerOnly</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description><![CDATA[<p>
-
-                <span class="changed_modified_2_0">Locale</span> whose
-                predefined styles for numbers are used during formatting
-                and parsing.  If not specified, the Locale returned by
-                FacesContext.getViewRoot().getLocale() will be used.
-                Expressions must evaluate to a java.util.Locale <span
-                class="changed_modified_2_0">or a String that is valid to
-                pass as the first argument to the constructor
-                java.util.Locale(String language, String country). The
-                empty string is passed as the second argument.</span>
-
-            </p>]]></description>
-            <name>locale</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Maximum number of digits that will be formatted
-                in the fractional portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>maxFractionDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Maximum number of digits that will be formatted
-                in the integer portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>maxIntegerDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum number of digits that will be formatted
-                in the fractional portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>minFractionDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum number of digits that will be formatted
-                in the integer portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>minIntegerDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Custom formatting pattern which determins how the
-                number string should be formatted and parsed.
-            </description>
-            <name>pattern</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Specifies how the number string will be formatted
-                and parsed.  Valid values are "number", "currency",
-                and "percent".  Default value is "number".
-            </description>
-            <name>type</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                javax.faces.convert.NumberConverter.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.convert.NumberConverter</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-
-    </tag>
-
-    <tag>
-        <description>
-            Register a named Converter instance on the UIComponent
-            associated with the closest parent UIComponent custom action.
-        </description>
-        <name>converter</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ConverterTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Converter identifier of the Converter instance to be
-                created and registered.
-            </description>
-            <name>converterId</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an object that
-                implements javax.faces.convert.Converter.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.convert.Converter</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-    <tag>
-        <description><![CDATA[
-
-        <p class="changed_added_2_0"><span
-        class="changed_modified_2_0_rev_a">Register</span> an
-        AjaxBehavior instance on one or more UIComponents implementing
-        the ClientBehaviorHolder interface.  This tag may be nested
-        witin a single component (enabling Ajax for a single component),
-        or it may be "wrapped" around multiple components (enabling Ajax
-        for many components).</p>
-
-        <p class="changed_added_2_0">The String value for ids
-        specified for execute and render may be specified as a search
-        expression as outlined in the JavaDocs for
-        <code>UIComponent.findComponent()</code>. The implementation
-        must resolve these ids as specified for
-        <code>UIComponent.findComponent()</code>.  For example, consider
-        the following Facelets code.</p>
-
-<div class="xml" style="font-family:monospace;"><ol><li style="background: #fcfcfc;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><h:form</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"form_1"</span><span style="color: #000000; font-weight: bold;">></span></span></div></li> 
-<li style="background: #f0f0f0;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><h:panelGrid</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"panel_1"</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">"2"</span><span style="color: #000000; font-weight: bold;"> [...]
-<li style="background: #fcfcfc;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #808080; font-style: italic;"><!-- content irrelevant --></span></div></li> 
-<li style="background: #f0f0f0;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></h:panelGrid<span style="color: #000000; font-weight: bold;">></span></span></span></div></li> 
-<li style="background: #fcfcfc;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></h:form<span style="color: #000000; font-weight: bold;">></span></span></span></div></li> 
-<li style="background: #f0f0f0;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"> </div></li> 
-<li style="background: #fcfcfc;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><h:form</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"form_2"</span><span style="color: #000000; font-weight: bold;">></span></span></div></li> 
-<li style="background: #f0f0f0;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><h:commandButton</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"button"</span><span style="color: #000000; font-weight: bold;">></span></span></div></li> 
-<li style="background: #fcfcfc;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><f:ajax</span> <span style="color: #000066;">render</span>=<span style="color: #ff0000;">":form1:panel_1 panel_2"</span> <span style="color: #000000; font-weight: bold;">/></span></span></div></li> 
-<li style="background: #f0f0f0;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></h:commandButton<span style="color: #000000; font-weight: bold;">></span></span></span></div></li> 
-<li style="background: #fcfcfc;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><h:panelGrid</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"panel_2"</span><span style="color: #000000; font-weight: bold;">></span></span></div></li> 
-<li style="background: #f0f0f0;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #808080; font-style: italic;"><!-- content irrelevant --></span></div></li> 
-<li style="background: #fcfcfc;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></h:panelGrid<span style="color: #000000; font-weight: bold;">></span></span></span></div></li> 
-<li style="background: #f0f0f0;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;"></h:form<span style="color: #000000; font-weight: bold;">></span></span></span></div></li> 
-</ol></div>
-
-        <p class="changed_added_2_0">When the button is pressed,
-        panel_1, in form_1 will be re-rendered, along with panel_2 in
-        form_2.</p>
-
-        ]]></description>
-        <name>ajax</name>
-        <body-content>empty</body-content>
-
-     <attribute>
-         <description><![CDATA[
-             <p class="changed_added_2_0">A value of "true" indicates the 
-             AjaxBehavior should not be rendered.  A value of "false" indicates 
-             the AjaxBehavior should be rendered.  "false" is the default.</p>
-
-         ]]></description>
-         <name>disabled</name>
-         <required>false</required>
-         <deferred-value>
-             <type>java.lang.Boolean</type>
-         </deferred-value>
-
-     </attribute>
-
-     <attribute>
-         <description><![CDATA[
-             <p class="changed_added_2_0">A String identifying the type of event 
-             the Ajax action will apply to. If specified, it must be one of the 
-             events supported by the component the Ajax behavior is being applied to. 
-             For HTML components this would be the set of supported DOM events for the
-             component, plus "action" for Faces ActionSource components and "valueChange"
-             for Faces EditableValueHolder components.  If not specified, the default 
-             event is determined for the component.  The DOM event name is the actual DOM
-             event name (for example: "click") as opposed to (for example: "onclick").</p>
-
-         ]]></description>
-         <name>event</name>
-         <required>false</required>
-         <deferred-value>
-             <type>java.lang.String</type>
-         </deferred-value>
-
-     </attribute>
-
-     <attribute>
-         <description><![CDATA[ <p class="changed_added_2_0">Evaluates
-         to Collection<String>. This is a space separated list of
-         client ids of components that will participate in the "execute"
-         portion of the Request Processing Lifecycle.  If a literal is
-         specified the ids must be space delimited.  Any of the
-         keywords "@this", "@form", "@all", "@none" may be specified in
-         the id list. If not specified, the default value of
-         "@this" is assumed.  <span
-         class="changed_modified_2_0_rev_a">For example, <code>@this clientIdOne clientIdTwo</code>.</span></p>
-
-         ]]></description>
-         <name>execute</name>
-         <required>false</required>
-         <deferred-value>
-             <type>java.util.Collection</type>
-         </deferred-value>
-
-     </attribute>
-
-    <attribute>
-      <description><![CDATA[
-        <p class="changed_added_2_0">If "true" behavior events generated from this behavior 
-        are broadcast during Apply Request Values phase. Otherwise, the events will be 
-        broadcast during Invoke Aplications phase</p>
-
-      ]]></description>
-      <name>immediate</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.Boolean</type>
-      </deferred-value>
-
-    </attribute>
-
-     <attribute>
-         <description><![CDATA[
-             <p class="changed_added_2_0">Method expression referencing a method 
-             that will be called when an AjaxBehaviorEvent has been 
-             broadcast for the listener.</p>
-
-         ]]></description>
-         <name>listener</name>
-         <required>false</required>
-         <rtexprvalue>false</rtexprvalue>
-         <deferred-method>
-             <method-signature>public void processAjaxBehavior(javax.faces.event.AjaxBehaviorEvent event) throws javax.faces.event.AbortProcessingException</method-signature>
-         </deferred-method>
-
-    </attribute>
-
-    <attribute>
-      <description><![CDATA[
-        <p class="changed_added_2_0">The name of the JavaScript function that will handle UI events.</p>
-
-      ]]></description>
-      <name>onevent</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>
-
-    </attribute>
-
-    <attribute>
-      <description><![CDATA[
-        <p class="changed_added_2_0">The name of the JavaScript function that will handle errors.</p>
-
-      ]]></description>
-      <name>onerror</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>
-
-    </attribute>
-
-     <attribute>
-         <description><![CDATA[ <p class="changed_added_2_0">Evaluates
-         to Collection<String>. The clientIds of components that will
-         participate in the "render" portion of the Request Processing
-         Lifecycle.  If a literal is specified the identifiers must be
-         space delimited.  Any of the keywords "@this", "@form", "@all",
-         "@none" may be specified in the identifier list.  If not
-         specified, the default value of "@none" is assumed.  <span
-         class="changed_modified_2_0_rev_a">For example, <code>@this
-         clientIdOne clientIdTwo</code>.</span></p>
-
-         ]]></description>
-         <name>render</name>
-         <required>false</required>
-         <deferred-value>
-             <type>java.util.Collection</type>
-         </deferred-value>
-
-     </attribute>
-
-    </tag>
-
-    <tag>
-        <description><![CDATA[
-
-            <p class="changed_added_2_0"><span
-            class="changed_modified_2_0_rev_a">Allow</span> JSF page
-            authors to install <code>ComponentSystemEventListener</code>
-            instances on a component in a page.</p>
-
-            <div class="changed_added_2_0">
-
-            <p></p>
-
-            </div>
-
-        ]]></description>
-        <name>event</name>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description><![CDATA[
-
-                <p class="changed_added_2_0">Name of the event for which
-                to install a listener.  The following table lists the
-                valid values for this attribute, and the corresponding
-                event type for which the listener action is
-                registered.</p>
-
-<table border="1">
-<tr>
-
-<th>value for "<code>type</code>" tag attribute</th>
-
-<th>Type of event sent to listener method
-</th>
-
-</tr>
-
-<tr>
-
-<td>preRenderComponent
-</td>
-
-<td>javax.faces.event.PreRenderComponentEvent
-</td>
-
-</tr>
-
-<tr>
-
-<td>postAddToView
-</td>
-
-<td>javax.faces.event.PostAddToViewEvent
-</td>
-
-</tr>
-
-<tr>
-
-<td>preValidate
-</td>
-
-<td>javax.faces.event.PreValidateEvent
-</td>
-
-</tr>
-
-<tr>
-
-<td>postValidate
-</td>
-
-<td>javax.faces.event.PostValidateEvent
-</td>
-
-</tr>
-
-</table>
-
-<div class="changed_added_2_0">
-
-<p>In addition to these values, the fully qualified class name of any
-java class that extends
-<code>javax.faces.event.ComponentSystemEvent</code> may be used as the
-value of the "type" attribute.</p>
-
-<p>Also, the <code>@javax.faces.event.NamedEvent</code> annotation may
-be attached to any java class that extends
-<code>javax.faces.event.ComponentSystemEvent</code>.  This enables that
-event to be referenced from this attribute, as descibed in the javadocs
-for <code>@NamedEvent</code>.</p>
-
-</div>
-
-
-            ]]></description>
-            <name>type</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-            <deferred-value>
-              <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-              <p class="changed_modified_2_0_rev_a">The expression must
-              evaluate to a public method that takes a
-              <code>ComponentSystemEvent</code> parameter, with a return
-              type of void, or to a public method that takes no
-              arguments with a return type of void. In the latter case,
-              the method has no way of easily knowing where the event
-              came from, but this can be useful in cases where a
-              notification is needed that "an event happened".</p>
-
-            </description>
-            <name>listener</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-            <deferred-method>
-              <method-signature>public void listener(javax.faces.event.ComponentSystemEvent event) throws javax.faces.event.AbortProcessingException</method-signature>
-            </deferred-method>
-
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-        <description><![CDATA[
-
-            <p>Register a named facet on the UIComponent associated with
-            the closest parent UIComponent custom action.</p>
-
-
-        ]]></description>
-        <name>facet</name>
-        <tag-class>javax.faces.webapp.FacetTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Name of the facet to be created.
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-            <type>java.lang.String</type>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description><![CDATA[
-
-            <p class="changed_added_2_0"><span
-            class="changed_modified_2_0_rev_a">Declare</span> the
-            metadata facet for this view.  This must be a child of the
-            <code><f:view></code>. This tag must reside within the
-            top level XHTML file for the given viewId<span
-            class="changed_modified_2_0_rev_a">, or in a template
-            client, but</span> not in a template.  The implementation
-            must insure that the direct child of the facet is a
-            <code>UIPanel</code>, even if there is only one child of the
-            facet.  The implementation must set the id of the
-            <code>UIPanel</code> to be the value of the
-            <code>UIViewRoot.METADATA_FACET_NAME</code> symbolic
-            constant.</p>
-
-            <div class="changed_added_2_0">
-
-<p>The implementation must allow templating for this element according
-to the following pattern.</p>
-
-<p>template client XHTML view, view01.xhtml</p>
-
-</div>
-
-<div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><ui:composition template=<span class="st0">"template.xhtml"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">    <span class="sc2"><ui:define <span class="kw3">name</span>=<span class="st0">"metadata"</span><span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">      <span class="sc2"><f:metadata></span></div></li>
-<li class="li2"><div class="de2">        <span class="sc2"><f:viewParam <span class="kw3">name</span>=<span class="st0">"id"</span>/<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">      <span class="sc2"><span class="kw2"><</span>/f:metadata></span></div></li>
-<li class="li2"><div class="de2">    <span class="sc2"><span class="kw2"><</span>/ui:define></span></div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><ui:define <span class="kw3">name</span>=<span class="st0">"content"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">        <span class="sc2"><span class="kw2"><h1></span></span>The big news stories of the day<span class="sc2"><span class="kw2"></h1></span></span></div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><span class="kw2"><</span>/ui:define></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><</span>/ui:composition></span> </div></li></ol></div></div>
-
-            <div class="changed_added_2_0">
-<p>Note line 4.  The page author must ensure that the
-<code><f:metadata></code> element does not appear on a template or
-included page.  It must reside on the root page that corresponds to the
-viewId.</p>
-
-<p>The template page, template.xhtml</p>
-
-</div>
-
-
-<div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><span class="kw2"><html</span> xmlns=<span class="st0">"http://www.w3.org/1999/xhtml"</span></div></li>
-<li class="li2"><div class="de2">      xmlns:ui=<span class="st0">"http://java.sun.com/jsf/facelets"</span></div></li>
-<li class="li1"><div class="de1">      xmlns:f=<span class="st0">"http://java.sun.com/jsf/core"</span></div></li>
-<li class="li2"><div class="de2">      xml:<span class="kw3">lang</span>=<span class="st0">"en"</span> <span class="kw3">lang</span>=<span class="st0">"en"</span><span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><body></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><f:view></span></div></li>
-<li class="li2"><div class="de2">    </div></li>
-<li class="li1"><div class="de1">        <span class="sc2"><ui:insert <span class="kw3">name</span>=<span class="st0">"metadata"</span>/<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">   </div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><span class="kw2"><div</span> <span class="kw3">id</span>=<span class="st0">"container"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">        <span class="sc2"><ui:insert <span class="kw3">name</span>=<span class="st0">"content"</span>/<span class="kw2">></span></span></div></li>
-<li class="li1"><div class="de1">    <span class="sc2"><span class="kw2"></div></span></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><</span>/f:view></span></div></li>
-<li class="li1"><div class="de1"><span class="sc2"><span class="kw2"></body></span></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"></html></span></span> </div></li></ol></div></div>
-
-<p>The page author is not <em>required</em> to use templating, but if
-they do, it must be done as shown above, (or with
-<code><ui:include></code> in a similar manner).</p>
-
-            </div>
-
-
-        ]]></description>
-        <name>metadata</name>
-        <tag-class>javax.faces.webapp.FacetTag</tag-class>
-        <body-content>JSP</body-content>
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Load a resource bundle localized for the Locale of the current
-            view, and expose it as a java.util.Map in the request attributes
-            of the current request under the key specified by the value of the
-            "var" attribute of this tag.  The Map must behave such that if a
-            get() call is made for a key that does not exist in the Map, the
-            literal string ???KEY??? is returned from the Map, where KEY is
-            the key being looked up in the Map, instead of a
-            MissingResourceException being thrown.  If the ResourceBundle does
-            not exist, a JspException must be thrown.
-        </description>
-        <name>loadBundle</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.LoadBundleTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Base name of the resource bundle
-                to be loaded.
-            </description>
-            <name>basename</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Name of a request scope attribute under which
-                the resource bundle will be exposed as a Map.
-            </description>
-            <name>var</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-        </attribute>
-    </tag>
-
-
-    <tag>
-        <description><![CDATA[ <p><span
-        class="changed_modified_2_0_rev_a">Add</span> a child UIParameter
-        component to the UIComponent associated with the closest parent
-        UIComponent custom action.</p>]]>
-        </description>
-        <name>param</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ParameterTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-             <description>
-                ValueExpression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UIParameter component
-                to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                Name of the parameter to be created.
-            </description>
-            <name>name</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Value of the parameter to be set.
-            </description>
-            <name>value</name>
-            <deferred-value/>
-        </attribute>
-
-        <attribute>
-            <description><![CDATA[
-
-                <p>Flag enabling or disabling the inclusion of the
-                parameter.  <span
-                class="changed_modified_2_0_rev_a">This flag is
-                consulted by renderers that consider the
-                <code>UIParameter</code> component associated with this
-                <code><f:param></code> during their rendering.
-                Such renderers include <code>javax.faces.Output
-                javax.faces.Link</code> and
-                <code>javax.faces.OutcomeTarget
-                javax.faces.Link</code>.</span></p>
-
-
-            ]]></description>
-            <name>disable</name>
-            <deferred-value>
-                <type>boolean</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description><![CDATA[
-
-            <p class="changed_added_2_0"><span
-            class="changed_modified_2_0_rev_a">Used</span> inside of the
-            metada facet of a view, this tag causes a <a target="_"
-            href="../../../javadocs/javax/faces/component/UIViewParameter.html">UIViewParameter</a>
-            to be attached as metadata for the current view.  Because
-            <code>UIViewParameter</code> extends <code>UIInput</code>
-            all of the attributes and nested child content for any
-            <code>UIInput</code> tags are valid on this tag as well.</p>
-
-        ]]></description>
-        <name>viewParam</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ParameterTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                <![CDATA[Converter instance registered with this component.]]>
-            </description>
-            <name>
-                converter
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    javax.faces.convert.Converter
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.]]>
-            </description>
-            <name>
-                converterMessage
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The component identifier for this component.  This value must be
-                unique within the closest parent component that is a naming
-                container.]]>
-            </description>
-            <name>
-                id
-            </name>
-            <required>
-                false
-            </required>
-            <rtexprvalue>
-                true
-            </rtexprvalue>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating that the user is required to provide a submitted
-                value for this input component.]]>
-            </description>
-            <name>
-                required
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.]]>
-            </description>
-            <name>
-                requiredMessage
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[MethodExpression representing a validator method that will be called
-                during Process Validations to perform correctness checks on the
-                value of this component.  The expression must evaluate to a public
-                method that takes FacesContext, UIComponent, and Object parameters,
-                with a return type of void.]]>
-            </description>
-            <name>
-                validator
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-method>
-                <method-signature>
-                    void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-                </method-signature>
-            </deferred-method>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.]]>
-            </description>
-            <name>
-                validatorMessage
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression to which the value of the request parameter, as
-                determined by the name attribute, is bound. The resolved value of this
-                expression is used when encoding the view parameter into a bookmarkable link or
-                redirect URL with view parameter encoding enabled. If this attribute is omitted,
-                the value of the request parameter will instead be the local value of the
-                UIViewParameter.
-            </description>
-            <name>
-                value
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.Object
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                The name of the request parameter from which the value for this component
-                is retrieved on an initial request or to override the stored value on a
-                 postback.
-            </description>
-            <name>name</name>
-            <required>
-                true
-            </required>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<p>
-                
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component.  The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code> parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void.  In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                
-                </p>]]>
-            </description>
-            <name>
-                valueChangeListener
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-method>
-                <method-signature>
-                    void valueChange(javax.faces.event.ValueChangeEvent)
-                </method-signature>
-            </deferred-method>
-        </attribute>
-
-        <attribute>
-            <description>
-                <![CDATA[The maximum number of characters that may
-                be entered in this field.]]>
-            </description>
-            <name>
-                maxlength
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    int
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    javax.faces.component.UIComponent
-                </type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0"><span
-        class="changed_deleted_2_0_rev_a">If present, this attribute
-        refers to the value of one of the exposed attached objects
-        within the composite component inside of which this tag is
-        nested.</span></p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-
-    </tag>
-
-  <tag>
-
-    <description>
-      Register a PhaseListener instance on the UIViewRoot in which
-      this tag is nested.
-    </description>
-    <name>phaseListener</name>
-    <tag-class>com.sun.faces.taglib.jsf_core.PhaseListenerTag</tag-class>
-    <body-content>empty</body-content>
-
-    <attribute>
-      <description>
-        Fully qualified Java class name of an PhaseListener to be
-        created and registered.
-      </description>
-      <name>type</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>
-
-    </attribute>
-
-    <attribute>
-      <description>
-        Value binding expression that evaluates to an object that 
-        implements javax.faces.event.PhaseListener.
-      </description>
-      <name>binding</name>
-      <required>false</required>
-      <deferred-value>
-          <type>javax.faces.event.PhaseListener</type>
-      </deferred-value>
-
-    </attribute>
-  </tag>
-
-    <tag>
-        <description>
-            Add a child UISelectItem component to the UIComponent
-            associated with the closest parent UIComponent custom
-            action.
-        </description>
-        <name>selectItem</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SelectItemTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UISelectItem
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                Description of this option, for use in
-                development tools.
-            </description>
-            <name>itemDescription</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag indicating whether the option created
-                by this component is disabled.  Expressions
-                must evaluate to a boolean.  Default value
-                is false.
-            </description>
-            <name>itemDisabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Label to be displayed to the user
-                for this option.
-            </description>
-            <name>itemLabel</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag indicating that characters that are sensitive in
-                the value of the <![CDATA[<code>itemLabel</code>]]>
-                attribute must be escaped. This flag is set to "true" by
-                default.
-            </description>
-            <name>escapeItem</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Value to be returned to the server if this
-                option is selected by the user.
-            </description>
-            <name>itemValue</name>
-            <deferred-value/>
-        </attribute>
-
-        <attribute>
-            <description>
-                Value binding expression pointing at a
-                SelectItem instance containing the
-                information for this option.
-            </description>
-            <name>value</name>
-            <deferred-value>
-                <type>javax.faces.model.SelectItem</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag indicating whether the option created by this
-                component represents the special "no selection"
-                option.  Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>noSelectionOption</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-
-    </tag>
-
-
-    <tag>
-        <description>
-            <![CDATA[<p><span class="changed_modified_2_0">Add</span> a
-            child UISelectItems component to the UIComponent associated
-            with the closed parent UIComponent custom action.</p>
-
-            <p class="changed_modified_2_0">When iterating over the
-            select items, <code>toString()</code> must be called on the
-            string rendered attribute values.</p>
-
-<p class="changed_added_2_0">Version 2 of the specification introduces
-several new attributes, described below.  These are: var, itemValue,
-itemLabel, itemDescription, itemDisabled, and itemLabelEscaped.</p>
-
-            ]]>
-
-        </description>
-        <name>selectItems</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SelectItemsTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UISelectItems
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                <![CDATA[
-
-                <p>Value expression pointing at <span
-                class="changed_modified_2_0">any <code>Collection</code>
-                or array.</span> The member elements may be instances of
-                <code>SelectItem</code> <span
-                class="changed_added_2_0">or any Java Object.  In the
-                case where the member elements are plain Java Objects,
-                several additional attributes must be used by the page
-                author to correctly identify the data to the enclosing
-                <code>UISelectOne</code> or <code>UISelectMany</code>
-                component, as shown in the following example.</span>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><h:selectOneListbox <span class="kw3">size</span>=<span class="st0">"1"</span> <span class="kw3">id</span>=<span class="st0">"escape02"</span> <span class="kw3">value</span>=<span class="st0">"#{select05NoSelection.initialCollectionValues}"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:selectItems <span class="kw3">value</span>=<span class="st0">"#{select05NoSelection.hobbitList}"</span></div></li>
-<li class="li1"><div class="de1">                 var=<span class="st0">"n"</span></div></li>
-<li class="li2"><div class="de2">                 itemValue=<span class="st0">"#{n}"</span></div></li>
-<li class="li1"><div class="de1">                 itemLabel=<span class="st0">"#{n.bio}"</span></div></li>
-<li class="li2"><div class="de2">                 itemDescription=<span class="st0">"#{n.description}"</span></div></li>
-<li class="li1"><div class="de1">                 itemDisabled=<span class="st0">"#{n.disabled}"</span></div></li>
-<li class="li2"><div class="de2">                 itemLabelEscaped=<span class="st0">"true"</span></div></li>
-<li class="li1"><div class="de1">                 noSelectionValue=<span class="st0">"#{select05NoSelection.hobbitList[0]}"</span>/<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><</span>/h:selectOneListbox></span> </div></li></ol></div></div>
-
-<p class="changed_added_2_0">In the preceding example, the
-<code>value</code> attribute on line 1 points to a
-<code>Collection<HobbitBean></code>.  <code>HobbitBean</code> is
-just a regular Java Object (POJO) that conforms to JavaBeans naming
-conventions for its properties.  The <code>value</code> attribute on
-line 2 points to a <code>List<HobbitBean></code>, though it could
-just as well point to a <code>Collection</code>, array, or
-<code>javax.faces.model.DataModel</code>.  The attributes on lines 3
-through 9, inclusive, leverage the fact that the value is a collection
-of POJOs.
-</p>
-
-
-</p>
-
-                ]]>
-            </description>
-            <name>value</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                <![CDATA[
-
-<p class="changed_added_2_0">Expose the value from the
-<code>value</code> attribute under this request scoped key so that it
-may be referred to in EL for the value of other attributes.</p>
-
-                ]]>
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <rtexprvalue>false</rtexprvalue>
-            <type>java.lang.String</type>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a
-<code>Collection</code>, array, or <code>Map</code> from which the items
-to be shown will be rendered.</p> ]]>
-
-            </description>
-            <name>itemValue</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a String that will
-serve as the label to be shown for the item.</p> ]]>
-
-            </description>
-            <name>itemLabel</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a String that will
-serve as the description to be shown for the item.</p> ]]>
-
-            </description>
-            <name>itemDescription</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a boolean that will
-determine if the item value is selectable or not.</p> ]]>
-
-            </description>
-            <name>itemDisabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a boolean that will
-determine if the rendered markup for the item receives normal JSF HTML escaping or not.</p> ]]>
-
-            </description>
-            <name>itemLabelEscaped</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">Is either an EL expression
-pointing to the element in the value collection whose value should be
-marked as a “no selection” item, or a literal string that
-exactly matches the value of the item in the collection that must be
-marked as the “no selection” item.  If the user selects such
-an item <strong>and</strong> the field is marked as required, then it
-will not pass validation.</p> ]]>
-
-            </description>
-            <name>noSelectionValue</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description>
-        <![CDATA[<p>Register an ActionListener instance on the UIComponent
-        associated with the closest parent UIComponent custom action.
-        This actionListener will cause the value given by the "value"
-        attribute to be set into the ValueExpression given by the "target"
-        attribute.</p>
-
-        <p>The implementation of this tag creates a special
-        <code>ActionListener</code> instance and registers it on the
-        <code>ActionSource</code> associated with our most immediate surrounding
-        instance of a tag whose implementation class is a subclass of
-        <code>UIComponentTag</code>.  This tag creates no output to the page
-        currently being created.</p>
-
-        <p>The <code>ActionListener</code> instance created and installed by
-        this tag has the following behavior and contract.</p>
-
-        <ul>
-
-        <li>Only create and register the <code>ActionListener</code> instance
-        the first time the component for this tag is created</li>
-
-        <li>The "target" and "value" tag attributes are ValueExpression
-        instances and are stored unevaluated as instance variables of the
-        listener.</li>
-
-        <li>When the listener executes, perform the following:
-           <ul>
-                Call getValue() on the "value" ValueExpression.
-           </ul>
-           <ul>
-                 If value of the "value" expression is null, call setValue() on
-                 the "target" ValueExpression with the null value.
-           </ul>
-           <ul>
-                If the value of the "value" expression is not null, call getType()
-                on the "value" and "target" ValueExpressions to determine their
-                property types.
-           </ul>
-           <ul>
-                Coerce the value of the "value" expression to the "target"
-                expression value type following the Expression Language coercion
-                rules.  Call setValue() on the "target" ValueExpression with the
-                resulting value.
-           </ul>
-           <ul>
-                If either coercion or the execution of setValue() fails throw an
-                AbortProcessingException.
-           </ul>
-        </li>
-
-        </ul>]]>
-        </description>
-        <name>setPropertyActionListener</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SetPropertyActionListenerTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-              ValueExpression to be stored as the value of the target
-              attribute.
-            </description>
-            <name>value</name>
-            <required>true</required>
-            <deferred-value/>
-        </attribute>
-
-        <attribute>
-            <description>
-              ValueExpression that is the destination of the value
-              attribute.
-            </description>
-            <name>target</name>
-            <required>true</required>
-            <deferred-value/>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-
-    <tag>
-        <description>
-            Container action for all JavaServer Faces core and
-            custom component actions used on a nested page via
-            "jsp:include" or any custom action that dynamically
-            includes another page from the same web application,
-            such as JSTL's "c:import".
-        </description>
-        <name>subview</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SubviewTag</tag-class>
-        <body-content>JSP</body-content>
-
-
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UINamingContainer
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag indicating whether this component (and its
-                children) should be rendered.  Expressions must
-                evaluate to a boolean.
-            </description>
-            <name>rendered</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Register a DoubleRangeValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <name>validateDoubleRange</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidateDoubleRangeTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                <![CDATA[ <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-                ]]>
-            </description>
-            <name>disabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum value allowed for this component.
-            </description>
-            <name>maximum</name>
-            <deferred-value>
-                <type>java.lang.Double</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum value allowed for this component.
-            </description>
-            <name>minimum</name>
-            <deferred-value>
-                <type>java.lang.Double</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                DoubleRangeValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.DoubleRangeValidator</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-
-    <tag>
-        <description>
-            Register a LengthValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <name>validateLength</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidateLengthTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                <![CDATA[ <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-                ]]>
-            </description>
-            <name>disabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum length allowed for this component.
-            </description>
-            <name>maximum</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum length allowed for this component.
-            </description>
-            <name>minimum</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                LenghtValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.LengthValidator</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-
-    <tag>
-         <description>
-            Register a LongRangeValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <name>validateLongRange</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidateLongRangeTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                <![CDATA[ <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-                ]]>
-            </description>
-            <name>disabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                Maximum value allowed for this component.
-            </description>
-            <name>maximum</name>
-            <deferred-value>
-                <type>java.lang.Long</type>
-            </deferred-value>
-
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum value allowed for this component.
-            </description>
-            <name>minimum</name>
-            <deferred-value>
-                <type>java.lang.Long</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                LongRangeValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.LongRangeValidator</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-    <tag>
-        <description><![CDATA[<p>
-
-                <span class="changed_added_2_0">
-            A validator that delegates the validation of the local value
-            to the Bean Validation API. The validationGroups attribute
-            serves as a filter that instructs the Bean Validation API which 
-            contraints to enforce. If there are any constraint violations
-            reported by Bean Validation, the value is considered invalid.
-
-         </p>]]>
-        </description>
-        <name>validateBean</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.BeanValidatorTag</tag-class>
-        <body-content>empty</body-content>
-        <attribute>
-             <description>
-                A comma-separated list of validation groups. A validation group
-                is a fully-qualified class name.
-            </description>
-            <name>validationGroups</name>
-            <required>false</required>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[ <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-                ]]>
-            </description>
-            <name>disabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                BeanValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.BeanValidator</type>
-            </deferred-value>
-        </attribute>
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-    
-    <tag>
-        <description><![CDATA[<p>
-
-                <span class="changed_added_2_0">
-            A validator that uses the pattern attribute to validate the
-            wrapping component.  The entire pattern is matched against
-            the String value of the component.  If it matches, it's
-            valid.
-
-         </p>]]>
-        </description>
-        <name>validateRegex</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.RegexValidatorTag</tag-class>
-        <body-content>empty</body-content>
-        <attribute>
-            <description>
-                <![CDATA[ <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-                ]]>
-            </description>
-            <name>disabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-             <description>
-                A regular expression pattern.  Remember that, like in
-                all Java strings, backslash must be escaped with another
-                backslash.
-            </description>
-            <name>pattern</name>
-            <required>true</required>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                RegexValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.RegexValidator</type>
-            </deferred-value>
-        </attribute>
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-    <tag>
-        <description>
-
-        <![CDATA[<p class="changed_added_2_0">A validator that enforces
-        the presence of a value. It has the same affect as setting the
-        required attribute on a UIInput to true.</p>]]>
-
-        </description>
-        <name>validateRequired</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidateLengthTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                <![CDATA[ <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-                ]]>
-            </description>
-            <name>disabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                RequiredValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.RequiredValidator</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-    <tag>
-        <description><![CDATA[
-
-            <p><span class="changed_modified_2_0">Register</span> a named
-            Validator instance on the UIComponent associated with the
-            closest parent UIComponent custom action.</p>
-
-           <div class="changed_added_2_0">
-
-           <p>Usage outside of an <code>EditableValueHolder</code>
-           parent</p>
-
-           <p>If this element is nested within a
-           <code>UIComponent</code> tag that has other
-           <code>UIComponent</code> children, the validator will be
-           automatically added to all the child components as well as
-           this one.  The implementation must ensure this occurs even if
-           the parent of this element is not an instance of
-           <code>EditableValueHolder</code>.</p>
-
-           </div>
-
-        ]]></description>
-        <name>validator</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidatorTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                <![CDATA[ <p class="changed_added_2_0">A boolean value
-                enabling page level determination of whether or not this
-                validator is enabled on the enclosing component.</p>
-
-                ]]>
-            </description>
-            <name>disabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-             <description>
-                Validator identifier of the Validator
-                to be created and registered.
-            </description>
-            <name>validatorId</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an object that implements
-                the javax.faces.validator.Validator interface.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.Validator</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-    </tag>
-
-
-    <tag>
-        <description>
-            Register a ValueChangeListener instance on the UIComponent
-            associated with the closest parent UIComponent custom
-            action.
-        </description>
-        <name>valueChangeListener</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValueChangeListenerTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Fully qualified Java class name of a
-                ValueChangeListener to be created and registered.
-            </description>
-            <name>type</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-
-        </attribute>
-
-       <attribute>
-         <description>
-           Value binding expression that evaluates to an object that 
-           implements javax.faces.event.ValueChangeListener.
-         </description>
-         <name>binding</name>
-         <required>false</required>
-         <deferred-value>
-           <type>javax.faces.event.ValueChangeListener</type>
-         </deferred-value>
-    </attribute>
-
-    <attribute>
-      <description><![CDATA[
-
-        <p class="changed_added_2_0">If present, this attribute refers
-        to the value of one of the exposed attached objects within the
-        composite component inside of which this tag is nested.</p>
-
-      ]]></description>
-      <name>for</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>         
-
-    </attribute>
-
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Create and register a child UIOutput component
-            associated with the closest parent UIComponent
-            custom action, which renders nested body content.
-        </description>
-        <name>verbatim</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.VerbatimTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Flag indicating that generated markup must
-                be escaped in a manner that is appropriate
-                for the markup language to be rendered.
-                Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>escape</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.  The default value for this property is true.]]>
-            </description>
-            <name>
-                rendered
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.Boolean
-                </type>
-            </deferred-value>
-        </attribute>        
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Container for all JavaServer Faces core and custom
-            component actions used on a page.
-        </description>
-        <name>view</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ViewTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Locale to use for localizing this page.  Expressions
-                must evaluate to a java.util.Locale or to a String
-                that is converted to a Locale.
-            </description>
-            <name>locale</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description>
-        Identifier for the RenderKit to use for
-        rendering this page.
-      </description>
-      <name>renderKitId</name>
-      <required>false</required>
-      <deferred-value>
-           <type>java.lang.String</type>
-      </deferred-value>
-
-    </attribute>
-
-    <attribute>
-        <description>
-            Specifies the content-type of the response.
-        </description>
-        <name>contentType</name>
-        <required>false</required>
-        <deferred-value>
-            <type>java.lang.String</type>
-        </deferred-value>
-    </attribute>
-
-    <attribute>
-        <description>
-            Specifies the character encoding that should be used for the response.
-        </description>
-        <name>encoding</name>
-        <required>false</required>
-        <deferred-value>
-            <type>java.lang.String</type>
-        </deferred-value>
-    </attribute>
-
-    <attribute>
-      <description>
-
-          MethodBinding pointing to a method that takes a
-          javax.faces.event.PhaseEvent and returns void.  This method
-          will be called before every phase except for restore view.
-      </description>
-      <name>beforePhase</name>
-      <required>false</required>
-      <deferred-method>
-           <method-signature>void beforePhase(javax.faces.event.PhaseEvent)</method-signature>
-      </deferred-method>
-    </attribute>
-
-    <attribute>
-      <description>
-
-          MethodBinding pointing to a method that takes a
-          javax.faces.event.PhaseEvent and returns void.  This method
-          will be called after every phase except for restore view.
-      </description>
-      <name>afterPhase</name>
-      <required>false</required>
-      <deferred-method>
-           <method-signature>void afterPhase(javax.faces.event.PhaseEvent)</method-signature>
-      </deferred-method>
-    </attribute>
-
-    </tag>
-
-
-</taglib>
diff --git a/jsf-ri/conf/share/html_basic.taglib.xml b/jsf-ri/conf/share/html_basic.taglib.xml
deleted file mode 100644
index c3117b3..0000000
--- a/jsf-ri/conf/share/html_basic.taglib.xml
+++ /dev/null
@@ -1,10465 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-                version="2.0">
-    <description>
-        This tag library contains JavaServer Faces component tags for all
-        UIComponent + HTML RenderKit Renderer combinations defined in the
-        JavaServer Faces Specification.
-    </description>
-    <namespace>http://java.sun.com/jsf/html</namespace>
-    <tag>
-        <description>
-            <![CDATA[<div class="changed_added_2_0">Render an HTML "input" element of type "button".
-            The value of the component is rendered as the button text and the outcome of the
-            component is used to determine the target URL which is activated by onclick.  If
-            "image" attribute is specified, render it as the value of the "src" attribute after
-            passing it to the <code>getResourceURL()</code> method of the <code>ViewHandler</code>
-            for this application, and passing the result through the <code>encodeResourceURL()</code>
-            method of the <code>ExternalContext</code>. Any child <code>UIParameter</code> components
-            are appended to the String to be used as the target URL as query parameters before rendering.
-            The entire target URL string must be passed through a call to the <code>encodeResourceURL()</code>
-            method of the <code>ExternalContext</code>.  The name of the <code>UIParameter</code> goes on the
-            left hand side, and the value of the <code>UIParameter</code> on the right hand side.  The name
-            and the value must be URLEncoded.  Each <code>UIParameter</code> instance is separeted by an
-            ampersand, as dictated in the URL spec.  The final encoded result will be written out to the
-            onclick attribute of the button as "window.location.href = '<encoded HREF value>'".
-            If the developer has specified a custom onlclick the window.location.href name/value
-            pair will be appended at the end of the developer specified script.
-            If the "fragment" attribute is specified, the value will be included at the end
-            of the resulting URL preceded by a hash mark.  If the "styleClass" attribute is specified,
-            render its value as the value of the "class" attribute.  If the "id" attribute is specified,
-            follow the same steps as mentioned in the "<a href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on Encoding</a>" regarding the "id" attribute for UIInput components.  If the
-            "disabled" attribute is specified, do not render the "onclick" element and assign the
-            "disabled" attribute a value of true.</div>]]>
-        </description>
-        <tag-name>
-            button
-        </tag-name>
-        <component>
-            <component-type>javax.faces.HtmlOutcomeTargetButton</component-type>
-            <renderer-type>javax.faces.Button</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                <![CDATA[The component identifier for this component.  This value must be
-                unique within the closest parent component that is a naming
-                container.]]>
-            </description>
-            <name>
-                id
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Whether to include page parameters in the target URI.]]>
-            </description>
-            <name>
-                includeViewParams
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.Boolean
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The logical outcome used to resolve a navigation case.]]>
-            </description>
-            <name>
-                outcome
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.  The default value for this property is true.]]>
-            </description>
-            <name>
-                rendered
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                boolean
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The current value of this component.]]>
-            </description>
-            <name>
-                value
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.Object
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Access key that, when pressed, transfers focus
-                to this element.]]>
-            </description>
-            <name>
-                accesskey
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Alternate textual description of the
-                element rendered by this component.]]>
-            </description>
-            <name>
-                alt
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Direction indication for text that does not inherit directionality.
-                Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
-            </description>
-            <name>
-                dir
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The identifier of the page fragment which should
-                be brought into focus when the target page is
-                rendered. The value of this attribute is appended
-                to the end of target URL following a hash (#) mark.
-                This notation is part of the standard URL syntax.]]>
-            </description>
-            <name>
-                fragment
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<p>
-                Absolute or relative URL of the
-                image to be displayed for this
-                button.  If specified, this
-                "input" element will be of type
-                "image".  Otherwise, it will be
-                of the type specified by the
-                "type" property with a label
-                specified by the "value"
-                property.  <span
-                class="changed_added_2_0">Note
-                that if the value of this
-                attribute starts with "/", the
-                rendered value for this
-                attribute will be prefixed with
-                the context-root for this
-                application.</span>
-                </p>]]>
-            </description>
-            <name>
-                image
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Code describing the language used in the generated markup
-                for this component.]]>
-            </description>
-            <name>
-                lang
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when this element loses focus.]]>
-            </description>
-            <name>
-                onblur
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                clicked over this element.]]>
-            </description>
-            <name>
-                onclick
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                double clicked over this element.]]>
-            </description>
-            <name>
-                ondblclick
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when this element receives focus.]]>
-            </description>
-            <name>
-                onfocus
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-                pressed down over this element.]]>
-            </description>
-            <name>
-                onkeydown
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-                pressed and released over this element.]]>
-            </description>
-            <name>
-                onkeypress
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-                released over this element.]]>
-            </description>
-            <name>
-                onkeyup
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                pressed down over this element.]]>
-            </description>
-            <name>
-                onmousedown
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                moved within this element.]]>
-            </description>
-            <name>
-                onmousemove
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                moved away from this element.]]>
-            </description>
-            <name>
-                onmouseout
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                moved onto this element.]]>
-            </description>
-            <name>
-                onmouseover
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                released over this element.]]>
-            </description>
-            <name>
-                onmouseup
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[CSS style(s) to be applied when this component is rendered.]]>
-            </description>
-            <name>
-                style
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Space-separated list of CSS style class(es) to be applied when
-                this element is rendered.  This value must be passed through
-                as the "class" attribute on generated markup.]]>
-            </description>
-            <name>
-                styleClass
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Position of this element in the tabbing order
-                for the current document.  This value must be
-                an integer between 0 and 32767.]]>
-            </description>
-            <name>
-                tabindex
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Advisory title information about markup elements generated
-                for this component.]]>
-            </description>
-            <name>
-                title
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.component.UIComponent
-            </type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <![CDATA[<div class="changed_added_2_0">Render an HTML "a" anchor element.  The value of the
-            component is rendered as the anchor text and the outcome of the component is used
-            to determine the target URL rendered in the "href" attribute.  Any
-            child <code>UIParameter</code> components are appended to the String to be
-            output as the value of the "href" attribute as query parameters
-            before rendering.  The entire "href" string must be passed through
-            a call to the <code>encodeResourceURL()</code> method of the
-            <code>ExternalContext</code>.  The name of the <code>UIParameter</code> goes on
-            the left hand side, and the value of the <code>UIParameter</code> on the right
-            hand side.  The name and the value must be URLEncoded.  Each
-            <code>UIParameter</code> instance is separated by an ampersand, as dictated in
-            the URL spec.  If the "fragment" attribute is specified, the value will be
-            included at the end of the resulting URL preceded by a hash mark.
-            If the "styleClass" attribute is specified, render
-            its value as the value of the "class" attribute.  If the "id" attribute
-            is specified, follow the same steps as mentioned in the
-            "<a href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on Encoding</a>" regarding the "id" attribute for UIInput components.
-            If the "disabled" attribute is specified, do not render the HTML "a"
-            anchor element or the "href" element.  Instead, render a "span" element.
-            If the "styleClass" attribute is specified, render its value as the value
-            of the "class" attribute on the "span".  Render any pass-through attributes
-            on the "span".</div>]]>
-        </description>
-        <tag-name>
-            link
-        </tag-name>
-        <component>
-            <component-type>javax.faces.HtmlOutcomeTargetLink</component-type>
-            <renderer-type>javax.faces.Link</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                <![CDATA[The component identifier for this component.  This value must be
-                unique within the closest parent component that is a naming
-                container.]]>
-            </description>
-            <name>
-                id
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Whether to include page parameters in the target URI.]]>
-            </description>
-            <name>
-                includeViewParams
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.Boolean
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The logical outcome used to resolve a navigation case.]]>
-            </description>
-            <name>
-                outcome
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.  The default value for this property is true.]]>
-            </description>
-            <name>
-                rendered
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                boolean
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The current value of this component.]]>
-            </description>
-            <name>
-                value
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.Object
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Access key that, when pressed, transfers focus
-                to this element.]]>
-            </description>
-            <name>
-                accesskey
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The character encoding of the resource designated
-                by this hyperlink.]]>
-            </description>
-            <name>
-                charset
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The position and shape of the hot spot on the screen
-                (for use in client-side image maps).]]>
-            </description>
-            <name>
-                coords
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Direction indication for text that does not inherit directionality.
-                Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
-            </description>
-            <name>
-                dir
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating that this element must never
-                receive focus or be included in a subsequent
-                submit.]]>
-            </description>
-            <name>
-                disabled
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                boolean
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The identifier of the page fragment which should
-                be brought into focus when the target page is
-                rendered. The value of this attribute is appended
-                to the end of target URL following a hash (#) mark.
-                This notation is part of the standard URL syntax.]]>
-            </description>
-            <name>
-                fragment
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The language code of the resource designated
-                by this hyperlink.]]>
-            </description>
-            <name>
-                hreflang
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Code describing the language used in the generated markup
-                for this component.]]>
-            </description>
-            <name>
-                lang
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when this element loses focus.]]>
-            </description>
-            <name>
-                onblur
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                clicked over this element.]]>
-            </description>
-            <name>
-                onclick
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                double clicked over this element.]]>
-            </description>
-            <name>
-                ondblclick
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when this element receives focus.]]>
-            </description>
-            <name>
-                onfocus
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-                pressed down over this element.]]>
-            </description>
-            <name>
-                onkeydown
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-                pressed and released over this element.]]>
-            </description>
-            <name>
-                onkeypress
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-                released over this element.]]>
-            </description>
-            <name>
-                onkeyup
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                pressed down over this element.]]>
-            </description>
-            <name>
-                onmousedown
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                moved within this element.]]>
-            </description>
-            <name>
-                onmousemove
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                moved away from this element.]]>
-            </description>
-            <name>
-                onmouseout
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                moved onto this element.]]>
-            </description>
-            <name>
-                onmouseover
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-                released over this element.]]>
-            </description>
-            <name>
-                onmouseup
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The relationship from the current document
-                to the anchor specified by this hyperlink.
-                The value of this attribute is a space-separated
-                list of link types.]]>
-            </description>
-            <name>
-                rel
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[A reverse link from the anchor specified
-                by this hyperlink to the current document.
-                The value of this attribute is a space-separated
-                list of link types.]]>
-            </description>
-            <name>
-                rev
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The shape of the hot spot on the screen
-                (for use in client-side image maps).  Valid
-                values are:  default (entire region); rect
-                (rectangular region); circle (circular region);
-                and poly (polygonal region).]]>
-            </description>
-            <name>
-                shape
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[CSS style(s) to be applied when this component is rendered.]]>
-            </description>
-            <name>
-                style
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Space-separated list of CSS style class(es) to be applied when
-                this element is rendered.  This value must be passed through
-                as the "class" attribute on generated markup.]]>
-            </description>
-            <name>
-                styleClass
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Position of this element in the tabbing order
-                for the current document.  This value must be
-                an integer between 0 and 32767.]]>
-            </description>
-            <name>
-                tabindex
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Name of a frame where the resource
-                retrieved via this hyperlink is to
-                be displayed.]]>
-            </description>
-            <name>
-                target
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Advisory title information about markup elements generated
-                for this component.]]>
-            </description>
-            <name>
-                title
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The content type of the resource designated
-                by this hyperlink.]]>
-            </description>
-            <name>
-                type
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.component.UIComponent
-            </type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <![CDATA[
-
-          <p>Render the markup for a <code><head></code> element.</p>
-
-          <p>Decode Behavior</p>
-
-          <ul>
-
-          <p>No action is required during decode for this renderer.</p>
-
-          </ul>
-
-          <p>Encode Behavior</p>
-
-          <ul>
-
-          <p>Render the starting <code><head></code> element tag.  Any attributes declared on the element must be passed through
-          unmodified to the rendered output.
-          Just before rendering the
-          closing <code></head></code> element tag, render any resources that have been targeted
-          for this "head" element:
-          <ul>
-          <li>Obtain a <code>UIViewRoot</code> instance.</li>
-          <li>Obtain a <code>List</code> of component resources targeted for
-          this "head" element with a call to <code>UIViewRoot.getComponentResources()</code>
-          with the <code>String "head"</code> as the argument.</li>
-          <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
-          and call <code>encodeAll</code> on each <code>UIComponent</code> instance.
-
-          <p>Any attributes declared on the element must be passed through
-          unmodified to the rendered output.</p>
-
-          </ul>
-          Render the ending <code></head></code> element tag.</p>
-
-           ]]>
-        </description>
-        <tag-name>
-            head
-        </tag-name>
-        <component>
-            <component-type>javax.faces.Output</component-type>
-            <renderer-type>javax.faces.Head</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                <![CDATA[Direction indication for text that does not inherit directionality.
-              Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
-            </description>
-            <name>
-                dir
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Code describing the language used in the generated markup
-              for this component.]]>
-            </description>
-            <name>
-                lang
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.component.UIComponent
-            </type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <![CDATA[
-
-          <p>Render the markup for a <code><body></code> element.</p>
-
-          <p>Decode Behavior</p>
-
-          <ul>
-
-          <p>No action is required during decode for this renderer.</p>
-
-          </ul>
-
-          <p>Encode Behavior</p>
-
-          <ul>
-
-          <p>Render the starting <code><body></code> element tag. Just before rendering the
-          closing <code></body></code> element tag, render any resources that have been targeted
-          for this "body" element:
-          <ul>
-          <li>Obtain a <code>UIViewRoot</code> instance.</li>
-
-          <li>Obtain a <code>List</code> of component resources targeted for
-          this "body" element with a call to
-          <code>UIViewRoot.getComponentResources()</code> with the
-          <code>String "body"</code> as the argument.  Render the ending
-          <code></body></code> element tag.</li>
-
-          <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
-          and call <code>encodeAll</code> on each <code>UIComponent</code> instance.
-          </ul>
-
-          <p>Any attributes declared on the element must be passed through
-          unmodified to the rendered output.</p>
-
-          ]]>
-        </description>
-        <tag-name>
-            body
-        </tag-name>
-        <component>
-            <component-type>javax.faces.Output</component-type>
-            <renderer-type>javax.faces.Body</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                <![CDATA[Direction indication for text that does not inherit directionality.
-              Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
-            </description>
-            <name>
-                dir
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Code describing the language used in the generated markup
-              for this component.]]>
-            </description>
-            <name>
-                lang
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-              clicked over this element.]]>
-            </description>
-            <name>
-                onclick
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-              double clicked over this element.]]>
-            </description>
-            <name>
-                ondblclick
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-              pressed down over this element.]]>
-            </description>
-            <name>
-                onkeydown
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-              pressed and released over this element.]]>
-            </description>
-            <name>
-                onkeypress
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a key is
-              released over this element.]]>
-            </description>
-            <name>
-                onkeyup
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when the user agent finishes loading
-              a window or all frames within a frameset.]]>
-            </description>
-            <name>
-                onload
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-              pressed down over this element.]]>
-            </description>
-            <name>
-                onmousedown
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-              moved within this element.]]>
-            </description>
-            <name>
-                onmousemove
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-              moved away from this element.]]>
-            </description>
-            <name>
-                onmouseout
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-              moved onto this element.]]>
-            </description>
-            <name>
-                onmouseover
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when a pointer button is
-              released over this element.]]>
-            </description>
-            <name>
-                onmouseup
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Javascript code executed when the user agent removes
-              a document from a window or frame.]]>
-            </description>
-            <name>
-                onunload
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[CSS style(s) to be applied when this component is rendered.]]>
-            </description>
-            <name>
-                style
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Space-separated list of CSS style class(es) to be applied when
-              this element is rendered.  This value must be passed through
-              as the "class" attribute on generated markup.]]>
-            </description>
-            <name>
-                styleClass
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Advisory title information about markup elements generated
-              for this component.]]>
-            </description>
-            <name>
-                title
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.component.UIComponent
-            </type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span
-            class="changed_modified_2_0">Renders an HTML "input"
-            element.</p>
-            <p>Decode Behavior</p>
-            <ul>
-            <p>Obtain the <code>Map</code> from the
-            "requestParameterMap"
-            property of the <code>ExternalContext</code>. If the
-            value in the
-            <code>Map</code> for the value of the "clientId"
-            property of the
-            component is <code>null</code>, create a String by
-            concatenating
-            the value of the "clientId" property of the component with the
-            String ".x" (without the quotes). Create another String in the
-            same manner, but concatenate ".y" (without the quotes). If
-            <code>null</code> is the value in the <code>Map</code>
-            for both
-            Strings, return from <code>decode()</code>. If the value
-            in the
-            <code>Map</code> for the value of the "clientId"
-            property of the
-            component is not <code>null</code>, get the value of the
-            "type"
-            attribute, and convert it to lower case. If the result is equal
-            to the String "reset" (without the quotes), return from
-            <code>decode()</code>. Otherwise, create a
-            <code>javax.faces.event.ActionEvent</code> around the
-            component,
-            and pass it to the <code>queueEvent()</code> method of
-            the
-            component, which must be an instance of
-            <code>UICommand</code>.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render the clientId of the component as the value of the
-            "name"
-            attribute. Render the current value of the component as the value
-            of the "value" attribute. If "image" attribute is specified render
-            it as the value of the "src" attribute after passing it to the
-            <code>getResourceURL()</code> method of the
-            <code>ViewHandler</code> for this application, and
-            passing the
-            result through the <code>encodeResourceURL()</code>
-            method of the
-            <code>ExternalContext</code>. <span
-            class="changed_added_2_0">Note that calling
-            <code>getResourceURL()</code> will prefix the
-            context-root of the
-            current application if the value of the "src" attribute starts
-            with "/".</span> When handling the "image" attribute, the
-            value must not
-            be escaped. For example, <code>&</code> must not be
-            turned into
-            <code>&amp;amp;</code>. If the "styleClass"
-            attribute is
-            specified, render its value as the value of the "class" attribute.
-            If the user has specified an "onclick" attribute, append that
-            JavaScript to any existing JavaScript before rendering.</p>
-            <p class="changed_added_2_0">If the component being rendered
-            by
-            this renderer has any <code>UIParameter</code> children,
-            each one
-            of them must be rendered using the renderer for component-family:
-            "javax.faces.Input" and renderer-type: "javax.faces.Hidden". For
-            discussion, this is called the hiddenRenderer. A component with
-            component-type "javax.faces.Input" must be created for local use
-            in rendering each <code>UIParameter</code> child. The
-            "id"
-            property of the temporary component must be set to the "name" of
-            the <code>UIParameter</code>. The "value" property of
-            the
-            temporary component must be set to the "value" of the
-            <code>UIParameter</code>. For each <code>UIParameter</code>
-            child, the hiddenRenderer must have its
-            <code>encodeBegin()</code>, <code>encodeChildren()</code>,
-            and
-            <code>encodeEnd()</code> methods called, in order,
-            passing the
-            temporary component as the second argument.</p>
-            </ul>
-        </description>
-        <tag-name>commandButton</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlCommandButton</component-type>
-            <renderer-type>javax.faces.Button</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                MethodExpression representing the application action to invoke
-                when this component is activated by the user. The expression
-                must evaluate to a public method that takes no parameters, and
-                returns an Object (the toString() of which is called to derive
-                the logical outcome) which is passed to the NavigationHandler
-                for this application.
-            </description>
-            <name>action</name>
-            <required>false</required>
-            <method-signature>java.lang.Object action()</method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing an action listener method that
-                will be notified when this component is activated by the user.
-                The expression must evaluate to a public method that takes an
-                ActionEvent parameter, with a return type of void, <span
-                class="changed_added_2_0">or to a public method that takes no
-                arguments with a return type of void. In the latter case, the
-                method has no way of easily knowing where the event came from,
-                but this can be useful in cases where a notification is needed
-                that "some action happened".</span>
-                </p>
-            </description>
-            <name>actionListener</name>
-            <required>false</required>
-            <method-signature>void actionListener(javax.faces.event.ActionEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that, if this component is activated by the
-                user,
-                notifications should be delivered to interested listeners and
-                actions
-                immediately (that is, during Apply Request Values phase) rather
-                than
-                waiting until Invoke Application phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Alternate textual description of the
-                element rendered by this component.
-            </description>
-            <name>alt</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                Absolute or relative URL of the
-                image to be displayed for this
-                button. If specified, this
-                "input" element will be of type
-                "image". Otherwise, it will be
-                of the type specified by the
-                "type" property with a label
-                specified by the "value"
-                property. <span
-                class="changed_added_2_0">Note
-                that if the value of this
-                attribute starts with "/", the
-                rendered value for this
-                attribute will be prefixed with
-                the context-root for this
-                application.</span>
-                </p>
-            </description>
-            <name>image</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Type of button to create. Valid values are "submit", "button",
-                and "reset". If not specified, or not a valid value, the default
-                value is "submit".
-            </description>
-            <name>type</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span
-            class="changed_modified_2_0">Render</span> an HTML "a"
-            anchor
-            element that acts like a form submit button when
-            clicked.</p>
-            <p>General Behaviour</p>
-            <p>Both the encode and decode behavior require the ability to
-            get
-            the id/name for a hidden field, <span
-            class="changed_added_2_0">which may be rendered in markup or
-            which
-            may be programmatically added via client DOM manipulation</span>,
-            whose value is set by the JavaScript form submit. This name must
-            be constructed as follows:</p>
-            <ul>
-            <li><p>Get the clientId for the form of which this
-            component is a
-            child.</p></li>
-            <li><p>Append
-            <code>NamingContainer.SEPARATOR_CHAR</code>.</p></li>
-            <li><p>Append a constant string that is the same for all
-            command
-            link components in the tree.</p></li>
-            </ul>
-            <p>In the following text, this String is called
-            hiddenFieldName.</p>
-            <p>Decode Behavior</p>
-            <ul>
-            <p>Obtain the "clientId" property of the component. Obtain the
-            <code>Map</code> from the "requestParameterMap" property
-            of the
-            <code>ExternalContext</code>. Derive hiddenFieldName as
-            above.
-            Get the entry in the <code>Map</code> under the key that
-            is the
-            hiddenFieldName. If the there is no entry, or the entry is the
-            empty String, or the entry is not equal to the value of the
-            "clientId" property, return immediately. If there is an entry,
-            and its value is equal to the value of the "clientId" property,
-            create a new <code>javax.faces.event.ActionEvent</code>
-            instance
-            around the component and call <code>queueActionEvent()</code>
-            on
-            the component, passing the event.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>If the value of the <code>disabled</code>
-            attribute is
-            <code>true</code>, render a span element. Render all the
-            passthru
-            attributes and the <code>target</code> attribute as
-            pass-through
-            attributes on the span, even though the <code>target</code>
-            attribute will have no effect on a span. Render the current value
-            of the component as the content of the span. Return.</p>
-            <p>If the <code>disabled</code> attribute is not
-            present, or its
-            value is <code>false</code>, render an HTML <code>a</code>
-            element. Render "#" as the value of the "href" attribute. Render
-            the current value of the component as the link text if it is
-            specified. Render JavaScript that is functionally equivalent to
-            the following as the value of the "onclick" attribute:</p>
-            <p><code>document.forms['CLIENT_ID']['hiddenFieldName'].value='CLIENT_ID';
-            document.forms['CLIENT_ID']['PARAM1_NAME'].value='PARAM1_VALUE';
-            document.forms['CLIENT_ID']['PARAM2_NAME'].value='PARAM2_VALUE';
-            return false;</code></p>
-            <p>document.forms['CLIENT_ID'].submit()" where hiddenFieldName
-            is
-            as described above, CLIENT_ID is the clientId of the UICommand
-            component, PARAM*_NAME and PARAM*_VALUE are the names and values,
-            respectively, of any nested UIParameter children. The name and
-            the value must be URLEncoded. If an "onclick" attribute was
-            specified by the user, render this JavaScript in a function,
-            and render the user's JavaScript in a function. Render both
-            functions
-            in a choice function as follows:</p>
-            <p><code>var a=function(){#USER_FUNCTION#};
-            var b=function(){#JSF_FUNCTION#};
-            return (a()==false) ? false : b();</code></p>
-            <p>where #USER_FUNCTION# is the user's JavaScript and
-            #JSF_FUNCTION# is the JavaScript rendered by JSF. The choice
-            function should operate such that if the user's JavaScript returns
-            true, then the rendered JavaScript will also execute.</p>
-            <p>If the "styleClass" attribute is specified, render its
-            value as
-            the value of the "class" attribute. Render any non-UIParameter
-            output children as normal inside of the "a" element. These will
-            appear as the link text. Allow the form renderer to output a
-            single "input" element (for the entire page, regardless of how
-            many command link components are in the page) of "type" "hidden"
-            whose "name" is the value of hiddenFieldName, and which must not
-            have a "value" attribute. Multiple occurrences of command link
-            components in the tree should not cause multiple hiddenFieldName
-            hidden fields. Allow the form renderer to output an "input"
-            element of "type" "hidden" for each of the nested UIParameter
-            children, taking the name property (but not the value) from each
-            one in turn. If the "disabled" attribute is specified, do not
-            render the HTML "a" anchor element or its "href" attribute.
-            Instead, render a "span" element. If the "styleClass" attribute
-            is specified, render its value as the value of the "class"
-            attribute on the "span". Render any pass-through attributes on
-            the "span". The content of the span element comes from the value
-            of the component or its children as specified above.</p>
-            <p>If the user specified a <code>target</code>
-            attribute, its
-            value must be set using javascript since the <code>onclick</code>
-            handler will prevent the target attribute from being generated.
-            This must be accomplished using JavaScript that is equivalent to
-            the following.</p>
-            <p><code>document.forms['CLIENT_ID'].target='TARGET';</code></p>
-            <p>Where TARGET is the value of the target attribute on the
-            JSP
-            tag.</p>
-            </ul>
-        </description>
-        <tag-name>commandLink</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlCommandLink</component-type>
-            <renderer-type>javax.faces.Link</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                MethodExpression representing the application action to invoke
-                when this component is activated by the user. The expression
-                must evaluate to a public method that takes no parameters, and
-                returns an Object (the toString() of which is called to derive
-                the logical outcome) which is passed to the NavigationHandler
-                for this application.
-            </description>
-            <name>action</name>
-            <required>false</required>
-            <method-signature>java.lang.Object action()</method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing an action listener method that
-                will be notified when this component is activated by the user.
-                The expression must evaluate to a public method that takes an
-                ActionEvent parameter, with a return type of void, <span
-                class="changed_added_2_0">or to a public method that takes no
-                arguments with a return type of void. In the latter case, the
-                method has no way of easily knowing where the event came from,
-                but this can be useful in cases where a notification is needed
-                that "some action happened".</span>
-                </p>
-            </description>
-            <name>actionListener</name>
-            <required>false</required>
-            <method-signature>void actionListener(javax.faces.event.ActionEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that, if this component is activated by the
-                user,
-                notifications should be delivered to interested listeners and
-                actions
-                immediately (that is, during Apply Request Values phase) rather
-                than
-                waiting until Invoke Application phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The character encoding of the resource designated
-                by this hyperlink.
-            </description>
-            <name>charset</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The position and shape of the hot spot on the screen
-                (for use in client-side image maps).
-            </description>
-            <name>coords</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never
-                receive focus or be included in a subsequent
-                submit.
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The language code of the resource designated
-                by this hyperlink.
-            </description>
-            <name>hreflang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The relationship from the current document
-                to the anchor specified by this hyperlink.
-                The value of this attribute is a space-separated
-                list of link types.
-            </description>
-            <name>rel</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A reverse link from the anchor specified
-                by this hyperlink to the current document.
-                The value of this attribute is a space-separated
-                list of link types.
-            </description>
-            <name>rev</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The shape of the hot spot on the screen
-                (for use in client-side image maps). Valid
-                values are: default (entire region); rect
-                (rectangular region); circle (circular region);
-                and poly (polygonal region).
-            </description>
-            <name>shape</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of a frame where the resource
-                retrieved via this hyperlink is to
-                be displayed.
-            </description>
-            <name>target</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The content type of the resource designated
-                by this hyperlink.
-            </description>
-            <name>type</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Renders an HTML "table" element compliant with the HTML 401
-            specification. Render the "caption" facet, if present, inside a
-            "caption" element immediately below the "table" element. If the
-            "captionClass" attribute is specified, render its value as the
-            value of the "class" attribute on the "caption" element. If the
-            "captionStyle" attribute is specified, render its value as the
-            value of the "style" attribute on the "caption" element.</p>
-            <p>Please consult the javadoc for <code>UIData</code>
-            to
-            supplement this specification. If the "styleClass" attribute is
-            specified, render its value as the value of the "class" attribute
-            on the "table" element. Any pass-through attributes are also
-            rendered on the "table" element. </p>
-            <p>Column Groups</p>
-            <ul>
-            <p>If the <code>UIData</code> component has a
-            "colgroups" facet,
-            render its contents. Consistent with the rules of facets in
-            general, this facet must have only one child. In general, this
-            will be a <code>panel group</code> component that will
-            contain
-            <code>colgroup</code> and <code>col</code>
-            elements per the HTML
-            Table specification. Use of column grouping can improve
-            accessibility. This facet must be rendered before the table
-            header and footer.</p>
-            </ul>
-            <p>Rendering the header</p>
-            <ul>
-            <p>If the <code>UIData</code> component has a
-            "header" facet, or
-            any of the child <code>UIColumn</code> components has a
-            "header"
-            facet, render a "thead" element. If the <code>UIData</code>
-            component has a "header" facet, encode its contents inside of "tr"
-            and "th" elements, respectively. Output the value of the
-            "headerClass" attribute of the <code>UIData</code>
-            component, if
-            present, as the value of the "class" attribute on the "th".
-            Output the number of child <code>UIColumn</code>
-            components of the
-            <code>UIData</code> component as the value of the
-            "colspan"
-            attribute on the "th". Output "colgroup" as the value of the
-            "scope" attribute on the "th" element. </p>
-            <p>If any of the child <code>UIColumn</code>
-            components has a
-            "header" facet render a "tr" element. For each
-            <code>UIColumn</code> that actually has a "header"
-            facet, render
-            it inside of a "th" element. Columns that don't have a "header"
-            facet cause an empty "th" element to be rendered. Output the
-            value of the "headerClass" attribute of the <code>UIColumn</code>
-            component, if present, as the value of the "class" attribute on
-            the "th". If the "headerClass" attribute of the <code>UIColumn</code>
-            component is not present, output the value of the "headerClass"
-            attribute of the <code>UIData</code> component, if
-            present, as
-            the value of the "class" attribute on the "th". Output "col" as
-            the value of the "scope" attribute on the "th" element.
-            </p>
-            <p>Close out the "thead" element.</p>
-            </ul>
-            <p>Rendering the footer</p>
-            <ul>
-            <p>Follow the same process as for the header, except replace
-            "header" with "footer", "th" with "td", "thead" with "tfoot", and
-            "headerClass" with "footerClass". Do not render any "scope"
-            attribute for the footer.</p>
-            </ul>
-            <p>Rendering the table body</p>
-            <ul>
-            <p>Look at the value of the "bodyrows" attribute. If present,
-            this must be a comma separated list of integers. Each entry in
-            this list is the row index of the row before which a "tbody"
-            element should be rendered.</p>
-            <p>If there was no "bodyrows" attribute, or it was empty,
-            render a
-            "tbody" element. Keep track of the result of the "rows" property
-            on the <code>UIData</code> component. Keep track of the
-            number of
-            rows we have rendered so far. Iterate through the rows. Set the
-            "rowIndex" property of the <code>UIData</code> component
-            to be
-            correct as we iterate through the rows. Stop rendering children
-            and close out the "tbody" element if the "rowAvailable" property
-            of the <code>UIData</code> returned false. If the
-            current row
-            index is contained in the "bodyrows" attribute, check if a "tbody"
-            start element was rendered that needs to be closed, and if so,
-            close the "tbody" element. Then render a "tbody" element start.
-            Otherwise, do not render a "tbody" element.</p>
-            <p>Output a "tr" element. Output the value of the "rowClasses"
-            per the attribute description below. For each
-            <code>UIColumn</code> child, if the column component has
-            a
-            "rowHeader" attribute with a value of "true", output a "th"
-            element with a "scope" attribute with the value of "row".
-            Otherwise, if the column component has no "rowHeader" attribute,
-            or its value is false, output a "td" element. In either case
-            attach the value of the "columnClasses" attribute of the
-            <code>UIData</code> component per the attribute
-            description below.
-            Recursively encode each child of each <code>UIColumn</code>
-            child.
-            Close out the "td" or "th" element. When done with the row, close
-            out the "tr" element. When done with all the rows, close out the
-            "tbody" element.</p>
-            </ul>
-            <p>When done rendering all the rows, set the "rowIndex"
-            property of
-            the <code>UIData</code> to -1, and close out the "table"
-            element.</p>
-        </description>
-        <tag-name>dataTable</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlDataTable</component-type>
-            <renderer-type>javax.faces.Table</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Zero-relative row number of the first row to be displayed. If
-                this
-                property is set to zero, rendering will begin with the first row
-                of
-                the underlying data.
-            </description>
-            <name>first</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The number of rows to display, starting with the one identified
-                by the
-                "first" property. If this value is set to zero, all available
-                rows in
-                the underlying data model will be displayed.
-            </description>
-            <name>rows</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of a request-scope attribute under which the model data for
-                the
-                row selected by the current value of the "rowIndex" property
-                (i.e.
-                also the current value of the "rowData" property) will be
-                exposed.
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name or code of the background color for this table.
-            </description>
-            <name>bgcolor</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Comma separated list of row indices for which a new
-                "tbody" element should be started (and any
-                previously opened one should be ended).
-            </description>
-            <name>bodyrows</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Width (in pixels) of the border to be drawn
-                around this table.
-            </description>
-            <name>border</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any caption generated for this table.
-            </description>
-            <name>captionClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this caption is rendered.
-            </description>
-            <name>captionStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Definition of how much space the user agent should
-                leave between the border of each cell and its contents.
-            </description>
-            <name>cellpadding</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Definition of how much space the user agent should
-                leave between the left side of the table and the
-                leftmost column, the top of the table and the top of
-                the top side of the topmost row, and so on for the
-                right and bottom of the table. It also specifies
-                the amount of space to leave between cells.
-            </description>
-            <name>cellspacing</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Comma-delimited list of CSS style classes that will be applied
-                to the columns of this table. A space separated list of
-                classes may also be specified for any individual column. If
-                the number of elements in this list is less than the number of
-                actual column children of the UIData, no "class"
-                attribute is output for each column greater than the number of
-                elements in the list. If the number of elements in the list
-                is greater than the number of actual column children of the
-                UIData, the elements at the posisiton in the list
-                after the last column are ignored.
-            </description>
-            <name>columnClasses</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any footer generated for this table.
-            </description>
-            <name>footerClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code specifying which sides of the frame surrounding
-                this table will be visible. Valid values are:
-                none (no sides, default value); above (top side only);
-                below (bottom side only); hsides (top and bottom sides
-                only); vsides (right and left sides only); lhs (left
-                hand side only); rhs (right hand side only); box
-                (all four sides); and border (all four sides).
-            </description>
-            <name>frame</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any header generated for this table.
-            </description>
-            <name>headerClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Comma-delimited list of CSS style classes that will be applied
-                to the rows of this table. A space separated list of classes
-                may also be specified for any individual row. Thes styles are
-                applied, in turn, to each row in the table. For example, if
-                the list has two elements, the first style class in the list
-                is applied to the first row, the second to the second row, the
-                first to the third row, the second to the fourth row, etc. In
-                other words, we keep iterating through the list until we reach
-                the end, and then we start at the beginning again.
-            </description>
-            <name>rowClasses</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code specifying which rules will appear between cells
-                within this table. Valid values are: none (no rules,
-                default value); groups (between row groups); rows
-                (between rows only); cols (between columns only); and
-                all (between all rows and columns).
-            </description>
-            <name>rules</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Summary of this table's purpose and structure, for
-                user agents rendering to non-visual media such as
-                speech and Braille.
-            </description>
-            <name>summary</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Width of the entire table, for visual user agents.
-            </description>
-            <name>width</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <span class="changed_modified_2_0">
-            Renders</span> an HTML "form" element.
-            <p>Decode Behavior</p>
-            <ul>
-            <p>Obtain the <code>Map</code> from the
-            "requestParameterMap"
-            property of the <code>ExternalContext</code>. If the map
-            contains
-            an entry for the "clientId" of this <code>UIForm</code>
-            component,
-            call <code>setSubmitted(true)</code> on the form,
-            otherwise call
-            <code>setSubmitted(false)</code> on the form.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>The value of the "method" attribute must be "post". The
-            value
-            of the "action" attribute must be the result of passing the view
-            identifier of the current view to the <code>getActionURL()</code>
-            method of the <code>ViewHandler</code> for this
-            application, then
-            passing that String to the <code>encodeActionURL()</code>
-            method
-            on the <code>ExternalContext</code>. The value of the
-            acceptcharset
-            attribute must be rendered as the value of "accept-charset".
-            If the "styleClass" attribute is specified, render its value as the
-            value of the "class" attribute. Render a "name"
-            attribute with a value the same as the "id" attribute as described
-            in "<a
-            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on
-            Encoding</a>" regarding the "id" attribute for UIInput
-            components. <p class="changed_added_2_0">Obtain the <code>UIViewRoot
-            view identifier</code> and
-            use it to obtain an <code>action URL</code> by calling
-            <code>ViewHandler.getActionURL</code>.
-            Use the <code>action URL</code> to obtain an <code>encoded
-            action URL</code> by calling
-            <code>ExternalContext.encodeActionURL</code>. Obtain an
-            <code>encoded partial action URL</code> by calling
-            <code>ExternalContext.encodePartialActionURL</code>
-            using <code>action URL</code> as the argument.
-            Compare the result from <code>ExternalContext.encodePartialActionURL</code>
-            with the
-            value from <code>ExternalContext.encodeActionURL()</code>.
-            If they are different,
-            render a hidden field with the name <code>javax.faces.encodedURL</code>
-            and the value
-            of this hidden field as the value from <code>ExternalContext.encodePartialActionURL</code>.</p>
-            Call <code>ViewHandler.writeState()</code>
-            before the the close of the "form" element. Render all the
-            necessary hidden fields for all commandLink instances in the page
-            just before the close of the "form" element.
-            <div class="changed_modified_2_0">
-            Just before rendering the closing <code>&lt;/form&gt;</code>
-            element tag, render
-            any resources that have been targeted for this form:
-            <ul>
-            <li>Obtain a <code>UIViewRoot</code> instance.</li>
-            <li>Obtain a <code>List</code> of component
-            resources targeted for
-            this form with a call to <code>UIViewRoot.getComponentResources()</code>
-            with the <code>String "form"</code> as the argument.</li>
-            <li>Iterate over the returned <code>List</code> of
-            <code>UIComponent</code> instances
-            and call <code>encodeAll</code> on each <code>UIComponent</code>
-            instance.
-            </ul>
-            </div>
-            </p>
-            </ul>
-            </div>
-        </description>
-        <tag-name>form</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlForm</component-type>
-            <renderer-type>javax.faces.Form</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this form should prepend its id
-                to its descendent's id during the clientId generation process.
-                If this flag is not set, the default value is true.
-            </description>
-            <name>prependId</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                List of content types that a server processing this form
-                will handle correctly
-            </description>
-            <name>accept</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                List of character encodings for input data
-                that are accepted by the server processing
-                this form.
-            </description>
-            <name>acceptcharset</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Content type used to submit the form to the server. If not
-                specified, the default value is
-                "application/x-www-form-urlencoded".
-            </description>
-            <name>enctype</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this form is reset.
-            </description>
-            <name>onreset</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this form is submitted.
-            </description>
-            <name>onsubmit</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of a frame where the response
-                retrieved after this form submit is to
-                be displayed.
-            </description>
-            <name>target</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span
-            class="changed_modified_2_0">Renders</span> an HTML "img"
-            element. Render the clientId as the value of the "id"
-            attribute.</p>
-            <div class="changed_modified_2_0">
-            <p>Handling the Value</p>
-            <ul>
-            <p>If the "name" attribute is present, execute algorithm <a
-            href="../../../renderkitdocs/HTML_BASIC/javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource">Common
-            Algorithm for Obtaining A Resource to Render</a> to obtain a
-            <code>Resource</code> instance. Call
-            <code>Resource.getRequestPath()</code> and output the
-            result as the
-            value of the "src" attribute on the rendered markup.</p>
-            <p>Otherwise, if the "url" attribute is present, treat its
-            value as
-            if it was the value of the "value" attribute. Otherwise, if the
-            "value" attribute is present, render the value of the component as
-            the value of the "src" attribute, after passing it to the
-            <code>getResourceURL()</code> method of the <code>ViewHandler</code>
-            for this application, and passing the result through the
-            <code>encodeResourceURL()</code> method of the
-            <code>ExternalContext</code>.</p>
-            <p>When handling the "src" attribute,
-            the value must not be escaped. For example, <code>&</code>
-            must not
-            be turned into <code>&amp;amp;</code>. If the
-            "styleClass"
-            attribute is specified, render its value as the value of the "class"
-            attribute.</p>
-            </ul>
-            </div>
-        </description>
-        <tag-name>graphicImage</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlGraphicImage</component-type>
-            <renderer-type>javax.faces.Image</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Context-relative URL to retrieve the resource associated with
-                this component. This is an alias for the "value" property.
-            </description>
-            <name>url</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Alternate textual description of the
-                element rendered by this component.
-            </description>
-            <name>alt</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Override for the height of this image.
-            </description>
-            <name>height</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this image is to be used as a server side
-                image map. Such an image must be enclosed within a hyperlink
-                ("a"). A value of false causes no attribute to be rendered,
-                while a value of true causes the attribute to be rendered as
-                ismap="ismap".
-            </description>
-            <name>ismap</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <div class="changed_added_2_0"><p>The <em>libraryName</em>
-                for this resource.</p></div>
-            </description>
-            <name>library</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                URI to a long description of the image
-                represented by this element.
-            </description>
-            <name>longdesc</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <div class="changed_added_2_0"><p>The <em>resourceName</em>
-                for this resource.</p></div>
-            </description>
-            <name>name</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The name of a client side image map (an HTML "map"
-                element) for which this element provides the image.
-            </description>
-            <name>usemap</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Override for the width of this image.
-            </description>
-            <name>width</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Renders an HTML "input" element of type
-            "hidden".</p>
-            <p>Decode Behavior</p>
-            <ul>
-            <p>See the decode description for the <a
-            href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-            Text</a> renderer.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render the clientId of the component as the value of the
-            "name" attribute. Render the current value of the component as
-            the value of the "value" attribute.</p>
-            </ul>
-        </description>
-        <tag-name>inputHidden</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlInputHidden</component-type>
-            <renderer-type>javax.faces.Hidden</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Renders an HTML "input" element of "type" "password".</p>
-            <p>Decode Behavior</p>
-            <ul>
-            <p>See the decode description for the <a
-            href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-            Text</a> renderer.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>
-            Render the clientId of the component as the value of the "name"
-            attribute. Render the current value of the component as the value
-            of the "value" attribute, if and only if the "redisplay" component
-            attribute is the string "true". If the "styleClass" attribute is
-            specified, render its value as the value of the "class"
-            attribute.</p>
-            </ul>
-        </description>
-        <tag-name>inputSecret</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlInputSecret</component-type>
-            <renderer-type>javax.faces.Secret</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Alternate textual description of the
-                element rendered by this component.
-            </description>
-            <name>alt</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                If the value of this attribute is "off", render "off" as the
-                value
-                of the attribute. This indicates that the browser should
-                disable its autocomplete feature for this component. This is
-                useful for components that perform autocompletion and do not
-                want the browser interfering. If this attribute is not set or
-                the value
-                is "on", render nothing.
-            </description>
-            <name>autocomplete</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The maximum number of characters that may
-                be entered in this field.
-            </description>
-            <name>maxlength</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that any existing value
-                in this field should be rendered when the
-                form is created. Because this is a potential
-                security risk, password values are not
-                displayed by default.
-            </description>
-            <name>redisplay</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The number of characters used to determine
-                the width of this field.
-            </description>
-            <name>size</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Renders an HTML "input"
-            element of "type" "text".</p>
-            <p><a name="decode">Decode Behavior</a></p>
-            <ul>
-            <p>Obtain the <code>Map</code> from the
-            "requestParameterMap"
-            property of the <code>ExternalContext</code>. If the
-            <code>Map</code> contains an entry for the "clientId" of
-            the
-            component, pass the value of the entry to the
-            <code>setSubmittedValue()</code> method of the
-            component, which
-            must be an instance of <code>EditableValueHolder</code>.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p> Render the clientId of the component as
-            the value of the "name" attribute. Render the current value of
-            the component as the value of the "value" attribute. If the
-            "styleClass" attribute is specified, render its value as the value
-            of the "class" attribute.
-            </p>
-            </ul>
-        </description>
-        <tag-name>inputText</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlInputText</component-type>
-            <renderer-type>javax.faces.Text</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Alternate textual description of the
-                element rendered by this component.
-            </description>
-            <name>alt</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                If the value of this attribute is "off", render "off" as the
-                value
-                of the attribute. This indicates that the browser should
-                disable its autocomplete feature for this component. This is
-                useful for components that perform autocompletion and do not
-                want the browser interfering. If this attribute is not set or
-                the value
-                is "on", render nothing.
-            </description>
-            <name>autocomplete</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The maximum number of characters that may
-                be entered in this field.
-            </description>
-            <name>maxlength</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The number of characters used to determine
-                the width of this field.
-            </description>
-            <name>size</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Renders an HTML "textarea" element.</p>
-            <p>Decode Behavior</p>
-            <ul>
-            <p>See the encode description for the <a
-            href="javax.faces.Inputjavax.faces.Text.html#encode">Input
-            Text</a> renderer.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p> Render the
-            clientId as the value of the "name" attribute. Render the current
-            valu eof the component inside the "textarea"
-            element.</p> </ul>
-        </description>
-        <tag-name>inputTextarea</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlInputTextarea</component-type>
-            <renderer-type>javax.faces.Textarea</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The number of columns to be displayed.
-            </description>
-            <name>cols</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The number of rows to be displayed.
-            </description>
-            <name>rows</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Render a single message for a specific component.</p>
-            <p>Set-up for Rendering</p>
-            <ul>
-            <p>Obtain the "summary" and "detail" properties from
-            <code>UIMessage</code> component. If not present, keep
-            the
-            empty string as the value, respectively. Obtain the first
-            <code>FacesMessage</code> to render from the component,
-            using
-            the "for" property of the <code>UIMessage</code>. This
-            will be
-            the only message we render. Obtain the severity style for this
-            message. If the severity of the message is
-            <code>FacesMessage.SEVERITY_INFO</code>, the severity
-            style
-            comes from the value of the "infoStyle" attribute. If the
-            severity of the message is
-            <code>FacesMessage.SEVERITY_WARN</code>, the severity
-            style
-            comes from the value of the "warnStyle" attribute, and so on for
-            each of the severities, <code>INFO, WARN, ERROR</code>
-            and
-            <code>FATAL</code>. The same rules apply for obtaining
-            the
-            severity style class, but instead of "infoStyle, warnStyle", etc
-            use "infoClass, warnClass", etc. Obtain the "style",
-            "styleClass" and "layout" attributes from the
-            <code>UIMessage</code> component. If we have a "style"
-            attribute and a severity style attribute, use the severity style
-            attribute as the value of the "style" attribute. If we have no
-            "style" attribute, but do have a severity style, use the
-            severity style as the value of the "style" attribute. The same
-            precedence rules apply for the style class. Obtain the value of
-            the <code>dir</code> and <code>lang</code>
-            attributes.</p>
-            </ul>
-            <p>Rendering</p>
-            <ul>
-            <p>For the message renderer, we only render one row, for the
-            first
-            message. For the messages renderer, we render as many rows as we
-            have messages. If any of the "dir", "lang", "style" or
-            "styleClass" attributes has a non-null value (as determined
-            above), render a "span" element, outputting the value of the
-            "style" attribute as the the value of the "style" attribute, and
-            outputting the value of the "styleClass" attribute as the value of
-            the "class" attribute on the "span" element. Output the "dir" and
-            "lang" attributes as well, if they are present. If the
-            <code>UIMessage</code> has a "tooltip" attribute with
-            the value of
-            "true", and the <code>UIMessage</code> has "showSummary"
-            and
-            "showDetail" properties with the value "true", if we haven't
-            already written out the "span", output the "summary" as the value
-            of the "title" attribute on the "span". If we haven't already
-            written out a "title" attribute, and "showSummary" is true, output
-            the summary. If "showDetail" is true, output the detail. Close
-            out the span if necessary.</p>
-            </ul>
-        </description>
-        <tag-name>message</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlMessage</component-type>
-            <renderer-type>javax.faces.Message</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Client identifier of the component for which to display
-                messages.
-            </description>
-            <name>for</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the detail portion of displayed messages
-                should be included. Default value is "true".
-            </description>
-            <name>showDetail</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the summary portion of displayed
-                messages
-                should be included. Default value is "false".
-            </description>
-            <name>showSummary</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "ERROR".
-            </description>
-            <name>errorClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "ERROR".
-            </description>
-            <name>errorStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "FATAL".
-            </description>
-            <name>fatalClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "FATAL".
-            </description>
-            <name>fatalStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "INFO".
-            </description>
-            <name>infoClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "INFO".
-            </description>
-            <name>infoStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the detail portion of the
-                message should be displayed as a tooltip.
-            </description>
-            <name>tooltip</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "WARN".
-            </description>
-            <name>warnClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "WARN".
-            </description>
-            <name>warnStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span class="changed_modified_2_0">The</span>
-            same as for the
-            Message renderer, but output all the messages. <span
-            class="changed_added_2_0">If an "id" attribute has been
-            specified,
-            it must be rendered on the outermost markup corresponding to this
-            component.</span> If the value of the "layout" attribute is
-            "table", render nested "table", "tr", and "td" elements, in that
-            order. If the value of the "layout" attribute is "list", or the
-            "layout" attribute is not specified, render nested "ul", "li"
-            elements, in that order. Output the value of the "style" attribute
-            as the value of the "style" attribute, output the value of the
-            "styleClass" attribute as the value of the "class" attribute, and
-            output the dir and lang attributes. Output these values on the
-            "table" element or the "ul" element. Output the values of the
-            "errorStyle", "fatalStyle", "infoStyle", "warnStyle" attributes as
-            the value of the "style" attribute on either the "tr" element or
-            the "li" element. Output the values of the "errorClass",
-            "fatalClass", "infoClass", "warnClass" attributes as the value of
-            the "class" attribute on either the "tr" element or the "li"
-            element. The component is a <code>UIMessages</code>, and
-            there is
-            no "for" attribute. Therefore, use either <code>null</code>
-            to
-            obtain the messages from the <code>FacesContext</code>
-            or the empty
-            string if the components "globalOnly" property is
-            <code>true</code>. If the layout was "table" close out
-            the table
-            elements, otherwise, close out the list elements.</p>
-        </description>
-        <tag-name>messages</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlMessages</component-type>
-            <renderer-type>javax.faces.Messages</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Client identifier of the component for which to display
-                messages. This
-                attribute is mutually exclusive with globalOnly and take
-                precedence
-                if used.
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that only global messages (that is, messages not
-                associated with any client identifier) are to be displayed.
-                Default value is "false".
-            </description>
-            <name>globalOnly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the detail portion of displayed messages
-                should be included. Default value is "false".
-            </description>
-            <name>showDetail</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the summary portion of displayed
-                messages
-                should be included. Default value is "true".
-            </description>
-            <name>showSummary</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "ERROR".
-            </description>
-            <name>errorClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "ERROR".
-            </description>
-            <name>errorStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "FATAL".
-            </description>
-            <name>fatalClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "FATAL".
-            </description>
-            <name>fatalStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "INFO".
-            </description>
-            <name>infoClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "INFO".
-            </description>
-            <name>infoStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The type of layout markup to use when rendering
-                error messages. Valid values are "table" (an HTML
-                table) and "list" (an HTML list). If not specified,
-                the default value is "list".
-            </description>
-            <name>layout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether the detail portion of the
-                message should be displayed as a tooltip.
-            </description>
-            <name>tooltip</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to any message
-                with a severity class of "WARN".
-            </description>
-            <name>warnClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to apply to any message
-                with a severity class of "WARN".
-            </description>
-            <name>warnStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Render parameterized text. Obtain the
-            <code>style</code>, <code>styleClass</code>,
-            <code>dir</code>, and
-            <code>lang</code> attributees from this component. If
-            any are
-            present, render a "span" element. Output the
-            <code>styleClass</code> attribute (if present) as the
-            value of the
-            <code>class</code> attribute. Output the <code>style</code>
-            attribute as the value of the <code>style</code>
-            attribute.
-            Output the <code>dir</code> and <code>lang</code>
-            attributes as
-            pass through attributes. Accrue a list of the values of all child
-            <code>UIParameter</code> components of this component.
-            If there
-            are one or more accumulated parameter values, convert the list of
-            parameter values to an <code>Object</code> array, call
-            <code>MessageFormat.format()</code>, passing the
-            <code>value</code> of this component as the first
-            argument, and
-            the array of parameter values as the second argument, and render
-            the result. Otherwise, render the <code>value</code> of
-            this
-            component unmodified.</p>
-        </description>
-        <tag-name>outputFormat</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlOutputFormat</component-type>
-            <renderer-type>javax.faces.Format</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that characters that are sensitive
-                in HTML and XML markup must be escaped. This flag
-                is set to "true" by default.
-            </description>
-            <name>escape</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Renders an HTML "label" element. Render the current value
-            of the component as label text if it is specified. If a "for"
-            attribute is
-            specified, find the component specified by the value of the "for"
-            attribute, and render its client id as the value of the "for"
-            attribute.
-            If "styleClass" attribute is specified, render its value as the
-            value
-            of the "class" attribute.
-        </description>
-        <tag-name>outputLabel</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlOutputLabel</component-type>
-            <renderer-type>javax.faces.Label</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that characters that are sensitive
-                in HTML and XML markup must be escaped. If omitted, this
-                flag is assumed to be "true".
-            </description>
-            <name>escape</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Client identifier of the component for which this element
-                is a label.
-            </description>
-            <name>for</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Render an HTML "a" anchor element. The value of the
-            component is rendered as the value of the "href" attribute. Any
-            child UIParameter components are appended to the String to be
-            output as the value of the "href" attribute as query parameters
-            before rendering. The entire "href" string must be passed through
-            a call to the <code>encodeResourceURL()</code> method of
-            the
-            <code>ExternalContext</code>. The name of the
-            UIParameter goes on
-            the left hand side, and the value of the UIParameter on the right
-            hand side. The name and the value must be URLEncoded. Each
-            UIParameter instance is separeted by an ampersand, as dictated in
-            the URL spec. If the "styleClass" attribute is specified, render
-            its value as the value of the "class" attribute. If the "id"
-            attribute
-            is specified, follow the same steps as mentioned in the
-            "<a
-            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
-            Notes on Encoding</a>" regarding the "id" attribute for
-            UIInput components.
-            If the "disabled" attribute is specified, do not render the HTML "a"
-            anchor element or the "href" element. Instead, render a "span"
-            element.
-            If the "styleClass" attribute is specified, render its value as the
-            value
-            of the "class" attribute on the "span". Render any pass-through
-            attributes
-            on the "span".
-        </description>
-        <tag-name>outputLink</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlOutputLink</component-type>
-            <renderer-type>javax.faces.Link</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The character encoding of the resource designated
-                by this hyperlink.
-            </description>
-            <name>charset</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The position and shape of the hot spot on the screen
-                (for use in client-side image maps).
-            </description>
-            <name>coords</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never
-                receive focus or be included in a subsequent
-                submit.
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The language code of the resource designated
-                by this hyperlink.
-            </description>
-            <name>hreflang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The relationship from the current document
-                to the anchor specified by this hyperlink.
-                The value of this attribute is a space-separated
-                list of link types.
-            </description>
-            <name>rel</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                A reverse link from the anchor specified
-                by this hyperlink to the current document.
-                The value of this attribute is a space-separated
-                list of link types.
-            </description>
-            <name>rev</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The shape of the hot spot on the screen
-                (for use in client-side image maps). Valid
-                values are: default (entire region); rect
-                (rectangular region); circle (circular region);
-                and poly (polygonal region).
-            </description>
-            <name>shape</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of a frame where the resource
-                retrieved via this hyperlink is to
-                be displayed.
-            </description>
-            <name>target</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The content type of the resource designated
-                by this hyperlink.
-            </description>
-            <name>type</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            If the "styleClass", "style", "dir" or "lang"
-            attributes are present, render a "span" element. If the
-            "styleClass" attribute is present, render its value as the value
-            of the "class" attribute. If the "style" attribute is present,
-            pass it thru. If the "escape" attribute is not present, or it is
-            present and its value is "true" all angle brackets should be
-            converted to the ampersand xx semicolon syntax when rendering the
-            value of the "value" attribute as the value of the component. If
-            the "escape" attribute is present and is "false" the value of the
-            component should be rendered as text without escaping.
-        </description>
-        <tag-name>outputText</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlOutputText</component-type>
-            <renderer-type>javax.faces.Text</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that characters that are sensitive
-                in HTML and XML markup must be escaped. This flag
-                is set to "true" by default.
-            </description>
-            <name>escape</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <![CDATA[<div class="changed_added_2_0">
-            
-            <p>Render the markup for a <code><script></code> element that
-            renders the script <code>Resource</code> specified by the optional
-            <code>name</code> attribute and <code>library</code> attributes.</p>
-            
-            <p>The implementation of this renderer must have a <a target="_"
-            href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
-            annotation attached to it, at the class level, declaring <a target="_"
-            href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
-            as the value of the <code>systemEventClass</code> attribute.  The presence of
-            this annotation on a renderer implies the renderer implements <a
-            target="_"
-            href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
-            which this renderer must do.  The implementation of
-            <code>processEvent()</code> must extract the <code>UIComponent</code>
-            from the argument event and look for the presence of the key
-            "<code>target</code>" in the component's attribute <code>Map</code>.  If
-            and only if such a key is present, the implementation of
-            <code>processEvent()</code> must pass the component to <a target="_"
-            href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent)"><code>UIViewRoot.addComponentResource()</code></a>.</p>
-            
-            <p>Decode Behavior</p>
-            
-            <ul>
-            
-            <p>No action is required during decode for this renderer.</p>
-            
-            </ul>
-            
-            <p>Encode Behavior</p>
-            
-            <ul>
-            
-            <p><a name="ResourceCommonGetResource">Common Algorithm for Obtaining A Resource to Render</a></p>
-            
-            <ul>
-            
-            <p>This algorithm is used by all resource renderers to obtain
-            a <code>Resource</code> instance which is then rendered in a
-            specific way depending on what kind of renderer is doing the
-            encoding.</p>
-            
-            <ul>
-            
-            <li><p>Look in the component attribute <code>Map</code> for a
-            value under the key <em>name</em>.</p></li>
-            
-            <li><p>Look in the component attribute <code>Map</code> for a
-            value under the key <em>library</em>.  This attribute is
-            optional, therefore, <em>library</em> may be
-            <code>null</code>.</p></li>
-            
-            <li><p>Create the resource by calling
-            <code>Application.getResourceHandler.createResource(<em>name</em>,
-            <em>library</em>);</code>.</p></li>
-            
-            </p></li>
-            
-            </ul>
-            
-            </ul>
-            
-            <p><a name="ResourceCommonEncode">Common Encode Behavior</a></p>
-            
-            <ul>
-            
-            <p>This algorithm is used by all resource renderers to render the
-            resource.</p>
-            
-            <p><code>encodeBegin()</code> must take no action.</p>
-            
-            <p>Because this renderer returns <code>true</code> from
-            <code>getRendersChildren()</code>, the <code>encodeChildren()
-            method must take the following action.</code></p>
-            
-            <ul>
-            
-            <li><p>If there is no <em>name</em> attribute, and the
-            argument <code>component</code> has no children, and
-            <code>ProjectStage</code> is not
-            <code>ProjectStage.Production</code>, add a
-            <code>FacesMessage</code> for this component's clientId to the
-            <code>FacesContext</code> stating that if no name attribute is
-            present, and no body content is present either, then the user
-            should take action to correct this problem.  In this case,
-            <code>encodeChildren()</code> must take no further
-            action.</p></li>
-            
-            <li><p>If there is no <em>name</em> attribute and the argument
-            <code>component</code> <b>does</b> have children, the renderer
-            must ensure that those children are encoded as usual.</p></li>
-            
-            <li><p>If there <b>is</b> a <em>name</em> attribute and the
-            argument <code>component</code> <b>does</b> have children, the
-            renderer must log a descriptive localized message stating that
-            the child content will be ignored.  The resource referenced by
-            the <em>name</em> attribute will be rendered in
-            <code>encodeEnd()</code>.</p></li>
-            
-            <li><p>If there <b>is</b> a <em>name attribute</em> and the
-            argument <code>component</code> <b>does not</b> have children,
-            <code>encodeChildren()</code> must take no action.</p></li>
-            
-            </ul>
-            
-            <p><code>encodeEnd()</code> must take specific action based on
-            the specific kind of resource being rendered.</p>
-            
-            </ul>
-            
-            <p>Use the algorithm <em>Common Encode Behavior</em> for
-            <code>encodeBegin()</code>, <code>encodeChildren()</code> and
-            <code>getRendersChildren()</code>.</p>
-            
-            <p>For <code>encodeEnd()</code>, use the algorithm <em>Common
-            Algorithm for Obtaining A Resource to Render</em> above to
-            obtain a reference to the <code>Resource</code> to be
-            encoded.</p>
-            
-            <p>If this is NOT the first time this <code>Resource</code> has
-            been referenced on this request take no action and return.</p>
-            
-            <p>Render a script element.  Use the result from calling
-            <code>resource.getRequestPath()</code> as the value of the "src"
-            attribue and the result from calling
-            <code>resource.getContentType()</code> as the value of the "type"
-            attribute.</p>
-            
-            </p>
-            
-            
-            
-            </ul>
-            
-            
-            
-            </div>]]>
-        </description>
-        <tag-name>
-            outputScript
-        </tag-name>
-        <component>
-            <component-type>javax.faces.Output</component-type>
-            <renderer-type>javax.faces.resource.Script</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                <![CDATA[Converter instance registered with this component.]]>
-            </description>
-            <name>
-                converter
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.convert.Converter
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The component identifier for this component.  This value must be
-                unique within the closest parent component that is a naming
-                container.]]>
-            </description>
-            <name>
-                id
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.  The default value for this property is true.]]>
-            </description>
-            <name>
-                rendered
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                boolean
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The current value of this component.]]>
-            </description>
-            <name>
-                value
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.Object
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]>
-            </description>
-            <name>
-                library
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]>
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<div class="changed_added_2_0"><p>The <em>target</em> area for which this resource will be rendered.  For example, <em>target="head"</em> would cause the resource to be rendered within the <em>head</em> element.</p></div>]]>
-            </description>
-            <name>
-                target
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.component.UIComponent
-            </type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <![CDATA[<div class="changed_added_2_0">
-            
-            <p>Render the markup for a <code><link></code> element that
-            renders the style <code>Resource</code> specified by the optional
-            <code>name</code> and <code>library</code> attributes.</p>
-            
-            <p>Decode Behavior</p>
-            
-            <ul>
-            
-            <p>No action is required during decode for this renderer.</p>
-            
-            </ul>
-            
-            <p>Encode Behavior</p>
-            
-            <ul>
-            
-            <p>Use the algorithm <em>Common Encode Behavior</em> for
-            <code>encodeBegin()</code>, <code>encodeChildren()</code> and
-            <code>getRendersChildren()</code>.</p>
-            
-            <p>For <code>encodeEnd()</code>, use the algorithm <a
-            href="javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource">Common
-            Algorithm for Obtaining A Resource to Render</a> to obtain a
-            reference to the <code>Resource</code> to be encoded.</p>
-            
-            <p>Output a <code><link></code> element.  Use the result from
-            calling <code>resource.getRequestPath()</code> as the value of the
-            "href" attribute, the result from calling
-            <code>resource.getContentType()</code> as the value of the "type"
-            attribute, the literal string "stylesheet" as the value of the "rel"
-            attribute, and the literal string "screen" as the value of the "media"
-            attribute.</p>
-            
-            <p>The implementation of this renderer must have a <a target="_"
-            href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
-            annotation attached to it, at the class level, declaring <a target="_"
-            href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
-            as the value of the <code>systemEventClass</code> attribute.  The presence of
-            this annotation on a renderer implies the renderer implements <a target="_"
-            href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
-            which this renderer must do.  The implementation of
-            <code>processEvent()</code> must extract the <code>UIComponent</code>
-            from the argument event pass it to <a target="_"
-            href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent,%20java.lang.String)"><code>UIViewRoot.addComponentResource()</code></a>, specifying
-            the literal string "<code>head</code>" as the last argument.</p>
-            
-            <p>The stylsheet renderer must ensure that any stylesheets are included in the <head> of the document.
-            </p>
-            
-            </div>]]>
-        </description>
-        <tag-name>
-            outputStylesheet
-        </tag-name>
-        <component>
-            <component-type>javax.faces.Output</component-type>
-            <renderer-type>javax.faces.resource.Stylesheet</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                <![CDATA[Converter instance registered with this component.]]>
-            </description>
-            <name>
-                converter
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.convert.Converter
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The component identifier for this component.  This value must be
-                unique within the closest parent component that is a naming
-                container.]]>
-            </description>
-            <name>
-                id
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.  The default value for this property is true.]]>
-            </description>
-            <name>
-                rendered
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                boolean
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The current value of this component.]]>
-            </description>
-            <name>
-                value
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.Object
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]>
-            </description>
-            <name>
-                library
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]>
-            </description>
-            <name>
-                name
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <type>
-                javax.faces.component.UIComponent
-            </type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Renders an HTML "table" element, conforming to the
-            rules in the HTML 401 specification. Render the "caption" facet,
-            if present, inside a "caption" element immediately below the "table"
-            element.
-            If the "captionClass" attribute is specified, render its value as
-            the value
-            of the "class" attribute on the "caption" element. If the
-            "captionStyle" attribute
-            is specified, render its value as the value of the "style" attribute
-            on the "caption" element. If the "styleClass" attribute is
-            specified, render
-            its value as the value of the "class" attribute. Render the
-            pass-through
-            attributes in the table below. Render the "header" facet, if
-            present, inside of
-            "thead", "tr", and "th" elements, nested in that order. If the
-            "headerClass" attribute is specifed, render its value as the value
-            of the "class" attribute on the "th" element. Render "colgroup"
-            as the value of the "scope" attribute. Render the value of the
-            "columns" attribute as the value of the "colspan" attribute on the
-            "th" element. Render the "footer" facet if present, using similar
-            logic to the rendering of the "header", but replacing "thead" with
-            "tfoot", "th" with "td", and "headerClass" with "footerClass".
-            Render the children of the <code>UIPanel</code>
-            component inside
-            of a "tbody" element. Render the children based on the value of
-            the "columns" attribute, creating a new row each time a "columns"
-            worth of children have been rendered. For the start of each row,
-            render a "tr" element. Output the value of the "rowClasses" per
-            the attribute description below. For each child, output a "td"
-            element, attaching the value of the "columnClasses" attribute per
-            the attribute description below. Recursively encode each child.
-            Close out the "td" element. When done with the row, close out the
-            "tr" element. If a child has "rendered==false" it is not rendered,
-            and the column counter must not be incremented.
-        </description>
-        <tag-name>panelGrid</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlPanelGrid</component-type>
-            <renderer-type>javax.faces.Grid</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name or code of the background color for this table.
-            </description>
-            <name>bgcolor</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Comma separated list of row indices for which a new
-                "tbody" element should be started (and any
-                previously opened one should be ended).
-            </description>
-            <name>bodyrows</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Width (in pixels) of the border to be drawn
-                around this table.
-            </description>
-            <name>border</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any caption generated for this table.
-            </description>
-            <name>captionClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this caption is rendered.
-            </description>
-            <name>captionStyle</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Definition of how much space the user agent should
-                leave between the border of each cell and its contents.
-            </description>
-            <name>cellpadding</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Definition of how much space the user agent should
-                leave between the left side of the table and the
-                leftmost column, the top of the table and the top of
-                the top side of the topmost row, and so on for the
-                right and bottom of the table. It also specifies
-                the amount of space to leave between cells.
-            </description>
-            <name>cellspacing</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Comma-delimited list of CSS style classes that will be applied
-                to the columns of this table. A space separated list of
-                classes may also be specified for any individual column. If
-                the number of elements in this list is less than the number of
-                actual column children of the UIData, no "class"
-                attribute is output for each column greater than the number of
-                elements in the list. If the number of elements in the list
-                is greater than the number of actual column children of the
-                UIData, the elements at the posisiton in the list
-                after the last column are ignored.
-            </description>
-            <name>columnClasses</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The number of columns to render before
-                starting a new row.
-            </description>
-            <name>columns</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any footer generated for this table.
-            </description>
-            <name>footerClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code specifying which sides of the frame surrounding
-                this table will be visible. Valid values are:
-                none (no sides, default value); above (top side only);
-                below (bottom side only); hsides (top and bottom sides
-                only); vsides (right and left sides only); lhs (left
-                hand side only); rhs (right hand side only); box
-                (all four sides); and border (all four sides).
-            </description>
-            <name>frame</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any header generated for this table.
-            </description>
-            <name>headerClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Comma-delimited list of CSS style classes that will be applied
-                to the rows of this table. A space separated list of classes
-                may also be specified for any individual row. Thes styles are
-                applied, in turn, to each row in the table. For example, if
-                the list has two elements, the first style class in the list
-                is applied to the first row, the second to the second row, the
-                first to the third row, the second to the fourth row, etc. In
-                other words, we keep iterating through the list until we reach
-                the end, and then we start at the beginning again.
-            </description>
-            <name>rowClasses</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code specifying which rules will appear between cells
-                within this table. Valid values are: none (no rules,
-                default value); groups (between row groups); rows
-                (between rows only); cols (between columns only); and
-                all (between all rows and columns).
-            </description>
-            <name>rules</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Summary of this table's purpose and structure, for
-                user agents rendering to non-visual media such as
-                speech and Braille.
-            </description>
-            <name>summary</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Width of the entire table, for visual user agents.
-            </description>
-            <name>width</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Intended for use in situations when only one
-            UIComponent child can be nested, such as in the case of facets.
-            If the "style" or "styleClass" attributes are present, and the
-            "layout"
-            attribute is present with a value of "block", render a "div"
-            element,
-            outputting the value of the "style" attribute as the value of the
-            "style" attribute and the value of the "styleClass" attribute as the
-            value of the "class" attribute. Otherwise, if the "layout" attribute
-            is not present, or the "layout" attribute contains a value other
-            than
-            "block", render a "span" element, outputting the value of the
-            "style" attribute as the value of the "style" attribute, and the
-            value
-            of the "styleClass" attribute as the value of the "class"
-            attribute.
-        </description>
-        <tag-name>panelGroup</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlPanelGroup</component-type>
-            <renderer-type>javax.faces.Group</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The type of layout markup to use when rendering this group.
-                If the value is "block" the renderer must produce an HTML
-                "div" element. Otherwise HTML "span" element must
-                be produced.
-            </description>
-            <name>layout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" property on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Renders an HTML "input" element of type "checkbox".</p>
-            <p>Decode Behavior</p>
-            <ul>
-            <p>Obtain the <code>Map</code> from the
-            "requestParameterMap"
-            property of the <code>ExternalContext</code>. If there
-            is no
-            entry in the <code>Map</code> for the "clientId" of this
-            component, pass "false" to the <code>setSubmittedValue()</code>
-            method of the component, which must be an instance of
-            <code>EditableValueHolder</code>. If there is an entry,
-            and its
-            value is equal, ignoring case and without quotes, to any of the
-            Strings: "on", "yes" or "true" pass true to the
-            <code>setSubmittedValue()</code> method of the
-            component.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>
-            Render the clientId of the component as the value of the "name"
-            attribute. If the current value of the component is "true",
-            output the "checked" attribute (must be rendered as
-            checked="checked").
-            If the "styleClass" attribute is specified, render its value as the
-            value
-            of the "class" attribute.</p> </ul>
-        </description>
-        <tag-name>selectBooleanCheckbox</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlSelectBooleanCheckbox
-            </component-type>
-            <renderer-type>javax.faces.Checkbox</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span
-            class="changed_modified_2_0">Render</span> an HTML checkbox
-            list.</p>
-            <p><a name="decode">Decode Behavior</a></p>
-            <ul>
-            <p>See the <a
-            href="SelectManyListbox.html">"Decode
-            Behavior for UISelectMany Components"</a> section.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render a "table" element. If the "styleClass" is specified,
-            render the value of the "styleClass" attribute as the value of the
-            "class" attribute on the "table" element. If the "style", or
-            "border" attributes are specified, pass them thru <span
-            class="changed_added_2_0">and render their values as the "style"
-            and "border" attributes on the "table", respectively.</span>
-            If
-            the "layout" attribute is specified, and its value is
-            "pageDirection", render the children elements vertically,
-            otherwise horizontally, in the table. If any of the children are
-            an instance of SelectItemGroup, render them as a nested table.
-            Each of the children are ultimately rendererd as follows. Render
-            an "input" element of "type" "checkbox" for each child component.
-            Render the "name" attribute on the "input" element with the value
-            of the <code>clientId</code> of the component. Render an
-            "id"
-            attribute on the "input" element. Each "id" value must be unique.
-            If the current SelectItem.isDisabled() returns true, render
-            "disabled" as the value of the "disabled" attribute. Close out
-            the "input" element. Render a "label" element. Render the "for"
-            attribute of the "label" element whose value is the corresponding
-            "input" element's "id" value. Render any "style" as the "class"
-            attribute on the "label" element. <span
-            class="changed_added_2_0">If the current checkbox would be
-            rendered as being checked, and there is a "selectedClass"
-            attribute, append a space, followed by the value of the
-            "selectedClass" attribute to any existing "class" attribute value
-            on the label element. Otherwise, render the value of the
-            "selectedClass" attribute as the value of the "class" attribute on
-            the label element. If the current checkbox would be rendered as
-            being not checked, and there is a "unselectedClass" attribute,
-            append a space, followed by the value of the "unselectedClass"
-            attribute to any existing "class" attribute value on the label
-            element. Otherwise, render the value of the "unselectedClass"
-            attribute as the value of the "class" attribute on the label
-            element.</span> Close out the starting "label" element and
-            render
-            the label value from SelectItem.getLabel(). Close out the "label"
-            element. As an exception to the general rules about how to handle
-            the "id" attribute, render it as an attribute on the outer "table"
-            element, the value of which is the <code>clientId</code>
-            of the
-            component per the rules at the beginning of this specification.
-            The value of the current SelectItem is rendered as the value of
-            the "value" attribute. Coerce the value of the currently rendered
-            child to the type of the parent UISelectMany value following the
-            Expression Language coercion rules, before comparing the values.
-            If the value of the enclosing UISelectMany matches the current
-            value, render "checked" as the value of the "checked" attribute.
-            See the <a
-            href="SelectManyListbox.html">"Rendering
-            the option elements" </a> specification for
-            <code>ListboxRenderer</code> for more detail on how to
-            render the
-            "option" elements in this renderer.</p>
-            </ul>
-        </description>
-        <tag-name>selectManyCheckbox</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlSelectManyCheckbox</component-type>
-            <renderer-type>javax.faces.Checkbox</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Width (in pixels) of the border to be drawn
-                around the table containing the options list.
-            </description>
-            <name>border</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0"> Optional
-                attribute that is a literal string that is the fully qualified
-                class name of a concrete class that implements
-                <code>java.util.Collection</code>, or an EL
-                expression that
-                evaluates to either 1. such a String, or 2. the
-                <code>Class</code> object itself. </p>
-            </description>
-            <name>collectionType</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on disabled options.
-            </description>
-            <name>disabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on enabled options.
-            </description>
-            <name>enabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0">
-                Flag indicating that, if this component is activated by the
-                user,
-                The "no selection option", if any, must be hidden.</p>
-            </description>
-            <name>hideNoSelectionOption</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Orientation of the options list to be created.
-                Valid values are "pageDirection" (list is laid
-                out vertically), or "lineDirection" (list is
-                laid out horizontally). If not specified, the
-                default value is "lineDirection".
-            </description>
-            <name>layout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on selected options.
-            </description>
-            <name>selectedClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on unselected options.
-            </description>
-            <name>unselectedClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span
-            class="changed_modified_2_0">Render</span> an HTML option
-            list.</p>
-            <p>Decode Behavior</p>
-            <p>This section documents the decode behavior for all
-            renderers
-            that handle <code>UISelectMany</code> or <code>UISelectOne</code>
-            components.</p>
-            <ul>
-            <p><a name="decodeMany">Decode Behavior for
-            <code>UISelectMany</code> components</a></p>
-            <ul>
-            <p>Obtain the <code>Map</code> from the
-            "requestParameterValuesMap" property of the
-            <code>ExternalContext</code>. If the <code>Map</code>
-            contains
-            an entry for the "clientId" of the component, pass the value of
-            the entry, cast to a <code>String []</code>, to the
-            <code>setSubmittedValue()</code> method of the
-            component, which
-            must be an <code>EditableValueHolder</code>. If the
-            <code>Map</code> does not contain an entry, create an
-            empty
-            <code>String</code> array and call
-            <code>setSubmittedValue()</code> with it.</p>
-            <p class="changed_modified_2_0">Please check the javadoc for
-            <a
-            href="../../javadocs/javax/faces/component/UISelectMany.html#getConvertedvalue">UISelectMany.getConvertedValue()</a>
-            for additional requirements for renderers that render this kind
-            of component.</p>
-            </ul>
-            <p><a name="decodeOne">Decode Behavior for
-            <code>UISelectOne</code> components</a></p>
-            <ul>
-            <p>Obtain the <code>Map</code> from the
-            "requestParameterMap"
-            property of the <code>ExternalContext</code>. If there
-            is a
-            <code>Map</code> entry for the "clientId" property of
-            the
-            component, pass it to the <code>setSubmittedValue()</code>
-            method
-            of the component. <span class="changed_added_2_0">If the
-            <code>Map</code> does not contain an entry, call
-            <code>setSubmittedValue()</code> passing an empty
-            <code>String</code> as the argument.</span> </p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render an HTML "select" element. Render the clientId of
-            the component as the value of the "name" attribute. If the
-            "styleClass"
-            attribute is specified, render its value as the value of the "class"
-            attribute on the "select" element. If the component is a
-            <code>UISelectMany</code> instance, render "multiple" as
-            the value of the
-            "multiple" attribute. If the "size" attribute is specified, render
-            its
-            value as the value of the "size" attribute. Otherwise use the number
-            of
-            items as the value of the "size" attribute.</p>
-            </ul>
-            <p><a name="option">Rendering the "option" elements</a></p>
-            <ul>
-            <p>The only valid children of this component are
-            <code>UISelectItem</code> or <code>UISelectItems</code>
-            instances. Iterate over the children of this component, and accrue
-            a list of <code>javax.faces.model.SelectItem</code>
-            instances.
-            <span class="changed_added_2_0">If the current child is a
-            <code>SelectItem</code> whose <code>noSelctionProperty</code>
-            is
-            <code>true</code>, <b>and</b> the <code>UISelectOne</code>
-            or
-            <code>UISelectMany</code> parent of this option has one
-            or more
-            selected values that <b>are not</b> the "no selection"
-            <code>SelectItem</code>, <b>and</b> the
-            component has a
-            "hideNoSelectionLabel" attribute whose value is <code>true</code>,
-            then the current option, which is the "no selection" option, must
-            not be rendered.</span> If the current child is a
-            <code>UISelectItem</code> create a <code>SelectItem</code>instance
-            from its <code>itemValue, itemLabel</code>, <code
-            class="changed_added_2_0">itemEscaped</code>, and
-            <code>itemDescription</code> properties, add it to the
-            list. If
-            the current child is a <code>UISelectItems</code>
-            instance, call
-            its <code>getValue()</code> method. If the result is a
-            <code>SelectItem</code> bean, add it to the list. If the
-            result
-            is an array of <code>SelectItem</code> beans, add each
-            one to the
-            list. If the result is a <code>Collection</code> of
-            <code>SelectItem</code> beans, add each one to the list.
-            If the
-            result is a <code>Map</code>, create a <code>SelectItem</code>
-            bean for each entry in the <code>Map</code> using the
-            key as the
-            label, the value as the value, and <code>null</code> as
-            the
-            description.</p>
-            <p>Iterate over the list of <code>SelectItem</code>
-            beans. If the
-            current element is a <code>SelectItemGroup</code>,
-            render an
-            "optgroup" element with a "label" attribute, the value of which is
-            the "label" property from the current element, then call
-            <code>getSelectItems()</code> and render each element as
-            below.
-            If the current element is not a <code>SelectItemGroup</code>,
-            render an "option" element. Follow the conversion rules in the
-            spec to obtain a renderable <code>String</code> from the
-            "value"
-            property of the current element, render that as the value of the
-            "value" atribute. Now it is time to see if the current element is
-            the selected value. Call its <code>getSubmittedValue()</code>
-            method, casting the result to an <code>Object []</code>,
-            otherwise
-            the component must be a <code>UISelectOne</code>
-            instance, call
-            its <code>getSubmittedValue()</code> method and create
-            an
-            <code>Object []</code> around the result. Determine the
-            type of
-            the resultant array, if the resultant array is non-null, otherwise
-            the type is <code>String</code>. Coerce the current item
-            value to
-            this type following the Expression Language coercion rules. If
-            the resultant array is non-null, we look in the array for a value
-            that, when we pass the renderable value to its
-            <code>equals()</code> method, it returns <code>true</code>,
-            meaning the current element is selected. If the resultant array
-            is <code>null</code>, if the component is a
-            <code>UISelectMany</code>, call its <code>getValue()</code>
-            method. If the result is a <code>List</code> obtain the
-            values in
-            the list as an array. Otherwise, the component must be a
-            <code>UISelectOne</code> instance. Call its
-            <code>getValue()</code> method, which must be an Object
-            array.
-            Look for an element in the resultant array that, 1. when we pass
-            the renderable value to its <code>equals()</code>
-            method, it
-            returns <code>true</code> , or 2. if the renderable
-            value is null,
-            and there is a null element in the array, also conclude that the
-            current element is selected. Otherwise the current element is not
-            selected. Now, if the current value is selected, write out an
-            HTML boolean property "selected". If the current
-            SelectItem.isDisabled() returns true, render "disabled" as the
-            value of the "disabled" attribute. <span
-            class="changed_added_2_0">If the value of the <code>escape</code>
-            property is true, use the <code>writeText()</code>
-            method of
-            <code>ResponseWriter</code> to write out the value of
-            the
-            <code>label</code> property. Otherwise, use the
-            <code>write()</code> method of the <code>ResponseWriter</code>
-            to
-            do so.</span></p>
-            </ul>
-            </ul>
-        </description>
-        <tag-name>selectManyListbox</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlSelectManyListbox</component-type>
-            <renderer-type>javax.faces.Listbox</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0"> Optional
-                attribute that is a literal string that is the fully qualified
-                class name of a concrete class that implements
-                <code>java.util.Collection</code>, or an EL
-                expression that
-                evaluates to either 1. such a String, or 2. the
-                <code>Class</code> object itself. </p>
-            </description>
-            <name>collectionType</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on disabled options.
-            </description>
-            <name>disabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on enabled options.
-            </description>
-            <name>enabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0">
-                Flag indicating that, if this component is activated by the
-                user,
-                The "no selection option", if any, must be hidden.</p>
-            </description>
-            <name>hideNoSelectionOption</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Number of available options to be shown at all times.
-                If not specified, all available options are shown.
-            </description>
-            <name>size</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span
-            class="changed_modified_2_0">Render</span> an HTML option
-            list.</p>
-            <p><a name="decode">Decode Behavior</a></p>
-            <ul>
-            <p>See the <a
-            href="SelectManyListbox.html">"Decode
-            Behavior for UISelectMany Components"</a> section.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render an HTML "select" element. Render the clientId of
-            the component as the value of the "name" attribute. If the
-            "styleClass"
-            attribute is specified, render its value as the value of the "class"
-            attribute on the "select" element. If the component
-            to be rendered is a UISelectMany, render "multiple" as the value of
-            the "multiple" attribute. Render "1" as the value of the "size"
-            attribute. See the <a
-            href="SelectManyListbox.html">"Rendering the option
-            elements" </a> specification for <code>ListboxRenderer</code>
-            for
-            more detail on how to render the "option" elements in this
-            renderer.</p>
-            </ul>
-        </description>
-        <tag-name>selectManyMenu</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlSelectManyMenu</component-type>
-            <renderer-type>javax.faces.Menu</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0"> Optional
-                attribute that is a literal string that is the fully qualified
-                class name of a concrete class that implements
-                <code>java.util.Collection</code>, or an EL
-                expression that
-                evaluates to either 1. such a String, or 2. the
-                <code>Class</code> object itself. </p>
-            </description>
-            <name>collectionType</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on disabled options.
-            </description>
-            <name>disabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on enabled options.
-            </description>
-            <name>enabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0">
-                Flag indicating that, if this component is activated by the
-                user,
-                The "no selection option", if any, must be hidden.</p>
-            </description>
-            <name>hideNoSelectionOption</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Render an HTML option list.</p>
-            <p><a name="decode">Decode Behavior</a></p>
-            <ul>
-            <p>See the <a
-            href="SelectManyListbox.html">"Decode
-            Behavior for UISelectOne Components"</a> section.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render an HTML "select" element. Render the clientId of
-            the component as the value of the "name" attribute. If the
-            "styleClass"
-            attribute is specified, render its value as the value of the "class"
-            attribute on the "select" element. If the component
-            to be rendered is a UISelectMany, render "multiple" as the value of
-            the "multiple" attribute. If the "size" attribute is specified,
-            render its value as the value of the "size" attribute. Otherwise
-            use the number of items as the value of the "size" attribute. See
-            the <a href="SelectManyListbox.html">"Rendering the option
-            elements" </a> specification for <code>ListboxRenderer</code>
-            for
-            more detail on how to render the "option" elements in this
-            renderer.</p>
-            </ul>
-        </description>
-        <tag-name>selectOneListbox</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlSelectOneListbox</component-type>
-            <renderer-type>javax.faces.Listbox</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on disabled options.
-            </description>
-            <name>disabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on enabled options.
-            </description>
-            <name>enabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0">
-                Flag indicating that, if this component is activated by the
-                user,
-                The "no selection option", if any, must be hidden.</p>
-            </description>
-            <name>hideNoSelectionOption</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Number of available options to be shown at all times.
-                If not specified, all available options are shown.
-            </description>
-            <name>size</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Render an HTML option list.</p>
-            <p><a name="decode">Decode Behavior</a></p>
-            <ul>
-            <p>See the <a
-            href="SelectManyListbox.html">"Decode
-            Behavior for UISelectOne Components"</a> section.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render an HTML "select" element. Render the clientId of the
-            component as the value of the "name" attribute. If the
-            "styleClass" attribute is specified, render its value as the value
-            of the "class" attribute on the "select" element. If the component
-            to be rendered is a UISelectMany, render "true" as the value of
-            the "multiple" attribute. Use the number of items as the value of
-            the "size" attribute. See the <a
-            href="SelectManyListbox.html">"Rendering
-            the option elements" </a> specification for
-            <code>ListboxRenderer</code> for more detail on how to
-            render the
-            "option" elements in this renderer.</p>
-            </ul>
-        </description>
-        <tag-name>selectOneMenu</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlSelectOneMenu</component-type>
-            <renderer-type>javax.faces.Menu</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on disabled options.
-            </description>
-            <name>disabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on enabled options.
-            </description>
-            <name>enabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0">
-                Flag indicating that, if this component is activated by the
-                user,
-                The "no selection option", if any, must be hidden.</p>
-            </description>
-            <name>hideNoSelectionOption</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p><span
-            class="changed_modified_2_0">Render</span> a set of html
-            "input" elements of type "radio".</p>
-            <p><a name="decode">Decode Behavior</a></p>
-            <ul>
-            <p>See the <a
-            href="SelectManyListbox.html">"Decode
-            Behavior for UISelectOne Components"</a> section.</p>
-            </ul>
-            <p>Encode Behavior</p>
-            <ul>
-            <p>Render a "table" element. If the "styleClass" is specified,
-            render the value of the "styleClass" attribute as the value of the
-            "class" attribute on the "table" element. If the "style", "border"
-            attributes are specified, pass them thru <span
-            class="changed_added_2_0">and render their values as the "style"
-            and "border" attributes on the "table", respectively.</span>.
-            If
-            the "layout" attribute is specified, and its value is
-            "pageDirection", render the children elements vertically,
-            otherwise horizontally, in the table. If any of the children are
-            an instance of SelectItemGroup, render them as a nested table.
-            Each of the children are ultimately rendered as follows. Render
-            an "input" element of "type" "radio" for each child component.
-            Render the "name" attribute on the "input" element with the value
-            of the <code>clientId</code> of the component. Render an
-            "id"
-            attribute on the "input" element. Each "id" value must be unique.
-            If the current SelectItem.isDisabled() returns true, render
-            "disabled" as the value of the "disabled" attribute. Close out
-            the "input" element. Render a "label" element. Render the "for"
-            attribute of the "label" element whose value is the corresponding
-            "input" element's "id" value. Render any "style" as the "class"
-            attribute on the "label" element. Close out the starting "label"
-            element and render the label value from SelectItem.getLabel().
-            Close out the "label" element. As an exception to the general
-            rules about how to handle the "id" attribute, render it as an
-            attribute on the outer "table" element, the value of which is the
-            <code>clientId</code> of the component per the rules at
-            the
-            beginning of this specification. Coerce the value of the
-            currently rendered child to the type of the parent UISelectOne
-            value using the Expression Language coercion rules before
-            comparing the values. If the value of the currently rendered
-            child is equal to the value of the parent UISelectOne, render an
-            appropriate HTML boolean value indicating "checked" for the
-            enclosing "input". See the <a
-            href="SelectManyListbox.html">"Rendering
-            the option elements" </a> specification for
-            <code>ListboxRenderer</code> for more detail on how to
-            render the
-            "option" elements in this renderer.</p>
-            </ul>
-        </description>
-        <tag-name>selectOneRadio</tag-name>
-        <component>
-            <component-type>javax.faces.HtmlSelectOneRadio</component-type>
-            <renderer-type>javax.faces.Radio</renderer-type>
-        </component>
-        <attribute>
-            <description>
-                Converter instance registered with this component.
-            </description>
-            <name>converter</name>
-            <required>false</required>
-            <type>javax.faces.convert.Converter</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.
-            </description>
-            <name>converterMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for this component. This value must be
-                unique within the closest parent component that is a naming
-                container.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component's value must be
-                converted and validated immediately (that is, during
-                Apply Request Values phase), rather than waiting
-                until Process Validations phase.
-            </description>
-            <name>immediate</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit. The default value for this property is true.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that the user is required to provide a submitted
-                value for this input component.
-            </description>
-            <name>required</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.
-            </description>
-            <name>requiredMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                MethodExpression representing a validator method that will be
-                called
-                during Process Validations to perform correctness checks on the
-                value of this component. The expression must evaluate to a
-                public
-                method that takes FacesContext, UIComponent, and Object
-                parameters,
-                with a return type of void.
-            </description>
-            <name>validator</name>
-            <required>false</required>
-            <method-signature>void validate(javax.faces.context.FacesContext,
-                javax.faces.component.UIComponent, java.lang.Object)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.
-            </description>
-            <name>validatorMessage</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The current value of this component.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p>
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component. The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code>
-                parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void. In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                </p>
-            </description>
-            <name>valueChangeListener</name>
-            <required>false</required>
-            <method-signature>void
-                valueChange(javax.faces.event.ValueChangeEvent)
-            </method-signature>
-        </attribute>
-        <attribute>
-            <description>
-                Access key that, when pressed, transfers focus
-                to this element.
-            </description>
-            <name>accesskey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Width (in pixels) of the border to be drawn
-                around the table containing the options list.
-            </description>
-            <name>border</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Direction indication for text that does not inherit
-                directionality.
-                Valid values are "LTR" (left-to-right) and "RTL"
-                (right-to-left).
-            </description>
-            <name>dir</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this element must never receive focus or
-                be included in a subsequent submit. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as disabled="disabled".
-            </description>
-            <name>disabled</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on disabled options.
-            </description>
-            <name>disabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style class to apply to the rendered label
-                on enabled options.
-            </description>
-            <name>enabledClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                <p class="changed_modified_2_0">
-                Flag indicating that, if this component is activated by the
-                user,
-                The "no selection option", if any, must be hidden.</p>
-            </description>
-            <name>hideNoSelectionOption</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                A localized user presentable name for this component.
-            </description>
-            <name>label</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Code describing the language used in the generated markup
-                for this component.
-            </description>
-            <name>lang</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Orientation of the options list to be created.
-                Valid values are "pageDirection" (list is laid
-                out vertically), or "lineDirection" (list is
-                laid out horizontally). If not specified, the
-                default value is "lineDirection".
-            </description>
-            <name>layout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus.
-            </description>
-            <name>onblur</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element loses focus
-                and its value has been modified since gaining focus.
-            </description>
-            <name>onchange</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                clicked over this element.
-            </description>
-            <name>onclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                double clicked over this element.
-            </description>
-            <name>ondblclick</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when this element receives focus.
-            </description>
-            <name>onfocus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed down over this element.
-            </description>
-            <name>onkeydown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                pressed and released over this element.
-            </description>
-            <name>onkeypress</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a key is
-                released over this element.
-            </description>
-            <name>onkeyup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                pressed down over this element.
-            </description>
-            <name>onmousedown</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved within this element.
-            </description>
-            <name>onmousemove</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved away from this element.
-            </description>
-            <name>onmouseout</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                moved onto this element.
-            </description>
-            <name>onmouseover</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when a pointer button is
-                released over this element.
-            </description>
-            <name>onmouseup</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Javascript code executed when text within this
-                element is selected by the user.
-            </description>
-            <name>onselect</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this component will prohibit changes by
-                the user. The element may receive focus unless it has also
-                been disabled. A value of false causes
-                no attribute to be rendered, while a value of true causes the
-                attribute to be rendered as readonly="readonly".
-            </description>
-            <name>readonly</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                CSS style(s) to be applied when this component is rendered.
-            </description>
-            <name>style</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) to be applied when
-                this element is rendered. This value must be passed through
-                as the "class" attribute on generated markup.
-            </description>
-            <name>styleClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Position of this element in the tabbing order
-                for the current document. This value must be
-                an integer between 0 and 32767.
-            </description>
-            <name>tabindex</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Advisory title information about markup elements generated
-                for this component.
-            </description>
-            <name>title</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a
-                backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            <p>Renders a UIComponent that represents a single column of
-            data within a parent <code>UIData</code> component.</p>
-        </description>
-        <tag-name>column</tag-name>
-        <component>
-            <component-type>javax.faces.Column</component-type>
-            <renderer-type/>
-        </component>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>java.lang.Boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                The value binding expression linking this component to a
-                property in a backing bean
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>javax.faces.component.UIComponent</type>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for the associated component
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any column footer generated for this table.
-            </description>
-            <name>footerClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Space-separated list of CSS style class(es) that will be
-                applied to any column header generated for this table.
-            </description>
-            <name>headerClass</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Flag indicating that this column is a row header column and
-                therefore cells in this column should be rendered with "th"
-                instead of "td" and must have the 'scope="row"' attribute.
-            </description>
-            <name>rowHeader</name>
-            <required>false</required>
-            <type>boolean</type>
-        </attribute>
-    </tag>
-</facelet-taglib>
diff --git a/jsf-ri/conf/share/javax.servlet.ServletContainerInitializer b/jsf-ri/conf/share/javax.servlet.ServletContainerInitializer
deleted file mode 100644
index 6a5abb9..0000000
--- a/jsf-ri/conf/share/javax.servlet.ServletContainerInitializer
+++ /dev/null
@@ -1 +0,0 @@
-com.sun.faces.config.FacesInitializer
\ No newline at end of file
diff --git a/jsf-ri/conf/share/jsf_core.tld b/jsf-ri/conf/share/jsf_core.tld
deleted file mode 100644
index c775d84..0000000
--- a/jsf-ri/conf/share/jsf_core.tld
+++ /dev/null
@@ -1,1643 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<taglib xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
-    version="2.1">
-
-
-    <!-- ========== Tag Library Description Elements ========================= -->
-
-    <description>
-        The core JavaServer Faces custom actions that are independent of
-        any particular RenderKit.
-    </description>
-    <tlib-version>1.2</tlib-version>
-    <short-name>f</short-name>
-    <uri>http://java.sun.com/jsf/core</uri>
-
-
-
-    <!-- ========== Tag Library Validator ==================================== -->
-
-
-    <!-- This TLV verifies that a Faces tag has an ID if it is a
-         child or sibling of a JSTL conditional or iterator tag  -->
- <validator>
-   <description>
-      This tag library validator verifies certain semantic restrictions on the
-      use of JavaServer Faces component actions, including the requirement that
-      component tags nested inside a JSTL conditional tag must have a value
-      specified for the "id" attribute.
-   </description>
-     <validator-class>
-      com.sun.faces.taglib.jsf_core.CoreValidator
-     </validator-class>
- </validator>
-
-
-    <!-- ============== Configuration Listener ============== -->
-
-    <!--
-          This ServletContextListener initializes the runtime environment
-          of the JavaServer Faces Reference Implementation when a web
-          application including it is initialized by the container.
-    -->
-    <listener>
-       <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
-    </listener>      
-
-    <!-- ========== Tag Descriptions ========================================= -->
-
-
- <tag>
-     <description>
-
-        <![CDATA[<p>Register an ActionListener instance on the
-        UIComponent associated with the closest parent UIComponent
-        custom action.</p>]]>
-     </description>
-     <name>actionListener</name>
-     <tag-class>com.sun.faces.taglib.jsf_core.ActionListenerTag</tag-class>
-     <body-content>empty</body-content>
-
-     <attribute>
-         <description>
-            Fully qualified Java class name of an ActionListener to be
-            created and registered.
-         </description>
-         <name>type</name>
-         <required>false</required>
-         <deferred-value>
-             <type>java.lang.String</type>
-         </deferred-value>         
-
-     </attribute>
-
-    <attribute>
-      <description>
-        Value binding expression that evaluates to an object that 
-        implements javax.faces.event.ActionListener.
-      </description>
-      <name>binding</name>
-      <required>false</required>
-      <deferred-value>
-          <type>javax.faces.event.ActionListener</type>
-      </deferred-value>         
-
-    </attribute>
-
-
- </tag>
-
-
-    <tag>
-        <description>
-            Add an attribute to the UIComponent associated with the closest
-            parent UIComponent custom action.
-        </description>
-        <name>attribute</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.AttributeTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                The name of the component attribute to be set.
-            </description>
-            <name>name</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                The value of the component attribute to be set.
-            </description>
-            <name>value</name>
-                <deferred-value>
-                    <type>java.lang.Object</type>
-                </deferred-value>
-        </attribute>
-    </tag>
-
-
-    <tag>
-        <description>
-            Register a DateTimeConverter instance on the UIComponent associated
-            with the closest parent UIComponent custom action.
-        </description>
-        <name>convertDateTime</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ConvertDateTimeTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Predefined formatting style which determines how the date
-                component of a date string is to be formatted and parsed.
-                Applied only if type is "date" or "both".  Valid values
-                are "default", "short", "medium", "long", and "full".
-                Default value is "default".
-            </description>
-            <name>dateStyle</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Locale whose predefined styles for dates and times are used
-                during formatting or parsing.  If not specified, the Locale
-                returned by FacesContext.getViewRoot().getLocale() will be used.
-                Value must be either a VB expression that evaluates to a
-                java.util.Locale instance, or a String that is valid to pass as
-                the first argument to the constructor java.util.Locale(String
-                language, String country).  The empty string is passed as the
-                second argument.
-            </description>
-            <name>locale</name>
-            <required>false</required>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Custom formatting pattern which determines how the
-                date/time string should be formatted and parsed.
-            </description>
-            <name>pattern</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Predefined formatting style which determines how the
-                time component of a date string is to be formatted and
-                parsed.  Applied only if type is "time" or "both".
-                Valid values are "default", "short", "medium", "long",
-                and "full".  Default value is "default".
-            </description>
-            <name>timeStyle</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Time zone in which to interpret any time information in the date
-                String.  Value must be either a VB expression that evaluates to
-                a java.util.TimeZone instance, or a String that is a timezone ID
-                as described in the javadocs for
-                java.util.TimeZone.getTimeZone().
-            </description>
-            <name>timeZone</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Specifies what contents the string value will be
-                formatted to include, or parsed expecting.  Valid
-                values are "date", "time", and "both".  Default
-                value is "date".
-            </description>
-            <name>type</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                javax.faces.convert.DateTimeConverter.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.convert.DateTimeConverter</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description>
-            Register a NumberConverter instance on the UIComponent associated
-            with the closest parent UIComponent custom action.
-        </description>
-        <name>convertNumber</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ConvertNumberTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                ISO 4217 currency code, applied only when
-                formatting currencies.
-            </description>
-            <name>currencyCode</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Currency symbol, applied only when formatting
-                currencies.
-            </description>
-            <name>currencySymbol</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag specifying whether formatted output will
-                contain grouping separators.  Expressions must
-                evaluate to a boolean.  Default value
-                is true.
-            </description>
-            <name>groupingUsed</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag specifying whether only the integer part
-                of the value will be formatted and parsed.
-                Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>integerOnly</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description><![CDATA[<p>
-
-                <span class="changed_modified_2_0">Locale</span> whose
-                predefined styles for numbers are used during formatting
-                and parsing.  If not specified, the Locale returned by
-                FacesContext.getViewRoot().getLocale() will be used.
-                Expressions must evaluate to a java.util.Locale <span
-                class="changed_modified_2_0">or a String that is valid to
-                pass as the first argument to the constructor
-                java.util.Locale(String language, String country). The
-                empty string is passed as the second argument.</span>
-
-            </p>]]></description>
-            <name>locale</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Maximum number of digits that will be formatted
-                in the fractional portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>maxFractionDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Maximum number of digits that will be formatted
-                in the integer portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>maxIntegerDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum number of digits that will be formatted
-                in the fractional portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>minFractionDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum number of digits that will be formatted
-                in the integer portion of the output.  Expressions
-                must evaluate to an int.
-            </description>
-            <name>minIntegerDigits</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Custom formatting pattern which determins how the
-                number string should be formatted and parsed.
-            </description>
-            <name>pattern</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Specifies how the number string will be formatted
-                and parsed.  Valid values are "number", "currency",
-                and "percent".  Default value is "number".
-            </description>
-            <name>type</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                javax.faces.convert.NumberConverter.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.convert.NumberConverter</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description>
-            Register a named Converter instance on the UIComponent
-            associated with the closest parent UIComponent custom action.
-        </description>
-        <name>converter</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ConverterTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Converter identifier of the Converter instance to be
-                created and registered.
-            </description>
-            <name>converterId</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an object that
-                implements javax.faces.convert.Converter.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.convert.Converter</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description><![CDATA[
-
-            <p><span class="changed_modified_2_0">Register</span> a
-            named facet on the UIComponent associated with the closest
-            parent UIComponent custom action.</p>
-
-        ]]></description>
-        <name>facet</name>
-        <tag-class>javax.faces.webapp.FacetTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Name of the facet to be created.
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-            <type>java.lang.String</type>
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Load a resource bundle localized for the Locale of the current
-            view, and expose it as a java.util.Map in the request attributes
-            of the current request under the key specified by the value of the
-            "var" attribute of this tag.  The Map must behave such that if a
-            get() call is made for a key that does not exist in the Map, the
-            literal string ???KEY??? is returned from the Map, where KEY is
-            the key being looked up in the Map, instead of a
-            MissingResourceException being thrown.  If the ResourceBundle does
-            not exist, a JspException must be thrown.
-        </description>
-        <name>loadBundle</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.LoadBundleTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Base name of the resource bundle
-                to be loaded.
-            </description>
-            <name>basename</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Name of a request scope attribute under which
-                the resource bundle will be exposed as a Map.
-            </description>
-            <name>var</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-        </attribute>
-    </tag>
-
-
-    <tag>
-        <description>
-            Add a child UIParameter component to the UIComponent
-            associated with the closed parent UIComponent custom
-            action.
-        </description>
-        <name>param</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ParameterTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-             <description>
-                ValueExpression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UIParameter component
-                to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                Name of the parameter to be created.
-            </description>
-            <name>name</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Value of the parameter to be set.
-            </description>
-            <name>value</name>
-            <deferred-value/>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description><![CDATA[
-
-            <p class="changed_added_2_0">Used inside of the metada facet
-            of a view, this tag causes a <a target="_"
-            href="../../../javadocs/javax/faces/component/UIViewParameter.html">UIViewParameter</a>
-            to be attached as metadata for the current view.  Because
-            <code>UIViewParameter</code> extends <code>UIInput</code>
-            all of the attributes and nested child content for any
-            <code>UIInput</code> tags are valid on this tag as well.</p>
-
-        ]]></description>
-        <name>viewParam</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ParameterTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                <![CDATA[Converter instance registered with this component.]]>
-            </description>
-            <name>
-                converter
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    javax.faces.convert.Converter
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[A ValueExpression enabled attribute that, if present, will be
-                used as the text of the converter message, replacing any message
-                that comes from the converter.]]>
-            </description>
-            <name>
-                converterMessage
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The component identifier for this component.  This value must be
-                unique within the closest parent component that is a naming
-                container.]]>
-            </description>
-            <name>
-                id
-            </name>
-            <required>
-                false
-            </required>
-            <rtexprvalue>
-                true
-            </rtexprvalue>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating that the user is required to provide a submitted
-                value for this input component.]]>
-            </description>
-            <name>
-                required
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    boolean
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validation message for the "required"
-                facility, if the "required" facility is used.]]>
-            </description>
-            <name>
-                requiredMessage
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[MethodExpression representing a validator method that will be called
-                during Process Validations to perform correctness checks on the
-                value of this component.  The expression must evaluate to a public
-                method that takes FacesContext, UIComponent, and Object parameters,
-                with a return type of void.]]>
-            </description>
-            <name>
-                validator
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-method>
-                <method-signature>
-                    void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
-                </method-signature>
-            </deferred-method>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[A ValueExpression enabled attribute that, if present, will be
-                used as the text of the validator message, replacing any
-                message that comes from the validator.]]>
-            </description>
-            <name>
-                validatorMessage
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[The current value of this component.]]>
-            </description>
-            <name>
-                value
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.Object
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[<p>
-                
-                MethodExpression representing a value change listener method
-                that will be notified when a new value has been set for this
-                input component.  The expression must evaluate to a public
-                method that takes a <code>ValueChangeEvent</code> parameter,
-                with a return type of void, <span class="changed_added_2_0">or
-                to a public method that takes no arguments with a return type
-                of void.  In the latter case, the method has no way of easily
-                knowing what the new value is, but this can be useful in cases
-                where a notification is needed that "this value
-                changed".</span>
-                
-                </p>]]>
-            </description>
-            <name>
-                valueChangeListener
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-method>
-                <method-signature>
-                    void valueChange(javax.faces.event.ValueChangeEvent)
-                </method-signature>
-            </deferred-method>
-        </attribute>
-
-        <attribute>
-            <description>
-                <![CDATA[The maximum number of characters that may
-                be entered in this field.]]>
-            </description>
-            <name>
-                maxlength
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    int
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                The ValueExpression linking this component to a property in a backing bean
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    javax.faces.component.UIComponent
-                </type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-  <tag>
-
-    <description>
-      Register a PhaseListener instance on the UIViewRoot in which
-      this tag is nested.
-    </description>
-    <name>phaseListener</name>
-    <tag-class>com.sun.faces.taglib.jsf_core.PhaseListenerTag</tag-class>
-    <body-content>empty</body-content>
-
-    <attribute>
-      <description>
-        Fully qualified Java class name of an PhaseListener to be
-        created and registered.
-      </description>
-      <name>type</name>
-      <required>false</required>
-      <deferred-value>
-          <type>java.lang.String</type>
-      </deferred-value>
-
-    </attribute>
-
-    <attribute>
-      <description>
-        Value binding expression that evaluates to an object that 
-        implements javax.faces.event.PhaseListener.
-      </description>
-      <name>binding</name>
-      <required>false</required>
-      <deferred-value>
-          <type>javax.faces.event.PhaseListener</type>
-      </deferred-value>
-
-    </attribute>
-  </tag>
-
-    <tag>
-        <description>
-                <![CDATA[
-
-            <p><span class="changed_modified_2_0">Add</span> a child
-            UISelectItem component to the UIComponent associated with
-            the closed parent UIComponent custom action.</p>
-
-                ]]>
-        </description>
-        <name>selectItem</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SelectItemTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UISelectItem
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                Description of this option, for use in
-                development tools.
-            </description>
-            <name>itemDescription</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag indicating whether the option created
-                by this component is disabled.  Expressions
-                must evaluate to a boolean.  Default value
-                is false.
-            </description>
-            <name>itemDisabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Label to be displayed to the user
-                for this option.
-            </description>
-            <name>itemLabel</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag indicating that characters that are sensitive in
-                the value of the <![CDATA[<code>itemLabel</code>]]>
-                attribute must be escaped. This flag is set to "true" by
-                default.
-            </description>
-            <name>escape</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Value to be returned to the server if this
-                option is selected by the user.
-            </description>
-            <name>itemValue</name>
-            <deferred-value/>
-        </attribute>
-
-        <attribute>
-            <description>
-                Value binding expression pointing at a
-                SelectItem instance containing the
-                information for this option.
-            </description>
-            <name>value</name>
-            <deferred-value>
-                <type>javax.faces.model.SelectItem</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                <![CDATA[
-
-                <p class="changed_added_2_0">Flag indicating whether the
-                option created by this component represents the special
-                "no selection" option.  Expressions must evaluate to a
-                boolean.  Default value is false.</p>
-
-                ]]>
-            </description>
-            <name>noSelectionOption</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-
-    </tag>
-
-
-    <tag>
-        <description>
-            <![CDATA[<p><span class="changed_modified_2_0">Add</span> a
-            child UISelectItems component to the UIComponent associated
-            with the closed parent UIComponent custom action.</p>
-
-            <p class="changed_modified_2_0">When iterating over the
-            select items, <code>toString()</code> must be called on the
-            string rendered attribute values.</p>
-
-<p class="changed_added_2_0">Version 2 of the specification introduces
-several new attributes, described below.  These are: var, itemValue,
-itemLabel, itemDescription, itemDisabled, and itemLabelEscaped.</p>
-
-            ]]>
-
-        </description>
-        <name>selectItems</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SelectItemsTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UISelectItems
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                <![CDATA[
-
-                <p>Value expression pointing at <span
-                class="changed_modified_2_0">any <code>Collection</code>
-                or array.</span> The member elements may be instances of
-                <code>SelectItem</code> <span
-                class="changed_added_2_0">or any Java Object.  In the
-                case where the member elements are plain Java Objects,
-                several additional attributes must be used by the page
-                author to correctly identify the data to the enclosing
-                <code>UISelectOne</code> or <code>UISelectMany</code>
-                component, as shown in the following example.</span>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc2"><h:selectOneListbox <span class="kw3">size</span>=<span class="st0">"1"</span> <span class="kw3">id</span>=<span class="st0">"escape02"</span> <span class="kw3">value</span>=<span class="st0">"#{select05NoSelection.initialCollectionValues}"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><f:selectItems <span class="kw3">value</span>=<span class="st0">"#{select05NoSelection.hobbitList}"</span></div></li>
-<li class="li1"><div class="de1">                 var=<span class="st0">"n"</span></div></li>
-<li class="li2"><div class="de2">                 itemValue=<span class="st0">"#{n}"</span></div></li>
-<li class="li1"><div class="de1">                 itemLabel=<span class="st0">"#{n.bio}"</span></div></li>
-<li class="li2"><div class="de2">                 itemDescription=<span class="st0">"#{n.description}"</span></div></li>
-<li class="li1"><div class="de1">                 itemDisabled=<span class="st0">"#{n.disabled}"</span></div></li>
-<li class="li2"><div class="de2">                 itemLabelEscaped=<span class="st0">"true"</span></div></li>
-<li class="li1"><div class="de1">                 noSelectionValue=<span class="st0">"#{select05NoSelection.hobbitList[0]}"</span>/<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><</span>/h:selectOneListbox></span> </div></li></ol></div></div>
-
-<p class="changed_added_2_0">In the preceding example, the
-<code>value</code> attribute on line 1 points to a
-<code>Collection<HobbitBean></code>.  <code>HobbitBean</code> is
-just a regular Java Object (POJO) that conforms to JavaBeans naming
-conventions for its properties.  The <code>value</code> attribute on
-line 2 points to a <code>List<HobbitBean></code>, though it could
-just as well point to a <code>Collection</code>, array, or
-<code>javax.faces.model.DataModel</code>.  The attributes on lines 3
-through 9, inclusive, leverage the fact that the value is a collection
-of POJOs.
-</p>
-
-
-</p>
-
-                ]]>
-            </description>
-            <name>value</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                <![CDATA[
-
-<p class="changed_added_2_0">Expose the value from the
-<code>value</code> attribute under this request scoped key so that it
-may be referred to in EL for the value of other attributes.</p>
-
-                ]]>
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <rtexprvalue>false</rtexprvalue>
-            <type>java.lang.String</type>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a
-<code>Collection</code>, array, or <code>Map</code> from which the items
-to be shown will be rendered.</p> ]]>
-
-            </description>
-            <name>itemValue</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a String that will
-serve as the label to be shown for the item.</p> ]]>
-
-            </description>
-            <name>itemLabel</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a String that will
-serve as the description to be shown for the item.</p> ]]>
-
-            </description>
-            <name>itemDescription</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a boolean that will
-determine if the item value is selectable or not.</p> ]]>
-
-            </description>
-            <name>itemDisabled</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">evaluates to a boolean that will
-determine if the rendered markup for the item receives normal JSF HTML escaping or not.</p> ]]>
-
-            </description>
-            <name>itemLabelEscaped</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-<![CDATA[ <p class="changed_added_2_0">Is either an EL expression
-pointing to the element in the value collection whose value should be
-marked as a “no selection” item, or a literal string that
-exactly matches the value of the item in the collection that must be
-marked as the “no selection” item.  If the user selects such
-an item <strong>and</strong> the field is marked as required, then it
-will not pass validation.</p> ]]>
-
-            </description>
-            <name>itemLabelEscaped</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description>
-        <![CDATA[<p>Register an ActionListener instance on the UIComponent
-        associated with the closest parent UIComponent custom action.
-        This actionListener will cause the value given by the "value"
-        attribute to be set into the ValueExpression given by the "target"
-        attribute.</p>
-
-        <p>The implementation of this tag creates a special
-        <code>ActionListener</code> instance and registers it on the
-        <code>ActionSource</code> associated with our most immediate surrounding
-        instance of a tag whose implementation class is a subclass of
-        <code>UIComponentTag</code>.  This tag creates no output to the page
-        currently being created.</p>
-
-        <p>The <code>ActionListener</code> instance created and installed by
-        this tag has the following behavior and contract.</p>
-
-        <ul>
-
-        <li>Only create and register the <code>ActionListener</code> instance
-        the first time the component for this tag is created</li>
-
-        <li>The "target" and "value" tag attributes are ValueExpression
-        instances and are stored unevaluated as instance variables of the
-        listener.</li>
-
-        <li>When the listener executes, perform the following:
-           <ul>
-                Call getValue() on the "value" ValueExpression.
-           </ul>
-           <ul>
-                 If value of the "value" expression is null, call setValue() on
-                 the "target" ValueExpression with the null value.
-           </ul>
-           <ul>
-                If the value of the "value" expression is not null, call getType()
-                on the "value" and "target" ValueExpressions to determine their
-                property types.
-           </ul>
-           <ul>
-                Coerce the value of the "value" expression to the "target"
-                expression value type following the Expression Language coercion
-                rules.  Call setValue() on the "target" ValueExpression with the
-                resulting value.
-           </ul>
-           <ul>
-                If either coercion or the execution of setValue() fails throw an
-                AbortProcessingException.
-           </ul>
-        </li>
-
-        </ul>]]>
-        </description>
-        <name>setPropertyActionListener</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SetPropertyActionListenerTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-              ValueExpression to be stored as the value of the target
-              attribute.
-            </description>
-            <name>value</name>
-            <required>true</required>
-            <deferred-value/>
-        </attribute>
-
-        <attribute>
-            <description>
-              ValueExpression that is the destination of the value
-              attribute.
-            </description>
-            <name>target</name>
-            <required>true</required>
-            <deferred-value/>
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Container action for all JavaServer Faces core and
-            custom component actions used on a nested page via
-            "jsp:include" or any custom action that dynamically
-            includes another page from the same web application,
-            such as JSTL's "c:import".
-        </description>
-        <name>subview</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.SubviewTag</tag-class>
-        <body-content>JSP</body-content>
-
-
-        <attribute>
-            <description>
-                Value binding expression to a backing bean
-                property bound to the component instance for
-                the UIComponent created by this custom action.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Component identifier of the UINamingContainer
-                component to be created.
-            </description>
-            <name>id</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-
-        <attribute>
-            <description>
-                Flag indicating whether this component (and its
-                children) should be rendered.  Expressions must
-                evaluate to a boolean.
-            </description>
-            <name>rendered</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Register a DoubleRangeValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <name>validateDoubleRange</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidateDoubleRangeTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Maximum value allowed for this component.
-            </description>
-            <name>maximum</name>
-            <deferred-value>
-                <type>java.lang.Double</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum value allowed for this component.
-            </description>
-            <name>minimum</name>
-            <deferred-value>
-                <type>java.lang.Double</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                DoubleRangeValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.DoubleRangeValidator</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Register a LengthValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <name>validateLength</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidateLengthTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Maximum length allowed for this component.
-            </description>
-            <name>maximum</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum length allowed for this component.
-            </description>
-            <name>minimum</name>
-            <deferred-value>
-                <type>java.lang.Integer</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                LenghtValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.LengthValidator</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-         <description>
-            Register a LongRangeValidator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <name>validateLongRange</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidateLongRangeTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Maximum value allowed for this component.
-            </description>
-            <name>maximum</name>
-            <deferred-value>
-                <type>java.lang.Long</type>
-            </deferred-value>
-
-        </attribute>
-
-        <attribute>
-            <description>
-                Minimum value allowed for this component.
-            </description>
-            <name>minimum</name>
-            <deferred-value>
-                <type>java.lang.Long</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                LongRangeValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.LongRangeValidator</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-    <tag>
-        <description><![CDATA[<p>
-
-                <span class="changed_added_2_0">
-            A validator that uses the pattern attribute to validate the
-            wrapping component.  The entire pattern is matched against
-            the String value of the component.  If it matches, it's
-            valid.
-
-         </p>]]>
-        </description>
-        <name>validateRegex</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.RegexValidatorTag</tag-class>
-        <body-content>empty</body-content>
-        <attribute>
-             <description>
-                A regular expression pattern.  Remember that, like in
-                all Java strings, backslash must be escaped with another
-                backslash.
-            </description>
-            <name>pattern</name>
-            <required>true</required>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an instance of
-                RegexpValidator.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.RegexValidator</type>
-            </deferred-value>
-        </attribute>
-    </tag>
-
-    <tag>
-        <description>
-            Register a named Validator instance on the
-            UIComponent associated with the closest parent
-            UIComponent custom action.
-        </description>
-        <name>validator</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValidatorTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-             <description>
-                Validator identifier of the Validator
-                to be created and registered.
-            </description>
-            <name>validatorId</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-                A ValueExpression that evaluates to an object that implements
-                the javax.faces.validator.Validator interface.
-            </description>
-            <name>binding</name>
-            <deferred-value>
-                <type>javax.faces.validator.Validator</type>
-            </deferred-value>
-        </attribute>
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Register an ValueChangeListener instance on the UIComponent associated
-            with the closest parent UIComponent custom action.
-        </description>
-        <name>valueChangeListener</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ValueChangeListenerTag</tag-class>
-        <body-content>empty</body-content>
-
-        <attribute>
-            <description>
-                Fully qualified Java class name of a
-                ValueChangeListener to be created and registered.
-            </description>
-            <name>type</name>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-
-        </attribute>
-
-       <attribute>
-         <description>
-           Value binding expression that evaluates to an object that 
-           implements javax.faces.event.ValueChangeListener.
-         </description>
-         <name>binding</name>
-         <required>false</required>
-         <deferred-value>
-           <type>javax.faces.event.ValueChangeListener</type>
-         </deferred-value>
-    </attribute>
-
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Create and register a child UIOutput component
-            associated with the closest parent UIComponent
-            custom action, which renders nested body content.
-        </description>
-        <name>verbatim</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.VerbatimTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Flag indicating that generated markup must
-                be escaped in a manner that is appropriate
-                for the markup language to be rendered.
-                Expressions must evaluate to a boolean.
-                Default value is false.
-            </description>
-            <name>escape</name>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.  The default value for this property is true.]]>
-            </description>
-            <name>
-                rendered
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.Boolean
-                </type>
-            </deferred-value>
-        </attribute>        
-
-    </tag>
-
-
-    <tag>
-        <description>
-            Container for all JavaServer Faces core and custom
-            component actions used on a page.
-        </description>
-        <name>view</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.ViewTag</tag-class>
-        <body-content>JSP</body-content>
-
-        <attribute>
-            <description>
-                Locale to use for localizing this page.  Expressions
-                must evaluate to a java.util.Locale or to a String
-                that is converted to a Locale.
-            </description>
-            <name>locale</name>
-            <deferred-value>
-                <type>java.lang.Object</type>
-            </deferred-value>
-        </attribute>
-
-    <attribute>
-      <description>
-        Identifier for the RenderKit to use for
-        rendering this page.
-      </description>
-      <name>renderKitId</name>
-      <required>false</required>
-      <deferred-value>
-           <type>java.lang.String</type>
-      </deferred-value>
-
-    </attribute>
-
-    <attribute>
-      <description>
-
-          MethodBinding pointing to a method that takes a
-          javax.faces.event.PhaseEvent and returns void.  This method
-          will be called before every phase except for restore view.
-      </description>
-      <name>beforePhase</name>
-      <required>false</required>
-      <deferred-method>
-           <method-signature>void beforePhase(javax.faces.event.PhaseEvent)</method-signature>
-      </deferred-method>
-    </attribute>
-
-    <attribute>
-      <description>
-
-          MethodBinding pointing to a method that takes a
-          javax.faces.event.PhaseEvent and returns void.  This method
-          will be called after every phase except for restore view.
-      </description>
-      <name>afterPhase</name>
-      <required>false</required>
-      <deferred-method>
-           <method-signature>void afterPhase(javax.faces.event.PhaseEvent)</method-signature>
-      </deferred-method>
-    </attribute>
-
-    </tag>
-
-
-</taglib>
diff --git a/jsf-ri/conf/share/jstl-core.taglib.xml b/jsf-ri/conf/share/jstl-core.taglib.xml
deleted file mode 100644
index a626448..0000000
--- a/jsf-ri/conf/share/jstl-core.taglib.xml
+++ /dev/null
@@ -1,292 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-                version="2.0">
-  <description>
-<![CDATA[<p>JSTL 1.2 core library</p>
-
-<p>The pre JSF 2.0 version of Facelets incorrectly declared the taglib
-uri to be <code>http://java.sun.com/jstl/core</code>.  For backwards
-compatibility implementations must correctly handle inclusions with the
-incorrect uri, and the correct uri, declared here.</p>
-]]>
-</description>
-
-    <namespace>http://java.sun.com/jsp/jstl/core</namespace>
-    <tag>
-        <description>
-            Catches any Throwable that occurs in its body and optionally
-            exposes it.
-        </description>
-        <tag-name>catch</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jstl.core.CatchHandler</handler-class>
-        <attribute>
-            <description>
-                Name of the exported scoped variable for the
-                exception thrown from a nested action. The type of the
-                scoped variable is the type of the exception thrown.
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Simple conditional tag that establishes a context for
-            mutually exclusive conditional operations, marked by
-            <when> and <otherwise>
-        </description>
-        <tag-name>choose</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jstl.core.ChooseHandler</handler-class>
-    </tag>
-    <tag>
-        <description>
-            Simple conditional tag, which evalutes its body if the
-            supplied condition is true and optionally exposes a Boolean
-            scripting variable representing the evaluation of this condition
-        </description>
-        <tag-name>if</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jstl.core.IfHandler</handler-class>
-        <attribute>
-            <description>
-                The test condition that determines whether or
-                not the body content should be processed.
-            </description>
-            <name>test</name>
-            <required>true</required>
-            <type>boolean</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of the exported scoped variable for the
-                resulting value of the test condition. The type
-                of the scoped variable is Boolean.
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Scope for var.
-            </description>
-            <name>scope</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            The basic iteration tag, accepting many different
-            collection types and supporting subsetting and other
-            functionality
-        </description>
-        <tag-name>forEach</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jstl.core.ForEachHandler</handler-class>
-        <attribute>
-            <description>
-                Collection of items to iterate over.
-            </description>
-            <name>items</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                If items specified:
-                Iteration begins at the item located at the
-                specified index. First item of the collection has
-                index 0.
-                If items not specified:
-                Iteration begins with index set at the value
-                specified.
-            </description>
-            <name>begin</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                If items specified:
-                Iteration ends at the item located at the
-                specified index (inclusive).
-                If items not specified:
-                Iteration ends when index reaches the value
-                specified.
-            </description>
-            <name>end</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Iteration will only process every step items of
-                the collection, starting with the first one.
-            </description>
-            <name>step</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of the exported scoped variable for the
-                current item of the iteration. This scoped
-                variable has nested visibility. Its type depends
-                on the object of the underlying collection.
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of the exported scoped variable for the
-                status of the iteration. Object exported is of type
-                javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable
-                has nested
-                visibility.
-            </description>
-            <name>varStatus</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Subtag of <choose> that follows <when> tags
-            and runs only if all of the prior conditions evaluated to
-            'false'
-        </description>
-        <tag-name>otherwise</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jstl.core.ChooseOtherwiseHandler</handler-class>
-    </tag>
-    <tag>
-        <description>
-            <p>Sets the result of an expression evaluation based on the
-            value of the attributes. If "scope" the is present, but has a zero
-            length or is equal to the string "page", <code>TagException</code>
-            is
-            thrown with an informative error message, ensuring page location
-            information is saved.</p>
-
-            <p>This handler operates in one of two ways.
-
-            <ol>
-
-            <li><p>The user has set "var", "value" and (optionally)
-            "scope" attributes.</p></li>
-
-            <li><p>The user has set "target", "property", and
-            "value"
-            attributes.</p></li>
-
-
-            </ol>
-
-            <p>The first case takes precedence over the second.</p>
-
-
-        </description>
-        <tag-name>set</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jstl.core.SetHandler</handler-class>
-        <attribute>
-            <description>
-                Name of the exported scoped variable to hold the value
-                specified in the action. The type of the scoped variable is
-                whatever type the value expression evaluates to.
-            </description>
-            <name>var</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Expression to be evaluated.
-            </description>
-            <name>value</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-                Target object whose property will be set. Must evaluate to
-                a JavaBeans object with setter property property, or to a
-                java.util.Map object.
-            </description>
-            <name>target</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Name of the property to be set in the target object.
-            </description>
-            <name>property</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-                Scope for var.
-            </description>
-            <name>scope</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            Subtag of <choose> that includes its body if its
-            condition evalutes to 'true'
-        </description>
-        <tag-name>when</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.jstl.core.ChooseWhenHandler</handler-class>
-        <attribute>
-            <description>
-                The test condition that determines whether or not the
-                body content should be processed.
-            </description>
-            <name>test</name>
-            <required>true</required>
-            <type>boolean</type>
-        </attribute>
-    </tag>
-</facelet-taglib>
diff --git a/jsf-ri/conf/share/jstl-core.tld b/jsf-ri/conf/share/jstl-core.tld
deleted file mode 100644
index 0018065..0000000
--- a/jsf-ri/conf/share/jstl-core.tld
+++ /dev/null
@@ -1,321 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<taglib xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
-    version="2.1">
-    
-  <description>
-<![CDATA[<p>JSTL 1.2 core library</p>
-
-<p>The pre JSF 2.0 version of Facelets incorrectly declared the taglib
-uri to be <code>http://java.sun.com/jstl/core</code>.  For backwards
-compatibility implementations must correctly handle inclusions with the
-incorrect uri, and the correct uri, declared here.</p>
-]]>
-</description>
-
-  <display-name>JSTL core</display-name>
-  <tlib-version>1.2</tlib-version>
-  <short-name>c</short-name>
-  <uri>http://java.sun.com/jsp/jstl/core</uri>
-
-  <tag>
-    <description>
-        Catches any Throwable that occurs in its body and optionally
-        exposes it.
-    </description>
-    <name>catch</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-exception thrown from a nested action. The type of the
-scoped variable is the type of the exception thrown.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-	Simple conditional tag that establishes a context for
-	mutually exclusive conditional operations, marked by
-	<when> and <otherwise>
-    </description>
-    <name>choose</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
-    <body-content>JSP</body-content>
-  </tag>
-
-  <tag>
-    <description>
-	Simple conditional tag, which evalutes its body if the
-	supplied condition is true and optionally exposes a Boolean
-	scripting variable representing the evaluation of this condition
-    </description>
-    <name>if</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-The test condition that determines whether or
-not the body content should be processed.
-        </description>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-	<type>boolean</type>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-resulting value of the test condition. The type
-of the scoped variable is Boolean.        
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope for var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-	The basic iteration tag, accepting many different
-        collection types and supporting subsetting and other
-        functionality
-    </description>
-    <name>forEach</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class>
-    <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Collection of items to iterate over.
-        </description>
-	<name>items</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>java.lang.Object</type>
-        <deferred-value>
-	    <type>java.lang.Object</type>
-        </deferred-value>
-    </attribute>
-    <attribute>
-        <description>
-If items specified:
-Iteration begins at the item located at the
-specified index. First item of the collection has
-index 0.
-If items not specified:
-Iteration begins with index set at the value
-specified.
-        </description>
-	<name>begin</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-If items specified:
-Iteration ends at the item located at the
-specified index (inclusive).
-If items not specified:
-Iteration ends when index reaches the value
-specified.
-        </description>
-	<name>end</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-Iteration will only process every step items of
-the collection, starting with the first one.
-        </description>
-	<name>step</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-current item of the iteration. This scoped
-variable has nested visibility. Its type depends
-on the object of the underlying collection.
-        </description>
-	<name>var</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-status of the iteration. Object exported is of type
-javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested
-visibility.
-        </description>
-	<name>varStatus</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Subtag of <choose> that follows <when> tags
-        and runs only if all of the prior conditions evaluated to
-        'false'
-    </description>
-    <name>otherwise</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
-    <body-content>JSP</body-content>
-  </tag>
-
- <tag>
-    <description>
-<![CDATA[ <p>Sets the result of an expression evaluation based on the
-value of the attributes.  If "scope" the is present, but has a zero
-length or is equal to the string "page", <code>TagException</code> is
-thrown with an informative error message, ensuring page location
-information is saved.</p>
-
-<p>This handler operates in one of two ways.
-
-	<ol>
-
-	  <li><p>The user has set "var", "value" and (optionally)
-	  "scope" attributes.</p></li>
-
-	  <li><p>The user has set "target", "property", and "value"
-	  attributes.</p></li>
-
-
-	</ol>
-
-<p>The first case takes precedence over the second.</p>
-
-]]>
-
-    </description>
-    <name>set</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.SetTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Name of the exported scoped variable to hold the value
-specified in the action. The type of the scoped variable is
-whatever type the value expression evaluates to.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Expression to be evaluated.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-        <deferred-value>
-	    <type>java.lang.Object</type>
-        </deferred-value>
-    </attribute>
-    <attribute>
-        <description>
-Target object whose property will be set. Must evaluate to
-a JavaBeans object with setter property property, or to a
-java.util.Map object.
-        </description>
-        <name>target</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the property to be set in the target object.
-        </description>
-        <name>property</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope for var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-	Subtag of <choose> that includes its body if its
-	condition evalutes to 'true'
-    </description>
-    <name>when</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.WhenTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-The test condition that determines whether or not the
-body content should be processed.
-        </description>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-	<type>boolean</type>
-    </attribute>
-  </tag>
-
-</taglib>
diff --git a/jsf-ri/conf/share/jstl-fn.taglib.xml b/jsf-ri/conf/share/jstl-fn.taglib.xml
deleted file mode 100644
index 86acd9b..0000000
--- a/jsf-ri/conf/share/jstl-fn.taglib.xml
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-                version="2.0">
-  <description>JSTL 1.1 functions library</description>
-  <namespace>http://java.sun.com/jsp/jstl/functions</namespace>
-  <function>
-    <description>
-      Tests if an input string contains the specified substring.
-    </description>
-    <function-name>contains</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Tests if an input string contains the specified substring in a case insensitive way.
-    </description>
-    <function-name>containsIgnoreCase</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>boolean containsIgnoreCase(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Tests if an input string ends with the specified suffix.
-    </description>
-    <function-name>endsWith</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>boolean endsWith(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Escapes characters that could be interpreted as XML markup.
-    </description>
-    <function-name>escapeXml</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String escapeXml(java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Returns the index withing a string of the first occurrence of a specified substring.
-    </description>
-    <function-name>indexOf</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>int indexOf(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Joins all elements of an array into a string.
-    </description>
-    <function-name>join</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String join(java.lang.String[], java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Returns the number of items in a collection, or the number of characters in a string.
-    </description>
-    <function-name>length</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>int length(java.lang.Object)</function-signature>
-  </function>
-  <function>
-    <description>
-      Returns a string resulting from replacing in an input string all occurrences
-      of a "before" string into an "after" substring.
-    </description>
-    <function-name>replace</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String replace(java.lang.String, java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Splits a string into an array of substrings.
-    </description>
-    <function-name>split</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String[] split(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Tests if an input string starts with the specified prefix.
-    </description>
-    <function-name>startsWith</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>boolean startsWith(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Returns a subset of a string.
-    </description>
-    <function-name>substring</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String substring(java.lang.String, int, int)</function-signature>
-  </function>
-  <function>
-    <description>
-      Returns a subset of a string following a specific substring.
-    </description>
-    <function-name>substringAfter</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String substringAfter(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Returns a subset of a string before a specific substring.
-    </description>
-    <function-name>substringBefore</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String substringBefore(java.lang.String, java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Converts all of the characters of a string to lower case.
-    </description>
-    <function-name>toLowerCase</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String toLowerCase(java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Converts all of the characters of a string to upper case.
-    </description>
-    <function-name>toUpperCase</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String toUpperCase(java.lang.String)</function-signature>
-  </function>
-  <function>
-    <description>
-      Removes white spaces from both ends of a string.
-    </description>
-    <function-name>trim</function-name>
-    <function-class>com.sun.faces.facelets.tag.jstl.fn.JstlFunction</function-class>
-    <function-signature>java.lang.String trim(java.lang.String)</function-signature>
-  </function>
-</facelet-taglib>
diff --git a/jsf-ri/conf/share/jstl-fn.tld b/jsf-ri/conf/share/jstl-fn.tld
deleted file mode 100644
index 469b4d1..0000000
--- a/jsf-ri/conf/share/jstl-fn.tld
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
-  version="2.0">
-    
-  <description>JSTL 1.1 functions library</description>
-  <display-name>JSTL functions</display-name>
-  <tlib-version>1.1</tlib-version>
-  <short-name>fn</short-name>
-  <uri>http://java.sun.com/jsp/jstl/functions</uri>
-
-  <function>
-    <description>
-      Tests if an input string contains the specified substring.
-    </description>
-    <name>contains</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      <c:if test="${fn:contains(name, searchString)}">
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Tests if an input string contains the specified substring in a case insensitive way.
-    </description>
-    <name>containsIgnoreCase</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>boolean containsIgnoreCase(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      <c:if test="${fn:containsIgnoreCase(name, searchString)}">
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Tests if an input string ends with the specified suffix.
-    </description>
-    <name>endsWith</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>boolean endsWith(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      <c:if test="${fn:endsWith(filename, ".txt")}">
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Escapes characters that could be interpreted as XML markup.
-    </description>
-    <name>escapeXml</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String escapeXml(java.lang.String)</function-signature>
-    <example>
-      ${fn:escapeXml(param:info)}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Returns the index withing a string of the first occurrence of a specified substring.
-    </description>
-    <name>indexOf</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>int indexOf(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      ${fn:indexOf(name, "-")}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Joins all elements of an array into a string.
-    </description>
-    <name>join</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String join(java.lang.String[], java.lang.String)</function-signature>
-    <example>
-      ${fn:join(array, ";")}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Returns the number of items in a collection, or the number of characters in a string.
-    </description>
-    <name>length</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>int length(java.lang.Object)</function-signature>
-    <example>
-      You have ${fn:length(shoppingCart.products)} in your shopping cart.
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Returns a string resulting from replacing in an input string all occurrences
-      of a "before" string into an "after" substring.
-    </description>
-    <name>replace</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String replace(java.lang.String, java.lang.String, java.lang.String)</function-signature>
-    <example>
-      ${fn:replace(text, "-", "•")}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Splits a string into an array of substrings.
-    </description>
-    <name>split</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String[] split(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      ${fn:split(customerNames, ";")}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Tests if an input string starts with the specified prefix.
-    </description>
-    <name>startsWith</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>boolean startsWith(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      <c:if test="${fn:startsWith(product.id, "100-")}">
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Returns a subset of a string.
-    </description>
-    <name>substring</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String substring(java.lang.String, int, int)</function-signature>
-    <example>
-      P.O. Box: ${fn:substring(zip, 6, -1)}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Returns a subset of a string following a specific substring.
-    </description>
-    <name>substringAfter</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String substringAfter(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      P.O. Box: ${fn:substringAfter(zip, "-")}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Returns a subset of a string before a specific substring.
-    </description>
-    <name>substringBefore</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String substringBefore(java.lang.String, java.lang.String)</function-signature>
-    <example>
-      Zip (without P.O. Box): ${fn:substringBefore(zip, "-")}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Converts all of the characters of a string to lower case.
-    </description>
-    <name>toLowerCase</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String toLowerCase(java.lang.String)</function-signature>
-    <example>
-      Product name: ${fn.toLowerCase(product.name)}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Converts all of the characters of a string to upper case.
-    </description>
-    <name>toUpperCase</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String toUpperCase(java.lang.String)</function-signature>
-    <example>
-      Product name: ${fn.UpperCase(product.name)}
-    </example>
-  </function>
-
-  <function>
-    <description>
-      Removes white spaces from both ends of a string.
-    </description>
-    <name>trim</name>
-    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
-    <function-signature>java.lang.String trim(java.lang.String)</function-signature>
-    <example>
-      Name: ${fn.trim(name)}
-    </example>  
-  </function>
-
-</taglib>
diff --git a/jsf-ri/conf/share/mojarra_ext.taglib.xml b/jsf-ri/conf/share/mojarra_ext.taglib.xml
deleted file mode 100644
index c53653f..0000000
--- a/jsf-ri/conf/share/mojarra_ext.taglib.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-        
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE facelet-taglib PUBLIC
-  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
-  "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
-
-<facelet-taglib>
-    <namespace>http://mojarra.dev.java.net/mojarra_ext</namespace>
-    <tag>
-        <tag-name>regexValidator</tag-name>
-        <validator>
-            <validator-id>javax.faces.RegularExpression</validator-id>
-        </validator>
-    </tag>
-    <tag>
-        <tag-name>creditcardValidator</tag-name>
-        <validator>
-            <validator-id>com.sun.faces.ext.validator.CreditCardValidator</validator-id>
-        </validator>
-    </tag>
-    <tag>
-        <tag-name>focus</tag-name>
-        <component>
-            <component-type>com.sun.faces.ext.focus</component-type>
-            <renderer-type>com.sun.faces.ext.render.FocusHTMLRenderer</renderer-type>
-        </component>
-    </tag>
-</facelet-taglib>
\ No newline at end of file
diff --git a/jsf-ri/conf/share/mojarra_ext.tld b/jsf-ri/conf/share/mojarra_ext.tld
deleted file mode 100644
index 127ed31..0000000
--- a/jsf-ri/conf/share/mojarra_ext.tld
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<taglib xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
-    version="2.1">
-    <tlib-version>1.1</tlib-version>
-
-    <short-name>mj</short-name>
-    <uri>http://mojarra.dev.java.net/mojarra_ext</uri>
-    <tag>
-         <description>
-            A validator that uses the pattern attribute to validate the wrapping
-            component.  The entire pattern is matched against the String value
-            of the component.  If it matches, it's valid.
-        </description>
-        <name>regexValidator</name>
-        <tag-class>com.sun.faces.taglib.jsf_core.RegexValidatorTag</tag-class>
-        <body-content>empty</body-content>
-        <attribute>
-            <description>
-                A regular expression pattern.  Remember that, like in all Java
-                strings, backslash must be escaped with another backslash.
-                Additionally, to use #{ in a regex, it must also be escaped, since
-                it will otherwise be interpreted as an EL expression.
-            </description>
-            <name>pattern</name>
-            <required>true</required>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-            A validator that checks a credit card number to see that it's valid,
-            using the Luhn Algorithm.  The credit card number may only have numbers,
-            as well as dashes and spaces, which are ignored.
-        </description>
-        <name>creditcardValidator</name>
-        <tag-class>com.sun.faces.ext.taglib.CreditCardValidatorTag</tag-class>
-        <body-content>empty</body-content>
-    </tag>
-    <tag>
-        <description>
-            A tag to set the focus on a specified field.  Place it within a form
-            tag, and set the for attribute to point to the field that should receive
-            the focus.
-        </description>
-        <name>focus</name>
-        <tag-class>com.sun.faces.ext.taglib.FocusTag</tag-class>
-        <body-content>empty</body-content>
-        <attribute>
-            <description>A value binding that points to a bean property</description>
-            <name>binding</name>
-        </attribute>
-        <attribute>
-            <description>The client id of this component</description>
-            <name>id</name>
-        </attribute>
-        <attribute>
-            <description>Is this component rendered?</description>
-            <name>rendered</name>
-        </attribute>
-        <attribute>
-            <description>component ID that should receive the focus</description>
-            <name>for</name>
-            <required>true</required>
-            <deferred-value>
-                <type>java.lang.String</type>
-            </deferred-value>
-        </attribute>
-    </tag>
-</taglib>
diff --git a/jsf-ri/conf/share/tlddoc-resources/alltags-frame.html.xsl b/jsf-ri/conf/share/tlddoc-resources/alltags-frame.html.xsl
deleted file mode 100644
index ccadf1d..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/alltags-frame.html.xsl
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : alltags-frame.html.xsl
-    Created on : October 1, 2002, 5:37 PM
-    Author     : mroth
-    Description:
-        Creates the all tags frame (lower left corner), listing all tags
-        and functions included in all tag libraries for this generation.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <html>
-        <head>
-          <title>All Tags / Functions</title>
-          <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style"/>
-        </head>
-        <script>
-          function asd()
-          {
-            parent.document.title="All Tags / Functions";
-          }
-        </script>
-        <body bgcolor="white" onload="asd();">
-          <font size="+1" class="FrameHeadingFont">
-          <b>All Tags / Functions</b></font>
-          <br/>
-          <table border="0" width="100%">
-            <tr>
-              <td nowrap="true"><font class="FrameItemFont">
-                <xsl:apply-templates 
-                    select="javaee:tlds/javaee:taglib/javaee:tag|javaee:tlds/javaee:taglib/javaee:tag-file|javaee:tlds/javaee:taglib/javaee:function">
-                  <xsl:sort select="../javaee:short-name"/>
-                  <xsl:sort select="javaee:name"/>
-                </xsl:apply-templates>
-              </font></td>
-            </tr>
-          </table>
-        </body>
-      </html>    
-    </xsl:template>
-    
-    <xsl:template match="javaee:tag|javaee:tag-file">
-      <xsl:element name="a">
-        <xsl:attribute name="href"><xsl:value-of select="../javaee:short-name"/>/<xsl:value-of select="javaee:name"/>.html</xsl:attribute>
-        <xsl:attribute name="target">tagFrame</xsl:attribute>
-        <xsl:value-of select="../javaee:short-name"/>:<xsl:value-of select="javaee:name"/>
-      </xsl:element>
-      <br/>
-    </xsl:template>
-    
-    <!-- 
-      - Same as above, but add the () to indicate it's a function 
-      - and change the HTML to .fn.html
-      -->
-    <xsl:template match="javaee:function">
-      <xsl:element name="a">
-        <xsl:attribute name="href"><xsl:value-of select="../javaee:short-name"/>/<xsl:value-of select="javaee:name"/>.fn.html</xsl:attribute>
-        <xsl:attribute name="target">tagFrame</xsl:attribute>
-        <i><xsl:value-of select="../javaee:short-name"/>:<xsl:value-of select="javaee:name"/>()</i>
-      </xsl:element>
-      <br/>
-    </xsl:template>
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/alltags-noframe.html.xsl b/jsf-ri/conf/share/tlddoc-resources/alltags-noframe.html.xsl
deleted file mode 100644
index c0a308c..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/alltags-noframe.html.xsl
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : alltags-frame.html.xsl
-    Created on : October 1, 2002, 5:37 PM
-    Author     : mroth
-    Description:
-        Creates the all tags page, listing all tags
-        and functions included in all tag libraries for this generation.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <html>
-        <head>
-          <title>All Tags / Functions</title>
-          <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style"/>
-        </head>
-        <script>
-          function asd()
-          {
-            parent.document.title="All Tags / Functions";
-          }
-        </script>
-        <body bgcolor="white" onload="asd();">
-          <font size="+1" class="FrameHeadingFont">
-          <b>All Tags / Functions</b></font>
-          <br/>
-          <table border="0" width="100%">
-            <tr>
-              <td nowrap="true"><font class="FrameItemFont">
-                <xsl:apply-templates 
-                    select="javaee:tlds/javaee:taglib/javaee:tag|javaee:tlds/javaee:taglib/javaee:tag-file|javaee:tlds/javaee:taglib/javaee:function">
-                  <xsl:sort select="../javaee:short-name"/>
-                  <xsl:sort select="javaee:name"/>
-                </xsl:apply-templates>
-              </font></td>
-            </tr>
-          </table>
-        </body>
-      </html>    
-    </xsl:template>
-    
-    <xsl:template match="javaee:tag|javaee:tag-file">
-      <xsl:element name="a">
-        <xsl:attribute name="href"><xsl:value-of select="../javaee:short-name"/>/<xsl:value-of select="javaee:name"/>.html</xsl:attribute>
-        <xsl:attribute name="target"></xsl:attribute>
-        <xsl:value-of select="../javaee:short-name"/>:<xsl:value-of select="javaee:name"/>
-      </xsl:element>
-      <br/>
-    </xsl:template>
-    
-    <!-- 
-      - Same as above, but add the () to indicate it's a function 
-      - and change the HTML to .fn.html
-      -->
-    <xsl:template match="javaee:function">
-      <xsl:element name="a">
-        <xsl:attribute name="href"><xsl:value-of select="../javaee:short-name"/>/<xsl:value-of select="javaee:name"/>.fn.html</xsl:attribute>
-        <xsl:attribute name="target">tagFrame</xsl:attribute>
-        <i><xsl:value-of select="../javaee:short-name"/>:<xsl:value-of select="javaee:name"/>()</i>
-      </xsl:element>
-      <br/>
-    </xsl:template>
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/function.html.xsl b/jsf-ri/conf/share/tlddoc-resources/function.html.xsl
deleted file mode 100644
index 7a2ebe2..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/function.html.xsl
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : function.html.xsl
-    Created on : Februrary 25, 2003, 7:39 PM
-    Author     : mroth
-    Description:
-        Creates the function detail page (right frame), listing the known
-        information for a given function in a tag library.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-    
-    <xsl:param name="tlddoc-shortName">default</xsl:param>
-    <xsl:param name="tlddoc-functionName">default</xsl:param>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <xsl:apply-templates select="javaee:tlds/javaee:taglib"/>
-    </xsl:template>
-    
-    <xsl:template match="javaee:taglib">
-      <xsl:if test="javaee:short-name=$tlddoc-shortName">
-        <xsl:apply-templates select="javaee:function"/>
-      </xsl:if>
-    </xsl:template>
-    
-    <xsl:template match="javaee:function">
-      <xsl:if test="javaee:name=$tlddoc-functionName">
-        <xsl:variable name="tldname">
-          <xsl:choose>
-            <xsl:when test="../javaee:display-name!=''">
-              <xsl:value-of select="../javaee:display-name"/>
-            </xsl:when>
-            <xsl:when test="../javaee:short-name!=''">
-              <xsl:value-of select="../javaee:short-name"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Unnamed TLD
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:variable>
-        <xsl:variable name="title">
-          <xsl:value-of select="javaee:name"/>
-          (<xsl:value-of select="/javaee:tlds/javaee:config/javaee:window-title"/>)
-        </xsl:variable>
-        <html>
-          <head>
-            <title><xsl:value-of select="$title"/></title>
-            <meta name="keywords" content="$title"/>
-            <link rel="stylesheet" type="text/css" href="../stylesheet.css" 
-                  title="Style"/>
-          </head>
-          <script>
-            function asd()
-            {
-            parent.document.title="<xsl:value-of select="normalize-space($title)"/>";
-            }
-          </script>
-          <body bgcolor="white" onload="asd();">
-            <!-- =========== START OF NAVBAR =========== -->
-            <a name="navbar_top"><!-- --></a>
-            <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_top_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="../overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="tld-summary.html"><font CLASS="NavBarFont1"><b>Library</b></font></a> </td>
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <font CLASS="NavBarFont1Rev"> Tag </font> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="../help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV TAGLIB -->
-                <!-- NEXT TAGLIB -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="../index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <xsl:element name="a">
-                  <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.fn.html</xsl:attribute>
-                  <xsl:attribute name="target">_top</xsl:attribute>
-                  <b>NO FRAMES</b>
-                </xsl:element> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="../alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-            </table>
-            <!-- =========== END OF NAVBAR =========== -->
-            
-            <hr/>
-            <h2><font size="-1"><xsl:value-of select="$tldname"/></font><br/>
-            Function <xsl:value-of select="javaee:name"/></h2>
-            <code>
-              <xsl:value-of select='substring-before(normalize-space(javaee:function-signature)," ")'/>
-              <b> <xsl:value-of select="javaee:name"/></b>(<xsl:value-of 
-              select='substring-after(normalize-space(javaee:function-signature),"(")'/>
-            </code>
-            <hr/>
-            <xsl:value-of select="javaee:description" disable-output-escaping="yes"/><br/>
-            <p/>
-            <xsl:if test="javaee:example!=''">
-              <b>Example:</b><br/>
-              <pre>
-<xsl:value-of select="javaee:example"/>              
-              </pre>
-              <p/>
-            </xsl:if>
-            <hr/>
-            
-            <!-- Function Information -->
-            <table border="1" cellpadding="3" cellspacing="0" width="100%">
-              <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                <td colspan="2">
-                  <font size="+2">
-                    <b>Function Information</b>
-                  </font>
-                </td>
-              </tr>
-              <tr>
-                <td>Function Class</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="javaee:function-class!=''">
-                      <xsl:value-of select="javaee:function-class"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <i>None</i>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Function Signature</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="javaee:function-signature!=''">
-                      <xsl:value-of select="javaee:function-signature"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <i>None</i>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Display Name</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="javaee:display-name!=''">
-                      <xsl:value-of select="javaee:display-name"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <i>None</i>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-            </table>
-            <br/>
-            <p/>
-            
-            <!-- =========== START OF NAVBAR =========== -->
-            <a name="navbar_bottom"><!-- --></a>
-            <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_bottom_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="../overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="tld-summary.html"><font CLASS="NavBarFont1"><b>Library</b></font></a> </td>
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <font CLASS="NavBarFont1Rev"> Tag </font> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="../help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV TAGLIB -->
-                <!-- NEXT TAGLIB -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="../index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <xsl:element name="a">
-                  <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.fn.html</xsl:attribute>
-                  <xsl:attribute name="target">_top</xsl:attribute>
-                  <b>NO FRAMES</b>
-                </xsl:element> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="../alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-            </table>
-            <!-- =========== END OF NAVBAR =========== -->
-            <hr/>            
-            <small><i>
-            Output Generated by 
-            <a href="http://taglibrarydoc.dev.java.net/" target="_blank">Tag Library Documentation Generator</a>.
-            Java, JSP, and JavaServer Pages are trademarks or 
-            registered trademarks of Sun Microsystems, Inc. in the US and other
-            countries.  Copyright 2002-4 Sun Microsystems, Inc.
-            4150 Network Circle
-            Santa Clara, CA 95054, U.S.A.
-            All Rights Reserved. 
-            </i></small>
-          </body>
-        </html>
-      </xsl:if>
-    </xsl:template>
-
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/help-doc.html.xsl b/jsf-ri/conf/share/tlddoc-resources/help-doc.html.xsl
deleted file mode 100644
index d0f65a5..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/help-doc.html.xsl
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : help-doc.html.xsl
-    Created on : October 2, 2002, 5:37 PM
-    Author     : mroth
-    Description:
-        Creates the help-doc page for Tag Library Documentation Generator
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <HTML>
-        <HEAD>
-          <TITLE>
-            API Help (<xsl:value-of select="/javaee:tlds/javaee:config/javaee:window-title"/>)
-          </TITLE>
-          <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style"/>
-        </HEAD>
-        <SCRIPT>
-          function asd() {
-            parent.document.title="API Help (<xsl:value-of select="normalize-space(/javaee:tlds/javaee:config/javaee:window-title)"/>)";
-          }
-        </SCRIPT>
-        <BODY BGCOLOR="white" onload="asd();">
-          <a name="navbar_top"><!-- --></a>
-          <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_top_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1">  <a href="overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Library </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Tag </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev">     <font CLASS="NavBarFont1Rev"><b>Help</b></font> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 PREV 
-                 NEXT 
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <a HREF="help-doc.html" TARGET="_top"><b>NO FRAMES</b></a> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-          </table>
-          <HR/>
-          <CENTER>
-            <H1>How This Tag Library Document Is Organized</H1>
-          </CENTER>
-          This TLD (Tag Library Descriptor) document has pages corresponding 
-          to the items in the navigation bar, described as follows.
-          <H3>Overview</H3>
-          <BLOCKQUOTE>
-            <P/>
-            The <A HREF="overview-summary.html">Overview</A> page is the front 
-            page of this TLD document and provides a list of all tag libraries
-            with a summary for each.
-          </BLOCKQUOTE>
-          <H3>Library</H3>
-          <BLOCKQUOTE>
-            <P/>
-            Each tag library has a page that contains a list of its 
-            validator, listeners, tags, and functions, with a summary for each.
-            This page can contain four categories:
-            <UL>
-              <li>Validator</li>
-              <li>Listeners</li>
-              <li>Tags</li>
-              <li>Functions</li>
-            </UL>
-          </BLOCKQUOTE>
-          <H3>Validator</H3>
-          <BLOCKQUOTE>
-            <P/>
-            A tag library can have at most one validator.  If a tag library
-            has a validator, it has its own page describing the validator,
-            the class that implements the validator, and the available
-            initialization parameters.
-          </BLOCKQUOTE>
-          <h3>Listeners</h3>
-          <blockquote>
-            <p/>
-            A tag library can have zero or more listeners.  If a tag library
-            has at least one listener, a page is generated that lists all
-            listener classes registered for the tag library.
-          </blockquote>
-          <h3>Tags</h3>
-          <blockquote>
-            <p/>
-            A tag library can have zero or more tags.  Each tag has its own
-            page that describes the tag, its display name, its unique action
-            name, the class that implements the tag, the TagExtraInfo class,
-            the body content type, scripting variable information, attributes,
-            whether the tag supports dynamic attributes, and an optional 
-            example use of the tag.
-          </blockquote>
-          <h3>Functions</h3>
-          <blockquote>
-            <p/>
-            A tag library can contain zero or more EL functions.  If a tag
-            library has at least one function, a page is generated that lists
-            all functions, the class that implements the function, the
-            function signature, and an optional example use of the function.
-          </blockquote>
-          <!--
-          <H3>Index</H3>
-          <BLOCKQUOTE>
-            The <A HREF="index-files/index-1.html">Index</A> contains an 
-            alphabetic list of all validators, listeners, tags, functions, 
-            variables, and attributes.
-          </BLOCKQUOTE>
-          -->
-          <H3>Prev/Next</H3>
-          <blockquote>
-            These links take you to the next or previous validator, listener, 
-            tag, function, or related page.
-          </blockquote>
-          <H3>Frames/No Frames</H3>
-          <blockquote>
-            These links show and hide the HTML frames.  All pages are available 
-            with or without frames.
-          </blockquote>
-          <BR/>
-          <HR/>
-          <a name="navbar_bottom"><!-- --></a>
-          <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_bottom_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1">  <a href="overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Library </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Tag </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev">     <font CLASS="NavBarFont1Rev"><b>Help</b></font> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 PREV 
-                 NEXT 
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <a HREF="help-doc.html" TARGET="_top"><b>NO FRAMES</b></a> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-          </table>
-          <HR/>
-          <small><i>
-          Output Generated by 
-          <a href="http://taglibrarydoc.dev.java.net/" target="_blank">Tag Library Documentation Generator</a>.
-          Java, JSP, and JavaServer Pages are trademarks or 
-          registered trademarks of Sun Microsystems, Inc. in the US and other
-          countries.  Copyright 2002-4 Sun Microsystems, Inc.
-          4150 Network Circle
-          Santa Clara, CA 95054, U.S.A.
-          All Rights Reserved. 
-          </i></small>
-        </BODY>
-      </HTML>
-    </xsl:template>
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/index.html.xsl b/jsf-ri/conf/share/tlddoc-resources/index.html.xsl
deleted file mode 100644
index 1e443a3..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/index.html.xsl
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : index.html.xsl
-    Created on : October 1, 2002, 5:37 PM
-    Author     : mroth
-    Description:
-        Creates the index page for Tag Library Documentation Generator
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <html>
-        <head>
-          <title>
-            <xsl:value-of select="/javaee:tlds/javaee:config/javaee:window-title"/>
-          </title>
-        </head>
-        <frameset cols="20%,80%">
-          <frameset rows="30%,70%">
-            <frame src="overview-frame.html" name="tldListFrame"/>
-            <frame src="alltags-frame.html" name="tldFrame"/>
-          </frameset>
-          <frame src="overview-summary.html" name="tagFrame"/>
-        </frameset>
-        <noframes>
-          <h2>Frame Alert</h2>
-          <p/>
-          This document is designed to be viewed using the frames feature.  
-          If you see this message, you are using a non-frame-capable web 
-          client.
-          <br/>
-          Link to <a href="overview-summary.html">Non-frame version.</a>
-        </noframes>
-      </html>
-    </xsl:template>
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/overview-frame.html.xsl b/jsf-ri/conf/share/tlddoc-resources/overview-frame.html.xsl
deleted file mode 100644
index 1176df8..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/overview-frame.html.xsl
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : overview-frame.html.xsl
-    Created on : October 1, 2002, 5:37 PM
-    Author     : mroth
-    Description:
-        Creates the overview frame (upper left corner), listing all tag 
-        libraries included in this generation.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee">
-    
-    <xsl:output method="html" indent="yes"/>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <html>
-        <head>
-          <title>
-            Overview (<xsl:value-of select="/javaee:tlds/javaee:config/javaee:window-title"/>)
-          </title>
-          <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style"/>
-        </head>
-        <script>
-          function asd() {
-            parent.document.title="Overview (<xsl:value-of select="normalize-space(/javaee:tlds/javaee:config/javaee:window-title)"/>)";
-          }
-        </script>
-        <body bgcolor="white" onload="asd();">
-          <table border="0" width="100%">
-            <tr>
-              <td nowrap="true">
-                <font size="+1" class="FrameTitleFont">
-                  <b><xsl:value-of select="/javaee:tlds/javaee:config/javaee:doc-title"/></b>
-                </font>
-              </td>
-            </tr>
-          </table>
-          <table border="0" width="100%">
-            <tr>
-              <td nowrap="true">
-                <font class="FrameItemFont">
-                  <a href="alltags-frame.html" target="tldFrame"><xsl:text>All Tags / Functions</xsl:text></a>
-                </font>
-                <p/>
-                <font size="+1" class="FrameHeadingFont">
-                  Tag Libraries
-                </font>
-                <br/>
-                <xsl:apply-templates select="javaee:tlds/javaee:taglib"/>
-              </td>
-            </tr>
-          </table>
-          <p/>
-        </body>
-      </html>
-    </xsl:template>
-    
-    <xsl:template match="javaee:taglib">
-      <font class="FrameItemFont">
-        <xsl:element name="a">
-          <xsl:attribute name="href"><xsl:value-of select="javaee:short-name"/>/tld-frame.html</xsl:attribute>
-          <xsl:attribute name="target">tldFrame</xsl:attribute>
-          <xsl:choose>
-            <xsl:when test="javaee:display-name!=''">
-              <xsl:value-of select="javaee:display-name"/>
-            </xsl:when>
-            <xsl:when test="javaee:short-name!=''">
-              <xsl:value-of select="javaee:short-name"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Unnamed TLD
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:element>
-      </font>
-      <br/>
-    </xsl:template>
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/overview-summary.html.xsl b/jsf-ri/conf/share/tlddoc-resources/overview-summary.html.xsl
deleted file mode 100644
index 9a747d8..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/overview-summary.html.xsl
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : overview-summary.html.xsl
-    Created on : October 1, 2002, 5:37 PM
-    Author     : mroth
-    Description:
-        Creates an overview summary (right frame), listing all tag 
-        libraries included in this generation.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <html>
-        <head>
-          <title>
-            Overview (<xsl:value-of select="/javaee:tlds/javaee:config/javaee:window-title"/>)
-          </title>
-          <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style"/>
-        </head>
-        <script>
-          function asd() {
-            parent.document.title="Overview (<xsl:value-of select="normalize-space(/javaee:tlds/javaee:config/javaee:window-title)"/>)";
-          }
-        </script>
-        <body bgcolor="white" onload="asd();">
-          <!-- =========== START OF NAVBAR =========== -->
-          <a name="navbar_top"><!-- --></a>
-          <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_top_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <font CLASS="NavBarFont1Rev"><b> Overview </b></font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Library </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Tag </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV -->
-                <!-- NEXT -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <a HREF="overview-summary.html" TARGET="_top"><b>NO FRAMES</b></a> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-          </table>
-          <!-- =========== END OF NAVBAR =========== -->
-          <hr/>
-          <center>
-            <h2><xsl:value-of select="/javaee:tlds/javaee:config/javaee:doc-title"/></h2>
-          </center>
-          <table BORDER="1" CELLPADDING="3" CELLSPACING="0" CLASS="TagLibraryTable">
-            <tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-              <td COLSPAN="2"><font SIZE="+2">
-                <b>Tag Libraries</b>
-              </font></td>
-            </tr>
-            <xsl:apply-templates select="/javaee:tlds/javaee:taglib"/>
-          </table>
-          <p/>
-          <hr/>
-          <!-- =========== START OF NAVBAR =========== -->
-          <a name="navbar_bottom"><!-- --></a>
-          <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_bottom_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <font CLASS="NavBarFont1Rev"><b> Overview </b></font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Library </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Tag </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV -->
-                <!-- NEXT -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <a HREF="overview-summary.html" TARGET="_top"><b>NO FRAMES</b></a> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-          </table>
-          <!-- =========== END OF NAVBAR =========== -->
-          <hr/>
-          <small><i>
-          Output Generated by 
-          <a href="http://taglibrarydoc.dev.java.net/" target="_blank">Tag Library Documentation Generator</a>.
-          Java, JSP, and JavaServer Pages are trademarks or 
-          registered trademarks of Sun Microsystems, Inc. in the US and other
-          countries.  Copyright 2002-4 Sun Microsystems, Inc.
-          4150 Network Circle
-          Santa Clara, CA 95054, U.S.A.
-          All Rights Reserved. 
-          </i></small>
-        </body>
-      </html>
-    </xsl:template>
-    
-    <xsl:template match="javaee:taglib">
-      <tr BGCOLOR="white" valign="top" CLASS="TableRowColor">
-        <td WIDTH="20%"><b>
-          <xsl:element name="a">
-            <xsl:attribute name="href"><xsl:value-of select="javaee:short-name"/>/tld-summary.html</xsl:attribute>
-            <xsl:choose>
-              <xsl:when test="javaee:display-name!=''">
-                <xsl:value-of select="javaee:display-name"/>
-              </xsl:when>
-              <xsl:when test="javaee:short-name!=''">
-                <xsl:value-of select="javaee:short-name"/>
-              </xsl:when>
-              <xsl:otherwise>
-                Unnamed TLD
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:element>
-        </b></td>
-        <td>
-          <xsl:choose>
-              <xsl:when test="javaee:description!=''">
-                <pre>
-                  <xsl:value-of select="javaee:description" disable-output-escaping="yes"/>
-                </pre>
-              </xsl:when>
-              <xsl:otherwise>
-                <i>No Description</i>
-              </xsl:otherwise>
-          </xsl:choose>
-        </td>
-      </tr>
-    </xsl:template>
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/stylesheet.css b/jsf-ri/conf/share/tlddoc-resources/stylesheet.css
deleted file mode 100644
index 4ea15f4..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/stylesheet.css
+++ /dev/null
@@ -1,461 +0,0 @@
-/* Javadoc style sheet */
-
-/*
- * <license>
- * Copyright (c) 2003-2004, Sun Microsystems, Inc.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright 
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright 
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Sun Microsystems, Inc. nor the names of its 
- *       contributors may be used to endorse or promote products derived from
- *       this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
- * ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * </license>
- */
-
-/* Define colors, fonts and other style attributes here to override the defaults */
-
-/* Page background color */
-body { background-color: #FFFFFF }
-
-/* Table colors */
-.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
-.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
-.TableRowColor         { background: #FFFFFF } /* White */
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont   { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
-.FrameHeadingFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
-.FrameItemFont    { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
-
-/* Example of smaller, sans-serif font in frames */
-/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
-
-/* Navigation bar fonts and colors */
-.NavBarCell1    { background-color:#EEEEFF;}/* Light mauve */
-.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */
-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
-
-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-
-.TagLibraryTable { margin-left: 1em; margin-right: 2em; }
-
-
-.html4strict .de1, .html4strict .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
-.html4strict  {font-family: monospace;}
-.html4strict .imp {font-weight: bold; color: red;}
-.html4strict li {background: #ffffff;}
-.html4strict li.li2 {background: #f8f8f8;}
-.html4strict .kw1 {color: #b1b100;}
-.html4strict .kw2 {color: #000000;}
-.html4strict .kw3 {color: #000066;}
-.html4strict .coMULTI {color: #008800;}
-.html4strict .es0 {color: #000099;}
-.html4strict .br0 {color: #66cc66;}
-.html4strict .st0 {color: #008888;}
-.html4strict .nu0 {color: #cc66cc;}
-.html4strict .sc0 {color: #00bbbb;}
-.html4strict .sc1 {color: #bb44bb;}
-.html4strict .sc2 {color: #009900;}
-.html4strict .sc3 {color: #FF0000;}
-
-/*
-The cleverer parts of this stylesheet came from
-The Layout Reservoir - well worth a look.
-http://www.bluerobot.com/web/layouts/
-*/
-
-body {
-	color:#333;
-	margin:0px;
-	padding:0px;
-	font:11px verdana, arial, helvetica, sans-serif;
-}
-
-h1 {
-	xborder-top: 1px solid #3d8ea8;
-	xborder-bottom: 1px solid #005069;
-	xborder-right: 1px solid #3d8ea8;
-	xborder-left: 1px solid #3d8ea8;
-	background-color: #BFB8AC;
-	color: #ffffff;
-	font-family: trebuchet ms, verdana, sans-serif;
-	font-size: 11px;
-	font-weight: bold;
-	text-align: left;
-	padding: 3px 0px 3px 10px;
-	margin-bottom: 0px;
-	margin-top: 0px; 
-}
-	
-
-p {
-	font:11px/20px verdana, arial, helvetica, sans-serif;
-	margin:0px 10px 10px 10px;
-}
-
-select{
-font:11px/20px verdana, arial, helvetica, sans-serif;
-		
-}
-
-label
-{
-	font-weight:bold;
-}
-
-div.syntax
-{
-background:white;
-}
-
-div.syntax a
-{
-	font-family: 'Courier New', Courier, monospace; 
-	font-weight: normal;
-	color:black;
-	text-decoration:underline;
-}
-
-h1 a{color:white; text-decoration:underline;font-weight:bold;}
-h1 a:link{color:white;}
-h1 a:visited{color:white;}
-h1 a:hover{color:yellow;background-color:transparent;}
-
-#content h1
-{
-background-color: #807A73;
-
-}
-
-#titlebar a{color:white; text-decoration:underline;font-weight:bold;}
-#titlebar a:link{color:white;}
-#titlebar a:visited{color:white;}
-#titlebar a:hover{color:yellow;background-color:transparent;}
-
-/* Change bars from http://www.geocities.com/hentaihelper/2atimlin.htm */
-
-/* put a red "change" bar in the left margin			*/
-/*
-
-a[href^="composite"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/ajax.html"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="ajax"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="ui"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/event.html"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="event"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/metadata.html"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="metadata"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/viewParam.html"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="viewParam"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/selectItems.html"] { cursor: url(changed_modified_2_0_cursor.png), pointer;
-                 background: url(changed_modified_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="selectItems"] { cursor: url(changed_modified_2_0_cursor.png), pointer;
-                 background: url(changed_modified_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/validat"] { cursor: url(changed_modified_2_0_cursor.png), pointer;
-                 background: url(changed_modified_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="validat"] { cursor: url(changed_modified_2_0_cursor.png), pointer;
-                 background: url(changed_modified_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/validateBean.html"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="validateBean"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="f/validateRequired.html"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-a[href^="validateRequired"] { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-
-*/
-
-code { font-size:12px;width:98%;}
-
-.codeedit {	font-size:12px;width:98%;}
-
-
-#titlebar {
-	padding: 0px 0px 0px 5px;
-	height:16px;
-	xborder-top: solid 1px #73a5d3;
-	xborder-bottom: solid 1px #39526b;
-	background-color: #807A73;
-	color: #fff;
-	margin-bottom: 11px;
-}
-
-.nav { margin: 0px 5px 0px 5px; }
-	
-
-
-#Content>p {margin:0px;}
-#Content>p+p {text-indent:30px;}
-
-#content {
-	/* margin:0px 0px 50px 150px; */
-	padding:5px;
-	xbackground-color: #FFF8EC;
-	xborder:1px solid black;
-}
-
-#menu {
-	position:absolute;
-	top:16px;
-	left:0px;
-	width:162px;
-	xpadding:5px;
-	background-color: #FFF5E6;
-	xborder:1px solid black;
-	line-height:17px;
-	overflow: hidden;
-
-	/* IE5 Hack */
-	voice-family: "\"}\"";
-	voice-family:inherit;
-	width:140px;
-}
-
-/* be nice to Opera 5 */
-body>#Menu {width:150px;}
-
-#menu>p {margin:5px 10px 5px 10px;line-height:1.5em;}
-
-li.highlight{ background-color: #D9D0C3; }
-
-#menu ul {
-	margin-left:15px;
-	margin-top:0px;
-	padding-left:0px;
-}
-
-#menu li {
-	list-style-type: square;
-	line-height: 11px;
-	padding-bottom: 3px;
-}
-
-
-#namebox
-{
-	float:left;
-}
-
-#expirybox
-{
-	float:left;
-	margin-left:20px;
-}
-
-#expirybox label
-{
-	padding-left:3px;
-	padding-right:3px;
-	
-}
-
-#expirybox label.current
-{
-	background:#FFF5E6;
-	
-}
-
-#expiryinfo
-{
-	color:#000000;
-	font-style:italic;
-}
-
-#end
-{
-	clear:both;
-}
-
-table.diff 
-{
-	background:white;
-}
-
-table.diff td
-{
-	text-align:right;
-	padding-left:3px;
-	padding-right:3px;
-	font-size:8pt;
-}
-
-table.diff td.code
-{
-	text-align:left;
-	font-family: 'Courier New', Courier, monospace; 
-	font-weight: normal;
-}
-
-table.diff td.code pre
-{
-	margin:0;
-	padding:0;
-}
-
-table.diff tr.new
-{
-	background:#ddddff;
-}
-table.diff tr.old
-{
-	background:#ffdddd;
-}
-table.diff tr.hidenew
-{
-	display:none;
-}
-table.diff tr.hideold
-{
-	display:none;
-}
-
-/* Change bars from http://www.geocities.com/hentaihelper/2atimlin.htm */
-
-/* put a red "change" bar in the left margin			*/
-
-/*
-
-   .changed_added_2_0 { cursor: url(changed_added_2_0_cursor.cur), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-   .changed_modified_2_0 { cursor: url(changed_modified_2_0_cursor.cur), pointer;
-                 background: url(changed_modified_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:orange }
-
-   .changed_deleted_2_0 { cursor: url(changed_deleted_2_0_cursor.cur), pointer;
-                 background: url(changed_deleted_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:red }
-
-
-*/
-   .changed_added_2_0_rev_a { cursor: url(changed_added_2_0_rev_a_cursor.cur), pointer;
-                 background: url(changed_added_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-   .changed_modified_2_0_rev_a { cursor: url(changed_modified_2_0_rev_a_cursor.cur), pointer;
-                 background: url(changed_modified_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:orange }
-
-   .changed_deleted_2_0_rev_a { cursor: url(changed_deleted_2_0_rev_a_cursor.cur), pointer;
-                 background: url(changed_deleted_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:red }
-
-.javadocSection { font-size: large; }
-
diff --git a/jsf-ri/conf/share/tlddoc-resources/tag.html.xsl b/jsf-ri/conf/share/tlddoc-resources/tag.html.xsl
deleted file mode 100644
index 8eee70b..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/tag.html.xsl
+++ /dev/null
@@ -1,456 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : tag.html.xsl
-    Created on : December 18, 2002, 5:22 PM
-    Author     : mroth
-    Description:
-        Creates the tag detail page (right frame), listing the known
-        information for a given tag in a tag library.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-    
-    <xsl:param name="tlddoc-shortName">default</xsl:param>
-    <xsl:param name="tlddoc-tagName">default</xsl:param>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <xsl:apply-templates select="javaee:tlds/javaee:taglib"/>
-    </xsl:template>
-    
-    <xsl:template match="javaee:taglib">
-      <xsl:if test="javaee:short-name=$tlddoc-shortName">
-        <xsl:apply-templates select="javaee:tag|javaee:tag-file"/>
-      </xsl:if>
-    </xsl:template>
-    
-    <xsl:template match="javaee:tag|javaee:tag-file">
-      <xsl:if test="javaee:name=$tlddoc-tagName">
-        <xsl:variable name="tldname">
-          <xsl:choose>
-            <xsl:when test="../javaee:display-name!=''">
-              <xsl:value-of select="../javaee:display-name"/>
-            </xsl:when>
-            <xsl:when test="../javaee:short-name!=''">
-              <xsl:value-of select="../javaee:short-name"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Unnamed TLD
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:variable>
-        <xsl:variable name="title">
-          <xsl:value-of select="javaee:name"/>
-          (<xsl:value-of select="/javaee:tlds/javaee:config/javaee:window-title"/>)
-        </xsl:variable>
-        <html>
-          <head>
-            <title><xsl:value-of select="$title"/></title>
-            <meta name="keywords" content="$title"/>
-            <link rel="stylesheet" type="text/css" href="../stylesheet.css" 
-                  title="Style"/>
-          </head>
-          <script>
-            function asd()
-            {
-            parent.document.title="<xsl:value-of select="normalize-space($title)"/>";
-            }
-          </script>
-          <body bgcolor="white" onload="asd();">
-            <!-- =========== START OF NAVBAR =========== -->
-            <a name="navbar_top"><!-- --></a>
-            <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_top_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="../overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="tld-summary.html"><font CLASS="NavBarFont1"><b>Library</b></font></a> </td>
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <font CLASS="NavBarFont1Rev"> Tag </font> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="../help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV TAGLIB -->
-                <!-- NEXT TAGLIB -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="../index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <xsl:element name="a">
-                  <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.html</xsl:attribute>
-                  <xsl:attribute name="target">_top</xsl:attribute>
-                  <b>NO FRAMES</b>
-                </xsl:element> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="../alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-            </table>
-            <!-- =========== END OF NAVBAR =========== -->
-            
-            <hr/>
-            <h2><font size="-1"><xsl:value-of select="$tldname"/></font><br/>
-            Tag <xsl:value-of select="javaee:name"/></h2>
-            <hr/>
-            <xsl:value-of select="javaee:description" disable-output-escaping="yes"/><br/>
-            <p/>
-            <xsl:if test="javaee:example!=''">
-              <b>Example:</b><br/>
-              <pre>
-<xsl:value-of select="javaee:example"/>              
-              </pre>
-              <p/>
-            </xsl:if>
-            <hr/>
-            
-            <!-- Tag Information -->
-            <table border="1" cellpadding="3" cellspacing="0" width="100%">
-              <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                <td colspan="2">
-                  <font size="+2">
-                    <b>Tag Information</b>
-                  </font>
-                </td>
-              </tr>
-              <tr>
-                <td>Tag Class</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="javaee:tag-class!=''">
-                      <xsl:value-of select="javaee:tag-class"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <i>None</i>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>TagExtraInfo Class</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="javaee:tei-class!=''">
-                      <xsl:value-of select="javaee:tei-class"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <i>None</i>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Body Content</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="javaee:body-content!=''">
-                      <xsl:value-of select="javaee:body-content"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <i>None</i>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Display Name</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="javaee:display-name!=''">
-                      <xsl:value-of select="javaee:display-name"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <i>None</i>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-            </table>
-            <br/>
-            <p/>
-            
-            <!-- Attribute Information -->
-            <table border="1" cellpadding="3" cellspacing="0" width="100%">
-              <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                <td colspan="5">
-                  <font size="+2">
-                    <b>Attributes</b>
-                  </font>
-                </td>
-              </tr>
-              <xsl:choose>
-                <xsl:when test="count(javaee:attribute)>0">
-                  <tr>
-                    <td><b>Name</b></td>
-                    <td><b>Required</b></td>
-                    <td><b>Request-time</b></td>                    
-                    <td><b>Type</b></td>
-                    <td><b>Description</b></td>
-                  </tr>
-                  <xsl:apply-templates select="javaee:attribute"/>
-                </xsl:when>
-                <xsl:otherwise>
-                  <td colspan="5"><i>No Attributes Defined.</i></td>
-                </xsl:otherwise>
-              </xsl:choose>
-            </table>
-            <br/>
-            <p/>
-
-            <!-- Variable Information -->
-            <table border="1" cellpadding="3" cellspacing="0" width="100%">
-              <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                <td colspan="5">
-                  <font size="+2">
-                    <b>Variables</b>
-                  </font>
-                </td>
-              </tr>
-              <xsl:choose>
-                <xsl:when test="count(javaee:variable)>0">
-                  <tr>
-                    <td><b>Name</b></td>
-                    <td><b>Type</b></td>
-                    <td><b>Declare</b></td>
-                    <td><b>Scope</b></td>
-                    <td><b>Description</b></td>
-                  </tr>
-                  <xsl:apply-templates select="javaee:variable"/>
-                </xsl:when>
-                <xsl:otherwise>
-                  <td colspan="2"><i>No Variables Defined.</i></td>
-                </xsl:otherwise>
-              </xsl:choose>
-            </table>
-            <br/>
-            <p/>
-            
-            <!-- =========== START OF NAVBAR =========== -->
-            <a name="navbar_bottom"><!-- --></a>
-            <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_bottom_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="../overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="tld-summary.html"><font CLASS="NavBarFont1"><b>Library</b></font></a> </td>
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <font CLASS="NavBarFont1Rev"> Tag </font> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="../help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV TAGLIB -->
-                <!-- NEXT TAGLIB -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="../index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <xsl:element name="a">
-                  <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.html</xsl:attribute>
-                  <xsl:attribute name="target">_top</xsl:attribute>
-                  <b>NO FRAMES</b>
-                </xsl:element> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="../alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-            </table>
-            <!-- =========== END OF NAVBAR =========== -->
-            <hr/>            
-            <small><i>
-            Output Generated by 
-            <a href="http://taglibrarydoc.dev.java.net/" target="_blank">Tag Library Documentation Generator</a>.
-            Java, JSP, and JavaServer Pages are trademarks or 
-            registered trademarks of Sun Microsystems, Inc. in the US and other
-            countries.  Copyright 2002-4 Sun Microsystems, Inc.
-            4150 Network Circle
-            Santa Clara, CA 95054, U.S.A.
-            All Rights Reserved. 
-            </i></small>
-          </body>
-        </html>
-      </xsl:if>
-    </xsl:template>
-
-    <xsl:template match="javaee:attribute">
-      <tr valign="top">
-        <td><xsl:apply-templates select="javaee:name"/></td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:required!=''">
-              <xsl:value-of select="javaee:required"/>
-            </xsl:when>
-            <xsl:otherwise>false</xsl:otherwise>
-          </xsl:choose>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:rtexprvalue!=''">
-              <xsl:value-of select="javaee:rtexprvalue"/>
-            </xsl:when>
-            <xsl:otherwise>false</xsl:otherwise>
-          </xsl:choose>
-        </td>        
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:deferred-value">
-                <xsl:choose>
-                    <xsl:when test="javaee:deferred-value/javaee:type">
-                        <code>javax.el.ValueExpression</code>
-                        <br/>(<i>must evaluate to </i><code><xsl:value-of
-                                select="javaee:deferred-value/javaee:type"/></code>)
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <code>javax.el.ValueExpression</code>
-                        <br/>(<i>must evaluate to </i><code>java.lang.Object</code>)
-                    </xsl:otherwise>
-                </xsl:choose>                                
-            </xsl:when>
-            <xsl:when test="javaee:deferred-method">
-                <xsl:choose>
-                    <xsl:when test="javaee:deferred-method/javaee:method-signature">
-                        <code>javax.el.MethodExpression</code>
-                        <br/>(<i>signature must match </i><code><xsl:value-of
-                                select="javaee:deferred-method/javaee:method-signature"/></code>)
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <code>javax.el.MethodExpression</code>
-                        <br/>(<i>signature must match </i><code>void methodname()</code>)
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:when>
-            <xsl:when test="javaee:type!=''">
-              <code><xsl:value-of select="javaee:type"/></code>
-            </xsl:when>
-            <xsl:otherwise>
-                <code>java.lang.String</code>                
-            </xsl:otherwise>
-          </xsl:choose>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:description!=''">
-              <xsl:value-of select="javaee:description" disable-output-escaping="yes"/>
-            </xsl:when>
-            <xsl:otherwise><i>No Description</i></xsl:otherwise>
-          </xsl:choose>
-        </td>
-      </tr>
-    </xsl:template>
-    
-    <xsl:template match="javaee:variable">
-      <tr>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:name-given!=''">
-              <xsl:value-of select="javaee:name-given"/>
-            </xsl:when>
-            <xsl:when test="javaee:name-from-attribute!=''">
-              <i>From attribute '<xsl:value-of select="javaee:name-from-attribute"/>'</i>
-            </xsl:when>
-            <xsl:otherwise>
-              <i>Unknown</i>
-            </xsl:otherwise>
-          </xsl:choose>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:variable-class!=''">
-              <code><xsl:value-of select="javaee:variable-class"/></code>
-            </xsl:when>
-            <xsl:otherwise><code>java.lang.String</code></xsl:otherwise>
-          </xsl:choose>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:declare!=''">
-              <xsl:value-of select="javaee:declare"/>
-            </xsl:when>
-            <xsl:otherwise>true</xsl:otherwise>
-          </xsl:choose>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:scope!=''">
-              <xsl:value-of select="javaee:scope"/>
-            </xsl:when>
-            <xsl:otherwise>NESTED</xsl:otherwise>
-          </xsl:choose>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:description!=''">
-              <xsl:value-of select="javaee:description" disable-output-escaping="yes"/>
-            </xsl:when>
-            <xsl:otherwise><i>No Description</i></xsl:otherwise>
-          </xsl:choose>
-        </td>
-      </tr>
-    </xsl:template>
-    
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/tld-frame.html.xsl b/jsf-ri/conf/share/tlddoc-resources/tld-frame.html.xsl
deleted file mode 100644
index 5b97f85..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/tld-frame.html.xsl
+++ /dev/null
@@ -1,188 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : tld-frame.html.xsl
-    Created on : December 18, 2002, 11:40 AM
-    Author     : mroth
-    Description:
-        Creates the TLD frame (lower-left hand corner), listing the tags
-        and functions that are in this particular tag library.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-    
-    <xsl:param name="tlddoc-shortName">default</xsl:param>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <xsl:apply-templates select="javaee:tlds/javaee:taglib"/>
-    </xsl:template>
-    
-    <xsl:template match="javaee:taglib">
-      <xsl:if test="javaee:short-name=$tlddoc-shortName">
-        <xsl:variable name="tldname">
-          <xsl:choose>
-            <xsl:when test="javaee:display-name!=''">
-              <xsl:value-of select="javaee:display-name"/>
-            </xsl:when>
-            <xsl:when test="javaee:short-name!=''">
-              <xsl:value-of select="javaee:short-name"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Unnamed TLD
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:variable>
-        <xsl:variable name="tldfull">
-          <xsl:value-of select="$tldname"/>
-          <xsl:choose>
-            <xsl:when test="javaee:description!=''">
-              (<xsl:value-of select="javaee:description" disable-output-escaping="yes"/>)
-            </xsl:when>
-            <xsl:otherwise>
-              No Description
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:variable>
-        <html>
-          <head>
-            <title>
-              <xsl:value-of select="$tldfull"/>
-            </title>
-            <meta name="keywords" content="$tldfull"/>
-            <link rel="stylesheet" type="text/css" href="../stylesheet.css" 
-                  title="Style"/>
-            <script>
-              function asd()
-              {
-              parent.document.title="<xsl:value-of select="normalize-space($tldfull)"/>";
-              }
-            </script>
-          </head>
-          <body bgcolor="white" onload="asd();">
-            <font size="+1" class="FrameTitleFont">
-              <a href="tld-summary.html" target="tagFrame">
-                <xsl:value-of select="$tldname"/>
-              </a>
-            </font>
-            <table border="0" width="100%">
-              <xsl:if test="(count(javaee:tag)+count(javaee:tag-file))>0">
-                <tr>
-                  <td nowrap="true">
-                    <font size="+1" class="FrameHeadingFont">
-                      Tags
-                    </font> 
-                    <font class="FrameItemFont">
-                      <xsl:apply-templates select="javaee:tag|javaee:tag-file"/>
-                    </font>
-                  </td>
-                </tr>
-              </xsl:if>
-              <xsl:if test="count(javaee:function)>0">
-                <tr>
-                  <td nowrap="true">
-                    <font size="+1" class="FrameHeadingFont">
-                      Functions
-                    </font> 
-                    <font class="FrameItemFont">
-                      <xsl:apply-templates select="javaee:function"/>
-                    </font>
-                  </td>
-                </tr>
-              </xsl:if>
-              <xsl:if test="count(javaee:validator)>0">
-                <tr>
-                  <td nowrap="true">
-                    <font size="+1" class="FrameHeadingFont">
-                      Validator
-                    </font> 
-                    <font class="FrameItemFont">
-                      <xsl:apply-templates select="javaee:validator"/>
-                    </font>
-                  </td>
-                </tr>
-              </xsl:if>
-              <xsl:if test="count(javaee:listener)>0">
-                <tr>
-                  <td nowrap="true">
-                    <font size="+1" class="FrameHeadingFont">
-                      Listeners
-                    </font> 
-                    <font class="FrameItemFont">
-                      <xsl:apply-templates select="javaee:listener"/>
-                    </font>
-                  </td>
-                </tr>
-              </xsl:if>
-            </table>
-            <!-- <table ... -->
-          </body>
-        </html>
-      </xsl:if>
-    </xsl:template>
-    
-    <xsl:template match="javaee:tag|javaee:tag-file">
-      <br/>
-      <xsl:element name="a">
-        <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.html</xsl:attribute>
-        <xsl:attribute name="target">tagFrame</xsl:attribute>
-        <xsl:value-of select="../javaee:short-name"/>:<xsl:value-of select="javaee:name"/>
-      </xsl:element>
-    </xsl:template>
-    
-    <xsl:template match="javaee:function">
-      <br/>
-      <xsl:element name="a">
-        <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.fn.html</xsl:attribute>
-        <xsl:attribute name="target">tagFrame</xsl:attribute>
-        <i><xsl:value-of select="../javaee:short-name"/>:<xsl:value-of select="javaee:name"/>()</i>
-      </xsl:element>
-    </xsl:template>
-    
-    <xsl:template match="javaee:validator">
-      <br/>
-      <xsl:value-of select="javaee:validator-class"/>
-    </xsl:template>
-    
-    <xsl:template match="javaee:listener">
-      <br/>
-      <xsl:value-of select="javaee:listener-class"/>
-    </xsl:template>
-    
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/tld-summary.html.xsl b/jsf-ri/conf/share/tlddoc-resources/tld-summary.html.xsl
deleted file mode 100644
index 24ecefd..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/tld-summary.html.xsl
+++ /dev/null
@@ -1,445 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-    Document   : tld-summary.html.xsl
-    Created on : December 18, 2002, 3:46 PM
-    Author     : mroth
-    Description:
-        Creates the TLD summary (right frame), listing the tags
-        and functions that are in this particular tag library and 
-        their descriptions.
--->
-
-<xsl:stylesheet version="1.0"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-    <xsl:output method="html" indent="yes"/>
-    
-    <xsl:param name="tlddoc-shortName">default</xsl:param>
-
-    <!-- template rule matching source root element -->
-    <xsl:template match="/">
-      <xsl:apply-templates select="javaee:tlds/javaee:taglib"/>
-    </xsl:template>
-    
-    <xsl:template match="javaee:taglib">
-      <xsl:if test="javaee:short-name=$tlddoc-shortName">
-        <xsl:variable name="tldname">
-          <xsl:choose>
-            <xsl:when test="javaee:display-name!=''">
-              <xsl:value-of select="javaee:display-name"/>
-            </xsl:when>
-            <xsl:when test="javaee:short-name!=''">
-              <xsl:value-of select="javaee:short-name"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Unnamed TLD
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:variable>
-        <xsl:variable name="title">
-          <xsl:value-of select="$tldname"/>
-          (<xsl:value-of select="/javaee:tlds/javaee:config/javaee:window-title"/>)
-        </xsl:variable>
-        <html>
-          <head>
-            <title><xsl:value-of select="$title"/></title>
-            <link rel="stylesheet" type="text/css" href="../stylesheet.css" 
-                 title="styie"/>
-          </head>
-          <script>
-            function asd()
-            {
-            parent.document.title="<xsl:value-of select="normalize-space($title)"/>";
-            }
-          </script>
-          <body bgcolor="white" onload="asd();">
-            <!-- =========== START OF NAVBAR =========== -->
-            <a name="navbar_top"><!-- --></a>
-            <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_top_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="../overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">     <font CLASS="NavBarFont1Rev"> Library </font> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Tag </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="../help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV TAGLIB -->
-                <!-- NEXT TAGLIB -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="../index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <a HREF="tld-summary.html" TARGET="_top"><b>NO FRAMES</b></a> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="../alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-            </table>
-            <!-- =========== END OF NAVBAR =========== -->
-            
-            <hr/>
-            <h2><xsl:value-of select="$tldname"/></h2>
-            <hr/>
-            <xsl:if test="(javaee:uri!='') and (javaee:short-name!='')">
-              <b>Standard Syntax:</b><br/>
-              <code>
-                    
-                <xsl:choose>
-                  <xsl:when test='starts-with(javaee:uri,"/WEB-INF/tags")'>
-                    <%@ taglib prefix="<xsl:value-of select="javaee:short-name"/>" tagdir="<xsl:value-of select="javaee:uri"/>" %><br/>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    <%@ taglib prefix="<xsl:value-of select="javaee:short-name"/>" uri="<xsl:value-of select="javaee:uri"/>" %><br/>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </code>
-              <br/>
-              <b>XML Syntax:</b><br/>
-              <code>
-                    
-                <xsl:choose>
-                  <xsl:when test='starts-with(javaee:uri,"/WEB-INF/tags")'>
-                    <anyxmlelement xmlns:<xsl:value-of select="javaee:short-name"/>="urn:jsptagdir:<xsl:value-of select="javaee:uri"/>" /><br/>
-                  </xsl:when>
-                  <xsl:when test='starts-with(javaee:uri,"/")'>
-                    <anyxmlelement xmlns:<xsl:value-of select="javaee:short-name"/>="urn:jsptld:<xsl:value-of select="javaee:uri"/>" /><br/>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    <anyxmlelement xmlns:<xsl:value-of select="javaee:short-name"/>="<xsl:value-of select="javaee:uri"/>" /><br/>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </code>
-              <hr/>
-            </xsl:if>
-            <xsl:choose>
-              <xsl:when test="javaee:description!=''">
-                <pre>
-                  <xsl:value-of select="javaee:description" disable-output-escaping="yes"/>
-                </pre>
-              </xsl:when>
-              <xsl:otherwise>
-                No Description
-              </xsl:otherwise>
-            </xsl:choose>
-            <p/>
-            <table border="1" cellpadding="3" cellspacing="0" width="100%">
-              <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                <td colspan="2">
-                  <font size="+2"><b>Tag Library Information</b></font>
-                </td>
-              </tr>
-              <tr>
-                <td>Display Name</td>
-                <xsl:choose>
-                  <xsl:when test="javaee:display-name!=''">
-                    <td><xsl:value-of select="javaee:display-name"/></td>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    <td><i>None</i></td>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </tr>
-              <tr>
-                <td>Version</td>
-                <xsl:choose>
-                  <xsl:when test="javaee:tlib-version!=''">
-                    <td><xsl:value-of select="javaee:tlib-version"/></td>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    <td><i>None</i></td>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </tr>
-              <tr>
-                <td>Short Name</td>
-                <xsl:choose>
-                  <xsl:when test="javaee:short-name!=''">
-                    <td><xsl:value-of select="javaee:short-name"/></td>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    <td><i>None</i></td>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </tr>
-              <tr>
-                <td>URI</td>
-                <xsl:choose>
-                  <xsl:when test="javaee:uri!=''">
-                    <td><xsl:value-of select="javaee:uri"/></td>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    <td><i>None</i></td>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </tr>
-            </table>
-             
-            <p/>
-            <!-- tags and tag files -->
-            <xsl:if test="(count(javaee:tag)+count(javaee:tag-file)) > 0">
-              <table border="1" cellpadding="3" cellspacing="0" width="100%">
-                <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                  <td colspan="2">
-                    <font size="+2"><b>Tag Summary</b></font>
-                  </td>
-                </tr>
-                <xsl:apply-templates select="javaee:tag|javaee:tag-file"/>
-              </table>
-               
-              <p/>
-            </xsl:if>
-            <!-- functions -->
-            <xsl:if test="count(javaee:function) > 0">
-              <table border="1" cellpadding="3" cellspacing="0" width="100%">
-                <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                  <td colspan="3">
-                    <font size="+2"><b>Function Summary</b></font>
-                  </td>
-                </tr>
-                <xsl:apply-templates select="javaee:function"/>
-              </table>
-               
-              <p/>
-            </xsl:if>
-            <!-- validators -->
-            <xsl:if test="count(javaee:validator) > 0">
-              <table border="1" cellpadding="3" cellspacing="0" width="100%">
-                <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                  <td colspan="2">
-                    <font size="+2"><b>Tag Library Validator</b></font>
-                  </td>
-                </tr>
-                <xsl:apply-templates select="javaee:validator"/>
-              </table>
-               
-              <p/>
-            </xsl:if>
-            <!-- listeners -->
-            <xsl:if test="count(javaee:listener) > 0">
-              <table border="1" cellpadding="3" cellspacing="0" width="100%">
-                <tr bgcolor="#CCCCFF" class="TableHeadingColor">
-                  <td>
-                    <font size="+2"><b>Listeners</b></font>
-                  </td>
-                </tr>
-                <xsl:apply-templates select="javaee:listener"/>
-              </table>
-               
-              <p/>
-            </xsl:if>
-            <!-- taglib-extensions -->
-
-            <!-- =========== START OF NAVBAR =========== -->
-            <a name="navbar_bottom"><!-- --></a>
-            <table border="0" width="100%" cellpadding="1" cellspacing="0">
-            <tr>
-              <td COLSPAN="3" BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-                <a NAME="navbar_bottom_firstrow"><!-- --></a>
-                <table BORDER="0" CELLPADDING="0" CELLSPACING="3">
-                  <tr ALIGN="center" VALIGN="top">
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a href="../overview-summary.html"><font CLASS="NavBarFont1"><b>Overview</b></font></a> </td>
-                    <td BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">     <font CLASS="NavBarFont1Rev"> Library </font> </td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <font CLASS="NavBarFont1"> Tag </font></td>
-                    <td BGCOLOR="#EEEEFF" CLASS="NavBarCell1">     <a HREF="../help-doc.html"><font CLASS="NavBarFont1"><b>Help</b></font></a> </td>
-                  </tr>
-                </table>
-              </td>
-              <td ALIGN="right" VALIGN="top" ROWSPAN="3"><em>
-                </em>
-              </td>
-            </tr>
-            <tr>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                <!-- PREV TAGLIB -->
-                <!-- NEXT TAGLIB -->
-              </font></td>
-              <td BGCOLOR="white" CLASS="NavBarCell2"><font SIZE="-2">
-                 <a HREF="../index.html" TARGET="_top"><b>FRAMES</b></a> 
-                 <a HREF="tld-summary.html" TARGET="_top"><b>NO FRAMES</b></a> 
-                <script>
-                  <!--
-                  if(window==top) {
-                    document.writeln('<A HREF="alltags-noframe.html" TARGET=""><B>All Tags</B></A>');
-                  }
-                  //-->
-                </script>
-                <noscript>
-                  <a HREF="../alltags-noframe.html" TARGET=""><b>All Tags</b></a>
-                </noscript>
-              </font></td>
-            </tr>
-            </table>
-            <!-- =========== END OF NAVBAR =========== -->
-            <hr/>
-            <small><i>
-            Java, JSP, and JavaServer Pages are trademarks or registered 
-            trademarks of Sun Microsystems, Inc. in the US and other countries.
-            Copyright 2002-3 Sun Microsystems, Inc.
-            4150 Network Circle
-            Santa Clara, CA 95054, U.S.A.
-            All Rights Reserved. 
-            </i></small>
-          </body>
-        </html>
-      </xsl:if>
-    </xsl:template>
-    
-    <xsl:template match="javaee:tag|javaee:tag-file">
-      <tr bgcolor="white" class="TableRowColor">
-        <td width="15%">
-          <b>
-            <xsl:element name="a">
-              <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.html</xsl:attribute>
-              <xsl:value-of select="javaee:name"/>
-            </xsl:element>
-          </b>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:description!=''">
-              <xsl:value-of select="javaee:description" disable-output-escaping="yes"/>
-            </xsl:when>
-            <xsl:otherwise>
-              <i>No Description</i>
-            </xsl:otherwise>
-          </xsl:choose>
-        </td>
-      </tr>
-    </xsl:template>
-
-    <xsl:template match="javaee:function">
-      <tr bgcolor="white" class="TableRowColor">
-        <td width="15%" nowrap="" align="right">
-          <code><xsl:value-of select='substring-before(normalize-space(javaee:function-signature)," ")'/></code>
-        </td>
-        <td width="15%" nowrap="">
-          <code><b>
-            <xsl:element name="a">
-              <xsl:attribute name="href"><xsl:value-of select="javaee:name"/>.fn.html</xsl:attribute>
-              <xsl:value-of select="javaee:name"/>
-            </xsl:element>
-            </b>( <xsl:value-of select='substring-after(normalize-space(javaee:function-signature),"(")'/>            
-          </code>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:description!=''">
-              <xsl:value-of select="javaee:description" disable-output-escaping="yes"/>
-            </xsl:when>
-            <xsl:otherwise>
-              <i>No Description</i>
-            </xsl:otherwise>
-          </xsl:choose>
-        </td>
-      </tr>
-    </xsl:template>
-        
-    <xsl:template match="javaee:validator">
-      <tr valign="top" bgcolor="white" class="TableRowColor">
-        <td width="15%">
-          <b><xsl:value-of select="javaee:validator-class"/></b>
-        </td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:description!=''">
-              <xsl:value-of select="javaee:description" disable-output-escaping="yes"/>
-            </xsl:when>
-            <xsl:otherwise>
-              <i>No Description</i>
-            </xsl:otherwise>
-          </xsl:choose>
-          <xsl:if test="count(javaee:init-param)>0">
-            <blockquote>
-              <b>Initialization Parameters:</b><br/>
-              <table border="1">
-                <tr>
-                  <td><b>Name</b></td>
-                  <td><b>Value</b></td>
-                  <td><b>Description</b></td>
-                </tr>
-                <xsl:apply-templates select="javaee:init-param"/>
-              </table>
-            </blockquote>
-          </xsl:if>
-        </td>
-      </tr>
-    </xsl:template>
-    
-    <xsl:template match="javaee:init-param">
-      <tr valign="top">
-        <td><xsl:value-of select="javaee:param-name"/></td>
-        <td><xsl:value-of select="javaee:param-value"/></td>
-        <td>
-          <xsl:choose>
-            <xsl:when test="javaee:param-description!=''">
-              <xsl:value-of select="javaee:param-description"/>
-            </xsl:when>
-            <xsl:otherwise>
-              <i>No Description</i>
-            </xsl:otherwise>
-          </xsl:choose>
-        </td>
-      </tr>
-    </xsl:template>
-    
-    <xsl:template match="javaee:listener">
-      <tr valign="top" bgcolor="white" class="TableRowColor">
-        <td>
-          <b><xsl:value-of select="javaee:listener-class"/></b>
-        </td>
-      </tr>
-    </xsl:template>
-    
-</xsl:stylesheet> 
diff --git a/jsf-ri/conf/share/tlddoc-resources/tld1_1-tld1_2.xsl b/jsf-ri/conf/share/tlddoc-resources/tld1_1-tld1_2.xsl
deleted file mode 100644
index f6db8cb..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/tld1_1-tld1_2.xsl
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-
-  Translates a JSP 1.1 TLD into a JSP 1.2 TLD, using the following 
-  conversion rules:
-
-  1. Change the document type definition for the TLD to:
-     <!DOCTYPE taglib
-         PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
-	 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-  2. Change the <tlibversion> element to <tlib-version>
-  3. Change the optional <jspversion> element to <jsp-version>.  If no
-     element exists, supply one that's set to 1.2
-  4. Change the <shortname> element to <short-name>
-  5. Preserve the original optional <uri> tag
-  6. Change the optional <info> tag to <description>
-  7. Preserve each tag/name
-  8. Change each tag/tagclass to tag/tag-class
-  9. Change each optional tag/teiclass to tag/tei-class
-  10. Change each optional tag/bodycontent to tag/body-content
-  11. Change each optional tag/info to tag/description
-  12. Preserve each tag/attribute element and its contents.
-
-  Side-effect: Strips the id attributes
-
-  Author: Mark Roth
-
--->
-
-<xsl:stylesheet version="1.0"
-		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="xml" indent="yes"
-      doctype-system="http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"
-      doctype-public="-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"/>
-
-  <xsl:template match="/taglib">
-    <taglib>
-      <xsl:apply-templates select="tlibversion"/>
-      <jsp-version>1.2</jsp-version>
-      <xsl:apply-templates select="shortname"/>
-      <xsl:apply-templates select="uri"/>
-      <xsl:apply-templates select="info"/>
-      <xsl:apply-templates select="tag"/>
-    </taglib>
-  </xsl:template>
-
-  <!-- Rename to tlib-version -->
-  <xsl:template match="tlibversion">
-    <tlib-version><xsl:apply-templates/></tlib-version>
-  </xsl:template>
-
-  <!-- Rename to jsp-version -->
-  <xsl:template match="jspversion">
-    <jsp-version><xsl:apply-templates/></jsp-version>
-  </xsl:template>
-
-  <!-- Rename to short-name -->
-  <xsl:template match="shortname">
-    <short-name><xsl:apply-templates/></short-name>
-  </xsl:template>
-
-  <!-- Preserve uri -->
-  <xsl:template match="uri">
-    <uri><xsl:apply-templates/></uri>
-  </xsl:template>
-
-  <!-- Rename to description -->
-  <xsl:template match="info">
-    <description><xsl:apply-templates/></description>
-  </xsl:template>
-
-  <xsl:template match="tag">
-    <tag>
-      <xsl:apply-templates select="name"/>
-      <xsl:apply-templates select="tagclass"/>
-      <xsl:apply-templates select="teiclass"/>
-      <xsl:apply-templates select="bodycontent"/>
-      <xsl:apply-templates select="info"/>
-      <xsl:apply-templates select="attribute"/>
-    </tag>
-  </xsl:template>
-
-  <!-- Preserve name -->
-  <xsl:template match="name">
-    <name><xsl:apply-templates/></name>
-  </xsl:template>
-
-  <!-- Rename to tag-class -->
-  <xsl:template match="tagclass">
-    <tag-class><xsl:apply-templates/></tag-class>
-  </xsl:template>
-
-  <!-- Rename to tei-class -->
-  <xsl:template match="teiclass">
-    <tei-class><xsl:apply-templates/></tei-class>
-  </xsl:template>
-
-  <!-- Rename to body-content -->
-  <xsl:template match="bodycontent">
-    <body-content><xsl:apply-templates/></body-content>
-  </xsl:template>
-
-  <!-- Rename to description -->
-  <xsl:template match="info">
-    <description><xsl:apply-templates/></description>
-  </xsl:template>
-
-  <!-- Preserve attribute -->
-  <xsl:template match="attribute">
-    <attribute> 
-      <xsl:apply-templates/>
-    </attribute>
-  </xsl:template>
-
-  <xsl:template match="@*|node()">
-    <xsl:copy>
-      <xsl:apply-templates select="@*|node()"/>
-    </xsl:copy>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/jsf-ri/conf/share/tlddoc-resources/tld1_2-tld2_0.xsl b/jsf-ri/conf/share/tlddoc-resources/tld1_2-tld2_0.xsl
deleted file mode 100644
index e55aa40..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/tld1_2-tld2_0.xsl
+++ /dev/null
@@ -1,290 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-
-  Translates a JSP 1.2 TLD into a JSP 2.0 TLD, using the following 
-  conversion rules:
-
-  1. Change the <taglib> element to read as follows:
-     <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-         http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
-  2. Remove all id attributes from all elements.
-  3. Remove <jsp-version> element and add an attribute to <taglib>
-     called 'version' with the value "2.0".
-  4. Under <taglib>, if a <description> element exists, move it to
-     the top.
-  5. Under <taglib>, if a <display-name> element exists, move it
-     to the top, after the <description> element.
-  6. Under <taglib>, if a <small-icon> and/or <large-icon> element
-     exists, wrap them in an <icon> element and move it to the
-     top, after the <display-name> element.
-  7. For each taglib/validator element, if a <description> element
-     exists, move it to the top, under <validator>.
-  8. For each taglib/validator/init-param element, if a
-     <description> element exists, move it to the top, under
-     <init-param>.
-  9. For each taglib/tag element, if a <description> element
-     exists, move it to the top, under <tag>.
- 10. For each taglib/tag element, if a <display-name> element
-     exists, move it to the top, after the <description> element,
-     under <tag>.
- 11. For each taglib/tag element, if a <small-icon> and/or
-     <large-icon> element exists, wrap them in an <icon> element
-     and move it to the top, after the <display-name> element,
-     under <tag>.
- 12. For each taglib/tag element, if no <body-content> element 
-     exists, supply a default value of "JSP"
- 13. For each taglib/tag/variable element, if a <description>
-     element exists, move it to the top, under <variable>.
- 14. For each taglib/tag/attribute element, if a <description>
-     element exists, move it to the top, under <attribute>.
-
-  Author: Mark Roth
-
--->
-
-<xsl:stylesheet version="1.0"
-		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="xml" indent="yes"/>
-
-  <xsl:template match="/taglib">
-    <xsl:element name="taglib" namespace="http://java.sun.com/xml/ns/j2ee">
-      <xsl:attribute name="xsi:schemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance">http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</xsl:attribute>
-      <xsl:attribute name="version">2.0</xsl:attribute>
-      <xsl:apply-templates select="description"/>
-      <xsl:apply-templates select="display-name"/>
-      <xsl:if test="small-icon|large-icon">
-        <icon xmlns="http://java.sun.com/xml/ns/j2ee">
-	  <xsl:apply-templates select="small-icon"/>
-	  <xsl:apply-templates select="large-icon"/>
-        </icon>
-      </xsl:if>
-      <xsl:apply-templates select="tlib-version"/>
-      <xsl:apply-templates select="short-name"/>
-      <xsl:apply-templates select="uri"/>
-      <xsl:apply-templates select="validator"/>
-      <xsl:apply-templates select="listener"/>
-      <xsl:apply-templates select="tag"/>
-    </xsl:element>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="description">
-    <description xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </description>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="display-name">
-    <display-name xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </display-name>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="tlib-version">
-    <tlib-version xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </tlib-version>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="short-name">
-    <short-name xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </short-name>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="uri">
-    <uri xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </uri>
-  </xsl:template>
-
-  <xsl:template match="validator">
-    <validator xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates select="description"/>
-      <xsl:apply-templates select="validator-class"/>
-      <xsl:apply-templates select="init-param"/>
-    </validator>
-  </xsl:template>
-
-  <xsl:template match="init-param">
-    <init-param xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates select="description"/>
-      <xsl:apply-templates select="param-name"/>
-      <xsl:apply-templates select="param-value"/>
-    </init-param>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="param-name">
-    <param-name xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </param-name>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="param-value">
-    <param-value xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </param-value>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="listener">
-    <listener xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates select="listener-class"/>
-    </listener>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="listener-class">
-    <listener-class xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </listener-class>
-  </xsl:template>
-
-  <xsl:template match="tag">
-    <tag xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates select="description"/>
-      <xsl:apply-templates select="display-name"/>
-      <xsl:if test="small-icon|large-icon">
-        <icon xmlns="http://java.sun.com/xml/ns/j2ee">
-	  <xsl:apply-templates select="small-icon"/>
-	  <xsl:apply-templates select="large-icon"/>
-        </icon>
-      </xsl:if>
-      <xsl:apply-templates select="name"/>
-      <xsl:apply-templates select="tag-class"/>
-      <xsl:apply-templates select="tei-class"/>
-      <xsl:choose>
-	<xsl:when test="body-content">
-          <xsl:apply-templates select="body-content"/>
-	</xsl:when>
-	<xsl:otherwise>
-	  <!-- 
-	    - Explicitly Insert the default body-content since this is 
-	    - now a required element
-	    -->
-	  <body-content xmlns="http://java.sun.com/xml/ns/j2ee">JSP</body-content>
-	</xsl:otherwise>
-      </xsl:choose>
-      <xsl:apply-templates select="variable"/>
-      <xsl:apply-templates select="attribute"/>
-      <xsl:apply-templates select="example"/>
-    </tag>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="name">
-    <name xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </name>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="tag-class">
-    <tag-class xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </tag-class>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="tei-class">
-    <tei-class xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </tei-class>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="body-content">
-    <body-content xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </body-content>
-  </xsl:template>
-
-  <xsl:template match="variable">
-    <variable xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates select="description"/>
-      <xsl:apply-templates select="name-given"/>
-      <xsl:apply-templates select="name-from-attribute"/>
-      <xsl:apply-templates select="variable-class"/>
-      <xsl:apply-templates select="declare"/>
-      <xsl:apply-templates select="scope"/>
-    </variable>
-  </xsl:template>
-
-  <xsl:template match="attribute">
-    <attribute xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates select="description"/>
-      <xsl:apply-templates select="name"/>
-      <xsl:apply-templates select="required"/>
-      <xsl:apply-templates select="rtexprvalue"/>
-      <xsl:apply-templates select="type"/>
-    </attribute>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="required">
-    <required xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </required>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="rtexprvalue">
-    <rtexprvalue xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </rtexprvalue>
-  </xsl:template>
-
-  <!-- Strip the id attribute: -->
-  <xsl:template match="example">
-    <example xmlns="http://java.sun.com/xml/ns/j2ee">
-      <xsl:apply-templates/>
-    </example>
-  </xsl:template>
-
-  <xsl:template match="@*|node()">
-    <xsl:copy>
-      <xsl:apply-templates select="@*|node()"/>
-    </xsl:copy>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/jsf-ri/conf/share/tlddoc-resources/tld2_0-tld2_1.xsl b/jsf-ri/conf/share/tlddoc-resources/tld2_0-tld2_1.xsl
deleted file mode 100644
index 7ee5f2f..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/tld2_0-tld2_1.xsl
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-
-  Identity transformation (changing from the J2EE namespace
-  to the Java EE namespace), added for flexibility.  
-
-  1. Change the <taglib> element to read as follows:
-     <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-         http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">                    
-         
-  Author: Mark Roth
-
--->
-
-<xsl:stylesheet version="1.0"
-		xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-                xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
-  <xsl:output method="xml" indent="yes"/>
-
-  <xsl:template match="/j2ee:taglib">
-    <xsl:element name="taglib" namespace="http://java.sun.com/xml/ns/javaee">
-      <xsl:attribute name="xsi:schemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance">http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd</xsl:attribute>
-      <xsl:attribute name="version">2.1</xsl:attribute>
-      <xsl:apply-templates select="*"/>
-    </xsl:element>
-  </xsl:template>
-
-  <xsl:template match="j2ee:*">
-    <xsl:element name="{local-name()}" namespace="http://java.sun.com/xml/ns/javaee">
-        <xsl:copy-of select="@*"/>
-        <xsl:apply-templates/>
-    </xsl:element>
-  </xsl:template>
-    
-</xsl:stylesheet>
diff --git a/jsf-ri/conf/share/tlddoc-resources/tld2_1-tld2_1.xsl b/jsf-ri/conf/share/tlddoc-resources/tld2_1-tld2_1.xsl
deleted file mode 100644
index b224c35..0000000
--- a/jsf-ri/conf/share/tlddoc-resources/tld2_1-tld2_1.xsl
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-
-<!--
-  - <license>
-  - Copyright (c) 2003-2004, Sun Microsystems, Inc.
-  - All rights reserved.
-  - 
-  - Redistribution and use in source and binary forms, with or without 
-  - modification, are permitted provided that the following conditions are met:
-  - 
-  -     * Redistributions of source code must retain the above copyright 
-  -       notice, this list of conditions and the following disclaimer.
-  -     * Redistributions in binary form must reproduce the above copyright 
-  -       notice, this list of conditions and the following disclaimer in the
-  -       documentation and/or other materials provided with the distribution.
-  -     * Neither the name of Sun Microsystems, Inc. nor the names of its 
-  -       contributors may be used to endorse or promote products derived from
-  -       this software without specific prior written permission.
-  - 
-  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
-  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-  - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-  - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-  - ROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  - PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS
-  - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  - </license>
-  -->
-
-<!--
-
-  Identity transformation, added for flexibility.  
-         
-  1. Remove any tag-extension, function-extension and taglib-extension
-     elements.
-         
-  Author: Mark Roth
-
--->
-
-<xsl:stylesheet version="1.0"
-		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:javaee="http://java.sun.com/xml/ns/javaee">               
-  <xsl:output method="xml" indent="yes"/>  
-
-  <xsl:template match="/javaee:taglib">
-      <xsl:element name="taglib" namespace="http://java.sun.com/xml/ns/javaee">
-          <xsl:attribute name="xsi:schemaLocation"
-                         namespace="http://www.w3.org/2001/XMLSchema-instance">http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd</xsl:attribute>
-          <xsl:attribute name="version">2.1</xsl:attribute>
-          <xsl:apply-templates select="*"/>
-      </xsl:element>      
-  </xsl:template>
-  
-  <xsl:template match="javaee:tag-extension">
-  </xsl:template>
-  
-  <xsl:template match="javaee:function-extension">
-  </xsl:template>
-  
-  <xsl:template match="javaee:taglib-extension">
-  </xsl:template>
-
-  <xsl:template match="@*|node()">
-    <xsl:copy>
-      <xsl:apply-templates select="@*|node()"/>
-    </xsl:copy>
-  </xsl:template>
-  
-  <xsl:template match="text()">
-    <xsl:value-of select="normalize-space(.)" />
-  </xsl:template>
-  
-</xsl:stylesheet>
diff --git a/jsf-ri/conf/share/ui.taglib.xml b/jsf-ri/conf/share/ui.taglib.xml
deleted file mode 100644
index a9358d9..0000000
--- a/jsf-ri/conf/share/ui.taglib.xml
+++ /dev/null
@@ -1,1026 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-                version="2.0">
-    <description>
-
-        </pre>
-
-        <div class="changed_added_2_0">
-
-        <p>The tags in this library add templating&#8212;a powerful
-        view composition technique&#8212;to JSF.
-        Templating is so useful that there are entire frameworks, such as Tiles
-        and SiteMesh, that are built
-        around the concept of templating. So what is templating, how can you
-        benefit from it, and how does
-        this tag library implement it?
-        </p>
-
-        <p>If you've used JSP before, you've probably used <code>jsp:include</code>.
-        The prototypical example for
-        <code>jsp:include</code> is a header on each page in a web
-        application. One JSP page, say header.jsp,
-        encapsulates the header content, and the header is included by each
-        page. You <em>encapsulate and reuse
-        content</em>, so that changes to one file, header.jsp, affect the
-        header on every page.
-        </p>
-
-        <p>This tab library contains a tag&#8212<code>ui:include</code>&#8212
-        that's analagous to <code>jsp:include</code>,
-        but encapsulating and reusing content is only half the templating story,
-        because templating also lets you
-        <em>encapsulate and reuse <b>layout</b></em>.
-        You define a single <em>template</em> (meaning layout), and
-        you reuse
-        that template with multiple <em>compositions</em>. So now
-        you can control the layout of many pages with a single
-        template (layout). Let's take a look at an example.
-        </p>
-
-        <h3>A Templating Example</h3>
-
-        <p>
-        First, we define a template:
-        </p>
-        <div class="syntax"><div class="html4strict"
-        style="font-family: monospace;"><ol><li class="li1"><div
-        class="de1"><span class="sc0">&lt;!DOCTYPE html PUBLIC
-        &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2"><span class="sc3"><span
-        class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span
-        class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp; &nbsp; xmlns:<span class="re0">ui</span>=<span
-        class="st0">&quot;http://java.sun.com/jsf/facelets&quot;</span></div></li>
-
-        <li class="li1"><div class="de1">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;head<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;link</span>
-        <span class="re0">href</span>=<span class="st0">&quot;styles.css&quot;</span>
-        <span class="re0">rel</span>=<span class="st0">&quot;stylesheet&quot;</span>
-        <span class="re0">type</span>=<span class="st0">&quot;text/css&quot;</span><span
-        class="re2">/&gt;</span></span></div></li>
-
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;title<span
-        class="re2">&gt;</span></span></span><span
-        class="sc3"><span class="re1">&lt;ui</span>:insert
-        <span class="re0">name</span>=<span class="st0">&quot;title&quot;</span><span
-        class="re2">&gt;</span></span>Default Title<span
-        class="sc3"><span class="re1">&lt;/ui</span>:insert<span
-        class="re2">&gt;</span></span><span class="sc3"><span
-        class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;/head<span class="re2">&gt;</span></span></span></div></li>
-
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;body<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;ui</span>:debug<span
-        class="re2">/&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;div</span>
-        <span class="re0">class</span>=<span class="st0">&quot;heading&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:insert
-        <span class="re0">name</span>=<span class="st0">&quot;heading&quot;</span><span
-        class="re2">/&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;/div<span
-        class="re2">&gt;</span></span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;div</span>
-        <span class="re0">class</span>=<span class="st0">&quot;content&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:insert
-        <span class="re0">name</span>=<span class="st0">&quot;content&quot;</span><span
-        class="re2">/&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;/div<span
-        class="re2">&gt;</span></span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;/body<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li2"><div class="de2"><span class="sc3"><span
-        class="re1">&lt;/html<span class="re2">&gt;</span></span></span>
-        </div></li></ol></div></div>
-
-        <p>
-        In the preceeding listing, we've defined a layout, also known as a
-        template. That template uses the
-        <code>ui:insert</code> tag to insert pieces of a page &#8212namely,
-        title, heading, and content&#8212
-        defined in a <em>composition</em>. Notice that on line 8, we
-        define a default title, in case one isn't provided
-        by the composition. Also note that on line 12 we have the <code>ui:debug</code>
-        tag, which lets the user activate
-        a popup window with debugging information by typing CTRL + Shift + d.
-        </p>
-
-        <p>
-        The title, heading, and content pieces of the page referenced in the
-        template are defined in a separate XHTML
-        file in a composition, like this:
-        </p>
-
-        <div class="syntax"><div class="html4strict"
-        style="font-family: monospace;"><ol><li class="li1"><div
-        class="de1"><span class="sc0">&lt;!DOCTYPE html PUBLIC
-        &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2"><span class="sc3"><span
-        class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span
-        class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp;xmlns:<span
-        class="re0">ui</span>=<span class="st0">&quot;http://java.sun.com/jsf/facelets&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; <span
-        class="sc3"><span class="re1">&lt;body<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;ui</span>:composition
-        <span class="re0">template</span>=<span class="st0">&quot;/layout.xhtml&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;ui</span>:define
-        <span class="re0">name</span>=<span class="st0">&quot;title&quot;</span><span
-        class="re2">&gt;</span></span>A List of Contacts<span
-        class="sc3"><span class="re1">&lt;/ui</span>:define<span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;ui</span>:define
-        <span class="re0">name</span>=<span class="st0">&quot;heading&quot;</span><span
-        class="re2">&gt;</span></span>Contacts<span
-        class="sc3"><span class="re1">&lt;/ui</span>:define<span
-        class="re2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;ui</span>:define
-        <span class="re0">name</span>=<span class="st0">&quot;content&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:include
-        <span class="re0">src</span>=<span class="st0">&quot;contactsTable.xhtml&quot;</span>
-        <span class="re2">/&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;/ui</span>:define<span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;/ui</span>:composition<span
-        class="re2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; <span
-        class="sc3"><span class="re1">&lt;/body<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li1"><div class="de1"><span class="sc3"><span
-        class="re1">&lt;/html<span class="re2">&gt;</span></span></span>
-        </div></li></ol></div></div>
-
-        <p>
-        At runtime, JSF synthesizes the two previous XHTML pages to create a
-        single JSF view by inserting the
-        pieces defined in the composition into the template (that template is
-        layout.xhtml, which is the first
-        listing above). JSF also disregards everything outside of the <code>composition</code>
-        tag so that we don't
-        wind up with two <code>body</code> elements in the view.
-        Also, note that we use the <code>ui:include</code>
-        tag on line 14 to include content (which happens to be a table) from
-        another XHTML page, so that we can reuse
-        that table in other views.
-        </p>
-
-        <p>
-        So why do we have two XHTML pages to define a single view? Why not
-        simply take the pieces and manually insert
-        them into the layout so that we have only a single XHTML page? The
-        answer is simple: we have separated layout
-        from the content so that we can <em>reuse that layout</em>
-        among multiple compositions. For example, now we can
-        define another composition that uses the same layout:
-        </p>
-
-        <div class="syntax"><div class="html4strict"
-        style="font-family: monospace;"><ol><li class="li1"><div
-        class="de1"><span class="sc0">&lt;!DOCTYPE html PUBLIC
-        &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp;</div></li>
-        <li class="li2"><div class="de2"><span class="sc3"><span
-        class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span
-        class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        xmlns:<span class="re0">ui</span>=<span class="st0">&quot;http://java.sun.com/jsf/facelets&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; <span
-        class="sc3"><span class="re1">&lt;body<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;ui</span>:composition
-        <span class="re0">template</span>=<span class="st0">&quot;/layout.xhtml&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;ui</span>:define
-        <span class="re0">name</span>=<span class="st0">&quot;title&quot;</span><span
-        class="re2">&gt;</span></span>Create a Contact<span
-        class="sc3"><span class="re1">&lt;/ui</span>:define<span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;ui</span>:define
-        <span class="re0">name</span>=<span class="st0">&quot;heading&quot;</span><span
-        class="re2">&gt;</span></span>Create Contact&lt;/ui</span>:define<span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;ui</span>:define
-        <span class="re0">name</span>=<span class="st0">&quot;content&quot;</span><span
-        class="re2">&gt;</span></span></div></li>
-        <li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp;
-        &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:include
-        <span class="re0">src</span>=<span class="st0">&quot;createContactForm.xhtml&quot;</span><span
-        class="re2">/&gt;</span></span></div></li>
-
-        <li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp;
-        <span class="sc3"><span class="re1">&lt;/ui</span>:define<span
-        class="re2">&gt;</span></span></div></li>
-
-        <li class="li2"><div class="de2">&nbsp;</div></li>
-
-        <li class="li2"><div class="de2">&nbsp; &nbsp; <span
-        class="sc3"><span class="re1">&lt;/ui</span>:composition<span
-        class="re2">&gt;</span></span></div></li>
-        <li class="li1"><div class="de1">&nbsp; <span
-        class="sc3"><span class="re1">&lt;/body<span class="re2">&gt;</span></span></span></div></li>
-        <li class="li2"><div class="de2"><span class="sc3"><span
-        class="re1">&lt;/html<span class="re2">&gt;</span></span></span>
-        </div></li></ol></div></div>
-
-        <p>
-        By encapsulating the layout, we can reuse that layout among multiple
-        compositions. Just like
-        <code>ui:include</code> lets us encapsulate and reuse
-        conent, JSF compositions let us encapsulate and reuse
-        layout, so that changes to a single layout can affect multiple views.
-        Fundamentally, that's what this
-        tag library is all about.
-        </p>
-
-        </div>
-        <pre>
-
-    </description>
-    <namespace>http://java.sun.com/jsf/facelets</namespace>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>
-            This tag is the same as the <code>ui:composition</code>,
-            except for two things:
-            JSF creates a component and adds it directly to the tree, and
-            there's no associated
-            template.
-            </p>
-
-            <p>
-            Use this tag to create a component and specify a filename for the
-            component as either the source of a <code>ui:include</code>,
-            or the source of a Facelets tag.
-            </p>
-            </div>
-
-        </description>
-        <tag-name>component</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.ComponentRefHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                The identifier of the component that JSF inserts into the
-                component tree. If an identifier is
-                not explicitly specified by the page author, JSF will assign an
-                identifier based on the algorithm
-                that it uses for all components.
-                </p>
-                </div>
-
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                Binds the component to a backing bean property, as specified in
-                the JSF specification.
-                </p>
-                </div>
-
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>
-            Defines a composition that optionally uses a template, as outlined
-            in the description of the ui tag library. Multiple
-            compositions can use the same template, thus encapsulating and
-            reusing layout. JSF disregards everything outside of the
-            composition, which lets developers embed compositions in well-formed
-            XHTML pages that can be viewed in an XHTML viewer,
-            such as Dreamweaver or a browser, without including extraneous
-            elements such as <code>head</code> and <code>body</code>.
-            </p>
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1"><span class="sc0">&lt;!DOCTYPE html PUBLIC
-            &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</div></li>
-
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span></div></li>
-            <li class="li1"><div class="de1">&nbsp;</div></li>
-            <li class="li2"><div class="de2"><span class="sc3"><span
-            class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span
-            class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;xmlns:<span
-            class="re0">ui</span>=<span class="st0">&quot;http://java.sun.com/jsf/facelets&quot;</span><span
-            class="re2">&gt;</span></span></div></li>
-
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1">&nbsp; <span
-            class="sc3"><span class="re1">&lt;body<span
-            class="re2">&gt;</span></span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            THIS LINE, AND EVERYTHING ABOVE IT IS DISREGARDED BY JSF</div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            <span class="sc3"><span class="re1">&lt;ui</span>:composition
-            <span class="re0">template</span>=<span class="st0">&quot;/layout.xhtml&quot;</span><span
-            class="re2">&gt;</span></span></div></li>
-
-            <li class="li1"><div class="de1">&nbsp;</div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:define
-            <span class="re0">name</span>=<span class="st0">&quot;title&quot;</span><span
-            class="re2">&gt;</span></span>#{msgs.contactsWindowTitle}<span
-            class="sc3"><span class="re1">&lt;/ui</span>:define<span
-            class="re2">&gt;</span></span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:define
-            <span class="re0">name</span>=<span class="st0">&quot;heading&quot;</span><span
-            class="re2">&gt;</span></span>#{msgs.contactsHeading}<span
-            class="sc3"><span class="re1">&lt;/ui</span>:define<span
-            class="re2">&gt;</span></span></div></li>
-
-            <li class="li2"><div class="de2">&nbsp;</div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:define
-            <span class="re0">name</span>=<span class="st0">&quot;content&quot;</span><span
-            class="re2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ui</span>:include
-            <span class="re0">src</span>=<span class="st0">&quot;contactsTable.xhtml&quot;</span>
-            <span class="re2">/&gt;</span></span></div></li>
-
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; <span class="sc3"><span class="re1">&lt;/ui</span>:define<span
-            class="re2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            &nbsp; &nbsp; &nbsp;</div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            <span class="sc3"><span class="re1">&lt;/ui</span>:composition<span
-            class="re2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; &nbsp;
-            THIS LINE, AND EVERYTHING BELOW IT IS DISREGARDED BY JSF</div></li>
-
-            <li class="li1"><div class="de1">&nbsp;</div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc3"><span class="re1">&lt;/body<span
-            class="re2">&gt;</span></span></span></div></li>
-            <li class="li1"><div class="de1"><span class="sc3"><span
-            class="re1">&lt;/html<span class="re2">&gt;</span></span></span>
-            </div></li></ol></div></div>
-
-            </div>
-
-        </description>
-        <tag-name>composition</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.CompositionHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                A URI that points to a template, also known as a layout, that
-                inserts pieces of the page defined in the composition.
-                </p>
-                </div>
-
-            </description>
-            <name>template</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>
-            When the <code>ui:debug</code> tag is placed in an XHTML
-            page, it creates a component and adds it to the
-            component tree. That debug component captures debugging information,
-            namely the current state of the component
-            tree and the scoped variables in the application, when the component
-            is rendered. If the user presses CTRL + SHIFT + d,
-            JSF opens a window that shows the debugging information captured by
-            the debug component.
-            </p>
-
-            <p>
-            Typically, the best place to put the <code>ui:debug</code>
-            tag is in an application's main template, which
-            lets developers enable or disable viewing of debugging information
-            in one central location. Additionally, page
-            authors can change the hotkey (which by default is CTRL + SHIFT + d,
-            where the d stands for debug) to CTRL + SHIFT + ?,
-            where ? represents the key specified as the value of the <code>hotkey</code>
-            attribute.
-            </p>
-
-            <p>
-            You can use the <code>rendered</code> attribute to
-            control whether the debug component is rendered.
-            Using an EL expression as the value for the <code>rendered</code>
-            attribute lets you control whether
-            debug output is enabled for multiple views based on a single bean
-            property.
-            </p>
-            </div>
-
-        </description>
-        <tag-name>debug</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.UIDebug</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                Defines a single character, that, pressed in conjunction with
-                CTRL and SHIFT, will display the JSF debug window.
-                By default, the hotkey is 'd'. <em>The value for the
-                hotkey attribute cannot be an EL expression.</em>
-                </p>
-
-                </div>
-
-            </description>
-            <name>hotkey</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                <p>
-                Controls whether the debug component is rendered. Valid values
-                for this attribute are either the strings "true" or "false" or
-                an EL expression that evaluates to either "true" or "false".<p>If
-                this attribute's value is "false" or the value is an EL
-                expression that evaluates to "false", the debug component is not
-                rendered in the page, the hotkey attribute is disregarded, and
-                users cannot open the debugging information window with a
-                hotkey.</p>
-                </p>
-
-                </div>
-
-            </description>
-            <name>rendered</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-
-            <p>The <code>define</code> tag defines content
-            that is inserted into a page by a template. The <code>define</code>
-            tag can be used inside <code>ui:composition</code>, <code>ui:component</code>,
-            <code>ui:decorate</code>, and <code>ui:fragment</code>
-            tags.</p>
-
-            <p>Content defined by the <code>define</code> tag
-            can be inserted into a page by using <code>ui:insert</code>.
-            </p>
-
-            </div>
-
-        </description>
-        <tag-name>define</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.DefineHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-
-                <p>Assigns a name to the content inside a <code>define</code>
-                tag. That name is used by corresponding <code>ui:insert</code>
-                tags in a template that insert the named content into a page.</p>
-                </div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-
-            <p>
-            The <code>decorate</code> tag is identical to the <code>composition</code>
-            tag, except that <code>ui:decorate</code>, unlike <code>ui:composition</code>,
-            does not disregard all content outside of the tag. The <code>decorate</code>
-            is useful when you want to decorate some content in a page, for
-            example, you might want to decorate a list of items, like this:
-
-            <div class="syntax"><div class="html4strict"
-            style="font-family: monospace;"><ol><li class="li1"><div
-            class="de1">
-
-            <span class="sc2">&lt;ui:decorate template=<span
-            class="st0">&quot;/layout.xhtml&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;ui:define <span class="kw3">name</span>=<span
-            class="st0">&quot;listHeading&quot;</span><span
-            class="kw2">&gt;</span></span></div></li>
-
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            <span class="sc2">&lt;ui:include <span class="kw3">src</span>="shared/listHeading.xhtml"/<span
-            class="kw2">&gt;</span></span></div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2"><span class="kw2">&lt;</span>/ui:define&gt;</span></div></li>
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            &nbsp; &nbsp; </div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2">&lt;c:forEach items="#<span class="br0">&#123;</span>items<span
-            class="br0">&#125;"</span> var="item"<span
-            class="kw2">&gt;</span></span></div></li>
-
-            <li class="li1"><div class="de1">&nbsp; &nbsp;
-            ...</div></li>
-            <li class="li2"><div class="de2">&nbsp; <span
-            class="sc2"><span class="kw2">&lt;</span>/c:forEach&gt;</span></div></li>
-            <li class="li1"><div class="de1">&nbsp; ...</div></li>
-            <li class="li2"><div class="de2"><span class="sc2"><span
-            class="kw2">&lt;</span>/ui:decorate&gt;</span>
-            </div></li></ol></div></div>
-            </p>
-
-            Because JSF does not disregard everything outside of the <code>ui:decorate</code>
-            tag, <code>ui:decorate</code> can
-            be used to decorate pieces of a page.
-
-            </div>
-
-        </description>
-        <tag-name>decorate</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.DecorateHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                A URI that points to a template, also known as a layout, that
-                inserts pieces of the page defined in the decorator.
-
-                </div>
-
-            </description>
-            <name>template</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>The <code>fragment</code> tag is identical to
-            the <code>component</code> tag, except that <code>ui:fragment</code>,
-            unlike <code>ui:component</code>, JSF does not disregard
-            all content outside of the tag.</p>
-            </div>
-
-        </description>
-        <tag-name>fragment</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.ComponentRefHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                The identifier of the component that JSF inserts into the
-                component tree. If an identifier is
-                not explicitly specified by the page author, JSF will assign an
-                identifier based on the algorithm
-                that it uses for all components.
-                </div>
-
-            </description>
-            <name>id</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                Binds the component to a backing bean property, as specified in
-                the JSF specification.
-                </div>
-
-            </description>
-            <name>binding</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Use this tag&#8212which is very similar to JSP's <code>jsp:include</code>&#8212to
-            encapsulate and reuse content among
-            multiple XHTML pages. There are three things this tag can include:
-            plain XHTML, and XHTML pages that have either a <code>composition</code>
-            tag or a <code>component</code> tag.
-            </p>
-            <p>You supply a filename, through <code>ui:include</code>'s
-            <code>src</code> attribute for JSF to include. That
-            filename is relative to the XHTML file that was rendered as a result
-            of the last request. So, for example, if JSF loaded
-            the view <code>login.xhtml</code>, and that file
-            included <code>pageDecorations/header.xhtml</code>, and
-            <code>
-            pageDecorations/header.xhtml</code> included <code>companyLogo.xhtml</code>,
-            then <code>companyLogo.xhtml</code> will
-            not be found if it's in the <code>pageDecorations</code>
-            directory, because <code>companyLogo.xhtml</code> has to
-            be
-            in the same directory as <code>login.xhtml</code>.
-            </p>
-
-            </div>
-
-        </description>
-        <tag-name>include</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.IncludeHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                The filename of an XHTML page to include. The filename is
-                relative to the XHTML page that was originally loaded.
-                </div>
-
-            </description>
-            <name>src</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Inserts content into a template. That content is defined&#8212with
-            the <code>ui:define</code> tag&#8212 in either a
-            <code>ui:composition</code>, <code>ui:component</code>,
-            <code>ui:decorate</code>, or <code>ui:fragment</code>.</p>
-            </div>
-
-        </description>
-        <tag-name>insert</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.IncludeHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-
-                The optional name attribute matches the associated &lt;ui:define/&gt;
-                tag in this template's client. If no name is specified, it's
-                expected
-                that the whole template client will be inserted.
-
-                </div>
-
-            </description>
-            <name>name</name>
-            <required>false</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Use this tag to pass parameters to an included file (using
-            <code>ui:include</code>), or a template
-            (linked to either a composition or decorator). Embed <code>ui:param</code>
-            tags in either <code>ui:include</code>,
-            <code>ui:composition</code>, or <code>ui:decorate</code>
-            to pass the parameters.
-            </div>
-
-        </description>
-        <tag-name>param</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.ParamHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                The name of the parameter.
-                </div>
-
-            </description>
-            <name>name</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-                The value of the parameter. Notice that this attribute's value
-                can be an EL expression, which
-                means that you can pass objects to either an included file or a
-                template.
-                </div>
-            </description>
-            <name>value</name>
-            <required>true</required>
-            <type>java.lang.String</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-
-            <p>Use this tag as an alternative to <code>h:dataTable</code>
-            or
-            <code>c:forEach</code>, especially when you are using
-            the
-            <code>jsfc</code> feature of Facelets. You can specify
-            this component as
-            the value of the <code>jsfc</code> attribute, like this:
-            &lt;div... jsfc="ui:repeat" value="#{contacts}" var="contact"&gt;...
-            </p>
-            </div>
-
-        </description>
-        <tag-name>repeat</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.RepeatHandler</handler-class>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-
-                <p>Read-write property setting the offset from the
-                beginning of the
-                collection from which to start the iteration. If not set, this
-                offset
-                is not considered and iteration will start at the beginning of
-                the
-                collection.</p>
-
-                </div>
-
-            </description>
-            <name>offset</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-
-                <p>Read-write property setting the size of the collection
-                to iterate.
-                If this value is less than the actual size of the collection, a
-                <code>FacesException</code> must be thrown.</p>
-
-                </div>
-
-            </description>
-            <name>size</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <div class="changed_added_2_0"><p>Iteration
-                will only process every step items of the collection,
-                starting with the first one.</p></div>
-
-            </description>
-            <name>step</name>
-            <required>false</required>
-            <type>int</type>
-        </attribute>
-        <attribute>
-            <description>
-
-
-                <div class="changed_added_2_0">
-
-                <p>The name of a collection of items that this tag
-                iterates over. The
-                collection may be a <code>List</code>, <code>array</code>,
-                <code>java.sql.ResultSet</code>, or an individual
-                java Object. If the
-                collection is null, this tag does nothing.</p>
-
-                </div>
-
-            </description>
-            <name>value</name>
-            <required>true</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <div class="changed_added_2_0"><p>Name of the
-                exported scoped variable for the current item of the
-                iteration. This scoped variable has nested
-                visibility. Its type depends on the object of the
-                underlying collection</p></div>
-
-            </description>
-            <name>var</name>
-            <required>true</required>
-            <type>java.lang.Object</type>
-        </attribute>
-        <attribute>
-            <description>
-
-                <div class="changed_added_2_0"><p>Name of the
-                exported request scoped variable for the status of the
-                iteration. Object is a POJO with the following read-only
-                JavaBeans properties. This scoped variable has nested
-                visibility.</p>
-
-                <p><code>begin</code> of type Integer</p>
-
-                <p><code>end</code> of type Integer</p>
-
-                <p><code>index</code> of type int</p>
-
-                <p><code>step</code> of type Integer</p>
-
-                <p><code>even</code> of type boolean</p>
-
-                <p><code>odd</code> of type boolean</p>
-
-                <p><code>first</code> of type boolean</p>
-
-                <p><code>last</code> of type boolean</p>
-
-                </div>
-
-            </description>
-            <name>varStatus</name>
-            <required>false</required>
-            <type>java.lang.Object</type>
-        </attribute>
-    </tag>
-    <tag>
-        <description>
-
-
-            <div class="changed_added_2_0">
-            <p>Remove content from a page. This tag is often used in
-            conjunction with the <code>jsfc</code> feature of
-            Facelets,
-            to wrap additional markup. When Facelets removes markup from a page
-            by substituting markup items that have
-            a <code>jsfc</code> attribute with the specified
-            component, Facelets also removes anything in the page that
-            is contained in a <code>ui:remove</code> tag.</p>
-            </div>
-
-        </description>
-        <tag-name>remove</tag-name>
-        <handler-class>com.sun.faces.facelets.tag.ui.SchemaCompliantRemoveHandler</handler-class>
-
-    </tag>
-</facelet-taglib>
diff --git a/jsf-ri/conf/share/ui.tld b/jsf-ri/conf/share/ui.tld
deleted file mode 100644
index b767671..0000000
--- a/jsf-ri/conf/share/ui.tld
+++ /dev/null
@@ -1,1043 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<taglib xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">
-
-<!-- ============== Tag Library Description Elements ============= -->
-
-    <description>
-
-        <![CDATA[</pre>
-
-<div class="changed_added_2_0">
-	
-  <p>The tags in this library add templating—a powerful view composition technique—to JSF. 
-	Templating is so useful that there are entire frameworks, such as Tiles and SiteMesh, that are built 
-	around the concept of templating. So what is templating, how can you benefit from it, and how does 
-	this tag library implement it?
-  </p>
-
-  <p>If you've used JSP before, you've probably used <code>jsp:include</code>. The prototypical example for 
-    <code>jsp:include</code> is a header on each page in a web application. One JSP page, say header.jsp, 
-    encapsulates the header content, and the header is included by each page. You <em>encapsulate and reuse 
-    content</em>, so that changes to one file, header.jsp, affect the header on every page.
-  </p>
-
-  <p>This tab library contains a tag&#8212<code>ui:include</code>&#8212 that's analagous to <code>jsp:include</code>, 
-    but encapsulating and reusing content is only half the templating story, because templating also lets you 
-    <em>encapsulate and reuse <b>layout</b></em>. You define a single <em>template</em> (meaning layout), and you reuse 
-    that template with multiple <em>compositions</em>. So now you can control the layout of many pages with a single 
-    template (layout). Let's take a look at an example.
-  </p>
-
-<h3>A Templating Example</h3>
-
-  <p>
-	First, we define a template: 
-  </p>
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc0"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</div></li>
-
-<li class="li2"><div class="de2">              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2"><span class="sc3"><span class="re1"><html</span> <span class="re0">xmlns</span>=<span class="st0">"http://www.w3.org/1999/xhtml"</span></div></li>
-<li class="li1"><div class="de1">            xmlns:<span class="re0">ui</span>=<span class="st0">"http://java.sun.com/jsf/facelets"</span></div></li>
-
-<li class="li1"><div class="de1">    <span class="sc3"><span class="re1"><head<span class="re2">></span></span></span></div></li>
-<li class="li2"><div class="de2">      <span class="sc3"><span class="re1"><link</span> <span class="re0">href</span>=<span class="st0">"styles.css"</span> <span class="re0">rel</span>=<span class="st0">"stylesheet"</span> <span class="re0">type</span>=<span class="st0">"text/css"</span><span class="re2">/></span></span></div></li>
-
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><title<span class="re2">></span></span></span><span class="sc3"><span class="re1"><ui</span>:insert <span class="re0">name</span>=<span class="st0">"title"</span><span class="re2">></span></span>Default Title<span class="sc3"><span class="re1"></ui</span>:insert<span class="re2">></span></span><span class="sc3"><span class="re1"></title<span class="re2">></span></sp [...]
-<li class="li2"><div class="de2">    <span class="sc3"><span class="re1"></head<span class="re2">></span></span></span></div></li>
-
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">    <span class="sc3"><span class="re1"><body<span class="re2">></span></span></span></div></li>
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:debug<span class="re2">/></span></span></div></li>
-<li class="li2"><div class="de2">      <span class="sc3"><span class="re1"><div</span> <span class="re0">class</span>=<span class="st0">"heading"</span><span class="re2">></span></span></div></li>
-
-<li class="li1"><div class="de1">        <span class="sc3"><span class="re1"><ui</span>:insert <span class="re0">name</span>=<span class="st0">"heading"</span><span class="re2">/></span></span></div></li>
-<li class="li2"><div class="de2">      <span class="sc3"><span class="re1"></div<span class="re2">></span></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-
-<li class="li2"><div class="de2">      <span class="sc3"><span class="re1"><div</span> <span class="re0">class</span>=<span class="st0">"content"</span><span class="re2">></span></span></div></li>
-<li class="li1"><div class="de1">        <span class="sc3"><span class="re1"><ui</span>:insert <span class="re0">name</span>=<span class="st0">"content"</span><span class="re2">/></span></span></div></li>
-
-<li class="li2"><div class="de2">      <span class="sc3"><span class="re1"></div<span class="re2">></span></span></span></div></li>
-<li class="li1"><div class="de1">    <span class="sc3"><span class="re1"></body<span class="re2">></span></span></span></div></li>
-<li class="li2"><div class="de2"><span class="sc3"><span class="re1"></html<span class="re2">></span></span></span> </div></li></ol></div></div>
-
-  <p>
-	In the preceeding listing, we've defined a layout, also known as a template. That template uses the 
-	<code>ui:insert</code> tag to insert pieces of a page &#8212namely, title, heading, and content&#8212 
-	defined in a <em>composition</em>. Notice that on line 8, we define a default title, in case one isn't provided
-    by the composition. Also note that on line 12 we have the <code>ui:debug</code> tag, which lets the user activate
-	a popup window with debugging information by typing CTRL + Shift + d.
-  </p>
-
-  <p>
-	The title, heading, and content pieces of the page referenced in the template are defined in a separate XHTML 
-	file in a composition, like this:
-  </p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc0"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</div></li>
-
-<li class="li2"><div class="de2">        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2"><span class="sc3"><span class="re1"><html</span> <span class="re0">xmlns</span>=<span class="st0">"http://www.w3.org/1999/xhtml"</span></div></li>
-<li class="li1"><div class="de1">   xmlns:<span class="re0">ui</span>=<span class="st0">"http://java.sun.com/jsf/facelets"</span><span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">  <span class="sc3"><span class="re1"><body<span class="re2">></span></span></span></div></li>
-<li class="li2"><div class="de2">    <span class="sc3"><span class="re1"><ui</span>:composition <span class="re0">template</span>=<span class="st0">"/layout.xhtml"</span><span class="re2">></span></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"title"</span><span class="re2">></span></span>A List of Contacts<span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"heading"</span><span class="re2">></span></span>Contacts<span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"content"</span><span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2">        <span class="sc3"><span class="re1"><ui</span>:include <span class="re0">src</span>=<span class="st0">"contactsTable.xhtml"</span> <span class="re2">/></span></span></div></li>
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2">         </div></li>
-<li class="li1"><div class="de1">    <span class="sc3"><span class="re1"></ui</span>:composition<span class="re2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc3"><span class="re1"></body<span class="re2">></span></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc3"><span class="re1"></html<span class="re2">></span></span></span> </div></li></ol></div></div>
-
-  <p>
-	At runtime, JSF synthesizes the two previous XHTML pages to create a single JSF view by inserting the
-	pieces defined in the composition into the template (that template is layout.xhtml, which is the first 
-	listing above). JSF also disregards everything outside of the <code>composition</code> tag so that we don't 
-	wind up with two <code>body</code> elements in the view. Also, note that we use the <code>ui:include</code> 
-	tag on line 14 to include content (which happens to be a table) from another XHTML page, so that we can reuse 
-	that table in other views.
-  </p>
-
-  <p>
-	So why do we have two XHTML pages to define a single view? Why not simply take the pieces and manually insert
-	them into the layout so that we have only a single XHTML page? The answer is simple: we have separated layout
-	from the content so that we can <em>reuse that layout</em> among multiple compositions. For example, now we can
-	define another composition that uses the same layout:
-  </p>
-
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc0"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</div></li>
-
-<li class="li2"><div class="de2">        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2"><span class="sc3"><span class="re1"><html</span> <span class="re0">xmlns</span>=<span class="st0">"http://www.w3.org/1999/xhtml"</span></div></li>
-<li class="li1"><div class="de1">      xmlns:<span class="re0">ui</span>=<span class="st0">"http://java.sun.com/jsf/facelets"</span><span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">  <span class="sc3"><span class="re1"><body<span class="re2">></span></span></span></div></li>
-<li class="li2"><div class="de2">    <span class="sc3"><span class="re1"><ui</span>:composition <span class="re0">template</span>=<span class="st0">"/layout.xhtml"</span><span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2"> </div></li>
-
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"title"</span><span class="re2">></span></span>Create a Contact<span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"heading"</span><span class="re2">></span></span>Create Contact</ui</span>:define<span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"content"</span><span class="re2">></span></span></div></li>
-<li class="li2"><div class="de2">        <span class="sc3"><span class="re1"><ui</span>:include <span class="re0">src</span>=<span class="st0">"createContactForm.xhtml"</span><span class="re2">/></span></span></div></li>
-
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2"> </div></li>
-
-<li class="li2"><div class="de2">    <span class="sc3"><span class="re1"></ui</span>:composition<span class="re2">></span></span></div></li>
-<li class="li1"><div class="de1">  <span class="sc3"><span class="re1"></body<span class="re2">></span></span></span></div></li>
-<li class="li2"><div class="de2"><span class="sc3"><span class="re1"></html<span class="re2">></span></span></span> </div></li></ol></div></div>
-
-  <p>
-	By encapsulating the layout, we can reuse that layout among multiple compositions. Just like
-	<code>ui:include</code> lets us encapsulate and reuse conent, JSF compositions let us encapsulate and reuse
-	layout, so that changes to a single layout can affect multiple views. Fundamentally, that's what this
-	tag library is all about.
-  </p>
-
-</div>
-        <pre>]]>
-
-    </description>
-
-    <tlib-version>
-        2.1
-    </tlib-version>
-
-    <short-name>
-        ui
-    </short-name>
-
-    <uri>
-        http://java.sun.com/jsf/facelets
-    </uri>
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	This tag is the same as the <code>ui:composition</code>, except for two things:
-    JSF creates a component and adds it directly to the tree, and there's no associated
-    template.
-  </p>
-
-  <p>
-	Use this tag to create a component and specify a filename for the
-	component as either the source of a <code>ui:include</code>, or the source of a Facelets tag.
-  </p>
-</div>
-]]>
-        </description>
-        <name>
-          component
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	The identifier of the component that JSF inserts into the component tree. If an identifier is
-	not explicitly specified by the page author, JSF will assign an identifier based on the algorithm
-	that it uses for all components.
-  </p>
-</div>]]>
-
-            </description>
-            <name>
-              id
-            </name>
-            <required>
-	          false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	Binds the component to a backing bean property, as specified in the JSF specification.
-  </p>
-</div>]]>
-
-            </description>
-            <name>
-              binding
-            </name>
-            <required>
-	          false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-  <p>
-        Controls whether the component is rendered. Valid values for this attribute are either the strings "true" or "false" or an EL expression that evaluates to either "true" or "false".<p>If this attribute's value is "false" or the value is an EL expression that evaluates to "false", the component is not rendered in the page.</p>
-  </p>
-
-</div>]]>
-
-            </description>
-            <name>
-              rendered
-            </name>
-            <required>
-                                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-
-  </tag>
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	Defines a composition that optionally uses a template, as outlined in the description of the ui tag library. Multiple
-	compositions can use the same template, thus encapsulating and reusing layout. JSF disregards everything outside of the
-	composition, which lets developers embed compositions in well-formed XHTML pages that can be viewed in an XHTML viewer,
-	such as Dreamweaver or a browser, without including extraneous elements such as <code>head</code> and <code>body</code>.
-  </p>
-	<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="sc0"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</div></li>
-
-<li class="li2"><div class="de2">        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></div></li>
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2"><span class="sc3"><span class="re1"><html</span> <span class="re0">xmlns</span>=<span class="st0">"http://www.w3.org/1999/xhtml"</span></div></li>
-<li class="li1"><div class="de1">   xmlns:<span class="re0">ui</span>=<span class="st0">"http://java.sun.com/jsf/facelets"</span><span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">  <span class="sc3"><span class="re1"><body<span class="re2">></span></span></span></div></li>
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">    THIS LINE, AND EVERYTHING ABOVE IT IS DISREGARDED BY JSF</div></li>
-<li class="li2"><div class="de2">    <span class="sc3"><span class="re1"><ui</span>:composition <span class="re0">template</span>=<span class="st0">"/layout.xhtml"</span><span class="re2">></span></span></div></li>
-
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"title"</span><span class="re2">></span></span>#{msgs.contactsWindowTitle}<span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"heading"</span><span class="re2">></span></span>#{msgs.contactsHeading}<span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-
-<li class="li2"><div class="de2"> </div></li>
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"><ui</span>:define <span class="re0">name</span>=<span class="st0">"content"</span><span class="re2">></span></span></div></li>
-<li class="li2"><div class="de2">        <span class="sc3"><span class="re1"><ui</span>:include <span class="re0">src</span>=<span class="st0">"contactsTable.xhtml"</span> <span class="re2">/></span></span></div></li>
-
-<li class="li1"><div class="de1">      <span class="sc3"><span class="re1"></ui</span>:define<span class="re2">></span></span></div></li>
-<li class="li2"><div class="de2">         </div></li>
-<li class="li1"><div class="de1">    <span class="sc3"><span class="re1"></ui</span>:composition<span class="re2">></span></span></div></li>
-<li class="li2"><div class="de2">    THIS LINE, AND EVERYTHING BELOW IT IS DISREGARDED BY JSF</div></li>
-
-<li class="li1"><div class="de1"> </div></li>
-<li class="li2"><div class="de2">  <span class="sc3"><span class="re1"></body<span class="re2">></span></span></span></div></li>
-<li class="li1"><div class="de1"><span class="sc3"><span class="re1"></html<span class="re2">></span></span></span> </div></li></ol></div></div>
-
-</div>
-]]>
-        </description>
-        <name>
-          composition
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	A URI that points to a template, also known as a layout, that inserts pieces of the page defined in the composition.
-  </p>
-</div>]]>
-
-            </description>
-            <name>
-              template
-            </name>
-            <required>
-              false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	When the <code>ui:debug</code> tag is placed in an XHTML page, it creates a component and adds it to the
-	component tree. That debug component captures debugging information, namely the current state of the component
-	tree and the scoped variables in the application, when the component is rendered. If the user presses CTRL + SHIFT + d,
-	JSF opens a window that shows the debugging information captured by the debug component.
-  </p>
-
-  <p>
-	Typically, the best place to put the <code>ui:debug</code> tag is in an application's main template, which
-	lets developers enable or disable viewing of debugging information in one central location. Additionally, page
-	authors can change the hotkey (which by default is CTRL + SHIFT + d, where the d stands for debug) to CTRL + SHIFT + ?,
-	where ? represents the key specified as the value of the <code>hotkey</code> attribute.
-  </p>
-
-  <p>
-	You can use the <code>rendered</code> attribute to control whether the debug component is rendered.
-	Using an EL expression as the value for the <code>rendered</code> attribute lets you control whether
-	debug output is enabled for multiple views based on a single bean property.
-  </p>
-</div>
-]]>
-        </description>
-        <name>
-          debug
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	Defines a single character, that, pressed in conjunction with CTRL and SHIFT, will display the JSF debug window.
-	By default, the hotkey is 'd'. <em>The value for the hotkey attribute cannot be an EL expression.</em>
-  </p>
-
-</div>]]>
-
-            </description>
-            <name>
-              hotkey
-            </name>
-            <required>
-				false
-            </required>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-  <p>
-	Controls whether the debug component is rendered. Valid values for this attribute are either the strings "true" or "false" or an EL expression that evaluates to either "true" or "false".<p>If this attribute's value is "false" or the value is an EL expression that evaluates to "false", the debug component is not rendered in the page, the hotkey attribute is disregarded, and users cannot open the debugging information window with a hotkey.</p>
-  </p>
-
-</div>]]>
-
-            </description>
-            <name>
-              rendered
-            </name>
-            <required>
-				false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-
-<p>The <code>define</code> tag defines content that is inserted into a page by a template. The <code>define</code> tag can be used inside <code>ui:composition</code>, <code>ui:component</code>, <code>ui:decorate</code>, and <code>ui:fragment</code> tags.</p>
-
-<p>Content defined by the <code>define</code> tag can be inserted into a page by using <code>ui:insert</code>.
-</p>
-
-</div>
-]]>
-        </description>
-        <name>
-          define
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>Assigns a name to the content inside a <code>define</code> tag. That name is used by corresponding <code>ui:insert</code> tags in a template that insert the named content into a page.</p>
-</div>]]>
-
-            </description>
-            <name>
-				name
-            </name>
-            <required>
-				true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-
-<p>
-	The <code>decorate</code> tag is identical to the <code>composition</code> tag, except that <code>ui:decorate</code>, unlike <code>ui:composition</code>, does not disregard all content outside of the tag. The <code>decorate</code> is useful when you want to decorate some content in a page, for example, you might want to decorate a list of items, like this:
-	
-<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1">
-	
-<span class="sc2"><ui:decorate template=<span class="st0">"/layout.xhtml"</span><span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><ui:define <span class="kw3">name</span>=<span class="st0">"listHeading"</span><span class="kw2">></span></span></div></li>
-
-<li class="li1"><div class="de1">    <span class="sc2"><ui:include <span class="kw3">src</span>="shared/listHeading.xhtml"/<span class="kw2">></span></span></div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><span class="kw2"><</span>/ui:define></span></div></li>
-<li class="li1"><div class="de1">        </div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><c:forEach items="#<span class="br0">{</span>items<span class="br0">}"</span> var="item"<span class="kw2">></span></span></div></li>
-
-<li class="li1"><div class="de1">    ...</div></li>
-<li class="li2"><div class="de2">  <span class="sc2"><span class="kw2"><</span>/c:forEach></span></div></li>
-<li class="li1"><div class="de1">  ...</div></li>
-<li class="li2"><div class="de2"><span class="sc2"><span class="kw2"><</span>/ui:decorate></span> </div></li></ol></div></div>
-</p>
-
-Because JSF does not disregard everything outside of the <code>ui:decorate</code> tag, <code>ui:decorate</code> can
-be used to decorate pieces of a page.
-
-</div>
-]]>
-        </description>
-        <name>
-          decorate
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-A URI that points to a template, also known as a layout, that inserts pieces of the page defined in the decorator.
-
-</div>]]>
-
-            </description>
-            <name>
-				template
-            </name>
-            <required>
-				false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p>The <code>fragment</code> tag is identical to the <code>component</code> tag, except that <code>ui:fragment</code>, unlike <code>ui:component</code>, JSF does not disregard all content outside of the tag.</p>
-</div>
-]]>
-        </description>
-        <name>
-          fragment
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-The identifier of the component that JSF inserts into the component tree. If an identifier is
-not explicitly specified by the page author, JSF will assign an identifier based on the algorithm
-that it uses for all components.
-</div>]]>
-
-            </description>
-            <name>
-              id
-            </name>
-            <required>
-	          false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-Binds the component to a backing bean property, as specified in the JSF specification.
-</div>]]>
-
-            </description>
-            <name>
-              binding
-            </name>
-            <required>
-	          false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0_rev_a">
-  <p>
-        Controls whether the fragment is rendered. Valid values for this attribute are either the strings "true" or "false" or an EL expression that evaluates to either "true" or "false".<p>If this attribute's value is "false" or the value is an EL expression that evaluates to "false", the fragment is not rendered in the page.</p>
-  </p>
-
-</div>]]>
-
-            </description>
-            <name>
-              rendered
-            </name>
-            <required>
-                                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p>Use this tag&#8212which is very similar to JSP's <code>jsp:include</code>&#8212to encapsulate and reuse content among
-multiple XHTML pages. There are three things this tag can include: plain XHTML, and XHTML pages that have either a <code>composition</code> tag or a <code>component</code> tag.
-</p>
-<p>You supply a filename, through <code>ui:include</code>'s <code>src</code> attribute for JSF to include. That
-filename is relative to the XHTML file that was rendered as a result of the last request. So, for example, if JSF loaded
-the view <code>login.xhtml</code>, and that file included <code>pageDecorations/header.xhtml</code>, and <code>
-pageDecorations/header.xhtml</code> included <code>companyLogo.xhtml</code>, then <code>companyLogo.xhtml</code> will
-not be found if it's in the <code>pageDecorations</code> directory, because <code>companyLogo.xhtml</code> has to be
-in the same directory as <code>login.xhtml</code>.
-</p>
-
-</div>
-]]>
-        </description>
-        <name>
-          include
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-The filename of an XHTML page to include. The filename is relative to the XHTML page that was originally loaded.
-</div>]]>
-
-            </description>
-            <name>
-				src
-            </name>
-            <required>
-				true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p>Inserts content into a template. That content is defined&#8212with the <code>ui:define</code> tag&#8212 in either a <code>ui:composition</code>, <code>ui:component</code>, <code>ui:decorate</code>, or <code>ui:fragment</code>.</p>
-</div>
-]]>
-        </description>
-        <name>
-          insert
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-
-The optional name attribute matches the associated <ui:define/>
-tag in this template's client. If no name is specified, it's expected
-that the whole template client will be inserted.
-
-</div>]]>
-
-            </description>
-            <name>
-				name
-            </name>
-            <required>
-				false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-  </tag>
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p>Use this tag to pass parameters to an included file (using <code>ui:include</code>), or a template
-(linked to either a composition or decorator). Embed <code>ui:param</code> tags in either <code>ui:include</code>,
-<code>ui:composition</code>, or <code>ui:decorate</code> to pass the parameters.
-</div>
-]]>
-        </description>
-        <name>
-          param
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-The name of the parameter.
-</div>]]>
-
-            </description>
-            <name>
-				name
-            </name>
-            <required>
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-The value of the parameter. Notice that this attribute's value can be an EL expression, which
-means that you can pass objects to either an included file or a template.
-</div>]]>
-            </description>
-            <name>
-				value
-            </name>
-            <required>
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-	
-<p>Use this tag as an alternative to <code>h:dataTable</code> or
-<code>c:forEach</code>, especially when you are using the
-<code>jsfc</code> feature of Facelets. You can specify this component as
-the value of the <code>jsfc</code> attribute, like this:
-<div... jsfc="ui:repeat" value="#{contacts}" var="contact">...
-</p>
-</div>
-]]>
-        </description>
-        <name>
-          repeat
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-
-        <attribute>
-
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>Read-write property setting the offset from the beginning of the
-collection from which to start the iteration.  If not set, this offset
-is not considered and iteration will start at the beginning of the
-collection.</p>
-
-</div>]]>
-
-            </description>
-            <name>offset</name>
-            <required>
-				false
-            </required>
-            <deferred-value>
-                <type>
-                    int
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>Read-write property setting the size of the collection to iterate.
-If this value is less than the actual size of the collection, a
-<code>FacesException</code> must be thrown.</p>
-
-</div>]]>
-
-            </description>
-            <name>size</name>
-            <required>
-				false
-            </required>
-            <deferred-value>
-                <type>
-                    int
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[ <div class="changed_added_2_0"><p>Iteration
-                will only process every step items of the collection,
-                starting with the first one.</p></div>]]>
-
-            </description>
-            <name>step</name>
-            <required>
-				false
-            </required>
-            <deferred-value>
-                <type>
-                    int
-                </type>
-            </deferred-value>
-        </attribute>
-
-
-        <attribute>
-
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-
-<p>The name of a collection of items that this tag iterates over.  The
-collection may be a <code>List</code>, <code>array</code>,
-<code>java.sql.ResultSet</code>, or an individual java Object.  If the
-collection is null, this tag does nothing.</p>
-
-</div>]]>
-
-            </description>
-            <name>value</name>
-            <required>
-				true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.Object
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[ <div class="changed_added_2_0"><p>Name of the
-                exported scoped variable for the current item of the
-                iteration. This scoped variable has nested
-                visibility. Its type depends on the object of the
-                underlying collection</p></div>]]>
-
-            </description>
-            <name>var</name>
-            <required>
-				true
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.Object
-                </type>
-            </deferred-value>
-        </attribute>
-
-        <attribute>
-            <description>
-
-                <![CDATA[ <div class="changed_added_2_0"><p>Name of the
-                exported request scoped variable for the status of the
-                iteration. Object is a POJO with the following read-only
-                JavaBeans properties. This scoped variable has nested
-                visibility.</p>
-
-                <p><code>begin</code> of type Integer</p>
-
-                <p><code>end</code> of type Integer</p>
-
-                <p><code>index</code> of type int</p>
-
-                <p><code>step</code> of type Integer</p>
-
-                <p><code>even</code> of type boolean</p>
-
-                <p><code>odd</code> of type boolean</p>
-
-                <p><code>first</code> of type boolean</p>
-
-                <p><code>last</code> of type boolean</p>
-
-                </div>]]>
-
-            </description>
-            <name>varStatus</name>
-            <required>
-				false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.Object
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-    <tag>
-        <description>
-
-            <![CDATA[
-<div class="changed_added_2_0">
-<p>Remove content from a page. This tag is often used in conjunction with the <code>jsfc</code> feature of Facelets,
-to wrap additional markup. When Facelets removes markup from a page by substituting markup items that have
-a <code>jsfc</code> attribute with the specified component, Facelets also removes anything in the page that
-is contained in a <code>ui:remove</code> tag.</p>
-</div>
-]]>
-        </description>
-        <name>
-          remove
-        </name>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-
-                <![CDATA[
-<div class="changed_added_2_0">
-
-
-</div>]]>
-
-            </description>
-            <name>
-            </name>
-            <required>
-	
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-
-  </tag>
-
-</taglib>
diff --git a/jsf-ri/conf/share/xhtml/default.dtd b/jsf-ri/conf/share/xhtml/default.dtd
deleted file mode 100644
index 71d2a14..0000000
--- a/jsf-ri/conf/share/xhtml/default.dtd
+++ /dev/null
@@ -1,298 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Allow any element -->
-<!ELEMENT default ANY>
-
-
-<!-- Translate XHTML character entities to their corresponding character values
-     See Mojarra bug 1388 for why this is necessary -->
-
-<!ENTITY nbsp               " ">
-<!ENTITY iexcl              "¡">
-<!ENTITY cent               "¢">
-<!ENTITY pound              "£">
-<!ENTITY curren             "¤">
-<!ENTITY yen                "¥">
-<!ENTITY brvbar             "¦">
-<!ENTITY sect               "§">
-<!ENTITY uml                "¨">
-<!ENTITY copy               "©">
-<!ENTITY ordf               "ª">
-<!ENTITY laquo              "«">
-<!ENTITY not                "¬">
-<!ENTITY shy                "­">
-<!ENTITY reg                "®">
-<!ENTITY macr               "¯">
-<!ENTITY deg                "°">
-<!ENTITY plusmn             "±">
-<!ENTITY sup2               "²">
-<!ENTITY sup3               "³">
-<!ENTITY acute              "´">
-<!ENTITY micro              "µ">
-<!ENTITY para               "¶">
-<!ENTITY middot             "·">
-<!ENTITY cedil              "¸">
-<!ENTITY sup1               "¹">
-<!ENTITY ordm               "º">
-<!ENTITY raquo              "»">
-<!ENTITY frac14             "¼">
-<!ENTITY frac12             "½">
-<!ENTITY frac34             "¾">
-<!ENTITY iquest             "¿">
-<!ENTITY Agrave             "À">
-<!ENTITY Aacute             "Á">
-<!ENTITY Acirc              "Â">
-<!ENTITY Atilde             "Ã">
-<!ENTITY Auml               "Ä">
-<!ENTITY Aring              "Å">
-<!ENTITY AElig              "Æ">
-<!ENTITY Ccedil             "Ç">
-<!ENTITY Egrave             "È">
-<!ENTITY Eacute             "É">
-<!ENTITY Ecirc              "Ê">
-<!ENTITY Euml               "Ë">
-<!ENTITY Igrave             "Ì">
-<!ENTITY Iacute             "Í">
-<!ENTITY Icirc              "Î">
-<!ENTITY Iuml               "Ï">
-<!ENTITY ETH                "Ð">
-<!ENTITY Ntilde             "Ñ">
-<!ENTITY Ograve             "Ò">
-<!ENTITY Oacute             "Ó">
-<!ENTITY Ocirc              "Ô">
-<!ENTITY Otilde             "Õ">
-<!ENTITY Ouml               "Ö">
-<!ENTITY times              "×">
-<!ENTITY Oslash             "Ø">
-<!ENTITY Ugrave             "Ù">
-<!ENTITY Uacute             "Ú">
-<!ENTITY Ucirc              "Û">
-<!ENTITY Uuml               "Ü">
-<!ENTITY Yacute             "Ý">
-<!ENTITY THORN              "Þ">
-<!ENTITY szlig              "ß">
-<!ENTITY agrave             "à">
-<!ENTITY aacute             "á">
-<!ENTITY acirc              "â">
-<!ENTITY atilde             "ã">
-<!ENTITY auml               "ä">
-<!ENTITY aring              "å">
-<!ENTITY aelig              "æ">
-<!ENTITY ccedil             "ç">
-<!ENTITY egrave             "è">
-<!ENTITY eacute             "é">
-<!ENTITY ecirc              "ê">
-<!ENTITY euml               "ë">
-<!ENTITY igrave             "ì">
-<!ENTITY iacute             "í">
-<!ENTITY icirc              "î">
-<!ENTITY iuml               "ï">
-<!ENTITY eth                "ð">
-<!ENTITY ntilde             "ñ">
-<!ENTITY ograve             "ò">
-<!ENTITY oacute             "ó">
-<!ENTITY ocirc              "ô">
-<!ENTITY otilde             "õ">
-<!ENTITY ouml               "ö">
-<!ENTITY divide             "÷">
-<!ENTITY oslash             "ø">
-<!ENTITY ugrave             "ù">
-<!ENTITY uacute             "ú">
-<!ENTITY ucirc              "û">
-<!ENTITY uuml               "ü">
-<!ENTITY yacute             "ý">
-<!ENTITY thorn              "þ">
-<!ENTITY yuml               "ÿ">
-<!ENTITY OElig              "Œ">
-<!ENTITY oelig              "œ">
-<!ENTITY Scaron             "Š">
-<!ENTITY scaron             "š">
-<!ENTITY Yuml               "Ÿ">
-<!ENTITY fnof               "ƒ">
-<!ENTITY circ               "ˆ">
-<!ENTITY tilde              "˜">
-<!ENTITY Alpha              "Α">
-<!ENTITY Beta               "Β">
-<!ENTITY Gamma              "Γ">
-<!ENTITY Delta              "Δ">
-<!ENTITY Epsilon            "Ε">
-<!ENTITY Zeta               "Ζ">
-<!ENTITY Eta                "Η">
-<!ENTITY Theta              "Θ">
-<!ENTITY Iota               "Ι">
-<!ENTITY Kappa              "Κ">
-<!ENTITY Lambda             "Λ">
-<!ENTITY Mu                 "Μ">
-<!ENTITY Nu                 "Ν">
-<!ENTITY Xi                 "Ξ">
-<!ENTITY Omicron            "Ο">
-<!ENTITY Pi                 "Π">
-<!ENTITY Rho                "Ρ">
-<!ENTITY Sigma              "Σ">
-<!ENTITY Tau                "Τ">
-<!ENTITY Upsilon            "Υ">
-<!ENTITY Phi                "Φ">
-<!ENTITY Chi                "Χ">
-<!ENTITY Psi                "Ψ">
-<!ENTITY Omega              "Ω">
-<!ENTITY alpha              "α">
-<!ENTITY beta               "β">
-<!ENTITY gamma              "γ">
-<!ENTITY delta              "δ">
-<!ENTITY epsilon            "ε">
-<!ENTITY zeta               "ζ">
-<!ENTITY eta                "η">
-<!ENTITY theta              "θ">
-<!ENTITY iota               "ι">
-<!ENTITY kappa              "κ">
-<!ENTITY lambda             "λ">
-<!ENTITY mu                 "μ">
-<!ENTITY nu                 "ν">
-<!ENTITY xi                 "ξ">
-<!ENTITY omicron            "ο">
-<!ENTITY pi                 "π">
-<!ENTITY rho                "ρ">
-<!ENTITY sigmaf             "ς">
-<!ENTITY sigma              "σ">
-<!ENTITY tau                "τ">
-<!ENTITY upsilon            "υ">
-<!ENTITY phi                "φ">
-<!ENTITY chi                "χ">
-<!ENTITY psi                "ψ">
-<!ENTITY omega              "ω">
-<!ENTITY thetasym           "ϑ">
-<!ENTITY upsih              "ϒ">
-<!ENTITY piv                "ϖ">
-<!ENTITY ensp               " ">
-<!ENTITY emsp               " ">
-<!ENTITY thinsp             " ">
-<!ENTITY zwnj               "‌">
-<!ENTITY zwj                "‍">
-<!ENTITY lrm                "‎">
-<!ENTITY rlm                "‏">
-<!ENTITY ndash              "–">
-<!ENTITY mdash              "—">
-<!ENTITY lsquo              "‘">
-<!ENTITY rsquo              "’">
-<!ENTITY sbquo              "‚">
-<!ENTITY ldquo              "“">
-<!ENTITY rdquo              "”">
-<!ENTITY bdquo              "„">
-<!ENTITY dagger             "†">
-<!ENTITY Dagger             "‡">
-<!ENTITY bull               "•">
-<!ENTITY hellip             "…">
-<!ENTITY permil             "‰">
-<!ENTITY prime              "′">
-<!ENTITY Prime              "″">
-<!ENTITY lsaquo             "‹">
-<!ENTITY rsaquo             "›">
-<!ENTITY oline              "‾">
-<!ENTITY frasl              "⁄">
-<!ENTITY euro               "€">
-<!ENTITY weierp             "℘">
-<!ENTITY image              "ℑ">
-<!ENTITY real               "ℜ">
-<!ENTITY trade              "™">
-<!ENTITY alefsym            "ℵ">
-<!ENTITY larr               "←">
-<!ENTITY uarr               "↑">
-<!ENTITY rarr               "→">
-<!ENTITY darr               "↓">
-<!ENTITY harr               "↔">
-<!ENTITY crarr              "↵">
-<!ENTITY lArr               "⇐">
-<!ENTITY uArr               "⇑">
-<!ENTITY rArr               "⇒">
-<!ENTITY dArr               "⇓">
-<!ENTITY hArr               "⇔">
-<!ENTITY forall             "∀">
-<!ENTITY part               "∂">
-<!ENTITY exist              "∃">
-<!ENTITY empty              "∅">
-<!ENTITY nabla              "∇">
-<!ENTITY isin               "∈">
-<!ENTITY notin              "∉">
-<!ENTITY ni                 "∋">
-<!ENTITY prod               "∏">
-<!ENTITY sum                "∑">
-<!ENTITY minus              "−">
-<!ENTITY lowast             "∗">
-<!ENTITY radic              "√">
-<!ENTITY prop               "∝">
-<!ENTITY infin              "∞">
-<!ENTITY ang                "∠">
-<!ENTITY and                "∧">
-<!ENTITY or                 "∨">
-<!ENTITY cap                "∩">
-<!ENTITY cup                "∪">
-<!ENTITY int                "∫">
-<!ENTITY there4             "∴">
-<!ENTITY sim                "∼">
-<!ENTITY cong               "≅">
-<!ENTITY asymp              "≈">
-<!ENTITY ne                 "≠">
-<!ENTITY equiv              "≡">
-<!ENTITY le                 "≤">
-<!ENTITY ge                 "≥">
-<!ENTITY sub                "⊂">
-<!ENTITY sup                "⊃">
-<!ENTITY nsub               "⊄">
-<!ENTITY sube               "⊆">
-<!ENTITY supe               "⊇">
-<!ENTITY oplus              "⊕">
-<!ENTITY otimes             "⊗">
-<!ENTITY perp               "⊥">
-<!ENTITY sdot               "⋅">
-<!ENTITY lceil              "⌈">
-<!ENTITY rceil              "⌉">
-<!ENTITY lfloor             "⌊">
-<!ENTITY rfloor             "⌋">
-<!ENTITY lang               "〈">
-<!ENTITY rang               "〉">
-<!ENTITY loz                "◊">
-<!ENTITY spades             "♠">
-<!ENTITY clubs              "♣">
-<!ENTITY hearts             "♥">
-<!ENTITY diams              "♦">
-
diff --git a/jsf-ri/conf/test/cactus.properties b/jsf-ri/conf/test/cactus.properties
deleted file mode 100644
index 7180228..0000000
--- a/jsf-ri/conf/test/cactus.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Configuration file for J2EEUnit.
-
-# Each project using J2EEUnit need to have such a file put in the CLASSPATH
-# (Meaning the directory containgin this file should be in the CLASSPATH, not
-# the file itself of course ... :) )
-
-# Defines the URLs that will be used by J2EEUnit to call it's redirectors
-# (Servlet and JSP). You need to specify in these URLs the webapp context
-# that you use for your application. In the example below, the context is
-# "test".
-
-cactus.servletRedirectorName = ServletRedirector
-cactus.jspRedirectorName = JspRedirector
-cactus.filterRedirectorName = FilterRedirector
-
diff --git a/jsf-ri/conf/test/web.xml b/jsf-ri/conf/test/web.xml
deleted file mode 100644
index 984b248..0000000
--- a/jsf-ri/conf/test/web.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-    version="2.5">
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>server</param-value>
-    </context-param>
-    <!-- if this PROJECT_STAGE init parameter is picked up, the test
-         will fail.  This will validate that the JNDI entry is used first -->
-    <context-param>
-        <param-name>com.sun.faces.disableUnicodeEscaping</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.PROJECT_STAGE</param-name>
-        <param-value>Production</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.generateUniqueServerStateIds</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.numberOfViewsInSession</param-name>
-        <param-value>20</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.writeStateAtFormEnd</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableJSStyleHiding</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.resourceUpdateCheckPeriod</param-name>
-        <param-value>-1</param-value>
-    </context-param>
-    <context-param>
-        <param-name>minimumCustomerAge</param-name>
-        <param-value>18</param-value>
-    </context-param>
-    <context-param>
-        <param-name>testRootDir</param-name>
-        <param-value>@test.root.dir@</param-value>
-    </context-param>
-  
-    <context-param>
-        <param-name>testInitParam</param-name>
-        <param-value>testInitParam</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.validateXml</param-name>
-        <param-value>true</param-value>
-    </context-param>
-
-    <listener>
-        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
-    </listener>
-
-    <servlet>
-        <servlet-name>ServletRedirector</servlet-name>
-        <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
-    </servlet>
-
-    <servlet>
-        <servlet-name>JspRedirector</servlet-name>
-        <jsp-file>/jspRedirector.jsp</jsp-file>
-    </servlet>
-    
-    <servlet>
-       <servlet-name>Faces Servlet</servlet-name>
-       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    </servlet>
-    
-    <servlet-mapping>
-        <servlet-name>ServletRedirector</servlet-name>
-        <url-pattern>/ServletRedirector</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>JspRedirector</servlet-name>
-        <url-pattern>/JspRedirector</url-pattern>
-    </servlet-mapping>
-  
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-  
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>*.jsf</url-pattern>
-    </servlet-mapping>
-
-    <env-entry>
-        <env-entry-name>jsf/ProjectStage</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>UnitTest</env-entry-value>
-    </env-entry>
-
-</web-app>
diff --git a/jsf-ri/conf/xslt/facelets1_0-2_0toSchema.xsl b/jsf-ri/conf/xslt/facelets1_0-2_0toSchema.xsl
deleted file mode 100644
index 9c9d71e..0000000
--- a/jsf-ri/conf/xslt/facelets1_0-2_0toSchema.xsl
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
-  -->
-
-<!--
-
-  Translates a JSF 1.0/1.1 faces-config document into a JSF 1.2 faces-config
-  document, using the following conversion rules:
-
-  1. Change the <facelet-taglib> element to read as follows:
-     <taglib xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-         http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd">
-  2. Change the namespace of all elements to the default of
-     http://java.sun.com/xml/ns/javaee
-
--->
-
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:old="http://java.sun.com/JSF/Facelet">
-    <xsl:output method="xml"/>
-    <xsl:template match="/old:facelet-taglib">
-        <xsl:element name="facelet-taglib"
-                     namespace="http://java.sun.com/xml/ns/javaee">
-            <xsl:attribute name="xsi:schemaLocation"
-                           namespace="http://www.w3.org/2001/XMLSchema-instance">http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd</xsl:attribute>
-            <xsl:attribute name="version">2.0</xsl:attribute>
-            <xsl:apply-templates select="*"/>
-        </xsl:element>
-    </xsl:template>
-
-    <!--
-       Convert all 1.0/1.1 elements to 1.2
-    -->
-    <xsl:template match="old:*">
-        <xsl:element name="{local-name()}"
-                     namespace="http://java.sun.com/xml/ns/javaee">
-            <xsl:copy-of select="@*"/>
-            <xsl:apply-templates/>
-        </xsl:element>
-    </xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/jsf-ri/conf/xslt/jsf1_0-1_1toSchema.xsl b/jsf-ri/conf/xslt/jsf1_0-1_1toSchema.xsl
deleted file mode 100644
index 1bfc0fa..0000000
--- a/jsf-ri/conf/xslt/jsf1_0-1_1toSchema.xsl
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
-  -->
-
-<!--
-
-  Translates a JSF 1.0/1.1 faces-config document into a JSF 1.2 faces-config
-  document, using the following conversion rules:
-
-  1. Change the <faces-config> element to read as follows:
-     <taglib xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-         http://java.sun.com/xml/ns/javaee/web-facesconfig_1_1.xsd">
-  2. Change the namespace of all elements to the default of
-     http://java.sun.com/xml/ns/javaee
-
--->
-
-<xsl:stylesheet version="1.0"                
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"               
-                xmlns:old="http://java.sun.com/JSF/Configuration">
-    <xsl:output method="xml"/>
-    <xsl:template match="/old:faces-config">
-        <xsl:element name="faces-config"
-                     namespace="http://java.sun.com/xml/ns/javaee">
-            <xsl:attribute name="xsi:schemaLocation"
-                           namespace="http://www.w3.org/2001/XMLSchema-instance">http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_1.xsd</xsl:attribute>
-            <xsl:attribute name="version">1.1</xsl:attribute>
-            <xsl:apply-templates select="*"/>
-        </xsl:element>
-    </xsl:template>
-
-    <!--
-       Convert all 1.0/1.1 elements to 1.2
-    -->
-    <xsl:template match="old:*">
-        <xsl:element name="{local-name()}"
-                     namespace="http://java.sun.com/xml/ns/javaee">
-            <xsl:copy-of select="@*"/>
-            <xsl:apply-templates/>
-        </xsl:element>
-    </xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/jsf-ri/conf/xslt/merge-config.xsl b/jsf-ri/conf/xslt/merge-config.xsl
deleted file mode 100644
index b5617bf..0000000
--- a/jsf-ri/conf/xslt/merge-config.xsl
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005-2010 Sun Microsystems Inc. All Rights Reserved
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-                xmlns:jsf="http://java.sun.com/xml/ns/javaee"
-                version="1.0">
-    <xsl:output method="xml" indent="yes"/>
-
-    <xsl:strip-space elements="*"/>
-    <xsl:namespace-alias stylesheet-prefix="jsf" result-prefix="#default"/>
-
-    <xsl:variable name="source" select="document('../../resources/jsf-ri-config.xml')"/>
-
-    <xsl:template match="jsf:faces-config">
-
-        <faces-config>
-
-        <xsl:for-each select="$source/jsf:faces-config/child::*">
-            <xsl:copy-of select="."/>
-        </xsl:for-each>
-
-        <xsl:for-each select="child::*">
-            <xsl:copy-of select="."/>
-        </xsl:for-each>
-
-        </faces-config>
-
-    </xsl:template>
-</xsl:stylesheet>
diff --git a/jsf-ri/conf/xslt/prune-tool-data.xsl b/jsf-ri/conf/xslt/prune-tool-data.xsl
deleted file mode 100644
index cd319ad..0000000
--- a/jsf-ri/conf/xslt/prune-tool-data.xsl
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005-2010 Sun Microsystems Inc. All Rights Reserved
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-                xmlns:jsf="http://java.sun.com/xml/ns/javaee"
-                version="1.0">
-    <xsl:output method="xml" indent="yes"/>
-
-    <xsl:strip-space elements="*"/>
-    <xsl:namespace-alias stylesheet-prefix="jsf" result-prefix="#default"/>
-
-    <xsl:template match="jsf:attribute"/>
-    <xsl:template match="jsf:component-extension"/>
-    <xsl:template match="jsf:description"/>
-    <xsl:template match="jsf:display-name"/>
-    <xsl:template match="jsf:facet"/>
-    <xsl:template match="jsf:large-icon"/>
-    <xsl:template match="jsf:property"/>
-    <xsl:template match="jsf:renderer-extension"/>
-    <xsl:template match="jsf:small-icon"/>
-    <xsl:template match="*|@*|text()">
-       <xsl:copy>
-           <xsl:apply-templates select="*|@*|text()"/>
-       </xsl:copy> 
-    </xsl:template>
-</xsl:stylesheet>
diff --git a/jsf-ri/impl.iml b/jsf-ri/impl.iml
deleted file mode 100644
index 186f4fd..0000000
--- a/jsf-ri/impl.iml
+++ /dev/null
@@ -1,1141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="replace-variableresolver">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="view-expired">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/view-expired/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="command-link-redirect">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/command-link-redirect/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-redirect/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="command-link-back-button">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="resource-locale-prefix">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="never-unwrap-exceptions">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="jar-ordering">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="replace-statemanager">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="wcag-datatable">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="string-converter">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/string-converter/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="replace-application">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/replace-application/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="converter-property-editor">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="replace-lifecycle">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="write-attribute-script-disabled">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="el-performance">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/el-performance/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="write-attribute-script-enabled">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="empty-string-as-null">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="late-bindings">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="invalid-mapping">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="disable-unicode-escaping">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="core-tags">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/core-tags/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="nested-loadbundles">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="nested-datatables">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="property-resolver-jsp">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="cactus-test">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/conf/test/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/conf/test" relative="/WEB-INF" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="systest">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="web" name="Web">
-      <configuration>
-        <descriptors>
-          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/systest-per-webapp/document-ordering/web/WEB-INF/web.xml" />
-        </descriptors>
-        <webroots>
-          <root url="file://$MODULE_DIR$/systest-per-webapp/document-ordering/web" relative="/" />
-        </webroots>
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/build/generate" />
-          <root url="file://$MODULE_DIR$/src" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" />
-          <root url="file://$MODULE_DIR$/systest/src" />
-          <root url="file://$MODULE_DIR$/test" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/build/generate" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/clientside-statesaving/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/command-link-back-button/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/core-tags/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/disable-bean-validator/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/el-performance/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-application/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/string-converter/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/view-expired/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/src/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/systest/src" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/build/classes" />
-      <excludeFolder url="file://$MODULE_DIR$/build/javadocs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/lib" />
-      <excludeFolder url="file://$MODULE_DIR$/build/pdldocs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/test" />
-      <excludeFolder url="file://$MODULE_DIR$/build/test-config-1" />
-      <excludeFolder url="file://$MODULE_DIR$/build/test-config-2" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/absolute-ordering/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/clientside-statesaving/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/converter-property-editor/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/disable-bean-validator/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/disable-unicode-escaping/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/document-ordering/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/empty-string-as-null/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/flash/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/invalid-mapping/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/jar-ordering/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/jsp-flash/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/late-bindings/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/nested-datatables/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/nested-loadbundles/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/never-unwrap-exceptions/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/property-resolver-jsp/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-application/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-lifecycle/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-statemanager/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/replace-variableresolver/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/resource-locale-prefix/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/string-converter/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/wcag-datatable/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-disabled/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest-per-webapp/write-attribute-script-enabled/build" />
-      <excludeFolder url="file://$MODULE_DIR$/systest/build" />
-      <excludeFolder url="file://$MODULE_DIR$/testresults" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="mojarra-build" level="project" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$APPLICATION_HOME_DIR$/lib/javaee.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module" module-name="api" exported="" />
-  </component>
-</module>
-
diff --git a/jsf-ri/maven.xml b/jsf-ri/maven.xml
deleted file mode 100644
index fa7569b..0000000
--- a/jsf-ri/maven.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!--
- The contents of this file are subject to the terms 
- of the Common Development and Distribution License 
- (the "License").  You may not use this file except 
- in compliance with the License.
- 
- You can obtain a copy of the license at 
- glassfish/bootstrap/legal/CDDLv1.0.txt or 
- https://glassfish.dev.java.net/public/CDDLv1.0.html. 
- See the License for the specific language governing 
- permissions and limitations under the License.
- 
- When distributing Covered Code, include this CDDL 
- HEADER in each file and include the License file at 
- glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
- add the following below this CDDL HEADER, with the 
- fields enclosed by brackets "[]" replaced with your 
- own identifying information: Portions Copyright [yyyy] 
- [name of copyright owner]
--->
-
-
-<project default="jsf-impl:build"
-    xmlns:maven="jelly:maven"
-    xmlns:j="jelly:core"
-    xmlns:define="jelly:define"
-    xmlns:util="jelly:util"
-    xmlns:ant="jelly:ant">
-
-  <property file="${user.home}/build.properties"/>
-  <property file="../build.properties"/>
-
-  <goal name="jsf-impl:build">
-
-    <ant:ant target="main">
-    </ant:ant>
-  </goal>
-
-  <goal name="jsf-impl:clean">
-
-    <ant:ant target="clean">
-    </ant:ant>
-    <delete dir="target" />
-  </goal>
-
-  <goal name="java:compile">
-    <!-- <attainGoal name="jsf-impl:build" /> -->
-    <mkdir dir="target/classes" />
-    <unjar dest="target/classes" overwrite="true"
-           src="build/lib/jsf-impl.jar" />
-  </goal>
-
-</project>
diff --git a/jsf-ri/mojarra-jsf-impl.bnd b/jsf-ri/mojarra-jsf-impl.bnd
deleted file mode 100644
index 4a26296..0000000
--- a/jsf-ri/mojarra-jsf-impl.bnd
+++ /dev/null
@@ -1,60 +0,0 @@
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-# Items to merge into the generated manifest
-Specification-Title: JavaServer Faces
-Specification-Version: @spec.version@
-Implementation-Title: @impl.name@
-Implementation-Version: @impl.version@
-Implementation-Vendor: Sun Microsystems, Inc.
-Implementation-Vendor-Id: com.sun
-Extension-Name: @extension.name@
-
-# BND/OSGI Properties
-Export-Package: com.sun.faces.*;version=2.0
-Import-Package: javax.faces.*,javax.servlet.annotation.*;resolution:=optional,javax.servlet.*,javax.el.*,javax.annotation.*,javax.crypto.*,\
-  javax.validation.*;resolution:=optional, \
-  javax.xml.*,org.w3c.dom.*, \
-  com.sun.enterprise.*;resolution:=optional, \
-  groovy.*;resolution:=optional,\
-  org.mortbay.jetty.annotations;resolution:=optional, \
-  org.mortbay.jetty.plus.annotation;resolution:=optional, \
-  org.apache.*;resolution:=optional, \
-  org.xml.sax.*,javax.naming.*
-Include-Resource: META-INF=build/classes/META-INF,build/classes
-Bundle-Version: @osgi.version@
-Bundle-Name: Mojarra JSF Implementation @impl.version@
-Bundle-Description: Mojarra JSF Implementation (javax.faces/@spec.version@) @impl.version@
-Bundle-SymbolicName: javax.faces/com.sun.faces.mojarra-jsf-impl
diff --git a/jsf-ri/project.properties b/jsf-ri/project.properties
deleted file mode 100644
index e68c07a..0000000
--- a/jsf-ri/project.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#maven.javanet.deploy.dryrun=true
-maven.javanet.project=javaserverfaces-sources
diff --git a/jsf-ri/project.xml b/jsf-ri/project.xml
deleted file mode 100644
index c1eb344..0000000
--- a/jsf-ri/project.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!--
-/*
- * The contents of this file are subject to the terms 
- * of the Common Development and Distribution License 
- * (the "License").  You may not use this file except 
- * in compliance with the License.
- * 
- * You can obtain a copy of the license at 
- * legal/CDDLv1.0.txt or 
- * https://javaserverfaces.dev.java.net/CDDL.html. 
- * See the License for the specific language governing 
- * permissions and limitations under the License.
- * 
- * When distributing Covered Code, include this CDDL 
- * HEADER in each file and include the License file at 
- * legal/CDDLv1.0.txt.  If applicable, 
- * add the following below this CDDL HEADER, with the 
- * fields enclosed by brackets "[]" replaced with your 
- * own identifying information: Portions Copyright [yyyy] 
- * [name of copyright owner]
- */
-
--->
-
-<project xmlns="http://maven.apache.org/POM/3.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/3.0.0 http://maven.apache.org/maven-v3_0_0.xsd">
-    <extend>../common/mvn/project.xml</extend>
-    <!-- a unique name for this project -->
-    <artifactId>jsf-impl</artifactId>
-    <!-- a short but descriptive name for the project -->
-    <name>JSF Implementation</name>
-</project>
-
diff --git a/jsf-ri/resources/empty-faces-config.xml b/jsf-ri/resources/empty-faces-config.xml
deleted file mode 100644
index 4f54515..0000000
--- a/jsf-ri/resources/empty-faces-config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">
-</faces-config>
diff --git a/jsf-ri/resources/jsf-ri-config.xml b/jsf-ri/resources/jsf-ri-config.xml
deleted file mode 100644
index 510f581..0000000
--- a/jsf-ri/resources/jsf-ri-config.xml
+++ /dev/null
@@ -1,300 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- =========== RI CONFIGURATION FILE ===================================== -->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    metadata-complete="true"
-    version="2.0">
-
-
-  <!-- Configure Object Factories -->
-
-  <factory>
-    <application-factory>
-      com.sun.faces.application.ApplicationFactoryImpl
-    </application-factory>
-    <exception-handler-factory>
-      com.sun.faces.context.ExceptionHandlerFactoryImpl
-    </exception-handler-factory>
-    <visit-context-factory>
-      com.sun.faces.component.visit.VisitContextFactoryImpl
-    </visit-context-factory>
-    <faces-context-factory>
-      com.sun.faces.context.FacesContextFactoryImpl
-    </faces-context-factory>
-    <partial-view-context-factory>
-      com.sun.faces.context.PartialViewContextFactoryImpl
-    </partial-view-context-factory>
-    <lifecycle-factory>
-      com.sun.faces.lifecycle.LifecycleFactoryImpl
-    </lifecycle-factory>
-    <render-kit-factory>
-      com.sun.faces.renderkit.RenderKitFactoryImpl
-    </render-kit-factory>
-    <view-declaration-language-factory>
-      com.sun.faces.application.view.ViewDeclarationLanguageFactoryImpl
-    </view-declaration-language-factory>
-    <tag-handler-delegate-factory>
-      com.sun.faces.facelets.tag.jsf.TagHandlerDelegateFactoryImpl
-    </tag-handler-delegate-factory>
-    <external-context-factory>
-      com.sun.faces.context.ExternalContextFactoryImpl
-    </external-context-factory>
-  </factory>
-
-
-  <!-- Configure Application Objects -->
-
-  <application>
-    <action-listener>
-      com.sun.faces.application.ActionListenerImpl
-    </action-listener>     
-    <navigation-handler>
-      com.sun.faces.application.NavigationHandlerImpl
-    </navigation-handler>     
-    <state-manager>
-      com.sun.faces.application.StateManagerImpl
-    </state-manager>
-    <view-handler>
-        com.sun.faces.application.view.MultiViewHandler
-    </view-handler>
-    <resource-handler>
-      com.sun.faces.application.resource.ResourceHandlerImpl
-    </resource-handler>
-  </application>
-
-
-  <!-- Configure Standard By-Id Converters -->
-
-  <converter>
-    <converter-id>javax.faces.BigDecimal</converter-id>
-    <converter-class>javax.faces.convert.BigDecimalConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.BigInteger</converter-id>
-    <converter-class>javax.faces.convert.BigIntegerConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Boolean</converter-id>
-    <converter-class>javax.faces.convert.BooleanConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Byte</converter-id>
-    <converter-class>javax.faces.convert.ByteConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Character</converter-id>
-    <converter-class>javax.faces.convert.CharacterConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.DateTime</converter-id>
-    <converter-class>javax.faces.convert.DateTimeConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Double</converter-id>
-    <converter-class>javax.faces.convert.DoubleConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Float</converter-id>
-    <converter-class>javax.faces.convert.FloatConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Integer</converter-id>
-    <converter-class>javax.faces.convert.IntegerConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Long</converter-id>
-    <converter-class>javax.faces.convert.LongConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Number</converter-id>
-    <converter-class>javax.faces.convert.NumberConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-id>javax.faces.Short</converter-id>
-    <converter-class>javax.faces.convert.ShortConverter</converter-class>
-  </converter>
-
-  <!-- Configure Standard By-Class Converters -->
-
-  <converter>
-    <converter-for-class>java.math.BigDecimal</converter-for-class>
-    <converter-class>javax.faces.convert.BigDecimalConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.math.BigInteger</converter-for-class>
-    <converter-class>javax.faces.convert.BigIntegerConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Boolean</converter-for-class>
-    <converter-class>javax.faces.convert.BooleanConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Byte</converter-for-class>
-    <converter-class>javax.faces.convert.ByteConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Character</converter-for-class>
-    <converter-class>javax.faces.convert.CharacterConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Double</converter-for-class>
-    <converter-class>javax.faces.convert.DoubleConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Float</converter-for-class>
-    <converter-class>javax.faces.convert.FloatConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Integer</converter-for-class>
-    <converter-class>javax.faces.convert.IntegerConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Long</converter-for-class>
-    <converter-class>javax.faces.convert.LongConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Short</converter-for-class>
-    <converter-class>javax.faces.convert.ShortConverter</converter-class>
-  </converter>
-  <converter>
-    <converter-for-class>java.lang.Enum</converter-for-class>
-    <converter-class>javax.faces.convert.EnumConverter</converter-class>
-  </converter>
-    
-    <!-- Add our implementation specific PhaseListeners -->
-    <lifecycle>
-        <phase-listener>com.sun.faces.lifecycle.ELResolverInitPhaseListener</phase-listener>
-    </lifecycle>
-
-  <!-- Configure Behaviors -->
-
-  <behavior>
-    <behavior-id>javax.faces.behavior.Ajax</behavior-id>
-    <behavior-class>javax.faces.component.behavior.AjaxBehavior</behavior-class>
-  </behavior>
-
-  <!-- Configure Standard Validators -->
-
-  <validator>
-      <validator-id>javax.faces.Bean</validator-id>
-      <validator-class>javax.faces.validator.BeanValidator</validator-class>
-  </validator>
-  <validator>
-    <validator-id>javax.faces.DoubleRange</validator-id>
-    <validator-class>
-      javax.faces.validator.DoubleRangeValidator
-  </validator-class>
-  </validator>
-  <validator>
-    <validator-id>javax.faces.Length</validator-id>
-    <validator-class>javax.faces.validator.LengthValidator</validator-class>
-  </validator>
-  <validator>
-    <validator-id>javax.faces.LongRange</validator-id>
-    <validator-class>javax.faces.validator.LongRangeValidator</validator-class>
-  </validator>
-  <validator>
-      <validator-id>javax.faces.RegularExpression</validator-id>
-      <validator-class>javax.faces.validator.RegexValidator</validator-class>
-  </validator>
-  <validator>
-      <validator-id>javax.faces.Required</validator-id>
-      <validator-class>javax.faces.validator.RequiredValidator</validator-class>
-  </validator>
-
-  <!-- Add our implementation specific Validators -->
-  <validator>
-      <validator-id>com.sun.faces.ext.validator.CreditCardValidator</validator-id>
-      <validator-class>com.sun.faces.ext.validator.CreditCardValidator</validator-class>
-  </validator>
-
-  <!-- Add our implementation specific Components  -->
-    <component>
-        <component-type>com.sun.faces.ext.focus</component-type>
-        <component-class>com.sun.faces.ext.component.UIFocus</component-class>
-    </component>
-
-    <!-- Facelets Custom Components -->
-    
-    <component>
-        <component-type>facelets.ui.Repeat</component-type>
-        <component-class>com.sun.faces.facelets.component.UIRepeat</component-class>
-    </component>
-    <component>
-        <component-type>facelets.ui.ComponentRef</component-type>
-        <component-class>com.sun.faces.facelets.tag.ui.ComponentRef</component-class>
-    </component>
-    <component>
-        <component-type>facelets.ui.Debug</component-type>
-        <component-class>com.sun.faces.facelets.tag.ui.UIDebug</component-class>
-    </component>
-    <component>
-        <component-type>javax.faces.Composite</component-type>
-        <component-class>com.sun.faces.facelets.tag.jsf.CompositeComponentImpl
-        </component-class>
-    </component>
-
-    <!-- Custom component to contain component resources -->
-    <component>
-        <component-type>javax.faces.ComponentResourceContainer</component-type>
-        <component-class>com.sun.faces.component.ComponentResourceContainer</component-class>
-    </component>
-    <!-- Add our implementation specific Renderers -->
-    <render-kit>
-        <render-kit-id>HTML_BASIC</render-kit-id>
-        <renderer>
-            <component-family>FocusFamily</component-family>
-            <renderer-type>com.sun.faces.ext.render.FocusHTMLRenderer</renderer-type>
-            <renderer-class>com.sun.faces.ext.render.FocusHTMLRenderer</renderer-class>
-        </renderer>
-        <!-- Facelets Custom Renderers -->
-        <renderer>
-            <component-family>facelets</component-family>
-            <renderer-type>facelets.ui.Repeat</renderer-type>
-            <renderer-class>com.sun.faces.facelets.component.RepeatRenderer</renderer-class>
-        </renderer>
-        <client-behavior-renderer>
-            <client-behavior-renderer-type>javax.faces.behavior.Ajax</client-behavior-renderer-type>
-            <client-behavior-renderer-class>com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer</client-behavior-renderer-class>
-        </client-behavior-renderer>
-    </render-kit>
-</faces-config>
diff --git a/jsf-ri/resources/mojarra.js b/jsf-ri/resources/mojarra.js
deleted file mode 100644
index eec135e..0000000
--- a/jsf-ri/resources/mojarra.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- @project JSF Ajax Library
- @version 2.0
- @description This is the standard implementation of the JSF Ajax Library.
- */
-
-/**
- * Register with OpenAjax
- */
-if (typeof OpenAjax !== "undefined" &&
-    typeof OpenAjax.hub.registerLibrary !== "undefined") {
-    OpenAjax.hub.registerLibrary("mojarra", "www.sun.com", "1.0", null);
-}
-
-/**
- * @name mojarra
- * @namespace
- */
-
-/*
- * Create our top level namespaces - mojarra
- */
-var mojarra = mojarra || {};
-
-
-/**
- * This function deletes any hidden parameters added
- * to the form by checking for a variable called 'adp'
- * defined on the form.  If present, this variable will
- * contain all the params added by 'apf'.
- *
- * @param f - the target form
- */
-mojarra.dpf = function dpf(f) {
-    var adp = f.adp;
-    if (adp !== null) {
-        for (var i = 0; i < adp.length; i++) {
-            f.removeChild(adp[i]);
-        }
-    }
-};
-
-/*
- * This function adds any parameters specified by the
- * parameter 'pvp' to the form represented by param 'f'.
- * Any parameters added will be stored in a variable
- * called 'adp' and stored on the form.
- *
- * @param f - the target form
- * @param pvp - associative array of parameter
- *  key/value pairs to be added to the form as hidden input
- *  fields.
- */
-mojarra.apf = function apf(f, pvp) {
-    var adp = new Array();
-    f.adp = adp;
-    var i = 0;
-    for (var k in pvp) {
-        if (pvp.hasOwnProperty(k)) {
-            var p = document.createElement("input");
-            p.type = "hidden";
-            p.name = k;
-            p.value = pvp[k];
-            f.appendChild(p);
-            adp[i++] = p;
-        }
-    }
-};
-
-/*
- * This is called by command link and command button.  It provides
- * the form it is nested in, the parameters that need to be
- * added and finally, the target of the action.  This function
- * will delete any parameters added <em>after</em> the form
- * has been submitted to handle DOM caching issues.
- *
- * @param f - the target form
- * @param pvp - associative array of parameter
- *  key/value pairs to be added to the form as hidden input
- *  fields.
- * @param t - the target of the form submission
- */
-mojarra.jsfcljs = function jsfcljs(f, pvp, t) {
-    mojarra.apf(f, pvp);
-    var ft = f.target;
-    if (t) {
-        f.target = t;
-    }
-    f.submit();
-    f.target = ft;
-    mojarra.dpf(f);
-};
-
-/*
- * This is called by functions that need access to their calling
- * context, in the form of <code>this</code> and <code>event</code>
- * objects.
- *
- *  @param f the function to execute
- *  @param t this of the calling function
- *  @param e event of the calling function
- *  @return object that f returns
- */
-mojarra.jsfcbk = function jsfcbk(f, t, e) {
-    return f.call(t,e);
-};
-
-/*
- * This is called by the AjaxBehaviorRenderer script to
- * trigger a jsf.ajax.request() call.
- *
- *  @param s the source element or id
- *  @param e event of the calling function
- *  @param n name of the behavior event that has fired
- *  @param ex execute list
- *  @param re render list
- *  @param op options object
- */
-mojarra.ab = function ab(s, e, n, ex, re, op) {
-    if (!op) {
-        op = {};
-    }
-
-    if (n) {
-        op["javax.faces.behavior.event"] = n;
-    }
-
-    if (ex) {
-        op["execute"] = ex;
-    }
-
-    if (re) {
-        op["render"] = re;
-    }
-
-    jsf.ajax.request(s, e, op);
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/RIConstants.java b/jsf-ri/src/main/java/com/sun/faces/RIConstants.java
deleted file mode 100644
index 4f4ac7d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/RIConstants.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import javax.faces.render.RenderKitFactory;
-
-/**
- * This class contains literal strings used throughout the Faces RI.
- */
-public class RIConstants {
-
-
-    /**
-     * Used to add uniqueness to the names.
-     */
-    public final static String FACES_PREFIX = "com.sun.faces.";
-
-    public final static String HTML_BASIC_RENDER_KIT = FACES_PREFIX +
-        RenderKitFactory.HTML_BASIC_RENDER_KIT;       
-
-    public static final String SAVESTATE_FIELD_DELIMITER = "~";
-    public static final String SAVESTATE_FIELD_MARKER = 
-          SAVESTATE_FIELD_DELIMITER 
-           + FACES_PREFIX 
-           + "saveStateFieldMarker" 
-           + SAVESTATE_FIELD_DELIMITER;
-
-    public static final String SAVED_STATE = FACES_PREFIX + "savedState";
-
-
-    /*
-    * <p>TLV Resource Bundle Location </p>
-    */
-    public static final String TLV_RESOURCE_LOCATION =
-        FACES_PREFIX + "resources.Resources";
-
-    public static final Object NO_VALUE = "";
-      
-    public static final String CORE_NAMESPACE = 
-        "http://java.sun.com/jsf/core";
-    public static final String HTML_NAMESPACE = 
-        "http://java.sun.com/jsf/html";
-    
-    public static final Class[] EMPTY_CLASS_ARGS = new Class[0];
-    public static final Object[] EMPTY_METH_ARGS = new Object[0];
-
-    /**
-     *<p>ResponseWriter Content Types and Encoding</p>
-     */
-    public static final String HTML_CONTENT_TYPE = "text/html";
-    public static final String XHTML_CONTENT_TYPE = "application/xhtml+xml";
-    public static final String APPLICATION_XML_CONTENT_TYPE = "application/xml";
-    public static final String TEXT_XML_CONTENT_TYPE = "text/xml";
-    public static final String ALL_MEDIA = "*/*";
-    public static final String CHAR_ENCODING = "ISO-8859-1";
-    public static final String DEFAULT_LIFECYCLE = 
-          FACES_PREFIX + "DefaultLifecycle";
-    public static final String DEFAULT_STATEMANAGER =
-          FACES_PREFIX + "DefaultStateManager";
-
-    public static final String ERROR_PAGE_PRESENT_KEY_NAME = 
-	FACES_PREFIX + "errorPagePresent";
-
-    public static final String FACES_INITIALIZER_MAPPINGS_ADDED =
-          FACES_PREFIX + "facesInitializerMappingsAdded";
-
-    public static final String VIEWID_KEY_NAME = FACES_PREFIX + "viewId";
-
-    private RIConstants() {
-
-        throw new IllegalStateException();
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ActionListenerImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/ActionListenerImpl.java
deleted file mode 100644
index 78478c7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ActionListenerImpl.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.NavigationHandler;
-import javax.faces.component.ActionSource;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.MethodNotFoundException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.text.MessageFormat;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-/**
- * This action listener implementation processes action events during the
- * <em>Apply Request Values</em> or <em>Invoke Application</em>
- * phase of the request processing lifecycle (depending upon the
- * <code>immediate</code> property of the {@link ActionSource} that
- * queued this event.  It invokes the specified application action method,
- * and uses the logical outcome value to invoke the default navigation handler
- * mechanism to determine which view should be displayed next.</p>
- */
-public class ActionListenerImpl implements ActionListener {
-
-
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-
-    // --------------------------------------------- Methods From ActionListener
-
- 
-
-    @SuppressWarnings("deprecation")
-    public void processAction(ActionEvent event) {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("processAction({0})",
-                                             event.getComponent().getId()));
-        }
-        UIComponent source = event.getComponent();
-        ActionSource actionSource = (ActionSource) source;
-        FacesContext context = FacesContext.getCurrentInstance();
-
-        Application application = context.getApplication();
-
-        Object invokeResult;
-        String outcome = null;
-        MethodBinding binding;
-
-        binding = actionSource.getAction();
-        if (binding != null) {
-            try {
-                if (null != (invokeResult = binding.invoke(context, null))) {
-                    outcome = invokeResult.toString();
-                }
-                // else, default to null, as assigned above.
-            } catch (MethodNotFoundException e) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE, e.getMessage(), e);
-                }
-                throw new FacesException
-                      (binding.getExpressionString() + ": " + e.getMessage(),
-                       e);
-            }
-            catch (EvaluationException e) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE, e.getMessage(), e);
-                }
-                throw new FacesException
-                      (binding.getExpressionString() + ": " + e.getMessage(),
-                       e);
-            }
-        }
-
-        // Retrieve the NavigationHandler instance..
-
-        NavigationHandler navHandler = application.getNavigationHandler();
-
-        // Invoke nav handling..
-
-        navHandler.handleNavigation(context,
-                                    (null != binding) ?
-                                    binding.getExpressionString() : null,
-                                    outcome);
-
-        // Trigger a switch to Render Response if needed
-        context.renderResponse();
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationAssociate.java b/jsf-ri/src/main/java/com/sun/faces/application/ApplicationAssociate.java
deleted file mode 100644
index 4ee0215..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationAssociate.java
+++ /dev/null
@@ -1,689 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.application.ApplicationStateInfo;
-import com.sun.faces.scripting.groovy.GroovyHelper;
-import com.sun.faces.application.resource.ResourceCache;
-import com.sun.faces.application.resource.ResourceManager;
-import com.sun.faces.application.annotation.AnnotationManager;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.facelets.FaceletCache;
-import com.sun.faces.facelets.compiler.Compiler;
-import com.sun.faces.facelets.compiler.SAXCompiler;
-import com.sun.faces.facelets.FaceletFactory;
-import javax.faces.view.facelets.TagDecorator;
-import com.sun.faces.facelets.tag.composite.CompositeLibrary;
-import com.sun.faces.facelets.tag.jstl.core.JstlCoreLibrary;
-import com.sun.faces.facelets.tag.jstl.fn.JstlFunction;
-import com.sun.faces.facelets.tag.ui.UILibrary;
-import com.sun.faces.facelets.tag.jsf.core.CoreLibrary;
-import com.sun.faces.facelets.tag.jsf.html.HtmlLibrary;
-import com.sun.faces.facelets.util.ReflectionUtil;
-import com.sun.faces.facelets.util.FunctionLibrary;
-import com.sun.faces.facelets.util.DevTools;
-import javax.faces.view.facelets.ResourceResolver;
-import com.sun.faces.facelets.impl.DefaultResourceResolver;
-import com.sun.faces.facelets.impl.DefaultFaceletFactory;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.spi.InjectionProvider;
-import com.sun.faces.spi.InjectionProviderFactory;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.*;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableLazyBeanValidation;
-
-import javax.el.CompositeELResolver;
-import javax.el.ELResolver;
-import javax.el.ExpressionFactory;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.VariableResolver;
-import javax.faces.application.ProjectStage;
-import javax.faces.event.PreDestroyCustomScopeEvent;
-import javax.faces.event.ScopeContext;
-import javax.servlet.ServletContext;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.LinkedHashSet;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.faces.application.NavigationCase;
-
-/**
- * <p>Break out the things that are associated with the Application, but
- * need to be present even when the user has replaced the Application
- * instance.</p>
- * <p/>
- * <p>For example: the user replaces ApplicationFactory, and wants to
- * intercept calls to createValueExpression() and createMethodExpression() for
- * certain kinds of expressions, but allow the existing application to
- * handle the rest.</p>
- */
-
-public class ApplicationAssociate {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    private ApplicationImpl app = null;
-
-    /**
-     * Overall Map containing <code>from-view-id</code> key and
-     * <code>Set</code> of <code>NavigationCase</code>
-     * objects for that key; The <code>from-view-id</code> strings in
-     * this map will be stored as specified in the configuration file -
-     * some of them will have a trailing asterisk "*" signifying wild
-     * card, and some may be specified as an asterisk "*".
-     */
-    private Map<String, Set<NavigationCase>> navigationMap = null;
-
-    // Flag indicating that a response has been rendered.
-    private boolean responseRendered = false;
-
-    private static final String ASSOCIATE_KEY = RIConstants.FACES_PREFIX +
-         "ApplicationAssociate";
-
-    private static ThreadLocal<ApplicationAssociate> instance =
-        new ThreadLocal<ApplicationAssociate>() {
-            protected ApplicationAssociate initialValue() {
-                return (null);
-            }
-        };
-
-    private List<ELResolver> elResolversFromFacesConfig = null;
-
-    @SuppressWarnings("deprecation")
-    private VariableResolver legacyVRChainHead = null;
-
-    @SuppressWarnings("deprecation")
-    private PropertyResolver legacyPRChainHead = null;
-    private ExpressionFactory expressionFactory = null;
-
-    @SuppressWarnings("deprecation")
-    private PropertyResolver legacyPropertyResolver = null;
-
-    @SuppressWarnings("deprecation")
-    private VariableResolver legacyVariableResolver = null;
-    private CompositeELResolver facesELResolverForJsp = null;
-
-    private InjectionProvider injectionProvider;
-    private ResourceCache resourceCache;
-
-    private String contextName;
-    private boolean requestServiced;
-    private boolean errorPagePresent;
-
-    private BeanManager beanManager;
-    private GroovyHelper groovyHelper;
-    private AnnotationManager annotationManager;
-    private boolean devModeEnabled;
-    private Compiler compiler;
-    private FaceletFactory faceletFactory;
-    private ResourceManager resourceManager;
-    private ApplicationStateInfo applicationStateInfo;
-
-    private PropertyEditorHelper propertyEditorHelper;
-
-    private NamedEventManager namedEventManager;
-
-    public ApplicationAssociate(ApplicationImpl appImpl) {
-        app = appImpl;
-
-        propertyEditorHelper = new PropertyEditorHelper(appImpl);
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        if (ctx == null) {
-            throw new IllegalStateException(
-                 MessageUtils.getExceptionMessageString(
-                      MessageUtils.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK_ID));
-        }
-        ExternalContext externalContext = ctx.getExternalContext();
-        if (null != externalContext.getApplicationMap().get(ASSOCIATE_KEY)) {
-            throw new IllegalStateException(
-                 MessageUtils.getExceptionMessageString(
-                      MessageUtils.APPLICATION_ASSOCIATE_EXISTS_ID));
-        }
-        externalContext.getApplicationMap().put(ASSOCIATE_KEY, this);
-        //noinspection CollectionWithoutInitialCapacity
-        navigationMap = new ConcurrentHashMap<String, Set<NavigationCase>>();
-        injectionProvider = InjectionProviderFactory.createInstance(externalContext);
-        WebConfiguration webConfig = WebConfiguration.getInstance(externalContext);
-        beanManager = new BeanManager(injectionProvider,
-                                      webConfig.isOptionEnabled(
-                                           EnableLazyBeanValidation));
-        // install the bean manager as a system event listener for custom
-        // scopes being destoryed.
-        app.subscribeToEvent(PreDestroyCustomScopeEvent.class,
-                             ScopeContext.class,
-                             beanManager);
-        annotationManager = new AnnotationManager();
-
-        groovyHelper = GroovyHelper.getCurrentInstance();
-
-        devModeEnabled = (appImpl.getProjectStage() == ProjectStage.Development);
-        // initialize Facelets
-        if (!webConfig.isOptionEnabled(DisableFaceletJSFViewHandler)) {
-            compiler = createCompiler(webConfig);
-            faceletFactory = createFaceletFactory(compiler, webConfig);
-        }
-
-        if (!devModeEnabled) {
-            resourceCache = new ResourceCache();
-        }
-
-        resourceManager = new ResourceManager(resourceCache);
-        namedEventManager = new NamedEventManager();
-        applicationStateInfo = new ApplicationStateInfo();
-    }
-
-    public static ApplicationAssociate getInstance(ExternalContext
-         externalContext) {
-        if (externalContext == null) {
-            return null;
-        }
-        Map applicationMap = externalContext.getApplicationMap();
-        return ((ApplicationAssociate)
-             applicationMap.get(ASSOCIATE_KEY));
-    }
-
-    public static ApplicationAssociate getInstance(ServletContext context) {
-        if (context == null) {
-            return null;
-        }
-        return (ApplicationAssociate) context.getAttribute(ASSOCIATE_KEY);
-    }
-
-    public static void setCurrentInstance(ApplicationAssociate associate) {
-
-        if (associate == null) {
-            instance.remove();
-        } else {
-            instance.set(associate);
-        }
-        
-    }
-
-    public static ApplicationAssociate getCurrentInstance() {
-
-        ApplicationAssociate associate = instance.get();
-        if (associate == null) {
-            // Fallback to ExternalContext lookup
-            FacesContext fc = FacesContext.getCurrentInstance();
-            if (fc != null) {
-                ExternalContext extContext = fc.getExternalContext();
-                if (extContext != null) {
-                    return ApplicationAssociate.getInstance(extContext);
-                }
-            }
-        }
-
-        return associate;
-
-    }
-
-    public ApplicationStateInfo getApplicationStateInfo() {
-        return applicationStateInfo;
-    }
-
-
-    public ResourceManager getResourceManager() {
-        return resourceManager;
-    }
-
-    public void setResourceManager(ResourceManager resourceManager) {
-        this.resourceManager = resourceManager;
-    }
-
-    public ResourceCache getResourceCache() {
-        return resourceCache;
-    }
-
-    public AnnotationManager getAnnotationManager() {
-        return annotationManager;
-    }
-
-    public Compiler getCompiler() {
-        return compiler;
-    }
-
-    public boolean isErrorPagePresent() {
-        return errorPagePresent;
-    }
-
-    public void setErrorPagePresent(boolean errorPagePresent) {
-        this.errorPagePresent = errorPagePresent;
-    }
-
-    public FaceletFactory getFaceletFactory() {
-        return faceletFactory;
-    }
-
-    public static void clearInstance(ExternalContext
-         externalContext) {
-        Map applicationMap = externalContext.getApplicationMap();
-        ApplicationAssociate me = (ApplicationAssociate) applicationMap.get(ASSOCIATE_KEY);
-        if (null != me) {
-            if (null != me.resourceBundles) {
-                me.resourceBundles.clear();
-            }
-        }
-        applicationMap.remove(ASSOCIATE_KEY);
-    }
-
-    public static void clearInstance(ServletContext sc) {
-        ApplicationAssociate me = (ApplicationAssociate) sc.getAttribute(ASSOCIATE_KEY);
-        if (null != me) {
-            if (null != me.resourceBundles) {
-                me.resourceBundles.clear();
-            }
-        }
-        sc.removeAttribute(ASSOCIATE_KEY);    
-    }
-
-
-    public BeanManager getBeanManager() {
-        return beanManager;
-    }
-
-    public GroovyHelper getGroovyHelper() {
-        return groovyHelper;
-    }
-
-    public boolean isDevModeEnabled() {
-        return devModeEnabled;
-    }
-
-    /**
-     * Obtain the PropertyEditorHelper instance for this app.
-     *
-     * @return The PropertyEditorHeler instance for this app.
-     */
-    public PropertyEditorHelper getPropertyEditorHelper() {
-        return propertyEditorHelper;
-    }
-
-    /**
-     * This method is called by <code>ConfigureListener</code> and will
-     * contain any <code>VariableResolvers</code> defined within
-     * faces-config configuration files.
-     *
-     * @param resolver VariableResolver
-     */
-    @SuppressWarnings("deprecation")
-    public void setLegacyVRChainHead(VariableResolver resolver) {
-        this.legacyVRChainHead = resolver;
-    }
-
-    @SuppressWarnings("deprecation")
-    public VariableResolver getLegacyVRChainHead() {
-        return legacyVRChainHead;
-    }
-
-    /**
-     * This method is called by <code>ConfigureListener</code> and will
-     * contain any <code>PropertyResolvers</code> defined within
-     * faces-config configuration files.
-     *
-     * @param resolver PropertyResolver
-     */
-    @SuppressWarnings("deprecation")
-    public void setLegacyPRChainHead(PropertyResolver resolver) {
-        this.legacyPRChainHead = resolver;
-    }
-
-    @SuppressWarnings("deprecation")
-    public PropertyResolver getLegacyPRChainHead() {
-        return legacyPRChainHead;
-    }
-
-    public CompositeELResolver getFacesELResolverForJsp() {
-        return facesELResolverForJsp;
-    }
-
-    public void setFacesELResolverForJsp(CompositeELResolver celr) {
-        facesELResolverForJsp = celr;
-    }
-
-    public void setELResolversFromFacesConfig(List<ELResolver> resolvers) {
-        this.elResolversFromFacesConfig = resolvers;
-    }
-
-    public List<ELResolver> getELResolversFromFacesConfig() {
-        return elResolversFromFacesConfig;
-    }
-
-    public void setExpressionFactory(ExpressionFactory expressionFactory) {
-        this.expressionFactory = expressionFactory;
-    }
-
-    public ExpressionFactory getExpressionFactory() {
-        return this.expressionFactory;
-    }
-
-    public List<ELResolver> getApplicationELResolvers() {
-        return app.getApplicationELResolvers();
-    }
-
-    public InjectionProvider getInjectionProvider() {
-        return injectionProvider;
-    }
-
-    public void setContextName(String contextName) {
-        this.contextName = contextName;
-    }
-
-    public String getContextName() {
-        return contextName;
-    }
-
-    /**
-     * Maintains the PropertyResolver called through
-     * Application.setPropertyResolver()
-     * @param resolver PropertyResolver
-     */
-    @SuppressWarnings("deprecation")
-    public void setLegacyPropertyResolver(PropertyResolver resolver) {
-        this.legacyPropertyResolver = resolver;
-    }
-
-    /**
-     * @return the PropertyResolver called through
-     * Application.getPropertyResolver()
-     */
-    @SuppressWarnings("deprecation")
-    public PropertyResolver getLegacyPropertyResolver() {
-        return legacyPropertyResolver;
-    }
-
-    /**
-     * Maintains the PropertyResolver called through
-     * Application.setVariableResolver()
-     * @param resolver VariableResolver
-     */
-    @SuppressWarnings("deprecation")
-    public void setLegacyVariableResolver(VariableResolver resolver) {
-        this.legacyVariableResolver = resolver;
-    }
-
-    /**
-     * @return the VariableResolver called through
-     * Application.getVariableResolver()
-     */
-    @SuppressWarnings("deprecation")
-    public VariableResolver getLegacyVariableResolver() {
-        return legacyVariableResolver;
-    }
-
-
-    /**
-     * Called by application code to indicate we've processed the
-     * first request to the application.
-     */
-    public void setRequestServiced() {
-        this.requestServiced = true;
-    }
-
-    /**
-     * @return <code>true</code> if we've processed a request, otherwise
-     *         <code>false</code>
-     */
-    public boolean hasRequestBeenServiced() {
-        return requestServiced;
-    }
-
-
-    /**
-     * Add a navigation case to the internal case set.  If a case set
-     * does not already exist in the case list map containing this case
-     * (identified by <code>from-view-id</code>), start a new list,
-     * add the case to it, and store the set in the case set map.
-     * If a case set already exists, overwrite the previous case.
-     *
-     * @param navigationCase the navigation case containing navigation
-     *                       mapping information from the configuration file.
-     */
-    public void addNavigationCase(NavigationCase navigationCase) {
-
-        String fromViewId = navigationCase.getFromViewId();
-        Set<NavigationCase> caseSet = navigationMap.get(fromViewId);
-        if (caseSet == null) {
-            //noinspection CollectionWithoutInitialCapacity
-            caseSet = new LinkedHashSet<NavigationCase>();
-            caseSet.add(navigationCase);
-            navigationMap.put(fromViewId, caseSet);
-        } else {
-            // if there already is a case existing for the
-            // fromviewid/fromaction.fromoutcome combination,
-            // replace it ...  (last one wins).
-            caseSet.add(navigationCase);
-        }
-
-    }
-    
-    
-
-    public NamedEventManager getNamedEventManager() {
-        return namedEventManager;
-    }
-
-
-    /**
-     * Return a <code>Map</code> of navigation mappings loaded from
-     * the configuration system.  The key for the returned <code>Map</code>
-     * is <code>from-view-id</code>, and the value is a <code>List</code>
-     * of navigation cases.
-     *
-     * @return Map the map of navigation mappings.
-     */
-    public Map<String, Set<NavigationCase>> getNavigationCaseListMappings() {
-        if (navigationMap == null) {
-            return Collections.emptyMap();
-        }
-        return navigationMap;
-    }
-
-
-    public ResourceBundle getResourceBundle(FacesContext context,
-                                            String var) {
-        ApplicationResourceBundle bundle = resourceBundles.get(var);
-        if (bundle == null) {
-            return null;
-        }
-        UIViewRoot root;
-        // Start out with the default locale
-        Locale locale;
-        Locale defaultLocale = Locale.getDefault();
-        locale = defaultLocale;
-        // See if this FacesContext has a ViewRoot
-        if (null != (root = context.getViewRoot())) {
-            // If so, ask it for its Locale
-            if (null == (locale = root.getLocale())) {
-                // If the ViewRoot has no Locale, fall back to the default.
-                locale = defaultLocale;
-            }
-        }
-        assert (null != locale);
-        //ResourceBundleBean bean = resourceBundles.get(var);
-        return bundle.getResourceBundle(locale);
-
-    }
-
-    /**
-     * keys: <var> element from faces-config<p>
-     * <p/>
-     * values: ResourceBundleBean instances.
-     */
-
-    @SuppressWarnings({"CollectionWithoutInitialCapacity"})
-    Map<String, ApplicationResourceBundle> resourceBundles =
-         new HashMap<String, ApplicationResourceBundle>();
-
-    public void addResourceBundle(String var, ApplicationResourceBundle bundle) {
-        resourceBundles.put(var, bundle);
-    }
-
-    public Map<String, ApplicationResourceBundle> getResourceBundles() {
-        return resourceBundles;
-    }
-
-    // This is called by ViewHandlerImpl.renderView().
-    public void responseRendered() {
-        responseRendered = true;
-    }
-
-    public boolean isResponseRendered() {
-        return responseRendered;
-    }
-
-
-    protected FaceletFactory createFaceletFactory(Compiler c, WebConfiguration webConfig) {
-
-        // refresh period
-        String refreshPeriod = webConfig.getOptionValue(FaceletsDefaultRefreshPeriod);
-        long period = Long.parseLong(refreshPeriod);
-
-        // resource resolver
-        ResourceResolver resolver = new DefaultResourceResolver();
-        String resolverName = webConfig.getOptionValue(FaceletsResourceResolver);
-        if (resolverName != null && resolverName.length() > 0) {
-            resolver = (ResourceResolver) 
-                    ReflectionUtil.decorateInstance(resolverName,
-                                                    ResourceResolver.class,
-                                                    resolver);
-        }
-        
-        FaceletCache cache = null;
-        String faceletCacheName = webConfig.getOptionValue(FaceletCache);
-        if (faceletCacheName != null && faceletCacheName.length() > 0) {
-            try
-            {
-                cache = (FaceletCache)ReflectionUtil.forName(faceletCacheName)
-                                          .newInstance();
-            }
-            catch(Exception e)
-            {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "Error Loading Facelet cache: " + faceletCacheName,
-                               e);
-                }
-            }
-        }
-
-        // Resource.getResourceUrl(ctx,"/")
-        FaceletFactory factory = new DefaultFaceletFactory(c, resolver, period, cache);
-
-        // Check to see if a custom Factory has been defined
-        String factoryClass = webConfig.getOptionValue(FaceletFactory);
-        if (factoryClass != null && factoryClass.length() > 0) {
-            factory = (FaceletFactory)
-                  ReflectionUtil.decorateInstance(factoryClass,
-                                                  FaceletFactory.class,
-                                                  factory);
-        }
-
-        return factory;
-
-    }
-
-
-    protected Compiler createCompiler(WebConfiguration webConfig) {
-
-        Compiler c = new SAXCompiler();
-
-        // load decorators
-        String decParam = webConfig
-              .getOptionValue(FaceletsDecorators);
-        if (decParam != null) {
-            decParam = decParam.trim();
-            String[] decs = Util.split(decParam, ";");
-            TagDecorator decObj;
-            for (String decorator : decs) {
-                try {
-                    decObj = (TagDecorator) ReflectionUtil.forName(decorator)
-                          .newInstance();
-                    c.addTagDecorator(decObj);
-
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   "Successfully Loaded Decorator: {0}",
-                                   decorator);
-                    }
-                } catch (Exception e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "Error Loading Decorator: " + decorator,
-                                   e);
-                    }
-                }
-            }
-        }
-
-        // skip params?
-        c.setTrimmingComments(
-              webConfig.isOptionEnabled(
-                    BooleanWebContextInitParameter.FaceletsSkipComments));
-
-        c.addTagLibrary(new CoreLibrary());
-        c.addTagLibrary(new HtmlLibrary());
-        c.addTagLibrary(new UILibrary());
-        c.addTagLibrary(new JstlCoreLibrary());
-        c.addTagLibrary(new FunctionLibrary(JstlFunction.class, "http://java.sun.com/jsp/jstl/functions"));
-        if (isDevModeEnabled()) {
-            c.addTagLibrary(new FunctionLibrary(DevTools.class, "http://java.sun.com/mojarra/private/functions"));
-        }
-        c.addTagLibrary(new CompositeLibrary());
-
-        return c;
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/ApplicationFactoryImpl.java
deleted file mode 100644
index 8edd283..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationFactoryImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.FacesLogger;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.text.MessageFormat;
-
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-
-/**
- * <p><strong>ApplicationFactory</strong> is a factory object that creates
- * (if needed) and returns {@link Application} instances.</p>
- * <p/>
- * <p>There must be one {@link ApplicationFactory} instance per web
- * application that is utilizing JavaServer Faces.  This instance can be
- * acquired, in a portable manner, by calling:</p>
- * <pre>
- *   ApplicationFactory factory = (ApplicationFactory)
- *    FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
- * </pre>
- */
-public class ApplicationFactoryImpl extends ApplicationFactory {
-
-   // Log instance for this class
-    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    // Attribute Instance Variables
-
-    private volatile Application application;
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers
-    //
-
-
-    /*
-     * Constructor
-     */
-    public ApplicationFactoryImpl() {
-        super();
-        application = null;
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "Created ApplicationFactory ");
-        }
-    }
-
-
-    /**
-     * <p>Create (if needed) and return an {@link Application} instance
-     * for this web application.</p>
-     */
-    public Application getApplication() {
-
-        if (application == null) {
-            application = new ApplicationImpl();
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine(MessageFormat.format("Created Application instance ''{0}''",
-                                                 application));
-            }
-        }
-        return application;
-    }
-
-
-    /**
-     * <p>Replace the {@link Application} instance that will be
-     * returned for this web application.</p>
-     *
-     * @param application The replacement {@link Application} instance
-     */
-    public synchronized void setApplication(Application application) {
-        if (application == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "application");
-            throw new NullPointerException(message);
-        }
-
-        this.application = application;
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine(MessageFormat.format("set Application Instance to ''{0}''", 
-                                             application.getClass().getName()));
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/ApplicationImpl.java
deleted file mode 100644
index 6aae778..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationImpl.java
+++ /dev/null
@@ -1,2412 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.beans.PropertyEditor;
-import java.beans.PropertyEditorManager;
-import java.lang.reflect.Constructor;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.el.CompositeELResolver;
-import javax.el.ELContextListener;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.ExpressionFactory;
-import javax.el.MethodExpression;
-import javax.faces.FacesException;
-import javax.faces.render.Renderer;
-import javax.faces.application.Application;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.DateTimeConverter;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionListener;
-import javax.faces.validator.Validator;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DateTimeConverterUsesSystemTimezone;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.RegisterConverterPropertyEditors;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.el.FacesCompositeELResolver;
-import com.sun.faces.el.PropertyResolverImpl;
-import com.sun.faces.el.VariableResolverImpl;
-import com.sun.faces.util.Cache;
-import com.sun.faces.util.Cache.Factory;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.ReflectionUtils;
-import com.sun.faces.util.Util;
-
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.beans.PropertyDescriptor;
-import java.util.LinkedHashSet;
-
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEventListenerHolder;
-import javax.faces.event.ExceptionQueuedEventContext;
-
-import java.util.List;
-import java.util.TimeZone;
-import java.util.LinkedHashMap;
-
-import javax.el.ValueExpression;
-import javax.faces.application.Resource;
-import javax.faces.view.ViewDeclarationLanguage;
-
-
-/**
- * <p><strong>Application</strong> represents a per-web-application
- * singleton object where applications based on JavaServer Faces (or
- * implementations wishing to provide extended functionality) can
- * register application-wide singletons that provide functionality
- * required by JavaServer Faces.
- */
-public class ApplicationImpl extends Application {
-
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    private static final ELContextListener[] EMPTY_EL_CTX_LIST_ARRAY = { };
-
-    private static final Map<String,Class<?>[]> STANDARD_CONV_ID_TO_TYPE_MAP =
-         new HashMap<String,Class<?>[]>(8, 1.0f);
-    private static final Map<Class<?>,String> STANDARD_TYPE_TO_CONV_ID_MAP =
-         new HashMap<Class<?>,String>(16, 1.0f);
-
-    static {
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Byte", new Class[] { Byte.TYPE, Byte.class});
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Boolean", new Class[] { Boolean.TYPE, Boolean.class});
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Character", new Class[] { Character.TYPE, Character.class});
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Short", new Class[] { Short.TYPE, Short.class });
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Integer", new Class[] { Integer.TYPE, Integer.class });
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Long", new Class[] { Long.TYPE, Long.class });
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Float", new Class[] { Float.TYPE, Float.class });
-        STANDARD_CONV_ID_TO_TYPE_MAP.put("javax.faces.Double", new Class[] { Double.TYPE, Double.class });
-        for (Map.Entry<String,Class<?>[]> entry : STANDARD_CONV_ID_TO_TYPE_MAP.entrySet()) {
-            Class<?>[] types = entry.getValue();
-            String key = entry.getKey();
-            for (Class<?> clazz : types) {
-                STANDARD_TYPE_TO_CONV_ID_MAP.put(clazz, key);
-            }
-        }
-    }
-
-    // Relationship Instance Variables
-
-    private ApplicationAssociate associate = null;
-    private ProjectStage projectStage;
-
-    private volatile ActionListener actionListener = null;
-    private volatile NavigationHandler navigationHandler = null;
-    private volatile PropertyResolverImpl propertyResolver = null;
-    private volatile VariableResolverImpl variableResolver = null;
-    private volatile ViewHandler viewHandler = null;
-    private volatile ResourceHandler resourceHandler;
-    private volatile StateManager stateManager = null;
-    private volatile ArrayList<Locale> supportedLocales = null;
-    private volatile Locale defaultLocale = null;
-    //
-    // This map stores reference expression | value binding instance
-    // mappings.
-    //
-    
-    //
-    // These three maps store store "identifier" | "class name"
-    // mappings.
-    //
-    private Map<String,Object> behaviorMap = null;
-    private Map<String,Object> componentMap = null;
-    private Map<String,Object> converterIdMap = null;
-    private Map<Class<?>,Object> converterTypeMap = null;
-    private Map<String,Object> validatorMap = null;
-    private Set<String> defaultValidatorIds = null;
-    private volatile Map<String,String> defaultValidatorInfo = null;
-    private volatile String messageBundle = null;
-
-    private List<ELContextListener> elContextListeners = null;
-    private ArrayList<ELResolver> elResolvers = null;
-    private CompositeELResolver compositeELResolver = null;
-    private final SystemEventHelper systemEventHelper = new SystemEventHelper();
-    private final ComponentSystemEventHelper compSysEventHelper = new ComponentSystemEventHelper();
-    private boolean passDefaultTimeZone;
-    private boolean registerPropertyEditors;
-    private TimeZone systemTimeZone;
-
-    private final String IS_PROCESSING_LISTENERS_KEY = "com.sun.faces.application.ApplicationImpl.IS_PROCESSING_LISTENERS";
-
-    /**
-     * Constructor
-     */
-    public ApplicationImpl() {
-        super();
-        associate = new ApplicationAssociate(this);
-        componentMap = new ConcurrentHashMap<String, Object>();
-        converterIdMap = new ConcurrentHashMap<String, Object>();
-        converterTypeMap = new ConcurrentHashMap<Class<?>, Object>();
-        validatorMap = new ConcurrentHashMap<String, Object>();
-        defaultValidatorIds = new LinkedHashSet<String>();
-        behaviorMap = new ConcurrentHashMap<String, Object>();
-        elContextListeners = new CopyOnWriteArrayList<ELContextListener>();
-        propertyResolver = new PropertyResolverImpl();
-        variableResolver = new VariableResolverImpl();
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ctx.getExternalContext().getApplicationMap().put(this.getClass().getName(),
-                                                         this);
-        WebConfiguration webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
-        passDefaultTimeZone = webConfig.isOptionEnabled(DateTimeConverterUsesSystemTimezone);
-        registerPropertyEditors = webConfig.isOptionEnabled(RegisterConverterPropertyEditors);
-        if (passDefaultTimeZone) {
-            systemTimeZone = TimeZone.getDefault();
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, "Created Application instance ");
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#publishEvent(FacesContext, Class, Object)
-     */
-    @Override
-    public void publishEvent(FacesContext context,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Object source) {
-
-        publishEvent(context, systemEventClass, null, source);
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#publishEvent(FacesContext, Class, Object)
-     */
-    @Override
-    public void publishEvent(FacesContext context,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Class<?> sourceBaseType,
-                             Object source) {
-
-        Util.notNull("context", context);
-        Util.notNull("systemEventClass", systemEventClass);
-        Util.notNull("source", source);
-        if (!needsProcessing(context, systemEventClass)) {
-            return;
-        }
-        // source is not compatible with the provided base type.
-        // Log a warning that the types are incompatible and return. 
-        if (getProjectStage() == ProjectStage.Development
-              && sourceBaseType != null
-              && !sourceBaseType.isInstance(source)) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                           "jsf.application.publish.event.base_type_mismatch",
-                           new Object[] { source.getClass().getName(),
-                                          sourceBaseType.getName() });                
-            }
-            return;
-        }
-
-        try {
-            // The side-effect of calling invokeListenersFor
-            // will create a SystemEvent object appropriate to event/source
-            // combination.  This event will be passed on subsequent invocations
-            // of invokeListenersFor
-            SystemEvent event;
-
-            // Look for and invoke any listeners stored on the source instance.
-            event = invokeComponentListenersFor(systemEventClass, source);
-
-            // Look for and invoke any 'view' listeners 
-            event = invokeViewListenersFor(context, systemEventClass, event, source);
-
-            // look for and invoke any listeners stored on the application
-            // using source type.
-            event = invokeListenersFor(systemEventClass,
-                                       event,
-                                       source,
-                                       sourceBaseType,
-                                       true);
-
-            // look for and invoke any listeners not specific to the source class
-            invokeListenersFor(systemEventClass, event, source, null, false);
-        } catch (AbortProcessingException ape) {
-            context.getApplication().publishEvent(context,
-                                                  ExceptionQueuedEvent.class,
-                                                  new ExceptionQueuedEventContext(context, ape));
-        }
-
-    }
-
-
-    /**
-     * @see Application#subscribeToEvent(Class, Class, javax.faces.event.SystemEventListener)
-     */
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 Class<?> sourceClass,
-                                 SystemEventListener listener) {
-
-        Util.notNull("systemEventClass", systemEventClass);
-        Util.notNull("listener", listener);
-
-        Set<SystemEventListener> listeners =
-              getListeners(systemEventClass, sourceClass);
-        listeners.add(listener);
-
-    }
-
-
-    /**
-     * @see Application#subscribeToEvent(Class, javax.faces.event.SystemEventListener)
-     */
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 SystemEventListener listener) {
-
-        subscribeToEvent(systemEventClass, null, listener);
-
-    }
-
-
-    /**
-     * @see Application#unsubscribeFromEvent(Class, Class, javax.faces.event.SystemEventListener)
-     */
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     Class<?> sourceClass,
-                                     SystemEventListener listener) {
-
-        Util.notNull("systemEventClass", systemEventClass);
-        Util.notNull("listener", listener);
-
-        Set<SystemEventListener> listeners =
-              getListeners(systemEventClass, sourceClass);
-        if (listeners != null) {
-            listeners.remove(listener);
-        }
-
-    }
-
-    /**
-     * @see Application#unsubscribeFromEvent(Class, javax.faces.event.SystemEventListener)
-     */
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     SystemEventListener listener) {
-
-        unsubscribeFromEvent(systemEventClass, null, listener);
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#addELContextListener(javax.el.ELContextListener)
-     */
-    @Override
-    public void addELContextListener(ELContextListener listener) {
-        if (listener != null) {
-            elContextListeners.add(listener);
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#removeELContextListener(javax.el.ELContextListener)
-     */
-    @Override
-    public void removeELContextListener(ELContextListener listener) {
-        if (listener != null) {
-            elContextListeners.remove(listener);
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getELContextListeners()
-     */
-    @Override
-    public ELContextListener [] getELContextListeners() {
-        if (!elContextListeners.isEmpty()) {
-            return (elContextListeners.toArray(
-                       new ELContextListener[elContextListeners.size()]));
-        } else {
-            return (EMPTY_EL_CTX_LIST_ARRAY);
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getExpressionFactory()
-     */
-    @Override
-    public ExpressionFactory getExpressionFactory() {
-        return associate.getExpressionFactory();
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#evaluateExpressionGet(javax.faces.context.FacesContext, String, Class)
-     */
-    @Override
-    public <T> T evaluateExpressionGet(FacesContext context,
-                                       String expression,
-                                       Class<? extends T> expectedType) throws ELException {
-        ValueExpression ve = 
-          getExpressionFactory().createValueExpression(context.getELContext(), 
-                                                       expression,
-                                                       expectedType);
-        //noinspection unchecked
-        return (T)(ve.getValue(context.getELContext()));
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String)
-     */
-    @Override
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext context,
-                                       String componentType)
-    throws FacesException {
-
-        Util.notNull("componentExpression", componentExpression);
-        Util.notNull("context", context);
-        Util.notNull("componentType", componentType);
-
-        return createComponentApplyAnnotations(context,
-                                               componentExpression,
-                                               componentType,
-                                               null,
-                                               true);
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getELResolver()
-     */
-    @Override
-    public ELResolver getELResolver() {
-
-        if (compositeELResolver == null) {
-            compositeELResolver =
-                 new FacesCompositeELResolver(
-                      FacesCompositeELResolver.ELResolverChainType.Faces);
-            ELUtils.buildFacesResolver(compositeELResolver, associate);
-        }
-
-        return compositeELResolver;
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#addELResolver(javax.el.ELResolver)
-     */
-    @Override
-    public void addELResolver(ELResolver resolver) {
-
-        if (associate.hasRequestBeenServiced()) {
-            throw new IllegalStateException(
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "ELResolver"));
-        }
-
-        if (resolver != null) {
-            if (elResolvers == null) {
-                //noinspection CollectionWithoutInitialCapacity
-                elResolvers = new ArrayList<ELResolver>();
-            }
-            elResolvers.add(resolver);
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getProjectStage() 
-     */
-    @Override
-    public ProjectStage getProjectStage() {
-        
-        if (projectStage == null) {
-            WebConfiguration webConfig =
-                  WebConfiguration.getInstance(
-                        FacesContext.getCurrentInstance().getExternalContext());
-            String value = webConfig.getEnvironmentEntry(WebConfiguration.WebEnvironmentEntry.ProjectStage);
-            if (value != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               "ProjectStage configured via JNDI: {0}",
-                               value);
-                }
-            } else {
-                value = webConfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage);
-                if (value != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                               "ProjectStage configured via servlet context init parameter: {0}", 
-                               value);
-                    }
-                }
-            }
-            if (value != null) {
-                try {
-                    projectStage = ProjectStage.valueOf(value);
-                } catch (IllegalArgumentException iae) {
-                    if (LOGGER.isLoggable(Level.INFO)) {
-                        LOGGER.log(Level.INFO,
-                                   "Unable to discern ProjectStage for value {0}.",
-                                   value);
-                    }
-                }
-            }
-            if (projectStage == null) {
-                projectStage = ProjectStage.Production;
-            }
-           
-        }
-        return projectStage;
-
-    }
-
-    public List<ELResolver> getApplicationELResolvers() {
-        return elResolvers;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getActionListener()
-     */
-    public ActionListener getActionListener() {
-        return actionListener;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getViewHandler()
-     */
-    public ViewHandler getViewHandler() {
-        return viewHandler;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setViewHandler(javax.faces.application.ViewHandler)
-     */
-    public synchronized void setViewHandler(ViewHandler viewHandler) {
-
-        Util.notNull("viewHandler", viewHandler);
-
-        if (associate.hasRequestBeenServiced()) {
-            throw new IllegalStateException(
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "ViewHandler"));
-        }
-
-        this.viewHandler = viewHandler;
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, MessageFormat.format("set ViewHandler Instance to ''{0}''", viewHandler.getClass().getName()));
-        }
-
-    }
-
-    /**
-     * @see javax.faces.application.Application#getResourceHandler()
-     */
-    @Override
-    public ResourceHandler getResourceHandler() {
-
-        return resourceHandler;
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setResourceHandler(javax.faces.application.ResourceHandler)
-     */
-    @Override
-    public synchronized void setResourceHandler(ResourceHandler resourceHandler) {
-
-        Util.notNull("resourceHandler", resourceHandler);
-
-        if (associate.hasRequestBeenServiced()) {
-            throw new IllegalStateException(
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "ResourceHandler"));
-        }
-
-        this.resourceHandler = resourceHandler;
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                       "set ResourceHandler Instance to ''{0}''",
-                       resourceHandler.getClass().getName());
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getStateManager()
-     */
-    public StateManager getStateManager() {
-        return stateManager;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setStateManager(javax.faces.application.StateManager)
-     */
-    public synchronized void setStateManager(StateManager stateManager) {
-
-        Util.notNull("stateManager", stateManager);
-
-        if (associate.hasRequestBeenServiced()) {
-            throw new IllegalStateException(
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "StateManager"));
-        }
-
-        this.stateManager = stateManager;
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, MessageFormat.format("set StateManager Instance to ''{0}''",
-                                                        stateManager.getClass().getName()));
-        }
-
-    }
-
-
-    /**
-     * @see Application#setActionListener(javax.faces.event.ActionListener)
-     */
-    public synchronized void setActionListener(ActionListener actionListener) {
-
-        Util.notNull("actionListener", actionListener);
-
-        this.actionListener = actionListener;
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("set ActionListener Instance to ''{0}''",
-                                             actionListener.getClass().getName()));
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getNavigationHandler()
-     */
-    public NavigationHandler getNavigationHandler() {
-        return navigationHandler;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setNavigationHandler(javax.faces.application.NavigationHandler)
-     */
-    public synchronized void setNavigationHandler(NavigationHandler navigationHandler) {
-
-        Util.notNull("navigationHandler", navigationHandler);
-
-        this.navigationHandler = navigationHandler;
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("set NavigationHandler Instance to ''{0}''",
-                                             navigationHandler.getClass().getName()));
-        }
-    }
-
-    /**
-     * @see javax.faces.application.Application#setPropertyResolver(javax.faces.el.PropertyResolver)
-     */
-    @SuppressWarnings("deprecation")
-    public PropertyResolver getPropertyResolver() {
-        return propertyResolver;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getResourceBundle(javax.faces.context.FacesContext, String)
-     */
-    @Override
-    public ResourceBundle getResourceBundle(FacesContext context, String var) {
-
-        Util.notNull("context", context);
-        Util.notNull("var", var);
-        return associate.getResourceBundle(context, var);
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setPropertyResolver(javax.faces.el.PropertyResolver)
-     */
-    @SuppressWarnings("deprecation")
-    public void setPropertyResolver(PropertyResolver propertyResolver) {
-
-        Util.notNull("propertyResolver", propertyResolver);
-
-        if (associate.hasRequestBeenServiced()) {
-            throw new IllegalStateException(
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "PropertyResolver"));
-        }
-
-        this.propertyResolver.setDelegate(ELUtils.getDelegatePR(associate, true));
-        associate.setLegacyPropertyResolver(propertyResolver);
-        propertyResolver = new PropertyResolverImpl();
-
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("set PropertyResolver Instance to ''{0}''", propertyResolver.getClass().getName()));
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createMethodBinding(String, Class[])
-     */
-    @SuppressWarnings("deprecation")
-    public MethodBinding createMethodBinding(String ref, Class<?> params[]) {
-
-        Util.notNull("ref", ref);
-
-        if (!(ref.startsWith("#{") && ref.endsWith("}"))) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.fine(MessageFormat.format("Expression ''{0}'' does not follow the syntax #{...}", ref));
-            }
-            throw new ReferenceSyntaxException(ref);
-        }
-        FacesContext context = FacesContext.getCurrentInstance();
-        MethodExpression result;
-        try {
-            // return a MethodBinding that wraps a MethodExpression.
-            if (null == params) {
-                params = RIConstants.EMPTY_CLASS_ARGS;
-            }
-            result =
-                  getExpressionFactory().
-                        createMethodExpression(context.getELContext(), ref, null,
-                                               params);
-        } catch (ELException elex) {
-            throw new ReferenceSyntaxException(elex);
-        }
-        return (new MethodBindingMethodExpressionAdapter(result));
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createValueBinding(String)
-     */
-    @SuppressWarnings("deprecation")
-    public ValueBinding createValueBinding(String ref)
-    throws ReferenceSyntaxException {
-
-        Util.notNull("ref", ref);
-        ValueExpression result;
-        FacesContext context = FacesContext.getCurrentInstance();
-         // return a ValueBinding that wraps a ValueExpression.
-         try {
-             result= getExpressionFactory().
-                     createValueExpression(context.getELContext(),ref,
-                     Object.class);     
-         } catch (ELException elex) {
-            throw new ReferenceSyntaxException(elex);
-         } 
-         return (new ValueBindingValueExpressionAdapter(result));
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getVariableResolver()
-     */
-    @SuppressWarnings("deprecation")
-    public VariableResolver getVariableResolver() {       
-        return variableResolver;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setVariableResolver(javax.faces.el.VariableResolver)
-     */
-    @SuppressWarnings("deprecation")
-    public void setVariableResolver(VariableResolver variableResolver) {
-
-        Util.notNull("variableResolver", variableResolver);
-
-        if (associate.hasRequestBeenServiced()) {
-            throw new IllegalStateException(
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "VariableResolver"));
-        }
-
-        this.variableResolver.setDelegate(ELUtils.getDelegateVR(associate, true));
-        associate.setLegacyVariableResolver(variableResolver);
-        variableResolver = new VariableResolverImpl();
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("set VariableResolver Instance to ''{0}''",
-                                             variableResolver.getClass().getName()));
-        }
-
-    }
-
-    /**
-     * @see javax.faces.application.Application#addBehavior(String, String)
-     */
-    public void addBehavior(String behaviorId, String behaviorClass) {
-
-        Util.notNull("behaviorId", behaviorId);
-        Util.notNull("behaviorClass", behaviorClass);
-
-        if (LOGGER.isLoggable(Level.FINE) && behaviorMap.containsKey(behaviorId)) {
-            LOGGER.log(Level.FINE,
-                       "behaviorId {0} has already been registered.  Replacing existing behavior class type {1} with {2}.",
-                       new Object[] { behaviorId, behaviorMap.get(behaviorId), behaviorClass });
-        }
-        behaviorMap.put(behaviorId, behaviorClass);
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("added behavior of type ''{0}'' class ''{1}''",
-                                             behaviorId,
-                                             behaviorClass));
-        }
-
-    }
-
-    /**
-     * @see javax.faces.application.Application#createBehavior(String)
-     */
-    public Behavior createBehavior(String behaviorId) throws FacesException {
-
-        Util.notNull("behaviorId", behaviorId);
-        Behavior returnVal = (Behavior) newThing(behaviorId, behaviorMap);
-        if (returnVal == null) {
-            Object[] params = {behaviorId};
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                        "jsf.cannot_instantiate_behavior_error", params);
-            }
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("created behavior of type ''{0}''",
-                                             behaviorId));
-        }
-        associate.getAnnotationManager().applyBehaviorAnnotations(FacesContext.getCurrentInstance(), returnVal);
-        return returnVal;
-    }
-
-    /**
-     * @see javax.faces.application.Application#getBehaviorIds()
-     */
-    public Iterator<String> getBehaviorIds() {
-
-        return behaviorMap.keySet().iterator();
-
-    }
-
-    /**
-     * @see javax.faces.application.Application#addComponent(String, String)
-     */
-    public void addComponent(String componentType, String componentClass) {
-
-        Util.notNull("componentType", componentType);
-        Util.notNull("componentType", componentClass);
-
-        if (LOGGER.isLoggable(Level.FINE) && componentMap.containsKey(componentType)) {
-            LOGGER.log(Level.FINE,
-                       "componentType {0} has already been registered.  Replacing existing component class type {1} with {2}.",
-                       new Object[] { componentType, componentMap.get(componentType), componentClass });
-        }
-        componentMap.put(componentType, componentClass);
-        
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("added component of type ''{0}'' and class ''{1}''",
-                                             componentType,
-                                             componentClass));
-        }
-        
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createComponent(String)
-     */
-    public UIComponent createComponent(String componentType) throws FacesException {
-
-        Util.notNull("componentType", componentType);
-
-        return createComponentApplyAnnotations(FacesContext.getCurrentInstance(),
-                                               componentType,
-                                               null,
-                                               true);
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createComponent(javax.faces.context.FacesContext, javax.faces.application.Resource)
-     */
-    @Override
-    public UIComponent createComponent(FacesContext context, Resource componentResource) throws FacesException {
-
-        // RELEASE_PENDING (rlubke,driscoll) this method needs review.
-
-        Util.notNull("context", context);
-        Util.notNull("componentResource", componentResource);
-
-        UIComponent result = null;
-
-        // use the application defined in the FacesContext as we may be calling
-        // overriden methods
-        Application app = context.getApplication();
-
-        ViewDeclarationLanguage pdl = app.getViewHandler().getViewDeclarationLanguage(context, context.getViewRoot().getViewId());
-        BeanInfo componentMetadata = pdl.getComponentMetadata(context,
-                                                              componentResource);
-        if (null != componentMetadata){
-            BeanDescriptor componentBeanDescriptor = componentMetadata.getBeanDescriptor();
-            
-            // Step 1.  See if the composite component author explicitly
-            // gave a componentType as part of the composite component metadata
-            ValueExpression ve = (ValueExpression)
-                  componentBeanDescriptor.getValue(UIComponent.COMPOSITE_COMPONENT_TYPE_KEY);
-            if (null != ve) {
-                String componentType = (String) ve.getValue(context.getELContext());
-                if (null != componentType && 0 < componentType.length()) {
-                    result = app.createComponent(componentType);
-                }
-            }
-        }
-
-
-        // Step 2. If that didn't work, if a script based resource can be 
-        // found for the scriptComponentResource,
-        // see if a component can be generated from it
-        if (null == result) {
-            Resource scriptComponentResource = pdl.getScriptComponentResource(context, componentResource);
-
-            if (null != scriptComponentResource) {
-                result = createComponentFromScriptResource(context,
-                        scriptComponentResource, componentResource);
-            }
-        }
-
-        // Step 3. Use the libraryName of the resource as the java package
-        // and use the resourceName as the class name.  See
-        // if a Java class can be loaded
-        if (null == result) {
-            String packageName = componentResource.getLibraryName();
-            String className = componentResource.getResourceName();
-            className = packageName + '.' + className.substring(0, className.lastIndexOf('.'));
-            try {
-                Class<?> clazz = (Class<?>) componentMap.get(className);
-                if (clazz == null) {
-                    clazz = Util.loadClass(className, this);
-                }
-                if (clazz != ComponentResourceClassNotFound.class) {
-                    if (!associate.isDevModeEnabled()) {
-                        componentMap.put(className, clazz);
-                    }
-                    result = (UIComponent) clazz.newInstance();
-                }
-            } catch (ClassNotFoundException ex) {
-                if (!associate.isDevModeEnabled()) {
-                    componentMap.put(className, ComponentResourceClassNotFound.class);
-                }
-            } catch (InstantiationException ie) {
-                throw new FacesException(ie);
-            } catch (IllegalAccessException iae) {
-                throw new FacesException(iae);
-            } catch (ClassCastException cce) {
-                throw new FacesException(cce);
-            } catch (Exception otherwise) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               otherwise.toString(),
-                               otherwise);
-                }
-            }
-        }
-
-        // Step 4. Use javax.faces.NamingContainer as the component type
-        if (null == result) {
-            result = app.createComponent("javax.faces.NamingContainer");
-        }
-
-        assert (null != result);
-
-        result.setRendererType("javax.faces.Composite");
-        Map<String, Object> attrs = result.getAttributes();
-        attrs.put(Resource.COMPONENT_RESOURCE_KEY,
-                componentResource);
-        attrs.put(UIComponent.BEANINFO_KEY,
-                componentMetadata);
-
-        associate.getAnnotationManager().applyComponentAnnotations(context, result);
-        pushDeclaredDefaultValuesToAttributesMap(context, componentMetadata, attrs);
-
-
-        return result;
-    }
-
-
-    /*
-     * This method makes it so that any cc:attribute elements that have
-     * a "default" attribute value have those values pushed into the
-     * composite component attribute map so that programmatic access 
-     * (as opposed to EL access) will find the attribute values.
-     *
-     */
-    private void pushDeclaredDefaultValuesToAttributesMap(FacesContext context,
-            BeanInfo componentMetadata, Map<String, Object> attrs) {
-        PropertyDescriptor[] declaredAttributes = componentMetadata.getPropertyDescriptors();
-        Object defaultValue;
-        String key;
-        for (PropertyDescriptor cur : declaredAttributes) {
-            defaultValue = cur.getValue("default");
-            if (null != defaultValue) {
-                key = cur.getName();
-                if (defaultValue instanceof ValueExpression) {
-                    if (((ValueExpression)defaultValue).isLiteralText()) {
-                        defaultValue = ((ValueExpression)defaultValue).getValue(context.getELContext());
-                    }
-                }
-                // ensure this attribute is not a method-signature.  method-signature
-                // declared default values are handled in retargetMethodExpressions.
-                if (null == cur.getValue("method-signature") || null != cur.getValue("type")) {
-                    attrs.put(key, defaultValue);
-                }
-            }
-        }
-    }
-    
-
-        
-
-    /**
-     * @see javax.faces.application.Application#createComponent(javax.faces.el.ValueBinding, javax.faces.context.FacesContext, String)
-     */
-    @SuppressWarnings("deprecation")
-    public UIComponent createComponent(ValueBinding componentBinding,
-                                       FacesContext context,
-                                       String componentType)
-    throws FacesException {
-
-        Util.notNull("componentBinding", componentBinding);
-        Util.notNull("context", context);
-        Util.notNull("componentType", componentType);
-
-        Object result;
-        boolean createOne = false;
-        try {
-            result = componentBinding.getValue(context);
-            if (result != null) {
-                createOne = (!(result instanceof UIComponent));
-            }
-
-            if (result == null || createOne) {
-                result = this.createComponentApplyAnnotations(context,
-                                                              componentType,
-                                                              null,
-                                                              false);
-                componentBinding.setValue(context, result);
-            }
-        } catch (Exception ex) {
-            throw new FacesException(ex);
-        }
-
-        return (UIComponent) result;
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String, String)
-     */
-    @Override
-    public UIComponent createComponent(ValueExpression componentExpression,
-                                       FacesContext context,
-                                       String componentType,
-                                       String rendererType) {
-
-        Util.notNull("componentExpression", componentExpression);
-        Util.notNull("context", context);
-        Util.notNull("componentType", componentType);
-
-        return createComponentApplyAnnotations(context,
-                                               componentExpression,
-                                               componentType,
-                                               rendererType,
-                                               true);
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createComponent(javax.faces.context.FacesContext, String, String)
-     */
-    @Override
-    public UIComponent createComponent(FacesContext context,
-                                       String componentType,
-                                       String rendererType) {
-
-        Util.notNull("context", context);
-        Util.notNull("componentType", componentType);
-
-        return createComponentApplyAnnotations(context,
-                                               componentType,
-                                               rendererType,
-                                               true);
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getComponentTypes()
-     */
-    public Iterator<String> getComponentTypes() {
-
-        return componentMap.keySet().iterator();
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#addConverter(String, String)
-     */
-    public void addConverter(String converterId, String converterClass) {
-
-        Util.notNull("converterId", converterId);
-        Util.notNull("converterClass", converterClass);
-
-        if (LOGGER.isLoggable(Level.FINE) && converterIdMap.containsKey(converterId)) {
-            LOGGER.log(Level.FINE,
-                       "converterId {0} has already been registered.  Replacing existing converter class type {1} with {2}.",
-                       new Object[] { converterId, converterIdMap.get(converterId), converterClass });
-        }
-
-        converterIdMap.put(converterId, converterClass);
-
-        Class<?>[] types = STANDARD_CONV_ID_TO_TYPE_MAP.get(converterId);
-        if (types != null) {
-            for (Class<?> clazz : types) {
-                // go directly against map to prevent cyclic method calls
-                converterTypeMap.put(clazz, converterClass);
-                addPropertyEditorIfNecessary(clazz);
-            }
-        }
-        
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("added converter of type ''{0}'' and class ''{1}''",
-                                             converterId,
-                                             converterClass));
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#addConverter(Class, String)
-     */
-    public void addConverter(Class<?> targetClass, String converterClass) {
-
-        Util.notNull("targetClass", targetClass);
-        Util.notNull("converterClass", converterClass);
-
-        String converterId = STANDARD_TYPE_TO_CONV_ID_MAP.get(targetClass);
-        if (converterId != null) {
-            addConverter(converterId, converterClass);
-        } else {
-            if (LOGGER.isLoggable(Level.FINE) && converterTypeMap
-                  .containsKey(targetClass)) {
-                LOGGER.log(Level.FINE,
-                           "converter target class {0} has already been registered.  Replacing existing converter class type {1} with {2}.",
-                           new Object[]{
-                                 targetClass.getName(),
-                                 converterTypeMap.get(targetClass),
-                                 converterClass});
-            }
-            converterTypeMap.put(targetClass, converterClass);
-            addPropertyEditorIfNecessary(targetClass);
-        }                
-        
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("added converter of class type ''{0}''", converterClass));
-        }
-    }
-    
-    private final String [] STANDARD_BY_TYPE_CONVERTER_CLASSES = {
-      "java.math.BigDecimal",
-      "java.lang.Boolean",
-      "java.lang.Byte",
-      "java.lang.Character",
-      "java.lang.Double",
-      "java.lang.Float",
-      "java.lang.Integer",
-      "java.lang.Long",
-      "java.lang.Short",
-      "java.lang.Enum"
-    };
-    
-    /**
-     * <p>To enable EL Coercion to use JSF Custom converters, this 
-     * method will call <code>PropertyEditorManager.registerEditor()</code>,
-     * passing the <code>ConverterPropertyEditor</code> class for the
-     * <code>targetClass</code> if the target class is not one of the standard
-     * by-type converter target classes.
-     * @param targetClass the target class for which a PropertyEditory may or
-     *  may not be created
-     */
-    
-    private void addPropertyEditorIfNecessary(Class<?> targetClass) {
-        
-        if (!registerPropertyEditors) {
-            return;
-        }
-
-        PropertyEditor editor = PropertyEditorManager.findEditor(targetClass);
-        if (null != editor) {
-            return;
-        }
-        String className = targetClass.getName();
-        // Don't add a PropertyEditor for the standard by-type converters.
-        if (targetClass.isPrimitive()) {
-            return;
-        }
-        for (String standardClass : STANDARD_BY_TYPE_CONVERTER_CLASSES) {
-            if (-1 != standardClass.indexOf(className)) {
-                return;
-            }
-        }
-        Class<?> editorClass = ConverterPropertyEditorFactory.getDefaultInstance().definePropertyEditorClassFor(targetClass);
-        if (editorClass != null) {
-            PropertyEditorManager.registerEditor(targetClass, editorClass);
-        } else {
-        	if (LOGGER.isLoggable(Level.WARNING)) {
-        		LOGGER.warning(MessageFormat.format("definePropertyEditorClassFor({0}) returned null.", targetClass.getName()));
-        	}
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createConverter(String)
-     */
-    public Converter createConverter(String converterId) {
-
-        Util.notNull("converterId", converterId);
-        Converter returnVal = (Converter) newThing(converterId, converterIdMap);
-        if (returnVal == null) {
-            Object[] params = {converterId};
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                        "jsf.cannot_instantiate_converter_error", converterId);
-            }
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("created converter of type ''{0}''", converterId));
-        }
-        if (passDefaultTimeZone && returnVal instanceof DateTimeConverter) {
-            ((DateTimeConverter) returnVal).setTimeZone(systemTimeZone);
-        }
-        associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
-        return returnVal;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createConverter(Class)
-     */
-    public Converter createConverter(Class<?> targetClass) {
-
-        Util.notNull("targetClass", targetClass);
-        Converter returnVal = (Converter) newConverter(targetClass,
-                                                   converterTypeMap,targetClass);
-        if (returnVal != null) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
-                                                 returnVal.getClass().getName()));
-            }
-            if (passDefaultTimeZone
-                && returnVal instanceof DateTimeConverter) {
-                ((DateTimeConverter) returnVal).setTimeZone(systemTimeZone);
-            }
-            associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
-            return returnVal;
-        } 
-
-        //Search for converters registered to interfaces implemented by
-        //targetClass
-        Class<?>[] interfaces = targetClass.getInterfaces();
-        if (interfaces != null) {
-            for (int i = 0; i < interfaces.length; i++) {
-                returnVal = createConverterBasedOnClass(interfaces[i], targetClass);
-                if (returnVal != null) {
-                   if (LOGGER.isLoggable(Level.FINE)) {
-                       LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
-                                                        returnVal.getClass().getName()));
-                    }
-                    if (passDefaultTimeZone
-                        && returnVal instanceof DateTimeConverter) {
-                        ((DateTimeConverter) returnVal)
-                              .setTimeZone(systemTimeZone);
-                    }
-                    associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
-                    return returnVal;
-                }
-            }
-        }
-
-        //Search for converters registered to superclasses of targetClass
-        Class<?> superclass = targetClass.getSuperclass();
-        if (superclass != null) {
-            returnVal = createConverterBasedOnClass(superclass, targetClass);
-            if (returnVal != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
-                                                     returnVal.getClass().getName()));
-                }
-                if (passDefaultTimeZone
-                    && returnVal instanceof DateTimeConverter) {
-                    ((DateTimeConverter) returnVal).setTimeZone(systemTimeZone);
-                }
-                associate.getAnnotationManager().applyConverterAnnotations(FacesContext.getCurrentInstance(), returnVal);
-                return returnVal;
-            }
-        }
-
-        return returnVal;
-    }
-
-    protected Converter createConverterBasedOnClass(Class<?> targetClass,
-            Class<?> baseClass) {
-        
-        Converter returnVal = (Converter) newConverter(targetClass,
-                converterTypeMap, baseClass);
-        if (returnVal != null) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
-                                                 returnVal.getClass().getName()));
-            }
-            return returnVal;
-        } 
-
-        //Search for converters registered to interfaces implemented by
-        //targetClass
-        Class<?>[] interfaces = targetClass.getInterfaces();
-        if (interfaces != null) {
-            for (int i = 0; i < interfaces.length; i++) {
-                returnVal = createConverterBasedOnClass(interfaces[i], null);
-                if (returnVal != null) {
-                   if (LOGGER.isLoggable(Level.FINE)) {
-                       LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
-                                                        returnVal.getClass().getName()));
-                    }
-                    return returnVal;
-                }
-            }
-        }
-
-        //Search for converters registered to superclasses of targetClass
-        Class<?> superclass = targetClass.getSuperclass();
-        if (superclass != null) {
-            returnVal = createConverterBasedOnClass(superclass, null);
-            if (returnVal != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine(MessageFormat.format("Created converter of type ''{0}''",
-                                                     returnVal.getClass().getName()));
-                }
-                return returnVal;
-            }
-        } 
-        return returnVal;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getConverterIds()
-     */
-    public Iterator<String> getConverterIds() {
-       
-        return converterIdMap.keySet().iterator();
-        
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getConverterTypes()
-     */
-    public Iterator<Class<?>> getConverterTypes() {
-                
-        return converterTypeMap.keySet().iterator();
-        
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getSupportedLocales()
-     */
-    public Iterator<Locale> getSupportedLocales() {
-
-            if (null != supportedLocales) {
-                return supportedLocales.iterator();
-            } else {
-                return Collections.<Locale>emptyList().iterator();
-            }
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setSupportedLocales(java.util.Collection)
-     */
-    public synchronized void setSupportedLocales(Collection<Locale> newLocales) {
-
-        Util.notNull("newLocales", newLocales);
-
-        supportedLocales = new ArrayList<Locale>(newLocales);
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, MessageFormat.format("set Supported Locales ''{0}''",
-                                                        supportedLocales.toString()));
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getDefaultLocale()
-     */
-    public Locale getDefaultLocale() {
-        return defaultLocale;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setDefaultLocale(java.util.Locale)
-     */
-    public synchronized void setDefaultLocale(Locale locale) {
-
-        Util.notNull("locale", locale);
-
-        defaultLocale = locale;
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, (MessageFormat.format("set defaultLocale ''{0}''",
-                                                         defaultLocale.getClass().getName())));
-        }
-    }
-
-
-    protected String defaultRenderKitId = null;
-
-
-    /**
-     * @see javax.faces.application.Application#getDefaultRenderKitId()
-     */
-    public String getDefaultRenderKitId() {
-        return defaultRenderKitId;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#setDefaultRenderKitId(String)
-     */
-    public void setDefaultRenderKitId(String renderKitId) {
-        defaultRenderKitId = renderKitId;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#addValidator(String, String)
-     */
-    public void addValidator(String validatorId, String validatorClass) {
-
-        Util.notNull("validatorId", validatorId);
-        Util.notNull("validatorClass", validatorClass);
-
-        if (LOGGER.isLoggable(Level.FINE) && validatorMap.containsKey(validatorId)) {
-            LOGGER.log(Level.FINE,
-                       "validatorId {0} has already been registered.  Replacing existing validator class type {1} with {2}.",
-                       new Object[] { validatorId, validatorMap.get(validatorId), validatorClass });    
-        }
-
-        validatorMap.put(validatorId, validatorClass);
-        
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("added validator of type ''{0}'' class ''{1}''",
-                                             validatorId,
-                                             validatorClass));
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#createValidator(String)
-     */
-    public Validator createValidator(String validatorId) throws FacesException {
-
-        Util.notNull("validatorId", validatorId);
-        Validator returnVal = (Validator) newThing(validatorId, validatorMap);
-        if (returnVal == null) {
-            Object[] params = {validatorId};
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                        "jsf.cannot_instantiate_validator_error", params);
-            }
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine(MessageFormat.format("created validator of type ''{0}''",
-                                             validatorId));
-        }
-        associate.getAnnotationManager().applyValidatorAnnotations(FacesContext.getCurrentInstance(), returnVal);
-        return returnVal;
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getValidatorIds()
-     */
-    public Iterator<String> getValidatorIds() {        
-        
-        return validatorMap.keySet().iterator();
-               
-    }
-
-    /**
-     * @see javax.faces.application.Application#addDefaultValidatorId(String)
-     */
-    public synchronized void addDefaultValidatorId(String validatorId) {
-
-        Util.notNull("validatorId", validatorId);
-        defaultValidatorInfo = null;
-        defaultValidatorIds.add(validatorId);
-
-    }
-
-    /**
-     * @see javax.faces.application.Application#getDefaultValidatorInfo() 
-     */
-    public Map<String,String> getDefaultValidatorInfo() {
-
-        if (defaultValidatorInfo == null) {
-            synchronized (this) {
-                if (defaultValidatorInfo == null) {
-                    defaultValidatorInfo = new LinkedHashMap<String, String>();
-                    if (!defaultValidatorIds.isEmpty()) {
-                        for (String id : defaultValidatorIds) {
-                            String validatorClass;
-                            Object result = validatorMap.get(id);
-                            if (null != result) {
-                                if (result instanceof Class) {
-                                    validatorClass = ((Class) result).getName();
-                                } else {
-                                    validatorClass = result.toString();
-                                }
-                                defaultValidatorInfo.put(id, validatorClass);
-                            }
-                        }
-
-                    }
-                }
-            }
-            defaultValidatorInfo =
-                  Collections.unmodifiableMap(defaultValidatorInfo);
-        }
-
-        return defaultValidatorInfo;
-
-    }
-
-    /**
-     * @see javax.faces.application.Application#setMessageBundle(String)
-     */
-    public synchronized void setMessageBundle(String messageBundle) {
-        Util.notNull("messageBundle", messageBundle);
-
-        this.messageBundle = messageBundle;
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, MessageFormat.format("set messageBundle ''{0}''",
-                                                        messageBundle));
-        }
-    }
-
-
-    /**
-     * @see javax.faces.application.Application#getMessageBundle()
-     */
-    public String getMessageBundle() {
-        return messageBundle;
-    }
-    
-    
-    /**
-     * <p>PRECONDITIONS: the values in the Map are either Strings
-     * representing fully qualified java class names, or java.lang.Class
-     * instances.</p>
-     * <p>ALGORITHM: Look in the argument map for a value for the argument
-     * key.  If found, if the value is instanceof String, assume the String
-     * specifies a fully qualified java class name and obtain the
-     * java.lang.Class instance for that String using Util.loadClass().
-     * Replace the String instance in the argument map with the Class
-     * instance.  If the value is instanceof Class, proceed.  Assert that the
-     * value is either instanceof java.lang.Class or java.lang.String.</p>
-     * <p>Now that you have a java.lang.class, call its newInstance and
-     * return it as the result of this method.</p>
-     *
-     * @param key Used to look up the value in the <code>Map</code>.
-     * @param map The <code>Map</code> that will be searched.
-     * @return The new object instance.
-     */
-    protected Object newThing(String key, Map<String, Object> map) {
-        assert (key != null && map != null);
-
-        Object result;
-        Class<?> clazz;
-        Object value;
-
-        value = map.get(key);
-        if (value == null) {
-            return null;
-        }
-        assert (value instanceof String || value instanceof Class);
-        if (value instanceof String) {
-             String cValue = (String) value;
-             try {
-               clazz = Util.loadClass(cValue, value);
-                if (!associate.isDevModeEnabled()) {
-                    map.put(key, clazz);
-                }
-                assert (clazz != null);
-             } catch (Exception e) {
-                 throw new FacesException(e.getMessage(), e);
-             }
-        } else {
-            clazz = (Class) value;
-        }
-        
-        try {
-            result = clazz.newInstance();
-        } catch (Throwable t) {
-            Throwable previousT;
-            do {
-                previousT = t;
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                	LOGGER.log(Level.SEVERE, "Unable to load class: ", t);
-                }
-            } while (null != (t = t.getCause()));
-            t = previousT;
-            
-            throw new FacesException((MessageUtils.getExceptionMessageString(
-                  MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID,
-                  clazz.getName())), t);
-        }
-        return result;
-    }
-    
-    /**
-     * <p>The same as newThing except that a single argument constructor
-     * that accepts a Class is looked for before calling the no-arg version.</p>
-     *
-     * <p>PRECONDITIONS: the values in the Map are either Strings
-     * representing fully qualified java class names, or java.lang.Class
-     * instances.</p>
-     * <p>ALGORITHM: Look in the argument map for a value for the argument
-     * key.  If found, if the value is instanceof String, assume the String
-     * specifies a fully qualified java class name and obtain the
-     * java.lang.Class instance for that String using Util.loadClass().
-     * Replace the String instance in the argument map with the Class
-     * instance.  If the value is instanceof Class, proceed.  Assert that the
-     * value is either instanceof java.lang.Class or java.lang.String.</p>
-     * <p>Now that you have a java.lang.class, call its newInstance and
-     * return it as the result of this method.</p>
-     *
-     * @param key Used to look up the value in the <code>Map</code>.
-     * @param map The <code>Map</code> that will be searched.
-     * @param targetClass the target class for the single argument ctor
-     * @return The new object instance.
-     */
-    protected Object newConverter(Class<?> key, Map<Class<?>,Object> map, Class<?> targetClass) {
-        assert (key != null && map != null);
-
-        Object result = null;
-        Class<?> clazz;
-        Object value;
-
-        value = map.get(key);
-        if (value == null) {
-            return null;
-        }
-        assert (value instanceof String || value instanceof Class);
-        if (value instanceof String) {
-            String cValue = (String) value;
-             try {
-                clazz = Util.loadClass(cValue, value);
-                if (!associate.isDevModeEnabled()) {
-                    map.put(key, clazz);
-                }
-                assert (clazz != null);
-             } catch (Exception e) {
-                 throw new FacesException(e.getMessage(), e);
-             }
-        } else {
-            clazz = (Class) value;
-        }
-        
-        Constructor ctor = 
-              ReflectionUtils.lookupConstructor(clazz, Class.class);
-        Throwable cause = null;
-        if (ctor != null) {
-            try {
-                result = ctor.newInstance(targetClass);
-            } catch (Exception e) {
-                cause = e;
-            }
-        } else {
-            try {
-                result = clazz.newInstance();
-            } catch (Exception e) {
-                cause = e;
-            }
-        }       
-        
-        if (null != cause) {           
-            throw new FacesException((MessageUtils.getExceptionMessageString(
-                    MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID, 
-                    clazz.getName())), cause);
-            
-        }
-        return result;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    public static final String THIS_LIBRARY = 
-            "com.sun.faces.composite.this.library";
-
-    private UIComponent createComponentFromScriptResource(FacesContext context,
-                                                          Resource scriptComponentResource,
-                                                          Resource componentResource) {
-
-        UIComponent result = null;
-
-        String className = scriptComponentResource.getResourceName();
-        int lastDot = className.lastIndexOf('.');
-        className = className.substring(0, lastDot);
-
-        try {
-
-            Class<?> componentClass = (Class<?>) componentMap.get(className);
-            if (componentClass == null) {
-                componentClass = Util.loadClass(className, this);
-            }
-            if (!associate.isDevModeEnabled()) {
-                componentMap.put(className, componentClass);
-            }
-            result = (UIComponent) componentClass.newInstance();
-        } catch (IllegalAccessException ex) {
-        	if (LOGGER.isLoggable(Level.SEVERE)) {
-        		LOGGER.log(Level.SEVERE, null, ex);
-        	}
-        } catch (InstantiationException ex) {
-        	if (LOGGER.isLoggable(Level.SEVERE)) {
-        		LOGGER.log(Level.SEVERE, null, ex);
-        	}
-        } catch (ClassNotFoundException ex) {
-        	if (LOGGER.isLoggable(Level.SEVERE)) {
-        		LOGGER.log(Level.SEVERE, null, ex);
-        	}
-        }
-
-        if (result != null) {
-            // Make sure the resource is there for the annotation processor.
-            result.getAttributes().put(Resource.COMPONENT_RESOURCE_KEY, 
-                componentResource);
-            // In case there are any "this" references, 
-            // make sure they can be resolved.
-            context.getAttributes().put(THIS_LIBRARY,
-                    componentResource.getLibraryName());
-            try {
-                associate.getAnnotationManager()
-                        .applyComponentAnnotations(context, result);
-            }
-            finally {
-                context.getAttributes().remove(THIS_LIBRARY);
-            }
-        }
-
-        return result;
-        
-    }
-
-
-    /**
-     * Leveraged by {@link Application#createComponent(String)} and {@link Application#createComponent(javax.faces.context.FacesContext, String, String)}
-     * This method will apply any component and render annotations that may be present.
-     */
-    private UIComponent createComponentApplyAnnotations(FacesContext ctx,
-                                                        String componentType,
-                                                        String rendererType,
-                                                        boolean applyAnnotations) {
-
-        UIComponent c;
-        try {
-            c = (UIComponent) newThing(componentType, componentMap);
-        } catch (Exception ex) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           "jsf.cannot_instantiate_component_error",
-                           componentType);
-            }
-            throw new FacesException(ex);
-        }
-        if (c == null) {
-            Object[] params = {componentType};
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.cannot_instantiate_component_error",
-                               params);
-            }
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                    MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, params));
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, MessageFormat.format("Created component with component type of ''{0}''",
-                                                        componentType));
-        }
-
-        if (applyAnnotations) {
-            applyAnnotations(ctx, rendererType, c);
-        }
-        return c;
-
-    }
-
-
-    /**
-     * Leveraged by {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String)} and
-     * {@link Application#createComponent(javax.el.ValueExpression, javax.faces.context.FacesContext, String, String)}.
-     * This method will apply any component and render annotations that may be present.
-     */
-    private UIComponent createComponentApplyAnnotations(FacesContext ctx,
-                                                        ValueExpression componentExpression,
-                                                        String componentType,
-                                                        String rendererType,
-                                                        boolean applyAnnotations) {
-
-        UIComponent c;
-
-        try {
-            c = (UIComponent) componentExpression
-                  .getValue(ctx.getELContext());
-
-            if (c == null) {
-                c = this.createComponentApplyAnnotations(ctx,
-                                                         componentType,
-                                                         rendererType,
-                                                         applyAnnotations);
-                componentExpression.setValue((ctx.getELContext()), c);
-            }
-        } catch (Exception ex) {
-            throw new FacesException(ex);
-        }
-
-        return c;
-
-    }
-
-
-    /**
-     * Process any annotations associated with this component/renderer.
-     */
-    private void applyAnnotations(FacesContext ctx,
-                                  String rendererType,
-                                  UIComponent c) {
-
-        if (c != null && ctx != null) {
-            associate.getAnnotationManager()
-                  .applyComponentAnnotations(ctx, c);
-            if (rendererType != null) {
-                Renderer r =
-                      ctx.getRenderKit()
-                            .getRenderer(c.getFamily(), rendererType);
-                if (r != null) {
-                    c.setRendererType(rendererType);
-                    associate.getAnnotationManager()
-                          .applyRendererAnnotations(ctx, r, c);
-                } else {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   "Unable to create Renderer with rendererType {0} for component with component type of {1}",
-                                   new Object[] { rendererType, c.getFamily() });
-                    }
-                }
-            }
-
-        }
-
-    }
-
-
-    /**
-     * @return the SystemEventListeners that should be used for the
-     * provided combination of SystemEvent and source.
-     */
-    private Set<SystemEventListener> getListeners(Class<? extends SystemEvent> systemEvent,
-                                                  Class<?> sourceClass) {
-
-        Set<SystemEventListener> listeners = null;
-        EventInfo sourceInfo =
-              systemEventHelper.getEventInfo(systemEvent, sourceClass);
-        if (sourceInfo != null) {
-            listeners = sourceInfo.getListeners();
-        }
-
-        return listeners;
-
-    }
-
-    private SystemEvent invokeViewListenersFor(FacesContext ctx,
-                                               Class<? extends SystemEvent> systemEventClass,
-                                               SystemEvent event,
-                                               Object source) {
-        SystemEvent result = event;
-
-        Map<Object, Object> ctxMap = ctx.getAttributes();
-        if (ctxMap.containsKey(IS_PROCESSING_LISTENERS_KEY)) {
-            return result;
-        }
-        ctxMap.put(IS_PROCESSING_LISTENERS_KEY, Boolean.TRUE);
-
-
-        UIViewRoot root = ctx.getViewRoot();
-        if (root != null) {
-            EventInfo rootEventInfo =
-                  systemEventHelper.getEventInfo(systemEventClass,
-                                                 UIViewRoot.class);
-            // process view listeners
-            result = processListenersAccountingForAdds(root.getViewListenersForEventClass(systemEventClass),
-                                                       event,
-                                                       source,
-                                                       rootEventInfo);
-        }
-        ctxMap.remove(IS_PROCESSING_LISTENERS_KEY);
-        return result;
-
-    }
-
-    /**
-     * @return process any listeners for the specified SystemEventListenerHolder
-     *  and return any SystemEvent that may have been created as a side-effect
-     *  of processing the listeners.
-     */
-    private SystemEvent invokeComponentListenersFor(Class<? extends SystemEvent> systemEventClass,
-                                                    Object source) {
-
-        if (source instanceof SystemEventListenerHolder) {
-            EventInfo eventInfo =
-                  compSysEventHelper.getEventInfo(systemEventClass,
-                                                  source.getClass());
-            return processListeners(((SystemEventListenerHolder) source).getListenersForEventClass(systemEventClass),
-                                    null,
-                                    source,
-                                    eventInfo);
-        }
-        return null;
-
-    }
-
-    /**
-     * Traverse the <code>List</code> of listeners and invoke any that are relevent
-     * for the specified source.
-     *
-     * @throws javax.faces.event.AbortProcessingException propagated from the listener invocation
-     */
-    private SystemEvent invokeListenersFor(Class<? extends SystemEvent> systemEventClass,
-                                           SystemEvent event,
-                                           Object source,
-                                           Class<?> sourceBaseType,
-                                           boolean useSourceLookup)
-    throws AbortProcessingException {
-
-        EventInfo eventInfo = systemEventHelper.getEventInfo(systemEventClass,
-                                                             source,
-                                                             sourceBaseType,
-                                                             useSourceLookup);
-        if (eventInfo != null) {
-            Set<SystemEventListener> listeners = eventInfo.getListeners();
-            event = processListeners(listeners, event, source, eventInfo);
-        }
-
-        return event;
-
-    }
-
-    /**
-     * Iterate through and invoke the listeners.  If the passed event was
-     * <code>null</code>, create the event, and return it.
-     */
-    private SystemEvent processListeners(Collection<SystemEventListener> listeners,
-                                         SystemEvent event,
-                                         Object source,
-                                         EventInfo eventInfo) {
-
-          if (listeners != null && !listeners.isEmpty()) {
-            for (SystemEventListener curListener : listeners) {
-                if (curListener != null && curListener.isListenerForSource(source)) {
-                    if (event == null) {
-                        event = eventInfo.createSystemEvent(source);
-                    }
-                    assert (event != null);
-                    if (event.isAppropriateListener(curListener)) {
-                        event.processListener(curListener);
-                    }
-                }
-            }
-        }
-
-        return event;
-
-    }
-
-    private SystemEvent processListenersAccountingForAdds(List<SystemEventListener> listeners,
-                                         SystemEvent event,
-                                         Object source,
-                                         EventInfo eventInfo) {
-
-          if (listeners != null && !listeners.isEmpty()) {
-
-              // copy listeners
-              // go thru copy completely
-              // compare copy to original
-              // if original differs from copy, make a new copy.
-              // The new copy consists of the original list - processed
-
-              SystemEventListener listenersCopy[] =
-                      new SystemEventListener[listeners.size()];
-              int i = 0;
-              for (i = 0; i < listenersCopy.length; i++) {
-                  listenersCopy[i] = listeners.get(i);
-              }
-
-              Map<SystemEventListener, Boolean> processedListeners =
-                      new HashMap<SystemEventListener, Boolean>(listeners.size());
-              boolean processedSomeEvents = false,
-                      originalDiffersFromCopy = false;
-
-              do {
-                  i = 0;
-                  originalDiffersFromCopy = false;
-                  if (0 < listenersCopy.length) {
-                      for (i = 0; i < listenersCopy.length; i++) {
-                          SystemEventListener curListener = listenersCopy[i];
-                          if (curListener != null && curListener.isListenerForSource(source)) {
-                              if (event == null) {
-                                  event = eventInfo.createSystemEvent(source);
-                              }
-                              assert (event != null);
-                              if (!processedListeners.containsKey(curListener)
-                                       && event.isAppropriateListener(curListener)) {
-                                  processedSomeEvents = true;
-                                  event.processListener(curListener);
-                                  processedListeners.put(curListener, Boolean.TRUE);
-                              }
-                          }
-                      }
-                      if (originalDiffersFromCopy(listeners, listenersCopy)) {
-                          originalDiffersFromCopy = true;
-                          listenersCopy = copyListWithExclusions(listeners, processedListeners);
-                      }
-                  }
-              } while (originalDiffersFromCopy && processedSomeEvents);
-        }
-
-        return event;
-
-    }
-
-    private boolean originalDiffersFromCopy(Collection<SystemEventListener> original,
-            SystemEventListener copy[]) {
-        boolean foundDifference = false;
-        int i = 0, originalLen = original.size(), copyLen = copy.length;
-
-        if (originalLen == copyLen) {
-            SystemEventListener originalItem, copyItem;
-            Iterator<SystemEventListener> iter = original.iterator();
-            while (iter.hasNext() && !foundDifference) {
-                originalItem = iter.next();
-                copyItem = copy[i++];
-                foundDifference = originalItem != copyItem;
-            }
-        } else {
-            foundDifference = true;
-        }
-
-        return foundDifference;
-    }
-
-    private SystemEventListener [] copyListWithExclusions(Collection<SystemEventListener> original,
-            Map<SystemEventListener, Boolean> excludes) {
-        SystemEventListener [] result = null,
-                temp = new SystemEventListener[original.size()];
-        int i = 0;
-        for (SystemEventListener cur : original) {
-            if (!excludes.containsKey(cur)) {
-                temp[i++] = cur;
-            }
-        }
-        result = new SystemEventListener[i];
-        System.arraycopy(temp, 0, result, 0, i);
-        temp = null;
-
-        return result;
-    }
-    
-	private boolean needsProcessing(FacesContext context, Class<? extends SystemEvent> systemEventClass) {
-		return context.isProcessingEvents() || ExceptionQueuedEvent.class.isAssignableFrom(systemEventClass);
-	}
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * Utility class for dealing with application events.
-     */
-    private static class SystemEventHelper {
-
-        private final Cache<Class<? extends SystemEvent>, SystemEventInfo> systemEventInfoCache;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public SystemEventHelper() {
-
-            systemEventInfoCache =
-                  new Cache<Class<? extends SystemEvent>, SystemEventInfo>(
-                        new Factory<Class<? extends SystemEvent>, SystemEventInfo>() {
-                            public SystemEventInfo newInstance(final Class<? extends SystemEvent> arg)
-                                  throws InterruptedException {
-                                return new SystemEventInfo(arg);
-                            }
-                        }
-                  );
-
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public EventInfo getEventInfo(Class<? extends SystemEvent> systemEventClass,
-                                      Class<?> sourceClass) {
-
-            EventInfo info = null;
-            SystemEventInfo systemEventInfo = systemEventInfoCache.get(systemEventClass);
-            if (systemEventInfo != null) {
-                info = systemEventInfo.getEventInfo(sourceClass);
-            }
-
-            return info;
-
-        }
-
-
-        public EventInfo getEventInfo(Class<? extends SystemEvent> systemEventClass,
-                                      Object source,
-                                      Class<?> sourceBaseType,
-                                      boolean useSourceForLookup) {
-
-            Class<?> sourceClass =
-                  ((useSourceForLookup) ?
-                       ((sourceBaseType != null)
-                                          ? sourceBaseType
-                                          : source.getClass())
-                                        : Void.class);
-            return getEventInfo(systemEventClass, sourceClass);
-
-        }
-
-
-    } // END SystemEventHelper
-
-
-    /**
-     * Utility class for dealing with {@link javax.faces.component.UIComponent} events.
-     */
-    private static class ComponentSystemEventHelper {
-
-        private Cache<Class<?>,Cache<Class<? extends SystemEvent>,EventInfo>> sourceCache;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public ComponentSystemEventHelper() {
-
-            // Initialize the 'sources' cache for, ahem, readability...
-            // ~generics++
-            Factory<Class<?>, Cache<Class<? extends SystemEvent>, EventInfo>> eventCacheFactory =
-                  new Factory<Class<?>, Cache<Class<? extends SystemEvent>, EventInfo>>() {
-                      public Cache<Class<? extends SystemEvent>, EventInfo> newInstance(
-                            final Class<?> sourceClass)
-                            throws InterruptedException {
-                          Factory<Class<? extends SystemEvent>, EventInfo> eventInfoFactory =
-                                new Factory<Class<? extends SystemEvent>, EventInfo>() {
-                                    public EventInfo newInstance(final Class<? extends SystemEvent> systemEventClass)
-                                          throws InterruptedException {
-                                        return new EventInfo(systemEventClass, sourceClass);
-                                    }
-                                };
-                          return new Cache<Class<? extends SystemEvent>, EventInfo>(eventInfoFactory);
-                      }
-                  };
-            sourceCache = new Cache<Class<?>,Cache<Class<? extends SystemEvent>,EventInfo>>(eventCacheFactory);
-
-        }
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public EventInfo getEventInfo(Class<? extends SystemEvent> systemEvent,
-                                      Class<?> sourceClass) {
-
-            Cache<Class<? extends SystemEvent>, EventInfo> eventsCache =
-                  sourceCache.get(sourceClass);
-            return eventsCache.get(systemEvent);
-
-        }
-
-    } // END ComponentSystemEventHelper
-
-
-    /**
-     * Simple wrapper class for application level SystemEvents.  It provides the
-     * structure to map a single SystemEvent to multiple sources which are
-     * represented by <code>SourceInfo</code> instances.
-     */
-    private static class SystemEventInfo {
-
-        private Cache<Class<?>,EventInfo> cache = new Cache<Class<?>,EventInfo>(
-              new Factory<Class<?>, EventInfo>() {
-                  public EventInfo newInstance(Class<?> arg)
-                        throws InterruptedException {
-                      return new EventInfo(systemEvent, arg);
-                  }
-              }
-        );
-        private Class<? extends SystemEvent> systemEvent;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        private SystemEventInfo(Class<? extends SystemEvent> systemEvent) {
-
-            this.systemEvent = systemEvent;
-
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public EventInfo getEventInfo(Class<?> source) {
-
-            Class<?> sourceClass = ((source == null) ? Void.class : source);
-            return cache.get(sourceClass);
-
-        }
-
-    } // END SystemEventInfo
-
-
-    /**
-     * Represent a logical association between a SystemEvent and a Source.
-     * This call will contain the Listeners specific to this association
-     * as well as provide a method to construct new SystemEvents as required.
-     */
-    private static class EventInfo {
-        private Class<? extends SystemEvent> systemEvent;
-        private Class<?> sourceClass;
-        private Set<SystemEventListener> listeners;
-        private Constructor eventConstructor;
-        private Map<Class<?>,Constructor> constructorMap;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public EventInfo(Class<? extends SystemEvent> systemEvent,
-                         Class<?> sourceClass) {
-
-            this.systemEvent = systemEvent;
-            this.sourceClass = sourceClass;
-            this.listeners = new CopyOnWriteArraySet<SystemEventListener>();
-            this.constructorMap = new HashMap<Class<?>,Constructor>();
-            if (!sourceClass.equals(Void.class)) {
-                eventConstructor = getEventConstructor(sourceClass);
-            }
-
-        }
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public Set<SystemEventListener> getListeners() {
-
-            return listeners;
-
-        }
-
-
-        public SystemEvent createSystemEvent(Object source) {
-
-            Constructor toInvoke = getCachedConstructor(source.getClass());
-            if (toInvoke != null) {
-                try {
-                    return (SystemEvent) toInvoke.newInstance(source);
-                } catch (Exception e) {
-                    throw new FacesException(e);
-                }
-            }
-            return null;
-
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private Constructor getCachedConstructor(Class<?> source) {
-
-            if (eventConstructor != null) {
-                return eventConstructor;
-            } else {
-                Constructor c = constructorMap.get(source);
-                if (c == null) {
-                    c = getEventConstructor(source);
-                    if (c != null) {
-                        constructorMap.put(source, c);
-                    }
-                }
-                return c;
-            }
-
-        }
-
-
-        private Constructor getEventConstructor(Class<?> source) {
-
-            Constructor ctor = null;
-            try {
-                return systemEvent.getDeclaredConstructor(source);
-            } catch (NoSuchMethodException ignored) {
-                Constructor[] ctors = systemEvent.getConstructors();
-                if (ctors != null) {
-                    for (Constructor c : ctors) {
-                        Class<?>[] params = c.getParameterTypes();
-                        if (params.length != 1) {
-                            continue;
-                        }
-                        if (params[0].isAssignableFrom(source)) {
-                            return c;
-                        }
-                    }
-                }
-                if (eventConstructor == null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   "Unable to find Constructor within {0} that accepts {1} instances.",
-                                   new Object[] { systemEvent.getName(), sourceClass.getName() });
-                    }
-                }
-            }
-            return ctor;
-
-        }
-
-    } // END SourceInfo
-
-
-    private static final class ComponentResourceClassNotFound { }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationResourceBundle.java b/jsf-ri/src/main/java/com/sun/faces/application/ApplicationResourceBundle.java
deleted file mode 100644
index a5ac766..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationResourceBundle.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.util.Util;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-/**
- * <p>Contains an application level resource bundle
- * name and its associated descriptions, if any.</p>
- */
-public class ApplicationResourceBundle {
-
-    public static final String DEFAULT_KEY = "DEFAULT";
-
-    private final String baseName;
-    private final Map<String, String> displayNames;
-    private final Map<String, String> descriptions;
-    private volatile Map<Locale, ResourceBundle> resources;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>
-     *   Constructs a new ApplicationResourceBundle
-     * </p>
-     * @param baseName the base name of the <code>ResourceBundle</code>
-     * @param displayNames any display names that were associated
-     *  with the resource bundle definition in the configuration resource
-     * @param descriptions any descriptions that were associated
-     *  with the resource bundle definition in the configuration resource
-     */
-    public ApplicationResourceBundle(String baseName,
-                                     Map<String, String> displayNames,
-                                     Map<String, String> descriptions) {
-
-        if (baseName == null) {
-            // PENDING i18n
-            throw new IllegalArgumentException();
-        }
-        this.baseName = baseName;
-        this.displayNames = displayNames;
-        this.descriptions = descriptions;
-        this.resources = new HashMap<Locale, ResourceBundle>(4, 1.0f);
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @return the base name of the <code>ResourceBundle</code> associated with
-     *  this <code>ApplicationResourceBundle</code> instance
-     */
-    public String getBaseName() {
-
-        return baseName;
-
-    }
-
-
-    /**
-     * @param locale a <code>Locale</code>
-     * @return return the <code>ResourceBundle</code> associated with the
-     *  specified </code>locale</code>
-     */
-    public ResourceBundle getResourceBundle(Locale locale) {
-
-        if (locale == null) {
-            locale = Locale.getDefault();
-        }
-
-        ResourceBundle bundle = resources.get(locale);
-        if (bundle == null) {
-            ClassLoader loader = Util.getCurrentLoader(this);
-            synchronized(this) {
-                bundle = resources.get(locale);
-                if (bundle == null) {
-                    bundle = ResourceBundle.getBundle(baseName, locale, loader);
-                    resources.put(locale, bundle);
-                }
-            }
-        }
-
-        return bundle;
-
-    }
-
-
-    /**
-     * @param locale a <code>Locale</code>
-     * @return a text of a <code>display-name</code> element associated with the
-     *  specified </code>locale</code>
-     */
-    public String getDisplayName(Locale locale) {
-
-        String displayName = null;
-        if (displayNames != null) {
-            displayName = queryMap(locale, displayNames);            
-        }
-
-        return ((displayName != null) ? displayName : "");
-
-    }
-
-
-    /**
-     * @param locale a <code>Locale</code>
-     * @return a text of a <code>description</code> element associated with the
-     *  specified </code>locale</code>
-     */
-    public String getDescription(Locale locale) {
-
-        String description = null;
-        if (descriptions != null) {
-           description = queryMap(locale, descriptions);
-        }
-
-        return ((description != null) ? description : "");
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>
-     *  Lookup and return the text for the specified <code>Locale</code>
-     *   from within the specified <code>Map</code>.
-     * </p>
-     * @param locale <code>Locale</code> if interest
-     * @param map a map containing localized text keyed by <code>Locale</code>
-     * @return localized text, if any
-     */
-    private String queryMap(Locale locale, Map<String, String> map) {
-
-        if (locale == null) {
-            return map.get(DEFAULT_KEY);
-        } else {
-            String key = locale.toString();
-            String description = map.get(key);
-            if (description == null) {
-                return map.get(DEFAULT_KEY);
-            }
-        }
-
-        return null;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationStateInfo.java b/jsf-ri/src/main/java/com/sun/faces/application/ApplicationStateInfo.java
deleted file mode 100644
index 88d5a1f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ApplicationStateInfo.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.config.WebConfiguration;
-
-import javax.faces.context.FacesContext;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FullStateSavingViewIds;
-
-/**
- * This class maintains per-application information pertaining
- * to partail or full state saving as a whole or partial state saving
- * with some views using full state saving.
- */
-public class ApplicationStateInfo {
-
-    private boolean partialStateSaving;
-    private Set<String> fullStateViewIds;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ApplicationStateInfo() {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        partialStateSaving = config.isOptionEnabled(PartialStateSaving);
-
-        if (partialStateSaving) {
-            String[] viewIds = config.getOptionValue(FullStateSavingViewIds, ",");
-            fullStateViewIds = new HashSet<String>(viewIds.length, 1.0f);
-            fullStateViewIds.addAll(Arrays.asList(viewIds));
-        }
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * @param viewId the view ID to check
-     * @return <code>true</code> if partial state saving should be used for the
-     *  specified view ID, otherwise <code>false</code>
-     */
-    public boolean usePartialStateSaving(String viewId) {
-
-        return (partialStateSaving && !fullStateViewIds.contains(viewId));
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ByteArrayWebOutputStream.java b/jsf-ri/src/main/java/com/sun/faces/application/ByteArrayWebOutputStream.java
deleted file mode 100644
index 7fc7563..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ByteArrayWebOutputStream.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.util.FacesLogger;
-
-import javax.servlet.ServletOutputStream;
-import javax.faces.FacesException;
-import java.io.Writer;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.Charset;
-import java.nio.charset.CharacterCodingException;
-
-/**
- * This steam converts byte content to character.  This implementation allows us
- * to query whether or not the writer has been flushed or closed.  This is
- * necessary to better mimic the actual Servlet response.
- */
-class ByteArrayWebOutputStream extends ServletOutputStream {
-
-    public static final ServletOutputStream NOOP_STREAM = new NoOpOutputStream();
-
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    private DirectByteArrayOutputStream baos;
-    private boolean committed;
-
-    public ByteArrayWebOutputStream() {
-        baos = new DirectByteArrayOutputStream(1024);
-    }
-
-    public void write(int n) {
-        baos.write(n);
-    }
-
-    /**
-     * <p>It's important to not expose this as reset.</p>
-     */
-
-    public void resetByteArray() {
-        baos.reset();
-    }
-
-    public byte[] toByteArray() {
-        return baos.toByteArray();
-    }
-
-
-    /**
-     * Converts the buffered bytes into chars based on the
-     * specified encoding and writes them to the provided Writer.
-     *
-     * @param writer   target Writer
-     * @param encoding character encoding
-     */
-    public void writeTo(Writer writer, String encoding) {
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Converting buffered ServletOutputStream bytes"
-                    + " to chars using " + encoding);
-        }
-
-        ByteBuffer bBuff = baos.getByteBuffer();
-        CharsetDecoder decoder = Charset.forName(encoding).newDecoder();
-
-        try {
-            CharBuffer cBuff = decoder.decode(bBuff);
-            writer.write(cBuff.array());
-        } catch (CharacterCodingException cce) {
-            throw new FacesException(cce);
-        } catch (IOException ioe) {
-            throw new FacesException(ioe);
-        }
-    }
-
-
-    public boolean isCommitted() {
-        return committed;
-    }
-
-    @Override
-    public void close() throws IOException {
-        committed = true;
-    }
-
-    @Override
-    public void flush() throws IOException {
-        committed = true;
-    }
-
-    /**
-     * <p>Write the buffered bytes to the provided OutputStream.</p>
-     *
-     * @param stream the stream to write to
-     */
-    public void writeTo(OutputStream stream) {
-        try {
-            stream.write(baos.getByteBuffer().array());
-        } catch (IOException ioe) {
-            throw new FacesException(ioe);
-        }
-    }
-
-    private static class DirectByteArrayOutputStream extends ByteArrayOutputStream {
-
-        // -------------------------------------------------------- Constructors
-
-
-        public DirectByteArrayOutputStream(int initialCapacity) {
-            super(initialCapacity);
-        }
-
-        // ------------------------------------------------------- PublicMethods
-
-
-        /**
-         * Return the buffer backing this ByteArrayOutputStream as a
-         * ByteBuffer.
-         *
-         * @return buf wrapped in a ByteBuffer
-         */
-        public ByteBuffer getByteBuffer() {
-            return (ByteBuffer.wrap(buf, 0, count));
-        }
-
-    }
-
-
-    private static class NoOpOutputStream extends ServletOutputStream {
-
-        public void write(int b) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void write(byte b[]) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void write(byte b[], int off, int len) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void flush() throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void close() throws IOException {
-            // no-op
-        }
-
-        protected NoOpOutputStream() {
-            // no-op
-        }
-
-        @Override
-        public void print(String s) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void print(boolean b) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void print(char c) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void print(int i) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void print(long l) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void print(float v) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void print(double v) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println() throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println(String s) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println(boolean b) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println(char c) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println(int i) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println(long l) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println(float v) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void println(double v) throws IOException {
-            // no-op
-        }
-    }
-}
-
-
-
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorBase.java b/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorBase.java
deleted file mode 100644
index 8175357..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorBase.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.application;
-
-import java.beans.PropertyEditorSupport;
-
-/**
- * Abstract base for a {@link java.beans.PropertyEditor} that delegates to a
- * faces Converter that was registered by-type in a faces-config descriptor.
- * Concrete implementations (such as generated by {@link
- * ConverterPropertyEditorFactory}) will override {@link #getTargetClass}. (This
- * is based on the original ConverterPropertyEditor code).
- */
-public abstract class ConverterPropertyEditorBase
-      extends PropertyEditorSupport {
-    /**
-     * Return the target class of the objects that are being edited. This is used
-     * as a key to find the appropriate {@link javax.faces.convert.Converter} from
-     * the Faces application.
-     *
-     * @return the target class.
-     */
-    protected abstract Class<?> getTargetClass();
-
-    /**
-     * Convert the <code>textValue</code> to an object of type {@link
-     * #getTargetClass} by delegating to a converter in the faces Application.
-     */
-    @Override
-    public void setAsText(String textValue) throws IllegalArgumentException {
-        try {
-            Object appAssociate = getPropertyEditorHelper();
-            // Get targetClass for the current ClassLoader
-            Class<?> targetClass = Thread.currentThread()
-                  .getContextClassLoader()
-                  .loadClass(getTargetClass().getName());
-            Object value = appAssociate.getClass()
-                  .getMethod("convertToObject", Class.class, String.class)
-                  .invoke(
-                        appAssociate, targetClass, textValue);
-            if (value != null) {
-                setValue(value);
-            }
-        } catch (RuntimeException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new IllegalStateException(
-                  "Unexpected Error attempting to use this ConverterPropertyEditor.  You're deployment environment may not support"
-                  + "ConverterPropertyEditors.  Try restarting your server or disabling "
-                  + "com.sun.faces.registerConverterPropertyEditors", e);
-        }
-    }
-
-    private Object getPropertyEditorHelper() throws Exception {
-        // Load the current
-        Class<?> facesContextClass =
-              Thread.currentThread().getContextClassLoader().loadClass(
-                    "com.sun.faces.application.ApplicationAssociate");
-        // get the current context version of this class in case
-        Object appAssociate =
-              facesContextClass.getMethod("getCurrentInstance").invoke(null);
-        if (appAssociate == null) {
-            throw new IllegalStateException(
-                  "Unable to find Deployed JSF Application.  You're deployment environment may not support"
-                  + "ConverterPropertyEditors.  Try restarting your server or turn off "
-                  + "com.sun.faces.registerConverterPropertyEditors");
-        }
-        Object propertyEditorHelper = appAssociate.getClass()
-              .getMethod("getPropertyEditorHelper").invoke(appAssociate);
-        return propertyEditorHelper;
-    }
-
-    /**
-     * Convert an object of type {@link #getTargetClass} to text by delegating to a
-     * converter obtained from the Faces Application.
-     */
-    @Override
-    public String getAsText() {
-        try {
-            Object application = getPropertyEditorHelper();
-            Class<?> targetClass = Thread.currentThread()
-                  .getContextClassLoader()
-                  .loadClass(getTargetClass().getName());
-            String text = (String) application.getClass()
-                  .getMethod("convertToString", Class.class, Object.class)
-                  .invoke(application, targetClass, getValue());
-            if (text != null) {
-                return text;
-            } else {
-                return super.getAsText();
-            }
-        } catch (Exception e) {
-            return super.getAsText();
-        }
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorFactory.java b/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorFactory.java
deleted file mode 100644
index b10dc3f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorFactory.java
+++ /dev/null
@@ -1,648 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.application;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.lang.ref.WeakReference;
-import java.util.Map;
-import java.util.TreeSet;
-import java.util.WeakHashMap;
-import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <p>
- * Factory for dynamically generating PropertyEditor classes that extend
- * {@link ConverterPropertyEditorBase} and replace any references to the target
- * class from the template with a supplied target class.
- * </p>
- */
-public class ConverterPropertyEditorFactory {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    /**
-     * <p>
-     * Capture information extracted from a "template" PropertyEditor class, and
-     * perform manipulation of the byte codes in order to generate the bytes for
-     * a new PropertyEditor class.
-     * </p>
-     * <p>
-     * The new class bytes are generated by identifying UTF8Info entries in the
-     * constant pool of the template class, and replacing them with new UTF8
-     * constants to define a new class. The constants to be replaced are those
-     * for:
-     * <ul>
-     * <li>The name of the class itself
-     * (com/sun/faces/application/ConverterPropertyEditorFor_XXXX).</li>
-     * <li>The class name as a type reference
-     * (Lcom/sun/faces/application/ConverterPropertyEditorFor_XXXX;).</li>
-     * <li>The name of the <i>target class</i> that the editor will be
-     * manipulating (java/util/Date in the current template).</li>
-     * </ul>
-     * </p>
-     */
-    private static class ClassTemplateInfo {
-        /**
-         * Capture details of the location of a UTF8Info entry in the constant
-         * pool of the template class.
-         */
-        private static class Utf8InfoRef {
-            
-            /**
-             * The position of the constant in the byte array that defines the
-             * template class.
-             */
-            int index;
-            /**
-             * The number of bytes that the constant occupies in the byte array
-             * that defines the template class.
-             */
-            int length;
-
-            public Utf8InfoRef(int index, int length) {
-                super();               
-                this.index = index;
-                this.length = length;
-            }
-        }
-
-        /**
-         * Capture details of a single substitution to be made in the template
-         * class while generating the new class. Implements
-         * {@link java.lang.Comparable} so that the replacements can be ordered
-         * according to the order they appear in the source.
-         */
-        private static class Utf8InfoReplacement implements
-            Comparable<Utf8InfoReplacement> {
-            /**
-             * The utf8 constant reference from the template source.
-             */
-            Utf8InfoRef ref;
-            /**
-             * The bytes to replace the constant with (must also be a valid utf8
-             * constant pool entry).
-             */
-            byte[] replacement;
-
-            public Utf8InfoReplacement(Utf8InfoRef ref, String replacement) {
-                super();
-                this.ref = ref;
-                this.replacement = getUtf8InfoBytes(replacement);
-            }
-
-            /**
-             * Order by the index position of the source UTF8Info reference.
-             */
-            public int compareTo(Utf8InfoReplacement rhs) {
-                return ref.index - rhs.ref.index;
-            }
-        }
-
-        // The source template class on which to base the definition of the new
-        // PropertyEditor classes.
-        private Class<? extends ConverterPropertyEditorBase> templateClass;
-        // The bytes that define the source template class.
-        private byte[] templateBytes;
-        // The constant_pool_count from the template class bytecodes.
-        private int constant_pool_count;
-        // Reference to the class name utf8 constant
-        private Utf8InfoRef classNameConstant;
-        // Reference to the class name ref utf8 constant
-        private Utf8InfoRef classNameRefConstant;
-        // Reference to the target class name utf8 constant
-        private Utf8InfoRef targetClassConstant;
-
-        /**
-         * Default constructor uses the {@link ConverterPropertyEditorFor_XXXX}
-         * class as the source template.
-         */
-        public ClassTemplateInfo() {
-            this(ConverterPropertyEditorFor_XXXX.class);
-        }
-
-        /**
-         * Construct a template info instance based on the supplied class.
-         * 
-         * @param templateClass
-         *            is a "template" class (but not in the java generics sense)
-         *            which must extend {@link ConverterPropertyEditorBase} and
-         *            override the
-         *            {@link ConverterPropertyEditorBase#getTargetClass} method.
-         */
-        public ClassTemplateInfo(
-            Class<? extends ConverterPropertyEditorBase> templateClass) {
-            this.templateClass = templateClass;
-            try {
-                ConverterPropertyEditorBase tc = templateClass.newInstance();
-                Class<?> templateTargetClass = tc.getTargetClass();
-                loadTemplateBytes();
-                classNameConstant = findConstant(getVMClassName(templateClass));
-                classNameRefConstant = findConstant(
-                     new StringBuilder(64).append('L').append(getVMClassName(templateClass)).append(';').toString());
-                targetClassConstant = findConstant(getVMClassName(templateTargetClass));
-            } catch (Exception e) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               "Unexected exception ClassTemplateInfo",
-                               e);
-                }
-            }
-        }
-
-        /**
-         * Check whether the <code>targetBytes</code> match the content of the
-         * <code>templateBytes</code> at the given <code>index</code>.
-         * 
-         * @param targetBytes
-         *            byte array to compare.
-         * @param index
-         *            the index into <code>templateBytes</code> at which to
-         *            compare.
-         * @return true if the bytes from <code>targetBytes</code> match the
-         *         bytes from <code>templateBytes</code>.
-         */
-        private boolean matchAtIndex(byte[] targetBytes, int index) {
-            if (index < 0 || index + targetBytes.length > templateBytes.length) {
-                return false;
-            }
-            for (int i = 0; i < targetBytes.length; ++i) {
-                if (targetBytes[i] != templateBytes[index + i]) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        /**
-         * Find an instance of UTF8Info in the source class's constant pool
-         * where the text matches the given argument.
-         * 
-         * @param text
-         *            the text that the UTF8Info must contain.
-         * @return A {@link Utf8InfoRef} instance refering to the matched
-         *         constant pool entry, or <code>null</code> if no match was
-         *         found.
-         */
-        private Utf8InfoRef findConstant(String text) {
-            byte[] utf8InfoBytes = getUtf8InfoBytes(text);
-            assert utf8InfoBytes[0] == 1;
-            int off = 10;
-            for (int i = 1; i < constant_pool_count
-                && off < templateBytes.length; ++i) {
-                if (matchAtIndex(utf8InfoBytes, off)) {
-                    return new Utf8InfoRef(off, utf8InfoBytes.length);
-                }
-                switch (templateBytes[off]) {
-                case 1:// CONSTANT_Utf8
-                {
-                    int len = (templateBytes[off + 1] & 0xff << 8)
-                        + (templateBytes[off + 2] & 0xff);
-                    off += 3 + len;
-                    break;
-                }
-                case 7:// CONSTANT_Class
-                case 8:// CONSTANT_String
-                    off += 3;
-                    break;
-                case 3:// CONSTANT_Integer
-                case 4:// CONSTANT_Float
-                case 9:// CONSTANT_Fieldref
-                case 10:// CONSTANT_Methodref
-                case 11:// CONSTANT_InterfaceMethodref
-                case 12:// CONSTANT_NameAndType
-                    off += 5;
-                    break;
-                case 5:// CONSTANT_Long
-                case 6:// CONSTANT_Double
-                    off += 9;
-                    break;
-                default:
-                    throw new IllegalArgumentException(
-                        "Unrecognized class file constant pool tag "
-                            + templateBytes[off]);
-                }
-            }
-            return null;
-        }
-
-        /**
-         * Obtain the bytes that define the given class by looking for the
-         * ".class" resource and loading the binary data.
-         * 
-         * @throws IOException if an error occurs loading the binary data
-         */
-        private void loadTemplateBytes() throws IOException {
-            String resourceName = '/'
-                + templateClass.getName().replace('.', '/') + ".class";
-            InputStream in = ConverterPropertyEditorFactory.class
-                .getResourceAsStream(resourceName);
-            if (in != null) {
-                try {
-                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                    byte[] buff = new byte[1024];
-                    int more;
-                    while ((more = in.read(buff)) > 0) {
-                        baos.write(buff, 0, more);
-                    }
-                    templateBytes = baos.toByteArray();
-                    // The bytes should start with the CAFEBABE "magic" header
-                    // for class files.
-                    assert templateBytes.length > 9;
-                    assert templateBytes[0] == (byte) 0xCA;
-                    assert templateBytes[1] == (byte) 0xFE;
-                    assert templateBytes[2] == (byte) 0xBA;
-                    assert templateBytes[3] == (byte) 0xBE;
-                    constant_pool_count = ((templateBytes[8] & 0xff) << 8)
-                        + (templateBytes[9] & 0xff);
-                } finally {
-                    in.close();
-                }
-            }
-        }
-
-        /**
-         * Generate a class name to use for the generated PropertyEditor class,
-         * based on the full name of the target class. This is done by replacing
-         * the "XXXX" in the template class name with a version of the target
-         * class name.
-         * 
-         * @param targetClass
-         *            The target class which the PropertyEditor will operate on.
-         * @param vmFormat
-         *            If true, the package name components will be '/'
-         *            separated. Otherwise they will be '.' separated.
-         * @return The full name to use for the generated PropertyEditor class.
-         */
-        public String generateClassNameFor(Class<?> targetClass,
-            boolean vmFormat) {
-            String name = targetClass.getName();
-            if (targetClass.isArray()) {                            
-                int idx = name.lastIndexOf('[');
-                int bracketCount = idx + 1;
-                int semiIdx = name.indexOf(';');
-                if (semiIdx == -1) {
-                    // primitive array
-                    name = PRIM_MAP.get(name.charAt(idx + 1));
-                } else {
-                    // Object array
-                    name = name.substring(idx + 2, semiIdx);
-                }
-                name += "Array" + bracketCount + 'd';                
-            }
-            Matcher m = UnderscorePattern.matcher(name);
-            // Replace existing underscores with one extra underscore.
-            name = m.replaceAll("$0_");
-            // Replace existing dots with a single underscore.
-            name = name.replace('.', '_');
-            if (vmFormat) {
-                return getVMClassName(templateClass).replace("XXXX", name);
-            } else {
-                return templateClass.getName().replace("XXXX", name);
-            }
-        }
-
-        /**
-         * Extract the original target class name from the generated
-         * PropertyEditor class name. (This is the reverse of
-         * {@link #generateClassNameFor}).
-         * 
-         * @param className
-         *            name of the generated PropertyEditor class.
-         * @return the target class name, or null if the given
-         *         <code>className</code> was not a generated PropertyEditor
-         *         name.
-         */
-        public String getTargetClassName(String className) {
-            String prefix = templateClass.getName().replace("XXXX", "");
-            if (className.startsWith(prefix)) {
-                String name = className.substring(prefix.length());
-                name = SingleUnderscorePattern.matcher(name)
-                    .replaceAll("$1.$2");
-                name = MultipleUnderscorePattern.matcher(name).replaceAll("$1");
-                return name;
-            }
-            return null;
-        }
-
-        /**
-         * Generate the bytes for a new class based on the
-         * <code>templateBytes</code>, but with all the replacements in
-         * <code>replacements</code> performed.
-         * 
-         * @param replacements one or more Utf8InfoReplacments
-         * @return the bytes for the new class definition.
-         */
-        private byte[] replaceInTemplate(Utf8InfoReplacement... replacements) {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            // Sort the replacements, and weed out any that have no source match
-            TreeSet<Utf8InfoReplacement> sorted = new TreeSet<Utf8InfoReplacement>();
-            for (Utf8InfoReplacement r : replacements) {
-                if (r.ref != null && r.replacement != null) {
-                    sorted.add(r);
-                }
-            }
-            // Now create the output bytes by applying the remaining
-            // replacements
-            int from = 0;
-            for (Utf8InfoReplacement r : sorted) {
-                baos.write(templateBytes, from, r.ref.index - from);
-                from = r.ref.index + r.ref.length;
-                baos.write(r.replacement, 0, r.replacement.length);
-            }
-            baos.write(templateBytes, from, templateBytes.length - from);
-            return baos.toByteArray();
-        }
-
-        /**
-         * @return the bytes for a new class with the given name and target
-         * class.
-         * 
-         * @param newClassName
-         *            the binary name of the new class.
-         * @param targetClassName
-         *            the binary name of the PropertyEditor's target class.
-         */
-        public byte[] generateClassBytesFor(String newClassName,
-            String targetClassName) {
-            return replaceInTemplate(new Utf8InfoReplacement(classNameConstant,
-                newClassName), new Utf8InfoReplacement(classNameRefConstant,
-                 new StringBuilder(32).append('L').append(newClassName).append(';').toString()), new Utf8InfoReplacement(
-                targetClassConstant, targetClassName));
-        }
-    }
-
-    /**
-     * <p>
-     * A custom class loader for the definition of the generated classes. When
-     * the generated class is loaded, it will need to be able to resolve both
-     * the base class ({@link ConverterPropertyEditorBase}) which comes from
-     * <code>myLoader</code> and the target class which comes from
-     * <code>targetLoader</code>. This class loader defines only the
-     * generated class, and delegates to the above two loaders for the rest.
-     * </p>
-     * <p>
-     * The {@link ConverterPropertyEditorFactory} will keep a cache of these
-     * class loaders (via weak references), one for each class loader that the
-     * target classes come from. That way the target class loader (which is
-     * likely to be a webapp specific loader) can be disposed of and replaced
-     * when the webapp is removed or reinstalled.
-     * </p>
-     */
-    private class DisposableClassLoader extends ClassLoader {
-        // The class loader which loaded the target class.
-        private ClassLoader targetLoader;
-        // The class loader which loaded the base class
-        private ClassLoader myLoader;
-
-        public DisposableClassLoader(ClassLoader targetLoader) {
-            super(targetLoader);
-            this.targetLoader = targetLoader;
-            this.myLoader = ConverterPropertyEditorBase.class.getClassLoader();
-        }
-
-        /**
-         * Override class loading to enable possible delegation to the two class
-         * loaders, rather than just to the parent.
-         */
-        @Override
-        protected synchronized Class<?> loadClass(String name, boolean resolve)
-            throws ClassNotFoundException {
-            // First, check if the class has already been loaded
-            Class c = findLoadedClass(name);
-            // Otherwise check if myLoader is able to load it ...
-            //noinspection ObjectEquality
-            if ((c == null) && (myLoader != null) && (myLoader != targetLoader)) {
-                try {
-                    c = myLoader.loadClass(name);
-                } catch (ClassNotFoundException ignored) {
-                }
-            }
-            // Otherwise go ahead with the targetLoader and with the dynamic
-            // class generation ...
-            if (c == null) {
-                c = super.loadClass(name, false);
-            }
-            if (resolve) {
-                resolveClass(c);
-            }
-            return c;
-        }
-
-        /**
-         * If <code>super.loadClass</code> is unable to locate a class, it
-         * will call this method to define it. If the <code>className</code>
-         * is a generated PropertyEditor class name, then create the new class.
-         * Otherwise call <code>super.findClass</code> which will throw a
-         * {@link ClassNotFoundException}.
-         */
-        @Override
-        protected Class<?> findClass(String className)
-            throws ClassNotFoundException {
-            String targetClassName = getTemplateInfo().getTargetClassName(
-                className);
-            if (targetClassName != null) {
-                // Need to generate an appropriate PropertyEditor class for the
-                // specified target class.
-                byte[] classBytes = getTemplateInfo().generateClassBytesFor(
-                    className.replace('.', '/'),
-                    targetClassName.replace('.', '/'));
-                Class editorClass = defineClass(className,
-                                                classBytes,
-                                                0,
-                                                classBytes.length);
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Defined editorClass " + editorClass);
-                }
-                return editorClass;
-            }
-            // This will just cause ClassNotFoundException to be thrown.
-            return super.findClass(className);
-        }
-    }
-
-    private static final Pattern UnderscorePattern = Pattern.compile("_+");
-    private static final Pattern SingleUnderscorePattern = Pattern
-        .compile("([^_])_([^_])");
-    private static final Pattern MultipleUnderscorePattern = Pattern
-        .compile("_(_+)");
-    private static ConverterPropertyEditorFactory defaultInstance;
-    // Template information extracted from the source template class.
-    private ClassTemplateInfo templateInfo;
-    // Cache of DisposableClassLoaders keyed on the class loader of the target.
-    private Map<ClassLoader, WeakReference<DisposableClassLoader>> classLoaderCache;
-    
-    private static final Map<Character,String> PRIM_MAP =
-          new HashMap<Character,String>(8, 1.0f);
-    static {
-        PRIM_MAP.put('B', "byte");
-        PRIM_MAP.put('C', "char");
-        PRIM_MAP.put('S', "short");
-        PRIM_MAP.put('I', "int");
-        PRIM_MAP.put('F', "float");
-        PRIM_MAP.put('J', "long");
-        PRIM_MAP.put('D', "double");
-        PRIM_MAP.put('Z', "boolean");
-    }
-
-    /**
-     * Create a <code>ConverterPropertyEditorFactory</code> that uses the
-     * default template class ({@link ConverterPropertyEditorFor_XXXX}).
-     */
-    public ConverterPropertyEditorFactory() {
-        // Use the default template class
-        templateInfo = new ClassTemplateInfo();
-    }
-
-    /**
-     * Create a <code>ConverterPropertyEditorFactory</code> that uses the
-     * specified template class.
-     * 
-     * @param templateClass the template
-     */
-    public ConverterPropertyEditorFactory(
-        Class<? extends ConverterPropertyEditorBase> templateClass) {
-        templateInfo = new ClassTemplateInfo(templateClass);
-    }
-
-    /**
-     * @return the single default instance of this class (created with the
-     * default template class).
-     */
-    public static synchronized ConverterPropertyEditorFactory getDefaultInstance() {
-        if (defaultInstance == null) {
-            defaultInstance = new ConverterPropertyEditorFactory();
-        }
-        return defaultInstance;
-    }
-
-    private ClassTemplateInfo getTemplateInfo() {
-        return templateInfo;
-    }
-
-    /**
-     * Return a PropertyEditor class appropriate for editing the given
-     * <code>targetClass</code>. The new class will be defined from a
-     * {@link DisposableClassLoader}.
-     * 
-     * @param targetClass
-     *            the class of object that the returned property editor class
-     *            will be editing.
-     * @return the dynamically generated PropertyEditor class.
-     */
-    @SuppressWarnings("unchecked")
-    public Class<? extends ConverterPropertyEditorBase> definePropertyEditorClassFor(
-        final Class<?> targetClass) {
-        try {
-            String className = getTemplateInfo().generateClassNameFor(
-                targetClass, false);
-            if (classLoaderCache == null) {
-                // Use a WeakHashMap so as not to prevent the class loaders from
-                // being garbage collected.
-                //noinspection CollectionWithoutInitialCapacity
-                classLoaderCache = new WeakHashMap<ClassLoader, WeakReference<DisposableClassLoader>>();
-            }
-            DisposableClassLoader loader;
-            WeakReference<DisposableClassLoader> loaderRef = classLoaderCache
-                .get(targetClass.getClassLoader());
-            if (loaderRef == null || (loader = loaderRef.get()) == null) {
-                loader = (DisposableClassLoader) AccessController.doPrivileged(
-                      new PrivilegedAction() {
-                          public Object run() {
-                            return new DisposableClassLoader(targetClass.getClassLoader());    
-                          }
-                      });
-                if (loader == null) {
-                    return null;
-                }
-                classLoaderCache.put(targetClass.getClassLoader(),
-                    new WeakReference(loader));
-            }
-            return (Class<? extends ConverterPropertyEditorBase>) loader
-                .loadClass(className);
-        } catch (ClassNotFoundException e) {
-        	if (LOGGER.isLoggable(Level.WARNING)) {
-	            LOGGER.log(Level.WARNING,
-	                "definePropertyEditorClassFor: ClassNotFoundException: "
-	                    + e.getMessage(), e);
-        	}
-        }
-        return null;
-    }
-
-    /**
-     * @param c
-     *            the class to find the name of.
-     * @return the binary name of the class as used by the VM ('/' instead of
-     *         '.' as a package name separator).
-     */
-    private static String getVMClassName(Class<?> c) {
-        return c.getName().replace('.', '/');
-    }
-
-    /**
-     * Create a UTF8Info constant pool structure for the given text.
-     * 
-     * @param text
-     *            the text to create the UTF8 constant from.
-     * @return the bytes for the UTF8Info constant pool entry, including the
-     *         tag, length, and utf8 content.
-     */
-    private static byte[] getUtf8InfoBytes(String text) {
-        byte[] utf8;
-        try {
-            utf8 = text.getBytes("UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            utf8 = text.getBytes();
-        }
-        byte[] info = new byte[utf8.length + 3];
-        info[0] = 1;
-        info[1] = (byte) ((utf8.length >> 8) & 0xff);
-        info[2] = (byte) (utf8.length & 0xff);
-        System.arraycopy(utf8, 0, info, 3, utf8.length);
-        return info;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorFor_XXXX.java b/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorFor_XXXX.java
deleted file mode 100644
index f6d3e39..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ConverterPropertyEditorFor_XXXX.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.util.Date;
-
-/**
- * Default template class for the dynamic generation of target-class specific
- * PropertyEditor implementations.
- */
-public class ConverterPropertyEditorFor_XXXX extends
-    ConverterPropertyEditorBase {
-    @Override
-    protected Class<?> getTargetClass() {
-        // Doesn't really matter what this is, since it get's replaced when the
-        // concrete PropertyEditor class is generated (it can be any valid class
-        // reference that is not otherwise refered to in this class -- so don't
-        // make it ConverterPropertyEditorBase or
-        // ConverterPropertyEditorFor_XXXX).
-        return Date.class;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/InjectionApplicationFactory.java b/jsf-ri/src/main/java/com/sun/faces/application/InjectionApplicationFactory.java
deleted file mode 100644
index da19a2b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/InjectionApplicationFactory.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.lang.reflect.Field;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.text.MessageFormat;
-
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.Application;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import javax.faces.FacesWrapper;
-
-/**
- * This {@link javax.faces.application.ApplicationFactory} is responsible for injecting the
- * default {@link Application} instance into the top-level {@link Application}
- * as configured by the runtime.  Doing this allows us to preserve backwards
- * compatibility as the API evolves without having the API rely on implementation
- * specific details.
- */
-public class InjectionApplicationFactory extends ApplicationFactory implements FacesWrapper<ApplicationFactory> {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    private ApplicationFactory delegate;
-    private Application defaultApplication;
-    private Field defaultApplicationField;
-    private volatile Application application;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public InjectionApplicationFactory(ApplicationFactory delegate) {
-
-        Util.notNull("applicationFactory", delegate);
-        this.delegate = delegate;
-
-    }
-
-
-    // ----------------------------------------- Methods from ApplicationFactory
-
-
-    public Application getApplication() {
-
-        if (application == null) {
-            application = delegate.getApplication();
-            if (application == null) {
-                // No i18n here
-                String message = MessageFormat
-                      .format("Delegate ApplicationContextFactory, {0}, returned null when calling getApplication().",
-                              delegate.getClass().getName());
-                throw new IllegalStateException(message);
-            }
-            injectDefaultApplication();
-        }
-        return application;
-
-    }
-
-    
-    public synchronized void setApplication(Application application) {
-
-        this.application = application;
-        delegate.setApplication(application);
-        injectDefaultApplication();
-        
-    }
-
-
-    // ----------------------------------------------- Methods from FacesWrapper
-
-
-    @Override
-    public ApplicationFactory getWrapped() {
-
-        return delegate;
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void injectDefaultApplication() {
-
-
-        if (defaultApplication == null) {
-            FacesContext ctx = FacesContext.getCurrentInstance();
-            String attrName = ApplicationImpl.class.getName();
-            defaultApplication = (Application) ctx.getExternalContext()
-                  .getApplicationMap().get(attrName);
-            ctx.getExternalContext().getApplicationMap()
-                  .remove(attrName);
-        }
-        if (defaultApplication != null) {
-            try {
-                if (defaultApplicationField == null) {
-                    defaultApplicationField =
-                          Application.class
-                                .getDeclaredField("defaultApplication");
-                    defaultApplicationField.setAccessible(true);
-                }
-                defaultApplicationField.set(application, defaultApplication);
-
-            } catch (NoSuchFieldException nsfe) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE, "Unable to find private field named 'defaultApplication' in javax.faces.application.Application.");
-                }
-            } catch (Exception e) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE, e.toString(), e);
-                }
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/NamedEventManager.java b/jsf-ri/src/main/java/com/sun/faces/application/NamedEventManager.java
deleted file mode 100644
index 87e00b6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/NamedEventManager.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.util.Util;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.faces.FacesException;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.event.PostValidateEvent;
-import javax.faces.event.PreValidateEvent;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.PreRenderComponentEvent;
-import javax.faces.event.PreRenderViewEvent;
-import javax.faces.event.SystemEvent;
-
-/**
- * Note: New, relevant spec'd ComponentSystemEvents must be added to the constructor
- */
-public class NamedEventManager {
-
-    private Map<String, Class<? extends SystemEvent>> namedEvents =
-            new ConcurrentHashMap<String, Class<? extends SystemEvent>>();
-    private Map<String, Set<Class<? extends SystemEvent>>> duplicateNames =
-             new ConcurrentHashMap<String, Set<Class<? extends SystemEvent>>>();
-
-    public NamedEventManager() {
-        namedEvents.put("javax.faces.event.PreRenderComponent", PreRenderComponentEvent.class);
-        namedEvents.put("javax.faces.event.PreRenderView", PreRenderViewEvent.class);
-        namedEvents.put("javax.faces.event.PostAddToView", PostAddToViewEvent.class);
-        namedEvents.put("javax.faces.event.PreValidate", PreValidateEvent.class);
-        namedEvents.put("javax.faces.event.PostValidate", PostValidateEvent.class);
-        namedEvents.put("preRenderComponent", PreRenderComponentEvent.class);
-        namedEvents.put("preRenderView", PreRenderViewEvent.class);
-        namedEvents.put("postAddToView", PostAddToViewEvent.class);
-        namedEvents.put("preValidate", PreValidateEvent.class);
-        namedEvents.put("postValidate", PostValidateEvent.class);
-    }
-
-    public void addNamedEvent(String name, Class<? extends SystemEvent> event) {
-        namedEvents.put(name, event);
-    }
-
-    public Class<? extends SystemEvent> getNamedEvent(String name) {
-        Class<? extends SystemEvent> namedEvent = namedEvents.get(name);
-        if (namedEvent == null) {
-            try {
-                namedEvent = Util.loadClass(name, this);
-            } catch (ClassNotFoundException ex) {
-                throw new FacesException ("An unknown event type was specified:  " + name, ex);
-            }
-        }
-        if (!ComponentSystemEvent.class.isAssignableFrom(namedEvent)) {
-                throw new ClassCastException();
-        }
-
-        return namedEvent;
-    }
-
-    public void addDuplicateName(String name, Class<? extends SystemEvent> event) {
-        Class<? extends SystemEvent> registeredEvent = namedEvents.remove(name);
-        Set<Class<? extends SystemEvent>> events = duplicateNames.get(name);
-        if (events == null) {
-            events = new HashSet<Class<? extends SystemEvent>>();
-            duplicateNames.put(name, events);
-        }
-        events.add(event);
-        if (registeredEvent != null) {
-            events.add(registeredEvent);
-        }
-    }
-
-    public boolean isDuplicateNamedEvent(String name) {
-        return (namedEvents.get(name) != null) || (duplicateNames.get(name) != null);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/NavigationHandlerImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/NavigationHandlerImpl.java
deleted file mode 100644
index 13e1aa3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/NavigationHandlerImpl.java
+++ /dev/null
@@ -1,800 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import javax.faces.FacesException;
-import javax.faces.application.NavigationCase;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialViewContext;
-
-import java.util.*;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-import javax.faces.application.ConfigurableNavigationHandler;
-import javax.faces.application.FacesMessage;
-
-/**
- * <p><strong>NavigationHandlerImpl</strong> is the class that implements
- * default navigation handling. Refer to section 7.4.2 of the specification for
- * more details.
- * PENDING: Make independent of ApplicationAssociate. 
- */
-
-public class NavigationHandlerImpl extends ConfigurableNavigationHandler {
-
-    // Log instance for this class
-    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
-
-    /**
-     * <code>Map</code> containing configured navigation cases.
-     */
-    private volatile NavigationMap navigationMap;
-
-
-    /**
-     * Flag indicated the current mode.
-     */
-    private boolean development;
-    private static final Pattern REDIRECT_EQUALS_TRUE = Pattern.compile("(.*)(faces-redirect=true)(.*)");
-    private static final Pattern INCLUDE_VIEW_PARAMS_EQUALS_TRUE = Pattern.compile("(.*)(includeViewParams=true)(.*)");
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * This constructor uses the current <code>ApplicationAssociate</code>
-     * instance to obtain the navigation mappings used to make
-     * navigational decisions.
-     */
-    public NavigationHandlerImpl() {
-
-        super();
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "Created NavigationHandler instance ");
-        }
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(
-              FacesContext.getCurrentInstance().getExternalContext());
-        if (associate != null) {
-            development = associate.isDevModeEnabled();
-        }
-
-    }
-
-
-    // ------------------------------ Methods from ConfigurableNavigationHandler
-
-
-    /**
-     * @see javax.faces.application.ConfigurableNavigationHandler#getNavigationCase(javax.faces.context.FacesContext, String, String)
-     */
-    @Override
-    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
-
-        Util.notNull("context", context);
-        NavigationCase result = null;
-        CaseStruct caseStruct = getViewId(context, fromAction, outcome);
-        if (null != caseStruct) {
-            result = caseStruct.navCase;
-        }
-        
-        return result;
-        
-    }
-
-
-    /**
-     * @see javax.faces.application.ConfigurableNavigationHandler#getNavigationCases()
-     */
-    @Override
-    public Map<String, Set<NavigationCase>> getNavigationCases() {
-
-        if (navigationMap == null) {
-            navigationMap = new NavigationMap();
-        }
-        return navigationMap;
-
-    }
-
-
-    // ------------------------------------------ Methods from NavigationHandler
-    
-
-    /**
-     * @see javax.faces.application.NavigationHandler#handleNavigation(javax.faces.context.FacesContext, String, String)
-     */
-    public void handleNavigation(FacesContext context,
-                                 String fromAction,
-                                 String outcome) {
-
-        Util.notNull("context", context);
-
-        CaseStruct caseStruct = getViewId(context, fromAction, outcome);
-        if (caseStruct != null) {
-            ExternalContext extContext = context.getExternalContext();
-            ViewHandler viewHandler = Util.getViewHandler(context);
-            assert (null != viewHandler);
-            if (caseStruct.navCase.isRedirect()) {
-                // perform a 302 redirect.
-                String redirectUrl =
-                      viewHandler.getRedirectURL(context,
-                                                 caseStruct.viewId,
-                                                 caseStruct.navCase.getParameters(),
-                                                 caseStruct.navCase.isIncludeViewParams());
-                try {
-                    if (logger.isLoggable(Level.FINE)) {
-                        logger.fine("Redirecting to path " + redirectUrl
-                                    + " for outcome " + outcome +
-                                    "and viewId " + caseStruct.viewId);
-                    }
-                    // encode the redirect to ensure session state
-                    // is maintained
-                    clearViewMapIfNecessary(context.getViewRoot(), caseStruct.viewId);
-                    updateRenderTargets(context, caseStruct.viewId);
-                    extContext.getFlash().setRedirect(true);
-                    extContext.redirect(redirectUrl);
-                } catch (java.io.IOException ioe) {
-                    if (logger.isLoggable(Level.SEVERE)) {
-                        logger.log(Level.SEVERE,"jsf.redirect_failed_error",
-                                   redirectUrl);
-                    }
-                    throw new FacesException(ioe.getMessage(), ioe);
-                }
-                context.responseComplete();
-               if (logger.isLoggable(Level.FINE)) {
-                   logger.fine("Response complete for " + caseStruct.viewId);
-               }
-            } else {
-                UIViewRoot newRoot = viewHandler.createView(context,
-                                                            caseStruct.viewId);
-                updateRenderTargets(context, caseStruct.viewId);
-                context.setViewRoot(newRoot);
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.fine("Set new view in FacesContext for " +
-                                caseStruct.viewId);
-                }
-            }
-        } 
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    private void initializeNavigationFromAssociate() {
-
-        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
-        if (associate != null) {
-            Map<String,Set<NavigationCase>> m = associate.getNavigationCaseListMappings();
-            navigationMap = new NavigationMap();
-            if (m != null) {
-                navigationMap.putAll(m);
-            }
-        }
-
-    }
-
-    /**
-     * Calls <code>clear()</code> on the ViewMap (if available) if the view
-     * ID of the UIViewRoot differs from <code>newId</code>
-     */
-    private void clearViewMapIfNecessary(UIViewRoot root, String newId) {
-
-        if (!root.getViewId().equals(newId)) {
-            Map<String, Object> viewMap = root.getViewMap(false);
-            if (viewMap != null) {
-                viewMap.clear();
-            }
-        }
-
-    }
-
-
-    private void updateRenderTargets(FacesContext ctx, String newId) {
-
-        if (!ctx.getViewRoot().getViewId().equals(newId)) {
-            PartialViewContext pctx = ctx.getPartialViewContext();
-            if (!pctx.isRenderAll()) {
-                pctx.setRenderAll(true);
-            }
-        }
-
-    }
-
-
-    /**
-     * This method uses helper methods to determine the new <code>view</code> identifier.
-     * Refer to section 7.4.2 of the specification for more details.
-     *
-     * @param ctx the @{link FacesContext} for the current request
-     * @param fromAction The action reference string
-     * @param outcome    The outcome string
-     * @return The <code>view</code> identifier.
-     */
-    private CaseStruct getViewId(FacesContext ctx,
-                                 String fromAction,
-                                 String outcome) {
-
-        if (navigationMap == null) {
-            synchronized (this) {
-                initializeNavigationFromAssociate();
-            }
-        }
-
-        UIViewRoot root = ctx.getViewRoot();
-
-        
-        String viewId = (root != null ? root.getViewId() : null);
-        
-        // if viewIdToTest is not null, use its value to find
-        // a navigation match, otherwise look for a match
-        // based soley on the fromAction and outcome
-        CaseStruct caseStruct = null;
-        if (viewId != null) {
-            caseStruct = findExactMatch(ctx, viewId, fromAction, outcome);
-
-            if (caseStruct == null) {
-                caseStruct = findWildCardMatch(ctx, viewId, fromAction, outcome);
-            }
-        }
-
-        if (caseStruct == null) {
-            caseStruct = findDefaultMatch(ctx, fromAction, outcome);
-        }
-        
-        // If the navigation rules do not have a match...
-        if (caseStruct == null && outcome != null && viewId != null) {
-            // Treat empty string equivalent to null outcome.  JSF 2.0 Rev a
-            // Changelog issue C063.
-            if (caseStruct == null && 0 == outcome.length()) {
-                outcome = null;
-            } else {
-                caseStruct = findImplicitMatch(ctx, viewId, fromAction, outcome);
-            }
-        }
-
-        // no navigation case fo
-        if (caseStruct == null && outcome != null && development) {
-            String key;
-            Object[] params;
-            if (fromAction == null) {
-                key = MessageUtils.NAVIGATION_NO_MATCHING_OUTCOME_ID;
-                params = new Object[] { viewId, outcome };
-            } else {
-                key = MessageUtils.NAVIGATION_NO_MATCHING_OUTCOME_ACTION_ID;
-                params = new Object[] { viewId, fromAction, outcome };
-            }
-            FacesMessage m = MessageUtils.getExceptionMessage(key, params);
-            m.setSeverity(FacesMessage.SEVERITY_WARN);
-            ctx.addMessage(null, m);
-        }
-        return caseStruct;
-    }
-
-
-    /**
-     * This method finds the List of cases for the current <code>view</code> identifier.
-     * After the cases are found, the <code>from-action</code> and <code>from-outcome</code>
-     * values are evaluated to determine the new <code>view</code> identifier.
-     * Refer to section 7.4.2 of the specification for more details.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param viewId     The current <code>view</code> identifier.
-     * @param fromAction The action reference string.
-     * @param outcome    The outcome string.
-     * @return The <code>view</code> identifier.
-     */
-    private CaseStruct findExactMatch(FacesContext ctx,
-                                      String viewId,
-                                      String fromAction,
-                                      String outcome) {
-
-        Set<NavigationCase> caseSet = navigationMap.get(viewId);
-
-        if (caseSet == null) {
-            return null;
-        }
-
-        // We've found an exact match for the viewIdToTest.  Now we need to evaluate
-        // from-action/outcome in the following order:
-        // 1) elements specifying both from-action and from-outcome
-        // 2) elements specifying only from-outcome
-        // 3) elements specifying only from-action
-        // 4) elements where both from-action and from-outcome are null
-
-
-        return determineViewFromActionOutcome(ctx, caseSet, fromAction, outcome);
-    }
-
-
-    /**
-     * This method traverses the wild card match List (containing <code>from-view-id</code>
-     * strings and finds the List of cases for each <code>from-view-id</code> string.
-     * Refer to section 7.4.2 of the specification for more details.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param viewId     The current <code>view</code> identifier.
-     * @param fromAction The action reference string.
-     * @param outcome    The outcome string.
-     * @return The <code>view</code> identifier.
-     */
-
-    private CaseStruct findWildCardMatch(FacesContext ctx,
-                                         String viewId,
-                                         String fromAction,
-                                         String outcome) {
-        CaseStruct result = null;
-
-        for (String fromViewId : navigationMap.wildcardMatchList) {
-            // See if the entire wildcard string (without the trailing "*" is
-            // contained in the incoming viewIdToTest.  
-            // Ex: /foobar is contained with /foobarbaz
-            // If so, then we have found our largest pattern match..
-            // If not, then continue on to the next case;
-
-            if (!viewId.startsWith(fromViewId)) {
-                continue;
-            }
-
-            // Append the trailing "*" so we can do our map lookup;
-
-            String wcFromViewId = new StringBuilder(32).append(fromViewId).append('*').toString();
-            Set<NavigationCase> ccaseSet = navigationMap.get(wcFromViewId);
-
-            if (ccaseSet == null) {
-                return null;
-            }
-
-            // If we've found a match, then we need to evaluate
-            // from-action/outcome in the following order:
-            // 1) elements specifying both from-action and from-outcome
-            // 2) elements specifying only from-outcome
-            // 3) elements specifying only from-action
-            // 4) elements where both from-action and from-outcome are null
-
-            result = determineViewFromActionOutcome(ctx,
-                                                    ccaseSet,
-                                                    fromAction,
-                                                    outcome);
-            if (result != null) {
-                break;
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * This method will extract the cases for which a <code>from-view-id</code> is
-     * an asterisk "*".
-     * Refer to section 7.4.2 of the specification for more details.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param fromAction The action reference string.
-     * @param outcome    The outcome string.
-     * @return The <code>view</code> identifier.
-     */
-
-    private CaseStruct findDefaultMatch(FacesContext ctx,
-                                        String fromAction,
-                                        String outcome) {
-
-        Set<NavigationCase> caseSet = navigationMap.get("*");
-
-        if (caseSet == null) {
-            return null;
-        }
-
-        // We need to evaluate from-action/outcome in the follow
-        // order:  1)elements specifying both from-action and from-outcome
-        // 2) elements specifying only from-outcome
-        // 3) elements specifying only from-action
-        // 4) elements where both from-action and from-outcome are null
-
-        return determineViewFromActionOutcome(ctx, caseSet, fromAction, outcome);
-    }
-
-
-    /**
-     * <p>
-     * Create a navigation case based on content within the outcome.
-     * </p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @param viewId of the {@link UIViewRoot} for the current request
-     * @param fromAction the navigation action
-     * @param outcome the navigation outcome
-     * @return a CaseStruct representing the the navigation result based
-     *  on the provided input
-     */
-    private CaseStruct findImplicitMatch(FacesContext context,
-                                         String viewId,
-                                         String fromAction,
-                                         String outcome) {
-
-        // look for an implicit match.
-        String viewIdToTest = outcome;
-        String currentViewId = viewId;
-        Map<String, List<String>> parameters = null;
-        boolean isRedirect = false;
-        boolean isIncludeViewParams = false;
-
-        int questionMark = viewIdToTest.indexOf('?');
-        String queryString;
-        if (-1 != questionMark) {
-            int viewIdLen = viewIdToTest.length();
-            if (viewIdLen <= (questionMark+1)) {
-                if (logger.isLoggable(Level.SEVERE)) {
-                    logger.log(Level.SEVERE, "jsf.navigation_invalid_query_string",
-                            viewIdToTest);
-                }
-                if (development) {
-                    String key;
-                    Object[] params;
-                    key = MessageUtils.NAVIGATION_INVALID_QUERY_STRING_ID;
-                    params = new Object[]{viewIdToTest};
-                    FacesMessage m = MessageUtils.getExceptionMessage(key, params);
-                    m.setSeverity(FacesMessage.SEVERITY_WARN);
-                    context.addMessage(null, m);
-                }
-                queryString = null;
-                viewIdToTest = viewIdToTest.substring(0, questionMark);
-            } else {
-                queryString = viewIdToTest.substring(questionMark + 1);
-                viewIdToTest = viewIdToTest.substring(0, questionMark);
-
-                Matcher m = REDIRECT_EQUALS_TRUE.matcher(queryString);
-                if (m.find()) {
-                    isRedirect = true;
-                    queryString = queryString.replace(m.group(2), "");
-                }
-                m = INCLUDE_VIEW_PARAMS_EQUALS_TRUE.matcher(queryString);
-                if (m.find()) {
-                    isIncludeViewParams = true;
-                    queryString = queryString.replace(m.group(2), "");
-                }
-            }
-
-            if (queryString != null && queryString.length() > 0) {
-                String[] queryElements = Util.split(queryString, "&|&");
-                for (int i = 0, len = queryElements.length; i < len; i ++) {
-                    String[] elements = Util.split(queryElements[i], "=");
-                    if (elements.length == 2) {
-                        if (parameters == null) {
-                            parameters = new LinkedHashMap<String,List<String>>(len / 2, 1.0f);
-                            List<String> values = new ArrayList<String>(2);
-                            values.add(elements[1]);
-                            parameters.put(elements[0], values);
-                        } else {
-                            List<String> values = parameters.get(elements[0]);
-                            if (values == null) {
-                                values = new ArrayList<String>(2);
-                                parameters.put(elements[0], values);
-                            }
-                            values.add(elements[1]);
-                        }
-                    }
-                }
-            }
-        }
-
-        // If the viewIdToTest needs an extension, take one from the currentViewId.
-        if (viewIdToTest.lastIndexOf('.') == -1) {
-            int idx = currentViewId.lastIndexOf('.');
-            if (idx != -1) {
-                viewIdToTest = viewIdToTest + currentViewId.substring(idx);
-            }
-        }
-
-        if (!viewIdToTest.startsWith("/")) {
-            int lastSlash = currentViewId.lastIndexOf("/");
-            if (lastSlash != -1) {
-                currentViewId = currentViewId.substring(0, lastSlash + 1);
-                viewIdToTest = currentViewId + viewIdToTest;
-            } else {
-                viewIdToTest = "/" + viewIdToTest;
-            }
-        }
-
-        ViewHandler viewHandler = Util.getViewHandler(context);
-        viewIdToTest = viewHandler.deriveViewId(context, viewIdToTest);
-
-        if (null != viewIdToTest) {
-            CaseStruct caseStruct = new CaseStruct();
-            caseStruct.viewId = viewIdToTest;
-            caseStruct.navCase = new NavigationCase(currentViewId,
-                                                    fromAction,
-                                                    outcome,
-                                                    null,
-                                                    viewIdToTest,
-                                                    parameters,
-                                                    isRedirect,
-                                                    isIncludeViewParams);
-            return caseStruct;
-        }
-
-        return null;
-
-    }
-
-
-    /**
-     * This method will attempt to find the <code>view</code> identifier based on action reference
-     * and outcome.  Refer to section 7.4.2 of the specification for more details.
-     * @param ctx the {@link FacesContext} for the current request
-     * @param caseSet   The list of navigation cases.
-     * @param fromAction The action reference string.
-     * @param outcome    The outcome string.
-     * @return The <code>view</code> identifier.
-     */
-    private CaseStruct determineViewFromActionOutcome(FacesContext ctx,
-                                                      Set<NavigationCase> caseSet,
-                                                      String fromAction,
-                                                      String outcome) {
-
-        CaseStruct result = new CaseStruct();
-        boolean match = false;
-        for (NavigationCase cnc : caseSet) {
-            String cncFromAction = cnc.getFromAction();
-            String cncFromOutcome = cnc.getFromOutcome();
-            boolean cncHasCondition = cnc.hasCondition();
-            String cncToViewId = cnc.getToViewId(ctx);
-           
-            if ((cncFromAction != null) && (cncFromOutcome != null)) {
-                if ((cncFromAction.equals(fromAction)) &&
-                    (cncFromOutcome.equals(outcome))) {
-                    result.viewId = cncToViewId;
-                    result.navCase = cnc;
-                    match = true;
-                }
-            } else if ((cncFromAction == null) && (cncFromOutcome != null)) {
-                if (cncFromOutcome.equals(outcome)) {
-                    result.viewId = cncToViewId;
-                    result.navCase = cnc;
-                    match = true;
-                }
-            } else if ((cncFromAction != null) && (cncFromOutcome == null)) {
-                if (cncFromAction.equals(fromAction) && (outcome != null || cncHasCondition)) {
-                    result.viewId = cncToViewId;
-                    result.navCase = cnc;
-                    match = true;
-                }
-            } else if ((cncFromAction == null) && (cncFromOutcome == null)) {
-                if (outcome != null || cncHasCondition) {
-                    result.viewId = cncToViewId;
-                    result.navCase = cnc;
-                    match = true;
-                }
-            }
-
-            if (match) {
-                if (cncHasCondition && Boolean.FALSE.equals(cnc.getCondition(ctx))) {
-                    match = false;
-                } else {
-                    return result;
-                }
-            }
-        }
-
-        return null;
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static class CaseStruct {
-        String viewId;
-        NavigationCase navCase;
-    }
-
-
-    private static final class NavigationMap extends AbstractMap<String,Set<NavigationCase>> {
-
-        private HashMap<String,Set<NavigationCase>> navigationMap =
-              new HashMap<String,Set<NavigationCase>>();
-        private TreeSet<String> wildcardMatchList =
-              new TreeSet<String>(new Comparator<String>() {
-                  public int compare(String fromViewId1, String fromViewId2) {
-                      return -(fromViewId1.compareTo(fromViewId2));
-                  }
-              });
-
-
-        // ---------------------------------------------------- Methods from Map
-
-
-        @Override
-        public int size() {
-            return navigationMap.size();
-        }
-
-
-        @Override
-        public boolean isEmpty() {
-            return navigationMap.isEmpty();
-        }
-
-        
-        @Override
-        public Set<NavigationCase> put(String key, Set<NavigationCase> value) {
-            if (key == null) {
-                throw new IllegalArgumentException(key);
-            }
-            if (value == null) {
-                throw new IllegalArgumentException();
-            }
-            updateWildcards(key);
-            Set<NavigationCase> existing = navigationMap.get(key);
-            if (existing == null) {
-                navigationMap.put(key, value);
-                return null;
-            } else {
-                existing.addAll(value);
-                return existing;
-            }
-
-        }
-
-        @Override
-        public void putAll(Map<? extends String, ? extends Set<NavigationCase>> m) {
-            if (m == null) {
-                return;
-            }
-            for (Map.Entry<? extends String, ? extends Set<NavigationCase>> entry : m.entrySet()) {
-                String key = entry.getKey();
-                updateWildcards(key);
-                Set<NavigationCase> existing = navigationMap.get(key);
-                if (existing == null) {
-                    navigationMap.put(key, entry.getValue());
-                } else {
-                    existing.addAll(entry.getValue());
-                }
-            }
-        }
-
-
-        @Override
-        public Set<String> keySet() {
-            return new AbstractSet<String>() {
-
-                public Iterator<String> iterator() {
-                    return new Iterator<String>() {
-
-                        Iterator<Map.Entry<String,Set<NavigationCase>>> i = entrySet().iterator();
-
-                        public boolean hasNext() {
-                            return i.hasNext();
-                        }
-
-                        public String next() {
-                            return i.next().getKey();
-                        }
-
-                        public void remove() {
-                            throw new UnsupportedOperationException();
-                        }
-                    };
-                }
-
-                public int size() {
-                    return NavigationMap.this.size();
-                }
-            };
-        }
-
-        @Override
-        public Collection<Set<NavigationCase>> values() {
-            return new AbstractCollection<Set<NavigationCase>>() {
-
-                public Iterator<Set<NavigationCase>> iterator() {
-                    return new Iterator<Set<NavigationCase>>() {
-
-                        Iterator<Map.Entry<String,Set<NavigationCase>>> i = entrySet().iterator();
-
-                        public boolean hasNext() {
-                            return i.hasNext();
-                        }
-
-                        public Set<NavigationCase> next() {
-                            return i.next().getValue();
-                        }
-
-                        public void remove() {
-                            throw new UnsupportedOperationException();
-                        }
-                    };
-                }
-
-                public int size() {
-                    return NavigationMap.this.size();
-                }
-            };
-        }
-
-        public Set<Entry<String, Set<NavigationCase>>> entrySet() {
-            return new AbstractSet<Entry<String, Set<NavigationCase>>>() {
-
-                public Iterator<Entry<String, Set<NavigationCase>>> iterator() {
-
-                    return new Iterator<Entry<String,Set<NavigationCase>>>() {
-
-                        Iterator<Entry<String, Set<NavigationCase>>> i =
-                              navigationMap.entrySet().iterator();
-
-                        public boolean hasNext() {
-                            return i.hasNext();
-                        }
-
-                        public Entry<String, Set<NavigationCase>> next() {
-                            return i.next();
-                        }
-
-                        public void remove() {
-                            throw new UnsupportedOperationException();
-                        }
-                    };
-                }
-
-                public int size() {
-                    return NavigationMap.this.size();
-                }
-            };
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-        private void updateWildcards(String fromViewId) {
-
-            if (!navigationMap.containsKey(fromViewId)) {
-                if (fromViewId.endsWith("*")) {
-                    wildcardMatchList.add(fromViewId.substring(0, fromViewId.lastIndexOf('*')));
-                }
-            }
-            
-        }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ProjectStageJndiFactory.java b/jsf-ri/src/main/java/com/sun/faces/application/ProjectStageJndiFactory.java
deleted file mode 100644
index fc23c7c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ProjectStageJndiFactory.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.util.Hashtable;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.naming.spi.ObjectFactory;
-import javax.naming.Name;
-import javax.naming.Context;
-import javax.naming.Reference;
-import javax.naming.RefAddr;
-import javax.faces.application.ProjectStage;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * Allows configuring ProjectStage at a server (or in GlassFish's case domain)
- * level.  This allows for the concept of development and test servers where
- * each application doesn't need to be individually configured, but will instead
- * rely on global JNDI configuration instead.
- */
-public class ProjectStageJndiFactory implements ObjectFactory {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    /**
-     * Lookup the configured stage by looking for the parameter <code>stage<code>.
-     * If the value of <code>stage</code> cannot be determined, the default
-     * {@link javax.faces.application.ProjectStage#Production} is returned.
-     *
-     * @see ObjectFactory#getObjectInstance(Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable)
-     */
-    public Object getObjectInstance(Object obj,
-                                    Name name,
-                                    Context nameCtx,
-                                    Hashtable<?, ?> environment)
-    throws Exception {
-
-        if (obj != null && obj instanceof Reference) {
-            Reference ref = (Reference) obj;
-            RefAddr addr = ref.get("stage");
-            if (addr != null) {
-                String val = (String) addr.getContent();
-                if (val != null) {
-                    return val.trim();
-                }
-            } else {
-            	if (LOGGER.isLoggable(Level.WARNING)) {
-            		LOGGER.warning("'stage' property not defined.  Defaulting to Production");
-            	}
-            }
-        }
-        return ProjectStage.Production.toString();
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/PropertyEditorHelper.java b/jsf-ri/src/main/java/com/sun/faces/application/PropertyEditorHelper.java
deleted file mode 100644
index 2606434..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/PropertyEditorHelper.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-
-import com.sun.faces.util.MessageFactory;
-import com.sun.faces.util.RequestStateManager;
-
-/**
- * Helper class to aid the ConverterPropertyEditorBase in converting
- * properties.
- *
- * @author Mike Youngstrom
- */
-public class PropertyEditorHelper {
-
-    private Application app;
-
-    public PropertyEditorHelper(Application app) {
-        this.app = app;
-    }
-
-    /**
-     * Convert the <code>textValue</code> to an object of type targetClass by
-     * delegating to a converter.
-     */
-    public Object convertToObject(Class<?> targetClass, String textValue) {
-        UIComponent component = getComponent();
-        Converter converter = app.createConverter(targetClass);
-        if (null == converter) {
-            // PENDING(edburns): I18N
-            FacesException e = new FacesException(
-                  "Cannot create Converter to convert value "
-                  + textValue
-                  + " to instance of target class "
-                  + targetClass.getName()
-                  + '.');
-            throw e;
-        }
-        FacesContext currentInstance = FacesContext.getCurrentInstance();
-        try {
-            return converter.getAsObject(currentInstance, component, textValue);
-        } catch (ConverterException ce) {
-            addConversionErrorMessage(currentInstance, component, ce);
-            return null;
-        }
-    }
-
-    /**
-     * Convert an object of type targetClass to text by delegating to a converter
-     * obtained from the Faces application.
-     */
-    public String convertToString(Class<?> targetClass, Object value) {
-        UIComponent component = getComponent();
-        Converter converter = app.createConverter(targetClass);
-        if (null == converter) {
-            // PENDING(edburns): I18N
-            throw new FacesException("Cannot create Converter to convert "
-                                     + targetClass.getName()
-                                     + " value "
-                                     + value
-                                     + " to string.");
-        }
-        FacesContext currentInstance = FacesContext.getCurrentInstance();
-        try {
-            return converter.getAsString(currentInstance, component, value);
-        } catch (ConverterException ce) {
-            addConversionErrorMessage(currentInstance, component, ce);
-            return null;
-        }
-    }
-
-    /**
-     * Return the {@link javax.faces.component.UIComponent} that is currently being
-     * processed.
-     *
-     * @return the current component, or null.
-     */
-    protected UIComponent getComponent() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            return ((UIComponent) RequestStateManager
-                  .get(context, RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME));
-        }
-        return null;
-    }
-
-    /**
-     * Add a conversion error message in the case of a PropertyEditor based
-     * conversion error.
-     *
-     * @param context
-     * @param component
-     * @param ce
-     */
-    protected void addConversionErrorMessage(FacesContext context,
-                                             UIComponent component,
-                                             ConverterException ce) {
-        String converterMessageString = null;
-        FacesMessage message;
-        UIInput input;
-        if (component instanceof UIInput) {
-            input = (UIInput) component;
-            converterMessageString = input.getConverterMessage();
-            input.setValid(false);
-        }
-        if (null != converterMessageString) {
-            message =
-                  new FacesMessage(FacesMessage.SEVERITY_ERROR, converterMessageString, converterMessageString);
-        } else {
-            message = ce.getFacesMessage();
-            if (message == null) {
-                message = MessageFactory
-                      .getMessage(context, UIInput.CONVERSION_MESSAGE_ID);
-                if (message.getDetail() == null) {
-                    message.setDetail(ce.getMessage());
-                }
-            }
-        }
-        context.addMessage(component != null
-                           ? component.getClientId(context) : null, message);
-	}
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/StateManagerImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/StateManagerImpl.java
deleted file mode 100644
index a27cd8e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/StateManagerImpl.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.Util;
-
-import javax.faces.FacesException;
-import javax.faces.application.ProjectStage;
-import javax.faces.application.StateManager;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKit;
-import javax.faces.render.ResponseStateManager;
-import javax.faces.view.StateManagementStrategy;
-import javax.faces.view.ViewDeclarationLanguage;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * <p>
- * A <code>StateManager</code> implementation to meet the requirements
- * of the specification.
- * </p>
- *
- * <p>
- * For those who had compile dependencies on this class, we're sorry for any
- * inconvenience, but this had to be re-worked as the version you depended on
- * was incorrectly implemented.  
- * </p>
- */
-public class StateManagerImpl extends StateManager {
-
-    private boolean isDevelopmentMode;
-    private Map<String,Class<?>> classMap;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Create a new <code>StateManagerImpl</code> instance.
-     */
-    public StateManagerImpl() {
-
-        isDevelopmentMode = FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Development);
-        classMap = new ConcurrentHashMap<String,Class<?>>(32);
-
-    }
-
-
-    // ----------------------------------------------- Methods from StateManager
-
-
-    /**
-     * @see {@link javax.faces.application.StateManager#saveView(javax.faces.context.FacesContext))
-     */
-    @Override
-    public Object saveView(FacesContext context) {
-
-        if (context == null) {
-            return null;
-        }
-
-        // irrespective of method to save the tree, if the root is transient
-        // no state information needs to  be persisted.
-        UIViewRoot viewRoot = context.getViewRoot();
-        if (viewRoot.isTransient()) {
-            return null;
-        }
-        
-        Object result;
-        String viewId = context.getViewRoot().getViewId();
-        StateManagementStrategy strategy = null;
-        ViewDeclarationLanguage vdl =
-              context.getApplication().getViewHandler().
-                    getViewDeclarationLanguage(context, viewId);
-        if (vdl != null) {
-            strategy = vdl.getStateManagementStrategy(context, viewId);
-        }
-
-        if (null != strategy) {
-            result = strategy.saveView(context);
-        } else {
-            // honor the requirement to check for id uniqueness
-            Util.checkIdUniqueness(context,
-                                   viewRoot,
-                                   new HashSet<String>(viewRoot.getChildCount() << 1));
-
-            List<TreeNode> treeList = new ArrayList<TreeNode>(32);
-            Object state = viewRoot.processSaveState(context);
-            captureChild(treeList, 0, viewRoot);
-            Object[] tree = treeList.toArray();
-
-            result = new Object[]{tree, state};
-        }
-        
-        return result;
-
-    }
-
-
-    /**
-     * @see {@link StateManager#writeState(javax.faces.context.FacesContext, Object)}
-     */
-    @Override
-    public void writeState(FacesContext context, Object state)
-          throws IOException {
-
-        RenderKit rk = context.getRenderKit();
-        ResponseStateManager rsm = rk.getResponseStateManager();
-        rsm.writeState(context, state);
-
-    }
-
-
-    /**
-     * @see {@link StateManager#restoreView(javax.faces.context.FacesContext, String, String)}
-     */
-    public UIViewRoot restoreView(FacesContext context,
-                                  String viewId,
-                                  String renderKitId) {
-        UIViewRoot result = null;
-        StateManagementStrategy strategy = null;
-        
-        ViewDeclarationLanguage vdl =
-              context.getApplication().getViewHandler().
-                    getViewDeclarationLanguage(context, viewId);
-        if (vdl != null) {
-            strategy = vdl.getStateManagementStrategy(context, viewId);
-        }
-
-        if (null != strategy) {
-            result = strategy.restoreView(context, viewId, renderKitId);
-        } else {
-            ResponseStateManager rsm =
-                    RenderKitUtils.getResponseStateManager(context, renderKitId);
-            Object[] state = (Object[]) rsm.getState(context, viewId);
-
-            if (state != null && state.length >= 2) {
-                // We need to clone the tree, otherwise we run the risk
-                // of being left in a state where the restored
-                // UIComponent instances are in the session instead
-                // of the TreeNode instances.  This is a problem
-                // for servers that persist session data since
-                // UIComponent instances are not serializable.
-                UIViewRoot viewRoot = null;
-                if (state[0] != null) {
-                    viewRoot = restoreTree(context,
-                                           renderKitId,
-                                           ((Object[]) state[0]).clone());
-                }
-                if (viewRoot != null && state[1] != null) {
-                    viewRoot.processRestoreState(context, state[1]);
-                }
-
-                result = viewRoot;
-            }
-        }
-
-        return result;
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static void captureChild(List<TreeNode> tree,
-                                     int parent,
-                                     UIComponent c) {
-
-        if (!c.isTransient()) {
-            TreeNode n = new TreeNode(parent, c);
-            int pos = tree.size();
-            tree.add(n);
-            captureRest(tree, pos, c);
-        }
-
-    }
-
-
-    private static void captureFacet(List<TreeNode> tree, 
-                                     int parent, 
-                                     String name,
-                                     UIComponent c) {
-
-        if (!c.isTransient()) {
-            FacetNode n = new FacetNode(parent, name, c);
-            int pos = tree.size();
-            tree.add(n);
-            captureRest(tree, pos, c);
-        }
-
-    }
-
-
-    private static void captureRest(List<TreeNode> tree, 
-                                    int pos, 
-                                    UIComponent c) {
-
-        // store children
-        int sz = c.getChildCount();
-        if (sz > 0) {
-            List<UIComponent> child = c.getChildren();
-            for (int i = 0; i < sz; i++) {
-                captureChild(tree, pos, child.get(i));
-            }
-        }
-
-        // store facets
-        sz = c.getFacetCount();
-        if (sz > 0) {
-            for (Entry<String, UIComponent> entry : c.getFacets().entrySet()) {
-                captureFacet(tree,
-                             pos,
-                             entry.getKey(),
-                             entry.getValue());
-            }
-        }
-
-    }
-
-
-    private UIComponent newInstance(TreeNode n)
-    throws FacesException {
-
-        try {
-            Class<?> t = ((classMap != null) ? classMap.get(n.componentType) : null);
-            if (t == null) {
-                t = Util.loadClass(n.componentType, n);
-                if (t != null && classMap != null) {
-                    classMap.put(n.componentType, t);
-                } else {
-                    if (!isDevelopmentMode) {
-                        throw new NullPointerException();
-                    }
-                }
-            }
-
-            assert (t != null);
-            UIComponent c = (UIComponent) t.newInstance();
-            c.setId(n.id);
-
-            return c;
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }   
-
-    private UIViewRoot restoreTree(FacesContext ctx,
-                                   String renderKitId,
-                                   Object[] tree)
-    throws FacesException {
-
-        UIComponent c;
-        FacetNode fn;
-        TreeNode tn;      
-        for (int i = 0; i < tree.length; i++) {
-            if (tree[i]instanceof FacetNode) {
-                fn = (FacetNode) tree[i];
-                c = newInstance(fn);
-                tree[i] = c;               
-                if (i != fn.parent) {
-                    ((UIComponent) tree[fn.parent]).getFacets()
-                          .put(fn.facetName, c);
-                }
-
-            } else {
-                tn = (TreeNode) tree[i];
-                c = newInstance(tn);
-                tree[i] = c;
-                if (i != tn.parent) {
-                    ((UIComponent) tree[tn.parent]).getChildren().add(c);
-                } else {
-                    assert(c instanceof UIViewRoot);
-                    UIViewRoot viewRoot = (UIViewRoot) c;
-                    ctx.setViewRoot(viewRoot);
-                    viewRoot.setRenderKitId(renderKitId);
-                }
-            }
-        }
-        return (UIViewRoot) tree[0];
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class TreeNode implements Externalizable {
-
-        private static final String NULL_ID = "";
-
-        public String componentType;
-        public String id;       
-
-        public int parent;
-
-        private static final long serialVersionUID = -835775352718473281L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-        public TreeNode() { }
-
-
-        public TreeNode(int parent, UIComponent c) {
-
-            this.parent = parent;
-            this.id = c.getId();
-            this.componentType = c.getClass().getName();
-
-        }
-
-
-    // --------------------------------------------- Methods From Externalizable
-
-        public void writeExternal(ObjectOutput out) throws IOException {
-
-            out.writeInt(this.parent);
-            out.writeUTF(this.componentType);
-            if (this.id != null) {
-                out.writeUTF(this.id);
-            } else {
-                out.writeUTF(NULL_ID);
-            }
-        }
-
-
-        public void readExternal(ObjectInput in)
-              throws IOException, ClassNotFoundException {
-
-            this.parent = in.readInt();
-            this.componentType = in.readUTF();
-            this.id = in.readUTF();
-            if (id.length() == 0) {
-                id = null;
-            }
-        }
-
-    } // END TreeNode
-
-
-    private static final class FacetNode extends TreeNode {
-
-
-        public String facetName;
-
-        private static final long serialVersionUID = -3777170310958005106L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-        @SuppressWarnings({"UnusedDeclaration"})
-        public FacetNode() { } // for serialization purposes
-
-        public FacetNode(int parent, 
-                         String name, 
-                         UIComponent c) {
-
-            super(parent, c);
-            this.facetName = name;
-
-        }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-        @Override
-        public void readExternal(ObjectInput in)
-              throws IOException, ClassNotFoundException {
-
-            super.readExternal(in);
-            this.facetName = in.readUTF();
-
-        }
-
-        @Override
-        public void writeExternal(ObjectOutput out) throws IOException {
-
-            super.writeExternal(out);
-            out.writeUTF(this.facetName);
-
-        }
-
-    } // END FacetNode
-
-
-} // END StateManagerImpl
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ViewHandlerImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/ViewHandlerImpl.java
deleted file mode 100644
index 8094e86..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ViewHandlerImpl.java
+++ /dev/null
@@ -1,1017 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-// ViewHandlerImpl.java
-
-package com.sun.faces.application;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.io.FastStringWriter;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.RequestStateManager;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.ResponseStateManager;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.jstl.core.Config;
-
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.net.MalformedURLException;
-
-/**
- * <p>
- * This is the default implementation for JSF 1.2.
- * </p>
- * <p>
- * While this class isn't used by the 2.0 runtime, it's kept for binary
- * compatibility with those that extend from this class directly.
- * </p>
- *
- * @deprecated Refer to {@link com.sun.faces.application.view.MultiViewHandler}
- */
-public class ViewHandlerImpl extends ViewHandler {
-
-    // Log instance for this class
-    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
-
-    private ApplicationAssociate associate;
-    private String[] configuredExtensions;
-    private int bufSize = -1;
-
-    public ViewHandlerImpl() {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE,"Created ViewHandler instance ");
-        }
-        WebConfiguration config = WebConfiguration.getInstance();
-        String defaultSuffixConfig =
-              config.getOptionValue(WebConfiguration.WebContextInitParameter.DefaultSuffix);
-        configuredExtensions = Util.split(defaultSuffixConfig, " ");
-    }
-    
-
-    /**
-     * Do not call the default implementation of {@link ViewHandler#initView(javax.faces.context.FacesContext)}
-     * if the {@link javax.faces.context.ExternalContext#getRequestCharacterEncoding()} returns a
-     * <code>non-null</code> result.
-     *
-     * @see ViewHandler#initView(javax.faces.context.FacesContext)
-     */
-    @Override
-    public void initView(FacesContext context) throws FacesException {
-
-        if (context.getExternalContext().getRequestCharacterEncoding() == null) {
-            super.initView(context);
-        }
-        
-    }
-
-
-    public void renderView(FacesContext context,
-            UIViewRoot viewToRender) throws IOException,
-            FacesException {
-
-        // suppress rendering if "rendered" property on the component is
-        // false
-        if (!viewToRender.isRendered()) {
-            return;
-        }
-
-        ExternalContext extContext = context.getExternalContext();
-        ServletRequest request = (ServletRequest) extContext.getRequest();
-        ServletResponse response = (ServletResponse) extContext.getResponse();
-
-        try {
-            if (executePageToBuildView(context, viewToRender)) {
-                response.flushBuffer();
-                ApplicationAssociate associate = getAssociate(context);
-                if (associate != null) {
-                    associate.responseRendered();
-                }
-                return;
-            }
-        } catch (IOException e) {
-            throw new FacesException(e);
-        }
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "Completed building view for : \n" +
-                    viewToRender.getViewId());
-        }
-
-        // set up the ResponseWriter
-
-        RenderKitFactory renderFactory = (RenderKitFactory)
-        FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit =
-                renderFactory.getRenderKit(context, viewToRender.getRenderKitId());
-
-        ResponseWriter oldWriter = context.getResponseWriter();
-
-        if (bufSize == -1) {
-            WebConfiguration webConfig =
-                  WebConfiguration
-                        .getInstance(context.getExternalContext());
-            try {
-                bufSize = Integer
-                      .parseInt(webConfig.getOptionValue(
-                            WebContextInitParameter.ResponseBufferSize));
-            } catch (NumberFormatException nfe) {
-                bufSize = Integer
-                      .parseInt(WebContextInitParameter.ResponseBufferSize.getDefaultValue());
-            }
-        }
-
-
-        WriteBehindStateWriter stateWriter =
-              new WriteBehindStateWriter(response.getWriter(),
-                                         context,
-                                         bufSize);
-        ResponseWriter newWriter;
-        if (null != oldWriter) {
-            newWriter = oldWriter.cloneWithWriter(stateWriter);
-        } else {
-            newWriter = renderKit.createResponseWriter(stateWriter,
-                                                       null,
-                                                       request.getCharacterEncoding());
-        }
-        context.setResponseWriter(newWriter);
-
-        newWriter.startDocument();
-
-        doRenderView(context, viewToRender);
-
-        newWriter.endDocument();
-
-        // replace markers in the body content and write it to response.
-
-        // flush directly to the response
-        if (stateWriter.stateWritten()) {
-            stateWriter.flushToWriter();
-        }
-
-        // clear the ThreadLocal reference.
-        stateWriter.release();
-
-        if (null != oldWriter) {
-            context.setResponseWriter(oldWriter);
-        }
-
-        // write any AFTER_VIEW_CONTENT to the response
-        // side effect: AFTER_VIEW_CONTENT removed
-        ViewHandlerResponseWrapper wrapper = (ViewHandlerResponseWrapper)
-              RequestStateManager.remove(context, RequestStateManager.AFTER_VIEW_CONTENT);
-        if (null != wrapper) {
-            wrapper.flushToWriter(response.getWriter(),
-                    response.getCharacterEncoding());
-        }
-
-        response.flushBuffer();
-
-    }
-
-    /**
-     * <p>This is a separate method to account for handling the content
-     * after the view tag.</p>
-     *
-     * <p>Create a new ResponseWriter around this response's Writer.
-     * Set it into the FacesContext, saving the old one aside.</p>
-     *
-     * <p>call encodeBegin(), encodeChildren(), encodeEnd() on the
-     * argument <code>UIViewRoot</code>.</p>
-     *
-     * <p>Restore the old ResponseWriter into the FacesContext.</p>
-     *
-     * <p>Write out the after view content to the response's writer.</p>
-     *
-     * <p>Flush the response buffer, and remove the after view content
-     * from the request scope.</p>
-     *
-     * @param context the <code>FacesContext</code> for the current request
-     * @param viewToRender the view to render
-     * @throws IOException if an error occurs rendering the view to the client
-     * @throws FacesException if some error occurs within the framework
-     *  processing
-     */
-
-    private void doRenderView(FacesContext context,
-                              UIViewRoot viewToRender)
-    throws IOException, FacesException {
-
-        ApplicationAssociate associate = getAssociate(context);
-
-        if (null != associate) {
-            associate.responseRendered();
-        }
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "About to render view " + viewToRender.getViewId());
-        }
-
-        viewToRender.encodeAll(context);
-    }
-
-
-    public UIViewRoot restoreView(FacesContext context, String viewId) {
-        if (context == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-
-        ExternalContext extContext = context.getExternalContext();
-
-        String mapping = Util.getFacesMapping(context);
-        UIViewRoot viewRoot = null;
-
-        if (mapping != null) {
-            if (!Util.isPrefixMapped(mapping)) {
-                viewId = convertViewId(context, viewId);
-            } else {
-                viewId = normalizeRequestURI(viewId, mapping);
-            }
-        }
-
-        // maping could be null if a non-faces request triggered
-        // this response.
-        if (extContext.getRequestPathInfo() == null && mapping != null &&
-            Util.isPrefixMapped(mapping)) {
-            // this was probably an initial request
-            // send them off to the root of the web application
-            try {
-                context.responseComplete();
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE, "Response Complete for" + viewId);
-                }
-                extContext.redirect(extContext.getRequestContextPath());
-            } catch (IOException ioe) {
-                throw new FacesException(ioe);
-            }
-        } else {
-            // this is necessary to allow decorated impls.
-            ViewHandler outerViewHandler =
-                    context.getApplication().getViewHandler();
-            String renderKitId =
-                    outerViewHandler.calculateRenderKitId(context);
-            viewRoot = Util.getStateManager(context).restoreView(context,
-                                                                 viewId,
-                                                                 renderKitId);
-        }
-
-        return viewRoot;
-    }
-
-
-    public UIViewRoot createView(FacesContext context, String viewId) {
-        if (context == null) {
-            String message = MessageUtils.getExceptionMessageString
-                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-
-        UIViewRoot result = (UIViewRoot)
-                context.getApplication().createComponent(UIViewRoot.COMPONENT_TYPE);
-
-        if (viewId != null) {
-            String mapping = Util.getFacesMapping(context);
-
-            if (mapping != null) {
-                if (!Util.isPrefixMapped(mapping)) {
-                   viewId = convertViewId(context, viewId);
-                } else {
-                    viewId = normalizeRequestURI(viewId, mapping);
-                    if (!Util.isPortletRequest(context) && viewId.equals(mapping)) {
-                        // The request was to the FacesServlet only - no
-                        // path info
-                        // on some containers this causes a recursion in the
-                        // RequestDispatcher and the request appears to hang.
-                        // If this is detected, return status 404
-                        send404Error(context);
-                    }
-                }
-            }
-
-            result.setViewId(viewId);
-        }
-
-        Locale locale = null;
-        String renderKitId = null;
-
-        // use the locale from the previous view if is was one which will be
-        // the case if this is called from NavigationHandler. There wouldn't be
-        // one for the initial case.
-        if (context.getViewRoot() != null) {
-            locale = context.getViewRoot().getLocale();
-            renderKitId = context.getViewRoot().getRenderKitId();
-        }
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "Created new view for " + viewId);
-        }
-        // PENDING(): not sure if we should set the RenderKitId here.
-        // The UIViewRoot ctor sets the renderKitId to the default
-        // one.
-        // if there was no locale from the previous view, calculate the locale
-        // for this view.
-        if (locale == null) {
-            locale =
-                context.getApplication().getViewHandler().calculateLocale(
-                    context);
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Locale for this view as determined by calculateLocale "
-                            + locale.toString());
-            }
-        } else {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Using locale from previous view "
-                            + locale.toString());
-            }
-        }
-
-        if (renderKitId == null) {
-            renderKitId =
-                context.getApplication().getViewHandler().calculateRenderKitId(
-                    context);
-           if (logger.isLoggable(Level.FINE)) {
-               logger.fine(
-               "RenderKitId for this view as determined by calculateRenderKitId "
-               + renderKitId);
-            }
-        } else {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Using renderKitId from previous view "
-                            + renderKitId);
-            }
-        }
-
-        result.setLocale(locale);
-        result.setRenderKitId(renderKitId);
-
-        return result;
-    }
-
-    /**
-     * Execute the target view.  If the HTTP status code range is
-     * not 2xx, then return true to indicate the response should be
-     * immediately flushed by the caller so that conditions such as 404
-     * are properly handled.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param viewToExecute the view to build
-     * @return <code>true</code> if the response should be immediately flushed
-     *  to the client, otherwise <code>false</code>
-     * @throws IOException if an error occurs executing the page
-     */
-    private boolean executePageToBuildView(FacesContext context,
-                                        UIViewRoot viewToExecute)
-    throws IOException {
-
-        if (null == context) {
-            String message = MessageUtils.getExceptionMessageString
-                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-        if (null == viewToExecute) {
-            String message = MessageUtils.getExceptionMessageString
-                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "viewToExecute");
-            throw new NullPointerException(message);
-        }
-
-        ExternalContext extContext = context.getExternalContext();
-
-        if ("/*".equals(RequestStateManager.get(context, RequestStateManager.INVOCATION_PATH))) {
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.FACES_SERVLET_MAPPING_INCORRECT_ID));
-        }
-
-        String requestURI = viewToExecute.getViewId();
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("About to execute view " + requestURI);
-        }
-
-        // update the JSTL locale attribute in request scope so that JSTL
-        // picks up the locale from viewRoot. This attribute must be updated
-        // before the JSTL setBundle tag is called because that is when the
-        // new LocalizationContext object is created based on the locale.
-        if (extContext.getRequest() instanceof ServletRequest) {
-            Config.set((ServletRequest)
-            extContext.getRequest(),
-                       Config.FMT_LOCALE, context.getViewRoot().getLocale());
-        }
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("Before dispacthMessage to viewId " + requestURI);
-        }
-
-        // save the original response
-        Object originalResponse = extContext.getResponse();
-
-        // replace the response with our wrapper
-        ViewHandlerResponseWrapper wrapped = getWrapper(extContext);
-        extContext.setResponse(wrapped);
-
-        // build the view by executing the page
-        extContext.dispatch(requestURI);
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("After dispacthMessage to viewId " + requestURI);
-        }
-
-        // replace the original response
-        extContext.setResponse(originalResponse);
-
-        // Follow the JSTL 1.2 spec, section 7.4,
-        // on handling status codes on a forward
-        if (wrapped.getStatus() < 200 || wrapped.getStatus() > 299) {
-            // flush the contents of the wrapper to the response
-            // this is necessary as the user may be using a custom
-            // error page - this content should be propagated
-            wrapped.flushContentToWrappedResponse();
-            return true;
-        }
-
-        // Put the AFTER_VIEW_CONTENT into request scope
-        // temporarily
-        RequestStateManager.set(context,
-                                RequestStateManager.AFTER_VIEW_CONTENT,
-                                wrapped);
-
-        return false;
-
-    }
-
-
-    public Locale calculateLocale(FacesContext context) {
-
-        if (context == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-
-        Locale result = null;
-        // determine the locales that are acceptable to the client based on the
-        // Accept-Language header and the find the best match among the
-        // supported locales specified by the client.
-        Iterator<Locale> locales = context.getExternalContext().getRequestLocales();
-        while (locales.hasNext()) {
-            Locale perf = locales.next();
-            result = findMatch(context, perf);
-            if (result != null) {
-                break;
-            }
-        }
-        // no match is found.
-        if (result == null) {
-            if (context.getApplication().getDefaultLocale() == null) {
-                result = Locale.getDefault();
-            } else {
-                result = context.getApplication().getDefaultLocale();
-            }
-        }
-        return result;
-    }
-
-
-    public String calculateRenderKitId(FacesContext context) {
-
-        if (context == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-
-        Map<String,String> requestParamMap = context.getExternalContext()
-            .getRequestParameterMap();
-        String result = requestParamMap.get(
-            ResponseStateManager.RENDER_KIT_ID_PARAM);
-
-        if (result == null) {
-            if (null ==
-                (result = context.getApplication().getDefaultRenderKitId())) {
-                result = RenderKitFactory.HTML_BASIC_RENDER_KIT;
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * Attempts to find a matching locale based on <code>pref</code> and
-     * list of supported locales, using the matching algorithm
-     * as described in JSTL 8.3.2.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param pref the preferred locale
-     * @return the Locale based on pref and the matching alogritm specified
-     *  in JSTL 8.3.2
-     */
-    protected Locale findMatch(FacesContext context, Locale pref) {
-        Locale result = null;
-        Iterator<Locale> it = context.getApplication().getSupportedLocales();
-        while (it.hasNext()) {
-            Locale supportedLocale = it.next();
-
-            if (pref.equals(supportedLocale)) {
-                // exact match
-                result = supportedLocale;
-                break;
-            } else {
-                // Make sure the preferred locale doesn't have country
-                // set, when doing a language match, For ex., if the
-                // preferred locale is "en-US", if one of supported
-                // locales is "en-UK", even though its language matches
-                // that of the preferred locale, we must ignore it.
-                if (pref.getLanguage().equals(supportedLocale.getLanguage()) &&
-                     supportedLocale.getCountry().length() == 0) {
-                    result = supportedLocale;
-                }
-            }
-        }
-        // if it's not in the supported locales,
-        if (null == result) {
-            Locale defaultLocale = context.getApplication().getDefaultLocale();
-            if (defaultLocale != null) {
-                if ( pref.equals(defaultLocale)) {
-                    // exact match
-                    result = defaultLocale;
-                } else {
-                    // Make sure the preferred locale doesn't have country
-                    // set, when doing a language match, For ex., if the
-                    // preferred locale is "en-US", if one of supported
-                    // locales is "en-UK", even though its language matches
-                    // that of the preferred locale, we must ignore it.
-                    if (pref.getLanguage().equals(defaultLocale.getLanguage()) &&
-                         defaultLocale.getCountry().length() == 0) {
-                        result = defaultLocale;
-                    }
-                }
-            }
-        }
-
-        return result;
-    }
-
-
-    public void writeState(FacesContext context) throws IOException {
-        if (context == null) {
-           String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("Begin writing marker for viewId " +
-                        context.getViewRoot().getViewId());
-        }
-
-        WriteBehindStateWriter writer = WriteBehindStateWriter.getCurrentInstance();
-        if (writer != null) {
-            writer.writingState();
-        }
-        context.getResponseWriter().write(RIConstants.SAVESTATE_FIELD_MARKER);
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("End writing marker for viewId " +
-                        context.getViewRoot().getViewId());
-        }
-
-    }
-
-
-    public String getActionURL(FacesContext context, String viewId) {
-
-        if (context == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-        if (viewId == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "viewId");
-            throw new NullPointerException(message);
-        }
-
-        if (viewId.charAt(0) != '/') {
-            String message =
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_VIEW_ID_ID,
-                        viewId);
-            if (logger.isLoggable(Level.SEVERE)) {
-                logger.log(Level.SEVERE, "jsf.illegal_view_id_error", viewId);
-            }
-        throw new IllegalArgumentException(message);
-        }
-
-        // Acquire the context path, which we will prefix on all results
-        ExternalContext extContext = context.getExternalContext();
-        String contextPath = extContext.getRequestContextPath();
-
-        // Acquire the mapping used to execute this request (if any)
-        String mapping = Util.getFacesMapping(context);
-
-        // If no mapping can be identified, just return a server-relative path
-        if (mapping == null) {
-            return (contextPath + viewId);
-        }
-
-        // Deal with prefix mapping
-        if (Util.isPrefixMapped(mapping)) {
-            if (mapping.equals("/*")) {
-                return (contextPath + viewId);
-            } else {
-                return (contextPath + mapping + viewId);
-            }
-        }
-
-        // Deal with extension mapping
-        for (String extension : configuredExtensions) {
-            if (viewId.endsWith(extension)) {
-                return (contextPath + viewId.substring(0, viewId.lastIndexOf('.')) + mapping);
-            }
-        }
-        return (contextPath + viewId);
-
-    }
-
-
-    public String getResourceURL(FacesContext context, String path) {
-        ExternalContext extContext = context.getExternalContext();
-        if (path.charAt(0) == '/' && !path.startsWith(extContext.getRequestContextPath())) {
-            return (extContext.getRequestContextPath() + path);
-        } else {
-            return path;
-        }
-
-    }
-
-
-    /**
-     * <p>if the specified mapping is a prefix mapping, and the provided
-     * request URI (usually the value from <code>ExternalContext.getRequestServletPath()</code>)
-     * starts with <code>mapping + '/'</code>, prune the mapping from the
-     * URI and return it, otherwise, return the original URI.
-     * @param uri the servlet request path
-     * @param mapping the FacesServlet mapping used for this request
-     * @return the URI without additional FacesServlet mappings
-     * @since 1.2
-     */
-    private String normalizeRequestURI(String uri, String mapping) {
-
-        if (mapping == null || !Util.isPrefixMapped(mapping)) {
-            return uri;
-        } else {
-            int length = mapping.length() + 1;
-            StringBuilder builder = new StringBuilder(length);
-            builder.append(mapping).append('/');
-            String mappingMod = builder.toString();
-            boolean logged = false;
-            while (uri.startsWith(mappingMod)) {
-                if (!logged && logger.isLoggable(Level.WARNING)) {
-                    logged = true;
-                    logger.log(Level.WARNING,
-                               "jsf.viewhandler.requestpath.recursion",
-                               new Object[] {uri, mapping});
-                }
-                uri = uri.substring(length - 1);
-            }
-            return uri;
-        }
-    }
-
-    private void send404Error(FacesContext context) {
-        HttpServletResponse response = (HttpServletResponse)
-             context.getExternalContext().getResponse();
-        try {
-            context.responseComplete();
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-        } catch (IOException ioe) {
-            throw new FacesException(ioe);
-        }
-    }
-
-
-    /**
-     * <p>Adjust the viewID per the requirements of {@link #renderView}.</p>
-     *
-     * @param context current {@link FacesContext}
-     * @param viewId  incoming view ID
-     * @return the view ID with an altered suffix mapping (if necessary)
-     */
-    private String convertViewId(FacesContext context, String viewId) {
-
-        // if the viewId doesn't already use the above suffix,
-        // replace or append.
-        StringBuilder buffer = new StringBuilder(viewId);
-        for (String ext : configuredExtensions) {
-            if (viewId.endsWith(ext)) {
-                return viewId;
-            }
-            int extIdx = viewId.lastIndexOf('.');
-            if (extIdx != -1) {
-                buffer.replace(extIdx, viewId.length(), ext);
-            } else {
-                // no extension in the provided viewId, append the suffix
-                buffer.append(ext);
-            }
-            String convertedViewId = buffer.toString();
-            try {
-                if (context.getExternalContext().getResource(convertedViewId) != null) {
-                    return convertedViewId;
-                } else {
-                    // reset the buffer to check for the next extension
-                    buffer.setLength(0);
-                    buffer.append(viewId);
-                }
-            } catch (MalformedURLException e) {
-                if (logger.isLoggable(Level.SEVERE)) {
-                    logger.log(Level.SEVERE,
-                               e.toString(),
-                               e);
-                }
-            }
-        }
-
-        // unable to find any resource match that the default ViewHandler
-        // can deal with.  Return the viewId as it was passed.  There is
-        // probably another ViewHandler in the stack that will handle this.
-        return viewId;
-    }
-
-
-    private ApplicationAssociate getAssociate(FacesContext context) {
-        if (associate == null) {
-            associate = ApplicationAssociate.getInstance(context.getExternalContext());
-        }
-        return associate;
-    }
-
-
-    private static ViewHandlerResponseWrapper getWrapper(ExternalContext extContext) {
-        Object response = extContext.getResponse();
-        if (response instanceof HttpServletResponse) {
-            return new ViewHandlerResponseWrapper((HttpServletResponse) response);
-        }
-        throw new IllegalArgumentException();
-
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-    /**
-     * Thanks to the Facelets folks for some of the concepts incorporated
-     * into this class.
-     */
-    private static final class WriteBehindStateWriter extends Writer {
-        // length of the state marker
-        private static final int STATE_MARKER_LEN =
-              RIConstants.SAVESTATE_FIELD_MARKER.length();
-
-        private static final ThreadLocal<WriteBehindStateWriter> CUR_WRITER =
-             new ThreadLocal<WriteBehindStateWriter>();
-        private Writer out;
-        private Writer orig;
-        private FastStringWriter fWriter;
-        private boolean stateWritten;
-        private int bufSize;
-        private char[] buf;
-        private FacesContext context;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public WriteBehindStateWriter(Writer out, FacesContext context, int bufSize) {
-            this.out = out;
-            this.orig = out;
-            this.context = context;
-            this.bufSize = bufSize;
-            this.buf = new char[bufSize];
-            CUR_WRITER.set(this);
-        }
-
-
-        // ------------------------------------------------- Methods from Writer
-
-
-
-        public void write(int c) throws IOException {
-            out.write(c);
-        }
-
-
-        public void write(char cbuf[]) throws IOException {
-            out.write(cbuf);
-        }
-
-
-        public void write(String str) throws IOException {
-            out.write(str);
-        }
-
-
-        public void write(String str, int off, int len) throws IOException {
-            out.write(str, off, len);
-        }
-
-
-        public void write(char cbuf[], int off, int len) throws IOException {
-            out.write(cbuf, off, len);
-        }
-
-
-        public void flush() throws IOException {
-            // no-op
-        }
-
-
-        public void close() throws IOException {
-           // no-op
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public static WriteBehindStateWriter getCurrentInstance() {
-            return CUR_WRITER.get();
-        }
-
-
-        public void release() {
-            CUR_WRITER.remove();
-        }
-
-
-        public void writingState() {
-            if (!stateWritten) {
-                this.stateWritten = true;
-                out = fWriter = new FastStringWriter(1024);
-            }
-        }
-
-        public boolean stateWritten() {
-            return stateWritten;
-        }
-
-        /**
-         * <p> Write directly from our FastStringWriter to the provided
-         * writer.</p>
-         * @throws IOException if an error occurs
-         */
-        public void flushToWriter() throws IOException {
-            // Save the state to a new instance of StringWriter to
-            // avoid multiple serialization steps if the view contains
-            // multiple forms.
-            StateManager stateManager = Util.getStateManager(context);
-            ResponseWriter origWriter = context.getResponseWriter();
-            FastStringWriter state =
-                  new FastStringWriter((stateManager.isSavingStateInClient(
-                        context)) ? bufSize : 128);
-            context.setResponseWriter(origWriter.cloneWithWriter(state));
-            stateManager.writeState(context, stateManager.saveView(context));
-            context.setResponseWriter(origWriter);
-            StringBuilder builder = fWriter.getBuffer();
-            // begin writing...
-            int totalLen = builder.length();
-            StringBuilder stateBuilder = state.getBuffer();
-            int stateLen = stateBuilder.length();
-            int pos = 0;
-            int tildeIdx = getNextDelimiterIndex(builder, pos);
-            while (pos < totalLen) {
-                if (tildeIdx != -1) {
-                    if (tildeIdx > pos && (tildeIdx - pos) > bufSize) {
-                        // there's enough content before the first ~
-                        // to fill the entire buffer
-                        builder.getChars(pos, (pos + bufSize), buf, 0);
-                        orig.write(buf);
-                        pos += bufSize;
-                    } else {
-                        // write all content up to the first '~'
-                        builder.getChars(pos, tildeIdx, buf, 0);
-                        int len = (tildeIdx - pos);
-                        orig.write(buf, 0, len);
-                        // now check to see if the state saving string is
-                        // at the begining of pos, if so, write our
-                        // state out.
-                        if (builder.indexOf(
-                              RIConstants.SAVESTATE_FIELD_MARKER,
-                              pos) == tildeIdx) {
-                            // buf is effectively zero'd out at this point
-                            int statePos = 0;
-                            while (statePos < stateLen) {
-                                if ((stateLen - statePos) > bufSize) {
-                                    // enough state to fill the buffer
-                                    stateBuilder.getChars(statePos,
-                                                          (statePos + bufSize),
-                                                          buf,
-                                                          0);
-                                    orig.write(buf);
-                                    statePos += bufSize;
-                                } else {
-                                    int slen = (stateLen - statePos);
-                                    stateBuilder.getChars(statePos,
-                                                          stateLen,
-                                                          buf,
-                                                          0);
-                                    orig.write(buf, 0, slen);
-                                    statePos += slen;
-                                }
-
-                            }
-                             // push us past the last '~' at the end of the marker
-                            pos += (len + STATE_MARKER_LEN);
-                            tildeIdx = getNextDelimiterIndex(builder, pos);
-                        } else {
-                            pos = tildeIdx;
-                            tildeIdx = getNextDelimiterIndex(builder,
-                                                             tildeIdx + 1);
-
-                        }
-                    }
-                } else {
-                    // we've written all of the state field markers.
-                    // finish writing content
-                    if (totalLen - pos > bufSize) {
-                        // there's enough content to fill the buffer
-                        builder.getChars(pos, (pos + bufSize), buf, 0);
-                        orig.write(buf);
-                        pos += bufSize;
-                    } else {
-                        // we're near the end of the response
-                        builder.getChars(pos, totalLen, buf, 0);
-                        int len = (totalLen - pos);
-                        orig.write(buf, 0, len);
-                        pos += (len + 1);
-                    }
-                }
-            }
-
-            // all state has been written.  Have 'out' point to the
-            // response so that all subsequent writes will make it to the
-            // browser.
-            out = orig;
-        }
-
-        private static int getNextDelimiterIndex(StringBuilder builder,
-                                                 int offset) {
-            return builder.indexOf(RIConstants.SAVESTATE_FIELD_DELIMITER,
-                                   offset);
-        }
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ViewHandlerResponseWrapper.java b/jsf-ri/src/main/java/com/sun/faces/application/ViewHandlerResponseWrapper.java
deleted file mode 100644
index bca5d79..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/ViewHandlerResponseWrapper.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ViewHandlerResponseWrapper.java 
-
-package com.sun.faces.application;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Writer;
-
-
-/**
- * <p>This class is used by {@link javax.faces.application.ViewHandler#createView} to obtain the
- * text that exists after the <f:view> tag.</p>
- */
-
-public class ViewHandlerResponseWrapper extends HttpServletResponseWrapper {
-
-    private ByteArrayWebOutputStream basos;
-    private WebPrintWriter pw ;
-    private CharArrayWriter caw;
-    private int status = HttpServletResponse.SC_OK;
-
-
-    public ViewHandlerResponseWrapper(HttpServletResponse wrapped) {
-        super(wrapped);
-    }
-
-
-    @Override
-    public void sendError(int sc, String msg) throws IOException {
-        super.sendError(sc, msg);
-        status = sc;
-    }
-
-    @Override
-    public void sendError(int sc) throws IOException {
-        super.sendError(sc);
-        status = sc;
-    }
-
-    @Override
-    public void setStatus(int sc) {
-        super.setStatus(sc);
-        status = sc;
-    }
-
-    @Override
-    public void setStatus(int sc, String sm) {
-        super.setStatus(sc, sm);
-        status = sc;
-    }
-
-
-    public int getStatus() {
-        return status;
-    }
-
-    public boolean isBytes() {
-        return (null != basos);
-    }
-
-    public boolean isChars() {
-        return (null != caw);
-    }
-
-    public byte[] getBytes() {
-        byte[] result = null;
-        if (null != basos) {
-            result = basos.toByteArray();
-        }
-        return result;
-    }
-
-    public char[] getChars() {
-        char[] result = null;
-        if (null != caw) {
-            result = caw.toCharArray();
-        }
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        String result = "null";
-        if (null != caw) {
-            result = caw.toString();
-        } else if (null != basos) {
-            result = basos.toString();
-        }
-        return result;
-    }
-
-    public void flushContentToWrappedResponse() throws IOException {
-        ServletResponse wrapped = this.getResponse();
-        if (null != caw) {
-            pw.flush();
-            caw.writeTo(wrapped.getWriter());
-            caw.reset();
-        } else if (null != basos) {
-            try {
-                basos.writeTo(wrapped.getWriter(),
-                              wrapped.getCharacterEncoding());
-            } catch (IllegalStateException ise) {
-                basos.writeTo(wrapped.getOutputStream());
-            }           
-            basos.resetByteArray();
-        }
-
-    }
-    
-    public void flushToWriter(Writer writer, String encoding) throws IOException {
-        if (null != caw) {
-            pw.flush();
-            caw.writeTo(writer);
-            caw.reset();
-        } else if (null != basos) {
-            basos.writeTo(writer, encoding);
-            basos.resetByteArray();
-        }
-        writer.flush();
-    }
-
-    public void resetBuffers() throws IOException {
-        if (null != caw) {
-            caw.reset();
-        } else if (null != basos) {
-            basos.resetByteArray();
-        }
-    }
-
-    @Override
-    public ServletOutputStream getOutputStream() throws IOException {
-        if (pw != null && (!pw.isComitted() && !isCommitted())) {
-            throw new IllegalStateException();
-        } else if (pw != null && (pw.isComitted() || isCommitted())) {
-            return ByteArrayWebOutputStream.NOOP_STREAM;
-        }
-        if (null == basos) {
-            basos = new ByteArrayWebOutputStream();
-        }
-        return basos;
-    }
-
-    @Override
-    public PrintWriter getWriter() throws IOException {
-        if (basos != null && (!basos.isCommitted() && !isCommitted())) {
-            throw new IllegalStateException();
-        } else if (basos != null && (basos.isCommitted() || isCommitted())) {
-            return new WebPrintWriter(WebPrintWriter.NOOP_WRITER);
-        }
-        if (null == pw) {
-            caw = new CharArrayWriter(1024);
-            pw = new WebPrintWriter(caw);
-        }
-
-        return pw;
-    }
-
-
-} // end of class ViewHandlerResponseWrapper
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/WebPrintWriter.java b/jsf-ri/src/main/java/com/sun/faces/application/WebPrintWriter.java
deleted file mode 100644
index ba17d94..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/WebPrintWriter.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Writer;
-
-/**
- * A simple PrintWriter implementation to allow us to query
- * whether or not the writer has been flushed or closed.  This is necessary
- * to better mimic the actual Servlet response.
- */
-public class WebPrintWriter extends PrintWriter {
-
-    public static final Writer NOOP_WRITER = new NoOpWriter();
-    private boolean committed;
-
-    public WebPrintWriter(Writer delegate) {
-        super(delegate);
-    }
-
-    @Override
-    public void close() {
-        committed = true;
-    }
-
-    @Override
-    public void flush() {
-        committed = true;
-    }
-
-    public boolean isComitted() {
-        return committed;
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class NoOpWriter extends Writer {
-
-        public NoOpWriter() {}
-
-        public void write(char cbuf[], int off, int len) throws IOException {
-            // no-op
-        }
-
-        public void flush() throws IOException {
-            // no-op
-        }
-
-        public void close() throws IOException {
-            // no-op
-        }
-
-        protected NoOpWriter(Object lock) {
-            // no-op
-        }
-
-        @Override
-        public void write(int c) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void write(char cbuf[]) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void write(String str) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public void write(String str, int off, int len) throws IOException {
-            // no-op
-        }
-
-        @Override
-        public Writer append(CharSequence csq) throws IOException {
-            return this;
-        }
-
-        @Override
-        public Writer append(CharSequence csq, int start, int end)
-        throws IOException {
-            return this;
-        }
-
-        @Override
-        public Writer append(char c) throws IOException {
-            return this;
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/WebappLifecycleListener.java b/jsf-ri/src/main/java/com/sun/faces/application/WebappLifecycleListener.java
deleted file mode 100644
index a0b7ce9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/WebappLifecycleListener.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.io.PrintWriter;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.event.AbortProcessingException;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextAttributeEvent;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletRequestAttributeEvent;
-import javax.servlet.ServletRequestEvent;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionEvent;
-
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.io.FastStringWriter;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.util.FacesLogger;
-import java.util.Map;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.PreDestroyViewMapEvent;
-import javax.faces.event.ViewMapListener;
-
-/**
- * <p>Central location for web application lifecycle events.<p>  
- * <p>The main purpose of this class is detect when we
- * should be invoking methods marked with the
- * <code>@PreDestroy</code> annotation.</p>
- */
-public class WebappLifecycleListener implements ViewMapListener {
-
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    
-    private ServletContext servletContext;
-    private ApplicationAssociate applicationAssociate;
-    private List<HttpSession> activeSessions;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public WebappLifecycleListener() { }
-
-    public WebappLifecycleListener(ServletContext servletContext) {
-
-        this.servletContext = servletContext;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-    /**
-     * The request is about to go out of scope of the web application.
-     *
-     * @param event the notification event
-     */
-    public void requestDestroyed(ServletRequestEvent event) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        try {
-            ServletRequest request = event.getServletRequest();
-            for (Enumeration e = request.getAttributeNames(); e.hasMoreElements();) {
-                String beanName = (String) e.nextElement();
-                handleAttributeEvent(beanName,
-                        request.getAttribute(beanName),
-                        ELUtils.Scope.REQUEST);
-            }
-            syncSessionScopedBeans(request);
-        } catch (Throwable t) {
-            ExceptionQueuedEventContext eventContext =
-                    new ExceptionQueuedEventContext(context, t);
-            context.getApplication().publishEvent(context,
-                    ExceptionQueuedEvent.class, eventContext);
-            context.getExceptionHandler().handle();
-        }
-        finally {
-            if (null != context) {
-                context.release();
-            }
-            ApplicationAssociate.setCurrentInstance(null);
-        }
-    }
-
-    /**
-     * The request is about to come into scope of the web application.
-     *
-     * @param event the notification event
-     */
-    public void requestInitialized(ServletRequestEvent event) {
-        ApplicationAssociate.setCurrentInstance(getAssociate());
-    }
-
-    public boolean isListenerForSource(Object component) {
-        return (component instanceof UIViewRoot);
-    }
-
-    public void processEvent(SystemEvent event)
-    throws AbortProcessingException {
-        if (event instanceof PreDestroyViewMapEvent) {
-            Map<String, Object> viewMap =
-                  ((UIViewRoot) event.getSource()).getViewMap(false);
-            if (viewMap != null && viewMap.size() != 0) {
-                for (Map.Entry<String, Object> cur : viewMap.entrySet()) {
-                    handleAttributeEvent(cur.getKey(),
-                                         cur.getValue(),
-                                         ELUtils.Scope.VIEW);
-                }
-            }
-        }
-    }
-
-    /**
-     * Notfication that a session has been created.
-     * @param event the notification event
-     */
-    public void sessionCreated(HttpSessionEvent event) {
-        ApplicationAssociate associate = getAssociate();
-        // PENDING this should only create a new list if in dev mode
-         if (associate != null && associate.isDevModeEnabled()) {
-            if (activeSessions == null) {
-                activeSessions = new ArrayList<HttpSession>();
-            }
-            activeSessions.add(event.getSession());
-        }
-    }
-
-
-
-    /**
-     * Notification that a session is about to be invalidated.
-     *
-     * @param event the notification event
-     */
-    public void sessionDestroyed(HttpSessionEvent event) {        
-        HttpSession session = event.getSession();
-        if (activeSessions != null) {
-            activeSessions.remove(event.getSession());
-        }
-        for (Enumeration e = session.getAttributeNames(); e.hasMoreElements(); ) {
-            String beanName = (String)e.nextElement();
-            handleAttributeEvent(beanName, 
-                                 session.getAttribute(beanName), 
-                                 ELUtils.Scope.SESSION);
-        }
-    }
-
-    /**
-     * Notification that an existing attribute has been removed from the
-     * servlet request. Called after the attribute is removed.
-     * @param event the notification event
-     */
-    public void attributeRemoved(ServletRequestAttributeEvent event) {
-        handleAttributeEvent(event.getName(),
-                             event.getValue(),
-                             ELUtils.Scope.REQUEST);
-    }
-
-    /**
-     * Notification that an attribute was replaced on the
-     * servlet request. Called after the attribute is replaced.
-     *
-     * @param event the notification event
-     */
-    public void attributeReplaced(ServletRequestAttributeEvent event) {
-        String attrName = event.getName();
-        Object newValue = event.getServletRequest().getAttribute(attrName);
-
-        // perhaps a bit paranoid, but since the javadocs are a bit vague,
-        // only handle the event if oldValue and newValue are not the
-        // exact same object
-        //noinspection ObjectEquality
-        if (event.getValue() != newValue) {
-            handleAttributeEvent(attrName,
-                                 event.getValue(),
-                                 ELUtils.Scope.REQUEST);
-        }
-    }
-    
-
-    /**
-     * Notification that an attribute has been removed from a session.
-     * Called after the attribute is removed.
-     *
-     * @param event the nofication event
-     */
-    public void attributeRemoved(HttpSessionBindingEvent event) {
-        handleAttributeEvent(event.getName(),
-                             event.getValue(),
-                             ELUtils.Scope.SESSION);
-    }
-
-    /**
-     * Notification that an attribute has been replaced in a session.
-     * Called after the attribute is replaced.
-     *
-     * @param event the notification event
-     */
-    public void attributeReplaced(HttpSessionBindingEvent event) {
-        HttpSession session = event.getSession();
-        String attrName = event.getName();
-        Object newValue = session.getAttribute(attrName);
-
-        // perhaps a bit paranoid, but since the javadocs are a bit vague,
-        // only handle the event if oldValue and newValue are not the
-        // exact same object
-        //noinspection ObjectEquality
-        if (event.getValue() != newValue) {
-            handleAttributeEvent(attrName,
-                                 event.getValue(),
-                                 ELUtils.Scope.SESSION);
-        }
-
-    }
-
-
-    /**
-     * Notification that an existing attribute has been removed from the servlet context.
-     * Called after the attribute is removed.
-     *
-     * @param event the notification event
-     */
-    public void attributeRemoved(ServletContextAttributeEvent event) {
-        handleAttributeEvent(event.getName(),
-                             event.getValue(),
-                             ELUtils.Scope.APPLICATION);
-    }
-
-    /**
-     * Notification that an attribute on the servlet context has been replaced.
-     * Called after the attribute is replaced.
-     *
-     * @param event the notification event
-     */
-    public void attributeReplaced(ServletContextAttributeEvent event) {
-        ServletContext context = event.getServletContext();
-        String attrName = event.getName();
-        Object newValue = context.getAttribute(attrName);
-
-        // perhaps a bit paranoid, but since the javadocs are a bit vague,
-        // only handle the event if oldValue and newValue are not the
-        // exact same object
-        //noinspection ObjectEquality
-        if (event.getValue() != newValue) {
-            handleAttributeEvent(attrName,
-                                 event.getValue(),
-                                 ELUtils.Scope.APPLICATION);
-        }
-    }
-
-    private void handleAttributeEvent(String beanName,
-                                      Object bean,
-                                      ELUtils.Scope scope) {
-
-        ApplicationAssociate associate = getAssociate();
-        try {
-            if (associate != null) {
-                BeanManager beanManager = associate.getBeanManager();
-                if (beanManager != null && beanManager.isManaged(beanName)) {
-                    beanManager.destroy(beanName, bean);
-                }              
-            }
-        } catch (Exception e) {
-            String className = e.getClass().getName();
-            String message = e.getMessage();            
-            if (message == null) {
-                message = "";
-            }
-            if (LOGGER.isLoggable(Level.INFO)) {
-                LOGGER.log(Level.INFO,
-                           "jsf.config.listener.predestroy.error",
-                           new Object[]{
-                                 className,
-                                 beanName,
-                                 scope,
-                                 message});
-            }
-            if (LOGGER.isLoggable(Level.FINE)) {
-                FastStringWriter writer = new FastStringWriter(128);
-                e.printStackTrace(new PrintWriter(writer));
-                LOGGER.fine(writer.toString());
-            }
-        }
-
-    } // END handleAttributeEvent
-
-    /**
-     * Notification that the web application initialization
-     * process is starting.
-     * All ServletContextListeners are notified of context
-     * initialization before any filter or servlet in the web
-     * application is initialized.
-     *
-     * @param event the notification event
-     */
-    public void contextInitialized(ServletContextEvent event) {
-        if (this.servletContext == null) {
-            this.servletContext = event.getServletContext();
-        }
-    }
-
-    /**
-     * Notification that the servlet context is about to be shut down.
-     * All servlets and filters have been destroy()ed before any
-     * ServletContextListeners are notified of context
-     * destruction.
-     *
-     * @param event the nofication event
-     */
-    public void contextDestroyed(ServletContextEvent event) {
-        
-        for (Enumeration e = servletContext.getAttributeNames(); e.hasMoreElements(); ) {
-            String beanName = (String)e.nextElement();
-            handleAttributeEvent(beanName, 
-                                 servletContext.getAttribute(beanName), 
-                                 ELUtils.Scope.APPLICATION);
-        }
-        this.applicationAssociate = null;
-
-    }
-
-
-    public List<HttpSession> getActiveSessions() {
-        return new ArrayList<HttpSession>(activeSessions);
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private ApplicationAssociate getAssociate() {
-
-        if (applicationAssociate == null) {
-            applicationAssociate = ApplicationAssociate.getInstance(servletContext);
-        }
-
-        return applicationAssociate;
-    }
-
-
-    /**
-     * This method ensures that session scoped managed beans will be
-     * synchronized properly in a clustered environment.
-     *
-     * @param request the current <code>ServletRequest</code>
-     */
-    private void syncSessionScopedBeans(ServletRequest request) {
-
-        if (request instanceof HttpServletRequest) {
-            HttpSession session = ((HttpServletRequest) request).getSession(false);
-            if (session != null) {
-                ApplicationAssociate associate = getAssociate();
-                if (associate == null) {
-                    return;
-                }
-                BeanManager manager = associate.getBeanManager();
-                if (manager != null) {
-                    for (Enumeration e = session.getAttributeNames();
-                         e.hasMoreElements();) {
-                        String name = (String) e.nextElement();
-                        if (manager.isManaged(name)) {
-                            session
-                                  .setAttribute(name, session.getAttribute(name));
-                        }
-                    }
-                }
-            }
-        }
-
-    }
-
-} // END WebappLifecycleListener
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/AnnotationManager.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/AnnotationManager.java
deleted file mode 100644
index f3c3830..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/AnnotationManager.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Collection;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.component.behavior.ClientBehaviorBase;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.RenderKit;
-import javax.faces.render.Renderer;
-import javax.faces.validator.Validator;
-
-import com.sun.faces.util.FacesLogger;
-import javax.faces.event.SystemEvent;
-
-/**
- * This class represents the central point for annotation handling within a
- * web application.
- */
-public class AnnotationManager {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    private static final Scanner RESOURCE_DEPENDENCY_SCANNER = new ResourceDependencyScanner();
-    private static final Scanner LISTENER_FOR_SCANNER = new ListenerForScanner();
-
-    /**
-     * {@link Scanner} instances to be used against {@link Behavior} classes.
-     */
-    private static final Scanner[] BEHAVIOR_SCANNERS = {
-          RESOURCE_DEPENDENCY_SCANNER
-    };
-
-    /**
-     * {@link Scanner} instances to be used against {@link ClientBehaviorRenderer} classes.
-     */
-    private static final Scanner[] CLIENT_BEHAVIOR_RENDERER_SCANNERS = {
-          RESOURCE_DEPENDENCY_SCANNER
-    };
-
-    /**
-     * {@link Scanner} instances to be used against {@link UIComponent} classes.
-     */
-    private static final Scanner[] UICOMPONENT_SCANNERS = {
-          RESOURCE_DEPENDENCY_SCANNER,
-          LISTENER_FOR_SCANNER
-    };
-
-    /**
-     * {@link Scanner} instances to be used against {@link Validator} classes.
-     */
-    private static final Scanner[] VALIDATOR_SCANNERS = {
-          RESOURCE_DEPENDENCY_SCANNER
-    };
-
-    /**
-     * {@link Scanner} instances to be used against {@link Converter} classes.
-     */
-    private static final Scanner[] CONVERTER_SCANNERS = {
-          RESOURCE_DEPENDENCY_SCANNER
-    };
-
-    /**
-     * {@link Scanner} instances to be used against {@link Renderer} classes.
-     */
-    private static final Scanner[] RENDERER_SCANNERS = {
-          RESOURCE_DEPENDENCY_SCANNER,
-          LISTENER_FOR_SCANNER
-    };
-
-    private static final Scanner[] EVENTS_SCANNERS = {
-        RESOURCE_DEPENDENCY_SCANNER
-    };
-
-    /**
-     * Enum of the different processing targets and their associated
-     * {@link Scanner}s
-     */
-    private enum ProcessingTarget {
-        Behavior(BEHAVIOR_SCANNERS),
-        ClientBehaviorRenderer(CLIENT_BEHAVIOR_RENDERER_SCANNERS),
-        UIComponent(UICOMPONENT_SCANNERS),
-        Validator(VALIDATOR_SCANNERS),
-        Converter(CONVERTER_SCANNERS),
-        Renderer(RENDERER_SCANNERS),
-        SystemEvent(EVENTS_SCANNERS);
-
-
-        @SuppressWarnings({"NonSerializableFieldInSerializableClass"})
-        private Scanner[] scanners;
-        ProcessingTarget(Scanner[] scanners) {
-            this.scanners = scanners;
-        }
-
-    }
-
-    /**
-     * The backing cache for all annotation metadata.
-     */
-    private ConcurrentMap<Class<?>,Future<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>>> cache;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new AnnotationManager instance.
-     */
-    public AnnotationManager() {
-
-        cache = new ConcurrentHashMap<Class<?>,Future<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>>>(40, .75f, 32);
-
-    }
-
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>
-     * Apply the configuration metadata contained with in the <code>Collection</code>
-     * of annotated classes.
-     * </p>
-     *
-     * @param ctx FacesContext available during application initialization
-     * @param annotatedClasses <code>Collection</code> of class names known
-     *  to contain one or more Faces configuration annotations
-     */
-    public void applyConfigAnntations(FacesContext ctx,
-                                      Class<? extends Annotation> annotationType,
-                                      Set<? extends Class> annotatedClasses) {
-
-        if (annotatedClasses != null && !annotatedClasses.isEmpty()) {
-            ConfigAnnotationHandler handler =
-                  getConfigAnnotationHandlers().get(annotationType);
-            if (handler == null) {
-                throw new IllegalStateException("Internal Error: No ConfigAnnotationHandler for type: " + annotationType);
-            }
-            for (Class<?> clazz : annotatedClasses) {
-                handler.collect(clazz, clazz.getAnnotation(annotationType));
-            }
-            // metadata collected, now push the configuration to the system
-            handler.push(ctx);
-        }
-        
-    }
-
-    /**
-     * Apply annotations relevant to {@link javax.faces.component.behavior.Behavior} instances.
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @param b the target <code>Behavior</code> to process
-     */
-    public void applyBehaviorAnnotations(FacesContext ctx, Behavior b) {
-
-        applyAnnotations(ctx, b.getClass(), ProcessingTarget.Behavior, b);
-        if (b instanceof ClientBehaviorBase) {
-            ClientBehaviorBase clientBehavior = (ClientBehaviorBase) b;
-            String rendererType = clientBehavior.getRendererType();
-            RenderKit renderKit = ctx.getRenderKit();
-            if( null != rendererType && null != renderKit){
-                ClientBehaviorRenderer behaviorRenderer = renderKit.getClientBehaviorRenderer(rendererType);
-                if(null != behaviorRenderer){
-                    applyClientBehaviorRendererAnnotations(ctx, behaviorRenderer);
-                }
-            }
-        }
-
-    }
-
-    /**
-     * Apply annotations relevant to {@link javax.faces.render.ClientBehaviorRenderer} instances.
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @param b the target <code>ClientBehaviorRenderer</code> to process
-     */
-    public void applyClientBehaviorRendererAnnotations(FacesContext ctx, ClientBehaviorRenderer b) {
-
-        applyAnnotations(ctx, b.getClass(), ProcessingTarget.ClientBehaviorRenderer, b);
-
-    }
-    
-    /**
-     * Apply annotations relevant to {@link javax.faces.component.UIComponent} instances.
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @param c the target <code>UIComponent</code> to process
-     */
-    public void applyComponentAnnotations(FacesContext ctx, UIComponent c) {
-
-        applyAnnotations(ctx, c.getClass(), ProcessingTarget.UIComponent, c);
-
-    }
-
-
-    /**
-     * Apply annotations relevant to {@link javax.faces.validator.Validator} instances.
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @param v the target <code>Validator</code> to process
-     */
-    public void applyValidatorAnnotations(FacesContext ctx, Validator v) {
-
-        applyAnnotations(ctx, v.getClass(), ProcessingTarget.Validator, v);
-
-    }
-
-
-    /**
-     * Apply annotations relevant to {@link javax.faces.convert.Converter} instances.
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @param c the target <code>Converter</code> to process
-     */
-    public void applyConverterAnnotations(FacesContext ctx, Converter c) {
-
-        applyAnnotations(ctx, c.getClass(), ProcessingTarget.Converter, c);
-
-    }
-
-
-    /**
-     * Apply annotations relevent to {@link javax.faces.render.Renderer} instances.
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @param r the <code>Renderer</code> to process
-     * @param c the <code>UIComponent</code> instances that is associated with this
-     *  <code>Renderer</code>
-     */
-    public void applyRendererAnnotations(FacesContext ctx, Renderer r, UIComponent c) {
-
-        applyAnnotations(ctx, r.getClass(), ProcessingTarget.Renderer, r, c);
-
-    }
-
-    public void applySystemEventAnnotations(FacesContext ctx, SystemEvent e) {
-        applyAnnotations(ctx, e.getClass(), ProcessingTarget.SystemEvent, e);
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * @return a new <code>Map</code> which maps the types of annotations to
-     *  a specific <code>ConfigAnnotationHandler</code>.  Note that each invocation
-     *  of this method constructs a new <code>Map</code> with new
-     *  <code>ConfigAnnotationhandler</code> instances as they are not thread
-     *  safe.
-     */
-    private Map<Class<? extends Annotation>,ConfigAnnotationHandler> getConfigAnnotationHandlers() {
-
-        ConfigAnnotationHandler[] handlers = {
-              new ComponentConfigHandler(),
-              new ConverterConfigHandler(),
-              new ValidatorConfigHandler(),
-              new BehaviorConfigHandler(),
-              new RenderKitConfigHandler(),
-              new ManagedBeanConfigHandler(),
-              new NamedEventConfigHandler()
-        };
-        Map<Class<? extends Annotation>,ConfigAnnotationHandler> handlerMap =
-              new HashMap<Class<? extends Annotation>,ConfigAnnotationHandler>();
-        for (ConfigAnnotationHandler handler : handlers) {
-            Collection<Class<? extends Annotation>> handledClasses = handler.getHandledAnnotations();
-            for (Class<? extends Annotation> handled : handledClasses) {
-                handlerMap.put(handled, handler);
-            }
-        }
-
-        return handlerMap;
-
-    }
-    
-
-    /**
-     * Apply all annotations associated with <code>targetClass</code>
-     *
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @param targetClass class of the <code>processingTarget</code>
-     * @param processingTarget the type of component that is being processed
-     * @param params one or more parameters to be passed to each {@link RuntimeAnnotationHandler}
-     */
-    private void applyAnnotations(FacesContext ctx,
-                                  Class<?> targetClass,
-                                  ProcessingTarget processingTarget,
-                                  Object... params) {
-
-        Map<Class<? extends Annotation>, RuntimeAnnotationHandler> map = getHandlerMap(targetClass, processingTarget);
-        if (map != null && !map.isEmpty()) {
-            for (RuntimeAnnotationHandler handler : map.values()) {
-                handler.apply(ctx, params);
-            }
-        }
-
-    }
-
-
-    /**
-     * Helper method to look up cached annotation metadata.
-     * @param targetClass class of the <code>processingTarget</code>
-     * @param processingTarget the type of component being processed
-     * @return a Map keyed by Annotation class with an AnnotationHandler as the
-     *  value
-     */
-    private Map<Class<? extends Annotation>, RuntimeAnnotationHandler> getHandlerMap(Class<?> targetClass,
-                                                                              ProcessingTarget processingTarget) {
-
-        while (true) {
-            Future<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>> f =
-                  cache.get(targetClass);
-            if (f == null) {
-                ProcessAnnotationsTask t =
-                      new ProcessAnnotationsTask(targetClass, processingTarget.scanners);
-                FutureTask<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>> ft =
-                      new FutureTask<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>>(t);
-                f = cache.putIfAbsent(targetClass, ft);
-                if (f == null) {
-                    f = ft;
-                    ft.run();
-                }
-            }
-            try {
-                return f.get();
-            } catch (CancellationException ce) {
-                if (LOGGER.isLoggable(Level.FINEST)) {
-                    LOGGER.log(Level.FINEST,
-                               ce.toString(),
-                               ce);
-                }
-                cache.remove(targetClass);
-            } catch (InterruptedException ie) {
-                if (LOGGER.isLoggable(Level.FINEST)) {
-                    LOGGER.log(Level.FINEST,
-                               ie.toString(),
-                               ie);
-                }
-                cache.remove(targetClass);
-            } catch (ExecutionException ee) {
-                throw new FacesException(ee);
-            }
-        }
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * This <code>Callable</code> will leverage the provided <code>Scanner</code>s
-     * to build a mapping between a particular annotation type and an
-     * <code>AnnotationHandler</code> for that type.
-     */
-    private static final class ProcessAnnotationsTask
-          implements Callable<Map<Class<? extends Annotation>, RuntimeAnnotationHandler>> {
-
-        @SuppressWarnings({"unchecked"})
-        private static final Map<Class<? extends Annotation>, RuntimeAnnotationHandler> EMPTY =
-              Collections.EMPTY_MAP;
-        private Class<?> clazz;
-        private Scanner[] scanners;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-
-        public ProcessAnnotationsTask(Class<?> clazz, Scanner[] scanners) {
-
-            this.clazz = clazz;
-            this.scanners = scanners;
-
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public Map<Class<? extends Annotation>, RuntimeAnnotationHandler> call() throws Exception {
-
-            Map<Class<? extends Annotation>, RuntimeAnnotationHandler> map = null;
-            for (Scanner scanner : scanners) {
-                RuntimeAnnotationHandler handler = scanner.scan(clazz);
-                if (handler != null) {
-                    if (map == null) {
-                        map = new HashMap<Class<? extends Annotation>, RuntimeAnnotationHandler>(2, 1.0f);
-                    }
-                    map.put(scanner.getAnnotation(), handler);
-                }
-            }
-
-            return ((map != null) ? map : EMPTY);
-            
-        }
-
-    } // END ProcessAnnotationsTask
-
-
-
-
-
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/BehaviorConfigHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/BehaviorConfigHandler.java
deleted file mode 100644
index a66557c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/BehaviorConfigHandler.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-
-import javax.faces.application.Application;
-import javax.faces.component.behavior.FacesBehavior;
-import javax.faces.context.FacesContext;
-
-/**
- * <p>
- * <code>ConfigAnnotationHandler</code> for {@link FacesBehavior} annotated
- * classes.
- * </p>
- */
-public class BehaviorConfigHandler implements ConfigAnnotationHandler {
-
-    private static final Collection<Class<? extends Annotation>> HANDLES;
-    static {
-        Collection<Class<? extends Annotation>> handles =
-              new ArrayList<Class<? extends Annotation>>(1);
-        handles.add(FacesBehavior.class);
-        HANDLES = Collections.unmodifiableCollection(handles);
-    }
-
-    private Map<String,String> behaviors;
-
-
-    // ------------------------------------- Methods from ComponentConfigHandler
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
-     */
-    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
-
-        return HANDLES;
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
-     */
-    public void collect(Class<?> target, Annotation annotation) {
-
-        if (behaviors == null) {
-            behaviors = new HashMap<String,String>();
-        }
-        behaviors.put(((FacesBehavior) annotation).value(), target.getName());
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
-     */
-    public void push(FacesContext ctx) {
-
-        if (behaviors != null) {
-            Application app = ctx.getApplication();
-            for (Map.Entry<String,String> entry : behaviors.entrySet()) {
-                app.addBehavior(entry.getKey(), entry.getValue());
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ComponentConfigHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ComponentConfigHandler.java
deleted file mode 100644
index 6fb9fa0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ComponentConfigHandler.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.FacesComponent;
-import javax.faces.application.Application;
-
-/**
- * <p>
- * <code>ConfigAnnotationHandler</code> for {@link FacesComponent} annotated
- * classes.
- * </p>
- */
-public class ComponentConfigHandler implements ConfigAnnotationHandler {
-
-    private static final Collection<Class<? extends Annotation>> HANDLES;
-    static {
-        Collection<Class<? extends Annotation>> handles =
-              new ArrayList<Class<? extends Annotation>>(1);
-        handles.add(FacesComponent.class);
-        HANDLES = Collections.unmodifiableCollection(handles);
-    }
-
-    private Map<String,String> components;
-
-
-    // ------------------------------------- Methods from ComponentConfigHandler
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations() 
-     */
-    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
-
-        return HANDLES;
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
-     */
-    public void collect(Class<?> target, Annotation annotation) {
-
-        if (components == null) {
-            components = new HashMap<String,String>();
-        }
-        components.put(((FacesComponent) annotation).value(), target.getName());
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
-     */
-    public void push(FacesContext ctx) {
-
-        if (components != null) {
-            Application app = ctx.getApplication();
-            for (Map.Entry<String, String> entry : components.entrySet()) {
-                app.addComponent(entry.getKey(), entry.getValue());
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ConfigAnnotationHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ConfigAnnotationHandler.java
deleted file mode 100644
index edb7143..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ConfigAnnotationHandler.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-
-import javax.faces.context.FacesContext;
-
-/**
- * Implementations of the interface will be called during application
- * initialization to process any configuration annotations within the
- * web application.
- */
-public interface ConfigAnnotationHandler {
-
-    /**
-     * @return a <code>Collection</code> of annotations handled by this
-     *  ConfigAnnotationHandler implementation
-     */
-    public Collection<Class<? extends Annotation>> getHandledAnnotations();
-
-
-    /**
-     * <p>
-     * Collect metadata based on the provided <code>Class</code> and
-     * <code>Annotation</code> to be processed later by {@link #push(javax.faces.context.FacesContext)}.
-     * </p>
-     *
-     * <p>
-     * NOTE: This method may be called more than once.
-     * </p>
-     *
-     *
-     * @param target annotated class
-     * @param annotation <code>Annotation</code> to process
-     */
-    public void collect(Class<?> target, Annotation annotation);
-
-
-    /**
-     * <code>Push<code> the configuration based on the collected metadata
-     * to the current application.
-     */
-    public void push(FacesContext ctx);    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ConverterConfigHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ConverterConfigHandler.java
deleted file mode 100644
index 641d384..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ConverterConfigHandler.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-
-import javax.faces.context.FacesContext;
-import javax.faces.application.Application;
-import javax.faces.convert.FacesConverter;
-
-/**
- * <p>
- * <code>ConfigAnnotationHandler</code> for {@link FacesConverter} annotated
- * classes.
- * </p>
- */
-public class ConverterConfigHandler implements ConfigAnnotationHandler {
-
-    private static final Collection<Class<? extends Annotation>> HANDLES;
-    static {
-        Collection<Class<? extends Annotation>> handles =
-              new ArrayList<Class<? extends Annotation>>(1);
-        handles.add(FacesConverter.class);
-        HANDLES = Collections.unmodifiableCollection(handles);
-    }
-
-    private Map<Object,String> converters;
-
-
-    // ------------------------------------- Methods from ComponentConfigHandler
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
-     */
-    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
-
-        return HANDLES;
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
-     */
-    public void collect(Class<?> target, Annotation annotation) {
-
-        if (converters == null) {
-            converters = new HashMap<Object,String>();
-        }
-        Object key = null;
-        FacesConverter converterAnnotation = (FacesConverter) annotation;
-        if (0 == converterAnnotation.value().length()) {
-            key = converterAnnotation.forClass();
-        } else {
-            key = converterAnnotation.value();
-        }
-        converters.put(key, target.getName());
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
-     */
-    public void push(FacesContext ctx) {
-
-        if (converters != null) {
-            Application app = ctx.getApplication();
-            for (Map.Entry<Object, String> entry : converters.entrySet()) {
-                if (entry.getKey() instanceof Class) {
-                    app.addConverter((Class) entry.getKey(), entry.getValue());
-                } else {
-                    app.addConverter((String) entry.getKey(), entry.getValue());
-                }
-            }
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ListenerForHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ListenerForHandler.java
deleted file mode 100644
index 8c64af7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ListenerForHandler.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import javax.faces.application.Application;
-import javax.faces.event.ListenerFor;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.event.SystemEventListener;
-
-/**
- * {@link RuntimeAnnotationHandler} responsible for processing {@link ListenerFor} annotations.
- */
-class ListenerForHandler implements RuntimeAnnotationHandler {
-
-    private ListenerFor[] listenersFor;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ListenerForHandler(ListenerFor[] listenersFor) {
-
-        this.listenersFor = listenersFor;
-
-    }
-
-
-    // ----------------------------------- Methods from RuntimeAnnotationHandler
-
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    public void apply(FacesContext ctx, Object... params) {
-
-        Object listener;
-        UIComponent target;
-        if (params.length == 2) {
-            // handling @ListenerFor on a Renderer
-            listener = params[0];
-            target = (UIComponent) params[1];
-        } else {
-            // handling @ListenerFor on a UIComponent
-            listener = params[0];
-            target = (UIComponent) params[0];
-        }
-
-        if (listener instanceof ComponentSystemEventListener) {
-            for (int i = 0, len = listenersFor.length; i < len; i++) {
-                    target.subscribeToEvent(listenersFor[i].systemEventClass(),
-                                            (ComponentSystemEventListener) listener);
-            }
-        }
-	else if (listener instanceof SystemEventListener) {
-	    Class sourceClassValue = null;
-	    Application app = ctx.getApplication();
-            for (int i = 0, len = listenersFor.length; i < len; i++) {
-		sourceClassValue = listenersFor[i].sourceClass();
-		if (sourceClassValue == Void.class) {
-		    app.subscribeToEvent(listenersFor[i].systemEventClass(), 
-					 (SystemEventListener) listener); 
-                }
-                else {
-		    app.subscribeToEvent(listenersFor[i].systemEventClass(), 
-					 listenersFor[i].sourceClass(),
-					 (SystemEventListener) listener); 
-                    
-                }
-	    }
-	}
-
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ListenerForScanner.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ListenerForScanner.java
deleted file mode 100644
index c406105..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ListenerForScanner.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-
-import javax.faces.event.ListenerFor;
-import javax.faces.event.ListenersFor;
-
-import com.sun.faces.util.Util;
-
-/**
- * <code>Scanner</code> implementation responsible for {@link ListenerFor} annotations.
- */
-class ListenerForScanner implements Scanner {
-
-
-    // ---------------------------------------------------- Methods from Scanner
-
-
-    public Class<? extends Annotation> getAnnotation() {
-
-        return ListenerFor.class;
-
-    }
-
-
-    public RuntimeAnnotationHandler scan(Class<?> clazz) {
-
-        Util.notNull("clazz", clazz);
-
-        ListenerForHandler handler = null;
-        ListenerFor listenerFor = clazz.getAnnotation(ListenerFor.class);
-        if (listenerFor != null) {
-            handler = new ListenerForHandler(new ListenerFor[] { listenerFor });
-        } else {
-            ListenersFor listenersFor = clazz.getAnnotation(ListenersFor.class);
-            if (listenersFor != null) {
-                handler = new ListenerForHandler(listenersFor.value());
-            }
-        }
-
-        return handler;
-
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ManagedBeanConfigHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ManagedBeanConfigHandler.java
deleted file mode 100644
index 6bb5e20..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ManagedBeanConfigHandler.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.List;
-import java.util.LinkedHashMap;
-import java.util.Set;
-
-import javax.faces.bean.*;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.mgbean.ManagedBeanInfo;
-
-/**
- * <p>
- * <code>ConfigAnnotationHandler</code> for {@link ManagedBean} annotated
- * classes.
- * </p>
- */
-public class ManagedBeanConfigHandler implements ConfigAnnotationHandler {
-
-    private static final Class<?>[] SCOPES = {
-          RequestScoped.class,
-          ViewScoped.class,
-          SessionScoped.class,
-          ApplicationScoped.class,
-          NoneScoped.class,
-          CustomScoped.class
-    };
-
-    private static final Collection<Class<? extends Annotation>> HANDLES;
-    static {
-        Collection<Class<? extends Annotation>> handles =
-              new ArrayList<Class<? extends Annotation>>(2);
-        handles.add(ManagedBean.class);
-        HANDLES = Collections.unmodifiableCollection(handles);
-    }
-
-    private Map<Class<?>,Annotation> managedBeans;
-
-
-    // ------------------------------------ Methods from ConfigAnnotationHandler
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
-     */
-    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
-
-        return HANDLES;
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
-     */
-    public void collect(Class<?> target, Annotation annotation) {
-
-        if (managedBeans == null) {
-            managedBeans = new HashMap<Class<?>,Annotation>();
-        }
-        managedBeans.put(target, annotation);
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
-     */
-    public void push(FacesContext ctx) {
-
-        if (managedBeans != null) {
-            ApplicationAssociate associate =
-                  ApplicationAssociate.getInstance(ctx.getExternalContext());
-            if (associate != null) {
-                BeanManager manager = associate.getBeanManager();
-                for (Map.Entry<Class<?>,Annotation> entry : managedBeans.entrySet()) {
-                    process(manager, entry.getKey(), entry.getValue());
-                }
-            }
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void process(BeanManager manager,
-                         Class<?> annotatedClass,
-                         Annotation annotation) {
-
-            manager.register(getBeanInfo(annotatedClass,
-                                         (ManagedBean) annotation));
-    }
-
-
-    private ManagedBeanInfo getBeanInfo(Class<?> annotatedClass,
-                                        ManagedBean metadata) {
-
-        String name = getName(metadata, annotatedClass);
-        String scope = getScope(annotatedClass);
-        boolean eager = metadata.eager();
-        
-        Map<String,Field> annotatedFields = new LinkedHashMap<String,Field>();
-        //Map<String, Method> annotatedMethods = new LinkedHashMap<String,Method>();
-        collectAnnotatedFields(annotatedClass, annotatedFields);
-        //collectAnnotatedMethods(annotatedClass,
-        //                        annotatedMethods,
-        //                        annotatedFields.keySet());
-
-        List<ManagedBeanInfo.ManagedProperty> properties = null;
-
-        if (!annotatedFields.isEmpty()) {
-            properties = new ArrayList<ManagedBeanInfo.ManagedProperty>(annotatedFields.size());
-            for (Map.Entry<String,Field> entry : annotatedFields.entrySet()) {
-                Field f = entry.getValue();
-                ManagedProperty property = f.getAnnotation(ManagedProperty.class);
-                ManagedBeanInfo.ManagedProperty propertyInfo =
-                          new ManagedBeanInfo.ManagedProperty(entry.getKey(),
-                                                              f.getType().getName(),
-                                                              property.value(),
-                                                              null,
-                                                              null);
-                properties.add(propertyInfo);
-            }
-        }
-        /*
-        if (!annotatedMethods.isEmpty()) {
-            if (properties == null) {
-                properties = new ArrayList<ManagedBeanInfo.ManagedProperty>(annotatedMethods.size());
-                for (Map.Entry<String,Method> entry : annotatedMethods.entrySet()) {
-                    Method m = entry.getValue();
-                    ManagedProperty property = m.getAnnotation(ManagedProperty.class);
-                    String alias = property.name();
-                    if (alias != null && alias.length() == 0) {
-                        alias = null;
-                    }
-                    ManagedBeanInfo.ManagedProperty propertyInfo =
-                          new ManagedBeanInfo.ManagedProperty(alias,
-                                                              entry.getKey(),
-                                                              m.getParameterTypes()[0].getName(),
-                                                              property.value(),
-                                                              null,
-                                                              null);
-                    properties.add(propertyInfo);
-                }
-            }
-        }
-        */
-
-        return new ManagedBeanInfo(name,
-                                   annotatedClass.getName(),
-                                   scope,
-                                   eager,
-                                   null,
-                                   null,
-                                   properties,
-                                   null);
-
-    }
-
-
-    private void collectAnnotatedMethods(Class<?> baseClass,
-                                         Map<String,Method> annotatedMethods,
-                                         Set<String> annotatedFields) {
-
-        Method[] methods = baseClass.getDeclaredMethods();
-        for (Method method : methods) {
-            ManagedProperty property = method.getAnnotation(ManagedProperty.class);
-            if (property != null) {
-
-                if (!method.getName().startsWith("set")
-                    || method.getParameterTypes().length != 1) {
-                    continue;
-                }
-                StringBuilder sb =
-                      new StringBuilder(method.getName().substring(3));
-                char c = sb.charAt(0);
-                sb.deleteCharAt(0);
-                sb.insert(0, Character.toLowerCase(c));
-                String propName = sb.toString();
-
-                if (!annotatedFields.contains(propName) && !annotatedMethods.containsKey(propName)) {
-                    annotatedMethods.put(propName, method);
-                }
-            }
-        }
-        Class<?> superClass = baseClass.getSuperclass();
-        if (!Object.class.equals(superClass)) {
-            collectAnnotatedMethods(superClass, annotatedMethods, annotatedFields);
-        }
-    }
-
-
-    private void collectAnnotatedFields(Class<?> baseClass, Map<String,Field> annotatedFields) {
-
-        Field[] fields = baseClass.getDeclaredFields();
-        for (Field field : fields) {
-            ManagedProperty property = field.getAnnotation(ManagedProperty.class);
-            if (property != null) {
-                String propName = property.name();
-                if (propName == null || propName.length() == 0) {
-                    propName = field.getName();
-                }
-                // if the field has already been collected, don't replace the existing
-                // value as that value represents an override.
-                if (!annotatedFields.containsKey(propName)) {
-                    annotatedFields.put(propName, field);
-                }
-            }
-        }
-        Class<?> superClass = baseClass.getSuperclass();
-        if (!Object.class.equals(superClass)) {
-            collectAnnotatedFields(superClass, annotatedFields);
-        }
-
-    }
-
-
-    private String getScope(Class<?> annotatedClass) {
-
-        for (Class<?> scope : SCOPES) {
-            //noinspection unchecked
-            Annotation a = annotatedClass.getAnnotation((Class<? extends Annotation>) scope);
-            if (a != null) {
-                if (a instanceof RequestScoped) {
-                    return "request";
-                } else if (a instanceof ViewScoped) {
-                    return "view";
-                } if (a instanceof SessionScoped) {
-                    return "session";
-                } else if (a instanceof ApplicationScoped) {
-                    return "application";
-                } else if (a instanceof NoneScoped) {
-                    return "none";
-                } else if (a instanceof CustomScoped) {
-                    return ((CustomScoped) a).value();
-                }
-            }
-        }
-
-        return "request";
-
-    }
-
-
-    private String getName(ManagedBean managedBean, Class<?> annotatedClass) {
-
-        String name = managedBean.name();
-
-        if (name.length() == 0) {
-            String t = annotatedClass.getName();
-            name = t.substring(t.lastIndexOf('.') + 1);
-            char[] nameChars = name.toCharArray();
-            nameChars[0] = Character.toLowerCase(nameChars[0]);
-            name = new String(nameChars);
-        }
-
-        return name;
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/NamedEventConfigHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/NamedEventConfigHandler.java
deleted file mode 100644
index daff571..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/NamedEventConfigHandler.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.NamedEventManager;
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import javax.faces.context.FacesContext;
-import javax.faces.event.NamedEvent;
-import javax.faces.event.SystemEvent;
-
-/**
- * This class handles the processing the NamedEvent annotation.  For each class
- * with this annotation, the following logic is applied:
- * <ol>
- *      <li>Get the unqualified class name (e.g., UserLoginEvent)</li>
- *      <li>Strip off the trailing "Event", if present (e.g., UserLogin)</li>
- *      <li>Convert the first character to lower-case (e.g., userLogin)</li>
- *      <li>Prepend the package name to the lower-cased name</li>
- *      <li>If the <code>shortName</code> attribute is specified, register the
- *          event by that name as well.</li>
- * </ol>
- */
-public class NamedEventConfigHandler implements ConfigAnnotationHandler {
-
-    private Map<Class<?>, Annotation> namedEvents;
-    private static final Collection<Class<? extends Annotation>> HANDLES;
-
-
-    static {
-        Collection<Class<? extends Annotation>> handles =
-                new ArrayList<Class<? extends Annotation>>(2);
-        handles.add(NamedEvent.class);
-        HANDLES = Collections.unmodifiableCollection(handles);
-    }
-
-    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
-        return HANDLES;
-    }
-
-    public void collect(Class<?> target, Annotation annotation) {
-        if (namedEvents == null) {
-            namedEvents = new HashMap<Class<?>, Annotation>();
-        }
-        namedEvents.put(target, annotation);
-    }
-
-    public void push(FacesContext ctx) {
-        if (namedEvents != null) {
-            ApplicationAssociate associate =
-                    ApplicationAssociate.getInstance(ctx.getExternalContext());
-            if (associate != null) {
-                NamedEventManager nem = associate.getNamedEventManager();
-                for (Map.Entry<Class<?>, Annotation> entry : namedEvents.entrySet()) {
-                    process(nem, entry.getKey(), entry.getValue());
-                }
-            }
-        }
-    }
-
-    // --------------------------------------------------------- Private Methods
-    /*
-     */
-    private void process(NamedEventManager nem,
-            Class<?> annotatedClass,
-            Annotation annotation) {
-        String name = annotatedClass.getSimpleName();
-        int index = name.lastIndexOf("Event");
-        if (index > -1) {
-            name = name.substring(0, index);
-        }
-
-        name = annotatedClass.getPackage().getName() + ("." + name.charAt(0)).toLowerCase() + name.substring(1);
-        nem.addNamedEvent(name, (Class<? extends SystemEvent>) annotatedClass);
-
-        String shortName = ((NamedEvent) annotation).shortName();
-
-        if (!"".equals(shortName)) {
-            if (nem.isDuplicateNamedEvent(shortName)) {
-                nem.addDuplicateName(shortName, (Class<? extends SystemEvent>) annotatedClass);
-            } else {
-                nem.addNamedEvent(shortName, (Class<? extends SystemEvent>) annotatedClass);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/RenderKitConfigHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/RenderKitConfigHandler.java
deleted file mode 100644
index 8dc5677..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/RenderKitConfigHandler.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-
-import javax.faces.context.FacesContext;
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.FacesBehaviorRenderer;
-import javax.faces.render.FacesRenderer;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.RenderKit;
-import javax.faces.render.Renderer;
-import javax.faces.FactoryFinder;
-import javax.faces.FacesException;
-
-/**
- * <p> <code>ConfigAnnotationHandler</code> {@link FacesRenderer} annotated classes.</p>
- */
-public class RenderKitConfigHandler implements ConfigAnnotationHandler {
-
-    private static final Collection<Class<? extends Annotation>> HANDLES;
-
-    static {
-        Collection<Class<? extends Annotation>> handles =
-              new ArrayList<Class<? extends Annotation>>(2);
-        handles.add(FacesRenderer.class);
-        handles.add(FacesBehaviorRenderer.class);
-        HANDLES = Collections.unmodifiableCollection(handles);
-    }
-
-    Map<Class<?>, Annotation> annotatedRenderers;
-
-    // ------------------------------------- Methods from ComponentConfigHandler
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
-     */
-    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
-
-        return HANDLES;
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
-     */
-    public void collect(Class<?> target, Annotation annotation) {
-
-        if (annotatedRenderers == null) {
-            annotatedRenderers = new HashMap<Class<?>, Annotation>();
-        }
-        annotatedRenderers.put(target,  annotation);
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
-     */
-    public void push(FacesContext ctx) {
-
-
-        if (annotatedRenderers != null) {
-            RenderKitFactory rkf = (RenderKitFactory) FactoryFinder
-            .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-			for (Map.Entry<Class<?>, Annotation> entry : annotatedRenderers
-					.entrySet()) {
-				Class<?> rClass = entry.getKey();
-				if (entry.getValue() instanceof FacesRenderer) {
-					FacesRenderer ra = (FacesRenderer) entry.getValue();
-					try {
-						RenderKit rk = rkf.getRenderKit(ctx, ra.renderKitId());
-						if (rk == null) {
-							throw new IllegalStateException(
-									"Error processing annotated Renderer "
-											+ ra.toString()
-											+ " on class "
-											+ rClass.getName()
-											+ ".  Unable to find specified RenderKit.");
-						}
-						rk.addRenderer(ra.componentFamily(), ra.rendererType(),
-								(Renderer) rClass.newInstance());
-					} catch (Exception e) {
-						throw new FacesException(e);
-					}
-				} else if (entry.getValue() instanceof FacesBehaviorRenderer) {
-					FacesBehaviorRenderer bra = (FacesBehaviorRenderer) entry
-							.getValue();
-					try {
-						RenderKit rk = rkf.getRenderKit(ctx, bra.renderKitId());
-						if (rk == null) {
-							throw new IllegalStateException(
-									"Error processing annotated ClientBehaviorRenderer "
-											+ bra.toString()
-											+ " on class "
-											+ rClass.getName()
-											+ ".  Unable to find specified RenderKit.");
-						}
-						rk.addClientBehaviorRenderer(bra.rendererType(),
-								(ClientBehaviorRenderer) rClass.newInstance());
-					} catch (Exception e) {
-						throw new FacesException(e);
-					}
-				}
-			}
-		}
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ResourceDependencyHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ResourceDependencyHandler.java
deleted file mode 100644
index b780634..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ResourceDependencyHandler.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Set;
-import java.util.HashSet;
-
-import javax.el.ValueExpression;
-import javax.faces.application.ResourceDependency;
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.util.RequestStateManager;
-
-/**
- * {@link RuntimeAnnotationHandler} responsible for processing {@link ResourceDependency} annotations.
- */
-class ResourceDependencyHandler implements RuntimeAnnotationHandler {
-
-    private ResourceDependency[] dependencies;
-    private Map<ResourceDependency,Expressions> expressionsMap;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ResourceDependencyHandler(ResourceDependency[] dependencies) {
-
-        this.dependencies = dependencies;
-        Map<Object, Object> attrs = FacesContext.getCurrentInstance().getAttributes();
-        expressionsMap = new HashMap<ResourceDependency,Expressions>(dependencies.length, 1.0f);
-        for (ResourceDependency dep : dependencies) {
-            Expressions exprs = new Expressions();
-            exprs.name = dep.name();
-            String lib = dep.library();
-            if (lib.length() > 0) {
-                // Take special action to resolve the "this" library name
-                if ("this".equals(lib)) {
-                    String thisLibrary = (String)
-                            attrs.get(com.sun.faces.application.ApplicationImpl.THIS_LIBRARY);
-                    assert(null != thisLibrary);
-                    lib = thisLibrary;
-                }
-
-                exprs.library = lib;
-            }
-            String tgt = dep.target();
-            if (tgt.length() > 0) {
-                exprs.target = tgt;
-            }
-            expressionsMap.put(dep, exprs);
-        }
-
-    }
-
-
-    // ----------------------------------- Methods from RuntimeAnnotationHandler
-    
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    public void apply(FacesContext ctx, Object... params) {
-
-        for (ResourceDependency dep : dependencies) {
-            if (!hasBeenProcessed(ctx, dep)) {
-                pushResourceToRoot(ctx, createComponentResource(ctx, dep));
-                markProcssed(ctx, dep);
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * Adds the specified {@link UIComponent} as a component resource to the
-     * {@link javax.faces.component.UIViewRoot}
-     * @param ctx the {@link FacesContext} for the current request
-     * @param c the component resource
-     */
-    private void pushResourceToRoot(FacesContext ctx, UIComponent c) {
-
-        ctx.getViewRoot().addComponentResource(ctx, c, (String) c .getAttributes().get("target"));
-
-    }
-
-
-    /**
-     * Determines of the specified {@link ResourceDependency} has already been
-     * previously processed.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param dep the {@link ResourceDependency} in question
-     * @return <code>true</code> if the {@link ResourceDependency} has been
-     *  processed, otherwise <code>false</code>
-     */
-    @SuppressWarnings({"unchecked"})
-    private boolean hasBeenProcessed(FacesContext ctx, ResourceDependency dep) {
-
-        Set<ResourceDependency> dependencies = (Set<ResourceDependency>)
-              RequestStateManager.get(ctx, RequestStateManager.PROCESSED_RESOURCE_DEPENDENCIES);
-        return ((dependencies != null) && dependencies.contains(dep));
-
-    }
-
-
-    /**
-     * Construct a new component resource based off the provided {@link ValueExpression}s.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param dep the ResourceDependency that the component resource will be
-     *  constructed from
-     * @return a new component resource based of the provided annotation
-     */
-    private UIComponent createComponentResource(FacesContext ctx, ResourceDependency dep) {
-
-        Expressions exprs = expressionsMap.get(dep);
-        Application app = ctx.getApplication();
-        String resname = exprs.getName(ctx);
-        UIComponent c = ctx.getApplication().createComponent("javax.faces.Output");
-        c.setRendererType(app.getResourceHandler().getRendererTypeForResourceName(resname));
-        Map<String,Object> attrs = c.getAttributes();
-        attrs.put("name", resname);
-        if (exprs.library != null) {
-            attrs.put("library", exprs.getLibrary(ctx));
-        }
-        if (exprs.target != null) {
-            attrs.put("target", exprs.getTarget(ctx));
-        }
-        return c;
-
-    }
-
-
-    /**
-     * Indicates that the specified ResourceDependency has been processed.
-     * @param ctx the {@link FacesContext} for the current request
-     * @param dep the {@link ResourceDependency}
-     */
-    @SuppressWarnings({"unchecked"})
-    private void markProcssed(FacesContext ctx, ResourceDependency dep) {
-
-        Set<ResourceDependency> dependencies = (Set<ResourceDependency>)
-              RequestStateManager.get(ctx, RequestStateManager.PROCESSED_RESOURCE_DEPENDENCIES);
-        if (dependencies == null) {
-            dependencies = new HashSet<ResourceDependency>(6);
-            RequestStateManager.set(ctx, RequestStateManager.PROCESSED_RESOURCE_DEPENDENCIES, dependencies);
-        }
-        dependencies.add(dep);
-        
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * This helper class hides expression evaluation complexity.
-     */
-    private static final class Expressions {
-
-        ValueExpression nameExpression;
-        ValueExpression libraryExpression;
-        ValueExpression targetExpression;
-        String name;
-        String library;
-        String target;
-
-        String getName(FacesContext ctx) {
-            if (nameExpression == null) {
-                nameExpression = ELUtils.createValueExpression(name, String.class);
-            }
-            return (String) nameExpression.getValue(ctx.getELContext());
-        }
-
-        String getLibrary(FacesContext ctx) {
-            if (library != null) {
-                if (libraryExpression == null) {
-                    libraryExpression = ELUtils.createValueExpression(library, String.class);
-                }
-                return (String) libraryExpression.getValue(ctx.getELContext());
-            }
-            return null;
-        }
-
-        String getTarget(FacesContext ctx) {
-            if (target != null) {
-                if (targetExpression == null) {
-                    targetExpression = ELUtils.createValueExpression(target, String.class);
-                }
-                return (String) targetExpression.getValue(ctx.getELContext());
-            }
-            return null;
-        }
-
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ResourceDependencyScanner.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ResourceDependencyScanner.java
deleted file mode 100644
index b69e16c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ResourceDependencyScanner.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-
-import javax.faces.application.ResourceDependencies;
-import javax.faces.application.ResourceDependency;
-
-import com.sun.faces.util.Util;
-
-/**
- * <code>Scanner</code> implementation responsible for {@link ResourceDependency} annotations.
- */
-class ResourceDependencyScanner implements Scanner {
-
-
-    // ---------------------------------------------------- Methods from Scanner
-
-
-    public Class<? extends Annotation> getAnnotation() {
-
-        return ResourceDependency.class;
-
-    }
-
-
-    public RuntimeAnnotationHandler scan(Class<?> clazz) {
-
-        Util.notNull("clazz", clazz);
-
-        ResourceDependencyHandler handler = null;
-        ResourceDependency dep = clazz.getAnnotation(ResourceDependency.class);
-        if (dep != null) {
-            handler = new ResourceDependencyHandler(new ResourceDependency[] { dep });
-        } else {
-            ResourceDependencies deps = clazz.getAnnotation(ResourceDependencies.class);
-            if (deps != null) {
-                handler = new ResourceDependencyHandler(deps.value());
-            }
-        }
-
-        return handler;
-        
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/RuntimeAnnotationHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/RuntimeAnnotationHandler.java
deleted file mode 100644
index 0ba946b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/RuntimeAnnotationHandler.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-
-/**
- * Implementations of this class provide basic caching and processing of
- * of {@link java.lang.annotation.Annotation} instances.
- */
-interface RuntimeAnnotationHandler {
-
-    /**
-     * <p>Apply the {@link java.lang.annotation.Annotation}(s). The act
-     * of doing so should affect the JSF runtime in some fashion (see the spec
-     * for the specific annotation types).</p>
-     *
-     * <p>
-     * <em>NOTE</em>: when adding new types of components that can be annotated,
-     * the fact that we expose varargs here should be hidden.  Type-safe methods
-     * should be added to {@link AnnotationManager} to clarify the contract.
-     * </p>
-     *
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current
-     *  request
-     * @param params one or more arguments to the handler instance.  The type
-     *  and number may vary.
-     */
-    public void apply(FacesContext ctx, Object... params);
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/Scanner.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/Scanner.java
deleted file mode 100644
index 05f1bf1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/Scanner.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-
-/**
- * <p>Instances of this interface are responsible for scanning a <code>Class</code>
- * for a specific annotation types.</p>
- *
- * <p>Scanner implementations <em>must</em> be thread safe.</p>
- */
-interface Scanner {
-
-    /**
-     * @return the {@link java.lang.annotation.Annotation} this <code>Scanner</code>
-     *  is responsible for handling.  <em>NOTE</em>: while a particular <code>Scanner</code>
-     *  instance may handle a plural version of an <code>Annotation</code> in
-     *  additional to a singular, this method must return the singular version
-     *  only.
-     */
-    public Class<? extends Annotation> getAnnotation();
-
-    
-    /**
-     * Scan the target class for the {@link java.lang.annotation.Annotation}s this scanner handles.
-     * @param clazz the target class
-     * @return a new {@link RuntimeAnnotationHandler} instance capable of processing the
-     *  annotations defined on this class.  If no relevant {@link java.lang.annotation.Annotation}s
-     *  are found, return <code>null</code>.
-     */
-    public RuntimeAnnotationHandler scan(Class<?> clazz);
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ValidatorConfigHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/annotation/ValidatorConfigHandler.java
deleted file mode 100644
index a94fa75..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/annotation/ValidatorConfigHandler.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.annotation;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-
-import javax.faces.context.FacesContext;
-import javax.faces.application.Application;
-import javax.faces.validator.FacesValidator;
-
-/**
- * <p>
- * <code>ConfigAnnotationHandler</code> for {@link FacesValidator} annotated
- * classes.
- * </p>
- */
-public class ValidatorConfigHandler implements ConfigAnnotationHandler {
-
-    private static final Collection<Class<? extends Annotation>> HANDLES;
-    static {
-        Collection<Class<? extends Annotation>> handles =
-              new ArrayList<Class<? extends Annotation>>(1);
-        handles.add(FacesValidator.class);
-        HANDLES = Collections.unmodifiableCollection(handles);
-    }
-
-    private Map<ValidatorInfo,String> validators;
-
-
-    // ------------------------------------- Methods from ComponentConfigHandler
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#getHandledAnnotations()
-     */
-    public Collection<Class<? extends Annotation>> getHandledAnnotations() {
-
-        return HANDLES;
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#collect(Class, java.lang.annotation.Annotation)
-     */
-    public void collect(Class<?> target, Annotation annotation) {
-
-        if (validators == null) {
-            validators = new HashMap<ValidatorInfo,String>();
-        }
-        FacesValidator validatorAnnotation = (FacesValidator) annotation;
-        ValidatorInfo info = new ValidatorInfo(validatorAnnotation.value(), validatorAnnotation.isDefault());
-        validators.put(info, target.getName());
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.annotation.ConfigAnnotationHandler#push(javax.faces.context.FacesContext)
-     */
-    public void push(FacesContext ctx) {
-
-        if (validators != null) {
-            Application app = ctx.getApplication();
-            for (Map.Entry<ValidatorInfo,String> entry : validators.entrySet()) {
-                app.addValidator(entry.getKey().validatorId, entry.getValue());
-                if (entry.getKey().isDefault) {
-                    app.addDefaultValidatorId(entry.getKey().validatorId);
-                }
-            }
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static class ValidatorInfo {
-
-        final String validatorId;
-        final boolean isDefault;
-
-        ValidatorInfo(String validatorId, boolean isDefault) {
-            this.validatorId = validatorId;
-            this.isDefault = isDefault;
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/ClasspathResourceHelper.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/ClasspathResourceHelper.java
deleted file mode 100644
index e242674..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/ClasspathResourceHelper.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import javax.faces.application.ProjectStage;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.util.Util;
-
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.CacheResourceModificationTimestamp;
-
-/**
- * <p>
- * A {@link ResourceHelper} implementation for finding/serving resources
- * found on the classpath within the <code>META-INF/resources directory.
- * </p>
- *
- * @since 2.0
- */
-public class ClasspathResourceHelper extends ResourceHelper {
-
-
-    private static final String BASE_RESOURCE_PATH = "META-INF/resources";
-    private boolean cacheTimestamp;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ClasspathResourceHelper() {
-
-        WebConfiguration webconfig = WebConfiguration.getInstance();
-        cacheTimestamp = webconfig.isOptionEnabled(CacheResourceModificationTimestamp);
-
-    }
-
-
-    // --------------------------------------------- Methods from ResourceHelper
-
-
-    /**
-     * @see com.sun.faces.application.resource.ResourceHelper#getBaseResourcePath()
-     */
-    public String getBaseResourcePath() {
-
-        return BASE_RESOURCE_PATH;
-
-    }
-
-
-    /**
-     * @see ResourceHelper#getNonCompressedInputStream(ResourceInfo, javax.faces.context.FacesContext)
-     */
-    protected InputStream getNonCompressedInputStream(ResourceInfo resource, FacesContext ctx)
-    throws IOException {
-
-        ClassLoader loader = Util.getCurrentLoader(this.getClass());
-        String path = resource.getPath();
-        InputStream in = loader.getResourceAsStream(path);
-        if (in == null) {
-            // try using this class' loader (necessary when running in OSGi)
-            in = this.getClass().getClassLoader().getResourceAsStream(path);
-        }
-        return in;
-
-    }
-
-
-    /**
-     * @see com.sun.faces.application.resource.ResourceHelper#getURL(ResourceInfo, javax.faces.context.FacesContext)
-     */
-    public URL getURL(ResourceInfo resource, FacesContext ctx) {
-
-        ClassLoader loader = Util.getCurrentLoader(this.getClass());
-        URL url = loader.getResource(resource.getPath());
-        if (url == null) {
-            // try using this class' loader (necessary when running in OSGi)
-            url = this.getClass().getClassLoader().getResource(resource.getPath());
-        }
-        return url;
-
-    }
-
-
-    /**
-     * @see ResourceHelper#findLibrary(String, String, javax.faces.context.FacesContext)
-     */
-    public LibraryInfo findLibrary(String libraryName,
-                                   String localePrefix,
-                                   FacesContext ctx) {
-
-        ClassLoader loader = Util.getCurrentLoader(this);
-        String basePath;
-        if (localePrefix == null) {
-            basePath = getBaseResourcePath() + '/' + libraryName + '/';
-        } else {
-            basePath = getBaseResourcePath()
-                       + '/'
-                       + localePrefix
-                       + '/'
-                       + libraryName
-                       + '/';
-        }
-
-        URL basePathURL = loader.getResource(basePath);
-        if (basePathURL == null) {
-            // try using this class' loader (necessary when running in OSGi)
-            basePathURL = this.getClass().getClassLoader().getResource(basePath);
-            if (basePathURL == null) {
-                return null;
-            }
-        }
-
-        return new LibraryInfo(libraryName, null, localePrefix, this);
-        
-    }
-
-
-    /**
-     * @see ResourceHelper#findResource(LibraryInfo, String, String, boolean, javax.faces.context.FacesContext)
-     */
-    public ResourceInfo findResource(LibraryInfo library,
-                                     String resourceName,
-                                     String localePrefix,
-                                     boolean compressable,
-                                     FacesContext ctx) {
-
-        ClassLoader loader = Util.getCurrentLoader(this);
-        String basePath;
-        if (library != null) {
-            basePath = library.getPath() + '/' + resourceName;
-        } else {
-            if (localePrefix == null) {
-                basePath = getBaseResourcePath() + '/' + resourceName;
-            } else {
-                basePath = getBaseResourcePath()
-                           + '/'
-                           + localePrefix
-                           + '/'
-                           + resourceName;
-            }
-        }
-
-        URL basePathURL = loader.getResource(basePath);
-        if (basePathURL == null) {
-            // try using this class' loader (necessary when running in OSGi)
-            basePathURL = this.getClass().getClassLoader().getResource(basePath);
-            if (basePathURL == null) {
-                return null;
-            }
-        }
-
-        ResourceInfo value;
-
-        if (library != null) {
-            value = new ResourceInfo(library,
-                                     resourceName,
-                                     null,
-                                     compressable,
-                                     resourceSupportsEL(resourceName, ctx),
-                                     ctx.isProjectStage(ProjectStage.Development),
-                                     cacheTimestamp);
-        } else {
-            value = new ResourceInfo(resourceName,
-                                     null,
-                                     localePrefix,
-                                     this,
-                                     compressable,
-                                     resourceSupportsEL(resourceName, ctx),
-                                     ctx.isProjectStage(ProjectStage.Development),
-                                     cacheTimestamp);
-        }
-        
-        if (value.isCompressable()) {
-            value = handleCompression(value);
-        }
-        return value;
-
-    }
-
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/LibraryInfo.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/LibraryInfo.java
deleted file mode 100644
index f0c21c2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/LibraryInfo.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-/**
- * <p>
- * <code>LibraryInfo</code> is a simple wrapper class for information pertainant to building
- * a complete resource path using a Library.
- * <p>
- */
-public class LibraryInfo {
-
-    private String name;
-    private VersionInfo version;
-    private String localePrefix;
-    private ResourceHelper helper;
-    private String path;
-
-    /**
-     * Constructs a new <code>LibraryInfo</code> using the specified details.
-     * @param name the name of the library
-     * @param version the version of the library, if any
-     * @param helper the helper class for this resource
-     */
-    LibraryInfo(String name,
-                VersionInfo version,
-                String localePrefix,
-                ResourceHelper helper) {
-        this.name = name;
-        this.version = version;
-        this.localePrefix = localePrefix;
-        this.helper = helper;
-        initPath();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        if (this == obj) {
-            return true;
-        }
-        final LibraryInfo other = (LibraryInfo) obj;
-        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
-            return false;
-        }
-        if (this.version != other.version && (this.version == null || !this.version.equals(other.version))) {
-            return false;
-        }
-        if ((this.localePrefix == null) ? (other.localePrefix != null) : !this.localePrefix.equals(other.localePrefix)) {
-            return false;
-        }
-        if ((this.path == null) ? (other.path != null) : !this.path.equals(other.path)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 5;
-        hash = 37 * hash + (this.name != null ? this.name.hashCode() : 0);
-        hash = 37 * hash + (this.version != null ? this.version.hashCode() : 0);
-        hash = 37 * hash + (this.localePrefix != null ? this.localePrefix.hashCode() : 0);
-        hash = 37 * hash + (this.path != null ? this.path.hashCode() : 0);
-        return hash;
-    }
-
-
-
-    /**
-     * @return return the library name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @return return the version of the library, or <code>null</code>
-     *  if the library isn't versioned.
-     */
-    public VersionInfo getVersion() {
-        return version;
-    }
-
-    /**
-     * @return return the {@link ResourceHelper} for this resource
-     */
-    public ResourceHelper getHelper() {
-        return helper;
-    }
-
-    /**
-     * @return the base path of the library.
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * @return the Locale prefix, if any.
-     */
-    public String getLocalePrefix() {
-        return localePrefix;
-    }
-
-    public String toString() {
-        return "LibraryInfo{" +
-               "name='" + name + '\'' +
-               ", version=" + ((version != null) ? version : "NONE") + '\'' +
-               ", localePrefix='" + ((localePrefix != null) ? localePrefix : "NONE") + '\'' +
-               ", path='" + path + '\'' +
-               '}';
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * Construct the full path to the base directory of the library's resources.
-     */
-    private void initPath() {
-
-        StringBuilder sb = new StringBuilder(64);
-        sb.append(helper.getBaseResourcePath());
-        if (localePrefix != null) {
-            sb.append('/').append(localePrefix);
-        }
-        sb.append('/').append(name);
-        if (version != null) {
-            sb.append('/').append(version.getVersion());
-        }
-        path = sb.toString();
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceCache.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceCache.java
deleted file mode 100644
index 00a2f73..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceCache.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.servlet.ServletContext;
-
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MultiKeyConcurrentHashMap;
-
-/**
- * <p>
- * This is the caching mechanism for caching ResourceInfo instances to
- * offset the cost of looking up the resource.
- * </p>
- *
- * <p>
- * This cache uses a background thread to check for modifications to the underlying
- * webapp or JAR files containing resources.  This check is periodic, configurable
- * via context init param <code>com.sun.faces.resourceUpdateCheckPeriod</code>.  Through
- * this config option, the cache can also be made static or completely disabled.
- * If the value of of this option is <code>0</code>, then no check will be made
- * making the cache static.  If value of this option is <code>less than 0</code>,
- * then no caching will be perfomed.  Otherwise, the value of the option will
- * be the number of minutes between modification checks.
- * </p>
- */
-public class ResourceCache {
-
-    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
-
-
-    /**
-     * The <code>ResourceInfo<code> cache.
-     */
-    private MultiKeyConcurrentHashMap<String,ResourceInfoCheckPeriodProxy> resourceCache;
-
-
-    /**
-     * Resource check period in minutes.
-     */
-    private long checkPeriod;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructs a new ResourceCache.
-     */
-    public ResourceCache() {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        assert (config != null);
-        ServletContext sc = config.getServletContext();
-        long period = getCheckPeriod(config);
-        checkPeriod = ((period != -1) ? period * 1000L * 60L : -1);
-        resourceCache = new MultiKeyConcurrentHashMap<String,ResourceInfoCheckPeriodProxy>(30);
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                       "ResourceCache constructed for {0}.  Check period is {1} minutes.",
-                       new Object[] { getServletContextIdentifier(sc), checkPeriod });
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * Add the {@link ResourceInfo} to the internal cache.
-     *
-     * @param info resource metadata
-     *
-     * @return previous value associated with specified key, or null
-     *  if there was no mapping for key
-     */
-    public ResourceInfo add(ResourceInfo info) {
-
-        Util.notNull("info", info);
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                       "Caching ResourceInfo: {0}",
-                       info.toString());
-        }
-        ResourceInfoCheckPeriodProxy proxy =
-              resourceCache.putIfAbsent(info.name,
-                                        info.libraryName,
-                                        info.localePrefix,
-                                        new ResourceInfoCheckPeriodProxy(info, checkPeriod));
-        return ((proxy != null) ? proxy.getResourceInfo() : null);
-
-    }
-
-
-    /**
-     * @param name the resource name
-     * @param libraryName the library name
-     * @param localePrefix the locale prefix
-     * @return the {@link ResourceInfo} associated with <code>key<code>
-     *  if any.
-     */
-    public ResourceInfo get(String name, String libraryName, String localePrefix) {
-
-        Util.notNull("name", name);
-
-        ResourceInfoCheckPeriodProxy proxy =
-              resourceCache.get(name, libraryName, localePrefix);
-        if (proxy != null && proxy.needsRefreshed()) {
-            resourceCache.remove(name, libraryName, localePrefix);
-            return null;
-        } else {
-            return ((proxy != null) ? proxy.getResourceInfo() : null);
-        }
-
-    }
-
-
-    /**
-     * <p>Empty the cache.</p>
-     */
-    public void clear() {
-
-        resourceCache.clear();
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, "Cache Cleared");
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private Long getCheckPeriod(WebConfiguration webConfig) {
-
-        String val = webConfig.getOptionValue(WebContextInitParameter.ResourceUpdateCheckPeriod);
-        try {
-            return (Long.parseLong(val));
-        } catch (NumberFormatException nfe) {
-            return Long.parseLong(WebContextInitParameter.ResourceUpdateCheckPeriod.getDefaultValue());
-        }
-
-    }
-
-
-    private static String getServletContextIdentifier(ServletContext context) {
-
-        if (context.getMajorVersion() == 2 && context.getMinorVersion() < 5) {
-            return context.getServletContextName();
-        } else {
-            return context.getContextPath();
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static final class ResourceInfoCheckPeriodProxy {
-
-        private ResourceInfo resourceInfo;
-        private Long checkTime;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public ResourceInfoCheckPeriodProxy(ResourceInfo resourceInfo,
-                                            long checkPeriod) {
-
-            this.resourceInfo = resourceInfo;
-            if (checkPeriod != -1L) {
-                if (!(resourceInfo.getHelper() instanceof ClasspathResourceHelper)) {
-                    checkTime = System.currentTimeMillis() + checkPeriod;
-                }
-            }
-
-        }
-
-
-        private boolean needsRefreshed() {
-
-            return (checkTime != null
-                       && (checkTime < System.currentTimeMillis()));
-
-        }
-
-
-        private ResourceInfo getResourceInfo() {
-
-            return resourceInfo;
-
-        }
-
-    } // END ResourceInfoCheckPeriodProxy
-
-
-} // END ResourceCache
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHandlerImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHandlerImpl.java
deleted file mode 100644
index 46736f8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHandlerImpl.java
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.application.resource;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.*;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.RequestStateManager;
-import com.sun.faces.util.Util;
-
-import javax.faces.application.ProjectStage;
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.channels.Channels;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.WritableByteChannel;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-/**
- * This is the default implementation of {@link ResourceHandler}.
- */
-public class ResourceHandlerImpl extends ResourceHandler {
-
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    ResourceManager manager;
-    List<Pattern> excludePatterns;
-    private long creationTime;
-    private long maxAge;
-    private WebConfiguration webconfig;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Creates a new instance of ResourceHandlerImpl
-     */
-    public ResourceHandlerImpl() {
-
-        creationTime = System.currentTimeMillis();
-        webconfig = WebConfiguration.getInstance();
-        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
-        manager = ApplicationAssociate.getInstance(extContext).getResourceManager();
-        initExclusions();
-        initMaxAge();
-
-    }
-
-
-    // ------------------------------------------- Methods from Resource Handler
-
-
-    /**
-     * @see ResourceHandler#createResource(String)
-     */
-    public Resource createResource(String resourceName) {
-
-        Util.notNull("resourceName", resourceName);
-
-        return createResource(resourceName, null, null);
-
-    }
-
-
-    /**
-     * @see ResourceHandler#createResource(String, String)
-     */
-    public Resource createResource(String resourceName, String libraryName) {
-
-        Util.notNull("resourceName", resourceName);
-
-        return createResource(resourceName, libraryName, null);
-
-    }
-
-
-    /**
-     * @see ResourceHandler#createResource(String, String, String)
-     */
-    public Resource createResource(String resourceName,
-                                   String libraryName,
-                                   String contentType) {
-
-        Util.notNull("resourceName", resourceName);
-        FacesContext ctx = FacesContext.getCurrentInstance();
-
-        boolean development = ctx.isProjectStage(ProjectStage.Development);
-
-        String ctype = ((contentType != null)
-                        ? contentType
-                        : getContentType(ctx, resourceName));
-        ResourceInfo info = manager.findResource(libraryName,
-                                                 resourceName,
-                                                 ctype,
-                                                 ctx);
-        if (info == null) {
-            // prevent message from being when we're dealing with
-            // groovy is present and Application.createComponent()
-            // tries to resolve a .groovy file as backing UIComponent.
-            if (!development && "application/x-groovy".equals(ctype)) {
-                return null;
-            }
-            logMissingResource(ctx, resourceName, libraryName, null);
-            return null;
-        } else {
-            return new ResourceImpl(info, ctype, creationTime, maxAge);
-        }
-
-    }
-
-    @Override
-    public boolean libraryExists(String libraryName) {
-
-        if (libraryName.contains("../")) {
-            return false;
-        }
-        FacesContext context = FacesContext.getCurrentInstance();
-        LibraryInfo info = manager.findLibrary(libraryName, null, context);
-        return (info != null);
-
-    }
-    
-    /**
-     * @see ResourceHandler#isResourceRequest(javax.faces.context.FacesContext)
-     */
-    public boolean isResourceRequest(FacesContext context) {
-
-        Boolean isResourceRequest = (Boolean)
-              RequestStateManager.get(context,
-                                      RequestStateManager.RESOURCE_REQUEST);
-        if (isResourceRequest == null) {
-            String resourceId = normalizeResourceRequest(context);
-            isResourceRequest = (resourceId != null
-                                 ? resourceId.startsWith(RESOURCE_IDENTIFIER)
-                                 : Boolean.FALSE);
-            RequestStateManager.set(context,
-                                    RequestStateManager.RESOURCE_REQUEST,
-                                    isResourceRequest);
-        }
-
-        return (isResourceRequest);
-
-    }
-
-    @Override
-    public String getRendererTypeForResourceName(String resourceName) {
-        String rendererType = null;
-        
-        String contentType = getContentType(FacesContext.getCurrentInstance(),
-                                            resourceName);
-        if (null != contentType) {
-            contentType = contentType.toLowerCase();
-            if (-1 != contentType.indexOf("javascript")) {
-                rendererType = "javax.faces.resource.Script";
-            }
-            else if (-1 != contentType.indexOf("css")) {
-                rendererType = "javax.faces.resource.Stylesheet";
-            }
-        }
-        return rendererType;
-    }
-    
-    
-
-
-
-    /**
-     * @see javax.faces.application.ResourceHandler#handleResourceRequest(javax.faces.context.FacesContext)
-     */
-    public void handleResourceRequest(FacesContext context) throws IOException {
-
-        String resourceId = normalizeResourceRequest(context);
-        // handleResourceRequest called for a non-resource request,
-        // bail out.
-        if (resourceId == null) {
-            return;
-        }
-        
-        ExternalContext extContext = context.getExternalContext();
-
-        if (isExcluded(resourceId)) {
-            extContext.setResponseStatus(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-        assert (null != resourceId);
-        assert (resourceId.startsWith(RESOURCE_IDENTIFIER));
-
-        Resource resource = null;
-        String resourceName = null;
-        String libraryName = null;
-        if (ResourceHandler.RESOURCE_IDENTIFIER.length() < resourceId.length()) {
-            resourceName = resourceId.substring(RESOURCE_IDENTIFIER.length() + 1);
-            assert(resourceName != null);
-            libraryName = context.getExternalContext().getRequestParameterMap()
-                  .get("ln");
-            resource = context.getApplication().getResourceHandler().createResource(resourceName, libraryName);
-        }
-
-        if (resource != null) {
-            if (resource.userAgentNeedsUpdate(context)) {
-                ReadableByteChannel resourceChannel = null;
-                WritableByteChannel out = null;
-                ByteBuffer buf = allocateByteBuffer();
-                try {
-                    InputStream in = resource.getInputStream();
-                    if (in == null) {
-                        send404(context, resourceName, libraryName, true);
-                        return;
-                    }
-                    resourceChannel =
-                          Channels.newChannel(in);
-                    out = Channels.newChannel(extContext.getResponseOutputStream());
-                    extContext.setResponseBufferSize(buf.capacity());
-                    String contentType = resource.getContentType();
-                    if (contentType != null) {
-                        extContext.setResponseContentType(resource.getContentType());
-                    }
-                    handleHeaders(context, resource);
-
-                    int size = 0;
-                    for (int thisRead = resourceChannel.read(buf), totalWritten = 0;
-                         thisRead != -1;
-                         thisRead = resourceChannel.read(buf)) {
-
-                        buf.rewind();
-                        buf.limit(thisRead);
-                        do {
-                            totalWritten += out.write(buf);
-                        } while (totalWritten < size);
-                        buf.clear();
-                        size += thisRead;
-
-                    }
-
-                    extContext.setResponseContentLength(size);
-
-                } catch (IOException ioe) {
-                    send404(context, resourceName, libraryName, ioe, true);
-                } finally {
-                    if (out != null) {
-                        out.close();
-                    }
-                    if (resourceChannel != null) {
-                        resourceChannel.close();
-                    }
-                }
-            } else {
-                send304(context);
-            }
-
-        } else {
-            // already logged elsewhere
-            send404(context, resourceName, libraryName, false);
-        }
-
-    }
-
-
-    private void send404(FacesContext ctx,
-                         String resourceName,
-                         String libraryName,
-                         boolean logMessage) {
-
-        send404(ctx, resourceName, libraryName, null, logMessage);
-
-    }
-
-
-    private void send404(FacesContext ctx,
-                         String resourceName,
-                         String libraryName,
-                         Throwable t,
-                         boolean logMessage) {
-
-        ctx.getExternalContext().setResponseStatus(HttpServletResponse.SC_NOT_FOUND);
-        if (logMessage) {
-            logMissingResource(ctx, resourceName, libraryName, t);
-        }
-
-
-    }
-
-
-    private void send304(FacesContext ctx) {
-
-        ctx.getExternalContext().setResponseStatus(HttpServletResponse.SC_NOT_MODIFIED);
-
-    }
-
-
-
-    // ------------------------------------------------- Package Private Methods
-
-
-    /**
-     * This method is leveraged by {@link ResourceImpl} to detemine if a resource
-     * has been upated.  In short, a resource has been updated if the timestamp
-     * is newer than the timestamp of the ResourceHandler creation time.
-     * @return the time when the ResourceHandler was instantiated (in milliseconds)
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    long getCreationTime() {
-
-        return creationTime;
-
-    }
-
-
-    /**
-     * This method is here soley for the purpose of unit testing and will
-     * not be invoked during normal runtime.
-     * @param creationTime the time in milliseconds
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    void setCreationTime(long creationTime) {
-
-        this.creationTime = creationTime;
-
-    }
-
-
-    /**
-     * Utility method leveraged by ResourceImpl to reduce the cost of
-     * looking up the WebConfiguration per-instance.
-     * @return the {@link WebConfiguration} for this application
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    WebConfiguration getWebConfig() {
-
-        return webconfig;
-        
-    }
-
-    
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * Log a message indicating a particular resource (reference by name and/or
-     * library) could not be found.  If this was due to an exception, the exception
-     * provided will be logged as well.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param resourceName the resource name
-     * @param libraryName the resource library
-     * @param t the exception caught when attempting to find the resource
-     */
-    private void logMissingResource(FacesContext ctx,
-                                    String resourceName,
-                                    String libraryName,
-                                    Throwable t) {
-
-        Level level;
-        if (!ctx.isProjectStage(ProjectStage.Production)) {
-            level = Level.WARNING;
-        } else {
-            level = ((t != null) ? Level.WARNING : Level.FINE);
-        }
-
-        if (libraryName != null) {
-            if (LOGGER.isLoggable(level)) {
-                LOGGER.log(level,
-                           "jsf.application.resource.unable_to_serve_from_library",
-                           new Object[]{resourceName, libraryName});
-                if (t != null) {
-                    LOGGER.log(level, "", t);
-                }
-            }
-        } else {
-            if (LOGGER.isLoggable(level)) {
-                LOGGER.log(level,
-                           "jsf.application.resource.unable_to_serve",
-                           new Object[]{resourceName});
-                if (t != null) {
-                    LOGGER.log(level, "", t);
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * @param resourceName the resource of interest.  The resourceName in question
-     *  may consist of zero or more path elements such that resourceName could
-     *  be something like path1/path2/resource.jpg or resource.jpg
-     * @return the content type for this resource
-     */
-    private String getContentType(FacesContext ctx, String resourceName) {
-
-        return ctx.getExternalContext().getMimeType(resourceName);
-
-    }
-
-
-    /**
-     * Normalize the request path to exclude JSF invocation information.
-     * If the FacesServlet servicing this request was prefix mapped, then
-     * the path to the FacesServlet will be removed.
-     * If the FacesServlet servicing this request was extension mapped, then
-     * the extension will be trimmed off.
-     * @param context the <code>FacesContext</code> for the current request
-     * @return the request path without JSF invocation information
-     */
-    private String normalizeResourceRequest(FacesContext context) {
-
-        String path;
-        String facesServletMapping = Util.getFacesMapping(context);
-        // If it is extension mapped
-        if (!Util.isPrefixMapped(facesServletMapping)) {
-            path = context.getExternalContext().getRequestServletPath();
-            // strip off the extension
-            int i = path.lastIndexOf(".");
-            if (0 < i) {
-                path = path.substring(0, i);
-            }
-        } else {
-            path = context.getExternalContext().getRequestPathInfo();
-        }
-        return path;
-
-    }
-
-
-    /**
-     * @param resourceId the normalized request path as returned by
-     *  {@link #normalizeResourceRequest(javax.faces.context.FacesContext)}
-     * @return <code>true</code> if the request matces an excluded resource,
-     *  otherwise <code>false</code>
-     */
-    private boolean isExcluded(String resourceId) {
-        for (Pattern pattern : excludePatterns) {
-            if (pattern.matcher(resourceId).matches()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-    /**
-     * Initialize the exclusions for this application.
-     * If no explicit exclusions are configured, the defaults of
-     * <ul>
-     * <li>.class</li>
-     * <li>.properties</li>
-     * <li>.xhtml</li>
-     * <li>.jsp</li>
-     * <li>.jspx</li>
-     * <ul>
-     * will be used.
-     */
-    private void initExclusions() {
-
-        String excludesParam = webconfig
-              .getOptionValue(ResourceExcludes);
-        String[] patterns = Util.split(excludesParam, " ");
-        excludePatterns = new ArrayList<Pattern>(patterns.length);
-        for (String pattern : patterns) {
-            excludePatterns.add(Pattern.compile(".*\\" + pattern));
-        }
-        
-    }
-
-    private void initMaxAge() {
-
-        maxAge = Long.parseLong(webconfig.getOptionValue(DefaultResourceMaxAge));
-
-    }
-
-
-    private void handleHeaders(FacesContext ctx,
-                               Resource resource) {
-
-        ExternalContext extContext = ctx.getExternalContext();
-        for (Map.Entry<String, String> cur :
-             resource.getResponseHeaders().entrySet()) {
-                extContext.setResponseHeader(cur.getKey(), cur.getValue());
-        }
-
-    }
-
-    private ByteBuffer allocateByteBuffer() {
-
-        int size;
-        try {
-            size = Integer.parseInt(webconfig.getOptionValue(ResourceBufferSize));
-        } catch (NumberFormatException nfe) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                           "jsf.application.resource.invalid_resource_buffer_size",
-                           new Object[] {
-                               webconfig.getOptionValue(ResourceBufferSize),
-                               ResourceBufferSize.getQualifiedName(),
-                               ResourceBufferSize.getDefaultValue()
-                           });
-            }
-            size = Integer.parseInt(ResourceBufferSize.getDefaultValue());
-        }
-        return ByteBuffer.allocate(size);
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHelper.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHelper.java
deleted file mode 100644
index 69e1e62..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHelper.java
+++ /dev/null
@@ -1,791 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Arrays;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.zip.GZIPOutputStream;
-
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.servlet.http.HttpServletResponse;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.el.ELContext;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MessageUtils;
-
-/**
- * <p>
- * Implementations of this class contain the knowledge for finding and serving
- * web application resources.
- * <p>
- *
- * @since 2.0
- */
-public abstract class ResourceHelper {
-
-    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
-
-    /**
-     * This pattern represents a version for a library.
-     * Examples:
-     *   1_1
-     *   1_11
-     *   1_11_1
-     *   1_11_1_2
-     */
-    private static final Pattern LIBRARY_VERSION_PATTERN =
-          Pattern.compile("^(\\d+)(_\\d+)+");
-
-    /**
-     * This pattern represents a version for a resource.
-     * Examples:
-     *   1_1.jpg
-     *   1_11.323
-     *   1_11_1.gif
-     *   1_11_1_2.txt
-     *   1_1
-     *   1_11
-     *   1_11_1
-     *   1_11_1_2
-     *
-     *  The extension is optional.
-     */
-    private static final Pattern RESOURCE_VERSION_PATTERN =
-          Pattern.compile("^((?:\\d+)(?:_\\d+)+)[\\.]?(\\w+)?");
-
-    /**
-     * Arbitrary file name to write the compressed bits to.
-     */
-    private static final String COMPRESSED_CONTENT_FILENAME =
-          "compressed-content";
-
-    private static final String[] EL_CONTENT_TYPES = {
-          "text/css",
-    };
-
-    static {
-        Arrays.sort(EL_CONTENT_TYPES);
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @return the base path in which resources will be stored
-     */
-    public abstract String getBaseResourcePath();
-
-
-    /**
-     * <p>
-     * If the resource is compressable, return an InputStream to read the
-     * compressed content, otherwise, call {@link #getNonCompressedInputStream(ResourceInfo, javax.faces.context.FacesContext)}
-     * to return the content of the original resource.
-     * </p>
-     * <p>
-     * Implementation Note:  If any exception occurs trying to return a stream
-     * to the compressed content, log the exception, and instead try to return
-     * a stream to the original content.
-     * </p>
-     * @param resource the resource to obtain an InputStream to
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @return an <code>InputStream</code> to the resource, or
-     *  <code>null</code> if no resource is found
-     * @throws IOException if an error occurs obtaining the stream
-     */
-    public InputStream getInputStream(ResourceInfo resource, FacesContext ctx)
-    throws IOException {
-
-        InputStream in = null;
-        if (resource.isCompressable() && clientAcceptsCompression(ctx)) {
-            if (!resource.supportsEL()) {
-                try {
-                    String path = resource.getCompressedPath();
-                    in = new BufferedInputStream(
-                             new FileInputStream(path
-                                                    + File.separatorChar
-                                                    + COMPRESSED_CONTENT_FILENAME));
-                } catch (IOException ioe) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   ioe.getMessage(),
-                                   ioe);
-                    }
-                    // return null so that the override code will try to serve
-                    // the non-compressed content
-                    in = null;
-                }
-            } else {
-                InputStream temp = null;
-                try {
-                    // using dynamic compression here
-                    temp = new BufferedInputStream(
-                             new ELEvaluatingInputStream(ctx,
-                                                         resource,
-                                                         getNonCompressedInputStream(resource,
-                                                                                     ctx)));
-                    byte[] buf = new byte[512];
-                    ByteArrayOutputStream baos = new ByteArrayOutputStream(512);
-                    OutputStream out = new GZIPOutputStream(baos);
-                    for (int read = temp.read(buf); read != -1; read = temp.read(buf)) {
-                        out.write(buf, 0, read);
-                    }
-                    out.flush();
-                    out.close();
-                    in = new BufferedInputStream(
-                          new ByteArrayInputStream(baos.toByteArray()));
-
-                } catch (IOException ioe) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   ioe.getMessage(),
-                                   ioe);
-                    }
-                } finally {
-                    if (temp != null) {
-                        try {
-                            temp.close();
-                        } catch (IOException ioe) {
-                            // ignore
-                        }
-                    }
-                }
-            }
-        }
-        if (in == null) {
-            if (resource.supportsEL()) {
-                return new BufferedInputStream(
-                           new ELEvaluatingInputStream(ctx,
-                                                       resource,
-                                                       getNonCompressedInputStream(resource,
-                                                                                   ctx)));
-            } else {
-                in = getNonCompressedInputStream(resource, ctx);
-            }
-        }
-        return in;
-
-    }
-
-
-    /**
-     * @param resource the resource to obtain a URL reference to
-     * @param ctx the {@link FacesContext} for the current request
-     * @return a URL to the specified resource, otherwise <code>null</code>
-     *  if no resource is found
-     */
-    public abstract URL getURL(ResourceInfo resource, FacesContext ctx);
-
-
-    /**
-     * Search for the specified library/localPrefix combination in an
-     * implementation dependent manner.
-     * @param libraryName the name of the library
-     * @param localePrefix the logicial identifier for a locale specific library.
-     *  if no localePrefix is configured, pass <code>null</code>
-     * @param ctx the {@link FacesContext} for the current request
-     * @return a {@link LibraryInfo} if a matching library based off the inputs
-     *  can be found, otherwise returns <code>null</code>
-     */
-    public abstract LibraryInfo findLibrary(String libraryName,
-                                            String localePrefix,
-                                            FacesContext ctx);
-
-
-    /**
-     * <p>
-     * Search for the specified resource based in the library/localePrefix/resourceName
-     * combination in an implementation dependent manner.
-     * </p>
-     * <p>
-     * If the resource is found, and is compressable, call {@link #handleCompression(ResourceInfo)}
-     * to compress the content.
-     * </p>
-     *
-     * @param library the library this resource should be a part of.  If the
-     *  the resource that is being searched for isn't part of a library, then
-     *  pass <code>null</code>
-     * @param resourceName the name of the resource that is being searched for
-     * @param localePrefix the logicial identifier for a locale specific library.
-     *  if no localePrefix is configured, pass <code>null</code>
-     * @param compressable <code>true</code> if the resource can be compressed
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     * @return a {@link ResourceInfo} if a matching resource based off the inputs
-     *  can be found, otherwise returns <code>null</code>
-     */
-    public abstract ResourceInfo findResource(LibraryInfo library,
-                                              String resourceName,
-                                              String localePrefix,
-                                              boolean compressable,
-                                              FacesContext ctx);
-
-
-    /**
-     * <p>
-     * The default implementation of this method will call through to
-     * {@link ResourceHelper#getURL(ResourceInfo, javax.faces.context.FacesContext)}
-     * and leverage the URL to obtain the date information of the resource and
-     * return the value of <code>URLConnection.getLastModified()</code>
-     * </p>
-     * @param resource the resource in question
-     * @param ctx the {@link FacesContext} for the current request
-     * @return the date of the resource in milliseconds (since epoch),
-     *  or <code>0</code> if the date cannot be determined
-     */
-    public long getLastModified(ResourceInfo resource, FacesContext ctx) {
-        
-        URL url = getURL(resource, ctx);
-        // resource may have been deleted.
-        if (url == null) {
-            return 0;
-        }
-        long ret;
-        InputStream input = null;
-        try {
-            URLConnection con = url.openConnection();
-            con.setUseCaches(false);
-            con.connect();
-            input = con.getInputStream();
-            ret = con.getLastModified();
-        } catch (IOException ioe) {
-            ret = 0;
-        } finally {
-            if (input != null) {
-                try {
-                    input.close();
-                } catch (IOException ignored) { }
-            }
-        }
-
-        return ((ret >= 0) ? ret : 0);
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * If a {@link ResourceInfo} is not compressable, {@link #getInputStream(ResourceInfo, javax.faces.context.FacesContext)}
-     * will call this method to return a stream to the actual resource.
-     *
-     * @param info  the resource to obtain an InputStream to
-     * @param ctx the {@link FacesContext} for the current request
-     * @return an InputStream to the resource
-     * @throws IOException if an error occurs obtaining the stream
-     */
-    protected abstract InputStream getNonCompressedInputStream(ResourceInfo info,
-                                                               FacesContext ctx)
-    throws IOException;
-
-
-    /**
-     * <p>
-     * Given a collection of path names:
-     * </p>
-     * <pre>
-     *   1.1, scripts, images, 1.2
-     * </pre>
-     * <p>
-     * this method will pick out the directories that represent a library or
-     * resource version and return the latest version found, if any.
-     * </p>
-     *
-     * @param resourcePaths a collection of paths (consisting of single path
-     *  elements)
-     * @param isResource <code>true</code> if the version being looked up
-     *  is for a reource, otherwise, pass <code>false</code> if the version
-     *  is a library version
-     * @return the latest version or if no version can be detected, otherwise
-     *  this method returns <code>null</code>
-     */
-    protected VersionInfo getVersion(Collection<String> resourcePaths, boolean isResource) {
-
-        List<VersionInfo> versionedPaths = new ArrayList<VersionInfo>(resourcePaths.size());
-        for (String p : resourcePaths) {
-            VersionInfo vp = getVersion(p, isResource);
-            if (vp != null) {
-                versionedPaths.add(vp);
-            }
-        }
-        VersionInfo version = null;
-        if (!versionedPaths.isEmpty()) {
-            Collections.sort(versionedPaths);
-            version = versionedPaths.get(versionedPaths.size() - 1);
-        }
-        return version;
-
-    }
-
-
-    /**
-     * Utility method to compress the content of the original resource
-     * to the temporary directory specified by {@link com.sun.faces.application.resource.ResourceInfo#getCompressedPath()}.
-     *
-     * @param info the resource to be compressed
-     * @return <code>true</code> if compression succeeded <em>and</em> the compressed
-     *  result is smaller than the original content, otherwise <code>false</code>
-     * @throws IOException if any error occur reading/writing
-     */
-    protected boolean compressContent(ResourceInfo info)
-    throws IOException {
-
-        InputStream source = null;
-        OutputStream dest = null;
-        try {
-            URL url = info.getHelper()
-                  .getURL(info, FacesContext.getCurrentInstance());
-            URLConnection conn = url.openConnection();
-            conn.setUseCaches(false);
-            conn.connect();
-            source = conn.getInputStream();
-            byte[] buf = new byte[512];
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            dest = new GZIPOutputStream(baos);
-            int totalRead = 0;
-            for (int len = source.read(buf); len != -1; len = source.read(buf)) {
-                dest.write(buf, 0, len);
-                totalRead += len;
-            }
-            dest.flush();
-            try {
-                dest.close();
-            } catch (IOException ignored) { }
-
-            if (baos.size() < totalRead) {
-                String outputFile = info.getCompressedPath()
-                                + File.separatorChar
-                                + COMPRESSED_CONTENT_FILENAME;
-                dest = new FileOutputStream(outputFile);
-                dest.write(baos.toByteArray());
-                dest.flush();                
-                return true;
-            }
-            return false;
-        } finally {
-            if (source != null) {
-                try {
-                    source.close();
-                } catch (IOException ignored) { }
-            }
-            if (dest != null) {
-                try {
-                    dest.close();
-                } catch (IOException ignored) { }
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * This method attempt to verify that the user agent can accept a gzip
-     * encoded response by interrogating the <code>Accept-Encoding</code>
-     * requester header.  If it is determined safe to send a gzip encoded
-     * response, send the <code>Content-Encoding</code> header with a value
-     * of <code>gzip</code>.</p>
-     *
-     * <p>
-     * See <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html>RFC 2616, sec. 14</a>
-     * for details on the accept-encoding header.
-     * </p>
-     *
-     * <p>
-     * Implementation Note:  It is safe to cast to a <code>HttpServletResponse</code>
-     * as this method will only be called when handling a resource request.  Resource
-     * serving is outside of the JSF and Portlet lifecycle.
-     * </p>
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @return <code>true</code> if compressed content can be sent to the client,
-     *  otherwise <code>false</code>
-     */
-    protected boolean clientAcceptsCompression(FacesContext ctx) {
-
-        ExternalContext extCtx = ctx.getExternalContext();
-        Object response = extCtx.getResponse();
-        if (response instanceof HttpServletResponse) {
-            String[] values =
-                  extCtx.getRequestHeaderValuesMap().get("accept-encoding");
-            boolean gzipFound = false;
-            for (String value : values) {
-                if (value.contains("gzip;q=0")) {
-                    // gzip compression not accepted by the user-agent
-                    return false;
-                }
-                if (value.contains("gzip")) {
-                    // gzip compression explicitly listed as supported
-                    // by the user agent.  Break here as we don't need to continue.
-                    gzipFound = true;
-                    break;
-                }
-                if (value.contains("*")
-                      && (!value.contains("*;q=0,") && !value.endsWith("*;q=0"))) {
-                    // gzip not explictly listed, but client sent *
-                    // meaning gzip is implicitly acceptable
-                    // keep looping to ensure we don't come across a
-                    // *;q=0 value.
-                    gzipFound = true;
-                }
-            }                                               
-            
-            if (gzipFound) {
-                ((HttpServletResponse) response)
-                      .setHeader("Content-Encoding", "gzip");
-                return true;
-            }
-        }
-
-        return false;
-
-    }
-
-
-    /**
-     * <p>
-     * Utility method to peform the necessary actions to compress content.
-     * </p>
-     *
-     * <p>
-     * Implmentation Note:  If an exception occurs while compressing the content,
-     * log the IOException and rebuilt the {@link ResourceInfo} as non-compressable.
-     * </p>
-     *
-     * @param resource the resource to compression
-     * @return the ResourceInfo after compression is complete.  If compression
-     *  was successful, this should be the same instance.  If compression was
-     *  not successful, it will be a different instance than what was passed.
-     */
-    protected ResourceInfo handleCompression(ResourceInfo resource) {
-
-        try {
-            if (!resource.supportsEL() && !compressContent(resource)) {
-                resource = rebuildAsNonCompressed(resource);
-            }
-        } catch (IOException ioe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           ioe.getMessage(),
-                           ioe);
-            }
-            resource = rebuildAsNonCompressed(resource);
-        }
-        return resource;
-
-    }
-
-
-    protected boolean resourceSupportsEL(String resourceName, FacesContext ctx) {
-
-        ExternalContext extContext = ctx.getExternalContext();
-        String contentType = extContext.getMimeType(resourceName);
-        return (contentType != null
-                   && (Arrays.binarySearch(EL_CONTENT_TYPES, contentType) >= 0));
-
-    }
-
-    
-    // --------------------------------------------------------- Private Methods
-
-
-    private ResourceInfo rebuildAsNonCompressed(ResourceInfo resource) {
-
-        LibraryInfo library = resource.getLibraryInfo();
-        ResourceInfo ret;
-        if (library != null) {
-            ret = new ResourceInfo(resource.library,
-                                   resource.name,
-                                   resource.version,
-                                   false,
-                                   resource.supportsEL,
-                                   resource.isDevStage,
-                                   resource.cacheTimestamp);
-        } else {
-            ret = new ResourceInfo(resource.name,
-                                   resource.version,
-                                   resource.localePrefix,
-                                   this,
-                                   false,
-                                   resource.supportsEL,
-                                   resource.isDevStage,
-                                   resource.cacheTimestamp);
-        }
-        return ret;
-
-    }
-
-    /**
-     * @param pathElement the path element to verify
-     * @param isResource <code>true</code> if the version being looked up
-     *  is for a reource, otherwise, pass <code>false</code> if the version
-     *  is a library version
-     * @return <code>true</code> if this path element represents a version
-     *  (i.e. matches {@link #LIBRARY_VERSION_PATTERN}), otherwise
-     *  returns <code>false</code>
-     */
-    private VersionInfo getVersion(String pathElement, boolean isResource) {
-
-        String[] pathElements = Util.split(pathElement, "/");
-        String path = pathElements[pathElements.length - 1];
-
-        String extension = null;
-        if (isResource) {
-            Matcher m = RESOURCE_VERSION_PATTERN.matcher(path);
-            return ((m.matches())
-                    ? new VersionInfo(m.group(1), m.group(2))
-                    : null);
-        } else {
-            return ((LIBRARY_VERSION_PATTERN.matcher(path).matches())
-                    ? new VersionInfo(path, extension)
-                    : null);
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static final class ELEvaluatingInputStream extends InputStream {
-
-        // Premature optimization is the root of all evil.  Blah blah.
-        private List<Integer> buf = new ArrayList<Integer>(1024);
-        private boolean failedExpressionTest = false;
-        private boolean writingExpression = false;
-        private InputStream inner;
-        private ResourceInfo info;
-        private FacesContext ctx;
-        private boolean expressionEvaluated;
-
-        // ---------------------------------------------------- Constructors
-
-
-        public ELEvaluatingInputStream(FacesContext ctx,
-                                       ResourceInfo info,
-                                       InputStream inner) {
-
-            this.inner = inner;
-            this.info = info;
-            this.ctx = ctx;
-
-        }
-
-
-        // ------------------------------------------------ Methods from InputStream
-
-
-        @Override
-        public int read() throws IOException {
-            int i;
-            char c;
-
-            if (failedExpressionTest) {
-                i = nextRead;
-                nextRead = -1;
-                failedExpressionTest = false;
-            } else if (writingExpression) {
-                if (0 < buf.size()) {
-                    i = buf.remove(0);
-                } else {
-                    writingExpression = false;
-                    i = inner.read();
-                }
-            } else {
-                // Read a character.
-                i = inner.read();
-                c = (char) i;
-                // If it *might* be an expression...
-                if (c == '#') {
-                    // read another character.
-                    i = inner.read();
-                    c = (char) i;
-                    // If it's '{', assume we have an expression.
-                    if (c == '{') {
-                        // read it into the buffer, and evaluate it into the
-                        // same buffer.
-                        readExpressionIntoBufferAndEvaluateIntoBuffer();
-                        // set the flag so that we need to return content
-                        // from the buffer.
-                        writingExpression = true;
-                        // Make sure to swallow the '{'.
-                        i = this.read();
-                    } else {
-                        // It's not an expression, we need to return '#',
-                        i = (int) '#';
-                        // then return whatever we just read, on the
-                        // *next* read;
-                        nextRead = (int) c;
-                        failedExpressionTest = true;
-                    }
-                }
-            }
-
-            return i;
-        }
-
-
-        private int nextRead = -1;
-
-
-        private void readExpressionIntoBufferAndEvaluateIntoBuffer()
-              throws IOException {
-            int i;
-            char c;
-            do {
-                i = inner.read();
-                c = (char) i;
-                if (c == '}') {
-                    evaluateExpressionIntoBuffer();
-                } else {
-                    buf.add(i);
-                }
-            } while (c != '}' && i != -1);
-        }
-
-        /*
-        * At this point, we know that getBuf() returns a List<Integer>
-        * that contains the bytes of the expression.
-        * Turn it into a String, turn the String into a ValueExpression,
-        * evaluate it, store the toString() of it in
-        * expressionResult;
-        */
-        private void evaluateExpressionIntoBuffer() {
-            char chars[] = new char[buf.size()];
-            for (int i = 0, len = buf.size(); i < len; i++) {
-                chars[i] = (char) (int) buf.get(i);
-            }
-            String expressionBody = new String(chars);
-            int colon;
-            // If this expression contains a ":"
-            if (-1 != (colon = expressionBody.indexOf(":"))) {
-                // Make sure it contains only one ":"
-                if (!isPropertyValid(expressionBody)) {
-                    String message =
-                          MessageUtils
-                                .getExceptionMessageString(MessageUtils.INVALID_RESOURCE_FORMAT_COLON_ERROR,
-                                                           expressionBody);
-                    throw new ELException(message);
-                }
-                String[] parts = Util.split(expressionBody, ":");
-                if (null == parts[0] || null == parts[1]) {
-                    String message =
-                          MessageUtils
-                                .getExceptionMessageString(MessageUtils.INVALID_RESOURCE_FORMAT_NO_LIBRARY_NAME_ERROR,
-                                                           expressionBody);
-                    throw new ELException(message);
-
-                }
-                try {
-                    int mark = parts[0].indexOf("[") + 2;
-                    char quoteMark = parts[0].charAt(mark - 1);
-                    parts[0] = parts[0].substring(mark, colon);
-                    if (parts[0].equals("this")) {
-                        parts[0] = info.getLibraryInfo().getName();
-                        mark = parts[1].indexOf("]") - 1;
-                        parts[1] = parts[1].substring(0, mark);
-                        expressionBody = "resource[" + quoteMark + parts[0] +
-                                         ":" + parts[1] + quoteMark + "]";
-                    }
-                }
-                catch (Exception e) {
-                    String message =
-                          MessageUtils
-                                .getExceptionMessageString(MessageUtils.INVALID_RESOURCE_FORMAT_ERROR,
-                                                           expressionBody);
-                    throw new ELException(message);
-
-                }
-            }
-            ELContext elContext = ctx.getELContext();
-            expressionEvaluated = true;
-            ValueExpression ve =
-                  ctx.getApplication().getExpressionFactory().
-                        createValueExpression(elContext, "#{" + expressionBody +
-                                                         "}", String.class);
-            Object value = ve.getValue(elContext);
-            String expressionResult = ((value != null) ? value.toString() : "");
-            buf.clear();
-            for (int i = 0, len = expressionResult.length(); i < len; i++) {
-                buf.add((int) expressionResult.charAt(i));
-            }
-        }
-
-
-        @Override
-        public void close() throws IOException {
-
-            if (!expressionEvaluated) {
-                info.disableEL();
-            }
-            inner.close();
-            super.close();
-
-        }
-
-        
-        private boolean isPropertyValid(String property) {
-            int idx = property.indexOf(':');
-            return (property.indexOf(':', idx + 1) == -1);
-        }
-
-    } // END ELEvaluatingInputStream
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceImpl.java
deleted file mode 100644
index 3268615..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceImpl.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Externalizable;
-import java.io.ObjectOutput;
-import java.io.ObjectInput;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TimeZone;
-import java.util.Collections;
-import java.util.logging.Logger;
-
-import javax.faces.application.Resource;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.util.FacesLogger;
-import java.util.logging.Level;
-
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.ProjectStage;
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Default implementation of {@link javax.faces.application.Resource}.
- * The ResourceImpl instance itself has the same lifespan as the
- * request, however, the ResourceInfo instances that back this object
- * are cached by the ResourceManager to reduce the time spent scanning
- * for resources.
- */
-public class ResourceImpl extends Resource implements Externalizable {
-
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    /* HTTP Date format required by the HTTP/1.1 RFC */
-    private static final String RFC1123_DATE_PATTERN =
-          "EEE, dd MMM yyyy HH:mm:ss zzz";
-
-    private static final String IF_MODIFIED_SINCE = "If-Modified-Since";
-
-    private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
-
-
-    /* The meta data on the resource */
-    private transient ResourceInfo resourceInfo;
-
-    /*
-     * Response headers that need to be added by the ResourceManager
-     * implementation.
-     */
-    private transient Map<String,String> responseHeaders;
-
-    
-    /**
-     * Time when this application was started.  This is used to generate
-     * expiration headers.
-     */
-    private long initialTime;
-
-
-    /**
-     * Lifespan of this resource for caching purposes.
-     */
-    private long maxAge;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Necessary for serialization.
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    public ResourceImpl() { }
-
-
-    /**
-     * Creates a new instance of ResourceBase
-     */
-    public ResourceImpl(ResourceInfo resourceInfo,
-                        String contentType,
-                        long initialTime,
-                        long maxAge) {
-
-        this.resourceInfo = resourceInfo;
-        super.setResourceName(resourceInfo.getName());
-        super.setLibraryName(resourceInfo.getLibraryInfo() != null
-                             ? resourceInfo.getLibraryInfo().getName()
-                             : null);
-        super.setContentType(contentType);
-        this.initialTime = initialTime;
-        this.maxAge = maxAge;
-
-    }
-
-    @Override
-    public boolean equals(Object o) {
-
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        ResourceImpl resource = (ResourceImpl) o;
-
-        return resourceInfo.equals(resource.resourceInfo);
-
-    }
-
-    @Override
-    public int hashCode() {
-
-        return resourceInfo.hashCode();
-
-    }
-
-
-    // --------------------------------------------------- Methods from Resource
-
-
-    /**
-     * @see javax.faces.application.Resource#getInputStream()
-     */
-    public InputStream getInputStream() throws IOException {
-
-        return resourceInfo.getHelper().getInputStream(resourceInfo,
-                                                       FacesContext.getCurrentInstance());
-
-    }
-    
-
-
-    /**
-     * @see javax.faces.application.Resource#getURL()
-     */
-    public URL getURL() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        return resourceInfo.getHelper().getURL(resourceInfo, ctx);
-    }
-
-
-    /**
-     * <p>
-     * Implementation note.  Any values added to getResponseHeaders()
-     * will only be visible across multiple calls to this method when
-     * servicing a resource request (i.e. {@link ResourceHandler#isResourceRequest(javax.faces.context.FacesContext)}
-     * returns <code>true</code>).  If we're not servicing a resource request,
-     * an empty Map will be returned and the values added are effectively thrown
-     * away.
-     * </p>
-     * 
-     * @see javax.faces.application.Resource#getResponseHeaders()
-     */
-    public Map<String, String> getResponseHeaders() {
-
-        if (isResourceRequest()) {
-            if (responseHeaders == null)
-            responseHeaders = new HashMap<String, String>(6, 1.0f);
-
-            long expiresTime;
-            FacesContext ctx = FacesContext.getCurrentInstance();
-
-            if (ctx.isProjectStage(ProjectStage.Development)) {
-                expiresTime = new Date().getTime();
-            } else {
-                expiresTime = new Date().getTime() + maxAge;
-            }
-            SimpleDateFormat format =
-                  new SimpleDateFormat(RFC1123_DATE_PATTERN, Locale.US);
-            format.setTimeZone(GMT);
-            responseHeaders.put("Expires", format.format(new Date(expiresTime)));
-
-            URL url = getURL();
-            InputStream in = null;
-            try {
-                URLConnection conn = url.openConnection();
-                conn.setUseCaches(false);
-                conn.connect();
-                in = conn.getInputStream();
-                long lastModified = conn.getLastModified();
-                long contentLength = conn.getContentLength();
-                if (lastModified == 0) {
-                    lastModified = initialTime;
-                }
-                responseHeaders.put("Last-Modified", format.format(new Date(lastModified)));
-                if (lastModified != 0 && contentLength != -1) {
-                    responseHeaders.put("ETag", "W/\""
-                                    + contentLength
-                                    + '-'
-                                    + lastModified
-                                    + '"');
-                }
-            } catch (IOException ignored) {
-            } finally {
-                if (in != null) {
-                    try {
-                        in.close();
-                    } catch (IOException ignored) { }
-                }
-            }
-            return responseHeaders;
-        } else {
-            return Collections.emptyMap();
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Resource#getRequestPath()
-     */
-    public String getRequestPath() {
-
-        String uri;
-        FacesContext context = FacesContext.getCurrentInstance();
-        String facesServletMapping = Util.getFacesMapping(context);
-        // If it is extension mapped
-        if (Util.isPrefixMapped(facesServletMapping)) {
-            uri = facesServletMapping + ResourceHandler.RESOURCE_IDENTIFIER + '/' +
-                  getResourceName();
-        } else {
-            uri = ResourceHandler.RESOURCE_IDENTIFIER + '/' + getResourceName() +
-                  facesServletMapping;
-        }
-        boolean queryStarted = false;
-        if (null != getLibraryName()) {
-            queryStarted = true;
-            uri += "?ln=" + getLibraryName();
-        }
-        String version = "";
-        if (resourceInfo.getLibraryInfo() != null && resourceInfo.getLibraryInfo().getVersion() != null) {
-            version += resourceInfo.getLibraryInfo().getVersion().toString();
-        }
-        if (resourceInfo.getVersion() != null) {
-            version += resourceInfo.getVersion().toString();
-        }
-        if (version.length() > 0) {
-            uri += ((queryStarted) ? "&v=" : "?v=") + version;
-            queryStarted = true;
-        }
-        String localePrefix = resourceInfo.getLocalePrefix();
-        if (localePrefix != null) {
-            uri += ((queryStarted) ? "&loc=" : "?loc=") + localePrefix;
-            queryStarted = true;
-        }
-        if ("jsf.js".equals(getResourceName()) && "javax.faces".equals(getLibraryName())) {
-            ProjectStage stage = context.getApplication().getProjectStage();
-            switch (stage) {
-                case Development:
-                    uri += ((queryStarted) ? "&stage=Development" : "?stage=Development" );
-                    break;
-                case SystemTest:
-                    uri += ((queryStarted) ? "&stage=SystemTest" : "?stage=SystemTest" );
-                    break;
-                case UnitTest:
-                    uri += ((queryStarted) ? "&stage=UnitTest" : "?stage=UnitTest" );
-                    break;
-                default:
-                    assert(stage.equals(ProjectStage.Production));
-            }
-        }
-
-        uri = context.getApplication().getViewHandler()
-              .getResourceURL(context,
-                              uri);
-
-        return uri;
-
-    }
-
-
-    /**
-     * @see javax.faces.application.Resource#userAgentNeedsUpdate(javax.faces.context.FacesContext)
-     */
-    public boolean userAgentNeedsUpdate(FacesContext context) {
-
-        // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
-        // 14.25 If-Modified-Since
-
-        // if the requested variant has not been modified since the time
-        // specified in this field, an entity will not be returned from the
-        // server; instead, a 304 (not modified) response will be returned
-        // without any message-body.
-
-        // A date which is later than the server's current time is
-        // invalid.
-
-        Map<String,String> requestHeaders =
-              context.getExternalContext().getRequestHeaderMap();
-
-        if (requestHeaders.containsKey(IF_MODIFIED_SINCE)) {
-            long lastModifiedOfResource = resourceInfo.getLastModified(context);
-            long lastModifiedHeader = getIfModifiedHeader(context.getExternalContext());
-            return lastModifiedOfResource > lastModifiedHeader;
-        }
-        return true;
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /*
-     * This method should only be called if the 'If-Modified-Since' header
-     * is present in the request header map.
-     */
-    private long getIfModifiedHeader(ExternalContext extcontext) {
-
-        Object request = extcontext.getRequest();
-        if (request instanceof HttpServletRequest) {
-            // try to use the container where we can.  V3 for instance
-            // has a FastHttpDateFormat format/parse implementation
-            // which is more than likely more performant than SimpleDateFormat
-            // (otherwise, why would it be there?).
-            return ((HttpServletRequest) request).getDateHeader(IF_MODIFIED_SINCE);
-        } else {
-            SimpleDateFormat format =
-                  new SimpleDateFormat(RFC1123_DATE_PATTERN, Locale.US);
-            try {
-                Date ifModifiedSinceDate = format.parse(extcontext.getRequestHeaderMap().get(IF_MODIFIED_SINCE));
-                return ifModifiedSinceDate.getTime();
-            } catch (ParseException ex) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.application.resource.invalid_if_modified_since_header",
-                               new Object[]{
-                                     extcontext.getRequestHeaderMap().get(IF_MODIFIED_SINCE)
-                               });
-                    if (ex != null) {
-                        LOGGER.log(Level.WARNING, "", ex);
-                    }
-                }
-                return -1;
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------- Methods from Externalizable
-
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-
-        out.writeObject(getResourceName());
-        out.writeObject(getLibraryName());
-        out.writeObject(getContentType());
-        out.writeLong(initialTime);
-        out.writeLong(maxAge);
-
-    }
-
-    public void readExternal(ObjectInput in)
-    throws IOException, ClassNotFoundException {
-
-        setResourceName((String) in.readObject());
-        setLibraryName((String) in.readObject());
-        setContentType((String) in.readObject());
-        initialTime = in.readLong();
-        maxAge = in.readLong();
-
-        ResourceManager manager =
-              ApplicationAssociate.getInstance(FacesContext.getCurrentInstance().getExternalContext()).getResourceManager();
-        resourceInfo = manager.findResource(getLibraryName(),
-                                            getResourceName(),
-                                            getContentType(),
-                                            FacesContext.getCurrentInstance());
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private boolean isResourceRequest() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        return (ctx.getApplication().getResourceHandler().isResourceRequest(ctx));
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceInfo.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceInfo.java
deleted file mode 100644
index 535688a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceInfo.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.io.File;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <p/>
- * <code>ResourceInfo</code> is a simple wrapper class for information
- * pertainant to building a complete resource path using a Library.
- * <p/>
- */
-public class ResourceInfo {
-
-    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
-    private static final String COMPRESSED_CONTENT_DIRECTORY =
-          "jsf-compressed";
-
-    String name;
-    String libraryName;
-    String localePrefix;
-    boolean cacheTimestamp;
-    boolean isDevStage;
-
-    VersionInfo version;
-    ResourceHelper helper;
-    LibraryInfo library;
-    String path;
-    String compressedPath;
-    boolean compressible;
-    boolean supportsEL;
-    private volatile long lastModified = Long.MIN_VALUE;
-
-
-    /**
-     * Constructs a new <code>ResourceInfo</code> using the specified details.
-     * The {@link ResourceHelper} of the resource will be the same as the
-     * {@link ResourceHelper} of the {@link LibraryInfo}.
-     * @param library the library containing this resource
-     * @param name the resource name
-     * @param version the version of this resource (if any)
-     * @param compressible if this resource should be compressed
-     * @param supportsEL <code>true</code> if this resource may contain
-     *   EL expressions
-     * @param isDevStage true if this context is development stage
-     * @param cacheTimestamp <code>true</code> if the modification time of the
-     *  resource should be cached.  The value of this parameter will be ignored
-     *  when {@link #isDevStage} is <code>true</code>
-     */
-    public ResourceInfo(LibraryInfo library,
-                        String name,
-                        VersionInfo version,
-                        boolean compressible,
-                        boolean supportsEL,
-                        boolean isDevStage,
-                        boolean cacheTimestamp) {
-        this.name = name;
-        this.version = version;
-        this.helper = library.getHelper();
-        this.library = library;
-        this.libraryName = library.getName();
-        this.localePrefix = library.getLocalePrefix();
-        this.compressible = compressible;
-        this.supportsEL = supportsEL;
-        this.isDevStage = isDevStage;
-        this.cacheTimestamp = (!isDevStage && cacheTimestamp);
-        initPath(isDevStage);
-    }
-
-    /**
-     * Constructs a new <code>ResourceInfo</code> using the specified details.
-     * @param name the resource name
-     * @param version the version of the resource
-     * @param localePrefix the locale prefix for this resource (if any)
-     * @param helper helper the helper class for this resource
-     * @param compressible if this resource should be compressed
-     * @param supportsEL <code>true</code> if this resource may contain
-     *   EL expressions
-     * @param isDevStage true if this context is development stage
-     * @param cacheTimestamp <code>true</code> if the modification time of the
-     *  resource should be cached.  The value of this parameter will be ignored
-     *  when {@link #isDevStage} is <code>true</code>
-     */
-    ResourceInfo(String name,
-                 VersionInfo version,
-                 String localePrefix,
-                 ResourceHelper helper,
-                 boolean compressible,
-                 boolean supportsEL,
-                 boolean isDevStage,
-                 boolean cacheTimestamp) {
-        this.name = name;
-        this.version = version;
-        this.localePrefix = localePrefix;
-        this.helper = helper;
-        this.compressible = compressible;
-        this.supportsEL = supportsEL;
-        this.isDevStage = isDevStage;
-        this.cacheTimestamp = (!isDevStage && cacheTimestamp);
-        initPath(isDevStage);
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        if (this == obj) {
-            return true;
-        }
-        final ResourceInfo other = (ResourceInfo) obj;
-        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
-            return false;
-        }
-        if ((this.libraryName == null) ? (other.libraryName != null) : !this.libraryName.equals(other.libraryName)) {
-            return false;
-        }
-        if ((this.localePrefix == null) ? (other.localePrefix != null) : !this.localePrefix.equals(other.localePrefix)) {
-            return false;
-        }
-        if (this.version != other.version && (this.version == null || !this.version.equals(other.version))) {
-            return false;
-        }
-        if (this.library != other.library && (this.library == null || !this.library.equals(other.library))) {
-            return false;
-        }
-        if ((this.path == null) ? (other.path != null) : !this.path.equals(other.path)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0);
-        hash = 97 * hash + (this.libraryName != null ? this.libraryName.hashCode() : 0);
-        hash = 97 * hash + (this.localePrefix != null ? this.localePrefix.hashCode() : 0);
-        hash = 97 * hash + (this.version != null ? this.version.hashCode() : 0);
-        hash = 97 * hash + (this.library != null ? this.library.hashCode() : 0);
-        hash = 97 * hash + (this.path != null ? this.path.hashCode() : 0);
-        return hash;
-    }
-
-    /**
-     * @return return the library name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @return return the version of the resource, or <code>null</code> if the
-     *         resource isn't versioned.
-     */
-    public VersionInfo getVersion() {
-        return version;
-    }
-
-   /**
-     * @return return the {@link ResourceHelper} for this resource
-     */
-    public ResourceHelper getHelper() {
-        return helper;
-    }
-
-    /**
-     * @return the Library associated with this resource, if any.
-     */
-    public LibraryInfo getLibraryInfo() {
-        return library;
-    }
-
-    /**
-     * @return the Locale prefix, if any.
-     */
-    public String getLocalePrefix() {
-        return localePrefix;   
-    }
-
-    /**
-     * @return the full path (including the library, if any) of the
-     *  resource.
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * @return the path to which the compressed bits for this resource
-     *  reside.  If this resource isn't compressible and this method is called,
-     *  it will return <code>null</code>
-     */
-    public String getCompressedPath() {
-        return compressedPath;
-    }
-
-    /**
-     * @return <code>true</code> if this resource should be compressed,
-     *  otherwise <code>false</code>
-     */
-    public boolean isCompressable() {
-        return compressible;
-    }
-
-    /**
-     * @return <code>true</code> if the this resource may contain EL expressions
-     *  that should be evaluated, otherwise, return <code>false</code>
-     */
-    public boolean supportsEL() {
-        return supportsEL;
-    }
-
-    /**
-     * Disables EL evaluation for this resource. 
-     */
-    public void disableEL() {
-        this.supportsEL = false;
-    }
-
-    /**
-     * Returns the time this resource was last modified.
-     * If {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#CacheResourceModificationTimestamp}
-     * is true, the value will be cached for the lifetime if this <code>ResourceInfo</code>
-     * instance.
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     *
-     * @return the time this resource was last modified (number of milliseconds
-     *  since January 1, 1970 GMT).
-     *
-     */
-    public long getLastModified(FacesContext ctx) {
-
-        if (cacheTimestamp) {
-            if (lastModified == Long.MIN_VALUE) {
-                synchronized (this) {
-                    if (lastModified == Long.MIN_VALUE) {
-                        lastModified = helper.getLastModified(this, ctx);
-                    }
-                }
-            }
-            return lastModified;
-        } else {
-            return helper.getLastModified(this, ctx);
-        }
-        
-    }
-
-    @Override
-    public String toString() {
-        return "ResourceInfo{" +
-               "name='" + name + '\'' +
-               ", version=\'" + ((version != null) ? version : "NONE") + '\'' +
-               ", libraryName='" + libraryName + '\'' +
-               ", libraryVersion='" + ((library != null) ? library.getVersion() : "NONE") + '\'' +
-               ", localePrefix='" + ((localePrefix != null) ? localePrefix : "NONE") + '\'' +
-               ", path='" + path + '\'' +
-               ", compressible='" + compressible + '\'' +
-               ", compressedPath=" + compressedPath +
-               '}';
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * Create the full path to the resource.  If the resource can be compressed,
-     * setup the compressedPath ivar so that the path refers to the
-     * directory refereneced by the context attribute <code>javax.servlet.context.tempdir</code>.  
-     */
-    private void initPath(boolean isDevStage) {
-
-        StringBuilder sb = new StringBuilder(32);
-        if (library != null) {
-            sb.append(library.getPath());
-        } else {
-            sb.append(helper.getBaseResourcePath());
-        }
-        if (library == null && localePrefix != null) {
-            sb.append('/').append(localePrefix);
-        }
-        // Specialcasing for handling jsf.js in uncompressed state
-        if (isDevStage && "javax.faces".equals(libraryName) && "jsf.js".equals(name)) {
-            sb.append('/').append("jsf-uncompressed.js");
-        } else {
-            sb.append('/').append(name);
-        }
-        if (version != null) {
-            sb.append('/').append(version.getVersion());
-            String extension = version.getExtension();
-            if (extension != null) {
-                sb.append('.').append(extension);    
-            }
-        }
-        path = sb.toString();
-
-        if (compressible && !supportsEL) { // compression for static resources
-            FacesContext ctx = FacesContext.getCurrentInstance();
-            File servletTmpDir = (File) ctx.getExternalContext()
-                  .getApplicationMap().get("javax.servlet.context.tempdir");
-            if (servletTmpDir == null || !servletTmpDir.isDirectory()) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               "File ({0}) referenced by javax.servlet.context.tempdir attribute is null, or was is not a directory.  Compression for {1} will be unavailable.",
-                               new Object[]{((servletTmpDir == null)
-                                             ? "null"
-                                             : servletTmpDir.toString()),
-                                            path});
-                }
-                compressible = false;
-            } else {
-                String tPath = ((path.charAt(0) == '/') ? path : '/' + path);
-                File newDir = new File(servletTmpDir, COMPRESSED_CONTENT_DIRECTORY
-                                                      + tPath);
-
-                try {
-                    if (!newDir.exists()) {
-                        if (newDir.mkdirs()) {
-                            compressedPath = newDir.getCanonicalPath();
-                        } else {
-                            compressible = false;
-                            if (LOGGER.isLoggable(Level.WARNING)) {
-                                LOGGER.log(Level.WARNING,
-                                           "jsf.application.resource.unable_to_create_compression_directory",
-                                           newDir.getCanonicalPath());
-                            }
-                        }
-                    } else {
-                        compressedPath = newDir.getCanonicalPath();
-                    }
-                } catch (Exception e) {
-                	if (LOGGER.isLoggable(Level.SEVERE)) {
-	                    LOGGER.log(Level.SEVERE,
-	                               e.toString(),
-	                               e);
-                	}
-                    compressible = false;
-                }
-            }
-        }
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceManager.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceManager.java
deleted file mode 100644
index a1ff6f6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceManager.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import javax.faces.application.ProjectStage;
-import javax.faces.application.ResourceHandler;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.config.WebConfiguration;
-
-/**
- * This class is used to lookup {@link ResourceInfo} instances
- * and cache any that are successfully looked up to reduce the
- * computational overhead with the scanning/version checking.
- *
- * @since 2.0
- */
-public class ResourceManager {
-
-    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
-
-    /**
-     * {@link Pattern} for valid mime types to configure compression.
-     */
-    private static final Pattern CONFIG_MIMETYPE_PATTERN =
-          Pattern.compile("[a-z-]*/[a-z0-9.\\*-]*");
-
-    /**
-     * {@link ResourceHelper} used for looking up webapp-based resources.
-     */
-    private ResourceHelper webappHelper = new WebappResourceHelper();
-
-    /**
-     * {@link ResourceHelper} used for looking up classpath-based resources.
-     */
-    private ResourceHelper classpathHelper = new ClasspathResourceHelper();
-
-    /**
-     * Cache for storing {@link ResourceInfo} instances to reduce the cost
-     * of the resource lookups.
-     */
-    private ResourceCache cache;
-
-    /**
-     * Patterns used to find {@link ResourceInfo} instances that may have their
-     * content compressed.
-     */
-    private List<Pattern> compressableTypes;
-
-    /**
-     * This lock is used to ensure the lookup of compressable {@link ResourceInfo}
-     * instances are atomic to prevent theading issues when writing the compressed
-     * content during a lookup.
-     */
-    private ReentrantLock lock = new ReentrantLock();
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructs a new <code>ResourceManager</code>.  Note:  if the current
-     * {@link ProjectStage} is {@link ProjectStage#Development} caching or
-     * {@link ResourceInfo} instances will not occur.
-     */
-    public ResourceManager(ResourceCache cache) {
-
-        this.cache = cache;
-        initCompressableTypes();
-
-    }
-
-
-    // ------------------------------------------------------ Public Methods
-
-
-    /**
-     * <p>
-     * Attempt to lookup a {@link ResourceInfo} based on the specified
-     * <code>libraryName<code> and <code>resourceName</code>
-     * </p>
-     *
-     * <p>
-     * Implementation Note:  Synchronization is necessary when looking up
-     * compressed resources.  This ensures the atomicity of the content
-     * being compressed.  As such, the cost of doing this is low as once
-     * the resource is in the cache, the lookup won't be performed again
-     * until the cache is cleared.  That said, it's not a good idea
-     * to have caching disabled in a production environment if leveraging
-     * compression.
-     *
-     * If the resource isn't compressable, then we don't worry about creating
-     * a few extra copies of ResourceInfo until the cache is populated.
-     * </p>
-     *
-     * @param libraryName the name of the library (if any)
-     * @param resourceName the name of the resource
-     * @param contentType the content type of the resource.  This will be
-     *  used to determine if the resource is compressable
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current
-     *  request
-     *  
-     * @return a {@link ResourceInfo} if a resource if found matching the
-     *  provided arguments, otherwise, return <code>null</code>
-     */
-    public ResourceInfo findResource(String libraryName,
-                                     String resourceName,
-                                     String contentType,
-                                     FacesContext ctx) {
-
-        String localePrefix = getLocalePrefix(ctx);
-        ResourceInfo info =
-              getFromCache(resourceName, libraryName, localePrefix);
-        if (info == null) {
-            boolean compressable = isCompressable(contentType, ctx);
-            if (compressable) {
-                lock.lock();
-                try {
-                    info = getFromCache(resourceName, libraryName, localePrefix);
-                    if (info == null) {
-                        info = doLookup(libraryName,
-                                        resourceName,
-                                        localePrefix,
-                                        compressable,
-                                        ctx);
-                        if (info != null) {
-                            addToCache(info);
-                        }
-                    }
-                } finally {
-                    lock.unlock();
-                }
-            } else {
-                info = doLookup(libraryName,
-                                resourceName,
-                                localePrefix,
-                                compressable,
-                                ctx);
-                if (info != null) {
-                    addToCache(info);
-                }
-            }
-
-        }
-
-        return info;
-
-    }
-
-
-    // ----------------------------------------------------- Private Methods
-
-
-    /**
-     * Attempt to look up the Resource based on the provided details.
-     *
-     * @param libraryName the name of the library (if any)
-     * @param resourceName the name of the resource
-     * @param localePrefix the locale prefix for this resource (if any)
-     * @param compressable if this resource can be compressed
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current
-     *  request
-     *
-     * @return a {@link ResourceInfo} if a resource if found matching the
-     *  provided arguments, otherwise, return <code>null</code>
-     */
-    private ResourceInfo doLookup(String libraryName,
-                                  String resourceName,
-                                  String localePrefix,
-                                  boolean compressable,
-                                  FacesContext ctx) {
-        
-        LibraryInfo library = null;
-        if (libraryName != null && !libraryName.contains("../")) {
-            library = findLibrary(libraryName, localePrefix, ctx);
-            if (library == null && localePrefix != null) {
-                // no localized library found.  Try to find
-                // a library that isn't localized.
-                library = findLibrary(libraryName, null, ctx);
-            }
-            if (library == null) {
-                return null;
-            }
-        }
-
-        String resName = trimLeadingSlash(resourceName);
-        ResourceInfo info =
-              findResource(library, resName, localePrefix, compressable, ctx);
-        if (info == null && localePrefix != null) {
-            // no localized resource found, try to find a
-            // resource that isn't localized
-            info = findResource(library, resName, null, compressable, ctx);
-        }
-
-        // If no resource has been found so far, and we have a library that
-        // was found in the webapp filesystem, see if there is a matching
-        // library on the classpath.  If one is found, try to find a matching
-        // resource in that library.
-        if (info == null
-                && library != null
-                && library.getHelper() instanceof WebappResourceHelper) {
-            LibraryInfo altLibrary = classpathHelper.findLibrary(libraryName,
-                                                                 localePrefix,
-                                                                 ctx);
-            if (altLibrary != null) {
-                VersionInfo originalVersion = library.getVersion();
-                VersionInfo altVersion = altLibrary.getVersion();
-                if (originalVersion == null && altVersion == null) {
-                    library = altLibrary;
-                } else if (originalVersion == null && altVersion != null) {
-                    library = null;
-                } else if (originalVersion != null && altVersion == null) {
-                    library = null;
-                } else if (originalVersion.compareTo(altVersion) == 0) {
-                    library = altLibrary;
-                }
-
-            }
-   
-            if (library != null) {
-                info = findResource(library, resName, localePrefix, compressable, ctx);
-                if (info == null && localePrefix != null) {
-                    // no localized resource found, try to find a
-                    // resource that isn't localized
-                    info = findResource(library, resName, null, compressable, ctx);
-                }
-            }
-
-        }
-        return info;
-
-    }
-
-
-    /**
-     * @param name the resource name
-     * @param library the library name
-     * @param localePrefix the Locale prefix
-     * @return the {@link ResourceInfo} from the cache or <code>null</code>
-     *  if no cached entry is found
-     */
-    private ResourceInfo getFromCache(String name,
-                                      String library,
-                                      String localePrefix) {
-
-        if (cache == null) {
-            return null;
-        }
-        return cache.get(name, library, localePrefix);
-
-    }
-
-
-    /**
-     * Adds the the specified {@link ResourceInfo} to the cache.
-     * @param info the @{link ResourceInfo} to add.
-     */
-    private void addToCache(ResourceInfo info) {
-
-        if (cache == null) {
-            return;
-        }
-        cache.add(info);
-
-    }
-
-
-    /**
-     * <p> Attempt to lookup and return a {@link LibraryInfo} based on the
-     * specified <code>arguments</code>.
-     * <p/>
-     * <p> The lookup process will first search the file system of the web
-     * application.  If the library is not found, then it processed to
-     * searching the classpath.</p>
-     * <p/>
-     * <p> If a library is found, this method will return a {@link
-     * LibraryInfo} instance that contains the name, version, and {@link
-     * ResourceHelper}.</p>
-     *
-     * @param libraryName the library to find
-     * @param localePrefix the prefix for the desired locale
-     * @param ctx         the {@link FacesContext} for the current request
-     *
-     * @return the Library instance for the specified library
-     */
-     LibraryInfo findLibrary(String libraryName,
-                             String localePrefix,
-                             FacesContext ctx) {
-
-        LibraryInfo library = webappHelper.findLibrary(libraryName,
-                                                       localePrefix,
-                                                       ctx);
-        if (library == null) {
-            library = classpathHelper.findLibrary(libraryName,
-                                                  localePrefix,
-                                                  ctx);
-        }
-
-        // if not library is found at this point, let the caller deal with it
-        return library;
-    }
-
-
-   /**
-     * <p> Attempt to lookup and return a {@link ResourceInfo} based on the
-     * specified <code>arguments</code>.
-     * <p/>
-     * <p> The lookup process will first search the file system of the web
-     * application.  If the library is not found, then it processed to
-     * searching the classpath.</p>
-     * <p/>
-     * <p> If a library is found, this method will return a {@link
-     * LibraryInfo} instance that contains the name, version, and {@link
-     * ResourceHelper}.</p>
-     *
-     * @param library the library the resource should be found in
-     * @param resourceName the name of the resource
-     * @param localePrefix the prefix for the desired locale
-     * @param compressable <code>true</code> if the resource can be compressed
-     * @param ctx the {@link javax.faces.context.FacesContext} for the current request
-     *
-     * @return the Library instance for the specified library
-     */
-    private ResourceInfo findResource(LibraryInfo library,
-                                      String resourceName,
-                                      String localePrefix,
-                                      boolean compressable,
-                                      FacesContext ctx) {
-
-        if (library != null) {
-            return library.getHelper().findResource(library,
-                                                    resourceName,
-                                                    localePrefix,
-                                                    compressable,
-                                                    ctx);
-        } else {
-            ResourceInfo resource = webappHelper.findResource(null,
-                                                              resourceName,
-                                                              localePrefix,
-                                                              compressable,
-                                                              ctx);
-            if (resource == null) {
-                resource = classpathHelper.findResource(null,
-                                                        resourceName,
-                                                        localePrefix,
-                                                        compressable, 
-                                                        ctx);
-            }
-            return resource;
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * Obtains the application configured message resources for the current
-     * request locale.  If a ResourceBundle is found and contains the key
-     * <code>javax.faces.resource.localePrefix</code>, use the value associated
-     * with that key as the prefix for locale specific resources.
-     * </p>
-     *
-     * <p>
-     * For example, say the request locale is en_US, and
-     * <code>javax.faces.resourceLocalePrefix</code> is found with a value of
-     * <code>en</code>, a resource path within a web application might look like
-     * <code>/resources/en/corp/images/greetings.jpg</code>
-     * </p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @return the localePrefix based on the current request, or <code>null</code>
-     *  if no prefix can be determined
-     */
-    private String getLocalePrefix(FacesContext context) {
-
-        String localePrefix = null;
-        String appBundleName = context.getApplication().getMessageBundle();
-        if (null != appBundleName) {
-            Locale locale = 
-                  context.getApplication().getViewHandler().calculateLocale(context);
-                try {
-                    ResourceBundle appBundle =
-                          ResourceBundle.getBundle(appBundleName,
-                                                   locale,
-                                                   Util.getCurrentLoader(ResourceManager.class));
-                    localePrefix =
-                          appBundle
-                                .getString(ResourceHandler.LOCALE_PREFIX);
-                } catch (MissingResourceException ignored) { }
-        }
-        return localePrefix;
-
-    }
-
-
-    /**
-     * @param s input String
-     * @return the String without a leading slash if it has one.
-     */
-    private String trimLeadingSlash(String s) {
-
-        if (s.charAt(0) == '/') {
-            return s.substring(1);
-        } else {
-            return s;
-        }
-
-    }
-
-
-    /**
-     * @param contentType content-type in question
-     * @param ctx the @{link FacesContext} for the current request
-     * @return <code>true</code> if this resource can be compressed, otherwise
-     *  <code>false</code>
-     */
-    private boolean isCompressable(String contentType, FacesContext ctx) {
-
-        // No compression when developing.
-        if (contentType == null || ctx.isProjectStage(ProjectStage.Development)) {
-            return false;
-        } else {
-            if (compressableTypes != null && !compressableTypes.isEmpty()) {
-                for (Pattern p : compressableTypes) {
-                    boolean matches = p.matcher(contentType).matches();
-                    if (matches) {
-                        return true;
-                    }
-                }
-            }
-        }
-
-        return false;
-
-    }
-
-
-    /**
-     * Init <code>compressableTypes</code> from the configuration.
-     */
-    private void initCompressableTypes() {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        String value = config.getOptionValue(WebConfiguration.WebContextInitParameter.CompressableMimeTypes);
-        if (value != null && value.length() > 0) {
-            String[] values = Util.split(value, ",");
-            if (values != null) {
-                for (String s : values) {
-                    String pattern = s.trim();
-                    if (!isPatternValid(pattern)) {
-                        continue;
-                    }
-                    if (pattern.endsWith("/*")) {
-                        pattern = pattern.substring(0, pattern.indexOf("/*"));
-                        pattern += "/[a-z0-9.-]*";
-                    }
-                    if (compressableTypes == null) {
-                        compressableTypes = new ArrayList<Pattern>(values.length);
-                    }
-                    try {
-                        compressableTypes.add(Pattern.compile(pattern));
-                    } catch (PatternSyntaxException pse) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            // PENDING i18n
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.resource.mime.type.configration.invalid",
-                                       new Object[] { pattern, pse.getPattern()});
-                        }
-                    }
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * @param input input mime-type pattern from the configuration
-     * @return <code>true</code> if the input matches the expected pattern,
-     *  otherwise <code>false</code>
-     */
-    private boolean isPatternValid(String input) {
-
-        return (CONFIG_MIMETYPE_PATTERN.matcher(input).matches());
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/VersionInfo.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/VersionInfo.java
deleted file mode 100644
index b127074..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/VersionInfo.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-/**
- * Metadata pertaining to versions.
- */
-public class VersionInfo implements Comparable {
-
-    private String version;
-    private String extension;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructs a new VersionInfo instance.
-     * @param version the version
-     * @param extension the extension (only pertains to versioned resources,
-     *  not libraries, and thus may be <code>null</code>)
-     */
-    public VersionInfo(String version, String extension) {
-        this.version = version;
-        this.extension = extension;
-    }
-
-    
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @return the version
-     */
-    public String getVersion() {
-
-        return version;
-
-    }
-
-    /**
-     * @return the extension of the resource at processing time, or null
-     *  if this version is associated with a library
-     */
-    public String getExtension() {
-
-        return extension;
-
-    }
-
-
-    @Override
-    public String toString() {
-
-        return version;
-
-    }
-
-
-    @Override
-    public int hashCode() {
-
-        return (version.hashCode() ^ ((extension != null)
-                                      ? extension.hashCode()
-                                      : 0));
-
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-
-        if (obj == null || !(obj instanceof VersionInfo)) {
-            return false;
-        }
-        if (this == obj) {
-            return true;
-        }
-        VersionInfo passed = (VersionInfo) obj;
-        boolean versionsEqual = this.version.equals(passed.version);
-        boolean extensionEqual;
-        if (this.extension == null) {
-            extensionEqual = (passed.extension == null);
-        } else {
-            extensionEqual = this.extension.equals(passed.extension);
-        }
-        return (versionsEqual && extensionEqual);
-
-    }
-
-
-    // ------------------------------------------------- Methods from Comparable
-
-
-    public int compareTo(Object o) {
-        assert(o instanceof VersionInfo);
-        VersionInfo c = (VersionInfo) o;
-        return (this.version.compareTo(c.version));
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/resource/WebappResourceHelper.java b/jsf-ri/src/main/java/com/sun/faces/application/resource/WebappResourceHelper.java
deleted file mode 100644
index 1867f60..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/resource/WebappResourceHelper.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.application.ProjectStage;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.util.FacesLogger;
-
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.CacheResourceModificationTimestamp;
-
-/**
- * <p>
- * A {@link ResourceHelper} implementation for finding/serving resources
- * found within <code><contextroot>/resources</code> directory of a
- * web application.
- * </p>
- *
- * @since 2.0
- */
-public class WebappResourceHelper extends ResourceHelper {
-
-    private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger();
-
-    private static final String BASE_RESOURCE_PATH = "/resources";
-
-    private boolean cacheTimestamp;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public WebappResourceHelper() {
-
-        WebConfiguration webconfig = WebConfiguration.getInstance();
-        cacheTimestamp = webconfig.isOptionEnabled(CacheResourceModificationTimestamp);
-
-    }
-
-
-    // --------------------------------------------- Methods from ResourceHelper
-
-
-    /**
-     * @see com.sun.faces.application.resource.ResourceHelper#getBaseResourcePath()
-     */
-    public String getBaseResourcePath() {
-
-        return BASE_RESOURCE_PATH;
-
-    }
-
-
-    /**
-     * @see ResourceHelper#getInputStream(ResourceInfo,javax.faces.context.FacesContext)
-     */
-    protected InputStream getNonCompressedInputStream(ResourceInfo resource, FacesContext ctx)
-    throws IOException {
-
-        return ctx.getExternalContext().getResourceAsStream(resource.getPath());
-
-    }
-
-
-    /**
-     * @see ResourceHelper#getURL(ResourceInfo, javax.faces.context.FacesContext)
-     */
-    public URL getURL(ResourceInfo resource, FacesContext ctx) {
-
-        try {
-            return ctx.getExternalContext().getResource(resource.getPath());
-        } catch (MalformedURLException e) {
-            return null;
-        }
-
-    }
-
-
-    /**
-     * @see ResourceHelper#findLibrary(String, String, javax.faces.context.FacesContext)
-     */
-    public LibraryInfo findLibrary(String libraryName,
-                                   String localePrefix,
-                                   FacesContext ctx) {
-
-        String path;
-        if (localePrefix == null) {
-            path = getBaseResourcePath() + '/' + libraryName;
-        } else {
-            path = getBaseResourcePath()
-                   + '/'
-                   + localePrefix
-                   + '/'
-                   + libraryName;
-        }
-        Set<String> resourcePaths =
-              ctx.getExternalContext().getResourcePaths(path);
-        // it could be possible that there exists an empty directory
-        // that is representing the library, but if it's empty, treat it
-        // as non-existant and return null.
-        if (resourcePaths != null && !resourcePaths.isEmpty()) {
-            VersionInfo version = getVersion(resourcePaths, false);
-                return new LibraryInfo(libraryName, version, localePrefix, this);
-        }
-
-        return null;
-    }
-
-
-    /**
-     * @see ResourceHelper#findResource(LibraryInfo, String, String, boolean, javax.faces.context.FacesContext)
-     */
-    public ResourceInfo findResource(LibraryInfo library,
-                                     String resourceName,
-                                     String localePrefix,
-                                     boolean compressable,
-                                     FacesContext ctx) {
-
-        String basePath;
-        if (library != null) {
-            basePath = library.getPath() + '/' + resourceName;
-        } else {
-            if (localePrefix == null) {
-                basePath = getBaseResourcePath() + '/' + resourceName;
-            } else {
-                basePath = getBaseResourcePath()
-                           + '/'
-                           + localePrefix
-                           + '/'
-                           + resourceName;
-            }
-        }
-
-        // first check to see if the resource exists, if not, return null.  Let
-        // the caller decide what to do.
-        try {
-            if (ctx.getExternalContext().getResource(basePath) == null) {
-                return null;
-            }
-        } catch (MalformedURLException e) {
-            throw new FacesException(e);
-        }
-
-        // we got to hear, so we know the resource exists (either as a directory
-        // or file)
-        Set<String> resourcePaths =
-              ctx.getExternalContext().getResourcePaths(basePath);
-        // if getResourcePaths returns null or an empty set, this means that we have
-        // a non-directory resource, therefor, this resource isn't versioned.
-        ResourceInfo value;
-        if (resourcePaths == null || resourcePaths.size() == 0) {
-            if (library != null) {
-                value = new ResourceInfo(library,
-                                         resourceName,
-                                         null,
-                                         compressable,
-                                         resourceSupportsEL(resourceName, ctx),
-                                         ctx.isProjectStage(ProjectStage.Development),
-                                         cacheTimestamp);
-            } else {
-                value = new ResourceInfo(resourceName,
-                                         null,
-                                         localePrefix,
-                                         this,
-                                         compressable,
-                                         resourceSupportsEL(resourceName, ctx),
-                                         ctx.isProjectStage(ProjectStage.Development),
-                                         cacheTimestamp);
-            }
-        } else {
-            // ok, subdirectories exist, so find the latest 'version' directory
-            VersionInfo version = getVersion(resourcePaths, true);
-            if (version == null) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.application.resource.unable_to_determine_resource_version.",
-                               resourceName);
-                    return null;
-                }
-            }
-            if (library != null) {
-                value = new ResourceInfo(library,
-                                         resourceName,
-                                         version,
-                                         compressable,
-                                         resourceSupportsEL(resourceName, ctx),
-                                         ctx.isProjectStage(ProjectStage.Development),
-                                         cacheTimestamp);
-            } else {
-                value = new ResourceInfo(resourceName,
-                                         version,
-                                         localePrefix,
-                                         this,
-                                         compressable,
-                                         resourceSupportsEL(resourceName, ctx),
-                                         ctx.isProjectStage(ProjectStage.Development),
-                                         cacheTimestamp);
-            }
-        }
-
-        if (value.isCompressable()) {
-            value = handleCompression(value);
-        }
-        return value;
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/FaceletViewHandlingStrategy.java b/jsf-ri/src/main/java/com/sun/faces/application/view/FaceletViewHandlingStrategy.java
deleted file mode 100644
index 1ae5bcb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/FaceletViewHandlingStrategy.java
+++ /dev/null
@@ -1,1684 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import com.sun.faces.application.ApplicationAssociate;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FaceletsViewMappings;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FaceletsBufferSize;
-
-import com.sun.faces.context.StateContext;
-import com.sun.faces.facelets.Facelet;
-import com.sun.faces.facelets.FaceletFactory;
-import com.sun.faces.facelets.el.VariableMapperWrapper;
-import com.sun.faces.facelets.el.ContextualCompositeMethodExpression;
-import com.sun.faces.facelets.tag.composite.CompositeComponentBeanInfo;
-import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
-import com.sun.faces.facelets.tag.ui.UIDebug;
-import com.sun.faces.scripting.groovy.GroovyHelper;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.RequestStateManager;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.Cache;
-import com.sun.faces.util.Cache.Factory;
-
-import com.sun.faces.facelets.impl.DefaultFaceletFactory;
-
-import java.beans.BeanDescriptor;
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import javax.faces.FacesException;
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.view.StateManagementStrategy;
-import javax.faces.view.ViewMetadata;
-import javax.faces.view.facelets.FaceletContext;
-import javax.servlet.http.HttpServletResponse;
-import java.beans.BeanInfo;
-import java.beans.PropertyDescriptor;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.el.ExpressionFactory;
-import javax.el.MethodExpression;
-import javax.faces.component.ActionSource2;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.event.MethodExpressionActionListener;
-import javax.faces.event.MethodExpressionValueChangeListener;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ActionEvent;
-import javax.faces.validator.MethodExpressionValidator;
-import javax.faces.view.ActionSource2AttachedObjectHandler;
-import javax.faces.view.ActionSource2AttachedObjectTarget;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.view.AttachedObjectTarget;
-import javax.faces.view.BehaviorHolderAttachedObjectHandler;
-import javax.faces.view.BehaviorHolderAttachedObjectTarget;
-import javax.faces.view.EditableValueHolderAttachedObjectHandler;
-import javax.faces.view.EditableValueHolderAttachedObjectTarget;
-import javax.faces.view.ValueHolderAttachedObjectHandler;
-import javax.faces.view.ValueHolderAttachedObjectTarget;
-
-/**
- * This {@link ViewHandlingStrategy} handles Facelets/PDL-based views.
- */
-public class FaceletViewHandlingStrategy extends ViewHandlingStrategy {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    // FaceletFactory singleton for this application
-    private FaceletFactory faceletFactory;
-
-    // Array of viewId extensions that should be handled by Facelets
-    private String[] extensionsArray;
-
-    // Array of viewId prefixes that should be handled by Facelets
-    private String[] prefixesArray;
-    
-    public static final String IS_BUILDING_METADATA =
-          FaceletViewHandlingStrategy.class.getName() + ".IS_BUILDING_METADATA";
-    
-    private volatile StateManagementStrategyImpl stateManagementStrategy;
-    private MethodRetargetHandlerManager retargetHandlerManager =
-          new MethodRetargetHandlerManager();
-
-
-    private boolean groovyAvailable;
-    private int responseBufferSize;
-    private boolean responseBufferSizeSet;
-
-    private Cache<Resource, BeanInfo> metadataCache;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public FaceletViewHandlingStrategy() {
-
-        initialize();
-
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-    public static boolean isBuildingMetadata(FacesContext context) {
-        return context.getAttributes().containsKey(FaceletViewHandlingStrategy.IS_BUILDING_METADATA);
-    }
-
-    // ------------------------------------ Methods from ViewDeclarationLanguage
-
-    @Override
-    public StateManagementStrategy getStateManagementStrategy(FacesContext context, String viewId) {
-
-        StateContext stateCtx = StateContext.getStateContext(context);
-        if (stateCtx.partialStateSaving(viewId)) {
-            if (stateManagementStrategy == null) {
-                synchronized (this) {
-                    if (stateManagementStrategy == null) {
-                        stateManagementStrategy = new StateManagementStrategyImpl();
-                    }
-                }
-            }
-            return stateManagementStrategy;
-        }
-        return null; // a null return means use full state saving
-
-    }
-    
-    /*
-     * Called by Application.createComponent(Resource).
-     * 
-     * This method creates two temporary UIComponent instances to aid in
-     * the creation of the compcomp metadata.  These instances no longer
-     * needed after the method returns and can be safely garbage
-     * collected.
-     *
-     * PENDING(): memory analysis should be done to verify there are no
-     * memory leaks as a result of this implementation.
-
-     * The instances are
-
-     * 1. tmp: a javax.faces.NamingContainer to serve as the temporary
-     * top level component
-
-     * 2. facetComponent: a javax.faces.Panel to serve as the parent
-     * UIComponent that is passed to Facelets so that the <cc:interface>
-     * section can be parsed and understood.
-
-     * Per the compcomp spec, tmp has the compcomp Resource stored in
-     * its attr set under the key Resource.COMPONENT_RESOURCE_KEY.  tmp
-     * has the facetComponent added as its
-     * UIComponent.COMPOSITE_FACET_NAME facet.
-
-     */
-
-    @Override
-    public BeanInfo getComponentMetadata(FacesContext context, 
-            Resource ccResource) {
-
-        FaceletFactory factory = (FaceletFactory)
-                RequestStateManager.get(context, RequestStateManager.FACELET_FACTORY);
-        assert(factory instanceof DefaultFaceletFactory);
-        DefaultFaceletFactory ourFactory = (DefaultFaceletFactory) factory;
-        if (ourFactory.needsToBeRefreshed(ccResource.getURL())) {
-            metadataCache.remove(ccResource);
-        }
-
-        return metadataCache.get(ccResource);
-    }
-    
-    public BeanInfo createComponentMetadata(FacesContext context,
-            Resource ccResource) {
-
-        // PENDING this implementation is terribly wasteful.
-        // Must find a better way.
-        CompositeComponentBeanInfo result;
-        FaceletContext ctx = (FaceletContext)
-                context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
-        FaceletFactory factory = (FaceletFactory)
-              RequestStateManager.get(context, RequestStateManager.FACELET_FACTORY);
-        VariableMapper orig = ctx.getVariableMapper();
-
-    // create tmp and facetComponent
-        UIComponent tmp = context.getApplication().createComponent("javax.faces.NamingContainer");
-        UIPanel facetComponent = (UIPanel)
-                context.getApplication().createComponent("javax.faces.Panel");
-
-    // PENDING I think this can be skipped because we don't render
-    // this component instance.
-        facetComponent.setRendererType("javax.faces.Group");
-
-    // PENDING This could possibly be skipped too.  However, I think
-    // this is important because other tag handlers, within
-    // <cc:interface> expect it will be there.
-        tmp.getFacets().put(UIComponent.COMPOSITE_FACET_NAME, facetComponent);
-        // We have to put the resource in here just so the classes that eventually
-        // get called by facelets have access to it.
-        tmp.getAttributes().put(Resource.COMPONENT_RESOURCE_KEY, 
-                ccResource);
-        
-        Facelet f;
-
-        try {
-            f = factory.getFacelet(ccResource.getURL());
-            VariableMapper wrapper = new VariableMapperWrapper(orig) {
-
-                @Override
-                public ValueExpression resolveVariable(String variable) {
-                    return super.resolveVariable(variable);
-                }
-                
-            };
-            ctx.setVariableMapper(wrapper);
-            context.getAttributes().put(IS_BUILDING_METADATA, Boolean.TRUE);
-
-        // Because mojarra currently requires a <cc:interface>
-        // element within the compcomp markup, we can rely on the
-        // fact that its tag handler, InterfaceHandler.apply(), is
-        // called.  In this method, we first imbue facetComponent
-        // with any config information present on the <cc:interface>
-        // element.
-
-        // Then we do the normal facelet thing:
-        // this.nextHandler.apply().  This causes any child tag
-        // handlers of the <cc:interface> to be called.  The
-        // compcomp spec says each such tag handler is responsible
-        // for adding to the compcomp metadata, referenced from the
-        // facetComponent parent.
-
-            f.apply(context, facetComponent);
-
-        // When f.apply() returns (and therefore
-        // InterfaceHandler.apply() returns), the compcomp metadata
-        // pointed to by facetComponent is fully populated.
-
-        } catch (Exception e) {
-            if (e instanceof FacesException) {
-                throw (FacesException) e;
-            } else {
-                throw new FacesException(e);
-            }
-        }
-        finally {
-            context.getAttributes().remove(IS_BUILDING_METADATA);
-            ctx.setVariableMapper(orig);
-        }
-    // we extract the compcomp metadata and return it, making sure
-    // to discard tmp and facetComponent.  The compcomp metadata
-    // should be cacheable and shareable across threads, but this is
-    // not yet implemented.
-        result = (CompositeComponentBeanInfo) 
-                tmp.getAttributes().get(UIComponent.BEANINFO_KEY);
-        
-        return result;
-    }
-
-    @Override
-    public ViewMetadata getViewMetadata(FacesContext context, String viewId) {
-
-        return new ViewMetadataImpl(viewId);
-
-    }
-    
-    /**
-     * @see javax.faces.view.ViewDeclarationLanguage#getScriptComponentResource(javax.faces.context.FacesContext, javax.faces.application.Resource)
-     */
-    public Resource getScriptComponentResource(FacesContext context,
-            Resource componentResource) {
-
-        if (!groovyAvailable) {
-            return null;
-        }
-        Resource result = null;
-
-        String resourceName = componentResource.getResourceName();
-        if (resourceName.endsWith(".xhtml")) {
-            resourceName = resourceName.substring(0, 
-                    resourceName.length() - 6) + ".groovy";
-            ResourceHandler resourceHandler = context.getApplication().getResourceHandler();
-            result = resourceHandler.createResource(resourceName, 
-                    componentResource.getLibraryName());
-        }
-        
-        return result;
-    }
-
-
-    /**
-     * @see javax.faces.view.ViewDeclarationLanguage#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
-     */
-    public void renderView(FacesContext ctx,
-                           UIViewRoot viewToRender)
-    throws IOException {
-
-        // suppress rendering if "rendered" property on the component is
-        // false
-        if (!viewToRender.isRendered()) {
-            return;
-        }
-
-        // log request
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Rendering View: " + viewToRender.getViewId());
-        }
-
-        WriteBehindStateWriter stateWriter = null;
-        try {
-            // Only build the view if this view has not yet been built.
-            if (!Util.isViewPopulated(ctx, viewToRender)) {
-                this.buildView(ctx, viewToRender);
-            }
-
-            // setup writer and assign it to the ctx
-            ResponseWriter origWriter = ctx.getResponseWriter();
-            if (origWriter == null) {
-                origWriter = createResponseWriter(ctx);
-            }
-
-            ExternalContext extContext = ctx.getExternalContext();
-            Writer outputWriter = extContext.getResponseOutputWriter();
-            stateWriter = new WriteBehindStateWriter(outputWriter,
-                                                     ctx,
-                                                     responseBufferSize);
-
-            ResponseWriter writer = origWriter.cloneWithWriter(stateWriter);
-            ctx.setResponseWriter(writer);
-
-            //  Don't call startDoc and endDoc on a partial response
-            if (ctx.getPartialViewContext().isPartialRequest()) {
-                viewToRender.encodeAll(ctx);
-                try {
-                    ctx.getExternalContext().getFlash().doPostPhaseActions(ctx);
-                } catch (UnsupportedOperationException uoe) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
-                    }
-                }
-            } else {
-                // render the view to the response
-                writer.startDocument();
-                viewToRender.encodeAll(ctx);
-                try {
-                    ctx.getExternalContext().getFlash().doPostPhaseActions(ctx);
-                } catch (UnsupportedOperationException uoe) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
-                    }
-                }
-                writer.endDocument();
-            }
-            // finish writing
-            writer.close();
-
-
-            boolean writtenState = stateWriter.stateWritten();
-            // flush to origWriter
-            if (writtenState) {
-                stateWriter.flushToWriter();
-            }
-
-        } catch (FileNotFoundException fnfe) {
-            this.handleFaceletNotFound(ctx,
-                                       viewToRender.getViewId(),
-                                       fnfe.getMessage());
-        } catch (Exception e) {
-            this.handleRenderException(ctx, e);
-        } finally {
-            if (stateWriter != null)
-                stateWriter.release();
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * If {@link UIDebug#debugRequest(javax.faces.context.FacesContext)}} is <code>true</code>,
-     * simply return a new UIViewRoot(), otherwise, call the default logic.
-     * </p>
-     * @see {@link javax.faces.view.ViewDeclarationLanguage#restoreView(javax.faces.context.FacesContext, String)}
-     */
-    @Override
-    public UIViewRoot restoreView(FacesContext ctx,
-                                  String viewId) {
-
-        if (UIDebug.debugRequest(ctx)) {
-            ctx.getApplication().createComponent(UIViewRoot.COMPONENT_TYPE);
-        }
-
-        return super.restoreView(ctx, viewId);
-
-    }
-
-
-    /**
-     * @see ViewHandlingStrategy#retargetAttachedObjects(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.util.List)
-     */
-    @SuppressWarnings({"unchecked"})
-    @Override
-    public void retargetAttachedObjects(FacesContext context,
-                                        UIComponent topLevelComponent,
-                                        List<AttachedObjectHandler> handlers) {
-
-        //List<AttachedObjectHandler> handlers =
-        //      getAttachedObjectHandlers(topLevelComponent, false);
-
-        if (handlers == null || handlers.isEmpty()) {
-            return;
-        }
-        
-        BeanInfo componentBeanInfo = (BeanInfo) 
-                topLevelComponent.getAttributes().get(UIComponent.BEANINFO_KEY);
-        // PENDING(edburns): log error message if componentBeanInfo is null;
-        if (null == componentBeanInfo) {
-            return;
-        }
-        BeanDescriptor componentDescriptor = componentBeanInfo.getBeanDescriptor();
-        // There is an entry in targetList for each attached object in the 
-        // <composite:interface> section of the composite component.
-        List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
-                componentDescriptor.getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
-        // Each entry in targetList will vend one or more UIComponent instances
-        // that is to serve as the target of an attached object in the consuming
-        // page.
-        List<UIComponent> targetComponents;
-        String forAttributeValue, curTargetName;
-
-        // For each of the attached object handlers...
-        for (AttachedObjectHandler curHandler : handlers) {
-            // Get the name given to this attached object by the page author
-            // in the consuming page.
-            forAttributeValue = curHandler.getFor();
-            // For each of the attached objects in the <composite:interface> section
-            // of this composite component...
-            for (AttachedObjectTarget curTarget : targetList) {
-                // Get the name given to this attached object target by the
-                // composite component author
-                curTargetName = curTarget.getName();
-                targetComponents = curTarget.getTargets(topLevelComponent);
-
-                if (curHandler instanceof ActionSource2AttachedObjectHandler &&
-                    curTarget instanceof ActionSource2AttachedObjectTarget) {
-                    if (forAttributeValue.equals(curTargetName)) {
-                        for (UIComponent curTargetComponent : targetComponents) {
-                            retargetHandler(context, curHandler, curTargetComponent);
-                        }
-                        break;
-                    }
-                }
-                else if (curHandler instanceof EditableValueHolderAttachedObjectHandler &&
-                         curTarget instanceof EditableValueHolderAttachedObjectTarget) {
-                    if (forAttributeValue.equals(curTargetName)) {
-                        for (UIComponent curTargetComponent : targetComponents) {
-                            retargetHandler(context, curHandler, curTargetComponent);
-                        }
-                        break;
-                    }
-                }
-                else if (curHandler instanceof ValueHolderAttachedObjectHandler &&
-                         curTarget instanceof ValueHolderAttachedObjectTarget) {
-                    if (forAttributeValue.equals(curTargetName)) {
-                        for (UIComponent curTargetComponent : targetComponents) {
-                            retargetHandler(context, curHandler, curTargetComponent);
-                        }
-                        break;
-                    }
-                } else if(curHandler instanceof BehaviorHolderAttachedObjectHandler && 
-                        curTarget instanceof BehaviorHolderAttachedObjectTarget) {
-                    BehaviorHolderAttachedObjectHandler behaviorHandler = (BehaviorHolderAttachedObjectHandler) curHandler;
-                    BehaviorHolderAttachedObjectTarget behaviorTarget = (BehaviorHolderAttachedObjectTarget) curTarget;
-                    String eventName = behaviorHandler.getEventName();
-                    if((null !=eventName && eventName.equals(curTargetName))||(null ==eventName && behaviorTarget.isDefaultEvent())){
-                        for (UIComponent curTargetComponent : targetComponents) {
-                            retargetHandler(context, curHandler, curTargetComponent);
-                        }
-                    }
-                }
-
-
-            }
-        }
-    }
-
-
-    /**
-     * @see ViewHandlingStrategy#retargetMethodExpressions(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
-     */
-    @Override
-    public void retargetMethodExpressions(FacesContext context,
-                                          UIComponent topLevelComponent) {
-
-        BeanInfo componentBeanInfo = (BeanInfo) 
-                topLevelComponent.getAttributes().get(UIComponent.BEANINFO_KEY);
-        // PENDING(edburns): log error message if componentBeanInfo is null;
-        if (null == componentBeanInfo) {
-            return;
-        }
-
-        PropertyDescriptor attributes[] = componentBeanInfo.getPropertyDescriptors();
-
-        MethodMetadataIterator allMetadata = new MethodMetadataIterator(attributes);
-        for (CompCompInterfaceMethodMetadata metadata : allMetadata) {
-
-            String attrName = metadata.getName();
-            String[] targets = metadata.getTargets(context);
-
-            Object attrValue = topLevelComponent.getValueExpression(attrName);
-
-            // In all cases but one, the attrValue will be a ValueExpression.
-            // The only case when it will not be a ValueExpression is
-            // the case when the attrName is an action, and even then, it'll be a
-            // ValueExpression in all cases except when it's a literal string.
-            if (null == attrValue) {
-                Map<String, Object> attrs = topLevelComponent.getAttributes();
-                attrValue = (attrs.containsKey(attrName)) ?
-                    attrs.get(attrName) : metadata.getDefault();
-                if (attrValue == null) {
-                    if (metadata.isRequired(context)) {
-                        Object location = attrs.get(UIComponent.VIEW_LOCATION_KEY);
-                        if (location == null) {
-                            location = "";
-                        }
-                        throw new FacesException(
-                              // RELEASE_PENDING need a better message
-                              location.toString()
-                              + ": Unable to find attribute with name \""
-                              + attrName
-                              + "\" in top level component in consuming page, "
-                              + " or with default value in composite component.  "
-                              + "Page author or composite component author error.");
-                    } else {
-                        continue;
-                    }
-                }
-            }
-
-            if (targets != null) {
-                MethodRetargetHandler handler = retargetHandlerManager.getRetargetHandler(attrName);
-                if (handler != null) {
-                    for (String curTarget : targets) {
-                        UIComponent targetComp = topLevelComponent
-                              .findComponent(curTarget);
-                        if (null == targetComp) {
-                            throw new FacesException(attrValue.toString()
-                                                     + " : Unable to re-target MethodExpression as inner component referenced by target id '"
-                                                     + curTarget
-                                                     + "' cannot be found.");
-                        }
-                        handler.retarget(context,
-                                         metadata,
-                                         attrValue,
-                                         targetComp);
-                    }
-                } else {
-                    // the developer has specified a target for a MethodExpression
-                    // but the attribute name doesn't match one action, actionListener,
-                    // validator, or valueChangeListener.  We can ignore the
-                    // target(s) in this case
-                    if (LOGGER.isLoggable(Level.WARNING)) {
-                        LOGGER.log(Level.WARNING,
-                                   "jsf.compcomp.unecessary.targets.attribute",
-                                   new Object[] { getCompositeComponentName(topLevelComponent),
-                                                  attrName });
-                    }
-                    handler = retargetHandlerManager.getDefaultHandler();
-                    handler.retarget(context, metadata, attrValue, topLevelComponent);
-                }
-            } else {
-                MethodRetargetHandler handler = retargetHandlerManager.getDefaultHandler();
-                handler.retarget(context, metadata, attrValue, topLevelComponent);
-            }
-
-            // clear out the ValueExpression that we've retargeted as a
-            // MethodExpression
-            topLevelComponent.setValueExpression(attrName, null);
-
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.view.ViewDeclarationLanguage#createView(javax.faces.context.FacesContext, String)
-     * @return
-     */
-    @Override
-    public UIViewRoot createView(FacesContext ctx,
-                                 String viewId) {
-
-        if (UIDebug.debugRequest(ctx)) {
-            UIViewRoot root = (UIViewRoot)
-                  ctx.getApplication().createComponent(UIViewRoot.COMPONENT_TYPE);
-            root.setViewId(viewId);
-            return root;
-        }
-
-        return super.createView(ctx, viewId);
-        
-    }
-    
-
-    // --------------------------------------- Methods from ViewHandlingStrategy
-
-
-    /**
-     * @param viewId the view ID to check
-     * @return <code>true</code> if assuming a default configuration and the
-     *  view ID's extension is <code>.xhtml</code>  Otherwise try to match
-     *  the view ID based on the configured extendsion and prefixes.
-     *
-     * @see com.sun.faces.config.WebConfiguration.WebContextInitParameter#FaceletsViewMappings
-     */
-    @Override
-    public boolean handlesViewId(String viewId) {
-         if (viewId != null) {
-            // If there's no extensions array or prefixes array, then
-            // assume defaults.  .xhtml extension is handled by
-            // the FaceletViewHandler and .jsp will be handled by
-            // the JSP view handler
-            if ((extensionsArray == null) && (prefixesArray == null)) {
-                return (viewId.endsWith(ViewHandler.DEFAULT_FACELETS_SUFFIX));
-            }
-
-            if (extensionsArray != null) {
-                for (String extension : extensionsArray) {
-                    if (viewId.endsWith(extension)) {
-                        return true;
-                    }
-                }
-            }
-
-            if (prefixesArray != null) {
-                for (String prefix : prefixesArray) {
-                    if (viewId.startsWith(prefix)) {
-                        return true;
-                    }
-                }
-            }
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Build the view.
-     * @param ctx the {@link FacesContext} for the current request
-     * @param view the {@link UIViewRoot} to populate based
-     *  of the Facelet template
-     * @throws IOException if an error occurs building the view.
-     */
-    @Override
-    public void buildView(FacesContext ctx, UIViewRoot view)
-    throws IOException {
-
-        if (Util.isViewPopulated(ctx, view)) {
-            Facelet f = faceletFactory.getFacelet(view.getViewId());
-            StateContext stateCtx = StateContext.getStateContext(ctx);
-            // Disable events from being intercepted by the StateContext by
-            // virute of re-applying the handlers. 
-            try {
-                stateCtx.setTrackViewModifications(false);
-                f.apply(ctx, view);
-            } finally {
-                stateCtx.setTrackViewModifications(true);
-            }
-            return;
-        }
-
-        view.setViewId(view.getViewId());
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Building View: " + view.getViewId());
-        }
-        if (faceletFactory == null) {
-            ApplicationAssociate associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
-            faceletFactory = associate.getFaceletFactory();
-            assert (faceletFactory != null);
-        }
-        RequestStateManager.set(ctx,
-                                RequestStateManager.FACELET_FACTORY,
-                                faceletFactory);
-        Facelet f = faceletFactory.getFacelet(view.getViewId());
-
-        // populate UIViewRoot
-        f.apply(ctx, view);
-        doPostBuildActions(ctx, view);
-        ctx.getApplication().publishEvent(ctx,
-                                          PostAddToViewEvent.class,
-                                          UIViewRoot.class,
-                                          view);
-        Util.setViewPopulated(ctx, view);
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * Initialize the core Facelets runtime.
-     */
-    protected void initialize() {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Initializing FaceletViewHandlingStrategy");
-        }
-
-        this.initializeMappings();
-
-        groovyAvailable = GroovyHelper.isGroovyAvailable(FacesContext.getCurrentInstance());
-
-        metadataCache = new Cache<Resource, BeanInfo>(new Factory<Resource, BeanInfo>() {
-
-            public BeanInfo newInstance(Resource ccResource) throws InterruptedException {
-                FacesContext context = FacesContext.getCurrentInstance();
-                return FaceletViewHandlingStrategy.this.createComponentMetadata(context, ccResource);
-            }
-        });
-
-        try {
-            responseBufferSizeSet = webConfig.isSet(FaceletsBufferSize);
-            responseBufferSize =
-                  Integer.parseInt(webConfig.getOptionValue(FaceletsBufferSize));
-        } catch (NumberFormatException nfe) {
-            responseBufferSize = Integer.parseInt(FaceletsBufferSize.getDefaultValue());
-        }
-
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Initialization Successful");
-        }
-
-    }
-
-
-    /**
-     * Initialize mappings, during the first request.
-     */
-    protected void initializeMappings() {
-
-        String viewMappings = webConfig.getOptionValue(FaceletsViewMappings);
-        if ((viewMappings != null) && (viewMappings.length() > 0)) {
-            String[] mappingsArray = Util.split(viewMappings, ";");
-
-            List<String> extensionsList = new ArrayList<String>(mappingsArray.length);
-            List<String> prefixesList = new ArrayList<String>(mappingsArray.length);
-
-            for (String aMappingsArray : mappingsArray) {
-                String mapping = aMappingsArray.trim();
-                int mappingLength = mapping.length();
-                if (mappingLength <= 1) {
-                    continue;
-                }
-
-                if (mapping.charAt(0) == '*') {
-                    extensionsList.add(mapping.substring(1));
-                } else if (mapping.charAt(mappingLength - 1) == '*') {
-                    prefixesList.add(mapping.substring(0, mappingLength - 1));
-                }
-            }
-
-            extensionsArray = new String[extensionsList.size()];
-            extensionsList.toArray(extensionsArray);
-
-            prefixesArray = new String[prefixesList.size()];
-            prefixesList.toArray(prefixesArray);
-        }
-    }
-
-
-    /**
-     * @param context the {@link FacesContext} for the current request
-     * @return a {@link ResponseWriter} for processing the request
-     * @throws IOException if the writer cannot be created
-     */
-    protected ResponseWriter createResponseWriter(FacesContext context)
-    throws IOException {
-
-        ExternalContext extContext = context.getExternalContext();
-        RenderKit renderKit = context.getRenderKit();
-        // Avoid a cryptic NullPointerException when the renderkit ID
-        // is incorrectly set
-        if (renderKit == null) {
-            String id = context.getViewRoot().getRenderKitId();
-            throw new IllegalStateException(
-                  "No render kit was available for id \"" + id + "\"");
-        }
-
-        if (responseBufferSizeSet) {
-            // set the buffer for content
-            extContext.setResponseBufferSize(responseBufferSize);
-        }
-
-
-        // get our content type
-        String contentType =
-              (String) context.getAttributes().get("facelets.ContentType");
-
-        // get the encoding
-        String encoding =
-              (String) context.getAttributes().get("facelets.Encoding");
-
-        // Create a dummy ResponseWriter with a bogus writer,
-        // so we can figure out what content type the ReponseWriter
-        // is really going to ask for
-        ResponseWriter writer = renderKit.createResponseWriter(NullWriter.Instance,
-                                                               contentType,
-                                                               encoding);
-
-        contentType = getResponseContentType(context, writer.getContentType());
-        encoding = getResponseEncoding(context, writer.getCharacterEncoding());
-
-        // apply them to the response
-        extContext.setResponseContentType(contentType);
-        extContext.setResponseCharacterEncoding(encoding);
-
-        // Now, clone with the real writer
-        writer = writer.cloneWithWriter(extContext.getResponseOutputWriter());
-
-        return writer;
-
-    }
-
-
-    /**
-     * Handles the case where rendering throws an Exception.
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @param e the caught Exception
-     * @throws IOException if the custom debug content cannot be written
-     */
-    protected void handleRenderException(FacesContext context, Exception e)
-    throws IOException {
-
-        // always log
-        if (LOGGER.isLoggable(Level.SEVERE)) {
-            UIViewRoot root = context.getViewRoot();
-            StringBuffer sb = new StringBuffer(64);
-            sb.append("Error Rendering View");
-            if (root != null) {
-                sb.append('[');
-                sb.append(root.getViewId());
-                sb.append(']');
-            }
-            LOGGER.log(Level.SEVERE, sb.toString(), e);
-        }
-
-        if (e instanceof RuntimeException) {
-            throw (RuntimeException) e;
-        } else if (e instanceof IOException) {
-            throw (IOException) e;
-        } else {
-            throw new FacesException(e.getMessage(), e);
-        }
-
-    }
-
-
-    /**
-     * Handles the case where a Facelet cannot be found.
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @param viewId the view ID that was to be mapped to a Facelet
-     * @param message optional message to include in the 404
-     * @throws IOException if an error occurs sending the 404 to the client
-     */
-    protected void handleFaceletNotFound(FacesContext context,
-                                         String viewId,
-                                         String message)
-    throws IOException {
-
-        context.getExternalContext().responseSendError(HttpServletResponse.SC_NOT_FOUND,  ((message != null)
-                                                                  ? (viewId + ": " + message)
-                                                                  : viewId));
-        context.responseComplete();
-
-    }
-
-
-    /**
-     * @param context the {@link FacesContext} for the current request
-     * @param orig the original encoding
-     * @return the encoding to be used for this response
-     */
-    protected String getResponseEncoding(FacesContext context, String orig) {
-
-        String encoding = orig;
-
-        // see if we need to override the encoding
-        Map<Object,Object> ctxAttributes = context.getAttributes();
-        Map<String,Object> sessionMap =
-              context.getExternalContext().getSessionMap();
-
-        // 1. check the request attribute
-        if (ctxAttributes.containsKey("facelets.Encoding")) {
-            encoding = (String) ctxAttributes.get("facelets.Encoding");
-            if (LOGGER.isLoggable(Level.FINEST)) {
-                LOGGER.log(Level.FINEST,
-                           "Facelet specified alternate encoding {0}",
-                           encoding);
-            }
-            sessionMap.put(ViewHandler.CHARACTER_ENCODING_KEY, encoding);
-        }
-
-        // 2. get it from request
-        if (encoding == null) {
-            encoding = context.getExternalContext().getRequestCharacterEncoding();
-        }
-
-        // 3. get it from the session
-        if (encoding == null) {
-            encoding = (String) sessionMap.get(ViewHandler.CHARACTER_ENCODING_KEY);
-            if (LOGGER.isLoggable(Level.FINEST)) {
-                LOGGER.log(Level.FINEST,
-                           "Session specified alternate encoding {0}",
-                           encoding);
-            }
-        }
-
-        // 4. default it
-        if (encoding == null) {
-            encoding = "UTF-8";
-            if (LOGGER.isLoggable(Level.FINEST)) {
-                LOGGER.finest("ResponseWriter created had a null CharacterEncoding, defaulting to UTF-8");
-            }
-        }
-
-        return encoding;
-
-    }
-
-
-    /**
-     * @param context the {@link FacesContext} for the current request
-     * @param orig the original contentType
-     * @return the content type to be used for this response
-     */
-    protected String getResponseContentType(FacesContext context, String orig) {
-
-        String contentType = orig;
-
-        // see if we need to override the contentType
-        Map<Object,Object> m = context.getAttributes();
-        if (m.containsKey("facelets.ContentType")) {
-            contentType = (String) m.get("facelets.ContentType");
-            if (LOGGER.isLoggable(Level.FINEST)) {
-                LOGGER.finest("Facelet specified alternate contentType '"
-                        + contentType + "'");
-            }
-        }
-
-        // safety check
-        if (contentType == null) {
-            contentType = "text/html";
-            if (LOGGER.isLoggable(Level.FINEST)) {
-                LOGGER.finest("ResponseWriter created had a null ContentType, defaulting to text/html");
-            }
-        }
-
-        return contentType;
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    private String getCompositeComponentName(UIComponent compositeComponent) {
-
-        Resource resource =
-              (Resource) compositeComponent.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
-        String name = resource.getResourceName();
-        String library = resource.getLibraryName();
-
-        if (library != null) {
-            return "Composite Component: " + name + ", library: " + library;
-        } else {
-            return "Composite Component: " + name;
-        }
-
-    }
-
-
-    private void doPostBuildActions(FacesContext ctx, UIViewRoot root) {
-        StateContext stateCtx = StateContext.getStateContext(ctx);
-        if (stateCtx.partialStateSaving(root.getViewId())) {
-            root.markInitialState();
-            stateCtx.startTrackViewModifications();
-        }
-    }
-
-
-    private void retargetHandler(FacesContext context,
-                                 AttachedObjectHandler handler,
-                                 UIComponent targetComponent) {
-
-        if (UIComponent.isCompositeComponent(targetComponent)) {
-            // RELEASE_PENDING Not keen on calling CompositeComponentTagHandler here....
-            List<AttachedObjectHandler> nHandlers =
-                  CompositeComponentTagHandler
-                        .getAttachedObjectHandlers(targetComponent);
-            nHandlers.add(handler);
-            retargetAttachedObjects(context, targetComponent, nHandlers);
-        } else {
-            handler.applyAttachedObject(context, targetComponent);
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Provides iteration services over a composite component's
-     * MethodExpression-enabled <code>PropertyDescriptors</code>.
-     */
-    private static final class MethodMetadataIterator implements Iterable<CompCompInterfaceMethodMetadata>, Iterator<CompCompInterfaceMethodMetadata> {
-
-        private final PropertyDescriptor[] descriptors;
-        private int curIndex = -1;
-
-        // -------------------------------------------------------- Constructors
-
-
-        MethodMetadataIterator(PropertyDescriptor[] descriptors) {
-
-            this.descriptors = descriptors;
-            if (descriptors != null && descriptors.length > 0) {
-                curIndex = 0;
-            }
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterable
-
-
-        public Iterator<CompCompInterfaceMethodMetadata> iterator() {
-            return this;
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            if (curIndex != -1 && curIndex < descriptors.length) {
-                int idx = curIndex;
-
-                while (idx < descriptors.length) {
-                    PropertyDescriptor pd = descriptors[idx];
-                    if (shouldSkip(pd)) {
-                        // this is a ValueExpression-enabled attribute and
-                        // should be ignored.
-                        idx++;
-                    } else {
-                        if (idx != curIndex) {
-                            // the PD that was found to be returned by the
-                            // next() call has a different offset from the
-                            // current index; update the current index.
-                            curIndex = idx;
-                        }
-                        return (curIndex < descriptors.length);
-                    }
-                }
-            }
-            return false;
-
-        }
-
-        public CompCompInterfaceMethodMetadata next() {
-
-
-            return new CompCompInterfaceMethodMetadata(descriptors[curIndex++]);
-
-        }
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-
-        }
-
-        private boolean shouldSkip(PropertyDescriptor pd) {
-            boolean result;
-            String name = pd.getName();
-            boolean isSpecialAttributeName = name.equals("action") ||
-                            name.equals("actionListener") || name.equals("validator")
-                            || name.equals("valueChangeListener");
-            result = (!isSpecialAttributeName &&
-                     (pd.getValue("type") != null ||
-                      pd.getValue("method-signature") == null));
-
-            return result;
-        }
-
-    } // END MethodMetadataIterator
-
-
-    /**
-     * Utility class to encapsulate the ValueExpression evaluation of the various
-     * MethodExpression composite component properties.
-     */
-    private static final class CompCompInterfaceMethodMetadata {
-
-        private final PropertyDescriptor pd;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        CompCompInterfaceMethodMetadata(PropertyDescriptor pd) {
-
-            this.pd = pd;
-
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        /**
-         * @param ctx the <code>FacesContext</code> for the current request
-         * @return the <code>method-signature</code> for this attribute
-         */
-        public String getMethodSignature(FacesContext ctx) {
-
-            ValueExpression ms = (ValueExpression) pd.getValue("method-signature");
-            if (ms != null) {
-                return (String) ms.getValue(ctx.getELContext());
-            }
-            return null;
-
-        }
-
-
-        /**
-         * @param ctx the <code>FacesContext</code> for the current request
-         * @return an array of component targets to which a MethodExpression
-         *  should be retargeted
-         */
-        public String[] getTargets(FacesContext ctx) {
-
-            ValueExpression ts = (ValueExpression) pd.getValue("targets");
-            if (ts != null) {
-                String targets = (String) ts.getValue(ctx.getELContext());
-                if (targets != null) {
-                    return Util.split(targets, " ");
-                }
-            }
-
-            return null;
-
-        }
-
-
-        /**
-         * @param ctx the <code>FacesContext</code> for the current request
-         * @return <code>true<code> if this attribute is required to be present,
-         *  otherwise, returns <code>false</code>
-         */
-        public boolean isRequired(FacesContext ctx) {
-
-            ValueExpression rd = (ValueExpression) pd.getValue("required");
-            return ((rd != null) ? Boolean.valueOf(rd.getValue(ctx.getELContext()).toString()) : false);
-
-        }
-
-
-        /**
-         * @return the default value as designated by the composite component
-         *  author if no attribute was specified by the composite component
-         *  consumer.  This value may be a ValueExpression, or a literal.
-         */
-        public Object getDefault() {
-
-            return pd.getValue("default");
-
-        }
-
-
-        /**
-         * @return the composite component attribute name
-         */
-        public String getName() {
-
-            return pd.getName();
-
-        }
-
-    } // END CompCompInterfaceMethodMetadata
-
-
-    /**
-     * Managed the <code>MethodRetargetHandler</code> implementations for the
-     * current <code>MethodExpression</code> enabled component attributes:
-     * <ul>
-     *    <li>action</li>
-     *    <li>actionListener</li>
-     *    <li>validator</li>
-     *    <li>valueChangeListener</li>
-     * </ul>
-     *
-     * Instances of this object also provide a default handler that can be
-     * used to re-target <code>MethodExperssions</code> that don't match
-     * on of the four names described above.
-     */
-    private static final class MethodRetargetHandlerManager {
-
-        private Map<String,MethodRetargetHandler> handlerMap =
-              new HashMap<String,MethodRetargetHandler>(4, 1.0f);
-        private MethodRetargetHandler arbitraryHandler = new ArbitraryMethodRegargetHandler();
-
-        // -------------------------------------------------------- Constructors
-
-
-        MethodRetargetHandlerManager() {
-
-            MethodRetargetHandler[] handlers = {
-                  new ActionRegargetHandler(),
-                  new ActionListenerRegargetHandler(),
-                  new ValidatorRegargetHandler(),
-                  new ValueChangeListenerRegargetHandler()
-            };
-            for (MethodRetargetHandler h : handlers) {
-                handlerMap.put(h.getAttribute(), h);
-            }
-
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        /**
-         * Lookup/return a <code>MethodRetargetHandler</code> appropriate to the
-         * provided attribute name
-         * @param attrName the attribute name
-         * @return a <code>MethodRetargetHandler</code> that can properly handle
-         *  retargeting expressions for the specified attribute, or </code>null</code>
-         *  if there is no handler available.
-         */
-        private MethodRetargetHandler getRetargetHandler(String attrName) {
-
-            return handlerMap.get(attrName);
-
-        }
-
-
-        /**
-         * @return a <code>MethodRetargetHandler</code> that can retarget
-         * arbitrarily named MethodExpressions.
-         */
-        private MethodRetargetHandler getDefaultHandler() {
-
-            return arbitraryHandler;
-
-        }
-
-
-        // ------------------------------------------------------ Nested Classes
-
-
-        /**
-         * Base MethodRetargetHandler implementation.
-         */
-        private static abstract class AbstractRetargetHandler implements MethodRetargetHandler {
-
-            protected static final Class[] NO_ARGS = new Class[0];
-
-
-        } // END AbstractRetargetHandler
-
-
-        /**
-         * This handler is responsible for creating/retargeting MethodExpressions defined
-         * associated with the <code>action</code> attribute
-         */
-        private static final class ActionRegargetHandler extends AbstractRetargetHandler {
-
-            private static final String ACTION = "action";
-
-
-            // ------------------------------ Methods from MethodRetargetHandler
-
-
-            public void retarget(FacesContext ctx,
-                                 CompCompInterfaceMethodMetadata metadata,
-                                 Object sourceValue,
-                                 UIComponent target) {
-
-                String expr = (sourceValue instanceof ValueExpression)
-                                 ? ((ValueExpression) sourceValue).getExpressionString()
-                                 : sourceValue.toString();
-                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
-                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
-                                                               expr,
-                                                               Object.class,
-                                                               NO_ARGS);
-                ((ActionSource2) target)
-                      .setActionExpression(
-                            new ContextualCompositeMethodExpression(((sourceValue instanceof ValueExpression)
-                                                                     ? (ValueExpression) sourceValue
-                                                                        : null),
-                                                                    me));
-
-            }
-
-
-            public String getAttribute() {
-
-                return ACTION;
-
-            }
-
-        } // END ActionRegargetHandler
-
-
-        /**
-         * This handler is responsible for creating/retargeting MethodExpressions defined
-         * associated with the <code>actionListener</code> attribute
-         */
-        private static final class ActionListenerRegargetHandler extends AbstractRetargetHandler {
-
-            private static final String ACTION_LISTENER = "actionListener";
-            private static final Class[] ACTION_LISTENER_ARGS = new Class[] { ActionEvent.class };
-
-
-            // ------------------------------ Methods from MethodRetargetHandler
-
-
-            public void retarget(FacesContext ctx,
-                                 CompCompInterfaceMethodMetadata metadata,
-                                 Object sourceValue,
-                                 UIComponent target) {
-
-                ValueExpression ve = (ValueExpression) sourceValue;
-                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
-                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
-                                                               ve.getExpressionString(),
-                                                               Void.TYPE,
-                                                               ACTION_LISTENER_ARGS);
-                MethodExpression noArg = f.createMethodExpression(ctx.getELContext(),
-                                                                  ve.getExpressionString(),
-                                                                  Void.TYPE,
-                                                                  NO_ARGS);
-
-                ((ActionSource2) target).addActionListener(
-                      new MethodExpressionActionListener(
-                            new ContextualCompositeMethodExpression(ve,
-                                                                    me),
-                            new ContextualCompositeMethodExpression(ve,
-                                                                    noArg)));
-
-            }
-
-
-            public String getAttribute() {
-
-                return ACTION_LISTENER;
-
-            }
-
-        } // END ActionListenerRegargetHandler
-
-
-        /**
-         * This handler is responsible for creating/retargeting MethodExpressions defined
-         * associated with the <code>validator</code> attribute
-         */
-        private static final class ValidatorRegargetHandler extends AbstractRetargetHandler {
-
-            private static final String VALIDATOR = "validator";
-            private static final Class[] VALIDATOR_ARGS = new Class[]{
-                  FacesContext.class,
-                  UIComponent.class,
-                  Object.class
-            };
-
-
-            // ------------------------------ Methods from MethodRetargetHandler
-
-
-            public void retarget(FacesContext ctx,
-                                 CompCompInterfaceMethodMetadata metadata,
-                                 Object sourceValue,
-                                 UIComponent target) {
-
-                ValueExpression ve = (ValueExpression) sourceValue;
-                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
-                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
-                                                               ve.getExpressionString(),
-                                                               Void.TYPE,
-                                                               VALIDATOR_ARGS);
-
-                ((EditableValueHolder) target).addValidator(
-                      new MethodExpressionValidator(
-                            new ContextualCompositeMethodExpression(ve,
-                                                                    me)));
-
-            }
-
-
-            public String getAttribute() {
-
-                return VALIDATOR;
-
-            }
-
-        } // END ValidatorRegargetHandler
-
-
-        /**
-         * This handler is responsible for creating/retargeting MethodExpressions defined
-         * associated with the <code>valueChangeListener</code> attribute
-         */
-        private static final class ValueChangeListenerRegargetHandler extends AbstractRetargetHandler {
-
-            private static final String VALUE_CHANGE_LISTENER = "valueChangeListener";
-            private static final Class[] VALUE_CHANGE_LISTENER_ARGS = new Class[]{
-                  ValueChangeEvent.class
-            };
-
-
-            // ------------------------------ Methods from MethodRetargetHandler
-
-
-            public void retarget(FacesContext ctx,
-                                 CompCompInterfaceMethodMetadata metadata,
-                                 Object sourceValue,
-                                 UIComponent target) {
-
-                ValueExpression ve = (ValueExpression) sourceValue;
-                ExpressionFactory f = ctx.getApplication().getExpressionFactory();
-                MethodExpression me = f.createMethodExpression(ctx.getELContext(),
-                                                               ve.getExpressionString(),
-                                                               Void.TYPE,
-                                                               VALUE_CHANGE_LISTENER_ARGS);
-                MethodExpression noArg = f.createMethodExpression(ctx.getELContext(),
-                                                                  ve.getExpressionString(),
-                                                                  Void.TYPE,
-                                                                  NO_ARGS);
-
-                ((EditableValueHolder) target).addValueChangeListener(
-                      new MethodExpressionValueChangeListener(
-                            new ContextualCompositeMethodExpression(ve,
-                                                                    me),
-                            new ContextualCompositeMethodExpression(ve,
-                                                                    noArg)));
-
-            }
-
-
-            public String getAttribute() {
-                return VALUE_CHANGE_LISTENER;
-            }
-
-        } // END ValueChangeListenerRegargetHandler
-
-
-        /**
-         * This handler is responsible for creating/retargeting MethodExpressions defined
-         * using arbitrary attribute names.
-         */
-        private static final class ArbitraryMethodRegargetHandler extends AbstractRetargetHandler {
-
-
-            // ------------------------------ Methods from MethodRetargetHandler
-
-
-            public void retarget(FacesContext ctx, CompCompInterfaceMethodMetadata metadata, Object sourceValue, UIComponent target) {
-
-                ValueExpression ve = (ValueExpression) sourceValue;
-                ExpressionFactory f = ctx.getApplication()
-                      .getExpressionFactory();
-
-                // There is no explicit methodExpression property on
-                // an inner component to which this MethodExpression
-                // should be retargeted.  In this case, replace the
-                // ValueExpression with a method expresson.
-
-                // Pull apart the methodSignature to derive the
-                // expectedReturnType and expectedParameters
-
-                String methodSignature = metadata.getMethodSignature(ctx);
-                assert (null != methodSignature);
-                methodSignature = methodSignature.trim();
-                Class<?> expectedReturnType;
-                Class<?>[] expectedParameters = NO_ARGS;
-
-                // Get expectedReturnType
-                int j, i = methodSignature.indexOf(" ");
-                if (-1 != i) {
-                    String strValue = methodSignature.substring(0, i);
-                    try {
-                        expectedReturnType = Util.getTypeFromString(strValue.trim());
-                    } catch (ClassNotFoundException cnfe) {
-                        throw new FacesException(methodSignature
-                                                 + " : Unable to load type '"
-                                                 + strValue
-                                                 + '\'');
-                    }
-                } else {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.severe(
-                              "Unable to determine expected return type for " +
-                              methodSignature);
-                    }
-                    return;
-                }
-
-                // derive the arguments
-                i = methodSignature.indexOf("(");
-                if (-1 != i) {
-                    j = methodSignature.indexOf(")", i + 1);
-                    if (-1 != j) {
-                        String strValue = methodSignature.substring(i + 1, j);
-                        if (0 < strValue.length()) {
-                            String[] params = strValue.split(",");
-                            expectedParameters = new Class[params.length];
-                            boolean exceptionThrown = false;
-                            for (i = 0; i < params.length; i++) {
-                                try {
-                                    expectedParameters[i] =
-                                          Util.getTypeFromString(params[i].trim());
-                                } catch (ClassNotFoundException cnfe) {
-                                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                                        LOGGER.log(Level.SEVERE,
-                                                   "Unable to determine parameter type for "
-                                                   + methodSignature,
-                                                   cnfe);
-                                    }
-                                    exceptionThrown = true;
-                                    break;
-                                }
-                            }
-                            if (exceptionThrown) {
-                                return;
-                            }
-
-                        } else {
-                            expectedParameters = NO_ARGS;
-                        }
-                    }
-
-                }
-
-                assert (null != expectedReturnType);
-                assert (null != expectedParameters);
-
-                MethodExpression me = f
-                      .createMethodExpression(ctx.getELContext(),
-                                              ve.getExpressionString(),
-                                              expectedReturnType,
-                                              expectedParameters);
-                target.getAttributes().put(metadata.getName(),
-                                           new ContextualCompositeMethodExpression(
-                                                 ve,
-                                                 me));
-
-            }
-
-
-            public String getAttribute() {
-                return null;
-            }
-
-        } // END ArbitraryMethodRegargetHandler
-
-    } // END MethodRegargetHandlerManager
-
-
-    /**
-     * Implementations of this interface provide the <code>strategy</code> to
-     * properly retarget a method expression for a particular attribute.
-     */
-    private interface MethodRetargetHandler {
-
-        /**
-         * Constructs and retargets a <code>MethodExpression</code> as appropriate
-         * based on the provided arguments.
-         *
-         * @param ctx the <code>FacesContext</code> for the current request
-         * @param metadata the metadata describing the method to be retargeted
-         * @param sourceValue typically, this will be a ValueExpression, however,
-         *  there are cases where this could be provided as a literal.  It basically
-         *  represents the attribute value being passed to the composite component
-         * @param target the component that will be target of the method expression
-         */
-        void retarget(FacesContext ctx,
-                      CompCompInterfaceMethodMetadata metadata,
-                      Object sourceValue,
-                      UIComponent target);
-
-        /**
-         * @return the attribute name this <code>MethodRetargetHandler</code>
-         *  is designed to handle
-         */
-        String getAttribute();
-
-    } // END MethodRetargetHandler
-
-
-    /**
-     * Simple no-op writer.
-     */
-    protected static final class NullWriter extends Writer {
-
-        static final NullWriter Instance = new NullWriter();
-
-        public void write(char[] buffer) {
-        }
-
-        public void write(char[] buffer, int off, int len) {
-        }
-
-        public void write(String str) {
-        }
-
-        public void write(int c) {
-        }
-
-        public void write(String str, int off, int len) {
-        }
-
-        public void close() {
-        }
-
-        public void flush() {
-        }
-
-    } // END NullWriter
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/JspViewHandlingStrategy.java b/jsf-ri/src/main/java/com/sun/faces/application/view/JspViewHandlingStrategy.java
deleted file mode 100644
index 94b27eb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/JspViewHandlingStrategy.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import java.beans.BeanInfo;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.view.ViewMetadata;
-import javax.faces.application.Resource;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.jstl.core.Config;
-
-import com.sun.faces.application.ViewHandlerResponseWrapper;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.RequestStateManager;
-import com.sun.faces.util.Util;
-
-import javax.faces.view.StateManagementStrategy;
-
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.ResponseBufferSize;
-
-/**
- * This {@link ViewHandlingStrategy} handles JSP-based views.
- */
-public class JspViewHandlingStrategy extends ViewHandlingStrategy {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    private int responseBufferSize;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public JspViewHandlingStrategy() {
-
-        try {
-            responseBufferSize =
-                  Integer.parseInt(webConfig.getOptionValue(ResponseBufferSize));
-        } catch (NumberFormatException nfe) {
-            responseBufferSize = Integer
-                  .parseInt(ResponseBufferSize.getDefaultValue());
-        }
-
-    }
-
-
-
-    // ------------------------------------ Methods from ViewDeclarationLanguage
-    
-
-    /**
-     * <p>
-     * Not supported in JSP-based views.
-     * </p>
-     *
-     * @see javax.faces.view.ViewDeclarationLanguage#getComponentMetadata(javax.faces.context.FacesContext, javax.faces.application.Resource)
-     */
-    @Override
-    public BeanInfo getComponentMetadata(FacesContext context, Resource componentResource) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * <p>
-     * Not supported in JSP-based views.
-     * </p>
-     *
-     * @see javax.faces.view.ViewDeclarationLanguage#getViewMetadata(javax.faces.context.FacesContext, String)
-     */
-    @Override
-    public ViewMetadata getViewMetadata(FacesContext context, String viewId) {
-        return null;
-    }
-
-    
-    /**
-     * <p>
-     * Not supported in JSP-based views.
-     * </p>
-     *
-     * @see javax.faces.view.ViewDeclarationLanguage#getScriptComponentResource(javax.faces.context.FacesContext, javax.faces.application.Resource)
-     */
-    @Override
-    public Resource getScriptComponentResource(FacesContext context, Resource componentResource) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * @see javax.faces.view.ViewDeclarationLanguage#buildView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
-     * @param context
-     * @param view
-     * @throws IOException
-     */
-    public void buildView(FacesContext context, UIViewRoot view)
-    throws IOException {
-
-        if (Util.isViewPopulated(context, view)) {
-            return;
-        }
-        try {
-            if (executePageToBuildView(context, view)) {
-                context.getExternalContext().responseFlushBuffer();
-                if (associate != null) {
-                    associate.responseRendered();
-                }
-                context.responseComplete();
-                return;
-            }
-        } catch (IOException e) {
-            throw new FacesException(e);
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, "Completed building view for : \n" +
-                                   view.getViewId());
-        }
-        context.getApplication().publishEvent(context,
-                                              PostAddToViewEvent.class,
-                                              UIViewRoot.class,
-                                              view);
-        Util.setViewPopulated(context, view);
-
-    }
-
-    /**
-     * @see javax.faces.view.ViewDeclarationLanguage#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
-     */
-    public void renderView(FacesContext context,
-                           UIViewRoot view)
-    throws IOException {
-
-        // suppress rendering if "rendered" property on the component is
-        // false
-        if (!view.isRendered() || context.getResponseComplete()) {
-            return;
-        }
-
-        ExternalContext extContext = context.getExternalContext();
-
-        if (!Util.isViewPopulated(context, view)) {
-            buildView(context, view);
-        }
-
-        // set up the ResponseWriter
-
-        RenderKitFactory renderFactory = (RenderKitFactory)
-              FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit =
-              renderFactory.getRenderKit(context, view.getRenderKitId());
-
-        ResponseWriter oldWriter = context.getResponseWriter();
-
-        WriteBehindStateWriter stateWriter =
-              new WriteBehindStateWriter(extContext.getResponseOutputWriter(),
-                                         context,
-                                         responseBufferSize);
-        ResponseWriter newWriter;
-        if (null != oldWriter) {
-            newWriter = oldWriter.cloneWithWriter(stateWriter);
-        } else {
-            newWriter = renderKit.createResponseWriter(stateWriter,
-                                                       null,
-                                                       extContext.getRequestCharacterEncoding());
-        }
-        context.setResponseWriter(newWriter);
-
-        //  Don't call startDoc and endDoc on a partial response
-        if (context.getPartialViewContext().isPartialRequest()) {
-            doRenderView(context, view);
-            try {
-                extContext.getFlash().doPostPhaseActions(context);
-            } catch (UnsupportedOperationException uoe) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
-                }
-            }
-        } else {
-            // render the view to the response
-            newWriter.startDocument();
-            doRenderView(context, view);
-            try {
-                extContext.getFlash().doPostPhaseActions(context);
-            } catch (UnsupportedOperationException uoe) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
-                }
-            }
-            newWriter.endDocument();
-        }
-
-
-        // replace markers in the body content and write it to response.
-
-        // flush directly to the response
-        if (stateWriter.stateWritten()) {
-            stateWriter.flushToWriter();
-        }
-
-        // clear the ThreadLocal reference.
-        stateWriter.release();
-
-        if (null != oldWriter) {
-            context.setResponseWriter(oldWriter);
-        }
-
-        // write any AFTER_VIEW_CONTENT to the response
-        // side effect: AFTER_VIEW_CONTENT removed
-        ViewHandlerResponseWrapper wrapper = (ViewHandlerResponseWrapper)
-              RequestStateManager.remove(context, RequestStateManager.AFTER_VIEW_CONTENT);
-        if (null != wrapper) {
-            wrapper.flushToWriter(extContext.getResponseOutputWriter(),
-                                  extContext.getResponseCharacterEncoding());
-        }
-
-        extContext.responseFlushBuffer();
-
-    }
-
-    @Override
-    public StateManagementStrategy getStateManagementStrategy(FacesContext context, String viewId) {
-        return null;
-    }
-
-    // --------------------------------------- Methods from ViewHandlingStrategy
-
-    
-    /**
-     * This {@link ViewHandlingStrategy} <em>should</em> be the last one queried
-     * and as such we return <code>true</code>.
-     *
-     * @see com.sun.faces.application.view.ViewHandlingStrategy#handlesViewId(String)
-     */
-    @Override
-    public boolean handlesViewId(String viewId) {
-
-        return true;
-
-    }
-
-
-
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * Execute the target view.  If the HTTP status code range is
-     * not 2xx, then return true to indicate the response should be
-     * immediately flushed by the caller so that conditions such as 404
-     * are properly handled.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param viewToExecute the view to build
-     * @return <code>true</code> if the response should be immediately flushed
-     *  to the client, otherwise <code>false</code>
-     * @throws java.io.IOException if an error occurs executing the page
-     */
-    private boolean executePageToBuildView(FacesContext context,
-                                        UIViewRoot viewToExecute)
-    throws IOException {
-
-        if (null == context) {
-            String message = MessageUtils.getExceptionMessageString
-                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-        if (null == viewToExecute) {
-            String message = MessageUtils.getExceptionMessageString
-                    (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "viewToExecute");
-            throw new NullPointerException(message);
-        }
-
-        ExternalContext extContext = context.getExternalContext();
-
-        if ("/*".equals(RequestStateManager.get(context, RequestStateManager.INVOCATION_PATH))) {
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.FACES_SERVLET_MAPPING_INCORRECT_ID));
-        }
-
-        String requestURI = viewToExecute.getViewId();
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("About to execute view " + requestURI);
-        }
-
-        // update the JSTL locale attribute in request scope so that JSTL
-        // picks up the locale from viewRoot. This attribute must be updated
-        // before the JSTL setBundle tag is called because that is when the
-        // new LocalizationContext object is created based on the locale.
-        if (extContext.getRequest() instanceof ServletRequest) {
-            Config.set((ServletRequest)
-            extContext.getRequest(),
-                       Config.FMT_LOCALE, context.getViewRoot().getLocale());
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Before dispacthMessage to viewId " + requestURI);
-        }
-
-        // save the original response
-        Object originalResponse = extContext.getResponse();
-
-        // replace the response with our wrapper
-        ViewHandlerResponseWrapper wrapped = getWrapper(extContext);
-        extContext.setResponse(wrapped);
-
-        try
-        {
-
-          // build the view by executing the page
-          extContext.dispatch(requestURI);
-
-          if (LOGGER.isLoggable(Level.FINE)) {
-              LOGGER.fine("After dispacthMessage to viewId " + requestURI);
-          }
-        }
-        finally
-        {
-          // replace the original response
-          extContext.setResponse(originalResponse);
-        }
-
-        // Follow the JSTL 1.2 spec, section 7.4,
-        // on handling status codes on a forward
-        if (wrapped.getStatus() < 200 || wrapped.getStatus() > 299) {
-            // flush the contents of the wrapper to the response
-            // this is necessary as the user may be using a custom
-            // error page - this content should be propagated
-            wrapped.flushContentToWrappedResponse();
-            return true;
-        }
-
-        // Put the AFTER_VIEW_CONTENT into request scope
-        // temporarily
-        RequestStateManager.set(context,
-                                RequestStateManager.AFTER_VIEW_CONTENT,
-                                wrapped);
-
-        return false;
-
-    }
-
-
-     /**
-     * <p>This is a separate method to account for handling the content
-     * after the view tag.</p>
-     *
-     * <p>Create a new ResponseWriter around this response's Writer.
-     * Set it into the FacesContext, saving the old one aside.</p>
-     *
-     * <p>call encodeBegin(), encodeChildren(), encodeEnd() on the
-     * argument <code>UIViewRoot</code>.</p>
-     *
-     * <p>Restore the old ResponseWriter into the FacesContext.</p>
-     *
-     * <p>Write out the after view content to the response's writer.</p>
-     *
-     * <p>Flush the response buffer, and remove the after view content
-     * from the request scope.</p>
-     *
-     * @param context the <code>FacesContext</code> for the current request
-     * @param viewToRender the view to render
-     * @throws java.io.IOException if an error occurs rendering the view to the client
-     * @throws javax.faces.FacesException if some error occurs within the framework
-     *  processing
-     */
-    private void doRenderView(FacesContext context,
-                              UIViewRoot viewToRender)
-    throws IOException {
-
-        if (null != associate) {
-            associate.responseRendered();
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, "About to render view " + viewToRender.getViewId());
-        }
-
-        viewToRender.encodeAll(context);
-
-    }
-
-
-    /**
-     * <p>
-     * Simple utility method to wrap the current response with the
-     * {@link ViewHandlerResponseWrapper}.
-     * </p>
-     * @param extContext the {@link ExternalContext} for this request
-     * @return the current response wrapped with ViewHandlerResponseWrapper
-     */
-    private static ViewHandlerResponseWrapper getWrapper(ExternalContext extContext) {
-
-        Object response = extContext.getResponse();
-        if (response instanceof HttpServletResponse) {
-            return new ViewHandlerResponseWrapper((HttpServletResponse) response);
-        }
-        throw new IllegalArgumentException();
-
-    }
-
-}
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/MultiViewHandler.java b/jsf-ri/src/main/java/com/sun/faces/application/view/MultiViewHandler.java
deleted file mode 100644
index 4eead9b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/MultiViewHandler.java
+++ /dev/null
@@ -1,742 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.application.ViewHandler;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.ResponseStateManager;
-import javax.servlet.http.HttpServletResponse;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import java.util.*;
-import java.net.MalformedURLException;
-
-import javax.faces.FactoryFinder;
-import javax.faces.component.*;
-import javax.faces.view.*;
-
-/**
- * This {@link ViewHandler} implementation handles both JSP-based and
- * Facelets/PDL-based views.
- */
-public class MultiViewHandler extends ViewHandler {
-
-    // Log instance for this class
-    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
-
-    private String[] configuredExtensions;
-    private boolean extensionsSet;
-    
-    private ViewDeclarationLanguageFactory vdlFactory;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public MultiViewHandler() {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-              
-        configuredExtensions = config.getOptionValue(WebConfiguration.WebContextInitParameter.DefaultSuffix, " ");
-        extensionsSet = config.isSet(WebConfiguration.WebContextInitParameter.DefaultSuffix);
-        vdlFactory = (ViewDeclarationLanguageFactory)
-                FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
-
-    }
-
-
-    // ------------------------------------------------ Methods from ViewHandler
-
-
-    /**
-     * Do not call the default implementation of {@link javax.faces.application.ViewHandler#initView(javax.faces.context.FacesContext)}
-     * if the {@link javax.faces.context.ExternalContext#getRequestCharacterEncoding()} returns a
-     * <code>non-null</code> result.
-     *
-     * @see javax.faces.application.ViewHandler#initView(javax.faces.context.FacesContext)
-     */
-    @Override
-    public void initView(FacesContext context) throws FacesException {
-
-        if (context.getExternalContext().getRequestCharacterEncoding() == null) {
-            super.initView(context);
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * Call {@link ViewDeclarationLanguage#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)}
-     * if the view can be rendered.
-     * </p>
-     *
-     * @see ViewHandler#renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
-     */
-    public void renderView(FacesContext context, UIViewRoot viewToRender)
-    throws IOException, FacesException {
-
-        Util.notNull("context", context);
-        Util.notNull("viewToRender", viewToRender);
-
-        vdlFactory.getViewDeclarationLanguage(viewToRender.getViewId())
-              .renderView(context, viewToRender);
-
-    }
-
-
-    /**
-     * <p>
-     * Call {@link ViewDeclarationLanguage#restoreView(javax.faces.context.FacesContext, String)}.
-     * </p>
-     *
-     * @see ViewHandler#restoreView(javax.faces.context.FacesContext, String)   
-     */
-    public UIViewRoot restoreView(FacesContext context, String viewId) {
-
-        Util.notNull("context", context);
-        String actualViewId = derivePhysicalViewId(context, viewId, false);
-        return vdlFactory.getViewDeclarationLanguage(actualViewId)
-              .restoreView(context, actualViewId);
-
-    }
-
-    
-    /**
-     * <p>
-     * Derive the actual view ID (i.e. the physical resource) and call
-     * call {@link ViewDeclarationLanguage#createView(javax.faces.context.FacesContext, String)}.
-     * </p>
-     *
-     * @see ViewHandler#restoreView(javax.faces.context.FacesContext, String)
-     */
-    public UIViewRoot createView(FacesContext context, String viewId) {
-
-        Util.notNull("context", context);
-        String actualViewId = derivePhysicalViewId(context, viewId, false);
-        return vdlFactory.getViewDeclarationLanguage(actualViewId).createView(context,
-                                                                               actualViewId);
-
-    }
-
-
-    /**
-     * <p>
-     * This code is currently common to all {@link ViewHandlingStrategy} instances.
-     * </p>
-     *
-     * @see ViewHandler#calculateLocale(javax.faces.context.FacesContext)
-     */
-    public Locale calculateLocale(FacesContext context) {
-
-        Util.notNull("context", context);
-
-        Locale result = null;
-        // determine the locales that are acceptable to the client based on the
-        // Accept-Language header and the find the best match among the
-        // supported locales specified by the client.
-        Iterator<Locale> locales = context.getExternalContext().getRequestLocales();
-        while (locales.hasNext()) {
-            Locale perf = locales.next();
-            result = findMatch(context, perf);
-            if (result != null) {
-                break;
-            }
-        }
-        // no match is found.
-        if (result == null) {
-            if (context.getApplication().getDefaultLocale() == null) {
-                result = Locale.getDefault();
-            } else {
-                result = context.getApplication().getDefaultLocale();
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * <p>
-     * This code is currently common to all {@link ViewHandlingStrategy} instances.
-     * </p>
-     *
-     * @see ViewHandler#calculateRenderKitId(javax.faces.context.FacesContext)
-     */
-    public String calculateRenderKitId(FacesContext context) {
-
-        Util.notNull("context", context);
-
-        Map<String,String> requestParamMap = context.getExternalContext()
-            .getRequestParameterMap();
-        String result = requestParamMap.get(
-            ResponseStateManager.RENDER_KIT_ID_PARAM);
-
-        if (result == null) {
-            if (null ==
-                (result = context.getApplication().getDefaultRenderKitId())) {
-                result = RenderKitFactory.HTML_BASIC_RENDER_KIT;
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * <p>
-     * This code is currently common to all {@link ViewHandlingStrategy} instances.
-     * </p>
-     *
-     * @see ViewHandler#writeState(javax.faces.context.FacesContext)
-     */
-    public void writeState(FacesContext context) throws IOException {
-
-        Util.notNull("context", context);
-        if (!context.getPartialViewContext().isPartialRequest()
-              && !context.getViewRoot().isTransient()) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Begin writing marker for viewId " +
-                            context.getViewRoot().getViewId());
-            }
-
-            WriteBehindStateWriter writer =
-                  WriteBehindStateWriter.getCurrentInstance();
-            if (writer != null) {
-                writer.writingState();
-            }
-            context.getResponseWriter()
-                  .write(RIConstants.SAVESTATE_FIELD_MARKER);
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("End writing marker for viewId " +
-                            context.getViewRoot().getViewId());
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * This code is currently common to all {@link ViewHandlingStrategy} instances.
-     * </p>
-     *
-     * @see ViewHandler#getActionURL(javax.faces.context.FacesContext, String)
-     */
-    public String getActionURL(FacesContext context, String viewId) {
-
-        Util.notNull("context", context);
-        Util.notNull("viewId", viewId);
-
-        if (viewId.charAt(0) != '/') {
-            String message =
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.ILLEGAL_VIEW_ID_ID,
-                        viewId);
-            if (logger.isLoggable(Level.SEVERE)) {
-                logger.log(Level.SEVERE, "jsf.illegal_view_id_error", viewId);
-            }
-        throw new IllegalArgumentException(message);
-        }
-
-        // Acquire the context path, which we will prefix on all results
-        ExternalContext extContext = context.getExternalContext();
-        String contextPath = extContext.getRequestContextPath();
-
-        // Acquire the mapping used to execute this request (if any)
-        String mapping = Util.getFacesMapping(context);
-
-        // If no mapping can be identified, just return a server-relative path
-        if (mapping == null) {
-            return (contextPath + viewId);
-        }
-
-        // Deal with prefix mapping
-        if (Util.isPrefixMapped(mapping)) {
-            if (mapping.equals("/*")) {
-                return (contextPath + viewId);
-            } else {
-                return (contextPath + mapping + viewId);
-            }
-        }
-
-        // Deal with extension mapping
-        int period = viewId.lastIndexOf('.');
-        if (period < 0) {
-            return (contextPath + viewId + mapping);
-        } else if (!viewId.endsWith(mapping)) {
-            return (contextPath + viewId.substring(0, period) + mapping);
-        } else {
-            return (contextPath + viewId);
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * This code is currently common to all {@link ViewHandlingStrategy} instances.
-     * </p>
-     *
-     * @see ViewHandler#getResourceURL(javax.faces.context.FacesContext, String)
-     */
-    public String getResourceURL(FacesContext context, String path) {
-
-        ExternalContext extContext = context.getExternalContext();
-        if (path.charAt(0) == '/') {
-            return (extContext.getRequestContextPath() + path);
-        } else {
-            return path;
-        }
-
-    }
-
-
-    @Override
-    public String getBookmarkableURL(FacesContext context,
-                                     String viewId,
-                                     Map<String,List<String>> parameters,
-                                     boolean includeViewParams) {
-
-        Map<String,List<String>> params;
-        if (includeViewParams) {
-            params = getFullParameterList(context, viewId, parameters);
-        } else {
-            params = parameters;
-        }
-        ExternalContext ectx = context.getExternalContext();
-        return ectx.encodeActionURL(ectx.encodeBookmarkableURL(Util.getViewHandler(context).getActionURL(context, viewId), params));
-
-    }
-
-
-    /**
-     * @see ViewHandler#getRedirectURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)
-     */
-    @Override
-    public String getRedirectURL(FacesContext context, String viewId, Map<String, List<String>> parameters, boolean includeViewParams) {
-
-        Map<String,List<String>> params;
-        if (includeViewParams) {
-            params = getFullParameterList(context, viewId, parameters);
-        } else {
-            params = parameters;
-        }
-        ExternalContext ectx = context.getExternalContext();
-        return ectx.encodeActionURL(ectx.encodeRedirectURL(Util.getViewHandler(context).getActionURL(context, viewId), params));
-
-    }
-
-    /**
-     * @see ViewHandler#getViewDeclarationLanguage(javax.faces.context.FacesContext, String)
-     */
-    @Override
-    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context,
-                                                              String viewId) {
-
-        String actualViewId = derivePhysicalViewId(context, viewId, false);
-        return vdlFactory.getViewDeclarationLanguage(actualViewId);
-
-    }
-
-    @Override
-    public String deriveViewId(FacesContext context, String rawViewId) {
-
-        return derivePhysicalViewId(context, rawViewId, true);
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-        /**
-     * <p>if the specified mapping is a prefix mapping, and the provided
-     * request URI (usually the value from <code>ExternalContext.getRequestServletPath()</code>)
-     * starts with <code>mapping + '/'</code>, prune the mapping from the
-     * URI and return it, otherwise, return the original URI.
-     * @param uri the servlet request path
-     * @param mapping the FacesServlet mapping used for this request
-     * @return the URI without additional FacesServlet mappings
-     * @since 1.2
-     */
-    protected String normalizeRequestURI(String uri, String mapping) {
-
-        if (mapping == null || !Util.isPrefixMapped(mapping)) {
-            return uri;
-        } else {
-            int length = mapping.length() + 1;
-            StringBuilder builder = new StringBuilder(length);
-            builder.append(mapping).append('/');
-            String mappingMod = builder.toString();
-            boolean logged = false;
-            while (uri.startsWith(mappingMod)) {
-                if (!logged && logger.isLoggable(Level.WARNING)) {
-                    logged = true;
-                    logger.log(Level.WARNING,
-                               "jsf.viewhandler.requestpath.recursion",
-                               new Object[] {uri, mapping});
-                }
-                uri = uri.substring(length - 1);
-            }
-            return uri;
-        }
-
-    }
-
-
-    /**
-     * <p>Adjust the viewID per the requirements of {@link #renderView}.</p>
-     *
-     * @param context current {@link javax.faces.context.FacesContext}
-     * @param viewId  incoming view ID
-     * @return the view ID with an altered suffix mapping (if necessary)
-     */
-    protected String convertViewId(FacesContext context, String viewId) {
-
-        // if the viewId doesn't already use the above suffix,
-        // replace or append.
-        int extIdx = viewId.lastIndexOf('.');
-        int length = viewId.length();
-        StringBuilder buffer = new StringBuilder(length);
-
-        for (String ext : configuredExtensions) {
-            if (viewId.endsWith(ext)) {
-                return viewId;
-            }
-
-            appendOrReplaceExtension(viewId, ext, length, extIdx, buffer);
-
-            String convertedViewId = buffer.toString();
-            try {
-                if (context.getExternalContext().getResource(convertedViewId) != null) {
-                    // RELEASE_PENDING (rlubke,driscoll) cache the lookup
-                    return convertedViewId;
-                }
-            } catch (MalformedURLException e) {
-                if (logger.isLoggable(Level.SEVERE)) {
-                    logger.log(Level.SEVERE,
-                               e.toString(),
-                               e);
-                }
-            }
-        }
-
-        // unable to find any resource match that the default ViewHandler
-        // can deal with.  Fall back to legacy (JSF 1.2) id conversion.
-        return legacyConvertViewId(viewId, length, extIdx, buffer);
-    }
-
-
-    protected String derivePhysicalViewId(FacesContext ctx,
-                                          String rawViewId,
-                                          boolean checkPhysical) {
-        if (rawViewId != null) {
-            String mapping = Util.getFacesMapping(ctx);
-            String viewId;
-            if (mapping != null) {
-                if (!Util.isPrefixMapped(mapping)) {
-                    viewId = convertViewId(ctx, rawViewId);
-                } else {
-                    viewId = normalizeRequestURI(rawViewId, mapping);
-                    if (viewId.equals(mapping)) {
-                        // The request was to the FacesServlet only - no
-                        // path info
-                        // on some containers this causes a recursion in the
-                        // RequestDispatcher and the request appears to hang.
-                        // If this is detected, return status 404
-                        send404Error(ctx);
-                    }
-
-                }
-                try {
-                    if (checkPhysical) {
-                        return ((ctx.getExternalContext().getResource(viewId) != null) ? viewId : null);
-                    } else {
-                        return viewId;
-                    }
-                } catch (MalformedURLException mue) {
-                    if (logger.isLoggable(Level.SEVERE)) {
-                        logger.log(Level.SEVERE,
-                                   mue.toString(),
-                                   mue);
-                    }
-                    return null;
-                }
-            }
-
-        }
-        return rawViewId;
-    }
-
-
-    protected Map<String,List<String>> getFullParameterList(FacesContext ctx,
-                                                            String viewId,
-                                                            Map<String,List<String>> existingParameters) {
-
-        Map<String,List<String>> copy;
-        if (existingParameters == null || existingParameters.isEmpty()) {
-            copy = new LinkedHashMap<String,List<String>>(4);
-        } else {
-          copy = new LinkedHashMap<String,List<String>>(existingParameters);
-        }
-        addViewParameters(ctx, viewId, copy);
-        return copy;
-
-    }
-
-
-    protected void addViewParameters(FacesContext ctx,
-                                     String viewId,
-                                     Map<String,List<String>> existingParameters) {
-
-        UIViewRoot currentRoot = ctx.getViewRoot();
-        String currentViewId = currentRoot.getViewId();
-        Collection<UIViewParameter> toViewParams;
-        Collection<UIViewParameter> currentViewParams;
-        boolean currentIsSameAsNew = false;
-        currentViewParams = ViewMetadata.getViewParameters(currentRoot);
-
-        if (currentViewId.equals(viewId)) {
-            currentIsSameAsNew = true;
-            toViewParams = currentViewParams;
-        }
-        else {
-            ViewDeclarationLanguage pdl = getViewDeclarationLanguage(ctx, viewId);
-            ViewMetadata viewMetadata = pdl.getViewMetadata(ctx, viewId);
-            UIViewRoot root = viewMetadata.createMetadataView(ctx);
-            toViewParams = ViewMetadata.getViewParameters(root);
-        }
-
-        if (toViewParams.isEmpty()) {
-            return;
-        }
-
-        for (UIViewParameter viewParam : toViewParams) {
-            String value;
-            // don't bother looking at view parameter if it's been overridden
-            if (existingParameters.containsKey(viewParam.getName())) {
-                continue;
-            }
-            else if (paramHasValueExpression(viewParam)) {
-                value = viewParam.getStringValueFromModel(ctx);
-            } else {
-                // Anonymous view parameter:
-                // Get string value from UIViewParameter instance stored in current view
-                if (currentIsSameAsNew) {
-                    value = viewParam.getStringValue(ctx);
-                }
-                // ...or transfer string value from matching UIViewParameter instance stored in current view
-                else {
-                    value = getStringValueToTransfer(ctx,
-                                                     viewParam,
-                                                     currentViewParams);
-                }
-            }
-            if (value != null) {
-                List<String> existing = existingParameters.get(viewParam.getName());
-                if (existing == null) {
-                    existing = new ArrayList<String>(4);
-                    existingParameters.put(viewParam.getName(), existing);
-                }
-                existing.add(value);
-            }
-
-        }
-    }
-
-
-    /**
-     * Attempts to find a matching locale based on <code>pref</code> and
-     * list of supported locales, using the matching algorithm
-     * as described in JSTL 8.3.2.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param pref the preferred locale
-     * @return the Locale based on pref and the matching alogritm specified
-     *  in JSTL 8.3.2
-     */
-    protected Locale findMatch(FacesContext context, Locale pref) {
-
-        Locale result = null;
-        Iterator<Locale> it = context.getApplication().getSupportedLocales();
-        while (it.hasNext()) {
-            Locale supportedLocale = it.next();
-
-            if (pref.equals(supportedLocale)) {
-                // exact match
-                result = supportedLocale;
-                break;
-            } else {
-                // Make sure the preferred locale doesn't have country
-                // set, when doing a language match, For ex., if the
-                // preferred locale is "en-US", if one of supported
-                // locales is "en-UK", even though its language matches
-                // that of the preferred locale, we must ignore it.
-                if (pref.getLanguage().equals(supportedLocale.getLanguage()) &&
-                     supportedLocale.getCountry().length() == 0) {
-                    result = supportedLocale;
-                }
-            }
-        }
-        // if it's not in the supported locales,
-        if (null == result) {
-            Locale defaultLocale = context.getApplication().getDefaultLocale();
-            if (defaultLocale != null) {
-                if ( pref.equals(defaultLocale)) {
-                    // exact match
-                    result = defaultLocale;
-                } else {
-                    // Make sure the preferred locale doesn't have country
-                    // set, when doing a language match, For ex., if the
-                    // preferred locale is "en-US", if one of supported
-                    // locales is "en-UK", even though its language matches
-                    // that of the preferred locale, we must ignore it.
-                    if (pref.getLanguage().equals(defaultLocale.getLanguage()) &&
-                         defaultLocale.getCountry().length() == 0) {
-                        result = defaultLocale;
-                    }
-                }
-            }
-        }
-
-        return result;
-
-    }
-
-
-    /**
-     * <p>
-     * Send {@link HttpServletResponse#SC_NOT_FOUND} (404) to the client.
-     * </p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     */
-    protected void send404Error(FacesContext context) {
-
-        try {
-            context.responseComplete();
-            context.getExternalContext().responseSendError(HttpServletResponse.SC_NOT_FOUND, "");
-        } catch (IOException ioe) {
-            throw new FacesException(ioe);
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static boolean paramHasValueExpression(UIViewParameter param) {
-
-        return (param.getValueExpression("value") != null);
-
-    }
-
-
-    private static String getStringValueToTransfer(FacesContext context,
-                                                   UIViewParameter param,
-                                                   Collection<UIViewParameter> viewParams) {
-
-        if (viewParams != null && !viewParams.isEmpty()) {
-            for (UIViewParameter candidate : viewParams) {
-                if ((null != candidate.getName() && null != param.getName()) &&
-                    candidate.getName().equals(param.getName())) {
-                    return candidate.getStringValue(context);
-                } else {
-                    return param.getStringValue(context);
-                }
-            }
-        }
-
-        return null;
-
-    }
-
-    // Utility method used by viewId conversion.  Appends the extension
-    // if no extension is present.  Otherwise, replaces the extension.
-    private void appendOrReplaceExtension(String viewId,
-                                          String ext,
-                                          int    length,
-                                          int    extIdx,
-                                          StringBuilder buffer) {
-
-        buffer.setLength(0);
-        buffer.append(viewId);
-
-        if (extIdx != -1) {
-            buffer.replace(extIdx, length, ext);
-        } else {
-            // no extension in the provided viewId, append the suffix
-            buffer.append(ext);
-        }
-    }
-
-    private String legacyConvertViewId(String viewId,
-                                       int length,
-                                       int extIdx,
-                                       StringBuilder buffer) {
-
-        // In 1.2, the viewId was converted by replacing the extension
-        // with the single extension specified by javax.faces.DEFAULT_SUFFIX,
-        // which defaulted to ".jsp".  In 2.0, javax.faces.DEFAULT_SUFFIX
-        // may specify multiple extensions.  If javax.faces.DEFAULT_SUFFIX is
-        // explicitly set, we honor it and pick off the first specified
-        // extension.  If javax.faces.DEFAULT_SUFFIX is not explicitly set,
-        // we honor the default 1.2 behavior and use ".jsp" as the suffix.
-
-        String ext = (extensionsSet && 
-                       !(configuredExtensions.length == 0)) ?
-                          configuredExtensions[0] : ".jsp";
-
-        if (viewId.endsWith(ext)) {
-            return viewId;
-        }
-
-        appendOrReplaceExtension(viewId, ext, length, extIdx, buffer);
-
-        return buffer.toString();
-    }    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/StateManagementStrategyImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/view/StateManagementStrategyImpl.java
deleted file mode 100644
index ded24e6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/StateManagementStrategyImpl.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FactoryFinder;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.render.ResponseStateManager;
-
-import com.sun.faces.context.StateContext;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.ComponentStruct;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.io.IOException;
-import javax.faces.application.StateManager;
-import javax.faces.component.ContextCallback;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.view.StateManagementStrategy;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.event.PostRestoreStateEvent;
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.view.ViewDeclarationLanguageFactory;
-
-/**
- * <p>
- * A <code>StateManager</code> implementation to meet the requirements
- * of the specification.
- * </p>
- *
- * <p>
- * For those who had compile dependencies on this class, we're sorry for any
- * inconvenience, but this had to be re-worked as the version you depended on
- * was incorrectly implemented.  
- * </p>
- */
-public class StateManagementStrategyImpl extends StateManagementStrategy {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION_VIEW.getLogger();
-
-    private final ViewDeclarationLanguageFactory vdlFactory;
-
-    private static final String CLIENTIDS_TO_REMOVE_NAME =
-            "com.sun.faces.application.view.CLIENTIDS_TO_REMOVE";
-    private static final String CLIENTIDS_TO_ADD_NAME =
-            "com.sun.faces.application.view.CLIENTIDS_TO_ADD";
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Create a new <code>StateManagerImpl</code> instance.
-     */
-    public StateManagementStrategyImpl() {
-
-        vdlFactory = (ViewDeclarationLanguageFactory)
-              FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
-
-    }
-
-    
-    // ----------------------------------------------- Methods from StateManager
-
-
-    /**
-     * @see {@link javax.faces.application.StateManager#saveView(javax.faces.context.FacesContext))
-     */
-    @Override
-    public Object saveView(FacesContext context) {
-
-        if (context == null) {
-            return null;
-        }
-
-        // irrespective of method to save the tree, if the root is transient
-        // no state information needs to  be persisted.
-        UIViewRoot viewRoot = context.getViewRoot();
-        if (viewRoot.isTransient()) {
-            return null;
-        }
-
-
-        // honor the requirement to check for id uniqueness
-        Util.checkIdUniqueness(context,
-                               viewRoot,
-                               new HashSet<String>(viewRoot.getChildCount() << 1));
-        final Map<String,Object> stateMap = new HashMap<String,Object>();
-
-// -----------------------------------------------------------------------------
-//        COMMENTED OUT DUE TO ISSUE 1310 UNTIL NEW VISIT HINTS CAN BE
-//        ADDED TO THE API
-// -----------------------------------------------------------------------------
-//        VisitContext visitContext = VisitContext.createVisitContext(context);
-//        final FacesContext finalContext = context;
-//        viewRoot.visitTree(visitContext, new VisitCallback() {
-//
-//            public VisitResult visit(VisitContext context, UIComponent target) {
-//                VisitResult result = VisitResult.ACCEPT;
-//                Object stateObj;
-//                if (!target.isTransient()) {
-//                    if (target.getAttributes().containsKey(DYNAMIC_COMPONENT)) {
-//                        stateObj = new StateHolderSaver(finalContext, target);
-//                    } else {
-//                        stateObj = target.saveState(context.getFacesContext());
-//                    }
-//                    if (null != stateObj) {
-//                        stateMap.put(target.getClientId(context.getFacesContext()),
-//                                                        stateObj);
-//                    }
-//                } else {
-//                    return result;
-//                }
-//
-//                return result;
-//            }
-//
-//        });
-// -----------------------------------------------------------------------------
-
-        StateContext stateContext = StateContext.getStateContext(context);
-
-        // ADDED FOR ISSUE 1310 - REMOVE ONCE NEW VISIT HINTS ARE ADDED TO THE
-        // API
-        saveComponentState(viewRoot, context, stateContext, stateMap);
-
-        // handle dynamic adds/removes
-        List<String> removeList = stateContext.getDynamicRemoves();
-        if (null != removeList && !removeList.isEmpty()) {
-            stateMap.put(CLIENTIDS_TO_REMOVE_NAME, removeList);
-        }
-        Map<String, ComponentStruct> addList = stateContext.getDynamicAdds();
-        if (null != addList && !addList.isEmpty()) {
-            List<Object> savedAddList = new ArrayList<Object>(addList.size());
-            for (ComponentStruct s : addList.values()) {
-                savedAddList.add(s.saveState(context));
-            }
-            stateMap.put(CLIENTIDS_TO_ADD_NAME, savedAddList.toArray());
-        }
-        //return stateMap;
-        return new Object[] { null, stateMap };
-
-    }
-
-
-    /**
-     * @see {@link StateManager#restoreView(javax.faces.context.FacesContext, String, String)}
-     */
-    @Override
-    public UIViewRoot restoreView(FacesContext context,
-                                  String viewId,
-                                  String renderKitId) {
-
-        ResponseStateManager rsm =
-              RenderKitUtils.getResponseStateManager(context, renderKitId);
-        boolean processingEvents = context.isProcessingEvents();
-        // Build the tree to initial state
-        UIViewRoot viewRoot;
-        try {
-            ViewDeclarationLanguage vdl = vdlFactory.getViewDeclarationLanguage(viewId);
-            viewRoot = vdl.getViewMetadata(context, viewId).createMetadataView(context);
-            context.setViewRoot(viewRoot);
-            context.setProcessingEvents(true);
-            vdl.buildView(context, viewRoot);
-        } catch (IOException ioe) {
-            throw new FacesException(ioe);
-        }
-        Object[] rawState = (Object[]) rsm.getState(context, viewId);
-        if (rawState == null) {
-            return null; // trigger a ViewExpiredException
-        }
-        //noinspection unchecked
-        final Map<String, Object> state = (Map<String,Object>) rawState[1];
-        final StateContext stateContext = StateContext.getStateContext(context);
-
-        if (null != state) {
-            final Application app = context.getApplication();
-            // We need to clone the tree, otherwise we run the risk
-            // of being left in a state where the restored
-            // UIComponent instances are in the session instead
-            // of the TreeNode instances.  This is a problem
-            // for servers that persist session data since
-            // UIComponent instances are not serializable.
-            VisitContext visitContext = VisitContext.createVisitContext(context);
-            viewRoot.visitTree(visitContext, new VisitCallback() {
-
-                public VisitResult visit(VisitContext context, UIComponent target) {
-                    VisitResult result = VisitResult.ACCEPT;
-                    String cid = target.getClientId(context.getFacesContext());
-                    Object stateObj = state.get(cid);
-                    if (stateObj != null && !stateContext.componentAddedDynamically(target)) {
-                        try {
-                            target.restoreState(context.getFacesContext(),
-                                                stateObj);
-                        } catch (Exception e) {
-                            String msg =
-                                  MessageUtils.getExceptionMessageString(
-                                        MessageUtils.PARTIAL_STATE_ERROR_RESTORING_ID,
-                                        cid,
-                                        e.toString());
-                            throw new FacesException(msg, e);
-                        }
-                    }
-
-                    return result;
-                }
-
-            });
-            
-            // Handle dynamic add/removes
-            //noinspection unchecked
-            List<String> removeList = (List<String>) state.get(CLIENTIDS_TO_REMOVE_NAME);
-            if (null != removeList && !removeList.isEmpty()) {
-                for (String cur : removeList) {
-                    boolean trackMods = stateContext.trackViewModifications();
-                    if (trackMods) {
-                        stateContext.setTrackViewModifications(false);
-                    }
-                    viewRoot.invokeOnComponent(context, cur, new ContextCallback() {
-
-                        public void invokeContextCallback(FacesContext context, UIComponent target) {
-                            UIComponent parent = target.getParent();
-                            if (null != parent) {
-                                parent.getChildren().remove(target);
-                            }
-                        }
-                        
-                    });
-                    if (trackMods) {
-                        stateContext.setTrackViewModifications(true);
-                    }
-                }
-            }
-
-            Object restoredAddList[] = (Object []) state.get(CLIENTIDS_TO_ADD_NAME);
-            if (restoredAddList != null && restoredAddList.length > 0) {
-                // Restore the list of added components
-                List<ComponentStruct> addList = new ArrayList<ComponentStruct>(restoredAddList.length);
-                for (Object aRestoredAddList : restoredAddList) {
-                    ComponentStruct cur = new ComponentStruct();
-                    cur.restoreState(context, aRestoredAddList);
-                    addList.add(cur);
-                }
-                // restore the components themselves
-                for (ComponentStruct cur : addList) {
-                    final ComponentStruct finalCur = cur;
-                    // Find the parent
-                    viewRoot.invokeOnComponent(context, finalCur.parentClientId,
-                            new ContextCallback() {
-                        public void invokeContextCallback(FacesContext context, UIComponent parent) {
-                            // Create the child
-                            StateHolderSaver saver = (StateHolderSaver) state.get(finalCur.clientId);
-                            UIComponent toAdd = (UIComponent) saver.restore(context);
-                            int idx = finalCur.indexOfChildInParent;
-                            if (idx == -1) {
-                                // add facet to the parent
-                                parent.getFacets().put(finalCur.facetName, toAdd);
-                            } else {
-                                // add the child to the parent at correct index
-                                try {
-                                    parent.getChildren().add(finalCur.indexOfChildInParent, toAdd);
-                                } catch (IndexOutOfBoundsException ioobe) {
-                                    // the indexing within the parent list is off during the restore.
-                                    // This is most likely due to a transient component added during
-                                    // RENDER_REPONSE phase.
-                                    if (LOGGER.isLoggable(Level.FINE)) {
-                                        LOGGER.log(Level.FINE,
-                                                   "Unable to insert child with client ID {0} into parent with client ID {1} into list at index {2}.",
-                                                   new Object[] { finalCur.clientId,
-                                                                  finalCur.parentClientId,
-                                                                  finalCur.indexOfChildInParent});
-                                    }
-                                    parent.getChildren().add(toAdd);
-                                }
-                            }
-                        }
-                    });
-                }
-            }          
-        } else {
-            viewRoot = null;
-        }
-        context.setProcessingEvents(processingEvents);
-        return viewRoot;
-
-    }
-
-
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * Temporary method added for issue 1310 to perform state saving as it
-     * was done in 1.2 as calling VisitTree in its current incarnation may
-     * have unintended side effects.
-     *
-     * @param c the component to process
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param stateMap a <code>Map</code> to push saved state keyed by
-     *  client ID
-     */
-    private void saveComponentState(UIComponent c,
-                                    FacesContext ctx,
-                                    StateContext stateContext,
-                                    Map<String, Object> stateMap) {
-
-        if (!c.isTransient()) {
-            Object stateObj;
-            if (stateContext.componentAddedDynamically(c)) {
-                stateObj = new StateHolderSaver(ctx, c);
-            } else {
-                stateObj = c.saveState(ctx);
-            }
-            if (null != stateObj) {
-                stateMap.put(c.getClientId(ctx), stateObj);
-            }
-            for (Iterator<UIComponent> i = c.getFacetsAndChildren(); i.hasNext();) {
-                saveComponentState(i.next(), ctx, stateContext, stateMap);
-            }
-        }
-
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewDeclarationLanguageFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/view/ViewDeclarationLanguageFactoryImpl.java
deleted file mode 100644
index 0c3f686..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewDeclarationLanguageFactoryImpl.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.view.ViewDeclarationLanguageFactory;
-
-/**
- *
- */
-public class ViewDeclarationLanguageFactoryImpl extends ViewDeclarationLanguageFactory {
-
-    
-    private ViewHandlingStrategyManager viewHandlingStrategy;
-
-
-    // ------------------------------------ Methods from ViewDeclarationLanguage
-
-
-    /**
-     * @see javax.faces.view.ViewDeclarationLanguageFactory#getViewDeclarationLanguage(String)
-     */
-    @Override
-    public ViewDeclarationLanguage getViewDeclarationLanguage(String viewId) {
-
-        return getViewHandlingStrategyManager().getStrategy(viewId);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private ViewHandlingStrategyManager getViewHandlingStrategyManager() {
-
-        if (viewHandlingStrategy == null) {
-            viewHandlingStrategy =
-                  new ViewHandlingStrategyManager();
-        }
-        return viewHandlingStrategy;
-
-    }
-    
-
-
-
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategy.java b/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategy.java
deleted file mode 100644
index d742129..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategy.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import java.io.IOException;
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.view.ViewDeclarationLanguage;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-/**
- * <p>
- * This represents how a particular page description language
- * is to be rendered/restored.
- * <p>
- */
-public abstract class ViewHandlingStrategy extends ViewDeclarationLanguage {
-
-    private static final Logger logger = FacesLogger.APPLICATION.getLogger();
-
-    protected ApplicationAssociate associate;
-    protected WebConfiguration webConfig;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ViewHandlingStrategy() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
-        associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
-
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @see ViewDeclarationLanguage#restoreView(javax.faces.context.FacesContext, String)
-     */
-    @Override
-    public UIViewRoot restoreView(FacesContext ctx,
-                                  String viewId) {
-
-        ExternalContext extContext = ctx.getExternalContext();
-
-        String mapping = Util.getFacesMapping(ctx);
-        UIViewRoot viewRoot = null;
-
-        // maping could be null if a non-faces request triggered
-        // this response.
-        if (extContext.getRequestPathInfo() == null && mapping != null &&
-            Util.isPrefixMapped(mapping)) {
-            // this was probably an initial request
-            // send them off to the root of the web application
-            try {
-                ctx.responseComplete();
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE, "Response Complete for" + viewId);
-                }
-                if (!extContext.isResponseCommitted()) {
-                    extContext.redirect(extContext.getRequestContextPath());
-                }
-            } catch (IOException ioe) {
-                throw new FacesException(ioe);
-            }
-        } else {
-            // this is necessary to allow decorated impls.
-            ViewHandler outerViewHandler =
-                  ctx.getApplication().getViewHandler();
-            String renderKitId =
-                  outerViewHandler.calculateRenderKitId(ctx);
-            viewRoot = Util.getStateManager(ctx).restoreView(ctx,
-                                                             viewId,
-                                                             renderKitId);
-        }
-
-        return viewRoot;
-        
-    }
-
-    
-    /**
-     * @see ViewDeclarationLanguage#createView(javax.faces.context.FacesContext, String)
-     */
-    @Override
-    public UIViewRoot createView(FacesContext ctx,
-                                 String viewId) {
-
-        Util.notNull("context", ctx);
-
-        UIViewRoot result = (UIViewRoot)
-              ctx.getApplication()
-                    .createComponent(UIViewRoot.COMPONENT_TYPE);
-
-        Locale locale = null;
-        String renderKitId = null;
-
-        // use the locale from the previous view if is was one which will be
-        // the case if this is called from NavigationHandler. There wouldn't be
-        // one for the initial case.
-        if (ctx.getViewRoot() != null) {
-            locale = ctx.getViewRoot().getLocale();
-            renderKitId = ctx.getViewRoot().getRenderKitId();
-        }
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "Created new view for " + viewId);
-        }
-        // PENDING(): not sure if we should set the RenderKitId here.
-        // The UIViewRoot ctor sets the renderKitId to the default
-        // one.
-        // if there was no locale from the previous view, calculate the locale
-        // for this view.
-        if (locale == null) {
-            locale = ctx.getApplication().getViewHandler().calculateLocale(ctx);
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine(
-                      "Locale for this view as determined by calculateLocale "
-                      + locale.toString());
-            }
-        } else {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Using locale from previous view "
-                            + locale.toString());
-            }
-        }
-
-        if (renderKitId == null) {
-            renderKitId =
-                  ctx.getApplication().getViewHandler()
-                        .calculateRenderKitId(ctx);
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine(
-                      "RenderKitId for this view as determined by calculateRenderKitId "
-                      + renderKitId);
-            }
-        } else {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Using renderKitId from previous view "
-                            + renderKitId);
-            }
-        }
-
-        result.setLocale(locale);
-        result.setRenderKitId(renderKitId);
-        result.setViewId(viewId);
-
-        return result;
-    }
-
-    /**
-     *
-     * @param viewId the view ID
-     * @return <code>true</code> if this <code>ViewHandlingStrategy</code>
-     *  handles the the view type represented by <code>viewId</code>
-     */
-    
-    public abstract boolean handlesViewId(String viewId);
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategyManager.java b/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategyManager.java
deleted file mode 100644
index c512a6a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategyManager.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import com.sun.faces.config.WebConfiguration;
-
-/**
- * Interface for working with multiple {@link com.sun.faces.application.view.ViewHandlingStrategy}
- * implementations.
- */
-public class ViewHandlingStrategyManager {
-
-    // The strategies associate with this instance
-    private volatile ViewHandlingStrategy[] strategies;
-    
-
-    // ------------------------------------------------------------- Constructor
-
-
-    /**
-     * Be default, if {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#DisableFaceletJSFViewHandler}
-     * isn't enabled, the strategies available (in order) will be {@link FaceletViewHandlingStrategy}
-     * and {@link com.sun.faces.application.view.JspViewHandlingStrategy}.  Otherwise, only the
-     * {@link com.sun.faces.application.view.JspViewHandlingStrategy} will be available.
-     */
-    public ViewHandlingStrategyManager() {
-
-        WebConfiguration webConfig = WebConfiguration.getInstance();
-        boolean pdlDisabled = webConfig
-              .isOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler);
-        strategies = ((pdlDisabled)
-                      ? new ViewHandlingStrategy[] { new JspViewHandlingStrategy() }
-                      : new ViewHandlingStrategy[] { new FaceletViewHandlingStrategy(),
-                                                     new JspViewHandlingStrategy() });
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>
-     * Iterate through the available {@link com.sun.faces.application.view.ViewHandlingStrategy}
-     * implementations.  The first one to return true from {@link com.sun.faces.application.view.ViewHandlingStrategy#handlesViewId(String)}
-     * will be the {@link com.sun.faces.application.view.ViewHandlingStrategy} returned.
-     * <p>
-     *
-     * @param viewId the viewId to match a {@link com.sun.faces.application.view.ViewHandlingStrategy} to
-     *
-     * @throws ViewHandlingStrategyNotFoundException if no match is found.
-     *
-     * @return a {@link com.sun.faces.application.view.ViewHandlingStrategy} for
-     *  the specifed <code>viewId</code>
-     */
-    public ViewHandlingStrategy getStrategy(String viewId) {
-
-        for (ViewHandlingStrategy strategy : strategies) {
-            if (strategy.handlesViewId(viewId)) {
-                return strategy;
-            }
-        }
-        throw new ViewHandlingStrategyNotFoundException();
-        
-    }
-
-
-    /**
-     * @return the currently registered {@link com.sun.faces.application.view.ViewHandlingStrategy}
-     *  implementations.
-     */
-    public ViewHandlingStrategy[] getViewHandlingStrategies() {
-
-        return strategies.clone();
-
-    }
-
-
-    /**
-     * Update the {@link com.sun.faces.application.view.ViewHandlingStrategy} implementations
-     * to be applied when processing JSF requests.
-     * @param stratagies the new view handling strategies
-     */
-    public synchronized void setViewHandlingStrategies(ViewHandlingStrategy[] stratagies) {
-
-        this.strategies = stratagies.clone();
-        
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategyNotFoundException.java b/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategyNotFoundException.java
deleted file mode 100644
index 6199bfd..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewHandlingStrategyNotFoundException.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import javax.faces.FacesException;
-
-/**
- * Indicates that no {@link com.sun.faces.application.view.ViewHandlingStrategy}
- * instances were found appropriate to a particulare view ID.
- */
-public class ViewHandlingStrategyNotFoundException extends FacesException {
-
-    private static final long serialVersionUID = 542553047788916981L;
-
-
-    // ------------------------------------------------------------ Constructors
-
-    /**
-     * @see javax.faces.FacesException#Exception()
-     */
-    public ViewHandlingStrategyNotFoundException() {
-
-        super();
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewMetadataImpl.java b/jsf-ri/src/main/java/com/sun/faces/application/view/ViewMetadataImpl.java
deleted file mode 100644
index 76e8934..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/ViewMetadataImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import com.sun.faces.facelets.Facelet;
-import com.sun.faces.facelets.FaceletFactory;
-import com.sun.faces.application.ApplicationAssociate;
-
-
-import java.io.IOException;
-import javax.faces.view.ViewMetadata;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.FacesException;
-import javax.faces.application.ViewHandler;
-
-
-/**
- * @see javax.faces.view.ViewMetadata
- */
-public class ViewMetadataImpl extends ViewMetadata {
-
-    private String viewId;
-    private FaceletFactory faceletFactory;
-    
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ViewMetadataImpl(String viewId) {
-
-        this.viewId = viewId;
-
-    }
-
-
-    // ----------------------------------------------- Methods from ViewMetadata
-
-
-    /**
-     * @see javax.faces.view.ViewMetadata#getViewId()
-     */
-    @Override
-    public String getViewId() {
-
-        return viewId;
-
-    }
-
-    /**
-     * @see javax.faces.view.ViewMetadata#createMetadataView(javax.faces.context.FacesContext)
-     */
-    @Override
-    public UIViewRoot createMetadataView(FacesContext context) {
-
-        UIViewRoot result = null;
-
-        try {
-            context.setProcessingEvents(false);
-            if (faceletFactory == null) {
-                ApplicationAssociate associate = ApplicationAssociate
-                      .getInstance(context.getExternalContext());
-                faceletFactory = associate.getFaceletFactory();
-                assert (faceletFactory != null);
-            }
-            ViewHandler vh = context.getApplication().getViewHandler();
-            result = vh.createView(context, viewId);
-            Facelet f = faceletFactory.getMetadataFacelet(result.getViewId());
-
-            f.apply(context, result);
-        } catch (IOException ioe) {
-            throw new FacesException(ioe);
-        } finally {
-            context.setProcessingEvents(true);
-        }
-
-
-        return result;
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/application/view/WriteBehindStateWriter.java b/jsf-ri/src/main/java/com/sun/faces/application/view/WriteBehindStateWriter.java
deleted file mode 100644
index cbd5f9d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/application/view/WriteBehindStateWriter.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.view;
-
-import java.io.Writer;
-import java.io.IOException;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.application.StateManager;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.util.Util;
-import com.sun.faces.io.FastStringWriter;
-
-/**
- * Custom {@link Writer} to efficiently handle the state manager replacement
- * marker written out by {@link MultiViewHandler#writeState(javax.faces.context.FacesContext)}.
- */
-final class WriteBehindStateWriter extends Writer {
-
-    // length of the state marker
-    private static final int STATE_MARKER_LEN =
-          RIConstants.SAVESTATE_FIELD_MARKER.length();
-
-    private static final ThreadLocal<WriteBehindStateWriter> CUR_WRITER =
-          new ThreadLocal<WriteBehindStateWriter>();
-    private Writer out;
-    private Writer orig;
-    private FastStringWriter fWriter;
-    private boolean stateWritten;
-    private int bufSize;
-    private char[] buf;
-    private FacesContext context;
-
-
-    // -------------------------------------------------------- Constructors
-
-
-    /**
-     * Constructs a new <code>WriteBehindStateWriter</code> instance.
-     *
-     * @param out the writer we write non-buffered content to
-     * @param context the {@link FacesContext} for the current request
-     * @param bufSize the buffer size for post-processing buffered content
-     */
-    public WriteBehindStateWriter(Writer out,
-                                  FacesContext context,
-                                  int bufSize) {
-        this.out = out;
-        this.orig = out;
-        this.context = context;
-        this.bufSize = bufSize;
-        this.buf = new char[bufSize];
-        CUR_WRITER.set(this);
-        
-    }
-
-
-    // ------------------------------------------------- Methods from Writer
-
-
-    /**
-     * Writes directly to the current <code>out</code>.
-     *
-     * @see Writer#write(int)
-     */
-    public void write(int c) throws IOException {
-        out.write(c);
-    }
-
-
-    /**
-     * Writes directly to the current <code>out</code>.
-     *
-     * @see Writer#write(char[])
-     */
-    public void write(char cbuf[]) throws IOException {
-        out.write(cbuf);
-    }
-
-
-    /**
-     * Writes directly to the current <code>out</code>.
-     *
-     * @see Writer#write(String)
-     */
-    public void write(String str) throws IOException {
-        out.write(str);
-    }
-
-
-    /**
-     * Writes directly to the current <code>out</code>.
-     *
-     * @see Writer#write(String, int, int)
-     */
-    public void write(String str, int off, int len) throws IOException {
-        out.write(str, off, len);
-    }
-
-
-    /**
-     * Writes directly to the current <code>out</code>.
-     *
-     * @see Writer#write(char[], int, int)
-     */
-    public void write(char cbuf[], int off, int len) throws IOException {
-        out.write(cbuf, off, len);
-    }
-
-
-    /**
-     * This is a no-op.
-     */
-    public void flush() throws IOException {
-        // no-op
-    }
-
-
-    /**
-     * This is a no-op.
-     */
-    public void close() throws IOException {
-        // no-op
-    }
-
-
-    // ------------------------------------------------------ Public Methods
-
-
-    /**
-     * @return the <code>WriteBehindStateWriter</code> being used for processing
-     *  this request
-     */
-    public static WriteBehindStateWriter getCurrentInstance() {
-        return CUR_WRITER.get();
-    }
-
-
-    /**
-     * Clear the ThreadLocal state.
-     */
-    public void release() {
-        CUR_WRITER.remove();
-    }
-
-
-    /**
-     * When called, the original writer is backed up and replaced
-     * with a new FastStringWriter.  All content written after this method
-     * is called will then be buffered and written out later after the
-     * entire view has been rendered.
-     */
-    public void writingState() {
-        if (!stateWritten) {
-            this.stateWritten = true;
-            out = fWriter = new FastStringWriter(1024);
-        }
-    }
-
-    /**
-     * @return <code>true</code> if {@link #writingState()} has been called,
-     *  otherwise returns <code>false</code>
-     */
-    public boolean stateWritten() {
-        return stateWritten;
-    }
-
-
-    /**
-     * <p> Write directly from our FastStringWriter to the provided writer.</p>
-     *
-     * @throws IOException if an error occurs
-     */
-    public void flushToWriter() throws IOException {
-
-        // Save the state to a new instance of StringWriter to
-        // avoid multiple serialization steps if the view contains
-        // multiple forms.
-        StateManager stateManager = Util.getStateManager(context);
-        ResponseWriter origWriter = context.getResponseWriter();
-        FastStringWriter state =
-              new FastStringWriter((stateManager.isSavingStateInClient(
-                    context)) ? bufSize : 128);
-        context.setResponseWriter(origWriter.cloneWithWriter(state));
-        stateManager.writeState(context, stateManager.saveView(context));
-        context.setResponseWriter(origWriter);
-        StringBuilder builder = fWriter.getBuffer();
-        // begin writing...
-        int totalLen = builder.length();
-        StringBuilder stateBuilder = state.getBuffer();
-        int stateLen = stateBuilder.length();
-        int pos = 0;
-        int tildeIdx = getNextDelimiterIndex(builder, pos);
-        while (pos < totalLen) {
-            if (tildeIdx != -1) {
-                if (tildeIdx > pos && (tildeIdx - pos) > bufSize) {
-                    // there's enough content before the first ~
-                    // to fill the entire buffer
-                    builder.getChars(pos, (pos + bufSize), buf, 0);
-                    orig.write(buf);
-                    pos += bufSize;
-                } else {
-                    // write all content up to the first '~'
-                    builder.getChars(pos, tildeIdx, buf, 0);
-                    int len = (tildeIdx - pos);
-                    orig.write(buf, 0, len);
-                    // now check to see if the state saving string is
-                    // at the begining of pos, if so, write our
-                    // state out.
-                    if (builder.indexOf(
-                          RIConstants.SAVESTATE_FIELD_MARKER,
-                          pos) == tildeIdx) {
-                        // buf is effectively zero'd out at this point
-                        int statePos = 0;
-                        while (statePos < stateLen) {
-                            if ((stateLen - statePos) > bufSize) {
-                                // enough state to fill the buffer
-                                stateBuilder.getChars(statePos,
-                                                      (statePos + bufSize),
-                                                      buf,
-                                                      0);
-                                orig.write(buf);
-                                statePos += bufSize;
-                            } else {
-                                int slen = (stateLen - statePos);
-                                stateBuilder.getChars(statePos,
-                                                      stateLen,
-                                                      buf,
-                                                      0);
-                                orig.write(buf, 0, slen);
-                                statePos += slen;
-                            }
-
-                        }
-                        // push us past the last '~' at the end of the marker
-                        pos += (len + STATE_MARKER_LEN);
-                        tildeIdx = getNextDelimiterIndex(builder, pos);
-                    } else {
-                        pos = tildeIdx;
-                        tildeIdx = getNextDelimiterIndex(builder,
-                                                         tildeIdx + 1);
-
-                    }
-                }
-            } else {
-                // we've written all of the state field markers.
-                // finish writing content
-                if (totalLen - pos > bufSize) {
-                    // there's enough content to fill the buffer
-                    builder.getChars(pos, (pos + bufSize), buf, 0);
-                    orig.write(buf);
-                    pos += bufSize;
-                } else {
-                    // we're near the end of the response
-                    builder.getChars(pos, totalLen, buf, 0);
-                    int len = (totalLen - pos);
-                    orig.write(buf, 0, len);
-                    pos += (len + 1);
-                }
-            }
-        }
-
-        // all state has been written.  Have 'out' point to the
-        // response so that all subsequent writes will make it to the
-        // browser.
-        out = orig;
-
-    }
-
-
-    /**
-     * @param builder buffered content
-     * @param offset the offset to start the search from
-     * @return the index of the next delimiter, if any
-     */
-    private static int getNextDelimiterIndex(StringBuilder builder,
-                                             int offset) {
-
-        return builder.indexOf(RIConstants.SAVESTATE_FIELD_DELIMITER,
-                               offset);
-
-    }
-
-}
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/component/ComponentResourceContainer.java b/jsf-ri/src/main/java/com/sun/faces/component/ComponentResourceContainer.java
deleted file mode 100644
index 1eca9b9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/component/ComponentResourceContainer.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component;
-
-import javax.faces.component.UIPanel;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-public class ComponentResourceContainer extends UIPanel {
-
-    /**
-     * Take no action to prevent component resources from inadvertantly
-     * being rendered.
-     */
-    @Override
-    public void encodeAll(FacesContext context) throws IOException {
-        // no-op
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/component/CompositeComponentStackManager.java b/jsf-ri/src/main/java/com/sun/faces/component/CompositeComponentStackManager.java
deleted file mode 100644
index 8078ab1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/component/CompositeComponentStackManager.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.view.Location;
-import javax.faces.application.Resource;
-import java.util.Stack;
-
-/**
- * <p>
- * <code>CompositeComponentStackManager</code> is responsible for managing the
- * two different composite component stacks currently used by Mojarra.
- * </p>
- *
- * <p>
- * The stacks are identified by the {@link StackType} enum which has two elements,
- * <code>TreeCreation<code> and <code>Evaluation</code>.
- * </p>
- *
- * <p>
- * The <code>TreeCreation</code> stack represents the composite components that
- * have been pushed by the TagHandlers responsible for building the tree.
- * </p>
- *
- * <p>
- * The <code>Evaluation</code> stack is used by the EL in order to properly
- * resolve nested composite component expressions.
- * </p>
- */
-public class CompositeComponentStackManager {
-
-
-    private static final String MANAGER_KEY =
-          CompositeComponentStackManager.class.getName();
-
-
-    public enum StackType {
-        TreeCreation,
-        Evaluation
-    }
-
-    private StackHandler treeCreation = new TreeCreationStackHandler();
-    private StackHandler runtime = new RuntimeStackHandler();
-    private FacesContext ctx;
-
-    
-    // ------------------------------------------------------------ Constructors
-
-
-    private CompositeComponentStackManager(FacesContext ctx) {
-
-        this.ctx = ctx;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @return the <code>CompositeComponentStackManager</code> for the current
-     *  request
-     */
-    public static CompositeComponentStackManager getManager(FacesContext ctx) {
-
-        CompositeComponentStackManager manager =
-              (CompositeComponentStackManager) ctx.getAttributes().get(MANAGER_KEY);
-        if (manager == null) {
-            manager = new CompositeComponentStackManager(ctx);
-            ctx.getAttributes().put(MANAGER_KEY, manager);
-        }
-
-        return manager;
-
-    }
-
-
-    /**
-     * <p>
-     * Pushes the specified composite component to the <code>Evaluation</code>
-     * stack.
-     * </p>
-     *
-     * @param compositeComponent the component to push
-     * @return <code>true</code> if the component was pushed, otherwise
-     *  returns <code>false</code>
-     */
-    public boolean push(UIComponent compositeComponent) {
-        return getStackHandler(StackType.Evaluation).push(compositeComponent);
-    }
-
-
-    /**
-     * <p>
-     * Pushes the specified composite component to the desired <code>StackType</code>
-     * stack.
-     * </p>
-     *
-     * @param compositeComponent the component to push
-     * @param stackType the stack to push to the component to
-     * @return <code>true</code> if the component was pushed, otherwise
-     *  returns <code>false</code>
-     */
-    public boolean push(UIComponent compositeComponent, StackType stackType) {
-        return getStackHandler(stackType).push(compositeComponent);
-    }
-
-
-    /**
-     * <p>
-     * Pushes a component derived by the push logic to the <code>Evaluation</code>
-     * stack.
-     * </p>
-     *
-     * @return <code>true</code> if the component was pushed, otherwise
-     *  returns <code>false</code>
-     */
-    public boolean push() {
-        return getStackHandler(StackType.Evaluation).push();
-    }
-
-
-    /**
-     * <p>
-     * Pushes a component derived by the push logic to the specified stack.
-     * </p>
-     *
-     * @param stackType the stack to push to the component to
-     *
-     * @return <code>true</code> if the component was pushed, otherwise
-     *  returns <code>false</code>
-     */
-    public boolean push(StackType stackType) {
-        return getStackHandler(stackType).push();
-    }
-
-
-    /**
-     * <p>
-     * Pops the top-level component from the stack.
-     * </p>
-     *
-     * @param stackType the stack to pop the top level component from
-     */
-    public void pop(StackType stackType) {
-        getStackHandler(stackType).pop();
-    }
-
-
-    /**
-     * <p>
-     * Pops the top-level component from the <code>Evaluation</code> stack.
-     * </p>
-     */
-    public void pop() {
-        getStackHandler(StackType.Evaluation).pop();
-    }
-
-
-    /**
-     * @return the top-level component from the <code>Evaluation</code> stack
-     *  without removing the element
-     */
-    public UIComponent peek() {
-        return getStackHandler(StackType.Evaluation).peek();
-    }
-
-
-    /**
-     * @param stackType the stack to push to the component to
-     * 
-     * @return the top-level component from the specified stack
-     *  without removing the element
-     */
-    public UIComponent peek(StackType stackType) {
-        return getStackHandler(stackType).peek();
-    }
-
-
-    public UIComponent getParentCompositeComponent(StackType stackType,
-                                                   FacesContext ctx,
-                                                   UIComponent forComponent) {
-        return getStackHandler(stackType).getParentCompositeComponent(ctx, forComponent);
-    }
-
-    public UIComponent findCompositeComponentUsingLocation(FacesContext ctx,
-                                                           Location location) {
-
-        StackHandler sh = getStackHandler(StackType.TreeCreation);
-        Stack<UIComponent> s = sh.getStack(false);
-        if (s != null) {
-            String path = location.getPath();
-            for (int i = s.size(); i > 0; i--) {
-                UIComponent cc = s.get(i - 1);
-                Resource r = (Resource) cc.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
-                if (path.endsWith('/' + r.getResourceName()) && path.contains(r.getLibraryName())) {
-                    return cc;
-                }
-            }
-        } else {
-            // runtime eval
-            String path = location.getPath();
-            UIComponent cc = UIComponent.getCurrentCompositeComponent(ctx);
-            while (cc != null) {
-                Resource r = (Resource) cc.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
-                if (path.endsWith('/' + r.getResourceName()) && path.contains(r.getLibraryName())) {
-                    return cc;
-                }
-                cc = UIComponent.getCompositeComponentParent(cc);
-            }
-        }
-        return null;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private StackHandler getStackHandler(StackType type) {
-
-        StackHandler handler = null;
-        switch (type) {
-            case TreeCreation: handler = treeCreation; break;
-            case Evaluation: handler = runtime; break;
-        }
-        return handler;
-
-    }
-
-
-    // ------------------------------------------------------ Private Interfaces
-
-
-    private interface StackHandler {
-
-        boolean push(UIComponent compositeComponent);
-        boolean push();
-        void pop();
-        UIComponent peek();
-        UIComponent getParentCompositeComponent(FacesContext ctx, UIComponent forComponent);
-        void delete();
-        Stack<UIComponent> getStack(boolean create);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private abstract class BaseStackHandler implements StackHandler {
-
-        protected Stack<UIComponent> stack;
-
-
-        // ------------------------------------------- Methods from StackHandler
-
-
-        public void delete() {
-
-            stack = null;
-
-        }
-
-
-        public Stack<UIComponent> getStack(boolean create) {
-
-            if (stack == null && create) {
-                stack = new Stack<UIComponent>();
-            }
-            return stack;
-
-        }
-
-
-        public UIComponent peek() {
-
-            if (stack != null && !stack.isEmpty()) {
-                return stack.peek();
-            }
-            return null;
-            
-        }
-
-    } // END BaseStackHandler
-
-
-    private final class RuntimeStackHandler extends BaseStackHandler {
-
-
-        // ------------------------------------------- Methods from StackHandler
-
-
-        public void delete() {
-
-            Stack s = getStack(false);
-            if (s != null) {
-                s.clear();
-            }
-
-        }
-
-
-        public void pop() {
-
-            Stack s = getStack(false);
-            if (s != null && !s.isEmpty()) {
-                s.pop();
-            }
-
-        }
-
-
-        public boolean push() {
-
-            return push(null);
-
-        }
-
-
-        public boolean push(UIComponent compositeComponent) {
-
-            Stack<UIComponent> tstack =
-                  CompositeComponentStackManager.this.treeCreation.getStack(false);
-            Stack<UIComponent> stack = getStack(false);
-            UIComponent ccp;
-            if (tstack != null) {
-                // We have access to the stack of composite components
-                // the tree creation process has made available.
-                // Since we can' reliably access the parent composite component
-                // of the current composite component, use the index of the
-                // current composite component within the stack to locate the
-                // parent.
-                ccp = compositeComponent;
-            } else {
-                // no tree creation stack available, so use the runtime stack.
-                // If the current stack isn't empty, then use the component
-                // on the stack as the current composite component.
-                stack = getStack(false);
-
-                if (compositeComponent == null) {
-                    if (stack != null && !stack.isEmpty()) {
-                        ccp = getCompositeParent(stack.peek());
-                    } else {
-                        ccp = getCompositeParent((UIComponent
-                              .getCurrentCompositeComponent(ctx)));
-                    }
-                } else {
-                    ccp = compositeComponent;
-                }
-            }
-
-
-            if (ccp != null) {
-                if (stack == null) {
-                    stack = getStack(true);
-                }
-                stack.push(ccp);
-                return true;
-            }
-            return false;
-
-        }
-
-        public UIComponent getParentCompositeComponent(FacesContext ctx,
-                                                       UIComponent forComponent) {
-
-            return getCompositeParent(forComponent);
-
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private UIComponent getCompositeParent(UIComponent comp) {
-
-            return UIComponent.getCompositeComponentParent(comp);
-
-        }
-
-    } // END RuntimeStackHandler
-
-
-    private final class TreeCreationStackHandler extends BaseStackHandler {
-
-
-        // ------------------------------------------- Methods from StackHandler
-
-
-        public void pop() {
-
-            Stack s = getStack(false);
-            if (s != null && !stack.isEmpty()) {
-                stack.pop();
-                if (stack.isEmpty()) {
-                    delete();
-                }
-            }
-
-        }
-
-
-        public boolean push() {
-
-            return false;
-
-        }
-
-
-        public boolean push(UIComponent compositeComponent) {
-
-            if (compositeComponent != null) {
-                assert (UIComponent.isCompositeComponent(compositeComponent));
-                Stack<UIComponent> s = getStack(true);
-                s.push(compositeComponent);
-                return true;
-            }
-            return false;
-
-        }
-
-
-        public UIComponent getParentCompositeComponent(FacesContext ctx, UIComponent forComponent) {
-
-            Stack<UIComponent> s = getStack(false);
-            if (s == null) {
-                return null;
-            } else {
-                int idx = s.indexOf(forComponent);
-                if (idx == 0) { // no parent
-                    return null;
-                }
-                return (s.get(idx - 1));
-            }
-        }
-        
-    } // END TreeCreationStackHandler
-
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/component/behavior/AjaxBehaviors.java b/jsf-ri/src/main/java/com/sun/faces/component/behavior/AjaxBehaviors.java
deleted file mode 100644
index a68b686..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/component/behavior/AjaxBehaviors.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
- 
-package com.sun.faces.component.behavior;
-
-import java.io.Serializable;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.application.Application;
-import javax.faces.component.behavior.AjaxBehavior;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorHint;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.FacesContext;
-
-/**
- * <p class="changed_added_2_0">An instance of the class is used to 
- * manage {@link AjaxBehavior} instances.</p>
- *
- * @since 2.0
- */
-public class AjaxBehaviors implements Serializable {
-
-    private static final String AJAX_BEHAVIORS = "javax.faces.component.AjaxBehaviors";
-
-    private LinkedList<BehaviorInfo> behaviorStack = null;
-
-    public AjaxBehaviors() {
-        behaviorStack = new LinkedList<BehaviorInfo>();
-    }
-
-    // Returns the AjaxBehaviors instance, creating it if necessary.
-    public static AjaxBehaviors getAjaxBehaviors(FacesContext context,
-                                                 boolean createIfNull) {
-
-        Map<Object, Object> attrs = context.getAttributes();
-        AjaxBehaviors ajaxBehaviors = (AjaxBehaviors)attrs.get(AJAX_BEHAVIORS);
-
-        if ((ajaxBehaviors == null) && createIfNull) {
-            ajaxBehaviors = new AjaxBehaviors();
-            attrs.put(AJAX_BEHAVIORS, ajaxBehaviors);
-        }
-
-        return ajaxBehaviors;
-    }
-
-    // Adds AjaxBehaviors to the specified ClientBehaviorHolder
-    public void addBehaviors(FacesContext context,
-                             ClientBehaviorHolder behaviorHolder) {
-
-        if ((behaviorStack == null) || behaviorStack.isEmpty()){
-            return;
-        }
-
-        // Loop over pushed Behaviors and add to the ClientBehaviorHolder.
-        // Note that we add most recently pushed behaviors first.  That
-        // way the nearest behaviors take precedence.  Behaviors that were
-        // pushed earlier won't be added since we'll already have a 
-        // submitting behavior attached.
-        int count = behaviorStack.size();
-        for (int i = count - 1; i >= 0; i--) {
-            behaviorStack.get(i).addBehavior(context, behaviorHolder);
-        }
-    }
-
-
-    /**
-     * <p>Push the {@link AjaxBehavior} into scope making it available 
-     * for subsequent calls to {@link #getBehaviorForEvent}.</p>
-     *
-     * @param ajaxBehavior the {@link AjaxBehavior} instance
-     * @param eventName the name of the event that the behavior is associated
-     *     with.
-     *
-     * @since 2.0
-     */ 
-    public void pushBehavior(FacesContext context,
-                             AjaxBehavior ajaxBehavior,
-                             String eventName) {
-        behaviorStack.add(new BehaviorInfo(context, ajaxBehavior, eventName));
-    }
-
-    /**
-     * <p>Pop the last {@link AjaxBehavior} instance 
-     * from the <code>List</code>.</p>
-     *
-     * @since 2.0
-     */
-    public void popBehavior() {
-         if (behaviorStack.size() > 0) {
-             behaviorStack.removeLast();
-         }
-    }   
-
-    // Helper class for storing and creating/applying inherited
-    // AjaxBehaviors
-    public static class BehaviorInfo {
-        private String eventName;
-        private Object behaviorState;
-
-        public BehaviorInfo(FacesContext context,
-                            AjaxBehavior ajaxBehavior,
-                            String eventName) {
-            this.eventName = eventName;
-
-            // We don't actually need the AjaxBehavior - just
-            // its state.
-            behaviorState = ajaxBehavior.saveState(context);
-        }
-
-        public void addBehavior(FacesContext context,
-                                ClientBehaviorHolder behaviorHolder) {
-
-            String eventName = this.eventName;
-            if (eventName == null) {
-                eventName = behaviorHolder.getDefaultEventName();
-
-                // No event name, default or otherwise - we're done
-                if (eventName == null) {
-                    return;
-                }
-            }
-
-            // We only add the 
-            if (shouldAddBehavior(behaviorHolder, eventName)) {
-                ClientBehavior behavior = createBehavior(context);
-                behaviorHolder.addClientBehavior(eventName, behavior);
-            }
-
-        }
-
-        // Tests whether we should add an AjaxBehavior to the specified
-        // ClientBehaviorHolder/event name.
-        private boolean shouldAddBehavior(ClientBehaviorHolder behaviorHolder,
-                                          String eventName) {
-
-            // First need to make sure that this ClientBehaviorHolder
-            // supports the specified event type.
-            if (!behaviorHolder.getEventNames().contains(eventName)) {
-                return false;
-            }
-
-            // Check for a submitting behavior already attached.
-            // If we've already got one, we don't add another.
-            Map<String,List<ClientBehavior>> allBehaviors =
-                behaviorHolder.getClientBehaviors();
-            List<ClientBehavior> eventBehaviors = allBehaviors.get(eventName);
-
-            if ((eventBehaviors == null) || (eventBehaviors.isEmpty())) {
-                return true;
-            }
-
-            for (ClientBehavior behavior : eventBehaviors) {
-                Set<ClientBehaviorHint> hints = behavior.getHints();
-
-                if (hints.contains(ClientBehaviorHint.SUBMITTING)) {
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        // Creates the AjaxBehavior
-        private ClientBehavior createBehavior(FacesContext context) {
-            Application application = context.getApplication();
-
-            // Re-create the instance via the Application
-            AjaxBehavior behavior = (AjaxBehavior)application.createBehavior(
-                                                    AjaxBehavior.BEHAVIOR_ID);
-
-            // And re-initialize its state
-            behavior.restoreState(context, behaviorState);
-
-            return behavior;
-        }
-
-        private BehaviorInfo() {
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/component/validator/ComponentValidators.java b/jsf-ri/src/main/java/com/sun/faces/component/validator/ComponentValidators.java
deleted file mode 100644
index 571fa81..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/component/validator/ComponentValidators.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component.validator;
-
-
-import com.sun.faces.util.RequestStateManager;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.validator.Validator;
-import javax.faces.application.Application;
-import javax.faces.view.facelets.ValidatorHandler;
-import javax.faces.view.facelets.FaceletContext;
-import java.util.*;
-
-/**
- * <p>
- * This class is responsible for adding default validators and/or validators
- * that wrap multiple <code>EditableValueHolder</code> instances within the view.
- * </p>
- */
-public class ComponentValidators {
-
-
-    /**
-     * Key within the <code>FacesContext</code>'s attribute map under which
-     * a single <code>ComponentValidators</code> instance will be stored.
-     */
-    private static final String COMPONENT_VALIDATORS = "javax.faces.component.ComponentValidators";
-
-
-    /**
-     * Stack of <code>ValidatorInfo<code> instances.  Each instance represents
-     * a particular nesting level within the view.  As a nesting level is encountered,
-     * a <code>ValidatorInfo</code> will be pushed to the stack and all
-     * <code>EditableValueHolder</code> instances will be configured based on
-     * all <code>ValidatorInfo</code>s on the stack.  When the current nesting level
-     * is closed, the <code>ValidatorInfo</code> instance will be popped and thus
-     * have no impact on other <code>EditableValueHolder</code>s.
-     */
-    private LinkedList<ValidatorInfo> validatorStack = null;
-
-
-    // ------------------------------------------------------------ Constructors
-
-    
-    public ComponentValidators() {
-
-        validatorStack = new LinkedList<ValidatorInfo>();
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @param context the <code>FacesContext</code> for the current request
-     * @param createIfNull flag indicating whether or not a
-     *  <code>ComponentValidators</code> instance should be created or not
-     * @return a <code>ComponentValidators</code> instance for processing
-     *  a view request.  If <code>createIfNull</code> is <code>false</code>
-     *  and no <code>ComponentValidators</code> has been created, this method
-     *  will return <code>null</code>
-     */
-    public static ComponentValidators getValidators(FacesContext context,
-                                                    boolean createIfNull) {
-
-        Map<Object, Object> attrs = context.getAttributes();
-        ComponentValidators componentValidators = (ComponentValidators) attrs
-              .get(COMPONENT_VALIDATORS);
-
-        if ((componentValidators == null) && createIfNull) {
-            componentValidators = new ComponentValidators();
-            attrs.put(COMPONENT_VALIDATORS, componentValidators);
-        }
-
-        return componentValidators;
-    }
-
-
-    /**
-     * <p>
-     * Creates and installs default validators, if any, into the argument
-     * <code>EditableValueHolder</code>.  This method is merely a utility
-     * method to be called when there is no <code>ComponentValidators</code>
-     * available, or there are no <code>ValidatorInfo</code> instances on the
-     * stack.
-     * </p>
-     *
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param editableValueHolder the component receiving the <code>Validator</code>s
-     */
-    @SuppressWarnings({"unchecked"})
-    public static void addDefaultValidatorsToComponent(FacesContext ctx,
-                                                       EditableValueHolder editableValueHolder) {
-
-        Set<String> keySet = ctx.getApplication().getDefaultValidatorInfo().keySet();
-        List<String> validatorIds = new ArrayList<String>(keySet.size());
-        Set<String> disabledValidatorIds = (Set<String>)
-              RequestStateManager.remove(ctx, RequestStateManager.DISABLED_VALIDATORS);
-        for (String key : keySet) {
-            if (disabledValidatorIds != null && disabledValidatorIds.contains(key)) {
-                continue;
-            }
-            validatorIds.add(key);
-        }
-
-        addValidatorsToComponent(ctx, validatorIds, editableValueHolder, null);
-
-    }
-
-
-    /**
-     * <p>
-     * Based on the <code>ValidatorInfo</code> instances present on the stack,
-     * configure the argument <code>EditableValueHolder</code> with <code>Validator</code>s
-     * created from the available info.
-     * </p>
-     *
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param editableValueHolder the component receiving the <code>Validator</code>s
-     */
-    @SuppressWarnings({"unchecked"})
-    public void addValidators(FacesContext ctx,
-                              EditableValueHolder editableValueHolder) {
-
-        if ((validatorStack == null) || validatorStack.isEmpty()) {
-            addDefaultValidatorsToComponent(ctx, editableValueHolder);
-            return;
-        }
-
-        Application application = ctx.getApplication();
-        Map<String, String> defaultValidatorInfo =
-              application.getDefaultValidatorInfo();
-        Set<String> keySet = defaultValidatorInfo.keySet();
-
-        List<String> validatorIds = new ArrayList<String>(keySet.size());
-        for (String key : keySet) {
-            validatorIds.add(key);
-        }
-
-        Set<String> disabledIds = (Set<String>)
-              RequestStateManager.remove(ctx,
-                                         RequestStateManager.DISABLED_VALIDATORS);
-        int count = validatorStack.size();
-        for (int i = count - 1; i >= 0; i--) {
-            ValidatorInfo info = validatorStack.get(i);
-            if (!info.isEnabled() || (disabledIds != null && disabledIds.contains(info.getValidatorId()))) {
-                if (validatorIds.contains(info.getValidatorId())) {
-                    validatorIds.remove(info.getValidatorId());
-                }
-            } else {
-                if (!validatorIds.contains(info.getValidatorId())) {
-                    validatorIds.add(info.getValidatorId());
-                }
-            }
-        }
-
-        // add the validators to the EditableValueHolder.
-        addValidatorsToComponent(ctx,
-                                 validatorIds,
-                                 editableValueHolder,
-                                 ((validatorStack == null || validatorStack.isEmpty())
-                                     ? null
-                                     : validatorStack));
-        
-    }
-
-
-    /**
-     * <p>
-     * Pushes the provided <code>ValidatorInfo</code> onto the stack.
-     * </p>
-     *
-     * @param info
-     */
-    public void pushValidatorInfo(ValidatorInfo info) {
-
-        validatorStack.add(info);
-
-    }
-
-
-    /**
-     * <p>
-     * Pops the last <code>ValidatorInfo</code> instance from the stack.
-     * </p>
-     */
-    public void popValidatorInfo() {
-
-        if (validatorStack.size() > 0) {
-            validatorStack.removeLast();
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>
-     * Install the validators, if not already present on the component,
-     * using the IDs included in <code>validatorIds</code>.
-     * </p>
-     *
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param validatorIds the validator IDs to be added to the
-     *  <code>EditableValueHolder</code>
-     * @param editableValueHolder the target component to which the validators
-     *  installed
-     * @param validatorStack current stack of ValidatorInfo instances
-     */
-    private static void addValidatorsToComponent(FacesContext ctx,
-                                                 Collection<String> validatorIds,
-                                                 EditableValueHolder editableValueHolder,
-                                                 LinkedList<ValidatorInfo> validatorStack) {
-
-        if (validatorIds == null || validatorIds.isEmpty()) {
-            return;
-        }
-
-        Application application = ctx.getApplication();
-        Map<String,String> defaultValidatorInfo =
-              application.getDefaultValidatorInfo();
-        Validator[] validators = editableValueHolder.getValidators();
-        // check to make sure that Validator instances haven't already
-        // been added.
-        for (Map.Entry<String,String> defaultValidator : defaultValidatorInfo.entrySet()) {
-            for (Validator validator : validators) {
-                if (defaultValidator.getValue().equals(validator.getClass().getName())) {
-                    validatorIds.remove(defaultValidator.getKey());
-                    break;
-                }
-            }
-        }
-
-        // we now have the complete List of Validator IDs to add to the
-        // target EditablValueHolder
-        for (String id : validatorIds) {
-            Validator v = application.createValidator(id);
-            // work backwards up the stack of ValidatorInfo to find the
-            // nearest matching ValidatorInfo to apply attributes
-            if (validatorStack != null) {
-                for (int i = validatorStack.size() - 1; i >= 0; i--) {
-                    ValidatorInfo info = validatorStack.get(i);
-                    if (id.equals(info.getValidatorId())) {
-                        info.applyAttributes(v);
-                        break;
-                    }
-                }
-            }
-            editableValueHolder.addValidator(v);
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Generic information container for a validator at a particular
-     * nesting Level.
-     */
-    public static class ValidatorInfo {
-
-        private String validatorId;
-        private boolean enabled;
-        private ValidatorHandler owner;
-        private FaceletContext ctx;
-
-
-        // ------------------------------------------------------------ Constructors
-
-
-        public ValidatorInfo(FaceletContext ctx,
-                             ValidatorHandler owner) {
-
-            this.owner = owner;
-            this.ctx = ctx;
-            this.validatorId = owner.getValidatorId(ctx);
-            this.enabled = !owner.isDisabled(ctx);
-
-        }
-
-
-        // -------------------------------------------------------------------------
-
-
-        public String getValidatorId() {
-
-            return validatorId;
-
-        }
-
-
-        public boolean isEnabled() {
-
-            return enabled;
-
-        }
-
-        public void applyAttributes(Validator v) {
-
-            owner.setAttributes(ctx, v);
-            
-        }
-
-    } // END ValidatorInfo
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/component/visit/FullVisitContext.java b/jsf-ri/src/main/java/com/sun/faces/component/visit/FullVisitContext.java
deleted file mode 100644
index 37968ec..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/component/visit/FullVisitContext.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component.visit;
-
-import javax.faces.component.visit.*;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.Set;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- *
- * <p class="changed_added_2_0">A VisitContext implementation that is 
- * used when performing a full component tree visit.</p>
- *
- * RELEASE_PENDING
- *
- * @since 2.0
- */
-public class FullVisitContext extends VisitContext {
-
-    /**
-     * Creates a FullVisitorContext instance.
-     * @param facesContext the FacesContext for the current request
-     * @throws NullPointerException  if {@code facesContext}
-     *                               is {@code null}
-     */    
-    public FullVisitContext(FacesContext facesContext) {
-        this(facesContext, null);
-    }
-
-    /**
-     * Creates a FullVisitorContext instance with the specified
-     * hints.
-     *
-     * @param facesContext the FacesContext for the current request
-     * @param hints a the VisitHints for this visit
-     * @throws NullPointerException  if {@code facesContext}
-     *                               is {@code null}
-     */    
-    public FullVisitContext(FacesContext facesContext,
-                            Set<VisitHint> hints) {
-
-        if (facesContext == null) {
-            throw new NullPointerException();
-        }
-
-        this.facesContext = facesContext;
-
-        // Copy and store hints - ensure unmodifiable and non-empty
-        EnumSet<VisitHint> hintsEnumSet = ((hints == null) || (hints.isEmpty()))
-                                          ? EnumSet.noneOf(VisitHint.class)
-                                          : EnumSet.copyOf(hints);
-
-        this.hints = Collections.unmodifiableSet(hintsEnumSet);
-    }
-
-    /**
-     * @see VisitContext#getFacesContext VisitContext.getFacesContext()
-     */
-    @Override
-    public FacesContext getFacesContext() {
-        return facesContext;
-    }
-
-    /**
-     * @see VisitContext#getIdsToVisit VisitContext.getIdsToVisit()
-     */
-    @Override
-    public Collection<String> getIdsToVisit() {
-
-        // We always visits all ids
-        return ALL_IDS;
-    }
-
-    /**
-     * @see VisitContext#getSubtreeIdsToVisit VisitContext.getSubtreeIdsToVisit()
-     */
-    @Override
-    public Collection<String> getSubtreeIdsToVisit(UIComponent component) {
-
-        // Make sure component is a NamingContainer
-        if (!(component instanceof NamingContainer)) {
-            throw new IllegalArgumentException("Component is not a NamingContainer: " + component);
-        }
-
-        // We always visits all ids
-        return ALL_IDS;
-    }
-
-    /**
-     * @see VisitContext#getHints VisitContext.getHints
-     */
-    @Override
-    public Set<VisitHint> getHints() {
-        return hints;
-    }
-
-    /**
-     * @see VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()
-     */
-    @Override
-    public VisitResult invokeVisitCallback(UIComponent component, 
-                                           VisitCallback callback) {
-
-        // Nothing interesting here - just invoke the callback.
-        // (PartialVisitContext.invokeVisitCallback() does all of the 
-        // interesting work.)
-        return callback.visit(this, component);
-    }
-
-    // The FacesContext for this request
-    private FacesContext facesContext;
-
-    // Our visit hints
-    private Set<VisitHint> hints;
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/component/visit/PartialVisitContext.java b/jsf-ri/src/main/java/com/sun/faces/component/visit/PartialVisitContext.java
deleted file mode 100644
index 4e28009..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/component/visit/PartialVisitContext.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component.visit;
-
-import javax.faces.component.visit.*;
-import java.util.AbstractCollection;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.NamingContainer;
-import javax.faces.context.FacesContext;
-
-/**
- *
- * <p class="changed_added_2_0">A VisitContext implementation that is
- * used when performing a partial component tree visit.</p>
- *
- * RELEASE_PENDING
- * @since 2.0
- */
-public class PartialVisitContext extends VisitContext {
-
-    /**
-     * Creates a PartialVisitorContext instance.
-     * @param facesContext the FacesContext for the current request
-     * @param clientIds the client ids of the components to visit
-     * @throws NullPointerException  if {@code facesContext}
-     *                               is {@code null}
-     */    
-    public PartialVisitContext(FacesContext facesContext,
-                               Collection<String> clientIds) {
-        this(facesContext, clientIds, null);
-    }
-
-    /**
-     * Creates a PartialVisitorContext instance with the specified hints.
-     * @param facesContext the FacesContext for the current request
-     * @param clientIds the client ids of the components to visit
-     * @param hints a the VisitHints for this visit
-     * @throws NullPointerException  if {@code facesContext}
-     *                               is {@code null}
-     */    
-    public PartialVisitContext(FacesContext facesContext,
-                               Collection<String> clientIds,
-                               Set<VisitHint> hints) {
-        if (facesContext == null) {
-            throw new NullPointerException();
-        }
-
-        this.facesContext = facesContext;
-
-        // Initialize our various collections
-        initializeCollections(clientIds);
-
-        // Copy and store hints - ensure unmodifiable and non-empty
-        EnumSet<VisitHint> hintsEnumSet = ((hints == null) || (hints.isEmpty()))
-                                          ? EnumSet.noneOf(VisitHint.class)
-                                          : EnumSet.copyOf(hints);
-
-        this.hints = Collections.unmodifiableSet(hintsEnumSet);
-    }
-
-    /**
-     * @see VisitContext#getFacesContext VisitContext.getFacesContext()
-     */
-    @Override
-    public FacesContext getFacesContext() {
-        return facesContext;
-    }
-
-    /**
-     * @see VisitContext#getHints VisitContext.getHints
-     */
-    @Override
-    public Set<VisitHint> getHints() {
-        return hints;
-    }
-
-    /**
-     * @see VisitContext#getIdsToVisit VisitContext.getIdsToVisit()
-     */
-    @Override
-    public Collection<String> getIdsToVisit() {
-
-        // We just return our clientIds collection.  This is
-        // the modifiable (but proxied) collection of all of
-        // the client ids to visit.
-        return clientIds;
-    }
-
-    /**
-     * @see VisitContext#getSubtreeIdsToVisit VisitContext.getSubtreeIdsToVisit()
-     */
-    @Override
-    public Collection<String> getSubtreeIdsToVisit(UIComponent component) {
-
-        // Make sure component is a NamingContainer
-        if (!(component instanceof NamingContainer)) {
-            throw new IllegalArgumentException("Component is not a NamingContainer: " + component);
-        }
-
-        String clientId = component.getClientId();
-        Collection<String> ids = subtreeClientIds.get(clientId);
-
-        if (ids == null)
-          return Collections.emptyList();
-
-        return Collections.unmodifiableCollection(ids);     
-    }
-
-    /**
-     * @see VisitContext#invokeVisitCallback VisitContext.invokeVisitCallback()
-     */
-    @Override
-    public VisitResult invokeVisitCallback(UIComponent component, 
-                                           VisitCallback callback) {
-
-        // First sure that we should visit this component - ie.
-        // that this component is represented in our id set.
-        String clientId = getVisitId(component);
-
-        if (clientId == null) {
-            // Not visiting this component, but allow visit to
-            // continue into this subtree in case we've got
-            // visit targets there.
-            return VisitResult.ACCEPT;
-        }
-
-        // If we made it this far, the component matches one of
-        // client ids, so perform the visit.
-        VisitResult result = callback.visit(this, component);
-
-        // Remove the component from our "unvisited" collection
-        unvisitedClientIds.remove(clientId);
-
-        // If the unvisited collection is now empty, we are done.
-        // Return VisitResult.COMPLETE to terminate the visit.
-        if (unvisitedClientIds.isEmpty())
-            return VisitResult.COMPLETE;
-
-        // Otherwise, just return the callback's result 
-        return result;
-    }
-
-    // Called by CollectionProxy to notify PartialVisitContext that
-    // an new id has been added.
-    private void idAdded(String clientId) {
-
-        // An id to visit has been added, update our other
-        // collections to reflect this.
-
-        // Update the ids collection
-        ids.add(getIdFromClientId(clientId));
-
-        // Update the unvisited ids collection
-        unvisitedClientIds.add(clientId);
-
-        // Update the subtree ids collection
-        addSubtreeClientId(clientId);
-    }
-
-    // Called by CollectionProxy to notify PartialVisitContext that
-    // an id has been removed
-    private void idRemoved(String clientId) {
-
-        // An id to visit has been removed, update our other
-        // collections to reflect this.  Note that we don't
-        // update the ids collection, since we ids (non-client ids)
-        // may not be unique.
-
-        // Update the unvisited ids collection
-        unvisitedClientIds.remove(clientId);
-
-        // Update the subtree ids collection
-        removeSubtreeClientId(clientId);
-    }
-
-    // Called to initialize our various collections.
-    private void initializeCollections(Collection<String> clientIds) {
-
-        // We maintain 4 collections:
-        //
-        // 1. clientIds: contains all of the client ids to visit
-        // 2. ids: contains just ids (not client ids) to visit.
-        //    We use this to optimize our check to see whether a
-        //    particular component is in the visit set (ie. to
-        //    avoid having to compute the client id).
-        // 3. subtreeClientIds: contains client ids to visit broken
-        //    out by naming container subtree.  (Needed by
-        //    getSubtreeIdsToVisit()).
-        // 4. unvisitedClientIds: contains the client ids to visit that
-        //    have not yet been visited.
-        //
-        // We populate these now.
-        //
-        // Note that we use default HashSet/Map initial capacities, though
-        // perhaps we could pick more intelligent defaults.
-
-        // Initialize unvisitedClientIds collection
-        this.unvisitedClientIds = new HashSet<String>();
-
-        // Initialize ids collection
-        this.ids = new HashSet<String>();
-
-        // Intialize subtreeClientIds collection
-        this.subtreeClientIds = new HashMap<String,Collection<String>>();
-
-        // Initialize the clientIds collection.  Note that we proxy 
-        // this collection so that we can trap adds/removes and sync 
-        // up all of the other collections.
-        this.clientIds = new CollectionProxy<String>(new HashSet<String>());
-
-        // Finally, populate the clientIds collection.  This has the
-        // side effect of populating all of the other collections.       
-        this.clientIds.addAll(clientIds);
-    }
-
-    // Tests whether the specified component should be visited.
-    // If so, returns its client id.  If not, returns null.
-    private String getVisitId(UIComponent component) {
-
-        // We first check to see whether the component's id
-        // is in our id collection.  We do this before checking
-        // for the full client id because getting the full client id
-        // is more expensive than just getting the local id.
-        String id = component.getId();
-        if ((id != null) && !ids.contains(id))
-            return null;
-
-        // The id was a match - now check the client id.
-        // note that client id should never be null (should be
-        // generated even if id is null, so asserting this.)
-        String clientId = component.getClientId();
-        assert(clientId != null);
-
-        return clientIds.contains(clientId) ? clientId : null;
-    }
-
-
-    // Converts an client id into a plain old id by ripping
-    // out the trailing id segmetn.
-    private String getIdFromClientId(String clientId)
-    {
-        FacesContext facesContext = getFacesContext();
-        char separator = UINamingContainer.getSeparatorChar(facesContext);
-        int lastIndex = clientId.lastIndexOf(separator);
-
-        String id = null;
-
-        if (lastIndex < 0) {
-            id = clientId;
-        } else if (lastIndex < (clientId.length() - 1)) {
-            id = clientId.substring(lastIndex + 1);              
-        }
- 
-        return id;
-    }
-
-    // Given a single client id, populate the subtree map with all possible
-    // subtree client ids
-    private void addSubtreeClientId(String clientId) {
-
-        FacesContext facesContext = getFacesContext();
-        char separator = UINamingContainer.getSeparatorChar(facesContext);
-
-
-        // Loop over the client id and find the substring corresponding to
-        // each ancestor NamingContainer client id.  For each ancestor
-        // NamingContainer, add an entry into the map for the full client
-        // id.
-
-        int length = clientId.length();
-
-        for (int i = 0; i < length; i++) {
-
-            if (clientId.charAt(i) == separator) {
-
-                // We found an ancestor NamingContainer client id - add 
-                // an entry to the map.
-                String namingContainerClientId = clientId.substring(0, i);
-
-                // Check to see whether we've already ids under this
-                // NamingContainer client id.  If not, create the 
-                // Collection for this NamingContainer client id and
-                // stash it away in our map
-                Collection<String> c = subtreeClientIds.get(namingContainerClientId);
-
-                if (c == null) {
-                    c = new ArrayList<String>();
-                    subtreeClientIds.put(namingContainerClientId, c);
-                }
-
-                // Stash away the client id
-                c.add(clientId);
-            }
-        }
-    }
-
-    // Given a single client id, remove any entries corresponding
-    // entries from our subtree collections
-    private void removeSubtreeClientId(String clientId) {
-
-        // Loop through each entry in the map and check to see whether
-        // the client id to remove should be contained in the corresponding
-        // collection - ie. whether the key (the NamingContainer client id)
-        // is present at the start of the client id to remove.
-        for (String key : subtreeClientIds.keySet()) {
-
-            if (clientId.startsWith(key)) {
-
-                // If the clientId starts with the key, we should
-                // have an entry for this clientId in the corresponding
-                // collection.  Remove it.
-                Collection<String> ids = subtreeClientIds.get(key);
-                ids.remove(clientId);
-            }
-        }
-    }
-
-
-    // Little proxy collection implementation.  We proxy the id
-    // collection so that we can detect modifications and update
-    // our internal state when ids to visit are added or removed.
-    private class CollectionProxy<E extends String> extends 
-        AbstractCollection<E> {
-
-        private CollectionProxy(Collection<E> wrapped) {
-            this.wrapped = wrapped;
-        }
-
-        @Override
-        public int size() {
-            return wrapped.size();
-        }
-
-        @Override
-        public Iterator<E> iterator() {
-            return new IteratorProxy<E>(wrapped.iterator());
-        }
-
-        @Override
-        public boolean add(E o) {
-          boolean added = wrapped.add(o);
-
-          if (added) {
-              idAdded(o);
-          }
-
-          return added;
-        }
-
-        private Collection<E> wrapped;
-    }
-
-    // Little proxy iterator implementation used by CollectionProxy
-    // so that we can catch removes.
-    private class IteratorProxy<E extends String> implements Iterator<E> {
-        private IteratorProxy(Iterator<E> wrapped) {
-            this.wrapped = wrapped;
-        }
-
-        public boolean hasNext() {
-            return wrapped.hasNext();
-        }
-
-        public E next() {
-            current = wrapped.next();
-
-            return current;
-        }
-
-        public void remove() {
-
-            if (current != null) {
-                idRemoved(current);
-            }
-
-            wrapped.remove();
-        }
-
-        private Iterator<E> wrapped;
-
-        private E current = null;
-    }
-
-    // The client ids to visit
-    private Collection<String> clientIds;
-
-    // The ids to visit
-    private Collection<String> ids;
-
-    // The client ids that have yet to be visited
-    private Collection<String> unvisitedClientIds;
-
-    // This map contains the information needed by getSubtreeIdsToVisit().
-    // The keys in this map are NamingContainer client ids.  The values
-    // are collections containing all of the client ids to visit within
-    // corresponding naming container.
-    private Map<String,Collection<String>> subtreeClientIds;
-
-    // The FacesContext for this request
-    private FacesContext facesContext;
-
-    // Our visit hints
-    private Set<VisitHint> hints;
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/component/visit/VisitContextFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/component/visit/VisitContextFactoryImpl.java
deleted file mode 100644
index bd99340..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/component/visit/VisitContextFactoryImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component.visit;
-
-import java.util.Collection;
-import java.util.Set;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitContextFactory;
-import javax.faces.component.visit.VisitHint;
-import javax.faces.context.FacesContext;
-
-/**
- * <p>
- * Default implementation of {@link VisitContextFactory}.
- * </p>
- */
-public class VisitContextFactoryImpl extends VisitContextFactory {
-
-    @Override
-    public VisitContext getVisitContext(FacesContext context, 
-            Collection<String> ids, 
-            Set<VisitHint> hints) {
-        VisitContext result = null;
-
-        // If ids null (not empty), we create a FullVisitContext.
-        // Otherwise, we create a PartialVisitContext.  Note that
-        // an empty collection still means partial - the client
-        // can add ids to visit after they create the VisitContext.
-        if (null == ids) {
-            result = new FullVisitContext(context, hints);
-        }
-        else {
-            result = new PartialVisitContext(context, ids, hints);
-        }
-        
-        return result;
-    }
-
-    
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/AnnotationScanner.java b/jsf-ri/src/main/java/com/sun/faces/config/AnnotationScanner.java
deleted file mode 100644
index 704e690..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/AnnotationScanner.java
+++ /dev/null
@@ -1,908 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import com.sun.faces.scripting.ScriptManager;
-import com.sun.faces.scripting.groovy.GroovyHelper;
-import com.sun.faces.scripting.groovy.GroovyScriptManager;
-import com.sun.faces.spi.AnnotationProvider;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.behavior.FacesBehavior;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.FacesConverter;
-import javax.faces.event.NamedEvent;
-import javax.faces.render.FacesBehaviorRenderer;
-import javax.faces.render.FacesRenderer;
-import javax.faces.validator.FacesValidator;
-import javax.servlet.ServletContext;
-import java.io.IOException;
-import java.lang.annotation.Annotation;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.ByteBuffer;
-import java.nio.channels.Channels;
-import java.nio.channels.ReadableByteChannel;
-import java.util.*;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.AnnotationScanPackages;
-
-/**
- * This class is responsible for scanning the class file bytes of
- * classes contained within the web application for any of the known
- * Faces configuration Annotations:
- * <ul>
- *  <li>javax.faces.component.FacesBehavior</li>
- *  <li>javax.faces.render.FacesBehaviorRenderer</li>
- *  <li>javax.faces.component.FacesComponent</li>
- *  <li>javax.faces.convert.FacesConverter</li>
- *  <li>javax.faces.validator.FacesValidator</li>
- *  <li>javax.faces.render.FacesRenderer</li>
- *  <li>javax.faces.bean.ManagedBean</li>
- *  <li>javax.faces.event.NamedEvent</li>
- * </ul>
- */
-public class AnnotationScanner extends AnnotationProvider {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    // Matcher.group(1) == the URL to the JAR file itself.
-    // Matcher.group(2) == the name of the JAR.
-    private static final Pattern JAR_PATTERN = Pattern.compile("(.*/(\\S*\\.jar)).*");
-
-    private static final String WEB_INF_CLASSES = "/WEB-INF/classes/";
-    private static final String WILDCARD = "*";
-
-    private static final Set<String> FACES_ANNOTATIONS;
-    private static final Set<Class<? extends Annotation>> FACES_ANNOTATION_TYPE;
-
-    static {
-        HashSet<String> annotations = new HashSet<String>(8, 1.0f);
-        Collections.addAll(annotations,
-                           "Ljavax/faces/component/FacesComponent;",
-                           "Ljavax/faces/convert/FacesConverter;",
-                           "Ljavax/faces/validator/FacesValidator;",
-                           "Ljavax/faces/render/FacesRenderer;",
-                           "Ljavax/faces/bean/ManagedBean;",
-                           "Ljavax/faces/event/NamedEvent;",
-                           "Ljavax/faces/component/behavior/FacesBehavior;",
-                           "Ljavax/faces/render/FacesBehaviorRenderer;");
-        FACES_ANNOTATIONS = Collections.unmodifiableSet(annotations);
-        HashSet<Class<? extends Annotation>> annotationInstances =
-              new HashSet<Class<? extends Annotation>>(8, 1.0f);
-        Collections.addAll(annotationInstances,
-                           FacesComponent.class,
-                           FacesConverter.class,
-                           FacesValidator.class,
-                           FacesRenderer.class,
-                           ManagedBean.class,
-                           NamedEvent.class,
-                           FacesBehavior.class,
-                           FacesBehaviorRenderer.class);
-        FACES_ANNOTATION_TYPE = Collections.unmodifiableSet(annotationInstances);
-    }
-
-    private ClassFile classFileScanner;
-    private String[] webInfClassesPackages;
-    private Map<String,String[]> classpathPackages;
-    private List<ScriptManager> scriptManagers = new ArrayList<ScriptManager>();
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Creates a new <code>AnnotationScanner</code> instance.
-     *
-     * @param sc the <code>ServletContext</code> for the application to be
-     *  scanned
-     */
-    public AnnotationScanner(ServletContext sc) {
-        super(sc);
-
-        classFileScanner = new ClassFile();
-        
-        if (GroovyHelper.isGroovyAvailable(FacesContext.getCurrentInstance())) {
-            scriptManagers.add(new GroovyScriptManager(sc));
-        }
-
-        WebConfiguration webConfig = WebConfiguration.getInstance(sc);
-        if (webConfig.isSet(AnnotationScanPackages)) {
-            classpathPackages = new HashMap<String,String[]>(4);
-            webInfClassesPackages = new String[0];
-            String[] options = webConfig.getOptionValue(AnnotationScanPackages, "\\s+");
-            List<String> packages = new ArrayList<String>(4);
-            for (String option : options) {
-                if (option.length() == 0) {
-                    continue;
-                }
-                if (option.startsWith("jar:")) {
-                    String[] parts = Util.split(option, ":");
-                    if (parts.length != 3) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.annotation.scanner.configuration.invalid",
-                                       new String[] { AnnotationScanPackages.getQualifiedName(), option });
-                        }
-                    } else {
-                        if (WILDCARD.equals(parts[1]) && !classpathPackages.containsKey(WILDCARD)) {
-                            classpathPackages.clear();
-                            classpathPackages.put(WILDCARD, normalizeJarPackages(Util.split(parts[2], ",")));
-                        } else if (WILDCARD.equals(parts[1]) && classpathPackages.containsKey(WILDCARD)) {
-                            if (LOGGER.isLoggable(Level.WARNING)) {
-                                LOGGER.log(Level.WARNING,
-                                           "jsf.annotation.scanner.configuration.duplicate.wildcard",
-                                           new String[] { AnnotationScanPackages.getQualifiedName(), option });
-                            }
-                        } else {
-                            if (!classpathPackages.containsKey(WILDCARD)) {
-                                classpathPackages.put(parts[1], normalizeJarPackages(Util.split(parts[2], ",")));
-                            }
-                        }
-                    }
-                } else {
-                    if (WILDCARD.equals(option) && !packages.contains(WILDCARD)) {
-                        packages.clear();
-                        packages.add(WILDCARD);
-                    } else {
-                        if (!packages.contains(WILDCARD)) {
-                            packages.add(option);
-                        }
-                    }
-                }
-            }
-            webInfClassesPackages = packages.toArray(new String[packages.size()]);
-        }
-
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @return a <code>Map</code> of classes mapped to a specific annotation type.
-     *  If no annotations are present, or the application is considered
-     * <code>metadata-complete</code> <code>null</code> will be returned.
-     */
-    public Map<Class<? extends Annotation>,Set<Class<?>>> getAnnotatedClasses(Set<URL> urls) {
-
-        Set<String> classList = new HashSet<String>();
-
-        processWebInfClasses(sc, classList);
-        processClasspath(urls, classList);
-        processScripts(classList);
-
-        Map<Class<? extends Annotation>,Set<Class<?>>> annotatedClasses = null;
-        if (classList.size() > 0) {
-            annotatedClasses = new HashMap<Class<? extends Annotation>,Set<Class<?>>>(6, 1.0f);
-            for (String className : classList) {
-                try {
-                    Class<?> clazz = Util.loadClass(className, this);
-                    Annotation[] annotations = clazz.getAnnotations();
-                    for (Annotation annotation : annotations) {
-                        Class<? extends Annotation> annoType =
-                              annotation.annotationType();
-                        if (FACES_ANNOTATION_TYPE.contains(annoType)) {
-                            Set<Class<?>> classes = annotatedClasses.get(annoType);
-                            if (classes == null) {
-                                classes = new HashSet<Class<?>>();
-                                annotatedClasses.put(annoType, classes);
-                            }
-                            classes.add(clazz);
-                        }
-                    }
-                } catch (ClassNotFoundException cnfe) {
-                    // shouldn't happen..
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "Unable to load annotated class: {0}",
-                                   className);
-                        LOGGER.log(Level.SEVERE, "", cnfe);
-                    }
-                } catch (NoClassDefFoundError ncdfe) {
-                    // this is more likely
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "Unable to load annotated class: {0}, reason: {1}",
-                                   new Object[] { className, ncdfe.toString()});
-                    }
-                }
-            }
-        }
-
-        return ((annotatedClasses != null)
-                ? annotatedClasses
-                : Collections.<Class<? extends Annotation>, Set<Class<?>>>emptyMap());
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    private void processScripts(Set<String> classList) {
-        for (ScriptManager sm : scriptManagers) {
-            classList.addAll(sm.getScripts());
-        }
-    }
-
-    /**
-     * Scans for annotations on classes within JAR files on the classpath.
-     *
-     * @param urls to a faces-config documents that allow us to refer to
-     *  unique jar files on the classpath
-     * @param classList the <code>Set</code> to which annotated classes
-     *  will be added
-     */
-    private void processClasspath(Set<URL> urls, Set<String> classList) {
-
-        for (URL url : urls) {
-            try {
-                Matcher m = JAR_PATTERN.matcher(url.toString());
-                if (m.matches()) {
-                    String jarName = m.group(2);
-                    if (!processJar(jarName)) {
-                        continue;
-                    }
-                    StringBuilder sb = new StringBuilder(32);
-                    String us = m.group(1);
-                    if (!us.startsWith("jar:")) {
-                        sb.append("jar:");
-                    }
-                    sb.append(us).append("!/");
-                    URL u = new URL(sb.toString());
-                    JarFile jarFile =
-                          ((JarURLConnection) u.openConnection()).getJarFile();
-                    processJarEntries(jarFile,
-                                      ((classpathPackages != null)
-                                       ? classpathPackages.get(jarName)
-                                       : null),
-                                      classList);
-                } else {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.fine("Unable to match URL to a jar file: " + url
-                              .toString());
-                    }
-                }
-            } catch (Exception e) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "Unable to process annotations for url, {0}.  Reason: "
-                               + e.toString(),
-                               new Object[]{url});
-                    LOGGER.log(Level.SEVERE, "", e);
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * Called by {@link ConstantPoolInfo} when processing the bytes of the
-     * class file.
-     *
-     * @param value the String value as provided from {@link ConstantPoolInfo}
-     * @return <code>true</code> if the value is one of the known
-     *  Faces annotations, otherwise <code>false</code>
-     */
-    private static boolean isAnnotation(String value) {
-
-        return FACES_ANNOTATIONS.contains(value);
-
-    }
-
-
-    /**
-     * Process the entries in the provided <code>JarFile</code> looking for
-     * class files that may be annotated with any of the Faces configuration
-     * annotations.
-     *
-     * @param jarFile the JAR to process
-     * @param allowedPackages the packages that should be scanned within the jar
-     * @param classList the <code>Set</code> to which annotated classes
-     *  will be added
-     */
-    private void processJarEntries(JarFile jarFile, String[] allowedPackages, Set<String> classList) {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                        "Scanning JAR {0} for annotations...",
-                        jarFile.getName());
-        }
-
-        for (Enumeration<JarEntry> entries = jarFile.entries(); entries.hasMoreElements(); ) {
-            JarEntry entry = entries.nextElement();
-            if (entry.isDirectory()) {
-                continue;
-            }
-
-            String name = entry.getName();
-            if (name.startsWith("META-INF")) {
-                continue;
-            }
-
-            if (name.endsWith(".class")) {
-                String cname = convertToClassName(name);
-                if (!processClass(cname, allowedPackages)) {
-                    continue;
-                }
-                ReadableByteChannel channel = null;
-                try {
-                    channel = Channels.newChannel(jarFile.getInputStream(entry));
-                    if (classFileScanner.containsAnnotation(channel)) {
-                        if (LOGGER.isLoggable(Level.FINE)) {
-                            LOGGER.log(Level.FINE,
-                                       "[JAR] Found annotated Class: {0}",
-                                       cname);
-                        }
-                        classList.add(cname);
-                    }
-                } catch (IOException e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "Unexpected exception scanning JAR {0} for annotations",
-                                   jarFile.getName());
-                        LOGGER.log(Level.SEVERE,
-                                   e.toString(),
-                                   e);
-                    }
-                } finally {
-                    if (channel != null) {
-                        try {
-                            channel.close();
-                        } catch (IOException ignored) {
-                            if (LOGGER.isLoggable(Level.FINE)) {
-                                LOGGER.log(Level.FINE,
-                                           ignored.toString(),
-                                           ignored);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * Scan <code>WEB-INF/classes</code> for classes that may be annotated
-     * with any of the Faces configuration annotations.
-     *
-     * @param sc the <code>ServletContext</code> for the application being
-     *  scanned
-     * @param classList the <code>Set</code> to which annotated classes
-     *  will be added
-     */
-    private void processWebInfClasses(ServletContext sc, Set<String> classList) {
-
-        processWebInfClasses(sc, WEB_INF_CLASSES, classList);
-
-    }
-
-
-    /**
-     * Scan <code>WEB-INF/classes</code> for classes that may be annotated
-     * with any of the Faces configuration annotations.
-     *
-     * @param sc the <code>ServletContext</code> for the application being
-     *  scanned
-     * @param path the path to start the scan from
-     * @param classList the <code>Set</code> to which annotated classes
-     *  will be added
-     */
-    private void processWebInfClasses(ServletContext sc,
-                                      String path,
-                                      Set<String> classList) {
-
-        //noinspection unchecked
-        Set<String> paths = sc.getResourcePaths(path);
-        processWebInfClasses(sc, paths, classList);
-
-    }
-
-
-    /**
-     * Scan <code>WEB-INF/classes</code> for classes that may be annotated
-     * with any of the Faces configuration annotations.
-     *
-     * @param sc the <code>ServletContext</code> for the application being
-     *  scanned
-     * @param paths a set of paths to process
-     * @param classList the <code>Set</code> to which annotated classes
-     *  will be added
-     */
-    private void processWebInfClasses(ServletContext sc,
-                                      Set<String> paths,
-                                      Set<String> classList) {
-
-        if (paths != null && !paths.isEmpty()) {
-            for (String pathElement : paths) {
-                if (pathElement.endsWith("/")) {
-                    processWebInfClasses(sc, pathElement, classList);
-                } else {
-                    if (pathElement.endsWith(".class")) {
-                        String cname = convertToClassName(WEB_INF_CLASSES,
-                                                              pathElement);
-                        if (!processClass(cname, webInfClassesPackages)) {
-                            continue;
-                        }
-                        if (containsAnnotation(sc, pathElement)) {
-                            if (LOGGER.isLoggable(Level.FINE)) {
-                                LOGGER.log(Level.FINE,
-                                           "[WEB-INF/classes] Found annotated Class: {0}",
-                                           cname);
-                            }
-                            classList.add(cname);
-                        }
-                    }
-                }
-            }
-        }
-
-    }
-
-
-    private String[] normalizeJarPackages(String[] packages) {
-
-        if (packages.length == 0) {
-            return packages;
-        }
-        List<String> normalizedPackages = new ArrayList<String>(packages.length);
-        for (String pkg : packages) {
-            if (WILDCARD.equals(pkg)) {
-                normalizedPackages.clear();
-                normalizedPackages.add(WILDCARD);
-                break;
-            } else {
-                normalizedPackages.add(pkg);
-            }
-        }
-        return normalizedPackages.toArray(new String[normalizedPackages.size()]);
-
-    }
-
-
-    /**
-     * @param sc the <code>ServletContext</code> for the application being
-     *  scanned
-     * @param pathElement the full path to the classfile to be scanned
-     * @return <code>true</code> if the class contains one of the Faces
-     *  configuration annotations
-     */
-    private boolean containsAnnotation(ServletContext sc, String pathElement) {
-
-        ReadableByteChannel channel = null;
-        try {
-            URL url = sc.getResource(pathElement);
-            channel = Channels.newChannel(url.openStream());
-            return classFileScanner.containsAnnotation(channel);
-        } catch (MalformedURLException e) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           e.toString(),
-                           e);
-            }
-        } catch (IOException ioe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           ioe.toString(),
-                           ioe);
-            }
-        } finally {
-            if (channel != null) {
-                try {
-                    channel.close();
-                } catch (IOException ignored) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   ignored.toString(),
-                                   ignored);
-                    }
-                }
-            }
-        }
-        return false;
-
-    }
-
-
-    /**
-     * Utility method for converting paths to fully qualified class names.
-     *
-     * @param pathEntry a path entry to a class file
-     *
-     * @return a fully qualfied class name using dot notation
-     */
-    private String convertToClassName(String pathEntry) {
-
-        return convertToClassName(null, pathEntry);
-
-    }
-
-
-    /**
-     * Utility method for converting paths to fully qualified class names.
-     *
-     * @param prefix the prefix that should be stripped from the class name
-     *  before converting it
-     * @param pathEntry a path to a class file
-     *
-     * @return a fully qualfied class name using dot notation
-     */
-    private String convertToClassName(String prefix, String pathEntry) {
-
-        String className = pathEntry;
-
-        if (prefix != null) {
-            // remove the prefix
-            className = className.substring(prefix.length());
-        }
-        // remove the .class suffix
-        className = className.substring(0, (className.length() - 6));
-
-        return className.replace('/', '.');
-
-    }
-
-
-    private boolean processJar(String entry) {
-
-        return (classpathPackages == null
-                  || (classpathPackages.containsKey(entry)
-                         || classpathPackages.containsKey(WILDCARD)));
-
-    }
-
-
-    /**
-     * @param candidate the class that should be processed
-     * @param packages the packages of classes that are allowed to be processed
-     * @return <code>true</code> if the class should be processed further,
-     *  otherwise, <code>false</code>
-     */
-    private boolean processClass(String candidate, String[] packages) {
-
-        if (packages == null) {
-            return true;
-        }
-
-        for (String packageName : packages) {
-            if (candidate.startsWith(packageName) || WILDCARD.equals(packageName)) {
-                return true;
-            }
-        }
-        return false;
-        
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * This class is encapsulating binary .class file information as defined at
-     * http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html
-     * <p/>
-     * This is used by the annotation frameworks to quickly scan .class files
-     * for the presence of annotations. This avoid the annotation framework
-     * having to load each .class file in the class loader.
-     * <p/>
-     * Taken from the GlassFish V2 source base.
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    private static final class ClassFile {
-
-        private static final int magic = 0xCAFEBABE;
-
-        public static final int ACC_PUBLIC = 0x1;
-        public static final int ACC_PRIVATE = 0x2;
-        public static final int ACC_PROTECTED = 0x4;
-        public static final int ACC_STATIC = 0x8;
-        public static final int ACC_FINAL = 0x10;
-        public static final int ACC_SYNCHRONIZED = 0x20;
-        public static final int ACC_THREADSAFE = 0x40;
-        public static final int ACC_TRANSIENT = 0x80;
-        public static final int ACC_NATIVE = 0x100;
-        public static final int ACC_INTERFACE = 0x200;
-        public static final int ACC_ABSTRACT = 0x400;
-
-        public short majorVersion;
-        public short minorVersion;
-        public ConstantPoolInfo constantPool[];
-        public short accessFlags;
-        public ConstantPoolInfo thisClass;
-        public ConstantPoolInfo superClass;
-        public ConstantPoolInfo interfaces[];
-
-        /**
-         * bunch of stuff I really don't care too much for now.
-         * <p/>
-         * FieldInfo           fields[]; MethodInfo          methods[];
-         * AttributeInfo       attributes[];
-         */
-
-        ByteBuffer header;
-        ConstantPoolInfo constantPoolInfo = new ConstantPoolInfo();
-
-        // ------------------------------------------------------------ Constructors
-
-
-        /**
-         * Creates a new instance of ClassFile
-         */
-        public ClassFile() {
-            header = ByteBuffer.allocate(12000);
-        }
-
-        // ---------------------------------------------------------- Public Methods
-
-
-        public void setConstantPoolInfo(ConstantPoolInfo poolInfo) {
-            constantPoolInfo = poolInfo;
-        }
-
-
-        /**
-         * Read the input channel and initialize instance data structure.
-         *
-         * @param in a <code>ReadableByteChannel</code> that provides the bytes
-         *  of the classfile
-         *
-         * @return <code>true</code> if the bytes representing this classfile include
-         *  one of the annotations we're looking for.
-         *
-         * @throws IOException if an I/O error occurs while reading the class
-         */
-        public boolean containsAnnotation(ReadableByteChannel in)
-              throws IOException {
-
-            /**
-             * this is the .class file layout
-             *
-             ClassFile {
-             u4 magic;
-             u2 minor_version;
-             u2 major_version;
-             u2 constant_pool_count;
-             cp_info constant_pool[constant_pool_count-1];
-             u2 access_flags;
-             u2 this_class;
-             u2 super_class;
-             u2 interfaces_count;
-             u2 interfaces[interfaces_count];
-             u2 fields_count;
-             field_info fields[fields_count];
-             u2 methods_count;
-             method_info methods[methods_count];
-             u2 attributes_count;
-             attribute_info attributes[attributes_count];
-             }
-             **/
-            header.clear();
-            long read = (long) in.read(header);
-            if (read == -1) {
-                return false;
-            }
-            header.rewind();
-
-            if (header.getInt() != magic) {
-                return false;
-            }
-
-            minorVersion = header.getShort();
-            majorVersion = header.getShort();
-            int constantPoolSize = header.getShort();
-
-            return constantPoolInfo
-                  .containsAnnotation(constantPoolSize, header, in);
-
-        }
-
-    } // END ClassFile
-
-
-    private static class ConstantPoolInfo {
-
-        private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-        public static final byte CLASS = 7;
-        public static final int FIELDREF = 9;
-        public static final int METHODREF = 10;
-        public static final int STRING = 8;
-        public static final int INTEGER = 3;
-        public static final int FLOAT = 4;
-        public static final int LONG = 5;
-        public static final int DOUBLE = 6;
-        public static final int INTERFACEMETHODREF = 11;
-        public static final int NAMEANDTYPE = 12;
-        public static final int ASCIZ = 1;
-        public static final int UNICODE = 2;
-
-        byte[] bytes = new byte[Short.MAX_VALUE];
-
-
-        // ------------------------------------------------------------ Constructors
-
-
-        /**
-         * Creates a new instance of ConstantPoolInfo
-         */
-        public ConstantPoolInfo() {
-        }
-
-
-        // ---------------------------------------------------------- Public Methods
-
-
-        /**
-         * Read the input channel and initialize instance data structure.
-         *
-         * @param constantPoolSize the constant pool size for this class file
-         * @param buffer the ByteBuffer used to store the bytes from <code>in</code>
-         * @param in ReadableByteChannel from which the class file bytes are
-         *  read
-         *
-         * @return <code>true</code> if the bytes representing this classfile include
-         *  one of the annotations we're looking for.
-         *
-         * @throws IOException if an I/O error occurs while reading the class
-         */
-        public boolean containsAnnotation(int constantPoolSize,
-                                          final ByteBuffer buffer,
-                                          final ReadableByteChannel in)
-        throws IOException {
-
-            for (int i = 1; i < constantPoolSize; i++) {
-                if (!refill(buffer, in, 1)) {
-                    return true;
-                }
-                final byte type = buffer.get();
-                switch (type) {
-                    case ASCIZ:
-                    case UNICODE:
-                        if (!refill(buffer, in, 2)) {
-                            return true;
-                        }
-                        final short length = buffer.getShort();
-                        if (length < 0 || length > Short.MAX_VALUE) {
-                            return true;
-                        }
-                        if (length > buffer.capacity()) {
-                            return true;
-                        }
-                        if (!refill(buffer, in, length)) {
-                            return true;
-                        }
-                        buffer.get(bytes, 0, length);
-                        /* to speed up the process, I am comparing the first few
-                         * bytes to Ljava since all annotations are in the java
-                         * package, the reduces dramatically the number or String
-                         * construction
-                         */
-                        if (bytes[0] == 'L' && bytes[1] == 'j' && bytes[2] == 'a') {
-                            String stringValue;
-                            if (type == ASCIZ) {
-                                stringValue =
-                                      new String(bytes, 0, length, "US-ASCII");
-                            } else {
-                                stringValue = new String(bytes, 0, length);
-                            }
-                            if (AnnotationScanner.isAnnotation(stringValue)) {
-                                return true;
-                            }
-                        }
-                        break;
-                    case CLASS:
-                    case STRING:
-                        if (!refill(buffer, in, 2)) {
-                            return true;
-                        }
-                        buffer.getShort();
-                        break;
-                    case FIELDREF:
-                    case METHODREF:
-                    case INTERFACEMETHODREF:
-                    case INTEGER:
-                    case FLOAT:
-                        if (!refill(buffer, in, 4)) {
-                            return true;
-                        }
-                        buffer.position(buffer.position() + 4);
-                        break;
-                    case LONG:
-                    case DOUBLE:
-                        if (!refill(buffer, in, 8)) {
-                            return true;
-                        }
-                        buffer.position(buffer.position() + 8);
-                        // for long, and double, they use 2 constantPool
-                        i++;
-                        break;
-                    case NAMEANDTYPE:
-                        if (!refill(buffer, in, 4)) {
-                            return true;
-                        }
-                        buffer.getShort();
-                        buffer.getShort();
-                        break;
-                    default:
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE,
-                                       "Unknow type constant pool {0} at position {1}",
-                                       new Object[]{type, i});
-                        }
-                        break;
-                }
-            }
-            return false;
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-        private boolean refill(ByteBuffer buffer,
-                               ReadableByteChannel in,
-                               int requestLen) throws IOException {
-            
-            int cap = buffer.capacity();
-            if (buffer.position() + requestLen > cap) {
-                buffer.compact();
-                int read = in.read(buffer);
-                if (read < 0) {
-                    return false;
-                }
-                buffer.rewind();
-            }
-            return true;
-
-        }
-
-    } // END ConstantPoolInfo
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/ConfigManager.java b/jsf-ri/src/main/java/com/sun/faces/config/ConfigManager.java
deleted file mode 100644
index 5a02037..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/ConfigManager.java
+++ /dev/null
@@ -1,1095 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.ValidateFacesConfigFiles;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableThreading;
-import com.sun.faces.spi.ConfigurationResourceProvider;
-import com.sun.faces.spi.ConfigurationResourceProviderFactory;
-import com.sun.faces.spi.AnnotationProvider;
-import com.sun.faces.spi.AnnotationProviderFactory;
-import static com.sun.faces.spi.ConfigurationResourceProviderFactory.ProviderType.*;
-import static com.sun.faces.spi.ConfigurationResourceProviderFactory.ProviderType.FaceletConfig;
-import com.sun.faces.config.configprovider.MetaInfFacesConfigResourceProvider;
-import com.sun.faces.config.configprovider.MojarraFacesConfigResourceProvider;
-import com.sun.faces.config.configprovider.WebFacesConfigResourceProvider;
-import com.sun.faces.config.configprovider.MetaInfFaceletTaglibraryConfigProvider;
-import com.sun.faces.config.configprovider.WebFaceletTaglibResourceProvider;
-import com.sun.faces.config.processor.ApplicationConfigProcessor;
-import com.sun.faces.config.processor.BehaviorConfigProcessor;
-import com.sun.faces.config.processor.ComponentConfigProcessor;
-import com.sun.faces.config.processor.ConfigProcessor;
-import com.sun.faces.config.processor.ConverterConfigProcessor;
-import com.sun.faces.config.processor.FactoryConfigProcessor;
-import com.sun.faces.config.processor.LifecycleConfigProcessor;
-import com.sun.faces.config.processor.ManagedBeanConfigProcessor;
-import com.sun.faces.config.processor.NavigationConfigProcessor;
-import com.sun.faces.config.processor.RenderKitConfigProcessor;
-import com.sun.faces.config.processor.ValidatorConfigProcessor;
-import com.sun.faces.config.processor.FaceletTaglibConfigProcessor;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Timer;
-import org.xml.sax.InputSource;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.event.PostConstructApplicationEvent;
-import javax.faces.application.Application;
-import javax.faces.context.FacesContext;
-import javax.servlet.ServletContext;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.FutureTask;
-import java.util.concurrent.Future;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.lang.annotation.Annotation;
-
-import org.w3c.dom.*;
-import org.xml.sax.SAXParseException;
-
-/**
- * <p>
- *  This class manages the initialization of each web application that uses
- *  JSF.
- * </p>
- */
-public class ConfigManager {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    private static final Pattern JAR_PATTERN = Pattern.compile("(.*/(\\S*\\.jar)).*(/faces-config.xml|/*.\\.faces-config.xml)");
-
-    /**
-     * <p>
-     * A List of resource providers that search for faces-config documents.
-     * By default, this contains a provider for the Mojarra, and two other
-     * providers to satisfy the requirements of the specification.
-     * </p>
-     */
-    private static final List<ConfigurationResourceProvider> FACES_CONFIG_RESOURCE_PROVIDERS;
-
-    /**
-     * <p>
-     * A List of resource providers that search for faces-config documents.
-     * By default, this contains a provider for the Mojarra, and one other
-     * providers to satisfy the requirements of the specification.
-     * </p>
-     */
-    private static final List<ConfigurationResourceProvider> FACELET_TAGLIBRARY_RESOURCE_PROVIDERS;
-
-    /**
-     * <p>
-     *  The <code>ConfigManager</code> will multithread the calls to the
-     *  <code>ConfigurationResourceProvider</code>s as well as any calls
-     *  to parse a resources into a DOM.  By default, we'll use only 5 threads
-     *  per web application.
-     * </p>
-     */
-    private static final int NUMBER_OF_TASK_THREADS = 5;
-
-    /**
-     * <p>
-     *  There is only once instance of <code>ConfigManager</code>.
-     * <p>
-     */
-    private static final ConfigManager CONFIG_MANAGER = new ConfigManager();
-
-
-    /**
-     * The application-scoped key under which the Future responsible for annotation
-     * scanning is associated with.
-     */
-    private static final String ANNOTATIONS_SCAN_TASK_KEY =
-          ConfigManager.class.getName() + "_ANNOTATION_SCAN_TASK";
-
-
-    /**
-     * Name of the attribute added by {@link ParseTask} to indiciate a
-     * {@link Document} instance as a representation of
-     * <code>/WEB-INF/faces-config.xml</code>.
-     */
-    public static final String WEB_INF_MARKER = "com.sun.faces.webinf";
-
-
-    /**
-     * <p>
-     *   Contains each <code>ServletContext</code> that we've initialized.
-     *   The <code>ServletContext</code> will be removed when the application
-     *   is destroyed.
-     * </p>
-     */
-    @SuppressWarnings({"CollectionWithoutInitialCapacity"})
-    private List<ServletContext> initializedContexts =
-         new CopyOnWriteArrayList<ServletContext>();
-
-    /**
-     * <p>
-     *  The chain of {@link ConfigProcessor} instances to processing of
-     *  faces-config documents.
-     * </p>
-     */
-    private static final ConfigProcessor FACES_CONFIG_PROCESSOR_CHAIN;
-
-
-    /**
-     * <p>
-     *  The chain of {@link ConfigProcessor} instances to processing of
-     *  facelet-taglib documents.
-     * </p>
-     */
-    private static final ConfigProcessor FACELET_TAGLIB_CONFIG_PROCESSOR_CHAIN;
-
-    /**
-     * Stylesheet to convert 1.0 and 1.1 based faces-config documents
-     * to our private 1.1 schema for validation.
-     */
-    private static final String FACES_TO_1_1_PRIVATE_XSL =
-          "/com/sun/faces/jsf1_0-1_1toSchema.xsl";
-
-    /**
-     * Stylesheet to convert 1.0 facelet-taglib documents
-     * from 1.0 to 2.0 for schema validation purposes.
-     */
-    private static final String FACELETS_TO_2_0_XSL =
-          "/com/sun/faces/facelets1_0-2_0toSchema.xsl";
-
-    private static final String FACES_CONFIG_1_X_DEFAULT_NS =
-          "http://java.sun.com/JSF/Configuration";
-
-    private static final String FACELETS_1_0_DEFAULT_NS =
-          "http://java.sun.com/JSF/Facelet";
-
-
-    static {
-
-        // initialize the resource providers for faces-config documents
-        List<ConfigurationResourceProvider> facesConfigProviders =
-          new ArrayList<ConfigurationResourceProvider>(3);
-        facesConfigProviders.add(new MojarraFacesConfigResourceProvider());
-        facesConfigProviders.add(new MetaInfFacesConfigResourceProvider());
-        facesConfigProviders.add(new WebFacesConfigResourceProvider());
-        FACES_CONFIG_RESOURCE_PROVIDERS = Collections.unmodifiableList(facesConfigProviders);
-
-        // initialize the resource providers for facelet-taglib documents
-        List<ConfigurationResourceProvider> faceletTaglibProviders =
-              new ArrayList<ConfigurationResourceProvider>(3);
-        faceletTaglibProviders.add(new MetaInfFaceletTaglibraryConfigProvider());
-        faceletTaglibProviders.add(new WebFaceletTaglibResourceProvider());
-        FACELET_TAGLIBRARY_RESOURCE_PROVIDERS = Collections.unmodifiableList(faceletTaglibProviders);
-
-        // initialize the config processors for faces-config documents
-        ConfigProcessor[] configProcessors = {
-             new FactoryConfigProcessor(),
-             new LifecycleConfigProcessor(),
-             new ApplicationConfigProcessor(),
-             new ComponentConfigProcessor(),
-             new ConverterConfigProcessor(),
-             new ValidatorConfigProcessor(),
-             new ManagedBeanConfigProcessor(),
-             new RenderKitConfigProcessor(),
-             new NavigationConfigProcessor(),
-             new BehaviorConfigProcessor(),
-        };
-        for (int i = 0; i < configProcessors.length; i++) {
-            ConfigProcessor p = configProcessors[i];
-            if ((i + 1) < configProcessors.length) {
-                p.setNext(configProcessors[i + 1]);
-            }
-        }
-        FACES_CONFIG_PROCESSOR_CHAIN = configProcessors[0];
-
-        // initialize the config processor for facelet-taglib documents
-        FACELET_TAGLIB_CONFIG_PROCESSOR_CHAIN = new FaceletTaglibConfigProcessor();
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @return a <code>ConfigManager</code> instance
-     */
-    public static ConfigManager getInstance() {
-
-        return CONFIG_MANAGER;
-
-    }
-
-
-    /**
-     * <p>
-     *   This method bootstraps JSF based on the parsed configuration resources.
-     * </p>
-     *
-     * @param sc the <code>ServletContext</code> for the application that
-     *  requires initialization
-     */
-    public void initialize(ServletContext sc) {
-
-        if (!hasBeenInitialized(sc)) {
-            initializedContexts.add(sc);
-            ExecutorService executor = null;
-            try {
-                WebConfiguration webConfig = WebConfiguration.getInstance(sc);
-                boolean validating = webConfig.isOptionEnabled(ValidateFacesConfigFiles);
-                if (useThreads(sc)) {
-                    executor = createExecutorService();
-                }
-
-                DocumentInfo[] facesDocuments =
-                      getConfigDocuments(sc,
-                                         getFacesConfigResourceProviders(),
-                                         executor,
-                                         validating);
-
-                FacesConfigInfo webInfFacesConfigInfo =
-                      new FacesConfigInfo(facesDocuments[facesDocuments.length - 1]);
-
-                facesDocuments = sortDocuments(facesDocuments, webInfFacesConfigInfo);
-
-                boolean isFaceletsDisabled =
-                      isFaceletsDisabled(webConfig, webInfFacesConfigInfo);
-                if (!webInfFacesConfigInfo.isWebInfFacesConfig() || !webInfFacesConfigInfo.isMetadataComplete()) {
-                    // execute the Task responsible for finding annotation classes
-                    Set<URL> scanUrls = getAnnotationScanURLs(facesDocuments);
-                    Future<Map<Class<? extends Annotation>,Set<Class<?>>>> annotationScan;
-                    if (executor != null) {
-                        annotationScan = executor.submit(new AnnotationScanTask(sc, scanUrls));
-                        pushTaskToContext(sc, annotationScan);
-                    } else {
-                        annotationScan =
-                              new FutureTask<Map<Class<? extends Annotation>,Set<Class<?>>>>(new AnnotationScanTask(sc, scanUrls));
-                        ((FutureTask) annotationScan).run();
-                    }
-                    pushTaskToContext(sc, annotationScan);
-                }
-
-                // process the ordered documents
-                FACES_CONFIG_PROCESSOR_CHAIN.process(sc, facesDocuments);
-                if (!isFaceletsDisabled) {
-                    FACELET_TAGLIB_CONFIG_PROCESSOR_CHAIN.process(
-                          sc, getConfigDocuments(sc,
-                                             getFaceletConfigResourceProviders(),
-                                             executor,
-                                             validating));
-                }
-
-                publishPostConfigEvent();
-            } catch (Exception e) {
-                // clear out any configured factories
-                releaseFactories();
-                if (LOGGER.isLoggable(Level.INFO)) {
-                    LOGGER.log(Level.INFO,
-                               "Unsanitized stacktrace from failed start...",
-                               e);
-                }
-                Throwable t = unwind(e);
-                throw new ConfigurationException("CONFIGURATION FAILED! " + t.getMessage(),
-                                                 t);
-            } finally {
-                if (executor != null) {
-                    executor.shutdown();
-                }
-                sc.removeAttribute(ANNOTATIONS_SCAN_TASK_KEY);
-            }
-        }
-
-    }
-
-
-
-
-    /**
-     * <p>
-     *   This method will remove any information about the application.
-     * </p>
-     * @param sc the <code>ServletContext</code> for the application that
-     *  needs to be removed
-     */
-    public void destory(ServletContext sc) {
-
-        releaseFactories();
-        initializedContexts.remove(sc);
-
-    }
-
-
-    /**
-     * @param sc the <code>ServletContext</code> for the application in question
-     * @return <code>true</code> if this application has already been initialized,
-     *  otherwise returns </code>fase</code>
-     */
-    public boolean hasBeenInitialized(ServletContext sc) {
-
-        return (initializedContexts.contains(sc));
-
-    }
-
-
-    /**
-     * @return the results of the annotation scan task
-     */
-    public static Map<Class<? extends Annotation>,Set<Class<?>>> getAnnotatedClasses(FacesContext ctx) {
-
-        Map<String, Object> appMap =
-              ctx.getExternalContext().getApplicationMap();
-        //noinspection unchecked
-        Future<Map<Class<? extends Annotation>,Set<Class<?>>>> scanTask =
-              (Future<Map<Class<? extends Annotation>,Set<Class<?>>>>) appMap.get(ANNOTATIONS_SCAN_TASK_KEY);
-        try {
-            return ((scanTask != null)
-                    ? scanTask.get()
-                    : Collections.<Class<? extends Annotation>,Set<Class<?>>>emptyMap());
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static Set<URL> getAnnotationScanURLs(DocumentInfo[] documentInfos) {
-
-        Set<URL> urls = new HashSet<URL>(documentInfos.length);
-        Set<String> jarNames = new HashSet<String>(documentInfos.length);
-        for (DocumentInfo docInfo : documentInfos) {
-            Matcher m = JAR_PATTERN.matcher(docInfo.getSourceURL().toString());
-            if (m.matches()) {
-                String jarName = m.group(2);
-                if (!jarNames.contains(jarName)) {
-                    FacesConfigInfo configInfo = new FacesConfigInfo(docInfo);
-                    if (!configInfo.isMetadataComplete()) {
-                        urls.add(docInfo.getSourceURL());
-                        jarNames.add(jarName);
-                    }
-                }
-            }
-        }
-
-        return urls;
-
-    }
-
-
-    private static boolean useThreads(ServletContext ctx) {
-
-        WebConfiguration config = WebConfiguration.getInstance(ctx);
-        return config.isOptionEnabled(EnableThreading);
-
-    }
-
-
-    private List<ConfigurationResourceProvider> getFacesConfigResourceProviders() {
-
-        return getConfigurationResourceProviders(FACES_CONFIG_RESOURCE_PROVIDERS,
-                                                 FacesConfig);
-
-    }
-
-
-    private List<ConfigurationResourceProvider> getFaceletConfigResourceProviders() {
-
-        return getConfigurationResourceProviders(FACELET_TAGLIBRARY_RESOURCE_PROVIDERS,
-                                                 FaceletConfig);
-
-    }
-
-
-    private List<ConfigurationResourceProvider> getConfigurationResourceProviders(List<ConfigurationResourceProvider> defaultProviders,
-                                                                                  ConfigurationResourceProviderFactory.ProviderType providerType) {
-
-        ConfigurationResourceProvider[] custom =
-              ConfigurationResourceProviderFactory.createProviders(providerType);
-        if (custom.length == 0) {
-            return defaultProviders;
-        } else {
-            List<ConfigurationResourceProvider> list = new ArrayList<ConfigurationResourceProvider>();
-            list.addAll(defaultProviders);
-            // insert the custom providers after the META-INF providers and
-            // before those that scan /WEB-INF
-            list.addAll((defaultProviders.size() - 1), Arrays.asList(custom));
-            return Collections.unmodifiableList(list);
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * Sort the <code>faces-config</code> documents found on the classpath
-     * and those specified by the <code>javax.faces.CONFIG_FILES</code> context
-     * init parameter.
-     * </p>
-     *
-     * @param facesDocuments an array of <em>all</em> <code>faces-config</code>
-     *  documents
-     * @param webInfFacesConfig FacesConfigInfo representing the WEB-INF/faces-config.xml
-     *  for this app
-     *
-     * @return the sorted documents
-     */
-    private DocumentInfo[] sortDocuments(DocumentInfo[] facesDocuments,
-                                         FacesConfigInfo webInfFacesConfig) {
-
-
-        int len = (webInfFacesConfig.isWebInfFacesConfig()
-                     ? facesDocuments.length - 1
-                     : facesDocuments.length);
-
-        List<String> absoluteOrdering = webInfFacesConfig.getAbsoluteOrdering();
-
-        if (len > 1) {
-            List<DocumentOrderingWrapper> list =
-                  new ArrayList<DocumentOrderingWrapper>();
-            for (int i = 1; i < len; i++) {
-                list.add(new DocumentOrderingWrapper(facesDocuments[i]));
-            }
-            DocumentOrderingWrapper[] ordering =
-                  list.toArray(new DocumentOrderingWrapper[list.size()]);
-            if (absoluteOrdering == null) {
-                DocumentOrderingWrapper.sort(ordering);
-                // sorting complete, now update the appropriate locations within
-                // the original array with the sorted documentation.
-                for (int i = 1; i < len; i++) {
-                    facesDocuments[i] = ordering[i - 1].getDocument();
-                }
-                return facesDocuments;
-            } else {
-                DocumentOrderingWrapper[] result =
-                      DocumentOrderingWrapper.sort(ordering, absoluteOrdering);
-                DocumentInfo[] ret = new DocumentInfo[((webInfFacesConfig.isWebInfFacesConfig()) ? (result.length + 2) : (result.length + 1))];
-                for (int i = 1; i < len; i++) {
-                    ret[i] = result[i - 1].getDocument();
-                }
-                // add the impl specific config file
-                ret[0] = facesDocuments[0];
-                // add the WEB-INF if necessary
-                if (webInfFacesConfig.isWebInfFacesConfig()) {
-                    ret[ret.length - 1] = facesDocuments[facesDocuments.length - 1];
-                }
-                return ret;
-            }
-        }
-
-        return facesDocuments;
-    }
-
-
-    /**
-     * <p>
-     * Utility method to check if JSF 2.0 Facelets should be disabled.
-     * If it's not explicitly disabled by the context init parameter, then
-     * check the version of the WEB-INF/faces-config.xml document.  If the version
-     * is less than 2.0, then override the default value for the context init
-     * parameter so that other parts of the system that use that config option
-     * will know it has been disabled.
-     * </p>
-     *
-     * <p>
-     * NOTE:  Since this method overrides a configuration value, it should
-     * be called before *any* document parsing is performed the configuration
-     * value may be queried by the <code>ConfigParser</code>s.
-     * </p>
-     *
-     * @param webconfig configuration for this application
-     * @param facesConfigInfo object representing WEB-INF/faces-config.xml
-     * @return <code>true</code> if Facelets should be disabled
-     */
-    private boolean isFaceletsDisabled(WebConfiguration webconfig,
-                                       FacesConfigInfo facesConfigInfo) {
-
-        boolean isFaceletsDisabled = webconfig.isOptionEnabled(DisableFaceletJSFViewHandler);
-        if (!isFaceletsDisabled) {
-            // if not explicitly disabled, make a sanity check against
-            // /WEB-INF/faces-config.xml
-            isFaceletsDisabled = !facesConfigInfo.isVersionGreaterOrEqual(2.0);
-            webconfig.overrideContextInitParameter(DisableFaceletJSFViewHandler, isFaceletsDisabled);
-        }
-        return isFaceletsDisabled;
-
-    }
-
-
-    /**
-     * Push the provided <code>Future</code> to the specified <code>ServletContext</code>.
-     */
-    private void pushTaskToContext(ServletContext sc,
-                                   Future<Map<Class<? extends Annotation>,Set<Class<?>>>> scanTask) {
-
-        sc.setAttribute(ANNOTATIONS_SCAN_TASK_KEY, scanTask);
-
-    }
-
-
-    /**
-     * Publishes a {@link javax.faces.event.PostConstructApplicationEvent} event for the current
-     * {@link Application} instance.
-     */
-    private void publishPostConfigEvent() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        Application app = ctx.getApplication();
-        app.publishEvent(ctx,
-                         PostConstructApplicationEvent.class,
-                         Application.class,
-                         app);
-
-    }
-
-
-    /**
-     * <p>
-     *   Obtains an array of <code>Document</code>s to be processed
-     *   by {@link ConfigManager#FACES_CONFIG_PROCESSOR_CHAIN}.
-     * </p>
-     *
-     * @param sc the <code>ServletContext</code> for the application to be
-     *  processed
-     * @param providers <code>List</code> of <code>ConfigurationResourceProvider</code>
-     *  instances that provide the URL of the documents to parse.
-     * @param executor the <code>ExecutorService</code> used to dispatch parse
-     *  request to
-     * @param validating flag indicating whether or not the documents
-     *  should be validated
-     * @return an array of <code>DocumentInfo</code>s
-     */
-    private static DocumentInfo[] getConfigDocuments(ServletContext sc,
-                                                 List<ConfigurationResourceProvider> providers,
-                                                 ExecutorService executor,
-                                                 boolean validating) {
-
-        List<FutureTask<Collection<URL>>> urlTasks =
-             new ArrayList<FutureTask<Collection<URL>>>(providers.size());
-        for (ConfigurationResourceProvider p : providers) {
-            FutureTask<Collection<URL>> t =
-                 new FutureTask<Collection<URL>>(new URLTask(p, sc));
-            urlTasks.add(t);
-            if (executor != null) {
-                executor.execute(t);
-            } else {
-                t.run();
-            }
-        }
-
-        List<FutureTask<DocumentInfo>> docTasks =
-             new ArrayList<FutureTask<DocumentInfo>>(providers.size() << 1);
-
-        for (FutureTask<Collection<URL>> t : urlTasks) {
-            try {
-                Collection<URL> l = t.get();
-                for (URL u : l) {
-                    FutureTask<DocumentInfo> d =
-                         new FutureTask<DocumentInfo>(new ParseTask(validating, u));
-                    docTasks.add(d);
-                    if (executor != null) {
-                        executor.execute(d);
-                    } else {
-                        d.run();
-                    }
-                }
-            } catch (InterruptedException ignored) {
-            } catch (Exception e) {
-                throw new ConfigurationException(e);
-            }
-        }
-
-        List<DocumentInfo> docs = new ArrayList<DocumentInfo>(docTasks.size());
-        for (FutureTask<DocumentInfo> t : docTasks) {
-            try {
-                docs.add(t.get());
-            } catch (ExecutionException e) {
-                throw new ConfigurationException(e);
-            } catch (InterruptedException ignored) { }
-        }
-
-        return docs.toArray(new DocumentInfo[docs.size()]);
-
-    }
-
-
-    /**
-     * Create a new <code>ExecutorService</code> with
-     * {@link #NUMBER_OF_TASK_THREADS} threads.
-     */
-    private static ExecutorService createExecutorService() {
-
-        int tc = Runtime.getRuntime().availableProcessors();
-        if (tc > NUMBER_OF_TASK_THREADS) {
-            tc = NUMBER_OF_TASK_THREADS;
-        }
-        return Executors.newFixedThreadPool(tc);
-
-    }
-
-
-    /**
-     * @param throwable Throwable
-     * @return the root cause of this error
-     */
-    private Throwable unwind(Throwable throwable) {
-
-          Throwable t = null;
-          if (throwable != null) {
-              t =  unwind(throwable.getCause());
-              if (t == null) {
-                  t = throwable;
-              }
-          }
-          return t;
-
-    }
-
-
-    /**
-     * Calls through to {@link javax.faces.FactoryFinder#releaseFactories()}
-     * ignoring any exceptions.
-     */
-    private void releaseFactories() {
-        try {
-            FactoryFinder.releaseFactories();
-        } catch (FacesException ignored) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "Exception thrown from FactoryFinder.releaseFactories()",
-                           ignored);
-            }
-        }
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * Scans the class files within a web application returning a <code>Set</code>
-     * of classes that have been annotated with a standard Faces annotation.
-     */
-    private static class AnnotationScanTask implements Callable<Map<Class<? extends Annotation>,Set<Class<?>>>> {
-
-        private ServletContext sc;
-        private Set<URL> urls;
-        AnnotationProvider provider;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public AnnotationScanTask(ServletContext sc, Set<URL> urls) {
-
-            this.sc = sc;
-            this.urls = urls;
-            provider = AnnotationProviderFactory.createAnnotationProvider(sc);
-
-        }
-
-
-        // ----------------------------------------------- Methods from Callable
-
-
-        public Map<Class<? extends Annotation>,Set<Class<?>>> call() throws Exception {
-
-            Timer t = Timer.getInstance();
-            if (t != null) {
-                t.startTiming();
-            }
-
-            //AnnotationScanner scanner = new AnnotationScanner(sc);
-            Map<Class<? extends Annotation>,Set<Class<?>>> annotatedClasses =
-                  provider.getAnnotatedClasses(urls);
-
-            if (t != null) {
-                t.stopTiming();
-                t.logResult("Configuration annotation scan complete.");
-            }
-
-            return annotatedClasses;
-
-        }
-
-
-    } // END AnnotationScanTask
-
-
-    /**
-     * <p>
-     *  This <code>Callable</code> will be used by {@link ConfigManager#getConfigDocuments(javax.servlet.ServletContext, java.util.List, java.util.concurrent.ExecutorService, boolean)}.
-     *  It represents a single configuration resource to be parsed into a DOM.
-     * </p>
-     */
-    private static class ParseTask implements Callable<DocumentInfo> {
-        private static final String JAVAEE_SCHEMA_DEFAULT_NS =
-            "http://java.sun.com/xml/ns/javaee";
-        private static final String EMPTY_FACES_CONFIG =
-                "com/sun/faces/empty-faces-config.xml";
-        private URL documentURL;
-        private DocumentBuilderFactory factory;
-        private boolean validating;
-
-        // -------------------------------------------------------- Constructors
-
-
-        /**
-         * <p>
-         *   Constructs a new ParseTask instance
-         * </p>
-         *
-         * @param validating whether or not we're validating
-         * @param documentURL a URL to the configuration resource to be parsed
-         * @throws Exception general error
-         */
-        public ParseTask(boolean validating, URL documentURL)
-        throws Exception {
-
-            this.documentURL = documentURL;
-            this.factory = DbfFactory.getFactory();
-            this.validating = validating;
-
-        }
-
-
-        // ----------------------------------------------- Methods from Callable
-
-
-        /**
-         * @return the result of the parse operation (a DOM)
-         * @throws Exception if an error occurs during the parsing process
-         */
-        public DocumentInfo call() throws Exception {
-
-            try {
-                Timer timer = Timer.getInstance();
-                if (timer != null) {
-                    timer.startTiming();
-                }
-
-                Document d = getDocument();
-
-                if (timer != null) {
-                    timer.stopTiming();
-                    timer.logResult("Parse " + documentURL.toExternalForm());
-                }
-
-                return new DocumentInfo(d, documentURL);
-            } catch (Exception e) {
-                throw new ConfigurationException(MessageFormat.format(
-                     "Unable to parse document ''{0}'': {1}",
-                     documentURL.toExternalForm(),
-                     e.getMessage()), e);
-            }
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        /**
-         * @return <code>Document</code> based on <code>documentURL</code>.
-         * @throws Exception if an error occurs during the process of building a
-         *  <code>Document</code>
-         */
-        private Document getDocument() throws Exception {
-
-            Document returnDoc;
-            DocumentBuilder db = getNonValidatingBuilder();
-            InputSource is = new InputSource(getInputStream(documentURL));
-                is.setSystemId(documentURL.toExternalForm());
-            Document doc = null;
-
-            try {
-                doc = db.parse(is);
-            } catch (SAXParseException spe) {
-                // [mojarra-1693]
-                // Test if this is a zero length or whitespace only faces-config.xml file.
-                // If so, just make an empty Document
-                InputStream stream = is.getByteStream();
-                stream.close();
-
-                is = new InputSource(getInputStream(documentURL));
-                stream = is.getByteStream();
-                if (streamIsZeroLengthOrEmpty(stream) &&
-                    documentURL.toExternalForm().endsWith("faces-config.xml")) {
-                    ClassLoader loader = this.getClass().getClassLoader();
-                    is = new InputSource(getInputStream(loader.getResource(EMPTY_FACES_CONFIG)));
-                    doc = db.parse(is);
-                } 
-
-            }
-            String documentNS = doc.getDocumentElement().getNamespaceURI();
-            if (validating && documentNS != null) {
-                DOMSource domSource
-                     = new DOMSource(doc, documentURL.toExternalForm());
-
-                /*
-                 * If the Document in question is 1.2 (i.e. it has a namespace matching
-                 * JAVAEE_SCHEMA_DEFAULT_NS, then perform validation using the cached schema
-                 * and return.  Otherwise we assume a 1.0 or 1.1 faces-config in which case
-                 * we need to transform it to reference a special 1.1 schema before validating.
-                 */
-                Node documentElement = ((Document) domSource.getNode()).getDocumentElement();
-                if (JAVAEE_SCHEMA_DEFAULT_NS.equals(documentNS)) {
-                    Attr version = (Attr)
-                            documentElement.getAttributes().getNamedItem("version");
-                    DbfFactory.FacesSchema schema;
-                    if (version != null) {
-                        String versionStr = version.getValue();
-                        if ("2.0".equals(versionStr)) {
-                            if ("facelet-taglib".equals(documentElement.getLocalName())) {
-                                schema = DbfFactory.FacesSchema.FACELET_TAGLIB_20;
-                            } else {
-                                schema = DbfFactory.FacesSchema.FACES_20;
-                            }
-                        } else if ("1.2".equals(versionStr)) {
-                            schema = DbfFactory.FacesSchema.FACES_12;
-                        } else {
-                            throw new ConfigurationException("Unknown Schema version: " + versionStr);
-                        }
-                        DocumentBuilder builder = getBuilderForSchema(schema);
-                        if (builder.isValidating()) {
-                            builder.getSchema().newValidator().validate(domSource);
-                            returnDoc = ((Document) domSource.getNode());
-                        } else {
-                            returnDoc = ((Document) domSource.getNode());
-                        }
-                    } else {
-                        // this shouldn't happen, but...
-                        throw new ConfigurationException("No document version available.");
-                    }
-                } else {
-                    DOMResult domResult = new DOMResult();
-                    Transformer transformer = getTransformer(documentNS);
-                    transformer.transform(domSource, domResult);
-                    // copy the source document URI to the transformed result
-                    // so that processes that need to build URLs relative to the
-                    // document will work as expected.
-                    ((Document) domResult.getNode())
-                          .setDocumentURI(((Document) domSource
-                                .getNode()).getDocumentURI());
-                    DbfFactory.FacesSchema schemaToApply;
-                    if (FACES_CONFIG_1_X_DEFAULT_NS.equals(documentNS)) {
-                        schemaToApply = DbfFactory.FacesSchema.FACES_11;
-                    } else if (FACELETS_1_0_DEFAULT_NS.equals(documentNS)) {
-                        schemaToApply = DbfFactory.FacesSchema.FACELET_TAGLIB_20;
-                    } else {
-                        throw new IllegalStateException();
-                    }
-                    DocumentBuilder builder = getBuilderForSchema(schemaToApply);
-                    if (builder.isValidating()) {
-                        builder.getSchema().newValidator().validate(new DOMSource(domResult.getNode()));
-                        returnDoc = (Document) domResult.getNode();
-                    } else {
-                        returnDoc = (Document) domResult.getNode();
-                    }
-                }
-            } else {
-                returnDoc = doc;
-            }
-
-            // mark this document as the parsed representation of the
-            // WEB-INF/faces-config.xml.  This is used later in the configuration
-            // processing.
-            if (documentURL.toExternalForm().contains("/WEB-INF/faces-config.xml")) {
-                Attr webInf = returnDoc.createAttribute(WEB_INF_MARKER);
-                webInf.setValue("true");
-                returnDoc.getDocumentElement().getAttributes().setNamedItem(webInf);
-            }
-            return returnDoc;
-
-        }
-
-        private boolean streamIsZeroLengthOrEmpty(InputStream is) throws IOException {
-            boolean isZeroLengthOrEmpty = (0 == is.available());
-            final int size = 1024;
-            byte[] b = new byte[size];
-            String s;
-            while (!isZeroLengthOrEmpty && -1 != is.read(b, 0, size)) {
-                s = (new String(b)).trim();
-                isZeroLengthOrEmpty = 0 == s.length();
-                b[0] = 0;
-                for (int i = 1; i < size; i += i) {
-                    System.arraycopy(b, 0, b, i, ((size - i) < i) ? (size - i) : i);
-                }
-            }
-
-            return isZeroLengthOrEmpty;
-        }
-
-
-        /**
-         * Obtain a <code>Transformer</code> using the style sheet
-         * referenced by the <code>XSL</code> constant.
-         *
-         * @return a new Tranformer instance
-         * @throws Exception if a Tranformer instance could not be created
-         */
-        private static Transformer getTransformer(String documentNS)
-        throws Exception {
-
-            TransformerFactory factory = TransformerFactory.newInstance();
-            String xslToApply;
-            if (FACES_CONFIG_1_X_DEFAULT_NS.equals(documentNS)) {
-                xslToApply = FACES_TO_1_1_PRIVATE_XSL;
-            } else if (FACELETS_1_0_DEFAULT_NS.equals(documentNS)) {
-                xslToApply = FACELETS_TO_2_0_XSL;
-            } else {
-                throw new IllegalStateException();
-            }
-            return factory
-                 .newTransformer(new StreamSource(getInputStream(ConfigManager
-                      .class.getResource(xslToApply))));
-
-        }
-
-
-        /**
-         * @return an <code>InputStream</code> to the resource referred to by
-         *         <code>url</code>
-         * @param url source <code>URL</code>
-         * @throws IOException if an error occurs
-         */
-        private static InputStream getInputStream(URL url) throws IOException {
-
-            URLConnection conn = url.openConnection();
-            conn.setUseCaches(false);
-            return new BufferedInputStream(conn.getInputStream());
-
-        }
-
-
-
-        private DocumentBuilder getNonValidatingBuilder() throws Exception {
-
-            DocumentBuilderFactory tFactory = DbfFactory.getFactory();
-            tFactory.setValidating(false);
-            DocumentBuilder tBuilder = tFactory.newDocumentBuilder();
-            tBuilder.setEntityResolver(DbfFactory.FACES_ENTITY_RESOLVER);
-            tBuilder.setErrorHandler(DbfFactory.FACES_ERROR_HANDLER);
-            return tBuilder;
-
-        }
-
-        private DocumentBuilder getBuilderForSchema(DbfFactory.FacesSchema schema)
-        throws Exception {
-            try {
-                factory.setSchema(schema.getSchema());
-            } catch (UnsupportedOperationException upe) {
-                return getNonValidatingBuilder();
-            }
-            DocumentBuilder builder = factory.newDocumentBuilder();
-            builder.setEntityResolver(DbfFactory.FACES_ENTITY_RESOLVER);
-            builder.setErrorHandler(DbfFactory.FACES_ERROR_HANDLER);
-            return builder;
-        }
-
-    } // END ParseTask
-
-
-    /**
-     * <p>
-     *  This <code>Callable</code> will be used by {@link ConfigManager#getConfigDocuments(javax.servlet.ServletContext, java.util.List, java.util.concurrent.ExecutorService, boolean)}.
-     *  It represents one or more URLs to configuration resources that require
-     *  processing.
-     * </p>
-     */
-    private static class URLTask implements Callable<Collection<URL>> {
-
-        private ConfigurationResourceProvider provider;
-        private ServletContext sc;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        /**
-         * Constructs a new <code>URLTask</code> instance.
-         * @param provider the <code>ConfigurationResourceProvider</code> from
-         *  which zero or more <code>URL</code>s will be returned
-         * @param sc the <code>ServletContext</code> of the current application
-         */
-        public URLTask(ConfigurationResourceProvider provider,
-                       ServletContext sc) {
-            this.provider = provider;
-            this.sc = sc;
-        }
-
-
-        // ----------------------------------------------- Methods from Callable
-
-
-        /**
-         * @return zero or more <code>URL</code> instances
-         * @throws Exception if an Exception is thrown by the underlying
-         *  <code>ConfigurationResourceProvider</code> 
-         */
-        public Collection<URL> call() throws Exception {
-            return provider.getResources(sc);
-        }
-
-    } // END URLTask
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/ConfigurationException.java b/jsf-ri/src/main/java/com/sun/faces/config/ConfigurationException.java
deleted file mode 100644
index 27d8e11..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/ConfigurationException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import javax.faces.FacesException;
-
-/**
- * <p>
- *  This represents any configuration processing problems that could
- *  occur.
- * </p>
- */
-public class ConfigurationException extends FacesException {
-
-     public ConfigurationException() {
-        super();
-    }
-
-
-    public ConfigurationException(String message) {
-        super(message);
-    }
-
-
-    public ConfigurationException(Throwable t) {
-        super(t);
-    }
-
-
-    public ConfigurationException(String message, Throwable t) {
-        super(message, t);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/ConfigureListener.java b/jsf-ri/src/main/java/com/sun/faces/config/ConfigureListener.java
deleted file mode 100644
index db565ef..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/ConfigureListener.java
+++ /dev/null
@@ -1,1090 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.WebappLifecycleListener;
-
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableGroovyScripting;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableHtmlTagLibraryValidator;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableLazyBeanValidation;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableThreading;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.ForceLoadFacesConfigFiles;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.VerifyFacesConfigObjects;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.JavaxFacesProjectStage;
-
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.el.ELContextImpl;
-import com.sun.faces.el.ELContextListenerImpl;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.el.FacesCompositeELResolver;
-import com.sun.faces.mgbean.BeanBuilder;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.scripting.groovy.GroovyHelper;
-import com.sun.faces.scripting.groovy.GroovyHelperFactory;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.MojarraThreadFactory;
-import com.sun.faces.util.ReflectionUtils;
-import com.sun.faces.util.Timer;
-import com.sun.faces.util.Util;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.el.CompositeELResolver;
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PostConstructViewMapEvent;
-import javax.faces.event.PreDestroyApplicationEvent;
-import javax.faces.event.PreDestroyViewMapEvent;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextAttributeEvent;
-import javax.servlet.ServletContextAttributeListener;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.ServletRequestAttributeEvent;
-import javax.servlet.ServletRequestAttributeListener;
-import javax.servlet.ServletRequestEvent;
-import javax.servlet.ServletRequestListener;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionAttributeListener;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
-import javax.servlet.jsp.JspApplicationContext;
-import javax.servlet.jsp.JspFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>Parse all relevant JavaServer Faces configuration resources, and
- * configure the Reference Implementation runtime environment.</p>
- * <p/>
- */
-public class ConfigureListener implements ServletRequestListener,
-        HttpSessionListener,
-        ServletRequestAttributeListener,
-        HttpSessionAttributeListener,
-        ServletContextAttributeListener,
-        ServletContextListener {
-
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    private ScheduledThreadPoolExecutor webResourcePool;
-
-    protected WebappLifecycleListener webAppListener;
-    protected WebConfiguration webConfig;
-
-
-    // ------------------------------------------ ServletContextListener Methods
-
-
-    public void contextInitialized(ServletContextEvent sce) {
-        ServletContext context = sce.getServletContext();
-
-        Timer timer = Timer.getInstance();
-        if (timer != null) {
-            timer.startTiming();
-        }
-
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                    MessageFormat.format(
-                            "ConfigureListener.contextInitialized({0})",
-                            getServletContextIdentifier(context)));
-        }
-
-        webConfig = WebConfiguration.getInstance(context);
-        ConfigManager configManager = ConfigManager.getInstance();
-
-        if (configManager.hasBeenInitialized(context)) {
-            return;
-        }
-
-        // Check to see if the FacesServlet is present in the
-        // web.xml.   If it is, perform faces configuration as normal,
-        // otherwise, simply return.
-        Object mappingsAdded = context.getAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED);
-        if (mappingsAdded != null) {
-            context.removeAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED);
-        }
-
-        WebXmlProcessor webXmlProcessor = new WebXmlProcessor(context);
-        if (mappingsAdded == null) {
-            if (!webXmlProcessor.isFacesServletPresent()) {
-                if (!webConfig.isOptionEnabled(ForceLoadFacesConfigFiles)) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                "No FacesServlet found in deployment descriptor - bypassing configuration");
-                    }
-                    WebConfiguration.clear(context);
-                    return;
-                }
-            } else {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                            "FacesServlet found in deployment descriptor - processing configuration.");
-                }
-            }
-        }
-
-
-        // bootstrap of faces required
-        webAppListener = new WebappLifecycleListener(context);
-        webAppListener.contextInitialized(sce);
-        InitFacesContext initContext = new InitFacesContext(context);
-        ReflectionUtils.initCache(Thread.currentThread().getContextClassLoader());
-
-        try {
-
-            if (LOGGER.isLoggable(Level.INFO)) {
-                LOGGER.log(Level.INFO,
-                        "jsf.config.listener.version",
-                        getServletContextIdentifier(context));
-            }
-
-            // see if we need to disable our TLValidator
-            Util.setHtmlTLVActive(
-                    webConfig.isOptionEnabled(EnableHtmlTagLibraryValidator));
-
-            if (webConfig.isOptionEnabled(VerifyFacesConfigObjects)) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.warning("jsf.config.verifyobjects.development_only");
-                }
-                // if we're verifying, force bean validation to occur at startup as well
-                webConfig.overrideContextInitParameter(EnableLazyBeanValidation, false);
-                Verifier.setCurrentInstance(new Verifier());
-            }
-            initScripting();
-            configManager.initialize(context);
-            if (shouldInitConfigMonitoring()) {
-                initConfigMonitoring(context);
-            }
-
-            // Step 7, verify that all the configured factories are available
-            // and optionall that configured objects can be created. 
-            Verifier v = Verifier.getCurrentInstance();
-            if (v != null && !v.isApplicationValid()) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.severe("jsf.config.verifyobjects.failures_detected");
-                    StringBuilder sb = new StringBuilder(128);
-                    for (String m : v.getMessages()) {
-                        sb.append(m).append('\n');
-                    }
-                    LOGGER.severe(sb.toString());
-                }
-            }
-            registerELResolverAndListenerWithJsp(context, false);
-            ELContext elctx = new ELContextImpl(initContext.getApplication().getELResolver());
-            elctx.putContext(FacesContext.class, initContext);
-            initContext.setELContext(elctx);
-            ApplicationAssociate associate =
-                    ApplicationAssociate.getInstance(context);
-            if (associate != null) {
-                associate.setContextName(getServletContextIdentifier(context));
-                BeanManager manager = associate.getBeanManager();
-                List<String> eagerBeans = manager.getEagerBeanNames();
-                if (!eagerBeans.isEmpty()) {
-                    for (String name : eagerBeans) {
-                        manager.create(name, initContext);
-                    }
-                }
-                boolean isErrorPagePresent = webXmlProcessor.isErrorPagePresent();
-                associate.setErrorPagePresent(isErrorPagePresent);
-                context.setAttribute(RIConstants.ERROR_PAGE_PRESENT_KEY_NAME,
-                        isErrorPagePresent);
-
-            }
-            Application app = initContext.getApplication();
-            app.subscribeToEvent(PostConstructViewMapEvent.class,
-                    UIViewRoot.class,
-                    webAppListener);
-            app.subscribeToEvent(PreDestroyViewMapEvent.class,
-                    UIViewRoot.class,
-                    webAppListener);
-
-            webConfig.doLoggingActions();
-
-        } finally {
-            Verifier.setCurrentInstance(null);
-            initContext.release();
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                        "jsf.config.listener.version.complete");
-            }
-            if (timer != null) {
-                timer.stopTiming();
-                timer.logResult("Initialization of context " +
-                        getServletContextIdentifier(context));
-            }
-        }
-    }
-
-
-    public void contextDestroyed(ServletContextEvent sce) {
-        ServletContext context = sce.getServletContext();
-        InitFacesContext initContext = null;
-        try {
-            initContext = new InitFacesContext(context);
-
-            if (webAppListener != null) {
-                webAppListener.contextDestroyed(sce);
-                webAppListener = null;
-            }
-            if (webResourcePool != null) {
-                webResourcePool.shutdownNow();
-            }
-            if (!ConfigManager.getInstance().hasBeenInitialized(context)) {
-                return;
-            }
-            GroovyHelper helper = GroovyHelper.getCurrentInstance(context);
-            if (helper != null) {
-                helper.setClassLoader();
-            }
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "ConfigureListener.contextDestroyed({0})",
-                           context.getServletContextName());
-            }
-
-
-            ELContext elctx = new ELContextImpl(initContext.getApplication().getELResolver());
-            elctx.putContext(FacesContext.class, initContext);
-            initContext.setELContext(elctx);
-            Application app = initContext.getApplication();
-            app.publishEvent(initContext,
-                    PreDestroyApplicationEvent.class,
-                    Application.class,
-                    app);
-        } catch (Exception e) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                        "Unexpected exception when attempting to tear down the Mojarra runtime",
-                        e);
-            }
-        } finally {
-            ApplicationAssociate.clearInstance(context);
-            ApplicationAssociate.setCurrentInstance(null);
-            // Release the initialization mark on this web application
-            ConfigManager.getInstance().destory(context);
-            if (initContext != null) {
-                initContext.release();
-            }
-            ReflectionUtils.clearCache(Thread.currentThread().getContextClassLoader());
-            WebConfiguration.clear(context);
-        }
-
-    }
-
-
-    // ------------------------------------- Methods from ServletRequestListener
-
-
-    public void requestDestroyed(ServletRequestEvent event) {
-        if (webAppListener != null) {
-            webAppListener.requestDestroyed(event);
-        }
-    }
-
-
-    public void requestInitialized(ServletRequestEvent event) {
-        if (webAppListener != null) {
-            webAppListener.requestInitialized(event);
-        }
-    }
-
-
-    // ----------------------------------------- Methods from HttpSessionListener
-
-
-    public void sessionCreated(HttpSessionEvent event) {
-        if (webAppListener != null) {
-            webAppListener.sessionCreated(event);
-        }
-    }
-
-
-    public void sessionDestroyed(HttpSessionEvent event) {
-        if (webAppListener != null) {
-            webAppListener.sessionDestroyed(event);
-        }
-    }
-
-
-    // ---------------------------- Methods from ServletRequestAttributeListener
-
-
-    public void attributeAdded(ServletRequestAttributeEvent event) {
-        // ignored
-    }
-
-
-    public void attributeRemoved(ServletRequestAttributeEvent event) {
-        if (webAppListener != null) {
-            webAppListener.attributeRemoved(event);
-        }
-    }
-
-
-    public void attributeReplaced(ServletRequestAttributeEvent event) {
-        if (webAppListener != null) {
-            webAppListener.attributeReplaced(event);
-        }
-    }
-
-
-    // ------------------------------- Methods from HttpSessionAttributeListener
-
-
-    public void attributeAdded(HttpSessionBindingEvent event) {
-        // ignored
-    }
-
-
-    public void attributeRemoved(HttpSessionBindingEvent event) {
-        if (webAppListener != null) {
-            webAppListener.attributeRemoved(event);
-        }
-    }
-
-
-    public void attributeReplaced(HttpSessionBindingEvent event) {
-        if (webAppListener != null) {
-            webAppListener.attributeReplaced(event);
-        }
-    }
-
-
-    // ---------------------------- Methods from ServletContextAttributeListener
-
-
-    public void attributeAdded(ServletContextAttributeEvent event) {
-        // ignored
-    }
-
-    public void attributeRemoved(ServletContextAttributeEvent event) {
-        if (webAppListener != null) {
-            webAppListener.attributeRemoved(event);
-        }
-    }
-
-    public void attributeReplaced(ServletContextAttributeEvent event) {
-        if (webAppListener != null) {
-            webAppListener.attributeReplaced(event);
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    private boolean shouldInitConfigMonitoring() {
-
-        boolean development = isDevModeEnabled();
-        boolean threadingOptionSpecified = webConfig.isSet(EnableThreading);
-        if (development && !threadingOptionSpecified) {
-            return true;
-        }
-        boolean threadingOption = webConfig.isOptionEnabled(EnableThreading);
-        return (development && threadingOptionSpecified && threadingOption);
-
-    }
-
-    private void initConfigMonitoring(ServletContext context) {
-
-        //noinspection unchecked
-        Collection<URL> webURLs =
-                (Collection<URL>) context.getAttribute("com.sun.faces.webresources");
-        if (isDevModeEnabled() && webURLs != null && !webURLs.isEmpty()) {
-            webResourcePool = new ScheduledThreadPoolExecutor(1, new MojarraThreadFactory("WebResourceMonitor"));
-            webResourcePool.scheduleAtFixedRate(new WebConfigResourceMonitor(context, webURLs),
-                    2000,
-                    2000,
-                    TimeUnit.MILLISECONDS);
-        }
-        context.removeAttribute("com.sun.faces.webresources");
-
-    }
-
-    private void initScripting() {
-        if (webConfig.isOptionEnabled(EnableGroovyScripting)) {
-            GroovyHelper helper = GroovyHelperFactory.createHelper();
-            if (helper != null) {
-                helper.setClassLoader();
-            }
-        }
-    }
-
-
-    private boolean isDevModeEnabled() {
-
-        // interrogate the init parameter directly vs looking up the application
-        return "Development".equals(webConfig.getOptionValue(JavaxFacesProjectStage));
-
-    }
-
-
-    /**
-     * This method will be invoked {@link WebConfigResourceMonitor} when
-     * changes to any of the faces-config.xml files included in WEB-INF
-     * are modified.
-     */
-    private void reload(ServletContext sc) {
-
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.log(Level.INFO,
-                    "Reloading JSF configuration for context {0}",
-                    getServletContextIdentifier(sc));
-        }
-        GroovyHelper helper = GroovyHelper.getCurrentInstance();
-        if (helper != null) {
-            helper.setClassLoader();
-        }
-        // tear down the application
-        try {
-            List<HttpSession> sessions = webAppListener.getActiveSessions();
-            if (sessions != null) {
-                for (HttpSession session : sessions) {
-                    if (LOGGER.isLoggable(Level.INFO)) {
-                        LOGGER.log(Level.INFO,
-                                "Invalidating Session {0}",
-                                session.getId());
-                    }
-                    session.invalidate();
-                }
-            }
-            ApplicationAssociate associate = ApplicationAssociate.getInstance(sc);
-            if (associate != null) {
-                BeanManager manager = associate.getBeanManager();
-                for (Map.Entry<String, BeanBuilder> entry : manager.getRegisteredBeans().entrySet()) {
-                    String name = entry.getKey();
-                    BeanBuilder bean = entry.getValue();
-                    if (ELUtils.Scope.APPLICATION.toString().equals(bean.getScope())) {
-                        if (LOGGER.isLoggable(Level.INFO)) {
-                            LOGGER.log(Level.INFO,
-                                    "Removing application scoped managed bean: {0}",
-                                    name);
-                        }
-                        sc.removeAttribute(name);
-                    }
-
-                }
-            }
-            // Release any allocated application resources
-            FactoryFinder.releaseFactories();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            FacesContext initContext = new InitFacesContext(sc);
-            ApplicationAssociate
-                    .clearInstance(initContext.getExternalContext());
-            ApplicationAssociate.setCurrentInstance(null);
-            // Release the initialization mark on this web application
-            ConfigManager.getInstance().destory(sc);
-            initContext.release();
-            ReflectionUtils.clearCache(Thread.currentThread().getContextClassLoader());
-            WebConfiguration.clear(sc);
-        }
-
-        // bring the application back up, avoid re-registration of certain JSP
-        // artifacts.  No verification will be performed either to make this
-        // light weight.
-
-        // init a new WebAppLifecycleListener so that the cached ApplicationAssociate
-        // is removed.
-        webAppListener = new WebappLifecycleListener(sc);
-
-        FacesContext initContext = new InitFacesContext(sc);
-        ReflectionUtils
-                .initCache(Thread.currentThread().getContextClassLoader());
-
-        try {
-            ConfigManager configManager = ConfigManager.getInstance();
-            configManager.initialize(sc);
-
-
-            registerELResolverAndListenerWithJsp(sc, true);
-            ApplicationAssociate associate =
-                    ApplicationAssociate.getInstance(sc);
-            if (associate != null) {
-                Boolean errorPagePresent = (Boolean) sc.getAttribute(RIConstants.ERROR_PAGE_PRESENT_KEY_NAME);
-                if (null != errorPagePresent) {
-                    associate.setErrorPagePresent(errorPagePresent);
-                    associate.setContextName(getServletContextIdentifier(sc));
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            initContext.release();
-        }
-
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.log(Level.INFO,
-                    "Reload complete.",
-                    getServletContextIdentifier(sc));
-        }
-
-    }
-
-
-    private static String getServletContextIdentifier(ServletContext context) {
-        if (context.getMajorVersion() == 2 && context.getMinorVersion() < 5) {
-            return context.getServletContextName();
-        } else {
-            return context.getContextPath();
-        }
-    }
-
-
-    private static boolean isJspTwoOne(ServletContext context) {
-
-        // The following try/catch is a hack to work around
-        // a bug in Tomcat 6 where JspFactory.getDefaultFactory() will
-        // return null unless JspRuntimeContext has been loaded.
-        try {
-            Class.forName("org.apache.jasper.compiler.JspRuntimeContext");
-        } catch (ClassNotFoundException ignored) {
-            // ignored
-        }
-
-        if (JspFactory.getDefaultFactory() == null) {
-            return false;
-        }
-        try {
-            JspFactory.class.getMethod("getJspApplicationContext",
-                    ServletContext.class);
-        } catch (Exception e) {
-            return false;
-        }
-        try {
-            JspFactory.getDefaultFactory().getJspApplicationContext(context);
-        } catch (Throwable e) {
-            return false;
-        }
-        return true;
-
-    }
-
-    public void registerELResolverAndListenerWithJsp(ServletContext context, boolean reloaded) {
-
-        if (webConfig.isSet(WebContextInitParameter.ExpressionFactory)
-                || !isJspTwoOne(context)) {
-
-            // first try to load a factory defined in web.xml
-            if (!installExpressionFactory(context,
-                    webConfig.getOptionValue(
-                            WebContextInitParameter.ExpressionFactory))) {
-
-                throw new ConfigurationException(
-                        MessageUtils.getExceptionMessageString(
-                                MessageUtils.INCORRECT_JSP_VERSION_ID,
-                                WebContextInitParameter.ExpressionFactory.getDefaultValue(),
-                                WebContextInitParameter.ExpressionFactory.getQualifiedName()));
-
-            }
-
-        } else {
-
-            // JSP 2.1 specific check
-            if (JspFactory.getDefaultFactory().getJspApplicationContext(context) == null) {
-                return;
-            }
-
-            // register an empty resolver for now. It will be populated after the 
-            // first request is serviced.
-            CompositeELResolver compositeELResolverForJsp =
-                    new FacesCompositeELResolver(FacesCompositeELResolver.ELResolverChainType.JSP);
-            ApplicationAssociate associate =
-                    ApplicationAssociate.getInstance(context);
-            if (associate != null) {
-                associate.setFacesELResolverForJsp(compositeELResolverForJsp);
-            }
-
-            // get JspApplicationContext.
-            JspApplicationContext jspAppContext = JspFactory.getDefaultFactory()
-                    .getJspApplicationContext(context);
-
-            // cache the ExpressionFactory instance in ApplicationAssociate
-            if (associate != null) {
-                associate.setExpressionFactory(jspAppContext.getExpressionFactory());
-            }
-
-            // register compositeELResolver with JSP
-            try {
-                jspAppContext.addELResolver(compositeELResolverForJsp);
-            }
-            catch (IllegalStateException e) {
-                ApplicationFactory factory = (ApplicationFactory)
-                        FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-                Application app = factory.getApplication();
-                if (app.getProjectStage() != ProjectStage.UnitTest && !reloaded) {
-                    throw e;
-                }
-            }
-
-            // register JSF ELContextListenerImpl with Jsp
-            ELContextListenerImpl elContextListener = new ELContextListenerImpl();
-            jspAppContext.addELContextListener(elContextListener);
-        }
-    }
-
-    private boolean installExpressionFactory(ServletContext sc,
-                                             String elFactoryType) {
-
-        if (elFactoryType == null) {
-            return false;
-        }
-        try {
-            ExpressionFactory factory = (ExpressionFactory)
-                    Util.loadClass(elFactoryType, this).newInstance();
-            ApplicationAssociate associate =
-                    ApplicationAssociate.getInstance(sc);
-            if (associate != null) {
-                associate.setExpressionFactory(factory);
-            }
-            return true;
-        } catch (Exception e) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.severe(MessageFormat.format("Unable to instantiate ExpressionFactory ''{0}''",
-                        elFactoryType));
-            }
-            return false;
-        }
-
-    }
-
-    // ----------------------------------------------------------- Inner classes
-
-
-    /**
-     * <p>Processes a web application's deployment descriptor looking
-     * for a reference to <code>javax.faces.webapp.FacesServlet</code>.</p>
-     */
-    private static class WebXmlProcessor {
-
-        private static final String WEB_XML_PATH = "/WEB-INF/web.xml";
-        private static final String WEB_FRAGMENT_PATH = "META-INF/web-fragment.xml";
-
-        private boolean facesServletPresent;
-        private boolean errorPagePresent;
-
-
-        /**
-         * <p>When instantiated, the web.xml of the current application
-         * will be scanned looking for a references to the
-         * <code>FacesServlet</code>.  <code>isFacesServletPresent()</code>
-         * will return the appropriate value based on the scan.</p>
-         *
-         * @param context the <code>ServletContext</code> for the application
-         *                of interest
-         */
-        WebXmlProcessor(ServletContext context) {
-
-            if (context != null) {
-                scanForFacesServlet(context);
-            }
-
-        } // END WebXmlProcessor
-
-
-        /**
-         * @return <code>true</code> if the <code>WebXmlProcessor</code>
-         *         detected a <code>FacesServlet</code> entry, otherwise return
-         *         <code>false</code>.</p>
-         */
-        boolean isFacesServletPresent() {
-
-            return facesServletPresent;
-
-        } // END isFacesServletPresent
-
-
-        /**
-         * @return <code>true</code> if <code>WEB-INF/web.xml</code> contains
-         *         a <code><error-page></code> element.
-         */
-        boolean isErrorPagePresent() {
-
-            return errorPagePresent;
-
-        }
-
-
-        /**
-         * <p>Parse the web.xml for the current application and scan
-         * for a FacesServlet entry, if found, set the
-         * <code>facesServletPresent</code> property to true.
-         *
-         * @param context the ServletContext instance for this application
-         */
-        private void scanForFacesServlet(ServletContext context) {
-            InputStream in = context.getResourceAsStream(WEB_XML_PATH);
-            if (in == null) {
-                if (context.getMajorVersion() < 3) {
-                    throw new ConfigurationException("no web.xml present");
-                }
-            }
-            SAXParserFactory factory = getConfiguredFactory();
-            if (in != null) {
-                try {
-                    SAXParser parser = factory.newSAXParser();
-                    parser.parse(in, new WebXmlHandler());
-                } catch (Exception e) {
-                    warnProcessingError(e, context);
-                    facesServletPresent = true;
-                    return;
-                } finally {
-                    if (in != null) {
-                        try {
-                            in.close();
-                        } catch (Exception ioe) {
-                            // ignored;
-                        }
-                    }
-                }
-            }
-            if (!facesServletPresent && context.getMajorVersion() >= 3) {
-                ClassLoader cl = Util.getCurrentLoader(this);
-                Enumeration<URL> urls;
-                try {
-                    urls = cl.getResources(WEB_FRAGMENT_PATH);
-                } catch (IOException ioe) {
-                    throw new ConfigurationException(ioe);
-                }
-                if (urls != null) {
-                    while (urls.hasMoreElements() && !facesServletPresent) {
-                        InputStream fragmentStream = null;
-                        try {
-                            URL url = urls.nextElement();
-                            URLConnection conn = url.openConnection();
-                            conn.setUseCaches(false);
-                            fragmentStream = conn.getInputStream();
-                            SAXParser parser = factory.newSAXParser();
-                            parser.parse(fragmentStream, new WebXmlHandler());
-                        } catch (Exception e) {
-                            warnProcessingError(e, context);
-                            facesServletPresent = true;
-                            return;
-                        } finally {
-                            if (fragmentStream != null) {
-                                try {
-                                    fragmentStream.close();
-                                } catch (IOException ioe) {
-                                    // ignore
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-        } // END scanForFacesServlet
-
-        /**
-         * <p>Return a <code>SAXParserFactory</code> instance that is
-         * non-validating and is namespace aware.</p>
-         *
-         * @return configured <code>SAXParserFactory</code>
-         */
-        private SAXParserFactory getConfiguredFactory() {
-
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setValidating(false);
-            factory.setNamespaceAware(true);
-            return factory;
-
-        } // END getConfiguredFactory
-
-
-        private void warnProcessingError(Exception e, ServletContext sc) {
-
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                        MessageFormat.format(
-                                "jsf.configuration.web.xml.parse.failed",
-                                getServletContextIdentifier(sc)),
-                        e);
-            }
-
-        }
-
-
-        /**
-         * <p>A simple SAX handler to process the elements of interested
-         * within a web application's deployment descriptor.</p>
-         */
-        private class WebXmlHandler extends DefaultHandler {
-
-            private static final String ERROR_PAGE = "error-page";
-            private static final String SERVLET_CLASS = "servlet-class";
-            private static final String FACES_SERVLET =
-                    "javax.faces.webapp.FacesServlet";
-
-            private boolean servletClassFound;
-            @SuppressWarnings({"StringBufferField"})
-            private StringBuffer content;
-
-            public InputSource resolveEntity(String publicId, String systemId)
-                    throws SAXException {
-
-                return new InputSource(new StringReader(""));
-
-            } // END resolveEntity
-
-
-            public void startElement(String uri, String localName,
-                                     String qName, Attributes attributes)
-                    throws SAXException {
-
-                if (!errorPagePresent) {
-                    if (ERROR_PAGE.equals(localName)) {
-                        errorPagePresent = true;
-                        return;
-                    }
-                }
-                if (!facesServletPresent) {
-                    if (SERVLET_CLASS.equals(localName)) {
-                        servletClassFound = true;
-                        //noinspection StringBufferWithoutInitialCapacity
-                        content = new StringBuffer();
-                    } else {
-                        servletClassFound = false;
-                    }
-                }
-
-
-            } // END startElement
-
-
-            public void characters(char[] ch, int start, int length)
-                    throws SAXException {
-
-                if (servletClassFound && !facesServletPresent) {
-                    content.append(ch, start, length);
-                }
-
-            } // END characters
-
-
-            public void endElement(String uri, String localName, String qName)
-                    throws SAXException {
-
-                if (servletClassFound && !facesServletPresent) {
-                    if (FACES_SERVLET.equals(content.toString().trim())) {
-                        facesServletPresent = true;
-                    }
-                }
-
-            } // END endElement
-
-        } // END WebXmlHandler
-
-    } // END WebXmlProcessor
-
-
-    private class WebConfigResourceMonitor implements Runnable {
-
-        private List<Monitor> monitors;
-        private ServletContext sc;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public WebConfigResourceMonitor(ServletContext sc, Collection<URL> urls) {
-
-            assert (urls != null);
-            this.sc = sc;
-            for (URL url : urls) {
-                if (monitors == null) {
-                    monitors = new ArrayList<Monitor>(urls.size());
-                }
-                try {
-                    Monitor m = new Monitor(url);
-                    monitors.add(m);
-                } catch (IOException ioe) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.severe("Unable to setup resource monitor for "
-                                      + url.toExternalForm()
-                                      + ".  Resource will not be monitored for changes.");
-                    }
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   ioe.toString(),
-                                   ioe);
-                    }
-                }
-            }
-
-        }
-
-
-        // ----------------------------------------------- Methods from Runnable
-
-        /**
-         * PENDING javadocs
-         */
-        public void run() {
-
-            assert (monitors != null);
-            boolean reloaded = false;
-            for (Iterator<Monitor> i = monitors.iterator(); i.hasNext(); ) {
-                Monitor m = i.next();
-                try {
-                    if (m.hasBeenModified()) {
-                        if (!reloaded) {
-                            reloaded = true;
-                        }
-                    }
-                } catch (IOException ioe) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.severe("Unable to access url "
-                                      + m.url.toExternalForm()
-                                      + ".  Monitoring for this resource will no longer occur.");
-                    }
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   ioe.toString(),
-                                   ioe);
-                    }
-                    i.remove();
-                }
-            }
-            if (reloaded) {
-                reload(sc);
-            }
-
-        }
-
-
-        // ------------------------------------------------------- Inner Classes
-
-
-        private class Monitor {
-
-            private URL url;
-            private long timestamp = -1;
-
-            // ---------------------------------------------------- Constructors
-
-
-            Monitor(URL url) throws IOException {
-
-                this.url = url;
-                this.timestamp = getLastModified();
-                if (LOGGER.isLoggable(Level.INFO)) {
-                    LOGGER.log(Level.INFO,
-                            "Monitoring {0} for modifications",
-                            url.toExternalForm());
-                }
-
-            }
-
-
-            // ----------------------------------------- Package Private Methods
-
-
-            boolean hasBeenModified() throws IOException {
-                long temp = getLastModified();
-                if (timestamp < temp) {
-                    timestamp = temp;
-                    if (LOGGER.isLoggable(Level.INFO)) {
-                        LOGGER.log(Level.INFO,
-                                "{0} changed!",
-                                url.toExternalForm());
-                    }
-                    return true;
-                }
-                return false;
-
-            }
-
-
-            // ------------------------------------------------- Private Methods
-
-
-            private long getLastModified() throws IOException {
-
-                InputStream in = null;
-                try {
-                    URLConnection conn = url.openConnection();
-                    conn.connect();
-                    in = conn.getInputStream();
-                    return conn.getLastModified();
-                } finally {
-                    if (in != null) {
-                        try {
-                            in.close();
-                        } catch (IOException ignored) {
-                        }
-                    }
-                }
-
-            }
-
-        } // END Monitor
-
-    } // END WebConfigResourceMonitor
-
-}
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/DbfFactory.java b/jsf-ri/src/main/java/com/sun/faces/config/DbfFactory.java
deleted file mode 100644
index 9cbdb8f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/DbfFactory.java
+++ /dev/null
@@ -1,573 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-import org.w3c.dom.ls.LSResourceResolver;
-import org.w3c.dom.ls.LSInput;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.File;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.MalformedURLException;
-import java.util.HashMap;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <p>Create and configure DocumentBuilderFactory instances.</p>
- */
-public class DbfFactory {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    private static final String AS_INSTALL_ROOT = "com.sun.aas.installRoot";
-
-    private static final String AS_SCHEMA_DIR =
-          System.getProperty(AS_INSTALL_ROOT)
-             + File.separatorChar
-             + "lib"
-             + File.separatorChar
-             + "schemas"
-             + File.separatorChar;
-
-    private static final String AS_DTD_DIR =
-          System.getProperty(AS_INSTALL_ROOT)
-             + File.separatorChar
-             + "lib"
-             + File.separatorChar
-             + "dtds"
-             + File.separatorChar;
-    
-    /**
-     * Location of the facelet-taglib 2.0 Schema
-     */
-    private static final String FACELET_TAGLIB_2_0_XSD =
-        "/com/sun/faces/web-facelettaglibrary_2_0.xsd";
-
-    /**
-     * Location of the Faces 2.0 Schema
-     */
-    private static final String FACES_2_0_XSD =
-        "/com/sun/faces/web-facesconfig_2_0.xsd";
-
-    /**
-     * Location of the Faces 1.2 Schema
-     */
-    private static final String FACES_1_2_XSD =
-         "/com/sun/faces/web-facesconfig_1_2.xsd";
-
-
-    /**
-     * Location of the Faces private 1.1 Schema
-     */
-    private static final String FACES_1_1_XSD =
-         "/com/sun/faces/web-facesconfig_1_1.xsd";
-
-
-    /**
-     * Location of the facelet taglib xsd within GlassFish.
-     */
-    private static final String FACELET_TAGLIB_2_0_XSD_FILE =
-          AS_SCHEMA_DIR + "web-facelettaglibrary_2_0.xsd";
-
-    /**
-     * Location of the faces 2.0 xsd within GlassFish.
-     */
-    private static final String FACES_2_0_XSD_FILE =
-          AS_SCHEMA_DIR + "web-facesconfig_2_0.xsd";
-
-    /**
-     * Location of the faces 1.2 xsd within GlassFish.
-     */
-    private static final String FACES_1_2_XSD_FILE =
-          AS_SCHEMA_DIR + "web-facesconfig_1_2.xsd";
-
-
-    /**
-     * Our cached 2.0 facelet-taglib Schema object for validation
-     */
-    private static Schema FACELET_TAGLIB_20_SCHEMA;
-
-    /**
-     * Our cached 2.0 Schema object for validation
-     */
-    private static Schema FACES_20_SCHEMA;
-
-    /**
-     * Our cached 1.2 Schema object for validation
-     */
-    private static Schema FACES_12_SCHEMA;
-
-    /**
-     * Our cached 1.1 Schema object for validation
-     */
-    private static Schema FACES_11_SCHEMA;
-
-    /**
-     * EntityResolver
-     */
-    public static final EntityResolver FACES_ENTITY_RESOLVER =
-         new FacesEntityResolver();
-
-
-    public enum FacesSchema {
-
-        FACES_20(FACES_20_SCHEMA),
-        FACES_12(FACES_12_SCHEMA),
-        FACES_11(FACES_11_SCHEMA),
-        FACELET_TAGLIB_20(FACELET_TAGLIB_20_SCHEMA);
-
-        private Schema schema;
-
-        FacesSchema(Schema schema) {
-            this.schema = schema;
-        }
-
-        public Schema getSchema() {
-            return schema;
-        }
-
-    }
-
-
-    /**
-     * ErrorHandler
-     */
-    public static final FacesErrorHandler FACES_ERROR_HANDLER =
-         new FacesErrorHandler();
-
-
-    static {
-        initStatics();
-    }
-
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public static DocumentBuilderFactory getFactory() {
-
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(true);
-        factory.setIgnoringComments(true);
-        factory.setIgnoringElementContentWhitespace(true);
-        return factory;
-
-    }   
-
-
-    /**
-     * Init our cache objects.
-     */
-    private static void initStatics() {
-        // First, cache the various files
-        // PENDING_RELEASE (rlubke) clean this up
-        try {
-            URL url = DbfFactory.class.getResource(FACES_1_2_XSD);
-            if (url == null) {
-                // try to load from the file
-                File f = new File(FACES_1_2_XSD_FILE);
-                if (!f.exists()) {
-                    throw new IllegalStateException("Unable to find web-facesconfig_1_2.xsd");
-                }
-                url = f.toURI().toURL();
-            }
-            URLConnection conn = url.openConnection();
-            conn.setUseCaches(false);
-            InputStream in = conn.getInputStream();
-            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-            factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
-            FACES_12_SCHEMA = factory.newSchema(new StreamSource(in));
-
-            url = DbfFactory.class.getResource(FACES_1_1_XSD);
-            conn = url.openConnection();
-            conn.setUseCaches(false);
-            in = conn.getInputStream();
-            factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-            factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
-            FACES_11_SCHEMA = factory.newSchema(new StreamSource(in));
-
-            url = DbfFactory.class.getResource(FACES_2_0_XSD);
-            if (url == null) {
-                // try to load from the file
-                File f = new File(FACES_2_0_XSD_FILE);
-                if (!f.exists()) {
-                    throw new IllegalStateException("Unable to find web-facesconfig_2_0.xsd");
-                }
-                url = f.toURI().toURL();
-            }
-            conn = url.openConnection();
-            conn.setUseCaches(false);
-            in = conn.getInputStream();
-            factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-            factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
-            FACES_20_SCHEMA = factory.newSchema(new StreamSource(in));
-
-            url = DbfFactory.class.getResource(FACELET_TAGLIB_2_0_XSD);
-            if (url == null) {
-                // try to load from the file
-                File f = new File(FACELET_TAGLIB_2_0_XSD_FILE);
-                if (!f.exists()) {
-                    throw new IllegalStateException("Unable to find web-facelettaglibrary_2_0.xsd");
-                }
-                url = f.toURI().toURL();
-            }
-            conn = url.openConnection();
-            conn.setUseCaches(false);
-            in = conn.getInputStream();
-            factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-            factory.setResourceResolver((LSResourceResolver) DbfFactory.FACES_ENTITY_RESOLVER);
-            FACELET_TAGLIB_20_SCHEMA = factory.newSchema(new StreamSource(in));
-
-        } catch (Exception e) {
-            throw new ConfigurationException(e);
-        }
-
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-   private static class FacesEntityResolver extends DefaultHandler implements LSResourceResolver {
-
-        /**
-         * <p>Contains associations between grammar name and the physical
-         * resource.</p>
-         */
-        private static final String[][] DTD_SCHEMA_INFO = {
-            {
-                "web-facesconfig_1_0.dtd",
-                "/com/sun/faces/web-facesconfig_1_0.dtd",
-                AS_DTD_DIR + "web-facesconfig_1_0.dtd"
-            },
-            {
-                "web-facesconfig_1_1.dtd",
-                "/com/sun/faces/web-facesconfig_1_1.dtd",
-                AS_DTD_DIR + "web-facesconfig_1_1.dtd"
-            },
-            {
-                "web-facesconfig_2_0.xsd",
-                 FACES_2_0_XSD,
-                 FACES_2_0_XSD_FILE
-            },
-            {
-                "facelet-taglib_1_0.dtd",
-                "/com/sun/faces/facelet-taglib_1_0.dtd",
-                null
-            },
-            {
-                "web-facelettaglibrary_2_0.xsd",
-                 FACELET_TAGLIB_2_0_XSD,
-                 FACELET_TAGLIB_2_0_XSD_FILE
-            },
-            {
-                "web-facesconfig_1_2.xsd",
-                FACES_1_2_XSD,
-                FACES_1_2_XSD_FILE
-            },
-            {
-                "web-facesconfig_1_1.xsd",
-                FACES_1_1_XSD,
-                null
-            },
-            {
-                "javaee_5.xsd",
-                "/com/sun/faces/javaee_5.xsd",
-                AS_SCHEMA_DIR + "javaee_5.xsd"
-            },
-            {
-                "javaee_web_services_client_1_2.xsd",
-                "/com/sun/faces/javaee_web_services_client_1_2.xsd",
-                AS_SCHEMA_DIR + "javaee_web_services_client_1_2.xsd"
-            },
-            {
-                "xml.xsd",
-                "/com/sun/faces/xml.xsd",
-                AS_SCHEMA_DIR + "xml.xsd"
-            },
-            {
-                "datatypes.dtd",
-                "/com/sun/faces/datatypes.dtd",
-                AS_SCHEMA_DIR + "datatypes.dtd"
-            },
-            {
-                "XMLSchema.dtd",
-                "/com/sun/faces/XMLSchema.dtd",
-                AS_SCHEMA_DIR + "XMLSchema.dtd"
-            }
-        };
-
-        /**
-         * <p>Contains mapping between grammar name and the local URL to the
-         * physical resource.</p>
-         */
-        private HashMap<String,String> entities =
-             new HashMap<String, String>(12, 1.0f);
-
-        // -------------------------------------------------------- Constructors
-
-
-        public FacesEntityResolver() {
-
-            // Add mappings between last segment of system ID and
-            // the expected local physical resource.  If the resource
-            // cannot be found, then rely on default entity resolution
-            // and hope a firewall isn't in the way or a proxy has
-            // been configured
-            for (String[] aDTD_SCHEMA_INFO : DTD_SCHEMA_INFO) {
-                URL url = this.getClass().getResource(aDTD_SCHEMA_INFO[1]);
-                if (url == null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   "jsf.config.cannot_resolve_entities",
-                                   new Object[]{
-                                        aDTD_SCHEMA_INFO[1],
-                                        aDTD_SCHEMA_INFO[0]
-                                   });
-                    }
-                    // the resource isn't available on the classpath, so
-                    // assume that we're running within a GF environment
-                    String path = aDTD_SCHEMA_INFO[2];
-                    if (path != null) {
-                        File f = new File(path);
-                        if (f.exists()) {
-                            try {
-                                url = f.toURI().toURL();
-                            } catch (MalformedURLException mue) {
-                                if (LOGGER.isLoggable(Level.SEVERE)) {
-                                    LOGGER.log(Level.SEVERE,
-                                               mue.toString(),
-                                               mue);
-                                }
-                            }
-                            if (url == null) {
-                                if (LOGGER.isLoggable(Level.FINE)) {
-                                    LOGGER.log(Level.FINE,
-                                               "jsf.config.cannot_resolve_entities",
-                                               new Object[]{
-                                                     aDTD_SCHEMA_INFO[1],
-                                                     aDTD_SCHEMA_INFO[2]
-                                               });
-                                }
-                            } else {
-                                entities.put(aDTD_SCHEMA_INFO[0], url.toString());
-                            }
-                        }
-
-                    }
-                } else {
-                    entities.put(aDTD_SCHEMA_INFO[0], url.toString());
-                }
-            }
-
-
-        } // END JsfEntityResolver
-
-
-        // ----------------------------------------- Methods from DefaultHandler
-
-
-        /**
-         * <p>Resolves the physical resource using the last segment of
-         * the <code>systemId</code>
-         * (e.g. http://java.sun.com/dtds/web-facesconfig_1_1.dtd,
-         * the last segment would be web-facesconfig_1_1.dtd).  If a mapping
-         * cannot be found for the segment, then defer to the
-         * <code>DefaultHandler</code> for resolution.</p>
-         */
-        public InputSource resolveEntity(String publicId, String systemId)
-        throws SAXException {
-
-            // publicId is ignored.  Resolution performed using
-            // the systemId.
-
-            // If no system ID, defer to superclass
-            if (systemId == null) {
-                InputSource result;
-                try {
-                    result = super.resolveEntity(publicId, null);
-                }
-                catch (Exception e) {
-                    throw new SAXException(e);
-                }
-                return result;
-            }
-
-            String grammarName =
-                systemId.substring(systemId.lastIndexOf('/') + 1);
-
-            String entityURL = entities.get(grammarName);
-
-            InputSource source;
-            if (entityURL == null) {
-                // we don't have a registered mapping, so defer to our
-                // superclass for resolution
-            	if (LOGGER.isLoggable(Level.FINE)) {
-            		LOGGER.log(Level.FINE, "Unknown entity, deferring to superclass.");
-            	}
-
-                try {
-                    source = super.resolveEntity(publicId, systemId);
-                }
-                catch (Exception e) {
-                    throw new SAXException(e);
-                }
-
-            } else {
-
-                try {
-                    source = new InputSource(new URL(entityURL).openStream());
-                } catch (Exception e) {
-                	if (LOGGER.isLoggable(Level.WARNING)) {
-	                    LOGGER.log(Level.WARNING,
-	                               "jsf.config.cannot_create_inputsource",
-	                               entityURL);
-                	}
-                    source = null;
-                }
-            }
-
-            // Set the System ID of the InputSource with the URL of the local
-            // resource - necessary to prevent parsing errors
-            if (source != null) {
-                source.setSystemId(entityURL);
-
-                if (publicId != null) {
-                    source.setPublicId(publicId);
-                }
-            }
-
-            return source;
-
-        } // END resolveEntity
-
-       public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) {
-           try {
-               InputSource source = resolveEntity(publicId, systemId);
-               if (source != null) {
-                   return new Input(source.getByteStream());
-               }               
-           } catch (Exception e) {
-               throw new ConfigurationException(e);
-           }
-           return null;
-       }
-
-
-    } // END FacesEntityResolver
-
-
-    private static class FacesErrorHandler implements ErrorHandler {
-        public void warning(SAXParseException exception) throws SAXException {
-            // do nothing
-        }
-
-        public void error(SAXParseException exception) throws SAXException {
-            throw exception;
-        }
-
-        public void fatalError(SAXParseException exception) throws SAXException {
-            throw exception;
-        }
-    } // END FacesErrorHandler
-
-
-    private static final class Input implements LSInput {
-        InputStream in;
-        public Input(InputStream in) {
-           this.in = in;
-        }
-        public Reader getCharacterStream() {
-            return null;
-        }
-
-        public void setCharacterStream(Reader characterStream) { }
-
-        public InputStream getByteStream() {
-            return in;
-        }
-
-        public void setByteStream(InputStream byteStream) { }
-
-        public String getStringData() {
-            return null;
-        }
-
-        public void setStringData(String stringData) { }
-
-        public String getSystemId() {
-            return null;
-        }
-
-        public void setSystemId(String systemId) { }
-
-        public String getPublicId() {
-            return null;
-        }
-
-        public void setPublicId(String publicId) { }
-
-        public String getBaseURI() {
-            return null;
-        }
-
-        public void setBaseURI(String baseURI) { }
-
-        public String getEncoding() {
-            return null;
-        }
-
-        public void setEncoding(String encoding) { }
-
-        public boolean getCertifiedText() {
-            return false;
-        }
-
-        public void setCertifiedText(boolean certifiedText) { }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/DocumentInfo.java b/jsf-ri/src/main/java/com/sun/faces/config/DocumentInfo.java
deleted file mode 100644
index 01b0538..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/DocumentInfo.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import org.w3c.dom.Document;
-
-import java.net.URL;
-
-
-/**
- * Associates a Document with a source URL.
- */
-public class DocumentInfo {
-
-    private Document document;
-    private URL sourceURL;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public DocumentInfo(Document document, URL sourceURL) {
-
-        this.document = document;
-        this.sourceURL = sourceURL;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public Document getDocument() {
-
-        return document;
-
-    }
-
-
-    public URL getSourceURL() {
-
-        return sourceURL;
-
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/DocumentOrderingWrapper.java b/jsf-ri/src/main/java/com/sun/faces/config/DocumentOrderingWrapper.java
deleted file mode 100644
index e3ef294..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/DocumentOrderingWrapper.java
+++ /dev/null
@@ -1,776 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.text.MessageFormat;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Timer;
-
-/**
- * This class is used by the config system to order <code>faces-config</code>
- * documents found on the classpath or configured explicitly via the
- * <code>javax.faces.CONFIG_FILES</code> context init parameter.
- */
-public class DocumentOrderingWrapper {
-
-    /**
-     * Logger for this class.
-     */
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * {@link Comparator} implementation to aid in sorting <code>faces-config</code>
-     * documents.
-     */
-    private static Comparator<DocumentOrderingWrapper> COMPARATOR =
-          new DocumentOrderingComparator();
-
-    /**
-     * This is the limit on the number of attempts made to sort the documents.
-     * Any attempt to exceed this limit will result in an Exception being thrown.
-     */
-    private static final int MAX_SORT_PASSED = 1000;
-
-    /**
-     * Constant for the <code>ordering</code> element.
-     */
-    private static final String ORDERING = "ordering";
-
-    /**
-     * Constant for the <code>before</code> element.
-     */
-    private static final String BEFORE = "before";
-
-    /**
-     * Constant for the <code>after</code> element.
-     */
-    private static final String AFTER = "after";
-
-    /**
-     * Constant for the <code>name</code> element.
-     */
-    private static final String NAME = "name";
-
-    /**
-     * Constant for the <code>others</code> element.
-     */
-    private static final String OTHERS = "others";
-
-    /**
-     * Others keyword for sorting.
-     */
-    private static final String OTHERS_KEY = DocumentOrderingWrapper.class.getName() + ".OTHERS_KEY";
-
-    /**
-     * Return code indicating that element <code>n</code> is to be swapped
-     * with <code>n + 1</code>
-     */
-    private static final int SWAP = -1;
-
-    /**
-     * Return code indicating that no swap needs to occur for the elements
-     * being compared.
-     */
-    private static final int DO_NOT_SWAP = 0;
-
-    /**
-     * The wrapped Document.
-     */
-    private DocumentInfo documentInfo;
-
-    /**
-     * The wrapped Document's ID.
-     */
-    private String id;
-
-    /**
-     * The wrapped Document's before IDs.
-     */
-    private String[] beforeIds;
-
-    /**
-     * The wrapped Document's before IDs.
-     */
-    private String[] afterIds;
-
-    // -------------------------------------------------------- Constructors
-
-
-    /**
-     * Constructs a new <code>DocumentOrderingWrapper</code> for the specified
-     * <code>Document<code>.
-     */
-    public DocumentOrderingWrapper(DocumentInfo document) {
-
-        this.documentInfo = document;
-        init();
-
-    }
-
-
-    // ------------------------------------------------------ Public Methods
-
-
-    /**
-     * @return the wrapped <code>Document</code>
-     */
-    public DocumentInfo getDocument() {
-
-        return documentInfo;
-
-    }
-
-
-    /**
-     * @return this <code>Document</code>'s ID, if any
-     */
-    public String getDocumentId() {
-
-        return id;
-
-    }
-
-
-    /**
-     * @return this <code>Document<code>'s before IDs, if any
-     */
-    public String[] getBeforeIds() {
-
-        return beforeIds;
-
-    }
-
-
-    /**
-     * @return this <code>Document</code>'s after IDs, if any
-     */
-    public String[] getAfterIds() {
-
-        return afterIds;
-
-    }
-
-
-    /**
-     * @return <code>true</code> if any before IDs are present, otherwise
-     *  <code>false</code>
-     */
-    public boolean isBeforeOrdered() {
-        return beforeIds.length != 0;
-    }
-
-
-    /**
-     * @return <code>true</code> if any after IDs are present, otherwise,
-     *  <code>false</code>
-     */
-    public boolean isAfterOrdered() {
-        return afterIds.length != 0;
-    }
-
-
-    /**
-     * @return <code>true</code> if this document has any before or after IDs,
-     *  otherwise <code>false</code>
-     */
-    public boolean isOrdered() {
-        return (isBeforeOrdered() || isAfterOrdered());
-    }
-
-
-    /**
-     * @return <code>true</code> if this document is before the specified
-     *  <code>id</code>, otherwise <code>false</code>
-     */
-    public boolean isBefore(String id) {
-
-        return (search(beforeIds, id));
-
-    }
-
-
-    /**
-     * @return <code>true</code> if this document is after the specified
-     *  <code>id</code>, otherwise <code>false</code>
-     */
-    public boolean isAfter(String id) {
-
-        return (search(afterIds, id));
-    }
-
-
-    /**
-     * @return <code>true</code> if this document is after others, otherwise
-     *  <code>false</code>
-     */
-    public boolean isAfterOthers() {
-
-        return (search(afterIds, OTHERS_KEY));
-
-    }
-
-
-    /**
-     * @return <code>true</code> if this document is before others, otherwise
-     *  <code>false</code>
-     */
-    public boolean isBeforeOthers() {
-
-         return (search(beforeIds, OTHERS_KEY));
-
-    }
-
-
-    @Override
-    public String toString() {
-        return "Document{" +
-               "id='" + id + '\'' +
-               ", beforeIds="
-               + (beforeIds == null ? null : Arrays.asList(beforeIds))
-               +
-               ", afterIds="
-               + (afterIds == null ? null : Arrays.asList(afterIds))
-               +
-               '}';
-    }
-
-
-    /**
-     * Sort the provided array of <code>Document</code>s per the order specified
-     * in the List represented by absoluteOrder.
-     * @param documents Documents to sort
-     * @param absoluteOrder the absolute order as specified in the /WEB-INF/faces-config.xml
-     * @return an array of DocumentOrderingWrappers that may be smaller than the
-     *  input array of wrappers.
-     */
-    public static DocumentOrderingWrapper[] sort(DocumentOrderingWrapper[] documents,
-                                                 List<String> absoluteOrder) {
-
-        List<DocumentOrderingWrapper> sourceList = new CopyOnWriteArrayList<DocumentOrderingWrapper>();
-        sourceList.addAll(Arrays.asList(documents));
-
-        List<DocumentOrderingWrapper> targetList = new ArrayList<DocumentOrderingWrapper>();
-        for (String name : absoluteOrder) {
-            if ("others".equals(name)) {
-                continue;
-            }
-            boolean found = false;
-            for (DocumentOrderingWrapper wrapper : sourceList) {
-                if (!found && name.equals(wrapper.getDocumentId())) {
-                    found = true;
-                    targetList.add(wrapper);
-                    sourceList.remove(wrapper);
-                } else if (found && name.equals(wrapper.getDocumentId())){
-                    // we've already processed a document with this name
-                    if (LOGGER.isLoggable(Level.WARNING)) {
-                        LOGGER.log(Level.WARNING,
-                                   "jsf.configuration.absolute.order.duplicate.document",
-                                   new Object[] { name });
-                    }
-                    // only log this once
-                    break;
-                }
-            }
-            if (!found) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.configuration.absolute.order.missing.document",
-                               new Object[] { name });
-                }
-            }
-        }
-
-        int othersIndex = absoluteOrder.indexOf("others");
-        if (othersIndex != -1) {
-            // any wrappers left in sourceList are considered others.
-            // start pushing them into targetList at the index
-            for (DocumentOrderingWrapper wrapper : sourceList) {
-                targetList.add(othersIndex, wrapper);
-            }
-        }
-
-        return targetList.toArray(new DocumentOrderingWrapper[targetList.size()]);
-        
-    }
-
-
-    /**
-     * Sort the provided array of <code>Document</code>s per the requirements
-     * of the 2.0 specification.  Note, that this method only provides partial
-     * ordering and not absolute ordering.
-     */
-    public static void sort(DocumentOrderingWrapper[] documents) {
-
-        Timer t = Timer.getInstance();
-        if (t != null) {
-            t.startTiming();
-        }
-        try {
-            enhanceOrderingData(documents);
-        } catch (CircularDependencyException re) {
-            String msg = "Circular dependencies detected!\nDocument Info\n==================\n";
-            for (DocumentOrderingWrapper w : documents) {
-                msg += ("  " + w.toString() + '\n');
-            }
-            throw new ConfigurationException(msg);
-        }
-
-        boolean doMore = true;
-        int numberOfPasses = 0;
-
-        while (doMore) {
-            numberOfPasses++;
-            if (numberOfPasses == MAX_SORT_PASSED) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    String msg = "Exceeded maximum number of attempts to sort the application's faces-config documents.\nDocument Info\n==================";
-                    for (DocumentOrderingWrapper w : documents) {
-                        msg += ("  " + w.toString() + '\n');
-                    }
-                    LOGGER.severe(msg);                    
-                }
-                throw new ConfigurationException("Exceeded maximum number of attempts to sort the faces-config documents.");
-            }
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "Starting sort pass number {0}...",
-                           numberOfPasses);
-            }
-            doMore = false;
-            for (int i = 0; i < documents.length - 1; i++) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               "Comparing {0}, {1}",
-                               new Object[] { documents[i].id, documents[i + 1].id });
-                }
-                if (COMPARATOR.compare(documents[i], documents[i + 1]) != DO_NOT_SWAP) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   "Swapping {0} with {1}",
-                                   new Object[] { documents[i].id, documents[i + 1].id });
-                    }
-                    DocumentOrderingWrapper temp = documents[i];
-                    documents[i] = documents[i + 1];
-                    documents[i + 1] = temp;
-                    doMore = true;
-                }
-            }
-
-            // compare first and last elements
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "Comparing {0}, {1}",
-                           new Object[]{documents[0].id, documents[documents.length - 1].id});
-            }
-            if (COMPARATOR.compare(documents[0], documents[documents.length - 1]) != DO_NOT_SWAP) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               "Swapping {0} with {1}",
-                               new Object[]{documents[0].id, documents[documents.length - 1].id});
-                }
-                DocumentOrderingWrapper temp = documents[0];
-                documents[0] = documents[documents.length - 1];
-                documents[documents.length - 1] = temp;
-                doMore = true;
-            }
-        }
-
-        if (t != null) {
-            t.stopTiming();
-            t.logResult("\"faces-config\" document sorting complete in " + numberOfPasses + '.');
-        }
-
-    }
-
-    // ----------------------------------------------------- Private Methods
-
-
-    /**
-     * Update before/after knowledge of all nodes in the array.
-     * Consider the case of A after B, B after C, C after D, and D
-     * with no ordering characteristics.
-     * When the code below executes, the before/after of specific nodes
-     * will be updated so that in the case of the example above we'd
-     * have:
-     *
-     *  A -> after B
-     *  B -> before A, after C
-     *  C -> before B, A after D
-     *  D -> before C, B, A
-     *
-     * So when an attempt is made to sort [A, B, C, D] the end
-     * result is [D, C, B, A]
-     * No extra enhancement of after ID information is necessary outside
-     * of the single node information due to the way the algorithm processes
-     * the array.
-     *
-     * This method also performs cyclic detection.  If, after updating the
-     * before/after information, the before/after information contains a
-     * reference to the document ID we're currently processing, throw an
-     * exception.
-     */
-    private static void enhanceOrderingData(DocumentOrderingWrapper[] wrappers)
-    throws CircularDependencyException {
-
-        for (int i = 0; i < wrappers.length; i++) {
-            DocumentOrderingWrapper w = wrappers[i];
-
-            // process before IDs other than 'others'
-            for (String id : w.getBeforeIds()) {
-                if (OTHERS_KEY.equals(id)) {
-                    continue;
-                }
-                for (int ii = 0; ii < wrappers.length; ii++) {
-                    DocumentOrderingWrapper other = wrappers[ii];
-                    if (id.equals(other.id)) {
-                        String[] afterIds = other.getAfterIds();
-                        if (Arrays.binarySearch(afterIds, w.id) < 0) {
-                            Set<String> newAfterIds = new HashSet<String>(afterIds.length + 1);
-                            newAfterIds.addAll(Arrays.asList(afterIds));
-                            newAfterIds.add(w.id);
-                            other.afterIds = newAfterIds
-                                  .toArray(new String[newAfterIds.size()]);
-                            Arrays.sort(other.afterIds);
-                        }
-
-                        String[] otherBeforeIds = other.getBeforeIds();
-                        if (otherBeforeIds.length > 0) {
-
-                            String[] currentBeforeIds = w.getBeforeIds();
-                            Set<String> newBeforeIds = new HashSet<String>();
-                            newBeforeIds.addAll(Arrays.asList(currentBeforeIds));
-                            for (String bid : otherBeforeIds) {
-                                if (OTHERS_KEY.equals(bid)) {
-                                    continue;
-                                }
-                                newBeforeIds.add(bid);
-                            }
-                            String[] temp = newBeforeIds.toArray(new String[newBeforeIds.size()]);
-                            Arrays.sort(temp);
-                            if (search(temp, w.id)) {
-                                throw new CircularDependencyException();
-                            }
-                            w.beforeIds = temp;
-                        }
-                    }
-                }
-
-            }
-
-            // process after IDs other than 'others'
-            for (String id : w.getAfterIds()) {
-                if (OTHERS_KEY.equals(id)) {
-                    continue;
-                }
-                for (int ii = 0; ii < wrappers.length; ii++) {
-                    DocumentOrderingWrapper other = wrappers[ii];
-                    if (id.equals(other.id)) {
-                        String[] beforeIds = other.getBeforeIds();
-                        if (Arrays.binarySearch(beforeIds, w.id) < 0) {
-                            Set<String> newBeforeIds =
-                                  new HashSet<String>(beforeIds.length + 1);
-                            newBeforeIds.addAll(Arrays.asList(beforeIds));
-                            newBeforeIds.add(w.id);
-                            other.beforeIds = newBeforeIds
-                                  .toArray(new String[newBeforeIds.size()]);
-                            Arrays.sort(other.beforeIds);
-                        }
-                        String[] otherAfterIds = other.getAfterIds();
-                        if (otherAfterIds.length > 0) {
-                            String[] currentAfterIds = w.getAfterIds();
-                            Set<String> newAfterIds = new HashSet<String>();
-                            newAfterIds.addAll(Arrays.asList(currentAfterIds));
-                            for (String bid : otherAfterIds) {
-                                if (OTHERS_KEY.equals(bid)) {
-                                    continue;
-                                }
-                                newAfterIds.add(bid);
-                            }
-                            String[] temp = newAfterIds.toArray(new String[newAfterIds.size()]);
-                            Arrays.sort(temp);
-                            if (search(temp, w.id)) {
-                                throw new CircularDependencyException();
-                            }
-                            w.afterIds = temp;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Simple helper method around <code>Arrays.binarySearch()</code>.
-     * @param ids an array of IDs
-     * @param id the ID to search for
-     * @return true if <code>ids</code> contains <code>id</code>
-     */
-    private static boolean search(String[] ids, String id) {
-
-        return (Arrays.binarySearch(ids, id) >= 0);
-
-    }
-
-
-    /**
-     * <p>
-     * Performs the initialization necessary to allow sorting of
-     * <code>faces-config</code> documents.
-     * </p>
-     */
-    private void init() {
-
-        Element documentElement = documentInfo.getDocument().getDocumentElement();
-        String namespace = documentElement.getNamespaceURI();
-        id = getDocumentName(documentElement);
-        NodeList orderingElements =
-              documentElement.getElementsByTagNameNS(namespace, ORDERING);
-
-        Set<String> beforeIds = null;
-        Set<String> afterIds = null;
-
-        if (orderingElements.getLength() > 0) {
-            for (int i = 0, len = orderingElements.getLength(); i < len; i++) {
-                Node orderingNode = orderingElements.item(i);
-                NodeList children = orderingNode.getChildNodes();
-                for (int j = 0, jlen = children.getLength(); j < jlen; j++) {
-                    Node n = children.item(j);
-                    if (beforeIds == null) {
-                        beforeIds = extractIds(n, BEFORE);
-                    }
-                    if (afterIds == null) {
-                        afterIds = extractIds(n, AFTER);
-                    }
-                }
-            }
-        }
-        this.beforeIds = ((beforeIds != null)
-                          ? beforeIds.toArray(new String[beforeIds.size()])
-                          : new String[0]);
-        this.afterIds = ((afterIds != null)
-                         ? afterIds.toArray(new String[afterIds.size()])
-                         : new String[0]);
-        Arrays.sort(this.beforeIds);
-        Arrays.sort(this.afterIds);
-
-        // ensure any ID defined in the 'before' array isn't present in the
-        // 'after' array and vice versa as a documents can't come before
-        // *and* after another.
-        checkDuplicates(this.beforeIds, this.afterIds);
-        checkDuplicates(this.afterIds, this.beforeIds);
-
-    }
-
-
-    private String getDocumentName(Element documentElement) {
-
-        NodeList children = documentElement.getChildNodes();
-        String documentName = "";
-        if (children != null && children.getLength() > 0) {
-            for (int i = 0, len = children.getLength(); i < len; i++) {
-                Node n = children.item(i);
-                if (NAME.equals(n.getLocalName())) {
-                    documentName = getNodeText(n);
-                    break;
-                }
-            }
-        }
-        return documentName;
-
-    }
-
-
-    /**
-     * Ensure the IDs in <code>source</code> aren't present in <code>searchTarget</code>.
-     */
-    private void checkDuplicates(String[] source, String[] searchTarget) {
-
-        for (String id : source) {
-            if (search(searchTarget, id)) {
-                String msg = MessageFormat.format("Document {0} is specified to come before and after {1}.",
-                                                  documentInfo.getDocument().getDocumentURI(),
-                                                  id);
-                throw new ConfigurationException(msg);
-            }
-        }
-
-    }
-
-
-    /**
-     * Extract and return a <code>Set</code> of IDs contained within the provided
-     * <code>Node</code>.
-     */
-    private Set<String> extractIds(Node n, String nodeName) {
-
-        Set<String> idsList = null;
-        if (nodeName.equals(n.getLocalName())) {
-            idsList = new HashSet<String>();
-            NodeList ids = n.getChildNodes();
-            for (int k = 0, klen = ids.getLength(); k < klen; k++) {
-                Node idNode = ids.item(k);
-                if (NAME.equals(idNode.getLocalName())) {
-                    String id = getNodeText(idNode);
-                    if (id != null) {
-                        idsList.add(id);
-                    }
-                } if (OTHERS.equals(idNode.getLocalName())) {
-                    if (id != null) {
-                        idsList.add(OTHERS_KEY);
-                    }
-                }
-            }
-        }
-        return idsList;
-
-    }
-
-
-    /**
-     * Return the textual content, if any, of the provided <code>Node</code>.
-     */
-    private String getNodeText(Node node) {
-
-        String res = null;
-        if (node != null) {
-            res = node.getTextContent();
-            if (res != null) {
-                res = res.trim();
-            }
-        }
-
-        return ((res != null && res.length() != 0) ? res : null);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    @SuppressWarnings({"ComparatorNotSerializable"})
-    private static final class DocumentOrderingComparator implements Comparator<DocumentOrderingWrapper> {
-
-
-        // --------------------------------------------- Methods from Comparator
-
-
-        public int compare(DocumentOrderingWrapper wrapper1,
-                           DocumentOrderingWrapper wrapper2) {
-
-            String w1Id = wrapper1.id;
-            String w2Id = wrapper2.id;
-            boolean w1IsOrdered = wrapper1.isOrdered();
-            boolean w2IsOrdered = wrapper2.isOrdered();
-            if (w1IsOrdered && !w2IsOrdered) {
-                if (wrapper1.isAfterOrdered() && !wrapper1.isBeforeOthers()) {
-                    return SWAP;
-                }
-            }
-
-            boolean w2IsBeforeW1 = wrapper2.isBefore(w1Id);
-            boolean w1IsAfterW2 = wrapper1.isAfter(w2Id);
-
-            if (w2IsBeforeW1 || w1IsAfterW2) {
-                return SWAP; // move w2 before w1
-            }
-
-            // no explicit ID ordering.  Check others ordering
-            boolean w1IsAfterOthers = wrapper1.isAfterOthers();
-            if (w1IsAfterOthers && !wrapper1.isBefore(w2Id) && !(wrapper1.isAfterOthers() && wrapper2.isAfterOthers())) {
-                return SWAP;
-            }
-            boolean w2IsBeforeOthers = wrapper2.isBeforeOthers();
-            if (w2IsBeforeOthers && !wrapper2.isAfter(w1Id) && !(wrapper1.isBeforeOthers() && wrapper2.isBeforeOthers())) {
-                return SWAP;
-            }
-
-            return DO_NOT_SWAP;
-
-        }
-
-    } // END FacesConfigComparator
-
-    
-    @SuppressWarnings({"serial"})
-    private static final class CircularDependencyException extends Exception {
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public CircularDependencyException() {
-
-            super();
-
-        }
-
-
-        public CircularDependencyException(String message) {
-
-            super(message);
-
-        }
-
-
-        public CircularDependencyException(String message, Throwable cause) {
-
-            super(message, cause);
-
-        }
-
-
-        public CircularDependencyException(Throwable cause) {
-
-            super(cause);
-
-        }
-
-    } // END CircularDependencyException
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/FacesConfigInfo.java b/jsf-ri/src/main/java/com/sun/faces/config/FacesConfigInfo.java
deleted file mode 100644
index 1c17d4c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/FacesConfigInfo.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-
-import java.util.List;
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <p>
- * Wrapper around the <code>/WEB-INF/faces-config.xml</code>, if present,
- * to expose information relevant to the intialization of the runtime.
- * </p>
-*/
-public class FacesConfigInfo {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    private static final String ABSOLUTE_ORDERING = "absolute-ordering";
-    private static final String ORDERING = "ordering";
-    private static final String NAME = "name";
-    private static final String OTHERS = "others";
-
-    private double version = 2.0;
-    private boolean isWebInfFacesConfig;
-    private boolean metadataComplete;
-    private List<String> absoluteOrdering;
-
-
-    // -------------------------------------------------------- Constructors
-
-
-    /**
-     * Creates a new <code>WebInfFacesConfig</code> document based
-     * on the provided <code>Document</code>.  If the <code>Document</code>
-     * does not represent the <code>WEB-INF/faces-config.xml</code> the
-     * {@link #isWebInfFacesConfig()} method will return <code>false</code>
-     *
-     * @param documentInfo DocumentInfo representing the <code>/WEB-INF/faces-config.xml</code>
-     */
-    public FacesConfigInfo(DocumentInfo documentInfo) {
-
-        Document document = documentInfo.getDocument();
-        isWebInfFacesConfig = isWebinfFacesConfig(document);
-        version = getVersion(document);
-        if (isWebInfFacesConfig) {
-            if (isVersionGreaterOrEqual(2.0)) {
-                extractOrdering(document);
-            }
-        }
-        metadataComplete = isMetadataComplete(document);
-
-    }
-
-
-    // ------------------------------------------------------ Public Methods
-
-
-    /**
-     * @param version version to check
-     * @return <code>true</code> if <code>version</code> is greater or
-     *  equal to the version of the <code>/WEB-INF/faces-config.xml</code>
-     */
-    public boolean isVersionGreaterOrEqual(double version) {
-
-        return (this.version >= version);
-
-    }
-
-
-    /**
-     * @return <code>true</code> if the <code>Document</code> provided at
-     *  construction time represents the <code>/WEB-INF/faces-config.xml</code>.
-     */
-    public boolean isWebInfFacesConfig() {
-
-        return isWebInfFacesConfig;
-
-    }
-
-
-    /**
-     * @return <code>true</code> if the <code>Document</code> provided at
-     *  construction time represents the <code>/WEB-INF/faces-config.xml and is
-     *  metadata complete.
-     */
-    public boolean isMetadataComplete() {
-
-        return metadataComplete;
-
-    }
-
-
-    /**
-     * @return a <code>List</code> of document names that in the order that
-     *  they should be processed.  The presense of the keyword "others" indicates
-     *  all documents not explicitly referenced by name in the list should be
-     *  places in the final parsing order at same location.  If there are multiple
-     *  documents that aren't named and the others element is present, the
-     *  order that these documents are inserted into the final list is unspecified
-     *  at this time.
-     */
-    public List<String> getAbsoluteOrdering()  {
-
-        return ((absoluteOrdering != null)
-                ? Collections.unmodifiableList(absoluteOrdering)
-                : null);
-
-    }
-
-
-    // ----------------------------------------------------- Private Methods
-
-
-    /**
-     * @param document document representing <code>WEB-INF/faces-config.xml</code>
-     * @return return the value of the version attribute of the provided document.
-     *  If no version attribute is specified, assume 1.1.
-     */
-    private double getVersion(Document document) {
-
-        String version = document.getDocumentElement()
-              .getAttributeNS(document.getNamespaceURI(), "version");
-        if (version != null && version.length() > 0) {
-            return Double.parseDouble(version);
-        } else {
-            return 1.1d;
-        }
-
-    }
-
-
-    /**
-     * @param document the <code>Document</code> to inspect
-     * @return <code>true</code> if the document represents the
-     *         <code>/WEB-INF/faces-config.xml</code>
-     */
-    private boolean isWebinfFacesConfig(Document document) {
-
-        String marker = document.getDocumentElement().getAttribute(ConfigManager.WEB_INF_MARKER);
-        return (marker != null && marker.length() > 0);
-
-    }
-
-
-    private boolean isMetadataComplete(Document document) {
-
-        if (isVersionGreaterOrEqual(2.0)) {
-            String metadataComplete = document.getDocumentElement()
-                  .getAttributeNS(document.getNamespaceURI(),
-                                  "metadata-complete");
-            return ((metadataComplete != null)
-                    ? Boolean.valueOf(metadataComplete)
-                    : false);
-        } else {
-            // not a 2.0 application, so annotation processing will not occur
-            return true;
-        }
-
-    }
-
-
-    private void extractOrdering(Document document) {
-
-        Element documentElement = document.getDocumentElement();
-        String namespace = documentElement.getNamespaceURI();
-
-        NodeList orderingElements =
-              documentElement.getElementsByTagNameNS(namespace, ORDERING);
-        if (orderingElements.getLength() > 0) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.warning("jsf.configuration.web.faces.config.contains.ordering");
-            }
-        }
-        
-        NodeList absoluteOrderingElements =
-              documentElement.getElementsByTagNameNS(namespace, ABSOLUTE_ORDERING);
-
-        if (absoluteOrderingElements.getLength() > 0) {
-            // according to the schema there, should be only one
-            if (absoluteOrderingElements.getLength() > 1) {
-                throw new IllegalStateException("Multiple 'absolute-ordering' elements found within WEB-INF/faces-config.xml");
-            }
-            Node absoluteOrderingNode = absoluteOrderingElements.item(0);
-            NodeList children = absoluteOrderingNode.getChildNodes();
-            absoluteOrdering = new ArrayList<String>(children.getLength());
-            for (int i = 0, len = children.getLength(); i < len; i++) {
-                Node n = children.item(i);
-                if (NAME.equals(n.getLocalName())) {
-                    absoluteOrdering.add(getNodeText(n));
-                } else if (OTHERS.equals(n.getLocalName())) {
-                    if (absoluteOrdering.contains("others")) {
-                        throw new IllegalStateException("'absolute-ordering' element defined with multiple 'others' child elements found within WEB-INF/faces-config.xml");
-                    }
-                    absoluteOrdering.add("others");
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Return the textual content, if any, of the provided <code>Node</code>.
-     */
-    private String getNodeText(Node node) {
-
-        String res = null;
-        if (node != null) {
-            res = node.getTextContent();
-            if (res != null) {
-                res = res.trim();
-            }
-        }
-
-        return ((res != null && res.length() != 0) ? res : null);
-
-    }
-
-} // END FacesConfigInfo
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/FacesInitializer.java b/jsf-ri/src/main/java/com/sun/faces/config/FacesInitializer.java
deleted file mode 100644
index 941aa31..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/FacesInitializer.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-
-import com.sun.faces.RIConstants;
-
-import javax.faces.application.ResourceDependencies;
-import javax.faces.application.ResourceDependency;
-import javax.faces.bean.ManagedBean;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UIComponent;
-import javax.faces.convert.FacesConverter;
-import javax.faces.convert.Converter;
-import javax.faces.event.ListenerFor;
-import javax.faces.event.ListenersFor;
-import javax.faces.render.FacesBehaviorRenderer;
-import javax.faces.render.Renderer;
-import javax.faces.validator.FacesValidator;
-import javax.faces.validator.Validator;
-import javax.faces.webapp.FacesServlet;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRegistration;
-import javax.servlet.annotation.HandlesTypes;
-import java.util.Set;
-import java.util.Map;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.net.MalformedURLException;
-
-/**
- * Adds mappings <em>/faces</em>, <em>*.jsf</em>, and <em>*.faces</em> for the
- * FacesServlet (if it hasn't already been mapped) if the following conditions
- * are met:
- *
- * <ul>
- *    <li>
- *       The <code>Set</code> of classes passed to this initializer is not
- *       empty, or
- *    </li>
- *    <li>
- *       /WEB-INF/faces-config.xml exists.
- *    </li>
- * </ul>
- */
- at SuppressWarnings({"UnusedDeclaration"})
- at HandlesTypes({
-      ManagedBean.class,
-      FacesComponent.class,
-      FacesValidator.class,
-      FacesConverter.class,
-      FacesBehaviorRenderer.class,
-      ResourceDependency.class,
-      ResourceDependencies.class,
-      ListenerFor.class,
-      ListenersFor.class,
-      UIComponent.class,
-      Validator.class,
-      Converter.class,
-      Renderer.class
-
-})
-public class FacesInitializer implements ServletContainerInitializer {
-
-    // NOTE: Loggins should not be used with this class.
-
-    private static final String FACES_SERVLET_CLASS = FacesServlet.class.getName();
-
-    // -------------------------------- Methods from ServletContainerInitializer
-
-
-    public void onStartup(Set<Class<?>> classes, ServletContext servletContext)
-          throws ServletException {
-
-        if (shouldCheckMappings(classes, servletContext)) {
-
-            Map<String,? extends ServletRegistration> existing = servletContext.getServletRegistrations();
-            for (ServletRegistration registration : existing.values()) {
-                if (FACES_SERVLET_CLASS.equals(registration.getClassName())) {
-                    // FacesServlet has already been defined, so we're
-                    // not going to add additional mappings;
-                    return;
-                }
-            }
-            ServletRegistration reg =
-                  servletContext.addServlet("FacesServlet",
-                                            "javax.faces.webapp.FacesServlet");
-            reg.addMapping("/faces/*", "*.jsf", "*.faces");
-            servletContext.setAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED, Boolean.TRUE);
-
-            // The following line is temporary until we can solve an ordering
-            // issue in V3.  Right now the JSP container looks for a mapping
-            // of the FacesServlet in the web.xml.  If it's not present, then
-            // it assumes that the application isn't a faces application.  In this
-            // case the JSP container will not register the ConfigureListener
-            // definition from our TLD nor will it parse cause or JSP TLDs to
-            // be parsed.
-            servletContext.addListener(com.sun.faces.config.ConfigureListener.class);
-
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private boolean shouldCheckMappings(Set<Class<?>> classes,
-                                        ServletContext context) {
-
-        if (classes != null && !classes.isEmpty()) {
-            return true;
-        }
-
-        // no JSF specific parameters found, check for a WEB-INF/faces-config.xml
-        try {
-            return (context.getResource("/WEB-INF/faces-config.xml") != null);
-        } catch (MalformedURLException mue) {
-
-        }
-        
-        return false;
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/InitFacesContext.java b/jsf-ri/src/main/java/com/sun/faces/config/InitFacesContext.java
deleted file mode 100644
index 4ac5266..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/InitFacesContext.java
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-import javax.faces.component.UIViewRoot;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.FacesMessage;
-import javax.faces.application.ProjectStage;
-import javax.faces.FactoryFinder;
-import javax.faces.render.RenderKit;
-import javax.servlet.ServletContext;
-import javax.el.ELContext;
-import javax.el.ELResolver;
-import javax.el.FunctionMapper;
-import javax.el.VariableMapper;
-import java.util.*;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.MalformedURLException;
-
-import com.sun.faces.context.ApplicationMap;
-import com.sun.faces.context.InitParameterMap;
-
-/**
- * A special, minimal implementation of FacesContext used at application initialization time.
- * The ExternalContext returned by this FacesContext only exposes the ApplicationMap.
- */
-class InitFacesContext extends FacesContext {
-
-    private ExternalContext ec;
-    private UIViewRoot viewRoot;
-    private FacesContext orig;
-    private Map<Object,Object> attributes;
-    private ELContext elContext = new ELContext() {
-        public ELResolver getELResolver() {
-            return null;
-        }
-
-        public FunctionMapper getFunctionMapper() {
-            return null;
-        }
-
-        public VariableMapper getVariableMapper() {
-            return null;
-        }
-    };
-
-    public InitFacesContext(ServletContext sc) {
-        ec = new ServletContextAdapter(sc);
-        orig = FacesContext.getCurrentInstance();
-        setCurrentInstance(this);
-    }
-
-    @Override
-    public Map<Object, Object> getAttributes() {
-        if (attributes == null) {
-            attributes = new HashMap<Object,Object>();
-        }
-        return attributes;
-    }
-
-    public Application getApplication() {
-        ApplicationFactory factory = (ApplicationFactory)
-                FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        return factory.getApplication();
-    }
-
-    public Iterator<String> getClientIdsWithMessages() {
-        List<String> list = Collections.emptyList();
-        return list.iterator();
-    }
-
-    public ExternalContext getExternalContext() {
-        return ec;
-    }
-
-    public FacesMessage.Severity getMaximumSeverity() {
-        return FacesMessage.SEVERITY_INFO;
-    }
-
-    public Iterator<FacesMessage> getMessages() {
-        List<FacesMessage> list = Collections.emptyList();
-        return list.iterator();
-    }
-
-    public Iterator<FacesMessage> getMessages(String clientId) {
-        return getMessages();
-    }
-
-    public List<FacesMessage> getMessageList() {
-	return Collections.EMPTY_LIST;
-    }
-
-
-    public List<FacesMessage> getMessageList(String clientId) {
-	return Collections.EMPTY_LIST;
-    }
-
-
-    @Override
-    public boolean isProjectStage(ProjectStage stage) {
-        if (stage == null) {
-            throw new NullPointerException();
-        }
-        return stage.equals(getApplication().getProjectStage());
-    }
-
-    public RenderKit getRenderKit() {
-        return null;
-    }
-
-    public boolean getRenderResponse() {
-        return true;
-    }
-
-    public boolean getResponseComplete() {
-        return true;
-    }
-
-    @Override
-    public boolean isValidationFailed() {
-        return false;
-    }
-
-    public ResponseStream getResponseStream() {
-        return null;
-    }
-
-    public void setResponseStream(ResponseStream responseStream) { }
-
-    public ResponseWriter getResponseWriter() {
-        return null;
-    }
-
-    public void setResponseWriter(ResponseWriter responseWriter) { }
-
-    public UIViewRoot getViewRoot() {
-        if (viewRoot == null) {
-            viewRoot = new UIViewRoot();
-            viewRoot.setLocale(Locale.getDefault());
-        }
-        return viewRoot;
-    }
-
-    public void setViewRoot(UIViewRoot root) { }
-
-    public void addMessage(String clientId, FacesMessage message) { }
-
-    public void release() {
-        setCurrentInstance(orig);
-        if (null != attributes) {
-            attributes.clear();
-            attributes = null;
-        }
-    }
-
-    public void renderResponse() { }
-
-    public void responseComplete() { }
-
-    @Override
-    public void validationFailed() { }
-
-    @Override
-    public ELContext getELContext() {
-       return elContext;
-    }
-
-    public void setELContext(ELContext elContext) {
-        this.elContext = elContext;        
-    }
-
-    private static class ServletContextAdapter extends ExternalContext {
-
-        private ServletContext servletContext = null;
-        private ApplicationMap applicationMap = null;
-        private InitParameterMap initMap = null;
-
-        public ServletContextAdapter(ServletContext sc) {
-            this.servletContext = sc;
-        }
-
-        public void dispatch(String path) throws IOException {
-        }
-
-        public String encodeActionURL(String url) {
-            return null;
-        }
-
-        public String encodeNamespace(String name) {
-            return null;
-        }
-
-
-        public String encodeResourceURL(String url) {
-            return null;
-        }
-
-        public Map<String, Object> getApplicationMap() {
-            if (applicationMap == null) {
-                applicationMap =
-                        new ApplicationMap(servletContext);
-            }
-            return applicationMap;
-        }
-
-        public String getAuthType() {
-            return null;
-        }
-
-        @Override
-        public String getMimeType(String file) {
-            return servletContext.getMimeType(file);
-        }
-
-        public Object getContext() {
-            return servletContext;
-        }
-
-	public String getContextName() { 
-	    return servletContext.getServletContextName();
-	}
-
-	
-
-        public String getInitParameter(String name) {
-            return servletContext.getInitParameter(name);
-        }
-
-        public Map<String,String> getInitParameterMap() {
-            if (initMap == null) {
-                initMap = new InitParameterMap(servletContext);
-            }
-            return initMap;
-        }
-
-        public String getRemoteUser() {
-            return null;
-        }
-
-
-        public Object getRequest() {
-            return null;
-        }
-
-        @Override
-        public void setRequest(Object request) {
-        }
-
-        public String getRequestContextPath() {
-            return null;
-        }
-
-        public Map<String,Object> getRequestCookieMap() {
-            return Collections.unmodifiableMap(Collections.<String,Object>emptyMap());
-        }
-
-        public Map<String,String> getRequestHeaderMap() {
-            return Collections.unmodifiableMap(Collections.<String,String>emptyMap());
-        }
-
-
-        public Map<String,String[]> getRequestHeaderValuesMap() {
-            return Collections.unmodifiableMap(Collections.<String,String[]>emptyMap());
-        }
-
-
-        public Locale getRequestLocale() {
-            return null;
-        }
-
-        public Iterator<Locale> getRequestLocales() {
-            return null;
-        }
-
-
-        public Map<String,Object> getRequestMap() {
-            return Collections.emptyMap();
-        }
-
-
-        public Map<String,String> getRequestParameterMap() {
-            return Collections.unmodifiableMap(Collections.<String,String>emptyMap());
-        }
-
-
-        public Iterator<String> getRequestParameterNames() {
-            return Collections.<String>emptyList().iterator();
-        }
-
-
-        public Map<String,String[]> getRequestParameterValuesMap() {
-            return Collections.unmodifiableMap(Collections.<String,String[]>emptyMap());
-        }
-
-
-        public String getRequestPathInfo() {
-            return null;
-        }
-
-
-        public String getRequestServletPath() {
-            return null;
-        }
-
-        @Override
-        public String getRequestContentType() {
-            return null;
-        }
-
-        @Override
-        public String getResponseContentType() {
-            return null;
-        }
-
-	public int getRequestContentLength() {
-	    return -1;
-	}
-
-        public URL getResource(String path) throws MalformedURLException {
-            return servletContext.getResource(path);
-        }
-
-
-        public InputStream getResourceAsStream(String path) {
-            return servletContext.getResourceAsStream(path);
-        }
-
-        public Set<String> getResourcePaths(String path) {
-            //noinspection unchecked
-            return servletContext.getResourcePaths(path);
-        }
-
-        public Object getResponse() {
-            return null;
-        }
-
-        @Override
-        public void setResponse(Object response) {
-        }
-
-        public Object getSession(boolean create) {
-            return null;
-        }
-
-        public Map<String,Object> getSessionMap() {
-            return Collections.emptyMap();
-        }
-
-        public java.security.Principal getUserPrincipal() {
-            return null;
-        }
-
-        public boolean isUserInRole(String role) {
-            return false;
-        }
-
-        public void log(String message) {
-            servletContext.log(message);
-        }
-
-        public void log(String message, Throwable exception) {
-            servletContext.log(message, exception);
-        }
-
-        public void redirect(String url) throws IOException {
-        }
-
-        @Override
-        public String getRequestCharacterEncoding() {
-            return null;
-        }
-
-        @Override
-        public void setRequestCharacterEncoding(String requestCharacterEncoding) throws UnsupportedEncodingException {
-
-        }
-
-        @Override
-        public String getResponseCharacterEncoding() {
-            return null;
-        }
-
-        @Override
-        public void setResponseCharacterEncoding(String responseCharacterEncoding) {
-        }
-
-        @Override
-        public void setResponseHeader(String name, String value) {
-        }
-
-        @Override
-        public void addResponseHeader(String name, String value) {
-        }
-
-        @Override
-        public String encodePartialActionURL(String url) {
-            return null; 
-        }
-
-
-    } // END ServletContextAdapter
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/Verifier.java b/jsf-ri/src/main/java/com/sun/faces/config/Verifier.java
deleted file mode 100644
index da11707..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/Verifier.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <p>
- * This class backs the <code>com.sun.faces.verifyObjects</code>
- * feature which provides basic validation of Components,
- * Converters, and Validators.
- * <p>
- */
-public class Verifier {
-
-    /**
-     * Thread local to share the <code>Verifier</code>.
-     */
-    private static final ThreadLocal<Verifier> VERIFIER =
-            new ThreadLocal<Verifier>();
-
-    /**
-     * Represent the current Faces object types we validate.
-     */
-    public enum ObjectType {
-        COMPONENT,
-        CONVERTER,
-        VALIDATOR,       
-        BEHAVIOR,       
-    }
-
-
-    /**
-     * Container for any messages that may be queued.
-     */
-    private List<String> messages;
-
-
-    // ------------------------------------------------------- Constructors
-
-
-    /**
-     * Construct a new <code>Verifier</code> instance.
-     */
-    Verifier() {
-
-        messages = new ArrayList<String>(4);
-        
-    }
-
-
-    // ------------------------------------------------- Public Methods
-
-
-    /**
-     * @return a <code>Verifier</code> for the current web application
-     * <em>if</em> <code>com.sun.faces.verifyObjects</code> is enabled
-     */
-    public static Verifier getCurrentInstance() {
-
-        return VERIFIER.get();
-
-    }
-
-
-    /**
-     * Set the <code>Verifier</code> for this thread (typically the
-     * same thread that is used to bootstrap the application).
-     * @param verifier the <code>Verifier</code> for this web application
-     */
-    public static void setCurrentInstance(Verifier verifier) {
-
-        if (verifier == null) {
-            VERIFIER.remove();
-        } else {
-            VERIFIER.set(verifier);
-        }
-
-    }
-
-
-    /**
-     * @return <code>true</code> if no messages were queued by the
-     *  validation process
-     */
-    public boolean isApplicationValid() {
-
-        return (messages.isEmpty());
-
-    }
-
-
-    /**
-     * @return a <code>List</code> of all failures found
-     */
-    public List<String> getMessages() {
-
-        return messages;
-
-    }
-
-
-    /**
-     * Validate the specified faces object by:
-     * <ul>
-     *   <li>
-     *     Ensure the class can be found and loaded
-     *   </li>
-     *   <li>
-     *     Ensure the object has a public, no-argument constructor
-     *   </li>
-     *   </li>
-     *    Ensure the object is an instance of the class represented
-     *    by <code>assignableTo</code>
-     * </ul>
-     * If any of these tests fail, queue a message to be displayed at a
-     * later point in time.
-     * @param type The type of Faces object we're validating
-     * @param className the class name of the Faces object we're validating
-     * @param assignableTo the type we expect <code>className</code> to
-     *  either implement or extend
-     */
-    public void validateObject(ObjectType type, String className, Class<?> assignableTo) {
-
-        // temporary hack until we can fix the stylesheets that create
-        // the runtime xml
-        if ("javax.faces.component.html.HtmlHead".equals(className)
-              || "javax.faces.component.html.HtmlBody".equals(className)) {
-            return;
-        }
-        Class<?> c = null;
-        try {
-            c = Util.loadClass(className, this);
-        } catch (ClassNotFoundException cnfe) {
-            messages.add(MessageUtils.getExceptionMessageString(
-                             MessageUtils.VERIFIER_CLASS_NOT_FOUND_ID,
-                             type,
-                             className));
-        } catch (NoClassDefFoundError ncdfe) {
-            messages.add(MessageUtils.getExceptionMessageString(
-                             MessageUtils.VERIFIER_CLASS_MISSING_DEP_ID,
-                             type,
-                             className,
-                             ncdfe.getMessage()));
-        }
-        if (c != null) {
-            try {
-                Constructor ctor = c.getConstructor(RIConstants.EMPTY_CLASS_ARGS);
-                if (!Modifier.isPublic(ctor.getModifiers())) {
-                     messages.add(MessageUtils.getExceptionMessageString(
-                                      MessageUtils.VERIFIER_CTOR_NOT_PUBLIC_ID,
-                                      type,
-                                      className));
-                }
-            } catch (NoSuchMethodException nsme) {
-                messages.add(MessageUtils.getExceptionMessageString(
-                                 MessageUtils.VERIFIER_NO_DEF_CTOR_ID,
-                                 type,
-                                 className));
-            }
-            if (!assignableTo.isAssignableFrom(c)) {
-                messages.add(MessageUtils.getExceptionMessageString(
-                                 MessageUtils.VERIFIER_WRONG_TYPE_ID,
-                                 type,
-                                 className));
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/WebConfiguration.java b/jsf-ri/src/main/java/com/sun/faces/config/WebConfiguration.java
deleted file mode 100644
index c83d32a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/WebConfiguration.java
+++ /dev/null
@@ -1,1391 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import java.util.ArrayList;
-import java.util.EnumMap;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.ViewHandler;
-import javax.faces.application.StateManager;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.servlet.ServletContext;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import java.util.HashMap;
-import javax.faces.component.UIInput;
-import javax.faces.validator.BeanValidator;
-import javax.faces.view.facelets.ResourceResolver;
-
-
-/** Class Documentation */
-public class WebConfiguration {
-
-
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    // A Simple regular expression of allowable boolean values
-    private static final Pattern ALLOWABLE_BOOLEANS =
-          Pattern.compile("true|false");
-
-    // Key under which we store our WebConfiguration instance.
-    private static final String WEB_CONFIG_KEY =
-          "com.sun.faces.config.WebConfiguration";
-
-    // Logging level.  Defaults to FINE
-    private Level loggingLevel = Level.FINE;
-
-    private Map<BooleanWebContextInitParameter, Boolean> booleanContextParameters =
-          new EnumMap<BooleanWebContextInitParameter, Boolean>(BooleanWebContextInitParameter.class);
-
-    private Map<WebContextInitParameter, String> contextParameters =
-          new EnumMap<WebContextInitParameter, String>(WebContextInitParameter.class);
-
-    private Map<WebEnvironmentEntry, String> envEntries =
-          new EnumMap<WebEnvironmentEntry, String>(WebEnvironmentEntry.class);
-
-    private Map<WebContextInitParameter, String []> cachedListParams;
-
-    private Set<String> setParams = new HashSet<String>();
-
-    private ServletContext servletContext;
-
-    private ArrayList<DeferredLoggingAction> deferredLoggingActions;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private WebConfiguration(ServletContext servletContext) {
-
-        this.servletContext = servletContext;
-
-        String contextName = getServletContextName();
-
-        initSetList(servletContext);
-        processBooleanParameters(servletContext, contextName);
-        processInitParameters(servletContext, contextName);
-        if (canProcessJndiEntries()) {
-            processJndiEntries(contextName);
-        }
-        
-        // build the cache of list type params
-        cachedListParams = new HashMap<WebContextInitParameter, String []>(3);
-        getOptionValue(WebContextInitParameter.ResourceExcludes, " ");
-        getOptionValue(WebContextInitParameter.DefaultSuffix, " ");
-        getOptionValue(WebContextInitParameter.FaceletsViewMappings, ";");
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * Return the WebConfiguration instance for this application passing
-     * the result of FacesContext.getCurrentInstance().getExternalContext()
-     * to {@link #getInstance(javax.faces.context.ExternalContext)}.
-     * @return the WebConfiguration for this application or <code>null</code>
-     *  if no FacesContext is available.
-     */
-    public static WebConfiguration getInstance() {
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        return getInstance(facesContext.getExternalContext());
-
-    }
-
-
-    /**
-     * Return the WebConfiguration instance for this application.
-     * @param extContext the ExternalContext for this request
-     * @return the WebConfiguration for this application
-     */
-    public static WebConfiguration getInstance(ExternalContext extContext) {
-
-        WebConfiguration config = (WebConfiguration) extContext.getApplicationMap()
-              .get(WEB_CONFIG_KEY);
-        if (config == null) {
-            return getInstance((ServletContext) extContext.getContext());
-        } else {
-            return config;
-        }
-
-    }
-
-
-    /**
-     * Return the WebConfiguration instance for this application.
-     * @param servletContext the ServletContext
-     * @return the WebConfiguration for this application or <code>null</code>
-     *  if no WebConfiguration could be located
-     */
-    public static WebConfiguration getInstance(ServletContext servletContext) {
-
-        WebConfiguration webConfig = (WebConfiguration)
-              servletContext.getAttribute(WEB_CONFIG_KEY);
-
-        if (webConfig == null) {
-            webConfig = new WebConfiguration(servletContext);
-            servletContext.setAttribute(WEB_CONFIG_KEY, webConfig);
-        }
-        return webConfig;
-
-    }
-
-
-    /**
-     * @return The <code>ServletContext</code> originally used to construct
-     * this WebConfiguration instance
-     */
-    public ServletContext getServletContext() {
-
-        return servletContext;
-
-    }
-
-
-    /**
-     * Obtain the value of the specified boolean parameter
-     * @param param the parameter of interest
-     * @return the value of the specified boolean parameter
-     */
-    public boolean isOptionEnabled(BooleanWebContextInitParameter param) {
-
-        if (booleanContextParameters.get(param) != null) {
-            return booleanContextParameters.get(param);
-        } else {
-            return param.getDefaultValue();
-        }
-
-    }
-
-
-    /**
-     * Obtain the value of the specified parameter
-     * @param param the parameter of interest
-     * @return the value of the specified parameter
-     */
-    public String getOptionValue(WebContextInitParameter param) {
-        String result = contextParameters.get(param);
-        
-        if (null == result) {
-            WebContextInitParameter alternate = param.getAlternate();
-            if (null != alternate) {
-                result = contextParameters.get(alternate);
-            }
-        }
-
-        return result;
-
-    }
-    
-    public String[] getOptionValue(WebContextInitParameter param, String sep) {
-        String [] result;
-        
-        assert(null != cachedListParams);
-        if (null == (result = cachedListParams.get(param))) {
-            String value = getOptionValue(param);
-            if (null == value) {
-                result = new String[0];
-            } else {
-                result = Util.split(value, sep);
-            }
-            cachedListParams.put(param, result);
-        }
-        
-        return result;
-    }
-
-
-    /**
-     * Obtain the value of the specified env-entry
-     * @param entry the env-entry of interest
-     * @return the value of the specified env-entry
-     */
-    public String getEnvironmentEntry(WebEnvironmentEntry entry) {
-
-        return envEntries.get(entry);
-
-    }
-
-
-    /**
-     * @param param the init parameter of interest
-     * @return <code>true</code> if the parameter was explicitly set,
-     *  otherwise, <code>false</code>
-     */
-    public boolean isSet(WebContextInitParameter param) {
-
-        return isSet(param.getQualifiedName());
-
-    }
-
-
-    /**
-     * @param param the init parameter of interest
-     * @return <code>true</code> if the parameter was explicitly set,
-     *  otherwise, <code>false</code>
-     */
-    public boolean isSet(BooleanWebContextInitParameter param) {
-
-        return isSet(param.getQualifiedName());
-
-    }
-
-
-    /**
-     * @return the name of this application
-     */
-    public String getServletContextName() {
-
-        if (servletContext.getMajorVersion() == 2
-            && servletContext.getMinorVersion() <= 4) {
-            return servletContext.getServletContextName();
-        } else {
-            return servletContext.getContextPath();
-        }
-
-    }
-
-
-    public void overrideContextInitParameter(BooleanWebContextInitParameter param, boolean value) {
-
-        if (param == null) {
-            return;
-        }
-        boolean oldVal = booleanContextParameters.put(param, value);
-        if (LOGGER.isLoggable(Level.FINE) && oldVal != value) {
-            LOGGER.log(Level.FINE,
-                       "Overriding init parameter {0}.  Changing from {1} to {2}.",
-                       new Object[] { param.getQualifiedName(), oldVal, value});
-        }
-
-    }
-
-
-    public void overrideContextInitParameter(WebContextInitParameter param, String value) {
-
-        if (param == null || value == null || value.length() == 0) {
-            return;
-        }
-        value = value.trim();
-        String oldVal = contextParameters.put(param, value);
-        cachedListParams.remove(param);
-        if (oldVal != null) {
-            if (LOGGER.isLoggable(Level.FINE) && !(oldVal.equals(value))) {
-                LOGGER.log(Level.FINE,
-                           "Overriding init parameter {0}.  Changing from {1} to {2}.",
-                           new Object[]{param.getQualifiedName(),
-                                        oldVal,
-                                        value});
-            }
-        }
-
-
-    }
-
-
-    public void doLoggingActions() {
-
-        if (deferredLoggingActions != null) {
-            for (DeferredLoggingAction loggingAction : deferredLoggingActions) {
-                loggingAction.log();
-            }
-        }
-
-    }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-
-    static void clear(ServletContext servletContext) {
-
-        servletContext.removeAttribute(WEB_CONFIG_KEY);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Is the configured value valid against the default boolean pattern.</p>
-     * @param param the boolean parameter
-     * @param value the configured value
-     * @return <code>true</code> if the value is valid,
-     *  otherwise <code>false</code>
-     */
-    private boolean isValueValid(BooleanWebContextInitParameter param,
-                                 String value) {
-
-        if (!ALLOWABLE_BOOLEANS.matcher(value).matches()) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                           "jsf.config.webconfig.boolconfig.invalidvalue",
-                           new Object[]{
-                                 value,
-                                 param.getQualifiedName(),
-                                 "true|false"
-                           });
-            }
-            return false;
-        }
-
-        return true;
-
-    }
-
-
-    /**
-     * <p>Process all boolean context initialization parameters.</p>
-     * @param servletContext the ServletContext of interest
-     * @param contextName the context name
-     */
-    private void processBooleanParameters(ServletContext servletContext,
-                                          String contextName) {
-
-        // process boolean contxt parameters
-        for (BooleanWebContextInitParameter param : BooleanWebContextInitParameter
-              .values()) {
-            String strValue =
-                  servletContext.getInitParameter(param.getQualifiedName());
-            boolean value;
-
-            if (strValue != null && strValue.length() > 0 && param.isDeprecated()) {
-                BooleanWebContextInitParameter alternate = param.getAlternate();
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    if (alternate != null) {
-                        queueLoggingAction(new DeferredBooleanParameterLoggingAction(
-                              param,
-                              Level.WARNING,
-                              "jsf.config.webconfig.param.deprecated",
-                              new Object[]{
-                                    contextName,
-                                    param.getQualifiedName(),
-                                    alternate.getQualifiedName()}));
-
-                    } else {
-                        queueLoggingAction(new DeferredBooleanParameterLoggingAction(
-                              param,
-                              Level.WARNING,
-                              "jsf.config.webconfig.param.deprecated.no_replacement",
-                              new Object[]{
-                                    contextName,
-                                    param.getQualifiedName()}));
-
-                    }
-                }
-
-                if (alternate != null) {
-                    if (isValueValid(param, strValue)) {
-                        value = Boolean.valueOf(strValue);
-                    } else {
-                        value = param.getDefaultValue();
-                    }
-
-                    if (LOGGER.isLoggable(Level.INFO) && alternate != null) {
-                        queueLoggingAction(new DeferredBooleanParameterLoggingAction(
-                              param,
-                              Level.INFO,
-                              ((value)
-                               ? "jsf.config.webconfig.configinfo.reset.enabled"
-                               : "jsf.config.webconfig.configinfo.reset.disabled"),
-                              new Object[]{
-                                    contextName,
-                                    alternate.getQualifiedName()}));
-                    }
-
-                    booleanContextParameters.put(alternate, value);
-                }
-                continue;
-            }
-
-            if (!param.isDeprecated()) {
-                if (strValue == null) {
-                    value = param.getDefaultValue();
-                } else {
-                    if (isValueValid(param, strValue)) {
-                        value = Boolean.valueOf(strValue);
-                    } else {
-                        value = param.getDefaultValue();
-                    }
-                }
-
-                // first param processed should be
-                // com.sun.faces.displayConfiguration
-                if (BooleanWebContextInitParameter.DisplayConfiguration.equals(param) && value) {
-                    loggingLevel = Level.INFO;
-                }
-
-                if (LOGGER.isLoggable(loggingLevel)) {
-                    LOGGER.log(loggingLevel,
-                               ((value)
-                                ? "jsf.config.webconfig.boolconfiginfo.enabled"
-                                : "jsf.config.webconfig.boolconfiginfo.disabled"),
-                               new Object[]{contextName,
-                                            param.getQualifiedName()});
-                }
-
-                booleanContextParameters.put(param, value);
-            }
-
-        }
-
-    }
-
-
-    /**
-     * Adds all com.sun.faces init parameter names to a list.  This allows
-     * callers to determine if a parameter was explicitly set.
-     * @param servletContext the ServletContext of interest
-     */
-    private void initSetList(ServletContext servletContext) {
-
-        for (Enumeration e = servletContext.getInitParameterNames();
-              e.hasMoreElements(); ) {
-            String name = e.nextElement().toString();
-            if (name.startsWith("com.sun.faces") ||
-                  name.startsWith("javax.faces")) {
-                setParams.add(name);
-            }
-        }
-
-    }
-
-
-    /**
-     * @param name the param name
-     * @return <code>true</code> if the name was explicitly specified
-     */
-    private boolean isSet(String name) {
-
-        return setParams.contains(name);
-
-    }
-
-
-    /**
-     * <p>Process all non-boolean context initialization parameters.</p>
-     * @param servletContext the ServletContext of interest
-     * @param contextName the context name
-     */
-    private void processInitParameters(ServletContext servletContext,
-                                       String contextName) {
-
-        for (WebContextInitParameter param : WebContextInitParameter.values()) {
-            String value =
-                  servletContext.getInitParameter(param.getQualifiedName());
-
-            if (value != null && value.length() > 0 && param.isDeprecated()) {
-                WebContextInitParameter alternate = param.getAlternate();
-                DeprecationLoggingStrategy strategy = param.getDeprecationLoggingStrategy();
-                if (strategy == null || strategy.shouldBeLogged(this)) {
-                    if (LOGGER.isLoggable(Level.WARNING)) {
-                        if (alternate != null) {
-                            queueLoggingAction(new DeferredParameterLoggingAction(param, Level.WARNING,
-                                       "jsf.config.webconfig.param.deprecated",
-                                       new Object[]{
-                                             contextName,
-                                             param.getQualifiedName(),
-                                             alternate.getQualifiedName()}));
-
-                        } else {
-                            queueLoggingAction(new DeferredParameterLoggingAction(
-                                  param,
-                                  Level.WARNING,
-                                  "jsf.config.webconfig.param.deprecated.no_replacement",
-                                  new Object[]{
-                                        contextName,
-                                        param.getQualifiedName()}));
-                        }
-                    }
-                }
-
-                if (alternate != null) {
-                    queueLoggingAction(
-                          new DeferredParameterLoggingAction(param,
-                                                             Level.INFO,
-                                                             "jsf.config.webconfig.configinfo.reset",
-                                                             new Object[]{
-                                                                    contextName,
-                                                                    alternate.getQualifiedName(),
-                                                                    value}));
-
-                    contextParameters.put(alternate, value);
-                }
-                continue;
-            }
-
-            if ((value == null || value.length() == 0) && !param.isDeprecated()) {
-                value = param.getDefaultValue();
-            }
-            if (value == null || value.length() == 0) {
-                continue;
-            }
-
-            if (value.length() > 0) {
-                if (LOGGER.isLoggable(loggingLevel)) {
-                    LOGGER.log(loggingLevel,
-                               "jsf.config.webconfig.configinfo",
-                               new Object[]{contextName,
-                                            param.getQualifiedName(),
-                                            value});
-
-                }
-                contextParameters.put(param, value);
-            } else {
-                if (LOGGER.isLoggable(loggingLevel)) {
-                    LOGGER.log(loggingLevel,
-                               "jsf.config.webconfig.option.notconfigured",
-                               new Object[]{contextName,
-                                            param.getQualifiedName()});
-                }
-            }
-
-        }
-
-    }
-
-
-    /**
-     * <p>Process all JNDI entries.</p>
-     * @param contextName the context name
-     */
-    private void processJndiEntries(String contextName) {
-
-        Context initialContext = null;
-        try {
-            initialContext = new InitialContext();
-        } catch (NamingException ne) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING, ne.toString(), ne);
-            }
-        }
-
-        if (initialContext != null) {
-            // process environment entries
-            for (WebEnvironmentEntry entry : WebEnvironmentEntry.values()) {
-                String entryName = entry.getQualifiedName();
-                String value = null;
-
-                try {
-                    value = (String) initialContext.lookup(entryName);
-                } catch (NamingException root) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.fine(root.toString());
-                    }
-                }
-
-                if (value != null) {
-                    if (LOGGER.isLoggable(Level.INFO)) {
-                        // special logic for ClientStateSavingPassword
-                        if (!entry
-                              .equals(WebEnvironmentEntry.ClientStateSavingPassword)) {
-                            if (LOGGER
-                                  .isLoggable(loggingLevel)) {
-                                LOGGER.log(loggingLevel,
-                                           "jsf.config.webconfig.enventryinfo",
-                                           new Object[]{contextName,
-                                                        entryName,
-                                                        value});
-                            }
-                        } else {
-                            if (LOGGER
-                                  .isLoggable(loggingLevel)) {
-                                LOGGER.log(loggingLevel,
-                                           "jsf.config.webconfig.enventry.clientencrypt",
-                                           contextName);
-                            }
-                        }
-                    }
-                    envEntries.put(entry, value);
-                }
-            }
-        }
-
-    }
-
-
-    private boolean canProcessJndiEntries() {
-
-        try {
-            Util.getCurrentLoader(this).loadClass("javax.naming.InitialContext");
-        } catch (Exception e) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.fine(
-                      "javax.naming is unavailable.  JNDI entries related to Mojarra configuration will not be processed.");
-            }
-            return false;
-        }
-        return true;
-
-    }
-
-
-    private void queueLoggingAction(DeferredLoggingAction loggingAction) {
-
-        if (deferredLoggingActions == null) {
-            deferredLoggingActions = new ArrayList<DeferredLoggingAction>();
-        }
-        deferredLoggingActions.add(loggingAction);
-
-    }
-
-
-    // ------------------------------------------------------------------- Enums
-
-
-    /**
-     * <p>An <code>enum</code> of all non-boolean context initalization parameters
-     * recognized by the implementation.</p>
-     */
-    public enum WebContextInitParameter {
-
-
-        // implementation note:
-        // if a parameter is to be deprecated,
-        // then the <name>Deprecated enum element
-        // *must* appear after the one that is taking
-        // its place.  The reporting logic depends on this
-
-        ManagedBeanFactoryDecorator(
-              "com.sun.faces.managedBeanFactoryDecoratorClass",
-              ""
-        ),
-        StateSavingMethod(
-              "javax.faces.STATE_SAVING_METHOD",
-              "server"
-        ),
-        FaceletsSuffix(
-                ViewHandler.FACELETS_SUFFIX_PARAM_NAME,
-                ViewHandler.DEFAULT_FACELETS_SUFFIX
-        ),
-        DefaultSuffix(
-              ViewHandler.DEFAULT_SUFFIX_PARAM_NAME,
-              ViewHandler.DEFAULT_SUFFIX
-        ),
-        JavaxFacesConfigFiles(
-              "javax.faces.CONFIG_FILES",
-              ""
-        ),
-        JavaxFacesProjectStage(
-              "javax.faces.PROJECT_STAGE",
-              "Production"
-        ),
-        AlternateLifecycleId(
-              "javax.faces.LIFECYCLE_ID",
-              ""
-        ),
-        ResourceExcludes(
-            ResourceHandler.RESOURCE_EXCLUDES_PARAM_NAME,
-            ResourceHandler.RESOURCE_EXCLUDES_DEFAULT_VALUE + " .groovy"
-        ),
-        NumberOfViews(
-              "com.sun.faces.numberOfViewsInSession",
-              "15"
-        ),
-        NumberOfViewsDeprecated(
-              "com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION",
-              "15",
-              true,
-              NumberOfViews
-        ),
-        NumberOfLogicalViews(
-              "com.sun.faces.numberOfLogicalViews",
-              "15"
-        ),
-        NumberOfLogicalViewsDeprecated(
-              "com.sun.faces.NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION",
-              "15",
-              true,
-              NumberOfLogicalViews
-        ),
-        NumberOfConcurrentFlashUsers(
-              "com.sun.faces.numberOfConcerrentFlashUsers",
-              "5000"
-        ),
-        NumberOfFlashesBetweenFlashReapings(
-              "com.sun.faces.numberOfFlashesBetweenFlashReapings",
-              "5000"
-        ),
-        InjectionProviderClass(
-                "com.sun.faces.injectionProvider",
-                ""
-        ),
-        SerializationProviderClass(
-              "com.sun.faces.serializationProvider",
-              ""
-        ),
-        ResponseBufferSize(
-              "com.sun.faces.responseBufferSize",
-              "1024"
-        ),
-        FaceletsBufferSize(
-              "javax.faces.FACELETS_BUFFER_SIZE",
-              "1024"
-        ),
-        FaceletsBufferSizeDeprecated(
-              "facelets.BUFFER_SIZE",
-              "1024",
-              true,
-              FaceletsBufferSize,
-              new FaceletsConfigParamLoggingStrategy()
-        ),
-        ClientStateWriteBufferSize(
-              "com.sun.faces.clientStateWriteBufferSize",
-              "8192"
-        ),
-        ResourceBufferSize(
-            "com.sun.faces.resourceBufferSize",
-            "2048"
-        ),
-        ExpressionFactory(
-              "com.sun.faces.expressionFactory",
-              "com.sun.el.ExpressionFactoryImpl"
-        ),
-        ClientStateTimeout(
-              "com.sun.faces.clientStateTimeout",
-              ""
-        ),
-        DefaultResourceMaxAge(
-              "com.sun.faces.defaultResourceMaxAge",
-              "604800000" // 7 days
-        ),
-        ResourceUpdateCheckPeriod(
-              "com.sun.faces.resourceUpdateCheckPeriod",
-              "5" // in minutes
-        ),
-        CompressableMimeTypes(
-              "com.sun.faces.compressableMimeTypes",
-              ""
-        ),
-        DisableUnicodeEscaping(
-            "com.sun.faces.disableUnicodeEscaping",
-            "auto"
-        ),
-        FaceletsDefaultRefreshPeriod(
-              "javax.faces.FACELETS_REFRESH_PERIOD",
-              "2"
-        ),
-        FaceletsDefaultRefreshPeriodDeprecated(
-              "facelets.REFRESH_PERIOD",
-              "2",
-              true,
-              FaceletsDefaultRefreshPeriod,
-              new FaceletsConfigParamLoggingStrategy()
-        ),
-        FaceletsResourceResolver(
-              ResourceResolver.FACELETS_RESOURCE_RESOLVER_PARAM_NAME,
-              ""
-        ),
-        FaceletsResourceResolverDeprecated(
-              "facelets.RESOURCE_RESOLVER",
-              "",
-              true,
-              FaceletsResourceResolver,
-              new FaceletsConfigParamLoggingStrategy()
-        ),
-         FaceletsViewMappings(
-              ViewHandler.FACELETS_VIEW_MAPPINGS_PARAM_NAME,
-              ""
-        ),
-        FaceletsViewMappingsDeprecated(
-              "facelets.VIEW_MAPPINGS",
-              "",
-              true,
-              FaceletsViewMappings,
-              new FaceletsConfigParamLoggingStrategy()
-        ),
-        FaceletsLibraries(
-              "javax.faces.FACELETS_LIBRARIES",
-              ""
-        ),
-        FaceletsLibrariesDeprecated(
-              "facelets.LIBRARIES",
-              "",
-              true,
-              FaceletsLibraries,
-              new FaceletsConfigParamLoggingStrategy()
-        ),
-        FaceletsDecorators(
-              "javax.faces.FACELETS_DECORATORS",
-              ""
-        ),
-        FaceletsDecoratorsDeprecated(
-              "facelets.DECORATORS",
-              "",
-              true,
-              FaceletsDecorators,
-              new FaceletsConfigParamLoggingStrategy()
-        ),
-        DuplicateJARPattern(
-            "com.sun.faces.duplicateJARPattern",
-            ""
-        ),
-        ValidateEmptyFields(
-              UIInput.VALIDATE_EMPTY_FIELDS_PARAM_NAME,
-              "auto"
-        ),
-        FullStateSavingViewIds(
-              StateManager.FULL_STATE_SAVING_VIEW_IDS_PARAM_NAME,
-              ""
-        ),
-        AnnotationScanPackages(
-              "com.sun.faces.annotationScanPackages",
-              ""
-        ),
-        FaceletFactory(
-              "com.sun.faces.faceletFactory",
-              ""
-        ),
-        FaceletCache(
-            "com.sun.faces.faceletCache",
-            ""
-        );
-
-
-
-        private String defaultValue;
-        private String qualifiedName;
-        private WebContextInitParameter alternate;
-        private boolean deprecated;
-        private DeprecationLoggingStrategy loggingStrategy;
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-        public String getDefaultValue() {
-
-            return defaultValue;
-
-        }
-
-
-        public String getQualifiedName() {
-
-            return qualifiedName;
-
-        }
-
-
-        DeprecationLoggingStrategy getDeprecationLoggingStrategy() {
-
-            return loggingStrategy;
-
-        }
-
-        
-    // ------------------------------------------------- Package Private Methods
-
-
-        WebContextInitParameter(String qualifiedName,
-                                String defaultValue) {
-
-            this(qualifiedName, defaultValue, false, null);
-
-        }
-
-
-        WebContextInitParameter(String qualifiedName,
-                                String defaultValue,
-                                boolean deprecated,
-                                WebContextInitParameter alternate) {
-
-            this.qualifiedName = qualifiedName;
-            this.defaultValue = defaultValue;
-            this.deprecated = deprecated;
-            this.alternate = alternate;
-
-        }
-
-
-        WebContextInitParameter(String qualifiedName,
-                                String defaultValue,
-                                boolean deprecated,
-                                WebContextInitParameter alternate,
-                                DeprecationLoggingStrategy loggingStrategy) {
-
-            this(qualifiedName, defaultValue, deprecated, alternate);
-            this.loggingStrategy = loggingStrategy;
-
-        }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-        private WebContextInitParameter getAlternate() {
-
-            return alternate;
-
-        }
-
-
-        private boolean isDeprecated() {
-
-            return deprecated;
-
-        }
-
-    }
-
-    /**
-     * <p>An <code>enum</code> of all boolean context initalization parameters
-     * recognized by the implementation.</p>
-     */
-    public enum BooleanWebContextInitParameter {
-
-
-        // implementation note:
-        // if a parameter is to be deprecated,
-        // then the <name>Deprecated enum element
-        // *must* appear after the one that is taking
-        // its place.  The reporting logic depends on this
-
-        DisplayConfiguration(
-              "com.sun.faces.displayConfiguration",
-              false
-        ),
-        ValidateFacesConfigFiles(
-              "com.sun.faces.validateXml",
-              false
-        ),
-        VerifyFacesConfigObjects(
-              "com.sun.faces.verifyObjects",
-              false
-        ),
-        ForceLoadFacesConfigFiles(
-              "com.sun.faces.forceLoadConfiguration",
-              false
-        ),
-        DisableArtifactVersioning(
-              "com.sun.faces.disableVersionTracking",
-              false,
-              true,
-              null
-        ),
-        EnableHtmlTagLibraryValidator(
-              "com.sun.faces.enableHtmlTagLibValidator",
-              false
-        ),
-        EnableCoreTagLibraryValidator(
-              "com.sun.faces.enableCoreTagLibValidator",
-              false
-        ),
-        PreferXHTMLContentType(
-              "com.sun.faces.preferXHTML",
-              false
-        ),
-        PreferXHTMLContextTypeDeprecated(
-              "com.sun.faces.PreferXHTML",
-              false,
-              true,
-              PreferXHTMLContentType
-        ),
-        CompressViewState(
-              "com.sun.faces.compressViewState",
-              true
-        ),
-        CompressViewStateDeprecated(
-              "com.sun.faces.COMPRESS_STATE",
-              true,
-              true,
-              CompressViewState
-        ),
-        CompressJavaScript(
-            "com.sun.faces.compressJavaScript",
-            true
-        ),
-        ExternalizeJavaScriptDeprecated(
-            "com.sun.faces.externalizeJavaScript",
-            true,
-            true,
-            null
-        ),
-        SendPoweredByHeader(
-              "com.sun.faces.sendPoweredByHeader",
-              true
-        ),
-        EnableJSStyleHiding(
-            "com.sun.faces.enableJSStyleHiding",
-             false
-        ),
-        EnableScriptInAttributeValue(
-            "com.sun.faces.enableScriptsInAttributeValues",
-             true
-        ),
-        WriteStateAtFormEnd(
-            "com.sun.faces.writeStateAtFormEnd",
-            true
-        ),
-        EnableLazyBeanValidation(
-             "com.sun.faces.enableLazyBeanValidation",
-             true
-        ),
-        EnableLoadBundle11Compatibility(
-             "com.sun.faces.enabledLoadBundle11Compatibility",
-             false
-        ),
-        EnableRestoreView11Compatibility(
-              "com.sun.faces.enableRestoreView11Compatibility",
-              false
-        ),
-        SerializeServerState(
-              "com.sun.faces.serializeServerState",
-              false
-        ),
-        EnableViewStateIdRendering(
-            "com.sun.faces.enableViewStateIdRendering",
-            true
-        ),
-        RegisterConverterPropertyEditors(
-            "com.sun.faces.registerConverterPropertyEditors",
-            false
-        ),
-        EnableGroovyScripting(
-            "com.sun.faces.enableGroovyScripting",
-            false
-        ),
-        DisableFaceletJSFViewHandler(
-              "javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER",
-              false
-        ),
-        DisableDefaultBeanValidator(
-                BeanValidator.DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME,
-                false),
-        DateTimeConverterUsesSystemTimezone(
-              "javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE",
-              false
-        ),
-        FaceletsSkipComments(
-              "javax.faces.FACELETS_SKIP_COMMENTS",
-              false
-        ),
-        FaceletsSkipCommentsDeprecated(
-              "facelets.SKIP_COMMENTS",
-              false,
-              true, 
-              FaceletsSkipComments,
-              new FaceletsConfigParamLoggingStrategy()
-        ),
-        PartialStateSaving(
-              StateManager.PARTIAL_STATE_SAVING_PARAM_NAME,
-              true
-        ),
-        GenerateUniqueServerStateIds(
-              "com.sun.faces.generateUniqueServerStateIds",
-              true
-        ),
-        AutoCompleteOffOnViewState(
-              "com.sun.faces.autoCompleteOffOnViewState",
-              true
-        ),
-        EnableThreading(
-              "com.sun.faces.enableThreading",
-              false
-        ),
-        AllowTextChildren(
-            "com.sun.faces.allowTextChildren",
-            false
-        ),
-        CacheResourceModificationTimestamp(
-              "com.sun.faces.cacheResourceModificationTimestamp",
-              false
-        );
-
-        private BooleanWebContextInitParameter alternate;
-
-        private String qualifiedName;
-        private boolean defaultValue;
-        private boolean deprecated;
-        private DeprecationLoggingStrategy loggingStrategy;
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-        public boolean getDefaultValue() {
-
-            return defaultValue;
-
-        }
-
-
-        public String getQualifiedName() {
-
-            return qualifiedName;
-
-        }
-
-
-        DeprecationLoggingStrategy getDeprecationLoggingStrategy() {
-
-            return loggingStrategy;
-
-        }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-
-        BooleanWebContextInitParameter(String qualifiedName,
-                                       boolean defaultValue) {
-
-            this(qualifiedName, defaultValue, false, null);
-
-        }
-
-
-        BooleanWebContextInitParameter(String qualifiedName,
-                                       boolean defaultValue,
-                                       boolean deprecated,
-                                       BooleanWebContextInitParameter alternate) {
-
-            this.qualifiedName = qualifiedName;
-            this.defaultValue = defaultValue;
-            this.deprecated = deprecated;
-            this.alternate = alternate;
-
-        }
-
-
-        BooleanWebContextInitParameter(String qualifiedName,
-                                      boolean defaultValue,
-                                      boolean deprecated,
-                                      BooleanWebContextInitParameter alternate,
-                                      DeprecationLoggingStrategy loggingStrategy) {
-
-            this(qualifiedName, defaultValue, deprecated, alternate);
-            this.loggingStrategy = loggingStrategy;
-
-        }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-        private BooleanWebContextInitParameter getAlternate() {
-
-            return alternate;
-
-        }
-
-
-        private boolean isDeprecated() {
-
-            return deprecated;
-
-        }
-
-    }
-
-    /**
-     * <p>An <code>enum</code> of all environment entries (specified in the
-     * web.xml) recognized by the implemenetation.</p>
-     */
-    public enum WebEnvironmentEntry {
-
-
-        ClientStateSavingPassword("ClientStateSavingPassword"),
-        ProjectStage(javax.faces.application.ProjectStage.PROJECT_STAGE_JNDI_NAME);
-
-        private static final String JNDI_PREFIX = "java:comp/env/";
-        private String qualifiedName;
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-         public String getQualifiedName() {
-
-            return qualifiedName;
-
-        }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-
-        WebEnvironmentEntry(String qualifiedName) {
-
-            if (qualifiedName.startsWith(JNDI_PREFIX)) {
-                this.qualifiedName = qualifiedName;
-            } else {
-                this.qualifiedName = JNDI_PREFIX + qualifiedName;
-            }
-
-        }
-
-    }
-
-    /**
-     * <p>An <code>enum</code> of all possible values for the <code>disableUnicodeEscaping</code>
-     * configuration parameter.</p>
-     */
-    public enum DisableUnicodeEscaping {
-        True("true"),
-        False("false"),
-        Auto("auto");
-
-        private final String value;
-
-        DisableUnicodeEscaping(String value) {
-            this.value = value;
-        }
-
-        public static DisableUnicodeEscaping getByValue(String value)
-        {
-            for (DisableUnicodeEscaping disableUnicodeEscaping : DisableUnicodeEscaping.values()) {
-                if (disableUnicodeEscaping.value.equals(value)) {
-                    return disableUnicodeEscaping;
-                }
-            }
-
-            return null;
-        }
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private interface DeprecationLoggingStrategy {
-
-        boolean shouldBeLogged(WebConfiguration configuration);
-
-    }
-
-
-    private static class FaceletsConfigParamLoggingStrategy implements DeprecationLoggingStrategy {
-
-        public boolean shouldBeLogged(WebConfiguration configuration) {
-            return !configuration.isOptionEnabled(BooleanWebContextInitParameter.DisableFaceletJSFViewHandler);
-        }
-
-    } // END FaceletsConfigParamLoggingStrategy
-
-
-    private interface DeferredLoggingAction {
-
-        void log();
-
-    } // END DeferredLogginAction
-
-
-    private class DeferredParameterLoggingAction implements DeferredLoggingAction {
-
-        private WebContextInitParameter parameter;
-        private Level loggingLevel;
-        private String logKey;
-        private Object[] params;
-
-
-        DeferredParameterLoggingAction(WebContextInitParameter parameter,
-                                       Level loggingLevel,
-                                       String logKey,
-                                       Object[] params) {
-
-            this.parameter = parameter;
-            this.loggingLevel = loggingLevel;
-            this.logKey = logKey;
-            this.params = params;
-
-        }
-
-        public void log() {
-
-            if (WebConfiguration.LOGGER.isLoggable(loggingLevel)) {
-                DeprecationLoggingStrategy strategy = parameter.getDeprecationLoggingStrategy();
-                if (strategy != null && strategy.shouldBeLogged(WebConfiguration.this)) {
-                    WebConfiguration.LOGGER.log(loggingLevel, logKey, params);
-                }
-            }
-
-        }
-
-    } // END DeferredParameterLogginAction
-
-
-    private class DeferredBooleanParameterLoggingAction implements DeferredLoggingAction {
-
-        private BooleanWebContextInitParameter parameter;
-        private Level loggingLevel;
-        private String logKey;
-        private Object[] params;
-
-        DeferredBooleanParameterLoggingAction(BooleanWebContextInitParameter parameter,
-                                              Level loggingLevel,
-                                              String logKey,
-                                              Object[] params) {
-            this.parameter = parameter;
-            this.loggingLevel = loggingLevel;
-            this.logKey = logKey;
-            this.params = params;
-        }
-
-        public void log() {
-
-            if (WebConfiguration.LOGGER.isLoggable(loggingLevel)) {
-                DeprecationLoggingStrategy strategy = parameter.getDeprecationLoggingStrategy();
-                if (strategy != null && strategy.shouldBeLogged(WebConfiguration.this)) {
-                    WebConfiguration.LOGGER.log(loggingLevel, logKey, params);
-                }
-            }
-
-        }
-
-    } // END DeferredBooleanParameterLoggingAction
-
-} // END WebConfiguration
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/BaseWebConfigResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/config/configprovider/BaseWebConfigResourceProvider.java
deleted file mode 100644
index 3ec3e3f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/BaseWebConfigResourceProvider.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.configprovider;
-
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Set;
-import java.util.LinkedHashSet;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.servlet.ServletContext;
-import javax.faces.FacesException;
-
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.JavaxFacesConfigFiles;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.spi.ConfigurationResourceProvider;
-
-/**
- * 
- */
-public abstract class BaseWebConfigResourceProvider implements
-      ConfigurationResourceProvider {
-
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-
-    // ------------------------------ Methods from ConfigurationResourceProvider
-
-
-    public Collection<URL> getResources(ServletContext context) {
-
-        WebConfiguration webConfig = WebConfiguration.getInstance(context);
-        String paths = webConfig.getOptionValue(getParameter());
-        Set<URL> urls = new LinkedHashSet<URL>(6);
-        if (paths != null) {
-            for (String token : Util.split(context, paths.trim(), getSeparatorRegex())) {
-                String path = token.trim();
-                if (!isExcluded(path) && path.length() != 0) {
-                    URL u = getContextURLForPath(context, path);
-                    if (u != null) {
-                        urls.add(u);
-                    } else {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.config.web_resource_not_found",
-                                       new Object[] { path, JavaxFacesConfigFiles.getQualifiedName() });
-                        }
-                    }
-                }
-
-            }
-        }
-
-        return urls;
-        
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected abstract WebContextInitParameter getParameter();
-
-    protected abstract String[] getExcludedResources();
-
-    protected abstract String getSeparatorRegex();
-
-
-    protected URL getContextURLForPath(ServletContext context, String path) {
-
-        try {
-            return context.getResource(path);
-        } catch (MalformedURLException mue) {
-            throw new FacesException(mue);
-        }
-
-    }
-
-
-    protected boolean isExcluded(String path) {
-
-        return (Arrays.binarySearch(getExcludedResources(), path) >= 0);
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MetaInfFaceletTaglibraryConfigProvider.java b/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MetaInfFaceletTaglibraryConfigProvider.java
deleted file mode 100644
index b01e38d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MetaInfFaceletTaglibraryConfigProvider.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.configprovider;
-
-import java.net.URL;
-import java.util.Collection;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Set;
-import java.io.IOException;
-
-import javax.servlet.ServletContext;
-import javax.faces.FacesException;
-
-import com.sun.faces.facelets.util.Classpath;
-import com.sun.faces.util.Util;
-import com.sun.faces.spi.ConfigurationResourceProvider;
-
-/**
- *
- */
-public class MetaInfFaceletTaglibraryConfigProvider implements
-      ConfigurationResourceProvider {
-
-    private static final String SUFFIX = ".taglib.xml";
-    private static final String WEB_INF_CLASSES =
-          "/WEB-INF/classes/META-INF";
-
-    /**
-     * Array of taglib.xml files included with Facelets 1.1.x.  If they are
-     * on the classpath, we don't want to process them.
-     */
-    private static final String[] FACELET_CONFIG_FILES = {
-        "META-INF/jsf-core.taglib.xml",
-        "META-INF/jsf-html.taglib.xml",
-        "META-INF/jsf-ui.taglib.xml",
-        "META-INF/jstl-core.taglib.xml",
-        "META-INF/jstl-fn.taglib.xml"
-    };
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    public Collection<URL> getResources(ServletContext context) {
-
-        try {
-            URL[] urls = Classpath.search(Util.getCurrentLoader(this),
-                                          "META-INF/",
-                                          SUFFIX);
-            // perform some 'correctness' checking.  If the user has
-            // removed the FaceletViewHandler from their configuration,
-            // but has left the jsf-facelets.jar in the classpath, we
-            // need to ignore the default configuration resouces from
-            // that JAR.
-            List<URL> urlsList = pruneURLs(urls);
-
-            // special case for finding taglib files in WEB-INF/classes/META-INF
-            Set paths = context.getResourcePaths(WEB_INF_CLASSES);
-            if (paths != null) {
-                for (Object path : paths) {
-                    String p = path.toString();
-                    if (p.endsWith(".taglib.xml")) {
-                        urlsList.add(context.getResource(p));
-                    }
-                }
-            }
-            return urlsList;
-        } catch (IOException ioe) {
-            throw new FacesException("Error searching classpath from facelet-taglib documents", ioe);
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private List<URL> pruneURLs(URL[] urls) {
-
-        List<URL> ret = null;
-        if (urls != null && urls.length > 0) {
-            for (URL url : urls) {
-                String u = url.toString();
-                boolean found = false;
-                for (String excludeName : FACELET_CONFIG_FILES) {
-                    if (u.contains(excludeName)) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found) {
-                    if (ret == null) {
-                        ret = new ArrayList<URL>();
-                    }
-                    ret.add(url);
-                }
-            }
-        }
-
-        if (ret == null) {
-            ret = Collections.emptyList();
-        }
-        return ret;
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MetaInfFacesConfigResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MetaInfFacesConfigResourceProvider.java
deleted file mode 100644
index 988cf77..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MetaInfFacesConfigResourceProvider.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.configprovider;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.facelets.util.Classpath;
-import com.sun.faces.spi.ConfigurationResourceProvider;
-
-import javax.faces.FacesException;
-import javax.servlet.ServletContext;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.Collection;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Arrays;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-/**
- *
- */
-public class MetaInfFacesConfigResourceProvider implements
-      ConfigurationResourceProvider {
-
-    /**
-     * <p>This <code>Pattern</code> will pick the the JAR file name if present
-     * within a URL.</p>
-     */
-    private static final Pattern JAR_PATTERN = Pattern.compile(".*/(\\S*\\.jar).*");
-
-    /**
-     * <p>The resource path for faces-config files included in the
-     * <code>META-INF</code> directory of JAR files.</p>
-     */
-    private static final String META_INF_RESOURCES =
-         "META-INF/faces-config.xml";
-
-    private static final String WEB_INF_CLASSES =
-          "/WEB-INF/classes/META-INF";
-
-
-    // ------------------------------ Methods From ConfigurationResourceProvider
-
-
-    /**
-     * @see com.sun.faces.spi.ConfigurationResourceProvider#getResources(javax.servlet.ServletContext)
-     */
-    public Collection<URL> getResources(ServletContext context) {
-
-        WebConfiguration webConfig = WebConfiguration.getInstance(context);
-        String duplicateJarPattern = webConfig.getOptionValue(WebConfiguration.WebContextInitParameter.DuplicateJARPattern);
-        Pattern duplicatePattern = null;
-        if (duplicateJarPattern != null) {
-            duplicatePattern = Pattern.compile(duplicateJarPattern);
-        }
-        SortedMap<String, Set<URL>> sortedJarMap = new TreeMap<String, Set<URL>>();
-        //noinspection CollectionWithoutInitialCapacity
-        List<URL> unsortedResourceList = new ArrayList<URL>();
-
-        try {
-            for (URL url : loadURLs(context)) {
-
-                String jarUrl = url.toString();
-                String jarName = null;
-                Matcher m = JAR_PATTERN.matcher(jarUrl);
-                if (m.matches()) {
-                    jarName = m.group(1);
-                }
-                if (jarName != null) {
-                    if (duplicatePattern != null) {
-                        m = duplicatePattern.matcher(jarName);
-                        if (m.matches()) {
-                            jarName = m.group(1);
-                        }
-                    }
-
-                    Set<URL> urls = sortedJarMap.get(jarName);
-                    if (urls == null) {
-                        urls = new HashSet<URL>();
-                        sortedJarMap.put(jarName, urls);
-                    }
-                    urls.add(url);
-                } else {
-                    unsortedResourceList.add(0, url);
-                }
-            }
-        } catch (IOException e) {
-            throw new FacesException(e);
-        }
-        // Load the sorted resources first:
-        List<URL> result =
-              new ArrayList<URL>(sortedJarMap.size() + unsortedResourceList
-                    .size());
-        for (Map.Entry<String, Set<URL>> entry : sortedJarMap.entrySet()) {
-            result.addAll(entry.getValue());
-        }
-        // Then load the unsorted resources
-        result.addAll(unsortedResourceList);
-        return result;
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private Collection<URL> loadURLs(ServletContext context) throws IOException {
-
-        Set<URL> urls = new HashSet<URL>();
-        for (Enumeration<URL> e = Util.getCurrentLoader(this).getResources(META_INF_RESOURCES); e.hasMoreElements();) {
-            urls.add(e.nextElement());            
-        }
-        urls.addAll(Arrays.asList(Classpath.search("META-INF/", ".faces-config.xml")));
-        // special case for finding taglib files in WEB-INF/classes/META-INF
-        Set paths = context.getResourcePaths(WEB_INF_CLASSES);
-        if (paths != null) {
-            for (Object path : paths) {
-                String p = path.toString();
-                if (p.endsWith(".taglib.xml")) {
-                    urls.add(context.getResource(p));
-                }
-            }
-        }
-        return urls;
-        
-    }
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MojarraFacesConfigResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MojarraFacesConfigResourceProvider.java
deleted file mode 100644
index 99d0f63..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/MojarraFacesConfigResourceProvider.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.configprovider;
-
-import com.sun.faces.spi.ConfigurationResourceProvider;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.servlet.ServletContext;
-
-/**
- *
- */
-public class MojarraFacesConfigResourceProvider implements
-      ConfigurationResourceProvider {
-
-    private static final String JSF_RI_CONFIG =
-         "com/sun/faces/jsf-ri-runtime.xml";
-
-
-    // ------------------------------ Methods from ConfigurationResourceProvider
-
-
-    /**
-     * @see ConfigurationResourceProvider#getResources(javax.servlet.ServletContext)
-     */
-    public Collection<URL> getResources(ServletContext context) {
-
-        List<URL> list = new ArrayList<URL>(1);
-        // Don't use Util.getCurrentLoader().  This config resource should
-        // be available from the same classloader that loaded this instance.
-        // Doing so allows us to be more OSGi friendly.
-        ClassLoader loader = this.getClass().getClassLoader();
-        list.add(loader.getResource(JSF_RI_CONFIG));
-        return list;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/WebFaceletTaglibResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/config/configprovider/WebFaceletTaglibResourceProvider.java
deleted file mode 100644
index 940d861..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/WebFaceletTaglibResourceProvider.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.configprovider;
-
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.FaceletsLibraries;
-
-/**
- *
- */
-public class WebFaceletTaglibResourceProvider extends BaseWebConfigResourceProvider {
-
-    private static final String SEPARATOR = ";";
-    private static final String[] EXCLUDES = {};
-
-
-    // ------------------------------ Methods from BaseWebConfigResourceProvider
-
-
-    protected WebContextInitParameter getParameter() {
-
-        return FaceletsLibraries;
-
-    }
-
-
-    protected String[] getExcludedResources() {
-
-        return EXCLUDES;
-
-    }
-
-    protected String getSeparatorRegex() {
-
-        return SEPARATOR;
-        
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/WebFacesConfigResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/config/configprovider/WebFacesConfigResourceProvider.java
deleted file mode 100644
index f22ba42..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/configprovider/WebFacesConfigResourceProvider.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.configprovider;
-
-import java.net.URL;
-import java.util.Collection;
-
-import javax.servlet.ServletContext;
-
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.JavaxFacesConfigFiles;
-
-/**
- *
- */
-public class WebFacesConfigResourceProvider extends BaseWebConfigResourceProvider {
-
-
-    /**
-     * <p>The resource path for the faces configuration in the
-     * <code>WEB-INF</code> directory of an application.</p>
-     */
-    private static final String WEB_INF_RESOURCE =
-         "/WEB-INF/faces-config.xml";
-
-    private static final String[] EXCLUDES = { WEB_INF_RESOURCE };
-    private static final String SEPARATORS = ",|;";
-
-
-    // ------------------------------ Methods from ConfigurationResourceProvider
-
-
-    /**
-     * @see com.sun.faces.spi.ConfigurationResourceProvider#getResources(javax.servlet.ServletContext)
-     */
-    public Collection<URL> getResources(ServletContext context) {
-
-        Collection<URL> urls = super.getResources(context);
-
-        // Step 5, parse "/WEB-INF/faces-config.xml" if it exists
-        URL webFacesConfig = getContextURLForPath(context, WEB_INF_RESOURCE);
-        if (webFacesConfig != null) {
-            urls.add(webFacesConfig);
-        }
-
-        // PENDING (rlubke,driscoll) this is a temporary measure to prevent
-        // having to find the web-based configuration resources twice
-        context.setAttribute("com.sun.faces.webresources", urls);
-
-        return urls;
-        
-    }
-
-
-    // ------------------------------ Methods from BaseWebConfigResourceProvider
-
-
-    protected WebContextInitParameter getParameter() {
-
-        return JavaxFacesConfigFiles;
-
-    }
-
-    
-    protected String[] getExcludedResources() {
-
-        return EXCLUDES;
-
-    }
-
-    protected String getSeparatorRegex() {
-        return SEPARATORS;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/AbstractConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/AbstractConfigProcessor.java
deleted file mode 100644
index 964127a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/AbstractConfigProcessor.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.application.ApplicationResourceBundle;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.annotation.AnnotationManager;
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.ConfigManager;
-import com.sun.faces.config.DocumentInfo;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.util.ReflectionUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.scripting.groovy.RendererProxy;
-import com.sun.faces.scripting.groovy.NavigationHandlerProxy;
-import com.sun.faces.scripting.groovy.ELResolverProxy;
-import com.sun.faces.scripting.groovy.PhaseListenerProxy;
-import com.sun.faces.scripting.groovy.ViewHandlerProxy;
-import com.sun.faces.scripting.groovy.ActionListenerProxy;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-import javax.faces.FactoryFinder;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionListener;
-import javax.faces.event.PhaseListener;
-import javax.faces.render.Renderer;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.ViewHandler;
-import javax.el.ELResolver;
-import javax.servlet.ServletContext;
-
-import java.lang.reflect.Constructor;
-import java.lang.annotation.Annotation;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * <p>
- *   This is the base <code>ConfigProcessor</code> that all concrete
- *   <code>ConfigProcessor</code> implementations should extend.
- * </p> 
- */
-public abstract class AbstractConfigProcessor implements ConfigProcessor {
-
-
-    private ConfigProcessor nextProcessor;  
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#setNext(ConfigProcessor)
-     */
-    public void setNext(ConfigProcessor nextProcessor) {
-
-        this.nextProcessor = nextProcessor;
-        
-    }
-    
-
-    /**
-     * @see ConfigProcessor#invokeNext(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void invokeNext(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        if (nextProcessor != null) {
-            nextProcessor.process(sc, documentInfos);
-        }
-        
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * @return return the Application instance for this context.
-     */
-    protected Application getApplication() {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-             FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        return afactory.getApplication();
-
-    }
-
-
-    /**
-     * <p>Return the text of the specified <code>Node</code>,
-     * if any.
-     * @param node the <code>Node</code>
-     * @return the text of the <code>Node</code>  If the length
-     *  of the text is zero, this method will return <code>null</code>
-     */
-    protected String getNodeText(Node node) {
-
-        String res = null;
-        if (node != null) {
-            res = node.getTextContent();
-            if (res != null) {
-                res = res.trim();
-            }
-        }
-
-        return ((res != null && res.length() != 0) ? res : null);
-
-    }
-
-
-    /**
-     * @return a <code>Map</code> of of textual values keyed off the values
-     * of any lang or xml:lang attributes specified on an attribute.  If no
-     * such attribute exists, then the key {@link ApplicationResourceBundle#DEFAULT_KEY}
-     * will be used (i.e. this represents the default Locale).
-     * @param list a list of nodes representing textual elements such as
-     *  description or display-name     
-     */
-    protected Map<String, String> getTextMap(List<Node> list) {
-
-        if (list != null && !list.isEmpty()) {
-            int len = list.size();
-            HashMap<String, String> names =
-                    new HashMap<String, String>(len, 1.0f);
-            for (int i = 0; i < len; i++) {
-                Node node = list.get(i);
-                String textValue = getNodeText(node);
-                if (textValue != null) {
-                    if (node.hasAttributes()) {
-                        NamedNodeMap attributes = node
-                                .getAttributes();
-                        String lang
-                                = getNodeText(attributes.getNamedItem(
-                                     "lang"));
-                        if (lang == null) {
-                            lang =
-                                    getNodeText(attributes.getNamedItem(
-                                         "xml:lang"));
-                        }
-                        if (lang != null) {
-                            names.put(lang, textValue);
-                        } else {                                                     
-                            names.put(ApplicationResourceBundle.DEFAULT_KEY,
-                                      textValue);
-                        }
-                    } else {
-                        names.put(ApplicationResourceBundle.DEFAULT_KEY,
-                                  textValue);
-                    }
-                }
-            }
-
-            return names;
-        }
-
-        return null;
-
-    }
-
-    protected Class<?> findRootType(String source,
-                                    Node sourceNode,
-                                    Class<?>[] ctorArguments) {
-
-        try {
-            Class<?> sourceClass = loadClass(source, this, null);
-            for (Class<?> ctorArg : ctorArguments) {
-                if (ReflectionUtils.lookupConstructor(sourceClass, ctorArg) != null) {
-                    return ctorArg;
-                }
-            }
-        } catch (ClassNotFoundException cnfe) {
-            throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Unable to find class ''{0}''",
-                                                        source), sourceNode),
-                                                        cnfe);
-        }
-
-        return null;
-    }
-
-
-    protected Object createInstance(String className, Node source) {
-        return createInstance(className, null, null, source);
-    }
-
-    protected Object createInstance(String className,
-                                    Class rootType,
-                                    Object root,
-                                    Node source) {
-        Class clazz;
-        Object returnObject = null;
-        if (className != null) {
-            try {
-                clazz = loadClass(className, returnObject, null);
-                if (clazz != null) {
-                    if (isDevModeEnabled()) {
-                        Class<?>[] interfaces = clazz.getInterfaces();
-                        if (interfaces != null) {
-                            for (Class<?> c : interfaces) {
-                                if ("groovy.lang.GroovyObject".equals(c.getName())) {
-                                    // all groovy classes will implement this interface
-                                    returnObject = createScriptProxy(rootType, className, root);
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                    if (returnObject == null) {
-                        // Look for an adapter constructor if we've got
-                        // an object to adapt
-                        if ((rootType != null) && (root != null)) {
-                            Constructor construct =
-                                  ReflectionUtils.lookupConstructor(
-                                        clazz,
-                                        rootType);
-                            if (construct != null) {
-                                returnObject = construct.newInstance(root);
-                            }
-                        }
-                    }
-                    if (clazz != null && returnObject == null) {
-                        returnObject = clazz.newInstance();
-                    }
-                }
-
-            } catch (ClassNotFoundException cnfe) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Unable to find class ''{0}''",
-                                                        className),
-                                   source),
-                                   cnfe);
-            } catch (NoClassDefFoundError ncdfe) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Class ''{0}'' is missing a runtime dependency: {1}",
-                                                        className,
-                                                        ncdfe.toString()),
-                                   source),
-                                   ncdfe);
-            } catch (ClassCastException cce) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Class ''{0}'' is not an instance of ''{1}''",
-                                                        className,
-                                                        rootType),
-                                   source),
-                                   cce);
-            } catch (Exception e) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Unable to create a new instance of ''{0}'': {1}",
-                                                        className,
-                                                        e.toString()),
-                                   source), e);
-            }
-        }
-
-        return returnObject;
-        
-    }
-
-
-    protected Class<?> loadClass(String className,
-                                 Object fallback,
-                                 Class<?> expectedType)
-    throws ClassNotFoundException {
-
-        Class<?> clazz = Util.loadClass(className, fallback);
-        if (expectedType != null && !expectedType.isAssignableFrom(clazz)) {
-                throw new ClassCastException();
-        }
-        return clazz;
-        
-    }
-
-
-    protected void processAnnotations(Class<? extends Annotation> annotationType) {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ApplicationAssociate associate =
-              ApplicationAssociate.getInstance(ctx.getExternalContext());
-        AnnotationManager manager = associate.getAnnotationManager();
-        manager.applyConfigAnntations(ctx,
-                                      annotationType,
-                                      ConfigManager.getAnnotatedClasses(ctx).get(annotationType));
-        
-    }
-
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private String buildMessage(String cause, Node source) {
-
-        return MessageFormat.format("\n  Source Document: {0}\n  Cause: {1}",
-                                    source.getOwnerDocument().getDocumentURI(),
-                                    cause);
-
-    }
-
-
-    private Object createScriptProxy(Class<?> artifactType,
-                                     String scriptName,
-                                     Object root) {
-        if (Renderer.class.equals(artifactType)) {
-            return new RendererProxy(scriptName);
-        } else if (PhaseListener.class.equals(artifactType)) {
-            return new PhaseListenerProxy(scriptName);
-        } else if (ViewHandler.class.equals(artifactType)) {
-            return new ViewHandlerProxy(scriptName, (ViewHandler) root);
-        } else if (NavigationHandler.class.equals(artifactType)) {
-            return new NavigationHandlerProxy(scriptName, (NavigationHandler) root);
-        } else if (ActionListener.class.equals(artifactType)) {
-            return new ActionListenerProxy(scriptName, (ActionListener) root);
-        } else if (ELResolver.class.equals(artifactType)) {
-            return new ELResolverProxy(scriptName);
-        } else {
-            return null;
-        }
-    }
-
-
-    private boolean isDevModeEnabled() {
-        WebConfiguration webconfig = WebConfiguration.getInstance();
-        return (webconfig != null
-                  && "Development".equals(webconfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage)));
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/ApplicationConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/ApplicationConfigProcessor.java
deleted file mode 100644
index 674626a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/ApplicationConfigProcessor.java
+++ /dev/null
@@ -1,847 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.LinkedHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.el.ELResolver;
-import javax.faces.application.Application;
-import javax.faces.application.ConfigurableNavigationHandler;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.NamedEvent;
-import javax.servlet.ServletContext;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.ApplicationResourceBundle;
-import com.sun.faces.el.ChainAwareVariableResolver;
-import com.sun.faces.el.DummyPropertyResolverImpl;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.DocumentInfo;
-
-import java.util.LinkedHashSet;
-import java.util.Map;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Document;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/application</code>.
- * </p>
- */
-public class ApplicationConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <code>/faces-config/application</code>
-     */
-    private static final String APPLICATION =
-         "application";
-
-    /**
-     * <code>/faces-config/application/action-listener</code>
-     */
-    private static final String ACTION_LISTENER
-         = "action-listener";
-
-    /**
-     * <code>/faces-config/application/default-render-kit-id
-     */
-    private static final String DEFAULT_RENDERKIT_ID
-         = "default-render-kit-id";
-
-    /**
-     * <code>/faces-config/application/default-validators</code>
-     */
-    private static final String DEFAULT_VALIDATORS
-        = "default-validators";
-
-    /**
-     * <code>/faces-config/application/default-validators/validator-id</code>
-     */
-    private static final String VALIDATOR_ID
-        = "validator-id";
-
-    /**
-     * <code>/faces-config/application/message-bundle
-     */
-    private static final String MESSAGE_BUNDLE
-         = "message-bundle";
-
-    /**
-     * <code>/faces-config/application/navigation-handler</code>
-     */
-    private static final String NAVIGATION_HANDLER
-         = "navigation-handler";
-
-    /**
-     * <code>/faces-config/application/view-handler</code>
-     */
-    private static final String VIEW_HANDLER
-         = "view-handler";
-
-    /**
-     * <code>/faces-config/application/state-manager</code>
-     */
-    private static final String STATE_MANAGER
-         = "state-manager";
-
-    /**
-     * <code>/faces-config/application/resource-handler</code>
-     */
-    private static final String RESOURCE_HANDLER
-         = "resource-handler";
-
-    /**
-     * <code>/faces-config/application/el-resolver</code>
-     */
-    private static final String EL_RESOLVER
-         = "el-resolver";
-
-    /**
-     * <code>/faces-config/application/property-resolver</code>
-     */
-    private static final String PROPERTY_RESOLVER
-         = "property-resolver";
-
-    /**
-     * <code>/faces-config/application/variable-resolver</code>
-     */
-    private static final String VARIABLE_RESOLVER
-         = "variable-resolver";
-
-    /**
-     * <code>/faces-config/application/locale-config/default-locale</code>
-     */
-    private static final String DEFAULT_LOCALE
-         = "default-locale";
-
-    /**
-     * <code>/faces-config/application/locale-config/supported-locale</code>
-     */
-    private static final String SUPPORTED_LOCALE
-         = "supported-locale";
-
-    /**
-     * <code>/faces-config/application/resource-bundle</code>
-     */
-    private static final String RESOURCE_BUNDLE
-         = "resource-bundle";
-
-    /**
-     * <code>/faces-config/application/resource-bundle/base-name</code>
-     */
-    private static final String BASE_NAME
-         = "base-name";
-
-    /**
-     * <code>/faces-config/application/resource-bundle/var</code>
-     */
-    private static final String VAR
-         = "var";
-
-    /**
-     * <code>/faces-config/application/resource-bundle/description</code>
-     */
-    private static final String RES_DESCRIPTIONS
-         = "description";
-
-    /**
-     * <code>/faces-config/application/resource-bundle/display-name</code>
-     */
-    private static final String RES_DISPLAY_NAMES
-         = "display-name";
-
-    /**
-     * <code>/faces-config/application/system-event-listener</code>
-     */
-    private static final String SYSTEM_EVENT_LISTENER
-         = "system-event-listener";
-
-    /**
-     * <code>/faces-config/application/system-event-listener/system-event-listener-class</code>
-     */
-    private static final String SYSTEM_EVENT_LISTENER_CLASS
-         = "system-event-listener-class";
-
-    /**
-     * <code>/faces-config/application/system-event-listener/system-event-class</code>
-     */
-    private static final String SYSTEM_EVENT_CLASS
-         = "system-event-class";
-
-    /**
-     * <code>/faces-config/application/system-event-listener/source-class</code>
-     */
-    private static final String SOURCE_CLASS
-         = "source-class";
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        Application app = getApplication();
-        ApplicationAssociate associate =
-              ApplicationAssociate.getInstance(
-                    FacesContext.getCurrentInstance().getExternalContext());
-        LinkedHashMap<String,Node> viewHandlers = new LinkedHashMap<String,Node>();
-        LinkedHashSet<String> defaultValidatorIds = null;
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format("Processing application elements for document: ''{0}''",
-                                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace =
-                 document.getDocumentElement().getNamespaceURI();
-            NodeList applicationElements = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, APPLICATION);
-            if (applicationElements != null
-                && applicationElements.getLength() > 0) {
-                for (int a = 0, asize = applicationElements.getLength();
-                     a < asize;
-                     a++) {
-                    Node appElement = applicationElements.item(a);
-                    NodeList children = ((Element) appElement)
-                         .getElementsByTagNameNS(namespace, "*");
-                    if (children != null && children.getLength() > 0) {
-                        for (int c = 0, csize = children.getLength();
-                             c < csize;
-                             c++) {
-                            Node n = children.item(c);
-                            if (MESSAGE_BUNDLE.equals(n.getLocalName())) {
-                                setMessageBundle(app, n);
-                            } else if (DEFAULT_RENDERKIT_ID.equals(n.getLocalName())) {
-                                setDefaultRenderKitId(app, n);
-                            } else if (ACTION_LISTENER.equals(n.getLocalName())) {
-                                addActionListener(app, n);
-                            } else if (NAVIGATION_HANDLER.equals(n.getLocalName())) {
-                                setNavigationHandler(app, n);
-                            } else if (VIEW_HANDLER.equals(n.getLocalName())) {
-                                String viewHandler = getNodeText(n);
-                                if (viewHandler != null) {
-                                    viewHandlers.put(viewHandler, n);
-                                }
-                            } else if (STATE_MANAGER.equals(n.getLocalName())) {
-                                setStateManager(app, n);
-                            } else if (EL_RESOLVER.equals(n.getLocalName())) {
-                                addELResolver(associate, n);
-                            } else if (PROPERTY_RESOLVER.equals(n.getLocalName())) {
-                                addPropertyResolver(associate, n);
-                            } else if (VARIABLE_RESOLVER.equals(n.getLocalName())) {
-                                addVariableResolver(associate, n);
-                            } else if (DEFAULT_LOCALE.equals(n.getLocalName())) {
-                                setDefaultLocale(app, n);
-                            } else if (SUPPORTED_LOCALE.equals(n.getLocalName())) {
-                                addSupportedLocale(app, n);
-                            } else if (RESOURCE_BUNDLE.equals(n.getLocalName())) {
-                                addResouceBundle(associate, n);
-                            } else if (RESOURCE_HANDLER.equals(n.getLocalName())) {
-                                setResourceHandler(app, n);
-                            } else if (SYSTEM_EVENT_LISTENER.equals(n.getLocalName())) {
-                                addSystemEventListener(app, n);
-                            } else if (DEFAULT_VALIDATORS.equals(n.getLocalName())) {
-                                if (defaultValidatorIds == null) {
-                                    defaultValidatorIds = new LinkedHashSet<String>();
-                                } else {
-                                    defaultValidatorIds.clear();
-                                }
-                            } else if (VALIDATOR_ID.equals(n.getLocalName())) {
-                                defaultValidatorIds.add(getNodeText(n));
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        registerDefaultValidatorIds(app, defaultValidatorIds);
-
-        // perform any special processing for ViewHandlers...
-        processViewHandlers(app, viewHandlers);
-
-        // process NamedEvent annotations, if any
-        processAnnotations(NamedEvent.class);
-
-        // continue processing...
-        invokeNext(sc, documentInfos);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    /**
-     * If defaultValidatorIds is null, then no <default-validators> element appeared in any configuration file.
-     * In that case, add javax.faces.Bean if Bean Validation is available. If the <default-validators> appeared
-     * at least once, don't add the default (and empty <default-validator> element disabled default validators)
-     */
-    private void registerDefaultValidatorIds(Application application, LinkedHashSet<String> defaultValidatorIds) {
-        if (defaultValidatorIds == null) {
-            defaultValidatorIds = new LinkedHashSet<String>();
-            if (isBeanValidatorAvailable()) {
-                WebConfiguration webConfig = WebConfiguration.getInstance();
-                if (!webConfig.isOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.DisableDefaultBeanValidator)) {
-                    defaultValidatorIds.add("javax.faces.Bean");
-                }
-            }
-        }
-
-        for (String validatorId : defaultValidatorIds) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                        MessageFormat.format(
-                        "Calling Application.addDefaultValidatorId({0})",
-                        validatorId));
-            }
-            application.addDefaultValidatorId(validatorId);
-        }
-    }
-
-    static boolean isBeanValidatorAvailable() {
-        
-        boolean result = false;
-        final String beansValidationAvailabilityCacheKey = 
-                "javax.faces.BEANS_VALIDATION_AVAILABLE";
-        Map<String,Object> appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
-        
-        if (appMap.containsKey(beansValidationAvailabilityCacheKey)) {
-            result = (Boolean) appMap.get(beansValidationAvailabilityCacheKey);
-        } else {
-            try {
-                Thread.currentThread().getContextClassLoader().loadClass("javax.validation.MessageInterpolator");
-                appMap.put(beansValidationAvailabilityCacheKey, result = true);
-            } catch (ClassNotFoundException cnfe) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Unable to load Beans Validation");
-                }
-                appMap.put(beansValidationAvailabilityCacheKey, Boolean.FALSE);
-            } catch (Throwable t) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Unable to load Beans Validation");
-                }
-                appMap.put(beansValidationAvailabilityCacheKey, Boolean.FALSE);
-            }
-        }
-
-        return result;
-    }
-
-    private void setMessageBundle(Application application,
-                                  Node messageBundle) {
-
-        if (messageBundle != null) {
-            String bundle = getNodeText(messageBundle);
-            if (bundle != null) {
-
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format(
-                                    "Calling Application.setMessageBundle({0})",
-                                    bundle));
-                }
-                application.setMessageBundle(bundle);
-            }
-        }
-
-    }
-
-
-    private void setDefaultRenderKitId(Application application,
-                                       Node defaultId) {
-
-        if (defaultId != null) {
-            String id = getNodeText(defaultId);
-            if (id != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format(
-                                    "Calling Application.setDefaultRenderKitId({0})",
-                                    id));
-                }
-                application.setDefaultRenderKitId(id);
-            }
-        }
-
-    }
-
-    private void addActionListener(Application application,
-                                   Node actionListener) {
-
-        if (actionListener != null) {
-
-            String listener = getNodeText(actionListener);
-            if (listener != null) {
-                Object instance = createInstance(listener,
-                                                 ActionListener.class,
-                                                 application.getActionListener(),
-                                                 actionListener);
-                if (instance != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Calling Application.setActionListeners({0})",
-                                        listener));
-                    }
-                    application
-                         .setActionListener((ActionListener) instance);
-                }
-            }
-        }
-    }
-
-
-    private void setNavigationHandler(Application application,
-                                      Node navigationHandler) {
-
-        if (navigationHandler != null) {
-
-            String handler = getNodeText(navigationHandler);
-            if (handler != null) {
-                Class<?> rootType = findRootType(handler,
-                                                 navigationHandler,
-                                                 new Class[] {
-                                                       ConfigurableNavigationHandler.class,
-                                                       NavigationHandler.class
-                                                     });
-                Object instance = createInstance(handler,
-                                                 ((rootType != null) ? rootType : NavigationHandler.class),
-                                                 application.getNavigationHandler(),
-                                                 navigationHandler);
-                if (instance != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Calling Application.setNavigationHandlers({0})",
-                                        handler));
-                    }
-                    application
-                         .setNavigationHandler((NavigationHandler) instance);
-                }
-            }
-        }
-
-    }
-
-
-    private void setStateManager(Application application,
-                                 Node stateManager) {
-
-        if (stateManager != null) {
-            String manager = getNodeText(stateManager);
-            if (manager != null) {
-                Object instance = createInstance(manager,
-                                                 StateManager.class,
-                                                 application.getStateManager(),
-                                                 stateManager);
-                if (instance != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Calling Application.setStateManagers({0})",
-                                        manager));
-                    }
-                    application.setStateManager((StateManager) instance);
-                }
-            }
-        }
-
-    }
-
-    private void setViewHandler(Application application,
-                                Node viewHandler) {
-
-        if (viewHandler != null) {
-            String handler = getNodeText(viewHandler);
-            if (handler != null) {
-                Object instance = createInstance(handler,
-                                                 ViewHandler.class,
-                                                 application.getViewHandler(),
-                                                 viewHandler);
-                if (instance != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Calling Application.setViewHandler({0})",
-                                        handler));
-                    }
-                    application.setViewHandler((ViewHandler) instance);
-                }
-            }
-        }
-
-    }
-
-
-    private void addELResolver(ApplicationAssociate associate,
-                               Node elResolver) {
-
-        if (elResolver != null) {
-            if (associate != null) {
-                List<ELResolver> resolvers = associate
-                     .getELResolversFromFacesConfig();
-                if (resolvers == null) {
-                    //noinspection CollectionWithoutInitialCapacity
-                    resolvers = new ArrayList<ELResolver>();
-                    associate.setELResolversFromFacesConfig(resolvers);
-                }
-                String elResolverClass = getNodeText(elResolver);
-                if (elResolverClass != null) {
-                    Object elRes = createInstance(elResolverClass,
-                                                  ELResolver.class,
-                                                  null,
-                                                  elResolver);
-                    if (elRes != null) {
-                        if (LOGGER.isLoggable(Level.FINE)) {
-                            LOGGER.log(Level.FINE,
-                                       MessageFormat.format(
-                                            "Adding ''{0}'' to ELResolver chain",
-                                            elResolverClass));
-                        }
-                        resolvers.add((ELResolver) elRes);
-                    }
-                }
-            }
-        }
-
-    }
-
-
-    @SuppressWarnings("deprecation")
-    private void addPropertyResolver(ApplicationAssociate associate,
-                                     Node propertyResolver) {
-
-        if (propertyResolver != null) {
-            if (associate != null) {
-                Object resolverImpl = associate.getLegacyPRChainHead();
-                if (resolverImpl == null) {
-                    resolverImpl = new DummyPropertyResolverImpl();
-                }
-
-                String resolver = getNodeText(propertyResolver);
-                if (resolver != null) {
-                    resolverImpl = createInstance(resolver,
-                                                  PropertyResolver.class,
-                                                  resolverImpl,
-                                                  propertyResolver);
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Adding ''{0}'' to PropertyResolver chain",
-                                        resolverImpl));
-                    }
-                }
-                if (resolverImpl != null) {
-                    associate
-                         .setLegacyPRChainHead((PropertyResolver) resolverImpl);
-                }
-            }
-        }
-
-    }
-
-
-    @SuppressWarnings("deprecation")
-    private void addVariableResolver(ApplicationAssociate associate,
-                                     Node variableResolver) {
-
-        if (variableResolver != null) {
-            if (associate != null) {
-                Object resolverImpl = associate.getLegacyVRChainHead();
-                if (resolverImpl == null) {
-                    resolverImpl = new ChainAwareVariableResolver();
-                }
-                String resolver = getNodeText(variableResolver);
-                if (resolver != null) {
-                    resolverImpl = createInstance(resolver,
-                                                  VariableResolver.class,
-                                                  resolverImpl,
-                                                  variableResolver);
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Adding ''{0}'' to VariableResolver chain",
-                                        resolverImpl));
-                    }
-                }
-                if (resolverImpl != null) {
-                    associate
-                         .setLegacyVRChainHead((VariableResolver) resolverImpl);
-                }
-            }
-        }
-
-    }
-
-
-    private void setDefaultLocale(Application application,
-                                  Node defaultLocale) {
-        if (defaultLocale != null) {
-            String defLocale = getNodeText(defaultLocale);
-            if (defLocale != null) {
-                Locale def = Util.getLocaleFromString(defLocale);
-                if (def != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Setting default Locale to ''{0}''",
-                                        defLocale));
-                    }
-                    application.setDefaultLocale(def);
-                }
-            }
-        }
-    }
-
-
-    private void addSupportedLocale(Application application,
-                                    Node supportedLocale) {
-
-        if (supportedLocale != null) {
-            Set<Locale> sLocales = getCurrentLocales(application);
-            String locString = getNodeText(supportedLocale);
-            if (locString != null) {
-                Locale loc = Util.getLocaleFromString(locString);
-                if (loc != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Adding supported Locale ''{0}''",
-                                        locString));
-                    }
-                    sLocales.add(loc);
-                }
-                application.setSupportedLocales(sLocales);
-            }
-        }
-
-    }
-
-
-
-    private void addResouceBundle(ApplicationAssociate associate,
-                                  Node resourceBundle) {
-
-        if (resourceBundle != null) {
-            NodeList children = resourceBundle.getChildNodes();
-            if (children != null) {
-                String baseName = null;
-                String var = null;
-                List<Node> descriptions = null;
-                List<Node> displayNames = null;
-                for (int i = 0, size = children.getLength(); i < size; i++) {
-                    Node n = children.item(i);
-                    if (n.getNodeType() == Node.ELEMENT_NODE) {
-                        if (BASE_NAME.equals(n.getLocalName())) {
-                            baseName = getNodeText(n);
-                        } else if (VAR.equals(n.getLocalName())) {
-                            var = getNodeText(n);
-                        } else if (RES_DESCRIPTIONS.equals(n.getLocalName())) {
-                            if (descriptions == null) {
-                                descriptions = new ArrayList<Node>(2);
-                            }
-                            descriptions.add(n);
-                        } else if (RES_DISPLAY_NAMES.equals(n.getLocalName())) {
-                            if (displayNames == null) {
-                                displayNames = new ArrayList<Node>(2);
-                            }
-                            displayNames.add(n);
-                        }
-                    }
-                }
-                if ((baseName != null) && (var != null)) {
-                    associate.addResourceBundle(var,
-                                                new ApplicationResourceBundle(
-                                                     baseName,
-                                                     getTextMap(displayNames),
-                                                     getTextMap(descriptions)));
-                }
-            }
-        }
-    }
-
-
-    private Set<Locale> getCurrentLocales(Application application) {
-
-        //noinspection CollectionWithoutInitialCapacity
-        Set<Locale> supportedLocales = new HashSet<Locale>();
-        for (Iterator<Locale> i = application.getSupportedLocales();
-             i.hasNext();) {
-            supportedLocales.add(i.next());
-        }
-        return supportedLocales;
-
-    }
-
-
-    private void setResourceHandler(Application application, Node resourceHandler) {
-
-        if (resourceHandler != null) {
-            String handler = getNodeText(resourceHandler);
-            if (handler != null) {
-                Object instance = createInstance(handler,
-                                                 ResourceHandler.class,
-                                                 application.getResourceHandler(),
-                                                 resourceHandler);
-                if (instance != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Calling Application.setResourceHandler({0})",
-                                        handler));
-                    }
-                    application.setResourceHandler((ResourceHandler) instance);
-                }
-            }
-        }
-    }
-
-
-    private void addSystemEventListener(Application application,
-                                        Node systemEventListener) {
-
-        NodeList children = systemEventListener.getChildNodes();
-        String listenerClass = null;
-        String eventClass = null;
-        String sourceClass = null;
-        for (int j = 0, len = children.getLength(); j < len; j++) {
-            Node n = children.item(j);
-            if (n.getNodeType() == Node.ELEMENT_NODE) {
-                if (SYSTEM_EVENT_LISTENER_CLASS.equals(n.getLocalName())) {
-                    listenerClass = getNodeText(n);
-                } else if (SYSTEM_EVENT_CLASS.equals(n.getLocalName())) {
-                    eventClass = getNodeText(n);
-                } else if (SOURCE_CLASS.equals(n.getLocalName())) {
-                    sourceClass = getNodeText(n);
-                }
-            }
-        }
-        if (listenerClass != null) {
-            SystemEventListener selInstance = (SystemEventListener)
-                  createInstance(listenerClass,
-                                 SystemEventListener.class,
-                                 null,
-                                 systemEventListener);
-            if (selInstance != null) {
-                try {
-                    // If there is an eventClass, use it, otherwise use
-                    // SystemEvent.class
-                    //noinspection unchecked
-                    Class<? extends SystemEvent> eventClazz =
-                          (Class<? extends SystemEvent>) loadClass(eventClass, this, null);
-                    // If there is a sourceClass, use it, otherwise use null
-                    Class sourceClazz =
-                          (sourceClass != null && sourceClass.length() != 0)
-                          ? Util.loadClass(sourceClass, this.getClass())
-                          : null;
-                    application.subscribeToEvent(eventClazz,
-                                                 sourceClazz,
-                                                 selInstance);
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   "Subscribing for event {0} and source {1} using listener {2}",
-                                   new Object[]{
-                                         eventClazz.getName(),
-                                         ((sourceClazz != null) ? sourceClazz
-                                               .getName() : "ANY"),
-                                         selInstance.getClass().getName()
-                                   });
-                    }
-                } catch (ClassNotFoundException cnfe) {
-                    throw new ConfigurationException(cnfe);
-                }
-            }
-        }
-    }
-
-
-    private void processViewHandlers(Application app,
-                                     LinkedHashMap<String, Node> viewHandlers) {
-        // take special action on the ViewHandlers that have been
-        // configured for the application.  If any of the ViewHandlers
-        // is the FaceletViewHandler, don't install the 2.0
-        // FaceletViewHandler.  Make the application behave as 1.2
-        // unless they use our ViewHandler
-        WebConfiguration webConfig = WebConfiguration.getInstance();
-        if (!webConfig.isOptionEnabled(DisableFaceletJSFViewHandler)) {
-            if (viewHandlers.containsKey("com.sun.facelets.FaceletViewHandler")) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.application.legacy_facelet_viewhandler_detected",
-                               "com.sun.facelets.FaceletViewHandler");
-                }
-                webConfig.overrideContextInitParameter(DisableFaceletJSFViewHandler, true);
-            }
-        }
-        for (Node n : viewHandlers.values()) {
-            setViewHandler(app, n);
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/BehaviorConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/BehaviorConfigProcessor.java
deleted file mode 100644
index 5a4ef63..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/BehaviorConfigProcessor.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.config.Verifier;
-import com.sun.faces.config.DocumentInfo;
-import com.sun.faces.util.FacesLogger;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Document;
-
-import javax.faces.application.Application;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.component.behavior.FacesBehavior;
-import javax.servlet.ServletContext;
-import javax.xml.xpath.XPathExpressionException;
-import java.text.MessageFormat;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/behavior</code>.
- * </p>
- */
-public class BehaviorConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <p>/faces-config/behavior</p>
-     */
-    private static final String BEHAVIOR = "behavior";
-
-    /**
-     * <p>/faces-config/behavior/behavior-id</p>
-     */
-    private static final String BEHAVIOR_ID = "behavior-id";
-
-    /**
-     * <p>/faces-config/behavior/behavior-class</p>
-     */
-    private static final String BEHAVIOR_CLASS = "behavior-class";
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        // process annotated Behaviors first as Behaviors configured
-        // via config files take precedence
-        processAnnotations(FacesBehavior.class);
-
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing behavior elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace = document.getDocumentElement()
-                 .getNamespaceURI();
-            NodeList behaviors = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, BEHAVIOR);
-            if (behaviors != null && behaviors.getLength() > 0) {
-                addBehaviors(behaviors, namespace);
-            }
-        }
-        invokeNext(sc, documentInfos);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addBehaviors(NodeList behaviors, String namespace)
-    throws XPathExpressionException {
-
-        Application app = getApplication();
-        Verifier verifier = Verifier.getCurrentInstance();
-        for (int i = 0, size = behaviors.getLength(); i < size; i++) {
-            Node behavior = behaviors.item(i);
-
-            NodeList children = ((Element) behavior)
-                 .getElementsByTagNameNS(namespace, "*");
-            String behaviorId = null;
-            String behaviorClass = null;
-            for (int c = 0, csize = children.getLength(); c < csize; c++) {
-                Node n = children.item(c);
-                if (n.getNodeType() == Node.ELEMENT_NODE) {
-                    if (BEHAVIOR_ID.equals(n.getLocalName())) {
-                        behaviorId = getNodeText(n);
-                    } else if (BEHAVIOR_CLASS.equals(n.getLocalName())) {
-                        behaviorClass = getNodeText(n);
-                    }
-                }
-            }
-
-            if (behaviorId != null && behaviorClass != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format(
-                                    "Calling Application.addBehavior({0},{1})",
-                                    behaviorId,
-                                    behaviorClass));
-                }
-                if (verifier != null) {
-                    verifier.validateObject(Verifier.ObjectType.BEHAVIOR,
-                                            behaviorClass,
-                                            Behavior.class);
-                }
-                app.addBehavior(behaviorId, behaviorClass);
-            }
-
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/ComponentConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/ComponentConfigProcessor.java
deleted file mode 100644
index 332b3f3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/ComponentConfigProcessor.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.config.Verifier;
-import com.sun.faces.config.DocumentInfo;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.component.FacesComponent;
-import javax.servlet.ServletContext;
-import javax.xml.xpath.XPathExpressionException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.text.MessageFormat;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/component</code>.
- * </p>
- */
-public class ComponentConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-
-    /**
-     * <p>/faces-config/component</p>
-     */
-    private static final String COMPONENT = "component";
-
-    /**
-     * <p>/faces-config/component/component-type</p>
-     */
-    private static final String COMPONENT_TYPE = "component-type";
-
-    /**
-     * <p>/faces-config/component/component-class</p>
-     */
-    private static final String COMPONENT_CLASS = "component-class";
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])  @param sc
-     * @param documentInfos
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        // process annotated components first as components configured
-        // via config files take precedence
-        processAnnotations(FacesComponent.class);
-
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing component elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace = document.getDocumentElement()
-                 .getNamespaceURI();
-            NodeList components = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, COMPONENT);
-            if (components != null && components.getLength() > 0) {
-                addComponents(components, namespace);
-            }
-        }
-        invokeNext(sc, documentInfos);
-
-    }
-
-    
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addComponents(NodeList components, String namespace)
-    throws XPathExpressionException {
-
-        Application app = getApplication();
-        Verifier verifier = Verifier.getCurrentInstance();
-        for (int i = 0, size = components.getLength(); i < size; i++) {
-            Node componentNode = components.item(i);
-            NodeList children = ((Element) componentNode)
-                 .getElementsByTagNameNS(namespace, "*");
-            String componentType = null;
-            String componentClass = null;
-            for (int c = 0, csize = children.getLength(); c < csize; c++) {
-                Node n = children.item(c);
-                if (COMPONENT_TYPE.equals(n.getLocalName())) {
-                    componentType = getNodeText(n);
-                } else if (COMPONENT_CLASS.equals(n.getLocalName())) {
-                    componentClass = getNodeText(n);
-                }
-            }
-
-            if (componentType != null && componentClass != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format(
-                                    "Calling Application.addComponent({0},{1})",
-                                    componentType,
-                                    componentClass));
-                }
-                if (verifier != null) {
-                    verifier.validateObject(Verifier.ObjectType.COMPONENT,
-                                            componentClass,
-                                            UIComponent.class);
-                }
-                app.addComponent(componentType, componentClass);
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/ConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/ConfigProcessor.java
deleted file mode 100644
index 2abfa2a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/ConfigProcessor.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.config.DocumentInfo;
-
-import javax.servlet.ServletContext;
-
-/**
- * <p>
- *  This interface provides a CoR structure for procesing JSF configuration
- *  resources.
- * </p>
- */
-public interface ConfigProcessor {
-
-    /**
-     * <p>
-     *   Set the next <code>ConfigProcessor</code> to be invoked once
-     *   {@link ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])}
-     *   has completed.
-     * </p>
-     *
-     * @param nextProcessor the next processor in the chain to be invoked
-     */
-    public void setNext(ConfigProcessor nextProcessor);
-
-
-    /**
-     * <p>
-     *  Process the array of <code>Document</code>s.
-     * </p>
-     *
-     * @param sc the <code>ServletContext</code> for the application being configured
-     * @param documentInfos  @throws Exception if an error occurs during processing
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception;
-
-
-    /**
-     * <p>
-     *  Invoke the <code>ConfigProcess</code> specified by
-     *  a call to {@link ConfigProcessor#setNext(ConfigProcessor)}, if any.
-     * </p>
-     * @param sc the <code>ServletContext</code> for the application being configured
-     * @param documentInfos  @throws Exception if an error occurs invoking the next processor
-     */
-    public void invokeNext(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception;
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/ConverterConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/ConverterConfigProcessor.java
deleted file mode 100644
index f060691..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/ConverterConfigProcessor.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.Verifier;
-import com.sun.faces.config.DocumentInfo;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Document;
-
-import javax.faces.application.Application;
-import javax.faces.convert.Converter;
-import javax.faces.convert.FacesConverter;
-import javax.servlet.ServletContext;
-
-import java.text.MessageFormat;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined
- *  under <code>/faces-config/converter</code>.
- * </p>
- */
-public class ConverterConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <code>/faces-config/converter</code>
-     */
-    private static final String CONVERTER = "converter";
-
-    /**
-     * <code>/faces-config/converter/converter-id</code>
-     * (mutually exclusive with converter-for-class)
-     */
-    private static final String CONVERTER_ID
-         = "converter-id";
-
-    /**
-     * <code>/faces-config/converter/converter-for-class</code>
-     * (mutually exclusive with converter-id)
-     */
-    private static final String CONVERTER_FOR_CLASS
-         = "converter-for-class";
-
-    /**
-     * <code>/faces-config/converter/converter-class</code>
-     */
-    private static final String CONVERTER_CLASS
-         = "converter-class";
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        // process annotated converters first as converters configured
-        // via config files take precedence
-        processAnnotations(FacesConverter.class);
-
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing converter elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace = document.getDocumentElement()
-                 .getNamespaceURI();
-            NodeList nodes = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, CONVERTER);
-            if (nodes != null && nodes.getLength() > 0) {
-                addConverters(nodes, namespace);
-            }
-        }
-        invokeNext(sc, documentInfos);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addConverters(NodeList converters, String namespace) {
-
-        Application application = getApplication();
-        Verifier verifier = Verifier.getCurrentInstance();
-        for (int i = 0, size = converters.getLength(); i < size; i++) {
-            Node converter = converters.item(i);
-            NodeList children = ((Element) converter)
-                 .getElementsByTagNameNS(namespace, "*");
-            String converterId = null;
-            String converterClass = null;
-            String converterForClass = null;
-            for (int c = 0, csize = children.getLength(); c < csize; c++) {
-                Node n = children.item(c);
-                if (CONVERTER_ID.equals(n.getLocalName())) {
-                    converterId = getNodeText(n);
-                } else if (CONVERTER_CLASS.equals(n.getLocalName())) {
-                    converterClass = getNodeText(n);
-                } else if (CONVERTER_FOR_CLASS.equals(n.getLocalName())) {
-                    converterForClass = getNodeText(n);
-                }
-            }
-
-            if (converterId != null && converterClass != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format(
-                                    "[Converter by ID] Calling Application.addConverter({0}, {1}",
-                                    converterId,
-                                    converterClass));
-                }
-                if (verifier != null) {
-                    verifier.validateObject(Verifier.ObjectType.CONVERTER,
-                                            converterClass,
-                                            Converter.class);
-                }
-                application.addConverter(converterId, converterClass);
-            } else if (converterClass != null && converterForClass != null) {
-                try {
-                    Class cfcClass = Util.loadClass(converterForClass,
-                                                    this.getClass());
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "[Converter for Class] Calling Application.addConverter({0}, {1}",
-                                        converterForClass,
-                                        converterClass));
-                    }
-                    if (verifier != null) {
-                        verifier.validateObject(Verifier.ObjectType.CONVERTER,
-                                converterClass,
-                                Converter.class);
-                    }
-                    application.addConverter(cfcClass, converterClass);
-                } catch (ClassNotFoundException cnfe) {
-                    throw new ConfigurationException(cnfe);
-                }
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/FaceletTaglibConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/FaceletTaglibConfigProcessor.java
deleted file mode 100644
index 96fd5f0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/FaceletTaglibConfigProcessor.java
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.facelets.compiler.Compiler;
-import com.sun.faces.facelets.tag.TagLibrary;
-import com.sun.faces.facelets.tag.TagLibraryImpl;
-import com.sun.faces.facelets.tag.jsf.CompositeComponentTagLibrary;
-import com.sun.faces.facelets.util.ReflectionUtil;
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.DocumentInfo;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.text.MessageFormat;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.lang.reflect.Method;
-
-import javax.faces.context.FacesContext;
-import javax.faces.FacesException;
-import javax.servlet.ServletContext;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-taglib</code>.
- * </p>
- */
-public class FaceletTaglibConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-
-    /**
-     * <p>
-     * /facelet-taglib/library-class
-     * </p>
-     */
-    private static final String LIBRARY_CLASS = "library-class";
-
-    /**
-     * <p>
-     * /facelet-taglib/namespace
-     * </p>
-     */
-    private static final String TAGLIB_NAMESPACE = "namespace";
-
-    /**
-     * <p>
-     * /facelet-taglib/tag
-     * </p>
-     */
-    private static final String TAG = "tag";
-
-    /**
-     * <p>
-     * /facelet-taglib/function
-     * </p>
-     */
-    private static final String FUNCTION = "function";
-
-    /**
-     * <p>
-     * /facelet-taglib/tag/tag-name
-     * </p>
-     */
-    private static final String TAG_NAME = "tag-name";
-
-    /**
-     * <p>
-     * /facelet-taglib/tag/component
-     * </p>
-     */
-    private static final String COMPONENT = "component";
-
-    /**
-     * <p>
-     * /facelet-taglib/tag/validator
-     * </p>
-     */
-    private static final String VALIDATOR = "validator";
-
-    /**
-     * <p>
-     * /facelet-taglib/tag/converter
-     * </p>
-     */
-    private static final String CONVERTER = "converter";
-
-    /**
-     * <p>
-     * /facelet-taglib/tag/behavior
-     * </p>
-     */
-    private static final String BEHAVIOR = "behavior";
-    /**
-     * <p>
-     * /facelet-taglib/tag/source
-     * </p>
-     */
-    private static final String SOURCE = "source";
-
-    /**
-     * <p>
-     *   <ul>
-     *     <li>/facelet-taglib/tag/tag-handler</li>
-     *     <li>/facelet-taglib/tag/converter/handler-class</li>
-     *     <li>/facelet-taglib/tag/validator/handler-class</li>
-     *     <li>/facelet-taglib/tag/component/handler-class</li>
-     *   </ul>
-     * </p>
-     */
-    private static final String HANDLER_CLASS = "handler-class";
-
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/validator/validator-id
-     * </p>
-     */
-    private static final String VALIDATOR_ID = "validator-id";
-
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/converter/converter-id
-     * </p>
-     */
-    private static final String CONVERTER_ID = "converter-id";
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/behavior/behavior-id
-     * </p>
-     */
-    private static final String BEHAVIOR_ID = "behavior-id";
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/component/component-type
-     * </p>
-     */
-    private static final String COMPONENT_TYPE = "component-type";
-
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/component/renderer-type
-     * </p>
-     */
-    private static final String RENDERER_TYPE = "renderer-type";
-
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/function/function-name
-     * </p>
-     */
-    private static final String FUNCTION_NAME = "function-name";
-
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/function/function-class
-     * </p>
-     */
-    private static final String FUNCTION_CLASS = "function-class";
-
-
-    /**
-     * <p>
-     *  /facelet-taglib/tag/function/function-signature
-     * </p>
-     */
-    private static final String FUNCTION_SIGNATURE = "function-signature";
-
-
-    /**
-     * <p>
-     *  /facelet-taglib/composite-library-name
-     * </p>
-     */
-    private static final String COMPOSITE_LIBRARY_NAME = "composite-library-name";
-
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        ApplicationAssociate associate =
-              ApplicationAssociate.getInstance(FacesContext.getCurrentInstance().getExternalContext());
-        assert (associate != null);
-        Compiler compiler = associate.getCompiler();
-
-        for (int i = 0, length = documentInfos.length; i < length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                 "Processing facelet-taglibrary document: ''{0}''",
-                                 documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace =
-                  document.getDocumentElement().getNamespaceURI();
-            Element documentElement = document.getDocumentElement();
-            NodeList libraryClass =
-                  documentElement
-                        .getElementsByTagNameNS(namespace, LIBRARY_CLASS);
-            if (libraryClass != null && libraryClass.getLength() > 0) {
-                processTaglibraryClass(libraryClass, compiler);
-            } else {
-                processTagLibrary(documentElement, namespace, compiler);
-            }
-        }
-
-        invokeNext(sc, documentInfos);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void processTaglibraryClass(NodeList libraryClass,
-                                        Compiler compiler) {
-
-        Node n = libraryClass.item(0);
-        String className = getNodeText(n);
-        TagLibrary taglib = (TagLibrary) createInstance(className, n);
-        compiler.addTagLibrary(taglib);
-
-    }
-
-
-    private void processTagLibrary(Element documentElement,
-                                   String namespace,
-                                   Compiler compiler) {
-
-        NodeList children = documentElement.getChildNodes();
-        if (children != null && children.getLength() > 0) {
-            String taglibNamespace = null;
-            String compositeLibraryName = null;
-            for (int i = 0, ilen = children.getLength(); i < ilen; i++) {
-                Node n = children.item(i);
-                if (TAGLIB_NAMESPACE.equals(n.getLocalName())) {
-                    taglibNamespace = getNodeText(n);
-                } else if (COMPOSITE_LIBRARY_NAME.equals(n.getLocalName())) {
-                    compositeLibraryName = getNodeText(n);
-                }
-            }
-
-            TagLibraryImpl taglibrary;
-            if (compositeLibraryName != null) {
-                taglibrary = new CompositeComponentTagLibrary(taglibNamespace,
-                                                              compositeLibraryName);
-                compiler.addTagLibrary(taglibrary);
-            } else {
-                taglibrary = new TagLibraryImpl(taglibNamespace);
-
-            }
-            NodeList tags =
-                  documentElement.getElementsByTagNameNS(namespace, TAG);
-            processTags(documentElement, tags, taglibrary);
-            NodeList functions =
-                  documentElement
-                        .getElementsByTagNameNS(namespace, FUNCTION);
-            processFunctions(functions, taglibrary);
-            compiler.addTagLibrary(taglibrary);
-        }
-
-    }
-
-
-    private void processTags(Element documentElement,
-                             NodeList tags,
-                             TagLibraryImpl taglibrary) {
-
-        if (tags != null && tags.getLength() > 0) {
-            for (int i = 0, ilen = tags.getLength(); i < ilen; i++) {
-                Node tagNode = tags.item(i);
-                NodeList children = tagNode.getChildNodes();
-                String tagName = null;
-                NodeList component = null;
-                NodeList converter = null;
-                NodeList validator = null;
-                NodeList behavior = null;
-                Node source = null;
-                Node handlerClass = null;
-                for (int j = 0, jlen = children.getLength(); j < jlen; j++) {
-                    Node n = children.item(j);
-
-                    // process the nodes to see what children we have
-                    if (TAG_NAME.equals(n.getLocalName())) {
-                        tagName = getNodeText(n);
-                    } else if (COMPONENT.equals(n.getLocalName())) {
-                        component = n.getChildNodes();
-                    } else if (CONVERTER.equals(n.getLocalName())) {
-                        converter = n.getChildNodes();
-                    } else if (VALIDATOR.equals(n.getLocalName())) {
-                        validator = n.getChildNodes();
-                    } else if (BEHAVIOR.equals(n.getLocalName())) {
-                        behavior = n.getChildNodes();
-                    } else if (SOURCE.equals(n.getLocalName())) {
-                        source = n;
-                    } else if (HANDLER_CLASS.equals(n.getLocalName())) {
-                        handlerClass = n;
-                    }
-                }
-                if (component != null) {
-                    processComponent(component, taglibrary, tagName);
-                } else if (converter != null) {
-                    processConverter(converter, taglibrary, tagName);
-                } else if (validator != null) {
-                    processValidator(validator, taglibrary, tagName);
-                } else if (behavior != null) {
-                    processBehavior(behavior, taglibrary, tagName);
-                } else if (source != null) {
-                    processSource(documentElement, source, taglibrary, tagName);
-                } else if (handlerClass != null) {
-                    processHandlerClass(handlerClass, taglibrary, tagName);
-                }
-            }
-        }
-
-    }
-
-
-    private void processBehavior(NodeList behavior, TagLibraryImpl taglibrary,
-			String tagName) {
-        if (behavior != null && behavior.getLength() > 0) {
-            String behaviorId = null;
-            String handlerClass = null;
-            for (int i = 0, ilen = behavior.getLength(); i < ilen; i++) {
-                Node n = behavior.item(i);
-                if (BEHAVIOR_ID.equals(n.getLocalName())) {
-                    behaviorId = getNodeText(n);
-                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
-                    handlerClass = getNodeText(n);
-                }
-
-            }
-            if (handlerClass != null) {
-                try {
-                    Class<?> clazz = loadClass(handlerClass, this, null);
-                    taglibrary.putBehavior(tagName, behaviorId, clazz);
-                } catch (ClassNotFoundException e) {
-                    throw new ConfigurationException(e);
-                }
-
-            } else {
-                taglibrary.putBehavior(tagName, behaviorId);
-            }
-        }
-
-    }
-
-
-    private void processHandlerClass(Node handlerClass,
-                                     TagLibraryImpl taglibrary,
-                                     String name) {
-
-        String className = getNodeText(handlerClass);
-        if (className == null) {
-            throw new ConfigurationException("The tag named "+name+" from namespace "+taglibrary.getNamespace()+" has a null handler-class defined");
-        }
-        try {
-            Class<?> clazz;
-            try {
-                clazz = loadClass(className, this, null);
-                taglibrary.putTagHandler(name, clazz);
-            } catch (NoClassDefFoundError defNotFound) {
-                String message = defNotFound.toString();
-                if (message.contains("com/sun/facelets/")
-                    || message.contains("com.sun.facelets.")) {
-                    if (LOGGER.isLoggable(Level.WARNING)) {
-                        LOGGER.log(Level.WARNING,
-                                   "jsf.config.legacy.facelet.warning",
-                                   new Object[]{handlerClass,});
-                    }
-                } else {
-                    throw defNotFound;
-                }
-            }
-        } catch (ClassNotFoundException cnfe) {
-            throw new ConfigurationException(cnfe);
-        }
-
-    }
-
-
-    private void processSource(Element documentElement,
-                               Node source,
-                               TagLibraryImpl taglibrary,
-                               String name) {
-
-        String docURI = documentElement.getOwnerDocument().getDocumentURI();
-        String s = getNodeText(source);
-        try {
-            URL url = new URL(new URL(docURI), s);
-            taglibrary.putUserTag(name, url);
-        } catch (MalformedURLException e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-
-    private void processValidator(NodeList validator,
-                                  TagLibraryImpl taglibrary,
-                                  String name) {
-
-        if (validator != null && validator.getLength() > 0) {
-            String validatorId = null;
-            String handlerClass = null;
-            for (int i = 0, ilen = validator.getLength(); i < ilen; i++) {
-                Node n = validator.item(i);
-                if (VALIDATOR_ID.equals(n.getLocalName())) {
-                    validatorId = getNodeText(n);
-                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
-                    handlerClass = getNodeText(n);
-                }
-
-            }
-            if (handlerClass != null) {
-                try {
-                    Class<?> clazz = loadClass(handlerClass, this, null);
-                    taglibrary.putValidator(name, validatorId, clazz);
-                } catch (NoClassDefFoundError defNotFound) {
-                    String message = defNotFound.toString();
-                    if (message.contains("com/sun/facelets/")
-                        || message.contains("com.sun.facelets.")) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.config.legacy.facelet.warning",
-                                       new Object[]{handlerClass,});
-                        }
-                    } else {
-                        throw defNotFound;
-                    }
-                } catch (ClassNotFoundException e) {
-                    throw new ConfigurationException(e);
-                }
-
-            } else {
-                taglibrary.putValidator(name, validatorId);
-            }
-        }
-        
-    }
-
-    
-    private void processConverter(NodeList converter,
-                                  TagLibraryImpl taglibrary,
-                                  String name) {
-
-        if (converter != null && converter.getLength() > 0) {
-            String converterId = null;
-            String handlerClass = null;
-            for (int i = 0, ilen = converter.getLength(); i < ilen; i++) {
-                Node n = converter.item(i);
-
-                if (CONVERTER_ID.equals(n.getLocalName())) {
-                    converterId = getNodeText(n);
-                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
-                    handlerClass = getNodeText(n);
-                }
-
-            }
-            if (handlerClass != null) {
-                try {
-                    Class<?> clazz = loadClass(handlerClass, this, null);
-                    taglibrary.putConverter(name, converterId, clazz);
-                } catch (NoClassDefFoundError defNotFound) {
-                    String message = defNotFound.toString();
-                    if (message.contains("com/sun/facelets/")
-                        || message.contains("com.sun.facelets.")) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.config.legacy.facelet.warning",
-                                       new Object[]{handlerClass,});
-                        }
-                    } else {
-                        throw defNotFound;
-                    }
-                } catch (ClassNotFoundException e) {
-                    throw new ConfigurationException(e);
-                }
-
-            } else {
-                taglibrary.putConverter(name, converterId);
-            }
-        }
-
-    }
-
-
-    private void processComponent(NodeList component,
-                                  TagLibraryImpl taglibrary,
-                                  String name) {
-
-        if (component != null && component.getLength() > 0) {
-            String componentType = null;
-            String rendererType = null;
-            String handlerClass = null;
-            for (int i = 0, ilen = component.getLength(); i < ilen; i++) {
-                Node n = component.item(i);
-                if (COMPONENT_TYPE.equals(n.getLocalName())) {
-                    componentType = getNodeText(n);
-                } else if (RENDERER_TYPE.equals(n.getLocalName())) {
-                    rendererType = getNodeText(n);
-                } else if (HANDLER_CLASS.equals(n.getLocalName())) {
-                    handlerClass = getNodeText(n);
-                }
-            }
-            if (handlerClass != null) {
-                try {
-                    Class<?> clazz = loadClass(handlerClass, this, null);
-                    taglibrary.putComponent(name,
-                                            componentType,
-                                            rendererType,
-                                            clazz);
-                } catch (NoClassDefFoundError defNotFound) {
-                    String message = defNotFound.toString();
-                    if (message.contains("com/sun/facelets/")
-                        || message.contains("com.sun.facelets.")) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.config.legacy.facelet.warning",
-                                       new Object[]{handlerClass,});
-                        }
-                    } else {
-                        throw defNotFound;
-                    }
-                } catch (ClassNotFoundException e) {
-                    throw new ConfigurationException(e);
-                }
-            } else {
-                taglibrary.putComponent(name, componentType, rendererType);
-            }
-        }
-
-    }
-
-
-    private void processFunctions(NodeList functions, TagLibraryImpl taglibrary) {
-
-        if (functions != null && functions.getLength() > 0) {
-            for (int i = 0, ilen = functions.getLength(); i < ilen; i++) {
-                NodeList children = functions.item(i).getChildNodes();
-                String functionName = null;
-                String functionClass = null;
-                String functionSignature = null;
-                for (int j = 0, jlen = children.getLength(); j < jlen; j++) {
-                    Node n = children.item(j);
-
-                    if (FUNCTION_NAME.equals(n.getLocalName())) {
-                        functionName = getNodeText(n);
-                    } else if (FUNCTION_CLASS.equals(n.getLocalName())) {
-                        functionClass = getNodeText(n);
-                    } else if (FUNCTION_SIGNATURE.equals(n.getLocalName())) {
-                        functionSignature = getNodeText(n);
-                    }
-                }
-                try {
-                    Class<?> clazz = loadClass(functionClass, this, null);
-                    Method m = createMethod(clazz, functionSignature);
-                    taglibrary.putFunction(functionName, m);
-                } catch (Exception e) {
-                    throw new ConfigurationException(e);
-                }
-            }
-        }
-
-    }
-
-
-    private static Method createMethod(Class type, String signature) throws Exception {
-
-        int pos = signature.indexOf(' ');
-        if (pos == -1) {
-            throw new Exception("Must Provide Return Type: " + signature);
-        } else {
-            int pos2 = signature.indexOf('(', pos + 1);
-            if (pos2 == -1) {
-                throw new Exception(
-                      "Must provide a method name, followed by '(': "
-                      + signature);
-            } else {
-                String mn = signature.substring(pos + 1, pos2).trim();
-                pos = signature.indexOf(')', pos2 + 1);
-                if (pos == -1) {
-                    throw new Exception("Must close parentheses, ')' missing: "
-                                        + signature);
-                } else {
-                    String[] ps = signature.substring(pos2 + 1, pos).trim().split(",");
-                    Class[] pc;
-                    if (ps.length == 1 && "".equals(ps[0])) {
-                        pc = new Class[0];
-                    } else {
-                        pc = new Class[ps.length];
-                        for (int i = 0; i < pc.length; i++) {
-                            pc[i] = ReflectionUtil.forName(ps[i].trim());
-                        }
-                    }
-                    try {
-                        return type.getMethod(mn, pc);
-                    } catch (NoSuchMethodException e) {
-                        throw new Exception("No Function Found on type: "
-                                            + type.getName()
-                                            + " with signature: "
-                                            + signature);
-                    }
-
-                }
-            }
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/FactoryConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/FactoryConfigProcessor.java
deleted file mode 100644
index db48d7a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/FactoryConfigProcessor.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.DocumentInfo;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.application.InjectionApplicationFactory;
-import com.sun.faces.context.InjectionFacesContextFactory;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Document;
-
-import javax.faces.FactoryFinder;
-import javax.servlet.ServletContext;
-
-import java.text.MessageFormat;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.concurrent.atomic.AtomicInteger;
-
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/factory</code>.
- * </p>
- */
-public class FactoryConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <code>/faces-config/factory</code>
-     */
-    private static final String FACTORY = "factory";
-
-    /**
-     * <code>/faces-config/factory/application-factory</code>
-     */
-    private static final String APPLICATION_FACTORY = "application-factory";
-
-    /**
-     * <code>/faces-config/factory/exception-handler-factory</code>
-     */
-    private static final String EXCEPTION_HANDLER_FACTORY = "exception-handler-factory";
-
-    /**
-     * <code>/faces-config/factory/visit-context-factory</code>
-     */
-    private static final String VISIT_CONTEXT_FACTORY = "visit-context-factory";
-
-    /**
-     * <code>/faces-config/factory/view-declaration-language-factory</code>
-     */
-    private static final String VIEW_DECLARATION_LANGUAGE_FACTORY = "view-declaration-language-factory";
-
-    /**
-     * <code>/faces-config/factory/tag-handler-helper-factory</code>
-     */
-    private static final String TAG_HANDLER_DELEGATE_FACTORY = "tag-handler-delegate-factory";
-
-    /**
-     * <code>/faces-config/factory/faces-context-factory</code>
-     */
-    private static final String FACES_CONTEXT_FACTORY = "faces-context-factory";
-
-    /**
-     * <code>/faces-config/factory/partial-view-context-factory</code>
-     */
-    private static final String PARTIAL_VIEW_CONTEXT_FACTORY = "partial-view-context-factory";
-
-    /**
-     * <code>faces-config/factory/lifecycle-factory</code>
-     */
-    private static final String LIFECYCLE_FACTORY = "lifecycle-factory";
-
-    /**
-     * <code>/faces-config/factory/render-kit-factory</code>
-     */
-    private static final String RENDER_KIT_FACTORY = "render-kit-factory";
-
-    /**
-     * <code>/faces-config/factory/external-context-factory</code>
-     */
-    private static final String EXTERNAL_CONTEXT_FACTORY = "external-context-factory";
-
-    /**
-     * <code>Array of Factory names for post-configuration validation.</code>
-     */
-    private static final String[] FACTORY_NAMES = {
-          FactoryFinder.APPLICATION_FACTORY,
-          FactoryFinder.EXCEPTION_HANDLER_FACTORY,
-          FactoryFinder.EXTERNAL_CONTEXT_FACTORY,
-          FactoryFinder.FACES_CONTEXT_FACTORY,
-          FactoryFinder.LIFECYCLE_FACTORY,
-          FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
-          FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY,
-          FactoryFinder.RENDER_KIT_FACTORY,
-          FactoryFinder.VISIT_CONTEXT_FACTORY,
-          FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY
-    
-    };
-
-    private boolean validateFactories = true;
-
-
-    // ------------------------------------------------------------ Constructors
-
-    
-    public FactoryConfigProcessor() { }
-
-
-    // Only called by the cactus test code
-    public FactoryConfigProcessor(boolean validateFactories) {
-
-        this.validateFactories = validateFactories;
-
-    }
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        // track how many FacesContextFactory instances are being added
-        // for this application
-        AtomicInteger facesContextFactoryCount = new AtomicInteger(0);
-
-        // track how many ApplicationFactory instances are being added
-        // for this application
-        AtomicInteger applicationFactoryCount = new AtomicInteger(0);
-
-
-
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing factory elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace = document.getDocumentElement()
-                 .getNamespaceURI();
-            NodeList factories = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, FACTORY);
-            if (factories != null && factories.getLength() > 0) {
-                processFactories(factories,
-                                 namespace,
-                                 facesContextFactoryCount,
-                                 applicationFactoryCount);
-            }
-        }
-
-        // If there are more than one ApplicationFactory, FacesContextFactory,
-        // or ExternalContextFactory defined, we will push our Injection
-        // factories onto the factory list so that they are the top-level
-        // factory.  This allows us to inject the default instances into the
-        // custom Application, FacesContext, or ExternalContext
-        // implementations to get around version compatibility issues.
-        // This *must* be called *before* verifyFactoriesExist() as once that
-        // is called, we can't make any changes to the Factory delegation
-        // chain.
-        wrapFactories(applicationFactoryCount.get(),
-                      facesContextFactoryCount.get());
-        
-        // validate that we actually have factories at this point.
-        verifyFactoriesExist();
-
-        // invoke the next config processor
-        invokeNext(sc, documentInfos);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void processFactories(NodeList factories,
-                                  String namespace,
-                                  AtomicInteger fcCount,
-                                  AtomicInteger appCount) {
-
-        for (int i = 0, size = factories.getLength(); i < size; i++) {
-            Node factory = factories.item(i);
-            NodeList children = ((Element) factory)
-                 .getElementsByTagNameNS(namespace, "*");
-            for (int c = 0, csize = children.getLength(); c < csize; c++) {
-                Node n = children.item(c);
-                if (APPLICATION_FACTORY.equals(n.getLocalName())) {
-                    appCount.incrementAndGet();
-                    setFactory(FactoryFinder.APPLICATION_FACTORY,
-                               getNodeText(n));
-                } else if (EXCEPTION_HANDLER_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY,
-                               getNodeText(n));
-                } else if (VISIT_CONTEXT_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.VISIT_CONTEXT_FACTORY,
-                               getNodeText(n));
-                } else if (LIFECYCLE_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.LIFECYCLE_FACTORY,
-                               getNodeText(n));
-                } else if (FACES_CONTEXT_FACTORY.equals(n.getLocalName())) {
-                    fcCount.incrementAndGet();
-                    setFactory(FactoryFinder.FACES_CONTEXT_FACTORY,
-                               getNodeText(n));
-                } else if (RENDER_KIT_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.RENDER_KIT_FACTORY,
-                               getNodeText(n));
-                } else if (VIEW_DECLARATION_LANGUAGE_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
-                               getNodeText(n));
-                } else if (TAG_HANDLER_DELEGATE_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY,
-                               getNodeText(n));
-                } else if (EXTERNAL_CONTEXT_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.EXTERNAL_CONTEXT_FACTORY,
-                               getNodeText(n));
-                } else if (PARTIAL_VIEW_CONTEXT_FACTORY.equals(n.getLocalName())) {
-                    setFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY,
-                               getNodeText(n));
-                }
-            }
-        }
-
-    }
-
-
-    private static void setFactory(String factoryName, String factoryImpl) {
-
-        if (factoryName != null && factoryImpl != null) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Calling FactoryFinder.setFactory({0}, {1})",
-                                factoryName,
-                                factoryImpl));
-            }
-            FactoryFinder.setFactory(factoryName, factoryImpl);
-        }
-
-    }
-
-        
-    private void verifyFactoriesExist() {
-
-        if (validateFactories) {
-            for (int i = 0, len = FACTORY_NAMES.length; i < len; i++) {
-                try {
-                    FactoryFinder.getFactory(FACTORY_NAMES[i]);
-                } catch (Exception e) {
-                    throw new ConfigurationException(
-                          MessageFormat.format("Factory ''{0}'' was not configured properly.",
-                                               FACTORY_NAMES[i]), e);
-                }
-            }
-        }
-
-    }
-
-
-    private void wrapFactories(int appCount, int fcCount) {
-
-        if (appCount > 1) {
-            addInjectionApplicationFactory();
-        }
-        if (fcCount > 1) {
-            addInjectionFacesContextFactory();
-        }
-
-    }
-
-
-    /**
-     * Add the InjectionApplicationFactory as the top-level ApplicationFactory
-     * so that the default instances, provided by {@link com.sun.faces.application.ApplicationFactoryImpl}
-     * can be injected into the actual top-level FacesContext instance (that which
-     * is returned by the InjectionFacesContextFactory's delegate).
-     */
-    private void addInjectionApplicationFactory() {
-
-        FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
-                                 InjectionApplicationFactory.class.getName());
-        
-    }
-
-
-    /**
-     * Add the InjectionFacesContextFactory as the top-level FacesContextFactory
-     * so that the default instances, provided by {@link com.sun.faces.context.FacesContextFactoryImpl}
-     * can be injected into the actual top-level FacesContext instance (that which
-     * is returned by the InjectionFacesContextFactory's delegate).
-     */
-    private void addInjectionFacesContextFactory() {
-
-        FactoryFinder.setFactory(FactoryFinder.FACES_CONTEXT_FACTORY,
-                                 InjectionFacesContextFactory.class.getName());
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/LifecycleConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/LifecycleConfigProcessor.java
deleted file mode 100644
index 0c603d7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/LifecycleConfigProcessor.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.config.DocumentInfo;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Document;
-
-import javax.faces.FactoryFinder;
-import javax.faces.event.PhaseListener;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import javax.servlet.ServletContext;
-import java.text.MessageFormat;
-import java.util.Iterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/lifecycle</code>.
- * </p>
- */
-public class LifecycleConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <p>/faces-config/lifecycle</p>
-     */
-    private static final String LIFECYCLE = "lifecycle";
-
-    /**
-     * <p>/faces-config/lifecycle/phase-listener</p>
-     */
-    private static final String PHASE_LISTENER = "phase-listener";
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        LifecycleFactory factory = (LifecycleFactory)
-             FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing lifecycle elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace =
-                 document.getDocumentElement().getNamespaceURI();
-            NodeList lifecycles = 
-                 document.getElementsByTagNameNS(namespace, LIFECYCLE);
-            if (lifecycles != null) {
-                for (int c = 0, csize = lifecycles.getLength(); c < csize; c++) {
-                    Node n = lifecycles.item(c);
-                    if (n.getNodeType() == Node.ELEMENT_NODE) {
-                        NodeList listeners = ((Element) n).getElementsByTagNameNS(namespace,
-                                                                                  PHASE_LISTENER);
-                        addPhaseListeners(factory, listeners);
-                    }
-                }
-            }            
-        }
-        invokeNext(sc, documentInfos);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addPhaseListeners(LifecycleFactory factory,
-                                   NodeList phaseListeners) {
-
-        if (phaseListeners != null && phaseListeners.getLength() > 0) {
-            for (int i = 0, size = phaseListeners.getLength(); i < size; i++) {
-                Node plNode = phaseListeners.item(i);
-                String pl = getNodeText(plNode);
-                if (pl != null) {
-                    Object plInstance = createInstance(pl,
-                                                       PhaseListener.class,
-                                                       null,
-                                                       plNode);
-                    if (plInstance != null) {
-                        for (Iterator t = factory.getLifecycleIds(); t.hasNext();)
-                        {
-                            String lfId = (String) t.next();
-                            Lifecycle lifecycle = factory.getLifecycle(lfId);
-                            if (LOGGER.isLoggable(Level.FINE)) {
-                                LOGGER.log(Level.FINE,
-                                           MessageFormat.format(
-                                                "Adding PhaseListener ''{0}'' to lifecycle ''{0}}",
-                                                pl,
-                                                lfId));
-                            }
-                            lifecycle.addPhaseListener((PhaseListener) plInstance);
-                        }
-                    }
-                } 
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/ManagedBeanConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/ManagedBeanConfigProcessor.java
deleted file mode 100644
index 06ed1e0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/ManagedBeanConfigProcessor.java
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.mgbean.ManagedBeanInfo;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.TypedCollections;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.config.DocumentInfo;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Document;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.bean.ManagedBean;
-import javax.servlet.ServletContext;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/managed-bean</code>.
- * </p>
- */
-public class ManagedBeanConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <p>/faces-config/managed-bean</p>
-     */
-    private static final String MANAGED_BEAN =
-         "managed-bean";
-
-    /**
-     * <p>/faces-config/managed-bean/description</p>
-     */
-    private static final String DESCRIPTION =
-         "description";
-
-    /**
-     * <p>/faces-config/mananged-bean/managed-bean-name</p>
-     */
-    private static final String MGBEAN_NAME =
-         "managed-bean-name";
-
-    /**
-     * <p>/faces-config/managed-bean/mananged-bean-class</p>
-     */
-    private static final String MGBEAN_CLASS =
-         "managed-bean-class";
-
-    /**
-     * <p>/faces-config/managed-bean/managed-bean-scope</p>
-     */
-    private static final String MGBEAN_SCOPE =
-         "managed-bean-scope";
-
-    /**
-     * <p>/faces-config/managed-bean/managed-property</p>
-     */
-    private static final String MG_PROPERTY =
-         "managed-property";
-
-    /**
-     * <p>/faces-config/managed-bean/managed-property/property-name</p>
-     */
-    private static final String MG_PROPERTY_NAME =
-         "property-name";
-
-    /**
-     * <p>/faces-config/managed-bean/managed-property/property-class</p>
-     */
-    private static final String MG_PROPERTY_TYPE =
-         "property-class";
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/map-entries/map-entry/null-value</li>
-     *   <li>/faces-config/managed-bean/managed-property/null-value</li>
-     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry/null-value</li>
-     *   <li>/faces-config/managed-bean/list-entries/null-value</li>
-     *   <li>/faces-config/managed-bean/managed-property/list-entries/null-value</li>
-     * </ul>
-     * </p>
-     */
-    private static final String NULL_VALUE =
-         "null-value";
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/map-entries/map-entry/value</li>
-     *   <li>/faces-config/managed-bean/managed-property/value</li>
-     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry/value</li>
-     *   <li>/faces-config/managed-bean/list-entries/value</li>
-     *   <li>/faces-config/managed-bean/managed-property/list-entries/value</li>
-     * </ul>
-     * </p>
-     */
-    private static final String VALUE =
-         "value";
-
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry/key</li>
-     * </ul>
-     * </p>
-     */
-    private static final String KEY =
-          "key";
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/map-entries/key-class</li>
-     *   <li>/faces-config/managed-bean/managed-property/map-entries/key-class</li>
-     * </ul>
-     * </p>
-     */
-    private static final String MAP_KEY_CLASS =
-         "key-class";
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/map-entries/value-class</li>
-     *   <li>/faces-config/managed-bean/managed-property/map-entries/value-class</li>
-     *   <li>/faces-config/managed-bean/list-entries/value-class</li>
-     *   <li>/faces-config/managed-bean/managed-property/list-entries/value-class</li>
-     * </ul>
-     * </p>
-     */
-    private static final String VALUE_CLASS =
-         "value-class";
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/map-entries/map-entry</li>
-     *   <li>/faces-config/managed-bean/managed-property/map-entries/map-entry</li>
-     * </ul>
-     * </p>
-     */
-    private static final String MAP_ENTRY =
-         "map-entry";
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/map-entries</li>
-     *   <li>/faces-config/managed-bean/managed-property/map-entries</li>
-     * </ul>
-     * </p>
-     */
-    private static final String MAP_ENTRIES =
-         "map-entries";
-
-    /**
-     * <p>Handles:
-     * <ul>
-     *   <li>/faces-config/managed-bean/list-entries</li>
-     *   <li>/faces-config/managed-bean/managed-property/list-entries</li>     
-     * </ul>
-     * </p>
-     */
-    private static final String LIST_ENTRIES =
-         "list-entries";
-
-
-    /**
-     * <p>
-     *  <code>eager</code> attribute defined in the managed-bean element.
-     * </p>
-     */
-    private static final String EAGER_ATTRIBUTE = "eager";
-
-
-    private static final String DEFAULT_SCOPE = "request";
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        // process annotated managed beans first as managed beans configured
-        // via config files take precedence
-        processAnnotations(ManagedBean.class);
-        
-        BeanManager beanManager =
-              ApplicationAssociate.getInstance(sc).getBeanManager();
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing managed-bean elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace = document.getDocumentElement().getNamespaceURI();
-            NodeList managedBeans = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, MANAGED_BEAN);
-            if (managedBeans != null && managedBeans.getLength() > 0) {
-                for (int m = 0, size = managedBeans.getLength();
-                     m < size;
-                     m++) {
-                    addManagedBean(beanManager,
-                                   managedBeans.item(m));
-                }
-
-            }
-        }
-        beanManager.preProcessesBeans();
-        invokeNext(sc, documentInfos);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addManagedBean(BeanManager beanManager,
-                                Node managedBean) {
-
-        NodeList children = managedBean.getChildNodes();
-        String beanName = null;
-        String beanClass = null;
-        String beanScope = null;
-        ManagedBeanInfo.ListEntry listEntry = null;
-        ManagedBeanInfo.MapEntry mapEntry = null;
-        List<Node> managedProperties = null;
-        List<Node> descriptions = null;
-
-        for (int i = 0, size = children.getLength(); i < size; i++) {
-            Node n = children.item(i);
-            if (n.getNodeType() == Node.ELEMENT_NODE) {
-                if (MGBEAN_NAME.equals(n.getLocalName())) {
-                    beanName = getNodeText(n);
-                } else if (MGBEAN_CLASS.equals(n.getLocalName())) {
-                    beanClass = getNodeText(n);
-                } else if (MGBEAN_SCOPE.equals(n.getLocalName())) {
-                    beanScope = getNodeText(n);
-                    if (beanScope == null) {
-                        beanScope = DEFAULT_SCOPE;
-                    }
-                } else if (LIST_ENTRIES.equals(n.getLocalName())) {
-                    listEntry = buildListEntry(n);
-                } else if (MAP_ENTRIES.equals(n.getLocalName())) {
-                    mapEntry = buildMapEntry(n);
-                } else if (MG_PROPERTY.equals(n.getLocalName())) {
-                    if (managedProperties == null) {
-                        managedProperties = new ArrayList<Node>(size);
-                    }
-                    managedProperties.add(n);
-                } else if (DESCRIPTION.equals(n.getLocalName())) {
-                    if (descriptions == null) {
-                        descriptions = new ArrayList<Node>(4);
-                    }
-                    descriptions.add(n);
-                }
-            }
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-	        LOGGER.log(Level.FINE,
-	                   "Begin processing managed bean ''{0}''",
-	                   beanName);
-        }
-
-
-        List<ManagedBeanInfo.ManagedProperty> properties = null;
-        if (managedProperties != null && !managedProperties.isEmpty()) {
-             properties = new ArrayList<ManagedBeanInfo.ManagedProperty>(
-                 managedProperties.size());
-            for (Node managedProperty : managedProperties) {
-                properties.add(buildManagedProperty(managedProperty));
-            }
-        }
-
-        beanManager.register(new ManagedBeanInfo(beanName,
-                                                 beanClass,
-                                                 beanScope,
-                                                 isEager(managedBean,
-                                                         beanName,
-                                                         beanScope),
-                                                 mapEntry,
-                                                 listEntry,
-                                                 properties,
-                                                 getTextMap(descriptions)));
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-	        LOGGER.log(Level.FINE,
-	                   "Completed processing bean ''{0}''",
-	                   beanName);
-        }
-
-    }
-
-
-    private ManagedBeanInfo.ListEntry buildListEntry(Node listEntry) {
-
-        if (listEntry != null) {
-            String valueClass = "java.lang.String";
-            List<String> values = null;
-            NodeList children = listEntry.getChildNodes();
-            for (int i = 0, size = children.getLength(); i < size; i++) {
-                Node child = children.item(i);
-                if (child.getNodeType() == Node.ELEMENT_NODE) {
-                    if (VALUE_CLASS.equals(child.getLocalName())) {
-                        valueClass = getNodeText(child);
-                    } else if (VALUE.equals(child.getLocalName())) {
-                        if (values == null) {
-                            values = new ArrayList<String>(size);
-                        }
-                        values.add(getNodeText(child));
-                    } else if (NULL_VALUE.equals(child.getLocalName())) {
-                        if (values == null) {
-                            values = new ArrayList<String>(size);
-                        }
-                        values.add(ManagedBeanInfo.NULL_VALUE);
-                    }
-                }
-            }
-
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Created ListEntry valueClass={1}, values={3}",
-                                valueClass,
-                                (values != null && !values.isEmpty())
-                                ? values.toString()
-                                : "none"));
-            }
-            return (new ManagedBeanInfo.ListEntry(valueClass,
-                                                  (values == null)
-                                                  ? TypedCollections.dynamicallyCastList(Collections.emptyList(), String.class)
-                                                  : values));
-        }
-
-        return null;
-
-    }
-
-
-    private ManagedBeanInfo.MapEntry buildMapEntry(Node mapEntry) {
-
-        if (mapEntry != null) {
-            String valueClass = "java.lang.String";
-            String keyClass = "java.lang.String";
-            Map<String, String> entries = null;
-            NodeList children = mapEntry.getChildNodes();
-            for (int i = 0, size = children.getLength(); i < size; i++) {
-                Node child = children.item(i);
-                if (child.getNodeType() == Node.ELEMENT_NODE) {
-                    if (VALUE_CLASS.equals(child.getLocalName())) {
-                        valueClass = getNodeText(child);
-                    } else if (MAP_KEY_CLASS.equals(child.getLocalName())) {
-                        keyClass = getNodeText(child);
-                    } else if (MAP_ENTRY.equals(child.getLocalName())) {
-                        if (entries == null) {
-                            entries = new LinkedHashMap<String,String>(8, 1.0f);
-                        }
-                        NodeList c = child.getChildNodes();
-                        String key = null;
-                        String value = null;
-                        for (int j = 0, jsize = c.getLength(); j < jsize; j++) {
-                            Node node = c.item(j);
-                            if (node.getNodeType() == Node.ELEMENT_NODE) {
-                                if (KEY.equals(node.getLocalName())) {
-                                    key = getNodeText(node);
-                                } else if (VALUE.equals(node.getLocalName())) {
-                                    value = getNodeText(node);
-                                } else
-                                if (NULL_VALUE.equals(node.getLocalName())) {
-                                    value = ManagedBeanInfo.NULL_VALUE;
-                                }
-                            }
-                        }
-                        entries.put(key, value);
-                    }
-                }
-            }
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Created MapEntry keyClass={0}, valueClass={1}, entries={3}",
-                                keyClass,
-                                valueClass,
-                                (entries != null)
-                                ? entries.toString()
-                                : "none"));
-            }
-            return (new ManagedBeanInfo.MapEntry(keyClass,
-                                                 valueClass,
-                                                 entries));
-
-        }
-
-        return null;
-    }
-
-
-    private ManagedBeanInfo.ManagedProperty buildManagedProperty(Node managedProperty) {
-
-        if (managedProperty != null) {
-            String propertyName = null;
-            String propertyClass = null;
-            String value = null;
-            ManagedBeanInfo.MapEntry mapEntry = null;
-            ManagedBeanInfo.ListEntry listEntry = null;
-            NodeList children = managedProperty.getChildNodes();
-            for (int i = 0, size = children.getLength(); i < size; i++) {
-                Node child = children.item(i);
-                if (child.getNodeType() == Node.ELEMENT_NODE) {
-                    if (MG_PROPERTY_NAME.equals(child.getLocalName())) {
-                        propertyName = getNodeText(child);
-                    } else if (MG_PROPERTY_TYPE.equals(child.getLocalName())) {
-                        propertyClass = getNodeText(child);
-                    } else if (VALUE.equals(child.getLocalName())) {
-                        value = getNodeText(child);
-                    } else if (NULL_VALUE.equals(child.getLocalName())) {
-                        value = ManagedBeanInfo.NULL_VALUE;
-                    } else if (LIST_ENTRIES.equals(child.getLocalName())) {
-                        listEntry = buildListEntry(child);
-                    } else if (MAP_ENTRIES.equals(child.getLocalName())) {
-                        mapEntry = buildMapEntry(child);
-                    }
-                }
-            }
-
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Adding ManagedProperty propertyName={0}, propertyClass={1}, propertyValue={2}, hasMapEntry={3}, hasListEntry={4}",
-                                propertyName,
-                                ((propertyClass != null)
-                                 ? propertyClass
-                                 : "inferred"),
-                                value,
-                                (mapEntry != null),
-                                (listEntry != null)));
-            }
-            return new ManagedBeanInfo.ManagedProperty(propertyName,
-                                                       propertyClass,
-                                                       value,
-                                                       mapEntry,
-                                                       listEntry);
-        }
-
-        return null;
-    }
-
-
-    private boolean isEager(Node managedBean, String beanName, String scope) {
-
-        NamedNodeMap attributes = managedBean.getAttributes();
-        Node eagerNode = attributes.getNamedItem(EAGER_ATTRIBUTE);
-        boolean eager = false;
-        if (eagerNode != null) {
-            eager = Boolean.valueOf(getNodeText(eagerNode));
-            if (eager && (scope == null || !ELUtils.Scope.APPLICATION.toString().equals(scope))) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.configuration.illegal.eager.bean",
-                               new Object[]{beanName, scope});
-                }
-                eager = false;
-            }
-        }
-
-        return eager;
-
-    }
-   
-
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/NavigationConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/NavigationConfigProcessor.java
deleted file mode 100644
index cbd0b80..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/NavigationConfigProcessor.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.application.ApplicationAssociate;
-import javax.faces.application.NavigationCase;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.ConfigurableNavigationHandler;
-
-import com.sun.faces.util.FacesLogger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import javax.servlet.ServletContext;
-import javax.xml.xpath.XPathExpressionException;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.text.MessageFormat;
-
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.config.DocumentInfo;
-
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/managed-bean</code>.
- * </p>
- */
-public class NavigationConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <p>/faces-config/navigation-rule</p>
-     */
-    private static final String NAVIGATION_RULE = "navigation-rule";
-
-    /**
-     * <p>/faces-config/navigation-rule/from-view-id</p>
-     */
-    private static final String FROM_VIEW_ID = "from-view-id";
-
-    /**
-     * <p>/faces-config/navigation-rule/navigation-case</p>
-     */
-    private static final String NAVIGATION_CASE = "navigation-case";
-
-    /**
-     * <p>/faces-config/navigation-rule/navigation-case/from-action</p>
-     */
-    private static final String FROM_ACTION = "from-action";
-
-    /**
-     * <p>/faces-config/navigation-rule/navigation-case/from-outcome</p>
-     */
-    private static final String FROM_OUTCOME = "from-outcome";
-
-    /**
-     * <p>/faces-config/navigation-rule/navigation-case/if</p>
-     */
-    private static final String IF = "if";
-
-    /**
-     * <p>/faces-config/navigation-rule/navigation-case/to-view-id</p>
-     */
-    private static final String TO_VIEW_ID = "to-view-id";
-
-    /**
-     * <p>/faces-config/navigation-rule/navigation-case/redirect</p>
-     */
-    private static final String REDIRECT = "redirect";
-
-    /**
-     * <p>/faces-confg/navigation-rule/navigation-case/redirect/view-param</p>
-     */
-    private static final String VIEW_PARAM = "view-param";
-
-    /**
-     * <p>/faces-confg/navigation-rule/navigation-case/redirect/view-param/name</p>
-     */
-    private static final String VIEW_PARAM_NAME = "name";
-
-    /**
-     * <p>/faces-confg/navigation-rule/navigation-case/redirect/view-param/value</p>
-     */
-    private static final String VIEW_PARAM_VALUE = "value";
-
-    /**
-     * <p>/faces-config/navigation-rule/navigation-case/redirect[@include-page-params]</p>
-     */
-    private static final String INCLUDE_VIEW_PARAMS_ATTRIBUTE = "include-view-params";
-
-    /**
-     * <p>If <code>from-view-id</code> is not defined.<p>
-     */
-    private static final String FROM_VIEW_ID_DEFAULT = "*";
-
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        NavigationHandler handler = getApplication().getNavigationHandler();
-        for (DocumentInfo documentInfo : documentInfos) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                        MessageFormat.format(
-                                "Processing navigation-rule elements for document: ''{0}''",
-                                documentInfo.getSourceURL()));
-            }
-            Document document = documentInfo.getDocument();
-            String namespace = document.getDocumentElement()
-                    .getNamespaceURI();
-            NodeList navigationRules = document.getDocumentElement()
-                    .getElementsByTagNameNS(namespace, NAVIGATION_RULE);
-            if (navigationRules != null && navigationRules.getLength() > 0) {
-                addNavigationRules(navigationRules, handler, sc);
-            }
-
-        }
-        invokeNext(sc, documentInfos);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addNavigationRules(NodeList navigationRules,
-                                    NavigationHandler navHandler,
-                                    ServletContext sc)
-    throws XPathExpressionException {
-
-            for (int i = 0, size = navigationRules.getLength(); i < size; i++) {
-                Node navigationRule = navigationRules.item(i);
-                if (navigationRule.getNodeType() == Node.ELEMENT_NODE) {
-                    NodeList children = navigationRule.getChildNodes();
-                    String fromViewId = FROM_VIEW_ID_DEFAULT;
-                    List<Node> navigationCases = null;
-                    for (int c = 0, csize = children.getLength();
-                         c < csize;
-                         c++) {
-                        Node n = children.item(c);
-                        if (n.getNodeType() == Node.ELEMENT_NODE) {
-                            if (FROM_VIEW_ID.equals(n.getLocalName())) {
-                                String t = getNodeText(n);
-                                fromViewId = ((t == null)
-                                              ? FROM_VIEW_ID_DEFAULT
-                                              : t);
-                                if (!fromViewId.equals(FROM_VIEW_ID_DEFAULT) && fromViewId.charAt(0) != '/') {
-                                    if (LOGGER.isLoggable(Level.WARNING)) {
-                                    LOGGER.log(Level.WARNING,
-                                               "jsf.config.navigation.from_view_id_leading_slash",
-                                               new String[] { fromViewId });
-                                    }
-                                    fromViewId = '/' + fromViewId;
-                                }
-                            } else if (NAVIGATION_CASE.equals(n.getLocalName())) {
-                                if (navigationCases == null) {
-                                    navigationCases = new ArrayList<Node>(csize);
-                                }
-                                navigationCases.add(n);
-                            }
-                        }
-                    }
-
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Processing navigation rule with 'from-view-id' of ''{0}''",
-                                        fromViewId));
-                    }
-                    addNavigationCasesForRule(fromViewId,
-                                              navigationCases,
-                                              navHandler,
-                                              sc);
-                }
-            }
-    }
-
-
-    private void addNavigationCasesForRule(String fromViewId,
-                                           List<Node> navigationCases,
-                                           NavigationHandler navHandler,
-                                           ServletContext sc) {
-
-        if (navigationCases != null && !navigationCases.isEmpty()) {
-            ApplicationAssociate associate =
-                 ApplicationAssociate.getInstance(sc);
-
-            for (Node navigationCase : navigationCases) {
-                if (navigationCase.getNodeType() != Node.ELEMENT_NODE) {
-                    continue;
-                }
-                NodeList children = navigationCase.getChildNodes();
-                String outcome = null;
-                String action = null;
-                String condition = null;
-                String toViewId = null;
-                Map<String,List<String>> parameters = null;
-                boolean redirect = false;
-                boolean includeViewParams = false;
-                for (int i = 0, size = children.getLength(); i < size; i++) {
-                    Node n = children.item(i);
-                    if (n.getNodeType() == Node.ELEMENT_NODE) {
-                        if (FROM_OUTCOME.equals(n.getLocalName())) {
-                            outcome = getNodeText(n);
-                        } else if (FROM_ACTION.equals(n.getLocalName())) {
-                            action = getNodeText(n);
-                        } else if (IF.equals(n.getLocalName())) {
-                            String expression = getNodeText(n);
-                            if (ELUtils.isExpression(expression) && !ELUtils.isMixedExpression(expression)) {
-                                condition = expression;
-                            }
-                            else {
-                                if (LOGGER.isLoggable(Level.WARNING)) {
-                                    LOGGER.log(Level.WARNING,
-                                               "jsf.config.navigation.if_invalid_expression",
-                                               new String[] { expression, fromViewId });
-                                }
-                            }
-                        } else if (TO_VIEW_ID.equals(n.getLocalName())) {
-                            String toViewIdString = getNodeText(n);
-                            if (toViewIdString.charAt(0) != '/' && toViewIdString.charAt(0) != '#') {
-                                if (LOGGER.isLoggable(Level.WARNING)) {
-                                    LOGGER.log(Level.WARNING,
-                                               "jsf.config.navigation.to_view_id_leading_slash",
-                                               new String[] { toViewIdString,
-                                                              fromViewId });
-                                }
-                                toViewId = '/' + toViewIdString;
-                            } else {
-                                toViewId = toViewIdString;
-                            }
-                        } else if (REDIRECT.equals(n.getLocalName())) {
-                            parameters = processParameters(n.getChildNodes());
-                            includeViewParams = isIncludeViewParams(n);
-                            redirect = true;
-                        }
-                    }
-                }
-
-                NavigationCase cnc =
-                     new NavigationCase(fromViewId,
-                                        action,
-                                        outcome,
-                                        condition,
-                                        toViewId,
-                                        parameters,
-                                        redirect,
-                                        includeViewParams);
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format("Adding NavigationCase: {0}",
-                                                    cnc.toString()));
-                }
-
-                // if the top-level NavigationHandler is an instance of
-                // ConfigurableNavigationHandler, add the NavigationCases to
-                // that instance as well as adding them to the application associate.
-                // We have to add them to the ApplicationAssociate in the case
-                // where the top-level NavigationHandler may be custom and delegates
-                // to the default NavigationHandler implementation.  In 1.2, they
-                // could be guaranteed that the default implementation had all
-                // defined navigation mappings.
-                if (navHandler instanceof ConfigurableNavigationHandler) {
-                    ConfigurableNavigationHandler cnav = (ConfigurableNavigationHandler) navHandler;
-                    Set<NavigationCase> cases = cnav.getNavigationCases().get(fromViewId);
-                    if (cases == null) {
-                        cases = new LinkedHashSet<NavigationCase>();
-                        cnav.getNavigationCases().put(fromViewId, cases);
-                    }
-                    cases.add(cnc);
-                }
-                associate.addNavigationCase(cnc);
-                
-            }
-
-
-        }
-
-    }
-
-
-    private Map<String,List<String>> processParameters(NodeList children) {
-
-        Map<String,List<String>> parameters = null;
-
-        if (children.getLength() > 0) {
-            parameters = new LinkedHashMap<String,List<String>>(4, 1.0f);
-            for (int i = 0, size = children.getLength(); i < size; i++) {
-                Node n = children.item(i);
-                if (n.getNodeType() == Node.ELEMENT_NODE) {
-                    if (VIEW_PARAM.equals(n.getLocalName())) {
-                        String name = null;
-                        String value = null;
-                        NodeList params = n.getChildNodes();
-                        for (int j = 0, jsize = params.getLength(); j < jsize; j++) {
-                            Node pn = params.item(j);
-                            if (pn.getNodeType() == Node.ELEMENT_NODE) {
-                                if (VIEW_PARAM_NAME.equals(pn.getLocalName())) {
-                                    name = getNodeText(pn);
-                                }
-                                if (VIEW_PARAM_VALUE.equals(pn.getLocalName())) {
-                                    value = getNodeText(pn);
-                                }
-                            }
-                        }
-                        if (name != null) {
-                            List<String> values = parameters.get(name);
-                            if (values == null && value != null) {
-                                values = new ArrayList<String>(2);
-                                parameters.put(name, values);
-                            }
-                            if (values != null) {
-                                values.add(value);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return parameters;
-
-    }
-
-
-    private boolean isIncludeViewParams(Node n) {
-
-        return Boolean.valueOf(getNodeText(n.getAttributes().getNamedItem(INCLUDE_VIEW_PARAMS_ATTRIBUTE)));
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/RenderKitConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/RenderKitConfigProcessor.java
deleted file mode 100644
index f614a94..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/RenderKitConfigProcessor.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.DocumentInfo;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Element;
-
-import javax.faces.FactoryFinder;
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-import javax.faces.render.FacesRenderer;
-import javax.faces.render.FacesBehaviorRenderer;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.LinkedHashMap;
-import java.text.MessageFormat;
-import javax.faces.context.FacesContext;
-import javax.servlet.ServletContext;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/render-kit</code>.
- * </p>
- */
-public class RenderKitConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();   
-
-    /**
-     * <p>/faces-config/render-kit</p>
-     */
-    private static final String RENDERKIT = "render-kit";
-
-    /**
-     * <p>/faces-config/render-kit/render-kit-id</p>
-     */
-    private static final String RENDERKIT_ID = "render-kit-id";
-
-    /**
-     * <p>/faces-config/render-kit/render-kit-class</p>
-     */
-    private static final String RENDERKIT_CLASS = "render-kit-class";
-
-    /**
-     * <p>/faces-config/render-kit/renderer</p>
-     */
-    private static final String RENDERER = "renderer";
-
-    /**
-     * <p>/faces-config/render-kit/renderer/component-family</p>
-     */
-    private static final String RENDERER_FAMILY = "component-family";
-
-    /**
-     * <p>/faces-config/render-kit/renderer/renderer-type</p>
-     */
-    private static final String RENDERER_TYPE = "renderer-type";
-
-    /**
-     * <p>/faces-config/render-kit/renderer/renderer-class</p>
-     */
-    private static final String RENDERER_CLASS = "renderer-class";
-
-    /**
-     * <p>/faces-config/render-kit/client-behavior-renderer</p>
-     */
-    private static final String CLIENT_BEHAVIOR_RENDERER = "client-behavior-renderer";
-
-    /**
-     * <p>/faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-type</p>
-     */
-    private static final String CLIENT_BEHAVIOR_RENDERER_TYPE = "client-behavior-renderer-type";
-
-    /**
-     * <p>/faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-class</p>
-     */
-    private static final String CLIENT_BEHAVIOR_RENDERER_CLASS = "client-behavior-renderer-class";
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        Map<String,Map<Document,List<Node>>> renderers =
-              new LinkedHashMap<String,Map<Document,List<Node>>>();
-        Map<String,Map<Document,List<Node>>> behaviorRenderers =
-              new LinkedHashMap<String,Map<Document,List<Node>>>();
-        RenderKitFactory rkf = (RenderKitFactory)
-             FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing render-kit elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace = document.getDocumentElement()
-                 .getNamespaceURI();
-            NodeList renderkits = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, RENDERKIT);
-
-            if (renderkits != null && renderkits.getLength() > 0) {
-                addRenderKits(renderkits, document, renderers, behaviorRenderers, rkf);
-            }
-        }
-
-        // process annotated Renderers, ClientBehaviorRenderers first as Renderers configured
-        // via config files take precedence
-        processAnnotations(FacesRenderer.class);
-        processAnnotations(FacesBehaviorRenderer.class);
-
-        // now add the accumulated renderers to the RenderKits
-        for (Map.Entry<String,Map<Document,List<Node>>> entry : renderers.entrySet()) {
-            RenderKit rk = rkf.getRenderKit(null, entry.getKey());
-            if (rk == null) {
-                throw new ConfigurationException(
-                      MessageUtils.getExceptionMessageString(
-                            MessageUtils.RENDERER_CANNOT_BE_REGISTERED_ID,
-                            entry.getKey()));
-            }
-            
-            for (Map.Entry<Document,List<Node>> renderEntry : entry.getValue().entrySet()) {
-                addRenderers(rk, renderEntry.getKey(), renderEntry.getValue());
-            }
-        }
-        // now add the accumulated behavior renderers to the RenderKits
-        for (Map.Entry<String,Map<Document,List<Node>>> entry : behaviorRenderers.entrySet()) {
-            RenderKit rk = rkf.getRenderKit(null, entry.getKey());
-            if (rk == null) {
-                throw new ConfigurationException(
-                      MessageUtils.getExceptionMessageString(
-                            MessageUtils.RENDERER_CANNOT_BE_REGISTERED_ID,
-                            entry.getKey()));
-            }
-            
-            for (Map.Entry<Document,List<Node>> renderEntry : entry.getValue().entrySet()) {
-                addClientBehaviorRenderers(rk, renderEntry.getKey(), renderEntry.getValue());
-            }
-        }
-        invokeNext(sc, documentInfos);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addRenderKits(NodeList renderKits,
-                               Document owningDocument,
-                               Map<String,Map<Document,List<Node>>> renderers,
-                               Map<String,Map<Document,List<Node>>> behaviorRenderers,
-                               RenderKitFactory rkf) {
-
-        String namespace = owningDocument.getDocumentElement()
-                 .getNamespaceURI();
-        for (int i = 0, size = renderKits.getLength(); i < size; i++) {
-            Node renderKit = renderKits.item(i);
-            NodeList children = ((Element) renderKit)
-                 .getElementsByTagNameNS(namespace, "*");
-            String rkId = null;
-            String rkClass = null;
-            List<Node> renderersList =
-                 new ArrayList<Node>(children.getLength());
-            List<Node> behaviorRenderersList =
-                 new ArrayList<Node>(children.getLength());
-            for (int c = 0, csize = children.getLength(); c < csize; c++) {
-                Node n = children.item(c);
-                if (RENDERKIT_ID.equals(n.getLocalName())) {
-                    rkId = getNodeText(n);
-                } else if (RENDERKIT_CLASS.equals(n.getLocalName())) {
-                    rkClass = getNodeText(n);
-                } else if (RENDERER.equals(n.getLocalName())) {
-                    renderersList.add(n);
-                } else if (CLIENT_BEHAVIOR_RENDERER.equals(n.getLocalName())) {
-                    behaviorRenderersList.add(n);
-                }
-            }
-
-            rkId = ((rkId == null)
-                    ? RenderKitFactory.HTML_BASIC_RENDER_KIT
-                    : rkId);
-
-            if (rkClass != null) {
-                RenderKit previous = rkf.getRenderKit(FacesContext.getCurrentInstance(), 
-                        rkId);
-                RenderKit rk = (RenderKit) createInstance(rkClass,
-                                                          RenderKit.class,
-                                                          previous,
-                                                          renderKit);
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format(
-                                    "Calling RenderKitFactory.addRenderKit({0}, {1})",
-                                    rkId,
-                                    rkClass));
-                }
-                rkf.addRenderKit(rkId, rk);
-            }
-            Map<Document,List<Node>> existingRenderers = renderers.get(rkId);
-            if (existingRenderers != null) {
-                List<Node> list = existingRenderers.get(owningDocument);
-                if (list != null) {
-                    list.addAll(renderersList);
-                } else {
-                    existingRenderers.put(owningDocument, renderersList);
-                }
-            } else {
-                existingRenderers = new LinkedHashMap<Document,List<Node>>();
-                existingRenderers.put(owningDocument, renderersList);
-            }
-            renderers.put(rkId, existingRenderers);
-
-            Map<Document,List<Node>> existingBehaviorRenderers = behaviorRenderers.get(rkId);
-            if (existingBehaviorRenderers != null) {
-                List<Node> list = existingBehaviorRenderers.get(owningDocument);
-                if (list != null) {
-                    list.addAll(behaviorRenderersList);
-                } else {
-                    existingBehaviorRenderers.put(owningDocument, behaviorRenderersList);
-                }
-            } else {
-                existingBehaviorRenderers = new LinkedHashMap<Document,List<Node>>();
-                existingBehaviorRenderers.put(owningDocument, behaviorRenderersList);
-            }
-            behaviorRenderers.put(rkId, existingBehaviorRenderers);
-
-        }
-
-    }
-
-    private void addRenderers(RenderKit renderKit,
-                              Document owningDocument,
-                              List<Node> renderers) {
-
-        String namespace = owningDocument.getDocumentElement()
-                 .getNamespaceURI();
-        for (Node renderer : renderers) {
-            NodeList children = ((Element) renderer)
-                 .getElementsByTagNameNS(namespace, "*");
-            String rendererFamily = null;
-            String rendererType = null;
-            String rendererClass = null;
-            for (int i = 0, size = children.getLength(); i < size; i++) {
-                Node n = children.item(i);
-                if (RENDERER_FAMILY.equals(n.getLocalName())) {
-                    rendererFamily = getNodeText(n);
-                } else if (RENDERER_TYPE.equals(n.getLocalName())) {
-                    rendererType = getNodeText(n);
-                } else if (RENDERER_CLASS.equals(n.getLocalName())) {
-                    rendererClass = getNodeText(n);
-                }
-            }
-
-            if ((rendererFamily != null)
-                  && (rendererType != null)
-                  && (rendererClass != null)) {
-                Renderer r = (Renderer) createInstance(rendererClass,
-                                                       Renderer.class,
-                                                       null,
-                                                       renderer);
-                if (r != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Calling RenderKit.addRenderer({0},{1}, {2}) for RenderKit ''{3}''",
-                                        rendererFamily,
-                                        rendererType,
-                                        rendererClass,
-                                        renderKit.getClass()));
-                    }
-                    renderKit.addRenderer(rendererFamily, rendererType, r);
-                }
-            }
-        }
-
-    }
-
-    private void addClientBehaviorRenderers(RenderKit renderKit,
-                              Document owningDocument,
-                              List<Node> behaviorRenderers) {
-
-        String namespace = owningDocument.getDocumentElement()
-                 .getNamespaceURI();
-        for (Node behaviorRenderer : behaviorRenderers) {
-            NodeList children = ((Element) behaviorRenderer)
-                 .getElementsByTagNameNS(namespace, "*");
-            String behaviorRendererType = null;
-            String behaviorRendererClass = null;
-            for (int i = 0, size = children.getLength(); i < size; i++) {
-                Node n = children.item(i);
-                if (CLIENT_BEHAVIOR_RENDERER_TYPE.equals(n.getLocalName())) {
-                    behaviorRendererType = getNodeText(n);
-                } else if (CLIENT_BEHAVIOR_RENDERER_CLASS.equals(n.getLocalName())) {
-                    behaviorRendererClass = getNodeText(n);
-                }
-            }
-
-            if ((behaviorRendererType != null)
-                  && (behaviorRendererClass != null)) {
-                ClientBehaviorRenderer r = (ClientBehaviorRenderer) createInstance(behaviorRendererClass,
-                                                       ClientBehaviorRenderer.class,
-                                                       null,
-                                                       behaviorRenderer);                
-                if (r != null) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.log(Level.FINE,
-                                   MessageFormat.format(
-                                        "Calling RenderKit.addClientBehaviorRenderer({0},{1}, {2}) for RenderKit ''{2}''",
-                                        behaviorRendererType,
-                                        behaviorRendererClass,
-                                        renderKit.getClass()));
-                    }
-                    renderKit.addClientBehaviorRenderer(behaviorRendererType, r);
-                }
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/config/processor/ValidatorConfigProcessor.java b/jsf-ri/src/main/java/com/sun/faces/config/processor/ValidatorConfigProcessor.java
deleted file mode 100644
index 1c896be..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/config/processor/ValidatorConfigProcessor.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.processor;
-
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.Verifier;
-import com.sun.faces.config.DocumentInfo;
-import com.sun.faces.util.FacesLogger;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Document;
-
-import javax.faces.application.Application;
-import javax.faces.validator.Validator;
-import javax.faces.validator.FacesValidator;
-import javax.servlet.ServletContext;
-import javax.xml.xpath.XPathExpressionException;
-import java.text.MessageFormat;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.faces.validator.BeanValidator;
-
-/**
- * <p>
- *  This <code>ConfigProcessor</code> handles all elements defined under
- *  <code>/faces-config/valiator</code>.
- * </p>
- */
-public class ValidatorConfigProcessor extends AbstractConfigProcessor {
-
-    private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-    /**
-     * <p>/faces-config/validator</p>
-     */
-    private static final String VALIDATOR = "validator";
-
-    /**
-     * <p>/faces-config/component/validator-id</p>
-     */
-    private static final String VALIDATOR_ID = "validator-id";
-
-    /**
-     * <p>/faces-config/component/validator-class</p>
-     */
-    private static final String VALIDATOR_CLASS = "validator-class";
-    
-
-    // -------------------------------------------- Methods from ConfigProcessor
-
-
-    /**
-     * @see ConfigProcessor#process(javax.servlet.ServletContext,com.sun.faces.config.DocumentInfo[])
-     */
-    public void process(ServletContext sc, DocumentInfo[] documentInfos)
-    throws Exception {
-
-        // process annotated Validators first as Validators configured
-        // via config files take precedence
-        processAnnotations(FacesValidator.class);
-
-        for (int i = 0; i < documentInfos.length; i++) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           MessageFormat.format(
-                                "Processing validator elements for document: ''{0}''",
-                                documentInfos[i].getSourceURL()));
-            }
-            Document document = documentInfos[i].getDocument();
-            String namespace = document.getDocumentElement().getNamespaceURI();
-            NodeList validators = document.getDocumentElement()
-                 .getElementsByTagNameNS(namespace, VALIDATOR);
-            if (validators != null && validators.getLength() > 0) {
-                addValidators(validators, namespace);
-            }
-        }
-        processDefaultValidatorIds();
-
-        invokeNext(sc, documentInfos);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    private void processDefaultValidatorIds() {
-
-        Application app = getApplication();
-        Map<String,String> defaultValidatorInfo = app.getDefaultValidatorInfo();
-        for (Map.Entry<String,String> info : defaultValidatorInfo.entrySet()) {
-            String defaultValidatorId = info.getKey();
-            boolean found = false;
-            for (Iterator<String> registered = app.getValidatorIds(); registered.hasNext(); ) {
-                if (defaultValidatorId.equals(registered.next())) {
-                    found = true;
-                    break;
-                }
-            }
-            if (!found) {
-                String msg = MessageFormat.format("Default validator ''{0}'' does not reference a registered validator.", defaultValidatorId);
-                throw new ConfigurationException(msg);
-            }
-        }
-        
-    }
-
-    private void addValidators(NodeList validators, String namespace)
-    throws XPathExpressionException {
-
-        Application app = getApplication();
-        Verifier verifier = Verifier.getCurrentInstance();
-        for (int i = 0, size = validators.getLength(); i < size; i++) {
-            Node validator = validators.item(i);
-
-            NodeList children = ((Element) validator)
-                 .getElementsByTagNameNS(namespace, "*");
-            String validatorId = null;
-            String validatorClass = null;
-            for (int c = 0, csize = children.getLength(); c < csize; c++) {
-                Node n = children.item(c);
-                if (n.getNodeType() == Node.ELEMENT_NODE) {
-                    if (VALIDATOR_ID.equals(n.getLocalName())) {
-                        validatorId = getNodeText(n);
-                    } else if (VALIDATOR_CLASS.equals(n.getLocalName())) {
-                        validatorClass = getNodeText(n);
-                    }
-                }
-            }
-
-            if (validatorId != null && validatorClass != null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               MessageFormat.format(
-                                    "Calling Application.addValidator({0},{1})",
-                                    validatorId,
-                                    validatorClass));
-                }
-                
-                boolean doAdd = true;
-                if (validatorId.equals(BeanValidator.VALIDATOR_ID)) {
-                    doAdd = ApplicationConfigProcessor.isBeanValidatorAvailable();
-                }
-                
-                if (doAdd) {
-                    if (verifier != null) {
-                        verifier.validateObject(Verifier.ObjectType.VALIDATOR,
-                                validatorClass,
-                                Validator.class);
-                    }
-                    app.addValidator(validatorId, validatorClass);
-                }
-            }
-
-        }
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/AjaxExceptionHandlerImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/AjaxExceptionHandlerImpl.java
deleted file mode 100644
index 01f8080..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/AjaxExceptionHandlerImpl.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.ExceptionHandler;
-import javax.faces.context.ExceptionHandlerWrapper;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.event.PhaseId;
-
-import com.sun.faces.util.FacesLogger;
-
-
-/**
- * <p>
- * A specialized implementation of {@link ExceptionHandler} for JSF 2.0 that
- * handles exceptions by writing error information to the 
- * partial response.
- * </p>
- *
- */
-public class AjaxExceptionHandlerImpl extends ExceptionHandlerWrapper {
-
-    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
-    private static final String LOG_BEFORE_KEY =
-          "jsf.context.exception.handler.log_before";
-    private static final String LOG_AFTER_KEY =
-          "jsf.context.exception.handler.log_after";
-    private static final String LOG_KEY =
-          "jsf.context.exception.handler.log";
-
-    
-    private LinkedList<ExceptionQueuedEvent> unhandledExceptions;
-    private LinkedList<ExceptionQueuedEvent> handledExceptions;
-    private ExceptionQueuedEvent handled;
-    private ExceptionHandler exceptionHandler = null;
-
-
-    public AjaxExceptionHandlerImpl(ExceptionHandler handler) {
-        this.exceptionHandler = handler;
-    }
-
-    public ExceptionHandler getWrapped() {
-        return this.exceptionHandler;
-    }
-
-    /**
-     * @see ExceptionHandlerWrapper at getHandledExceptionQueuedEvent()
-     */
-    public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
-
-        return handled;
-
-    }
-
-    /**
-     * @see javax.faces.context.ExceptionHandlerWrapper#handle()
-     */
-    public void handle() throws FacesException {
-
-        for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext(); ) {
-            ExceptionQueuedEvent event = i.next();
-            ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
-            try {
-                Throwable t = context.getException();
-                if (isRethrown(t)) {
-                    handled = event;
-                    t.printStackTrace();
-                    Throwable unwrapped = getRootCause(t);
-                    if (unwrapped != null) {
-                        handlePartialResponseError(context.getContext(), unwrapped); 
-                    } else {
-                        if (t instanceof FacesException) {
-                            handlePartialResponseError(context.getContext(), t); 
-                        } else {
-                            handlePartialResponseError(context.getContext(), 
-                                    new FacesException(t.getMessage(), t));
-                        }
-                    }
-                } else {
-                    log(context);
-                }
-
-            } finally {
-                if (handledExceptions == null) {
-                    handledExceptions = new LinkedList<ExceptionQueuedEvent>();
-                }
-                handledExceptions.add(event);
-                i.remove();
-            }
-        }
-    }
-
-    /**
-     * @see javax.faces.context.ExceptionHandlerWrapper#processEvent(javax.faces.event.SystemEvent)
-     */
-    public void processEvent(SystemEvent event) throws AbortProcessingException {
-
-        if (event != null) {
-            if (unhandledExceptions == null) {
-                unhandledExceptions = new LinkedList<ExceptionQueuedEvent>();
-            }
-            unhandledExceptions.add((ExceptionQueuedEvent) event);
-        }
-
-    }
-
-    /**
-     * @see javax.faces.context.ExceptionHandlerWrapper#getUnhandledExceptionQueuedEvents()
-     */
-    public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
-
-        return ((unhandledExceptions != null)
-                    ? unhandledExceptions
-                    : Collections.<ExceptionQueuedEvent>emptyList());
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExceptionHandlerWrapper#getHandledExceptionQueuedEvents()
-     * @return
-     */
-    public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
-
-        return ((handledExceptions != null)
-                    ? handledExceptions
-                    : Collections.<ExceptionQueuedEvent>emptyList());
-
-    }
-
-
-
-    // --------------------------------------------------------- Private Methods
-
-     private void handlePartialResponseError(FacesContext context, Throwable t) {
-         if (context.getResponseComplete()) {
-             return; // don't write anything if the response is complete
-         }
-         try {
-
-             ExternalContext extContext = context.getExternalContext();
-             extContext.setResponseContentType("text/xml");
-             extContext.addResponseHeader("Cache-Control", "no-cache");
-             PartialResponseWriter writer = context.getPartialViewContext().getPartialResponseWriter();
-
-             writer.startDocument();
-             writer.startError(t.getClass().toString());
-             if (t.getCause() != null) {
-                 String msg = t.getCause().getMessage();
-                 writer.write(((msg != null) ? msg : ""));
-             } else {
-                 String msg = t.getMessage();
-                 writer.write(((msg != null) ? msg : ""));
-             }
-             writer.endError();
-             writer.endDocument();
-             context.responseComplete();
-         } catch (IOException ioe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           ioe.toString(),
-                           ioe);
-            }
-         }
-     }
-
-    private boolean isRethrown(Throwable t) {
-
-        return (!(t instanceof AbortProcessingException));
-
-    }
-
-    private void log(ExceptionQueuedEventContext exceptionContext) {
-
-        UIComponent c = exceptionContext.getComponent();
-        boolean beforePhase = exceptionContext.inBeforePhase();
-        boolean afterPhase = exceptionContext.inAfterPhase();
-        PhaseId phaseId = exceptionContext.getPhaseId();
-        Throwable t = exceptionContext.getException();
-        String key = getLoggingKey(beforePhase, afterPhase);
-        if (LOGGER.isLoggable(Level.SEVERE)) {
-            LOGGER.log(Level.SEVERE,
-                       key,
-                       new Object[] { t.getClass().getName(),
-                                      phaseId.toString(),
-                                      ((c != null) ? c.getClientId(exceptionContext.getContext()) : ""),
-                                      t.getMessage()});
-            LOGGER.log(Level.SEVERE, t.getMessage(), t);
-        }
-
-    }
-
-    private String getLoggingKey(boolean beforePhase, boolean afterPhase) {
-        if (beforePhase) {
-            return LOG_BEFORE_KEY;
-        } else if (afterPhase) {
-            return LOG_AFTER_KEY;
-        } else {
-            return LOG_KEY;
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/ApplicationMap.java b/jsf-ri/src/main/java/com/sun/faces/context/ApplicationMap.java
deleted file mode 100644
index e03510d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/ApplicationMap.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Enumeration;
-import java.util.Map;
-import java.util.Iterator;
-
-import javax.servlet.ServletContext;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getApplicationMap()
- */
-public class ApplicationMap extends BaseContextMap<Object> {
-
-    private final ServletContext servletContext;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ApplicationMap(ServletContext servletContext) {
-        this.servletContext = servletContext;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public void clear() {
-        for (Enumeration e = servletContext.getAttributeNames();
-             e.hasMoreElements(); ) {
-            servletContext.removeAttribute((String) e.nextElement());
-        }
-    }
-
-
-    // Supported by maps if overridden
-    @Override
-    public void putAll(Map t) {
-        for (Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            servletContext.setAttribute((String) entry.getKey(),
-                                        entry.getValue());
-        }
-    }
-
-
-    @Override
-    public Object get(Object key) {
-        Util.notNull("key", key);
-        return servletContext.getAttribute(key.toString());
-    }
-
-
-    @Override
-    public Object put(String key, Object value) {
-        Util.notNull("key", key);
-        Object result = servletContext.getAttribute(key);
-        servletContext.setAttribute(key, value);
-        return (result);
-    }
-
-
-    @Override
-    public Object remove(Object key) {
-        if (key == null) {
-            return null;
-        }
-        String keyString = key.toString();
-        Object result = servletContext.getAttribute(keyString);
-        servletContext.removeAttribute(keyString);
-        return (result);
-    }
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        return (servletContext.getAttribute(key.toString()) != null);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null || !(obj instanceof ApplicationMap))
-                   && super.equals(obj);
-    }
-
-
-    @Override
-    public int hashCode() {
-        int hashCode = 7 * servletContext.hashCode();
-        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
-            hashCode += i.next().hashCode();
-        }
-        return hashCode;
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    @SuppressWarnings("unchecked")
-    protected Iterator<Map.Entry<String, Object>> getEntryIterator() {
-        return new EntryIterator(servletContext.getAttributeNames());
-    }
-
-    @SuppressWarnings("unchecked")
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(servletContext.getAttributeNames());
-    }
-
-    @SuppressWarnings("unchecked")
-    protected Iterator<Object> getValueIterator() {
-        return new ValueIterator(servletContext.getAttributeNames());
-    }
-
-} // END ApplicationMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/BaseContextMap.java b/jsf-ri/src/main/java/com/sun/faces/context/BaseContextMap.java
deleted file mode 100644
index 3a33d20..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/BaseContextMap.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.AbstractMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.AbstractSet;
-import java.util.AbstractCollection;
-import java.util.Enumeration;
-
-/**
- * <p>
- * This is the base Map for all Map instances required by @{link ExternalContext}.
- * </p>
- */
-abstract class BaseContextMap<V> extends AbstractMap<String,V> {
-
-    private Set<Map.Entry<String, V>> entrySet;
-    private Set<String> keySet;
-    private Collection<V> values;
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    // Supported by maps if overridden
-    @Override
-    public void clear() {
-        throw new UnsupportedOperationException();
-    }
-
-
-    // Supported by maps if overridden
-    @Override
-    public void putAll(Map t) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public Set<Map.Entry<String, V>> entrySet() {
-        if (entrySet == null) {
-            entrySet = new EntrySet();
-        }
-
-        return entrySet;
-    }
-
-
-    @Override
-    public Set<String> keySet() {
-        if (keySet == null) {
-            keySet = new KeySet();
-        }
-
-        return keySet;
-    }
-
-
-    @Override
-    public Collection<V> values() {
-        if (values == null) {
-            values = new ValueCollection();
-        }
-
-        return values;
-    }
-
-
-    // Supported by maps if overridden
-    @Override
-    public V remove(Object key) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected boolean removeKey(Object key) {
-        return (this.remove(key) != null);
-    }
-
-
-    protected boolean removeValue(Object value) {
-        boolean valueRemoved = false;
-        if (value == null) {
-            return false;
-        }
-        if (containsValue(value)) {
-            for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
-                Map.Entry e = (Map.Entry) i.next();
-                if (value.equals(e.getValue())) {
-                    valueRemoved = (remove(e.getKey()) != null);
-                }
-            }
-        }
-        return valueRemoved;
-    }
-
-
-    protected abstract Iterator<Map.Entry<String, V>> getEntryIterator();
-    protected abstract Iterator<String> getKeyIterator();
-    protected abstract Iterator<V> getValueIterator();
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    abstract class BaseSet<E> extends AbstractSet<E> {
-
-        public int size() {
-            int size = 0;
-            for (Iterator<E> i = iterator(); i.hasNext(); size++) {
-                i.next();
-            }
-            return size;
-        }
-
-    }
-
-
-    class EntrySet extends BaseSet<Map.Entry<String, V>> {
-
-        public Iterator<Map.Entry<String, V>> iterator() {
-            return getEntryIterator();
-        }
-
-        @Override
-        public boolean remove(Object o) {
-            return o instanceof Map.Entry
-                   && removeKey(((Map.Entry) o).getKey());
-        }
-
-    }
-
-
-    class KeySet extends BaseSet<String> {
-
-        public Iterator<String> iterator() {
-            return getKeyIterator();
-        }
-
-
-        @Override
-        public boolean contains(Object o) {
-            return BaseContextMap.this.containsKey(o);
-        }
-
-        @Override
-        public boolean remove(Object o) {
-            return o instanceof String && removeKey(o);
-        }
-    }
-
-
-    class ValueCollection extends AbstractCollection<V> {
-
-        public int size() {
-            int size = 0;
-            for (Iterator i = iterator(); i.hasNext(); size++) {
-                i.next();
-            }
-            return size;
-        }
-        
-        public Iterator<V> iterator() {
-            return getValueIterator();
-        }
-
-        @Override
-        public boolean remove(Object o) {
-            return removeValue(o);
-        }
-    }
-
-
-    abstract class BaseIterator<E> implements Iterator<E> {
-
-        protected Enumeration e;
-        protected String currentKey;
-        protected boolean removeCalled = false;
-
-        BaseIterator(Enumeration e) {
-            this.e = e;
-        }
-
-        public boolean hasNext() {
-            return e.hasMoreElements();
-        }
-
-        public String nextKey() {
-            removeCalled = false;
-            currentKey = (String) e.nextElement();
-            return currentKey;
-        }
-    }
-
-
-    class EntryIterator extends BaseIterator<Map.Entry<String,V>> {
-
-        EntryIterator(Enumeration e) {
-            super(e);
-        }
-
-        public void remove() {
-            if (currentKey != null && !removeCalled) {
-                removeCalled = true;
-                removeKey(currentKey);
-            } else {
-                throw new IllegalStateException();
-            }
-        }
-
-        public Map.Entry<String,V> next() {
-            nextKey();
-            return new Entry<V>(currentKey, get(currentKey));
-        }
-    }
-
-
-    class KeyIterator extends BaseIterator<String> {
-
-        KeyIterator(Enumeration e) {
-            super(e);
-        }
-
-        public void remove() {
-            if (currentKey != null && !removeCalled) {
-                removeCalled = true;
-                removeKey(currentKey);
-            } else {
-                throw new IllegalStateException();
-            }
-        }
-
-        public String next() {
-            return nextKey();
-        }
-    }
-
-
-    class ValueIterator extends BaseIterator<V> {
-
-        ValueIterator(Enumeration e) {
-            super(e);
-        }
-
-        public void remove() {
-            if (currentKey != null && !removeCalled) {
-                removeCalled = true;
-                removeValue(get(currentKey));
-            } else {
-                throw new IllegalStateException();
-            }
-        }
-
-        public V next() {
-            nextKey();
-            return get(currentKey);
-        }
-    }
-
-
-    static class Entry<V> implements Map.Entry<String,V> {
-
-        // immutable Entry
-        private final String key;
-        private final V value;
-
-
-        Entry(String key, V value) {
-            this.key = key;
-            this.value = value;
-        }
-
-
-        public String getKey() {
-            return key;
-        }
-
-
-        public V getValue() {
-            return value;
-        }
-
-
-        // No support of setting the value
-        public V setValue(V value) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public int hashCode() {
-            return ((key == null ? 0 : key.hashCode()) ^
-                (value == null ? 0 : value.hashCode()));
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null || !(obj instanceof Map.Entry)) {
-                return false;
-            }
-
-            Map.Entry input = (Map.Entry) obj;
-            Object inputKey = input.getKey();
-            Object inputValue = input.getValue();
-
-            if (inputKey == key ||
-                (inputKey != null && inputKey.equals(key))) {
-                if (inputValue == value ||
-                    (inputValue != null && inputValue.equals(value))) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/ExceptionHandlerFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/ExceptionHandlerFactoryImpl.java
deleted file mode 100644
index 9558850..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/ExceptionHandlerFactoryImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import javax.faces.context.ExceptionHandler;
-import javax.faces.context.ExceptionHandlerFactory;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.application.ApplicationAssociate;
-
-/**
- * Default ExceptionHandlerFactory implementation.
- */
-public class ExceptionHandlerFactoryImpl extends ExceptionHandlerFactory {
-
-    private ApplicationAssociate associate;
-
-    // ------------------------------------ Methods from ExceptionHandlerFactory
-
-    
-    /**
-     * @see javax.faces.context.ExceptionHandlerFactory#getExceptionHandler()
-     */
-    public ExceptionHandler getExceptionHandler() {
-
-        FacesContext fc = FacesContext.getCurrentInstance();
-        if (fc.getPartialViewContext().isAjaxRequest()) {
-            return new AjaxExceptionHandlerImpl(new ExceptionHandlerImpl(Boolean.TRUE));
-        }
-        ApplicationAssociate associate = getAssociate(fc);
-        return new ExceptionHandlerImpl(((associate != null) ? associate.isErrorPagePresent() : Boolean.TRUE));
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private ApplicationAssociate getAssociate(FacesContext ctx) {
-
-        if (associate == null) {
-            associate = ApplicationAssociate.getCurrentInstance();
-            if (associate == null) {
-                associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
-            }
-        }
-        return associate;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/ExceptionHandlerImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/ExceptionHandlerImpl.java
deleted file mode 100644
index 3304514..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/ExceptionHandlerImpl.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.LinkedList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import javax.faces.FacesException;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.ExceptionHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.event.PhaseId;
-import javax.el.ELException;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-
-/**
- * <p>
- * The default implementation of {@link ExceptionHandler} for JSF 2.0.
- * </p>
- *
- * <p>
- * As an implementation note, if changes going forward are required here,
- * review the <code>ExceptionHandler</code> implementation within
- * <code>javax.faces.webapp.PreJsf2ExceptionHandlerFactory</code>.  The code
- * is, in most cases, quite similar.
- * </p>
- *
- */
-public class ExceptionHandlerImpl extends ExceptionHandler {
-
-    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
-    private static final String LOG_BEFORE_KEY =
-          "jsf.context.exception.handler.log_before";
-    private static final String LOG_AFTER_KEY =
-          "jsf.context.exception.handler.log_after";
-    private static final String LOG_KEY =
-          "jsf.context.exception.handler.log";
-
-    
-    private LinkedList<ExceptionQueuedEvent> unhandledExceptions;
-    private LinkedList<ExceptionQueuedEvent> handledExceptions;
-    private ExceptionQueuedEvent handled;
-    private boolean errorPagePresent;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ExceptionHandlerImpl() {
-
-        this.errorPagePresent = true;
-
-    }
-
-    
-    public ExceptionHandlerImpl(boolean errorPagePresent) {
-
-        this.errorPagePresent = errorPagePresent;
-        
-    }
-
-
-    // ------------------------------------------- Methods from ExceptionHandler
-
-
-    /**
-     * @see ExceptionHandler at getHandledExceptionQueuedEvent()
-     */
-    public ExceptionQueuedEvent getHandledExceptionQueuedEvent() {
-
-        return handled;
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExceptionHandler#handle()
-     */
-    @SuppressWarnings({"ThrowableInstanceNeverThrown"})
-    public void handle() throws FacesException {
-
-        for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext(); ) {
-            ExceptionQueuedEvent event = i.next();
-            ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
-            try {
-                Throwable t = context.getException();
-                if (isRethrown(t)) {
-                    handled = event;
-                    Throwable unwrapped = getRootCause(t);
-                    if (unwrapped != null) {
-                        throwIt(context.getContext(),
-                                new FacesException(unwrapped.getMessage(), unwrapped));
-                    } else {
-                        if (t instanceof FacesException) {
-                            throwIt(context.getContext(), (FacesException) t);
-                        } else {
-                            throwIt(context.getContext(),
-                                    new FacesException(t.getMessage(), t));
-                        }
-                    }
-                } else {
-                    log(context);
-                }
-
-            } finally {
-                if (handledExceptions == null) {
-                    handledExceptions = new LinkedList<ExceptionQueuedEvent>();
-                }
-                handledExceptions.add(event);
-                i.remove();               
-            }
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExceptionHandler#isListenerForSource(Object)
-     */
-    public boolean isListenerForSource(Object source) {
-
-        return (source instanceof ExceptionQueuedEventContext);
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExceptionHandler#processEvent(javax.faces.event.SystemEvent)
-     */
-    public void processEvent(SystemEvent event) throws AbortProcessingException {
-
-        if (event != null) {
-            if (unhandledExceptions == null) {
-                unhandledExceptions = new LinkedList<ExceptionQueuedEvent>();
-            }
-            unhandledExceptions.add((ExceptionQueuedEvent) event);
-        }
-
-    }
-
-
-    /**
-     * @see ExceptionHandler#getRootCause(Throwable)
-     */
-    public Throwable getRootCause(Throwable t) {
-
-        if (t == null) {
-            return null;
-        }
-        if (shouldUnwrap(t.getClass())) {
-            Throwable root = t.getCause();
-            if (root != null) {
-                Throwable tmp = getRootCause(root);
-                if (tmp == null) {
-                    return root;
-                } else {
-                    return tmp;
-                }
-            } else {
-                return t;
-            }
-        }
-        return t;
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.ExceptionHandler#getUnhandledExceptionQueuedEvents()
-     */
-    public Iterable<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents() {
-
-        return ((unhandledExceptions != null)
-                    ? unhandledExceptions
-                    : Collections.<ExceptionQueuedEvent>emptyList());
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExceptionHandler#getHandledExceptionQueuedEvents()
-     * @return
-     */
-    public Iterable<ExceptionQueuedEvent> getHandledExceptionQueuedEvents() {
-
-        return ((handledExceptions != null)
-                    ? handledExceptions
-                    : Collections.<ExceptionQueuedEvent>emptyList());
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void throwIt(FacesContext ctx, FacesException fe) {
-
-        boolean isDevelopment = ctx.isProjectStage(ProjectStage.Development);
-        if (isDevelopment && !errorPagePresent) {
-            // RELEASE_PENDING_2_1
-            // thThe error page here will be text/html which means not all device
-            // types are going to render this properly.  This should be addressed
-            // in 2.1
-            RenderKitUtils.renderHtmlErrorPage(ctx, fe);
-        } else {
-            if (isDevelopment) {
-                // store the view root where the exception occurred into the
-                // request scope so that the error page can display that component
-                // tree and not the one rendering the errorpage
-                ctx.getExternalContext().getRequestMap().put("com.sun.faces.error.view", ctx.getViewRoot());
-            }
-            throw fe;
-        }
-    }
-
-
-    /**
-     * @param c <code>Throwable</code> implementation class
-     * @return <code>true</code> if <code>c</code> is FacesException.class or
-     *  ELException.class
-     */
-    private boolean shouldUnwrap(Class<? extends Throwable> c) {
-
-        return (FacesException.class.equals(c) || ELException.class.equals(c));
-
-    }
-
-    
-    private boolean isRethrown(Throwable t) {
-
-        return (!(t instanceof AbortProcessingException));
-
-    }
-
-    private void log(ExceptionQueuedEventContext exceptionContext) {
-
-        UIComponent c = exceptionContext.getComponent();
-        boolean beforePhase = exceptionContext.inBeforePhase();
-        boolean afterPhase = exceptionContext.inAfterPhase();
-        PhaseId phaseId = exceptionContext.getPhaseId();
-        Throwable t = exceptionContext.getException();
-        String key = getLoggingKey(beforePhase, afterPhase);
-        if (LOGGER.isLoggable(Level.SEVERE)) {
-            LOGGER.log(Level.SEVERE,
-                       key,
-                       new Object[] { t.getClass().getName(),
-                                      phaseId.toString(),
-                                      ((c != null) ? c.getClientId(exceptionContext.getContext()) : ""),
-                                      t.getMessage()});
-            LOGGER.log(Level.SEVERE, t.getMessage(), t);
-        }
-
-    }
-
-    private String getLoggingKey(boolean beforePhase, boolean afterPhase) {
-        if (beforePhase) {
-            return LOG_BEFORE_KEY;
-        } else if (afterPhase) {
-            return LOG_AFTER_KEY;
-        } else {
-            return LOG_KEY;
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/ExternalContextFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/ExternalContextFactoryImpl.java
deleted file mode 100644
index 874e98e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/ExternalContextFactoryImpl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MessageUtils;
-
-import javax.faces.FacesException;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.ExternalContextFactory;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-public class ExternalContextFactoryImpl extends ExternalContextFactory {
-
-    public static final String DEFAULT_EXTERNAL_CONTEXT_KEY =
-          ExternalContextFactoryImpl.class.getName() + "_KEY";
-
-    
-    // ---------------------------------------- Methods from ExternalContextFactory
-
-
-    public ExternalContext getExternalContext(Object servletContext,
-                                        Object request,
-                                        Object response)
-
-    throws FacesException {
-
-        Util.notNull("servletContext", servletContext);
-        Util.notNull("request", request);
-        Util.notNull("response", response);
-
-        ExternalContext extContext = 
-              new ExternalContextImpl((ServletContext) servletContext,
-                                      (ServletRequest) request,
-                                      (ServletResponse) response);
-
-        if (request instanceof ServletRequest) {
-            ((ServletRequest) request).setAttribute(DEFAULT_EXTERNAL_CONTEXT_KEY, extContext);
-        }
-
-        return extContext;
-
-    }
-
-    // The testcase for this class is TestExternalContextFactory.java
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/ExternalContextImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/ExternalContextImpl.java
deleted file mode 100644
index 31644b1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/ExternalContextImpl.java
+++ /dev/null
@@ -1,976 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.io.OutputStream;
-import javax.faces.FacesException;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.Flash;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.context.ResponseWriter;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.Cookie;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.SendPoweredByHeader;
-import com.sun.faces.util.TypedCollections;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.context.flash.ELFlash;
-
-/**
- * <p>This implementation of {@link ExternalContext} is specific to the
- * servlet implementation.
- */
-public class ExternalContextImpl extends ExternalContext {
-
-    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
-
-    private ServletContext servletContext = null;
-    private ServletRequest request = null;
-    private ServletResponse response = null;
-
-    private Map<String,Object> applicationMap = null;
-    private Map<String,Object> sessionMap = null;
-    private Map<String,Object> requestMap = null;
-    private Map<String,String> requestParameterMap = null;
-    private Map<String,String[]> requestParameterValuesMap = null;
-    private Map<String,String> requestHeaderMap = null;
-    private Map<String,String[]> requestHeaderValuesMap = null;
-    private Map<String,Object> cookieMap = null;
-    private Map<String,String> initParameterMap = null;
-    private Map<String,String> fallbackContentTypeMap = null;
-    private ELFlash flash;
-
-    private enum ALLOWABLE_COOKIE_PROPERTIES {
-        domain,
-        maxAge,
-        path,
-        secure
-    }
-
-    static final Class theUnmodifiableMapClass =
-        Collections.unmodifiableMap(new HashMap<Object,Object>()).getClass();
-
-
-    // ------------------------------------------------------------ Constructors
-
-    
-    public ExternalContextImpl(ServletContext sc,
-                               ServletRequest request,
-                               ServletResponse response) {
-
-        // Validate the incoming parameters
-        Util.notNull("sc", sc);
-        Util.notNull("request", request);
-        Util.notNull("response", response);
-
-        // Save references to our context, request, and response
-        this.servletContext = sc;
-        this.request = request;        
-        this.response = response;
-        WebConfiguration config = WebConfiguration.getInstance(sc);
-        if (config.isOptionEnabled(SendPoweredByHeader)) {
-            ((HttpServletResponse) response).addHeader("X-Powered-By", "JSF/2.0");
-        }
-        fallbackContentTypeMap = new HashMap<String,String>(3, 1.0f);
-        fallbackContentTypeMap.put("js", "text/javascript");
-        fallbackContentTypeMap.put("css", "text/css");
-        fallbackContentTypeMap.put("groovy", "application/x-groovy");
-        fallbackContentTypeMap.put("properties", "text/plain");
-        
-    }
-
-
-    // -------------------------------------------- Methods from ExternalContext
-
-
-    /**
-     * @see ExternalContext#getSession(boolean)
-     */
-    public Object getSession(boolean create) {
-        return (((HttpServletRequest) request).getSession(create));
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getContext()
-     */
-    public Object getContext() {
-        return this.servletContext;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getContextName()
-     */
-    public String getContextName() {
-
-        if (servletContext.getMajorVersion() >= 3
-            || (servletContext.getMajorVersion() == 2
-                && servletContext.getMinorVersion() == 5)) {
-            return this.servletContext.getServletContextName();
-        } else {
-            // for servlet 2.4 support
-            return servletContext.getServletContextName();
-        }
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequest()
-     */
-    public Object getRequest() {
-        return this.request;
-    }
-
-
-    /**
-     * @see ExternalContext#setRequest(Object)
-     */
-    public void setRequest(Object request) {
-        if (request instanceof ServletRequest) {
-            this.request = (ServletRequest) request;
-            requestHeaderMap = null;
-            requestHeaderValuesMap = null;
-            requestHeaderValuesMap = null;
-            requestMap = null;
-            requestParameterMap = null;
-            requestParameterValuesMap = null;
-        }
-    }
-
-
-    /**
-     * @see ExternalContext#setRequestCharacterEncoding(String)
-     */
-    public void setRequestCharacterEncoding(String encoding) throws UnsupportedEncodingException {
-        request.setCharacterEncoding(encoding);
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResponse()
-     */
-    public Object getResponse() {
-        return this.response;
-    }
-
-
-    /**
-     * @see ExternalContext#setResponse(Object)
-     */
-    public void setResponse(Object response) {
-        if (response instanceof ServletResponse) {
-            this.response = (ServletResponse) response;
-        }
-    }
-
-
-    /**
-     * @see ExternalContext#setResponseCharacterEncoding(String)
-     */
-    public void setResponseCharacterEncoding(String encoding) {
-        response.setCharacterEncoding(encoding);
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getApplicationMap()
-     */
-    public Map<String,Object> getApplicationMap() {
-        if (applicationMap == null) {
-            applicationMap = new ApplicationMap(servletContext);
-        }
-        return applicationMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getSessionMap()
-     */
-    public Map<String,Object> getSessionMap() {
-        if (sessionMap == null) {
-            sessionMap = new SessionMap((HttpServletRequest) request,
-                                        FacesContext.getCurrentInstance()
-                                              .getApplication().getProjectStage());
-        }
-        return sessionMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestMap()
-     */
-    public Map<String,Object> getRequestMap() {
-        if (requestMap == null) {
-            requestMap = new RequestMap(this.request);
-        }
-        return requestMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestHeaderMap()
-     */
-    public Map<String,String> getRequestHeaderMap() {
-        if (null == requestHeaderMap) {
-            requestHeaderMap = 
-                Collections.unmodifiableMap(
-                    new RequestHeaderMap((HttpServletRequest) request));
-        }
-        return requestHeaderMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestHeaderValuesMap()
-     */
-    public Map<String,String[]> getRequestHeaderValuesMap() {
-        if (null == requestHeaderValuesMap) {
-            requestHeaderValuesMap = 
-                Collections.unmodifiableMap(
-                    new RequestHeaderValuesMap((HttpServletRequest) request));
-        }
-        return requestHeaderValuesMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestCookieMap()
-     */
-    public Map<String,Object> getRequestCookieMap() {
-        if (null == cookieMap) {
-            cookieMap =
-                Collections.unmodifiableMap(
-                    new RequestCookieMap((HttpServletRequest) request));
-        }
-        return cookieMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getInitParameterMap()
-     */
-    public Map<String,String> getInitParameterMap() {
-        if (null == initParameterMap) {
-            initParameterMap = 
-                Collections.unmodifiableMap(
-                    new InitParameterMap(servletContext));
-        }
-        return initParameterMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestParameterMap()
-     */
-    public Map<String,String> getRequestParameterMap() {
-        if (null == requestParameterMap) {
-            requestParameterMap = 
-                Collections.unmodifiableMap(
-                    new RequestParameterMap(request));
-        }
-        return requestParameterMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestParameterValuesMap()
-     */
-    public Map<String,String[]> getRequestParameterValuesMap() {
-        if (null == requestParameterValuesMap) {
-            requestParameterValuesMap = 
-                Collections.unmodifiableMap(
-                    new RequestParameterValuesMap(request));
-        }
-        return requestParameterValuesMap;
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestParameterNames()
-     */
-    public Iterator<String> getRequestParameterNames() {
-        final Enumeration namEnum = request.getParameterNames();
-
-        return new Iterator<String>() {
-            public boolean hasNext() {
-                return namEnum.hasMoreElements();
-            }
-
-
-            public String next() {
-                return (String) namEnum.nextElement();
-            }
-
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestLocale()
-     */
-    public Locale getRequestLocale() {
-        return request.getLocale();
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestLocales()
-     */
-    public Iterator<Locale> getRequestLocales() {
-        return (new LocalesIterator(request.getLocales()));
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestPathInfo()
-     */
-    public String getRequestPathInfo() {
-        return (((HttpServletRequest) request).getPathInfo());
-    }
-
-
-    /**
-     * @see ExternalContext#getRealPath(String)
-     */
-    @Override
-    public String getRealPath(String path) {
-        return servletContext.getRealPath(path);
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestContextPath()
-     */
-    public String getRequestContextPath() {
-        return (((HttpServletRequest) request).getContextPath());
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestServletPath()
-     */
-    public String getRequestServletPath() {
-        return (((HttpServletRequest) request).getServletPath());
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestCharacterEncoding()
-     */
-    @Override
-    public String getRequestCharacterEncoding() {
-        return (request.getCharacterEncoding());
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestContentType()
-     */
-    @Override
-    public String getRequestContentType() {
-        return (request.getContentType());
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestContentLength()
-     */
-    @Override
-    public int getRequestContentLength() {
-        return (request.getContentLength());
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResponseCharacterEncoding()
-     */
-    @Override
-    public String getResponseCharacterEncoding() {
-        return (response.getCharacterEncoding());
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResponseContentType()
-     */
-    public String getResponseContentType() {
-        return (response.getContentType());
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getInitParameter(String)
-     */
-    public String getInitParameter(String name) {
-        return servletContext.getInitParameter(name);
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResourcePaths(String)
-     */
-    public Set<String> getResourcePaths(String path) {
-        return TypedCollections.dynamicallyCastSet(servletContext.getResourcePaths(path), String.class);
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResourceAsStream(String)
-     */
-    public InputStream getResourceAsStream(String path) {
-        return servletContext.getResourceAsStream(path);
-    }
-
-
-    /**
-     * @see ExternalContext#getResource(String)
-     */
-    public URL getResource(String path) {
-        URL url;
-        try {
-            url = servletContext.getResource(path);
-        } catch (MalformedURLException e) {
-            return null;
-        }
-        return url;
-    }
-
-
-    /**
-     * @see ExternalContext#encodeActionURL(String)
-     */
-    public String encodeActionURL(String url) {
-        return ((HttpServletResponse) response).encodeURL(url);
-    }
-
-
-    /**
-     * @see ExternalContext#encodeResourceURL(String)
-     */
-    public String encodeResourceURL(String url) {
-        return ((HttpServletResponse) response).encodeURL(url);
-    }
-
-
-    /**
-     * @see ExternalContext#encodeNamespace(String)
-     */
-    public String encodeNamespace(String name) {
-        return name; // Do nothing for servlets
-    }
-
-
-    /**
-     * @see ExternalContext#dispatch(String)
-     */
-    public void dispatch(String requestURI) throws IOException, FacesException {
-        RequestDispatcher requestDispatcher = request.getRequestDispatcher(
-            requestURI);
-        if (requestDispatcher == null) {
-            ((HttpServletResponse) response).
-                    sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-        try {
-            requestDispatcher.forward(this.request, this.response);
-        } catch (ServletException se) {
-            throw new FacesException(se);
-        }
-    }
-
-
-    /**
-     * @see ExternalContext#redirect(String)
-     */
-    public void redirect(String requestURI) throws IOException {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        getELFlash().doLastPhaseActions(ctx, true);
-
-        if (ctx.getPartialViewContext().isPartialRequest()) {
-            PartialResponseWriter pwriter;
-            ResponseWriter writer = ctx.getResponseWriter();
-            if (writer instanceof PartialResponseWriter) {
-                pwriter = (PartialResponseWriter) writer;
-            } else {
-                pwriter = ctx.getPartialViewContext().getPartialResponseWriter();
-            }
-            setResponseContentType("text/xml");
-            setResponseCharacterEncoding("UTF-8");
-            addResponseHeader("Cache-Control", "no-cache");
-            pwriter.startDocument();
-            pwriter.redirect(requestURI);
-            pwriter.endDocument();
-        } else {
-            ((HttpServletResponse) response).sendRedirect(requestURI);
-        }
-        ctx.responseComplete();
-        
-    }
-
-
-    /**
-     * @see ExternalContext#log(String)
-     */
-    public void log(String message) {
-        servletContext.log(message);
-    }
-
-
-    /**
-     * @see ExternalContext#log(String, Throwable)
-     */
-    public void log(String message, Throwable throwable) {
-        servletContext.log(message, throwable);
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getAuthType()
-     */
-    public String getAuthType() {
-        return ((HttpServletRequest) request).getAuthType();
-    }
-
-    /**
-     * @see ExternalContext#getMimeType(String)
-     */
-    @Override
-    public String getMimeType(String file) {
-
-        String mimeType = servletContext.getMimeType(file);
-        if (mimeType == null) {
-            mimeType = getFallbackMimeType(file);
-        }
-        if (mimeType == null && LOGGER.isLoggable(Level.WARNING)) {
-            LOGGER.log(Level.WARNING,
-                       "jsf.externalcontext.no.mime.type.found",
-                       new Object[] { file });
-        }
-        return mimeType;
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRemoteUser()
-     */
-    public String getRemoteUser() {
-        return ((HttpServletRequest) request).getRemoteUser();
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getUserPrincipal()
-     */
-    public java.security.Principal getUserPrincipal() {
-        return ((HttpServletRequest) request).getUserPrincipal();
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#isUserInRole(String)
-     */
-    public boolean isUserInRole(String role) {
-        return ((HttpServletRequest) request).isUserInRole(role);
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#invalidateSession()
-     */
-    @Override
-    public void invalidateSession() {
-
-        HttpSession session = ((HttpServletRequest) request).getSession(false);
-        if (session != null) {
-            session.invalidate();
-        }
-
-    }
-
-
-    /**
-     * @see ExternalContext#addResponseCookie(String, String, java.util.Map)
-     * @param name
-     * @param value
-     * @param properties
-     */
-    @Override
-    public void addResponseCookie(String name,
-                                  String value,
-                                  Map<String,Object> properties) {
-
-        HttpServletResponse res = (HttpServletResponse) response;
-
-        Cookie cookie = new Cookie(name, value);
-        if (properties != null && properties.size() != 0) {
-            for (Map.Entry<String,Object> entry : properties.entrySet()) {
-                String key = entry.getKey();
-                ALLOWABLE_COOKIE_PROPERTIES p = ALLOWABLE_COOKIE_PROPERTIES.valueOf(key);
-                Object v = entry.getValue();
-                switch (p) {
-                    case domain:
-                        cookie.setDomain((String) v);
-                        break;
-                    case maxAge:
-                        cookie.setMaxAge((Integer) v);
-                        break;
-                    case path:
-                        cookie.setPath((String) v);
-                        break;
-                    case secure:
-                        cookie.setSecure((Boolean) v);
-                        break;
-                    default:
-                        throw new IllegalStateException(); // shouldn't happen
-                }
-            }
-        }
-        res.addCookie(cookie);
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResponseOutputStream()
-     */
-    @Override
-    public OutputStream getResponseOutputStream() throws IOException {
-
-        return response.getOutputStream();
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResponseOutputWriter()
-     */
-    @Override
-    public Writer getResponseOutputWriter() throws IOException {
-
-        return response.getWriter();
-        
-    }
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestScheme()
-     */
-    @Override
-    public String getRequestScheme() {
-
-        return request.getScheme();
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestServerName()
-     */
-    @Override
-    public String getRequestServerName() {
-
-        return request.getServerName();
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#getRequestServerPort()
-     */
-    @Override
-    public int getRequestServerPort() {
-
-        return request.getServerPort();
-
-    }
-
-
-    /**
-     * @see ExternalContext#setResponseContentType(String)
-     */
-    @Override
-    public void setResponseContentType(String contentType) {
-
-        response.setContentType(contentType);
-        
-    }
-
-
-    /**
-     * @see ExternalContext#setResponseHeader(String, String)
-     */
-    @Override
-    public void setResponseHeader(String name, String value) {
-
-        ((HttpServletResponse) response).setHeader(name, value);
-        
-    }
-
-
-    /**
-     * @see ExternalContext#addResponseHeader(String, String)
-     */
-    @Override
-    public void addResponseHeader(String name, String value) {
-
-        ((HttpServletResponse) response).addHeader(name, value);
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#setResponseBufferSize(int)
-     */
-    @Override
-    public void setResponseBufferSize(int size) {
-
-        response.setBufferSize(size);
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#isResponseCommitted()
-     */
-    @Override
-    public boolean isResponseCommitted() {
-
-        return response.isCommitted();
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#responseReset()
-     */
-    @Override
-    public void responseReset() {
-
-        response.reset();
-
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#responseSendError(int, String)
-     */
-    @Override
-    public void responseSendError(int statusCode, String message) throws IOException {
-
-        if (message == null) {
-            ((HttpServletResponse) response).sendError(statusCode);
-        } else {
-            ((HttpServletResponse) response).sendError(statusCode, message);
-        }
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.ExternalContext#setResponseStatus(int)
-     */
-    @Override
-    public void setResponseStatus(int statusCode) {
-
-        ((HttpServletResponse) response).setStatus(statusCode);
-
-    }
-
-    
-    /**
-     * @see javax.faces.context.ExternalContext#responseFlushBuffer()
-     */
-    @Override
-    public void responseFlushBuffer() throws IOException {
-        getELFlash().doLastPhaseActions(FacesContext.getCurrentInstance(), false);
-
-        response.flushBuffer();
-
-    }
-
-    /**
-     * @see javax.faces.context.ExternalContext#setResponseContentLength(int)
-     */
-    @Override
-    public void setResponseContentLength(int length) {
-
-        response.setContentLength(length);
-
-    }
-
-    /**
-     * @see javax.faces.context.ExternalContext#getResponseBufferSize()
-     * @return
-     */
-    @Override
-    public int getResponseBufferSize() {
-
-        return response.getBufferSize();
-
-    }
-
-    @Override
-    public String encodeBookmarkableURL(String baseUrl,
-                                        Map<String, List<String>> parameters) {
-
-        UrlBuilder builder = new UrlBuilder(baseUrl, getResponseCharacterEncoding());
-        builder.addParameters(parameters);
-        return builder.createUrl();
-
-    }
-
-    @Override
-    public String encodeRedirectURL(String baseUrl,
-                                    Map<String, List<String>> parameters) {
-
-        UrlBuilder builder = new UrlBuilder(baseUrl, getResponseCharacterEncoding());
-        builder.addParameters(parameters);
-        return builder.createUrl();
-        
-    }
-
-    /**
-     * @see javax.faces.context.ExternalContext#encodePartialActionURL(String)
-     * @return
-     */
-    @Override
-    public String encodePartialActionURL(String url) {
-        UrlBuilder builder = new UrlBuilder(url, getResponseCharacterEncoding());
-        return ((HttpServletResponse) response).encodeURL(builder.createUrl());
-    }
-
-    @Override
-    public Flash getFlash() {
-        return getELFlash();
-    }
-
-    private ELFlash getELFlash() {
-
-        if (null == flash) {
-            flash = ELFlash.getFlash(this, true);
-        }
-        return flash;
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    public String getFallbackMimeType(String file) {
-
-        if (file == null || file.length() == 0) {
-            return null;
-        }
-        int idx = file.lastIndexOf('.');
-        if (idx == -1) {
-            return null;
-        }
-        String extension = file.substring(idx + 1);
-        if (extension.length() == 0) {
-            return null;
-        }
-        return fallbackContentTypeMap.get(extension);
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class LocalesIterator implements Iterator<Locale> {
-
-        public LocalesIterator(Enumeration locales) {
-            this.locales = locales;
-        }
-
-
-        private Enumeration locales;
-
-
-        public boolean hasNext() {
-            return locales.hasMoreElements();
-        }
-
-
-        public Locale next() {
-            return (Locale) locales.nextElement();
-        }
-
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-}
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/FacesContextFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/FacesContextFactoryImpl.java
deleted file mode 100644
index 15a3f2e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/FacesContextFactoryImpl.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MessageUtils;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.context.ExceptionHandlerFactory;
-import javax.faces.context.ExternalContextFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.lifecycle.Lifecycle;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-public class FacesContextFactoryImpl extends FacesContextFactory {
-
-    
-
-    private ExceptionHandlerFactory exceptionHandlerFactory;
-    private ExternalContextFactory externalContextFactory;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public FacesContextFactoryImpl() {
-
-        exceptionHandlerFactory = (ExceptionHandlerFactory)
-              FactoryFinder.getFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY);
-        externalContextFactory = (ExternalContextFactory)
-              FactoryFinder.getFactory(FactoryFinder.EXTERNAL_CONTEXT_FACTORY);
-
-    }
-
-
-    // ---------------------------------------- Methods from FacesContextFactory
-
-
-    public FacesContext getFacesContext(Object sc,
-                                        Object request,
-                                        Object response,
-                                        Lifecycle lifecycle)
-    throws FacesException {
-
-        Util.notNull("sc", sc);
-        Util.notNull("request", request);
-        Util.notNull("response", response);
-        Util.notNull("lifecycle", lifecycle);
-        
-        FacesContext ctx =
-              new FacesContextImpl(
-                  externalContextFactory.getExternalContext(sc, request, response),
-                  lifecycle);
-
-        ctx.setExceptionHandler(exceptionHandlerFactory.getExceptionHandler());
-
-        return ctx;
-        
-    }
-
-    // The testcase for this class is TestSerlvetFacesContextFactory.java
-
-} // end of class FacesContextFactoryImpl
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/FacesContextImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/FacesContextImpl.java
deleted file mode 100644
index b2d2e57..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/FacesContextImpl.java
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import javax.el.ELContext;
-import javax.el.ELContextListener;
-import javax.el.ELContextEvent;
-import javax.faces.FactoryFinder;
-import javax.faces.context.ExceptionHandler;
-import javax.faces.event.PhaseId;
-import javax.faces.application.*;
-import javax.faces.application.FacesMessage.Severity;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialViewContext;
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-import javax.faces.context.PartialViewContextFactory;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.el.ELContextImpl;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-public class FacesContextImpl extends FacesContext {
-
-    private static final String POST_BACK_MARKER =
-          FacesContextImpl.class.getName() + "_POST_BACK";
-
-    // Queried by InjectionFacesContextFactory
-    private static final ThreadLocal<FacesContext> DEFAULT_FACES_CONTEXT =
-          new ThreadLocal<FacesContext>();
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.CONTEXT.getLogger();
-
-    private boolean released;
-
-    // BE SURE TO ADD NEW IVARS TO THE RELEASE METHOD
-    private ResponseStream responseStream = null;
-    private ResponseWriter responseWriter = null;
-    private ExternalContext externalContext = null;
-    private Application application = null;
-    private UIViewRoot viewRoot = null;
-    private ELContext elContext = null;
-    private RenderKitFactory rkFactory;
-    private RenderKit lastRk;
-    private String lastRkId;
-    private Severity maxSeverity;
-    private boolean renderResponse = false;
-    private boolean responseComplete = false;
-    private boolean validationFailed = false;
-    private Map<Object, Object> attributes;
-    private PhaseId currentPhaseId;
-    private PartialViewContext partialViewContext = null;
-    private ExceptionHandler exceptionHandler = null;
-
-    /**
-     * Store mapping of clientId to ArrayList of FacesMessage instances.  The
-     * null key is used to represent FacesMessage instances that are not
-     * associated with a clientId instance.
-     */
-    private Map<String, List<FacesMessage>> componentMessageLists;
-
-    // ----------------------------------------------------------- Constructors
-
-
-    public FacesContextImpl(ExternalContext ec, Lifecycle lifecycle) {
-        Util.notNull("ec", ec);
-        Util.notNull("lifecycle", lifecycle);
-        this.externalContext = ec;
-        setCurrentInstance(this);
-        DEFAULT_FACES_CONTEXT.set(this);
-        rkFactory = (RenderKitFactory)
-              FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-    }
-
-
-    // ---------------------------------------------- Methods from FacesContext
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getExternalContext()
-     */
-    public ExternalContext getExternalContext() {
-        assertNotReleased();
-        return externalContext;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getApplication()
-     */
-    public Application getApplication() {
-        assertNotReleased();
-        if (null != application) {
-            return application;
-        }
-        ApplicationFactory aFactory =
-              (ApplicationFactory) FactoryFinder.getFactory(
-                    FactoryFinder.APPLICATION_FACTORY);
-        application = aFactory.getApplication();
-        assert (null != application);
-        return application;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getExceptionHandler()
-     */
-    @Override
-    public ExceptionHandler getExceptionHandler() {
-        return exceptionHandler;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#setExceptionHandler(javax.faces.context.ExceptionHandler)
-     */
-    @Override
-    public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-        this.exceptionHandler = exceptionHandler;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getPartialViewContext()
-     */
-    public PartialViewContext getPartialViewContext() {
-
-        assertNotReleased();
-        if (partialViewContext == null) {
-            PartialViewContextFactory f = (PartialViewContextFactory)
-                  FactoryFinder.getFactory(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY);
-            partialViewContext = f.getPartialViewContext(this);
-        }
-        return partialViewContext;
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#isPostback()
-     */
-    @Override
-    public boolean isPostback() {
-
-        assertNotReleased();
-        Boolean postback = (Boolean) this.getAttributes().get(POST_BACK_MARKER);
-        if (postback == null) {
-            RenderKit rk = this.getRenderKit();
-            if (rk != null) {
-                postback = rk.getResponseStateManager().isPostback(this);
-            } else {
-                // ViewRoot hasn't been set yet, so calculate the RK
-                ViewHandler vh = this.getApplication().getViewHandler();
-                String rkId = vh.calculateRenderKitId(this);
-                postback = RenderKitUtils.getResponseStateManager(this, rkId)
-                      .isPostback(this);
-            }
-            this.getAttributes().put(POST_BACK_MARKER, postback);
-        }
-
-        return postback;
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getAttributes()
-     */
-    @Override
-    public Map<Object, Object> getAttributes() {
-
-        assertNotReleased();
-        if (attributes == null) {
-            attributes = new HashMap<Object, Object>();
-        }
-        return attributes;
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getELContext()
-     */
-    @Override
-    public ELContext getELContext() {
-        assertNotReleased();
-        if (elContext == null) {
-            Application app = getApplication();
-            elContext = new ELContextImpl(app.getELResolver());
-            elContext.putContext(FacesContext.class, this);
-            UIViewRoot root = this.getViewRoot();
-            if (null != root) {
-                elContext.setLocale(root.getLocale());
-            }
-            ELContextListener[] listeners = app.getELContextListeners();
-            if (listeners.length > 0) {
-                ELContextEvent event = new ELContextEvent(elContext);
-                for (ELContextListener listener: listeners) {
-                    listener.contextCreated(event);
-                }
-            }
-        }
-        return elContext;
-        
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getClientIdsWithMessages()
-     */
-    public Iterator<String> getClientIdsWithMessages() {
-        assertNotReleased();
-        return ((componentMessageLists == null)
-                ? Collections.<String>emptyList().iterator()
-                : componentMessageLists.keySet().iterator());
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getMaximumSeverity()
-     */
-    public Severity getMaximumSeverity() {
-        assertNotReleased();
-        Severity result = null;
-        if (componentMessageLists != null
-            && !(componentMessageLists.isEmpty())) {
-            for (Iterator<FacesMessage> i =
-                  new ComponentMessagesIterator(componentMessageLists);
-                 i.hasNext();) {
-                Severity severity = i.next().getSeverity();
-                if (result == null || severity.compareTo(result) > 0) {
-                    result = severity;
-                }
-                if (result == FacesMessage.SEVERITY_FATAL) {
-                    break;
-                }
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getMessageList()
-     */
-    @Override
-    public List<FacesMessage> getMessageList() {
-
-        assertNotReleased();
-
-        if (null == componentMessageLists) {
-            return Collections
-                  .unmodifiableList(Collections.<FacesMessage>emptyList());
-        } else {
-            List<FacesMessage> messages = new ArrayList<FacesMessage>();
-            for (List<FacesMessage> list : componentMessageLists.values()) {
-                messages.addAll(list);
-            }
-            return Collections.unmodifiableList(messages);
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getMessageList(String)
-     */
-    @Override
-    public List<FacesMessage> getMessageList(String clientId) {
-
-        assertNotReleased();
-
-        if (null == componentMessageLists) {
-            return Collections
-                  .unmodifiableList(Collections.<FacesMessage>emptyList());
-        } else {
-            List<FacesMessage> list = componentMessageLists.get(clientId);
-            return Collections.unmodifiableList((list != null)
-                                                ? list
-                                                : Collections.<FacesMessage>emptyList());
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getMessages()
-     */
-    public Iterator<FacesMessage> getMessages() {
-        assertNotReleased();
-        if (null == componentMessageLists) {
-            List<FacesMessage> emptyList = Collections.emptyList();
-            return (emptyList.iterator());
-        }
-
-        if (componentMessageLists.size() > 0) {
-            return new ComponentMessagesIterator(componentMessageLists);
-        } else {
-            List<FacesMessage> emptyList = Collections.emptyList();
-            return (emptyList.iterator());
-        }
-    }
-
-    /**
-     * @see FacesContext#getMessages(String)
-     */
-    public Iterator<FacesMessage> getMessages(String clientId) {
-        assertNotReleased();
-
-        // If no messages have been enqueued at all,
-        // return an empty List Iterator
-        if (null == componentMessageLists) {
-            List<FacesMessage> emptyList = Collections.emptyList();
-            return (emptyList.iterator());
-        }
-
-        List<FacesMessage> list = componentMessageLists.get(clientId);
-        if (list == null) {
-            List<FacesMessage> emptyList = Collections.emptyList();
-            return (emptyList.iterator());
-        }
-        return (list.iterator());
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getRenderKit()
-     */
-    public RenderKit getRenderKit() {
-        assertNotReleased();
-        UIViewRoot vr = getViewRoot();
-        if (vr == null) {
-            return (null);
-        }
-        String renderKitId = vr.getRenderKitId();
-
-        if (renderKitId == null) {
-            return null;
-        }
-
-        if (renderKitId.equals(lastRkId)) {
-            return lastRk;
-        } else {
-            lastRk = rkFactory.getRenderKit(this, renderKitId);
-            lastRkId = renderKitId;
-            return lastRk;
-        }
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getResponseStream()
-     */
-    public ResponseStream getResponseStream() {
-        assertNotReleased();
-        return responseStream;
-    }
-
-
-    /**
-     * @see FacesContext#setResponseStream(javax.faces.context.ResponseStream)
-     */
-    public void setResponseStream(ResponseStream responseStream) {
-        assertNotReleased();
-        Util.notNull("responseStrean", responseStream);
-        this.responseStream = responseStream;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getViewRoot()
-     */
-    public UIViewRoot getViewRoot() {
-        assertNotReleased();
-        return viewRoot;
-    }
-
-
-    /**
-     * @see FacesContext#setViewRoot(javax.faces.component.UIViewRoot)
-     */
-    public void setViewRoot(UIViewRoot root) {
-        assertNotReleased();
-        Util.notNull("root", root);
-
-        if (viewRoot != null && !viewRoot.equals(root)) {
-            Map<String, Object> viewMap = viewRoot.getViewMap(false);
-            if (viewMap != null) {
-                viewRoot.getViewMap().clear();
-            }
-        }
-
-        viewRoot = root;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getResponseWriter()
-     */
-    public ResponseWriter getResponseWriter() {
-        assertNotReleased();
-        return responseWriter;
-    }
-
-
-    /**
-     * @see FacesContext#setResponseWriter(javax.faces.context.ResponseWriter)
-     */
-    public void setResponseWriter(ResponseWriter responseWriter) {
-        assertNotReleased();
-        Util.notNull("responseWriter", responseWriter);
-        this.responseWriter = responseWriter;
-    }
-
-    /**
-     * @see FacesContext#addMessage(String, javax.faces.application.FacesMessage)
-     */
-    public void addMessage(String clientId, FacesMessage message) {
-        assertNotReleased();
-        // Validate our preconditions
-        Util.notNull("message", message);
-
-        if (maxSeverity == null) {
-            maxSeverity = message.getSeverity();
-        } else {
-            Severity sev = message.getSeverity();
-            if (sev.getOrdinal() > maxSeverity.getOrdinal()) {
-                maxSeverity = sev;
-            }
-        }
-
-        if (componentMessageLists == null) {
-            componentMessageLists =
-                  new LinkedHashMap<String, List<FacesMessage>>();
-        }
-
-        // Add this message to our internal queue
-        List<FacesMessage> list = componentMessageLists.get(clientId);
-        if (list == null) {
-            list = new ArrayList<FacesMessage>();
-            componentMessageLists.put(clientId, list);
-        }
-        list.add(message);
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Adding Message[sourceId=" +
-                        (clientId != null ? clientId : "<<NONE>>") +
-                        ",summary=" + message.getSummary() + ")");
-        }
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getCurrentPhaseId()
-     */
-    @Override
-    public PhaseId getCurrentPhaseId() {
-
-        assertNotReleased();
-        return currentPhaseId;
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#setCurrentPhaseId(javax.faces.event.PhaseId)
-     */
-    @Override
-    public void setCurrentPhaseId(PhaseId currentPhaseId) {
-
-        assertNotReleased();
-        this.currentPhaseId = currentPhaseId;
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#release()
-     */
-    public void release() {
-
-        released = true;
-        externalContext = null;
-        responseStream = null;
-        responseWriter = null;
-        componentMessageLists = null;
-        renderResponse = false;
-        responseComplete = false;
-        validationFailed = false;
-        viewRoot = null;
-        maxSeverity = null;
-        application = null;
-        currentPhaseId = null;
-        if (attributes != null) {
-            attributes.clear();
-            attributes = null;
-        }
-        partialViewContext = null;
-        exceptionHandler = null;
-        elContext = null;
-        rkFactory = null;
-        lastRk = null;
-        lastRkId = null;
-
-        // PENDING(edburns): write testcase that verifies that release
-        // actually works.  This will be important to keep working as
-        // ivars are added and removed on this class over time.
-
-        // Make sure to clear our ThreadLocal instance.
-        setCurrentInstance(null);
-
-        // remove our private ThreadLocal instance.
-        DEFAULT_FACES_CONTEXT.remove();
-
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#renderResponse()
-     */
-    public void renderResponse() {
-        assertNotReleased();
-        renderResponse = true;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#responseComplete()
-     */
-    public void responseComplete() {
-        assertNotReleased();
-        responseComplete = true;
-    }
-
-    /**
-     * @see javax.faces.context.FacesContext#validationFailed()
-     */
-    public void validationFailed() {
-        assertNotReleased();
-        validationFailed = true;
-    }
-
-    /**
-     * @see javax.faces.context.FacesContext#getRenderResponse()
-     */
-    public boolean getRenderResponse() {
-        assertNotReleased();
-        return renderResponse;
-    }
-
-
-    /**
-     * @see javax.faces.context.FacesContext#getResponseComplete()
-     */
-    public boolean getResponseComplete() {
-        assertNotReleased();
-        return responseComplete;
-    }
-
-    /**
-     * @see javax.faces.context.FacesContext#isValidationFailed()
-     */
-    public boolean isValidationFailed() {
-        assertNotReleased();
-        return validationFailed;
-    }
-
-    // --------------------------------------------------------- Public Methods
-
-
-    public static FacesContext getDefaultFacesContext() {
-
-        return DEFAULT_FACES_CONTEXT.get();
-
-    }
-
-    // -------------------------------------------------------- Private Methods
-
-
-    @SuppressWarnings({"FinalPrivateMethod"})
-    private final void assertNotReleased() {
-        if (released) {
-            throw new IllegalStateException();
-        }
-    }
-
-    
-    // ---------------------------------------------------------- Inner Classes
-
-
-    private static final class ComponentMessagesIterator
-          implements Iterator<FacesMessage> {
-
-
-        private Map<String, List<FacesMessage>> messages;
-        private int outerIndex = -1;
-        private int messagesSize;
-        private Iterator<FacesMessage> inner;
-        private Iterator<String> keys;
-
-        // ------------------------------------------------------- Constructors
-
-
-        ComponentMessagesIterator(Map<String, List<FacesMessage>> messages) {
-
-            this.messages = messages;
-            messagesSize = messages.size();
-            keys = messages.keySet().iterator();
-
-        }
-
-        // ---------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            if (outerIndex == -1) {
-                // pop our first List, if any;
-                outerIndex++;
-                inner = messages.get(keys.next()).iterator();
-
-            }
-            while (!inner.hasNext()) {
-                outerIndex++;
-                if ((outerIndex) < messagesSize) {
-                    inner = messages.get(keys.next()).iterator();
-                } else {
-                    return false;
-                }
-            }
-            return inner.hasNext();
-
-        }
-
-        public FacesMessage next() {
-
-            if (outerIndex >= messagesSize) {
-                throw new NoSuchElementException();
-            }
-            if (inner != null && inner.hasNext()) {
-                return inner.next();
-            } else {
-                // call this.hasNext() to properly initialize/position 'inner'
-                if (!this.hasNext()) {
-                    throw new NoSuchElementException();
-                } else {
-                    return inner.next();
-                }
-            }
-
-        }
-
-        public void remove() {
-
-            if (outerIndex == -1) {
-                throw new IllegalStateException();
-            }
-            inner.remove();
-
-        }
-
-    } // END ComponentMessagesIterator
-
-    // The testcase for this class is TestFacesContextImpl.java
-    // The testcase for this class is TestFacesContextImpl_Model.java
-
-} // end of class FacesContextImpl
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/InitParameterMap.java b/jsf-ri/src/main/java/com/sun/faces/context/InitParameterMap.java
deleted file mode 100644
index d4e9cfd..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/InitParameterMap.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.servlet.ServletContext;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getInitParameterMap()  
- */
-public class InitParameterMap extends BaseContextMap<String> {
-
-    private final ServletContext servletContext;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public InitParameterMap(ServletContext newServletContext) {
-        servletContext = newServletContext;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public String get(Object key) {
-        Util.notNull("key", key);
-        String keyString = key.toString();
-        return servletContext.getInitParameter(keyString);
-    }
-
-
-    @Override
-    public Set<Map.Entry<String,String>> entrySet() {
-        return Collections.unmodifiableSet(super.entrySet());
-    }
-
-
-    @Override
-    public Set<String> keySet() {
-        return Collections.unmodifiableSet(super.keySet());
-    }
-
-
-    @Override
-    public Collection<String> values() {
-        return Collections.unmodifiableCollection(super.values());
-    }
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        return (servletContext.getInitParameter(key.toString()) != null);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null ||
-                 !(obj.getClass()
-                   == ExternalContextImpl
-                       .theUnmodifiableMapClass)) && super.equals(obj);
-    }
-
-
-    @Override
-    public int hashCode() {
-        int hashCode = 7 * servletContext.hashCode();
-        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
-            hashCode += i.next().hashCode();
-        }
-        return hashCode;
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    protected Iterator<Map.Entry<String,String>> getEntryIterator() {
-        return new EntryIterator(servletContext.getInitParameterNames());
-    }
-
-
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(servletContext.getInitParameterNames());
-    }
-
-
-    protected Iterator<String> getValueIterator() {
-        return new ValueIterator(servletContext.getInitParameterNames());
-    }
-
-} // END InitParameterMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/InjectionFacesContextFactory.java b/jsf-ri/src/main/java/com/sun/faces/context/InjectionFacesContextFactory.java
deleted file mode 100644
index 845083b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/InjectionFacesContextFactory.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.lang.reflect.Field;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.text.MessageFormat;
-
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.FacesException;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import javax.faces.FacesWrapper;
-import javax.servlet.ServletRequest;
-
-/**
- * This {@link FacesContextFactory} is responsible for injecting the
- * default {@link FacesContext} instance into the top-level {@link FacesContext}
- * as configured by the runtime.  Doing this allows us to preserve backwards
- * compatibility as the API evolves without having the API rely on implementation
- * specific details.  
- */
-public class InjectionFacesContextFactory extends FacesContextFactory implements FacesWrapper<FacesContextFactory> {
-
-    private static final Logger LOGGER = FacesLogger.CONTEXT.getLogger();
-    private FacesContextFactory delegate;
-    private Field defaultFacesContext;
-    private Field defaultExternalContext;
-
-
-    
-    // ------------------------------------------------------------ Constructors
-
-
-    public InjectionFacesContextFactory(FacesContextFactory delegate) {
-
-        Util.notNull("facesContextFactory", delegate);
-        this.delegate = delegate;
-         try {
-            defaultFacesContext = FacesContext.class.getDeclaredField("defaultFacesContext");
-            defaultFacesContext.setAccessible(true);
-        } catch (NoSuchFieldException nsfe) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE, "Unable to find private field named 'defaultFacesContext' in javax.faces.context.FacesContext.");
-            }
-        } catch (Exception e) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE, e.toString(), e);
-            }
-            defaultFacesContext = null;
-        }
-        try {
-            defaultExternalContext = ExternalContext.class.getDeclaredField("defaultExternalContext");
-            defaultExternalContext.setAccessible(true);
-        } catch (NoSuchFieldException nsfe) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE, "Unable to find private field named 'defaultExternalContext' in javax.faces.context.ExternalContext.");
-            }
-        } catch (Exception e) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE, e.toString(), e);
-            }
-            defaultExternalContext = null;
-        }
-
-    }
-
-
-    // ---------------------------------------- Methods from FacesContextFactory
-
-
-    public FacesContext getFacesContext(Object context,
-                                        Object request,
-                                        Object response,
-                                        Lifecycle lifecycle)
-    throws FacesException {
-
-        FacesContext ctx = delegate.getFacesContext(context,
-                                                    request,
-                                                    response,
-                                                    lifecycle);
-        if (ctx == null) {
-            // No i18n here
-            String message = MessageFormat
-                  .format("Delegate FacesContextFactory, {0}, returned null when calling getFacesContext().",
-                          delegate.getClass().getName());
-            throw new IllegalStateException(message);
-        }
-        injectDefaults(ctx, request);
-        return ctx;
-
-    }
-
-
-    // ----------------------------------------------- Methods from FacesWrapper
-
-
-    @Override
-    public FacesContextFactory getWrapped() {
-
-        return delegate;
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void injectDefaults(FacesContext target, Object request) {
-
-        if (defaultFacesContext != null) {
-            FacesContext defaultFC =
-                  FacesContextImpl.getDefaultFacesContext();
-            if (defaultFC != null) {
-                try {
-                    defaultFacesContext.set(target, defaultFC);
-                } catch (IllegalAccessException e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE, e.toString(), e);
-                    }
-                }
-            }
-        }
-        if (defaultExternalContext != null) {
-            ExternalContext defaultExtContext = null;
-            if (request instanceof ServletRequest) {
-                ServletRequest reqObj = (ServletRequest) request;
-                defaultExtContext = (ExternalContext) reqObj.getAttribute(ExternalContextFactoryImpl.DEFAULT_EXTERNAL_CONTEXT_KEY);
-                if (defaultExtContext != null) {
-                    reqObj.removeAttribute(ExternalContextFactoryImpl.DEFAULT_EXTERNAL_CONTEXT_KEY);
-                }
-            }
-            if (defaultExtContext != null) {
-                try {
-                    defaultExternalContext.set(target.getExternalContext(), defaultExtContext);
-                } catch (IllegalAccessException e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE, e.toString(), e);
-                    }
-                }
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/PartialViewContextFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/PartialViewContextFactoryImpl.java
deleted file mode 100644
index 3bb4f4d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/PartialViewContextFactoryImpl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import javax.faces.context.PartialViewContextFactory;
-import javax.faces.context.PartialViewContext;
-import javax.faces.context.FacesContext;
-
-/**
- * <p>
- * Factory to vend the default <code>PartialViewContext</code> instance.
- * </p>
- */
-public class PartialViewContextFactoryImpl extends PartialViewContextFactory {
-
-
-    // ---------------------------------- Methods from PartialViewContextFactory
-
-
-    /**
-     * @see PartialViewContextFactory#getPartialViewContext(javax.faces.context.FacesContext)
-     */
-    public PartialViewContext getPartialViewContext(FacesContext context) {
-
-        return new PartialViewContextImpl(context);
-
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/PartialViewContextImpl.java b/jsf-ri/src/main/java/com/sun/faces/context/PartialViewContextImpl.java
deleted file mode 100644
index 4f79fda..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/PartialViewContextImpl.java
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitHint;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.context.PartialViewContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.PhaseId;
-
-import java.io.Writer;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Arrays;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.component.visit.PartialVisitContext;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
- public class PartialViewContextImpl extends PartialViewContext {
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.CONTEXT.getLogger();
-
-    private boolean released;
-
-    // BE SURE TO ADD NEW IVARS TO THE RELEASE METHOD
-    private PartialResponseWriter partialResponseWriter;
-    private List<String> executeIds;
-    private Collection<String> renderIds;
-    private Boolean ajaxRequest;
-    private Boolean partialRequest;
-    private Boolean renderAll;
-    private FacesContext ctx;
-
-    private static final String ORIGINAL_WRITER = "com.sun.faces.ORIGINAL_WRITER";
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    public PartialViewContextImpl(FacesContext ctx) {
-        this.ctx = ctx;
-    }
-
-
-    // ---------------------------------------------- Methods from PartialViewContext
-
-    /**
-     * @see javax.faces.context.PartialViewContext#isAjaxRequest()
-     */
-    @Override
-    public boolean isAjaxRequest() {
-
-        assertNotReleased();
-        if (ajaxRequest == null) {
-            ajaxRequest = "partial/ajax".equals(ctx.
-                getExternalContext().getRequestHeaderMap().get("Faces-Request"));
-        }
-        return ajaxRequest;
-
-    }
-
-    /**
-     * @see javax.faces.context.PartialViewContext#isPartialRequest()
-     */
-    @Override
-    public boolean isPartialRequest() {
-
-        assertNotReleased();
-        if (partialRequest == null) {
-            partialRequest = isAjaxRequest() ||
-                    "partial/process".equals(ctx.
-                    getExternalContext().getRequestHeaderMap().get("Faces-Request"));
-        }
-        return partialRequest;
-
-    }
-
-
-    /**
-     * @see javax.faces.context.PartialViewContext#isExecuteAll()
-     */
-    @Override
-    public boolean isExecuteAll() {
-
-        assertNotReleased();
-        String execute = ctx.
-            getExternalContext().getRequestParameterMap()
-                .get(PARTIAL_EXECUTE_PARAM_NAME);
-        return (ALL_PARTIAL_PHASE_CLIENT_IDS.equals(execute));
-
-    }
-
-    /**
-     * @see javax.faces.context.PartialViewContext#isRenderAll()
-     */
-    @Override
-    public boolean isRenderAll() {
-
-        assertNotReleased();
-        if (renderAll == null) {
-            String render = ctx.
-                getExternalContext().getRequestParameterMap()
-                    .get(PARTIAL_RENDER_PARAM_NAME);
-            renderAll = (ALL_PARTIAL_PHASE_CLIENT_IDS.equals(render));
-        }
-
-        return renderAll;
-
-    }
-
-     
-    /**
-     * @see javax.faces.context.PartialViewContext#setRenderAll(boolean) 
-     */
-    @Override
-    public void setRenderAll(boolean renderAll) {
-
-        this.renderAll = renderAll;
-
-    }
-
-    @Override
-    public void setPartialRequest(boolean isPartialRequest) {
-        this.partialRequest = isPartialRequest;
-    }
-
-
-    /**
-     * @see javax.faces.context.PartialViewContext#getExecuteIds()
-     */
-    @Override
-    public Collection<String> getExecuteIds() {
-
-        assertNotReleased();
-        if (executeIds != null) {
-            return executeIds;
-        }
-        executeIds = populatePhaseClientIds(PARTIAL_EXECUTE_PARAM_NAME);
-
-        // include the view parameter facet ID if there are other execute IDs
-        // to process
-        if (!executeIds.isEmpty()) {
-            UIViewRoot root = ctx.getViewRoot();
-            if (root.getFacetCount() > 0) {
-                if (root.getFacet(UIViewRoot.METADATA_FACET_NAME) != null) {
-                    executeIds.add(0, UIViewRoot.METADATA_FACET_NAME);   
-                }
-            }
-        }
-        return executeIds;
-
-    }
-
-    /**
-     * @see javax.faces.context.PartialViewContext#getRenderIds()
-     */
-    @Override
-    public Collection<String> getRenderIds() {
-
-        assertNotReleased();
-        if (renderIds != null) {
-            return renderIds;
-        }
-        renderIds = populatePhaseClientIds(PARTIAL_RENDER_PARAM_NAME);
-        return renderIds;
-
-    }
-
-    /**
-     * @see javax.faces.context.PartialViewContext#processPartial(javax.faces.event.PhaseId))
-     */
-    @Override
-    public void processPartial(PhaseId phaseId) {
-        PartialViewContext pvc = ctx.getPartialViewContext();
-        Collection <String> executeIds = pvc.getExecuteIds();
-        Collection <String> renderIds = pvc.getRenderIds();
-        UIViewRoot viewRoot = ctx.getViewRoot();
-
-        if (phaseId == PhaseId.APPLY_REQUEST_VALUES ||
-            phaseId == PhaseId.PROCESS_VALIDATIONS ||
-            phaseId == PhaseId.UPDATE_MODEL_VALUES) {
-
-            // Skip this processing if "none" is specified in the render list,
-            // or there were no execute phase client ids.
-
-            if (executeIds == null || executeIds.isEmpty()) {
-                // RELEASE_PENDING LOG ERROR OR WARNING
-                return;
-            }
-
-            try {
-                processComponents(viewRoot, phaseId, executeIds, ctx);
-            } catch (Exception e) {
-                // RELEASE_PENDING LOG EXCEPTION
-            }
-
-            // If we have just finished APPLY_REQUEST_VALUES phase, install the
-            // partial response writer.  We want to make sure that any content
-            // or errors generated in the other phases are written using the
-            // partial response writer.
-            //
-            if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
-                PartialResponseWriter writer = pvc.getPartialResponseWriter();
-                ctx.setResponseWriter(writer);
-            }
-
-        } else if (phaseId == PhaseId.RENDER_RESPONSE) {
-
-            try {
-                //
-                // We re-enable response writing.
-                //
-                PartialResponseWriter writer = pvc.getPartialResponseWriter();
-                ResponseWriter orig = ctx.getResponseWriter();
-                ctx.getAttributes().put(ORIGINAL_WRITER, orig);
-                ctx.setResponseWriter(writer);
-
-                ExternalContext exContext = ctx.getExternalContext();
-                exContext.setResponseContentType("text/xml");
-                exContext.addResponseHeader("Cache-Control", "no-cache");
-                writer.startDocument();
-                if (isRenderAll()) {
-                    renderAll(ctx, viewRoot);
-                    renderState(ctx);
-                    writer.endDocument();
-                    return;
-                }
-
-                // Skip this processing if "none" is specified in the render list,
-                // or there were no render phase client ids.
-                if (renderIds == null || renderIds.isEmpty()) {
-                } else {
-                    processComponents(viewRoot, phaseId, renderIds, ctx);
-                }
-
-                renderState(ctx);
-
-                writer.endDocument();
-            } catch (IOException ex) {
-                this.cleanupAfterView();
-            } catch (RuntimeException ex) {
-                this.cleanupAfterView();
-                // Throw the exception
-                throw ex;
-            }
-        }
-    }
-
-    /**
-     * @see javax.faces.context.PartialViewContext#getPartialResponseWriter()
-     */
-    @Override
-    public PartialResponseWriter getPartialResponseWriter() {
-        assertNotReleased();
-        if (partialResponseWriter == null) {
-            partialResponseWriter = new DelayedInitPartialResponseWriter(this);
-        }
-        return partialResponseWriter;
-    }
-
-    /**
-     * @see javax.faces.context.PartialViewContext#release()
-     */
-    public void release() {
-        
-        released = true;
-        ajaxRequest = null;
-        renderAll = null;
-        partialResponseWriter = null;
-        executeIds = null;
-        renderIds = null;
-        ctx = null;
-        partialRequest = null;
-
-    }
-
-    // -------------------------------------------------------- Private Methods
-
-
-
-    private List<String> populatePhaseClientIds(String parameterName) {
-
-        Map<String,String> requestParamMap =
-              ctx.getExternalContext().getRequestParameterMap();
-
-        String param = requestParamMap.get(parameterName);
-        if (param == null) {
-            return new ArrayList<String>();
-        } else {
-            String[] pcs = Util.split(param, "[ \t]+");
-            return ((pcs != null && pcs.length != 0)
-                    ? new ArrayList<String>(Arrays.asList(pcs))
-                    : new ArrayList<String>());
-        }
-        
-    }
-
-    // Process the components specified in the phaseClientIds list
-    private void processComponents(UIComponent component, PhaseId phaseId,
-        Collection<String> phaseClientIds, FacesContext context) throws IOException {
-
-        // We use the tree visitor mechanism to locate the components to
-        // process.  Create our (partial) VisitContext and the
-        // VisitCallback that will be invoked for each component that
-        // is visited.  Note that we use the SKIP_UNRENDERED hint as we
-        // only want to visit the rendered subtree.
-        EnumSet<VisitHint> hints = EnumSet.of(VisitHint.SKIP_UNRENDERED);
-        PartialVisitContext visitContext =
-            new PartialVisitContext(context, phaseClientIds, hints);
-        PhaseAwareVisitCallback visitCallback =
-            new PhaseAwareVisitCallback(ctx, phaseId);
-        component.visitTree(visitContext, visitCallback);
-    }
-
-    private void renderAll(FacesContext context, UIViewRoot viewRoot) throws IOException {
-        // If this is a "render all via ajax" request,
-        // make sure to wrap the entire page in a <render> elemnt
-        // with the special id of VIEW_ROOT_ID.  This is how the client
-        // JavaScript knows how to replace the entire document with
-        // this response.
-        PartialViewContext pvc = context.getPartialViewContext();
-        PartialResponseWriter writer = pvc.getPartialResponseWriter();
-        writer.startUpdate(PartialResponseWriter.RENDER_ALL_MARKER);
-
-        if (viewRoot.getChildCount() > 0) {
-            for (UIComponent uiComponent : viewRoot.getChildren()) {
-                uiComponent.encodeAll(context);
-            }
-        }
-
-        writer.endUpdate();
-    }
-
-    private void renderState(FacesContext context) throws IOException {
-
-        if (!context.getViewRoot().isTransient()) {
-            // Get the view state and write it to the response..
-            PartialViewContext pvc = context.getPartialViewContext();
-            PartialResponseWriter writer = pvc.getPartialResponseWriter();
-            writer.startUpdate(PartialResponseWriter.VIEW_STATE_MARKER);
-            String state = context.getApplication().getStateManager().getViewState(context);
-            writer.write(state);
-            writer.endUpdate();
-        }
-
-    }
-
-    private PartialResponseWriter createPartialResponseWriter() {
-
-        ExternalContext extContext = ctx.getExternalContext();
-        String encoding = extContext.getRequestCharacterEncoding();
-        extContext.setResponseCharacterEncoding(encoding);
-        ResponseWriter responseWriter = null;
-        Writer out = null;
-        try {
-            out = extContext.getResponseOutputWriter();
-        } catch (IOException ioe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           ioe.toString(),
-                           ioe);
-            }
-        }
-
-        if (out != null) {
-            responseWriter =
-                ctx.getRenderKit().createResponseWriter(out,
-                "text/xml", encoding);
-        }
-        if (responseWriter instanceof PartialResponseWriter)  {
-            return (PartialResponseWriter) responseWriter;
-        } else {
-            return new PartialResponseWriter(responseWriter);
-        }
-
-    }
-
-    private void cleanupAfterView() {
-        ResponseWriter orig = (ResponseWriter) ctx.getAttributes().
-            get(ORIGINAL_WRITER);
-        assert(null != orig);
-        // move aside the PartialResponseWriter
-        ctx.setResponseWriter(orig);
-    }
-
-
-    @SuppressWarnings({"FinalPrivateMethod"})
-    private final void assertNotReleased() {
-        if (released) {
-            throw new IllegalStateException();
-        }
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class PhaseAwareVisitCallback implements VisitCallback {
-
-        private PhaseId curPhase;
-        private FacesContext ctx;
-
-        private PhaseAwareVisitCallback(FacesContext ctx, PhaseId curPhase) {
-            this.ctx = ctx;
-            this.curPhase = curPhase;
-        }  
-
-
-        public VisitResult visit(VisitContext context, UIComponent comp) {
-            try {
-
-                if (curPhase == PhaseId.APPLY_REQUEST_VALUES) {
-
-                    // RELEASE_PENDING handle immediate request(s)
-                    // If the user requested an immediate request
-                    // Make sure to set the immediate flag here.
-
-                    comp.processDecodes(ctx);
-                } else if (curPhase == PhaseId.PROCESS_VALIDATIONS) {
-                    comp.processValidators(ctx);
-                } else if (curPhase == PhaseId.UPDATE_MODEL_VALUES) {
-                    comp.processUpdates(ctx);
-                } else if (curPhase == PhaseId.RENDER_RESPONSE) {
-
-                    PartialResponseWriter writer = ctx.getPartialViewContext().getPartialResponseWriter();
-
-                    writer.startUpdate(comp.getClientId(ctx));
-                    try {
-                        // do the default behavior...
-                        comp.encodeAll(ctx);
-                    }
-                    catch (Exception ce) {
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.severe(ce.toString());
-                        }
-                        if (LOGGER.isLoggable(Level.FINE)) {
-                            LOGGER.log(Level.FINE,
-                            ce.toString(),
-                            ce);
-                        }
-                    }
-                    writer.endUpdate();
-                }
-                else {
-                    throw new IllegalStateException("I18N: Unexpected " +
-                                                    "PhaseId passed to " +
-                                              " PhaseAwareContextCallback: " +
-                                                    curPhase.toString());
-                }
-            }
-            catch (IOException ex) {
-                ex.printStackTrace();
-            }
-
-            // Once we visit a component, there is no need to visit
-            // its children, since processDecodes/Validators/Updates and
-            // encodeAll() already traverse the subtree.  We return
-            // VisitResult.REJECT to supress the subtree visit.
-            return VisitResult.REJECT;
-        }
-    }
-
-
-     /**
-      * Delays the actual construction of the PartialResponseWriter <em>until</em>
-      * content is going to actually be written.
-      */
-    private static final class DelayedInitPartialResponseWriter extends PartialResponseWriter {
-
-        private ResponseWriter writer;
-        private PartialViewContextImpl ctx;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public DelayedInitPartialResponseWriter(PartialViewContextImpl ctx) {
-
-            super(null);
-            this.ctx = ctx;
-            ExternalContext extCtx = ctx.ctx.getExternalContext();
-            extCtx.setResponseContentType("text/xml");
-            extCtx.setResponseCharacterEncoding(extCtx.getRequestCharacterEncoding());
-
-        }
-
-
-        // ---------------------------------- Methods from PartialResponseWriter
-
-
-        @Override
-        public ResponseWriter getWrapped() {
-
-            if (writer == null) {
-                writer = ctx.createPartialResponseWriter();
-            }
-            return writer;
-
-        }
-         
-    } // END DelayedInitPartialResponseWriter
-
-} 
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/RequestCookieMap.java b/jsf-ri/src/main/java/com/sun/faces/context/RequestCookieMap.java
deleted file mode 100644
index fb49689..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/RequestCookieMap.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.Cookie;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getRequestCookieMap()  
- */
-public class RequestCookieMap extends BaseContextMap<Object> {
-
-    private final HttpServletRequest request;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RequestCookieMap(HttpServletRequest newRequest) {
-        this.request = newRequest;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public Object get(Object key) {
-        Util.notNull("key", key);
-
-        Cookie[] cookies = request.getCookies();
-        if (null == cookies) {
-            return null;
-        }
-
-        String keyString = key.toString();
-        Object result = null;
-
-        for (int i = 0; i < cookies.length; i++) {
-            if (cookies[i].getName().equals(keyString)) {
-                result = cookies[i];
-                break;
-            }
-        }
-        return result;
-    }
-
-
-    @Override
-    public Set<Map.Entry<String,Object>> entrySet() {
-        return Collections.unmodifiableSet(super.entrySet());
-    }
-
-
-    @Override
-    public Set<String> keySet() {
-        return Collections.unmodifiableSet(super.keySet());
-    }
-
-
-    @Override
-    public Collection<Object> values() {
-        return Collections.unmodifiableCollection(super.values());
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null ||
-                 !(obj.getClass()
-                   == ExternalContextImpl
-                       .theUnmodifiableMapClass)) && super.equals(obj);
-    }
-
-
-    @Override
-    public int hashCode() {
-        int hashCode = 7 * request.hashCode();
-        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
-            hashCode += i.next().hashCode();
-        }
-        return hashCode;
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    protected Iterator<Map.Entry<String,Object>> getEntryIterator() {
-        return new EntryIterator(
-                new CookieArrayEnumerator(request.getCookies()));
-    }
-
-
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(
-                new CookieArrayEnumerator(request.getCookies()));
-    }
-
-
-    protected Iterator<Object> getValueIterator() {
-        return new ValueIterator(
-            new CookieArrayEnumerator(request.getCookies()));
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class CookieArrayEnumerator implements Enumeration {
-
-        Cookie[] cookies;
-        int curIndex = -1;
-        int upperBound;
-
-        public CookieArrayEnumerator(Cookie[] cookies) {
-            this.cookies = cookies;
-            upperBound = ((this.cookies != null) ? this.cookies.length : -1);
-        }
-
-        public boolean hasMoreElements() {
-            return (curIndex + 2 <= upperBound);
-        }
-
-        public Object nextElement() {
-            curIndex++;
-            if (curIndex < upperBound) {
-                return cookies[curIndex].getName();
-            } else {
-                throw new NoSuchElementException();
-            }
-        }
-        
-    }
-
-} // END RequestCookiesMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/RequestHeaderMap.java b/jsf-ri/src/main/java/com/sun/faces/context/RequestHeaderMap.java
deleted file mode 100644
index bc9a10c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/RequestHeaderMap.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.servlet.http.HttpServletRequest;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getRequestHeaderMap()  
- */
-public class RequestHeaderMap extends BaseContextMap<String> {
-
-    private final HttpServletRequest request;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RequestHeaderMap(HttpServletRequest request) {
-        this.request = request;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public String get(Object key) {
-        Util.notNull("key", key);
-
-        return (request.getHeader(key.toString()));
-    }
-
-
-    @Override
-    public Set<Map.Entry<String,String>> entrySet() {
-        return Collections.unmodifiableSet(super.entrySet());
-    }
-
-
-    @Override
-    public Set<String> keySet() {
-        return Collections.unmodifiableSet(super.keySet());
-    }
-
-
-    @Override
-    public Collection<String> values() {
-        return Collections.unmodifiableCollection(super.values());
-    }
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        return (request.getHeader(key.toString()) != null);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null ||
-                 !(obj.getClass()
-                   == ExternalContextImpl
-                       .theUnmodifiableMapClass)) && super.equals(obj);
-    }
-
-
-    @Override
-    public int hashCode() {
-        int hashCode = 7 * request.hashCode();
-        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
-            hashCode += i.next().hashCode();
-        }
-        return hashCode;
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    protected Iterator<Map.Entry<String,String>> getEntryIterator() {
-        return new EntryIterator(request.getHeaderNames());
-    }
-
-
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(request.getHeaderNames());
-    }
-
-
-    protected Iterator<String> getValueIterator() {
-        return new ValueIterator(request.getHeaderNames());
-    }
-
-} // END RequestHeaderMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/RequestHeaderValuesMap.java b/jsf-ri/src/main/java/com/sun/faces/context/RequestHeaderValuesMap.java
deleted file mode 100644
index b5e662c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/RequestHeaderValuesMap.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.servlet.http.HttpServletRequest;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getRequestHeaderValuesMap()
- */
-public class RequestHeaderValuesMap extends StringArrayValuesMap {
-
-    private final HttpServletRequest request;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RequestHeaderValuesMap(HttpServletRequest request) {
-        this.request = request;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        return (request.getHeaders(key.toString()) != null);
-    }
-
-
-    @Override
-    public String[] get(Object key) {
-        Util.notNull("key", key);
-
-        List<String> valuesList = new ArrayList<String>();
-        Enumeration valuesEnum = this.request.getHeaders(key.toString());
-        while (valuesEnum.hasMoreElements()) {
-            valuesList.add((String) valuesEnum.nextElement());
-        }
-
-        return valuesList.toArray(new String[valuesList.size()]);
-    }
-
-
-    @Override
-    public Set<Map.Entry<String,String[]>> entrySet() {
-        return Collections.unmodifiableSet(super.entrySet());
-    }
-
-
-    @Override
-    public Set<String> keySet() {
-        return Collections.unmodifiableSet(super.keySet());
-    }
-
-
-    @Override
-    public Collection<String[]> values() {
-        return Collections.unmodifiableCollection(super.values());
-    }
-
-
-    @Override
-    public int hashCode() {
-        return hashCode(request);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-       return !(obj == null || !(obj.getClass()
-                   == ExternalContextImpl
-                       .theUnmodifiableMapClass))
-               && super.equals(obj);
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-    protected Iterator<Map.Entry<String,String[]>> getEntryIterator() {
-        return new EntryIterator(request.getHeaderNames());
-    }
-
-
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(request.getHeaderNames());
-    }
-
-
-    protected Iterator<String[]> getValueIterator() {
-        return new ValueIterator(request.getHeaderNames());
-    }
-
-} // END RequestHeaderValuesMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/RequestMap.java b/jsf-ri/src/main/java/com/sun/faces/context/RequestMap.java
deleted file mode 100644
index 571166a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/RequestMap.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Enumeration;
-import java.util.Map;
-import java.util.Iterator;
-
-import javax.servlet.ServletRequest;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getRequestMap() 
- */
-public class RequestMap extends BaseContextMap<Object> {
-
-    private final ServletRequest request;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RequestMap(ServletRequest request) {
-        this.request = request;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public void clear() {
-        for (Enumeration e = request.getAttributeNames();
-             e.hasMoreElements(); ) {
-            request.removeAttribute((String) e.nextElement());
-        }
-    }
-
-
-    // Supported by maps if overridden
-    @Override
-    public void putAll(Map t) {
-        for (Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            request.setAttribute((String) entry.getKey(),
-                                        entry.getValue());
-        }
-    }
-
-
-    @Override
-    public Object get(Object key) {
-        Util.notNull("key", key);
-        return request.getAttribute(key.toString());
-    }
-
-
-    @Override
-    public Object put(String key, Object value) {
-        Util.notNull("key", key);
-        Object result = request.getAttribute(key);
-        request.setAttribute(key, value);
-        return (result);
-    }
-
-
-    @Override
-    public Object remove(Object key) {
-        if (key == null) {
-            return null;
-        }
-        String keyString = key.toString();
-        Object result = request.getAttribute(keyString);
-        request.removeAttribute(keyString);
-        return (result);
-    }
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        return (request.getAttribute(key.toString()) != null);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null || !(obj instanceof RequestMap))
-               && super.equals(obj);
-    }
-
-
-    @Override
-    public int hashCode() {
-        int hashCode = 7 * request.hashCode();
-        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
-            hashCode += i.next().hashCode();
-        }
-        return hashCode;
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    protected Iterator<Map.Entry<String,Object>> getEntryIterator() {
-        return new EntryIterator(request.getAttributeNames());
-    }
-
-
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(request.getAttributeNames());
-    }
-
-
-    protected Iterator<Object> getValueIterator() {
-        return new ValueIterator(request.getAttributeNames());
-    }
-
-} // END RequestMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/RequestParameterMap.java b/jsf-ri/src/main/java/com/sun/faces/context/RequestParameterMap.java
deleted file mode 100644
index 2aaecb2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/RequestParameterMap.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.servlet.ServletRequest;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getRequestParameterMap() 
- */
-public class RequestParameterMap extends BaseContextMap<String> {
-
-    private final ServletRequest request;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RequestParameterMap(ServletRequest request) {
-        this.request = request;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public String get(Object key) {
-        Util.notNull("key", key);
-        return request.getParameter(key.toString());
-    }
-
-
-    @Override
-    public Set<Map.Entry<String,String>> entrySet() {
-        return Collections.unmodifiableSet(super.entrySet());
-    }
-
-
-    @Override
-    public Set<String> keySet() {
-        return Collections.unmodifiableSet(super.keySet());
-    }
-
-
-    @Override
-    public Collection<String> values() {
-        return Collections.unmodifiableCollection(super.values());
-    }
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        return (request.getParameter(key.toString()) != null);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null ||
-                 !(obj.getClass()
-                   == ExternalContextImpl
-                       .theUnmodifiableMapClass)) && super.equals(obj);
-    }
-
-
-    @Override
-    public int hashCode() {
-        int hashCode = 7 * request.hashCode();
-        for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
-            hashCode += i.next().hashCode();
-        }
-        return hashCode;
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    protected Iterator<Map.Entry<String,String>> getEntryIterator() {
-        return new EntryIterator(request.getParameterNames());
-    }
-
-
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(request.getParameterNames());
-    }
-
-    
-    protected Iterator<String> getValueIterator() {
-        return new ValueIterator(request.getParameterNames());
-    }
-
-} // END RequestParameterMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/RequestParameterValuesMap.java b/jsf-ri/src/main/java/com/sun/faces/context/RequestParameterValuesMap.java
deleted file mode 100644
index 77c63be..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/RequestParameterValuesMap.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.servlet.ServletRequest;
-
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getRequestParameterValuesMap()  
- */
-public class RequestParameterValuesMap extends StringArrayValuesMap {
-
-    private final ServletRequest request;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RequestParameterValuesMap(ServletRequest request) {
-        this.request = request;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public String[] get(Object key) {
-        Util.notNull("key", key);
-        return request.getParameterValues(key.toString());
-    }
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        return (request.getParameterValues(key.toString()) != null);
-    }
-
-
-    @Override
-    public Set<Map.Entry<String,String[]>> entrySet() {
-        return Collections.unmodifiableSet(super.entrySet());
-    }
-
-
-    @Override
-    public Set<String> keySet() {
-        return Collections.unmodifiableSet(super.keySet());
-    }
-
-
-    @Override
-    public Collection<String[]> values() {
-        return Collections.unmodifiableCollection(super.values());
-    }
-
-
-    @Override
-    public int hashCode() {
-        return hashCode(request);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null || !(obj.getClass()
-                   == ExternalContextImpl
-                       .theUnmodifiableMapClass))
-               && super.equals(obj);
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    protected Iterator<Map.Entry<String, String[]>> getEntryIterator() {
-        return new EntryIterator(request.getParameterNames());
-    }
-
-
-    protected Iterator<String> getKeyIterator() {
-        return new KeyIterator(request.getParameterNames());
-    }
-
-
-    protected Iterator<String[]> getValueIterator() {
-        return new ValueIterator(request.getParameterNames());
-    }
-
-} // END RequestParameterValuesMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/SessionMap.java b/jsf-ri/src/main/java/com/sun/faces/context/SessionMap.java
deleted file mode 100644
index 57769ce..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/SessionMap.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Enumeration;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.Collections;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.io.Serializable;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.faces.application.ProjectStage;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-/**
- * @see javax.faces.context.ExternalContext#getSessionMap()  
- */
-public class SessionMap extends BaseContextMap<Object> {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    private final HttpServletRequest request;
-    private final ProjectStage stage;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public SessionMap(HttpServletRequest request, ProjectStage stage) {
-        this.request = request;
-        this.stage = stage;
-    }
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public void clear() {
-        HttpSession session = getSession(false);
-        if (session != null) {
-            for (Enumeration e = session.getAttributeNames();
-                 e.hasMoreElements();) {
-                String name = (String) e.nextElement();
-                session.removeAttribute(name);
-            }
-        }
-    }
-
-
-    // Supported by maps if overridden
-    @Override
-    public void putAll(Map t) {
-        HttpSession session = getSession(true);
-        for (Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            Object v = entry.getValue();
-            Object k = entry.getKey();
-            if (ProjectStage.Development.equals(stage) && !(v instanceof Serializable)) {
-            	if (LOGGER.isLoggable(Level.WARNING)) {
-	                LOGGER.log(Level.WARNING,
-	                           "jsf.context.extcontext.sessionmap.nonserializable",
-	                           new Object[] { k, v.getClass().getName() });
-            	}
-            }
-            //noinspection NonSerializableObjectBoundToHttpSession
-            session.setAttribute((String) k, v);
-        }
-    }
-
-
-    @Override
-    public Object get(Object key) {
-        Util.notNull("key", key);
-        HttpSession session = getSession(false);
-        return ((session != null) ? session.getAttribute(key.toString()) : null);
-
-    }
-
-
-    @Override
-    public Object put(String key, Object value) {
-        Util.notNull("key", key);
-        HttpSession session = getSession(true);
-        Object result = session.getAttribute(key);
-        if (value != null && ProjectStage.Development.equals(stage) && !(value instanceof Serializable)) {
-        	if (LOGGER.isLoggable(Level.WARNING)) {
-	            LOGGER.log(Level.WARNING,
-	                       "jsf.context.extcontext.sessionmap.nonserializable",
-	                       new Object[]{key, value.getClass().getName()});
-        	}
-        }
-        //noinspection NonSerializableObjectBoundToHttpSession
-        session.setAttribute(key, value);
-        return (result);
-    }
-
-
-    @Override
-    public Object remove(Object key) {
-        if (key == null) {
-            return null;
-        }
-        HttpSession session = getSession(false);
-        if (session != null) {
-            String keyString = key.toString();
-            Object result = session.getAttribute(keyString);
-            session.removeAttribute(keyString);
-            return (result);
-        }
-        return null;
-    }
-
-
-    @Override
-    public boolean containsKey(Object key) {
-        HttpSession session = getSession(false);
-        return ((session != null)
-                && session.getAttribute(key.toString()) != null);
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        return !(obj == null || !(obj instanceof SessionMap))
-               && super.equals(obj);
-    }
-
-
-    @Override
-    public int hashCode() {
-        HttpSession session = getSession(false);
-        int hashCode =
-              7 * ((session != null) ? session.hashCode() : super.hashCode());
-        if (session != null) {
-            for (Iterator i = entrySet().iterator(); i.hasNext();) {
-                hashCode += i.next().hashCode();
-            }
-        }
-        return hashCode;
-    }
-
-
-    // --------------------------------------------- Methods from BaseContextMap
-
-
-    @SuppressWarnings("unchecked")
-    protected Iterator<Map.Entry<String,Object>> getEntryIterator() {
-        HttpSession session = getSession(false);
-        if (session != null) {
-            return new EntryIterator(session.getAttributeNames());
-        } else {
-            Map<String,Object> empty = Collections.emptyMap();
-            return empty.entrySet().iterator();
-        }
-    }
-
-
-    @SuppressWarnings("unchecked")
-    protected Iterator<String> getKeyIterator() {
-        HttpSession session = getSession(false);
-        if (session != null) {
-            return new KeyIterator(session.getAttributeNames());
-        } else {
-            Map<String,Object> empty = Collections.emptyMap();
-            return empty.keySet().iterator();
-        }
-    }
-
-
-    @SuppressWarnings("unchecked")
-    protected Iterator<Object> getValueIterator() {
-        HttpSession session = getSession(false);
-         if (session != null) {
-            return new ValueIterator(session.getAttributeNames());
-        } else {
-            Map<String,Object> empty = Collections.emptyMap();
-            return empty.values().iterator();
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private HttpSession getSession(boolean createNew) {
-        return request.getSession(createNew);
-    }
-
-} // END SessionMap
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/StateContext.java b/jsf-ri/src/main/java/com/sun/faces/context/StateContext.java
deleted file mode 100644
index 59b80d9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/StateContext.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.ApplicationStateInfo;
-import com.sun.faces.util.ComponentStruct;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.event.PreRemoveFromViewEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * Context for dealing with partial state saving mechanics.
- */
-public class StateContext {
-
-
-    private static final String KEY = StateContext.class.getName() + "_KEY";
-    private static final String DYNAMIC_COMPONENT =
-            StateContext.class.getName() + "_DYNAMIC_COMPONENT";
-
-
-    private boolean partial;
-    private boolean partialLocked;
-    private boolean trackMods = true;
-    private AddRemoveListener modListener;
-    private ApplicationStateInfo stateInfo;
-    private FacesContext ctx;
-    private WeakReference<UIViewRoot> viewRootRef = new WeakReference<UIViewRoot>(null);
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private StateContext(FacesContext ctx, ApplicationStateInfo stateInfo) {
-
-        this.ctx = ctx;
-        this.stateInfo = stateInfo;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @return <code>StateContext</code> for this request
-     */
-    public static StateContext getStateContext(FacesContext ctx) {
-
-        StateContext stateCtx = (StateContext) ctx.getAttributes().get(KEY);
-        if (stateCtx == null) {
-            ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
-            ApplicationStateInfo info = associate.getApplicationStateInfo();
-            stateCtx = new StateContext(ctx, info);
-            ctx.getAttributes().put(KEY, stateCtx);
-        }
-        return stateCtx;
-
-    }
-
-
-    /**
-     * @param viewId the view ID to check
-     * @return <code>true</code> if partial state saving should be used for the
-     *  specified view ID, otherwise <code>false</code>
-     */
-    public boolean partialStateSaving(String viewId) {
-        // track UIViewRoot changes
-        UIViewRoot root = ctx.getViewRoot();
-        UIViewRoot refRoot = viewRootRef.get();
-        if (root != refRoot) {
-          // set weak reference to current viewRoot
-          this.viewRootRef = new WeakReference<UIViewRoot>(root);
-
-          // On first call in restore phase, viewRoot is null, so we treat the first 
-          // change to not null not as a changing viewRoot.
-          if (refRoot != null) {
-            // view root changed in request processing - force usage of a 
-            // new AddRemoveListener instance for the new viewId ...
-            modListener = null;
-            // ... and also force check for partial state saving for the new viewId
-            partialLocked = false;
-          }
-        }
-
-        if (!partialLocked) {
-            partial = stateInfo.usePartialStateSaving(viewId);
-            partialLocked = true;
-        }
-        return partial;
-
-    }
-
-
-    /**
-     * @return <code>true</code> if view modifications outside of the initial
-     *  construction of the view are being tracked.
-     */
-    public boolean trackViewModifications() {
-
-        return trackMods;
-
-    }
-
-
-    /**
-     * Installs a <code>SystemEventListener</code> on the <code>UIViewRoot</code>
-     * to track components added to or removed from the view.
-     */
-    public void startTrackViewModifications() {
-
-        if (modListener == null) {
-            modListener = new AddRemoveListener(ctx);
-            UIViewRoot root = ctx.getViewRoot();
-            root.subscribeToViewEvent(PostAddToViewEvent.class, modListener);
-            root.subscribeToViewEvent(PreRemoveFromViewEvent.class, modListener);
-        }
-        setTrackViewModifications(true);
-        
-    }
-
-
-    /**
-     * Toggles the current modification tracking status.
-     * @param trackMods if <code>true</code> and the listener installed by
-     *  {@link #startTrackViewModifications()} is present, then view modifications
-     *  will be tracked.  If <code>false</code>, then modification events
-     *  will be ignored.
-     */
-    public void setTrackViewModifications(boolean trackMods) {
-
-        this.trackMods = trackMods;
-
-    }
-
-
-    /**
-     * @param c the UIComponent to check
-     * @return <code>true</code> if the component was added after the initial
-     *  view construction
-     */
-    public boolean componentAddedDynamically(UIComponent c) {
-
-        return c.getAttributes().containsKey(DYNAMIC_COMPONENT);
-
-    }
-
-
-    /**
-     * @return a <code>Map</code> containing information about all components
-     *  added after the initial view construction.
-     */
-    public Map<String,ComponentStruct> getDynamicAdds() {
-
-        return ((modListener != null) ? modListener.dynamicAdds : null);
-
-    }
-
-
-    /**
-     * @return a <code>List</code> of client IDs that have been removed after
-     *  the initial view construction.
-     */
-    public List<String> getDynamicRemoves() {
-
-        return ((modListener != null) ? modListener.dynamicRemoves : null);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    public static class AddRemoveListener implements SystemEventListener {
-
-        private FacesContext ctx;
-        private StateContext stateCtx;
-        private LinkedHashMap<String, ComponentStruct> dynamicAdds;
-        private List<String> dynamicRemoves;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public AddRemoveListener(FacesContext ctx) {
-            this.ctx = ctx;
-            stateCtx = StateContext.getStateContext(ctx);
-        }
-
-
-        // ------------------------------------ Methods From SystemEventListener
-
-
-        public void processEvent(SystemEvent event)
-              throws AbortProcessingException {
-
-            if (event instanceof PreRemoveFromViewEvent) {
-                if (stateCtx.trackViewModifications()) {
-                    handleRemoveEvent(ctx, (PreRemoveFromViewEvent) event);
-                }
-            } else {
-                if (stateCtx.trackViewModifications()) {
-                    handleAddEvent(ctx, (PostAddToViewEvent) event);
-                }
-            }
-        }
-
-        public boolean isListenerForSource(Object source) {
-            return (source instanceof UIComponent);
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private void handleRemoveEvent(FacesContext context,
-                                       PreRemoveFromViewEvent event) {
-
-            UIComponent removed = event.getComponent();
-            if (removed.isTransient()) {
-                return;
-            }
-            if (dynamicRemoves == null) {
-                dynamicRemoves = new ArrayList<String>();
-            }
-            String clientId = event.getComponent().getClientId(context);
-            if (dynamicAdds != null && dynamicAdds.containsKey(clientId)) {
-                dynamicAdds.remove(clientId);
-            }
-            dynamicRemoves.add(clientId);
-        }
-
-
-        private void handleAddEvent(FacesContext context,
-                                    PostAddToViewEvent event) {
-
-            // if the root is transient, then no action is ever needed here
-            if (context.getViewRoot().isTransient()) {
-                return;
-            }
-
-            UIComponent added = event.getComponent();
-            if (added.isTransient() || added instanceof UIViewRoot) {
-                return;
-            }
-
-            // this component, while not transient may be a child or facet
-            // of component that is.  We'll have to search the parent hierarchy
-            // to the root to confirm.
-            UIComponent parent = added.getParent();
-            while (parent != null) {
-                if (parent.isTransient()) {
-                    return;
-                }
-                parent = parent.getParent();
-            }
-
-            parent = added.getParent();
-            if (dynamicAdds == null) {
-                dynamicAdds = new LinkedHashMap<String, ComponentStruct>();
-            }
-            ComponentStruct toAdd = new ComponentStruct();
-
-            toAdd.clientId = added.getClientId(context);
-            toAdd.parentClientId = parent.getClientId(context);
-            // this needs work
-            int idx = parent.getChildren().indexOf(added);
-            if (idx == -1) {
-                // this must be a facet
-                for (Map.Entry<String, UIComponent> facet : parent.getFacets().entrySet()) {
-                    if (facet.getValue() == added) {
-                        toAdd.facetName = facet.getKey();
-                        break;
-                    }
-                }
-            } else {
-                toAdd.indexOfChildInParent = parent.getChildren().indexOf(added);
-            }
-            if (dynamicRemoves != null) {
-                dynamicRemoves.remove(toAdd.clientId);
-            }
-            added.getAttributes().put(DYNAMIC_COMPONENT, Boolean.TRUE);
-            dynamicAdds.put(toAdd.clientId, toAdd);
-
-        }
-
-    } // END AddRemoveListener
-
-} // END StateContext
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/StringArrayValuesMap.java b/jsf-ri/src/main/java/com/sun/faces/context/StringArrayValuesMap.java
deleted file mode 100644
index 23bb477..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/StringArrayValuesMap.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.Map;
-import java.util.Arrays;
-import java.util.Set;
-
-/**
- * <p>
- * This is the base Map for those Maps that need to return <code>String[]</code>
- * values.
- * <p>
- */
-abstract class StringArrayValuesMap extends BaseContextMap<String[]> {
-
-
-    // -------------------------------------------------------- Methods from Map
-
-
-    @Override
-    public boolean containsValue(Object value) {
-
-        if (value == null || !value.getClass().isArray()) {
-            return false;
-        }
-
-        Set entrySet = entrySet();
-        for (Object anEntrySet : entrySet) {
-            Map.Entry entry = (Map.Entry) anEntrySet;
-            // values will be arrays
-            if (Arrays.equals((Object[]) value, (Object[]) entry.getValue())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-
-        if (obj == null ||
-            !(obj.getClass() == ExternalContextImpl.theUnmodifiableMapClass)) {
-            return false;
-        }
-        Map objMap = (Map) obj;
-
-        if (this.size() != objMap.size()) {
-            return false;
-        }
-        String[] thisKeys = keySet().toArray(new String[this.size()]);
-        Object[] objKeys = objMap.keySet().toArray();
-
-        Arrays.sort(thisKeys);
-        Arrays.sort(objKeys);
-
-        if (!(Arrays.equals(thisKeys, objKeys))) {
-            return false;
-        } else {
-            for (Object key : thisKeys) {
-                Object[] thisVal = this.get(key);
-                Object[] objVal = (Object[]) objMap.get(key);
-                if (!(Arrays.equals(thisVal, objVal))) {
-                    return false;
-                }
-            }
-        }
-
-        return true;
-
-    }
-
-
-    @Override
-    public int hashCode() {
-        return this.hashCode(this);
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected int hashCode(Object someObject) {
-        int hashCode = 7 * someObject.hashCode();
-         for (Object o : entrySet()) {
-             Map.Entry entry = (Map.Entry) o;
-             hashCode += entry.getKey().hashCode();
-             hashCode +=
-                   (Arrays.hashCode((Object[]) entry.getValue()));
-         }
-        return hashCode;
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/UrlBuilder.java b/jsf-ri/src/main/java/com/sun/faces/context/UrlBuilder.java
deleted file mode 100644
index 21a4e8b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/UrlBuilder.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.util.Util;
-
-import javax.faces.context.FacesContext;
-import javax.faces.application.Application;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * <p>The <strong>UrlBuilder</strong> provides a convenient way to assemble a URL. It
- * follows the standard Builder Pattern. A seed URL is provided, which is broken
- * into parts to allow for dynamic assembly. When the URL is to be build, a call
- * to createUrl() assembles the parts into a relative URL. This class should
- * be extended if the developer wishes to have it deal with absolute URLs.</p>
- * 
- * <p>Note that this class is optimized to parse the query string lazily so as
- * to avoid unnecessary work if the seed URL differs little from the URL to be
- * built.</p>
- */
-class UrlBuilder {
-    public static final String QUERY_STRING_SEPARATOR = "?";
-    public static final String PARAMETER_PAIR_SEPARATOR = "&";
-    public static final String PARAMETER_NAME_VALUE_SEPARATOR = "=";
-    public static final String FRAGMENT_SEPARATOR = "#";
-    public static final String DEFAULT_ENCODING = "UTF-8";
-
-	private static final List<String> NULL_LIST = Arrays.asList((String) null);
-
-    private StringBuilder url;
-    private String path;
-    private String queryString;
-    private String fragment;
-    private Map<String, List<String>> parameters;
-    private String encoding;
-    private FacesContext ctx;
-    private Application app;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public UrlBuilder(String url, String encoding) {
-        if (url == null || url.trim().length() == 0) {
-            throw new IllegalArgumentException("Url cannot be empty");
-        }
-        this.url = new StringBuilder(url.length() * 2);
-        extractSegments(url);
-        this.encoding = encoding;
-        // PERF TL lookup per-instance
-        ctx = FacesContext.getCurrentInstance();
-        app = ctx.getApplication();
-    }
-
-
-    public UrlBuilder(String url) {
-        this(url, DEFAULT_ENCODING);
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public UrlBuilder addParameters(String name, List<String> values) {
-        if (name == null || name.trim().length() == 0) {
-            throw new IllegalArgumentException("Parameter name cannot be empty");
-        }
-        parseQueryString();
-        addValuesToParameter(name.trim(), values, true);
-
-        return this;
-    }
-
-
-    public UrlBuilder addParameters(Map<String, List<String>> params) {
-        if (params != null && !params.isEmpty()) {
-            parseQueryString();
-            for (Map.Entry<String, List<String>> entry : params.entrySet()) {
-                if (entry.getKey() == null || entry.getKey().trim().length() == 0) {
-                    throw new IllegalArgumentException("Parameter name cannot be empty");
-                }
-                List<String> values = entry.getValue();
-                List<String> retValues = evaluateExpressions(values);
-                addValuesToParameter(entry.getKey().trim(), retValues, true);
-            }
-        }
-
-        return this;
-    }
-
-
-    public UrlBuilder setPath(String path) {
-        if (path == null || path.trim().length() == 0) {
-            throw new IllegalArgumentException("Path cannot be empty");
-        }
-        this.path = path;
-        return this;
-    }
-
-
-    /**
-     * Setting a query string consecutively will replace all but the last one. Otherwise,
-     * the name/value pairs in the query string contribute to the parameters already established.
-     */
-    public UrlBuilder setQueryString(String queryString) {
-        this.queryString = queryString;
-        cleanQueryString();
-        return this;
-    }
-
-
-    /**
-     * The fragment is appended at the end of the url after a hash mark. It represents
-     * the fragement of the document that should be brought into focus when the document
-     * is rendered. Setting the fragment replaces the previous value.
-     */
-    public UrlBuilder setFragment(String fragment) {
-        this.fragment = fragment;
-        cleanFragment();
-        return this;
-    }
-
-
-    public String createUrl() {
-        appendPath();
-        appendQueryString();
-        appendFragment();
-        return url.toString();
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected String getPath() {
-        return path;
-    }
-
-
-    protected Map<String, List<String>> getParameters() {
-        parseQueryString();
-        return parameters;
-    }
-
-
-    protected void parseQueryString() {
-        if (parameters == null) {
-            parameters = new LinkedHashMap<String, List<String>>();
-        }
-
-        // if query string is null, then it has been parsed into parameters
-        if (queryString == null) {
-            return;
-        }
-        
-        String[] pairs = Util.split(queryString, PARAMETER_PAIR_SEPARATOR);
-        for (String pair : pairs) {
-            String[] nameAndValue = Util.split(pair, PARAMETER_NAME_VALUE_SEPARATOR);
-            // ignore malformed pair
-            if (nameAndValue.length != 2
-                || nameAndValue[0].trim().length() == 0) {
-                continue;
-            }
-
-            addValueToParameter(nameAndValue[0], nameAndValue[1], false);
-        }
-
-        queryString = null;
-    }
-
-
-    protected void appendPath() {
-        url.append(path);
-    }
-
-
-    protected void appendQueryString() {
-        if (parameters != null) {
-            // parse residual query string
-            parseQueryString();
-            String nextSeparatorChar = QUERY_STRING_SEPARATOR;
-            for (Map.Entry<String, List<String>> param : parameters.entrySet()) {
-                for (String value : param.getValue()) {
-                    url.append(nextSeparatorChar);
-                    url.append(param.getKey());
-                    url.append(PARAMETER_NAME_VALUE_SEPARATOR);
-                    if (encoding != null) {
-                        try {
-                            url.append(URLEncoder.encode(value, encoding));
-                        } catch (UnsupportedEncodingException ex) {
-                            throw new RuntimeException(ex);
-                        }
-                    }
-                    else {
-                        url.append(value);
-                    }
-                    nextSeparatorChar = PARAMETER_PAIR_SEPARATOR;
-                }
-            }
-        }
-        else if (queryString != null) {
-            url.append(QUERY_STRING_SEPARATOR).append(queryString);
-        }
-    }
-
-
-    protected void appendFragment() {
-        if (fragment != null) {
-            url.append(FRAGMENT_SEPARATOR).append(fragment);
-        }
-    }
-
-
-    protected void extractSegments(String url) {
-        int fragmentIndex = url.indexOf(FRAGMENT_SEPARATOR);
-        if (fragmentIndex != -1) {
-           fragment = url.substring(fragmentIndex + 1);
-           cleanFragment();
-           url = url.substring(0, fragmentIndex);
-        }
-
-        int queryStringIndex = url.indexOf(QUERY_STRING_SEPARATOR);
-        if (queryStringIndex != -1) {
-            queryString = url.substring(queryStringIndex + 1);
-            cleanQueryString();
-            path = url.substring(0, queryStringIndex);
-        }
-        else {
-            path = url;
-        }
-    }
-
-
-    protected void addValueToParameter(String name, String value, boolean replace) {
-        List<String> values = new ArrayList<String>(value == null ? 0 : 1);
-        if (value != null) {
-            values.add(value);
-        }
-        addValuesToParameter(name, values, replace);
-    }
-
-
-    protected void addValuesToParameter(String name, List<String> valuesRef, boolean replace) {
-        List<String> values = new ArrayList<String>();
-        if (valuesRef != null) {
-            values.addAll(valuesRef);
-            values.removeAll(NULL_LIST);
-        }
-
-        if (replace) {
-            parameters.put(name, values);
-        }
-        else {
-            List<String> currentValues = parameters.get(name);
-            if (currentValues == null) {
-                currentValues = new ArrayList<String>(1);
-                parameters.put(name, currentValues);
-            }
-            currentValues.addAll(values);
-        }
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private List<String> evaluateExpressions(List<String> values) {
-        if (!values.isEmpty()) {
-            List<String> ret = new ArrayList<String>(values.size());
-            for (String val : values) {
-                if (val != null) {
-                    String value = val.trim();
-                    if (ELUtils.isExpression(value)) {
-                        value = app.evaluateExpressionGet(ctx,
-                                                          value,
-                                                          String.class);
-                    }
-                    ret.add(value);
-                }
-            }
-            
-            return ret;
-        }
-        return values;
-    }
-
-
-    private void cleanFragment() {
-        if (fragment != null) {
-            String f = fragment;
-            f = f.trim();
-            if (f.startsWith(FRAGMENT_SEPARATOR)) {
-                f = f.substring(1);
-            }
-
-            if (f.length() == 0) {
-                f = null;
-            }
-
-            fragment = f;
-        }
-    }
-
-    
-    private void cleanQueryString() {
-        if (queryString != null) {
-            String q = queryString;
-            q = q.trim();
-            if (q.startsWith(QUERY_STRING_SEPARATOR)) {
-                q = q.substring(1);
-            }
-
-            if (q.length() == 0) {
-                q = null;
-            }
-            queryString = q;
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/flash/ELFlash.java b/jsf-ri/src/main/java/com/sun/faces/context/flash/ELFlash.java
deleted file mode 100644
index c054192..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/flash/ELFlash.java
+++ /dev/null
@@ -1,1461 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.context.flash;
-
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.facelets.tag.ui.UIDebug;
-import com.sun.faces.util.FacesLogger;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-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 java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.Flash;
-import javax.faces.event.PhaseId;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * <p>How this implementation works</p>
-
- * <p>This class is an application singleton.  It has one ivar, {@link
- * #innerMap}.  Entries are added to and removed from this map as needed
- * according to how the flash scope is defined in the spec.  This
- * implementation never touches the session, nor does it cause the
- * session to be created.</p>
-
- * <p>Most of the hairy logic is encapsulated with in the inner class
- * {@link #PreviousNextFlashInfoManager}.  An instance of this class is
- * obtained by calling one of the variants of getCurrentFlashManager().
- * When the instance is no longer needed for this request, call
- * releaseCurrentFlashManager().</p>
-
- * <p>Two very important methods are {@link getPhaseMapForWriting} and
- * {@link getPhaseMapForReading}.  These methods are the basis for the
- * Map implementation methods.  Methods that need to write to the map
- * use getPhaseMapForWriting(), those that need to read use
- * getPhaseMapForReading().  These methods allow for the laziness that
- * allows us to only incur a cost when the flash is actually written
- * to.</p>
-
- * <p>The operation of this class is intimately tied to the request
- * processing lifecycle.  Let's break down every run thru the request
- * processing lifecycle into two parts called "previous" and "next".  We
- * use the names "previous" and "next" to indicate the persistence and
- * timing of the data that is stored in the flash.  Consider two runs
- * through the requset processing lifecle: N and N+1.  On request N,
- * there is no "previous" request.  On Request N, any writes to the
- * flash that happen during RENDER RESPONSE go to the "next" flash map.
- * This means they are available for the ENTIRE run though the request
- * processing lifecycle on request N+1.  Any entries put into the "next"
- * flash map on request N will be expired at the end of request N+1.
- * Now, when we get into request N+1 what was considered "next" on
- * request N, is now called "previous" from the perspective of request
- * N+1.  Any reads from the flash during request N+1 come from the
- * "previous" map.  Any writes to the flash before RENDER RESPONSE go to
- * the "previous" map.  Any writes to the flash during RENDER RESPNOSE
- * go to the "next" map.</p>
- */
-
-public class ELFlash extends Flash {
-
-    // <editor-fold defaultstate="collapsed" desc="ivars">
-
-    /**
-     * <p>Keys in this map are the string version of sequence numbers
-     * obtained via calls to {@link #getNewSequenceNumber}.  Values are
-     * the actual Map instances that back the actual Map methods on this
-     * class.  All writes to and reads from this map are done by the
-     * {@link PreviousNextFlashInfoManager} inner class.</p>
-     * 
-     */
-    private Map<String,Map<String, Object>> flashInnerMap = null;
-
-    private final AtomicLong sequenceNumber = new AtomicLong(0);
-
-    private int numberOfConcurentFlashUsers = Integer.
-     parseInt(WebContextInitParameter.NumberOfConcurrentFlashUsers.getDefaultValue());
-
-    private long numberOfFlashesBetweenFlashReapings = Long.
-     parseLong(WebContextInitParameter.NumberOfFlashesBetweenFlashReapings.getDefaultValue());
-
-    private long lastReaping;
-
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="class vars">
-
-    private static final Logger LOGGER = FacesLogger.FLASH.getLogger();
-
-    /**
-     * <p>These constants are referenced from other source files in this
-     * package.  This one is a disambiguator prefix.</p>
-     */
-    static final String PREFIX = "csfcf";
-
-    /**
-     * <p>This constant is used as the key in the application map that
-     * stores the singleton ELFlash instance.</p>
-     */
-    static final String FLASH_ATTRIBUTE_NAME = PREFIX + "f";
-
-    /**
-     * <p>This constant is used as the name of the cookie sent to the
-     * client.</p>
-     */
-    static final String FLASH_COOKIE_NAME = PREFIX + "c";
-
-
-    /**
-     * <p>This constant is used as the key the request map used, in the
-     * FlashELResolver, to convey the name of the property being
-     * accessed via 'now'.</p>
-     */
-    static final String FLASH_NOW_REQUEST_KEY = FLASH_ATTRIBUTE_NAME + "n";
-
-    private enum CONSTANTS {
-
-	/**
-	 * The key in the FacesContext attributes map (hereafter
-	 * referred to as contextMap) for the request scoped {@link
-	 * PreviousNextFlashInfoManager}.
-	 */
-
-        RequestFlashManager,
-
-	/**
-	 * At the beginning of every phase, we save the value of the
-	 * facesContext.getResponseComplete() into the contextMap under
-	 * this key.  We check this value after the phase to see if this
-	 * is the phase where the user called responseComplete().  This
-	 * is important to cover cases when the user does some funny
-	 * lifecycle stuff.
-	 */
-
-        SavedResponseCompleteFlagValue,
-
-        /**
-	 * This is used as the key in the flash itself to store the messages
-	 * if they are being tracked.
-	 */
-
-        FacesMessageAttributeName,
-
-        /**
-	 * This is used as the key in the flash itself to track whether or not
-	 * messages are being saved across request/response boundaries.
-	 */
-
-        KeepAllMessagesAttributeName,
-
-        /**
-         * This key is used in the contextMap to indicate that the next
-         * get should be treated as a keep.
-         *
-         */
-        KeepFlagAttributeName,
-
-        /**
-         * This key is used in the contextMap to prevent setting the cookie
-         * twice.
-         */
-        DidWriteCookieAttributeName,
-
-    }
-
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Constructors and instance accessors">
-
-    /** Creates a new instance of ELFlash */
-    private ELFlash() {
-        flashInnerMap = new ConcurrentHashMap<String,Map<String, Object>>();
-        WebConfiguration config = WebConfiguration.getInstance();
-        String value;
-        try {
-            value = config.getOptionValue(WebContextInitParameter.NumberOfConcurrentFlashUsers);
-            numberOfConcurentFlashUsers = Integer.parseInt(value);
-        } catch (NumberFormatException nfe) {
-	    if (LOGGER.isLoggable(Level.WARNING)) {
-		LOGGER.log(Level.WARNING,
-			   "Unable to set number of concurrent flash users.  Defaulting to " +
-                           numberOfConcurentFlashUsers);
-	    }
-
-        }
-
-        try {
-            value = config.getOptionValue(WebContextInitParameter.NumberOfFlashesBetweenFlashReapings);
-            numberOfFlashesBetweenFlashReapings = Long.parseLong(value);
-        } catch (NumberFormatException nfe) {
-	    if (LOGGER.isLoggable(Level.WARNING)) {
-		LOGGER.log(Level.WARNING,
-			   "Unable to set number flashes between flash repaings.  Defaulting to " +
-                           numberOfFlashesBetweenFlashReapings);
-	    }
-
-        }
-
-    }
-
-    /**
-     * <p>Returns the flash <code>Map</code> for this application.  This is
-     * a convenience method that calls
-     * <code>FacesContext.getCurrentInstance()</code> and then calls the
-     * overloaded <code>getFlash()</code> that takes a
-     * <code>FacesContext</code> with it.</p>
-     * 
-     * @return The flash <code>Map</code> for this session.
-     */
-    
-    public static Map<String,Object> getFlash() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        return getFlash(context.getExternalContext(), true);
-    }
-
-    /**
-     *
-     * @param extContext the <code>ExternalContext</code> for this request.
-     *
-     * @param create <code>true</code> to create a new instance for this request if 
-     * necessary; <code>false</code> to return <code>null</code> if there's no 
-     * instance in the current <code>session</code>.
-     * 
-     * @return The flash <code>Map</code> for this session.
-     */
-    
-    public static ELFlash getFlash(ExternalContext extContext, boolean create) {
-        Map<String, Object> appMap = extContext.getApplicationMap();
-        ELFlash flash = (ELFlash) 
-            appMap.get(FLASH_ATTRIBUTE_NAME);
-        if (null == flash && create) {
-            synchronized (extContext.getContext()) {
-                if (null == (flash = (ELFlash)
-                    appMap.get(FLASH_ATTRIBUTE_NAME))) {
-                    flash = new ELFlash();
-                    appMap.put(FLASH_ATTRIBUTE_NAME, flash);
-                }
-            }
-        }
-        return flash;
-    }
-    
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Abstract class overrides">
-
-    
-    public boolean isKeepMessages() {
-        boolean result = false;
-        Map<String, Object> phaseMap;
-
-        if (null != (phaseMap = loggingGetPhaseMapForReading(false))) {
-            Object value = phaseMap.get(CONSTANTS.KeepAllMessagesAttributeName.toString());
-            result = (null != value) ? (Boolean) value : false;
-        }
-        
-        return result;
-    }
-    
-    
-    public void setKeepMessages(boolean newValue) {
-
-        loggingGetPhaseMapForWriting(false).put(CONSTANTS.KeepAllMessagesAttributeName.toString(),
-                Boolean.valueOf(newValue));
-
-    }
-    
-    
-    public boolean isRedirect() {
-        boolean result = false;
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        Map<Object, Object> contextMap = context.getAttributes();
-        PreviousNextFlashInfoManager flashManager;
-        if (null != (flashManager = getCurrentFlashManager(contextMap, false))) {
-            result = flashManager.getPreviousRequestFlashInfo().isIsRedirect();
-        }
-
-        return result;
-    }
-    
-
-    // PENDING(edburns): I'm going to make an entry to the errata.  This
-    // method can't be implemented because the decision of whether or
-    // not to redirect is made by the navigationHandler.
-    public void setRedirect(boolean newValue) {
-    }
-
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Map overrides">
-
-    
-    @SuppressWarnings("element-type-mismatch")
-    public Object get(Object key) {
-        Object result = null;
-
-        if (null != key) {
-            if (key.equals("keepMessages")) {
-                result = this.isKeepMessages();
-            } else if (key.equals("redirect")) {
-                result = this.isRedirect();
-            } else {
-                FacesContext context = FacesContext.getCurrentInstance();
-                if (isKeepFlagSet(context)) {
-                    result = getPhaseMapForReading().get(key);
-                    keep(key.toString());
-                    clearKeepFlag(context);
-                    return result;
-                }
-
-            }
-
-        }
-        
-        if (null == result) {
-            result = getPhaseMapForReading().get(key);
-        }
-
-        if (LOGGER.isLoggable(Level.FINEST)) {
-            LOGGER.log(Level.FINEST, "get({0}) = {1}", new Object [] { key, result});
-        }
-
-        return result;
-    }
-
-
-    public Object put(String key, Object value) {
-        Boolean b = null;
-        Object result = null;
-
-        if (null != key) {
-            if (key.equals("keepMessages")) {
-                this.setKeepMessages(b = Boolean.parseBoolean((String) value));
-            }
-            if (key.equals("redirect")) {
-                this.setRedirect(b = Boolean.parseBoolean((String) value));
-            }
-        }
-        result = (null == b) ? getPhaseMapForWriting().put(key, value) : b;
-        if (LOGGER.isLoggable(Level.FINEST)) {
-            LOGGER.log(Level.FINEST, "put({0},{1})", new Object [] { key, value});
-        }
-
-        return result;
-    }
-
-    @SuppressWarnings("element-type-mismatch")
-    public Object remove(Object key) {
-        Object result = null;
-
-        result = getPhaseMapForWriting().remove(key);
-
-        return result;
-    }
-
-    
-    @SuppressWarnings("element-type-mismatch")
-    public boolean containsKey(Object key) {
-        boolean result = false;
-
-        result = getPhaseMapForReading().containsKey(key);
-
-        return result;
-    }
-
-    
-    public boolean containsValue(Object value) {
-        boolean result = false;
-
-        result = getPhaseMapForReading().containsValue(value);
-
-        return result;
-    }
-
-    
-    public void putAll(Map<? extends String, ?> t) {
-
-        getPhaseMapForWriting().putAll(t);
-
-    }
-
-    
-    public Collection<Object> values() {
-        Collection<Object> result = null;
-
-        result = getPhaseMapForReading().values();
-
-        return result;
-    }
-
-    
-    public int size() {
-        int result = 0;
-
-        result = getPhaseMapForReading().size();
-
-        return result;
-    }
-
-    
-    public void clear() {
-
-        getPhaseMapForWriting().clear();
-
-    }
-
-    
-    @SuppressWarnings({"CloneDoesntCallSuperClone"})
-    @Override
-    protected Object clone() throws CloneNotSupportedException {
-        throw new CloneNotSupportedException();
-    }
-
-    
-    public Set<Map.Entry<String, Object>> entrySet() {
-        Set<Map.Entry<String, Object>> 
-                readingMapEntrySet = getPhaseMapForReading().entrySet(),
-                writingMapEntrySet = getPhaseMapForWriting().entrySet(),
-                result = null;
-
-        result = new HashSet<Map.Entry<String, Object>>();
-        result.addAll(readingMapEntrySet);
-        result.addAll(writingMapEntrySet);
-
-        return result;
-    }
-
-    
-    public boolean isEmpty() {
-        boolean 
-                readingMapIsEmpty = getPhaseMapForReading().isEmpty(),
-                writingMapIsEmpty = getPhaseMapForWriting().isEmpty(),
-                result = false;
-
-        result = readingMapIsEmpty && writingMapIsEmpty;
-
-        return result;
-    }
-
-    
-    public Set<String> keySet() {
-        Set<String>
-                readingMapKeySet = getPhaseMapForReading().keySet(),
-                writingMapKeySet = getPhaseMapForWriting().keySet(),
-                result = null;
-
-        result = new HashSet<String>();
-        result.addAll(readingMapKeySet);
-        result.addAll(writingMapKeySet);
-
-        return result;
-    }
-
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Flash overrides">
-
-    
-    public void keep(String key) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
-        Map<Object, Object> contextMap = context.getAttributes();
-        PreviousNextFlashInfoManager flashManager;
-        if (null != (flashManager = getCurrentFlashManager(contextMap, true))) {
-            Object toKeep;
-
-            if (null == (toKeep = requestMap.remove(key))) {
-                FlashInfo flashInfo = null;
-                if (null != (flashInfo = flashManager.getPreviousRequestFlashInfo())) {
-                    toKeep = flashInfo.getFlashMap().remove(key);
-                }
-            }
-
-            if (null != toKeep) {
-                getPhaseMapForWriting().put(key, toKeep);
-            }
-        }
-
-
-    }
-
-    
-    public void putNow(String key, Object value) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        Map<Object, Object> contextMap = context.getAttributes();
-        PreviousNextFlashInfoManager flashManager;
-        if (null != (flashManager = getCurrentFlashManager(contextMap, true))) {
-            FlashInfo flashInfo = null;
-            if (null != (flashInfo = flashManager.getPreviousRequestFlashInfo())) {
-                flashInfo.getFlashMap().put(key, value);
-            }
-        }
-    }
-    
-    public void doPrePhaseActions(FacesContext context) {
-        PhaseId currentPhase = context.getCurrentPhaseId();
-        Map<Object, Object> contextMap = context.getAttributes();
-        contextMap.put(CONSTANTS.SavedResponseCompleteFlagValue,
-                context.getResponseComplete());
-
-        if (currentPhase.equals(PhaseId.RESTORE_VIEW)) {
-            Cookie cookie = null;
-
-            if (null != (cookie = getCookie(context.getExternalContext()))) {
-                getCurrentFlashManager(context, contextMap, cookie);
-            }
-
-            if (this.isKeepMessages()) {
-                this.restoreAllMessages(context);
-            }
-        }
-    }
-
-    public void doPostPhaseActions(FacesContext context) {
-        PhaseId currentPhase = context.getCurrentPhaseId();
-        Map<Object, Object> contextMap = context.getAttributes();
-        boolean
-                responseCompleteJustSetTrue = responseCompleteWasJustSetTrue(context, contextMap),
-                lastPhaseForThisRequest = responseCompleteJustSetTrue ||
-                                          currentPhase == PhaseId.RENDER_RESPONSE;
-        if (lastPhaseForThisRequest) {
-            doLastPhaseActions(context, false);
-        }
-    }
-
-    /**
-     * <p>This is the most magic of methods.  There are several scenarios
-     * in which this method can be called, but the first time it is
-     * called for a request it takes action, while on subsequent times
-     * it returns without taking action.  This is due to the call to
-     * {@link #releaseCurrentFlashManager}.  After this call, any calls
-     * to {@link #getCurrentFlashManager} will return null.</p>
-
-     * <p>Scenario 1: normal request ending.  This will be called after
-     * the RENDER_RESPONSE phase executes.  outgoingResponseIsRedirect will be false.</p>
-
-     * <p>Scenario 2: navigationHandler asks extContext for redirect.
-     * In this case, extContext calls this method directly,
-     * outgoingResponseIsRedirect will be true.</p>
-
-     * <p>Scenario 3: extContext.flushBuffer(): As far as I can tell,
-     * this is only called in the JSP case, but it's good to call it
-     * from there anyway, because we need to write our cookie before the
-     * response is committed.  outgoingResponseIsRedirect is false.</p>
-
-     * <p>Scenario 4: after rendering the response in JSP, but before
-     * the buffer is flushed.  In the JSP case, I've found this necessary
-     * because the call to extContext.flushBuffer() is too late, the
-     * response has already been committed by that
-     * point. outgoingResponseIsRedirect is false.</p>
-     */
-
-    public void doLastPhaseActions(FacesContext context, boolean outgoingResponseIsRedirect) {
-        ExternalContext extContext = context.getExternalContext();
-        Map<Object, Object> contextMap = context.getAttributes();
-        PreviousNextFlashInfoManager flashManager = getCurrentFlashManager(contextMap, false);
-        if (null == flashManager) {
-            return;
-        }
-        if (this.isKeepMessages()) {
-            this.saveAllMessages(context);
-        }
-        releaseCurrentFlashManager(contextMap);
-
-	// What we do in this if-else statement has consequences for
-	// PreviousNextFlashInfoManager.decode().
-        
-        if (outgoingResponseIsRedirect) {
-            FlashInfo previousRequestFlashInfo = flashManager.getPreviousRequestFlashInfo();
-	    // Next two methods are VITALLY IMPORTANT!
-            previousRequestFlashInfo.setIsRedirect(true);
-            flashManager.expireNext_MovePreviousToNext();
-        } else {
-            FlashInfo flashInfo = flashManager.getPreviousRequestFlashInfo();
-            if (null != flashInfo && flashInfo.getLifetimeMarker() ==
-                LifetimeMarker.SecondTimeThru) {
-                flashManager.expirePrevious();
-            }
-        }
-        if (LOGGER.isLoggable(Level.FINEST)) {
-            LOGGER.log(Level.FINEST, "---------------------------------------");
-        }
-
-
-        setCookie(context, flashManager, flashManager.encode());
-
-    }
-
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Helpers">
-
-    private void maybeWriteCookie(FacesContext context,
-            PreviousNextFlashInfoManager flashManager) {
-        FlashInfo flashInfo = flashManager.getPreviousRequestFlashInfo();
-        if (null != flashInfo && flashInfo.getLifetimeMarker() ==
-            LifetimeMarker.SecondTimeThru) {
-            PreviousNextFlashInfoManager copiedFlashManager =
-                    flashManager.copyWithoutInnerMap();
-            copiedFlashManager.expirePrevious();
-            setCookie(context, flashManager,
-                    copiedFlashManager.encode());
-        }
-    }
-
-
-    void setKeepFlag(FacesContext context) {
-        context.getAttributes().put(CONSTANTS.KeepFlagAttributeName, Boolean.TRUE);
-    }
-
-    void clearKeepFlag(FacesContext context) {
-        context.getAttributes().remove(CONSTANTS.KeepFlagAttributeName);
-    }
-
-    boolean isKeepFlagSet(FacesContext context) {
-        return Boolean.TRUE ==
-                context.getAttributes().get(CONSTANTS.KeepFlagAttributeName);
-    }
-
-
-
-    private long getNewSequenceNumber() {
-        long result = sequenceNumber.incrementAndGet();
-
-        if (0 == result % numberOfFlashesBetweenFlashReapings) {
-            reapFlashes();
-        }
-
-        if (result == Long.MAX_VALUE) {
-            result = 1;
-            sequenceNumber.set(1);
-        }
-
-        return result;
-    }
-
-    private void reapFlashes() {
-
-        if (flashInnerMap.size() < numberOfConcurentFlashUsers) {
-            return;
-        }
-
-        Set<String> keys = flashInnerMap.keySet();
-        long
-                sequenceNumberToTest,
-                currentSequenceNumber = sequenceNumber.get();
-        Map<String, Object> curFlash;
-        for (String cur : keys) {
-            sequenceNumberToTest = Long.parseLong(cur);
-            if (numberOfConcurentFlashUsers < currentSequenceNumber - sequenceNumberToTest) {
-                if (null != (curFlash = flashInnerMap.get(cur))) {
-                    curFlash.clear();
-                }
-                flashInnerMap.remove(cur);
-            }
-        }
-    }
-
-    private boolean responseCompleteWasJustSetTrue(FacesContext context,
-            Map<Object, Object> contextMap) {
-        boolean result = false;
-
-        // If it was false, but it's now true, return true
-        result = (Boolean.FALSE == contextMap.get(CONSTANTS.SavedResponseCompleteFlagValue) &&
-                 context.getResponseComplete());
-
-        return result;
-    }
-
-    private static String getLogPrefix(FacesContext context) {
-        StringBuilder result = new StringBuilder();
-        ExternalContext extContext = context.getExternalContext();
-        Object request = extContext.getRequest();
-        if (request instanceof HttpServletRequest) {
-            result.append(((HttpServletRequest)request).getMethod()).append(" ");
-        }
-        UIViewRoot root = context.getViewRoot();
-        if (null != root) {
-            String viewId = root.getViewId();
-            if (null != viewId) {
-                result.append(viewId).append(" ");
-            }
-        }
-
-        return result.toString();
-    }
-
-    private Map<String, Object> loggingGetPhaseMapForWriting(boolean loggingEnabled) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        Map<String, Object> result = null;
-        PhaseId currentPhase = context.getCurrentPhaseId();
-        Map<Object, Object> contextMap = context.getAttributes();
-
-        PreviousNextFlashInfoManager flashManager;
-        if (null != (flashManager = getCurrentFlashManager(contextMap, true))) {
-            FlashInfo flashInfo;
-            boolean isDebugLog = loggingEnabled && LOGGER.isLoggable(Level.FINEST);
-
-            if (currentPhase.getOrdinal() < PhaseId.RENDER_RESPONSE.getOrdinal()) {
-                flashInfo = flashManager.getPreviousRequestFlashInfo();
-                if (isDebugLog) {
-                    LOGGER.log(Level.FINEST, "{0}previous[{1}]",
-                            new Object[]{getLogPrefix(context),
-                                flashInfo.getSequenceNumber()});
-                }
-            } else {
-                flashInfo = flashManager.getNextRequestFlashInfo(this, true);
-                if (isDebugLog) {
-                    LOGGER.log(Level.FINEST, "{0}next[{1}]",
-                            new Object[]{getLogPrefix(context),
-                                flashInfo.getSequenceNumber()});
-                }
-                maybeWriteCookie(context, flashManager);
-            }
-            result = flashInfo.getFlashMap();
-        }
-
-        return result;
-
-    }
-
-    /**
-     * <p>If the current phase is earlier than RENDER_RESPONSE, return
-     * the map for the "previous" request.  Otherwise, return the map
-     * for the "next" request.  Note that we use
-     * getCurrentFlashManager(contextMap,true).  This is because if this
-     * method is being called, we know we actually need the map, so we
-     * have to ensure the underlying data structure is present before
-     * trying to access it.</p>
-     */
-
-    private Map<String, Object> getPhaseMapForWriting() {
-        return loggingGetPhaseMapForWriting(true);
-    }
-
-
-    private Map<String, Object> loggingGetPhaseMapForReading(boolean loggingEnabled) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        Map<String, Object> result = Collections.emptyMap();
-        Map<Object, Object> contextMap = context.getAttributes();
-
-        PreviousNextFlashInfoManager flashManager;
-        if (null != (flashManager = getCurrentFlashManager(contextMap, false))) {
-            FlashInfo flashInfo;
-
-            if (null != (flashInfo = flashManager.getPreviousRequestFlashInfo())) {
-                boolean isDebugLog = loggingEnabled && LOGGER.isLoggable(Level.FINEST);
-                if (isDebugLog) {
-                    LOGGER.log(Level.FINEST, "{0}previous[{1}]",
-                            new Object[]{getLogPrefix(context),
-                                flashInfo.getSequenceNumber()});
-                }
-
-                result = flashInfo.getFlashMap();
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * <p>Always return the map for the "previous" request.  Note that
-     * we use getCurrentFlashManager(contextMap,false).  This is because
-     * if this method is being called, and there is pre-existing data in
-     * the flash from a previous write, then the
-     * PreviousNextFlashInfoManager will already have been created.  If
-     * there is not pre-existing data, we don't create the
-     * PreviousNextFlashInfoManager, and therefore just return the empty
-     * map.</p>
-     */
-
-    private Map<String, Object> getPhaseMapForReading() {
-        return loggingGetPhaseMapForReading(true);
-    }
-
-    void saveAllMessages(FacesContext context) {
-        // take no action on the GET that comes after a REDIRECT
-        Map<Object, Object> contextMap = context.getAttributes();
-        PreviousNextFlashInfoManager flashManager;
-        if (null == (flashManager = getCurrentFlashManager(contextMap, true))) {
-            return;
-        }
-        if (flashManager.getPreviousRequestFlashInfo().isIsRedirect()) {
-            return;
-        }
-
-        Iterator<String> messageClientIds = context.getClientIdsWithMessages();
-        List<FacesMessage> facesMessages;
-        Map<String, List<FacesMessage>> allFacesMessages = null;
-        Iterator<FacesMessage> messageIter;
-        String curMessageId;
-
-        // Save all the FacesMessages into a Map, which we store in the flash.
-
-        // Step 1, go through the FacesMessage instances for each clientId
-        // in the messageClientIds list.
-        while (messageClientIds.hasNext()) {
-            curMessageId = messageClientIds.next();
-            // Get the messages for this clientId
-            messageIter = context.getMessages(curMessageId);
-            facesMessages = new ArrayList<FacesMessage>();
-            while (messageIter.hasNext()) {
-                facesMessages.add(messageIter.next());
-            }
-            // Add the list to the map
-            if (null == allFacesMessages) {
-                allFacesMessages = new HashMap<String, List<FacesMessage>>();
-            }
-            allFacesMessages.put(curMessageId, facesMessages);
-        }
-        facesMessages = null;
-
-        // Step 2, go through the FacesMessages that do not have a client
-        // id associated with them.
-        messageIter = context.getMessages(null);
-        // Make sure to overwrite the previous facesMessages list
-        facesMessages = new ArrayList<FacesMessage>();
-        while (messageIter.hasNext()) {
-            facesMessages.add(messageIter.next());
-        }
-        if (null != facesMessages) {
-            // Add the list to the map
-            if (null == allFacesMessages) {
-                allFacesMessages = new HashMap<String, List<FacesMessage>>();
-            }
-            allFacesMessages.put(null, facesMessages);
-        }
-        getPhaseMapForWriting().put(CONSTANTS.FacesMessageAttributeName.toString(),
-                allFacesMessages);
-
-    }
-
-    @SuppressWarnings("element-type-mismatch")
-    void restoreAllMessages(FacesContext context) {
-        Map<String, List<FacesMessage>> allFacesMessages;
-        Map<String, Object> phaseMap = getPhaseMapForReading();
-        List<FacesMessage> facesMessages;
-
-
-        if (null != (allFacesMessages = (Map<String, List<FacesMessage>>)
-                phaseMap.get(CONSTANTS.FacesMessageAttributeName.toString()))) {
-            for (Map.Entry<String, List<FacesMessage>> cur : allFacesMessages.entrySet()) {
-                if (null != (facesMessages = allFacesMessages.get(cur.getKey()))) {
-                    for (FacesMessage curMessage : facesMessages) {
-                        context.addMessage(cur.getKey(), curMessage);
-                    }
-                }
-            }
-            phaseMap.remove(CONSTANTS.FacesMessageAttributeName);
-        }
-    }
-
-
-    /**
-     * <p>Return the cookie that came from the browser, if any.</p>
-     */
-    private Cookie getCookie(ExternalContext extContext) {
-        Cookie result = null;
-
-        result = (Cookie) extContext.getRequestCookieMap().get(FLASH_COOKIE_NAME);
-
-        return result;
-    }
-
-    /** 
-     * <p>Set the cookie iff the response was not yet committed.  If the response
-     * was committed, log a warning.</p>
-     */
-
-    private void setCookie(FacesContext context, 
-            PreviousNextFlashInfoManager flashManager,
-            Cookie toSet) {
-        Map<Object, Object> contextMap = context.getAttributes();
-        ExternalContext extContext = context.getExternalContext();
-        if (contextMap.containsKey(CONSTANTS.DidWriteCookieAttributeName)) {
-            return;
-        }
-        FlashInfo
-                nextFlash = flashManager.getNextRequestFlashInfo(),
-                prevFlash = flashManager.getPreviousRequestFlashInfo();
-
-        // Don't try to write the cookie unless there is data in the flash.
-        if ((null != nextFlash && !nextFlash.getFlashMap().isEmpty()) ||
-            (null != prevFlash && !prevFlash.getFlashMap().isEmpty())) {
-            HttpServletResponse resp = (HttpServletResponse) extContext.getResponse();
-            if (resp.isCommitted()) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                            "jsf.externalcontext.flash.response.already.committed");
-                }
-            } else {
-                resp.addCookie(toSet);
-            }
-            contextMap.put(CONSTANTS.DidWriteCookieAttributeName, Boolean.TRUE);
-        }
-    }
-
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Inner classes">
-
-    private enum LifetimeMarker {
-
-        // these must be unique
-        
-        FirstTimeThru("f"),
-        SecondTimeThru("s"),
-        IsRedirect("r"),
-        IsNormal("n");
-
-        private static char FIRST_TIME_THRU = 'f';
-        private static char SECOND_TIME_THRU = 's';
-        private static char IS_REDIRECT = 'r';
-        private static char IS_NORMAL = 'n';
-
-        private String name;
-
-        private LifetimeMarker(String name) {
-            this.name = name;
-        }
-
-        @Override
-        public String toString() {
-            return name;
-        }
-        
-        public char encode() {
-            return name.charAt(0);
-        }
-
-        public static LifetimeMarker decode(char c) {
-            LifetimeMarker result = FirstTimeThru;
-
-            if (FIRST_TIME_THRU == c) {
-                result = FirstTimeThru;
-            } else if (SECOND_TIME_THRU == c) {
-                result = SecondTimeThru;
-            } else if (IS_REDIRECT == c) {
-                result = IsRedirect;
-            } else if (IS_NORMAL == c) {
-                result = IsNormal;
-            } else {
-                throw new IllegalStateException("class invariant failed: invalid lifetime marker");
-            }
-
-            return result;
-        }
-                
-    }
-
-    private void releaseCurrentFlashManager(Map<Object, Object> contextMap) {
-        contextMap.remove(CONSTANTS.RequestFlashManager);
-    }
-
-    /**
-     * <p>Called when you need to get access to the flashManager.  If
-     * argument create is true, and no instance of the FlashManager
-     * exists for this request, create it and store it in the
-     * contextMap.</p>
-     */
-    private PreviousNextFlashInfoManager getCurrentFlashManager(Map<Object, Object> contextMap,
-            boolean create) {
-        PreviousNextFlashInfoManager result = (PreviousNextFlashInfoManager)
-                contextMap.get(CONSTANTS.RequestFlashManager);
-
-        if (null == result && create) {
-            result = new PreviousNextFlashInfoManager(flashInnerMap);
-            result.initializeBaseCase(this);
-            contextMap.put(CONSTANTS.RequestFlashManager, result);
-
-        }
-        return result;
-    }
-
-    /**
-     * <p>Called on the preRestoreView phase if the browser sent us a
-     * cookie.  If no instance of the FlashManager exists for this
-     * request, create it and store it in the contextMap.</p>
-     */
-    private PreviousNextFlashInfoManager getCurrentFlashManager(FacesContext context,
-            Map<Object, Object> contextMap,
-            Cookie cookie) {
-        PreviousNextFlashInfoManager result = (PreviousNextFlashInfoManager)
-                contextMap.get(CONSTANTS.RequestFlashManager);
-
-        if (null == result) {
-            result = new PreviousNextFlashInfoManager(flashInnerMap);
-            result.decode(context, this, cookie);
-            contextMap.put(CONSTANTS.RequestFlashManager, result);
-
-        }
-        return result;
-    }
-
-    /**
-     * <p>On any given request, there are actually two maps behind the
-     * flash.  Which one is actually used on a given Map method depends
-     * on the current lifecycle phase at the time the method is invoked.
-     * There is a "next" map, and a "previous" map.  This class manages
-     * the complexities of dealing with these two maps, and does so by
-     * relying on another inner class, FlashInfo.</p>
-
-     * <p>The "next" map is used in only one case, which happens to be a
-     * VERY common case: write operations to the flash that happen
-     * during render response.</p>
-
-     * <p>The "previous" map is used for write operations that happen
-     * before render response, and for all read operations.</p>
-
-     * <p>This class knows how to "decode" its state from an incoming
-     * cookie, written by a previous call to "encode".</p>
-
-     * <p>See the docs for FlashInfo for more information.</p>
-     */
-
-    private static final class PreviousNextFlashInfoManager {
-
-        private FlashInfo previousRequestFlashInfo;
-
-        private FlashInfo nextRequestFlashInfo;
-
-        private boolean incomingCookieCameFromRedirect = false;
-
-        private Map<String,Map<String, Object>> innerMap;
-
-        private PreviousNextFlashInfoManager() {}
-
-        private PreviousNextFlashInfoManager(Map<String,Map<String, Object>> innerMap) {
-            this.innerMap = innerMap;
-        }
-
-        protected PreviousNextFlashInfoManager copyWithoutInnerMap() {
-            PreviousNextFlashInfoManager result = new PreviousNextFlashInfoManager();
-            result.innerMap = Collections.emptyMap();
-            if (null != previousRequestFlashInfo) {
-                result.previousRequestFlashInfo = (FlashInfo)
-                     this.previousRequestFlashInfo.copyWithoutInnerMap();
-            }
-            if (null != nextRequestFlashInfo) {
-                result.nextRequestFlashInfo = (FlashInfo)
-                     this.nextRequestFlashInfo.copyWithoutInnerMap();
-            }
-            result.incomingCookieCameFromRedirect = this.incomingCookieCameFromRedirect;
-
-            return result;
-        }
-
-
-
-        @Override
-        public String toString() {
-            String result = null;
-
-            result = "previousRequestSequenceNumber: " +
-                    ((null != previousRequestFlashInfo) ? previousRequestFlashInfo.getSequenceNumber() : "null") +
-                    " nextRequestSequenceNumber: " +
-                    ((null != nextRequestFlashInfo) ? nextRequestFlashInfo.getSequenceNumber() : "null");
-
-            return result;
-        }
-
-        void initializeBaseCase(ELFlash flash) {
-            Map<String, Object> flashMap = null;
-
-            previousRequestFlashInfo = new FlashInfo(flash.getNewSequenceNumber(),
-                    LifetimeMarker.FirstTimeThru, false);
-            innerMap.put(previousRequestFlashInfo.getSequenceNumber() + "",
-                    flashMap = new HashMap<String, Object>());
-            previousRequestFlashInfo.setFlashMap(flashMap);
-
-            nextRequestFlashInfo = new FlashInfo(flash.getNewSequenceNumber(),
-                    LifetimeMarker.FirstTimeThru, false);
-            innerMap.put(nextRequestFlashInfo.getSequenceNumber() + "",
-                    flashMap = new HashMap<String, Object>());
-            nextRequestFlashInfo.setFlashMap(flashMap);
-        }
-
-        void expirePrevious() {
-            // expire previous
-            if (null != previousRequestFlashInfo) {
-                Map<String, Object> flashMap;
-                // clear the old map
-                if (null != (flashMap = previousRequestFlashInfo.getFlashMap())) {
-                    if (LOGGER.isLoggable(Level.FINEST)) {
-                        LOGGER.log(Level.FINEST, "{0} expire previous[{1}]",
-                                new Object[]{getLogPrefix(FacesContext.getCurrentInstance()),
-                                    previousRequestFlashInfo.getSequenceNumber()});
-
-                    }
-                    flashMap.clear();
-                }
-                // remove it from the flash
-                innerMap.remove(previousRequestFlashInfo.getSequenceNumber() + "");
-                previousRequestFlashInfo = null;
-            }
-        }
-
-        void expireNext_MovePreviousToNext() {
-            if (null != nextRequestFlashInfo) {
-                if (LOGGER.isLoggable(Level.FINEST)) {
-                    LOGGER.log(Level.FINEST, "{0} expire next[{1}], move previous to next",
-                            new Object[]{getLogPrefix(FacesContext.getCurrentInstance()),
-                                nextRequestFlashInfo.getSequenceNumber()});
-
-                }
-                // clear the old map
-                nextRequestFlashInfo.getFlashMap().clear();
-                // remove it from the flash
-                innerMap.remove(nextRequestFlashInfo.getSequenceNumber() + "");
-                nextRequestFlashInfo = null;
-            }
-
-            nextRequestFlashInfo = previousRequestFlashInfo;
-            previousRequestFlashInfo = null;
-        }
-
-	/**
-	 * <p>Decode the state of the PreviousNextFlashInfoManager from
-	 * a Cookie.  This entire method is wrapped in a try-catch block
-	 * to prevent any errors from malformed cookies from polluting
-	 * the system.  When any error occurs, the flash is not usable
-	 * for this request, and a nice error message is logged.</p>
-
-	 * <p>This method is where the LifetimeMarker is incremeted,
-	 * UNLESS the incoming request is the GET after the REDIRECT
-	 * after POST, in which case we don't increment it because the
-	 * system will expire the entries in the doLastPhaseActions.</p>
-	 *
-	 */
-
-        void decode(FacesContext context, ELFlash flash, Cookie cookie) {
-            String temp, value = cookie.getValue();
-            try {
-                int i = value.indexOf("_");
-
-                // IMPORTANT: what was "next" when the cookie was
-                // encoded is now "previous".  Therefore decode "next" first.
-                temp = value.substring(0, i++);
-
-                if (0 < temp.length()) {
-                    nextRequestFlashInfo = new FlashInfo();
-                    nextRequestFlashInfo.decode(temp);
-                }
-                // invariant we must always have something after the _
-                previousRequestFlashInfo = new FlashInfo();
-                previousRequestFlashInfo.decode(value.substring(i));
-
-		// handle the consequences of action taken on doLastPhaseActions
-                if (previousRequestFlashInfo.isIsRedirect()) {
-                    this.setIncomingCookieCameFromRedirect(true);
-                    previousRequestFlashInfo.setIsRedirect(false);
-                } else {
-                    // Don't make the flash older on debug requests
-                    if (!UIDebug.debugRequest(context)) {
-                        previousRequestFlashInfo.setLifetimeMarker(LifetimeMarker.SecondTimeThru);
-                    }
-                }
-                Map<String, Object> flashMap;
-                // If the browser sent a cookie that is valid, but
-                // doesn't correspond to a map in memory...
-                if (null == (flashMap = innerMap.get(previousRequestFlashInfo.getSequenceNumber() + ""))) {
-                    // create a new map
-                    previousRequestFlashInfo = new FlashInfo();
-                    previousRequestFlashInfo.setSequenceNumber(flash.getNewSequenceNumber());
-                    previousRequestFlashInfo.setLifetimeMarker(LifetimeMarker.FirstTimeThru);
-                    previousRequestFlashInfo.setIsRedirect(false);
-                    // put it in the flash
-                    innerMap.put(previousRequestFlashInfo.getSequenceNumber() + "",
-                            flashMap = new HashMap<String, Object>());
-                }
-                previousRequestFlashInfo.setFlashMap(flashMap);
-                if (null != nextRequestFlashInfo) {
-                    if (null == (flashMap = innerMap.get(nextRequestFlashInfo.getSequenceNumber() + ""))) {
-                        // create a new map
-                        nextRequestFlashInfo = new FlashInfo();
-                        nextRequestFlashInfo.setSequenceNumber(flash.getNewSequenceNumber());
-                        nextRequestFlashInfo.setLifetimeMarker(LifetimeMarker.FirstTimeThru);
-                        nextRequestFlashInfo.setIsRedirect(false);
-                        // put it in the flash
-                        innerMap.put(nextRequestFlashInfo.getSequenceNumber() + "",
-                                flashMap = new HashMap<String, Object>());
-                    }
-                    nextRequestFlashInfo.setFlashMap(flashMap);
-                }
-            } catch (Throwable t) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                            "jsf.externalcontext.flash.bad.cookie",
-                            new Object [] { value });
-                }
-            }
-
-        }
-
-	/**
-	 * <p>Encode the current state of the
-	 * PreviousNextFlashInfoManager to the cookie.</p>
-	 */
-        Cookie encode() {
-            Cookie result = null;
-
-            String value = ((null != previousRequestFlashInfo) ? previousRequestFlashInfo.encode() : "")  + "_" +
-                           ((null != nextRequestFlashInfo) ? nextRequestFlashInfo.encode() : "");
-            result = new Cookie(FLASH_COOKIE_NAME, value);
-            if (1 == value.length()) {
-                result.setMaxAge(0);
-                result.setPath("/");
-            }
-
-            return result;
-        }
-
-        FlashInfo getPreviousRequestFlashInfo() {
-            return previousRequestFlashInfo;
-        }
-
-        void setPreviousRequestFlashInfo(FlashInfo thisRequestFlashInfo) {
-            this.previousRequestFlashInfo = thisRequestFlashInfo;
-        }
-
-        FlashInfo getNextRequestFlashInfo() {
-            return nextRequestFlashInfo;
-        }
-
-        FlashInfo getNextRequestFlashInfo(ELFlash flash, boolean create) {
-            if (create && null == nextRequestFlashInfo) {
-                nextRequestFlashInfo = new FlashInfo();
-                nextRequestFlashInfo.setSequenceNumber(flash.getNewSequenceNumber());
-                nextRequestFlashInfo.setLifetimeMarker(LifetimeMarker.FirstTimeThru);
-                nextRequestFlashInfo.setIsRedirect(false);
-                // put it in the flash
-                Map<String, Object> flashMap = null;
-                innerMap.put(nextRequestFlashInfo.getSequenceNumber() + "",
-                        flashMap = new HashMap<String, Object>());
-                nextRequestFlashInfo.setFlashMap(flashMap);
-            }
-            return nextRequestFlashInfo;
-        }
-
-        void setNextRequestFlashInfo(FlashInfo nextRequestFlashInfo) {
-            this.nextRequestFlashInfo = nextRequestFlashInfo;
-        }
-
-        boolean isIncomingCookieCameFromRedirect() {
-            return incomingCookieCameFromRedirect;
-        }
-
-        void setIncomingCookieCameFromRedirect(boolean incomingCookieCameFromRedirect) {
-            this.incomingCookieCameFromRedirect = incomingCookieCameFromRedirect;
-        }
-
-    }
-
-    /**
-     * <p>Encapsulate one of the two maps that back the flash for the
-     * current request.</p>
-     */
-    private static final class FlashInfo {
-
-	/**
-	 * <p>Set to true by the Flash when the extContext tells us
-	 * there is a redirect.</p>
-	 */
-        private boolean isRedirect;
-
-	/**
-	 * <p>How many times has this map been through the lifecycle?</p>
-	 */
-        private LifetimeMarker lifetimeMarker;
-
-	/**
-	 * <p>Application Unique key in the innerMap.</p>
-	 */
-
-        private long sequenceNumber;
-
-	/**
-	 * <p>The Map that stores the data. This map itself is stored in
-	 * innerMap under the key given by the value of
-	 * sequenceNumber.</p>
-	 */
-        private Map<String, Object> flashMap;
-
-        private FlashInfo() {
-
-        }
-
-        FlashInfo(long sequenceNumber, LifetimeMarker lifetimeMarker,
-                boolean isRedirect) {
-            setSequenceNumber(sequenceNumber);
-            setLifetimeMarker(lifetimeMarker);
-            setIsRedirect(isRedirect);
-        }
-
-        FlashInfo copyWithoutInnerMap()  {
-            FlashInfo result = new FlashInfo(this.sequenceNumber, 
-                    this.lifetimeMarker, this.isRedirect);
-
-            return result;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null) {
-                return false;
-            }
-            if (getClass() != obj.getClass()) {
-                return false;
-            }
-            final FlashInfo other = (FlashInfo) obj;
-            if (this.isRedirect != other.isRedirect) {
-                return false;
-            }
-            if (this.lifetimeMarker != other.lifetimeMarker && (this.lifetimeMarker == null || !this.lifetimeMarker.equals(other.lifetimeMarker))) {
-                return false;
-            }
-            if (this.sequenceNumber != other.sequenceNumber) {
-                return false;
-            }
-            return true;
-        }
-
-        @Override
-        public int hashCode() {
-            int hash = 7;
-            hash = 71 * hash + (this.isRedirect ? 1 : 0);
-            hash = 71 * hash + (this.lifetimeMarker != null ? this.lifetimeMarker.hashCode() : 0);
-            hash = 71 * hash + (int) (this.sequenceNumber ^ (this.sequenceNumber >>> 32));
-            return hash;
-        }
-
-        
-
-        void decode(String value) {
-            if (null == value || 0 == value.length()) {
-
-                // PENDING(edburns): REMOVE THIS
-                return;
-            }
-
-            int i = value.indexOf('X');
-
-            // decode the sequence number
-            setSequenceNumber(Long.parseLong(value.substring(0, i++)));
-
-            // decode the lifetime marker
-            setLifetimeMarker(LifetimeMarker.decode(value.charAt(i++)));
-            
-            // decode the redirect flag
-            setIsRedirect(LifetimeMarker.IsRedirect ==
-                    LifetimeMarker.decode(value.charAt(i++)));
-        }
-
-        String encode() {
-            String value = null;
-
-            // The cookie value is an encoding of the sequence number, the
-            // lifetime marker, and the redirect flag
-            if (isIsRedirect()) {
-                value = Long.toString(getSequenceNumber()) + "X" +
-                        getLifetimeMarker().encode() +
-                        LifetimeMarker.IsRedirect.encode();
-            } else {
-                value = Long.toString(getSequenceNumber()) + "X" +
-                        getLifetimeMarker().encode() +
-                        LifetimeMarker.IsNormal.encode();
-            }
-
-            return value;
-        }
-
-        boolean isIsRedirect() {
-            return isRedirect;
-        }
-
-        void setIsRedirect(boolean isRedirect) {
-            this.isRedirect = isRedirect;
-        }
-
-        long getSequenceNumber() {
-            return sequenceNumber;
-        }
-
-        void setSequenceNumber(long sequenceNumber) {
-            this.sequenceNumber = sequenceNumber;
-        }
-
-        LifetimeMarker getLifetimeMarker() {
-            return lifetimeMarker;
-        }
-
-        void setLifetimeMarker(LifetimeMarker lifetimeMarker) {
-            this.lifetimeMarker = lifetimeMarker;
-        }
-
-        Map<String, Object> getFlashMap() {
-            return flashMap;
-        }
-
-        void setFlashMap(Map<String, Object> flashMap) {
-            this.flashMap = flashMap;
-        }
-
-        
-
-    }
-
-    // </editor-fold>
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/context/flash/FlashELResolver.java b/jsf-ri/src/main/java/com/sun/faces/context/flash/FlashELResolver.java
deleted file mode 100644
index 6a305fc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/context/flash/FlashELResolver.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.context.flash;
-
-import javax.el.ELContext;
-import javax.el.ELResolver;
-import javax.el.PropertyNotFoundException;
-import javax.el.PropertyNotWritableException;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import java.beans.FeatureDescriptor;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * <p>Provide a feature semantically identical to the <a target="_"
- * href="http://api.rubyonrails.com/classes/ActionController/Flash.html">
- * "flash" concept in Ruby on Rails</a>.</p>
- * <p/>
- * <p>The feature is exposed to users via a custom
- * <code>ELResolver</code> which introduces a new implicit object,
- * <code>flash</code>.  The flash functions as <code>Map</code> and
- * can be used in <code>getValue( )</code> or <code>setValue(
- * )</code> expressions.</p>
- * <p/>
- * <p>Usage</p>
- * <p/>
- * <ul>
- * <p/>
- * <p>Consider three JSF views: viewA, viewB, and viewC.  The user
- * first views viewA, then clicks a button and is shown viewB, where
- * she clicks a button and is shown viewC.  If values are stored
- * into the flash during the rendering or postback phases of viewA,
- * they are available to during the rendering phase of viewB, but
- * are not available during the rendering or postback phases of
- * viewC.  In other words, values stored into the flash on "this"
- * request are accessible for the "next" request, but not
- * thereafter.</p>
- * <p/>
- * <p>There are three ways to access the flash.</p>
- * <p/>
- * <ol>
- * <p/>
- * <li><p>Using an EL Expression, such as using
- * <code>#{flash.foo}</code> as the value of an attribute in a JSP
- * page.</p></li>
- * <p/>
- * <li><p>Using the EL API, such as:</p>
- * <p/>
- * <p><code><pre>
- * FacesContext context = FacesContext.getCurrentInstance();
- * ValueExpression flashExpression = context.getApplication().
- *    createValueExpression(context.getELContext(), "#{flash.foo}",
- *                          null, Object.class);
- * flashExpression.setValue(context.getELContext(), "Foo's new value");
- * </pre></code></p>
- * <p/>
- * </li>
- * <p/>
- * <li><p>Using getting the {@link ELFlash} directly, such as:</p>
- * <p/>
- * <p><code><pre>
- * Map<String,Object> flash = ELFlash.getFlash();
- * flash.put("foo", "Foo's new value");
- * </pre></code></p>
- * <p/>
- * </li>
- * <p/>
- * </ol>
- * <p/>
- * <p>The main entry point to this feature is the first one.  This
- * library includes a simple custom tag, <code><a target="_"
- * href="../../../../tlddoc/jsfExt/set.html">jsfExt:set</a></code>, that
- * evaluates an expression and sets its value into another expression.
- * <code>jsfExt:set</code> can be used to store values into the flash
- * from JSP pages, like this:</p>
- * <p/>
- * <p><code><jsfExt:set var="#{flash.foo}" value="fooValue"
- * /></code></p>
- * <p/>
- * <p>or this:</p>
- * <p/>
- * <p><code><jsfExt:set var="#{flash.keep.bar}" value="#{user.name}"
- * /></code></p>
- * <p/>
- * <p>or even this:</p>
- * <p/>
- * <p><code><pre>
- * <jsfExt:set var="#{flash.now.baz}" value="#{cookie.userCookie}" />
- * <p/>
- * <h:outputText value="#{flash.now.baz}" />
- * <p/>
- * </pre></code></p>
- * <p/>
- * </ul>
- * <p/>
- * <p>Related Classes</p>
- * <p/>
- * <p>The complete list of classes that make up this feature is</p>
- * <p/>
- * <ul><code>
- * <p/>
- * <li><p>FlashELResolver</p></li>
- * <p/>
- * <li><p>{@link ELFlash}</p></li>
- * <p/>
- * </code></ul>
- */
-
-public class FlashELResolver extends ELResolver {
-
-    /**
-     * <p>Not intended for manual invocation.  Only called by the JSF
-     * Runtime.</p>
-     */
-
-    public FlashELResolver() {
-
-    }
-
-    // ------------------------------------------------------ Manifest Constants
-
-    private static final String FLASH_VARIABLE_NAME = "flash";
-
-    private static final String FLASH_NOW_VARIABLE_NAME = "now";
-
-    private static final String FLASH_KEEP_VARIABLE_NAME = "keep";
-
-    // ------------------------------------------------ VariableResolver Methods
-
-    /**
-     * <p>Hook into the EL resolution process to introduce the
-     * <code>flash</code> implicit object.  If
-     * <code>property</code> is <code>null</code>, take no action
-     * and return <code>null</code>.  If <code>base</code> is
-     * <code>null</code> and value is the literal string "flash", return
-     * the {@link ELFlash} instance, which is a Map.  If
-     * <code>base</code> is an instance of <code>ELFlash</code> and
-     * property is the literal string "keep", set a ThreadLocal property
-     * that will be inspected by the flash on the next link in the
-     * resolution chain and return the <code>ELFlash</code> instance.
-     * If <code>base</code> is an instance of <code>ELFlash</code> and
-     * <code>property</code> is the literal string "now", return the
-     * result of calling <code>getRequestMap( )</code> on the
-     * <code>ExternalContext</code> for the <code>FacesContext</code>
-     * for this request.  Call <code>setPropertyResolved(true)</code> on
-     * the <code>ELContext</code> where appropriate.</p>
-     *
-     * @throws PropertyNotFoundException if <code>property</code> is
-     *                                   <code>null</code>.
-     */
-
-    public Object getValue(ELContext elContext, Object base, Object property) {
-        Object result = null;
-        Map<String, Object> flash;
-
-        if (null == property) {
-            // take no action.
-            return null;
-        }
-
-        FacesContext facesContext =
-                (FacesContext) elContext.getContext(FacesContext.class);
-        ExternalContext extCtx = facesContext.getExternalContext();
-        // try to get the flash from the session.
-        flash = ELFlash.getFlash(extCtx, false);
-
-        // Deal with getValue(null, "flash").
-        if (null == base) {
-            // If the property is the implicit object "flash"...
-            if (property.toString().equals(FLASH_VARIABLE_NAME)) {
-                elContext.setPropertyResolved(true);
-                if (null == flash) {
-                    // create a new one and store it in the session.
-                    flash = ELFlash.getFlash(extCtx, true);
-                    extCtx.getSessionMap().put(ELFlash.FLASH_ATTRIBUTE_NAME,
-                            flash);
-                }
-                result = flash;
-            }
-        }
-        // If the base argument is the flash itself...
-        else if (base == flash) {
-            // and the property argument is "keep"...
-            if (property.toString().equals(FLASH_KEEP_VARIABLE_NAME)) {
-                elContext.setPropertyResolved(true);
-                // then this is a request to promote the value
-                // "property", which is assumed to have been previously
-                // stored in request scope via the "flash.now"
-                // expression, to flash scope.
-                result = base;
-                // Set a flag so the flash itself can look in the request
-                // and promote the value to the next request
-                ELFlash.getFlash(extCtx, true).setKeepFlag(facesContext);
-
-            }
-            // Otherwise, if base is the flash, and property is "now"...
-            else if (property.toString().equals(FLASH_NOW_VARIABLE_NAME)) {
-		// PENDING(edburns): use FacesContext.getAttributes() instead of 
-		// request scope.
-                Map<String, Object> requestMap = extCtx.getRequestMap();
-                requestMap.put(ELFlash.FLASH_NOW_REQUEST_KEY, property);
-                elContext.setPropertyResolved(true);
-                result = requestMap;
-            } else {
-                result = null;
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * <p>Return the valid <code>Class</code> for a future set
-     * operation, which will always be <code>null</code> because sets
-     * happen via the <code>MapELResolver</code> operating on the {@link
-     * ELFlash} instance as a <code>Map</code>.</p>
-     *
-     * @throws PropertyNotFoundException if property is <code>null</code>.
-     */
-
-    public Class<?> getType(ELContext elContext,
-                            Object base,
-                            Object property) {
-
-        if (null != base) {
-            return null;
-        }
-        if (null == property) {
-            String message = " base " + base + " property " + property;
-            throw new PropertyNotFoundException(message);
-        }
-        if (property.toString().equals(FLASH_VARIABLE_NAME)) {
-            elContext.setPropertyResolved(true);
-        }
-
-        return null;
-    }
-
-    /**
-     * <p>This method will throw
-     * <code>PropertyNotWritableException</code> if called with a
-     * <code>null</code> <code>base</code> and a <code>property</code>
-     * value equal to the literal string "flash".  This is because set
-     * operations normally go through the <code>MapELResolver</code> via
-     * the <code>ELFlash</code> <code>Map</code>.</p>
-     * <p/>
-     * <p>In other words, do not call this method directly to set a
-     * value into the flash!  The only way to access the flash is either
-     * through JSP or via the EL API.</p>
-     *
-     * @throws PropertyNotFoundException    if <code>base</code> is
-     *                                      <code>null</code> and <code>property</code> is <code>null</code>.
-     * @throws PropertyNotWritableException if <code>base</code> is
-     *                                      <code>null</code> and <code>property</code> is the literal string
-     *                                      "flash".
-     */
-
-    public void setValue(ELContext elContext,
-                         Object base,
-                         Object property,
-                         Object value) {
-        if (null != base) {
-            return;
-        }
-        if (null == property) {
-            String message = " base " + base + " property " + property;
-            throw new PropertyNotFoundException(message);
-        }
-        if (property.toString().equals(FLASH_VARIABLE_NAME)) {
-            elContext.setPropertyResolved(true);
-            throw new PropertyNotWritableException(property.toString());
-        }
-
-    }
-
-    /**
-     * <p>Returns <code>true</code> because write operations take place
-     * via the <code>MapELResolver</code> on the actual {@link ELFlash}
-     * instance.</p>
-     *
-     * @throws PropertyNotFoundException if <code>base</code> is
-     *                                   <code>null</code> and <code>property</code> is <code>null</code>.
-     */
-
-    public boolean isReadOnly(ELContext elContext,
-                              Object base,
-                              Object property) {
-        if (base != null) {
-            return false;
-        }
-        if (property == null) {
-            String message = " base " + base + " property " + property;
-            throw new PropertyNotFoundException(message);
-        }
-
-        if (property.toString().equals(FLASH_VARIABLE_NAME)) {
-            elContext.setPropertyResolved(true);
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * <p>Returns an iterator of <code>FeatureDescriptors</code> for the
-     * current contents of the flash.</p>
-     */
-
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext elContext,
-                                                             Object base) {
-        if (null != base) {
-            return null;
-        }
-        Iterator<FeatureDescriptor> result = null;
-        Map<String, Object> flash;
-        FacesContext facesContext =
-                (FacesContext) elContext.getContext(FacesContext.class);
-        ExternalContext extCtx = facesContext.getExternalContext();
-
-        //noinspection unchecked
-        if (null != (flash = (Map<String, Object>)
-                extCtx.getSessionMap().get(ELFlash.FLASH_ATTRIBUTE_NAME))) {
-            Iterator<Map.Entry<String, Object>> iter = flash.entrySet().iterator();
-            Map.Entry<String, Object> cur;
-            ArrayList<FeatureDescriptor> fds;
-            FeatureDescriptor fd;
-            if (iter.hasNext()) {
-                fds = new ArrayList<FeatureDescriptor>(flash.size());
-                while (iter.hasNext()) {
-                    cur = iter.next();
-                    fd = new FeatureDescriptor();
-                    fd.setName(cur.getKey());
-                    fds.add(fd);
-                }
-                result = fds.iterator();
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * <p>If <code>base</code> is non-<code>null</code> and is the
-     * literal string "flash", return <code>Object.class</code>.</p>
-     */
-
-    public Class<?> getCommonPropertyType(ELContext context,
-                                          Object base) {
-        Class<?> result = null;
-        if (null != base) {
-            if (FLASH_VARIABLE_NAME.equals(base.toString())) {
-                result = Object.class;
-            }
-        }
-        return result;
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ChainAwareVariableResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/ChainAwareVariableResolver.java
deleted file mode 100644
index f3212a9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ChainAwareVariableResolver.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import javax.el.ELResolver;
-import javax.el.ValueExpression;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.VariableResolver;
-
-import com.sun.faces.util.RequestStateManager;
-import com.sun.faces.el.FacesCompositeELResolver.ELResolverChainType;
-
-/**
- * <p> This special VariableResolver serves as the "original"
- * VariableResolver that is passed to the one-arg ctor for the
- * <b>first</b> custom VariableResolver that is encountered during
- * application configuration.  Subsequent VariableResolver instances get
- * passed the previous VariableResolver instance, per section 10.4.5 of
- * the spec. </p>
- *
- * <p>The "specialness" of this VariableResolver is found in its {@link
- * #resolveVariable} method, which delegates to the head of the
- * "correct" ELResolver chain based on the context in which this
- * expression is being evaluated.  If the expression being evaluated
- * originated in a JSP page, the <code>Application</code>'s
- * <code>ExpressionFactory</code> is used to create a
- * <code>ValueExpression</code>, which is then evaluated to resolve the
- * variable.  This will cause the ELResolver chain described in section
- * 5.6.1 of the spec to be used.  If the expression being evaluated
- * originated in a programmatic API call, the <code>Application</code>'s
- * <code>ELResolver</code> is used to resolve the variable.  This will
- * cause the ELResolver chain described in section 5.6.2 of the spec to
- * be used.</p>
- */
-
- at SuppressWarnings("deprecation")
-public class ChainAwareVariableResolver extends VariableResolver {
-
-    public ChainAwareVariableResolver() {
-
-    }
-
-
-    //
-    // Relationship Instance Variables
-    // 
-
-    /**
-     * See the class javadocs.
-     */
-    public Object resolveVariable(FacesContext context, String name)
-            throws EvaluationException {
-        Object result = null;
-        ELResolverChainType type = null;
-        Object valueObject = RequestStateManager.get(context,
-                                                     RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
-        if (null != valueObject && 
-            valueObject instanceof ELResolverChainType) {
-            type = (ELResolverChainType) valueObject;
-        }
-        if (ELResolverChainType.JSP == type) {
-            ValueExpression ve = context.getApplication().getExpressionFactory()
-                  .createValueExpression(context.getELContext(),
-                                         "#{" + name + "}", Object.class);
-            result = ve.getValue(context.getELContext());
-        } else if (ELResolverChainType.Faces == type) {
-            ELResolver elr = context.getApplication().getELResolver();
-            result = elr.getValue(context.getELContext(), null, name);
-        }
-
-        return result;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/CompositeComponentAttributesELResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/CompositeComponentAttributesELResolver.java
deleted file mode 100644
index c5f4958..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/CompositeComponentAttributesELResolver.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collection;
-import java.util.HashMap;
-
-import javax.el.ELResolver;
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.el.MethodExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.el.CompositeComponentExpressionHolder;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.component.CompositeComponentStackManager;
-import static com.sun.faces.component.CompositeComponentStackManager.StackType.TreeCreation;
-import static com.sun.faces.component.CompositeComponentStackManager.StackType.Evaluation;
-
-import java.beans.BeanInfo;
-import java.beans.PropertyDescriptor;
-
-/**
- * <p>
- * This {@link ELResolver} will handle the resolution of <code>attrs</code>
- * when processing a composite component instance.
- * </p>
- */
-public class CompositeComponentAttributesELResolver extends ELResolver {
-
-    /**
-     * Implicit object related only to the cc implicitObject.
-     */
-    private static final String COMPOSITE_COMPONENT_ATTRIBUTES_NAME = "attrs";
-
-    /**
-     * Implicit object related only to the cc implicit object
-     * and refers to the composite component parent (if any).
-     */
-    private static final String COMPOSITE_COMPONENT_PARENT_NAME = "parent";
-
-    /**
-     * Key to which we store the mappings between composite component instances
-     * and their ExpressionEvalMap.
-     */
-    private static final String EVAL_MAP_KEY =
-          CompositeComponentAttributesELResolver.class.getName() + "_EVAL_MAP";
-
-
-    // ------------------------------------------------- Methods from ELResolver
-
-
-    /**
-     * <p>
-     * If <code>base</code> is a composite component and <code>property</code>
-     * is <code>attrs</code>, return a new <code>ExpressionEvalMap</code>
-     * which wraps the composite component's attributes map.
-     * </p>
-     *
-     * <p>
-     * The <code>ExpressionEvalMap</code> simple evaluates any {@link ValueExpression}
-     * instances stored in the composite component's attribute map and returns
-     * the result.
-     * </p>
-     *
-     * <p>
-     * If <code>base</code> is a composite component and <code>property</code>
-     * is <code>parent</code> attempt to resolve the composite componet parent
-     * of the current composite component by calling
-     * {@link UIComponent#getCompositeComponentParent(javax.faces.component.UIComponent)})
-     * and returning that value.
-     * </p>
-     *
-     * @see javax.el.ELResolver#getValue(javax.el.ELContext, Object, Object)
-     * @see com.sun.faces.el.CompositeComponentAttributesELResolver.ExpressionEvalMap
-     */
-    public Object getValue(ELContext context, Object base, Object property) {
-
-        Util.notNull("context", context);
-
-        if (base != null
-            && (base instanceof UIComponent)
-            && UIComponent.isCompositeComponent((UIComponent) base)
-            && property != null) {
-
-            String propertyName = property.toString();
-            if (COMPOSITE_COMPONENT_ATTRIBUTES_NAME.equals(propertyName)) {
-                UIComponent c = (UIComponent) base;
-                context.setPropertyResolved(true);
-                FacesContext ctx = (FacesContext)
-                      context.getContext(FacesContext.class);
-                return getEvalMapFor(c, ctx);
-            }
-
-            if (COMPOSITE_COMPONENT_PARENT_NAME.equals(propertyName)) {
-                UIComponent c = (UIComponent) base;
-                context.setPropertyResolved(true);
-                FacesContext ctx = (FacesContext)
-                      context.getContext(FacesContext.class);
-                CompositeComponentStackManager m =
-                      CompositeComponentStackManager.getManager(ctx);
-                UIComponent ccp = m.getParentCompositeComponent(TreeCreation,
-                                                                ctx,
-                                                                c);
-                if (ccp == null) {
-                    ccp = m.getParentCompositeComponent(Evaluation,
-                                                        ctx,
-                                                        c);
-                }
-                return ccp;
-            }
-        }
-
-        return null;
-
-    }
-
-
-    /**
-     * <p>
-     * Readonly, so return <code>null</code>.
-     * </p>
-     *
-     * @see ELResolver#getType(javax.el.ELContext, Object, Object)
-     */
-    public Class<?> getType(ELContext context, Object base, Object property) {
-
-        Util.notNull("context", context);
-        return null;
-
-    }
-
-
-    /**
-     * <p>
-     * This is a no-op.
-     * </p>
-     *
-     * @see ELResolver#setValue(javax.el.ELContext, Object, Object, Object)
-     */
-    public void setValue(ELContext context,
-                         Object base,
-                         Object property,
-                         Object value) {
-
-        Util.notNull("context", context);
-
-    }
-
-
-    /**
-     * <p>
-     * Readonly, so return <code>true</code>
-     * </p>
-     *
-     * @see javax.el.ELResolver#isReadOnly(javax.el.ELContext, Object, Object)
-     */
-    public boolean isReadOnly(ELContext context, Object base, Object property) {
-
-        Util.notNull("context", context);
-        return true;
-
-    }
-
-
-    /**
-     * <p>
-     * This <code>ELResolver</code> currently returns no feature descriptors
-     * as we have no way to effectively iterate over the UIComponent
-     * attributes Map.
-     * </p>
-     *
-     * @see javax.el.ELResolver#getFeatureDescriptors(javax.el.ELContext, Object)
-     */
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
-                                                             Object base) {
-
-        Util.notNull("context", context);
-        return null;
-
-    }
-
-
-    /**
-     * <p>
-     * <code>attrs<code> is considered a <code>String</code> property.
-     * </p>
-     *
-     * @see javax.el.ELResolver#getCommonPropertyType(javax.el.ELContext, Object)
-     */
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-
-        Util.notNull("context", context);
-        return String.class;
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>
-     * Creates (if necessary) and caches an <code>ExpressionEvalMap</code>
-     * instance associated with the owning {@link UIComponent}
-     * </p>
-     *
-     * @param c the owning {@link UIComponent}
-     * @param ctx the {@link FacesContext} for the current request
-     * @return an <code>ExpressionEvalMap</code> for the specified component
-     */
-    public Map<String,Object> getEvalMapFor(UIComponent c, FacesContext ctx) {
-
-        Map<Object, Object> ctxAttributes = ctx.getAttributes();
-        //noinspection unchecked
-        Map<UIComponent,Map<String,Object>> topMap =
-              (Map<UIComponent,Map<String,Object>>) ctxAttributes.get(EVAL_MAP_KEY);
-        Map<String,Object> evalMap = null;
-        if (topMap == null) {
-            topMap = new HashMap<UIComponent,Map<String,Object>>();
-            ctxAttributes.put(EVAL_MAP_KEY, topMap);
-            evalMap = new ExpressionEvalMap(ctx, c);
-            topMap.put(c, evalMap);
-        }
-        if (evalMap == null) {
-            evalMap = topMap.get(c);
-            if (evalMap == null) {
-                evalMap = new ExpressionEvalMap(ctx, c);
-                topMap.put(c, evalMap);
-            }
-        }
-        return evalMap;
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Simple Map implementation to evaluate any <code>ValueExpression</code>
-     * stored directly within the provided attributes map.
-     */
-    private static final class ExpressionEvalMap
-    implements Map<String,Object>, CompositeComponentExpressionHolder {
-
-        private Map<String,Object> attributesMap;
-        private PropertyDescriptor[] declaredAttributes;
-        private Map<Object, Object> declaredDefaultValues;
-        private FacesContext ctx;
-        private UIComponent cc;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        ExpressionEvalMap(FacesContext ctx, UIComponent cc) {
-
-            this.cc = cc;
-            this.attributesMap = cc.getAttributes();
-            BeanInfo metadata = (BeanInfo) this.attributesMap.get(UIComponent.BEANINFO_KEY);
-            if (null != metadata) {
-                this.declaredAttributes = metadata.getPropertyDescriptors();
-                this.declaredDefaultValues = new HashMap<Object, Object>(5);
-            }
-            this.ctx = ctx;
-
-        }
-
-
-        // --------------------- Methods from CompositeComponentExpressionHolder
-
-
-        public ValueExpression getExpression(String name) {
-            Object ve = cc.getValueExpression(name);
-            return ((ve instanceof ValueExpression) ? (ValueExpression) ve : null);
-        }
-
-
-        // ---------------------------------------------------- Methods from Map
-
-
-        public int size() {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean isEmpty() {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean containsKey(Object key) {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean containsValue(Object value) {
-            throw new UnsupportedOperationException();
-        }
-
-
-
-        public Object get(Object key) {
-            Object v = attributesMap.get(key);
-            if (v == null) {
-                v = getDeclaredDefaultValue(key);
-                if (v != null) {
-                    return ((ValueExpression) v).getValue(ctx.getELContext());
-                }
-            }
-            if (v != null && v instanceof MethodExpression) {
-                return v;
-            }
-            return v;
-        }
-
-        public Object put(String key, Object value) {
-            // Unlinke AttributesMap.get() which will obtain a value from
-            // a ValueExpression, AttributesMap.put(), when passed a value,
-            // will never call ValueExpression.setValue(), so we have to take
-            // matters into our own hands...
-            ValueExpression ve = cc.getValueExpression(key);
-            if (ve != null) {
-                ve.setValue(ctx.getELContext(), value);
-            } else {
-                attributesMap.put(key, value);
-            }
-            return null;
-        }
-
-        public Object remove(Object key) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void putAll(Map<? extends String,?> t) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void clear() {
-            throw new UnsupportedOperationException();
-        }
-
-        public Set<String> keySet() {
-            throw new UnsupportedOperationException();
-        }
-
-        public Collection<Object> values() {
-            throw new UnsupportedOperationException();
-        }
-
-        public Set<Map.Entry<String,Object>> entrySet() {
-            throw new UnsupportedOperationException();
-        }
-
-        private Object getDeclaredDefaultValue(Object key) {
-            Object result = null;
-
-            // If it's not in the cache...
-            if (!declaredDefaultValues.containsKey(key)) {
-                // iterate through the property descriptors...
-                boolean found = false;
-                for (PropertyDescriptor cur : declaredAttributes) {
-                    // and if you find a match...
-                    if (cur.getName().equals(key)) {
-                        found = true;
-                        // put it in the cache, returning the value.
-                        declaredDefaultValues.put(key, result = cur.getValue("default"));
-                        break;
-                    }
-                }
-                // Otherwise, if no attribute was declared
-                if (!found) {
-                    // put null into the cache for future lookups.
-                    declaredDefaultValues.put(key, null);
-                }
-            } else {
-                // It's in the cache, just return the value.
-                result = declaredDefaultValues.get(key);
-            }
-
-            return result;
-        }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/DummyPropertyResolverImpl.java b/jsf-ri/src/main/java/com/sun/faces/el/DummyPropertyResolverImpl.java
deleted file mode 100644
index 5c411f9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/DummyPropertyResolverImpl.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.PropertyResolver;
-
-import javax.faces.context.FacesContext;
-
-/**
- * Default propertyResolver implementation that gets the ELContext from the 
- * argument FacesContext and calls setPropertyResolved(false) on it. This is
- * provided to ensure that the legacy property resolvers continue to work with
- * unfied EL API
- */
- at SuppressWarnings("deprecation")
-public class DummyPropertyResolverImpl extends PropertyResolver {
-    
-    public Object getValue(Object base, Object property)
-        throws EvaluationException, PropertyNotFoundException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.getELContext().setPropertyResolved(false);
-        return null;
-    }
-
-
-    public Object getValue(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException {
-       FacesContext context = FacesContext.getCurrentInstance();
-       context.getELContext().setPropertyResolved(false);
-       return null;         
-    }
-
-
-    public void setValue(Object base, Object property, Object value)
-        throws EvaluationException, PropertyNotFoundException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.getELContext().setPropertyResolved(false);
-    }
-
-    public void setValue(Object base, int index, Object value)
-        throws EvaluationException, PropertyNotFoundException {
-       FacesContext context = FacesContext.getCurrentInstance();
-       context.getELContext().setPropertyResolved(false);
-    }
-
-    public boolean isReadOnly(Object base, Object property)
-        throws EvaluationException, PropertyNotFoundException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.getELContext().setPropertyResolved(false);        
-        return false;
-    }
-
-    public boolean isReadOnly(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.getELContext().setPropertyResolved(false);        
-        return false;        
-    }
-
-
-    public Class getType(Object base, Object property)
-        throws EvaluationException, PropertyNotFoundException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.getELContext().setPropertyResolved(false);        
-        return null;         
-    }
-
-    public Class getType(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.getELContext().setPropertyResolved(false);        
-        return null;
-    }
-    
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ELConstants.java b/jsf-ri/src/main/java/com/sun/faces/el/ELConstants.java
deleted file mode 100644
index 8e2041c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ELConstants.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.el;
-
-/**
- * @author jhook
- */
-public interface ELConstants {
-    public static final int APPLICATION = 0;
-
-    public static final int APPLICATION_SCOPE = 1;
-
-    public static final int COMPOSITE_COMPONENT = 2;
-
-    public static final int COMPONENT = 3;
-
-    public static final int COOKIE = 4;
-
-    public static final int FACES_CONTEXT = 5;
-
-    public static final int HEADER = 6;
-
-    public static final int HEADER_VALUES = 7;
-
-    public static final int INIT_PARAM = 8;
-
-    public static final int PARAM = 9;
-
-    public static final int PARAM_VALUES = 10;
-
-    public static final int REQUEST = 11;
-
-    public static final int REQUEST_SCOPE = 12;
-
-    public static final int RESOURCE = 13;
-
-    public static final int SESSION = 14;
-
-    public static final int SESSION_SCOPE = 15;
-
-    public static final int VIEW = 16;
-
-    public static final int VIEW_SCOPE = 17;
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ELContextImpl.java b/jsf-ri/src/main/java/com/sun/faces/el/ELContextImpl.java
deleted file mode 100644
index bfff260..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ELContextImpl.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.el;
-
-
-import javax.el.ELContext;
-import javax.el.ELResolver;
-import javax.el.FunctionMapper;
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import java.util.Map;
-import java.util.HashMap;
-import java.lang.reflect.Method;
-
-/**
- * Concrete implementation of {@link javax.el.ELContext}.
- * ELContext's constructor is protected to control creation of ELContext
- * objects through their appropriate factory methods.  This version of
- * ELContext forces construction through FacesContextImpl.
- *
- */
-public class ELContextImpl extends ELContext {
-    
-    private FunctionMapper functionMapper = new NoopFunctionMapper();
-    private VariableMapper variableMapper;
-    private ELResolver resolver;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructs a new ELContext associated with the given ELResolver.
-     * @param resolver the ELResolver to return from {@link #getELResolver()} 
-     */
-    public ELContextImpl(ELResolver resolver) {
-        this.resolver = resolver;
-    }
-
-
-    // -------------------------------------------------- Methods from ELContext
-
-
-    public FunctionMapper getFunctionMapper() {        
-        return functionMapper;
-    }
-
-    public VariableMapper getVariableMapper() {
-        if (variableMapper == null) {
-            variableMapper = new VariableMapperImpl();
-        }
-        return variableMapper;
-    }
-
-    public ELResolver getELResolver() {
-        return resolver;
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void setFunctionMapper(FunctionMapper functionMapper) {
-
-        this.functionMapper = functionMapper;
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class VariableMapperImpl extends VariableMapper {
-
-        private Map<String,ValueExpression> variables;
-
-        public VariableMapperImpl() {
-
-            //noinspection CollectionWithoutInitialCapacity
-            variables = new HashMap<String,ValueExpression>();
-
-        }
-
-        public ValueExpression resolveVariable(String s) {
-            return variables.get(s);
-        }
-
-        public ValueExpression setVariable(String s, ValueExpression valueExpression) {
-            return (variables.put(s, valueExpression));
-        }
-    }
-
-
-    private static class NoopFunctionMapper extends FunctionMapper {
-
-        public Method resolveFunction(String s, String s1) {
-            return null;
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ELContextListenerImpl.java b/jsf-ri/src/main/java/com/sun/faces/el/ELContextListenerImpl.java
deleted file mode 100644
index 1f0435a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ELContextListenerImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.el;
-
-import javax.faces.context.FacesContext;
-import javax.el.ELContext;
-import javax.el.ELContextListener;
-import javax.el.ELContextEvent;
-
-public class ELContextListenerImpl implements ELContextListener {
-    
-    public ELContextListenerImpl() {
-    }
-    
-    /**
-     * Invoked when a new <code>ELContext</code> has been created.
-     *
-     * @param ece the notification event.
-     */
-    public void contextCreated(ELContextEvent ece) {
-        
-        
-        FacesContext context = FacesContext.getCurrentInstance();
-        if ( context == null) {
-            return;
-        }
-        ELContext source = (ELContext)ece.getSource();
-        // Register FacesContext with JSP
-        source.putContext(FacesContext.class, context);
-        
-        // dispatch the event to any JSF applications interested in
-        // the event.
-        ELContextListener[] listeners = 
-            context.getApplication().getELContextListeners();
-        if ( listeners == null) {
-            return;
-        }
-        for (int i = 0; i < listeners.length; ++i) {
-            ELContextListener elcl = listeners[i];
-            elcl.contextCreated(new ELContextEvent(source));
-        }
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ELUtils.java b/jsf-ri/src/main/java/com/sun/faces/el/ELUtils.java
deleted file mode 100644
index dbc2e4d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ELUtils.java
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.context.flash.FlashELResolver;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.util.MessageUtils;
-
-import javax.el.ArrayELResolver;
-import javax.el.BeanELResolver;
-import javax.el.CompositeELResolver;
-import javax.el.ELContext;
-import javax.el.ELResolver;
-import javax.el.ListELResolver;
-import javax.el.MapELResolver;
-import javax.el.ResourceBundleELResolver;
-import javax.el.ValueExpression;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.VariableResolver;
-import javax.faces.component.UIViewRoot;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * <p>Utility class for EL related methods.</p>
- */
-public class ELUtils {
-
-    /**
-     * Helps to determine if a EL expression represents a composite component
-     * EL expression.
-     */
-    private static final Pattern COMPOSITE_COMPONENT_EXPRESSION =
-          Pattern.compile(".(?:[ ]+|[\\[{,(])cc[.].+[}]");
-
-    /**
-     * Used to determine if EL method arguments are being passed to a
-     * composite component lookup expression.
-     *
-     * For example:
-     *
-     *    #{cc.attrs.label('foo')}
-     *
-     * is illegal, while:
-     *
-     *    #{cc.attrs.bean.label('foo')}
-     *
-     * is legal.
-     */
-    private static final Pattern COMPOSITE_COMPONENT_LOOKUP_WITH_ARGS =
-          Pattern.compile("(?:[ ]+|[\\[{,(])cc[.]attrs[.]\\w+[(].+[)]");
-
-
-    /**
-     * Use to determine if an expression being considered as a
-     * MethodExpression is a simple lookup (i.e. #{cc.attrs.myaction}).
-     */
-    private static final Pattern METHOD_EXPRESSION_LOOKUP =
-          Pattern.compile(".[{]cc[.]attrs[.]\\w+[}]");
-
-    private static final String APPLICATION_SCOPE = "applicationScope";
-    private static final String SESSION_SCOPE = "sessionScope";
-    private static final String REQUEST_SCOPE = "requestScope";
-    private static final String VIEW_SCOPE = "viewScope";
-    private static final String COOKIE_IMPLICIT_OBJ = "cookie";
-    private static final String FACES_CONTEXT_IMPLICIT_OBJ = "facesContext";
-    private static final String HEADER_IMPLICIT_OBJ = "header";
-    private static final String HEADER_VALUES_IMPLICIT_OBJ = "headerValues";
-    private static final String INIT_PARAM_IMPLICIT_OBJ = "initParam";
-    private static final String PARAM_IMPLICIT_OBJ = "param";
-    private static final String PARAM_VALUES_IMPLICIT_OBJ = "paramValues";
-    private static final String VIEW_IMPLICIT_OBJ = "view";
-
-    public enum Scope {
-        NONE("none"),
-        REQUEST("request"),
-        VIEW("view"),
-        SESSION("session"),
-        APPLICATION("application");
-
-        String scope;
-        Scope(String scope) {
-            this.scope = scope;
-        }
-
-        public String toString() {
-            return scope;
-        }
-
-    }
-
-    public static final ArrayELResolver ARRAY_RESOLVER = new ArrayELResolver();
-
-    public static final BeanELResolver BEAN_RESOLVER = new BeanELResolver();
-
-    public static final FacesResourceBundleELResolver FACES_BUNDLE_RESOLVER =
-        new FacesResourceBundleELResolver();
-
-    public static final ImplicitObjectELResolverForJsp IMPLICIT_JSP_RESOLVER =
-        new ImplicitObjectELResolverForJsp();
-
-    public static final ImplicitObjectELResolver IMPLICIT_RESOLVER =
-        new ImplicitObjectELResolver();
-    
-    public static final FlashELResolver FLASH_RESOLVER = 
-        new FlashELResolver();
-
-    public static final ListELResolver LIST_RESOLVER = new ListELResolver();
-
-    public static final ManagedBeanELResolver MANAGED_BEAN_RESOLVER =
-        new ManagedBeanELResolver();
-
-    public static final MapELResolver MAP_RESOLVER = new MapELResolver();
-
-    public static final ResourceBundleELResolver BUNDLE_RESOLVER =
-        new ResourceBundleELResolver();
-
-    public static final ScopedAttributeELResolver SCOPED_RESOLVER =
-        new ScopedAttributeELResolver();
-
-    public static final ResourceELResolver RESOURCE_RESOLVER =
-          new ResourceELResolver();
-
-    public static final CompositeComponentAttributesELResolver COMPOSITE_COMPONENT_ATTRIBUTES_EL_RESOLVER =
-          new CompositeComponentAttributesELResolver();
-
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private ELUtils() {
-
-        throw new IllegalStateException();
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public static boolean isCompositeComponentExpr(String expression) {
-
-        // TODO we should be trying to re-use the Matcher by calling
-        // m.reset(expression);
-        Matcher m = COMPOSITE_COMPONENT_EXPRESSION.matcher(expression);
-        return m.find();
-
-    }
-
-
-    public static boolean isCompositeComponentMethodExprLookup(String expression) {
-
-        Matcher m = METHOD_EXPRESSION_LOOKUP.matcher(expression);
-        return m.matches();
-
-    }
-
-
-    public static boolean isCompositeComponentLookupWithArgs(String expression) {
-
-        // TODO we should be trying to re-use the Matcher by calling
-        // m.reset(expression);
-        Matcher m = COMPOSITE_COMPONENT_LOOKUP_WITH_ARGS.matcher(expression);
-        return m.find();
-        
-    }
-
-
-    /**
-     * <p>Create the <code>ELResolver</code> chain for programmatic EL calls.</p>
-     * @param composite a <code>CompositeELResolver</code>
-     * @param associate our ApplicationAssociate
-     */
-    public static void buildFacesResolver(CompositeELResolver composite,
-                                          ApplicationAssociate associate) {
-
-        if (associate == null) {
-            String message = MessageUtils.getExceptionMessageString
-                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "associate");
-            throw new NullPointerException(message);
-        }
-
-        if (composite == null) {
-            String message = MessageUtils.getExceptionMessageString
-                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "composite");
-            throw new NullPointerException(message);
-        }
-
-        composite.add(IMPLICIT_RESOLVER);
-        composite.add(FLASH_RESOLVER);
-        composite.add(COMPOSITE_COMPONENT_ATTRIBUTES_EL_RESOLVER);
-        addELResolvers(composite, associate.getELResolversFromFacesConfig());
-        addVariableResolvers(composite, associate);
-        addPropertyResolvers(composite, associate);
-        addELResolvers(composite, associate.getApplicationELResolvers());
-        composite.add(MANAGED_BEAN_RESOLVER);
-        composite.add(RESOURCE_RESOLVER);
-        composite.add(BUNDLE_RESOLVER);
-        composite.add(FACES_BUNDLE_RESOLVER);
-        composite.add(MAP_RESOLVER);
-        composite.add(LIST_RESOLVER);
-        composite.add(ARRAY_RESOLVER);
-        composite.add(BEAN_RESOLVER);
-        composite.add(SCOPED_RESOLVER);
-
-    }
-
-
-    /**
-     * <p>Create the <code>ELResolver</code> chain for JSP.</p>
-     * @param composite a <code>CompositeELResolver</code>
-     * @param associate our ApplicationAssociate
-     */
-    public static void buildJSPResolver(CompositeELResolver composite,
-                                        ApplicationAssociate associate) {
-
-        if (associate == null) {
-            String message = MessageUtils.getExceptionMessageString
-                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "associate");
-            throw new NullPointerException(message);
-        }
-
-        if (composite == null) {
-            String message = MessageUtils.getExceptionMessageString
-                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "composite");
-            throw new NullPointerException(message);
-        }
-
-        composite.add(IMPLICIT_JSP_RESOLVER);
-        composite.add(FLASH_RESOLVER);
-        composite.add(MANAGED_BEAN_RESOLVER);
-        composite.add(RESOURCE_RESOLVER);
-        composite.add(FACES_BUNDLE_RESOLVER);
-        addELResolvers(composite, associate.getELResolversFromFacesConfig());
-        addVariableResolvers(composite, associate);
-        addPropertyResolvers(composite, associate);
-        addELResolvers(composite, associate.getApplicationELResolvers());
-
-    }
-
-
-    public static Object evaluateValueExpression(ValueExpression expression,
-                                                 ELContext elContext) {
-
-           if (expression.isLiteralText()) {
-               return expression.getExpressionString();
-           } else {
-               return expression.getValue(elContext);
-           }
-
-       }
-
-
-    /**
-     * @param associate the <code>ApplicationAssociate</code>
-     * @param provideDefault whether or not to return a
-     *  <code>DummpyPropertyResolverImpl</code>
-     * @return the <code>PropertyResolver</code>s set via
-     *  {@link javax.faces.application.Application#setPropertyResolver(javax.faces.el.PropertyResolver)}
-     *  or, if that is <code>null</code>, return the <code>PropertyResolver</code>
-     *  chain from the parsed configuration resources.  If either of those are
-     *  null, and <code>provideDefault</code> is <code>true</code>,
-     *  return the <code>DummyPropertyResolverImpl</code>.
-     */
-    @SuppressWarnings("deprecation")
-    public static PropertyResolver getDelegatePR(ApplicationAssociate associate,
-                                                 boolean provideDefault)  {
-
-        PropertyResolver pr = associate.getLegacyPropertyResolver();
-        if (pr == null) {
-            pr = associate.getLegacyPRChainHead();
-            if (pr == null && provideDefault) {
-                pr = new DummyPropertyResolverImpl();
-            }
-        }
-
-        return pr;
-
-    }
-
-
-    /**
-     * @param associate the <code>ApplicationAssociate</code>
-     * @param provideDefault whether or not to return a
-     *  <code>DummpyPropertyResolverImpl</code>
-     * @return the <code>VariableResolver</code>s set via
-     *  {@link javax.faces.application.Application#setVariableResolver(javax.faces.el.VariableResolver)}
-     *  or, if that is <code>null</code>, return the <code>VariableResolver</code>
-     *  chain from the parsed configuration resources.  If either of those are
-     *  null, , and <code>provideDefault</code> is <code>true</code>,
-     *  return the <code>ChainAwareVariableResolver</code>.
-     */
-    @SuppressWarnings("deprecation")
-    public static VariableResolver getDelegateVR(ApplicationAssociate associate,
-                                                 boolean provideDefault) {
-
-        VariableResolver vr = associate.getLegacyVariableResolver();
-        if (vr == null) {
-            vr = associate.getLegacyVRChainHead();
-            if (vr == null && provideDefault) {
-                vr = new ChainAwareVariableResolver();
-            }
-        }
-
-        return vr;
-
-    }
-
-
-    /**
-     * @param expressionString the expression string, with delimiters
-     *                         intact.
-     * @return a List of expressions from the expressionString
-     * @throws ReferenceSyntaxException if the expression string is invalid
-     */
-    @SuppressWarnings("deprecation")
-    public static List<String> getExpressionsFromString(String expressionString)
-    throws ReferenceSyntaxException {
-
-        if (null == expressionString) {
-            return Collections.emptyList();
-        }
-        //noinspection CollectionWithoutInitialCapacity
-        List<String> result = new ArrayList<String>();
-        int i, j, len = expressionString.length(), cur = 0;
-        while (cur < len &&
-             -1 != (i = expressionString.indexOf("#{", cur))) {
-            if (-1 == (j = expressionString.indexOf('}', i + 2))) {
-                throw new ReferenceSyntaxException(
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.INVALID_EXPRESSION_ID,
-                          expressionString));
-            }
-            cur = j + 1;
-            result.add(expressionString.substring(i, cur));
-        }
-        return result;
-
-    }
-        
-
-    /**
-     * <p>This method is used by the ManagedBeanFactory to ensure that
-     * properties set by an expression point to an object with an
-     * accepted lifespan.</p>
-     *
-     * <p>get the scope of the expression. Return <code>null</code> if
-     * it isn't scoped</p>
-     *
-     * <p>For example, the expression:
-     * <code>sessionScope.TestBean.one</code> should return "session"
-     * as the scope.</p>
-     *
-     * @param valueBinding the expression
-     *
-     * @param outString an allocated String Array into which we put the
-     * first segment.
-     *
-     * @return the scope of the expression
-     *
-     * @throws ReferenceSyntaxException if valueBinding is syntactically invalid
-     */
-    @SuppressWarnings("deprecation")
-    public static ELUtils.Scope getScope(String valueBinding, String[] outString)
-         throws ReferenceSyntaxException {
-
-        if (valueBinding == null || 0 == valueBinding.length()) {
-            return null;
-        }
-        valueBinding = stripBracketsIfNecessary(valueBinding);
-
-        int segmentIndex = getFirstSegmentIndex(valueBinding);
-
-        //examine first segment and see if it is a scope
-        String identifier = valueBinding;
-
-        if (segmentIndex > 0) {
-            //get first segment designated by a "." or "["
-            identifier = valueBinding.substring(0, segmentIndex);
-        }
-
-        //check to see if the identifier is a named scope.
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        ExternalContext ec = context.getExternalContext();
-
-        if (null != outString) {
-            outString[0] = identifier;
-        }
-        if (REQUEST_SCOPE.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-        if (VIEW_SCOPE.equalsIgnoreCase(identifier)) {
-            return Scope.VIEW;
-        }
-        if (SESSION_SCOPE.equalsIgnoreCase(identifier)) {
-            return Scope.SESSION;
-        }
-        if (APPLICATION_SCOPE.equalsIgnoreCase(identifier)) {
-            return Scope.APPLICATION;
-        }
-
-        // handle implicit objects
-        if (INIT_PARAM_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.APPLICATION;
-        }
-        if (COOKIE_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-        if (FACES_CONTEXT_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-        if (HEADER_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-        if (HEADER_VALUES_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-        if (PARAM_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-        if (PARAM_VALUES_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-        if (VIEW_IMPLICIT_OBJ.equalsIgnoreCase(identifier)) {
-            return Scope.REQUEST;
-        }
-
-        Map<String,Object> requestMap = ec.getRequestMap();
-        if (requestMap != null && requestMap.containsKey(identifier)) {
-            return Scope.REQUEST;
-        }
-
-        UIViewRoot root = context.getViewRoot();
-        if (root != null) {
-            Map<String, Object> viewMap = root.getViewMap(false);
-            if (viewMap != null && viewMap.containsKey(identifier)) {
-                return Scope.VIEW;
-            }
-        }
-
-        Map<String,Object> sessionMap = ec.getSessionMap();
-        if (sessionMap != null && sessionMap.containsKey(identifier)) {
-            return Scope.SESSION;
-        }
-
-        Map<String,Object> appMap = ec.getApplicationMap();
-        if (appMap != null && appMap.containsKey(identifier)) {
-            return Scope.APPLICATION;
-        }
-       
-        //not present in any scope
-        return null;
-
-    }
-
-
-    /**
-     * Create a <code>ValueExpression</code> with the expected type of
-     * <code>Object.class</code>
-     * @param expression an EL expression
-     * @return a new <code>ValueExpression</code> instance based off the
-     *  provided <code>valueRef</code>
-     */
-    public static ValueExpression createValueExpression(String expression) {
-
-       return createValueExpression(expression, Object.class);
-
-    }
-
-
-    public static ValueExpression createValueExpression(String expression,
-                                                        Class<?> expectedType) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        return context.getApplication().getExpressionFactory().
-            createValueExpression(context.getELContext(),
-                                  expression,
-                                  expectedType);
-    }
-
-
-    public static Object coerce(Object value, Class<?> toType) {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        return context.getApplication().getExpressionFactory().coerceToType(value, toType);
-
-    }
-
-
-    public static Scope getScope(String scope) {
-
-        for (Scope s : Scope.values()) {
-            if (s.toString().equals(scope)) {
-                return s;
-            }
-        }
-        return null;
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Add the <code>ELResolvers</code> from the provided list
-     * to the target <code>CompositeELResolver</code>.</p>
-     *
-     * @param target the <code>CompositeELResolver</code> to which
-     *  the <code>ELResolver</code>s will be added.
-     * @param resolvers a <code>List</code> of <code>ELResolver</code>s
-     */
-    private static void addELResolvers(CompositeELResolver target,
-                                       List<ELResolver> resolvers) {
-
-        if (resolvers != null && !resolvers.isEmpty()) {
-            for (ELResolver resolver : resolvers) {
-                target.add(resolver);
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>Add any <code>PropertyResolver</code>s to the specified
-     * <code>CompositeELResolver</code>.</p>
-     * @param target the <code>CompositeELResolver</code> to which
-     *  the <code>PropertyResolver</code>s will be added.
-     * @param associate our ApplicationAssociate
-     */
-    @SuppressWarnings("deprecation")
-    private static void addPropertyResolvers(CompositeELResolver target,
-                                             ApplicationAssociate associate) {
-
-        PropertyResolver pr = getDelegatePR(associate, false);
-        if (pr != null) {
-            target.add(new PropertyResolverChainWrapper(pr));
-        }
-
-    }
-
-
-    /**
-     * <p>Add any <code>VariableResolver</code>s to the specified
-     * <code>CompositeELResolver</code>.</p>
-     * @param target the <code>CompositeELResolver</code> to which
-     *  the <code>VariableResolver</code>s will be added.
-     * @param associate our ApplicationAssociate
-     */
-    @SuppressWarnings("deprecation")
-    private static void addVariableResolvers(CompositeELResolver target,
-                                             ApplicationAssociate associate) {
-
-        VariableResolver vr = getDelegateVR(associate, false);
-        if (vr != null) {
-            target.add(new VariableResolverChainWrapper(vr));
-        }
-
-    }
-
-
-    /**
-     * <p/>
-     * The the first segment of a String tokenized by a "." or "["
-     *
-     * @param valueBinding the expression from which the first segment
-     *  will be obtained
-     * @return index of the first occurrence of . or [
-     */
-    private static int getFirstSegmentIndex(String valueBinding) {
-
-        int segmentIndex = valueBinding.indexOf('.');
-        int bracketIndex = valueBinding.indexOf('[');
-
-        //there is no "." in the valueBinding so take the bracket value
-        if (segmentIndex < 0) {
-            segmentIndex = bracketIndex;
-        } else {
-            //if there is a bracket proceed
-            if (bracketIndex > 0) {
-                //if the bracket index is before the "." then
-                //get the bracket index
-                if (segmentIndex > bracketIndex) {
-                    segmentIndex = bracketIndex;
-                }
-            }
-        }
-        return segmentIndex;
-
-    }
-
-
-    @SuppressWarnings("deprecation")
-    private static String stripBracketsIfNecessary(String expression)
-    throws ReferenceSyntaxException {
-
-        assert (null != expression);
-
-        // look for invalid expressions
-        if (expression.charAt(0) == '#') {
-            if (expression.charAt(1) != '{') {
-                throw new ReferenceSyntaxException(MessageUtils.getExceptionMessageString(
-                    MessageUtils.INVALID_EXPRESSION_ID,
-                    expression));
-            }
-            int len = expression.length();
-            if (expression.charAt(len - 1) != '}') {
-                throw new ReferenceSyntaxException(MessageUtils.getExceptionMessageString(
-                    MessageUtils.INVALID_EXPRESSION_ID,
-                    expression));
-            }
-            expression = expression.substring(2, len - 1);
-        }
-
-        return expression;
-
-    }
-
-
-    public static Scope getScopeForExpression(String expression) {
-
-        if (isMixedExpression(expression)) {
-            return (getNarrowestScopeFromExpression(expression));
-        } else {
-            return (getScopeForSingleExpression(expression));
-        }
-
-    }
-
-
-    @SuppressWarnings("deprecation")
-    public static boolean hasValidLifespan(Scope expressionScope, Scope beanScope)
-         throws EvaluationException {
-
-        //if the managed bean's scope is "none" but the scope of the
-        //referenced object is not "none", scope is invalid
-        if (beanScope == Scope.NONE) {
-            return expressionScope == Scope.NONE;
-        }
-
-        //if the managed bean's scope is "request" it is able to refer
-        //to objects in any scope
-        if (beanScope == Scope.REQUEST) {
-            return true;
-        }
-        
-        //if the managed bean's scope is "view" it is able to refer to 
-        //objects in other "view", "session", "application" or "none" scopes.
-        if (beanScope == Scope.VIEW) {
-            return expressionScope != Scope.REQUEST;
-        }
-
-        //if the managed bean's scope is "session" it is able to refer
-        //to objects in other "session", "application", or "none" scopes
-        if (beanScope == Scope.SESSION) {
-            return !(expressionScope == Scope.REQUEST
-                     || expressionScope == Scope.VIEW);
-        }
-
-        //if the managed bean's scope is "application" it is able to refer
-        //to objects in other "application", or "none" scopes
-        if (beanScope == Scope.APPLICATION) {
-            return !(expressionScope == Scope.REQUEST
-                     || expressionScope == Scope.VIEW
-                     || expressionScope == Scope.SESSION);
-        }
-
-        //the managed bean is required to be in either "request", "view",
-        // "session", "application", or "none" scopes. One of the previous decision
-        //statements must be true.
-        //noinspection ConstantConditions
-        assert (false);
-        return false;
-    }
-
-
-    @SuppressWarnings("deprecation")
-    public static ELUtils.Scope getScopeForSingleExpression(String value)
-         throws EvaluationException {
-        String[] firstSegment = new String[1];
-        ELUtils.Scope valueScope = ELUtils.getScope(value, firstSegment);
-
-        if (null == valueScope) {
-            // Perhaps the bean hasn't been created yet.  See what its
-            // scope would be when it is created.
-            if (firstSegment[0] != null) {
-                BeanManager manager =
-                     ApplicationAssociate.getCurrentInstance().getBeanManager();
-
-                if (manager.isManaged(firstSegment[0])) {
-                    valueScope = ELUtils.getScope(manager.getBuilder(firstSegment[0]).getScope());
-                }
-            } else {
-                // we are referring to a bean that doesn't exist in the
-                // configuration file.  Give it a wide scope...
-                valueScope = Scope.APPLICATION;
-            }
-        }
-        return valueScope;
-    }
-
-
-    @SuppressWarnings("deprecation")
-    public static Scope getNarrowestScopeFromExpression(String expression)
-         throws ReferenceSyntaxException {
-        // break the argument expression up into its component
-        // expressions, ignoring literals.
-        List<String> expressions = ELUtils.getExpressionsFromString(expression);
-
-        int shortestScope = Scope.NONE.ordinal();
-        Scope result = Scope.NONE;
-        for (String expr : expressions) {
-        // loop over the expressions
-
-            Scope lScope = getScopeForSingleExpression(expr);
-            // don't consider none
-            if (null == lScope || lScope == Scope.NONE) {
-                continue;
-            }
-
-            int currentScope = lScope.ordinal();
-
-            // if we have no basis for comparison
-            if (Scope.NONE.ordinal() == shortestScope) {
-                shortestScope = currentScope;
-                result = lScope;
-            } else {
-                // we have a basis for comparison
-                if (currentScope < shortestScope) {
-                    shortestScope = currentScope;
-                    result = lScope;
-                }
-            }
-        }
-        return result;
-    }
-
-
-    /*
-    * Determine whether String is a mixed value binding expression or not.
-    */
-    public static boolean isMixedExpression(String expression) {
-
-        if (null == expression) {
-            return false;
-        }
-
-        // if it doesn't start and end with delimiters
-        return (!(expression.startsWith("#{") && expression.endsWith("}")))
-                  && isExpression(expression);
-
-    }
-
-
-    /*
-    * Determine whether String is a value binding expression or not.
-    */
-    public static boolean isExpression(String expression) {
-
-        if (null == expression) {
-            return false;
-        }
-        int start = expression.indexOf("#{");
-
-        //check to see if attribute has an expression
-        return (expression.indexOf("#{") != -1) &&
-               (start < expression.indexOf('}'));
-
-
-    }
-
-
-    public static boolean isScopeValid(String scopeName) {
-        if (scopeName == null) {
-            return false;
-        }
-        for (Scope scope : Scope.values()) {
-            if (scopeName.equals(scope.toString())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/FacesCompositeELResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/FacesCompositeELResolver.java
deleted file mode 100644
index f7a9493..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/FacesCompositeELResolver.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.el;
-
-import com.sun.faces.util.RequestStateManager;
-
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-
-import javax.el.ELResolver;
-import javax.el.ELContext;
-import javax.el.CompositeELResolver;
-import javax.el.ELException;
-
-import javax.faces.context.FacesContext;
-
-/**
- * Maintains an ordered composite list of child <code>ELResolver for JSF</code>.
- *
- */
-public class FacesCompositeELResolver extends CompositeELResolver {
-    
-    public void add(ELResolver elResolver) {                                                                             
-        super.add(elResolver);
-    }
-
-    public Object getValue(ELContext context, Object base, Object property) 
-        throws ELException {
-        
-        context.setPropertyResolved(false);
-        FacesContext ctx = getFacesContext(context);
-        if (ctx == null) {
-            return null;
-        }
-        setChainType(ctx);
-        Object result = super.getValue(context, base, property);
-        clearChainType(ctx);
-        
-        return result;
-    }
-
-    public Class<?> getType(ELContext context, Object base, Object property) 
-        throws ELException {
-
-        context.setPropertyResolved(false);
-        FacesContext ctx = getFacesContext(context);
-        if (ctx == null) {
-            return null;
-        }
-        setChainType(ctx);
-        Class<?> result = super.getType(context, base, property);
-        clearChainType(ctx);
-
-        return result;
-    }
-
-    
-    public void setValue(ELContext context, Object base, Object property,
-        Object val) throws ELException {
-        context.setPropertyResolved(false);
-        FacesContext ctx = getFacesContext(context);
-        if (ctx == null) {
-            return;
-        }
-        setChainType(ctx);
-        super.setValue(context, base, property, val);
-        clearChainType(ctx);
-    }
-
-    
-    public boolean isReadOnly(ELContext context, Object base, Object property) 
-        throws ELException {
-        context.setPropertyResolved(false);
-        FacesContext ctx = getFacesContext(context);
-        if (ctx == null) {
-            return false;
-        }
-        setChainType(ctx);
-        boolean result = super.isReadOnly(context, base, property);
-        clearChainType(ctx);
-        return result;
-    }
-
-    
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
-        FacesContext ctx = getFacesContext(context);
-        setChainType(ctx);
-        Iterator<FeatureDescriptor> result = super.getFeatureDescriptors(context, base);
-        clearChainType(ctx);
-        return result;
-    }
-    
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        return null;
-    }
-
-    /**
-     * <p><b>JSP</b> indicates this CompositeELResolver instance is the
-     * JSP chain, specified in section 5.6.1 of the spec.</p>
-     *
-     * <p><b>Faces</b> indicates this CompositeELResolver instance is the
-     * JSF chain, specified in section 5.6.2 of the spec.</p>
-     */
-
-    public enum ELResolverChainType {
-        JSP,
-        Faces
-    }
-
-    private ELResolverChainType chainType;
-
-    /**
-     * <p>Guarantee that this instance knows of what chain it is a
-     * member.</p>
-     * @param chainType the {@link ELResolverChainType} 
-     */
-    public FacesCompositeELResolver(ELResolverChainType chainType) {
-        this.chainType = chainType;
-    }
-
-    /**
-     * <p>Set a request scoped attribute indicating what kind of chain
-     * the current expression is.</p>
-     */
-
-    private void setChainType(FacesContext ctx) {
-        RequestStateManager.set(ctx,
-                                RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME,
-                                chainType);
-    }
-
-    /**
-     * <p>Clear the request scoped attribute indicating what kind of
-     * chain the current expression is.</p>
-     */
-    
-    private void clearChainType(FacesContext ctx) {
-        RequestStateManager.remove(ctx, RequestStateManager.EL_RESOLVER_CHAIN_TYPE_NAME);
-    }
-
-
-    /**
-     * @param elContext context for the current expression evaluation
-     * @return the <code>FacesContext</code> associated with this expression
-     *  evaluation
-     */
-    private FacesContext getFacesContext(ELContext elContext) {
-
-        return (FacesContext) elContext.getContext(FacesContext.class);
-
-    }
-
-}
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/FacesResourceBundleELResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/FacesResourceBundleELResolver.java
deleted file mode 100644
index 9de5f4d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/FacesResourceBundleELResolver.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.ApplicationResourceBundle;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.PropertyNotFoundException;
-import javax.el.PropertyNotWritableException;
-import javax.faces.application.Application;
-import javax.faces.context.FacesContext;
-import java.beans.FeatureDescriptor;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-/**
- * @author edburns
- */
-public class FacesResourceBundleELResolver extends ELResolver {
-
-    /** Creates a new instance of FacesResourceBundleELResolver */
-    public FacesResourceBundleELResolver() {
-    }
-
-    public Object getValue(ELContext context, Object base, Object property) {
-        if (null != base) {
-            return null;
-        }
-        if (null == property) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-        FacesContext facesContext = (FacesContext)
-           context.getContext(FacesContext.class);
-        Application app = facesContext.getApplication();
-
-        ResourceBundle result =
-              app.getResourceBundle(facesContext, property.toString());
-        if (null != result) {
-            context.setPropertyResolved(true);
-        }
-
-        return result;
-    }
-
-
-
-    public Class<?> getType(ELContext context, Object base, Object property)
-        throws ELException {
-
-        if (null != base) {
-            return null;
-        }
-
-        if (null == property) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-
-        FacesContext facesContext = (FacesContext)
-           context.getContext(FacesContext.class);
-        Application app = facesContext.getApplication();
-
-        ResourceBundle result =
-              app.getResourceBundle(facesContext, property.toString());
-        if (null != result) {
-            context.setPropertyResolved(true);
-            return ResourceBundle.class;
-        }
-
-        return null;
-
-    }
-
-    public void  setValue(ELContext context, Object base, Object property,
-        Object val) throws ELException {
-        String message;
-
-        if (base == null && property == null) {
-            message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-
-        FacesContext facesContext = (FacesContext)
-           context.getContext(FacesContext.class);
-        Application app = facesContext.getApplication();
-
-        ResourceBundle result =
-              app.getResourceBundle(facesContext, property.toString());
-        if (null != result) {
-            context.setPropertyResolved(true);
-            message = MessageUtils.getExceptionMessageString
-                (MessageUtils.OBJECT_IS_READONLY);
-            message = message + " base " + base + " property " + property;
-            throw new PropertyNotWritableException(message);
-        }
-
-
-    }
-
-    public boolean isReadOnly(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return false;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-        FacesContext facesContext = (FacesContext)
-           context.getContext(FacesContext.class);
-        Application app = facesContext.getApplication();
-
-        ResourceBundle result =
-              app.getResourceBundle(facesContext, property.toString());
-        if (null != result) {
-            context.setPropertyResolved(true);
-            return true;
-        }
-
-        return false;
-    }
-
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
-
-        if (base != null) {
-            return null;
-        }
-
-        ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
-
-        FacesContext facesContext =
-            (FacesContext) context.getContext(FacesContext.class);
-        ApplicationAssociate associate =
-            ApplicationAssociate.getCurrentInstance();
-        Map<String, ApplicationResourceBundle> rbMap = associate.getResourceBundles();
-        if (rbMap == null) {
-            return list.iterator();
-        }
-        // iterate over the list of managed beans
-        for (Iterator<Map.Entry<String,ApplicationResourceBundle>> i = rbMap.entrySet().iterator(); i.hasNext(); ) {
-            Map.Entry<String,ApplicationResourceBundle> entry = i.next();
-            String var = entry.getKey();
-            ApplicationResourceBundle bundle = entry.getValue();
-            if ( bundle != null) {
-                Locale curLocale = Util.getLocaleFromContextOrSystem(facesContext);
-
-                String description = bundle.getDescription(curLocale);
-                String displayName = bundle.getDisplayName(curLocale);
-
-                list.add(Util.getFeatureDescriptor(var,
-                    displayName, description, false, false, true,
-                    ResourceBundle.class, Boolean.TRUE));
-            }
-        }
-        return list.iterator();
-    }
-    
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-        return String.class;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ImplicitObjectELResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/ImplicitObjectELResolver.java
deleted file mode 100644
index 69465df..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ImplicitObjectELResolver.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.el;
-
-import java.beans.FeatureDescriptor;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.PropertyNotFoundException;
-import javax.el.PropertyNotWritableException;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIComponent;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.component.CompositeComponentStackManager;
-
-public class ImplicitObjectELResolver extends ELResolver implements ELConstants{
-
-    static String[] IMPLICIT_OBJECTS = new String[] {
-        "application", "applicationScope", "cc", "component", "cookie", "facesContext",
-        "header", "headerValues", "initParam", "param", "paramValues",
-        "request", "requestScope", "resource", "session", "sessionScope", 
-        "view", "viewScope" };
-    static {
-        Arrays.sort(IMPLICIT_OBJECTS);
-    }
-
-    public ImplicitObjectELResolver() {
-    }
-
-    public Object getValue(ELContext context,Object base, Object property)
-            throws ELException {
-        // variable resolution is a special case of property resolution
-        // where the base is null.
-        if (base != null) {
-            return null;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        FacesContext facesContext =
-            (FacesContext) context.getContext(FacesContext.class);
-        ExternalContext extCtx = facesContext.getExternalContext();
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index < 0) {
-            return null;
-        } else {
-            switch (index) {
-                case APPLICATION:
-                    context.setPropertyResolved(true);
-                    return extCtx.getContext();
-                case APPLICATION_SCOPE:
-                    context.setPropertyResolved(true);
-                    return extCtx.getApplicationMap();
-                case COMPOSITE_COMPONENT:
-                    // The following five lines violate the specification.
-                    // The specification states that the 'cc' implicit object
-                    // always evaluates to the current composite component,
-                    // however, this isn't desirable behavior when passing
-                    // attributes between nested composite components, so we
-                    // need to alter the behavior so that the components behave
-                    // as the user would expect.
-                    /* BEGIN DEVIATION */
-                    CompositeComponentStackManager manager =
-                          CompositeComponentStackManager.getManager(facesContext);
-                    Object o = manager.peek();
-                    /* END DEVIATION */
-                    if (o == null) {
-                        o = UIComponent.getCurrentCompositeComponent(facesContext);
-                    }
-                    context.setPropertyResolved(o != null);
-                    return o;
-                case COMPONENT:
-                    UIComponent c = UIComponent.getCurrentComponent(facesContext);
-                    context.setPropertyResolved(c != null);
-                    return c;
-                case COOKIE:
-                    context.setPropertyResolved(true);
-                    return extCtx.getRequestCookieMap();
-                case FACES_CONTEXT:
-                    context.setPropertyResolved(true);
-                    return facesContext;
-                case HEADER:
-                    context.setPropertyResolved(true);
-                    return extCtx.getRequestHeaderMap();
-                case HEADER_VALUES:
-                    context.setPropertyResolved(true);
-                    return extCtx.getRequestHeaderValuesMap();
-                case INIT_PARAM:
-                    context.setPropertyResolved(true);
-                    return extCtx.getInitParameterMap();
-                case PARAM:
-                    context.setPropertyResolved(true);
-                    return extCtx.getRequestParameterMap();
-                case PARAM_VALUES:
-                    context.setPropertyResolved(true);
-                    return extCtx.getRequestParameterValuesMap();
-                case REQUEST:
-                    context.setPropertyResolved(true);
-                    return extCtx.getRequest();
-                case REQUEST_SCOPE:
-                    context.setPropertyResolved(true);
-                    return extCtx.getRequestMap();
-                case RESOURCE:
-                    context.setPropertyResolved(true);
-                    return facesContext.getApplication().getResourceHandler();
-                case SESSION:
-                    context.setPropertyResolved(true);
-                    return extCtx.getSession(true);
-                case SESSION_SCOPE:
-                    context.setPropertyResolved(true);
-                    return extCtx.getSessionMap();
-                case VIEW:
-                    context.setPropertyResolved(true);
-                    return facesContext.getViewRoot();
-                case VIEW_SCOPE:
-                    UIViewRoot root = facesContext.getViewRoot();
-                    if (root != null) {
-                        context.setPropertyResolved(true);
-                        return facesContext.getViewRoot().getViewMap();
-                    }
-                default:
-                    return null;
-            }
-        }
-    }
-
-    public void  setValue(ELContext context, Object base, Object property,
-                          Object val) throws ELException {
-        if (base != null) {
-            return;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index >= 0) {
-            throw new PropertyNotWritableException((String)property);
-        }
-    }
-
-    public boolean isReadOnly(ELContext context, Object base, Object property)
-        throws ELException{
-        if (base != null) {
-            return false;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index >= 0) {
-            context.setPropertyResolved(true);
-            return true;
-        }
-        return false;
-    }
-
-    public Class<?> getType(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return null;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index >= 0) {
-            context.setPropertyResolved(true);
-        }
-        return null;
-    }
-
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-        ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>(14);
-        list.add(Util.getFeatureDescriptor("application", "application",
-                                           "application",false, false, true, Object.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("applicationScope", "applicationScope",
-                                           "applicationScope",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("cookie", "cookie",
-                                           "cookie",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("facesContext", "facesContext",
-                                           "facesContext",false, false, true, FacesContext.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("view", "view",
-                                           "root",false, false, true, UIViewRoot.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("header", "header",
-                                           "header",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("headerValues", "headerValues",
-                                           "headerValues",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("initParam", "initParam",
-                                           "initParam",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("param", "param",
-                                           "param",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("paramValues", "paramValues",
-                                           "paramValues",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("request", "request",
-                                           "request",false, false, true, Object.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("requestScope", "requestScope",
-                                           "requestScope",false, false, true, Map.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("session", "session",
-                                           "session",false, false, true, Object.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("sessionScope", "sessionScope",
-                                           "sessionScope",false, false, true, Map.class, Boolean.TRUE));
-
-        return list.iterator();
-
-    }
-
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-        return String.class;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ImplicitObjectELResolverForJsp.java b/jsf-ri/src/main/java/com/sun/faces/el/ImplicitObjectELResolverForJsp.java
deleted file mode 100644
index 3f24a50..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ImplicitObjectELResolverForJsp.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import java.beans.FeatureDescriptor;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.PropertyNotFoundException;
-import javax.el.PropertyNotWritableException;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MessageUtils;
-
-public class ImplicitObjectELResolverForJsp extends ImplicitObjectELResolver {
-
-    public ImplicitObjectELResolverForJsp() {
-    }
-
-    public Object getValue(ELContext context,Object base, Object property)
-            throws ELException {
-        // variable resolution is a special case of property resolution
-        // where the base is null.
-        if (base != null) {
-            return null;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        FacesContext facesContext =
-            (FacesContext)context.getContext(FacesContext.class);
-
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index < 0) {
-            return null;
-        }
-        switch (index) {
-            case FACES_CONTEXT:
-                context.setPropertyResolved(true);
-                return facesContext;
-            case VIEW:
-                context.setPropertyResolved(true);
-                return facesContext.getViewRoot();
-            case VIEW_SCOPE:
-                context.setPropertyResolved(true);
-                return facesContext.getViewRoot().getViewMap();
-            case RESOURCE:
-                context.setPropertyResolved(true);
-                return facesContext.getApplication().getResourceHandler();
-            default:
-                return null;
-        }
-
-    }
-
-    public Class<?> getType(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return null;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index < 0) {
-            return null;
-        }
-        switch (index) {
-            case FACES_CONTEXT:
-            case VIEW:
-                context.setPropertyResolved(true);
-                return null;
-            default:
-                return null;
-        }
-    }
-
-    public void  setValue(ELContext context, Object base, Object property,
-                          Object val) throws ELException {
-        if (base != null) {
-            return;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index < 0) {
-            return;
-        }
-        switch (index) {
-            case FACES_CONTEXT:
-                throw new PropertyNotWritableException(MessageUtils.getExceptionMessageString
-                (MessageUtils.OBJECT_IS_READONLY, "facesContext"));
-            case VIEW:
-                throw new PropertyNotWritableException(MessageUtils.getExceptionMessageString
-                (MessageUtils.OBJECT_IS_READONLY, "view"));
-            default:
-        }
-    }
-
-    public boolean isReadOnly(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return false;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-        // return value will be ignored unless context.propertyResolved is
-        // set to true.
-        int index = Arrays.binarySearch(IMPLICIT_OBJECTS, property);
-        if (index < 0) {
-            return false;
-        }
-        switch (index) {
-            case FACES_CONTEXT:
-                context.setPropertyResolved(true);
-                return true;
-            case VIEW:
-                context.setPropertyResolved(true);
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-
-        ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>(2);
-        list.add(Util.getFeatureDescriptor("facesContext", "facesContext",
-                                           "facesContext",false, false, true, FacesContext.class, Boolean.TRUE));
-        list.add(Util.getFeatureDescriptor("view", "view",
-                                           "root",false, false, true, UIViewRoot.class, Boolean.TRUE));
-        return list.iterator();
-
-    }
-
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-        return String.class;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ManagedBeanELResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/ManagedBeanELResolver.java
deleted file mode 100644
index 2a4bc01..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ManagedBeanELResolver.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.mgbean.BeanBuilder;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.PropertyNotFoundException;
-import javax.faces.context.FacesContext;
-import java.beans.FeatureDescriptor;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public class ManagedBeanELResolver extends ELResolver {
-
-    public ManagedBeanELResolver() {
-    }
-
-    public Object getValue(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return null;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        return resolveBean(context, property);
-    }
-
-    public Class<?> getType(ELContext context, Object base, Object property)
-        throws ELException {
-
-        if (base == null && property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        return null;
-
-    }
-
-    public void setValue(ELContext context, Object base, Object property,
-                          Object val) throws ELException {
-
-        if (base == null && property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        if (base == null) {
-            resolveBean(context, property);
-        }
-
-    }
-
-    public boolean isReadOnly(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return false;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-
-        return false;
-    }
-
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
-
-        if (base != null) {
-            return null;
-        }
-
-        FacesContext facesContext =
-            (FacesContext) context.getContext(FacesContext.class);
-        BeanManager beanManager = getBeanManager();
-        if (beanManager == null || beanManager.getRegisteredBeans().isEmpty()) {
-            List<FeatureDescriptor> l = Collections.emptyList();
-            return l.iterator();
-        }
-
-        Map<String,BeanBuilder> beans = beanManager.getRegisteredBeans();
-        List<FeatureDescriptor> list =
-             new ArrayList<FeatureDescriptor>(beans.size());
-        // iterate over the list of managed beans
-        for (Map.Entry<String,BeanBuilder> bean : beans.entrySet()) {
-            String beanName = bean.getKey();
-            BeanBuilder builder = bean.getValue();
-            String loc = Util.getLocaleFromContextOrSystem(facesContext).toString();
-            Map<String,String> descriptions = builder.getDescriptions();
-
-            String description = null;
-            if (descriptions != null) {
-                description = descriptions.get(loc);
-                if (description == null) {
-                    description = descriptions.get("DEFAULT");
-                }
-            }
-            list.add(Util.getFeatureDescriptor(beanName,
-                                               beanName,
-                                               (description == null) ? "" : description,
-                                               false,
-                                               false,
-                                               true,
-                                               builder.getBeanClass(),
-                                               Boolean.TRUE));
-        }
-
-        return list.iterator();
-    }
-
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-        return Object.class;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static BeanManager getBeanManager() {
-
-        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
-        return ((associate != null) ? associate.getBeanManager() : null);
-
-    }
-
-    private Object resolveBean(ELContext context, Object property) {
-        Object result = null;
-        BeanManager manager = getBeanManager();
-        if (manager != null) {
-            String beanName = property.toString();
-            BeanBuilder builder = manager.getBuilder(beanName);
-            if (builder != null) {
-                FacesContext facesContext = (FacesContext)
-                    context.getContext(FacesContext.class);
-                result = manager.getBeanFromScope(beanName, builder, facesContext);
-                if (result == null) {
-                    result = manager.create(beanName, builder, facesContext);
-                }
-                context.setPropertyResolved(result != null);
-            }
-        }
-    
-        return result;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/PropertyResolverChainWrapper.java b/jsf-ri/src/main/java/com/sun/faces/el/PropertyResolverChainWrapper.java
deleted file mode 100644
index 362be97..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/PropertyResolverChainWrapper.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.el;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyResolver;
-
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-import java.util.List;
-
-public class PropertyResolverChainWrapper extends ELResolver {
-
-    @SuppressWarnings("deprecation")
-    private PropertyResolver legacyPR = null;
-    
-    @SuppressWarnings("deprecation")
-    public PropertyResolverChainWrapper(PropertyResolver propertyResolver) {
-        this.legacyPR = propertyResolver;
-    }
-
-    @Override
-    @SuppressWarnings("deprecation")
-    public Object getValue(ELContext context, Object base, Object property) 
-        throws ELException {
-        if (base == null || property == null) {
-            return null;
-        }        
-        Object result;
-        context.setPropertyResolved(true);
-        FacesContext facesContext = (FacesContext) 
-            context.getContext(FacesContext.class);
-        ELContext jsfEL = facesContext.getELContext();
-        jsfEL.setPropertyResolved(true);
-        if (base instanceof List || base.getClass().isArray()) {
-            Object indexObj = facesContext.getApplication().getExpressionFactory().
-                    coerceToType(property, Integer.class);
-            int index = ((Integer)indexObj).intValue();
-            try {
-                result = legacyPR.getValue(base, index);
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }
-        } else {
-            try {
-                result = legacyPR.getValue(base, property);               
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }    
-        }
-        context.setPropertyResolved(jsfEL.isPropertyResolved());
-        return result;
-    }
-
-    @Override
-    @SuppressWarnings("deprecation")
-    public Class<?> getType(ELContext context, Object base, Object property) 
-        throws ELException {
-        if (base == null || property == null) {
-            return null;
-        }
-        
-        Class result;
-        context.setPropertyResolved(true);
-        FacesContext facesContext = (FacesContext)
-                context.getContext(FacesContext.class);
-        ELContext jsfEL = facesContext.getELContext();
-        jsfEL.setPropertyResolved(true);
-        if (base instanceof List || base.getClass().isArray()) {
-            Object indexObj = facesContext.getApplication().getExpressionFactory().
-                    coerceToType(property, Integer.class);
-            int index = ((Integer)indexObj).intValue();
-            try {
-                result = legacyPR.getType(base, index);               
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }
-        } else {
-            try {
-                result = legacyPR.getType(base, property);                
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }    
-        }
-        context.setPropertyResolved(jsfEL.isPropertyResolved());
-        return result;
-    }
-
-    @Override
-    @SuppressWarnings("deprecation")
-    public void  setValue(ELContext context, Object base, Object property,
-        Object val) throws ELException {
-        if (base == null || property == null) {
-            return;
-        }       
-
-        context.setPropertyResolved(true);
-        FacesContext facesContext = (FacesContext)
-            context.getContext(FacesContext.class);
-        ELContext jsfEL = facesContext.getELContext();
-        jsfEL.setPropertyResolved(true);
-        if (base instanceof List || base.getClass().isArray()) {
-            Object indexObj = facesContext.getApplication().getExpressionFactory().
-                    coerceToType(property, Integer.class);
-            int index = ((Integer)indexObj).intValue();            
-            try {
-                legacyPR.setValue(base, index, val);
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }
-        } else {
-            try {
-                legacyPR.setValue(base, property, val);
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }    
-        }
-        context.setPropertyResolved(jsfEL.isPropertyResolved());
-    }
-
-    @Override
-    @SuppressWarnings("deprecation")
-    public boolean isReadOnly(ELContext context, Object base, Object property) 
-        throws ELException {
-        if (base == null || property == null) {
-            return false;
-        }      
-        boolean result;
-        context.setPropertyResolved(true);
-        FacesContext facesContext = (FacesContext)
-            context.getContext(FacesContext.class);
-        ELContext jsfEL = facesContext.getELContext();
-        jsfEL.setPropertyResolved(true);
-        if (base instanceof List || base.getClass().isArray()) {
-            Object indexObj = facesContext.getApplication().getExpressionFactory().
-                    coerceToType(property, Integer.class);
-            int index = ((Integer)indexObj).intValue();
-            try {
-                result = legacyPR.isReadOnly(base, index);                
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }
-        } else {
-            try {
-                result = legacyPR.isReadOnly(base, property);                
-            } catch (EvaluationException ex) {
-                context.setPropertyResolved(false);
-                throw new ELException(ex);
-            }    
-        }
-        context.setPropertyResolved(jsfEL.isPropertyResolved());
-        return result;
-    }
-
-    @Override
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, 
-                                                             Object base) {
-        return null;
-    }
-
-    @Override
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        if ( base == null ) {
-            return Object.class;
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/PropertyResolverImpl.java b/jsf-ri/src/main/java/com/sun/faces/el/PropertyResolverImpl.java
deleted file mode 100644
index 41c5b33..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/PropertyResolverImpl.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import javax.el.ELException;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.PropertyResolver;
-
-import java.lang.reflect.Array;
-import java.util.List;
-
-import com.sun.faces.util.MessageUtils;
-
-/**
- * <p>
- * Concrete implementation of <code>PropertyResolver</code>.
- * </p>
- */
- at SuppressWarnings("deprecation")
-public class PropertyResolverImpl extends PropertyResolver {
-
-
-    private PropertyResolver delegate;
-
-
-    // ------------------------------------------- Methods from PropertyResolver
-
-
-    // Specified by javax.faces.el.PropertyResolver.getType(Object,int)
-    public Class getType(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException{
-
-        // validates base != null and index >= 0
-        assertInput(base, index);
-
-        if (delegate != null) {
-            return delegate.getType(base, index);
-        }
-
-        Class<?> type = base.getClass();
-        try {
-            if (type.isArray()) {
-                Array.get(base, index);
-                return type.getComponentType();
-            } else if (base instanceof List) {
-                Object value = ((List) base).get(index);
-                return (value != null) ? value.getClass() : null;
-            } else {
-                throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
-                        base));
-            }
-        } catch (ArrayIndexOutOfBoundsException aioobe) {
-            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
-                        base,
-                        index,
-                        Array.getLength(base)));
-        } catch (IndexOutOfBoundsException ioobe) {
-           throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
-                        base,
-                        index,
-                        ((List)base).size()));
-        }
-    }
-
-    // Specified by javax.faces.el.PropertyResolver.getType(Object,String)
-    public Class getType(Object base, Object property) {
-
-        assertInput(base, property);
-
-        if (delegate != null) {
-            return delegate.getType(base, property);
-        }
-
-        try {
-            FacesContext context = FacesContext.getCurrentInstance();
-            return context.getApplication().getELResolver().getType(context.getELContext(), base,property);
-        } catch (javax.el.PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(pnfe);
-        } catch (ELException elex) {
-            throw new EvaluationException(elex);
-        }
-    }
-
-    // Specified by javax.faces.el.PropertyResolver.getValue(Object,int)
-    public Object getValue(Object base, int index) {
-
-        // validates base and index
-        if (base == null) {
-            return null;
-        }
-
-        if (delegate != null) {
-            return delegate.getValue(base, index);
-        }
-
-        if (base.getClass().isArray()) {
-            try {
-                return Array.get(base, index);
-            } catch (ArrayIndexOutOfBoundsException aioobe) {
-                return null;
-            }
-        } else if (base instanceof List) {
-            try {
-                return ((List) base).get(index);
-            } catch (IndexOutOfBoundsException ioobe) {
-                return null;
-            }
-        } else {
-            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
-                        base));
-        }
-
-    }
-
-    // Specified by javax.faces.el.PropertyResolver.getValue(Object,String)
-    public Object getValue(Object base, Object property) {
-
-        if (delegate != null) {
-            return delegate.getValue(base, property);
-        }
-
-        try {
-            FacesContext context = FacesContext.getCurrentInstance();
-            return context.getApplication().getELResolver().getValue(context.getELContext(), base,property);
-        } catch (javax.el.PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(pnfe);
-        } catch (ELException elex) {
-            throw new EvaluationException(elex);
-        }
-    }
-
-    // Specified by javax.faces.el.PropertyResolver.isReadOnly(Object,int)
-    public boolean isReadOnly(Object base, int index) {
-
-        // validate input
-        assertInput(base, index);
-
-        if (delegate != null) {
-            return delegate.isReadOnly(base, index);
-        }
-
-        if (base instanceof List || base.getClass().isArray()) {
-            return false;
-        } else {
-            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
-                        base));
-        }
-    }
-
-    // Specified by javax.faces.el.PropertyResolver.isReadOnly(Object,String)
-    public boolean isReadOnly(Object base, Object property) {
-
-        if (delegate != null) {
-            return delegate.isReadOnly(base, property);
-        }
-
-        try {
-            FacesContext context = FacesContext.getCurrentInstance();
-            return context.getApplication().getELResolver().isReadOnly(context.getELContext(), base,property);
-        } catch (ELException elex) {
-            throw new EvaluationException(elex);
-        }
-    }
-
-    // Specified by javax.faces.el.PropertyResolver.setValue(Object,int,Object)
-    public void setValue(Object base, int index, Object value) {
-
-        // validate input
-        assertInput(base, index);
-
-        if (delegate != null) {
-            delegate.setValue(base, index, value);
-            return;
-        }
-        
-        FacesContext context = FacesContext.getCurrentInstance();
-        Class<?> type = base.getClass();
-        if (type.isArray()) {
-            try {
-                Array.set(base, index, (context.getApplication().
-                    getExpressionFactory()).coerceToType(value, type
-                        .getComponentType()));
-            }
-            catch (ArrayIndexOutOfBoundsException aioobe) {
-                throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
-                        base,
-                        index,
-                        Array.getLength(base)));
-            }
-        } else if (base instanceof List) {
-            try {
-                // Inherently not type safe, but nothing can be done about it.
-                //noinspection unchecked
-                ((List) base).set(index, value);
-            } catch (IndexOutOfBoundsException ioobe) {
-                throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,
-                        base,
-                        index,
-                        ((List)base).size()));
-            }
-        } else {
-           throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_PROPERTY_TYPE_ERROR_ID,
-                        base));
-        }
-    }
-
-    // Specified by
-    // javax.faces.el.PropertyResolver.setValue(Object,String,Object)
-    public void setValue(Object base, Object property, Object value) {
-
-        if (delegate != null) {
-            delegate.setValue(base, property, value);
-            return;
-        }
-
-        try {
-            FacesContext context = FacesContext.getCurrentInstance();
-            context.getApplication().getELResolver().setValue(context.getELContext(), base,property, value);
-        } catch (javax.el.PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(pnfe);
-        } catch (javax.el.PropertyNotWritableException pnwe) {
-            throw new PropertyNotFoundException(pnwe);
-        }
-        catch (ELException elex) {
-            throw new EvaluationException(elex);
-        }
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void setDelegate(PropertyResolver delegate) {
-
-        this.delegate = delegate;
-
-    }
-
-    protected static void assertInput(Object base, Object property)
-            throws PropertyNotFoundException {
-        if (base == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base");
-            throw new PropertyNotFoundException(message);
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "property");
-            throw new PropertyNotFoundException(message);
-        }
-    }
-
-    protected static void assertInput(Object base, int index)
-            throws PropertyNotFoundException {
-        if (base == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base");
-            throw new PropertyNotFoundException(message);
-        }
-        if (index < 0) {
-            throw new PropertyNotFoundException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.EL_OUT_OF_BOUNDS_ERROR_ID,
-                        base,
-                        index));
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ResourceELResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/ResourceELResolver.java
deleted file mode 100644
index 4accfac..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ResourceELResolver.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.el;
-
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.PropertyNotFoundException;
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import javax.faces.component.UIComponent;
-
-/**
- * ELResolver to resolve expressions like the following:
- * <ul>
- *   <li>#{resource['library:resource']}</li>
- *   <li>#{resource['resource']}
- * </ul>
- */
-public class ResourceELResolver extends ELResolver {
-
-
-    // ------------------------------------------------- Methods from ELResolver
-
-
-    /**
-     * If base and property are not <code>null</code> and base is
-     * an instance of {@link ResourceHandler}, perform the following:
-     * <ul>
-     * <li>
-     * If <code>property</code> doesn't contain <code>:</code> treat <code>property</code>
-     * as the resource name and pass <code>property</code> to {@link ResourceHandler#createResource(String)}
-     * </li>
-     * <li>
-     * If <code>property</code> contains a single <code>:</code> treat the content
-     * before the <code>:</code> as the library name, and the content after the
-     * <code>:</code> to be the resource name and pass both to {@link javax.faces.application.ResourceHandler#createResource(String, String)}
-     * </li>
-     * <li>
-     * If <code>property</code> contains more than one <code>:</code> then throw
-     * a <code>ELException</code>
-     * </li>
-     * <li>
-     * If one of the above steps resulted in the creation of a {@link Resource}
-     * instance, call <code>ELContext.setPropertyResolved(true)</code> and return
-     * the result of {@link javax.faces.application.Resource#getRequestPath()}
-     * </li>
-     * </ul>
-     * @see ELResolver#getValue(javax.el.ELContext, Object, Object)
-     */
-    public Object getValue(ELContext context, Object base, Object property) {
-        if (base == null && property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-        Object ret = null;
-        if (base instanceof ResourceHandler) {
-            ResourceHandler handler = (ResourceHandler) base;
-            String prop = property.toString();
-            Resource res;
-            if (!prop.contains(":")) {
-                res = handler.createResource(prop);
-            } else {
-                if (!isPropertyValid(prop)) {
-                    // RELEASE_PENDING i18n
-                    throw new ELException("Invalid resource format.  Property " + prop + " contains more than one colon (:)");
-                }
-                String[] parts = Util.split(prop, ":");
-                
-                // If the enclosing entity for this expression is itself 
-                // a resource, the "this" syntax for the library name must
-                // be supported.
-                if (null != parts[0] && parts[0].equals("this")) {
-                    FacesContext facesContext = FacesContext.getCurrentInstance();
-                    UIComponent currentComponent = UIComponent.getCurrentCompositeComponent(facesContext);
-                    Resource componentResource = (Resource)
-                                currentComponent.getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
-                    if (null != componentResource) {
-                        String libName = null;
-                        if (null != (libName = componentResource.getLibraryName())) {
-                            parts[0] = libName;
-                        }
-                    }
-                    
-                }
-                
-                res = handler.createResource(parts[1], parts[0]);
-            }
-            if (res != null) {
-                ret = res.getRequestPath();
-            }
-            context.setPropertyResolved(true);
-        }
-        return ret;
-    }
-
-
-    /**
-     * @return <code>null</code> as this resolver only performs lookups
-     * @throws PropertyNotFoundException if base and property are null
-     */
-    public Class<?> getType(ELContext context, Object base, Object property) {
-        if (base == null && property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-        return null;
-    }
-
-
-    /**
-     * This is basically a no-op.
-     * @throws PropertyNotFoundException if base and property are null
-     */
-    public void setValue(ELContext context,
-                         Object base,
-                         Object property,
-                         Object value) {
-        if (base == null && property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-    }
-
-
-    /**
-     * @return <code>false</code> (basically ignored by the EL system)
-     * @throws PropertyNotFoundException if base and property are null
-     */
-    public boolean isReadOnly(ELContext context, Object base, Object property) {
-        if (base == null && property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-
-        return false;
-    }
-
-
-    /**
-     * @return <code>null</code> - there is no way to query the
-     *  <code>ResourceManager</code> for all known resources
-     */
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
-                                                             Object base) {
-
-        return null;
-
-    }
-
-
-    /**
-     * @return <code>String.class</code> - getType() expects String properties
-     */
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-
-        return String.class;
-
-    }
-
-    
-    // --------------------------------------------------------- Private Methods
-
-
-    private boolean isPropertyValid(String property) {
-
-        int idx = property.indexOf(':');
-        return (property.indexOf(':', idx + 1) == -1);
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/ScopedAttributeELResolver.java b/jsf-ri/src/main/java/com/sun/faces/el/ScopedAttributeELResolver.java
deleted file mode 100644
index bb02826..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/ScopedAttributeELResolver.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.beans.FeatureDescriptor;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.Map;
-
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIViewRoot;
-
-import javax.el.ELException;
-import javax.el.PropertyNotFoundException;
-import javax.el.ELContext;
-import javax.el.ELResolver;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.mgbean.BeanManager;
-
-public class ScopedAttributeELResolver extends ELResolver {
-
-    public ScopedAttributeELResolver() {
-    }
-
-    public Object getValue(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return null;
-        }
-        if ( property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-        context.setPropertyResolved(true);
-        String attribute = (String) property;
-        FacesContext facesContext = (FacesContext)
-            context.getContext(FacesContext.class);
-        ExternalContext ec = facesContext.getExternalContext();
-
-        // check request
-        Object result = ec.getRequestMap().get(attribute);
-        if (result != null) {
-            return result;
-        }
-
-        // check UIViewRoot
-        UIViewRoot root = facesContext.getViewRoot();
-        if (root != null) {
-            Map<String, Object> viewMap = root.getViewMap(false);
-            if (viewMap != null) {
-                result = viewMap.get(attribute);
-            }
-        }
-        if (result != null) {
-            return result;
-        }
-
-        // check session
-        result = ec.getSessionMap().get(attribute);
-        if (result != null) {
-            return result;
-        }
-
-        // check application
-        result = ec.getApplicationMap().get(attribute);
-        if (result != null) {
-            return result;
-        }
-
-        // if we get to this point, nothing was found in the standard scopes.
-        // If the attribute refers to an entity handled by the BeanManager
-        // try getting the value from there as the value may be in a custom
-        // scope.
-        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
-        if (associate != null) {
-            BeanManager manager = associate.getBeanManager();
-            if (manager != null) {
-                if (manager.isManaged(attribute)) {
-                    return manager.getBeanFromScope(attribute, facesContext);
-                }
-            }
-        }
-
-        return null;
-        
-    }
-
-
-    public Class<?> getType(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return null;
-        }
-        if ( property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-
-        context.setPropertyResolved(true);
-        return Object.class;
-    }
-
-    public void  setValue(ELContext context, Object base, Object property,
-                          Object val) throws ELException {
-        if (base != null) {
-            return;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-
-        context.setPropertyResolved(true);
-
-        String attribute = (String) property;
-        FacesContext facesContext = (FacesContext)
-            context.getContext(FacesContext.class);
-        ExternalContext ec = facesContext.getExternalContext();
-        if ((ec.getRequestMap().get(attribute)) != null) {
-            ec.getRequestMap().put(attribute, val);
-        } else if ((facesContext.getViewRoot().getViewMap().get(attribute)) != null) {
-            facesContext.getViewRoot().getViewMap().put(attribute, val);
-        } else if ((ec.getSessionMap().get(attribute)) != null) {
-            ec.getSessionMap().put(attribute, val);
-        } else if ((ec.getApplicationMap().get(attribute)) != null) {
-            ec.getApplicationMap().put(attribute, val);
-        } else {
-            // if the property doesn't exist in any of the scopes, put it in
-            // request scope.
-            ec.getRequestMap().put(attribute, val);
-        }
-
-    }
-
-    public boolean isReadOnly(ELContext context, Object base, Object property)
-        throws ELException {
-        if (base != null) {
-            return false;
-        }
-        if (property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-        context.setPropertyResolved(true);
-        return false;
-    }
-
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
-
-       ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
-
-       FacesContext facesContext = (FacesContext)
-           context.getContext(FacesContext.class);
-       ExternalContext ec = facesContext.getExternalContext();
-
-       // add attributes in request scope.
-       Set<Entry<String,Object>> attrs = ec.getRequestMap().entrySet();
-        for (Entry<String, Object> entry : attrs) {
-            String attrName = entry.getKey();
-            Object attrValue = entry.getValue();
-            list.add(Util.getFeatureDescriptor(attrName, attrName,
-                                               "request scope attribute", false, false, true, attrValue.getClass(),
-                                               Boolean.TRUE));
-        }
-        
-       // add attributes in view scope.
-        UIViewRoot root = facesContext.getViewRoot();
-        if (root != null) {
-            Map<String, Object> viewMap = root.getViewMap(false);
-            if (viewMap != null && viewMap.size() != 0) {
-                attrs = viewMap.entrySet();
-                for (Entry<String, Object> entry : attrs) {
-                    String attrName = entry.getKey();
-                    Object attrValue = entry.getValue();
-                    list.add(Util.getFeatureDescriptor(attrName, attrName,
-                                                       "view scope attribute", false, false, true, attrValue.getClass(),
-                                                       Boolean.TRUE));
-                }
-            }
-        }
-        
-
-       // add attributes in session scope.
-       attrs = ec.getSessionMap().entrySet();
-        for (Entry<String, Object> entry : attrs) {
-            String attrName = entry.getKey();
-            Object attrValue = entry.getValue();
-            list.add(Util.getFeatureDescriptor(attrName, attrName,
-                                               "session scope attribute", false, false, true, attrValue.getClass(),
-                                               Boolean.TRUE));
-        }
-
-       // add attributes in application scope.
-       attrs = ec.getApplicationMap().entrySet();
-       for (Entry<String, Object> entry : attrs) {
-            String attrName = entry.getKey();
-            Object attrValue = entry.getValue();
-            list.add(Util.getFeatureDescriptor(attrName, attrName,
-                                               "application scope attribute", false, false, true, attrValue.getClass(),
-                                               Boolean.TRUE));
-        }
-
-       return list.iterator();
-    }
-
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-        return Object.class;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/VariableResolverChainWrapper.java b/jsf-ri/src/main/java/com/sun/faces/el/VariableResolverChainWrapper.java
deleted file mode 100644
index 3d9cee1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/VariableResolverChainWrapper.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.PropertyNotFoundException;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.VariableResolver;
-
-import java.beans.FeatureDescriptor;
-import java.util.*;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.RequestStateManager;
-
-public class VariableResolverChainWrapper extends ELResolver {
-    
-    @SuppressWarnings("deprecation")
-    private VariableResolver legacyVR = null;
-
-    @SuppressWarnings("deprecation")
-    public VariableResolverChainWrapper(VariableResolver variableResolver) {
-        this.legacyVR = variableResolver;
-    }
-
-    @Override
-    @SuppressWarnings("deprecation")
-    public Object getValue(ELContext context, Object base, Object property)
-        throws ELException {
-
-        if (base != null) {
-            return null;
-        }
-        if ( base == null && property == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "base and property"); // ?????
-            throw new PropertyNotFoundException(message);
-        }
-        context.setPropertyResolved(true);
-        Object result = null;
-        
-        FacesContext facesContext = (FacesContext)
-            context.getContext(FacesContext.class);
-        String propString = property.toString();
-        try {
-        // If we are already in the midst of an expression evaluation
-        // that touched this resolver...
-            //noinspection unchecked
-            List<String> varNames = (List<String>) RequestStateManager.get(facesContext,
-                                                                           RequestStateManager.REENTRANT_GUARD);
-            if (varNames != null
-                 && !varNames.isEmpty()
-                 && varNames.contains(propString)) {
-                // take no action and return.
-                context.setPropertyResolved(false);
-                return null;
-            }
-            // Make sure subsequent calls don't take action.
-            if (varNames == null) {
-                varNames = new ArrayList<String>();
-                RequestStateManager.set(facesContext,
-                                        RequestStateManager.REENTRANT_GUARD,
-                                        varNames);
-            }
-            varNames.add(propString);
-            
-            result = legacyVR.resolveVariable(facesContext,
-                                              propString);
-        } catch (EvaluationException ex) {
-            context.setPropertyResolved(false);
-            throw new ELException(ex);
-        } finally {
-            // Make sure to remove the guard after the call returns
-            //noinspection unchecked
-            List<String> varNames = (List<String>) RequestStateManager.get(facesContext,
-                                                                           RequestStateManager.REENTRANT_GUARD);
-            if (varNames != null && !varNames.isEmpty()) {
-                varNames.remove(propString);
-            }
-            // Make sure that the ELContext "resolved" indicator is set 
-            // in accordance wth the result of the resolution.
-            context.setPropertyResolved(result != null);
-        }
-        return result;
-    }
-
-    @Override
-    public Class<?> getType(ELContext context, Object base, Object property)
-        throws ELException {
-
-        Object result = getValue(context, base, property);
-        context.setPropertyResolved(result != null);
-        if (result != null) {
-            return result.getClass();
-        }
-        return null;
-    }
-
-    @Override
-    public void  setValue(ELContext context, Object base, Object property,
-                          Object val) throws ELException {
-    if (null == base && null == property) {
-        throw new PropertyNotFoundException();
-    }
-    }
-
-    @Override
-    public boolean isReadOnly(ELContext context, Object base, Object property)
-        throws ELException {
-        if (null == base && null == property) {
-        throw new PropertyNotFoundException();
-    }
-        return false;
-    }
-
-    @Override
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, 
-                                                             Object base) {
-        return null;
-    }
-
-    @Override
-    public Class<?> getCommonPropertyType(ELContext context, Object base) {
-        if ( base == null ) {
-            return String.class;
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/el/VariableResolverImpl.java b/jsf-ri/src/main/java/com/sun/faces/el/VariableResolverImpl.java
deleted file mode 100644
index 4a02aaa..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/el/VariableResolverImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.VariableResolver;
-import javax.el.ELException;
-
-import com.sun.faces.util.MessageUtils;
-
-/**
- * <p>
- * Concrete implementation of <code>VariableResolver</code>.
- * </p>
- */
- at SuppressWarnings("deprecation")
-public class VariableResolverImpl extends VariableResolver {
-
-    private VariableResolver delegate;
-
-    // ------------------------------------------- Methods from VariableResolver
-
-    // Specified by javax.faces.el.VariableResolver.resolveVariable()
-    public Object resolveVariable(FacesContext context, String name)
-            throws EvaluationException {
-
-        if (context == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-        if (name == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name");
-            throw new NullPointerException(message);
-        }
-
-        Object result;
-
-        if (delegate != null) {
-            result = delegate.resolveVariable(context, name);
-        } else {
-            try {
-                result = context.getApplication().getELResolver().getValue(context.getELContext(), null, name);
-            } catch (ELException elex) {
-                throw new EvaluationException(elex);
-            }
-        }
-        return result;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void setDelegate(VariableResolver delegate) {
-
-        this.delegate = delegate;
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/component/UIFocus.java b/jsf-ri/src/main/java/com/sun/faces/ext/component/UIFocus.java
deleted file mode 100644
index 78a218e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/component/UIFocus.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ext.component;
-
-import javax.faces.component.UIComponentBase;
-
-/**
- * Component to set a focus on a given field.
- * 
- * @author driscoll
- */
-public class UIFocus extends UIComponentBase {
-    
-    private static final String FAMILY = "FocusFamily";
-            
-    @Override
-    public String getFamily() {
-        return FAMILY;
-    }
-}  
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/render/FocusHTMLRenderer.java b/jsf-ri/src/main/java/com/sun/faces/ext/render/FocusHTMLRenderer.java
deleted file mode 100644
index 7d7b346..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/render/FocusHTMLRenderer.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ext.render;
-
-import java.io.IOException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.Renderer;
-
-/**
- * Renderer class that emits HTML and JavaScript to set the focus to a given field.
- * 
- * @author driscoll
- */
-public class FocusHTMLRenderer extends Renderer {
-    
-    
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
-        String forID = (String) component.getAttributes().get("for");
-        ResponseWriter writer = context.getResponseWriter();
-        // XXX - I'd still like to get the parentID, but need to add a check if it's a form or not...
-        //UIComponent parentComponent = component.getParent();
-        //String parentID = parentComponent.getClientId(context);
-        //String targetID = parentID+":"+forID;
-        String targetID = forID;
-        writer.startElement("script", component);
-        writer.writeAttribute("type", "text/javascript", null);
-        writer.writeText("setFocus('",null);
-        writer.writeText(targetID, null);
-        writer.writeText("');\n",null);
-        writer.writeText("function setFocus(elementId) { var element = " +
-                "document.getElementById(elementId); if (element && element.focus) " +
-                "{ element.focus(); } }",null);
-        writer.endElement("script");        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/taglib/CreditCardValidatorTag.java b/jsf-ri/src/main/java/com/sun/faces/ext/taglib/CreditCardValidatorTag.java
deleted file mode 100644
index 4cd05d2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/taglib/CreditCardValidatorTag.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.ext.taglib;
-
-import com.sun.faces.ext.validator.CreditCardValidator;
-import javax.faces.application.Application;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-import javax.faces.webapp.ValidatorELTag;
-
-
-/**
- * Tag for the Regular Expression Validator.
- * @author driscoll
- */
-public class CreditCardValidatorTag extends ValidatorELTag {
-
-    @Override
-    protected Validator createValidator() {
-        
-        Application app = FacesContext.getCurrentInstance().getApplication();
-        CreditCardValidator validator =
-                (CreditCardValidator) app.createValidator("com.sun.faces.ext.validator.CreditCardValidator");
-        return validator;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/taglib/FocusTag.java b/jsf-ri/src/main/java/com/sun/faces/ext/taglib/FocusTag.java
deleted file mode 100644
index 3a79bb9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/taglib/FocusTag.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ext.taglib;
-
-import javax.faces.webapp.UIComponentELTag;
-import javax.faces.component.UIComponent;
-import javax.el.ValueExpression;
-
-
-/**
- * Tag to set focus to a given field.  Uses a single attribute, for, which is
- * the id of the field which should receive the focus.
- * 
- * @author driscoll
- */
-public class FocusTag extends UIComponentELTag {
-    
-    private static final String COMPONENT_TYPE = "com.sun.faces.ext.focus";
-    private static final String RENDERER_TYPE = "com.sun.faces.ext.render.FocusHTMLRenderer";
-    
-    public ValueExpression forID = null;
-
-
-    // Associate the component type.
-    @Override
-    public String getComponentType() {
-        return COMPONENT_TYPE;
-    }
-    
-    
-    @Override
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-
-        // set forID
-        if (forID != null) {
-            if (!forID.isLiteralText()) {
-                component.setValueExpression("for", forID);
-            } else {
-                component.getAttributes().put("for", forID.getExpressionString());
-            }
-        }
-    }
-
-
-    // We'll render our own content
-    @Override
-    public String getRendererType() {
-        return RENDERER_TYPE;
-    }
-
-    @Override
-    public void release() {
-        super.release();
-        forID = null;
-    }
-
-    public void setFor(ValueExpression forID) {
-        this.forID = forID;
-    }
-    
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/validator/CreditCardValidator.java b/jsf-ri/src/main/java/com/sun/faces/ext/validator/CreditCardValidator.java
deleted file mode 100644
index bdeaba7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/validator/CreditCardValidator.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.ext.validator;
-
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.application.FacesMessage;
-import java.util.Locale;
-import java.io.Serializable;
-
-/**
- * A Validator that checks against a Regular Expression (which is the pattern 
- * property).  The pattern must resolve to a String that follows the java.util.regex
- * standards.  
- * @author driscoll
- */
-public class CreditCardValidator implements Validator, Serializable {
-
-    /**
-     * Validate a String against a regular expression pattern...  The full regex
-     * pattern must be matched in order to pass the validation.
-     * @param context Context of this request
-     * @param component The component wrapping this validator 
-     * @param obj A string which will be compared to the pattern property of this validator.  Must be a string.
-     */
-    public void validate(FacesContext context, UIComponent component, Object obj) {
-
-        FacesMessage fmsg;
-
-        Locale locale = context.getViewRoot().getLocale();
-
-        if (obj == null) {
-            return;
-        }
-        if (!(obj instanceof String)) {
-            fmsg = MojarraMessageFactory.getMessage(locale,
-                    "com.sun.faces.ext.validator.creditcardValidator.NOT_STRING",
-                    (Object) null);
-            throw new ValidatorException(fmsg);
-        }
-
-        String input = (String) obj;
-
-        if (!input.matches("^[0-9\\ \\-]*$")) {
-            fmsg = MojarraMessageFactory.getMessage(locale,
-                    "com.sun.faces.ext.validator.creditcardValidator.INVALID_CHARS",
-                    (Object) null);
-            throw new ValidatorException(fmsg);
-        }
-
-        if (!luhnCheck(stripNonDigit(input))) {
-            fmsg = MojarraMessageFactory.getMessage(locale,
-                    "com.sun.faces.ext.validator.creditcardValidator.INVALID_NUMBER",
-                    (Object) null);
-            throw new ValidatorException(fmsg);            
-        }
-    }
-
-    private String stripNonDigit(String s) {
-        return s.replaceAll(" ", "").replaceAll("-", "");
-    }
-
-    private boolean luhnCheck(String number) {
-        int sum = 0;
-
-        boolean timestwo = false;
-        for (int i = number.length() - 1; i >= 0; i--) {
-            int n = Integer.parseInt(number.substring(i, i + 1));
-            if (timestwo) {
-                n *= 2;
-                if (n > 9) {
-                    n = (n % 10) + 1;
-                }
-            }
-            sum += n;
-            timestwo = !timestwo;
-        }
-        return sum % 10 == 0;
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/validator/MojarraMessageFactory.java b/jsf-ri/src/main/java/com/sun/faces/ext/validator/MojarraMessageFactory.java
deleted file mode 100644
index fd438b1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/validator/MojarraMessageFactory.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.ext.validator;
-
-import javax.el.ValueExpression;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * 
- * <p>supported filters: <code>package</code> and
- * <code>protection</code>.</p>
- */
-class MojarraMessageFactory {
-
-    private MojarraMessageFactory() {
-    }
-
-    /**
-     * @see #getMessage(String, Object...)
-     * @param FacesMessage.Serverity set a custom severity
-     */
-    protected static FacesMessage getMessage(String messageId,
-            FacesMessage.Severity severity,
-            Object... params) {
-        FacesMessage message = getMessage(messageId, params);
-        message.setSeverity(severity);
-        return message;
-    }
-
-    /**
-     * @see #getMessage(Locale, String, Object...)
-     * @param FacesMessage.Serverity set a custom severity
-     */
-    protected static FacesMessage getMessage(Locale locale,
-            String messageId,
-            FacesMessage.Severity severity,
-            Object... params) {
-        FacesMessage message = getMessage(locale, messageId, params);
-        message.setSeverity(severity);
-        return message;
-    }
-
-    /**
-     * @see #getMessage(FacesContext, String, Object...)
-     * @param FacesMessage.Serverity set a custom severity
-     */
-    protected static FacesMessage getMessage(FacesContext context,
-            String messageId,
-            FacesMessage.Severity severity,
-            Object... params) {
-        FacesMessage message = getMessage(context, messageId, params);
-        message.setSeverity(severity);
-        return message;
-    }
-
-    /**
-     * <p>This version of getMessage() is used for localizing implementation
-     * specific messages.</p>
-     *
-     * @param messageId - the key of the message in the resource bundle
-     * @param params    - substittion parameters
-     *
-     * @return a localized <code>FacesMessage</code> with the severity
-     *  of FacesMessage.SEVERITY_ERROR
-     */
-    protected static FacesMessage getMessage(String messageId,
-            Object... params) {
-        Locale locale = null;
-        FacesContext context = FacesContext.getCurrentInstance();
-        // context.getViewRoot() may not have been initialized at this point.
-        if (context != null && context.getViewRoot() != null) {
-            locale = context.getViewRoot().getLocale();
-            if (locale == null) {
-                locale = Locale.getDefault();
-            }
-        } else {
-            locale = Locale.getDefault();
-        }
-
-        return getMessage(locale, messageId, params);
-    }
-
-    /**
-     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
-     *
-     * @param locale    - the target <code>Locale</code>
-     * @param messageId - the key of the message in the resource bundle
-     * @param params    - substittion parameters
-     *
-     * @return a localized <code>FacesMessage</code> with the severity
-     *  of FacesMessage.SEVERITY_ERROR
-     */
-    protected static FacesMessage getMessage(Locale locale,
-            String messageId,
-            Object... params) {
-        String summary = null;
-        String detail = null;
-        ResourceBundle bundle;
-        String bundleName;
-
-        // see if we have a user-provided bundle
-        if (null != (bundleName = getApplication().getMessageBundle())) {
-            if (null !=
-                    (bundle =
-                    ResourceBundle.getBundle(bundleName, locale,
-                    getCurrentLoader(bundleName)))) {
-                // see if we have a hit
-                try {
-                    summary = bundle.getString(messageId);
-                    detail = bundle.getString(messageId + "_detail");
-                } catch (MissingResourceException e) {
-                    // ignore
-                }
-            }
-        }
-
-        // we couldn't find a summary in the user-provided bundle
-        if (null == summary) {
-            // see if we have a summary in the app provided bundle
-            bundle = ResourceBundle.getBundle("com.sun.faces.ext.validator.mojarraMessages",
-                    locale,
-                    getCurrentLoader(bundleName));
-            if (null == bundle) {
-                throw new NullPointerException();
-            }
-            // see if we have a hit
-            try {
-                summary = bundle.getString(messageId);
-                // we couldn't find a summary anywhere!  Return null
-                if (null == summary) {
-                    return null;
-                }
-                detail = bundle.getString(messageId + "_detail");
-            } catch (MissingResourceException e) {
-                // ignore
-            }
-        }
-        // At this point, we have a summary and a bundle.     
-        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
-        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
-        return (ret);
-    }
-
-    /**
-     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
-     *
-     * @param context   - the <code>FacesContext</code> for the current request
-     * @param messageId - the key of the message in the resource bundle
-     * @param params    - substittion parameters
-     *
-     * @return a localized <code>FacesMessage</code> with the severity
-     *  of FacesMessage.SEVERITY_ERROR
-     */
-    protected static FacesMessage getMessage(FacesContext context,
-            String messageId,
-            Object... params) {
-
-        if (context == null || messageId == null) {
-            throw new NullPointerException(" context " + context + " messageId " + messageId);
-        }
-        Locale locale;
-        // viewRoot may not have been initialized at this point.
-        if (context.getViewRoot() != null) {
-            locale = context.getViewRoot().getLocale();
-        } else {
-            locale = Locale.getDefault();
-        }
-
-        if (null == locale) {
-            throw new NullPointerException(" locale is null ");
-        }
-
-        FacesMessage message = getMessage(locale, messageId, params);
-        if (message != null) {
-            return message;
-        }
-        locale = Locale.getDefault();
-        return (getMessage(locale, messageId, params));
-    }
-
-    /**
-     * <p>Returns the <code>label</code> property from the specified
-     * component.</p>
-     *
-     * @param context   - the <code>FacesContext</code> for the current request
-     * @param component - the component of interest
-     *
-     * @return the label, if any, of the component
-     */
-    protected static Object getLabel(FacesContext context,
-            UIComponent component) {
-
-        Object o = component.getAttributes().get("label");
-        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
-            o = component.getValueExpression("label");
-        }
-        // Use the "clientId" if there was no label specified.
-        if (o == null) {
-            o = component.getClientId(context);
-        }
-        return o;
-    }
-
-    protected static Application getApplication() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            return (FacesContext.getCurrentInstance().getApplication());
-        }
-        ApplicationFactory afactory = (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        return (afactory.getApplication());
-    }
-
-    protected static ClassLoader getCurrentLoader(Object fallbackClass) {
-        ClassLoader loader =
-                Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return loader;
-    }
-
-    /**
-     * This class overrides FacesMessage to provide the evaluation
-     * of binding expressions in addition to Strings.
-     * It is often the case, that a binding expression may reference
-     * a localized property value that would be used as a 
-     * substitution parameter in the message.  For example:
-     *  <code>#{bundle.userLabel}</code>
-     * "bundle" may not be available until the page is rendered.
-     * The "late" binding evaluation in <code>getSummary</code> and 
-     * <code>getDetail</code> allow the expression to be evaluated
-     * when that property is available.
-     */
-    static class BindingFacesMessage extends FacesMessage {
-
-        BindingFacesMessage(
-                Locale locale,
-                String messageFormat,
-                String detailMessageFormat,
-                // array of parameters, both Strings and ValueBindings
-                Object[] parameters) {
-
-            super(messageFormat, detailMessageFormat);
-            this.locale = locale;
-            this.parameters = parameters;
-            if (parameters != null) {
-                resolvedParameters = new Object[parameters.length];
-            }
-        }
-
-        @Override
-        public String getSummary() {
-            String pattern = super.getSummary();
-            resolveBindings();
-            return getFormattedString(pattern, resolvedParameters);
-        }
-
-        @Override
-        public String getDetail() {
-            String pattern = super.getDetail();
-            resolveBindings();
-            return getFormattedString(pattern, resolvedParameters);
-        }
-
-        private void resolveBindings() {
-            FacesContext context = null;
-            if (parameters != null) {
-                for (int i = 0; i < parameters.length; i++) {
-                    Object o = parameters[i];
-                    if (o instanceof ValueBinding) {
-                        if (context == null) {
-                            context = FacesContext.getCurrentInstance();
-                        }
-                        o = ((ValueBinding) o).getValue(context);
-                    }
-                    if (o instanceof ValueExpression) {
-                        if (context == null) {
-                            context = FacesContext.getCurrentInstance();
-                        }
-                        o = ((ValueExpression) o).getValue(context.getELContext());
-                    }
-                    // to avoid 'null' appearing in message
-                    if (o == null) {
-                        o = "";
-                    }
-                    resolvedParameters[i] = o;
-                }
-            }
-        }
-
-        private String getFormattedString(String msgtext, Object[] params) {
-            String localizedStr = null;
-
-            if (params == null || msgtext == null) {
-                return msgtext;
-            }
-            StringBuffer b = new StringBuffer(100);
-            MessageFormat mf = new MessageFormat(msgtext);
-            if (locale != null) {
-                mf.setLocale(locale);
-                b.append(mf.format(params));
-                localizedStr = b.toString();
-            }
-            return localizedStr;
-        }
-        private Locale locale;
-        private Object[] parameters;
-        private Object[] resolvedParameters;
-    }
-} // end of class MojarraMessageFactory
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/validator/mojarraMessages.properties b/jsf-ri/src/main/java/com/sun/faces/ext/validator/mojarraMessages.properties
deleted file mode 100644
index 95c52f4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/validator/mojarraMessages.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# comment
-
-com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET=Regex pattern must be set.
-com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
-com.sun.faces.ext.validator.regexValidator.NOT_STRING=Validator may only be set on String values.
-com.sun.faces.ext.validator.regexValidator.NOT_STRING_detail=Validator may only be set on String values.
-com.sun.faces.ext.validator.regexValidator.NOT_MATCHED=Regex Pattern not matched
-com.sun.faces.ext.validator.regexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
-com.sun.faces.ext.validator.regexValidator.EXP_ERROR=Error in regular expression.
-com.sun.faces.ext.validator.regexValidator.EXP_ERROR_detail=Error in regular expression, ''{0}''
-com.sun.faces.ext.validator.creditcardValidator.NOT_STRING=Only string values can be validated.
-com.sun.faces.ext.validator.creditcardValidator.NOT_STRING_detail=Only string values can be validated.
-com.sun.faces.ext.validator.creditcardValidator.INVALID_CHARS=Invalid characters in value.
-com.sun.faces.ext.validator.creditcardValidator.INVALID_CHARS_detail=Invalid characters in value - only numbers, spaces and dashes are allowed.
-com.sun.faces.ext.validator.creditcardValidator.INVALID_NUMBER=Not a valid credit card number.
-com.sun.faces.ext.validator.creditcardValidator.INVALID_NUMBER_detail=Not a valid credit card number.
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/ext/validator/mojarraMessages_en.properties b/jsf-ri/src/main/java/com/sun/faces/ext/validator/mojarraMessages_en.properties
deleted file mode 100644
index 4d02d73..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/ext/validator/mojarraMessages_en.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# comment
-
-com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET=Regex pattern must be set.
-com.sun.faces.ext.validator.regexValidator.PATTERN_NOT_SET_detail=Regex pattern must be set to non-empty value.
-com.sun.faces.ext.validator.regexValidator.NOT_STRING=Validator may only be set on String values.
-com.sun.faces.ext.validator.regexValidator.NOT_STRING_detail=Validator may only be set on String values.
-com.sun.faces.ext.validator.regexValidator.NOT_MATCHED=Regex Pattern not matched
-com.sun.faces.ext.validator.regexValidator.NOT_MATCHED_detail=Regex pattern of ''{0}'' not matched
-com.sun.faces.ext.validator.regexValidator.EXP_ERROR=Error in regular expression.
-com.sun.faces.ext.validator.regexValidator.EXP_ERROR_detail=Error in regular expression, ''{0}''
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/Facelet.java b/jsf-ri/src/main/java/com/sun/faces/facelets/Facelet.java
deleted file mode 100644
index bef3ec6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/Facelet.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletException;
-import java.io.IOException;
-
-/**
- * The parent or root object in a FaceletHandler composition. The Facelet will
- * take care of populating the passed UIComponent parent in relation to the
- * create/restore lifecycle of JSF.
- * 
- * @author Jacob Hookom
- */
-public abstract class Facelet {
-
-    /**
-     * The passed UIComponent parent will be populated/restored in accordance
-     * with the JSF 1.2 specification.
-     * 
-     * @param facesContext
-     *            The current FacesContext (Should be the same as
-     *            FacesContext.getInstance())
-     * @param parent
-     *            The UIComponent to populate in a compositional fashion. In
-     *            most cases a Facelet will be base a UIViewRoot.
-     * @throws IOException
-     * @throws FacesException
-     * @throws FaceletException
-     * @throws ELException
-     */
-    public abstract void apply(FacesContext facesContext, UIComponent parent)
-    throws IOException;
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletCache.java b/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletCache.java
deleted file mode 100644
index 0ba7ea6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletCache.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.io.IOException;
-
-import java.net.URL;
-
-
-public abstract class FaceletCache<V> {
-    
-    /**
-     * Factory interface for creating Facelets.
-     */
-    public interface InstanceFactory<V> {
-        public V newInstance(final URL key) throws IOException;
-    }
-    
-    /**
-     * Retrieves a cached Facelet
-     * @param url URL for the Facelet being retrieved
-     * @return cached Facelet instance, If no instance is available,
-     * it will be created using the Facelet InstanceFactory and stored in the cache
-     * @see getFaceletInstanceFactory
-     */
-    public abstract V getFacelet(URL url) throws IOException;
-
-    /**
-     * Determines whether a cached Facelet instance exists for this URL
-     * @param url URL for the Facelet
-     * @return true if a cached instance exists, false otherwise
-     */
-    public abstract boolean isFaceletCached(URL url);
-
-    /**
-     * Retrieves a cached Metadata Facelet
-     * @param url URL for the Metadata Facelet being retrieved
-     * @return cached Metadata Facelet instance, If no instance is available,
-     * it will be created using the Metadata Facelet InstanceFactory and stored in the cache
-     * @see getMetadataFaceletInstanceFactory
-     */
-    public abstract V getMetadataFacelet(URL url) throws IOException;
-
-    /**
-     * Determines whether a cached Metadata Facelet instance exists for this URL
-     * @param url URL for the Metadata Facelet
-     * @return true if a cached instance exists, false otherwise
-     */
-    public abstract boolean isMetadataFaceletCached(URL url);
-    
-    /**
-     * Initializes this cache instance.
-     * @param faceletFactory <code>InstanceFactory</code> for creating Facelet instances
-     * @param metafaceletFactory <code>InstanceFactory</code> for creating Metadata Facelet instances
-     */
-    public final void init(InstanceFactory<V> faceletFactory, InstanceFactory<V> metafaceletFactory) {
-        _faceletFactory = faceletFactory;
-        _metafaceletFactory = metafaceletFactory;
-    }
-    
-    /**
-     * Retrieves InstanceFactory for creating Facelets
-     * @return factory for creating Facelets
-     */
-    protected final InstanceFactory<V> getFaceletInstanceFactory() {
-        return _faceletFactory;
-    }
-    
-    /**
-     * Retrieves InstanceFactory for creating Metadata Facelets
-     * @return factory for creating MetadataFacelets
-     */
-    protected final InstanceFactory<V> getMetadataFaceletInstanceFactory() {
-        return _metafaceletFactory;
-    }
-
-    private InstanceFactory<V> _faceletFactory;
-    private InstanceFactory<V> _metafaceletFactory;
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletContextImplBase.java b/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletContextImplBase.java
deleted file mode 100644
index fb005ae..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletContextImplBase.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletException;
-import java.io.IOException;
-
-/**
- *
- * @author edburns
- */
-public abstract class FaceletContextImplBase extends FaceletContext {
-    
-    /**
-     * Push the passed TemplateClient onto the stack for Definition Resolution
-     * @param client
-     * @see TemplateClient
-     */
-    public abstract void pushClient(TemplateClient client);
-    
-    /**
-     * Pop the last added TemplateClient
-     * @see TemplateClient
-     */
-    public abstract void popClient(TemplateClient client);
-    
-    
-    public abstract void extendClient(TemplateClient client);
-    
-    /**
-     * This method will walk through the TemplateClient stack to resolve and
-     * apply the definition for the passed name.
-     * If it's been resolved and applied, this method will return true.
-     * 
-     * @param parent the UIComponent to apply to
-     * @param name name or null of the definition you want to apply
-     * @return true if successfully applied, otherwise false
-     * @throws IOException
-     * @throws FaceletException
-     * @throws FacesException
-     * @throws ELException
-     */
-    public abstract boolean includeDefinition(UIComponent parent, String name) throws IOException, FaceletException, FacesException, ELException ;
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletFactory.java b/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletFactory.java
deleted file mode 100644
index ea71bf5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/FaceletFactory.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.view.facelets.FaceletException;
-import javax.faces.view.facelets.ResourceResolver;
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * FaceletFactory for producing Facelets relative to the context of the
- * underlying implementation.
- * 
- * @author Jacob Hookom
- */
-public abstract class FaceletFactory {
-
-    private static ThreadLocal<FaceletFactory> INSTANCE =
-          new ThreadLocal<FaceletFactory>();
-
-    /**
-     * Return a Facelet instance as specified by the file at the passed URI.
-     * 
-     * @param uri
-     * @return
-     * @throws IOException
-     * @throws FaceletException
-     * @throws FacesException
-     * @throws ELException
-     */
-    public abstract Facelet getFacelet(String uri) throws IOException;
-    
-    public abstract Facelet getFacelet(URL url) throws IOException;
-
-    public abstract Facelet getMetadataFacelet(String uri) throws IOException;
-
-    public abstract Facelet getMetadataFacelet(URL url) throws IOException;
-
-    public abstract ResourceResolver getResourceResolver();
-
-    public abstract long getRefreshPeriod();
-
-    /**
-     * NOT CURRENTLY USED.  However, this class may be moved to the API and
-     * the TL lookup may end up being the preferred way to get a hold of this
-     * instance.
-     *
-     * Set the static instance
-     * 
-     * @param factory
-     */
-    public static void setInstance(FaceletFactory factory) {
-        if (factory == null) {
-            INSTANCE.remove();
-        } else {
-            INSTANCE.set(factory);
-        }
-    }
-
-    /**
-     * NOT CURRENTLY USED.  However, this class may be moved to the API and
-     * the TL lookup may end up being the preferred way to get a hold of this
-     * instance.
-     * 
-     * @return
-     */
-    public static FaceletFactory getInstance() {
-        return INSTANCE.get();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/StateWriter.java b/jsf-ri/src/main/java/com/sun/faces/facelets/StateWriter.java
deleted file mode 100644
index 83f0159..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/StateWriter.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets;
-
-import com.sun.faces.facelets.util.FastWriter;
-
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * A class for handling state insertion.  Content is written
- * directly to "out" until an attempt to write state;  at that
- * point, it's redirected into a buffer that can be picked through
- * in theory, this buffer should be very small, since it only
- * needs to be enough to contain all the content after the close
- * of the first (and, hopefully, only) form.
- * <p>
- * Potential optimizations:
- * <ul>
- * <li>If we created a new FastWriter at each call to writingState(),
- * and stored a List of them, then we'd know that state tokens could
- * only possibly be near the start of each buffer (and might not be there
- * at all).  (There might be a close-element before the state token). Then,
- * we'd only need to check the start of the buffer for the state token;
- * if it's there, write out the real state, then blast the rest of the
- * buffer out.  This wouldn't even require toString(), which for
- * large buffers is expensive.  However, this optimization is only
- * going to be especially meaningful for the multi-form case.
- * </li>
- * <li>More of a FastWriter optimization than a StateWriter, but:
- *  it is far faster to create a set of small 1K buffers than constantly
- *  reallocating one big buffer.</li>
- * </ul>
- *
- * @author Adam Winer
- */
-final class StateWriter extends Writer {
-
-    private int initialSize;
-    private Writer out;
-    private FastWriter fast;
-    private boolean writtenState;
-    
-    static public StateWriter getCurrentInstance() {
-        return (StateWriter) CURRENT_WRITER.get();
-    }
-
-    public StateWriter(Writer initialOut, int initialSize) {
-        if (initialSize < 0) {
-            throw new IllegalArgumentException("Initial Size cannot be less than 0");
-        }
-        
-        this.initialSize = initialSize;
-        this.out = initialOut;
-
-        CURRENT_WRITER.set(this);
-    }
-
-    /**
-     * Mark that state is about to be written.  Contrary to what you'd expect,
-     * we cannot and should not assume that this location is really going
-     * to have state;  it is perfectly legit to have a ResponseWriter that
-     * filters out content, and ignores an attempt to write out state
-     * at this point.  So, we have to check after the fact to see
-     * if there really are state markers.
-     */
-    public void writingState() {
-        if (!this.writtenState) {
-            this.writtenState = true;
-            this.out = this.fast = new FastWriter(this.initialSize);
-        }
-    }
-
-    public boolean isStateWritten() {
-        return this.writtenState;
-    }
-
-    public void close() throws IOException {
-        // do nothing
-    }
-
-    public void flush() throws IOException {
-        // do nothing
-    }
-    
-    public void write(char[] cbuf, int off, int len) throws IOException {
-        this.out.write(cbuf, off, len);
-    }
-
-    public void write(char[] cbuf) throws IOException {
-        this.out.write(cbuf);
-    }
-
-    public void write(int c) throws IOException {
-        this.out.write(c);
-    }
-
-    public void write(String str, int off, int len) throws IOException {
-        this.out.write(str, off, len);
-    }
-
-    public void write(String str) throws IOException {
-        this.out.write(str);
-    }
-    
-    public String getAndResetBuffer() {
-        if (!this.writtenState) {
-            throw new IllegalStateException(
-                     "Did not write state;  no buffer is available");
-        }
-
-        String result = this.fast.toString();
-        this.fast.reset();
-        return result;
-    }
-  
-    public void release() {
-        CURRENT_WRITER.set(null);
-    }
-
-    static private final ThreadLocal CURRENT_WRITER = new ThreadLocal();
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/TemplateClient.java b/jsf-ri/src/main/java/com/sun/faces/facelets/TemplateClient.java
deleted file mode 100644
index 94d98dc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/TemplateClient.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletException;
-import java.io.IOException;
-
-/**
- * FaceletHandlers can implement this contract and push themselves into the
- * FaceletContext for participating in templating. Templates will attempt to
- * resolve content for a specified name until one of the TemplatClients return
- * 'true'.
- * 
- * @author Jacob Hookom
- */
-public interface TemplateClient {
-
-    /**
-     * This contract is much like the normal FaceletHandler.apply method, but it
-     * takes in an optional String name which tells this instance what
-     * fragment/definition it's looking for. If you are a match, apply your
-     * logic to the passed UIComponent and return true, otherwise do nothing and
-     * return false.
-     * 
-     * @param ctx
-     *            the FaceletContext of <i>your</i> instance, not the
-     *            templates'
-     * @param parent
-     *            current UIComponent instance to be applied
-     * @param name
-     *            the String name or null if the whole body should be included
-     * @return true if this client matched/applied the definition for the passed
-     *         name
-     * @throws IOException
-     * @throws FacesException
-     * @throws FaceletException
-     * @throws ELException
-     */
-    public boolean apply(FaceletContext ctx, UIComponent parent, String name)
-            throws IOException;
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/AbstractUIHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/AbstractUIHandler.java
deleted file mode 100644
index e621a65..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/AbstractUIHandler.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletHandler;
-import javax.faces.view.facelets.TextHandler;
-
-public abstract class AbstractUIHandler implements FaceletHandler, TextHandler {
-
-    public void addComponent(FaceletContext ctx,
-                             UIComponent parent,
-                             UIComponent c) {
-        ComponentSupport.addComponent(ctx, parent, c);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/AttributeInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/AttributeInstruction.java
deleted file mode 100644
index 3a93c58..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/AttributeInstruction.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-
-import com.sun.faces.facelets.el.ELText;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-
-final class AttributeInstruction implements Instruction {
-    private final String alias;
-
-    private final String attr;
-
-    private final ELText txt;
-    
-
-    public AttributeInstruction(String alias, String attr, ELText txt) {
-        this.alias = alias;
-        this.attr  = attr;
-        this.txt   = txt;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        ResponseWriter out = context.getResponseWriter();
-        try {
-            ELContext elContext = context.getELContext();
-            String val = txt.toString(elContext);
-            if (val != null && val.length() != 0) {
-                out.writeAttribute(attr, val, null);
-            }
-        } catch (ELException e) {
-            throw new ELException(this.alias + ": " + e.getMessage(), e.getCause());
-        } catch (Exception e) {
-            throw new ELException(this.alias + ": " + e.getMessage(), e);
-        }
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        ELText nt = this.txt.apply(factory, ctx);
-        if (nt == this.txt) {
-            return this;
-        }
-
-        return new AttributeInstruction(alias, attr, nt);
-    }
-
-    public boolean isLiteral() {
-        return txt.isLiteral();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CommentInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CommentInstruction.java
deleted file mode 100644
index 6d59456..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CommentInstruction.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.ELText;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-final class CommentInstruction implements Instruction {
-    private final ELText text;
-
-    public CommentInstruction(ELText text) {
-        this.text = text;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        ELContext elContext = context.getELContext();
-        context.getResponseWriter().writeComment(this.text.toString(elContext));
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        ELText t = this.text.apply(factory, ctx);
-        return new CommentInstruction(t);
-    }
-
-    public boolean isLiteral() {
-        return false;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationManager.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationManager.java
deleted file mode 100644
index 456b5ef..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationManager.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.TagAttributesImpl;
-import com.sun.faces.facelets.tag.TagLibrary;
-import com.sun.faces.facelets.tag.composite.CompositeLibrary;
-import com.sun.faces.facelets.tag.composite.ImplementationHandler;
-import com.sun.faces.facelets.tag.composite.InterfaceHandler;
-import com.sun.faces.facelets.tag.ui.ComponentRefHandler;
-import com.sun.faces.facelets.tag.ui.CompositionHandler;
-import com.sun.faces.facelets.tag.ui.UILibrary;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.view.facelets.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Stack;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Compilation unit for managing the creation of a single FaceletHandler based
- * on events from an XML parser.
- * 
- * @see {@link com.sun.faces.facelets.compiler.Compiler}
- * 
- * @author Jacob Hookom
- */
-final class CompilationManager {
-
-    private final static Logger log = FacesLogger.FACELETS_COMPILER.getLogger();
-
-    private final Compiler compiler;
-
-    private final TagLibrary tagLibrary;
-
-    private final TagDecorator tagDecorator;
-
-    private final NamespaceManager namespaceManager;
-
-    private final Stack<CompilationUnit> units;
-
-    private int tagId;
-
-    private boolean finished;
-    
-    private final String alias;
-    
-    private CompilationMessageHolder messageHolder = null;
-    
-    public CompilationManager(String alias, Compiler compiler) {
-        
-        // this is our alias
-        this.alias = alias;
-
-        // grab compiler state
-        this.compiler = compiler;
-        this.tagDecorator = compiler.createTagDecorator();
-        this.tagLibrary = compiler.createTagLibrary(this.getCompilationMessageHolder());
-
-        // namespace management
-        this.namespaceManager = new NamespaceManager();
-
-        // tag uids
-        this.tagId = 0;
-
-        // for composition use
-        this.finished = false;
-
-        // our compilationunit stack
-        this.units = new Stack<CompilationUnit>();
-        this.units.push(new CompilationUnit());
-        
-    }
-    
-    private InterfaceUnit interfaceUnit;
-    private InterfaceUnit getInterfaceUnit() {
-        return interfaceUnit;
-    }
-    
-    public CompilationMessageHolder getCompilationMessageHolder() {
-        if (null == messageHolder) {
-            messageHolder = new CompilationMessageHolderImpl();
-        }
-        return messageHolder;
-    }
-    
-    public void setCompilationMessageHolder(CompilationMessageHolder messageHolder) {
-        this.messageHolder = messageHolder;
-    }
-
-    private void setInterfaceUnit(InterfaceUnit interfaceUnit) {
-        this.interfaceUnit = interfaceUnit;
-    }
-    
-    public void writeInstruction(String value) {
-        if (this.finished) {
-            return;
-        }
-
-        // don't carelessly add empty tags
-        if (value.length() == 0) {
-            return;
-        }
-
-        TextUnit unit;
-        if (this.currentUnit() instanceof TextUnit) {
-            unit = (TextUnit) this.currentUnit();
-        } else {
-            unit = new TextUnit(this.alias, this.nextTagId());
-            this.startUnit(unit);
-        }
-        unit.writeInstruction(value);
-    }
-
-    public void writeText(String value) {
-
-        if (this.finished) {
-            return;
-        }
-
-        // don't carelessly add empty tags
-        if (value.length() == 0) {
-            return;
-        }
-
-        TextUnit unit;
-        if (this.currentUnit() instanceof TextUnit) {
-            unit = (TextUnit) this.currentUnit();
-        } else {
-            unit = new TextUnit(this.alias, this.nextTagId());
-            this.startUnit(unit);
-        }
-        unit.write(value);
-    }
-
-    public void writeComment(String text) {
-        if (this.compiler.isTrimmingComments())
-            return; 
-
-        if (this.finished) {
-            return;
-        }
-          
-        // don't carelessly add empty tags
-        if (text.length() == 0) {
-            return;
-        }
-          
-        TextUnit unit;
-        if (this.currentUnit() instanceof TextUnit) {
-            unit = (TextUnit) this.currentUnit();
-        } else {
-            unit = new TextUnit(this.alias, this.nextTagId());
-            this.startUnit(unit);
-        }
-          
-        unit.writeComment(text);
-    }
-
-    public void writeWhitespace(String text) {
-        if (!this.compiler.isTrimmingWhitespace()) {
-            this.writeText(text);
-        }
-    }
-
-    private String nextTagId() {
-        return Integer.toHexString(Math.abs(this.alias.hashCode() ^ 13 * this.tagId++));
-    }
-
-    public void pushTag(Tag orig) {
-
-        if (this.finished) {
-            return;
-        }
-
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Tag Pushed: " + orig);
-        }
-
-        Tag t = this.tagDecorator.decorate(orig);
-        String[] qname = this.determineQName(t);
-        t = this.trimAttributes(t);
-
-        boolean handled = false;
-
-        if (isTrimmed(qname[0], qname[1])) {
-        	if (log.isLoggable(Level.FINE)) {
-        		log.fine("Composition Found, Popping Parent Tags");
-        	}
-            this.units.clear();
-            NamespaceUnit nsUnit = this.namespaceManager
-                    .toNamespaceUnit(this.tagLibrary);
-            this.units.push(nsUnit);
-            this.startUnit(new TrimmedTagUnit(this.tagLibrary, qname[0], qname[1], t, this
-                    .nextTagId()));
-            if (log.isLoggable(Level.FINE)) {
-            	log.fine("New Namespace and [Trimmed] TagUnit pushed");
-            }
-        } else if (isImplementation(qname[0], qname[1])) {
-        	if (log.isLoggable(Level.FINE)) {
-        		log.fine("Composite Component Implementation Found, Popping Parent Tags");
-        	}
-
-            // save aside the InterfaceUnit
-            InterfaceUnit iface = getInterfaceUnit();
-            if (null == iface) {
-                throw new TagException(orig, "Unable to find interface for implementation.");
-            }
-
-            // Cleare the parent tags
-            this.units.clear();
-            NamespaceUnit nsUnit = this.namespaceManager
-                    .toNamespaceUnit(this.tagLibrary);
-            this.units.push(nsUnit);
-            this.currentUnit().addChild(iface);
-            this.startUnit(new ImplementationUnit(this.tagLibrary, qname[0], qname[1], t, this
-                    .nextTagId()));
-            if (log.isLoggable(Level.FINE)) {
-            	log.fine("New Namespace and ImplementationUnit pushed");
-            }
-            
-        } else if (isRemove(qname[0], qname[1])) {
-            this.units.push(new RemoveUnit());
-        } else if (this.tagLibrary.containsTagHandler(qname[0], qname[1])) {
-            if (isInterface(qname[0], qname[1])) {
-                InterfaceUnit iface = new InterfaceUnit(this.tagLibrary, qname[0], qname[1], t, this.nextTagId());
-                setInterfaceUnit(iface);
-                this.startUnit(iface);
-            } else {
-                this.startUnit(new TagUnit(this.tagLibrary, qname[0], qname[1], t, this.nextTagId()));
-            }
-        } else if (this.tagLibrary.containsNamespace(qname[0], t)) {
-            throw new TagException(orig, "Tag Library supports namespace: "+qname[0]+", but no tag was defined for name: "+qname[1]);
-        } else {
-            TextUnit unit;
-            if (this.currentUnit() instanceof TextUnit) {
-                unit = (TextUnit) this.currentUnit();
-            } else {
-                unit = new TextUnit(this.alias, this.nextTagId());
-                this.startUnit(unit);
-            }
-            unit.startTag(t);
-        }
-    }
-
-    public void popTag() {
-
-        if (this.finished) {
-            return;
-        }
-
-        CompilationUnit unit = this.currentUnit();
-
-        if (unit instanceof TextUnit) {
-            TextUnit t = (TextUnit) unit;
-            if (t.isClosed()) {
-                this.finishUnit();
-            } else {
-                t.endTag();
-                return;
-            }
-        }
-
-        unit = this.currentUnit();
-        if (unit instanceof TagUnit) {
-            TagUnit t = (TagUnit) unit;
-            if (t instanceof TrimmedTagUnit) {
-                this.finished = true;
-                return;
-            }
-        }
-
-        this.finishUnit();
-    }
-
-    public void popNamespace(String ns) {
-        this.namespaceManager.popNamespace(ns);
-        if (this.currentUnit() instanceof NamespaceUnit) {
-            this.finishUnit();
-        }
-    }
-
-
-    public void pushNamespace(String prefix, String uri) {
-
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Namespace Pushed " + prefix + ": " + uri);
-        }
-
-        this.namespaceManager.pushNamespace(prefix, uri);
-        NamespaceUnit unit;
-        if (this.currentUnit() instanceof NamespaceUnit) {
-            unit = (NamespaceUnit) this.currentUnit();
-        } else {
-            unit = new NamespaceUnit(this.tagLibrary);
-            this.startUnit(unit);
-        }
-        unit.setNamespace(prefix, uri);
-    }
-
-    public FaceletHandler createFaceletHandler() {
-        return ((CompilationUnit) this.units.get(0)).createFaceletHandler();
-    }
-
-    private CompilationUnit currentUnit() {
-        if (!this.units.isEmpty()) {
-            return (CompilationUnit) this.units.peek();
-        }
-        return null;
-    }
-
-    private void finishUnit() {
-        CompilationUnit unit = this.units.pop();
-        unit.finishNotify(this);
-
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Finished Unit: " + unit);
-        }
-    }
-
-    private CompilationUnit searchUnits(Class type) {
-        CompilationUnit unit = null;
-        int i = this.units.size();
-        while (unit == null && --i >= 0) {
-            if (type.isAssignableFrom(this.units.get(i).getClass())) {
-                unit = (CompilationUnit) this.units.get(i);
-            }
-        }
-        return unit;
-    }
-
-    private void startUnit(CompilationUnit unit) {
-
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Starting Unit: " + unit + " and adding it to parent: "
-                    + this.currentUnit());
-        }
-
-        this.currentUnit().addChild(unit);
-        this.units.push(unit);
-        unit.startNotify(this);
-    }
-
-    private Tag trimAttributes(Tag tag) {
-        Tag t = this.trimJSFCAttribute(tag);
-        t = this.trimNSAttributes(t);
-        return t;
-    }
-
-    protected static boolean isRemove(String ns, String name) {
-        return UILibrary.Namespace.equals(ns)
-                && "remove".equals(name);
-    }
-
-    // edburns: This is the magic line that tells the system to trim out the 
-    // extra content above and below the tag.
-    protected static boolean isTrimmed(String ns, String name) {
-        boolean matchInUILibrary = UILibrary.Namespace.equals(ns) && 
-                (CompositionHandler.Name.equals(name) || 
-                ComponentRefHandler.Name.equals(name));
-        return matchInUILibrary;
-    }
-
-    protected static boolean isImplementation(String ns, String name) {
-        boolean matchInCompositeLibrary = CompositeLibrary.Namespace.equals(ns) && 
-                (ImplementationHandler.Name.equals(name));
-        return matchInCompositeLibrary;
-    }
-
-    protected static boolean isInterface(String ns, String name) {
-        boolean matchInCompositeLibrary = CompositeLibrary.Namespace.equals(ns) && 
-                (InterfaceHandler.Name.equals(name));
-        return matchInCompositeLibrary;
-    }
-
-    private String[] determineQName(Tag tag) {
-        TagAttribute attr = tag.getAttributes().get("jsfc");
-        if (attr != null) {
-            if (log.isLoggable(Level.FINE)) {
-                log.fine(attr + " JSF Facelet Compile Directive Found");
-            }
-            String value = attr.getValue();
-            String namespace, localName;
-            int c = value.indexOf(':');
-            if (c == -1) {
-                namespace = this.namespaceManager.getNamespace("");
-                localName = value;
-            } else {
-                String prefix = value.substring(0, c);
-                namespace = this.namespaceManager.getNamespace(prefix);
-                if (namespace == null) {
-                    throw new TagAttributeException(tag, attr,
-                            "No Namespace matched for: " + prefix);
-                }
-                localName = value.substring(c + 1);
-            }
-            return new String[] { namespace, localName };
-        } else {
-            return new String[] { tag.getNamespace(), tag.getLocalName() };
-        }
-    }
-
-    private Tag trimJSFCAttribute(Tag tag) {
-        TagAttribute attr = tag.getAttributes().get("jsfc");
-        if (attr != null) {
-            TagAttribute[] oa = tag.getAttributes().getAll();
-            TagAttribute[] na = new TagAttribute[oa.length - 1];
-            int p = 0;
-            for (int i = 0; i < oa.length; i++) {
-                if (!"jsfc".equals(oa[i].getLocalName())) {
-                    na[p++] = oa[i];
-                }
-            }
-            return new Tag(tag, new TagAttributesImpl(na));
-        }
-        return tag;
-    }
-
-    private Tag trimNSAttributes(Tag tag) {
-        TagAttribute[] attr = tag.getAttributes().getAll();
-        int remove = 0;
-        for (int i = 0; i < attr.length; i++) {
-            if (attr[i].getQName().startsWith("xmlns")
-                    && this.tagLibrary.containsNamespace(attr[i].getValue(), null)) {
-                remove |= 1 << i;
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine(attr[i] + " Namespace Bound to TagLibrary");
-                }
-            }
-        }
-        if (remove == 0) {
-            return tag;
-        } else {
-            List attrList = new ArrayList(attr.length);
-            int p = 0;
-            for (int i = 0; i < attr.length; i++) {
-                p = 1 << i;
-                if ((p & remove) == p) {
-                    continue;
-                }
-                attrList.add(attr[i]);
-            }
-            attr = (TagAttribute[]) attrList.toArray(new TagAttribute[attrList
-                    .size()]);
-            return new Tag(tag.getLocation(), tag.getNamespace(), tag
-                    .getLocalName(), tag.getQName(), new TagAttributesImpl(attr));
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationMessageHolder.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationMessageHolder.java
deleted file mode 100644
index 3db8278..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationMessageHolder.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import java.util.List;
-
-/*
- * The CompilationManager vends one of these
- * to store compilation messages for later use.  During page compilation,
- * if any messages need to be shown to the user, they will be 
- * added using this interface.  If, during page execution, 
- * the messages turn out not to be needed, as is the case with
- * a foreign xml element nested within a <composite:extension> element,
- * this interface can be used to remove the messages.
- * 
- * Currently the messages are keyed by namespace prefix.
- * 
- * The EncodingHandler class is always the outermost FaceletHandler in any 
- * Facelet compilation unit.  Therefore, this handler is used
- * to anchor the implementation of the CompilationMessageHolder so
- * other tags can access it.  See EncodingHandler for how to do it.
- * 
- */
-public interface CompilationMessageHolder {
-    
-    public List<FacesMessage> getNamespacePrefixMessages(FacesContext context, String prefix);
-    
-    public void removeNamespacePrefixMessages(String prefix);
-    
-    public void processCompilationMessages(FacesContext context);
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationMessageHolderImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationMessageHolderImpl.java
deleted file mode 100644
index 306635f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationMessageHolderImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import java.util.*;
-
-/**
- *
- * @author edburns
- */
-public class CompilationMessageHolderImpl implements CompilerPackageCompilationMessageHolder {
-    
-    private Map<String, List<FacesMessage>> messageListMap;
-    private CompilationManager compilationManager;
-
-
-    private Map<String, List<FacesMessage>> getMessageListMap() {
-        if (null == messageListMap) {
-            messageListMap = new HashMap<String, List<FacesMessage>>();
-        }
-        return messageListMap;
-    }
-    
-    public List<FacesMessage> getNamespacePrefixMessages(FacesContext context,
-            String prefix) {
-        List<FacesMessage> result = null;
-        Map<String, List<FacesMessage>> map = getMessageListMap();
-        if (null == (result = map.get(prefix))) {
-            result = new ArrayList<FacesMessage>();
-            map.put(prefix, result);
-        }
-        
-        return result;
-    }
-
-    public void processCompilationMessages(FacesContext context) {
-        Map<String, List<FacesMessage>> map = getMessageListMap();
-        Collection<List<FacesMessage>> values = map.values();
-        for (List<FacesMessage> curList : values) {
-            for (FacesMessage curMessage : curList) {
-                context.addMessage(null, curMessage);
-            }
-        }
-    }
-
-    public void removeNamespacePrefixMessages(String prefix) {
-        Map<String, List<FacesMessage>> map = getMessageListMap();
-        map.remove(prefix);
-    }
-
-    public CompilationManager getCurrentCompositeComponentCompilationManager() {
-        return compilationManager;
-    }
-
-    public void setCurrentCompositeComponentCompilationManager(CompilationManager manager) {
-        this.compilationManager = manager;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationUnit.java
deleted file mode 100644
index c386979..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilationUnit.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.CompositeFaceletHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletHandler;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: CompilationUnit.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-class CompilationUnit {
-
-    protected final static FaceletHandler LEAF = new FaceletHandler() {
-        public void apply(FaceletContext ctx, UIComponent parent)
-                throws IOException {
-        }
-        public String toString() {
-            return "FaceletHandler Tail";
-        }
-    };
-
-    private List children;
-
-    public CompilationUnit() {
-    }
-
-    protected void startNotify(CompilationManager manager) {
-
-    }
-
-    protected void finishNotify(CompilationManager manager) {
-        
-    }
-
-    public void addChild(CompilationUnit unit) {
-        if (this.children == null) {
-            this.children = new ArrayList();
-        }
-        this.children.add(unit);
-    }
-
-    public FaceletHandler createFaceletHandler() {
-        return this.getNextFaceletHandler();
-    }
-
-    protected final FaceletHandler getNextFaceletHandler() {
-        if (this.children == null || this.children.size() == 0) {
-            return LEAF;
-        }
-        if (this.children.size() == 1) {
-            CompilationUnit u = (CompilationUnit) this.children.get(0);
-            return u.createFaceletHandler();
-        }
-        FaceletHandler[] fh = new FaceletHandler[this.children.size()];
-        for (int i = 0; i < fh.length; i++) {
-            fh[i] = ((CompilationUnit) this.children.get(i))
-                    .createFaceletHandler();
-        }
-        return new CompositeFaceletHandler(fh);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/Compiler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/Compiler.java
deleted file mode 100644
index 720992a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/Compiler.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.CompositeTagDecorator;
-import com.sun.faces.facelets.tag.CompositeTagLibrary;
-import com.sun.faces.facelets.tag.TagLibrary;
-import com.sun.faces.facelets.util.ReflectionUtil;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletException;
-import javax.faces.view.facelets.FaceletHandler;
-import javax.faces.view.facelets.TagDecorator;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A Compiler instance may handle compiling multiple sources
- * 
- * @author Jacob Hookom
- * @version $Id: Compiler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public abstract class Compiler {
-
-    protected final static Logger log = FacesLogger.FACELETS_COMPILER.getLogger();
-
-    public final static String EXPRESSION_FACTORY = "compiler.ExpressionFactory";
-
-    private static final TagLibrary EMPTY_LIBRARY = new CompositeTagLibrary(
-            new TagLibrary[0]);
-
-    private static final TagDecorator EMPTY_DECORATOR = new CompositeTagDecorator(
-            new TagDecorator[0]);
-
-    private boolean validating = false;
-
-    private boolean trimmingWhitespace = false;
-
-    private boolean trimmingComments = false;
-
-    private final List libraries = new ArrayList();
-
-    private final List decorators = new ArrayList();
-
-    private final Map features = new HashMap();
-
-
-    /**
-     * 
-     */
-    public Compiler() {
-        
-    }
-
-    public final FaceletHandler compile(URL src, String alias)
-    throws IOException {
-        //if (!this.initialized)
-        //    this.initialize();
-        return this.doCompile(src, alias);
-    }
-
-    public final FaceletHandler metadataCompile(URL src, String alias)
-    throws IOException {
-
-        return this.doMetadataCompile(src, alias);
-    }
-
-    protected abstract FaceletHandler doMetadataCompile(URL src, String alias)
-    throws IOException;
-
-    protected abstract FaceletHandler doCompile(URL src, String alias)
-    throws IOException;
-
-    public final TagDecorator createTagDecorator() {
-        if (this.decorators.size() > 0) {
-            return new CompositeTagDecorator((TagDecorator[]) this.decorators
-                    .toArray(new TagDecorator[this.decorators.size()]));
-        }
-        return EMPTY_DECORATOR;
-    }
-
-    public final void addTagDecorator(TagDecorator decorator) {
-        Util.notNull("decorator", decorator);
-        if (!this.decorators.contains(decorator)) {
-            this.decorators.add(decorator);
-        }
-    }
-
-    public final ExpressionFactory createExpressionFactory() {
-        ExpressionFactory el = null;
-        el = (ExpressionFactory) this.featureInstance(EXPRESSION_FACTORY);
-        if (el == null) {
-            try {
-                el = FacesContext.getCurrentInstance().getApplication()
-                        .getExpressionFactory();
-                if (el == null) {
-                	if (log.isLoggable(Level.WARNING)) {
-	                    log.warning("No default ExpressionFactory from Faces Implementation, attempting to load from Feature["
-	                                + EXPRESSION_FACTORY + "]");
-                	}
-                }
-            } catch (Exception e) {
-                // do nothing
-            }
-        }
-        if (el == null) {
-            this.features.put(EXPRESSION_FACTORY, "com.sun.el.ExpressionFactoryImpl");
-            el = (ExpressionFactory) this.featureInstance(EXPRESSION_FACTORY);
-        }
-        return el;
-    }
-
-    private final Object featureInstance(String name) {
-        String type = (String) this.features.get(name);
-        if (type != null) {
-            try {
-                return ReflectionUtil.forName(type).newInstance();
-            } catch (Throwable t) {
-                throw new FaceletException("Could not instantiate feature["
-                        + name + "]: " + type);
-            }
-        }
-        return null;
-    }
-
-    public final TagLibrary createTagLibrary(CompilationMessageHolder unit) {
-        if (this.libraries.size() > 0) {
-            return new CompositeTagLibrary((TagLibrary[]) this.libraries
-                    .toArray(new TagLibrary[this.libraries.size()]), unit);
-        }
-        return EMPTY_LIBRARY;
-    }
-
-    public final void addTagLibrary(TagLibrary library) {
-        Util.notNull("library", library);
-        if (!this.libraries.contains(library)) {
-            this.libraries.add(library);
-        }
-    }
-
-    public final void setFeature(String name, String value) {
-        this.features.put(name, value);
-    }
-
-    public final String getFeature(String name) {
-        return (String) this.features.get(name);
-    }
-
-    public final boolean isTrimmingComments() {
-        return this.trimmingComments;
-    }
-
-    public final void setTrimmingComments(boolean trimmingComments) {
-        this.trimmingComments = trimmingComments;
-    }
-
-    public final boolean isTrimmingWhitespace() {
-        return this.trimmingWhitespace;
-    }
-
-    public final void setTrimmingWhitespace(boolean trimmingWhitespace) {
-        this.trimmingWhitespace = trimmingWhitespace;
-    }
-
-    public final boolean isValidating() {
-        return this.validating;
-    }
-
-    public final void setValidating(boolean validating) {
-        this.validating = validating;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilerPackageCompilationMessageHolder.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilerPackageCompilationMessageHolder.java
deleted file mode 100644
index 7f87e63..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/CompilerPackageCompilationMessageHolder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.compiler;
-
-interface CompilerPackageCompilationMessageHolder extends CompilationMessageHolder {
-    
-
-    CompilationManager getCurrentCompositeComponentCompilationManager();
-    void setCurrentCompositeComponentCompilationManager(CompilationManager manager);
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/EncodingHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/EncodingHandler.java
deleted file mode 100644
index 66ffec6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/EncodingHandler.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletHandler;
-import java.io.IOException;
-
-public class EncodingHandler implements FaceletHandler {
-
-    private final FaceletHandler next;
-    private final String encoding;
-    private final CompilationMessageHolder messageHolder;
-    
-    public EncodingHandler(FaceletHandler next, String encoding,
-            CompilationMessageHolder messageHolder) {
-        this.next = next;
-        this.encoding = encoding;
-        this.messageHolder = messageHolder;
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        ctx.getFacesContext().getAttributes().put("facelets.compilationMessages", this.messageHolder);
-        this.next.apply(ctx, parent);
-        ctx.getFacesContext().getAttributes().remove("facelets.compilationMessages");
-        this.messageHolder.processCompilationMessages(ctx.getFacesContext());
-        ctx.getFacesContext().getAttributes().put("facelets.Encoding", this.encoding);
-    }
-    
-    public static CompilationMessageHolder getCompilationMessageHolder(FaceletContext ctx) {
-
-        return (CompilationMessageHolder) ctx.getFacesContext().getAttributes().get("facelets.compilationMessages");
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/EndElementInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/EndElementInstruction.java
deleted file mode 100644
index a16314d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/EndElementInstruction.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageUtils;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-import java.util.List;
-
-final class EndElementInstruction implements Instruction {
-
-    private static final String HEAD_ELEMENT = "head";
-    private static final String BODY_ELEMENT = "body";
-
-    private final String element;
-
-    public EndElementInstruction(String element) {
-        this.element = element;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        if (HEAD_ELEMENT.equalsIgnoreCase(this.element)) {
-            warnUnhandledResources(context, HEAD_ELEMENT);
-        }
-        if (BODY_ELEMENT.equalsIgnoreCase(this.element)) {
-            warnUnhandledResources(context, BODY_ELEMENT);
-            RenderKitUtils.renderUnhandledMessages(context);
-        }
-        context.getResponseWriter().endElement(this.element);
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        return this;
-    }
-
-    public boolean isLiteral() {
-        return true;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    private void warnUnhandledResources(FacesContext ctx, String target) {
-
-        UIViewRoot root = ctx.getViewRoot();
-        if (root != null) {
-            List<UIComponent> headResources =
-                  root.getComponentResources(ctx, target);
-            if (headResources != null && !headResources.isEmpty()) {
-                FacesMessage m =
-                      MessageUtils.getExceptionMessage(MessageUtils.NO_RESOURCE_TARGET_AVAILABLE,
-                                                       target);
-                ctx.addMessage(null, m);
-            }
-        }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/ImplementationUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/ImplementationUnit.java
deleted file mode 100644
index da1b8a9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/ImplementationUnit.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.TagLibrary;
-
-import javax.faces.view.facelets.Tag;
-
-class ImplementationUnit extends TrimmedTagUnit {
-
-    public ImplementationUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
-        super(library, namespace, name, tag, id);
-    }
-
-    @Override
-    protected void finishNotify(CompilationManager manager) {
-        ((CompilerPackageCompilationMessageHolder)manager.getCompilationMessageHolder()).
-                setCurrentCompositeComponentCompilationManager(null);
-        super.finishNotify(manager);
-    }
-
-    @Override
-    protected void startNotify(CompilationManager manager) {
-        super.startNotify(manager);
-        ((CompilerPackageCompilationMessageHolder)manager.getCompilationMessageHolder()).
-                setCurrentCompositeComponentCompilationManager(manager);
-    }
-
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/Instruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/Instruction.java
deleted file mode 100644
index 823e8be..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/Instruction.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-interface Instruction {
-    public void write(FacesContext context) throws IOException;
-    public Instruction apply(ExpressionFactory factory, ELContext ctx);
-    public boolean isLiteral();
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/InterfaceUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/InterfaceUnit.java
deleted file mode 100644
index 9e40453..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/InterfaceUnit.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.TagLibrary;
-
-import javax.faces.view.facelets.Tag;
-
-final class InterfaceUnit extends TagUnit {
-
-    public InterfaceUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
-        super(library, namespace, name, tag, id);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralAttributeInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralAttributeInstruction.java
deleted file mode 100644
index 9f6f261..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralAttributeInstruction.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-
-final class LiteralAttributeInstruction implements Instruction {
-    private final String attr;
-
-    private final String text;
-
-    public LiteralAttributeInstruction(String attr, String text) {
-        this.attr = attr;
-        this.text = text;
-    }
-
-    public void write(FacesContext context) throws IOException {
-      context.getResponseWriter().writeAttribute(this.attr, this.text, null);
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        return this;
-    }
-
-    public boolean isLiteral() {
-        return true;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralCommentInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralCommentInstruction.java
deleted file mode 100644
index 15a6b61..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralCommentInstruction.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-final class LiteralCommentInstruction implements Instruction {
-    private final String text;
-
-    public LiteralCommentInstruction(String text) {
-        this.text = text;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        context.getResponseWriter().writeComment(this.text);
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        return this;
-    }
-
-    public boolean isLiteral() {
-        return true;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralTextInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralTextInstruction.java
deleted file mode 100644
index cca210e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralTextInstruction.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-final class LiteralTextInstruction implements Instruction {
-    private final String text;
-
-    public LiteralTextInstruction(String text) {
-        this.text = text;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        context.getResponseWriter().writeText(this.text, null);
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        return this;
-    }
-
-    public boolean isLiteral() {
-        return true;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralXMLInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralXMLInstruction.java
deleted file mode 100644
index 2218253..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/LiteralXMLInstruction.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-
-final class LiteralXMLInstruction implements Instruction {
-
-    private final static char[] STOP = new char[0];
-    
-    private final char[] instruction;
-    private final int len;
-    
-    public LiteralXMLInstruction(String literal) {
-        this.instruction = literal.toCharArray();
-        this.len = this.instruction.length;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        ResponseWriter rw = context.getResponseWriter();
-        rw.writeText(STOP, 0, 0); // hack to get closing elements
-        rw.write(this.instruction, 0, this.len);
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        return this;
-    }
-
-    public boolean isLiteral() {
-        return true;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceHandler.java
deleted file mode 100644
index 92fd60b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceHandler.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.CompositeFunctionMapper;
-import com.sun.faces.facelets.tag.TagLibrary;
-import com.sun.faces.el.ELContextImpl;
-
-import javax.el.FunctionMapper;
-import javax.el.ELContext;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletHandler;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Map;
-
-final class NamespaceHandler extends FunctionMapper implements FaceletHandler {
-
-    private final TagLibrary library;
-    private final Map ns;
-    private FaceletHandler next;
-    
-    public NamespaceHandler(FaceletHandler next, TagLibrary library, Map ns) {
-        this.library = library;
-        this.ns = ns;
-        this.next = next;
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        FunctionMapper orig = ctx.getFunctionMapper();
-        pushMapper(ctx.getFacesContext(), this);
-        ctx.setFunctionMapper(new CompositeFunctionMapper(this, orig));
-        try {
-            next.apply(ctx, parent);
-        } finally {
-            ctx.setFunctionMapper(orig);
-        }
-    }
-
-    public Method resolveFunction(String prefix, String localName) {
-        String uri = (String) this.ns.get(prefix);
-        if (uri != null) {
-            return this.library.createFunction(uri, localName);
-        }
-        return null;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void pushMapper(FacesContext ctx, FunctionMapper mapper) {
-
-        ELContext elContext = ctx.getELContext();
-        if (elContext instanceof ELContextImpl) {
-            ((ELContextImpl) elContext).setFunctionMapper(mapper);
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceManager.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceManager.java
deleted file mode 100644
index af2342d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceManager.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.TagLibrary;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Jacob Hookom
- * @version $Id: NamespaceManager.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class NamespaceManager {
-
-    private final static class NS {
-        public final String prefix;
-
-        public final String namespace;
-
-        public NS(String prefix, String ns) {
-            this.prefix = prefix;
-            this.namespace = ns;
-        }
-    }
-
-    private final List namespaces;
-
-    /**
-     * 
-     */
-    public NamespaceManager() {
-        this.namespaces = new ArrayList();
-    }
-
-    public void reset() {
-        this.namespaces.clear();
-    }
-
-    public void pushNamespace(String prefix, String namespace) {
-        NS ns = new NS(prefix, namespace);
-        this.namespaces.add(0, ns);
-    }
-
-    public String getNamespace(String prefix) {
-        NS ns = null;
-        for (int i = 0; i < this.namespaces.size(); i++) {
-            ns = (NS) this.namespaces.get(i);
-            if (ns.prefix.equals(prefix)) {
-                return ns.namespace;
-            }
-        }
-        return null;
-    }
-
-    public void popNamespace(String prefix) {
-        NS ns = null;
-        for (int i = 0; i < this.namespaces.size(); i++) {
-            ns = (NS) this.namespaces.get(i);
-            if (ns.prefix.equals(prefix)) {
-                this.namespaces.remove(i);
-                return;
-            }
-        }
-    }
-    
-    public final NamespaceUnit toNamespaceUnit(TagLibrary library) {
-        NamespaceUnit unit = new NamespaceUnit(library);
-        if (this.namespaces.size() > 0) {
-            NS ns = null;
-            for (int i = this.namespaces.size() - 1; i >= 0; i--) {
-                ns = (NS) this.namespaces.get(i);
-                unit.setNamespace(ns.prefix, ns.namespace);
-            }
-        }
-        return unit;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceUnit.java
deleted file mode 100644
index 6e664d5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/NamespaceUnit.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.TagLibrary;
-
-import javax.faces.view.facelets.FaceletHandler;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: NamespaceUnit.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class NamespaceUnit extends CompilationUnit {
-
-    private final Map ns = new HashMap();
-    private final TagLibrary library;
-    
-    public NamespaceUnit(TagLibrary library) {
-        this.library = library;
-    }
-
-    public FaceletHandler createFaceletHandler() {
-        FaceletHandler next = this.getNextFaceletHandler();
-        return new NamespaceHandler(next, this.library, this.ns);
-    }
-    
-    public void setNamespace(String prefix, String uri) {
-        this.ns.put(prefix, uri);
-    }
-    
-    public void addChild(CompilationUnit unit) {
-        super.addChild(unit);
-    }
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/RemoveUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/RemoveUnit.java
deleted file mode 100644
index 2d27743..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/RemoveUnit.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import javax.faces.view.facelets.FaceletHandler;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: RemoveUnit.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class RemoveUnit extends CompilationUnit {
-
-    public RemoveUnit() {
-        super();
-    }
-
-    public void addChild(CompilationUnit unit) {
-        // do nothing
-    }
-
-    public FaceletHandler createFaceletHandler() {
-        return LEAF;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/SAXCompiler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/SAXCompiler.java
deleted file mode 100644
index 13d0545..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/SAXCompiler.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.facelets.tag.TagAttributeImpl;
-import com.sun.faces.facelets.tag.TagAttributesImpl;
-import org.xml.sax.*;
-import org.xml.sax.ext.LexicalHandler;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.faces.view.Location;
-import javax.faces.view.facelets.*;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Compiler implementation that uses SAX
- * 
- * @see {@link com.sun.faces.facelets.compiler.Compiler}
- * 
- * @author Jacob Hookom
- * @version $Id: SAXCompiler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class SAXCompiler extends Compiler {
-    
-    private final static Pattern XmlDeclaration = Pattern.compile("^<\\?xml.+?version=['\"](.+?)['\"](.+?encoding=['\"]((.+?))['\"])?.*?\\?>");
-
-    private static class CompilationHandler extends DefaultHandler implements
-            LexicalHandler {
-
-        protected final String alias;
-
-        protected boolean inDocument = false;
-
-        protected Locator locator;
-
-        protected final CompilationManager unit;
-        
-        public CompilationHandler(CompilationManager unit, String alias) {
-            this.unit = unit;
-            this.alias = alias;
-        }
-
-        public void characters(char[] ch, int start, int length)
-                throws SAXException {
-            if (this.inDocument) {
-                this.unit.writeText(new String(ch, start, length));
-            }
-        }
-
-        public void comment(char[] ch, int start, int length)
-                throws SAXException {
-            if (this.inDocument) {
-                this.unit.writeComment(new String(ch, start, length));
-            }
-        }
-
-        protected TagAttributes createAttributes(Attributes attrs) {
-            int len = attrs.getLength();
-            TagAttribute[] ta = new TagAttribute[len];
-            for (int i = 0; i < len; i++) {
-                ta[i] = new TagAttributeImpl(this.createLocation(),
-                        attrs.getURI(i), attrs.getLocalName(i), attrs
-                                .getQName(i), attrs.getValue(i));
-            }
-            return new TagAttributesImpl(ta);
-        }
-
-        protected Location createLocation() {
-            return new Location(this.alias, this.locator.getLineNumber(),
-                    this.locator.getColumnNumber());
-        }
-
-        public void endCDATA() throws SAXException {
-            if (this.inDocument) {
-                this.unit.writeInstruction("]]>");
-            }
-        }
-
-        public void endDocument() throws SAXException {
-            super.endDocument();
-        }
-
-        public void endDTD() throws SAXException {
-            this.inDocument = true;
-        }
-
-        public void endElement(String uri, String localName, String qName)
-                throws SAXException {
-            this.unit.popTag();
-        }
-
-        public void endEntity(String name) throws SAXException {
-        }
-
-        public void endPrefixMapping(String prefix) throws SAXException {
-            this.unit.popNamespace(prefix);
-        }
-
-        public void fatalError(SAXParseException e) throws SAXException {
-            if (this.locator != null) {
-            throw new SAXException("Error Traced[line: "
-                    + this.locator.getLineNumber() + "] " + e.getMessage());
-            } else {
-                throw e;
-            }
-        }
-
-        public void ignorableWhitespace(char[] ch, int start, int length)
-                throws SAXException {
-            if (this.inDocument) {
-                this.unit.writeWhitespace(new String(ch, start, length));
-            }
-        }
-
-        public InputSource resolveEntity(String publicId, String systemId)
-                throws SAXException {
-            String dtd = "com/sun/faces/xhtml/default.dtd";
-            /*if ("-//W3C//DTD XHTML 1.0 Transitional//EN".equals(publicId)) {
-                dtd = "xhtml1-transitional.dtd";
-            } else if (systemId != null && systemId.startsWith("file:/")) {
-                return new InputSource(systemId);
-            }*/
-            URL url = this.getClass().getClassLoader().getResource(dtd);
-            return new InputSource(url.toString());
-        }
-
-        public void setDocumentLocator(Locator locator) {
-            this.locator = locator;
-        }
-
-        public void startCDATA() throws SAXException {
-            if (this.inDocument) {
-                this.unit.writeInstruction("<![CDATA[");
-            }
-        }
-
-        public void startDocument() throws SAXException {
-            this.inDocument = true;
-        }
-
-        public void startDTD(String name, String publicId, String systemId)
-                throws SAXException {
-            if (this.inDocument) {
-                // If we're in an ajax request, this is unnecessary and bugged
-                // RELEASE_PENDING - this is a hack, and should probably not be here -
-                // but the alternative is to somehow figure out how *not* to escape the "<!"
-                // within the cdata of the ajax response.  Putting the PENDING in here to
-                // remind me to have rlubke take a look.  But I'm stumped.
-                StringBuffer sb = new StringBuffer(64);
-                sb.append("<!DOCTYPE ").append(name);
-                if (publicId != null) {
-                    sb.append(" PUBLIC \"").append(publicId).append("\"");
-                    if (systemId != null) {
-                        sb.append(" \"").append(systemId).append("\"");
-                    }
-                } else if (systemId != null) {
-                    sb.append(" SYSTEM \"").append(systemId).append("\"");
-                }
-                sb.append(">\n");
-                this.unit.writeInstruction(sb.toString());
-            }
-            this.inDocument = false;
-        }
-
-        public void startElement(String uri, String localName, String qName,
-                Attributes attributes) throws SAXException {
-            this.unit.pushTag(new Tag(this.createLocation(), uri, localName,
-                    qName, this.createAttributes(attributes)));
-        }
-
-        public void startEntity(String name) throws SAXException {
-        }
-
-        public void startPrefixMapping(String prefix, String uri)
-                throws SAXException {
-            this.unit.pushNamespace(prefix, uri);
-        }
-
-        public void processingInstruction(String target, String data)
-                throws SAXException {
-            if (this.inDocument) {
-                StringBuffer sb = new StringBuffer(64);
-                sb.append("<?").append(target).append(' ').append(data).append(
-                        "?>\n");
-                this.unit.writeInstruction(sb.toString());
-            }
-        }
-    }
-
-
-    private static class MetadataCompilationHandler extends CompilationHandler {
-
-        private static final String METADATA_HANDLER = "metadata";
-        private boolean processingMetadata = false;
-        private boolean metadataProcessed = false;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public MetadataCompilationHandler(CompilationManager unit, String alias) {
-
-            super(unit, alias);
-
-        }
-
-
-        // ------------------------------------- Methods from CompilationHandler
-
-
-        @Override
-        public void characters(char[] ch, int start, int length)
-        throws SAXException {
-            // no-op
-        }
-
-        @Override
-        public void comment(char[] ch, int start, int length)
-        throws SAXException {
-            // no-op
-        }
-
-        @Override
-        public void endCDATA() throws SAXException {
-            // no-op
-        }
-
-        @Override
-        public void ignorableWhitespace(char[] ch, int start, int length)
-        throws SAXException {
-           // no-op
-        }
-
-        @Override
-        public void startCDATA() throws SAXException {
-            // no-op
-        }
-
-        @Override
-        public void startDTD(String name, String publicId, String systemId)
-        throws SAXException {
-            // no-op
-        }
-
-        @Override
-        public void startEntity(String name) throws SAXException {
-            // no-op
-        }
-
-        @Override
-        public void processingInstruction(String target, String data)
-        throws SAXException {
-            // no-op
-        }
-
-
-
-        @Override
-        public void startElement(String uri, String localName, String qName, Attributes attributes)
-        throws SAXException {
-
-            if (!metadataProcessed) {
-                if (!processingMetadata && RIConstants.CORE_NAMESPACE.equals(uri)) {
-                    if (METADATA_HANDLER.equals(localName)) {
-                        processingMetadata = true;
-                    }
-                }
-                if (processingMetadata) {
-                    super.startElement(uri, localName, qName, attributes);
-                }
-            }
-
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String qName)
-        throws SAXException {
-
-            if (!metadataProcessed) {
-                if (processingMetadata) {
-                    super.endElement(uri, localName, qName);
-                }
-                if (processingMetadata && RIConstants.CORE_NAMESPACE.equals(uri)) {
-                    if (METADATA_HANDLER.equals(localName)) {
-                        processingMetadata = false;
-                        metadataProcessed = true;
-                    }
-                }
-            }
-
-        }
-
-    }
-
-    public SAXCompiler() {
-        super();
-    }
-
-    public FaceletHandler doCompile(URL src, String alias) throws IOException {
-
-        CompilationManager mgr = new CompilationManager(alias, this);
-        CompilationHandler handler = new CompilationHandler(mgr, alias);
-        return doCompile(mgr, handler, src, alias);
-
-    }
-
-    public FaceletHandler doMetadataCompile(URL src, String alias)
-    throws IOException {
-
-        CompilationManager mgr = new CompilationManager("metadata/" + alias, this);
-        CompilationHandler handler = new MetadataCompilationHandler(mgr, alias);
-        return doCompile(mgr, handler, src, alias);
-    }
-
-    protected FaceletHandler doCompile(CompilationManager mngr,
-                                       CompilationHandler handler,
-                                       URL src,
-                                       String alias)
-    throws IOException {
-
-        InputStream is = null;
-        String encoding = "UTF-8";
-        try {
-            is = new BufferedInputStream(src.openStream(), 1024);
-            encoding = writeXmlDecl(is, mngr);
-            SAXParser parser = this.createSAXParser(handler);
-            parser.parse(is, handler);
-        } catch (SAXException e) {
-            throw new FaceletException("Error Parsing " + alias + ": "
-                    + e.getMessage(), e.getCause());
-        } catch (ParserConfigurationException e) {
-            throw new FaceletException("Error Configuring Parser " + alias
-                    + ": " + e.getMessage(), e.getCause());
-        } catch (FaceletException e) {
-            throw e;
-        } finally {
-            if (is != null) {
-                is.close();
-            }
-        }
-        FaceletHandler result = new EncodingHandler(mngr.createFaceletHandler(), encoding,
-                mngr.getCompilationMessageHolder());
-        mngr.setCompilationMessageHolder(null);
-
-        return result;
-
-    }
-
-    protected static String writeXmlDecl(InputStream is, CompilationManager mngr)
-            throws IOException {
-        is.mark(128);
-        String encoding = "UTF-8";
-        try {
-            byte[] b = new byte[128];
-            if (is.read(b) > 0) {
-                String r = new String(b);
-                Matcher m = XmlDeclaration.matcher(r);
-                if (m.find()) {
-                    mngr.writeInstruction(m.group(0) + "\n");
-                    if (m.group(3) != null) {
-                        encoding = m.group(3);
-                    }
-                }
-            }
-        } finally {
-            is.reset();
-        }
-        return encoding;
-    }
-
-    private SAXParser createSAXParser(CompilationHandler handler)
-            throws SAXException, ParserConfigurationException {
-        SAXParserFactory factory = SAXParserFactory.newInstance();
-        factory.setNamespaceAware(true);
-        factory.setFeature("http://xml.org/sax/features/namespace-prefixes",
-                true);
-        factory.setFeature("http://xml.org/sax/features/validation", this
-                .isValidating());
-        factory.setValidating(this.isValidating());
-        SAXParser parser = factory.newSAXParser();
-        XMLReader reader = parser.getXMLReader();
-        reader.setProperty("http://xml.org/sax/properties/lexical-handler",
-                handler);
-        reader.setErrorHandler(handler);
-        reader.setEntityResolver(handler);
-        return parser;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/StartElementInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/StartElementInstruction.java
deleted file mode 100644
index 474cf8f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/StartElementInstruction.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-final class StartElementInstruction implements Instruction {
-    private final String element;
-
-    public StartElementInstruction(String element) {
-        this.element = element;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        context.getResponseWriter().startElement(this.element, null);
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        return this;
-    }
-
-    public boolean isLiteral() {
-        return true;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TagUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TagUnit.java
deleted file mode 100644
index d1bc261..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TagUnit.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.TagLibrary;
-
-import javax.faces.view.facelets.FaceletException;
-import javax.faces.view.facelets.FaceletHandler;
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagConfig;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: TagUnit.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-class TagUnit extends CompilationUnit implements TagConfig {
-
-    private final TagLibrary library;
-
-    private final String id;
-
-    private final Tag tag;
-    
-    private final String namespace;
-    
-    private final String name;
-
-    public TagUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
-        this.library = library;
-        this.tag = tag;
-        this.namespace = namespace;
-        this.name = name;
-        this.id = id;
-    }
-
-    /*
-     * special case if you have a ui:composition tag.  If and only if the
-     * composition is on the same facelet page as the
-     * composite:implementation, throw a FacesException with a helpful error
-     * message.
-     * */
-
-    @Override
-    protected void startNotify(CompilationManager manager) {
-        if (this.name.equals("composition") && this.namespace.equals("http://java.sun.com/jsf/facelets")) {
-            CompilerPackageCompilationMessageHolder messageHolder =
-                    (CompilerPackageCompilationMessageHolder) manager.getCompilationMessageHolder();
-            CompilationManager compositeComponentCompilationManager = messageHolder.
-                getCurrentCompositeComponentCompilationManager();
-            if (manager.equals(compositeComponentCompilationManager)) {
-                // PENDING I18N
-                String messageStr = 
-                        "Because the definition of ui:composition causes any " +
-                        "parent content to be ignored, it is invalid to use " +
-                        "ui:composition directly inside of a composite component. " +
-                        "Consider ui:decorate instead.";
-                throw new FaceletException(messageStr);
-            }
-        }
-    }
-
-    public FaceletHandler createFaceletHandler() {
-        return this.library.createTagHandler(this.namespace, this.name, this);
-    }
-
-    public FaceletHandler getNextHandler() {
-        return this.getNextFaceletHandler();
-    }
-
-    public Tag getTag() {
-        return this.tag;
-    }
-
-    public String getTagId() {
-        return this.id;
-    }
-
-    public String toString() {
-        return this.tag.toString();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TextInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TextInstruction.java
deleted file mode 100644
index 8c29129..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TextInstruction.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-
-import com.sun.faces.facelets.el.ELText;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-
-final class TextInstruction implements Instruction {
-    private final ELText txt;
-    
-    private final String alias;
-
-    public TextInstruction(String alias, ELText txt) {
-        this.alias = alias;
-        this.txt = txt;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        ResponseWriter out = context.getResponseWriter();
-        try {
-            ELContext elContext = context.getELContext();
-            txt.writeText(out, elContext);
-            //out.writeText(txt.toString(elContext), null);
-        } catch (ELException e) {
-            throw new ELException(this.alias + ": " + e.getMessage(), e.getCause());
-        } catch (Exception e) {
-            throw new ELException(this.alias + ": " + e.getMessage(), e);
-        }
-    }
-
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        ELText nt = this.txt.apply(factory, ctx);
-        if (nt == this.txt) {
-            return this;
-        }
-
-        return new TextInstruction(alias, nt);
-    }
-
-    public boolean isLiteral() {
-        return txt.isLiteral();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TextUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TextUnit.java
deleted file mode 100644
index 1edb9f9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TextUnit.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.ELText;
-
-import javax.el.ELException;
-import javax.faces.view.facelets.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Stack;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: TextUnit.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class TextUnit extends CompilationUnit {
-
-    private final StringBuffer buffer;
-
-    private final StringBuffer textBuffer;
-
-    private final List instructionBuffer;
-
-    private final Stack tags;
-
-    private final List children;
-
-    private boolean startTagOpen;
-
-    private final String alias;
-
-    private final String id;
-
-    public TextUnit(String alias, String id) {
-        this.alias = alias;
-        this.id = id;
-        this.buffer = new StringBuffer();
-        this.textBuffer = new StringBuffer();
-        this.instructionBuffer = new ArrayList();
-        this.tags = new Stack();
-        this.children = new ArrayList();
-        this.startTagOpen = false;
-    }
-
-    public FaceletHandler createFaceletHandler() {
-        this.flushBufferToConfig(true);
-
-        if (this.children.size() == 0) {
-            return LEAF;
-        }
-
-        FaceletHandler[] h = new FaceletHandler[this.children.size()];
-        Object obj;
-        for (int i = 0; i < h.length; i++) {
-            obj = this.children.get(i);
-            if (obj instanceof FaceletHandler) {
-                h[i] = (FaceletHandler) obj;
-            } else {
-                h[i] = ((CompilationUnit) obj).createFaceletHandler();
-            }
-        }
-        if (h.length == 1) {
-            return h[0];
-        }
-        return new CompositeFaceletHandler(h);
-    }
-
-    private void addInstruction(Instruction instruction) {
-        this.flushTextBuffer(false);
-        this.instructionBuffer.add(instruction);
-    }
-
-    private void flushTextBuffer(boolean child) {
-        if (this.textBuffer.length() > 0) {
-            String s = this.textBuffer.toString();
-
-            if (child) {
-                s = trimRight(s);
-            }
-            if (s.length() > 0) {
-                ELText txt = ELText.parse(s);
-                if (txt != null) {
-                    if (txt.isLiteral()) {
-                        this.instructionBuffer.add(new LiteralTextInstruction(
-                                txt.toString()));
-                    } else {
-                        this.instructionBuffer.add(new TextInstruction(
-                                this.alias, txt));
-                    }
-                }
-            }
-
-        }
-        this.textBuffer.setLength(0);
-    }
-
-    public void write(String text) {
-        this.finishStartTag();
-        this.textBuffer.append(text);
-        this.buffer.append(text);
-    }
-
-    public void writeInstruction(String text) {
-        this.finishStartTag();
-        ELText el = ELText.parse(text);
-        if (el.isLiteral()) {
-            this.addInstruction(new LiteralXMLInstruction(text));
-        } else {
-            this.addInstruction(new XMLInstruction(el));
-        }
-        this.buffer.append(text);
-    }
-
-    public void writeComment(String text) {
-        this.finishStartTag();
-
-        ELText el = ELText.parse(text);
-        if (el.isLiteral()) {
-            this.addInstruction(new LiteralCommentInstruction(text));
-        } else {
-            this.addInstruction(new CommentInstruction(el));
-        }
-
-        this.buffer.append("<!--" + text + "-->");
-    }
-
-    public void startTag(Tag tag) {
-
-        // finish any previously written tags
-        this.finishStartTag();
-
-        // push this tag onto the stack
-        this.tags.push(tag);
-
-        // write it out
-        this.buffer.append('<');
-        this.buffer.append(tag.getQName());
-
-        this.addInstruction(new StartElementInstruction(tag.getQName()));
-
-        TagAttribute[] attrs = tag.getAttributes().getAll();
-        if (attrs.length > 0) {
-            for (int i = 0; i < attrs.length; i++) {
-                String qname = attrs[i].getQName();
-                String value = attrs[i].getValue();
-                this.buffer.append(' ').append(qname).append("=\"").append(
-                        value).append("\"");
-
-                ELText txt = ELText.parse(value);
-                if (txt != null) {
-                    if (txt.isLiteral()) {
-                        this.addInstruction(new LiteralAttributeInstruction(
-                                qname, txt.toString()));
-                    } else {
-                        this.addInstruction(new AttributeInstruction(
-                                this.alias, qname, txt));
-                    }
-                }
-            }
-        }
-
-        // notify that we have an open tag
-        this.startTagOpen = true;
-    }
-
-    private void finishStartTag() {
-        if (this.tags.size() > 0 && this.startTagOpen) {
-            this.buffer.append(">");
-            this.startTagOpen = false;
-        }
-    }
-
-    public void endTag() {
-        Tag tag = (Tag) this.tags.pop();
-
-        this.addInstruction(new EndElementInstruction(tag.getQName()));
-
-        if (this.startTagOpen) {
-            this.buffer.append("/>");
-            this.startTagOpen = false;
-        } else {
-            this.buffer.append("</").append(tag.getQName()).append('>');
-        }
-    }
-
-    public void addChild(CompilationUnit unit) {
-        // if we are adding some other kind of unit
-        // then we need to capture our buffer into a UITextHandler
-        this.finishStartTag();
-        this.flushBufferToConfig(true);
-        this.children.add(unit);
-    }
-
-    protected void flushBufferToConfig(boolean child) {
-
-        // NEW IMPLEMENTATION
-        if (true) {
-
-            this.flushTextBuffer(child);
-
-            int size = this.instructionBuffer.size();
-            if (size > 0) {
-                try {
-                    String s = this.buffer.toString();
-                    if (child)
-                        s = trimRight(s);
-                    ELText txt = ELText.parse(s);
-                    if (txt != null) {
-                        Instruction[] instructions = (Instruction[]) this.instructionBuffer
-                                .toArray(new Instruction[size]);
-                        this.children.add(new UIInstructionHandler(this.alias,
-                                                                   this.id,
-                                                                   instructions,
-                                                                   txt));
-                        this.instructionBuffer.clear();
-                    }
-
-                } catch (ELException e) {
-                    if (this.tags.size() > 0) {
-                        throw new TagException((Tag) this.tags.peek(), e
-                                .getMessage());
-                    } else {
-                        throw new ELException(this.alias + ": "
-                                + e.getMessage(), e.getCause());
-                    }
-                }
-            }
-
-            // KEEP THESE SEPARATE SO LOGIC DOESN'T GET FUBARED
-        } else if (this.buffer.length() > 0) {
-            String s = this.buffer.toString();
-            if (s.trim().length() > 0) {
-                if (child) {
-                    s = trimRight(s);
-                }
-                if (s.length() > 0) {
-                    try {
-                        ELText txt = ELText.parse(s);
-                        if (txt != null) {
-                            if (txt.isLiteral()) {
-                                this.children.add(new UILiteralTextHandler(txt
-                                        .toString()));
-                            } else {
-                                this.children.add(new UITextHandler(this.alias,
-                                        txt));
-                            }
-                        }
-                    } catch (ELException e) {
-                        if (this.tags.size() > 0) {
-                            throw new TagException((Tag) this.tags.peek(), e
-                                    .getMessage());
-                        } else {
-                            throw new ELException(this.alias + ": "
-                                    + e.getMessage(), e.getCause());
-                        }
-                    }
-                }
-            }
-        }
-
-        // ALWAYS CLEAR FOR BOTH IMPL
-        this.buffer.setLength(0);
-    }
-
-    public boolean isClosed() {
-        return this.tags.empty();
-    }
-
-    private final static String trimRight(String s) {
-        int i = s.length() - 1;
-        while (i >= 0) {
-            if (Character.isWhitespace(s.charAt(i))) {
-                i--;
-            } else {
-                return s;
-            }
-        }
-        return "";
-    }
-
-    public String toString() {
-        return "TextUnit[" + this.children.size() + "]";
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TrimmedTagUnit.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TrimmedTagUnit.java
deleted file mode 100644
index c3a4519..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/TrimmedTagUnit.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.TagLibrary;
-
-import javax.faces.view.facelets.Tag;
-
-class TrimmedTagUnit extends TagUnit {
-
-    public TrimmedTagUnit(TagLibrary library, String namespace, String name, Tag tag, String id) {
-        super(library, namespace, name, tag, id);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIInstructionHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIInstructionHandler.java
deleted file mode 100644
index 4e06a1c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIInstructionHandler.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.ELText;
-import com.sun.faces.facelets.impl.IdMapper;
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-import com.sun.faces.facelets.util.FastWriter;
-
-import javax.el.ELException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UniqueIdVendor;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletContext;
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * @author Adam Winer
- * @version $Id: UIInstructionHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class UIInstructionHandler extends AbstractUIHandler {
-
-    private final String alias;
-
-    private final String id;
-
-    private final ELText txt;
-    
-    private final Instruction[] instructions;
-
-    private final int length;
-  
-    private final boolean literal;
-
-    public UIInstructionHandler(String alias, String id, Instruction[] instructions, ELText txt) {
-        this.alias = alias;
-        this.id = id;
-        this.instructions = instructions;
-        this.txt = txt;
-        this.length = txt.toString().length();
-
-        boolean literal = true;
-        int size = instructions.length;
-
-        for (int i = 0; i < size; i++) {
-            Instruction ins = this.instructions[i];
-            if (!ins.isLiteral()) {
-                literal = false;
-                break;
-            }
-        }
-
-        this.literal = literal;
-    }
-
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-        if (parent != null) {
-            // our id
-            String id = ctx.generateUniqueId(this.id);
-
-            // grab our component
-            UIComponent c = ComponentSupport.findChildByTagId(parent, id);
-            boolean componentFound = false;
-            boolean suppressEvents = false;
-            if (c != null) {
-                componentFound = true;
-                suppressEvents = ComponentSupport.suppressViewModificationEvents(ctx.getFacesContext());
-                // mark all children for cleaning 
-                ComponentSupport.markForDeletion(c);
-            } else {
-                Instruction[] applied;
-                if (this.literal) {
-                    applied = this.instructions;
-                } else {
-                    int size = this.instructions.length;
-                    applied = new Instruction[size];
-                    // Create a new list with all of the necessary applied
-                    // instructions
-                    Instruction ins;
-                    for (int i = 0; i < size; i++) {
-                        ins = this.instructions[i];
-                        applied[i] = ins.apply(ctx.getExpressionFactory(), ctx);
-                    }
-                }
-
-                c = new UIInstructions(txt, applied);
-                // mark it owned by a facelet instance
-                String uid;
-                IdMapper mapper = IdMapper.getMapper(ctx.getFacesContext());
-                String mid = ((mapper != null) ? mapper.getAliasedId(id) : id);
-                UIComponent ancestorNamingContainer = parent.getNamingContainer();
-                if (null != ancestorNamingContainer &&
-                        ancestorNamingContainer instanceof UniqueIdVendor) {
-                    uid = ((UniqueIdVendor) ancestorNamingContainer).createUniqueId(ctx.getFacesContext(), mid);
-                } else {
-                    uid = ComponentSupport.getViewRoot(ctx, parent).createUniqueId(ctx.getFacesContext(), mid);
-                }
-                
-                c.setId(uid);
-                c.getAttributes().put(ComponentSupport.MARK_CREATED, id);
-            }
-            // finish cleaning up orphaned children
-            FacesContext context = ctx.getFacesContext();
-            if (componentFound) {
-                ComponentSupport.finalizeForDeletion(c);
-                if (suppressEvents) {
-                    context.setProcessingEvents(false);
-                }
-                parent.getChildren().remove(c);
-                if (suppressEvents) {
-                    context.setProcessingEvents(true);
-                }
-            }
-
-            // add the component
-            if (componentFound && suppressEvents) {
-                context.setProcessingEvents(false);
-            }
-            this.addComponent(ctx, parent, c);
-            if (componentFound && suppressEvents) {
-                context.setProcessingEvents(true);
-            }
-        }
-    }
-
-    public String toString() {
-        return this.txt.toString();
-    }
-
-    public String getText() {
-        return this.txt.toString();
-    }
-
-    public String getText(FaceletContext ctx) {
-        Writer writer = new FastWriter(this.length);
-        try {
-            this.txt.apply(ctx.getExpressionFactory(), ctx).write(writer, ctx);
-        } catch (IOException e) {
-            throw new ELException(this.alias + ": "+ e.getMessage(), e.getCause());
-        }
-        return writer.toString();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIInstructions.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIInstructions.java
deleted file mode 100644
index 8e36fb5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIInstructions.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.ELText;
-
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-import java.util.Arrays;
-
-public final class UIInstructions extends UILeaf {
-
-    private final ELText txt;
-
-    private final Instruction[] instructions;
-
-    public UIInstructions(ELText txt, Instruction[] instructions) {
-        this.txt = txt;
-        this.instructions = instructions;
-    }
-
-    public void encodeBegin(FacesContext context) throws IOException {
-        if (this.isRendered()) {
-            int size = this.instructions.length;
-            for (int i = 0; i < size; i++) {
-                this.instructions[i].write(context);
-            }
-        }
-    }
-
-    public String toString() {
-        return (this.txt != null) ? this.txt.toString() : "UIInstructions["
-                + Arrays.asList(instructions) + "]";
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILeaf.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILeaf.java
deleted file mode 100644
index 6fb4dfd..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILeaf.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.compiler;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.FacesEvent;
-import javax.faces.event.FacesListener;
-import javax.faces.render.Renderer;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
- at SuppressWarnings({"deprecation"})
-public class UILeaf extends UIComponentBase {
-    
-    private final static Map<String,UIComponent> facets = new HashMap<String,UIComponent>(0, 1.0f){
-    
-        public void putAll(Map map) {
-            // do nothing
-        }
-    
-        public UIComponent put(String name, UIComponent value) {
-            return null;
-        }
-    };
-    
-    private UIComponent parent;
-    private boolean returnLocalTransient = true;
-
-    public ValueBinding getValueBinding(String binding) {
-        return null;
-    }
-
-    public void setValueBinding(String name, ValueBinding binding) {
-        // do nothing
-    }
-
-    public ValueExpression getValueExpression(String name) {
-        return null;
-    }
-
-    public void setValueExpression(String name, ValueExpression arg1) {
-        // do nothing
-    }
-
-    public String getFamily() {
-        return "facelets.LiteralText";
-    }
-
-    public UIComponent getParent() {
-        return this.parent;
-    }
-
-    public void setParent(UIComponent parent) {
-        this.parent = parent;
-    }
-
-    public String getRendererType() {
-        return null;
-    }
-
-    public void setRendererType(String rendererType) {
-        // do nothing
-    }
-
-    public boolean getRendersChildren() {
-        return true;
-    }
-
-    public List<UIComponent> getChildren() {
-        return Collections.emptyList();
-    }
-
-    public int getChildCount() {
-        return 0;
-    }
-
-    public UIComponent findComponent(String id) {
-        return null;
-    }
-
-    public Map<String,UIComponent> getFacets() {
-        return facets;
-    }
-
-    public int getFacetCount() {
-        return 0;
-    }
-
-    public UIComponent getFacet(String name) {
-        return null;
-    }
-
-    public Iterator<UIComponent> getFacetsAndChildren() {
-        return Collections.<UIComponent>emptyList().iterator();
-    }
-
-    public void broadcast(FacesEvent event) throws AbortProcessingException {
-        // do nothing
-    }
-
-    public void decode(FacesContext faces) {
-        // do nothing
-    }
-
-    public void encodeBegin(FacesContext faces) throws IOException {
-        // do nothing
-    }
-
-    public void encodeChildren(FacesContext faces) throws IOException {
-        // do nothing
-    }
-
-    public void encodeEnd(FacesContext faces) throws IOException {
-        // do nothing
-    }
-
-    public void encodeAll(FacesContext faces) throws IOException {
-        this.encodeBegin(faces);
-    }
-
-    protected void addFacesListener(FacesListener faces) {
-        // do nothing
-    }
-
-    protected FacesListener[] getFacesListeners(Class faces) {
-        return null;
-    }
-
-    protected void removeFacesListener(FacesListener faces) {
-        // do nothing
-    }
-
-    public void queueEvent(FacesEvent event) {
-        // do nothing
-    }
-
-    public void processDecodes(FacesContext faces) {
-        // do nothing
-    }
-
-    public void processValidators(FacesContext faces) {
-        // do nothing
-    }
-
-    public void processUpdates(FacesContext faces) {
-        // do nothing
-    }
-
-    protected FacesContext getFacesContext() {
-        return FacesContext.getCurrentInstance();
-    }
-
-    protected Renderer getRenderer(FacesContext faces) {
-        return null;
-    }
-
-
-    public boolean isTransient() {
-        return ((returnLocalTransient) || super.isTransient());
-    }
-
-    public void setTransient(boolean tranzient) {
-        returnLocalTransient = false;
-        super.setTransient(tranzient);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILiteralText.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILiteralText.java
deleted file mode 100644
index a2e51cf..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILiteralText.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-
-public final class UILiteralText extends UILeaf {
-    
-    private final String text;
-    
-    public UILiteralText(String text) {
-        this.text = text;
-    }
-
-    public void encodeBegin(FacesContext faces) throws IOException {
-        if (this.isRendered()) {
-            ResponseWriter writer = faces.getResponseWriter();
-            writer.write(this.text);
-        }
-    }
-    public String toString() {
-        return this.text;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILiteralTextHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILiteralTextHandler.java
deleted file mode 100644
index b7b9f93..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UILiteralTextHandler.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UniqueIdVendor;
-import javax.faces.view.facelets.FaceletContext;
-import java.io.IOException;
-
-final class UILiteralTextHandler extends AbstractUIHandler {
-    
-    protected final String txtString;
-    
-    public UILiteralTextHandler(String txtString) {
-        this.txtString = txtString;
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        if (parent != null) {
-            UIComponent c = new UILiteralText(this.txtString);
-            String uid;
-            UIComponent ancestorNamingContainer = parent.getNamingContainer();
-            if (null != ancestorNamingContainer &&
-                    ancestorNamingContainer instanceof UniqueIdVendor) {
-                uid = ((UniqueIdVendor) ancestorNamingContainer).createUniqueId(ctx.getFacesContext(), null);
-            } else {
-                uid = ComponentSupport.getViewRoot(ctx, parent).createUniqueId();
-            }
-            c.setId(uid);
-            this.addComponent(ctx, parent, c);
-        }
-    }
-
-    public String getText() {
-        return this.txtString;
-    }
-
-    public String getText(FaceletContext ctx) {
-        return this.txtString;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIText.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIText.java
deleted file mode 100644
index 72676e9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UIText.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.ELText;
-
-import javax.el.ELException;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- * @version $Id: UIText.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class UIText extends UILeaf {
-
-    private final ELText txt;
-    
-    private final String alias;
-
-    public UIText(String alias, ELText txt) {
-        this.txt = txt;
-        this.alias = alias;
-    }
-
-    public String getFamily() {
-        return null;
-    }
-
-    public void encodeBegin(FacesContext context) throws IOException {
-        if (this.isRendered()) {
-            ResponseWriter out = context.getResponseWriter();
-            try {
-                txt.write(out, context.getELContext());
-            } catch (ELException e) {
-                throw new ELException(this.alias + ": " + e.getMessage(),
-                                      e.getCause());
-            } catch (Exception e) {
-                throw new ELException(this.alias + ": " + e.getMessage(), e);
-            }
-        }
-    }
-
-    public String getRendererType() {
-        return null;
-    }
-
-    public boolean getRendersChildren() {
-        return true;
-    }
-
-    public String toString() {
-        return this.txt.toString();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UITextHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UITextHandler.java
deleted file mode 100644
index 1919350..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/UITextHandler.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.ELText;
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-import com.sun.faces.facelets.util.FastWriter;
-
-import javax.el.ELException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UniqueIdVendor;
-import javax.faces.view.facelets.FaceletContext;
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * @author Jacob Hookom
- * @version $Id: UITextHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class UITextHandler extends AbstractUIHandler {
-
-    private final ELText txt;
-    
-    private final String alias;
-    
-    private final int length;
-
-    public UITextHandler(String alias, ELText txt) {
-        this.alias = alias;
-        this.txt = txt;
-        this.length = txt.toString().length();
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-    throws IOException {
-        if (parent != null) {
-            try {
-                ELText nt = this.txt.apply(ctx.getExpressionFactory(), ctx);
-                UIComponent c = new UIText(this.alias, nt);
-                String uid;
-                UIComponent ancestorNamingContainer = parent.getNamingContainer();
-                if (null != ancestorNamingContainer &&
-                        ancestorNamingContainer instanceof UniqueIdVendor) {
-                    uid = ((UniqueIdVendor) ancestorNamingContainer).createUniqueId(ctx.getFacesContext(), null);
-                } else {
-                    uid = ComponentSupport.getViewRoot(ctx, parent).createUniqueId();
-                }
-                
-                c.setId(uid);
-                this.addComponent(ctx, parent, c);
-            } catch (Exception e) {
-                throw new ELException(this.alias + ": "+ e.getMessage(), e.getCause());
-            }
-        }
-    }
-
-    public String toString() {
-        return this.txt.toString();
-    }
-
-    public String getText() {
-        return this.txt.toString();
-    }
-
-    public String getText(FaceletContext ctx) {
-        Writer writer = new FastWriter(this.length);
-        try {
-            this.txt.apply(ctx.getExpressionFactory(), ctx).write(writer, ctx);
-        } catch (IOException e) {
-            throw new ELException(this.alias + ": "+ e.getMessage(), e.getCause());
-        }
-        return writer.toString();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/XMLInstruction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/XMLInstruction.java
deleted file mode 100644
index 596026c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/compiler/XMLInstruction.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.compiler;
-
-import com.sun.faces.facelets.el.ELText;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-
-public class XMLInstruction implements Instruction {
-    
-    private final static char[] STOP = new char[0];
-    
-    private final ELText text;
-    
-    public XMLInstruction(ELText text) {
-        this.text = text;
-    }
-
-    public void write(FacesContext context) throws IOException {
-        ResponseWriter rw = context.getResponseWriter();
-        rw.writeText(STOP, 0, 0); // hack to get closing elements
-        this.text.write(rw, context.getELContext());
-    }
-
-    public Instruction apply(ExpressionFactory factory, ELContext ctx) {
-        return new XMLInstruction(text.apply(factory, ctx));
-    }
-
-    public boolean isLiteral() {
-        return false;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/component/RepeatRenderer.java b/jsf-ri/src/main/java/com/sun/faces/facelets/component/RepeatRenderer.java
deleted file mode 100644
index a9e46cf..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/component/RepeatRenderer.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.component;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.Renderer;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-
-
-public class RepeatRenderer extends Renderer {
-
-    public RepeatRenderer() {
-        super();
-    }
-
-    public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
-        
-    }
-
-    public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
-        if (component.getChildCount() > 0) {
-            Map a = component.getAttributes();
-            String tag = (String) a.get("alias.element");
-            if (tag != null) {
-                ResponseWriter out = context.getResponseWriter();
-                out.startElement(tag, component);
-                String[] attrs = (String[]) a.get("alias.attributes");
-                String attr;
-                if (attrs != null) {
-                    for (int i = 0; i < attrs.length; i++) {
-                        attr = attrs[i];
-                        if ("styleClass".equals(attr)) {
-                            attr = "class";
-                        }
-                        out.writeAttribute(attr, a.get(attrs[i]), attrs[i]);
-                    }
-                }
-            }
-            
-            Iterator itr = component.getChildren().iterator();
-            UIComponent c;
-            while (itr.hasNext()) {
-                c = (UIComponent) itr.next();
-                c.encodeAll(context);
-            }
-            
-            if (tag != null) {
-                context.getResponseWriter().endElement(tag);
-            }
-        }
-    }
-
-    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
-      
-    }
-    
-    public boolean getRendersChildren() {
-        return true;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/component/UIRepeat.java b/jsf-ri/src/main/java/com/sun/faces/facelets/component/UIRepeat.java
deleted file mode 100644
index c6b32e5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/component/UIRepeat.java
+++ /dev/null
@@ -1,965 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.component;
-
-import com.sun.faces.facelets.tag.IterationStatus;
-
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.ContextCallback;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIData;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.FacesEvent;
-import javax.faces.event.FacesListener;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PostValidateEvent;
-import javax.faces.event.PreValidateEvent;
-import javax.faces.model.ArrayDataModel;
-import javax.faces.model.DataModel;
-import javax.faces.model.ListDataModel;
-import javax.faces.model.ResultSetDataModel;
-import javax.faces.model.ScalarDataModel;
-import javax.faces.render.Renderer;
-import java.io.IOException;
-import java.io.Serializable;
-import java.sql.ResultSet;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
-
-
-public class UIRepeat extends UINamingContainer {
-
-    public static final String COMPONENT_TYPE = "facelets.ui.Repeat";
-
-    public static final String COMPONENT_FAMILY = "facelets";
-
-    private final static DataModel EMPTY_MODEL =
-          new ListDataModel<Object>(Collections.emptyList());
-
-    // our data
-    private Object value;
-
-    private transient DataModel model;
-
-    // variables
-    private String var;
-
-    private String varStatus;
-
-    private int index = -1;
-
-    private Integer begin;
-    private Integer end;
-    private Integer step;
-
-    public UIRepeat() {
-        this.setRendererType("facelets.ui.Repeat");
-    }
-
-    public String getFamily() {
-        return COMPONENT_FAMILY;
-    }
-
-    public void setEnd(Integer end) {
-        this.end = end;
-    }
-
-    public Integer getEnd() {
-
-        if (this.end != null) {
-            return end;
-        }
-        ValueExpression ve = this.getValueExpression("end");
-        if (ve != null) {
-            return (Integer) ve.getValue(getFacesContext().getELContext());
-        }
-        return null;
-
-    }
-
-    public void setSize(Integer size) {
-        this.end = size;
-    }
-
-    public Integer getSize() {
-
-        if (this.end != null) {
-            return end;
-        }
-        ValueExpression ve = this.getValueExpression("size");
-        if (ve != null) {
-            return (Integer) ve.getValue(getFacesContext().getELContext());
-        }
-        return null;
-
-    }
-
-    public void setOffset(Integer offset) {
-        this.begin = offset;
-    }
-
-    public Integer getOffset() {
-
-        if (this.begin != null) {
-            return this.begin;
-        }
-        ValueExpression ve = this.getValueExpression("offset");
-        if (ve != null) {
-            return (Integer) ve.getValue(getFacesContext().getELContext());
-        }
-        return null;
-
-    }
-
-
-    public void setBegin(Integer begin) {
-        this.begin = begin;
-    }
-
-    public Integer getBegin() {
-
-        if (this.begin != null) {
-            return this.begin;
-        }
-        ValueExpression ve = this.getValueExpression("begin");
-        if (ve != null) {
-            return (Integer) ve.getValue(getFacesContext().getELContext());
-        }
-        return null;
-
-    }
-
-    public void setStep(Integer step) {
-        this.step = step;
-    }
-
-    public Integer getStep() {
-
-        if (this.step != null) {
-            return this.step;
-        }
-        ValueExpression ve = this.getValueExpression("step");
-        if (ve != null) {
-            return (Integer) ve.getValue(getFacesContext().getELContext());
-        }
-        return null;
-
-    }
-
-
-    public String getVar() {
-        return this.var;
-    }
-
-    public void setVar(String var) {
-        this.var = var;
-    }
-
-    public String getVarStatus() {
-        return varStatus;
-    }
-
-    public void setVarStatus(String varStatus) {
-        this.varStatus = varStatus;
-    }
-
-    private void resetDataModel() {
-        if (this.isNestedInIterator()) {
-            this.setDataModel(null);
-        }
-    }
-
-    private void setDataModel(DataModel model) {
-        //noinspection unchecked
-        this.model = model;
-    }
-
-    private DataModel getDataModel() {
-        if (this.model == null) {
-            Object val = this.getValue();
-            if (val == null) {
-                this.model = EMPTY_MODEL;
-            } else if (val instanceof DataModel) {
-                //noinspection unchecked
-                this.model = (DataModel<Object>) val;
-            } else if (val instanceof List) {
-                //noinspection unchecked
-                this.model = new ListDataModel<Object>((List<Object>) val);
-            } else if (Object[].class.isAssignableFrom(val.getClass())) {
-                this.model = new ArrayDataModel<Object>((Object[]) val);
-            } else if (val instanceof ResultSet) {
-                this.model = new ResultSetDataModel((ResultSet) val);
-            } else {
-                this.model = new ScalarDataModel<Object>(val);
-            }
-        }
-        return this.model;
-    }
-
-    public Object getValue() {
-        if (this.value == null) {
-            ValueExpression ve = this.getValueExpression("value");
-            if (ve != null) {
-                return ve.getValue(getFacesContext().getELContext());
-            }
-        }
-        return this.value;
-    }
-
-    public void setValue(Object value) {
-        this.value = value;
-    }
-
-    private transient StringBuffer buffer;
-
-    private StringBuffer getBuffer() {
-        if (this.buffer == null) {
-            this.buffer = new StringBuffer();
-        }
-        this.buffer.setLength(0);
-        return this.buffer;
-    }
-
-    public String getClientId(FacesContext faces) {
-        String id = super.getClientId(faces);
-        if (this.index >= 0) {
-            id = this.getBuffer().append(id).append(
-                    getSeparatorChar(faces)).append(this.index)
-                    .toString();
-        }
-        return id;
-    }
-
-    private transient Object origValueOfVar;
-    private transient Object origValueOfVarStatus;
-
-    private void captureOrigValue(FacesContext ctx) {
-        if (this.var != null || this.varStatus != null) {
-            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
-            if (this.var != null) {
-                this.origValueOfVar = attrs.get(this.var);
-            }
-            if (this.varStatus != null) {
-                this.origValueOfVarStatus = attrs.get(this.varStatus);
-            }
-        }
-    }
-
-    private void restoreOrigValue(FacesContext ctx) {
-        if (this.var != null || this.varStatus != null) {
-            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
-            if (this.var != null) {
-                if (this.origValueOfVar != null) {
-                    attrs.put(this.var, this.origValueOfVar);
-                } else {
-                    attrs.remove(this.var);
-                }
-            }
-            if (this.varStatus != null) {
-                if (this.origValueOfVarStatus != null) {
-                    attrs.put(this.varStatus, this.origValueOfVarStatus);
-                } else {
-                    attrs.remove(this.varStatus);
-                }
-            }
-        }
-    }
-
-    private Map<String,SavedState> childState;
-
-    private Map<String,SavedState> getChildState() {
-        if (this.childState == null) {
-            this.childState = new HashMap<String,SavedState>();
-        }
-        return this.childState;
-    }
-
-    private void saveChildState(FacesContext ctx) {
-        if (this.getChildCount() > 0) {
-
-            for (UIComponent uiComponent : this.getChildren()) {
-                this.saveChildState(ctx, uiComponent);
-            }
-        }
-    }
-
-    private void saveChildState(FacesContext faces, UIComponent c) {
-
-        if (c instanceof EditableValueHolder && !c.isTransient()) {
-            String clientId = c.getClientId(faces);
-            SavedState ss = this.getChildState().get(clientId);
-            if (ss == null) {
-                ss = new SavedState();
-                this.getChildState().put(clientId, ss);
-            }
-            ss.populate((EditableValueHolder) c);
-        }
-
-        // continue hack
-        Iterator itr = c.getFacetsAndChildren();
-        while (itr.hasNext()) {
-            saveChildState(faces, (UIComponent) itr.next());
-        }
-    }
-
-    private void restoreChildState(FacesContext ctx) {
-        if (this.getChildCount() > 0) {
-
-            for (UIComponent uiComponent : this.getChildren()) {
-                this.restoreChildState(ctx, uiComponent);
-            }
-        }
-    }
-
-    private void restoreChildState(FacesContext faces, UIComponent c) {
-        // reset id
-        String id = c.getId();
-        c.setId(id);
-
-        // hack
-        if (c instanceof EditableValueHolder) {
-            EditableValueHolder evh = (EditableValueHolder) c;
-            String clientId = c.getClientId(faces);
-            SavedState ss = this.getChildState().get(clientId);
-            if (ss != null) {
-                ss.apply(evh);
-            } else {
-                NullState.apply(evh);
-            }
-        }
-
-        // continue hack
-        Iterator itr = c.getFacetsAndChildren();
-        while (itr.hasNext()) {
-            restoreChildState(faces, (UIComponent) itr.next());
-        }
-    }
-
-    private boolean keepSaved(FacesContext context) {
-
-        return (hasErrorMessages(context) || isNestedInIterator());
-
-    }
-
-    private boolean hasErrorMessages(FacesContext context) {
-
-        FacesMessage.Severity sev = context.getMaximumSeverity();
-        return (sev != null && (FacesMessage.SEVERITY_ERROR.compareTo(sev) >= 0));
-        
-    }
-
-    
-    private boolean isNestedInIterator() {
-        UIComponent parent = this.getParent();
-        while (parent != null) {
-            if (parent instanceof UIData || parent instanceof UIRepeat) {
-                return true;
-            }
-            parent = parent.getParent();
-        }
-        return false;
-    }
-
-    private void setIndex(FacesContext ctx, int index) {
-
-        // save child state
-        this.saveChildState(ctx);
-
-        this.index = index;
-        DataModel localModel = getDataModel();
-        localModel.setRowIndex(index);
-
-        if (this.index != -1 && this.var != null && localModel.isRowAvailable()) {
-            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
-            attrs.put(var, localModel.getRowData());
-        }
-
-        // restore child state
-        this.restoreChildState(ctx);
-    }
-
-    private void updateIterationStatus(FacesContext ctx, IterationStatus status) {
-        if (this.varStatus != null) {
-            Map<String,Object> attrs = ctx.getExternalContext().getRequestMap();
-            attrs.put(varStatus, status);
-        }
-    }
-
-    private boolean isIndexAvailable() {
-        return this.getDataModel().isRowAvailable();
-    }
-
-    public void process(FacesContext faces, PhaseId phase) {
-
-        // stop if not rendered
-        if (!this.isRendered())
-            return;
-
-        // clear datamodel
-        this.resetDataModel();
-
-        // reset index
-        this.captureOrigValue(faces);
-        this.setIndex(faces, -1);
-
-        try {
-            // has children
-            if (this.getChildCount() > 0) {
-                Iterator itr;
-                UIComponent c;
-
-                Integer begin = this.getBegin();
-                Integer step = this.getStep();
-                Integer end = this.getEnd();
-
-                // grab renderer
-                String rendererType = getRendererType();
-                Renderer renderer = null;
-                if (rendererType != null) {
-                    renderer = getRenderer(faces);
-                }
-
-                int rowCount = getDataModel().getRowCount();
-                int i = ((begin != null) ? begin : 0);
-                int e = ((end != null) ? end : rowCount);
-                int s = ((step != null) ? step : 1);
-                validateIterationControlValues(rowCount, i, e);
-
-                this.setIndex(faces, i);
-                this.updateIterationStatus(faces, new IterationStatus(true, (i + s > e || rowCount == 1), i, begin, end, step));
-                while (i <= e && this.isIndexAvailable()) {
-
-                    if (PhaseId.RENDER_RESPONSE.equals(phase)
-                            && renderer != null) {
-                        renderer.encodeChildren(faces, this);
-                    } else {
-                        itr = this.getChildren().iterator();
-                        while (itr.hasNext()) {
-                            c = (UIComponent) itr.next();
-                            if (PhaseId.APPLY_REQUEST_VALUES.equals(phase)) {
-                                c.processDecodes(faces);
-                            } else if (PhaseId.PROCESS_VALIDATIONS
-                                    .equals(phase)) {
-                                c.processValidators(faces);
-                            } else if (PhaseId.UPDATE_MODEL_VALUES
-                                    .equals(phase)) {
-                                c.processUpdates(faces);
-                            } else if (PhaseId.RENDER_RESPONSE.equals(phase)) {
-                                c.encodeAll(faces);
-                            }
-                        }
-                    }
-                    i += s;
-                    this.setIndex(faces, i);
-                    this.updateIterationStatus(faces, new IterationStatus(false, i + s >= e, i, begin, end, step));
-                }
-            }
-        } catch (IOException e) {
-            throw new FacesException(e);
-        } finally {
-            this.setIndex(faces, -1);
-            this.restoreOrigValue(faces);
-        }
-    }
-
-     public boolean invokeOnComponent(FacesContext faces, String clientId,
-            ContextCallback callback) throws FacesException {
-        String id = super.getClientId(faces);
-        if (clientId.equals(id)) {
-            callback.invokeContextCallback(faces, this);
-            return true;
-        } else if (clientId.startsWith(id)) {
-            int prevIndex = this.index;
-            int idxStart = clientId.indexOf(getSeparatorChar(faces), id
-                    .length());
-            if (idxStart != -1
-                    && Character.isDigit(clientId.charAt(idxStart + 1))) {
-                int idxEnd = clientId.indexOf(getSeparatorChar(faces),
-                        idxStart+1);
-                if (idxEnd != -1) {
-                    int newIndex = Integer.parseInt(clientId.substring(
-                            idxStart+1, idxEnd));
-                    boolean found = false;
-                    try {
-                        this.captureOrigValue(faces);
-                        this.setIndex(faces,newIndex);
-                        if (this.isIndexAvailable()) {
-                            found = super.invokeOnComponent(faces, clientId,
-                                    callback);
-                        }
-                    } finally {
-                        this.setIndex(faces, prevIndex);
-                        this.restoreOrigValue(faces);
-                    }
-                    return found;
-                }
-            } else {
-                return super.invokeOnComponent(faces, clientId, callback);
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public boolean visitTree(VisitContext context, VisitCallback callback) {
-        // First check to see whether we are visitable.  If not
-        // short-circuit out of this subtree, though allow the
-        // visit to proceed through to other subtrees.
-        if (!isVisitable(context)) {
-            return false;
-        }
-
-        FacesContext facesContext = context.getFacesContext();
-        boolean visitRows = requiresRowIteration(facesContext);
-        int oldRowIndex = -1;
-        if (visitRows) {
-            oldRowIndex = getDataModel().getRowIndex();
-            setIndex(facesContext, -1);
-        }
-
-        // Push ourselves to EL
-        pushComponentToEL(facesContext, null);
-
-        try {
-
-            // Visit ourselves.  Note that we delegate to the
-            // VisitContext to actually perform the visit.
-            VisitResult result = context.invokeVisitCallback(this, callback);
-
-            // If the visit is complete, short-circuit out and end the visit
-            if (result == VisitResult.COMPLETE) {
-                return true;
-            }
-
-            // Visit children, short-circuiting as necessary
-            if ((result == VisitResult.ACCEPT) && doVisitChildren(context)) {
-
-                // And finally, visit rows
-                if (!visitRows) {
-                    // visit rows without model access
-                    for (UIComponent kid : getChildren()) {
-                        if (kid.visitTree(context, callback)) {
-                            return true;
-                        }
-                    }
-                } else {
-                    if (visitChildren(context, callback)) {
-                        return true;
-                    }
-                }
-            }
-        }
-        finally {
-            // Clean up - pop EL and restore old row index
-            popComponentFromEL(facesContext);
-            if (visitRows) {
-                setIndex(facesContext, oldRowIndex);
-            }
-        }
-
-        // Return false to allow the visit to continue
-        return false;
-    }
-
-    private boolean requiresRowIteration(FacesContext ctx) {
-
-        return (!PhaseId.RESTORE_VIEW.equals(ctx.getCurrentPhaseId()));
-
-    }
-
-    // Tests whether we need to visit our children as part of
-    // a tree visit
-    private boolean doVisitChildren(VisitContext context) {
-
-        // Just need to check whether there are any ids under this
-        // subtree.  Make sure row index is cleared out since
-        // getSubtreeIdsToVisit() needs our row-less client id.
-        setIndex(context.getFacesContext(), -1);
-        Collection<String> idsToVisit = context.getSubtreeIdsToVisit(this);
-        assert(idsToVisit != null);
-
-        // All ids or non-empty collection means we need to visit our children.
-        return (!idsToVisit.isEmpty());
-
-    }
-
-
-    private void validateIterationControlValues(int rowCount,
-                                                int begin,
-                                                int end) {
-
-        if (rowCount == 0) {
-            return;
-        }
-        // PENDING i18n
-        if (begin > rowCount) {
-            throw new FacesException("Iteration start index is greater than the number of available rows.");
-        }
-        if (begin > end) {
-            throw new FacesException("Iteration start index is greater than the end index.");
-        }
-        if (end > rowCount) {
-            throw new FacesException("Iteration end index is greater than the number of available rows.");
-        }
-    }
-
-
-    private boolean visitChildren(VisitContext context, VisitCallback callback) {
-
-        Integer begin = this.getBegin();
-        Integer end = this.getEnd();
-        Integer step = this.getStep();
-
-        int rowCount = getDataModel().getRowCount();
-        int i = ((begin != null) ? begin : 0);
-        int e = ((end != null) ? end : rowCount);
-        int s = ((step != null) ? step : 1);
-        validateIterationControlValues(rowCount, i, e);
-        FacesContext faces = context.getFacesContext();
-        this.setIndex(faces, i);
-        this.updateIterationStatus(faces,
-                                   new IterationStatus(true,
-                                                       (i + s > e || rowCount == 1),
-                                                       i,
-                                                       begin,
-                                                       end,
-                                                       step));
-        while (i <= e && this.isIndexAvailable()) {
-
-            this.setIndex(faces, i);
-            this.updateIterationStatus(faces,
-                                       new IterationStatus(false,
-                                                           i + s >= e,
-                                                           i,
-                                                           begin,
-                                                           end,
-                                                           step));
-            for (UIComponent kid : getChildren()) {
-                if (kid.visitTree(context, callback)) {
-                    return true;
-                }
-            }
-            i += s;
-        }
-
-
-        return false;
-    }
-
-
-    public void processDecodes(FacesContext faces) {
-        if (!this.isRendered())
-            return;
-        this.setDataModel(null);
-        if (!this.keepSaved(faces)) this.childState = null;
-        this.process(faces, PhaseId.APPLY_REQUEST_VALUES);
-        this.decode(faces);
-    }
-
-    public void processUpdates(FacesContext faces) {
-        if (!this.isRendered()) return;
-        this.resetDataModel();
-        this.process(faces, PhaseId.UPDATE_MODEL_VALUES);
-    }
-
-    public void processValidators(FacesContext faces) {
-        if (!this.isRendered()) return;
-        this.resetDataModel();
-        Application app = faces.getApplication();
-        app.publishEvent(faces, PreValidateEvent.class, this);
-        this.process(faces, PhaseId.PROCESS_VALIDATIONS);
-        app.publishEvent(faces, PostValidateEvent.class, this);
-    }
-
-    private final static SavedState NullState = new SavedState();
-
-    // from RI
-    private final static class SavedState implements Serializable {
-
-        private Object submittedValue;
-
-        private static final long serialVersionUID = 2920252657338389849L;
-
-        Object getSubmittedValue() {
-            return (this.submittedValue);
-        }
-
-        void setSubmittedValue(Object submittedValue) {
-            this.submittedValue = submittedValue;
-        }
-
-        private boolean valid = true;
-
-        boolean isValid() {
-            return (this.valid);
-        }
-
-        void setValid(boolean valid) {
-            this.valid = valid;
-        }
-
-        private Object value;
-
-        Object getValue() {
-            return (this.value);
-        }
-
-        public void setValue(Object value) {
-            this.value = value;
-        }
-
-        private boolean localValueSet;
-
-        boolean isLocalValueSet() {
-            return (this.localValueSet);
-        }
-
-        public void setLocalValueSet(boolean localValueSet) {
-            this.localValueSet = localValueSet;
-        }
-
-        public String toString() {
-            return ("submittedValue: " + submittedValue + " value: " + value
-                    + " localValueSet: " + localValueSet);
-        }
-
-        public void populate(EditableValueHolder evh) {
-            this.value = evh.getValue();
-            this.valid = evh.isValid();
-            this.submittedValue = evh.getSubmittedValue();
-            this.localValueSet = evh.isLocalValueSet();
-        }
-
-        public void apply(EditableValueHolder evh) {
-            evh.setValue(this.value);
-            evh.setValid(this.valid);
-            evh.setSubmittedValue(this.submittedValue);
-            evh.setLocalValueSet(this.localValueSet);
-        }
-
-    }
-
-    private static final class IndexedEvent extends FacesEvent {
-
-        private final FacesEvent target;
-
-        private final int index;
-
-        public IndexedEvent(UIRepeat owner, FacesEvent target, int index) {
-            super(owner);
-            this.target = target;
-            this.index = index;
-        }
-
-        public PhaseId getPhaseId() {
-            return (this.target.getPhaseId());
-        }
-
-        public void setPhaseId(PhaseId phaseId) {
-            this.target.setPhaseId(phaseId);
-        }
-
-        public boolean isAppropriateListener(FacesListener listener) {
-            return this.target.isAppropriateListener(listener);
-        }
-
-        public void processListener(FacesListener listener) {
-            UIRepeat owner = (UIRepeat) this.getComponent();
-            int prevIndex = owner.index;
-            FacesContext ctx = FacesContext.getCurrentInstance();
-            try {
-                owner.setIndex(ctx,this.index);
-                if (owner.isIndexAvailable()) {
-                    this.target.processListener(listener);
-                }
-            } finally {
-                owner.setIndex(ctx,prevIndex);
-            }
-        }
-
-        public int getIndex() {
-            return index;
-        }
-
-        public FacesEvent getTarget() {
-            return target;
-        }
-
-    }
-
-    public void broadcast(FacesEvent event) throws AbortProcessingException {
-        if (event instanceof IndexedEvent) {
-            IndexedEvent idxEvent = (IndexedEvent) event;
-            this.resetDataModel();
-            int prevIndex = this.index;
-            FacesContext ctx = FacesContext.getCurrentInstance();
-            FacesEvent target = idxEvent.getTarget();
-            UIComponent source = target.getComponent();
-            UIComponent compositeParent = null;
-            try {
-                int rowCount = getDataModel().getRowCount();
-                int idx = idxEvent.getIndex();
-                this.setIndex(ctx, idx);
-                Integer begin = this.getBegin();
-                Integer end = this.getEnd();
-                Integer step = this.getStep();
-                int b = ((end != null) ? end : 0);
-                int e = ((end != null) ? end : rowCount);
-                int s = ((step != null) ? step : 1);
-                this.updateIterationStatus(ctx,
-                                           new IterationStatus(idx == b,
-                                                               (idx + s >= e || rowCount == 1),
-                                                               idx,
-                                                               begin,
-                                                               end,
-                                                               step));
-                if (this.isIndexAvailable()) {
-                    if (!UIComponent.isCompositeComponent(source)) {
-                        compositeParent = UIComponent
-                              .getCompositeComponentParent(source);
-                    }
-                    if (compositeParent != null) {
-                        compositeParent.pushComponentToEL(ctx, null);
-                    }
-                    source.pushComponentToEL(ctx, null);
-                    source.broadcast(target);
-
-                }
-            } finally {
-                source.popComponentFromEL(ctx);
-                if (compositeParent != null) {
-                    compositeParent.popComponentFromEL(ctx);
-                }
-                this.updateIterationStatus(ctx, null);
-                this.setIndex(ctx, prevIndex);
-            }
-        } else {
-            super.broadcast(event);
-        }
-    }
-
-    public void queueEvent(FacesEvent event) {
-        super.queueEvent(new IndexedEvent(this, event, this.index));
-    }
-
-    public void restoreState(FacesContext faces, Object object) {
-        if (faces == null) {
-            throw new NullPointerException();
-        }
-        if (object == null) {
-            return;
-        }
-        Object[] state = (Object[]) object;
-        super.restoreState(faces, state[0]);
-        //noinspection unchecked
-        this.childState = (Map<String,SavedState>) state[1];
-        this.begin = (Integer) state[2];
-        this.end = (Integer) state[3];
-        this.step = (Integer) state[4];
-        this.var = (String) state[5];
-        this.varStatus = (String) state[6];
-        this.value = state[7];
-    }
-
-    public Object saveState(FacesContext faces) {
-        if (faces == null) {
-            throw new NullPointerException();
-        }
-        Object[] state = new Object[8];
-        state[0] = super.saveState(faces);
-        state[1] = this.childState;
-        state[2] = this.begin;
-        state[3] = this.end;
-        state[4] = this.step;
-        state[5] = this.var;
-        state[6] = this.varStatus;
-        state[7] = this.value;
-        return state;
-    }
-
-    public void encodeChildren(FacesContext faces) throws IOException {
-        if (!isRendered()) {
-            return;
-        }
-        this.setDataModel(null);
-        if (!this.keepSaved(faces)) {
-            this.childState = null;
-        }
-        this.process(faces, PhaseId.RENDER_RESPONSE);
-    }
-
-    public boolean getRendersChildren() {
-        if (getRendererType() != null) {
-            Renderer renderer = getRenderer(getFacesContext());
-            if (renderer != null) {
-                return renderer.getRendersChildren();
-            }
-        }
-        return true;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/CompositeFunctionMapper.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/CompositeFunctionMapper.java
deleted file mode 100644
index 58b87e1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/CompositeFunctionMapper.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import javax.el.FunctionMapper;
-import java.lang.reflect.Method;
-
-/**
- * Composite FunctionMapper that attempts to load the Method from the first
- * FunctionMapper, then the second if <code>null</code>.
- * 
- * @see javax.el.FunctionMapper
- * @see java.lang.reflect.Method
- * 
- * @author Jacob Hookom
- * @version $Id: CompositeFunctionMapper.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class CompositeFunctionMapper extends FunctionMapper {
-
-    private final FunctionMapper fn0;
-
-    private final FunctionMapper fn1;
-
-    public CompositeFunctionMapper(FunctionMapper fn0, FunctionMapper fn1) {
-        this.fn0 = fn0;
-        this.fn1 = fn1;
-    }
-
-    /**
-     * @see javax.el.FunctionMapper#resolveFunction(java.lang.String, java.lang.String)
-     */
-    public Method resolveFunction(String prefix, String name) {
-        Method m = this.fn0.resolveFunction(prefix, name);
-        if (m == null) {
-            return this.fn1.resolveFunction(prefix, name);
-        }
-        return m;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/CompositeVariableMapper.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/CompositeVariableMapper.java
deleted file mode 100644
index b24b3f2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/CompositeVariableMapper.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.el;
-
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-
-/**
- * Composite VariableMapper that attempts to load the ValueExpression from the first
- * VariableMapper, then the second if <code>null</code>.
- * 
- * @see javax.el.VariableMapper
- * @see javax.el.ValueExpression
- * 
- * @author Jacob Hookom
- * @version $Id: CompositeVariableMapper.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class CompositeVariableMapper extends VariableMapper {
-
-    private final VariableMapper var0;
-
-    private final VariableMapper var1;
-
-    public CompositeVariableMapper(VariableMapper var0, VariableMapper var1) {
-        this.var0 = var0;
-        this.var1 = var1;
-    }
-
-    /**
-     * @see javax.el.VariableMapper#resolveVariable(java.lang.String)
-     */
-    public ValueExpression resolveVariable(String name) {
-        ValueExpression ve = this.var0.resolveVariable(name);
-        if (ve == null) {
-            return this.var1.resolveVariable(name);
-        }
-        return ve;
-    }
-
-    /**
-     * @see javax.el.VariableMapper#setVariable(java.lang.String, javax.el.ValueExpression)
-     */
-    public ValueExpression setVariable(String name, ValueExpression expression) {
-        return this.var0.setVariable(name, expression);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/ContextualCompositeMethodExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/ContextualCompositeMethodExpression.java
deleted file mode 100644
index b457f62..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/ContextualCompositeMethodExpression.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import com.sun.faces.component.CompositeComponentStackManager;
-
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
-import javax.el.MethodInfo;
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.view.Location;
-
-/**
- * <p>
- * This specialized <code>MethodExpression</code> enables the evaluation of
- * composite component expressions.  Instances of this expression will be created
- * when {@link com.sun.faces.facelets.tag.TagAttributeImpl#getValueExpression(javax.faces.view.facelets.FaceletContext, Class)}
- * is invoked and the expression represents a composite component expression (i.e. #{cc.[properties]}).
- * </p>
- *
- * <p>
- * It's important to note that these <code>MethodExpression</code>s are context
- * sensitive in that they leverage the location in which they were referenced
- * in order to push the proper composite component to the evaluation context
- * prior to evaluating the expression itself.
- * </p>
- *
- * Here's an example:
- *
- * <pre>
- * Using Page test.xhtml
- * ---------------------------------
- *    <ez:comp1 do="#{bean.action}" />
- *
- *
- * comp1.xhtml
- * ---------------------------------
- * <composite:interface>
- *    <composite:attribute name="do" method-signature="String f()" required="true" />
- * </composite:interface>
- * <composite:implementation>
- *    <ez:nesting>
- *       <h:commandButton value="Click Me!" action="#{cc.attrs.do} />
- *    </ez:nesting>
- * </composite:implementation>
- *
- * nesting.xhtml
- * ---------------------------------
- * <composite:interface />
- * <composite:implementation>
- *    <composite:insertChildren>
- * </composite:implementation>
- * </pre>
- *
- * When <code>commandButton</code> is clicked, the <code>ContextualCompositeMethodExpression</code>
- * first is looked up by {@link com.sun.faces.facelets.tag.TagAttributeImpl.AttributeLookupMethodExpression}
- * which results an instance of <code>ContextualCompositeMethodExpression</code>.
- * When this <code>ContextualCompositeMethodExpression is invoked, the {@link javax.faces.view.Location}
- * object necessary to find the proper composite component will be derived from
- * source <code>ValueExpression</code> provided at construction time.  Using the
- * derived {@link javax.faces.view.Location}, we can find the composite component
- * that matches 'owns' the template in which the expression was defined in by
- * comparing the path of the Location with the name and library of the {@link javax.faces.application.Resource}
- * instance associated with each composite component.  If a matching composite
- * component is found, it will be made available to the EL by calling {@link CompositeComponentStackManager#push(javax.faces.component.UIComponent)}.
- * </p>
- */
-public class ContextualCompositeMethodExpression extends MethodExpression {
-
-    private final MethodExpression delegate;
-    private final ValueExpression source;
-    private final Location location;
-
-
-    // -------------------------------------------------------- Constructors
-
-
-    public ContextualCompositeMethodExpression(ValueExpression source,
-                                               MethodExpression delegate) {
-
-        this.delegate = delegate;
-        this.source = source;
-        this.location = null;
-
-    }
-
-
-    public ContextualCompositeMethodExpression(Location location,
-                                               MethodExpression delegate) {
-
-        this.delegate = delegate;
-        this.location = location;
-        this.source = null;
-    }
-
-
-    // ------------------------------------------- Methods from MethodExpression
-
-
-    public MethodInfo getMethodInfo(ELContext elContext) {
-
-        return delegate.getMethodInfo(elContext);
-
-    }
-
-    public Object invoke(ELContext elContext, Object[] objects) {
-
-        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
-        try {
-            boolean pushed = pushCompositeComponent(ctx);
-            try {
-                return delegate.invoke(elContext, objects);
-            } finally {
-                if (pushed) {
-                    popCompositeComponent(ctx);
-                }
-            }
-        } catch (ELException ele) {
-            if (source != null) {
-                // special handling when an ELException handling.  This is necessary
-                // when there are multiple levels of composite component nesting.
-                // When this happens, we need to evaluate the source expression
-                // to find and invoke the MethodExpression at the next highest
-                // nesting level.  Is there a cleaner way to detect this case?
-                Object fallback = source.getValue(elContext);
-                if (fallback != null && fallback instanceof MethodExpression) {
-                    return ((MethodExpression) fallback).invoke(elContext, objects);
-                } else {
-                    throw ele;
-                }
-            }
-            throw ele;
-        }
-
-    }
-
-
-    // ------------------------------------------------- Methods from Expression
-
-
-    public String getExpressionString() {
-
-        return delegate.getExpressionString();
-
-    }
-
-
-    @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"})
-    public boolean equals(Object o) {
-
-        return delegate.equals(o);
-
-    }
-
-
-    public int hashCode() {
-
-        return delegate.hashCode();
-
-    }
-
-
-    public boolean isLiteralText() {
-
-        return delegate.isLiteralText();
-
-    }
-
-
-    // ----------------------------------------------------- Private Methods
-
-
-    private boolean pushCompositeComponent(FacesContext ctx) {
-
-        CompositeComponentStackManager manager =
-              CompositeComponentStackManager.getManager(ctx);
-        UIComponent cc = null;
-
-        if (location != null) {
-            cc = manager.findCompositeComponentUsingLocation(ctx, location);
-        } else {
-            // We need to obtain the Location of the source expression in order
-            // to find the composite component that needs to be available within
-            // the evaluation stack.
-            if (source instanceof TagValueExpression) {
-                ValueExpression orig = ((TagValueExpression) source).getWrapped();
-                if (orig instanceof ContextualCompositeValueExpression) {
-                    cc = manager.findCompositeComponentUsingLocation(ctx, ((ContextualCompositeValueExpression) orig).getLocation());
-                }
-            }
-        }
-
-        return manager.push(cc);
-
-    }
-
-
-    private void popCompositeComponent(FacesContext ctx) {
-
-        CompositeComponentStackManager manager =
-              CompositeComponentStackManager.getManager(ctx);
-        manager.pop();
-
-    }
-
-} // END ContextualCompositeMethodExpression
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/ContextualCompositeValueExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/ContextualCompositeValueExpression.java
deleted file mode 100644
index cae9a6c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/ContextualCompositeValueExpression.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import com.sun.faces.component.CompositeComponentStackManager;
-
-import javax.el.ValueExpression;
-import javax.el.ELContext;
-import javax.faces.view.Location;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * <p>
- * This specialized <code>ValueExpression</code> enables the evaluation of
- * composite component expressions.  Instances of this expression will be
- * created when {@link com.sun.faces.facelets.tag.TagAttributeImpl#getValueExpression(javax.faces.view.facelets.FaceletContext, Class)}
- * is invoked and the expression represents a composite component expression (i.e. #{cc.[properties]}).
- * </p>
- *
- * <p>
- * It's important to note that these <code>ValueExpression</code>s are context
- * sensitive in that they leverage the location in which they were referenced
- * in order to push the proper composite component to the evaluation context
- * prior to evaluating the expression itself.
- * </p>
- *
- * Here's an example:
- *
- * <pre>
- * Using Page test.xhtml
- * ---------------------------------
- *    <ez:comp1 greeting="Hello!" />
- *
- *
- * comp1.xhtml
- * ---------------------------------
- * <composite:interface>
- *    <composite:attribute name="greeting" type="java.lang.String" required="true" />
- * </composite:interface>
- * <composite:implementation>
- *    <ez:nesting>
- *       <h:outputText value="#{cc.attrs.greetings}" />
- *    </ez:nesting>
- * </composite:implementation>
- *
- * nesting.xhtml
- * ---------------------------------
- * <composite:interface />
- * <composite:implementation>
- *    <composite:insertChildren>
- * </composite:implementation>
- * </pre>
- *
- * <p>
- * In the above example, there will be two composite components available to
- * the runtime: <code>ez:comp1</code> and <code>ez:nesting</code>.
- * </p>
- *
- * <p>
- * When <h:outputText value="#{cc.attrs.greeting}" />, prior to attempting
- * to evaluate the expression, the {@link Location} object will be used to
- * find the composite component that 'owns' the template in which
- * the expression was defined in by comparing the path of the Location with the
- * name and library of the {@link javax.faces.application.Resource} instance associated
- * with each composite component.  If a matching composite component is found,
- * it will be made available to the EL by calling {@link CompositeComponentStackManager#push(javax.faces.component.UIComponent)}.
- * </p>
- */
-public final class ContextualCompositeValueExpression extends ValueExpression {
-
-    private ValueExpression originalVE;
-    private Location location;
-
-
-    // ---------------------------------------------------- Constructors
-
-
-    /* For serialization purposes */
-    public ContextualCompositeValueExpression() { }
-
-
-    public ContextualCompositeValueExpression(Location location,
-                                              ValueExpression originalVE) {
-
-        this.originalVE = originalVE;
-        this.location = location;
-
-    }
-
-
-    // ------------------------------------ Methods from ValueExpression
-
-
-    public Object getValue(ELContext elContext) {
-
-        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
-        boolean pushed = pushCompositeComponent(ctx);
-        try {
-            return originalVE.getValue(elContext);
-        } finally {
-            if (pushed) {
-                popCompositeComponent(ctx);
-            }
-        }
-
-    }
-
-    public void setValue(ELContext elContext, Object o) {
-
-        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
-         boolean pushed = pushCompositeComponent(ctx);
-        try {
-            originalVE.setValue(elContext, o);
-        } finally {
-            if (pushed) {
-                popCompositeComponent(ctx);
-            }
-        }
-
-    }
-
-    public boolean isReadOnly(ELContext elContext) {
-
-        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
-        boolean pushed = pushCompositeComponent(ctx);
-        try {
-            return originalVE.isReadOnly(elContext);
-        } finally {
-            if (pushed) {
-                popCompositeComponent(ctx);
-            }
-        }
-
-    }
-
-    public Class<?> getType(ELContext elContext) {
-
-        FacesContext ctx = (FacesContext) elContext.getContext(FacesContext.class);
-        boolean pushed = pushCompositeComponent(ctx);
-        try {
-            return originalVE.getType(elContext);
-        } finally {
-            if (pushed) {
-                popCompositeComponent(ctx);
-            }
-        }
-
-    }
-
-    public Class<?> getExpectedType() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        boolean pushed = pushCompositeComponent(ctx);
-        try {
-            return originalVE.getExpectedType();
-        } finally {
-            if (pushed) {
-                popCompositeComponent(ctx);
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------- Methods from Expression
-
-
-    public String getExpressionString() {
-        return originalVE.getExpressionString();
-    }
-
-    @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"})
-    public boolean equals(Object o) {
-        return originalVE.equals(o);
-    }
-
-    public int hashCode() {
-        return originalVE.hashCode();
-    }
-
-    public boolean isLiteralText() {
-        return originalVE.isLiteralText();
-    }
-
-    @Override
-    public String toString() {
-        return originalVE.toString();
-    }
-
-
-    // ------------------------------------------------------ Public Methods
-
-
-    /**
-     * @return the {@link Location} of this <code>ValueExpression</code>
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-
-    // ----------------------------------------------------- Private Methods
-
-
-    private boolean pushCompositeComponent(FacesContext ctx) {
-
-        CompositeComponentStackManager manager =
-              CompositeComponentStackManager.getManager(ctx);
-        UIComponent cc = manager.findCompositeComponentUsingLocation(ctx, location);
-        return manager.push(cc);
-
-    }
-
-
-    private void popCompositeComponent(FacesContext ctx) {
-
-        CompositeComponentStackManager manager =
-              CompositeComponentStackManager.getManager(ctx);
-        manager.pop();
-
-    }
-
-
-} // END ContextualCompositeValueExpression
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/DefaultFunctionMapper.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/DefaultFunctionMapper.java
deleted file mode 100644
index 27a9b78..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/DefaultFunctionMapper.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import com.sun.faces.facelets.util.ReflectionUtil;
-
-import javax.el.FunctionMapper;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Default implementation of the FunctionMapper
- *
- * @author Jacob Hookom
- * @version $Id: DefaultFunctionMapper.java 8384 2010-05-17 14:59:38Z jdlee $
- * @see java.lang.reflect.Method
- * @see javax.el.FunctionMapper
- */
-public final class DefaultFunctionMapper extends FunctionMapper implements
-                                                                Externalizable {
-
-    private static final long serialVersionUID = 1L;
-
-    private Map functions = null;
-
-    /*
-      * (non-Javadoc)
-      *
-      * @see javax.el.FunctionMapper#resolveFunction(java.lang.String,
-      *      java.lang.String)
-      */
-    public Method resolveFunction(String prefix, String localName) {
-        if (this.functions != null) {
-            Function f = (Function) this.functions
-                  .get(prefix + ":" + localName);
-            return f.getMethod();
-        }
-        return null;
-    }
-
-    public void addFunction(String prefix, String localName, Method m) {
-        if (this.functions == null) {
-            this.functions = new HashMap();
-        }
-        Function f = new Function(prefix, localName, m);
-        synchronized (this) {
-            this.functions.put(prefix + ":" + localName, f);
-        }
-    }
-
-    /*
-      * (non-Javadoc)
-      *
-      * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
-      */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(this.functions);
-    }
-
-    /*
-      * (non-Javadoc)
-      *
-      * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
-      */
-    public void readExternal(ObjectInput in) throws IOException,
-                                                    ClassNotFoundException {
-        this.functions = (Map) in.readObject();
-    }
-
-    public String toString() {
-        StringBuffer sb = new StringBuffer(128);
-        sb.append("FunctionMapper[\n");
-        for (Iterator itr = this.functions.values().iterator();
-             itr.hasNext();) {
-            sb.append(itr.next()).append('\n');
-        }
-        sb.append(']');
-        return sb.toString();
-    }
-
-    private static class Function implements Externalizable {
-
-        private static final long serialVersionUID = 1L;
-
-        protected transient Method m;
-
-        protected String owner;
-
-        protected String name;
-
-        protected String[] types;
-
-        protected String prefix;
-
-        protected String localName;
-
-        /**
-         *
-         */
-        public Function(String prefix, String localName, Method m) {
-            if (localName == null) {
-                throw new NullPointerException("LocalName cannot be null");
-            }
-            if (m == null) {
-                throw new NullPointerException("Method cannot be null");
-            }
-            this.prefix = prefix;
-            this.localName = localName;
-            this.m = m;
-        }
-
-        public Function() {
-            // for serialization
-        }
-
-        /*
-           * (non-Javadoc)
-           *
-           * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
-           */
-        public void writeExternal(ObjectOutput out) throws IOException {
-            out.writeUTF((this.prefix != null) ? this.prefix : "");
-            out.writeUTF(this.localName);
-            out.writeUTF(this.m.getDeclaringClass().getName());
-            out.writeUTF(this.m.getName());
-            out.writeObject(ReflectionUtil.toTypeNameArray(this.m
-                  .getParameterTypes()));
-        }
-
-        /*
-           * (non-Javadoc)
-           *
-           * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
-           */
-        public void readExternal(ObjectInput in) throws IOException,
-                                                        ClassNotFoundException {
-
-            this.prefix = in.readUTF();
-            if ("".equals(this.prefix)) {
-                this.prefix = null;
-            }
-            this.localName = in.readUTF();
-            this.owner = in.readUTF();
-            this.name = in.readUTF();
-            this.types = (String[]) in.readObject();
-        }
-
-        public Method getMethod() {
-            if (this.m == null) {
-                try {
-                    Class t = ReflectionUtil.forName(this.owner);
-                    Class[] p = ReflectionUtil.toTypeArray(this.types);
-                    this.m = t.getMethod(this.name, p);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-            return this.m;
-        }
-
-        public boolean matches(String prefix, String localName) {
-            if (this.prefix != null) {
-                if (prefix == null) {
-                    return false;
-                }
-                if (!this.prefix.equals(prefix)) {
-                    return false;
-                }
-            }
-            return this.localName.equals(localName);
-        }
-
-        /*
-           * (non-Javadoc)
-           *
-           * @see java.lang.Object#equals(java.lang.Object)
-           */
-        public boolean equals(Object obj) {
-            if (obj instanceof Function) {
-                return this.hashCode() == obj.hashCode();
-            }
-            return false;
-        }
-
-        /*
-           * (non-Javadoc)
-           *
-           * @see java.lang.Object#hashCode()
-           */
-        public int hashCode() {
-            return (this.prefix + this.localName).hashCode();
-        }
-
-        public String toString() {
-            StringBuffer sb = new StringBuffer(32);
-            sb.append("Function[");
-            if (this.prefix != null) {
-                sb.append(this.prefix).append(':');
-            }
-            sb.append(this.name).append("] ");
-            sb.append(this.m);
-            return sb.toString();
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/DefaultVariableMapper.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/DefaultVariableMapper.java
deleted file mode 100644
index d28d335..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/DefaultVariableMapper.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.el;
-
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Default instance of a VariableMapper backed by a Map
- * 
- * @see javax.el.VariableMapper
- * @see javax.el.ValueExpression
- * @see java.util.Map
- * 
- * @author Jacob Hookom
- * @version $Id: DefaultVariableMapper.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class DefaultVariableMapper extends VariableMapper {
-
-    private Map vars;
-
-    public DefaultVariableMapper() {
-        super();
-    }
-
-    /**
-     * @see javax.el.VariableMapper#resolveVariable(java.lang.String)
-     */
-    public ValueExpression resolveVariable(String name) {
-        if (this.vars != null) {
-            return (ValueExpression) this.vars.get(name);
-        }
-        return null;
-    }
-
-    /**
-     * @see javax.el.VariableMapper#setVariable(java.lang.String, javax.el.ValueExpression)
-     */
-    public ValueExpression setVariable(String name, ValueExpression expression) {
-        if (this.vars == null) {
-            this.vars = new HashMap();
-        }
-        return (ValueExpression) this.vars.put(name, expression);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/ELText.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/ELText.java
deleted file mode 100644
index 649f7fd..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/ELText.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.el;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Handles parsing EL Strings in accordance with the EL-API Specification. The
- * parser accepts either <code>${..}</code> or <code>#{..}</code>.
- * 
- * @author Jacob Hookom
- * @version $Id: ELText.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public class ELText {
-
-    private static final class LiteralValueExpression extends ValueExpression {
-
-        /**
-         * 
-         */
-        private static final long serialVersionUID = 1L;
-
-        private final String text;
-
-        public LiteralValueExpression(String text) {
-            this.text = text;
-        }
-
-        public boolean isLiteralText() {
-            return false;
-        }
-
-        public int hashCode() {
-            return 0;
-        }
-
-        public String getExpressionString() {
-            return this.text;
-        }
-
-        public boolean equals(Object obj) {
-            return false;
-        }
-
-        public void setValue(ELContext context, Object value) {
-        }
-
-        public boolean isReadOnly(ELContext context) {
-            return false;
-        }
-
-        public Object getValue(ELContext context) {
-            return null;
-        }
-
-        public Class getType(ELContext context) {
-            return null;
-        }
-
-        public Class getExpectedType() {
-            return null;
-        }
-
-    }
-
-    private static final class ELTextComposite extends ELText {
-        private final ELText[] txt;
-
-        public ELTextComposite(ELText[] txt) {
-            super(null);
-            this.txt = txt;
-        }
-
-        public void write(Writer out, ELContext ctx) throws ELException,
-                IOException {
-            for (int i = 0; i < this.txt.length; i++) {
-                this.txt[i].write(out, ctx);
-            }
-        }
-
-        public void writeText(ResponseWriter out, ELContext ctx)
-                throws ELException, IOException {
-            for (int i = 0; i < this.txt.length; i++) {
-                this.txt[i].writeText(out, ctx);
-            }
-        }
-
-        public String toString(ELContext ctx) {
-            StringBuffer sb = new StringBuffer();
-            for (int i = 0; i < this.txt.length; i++) {
-                sb.append(this.txt[i].toString(ctx));
-            }
-            return sb.toString();
-        }
-
-        /*
-         * public String toString(ELContext ctx) { StringBuffer sb = new
-         * StringBuffer(); for (int i = 0; i < this.txt.length; i++) {
-         * sb.append(this.txt[i].toString(ctx)); } return sb.toString(); }
-         */
-
-        public String toString() {
-            StringBuffer sb = new StringBuffer();
-            for (int i = 0; i < this.txt.length; i++) {
-                sb.append(this.txt[i].toString());
-            }
-            return sb.toString();
-        }
-
-        public boolean isLiteral() {
-            return false;
-        }
-
-        public ELText apply(ExpressionFactory factory, ELContext ctx) {
-            int len = this.txt.length;
-            ELText[] nt = new ELText[len];
-            for (int i = 0; i < len; i++) {
-                nt[i] = this.txt[i].apply(factory, ctx);
-            }
-            return new ELTextComposite(nt);
-        }
-    }
-
-    private static final class ELTextVariable extends ELText {
-        private final ValueExpression ve;
-
-        public ELTextVariable(ValueExpression ve) {
-            super(ve.getExpressionString());
-            this.ve = ve;
-        }
-
-        public boolean isLiteral() {
-            return false;
-        }
-
-        public ELText apply(ExpressionFactory factory, ELContext ctx) {
-            return new ELTextVariable(factory.createValueExpression(ctx,
-                    this.ve.getExpressionString(), String.class));
-        }
-
-        public void write(Writer out, ELContext ctx) throws ELException,
-                IOException {
-            Object v = this.ve.getValue(ctx);
-            if (v != null) {
-                out.write((String) v);
-            }
-        }
-
-        public String toString(ELContext ctx) throws ELException {
-            Object v = this.ve.getValue(ctx);
-            if (v != null) {
-                return v.toString();
-            }
-
-            return null;
-        }
-
-        public void writeText(ResponseWriter out, ELContext ctx)
-                throws ELException, IOException {
-            Object v = this.ve.getValue(ctx);
-            if (v != null) {
-                out.writeText((String) v, null);
-            }
-        }
-    }
-
-    protected final String literal;
-
-    public ELText(String literal) {
-        this.literal = literal;
-    }
-
-    /**
-     * If it's literal text
-     * 
-     * @return true if the String is literal (doesn't contain <code>#{..}</code>
-     *         or <code>${..}</code>)
-     */
-    public boolean isLiteral() {
-        return true;
-    }
-
-    /**
-     * Return an instance of <code>this</code> that is applicable given the
-     * ELContext and ExpressionFactory state.
-     * 
-     * @param factory
-     *            the ExpressionFactory to use
-     * @param ctx
-     *            the ELContext to use
-     * @return an ELText instance
-     */
-    public ELText apply(ExpressionFactory factory, ELContext ctx) {
-        return this;
-    }
-
-    /**
-     * Allow this instance to write to the passed Writer, given the ELContext
-     * state
-     * 
-     * @param out
-     *            Writer to write to
-     * @param ctx
-     *            current ELContext state
-     * @throws ELException
-     * @throws IOException
-     */
-    public void write(Writer out, ELContext ctx) throws ELException,
-            IOException {
-        out.write(this.literal);
-    }
-
-    public void writeText(ResponseWriter out, ELContext ctx)
-            throws ELException, IOException {
-        out.writeText(this.literal, null);
-    }
-
-    /**
-     * Evaluates the ELText to a String
-     * 
-     * @param ctx
-     *            current ELContext state
-     * @throws ELException
-     * @return the evaluated String
-     */
-    public String toString(ELContext ctx) throws ELException {
-        return this.literal;
-    }
-
-    public String toString() {
-        return this.literal;
-    }
-
-    /**
-     * Parses the passed string to determine if it's literal or not
-     * 
-     * @param in
-     *            input String
-     * @return true if the String is literal (doesn't contain <code>#{..}</code>
-     *         or <code>${..}</code>)
-     */
-    public static boolean isLiteral(String in) {
-        ELText txt = parse(in);
-        return txt == null || txt.isLiteral();
-    }
-
-    /**
-     * Factory method for creating an unvalidated ELText instance. NOTE: All
-     * expressions in the passed String are treated as
-     * {@link com.sun.faces.facelets.el.ELText.LiteralValueExpression}
-     * 
-     * @param in
-     *            String to parse
-     * @return ELText instance that knows if the String was literal or not
-     * @throws javax.el.ELException
-     */
-    public static ELText parse(String in) throws ELException {
-        return parse(null, null, in);
-    }
-
-    /**
-     * Factory method for creating a validated ELText instance. When an
-     * Expression is hit, it will use the ExpressionFactory to create a
-     * ValueExpression instance, resolving any functions at that time. <p/>
-     * Variables and properties will not be evaluated.
-     * 
-     * @param fact
-     *            ExpressionFactory to use
-     * @param ctx
-     *            ELContext to validate against
-     * @param in
-     *            String to parse
-     * @return ELText that can be re-applied later
-     * @throws javax.el.ELException
-     */
-    public static ELText parse(ExpressionFactory fact, ELContext ctx, String in)
-            throws ELException {
-        char[] ca = in.toCharArray();
-        int i = 0;
-        char c = 0;
-        int len = ca.length;
-        int end = len - 1;
-        boolean esc = false;
-        int vlen = 0;
-
-        StringBuffer buff = new StringBuffer(128);
-        List text = new ArrayList();
-        ELText t = null;
-        ValueExpression ve = null;
-
-        while (i < len) {
-            c = ca[i];
-            if ('\\' == c) {
-                esc = !esc;
-                if (esc && i < end && (ca[i + 1] == '$' || ca[i + 1] == '#')) {
-                    i++;
-                    continue;
-                }
-            } else if (!esc && ('$' == c || '#' == c)) {
-                if (i < end) {
-                    if ('{' == ca[i + 1]) {
-                        if (buff.length() > 0) {
-                            text.add(new ELText(buff.toString()));
-                            buff.setLength(0);
-                        }
-                        vlen = findVarLength(ca, i);
-                        if (ctx != null && fact != null) {
-                            ve = fact.createValueExpression(ctx, new String(ca,
-                                    i, vlen), String.class);
-                            t = new ELTextVariable(ve);
-                        } else {
-                            t = new ELTextVariable(new LiteralValueExpression(
-                                    new String(ca, i, vlen)));
-                        }
-                        text.add(t);
-                        i += vlen;
-                        continue;
-                    }
-                }
-            }
-            esc = false;
-            buff.append(c);
-            i++;
-        }
-
-        if (buff.length() > 0) {
-            text.add(new ELText(buff.toString()));
-            buff.setLength(0);
-        }
-
-        if (text.size() == 0) {
-            return null;
-        } else if (text.size() == 1) {
-            return (ELText) text.get(0);
-        } else {
-            ELText[] ta = (ELText[]) text.toArray(new ELText[text.size()]);
-            return new ELTextComposite(ta);
-        }
-    }
-
-    private static int findVarLength(char[] ca, int s) throws ELException {
-        int i = s;
-        int len = ca.length;
-        char c = 0;
-        int str = 0;
-        while (i < len) {
-            c = ca[i];
-            if ('\\' == c && i<len-1) {
-                i++;
-            } else if ('\'' == c || '"' == c) {
-                if (str == c) {
-                    str = 0;
-                } else {
-                    str = c;
-                }
-            } else if (str == 0 && ('}' == c)) {
-                return i - s + 1;
-            }
-            i++;
-        }
-        throw new ELException("EL Expression Unbalanced: ... "
-                + new String(ca, s, i - s));
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyELContext.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyELContext.java
deleted file mode 100644
index 6b56d13..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyELContext.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import javax.el.*;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.VariableResolver;
-import java.lang.reflect.Method;
-import java.util.*;
-
-/**
- * 
- * 
- * @author Jacob Hookom
- * @version $Id: LegacyELContext.java 8384 2010-05-17 14:59:38Z jdlee $
- * @deprecated
- */
-public final class LegacyELContext extends ELContext {
-
-    private static final String[] IMPLICIT_OBJECTS = new String[] {
-            "application", "applicationScope", "cookie", "facesContext",
-            "header", "headerValues", "initParam", "param", "paramValues",
-            "request", "requestScope", "session", "sessionScope", "view" };
-
-    private final static FunctionMapper functions = new EmptyFunctionMapper();
-
-    private final FacesContext faces;
-
-    private final ELResolver resolver;
-
-    private final VariableMapper variables;
-
-    public LegacyELContext(FacesContext faces) {
-        this.faces = faces;
-        this.resolver = new LegacyELResolver();
-        this.variables = new DefaultVariableMapper();
-    }
-
-    public ELResolver getELResolver() {
-        return this.resolver;
-    }
-
-    public FunctionMapper getFunctionMapper() {
-        return functions;
-    }
-
-    public VariableMapper getVariableMapper() {
-        return this.variables;
-    }
-    
-    public FacesContext getFacesContext() {
-        return this.faces;
-    }
-
-    private final class LegacyELResolver extends ELResolver {
-
-        public Class getCommonPropertyType(ELContext context, Object base) {
-            return Object.class;
-        }
-
-        public Iterator getFeatureDescriptors(ELContext context, Object base) {
-            return Collections.EMPTY_LIST.iterator();
-        }
-
-        private VariableResolver getVariableResolver() {
-            return faces.getApplication().getVariableResolver();
-        }
-
-        private PropertyResolver getPropertyResolver() {
-            return faces.getApplication().getPropertyResolver();
-        }
-
-        public Class getType(ELContext context, Object base, Object property) {
-            if (property == null) {
-                return null;
-            }
-            try {
-                context.setPropertyResolved(true);
-                if (base == null) {
-                    Object obj = this.getVariableResolver().resolveVariable(
-                            faces, property.toString());
-                    return (obj != null) ? obj.getClass() : null;
-                } else {
-                    if (base instanceof List || base.getClass().isArray()) {
-                        return this.getPropertyResolver().getType(base,
-                                Integer.parseInt(property.toString()));
-                    } else {
-                        return this.getPropertyResolver().getType(base,
-                                property);
-                    }
-                }
-            } catch (PropertyNotFoundException e) {
-                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
-                        .getCause());
-            } catch (EvaluationException e) {
-                throw new ELException(e.getMessage(), e.getCause());
-            }
-        }
-
-        public Object getValue(ELContext context, Object base, Object property) {
-            if (property == null) {
-                return null;
-            }
-            try {
-                context.setPropertyResolved(true);
-                if (base == null) {
-                    return this.getVariableResolver().resolveVariable(faces,
-                            property.toString());
-                } else {
-                    if (base instanceof List || base.getClass().isArray()) {
-                        return this.getPropertyResolver().getValue(base,
-                                Integer.parseInt(property.toString()));
-                    } else {
-                        return this.getPropertyResolver().getValue(base,
-                                property);
-                    }
-                }
-            } catch (PropertyNotFoundException e) {
-                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
-                        .getCause());
-            } catch (EvaluationException e) {
-                throw new ELException(e.getMessage(), e.getCause());
-            }
-        }
-
-        public boolean isReadOnly(ELContext context, Object base,
-                Object property) {
-            if (property == null) {
-                return true;
-            }
-            try {
-                context.setPropertyResolved(true);
-                if (base == null) {
-                    return false; // what can I do?
-                } else {
-                    if (base instanceof List || base.getClass().isArray()) {
-                        return this.getPropertyResolver().isReadOnly(base,
-                                Integer.parseInt(property.toString()));
-                    } else {
-                        return this.getPropertyResolver().isReadOnly(base,
-                                property);
-                    }
-                }
-            } catch (PropertyNotFoundException e) {
-                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
-                        .getCause());
-            } catch (EvaluationException e) {
-                throw new ELException(e.getMessage(), e.getCause());
-            }
-        }
-
-        public void setValue(ELContext context, Object base, Object property,
-                Object value) {
-            if (property == null) {
-                throw new PropertyNotWritableException("Null Property");
-            }
-            try {
-                context.setPropertyResolved(true);
-                if (base == null) {
-                    if (Arrays.binarySearch(IMPLICIT_OBJECTS, property
-                            .toString()) >= 0) {
-                        throw new PropertyNotWritableException(
-                                "Implicit Variable Not Setable: " + property);
-                    } else {
-                        Map scope = this.resolveScope(property.toString());
-                        this.getPropertyResolver().setValue(scope, property,
-                                value);
-                    }
-                } else {
-                    if (base instanceof List || base.getClass().isArray()) {
-                        this.getPropertyResolver().setValue(base,
-                                Integer.parseInt(property.toString()), value);
-                    } else {
-                        this.getPropertyResolver().setValue(base, property,
-                                value);
-                    }
-                }
-            } catch (PropertyNotFoundException e) {
-                throw new javax.el.PropertyNotFoundException(e.getMessage(), e
-                        .getCause());
-            } catch (EvaluationException e) {
-                throw new ELException(e.getMessage(), e.getCause());
-            }
-
-        }
-
-        private final Map resolveScope(String var) {
-            ExternalContext ext = faces.getExternalContext();
-
-            // cycle through the scopes to find a match, if no
-            // match is found, then return the requestScope
-            Map map = ext.getRequestMap();
-            if (!map.containsKey(var)) {
-                map = ext.getSessionMap();
-                if (!map.containsKey(var)) {
-                    map = ext.getApplicationMap();
-                    if (!map.containsKey(var)) {
-                        map = ext.getRequestMap();
-                    }
-                }
-            }
-            return map;
-        }
-    }
-
-    private final static class EmptyFunctionMapper extends FunctionMapper {
-
-        public Method resolveFunction(String prefix, String localName) {
-            return null;
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyMethodBinding.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyMethodBinding.java
deleted file mode 100644
index cf91ca1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyMethodBinding.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import javax.el.ELException;
-import javax.el.MethodExpression;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.MethodNotFoundException;
-import java.io.Serializable;
-
-/**
- * For legacy ActionSources
- * 
- * @author Jacob Hookom
- * @version $Id: LegacyMethodBinding.java 8384 2010-05-17 14:59:38Z jdlee $
- * @deprecated
- */
-public final class LegacyMethodBinding extends
-        MethodBinding implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private final MethodExpression m;
-
-    public LegacyMethodBinding(MethodExpression m) {
-        this.m = m;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.el.MethodBinding#getType(javax.faces.context.FacesContext)
-     */
-    public Class getType(FacesContext context)
-            throws MethodNotFoundException {
-        try {
-            return m.getMethodInfo(context.getELContext()).getReturnType();
-        } catch (javax.el.MethodNotFoundException e) {
-            throw new MethodNotFoundException(e.getMessage(), e.getCause());
-        } catch (ELException e) {
-            throw new EvaluationException(e.getMessage(), e.getCause());
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.el.MethodBinding#invoke(javax.faces.context.FacesContext,
-     *      java.lang.Object[])
-     */
-    public Object invoke(FacesContext context, Object[] params)
-            throws EvaluationException, MethodNotFoundException {
-        try {
-            return m.invoke(context.getELContext(), params);
-        } catch (javax.el.MethodNotFoundException e) {
-            throw new MethodNotFoundException(e.getMessage(), e.getCause());
-        } catch (ELException e) {
-            throw new EvaluationException(e.getMessage(), e.getCause());
-        }
-    }
-
-    public String getExpressionString() {
-        return m.getExpressionString();
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyValueBinding.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyValueBinding.java
deleted file mode 100644
index c58cacf..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/LegacyValueBinding.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.el;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.PropertyNotWritableException;
-import javax.el.ValueExpression;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.ValueBinding;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * 
- * 
- * @author Jacob Hookom
- * @version $Id: LegacyValueBinding.java 8384 2010-05-17 14:59:38Z jdlee $
- * @deprecated
- */
-public final class LegacyValueBinding extends ValueBinding implements Externalizable {
-
-    private static final long serialVersionUID = 1L;
-    
-    private ValueExpression delegate;
-    
-    public LegacyValueBinding() {
-        super();
-    }
-    
-    public LegacyValueBinding(ValueExpression ve) {
-        this.delegate = ve;
-    }
-
-    public Object getValue(FacesContext context) throws EvaluationException,
-            PropertyNotFoundException {
-        ELContext ctx = context.getELContext();
-        try {
-            return this.delegate.getValue(ctx);
-        } catch (javax.el.PropertyNotFoundException e) {
-            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
-        } catch (ELException e) {
-            throw new EvaluationException(e.getMessage(), e.getCause());
-        }
-    }
-
-    public void setValue(FacesContext context, Object value)
-            throws EvaluationException, PropertyNotFoundException {
-        ELContext ctx = context.getELContext();
-        try {
-            this.delegate.setValue(ctx, value);
-        } catch (PropertyNotWritableException e) {
-            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
-        } catch (javax.el.PropertyNotFoundException e) {
-            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
-        } catch (ELException e) {
-            throw new EvaluationException(e.getMessage(), e.getCause());
-        }
-    }
-
-    public boolean isReadOnly(FacesContext context) throws EvaluationException,
-            PropertyNotFoundException {
-        ELContext ctx = context.getELContext();
-        try {
-            return this.delegate.isReadOnly(ctx);
-        } catch (javax.el.PropertyNotFoundException e) {
-            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
-        } catch (ELException e) {
-            throw new EvaluationException(e.getMessage(), e.getCause());
-        }
-    }
-
-    public Class getType(FacesContext context) throws EvaluationException,
-            PropertyNotFoundException {
-        ELContext ctx = context.getELContext();
-        try {
-            return this.delegate.getType(ctx);
-        } catch (javax.el.PropertyNotFoundException e) {
-            throw new PropertyNotFoundException(e.getMessage(), e.getCause());
-        } catch (ELException e) {
-            throw new EvaluationException(e.getMessage(), e.getCause());
-        }
-    }
-
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        this.delegate = (ValueExpression) in.readObject();
-    }
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(this.delegate);
-    }
-
-    public String getExpressionString() {
-        return this.delegate.getExpressionString();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/TagMethodExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/TagMethodExpression.java
deleted file mode 100644
index e8773cd..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/TagMethodExpression.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import javax.el.*;
-import javax.faces.view.facelets.TagAttribute;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * 
- * 
- * @author Jacob Hookom
- * @version $Id: TagMethodExpression.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class TagMethodExpression extends MethodExpression implements
-        Externalizable {
-    
-    private static final long serialVersionUID = 1L;
-    
-    private String attr;
-    private MethodExpression orig;
-
-    public TagMethodExpression() {
-        super();
-    }
-    
-    public TagMethodExpression(TagAttribute attr, MethodExpression orig) {
-        this.attr = attr.toString();
-        this.orig = orig;
-    }
-
-    public MethodInfo getMethodInfo(ELContext context) {
-        try {
-            return this.orig.getMethodInfo(context);
-        } catch (PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(this.attr + ": " + pnfe.getMessage(), pnfe.getCause());
-        } catch (MethodNotFoundException mnfe) {
-            throw new MethodNotFoundException(this.attr + ": " + mnfe.getMessage(), mnfe.getCause());
-        } catch (ELException e) {
-            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
-        }
-    }
-
-    public Object invoke(ELContext context, Object[] params) {
-        try {
-            return this.orig.invoke(context, params);
-        } catch (PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(this.attr + ": " + pnfe.getMessage(), pnfe.getCause());
-        } catch (MethodNotFoundException mnfe) {
-            throw new MethodNotFoundException(this.attr + ": " + mnfe.getMessage(), mnfe.getCause());
-        } catch (ELException e) {
-            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
-        }
-    }
-
-    public String getExpressionString() {
-        return this.orig.getExpressionString();
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        TagMethodExpression that = (TagMethodExpression) o;
-
-        if (attr != null ? !attr.equals(that.attr) : that.attr != null) {
-            return false;
-        }
-        if (orig != null ? !orig.equals(that.orig) : that.orig != null) {
-            return false;
-        }
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = attr != null ? attr.hashCode() : 0;
-        result = 31 * result + (orig != null ? orig.hashCode() : 0);
-        return result;
-    }
-
-    public boolean isLiteralText() {
-        return this.orig.isLiteralText();
-    }
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(this.orig);
-        out.writeUTF(this.attr);
-    }
-
-    public void readExternal(ObjectInput in) throws IOException,
-            ClassNotFoundException {
-        this.orig = (MethodExpression) in.readObject();
-        this.attr = in.readUTF();
-    }
-
-    public String toString() {
-        return this.attr + ": " + this.orig;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/TagValueExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/TagValueExpression.java
deleted file mode 100644
index 56a4a09..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/TagValueExpression.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import javax.el.*;
-import javax.faces.view.facelets.TagAttribute;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * 
- * 
- * @author Jacob Hookom
- * @version $Id: TagValueExpression.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class TagValueExpression extends ValueExpression implements
-        Externalizable {
-
-    private static final long serialVersionUID = 1L;
-
-    private ValueExpression orig;
-
-    private String attr;
-
-    public TagValueExpression() {
-        super();
-    }
-
-    public TagValueExpression(TagAttribute attr, ValueExpression orig) {
-        this.attr = attr.toString();
-        this.orig = orig;
-    }
-
-    public Class getExpectedType() {
-        return this.orig.getExpectedType();
-    }
-
-    public Class getType(ELContext context) {
-        try {
-            return this.orig.getType(context);
-        } catch (PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(this.attr + ": "
-                    + pnfe.getMessage(), pnfe.getCause());
-        } catch (ELException e) {
-            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
-        }
-    }
-
-    public Object getValue(ELContext context) {
-        try {
-            return this.orig.getValue(context);
-        } catch (PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(this.attr + ": "
-                    + pnfe.getMessage(), pnfe.getCause());
-        } catch (ELException e) {
-            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
-        }
-    }
-
-    public boolean isReadOnly(ELContext context) {
-        try {
-            return this.orig.isReadOnly(context);
-        } catch (PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(this.attr + ": "
-                    + pnfe.getMessage(), pnfe.getCause());
-        } catch (ELException e) {
-            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
-        }
-    }
-
-    public void setValue(ELContext context, Object value) {
-        try {
-            this.orig.setValue(context, value);
-        } catch (PropertyNotFoundException pnfe) {
-            throw new PropertyNotFoundException(this.attr + ": "
-                    + pnfe.getMessage(), pnfe.getCause());
-        } catch (PropertyNotWritableException pnwe) {
-            throw new PropertyNotWritableException(this.attr + ": "
-                    + pnwe.getMessage(), pnwe.getCause());
-        } catch (ELException e) {
-            throw new ELException(this.attr + ": " + e.getMessage(), e.getCause());
-        }
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        TagValueExpression that = (TagValueExpression) o;
-
-        if (attr != null ? !attr.equals(that.attr) : that.attr != null) {
-            return false;
-        }
-        if (orig != null ? !orig.equals(that.orig) : that.orig != null) {
-            return false;
-        }
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = orig != null ? orig.hashCode() : 0;
-        result = 31 * result + (attr != null ? attr.hashCode() : 0);
-        return result;
-    }
-
-    public String getExpressionString() {
-        return this.orig.getExpressionString();
-    }
-
-    public boolean isLiteralText() {
-        return this.orig.isLiteralText();
-    }
-
-    public void readExternal(ObjectInput in) throws IOException,
-            ClassNotFoundException {
-        this.orig = (ValueExpression) in.readObject();
-        this.attr = in.readUTF();
-    }
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(this.orig);
-        out.writeUTF(this.attr);
-    }
-
-    public ValueExpression getWrapped() {
-        return orig;
-    }
-
-    public String toString() {
-        return this.attr;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/el/VariableMapperWrapper.java b/jsf-ri/src/main/java/com/sun/faces/facelets/el/VariableMapperWrapper.java
deleted file mode 100644
index 50668a4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/el/VariableMapperWrapper.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.el;
-
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Utility class for wrapping another VariableMapper with a new context,
- * represented by a {@link java.util.Map Map}. Modifications occur to the Map
- * instance, but resolve against the wrapped VariableMapper if the Map doesn't
- * contain the ValueExpression requested.
- *
- * @author Jacob Hookom
- * @version $Id: VariableMapperWrapper.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public class VariableMapperWrapper extends VariableMapper {
-
-    private final VariableMapper target;
-
-    private Map vars;
-
-    /**
-     *
-     */
-    public VariableMapperWrapper(VariableMapper orig) {
-        super();
-        this.target = orig;
-    }
-
-    /**
-     * First tries to resolve agains the inner Map, then the wrapped
-     * ValueExpression.
-     *
-     * @see javax.el.VariableMapper#resolveVariable(java.lang.String)
-     */
-    public ValueExpression resolveVariable(String variable) {
-        ValueExpression ve = null;
-        try {
-            if (this.vars != null) {
-                ve = (ValueExpression) this.vars.get(variable);
-            }
-            if (ve == null) {
-                return this.target.resolveVariable(variable);
-            }
-            return ve;
-        } catch (StackOverflowError e) {
-            throw new ELException("Could not Resolve Variable [Overflow]: "
-                                  + variable, e);
-        }
-    }
-
-    /**
-     * Set the ValueExpression on the inner Map instance.
-     *
-     * @see javax.el.VariableMapper#setVariable(java.lang.String,
-     *      javax.el.ValueExpression)
-     */
-    public ValueExpression setVariable(String variable,
-                                       ValueExpression expression) {
-        if (this.vars == null) {
-            this.vars = new HashMap();
-        }
-        return (ValueExpression) this.vars.put(variable, expression);
-	}
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFacelet.java b/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFacelet.java
deleted file mode 100644
index 364b9f8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFacelet.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.impl;
-
-import com.sun.faces.facelets.Facelet;
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import javax.el.ELException;
-import javax.el.ExpressionFactory;
-import javax.faces.FacesException;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletException;
-import javax.faces.view.facelets.FaceletHandler;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.net.URL;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Default Facelet implementation.
- * 
- * @author Jacob Hookom
- * @version $Id: DefaultFacelet.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class DefaultFacelet extends Facelet {
-
-    private static final Logger log = FacesLogger.FACELETS_FACELET.getLogger();
-
-    private final static String APPLIED_KEY = "com.sun.faces.facelets.APPLIED";
-    private static final String JAVAX_FACES_ERROR_XHTML = "javax.faces.error.xhtml";
-
-    private final String alias;
-
-    private final ExpressionFactory elFactory;
-
-    private final DefaultFaceletFactory factory;
-
-    private final long createTime;
-
-    private final long refreshPeriod;
-
-    private final Map<String,URL> relativePaths;
-
-    private final FaceletHandler root;
-
-    private final URL src;
-
-    private IdMapper mapper;
-
-    public DefaultFacelet(DefaultFaceletFactory factory,
-                          ExpressionFactory el,
-                          URL src,
-                          String alias,
-                          FaceletHandler root) {
-
-        this.factory = factory;
-        this.elFactory = el;
-        this.src = src;
-        this.root = root;
-        this.alias = alias;
-        this.mapper = factory.idMappers.get(alias);
-        this.createTime = System.currentTimeMillis();
-        this.refreshPeriod = this.factory.getRefreshPeriod();
-        this.relativePaths = new WeakHashMap<String,URL>();
-
-
-    }
-
-    /**
-     * @see com.sun.faces.facelets.Facelet#apply(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
-     */
-    public void apply(FacesContext facesContext, UIComponent parent)
-        throws IOException {
-
-        IdMapper idMapper = IdMapper.getMapper(facesContext);
-        boolean mapperSet = false;
-        if (idMapper == null) {
-            IdMapper.setMapper(facesContext, this.mapper);
-            mapperSet = true;
-        }
-        
-        DefaultFaceletContext ctx = new DefaultFaceletContext(facesContext, this);
-        this.refresh(parent);
-        ComponentSupport.markForDeletion(parent);
-        this.root.apply(ctx, parent);
-        ComponentSupport.finalizeForDeletion(parent);
-        this.markApplied(parent);
-
-        if (mapperSet) {
-            IdMapper.setMapper(facesContext, null);
-        }
-
-
-    }
-
-    private void refresh(UIComponent c) {
-        if (this.refreshPeriod > 0) {
-
-            // finally remove any children marked as deleted
-            int sz = c.getChildCount();
-            if (sz > 0) {
-                List cl = c.getChildren();
-                ApplyToken token;
-                while (--sz >= 0) {
-                    UIComponent cc = (UIComponent) cl.get(sz);
-                    if (!cc.isTransient()) {
-                        token = (ApplyToken) cc.getAttributes().get(APPLIED_KEY);
-                        if (token != null && token.time < this.createTime
-                                && token.alias.equals(this.alias)) {
-                            if (log.isLoggable(Level.INFO)) {
-                                DateFormat df = SimpleDateFormat.getTimeInstance();
-                                log.info("Facelet[" + this.alias
-                                        + "] was modified @ "
-                                        + df.format(new Date(this.createTime))
-                                        + ", flushing component applied @ "
-                                        + df.format(new Date(token.time)));
-                            }
-                            cl.remove(sz);
-                        }
-                    }
-                }
-            }
-
-            // remove any facets marked as deleted
-            if (c.getFacets().size() > 0) {
-                Collection col = c.getFacets().values();
-                UIComponent fc;
-                ApplyToken token;
-                for (Iterator itr = col.iterator(); itr.hasNext();) {
-                    fc = (UIComponent) itr.next();
-                    if (!fc.isTransient()) {
-                        token = (ApplyToken) fc.getAttributes().get(APPLIED_KEY);
-                        if (token != null && token.time < this.createTime
-                                && token.alias.equals(this.alias)) {
-                            if (log.isLoggable(Level.INFO)) {
-                                DateFormat df = SimpleDateFormat.getTimeInstance();
-                                log.info("Facelet[" + this.alias
-                                        + "] was modified @ "
-                                        + df.format(new Date(this.createTime))
-                                        + ", flushing component applied @ "
-                                        + df.format(new Date(token.time)));
-                            }
-                            itr.remove();
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    private void markApplied(UIComponent parent) {
-        if (this.refreshPeriod > 0) {
-            Iterator itr = parent.getFacetsAndChildren();
-            ApplyToken token =
-                  new ApplyToken(this.alias,
-                                 System.currentTimeMillis() + this.refreshPeriod);
-            while (itr.hasNext()) {
-                UIComponent c = (UIComponent) itr.next();
-                if (!c.isTransient()) {
-                    Map<String,Object> attr = c.getAttributes();
-                    if (!attr.containsKey(APPLIED_KEY)) {
-                        attr.put(APPLIED_KEY, token);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Return the alias name for error messages and logging
-     * 
-     * @return alias name
-     */
-    public String getAlias() {
-        return this.alias;
-    }
-
-    /**
-     * Return this Facelet's ExpressionFactory instance
-     * 
-     * @return internal ExpressionFactory instance
-     */
-    public ExpressionFactory getExpressionFactory() {
-        return this.elFactory;
-    }
-
-    /**
-     * The time when this Facelet was created, NOT the URL source code
-     * 
-     * @return final timestamp of when this Facelet was created
-     */
-    public long getCreateTime() {
-        return this.createTime;
-    }
-
-    /**
-     * Delegates resolution to DefaultFaceletFactory reference. Also, caches
-     * URLs for relative paths.
-     * 
-     * @param path
-     *            a relative url path
-     * @return URL pointing to destination
-     * @throws IOException
-     *             if there is a problem creating the URL for the path specified
-     */
-    private URL getRelativePath(String path) throws IOException {
-        URL url = this.relativePaths.get(path);
-        if (url == null) {
-            url = this.factory.resolveURL(this.src, path);
-            this.relativePaths.put(path, url);
-        }
-        return url;
-    }
-
-    /**
-     * The URL this Facelet was created from.
-     * 
-     * @return the URL this Facelet was created from
-     */
-    public URL getSource() {
-        return this.src;
-    }
-
-    /**
-     * Given the passed FaceletContext, apply our child FaceletHandlers to the
-     * passed parent
-     * 
-     * @see FaceletHandler#apply(FaceletContext, UIComponent)
-     * @param ctx
-     *            the FaceletContext to use for applying our FaceletHandlers
-     * @param parent
-     *            the parent component to apply changes to
-     * @throws IOException
-     * @throws FacesException
-     * @throws FaceletException
-     * @throws ELException
-     */
-    private void include(DefaultFaceletContext ctx, UIComponent parent)
-    throws IOException  {
-        this.refresh(parent);
-        this.root.apply(new DefaultFaceletContext(ctx, this), parent);
-        this.markApplied(parent);
-    }
-
-    /**
-     * Used for delegation by the DefaultFaceletContext. First pulls the URL
-     * from {@link #getRelativePath(String) getRelativePath(String)}, then
-     * calls
-     * {@link #include(DefaultFaceletContext, javax.faces.component.UIComponent, String)}.
-     * 
-     * @see FaceletContext#includeFacelet(UIComponent, String)
-     * @param ctx
-     *            FaceletContext to pass to the included Facelet
-     * @param parent
-     *            UIComponent to apply changes to
-     * @param path
-     *            relative path to the desired Facelet from the FaceletContext
-     * @throws IOException
-     * @throws FacesException
-     * @throws FaceletException
-     * @throws ELException
-     */
-    public void include(DefaultFaceletContext ctx, UIComponent parent, String path)
-    throws IOException {
-        URL url;
-        if (path.equals(JAVAX_FACES_ERROR_XHTML)) {
-            if (isDevelopment(ctx)) {
-                // try using this class' ClassLoader
-                url = getErrorFacelet(DefaultFacelet.class.getClassLoader());
-                if (url == null) {
-                    url = getErrorFacelet(Util.getCurrentLoader(this));
-                }
-            } else {
-                return;
-            }
-        } else {
-            url = this.getRelativePath(path);
-        }
-        this.include(ctx, parent, url);
-    }
-
-    /**
-     * Grabs a DefaultFacelet from referenced DefaultFaceletFacotry
-     * 
-     * @see DefaultFaceletFactory#getFacelet(URL)
-     * @param ctx
-     *            FaceletContext to pass to the included Facelet
-     * @param parent
-     *            UIComponent to apply changes to
-     * @param url
-     *            URL source to include Facelet from
-     * @throws IOException
-     * @throws FacesException
-     * @throws FaceletException
-     * @throws ELException
-     */
-    public void include(DefaultFaceletContext ctx, UIComponent parent, URL url)
-    throws IOException {
-        DefaultFacelet f = (DefaultFacelet) this.factory.getFacelet(url);
-        f.include(ctx, parent);
-    }
-
-    private static class ApplyToken implements Externalizable {
-        public String alias;
-
-        public long time;
-
-        @SuppressWarnings({"UnusedDeclaration"})
-        public ApplyToken() { } // For Serialization
-
-        public ApplyToken(String alias, long time) {
-            this.alias = alias;
-            this.time = time;
-        }
-
-        public void readExternal(ObjectInput in) throws IOException,
-                ClassNotFoundException {
-            this.alias = in.readUTF();
-            this.time = in.readLong();
-        }
-
-        public void writeExternal(ObjectOutput out) throws IOException {
-            out.writeUTF(this.alias);
-            out.writeLong(this.time);
-        }
-    }
-
-    public String toString() {
-        return this.alias;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private boolean isDevelopment(FaceletContext ctx) {
-
-        return ctx.getFacesContext().isProjectStage(ProjectStage.Development);
-
-    }
-
-
-    private URL getErrorFacelet(ClassLoader loader) {
-
-        return loader.getResource("META-INF/error-include.xhtml");
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletCache.java b/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletCache.java
deleted file mode 100644
index 3c662b7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletCache.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.impl;
-
-
-import com.sun.faces.facelets.FaceletCache;
-import com.sun.faces.util.ConcurrentCache;
-import com.sun.faces.util.ExpiringConcurrentCache;
-
-import javax.faces.FacesException;
-import java.io.IOException;
-import java.io.InputStream;
-
-import java.net.URL;
-import java.net.URLConnection;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.atomic.AtomicLong;
-
-
-/**
- * Default FaceletCache implementation.
- */
-final class DefaultFaceletCache extends FaceletCache<DefaultFacelet> {
-
-    /**
-     *Constructor
-     * @param refreshPeriod cache refresh period (in milliseconds).
-     * 0 means 'always refresh', negative value means 'never refresh'
-     */
-    DefaultFaceletCache(final long refreshPeriod) {
-
-        // We will be delegating object storage to the ExpiringCocurrentCache
-        // Create Factory objects here for the cache. The objects will be delegating to our
-        // own instance factories
-        
-        final boolean checkExpiry = (refreshPeriod > 0);
-
-        ConcurrentCache.Factory<URL, Record> faceletFactory =
-            new ConcurrentCache.Factory<URL, Record>() {
-            public Record newInstance(final URL key) throws IOException {
-                // Make sure that the expensive timestamp retrieval is not done
-                // if no expiry check is going to be performed
-                long lastModified = checkExpiry ? _getLastModified(key) : 0;
-                return new Record(System.currentTimeMillis(), lastModified,
-                                  getFaceletInstanceFactory().newInstance(key), refreshPeriod);
-            }
-        };
-
-        ConcurrentCache.Factory<URL, Record> metadataFaceletFactory =
-            new ConcurrentCache.Factory<URL, Record>() {
-            public Record newInstance(final URL key) throws IOException {
-                // Make sure that the expensive timestamp retrieval is not done
-                // if no expiry check is going to be performed
-                long lastModified = checkExpiry ? _getLastModified(key) : 0;
-                return new Record(System.currentTimeMillis(), lastModified,
-                                  getMetadataFaceletInstanceFactory().newInstance(key), refreshPeriod);
-            }
-        };
-
-        // No caching if refreshPeriod is 0
-        if (refreshPeriod == 0) {
-            _faceletCache = new NoCache(faceletFactory);
-            _metadataFaceletCache = new NoCache(metadataFaceletFactory);
-        } else {
-            ExpiringConcurrentCache.ExpiryChecker<URL, Record> checker = 
-                (refreshPeriod > 0) ? new ExpiryChecker() : new NeverExpired();
-            _faceletCache =
-                    new ExpiringConcurrentCache<URL, Record>(faceletFactory,
-                                                             checker);
-            _metadataFaceletCache =
-                    new ExpiringConcurrentCache<URL, Record>(metadataFaceletFactory,
-                                                             checker);
-        }
-    }
-
-    public DefaultFacelet getFacelet(URL url) throws IOException {
-        DefaultFacelet f = null;
-        
-        try {
-            f =  _faceletCache.get(url).getFacelet();
-        } catch (ExecutionException e) {
-            _unwrapIOException(e);
-        }
-        return f;
-    }
-
-    public boolean isFaceletCached(URL url) {
-        return _faceletCache.containsKey(url);
-    }
-
-
-    public DefaultFacelet getMetadataFacelet(URL url) throws IOException {
-        DefaultFacelet f = null;
-        
-        try {
-            f = _metadataFaceletCache.get(url).getFacelet();
-        } catch (ExecutionException e) {
-            _unwrapIOException(e);
-        }
-        return f;
-    }
-
-    public boolean isMetadataFaceletCached(URL url) {
-        return _metadataFaceletCache.containsKey(url);
-    }
-
-    private void _unwrapIOException(ExecutionException e) throws IOException {
-        Throwable t = e.getCause();
-        if (t instanceof IOException) {
-            throw (IOException)t;
-        }
-        if (t instanceof RuntimeException) {
-            throw (RuntimeException)t;
-        }
-        throw new FacesException(t);
-    }
-    
-    private static long _getLastModified(URL url) {
-        InputStream is = null;
-        try {
-            URLConnection conn = url.openConnection();
-            is = conn.getInputStream();
-            return conn.getLastModified();
-        } catch (Exception e) {
-            throw new FacesException("Error Checking Last Modified for " +
-                                       url, e);
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (Exception e) {
-                    // do nothing
-                }
-            }
-        }
-    }
-
-    private final ConcurrentCache<URL, Record> _faceletCache;
-    private final ConcurrentCache<URL, Record> _metadataFaceletCache;
-
-    /**
-     * This class holds the Facelet instance and its original URL's last modified time. It also produces
-     * the time when the next expiry check should be performed
-     */
-    private static class Record {
-        Record(long creationTime, long lastModified, DefaultFacelet facelet, long refreshInterval) {
-            _facelet = facelet;
-            _creationTime = creationTime;
-            _lastModified = lastModified;
-            _refreshInterval = refreshInterval;
-            
-            // There is no point in calculaing the next refresh time if we are refreshing always/never
-            _nextRefreshTime = (_refreshInterval > 0) ? new AtomicLong(creationTime + refreshInterval) : null;
-        }
-
-        DefaultFacelet getFacelet() {
-            return _facelet;
-        }
-
-        long getLastModified() {
-            return _lastModified;
-        }
-        
-        long getNextRefreshTime() {
-            // There is no point in calculaing the next refresh time if we are refreshing always/never
-            return (_refreshInterval > 0) ? _nextRefreshTime.getAndAdd(_refreshInterval) : 0;
-        }
-        
-        private final long _lastModified;
-        private final long _refreshInterval;
-        private final long _creationTime;
-        private final AtomicLong _nextRefreshTime;
-        private final DefaultFacelet _facelet;
-    }
-
-    private static class ExpiryChecker implements ExpiringConcurrentCache.ExpiryChecker<URL, Record> {
-
-        public boolean isExpired(URL url, Record record) {
-            // getNextRefreshTime() incremenets the next refresh time atomically
-            long ttl = record.getNextRefreshTime();
-            if (System.currentTimeMillis() > ttl) {
-                long lastModified = _getLastModified(url);
-                // The record is considered expired if its original last modified time
-                // is older than the URL's current last modified time
-                return (lastModified > record.getLastModified());
-            }
-            return false;
-        }
-    }
-    
-    private static class NeverExpired implements ExpiringConcurrentCache.ExpiryChecker<URL, Record> {
-        public boolean isExpired(URL key, Record value) {
-            return false;
-        }
-    }
-
-    /**
-     * ConcurrentCache implementation that does no caching (always creates new instances)
-     */
-    private static class NoCache extends ConcurrentCache<URL, Record> {
-        public NoCache(ConcurrentCache.Factory<URL, Record> f) {
-            super(f);
-        }
-
-        public Record get(final URL key) throws ExecutionException {
-            try {
-                return this.getFactory().newInstance(key);
-            } catch (Exception e) {
-                throw new ExecutionException(e);
-            }
-        }
-
-        public boolean containsKey(final URL key) {
-            return false;
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletContext.java b/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletContext.java
deleted file mode 100644
index 7f09066..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletContext.java
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.impl;
-
-import com.sun.faces.facelets.Facelet;
-import com.sun.faces.facelets.FaceletContextImplBase;
-import com.sun.faces.facelets.TemplateClient;
-import com.sun.faces.facelets.el.DefaultVariableMapper;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.ExpressionFactory;
-import javax.el.FunctionMapper;
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletContext;
-import java.io.IOException;
-import java.net.URL;
-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;
-
-/**
- * Default FaceletContext implementation.
- * 
- * A single FaceletContext is used for all Facelets involved in an invocation of
- * {@link com.sun.faces.facelets.Facelet#apply(FacesContext, UIComponent) Facelet#apply(FacesContext, UIComponent)}.
- * This means that included Facelets are treated the same as the JSP include
- * directive.
- * 
- * @author Jacob Hookom
- * @version $Id: DefaultFaceletContext.java,v 1.4.4.3 2006/03/25 01:01:53 jhook
- *          Exp $
- */
-final class DefaultFaceletContext extends FaceletContextImplBase {
-
-    private final FacesContext faces;
-
-    private final ELContext ctx;
-
-    private final DefaultFacelet facelet;
-    private final List<Facelet> faceletHierarchy;
-
-    private VariableMapper varMapper;
-
-    private FunctionMapper fnMapper;
-
-    private final Map<String,Integer> ids;
-    private final Map<Integer,Integer> prefixes;
-    private String prefix;
-    private final StringBuilder uniqueIdBuilder=new StringBuilder(30);
-
-
-    public DefaultFaceletContext(DefaultFaceletContext ctx,
-            DefaultFacelet facelet) {
-        this.ctx = ctx.ctx;
-        this.clients = ctx.clients;
-        this.faces = ctx.faces;
-        this.fnMapper = ctx.fnMapper;
-        this.ids = ctx.ids;
-        this.prefixes = ctx.prefixes;
-        this.varMapper = ctx.varMapper;
-        this.faceletHierarchy = new ArrayList<Facelet>(ctx.faceletHierarchy.size()+1);
-        this.faceletHierarchy.addAll(ctx.faceletHierarchy);
-        this.faceletHierarchy.add(facelet);
-        this.facelet=facelet;
-        this.faces.getAttributes().put(FaceletContext.FACELET_CONTEXT_KEY,
-                this);
-    }
-
-    public DefaultFaceletContext(FacesContext faces, DefaultFacelet facelet) {
-        this.ctx = faces.getELContext();
-        this.ids = new HashMap<String,Integer>();
-        this.prefixes = new HashMap<Integer,Integer>();
-        this.clients = new ArrayList<TemplateManager>(5);
-        this.faces = faces;
-        this.faceletHierarchy = new ArrayList<Facelet>(1);
-        this.faceletHierarchy.add(facelet);
-        this.facelet = facelet;
-        this.varMapper = this.ctx.getVariableMapper();
-        if (this.varMapper == null) {
-            this.varMapper = new DefaultVariableMapper();
-        }
-        this.fnMapper = this.ctx.getFunctionMapper();
-        this.faces.getAttributes().put(FaceletContext.FACELET_CONTEXT_KEY,
-                this);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#getFacesContext()
-     */
-    public FacesContext getFacesContext() {
-        return this.faces;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#getExpressionFactory()
-     */
-    public ExpressionFactory getExpressionFactory() {
-        return this.facelet.getExpressionFactory();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#setVariableMapper(javax.el.VariableMapper)
-     */
-    public void setVariableMapper(VariableMapper varMapper) {
-        // Assert.param("varMapper", varMapper);
-        this.varMapper = varMapper;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#setFunctionMapper(javax.el.FunctionMapper)
-     */
-    public void setFunctionMapper(FunctionMapper fnMapper) {
-        // Assert.param("fnMapper", fnMapper);
-        this.fnMapper = fnMapper;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#includeFacelet(javax.faces.component.UIComponent,
-     *      java.lang.String)
-     */
-    public void includeFacelet(UIComponent parent, String relativePath)
-            throws IOException, FacesException, ELException {
-        this.facelet.include(this, parent, relativePath);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ELContext#getFunctionMapper()
-     */
-    public FunctionMapper getFunctionMapper() {
-        return this.fnMapper;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ELContext#getVariableMapper()
-     */
-    public VariableMapper getVariableMapper() {
-        return this.varMapper;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ELContext#getContext(java.lang.Class)
-     */
-    public Object getContext(Class key) {
-        return this.ctx.getContext(key);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ELContext#putContext(java.lang.Class, java.lang.Object)
-     */
-    public void putContext(Class key, Object contextObject) {
-        this.ctx.putContext(key, contextObject);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#generateUniqueId(java.lang.String)
-     */
-    public String generateUniqueId(String base) {
-
-        if(prefix==null) {
-            StringBuilder builder = new StringBuilder(faceletHierarchy.size()*30);
-            for(int i=0; i< faceletHierarchy.size(); i++) {
-                DefaultFacelet facelet = (DefaultFacelet) faceletHierarchy.get(i);
-                builder.append(facelet.getAlias());
-            }
-            Integer prefixInt = builder.toString().hashCode();
-
-            Integer cnt = prefixes.get(prefixInt);
-            if(cnt==null) {
-                this.prefixes.put(prefixInt, 0);
-                prefix = prefixInt.toString();
-            } else {
-                int i=cnt.intValue()+1;
-                this.prefixes.put(prefixInt, i);
-                prefix = prefixInt + "_" +i;
-            }
-        }
-
-        Integer cnt = this.ids.get(base);
-        if (cnt == null) {
-            this.ids.put(base, 0);
-            uniqueIdBuilder.delete(0,uniqueIdBuilder.length());
-            uniqueIdBuilder.append(prefix);
-            uniqueIdBuilder.append("_");
-            uniqueIdBuilder.append(base);
-            return uniqueIdBuilder.toString();
-        } else {
-            int i = cnt.intValue() + 1;
-            this.ids.put(base, i);
-            uniqueIdBuilder.delete(0,uniqueIdBuilder.length());
-            uniqueIdBuilder.append(prefix);
-            uniqueIdBuilder.append("_");
-            uniqueIdBuilder.append(base);
-            uniqueIdBuilder.append("_");            
-            uniqueIdBuilder.append(i);
-            return uniqueIdBuilder.toString();
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#getAttribute(java.lang.String)
-     */
-    public Object getAttribute(String name) {
-        if (this.varMapper != null) {
-            ValueExpression ve = this.varMapper.resolveVariable(name);
-            if (ve != null) {
-                return ve.getValue(this);
-            }
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#setAttribute(java.lang.String,
-     *      java.lang.Object)
-     */
-    public void setAttribute(String name, Object value) {
-        if (this.varMapper != null) {
-            if (value == null) {
-                this.varMapper.setVariable(name, null);
-            } else {
-                this.varMapper.setVariable(name, this.facelet
-                        .getExpressionFactory().createValueExpression(value,
-                                Object.class));
-            }
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.faces.view.facelets.FaceletContext#includeFacelet(javax.faces.component.UIComponent,
-     *      java.net.URL)
-     */
-    public void includeFacelet(UIComponent parent, URL absolutePath)
-            throws IOException, FacesException, ELException {
-        this.facelet.include(this, parent, absolutePath);
-    }
-
-    public ELResolver getELResolver() {
-        return this.ctx.getELResolver();
-    }
-
-    private final List<TemplateManager> clients;
-
-    public void popClient(TemplateClient client) {
-        if (!this.clients.isEmpty()) {
-            Iterator itr = this.clients.iterator();
-            while (itr.hasNext()) {
-                if (itr.next().equals(client)) {
-                    itr.remove();
-                    return;
-                }
-            }
-        }
-        throw new IllegalStateException(client + " not found");
-    }
-
-    public void pushClient(final TemplateClient client) {
-        this.clients.add(0, new TemplateManager(this.facelet, client, true));
-    }
-
-    public void extendClient(final TemplateClient client) {
-        this.clients.add(new TemplateManager(this.facelet, client, false));
-    }
-
-    public boolean includeDefinition(UIComponent parent, String name)
-    throws IOException {
-        boolean found = false;
-        TemplateManager client;
-
-        for (int i = 0, size = this.clients.size(); i < size && !found; i++) {
-            client = this.clients.get(i);
-            //noinspection EqualsBetweenInconvertibleTypes
-            if (client.equals(this.facelet))
-                continue;            
-            found = client.apply(this, parent, name);            
-        }
-
-        return found;
-    }
-
-    private final static class TemplateManager implements TemplateClient {
-        private final DefaultFacelet owner;
-
-        private final TemplateClient target;
-        
-        private final boolean root;
-
-        private final Set<String> names = new HashSet<String>();
-
-        public TemplateManager(DefaultFacelet owner, TemplateClient target, boolean root) {
-            this.owner = owner;
-            this.target = target;
-            this.root = root;
-        }
-
-        public boolean apply(FaceletContext ctx, UIComponent parent, String name)
-        throws IOException {
-
-            String testName = (name != null) ? name : "facelets._NULL_DEF_";
-            if (this.names.contains(testName)) {
-                return false;
-            } else {
-                this.names.add(testName);
-                boolean found = this.target.apply(new DefaultFaceletContext(
-                        (DefaultFaceletContext) ctx, this.owner), parent, name);
-                this.names.remove(testName);
-                return found;
-            }
-        }
-
-        
-        @Override
-        public boolean equals(Object o) {
-            // System.out.println(this.owner.getAlias() + " == " +
-            // ((DefaultFacelet) o).getAlias());
-            return this.owner == o || this.target == o;
-        }
-
-        public boolean isRoot() {
-            return this.root;
-        }
-    }
-
-
-    public boolean isPropertyResolved() {
-        return this.ctx.isPropertyResolved();
-    }
-
-    public void setPropertyResolved(boolean resolved) {
-        this.ctx.setPropertyResolved(resolved);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletFactory.java b/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletFactory.java
deleted file mode 100644
index fe3cbd2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletFactory.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.impl;
-
-import com.sun.faces.facelets.Facelet;
-import com.sun.faces.facelets.FaceletCache;
-import com.sun.faces.facelets.FaceletFactory;
-import com.sun.faces.facelets.compiler.Compiler;
-import com.sun.faces.util.Cache;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import javax.faces.view.facelets.FaceletException;
-import javax.faces.view.facelets.FaceletHandler;
-import javax.faces.view.facelets.ResourceResolver;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-
-/**
- * Default FaceletFactory implementation.
- *
- * @author Jacob Hookom
- * @version $Id: DefaultFaceletFactory.java,v 1.10 2007/04/09 01:13:17 youngm
- *          Exp $
- */
-public class DefaultFaceletFactory extends FaceletFactory {
-
-    protected final static Logger log = FacesLogger.FACELETS_FACTORY.getLogger();
-
-    private final Compiler compiler;
-
-    private Map<String, URL> relativeLocations;
-
-    private final ResourceResolver resolver;
-
-    private final URL baseUrl;
-    
-    private final long refreshPeriod;
-
-    private final FaceletCache<DefaultFacelet> cache;
-
-    Cache<String,IdMapper> idMappers;
-    
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public DefaultFaceletFactory(Compiler compiler, ResourceResolver resolver)
-    throws IOException {
-
-        this(compiler, resolver, -1, null);
-
-    }
-
-
-    public DefaultFaceletFactory(Compiler compiler,
-                                 ResourceResolver resolver,
-                                 long refreshPeriod) {
-        this(compiler, resolver, refreshPeriod, null);
-    }
-
-    public DefaultFaceletFactory(Compiler compiler,
-                                 ResourceResolver resolver,
-                                 long refreshPeriod,
-                                 FaceletCache cache) {
-
-        Util.notNull("compiler", compiler);
-        Util.notNull("resolver", resolver);
-        this.compiler = compiler;
-        this.relativeLocations = new ConcurrentHashMap<String, URL>();
-        this.resolver = resolver;
-        this.baseUrl = resolver.resolveUrl("/");
-        this.idMappers = new Cache<String,IdMapper>(new IdMapperFactory());
-        // this.location = url;
-        refreshPeriod = (refreshPeriod >= 0) ? refreshPeriod * 1000 : -1;
-        this.refreshPeriod = refreshPeriod;
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Using ResourceResolver: " + resolver);
-            log.fine("Using Refresh Period: " + refreshPeriod);
-        }
-        if (cache == null) {
-            cache = new DefaultFaceletCache(refreshPeriod);
-        }
-        
-        // We can cast to the FaceletCache<DefaultFacelet> here because we know
-        // that the Generics information is only used at compile time, and all cache
-        // implementations will be using instance factories provided by us and returning DefaultFacelet
-        this.cache = (FaceletCache<DefaultFacelet>)cache;
-        
-        // Create instance factories for the  cache, so that the cache can
-        // create Facelets and Metadata Facelets
-        FaceletCache.InstanceFactory<DefaultFacelet> faceletFactory = 
-            new FaceletCache.InstanceFactory<DefaultFacelet>() {
-                public DefaultFacelet newInstance(final URL key) throws IOException {
-                    return createFacelet(key);
-                }
-            };
-        FaceletCache.InstanceFactory<DefaultFacelet> metadataFaceletFactory = 
-            new FaceletCache.InstanceFactory<DefaultFacelet>() {
-                public DefaultFacelet newInstance(final URL key) throws IOException {
-                    return createMetadataFacelet(key);
-                }
-            };
-        
-        this.cache.init(faceletFactory, metadataFaceletFactory);
-    }
-
-
-    /*
-      * (non-Javadoc)
-      *
-      * @see com.sun.facelets.FaceletFactory#getResourceResolver
-      */
-    public ResourceResolver getResourceResolver() {
-        return resolver;
-    }
-
-    
-    /*
-      * (non-Javadoc)
-      *
-      * @see com.sun.facelets.FaceletFactory#getFacelet(java.lang.String)
-      */
-    public Facelet getFacelet(String uri) throws IOException {
-
-        return this.getFacelet(resolveURL(uri));
-
-    }
-
-
-
-    public Facelet getMetadataFacelet(String uri) throws IOException {
-
-        return this.getMetadataFacelet(resolveURL(uri));
-
-    }
-
-
-    /**
-     * Resolves a path based on the passed URL. If the path starts with '/', then
-     * resolve the path against {@link javax.faces.context.ExternalContext#getResource(java.lang.String)
-     * javax.faces.context.ExternalContext#getResource(java.lang.String)}.
-     * Otherwise create a new URL via {@link URL#URL(java.net.URL,
-     * java.lang.String) URL(URL, String)}.
-     *
-     * @param source base to resolve from
-     * @param path   relative path to the source
-     *
-     * @return resolved URL
-     *
-     * @throws IOException
-     */
-    public URL resolveURL(URL source, String path) throws IOException {
-        if (path.startsWith("/")) {
-            URL url = this.resolver.resolveUrl(path);
-            if (url == null) {
-                throw new FileNotFoundException(path
-                                                + " Not Found in ExternalContext as a Resource");
-            }
-            return url;
-        } else {
-            return new URL(source, path);
-        }
-    }
-
-    /**
-     * Create a Facelet from the passed URL. This method checks if the cached
-     * Facelet needs to be refreshed before returning. If so, uses the passed URL
-     * to build a new instance;
-     *
-     * @param url source url
-     *
-     * @return Facelet instance
-     *
-     * @throws IOException
-     * @throws FaceletException
-     * @throws FacesException
-     * @throws ELException
-     */
-    public Facelet getFacelet(URL url) throws IOException {
-        return this.cache.getFacelet(url);
-    }
-
-    public Facelet getMetadataFacelet(URL url) throws IOException {
-        return this.cache.getMetadataFacelet(url);
-    }
-
-    public boolean needsToBeRefreshed(URL url) {
-        return !this.cache.isFaceletCached(url);
-    }
-
-    
-
-    private URL resolveURL(String uri) throws IOException {
-
-        URL url = this.relativeLocations.get(uri);
-        if (url == null) {
-            url = this.resolveURL(this.baseUrl, uri);
-            if (url != null) {
-                this.relativeLocations.put(uri, url);
-            } else {
-                throw new IOException("'" + uri + "' not found.");
-            }
-        }
-        return url;
-
-    }
-
-
-    /**
-     * Uses the internal Compiler reference to build a Facelet given the passed
-     * URL.
-     *
-     * @param url source
-     *
-     * @return a Facelet instance
-     *
-     * @throws IOException
-     * @throws FaceletException
-     * @throws FacesException
-     * @throws ELException
-     */
-    private DefaultFacelet createFacelet(URL url) throws IOException {
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Creating Facelet for: " + url);
-        }
-        String escapedBaseURL = Pattern.quote(this.baseUrl.getFile());
-        String alias = '/' + url.getFile().replaceFirst(escapedBaseURL, "");
-        try {
-            FaceletHandler h = this.compiler.compile(url, alias);
-            return new DefaultFacelet(this,
-                                      this.compiler.createExpressionFactory(),
-                                      url,
-                                      alias,
-                                      h);
-        } catch (FileNotFoundException fnfe) {
-            throw new FileNotFoundException("Facelet "
-                                            + alias
-                                            + " not found at: "
-                                            + url.toExternalForm());
-        }
-    }
-
-    private DefaultFacelet createMetadataFacelet(URL url) throws IOException {
-
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Creating Metadata Facelet for: " + url);
-        }
-        String escapedBaseURL = Pattern.quote(this.baseUrl.getFile());
-        String alias = '/' + url.getFile().replaceFirst(escapedBaseURL, "");
-        try {
-            FaceletHandler h = this.compiler.metadataCompile(url, alias);
-            return new DefaultFacelet(this,
-                                      this.compiler.createExpressionFactory(),
-                                      url,
-                                      alias,
-                                      h);
-        } catch (FileNotFoundException fnfe) {
-            throw new FileNotFoundException("Facelet "
-                                            + alias
-                                            + " not found at: "
-                                            + url.toExternalForm());
-        }
-
-    }
-
-
-    public long getRefreshPeriod() {
-        return this.refreshPeriod;
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static final class IdMapperFactory implements Cache.Factory<String,IdMapper> {
-
-
-        // ------------------------------------------ Methods from Cache.Factory
-
-
-        public IdMapper newInstance(String arg) throws InterruptedException {
-
-            return new IdMapper();
-
-        }
-
-    }    
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultResourceResolver.java b/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultResourceResolver.java
deleted file mode 100644
index a2fcc16..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultResourceResolver.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.impl;
-
-import com.sun.faces.facelets.util.Resource;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.ResourceResolver;
-import java.io.IOException;
-import java.net.URL;
-
-public class DefaultResourceResolver extends ResourceResolver {
-
-    public DefaultResourceResolver() {
-        super();
-    }
-
-    public URL resolveUrl(String path) {
-        try {
-            return Resource.getResourceUrl(FacesContext.getCurrentInstance(),
-                    path);
-        } catch (IOException e) {
-            throw new FacesException(e);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "DefaultResourceResolver";
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/IdMapper.java b/jsf-ri/src/main/java/com/sun/faces/facelets/impl/IdMapper.java
deleted file mode 100644
index f1592cc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/impl/IdMapper.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.impl;
-
-import com.sun.faces.util.Cache;
-import com.sun.faces.util.Util;
-
-import javax.faces.context.FacesContext;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Used to provide aliases to Facelets generated unique IDs with tend to be
- * womewhat long.
- */
-public class IdMapper {
-
-    private static final String KEY = IdMapper.class.getName();
-
-    private Cache<String,String> idCache = new Cache<String,String>(new IdGen());
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    IdMapper() { }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getAliasedId(String id) {
-
-        return idCache.get(id);
-
-    }
-
-
-    public static void setMapper(FacesContext ctx, IdMapper mapper) {
-
-        Util.notNull("ctx", ctx);
-        if (mapper == null) {
-            ctx.getAttributes().remove(KEY);
-        } else {
-            ctx.getAttributes().put(KEY, mapper);
-        }
-
-    }
-
-
-    public static IdMapper getMapper(FacesContext ctx) {
-
-        Util.notNull("ctx", ctx);
-        return ((IdMapper) ctx.getAttributes().get(KEY));
-
-    }
-
-    
-    // ---------------------------------------------------------- Nested Classes
-
-    private static final class IdGen implements Cache.Factory<String,String> {
-
-        private AtomicInteger counter = new AtomicInteger(0);
-
-
-        // ------------------------------------------ Methods from Cache.Factory
-
-
-        public String newInstance(String arg) throws InterruptedException {
-
-            return 't' + Integer.toString(counter.incrementAndGet());
-
-        }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/AbstractTagLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/AbstractTagLibrary.java
deleted file mode 100644
index b17c2f1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/AbstractTagLibrary.java
+++ /dev/null
@@ -1,728 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.view.facelets.*;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Base class for defining TagLibraries in Java
- * 
- * @author Jacob Hookom
- */
-public abstract class AbstractTagLibrary implements TagLibrary {
-
-    private static class ValidatorConfigWrapper implements ValidatorConfig {
-
-        private final TagConfig parent;
-        private final String validatorId;
-        
-        public ValidatorConfigWrapper(TagConfig parent, String validatorId) {
-            this.parent = parent;
-            this.validatorId = validatorId;
-        }
-        
-        public String getValidatorId() {
-            return this.validatorId;
-        }
-
-        public FaceletHandler getNextHandler() {
-            return this.parent.getNextHandler();
-        }
-
-        public Tag getTag() {
-            return this.parent.getTag();
-        }
-
-        public String getTagId() {
-            return this.parent.getTagId();
-        }  
-    }
-    
-    private static class ConverterConfigWrapper implements ConverterConfig {
-        private final TagConfig parent;
-        private final String converterId;
-        
-        public ConverterConfigWrapper(TagConfig parent, String converterId) {
-            this.parent = parent;
-            this.converterId = converterId;
-        }
-        
-        public String getConverterId() {
-            return this.converterId;
-        }
-        public FaceletHandler getNextHandler() {
-            return this.parent.getNextHandler();
-        }
-        public Tag getTag() {
-            return this.parent.getTag();
-        }
-        public String getTagId() {
-            return this.parent.getTagId();
-        }
-    }
-    
-    private static final class BehaviorConfigWrapper implements BehaviorConfig {
-        private final TagConfig parent;
-        private final String behaviorId;
-		/**
-		 * <p class="changed_added_2_0"></p>
-		 * @param parent
-		 * @param behaviorId
-		 */
-		public BehaviorConfigWrapper(TagConfig parent, String behaviorId) {
-			this.parent = parent;
-			this.behaviorId = behaviorId;
-		}
-		/**
-		 * <p class="changed_added_2_0"></p>
-		 * @return the behaviorId
-		 */
-		public String getBehaviorId() {
-			return behaviorId;
-		}
-		/**
-		 * <p class="changed_added_2_0"></p>
-		 * @return
-		 * @see javax.faces.view.facelets.TagConfig#getNextHandler()
-		 */
-		public FaceletHandler getNextHandler() {
-			return parent.getNextHandler();
-		}
-		/**
-		 * <p class="changed_added_2_0"></p>
-		 * @return
-		 * @see javax.faces.view.facelets.TagConfig#getTag()
-		 */
-		public Tag getTag() {
-			return parent.getTag();
-		}
-		/**
-		 * <p class="changed_added_2_0"></p>
-		 * @return
-		 * @see javax.faces.view.facelets.TagConfig#getTagId()
-		 */
-		public String getTagId() {
-			return parent.getTagId();
-		}
-        
-    	
-    }
-    
-    private static class HandlerFactory implements TagHandlerFactory {
-        private final static Class[] CONSTRUCTOR_SIG = new Class[] { TagConfig.class };
-
-        protected final Class handlerType;
-
-        public HandlerFactory(Class handlerType) {
-            this.handlerType = handlerType;
-        }
-
-        public TagHandler createHandler(TagConfig cfg) throws FacesException,
-                ELException {
-            try {
-                return (TagHandler) this.handlerType.getConstructor(
-                        CONSTRUCTOR_SIG).newInstance(new Object[] { cfg });
-            } catch (InvocationTargetException ite) {
-                Throwable t = ite.getCause();
-                if (t instanceof FacesException) {
-                    throw (FacesException) t;
-                } else if (t instanceof ELException) {
-                    throw (ELException) t;
-                } else {
-                    throw new FacesException("Error Instantiating: "
-                            + this.handlerType.getName(), t);
-                }
-            } catch (Exception e) {
-                throw new FacesException("Error Instantiating: "
-                        + this.handlerType.getName(), e);
-            }
-        }
-    }
-
-    protected static class ComponentConfigWrapper implements ComponentConfig {
-
-        protected final TagConfig parent;
-
-        protected final String componentType;
-
-        protected final String rendererType;
-
-        public ComponentConfigWrapper(TagConfig parent, String componentType,
-                String rendererType) {
-            this.parent = parent;
-            this.componentType = componentType;
-            this.rendererType = rendererType;
-        }
-
-        public String getComponentType() {
-            return this.componentType;
-        }
-
-        public String getRendererType() {
-            return this.rendererType;
-        }
-
-        public FaceletHandler getNextHandler() {
-            return this.parent.getNextHandler();
-        }
-
-        public Tag getTag() {
-            return this.parent.getTag();
-        }
-
-        public String getTagId() {
-            return this.parent.getTagId();
-        }
-    }
-
-    private static class UserTagFactory implements TagHandlerFactory {
-        protected final URL location;
-
-        public UserTagFactory(URL location) {
-            this.location = location;
-        }
-
-        public TagHandler createHandler(TagConfig cfg) throws FacesException,
-                ELException {
-            return new UserTagHandler(cfg, this.location);
-        }
-    }
-
-    private static class ComponentHandlerFactory implements TagHandlerFactory {
-
-        protected final String componentType;
-
-        protected final String renderType;
-
-        public ComponentHandlerFactory(String componentType, String renderType) {
-            this.componentType = componentType;
-            this.renderType = renderType;
-        }
-
-        public TagHandler createHandler(TagConfig cfg) throws FacesException,
-                ELException {
-            ComponentConfig ccfg = new ComponentConfigWrapper(cfg,
-                    this.componentType, this.renderType);
-            return new ComponentHandler(ccfg);
-        }
-    }
-
-    private static class UserComponentHandlerFactory implements
-            TagHandlerFactory {
-
-        private final static Class[] CONS_SIG = new Class[] { ComponentConfig.class };
-
-        protected final String componentType;
-
-        protected final String renderType;
-
-        protected final Class type;
-
-        protected final Constructor constructor;
-
-        public UserComponentHandlerFactory(String componentType,
-                String renderType, Class type) {
-            this.componentType = componentType;
-            this.renderType = renderType;
-            this.type = type;
-            try {
-                this.constructor = this.type.getConstructor(CONS_SIG);
-            } catch (Exception e) {
-                throw new FaceletException(
-                        "Must have a Constructor that takes in a ComponentConfig",
-                        e);
-            }
-        }
-
-        public TagHandler createHandler(TagConfig cfg) throws FacesException,
-                ELException {
-            try {
-                ComponentConfig ccfg = new ComponentConfigWrapper(cfg,
-                        this.componentType, this.renderType);
-                return (TagHandler) this.constructor
-                        .newInstance(new Object[] { ccfg });
-            } catch (InvocationTargetException e) {
-                throw new FaceletException(e.getCause().getMessage(), e.getCause().getCause());
-            } catch (Exception e) {
-                throw new FaceletException("Error Instantiating ComponentHandler: "+this.type.getName(), e);
-            }
-        }
-    }
-
-    private static class ValidatorHandlerFactory implements TagHandlerFactory {
-
-        protected final String validatorId;
-
-        public ValidatorHandlerFactory(String validatorId) {
-            this.validatorId = validatorId;
-        }
-
-        public TagHandler createHandler(TagConfig cfg) throws FacesException,
-                ELException {
-            return new ValidatorHandler(new ValidatorConfigWrapper(cfg, this.validatorId));
-        }
-    }
-
-    private static class ConverterHandlerFactory implements TagHandlerFactory {
-
-        protected final String converterId;
-
-        public ConverterHandlerFactory(String converterId) {
-            this.converterId = converterId;
-        }
-
-        public TagHandler createHandler(TagConfig cfg) throws FacesException,
-                ELException {
-            return new ConverterHandler(new ConverterConfigWrapper(cfg, this.converterId));
-        }
-    }
-    
-    private static final class BehaviorHandlerFactory implements TagHandlerFactory {
-    	private final String behaviorId;
-
-		/**
-		 * <p class="changed_added_2_0"></p>
-		 * @param behaviorId
-		 */
-		public BehaviorHandlerFactory(String behaviorId) {
-			this.behaviorId = behaviorId;
-		}
-    	
-		public TagHandler createHandler(TagConfig cfg) throws FacesException,
-				ELException {
-			return new BehaviorHandler(new BehaviorConfigWrapper(cfg,behaviorId));
-		}
-    }
-
-    private static class UserConverterHandlerFactory implements TagHandlerFactory {
-        private final static Class[] CONS_SIG = new Class[] { ConverterConfig.class };
-        
-        protected final String converterId;
-        
-        protected final Class type;
-
-        protected final Constructor constructor;
-        
-        public UserConverterHandlerFactory(String converterId, Class type) {
-            this.converterId = converterId;
-            this.type = type;
-            try {
-                this.constructor = this.type.getConstructor(CONS_SIG);
-            } catch (Exception e) {
-                throw new FaceletException(
-                        "Must have a Constructor that takes in a ConverterConfig",
-                        e);
-            }
-        }
-        
-        public TagHandler createHandler(TagConfig cfg) throws FacesException,
-        ELException {
-            try {
-                ConverterConfig ccfg = new ConverterConfigWrapper(cfg,
-                        this.converterId);
-                return (TagHandler) this.constructor
-                        .newInstance(new Object[] { ccfg });
-            } catch (InvocationTargetException e) {
-                throw new FaceletException(e.getCause().getMessage(), e.getCause().getCause());
-            } catch (Exception e) {
-                throw new FaceletException("Error Instantiating ConverterHandler: "+this.type.getName(), e);
-            }
-        }
-    }
-    
-    private static class UserValidatorHandlerFactory implements
-			TagHandlerFactory {
-		private final static Class[] CONS_SIG = new Class[] { ValidatorConfig.class };
-
-		protected final String validatorId;
-
-		protected final Class type;
-
-		protected final Constructor constructor;
-
-		public UserValidatorHandlerFactory(String validatorId, Class type) {
-			this.validatorId = validatorId;
-			this.type = type;
-			try {
-				this.constructor = this.type.getConstructor(CONS_SIG);
-			} catch (Exception e) {
-				throw new FaceletException(
-						"Must have a Constructor that takes in a ValidatorConfig",
-						e);
-			}
-		}
-
-		public TagHandler createHandler(TagConfig cfg) throws FacesException,
-				ELException {
-			try {
-				ValidatorConfig ccfg = new ValidatorConfigWrapper(cfg,
-						this.validatorId);
-				return (TagHandler) this.constructor
-						.newInstance(new Object[] { ccfg });
-			} catch (InvocationTargetException e) {
-				throw new FaceletException(e.getCause().getMessage(), e
-						.getCause().getCause());
-			} catch (Exception e) {
-				throw new FaceletException(
-						"Error Instantiating ValidatorHandler: "
-								+ this.type.getName(), e);
-			}
-		}
-	}
- 
-    private static class UserBehaviorHandlerFactory implements
-			TagHandlerFactory {
-		private final static Class[] CONS_SIG = new Class[] { BehaviorConfig.class };
-
-		protected final String behaviorId;
-
-		protected final Class type;
-
-		protected final Constructor constructor;
-
-		public UserBehaviorHandlerFactory(String behaviorId, Class type) {
-			this.behaviorId = behaviorId;
-			this.type = type;
-			try {
-				this.constructor = this.type.getConstructor(CONS_SIG);
-			} catch (Exception e) {
-				throw new FaceletException(
-						"Must have a Constructor that takes in a BehaviorConfig",
-						e);
-			}
-		}
-
-		public TagHandler createHandler(TagConfig cfg) throws FacesException,
-				ELException {
-			try {
-				BehaviorConfig ccfg = new BehaviorConfigWrapper(cfg,
-						this.behaviorId);
-				return (TagHandler) this.constructor
-						.newInstance(new Object[] { ccfg });
-			} catch (InvocationTargetException e) {
-				throw new FaceletException(e.getCause().getMessage(), e
-						.getCause().getCause());
-			} catch (Exception e) {
-				throw new FaceletException(
-						"Error Instantiating BehaviorHandler: "
-								+ this.type.getName(), e);
-			}
-		}
-	}
-        
-    private final Map factories;
-
-    private final String namespace;
-
-    private final Map functions;
-
-    public AbstractTagLibrary(String namespace) {
-        this.namespace = namespace;
-        this.factories = new HashMap();
-        this.functions = new HashMap();
-    }
-
-    /**
-     * Add a ComponentHandlerImpl with the specified componentType and rendererType,
-     * aliased by the tag name.
-     * 
-     * @see ComponentHandlerImpl
-     * @see javax.faces.application.Application#createComponent(java.lang.String)
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param componentType
-     *            componentType to use
-     * @param rendererType
-     *            rendererType to use
-     */
-    protected final void addComponent(String name, String componentType,
-            String rendererType) {
-        this.factories.put(name, new ComponentHandlerFactory(componentType,
-                rendererType));
-    }
-
-    /**
-     * Add a ComponentHandlerImpl with the specified componentType and rendererType,
-     * aliased by the tag name. The Facelet will be compiled with the specified
-     * HandlerType (which must extend AbstractComponentHandler).
-     * 
-     * @see ComponentHandlerImpl
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param componentType
-     *            componentType to use
-     * @param rendererType
-     *            rendererType to use
-     * @param handlerType
-     *            a Class that extends AbstractComponentHandler
-     */
-    protected final void addComponent(String name, String componentType,
-            String rendererType, Class handlerType) {
-        this.factories.put(name, new UserComponentHandlerFactory(componentType,
-                rendererType, handlerType));
-    }
-
-    /**
-     * Add a ConverterHandler for the specified converterId
-     * 
-     * @see ConverterHandler
-     * @see javax.faces.application.Application#createConverter(java.lang.String)
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param converterId
-     *            id to pass to Application instance
-     */
-    protected final void addConverter(String name, String converterId) {
-        this.factories.put(name, new ConverterHandlerFactory(converterId));
-    }
-    
-    /**
-     * Add a ConverterHandler for the specified converterId of a TagHandler type
-     * 
-     * @see ConverterHandler
-     * @see ConverterConfig
-     * @see javax.faces.application.Application#createConverter(java.lang.String)
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param converterId
-     *            id to pass to Application instance
-     * @param type
-     *            TagHandler type that takes in a ConverterConfig
-     */
-    protected final void addConverter(String name, String converterId, Class type) {
-        this.factories.put(name, new UserConverterHandlerFactory(converterId, type));
-    }
-
-    /**
-     * Add a ValidatorHandler for the specified validatorId
-     * 
-     * @see ValidatorHandler
-     * @see javax.faces.application.Application#createValidator(java.lang.String)
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param validatorId
-     *            id to pass to Application instance
-     */
-    protected final void addValidator(String name, String validatorId) {
-        this.factories.put(name, new ValidatorHandlerFactory(validatorId));
-    }
-    
-    /**
-     * Add a ValidatorHandler for the specified validatorId
-     * 
-     * @see ValidatorHandler
-     * @see ValidatorConfig
-     * @see javax.faces.application.Application#createValidator(java.lang.String)
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param validatorId
-     *            id to pass to Application instance
-     * @param type
-     *            TagHandler type that takes in a ValidatorConfig
-     */
-    protected final void addValidator(String name, String validatorId, Class type) {
-        this.factories.put(name, new UserValidatorHandlerFactory(validatorId, type));
-    }
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     * @param name
-     * @param behaviorId
-     */
-    protected final void addBehavior(String name, String behaviorId){
-		this.factories.put(name, new BehaviorHandlerFactory(behaviorId));
-	}
-
-    protected final void addBehavior(String name, String behaviorId, Class type) {
-        this.factories.put(name, new UserBehaviorHandlerFactory(behaviorId, type));
-    }
-	/**
-     * Use the specified HandlerType in compiling Facelets. HandlerType must
-     * extend TagHandler.
-     * 
-     * @see TagHandler
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param handlerType
-     *            must extend TagHandler
-     */
-    protected final void addTagHandler(String name, Class handlerType) {
-        this.factories.put(name, new HandlerFactory(handlerType));
-    }
-
-    /**
-     * Add a UserTagHandler specified a the URL source.
-     * 
-     * @see UserTagHandler
-     * @param name
-     *            name to use, "foo" would be <my:foo />
-     * @param source source where the Facelet (Tag) source is
-     */
-    protected final void addUserTag(String name, URL source) {
-        this.factories.put(name, new UserTagFactory(source));
-    }
-    
-    
-    /**
-     * Add a Method to be used as a Function at Compilation.
-     * 
-     * @see javax.el.FunctionMapper
-     * 
-     * @param name (suffix) of function name
-     * @param method method instance 
-     */
-    protected final void addFunction(String name, Method method) {
-        this.functions.put(name, method);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.TagLibrary#containsNamespace(java.lang.String)
-     */
-    public boolean containsNamespace(String ns, Tag t) {
-        return this.namespace.equals(ns);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.TagLibrary#containsTagHandler(java.lang.String,
-     *      java.lang.String)
-     */
-    public boolean containsTagHandler(String ns, String localName) {
-        if (this.namespace.equals(ns)) {
-            if (this.factories.containsKey(localName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.TagLibrary#createTagHandler(java.lang.String,
-     *      java.lang.String, com.sun.facelets.TagConfig)
-     */
-    public TagHandler createTagHandler(String ns, String localName,
-            TagConfig tag) throws FacesException {
-        if (this.namespace.equals(ns)) {
-            TagHandlerFactory f = (TagHandlerFactory) this.factories
-                    .get(localName);
-            if (f != null) {
-                return f.createHandler(tag);
-            }
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.TagLibrary#containsFunction(java.lang.String,
-     *      java.lang.String)
-     */
-    public boolean containsFunction(String ns, String name) {
-        if (this.namespace.equals(ns)) {
-            return this.functions.containsKey(name);
-        }
-        return false;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.TagLibrary#createFunction(java.lang.String,
-     *      java.lang.String)
-     */
-    public Method createFunction(String ns, String name) {
-        if (this.namespace.equals(ns)) {
-            return (Method) this.functions.get(name);
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.lang.Object#equals(java.lang.Object)
-     */
-    public boolean equals(Object obj) {
-        return (obj instanceof TagLibrary && obj.hashCode() == this.hashCode());
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode() {
-        return this.namespace.hashCode();
-    }
-
-    public String getNamespace() {
-        return namespace;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/BeanPropertyTagRule.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/BeanPropertyTagRule.java
deleted file mode 100644
index bef64a7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/BeanPropertyTagRule.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import javax.faces.view.facelets.*;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: BeanPropertyTagRule.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class BeanPropertyTagRule extends MetaRule {
-    
-    final static class LiteralPropertyMetadata extends Metadata {
-        
-        private final Method method;
-
-        private final TagAttribute attribute;
-
-        private Object[] value;
-
-        public LiteralPropertyMetadata(Method method, TagAttribute attribute) {
-            this.method = method;
-            this.attribute = attribute;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            if (value == null) {
-                String str = this.attribute.getValue();
-                value = new Object[] { ctx.getExpressionFactory().coerceToType(str,
-                        method.getParameterTypes()[0]) };
-            }
-            try {
-                method.invoke(instance, this.value);
-            } catch (InvocationTargetException e) {
-                throw new TagAttributeException(this.attribute, e.getCause());
-            } catch (Exception e) {
-                throw new TagAttributeException(this.attribute, e);
-            }
-        }
-
-    }
-    
-    final static class DynamicPropertyMetadata extends Metadata {
-
-        private final Method method;
-
-        private final TagAttribute attribute;
-
-        private final Class type;
-
-        public DynamicPropertyMetadata(Method method, TagAttribute attribute) {
-            this.method = method;
-            this.type = method.getParameterTypes()[0];
-            this.attribute = attribute;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            try {
-                this.method.invoke(instance, new Object[] { this.attribute
-                        .getObject(ctx, this.type) });
-            } catch (InvocationTargetException e) {
-                throw new TagAttributeException(this.attribute, e.getCause());
-            } catch (Exception e) {
-                throw new TagAttributeException(this.attribute, e);
-            }
-        }
-    }
-    
-    public final static BeanPropertyTagRule Instance = new BeanPropertyTagRule();
-
-    public Metadata applyRule(String name, TagAttribute attribute,
-            MetadataTarget meta) {
-        Method m = meta.getWriteMethod(name);
-
-        // if the property is writable
-        if (m != null) {
-            if (attribute.isLiteral()) {
-                return new LiteralPropertyMetadata(m, attribute);
-            } else {
-                return new DynamicPropertyMetadata(m, attribute);
-            }
-        }
-
-        return null;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/CompositeTagDecorator.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/CompositeTagDecorator.java
deleted file mode 100644
index 173a681..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/CompositeTagDecorator.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.util.Util;
-
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagDecorator;
-
-/**
- * A TagDecorator that is composed of 1 or more TagDecorator instances. It uses
- * the chain of responsibility pattern to stop processing if any of the
- * TagDecorators return a value other than null.
- * 
- * @author Jacob Hookom
- * @version $Id: CompositeTagDecorator.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class CompositeTagDecorator implements TagDecorator {
-
-    private final TagDecorator[] decorators;
-
-    public CompositeTagDecorator(TagDecorator[] decorators) {
-        Util.notNull("decorators", decorators);
-        this.decorators = decorators;
-    }
-
-    /**
-     * Uses the chain of responsibility pattern to stop processing if any of
-     * the TagDecorators return a value other than null.
-     * 
-     * @see com.sun.faces.facelets.TagDecorator#decorate(com.sun.faces.facelets.Tag)
-     */
-    public Tag decorate(Tag tag) {
-        Tag t = null;
-        for (int i = 0; i < this.decorators.length; i++) {
-            t = this.decorators[i].decorate(tag);
-            if (t != null) {
-                return t;
-            }
-        }
-        return tag;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/CompositeTagLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/CompositeTagLibrary.java
deleted file mode 100644
index 4a23f75..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/CompositeTagLibrary.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.facelets.compiler.CompilationMessageHolder;
-import com.sun.faces.facelets.tag.jsf.CompositeComponentTagLibrary;
-import com.sun.faces.util.Util;
-
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-import javax.faces.application.ProjectStage;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-import java.lang.reflect.Method;
-import java.util.List;
-
-/**
- * A TagLibrary that is composed of 1 or more TagLibrary children. Uses the
- * chain of responsibility pattern to stop searching as soon as one of the
- * children handles the requested method.
- * 
- * @author Jacob Hookom
- * @version $Id: CompositeTagLibrary.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class CompositeTagLibrary implements TagLibrary {
-
-    private TagLibrary[] libraries;
-    private CompilationMessageHolder messageHolder;
-
-    public CompositeTagLibrary(TagLibrary[] libraries, CompilationMessageHolder unit) {
-        Util.notNull("libraries", libraries);
-        this.libraries = libraries;
-        this.messageHolder = unit;
-    }
-
-    public CompositeTagLibrary(TagLibrary[] libraries) {
-        this(libraries, null);
-    }
-    
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.tag.TagLibrary#containsNamespace(java.lang.String)
-     */
-    public boolean containsNamespace(String ns, Tag t) {
-        boolean result = true;
-        for (int i = 0; i < this.libraries.length; i++) {
-            if (this.libraries[i].containsNamespace(ns, null)) {
-                return true;
-            }
-        }
-        // PENDING: this is a terribly inefficient impl.  Needs refactoring.
-        CompositeComponentTagLibrary toTest = new CompositeComponentTagLibrary(ns);
-        if (toTest.tagLibraryForNSExists(ns)) {
-            TagLibrary [] librariesPlusOne = new TagLibrary[libraries.length+1];
-            System.arraycopy(this.libraries, 0, librariesPlusOne, 
-                    0, libraries.length);
-            librariesPlusOne[libraries.length] = 
-                    new CompositeComponentTagLibrary(ns);
-            for (int i = 0; i < this.libraries.length; i++) {
-                libraries[i] = null;
-            }
-            libraries = librariesPlusOne;
-            return true;
-        }
-        else {
-            FacesContext context = FacesContext.getCurrentInstance();
-            if (context.isProjectStage(ProjectStage.Development)) {
-                if (null != t &&
-                    !ns.equals("http://www.w3.org/1999/xhtml")) {
-                    // messageHolder will only be null in the case of the private 
-                    // EMPTY_LIBRARY class variable of the Compiler class.
-                    // This code will never be called on that CompositeTagLibrary
-                    // instance.
-                    assert(null != this.messageHolder);
-                    String prefix = getPrefixFromTag(t);
-                    if (null != prefix) {
-                        List<FacesMessage> prefixMessages = this.messageHolder.getNamespacePrefixMessages(context, prefix);
-                        prefixMessages.add(new FacesMessage(FacesMessage.SEVERITY_WARN,
-                                "Warning: This page calls for XML namespace " + ns +
-                                " declared with prefix " + prefix + 
-                                " but no taglibrary exists for that namespace.", ""));
-                    }
-                }
-            }
-        }
-        return false;
-    }
-    
-    private String getPrefixFromTag(Tag t) {
-        String result = t.getQName();
-        if (null != result) {
-            int i;
-            if (-1 != (i = result.indexOf(":"))) {
-                result = result.substring(0, i);
-            }
-        }
-        return result;
-    }
-    
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.tag.TagLibrary#containsTagHandler(java.lang.String,
-     *      java.lang.String)
-     */
-    public boolean containsTagHandler(String ns, String localName) {
-        for (int i = 0; i < this.libraries.length; i++) {
-            if (this.libraries[i].containsTagHandler(ns, localName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.tag.TagLibrary#createTagHandler(java.lang.String,
-     *      java.lang.String, com.sun.facelets.tag.TagConfig)
-     */
-    public TagHandler createTagHandler(String ns, String localName,
-            TagConfig tag) throws FacesException {
-        for (int i = 0; i < this.libraries.length; i++) {
-            if (this.libraries[i].containsTagHandler(ns, localName)) {
-                return this.libraries[i].createTagHandler(ns, localName, tag);
-            }
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.tag.TagLibrary#containsFunction(java.lang.String,
-     *      java.lang.String)
-     */
-    public boolean containsFunction(String ns, String name) {
-        for (int i = 0; i < this.libraries.length; i++) {
-            if (this.libraries[i].containsFunction(ns, name)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.tag.TagLibrary#createFunction(java.lang.String,
-     *      java.lang.String)
-     */
-    public Method createFunction(String ns, String name) {
-        for (int i = 0; i < this.libraries.length; i++) {
-            if (this.libraries[i].containsFunction(ns, name)) {
-                return this.libraries[i].createFunction(ns, name);
-            }
-        }
-        return null;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/IterationStatus.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/IterationStatus.java
deleted file mode 100644
index e49b708..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/IterationStatus.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import java.io.Serializable;
-
-/**
- * @author Jacob Hookom
- * @version $Id: IterationStatus.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public class IterationStatus implements Serializable {
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    private final int index;
-    private final boolean first;
-    private final boolean last;
-    private final Integer begin;
-    private final Integer end;
-    private final Integer step;
-    private final boolean even;
-    private final Object current;
-    private final int iterationCount;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructor used for ui:repeat.
-     */
-    public IterationStatus(boolean first,
-                           boolean last,
-                           int index,
-                           Integer begin,
-                           Integer end,
-                           Integer step) {
-        this(first, last, index, begin, end, step, null, 0);
-    }
-
-
-    /**
-     * Constructor used for c:forEach varStatus
-     */
-    public IterationStatus(boolean first,
-                           boolean last,
-                           int index,
-                           Integer begin,
-                           Integer end,
-                           Integer step,
-                           Object current,
-                           int iterationCount) {
-        this.index = index;
-        this.begin = begin;
-        this.end = end;
-        this.step = step;
-        this.first = first;
-        this.last = last;
-        this.current = current;
-        int iBegin = ((begin != null) ? begin : 0);
-        int iStep = ((step != null) ? step : 1);
-        this.even = ((index - iBegin) / iStep) % 2 == 0;
-        this.iterationCount = iterationCount;
-    }
-
-
-    // ---------------------------------------------- Methods from LoopTagStatus
-
-
-    public boolean isFirst() {
-        return this.first;
-    }
-
-    public boolean isLast() {
-        return this.last;
-    }
-
-    public Integer getBegin() {
-        return begin;
-    }
-
-    public Integer getEnd() {
-        return end;
-    }
-
-    public int getIndex() {
-        return index;
-    }
-
-    public Integer getStep() {
-        return step;
-    }
-
-    public Object getCurrent() {
-        return current;
-    }
-
-    public int getCount() {
-        return iterationCount;
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public boolean isEven() {
-        return even;
-    }
-
-    public boolean isOdd() {
-        return !even;
-    }
-
-    @Override
-    public String toString() {
-        return "IterationStatus{" +
-               "index=" + index +
-               ", first=" + first +
-               ", last=" + last +
-               ", begin=" + begin +
-               ", end=" + end +
-               ", step=" + step +
-               ", even=" + even +
-               ", current=" + current +
-               ", iterationCount=" + iterationCount +
-               '}';
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetaRulesetImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetaRulesetImpl.java
deleted file mode 100644
index 325a74a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetaRulesetImpl.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import javax.faces.view.facelets.*;
-import java.beans.IntrospectionException;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: MetaRulesetImpl.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public class MetaRulesetImpl extends MetaRuleset {
-
-    private final static Logger LOGGER = FacesLogger.FACELETS_META.getLogger();
-    private final static WeakHashMap<Class, MetadataTarget> metadata =
-          new WeakHashMap<Class, MetadataTarget>();
-
-    private final Tag tag;
-    private final Class type;
-    private final Map<String,TagAttribute> attributes;
-    private final List<Metadata> mappers;
-    private final List<MetaRule> rules;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public MetaRulesetImpl(Tag tag, Class<?> type) {
-
-        this.tag = tag;
-        this.type = type;
-        this.attributes = new HashMap<String,TagAttribute>();
-        this.mappers = new ArrayList<Metadata>();
-        this.rules = new ArrayList<MetaRule>();
-
-        // setup attributes
-        TagAttribute[] attrs = this.tag.getAttributes().getAll();
-        for (int i = 0; i < attrs.length; i++) {
-            attributes.put(attrs[i].getLocalName(), attrs[i]);
-        }
-
-        // add default rules
-        this.rules.add(BeanPropertyTagRule.Instance);
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public MetaRuleset ignore(String attribute) {
-
-        Util.notNull("attribute", attribute);
-        this.attributes.remove(attribute);
-        return this;
-
-    }
-
-
-    public MetaRuleset alias(String attribute, String property) {
-
-        Util.notNull("attribute", attribute);
-        Util.notNull("property", property);
-        TagAttribute attr = this.attributes.remove(attribute);
-        if (attr != null) {
-            this.attributes.put(property, attr);
-        }
-        return this;
-
-    }
-
-    public MetaRuleset add(Metadata mapper) {
-
-        Util.notNull("mapper", mapper);
-        if (!this.mappers.contains(mapper)) {
-            this.mappers.add(mapper);
-        }
-        return this;
-
-    }
-
-    public MetaRuleset addRule(MetaRule rule) {
-
-        Util.notNull("rule", rule);
-        this.rules.add(rule);
-        return this;
-
-    }
-
-
-     public Metadata finish() {
-
-        if (!this.attributes.isEmpty()) {
-            if (this.rules.isEmpty()) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    for (Iterator<TagAttribute> itr = this.attributes.values().iterator(); itr.hasNext(); ) {
-                        LOGGER.severe(itr.next() + " Unhandled by MetaTagHandler for type "+this.type.getName());
-                    }
-                }
-            } else {
-                MetadataTarget target = this.getMetadataTarget();
-                // now iterate over attributes
-                int ruleEnd = this.rules.size() - 1;
-                for (Map.Entry<String,TagAttribute> entry : attributes.entrySet()) {
-                    Metadata data = null;
-                    int i = ruleEnd;
-                    while (data == null && i >= 0) {
-                        MetaRule rule = this.rules.get(i);
-                        data = rule.applyRule(entry.getKey(), entry.getValue(), target);
-                        i--;
-                    }
-                    if (data == null) {
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.severe(entry.getValue() + " Unhandled by MetaTagHandler for type "+this.type.getName());
-                        }
-                    } else {
-                        this.mappers.add(data);
-                    }
-                }
-            }
-        }
-
-        if (this.mappers.isEmpty()) {
-            return NONE;
-        } else {
-            return new MetadataImpl(this.mappers.toArray(new Metadata[this.mappers.size()]));
-        }
-
-    }
-
-    public MetaRuleset ignoreAll() {
-
-        this.attributes.clear();
-        return this;
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected MetadataTarget getMetadataTarget() {
-
-        MetadataTarget meta = metadata.get(type);
-        if (meta == null) {
-            try {
-                meta = new MetadataTargetImpl(type);
-            } catch (IntrospectionException e) {
-                throw new TagException(this.tag,
-                        "Error Creating TargetMetadata", e);
-            }
-            metadata.put(type, meta);
-        }
-        return meta;
-
-    }
-
-
-
-    // --------------------------------------------------------- Private Methods
-
-    
-    private final static Metadata NONE = new Metadata() {
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            // do nothing
-        }
-
-    };
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetaTagHandlerImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetaTagHandlerImpl.java
deleted file mode 100644
index 355cf0a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetaTagHandlerImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.util.Util;
-
-import javax.faces.view.facelets.MetaRuleset;
-import javax.faces.view.facelets.MetaTagHandler;
-import javax.faces.view.facelets.TagConfig;
-
-/**
- * A base tag for wiring state to an object instance based on rules populated at
- * the time of creating a MetaRuleset.
- * 
- * @author Jacob Hookom
- * @version $Id: MetaTagHandlerImpl.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public abstract class MetaTagHandlerImpl extends MetaTagHandler {
-
-    public MetaTagHandlerImpl(TagConfig config) {
-        super(config);
-    }
-
-    /**
-     * Extend this method in order to add your own rules.
-     * 
-     * @param type
-     * @return
-     */
-    protected MetaRuleset createMetaRuleset(Class type) {
-        Util.notNull("type", type);
-        return new MetaRulesetImpl(this.tag, type);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetadataImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetadataImpl.java
deleted file mode 100644
index 9b3fcf2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetadataImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag;
-
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.Metadata;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: MetadataImpl.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class MetadataImpl extends Metadata {
-
-    private final Metadata[] mappers;
-    private final int size;
-    
-    public MetadataImpl(Metadata[] mappers) {
-        this.mappers = mappers;
-        this.size = mappers.length;
-    }
-
-    public void applyMetadata(FaceletContext ctx, Object instance) {
-        for (int i = 0; i < size; i++) {
-            this.mappers[i].applyMetadata(ctx, instance);
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetadataTargetImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetadataTargetImpl.java
deleted file mode 100644
index 0b4acd8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MetadataTargetImpl.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag;
-
-import javax.faces.view.facelets.MetadataTarget;
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: MetadataTargetImpl.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public class MetadataTargetImpl extends MetadataTarget {
-
-    private final Map pd;
-    private final Class type;
-    
-    
-    public MetadataTargetImpl(Class type) throws IntrospectionException {
-        this.type = type;
-        this.pd = new HashMap();
-        BeanInfo info = Introspector.getBeanInfo(type);
-        PropertyDescriptor[] pda = info.getPropertyDescriptors();
-        for (int i = 0; i < pda.length; i++) {
-            this.pd.put(pda[i].getName(), pda[i]);
-        }
-    }
-
-    public PropertyDescriptor getProperty(String name) {
-        return (PropertyDescriptor) this.pd.get(name);
-    }
-
-    public boolean isTargetInstanceOf(Class type) {
-        return type.isAssignableFrom(this.type);
-    }
-
-    public Class getTargetClass() {
-        return this.type;
-    }
-
-    public Class getPropertyType(String name) {
-        PropertyDescriptor pd = this.getProperty(name);
-        if (pd != null) {
-            return pd.getPropertyType();
-        }
-        return null;
-    }
-
-    public Method getWriteMethod(String name) {
-        PropertyDescriptor pd = this.getProperty(name);
-        if (pd != null) {
-            return pd.getWriteMethod();
-        }
-        return null;
-    }
-
-    public Method getReadMethod(String name) {
-        PropertyDescriptor pd = this.getProperty(name);
-        if (pd != null) {
-            return pd.getReadMethod();
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MethodRule.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MethodRule.java
deleted file mode 100644
index 189a49e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/MethodRule.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.facelets.el.LegacyMethodBinding;
-
-import javax.el.MethodExpression;
-import javax.faces.el.MethodBinding;
-import javax.faces.view.facelets.*;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * Optional Rule for binding Method[Binding|Expression] properties
- * 
- * @author Mike Kienenberger
- * @author Jacob Hookom
- */
-public final class MethodRule extends MetaRule {
-
-    private final String methodName;
-
-    private final Class returnTypeClass;
-
-    private final Class[] params;
-
-    public MethodRule(String methodName, Class returnTypeClass, Class[] params) {
-        this.methodName = methodName;
-        this.returnTypeClass = returnTypeClass;
-        this.params = params;
-    }
-
-    public Metadata applyRule(String name, TagAttribute attribute,
-            MetadataTarget meta) {
-        if (!name.equals(this.methodName))
-            return null;
-
-        if (MethodBinding.class.equals(meta.getPropertyType(name))) {
-            Method method = meta.getWriteMethod(name);
-            if (method != null) {
-                return new MethodBindingMetadata(method, attribute,
-                        this.returnTypeClass, this.params);
-            }
-        } else if (MethodExpression.class.equals(meta.getPropertyType(name))) {
-            Method method = meta.getWriteMethod(name);
-            if (method != null) {
-                return new MethodExpressionMetadata(method, attribute,
-                        this.returnTypeClass, this.params);
-            }
-        }
-
-        return null;
-    }
-
-    private static class MethodBindingMetadata extends Metadata {
-        private final Method _method;
-
-        private final TagAttribute _attribute;
-
-        private Class[] _paramList;
-
-        private Class _returnType;
-
-        public MethodBindingMetadata(Method method, TagAttribute attribute,
-                Class returnType, Class[] paramList) {
-            _method = method;
-            _attribute = attribute;
-            _paramList = paramList;
-            _returnType = returnType;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            MethodExpression expr = _attribute.getMethodExpression(ctx,
-                    _returnType, _paramList);
-
-            try {
-                _method.invoke(instance, new LegacyMethodBinding(expr) );
-            } catch (InvocationTargetException e) {
-                throw new TagAttributeException(_attribute, e.getCause());
-            } catch (Exception e) {
-                throw new TagAttributeException(_attribute, e);
-            }
-        }
-    }
-
-    private static class MethodExpressionMetadata extends Metadata {
-        private final Method _method;
-
-        private final TagAttribute _attribute;
-
-        private Class[] _paramList;
-
-        private Class _returnType;
-
-        public MethodExpressionMetadata(Method method, TagAttribute attribute,
-                Class returnType, Class[] paramList) {
-            _method = method;
-            _attribute = attribute;
-            _paramList = paramList;
-            _returnType = returnType;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            MethodExpression expr = _attribute.getMethodExpression(ctx,
-                    _returnType, _paramList);
-
-            try {
-                _method.invoke(instance, expr );
-            } catch (InvocationTargetException e) {
-                throw new TagAttributeException(_attribute, e.getCause());
-            } catch (Exception e) {
-                throw new TagAttributeException(_attribute, e);
-            }
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagAttributeImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagAttributeImpl.java
deleted file mode 100644
index 2039745..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagAttributeImpl.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.facelets.el.ContextualCompositeMethodExpression;
-import com.sun.faces.facelets.el.ELText;
-import com.sun.faces.facelets.el.TagMethodExpression;
-import com.sun.faces.facelets.el.TagValueExpression;
-import com.sun.faces.facelets.el.ContextualCompositeValueExpression;
-import com.sun.faces.util.MessageUtils;
-import static com.sun.faces.util.MessageUtils.ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR;
-import com.sun.faces.util.Util;
-
-import javax.el.ELException;
-import javax.el.ExpressionFactory;
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
-import javax.el.MethodInfo;
-import javax.el.ELContext;
-import javax.faces.view.Location;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.FacesException;
-
-/**
- * Representation of a Tag's attribute in a Facelet File
- * 
- * @author Jacob Hookom
- * @version $Id: TagAttributeImpl.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class TagAttributeImpl extends TagAttribute {
-
-    private final boolean literal;
-
-    private final String localName;
-
-    private final Location location;
-
-    private final String namespace;
-
-    private final String qName;
-
-    private final String value;
-
-    private String string;
-
-    public TagAttributeImpl(Location location, String ns, String localName,
-            String qName, String value) {
-        this.location = location;
-        this.namespace = ns;
-        this.localName = localName;
-        this.qName = qName;
-        this.value = value;
-        try {
-            this.literal = ELText.isLiteral(this.value);
-        } catch (ELException e) {
-            throw new TagAttributeException(this, e);
-        }
-    }
-
-    /**
-     * If literal, return
-     * {@link Boolean#getBoolean(java.lang.String) Boolean.getBoolean(java.lang.String)}
-     * passing our value, otherwise call
-     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
-     * 
-     * @see Boolean#getBoolean(java.lang.String)
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return boolean value
-     */
-    @Override
-    public boolean getBoolean(FaceletContext ctx) {
-        if (this.literal) {
-            return Boolean.valueOf(this.value);
-        } else {
-            return ((Boolean) this.getObject(ctx, Boolean.class));
-        }
-    }
-
-    /**
-     * If literal, call
-     * {@link Integer#parseInt(java.lang.String) Integer.parseInt(String)},
-     * otherwise call
-     * {@link #getObject(FaceletContext, Class) getObject(FaceletContext, Class)}.
-     * 
-     * @see Integer#parseInt(java.lang.String)
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return int value
-     */
-    @Override
-    public int getInt(FaceletContext ctx) {
-        if (this.literal) {
-            return Integer.parseInt(this.value);
-        } else {
-            return ((Number) this.getObject(ctx, Integer.class)).intValue();
-        }
-    }
-
-    /**
-     * Local name of this attribute
-     * 
-     * @return local name of this attribute
-     */
-    @Override
-    public String getLocalName() {
-        return this.localName;
-    }
-
-    /**
-     * The location of this attribute in the FaceletContext
-     * 
-     * @return the TagAttributeImpl's location
-     */
-    @Override
-    public Location getLocation() {
-        return this.location;
-    }
-
-    /**
-     * Create a MethodExpression, using this attribute's value as the expression
-     * String.
-     * 
-     * @see ExpressionFactory#createMethodExpression(javax.el.ELContext,
-     *      java.lang.String, java.lang.Class, java.lang.Class[])
-     * @see MethodExpression
-     * @param ctx
-     *            FaceletContext to use
-     * @param type
-     *            expected return type
-     * @param paramTypes
-     *            parameter type
-     * @return a MethodExpression instance
-     */
-    @Override
-    public MethodExpression getMethodExpression(FaceletContext ctx,
-                                                Class type,
-                                                Class[] paramTypes) {
-
-        MethodExpression result;
-
-        try {
-            ExpressionFactory f = ctx.getExpressionFactory();
-            if (ELUtils.isCompositeComponentLookupWithArgs(this.value)) {
-                String message =
-                      MessageUtils.getExceptionMessageString(ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR);
-                throw new TagAttributeException(this, message);
-            }
-            // Determine if this is a composite component attribute lookup.
-            // If so, look for a MethodExpression under the attribute key
-            if (ELUtils.isCompositeComponentMethodExprLookup(this.value)) {
-                result = new AttributeLookupMethodExpression(getValueExpression(ctx, MethodExpression.class));
-            } else if (ELUtils.isCompositeComponentExpr(this.value)) {
-                MethodExpression delegate = new TagMethodExpression(this,
-                                                 f.createMethodExpression(ctx,
-                                                                          this.value,
-                                                                          type,
-                                                                          paramTypes));
-                result = new ContextualCompositeMethodExpression(getLocation(), delegate);
-            } else {
-                result = new TagMethodExpression(this,
-                                                 f.createMethodExpression(ctx,
-                                                                          this.value,
-                                                                          type,
-                                                                          paramTypes));
-            }
-        } catch (Exception e) {
-            if (e instanceof TagAttributeException) {
-                throw (TagAttributeException) e;
-            } else {
-                throw new TagAttributeException(this, e);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * The resolved Namespace for this attribute
-     * 
-     * @return resolved Namespace
-     */
-    @Override
-    public String getNamespace() {
-        return this.namespace;
-    }
-
-    /**
-     * Delegates to getObject with Object.class as a param
-     * 
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return Object representation of this attribute's value
-     */
-    @Override
-    public Object getObject(FaceletContext ctx) {
-        return this.getObject(ctx, Object.class);
-    }
-
-    /**
-     * The qualified name for this attribute
-     * 
-     * @return the qualified name for this attribute
-     */
-    @Override
-    public String getQName() {
-        return this.qName;
-    }
-
-    /**
-     * Return the literal value of this attribute
-     * 
-     * @return literal value
-     */
-    @Override
-    public String getValue() {
-        return this.value;
-    }
-
-    /**
-     * If literal, then return our value, otherwise delegate to getObject,
-     * passing String.class.
-     * 
-     * @see #getObject(FaceletContext, Class)
-     * @param ctx
-     *            FaceletContext to use
-     * @return String value of this attribute
-     */
-    @Override
-    public String getValue(FaceletContext ctx) {
-        if (this.literal) {
-            return this.value;
-        } else {
-            return (String) this.getObject(ctx, String.class);
-        }
-    }
-
-    /**
-     * If literal, simply coerce our String literal value using an
-     * ExpressionFactory, otherwise create a ValueExpression and evaluate it.
-     * 
-     * @see ExpressionFactory#coerceToType(java.lang.Object, java.lang.Class)
-     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
-     *      java.lang.String, java.lang.Class)
-     * @see ValueExpression
-     * @param ctx
-     *            FaceletContext to use
-     * @param type
-     *            expected return type
-     * @return Object value of this attribute
-     */
-    @Override
-    public Object getObject(FaceletContext ctx, Class type) {
-        if (this.literal) {
-            if (String.class.equals(type)) {
-                return this.value;
-            } else {
-                try {
-                    return ctx.getExpressionFactory().coerceToType(this.value,
-                            type);
-                } catch (Exception e) {
-                    throw new TagAttributeException(this, e);
-                }
-            }
-        } else {
-            ValueExpression ve = this.getValueExpression(ctx, type);
-            try {
-                return ve.getValue(ctx);
-            } catch (Exception e) {
-                throw new TagAttributeException(this, e);
-            }
-        }
-    }
-
-    /**
-     * Create a ValueExpression, using this attribute's literal value and the
-     * passed expected type.
-     * 
-     * @see ExpressionFactory#createValueExpression(javax.el.ELContext,
-     *      java.lang.String, java.lang.Class)
-     * @see ValueExpression
-     * @param ctx
-     *            FaceletContext to use
-     * @param type
-     *            expected return type
-     * @return ValueExpression instance
-     */
-    @Override
-    public ValueExpression getValueExpression(FaceletContext ctx, Class type) {
-        return getValueExpression(ctx, this.value, type);
-    }
-
-    /**
-     * If this TagAttributeImpl is literal (not #{..} or ${..})
-     * 
-     * @return true if this attribute is literal
-     */
-    @Override
-    public boolean isLiteral() {
-        return this.literal;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString() {
-        if (this.string == null) {
-            this.string = this.location + " " + this.qName + "=\"" + this.value
-                    + "\"";
-        }
-        return this.string;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    public ValueExpression getValueExpression(FaceletContext ctx, String expr, Class type) {
-        try {
-            ExpressionFactory f = ctx.getExpressionFactory();
-            ValueExpression delegate = f.createValueExpression(ctx,
-                                                               expr,
-                                                               type);
-            if (ELUtils.isCompositeComponentExpr(expr)) {
-                if (ELUtils.isCompositeComponentLookupWithArgs(expr)) {
-                    String message =
-                          MessageUtils.getExceptionMessageString(ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR);
-                    throw new TagAttributeException(this, message);
-                }
-                return new TagValueExpression(this,
-                                              new ContextualCompositeValueExpression(getLocation(),
-                                                                                delegate));
-            } else {
-                return new TagValueExpression(this, delegate);
-            }
-        } catch (Exception e) {
-            throw new TagAttributeException(this, e);
-        }
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static class AttributeLookupMethodExpression extends MethodExpression {
-
-        private ValueExpression lookupExpression;
-
-
-        public AttributeLookupMethodExpression(ValueExpression lookupExpression) {
-
-            Util.notNull("lookupExpression", lookupExpression);
-            this.lookupExpression = lookupExpression;
-
-        }
-
-        @SuppressWarnings({"UnusedDeclaration"})
-        public AttributeLookupMethodExpression() {} // for serialization
-
-        @Override
-        public MethodInfo getMethodInfo(ELContext elContext) {
-
-            Util.notNull("elContext", elContext);
-            Object result = lookupExpression.getValue(elContext);
-            if (result != null && result instanceof MethodExpression) {
-                return ((MethodExpression) result).getMethodInfo(elContext);
-            }
-
-            return null;
-
-        }
-
-        @Override
-        public Object invoke(ELContext elContext, Object[] args) {
-
-            Util.notNull("elContext", elContext);
-
-            Object result = lookupExpression.getValue(elContext);
-            if (result == null) {
-                throw new FacesException("Unable to resolve composite component from using page using EL expression '" + lookupExpression.getExpressionString() + '\'');
-            }
-            if (!(result instanceof MethodExpression)) {
-                throw new FacesException("Successfully resolved expression '" + lookupExpression.getExpressionString() + "', but the value is not a MethodExpression");
-            }
-
-            return ((MethodExpression) result).invoke(elContext, args);
-
-        }
-
-        @Override
-        public String getExpressionString() {
-
-            return lookupExpression.getExpressionString();
-
-        }
-
-        @Override
-        public boolean equals(Object otherObj) {
-
-            boolean result = false;
-            if (otherObj instanceof AttributeLookupMethodExpression) {
-                AttributeLookupMethodExpression other =
-                        (AttributeLookupMethodExpression) otherObj;
-                result = lookupExpression.getExpressionString().equals(other.lookupExpression.getExpressionString());
-            }
-            return result;
-
-        }
-
-        @Override
-        public boolean isLiteralText() {
-
-            return lookupExpression.isLiteralText();
-
-        }
-
-        @Override
-        public int hashCode() {
-
-            return lookupExpression.hashCode();
-
-        }
-
-    } // END AttributeLookupMethodExpression
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagAttributesImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagAttributesImpl.java
deleted file mode 100644
index 6491cbe..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagAttributesImpl.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.sun.faces.facelets.tag;
-
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributes;
-import java.util.*;
-
-/**
- * A set of TagAttributesImpl, usually representing all attributes on a Tag.
- * 
- * @see com.sun.faces.facelets.tag.Tag
- * @see javax.faces.view.facelets.TagAttribute
- * @author Jacob Hookom
- * @version $Id: TagAttributesImpl.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class TagAttributesImpl extends TagAttributes {
-    private final static TagAttribute[] EMPTY = new TagAttribute[0];
-
-    private final TagAttribute[] attrs;
-
-    private final String[] ns;
-
-    private final List nsattrs;
-
-    /**
-     * 
-     */
-    public TagAttributesImpl(TagAttribute[] attrs) {
-        this.attrs = attrs;
-
-        // grab namespaces
-        int i = 0;
-        Set set = new HashSet();
-        for (i = 0; i < this.attrs.length; i++) {
-            set.add(this.attrs[i].getNamespace());
-        }
-        this.ns = (String[]) set.toArray(new String[set.size()]);
-        Arrays.sort(ns);
-
-        // assign attrs
-        this.nsattrs = new ArrayList();
-        for (i = 0; i < ns.length; i++) {
-            nsattrs.add(i, new ArrayList());
-        }
-        int nsIdx = 0;
-        for (i = 0; i < this.attrs.length; i++) {
-            nsIdx = Arrays.binarySearch(ns, this.attrs[i].getNamespace());
-            ((List) nsattrs.get(nsIdx)).add(this.attrs[i]);
-        }
-        for (i = 0; i < ns.length; i++) {
-            List r = (List) nsattrs.get(i);
-            nsattrs.set(i, r.toArray(new TagAttribute[r.size()]));
-        }
-    }
-
-    /**
-     * Return an array of all TagAttributesImpl in this set
-     * 
-     * @return a non-null array of TagAttributesImpl
-     */
-    @Override
-    public TagAttribute[] getAll() {
-        return this.attrs;
-    }
-
-    /**
-     * Using no namespace, find the TagAttribute
-     * 
-     * @see #get(String, String)
-     * @param localName
-     *            tag attribute name
-     * @return the TagAttribute found, otherwise null
-     */
-    @Override
-    public TagAttribute get(String localName) {
-        return get("", localName);
-    }
-
-    /**
-     * Find a TagAttribute that matches the passed namespace and local name.
-     * 
-     * @param ns
-     *            namespace of the desired attribute
-     * @param localName
-     *            local name of the attribute
-     * @return a TagAttribute found, otherwise null
-     */
-    @Override
-    public TagAttribute get(String ns, String localName) {
-        if (ns != null && localName != null) {
-            int idx = Arrays.binarySearch(this.ns, ns);
-            if (idx >= 0) {
-                TagAttribute[] uia = (TagAttribute[]) this.nsattrs.get(idx);
-                for (int i = 0; i < uia.length; i++) {
-                    if (localName.equals(uia[i].getLocalName())) {
-                        return uia[i];
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Get all TagAttributesImpl for the passed namespace
-     * 
-     * @param namespace
-     *            namespace to search
-     * @return a non-null array of TagAttributesImpl
-     */
-    @Override
-    public TagAttribute[] getAll(String namespace) {
-        int idx = 0;
-        if (namespace == null) {
-            idx = Arrays.binarySearch(this.ns, "");
-        } else {
-            idx = Arrays.binarySearch(this.ns, namespace);
-        }
-        if (idx >= 0) {
-            return (TagAttribute[]) this.nsattrs.get(idx);
-        }
-        return EMPTY;
-    }
-
-    /**
-     * A list of Namespaces found in this set
-     * 
-     * @return a list of Namespaces found in this set
-     */
-    @Override
-    public String[] getNamespaces() {
-        return this.ns;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < this.attrs.length; i++) {
-            sb.append(this.attrs[i]);
-            sb.append(' ');
-        }
-        if (sb.length() > 1) {
-            sb.setLength(sb.length() - 1);
-        }
-        return sb.toString();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagHandlerFactory.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagHandlerFactory.java
deleted file mode 100644
index 5eb6029..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagHandlerFactory.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-
-/**
- * Delegate class for TagLibraries
- * 
- * @see TagLibrary
- * @author Jacob Hookom
- * @version $Id: TagHandlerFactory.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-interface TagHandlerFactory {
-    /**
-     * A new TagHandler instantiated with the passed TagConfig
-     * 
-     * @param cfg
-     *            TagConfiguration information
-     * @return a new TagHandler
-     * @throws FacesException
-     * @throws ELException
-     */
-    public TagHandler createHandler(TagConfig cfg) throws FacesException,
-            ELException;
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagHandlerImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagHandlerImpl.java
deleted file mode 100644
index f26a1e6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagHandlerImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag;
-
-import javax.faces.view.facelets.CompositeFaceletHandler;
-import javax.faces.view.facelets.FaceletHandler;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- *
- * @author edburns
- */
-public abstract class TagHandlerImpl extends TagHandler {
-
-    public TagHandlerImpl(TagConfig config) {
-        super(config);
-    }
-    
-    /**
-     * Searches child handlers, starting at the 'nextHandler' for all
-     * instances of the passed type.  This process will stop searching
-     * a branch if an instance is found.
-     * 
-     * @param type Class type to search for
-     * @return iterator over instances of FaceletHandlers of the matching type
-     */
-    protected final Iterator findNextByType(Class type) {
-        List found = new ArrayList();
-        if (type.isAssignableFrom(this.nextHandler.getClass())) {
-            found.add(this.nextHandler);
-        } else if (this.nextHandler instanceof CompositeFaceletHandler) {
-            FaceletHandler[] h = ((CompositeFaceletHandler) this.nextHandler).getHandlers();
-            for (int i = 0; i < h.length; i++) {
-                if (type.isAssignableFrom(h[i].getClass())) {
-                    found.add(h[i]);
-                }
-            }
-        }
-        return found.iterator();
-    }
-    
-    public final static Iterator findNextByType(FaceletHandler nextHandler,
-            Class type) {
-        List found = new ArrayList();
-        if (type.isAssignableFrom(nextHandler.getClass())) {
-            found.add(nextHandler);
-        } else if (nextHandler instanceof CompositeFaceletHandler) {
-            FaceletHandler[] h = ((CompositeFaceletHandler) nextHandler).getHandlers();
-            for (int i = 0; i < h.length; i++) {
-                if (type.isAssignableFrom(h[i].getClass())) {
-                    found.add(h[i]);
-                }
-            }
-        }
-        return found.iterator();
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagLibrary.java
deleted file mode 100644
index cc29f6a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagLibrary.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag;
-
-import javax.faces.FacesException;
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-import java.lang.reflect.Method;
-
-/**
- * A library of Tags associated with one or more namespaces.
- * 
- * @author Jacob Hookom
- * @version $Id: TagLibrary.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public interface TagLibrary {
-
-    /**
-     * true if the namespace is used in this library
-     * 
-     * @param ns
-     *            namespace
-     * @param t the tag instance currently active at the time
-     * this method is called.  May be null
-
-     */
-    public boolean containsNamespace(String ns, Tag t);
-
-    /**
-     * If this library contains a TagHandler for the namespace and local name true if handled by this library
-     * 
-     * @param ns
-     *            namespace
-     * @param localName
-     *            local name
-     * @return 
-     */
-    public boolean containsTagHandler(String ns, String localName);
-
-    /**
-     * Create a new instance of a TagHandler, using the passed TagConfig
-     * 
-     * @param ns
-     *            namespace
-     * @param localName
-     *            local name
-     * @param tag
-     *            configuration information
-     * @return a new TagHandler instance
-     * @throws FacesException
-     */
-    public TagHandler createTagHandler(String ns, String localName,
-            TagConfig tag) throws FacesException;
-
-    /**
-     * If this library contains the specified function name
-     * 
-     * @param ns namespace
-     * @param name function name
-     * @return true if handled
-     */
-    public boolean containsFunction(String ns, String name);
-
-    /**
-     * Return a Method instance for the passed namespace and name
-     * 
-     * @param ns namespace
-     * @param name function name
-     * @return
-     */
-    public Method createFunction(String ns, String name);
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagLibraryImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagLibraryImpl.java
deleted file mode 100644
index fcf5da4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/TagLibraryImpl.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.util.Util;
-
-import java.lang.reflect.Method;
-import java.net.URL;
-
-/**
- * Concrete implementation for defining Facelet tag libraries in Java.
- */
-public class TagLibraryImpl extends AbstractTagLibrary {
-        public TagLibraryImpl(String namespace) {
-            super(namespace);
-        }
-
-        public void putConverter(String name, String id) {
-            Util.notNull("name", name);
-            Util.notNull("id", id);
-            this.addConverter(name, id);
-        }
-
-        public void putConverter(String name, String id, Class handlerClass) {
-            Util.notNull("name", name);
-            Util.notNull("id", id);
-            Util.notNull("handlerClass", handlerClass);
-            this.addConverter(name, id, handlerClass);
-        }
-
-
-        public void putValidator(String name, String id) {
-            Util.notNull("name", name);
-            Util.notNull("id", id);
-            this.addValidator(name, id);
-        }
-
-
-        public void putValidator(String name, String id, Class handlerClass) {
-            Util.notNull("name", name);
-            Util.notNull("id", id);
-            Util.notNull("handlerClass", handlerClass);
-            this.addValidator(name, id, handlerClass);
-        }
-
-        public void putBehavior(String name, String id) {
-            Util.notNull("name", name);
-            Util.notNull("id", id);
-            this.addBehavior(name, id);
-        }
-
-        public void putBehavior(String name, String id, Class handlerClass) {
-            Util.notNull("name", name);
-            Util.notNull("id", id);
-            Util.notNull("handlerClass", handlerClass);
-            this.addBehavior(name, id, handlerClass);
-        }
-
-        public void putTagHandler(String name, Class type) {
-            Util.notNull("name", name);
-            Util.notNull("type", type);
-            this.addTagHandler(name, type);
-        }
-
-        public void putComponent(String name, String componentType,
-                String rendererType) {
-            Util.notNull("name", name);
-            Util.notNull("componentType", componentType);
-            this.addComponent(name, componentType, rendererType);
-        }
-
-        public void putComponent(String name, String componentType,
-                String rendererType, Class handlerClass) {
-            Util.notNull("name", name);
-            Util.notNull("componentType", componentType);
-            Util.notNull("handlerClass", handlerClass);
-            this.addComponent(name, componentType, rendererType, handlerClass);
-        }
-
-
-        public void putUserTag(String name, URL source) {
-            Util.notNull("name", name);
-            Util.notNull("source", source);
-            this.addUserTag(name, source);
-        }
-
-        public void putFunction(String name, Method method) {
-            Util.notNull("name", name);
-            Util.notNull("method", method);
-            this.addFunction(name, method);
-        }
-    }
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/UserTagHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/UserTagHandler.java
deleted file mode 100644
index c42bca5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/UserTagHandler.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag;
-
-import com.sun.faces.facelets.FaceletContextImplBase;
-import com.sun.faces.facelets.TemplateClient;
-import com.sun.faces.facelets.el.VariableMapperWrapper;
-import com.sun.faces.facelets.tag.ui.DefineHandler;
-
-import javax.el.VariableMapper;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagException;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * A Tag that is specified in a FaceletFile. Takes all attributes specified and
- * sets them on the FaceletContext before including the targeted Facelet file.
- * 
- * @author Jacob Hookom
- * @version $Id: UserTagHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class UserTagHandler extends TagHandlerImpl implements TemplateClient {
-
-    protected final TagAttribute[] vars;
-
-    protected final URL location;
-
-    protected final Map handlers;
-
-    /**
-     * @param config
-     */
-    public UserTagHandler(TagConfig config, URL location) {
-        super(config);
-        this.vars = this.tag.getAttributes().getAll();
-        this.location = location;
-                Iterator itr = this.findNextByType(DefineHandler.class);
-        if (itr.hasNext()) {
-            handlers = new HashMap();
-
-            DefineHandler d = null;
-            while (itr.hasNext()) {
-                d = (DefineHandler) itr.next();
-                this.handlers.put(d.getName(), d);
-            }
-        } else {
-            handlers = null;
-        }
-    }
-
-    /**
-     * Iterate over all TagAttributes and set them on the FaceletContext's
-     * VariableMapper, then include the target Facelet. Finally, replace the old
-     * VariableMapper.
-     * 
-     * @see TagAttribute#getValueExpression(FaceletContext, Class)
-     * @see VariableMapper
-     * @see javax.faces.view.facelets.FaceletHandler#apply(javax.faces.view.facelets.FaceletContext, javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctxObj, UIComponent parent)
-    throws IOException {
-        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
-        VariableMapper orig = ctx.getVariableMapper();
-        
-        // setup a variable map
-        if (this.vars.length > 0) {
-            VariableMapper varMapper = new VariableMapperWrapper(orig);
-            for (int i = 0; i < this.vars.length; i++) {
-                varMapper.setVariable(this.vars[i].getLocalName(), this.vars[i]
-                        .getValueExpression(ctx, Object.class));
-            }
-            ctx.setVariableMapper(varMapper);
-        }
-        
-        // eval include
-        try {
-            ctx.pushClient(this);
-            ctx.includeFacelet(parent, this.location);
-        } catch (FileNotFoundException e) {
-            throw new TagException(this.tag, e.getMessage());
-        } finally {
-            
-            // make sure we undo our changes
-            ctx.popClient(this);
-            ctx.setVariableMapper(orig);
-        }
-    }
-
-    public boolean apply(FaceletContext ctx, UIComponent parent, String name)
-    throws IOException {
-        if (name != null) {
-            if (this.handlers == null) {
-                return false;
-            }
-            DefineHandler handler = (DefineHandler) this.handlers.get(name);
-            if (handler != null) {
-                handler.applyDefinition(ctx, parent);
-                return true;
-            } else {
-                return false;
-            }
-        } else {
-             this.nextHandler.apply(ctx, parent);
-             return true;
-         }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetHandler.java
deleted file mode 100644
index 951dd41..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetHandler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.facelets.TagConfig;
-
-public class ActionSource2AttachedObjectTargetHandler extends AttachedObjectTargetHandler {
-    
-    public ActionSource2AttachedObjectTargetHandler(TagConfig config) {
-        super(config);
-    }
-    
-
-    @Override
-    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
-        return new ActionSource2AttachedObjectTargetImpl();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetImpl.java
deleted file mode 100644
index e07e2d6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ActionSource2AttachedObjectTargetImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.ActionSource2AttachedObjectTarget;
-
-
-public class ActionSource2AttachedObjectTargetImpl extends AttachedObjectTargetImpl implements ActionSource2AttachedObjectTarget {
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttachedObjectTargetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttachedObjectTargetHandler.java
deleted file mode 100644
index 9df107a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttachedObjectTargetHandler.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.application.view.FaceletViewHandlingStrategy;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.view.AttachedObjectTarget;
-import javax.faces.view.facelets.*;
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.io.IOException;
-import java.util.List;
-
-
-public abstract class AttachedObjectTargetHandler extends TagHandlerImpl {
-    
-    private TagAttribute name = null;
-    private TagAttribute targets = null;
-
-    public AttachedObjectTargetHandler(TagConfig config) {
-        super(config);
-        this.name = this.getRequiredAttribute("name");
-        this.targets = this.getAttribute("targets");
-    }
-    
-    abstract AttachedObjectTargetImpl newAttachedObjectTargetImpl();
-    
-    public void apply(FaceletContext ctx, UIComponent parent)
-    throws IOException {
-
-        assert(ctx.getFacesContext().getAttributes().containsKey(FaceletViewHandlingStrategy.IS_BUILDING_METADATA));
-        
-        // only process if it's been created
-        if (null == parent || 
-            (null == (parent = parent.getParent())) ||
-            !(ComponentHandler.isNew(parent))) {
-            return;
-        }
-
-        BeanInfo componentBeanInfo = (BeanInfo)
-                parent.getAttributes().get(UIComponent.BEANINFO_KEY);
-        if (null == componentBeanInfo) {
-            throw new TagException(this.tag, "Error: I have an EditableValueHolder tag, but no enclosing composite component");
-        }
-        BeanDescriptor componentDescriptor = componentBeanInfo.getBeanDescriptor();
-        if (null == componentDescriptor) {
-            throw new TagException(this.tag, "Error: I have an EditableValueHolder tag, but no enclosing composite component");
-        }
-
-        List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
-                componentDescriptor.getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
-        AttachedObjectTargetImpl target = newAttachedObjectTargetImpl();
-        targetList.add(target);
-        
-        ValueExpression ve = name.getValueExpression(ctx, String.class);
-        String strValue = (String) ve.getValue(ctx);
-        if (null != strValue) {
-            target.setName(strValue);
-        }
-
-        if (null != targets) {
-            ve = targets.getValueExpression(ctx, String.class);
-            target.setTargetsList(ve);
-        }
-        
-        this.nextHandler.apply(ctx, parent);
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttachedObjectTargetImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttachedObjectTargetImpl.java
deleted file mode 100644
index af64394..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttachedObjectTargetImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.util.Util;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.context.FacesContext;
-import javax.faces.view.AttachedObjectTarget;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class AttachedObjectTargetImpl implements AttachedObjectTarget {
-
-    private String name = null;
-    public String getName() {
-        return name;
-    }
-
-    void setName(String name) {
-        this.name = name;
-    }
-
-    public List<UIComponent> getTargets(UIComponent topLevelComponent) {
-        assert(null != name);
-
-        List<UIComponent> result;
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        if (null != targetsList) {
-            String targetsListStr = (String) targetsList.getValue(ctx.getELContext());
-            String[] targetArray = Util.split(targetsListStr, " ");
-            result = new ArrayList<UIComponent>(targetArray.length);
-            for (int i = 0, len = targetArray.length; i < len; i++) {
-                UIComponent comp = topLevelComponent.findComponent(
-                      augmentSearchId(ctx, topLevelComponent, targetArray[i]));
-                if (null != comp) {
-                    result.add(comp);
-                }
-            }
-        }
-        else {
-            result = new ArrayList<UIComponent>(1);
-            UIComponent comp = topLevelComponent.findComponent(
-                  augmentSearchId(ctx, topLevelComponent, name));
-            if (null != comp) {
-                result.add(comp);
-            }
-        }
-        return result;
-
-    }
-
-    private ValueExpression targetsList;
-
-    void setTargetsList(ValueExpression targetsList) {
-        this.targetsList = targetsList;
-    }
-
-
-    // if the current composite component ID is the same as the target ID,
-    // we'll need to make the ID passed to findComponent be a combination
-    // of the two so we find the correct component.  If we don't do this,
-    // we end with a StackOverFlowException as 'c' will be what is found
-    // and not the child of 'c'.
-    private String augmentSearchId(FacesContext ctx,
-                                   UIComponent c,
-                                   String targetId) {
-
-        if (targetId.equals(c.getId())) {
-            return targetId + UINamingContainer.getSeparatorChar(ctx) + targetId;
-        }
-        return targetId;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttributeHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttributeHandler.java
deleted file mode 100644
index 08efb20..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/AttributeHandler.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.*;
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-
-public class AttributeHandler extends TagHandlerImpl {
-
-    private static final String[] COMPOSITE_ATTRIBUTE_ATTRIBUTES = {
-          "required",
-          "targets",
-          "default",
-          "displayName",
-          "preferred",
-          "hidden",
-          "expert",
-          "shortDescription",
-          "method-signature",
-          "type",
-          
-    };
-
-    private static final PropertyHandlerManager ATTRIBUTE_MANAGER =
-          PropertyHandlerManager.getInstance(COMPOSITE_ATTRIBUTE_ATTRIBUTES);
-
-
-    private TagAttribute name;
-
-
-    public AttributeHandler(TagConfig config) {
-        super(config);
-        this.name = this.getRequiredAttribute("name");
-    }
-    
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        // only process if it's been created
-        if (null == parent || 
-            (null == (parent = parent.getParent())) ||
-            !(ComponentHandler.isNew(parent))) {
-            return;
-        }
-        
-
-        Map<String, Object> attrs = parent.getAttributes();
-        
-        CompositeComponentBeanInfo componentBeanInfo =
-              (CompositeComponentBeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
-        assert(null != componentBeanInfo);
-        List<PropertyDescriptor> declaredAttributes = 
-                componentBeanInfo.getPropertyDescriptorsList();
-
-        // Get the value of required the name propertyDescriptor
-        ValueExpression ve = name.getValueExpression(ctx, String.class);
-        String strValue = (String) ve.getValue(ctx);
-
-        // Search the propertyDescriptors for one for this attribute
-        for (PropertyDescriptor cur: declaredAttributes) {
-            if (strValue.endsWith(cur.getName())) {
-                // If we have a match, no need to waste time
-                // duplicating and replacing it.
-                return;
-            }
-        }
-
-        PropertyDescriptor propertyDescriptor;
-        try {
-            propertyDescriptor = new PropertyDescriptor(strValue, null, null);
-            declaredAttributes.add(propertyDescriptor);
-        } catch (IntrospectionException ex) {
-            throw new  TagException(tag, "Unable to create property descriptor for property " + strValue, ex);
-        }
-
-        for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
-            String attributeName = tagAttribute.getLocalName();
-            PropertyHandler handler = ATTRIBUTE_MANAGER.getHandler(ctx, attributeName);
-            if (handler != null) {
-                handler.apply(ctx, attributeName, propertyDescriptor, tagAttribute);
-            }
-
-        }
-        
-        this.nextHandler.apply(ctx, parent);
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetHandler.java
deleted file mode 100644
index 86f9b39..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetHandler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-
-
-public class BehaviorHolderAttachedObjectTargetHandler extends
-      AttachedObjectTargetHandler {
-
-    public BehaviorHolderAttachedObjectTargetHandler(TagConfig config) {
-        super(config);
-    }
-
-    /* (non-Javadoc)
-      * @see com.sun.faces.facelets.tag.composite.AttachedObjectTargetHandler#newAttachedObjectTargetImpl()
-      */
-    @Override
-    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
-        BehaviorHolderAttachedObjectTargetImpl target = new BehaviorHolderAttachedObjectTargetImpl();
-        TagAttribute event = this.getAttribute("event");
-        if (null != event) {
-            target.setEvent(event.getValue());
-        }
-        TagAttribute defaultAttr = this.getAttribute("default");
-        if (null != defaultAttr) {
-            FacesContext facesContext = FacesContext.getCurrentInstance();
-            FaceletContext ctx = (FaceletContext) facesContext.getAttributes()
-                  .get(FaceletContext.FACELET_CONTEXT_KEY);
-            target.setDefaultEvent(defaultAttr.getBoolean(ctx));
-        }
-        return target;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetImpl.java
deleted file mode 100644
index 76d63d1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderAttachedObjectTargetImpl.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.BehaviorHolderAttachedObjectTarget;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class BehaviorHolderAttachedObjectTargetImpl extends
-      AttachedObjectTargetImpl implements BehaviorHolderAttachedObjectTarget {
-
-    private String event;
-
-    private boolean defaultEvent;
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     */
-    public BehaviorHolderAttachedObjectTargetImpl() {
-
-    }
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     *
-     * @return the event
-     */
-    public String getEvent() {
-        return event;
-    }
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     *
-     * @param event the event to set
-     */
-    public void setEvent(String event) {
-        this.event = event;
-    }
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     *
-     * @return the defaultEvent
-     */
-    public boolean isDefaultEvent() {
-        return defaultEvent;
-    }
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     *
-     * @param defaultEvent the defaultEvent to set
-     */
-    public void setDefaultEvent(boolean defaultEvent) {
-        this.defaultEvent = defaultEvent;
-    }
-
-    @Override
-    public List<UIComponent> getTargets(UIComponent topLevelComponent) {
-        List<UIComponent> targets = super.getTargets(topLevelComponent);
-        List<UIComponent> wrappedTargets = new ArrayList<UIComponent>(targets.size());
-        for (UIComponent component : targets) {
-            wrappedTargets
-                  .add(new BehaviorHolderWrapper(component, getName(), getEvent()));
-		}
-		return wrappedTargets;
-	}
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderWrapper.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderWrapper.java
deleted file mode 100644
index 67fbec0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/BehaviorHolderWrapper.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.component.ContextCallback;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.*;
-import javax.faces.render.Renderer;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * <p class="changed_added_2_0"></p>
- */
-public class BehaviorHolderWrapper extends UIComponent implements
-      ClientBehaviorHolder {
-
-    private final UIComponent parent;
-    private final String virtualEvent;
-    private final String event;
-
-    public BehaviorHolderWrapper(UIComponent parent, String virtualEvent, String event) {
-        this.parent = parent;
-        this.virtualEvent = virtualEvent;
-        this.event = event;
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#broadcast(javax.faces.event.FacesEvent)
-     */
-    public void broadcast(FacesEvent event) throws AbortProcessingException {
-        parent.broadcast(event);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#decode(javax.faces.context.FacesContext)
-     */
-    public void decode(FacesContext context) {
-        parent.decode(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#encodeBegin(javax.faces.context.FacesContext)
-     */
-    public void encodeBegin(FacesContext context) throws IOException {
-        parent.encodeBegin(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#encodeChildren(javax.faces.context.FacesContext)
-     */
-    public void encodeChildren(FacesContext context) throws IOException {
-        parent.encodeChildren(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#encodeEnd(javax.faces.context.FacesContext)
-     */
-    public void encodeEnd(FacesContext context) throws IOException {
-        parent.encodeEnd(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#findComponent(java.lang.String)
-     */
-    public UIComponent findComponent(String expr) {
-        return parent.findComponent(expr);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getAttributes()
-     */
-    public Map<String, Object> getAttributes() {
-        return parent.getAttributes();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getChildCount()
-     */
-    public int getChildCount() {
-        return parent.getChildCount();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getChildren()
-     */
-    public List<UIComponent> getChildren() {
-        return parent.getChildren();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getClientId(javax.faces.context.FacesContext)
-     */
-    public String getClientId(FacesContext context) {
-        return parent.getClientId(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getFacet(java.lang.String)
-     */
-    public UIComponent getFacet(String name) {
-        return parent.getFacet(name);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getFacets()
-     */
-    public Map<String, UIComponent> getFacets() {
-        return parent.getFacets();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getFacetsAndChildren()
-     */
-    public Iterator<UIComponent> getFacetsAndChildren() {
-        return parent.getFacetsAndChildren();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getFamily()
-     */
-    public String getFamily() {
-        return parent.getFamily();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getId()
-     */
-    public String getId() {
-        return parent.getId();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getParent()
-     */
-    public UIComponent getParent() {
-        return parent.getParent();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getRendererType()
-     */
-    public String getRendererType() {
-        return parent.getRendererType();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getRendersChildren()
-     */
-    public boolean getRendersChildren() {
-        return parent.getRendersChildren();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getValueBinding(java.lang.String)
-     * @deprecated
-     */
-    public ValueBinding getValueBinding(String name) {
-        return parent.getValueBinding(name);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#getValueExpression(java.lang.String)
-     */
-    public ValueExpression getValueExpression(String name) {
-        return parent.getValueExpression(name);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#invokeOnComponent(javax.faces.context.FacesContext, java.lang.String, javax.faces.component.ContextCallback)
-     */
-    public boolean invokeOnComponent(FacesContext context,
-                                     String clientId,
-                                     ContextCallback callback)
-    throws FacesException {
-        return parent.invokeOnComponent(context, clientId, callback);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#isInView()
-     */
-    public boolean isInView() {
-        return parent.isInView();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#isRendered()
-     */
-    public boolean isRendered() {
-        return parent.isRendered();
-    }
-
-    /**
-     * @see javax.faces.component.StateHolder#isTransient()
-     */
-    public boolean isTransient() {
-        return parent.isTransient();
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#processDecodes(javax.faces.context.FacesContext)
-     */
-    public void processDecodes(FacesContext context) {
-        parent.processDecodes(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#processEvent(javax.faces.event.ComponentSystemEvent)
-     */
-    public void processEvent(ComponentSystemEvent event)
-          throws AbortProcessingException {
-        parent.processEvent(event);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#processRestoreState(javax.faces.context.FacesContext, java.lang.Object)
-     */
-    public void processRestoreState(FacesContext context, Object state) {
-        parent.processRestoreState(context, state);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#processSaveState(javax.faces.context.FacesContext)
-     */
-    public Object processSaveState(FacesContext context) {
-        return parent.processSaveState(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#processUpdates(javax.faces.context.FacesContext)
-     */
-    public void processUpdates(FacesContext context) {
-        parent.processUpdates(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#processValidators(javax.faces.context.FacesContext)
-     */
-    public void processValidators(FacesContext context) {
-        parent.processValidators(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#queueEvent(javax.faces.event.FacesEvent)
-     */
-    public void queueEvent(FacesEvent event) {
-        parent.queueEvent(event);
-    }
-
-    /**
-     * @see javax.faces.component.StateHolder#restoreState(javax.faces.context.FacesContext, java.lang.Object)
-     */
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        parent.restoreState(context, state);
-    }
-
-    /**
-     * @see javax.faces.component.StateHolder#saveState(javax.faces.context.FacesContext)
-     */
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        return parent.saveState(context);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#setId(java.lang.String)
-     */
-    public void setId(String id) {
-        parent.setId(id);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#setParent(javax.faces.component.UIComponent)
-     */
-    public void setParent(UIComponent parent) {
-        parent.setParent(parent);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#setRendered(boolean)
-     */
-    public void setRendered(boolean rendered) {
-        parent.setRendered(rendered);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#setRendererType(java.lang.String)
-     */
-    public void setRendererType(String rendererType) {
-        parent.setRendererType(rendererType);
-    }
-
-    /**
-     * @see javax.faces.component.StateHolder#setTransient(boolean)
-     */
-    public void setTransient(boolean newTransientValue) {
-        parent.setTransient(newTransientValue);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#setValueBinding(java.lang.String, javax.faces.el.ValueBinding)
-     * @deprecated
-     */
-    public void setValueBinding(String name, ValueBinding binding) {
-        parent.setValueBinding(name, binding);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#setValueExpression(java.lang.String, javax.el.ValueExpression)
-     */
-    public void setValueExpression(String name, ValueExpression binding) {
-        parent.setValueExpression(name, binding);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#subscribeToEvent(java.lang.Class, javax.faces.event.ComponentSystemEventListener)
-     */
-    public void subscribeToEvent(Class<? extends SystemEvent> eventClass,
-                                 ComponentSystemEventListener componentListener) {
-        parent.subscribeToEvent(eventClass, componentListener);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#unsubscribeFromEvent(java.lang.Class, javax.faces.event.ComponentSystemEventListener)
-     */
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass,
-                                     ComponentSystemEventListener componentListener) {
-        parent.unsubscribeFromEvent(eventClass, componentListener);
-    }
-
-    /**
-     * @see javax.faces.component.UIComponent#visitTree(javax.faces.component.visit.VisitContext, javax.faces.component.visit.VisitCallback)
-     */
-    public boolean visitTree(VisitContext context, VisitCallback callback) {
-        return parent.visitTree(context, callback);
-    }
-
-    @Override
-    protected void addFacesListener(FacesListener listener) {
-        // no-op
-    }
-
-    @Override
-    protected FacesContext getFacesContext() {
-        return FacesContext.getCurrentInstance();
-    }
-
-    @Override
-    protected FacesListener[] getFacesListeners(Class clazz) {
-        return new FacesListener[0];
-    }
-
-    @Override
-    protected Renderer getRenderer(FacesContext context) {
-        return null;
-    }
-
-    @Override
-    protected void removeFacesListener(FacesListener listener) {
-        // no-op
-    }
-
-    public void addClientBehavior(String eventName, ClientBehavior behavior) {
-        if (parent instanceof ClientBehaviorHolder) {
-            ClientBehaviorHolder parentHolder = (ClientBehaviorHolder) parent;
-            if (virtualEvent.equals(eventName)) {
-                parentHolder.addClientBehavior(event, behavior);
-            }
-        } else {
-            throw new FacesException(
-                  "Unable to attach behavior to non-ClientBehaviorHolder parent:"
-                  + parent);
-        }
-
-    }
-
-    public Map<String, List<ClientBehavior>> getClientBehaviors() {
-        if (parent instanceof ClientBehaviorHolder) {
-            ClientBehaviorHolder parentHolder = (ClientBehaviorHolder) parent;
-            Map<String, List<ClientBehavior>> behaviors = new HashMap<String, List<ClientBehavior>>(
-                  1);
-            behaviors.put(virtualEvent, parentHolder.getClientBehaviors().get(event));
-            return Collections.unmodifiableMap(behaviors);
-        } else {
-            throw new FacesException(
-                  "Unable to get behaviors from non-ClientBehaviorHolder parent:"
-                  + parent);
-        }
-    }
-
-    public String getDefaultEventName() {
-        return virtualEvent;
-    }
-
-    public Collection<String> getEventNames() {
-        return Collections.singleton(virtualEvent);
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/CompositeComponentBeanInfo.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/CompositeComponentBeanInfo.java
deleted file mode 100644
index da077c2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/CompositeComponentBeanInfo.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.beans.PropertyDescriptor;
-import java.beans.SimpleBeanInfo;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class CompositeComponentBeanInfo extends SimpleBeanInfo implements BeanInfo, Externalizable {
-
-    private BeanDescriptor descriptor = null;
-
-    @Override
-    public BeanDescriptor getBeanDescriptor() {
-        return descriptor;
-    }
-
-    public void setBeanDescriptor(BeanDescriptor newDescriptor) {
-        descriptor = newDescriptor;
-    }
-
-    @Override
-    public PropertyDescriptor[] getPropertyDescriptors() {
-        List<PropertyDescriptor> list = getPropertyDescriptorsList();
-        PropertyDescriptor [] result = new PropertyDescriptor[list.size()];
-        list.toArray(result);
-        return result;
-    }
-
-    private List<PropertyDescriptor> propertyDescriptors;
-    public List<PropertyDescriptor> getPropertyDescriptorsList() {
-
-        if (null == propertyDescriptors) {
-            propertyDescriptors = new ArrayList<PropertyDescriptor>();
-        }
-        return propertyDescriptors;
-    }
-
-
-    // ----------------------------------------------Methods From Externalizable
-
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-
-        out.writeObject(descriptor.getBeanClass());
-
-    }
-
-
-    public void readExternal(ObjectInput in)
-    throws IOException, ClassNotFoundException {
-
-        descriptor = new BeanDescriptor((Class) in.readObject());
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/CompositeLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/CompositeLibrary.java
deleted file mode 100644
index 48d8d09..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/CompositeLibrary.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.facelets.tag.AbstractTagLibrary;
-
-/**
- * @author Jacob Hookom
- * @version $Id: CompositeLibrary.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class CompositeLibrary extends AbstractTagLibrary {
-
-    public final static String Namespace = "http://java.sun.com/jsf/composite";
-
-    public final static CompositeLibrary Instance = new CompositeLibrary();
-
-    public CompositeLibrary() {
-        super(Namespace);
-
-        // The interface section
-        this.addTagHandler("interface", InterfaceHandler.class);
-        
-        // Things that go insead of the interface section
-        this.addTagHandler("attribute", AttributeHandler.class);
-        this.addTagHandler("extension", ExtensionHandler.class);
-        this.addTagHandler("editableValueHolder", EditableValueHolderAttachedObjectTargetHandler.class);
-        this.addTagHandler("actionSource", ActionSource2AttachedObjectTargetHandler.class);
-        this.addTagHandler("valueHolder", ValueHolderAttachedObjectTargetHandler.class);
-        this.addTagHandler("clientBehavior", BehaviorHolderAttachedObjectTargetHandler.class);
-        this.addTagHandler("facet", DeclareFacetHandler.class);
-        
-        // The implementation section
-        this.addTagHandler("implementation", ImplementationHandler.class);
-        
-        // Things that go inside of the implementation section
-        this.addTagHandler("insertChildren", InsertChildrenHandler.class);
-        this.addTagHandler("insertFacet", InsertFacetHandler.class);
-        this.addComponent("renderFacet", "javax.faces.Output",
-                "javax.faces.CompositeFacet", RenderFacetHandler.class);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/DeclareFacetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/DeclareFacetHandler.java
deleted file mode 100644
index e44d5a8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/DeclareFacetHandler.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.*;
-import java.beans.BeanDescriptor;
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-
-public class DeclareFacetHandler extends TagHandlerImpl {
-
-    private static final String[] ATTRIBUTES = {
-          "required",
-          "displayName",
-          "expert",
-          "hidden",
-          "preferred",
-          "shortDescription",
-          "default"
-    };
-
-    private static final PropertyHandlerManager ATTRIBUTE_MANAGER =
-          PropertyHandlerManager.getInstance(ATTRIBUTES);
-
-    private TagAttribute name = null;
-
-
-
-    public DeclareFacetHandler(TagConfig config) {
-        super(config);
-        this.name = this.getRequiredAttribute("name");
-
-        
-    }
-    
-    @SuppressWarnings({"unchecked"})
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        // only process if it's been created
-        if (null == parent || 
-            (null == (parent = parent.getParent())) ||
-            !(ComponentHandler.isNew(parent))) {
-            return;
-        }
-        
-        Map<String, Object> componentAttrs = parent.getAttributes();
-
-        CompositeComponentBeanInfo componentBeanInfo = (CompositeComponentBeanInfo)
-                componentAttrs.get(UIComponent.BEANINFO_KEY);
-
-        // Get the value of required the name propertyDescriptor
-        ValueExpression ve = name.getValueExpression(ctx, String.class);
-        String strValue = (String) ve.getValue(ctx);
-        BeanDescriptor componentBeanDescriptor = componentBeanInfo.getBeanDescriptor();
-        
-        Map<String, PropertyDescriptor> facetDescriptors = (Map<String, PropertyDescriptor>) 
-                   componentBeanDescriptor.getValue(UIComponent.FACETS_KEY);
-        
-        if (facetDescriptors == null) {
-            facetDescriptors = new HashMap<String, PropertyDescriptor>();
-            componentBeanDescriptor.setValue(UIComponent.FACETS_KEY, 
-                    facetDescriptors);
-        }
-
-        PropertyDescriptor propertyDescriptor;
-        try {
-            propertyDescriptor = new PropertyDescriptor(strValue, null, null);
-        } catch (IntrospectionException ex) {
-            throw new  TagException(tag, "Unable to create property descriptor for facet" + strValue, ex);
-        }
-        facetDescriptors.put(strValue, propertyDescriptor);
-        
-        for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
-            String attributeName = tagAttribute.getLocalName();
-            PropertyHandler handler = ATTRIBUTE_MANAGER.getHandler(ctx, attributeName);
-            if (handler != null) {
-                handler.apply(ctx, attributeName, propertyDescriptor, tagAttribute);
-            }
-
-        }
-        
-        this.nextHandler.apply(ctx, parent);
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetHandler.java
deleted file mode 100644
index 3a5f80f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetHandler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.facelets.TagConfig;
-
-
-public class EditableValueHolderAttachedObjectTargetHandler extends AttachedObjectTargetHandler {
-    
-    public EditableValueHolderAttachedObjectTargetHandler(TagConfig config) {
-        super(config);
-    }
-    
-
-    @Override
-    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
-        return new EditableValueHolderAttachedObjectTargetImpl();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetImpl.java
deleted file mode 100644
index 9e9521e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/EditableValueHolderAttachedObjectTargetImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.EditableValueHolderAttachedObjectTarget;
-
-
-public class EditableValueHolderAttachedObjectTargetImpl extends AttachedObjectTargetImpl implements EditableValueHolderAttachedObjectTarget {
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ExtensionHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ExtensionHandler.java
deleted file mode 100644
index f5aa03d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ExtensionHandler.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.facelets.compiler.CompilationMessageHolder;
-import com.sun.faces.facelets.compiler.EncodingHandler;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-import java.io.IOException;
-
-
-public class ExtensionHandler extends TagHandler {
-
-    public ExtensionHandler(TagConfig tagConfig) {
-        super(tagConfig);
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        // extract a prefix from the child content
-        if (null != nextHandler) {
-            String content = this.nextHandler.toString().trim();
-            if (content.startsWith("<")) {
-                int i;
-                if (-1 != (i = content.indexOf(":"))) {
-                    content = content.substring(1, i);
-                    CompilationMessageHolder messageHolder = EncodingHandler.getCompilationMessageHolder(ctx);
-                    // remove any compilation messages pertaining to this prefix
-                    if (null != messageHolder) {
-                        messageHolder.removeNamespacePrefixMessages(content);
-                    }
-                }
-            }
-        }
-
-    }
-    
-    
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ImplementationHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ImplementationHandler.java
deleted file mode 100644
index 4526f67..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ImplementationHandler.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.application.view.FaceletViewHandlingStrategy;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-
-public class ImplementationHandler extends TagHandlerImpl {
-
-    public final static String Name = "implementation";
-
-    
-    public ImplementationHandler(TagConfig config) {
-        super(config);
-    }
-    
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        if (!FaceletViewHandlingStrategy.isBuildingMetadata(ctx.getFacesContext())) {
-            this.nextHandler.apply(ctx, parent);
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InsertChildrenHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InsertChildrenHandler.java
deleted file mode 100644
index 9035307..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InsertChildrenHandler.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagException;
-import javax.faces.view.Location;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.application.Resource;
-import java.io.IOException;
-import java.util.List;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-/**
- * This <code>TagHandler</code> is responsible for relocating children
- * defined within a composite component to a component within the
- * composite component's <code>composite:implementation</code> section.
- */
-public class InsertChildrenHandler extends TagHandlerImpl {
-
-    private final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-    private static final String REQUIRED_ATTRIBUTE = "required";
-
-    // This attribute is not required.  If not defined, then assume the facet
-    // isn't necessary.
-    private TagAttribute required;
-
-    
-    // ------------------------------------------------------------ Constructors
-
-
-    public InsertChildrenHandler(TagConfig config) {
-
-        super(config);
-        required = getAttribute(REQUIRED_ATTRIBUTE);
-
-    }
-
-
-    // ------------------------------------------------- Methods from TagHandler
-
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-
-        UIComponent compositeParent =
-              UIComponent.getCurrentCompositeComponent(ctx.getFacesContext());
-        if (compositeParent != null) {
-            int count = parent.getChildCount();
-            compositeParent.subscribeToEvent(PostAddToViewEvent.class,
-                                             new RelocateChildrenListener(ctx,
-                                                                          parent,
-                                                                          count,
-                                                                          this.tag.getLocation()));
-        }
-
-    }
-
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private class RelocateChildrenListener extends RelocateListener {
-
-
-        private FaceletContext ctx;
-        private UIComponent component;
-        private int idx;
-        private Location location;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        RelocateChildrenListener(FaceletContext ctx,
-                                 UIComponent component,
-                                 int idx,
-                                 Location location) {
-
-            this.ctx = ctx;
-            this.component = component;
-            if (!component.getAttributes().containsKey("idx")) {
-                component.getAttributes().put("idx", idx);
-            }
-            this.idx = idx;
-            this.location = location;
-
-        }
-
-        // --------------------------- Methods from ComponentSystemEventListener
-
-
-        public void processEvent(ComponentSystemEvent event)
-        throws AbortProcessingException {
-
-            UIComponent compositeParent = event.getComponent();
-            if (compositeParent == null) {
-                return;
-            }
-
-            // ensure we're working with the expected composite component as
-            // nesting levels may mask this.
-            Resource resource = getBackingResource(compositeParent);
-            while (compositeParent != null && !resourcesMatch(resource, location)) {
-                compositeParent = UIComponent.getCompositeComponentParent(compositeParent);
-                if (compositeParent != null) {
-                    resource = getBackingResource(compositeParent);
-                }
-            }
-
-            if (compositeParent == null) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.composite.component.insertchildren.missing.template",
-                               location.toString());
-                }
-                return;
-            }
-
-            if (compositeParent.getChildCount() == 0 && isRequired()) {
-                throwRequiredException(ctx, compositeParent);
-            }
-
-            List<UIComponent> compositeChildren = compositeParent.getChildren();
-            List<UIComponent> parentChildren = component.getChildren();
-            parentChildren.addAll(getIdx(), compositeChildren);
-            
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-        private int getIdx() {
-            Integer idx = (Integer) component.getAttributes().get("idx");
-            return ((idx != null) ? idx : this.idx);
-        }
-
-        private void throwRequiredException(FaceletContext ctx,
-                                        UIComponent compositeParent) {
-
-            throw new TagException(tag,
-                                   "Unable to find any children components "
-                                     + "nested within parent composite component with id '"
-                                     + compositeParent .getClientId(ctx.getFacesContext())
-                                     + '\'');
-
-        }
-
-
-        private boolean isRequired() {
-
-            return ((required != null) && required.getBoolean(ctx));
-
-        }
-
-
-    } // END RelocateChildrenListener
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InsertFacetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InsertFacetHandler.java
deleted file mode 100644
index 2f4518a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InsertFacetHandler.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagException;
-import javax.faces.view.Location;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.application.Resource;
-import java.io.IOException;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * This <code>TagHandler</code> is responsible for relocating Facets
- * defined within a composite component to a component within the
- * composite component's <code>composite:implementation</code> section.
- */
-public class InsertFacetHandler extends TagHandlerImpl {
-
-    private final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-    
-    // Supported attribute names
-    private static final String NAME_ATTRIBUTE = "name";
-
-    private static final String REQUIRED_ATTRIBUTE = "required";
-
-    // Attributes
-
-    // This attribute is required.
-    private TagAttribute name;
-
-    // This attribute is not required.  If it's not defined or false,
-    // then the facet associated with name need not be present in the
-    // using page.
-    private TagAttribute required;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public InsertFacetHandler(TagConfig config) {
-
-        super(config);
-        name = getRequiredAttribute(NAME_ATTRIBUTE);
-        required = getAttribute(REQUIRED_ATTRIBUTE);
-
-    }
-
-
-    // ------------------------------------------------- Methods from TagHandler
-
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-
-        UIComponent compositeParent =
-              UIComponent.getCurrentCompositeComponent(ctx.getFacesContext());
-
-
-        if (compositeParent != null) {
-            compositeParent.subscribeToEvent(PostAddToViewEvent.class,
-                                             new RelocateFacetListener(ctx,
-                                                                       parent,
-                                                                       this.tag.getLocation()));
-        }
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private class RelocateFacetListener extends RelocateListener {
-
-
-        private FaceletContext ctx;
-        private UIComponent component;
-        private Location location;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        RelocateFacetListener(FaceletContext ctx,
-                              UIComponent component,
-                              Location location) {
-
-            this.ctx = ctx;
-            this.component = component;
-            this.location = location;
-
-        }
-
-        // --------------------------- Methods from ComponentSystemEventListener
-
-
-        public void processEvent(ComponentSystemEvent event)
-        throws AbortProcessingException {
-
-            UIComponent compositeParent = event.getComponent();
-            if (compositeParent == null) {
-                return;
-            }
-
-            // ensure we're working with the expected composite component as
-            // nesting levels may mask this.
-            Resource resource = getBackingResource(compositeParent);
-            while (compositeParent != null && !resourcesMatch(resource, location)) {
-                compositeParent = UIComponent.getCompositeComponentParent(compositeParent);
-                if (compositeParent != null) {
-                    resource = getBackingResource(compositeParent);
-                }
-            }
-
-            if (compositeParent == null) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.composite.component.insertfacet.missing.template",
-                               location.toString());
-                }
-                return;
-            }
-            boolean req = isRequired();
-            String facetName = name.getValue(ctx);
-            if (compositeParent.getFacetCount() == 0 && req) {
-                throwRequiredException(ctx, facetName, compositeParent);
-            }
-
-            Map<String, UIComponent> facets = compositeParent.getFacets();
-            UIComponent facet = facets.remove(facetName);
-            if (facet == null) {
-                facet = compositeParent.getParent().getFacets().remove(facetName);
-            }
-            if (facet != null) {
-                component.getFacets().put(facetName, facet);
-            } else {
-                // In the case of full state saving, the compositeParent won't
-                // have the facet to be relocated as its own - it will have already
-                // been made a facet of the target component, so we need
-                // to only throw the Exception if required, and the target component
-                // doesn't have the facet defined
-                if (req && component.getFacets().get(facetName) == null) {
-                    throwRequiredException(ctx, facetName, compositeParent);
-                }
-            }
-
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private void throwRequiredException(FaceletContext ctx,
-                                            String facetName,
-                                            UIComponent compositeParent) {
-
-            throw new TagException(tag,
-                                   "Unable to find facet named '"
-                                   + facetName
-                                   + "' in parent composite component with id '"
-                                   + compositeParent .getClientId(ctx.getFacesContext())
-                                   + '\'');
-
-        }
-
-
-        private boolean isRequired() {
-
-            return ((required != null) && required.getBoolean(ctx));
-
-        }
-
-    } // END RelocateFacetListener
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InterfaceHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InterfaceHandler.java
deleted file mode 100644
index 5887365..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/InterfaceHandler.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import com.sun.faces.application.view.FaceletViewHandlingStrategy;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-
-import javax.faces.application.Resource;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.view.AttachedObjectTarget;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-import javax.el.ValueExpression;
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagException;
-
-public class InterfaceHandler extends TagHandlerImpl {
-
-    private final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-    private static final String[] ATTRIBUTES_DEV = {
-          "displayName",
-          "expert",
-          "hidden",
-          "preferred",
-          "shortDescription",
-          "name",
-          "componentType"
-    };
-
-
-
-    private static final PropertyHandlerManager INTERFACE_HANDLERS =
-          PropertyHandlerManager.getInstance(ATTRIBUTES_DEV);
-
-
-
-    public final static String Name = "interface";
-
-    
-    public InterfaceHandler(TagConfig config) {
-        super(config);
-    }
-    
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        FacesContext context = ctx.getFacesContext();
-        // only process if it's been created
-        // Do not process if we're simply building metadata
-        if (FaceletViewHandlingStrategy.isBuildingMetadata(context)) {
-            imbueComponentWithMetadata(ctx, parent);
-            this.nextHandler.apply(ctx, parent);
-        } else {
-            if (ProjectStage.Development == context.getApplication().getProjectStage()) {
-                validateComponent(context, parent);
-            }
-        }
-    }
-    
-    private void validateComponent(FacesContext context, UIComponent ccParent) throws TagException {
-        UIComponent cc = ccParent.getParent();
-        if (null == cc) {
-            String clientId = ccParent.getClientId(context);
-
-            throw new TagException(tag, MessageUtils.getExceptionMessageString(
-                    MessageUtils.COMPONENT_NOT_FOUND_ERROR_MESSAGE_ID,
-                    clientId + ".getParent()"));
-        }
-        Tag usingPageTag = ComponentSupport.getTagForComponent(context, cc);
-        Map<String, Object> attrs = cc.getAttributes();
-        BeanInfo componentMetadata = (BeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
-
-        if (null == componentMetadata) {
-            String clientId = ccParent.getClientId(context);
-
-            throw new TagException(usingPageTag, MessageUtils.getExceptionMessageString(
-                    MessageUtils.MISSING_COMPONENT_METADATA, clientId));
-        }
-
-        PropertyDescriptor[] declaredAttributes = componentMetadata.getPropertyDescriptors();
-        String key;
-        Object requiredValue;
-        boolean found = false, required = false;
-        StringBuffer buf = null;
-        String attrMessage = "", facetMessage = "";
-
-        // Traverse the attributes of this component
-        for (PropertyDescriptor cur : declaredAttributes) {
-            required = false;
-            requiredValue = cur.getValue("required");
-            if (null != requiredValue) {
-                if (requiredValue instanceof ValueExpression) {
-                    requiredValue = ((ValueExpression) requiredValue).getValue(context.getELContext());
-                    required = Boolean.parseBoolean(requiredValue.toString());
-                }
-            }
-            if (required) {
-                key = cur.getName();
-                found = false;
-                // Is the attribute a method expression?
-                if (null != cur.getValue("method-signature") && null == cur.getValue("type")) {
-                    // Yes, look for it as an EL expression.
-                    found = (null != cc.getValueExpression(key));
-                } else {
-                    // No, look for it as an actual attribute
-                    found = attrs.containsKey(key);
-                    // Special case: nested composite components
-                    if (!found) {
-                        Object obj = context.getApplication().evaluateExpressionGet(context,
-                                "#{cc.attrs." + key + "}", Object.class);
-                        found = null != obj;
-                    }
-                }
-                if (!found) {
-                    if (null == buf) {
-                        buf = new StringBuffer();
-                        buf.append(key);
-                    } else {
-                        buf.append(", " + key);
-                    }
-                }
-            }
-        }
-        if (null != buf) {
-            attrMessage = MessageUtils.getExceptionMessageString(MessageUtils.MISSING_COMPONENT_ATTRIBUTE_VALUE,
-                    buf.toString());
-        }
-
-        buf = null;
-
-        // Traverse the declared facets
-        Map<String, PropertyDescriptor> declaredFacets =
-                (Map<String, PropertyDescriptor>) componentMetadata.getBeanDescriptor().getValue(UIComponent.FACETS_KEY);
-        if (null != declaredFacets) {
-            for (PropertyDescriptor cur : declaredFacets.values()) {
-                required = false;
-                requiredValue = cur.getValue("required");
-                if (null != requiredValue) {
-                    if (requiredValue instanceof ValueExpression) {
-                        requiredValue = ((ValueExpression) requiredValue).getValue(context.getELContext());
-                        required = Boolean.parseBoolean(requiredValue.toString());
-                    }
-                }
-                if (required) {
-                    key = cur.getName();
-                    if (!cc.getFacets().containsKey(key)) {
-                        if (null == buf) {
-                            buf = new StringBuffer();
-                            buf.append(key);
-                        } else {
-                            buf.append(", " + key);
-                        }
-                    }
-                }
-            }
-        }
-        if (null != buf) {
-            facetMessage = MessageUtils.getExceptionMessageString(MessageUtils.MISSING_COMPONENT_FACET,
-                    buf.toString());
-        }
-
-        if (0 < attrMessage.length() || 0 < facetMessage.length()) {
-            throw new TagException(usingPageTag, attrMessage + " " + facetMessage);
-        }
-    }
-    
-    @SuppressWarnings({"unchecked"})
-    private void imbueComponentWithMetadata(FaceletContext ctx, UIComponent parent) {
-        // only process if it's been created
-        if (null == parent || 
-            (null == (parent = parent.getParent())) ||
-            !(ComponentHandler.isNew(parent))) {
-            return;
-        }
-        
-        Map<String, Object> attrs = parent.getAttributes();
-
-        CompositeComponentBeanInfo componentBeanInfo =
-              (CompositeComponentBeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
-
-        if (componentBeanInfo == null) {
-        
-            componentBeanInfo = new CompositeComponentBeanInfo();
-            attrs.put(UIComponent.BEANINFO_KEY, componentBeanInfo);
-            BeanDescriptor componentDescriptor = new BeanDescriptor(parent.getClass());
-            // PENDING(edburns): Make sure attributeNames() returns the right content
-            // per the javadocs for ViewDeclarationLanguage.getComponentMetadata()
-            componentBeanInfo.setBeanDescriptor(componentDescriptor);
-
-            for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
-                String attributeName = tagAttribute.getLocalName();
-                PropertyHandler handler = INTERFACE_HANDLERS.getHandler(ctx, attributeName);
-                if (handler != null) {
-                    handler.apply(ctx,
-                                  attributeName,
-                                  componentDescriptor,
-                                  tagAttribute);
-                }
-
-            }
-
-            List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
-              componentDescriptor.getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
-            if (null == targetList) {
-                targetList = new ArrayList<AttachedObjectTarget>();
-                componentDescriptor.setValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY,
-                        targetList);
-            }
-
-            Resource componentResource =
-                    (Resource) attrs.get(Resource.COMPONENT_RESOURCE_KEY);
-            if (null == componentResource) {
-                throw new NullPointerException("Unable to find Resource for composite component");
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/PropertyHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/PropertyHandler.java
deleted file mode 100644
index 6e29f77..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/PropertyHandler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import java.beans.PropertyDescriptor;
-import java.beans.FeatureDescriptor;
-
-
-interface PropertyHandler {
-
-    void apply(FaceletContext ctx,
-               String propName,
-               FeatureDescriptor target,
-               TagAttribute attribute);
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/PropertyHandlerManager.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/PropertyHandlerManager.java
deleted file mode 100644
index 2ed0c5b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/PropertyHandlerManager.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.component.UIComponent;
-import javax.faces.application.ProjectStage;
-import javax.el.ValueExpression;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Arrays;
-import java.beans.FeatureDescriptor;
-
-
-class PropertyHandlerManager {
-    
-    private static final Map<String,PropertyHandler> ALL_HANDLERS =
-          new HashMap<String,PropertyHandler>(12, 1.0f);
-    static {
-        ALL_HANDLERS.put("targets", new StringValueExpressionPropertyHandler());
-        ALL_HANDLERS.put("method-signature", new StringValueExpressionPropertyHandler());
-        ALL_HANDLERS.put("type", new StringValueExpressionPropertyHandler());
-        ALL_HANDLERS.put("default", new StringValueExpressionPropertyHandler());
-        ALL_HANDLERS.put("displayName", new DisplayNamePropertyHandler());
-        ALL_HANDLERS.put("shortDescription", new ShortDescriptionPropertyHandler());
-        ALL_HANDLERS.put("expert", new ExpertPropertyHandler());
-        ALL_HANDLERS.put("hidden", new HiddenPropertyHandler());
-        ALL_HANDLERS.put("preferred", new PreferredPropertyHandler());
-        ALL_HANDLERS.put("required", new BooleanValueExpressionPropertyHandler());
-        ALL_HANDLERS.put("name", new NamePropertyHandler());
-        ALL_HANDLERS.put("componentType", new ComponentTypePropertyHandler());
-    }
-
-    private static final String[] DEV_ONLY_ATTRIBUTES = {
-          "displayName",
-          "shortDescription",
-          "export",
-          "hidden",
-          "preferred"
-    };
-    static {
-        Arrays.sort(DEV_ONLY_ATTRIBUTES);
-    }
-
-    private Map<String,PropertyHandler> managedHandlers;
-    private PropertyHandler genericHandler =
-          new ObjectValueExpressionPropertyHandler();
-
-
-    // -------------------------------------------------------- Constructors
-
-
-    private PropertyHandlerManager(Map<String,PropertyHandler> managedHandlers) {
-
-        this.managedHandlers = managedHandlers;
-
-    }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-
-    static PropertyHandlerManager getInstance(String[] attributes) {
-
-        
-        Map<String,PropertyHandler> handlers =
-              new HashMap<String,PropertyHandler>(attributes.length, 1.0f);
-        for (String attribute : attributes) {
-            handlers.put(attribute, ALL_HANDLERS.get(attribute));
-        }
-
-        return new PropertyHandlerManager(handlers);
-
-    }
-
-
-    PropertyHandler getHandler(FaceletContext ctx, String name) {
-
-        if (!ctx.getFacesContext().isProjectStage(ProjectStage.Development)) {
-            if (Arrays.binarySearch(DEV_ONLY_ATTRIBUTES, name) >= 0) {
-                return null;
-            }
-        }
-        
-        PropertyHandler h = managedHandlers.get(name);
-        return ((h != null) ? h : genericHandler);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-    
-    
-    private abstract static class BooleanFeatureDescriptorPropertyHandler
-          implements TypedPropertyHandler {
-
-        public Class<?> getEvalType() {
-            return Boolean.class;
-        }
-
-    } // END BooleanFeatureDescriptorPropertyHandler
-    
-    
-    private abstract static class StringFeatureDescriptorPropertyHandler
-          implements TypedPropertyHandler {
-
-        public Class<?> getEvalType() {
-            return String.class;
-        }
-
-    } // END StringPropertyDescriptionPropertyHandler
-
-    
-    private abstract static class TypedValueExpressionPropertyHandler
-          implements TypedPropertyHandler {
-
-        public void apply(FaceletContext ctx,
-                          String propName,
-                          FeatureDescriptor target,
-                          TagAttribute attribute) {
-
-            target.setValue(propName,
-                            attribute.getValueExpression(ctx, getEvalType()));
-
-        }
-
-        public abstract Class<?> getEvalType();
-
-    } // END TypeValueExpressionPropertyHandler
-
-    
-    private static final class NamePropertyHandler 
-          extends StringFeatureDescriptorPropertyHandler {
-
-        public void apply(FaceletContext ctx, 
-                          String propName, 
-                          FeatureDescriptor target, 
-                          TagAttribute attribute) {
-            
-            ValueExpression ve = attribute.getValueExpression(ctx, getEvalType());
-            String v = (String) ve.getValue(ctx);
-            if (v != null) {
-                target.setShortDescription((String) ve.getValue(ctx));
-            }
-            
-        }
-    }
-
-    
-    private static final class ShortDescriptionPropertyHandler
-          extends StringFeatureDescriptorPropertyHandler {
-
-        public void apply(FaceletContext ctx, 
-                          String propName, 
-                          FeatureDescriptor target, 
-                          TagAttribute attribute) {
-
-            ValueExpression ve = attribute.getValueExpression(ctx, getEvalType());
-            String v = (String) ve.getValue(ctx);
-            if (v != null) {
-                target.setShortDescription((String) ve.getValue(ctx));
-            }
-
-        }
-
-    } // END ShortDescriptionPropertyHandler
-    
-
-    private static class StringValueExpressionPropertyHandler
-          extends TypedValueExpressionPropertyHandler {
-
-        public Class<?> getEvalType() {
-            return String.class;
-        }
-
-    } // END StringValueExpressionPropertyHandler
-
-
-    private static class ObjectValueExpressionPropertyHandler
-          extends TypedValueExpressionPropertyHandler {
-
-        @Override
-        public Class<?> getEvalType() {
-            return Object.class;
-        }
-
-    } // END ObjectValueExpressionPropertyHandler
-
-
-    private static class ComponentTypePropertyHandler
-          extends StringValueExpressionPropertyHandler {
-
-        @Override
-        public void apply(FaceletContext ctx,
-                          String propName,
-                          FeatureDescriptor target,
-                          TagAttribute attribute) {
-            super.apply(ctx,
-                        UIComponent.COMPOSITE_COMPONENT_TYPE_KEY,
-                        target,
-                        attribute);
-
-        }
-
-    } // END ComponentTypePropertyHandler
-    
-
-    private static final class PreferredPropertyHandler
-          extends BooleanFeatureDescriptorPropertyHandler {
-
-        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
-
-            ValueExpression ve = attribute
-                  .getValueExpression(ctx, getEvalType());
-            target.setPreferred((Boolean) ve.getValue(ctx));
-
-        }
-
-    } // END PreferredPropertyHandler
-
-    
-    private static final class HiddenPropertyHandler
-          extends BooleanFeatureDescriptorPropertyHandler {
-
-        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
-
-            ValueExpression ve = attribute
-                  .getValueExpression(ctx, getEvalType());
-            target.setHidden((Boolean) ve.getValue(ctx));
-
-        }
-
-    } // END HiddenPropertyHandler
-    
-
-    private static final class ExpertPropertyHandler
-          extends BooleanFeatureDescriptorPropertyHandler {
-
-        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
-
-            ValueExpression ve = attribute
-                  .getValueExpression(ctx, getEvalType());
-            target.setExpert((Boolean) ve.getValue(ctx));
-
-        }
-
-    } // END ExpertPropertyHandler
-
-    
-    private static final class DisplayNamePropertyHandler
-          extends StringFeatureDescriptorPropertyHandler {
-
-        public void apply(FaceletContext ctx, String propName, FeatureDescriptor target, TagAttribute attribute) {
-
-            ValueExpression ve = attribute
-                  .getValueExpression(ctx, getEvalType());
-            target.setDisplayName((String) ve.getValue(ctx));
-        }
-
-    } // END DisplayNamePropertyHandler
-
-    
-    private static class BooleanValueExpressionPropertyHandler
-          extends TypedValueExpressionPropertyHandler {
-
-        public Class<?> getEvalType() {
-            return Boolean.class;
-        }
-
-    } // END BooleanValueExpressionPropertyHandler
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/RelocateListener.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/RelocateListener.java
deleted file mode 100644
index 34d22ab..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/RelocateListener.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.context.FacesContext;
-import javax.faces.view.Location;
-import javax.faces.application.Resource;
-
-/**
- * Base class for listeners used to relocate children and facets within the context
- * of composite components.
- */
-abstract class RelocateListener implements ComponentSystemEventListener, StateHolder {
-
-
-    // ------------------------------------------------ Methods from StateHolder
-
-
-    public Object saveState(FacesContext context) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        return null;
-    }
-
-    public void restoreState(FacesContext context, Object state) {
-        if (context == null) {
-            throw new NullPointerException();
-        }
-    }
-
-    public boolean isTransient() {
-        return true;
-    }
-
-    public void setTransient(boolean newTransientValue) {
-        // no-op
-    }
-
-
-    // ----------------------------------------------------- Private Methods
-
-
-
-    /**
-     * @return the <code>Resource</code> instance that was used to create
-     *         the argument composite component.
-     */
-    protected Resource getBackingResource(UIComponent component) {
-
-        assert (UIComponent.isCompositeComponent(component));
-        Resource resource = (Resource) component.getAttributes()
-              .get(Resource.COMPONENT_RESOURCE_KEY);
-        if (resource == null) {
-            throw new IllegalStateException(
-                  "Backing resource information not found in composite component attribute map");
-        }
-        return resource;
-
-    }
-
-
-    /**
-     * @return <code>true</code> if the argument handler is from the same
-     *         template source as the argument <code>Resource</code> otherwise
-     *         <code>false</code>
-     */
-    protected boolean resourcesMatch(Resource compositeResource,
-                                     Location handlerLocation) {
-
-        String resName = compositeResource.getResourceName();
-        return (handlerLocation.getPath().contains(resName));
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/RenderFacetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/RenderFacetHandler.java
deleted file mode 100644
index 581bf0b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/RenderFacetHandler.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.*;
-import java.util.Map;
-
-
-public class RenderFacetHandler extends ComponentHandler {
-
-    // Supported attribute names
-    private static final String NAME_ATTRIBUTE = "name";
-    private static final String REQUIRED_ATTRIBUTE = "required";
-
-    // Attributes
-
-    // This attribute is required.
-    TagAttribute name;
-
-    // This attribute is not required.  If not defined, then assume the facet
-    // isn't necessary.
-    TagAttribute required;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RenderFacetHandler(ComponentConfig config) {
-        super(config);
-        name = this.getRequiredAttribute(NAME_ATTRIBUTE);
-        required = this.getAttribute(REQUIRED_ATTRIBUTE);
-    }
-
-
-    // ------------------------------------------------- Methods from TagHandler
-
-
-    @Override
-    public void onComponentPopulated(FaceletContext ctx, UIComponent c, UIComponent parent) {
-
-        UIComponent compositeParent =
-              UIComponent.getCurrentCompositeComponent(ctx.getFacesContext());
-        if (compositeParent == null) {
-            return;
-        }
-        boolean required =
-              ((this.required != null) && this.required.getBoolean(ctx));
-        String name = this.name.getValue(ctx);
-
-        if (compositeParent.getFacetCount() == 0 && required) {
-            throwRequiredException(ctx, name, compositeParent);
-        }
-
-        Map<String,UIComponent> facetMap = compositeParent.getFacets();
-        if (facetMap.containsKey(name)) {
-            c.getAttributes().put(UIComponent.FACETS_KEY, name);
-        } else {
-            if (required) {
-                throwRequiredException(ctx, name, compositeParent);
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void throwRequiredException(FaceletContext ctx,
-                                        String name,
-                                        UIComponent compositeParent) {
-
-        throw new TagException(this.tag,
-                               "Unable to find facet named '"
-                               + name
-                               + "' in parent composite component with id '"
-                               + compositeParent .getClientId(ctx.getFacesContext())
-                               + '\'');
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/TypedPropertyHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/TypedPropertyHandler.java
deleted file mode 100644
index 82e6729..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/TypedPropertyHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-
-interface TypedPropertyHandler extends PropertyHandler {
-
-    Class<?> getEvalType();
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetHandler.java
deleted file mode 100644
index 5089b44..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetHandler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.facelets.TagConfig;
-
-public class ValueHolderAttachedObjectTargetHandler extends AttachedObjectTargetHandler {
-    
-    public ValueHolderAttachedObjectTargetHandler(TagConfig config) {
-        super(config);
-    }
-    
-
-    @Override
-    AttachedObjectTargetImpl newAttachedObjectTargetImpl() {
-        return new ValueHolderAttachedObjectTargetImpl();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetImpl.java
deleted file mode 100644
index 35d23dc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/composite/ValueHolderAttachedObjectTargetImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.composite;
-
-import javax.faces.view.ValueHolderAttachedObjectTarget;
-
-public class ValueHolderAttachedObjectTargetImpl extends AttachedObjectTargetImpl implements ValueHolderAttachedObjectTarget {
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ActionSourceRule.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ActionSourceRule.java
deleted file mode 100644
index 442a635..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ActionSourceRule.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.el.LegacyMethodBinding;
-
-import javax.faces.component.ActionSource;
-import javax.faces.component.ActionSource2;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.MethodExpressionActionListener;
-import javax.faces.view.facelets.*;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: ActionSourceRule.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class ActionSourceRule extends MetaRule {
-
-    public final static Class[] ACTION_SIG = new Class[0];
-
-    public final static Class[] ACTION_LISTENER_SIG = new Class[] { ActionEvent.class };
-
-    final static class ActionMapper extends Metadata {
-
-        private final TagAttribute attr;
-
-        public ActionMapper(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((ActionSource) instance).setAction(new LegacyMethodBinding(
-                    this.attr.getMethodExpression(ctx, String.class,
-                            ActionSourceRule.ACTION_SIG)));
-        }
-    }
-
-    final static class ActionMapper2 extends Metadata {
-
-        private final TagAttribute attr;
-
-        public ActionMapper2(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((ActionSource2) instance).setActionExpression(this.attr
-                    .getMethodExpression(ctx, String.class,
-                            ActionSourceRule.ACTION_SIG));
-        }
-
-    }
-
-    final static class ActionListenerMapper extends Metadata {
-
-        private final TagAttribute attr;
-
-        public ActionListenerMapper(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((ActionSource) instance)
-                    .setActionListener(new LegacyMethodBinding(this.attr
-                            .getMethodExpression(ctx, null,
-                                    ActionSourceRule.ACTION_LISTENER_SIG)));
-        }
-
-    }
-
-    final static class ActionListenerMapper2 extends Metadata {
-
-        private final TagAttribute attr;
-
-        public ActionListenerMapper2(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((ActionSource2) instance)
-                    .addActionListener(new MethodExpressionActionListener(
-                            this.attr.getMethodExpression(ctx, null,
-                                    ActionSourceRule.ACTION_LISTENER_SIG)));
-
-        }
-
-    }
-
-    public final static ActionSourceRule Instance = new ActionSourceRule();
-
-    public ActionSourceRule() {
-        super();
-    }
-
-    public Metadata applyRule(String name, TagAttribute attribute,
-            MetadataTarget meta) {
-        if (meta.isTargetInstanceOf(ActionSource.class)) {
-
-            if ("action".equals(name)) {
-                if (meta.isTargetInstanceOf(ActionSource2.class)) {
-                    return new ActionMapper2(attribute);
-                } else {
-                    return new ActionMapper(attribute);
-                }
-            }
-
-            if ("actionListener".equals(name)) {
-                if (meta.isTargetInstanceOf(ActionSource2.class)) {
-                    return new ActionListenerMapper2(attribute);
-                } else {
-                    return new ActionListenerMapper(attribute);
-                }
-            }
-        }
-        return null;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/AttachedBehaviors.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/AttachedBehaviors.java
deleted file mode 100644
index a2775ad..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/AttachedBehaviors.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.BehaviorHandler;
-import javax.faces.view.facelets.TagHandler;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * <p class="changed_added_2_0">This class holds collection of {@link BehaviorHandler} instances, attached to the composite component.
- *  Descendant components from that composite uses that collection to substitute actual instance</p>
- * @author asmirnov at exadel.com
- *
- */
- at SuppressWarnings("serial")
-public class AttachedBehaviors implements Serializable {
-	
-	private Map<String, TagHandler> behaviors = new HashMap<String, TagHandler>();
-	public static final String COMPOSITE_BEHAVIORS_KEY = "javax.faces.view.ClientBehaviors";
-	
-	public void add(String eventName, TagHandler owner){
-		behaviors.put(eventName, owner);
-	}
-
-	public TagHandler get(String value) {
-		return behaviors.get(value);		
-	}
-
-	public static AttachedBehaviors getAttachedBehaviorsHandler(UIComponent component) {
-		Map<String, Object> attributes = component.getAttributes();
-		AttachedBehaviors handler = (AttachedBehaviors) attributes.get(AttachedBehaviors.COMPOSITE_BEHAVIORS_KEY);
-		if(null == handler){
-			handler = new AttachedBehaviors();
-			attributes.put(AttachedBehaviors.COMPOSITE_BEHAVIORS_KEY, handler);
-		}
-		return handler;
-	}
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/BehaviorTagHandlerDelegateImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/BehaviorTagHandlerDelegateImpl.java
deleted file mode 100644
index 8fcfb92..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/BehaviorTagHandlerDelegateImpl.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.tag.MetaRulesetImpl;
-import com.sun.faces.util.Util;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.view.AttachedObjectTarget;
-import javax.faces.view.BehaviorHolderAttachedObjectTarget;
-import javax.faces.view.facelets.*;
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.io.IOException;
-import java.util.List;
-
-/**
- *
- * @author edburns
- */
-class BehaviorTagHandlerDelegateImpl extends TagHandlerDelegate implements AttachedObjectHandler {
-    
-    private BehaviorHandler owner;
-
-    public BehaviorTagHandlerDelegateImpl(BehaviorHandler owner) {
-        this.owner = owner;
-    }
-    
-    @Override
-    public void apply(FaceletContext ctx, UIComponent parent)
-        throws IOException {
-        // only process if it's been created
-        if (parent == null || !(parent.getParent() == null)) {
-            return;
-        }
-        if (UIComponent.isCompositeComponent(parent)) {
-            // Check composite component event name:
-            BeanInfo componentBeanInfo = (BeanInfo) parent.getAttributes().get(
-                  UIComponent.BEANINFO_KEY);
-            if (null == componentBeanInfo) {
-                throw new TagException(
-                      owner.getTag(),
-                      "Error: enclosing composite component does not have BeanInfo attribute");
-            }
-            BeanDescriptor componentDescriptor = componentBeanInfo
-                  .getBeanDescriptor();
-            if (null == componentDescriptor) {
-                throw new TagException(
-                      owner.getTag(),
-                      "Error: enclosing composite component BeanInfo does not have BeanDescriptor");
-            }
-            List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
-                  componentDescriptor
-                        .getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
-            if (null == targetList) {
-                throw new TagException(
-                      owner.getTag(),
-                      "Error: enclosing composite component does not support behavior events");
-            }
-            String eventName = owner.getEventName();
-            boolean supportedEvent = false;
-            for (AttachedObjectTarget target : targetList) {
-                if (target instanceof BehaviorHolderAttachedObjectTarget) {
-                    BehaviorHolderAttachedObjectTarget behaviorTarget = (BehaviorHolderAttachedObjectTarget) target;
-                    if ((null != eventName && eventName.equals(behaviorTarget.getName()))
-                        || (null == eventName && behaviorTarget.isDefaultEvent())) {
-                        supportedEvent = true;
-                        break;
-                    }
-                }
-            }
-            if (supportedEvent) {
-                CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
-                      .add(owner);
-            } else {
-                throw new TagException(
-                      owner.getTag(),
-                      "Error: enclosing composite component does not support event "
-                      + eventName);
-            }
-
-        } else if (parent instanceof ClientBehaviorHolder) {
-            owner.applyAttachedObject(ctx.getFacesContext(), parent);
-        }  else {
-            throw new TagException(owner.getTag(), "Parent not an instance of ClientBehaviorHolder: " + parent);
-        }
-
-    }
-    
-    public void applyAttachedObject(FacesContext context, UIComponent parent) {
-        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
-        // cast to the ClientBehaviorHolder.
-        ClientBehaviorHolder behaviorHolder = (ClientBehaviorHolder) parent;
-        ValueExpression bindingExpr=null;
-        Behavior behavior=null;
-        if (null != owner.getBinding()){
-            bindingExpr = owner.getBinding().getValueExpression(ctx, Behavior.class);
-            behavior = (Behavior) bindingExpr.getValue(ctx);
-        }
-        if (null == behavior){
-            if (null != owner.getBehaviorId()){
-                behavior = ctx.getFacesContext().getApplication().createBehavior(owner.getBehaviorId());
-                if (null == behavior){
-                    throw new TagException(owner.getTag(),
-                            "No Faces behavior defined for Id "+owner.getBehaviorId());
-                }
-                if (null != bindingExpr){
-                    bindingExpr.setValue(ctx, behavior);
-                }
-            } else {
-                throw new TagException(owner.getTag(),"No behaviorId defined");
-            }
-        }
-        owner.setAttributes(ctx, behavior);
-
-        if (behavior instanceof ClientBehavior) {
-            behaviorHolder.addClientBehavior(getEventName(behaviorHolder), (ClientBehavior)behavior);
-        }
-    }
-
-    
-	
-    public MetaRuleset createMetaRuleset(Class type) {
-        Util.notNull("type", type);
-        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
-        m = m.ignore("event");
-        return m.ignore("binding").ignore("for");
-    }
-    
-    public String getFor() {
-        String result = null;
-        TagAttribute attr = owner.getTagAttribute("for");
-        
-        if (null != attr) {
-            result = attr.getValue();
-        }
-        return result;
-        
-    }
-    
-    private String getEventName(ClientBehaviorHolder holder){
-        String eventName;
-        if (null != owner.getEvent()){
-            eventName = owner.getEvent().getValue();
-        } else {
-            eventName = holder.getDefaultEventName();
-        }
-        if (null == eventName){
-            throw new TagException(owner.getTag(), "The event name is not defined");
-        }
-        return eventName;
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentRule.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentRule.java
deleted file mode 100644
index 944dc67..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentRule.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.el.LegacyValueBinding;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: ComponentRule.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class ComponentRule extends MetaRule {
-
-    final static class LiteralAttributeMetadata extends Metadata {
-
-        private final String name;
-        private final String value;
-        
-        public LiteralAttributeMetadata(String name, String value) {
-            this.value = value;
-            this.name = name;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((UIComponent) instance).getAttributes().put(this.name, this.value);
-        }
-    }
-    
-    final static class ValueExpressionMetadata extends Metadata {
-
-        private final String name;
-
-        private final TagAttribute attr;
-
-        private final Class type;
-
-        public ValueExpressionMetadata(String name, Class type,
-                TagAttribute attr) {
-            this.name = name;
-            this.attr = attr;
-            this.type = type;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((UIComponent) instance).setValueExpression(this.name, this.attr
-                    .getValueExpression(ctx, this.type));
-        }
-
-    }
-
-    final static class ValueBindingMetadata extends Metadata {
-
-        private final String name;
-
-        private final TagAttribute attr;
-
-        private final Class type;
-
-        public ValueBindingMetadata(String name, Class type, TagAttribute attr) {
-            this.name = name;
-            this.attr = attr;
-            this.type = type;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((UIComponent) instance).setValueBinding(this.name,
-                    new LegacyValueBinding(this.attr.getValueExpression(ctx,
-                            this.type)));
-        }
-
-    }
-
-    private final static Logger log = FacesLogger.FACELETS_COMPONENT.getLogger();
-
-    public final static ComponentRule Instance = new ComponentRule();
-
-    public ComponentRule() {
-        super();
-    }
-
-    public Metadata applyRule(String name, TagAttribute attribute,
-            MetadataTarget meta) {
-        if (meta.isTargetInstanceOf(UIComponent.class)) {
-
-            // if component and dynamic, then must set expression
-            if (!attribute.isLiteral()) {
-                Class type = meta.getPropertyType(name);
-                if (type == null) {
-                    type = Object.class;
-                }
-                return new ValueExpressionMetadata(name, type, attribute);
-            } else if (meta.getWriteMethod(name) == null) {
-
-                // this was an attribute literal, but not property
-                warnAttr(attribute, meta.getTargetClass(), name);
-
-                return new LiteralAttributeMetadata(name, attribute.getValue());
-            }
-        }
-        return null;
-    }
-
-    private static void warnAttr(TagAttribute attr, Class type, String n) {
-        if (log.isLoggable(Level.FINER)) {
-            log.finer(attr + " Property '" + n + "' is not on type: "
-                    + type.getName());
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentSupport.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentSupport.java
deleted file mode 100644
index e6f9862..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentSupport.java
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.context.StateContext;
-import com.sun.faces.facelets.tag.jsf.core.FacetHandler;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import javax.faces.view.facelets.Tag;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: ComponentSupport.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class ComponentSupport {
-
-    private final static String MARK_DELETED = "com.sun.faces.facelets.MARK_DELETED";
-    public final static String MARK_CREATED = "com.sun.faces.facelets.MARK_ID";
-    private final static String IMPLICIT_PANEL = "com.sun.faces.facelets.IMPLICIT_PANEL";
-
-    /**
-     * Key to a FacesContext scoped Map where the keys are UIComponent instances and the
-     * values are Tag instances.
-     */
-    public static final String COMPONENT_TO_TAG_MAP_NAME = "com.sun.faces.facelets.COMPONENT_TO_LOCATION_MAP";
-    
-    /**
-     * Used in conjunction with markForDeletion where any UIComponent marked
-     * will be removed.
-     * 
-     * @param c
-     *            UIComponent to finalize
-     */
-    public static void finalizeForDeletion(UIComponent c) {
-        // remove any existing marks of deletion
-        c.getAttributes().remove(MARK_DELETED);
-
-        // finally remove any children marked as deleted
-        int sz = c.getChildCount();
-        if (sz > 0) {
-            UIComponent cc = null;
-            List cl = c.getChildren();
-            while (--sz >= 0) {
-                cc = (UIComponent) cl.get(sz);
-                if (cc.getAttributes().containsKey(MARK_DELETED)) {
-                    cl.remove(sz);
-                }
-            }
-        }
-
-        // remove any facets marked as deleted
-        if (c.getFacets().size() > 0) {
-            Collection col = c.getFacets().values();
-            UIComponent fc;
-            for (Iterator itr = col.iterator(); itr.hasNext();) {
-                fc = (UIComponent) itr.next();
-                if (fc.getAttributes().containsKey(MARK_DELETED)) {
-                    itr.remove();
-                }
-            }
-        }
-    }
-
-    public static Tag setTagForComponent(FacesContext context, UIComponent c, Tag t) {
-        Map<Object, Object> contextMap = context.getAttributes();
-        Map<Integer, Tag> componentToTagMap;
-        componentToTagMap = (Map<Integer, Tag>)
-                contextMap.get(COMPONENT_TO_TAG_MAP_NAME);
-        if (null == componentToTagMap) {
-            componentToTagMap = new HashMap<Integer, Tag>();
-            contextMap.put(COMPONENT_TO_TAG_MAP_NAME, componentToTagMap);
-        }
-        return componentToTagMap.put((Integer) System.identityHashCode(c), t);
-    }
-
-    public static Tag getTagForComponent(FacesContext context, UIComponent c) {
-        Tag result = null;
-        Map<Object, Object> contextMap = context.getAttributes();
-        Map<Integer, Tag> componentToTagMap;
-        componentToTagMap = (Map<Integer, Tag>)
-                contextMap.get(COMPONENT_TO_TAG_MAP_NAME);
-        if (null != componentToTagMap) {
-            result = componentToTagMap.get((Integer) System.identityHashCode(c));
-        }
-
-        return result;
-    }
-    
-
-    /**
-     * A lighter-weight version of UIComponent's findChild.
-     * 
-     * @param parent
-     *            parent to start searching from
-     * @param id
-     *            to match to
-     * @return UIComponent found or null
-     */
-    public static UIComponent findChild(UIComponent parent, String id) {
-        int sz = parent.getChildCount();
-        if (sz > 0) {
-            UIComponent c = null;
-            List cl = parent.getChildren();
-            while (--sz >= 0) {
-                c = (UIComponent) cl.get(sz);
-                if (id.equals(c.getId())) {
-                    return c;
-                }
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * By TagId, find Child
-     * @param parent
-     * @param id
-     * @return
-     */
-    public static UIComponent findChildByTagId(UIComponent parent, String id) {
-        Iterator itr = parent.getFacetsAndChildren();
-        UIComponent c = null;
-        String cid = null;
-        while (itr.hasNext()) {
-            c = (UIComponent) itr.next();
-            cid = (String) c.getAttributes().get(MARK_CREATED);
-            if (id.equals(cid)) {
-                return c;
-            }
-            if (c instanceof UIPanel && c.getAttributes().containsKey(IMPLICIT_PANEL)) {
-                for (UIComponent c2 : c.getChildren()) {
-                    cid = (String) c2.getAttributes().get(MARK_CREATED);
-                    if (id.equals(cid)) {
-                        return c2;
-                    }
-                }
-            }
-        }
-//        int sz = parent.getChildCount();
-//        if (sz > 0) {
-//            UIComponent c = null;
-//            List cl = parent.getChildren();
-//            String cid = null;
-//            while (--sz >= 0) {
-//                c = (UIComponent) cl.get(sz);
-//                cid = (String) c.getAttributes().get(MARK_CREATED);
-//                if (id.equals(cid)) {
-//                    return c;
-//                }
-//            }
-//        }
-        return null;
-    }
-
-    /**
-     * According to JSF 1.2 tag specs, this helper method will use the
-     * TagAttribute passed in determining the Locale intended.
-     * 
-     * @param ctx
-     *            FaceletContext to evaluate from
-     * @param attr
-     *            TagAttribute representing a Locale
-     * @return Locale found
-     * @throws TagAttributeException
-     *             if the Locale cannot be determined
-     */
-    public static Locale getLocale(FaceletContext ctx, TagAttribute attr)
-            throws TagAttributeException {
-        Object obj = attr.getObject(ctx);
-        if (obj instanceof Locale) {
-            return (Locale) obj;
-        }
-        if (obj instanceof String) {
-            String s = (String) obj;
-            if (s.length() == 2) {
-                return new Locale(s);
-            }
-            if (s.length() == 5) {
-                return new Locale(s.substring(0, 2), s.substring(3, 5)
-                        .toUpperCase());
-            }
-            if (s.length() >= 7) {
-                return new Locale(s.substring(0, 2), s.substring(3, 5)
-                        .toUpperCase(), s.substring(6, s.length()));
-            }
-            throw new TagAttributeException(attr, "Invalid Locale Specified: "
-                    + s);
-        } else {
-            throw new TagAttributeException(attr,
-                    "Attribute did not evaluate to a String or Locale: " + obj);
-        }
-    }
-
-    /**
-     * Tries to walk up the parent to find the UIViewRoot, if not found, then go
-     * to FaceletContext's FacesContext for the view root.
-     * 
-     * @param ctx
-     *            FaceletContext
-     * @param parent
-     *            UIComponent to search from
-     * @return UIViewRoot instance for this evaluation
-     */
-    public static UIViewRoot getViewRoot(FaceletContext ctx,
-            UIComponent parent) {
-        UIComponent c = parent;
-        do {
-            if (c instanceof UIViewRoot) {
-                return (UIViewRoot) c;
-            } else {
-                c = c.getParent();
-            }
-        } while (c != null);
-        return ctx.getFacesContext().getViewRoot();
-    }
-
-    /**
-     * Marks all direct children and Facets with an attribute for deletion.
-     * 
-     * @see #finalizeForDeletion(UIComponent)
-     * @param c
-     *            UIComponent to mark
-     */
-    public static void markForDeletion(UIComponent c) {
-        // flag this component as deleted
-        c.getAttributes().put(MARK_DELETED, Boolean.TRUE);
-
-        // mark all children to be deleted
-        int sz = c.getChildCount();
-        if (sz > 0) {
-            UIComponent cc = null;
-            List cl = c.getChildren();
-            while (--sz >= 0) {
-                cc = (UIComponent) cl.get(sz);
-                if (cc.getAttributes().containsKey(MARK_CREATED)) {
-                    cc.getAttributes().put(MARK_DELETED, Boolean.TRUE);
-                }
-            }
-        }
-
-        // mark all facets to be deleted
-        if (c.getFacets().size() > 0) {
-            Collection col = c.getFacets().values();
-            UIComponent fc;
-            for (Iterator itr = col.iterator(); itr.hasNext();) {
-                fc = (UIComponent) itr.next();
-                if (fc.getAttributes().containsKey(MARK_CREATED)) {
-                    fc.getAttributes().put(MARK_DELETED, Boolean.TRUE);
-                }
-            }
-        }
-    }
-    
-    public static void encodeRecursive(FacesContext context,
-            UIComponent viewToRender) throws IOException, FacesException {
-        if (viewToRender.isRendered()) {
-            viewToRender.encodeBegin(context);
-            if (viewToRender.getRendersChildren()) {
-                viewToRender.encodeChildren(context);
-            } else if (viewToRender.getChildCount() > 0) {
-                Iterator kids = viewToRender.getChildren().iterator();
-                while (kids.hasNext()) {
-                    UIComponent kid = (UIComponent) kids.next();
-                    encodeRecursive(context, kid);
-                }
-            }
-            viewToRender.encodeEnd(context);
-        }
-    }
-    
-    public static void removeTransient(UIComponent c) {
-        UIComponent d, e;
-        if (c.getChildCount() > 0) {
-            for (Iterator itr = c.getChildren().iterator(); itr.hasNext();) {
-                d = (UIComponent) itr.next();
-                if (d.getFacets().size() > 0) {
-                    for (Iterator jtr = d.getFacets().values().iterator(); jtr
-                            .hasNext();) {
-                        e = (UIComponent) jtr.next();
-                        if (e.isTransient()) {
-                            jtr.remove();
-                        } else {
-                            removeTransient(e);
-                        }
-                    }
-                }
-                if (d.isTransient()) {
-                    itr.remove();
-                } else {
-                    removeTransient(d);
-                }
-            }
-        }
-        if (c.getFacets().size() > 0) {
-            for (Iterator itr = c.getFacets().values().iterator(); itr
-                    .hasNext();) {
-                d = (UIComponent) itr.next();
-                if (d.isTransient()) {
-                    itr.remove();
-                } else {
-                    removeTransient(d);
-                }
-            }
-        }
-    }
-    
-    /**
-     * <p class="changed_added_2_0">Add the child component to the parent. If the parent is a facet,
-     * check to see whether the facet is already defined. If it is, wrap the existing component
-     * in a panel group, if it's not already, then add the child to the panel group. If the facet
-     * does not yet exist, make the child the facet.</p>
-     */
-    public static void addComponent(FaceletContext ctx, UIComponent parent, UIComponent child) {
- 
-        String facetName = getFacetName(parent);
-        if (facetName == null) {
-            parent.getChildren().add(child);
-        } else {
-            UIComponent existing = parent.getFacets().get(facetName);
-            if (existing != null) {
-                if (!(existing instanceof UIPanel)) {
-                    // move existing component under a panel group
-                    UIComponent panelGroup = ctx.getFacesContext().getApplication().createComponent(UIPanel.COMPONENT_TYPE);
-                    panelGroup.setId(getViewRoot(ctx.getFacesContext(), parent).createUniqueId());
-                    panelGroup.getAttributes().put(ComponentSupport.IMPLICIT_PANEL, true);
-                    panelGroup.getChildren().add(existing);
-                    // the panel group becomes the facet
-                    parent.getFacets().put(facetName, panelGroup);
-                    existing = panelGroup;
-                }
-                if (existing.getAttributes().get(ComponentSupport.IMPLICIT_PANEL) != null) {
-                    // we have a panel group, so add the new component to it
-                    existing.getChildren().add(child);
-                } else {
-                    parent.getFacets().put(facetName, child);
-                }
-            } else {
-                parent.getFacets().put(facetName, child);
-            }
-        }
-        
-    }
-
-    public static String getFacetName(UIComponent parent) {
-        return (String) parent.getAttributes().get(FacetHandler.KEY);
-    }
-
-    public static boolean suppressViewModificationEvents(FacesContext ctx) {
-
-        // NO UIViewRoot means this was called during restore view -
-        // no need to suppress events at that time
-        UIViewRoot root = ctx.getViewRoot();
-        if (root != null) {
-            String viewId = root.getViewId();
-            if (viewId != null) {
-                StateContext stateCtx = StateContext.getStateContext(ctx);
-                return stateCtx
-                      .partialStateSaving(viewId);
-            }
-        }
-        return false;
-
-    }
-
-
-    // --------------------------------------------------------- private classes
-
-
-    private static UIViewRoot getViewRoot(FacesContext ctx, UIComponent parent) {
-
-        if (parent instanceof UIViewRoot) {
-            return (UIViewRoot) parent;
-        }
-        UIViewRoot root = ctx.getViewRoot();
-        if (root != null) {
-            return root;
-        }
-        UIComponent c = parent.getParent();
-        while (c != null) {
-            if (c instanceof UIViewRoot) {
-                root = (UIViewRoot) c;
-                break;
-            } else {
-                c = c.getParent();
-            }
-        }
-
-        return root;
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentTagHandlerDelegateImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentTagHandlerDelegateImpl.java
deleted file mode 100644
index affe696..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ComponentTagHandlerDelegateImpl.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.component.behavior.AjaxBehaviors;
-import com.sun.faces.component.validator.ComponentValidators;
-import com.sun.faces.component.CompositeComponentStackManager;
-import static com.sun.faces.component.CompositeComponentStackManager.StackType.TreeCreation;
-import com.sun.faces.context.StateContext;
-import com.sun.faces.facelets.impl.IdMapper;
-import com.sun.faces.facelets.tag.MetaRulesetImpl;
-import com.sun.faces.facelets.tag.jsf.core.FacetHandler;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import javax.el.ValueExpression;
-import javax.faces.application.Application;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.*;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.MetaRuleset;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagException;
-import javax.faces.view.facelets.TagHandlerDelegate;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public class ComponentTagHandlerDelegateImpl extends TagHandlerDelegate {
-    
-    private ComponentHandler owner;
-    
-    private final static Logger log = FacesLogger.FACELETS_COMPONENT.getLogger();
-    
-    private final TagAttribute binding;
-
-    protected String componentType;
-
-    protected final TagAttribute id;
-
-    private final String rendererType;
-    
-    private CreateComponentDelegate createCompositeComponentDelegate;
-
-
-    public ComponentTagHandlerDelegateImpl(ComponentHandler owner) {
-        this.owner = owner;
-        ComponentConfig config = owner.getComponentConfig();
-        this.componentType = config.getComponentType();
-        this.rendererType = config.getRendererType();
-        this.id = owner.getTagAttribute("id");
-        this.binding = owner.getTagAttribute("binding");
-        
-    }
-
-    /**
-     * Method handles UIComponent tree creation in accordance with the JSF 1.2
-     * spec.
-     * <ol>
-     * <li>First determines this UIComponent's id by calling
-     * {@link javax.faces.view.facelets.ComponentHandler#getTagId()}.</li>
-     * <li>Search the parent for an existing UIComponent of the id we just
-     * grabbed</li>
-     * <li>If found, {@link com.sun.faces.facelets.tag.jsf.ComponentSupport#markForDeletion(javax.faces.component.UIComponent) mark}
-     * its children for deletion.</li>
-     * <li>If <i>not</i> found, call
-     * {@link #createComponent(FaceletContext) createComponent}.
-     * <ol>
-     * <li>Only here do we apply
-     * {@link com.sun.faces.facelets.tag.MetaTagHandlerImpl#setAttributes(FaceletContext, Object)}</li>
-     * <li>Set the UIComponent's id</li>
-     * <li>Set the RendererType of this instance</li>
-     * </ol>
-     * </li>
-     * <li>Now apply the nextHandler, passing the UIComponent we've
-     * created/found.</li>
-     * <li>Now add the UIComponent to the passed parent</li>
-     * <li>Lastly, if the UIComponent already existed (found), then
-     * {@link ComponentSupport#finalizeForDeletion(UIComponent) finalize} for deletion.</li>
-     * </ol>
-     *
-     * @throws TagException
-     *             if the UIComponent parent is null
-     */
-    
-    @Override
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        FacesContext context = ctx.getFacesContext();
-
-        // make sure our parent is not null
-        if (parent == null) {
-            throw new TagException(owner.getTag(), "Parent UIComponent was null");
-        }
-
-        // our id
-        String id = ctx.generateUniqueId(owner.getTagId());
-
-        // grab our component
-        UIComponent c = findChild(ctx, parent, id);
-        boolean componentFound = false;
-        if (c != null) {
-           componentFound = true;
-           doExistingComponentActions(id, c);
-        } else {
-            c = this.createComponent(ctx);
-            
-            doNewComponentActions(ctx, id, c);
-            assignUniqueId(ctx, parent, id, c);
-
-            // hook method
-            owner.onComponentCreated(ctx, c, parent);
-        }
-
-       CompositeComponentStackManager ccStackManager =
-              CompositeComponentStackManager.getManager(context);
-        boolean compcompPushed = pushComponentToEL(ctx, c, ccStackManager);
-
-        if (ProjectStage.Development == context.getApplication().getProjectStage()) {
-            ComponentSupport.setTagForComponent(context, c, this.owner.getTag());
-        }
-
-        // first allow c to get populated
-        owner.applyNextHandler(ctx, c);
-
-        // finish cleaning up orphaned children
-        if (componentFound) {
-           doOrphanedChildCleanup(ctx, parent, c);
-        }
-
-        this.privateOnComponentPopulated(ctx, c);
-        owner.onComponentPopulated(ctx, c, parent);
-        // add to the tree afterwards
-        // this allows children to determine if it's
-        // been part of the tree or not yet
-        addComponentToView(ctx, parent, c, componentFound);
-        popComponentFromEL(ctx, c, ccStackManager, compcompPushed);
-
-        if (shouldMarkInitialState(ctx.getFacesContext())) {
-            c.markInitialState();
-        }
-        
-    }
-
-    @Override
-    public MetaRuleset createMetaRuleset(Class type) {
-        Util.notNull("type", type);
-        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
-
-        // ignore standard component attributes
-        m.ignore("binding").ignore("id");
-        
-        // add auto wiring for attributes
-        m.addRule(ComponentRule.Instance);
-        
-        // if it's an ActionSource
-        if (ActionSource.class.isAssignableFrom(type)) {
-            m.addRule(ActionSourceRule.Instance);
-        }
-        
-        // if it's a ValueHolder
-        if (ValueHolder.class.isAssignableFrom(type)) {
-            m.addRule(ValueHolderRule.Instance);
-            
-            // if it's an EditableValueHolder
-            if (EditableValueHolder.class.isAssignableFrom(type)) {
-                m.ignore("submittedValue");
-                m.ignore("valid");
-                m.addRule(EditableValueHolderRule.Instance);
-            }
-        }
-
-        // if it's a selectone or selectmany
-        if (UISelectOne.class.isAssignableFrom(type) || UISelectMany.class.isAssignableFrom(type)) {
-            m.addRule(RenderPropertyRule.Instance);
-        }
-        
-        return m;
-    }
-
-
-        // ------------------------------------------------------- Protected Methods
-
-
-    protected void addComponentToView(FaceletContext ctx,
-                                      UIComponent parent,
-                                      UIComponent c,
-                                      boolean componentFound) {
-
-        FacesContext context = ctx.getFacesContext();
-        boolean suppressEvents = ComponentSupport.suppressViewModificationEvents(context);
-        boolean compcomp = UIComponent.isCompositeComponent(c);
-
-        if (suppressEvents && componentFound && !compcomp) {
-            context.setProcessingEvents(false);
-        }
-
-        ComponentSupport.addComponent(ctx, parent, c);
-
-        if (suppressEvents && componentFound && !compcomp) {
-            context.setProcessingEvents(true);
-        }
-
-    }
-
-
-    protected boolean pushComponentToEL(FaceletContext ctx,
-                                        UIComponent c,
-                                        CompositeComponentStackManager ccStackManager) {
-
-        c.pushComponentToEL(ctx.getFacesContext(), c);
-        boolean compcompPushed = false;
-
-        if (UIComponent.isCompositeComponent(c)) {
-            compcompPushed = ccStackManager.push(c, TreeCreation);
-        }
-        return compcompPushed;
-
-    }
-
-
-    protected void popComponentFromEL(FaceletContext ctx,
-                                      UIComponent c,
-                                      CompositeComponentStackManager ccStackManager,
-                                      boolean compCompPushed) {
-
-        c.popComponentFromEL(ctx.getFacesContext());
-        if (compCompPushed) {
-            ccStackManager.pop(TreeCreation);
-        }
-
-    }
-
-
-    protected void doOrphanedChildCleanup(FaceletContext ctx,
-                                          UIComponent parent,
-                                          UIComponent c) {
-
-        ComponentSupport.finalizeForDeletion(c);
-        if (getFacetName(parent) == null) {
-            FacesContext context = ctx.getFacesContext();
-            boolean suppressEvents =
-                  ComponentSupport.suppressViewModificationEvents(context);
-
-            if (suppressEvents) {
-                // if the component has already been found, it will be removed
-                // and added back to the view.  We don't want to publish events
-                // for this case.
-                context.setProcessingEvents(false);
-            }
-            // suppress the remove event for this case since it will be re-added
-            parent.getChildren().remove(c);
-            if (suppressEvents) {
-                // re-enable event processing
-                context.setProcessingEvents(true);
-            }
-        }
-
-    }
-
-
-    protected void assignUniqueId(FaceletContext ctx,
-                                  UIComponent parent,
-                                  String id,
-                                  UIComponent c) {
-
-        if (this.id != null) {
-            c.setId(this.id.getValue(ctx));
-        } else {
-            UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
-            if (root != null) {
-                String uid;
-                IdMapper mapper = IdMapper.getMapper(ctx.getFacesContext());
-                String mid = ((mapper != null) ? mapper.getAliasedId(id) : id);
-                UIComponent ancestorNamingContainer = parent
-                      .getNamingContainer();
-                if (null != ancestorNamingContainer &&
-                    ancestorNamingContainer instanceof UniqueIdVendor) {
-                    uid = ((UniqueIdVendor) ancestorNamingContainer)
-                          .createUniqueId(ctx.getFacesContext(), mid);
-                } else {
-                    uid = root.createUniqueId(ctx.getFacesContext(), mid);
-                }
-                c.setId(uid);
-            }
-
-        }
-
-        if (this.rendererType != null) {
-            c.setRendererType(this.rendererType);
-        }
-
-    }
-
-
-    protected void doNewComponentActions(FaceletContext ctx,
-                                         String id,
-                                         UIComponent c) {
-
-        if (log.isLoggable(Level.FINE)) {
-            log.fine(owner.getTag() + " Component["+id+"] Created: "
-                    + c.getClass().getName());
-        }
-        // If this is NOT a composite component...
-        if (null == createCompositeComponentDelegate) {
-            // set the attributes and properties into the UIComponent instance.
-            owner.setAttributes(ctx, c);
-        }
-        // otherwise, allow the composite component code to do it.
-
-        // mark it owned by a facelet instance
-        c.getAttributes().put(ComponentSupport.MARK_CREATED, id);
-
-        if (ctx.getFacesContext().isProjectStage(ProjectStage.Development)) {
-            // inject the location into the component
-            c.getAttributes().put(UIComponent.VIEW_LOCATION_KEY,
-                                  owner.getTag().getLocation());
-        }
-
-    }
-
-
-    protected void doExistingComponentActions(String id, UIComponent c) {
-
-        // mark all children for cleaning
-        if (log.isLoggable(Level.FINE)) {
-            log.fine(owner.getTag()
-                     + " Component["
-                     + id
-                     + "] Found, marking children for cleanup");
-        }
-        ComponentSupport.markForDeletion(c);
-
-    }
-
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    protected UIComponent findChild(FaceletContext ctx,
-                                    UIComponent parent,
-                                    String tagId) {
-
-        return ComponentSupport.findChildByTagId(parent, tagId);
-
-    }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-    
-    void setCreateCompositeComponentDelegate(CreateComponentDelegate createComponentDelegate) {
-        this.createCompositeComponentDelegate = createComponentDelegate;
-    }
-
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request.
-     * @return <code>true</code> if <code>UIComponent.markInitialState()</code>
-     *  should be called on the component that is being processed, otherwise
-     *  return <code>false</code>
-     */
-    private boolean shouldMarkInitialState(FacesContext ctx) {
-
-        // RELEASE_PENDING - this is *ugly*.  We need to *not*
-        // call PartialStateHolder.markInitialState() if the component
-        // has a composite component parent under the assumption that
-        // the CompositeComponentTagHandler will take care of it.
-
-        return (StateContext.getStateContext(ctx).partialStateSaving((String)ctx.getAttributes().get(RIConstants.VIEWID_KEY_NAME))
-                 && UIComponent.getCurrentCompositeComponent(ctx) == null);
-
-    }
-
-    
-    /**
-     * If the binding attribute was specified, use that in conjuction with our
-     * componentType String variable to call createComponent on the Application,
-     * otherwise just pass the componentType String.
-     * <p />
-     * If the binding was used, then set the ValueExpression "binding" on the
-     * created UIComponent.
-     * 
-     * @see Application#createComponent(javax.faces.el.ValueBinding,
-     *      javax.faces.context.FacesContext, java.lang.String)
-     * @see Application#createComponent(java.lang.String)
-     * @param ctx
-     *            FaceletContext to use in creating a component
-     * @return
-     */
-    private UIComponent createComponent(FaceletContext ctx) {
-        
-        if (null != createCompositeComponentDelegate) {
-            return createCompositeComponentDelegate.createComponent(ctx);
-        }
-        
-        UIComponent c;
-        FacesContext faces = ctx.getFacesContext();
-        Application app = faces.getApplication();
-        if (this.binding != null) {
-            ValueExpression ve = this.binding.getValueExpression(ctx,
-                                                                 Object.class);
-            c = app.createComponent(ve, faces, this.componentType, this.rendererType);
-            if (c != null) {
-                // Make sure the component supports 1.2
-                c.setValueExpression("binding", ve);
-            }
-        } else {
-            c = app.createComponent(faces, this.componentType, this.rendererType);
-        }
-        return c;
-    }
-
-    /*
-     * Internal hook that allows us to perform common processing for all
-     * components after they are populated.  At the moment, the only common
-     * processing we need to perform is applying wrapping AjaxBehaviors,
-     * if any exist.
-     */
-    private void privateOnComponentPopulated(FaceletContext ctx, UIComponent c) {
-
-        if (c instanceof ClientBehaviorHolder) {
-            FacesContext context = ctx.getFacesContext();
-            AjaxBehaviors ajaxBehaviors = AjaxBehaviors.getAjaxBehaviors(context, false);
-            if (ajaxBehaviors != null) {
-                ajaxBehaviors.addBehaviors(context, (ClientBehaviorHolder)c);
-            }
-        }
-        if (c instanceof EditableValueHolder) {
-            processValidators(ctx.getFacesContext(), (EditableValueHolder) c);
-        }
-    }
-
-
-    /**
-     * Process default validatior/wrapping validation information and install
-     * <code>Validators</code> based off the result.
-     */
-    private void processValidators(FacesContext ctx,
-                                   EditableValueHolder editableValueHolder) {
-
-        ComponentValidators componentValidators =
-              ComponentValidators.getValidators(ctx, false);
-        if (componentValidators != null) {
-            // process any elements on the stack.  
-            componentValidators.addValidators(ctx, editableValueHolder);
-        } else {
-            // no custom handling required, so add the default validators
-            ComponentValidators.addDefaultValidatorsToComponent(ctx, editableValueHolder);
-        }
-
-    }
-
-    /**
-     * @return the Facet name we are scoped in, otherwise null
-     */
-    private String getFacetName(UIComponent parent) {
-        return (String) parent.getAttributes().get(FacetHandler.KEY);
-    }
-
-
-
-
-    interface CreateComponentDelegate {
-
-        public UIComponent createComponent(FaceletContext ctx);
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentImpl.java
deleted file mode 100644
index 3ba4aa2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import javax.faces.component.UINamingContainer;
-
-
-public class CompositeComponentImpl extends UINamingContainer {
-    
-    public static final String TYPE = "javax.faces.NamingContainer";
-
-    @Override
-    public String getFamily() {
-        return TYPE;
-    }
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentTagHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentTagHandler.java
deleted file mode 100644
index 33d36c2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentTagHandler.java
+++ /dev/null
@@ -1,613 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.context.StateContext;
-import com.sun.faces.facelets.Facelet;
-import com.sun.faces.facelets.FaceletFactory;
-import com.sun.faces.facelets.util.ReflectionUtil;
-import com.sun.faces.facelets.el.VariableMapperWrapper;
-import com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.CreateComponentDelegate;
-import com.sun.faces.facelets.tag.MetaRulesetImpl;
-import com.sun.faces.facelets.tag.MetadataTargetImpl;
-import com.sun.faces.util.RequestStateManager;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import javax.faces.FacesException;
-import javax.faces.application.Resource;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIPanel;
-import javax.faces.component.ActionSource;
-import javax.faces.component.ValueHolder;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UISelectOne;
-import javax.faces.component.UISelectMany;
-import javax.faces.context.FacesContext;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.MetaRuleset;
-import javax.faces.view.facelets.Metadata;
-import javax.faces.view.facelets.MetadataTarget;
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.MetaRule;
-import java.beans.PropertyDescriptor;
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import javax.faces.FactoryFinder;
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.view.ViewDeclarationLanguageFactory;
-
-/**
- * <p>
- * Facelet handler responsible for, building the component tree representation
- * of a composite component based on the metadata contained in the composite
- * interface and implementation sections of the composite component template.
- * </p>
- */
-public class CompositeComponentTagHandler extends ComponentHandler implements CreateComponentDelegate {
-
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-    private Resource ccResource;
-    private UIComponent cc;
-    private TagAttribute binding;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    CompositeComponentTagHandler(Resource ccResource, ComponentConfig config) {
-        super(config);
-        this.ccResource = ccResource;
-        this.binding = config.getTag().getAttributes().get("binding");
-        ((ComponentTagHandlerDelegateImpl)this.getTagHandlerDelegate()).setCreateCompositeComponentDelegate(this);
-    }
-
-
-    // ------------------------------------ Methods from CreateComponentDelegate
-    
-
-
-    public UIComponent createComponent(FaceletContext ctx) {
-        
-        FacesContext context = ctx.getFacesContext();
-        // we have to handle the binding here, as Application doesn't
-        // expose a method to do so with Resource.
-        if (binding != null) {
-            ValueExpression ve = binding.getValueExpression(ctx, UIComponent.class);
-            cc = (UIComponent) ve.getValue(ctx);
-            if (cc != null && !UIComponent.isCompositeComponent(cc)) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.compcomp.binding.eval.non.compcomp",
-                               binding.toString());
-                }
-                cc = null;
-            }
-            if (cc == null) {
-                cc = context.getApplication().createComponent(context, ccResource);
-                ve.setValue(ctx, cc);
-            }
-        } else {
-            cc = context.getApplication().createComponent(context, ccResource);
-        }
-
-        return cc;
-
-    }
-
-
-    // ------------------------------------------- Methods from ComponentHandler
-
-    
-    @Override
-    public void applyNextHandler(FaceletContext ctx, UIComponent c) throws IOException, FacesException, ELException {
-
-        // attributes need to be applied before any action is taken on
-        // nested children handlers or the composite component handlers
-        // as there may be an expression evaluated at tree creation time
-        // that needs access to these attributes
-        setAttributes(ctx, c);
-
-        // Allow any nested elements that reside inside the markup element
-        // for this tag to get applied
-        super.applyNextHandler(ctx, c);
-
-        // Apply the facelet for this composite component
-        applyCompositeComponent(ctx, c);
-
-        // Allow any PDL declared attached objects to be retargeted
-        if (ComponentHandler.isNew(c)) {
-            FacesContext context = ctx.getFacesContext();
-            String viewId = context.getViewRoot().getViewId();
-            // PENDING(rlubke): performance
-            ViewDeclarationLanguageFactory factory = (ViewDeclarationLanguageFactory)
-                    FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
-
-            ViewDeclarationLanguage vdl = factory.getViewDeclarationLanguage(viewId);
-            vdl.retargetAttachedObjects(context, c,
-                    getAttachedObjectHandlers(c, false));
-            vdl.retargetMethodExpressions(context, c);
-
-            // RELEASE_PENDING This is *ugly*.  See my comments in
-            // ComponentTagHandlerDelegateImpl at the end of the apply()
-            // method
-            if (StateContext.getStateContext(context).partialStateSaving((String)context.getAttributes().get(RIConstants.VIEWID_KEY_NAME))) {
-                markInitialState(c);
-            }
-
-
-        }
-
-    }
-
-
-    /**
-     * Specialized implementation to prevent caching of the MetaRuleset when
-     * ProjectStage is Development.
-     */
-    @Override
-    public void setAttributes(FaceletContext ctx, Object instance) {
-
-        if (instance != null) {
-            if (ctx.getFacesContext().isProjectStage(ProjectStage.Development)) {
-                Metadata meta = createMetaRuleset(instance.getClass()).finish();
-                meta.applyMetadata(ctx, instance);
-            } else {
-                super.setAttributes(ctx, instance);
-            }
-        }
-
-    }
-
-
-    /**
-     * This is basically a copy of what's define in ComponentTagHandlerDelegateImpl
-     * except for the MetaRuleset implementation that's being used.
-     *
-     * This also allows us to treat composite component's backed by custom component
-     * implementation classes based on their type.
-     *
-     * @param type the <code>Class</code> for which the
-     * <code>MetaRuleset</code> must be created.
-     *
-     */
-    @Override
-    protected MetaRuleset createMetaRuleset(Class type) {
-
-        Util.notNull("type", type);
-        MetaRuleset m = new CompositeComponentMetaRuleset(getTag(), type, (BeanInfo) cc.getAttributes().get(UIComponent.BEANINFO_KEY));
-
-        // ignore standard component attributes
-        m.ignore("binding").ignore("id");
-
-        m.addRule(CompositeComponentRule.Instance);
-
-        // if it's an ActionSource
-        if (ActionSource.class.isAssignableFrom(type)) {
-            m.addRule(ActionSourceRule.Instance);
-        }
-
-        // if it's a ValueHolder
-        if (ValueHolder.class.isAssignableFrom(type)) {
-            m.addRule(ValueHolderRule.Instance);
-
-            // if it's an EditableValueHolder
-            if (EditableValueHolder.class.isAssignableFrom(type)) {
-                m.ignore("submittedValue");
-                m.ignore("valid");
-                m.addRule(EditableValueHolderRule.Instance);
-            }
-        }
-
-        // if it's a selectone or selectmany
-        if (UISelectOne.class.isAssignableFrom(type) || UISelectMany.class.isAssignableFrom(type)) {
-            m.addRule(RenderPropertyRule.Instance);
-        }
-
-        return m;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public static List<AttachedObjectHandler> getAttachedObjectHandlers(UIComponent component) {
-
-        return getAttachedObjectHandlers(component, true);
-
-    }
-    
-
-    @SuppressWarnings({"unchecked"})
-    public static List<AttachedObjectHandler> getAttachedObjectHandlers(UIComponent component,
-                                                                        boolean create) {
-        Map<String, Object> attrs = component.getAttributes();
-        List<AttachedObjectHandler> result = (List<AttachedObjectHandler>)
-              attrs.get("javax.faces.RetargetableHandlers");
-
-        if (result == null) {
-            if (create) {
-                result = new ArrayList<AttachedObjectHandler>();
-                attrs.put("javax.faces.RetargetableHandlers", result);
-            } else {
-                result = Collections.EMPTY_LIST;
-            }
-        }
-        return result;
-
-    }
-
-
-
-    // --------------------------------------------------------- Private Methods
-
-    
-    private void applyCompositeComponent(FaceletContext ctx, UIComponent c)
-    throws IOException {
-
-        FacesContext facesContext = ctx.getFacesContext();
-        FaceletFactory factory = (FaceletFactory)
-              RequestStateManager.get(facesContext, RequestStateManager.FACELET_FACTORY);
-        VariableMapper orig = ctx.getVariableMapper();
-        
-        UIPanel facetComponent;
-        if (ComponentHandler.isNew(c)) {
-            facetComponent = (UIPanel)
-            facesContext.getApplication().createComponent("javax.faces.Panel");
-            facetComponent.setRendererType("javax.faces.Group");
-            c.getFacets().put(UIComponent.COMPOSITE_FACET_NAME, facetComponent);
-        }                                                                                 
-        else {
-            facetComponent = (UIPanel) 
-                    c.getFacets().get(UIComponent.COMPOSITE_FACET_NAME);
-        }
-        assert(null != facetComponent);
-        
-        try {
-            Facelet f = factory.getFacelet(ccResource.getURL());
-
-            VariableMapper wrapper = new VariableMapperWrapper(orig) {
-
-                @Override
-                public ValueExpression resolveVariable(String variable) {
-                    return super.resolveVariable(variable);
-                }
-                
-            };
-            ctx.setVariableMapper(wrapper);
-            f.apply(facesContext, facetComponent);
-        } finally {
-            ctx.setVariableMapper(orig);
-        }
-
-    }
-
-
-
-
-
-
-    private void markInitialState(UIComponent c) {
-        if (!c.initialStateMarked()) {
-            c.markInitialState();
-            for (Iterator<UIComponent> i = c.getFacetsAndChildren(); i.hasNext(); ) {
-                markInitialState(i.next());
-            }
-        }
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Specialized MetaRulesetImpl to return CompositeMetadataTarget for component
-     * attribute handling.
-     */
-    private static final class CompositeComponentMetaRuleset extends MetaRulesetImpl {
-
-        private BeanInfo compBeanInfo;
-        private Class<?> type;
-
-        public CompositeComponentMetaRuleset(Tag tag,
-                                             Class<?> type,
-                                             BeanInfo compBeanInfo) {
-
-            super(tag, type);
-            this.compBeanInfo = compBeanInfo;
-            this.type = type;
-
-        }
-
-        @Override
-        protected MetadataTarget getMetadataTarget() {
-            try {
-                return new CompositeMetadataTarget(type, compBeanInfo);
-            } catch (IntrospectionException ie) {
-                throw new FacesException(ie);
-            }
-        }
-
-
-        // ------------------------------------------------------ Nested Classes
-
-
-        /**
-         * This class is responsible for creating ValueExpression instances with
-         * the expected type based off the following:
-         *
-         *  - if the composite:attribute metadata is present, then use the type
-         *    if specified by the author, or default to Object.class
-         *  - if no composite:attribute is specified, then attempt to return the
-         *    type based off the bean info for this component
-         */
-        private static final class CompositeMetadataTarget extends MetadataTargetImpl {
-
-            private BeanInfo compBeanInfo;
-
-
-            // ---------------------------------------------------- Construcrors
-
-
-            public CompositeMetadataTarget(Class<?> type, BeanInfo compBeanInfo)
-            throws IntrospectionException {
-
-                super(type);
-                this.compBeanInfo = compBeanInfo;
-
-            }
-
-
-            // --------------------------------- Methods from MetadataTargetImpl
-
-
-            @Override
-            public Class getPropertyType(String name) {
-                PropertyDescriptor compDescriptor = findDescriptor(name);
-                if (compDescriptor != null) {
-                    // composite:attribute declaration...
-                    ValueExpression typeVE = (ValueExpression) compDescriptor.getValue("type");
-                    if (typeVE == null) {
-                        return Object.class;
-                    } else {
-                        String className = (String) typeVE.getValue(FacesContext.getCurrentInstance().getELContext());
-                        if (className != null) {
-                            className = prefix(className);
-                            try {
-                                return ReflectionUtil.forName(className);
-                            } catch (ClassNotFoundException cnfe) {
-                                throw new FacesException(cnfe);
-                            }
-                        } else {
-                            return Object.class;
-                        }
-                    }
-                } else {
-                    // defer to the default processing which will inspect the
-                    // PropertyDescriptor of the UIComponent type
-                    return super.getPropertyType(name);
-                }
-            }
-
-
-            // ------------------------------------------------- Private Methods
-
-
-            private PropertyDescriptor findDescriptor(String name) {
-
-                for (PropertyDescriptor pd : compBeanInfo.getPropertyDescriptors()) {
-
-                    if (pd.getName().equals(name)) {
-                        return pd;
-                    }
-
-                }
-                return null;
-
-            }
-
-
-            private String prefix(String className) {
-
-                if (className.indexOf('.') == -1
-                    && Character.isUpperCase(className.charAt(0))) {
-                    return ("java.lang." + className);
-                } else {
-                    return className;
-                }
-
-            }
-        }
-
-    } // END CompositeComponentMetaRuleset
-
-
-    /**
-     * <code>MetaRule</code> for populating the ValueExpression map of a
-     * composite component.
-     */
-    private static class CompositeComponentRule extends MetaRule {
-
-        private static final CompositeComponentRule Instance = new CompositeComponentRule();
-
-
-        // ------------------------------------------ Methods from ComponentRule
-
-
-        public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget meta) {
-
-            if (meta.isTargetInstanceOf(UIComponent.class)) {
-                Class type = meta.getPropertyType(name);
-                if (type == null) {
-                    type = Object.class;
-                }
-
-                if (!attribute.isLiteral()) {
-                    return new CompositeExpressionMetadata(name, type, attribute);
-                } else {
-                    return new LiteralAttributeMetadata(name, type, attribute);
-                }
-            }
-            return null;
-
-        }
-
-
-        // ------------------------------------------------------ Nested Classes
-
-
-        /**
-         * For literal expressions, coerce the literal value to the type
-         * as provided to the constructor prior to setting the value into
-         * the component's attribute map.
-         */
-        private static final class LiteralAttributeMetadata extends Metadata {
-
-            private String name;
-            private Class<?> type;
-            private TagAttribute attribute;
-
-
-            // ---------------------------------------------------- Constructors
-
-
-            public LiteralAttributeMetadata(String name,
-                                            Class<?> type,
-                                            TagAttribute attribute) {
-
-                this.name = name;
-                this.type = type;
-                this.attribute = attribute;
-                
-            }
-
-
-            // ------------------------------------------- Methods from Metadata
-
-
-            public void applyMetadata(FaceletContext ctx, Object instance) {
-
-                UIComponent c = (UIComponent) instance;
-                c.getAttributes().put(name, attribute.getObject(ctx, type));
-
-            }
-
-        } // END LiteralAttributeMetadata
-
-
-        /**
-         * CompositeExpressionMetadata sets up specialized wrapper ValueExpression
-         * instances around the source ValueExpression that, when evaluated,
-         * will cause the parent composite component of the currently available
-         * composite component to be pushed onto a stack that the
-         * ImplicitObjectELResolver will check for.
-         */
-        private static final class CompositeExpressionMetadata extends Metadata {
-
-            private String name;
-            private Class<?> type;
-            private TagAttribute attr;
-
-
-            // ---------------------------------------------------- Constructors
-
-
-            public CompositeExpressionMetadata(String name,
-                                               Class<?> type,
-                                               TagAttribute attr) {
-                this.name = name;
-                this.type = type;
-                this.attr = attr;
-
-
-            }
-
-            // ------------------------------------------- Methods from Metadata
-
-
-            public void applyMetadata(FaceletContext ctx, Object instance) {
-
-                ValueExpression ve = attr.getValueExpression(ctx, type);
-                UIComponent cc = (UIComponent) instance;
-                assert (UIComponent.isCompositeComponent(cc));
-                cc.setValueExpression(name, ve);
-
-            }
-
-
-        } // END CompositeExpressionMetadata
-
-
-    } // END CompositeComponentRule
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentTagLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentTagLibrary.java
deleted file mode 100644
index 0bfaacf..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/CompositeComponentTagLibrary.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.tag.TagLibraryImpl;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.FacesException;
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-public class CompositeComponentTagLibrary extends TagLibraryImpl {
-    
-    private static final Logger LOGGER = FacesLogger.FACELETS_COMPONENT.getLogger();
-
-    public CompositeComponentTagLibrary(String ns) {
-        super(ns);
-        if (null == ns) {
-            throw new NullPointerException();
-        }
-        this.ns = ns;
-    }
-    
-    public CompositeComponentTagLibrary(String ns, String compositeLibraryName) {
-        super(ns);
-        if (null == ns) {
-            throw new NullPointerException();
-        }
-        this.ns = ns;
-        if (null == compositeLibraryName) {
-            throw new NullPointerException();
-        }
-        this.compositeLibraryName = compositeLibraryName;
-        
-    }
-    
-    private String ns = null;
-    private String compositeLibraryName;
-
-    public boolean containsTagHandler(String ns, String localName) {
-        boolean result = false;
-
-        Resource ccResource = null;
-                        
-        if (null != (ccResource = 
-                getCompositeComponentResource(ns, localName))) {
-            InputStream componentStream = null;
-            try {
-                componentStream = ccResource.getInputStream();
-            } catch (IOException ex) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE, ex.toString(), ex);
-                }
-            }
-            result = (componentStream != null);
-        }
-        return result || super.containsTagHandler(ns, localName);
-    }
-    
-    private Resource getCompositeComponentResource(String ns, String localName) {
-        Resource ccResource = null;
-        if (ns.equals(this.ns)) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            String libraryName = getCompositeComponentLibraryName(this.ns);
-            if (null != libraryName) {
-                String ccName = localName + ".xhtml";
-                // PENDING: there has to be a cheaper way to test for existence
-                ResourceHandler resourceHandler = context.getApplication().getResourceHandler();
-                ccResource = resourceHandler.
-                        createResource(ccName, libraryName);
-            }
-        }
-        return ccResource;
-    }
-
-
-    public TagHandler createTagHandler(String ns, String localName, TagConfig tag) throws FacesException {
-
-        TagHandler result = super.createTagHandler(ns, localName, tag);
-
-        if (result == null) {
-            ComponentConfig componentConfig =
-                  new ComponentConfigWrapper(tag, CompositeComponentImpl.TYPE, null);
-            result = new CompositeComponentTagHandler(
-                  getCompositeComponentResource(ns, localName),
-                  componentConfig);
-        }
-
-        return result;
-    }
-    
-    private static final String NS_COMPOSITE_COMPONENT_PREFIX = 
-            "http://java.sun.com/jsf/composite/";
-    
-    public boolean tagLibraryForNSExists(String toTest) {
-        boolean result = false;
-        
-        String resourceId = null;
-        if (null != (resourceId = getCompositeComponentLibraryName(toTest))) {
-            result = FacesContext.getCurrentInstance().getApplication().
-                    getResourceHandler().libraryExists(resourceId);
-        }
-        
-        return result;
-    }
-    
-    public static boolean scriptComponentForResourceExists(FacesContext context,
-            Resource componentResource) {
-        boolean result = false;
-
-        Resource scriptComponentResource = context.getApplication().getViewHandler().getViewDeclarationLanguage(context, context.getViewRoot().getViewId()).getScriptComponentResource(context, 
-                componentResource);
-        try {
-            result = (null != scriptComponentResource) && (null != scriptComponentResource.getInputStream());
-        } catch (IOException ex) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE, ex.toString(), ex);
-            }
-        }
-        
-        return result;
-    }
-    
-    private String getCompositeComponentLibraryName(String toTest) {
-        String resourceId = null;
-        if (null != compositeLibraryName) {
-            resourceId = compositeLibraryName;
-        }
-        else {
-            int resourceIdIndex;
-            if (-1 != (resourceIdIndex = toTest.indexOf(NS_COMPOSITE_COMPONENT_PREFIX))) {
-                resourceIdIndex += NS_COMPOSITE_COMPONENT_PREFIX.length();
-                if (resourceIdIndex < toTest.length()) {
-                    resourceId = toTest.substring(resourceIdIndex);
-                }
-            }
-        }
-        
-        return resourceId;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ConverterTagHandlerDelegateImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ConverterTagHandlerDelegateImpl.java
deleted file mode 100644
index c4cb3a4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ConverterTagHandlerDelegateImpl.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.tag.MetaRulesetImpl;
-import com.sun.faces.util.Util;
-
-import javax.el.ValueExpression;
-import javax.faces.application.Resource;
-import javax.faces.component.UIComponent;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.view.facelets.*;
-import java.io.IOException;
-
-
-/**
- *
- * @author edburns
- */
-public class ConverterTagHandlerDelegateImpl extends TagHandlerDelegate implements AttachedObjectHandler {
-
-    private ConverterHandler owner;
-    
-    public ConverterTagHandlerDelegateImpl(ConverterHandler owner) {
-        this.owner = owner;
-    }
-    
-    @Override
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        // only process if it's been created
-        if (parent == null || !(parent.getParent() == null)) {
-            return;
-        }
-        if (parent instanceof ValueHolder) {
-            owner.applyAttachedObject(ctx.getFacesContext(), parent);
-        } else if (UIComponent.isCompositeComponent(parent)) {
-            if (null == owner.getFor()) {
-                // PENDING(): I18N
-                throw new TagException(owner.getTag(),
-                        "converter tags nested within composite components must have a non-null \"for\" attribute");
-            }
-            // Allow the composite component to know about the target
-            // component.
-            CompositeComponentTagHandler.getAttachedObjectHandlers(parent).add(owner);
-        } else {
-            throw new TagException(owner.getTag(),
-                    "Parent not an instance of ValueHolder: " + parent);
-        }
-    }
-    
-    public MetaRuleset createMetaRuleset(Class type) {
-        Util.notNull("type", type);
-        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
-
-        return m.ignore("binding").ignore("for");
-    }
-    
-    public String getFor() {
-        String result = null;
-        TagAttribute attr = owner.getTagAttribute("for");
-        
-        if (null != attr) {
-            result = attr.getValue();
-        }
-        return result;
-        
-    }
-    
-    public void applyAttachedObject(FacesContext context, UIComponent parent) {
-        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
-        // cast to a ValueHolder
-        ValueHolder vh = (ValueHolder) parent;
-        ValueExpression ve = null;
-        Converter c = null;
-        if (owner.getBinding() != null) {
-            ve = owner.getBinding().getValueExpression(ctx, Converter.class);
-            c = (Converter) ve.getValue(ctx);
-        }
-        if (c == null) {
-            c = this.createConverter(ctx);
-            if (ve != null) {
-                ve.setValue(ctx, c);
-            }
-        }
-        if (c == null) {
-            throw new TagException(owner.getTag(), "No Converter was created");
-        }
-        owner.setAttributes(ctx, c);
-        vh.setConverter(c);
-        Object lv = vh.getLocalValue();
-        FacesContext faces = ctx.getFacesContext();
-        if (lv instanceof String) {
-            vh.setValue(c.getAsObject(faces, parent, (String) lv));
-        }
-    }
-
-    /**
-     * Create a Converter instance
-     * 
-     * @param ctx
-     *            FaceletContext to use
-     * @return Converter instance, cannot be null
-     */
-    private Converter createConverter(FaceletContext ctx) {
-        if (owner.getConverterId(ctx) == null) {
-            throw new TagException(
-                    owner.getTag(),
-                    "Default behavior invoked of requiring a converter-id passed in the constructor, must override ConvertHandler(ConverterConfig)");
-        }
-        return ctx.getFacesContext().getApplication().createConverter(owner.getConverterId(ctx));
-    }
-
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/EditableValueHolderRule.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/EditableValueHolderRule.java
deleted file mode 100644
index 787ba11..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/EditableValueHolderRule.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.el.LegacyMethodBinding;
-
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.MethodExpressionValueChangeListener;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.validator.MethodExpressionValidator;
-import javax.faces.view.facelets.*;
-
-/**
- * 
- * @author Jacob Hookom
- */
-public final class EditableValueHolderRule extends MetaRule {
-
-    final static class LiteralValidatorMetadata extends Metadata {
-
-        private final String validatorId;
-
-        public LiteralValidatorMetadata(String validatorId) {
-            this.validatorId = validatorId;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((EditableValueHolder) instance).addValidator(ctx.getFacesContext()
-                    .getApplication().createValidator(this.validatorId));
-        }
-    }
-
-    final static class ValueChangedExpressionMetadata extends Metadata {
-        private final TagAttribute attr;
-
-        public ValueChangedExpressionMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((EditableValueHolder) instance)
-                    .addValueChangeListener(new MethodExpressionValueChangeListener(
-                            this.attr.getMethodExpression(ctx, null,
-                                    VALUECHANGE_SIG)));
-        }
-    }
-
-    final static class ValueChangedBindingMetadata extends Metadata {
-        private final TagAttribute attr;
-
-        public ValueChangedBindingMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((EditableValueHolder) instance)
-                    .setValueChangeListener(new LegacyMethodBinding(this.attr
-                            .getMethodExpression(ctx, null, VALUECHANGE_SIG)));
-        }
-    }
-
-    final static class ValidatorExpressionMetadata extends Metadata {
-        private final TagAttribute attr;
-
-        public ValidatorExpressionMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((EditableValueHolder) instance)
-                    .addValidator(new MethodExpressionValidator(this.attr
-                            .getMethodExpression(ctx, null, VALIDATOR_SIG)));
-        }
-    }
-
-    final static class ValidatorBindingMetadata extends Metadata {
-        private final TagAttribute attr;
-
-        public ValidatorBindingMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((EditableValueHolder) instance)
-                    .setValidator(new LegacyMethodBinding(this.attr
-                            .getMethodExpression(ctx, null, VALIDATOR_SIG)));
-        }
-    }
-
-    private final static Class[] VALIDATOR_SIG = new Class[] {
-            FacesContext.class, UIComponent.class, Object.class };
-
-    private final static Class[] VALUECHANGE_SIG = new Class[] { ValueChangeEvent.class };
-
-    public final static EditableValueHolderRule Instance = new EditableValueHolderRule();
-
-    public Metadata applyRule(String name, TagAttribute attribute,
-            MetadataTarget meta) {
-
-        if (meta.isTargetInstanceOf(EditableValueHolder.class)) {
-
-            if ("validator".equals(name)) {
-                if (attribute.isLiteral()) {
-                    return new LiteralValidatorMetadata(attribute.getValue());
-                } else {
-                    return new ValidatorExpressionMetadata(attribute);
-                }
-            }
-
-            if ("valueChangeListener".equals(name)) {
-                return new ValueChangedExpressionMetadata(attribute);
-            }
-
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/RenderPropertyRule.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/RenderPropertyRule.java
deleted file mode 100644
index 2b5be78..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/RenderPropertyRule.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import javax.faces.component.UIInput;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.MetaRule;
-import javax.faces.view.facelets.Metadata;
-import javax.faces.view.facelets.MetadataTarget;
-import javax.faces.view.facelets.TagAttribute;
-import java.util.Map;
-
-public final class RenderPropertyRule extends MetaRule {
-
-
-    final static class HideNoSelectionLiteralMetadata extends Metadata {
-        private final String hideOption;
-
-        public HideNoSelectionLiteralMetadata(String hideOption) {
-            this.hideOption = hideOption;
-        }
-
-        @Override
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            Map<String, Object> attributes = ((UIInput) instance).getAttributes();
-            attributes.put("hideNoSelectionOption", Boolean.valueOf(hideOption));
-        }
-    }
-
-
-    final static class HideNoSelectionExpressionMetadata extends Metadata {
-        private final TagAttribute attr;
-
-        public HideNoSelectionExpressionMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        @Override
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((UIComponent) instance).setValueExpression("hideNoSelectionOption",
-                                                        attr.getValueExpression(ctx, Boolean.class));
-        }
-    }
-
-    public final static RenderPropertyRule Instance = new RenderPropertyRule();
-
-    @Override
-    public Metadata applyRule(String name, TagAttribute attribute,
-                              MetadataTarget meta) {
-
-
-        if ("hideNoSelectionOption".equals(name)) {
-            if (attribute.isLiteral()) {
-                return new HideNoSelectionLiteralMetadata(attribute.getValue());
-            } else {
-                return new HideNoSelectionExpressionMetadata(attribute);
-            }
-        }
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/TagHandlerDelegateFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/TagHandlerDelegateFactoryImpl.java
deleted file mode 100644
index 3d80bf3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/TagHandlerDelegateFactoryImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.tag.jsf.html.ScriptResourceDelegate;
-import com.sun.faces.facelets.tag.jsf.html.ScriptResourceHandler;
-import com.sun.faces.facelets.tag.jsf.html.StylesheetResourceDelegate;
-import com.sun.faces.facelets.tag.jsf.html.StylesheetResourceHandler;
-
-import javax.faces.view.facelets.*;
-
-public class TagHandlerDelegateFactoryImpl extends TagHandlerDelegateFactory {
-
-    @Override
-    public TagHandlerDelegate createComponentHandlerDelegate(ComponentHandler owner) {
-        if (owner instanceof StylesheetResourceHandler) {
-            return new StylesheetResourceDelegate(owner);
-        } else if (owner instanceof ScriptResourceHandler) {
-            return new ScriptResourceDelegate(owner);
-        } else {
-            return new ComponentTagHandlerDelegateImpl(owner);
-        }
-    }
-
-    @Override
-    public TagHandlerDelegate createValidatorHandlerDelegate(ValidatorHandler owner) {
-        return new ValidatorTagHandlerDelegateImpl(owner);
-    }
-
-    @Override
-    public TagHandlerDelegate createConverterHandlerDelegate(ConverterHandler owner) {
-        return new ConverterTagHandlerDelegateImpl(owner);
-    }
-
-    @Override
-    public TagHandlerDelegate createBehaviorHandlerDelegate(BehaviorHandler owner) {
-        return new BehaviorTagHandlerDelegateImpl(owner);
-    }
-    
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ValidatorTagHandlerDelegateImpl.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ValidatorTagHandlerDelegateImpl.java
deleted file mode 100644
index 266197a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ValidatorTagHandlerDelegateImpl.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.component.validator.ComponentValidators;
-import com.sun.faces.facelets.tag.MetaRulesetImpl;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-
-import javax.el.ValueExpression;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.view.facelets.*;
-import java.io.IOException;
-import java.util.Set;
-import java.util.HashSet;
-
-public class ValidatorTagHandlerDelegateImpl extends TagHandlerDelegate implements AttachedObjectHandler {
-
-    protected final ValidatorHandler owner;
-    private final boolean wrapping;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ValidatorTagHandlerDelegateImpl(ValidatorHandler owner) {
-
-        this.owner = owner;
-        wrapping = isWrapping();
-
-
-    }
-
-
-    // ----------------------------------------- Methods from TagHandlerDelegate
-
-
-    @Override
-    public void apply(FaceletContext ctx, UIComponent parent)
-    throws IOException {
-
-        if (wrapping) {
-            applyWrapping(ctx, parent);
-        } else {
-            applyNested(ctx, parent);
-        }
-
-    }
-
-
-    @Override
-    public MetaRuleset createMetaRuleset(Class type) {
-
-        Util.notNull("type", type);
-        MetaRuleset m = new MetaRulesetImpl(owner.getTag(), type);
-        
-        return m.ignore("binding").ignore("disabled").ignore("for");
-
-    }
-    
-
-    // -------------------------------------- Methods from AttachedObjectHandler
-
-
-    @SuppressWarnings({"unchecked"})
-    public void applyAttachedObject(FacesContext context, UIComponent parent) {
-
-        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
-        EditableValueHolder evh = (EditableValueHolder) parent;
-        if (owner.isDisabled(ctx)) {
-            Set<String> disabledIds = (Set<String>)
-                  RequestStateManager.get(context, RequestStateManager.DISABLED_VALIDATORS);
-            if (disabledIds == null) {
-                disabledIds = new HashSet<String>(3);
-                RequestStateManager.set(context,
-                                        RequestStateManager.DISABLED_VALIDATORS,
-                                        disabledIds);
-            }
-            disabledIds.add(owner.getValidatorId(ctx));
-            return;
-        }
-
-        ValueExpression ve = null;
-        Validator v = null;
-        if (owner.getBinding() != null) {
-            ve = owner.getBinding().getValueExpression(ctx, Validator.class);
-            v = (Validator) ve.getValue(ctx);
-        }
-        if (v == null) {
-            v = this.createValidator(ctx);
-            if (ve != null) {
-                ve.setValue(ctx, v);
-            }
-        }
-        if (v == null) {
-            throw new TagException(owner.getTag(), "No Validator was created");
-        }
-        owner.setAttributes(ctx, v);
-        evh.addValidator(v);
-
-    }
-
-
-    public String getFor() {
-
-        String result = null;
-        TagAttribute attr = owner.getTagAttribute("for");
-        
-        if (null != attr) {
-            result = attr.getValue();
-        }
-        return result;
-        
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected ComponentValidators.ValidatorInfo createValidatorInfo(FaceletContext ctx) {
-
-        return new ComponentValidators.ValidatorInfo(ctx, owner);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    // Tests whether the valiator tag is wrapping other tags.
-    private boolean isWrapping() {
-
-        // Would be nice if there was some easy way to determine whether
-        // we are a leaf handler.  However, even leaf handlers have a
-        // non-null nextHandler - the CompilationUnit.LEAF instance.
-        // We assume that if we've got a TagHandler or CompositeFaceletHandler
-        // as our nextHandler, we are not a leaf.
-        return ((owner.getValidatorConfig().getNextHandler() instanceof TagHandler) ||
-                (owner.getValidatorConfig().getNextHandler() instanceof CompositeFaceletHandler));
-        
-    }
-
-
-    private void applyWrapping(FaceletContext ctx,
-                               UIComponent parent) throws IOException {
-
-        ComponentValidators validators = ComponentValidators.getValidators(ctx.getFacesContext(), true);
-        validators.pushValidatorInfo(createValidatorInfo(ctx));
-        owner.getValidatorConfig().getNextHandler().apply(ctx, parent);
-        validators.popValidatorInfo();
-
-    }
-
-
-    private void applyNested(FaceletContext ctx,
-                             UIComponent parent) {
-
-        // only process if it's been created
-        if (!ComponentHandler.isNew(parent)) {
-            return;
-        }
-
-        if (parent instanceof EditableValueHolder) {
-            applyAttachedObject(ctx.getFacesContext(), parent);
-        } else if (UIComponent.isCompositeComponent(parent)) {
-            if (null == owner.getFor()) {
-                // PENDING(): I18N
-                throw new TagException(owner.getTag(),
-                                       "validator tags nested within composite components must have a non-null \"for\" attribute");
-            }
-            // Allow the composite component to know about the target
-            // component.
-            CompositeComponentTagHandler.getAttachedObjectHandlers(parent).add(owner);
-        } else {
-            throw new TagException(owner.getTag(),
-                    "Parent not an instance of EditableValueHolder: " + parent);
-        }
-
-    }
-
-    
-    /**
-     * Template method for creating a Validator instance
-     * 
-     * @param ctx
-     *            FaceletContext to use
-     * @return a new Validator instance
-     */
-    private Validator createValidator(FaceletContext ctx) {
-
-        String id = owner.getValidatorId(ctx);
-        if (id == null) {
-            throw new TagException(
-                    owner.getTag(),
-                    "A validator id was not specified. Typically the validator id is set in the constructor ValidateHandler(ValidatorConfig)");
-        }
-        return ctx.getFacesContext().getApplication().createValidator(id);
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ValueHolderRule.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ValueHolderRule.java
deleted file mode 100644
index 930000a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/ValueHolderRule.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf;
-
-import com.sun.faces.facelets.el.LegacyValueBinding;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectBoolean;
-import javax.faces.component.ValueHolder;
-import javax.faces.convert.Converter;
-import javax.faces.view.facelets.*;
-
-/**
- * 
- * @author Jacob Hookom
- * @version $Id: ValueHolderRule.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-final class ValueHolderRule extends MetaRule {
-
-    final static class LiteralConverterMetadata extends Metadata {
-
-        private final String converterId;
-
-        public LiteralConverterMetadata(String converterId) {
-            this.converterId = converterId;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((ValueHolder) instance).setConverter(ctx.getFacesContext()
-                    .getApplication().createConverter(this.converterId));
-        }
-    }
-
-    final static class DynamicConverterMetadata extends Metadata {
-
-        private final TagAttribute attr;
-
-        public DynamicConverterMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((UIComponent) instance).setValueBinding("converter",
-                    new LegacyValueBinding(attr.getValueExpression(ctx,
-                            Converter.class)));
-        }
-    }
-
-    final static class DynamicConverterMetadata2 extends Metadata {
-
-        private final TagAttribute attr;
-
-        public DynamicConverterMetadata2(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((UIComponent) instance).setValueExpression("converter", attr
-                    .getValueExpression(ctx, Converter.class));
-        }
-    }
-
-    final static class DynamicValueExpressionMetadata extends Metadata {
-
-        private final TagAttribute attr;
-
-        public DynamicValueExpressionMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            UIComponent c = (UIComponent) instance;
-            c.setValueExpression("value", attr.getValueExpression(ctx, ((c instanceof UISelectBoolean)
-                                                                        ? Boolean.class
-                                                                        : Object.class)));
-        }
-    }
-
-    final static class DynamicValueBindingMetadata extends Metadata {
-
-        private final TagAttribute attr;
-
-        public DynamicValueBindingMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            ((UIComponent) instance).setValueBinding("value",
-                    new LegacyValueBinding(attr.getValueExpression(ctx,
-                            Object.class)));
-        }
-    }
-
-    public final static ValueHolderRule Instance = new ValueHolderRule();
-
-    public Metadata applyRule(String name, TagAttribute attribute,
-            MetadataTarget meta) {
-        if (meta.isTargetInstanceOf(ValueHolder.class)) {
-
-            if ("converter".equals(name)) {
-                if (attribute.isLiteral()) {
-                    return new LiteralConverterMetadata(attribute.getValue());
-                } else {
-                    return new DynamicConverterMetadata2(attribute);
-                }
-            }
-
-            if ("value".equals(name)) {
-                //if (attribute.isLiteral()) {
-                //    return new LiteralValueMetadata(attribute.getValue());
-                //} else {
-                return new DynamicValueExpressionMetadata(attribute);
-                //}
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandler.java
deleted file mode 100644
index 598e5ba..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ActionListenerHandler.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
-import com.sun.faces.facelets.util.ReflectionUtil;
-
-import javax.el.ValueExpression;
-import javax.faces.application.Resource;
-import javax.faces.component.ActionSource;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.view.ActionSource2AttachedObjectHandler;
-import javax.faces.view.facelets.*;
-import java.io.IOException;
-import java.io.Serializable;
-
-/**
- * Register an ActionListener instance on the UIComponent associated with the
- * closest parent UIComponent custom action. <p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/actionListener.html">tag
- * documentation</a>.
- *
- * @author Jacob Hookom
- * @see javax.faces.event.ActionListener
- * @see javax.faces.component.ActionSource
- */
-public final class ActionListenerHandler extends TagHandlerImpl
-      implements ActionSource2AttachedObjectHandler {
-
-    private final static class LazyActionListener
-          implements ActionListener, Serializable {
-
-        private static final long serialVersionUID = -9202120013153262119L;
-
-        private final String type;
-        private final ValueExpression binding;
-
-
-        public LazyActionListener(String type, ValueExpression binding) {
-            this.type = type;
-            this.binding = binding;
-        }
-
-        public void processAction(ActionEvent event)
-              throws AbortProcessingException {
-            ActionListener instance = null;
-            FacesContext faces = FacesContext.getCurrentInstance();
-            if (faces == null) {
-                return;
-            }
-            if (this.binding != null) {
-                instance = (ActionListener) binding
-                      .getValue(faces.getELContext());
-            }
-            if (instance == null && this.type != null) {
-                try {
-                    instance = (ActionListener) ReflectionUtil
-                          .forName(this.type).newInstance();
-                } catch (Exception e) {
-                    throw new AbortProcessingException(
-                          "Couldn't Lazily instantiate ValueChangeListener",
-                          e);
-                }
-                if (this.binding != null) {
-                    binding.setValue(faces.getELContext(), instance);
-                }
-            }
-            if (instance != null) {
-                instance.processAction(event);
-            }
-        }
-    }
-
-    private final TagAttribute binding;
-
-    private final String listenerType;
-
-    /**
-     * @param config
-     */
-    public ActionListenerHandler(TagConfig config) {
-        super(config);
-        this.binding = this.getAttribute("binding");
-        TagAttribute type = this.getAttribute("type");
-        if (type != null) {
-            if (!type.isLiteral()) {
-                throw new TagAttributeException(type,
-                                                "Must be a literal class name of type ActionListener");
-            } else {
-                // test it out
-                try {
-                    ReflectionUtil.forName(type.getValue());
-                } catch (ClassNotFoundException e) {
-                    throw new TagAttributeException(type,
-                                                    "Couldn't qualify ActionListener", e);
-                }
-            }
-            this.listenerType = type.getValue();
-        } else {
-            this.listenerType = null;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-        if (null == parent || !(ComponentHandler.isNew(parent))) {
-            return;
-        }
-        if (parent instanceof ActionSource) {
-            applyAttachedObject(ctx.getFacesContext(), parent);
-        } else if (parent.getAttributes()
-              .containsKey(Resource.COMPONENT_RESOURCE_KEY)) {
-            if (null == getFor()) {
-                // PENDING(): I18N
-                throw new TagException(this.tag,
-                                       "actionListener tags nested within composite components must have a non-null \"for\" attribute");
-            }
-            // Allow the composite component to know about the target
-            // component.
-            CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
-                  .add(this);
-
-        } else {
-            throw new TagException(this.tag,
-                                   "Parent is not of type ActionSource, type is: "
-                                   + parent);
-        }
-    }
-
-    public void applyAttachedObject(FacesContext context, UIComponent parent) {
-        FaceletContext ctx = (FaceletContext) context.getAttributes()
-              .get(FaceletContext.FACELET_CONTEXT_KEY);
-        ActionSource as = (ActionSource) parent;
-        ValueExpression b = null;
-        if (this.binding != null) {
-            b = this.binding.getValueExpression(ctx, ActionListener.class);
-        }
-        ActionListener listener = new LazyActionListener(this.listenerType, b);
-        as.addActionListener(listener);
-    }
-
-
-    public String getFor() {
-        String result = null;
-        TagAttribute attr = this.getAttribute("for");
-
-        if (null != attr) {
-            result = attr.getValue();
-        }
-        return result;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/AjaxHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/AjaxHandler.java
deleted file mode 100644
index 5b9514a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/AjaxHandler.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.component.behavior.AjaxBehaviors;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
-
-import javax.el.ELContext;
-import javax.el.MethodExpression;
-import javax.el.MethodNotFoundException;
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.component.behavior.AjaxBehavior;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.AjaxBehaviorEvent;
-import javax.faces.event.AjaxBehaviorListener;
-import javax.faces.view.AttachedObjectTarget;
-import javax.faces.view.BehaviorHolderAttachedObjectHandler;
-import javax.faces.view.BehaviorHolderAttachedObjectTarget;
-import javax.faces.view.facelets.*;
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.TreeSet;
-
-
-
-/**
- * <p class="changed_added_2_0">Enable one or more components in the view
- * to perform Ajax operations.  This tag handler must create an instance
- * of {@link javax.faces.component.behavior.AjaxBehavior} using the tag attribute
- * values.  If this tag is nested within a single 
- * {@link ClientBehaviorHolder} component:
- * <ul>
- * <li>If the <code>events</code> attribute value is not specified, 
- * obtain the default event name by calling {@link ClientBehaviorHolder#getDefaultEventName}.
- * If that returns <code>null</code> throw an <code>exception</code>.</li>
- * <li>If the <code>events</code> attribute value is specified, ensure it
- * that it exists in the <code>Collection</code> returned from a call to
- * {@link ClientBehaviorHolder#getEventNames} and throw an <code>exception</code> if
- * it doesn't exist.</li>
- * <li>Add the {@link AjaxBehavior} instance to the {@link ClientBehaviorHolder}
- * component by calling {@link ClientBehaviorHolder#addClientBehavior} passing <code>event</code>
- * and the {@link AjaxBehavior} instance.</li> 
- * </ul>
- * <br/><br/>
- * Check for the existence of the Ajax resource by calling 
- * <code>UIViewRoot.getComponentResources()</code>.  If
- * the Ajax resource does not exist, create a <code>UIOutput</code> component
- * instance and set the renderer type to <code>javax.faces.resource.Script</code>.
- * Set the the following attributes in the component's attribute <code>Map</code>:
- * <code>library</code> with the value <code>javax.faces</code> and 
- * <code>name</code> with the value <code>jsf.js</code>.  Install the component
- * resource using <code>UIViewRoot.addComponentResource()</code> and specifying
- * <code>head</code> as the <code>target</code> argument.</p> 
- *
- * If this tag has component children, add the {@link AjaxBehavior} to 
- * {@link AjaxBehaviors} by calling {@link AjaxBehaviors#pushBehavior}. As 
- * subsequent child components that implement the {@link ClientBehaviorHolder} interface 
- * are evaluated this {@link AjaxBehavior} instance must be added as a behavior to
- * the component.
- * </p>
- * @version $Id: AjaxHandler.java 5369 2008-09-08 19:53:45Z rogerk $
- */
-public final class AjaxHandler extends TagHandlerImpl implements BehaviorHolderAttachedObjectHandler {
-
-    private final TagAttribute event;
-    private final TagAttribute execute;
-    private final TagAttribute render;
-    private final TagAttribute onevent;
-    private final TagAttribute onerror;
-    private final TagAttribute disabled;
-    private final TagAttribute immediate;
-    private final TagAttribute listener;
-
-    private final boolean wrapping;
-
-    /**
-     * @param config
-     */
-    public AjaxHandler(TagConfig config) {
-        super(config);
-        this.event = this.getAttribute("event");
-        this.execute = this.getAttribute("execute");
-        this.render = this.getAttribute("render");
-        this.onevent = this.getAttribute("onevent");
-        this.onerror = this.getAttribute("onerror");
-        this.disabled = this.getAttribute("disabled");
-        this.immediate = this.getAttribute("immediate");
-        this.listener = this.getAttribute("listener");
-
-        this.wrapping = isWrapping();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-
-        String eventName = getEventName();
-
-        if (this.wrapping) {
-            applyWrapping(ctx, parent, eventName);
-        }  else {
-            applyNested(ctx, parent, eventName);
-        }
-    }
-    
-    public void applyAttachedObject(FacesContext context, UIComponent parent) {
-        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
-        applyAttachedObject(ctx, parent, getEventName());
-    }
-
-    /* (non-Javadoc)
-     * @see javax.faces.view.AttachedObjectHandler#getFor()
-     */
-    public String getFor() {
-        return null;
-    }
-    
-    /* (non-Javadoc)
-     * @see javax.faces.view.BehaviorHolderAttachedObjectHandler#getEventName()
-     */
-    public String getEventName() {
-        return (this.event != null) ? this.event.getValue() : null;
-    }
-
-    // Tests whether the <f:ajax> is wrapping other tags.
-    private boolean isWrapping() {
-
-        // Would be nice if there was some easy way to determine whether
-        // we are a leaf handler.  However, even leaf handlers have a
-        // non-null nextHandler - the CompilationUnit.LEAF instance.
-        // We assume that if we've got a TagHandler or CompositeFaceletHandler
-        // as our nextHandler, we are not a leaf.
-        return ((this.nextHandler instanceof TagHandler) || 
-                (this.nextHandler instanceof CompositeFaceletHandler));
-    }
-
-    // Applies a wrapping AjaxHandler by pushing/popping the AjaxBehavior
-    // to the AjaxBeahviors object.
-    private void applyWrapping(FaceletContext ctx, 
-                               UIComponent parent,
-                               String eventName) throws IOException {
-
-        // In the wrapping case, we assume that some wrapped component
-        // is going to be Ajax enabled and install the Ajax resource.
-        installAjaxResourceIfNecessary();
-
-        AjaxBehavior ajaxBehavior = createAjaxBehavior(ctx, eventName);
-
-        // We leverage AjaxBehaviors to support the wrapping case.  We
-        // push/pop the AjaxBehavior instance on AjaxBehaviors so that
-        // child tags will have access to it.
-        FacesContext context = ctx.getFacesContext();
-        AjaxBehaviors ajaxBehaviors = AjaxBehaviors.getAjaxBehaviors(context, true);
-        ajaxBehaviors.pushBehavior(context, ajaxBehavior, eventName); 
-
-        nextHandler.apply(ctx, parent);
-
-        ajaxBehaviors.popBehavior();
-    }
-
-    // Applies a nested AjaxHandler by adding the AjaxBehavior to the
-    // parent component.
-    private void applyNested(FaceletContext ctx, 
-                             UIComponent parent,
-                             String eventName) {
-        
-        if (!ComponentHandler.isNew(parent)) {
-            return;
-        }
-
-        // Composite component case
-        if (UIComponent.isCompositeComponent(parent)) {
-            // Check composite component event name:
-            boolean tagApplied = false;
-            if (parent instanceof ClientBehaviorHolder) {
-                applyAttachedObject(ctx, parent, eventName);  // error here will propagate up
-                tagApplied = true;
-            }
-            BeanInfo componentBeanInfo = (BeanInfo) parent.getAttributes().get(
-                  UIComponent.BEANINFO_KEY);
-            if (null == componentBeanInfo) {
-                throw new TagException(
-                      tag,
-                      "Error: enclosing composite component does not have BeanInfo attribute");
-            }
-            BeanDescriptor componentDescriptor = componentBeanInfo.getBeanDescriptor();
-            if (null == componentDescriptor) {
-                throw new TagException(
-                      tag,
-                      "Error: enclosing composite component BeanInfo does not have BeanDescriptor");
-            }
-            List<AttachedObjectTarget> targetList = (List<AttachedObjectTarget>)
-                  componentDescriptor
-                        .getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
-            if (null == targetList && !tagApplied) {
-                throw new TagException(
-                      tag,
-                      "Error: enclosing composite component does not support behavior events");
-            }
-            boolean supportedEvent = false;
-            for (AttachedObjectTarget target : targetList) {
-                if (target instanceof BehaviorHolderAttachedObjectTarget) {
-                    BehaviorHolderAttachedObjectTarget behaviorTarget = (BehaviorHolderAttachedObjectTarget) target;
-                    if ((null != eventName && eventName.equals(behaviorTarget.getName()))
-                        || (null == eventName && behaviorTarget.isDefaultEvent())) {
-                        supportedEvent = true;
-                        break;
-                    }
-                }
-            }
-            if (supportedEvent) {
-                CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
-                      .add(this);
-            } else {
-                if (!tagApplied) {
-                    throw new TagException(
-                            tag,
-                            "Error: enclosing composite component does not support event "
-                            + eventName);
-                }
-            }
-        } else if (parent instanceof ClientBehaviorHolder) {
-            applyAttachedObject(ctx, parent, eventName);
-        } else {
-            throw new TagException(this.tag,
-                                   "Unable to attach <f:ajax> to non-ClientBehaviorHolder parent");
-        }
-
-    }
-
-    /**
-     * <p class="changed_added_2_0"></p>
-     * @param ctx
-     * @param parent
-     * @param eventName
-     */
-    private void applyAttachedObject(FaceletContext ctx,
-                                     UIComponent parent,
-                                     String eventName) {
-        ClientBehaviorHolder bHolder = (ClientBehaviorHolder) parent;
-
-        if (null == eventName) {
-            eventName = bHolder.getDefaultEventName();
-            if (null == eventName) {
-                throw new TagException(this.tag,
-                    "Event attribute could not be determined: "
-                        + eventName);
-            }
-        } else {
-            Collection<String> eventNames = bHolder.getEventNames();
-            if (!eventNames.contains(eventName)) {
-                throw new TagException(this.tag, 
-                    getUnsupportedEventMessage(eventName, eventNames, parent));
-            }
-        }
-
-        AjaxBehavior ajaxBehavior = createAjaxBehavior(ctx, eventName);
-        bHolder.addClientBehavior(eventName, ajaxBehavior);
-        installAjaxResourceIfNecessary();
-    }
-
-    // Construct our AjaxBehavior from tag parameters.
-    private AjaxBehavior createAjaxBehavior(FaceletContext ctx, String eventName) {
-        Application application = ctx.getFacesContext().getApplication();
-        AjaxBehavior behavior = (AjaxBehavior)application.createBehavior(
-                                                  AjaxBehavior.BEHAVIOR_ID);
-
-        setBehaviorAttribute(ctx, behavior, this.onevent, String.class);
-        setBehaviorAttribute(ctx, behavior, this.onerror, String.class);
-        setBehaviorAttribute(ctx, behavior, this.disabled, Boolean.class);
-        setBehaviorAttribute(ctx, behavior, this.immediate, Boolean.class);
-        setBehaviorAttribute(ctx, behavior, this.execute, Object.class);
-        setBehaviorAttribute(ctx, behavior, this.render, Object.class);
-
-        if (null != listener) {
-            behavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(
-                this.listener.getMethodExpression(ctx, Object.class, new Class[] { AjaxBehaviorEvent.class }),
-                this.listener.getMethodExpression(ctx, Object.class, new Class[] { })));
-        }
-
-        return behavior;
-    }
-
-    // Sets the value from the TagAttribute on the behavior
-    private void setBehaviorAttribute(FaceletContext ctx,
-                                      AjaxBehavior behavior,
-                                      TagAttribute attr,
-                                      Class type) {
-
-        if (attr != null) {
-            behavior.setValueExpression(attr.getLocalName(),
-                                        attr.getValueExpression(ctx, type));
-        }    
-    }
-
-    // Only install the Ajax resource if it doesn't exist.
-    // The resource component will be installed with the target "head".
-    //
-    private void installAjaxResourceIfNecessary() {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (RenderKitUtils.hasScriptBeenRendered(context)) {
-            // Already included, return
-            return;
-        }
-
-        final String name = "jsf.js";
-        final String library = "javax.faces";
-
-        if (RenderKitUtils.hasResourceBeenInstalled(context, name, library)) {
-            RenderKitUtils.setScriptAsRendered(context);
-            return;
-        }
-        UIOutput output = new UIOutput();
-        output.setRendererType("javax.faces.resource.Script");
-        output.getAttributes().put("name", name);
-        output.getAttributes().put("library", library);
-        context.getViewRoot().addComponentResource(context, output, "head");
-
-        // Set the context to record script as included
-        RenderKitUtils.setScriptAsRendered(context);
-
-    }
-
-    // Returns an error message for the case where the <f:ajax> event
-    // attribute specified an unknown/unsupported event.
-    private String getUnsupportedEventMessage(String             eventName,
-                                              Collection<String> eventNames,
-                                              UIComponent        parent) {
-        StringBuilder builder = new StringBuilder(100);
-        builder.append("'");
-        builder.append(eventName);
-        builder.append("' is not a supported event for ");
-        builder.append(parent.getClass().getSimpleName());
-        builder.append(".  Please specify one of these supported event names: ");
-
-        // Might as well sort the event names for a cleaner error message.
-        Collection<String> sortedEventNames = new TreeSet<String>(eventNames);
-        Iterator<String> iter = sortedEventNames.iterator();
-
-        boolean hasNext = iter.hasNext();
-        while (hasNext) {
-            builder.append(iter.next());
-
-            hasNext = iter.hasNext();
-
-            if (hasNext) {
-                builder.append(", ");
-            }
-        }
-
-        builder.append(".");
-
-        return builder.toString();
-    }
-}
-
-class AjaxBehaviorListenerImpl implements AjaxBehaviorListener, Serializable {
-    private static final long serialVersionUID = -6056525197409773897L;
-
-    private MethodExpression oneArgListener;
-    private MethodExpression noArgListener;
-
-    // Necessary for state saving
-    public AjaxBehaviorListenerImpl() {}
-
-    public AjaxBehaviorListenerImpl(MethodExpression oneArg, MethodExpression noArg) {
-        this.oneArgListener = oneArg;
-        this.noArgListener = noArg;
-    }
-
-    public void processAjaxBehavior(AjaxBehaviorEvent event) throws AbortProcessingException {
-        final ELContext elContext = FacesContext.getCurrentInstance().getELContext();
-        try{
-            noArgListener.invoke(elContext, new Object[]{});
-        } catch (MethodNotFoundException mnfe) {
-            // Attempt to call public void method(AjaxBehaviorEvent event)
-            oneArgListener.invoke(elContext, new Object[]{event});
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/AttributeHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/AttributeHandler.java
deleted file mode 100644
index 4d7a02f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/AttributeHandler.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagException;
-import java.io.IOException;
-
-/**
- * Sets the specified name and attribute on the parent UIComponent. If the
- * "value" specified is not a literal, it will instead set the ValueExpression
- * on the UIComponent.
- * <p />
- * See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/attribute.html">tag
- * documentation</a>.
- * 
- * @see javax.faces.component.UIComponent#getAttributes()
- * @see javax.faces.component.UIComponent#setValueExpression(java.lang.String,
- *      javax.el.ValueExpression)
- * @author Jacob Hookom
- */
-public final class AttributeHandler extends TagHandlerImpl 
-    implements javax.faces.view.facelets.AttributeHandler {
-
-    private final TagAttribute name;
-
-    private final TagAttribute value;
-
-    /**
-     * @param config
-     */
-    public AttributeHandler(TagConfig config) {
-        super(config);
-        this.name = this.getRequiredAttribute("name");
-        this.value = this.getRequiredAttribute("value");
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        if (parent == null) {
-            throw new TagException(this.tag, "Parent UIComponent was null");
-        }
-
-        // only process if the parent is new to the tree
-        if (parent.getParent() == null) {
-            String n = getAttributeName(ctx);
-            if (!parent.getAttributes().containsKey(n)) {
-                if (this.value.isLiteral()) {
-                    parent.getAttributes().put(n, this.value.getValue());
-                } else {
-                    parent.setValueExpression(n, this.value.getValueExpression(ctx, Object.class));
-                }
-            }
-        }
-    }
-
-
-    // javax.faces.view.facelets.tag.AttributeHandler.getAttributeName()
-    // implementation.
-    public String getAttributeName(FaceletContext ctxt) {
-        return this.name.getValue(ctxt);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertDateTimeHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertDateTimeHandler.java
deleted file mode 100644
index f90703a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertDateTimeHandler.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.convert.Converter;
-import javax.faces.convert.DateTimeConverter;
-import javax.faces.view.facelets.*;
-import java.util.TimeZone;
-
-/**
- * Register a DateTimeConverter instance on the UIComponent associated with the
- * closest parent UIComponent custom action. <p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/convertDateTime.html">tag
- * documentation</a>.
- * 
- * @author Jacob Hookom
- * @version $Id: ConvertDateTimeHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class ConvertDateTimeHandler extends ConverterHandler {
-
-    private final TagAttribute dateStyle;
-
-    private final TagAttribute locale;
-
-    private final TagAttribute pattern;
-
-    private final TagAttribute timeStyle;
-
-    private final TagAttribute timeZone;
-
-    private final TagAttribute type;
-
-    /**
-     * @param config
-     */
-    public ConvertDateTimeHandler(ConverterConfig config) {
-        super(config);
-        this.dateStyle = this.getAttribute("dateStyle");
-        this.locale = this.getAttribute("locale");
-        this.pattern = this.getAttribute("pattern");
-        this.timeStyle = this.getAttribute("timeStyle");
-        this.timeZone = this.getAttribute("timeZone");
-        this.type = this.getAttribute("type");
-    }
-
-    /**
-     * Returns a new DateTimeConverter
-     * 
-     * @see DateTimeConverter
-     * @see com.sun.faces.facelets.tag.jsf.ConverterHandler#createConverter(com.sun.faces.facelets.FaceletContext)
-     */
-    protected Converter createConverter(FaceletContext ctx)
-            throws FacesException, ELException, FaceletException {
-        return ctx.getFacesContext().getApplication().createConverter(DateTimeConverter.CONVERTER_ID);
-
-    }
-
-    /**
-     * Implements tag spec, see taglib documentation.
-     * 
-     * @see com.sun.faces.facelets.tag.MetaTagHandler#setAttributes(com.sun.faces.facelets.FaceletContext, Object)
-     */
-    @Override
-    public void setAttributes(FaceletContext ctx, Object obj) {
-        DateTimeConverter c = (DateTimeConverter) obj;
-        if (this.locale != null) {
-            c.setLocale(ComponentSupport.getLocale(ctx, this.locale));
-        }
-        if (this.pattern != null) {
-            c.setPattern(this.pattern.getValue(ctx));
-        } else {
-            if (this.type != null) {
-                c.setType(this.type.getValue(ctx));
-            }
-            if (this.dateStyle != null) {
-                c.setDateStyle(this.dateStyle.getValue(ctx));
-            }
-            if (this.timeStyle != null) {
-                c.setTimeStyle(this.timeStyle.getValue(ctx));
-            }
-        }
-        
-        if (this.timeZone != null) {
-            Object t = this.timeZone.getObject(ctx);
-            if(t != null) {
-	            if (t instanceof TimeZone) {
-	                c.setTimeZone((TimeZone) t);
-	            } else if (t instanceof String) {
-	                TimeZone tz = TimeZone.getTimeZone((String) t);
-	                c.setTimeZone(tz);
-	            } else {
-	                throw new TagAttributeException(
-	                        this.tag,
-	                        this.timeZone,
-	                        "Illegal TimeZone, must evaluate to either a java.util.TimeZone or String, is type: "
-	                                + t.getClass());
-	            }
-            }
-        }
-    }
-
-    @Override
-    public MetaRuleset createMetaRuleset(Class type) {
-        return super.createMetaRuleset(type).ignoreAll();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertDelegateHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertDelegateHandler.java
deleted file mode 100644
index ac582f0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertDelegateHandler.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.convert.Converter;
-import javax.faces.view.facelets.*;
-
-/**
- * Register a named Converter instance on the UIComponent associated with the
- * closest parent UIComponent custom action. <p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/converter.html">tag
- * documentation</a>.
- * 
- * @author Jacob Hookom
- */
-public final class ConvertDelegateHandler extends ConverterHandler {
-
-    private final TagAttribute converterId;
-
-    /**
-     * @param config
-     */
-    public ConvertDelegateHandler(ConverterConfig config) {
-        super(config);
-        this.converterId = this.getAttribute("converterId");
-    }
-
-    /**
-     * Uses the specified "converterId" to pull an instance from the Application
-     * 
-     * @see javax.faces.application.Application#createComponent(java.lang.String)
-     * @see com.sun.faces.facelets.tag.jsf.ConverterHandler#createConverter(com.sun.faces.facelets.FaceletContext)
-     */
-    protected Converter createConverter(FaceletContext ctx)
-            throws FacesException, ELException, FaceletException {
-        return ctx.getFacesContext().getApplication().createConverter(
-                this.converterId.getValue(ctx));
-    }
-
-    protected MetaRuleset createMetaRuleset(Class type) {
-        return super.createMetaRuleset(type).ignoreAll();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertNumberHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertNumberHandler.java
deleted file mode 100644
index eb3539a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ConvertNumberHandler.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.convert.Converter;
-import javax.faces.convert.NumberConverter;
-import javax.faces.view.facelets.*;
-
-/**
- * Register a NumberConverter instance on the UIComponent associated with the
- * closest parent UIComponent custom action. <p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/convertNumber.html">tag
- * documentation</a>.
- * 
- * @author Jacob Hookom
- * @version $Id: ConvertNumberHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class ConvertNumberHandler extends ConverterHandler {
-
-    private final TagAttribute locale;
-
-    /**
-     * @param config
-     */
-    public ConvertNumberHandler(ConverterConfig config) {
-        super(config);
-        this.locale = this.getAttribute("locale");
-    }
-
-    /**
-     * Returns a new NumberConverter
-     * 
-     * @see NumberConverter
-     * @see com.sun.faces.facelets.tag.jsf.ConverterHandler#createConverter(com.sun.faces.facelets.FaceletContext)
-     */
-    protected Converter createConverter(FaceletContext ctx)
-            throws FacesException, ELException, FaceletException {
-        return ctx.getFacesContext().getApplication().createConverter(NumberConverter.CONVERTER_ID);
-    }
-
-    /* (non-Javadoc)
-     * @see com.sun.facelets.tag.ObjectHandler#setAttributes(com.sun.facelets.FaceletContext, java.lang.Object)
-     */
-    @Override
-    public void setAttributes(FaceletContext ctx, Object obj) {
-        super.setAttributes(ctx, obj);
-        NumberConverter c = (NumberConverter) obj;
-        if (this.locale != null) {
-            c.setLocale(ComponentSupport.getLocale(ctx, this.locale));
-        }
-    }
-
-    @Override
-    public MetaRuleset createMetaRuleset(Class type) {
-        return super.createMetaRuleset(type).ignore("locale");
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/CoreLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/CoreLibrary.java
deleted file mode 100644
index 3acd2e9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/CoreLibrary.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.AbstractTagLibrary;
-
-import javax.faces.component.UIParameter;
-import javax.faces.component.UISelectItem;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UIViewParameter;
-import javax.faces.convert.DateTimeConverter;
-import javax.faces.convert.NumberConverter;
-import javax.faces.validator.*;
-
-/**
- * For Tag details, see JSF Core <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/tld-summary.html">taglib
- * documentation</a>.
- *
- * @author Jacob Hookom
- * @version $Id: CoreLibrary.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class CoreLibrary extends AbstractTagLibrary {
-
-    public final static String Namespace = "http://java.sun.com/jsf/core";
-
-    public final static CoreLibrary Instance = new CoreLibrary();
-
-    public CoreLibrary() {
-        super(Namespace);
-
-        this.addTagHandler("actionListener", ActionListenerHandler.class);
-
-        this.addTagHandler("ajax", AjaxHandler.class);
-
-        this.addTagHandler("attribute", AttributeHandler.class);
-
-        this.addConverter("convertDateTime", DateTimeConverter.CONVERTER_ID, ConvertDateTimeHandler.class);
-
-        this.addConverter("convertNumber", NumberConverter.CONVERTER_ID, ConvertNumberHandler.class);
-
-        this.addConverter("converter", null, ConvertDelegateHandler.class);
-
-        this.addTagHandler("event", EventHandler.class);
-
-        this.addTagHandler("facet", FacetHandler.class);
-
-        this.addTagHandler("metadata", MetadataHandler.class);
-
-        this.addTagHandler("loadBundle", LoadBundleHandler.class);
-
-        this.addComponent("viewParam", UIViewParameter.COMPONENT_TYPE, null);
-
-        this.addComponent("param", UIParameter.COMPONENT_TYPE, null);
-        
-        this.addTagHandler("phaseListener", PhaseListenerHandler.class);
-
-        this.addComponent("selectItem", UISelectItem.COMPONENT_TYPE, null);
-
-        this.addComponent("selectItems", UISelectItems.COMPONENT_TYPE, null);
-        
-        this.addTagHandler("setPropertyActionListener", SetPropertyActionListenerHandler.class);
-        
-        this.addComponent("subview", "javax.faces.NamingContainer", null);
-        
-        this.addValidator("validateBean", BeanValidator.VALIDATOR_ID);
-        
-        this.addValidator("validateLength", LengthValidator.VALIDATOR_ID);
-        
-        this.addValidator("validateLongRange", LongRangeValidator.VALIDATOR_ID);
-        
-        this.addValidator("validateDoubleRange", DoubleRangeValidator.VALIDATOR_ID);
-
-        this.addValidator("validateRegex", RegexValidator.VALIDATOR_ID);
-        
-        this.addValidator("validateRequired", RequiredValidator.VALIDATOR_ID);
-
-        this.addValidator("validator", null, ValidateDelegateHandler.class);
-
-        this.addTagHandler("valueChangeListener",
-                ValueChangeListenerHandler.class);
-
-        this.addTagHandler("view", ViewHandler.class);
-        
-        this.addComponent("verbatim", "javax.faces.HtmlOutputText",
-                          "javax.faces.Text", VerbatimHandler.class);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/EventHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/EventHandler.java
deleted file mode 100644
index f1388ee..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/EventHandler.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.application.ApplicationAssociate;
-
-import javax.el.ELContext;
-import javax.el.MethodExpression;
-import javax.el.MethodNotFoundException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-import java.io.IOException;
-import java.io.Serializable;
-import javax.faces.component.UIViewRoot;
-import javax.faces.event.PreRenderViewEvent;
-
-/**
- * This is the TagHandler for the f:event tag.
- */
-public class EventHandler extends TagHandler {
-    protected final TagAttribute type;
-    protected final TagAttribute listener;
-
-    public EventHandler(TagConfig config) {
-        super(config);
-        this.type = this.getRequiredAttribute("type");
-        this.listener = this.getRequiredAttribute("listener");
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        if (ComponentHandler.isNew(parent)) {
-            Class<? extends SystemEvent> eventClass = getEventClass(ctx);
-            UIViewRoot viewRoot = ctx.getFacesContext().getViewRoot();
-            // ensure that f:event can be used anywhere on the page for preRenderView,
-            // not just as a direct child of the viewRoot
-            if (null != viewRoot && PreRenderViewEvent.class == eventClass &&
-                parent != viewRoot) {
-                parent = viewRoot;
-            }
-            if (eventClass != null) {
-                parent.subscribeToEvent(eventClass,
-                        new DeclarativeSystemEventListener(
-                            listener.getMethodExpression(ctx, Object.class, new Class[] { ComponentSystemEvent.class }),
-                            listener.getMethodExpression(ctx, Object.class, new Class[] { })));
-            }
-        }
-    }
-
-    protected Class<? extends SystemEvent> getEventClass(FaceletContext ctx) {
-        String eventType = (String) this.type.getValueExpression(ctx, String.class).getValue(ctx);
-        if (eventType == null) {
-            throw new FacesException("Attribute 'type' can not be null");
-        }
-
-        return ApplicationAssociate.getInstance(ctx.getFacesContext().getExternalContext())
-                .getNamedEventManager().getNamedEvent(eventType);
-    }
-
-}
-
-
-class DeclarativeSystemEventListener implements ComponentSystemEventListener, Serializable {
-
-    private static final long serialVersionUID = 8945415935164238908L;
-
-    private MethodExpression oneArgListener;
-    private MethodExpression noArgListener;
-
-    // Necessary for state saving
-    public DeclarativeSystemEventListener() {}
-
-    public DeclarativeSystemEventListener(MethodExpression oneArg, MethodExpression noArg) {
-        this.oneArgListener = oneArg;
-        this.noArgListener = noArg;
-    }
-
-    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
-        final ELContext elContext = FacesContext.getCurrentInstance().getELContext();
-        try{
-            noArgListener.invoke(elContext, new Object[]{});
-        } catch (MethodNotFoundException mnfe) {
-            // Attempt to call public void method(ComponentSystemEvent event)
-            oneArgListener.invoke(elContext, new Object[]{event});
-        }
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        DeclarativeSystemEventListener that = (DeclarativeSystemEventListener) o;
-
-        if (noArgListener != null
-            ? !noArgListener.equals(that.noArgListener)
-            : that.noArgListener != null) {
-            return false;
-        }
-        if (oneArgListener != null
-            ? !oneArgListener.equals(that.oneArgListener)
-            : that.oneArgListener != null) {
-            return false;
-        }
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int result = oneArgListener != null ? oneArgListener.hashCode() : 0;
-        result = 31 * result + (noArgListener != null
-                                ? noArgListener.hashCode()
-                                : 0);
-        return result;
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/FacetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/FacetHandler.java
deleted file mode 100644
index dd21b1e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/FacetHandler.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagException;
-import java.io.IOException;
-
-/**
- * Register a named facet on the UIComponent associated with the closest parent
- * UIComponent custom action. <p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/facet.html">tag
- * documentation</a>.
- *
- * @author Jacob Hookom
- * @version $Id: FacetHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class FacetHandler extends TagHandlerImpl
-    implements javax.faces.view.facelets.FacetHandler {
-
-    public static final String KEY = "facelets.FACET_NAME";
-
-    protected final TagAttribute name;
-
-    public FacetHandler(TagConfig config) {
-        super(config);
-        this.name = this.getRequiredAttribute("name");
-    }
-
-    /*
-      * (non-Javadoc)
-      *
-      * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-      *      javax.faces.component.UIComponent)
-      */
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-        if (parent == null) {
-            throw new TagException(this.tag, "Parent UIComponent was null");
-        }
-        parent.getAttributes().put(KEY, getFacetName(ctx));
-        try {
-            this.nextHandler.apply(ctx, parent);
-        } finally {
-            parent.getAttributes().remove(KEY);
-        }
-    }
-
-    // javax.faces.view.facelets.tag.FacetHandler.getFacetName()
-    // implementation
-    public String getFacetName(FaceletContext ctxt) {
-        return this.name.getValue(ctxt);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/LoadBundleHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/LoadBundleHandler.java
deleted file mode 100644
index 37cfc2e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/LoadBundleHandler.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Load a resource bundle localized for the Locale of the current view, and
- * expose it (as a Map) in the request attributes of the current request. <p/>
- * See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/loadBundle.html">tag
- * documentation</a>.
- * 
- * @author Jacob Hookom
- * @version $Id: LoadBundleHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class LoadBundleHandler extends TagHandlerImpl {
-
-    private final static class ResourceBundleMap implements Map {
-        private final static class ResourceEntry implements Map.Entry {
-
-            protected final String key;
-
-            protected final String value;
-
-            public ResourceEntry(String key, String value) {
-                this.key = key;
-                this.value = value;
-            }
-
-            public Object getKey() {
-                return this.key;
-            }
-
-            public Object getValue() {
-                return this.value;
-            }
-
-            public Object setValue(Object value) {
-                throw new UnsupportedOperationException();
-            }
-
-            public int hashCode() {
-                return this.key.hashCode();
-            }
-
-            public boolean equals(Object obj) {
-                return (obj instanceof ResourceEntry && this.hashCode() == obj
-                        .hashCode());
-            }
-        }
-
-        protected final ResourceBundle bundle;
-
-        public ResourceBundleMap(ResourceBundle bundle) {
-            this.bundle = bundle;
-        }
-
-        public void clear() {
-            throw new UnsupportedOperationException();
-        }
-
-        public boolean containsKey(Object key) {
-            try {
-                bundle.getString(key.toString());
-                return true;
-            } catch (MissingResourceException e) {
-                return false;
-            }
-        }
-
-        public boolean containsValue(Object value) {
-            throw new UnsupportedOperationException();
-        }
-
-        public Set entrySet() {
-            Enumeration e = this.bundle.getKeys();
-            Set s = new HashSet();
-            String k;
-            while (e.hasMoreElements()) {
-                k = (String) e.nextElement();
-                s.add(new ResourceEntry(k, this.bundle.getString(k)));
-            }
-            return s;
-        }
-
-        public Object get(Object key) {
-        	try {
-        		return this.bundle.getObject((String) key);
-        	} catch( java.util.MissingResourceException mre ) {
-        		return "???"+key+"???";
-        	}
-        }
-
-        public boolean isEmpty() {
-            return false;
-        }
-
-        public Set keySet() {
-            Enumeration e = this.bundle.getKeys();
-            Set s = new HashSet();
-            while (e.hasMoreElements()) {
-                s.add(e.nextElement());
-            }
-            return s;
-        }
-
-        public Object put(Object key, Object value) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void putAll(Map t) {
-            throw new UnsupportedOperationException();
-        }
-
-        public Object remove(Object key) {
-            throw new UnsupportedOperationException();
-        }
-
-        public int size() {
-            return this.keySet().size();
-        }
-
-        public Collection values() {
-            Enumeration e = this.bundle.getKeys();
-            Set s = new HashSet();
-            while (e.hasMoreElements()) {
-                s.add(this.bundle.getObject((String) e.nextElement()));
-            }
-            return s;
-        }
-    }
-
-    private final TagAttribute basename;
-
-    private final TagAttribute var;
-
-    /**
-     * @param config
-     */
-    public LoadBundleHandler(TagConfig config) {
-        super(config);
-        this.basename = this.getRequiredAttribute("basename");
-        this.var = this.getRequiredAttribute("var");
-    }
-
-    /**
-     * See taglib documentation.
-     * 
-     * @see com.sun.faces.facelets.FaceletHandler#apply(com.sun.faces.facelets.FaceletContext, javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
-        ResourceBundle bundle = null;
-        try {
-            String name = this.basename.getValue(ctx);
-            ClassLoader cl = Thread.currentThread().getContextClassLoader();
-            if (root != null && root.getLocale() != null) {
-                bundle = ResourceBundle.getBundle(name, root.getLocale(), cl);
-            } else {
-                bundle = ResourceBundle
-                        .getBundle(name, Locale.getDefault(), cl);
-            }
-        } catch (Exception e) {
-            throw new TagAttributeException(this.tag, this.basename, e);
-        }
-        ResourceBundleMap map = new ResourceBundleMap(bundle);
-        FacesContext faces = ctx.getFacesContext();
-        faces.getExternalContext().getRequestMap().put(this.var.getValue(ctx),
-                map);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/MetadataHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/MetadataHandler.java
deleted file mode 100644
index e4cd9dd..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/MetadataHandler.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>
- * This is a specialized <code>FacetHandler</code> to enable
- * <code>f:metadata</code> support.
- *
- * </p>
- */
-public class MetadataHandler extends TagHandlerImpl {
-
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public MetadataHandler(TagConfig config) {
-        super(config);
-    }
-
-
-    // ------------------------------------------------- Methods from TagHandler
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-
-        Util.notNull("parent", parent);
-        UIViewRoot root;
-        if (parent instanceof UIViewRoot) {
-            root = (UIViewRoot) parent;
-        } else {
-            root = ctx.getFacesContext().getViewRoot();
-        }
-        if (root == null) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE, "jsf.metadata.uiviewroot.unavailable");
-            }
-            return;
-        }
-
-        UIComponent facetComponent = null;
-        if (root.getFacetCount() > 0) {
-              facetComponent = root.getFacets().get(UIViewRoot.METADATA_FACET_NAME);
-        }
-        if (facetComponent == null) {
-            root.getAttributes().put(FacetHandler.KEY,
-                                       UIViewRoot.METADATA_FACET_NAME);
-            try {
-                this.nextHandler.apply(ctx, root);
-            } finally {
-                root.getAttributes().remove(FacetHandler.KEY);
-            }
-            facetComponent = root.getFacets().get(UIViewRoot.METADATA_FACET_NAME);
-            if (facetComponent != null && !(facetComponent instanceof UIPanel)) {
-                Application app = ctx.getFacesContext().getApplication();
-                UIComponent panelGroup = app.createComponent(UIPanel.COMPONENT_TYPE);
-                panelGroup.getChildren().add(facetComponent);
-                root.getFacets().put(UIViewRoot.METADATA_FACET_NAME, panelGroup);
-                facetComponent = panelGroup;
-                facetComponent.setId(UIViewRoot.METADATA_FACET_NAME);
-            }
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/PhaseListenerHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/PhaseListenerHandler.java
deleted file mode 100644
index d7d1b1d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/PhaseListenerHandler.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.application.view.FaceletViewHandlingStrategy;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-import com.sun.faces.facelets.util.ReflectionUtil;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.view.facelets.*;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.List;
-
-public class PhaseListenerHandler extends TagHandlerImpl {
-
-    private final static class LazyPhaseListener implements PhaseListener,
-                                                            Serializable {
-
-        private static final long serialVersionUID = -6496143057319213401L;
-
-        private final String type;
-
-        private final ValueExpression binding;
-
-        public LazyPhaseListener(String type, ValueExpression binding) {
-            this.type = type;
-            this.binding = binding;
-        }
-
-        private PhaseListener getInstance() {
-            PhaseListener instance = null;
-            FacesContext faces = FacesContext.getCurrentInstance();
-            if (faces == null) {
-                return null;
-            }
-            if (this.binding != null) {
-                instance = (PhaseListener) binding.getValue(faces
-                      .getELContext());
-            }
-            if (instance == null && type != null) {
-                try {
-                    instance = (PhaseListener) ReflectionUtil.forName(
-                          this.type).newInstance();
-                } catch (Exception e) {
-                    throw new AbortProcessingException(
-                          "Couldn't Lazily instantiate PhaseListener", e);
-                }
-                if (this.binding != null) {
-                    binding.setValue(faces.getELContext(), instance);
-                }
-            }
-            return instance;
-        }
-
-        public void afterPhase(PhaseEvent event) {
-            PhaseListener pl = this.getInstance();
-            if (pl != null) {
-                pl.afterPhase(event);
-            }
-        }
-
-        public void beforePhase(PhaseEvent event) {
-            PhaseListener pl = this.getInstance();
-            if (pl != null) {
-                pl.beforePhase(event);
-            }
-        }
-
-        public PhaseId getPhaseId() {
-            PhaseListener pl = this.getInstance();
-            return (pl != null) ? pl.getPhaseId() : PhaseId.ANY_PHASE;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-
-            if (this == o) {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass()) {
-                return false;
-            }
-
-            LazyPhaseListener that = (LazyPhaseListener) o;
-
-            if (binding != null
-                ? !binding.equals(that.binding)
-                : that.binding != null) {
-                return false;
-            }
-            if (type != null ? !type.equals(that.type) : that.type != null) {
-                return false;
-            }
-
-            return true;
-
-        }
-
-        @Override
-        public int hashCode() {
-
-            int result = type != null ? type.hashCode() : 0;
-            result = 31 * result + (binding != null ? binding.hashCode() : 0);
-            return result;
-
-        }
-
-    }
-
-    private final TagAttribute binding;
-
-    private final String listenerType;
-
-    public PhaseListenerHandler(TagConfig config) {
-        super(config);
-        TagAttribute type = this.getAttribute("type");
-        this.binding = this.getAttribute("binding");
-        if (type != null) {
-            if (!type.isLiteral()) {
-                throw new TagAttributeException(type,
-                                                "Must be a literal class name of type PhaseListener");
-            } else {
-                // test it out
-                try {
-                    ReflectionUtil.forName(type.getValue());
-                } catch (ClassNotFoundException e) {
-                    throw new TagAttributeException(type,
-                                                    "Couldn't qualify PhaseListener", e);
-                }
-            }
-            this.listenerType = type.getValue();
-        } else {
-            this.listenerType = null;
-        }
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-          throws IOException {
-        if (ComponentHandler.isNew(parent)) {
-            UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
-            if (root == null) {
-                throw new TagException(this.tag, "UIViewRoot not available");
-            }
-            ValueExpression b = null;
-            if (this.binding != null) {
-                b = this.binding.getValueExpression(ctx, PhaseListener.class);
-            }
-
-            PhaseListener pl = new LazyPhaseListener(this.listenerType, b);
-
-            // special handling for UIViewRoot since ComponentHandler.isNew()
-            // will always return true
-            if (parent instanceof UIViewRoot) {
-                List<PhaseListener> listeners = root.getPhaseListeners();
-                if (!listeners.contains(pl)) {
-                    root.addPhaseListener(pl);
-                }
-            } else {
-                root.addPhaseListener(pl);
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/SetPropertyActionListenerHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/SetPropertyActionListenerHandler.java
deleted file mode 100644
index 452f9c5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/SetPropertyActionListenerHandler.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.el.LegacyValueBinding;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.faces.component.ActionSource;
-import javax.faces.component.ActionSource2;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.view.facelets.*;
-import java.io.IOException;
-import java.io.Serializable;
-import javax.faces.application.Resource;
-import javax.faces.view.ActionSource2AttachedObjectHandler;
-
-public class SetPropertyActionListenerHandler extends TagHandlerImpl implements ActionSource2AttachedObjectHandler {
-
-    private final TagAttribute value;
-
-    private final TagAttribute target;
-
-    public SetPropertyActionListenerHandler(TagConfig config) {
-        super(config);
-        this.value = this.getRequiredAttribute("value");
-        this.target = this.getRequiredAttribute("target");
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-
-        if (null == parent || !(ComponentHandler.isNew(parent))) {
-            return;
-        }
-        if (parent instanceof ActionSource) {
-            applyAttachedObject(ctx.getFacesContext(), parent);
-        } else if (UIComponent.isCompositeComponent(parent)) {
-            if (null == getFor()) {
-                // PENDING(): I18N
-                throw new TagException(this.tag,
-                                       "actionListener tags nested within composite components must have a non-null \"for\" attribute");
-            }
-            // Allow the composite component to know about the target
-            // component.
-            CompositeComponentTagHandler.getAttachedObjectHandlers(parent)
-                  .add(this);
-
-        } else {
-            throw new TagException(this.tag,
-                                   "Parent is not of type ActionSource, type is: "
-                                   + parent);
-        }
-
-    }
-
-    public void applyAttachedObject(FacesContext context, UIComponent parent) {
-        FaceletContext ctx = (FaceletContext) context.getAttributes()
-              .get(FaceletContext.FACELET_CONTEXT_KEY);
-
-        ActionSource src = (ActionSource) parent;
-        ValueExpression valueExpr = this.value.getValueExpression(ctx,
-                    Object.class);
-        ValueExpression targetExpr = this.target.getValueExpression(
-                ctx, Object.class);
-
-        ActionListener listener;
-
-        if (src instanceof ActionSource2) {
-            listener = new SetPropertyListener(valueExpr, targetExpr);
-        } else {
-            listener = new LegacySetPropertyListener(
-                    new LegacyValueBinding(valueExpr),
-                    new LegacyValueBinding(targetExpr));
-        }
-
-        src.addActionListener(listener);
-    }
-
-
-    public String getFor() {
-        String result = null;
-        TagAttribute attr = this.getAttribute("for");
-
-        if (null != attr) {
-            result = attr.getValue();
-        }
-        return result;
-    }
-
-
-
-    private static class LegacySetPropertyListener implements ActionListener,
-            Serializable {
-
-        private ValueBinding value;
-
-        private ValueBinding target;
-
-        public LegacySetPropertyListener() {
-        };
-
-        public LegacySetPropertyListener(ValueBinding value, ValueBinding target) {
-            this.value = value;
-            this.target = target;
-        }
-
-        public void processAction(ActionEvent evt)
-                throws AbortProcessingException {
-            FacesContext faces = FacesContext.getCurrentInstance();
-            Object valueObj = this.value.getValue(faces);
-            this.target.setValue(faces, valueObj);
-        }
-
-    }
-
-    private static class SetPropertyListener implements ActionListener,
-            Serializable {
-
-        private ValueExpression value;
-
-        private ValueExpression target;
-
-        public SetPropertyListener() {
-        };
-
-        public SetPropertyListener(ValueExpression value, ValueExpression target) {
-            this.value = value;
-            this.target = target;
-        }
-
-        public void processAction(ActionEvent evt)
-                throws AbortProcessingException {
-            FacesContext faces = FacesContext.getCurrentInstance();
-            ELContext el = faces.getELContext();
-            Object valueObj = this.value.getValue(el);
-             if (valueObj != null) {
-                ExpressionFactory factory =
-                      faces.getApplication().getExpressionFactory();
-                valueObj = factory.coerceToType(valueObj, target.getType(el));
-            }
-            this.target.setValue(el, valueObj);
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ValidateDelegateHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ValidateDelegateHandler.java
deleted file mode 100644
index a98192a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ValidateDelegateHandler.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import javax.faces.view.facelets.*;
-
-/**
- * Register a named Validator instance on the UIComponent associated with the
- * closest parent UIComponent custom action.<p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/validator.html">tag
- * documentation</a>.
- * 
- * @author Jacob Hookom
- * @version $Id: ValidateDelegateHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class ValidateDelegateHandler extends ValidatorHandler {
-
-    private final TagAttribute validatorId;
-
-    public ValidateDelegateHandler(ValidatorConfig config) {
-        super(config);
-        this.validatorId = this.getAttribute("validatorId");
-    }
-
-    /**
-     * Resolve the validator id from the attribute "validatorId", which is then used to create a new
-     * Validator instance from the Application.
-     * 
-     * @see javax.faces.application.Application#createValidator(java.lang.String)
-     * @see com.sun.faces.facelets.tag.jsf.ValidatorHandler#getValidator(com.sun.faces.facelets.FaceletContext)
-     */
-    protected String getValidator(FaceletContext ctx) {
-        return ((validatorId != null) ? this.validatorId.getValue(ctx) : null);
-    }
-
-    protected MetaRuleset createMetaRuleset(Class type) {
-        return super.createMetaRuleset(type).ignoreAll();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ValueChangeListenerHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ValueChangeListenerHandler.java
deleted file mode 100644
index dd84aa0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ValueChangeListenerHandler.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler;
-import com.sun.faces.facelets.util.ReflectionUtil;
-
-import javax.el.ValueExpression;
-import javax.faces.application.Resource;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.view.EditableValueHolderAttachedObjectHandler;
-import javax.faces.view.facelets.*;
-import java.io.IOException;
-import java.io.Serializable;
-
-/**
- * Register an ValueChangeListener instance on the UIComponent associated with
- * the closest parent UIComponent custom action.<p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/valueChangeListener.html">tag
- * documentation</a>.
- * 
- * @author Jacob Hookom
- */
-public final class ValueChangeListenerHandler extends TagHandlerImpl implements EditableValueHolderAttachedObjectHandler {
-
-    private static class LazyValueChangeListener implements
-                                                 ValueChangeListener,
-                                                 Serializable {
-
-        private static final long serialVersionUID = 7613811124326963180L;
-
-        private final String type;
-
-        private final ValueExpression binding;
-
-        public LazyValueChangeListener(String type, ValueExpression binding) {
-            this.type = type;
-            this.binding = binding;
-        }
-
-        public void processValueChange(ValueChangeEvent event)
-              throws AbortProcessingException {
-            ValueChangeListener instance = null;
-            FacesContext faces = FacesContext.getCurrentInstance();
-            if (faces == null) {
-                return;
-            }
-            if (this.binding != null) {
-                instance = (ValueChangeListener) binding
-                      .getValue(faces.getELContext());
-            }
-            if (instance == null && this.type != null) {
-                try {
-                    instance = (ValueChangeListener) ReflectionUtil
-                          .forName(this.type).newInstance();
-                } catch (Exception e) {
-                    throw new AbortProcessingException(
-                          "Couldn't Lazily instantiate ValueChangeListener",
-                          e);
-                }
-                if (this.binding != null) {
-                    binding.setValue(faces.getELContext(), instance);
-                }
-            }
-            if (instance != null) {
-                instance.processValueChange(event);
-            }
-        }
-    }
-
-    private final TagAttribute binding;
-
-    private final String listenerType;
-
-    public ValueChangeListenerHandler(TagConfig config) {
-        super(config);
-        this.binding = this.getAttribute("binding");
-        TagAttribute type = this.getAttribute("type");
-        if (type != null) {
-            if (!type.isLiteral()) {
-                throw new TagAttributeException(type,
-                                                "Must be a literal class name of type ValueChangeListener");
-            } else {
-                // test it out
-                try {
-                    ReflectionUtil.forName(type.getValue());
-                } catch (ClassNotFoundException e) {
-                    throw new TagAttributeException(type,
-                                                    "Couldn't qualify ValueChangeListener", e);
-                }
-            }
-            this.listenerType = type.getValue();
-        } else {
-            this.listenerType = null;
-        }
-    }
-
-    /**
-     * See taglib documentation.
-     *
-     * @see com.sun.faces.facelets.FaceletHandler#apply(com.sun.faces.facelets.FaceletContext, javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        // only process if it's been created
-        if (parent == null || !(ComponentHandler.isNew(parent))) {
-            return;
-        }
-
-        if (parent instanceof EditableValueHolder) {
-            applyAttachedObject(ctx.getFacesContext(), parent);
-        } else if (parent.getAttributes().containsKey(Resource.COMPONENT_RESOURCE_KEY)) {
-            // Allow the composite component to know about the target
-            // component.
-            CompositeComponentTagHandler.getAttachedObjectHandlers(parent).add(this);
-        } else {
-            throw new TagException(this.tag,
-                    "Parent is not of type EditableValueHolder, type is: " + parent);
-        }
-    }
-        
-    public void applyAttachedObject(FacesContext context, UIComponent parent) {
-        FaceletContext ctx = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
-        EditableValueHolder evh = (EditableValueHolder) parent;
-        ValueExpression b = null;
-        if (this.binding != null) {
-            b = this.binding.getValueExpression(ctx, ValueChangeListener.class);
-        }
-        ValueChangeListener listener = new LazyValueChangeListener(
-                this.listenerType, b);
-        evh.addValueChangeListener(listener);
-    }
-        
-    public String getFor() {
-        String result = null;
-        TagAttribute attr = this.getAttribute("for");
-
-        if (null != attr) {
-            result = attr.getValue();
-        }
-        return result;
-
-    }
-        
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/VerbatimHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/VerbatimHandler.java
deleted file mode 100644
index 9fee796..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/VerbatimHandler.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TextHandler;
-import java.util.Iterator;
-
-/**
- * Handler for f:verbatim
- * 
- * @author Adam Winer
- */
-public final class VerbatimHandler extends ComponentHandler {
-    public VerbatimHandler(ComponentConfig config) {
-        super(config);
-    }
-
-    @Override
-    public void onComponentCreated(FaceletContext ctx, UIComponent c, UIComponent parent) {
-        StringBuffer content = new StringBuffer();
-        Iterator iter = TagHandlerImpl.findNextByType(this.nextHandler,
-                TextHandler.class);
-        while (iter.hasNext()) {
-            TextHandler text = (TextHandler) iter.next();
-            content.append(text.getText(ctx));
-        }
-
-        c.getAttributes().put("value", content.toString());
-        c.getAttributes().put("escape", Boolean.FALSE);
-        c.setTransient(true);
-    }
-
-    @Override
-    public void applyNextHandler(FaceletContext ctx, UIComponent c) {
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ViewHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ViewHandler.java
deleted file mode 100644
index 4eaf6d6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/core/ViewHandler.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf.core;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.context.StateContext;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-
-import javax.el.MethodExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.event.PhaseEvent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-import javax.faces.context.FacesContext;
-
-/**
- * Container for all JavaServer Faces core and custom component actions used on
- * a page. <p/> See <a target="_new"
- * href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/view.html">tag
- * documentation</a>.
- * 
- * @author Jacob Hookom
- * @version $Id: ViewHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class ViewHandler extends TagHandlerImpl {
-
-    private final static Class[] LISTENER_SIG = new Class[] { PhaseEvent.class };
-
-    private final TagAttribute locale;
-
-    private final TagAttribute renderKitId;
-    
-    private final TagAttribute contentType;
-    
-    private final TagAttribute encoding;
-
-    private final TagAttribute beforePhase;
-
-    private final TagAttribute afterPhase;
-
-    /**
-     * @param config
-     */
-    public ViewHandler(TagConfig config) {
-        super(config);
-        this.locale = this.getAttribute("locale");
-        this.renderKitId = this.getAttribute("renderKitId");
-        this.contentType = this.getAttribute("contentType");
-        this.encoding = this.getAttribute("encoding");
-        TagAttribute testForNull = this.getAttribute("beforePhase");
-        this.beforePhase = (null == testForNull) ? 
-                         this.getAttribute("beforePhaseListener") : testForNull;
-        testForNull = this.getAttribute("afterPhase");
-        this.afterPhase = (null == testForNull) ?
-                         this.getAttribute("afterPhaseListener") : testForNull;
-    }
-
-    /**
-     * See taglib documentation.
-     * 
-     * @see com.sun.faces.facelets.FaceletHandler#apply(com.sun.faces.facelets.FaceletContext, javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        UIViewRoot root = ComponentSupport.getViewRoot(ctx, parent);
-        Object partialStateSavingVal = null;
-        if (root != null) {
-            if (this.locale != null) {
-                root.setLocale(ComponentSupport.getLocale(ctx,
-                        this.locale));
-            }
-            if (this.renderKitId != null) {
-                String v = this.renderKitId.getValue(ctx);
-                root.setRenderKitId(v);
-            }
-            if (this.contentType != null) {
-                String v = this.contentType.getValue(ctx);
-                ctx.getFacesContext().getAttributes().put("facelets.ContentType", v);
-            }
-            if (this.encoding != null) {
-                String v = this.encoding.getValue(ctx);
-                ctx.getFacesContext().getAttributes().put("facelets.Encoding", v);
-            }
-            if (this.beforePhase != null) {
-                MethodExpression m = this.beforePhase
-                        .getMethodExpression(ctx, null, LISTENER_SIG);
-                root.setBeforePhaseListener(m);
-            }
-            if (this.afterPhase != null) {
-                MethodExpression m = this.afterPhase
-                        .getMethodExpression(ctx, null, LISTENER_SIG);
-                root.setAfterPhaseListener(m);
-            }
-            FacesContext context = ctx.getFacesContext();
-            if (StateContext.getStateContext(context).partialStateSaving((String)context.getAttributes().get(RIConstants.VIEWID_KEY_NAME))) {
-                root.markInitialState();
-            }
-        }
-
-        this.nextHandler.apply(ctx, parent);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/AbstractHtmlLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/AbstractHtmlLibrary.java
deleted file mode 100644
index 29d9a73..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/AbstractHtmlLibrary.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import com.sun.faces.facelets.tag.AbstractTagLibrary;
-
-/**
- * @author Jacob Hookom
- */
-public abstract class AbstractHtmlLibrary extends AbstractTagLibrary {
-
-    /**
-     * @param namespace
-     */
-    public AbstractHtmlLibrary(String namespace) {
-        super(namespace);
-    }
-
-    public void addHtmlComponent(String name, String componentType,
-            String rendererType) {
-        super.addComponent(name, componentType, rendererType,
-                HtmlComponentHandler.class);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ComponentResourceDelegate.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ComponentResourceDelegate.java
deleted file mode 100644
index 27e8a84..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ComponentResourceDelegate.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import com.sun.faces.facelets.tag.jsf.ComponentSupport;
-import com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributes;
-import java.util.List;
-
-import static com.sun.faces.facelets.tag.jsf.ComponentSupport.MARK_CREATED;
-
-/**
- * This class overrides key methods from <code>ComponentTagHandlerDelegateImpl</code>
- * in order to properly find existing component resources as well as properly handling
- * the case when this concrete implementations of this class are applied more than
- * once for a particular request.
- */
-public abstract class ComponentResourceDelegate extends ComponentTagHandlerDelegateImpl {
-
-    private TagAttributes attributes;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ComponentResourceDelegate(ComponentHandler owner) {
-
-        super(owner);
-        this.attributes = owner.getTag().getAttributes();
-
-    }
-
-
-    // ----------------------------------------- Methods from TagHandlerDelegate
-
-
-    @Override
-    protected UIComponent findChild(FaceletContext ctx,
-                                    UIComponent parent,
-                                    String tagId) {
-
-        // If we have a target for this particular component, we need to
-        // query the UIViewRoot's component resources, otherwise defer
-        // to our super class.
-        String target = getLocationTarget(ctx);
-        if (target != null) {
-            final UIViewRoot root = ctx.getFacesContext().getViewRoot();
-            List<UIComponent> resources =
-                  root.getComponentResources(ctx.getFacesContext(), target);
-            for (UIComponent c : resources) {
-                String cid = (String) c.getAttributes().get(MARK_CREATED);
-                if (tagId.equals(cid)) {
-                    return c;
-                }
-            }
-            return null;
-        } else {
-            return super.findChild(ctx, parent, tagId);
-        }
-
-    }
-
-
-    @Override protected void addComponentToView(FaceletContext ctx,
-                                                UIComponent parent,
-                                                UIComponent c,
-                                                boolean componentFound) {
-
-        if (!componentFound) {
-            // default to the existing logic which will add the component
-            // in-place.  An event will be fired to move the component
-            // as a UIViewRoot component resource
-            super.addComponentToView(ctx, parent, c, componentFound);
-        } else {
-            // when re-applying we supress events for existing components,
-            // so if we simply relied on the default logic, the resources
-            // wouldn't be be moved.  We'll do it manually instead.
-            String target = getLocationTarget(ctx);
-            if (target != null) {
-                final UIViewRoot root = ctx.getFacesContext().getViewRoot();
-                root.addComponentResource(ctx.getFacesContext(), c, target);
-            } else {
-                super.addComponentToView(ctx, parent, c, componentFound);
-            }
-        }
-
-    }
-
-
-
-
-    protected void doOrphanedChildCleanup(FaceletContext ctx,
-                                          UIComponent parent,
-                                          UIComponent c) {
-
-        FacesContext context = ctx.getFacesContext();
-        boolean suppressEvents =
-              ComponentSupport.suppressViewModificationEvents(context);
-        if (suppressEvents) {
-            // if the component has already been found, it will be removed
-            // and added back to the view.  We don't want to publish events
-            // for this case.
-            context.setProcessingEvents(false);
-        }
-
-        ComponentSupport.finalizeForDeletion(c);
-        UIViewRoot root = context.getViewRoot();
-        root.removeComponentResource(context, c, getLocationTarget(ctx));
-
-        if (suppressEvents) {
-            // restore the original state
-            context.setProcessingEvents(true);
-        }
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected abstract String getLocationTarget(FaceletContext ctx);
-
-
-    protected TagAttribute getAttribute(String name) {
-
-        return attributes.get(name);
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlComponentHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlComponentHandler.java
deleted file mode 100644
index aa368a4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlComponentHandler.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.MetaRuleset;
-
-/**
- * @author Jacob Hookom
- * @version $Id: HtmlComponentHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public class HtmlComponentHandler extends ComponentHandler {
-
-    /**
-     * @param config
-     */
-    public HtmlComponentHandler(ComponentConfig config) {
-        super(config);
-    }
-
-    protected MetaRuleset createMetaRuleset(Class type) {
-        return super.createMetaRuleset(type).alias("class", "styleClass");
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlDecorator.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlDecorator.java
deleted file mode 100644
index 4b98fb3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlDecorator.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import com.sun.faces.facelets.tag.TagAttributesImpl;
-
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributes;
-import javax.faces.view.facelets.TagDecorator;
-
-
-/**
- * @author Jacob Hookom
- */
-public final class HtmlDecorator implements TagDecorator {
-
-    public final static String XhtmlNamespace = "http://www.w3.org/1999/xhtml";
-
-    public final static HtmlDecorator Instance = new HtmlDecorator();
-    
-    /**
-     * 
-     */
-    public HtmlDecorator() {
-        super();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.tag.TagDecorator#decorate(com.sun.facelets.tag.Tag)
-     */
-    public Tag decorate(Tag tag) {
-        if (XhtmlNamespace.equals(tag.getNamespace())) {
-            String n = tag.getLocalName();
-            if ("a".equals(n)) {
-                return new Tag(tag.getLocation(), HtmlLibrary.Namespace,
-                        "commandLink", tag.getQName(), tag.getAttributes());
-            }
-            if ("form".equals(n)) {
-                return new Tag(tag.getLocation(), HtmlLibrary.Namespace,
-                        "form", tag.getQName(), tag.getAttributes());
-            }
-            if ("input".equals(n)) {
-                TagAttribute attr = tag.getAttributes().get("type");
-                if (attr != null) {
-                    String t = attr.getValue();
-                    TagAttributes na = removeType(tag.getAttributes());
-                    if ("text".equals(t)) {
-                        return new Tag(tag.getLocation(),
-                                HtmlLibrary.Namespace, "inputText", tag
-                                        .getQName(), na);
-                    }
-                    if ("password".equals(t)) {
-                        return new Tag(tag.getLocation(),
-                                HtmlLibrary.Namespace, "inputSecret", tag
-                                        .getQName(), na);
-                    }
-                    if ("hidden".equals(t)) {
-                        return new Tag(tag.getLocation(),
-                                HtmlLibrary.Namespace, "inputHidden", tag
-                                        .getQName(), na);
-                    }
-                    if ("submit".equals(t)) {
-                        return new Tag(tag.getLocation(),
-                                HtmlLibrary.Namespace, "commandButton", tag
-                                        .getQName(), na);
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    private TagAttributes removeType(TagAttributes attrs) {
-        TagAttribute[] o = attrs.getAll();
-        TagAttribute[] a = new TagAttribute[o.length - 1];
-        int p = 0;
-        for (int i = 0; i < o.length; i++) {
-            if (!"type".equals(o[i].getLocalName())) {
-                a[p++] = o[i];
-            }
-        }
-        return new TagAttributesImpl(a);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlLibrary.java
deleted file mode 100644
index 37da0e5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/HtmlLibrary.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-/**
- * @author Jacob Hookom
- */
-public final class HtmlLibrary extends AbstractHtmlLibrary {
-
-    public final static String Namespace = "http://java.sun.com/jsf/html";
-
-    public final static HtmlLibrary Instance = new HtmlLibrary();
-
-    public HtmlLibrary() {
-        super(Namespace);
-
-        this.addHtmlComponent("body", "javax.faces.Output",
-                "javax.faces.Body");
-
-        this.addHtmlComponent("button", "javax.faces.HtmlOutcomeTargetButton",
-                "javax.faces.Button");
-
-        this.addHtmlComponent("column", "javax.faces.Column", null);
-
-        this.addHtmlComponent("commandButton", "javax.faces.HtmlCommandButton",
-                "javax.faces.Button");
-
-        this.addHtmlComponent("commandLink", "javax.faces.HtmlCommandLink",
-                "javax.faces.Link");
-
-        this.addHtmlComponent("dataTable", "javax.faces.HtmlDataTable",
-                "javax.faces.Table");
-
-        this.addHtmlComponent("form", "javax.faces.HtmlForm",
-                "javax.faces.Form");
-
-        this.addHtmlComponent("graphicImage", "javax.faces.HtmlGraphicImage",
-                "javax.faces.Image");
-
-        this.addHtmlComponent("head", "javax.faces.Output",
-                "javax.faces.Head");
-
-        this.addHtmlComponent("inputHidden", "javax.faces.HtmlInputHidden",
-                "javax.faces.Hidden");
-
-        this.addHtmlComponent("inputSecret", "javax.faces.HtmlInputSecret",
-                "javax.faces.Secret");
-
-        this.addHtmlComponent("inputText", "javax.faces.HtmlInputText",
-                "javax.faces.Text");
-
-        this.addHtmlComponent("inputTextarea", "javax.faces.HtmlInputTextarea",
-                "javax.faces.Textarea");
-
-        this.addHtmlComponent("link", "javax.faces.HtmlOutcomeTargetLink",
-                "javax.faces.Link");
-
-        this.addHtmlComponent("message", "javax.faces.HtmlMessage",
-                "javax.faces.Message");
-
-        this.addHtmlComponent("messages", "javax.faces.HtmlMessages",
-                "javax.faces.Messages");
-
-        this.addHtmlComponent("outputFormat", "javax.faces.HtmlOutputFormat",
-                "javax.faces.Format");
-
-        this.addHtmlComponent("outputLabel", "javax.faces.HtmlOutputLabel",
-                "javax.faces.Label");
-
-        this.addHtmlComponent("outputLink", "javax.faces.HtmlOutputLink",
-                "javax.faces.Link");
-
-        this.addHtmlComponent("outputText", "javax.faces.HtmlOutputText",
-                "javax.faces.Text");
-        
-        this.addComponent("outputScript",
-                          "javax.faces.Output",
-                          "javax.faces.resource.Script",
-                          ScriptResourceHandler.class);
-
-        this.addComponent("outputStylesheet",
-                          "javax.faces.Output",
-                          "javax.faces.resource.Stylesheet",
-                          StylesheetResourceHandler.class);
-
-        this.addHtmlComponent("panelGrid", "javax.faces.HtmlPanelGrid",
-                "javax.faces.Grid");
-
-        this.addHtmlComponent("panelGroup", "javax.faces.HtmlPanelGroup",
-                "javax.faces.Group");
-
-        this.addHtmlComponent("selectBooleanCheckbox",
-                              "javax.faces.HtmlSelectBooleanCheckbox",
-                              "javax.faces.Checkbox");
-
-        this.addHtmlComponent("selectManyCheckbox",
-                "javax.faces.HtmlSelectManyCheckbox", "javax.faces.Checkbox");
-
-        this.addHtmlComponent("selectManyListbox",
-                "javax.faces.HtmlSelectManyListbox", "javax.faces.Listbox");
-
-        this.addHtmlComponent("selectManyMenu",
-                "javax.faces.HtmlSelectManyMenu", "javax.faces.Menu");
-
-        this.addHtmlComponent("selectOneListbox",
-                "javax.faces.HtmlSelectOneListbox", "javax.faces.Listbox");
-
-        this.addHtmlComponent("selectOneMenu", "javax.faces.HtmlSelectOneMenu",
-                "javax.faces.Menu");
-
-        this.addHtmlComponent("selectOneRadio",
-                "javax.faces.HtmlSelectOneRadio", "javax.faces.Radio");
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ScriptResourceDelegate.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ScriptResourceDelegate.java
deleted file mode 100644
index a6b91d0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ScriptResourceDelegate.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-
-/**
- * <code>ComponentResourceDelegate</code> for script references.
- */
-public class ScriptResourceDelegate extends ComponentResourceDelegate {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ScriptResourceDelegate(ComponentHandler owner) {
-
-        super(owner);
-
-    }
-
-
-    // ----------------------------------- Methods from ComponentResourceDelegate
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @return the current value of the "target" attribute of the component
-     *  associated with this delegate
-     */
-    @Override protected String getLocationTarget(FaceletContext ctx) {
-
-        TagAttribute attr = getAttribute("target");
-        return ((attr != null) ? attr.getValue(ctx) : null);
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ScriptResourceHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ScriptResourceHandler.java
deleted file mode 100644
index 37621e0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/ScriptResourceHandler.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-
-/**
- * <code>ComponentHandler</code> for <code>h:outputScript</code> references.
- */
-public class ScriptResourceHandler extends ComponentHandler {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ScriptResourceHandler(ComponentConfig config) {
-
-        super(config);
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceDelegate.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceDelegate.java
deleted file mode 100644
index b02d6c2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceDelegate.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-
-/**
- * <code>ComponentResourceDelegate</code> for stylesheet references.
- */
-public class StylesheetResourceDelegate extends ComponentResourceDelegate {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public StylesheetResourceDelegate(ComponentHandler owner) {
-        super(owner);
-    }
-
-
-    // ----------------------------------- Methods from ComponentResourceDelegate
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @return <code>head</code> as external stylesheet references
-     *  are only valid in the head of a document, this method returns
-     *  <code>head</code>
-     */
-    @Override protected String getLocationTarget(FaceletContext ctx) {
-
-        return "head";
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceHandler.java
deleted file mode 100644
index e59f28b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/StylesheetResourceHandler.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jsf.html;
-
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-
-/**
- * <code>ComponentHandler</code> for <code>h:outputStylesheet</code> references.
- */
-public class StylesheetResourceHandler extends ComponentHandler {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public StylesheetResourceHandler(ComponentConfig config) {
-
-        super(config);
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/package.html b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/package.html
deleted file mode 100644
index 458cc26..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jsf/html/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-Tag Library for <b><a target="_new" href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/h/tld-summary.html">http://java.sun.com/jsf/html</a></b>.
-See JSF HTML Tag Javadocs for attributes/functionality.
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/CatchHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/CatchHandler.java
deleted file mode 100644
index cf90b6b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/CatchHandler.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- */
-public final class CatchHandler extends TagHandlerImpl {
-
-    private final TagAttribute var;
-
-    /**
-     * @param config
-     */
-    public CatchHandler(TagConfig config) {
-        super(config);
-        this.var = this.getAttribute("var");
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        try {
-            this.nextHandler.apply(ctx, parent);
-        } catch (Exception e) {
-            if (this.var != null) {
-                ctx.setAttribute(this.var.getValue(ctx), e);
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseHandler.java
deleted file mode 100644
index 6ceb590..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseHandler.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * @author Jacob Hookom
- */
-public final class ChooseHandler extends TagHandlerImpl {
-    
-    private final ChooseOtherwiseHandler otherwise;
-    private final ChooseWhenHandler[] when;
-    
-    public ChooseHandler(TagConfig config) {
-        super(config);
-        
-        List whenList = new ArrayList();
-        Iterator itr = this.findNextByType(ChooseWhenHandler.class);
-        while (itr.hasNext()) {
-            whenList.add(itr.next());
-        }
-        if (whenList.isEmpty()) {
-            throw new TagException(this.tag, "Choose Tag must have one or more When Tags");
-        }
-        this.when = (ChooseWhenHandler[]) whenList.toArray(new ChooseWhenHandler[whenList.size()]);
-        
-        itr = this.findNextByType(ChooseOtherwiseHandler.class);
-        if (itr.hasNext()) {
-            this.otherwise = (ChooseOtherwiseHandler) itr.next();
-        } else {
-            this.otherwise = null;
-        }
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        for (int i = 0; i < this.when.length; i++) {
-            if (this.when[i].isTestTrue(ctx)) {
-                this.when[i].apply(ctx, parent);
-                return;
-            }
-        }
-        if (this.otherwise != null) {
-            this.otherwise.apply(ctx, parent);
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseOtherwiseHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseOtherwiseHandler.java
deleted file mode 100644
index 34a4251..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseOtherwiseHandler.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- */
-public final class ChooseOtherwiseHandler extends TagHandlerImpl {
-
-    public ChooseOtherwiseHandler(TagConfig config) {
-        super(config);
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        this.nextHandler.apply(ctx, parent);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseWhenHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseWhenHandler.java
deleted file mode 100644
index 5c02b56..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ChooseWhenHandler.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- */
-public final class ChooseWhenHandler extends TagHandlerImpl {
-
-    private final TagAttribute test;
-    
-    public ChooseWhenHandler(TagConfig config) {
-        super(config);
-        this.test = this.getRequiredAttribute("test");
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        this.nextHandler.apply(ctx, parent);
-    }
-    
-    public boolean isTestTrue(FaceletContext ctx) {
-        return this.test.getBoolean(ctx);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ForEachHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ForEachHandler.java
deleted file mode 100644
index f24f37e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/ForEachHandler.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.el.ValueExpression;
-import javax.el.VariableMapper;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.util.*;
-
-/**
- * @author Jacob Hookom
- * @author Andrew Robinson
- */
-public final class ForEachHandler extends TagHandlerImpl {
-
-    private static class ArrayIterator implements Iterator {
-
-        protected final Object array;
-
-        protected int i;
-
-        protected final int len;
-
-        public ArrayIterator(Object src) {
-            this.i = 0;
-            this.array = src;
-            this.len = Array.getLength(src);
-        }
-
-        public boolean hasNext() {
-            return this.i < this.len;
-        }
-
-        public Object next() {
-            try {
-                return Array.get(this.array, this.i++);
-            } catch (ArrayIndexOutOfBoundsException ioob) {
-                throw new NoSuchElementException();
-            }
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    private final TagAttribute begin;
-
-    private final TagAttribute end;
-
-    private final TagAttribute items;
-
-    private final TagAttribute step;
-
-    private final TagAttribute tranzient;
-
-    private final TagAttribute var;
-
-    private final TagAttribute varStatus;
-
-    /**
-     * @param config
-     */
-    public ForEachHandler(TagConfig config) {
-        super(config);
-        this.items = this.getAttribute("items");
-        this.var = this.getAttribute("var");
-        this.begin = this.getAttribute("begin");
-        this.end = this.getAttribute("end");
-        this.step = this.getAttribute("step");
-        this.varStatus = this.getAttribute("varStatus");
-        this.tranzient = this.getAttribute("transient");
-
-        if (this.items == null && this.begin != null && this.end == null) {
-            throw new TagAttributeException(
-                    this.tag,
-                    this.begin,
-                    "If the 'items' attribute is not specified, but the 'begin' attribute is, then the 'end' attribute is required");
-        }
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        
-        int s = this.getBegin(ctx);
-        int e = this.getEnd(ctx);
-        int m = this.getStep(ctx);
-        Integer sO = this.begin != null ? s : null;
-        Integer eO = this.end != null ? e : null;
-        Integer mO = this.step != null ? m : null;
-        
-        boolean t = this.getTransient(ctx);
-        Object src = null;
-        ValueExpression srcVE = null;
-        if (this.items != null) {
-            srcVE = this.items.getValueExpression(ctx, Object.class);
-            src = srcVE.getValue(ctx);
-        } else {
-            byte[] b = new byte[e + 1];
-            for (int i = 0; i < b.length; i++) {
-                b[i] = (byte) i;
-            }
-            src = b;
-        }
-        if (src != null) {
-            Iterator itr = this.toIterator(src);
-            if (itr != null) {
-                int i = 0;
-
-                // move to start
-                while (i < s && itr.hasNext()) {
-                    itr.next();
-                    i++;
-                }
-
-                String v = this.getVarName(ctx);
-                String vs = this.getVarStatusName(ctx);
-                VariableMapper vars = ctx.getVariableMapper();
-                ValueExpression ve = null;
-                ValueExpression vO = this.capture(v, vars);
-                ValueExpression vsO = this.capture(vs, vars);
-                int mi = 0;
-                Object value = null;
-                int count = 0;
-                try {
-                    boolean first = true;
-                    while (i <= e && itr.hasNext()) {
-                        count++;
-                        value = itr.next();
-
-                        // set the var
-                        if (v != null) {
-                            if (t || srcVE == null) {
-                                ctx.setAttribute(v, value);
-                            } else {
-                                ve = this.getVarExpr(srcVE, src, value, i);
-                                vars.setVariable(v, ve);
-                            }
-                        }
-
-                        // set the varStatus
-                        if (vs != null) {
-                            JstlIterationStatus itrS = new JstlIterationStatus(first, !itr.hasNext(),i, sO, eO, mO, value, count);
-                            if (t || srcVE == null) {
-                                ctx.setAttribute(vs, itrS);
-                            } else {
-                                ve = new IterationStatusExpression(itrS);
-                                vars.setVariable(vs, ve);
-                            }
-                        }
-
-                        // execute body
-                        this.nextHandler.apply(ctx, parent);
-
-                        // increment steps
-                        mi = 1;
-                        while (mi < m && itr.hasNext()) {
-                            itr.next();
-                            mi++;
-                            i++;
-                        }
-                        i++;
-                        
-                        first = false;
-                    }
-                } finally {
-                    if (v != null) {
-                        vars.setVariable(v, vO);
-                    }
-                    if (vs != null) {
-                        vars.setVariable(vs, vsO);
-                    }
-                }
-            }
-        }
-    }
-
-    private final ValueExpression capture(String name, VariableMapper vars) {
-        if (name != null) {
-            return vars.setVariable(name, null);
-        }
-        return null;
-    }
-
-    private final int getBegin(FaceletContext ctx) {
-        if (this.begin != null) {
-            return this.begin.getInt(ctx);
-        }
-        return 0;
-    }
-
-    private final int getEnd(FaceletContext ctx) {
-        if (this.end != null) {
-            return this.end.getInt(ctx);
-        }
-        return Integer.MAX_VALUE - 1; //hotspot bug in the JVM
-    }
-
-    private final int getStep(FaceletContext ctx) {
-        if (this.step != null) {
-            return this.step.getInt(ctx);
-        }
-        return 1;
-    }
-
-    private final boolean getTransient(FaceletContext ctx) {
-        if (this.tranzient != null) {
-            return this.tranzient.getBoolean(ctx);
-        }
-        return false;
-    }
-
-    private final ValueExpression getVarExpr(ValueExpression ve, Object src,
-            Object value, int i) {
-        if (src instanceof List || src.getClass().isArray()) {
-            return new IndexedValueExpression(ve, i);
-        } else if (src instanceof Map && value instanceof Map.Entry) {
-            return new MappedValueExpression(ve, (Map.Entry) value);
-        } else if (src instanceof Collection) {
-            return new IteratedValueExpression(ve, value);
-        }
-        throw new IllegalStateException("Cannot create VE for: " + src);
-    }
-
-    private final String getVarName(FaceletContext ctx) {
-        if (this.var != null) {
-            return this.var.getValue(ctx);
-        }
-        return null;
-    }
-
-    private final String getVarStatusName(FaceletContext ctx) {
-        if (this.varStatus != null) {
-            return this.varStatus.getValue(ctx);
-        }
-        return null;
-    }
-
-    private final Iterator toIterator(Object src) {
-        if (src == null) {
-            return null;
-        } else if (src instanceof Collection) {
-            return ((Collection) src).iterator();
-        } else if (src instanceof Map) {
-            return ((Map) src).entrySet().iterator();
-        } else if (src.getClass().isArray()) {
-            return new ArrayIterator(src);
-        } else {
-            throw new TagAttributeException(this.tag, this.items,
-                    "Must evaluate to a Collection, Map, Array, or null.");
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IfHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IfHandler.java
deleted file mode 100644
index 23b1a2e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IfHandler.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.el.ELException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- */
-public final class IfHandler extends TagHandlerImpl {
-
-    private final TagAttribute test;
-
-    private final TagAttribute var;
-
-    /**
-     * @param config
-     */
-    public IfHandler(TagConfig config) {
-        super(config);
-        this.test = this.getRequiredAttribute("test");
-        this.var = this.getAttribute("var");
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException, FacesException, ELException {
-        boolean b = this.test.getBoolean(ctx);
-        if (this.var != null) {
-            ctx.setAttribute(var.getValue(ctx), b);
-        }
-        if (b) {
-            this.nextHandler.apply(ctx, parent);
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IndexedValueExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IndexedValueExpression.java
deleted file mode 100644
index c391115..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IndexedValueExpression.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-
-/**
- * @author Jacob Hookom
- */
-public final class IndexedValueExpression extends ValueExpression {
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    private final Integer i;
-
-    private final ValueExpression orig;
-
-    /**
-     * 
-     */
-    public IndexedValueExpression(ValueExpression orig, int i) {
-        this.i = i;
-        this.orig = orig;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
-     */
-    public Object getValue(ELContext context) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(false);
-            return context.getELResolver().getValue(context, base, i);
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
-     *      java.lang.Object)
-     */
-    public void setValue(ELContext context, Object value) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(false);
-            context.getELResolver().setValue(context, base, i, value);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
-     */
-    public boolean isReadOnly(ELContext context) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(false);
-            return context.getELResolver().isReadOnly(context, base, i);
-        }
-        return true;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
-     */
-    public Class getType(ELContext context) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(false);
-            return context.getELResolver().getType(context, base, i);
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getExpectedType()
-     */
-    public Class getExpectedType() {
-        return Object.class;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#getExpressionString()
-     */
-    public String getExpressionString() {
-        return this.orig.getExpressionString();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#equals(java.lang.Object)
-     */
-    public boolean equals(Object obj) {
-        return this.orig.equals(obj);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#hashCode()
-     */
-    public int hashCode() {
-        return this.orig.hashCode();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#isLiteralText()
-     */
-    public boolean isLiteralText() {
-        return false;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IteratedValueExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IteratedValueExpression.java
deleted file mode 100644
index 2764a6d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IteratedValueExpression.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import javax.el.ELContext;
-import javax.el.PropertyNotWritableException;
-import javax.el.ValueExpression;
-
-public final class IteratedValueExpression extends ValueExpression {
-
-    private static final long serialVersionUID = 1L;
-
-    private ValueExpression orig;
-
-    private Object value;
-
-
-    public IteratedValueExpression(ValueExpression orig, Object value) {
-        this.orig = orig;
-        this.value = value;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
-     */
-    public Object getValue(ELContext context) {
-        return value;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
-     *      java.lang.Object)
-     */
-    public void setValue(ELContext context, Object value) {
-        context.setPropertyResolved(false);
-        throw new PropertyNotWritableException();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
-     */
-    public boolean isReadOnly(ELContext context) {
-        context.setPropertyResolved(false);
-        return true;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
-     */
-    public Class getType(ELContext context) {
-        context.setPropertyResolved(false);
-        return Object.class;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.ValueExpression#getExpectedType()
-     */
-    public Class getExpectedType() {
-        return Object.class;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.Expression#getExpressionString()
-     */
-    public String getExpressionString() {
-        return this.orig.getExpressionString();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.Expression#equals(java.lang.Object)
-     */
-    public boolean equals(Object obj) {
-        return this.orig.equals(obj);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.Expression#hashCode()
-     */
-    public int hashCode() {
-        return this.orig.hashCode();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see javax.el.Expression#isLiteralText()
-     */
-    public boolean isLiteralText() {
-        return false;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IterationStatusExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IterationStatusExpression.java
deleted file mode 100644
index 8f69425..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/IterationStatusExpression.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.IterationStatus;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-
-/**
- * @author Jacob Hookom
- * @version $Id: IterationStatusExpression.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class IterationStatusExpression extends ValueExpression {
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    private final IterationStatus status;
-
-    /**
-     * 
-     */
-    public IterationStatusExpression(IterationStatus status) {
-        this.status = status;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
-     */
-    public Object getValue(ELContext context) {
-        return this.status;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
-     *      java.lang.Object)
-     */
-    public void setValue(ELContext context, Object value) {
-        throw new UnsupportedOperationException("Cannot set IterationStatus");
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
-     */
-    public boolean isReadOnly(ELContext context) {
-        return true;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
-     */
-    public Class getType(ELContext context) {
-        return IterationStatus.class;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getExpectedType()
-     */
-    public Class getExpectedType() {
-        return IterationStatus.class;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#getExpressionString()
-     */
-    public String getExpressionString() {
-        return this.toString();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#equals(java.lang.Object)
-     */
-    public boolean equals(Object obj) {
-        return this.status.equals(obj);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#hashCode()
-     */
-    public int hashCode() {
-        return this.status.hashCode();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#isLiteralText()
-     */
-    public boolean isLiteralText() {
-        return true;
-    }
-
-    public String toString() {
-        return this.status.toString();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/JstlCoreLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/JstlCoreLibrary.java
deleted file mode 100644
index 0a58e43..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/JstlCoreLibrary.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.AbstractTagLibrary;
-
-/**
- * @author Jacob Hookom
- */
-public final class JstlCoreLibrary extends AbstractTagLibrary {
-
-    public final static String Namespace = "http://java.sun.com/jsp/jstl/core";
-
-    public final static JstlCoreLibrary Instance = new JstlCoreLibrary();
-
-    public JstlCoreLibrary() {
-        super(Namespace);
-
-        this.addTagHandler("if", IfHandler.class);
-
-        this.addTagHandler("forEach", ForEachHandler.class);
-
-        this.addTagHandler("catch", CatchHandler.class);
-        
-        this.addTagHandler("choose", ChooseHandler.class);
-        
-        this.addTagHandler("when", ChooseWhenHandler.class);
-        
-        this.addTagHandler("otherwise", ChooseOtherwiseHandler.class);
-        
-        this.addTagHandler("set", SetHandler.class);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/JstlIterationStatus.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/JstlIterationStatus.java
deleted file mode 100644
index 3ae1ed9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/JstlIterationStatus.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.IterationStatus;
-
-import javax.servlet.jsp.jstl.core.LoopTagStatus;
-
-public class JstlIterationStatus extends IterationStatus implements
-      LoopTagStatus {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public JstlIterationStatus(boolean first,
-                               boolean last,
-                               int index,
-                               Integer begin,
-                               Integer end,
-                               Integer step) {
-        super(first,
-              last,
-              index,
-              begin,
-              end,
-              step);
-    }
-
-    public JstlIterationStatus(boolean first,
-                               boolean last,
-                               int index,
-                               Integer begin,
-                               Integer end,
-                               Integer step,
-                               Object current,
-                               int iterationCount) {
-        super(first,
-              last,
-              index,
-              begin,
-              end,
-              step,
-              current,
-              iterationCount);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/MappedValueExpression.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/MappedValueExpression.java
deleted file mode 100644
index c5959cc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/MappedValueExpression.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import java.io.Serializable;
-import java.util.Map;
-
-/**
- * @author Jacob Hookom
- * @version $Id: MappedValueExpression.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public final class MappedValueExpression extends ValueExpression {
-
-    private final static class Entry implements Map.Entry, Serializable {
-
-        private final Map src;
-        private final Object key;
-
-        public Entry(Map src, Object key) {
-            this.src = src;
-            this.key = key;
-        }
-
-        public Object getKey() {
-            return key;
-        }
-
-        public Object getValue() {
-            return src.get(key);
-        }
-
-        public Object setValue(Object value) {
-            return src.put(key, value);
-        }
-
-    }
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    private final Object key;
-
-    private final ValueExpression orig;
-
-    /**
-     * 
-     */
-    public MappedValueExpression(ValueExpression orig, Map.Entry entry) {
-        this.orig = orig;
-        this.key = entry.getKey();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getValue(javax.el.ELContext)
-     */
-    public Object getValue(ELContext context) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(true);
-            return new Entry((Map) base, key);
-            
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#setValue(javax.el.ELContext,
-     *      java.lang.Object)
-     */
-    public void setValue(ELContext context, Object value) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(false);
-            context.getELResolver().setValue(context, base, key, value);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#isReadOnly(javax.el.ELContext)
-     */
-    public boolean isReadOnly(ELContext context) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(false);
-            return context.getELResolver().isReadOnly(context, base, key);
-        }
-        return true;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getType(javax.el.ELContext)
-     */
-    public Class getType(ELContext context) {
-        Object base = this.orig.getValue(context);
-        if (base != null) {
-            context.setPropertyResolved(false);
-            return context.getELResolver().getType(context, base, key);
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.ValueExpression#getExpectedType()
-     */
-    public Class getExpectedType() {
-        return Object.class;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#getExpressionString()
-     */
-    public String getExpressionString() {
-        return this.orig.getExpressionString();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#equals(java.lang.Object)
-     */
-    public boolean equals(Object obj) {
-        return this.orig.equals(obj);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.el.Expression#hashCode()
-     */
-    public int hashCode() {
-        return 0;
-    }
-
-    /*
-     * (non-Javadoc)eturn new Map.Entry<K, V>
-     * 
-     * @see javax.el.Expression#isLiteralText()
-     */
-    public boolean isLiteralText() {
-        return false;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/SetHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/SetHandler.java
deleted file mode 100644
index dfee66f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/core/SetHandler.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.core;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.event.PhaseId;
-import javax.faces.view.facelets.*;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * Simplified implementation of c:set
- * 
- * @author Jacob Hookom
- * @version $Id: SetHandler.java 8384 2010-05-17 14:59:38Z jdlee $
- */
-public class SetHandler extends TagHandlerImpl {
-
-    private final TagAttribute var;
-    
-    private final TagAttribute value;
-
-
-    
-    private final TagAttribute target;
-    
-    private final TagAttribute property;
-    
-    private final TagAttribute scope;
-    
-    public SetHandler(TagConfig config) {
-        super(config);
-        this.value = this.getAttribute("value");
-        this.var = this.getAttribute("var");
-        this.target = this.getAttribute("target");
-        this.property = this.getAttribute("property");
-        this.scope = this.getAttribute("scope");
-        
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-
-        StringBuilder bodyValue = new StringBuilder();
-
-        Iterator iter = TagHandlerImpl.findNextByType(this.nextHandler,
-                TextHandler.class);
-        while (iter.hasNext()) {
-            TextHandler text = (TextHandler) iter.next();
-            bodyValue.append(text.getText(ctx));
-        }
-
-        // true if either a value in body or value attr
-        boolean valSet = bodyValue.length() > 0 || (value != null && value.getValue().length() >0);
-
-        // Apply precedence algorithm for attributes.  The JstlCoreTLV doesn't
-        // seem to enforce much in the way of this, so I edburns needs to check
-        // with an authority on the matter, probabyl Kin-Man Chung
-        
-        // If var is set, value must be set, otherwise an error is thrown
-        if (this.var != null && !valSet) {
-            throw new TagException(tag, "var set with null or empty value");
-        }
-
-        ValueExpression veObj;
-        ValueExpression lhs;
-        String expr;
-
-        if (this.value != null) {
-            veObj = this.value.getValueExpression(ctx, Object.class);
-        } else {
-
-            veObj = ctx.getExpressionFactory().createValueExpression(
-                    ctx.getFacesContext().getELContext(),bodyValue.toString(),Object.class);
-        }
-
-        // Otherwise, if var is set, ignore the other attributes
-        if (this.var != null) {
-            String scopeStr, varStr = this.var.getValue(ctx);
-            
-            // If scope is set, check for validity
-            if (null != this.scope) {
-                if (0 == this.scope.getValue().length()) {
-                    throw new TagException(tag, "zero length scope attribute set");
-                }
-                
-                if (this.scope.isLiteral()) {
-                    scopeStr = this.scope.getValue();
-                } else {
-                    scopeStr = this.scope.getValue(ctx);
-                }
-                if (scopeStr.equals("page")) {
-                    throw new TagException(tag, "page scope does not exist in JSF, consider using view scope instead.");
-                }
-                if (scopeStr.equals("request") || scopeStr.equals("session") ||
-                        scopeStr.equals("application") || scopeStr.equals("view")) {
-                    scopeStr = scopeStr + "Scope";
-                }
-                // otherwise, assume it's a valid scope.  With custom scopes,
-                // it may be.
-                // Conjure up an expression
-                expr = "#{" + scopeStr +"." + varStr + "}";
-                lhs = ctx.getExpressionFactory().
-                        createValueExpression(ctx, expr, Object.class);
-                lhs.setValue(ctx, veObj.getValue(ctx));
-            }
-            else {
-                ctx.getVariableMapper().setVariable(varStr, veObj);
-            }
-        } else  {
-           
-            // Otherwise, target, property and value must be set
-            if ((null == this.target || null == this.target.getValue() ||
-                 this.target.getValue().length() <= 0) ||
-                (null == this.property || null == this.property.getValue() ||
-                 this.property.getValue().length() <= 0) || !valSet) {
-
-                throw new TagException(tag, "when using this tag either one of var and value, or (target, property, value) must be set.");
-            }
-            // Ensure that target is an expression
-            if (this.target.isLiteral()) {
-                throw new TagException(tag, "value of target attribute must be an expression");
-            }
-            // Get the value of property
-            String propertyStr = null;
-            if (this.property.isLiteral()) {
-                propertyStr = this.property.getValue();
-            } else {
-                propertyStr = this.property.getValue(ctx);
-            }
-            ValueExpression targetVe = this.target.getValueExpression(ctx, Object.class);
-            Object targetValue = targetVe.getValue(ctx);
-            ctx.getFacesContext().getELContext().getELResolver().setValue(ctx, 
-                    targetValue, propertyStr, veObj.getValue(ctx));
-            
-        }
-    }
-
-    // Swallow children - if they're text, we've already handled them.
-    protected void applyNextHandler(FaceletContext ctx, UIComponent c) {
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/fn/JstlFunction.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/fn/JstlFunction.java
deleted file mode 100644
index 7364bcc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/jstl/fn/JstlFunction.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.tag.jstl.fn;
-
-import java.lang.reflect.Array;
-import java.util.*;
-
-/**
- * Implementations of JSTL Functions
- * 
- * @author Jacob Hookom
- */
-public final class JstlFunction {
-
-    private JstlFunction() {
-    }
-
-    public static boolean contains(String name, String searchString) {
-        if (name == null) {
-            name = "";
-        }
-        if (searchString == null) {
-            searchString = "";
-        }
-        return name.contains(searchString);
-    }
-
-    public static boolean containsIgnoreCase(String name, String searchString) {
-        if (name == null) {
-            name = "";
-        }
-        if (searchString == null) {
-            searchString = "";
-        }
-        return name.toLowerCase().contains(searchString.toLowerCase());
-    }
-
-    public static boolean endsWith(String name, String searchString) {
-        if (name == null) {
-            name = "";
-        }
-        if (searchString == null) {
-            searchString = "";
-        }
-        return name.endsWith(searchString);
-    }
-
-    public static String escapeXml(String value) {
-        if (value == null || value.length() == 0) {
-            value = "";
-        }
-        StringBuilder b = new StringBuilder(value.length());
-        final char[] lookahead = { 'a', 'm', 'p', ';' };
-        for (int i = 0, len = value.length(); i < len; i++) {
-            char c = value.charAt(i);
-            if (c == '<') {
-                b.append("<");
-            } else if (c == '>') {
-                b.append(">");
-            } else if (c == '\'') {
-                b.append("'");
-            } else if (c == '"') {
-                b.append(""");
-            } else if (c == '&') {
-                boolean matched = true;
-                for (int j = 0, jlen = lookahead.length; j < jlen; j++) {
-                    if (lookahead[j] != value.charAt(i + (j + 1))) {
-                        matched = false;
-                        break;
-                    }
-                }
-                if (matched) {
-                    i += 4;
-                } 
-                b.append("&");
-            } else {
-                b.append(c);
-            }
-        }
-        return b.toString();
-    }
-
-    public static int indexOf(String name, String searchString) {
-        if (name == null) {
-            name = "";
-        }
-        if (searchString == null) {
-            searchString = "";
-        }
-        return name.indexOf(searchString);
-    }
-
-    public static String join(String[] a, String delim) {
-        if (a == null|| a.length == 0) {
-            return "";
-        }
-        boolean skipDelim = false;
-        if (delim == null || delim.length() == 0) {
-            skipDelim = true;
-        }
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0, len = a.length, delimCount = (len - 1); i < len; i++) {
-            sb.append(a[i]);
-            if (!skipDelim && (i < delimCount)) {
-                sb.append(delim);
-            }
-        }
-        return sb.toString();
-    }
-
-    public static int length(Object obj) {
-        if (obj == null) {
-            return 0;
-        }
-        if (obj instanceof Collection) {
-            return ((Collection) obj).size();
-        }
-        if (obj.getClass().isArray()) {
-            return Array.getLength(obj);
-        }
-        if (obj instanceof String) {
-            return ((String) obj).length();
-        }
-        if (obj instanceof Map) {
-            return ((Map) obj).size();
-        }
-        if (obj instanceof Enumeration) {
-            Enumeration e = (Enumeration) obj;
-            int count = 0;
-            while (e.hasMoreElements()) {
-                e.nextElement();
-                count++;
-            }
-            return count;
-        }
-        if (obj instanceof Iterator) {
-            Iterator i = (Iterator) obj;
-            int count = 0;
-            while (i.hasNext()) {
-                i.next();
-                count++;
-            }
-            return count;
-        }
-        throw new IllegalArgumentException("Object type not supported: "
-                + obj.getClass().getName());
-    }
-    
-    public static String replace(String value, String before, String after) {
-        if (value == null) {
-            value = "";
-        }
-        if (before == null) {
-            before = "";
-        }
-        if (before.length() == 0) {
-            return value;
-        }
-        if (value.length() == 0) {
-            return "";
-        }
-        if (after == null) {
-            after = "";
-        }
-
-        return value.replaceAll(before, after);
-    }
-    
-    public static String[] split(String value, String d) {
-        if (value == null) {
-            value = "";
-        }
-        if (value.length() == 0) {
-            return new String[]{ "" };
-        }
-        if (d == null) {
-            d = "";
-        }
-        if (d.length() == 0) {
-            return new String[] { value };
-        }
-
-        List<String> tokens = new ArrayList<String>();
-        for (StringTokenizer st = new StringTokenizer(value, d); st.hasMoreTokens(); ) {
-            tokens.add(st.nextToken());
-        }
-
-        return tokens.toArray(new String[tokens.size()]);
-    }
-    
-    public static boolean startsWith(String value, String p) {
-        if (value == null) {
-            value = "";
-        }
-        if (p == null) {
-            p = "";
-        }
-        return value.startsWith(p);
-    }
-    
-    public static String substring(String v, int s, int e) {
-        if (v == null) {
-            v = "";
-        }
-        if (s >= v.length()) {
-            return "";            
-        }
-        if (s < 0) {
-            s = 0;
-        }
-        if (e < 0 || e >= v.length()) {
-            e = v.length();
-        }
-        if (e < s) {
-            return "";
-        }
-        return v.substring(s, e);
-    }
-    
-    public static String substringAfter(String v, String p) {
-        if (v == null) {
-            v = "";
-        }
-        if (v.length() == 0) {
-            return "";
-        }
-        if (p == null) {
-            p = "";
-        }
-        int i = v.indexOf(p);
-        if (i == -1) {
-            return "";
-        }
-        return v.substring(i+p.length());
-    }
-    
-    public static String substringBefore(String v, String s) {
-        if (v == null) {
-            v = "";
-        }
-        if (v.length() == 0) {
-            return "";
-        }
-        if (s == null) {
-            s = "";
-        }
-        int i = v.indexOf(s);
-        if (i == -1) {
-            return "";
-        }
-        return v.substring(0, i);
-    }
-    
-    public static String toLowerCase(String v) {
-        if (v == null || v.length() == 0) {
-            return "";
-        }
-        return v.toLowerCase();
-    }
-    
-    public static String toUpperCase(String v) {
-        if (v == null || v.length() == 0) {
-            return "";
-        }
-        return v.toUpperCase();
-    }
-    
-    public static String trim(String v) {
-        if (v == null || v.length() == 0) {
-            return "";
-        }
-        return v.trim();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ComponentRef.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ComponentRef.java
deleted file mode 100644
index 361bce8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ComponentRef.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import javax.faces.component.UIComponentBase;
-
-public final class ComponentRef extends UIComponentBase {
-
-    public final static String COMPONENT_TYPE = "facelets.ui.ComponentRef";
-    public final static String COMPONENT_FAMILY = "facelets";
-    
-    public ComponentRef() {
-        super();
-    }
-
-    public String getFamily() {
-        return COMPONENT_FAMILY;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ComponentRefHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ComponentRefHandler.java
deleted file mode 100644
index 4246447..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ComponentRefHandler.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-
-public final class ComponentRefHandler extends ComponentHandler {
-
-    public final static String Name = "component";
-    
-    public ComponentRefHandler(ComponentConfig config) {
-        super(config);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/CompositionHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/CompositionHandler.java
deleted file mode 100644
index 9b54980..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/CompositionHandler.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.FaceletContextImplBase;
-import com.sun.faces.facelets.TemplateClient;
-import com.sun.faces.facelets.el.VariableMapperWrapper;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.util.FacesLogger;
-
-import javax.el.VariableMapper;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * @author Jacob Hookom
- */
-public final class CompositionHandler extends TagHandlerImpl implements
-        TemplateClient {
-
-    private static final Logger log = FacesLogger.FACELETS_COMPOSITION.getLogger();
-
-
-    public final static String Name = "composition";
-
-    protected final TagAttribute template;
-
-    protected final Map handlers;
-
-    protected final ParamHandler[] params;
-
-    /**
-     * @param config
-     */
-    public CompositionHandler(TagConfig config) {
-        super(config);
-        this.template = this.getAttribute("template");
-        if (this.template != null) {
-            this.handlers = new HashMap();
-            Iterator itr = this.findNextByType(DefineHandler.class);
-            DefineHandler d = null;
-            while (itr.hasNext()) {
-                d = (DefineHandler) itr.next();
-                this.handlers.put(d.getName(), d);
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine(tag + " found Define[" + d.getName() + "]");
-                }
-            }
-            List paramC = new ArrayList();
-            itr = this.findNextByType(ParamHandler.class);
-            while (itr.hasNext()) {
-                paramC.add(itr.next());
-            }
-            if (paramC.size() > 0) {
-                this.params = new ParamHandler[paramC.size()];
-                for (int i = 0; i < this.params.length; i++) {
-                    this.params[i] = (ParamHandler) paramC.get(i);
-                }
-            } else {
-                this.params = null;
-            }
-        } else {
-            this.params = null;
-            this.handlers = null;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctxObj, UIComponent parent)
-            throws IOException {
-        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
-
-        if (this.template != null) {
-            VariableMapper orig = ctx.getVariableMapper();
-            if (this.params != null) {
-                VariableMapper vm = new VariableMapperWrapper(orig);
-                ctx.setVariableMapper(vm);
-                for (int i = 0; i < this.params.length; i++) {
-                    this.params[i].apply(ctx, parent);
-                }
-            }
-
-            ctx.extendClient(this);
-            String path = null;
-            try {
-                path = this.template.getValue(ctx);                
-                ctx.includeFacelet(parent, path);
-            } catch (IOException e) {
-                if (log.isLoggable(Level.FINE)) {
-                    log.log(Level.FINE, e.toString(), e);
-                }
-                throw new TagAttributeException(this.tag, this.template, "Invalid path : " + path);
-            } finally {
-                ctx.popClient(this);
-                ctx.setVariableMapper(orig);
-            }
-        } else {
-            this.nextHandler.apply(ctx, parent);
-        }
-    }
-
-    public boolean apply(FaceletContext ctx, UIComponent parent, String name)
-          throws IOException {
-        if (name != null) {
-            if (this.handlers == null) {
-                return false;
-            }
-            DefineHandler handler = (DefineHandler) this.handlers.get(name);
-            if (handler != null) {
-                handler.applyDefinition(ctx, parent);
-                return true;
-            } else {
-                return false;
-            }
-        } else {
-            this.nextHandler.apply(ctx, parent);
-            return true;
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/DecorateHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/DecorateHandler.java
deleted file mode 100644
index 3c50493..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/DecorateHandler.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.FaceletContextImplBase;
-import com.sun.faces.facelets.TemplateClient;
-import com.sun.faces.facelets.el.VariableMapperWrapper;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.util.FacesLogger;
-
-import javax.el.VariableMapper;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * @author Jacob Hookom
- */
-public final class DecorateHandler extends TagHandlerImpl implements TemplateClient {
-
-    private static final Logger log = FacesLogger.FACELETS_DECORATE.getLogger();
-    
-    private final TagAttribute template;
-
-    private final Map handlers;
-    
-    private final ParamHandler[] params;
-
-    /**
-     * @param config
-     */
-    public DecorateHandler(TagConfig config) {
-        super(config);
-        this.template = this.getRequiredAttribute("template");
-        this.handlers = new HashMap();
-
-        Iterator itr = this.findNextByType(DefineHandler.class);
-        DefineHandler d = null;
-        while (itr.hasNext()) {
-            d = (DefineHandler) itr.next();
-            this.handlers.put(d.getName(), d);
-            if (log.isLoggable(Level.FINE)) {
-                log.fine(tag + " found Define[" + d.getName() + "]");
-            }
-        }
-        List paramC = new ArrayList();
-        itr = this.findNextByType(ParamHandler.class);
-        while (itr.hasNext()) {
-            paramC.add(itr.next());
-        }
-        if (paramC.size() > 0) {
-            this.params = new ParamHandler[paramC.size()];
-            for (int i = 0; i < this.params.length; i++) {
-                this.params[i] = (ParamHandler) paramC.get(i);
-            }
-        } else {
-            this.params = null;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctxObj, UIComponent parent)
-            throws IOException {
-        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
-        VariableMapper orig = ctx.getVariableMapper();
-        if (this.params != null) {
-            VariableMapper vm = new VariableMapperWrapper(orig);
-            ctx.setVariableMapper(vm);
-            for (int i = 0; i < this.params.length; i++) {
-                this.params[i].apply(ctx, parent);
-            }
-        }
-
-        ctx.pushClient(this);
-        String path = null;
-        try {
-            path = this.template.getValue(ctx);
-            ctx.includeFacelet(parent, path);
-        } catch (IOException e) {
-            if (log.isLoggable(Level.FINE)) {
-                log.log(Level.FINE, e.toString(), e);
-            }
-            throw new TagAttributeException(this.tag, this.template, "Invalid path : " + path);
-        } finally {
-            ctx.setVariableMapper(orig);
-            ctx.popClient(this);
-        }
-    }
-
-    public boolean apply(FaceletContext ctx, UIComponent parent, String name) throws IOException {
-        if (name != null) {
-            DefineHandler handler = (DefineHandler) this.handlers.get(name);
-            if (handler != null) {
-                handler.applyDefinition(ctx, parent);
-                return true;
-            } else {
-                return false;
-            }
-        } else {
-            this.nextHandler.apply(ctx, parent);
-            return true;
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/DefineHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/DefineHandler.java
deleted file mode 100644
index ec90ea0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/DefineHandler.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- */
-public final class DefineHandler extends TagHandlerImpl {
-
-    private final String name;
-
-    /**
-     * @param config
-     */
-    public DefineHandler(TagConfig config) {
-        super(config);
-        TagAttribute attr = this.getRequiredAttribute("name");
-        if (!attr.isLiteral()) {
-            throw new TagAttributeException(this.tag, attr, "Must be Literal");
-        }
-        this.name = attr.getValue();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        // no-op
-    	//this.nextHandler.apply(ctx, parent);
-    }
-    
-    public void applyDefinition(FaceletContext ctx, UIComponent parent)
-    		throws IOException {
-    	this.nextHandler.apply(ctx, parent);
-    }
-
-    public String getName() {
-        return this.name;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/IncludeHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/IncludeHandler.java
deleted file mode 100644
index 445b7ba..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/IncludeHandler.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.el.VariableMapperWrapper;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-import com.sun.faces.util.FacesLogger;
-
-import javax.el.VariableMapper;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * @author Jacob Hookom
- */
-public final class IncludeHandler extends TagHandlerImpl {
-
-    private static final Logger log = FacesLogger.FACELETS_INCLUDE.getLogger();
-
-    private final TagAttribute src;
-
-    /**
-     * @param config
-     */
-    public IncludeHandler(TagConfig config) {
-        super(config);
-        this.src = this.getRequiredAttribute("src");
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        String path = this.src.getValue(ctx);
-        if (path == null || path.length() == 0) {
-            return;
-        }
-        VariableMapper orig = ctx.getVariableMapper();
-        ctx.setVariableMapper(new VariableMapperWrapper(orig));
-        try {
-            this.nextHandler.apply(ctx, null);
-            ctx.includeFacelet(parent, path);
-        } catch (IOException e) {
-            if (log.isLoggable(Level.FINE)) {
-                log.log(Level.FINE, e.toString(), e);
-            }
-            throw new TagAttributeException(this.tag, this.src, "Invalid path : " + path);
-        } finally {
-            ctx.setVariableMapper(orig);
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/InsertHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/InsertHandler.java
deleted file mode 100644
index d5b8e91..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/InsertHandler.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.FaceletContextImplBase;
-import com.sun.faces.facelets.TemplateClient;
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- */
-public final class InsertHandler extends TagHandlerImpl implements TemplateClient {
-
-    private final String name;
-
-    /**
-     * @param config
-     */
-    public InsertHandler(TagConfig config) {
-        super(config);
-        TagAttribute attr = this.getAttribute("name");
-        if (attr != null) {
-            if (!attr.isLiteral()) {
-                throw new TagAttributeException(this.tag, attr, "Must be Literal");
-            }
-            this.name = attr.getValue();
-        } else {
-            this.name = null;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctxObj, UIComponent parent)
-            throws IOException {
-        FaceletContextImplBase ctx = (FaceletContextImplBase) ctxObj;
-        
-        ctx.extendClient(this);
-        boolean found = false;
-        try {
-            found = ctx.includeDefinition(parent, this.name);
-        } finally {
-            ctx.popClient(this);
-        }
-        if (!found) {
-            this.nextHandler.apply(ctx, parent);
-        }
-    }
-
-    public boolean apply(FaceletContext ctx, UIComponent parent, String name) throws IOException {
-        if (this.name != null && this.name.equals(name)) {
-            this.nextHandler.apply(ctx, parent);
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ParamHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ParamHandler.java
deleted file mode 100644
index 6a6cbfc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/ParamHandler.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.tag.TagHandlerImpl;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagConfig;
-import java.io.IOException;
-
-/**
- * @author Jacob Hookom
- */
-public class ParamHandler extends TagHandlerImpl {
-
-    private final TagAttribute name;
-
-    private final TagAttribute value;
-
-    /**
-     * @param config
-     */
-    public ParamHandler(TagConfig config) {
-        super(config);
-        this.name = this.getRequiredAttribute("name");
-        this.value = this.getRequiredAttribute("value");
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
-     *      javax.faces.component.UIComponent)
-     */
-    public void apply(FaceletContext ctx, UIComponent parent)
-            throws IOException {
-        String nameStr = this.name.getValue(ctx);
-        ValueExpression valueVE = this.value.getValueExpression(ctx,
-                Object.class);
-        ctx.getVariableMapper().setVariable(nameStr, valueVE);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/RepeatHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/RepeatHandler.java
deleted file mode 100644
index ebe5063..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/RepeatHandler.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.*;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-public class RepeatHandler extends ComponentHandler {
-
-    public RepeatHandler(ComponentConfig config) {
-        super(config);
-    }
-
-    protected MetaRuleset createMetaRuleset(Class type) {
-        MetaRuleset meta = super.createMetaRuleset(type);
-
-        if (!UILibrary.Namespace.equals(this.tag.getNamespace())) {
-            meta.add(new TagMetaData(type));
-        }
-        
-        meta.alias("class", "styleClass");
-
-        return meta;
-    }
-
-    private class TagMetaData extends Metadata {
-
-        private final String[] attrs;
-
-        public TagMetaData(Class type) {
-            Set s = new HashSet();
-            TagAttribute[] ta = tag.getAttributes().getAll();
-            for (int i = 0; i < ta.length; i++) {
-                if ("class".equals(ta[i].getLocalName())) {
-                    s.add("styleClass");
-                } else {
-                    s.add(ta[i].getLocalName());
-                }
-            }
-            try {
-                PropertyDescriptor[] pd = Introspector.getBeanInfo(type)
-                        .getPropertyDescriptors();
-                for (int i = 0; i < pd.length; i++) {
-                    if (pd[i].getWriteMethod() != null) {
-                        s.remove(pd[i].getName());
-                    }
-                }
-            } catch (Exception e) {
-                // do nothing
-            }
-            this.attrs = (String[]) s.toArray(new String[s.size()]);
-        }
-
-        public void applyMetadata(FaceletContext ctx, Object instance) {
-            UIComponent c = (UIComponent) instance;
-            Map localAttrs = c.getAttributes();
-            localAttrs.put("alias.element", tag.getQName());
-            if (this.attrs.length > 0) {
-                localAttrs.put("alias.attributes", this.attrs);
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/SchemaCompliantRemoveHandler.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/SchemaCompliantRemoveHandler.java
deleted file mode 100644
index 123180a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/SchemaCompliantRemoveHandler.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import java.io.IOException;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.FaceletException;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-
-public class SchemaCompliantRemoveHandler extends TagHandler {
-
-    public SchemaCompliantRemoveHandler(TagConfig config) {
-        super(config);
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-        throw new FaceletException("Error: The Facelet parser is responsible for handling the <ui:remove> element.  This TagHandler implementation is only provided to allow the ui.taglib.xml file to be compliant with web-facelettaglibrary_2_0.xsd.  If you are seeing this exception, there is something wrong with how the JSF runtime is configuring its Facelets compiler.");
-    }
-
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/UIDebug.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/UIDebug.java
deleted file mode 100644
index 5bd47f2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/UIDebug.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.util.DevTools;
-import com.sun.faces.facelets.util.FastWriter;
-
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Jacob Hookom
- */
-public final class UIDebug extends UIComponentBase {
-
-    public final static String COMPONENT_TYPE = "facelets.ui.Debug";
-    public final static String COMPONENT_FAMILY = "facelets";
-    private static long nextId = System.currentTimeMillis();
-    private final static String KEY = "facelets.ui.DebugOutput";
-    public final static String DEFAULT_HOTKEY = "D";
-    private String hotkey = DEFAULT_HOTKEY;
-    
-    public UIDebug() {
-        super();
-        this.setTransient(true);
-        this.setRendered(true);
-        this.setRendererType(null);
-    }
-
-    public String getFamily() {
-        return COMPONENT_FAMILY;
-    }
-
-    public List getChildren() {
-        return new ArrayList() {
-            public boolean add(Object o) {
-                throw new IllegalStateException("<ui:debug> does not support children");
-            }
-
-            public void add(int index, Object o) {
-                throw new IllegalStateException("<ui:debug> does not support children");
-            }
-        };
-    }
-
-    public void encodeBegin(FacesContext faces) throws IOException {
-
-        pushComponentToEL(faces, this);
-        String actionId = faces.getApplication().getViewHandler().getActionURL(faces, faces.getViewRoot().getViewId());
-        
-        StringBuffer sb = new StringBuffer(512);
-        sb.append("//<![CDATA[\n");
-        sb.append("function faceletsDebug(URL) { day = new Date(); id = day.getTime(); eval(\"page\" + id + \" = window.open(URL, '\" + id + \"', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=800,height=600,left = 240,top = 212');\"); };");
-        sb.append("var faceletsOrigKeyup = document.onkeyup; document.onkeyup = function(e) { if (window.event) e = window.event; if (String.fromCharCode(e.keyCode) == '" + this.getHotkey() + "' & e.shiftKey & e.ctrlKey) faceletsDebug('");
-        sb.append(actionId);
-        sb.append('?');
-        sb.append(KEY);
-        sb.append('=');
-        sb.append(writeDebugOutput(faces));
-        sb.append("'); else if (faceletsOrigKeyup) faceletsOrigKeyup(e); };\n");
-        sb.append("//]]>\n");
-
-        ResponseWriter writer = faces.getResponseWriter();
-        writer.startElement("script", this);
-        writer.writeAttribute("language", "javascript", "language");
-        writer.writeAttribute("type", "text/javascript", "type");
-        writer.writeText(sb.toString(), this, null);
-        writer.endElement("script");
-        
-    }
-    
-    private static String writeDebugOutput(FacesContext faces) throws IOException {
-        FastWriter fw = new FastWriter();
-        DevTools.debugHtml(fw, faces);
-        
-        Map session = faces.getExternalContext().getSessionMap();
-        Map debugs = (Map) session.get(KEY);
-        if (debugs == null) {
-            debugs = new LinkedHashMap() {
-                protected boolean removeEldestEntry(Map.Entry eldest) {
-                    return (this.size() > 5);
-                }
-            };
-            session.put(KEY, debugs);
-        }
-        String id = "" + nextId++;
-        debugs.put(id, fw.toString());
-        return id;
-    }
-    
-    private static String fetchDebugOutput(FacesContext faces, String id) {
-        Map session = faces.getExternalContext().getSessionMap();
-        Map debugs = (Map) session.get(KEY);
-        if (debugs != null) {
-            return (String) debugs.get(id);
-        }
-        return null;
-    }
-    
-    public static boolean debugRequest(FacesContext faces) {
-        String id = (String) faces.getExternalContext().getRequestParameterMap().get(KEY);
-        if (id != null) {
-            Object resp = faces.getExternalContext().getResponse();
-            if (!faces.getResponseComplete()
-                && resp instanceof HttpServletResponse) {
-                try {
-                    HttpServletResponse httpResp = (HttpServletResponse) resp;
-                    String page = fetchDebugOutput(faces, id);
-                    if (page != null) {
-                        httpResp.setContentType("text/html");
-                        httpResp.getWriter().write(page);
-                    } else {
-                        httpResp.setContentType("text/plain");
-                        httpResp.getWriter().write("No Debug Output Available");
-                    }
-                    httpResp.flushBuffer();
-                    faces.responseComplete();
-                } catch (IOException e) {
-                    return false;
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    public String getHotkey() {
-        return this.hotkey;
-    }
-    
-    public void setHotkey(String hotkey) {
-        this.hotkey = (hotkey != null) ? hotkey.toUpperCase() : "";
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/UILibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/UILibrary.java
deleted file mode 100644
index 9512943..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/UILibrary.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.tag.ui;
-
-import com.sun.faces.facelets.component.UIRepeat;
-import com.sun.faces.facelets.tag.AbstractTagLibrary;
-
-/**
- * @author Jacob Hookom
- */
-public final class UILibrary extends AbstractTagLibrary {
-
-    public final static String Namespace = "http://java.sun.com/jsf/facelets";
-
-    public final static UILibrary Instance = new UILibrary();
-
-    public UILibrary() {
-        super(Namespace);
-
-        this.addTagHandler("include", IncludeHandler.class);
-
-        this.addTagHandler("composition", CompositionHandler.class);
-        
-        this.addComponent("component", ComponentRef.COMPONENT_TYPE, null, ComponentRefHandler.class);
-        
-        this.addComponent("fragment", ComponentRef.COMPONENT_TYPE, null, ComponentRefHandler.class);
-
-        this.addTagHandler("define", DefineHandler.class);
-
-        this.addTagHandler("insert", InsertHandler.class);
-
-        this.addTagHandler("param", ParamHandler.class);
-
-        this.addTagHandler("decorate", DecorateHandler.class);
-        
-        this.addComponent("repeat", UIRepeat.COMPONENT_TYPE, null, RepeatHandler.class);
-        
-        this.addComponent("debug", UIDebug.COMPONENT_TYPE, null);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/package.html b/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/package.html
deleted file mode 100644
index 0798225..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/tag/ui/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-Tag Library for <b>http://java.sun.com/jsf/ui</b>.
-See JSF Core Tag Javadocs for attributes/functionality.
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/Classpath.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/Classpath.java
deleted file mode 100644
index 79ff848..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/Classpath.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.JarURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLDecoder;
-import java.util.Enumeration;
-import java.util.LinkedHashSet;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-/**
- * @author Jacob Hookom
- * @author Roland Huss
- * @author Ales Justin (ales.justin at jboss.org)
- */
-public final class Classpath {
-
-    /**
-     *
-     */
-    public Classpath() {
-        super();
-    }
-
-    public static URL[] search(String prefix, String suffix)
-          throws IOException {
-        return search(Thread.currentThread().getContextClassLoader(), prefix,
-                      suffix);
-    }
-
-    public static URL[] search(ClassLoader cl, String prefix, String suffix)
-          throws IOException {
-        Enumeration[] e = new Enumeration[]{
-              cl.getResources(prefix),
-              cl.getResources(prefix + "MANIFEST.MF")
-        };
-        Set all = new LinkedHashSet();
-        URL url;
-        URLConnection conn;
-        JarFile jarFile;
-        for (int i = 0, s = e.length; i < s; ++i) {
-            while (e[i].hasMoreElements()) {
-                url = (URL) e[i].nextElement();
-                conn = url.openConnection();
-                conn.setUseCaches(false);
-                conn.setDefaultUseCaches(false);
-                if (conn instanceof JarURLConnection) {
-                    jarFile = ((JarURLConnection) conn).getJarFile();
-                } else {
-                    jarFile = getAlternativeJarFile(url);
-                }
-                if (jarFile != null) {
-                    searchJar(cl, all, jarFile, prefix, suffix);
-                } else {
-                    boolean searchDone =
-                          searchDir(all, new File(URLDecoder.decode(url.getFile(), "UTF-8")), suffix);
-                    if (!searchDone) {
-                        searchFromURL(all, prefix, suffix, url);
-                    }
-                }
-            }
-        }
-        URL[] urlArray = (URL[]) all.toArray(new URL[all.size()]);
-        return urlArray;
-    }
-
-    private static boolean searchDir(Set result, File file, String suffix)
-          throws IOException {
-        if (file.exists() && file.isDirectory()) {
-            File[] fc = file.listFiles();
-            String path;
-            URL src;
-            // protect against Windows JDK bugs for listFiles -
-            // if it's null (even though it shouldn't be) return false
-            if (fc == null) return false;
-
-            for (int i = 0; i < fc.length; i++) {
-                path = fc[i].getAbsolutePath();
-                if (fc[i].isDirectory()) {
-                    searchDir(result, fc[i], suffix);
-                } else if (path.endsWith(suffix)) {
-                    // result.add(new URL("file:/" + path));
-                    result.add(fc[i].toURL());
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Search from URL. Fall back on prefix tokens if not able to read from
-     * original url param.
-     *
-     * @param result the result urls
-     * @param prefix the current prefix
-     * @param suffix the suffix to match
-     * @param url    the current url to start search
-     *
-     * @throws IOException for any error
-     */
-    private static void searchFromURL(Set result, String prefix, String suffix,
-                                      URL url) throws IOException {
-        boolean done = false;
-        InputStream is = getInputStream(url);
-        if (is != null) {
-            ZipInputStream zis;
-            if (is instanceof ZipInputStream) {
-                zis = (ZipInputStream) is;
-            } else {
-                zis = new ZipInputStream(is);
-            }
-            try {
-                ZipEntry entry = zis.getNextEntry();
-                // initial entry should not be null
-                // if we assume this is some inner jar
-                done = (entry != null);
-                while (entry != null) {
-                    String entryName = entry.getName();
-                    if (entryName.endsWith(suffix)) {
-                        String urlString = url.toExternalForm();
-                        result.add(new URL(urlString + entryName));
-                    }
-                    entry = zis.getNextEntry();
-                }
-            } finally {
-                zis.close();
-            }
-        }
-        if (!done && prefix.length() > 0) {
-            // we add '/' at the end since join adds it as well
-            String urlString = url.toExternalForm() + "/";
-            String[] split = prefix.split("/");
-            prefix = join(split, true);
-            String end = join(split, false);
-            int p = urlString.lastIndexOf(end);
-            url = new URL(urlString.substring(0, p));
-            searchFromURL(result, prefix, suffix, url);
-        }
-    }
-
-    /**
-     * Join tokens, exlude last if param equals true.
-     *
-     * @param tokens      the tokens
-     * @param excludeLast do we exclude last token
-     *
-     * @return joined tokens
-     */
-    private static String join(String[] tokens, boolean excludeLast) {
-        StringBuffer join = new StringBuffer();
-        for (int i = 0; i < tokens.length - (excludeLast ? 1 : 0); i++) {
-            join.append(tokens[i]).append("/");
-        }
-        return join.toString();
-    }
-
-    /**
-     * Open input stream from url. Ignore any errors.
-     *
-     * @param url the url to open
-     *
-     * @return input stream or null if not possible
-     */
-    private static InputStream getInputStream(URL url) {
-        try {
-            return url.openStream();
-        } catch (Throwable t) {
-            return null;
-        }
-    }
-
-    /**
-     * For URLs to JARs that do not use JarURLConnection - allowed by the servlet
-     * spec - attempt to produce a JarFile object all the same. Known servlet
-     * engines that function like this include Weblogic and OC4J. This is not a
-     * full solution, since an unpacked WAR or EAR will not have JAR "files" as
-     * such.
-     */
-    private static JarFile getAlternativeJarFile(URL url) throws IOException {
-        String urlFile = url.getFile();
-        // Trim off any suffix - which is prefixed by "!/" on Weblogic
-        int separatorIndex = urlFile.indexOf("!/");
-
-        // OK, didn't find that. Try the less safe "!", used on OC4J
-        if (separatorIndex == -1) {
-            separatorIndex = urlFile.indexOf('!');
-        }
-
-        if (separatorIndex != -1) {
-            String jarFileUrl = urlFile.substring(0, separatorIndex);
-            // And trim off any "file:" prefix.
-            if (jarFileUrl.startsWith("file:")) {
-                jarFileUrl = jarFileUrl.substring("file:".length());
-                jarFileUrl = URLDecoder.decode(jarFileUrl, "UTF-8");
-            }
-            return new JarFile(jarFileUrl);
-        }
-        return null;
-    }
-
-    private static void searchJar(ClassLoader cl, Set result, JarFile file,
-                                  String prefix, String suffix)
-          throws IOException {
-        Enumeration e = file.entries();
-        JarEntry entry;
-        String name;
-        while (e.hasMoreElements()) {
-            try {
-                entry = (JarEntry) e.nextElement();
-            } catch (Throwable t) {
-                continue;
-            }
-            name = entry.getName();
-            if (name.startsWith(prefix) && name.endsWith(suffix)) {
-                Enumeration e2 = cl.getResources(name);
-                while (e2.hasMoreElements()) {
-					result.add(e2.nextElement());
-				}
-			}
-		}
-	}
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/DevTools.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/DevTools.java
deleted file mode 100644
index a868816..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/DevTools.java
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.util;
-
-import com.sun.faces.util.Util;
-
-import javax.el.Expression;
-import javax.faces.component.UIComponent;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.Flash;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.ValueBinding;
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.*;
-import java.lang.reflect.Method;
-import java.text.DateFormat;
-import java.util.*;
-import java.util.logging.Level;
-
-/**
- * <p>
- * Utility class for displaying Facelet error/debug information.
- * </p>
- *
- * <p>
- * The public static methods of this class are exposed as EL functions under
- * the namespace <code>http://java.sun.com/mojarra/private/functions</code>
- * </p>
- *
- * @see com.sun.faces.application.ApplicationAssociate#createCompiler(com.sun.faces.config.WebConfiguration)
- *
- */
-public final class DevTools {
-    
-    private final static String TS = "<";
-    
-    private static final String ERROR_TEMPLATE = "META-INF/facelet-dev-error.xml";
-    
-    private static String[] ERROR_PARTS;
-    
-    private static final String DEBUG_TEMPLATE = "META-INF/facelet-dev-debug.xml";
-    
-    private static String[] DEBUG_PARTS;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private DevTools() {
-        throw new IllegalStateException();
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-     public static void debugHtml(Writer writer, FacesContext faces, Throwable e) throws IOException {
-
-         init();
-         Date now = new Date();
-         for (String ERROR_PART : ERROR_PARTS) {
-             if ("message".equals(ERROR_PART)) {
-                 writeMessage(writer, e);
-             } else if ("trace".equals(ERROR_PART)) {
-                 writeException(writer, e);
-             } else if ("now".equals(ERROR_PART)) {
-                 writer.write(DateFormat.getDateTimeInstance().format(now));
-             } else if ("tree".equals(ERROR_PART)) {
-                 writeComponent(writer, faces.getViewRoot());
-             } else if ("vars".equals(ERROR_PART)) {
-                 writeVariables(writer, faces);
-             } else {
-                 writer.write(ERROR_PART);
-             }
-         }
-
-    }
-
-
-    public static void writeMessage(Writer writer, Throwable e)
-    throws IOException {
-
-        if (e != null) {
-            String msg = e.getMessage();
-            if (msg != null) {
-                writer.write(msg.replaceAll("<", TS));
-            } else {
-                writer.write(e.getClass().getName());
-            }
-        }
-
-    }
-
-
-    public static void writeException(Writer writer, Throwable e)
-    throws IOException {
-
-        if (e != null) {
-            StringWriter str = new StringWriter(256);
-            PrintWriter pstr = new PrintWriter(str);
-            e.printStackTrace(pstr);
-            pstr.close();
-            writer.write(str.toString().replaceAll("<", TS));
-        }
-
-    }
-
-
-    public static void debugHtml(Writer writer, FacesContext faces)
-    throws IOException {
-
-        // PENDING - this and debugHtml(Writer, FacesContext, Exception) should
-        //           be refactored to share code.
-        init();
-        Date now = new Date();
-        for (String DEBUG_PART : DEBUG_PARTS) {
-            if ("message".equals(DEBUG_PART)) {
-                writer.write(faces.getViewRoot().getViewId());
-            } else if ("now".equals(DEBUG_PART)) {
-                writer.write(DateFormat.getDateTimeInstance().format(now));
-            } else if ("tree".equals(DEBUG_PART)) {
-                writeComponent(writer, faces.getViewRoot());
-            } else if ("vars".equals(DEBUG_PART)) {
-                writeVariables(writer, faces);
-            } else {
-                writer.write(DEBUG_PART);
-            }
-        }
-
-    }
-
-    
-    public static void writeVariables(Writer writer, FacesContext faces)
-    throws IOException {
-
-        ExternalContext ctx = faces.getExternalContext();
-        writeVariables(writer, ctx.getRequestParameterMap(), "Request Parameters");
-        if (faces.getViewRoot() != null) {
-            Map<String, Object> viewMap = faces.getViewRoot().getViewMap(false);
-            if (viewMap != null) {
-                writeVariables(writer, viewMap, "View Attributes");
-            } else {
-                writeVariables(writer, Collections.<String,Object>emptyMap(), "View Attributes");
-            }
-        } else {
-            writeVariables(writer, Collections.<String,Object>emptyMap(), "View Attributes");
-        }
-        writeVariables(writer, ctx.getRequestMap(), "Request Attributes");
-        Flash flash = ctx.getFlash();
-        try {
-            flash = ctx.getFlash();
-        } catch (UnsupportedOperationException uoe) {
-            // ignore
-        }
-        if (flash != null) {
-            writeVariables(writer, flash, "Flash Attributes");
-        } else {
-            writeVariables(writer, Collections.<String,Object>emptyMap(), "Flash Attributes");
-        }
-        if (ctx.getSession(false) != null) {
-            writeVariables(writer, ctx.getSessionMap(), "Session Attributes");
-        } else {
-            writeVariables(writer, Collections.<String,Object>emptyMap(), "Session Attributes");
-        }
-        writeVariables(writer, ctx.getApplicationMap(), "Application Attributes");
-
-    }
-
-
-    public static void writeComponent(Writer writer, UIComponent c)
-    throws IOException {
-
-        writer.write("<dl style=\"color: #006;\"><dt style=\"border: 1px solid #DDD; padding: 4px; border-left: 2px solid #666; font-family: 'Courier New', Courier, mono; font-size: small;");
-        if (c != null) {
-            if (isText(c)) {
-                writer.write("color: #999;");
-            }
-        }
-        writer.write("\">");
-        if (c == null) {
-            return;
-        }
-
-        boolean hasChildren = c.getChildCount() > 0 || c.getFacets().size() > 0;
-
-        writeStart(writer, c, hasChildren);
-        writer.write("</dt>");
-        if (hasChildren) {
-            if (c.getFacets().size() > 0) {
-                for (Map.Entry entry : c.getFacets().entrySet()) {
-                    writer.write(
-                          "<dd style=\"margin-top: 2px; margin-bottom: 2px;\">");
-                    writer.write(
-                          "<span style=\"font-family: 'Trebuchet MS', Verdana, Arial, Sans-Serif; font-size: small;\">");
-                    writer.write((String) entry.getKey());
-                    writer.write("</span>");
-                    writeComponent(writer, (UIComponent) entry.getValue());
-                    writer.write("</dd>");
-                }
-            }
-            if (c.getChildCount() > 0) {
-                for (UIComponent child : c.getChildren()) {
-                    writer.write(
-                          "<dd style=\"margin-top: 2px; margin-bottom: 2px;\">");
-                    writeComponent(writer, child);
-                    writer.write("</dd>");
-                }
-            }
-            writer.write("<dt style=\"border: 1px solid #DDD; padding: 4px; border-left: 2px solid #666; font-family: 'Courier New', Courier, mono; font-size: small;\">");
-            writeEnd(writer, c);
-            writer.write("</dt>");
-        }
-        writer.write("</dl>");
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static void init() throws IOException {
-
-        if (ERROR_PARTS == null) {
-            ERROR_PARTS = splitTemplate(ERROR_TEMPLATE);
-        }
-        
-        if (DEBUG_PARTS == null) {
-            DEBUG_PARTS = splitTemplate(DEBUG_TEMPLATE);
-        }
-
-    }
-
-
-    private static String[] splitTemplate(String rsc) throws IOException {
-
-        ClassLoader loader = Util.getCurrentLoader(DevTools.class);
-        InputStream is = loader.getResourceAsStream(rsc);
-        if (is == null) {
-            loader = DevTools.class.getClassLoader();
-            is = loader.getResourceAsStream(rsc);
-            if (is == null) {
-                throw new FileNotFoundException(rsc);
-            }
-        }
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        byte[] buff = new byte[512];
-        int read;
-        while ((read = is.read(buff)) != -1) {
-            baos.write(buff, 0, read);
-        }
-        String str = baos.toString();
-        return str.split("@@");
-
-    }
-    
-
-
-
-    
-    private static void writeVariables(Writer writer, Map<String,?> vars, String caption) throws IOException {
-
-        writer.write("<table style=\"border: 1px solid #CCC; border-collapse: collapse; border-spacing: 0px; width: 100%; text-align: left;\"><caption style=\"text-align: left; padding: 10px 0; font-size: large;\">");
-        writer.write(caption);
-        writer.write("</caption><thead stype=\"padding: 2px; color: #030; background-color: #F9F9F9;\"><tr style=\"padding: 2px; color: #030; background-color: #F9F9F9;\"><th style=\"padding: 2px; color: #030; background-color: #F9F9F9;width: 10%; \">Name</th><th style=\"padding: 2px; color: #030; background-color: #F9F9F9;width: 90%; \">Value</th></tr></thead><tbody style=\"padding: 10px 6px;\">");
-        boolean written = false;
-        if (!vars.isEmpty()) {
-            SortedMap<String,Object> map = new TreeMap<String,Object>(vars);
-            for (Map.Entry<String,Object> entry : map.entrySet()) {
-                String key = entry.getKey();
-                if (key.indexOf('.') == -1) {
-                    writer.write(
-                          "<tr style=\"padding: 10px 6px;\"><td style=\"padding: 10px 6px;\">");
-                    writer.write(key.replaceAll("<", TS));
-                    writer.write("</td><td>");
-                    writer.write(entry.getValue() == null
-                                 ? "null"
-                                 : entry.getValue().toString()
-                                       .replaceAll("<", TS));
-                    writer.write("</td></tr>");
-                    written = true;
-                }
-            }
-        }
-        if (!written) {
-            writer.write("<tr style=\"padding: 10px 6px;\"><td colspan=\"2\" style=\"padding: 10px 6px;\"><em>None</em></td></tr>");
-        }
-        writer.write("</tbody></table>");
-
-    }
-    
-
-    
-    private static void writeEnd(Writer writer, UIComponent c) throws IOException {
-
-        if (!isText(c)) {
-            writer.write(TS);
-            writer.write('/');
-            writer.write(getName(c));
-            writer.write('>');
-        }
-
-    }
-    
-    private final static String[] IGNORE = new String[] { "parent", "rendererType" };
-    
-    private static void writeAttributes(Writer writer, UIComponent c) {
-
-        try {
-            BeanInfo info = Introspector.getBeanInfo(c.getClass());
-            PropertyDescriptor[] pd = info.getPropertyDescriptors();
-            for (PropertyDescriptor aPd : pd) {
-                if (aPd.getWriteMethod() != null
-                    && Arrays.binarySearch(IGNORE, aPd.getName()) < 0) {
-                    Method m = aPd.getReadMethod();
-                    try {
-                        Object v = m.invoke(c);
-                        if (v != null) {
-                            if (v instanceof Collection
-                                || v instanceof Map
-                                || v instanceof Iterator) {
-                                continue;
-                            }
-                            writer.write(" ");
-                            writer.write(aPd.getName());
-                            writer.write("=\"");
-                            String str;
-                            if (v instanceof Expression) {
-                                str = ((Expression) v).getExpressionString();
-                            } else if (v instanceof ValueBinding) {
-                                str = ((ValueBinding) v).getExpressionString();
-                            } else if (v instanceof MethodBinding) {
-                                str = ((MethodBinding) v).getExpressionString();
-                            } else {
-                                str = v.toString();
-                            }
-                            writer.write(str.replaceAll("<", TS));
-                            writer.write("\"");
-                        }
-                    } catch (Exception e) {
-                        // do nothing
-                    }
-                }
-            }
-
-            ValueBinding binding = c.getValueBinding("binding");
-            if (binding != null) {
-                writer.write(" binding=\"");
-                writer.write(binding.getExpressionString().replaceAll("<", TS));
-                writer.write("\"");
-            }
-        } catch (Exception e) {
-            // do nothing
-        }
-
-    }
-    
-    private static void writeStart(Writer writer, UIComponent c, boolean children) throws IOException {
-
-        if (isText(c)) {
-            String str = c.toString().trim();
-            writer.write(str.replaceAll("<", TS));
-        } else {
-            writer.write(TS);
-            writer.write(getName(c));
-            writeAttributes(writer, c);
-            if (children) {
-                writer.write('>');
-            } else {
-                writer.write("/>");
-            }
-        }
-
-    }
-    
-    private static String getName(UIComponent c) {
-
-        String nm = c.getClass().getName();
-        return nm.substring(nm.lastIndexOf('.') + 1);
-
-    }
-    
-    private static boolean isText(UIComponent c) {
-
-        return (c.getClass().getName().startsWith("com.sun.faces.facelets.compiler"));
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/FastWriter.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/FastWriter.java
deleted file mode 100644
index 609573c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/FastWriter.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.util;
-
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * @author Jacob Hookom
- */
-public final class FastWriter extends Writer {
-    
-    private char[] buff;
-    private int size;
-    
-    public FastWriter() {
-        this(1024);
-    }
-    
-    public FastWriter(int initialSize) {
-        if (initialSize < 0) {
-            throw new IllegalArgumentException("Initial Size cannot be less than 0");
-        }
-        this.buff = new char[initialSize];
-    }
-
-    public void close() throws IOException {
-        // do nothing
-    }
-
-    public void flush() throws IOException {
-        // do nothing
-    }
-    
-    private final void overflow(int len) {
-        if (this.size + len > this.buff.length) {
-            char[] next = new char[(this.size + len) * 2];
-            System.arraycopy(this.buff, 0, next, 0, this.size);
-            this.buff = next;    
-        }
-    }
-
-    public void write(char[] cbuf, int off, int len) throws IOException {
-        overflow(len);
-        System.arraycopy(cbuf, off, this.buff, this.size, len);
-        this.size += len;
-    }
-
-    public void write(char[] cbuf) throws IOException {
-        this.write(cbuf, 0, cbuf.length);
-    }
-
-    public void write(int c) throws IOException {
-        this.overflow(1);
-        this.buff[this.size] = (char) c;
-        this.size++;
-    }
-
-    public void write(String str, int off, int len) throws IOException {
-        this.write(str.toCharArray(), off, len);
-    }
-
-    public void write(String str) throws IOException {
-        this.write(str.toCharArray(), 0, str.length());
-    }
-    
-    public void reset() {
-        this.size = 0;
-    }
-
-    public String toString() {
-        return new String(this.buff, 0, this.size);
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/FunctionLibrary.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/FunctionLibrary.java
deleted file mode 100644
index 1e7bbcb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/FunctionLibrary.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.util;
-
-import com.sun.faces.facelets.tag.TagLibrary;
-import com.sun.faces.util.Util;
-
-import javax.faces.FacesException;
-import javax.faces.view.facelets.Tag;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * <p>This <code>TagLibrary</code> exposes the <code>public static</code>
- * methods defined on the <code>functionsClass</code> provided to the constructor
- * as EL functions.</p>
- */
-public class FunctionLibrary implements TagLibrary {
-
-    private String namespace;
-    private Map<String,Method> functions;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public FunctionLibrary(Class<?> functionsClass, String namespace) {
-
-        Util.notNull("functionsClass", functionsClass);
-        Util.notNull("namespace", namespace);
-
-        this.namespace = namespace;
-
-        try {
-            Method[] methods = functionsClass.getMethods();
-            functions = new HashMap<String, Method>(methods.length, 1.0f);
-            for (Method method : methods) {
-                if (Modifier.isStatic(method.getModifiers())
-                    && Modifier.isPublic(method.getModifiers())) {
-                    functions.put(method.getName(), method);
-                }
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    }
-
-    // ------------------------------------------------- Methods from TagLibrary
-
-    public boolean containsNamespace(String ns, Tag t) {
-        return namespace.equals(ns);
-    }
-
-    public boolean containsTagHandler(String ns, String localName) {
-        return false;
-    }
-
-    public TagHandler createTagHandler(String ns, String localName,
-            TagConfig tag) throws FacesException {
-        return null;
-    }
-
-    public boolean containsFunction(String ns, String name) {
-        return namespace.equals(ns) && this.functions.containsKey(name);
-    }
-
-    public Method createFunction(String ns, String name) {
-        if (namespace.equals(ns)) {
-            return this.functions.get(name);
-        }
-        return null;
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/Path.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/Path.java
deleted file mode 100644
index c7d32b9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/Path.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-package com.sun.faces.facelets.util;
-
-/**
- * @author Jacob Hookom
- */
-public final class Path {
-
-    public static final String normalize(String path) {
-        if (path.length() == 0)
-            return path;
-        String n = path;
-        boolean abs = false;
-        while (n.indexOf('\\') >= 0) {
-            n = n.replace('\\', '/');
-        }
-        if (n.charAt(0) != '/') {
-            n = '/' + n;
-            abs = true;
-        }
-        int idx = 0;
-        while (true) {
-            idx = n.indexOf("%20");
-            if (idx == -1) {
-                break;
-            }
-            n = n.substring(0, idx) + " " + n.substring(idx + 3);
-        }
-        while (true) {
-            idx = n.indexOf("/./");
-            if (idx == -1) {
-                break;
-            }
-            n = n.substring(0, idx) + n.substring(idx + 2);
-        }
-        if (abs) {
-            n = n.substring(1);
-        }
-        return n;
-    }
-
-    public static final String relative(String ctx, String path) {
-        if (path.length() == 0) {
-            return context(ctx);
-        }
-        String c = context(normalize(ctx));
-        String p = normalize(path);
-        p = c + p;
-
-        int idx = 0;
-        while (true) {
-            idx = p.indexOf("/../");
-            if (idx == -1) {
-                break;
-            }
-            int s = p.lastIndexOf('/', idx - 3);
-            if (s == -1) {
-                break;
-            }
-            p = p.substring(0, s) + p.substring(idx + 3);
-        }
-        return p;
-    }
-
-    public static final String context(String path) {
-        int idx = path.lastIndexOf('/');
-        if (idx == -1) {
-            return "/";
-        }
-        return path.substring(0, idx + 1);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/ReflectionUtil.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/ReflectionUtil.java
deleted file mode 100644
index 850a6c0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/ReflectionUtil.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.facelets.util;
-
-import com.sun.faces.config.ConfigurationException;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.util.ReflectionUtils;
-import com.sun.faces.util.Util;
-
-import javax.faces.view.facelets.ResourceResolver;
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.text.MessageFormat;
-import java.util.Arrays;
-
-public class ReflectionUtil {
-
-    private static final String[] PRIMITIVE_NAMES = new String[] { "boolean",
-            "byte", "char", "double", "float", "int", "long", "short", "void" };
-
-    private static final Class[] PRIMITIVES = new Class[] { boolean.class,
-            byte.class, char.class, double.class, float.class, int.class,
-            long.class, short.class, Void.TYPE };
-
-    /**
-     * 
-     */
-    private ReflectionUtil() {
-        super();
-    }
-
-    public static Class forName(String name) throws ClassNotFoundException {
-        if (null == name || "".equals(name)) {
-            return null;
-        }
-        Class c = forNamePrimitive(name);
-        if (c == null) {
-            if (name.endsWith("[]")) {
-                String nc = name.substring(0, name.length() - 2);
-                c = Class.forName(nc, false, Thread.currentThread().getContextClassLoader());
-                c = Array.newInstance(c, 0).getClass();
-            } else {
-                c = Class.forName(name, false, Thread.currentThread().getContextClassLoader());
-            }
-        }
-        return c;
-    }
-
-    protected static Class forNamePrimitive(String name) {
-        if (name.length() <= 8) {
-            int p = Arrays.binarySearch(PRIMITIVE_NAMES, name);
-            if (p >= 0) {
-                return PRIMITIVES[p];
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Converts an array of Class names to Class types
-     * @param s
-     * @return
-     * @throws ClassNotFoundException
-     */
-    public static Class[] toTypeArray(String[] s) throws ClassNotFoundException {
-        if (s == null)
-            return null;
-        Class[] c = new Class[s.length];
-        for (int i = 0; i < s.length; i++) {
-            c[i] = forName(s[i]);
-        }
-        return c;
-    }
-
-    /**
-     * Converts an array of Class types to Class names
-     * @param c
-     * @return
-     */
-    public static String[] toTypeNameArray(Class[] c) {
-        if (c == null)
-            return null;
-        String[] s = new String[c.length];
-        for (int i = 0; i < c.length; i++) {
-            s[i] = c[i].getName();
-        }
-        return s;
-    }
-
-    /*
-     * Get a public method form a public class or interface of a given method.
-     * Note that if the base is an instance of a non-public class that
-     * implements a public interface,  calling Class.getMethod() with the base
-     * will not find the method.  To correct this, a version of the
-     * same method must be found in a superclass or interface.
-     **/
-
-    static private Method getMethod(Class cl, String methodName,
-                                    Class[] paramTypes) {
-
-        Method m = null;
-        try {
-            m = cl.getMethod(methodName, paramTypes);
-        } catch (NoSuchMethodException ex) {
-            return null;
-        }
-
-        Class dclass  = m.getDeclaringClass();
-        if (Modifier.isPublic(dclass.getModifiers())) {
-            return m;
-        }
-
-        Class[] intf = dclass.getInterfaces();
-        for (int i = 0; i < intf.length; i++) {
-            m = getMethod(intf[i], methodName, paramTypes);
-            if (m != null) {
-                return m;
-            }
-        }
-        Class c = dclass.getSuperclass();
-        if (c != null) {
-            m = getMethod(c, methodName, paramTypes);
-            if (m != null) {
-                return m;
-            }
-        }
-        return null;
-    }
-
-    protected static final String paramString(Class[] types) {
-        if (types != null) {
-            StringBuffer sb = new StringBuffer();
-            for (int i = 0; i < types.length; i++) {
-                sb.append(types[i].getName()).append(", ");
-            }
-            if (sb.length() > 2) {
-                sb.setLength(sb.length() - 2);
-            }
-            return sb.toString();
-        }
-        return null;
-    }
-    
-    public static Object decorateInstance(String className,
-                                    Class rootType,
-                                    Object root) {
-        Class clazz;
-        Object returnObject = null;
-        if (className != null) {
-            try {
-                clazz = loadClass(className, returnObject, null);
-                if (clazz != null) {
-                    if (isDevModeEnabled()) {
-                        Class<?>[] interfaces = clazz.getInterfaces();
-                        if (interfaces != null) {
-                            for (Class<?> c : interfaces) {
-                                if ("groovy.lang.GroovyObject"
-                                      .equals(c.getName())) {
-                                    // all groovy classes will implement this interface
-                                    returnObject =
-                                          createScriptProxy(rootType, className, root);
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                    if (returnObject == null) {
-                        // Look for an adapter constructor if we've got
-                        // an object to adapt
-                        if ((rootType != null) && (root != null)) {
-                            Constructor construct =
-                                  ReflectionUtils.lookupConstructor(
-                                        clazz,
-                                        rootType);
-                            if (construct != null) {
-                                returnObject = construct.newInstance(root);
-                            }
-                        }
-                    }
-                    if (clazz != null && returnObject == null) {
-                        returnObject = clazz.newInstance();
-                    }
-                }
-
-            } catch (ClassNotFoundException cnfe) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Unable to find class ''{0}''",
-                                                        className)));
-            } catch (NoClassDefFoundError ncdfe) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Class ''{0}'' is missing a runtime dependency: {1}",
-                                                        className,
-                                                        ncdfe.toString())));
-            } catch (ClassCastException cce) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Class ''{0}'' is not an instance of ''{1}''",
-                                                        className,
-                                                        rootType)));
-            } catch (Exception e) {
-                throw new ConfigurationException(
-                      buildMessage(MessageFormat.format("Unable to create a new instance of ''{0}'': {1}",
-                                                        className,
-                                                        e.toString())), e);
-            }
-        }
-
-        return returnObject;
-        
-    }
-    
-    // --------------------------------------------------------- Private Methods
-
-
-    private static String buildMessage(String cause) {
-
-        return MessageFormat.format("\n  Source Document: {0}\n  Cause: {1}",
-                                    "web.xml",
-                                    cause);
-
-    }
-    
-    
-    private static Class<?> loadClass(String className,
-                                 Object fallback,
-                                 Class<?> expectedType)
-    throws ClassNotFoundException {
-
-        Class<?> clazz = Util.loadClass(className, fallback);
-        if (expectedType != null && !expectedType.isAssignableFrom(clazz)) {
-                throw new ClassCastException();
-        }
-        return clazz;
-        
-    }
-    
-    private static boolean isDevModeEnabled() {
-        WebConfiguration webconfig = WebConfiguration.getInstance();
-        return (webconfig != null
-                  && "Development".equals(webconfig.getOptionValue(WebContextInitParameter.JavaxFacesProjectStage)));
-    }
-    
-    private static Object createScriptProxy(Class<?> artifactType,
-                                     String scriptName,
-                                     Object root) {
-        if (ResourceResolver.class.equals(artifactType)) {
-            return new ResourceResolverProxy(scriptName, (ResourceResolver) root);
-        }
-        return null;
-    }
-    
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/Resource.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/Resource.java
deleted file mode 100644
index 48a85c9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/Resource.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2005-2007 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.facelets.util;
-
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.servlet.ServletContext;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * @author Roland Huss
- * 
- */
-public final class Resource {
-
-    protected final static Logger log = FacesLogger.FACELETS_FACTORY.getLogger();
-
-    /**
-     * Get an URL of an internal resource. First,
-     * {@link javax.faces.context.ExternalContext#getResource(String)} is
-     * checked for an non-null URL return value. In the case of a null return
-     * value (as it is the case for Weblogic 8.1 for a packed war), a URL with a
-     * special URL handler is constructed, which can be used for
-     * <em>opening</em> a serlvet resource later. Internally, this special URL
-     * handler will call {@link ServletContext#getResourceAsStream(String)} when
-     * an inputstream is requested. This works even on Weblogic 8.1
-     * 
-     * @param ctx
-     *            the faces context from which to retrieve the resource
-     * @param path
-     *            an URL path
-     * 
-     * @return an url representing the URL and on which getInputStream() can be
-     *         called to get the resource
-     * @throws MalformedURLException
-     */
-    public static URL getResourceUrl(FacesContext ctx, String path)
-            throws MalformedURLException {
-        final ExternalContext externalContext = ctx.getExternalContext();
-        URL url = externalContext.getResource(path);
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("Resource-Url from external context: " + url);
-        }
-        if (url == null) {
-            // This might happen on Servlet container which doesnot return
-            // anything
-            // for getResource() (like weblogic 8.1 for packaged wars) we
-            // are trying
-            // to use an own URL protocol in order to use
-            // ServletContext.getResourceAsStream()
-            // when opening the url
-            if (resourceExist(externalContext, path)) {
-                url = getUrlForResourceAsStream(externalContext, path);
-            }
-        }
-        return url;
-    }
-
-    // This method could be used above to provide a 'fail fast' if a
-    // resource
-    // doesnt exist. Otherwise, the URL will fail on the first access.
-    private static boolean resourceExist(ExternalContext externalContext,
-            String path) {
-        if ("/".equals(path)) {
-            // The root context exists always
-            return true;
-        }
-        Object ctx = externalContext.getContext();
-        if (ctx instanceof ServletContext) {
-            ServletContext servletContext = (ServletContext) ctx;
-            InputStream stream = servletContext.getResourceAsStream(path);
-            if (stream != null) {
-                try {
-                    stream.close();
-                } catch (IOException e) {
-                    // Ignore here, since we donnot wanted to read from this
-                    // resource anyway
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-
-    // Construct URL with special URLStreamHandler for proxying
-    // ServletContext.getResourceAsStream()
-    private static URL getUrlForResourceAsStream(
-            final ExternalContext externalContext, String path)
-            throws MalformedURLException {
-        URLStreamHandler handler = new URLStreamHandler() {
-            protected URLConnection openConnection(URL u) throws IOException {
-                final String file = u.getFile();
-                return new URLConnection(u) {
-                    public void connect() throws IOException {
-                    }
-
-                    public InputStream getInputStream() throws IOException {
-                        if (log.isLoggable(Level.FINE)) {
-                            log.fine("Opening internal url to " + file);
-                        }
-                        Object ctx = externalContext.getContext();
-                        // Or maybe fetch the external context afresh ?
-                        // Object ctx =
-                        // FacesContext.getCurrentInstance().getExternalContext().getContext();
-
-                        if (ctx instanceof ServletContext) {
-                            ServletContext servletContext = (ServletContext) ctx;
-                            InputStream stream = servletContext
-                                    .getResourceAsStream(file);
-                            if (stream == null) {
-                                throw new FileNotFoundException(
-                                        "Cannot open resource " + file);
-                            }
-                            return stream;
-                        } else {
-                            throw new IOException(
-                                    "Cannot open resource for an context of "
-                                            + (ctx != null ? ctx.getClass()
-                                                    : null));
-                        }
-                    }
-                };
-            }
-        };
-        return new URL("internal", null, 0, path, handler);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/facelets/util/ResourceResolverProxy.java b/jsf-ri/src/main/java/com/sun/faces/facelets/util/ResourceResolverProxy.java
deleted file mode 100644
index b963aa6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/facelets/util/ResourceResolverProxy.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets.util;
-
-import com.sun.faces.scripting.groovy.GroovyHelper;
-
-import javax.faces.FacesException;
-import javax.faces.view.facelets.ResourceResolver;
-import java.net.URL;
-
-/**
- *
- * @author edburns
- */
-class ResourceResolverProxy extends ResourceResolver {
-    
-    private String scriptName;
-    private ResourceResolver delegate;
-    
-
-    public ResourceResolverProxy(String scriptName, ResourceResolver delegate) {
-        this.scriptName = scriptName;
-        this.delegate = delegate;
-    }
-
-    @Override
-    public URL resolveUrl(String path) {
-        return getGroovyDelegate().resolveUrl(path);
-    }
-    
-    
-    // --------------------------------------------------------- Private Methods
-
-
-    private ResourceResolver getGroovyDelegate() {
-
-        try {
-            return ((ResourceResolver) GroovyHelper.newInstance(scriptName,
-                    ResourceResolver.class, delegate));
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/io/Base64InputStream.java b/jsf-ri/src/main/java/com/sun/faces/io/Base64InputStream.java
deleted file mode 100644
index 702c9e0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/io/Base64InputStream.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-/*
- * Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (base64 @ miginfocom . com)
- * All rights reserved.
- */
-
-package com.sun.faces.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-
-/**
- * <p>A slight spin on the standard ByteArrayInputStream.  This
- * one accepts only a Base64 encoded String in the constructor argument</p>
- * which decodes into a <code>byte[]</code> to be read from by
- * other stream.</p>
- */
-public class Base64InputStream extends InputStream {
-
-
-    private static final int[] IA = new int[256];
-    private static final char[] CA =
-          "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
-                .toCharArray();
-
-    static {
-        Arrays.fill(IA, -1);
-        for (int i = 0, iS = CA.length; i < iS; i++) {
-            IA[CA[i]] = i;
-        }
-        IA['='] = 0;
-    }
-
-    /**
-     * An array of bytes that was provided
-     * by the creator of the stream. Elements <code>buf[0]</code>
-     * through <code>buf[count-1]</code> are the
-     * only bytes that can ever be read from the
-     * stream;  element <code>buf[pos]</code> is
-     * the next byte to be read.
-     */
-    protected byte buf[];
-
-    /**
-     * The index of the next character to read from the input stream buffer.
-     * This value should always be nonnegative
-     * and not larger than the value of <code>count</code>.
-     * The next byte to be read from the input stream buffer
-     * will be <code>buf[pos]</code>.
-     */
-    protected int pos;
-
-    /**
-     * The currently marked position in the stream.
-     * ByteArrayInputStream objects are marked at position zero by
-     * default when constructed.  They may be marked at another
-     * position within the buffer by the <code>mark()</code> method.
-     * The current buffer position is set to this point by the
-     * <code>reset()</code> method.
-     * <p/>
-     * If no mark has been set, then the value of mark is the offset
-     * passed to the constructor (or 0 if the offset was not supplied).
-     *
-     * @since JDK1.1
-     */
-    protected int mark = 0;
-
-    /**
-     * The index one greater than the last valid character in the input
-     * stream buffer.
-     * This value should always be nonnegative
-     * and not larger than the length of <code>buf</code>.
-     * It  is one greater than the position of
-     * the last byte within <code>buf</code> that
-     * can ever be read  from the input stream buffer.
-     */
-    protected int count;
-
-    /**
-     * Creates a <code>Base64InputStream</code>.
-     *
-     * @param encodedString the Base64 encoded String
-     */
-    public Base64InputStream(String encodedString) {
-        this.buf = decode(encodedString);
-        this.pos = 0;
-        this.count = buf.length;
-    }
-
-
-    /**
-     * Reads the next byte of data from this input stream. The value
-     * byte is returned as an <code>int</code> in the range
-     * <code>0</code> to <code>255</code>. If no byte is available
-     * because the end of the stream has been reached, the value
-     * <code>-1</code> is returned.
-     * <p/>
-     * This <code>read</code> method
-     * cannot block.
-     *
-     * @return the next byte of data, or <code>-1</code> if the end of the
-     *         stream has been reached.
-     */
-    public int read() {
-        return (pos < count) ? (buf[pos++] & 0xff) : -1;
-    }
-
-    /**
-     * Reads up to <code>len</code> bytes of data into an array of bytes
-     * from this input stream.
-     * If <code>pos</code> equals <code>count</code>,
-     * then <code>-1</code> is returned to indicate
-     * end of file. Otherwise, the  number <code>k</code>
-     * of bytes read is equal to the smaller of
-     * <code>len</code> and <code>count-pos</code>.
-     * If <code>k</code> is positive, then bytes
-     * <code>buf[pos]</code> through <code>buf[pos+k-1]</code>
-     * are copied into <code>b[off]</code>  through
-     * <code>b[off+k-1]</code> in the manner performed
-     * by <code>System.arraycopy</code>. The
-     * value <code>k</code> is added into <code>pos</code>
-     * and <code>k</code> is returned.
-     * <p/>
-     * This <code>read</code> method cannot block.
-     *
-     * @param b   the buffer into which the data is read.
-     * @param off the start offset of the data.
-     * @param len the maximum number of bytes read.
-     *
-     * @return the total number of bytes read into the buffer, or
-     *         <code>-1</code> if there is no more data because the end of
-     *         the stream has been reached.
-     */
-    @Override
-    public int read(byte b[], int off, int len) {
-        if (b == null) {
-            throw new NullPointerException();
-        } else if ((off < 0) || (off > b.length) || (len < 0) ||
-                   ((off + len) > b.length) || ((off + len) < 0)) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (pos >= count) {
-            return -1;
-        }
-        if (pos + len > count) {
-            len = count - pos;
-        }
-        if (len <= 0) {
-            return 0;
-        }
-        System.arraycopy(buf, pos, b, off, len);
-        pos += len;
-        return len;
-    }
-
-    /**
-     * Skips <code>n</code> bytes of input from this input stream. Fewer
-     * bytes might be skipped if the end of the input stream is reached.
-     * The actual number <code>k</code>
-     * of bytes to be skipped is equal to the smaller
-     * of <code>n</code> and  <code>count-pos</code>.
-     * The value <code>k</code> is added into <code>pos</code>
-     * and <code>k</code> is returned.
-     *
-     * @param n the number of bytes to be skipped.
-     *
-     * @return the actual number of bytes skipped.
-     */
-    @Override
-    public long skip(long n) {
-        if (pos + n > count) {
-            n = count - pos;
-        }
-        if (n < 0) {
-            return 0;
-        }
-        pos += n;
-        return n;
-    }
-
-    /**
-     * Returns the number of bytes that can be read from this input
-     * stream without blocking.
-     * The value returned is
-     * <code>count - pos</code>,
-     * which is the number of bytes remaining to be read from the input buffer.
-     *
-     * @return the number of bytes that can be read from the input stream
-     *         without blocking.
-     */
-    @Override
-    public int available() {
-        return count - pos;
-    }
-
-    /**
-     * Tests if this <code>InputStream</code> supports mark/reset. The
-     * <code>markSupported</code> method of <code>ByteArrayInputStream</code>
-     * always returns <code>true</code>.
-     *
-     * @since JDK1.1
-     */
-    @Override
-    public boolean markSupported() {
-        return true;
-    }
-
-    /**
-     * Set the current marked position in the stream.
-     * ByteArrayInputStream objects are marked at position zero by
-     * default when constructed.  They may be marked at another
-     * position within the buffer by this method.
-     * <p/>
-     * If no mark has been set, then the value of the mark is the
-     * offset passed to the constructor (or 0 if the offset was not
-     * supplied).
-     * <p/>
-     * <p> Note: The <code>readAheadLimit</code> for this class
-     * has no meaning.
-     *
-     * @since JDK1.1
-     */
-    @Override
-    public void mark(int readAheadLimit) {
-        mark = pos;
-    }
-
-    /**
-     * Resets the buffer to the marked position.  The marked position
-     * is 0 unless another position was marked or an offset was specified
-     * in the constructor.
-     */
-    @Override
-    public void reset() {
-        pos = mark;
-    }
-
-    /**
-     * Closing a <tt>ByteArrayInputStream</tt> has no effect. The methods in
-     * this class can be called after the stream has been closed without
-     * generating an <tt>IOException</tt>.
-     * <p/>
-     */
-    @Override
-    public void close() throws IOException {
-    }
-
-    /**
-     * <p>Base64 decodes the source string.  NOTE:  This method doesn't
-     *  consider line breaks</p>
-     * @param source a Base64 encoded string
-     * @return the bytes of the decode process
-     */
-    private byte[] decode(String source) {
-        // Check special case
-        int sLen = source.length();
-        if (sLen == 0) {
-            return new byte[0];
-        }
-
-        int sIx = 0, eIx =
-              sLen - 1;    // Start and end index after trimming.
-
-        // Trim illegal chars from start
-        while (sIx < eIx && IA[source.charAt(sIx) & 0xff] < 0) {
-            sIx++;
-        }
-
-        // Trim illegal chars from end
-        while (eIx > 0 && IA[source.charAt(eIx) & 0xff] < 0)
-            eIx--;
-
-        // get the padding count (=) (0, 1 or 2)
-        int pad = source.charAt(eIx) == '='
-                  ? (source.charAt(eIx - 1) == '=' ? 2 : 1)
-                  : 0;  // Count '=' at end.
-        int cCnt = eIx - sIx
-                   + 1;   // Content count including possible separators
-        int sepCnt =
-              sLen > 76 ? (source.charAt(76) == '\r' ? cCnt / 78 : 0) << 1 : 0;
-
-        int len = ((cCnt - sepCnt) * 6 >> 3)
-                  - pad; // The number of decoded bytes
-        byte[] dArr =
-              new byte[len];       // Preallocate byte[] of exact length
-
-        // Decode all but the last 0 - 2 bytes.
-        int d = 0;
-        for (int eLen = (len / 3) * 3; d < eLen;) {
-            // Assemble three bytes into an int from four "valid" characters.
-            int i = IA[source.charAt(sIx++)] << 18
-                    | IA[source.charAt(sIx++)] << 12
-                    | IA[source.charAt(sIx++)] << 6
-                    | IA[source.charAt(sIx++)];
-
-            // Add the bytes
-            dArr[d++] = (byte) (i >> 16);
-            dArr[d++] = (byte) (i >> 8);
-            dArr[d++] = (byte) i;
-
-        }
-
-        if (d < len) {
-            // Decode last 1-3 bytes (incl '=') into 1-3 bytes
-            int i = 0;
-            for (int j = 0; sIx <= eIx - pad; j++)
-                i |= IA[source.charAt(sIx++)] << (18 - j * 6);
-
-            for (int r = 16; d < len; r -= 8)
-                dArr[d++] = (byte) (i >> r);
-        }
-
-        return dArr;
-    }
-
-    // Test Case: com.sun.faces.io.TestIO
-
-} // END Base64InputStream
diff --git a/jsf-ri/src/main/java/com/sun/faces/io/Base64OutputStreamWriter.java b/jsf-ri/src/main/java/com/sun/faces/io/Base64OutputStreamWriter.java
deleted file mode 100644
index 5ac17ba..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/io/Base64OutputStreamWriter.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-/*
- * Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (base64 @ miginfocom . com)
- * All rights reserved.
- */
-
-package com.sun.faces.io;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-
-/**
- * <p>Provides a mechanism to accept and Base64 encode bytes into
- * chars which will be flushed to the provided writer as the
- * internal buffer fills.</p> 
- */
-public class Base64OutputStreamWriter extends OutputStream {
-
-    /** 
-     * The buffer where data is stored. 
-     */
-    private byte[] buf;
-
-    /**
-     * <p>The Base64 encoded bytes as chars; essentially the output
-     * buffer</p>
-     */
-    private char[] chars;
-
-    /** 
-     * The number of valid bytes in the buffer. 
-     */
-    private int count;
-
-    /**
-     * <p>The current position within <code>chars</code>
-     */
-    private int encCount;
-
-    /**
-     * <p>Tracks the total number of characters written.</p>
-     */
-    private int totalCharsWritten;
-
-    /**
-     * The writer we'll flush the bytes to instead of growing
-     * the array.
-     */
-    private Writer writer;
-
-    private static final char[] CA =
-          "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
-                .toCharArray();
-
-
-    /**
-     * Creates a new byte array output stream, with a buffer capacity of
-     * the specified size, in bytes.
-     *
-     * @param size   the initial size.
-     * @param writer the writer we'll flush to once
-     *               we reach our capacity
-     *
-     * @throws IllegalArgumentException if size is negative.
-     */
-    public Base64OutputStreamWriter(int size, Writer writer) {
-        if (size < 0) {
-            throw new IllegalArgumentException("Negative initial size: "
-                                               + size);
-        }
-       
-        buf = new byte[size];
-        chars = new char[size];
-        totalCharsWritten = 0;
-        this.writer = writer;
-    }
-
-    /**
-     * Writes the specified byte to this byte array output stream.
-     *
-     * @param b the byte to be written.
-     */
-    public void write(int b) throws IOException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Writes <code>len</code> bytes from the specified byte array
-     * starting at offset <code>off</code> to this byte array output stream.
-     *
-     * @param b   the data.
-     * @param off the start offset in the data.
-     * @param len the number of bytes to write.
-     */
-    @Override
-    public void write(byte b[], int off, int len) throws IOException {
-        if ((off < 0) || (off > b.length) || (len < 0) ||
-            ((off + len) > b.length) || ((off + len) < 0)) {
-            throw new IndexOutOfBoundsException();
-        } else if (len == 0) {
-            return;
-        }
-
-        if ((count + len) > buf.length) {
-            encodePendingBytes(false);
-        }
-        System.arraycopy(b, off, buf, count, len);
-        count += len;
-    }
-
-    /**
-     * <p>Calls through to {@link #write(byte[], int, int)}/</p> 
-     * @param b the bytes to write
-     * @throws IOException if an error occurs
-     */
-    @Override 
-    public void write(byte b[]) throws IOException {
-        write(b, 0, b.length);
-    }
-
-    /** Closing <tt>Base64OutputStreamWriter</tt> does nothing. */
-    @Override
-    public void close() throws IOException {
-
-    }
-
-    /**
-     * <p>Encodes the remaining bytes and flushes the <code>char[]</code>
-     * to the wrapped <code>Writer</code>.</p>
-     *
-     * @throws IOException if an error occurs writing the remaining bytes
-     */
-    public void finish() throws IOException {
-        encodePendingBytes(true);        
-    }
-
-
-    /**
-     * @return the total number of characters written
-     */
-    public int getTotalCharsWritten() {
-        return totalCharsWritten;
-    }
-
-
-    /**
-     * <p>Base64 encode any bytes found in <code>buf</code> and 
-     * store the result as characters in <code>chars</code>.  This method
-     * will automatically write the contents of <code>chars</code> when
-     * necessary.
-     * @param pad flag to signal we're finalizing the encoding processes.
-     * @throws IOException if an error occurs 
-     */
-    private void encodePendingBytes(boolean pad) throws IOException {
-        int eLen = (count / 3) * 3;         // Length of even 24-bits.
-        for (int s = 0; s < eLen;) {
-            // Copy next three bytes into lower 24 bits of int, paying attension to sign.
-            int i = (buf[s++] & 0xff) << 16
-                    | (buf[s++] & 0xff) << 8
-                    | (buf[s++] & 0xff);
-
-            if ((encCount + 4) > chars.length) {
-                // we're full, so write the encoded chars
-                // and reset the pointer
-                drainCharBuffer();
-            }
-            // Encode the int into four chars               
-            chars[encCount++] = CA[(i >>> 18) & 0x3f];
-            chars[encCount++] = CA[(i >>> 12) & 0x3f];
-            chars[encCount++] = CA[(i >>> 6) & 0x3f];
-            chars[encCount++] = CA[i & 0x3f];
-
-        }
-
-        int left = (count - eLen);
-
-        if (!pad) {
-            // push the non-encoded bytes to the beginning of the byte array
-            // and set count to the end of those bytes
-            System.arraycopy(buf, eLen, buf, 0, left);
-            count = left;
-        } else {
-            drainCharBuffer();
-            // pad if necessary
-            if (left > 0) {
-                // Prepare the int
-                int i = ((buf[eLen] & 0xff) << 10) | (left == 2
-                                                      ? ((buf[count - 1]
-                                                          & 0xff) << 2)
-                                                      : 0);
-
-                // write last four chars
-                writer.write(CA[i >> 12]);
-                writer.write(CA[(i >>> 6) & 0x3f]);
-                writer.write(left == 2 ? CA[i & 0x3f] : '=');
-                writer.write('=');
-            }
-        }
-    }
-
-    /**
-     * <p>Write the contents of <code>chars</code> to the
-     * wrapped <code>Writer</code> and reset <code>encCount</code>
-     * to zero.</p>
-     * @throws IOException if an error occurs
-     */
-    private void drainCharBuffer() throws IOException {
-        writer.write(chars, 0, encCount);
-        totalCharsWritten += encCount;
-        encCount = 0;
-    }
-
-    // Test Case: com.sun.faces.io.TestIO
-
-} // END Base64OutputStreamWriter
diff --git a/jsf-ri/src/main/java/com/sun/faces/io/FastStringWriter.java b/jsf-ri/src/main/java/com/sun/faces/io/FastStringWriter.java
deleted file mode 100644
index dbde502..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/io/FastStringWriter.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.io;
-
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * <p>This is based on {@link java.io.StringWriter} but backed by a
- * {@link StringBuilder} instead.</p>
- * <p/>
- * <p>This class is not thread safe.</p>
- */
-public class FastStringWriter extends Writer {
-
-    protected StringBuilder builder;
-
-    // ------------------------------------------------------------ Constructors
-
-    /**
-     * <p>Constructs a new <code>FastStringWriter</code> instance
-     * using the default capacity of <code>16</code>.</p>
-     */
-    public FastStringWriter() {
-        builder = new StringBuilder();
-    }
-
-    /**
-     * <p>Constructs a new <code>FastStringWriter</code> instance
-     * using the specified <code>initialCapacity</code>.</p>
-     *
-     * @param initialCapacity specifies the initial capacity of the buffer
-     *
-     * @throws IllegalArgumentException if initialCapacity is less than zero
-     */
-    public FastStringWriter(int initialCapacity) {
-        if (initialCapacity < 0) {
-            throw new IllegalArgumentException();
-        }
-        builder = new StringBuilder(initialCapacity);
-    }
-
-    // ----------------------------------------------------- Methods from Writer
-
-    /**
-     * <p>Write a portion of an array of characters.</p>
-     *
-     * @param cbuf Array of characters
-     * @param off  Offset from which to start writing characters
-     * @param len  Number of characters to write
-     *
-     * @throws IOException
-     */
-    public void write(char cbuf[], int off, int len) throws IOException {
-        if ((off < 0) || (off > cbuf.length) || (len < 0) ||
-            ((off + len) > cbuf.length) || ((off + len) < 0)) {
-            throw new IndexOutOfBoundsException();
-        } else if (len == 0) {
-            return;
-        }
-        builder.append(cbuf, off, len);
-    }
-
-    /**
-     * <p>This is a no-op.</p>
-     *
-     * @throws IOException
-     */
-    public void flush() throws IOException {
-    }
-
-    /**
-     * <p>This is a no-op.</p>
-     *
-     * @throws IOException
-     */
-    public void close() throws IOException {
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-    /**
-     * Write a string.
-     *
-     * @param str String to be written
-     */
-    public void write(String str) {
-        builder.append(str);
-    }
-
-    /**
-     * Write a portion of a string.
-     *
-     * @param str A String
-     * @param off Offset from which to start writing characters
-     * @param len Number of characters to write
-     */
-    public void write(String str, int off, int len) {
-        builder.append(str.substring(off, off + len));
-    }
-
-    /**
-     * Return the <code>StringBuilder</code> itself.
-     *
-     * @return StringBuilder holding the current buffer value.
-     */
-    public StringBuilder getBuffer() {
-        return builder;
-    }
-
-    /** @return the buffer's current value as a string. */
-    public String toString() {
-        return builder.toString();
-    }
-
-    public void reset() {
-        builder.setLength(0);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/ApplyRequestValuesPhase.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/ApplyRequestValuesPhase.java
deleted file mode 100644
index deebfda..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/ApplyRequestValuesPhase.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.lifecycle;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * ApplyRequestValuesPhase executes <code>processDecodes</code> on each
- * component in the tree so that it may update it's current value from the
- * information included in the current request (parameters, headers, c
- * cookies and so on.)
- */
-public class ApplyRequestValuesPhase extends Phase {
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute(FacesContext facesContext) throws FacesException {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Entering ApplyRequestValuesPhase");
-        }
-
-        UIComponent component = facesContext.getViewRoot();
-        assert (null != component);
-
-        try {
-            component.processDecodes(facesContext);
-        } catch (RuntimeException re) {
-            String exceptionMessage = re.getMessage();
-            if (null != exceptionMessage) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,exceptionMessage, re);
-                }
-            }
-            throw new FacesException(exceptionMessage, re);
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Exiting ApplyRequestValuesPhase");
-        }
-
-    }
-
-
-    public PhaseId getId() {
-
-        return PhaseId.APPLY_REQUEST_VALUES;
-
-    }
-
-
-    // The testcase for this class is TestApplyRequestValuesPhase.java
-
-} // end of class ApplyRequestValuesPhase
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/ELResolverInitPhaseListener.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/ELResolverInitPhaseListener.java
deleted file mode 100644
index ae3a054..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/ELResolverInitPhaseListener.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.el.ELUtils;
-
-import javax.el.CompositeELResolver;
-import javax.faces.FactoryFinder;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import java.util.Iterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>This class is used to register the JSF <code>ELResolver</code>
- * stack with the JSP container.</p>
- *
- * <p>We overload it a bit to set a bit on the ApplicationAssociate
- * stating we've processed a request to indicate the appliation is fully
- * initialized.</p>
- * 
- * <p>After the first request, this <code>PhaseListener</code> will remove
- * itself from all registered lifecycle instances registered with the 
- * application.</p>
- * @since 1.2
- */
-public class ELResolverInitPhaseListener implements PhaseListener {
-
-
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-    private boolean postInitCompleted;
-
-    private boolean preInitCompleted;
-
-
-    // ---------------------------------------------- Methods From PhaseListener
-
-    /**
-     * <p>Handle a notification that the processing for a particular
-     * phase has just been completed.</p>
-     *
-     * <p>When invoked, this phase listener will remove itself
-     * as a registered <code>PhaseListener</code> with all
-     * <code>Lifecycle</code> instances.
-     */
-    public synchronized void afterPhase(PhaseEvent event) {
-
-        if (!postInitCompleted && PhaseId.RENDER_RESPONSE.equals(event.getPhaseId())) {
-            ApplicationAssociate associate =
-                 ApplicationAssociate.getInstance(
-                      event.getFacesContext().getExternalContext());
-            associate.setRequestServiced();
-            LifecycleFactory factory = (LifecycleFactory)
-                  FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-            // remove ourselves from the list of listeners maintained by
-            // the lifecycle instances
-            for(Iterator<String> i = factory.getLifecycleIds(); i.hasNext(); ) {
-                Lifecycle lifecycle = factory.getLifecycle(i.next());
-                lifecycle.removePhaseListener(this);
-            }
-            postInitCompleted = true;
-        }
-
-    }
-
-
-    /**
-     * <p>Handle a notification that the processing for a particular
-     * phase of the request processing lifecycle is about to begin.</p>
-     *
-     * <p>The implementation of this method currently calls through to
-     * {@link #populateFacesELResolverForJsp(javax.faces.context.FacesContext)}.<p/>
-     */
-
-    public synchronized void beforePhase(PhaseEvent event) {
-
-        if (!preInitCompleted) {
-            
-            populateFacesELResolverForJsp(event.getFacesContext());
-            preInitCompleted = true;
-
-        }
-
-    }
-
-
-    /**
-     * <p>Return the identifier of the request processing phase during
-     * which this listener is interested in processing {@link javax.faces.event.PhaseEvent}
-     * events.  Legal values are the singleton instances defined by the
-     * {@link javax.faces.event.PhaseId} class, including <code>PhaseId.ANY_PHASE</code>
-     * to indicate an interest in being notified for all standard phases.</p>
-     *
-     * <p>We return <code>PhaseId.ANY_PHASE</code>.
-     */
-    public PhaseId getPhaseId() {
-
-        return PhaseId.ANY_PHASE;
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * Populate the FacesCompositeELResolver stack registered with JSP
-     * if a request is being processed for the very first time. At the
-     * application initialiazation time, an empty CompositeELResolver is
-     * registered with JSP because ELResolvers can be added until the first
-     * request is serviced.
-     *
-     * @param context - the <code>FacesContext</code> for the current request
-     */
-    protected void populateFacesELResolverForJsp(FacesContext context) {
-
-        ApplicationAssociate appAssociate =
-              ApplicationAssociate.getInstance(context.getExternalContext());
-        CompositeELResolver compositeELResolverForJsp =
-              appAssociate.getFacesELResolverForJsp();
-        if (compositeELResolverForJsp == null) {
-            if (LOGGER.isLoggable(Level.INFO)) {
-                LOGGER.log(Level.INFO,
-                           "jsf.lifecycle.initphaselistener.resolvers_not_registered",
-                           new Object[] { appAssociate.getContextName() });
-            }
-            return;
-        }
-
-        ELUtils.buildJSPResolver(compositeELResolverForJsp, appAssociate);
-
-        // somewhat of a hack, but since we're here, trigger the creation
-        // of the FacesResolvers as well by calling Application.getELResolver()
-        // to avoid a sync block on that method.
-        context.getApplication().getELResolver();
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                       "jsf.lifecycle.initphaselistener.resolvers_registered",
-                       new Object[] { appAssociate.getContextName() });
-        }
-
-    }
-
-} // END InitializingPhaseListener
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/InvokeApplicationPhase.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/InvokeApplicationPhase.java
deleted file mode 100644
index ee8373f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/InvokeApplicationPhase.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// InvokeApplicationPhase.java
-
-package com.sun.faces.lifecycle;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <B>Lifetime And Scope</B> <P> Same lifetime and scope as
- * DefaultLifecycleImpl.
- *
- */
-
-public class InvokeApplicationPhase extends Phase {
-
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute(FacesContext facesContext) throws FacesException {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Entering InvokeApplicationsPhase");
-        }
-
-        UIViewRoot root = facesContext.getViewRoot();
-        assert (null != root);
-
-        try {
-            root.processApplication(facesContext);
-        } catch (RuntimeException re) {
-            String exceptionMessage = re.getMessage();
-            if (null != exceptionMessage) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING, exceptionMessage, re);
-                }
-            }
-            throw new FacesException(exceptionMessage, re);
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Exiting InvokeApplicationsPhase");
-        }
-
-    }
-
-
-    public PhaseId getId() {
-
-        return PhaseId.INVOKE_APPLICATION;
-
-    }
-
-
-// The testcase for this class is TestInvokeApplicationPhase.java
-
-} // end of class InvokeApplicationPhase
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/LifecycleFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/LifecycleFactoryImpl.java
deleted file mode 100644
index ed18290..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/LifecycleFactoryImpl.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// LifecycleFactoryImpl.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-
-import javax.faces.FacesException;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <B>LifecycleFactoryImpl</B> is the stock implementation of Lifecycle
- * in the JSF RI. <P>
- *
- * @see	javax.faces.lifecycle.LifecycleFactory
- */
-
-public class LifecycleFactoryImpl extends LifecycleFactory {
-
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-    protected ConcurrentHashMap<String,Lifecycle> lifecycleMap = null;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public LifecycleFactoryImpl() {
-        super();
-        lifecycleMap = new ConcurrentHashMap<String,Lifecycle>();
-
-        // We must have an implementation under this key.
-        lifecycleMap.put(LifecycleFactory.DEFAULT_LIFECYCLE,
-                         new LifecycleImpl());
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Created Default Lifecycle");
-        }
-    }
-
-
-    // -------------------------------------------------- Methods from Lifecycle
-
-
-    public void addLifecycle(String lifecycleId, Lifecycle lifecycle) {
-        if (lifecycleId == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "lifecycleId"));
-        }
-        if (lifecycle == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "lifecycle"));
-        }
-        if (null != lifecycleMap.get(lifecycleId)) {
-            Object params[] = {lifecycleId};
-            String message =
-                MessageUtils.getExceptionMessageString(MessageUtils.LIFECYCLE_ID_ALREADY_ADDED_ID,
-                                         params);
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.warning(MessageUtils.getExceptionMessageString(
-                        MessageUtils.LIFECYCLE_ID_ALREADY_ADDED_ID,params));
-            }
-            throw new IllegalArgumentException(message);
-        }
-        lifecycleMap.put(lifecycleId, lifecycle);
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("addedLifecycle: " + lifecycleId + " " + lifecycle);
-        }
-    }
-
-
-    public Lifecycle getLifecycle(String lifecycleId) throws FacesException {
-
-        if (null == lifecycleId) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "lifecycleId"));
-        }
-
-        if (null == lifecycleMap.get(lifecycleId)) {
-            Object[] params = {lifecycleId};
-            String message =
-                MessageUtils.getExceptionMessageString(
-                    MessageUtils.CANT_CREATE_LIFECYCLE_ERROR_MESSAGE_ID,
-                    params);
-            throw new IllegalArgumentException(message);
-        }
-
-        Lifecycle result = lifecycleMap.get(lifecycleId);
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("getLifecycle: " + lifecycleId + " " + result);
-        }
-        return result;
-    }
-
-
-    public Iterator<String> getLifecycleIds() {
-        return lifecycleMap.keySet().iterator();
-    }
-
-
-
-// The testcase for this class is TestLifecycleFactoryImpl.java 
-
-
-} // end of class LifecycleFactoryImpl
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/LifecycleImpl.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/LifecycleImpl.java
deleted file mode 100644
index 7554f8f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/LifecycleImpl.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.lifecycle;
-
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseListener;
-import javax.faces.lifecycle.Lifecycle;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-
-
-/**
- * <p><b>LifecycleImpl</b> is the stock implementation of the standard
- * Lifecycle in the JavaServer Faces RI.</p>
- */
-
-public class LifecycleImpl extends Lifecycle {
-
-
-    // -------------------------------------------------------- Static Variables
-
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-
-    // ------------------------------------------------------ Instance Variables
-
-    // The Phase instance for the render() method
-    private Phase response = new RenderResponsePhase();
-
-    // The set of Phase instances that are executed by the execute() method
-    // in order by the ordinal property of each phase
-    private Phase[] phases = {
-        null, // ANY_PHASE placeholder, not a real Phase
-        new RestoreViewPhase(),
-        new ApplyRequestValuesPhase(),
-        new ProcessValidationsPhase(),
-        new UpdateModelValuesPhase(),
-        new InvokeApplicationPhase(),
-        response
-    };
-
-    // List for registered PhaseListeners
-    private List<PhaseListener> listeners =
-          new CopyOnWriteArrayList<PhaseListener>();
-
-        
-
-    // ------------------------------------------------------- Lifecycle Methods
-
-
-    // Execute the phases up to but not including Render Response
-    public void execute(FacesContext context) throws FacesException {
-
-        if (context == null) {
-            throw new NullPointerException
-                (MessageUtils.getExceptionMessageString
-                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("execute(" + context + ")");
-        }
-
-        for (int i = 1, len = phases.length -1 ; i < len; i++) { // Skip ANY_PHASE placeholder
-
-            if (context.getRenderResponse() ||
-                context.getResponseComplete()) {
-                break;
-            }
-
-            phases[i].doPhase(context, this, listeners.listIterator());
-
-        }
-
-    }
-
-
-    // Execute the Render Response phase
-    public void render(FacesContext context) throws FacesException {
-
-        if (context == null) {
-            throw new NullPointerException
-                (MessageUtils.getExceptionMessageString
-                 (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("render(" + context + ")");
-        }
-
-        if (!context.getResponseComplete()) {
-            response.doPhase(context, this, listeners.listIterator());
-        }
-
-    }
-
-
-    // Add a new PhaseListener to the set of registered listeners
-    public void addPhaseListener(PhaseListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException
-                  (MessageUtils.getExceptionMessageString
-                        (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "listener"));
-        }
-
-        if (listeners == null) {
-            listeners = new CopyOnWriteArrayList<PhaseListener>();
-        }
-
-        if (listeners.contains(listener)) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.lifecycle.duplicate_phase_listener_detected",
-                           listener.getClass().getName());
-            }
-        } else {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "addPhaseListener({0},{1})",
-                           new Object[]{
-                                 listener.getPhaseId().toString(),
-                                 listener.getClass().getName()});
-            }
-            listeners.add(listener);
-        }
-
-    }
-
-
-    // Return the set of PhaseListeners that have been registered
-    public PhaseListener[] getPhaseListeners() {
-
-        return listeners.toArray(new PhaseListener[listeners.size()]);
-
-    }
-
-
-    // Remove a registered PhaseListener from the set of registered listeners
-    public void removePhaseListener(PhaseListener listener) {
-
-        if (listener == null) {
-            throw new NullPointerException
-                  (MessageUtils.getExceptionMessageString
-                        (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "listener"));
-        }
-
-        if (listeners.remove(listener) && LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                       "removePhaseListener({0})",
-                       new Object[]{listener.getClass().getName()});
-        }
-
-    }
-        
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/Phase.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/Phase.java
deleted file mode 100644
index f1d0a59..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/Phase.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.lifecycle;
-
-import java.util.ListIterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.context.Flash;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.lifecycle.Lifecycle;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Timer;
-import com.sun.faces.util.RequestStateManager;
-
-
-/**
- * <p>A <strong>Phase</strong> is a single step in the processing of a
- * JavaServer Faces request throughout its entire {@link javax.faces.lifecycle.Lifecycle}.
- * Each <code>Phase</code> performs the required transitions on the state
- * information in the {@link FacesContext} associated with this request.
- */
-
-public abstract class Phase {
-
-    private static final Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * Performs PhaseListener processing and invokes the execute method
-     * of the Phase.
-     * @param context the FacesContext for the current request
-     * @param lifecycle the lifecycle for this request
-     */
-    public void doPhase(FacesContext context,
-                        Lifecycle lifecycle,
-                        ListIterator<PhaseListener> listeners) {
-
-        context.setCurrentPhaseId(getId());
-        PhaseEvent event = null;
-        if (listeners.hasNext()) {
-            event = new PhaseEvent(context, this.getId(), lifecycle);
-        }
-
-        // start timing - include before and after phase processing
-        Timer timer = Timer.getInstance();
-        if (timer != null) {
-            timer.startTiming();
-        }
-
-        try {
-            handleBeforePhase(context, listeners, event);
-            if (!shouldSkip(context)) {
-                execute(context);
-            }
-        } catch (Throwable e) {
-            queueException(context, e);
-        } finally {
-            try {
-                handleAfterPhase(context, listeners, event);
-            } catch (Throwable e) {
-                queueException(context, e);
-            }
-            // stop timing
-            if (timer != null) {
-                timer.stopTiming();
-                timer.logResult(
-                      "Execution time for phase (including any PhaseListeners) -> "
-                      + this.getId().toString());
-            }
-
-            context.getExceptionHandler().handle();
-        }
-
-    }
-
-
-     /**
-     * <p>Perform all state transitions required by the current phase of the
-     * request processing {@link javax.faces.lifecycle.Lifecycle} for a
-     * particular request. </p>
-     *
-     * @param context FacesContext for the current request being processed
-     * @throws FacesException if a processing error occurred while
-     *                        executing this phase
-     */
-    public abstract void execute(FacesContext context) throws FacesException;
-
-
-    /**
-     * @return the current {@link javax.faces.lifecycle.Lifecycle}
-     * <strong>Phase</strong> identifier.
-     */
-    public abstract PhaseId getId();
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-     protected void queueException(FacesContext ctx, Throwable t) {
-
-        queueException(ctx, t, null);
-
-    }
-
-
-    protected void queueException(FacesContext ctx, Throwable t, String booleanKey) {
-
-        ExceptionQueuedEventContext extx = new ExceptionQueuedEventContext(ctx, t);
-        if (booleanKey != null) {
-            extx.getAttributes().put(booleanKey, Boolean.TRUE);
-        }
-        ctx.getApplication().publishEvent(ctx, ExceptionQueuedEvent.class, extx);
-
-    }
-
-
-    /**
-     * Handle <code>afterPhase</code> <code>PhaseListener</code> events.
-     * @param context the FacesContext for the current request
-     * @param listenersIterator a ListIterator for the PhaseListeners that need
-     *  to be invoked
-     * @param event the event to pass to each of the invoked listeners
-     */
-    protected void handleAfterPhase(FacesContext context,
-                                    ListIterator<PhaseListener> listenersIterator,
-                                    PhaseEvent event) {
-
-        try {
-            Flash flash = context.getExternalContext().getFlash();
-            flash.doPostPhaseActions(context);
-        } catch (UnsupportedOperationException uoe) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                 LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
-            }    
-        }
-        while (listenersIterator.hasPrevious()) {
-            PhaseListener listener = listenersIterator.previous();
-            if (this.getId().equals(listener.getPhaseId()) ||
-                PhaseId.ANY_PHASE.equals(listener.getPhaseId())) {
-                try {
-                    listener.afterPhase(event);
-                } catch (Exception e) {
-                    queueException(context,
-                                   e,
-                                   ExceptionQueuedEventContext.IN_AFTER_PHASE_KEY);
-                    return;
-                }
-            }
-        }
-
-    }
-
-
-     /**
-     * Handle <code>beforePhase</code> <code>PhaseListener</code> events.
-     * @param context the FacesContext for the current request
-     * @param listenersIterator a ListIterator for the PhaseListeners that need
-     *  to be invoked
-     * @param event the event to pass to each of the invoked listeners
-     */
-     protected void handleBeforePhase(FacesContext context,
-                                      ListIterator<PhaseListener> listenersIterator,
-                                      PhaseEvent event) {
-
-         try {
-            Flash flash = context.getExternalContext().getFlash();
-            flash.doPrePhaseActions(context);
-         } catch (UnsupportedOperationException uoe) {
-             if (LOGGER.isLoggable(Level.FINE)) {
-                 LOGGER.fine("ExternalContext.getFlash() throw UnsupportedOperationException -> Flash unavailable");
-             }
-         }
-         RequestStateManager.clearAttributesForPhase(context,
-                                                     context.getCurrentPhaseId());
-         while (listenersIterator.hasNext()) {
-             PhaseListener listener = listenersIterator.next();
-             if (this.getId().equals(listener.getPhaseId()) ||
-                 PhaseId.ANY_PHASE.equals(listener.getPhaseId())) {
-                 try {
-                     listener.beforePhase(event);
-                 } catch (Exception e) {
-                     queueException(context,
-                                    e,
-                                    ExceptionQueuedEventContext.IN_BEFORE_PHASE_KEY);
-                     // move the iterator pointer back one
-                     if (listenersIterator.hasPrevious()) {
-                         listenersIterator.previous();
-                     }
-                     return;
-                 }
-             }
-         }
-
-     }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * @param context the FacesContext for the current request
-     * @return <code>true</code> if <code>FacesContext.responseComplete()</code>
-     *  or <code>FacesContext.renderResponse()</code> and the phase is not
-     *  RENDER_RESPONSE, otherwise return <code>false</code>
-     */
-    private boolean shouldSkip(FacesContext context) {
-
-        if (context.getResponseComplete()) {
-            return (true);
-        } else if (context.getRenderResponse() &&
-                   !PhaseId.RENDER_RESPONSE.equals(this.getId())) {
-            return (true);
-        } else {
-            return (false);
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/ProcessValidationsPhase.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/ProcessValidationsPhase.java
deleted file mode 100644
index 360ea07..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/ProcessValidationsPhase.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.lifecycle;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * ProcessValidationsPhase executes <code>processValidators</code> on each
- * component in the tree.
- */
-public class ProcessValidationsPhase extends Phase {
-
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute(FacesContext facesContext) throws FacesException {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Entering ProcessValidationsPhase");
-        }
-        UIComponent component = facesContext.getViewRoot();
-        assert (null != component);
-
-        try {
-            component.processValidators(facesContext);
-        } catch (RuntimeException re) {
-            String exceptionMessage = re.getMessage();
-            if (null != exceptionMessage) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING, exceptionMessage, re);
-                }
-            }
-            throw new FacesException(exceptionMessage, re);
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Exiting ProcessValidationsPhase");
-        }
-
-    }
-
-
-    public PhaseId getId() {
-
-        return PhaseId.PROCESS_VALIDATIONS;
-
-    }
-
-
-// The testcase for this class is TestProcessValidationsPhase.java
-
-} // end of class ProcessValidationsPhase
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/RenderResponsePhase.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/RenderResponsePhase.java
deleted file mode 100644
index 698a7ea..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/RenderResponsePhase.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// RenderResponsePhase.java
-
-package com.sun.faces.lifecycle;
-
-
-import javax.faces.FacesException;
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.application.ViewHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialViewContext;
-import javax.faces.event.PhaseId;
-
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.DebugUtil;
-
-import javax.faces.event.PreRenderViewEvent;
-
-
-/**
- * <B>Lifetime And Scope</B> <P> Same lifetime and scope as
- * DefaultLifecycleImpl.
- *
- */
-
-public class RenderResponsePhase extends Phase {
-
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute(FacesContext facesContext) throws FacesException {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Entering RenderResponsePhase");
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("About to render view " +
-                 facesContext.getViewRoot().getViewId());
-        }
-        // For requests intended to produce a partial response, we need prohibit
-        // writing any content outside of the view itself (f:view).
-        PartialViewContext partialViewContext = facesContext.getPartialViewContext();
-        
-        try {
-
-            ViewHandler vh = facesContext.getApplication().getViewHandler();
-
-            ViewDeclarationLanguage vdl =
-                  vh.getViewDeclarationLanguage(facesContext,
-                                                    facesContext.getViewRoot().getViewId());
-            if (vdl != null) {
-                vdl.buildView(facesContext, facesContext.getViewRoot());
-            }
-
-            boolean viewIdsUnchanged;
-            do {
-                String beforePublishViewId = facesContext.getViewRoot().getViewId();
-                // the before render event on the view root is a special case to keep door open for navigation
-                // this must be called *after* PDL.buildView() and before VH.renderView()
-                facesContext.getApplication().publishEvent(facesContext,
-                                                           PreRenderViewEvent.class,
-                                                           facesContext.getViewRoot());
-                String afterPublishViewId = facesContext.getViewRoot().getViewId();
-                viewIdsUnchanged = beforePublishViewId == null && afterPublishViewId == null ||
-                        (beforePublishViewId != null && afterPublishViewId != null) &&
-                        beforePublishViewId.equals(afterPublishViewId);
-                if (facesContext.getResponseComplete()) {
-                    return;
-                }
-            } while (!viewIdsUnchanged);
-            
-            //render the view
-            vh.renderView(facesContext, facesContext.getViewRoot());
-
-        } catch (IOException e) {
-            throw new FacesException(e.getMessage(), e);
-        }
-
-        if (LOGGER.isLoggable(Level.FINEST)) {
-            LOGGER.log(Level.FINEST, "+=+=+=+=+=+= View structure printout for " + facesContext.getViewRoot().getViewId());
-            DebugUtil.printTree(facesContext.getViewRoot(), LOGGER, Level.FINEST);
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Exiting RenderResponsePhase");
-        }
-
-    }
-
-
-    public PhaseId getId() {
-
-        return PhaseId.RENDER_RESPONSE;
-
-    }
-
-
-// The testcase for this class is TestRenderResponsePhase.java
-
-} // end of class RenderResponsePhase
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/RestoreViewPhase.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/RestoreViewPhase.java
deleted file mode 100644
index abe3ab7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/RestoreViewPhase.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// RestoreViewPhase.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.RIConstants;
-import java.util.ListIterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.application.ViewExpiredException;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.el.MethodExpression;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.lifecycle.Lifecycle;
-
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import java.util.Collection;
-import java.util.Map;
-import javax.faces.component.UIViewParameter;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostRestoreStateEvent;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.view.ViewMetadata;
-
-/**
- * <B>Lifetime And Scope</B> <P> Same lifetime and scope as
- * DefaultLifecycleImpl.
- *
- */
-
-public class RestoreViewPhase extends Phase {
-
-    private static final String WEBAPP_ERROR_PAGE_MARKER =
-            "javax.servlet.error.message";
-
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-    private WebConfiguration webConfig;
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public PhaseId getId() {
-
-        return PhaseId.RESTORE_VIEW;
-
-    }
-
-
-    public void doPhase(FacesContext context,
-                        Lifecycle lifecycle,
-                        ListIterator<PhaseListener> listeners) {
-
-        Util.getViewHandler(context).initView(context);
-        super.doPhase(context, lifecycle, listeners);
-
-        // Notify View Root after phase listener (if registered)
-        notifyAfter(context, lifecycle);
-    }
-
-    /**
-     * PRECONDITION: the necessary factories have been installed in the
-     * ServletContext attr set. <P>
-     * <p/>
-     * POSTCONDITION: The facesContext has been initialized with a tree.
-     */
-
-    public void execute(FacesContext facesContext) throws FacesException {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Entering RestoreViewPhase");
-        }
-        if (null == facesContext) {
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_CONTEXT_ERROR_MESSAGE_ID));
-        }
-
-        // If an app had explicitely set the tree in the context, use that;
-        //
-        UIViewRoot viewRoot = facesContext.getViewRoot();
-        if (viewRoot != null) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.fine("Found a pre created view in FacesContext");
-            }
-            facesContext.getViewRoot().setLocale(
-                 facesContext.getExternalContext().getRequestLocale());
-
-            // do per-component actions
-            deliverPostRestoreStateEvent(facesContext);
-
-            if (!facesContext.isPostback()) {
-                facesContext.renderResponse();
-            }
-            return;
-        }
-
-        try {
-
-            // Reconstitute or create the request tree
-            Map requestMap = facesContext.getExternalContext().getRequestMap();
-            String viewId = (String)
-              requestMap.get("javax.servlet.include.path_info");
-            if (viewId == null) {
-                viewId = facesContext.getExternalContext().getRequestPathInfo();
-            }
-
-            // It could be that this request was mapped using
-            // a prefix mapping in which case there would be no
-            // path_info.  Query the servlet path.
-            if (viewId == null) {
-                viewId = (String)
-                  requestMap.get("javax.servlet.include.servlet_path");
-            }
-
-            if (viewId == null) {
-                viewId = facesContext.getExternalContext().getRequestServletPath();
-            }
-
-            if (viewId == null) {
-                throw new FacesException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_REQUEST_VIEW_ERROR_MESSAGE_ID));
-            }
-
-            ViewHandler viewHandler = Util.getViewHandler(facesContext);
-
-            boolean isPostBack = (facesContext.isPostback() && !isErrorPage(facesContext));
-            if (isPostBack) {
-                facesContext.setProcessingEvents(false);
-            // try to restore the view
-                viewRoot = viewHandler.restoreView(facesContext, viewId);
-                if (viewRoot == null) {
-                    if (is11CompatEnabled(facesContext)) {
-                        // 1.1 -> create a new view and flag that the response should
-                        //        be immediately rendered
-                        if (LOGGER.isLoggable(Level.FINE)) {
-                            LOGGER.fine("Postback: recreating a view for " + viewId);
-                        }
-                        viewRoot = viewHandler.createView(facesContext, viewId);
-                        facesContext.renderResponse();
-
-                    } else {
-                        Object[] params = {viewId};
-                        throw new ViewExpiredException(
-                                MessageUtils.getExceptionMessageString(
-                                MessageUtils.RESTORE_VIEW_ERROR_MESSAGE_ID,
-                                params),
-                                viewId);
-                    }
-                }
-
-                facesContext.setViewRoot(viewRoot);
-                facesContext.setProcessingEvents(true);
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Postback: restored view for " + viewId);
-                }
-            } else {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("New request: creating a view for " + viewId);
-                }
-
-                ViewDeclarationLanguage vdl = facesContext.getApplication().getViewHandler().getViewDeclarationLanguage(facesContext, viewId);
-                facesContext.getAttributes().put(RIConstants.VIEWID_KEY_NAME, viewId);
-
-                if (vdl != null) {
-                    // If we have one, get the ViewMetadata...
-                    ViewMetadata metadata = vdl.getViewMetadata(facesContext, viewId);
-
-                    if (metadata != null) { // perhaps it's not supported
-                        // and use it to create the ViewRoot.  This will have, at most
-                        // the UIViewRoot and its metadata facet.
-                        viewRoot = metadata.createMetadataView(facesContext);
-
-                        // Only skip to render response if there are no view parameters
-                        Collection<UIViewParameter> params =
-                                ViewMetadata.getViewParameters(viewRoot);
-                        if (params.isEmpty()) {
-                            facesContext.renderResponse();
-                        }
-                    }
-                } else {
-                    facesContext.renderResponse();
-                }
-
-                if (null == viewRoot) {
-                    viewRoot = (Util.getViewHandler(facesContext)).
-                        createView(facesContext, viewId);
-                }
-                facesContext.setViewRoot(viewRoot);
-                assert (null != viewRoot);
-            }
-        }
-        finally {
-            deliverPostRestoreStateEvent(facesContext);
-        }
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Exiting RestoreViewPhase");
-        }
-
-    }
-
-    private void deliverPostRestoreStateEvent(FacesContext facesContext) throws FacesException {
-        UIViewRoot root = facesContext.getViewRoot();
-        final PostRestoreStateEvent postRestoreStateEvent = new PostRestoreStateEvent(root);
-        try {
-            root.visitTree(VisitContext.createVisitContext(facesContext),
-                    new VisitCallback() {
-
-                        public VisitResult visit(VisitContext context, UIComponent target) {
-                            postRestoreStateEvent.setComponent(target);
-                            target.processEvent(postRestoreStateEvent);
-                            //noinspection ReturnInsideFinallyBlock
-                            return VisitResult.ACCEPT;
-                        }
-                    });
-        } catch (AbortProcessingException e) {
-            facesContext.getApplication().publishEvent(facesContext,
-                    ExceptionQueuedEvent.class,
-                    new ExceptionQueuedEventContext(facesContext,
-                    e,
-                    null,
-                    PhaseId.RESTORE_VIEW));
-        }
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    /**
-     * Notify afterPhase listener that is registered on the View Root.
-     * @param context the FacesContext for the current request
-     * @param lifecycle lifecycle instance
-     */
-    private void notifyAfter(FacesContext context, Lifecycle lifecycle) {
-        UIViewRoot viewRoot = context.getViewRoot();
-        MethodExpression afterPhase = viewRoot.getAfterPhaseListener();
-        if (null != afterPhase) {
-            try {
-                PhaseEvent event = new PhaseEvent(context, PhaseId.RESTORE_VIEW, lifecycle);
-                afterPhase.invoke(context.getELContext(), new Object[]{event});
-            }
-            catch (Exception e) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "severe.component.unable_to_process_expression",
-                               new Object[] { afterPhase.getExpressionString(),
-                               ("afterPhase")});
-                }
-                return;
-            }
-        }
-    }
-
-
-    /**
-     * The Servlet specification states that if an error occurs
-     * in the application and there is a matching error-page declaration,
-     * the that original request the cause the error is forwarded
-     * to the error page.
-     *
-     * If the error occurred during a post-back and a matching
-     * error-page definition was found, then an attempt to restore
-     * the error view would be made as the javax.faces.ViewState
-     * marker would still be in the request parameters.
-     *
-     * Use this method to determine if the current request is
-     * an error page to avoid the above condition.
-     *
-     * @param context the FacesContext for the current request
-     * @return <code>true</code> if <code>WEBAPP_ERROR_PAGE_MARKER</code>
-     *  is found in the request, otherwise return <code>false</code>
-     */
-    private static boolean isErrorPage(FacesContext context) {
-
-        return (context.getExternalContext().
-                    getRequestMap().get(WEBAPP_ERROR_PAGE_MARKER) != null);
-
-    }
-
-
-    private WebConfiguration getWebConfig(FacesContext context) {
-
-        if (webConfig == null) {
-            webConfig = WebConfiguration.getInstance(context.getExternalContext());
-        }
-        return webConfig;
-
-    }
-
-    private boolean is11CompatEnabled(FacesContext context) {
-
-        return (getWebConfig(context).isOptionEnabled(
-              BooleanWebContextInitParameter.EnableRestoreView11Compatibility));
-        
-    }
-
-    // The testcase for this class is TestRestoreViewPhase.java
-
-} // end of class RestoreViewPhase
diff --git a/jsf-ri/src/main/java/com/sun/faces/lifecycle/UpdateModelValuesPhase.java b/jsf-ri/src/main/java/com/sun/faces/lifecycle/UpdateModelValuesPhase.java
deleted file mode 100644
index d66ea33..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/lifecycle/UpdateModelValuesPhase.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.util.FacesLogger;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-
-/**
- * UpdateModelValuesPhase executes <code>processUpdates</code> on each
- * component in the tree so that it may have a chance to update its model value.
- */
-public class UpdateModelValuesPhase extends Phase {
-
-
-    // Log instance for this class
-    private static Logger LOGGER = FacesLogger.LIFECYCLE.getLogger();
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute(FacesContext facesContext) {
-
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Entering UpdateModelValuesPhase");
-        }
-        UIComponent component = facesContext.getViewRoot();
-        assert (null != component);
-        String exceptionMessage = null;
-
-        try {
-            component.processUpdates(facesContext);
-        } catch (IllegalStateException e) {
-            exceptionMessage = e.getMessage();
-        } catch (FacesException fe) {
-            exceptionMessage = fe.getMessage();
-        }
-
-        // Just log the exception.  Any exception occurring from
-        // processUpdates should have been stored as a message
-        // on FacesContext.
-        if (exceptionMessage != null) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.warning(exceptionMessage);
-            }
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.fine("Exiting UpdateModelValuesPhase");
-        }
-
-    }
-
-
-    public PhaseId getId() {
-
-        return PhaseId.UPDATE_MODEL_VALUES;
-
-    }
-
-
-// The testcase for this class is TestUpdateModelValuesPhase.java
-
-} // end of class UpdateModelValuesPhase
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/BeanBuilder.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/BeanBuilder.java
deleted file mode 100644
index 6d0fe4a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/BeanBuilder.java
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.spi.InjectionProvider;
-import com.sun.faces.spi.InjectionProviderException;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.faces.context.FacesContext;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>Abstract builder for creating and populating JSF managed beans.</p>
- */
-public abstract class BeanBuilder {
-
-    private static Logger LOGGER = FacesLogger.MANAGEDBEAN.getLogger();
-
-    private List<String> messages;
-    private List<String> references;
-    private boolean isInjectible;
-    private boolean baked;
-
-    private Class<?> beanClass;
-    protected final ManagedBeanInfo beanInfo;
-
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**     
-     * @param beanInfo the managed bean metadata
-     */
-    public BeanBuilder(ManagedBeanInfo beanInfo) {
-
-        this.beanInfo = beanInfo;
-        
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public Object build(InjectionProvider injectionProvider,
-                        FacesContext context) {
-
-        Object bean = newBeanInstance();
-        injectResources(bean, injectionProvider);
-        buildBean(bean, context);
-        invokePostConstruct(bean, injectionProvider);
-        return bean;
-
-    }
-
-
-    public void destroy(InjectionProvider injectionProvider,
-                          Object bean) {
-
-        if (isInjectible) {
-            try {
-                injectionProvider.invokePreDestroy(bean);
-            } catch (InjectionProviderException ipe) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE, ipe.getMessage(), ipe);
-                }
-            }
-        }
-
-    }
-
-
-    public boolean hasMessages() {
-
-        return (messages != null && !messages.isEmpty());
-
-    }
-
-
-    public List<String> getMessages() {
-
-        return messages;
-
-    }
-
-    public String getScope() {
-
-        return beanInfo.getScope();
-
-    }
-
-
-    public boolean isBaked() {
-
-        return baked;
-
-    }
-
-
-    public Map<String,String> getDescriptions() {
-
-        return beanInfo.getDescriptions();
-        
-    }
-
-
-    public Class<?> getBeanClass() {
-
-        return loadBeanClass();
-
-    }
-
-    public ManagedBeanInfo getManagedBeanInfo() {
-
-        return beanInfo;
-        
-    }
-
-    
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected abstract void buildBean(Object bean, FacesContext context);
-
-
-
-    protected void baked() {
-        baked = true;
-    }
-
-    protected Object newBeanInstance() {
-
-        try {
-            return loadBeanClass().newInstance();
-        } catch (Exception e) {
-            String message = MessageUtils.getExceptionMessageString(
-                 MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID,
-                 beanInfo.getClassName());
-            throw new ManagedBeanCreationException(message, e);
-        }
-
-    }
-    
-
-
-    protected void injectResources(Object bean,
-                                   InjectionProvider injectionProvider) {
-
-        if (isInjectible) {
-            try {
-                injectionProvider.inject(bean);
-            } catch (InjectionProviderException ipe) {
-                String message =
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.MANAGED_BEAN_INJECTION_ERROR_ID,
-                          beanInfo.getName());
-                throw new ManagedBeanCreationException(message, ipe);
-            }
-        }
-
-    }
-
-
-    protected void invokePostConstruct(Object bean,
-                                       InjectionProvider injectionProvider) {
-
-        if (isInjectible) {
-            try {
-                injectionProvider.invokePostConstruct(bean);
-            } catch (InjectionProviderException ipe) {
-                String message =
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.MANAGED_BEAN_INJECTION_ERROR_ID,
-                          beanInfo.getName());
-                throw new ManagedBeanCreationException(message, ipe);
-            }
-        }
-
-    }
-
-
-    protected Class loadClass(String className)  {
-        Class valueType = String.class;
-        if (null != className && 0 < className.length()) {
-            if (className.equals(Boolean.TYPE.getName())) {
-                valueType = Boolean.TYPE;
-            } else if (className.equals(Byte.TYPE.getName())) {
-                valueType = Byte.TYPE;
-            } else if (className.equals(Double.TYPE.getName())) {
-                valueType = Double.TYPE;
-            } else if (className.equals(Float.TYPE.getName())) {
-                valueType = Float.TYPE;
-            } else if (className.equals(Integer.TYPE.getName())) {
-                valueType = Integer.TYPE;
-            } else if (className.equals(Character.TYPE.getName())) {
-                valueType = Character.TYPE;
-            } else if (className.equals(Short.TYPE.getName())) {
-                valueType = Short.TYPE;
-            } else if (className.equals(Long.TYPE.getName())) {
-                valueType = Long.TYPE;
-            } else {
-                try {
-                    valueType = Util.loadClass(className, this);
-                } catch (ClassNotFoundException cnfe) {
-                    String message =
-                         MessageUtils.getExceptionMessageString(
-                              MessageUtils.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR_ID,
-                              className,
-                              beanInfo.getName());
-                    throw new ManagedBeanPreProcessingException(message);
-                } catch (NoClassDefFoundError ncdfe) {
-                    String message =
-                         MessageUtils.getExceptionMessageString(
-                              MessageUtils.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR_ID,
-                              className,
-                              beanInfo.getName(),
-                              ncdfe.getMessage());
-                    throw new ManagedBeanPreProcessingException(message);
-                }
-            }
-        }
-        return valueType;
-    }
-
-
-    protected Map<Expression,Expression> getBakedMap(String keyClass,
-                                                     String valueClass,
-                                                     Map<String,String> mapEntries) {
-
-        if (mapEntries == null || mapEntries.isEmpty()) {
-            return new LinkedHashMap<Expression,Expression>(4, 1.0f);
-        }
-        Class<?> keyClazz = loadClass(keyClass);
-        Class<?> valueClazz = loadClass(valueClass);
-        Map<Expression,Expression> target = new
-             LinkedHashMap<Expression,Expression>(mapEntries.size(), 1.0f);
-        for (Map.Entry<String,String> m : mapEntries.entrySet()) {
-            String sk = m.getKey();
-            String sv = m.getValue();
-
-            target.put(new Expression(sk, keyClazz),
-                           (!sv.equals(ManagedBeanInfo.NULL_VALUE))
-                           ? new Expression(sv, valueClazz)
-                           : null);
-        }
-
-        return target;
-        
-    }
-
-
-    protected List<Expression> getBakedList(String valueClass,
-                                            List<String> entries) {
-
-        Class<?> valueClazz = loadClass(valueClass);
-
-        //noinspection StringBufferWithoutInitialCapacity
-        List<Expression> target = new ArrayList<Expression>(entries.size());
-        for (String item : entries) {
-            target.add((!ManagedBeanInfo.NULL_VALUE.equals(item))
-                       ? new Expression(item, valueClazz)
-                       : null);
-        }
-
-        return target;
-
-    }
-
-
-    protected void initMap(Map<Expression,Expression> source,
-                           Map target,
-                           FacesContext context) {
-
-        for (Map.Entry<Expression,Expression> entry
-               : source.entrySet()) {
-            Expression k = entry.getKey();
-            Expression v = entry.getValue();
-            //noinspection unchecked
-            target.put(k.evaluate(context.getELContext()),
-                  (v != null) ? v.evaluate(context.getELContext()) : null);
-        }
-        
-    }
-
-
-    protected void initList(List<Expression> source,
-                            List target,
-                            FacesContext context) {
-
-        for (int i = 0, size = source.size(); i < size; i++) {
-            Expression value = source.get(i);
-            //noinspection unchecked
-            target.add((value != null)
-                       ? value.evaluate(context.getELContext())
-                       : null);
-        }
-
-    }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-
-    void queueMessage(String message) {
-        if (messages == null) {
-            messages = new ArrayList<String>(4);
-        }
-        messages.add(message);
-    }
-
-
-    void queueMessages(List<String> messages) {
-        if (this.messages == null) {
-            this.messages = messages;
-        } else {
-            this.messages.addAll(messages);
-        }
-    }
-
-    /**
-     * Performs sanity checking of the <code>ManagedBeanInfo</code>
-     * instance provided when the <code>BeanBuilder</code> instance
-     * was created.  If any issues are found, queue messages which will
-     * be logged when first baked and exposed as exceptions at runtime
-     * per the spec.
-     */
-    void bake() {
-
-        loadBeanClass();
-        validateScope();
-
-    }
-
-
-    List<String> getReferences() {
-
-        return references;
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private Class<?> loadBeanClass() {
-        if (beanClass == null) {
-           String className = beanInfo.getClassName();
-            Class<?> clazz = loadClass(className);
-            ApplicationAssociate associate =
-                  ApplicationAssociate.getCurrentInstance();
-
-            if (!associate.isDevModeEnabled()) {
-                beanClass = clazz;
-            }
-
-            // validate the bean class is public and has a public
-            // no-arg ctor
-            int classModifiers = clazz.getModifiers();
-            if (!Modifier.isPublic(classModifiers)) {
-                String message =
-                      MessageUtils.getExceptionMessageString(
-                            MessageUtils.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR_ID,
-                            className,
-                            beanInfo.getName());
-                queueMessage(message);
-            }
-            if (Modifier.isInterface(classModifiers)
-                || Modifier.isAbstract(classModifiers)) {
-                String message =
-                      MessageUtils.getExceptionMessageString(
-                            MessageUtils.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR_ID,
-                            className,
-                            beanInfo.getName());
-                queueMessage(message);
-            }
-
-            try {
-                Constructor ctor =
-                      clazz.getConstructor(RIConstants.EMPTY_CLASS_ARGS);
-                if (!Modifier.isPublic(ctor.getModifiers())) {
-                    String message =
-                          MessageUtils.getExceptionMessageString(
-                                MessageUtils.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR_ID,
-                                className,
-                                beanInfo.getName());
-                    queueMessage(message);
-                }
-            } catch (NoSuchMethodException nsme) {
-                String message =
-                      MessageUtils.getExceptionMessageString(
-                            MessageUtils.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR_ID,
-                            className,
-                            beanInfo.getName());
-                queueMessage(message);
-            }
-
-            if (!hasMessages()) {
-                // class is ok, scan for annotations
-                this.isInjectible = scanForAnnotations(clazz);
-            }
-            return clazz;
-        }
-        return beanClass;
-    }
-
-
-    private void validateScope() {
-
-        String scope = beanInfo.getScope();
-        if (!ELUtils.isScopeValid(scope)) {
-            // custom scope - make sure it's valid
-            if (!ELUtils.isExpression(scope)) {
-                String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_INVALID_SCOPE_ERROR_ID,
-                         beanInfo.getName());
-                throw new ManagedBeanPreProcessingException(message);
-            }
-        }
-
-    }
-
-
-    private boolean scanForAnnotations(Class<?> clazz) {
-        if (clazz != null) {
-            while (clazz != Object.class) {
-                Field[] fields = clazz.getDeclaredFields();
-                if (fields != null) {
-                    for (Field field : fields) {
-                        if (field.getAnnotations().length > 0) {
-                            return true;
-                        }
-                    }
-                }
-
-                Method[] methods = clazz.getDeclaredMethods();
-                if (methods != null) {
-                    for (Method method : methods) {
-                        if (method.getDeclaredAnnotations().length > 0) {
-                            return true;
-                        }
-                    }
-                }
-
-                clazz = clazz.getSuperclass();
-            }
-        }
-
-        return false;
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * This is a holder class for ValueExpressions.  It will try to perform
-     * static lifespan checking of the expression per the specification.  If
-     * it is unable to determine the scope of the expression, validation will
-     * be deferred to runtime.
-     */
-    protected class Expression {
-
-        private String expressionString;
-        private Class<?> expectedType;
-        private ValueExpression ve;
-        private boolean validateLifespanRuntime = false;
-        private String[] segment = new String[1];
-
-        // -------------------------------------------------------- Constructors
-
-
-        public Expression(String expressionString,
-                          Class<?> expectedType) {
-
-            this.expressionString = expressionString;
-            this.expectedType = expectedType;
-
-            if (ELUtils.isExpression(this.expressionString)) {
-                List<String> expressions = ELUtils.getExpressionsFromString(this.expressionString);
-                if (!expressions.isEmpty()) {
-                    for (String expression : expressions) {
-                        ELUtils.getScope(expression, segment);
-                        if (segment[0] != null) {
-                            if (references == null) {
-                                references = new ArrayList<String>(4);
-                            }
-                            if (!references.contains(segment[0])) {
-                                references.add(segment[0]);
-                            }
-                        }
-                        segment[0] = null;
-                    }
-                }
-                if (!ELUtils.isExpression(beanInfo.getScope())) {
-                    ELUtils.Scope expressionScope = ELUtils
-                          .getNarrowestScopeFromExpression(this.expressionString);
-                    if (expressionScope != null) {
-                        // expression scope isn't null which means we have enough
-                        // information to statically validate.
-                        validateLifespan(expressionScope,
-                                         validateLifespanRuntime);
-                    } else {
-                        validateLifespanRuntime = true;
-                    }
-                }
-            } else {
-                if (this.expressionString != null) {
-                    this.expressionString =
-                          "#{\""
-                          + this.expressionString.replaceAll("[\\\\\"]",
-                                                             "\\\\$0")
-                          + "\"}";
-                }
-            }
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public Object evaluate(ELContext context) {
-            if (this.expressionString == null) {
-                return null;
-            }
-            if (validateLifespanRuntime) {
-                ELUtils.Scope expScope =
-                     ELUtils.getScope(this.expressionString, segment);
-                validateLifespan(expScope, true);
-            }
-            if (ve == null) {
-                ve = ((expectedType.isPrimitive())
-                      ? ELUtils.createValueExpression(expressionString, expectedType)
-                      : ELUtils.createValueExpression(expressionString, Object.class));
-            }
-            if (expectedType.isPrimitive()) {
-                return ve.getValue(context);
-            } else {
-                Object tmpval = ve.getValue(context);
-                return ((tmpval != null) ? ELUtils.coerce(tmpval, expectedType) : null);
-            }
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private void validateLifespan(ELUtils.Scope expressionScope, boolean runtime) {
-            if (ELUtils.isScopeValid(beanInfo.getScope())) {
-                if (!ELUtils.hasValidLifespan(expressionScope,
-                                              ELUtils.getScope(beanInfo.getScope()))) {
-                    String message = MessageUtils.getExceptionMessageString(
-                          MessageUtils.INVALID_SCOPE_LIFESPAN_ERROR_MESSAGE_ID,
-                          this.expressionString,
-                          expressionScope,
-                          beanInfo.getName(),
-                          beanInfo.getScope());
-                    if (runtime) {
-                        throw new ManagedBeanCreationException(message);
-                    } else {
-                        queueMessage(message);
-                    }
-                }
-            }
-
-        }
-
-    } // END Expression
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/BeanManager.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/BeanManager.java
deleted file mode 100644
index 58d324e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/BeanManager.java
+++ /dev/null
@@ -1,782 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Locale;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.context.FacesContext;
-import javax.faces.event.*;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.el.ELContext;
-import javax.el.ELResolver;
-import javax.el.FunctionMapper;
-import javax.el.VariableMapper;
-
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.spi.InjectionProvider;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-
-/**
- * <p>Main interface for dealing with JSF managed beans</p>
- */
-public class BeanManager implements SystemEventListener {
-
-    private static final Logger LOGGER = FacesLogger.MANAGEDBEAN.getLogger();
-
-    @SuppressWarnings({"CollectionWithoutInitialCapacity"})
-    private Map<String,BeanBuilder> managedBeans =
-         new HashMap<String,BeanBuilder>();
-    private InjectionProvider injectionProvider;
-    private boolean configPreprocessed;
-    private boolean lazyBeanValidation;
-    private List<String> eagerBeans = new ArrayList<String>(4);
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public BeanManager(InjectionProvider injectionProvider,
-                       boolean lazyBeanValidation) {
-
-        this.injectionProvider = injectionProvider;
-        this.lazyBeanValidation = lazyBeanValidation;
-
-    }
-
-
-    public BeanManager(InjectionProvider injectionProvider,
-                       Map<String,BeanBuilder> managedBeans,
-                       boolean lazyBeanValidation) {
-
-        this(injectionProvider, lazyBeanValidation);
-        this.managedBeans = managedBeans;
-
-    }
-
-
-    // ---------------------------------------- Methods from SystemEventListener
-
-
-    /**
-     * <p>
-     * Invoke PreDestroy methods on any managed beans within the provided scope.
-     * </p>
-     *
-     * @param event the {@link ScopeContext}
-     *
-     * @throws AbortProcessingException
-     */
-    public void processEvent(SystemEvent event)
-    throws AbortProcessingException {
-
-        ScopeContext scopeContext = ((PreDestroyCustomScopeEvent) event).getContext();
-        Map<String,Object> scope = scopeContext.getScope();
-        for (Map.Entry<String,Object> entry : scope.entrySet()) {
-            String name = entry.getKey();
-            if (isManaged(name)) {
-                BeanBuilder builder = getBuilder(name);
-                builder.destroy(injectionProvider, entry.getValue());
-            }
-        }
-
-
-    }
-
-
-    /**
-     * @see SystemEventListener#isListenerForSource(Object)
-     */
-    public boolean isListenerForSource(Object source) {
-
-        return (source instanceof ScopeContext);
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void register(ManagedBeanInfo beanInfo) {
-        BeanBuilder builder;
-        if (beanInfo.hasListEntry()) {
-            if (beanInfo.hasMapEntry() || beanInfo.hasManagedProperties()) {
-                String message =
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.MANAGED_BEAN_AS_LIST_CONFIG_ERROR_ID,
-                          beanInfo.getName());
-                builder = new ErrorBean(beanInfo, message);
-                //addBean(beanInfo.getName(), new ErrorBean(beanInfo, message));
-            } else {
-                builder = new ManagedListBeanBuilder(beanInfo);
-                //addBean(beanInfo.getName(),
-                //        new ManagedListBeanBuilder(beanInfo));
-            }
-        } else if (beanInfo.hasMapEntry()) {
-            if (beanInfo.hasManagedProperties()) {
-                String message =
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.MANAGED_BEAN_AS_MAP_CONFIG_ERROR_ID,
-                          beanInfo.getName());
-                builder = new ErrorBean(beanInfo, message);
-                //addBean(beanInfo.getName(), new ErrorBean(beanInfo, message));
-            } else {
-                builder = new ManagedMapBeanBuilder(beanInfo);
-                //addBean(beanInfo.getName(), new ManagedMapBeanBuilder(beanInfo));
-            }
-        } else {
-            builder = new ManagedBeanBuilder(beanInfo);
-            //addBean(beanInfo.getName(), new ManagedBeanBuilder(beanInfo));
-        }
-
-        addBean(beanInfo.getName(), builder);
-        if (beanInfo.isEager()) {
-            eagerBeans.add(beanInfo.getName());
-        }
-
-    }
-
-    
-    public List<String> getEagerBeanNames() {
-
-        return eagerBeans;
-
-    }
-
-
-    public Map<String,BeanBuilder> getRegisteredBeans() {
-
-        return managedBeans;
-
-    }
-
-
-     public boolean isManaged(String name) {
-
-        return (managedBeans != null && managedBeans.containsKey(name));
-
-    }
-
-
-    public BeanBuilder getBuilder(String name) {
-
-        if (managedBeans != null) {
-            return managedBeans.get(name);
-        }
-        return null;
-
-    }
-
-
-    /**
-     * This should only be called during application init
-     */
-    public void preProcessesBeans() {
-
-        if (!configPreprocessed && !lazyBeanValidation) {
-            configPreprocessed = true;
-            for (Map.Entry<String, BeanBuilder> entry : managedBeans
-                 .entrySet()) {
-                preProcessBean(entry.getKey(), entry.getValue());
-            }
-        }
-
-    }
-
-
-    public boolean isBeanInScope(String name, BeanBuilder builder, FacesContext context) {
-        return ScopeManager.isInScope(name, builder.getScope(), context);
-
-    }
-
-
-    public Object getBeanFromScope(String name, BeanBuilder builder, FacesContext context) {
-        return ScopeManager.getFromScope(name, builder.getScope(), context);
-    }
-
-    public Object getBeanFromScope(String name, FacesContext context) {
-
-        String scope = this.getBuilder(name).getScope();
-        return ScopeManager.getFromScope(name, scope, context);
-
-    }
-
-
-
-
-    // ------------------------------------------------------- Lifecycle Methods
-
-    public Object create(String name, FacesContext facesContext) {
-        return create(name, managedBeans.get(name), facesContext);
-    }
-    
-    public Object create(String name, BeanBuilder builder, FacesContext facesContext) {
-        if (builder != null) {
-            if (lazyBeanValidation && !builder.isBaked()) {
-                preProcessBean(name, builder);
-            }
-            if (builder.hasMessages()) {
-                throw new ManagedBeanCreationException(buildMessage(name,
-                                                                    builder.getMessages(),
-                                                                    true));
-            } else {
-                return createAndPush(name, builder, facesContext);
-            }
-        }
-
-        return null;
-
-    }
-
-
-
-    public void destroy(String beanName, Object bean) {
-
-        BeanBuilder builder = managedBeans.get(beanName);
-        if (builder != null) {
-            builder.destroy(injectionProvider, bean);
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addBean(String beanName, BeanBuilder builder) {
-
-        if (configPreprocessed) {
-            preProcessBean(beanName, builder);
-        }
-        if (LOGGER.isLoggable(Level.WARNING) && managedBeans.containsKey(beanName)) {
-            LOGGER.log(Level.WARNING,
-                       "jsf.managed.bean.duplicate",
-                       new Object[] { beanName,
-                                      managedBeans.get(beanName).beanInfo.getClassName(),
-                                      builder.beanInfo.getClassName() });
-        }
-        managedBeans.put(beanName, builder);
-
-    }
-
-
-    private void validateReferences(BeanBuilder builder,
-                                    List<String> references,
-                                    List<String> messages) {
-
-        List<String> refs = builder.getReferences();
-        if (refs != null) {
-            for (String ref : refs) {
-                if (isManaged(ref)) {
-                    if (references.contains(ref)) {
-                        StringBuilder sb = new StringBuilder(64);
-                        String[] ra =
-                             references.toArray(new String[references.size()]);
-                        for (String reference : ra) {
-                            sb.append(reference);
-                            sb.append(" -> ");
-                        }
-                        sb.append(ref);
-
-                        String message = MessageUtils
-                             .getExceptionMessageString(MessageUtils.CYCLIC_REFERENCE_ERROR_ID,
-                                                        ra[0],
-                                                        sb.toString());
-                        messages.add(message);
-                    } else {
-                        BeanBuilder b = getBuilder(ref);
-                        // If the bean has no references, then it's not
-                        // a target for cyclic detection.  
-                        if (b.getReferences() != null) {
-                            references.add(ref);
-                            validateReferences(b, references, messages);
-                            references.remove(ref);
-                        }
-                    }
-                }
-            }
-        }
-
-    }
-
-
-    private synchronized void preProcessBean(String beanName,
-                                             BeanBuilder builder) {
-        if (!builder.isBaked()) {
-            try {
-                builder.bake();
-
-                // preProcess any dependent beans
-                List<String> propRefs = builder.getReferences();
-                if (propRefs != null) {
-                    for (String reference : propRefs) {
-                        if (isManaged(reference)) {
-                            BeanBuilder b = getBuilder(reference);
-                            preProcessBean(reference, b);
-                        }
-                    }
-                }
-
-                //noinspection CollectionWithoutInitialCapacity
-                List<String> refs = new ArrayList<String>();
-                refs.add(beanName);
-                //noinspection CollectionWithoutInitialCapacity
-                ArrayList<String> messages = new ArrayList<String>();
-                validateReferences(builder, refs, messages);
-                if (!messages.isEmpty()) {
-                    builder.queueMessages(messages);
-                }
-
-                if (builder.hasMessages()) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   buildMessage(beanName,
-                                                builder.getMessages(),
-                                                false));
-                    }
-                }
-            } catch (ManagedBeanPreProcessingException mbpe) {
-                if (ManagedBeanPreProcessingException.Type.CHECKED
-                     .equals(mbpe.getType())) {
-                    builder.queueMessage(mbpe.getMessage());
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   buildMessage(beanName,
-                                                builder.getMessages(),
-                                                false));
-                    }
-                } else {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR_ID,
-                         beanName);
-                    throw new ManagedBeanPreProcessingException(message, mbpe);
-                }
-            }
-        }
-
-    }
-
-    private Object createAndPush(String name,
-                                 BeanBuilder builder,
-                                 FacesContext facesContext) {
-
-        Object bean = builder.build(injectionProvider, facesContext);
-        ScopeManager.pushToScope(name, bean, builder.getScope(), facesContext);
-        return bean;
-
-    }
-
-
-    private String buildMessage(String name, List<String> messages,
-                                boolean runtime) {
-
-        StringBuilder sb = new StringBuilder(128);
-        if (runtime) {
-        sb.append(MessageUtils.getExceptionMessageString(
-             MessageUtils.MANAGED_BEAN_PROBLEMS_ERROR_ID, name));
-        } else {
-            sb.append(MessageUtils.getExceptionMessageString(
-                 MessageUtils.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR_ID, name));
-        }
-        for (String message : messages) {
-            sb.append("\n     - ").append(message);
-        }
-        return sb.toString();
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class ScopeManager {
-
-        private static final ConcurrentMap<String,ScopeHandler> handlerMap =
-             new ConcurrentHashMap<String,ScopeHandler>(5);
-        
-        static {
-            handlerMap.put(ELUtils.Scope.REQUEST.toString(), new RequestScopeHandler());
-            handlerMap.put(ELUtils.Scope.VIEW.toString(), new ViewScopeHandler());
-            handlerMap.put(ELUtils.Scope.SESSION.toString(), new SessionScopeHandler());
-            handlerMap.put(ELUtils.Scope.APPLICATION.toString(), new ApplicationScopeHandler());
-            handlerMap.put(ELUtils.Scope.NONE.toString(), new NoneScopeHandler());
-        }
-
-
-        static void pushToScope(String name,
-                                Object bean,
-                                String customScope,
-                                FacesContext context) {
-
-            ScopeHandler handler = getScopeHandler(customScope, context);
-            handler.handle(name, bean, context);
-
-        }
-
-
-        static boolean isInScope(String name,
-                                 String customScope,
-                                 FacesContext context) {
-
-            ScopeHandler handler = getScopeHandler(customScope, context);
-            return handler.isInScope(name, context);
-
-        }
-
-        static Object getFromScope(String name,
-                                   String customScope,
-                                   FacesContext context) {
-
-            ScopeHandler handler = getScopeHandler(customScope, context);
-            return handler.getFromScope(name, context);
-
-        }
-
-        private static ScopeHandler getScopeHandler(String customScope,
-                                                    FacesContext context) {
-
-            ScopeHandler handler = handlerMap.get(customScope);
-            if (handler == null) {
-                ExpressionFactory factory = context.getApplication().getExpressionFactory();
-                ValueExpression ve =
-                    factory.createValueExpression(context.getELContext(),
-                                                  customScope,
-                                                  Map.class);
-                handler = new CustomScopeHandler(ve);
-                handlerMap.putIfAbsent(customScope, handler);
-            }
-            return handler;
-
-        }
-
-        private interface ScopeHandler {
-
-            void handle(String name, Object bean, FacesContext context);
-
-            boolean isInScope(String name, FacesContext context);
-
-            Object getFromScope(String name, FacesContext context);
-
-        }
-
-        private static class NoneScopeHandler implements ScopeHandler {
-
-            public void handle(String name, Object bean, FacesContext context) {
-                // no-op
-            }
-
-            public boolean isInScope(String name, FacesContext context) {
-                return false;
-            }
-
-            public Object getFromScope(String name, FacesContext context) {
-                return null;
-            }
-        }
-
-        private static class RequestScopeHandler implements ScopeHandler {
-
-            public void handle(String name, Object bean, FacesContext context) {
-
-                context.getExternalContext().getRequestMap().put(name, bean);
-
-            }
-
-            public boolean isInScope(String name, FacesContext context) {
-
-                return context.getExternalContext().getRequestMap().containsKey(name);
-
-            }
-
-            public Object getFromScope(String name, FacesContext context) {
-
-                return context.getExternalContext().getRequestMap().get(name);
-
-            }
-
-        } // END RequestScopeHandler
-
-
-        private static class ViewScopeHandler implements ScopeHandler {
-
-            public void handle(String name, Object bean, FacesContext context) {
-
-                context.getViewRoot().getViewMap().put(name, bean);
-
-            }
-
-            public boolean isInScope(String name, FacesContext context) {
-
-                Map<String,Object> viewMap = context.getViewRoot().getViewMap(false);
-                return ((viewMap != null) && viewMap.containsKey(name));
-
-            }
-
-            public Object getFromScope(String name, FacesContext context) {
-
-                Map<String,Object> viewMap = context.getViewRoot().getViewMap(false);
-                return ((viewMap != null) ? viewMap.get(name) : null);
-
-            }
-
-        } // END ViewScopeHandler
-        
-
-        private static class SessionScopeHandler implements ScopeHandler  {
-
-            public void handle(String name, Object bean, FacesContext context) {
-
-                synchronized (context.getExternalContext().getSession(true)) {
-                    context.getExternalContext().getSessionMap().put(name, bean);
-                }
-
-            }
-
-            public boolean isInScope(String name, FacesContext context) {
-
-                return context.getExternalContext().getSessionMap().containsKey(name);
-
-            }
-
-            public Object getFromScope(String name, FacesContext context) {
-
-                return context.getExternalContext().getSessionMap().get(name);
-
-            }
-
-        } // END SessionScopeHandler
-
-
-        private static class ApplicationScopeHandler implements ScopeHandler {
-
-            public void handle(String name, Object bean, FacesContext context) {
-
-                synchronized (context.getExternalContext().getContext()) {
-                    context.getExternalContext().getApplicationMap().put(name, bean);
-                }
-
-            }
-
-            public boolean isInScope(String name, FacesContext context) {
-
-                return context.getExternalContext().getApplicationMap().containsKey(name);
-
-            }
-
-
-            public Object getFromScope(String name, FacesContext context) {
-
-                return context.getExternalContext().getApplicationMap().get(name);
-
-            }
-
-        } // END ApplicationScopeHandler
-
-
-        private static class CustomScopeHandler implements ScopeHandler {
-
-            private ValueExpression scope;
-
-            CustomScopeHandler(ValueExpression scope) {
-                this.scope = scope;
-            }
-
-            public void handle(String name, Object bean, FacesContext context) {
-
-                Map scopeMap = (Map) scope.getValue(getELContext(context));
-                
-                // IMPLEMENTATION PENDING.  I've added this to the Frame doc:
-                
-                /**
-                 * The runtime must must allow the value of this element to be 
-                 * an EL ValueExpression. If so, and the expression evaluates to
-                 * null, an informative error message including the expression 
-                 * string and the name of the bean must be logged. If the
-                 * expression evaluates to a Map, that Map is used as the
-                 * scope into which the bean will be stored. If storing the 
-                 * bean into the Map causes an Exception, the exception is 
-                 * allowed to flow up to the ExceptionHandler. If the 
-                 * ValueExpression does not evaluate to a Map, a
-                 * FacesException must be thrown with a message that includes 
-                 * the expression string, the toString() of the value, and 
-                 * the type of the value.
-                 * 
-                 */
-                
-                if (scopeMap != null) {
-                    synchronized (this) {
-                        //noinspection unchecked
-                        scopeMap.put(name, bean);
-                    }
-                } else {
-                    if (LOGGER.isLoggable(Level.WARNING)) {
-                        LOGGER.log(Level.WARNING,
-                                   "jsf.managed.bean.custom.scope.eval.null",
-                                   new Object[] { scope.getExpressionString() });
-                    }
-                }
-            }
-
-            public boolean isInScope(String name, FacesContext context) {
-
-                Map scopeMap = (Map) scope.getValue(getELContext(context));
-                if (scopeMap != null) {
-                    return scopeMap.containsKey(name);
-                } else {
-                    if (LOGGER.isLoggable(Level.WARNING)) {
-                        LOGGER.log(Level.WARNING,
-                                   "jsf.managed.bean.custom.scope.eval.null.existence",
-                                   new Object[] { scope.getExpressionString() });
-                    }
-                    // since the scope evaluated to null, return true to prevent
-                    // the managed bean from being needlessly created
-                    return true;
-                }
-            }
-
-            public Object getFromScope(String name, FacesContext context) {
-
-                Map scopeMap = (Map) scope.getValue(getELContext(context));
-                if (scopeMap != null) {
-                    return scopeMap.get(name);
-                } else {
-                    if (LOGGER.isLoggable(Level.WARNING)) {
-                        LOGGER.log(Level.WARNING,
-                                   "jsf.managed.bean.custom.scope.eval.null.existence",
-                                   new Object[] { scope.getExpressionString() });
-                    }
-                    return null;
-                }
-            }
-
-
-            // ------------------------------------------------- Private Methods
-
-
-            private ELContext getELContext(FacesContext ctx) {
-
-                return new CustomScopeELContext(ctx.getELContext());
-
-            }
-
-
-            // -------------------------------------------------- Nested Classes
-
-
-            /**
-             * We have to use a different ELContext when evaluating the expressions
-             * for the custom scopes as we don't want to cause the resolved
-             * flag on the original ELContext to be changed.  
-             */
-            private static final class CustomScopeELContext extends ELContext {
-
-                private ELContext delegate;
-
-                // ------------------------------------------------ Constructors
-
-
-                public CustomScopeELContext(ELContext delegate) {
-
-                    this.delegate = delegate;
-
-                }
-
-                // -------------------------------------- Methods from ELContext
-
-
-                @Override
-                public void putContext(Class aClass, Object o) {
-
-                    delegate.putContext(aClass, o);
-
-                }
-
-                @Override
-                public Object getContext(Class aClass) {
-
-                    return delegate.getContext(aClass);
-
-                }
-
-                @Override
-                public Locale getLocale() {
-
-                    return delegate.getLocale();
-
-                }
-
-                @Override
-                public void setLocale(Locale locale) {
-
-                    delegate.setLocale(locale);
-
-                }
-
-                @Override
-                public ELResolver getELResolver() {
-
-                    return delegate.getELResolver();
-
-                }
-
-                @Override
-                public FunctionMapper getFunctionMapper() {
-
-                    return delegate.getFunctionMapper();
-
-                }
-
-                @Override
-                public VariableMapper getVariableMapper() {
-
-                    return delegate.getVariableMapper();
-
-                }
-            }
-
-        } // END CustomScopeHandler
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/ErrorBean.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/ErrorBean.java
deleted file mode 100644
index 1dbd8d0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/ErrorBean.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import javax.faces.context.FacesContext;
-import java.util.List;
-
-/**
- * <p>This doesn't really do anything, aside from being a place holder
- * if the managed bean is configured incorrectly.</p>
- */
-public class ErrorBean extends BeanBuilder {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ErrorBean(ManagedBeanInfo beanInfo, String message) {
-        super(beanInfo);
-        if (message == null || message.length() == 0) {
-            throw new IllegalArgumentException();
-        }
-        queueMessage(message);
-    }
-
-    
-    public ErrorBean(ManagedBeanInfo beanInfo, List<String> messages) {
-        super(beanInfo);
-        if (messages == null || messages.isEmpty()) {
-            throw new IllegalArgumentException();
-        }
-        queueMessages(messages);
-    }
-
-
-    // ------------------------------------------------ Methods from BeanBuilder
-
-    @Override
-    synchronized void bake() {
-        // no-op
-    }
-
-
-    protected void buildBean(Object bean, FacesContext context) {
-        // no-op
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanBuilder.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanBuilder.java
deleted file mode 100644
index 6661a4f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanBuilder.java
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.util.MessageUtils;
-
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Array;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * <p>This builder creates standard managed beans, i.e. beans
- * that aren't List or Map instances.</p>
- */
-public class ManagedBeanBuilder extends BeanBuilder {
-
-    private List<BakedProperty> properties;
-
-    private enum PropertyType {
-        MAP,
-        LIST,
-        BEAN
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ManagedBeanBuilder(ManagedBeanInfo beanInfo) {
-
-        super(beanInfo);
-
-    }
-
-
-    // ------------------------------------------------ Methods from BeanBuilder
-
-
-    @Override
-    void bake() {
-        if (!isBaked()) {
-            super.bake();
-            if (beanInfo.hasManagedProperties()) {
-                properties =
-                     new ArrayList<BakedProperty>(beanInfo.getManagedProperties().size());
-                String propertyName = null;
-                try {
-                    for (ManagedBeanInfo.ManagedProperty property
-                         : beanInfo.getManagedProperties()) {
-                        propertyName = property.getPropertyName();
-                        switch (getPropertyType(property)) {
-                            case MAP:
-                                bakeMapProperty(property);
-                                break;
-                            case LIST:
-                                bakeListProperty(property);
-                                break;
-                            default:
-                                bakeBeanProperty(property);
-                        }
-                    }
-                } catch (Exception e) {
-                    if (e instanceof ManagedBeanPreProcessingException) {
-                        throw (ManagedBeanPreProcessingException) e;
-                    } else {
-                        String message = MessageUtils
-                             .getExceptionMessageString(MessageUtils.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR_ID,
-                                                        propertyName);
-                        throw new ManagedBeanPreProcessingException(message,
-                                                                    e,
-                                                                    ManagedBeanPreProcessingException.Type.UNCHECKED);
-                    }
-                }
-            }
-            baked();
-            Introspector.flushFromCaches(getBeanClass());
-        }
-    }
-
-
-    protected void buildBean(Object bean, FacesContext context) {
-
-        if (properties != null) {
-            for (BakedProperty property : properties) {
-                property.set(bean, context);
-            }
-        }
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private PropertyType getPropertyType(ManagedBeanInfo.ManagedProperty property) {
-
-        if (property.hasListEntry()) {
-            if (property.hasMapEntry() || property.hasPropertyValue()) {
-                String message =
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR_ID,
-                          property.getPropertyName(),
-                          beanInfo.getName());
-                throw new ManagedBeanPreProcessingException(message);
-            }
-
-            return PropertyType.LIST;
-        }
-        if (property.hasMapEntry()) {
-
-            if (property.hasPropertyValue()) {
-                String message =
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR_ID,
-                          property.getPropertyName(),
-                          beanInfo.getName());
-                throw new ManagedBeanPreProcessingException(message);
-            }
-            return PropertyType.MAP;
-        }
-
-        return PropertyType.BEAN;
-
-    }
-
-
-    private void bakeMapProperty(ManagedBeanInfo.ManagedProperty property) {
-
-        ManagedBeanInfo.MapEntry rawEntry = property.getMapEntry();
-        Map<Expression,Expression> mapEntries =
-             getBakedMap(rawEntry.getKeyClass(),
-                         rawEntry.getValueClass(),
-                         rawEntry.getEntries());
-
-        // Find property setter and validate.
-        PropertyDescriptor pd =
-             getPropertyDescriptor(property.getPropertyName());
-        if (pd == null) {
-            String message = MessageUtils.getExceptionMessageString(
-                 MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
-                 property.getPropertyName(),
-                 beanInfo.getName());
-            queueMessage(message);
-        } else {
-            if (pd.getWriteMethod() != null) {
-                Class<?>[] params = pd.getWriteMethod().getParameterTypes();
-                if (!Map.class.isAssignableFrom(params[0])) {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR_ID,
-                         property.getPropertyName(),
-                         beanInfo.getName());
-                    queueMessage(message);
-                }
-            } else {
-                // no write method, let's hope there is a read method that returns
-                // a non-null map
-                if (pd.getReadMethod() == null) {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
-                         property.getPropertyName(),
-                         beanInfo.getName());
-                    queueMessage(message);
-                } else {
-                    Class<?> returnType = pd.getReadMethod().getReturnType();
-                    if (!Map.class.isAssignableFrom(returnType)) {
-                        String message = MessageUtils.getExceptionMessageString(
-                             MessageUtils.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR_ID,
-                             property.getPropertyName(),
-                             beanInfo.getName());
-                        queueMessage(message);
-                    }
-                }
-            }
-        }
-
-        if (!this.hasMessages()) {
-            // all clear - create the BakedMapProperty and add it to the properties
-            // map
-            BakedMapProperty baked = new BakedMapProperty(mapEntries, pd);
-            properties.add(baked);
-        }
-        
-    }
-
-
-    private void bakeListProperty(ManagedBeanInfo.ManagedProperty property) {
-
-        ManagedBeanInfo.ListEntry rawEntry = property.getListEntry();
-        List<Expression> listEntry = getBakedList(rawEntry.getValueClass(),
-                                                  rawEntry.getValues());
-
-        PropertyDescriptor pd =
-             getPropertyDescriptor(property.getPropertyName());
-        if (pd == null) {
-            String message = MessageUtils.getExceptionMessageString(
-                 MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
-                 property.getPropertyName(),
-                 beanInfo.getName());
-            queueMessage(message);
-        } else {
-            if (pd.getReadMethod() == null) {
-                // a null read method means we create a new List or
-                // array and pass it to the bean.  Validate that the
-                // setter takes either an array or List.
-                if (pd.getWriteMethod() == null) {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
-                         property.getPropertyName(),
-                         beanInfo.getName());
-                    queueMessage(message);
-                } else {
-                    Class<?>[] params = pd.getWriteMethod().getParameterTypes();
-                    if (params.length != 1) {
-                        String message = MessageUtils.getExceptionMessageString(
-                             MessageUtils.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR_ID,
-                             property.getPropertyName(),
-                             beanInfo.getName());
-                        queueMessage(message);
-                    } else {
-                        if (!params[0].isArray() && !List.class.isAssignableFrom(params[0])) {
-                            String message = MessageUtils
-                                     .getExceptionMessageString(
-                                          MessageUtils.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR_ID,
-                                          property.getPropertyName(),
-                                          beanInfo.getName());
-                                queueMessage(message);
-                        }
-                    }
-                }
-            } else {
-                // a getter exists.  ensure it returns a List or array.
-                // if it returns an array, ensure a setter exists
-                Class<?> retType = pd.getReadMethod().getReturnType();
-                if (retType.isArray()) {
-                    if (pd.getWriteMethod() == null) {
-                        String message = MessageUtils
-                             .getExceptionMessageString(
-                                  MessageUtils.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR_ID,
-                                  property.getPropertyName(),
-                                  beanInfo.getName());
-                        queueMessage(message);
-                    }
-                    // validate setter
-                } else {
-                    if (!List.class.isAssignableFrom(retType)) {
-                        String message = MessageUtils.getExceptionMessageString(
-                             MessageUtils.MANAGED_BEAN_LIST_GETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR_ID,
-                             property.getPropertyName(),
-                             beanInfo.getName());
-                        queueMessage(message);
-                    }
-                }
-            }
-
-        }
-
-        if (!this.hasMessages()) {
-            BakedListProperty baked = new BakedListProperty(listEntry,
-                                                            pd);
-            properties.add(baked);
-        }
-
-    }
-
-
-    private void bakeBeanProperty(ManagedBeanInfo.ManagedProperty property) {
-
-        String className = property.getPropertyClass();
-        PropertyDescriptor pd =
-                 getPropertyDescriptor(property.getPropertyName());
-
-        if (pd == null || pd.getWriteMethod() == null) {
-            if (!UIComponent.class.isAssignableFrom(getBeanClass())) {
-                String message = MessageUtils.getExceptionMessageString(
-                     MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID,
-                     property.getPropertyName(),
-                     beanInfo.getName());
-                queueMessage(message);
-            }           
-        } else {
-            Method method = pd.getWriteMethod();
-            Class<?>[] param = method.getParameterTypes();
-            if (param.length != 1) {
-                String message = MessageUtils.getExceptionMessageString(
-                     MessageUtils.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR_ID,
-                     property.getPropertyName(),
-                     beanInfo.getName());
-                queueMessage(message);
-            }
-        }
-
-        Expression value = null;
-        if (pd != null) {
-            Class<?> propertyClass;
-            if (className != null) {
-                propertyClass = loadClass(className);
-            } else {
-                propertyClass = pd.getPropertyType();
-            }
-
-            if (className != null) {
-                if (!pd.getWriteMethod().getParameterTypes()[0]
-                     .isAssignableFrom(propertyClass)) {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR_ID,
-                         property.getPropertyName(),
-                         beanInfo.getName(),
-                         property.getPropertyClass());
-                    queueMessage(message);
-                }
-            }
-
-            String propertyValue = property.getPropertyValue();
-            if (!ManagedBeanInfo.NULL_VALUE.equals(propertyValue)) {
-                value = new Expression(propertyValue, propertyClass);
-            }
-        } else {
-            String propertyValue = property.getPropertyValue();
-            if (!ManagedBeanInfo.NULL_VALUE.equals(propertyValue)) {
-                value = new Expression(propertyValue, String.class);
-            }
-        }
-
-        if (!this.hasMessages()) {
-            BakedBeanProperty baked
-                 = new BakedBeanProperty(property.getPropertyName(),
-                                         pd,
-                                         value);
-            properties.add(baked);
-        }
-
-    }
-
-
-    private PropertyDescriptor getPropertyDescriptor(String propertyName) {
-
-        try {
-            BeanInfo beanInfo = Introspector.getBeanInfo(getBeanClass());
-            PropertyDescriptor pds[] = beanInfo.getPropertyDescriptors();
-            for (PropertyDescriptor pd : pds) {
-                if (propertyName.equals(pd.getName())) {
-                    return pd;
-                }
-            }
-        } catch (IntrospectionException ie) {
-            String message = MessageUtils.getExceptionMessageString(
-                 MessageUtils.MANAGED_BEAN_INTROSPECTION_ERROR_ID,
-                 beanInfo.getName());
-            throw new ManagedBeanPreProcessingException(message);
-        }
-
-        return null;
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static interface BakedProperty {
-
-        abstract void set(Object bean, FacesContext context);
-
-    } // END BakedProperty
-
-    private class BakedMapProperty implements BakedProperty {
-
-        Map<Expression,Expression> mapEntries;
-        PropertyDescriptor pd;
-
-        BakedMapProperty(Map<Expression,Expression> mapEntries,
-                         PropertyDescriptor pd) {
-
-            this.mapEntries = mapEntries;
-            this.pd = pd;
-
-        }
-
-        public void set(Object bean, FacesContext context) {
-
-            Method readMethod = pd.getReadMethod();
-            Map target = null;
-            boolean mapReturned = false;
-            if (readMethod != null) {
-                // see if a Map already exists, if so, we'll
-                // add the config entries to the existing
-                try {
-                    target = (Map) readMethod.invoke(bean,
-                                                     RIConstants.EMPTY_METH_ARGS);
-                    mapReturned = (target != null);
-                } catch (Exception ignored) {
-                    // ignored
-                }
-            }
-            if (target == null) {
-                //noinspection CollectionWithoutInitialCapacity
-                target = new HashMap();
-            }
-            initMap(mapEntries, target, context);
-
-            if (!mapReturned) {
-                Method writeMethod = pd.getWriteMethod();
-                try {
-                    writeMethod.invoke(bean, target);
-                } catch (Exception e) {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
-                         pd.getName(),
-                         beanInfo.getName());
-                    throw new ManagedBeanPreProcessingException(message, e);
-                }
-            }
-        }
-
-    } // END BakedMapProperty
-
-
-    private class BakedListProperty implements BakedProperty {
-
-        private List<Expression> listEntries;
-        private PropertyDescriptor pd;        
-
-
-        BakedListProperty(List<Expression> listEntries,
-                          PropertyDescriptor pd) {
-
-            this.listEntries = listEntries;
-            this.pd = pd;           
-            
-        }
-
-
-        public void set(Object bean, FacesContext context) {
-
-            // check to see if there is a value returned by
-            // the getter, if any.
-            Method readMethod = pd.getReadMethod();
-            Object temp = null;
-            if (readMethod != null) {
-                try {
-                    temp = readMethod.invoke(bean, RIConstants.EMPTY_METH_ARGS);
-                } catch (Exception ignored) {
-                    // ignored
-                }
-            }
-
-            List target = null;
-            if (temp != null) {
-                if (temp.getClass().isArray()) {
-                    for (int i = 0, len = Array.getLength(temp); i < len; i++) {
-                        if (target == null) {
-                            target = new ArrayList(len);
-                        }
-                        //noinspection unchecked
-                        target.add(Array.get(temp, i));
-                    }
-                } else {
-                    target = (List) temp;
-                }
-            }
-            if (target == null) {
-                //noinspection CollectionWithoutInitialCapacity
-                target = new ArrayList();
-            }
-            ExpressionFactory expFactory =
-                 context.getApplication().getExpressionFactory();
-            initList(listEntries, target, context);
-
-            // handle the case where the getter returned a non-null value
-            if (temp != null && !temp.getClass().isArray()) {
-                // the returned object was a List - no action
-                // necessary
-                return;
-            } else if (temp != null) {
-
-                // getter returned an array.  Converter the List
-                // 'target' to an array and call the setter
-                Class<?> arrayType = temp.getClass().getComponentType();
-                Object result = Array.newInstance(arrayType, target.size());
-                for (int i = 0, len = target.size(); i < len; i++) {
-                    Array.set(result,
-                              i,
-                              expFactory.coerceToType(target.get(i),
-                                                      arrayType));
-                }
-                try {
-                    pd.getWriteMethod().invoke(bean, result);
-                } catch (Exception e) {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
-                         pd.getName(),
-                         beanInfo.getName());
-                    throw new ManagedBeanCreationException(message, e);
-                }
-            } else {
-                // no value returned from the getter.
-                Method writeMethod = pd.getWriteMethod();
-                Class<?>[] param = writeMethod.getParameterTypes();
-
-                if (param[0].isArray()) {
-                    Class<?> arrayType = param[0].getComponentType();
-                    Object result = Array.newInstance(arrayType, target.size());
-                    for (int i = 0, len = target.size(); i < len; i++) {
-                        Array.set(result,
-                                  i,
-                                  expFactory.coerceToType(target.get(i),
-                                                          arrayType));
-                    }
-                    try {
-                        writeMethod.invoke(bean, result);
-                    } catch (Exception e) {
-                        String message = MessageUtils.getExceptionMessageString(
-                             MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
-                             pd.getName(),
-                             beanInfo.getName());
-                        throw new ManagedBeanCreationException(message, e);
-                    }
-                } else {
-                    try {
-                        writeMethod.invoke(bean, target);
-                    } catch (Exception e) {
-                        String message = MessageUtils.getExceptionMessageString(
-                             MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
-                             pd.getName(),
-                             beanInfo.getName());
-                        throw new ManagedBeanCreationException(message, e);
-                    }
-                }
-            }
-        }
-
-
-    } // END BakedListProperty
-
-
-    private class BakedBeanProperty implements BakedProperty {
-
-        private String propertyName;
-        private PropertyDescriptor pd;
-        private Expression value;
-
-        BakedBeanProperty(String propertyName,
-                          PropertyDescriptor pd,
-                          Expression value) {
-
-            this.propertyName = propertyName;
-            this.pd = pd;
-            this.value = value;
-
-        }
-
-
-        public void set(Object bean, FacesContext context) {
-
-            if (pd != null) {
-                Method writeMethod = pd.getWriteMethod();
-                try {
-                    writeMethod.invoke(bean,
-                                       ((value != null)
-                                        ? value.evaluate(context.getELContext())
-                                        : null));
-                } catch (Exception e) {
-                    String message = MessageUtils.getExceptionMessageString(
-                         MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID,
-                         pd.getName(),
-                         beanInfo.getName());
-                    throw new ManagedBeanCreationException(message, e);
-                }
-            } else {
-                // no PropertyDescriptor means this bean is a UIComponent
-                ((UIComponent) bean).getAttributes()
-                     .put(propertyName, ((value != null)
-                                           ? value
-                          .evaluate(context.getELContext())
-                                           : ""));
-            }
-
-        }
-        
-    } // END BakedBeanProperty
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanCreationException.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanCreationException.java
deleted file mode 100644
index c97cfeb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanCreationException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import javax.faces.FacesException;
-
-/**
- * <p>Indicates an error in the ManagedBean, be it a user error or runtime error.</p>
- */
-public class ManagedBeanCreationException extends FacesException {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ManagedBeanCreationException() {
-        super();
-    }
-
-
-    public ManagedBeanCreationException(String message) {
-        super(message);
-    }
-
-
-    public ManagedBeanCreationException(Throwable t) {
-        super(t);
-    }
-
-
-    public ManagedBeanCreationException(String message, Throwable t) {
-        super(message, t);  
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanInfo.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanInfo.java
deleted file mode 100644
index 836ccd9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanInfo.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import java.util.List;
-import java.util.Map;
-
-import com.sun.faces.el.ELUtils;
-
-/**
- * This class represents the parsed metadata for a <code>managed-bean</code>
- * entry within a faces-config.xml.
- */
-public class ManagedBeanInfo {
-
-    public static final String NULL_VALUE = "null_value";
-    
-    private String name;
-    private String className;
-    private String beanScope;
-    boolean eager;
-    private ManagedBeanInfo.MapEntry mapEntry;
-    private ManagedBeanInfo.ListEntry listEntry;
-    private List<ManagedBeanInfo.ManagedProperty> managedProperties;
-    private Map<String,String> descriptions;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ManagedBeanInfo(String name,
-                           String className,
-                           String beanScope,
-                           ManagedBeanInfo.MapEntry mapEntry,
-                           ManagedBeanInfo.ListEntry listEntry,
-                           List<ManagedBeanInfo.ManagedProperty> managedProperties,
-                           Map<String,String> descriptions) {
-
-        this(name,
-             className,
-             beanScope,
-             false,
-             mapEntry,
-             listEntry,
-             managedProperties,
-             descriptions);
-
-    }
-
-
-    public ManagedBeanInfo(String name,
-                           String className,
-                           String beanScope,
-                           boolean eager,
-                           ManagedBeanInfo.MapEntry mapEntry,
-                           ManagedBeanInfo.ListEntry listEntry,
-                           List<ManagedBeanInfo.ManagedProperty> managedProperties,
-                           Map<String,String> descriptions) {
-
-        this.name = name;
-        this.className = className;
-        this.beanScope = beanScope;
-        this.eager = eager;
-        this.mapEntry = mapEntry;
-        this.listEntry = listEntry;
-        this.managedProperties = managedProperties;
-        this.descriptions = descriptions;
-
-        if (eager && !ELUtils.Scope.APPLICATION.toString().equals(beanScope)) {
-            this.eager = false;
-        }
-        
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getName() {
-        return name;
-    }
-
-    public String getClassName() {
-        return className;
-    }
-
-    public String getScope() {
-        return beanScope;
-    }
-
-    public boolean isEager() {
-        return eager;
-    }
-
-    public boolean hasMapEntry() {
-        return (mapEntry != null);
-    }
-
-    public MapEntry getMapEntry() {
-        return mapEntry;
-    }
-
-    public boolean hasListEntry() {
-        return (listEntry != null);
-    }
-
-    public ListEntry getListEntry() {
-        return listEntry;
-    }
-
-    public boolean hasManagedProperties() {
-        return (managedProperties != null);
-    }
-
-    public List<ManagedBeanInfo.ManagedProperty> getManagedProperties() {
-        return managedProperties;    
-    }
-
-    public Map<String,String> getDescriptions() {
-        return descriptions;
-    }
-
-    public ManagedBeanInfo clone(String name,
-                                 String scope,
-                                 boolean eager,
-                                 ManagedBeanInfo source) {
-
-        return new ManagedBeanInfo(name,
-                                   source.className,
-                                   scope,
-                                   eager,
-                                   source.mapEntry,
-                                   source.listEntry,
-                                   source.managedProperties,
-                                   source.descriptions);
-
-    }
-
-    
-    // ----------------------------------------------------------- Inner Classes
-
-
-    public static class MapEntry {
-
-        private String keyClass;
-        private String valueClass;
-        private Map<String, String> entries;
-
-        public MapEntry(String keyClass,
-                        String valueClass,
-                        Map<String,String> entries) {
-
-            this.keyClass = keyClass;
-            this.valueClass = valueClass;
-            this.entries = entries;
-
-        }
-
-        public String getKeyClass() {
-            return keyClass;
-        }
-
-        public String getValueClass() {
-            return valueClass;
-        }
-
-        public Map<String,String> getEntries() {
-            return entries;
-        }
-
-    }
-
-
-    public static class ListEntry {
-
-        private String valueClass;
-        private List<String> values;
-
-        public ListEntry(String valueClass,
-                         List<String> values) {
-
-            this.valueClass = valueClass;
-            this.values = values;
-
-        }
-
-        public String getValueClass() {
-            return valueClass;
-        }
-
-        public List<String> getValues() {
-            return values;
-        }
-
-    }
-
-
-    public static class ManagedProperty {
-
-        private String propertyAlias;
-        private String propertyName;
-        private String propertyClass;
-        private String propertyValue;
-        private ManagedBeanInfo.MapEntry mapEntry;
-        private ManagedBeanInfo.ListEntry listEntry;
-
-        public ManagedProperty(String propertyName,
-                               String propertyClass,
-                               String propertyValue,
-                               ManagedBeanInfo.MapEntry mapEntry,
-                               ManagedBeanInfo.ListEntry listEntry) {
-
-            this.propertyName = propertyName;
-            this.propertyClass = propertyClass;
-            this.propertyValue = propertyValue;
-            this.mapEntry = mapEntry;
-            this.listEntry = listEntry;
-
-        }
-
-        public ManagedProperty(String propertyAlias,
-                               String propertyName,
-                               String propertyClass,
-                               String propertyValue,
-                               ManagedBeanInfo.MapEntry mapEntry,
-                               ManagedBeanInfo.ListEntry listEntry) {
-
-            this(propertyName, propertyClass, propertyValue, mapEntry, listEntry);
-            this.propertyAlias = propertyAlias;
-
-        }
-
-        public String getPropertyAlias() {
-            return propertyAlias;
-        }
-
-        public String getPropertyName() {
-            return propertyName;
-        }
-
-        public String getPropertyClass() {
-            return propertyClass;
-        }
-
-        public boolean hasPropertyValue() {
-            return (propertyValue != null);
-        }
-
-        public String getPropertyValue() {
-            return propertyValue;
-        }                
-
-        public boolean hasMapEntry() {
-            return (mapEntry != null);
-        }
-
-        public ManagedBeanInfo.MapEntry getMapEntry() {
-            return mapEntry;
-        }
-
-        public boolean hasListEntry() {
-            return (listEntry != null);
-        }
-
-        public ManagedBeanInfo.ListEntry getListEntry() {
-            return listEntry;
-        }
-
-    }
-}
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanPreProcessingException.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanPreProcessingException.java
deleted file mode 100644
index ab69ac7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedBeanPreProcessingException.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import javax.faces.FacesException;
-
-/**
- * <p>Represents errors from managed bean pre-processing.
- */
-public class ManagedBeanPreProcessingException extends FacesException {
-
-    public enum Type {
-        CHECKED,
-        UNCHECKED
-    }
-
-    private Type type = Type.CHECKED;
-
-    // ------------------------------------------------------------ Constructors
-
-    public ManagedBeanPreProcessingException() {
-        super();
-    }
-
-
-    public ManagedBeanPreProcessingException(Type type) {
-        super();
-        this.type = type;
-    }
-
-
-    public ManagedBeanPreProcessingException(String message) {
-        super(message);
-    }
-
-
-    public ManagedBeanPreProcessingException(String message, Type type) {
-        super(message);
-        this.type = type;
-    }
-
-
-    public ManagedBeanPreProcessingException(Throwable t) {
-        super(t);
-    }
-
-
-    public ManagedBeanPreProcessingException(Throwable t, Type type) {
-        super(t);
-        this.type = type;
-    }
-
-
-    public ManagedBeanPreProcessingException(String message, Throwable t) {
-        super(message, t);
-    }
-
-
-    public ManagedBeanPreProcessingException(String message, Throwable t, Type type) {
-        super(message, t);
-        this.type = type;
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public Type getType() {
-
-        return type;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedListBeanBuilder.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedListBeanBuilder.java
deleted file mode 100644
index d0fa685..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedListBeanBuilder.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import javax.faces.context.FacesContext;
-import java.util.List;
-
-/**
- * <p>This builder builds beans that are defined as <code>List</code>
- * instances.</p>
- */
-public class ManagedListBeanBuilder extends BeanBuilder {
-
-    private List<Expression> values;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ManagedListBeanBuilder(ManagedBeanInfo beanInfo) {
-
-        super(beanInfo);
-
-    }
-
-
-    // ------------------------------------------------ Methods from BeanBuilder
-
-    
-    @Override
-    void bake() {
-
-        if (!isBaked()) {
-            super.bake();
-            ManagedBeanInfo.ListEntry entry = beanInfo.getListEntry();
-            values = getBakedList(entry.getValueClass(), entry.getValues());
-            baked();
-        }
-
-    }
-
-
-    protected void buildBean(Object bean, FacesContext context) {
-
-        initList(values, (List) bean, context);
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedMapBeanBuilder.java b/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedMapBeanBuilder.java
deleted file mode 100644
index cc96cc4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/mgbean/ManagedMapBeanBuilder.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mgbean;
-
-import javax.faces.context.FacesContext;
-import java.util.Map;
-
-/**
- * <p>This builder builds beans that are defined as <code>Map</code>
- * instances.</p>
- */
-public class ManagedMapBeanBuilder extends BeanBuilder {
-
-    private Map<Expression,Expression> mapEntries;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ManagedMapBeanBuilder(ManagedBeanInfo beanInfo) {
-
-        super(beanInfo);
-        
-    }
-
-
-    // ------------------------------------------------ Methods from BeanBuilder
-
-
-    @Override
-    void bake() {
-
-        if (!isBaked()) {
-            super.bake();
-            ManagedBeanInfo.MapEntry entry = beanInfo.getMapEntry();
-            mapEntries = getBakedMap(entry.getKeyClass(),
-                                     entry.getValueClass(),
-                                     entry.getEntries());
-            baked();
-        }
-
-    }
-
-
-    protected void buildBean(Object bean, FacesContext context) {
-
-        initMap(mapEntries, (Map) bean, context);
-        
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/ApplicationObjectInputStream.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/ApplicationObjectInputStream.java
deleted file mode 100644
index 1f5f810..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/ApplicationObjectInputStream.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * An ObjectInputStream that can deserialize objects relative to the current
- * application's class loader.  In particular, this class works around 
- * deserialization problems when the JSF JARs are shared (i.e. the 
- * classloader has no access to application objects).
- */
-public class ApplicationObjectInputStream extends ObjectInputStream {
-
-    // Taken from ObjectInputStream to resolve primitive types
-    private static final Map<String,Class<?>> PRIMITIVE_CLASSES =
-          new HashMap<String,Class<?>>(9, 1.0F);
-
-    static {
-        PRIMITIVE_CLASSES.put("boolean", boolean.class);
-        PRIMITIVE_CLASSES.put("byte", byte.class);
-        PRIMITIVE_CLASSES.put("char", char.class);
-        PRIMITIVE_CLASSES.put("short", short.class);
-        PRIMITIVE_CLASSES.put("int", int.class);
-        PRIMITIVE_CLASSES.put("long", long.class);
-        PRIMITIVE_CLASSES.put("float", float.class);
-        PRIMITIVE_CLASSES.put("double", double.class);
-        PRIMITIVE_CLASSES.put("void", void.class);
-    }
-   
-    public ApplicationObjectInputStream() throws IOException, 
-            SecurityException {
-        super();
-    }
-    
-    public ApplicationObjectInputStream(InputStream in) throws IOException {
-        super(in);
-    } 
-
-    protected Class<?> resolveClass(ObjectStreamClass desc)
-    throws IOException, ClassNotFoundException {
-        
-        // When the container is about to call code associated with a 
-        // particular web application, it sets the context classloader to the 
-        // web app class loader. We make use of that here to locate any classes 
-        // that the UIComponent may hold references to.  This won't cause a 
-        // problem to locate classes in the system class loader because 
-        // class loaders can look up the chain and not down the chain.
-        String name = desc.getName();
-        try {
-            return Class.forName(name,
-                                 true,
-                                 Thread.currentThread().getContextClassLoader());
-        } catch (ClassNotFoundException cnfe) {
-            Class<?> c = PRIMITIVE_CLASSES.get(name);
-            if (c != null) {
-                return c;
-            }
-            throw cnfe;
-        }
-
-    }
-} 
-    
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/Attribute.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/Attribute.java
deleted file mode 100644
index 0086e75..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/Attribute.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-/**
- * <p class="changed_added_2_0"></p>
- * @author asmirnov at exadel.com
- *
- */
-public class Attribute implements Comparable<Attribute> {
-	
-	private final String name;
-	
-	private final String[] events;
-
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @param name
-	 * @param events
-	 */
-	public Attribute(String name, String[] events) {
-		this.name = name;
-		this.events = events;
-	}
-
-	public static Attribute attr(String name) {
-		return new Attribute(name,null);
-	}
-
-	public static Attribute attr(String name, String... events) {
-		return new Attribute(name,events);
-	}
-
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @return the name
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @return the events
-	 */
-	public String[] getEvents() {
-		return events;
-	}
-
-	public int compareTo(Attribute o) {
-		// Compare attributes by name for a fast search in the RenderKitUtils methods.
-		return this.getName().compareTo(o.getName());
-	}
-	
-	
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/ByteArrayGuard.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/ByteArrayGuard.java
deleted file mode 100644
index f62179d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/ByteArrayGuard.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import javax.crypto.Cipher;
-import javax.crypto.NullCipher;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.DESedeKeySpec;
-import javax.crypto.spec.IvParameterSpec;
-import javax.faces.FacesException;
-
-import java.security.Key;
-import java.security.MessageDigest;
-import java.security.SecureRandom;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <p>This utility class is to provide both encryption and
- * decryption <code>Ciphers</code> to <code>ResponseStateManager</code>
- * implementations wishing to provide encryption support.</p>
- * 
- * <p>The algorithm used to encrypt byte array is 3DES with CBC.</p>
- *  
- * <p>Original author Inderjeet Singh, J2EE Blue Prints Team. Modified to suit JSF
- * needs.</p> 
- */
-public final class ByteArrayGuard {
-
-
-     // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.RENDERKIT.getLogger();
-    private static final int IV_LENGTH = 8;        
-    private static final int KEY_LENGTH = 24;
-      
-    private static Cipher NULL_CIPHER = new NullCipher();               
-    
-    private Cipher decryptCipher = NULL_CIPHER;
-    private Cipher encryptCipher = NULL_CIPHER;  
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructs a new <code>ByteArrayGuard</code> using the specified
-     * <code>keyLength</code>, <code>macLength</code>, <code>ivLength</code>.    
-     * @param password the password to seed the encryption 
-     */
-    public ByteArrayGuard(String password) {
-       
-        if (password != null) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "Client state saving encryption enabled.");
-            }
-            byte[] passwordKey = convertPasswordToKey(password.getBytes());           
-            try {
-                SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");
-                SecretKeyFactory keygen = SecretKeyFactory.getInstance("DESede");
-                encryptCipher =
-                      getBlockCipherForEncryption(keygen, prng, passwordKey);
-                byte[] iVector = encryptCipher.getIV();
-                decryptCipher =
-                      getBlockCipherForDecryption(keygen, 
-                                                  prng, 
-                                                  passwordKey,
-                                                  iVector);
-            } catch (Exception e) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "Unexpected exception initializing encryption."
-                               + "  No encryption will be performed.",
-                               e);
-                }               
-                               
-                encryptCipher = NULL_CIPHER;
-                decryptCipher = NULL_CIPHER;              
-               
-            }
-        }       
-    }
-
-
-    // ---------------------------------------------------------- Public Methods    
-
-
-    public Cipher getEncryptionCipher() {
-        return encryptCipher;
-    }
-    
-    public Cipher getDecryptionCipher() {
-        return decryptCipher;
-    }
-    
-
-    // --------------------------------------------------------- Private Methods
-    
-
-
-    /**
-     * This method converts the specified password into a key in a
-     * deterministic manner. The key is then usable for creating ciphers
-     * and MACs.
-     * 
-     * @param password plain text password
-     * 
-     * @return a byte array containing a key based on the specified
-     * password. The length of the returned byte array is KEY_LENGTH.
-     */
-    private byte[] convertPasswordToKey(byte[] password) {
-
-        try {
-            MessageDigest md = MessageDigest.getInstance("SHA");
-            byte[] seed = md.digest(password);
-
-            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
-            random.setSeed(seed);
-
-            byte[] rawkey = new byte[KEY_LENGTH];
-            random.nextBytes(rawkey);
-            return rawkey;
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-
-    /** 
-     * Obtain a <code>Cipher</code> for decrypting data.
-     * @param keyGen the key factory
-     * @param random secure random
-     * @param rawKey must be 24 bytes in length.
-     * @param iv initialization vector  @return a 3DES block cipher to be used for decryption based on the
-     * specified key
-     * @return an initialized <code>Cipher</code> for decryption
-     */
-    private Cipher getBlockCipherForDecryption(SecretKeyFactory keyGen,
-                                               SecureRandom random,
-                                               byte[] rawKey,
-                                               byte[] iv) {
-
-        try {           
-            DESedeKeySpec keyspec = new DESedeKeySpec(rawKey);
-            Key key = keyGen.generateSecret(keyspec);
-            Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
-            IvParameterSpec ivspec = new IvParameterSpec(iv);
-            cipher.init(Cipher.DECRYPT_MODE, key, ivspec, random);
-            return cipher;
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-
-    /** 
-     * Obtain a <code>Cipher</code> for encrypting data.
-     * @param keyGen the key factory
-     * @param random secure random
-     * @param rawKey must be 24 bytes in length.  @return a 3DES block cipher to be used for encryption based on the
-     * specified key
-     * @return an initialized <code>Cipher</code> for decryption
-     */
-    private Cipher getBlockCipherForEncryption(SecretKeyFactory keyGen,
-                                               SecureRandom random,
-                                               byte[] rawKey) {
-
-        try {           
-            DESedeKeySpec keyspec = new DESedeKeySpec(rawKey);
-            Key key = keyGen.generateSecret(keyspec);
-            Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
-            byte[] iv = new byte[IV_LENGTH];
-            random.nextBytes(iv);
-            IvParameterSpec ivspec = new IvParameterSpec(iv);
-            cipher.init(Cipher.ENCRYPT_MODE, key, ivspec, random);
-            return cipher;
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/ClientSideStateHelper.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/ClientSideStateHelper.java
deleted file mode 100644
index 020b383..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/ClientSideStateHelper.java
+++ /dev/null
@@ -1,568 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import javax.crypto.CipherInputStream;
-import javax.crypto.CipherOutputStream;
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.ClientStateTimeout;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.ClientStateWriteBufferSize;
-import static com.sun.faces.config.WebConfiguration.WebEnvironmentEntry.ClientStateSavingPassword;
-import com.sun.faces.io.Base64InputStream;
-import com.sun.faces.io.Base64OutputStreamWriter;
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <p>
- * This <code>StateHelper</code> provides the functionality associated with client-side state saving.
- * </p>
- */
-public class ClientSideStateHelper extends StateHelper {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    /**
-     * <p>
-     * Enabled encryption of view state.  Encryption is disabled by default.
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.WebEnvironmentEntry#ClientStateSavingPassword}
-     */
-    private ByteArrayGuard guard;
-
-    /**
-     * <p>
-     * Flag indicating whether or not client view state will be manipulated
-     * for and checked against a configured timeout value.
-     * </p>
-     *
-     * <p>
-     * This flag is configured via the <code>WebContextInitParameter.ClientStateTimeout</code>
-     * configuration option of <code>WebConfiguration</code> and is disabled by
-     * default.
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateTimeout}
-     */
-    private boolean stateTimeoutEnabled;
-
-    /**
-     * <p>
-     * If <code>stateTimeoutEnabled</code> is <code>true</code> this value will
-     * represent the time in seconds that a particular client view state is
-     * valid for.
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateTimeout}
-     */
-    private long stateTimeout;
-
-    /**
-     * <p>
-     * Client state is generally large, so this allows some tuning to control
-     * the buffer that's used to write the client state.
-     * </p>
-     *
-     * <p>
-     * The value specified must be divisable by two as the buffer is split
-     * between character and bytes (due to how client state is written).  By
-     * default, the buffer size is 8192 (per request).
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateWriteBufferSize}
-     */
-    private int csBuffSize;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new <code>ClientSideStateHelper</code> instance.
-     */
-    public ClientSideStateHelper() {
-
-        init();
-        
-    }
-
-
-    // ------------------------------------------------ Methods from StateHelper
-
-
-    /**
-     * <p>
-     * Writes the view state as a String generated by Base64 encoding the
-     * Java Serialziation representation of the provided <code>state</code>
-     * </p>
-     *
-     * <p>If <code>stateCapture</code> is <code>null</code>, the Base64 encoded
-     * state will be written to the client as a hidden field using the <code>ResponseWriter</code>
-     * from the provided <code>FacesContext</code>.</p>
-     *
-     * <p>If <code>stateCapture</code> is not <code>null</code>, the Base64 encoded
-     * state will be appended to the provided <code>StringBuilder</code> without any markup
-     * included or any content written to the client.
-     *
-     * @see {@link com.sun.faces.renderkit.StateHelper#writeState(javax.faces.context.FacesContext, Object, StringBuilder)}
-     */
-    public void writeState(FacesContext ctx,
-                           Object state,
-                           StringBuilder stateCapture) throws IOException {
-
-        if (stateCapture != null) {
-            doWriteState(state, new StringBuilderWriter(stateCapture));
-        } else {
-            ResponseWriter writer = ctx.getResponseWriter();
-            writer.write(stateFieldStart);
-            doWriteState(state, writer);
-            writer.write(stateFieldEnd);
-            writeRenderKitIdField(ctx, writer);
-        }
-
-    }
-
-
-    /**
-     * <p>Inspects the incoming request parameters for the standardized state
-     * parameter name.  In this case, the parameter value will be a Base64 encoded
-     * string previously encoded by {@link com.sun.faces.renderkit.ServerSideStateHelper#writeState(javax.faces.context.FacesContext, Object, StringBuilder)}.</p>
-     *
-     * <p>The string will be Base64-decoded and the state reconstructed using standard
-     * Java serialization.</p>
-     *
-     * @see {@link com.sun.faces.renderkit.StateHelper#getState(javax.faces.context.FacesContext, String)}
-     */
-    public Object getState(FacesContext ctx, String viewId) throws IOException {
-
-
-        String stateString = getStateParamValue(ctx);
-        if (stateString == null) {
-            return null;
-        }
-        return doGetState(stateString);
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * Rebuilds the view state from the Base64 included String included
-     * with the request.
-     *
-     * @param stateString the Base64 encoded view state
-     * @return the view state reconstructed from <code>stateString</code>
-     */
-    protected Object doGetState(String stateString) {
-        ObjectInputStream ois = null;
-        try {
-            ois = initInputStream(stateString);
-
-            long stateTime = 0;
-            if (stateTimeoutEnabled) {
-                try {
-                    stateTime = ois.readLong();
-                } catch (IOException ioe) {
-                    // we've caught an exception trying to read the time
-                    // marker.  This most likely means a view that has been
-                    // around before upgrading to the release that included
-                    // this feature.  So, no marker, return null now to
-                    // cause a ViewExpiredException
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.fine("Client state timeout is enabled, but unable to find the "
-                              + "time marker in the serialized state.  Assuming state "
-                              + "to be old and returning null.");
-                    }
-                    return null;
-                }
-            }
-            Object structure = ois.readObject();
-            Object state = ois.readObject();
-            if (stateTime != 0 && hasStateExpired(stateTime)) {
-                // return null if state has expired.  This should cause
-                // a ViewExpiredException to be thrown
-                return null;
-            }
-
-            return new Object[] { structure, state };
-
-        } catch (java.io.OptionalDataException ode) {
-        	if (LOGGER.isLoggable(Level.SEVERE)) {
-        		LOGGER.log(Level.SEVERE, ode.getMessage(), ode);
-        	}
-            throw new FacesException(ode);
-        } catch (ClassNotFoundException cnfe) {
-        	if (LOGGER.isLoggable(Level.SEVERE)) {
-        		LOGGER.log(Level.SEVERE, cnfe.getMessage(), cnfe);
-        	}
-            throw new FacesException(cnfe);
-        } catch (IOException iox) {
-        	if (LOGGER.isLoggable(Level.SEVERE)) {
-        		LOGGER.log(Level.SEVERE, iox.getMessage(), iox);
-        	}
-            throw new FacesException(iox);
-        } finally {
-            if (ois != null) {
-                try {
-                    ois.close();
-                } catch (IOException ioe) {
-                    // ignore
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Serializes and Base64 encodes the provided <code>state</code> to the
-     * provided <code>writer</code>/
-     *
-     * @param state view state
-     * @param writer the <code>Writer</code> to write the content to
-     * @throws IOException if an error occurs writing the state to the client
-     */
-    protected void doWriteState(Object state, Writer writer)
-    throws IOException {
-
-        Object[] stateToWrite = (Object[]) state;
-        ObjectOutputStream oos = null;
-        try {
-
-            Base64OutputStreamWriter bos =
-                  new Base64OutputStreamWriter(csBuffSize,
-                                               writer);
-            oos = initOutputStream(bos);
-
-            if (stateTimeoutEnabled) {
-                oos.writeLong(System.currentTimeMillis());
-            }
-            //noinspection NonSerializableObjectPassedToObjectStream
-            oos.writeObject(stateToWrite[0]);
-            //noinspection NonSerializableObjectPassedToObjectStream
-            oos.writeObject(stateToWrite[1]);
-            oos.flush();
-            oos.close();
-
-            // flush everything to the underlying writer
-            bos.finish();
-
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "Client State: total number of characters written: {0}",
-                           bos.getTotalCharsWritten());
-            }
-        } finally {
-            if (oos != null) {
-                try {
-                    oos.close();
-                } catch (IOException ioe) {
-                    // ignore
-                }
-            }
-
-        }
-    }
-
-
-    /**
-     * @param stateString the state string from which Objects will be
-     *  deserialized from.
-     * @return an <code>ObjectInputStream</code> configured appropriately
-     *  based on the user configuration from which to read objects from.
-     * @throws IOException if any issues arrise reading the state
-     */
-    private ObjectInputStream initInputStream(String stateString)
-    throws IOException {
-
-        InputStream bis;
-        if (compressViewState) {
-            bis = new GZIPInputStream(new Base64InputStream(stateString));
-        } else {
-            bis = new Base64InputStream(stateString);
-        }
-
-        ObjectInputStream ois;
-        if (guard != null) {
-            ois = serialProvider
-                  .createObjectInputStream(new CipherInputStream(bis, guard.getDecryptionCipher()));
-        } else {
-            ois = serialProvider.createObjectInputStream(bis);
-        }
-        return ois;
-
-    }
-
-
-    /**
-     * @param bos the Base64OutputStream to ultimately write the seriazed
-     *  objects to
-     * @return an <code>ObjectOutputStream</code> configured appropriately
-     *  based on the user configuration from which to write objects to
-     * @throws IOException if any issues arrise reading the state
-     */
-    protected ObjectOutputStream initOutputStream(Base64OutputStreamWriter bos)
-    throws IOException {
-
-        OutputStream base;
-        if (compressViewState) {
-            base = new GZIPOutputStream(bos, 1024);
-        } else {
-            base = bos;
-        }
-
-        ObjectOutputStream oos;
-        if (guard != null) {
-            oos = serialProvider.createObjectOutputStream(
-                  new BufferedOutputStream(
-                        new CipherOutputStream(base, guard.getEncryptionCipher())));
-        } else {
-            oos = serialProvider
-                  .createObjectOutputStream(new BufferedOutputStream(
-                        base,
-                        1024));
-        }
-        return oos;
-
-    }
-
-
-    /**
-     * <p>If the {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#ClientStateTimeout} init parameter
-     * is set, calculate the elapsed time between the time the client state was
-     * written and the time this method was invoked during restore.  If the client
-     * state has expired, return <code>true</code>.  If the client state hasn't expired,
-     * or the init parameter wasn't set, return <code>false</code>.
-     * @param stateTime the time in milliseconds that the state was written
-     *  to the client
-     * @return <code>false</code> if the client state hasn't timed out, otherwise
-     *  return <code>true</code>
-     */
-    protected boolean hasStateExpired(long stateTime) {
-
-        if (stateTimeoutEnabled) {
-            long elapsed = (System.currentTimeMillis() - stateTime) / 60000;
-            return (elapsed > stateTimeout);
-        } else {
-            return false;
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * Initialze the various configuration options for client-side
-     * sate saving.
-     * </p>
-     */
-    protected void init() {
-
-        String pass = webConfig.getEnvironmentEntry(
-              ClientStateSavingPassword);
-        if (pass != null) {
-            guard = new ByteArrayGuard(pass);
-        }
-
-        stateTimeoutEnabled = webConfig.isSet(ClientStateTimeout);
-        if (stateTimeoutEnabled) {
-            String timeout = webConfig.getOptionValue(ClientStateTimeout);
-            try {
-                stateTimeout = Long.parseLong(timeout);
-            } catch (NumberFormatException nfe) {
-                stateTimeout = Long.parseLong(ClientStateTimeout.getDefaultValue());
-            }
-        }
-
-
-        String size = webConfig.getOptionValue(
-              ClientStateWriteBufferSize);
-        String defaultSize =
-              ClientStateWriteBufferSize.getDefaultValue();
-        try {
-            csBuffSize = Integer.parseInt(size);
-            if (csBuffSize % 2 != 0) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.renderkit.resstatemgr.clientbuf_div_two",
-                               new Object[]{
-                                     ClientStateWriteBufferSize.getQualifiedName(),
-                                     size,
-                                     defaultSize});
-                }
-                csBuffSize = Integer.parseInt(defaultSize);
-            } else {
-                csBuffSize /= 2;
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine("Using client state buffer size of "
-                                + csBuffSize);
-                }
-            }
-        } catch (NumberFormatException nfe) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                           "jsf.renderkit.resstatemgr.clientbuf_not_integer",
-                           new Object[]{
-                                 ClientStateWriteBufferSize.getQualifiedName(),
-                                 size,
-                                 defaultSize});
-            }
-            csBuffSize = Integer.parseInt(defaultSize);
-        }
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * A simple <code>Writer</code> implementation to encapsulate a
-     * <code>StringBuilder</code> instance.
-     */
-    protected static final class StringBuilderWriter extends Writer {
-
-        private StringBuilder sb;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        protected StringBuilderWriter(StringBuilder sb) {
-
-            this.sb = sb;
-
-        }
-
-
-        // ------------------------------------------------- Methods from Writer
-
-
-        @Override
-        public void write(int c) throws IOException {
-
-            sb.append((char) c);
-
-        }
-
-
-        @Override
-        public void write(char cbuf[]) throws IOException {
-
-            sb.append(cbuf);
-
-        }
-
-
-        @Override
-        public void write(String str) throws IOException {
-
-            sb.append(str);
-
-        }
-
-
-        @Override
-        public void write(String str, int off, int len) throws IOException {
-
-            sb.append(str.toCharArray(), off, len);
-
-        }
-
-
-        @Override
-        public Writer append(CharSequence csq) throws IOException {
-
-            sb.append(csq);
-            return this;
-
-        }
-
-
-        @Override
-        public Writer append(CharSequence csq, int start, int end)
-        throws IOException {
-
-            sb.append(csq, start, end);
-            return this;
-
-        }
-
-        @Override
-        public Writer append(char c) throws IOException {
-
-            sb.append(c);
-            return this;
-
-        }
-
-        public void write(char cbuf[], int off, int len) throws IOException {
-
-            sb.append(cbuf, off, len);
-
-        }
-
-        public void flush() throws IOException {
-
-            //no-op
-
-        }
-
-        public void close() throws IOException {
-
-            //no-op
-
-        }
-
-    } // END StringBuilderWriter
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitFactoryImpl.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitFactoryImpl.java
deleted file mode 100644
index 35aac85..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitFactoryImpl.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentHashMap;
-
-import com.sun.faces.util.MessageUtils;
-
-
-public class RenderKitFactoryImpl extends RenderKitFactory {
-
-//
-// Protected Constants
-//
-    protected String renderKitId;
-    protected String className;
-    protected ConcurrentHashMap<String,RenderKit> renderKits;
-
-//
-// Class Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers
-//
-    /**
-     * Constructor registers default Render kit.
-     */
-    public RenderKitFactoryImpl() {
-        super();
-        renderKits = new ConcurrentHashMap<String, RenderKit>();
-        addRenderKit(HTML_BASIC_RENDER_KIT, new RenderKitImpl());
-    }
-
-
-    public void addRenderKit(String renderKitId, RenderKit renderKit) {
-
-        if (renderKitId == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKitId");
-            throw new NullPointerException(message);
-        }
-        if (renderKit == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKit");
-            throw new NullPointerException(message);
-        }
-        
-        renderKits.put(renderKitId, renderKit);
-       
-    }
-
-
-    public RenderKit getRenderKit(FacesContext context, String renderKitId) {
-
-        if (renderKitId == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKitId");
-            throw new NullPointerException(message);
-        }
-        //PENDING (rogerk) do something with FacesContext ...
-        //
-        // If an instance already exists, return it.
-        //       
-
-        return renderKits.get(renderKitId);
-    }
-
-
-    public Iterator<String> getRenderKitIds() {
-        return (renderKits.keySet().iterator());
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitImpl.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitImpl.java
deleted file mode 100644
index add5a70..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitImpl.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// RenderKitImpl.java
-
-package com.sun.faces.renderkit;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.RenderKit;
-import javax.faces.render.Renderer;
-import javax.faces.render.ResponseStateManager;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.util.concurrent.ConcurrentHashMap;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.DisableUnicodeEscaping;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableJSStyleHiding;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableScriptInAttributeValue;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.PreferXHTMLContentType;
-import com.sun.faces.renderkit.html_basic.HtmlResponseWriter;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <B>RenderKitImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class RenderKitImpl extends RenderKit {
-
-    private static final Logger LOGGER = FacesLogger.RENDERKIT.getLogger();
-
-    private static final String[] SUPPORTED_CONTENT_TYPES_ARRAY =
-         new String[]{
-              RIConstants.HTML_CONTENT_TYPE,
-              RIConstants.XHTML_CONTENT_TYPE,
-              RIConstants.APPLICATION_XML_CONTENT_TYPE,
-              RIConstants.TEXT_XML_CONTENT_TYPE
-         };
-
-    private static final String SUPPORTED_CONTENT_TYPES =
-         RIConstants.HTML_CONTENT_TYPE + ','
-              + RIConstants.XHTML_CONTENT_TYPE + ','
-              + RIConstants.APPLICATION_XML_CONTENT_TYPE + ','
-              + RIConstants.TEXT_XML_CONTENT_TYPE;
-
-
-    /**
-     * Keys are String renderer family.  Values are HashMaps.  Nested
-     * HashMap keys are Strings for the rendererType, and values are the
-     * Renderer instances themselves.
-     */
-
-    private ConcurrentHashMap<String, HashMap<String, Renderer>> rendererFamilies =
-         new ConcurrentHashMap<String, HashMap<String, Renderer>>();
-
-    /**
-     * For Behavior Renderers:
-     * Keys are Strings for the behaviorRendererType, and values are the 
-     * behaviorRenderer instances themselves.
-     */
-
-    private ConcurrentHashMap<String, ClientBehaviorRenderer> behaviorRenderers = 
-        new ConcurrentHashMap<String, ClientBehaviorRenderer>();
-
-
-    private ResponseStateManager responseStateManager =
-         new ResponseStateManagerImpl();
-
-    private WebConfiguration webConfig;
-
-    public RenderKitImpl() {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        webConfig = WebConfiguration.getInstance(context.getExternalContext());
-
-    }
-    
-    public void addRenderer(String family,
-                            String rendererType,
-                            Renderer renderer) {
-
-        Util.notNull("family", family);
-        Util.notNull("rendererType", rendererType);
-        Util.notNull("renderer", renderer);
-
-        HashMap<String,Renderer> renderers = rendererFamilies.get(family);
-        if (renderers == null) {
-            renderers = new HashMap<String,Renderer>();
-            rendererFamilies.put(family, renderers);
-        }
-
-        if (LOGGER.isLoggable(Level.FINE) && renderers.containsKey(rendererType)) {
-            LOGGER.log(Level.FINE,
-                       "rendererType {0} has already been registered for family {1}.  Replacing existing renderer class type {2} with {3}.",
-                       new Object[] { rendererType, family, renderers.get(rendererType).getClass().getName(), renderer.getClass().getName() });
-        }
-        renderers.put(rendererType, renderer);
-
-    }
-
-
-    public Renderer getRenderer(String family, String rendererType) {
-
-        Util.notNull("family", family);
-        Util.notNull("rendererType", rendererType);
-
-        assert(rendererFamilies != null);
-
-        HashMap<String,Renderer> renderers = rendererFamilies.get(family);
-        return ((renderers != null) ? renderers.get(rendererType) : null);
-
-    }
-
-    public void addClientBehaviorRenderer(String behaviorRendererType,
-                                          ClientBehaviorRenderer behaviorRenderer) {
-
-        Util.notNull("behaviorRendererType", behaviorRendererType);
-        Util.notNull("behaviorRenderer", behaviorRenderer);
-
-        if (LOGGER.isLoggable(Level.FINE) && behaviorRenderers.containsKey(behaviorRendererType)) {
-            LOGGER.log(Level.FINE,
-                       "behaviorRendererType {0} has already been registered.  Replacing existing behavior renderer class type {1} with {2}.",
-                       new Object[] { behaviorRendererType, behaviorRenderers.get(behaviorRendererType).getClass().getName(), behaviorRenderer.getClass().getName() });
-        }
-        behaviorRenderers.put(behaviorRendererType, behaviorRenderer);
-    
-    }
-
-    public ClientBehaviorRenderer getClientBehaviorRenderer(String behaviorRendererType) {
-
-        Util.notNull("behaviorRendererType", behaviorRendererType);
-        
-        return ((behaviorRenderers != null) ? behaviorRenderers.get(behaviorRendererType) : null);
-            
-    }   
-
-
-
-    public synchronized ResponseStateManager getResponseStateManager() {
-        if (responseStateManager == null) {
-            responseStateManager = new ResponseStateManagerImpl();
-        }
-        return responseStateManager;
-    }
-
-
-    public ResponseWriter createResponseWriter(Writer writer,
-                                               String desiredContentTypeList,
-                                               String characterEncoding) {
-        if (writer == null) {
-            return null;
-        }
-        String contentType = null;
-        boolean contentTypeNullFromResponse = false;
-        FacesContext context = FacesContext.getCurrentInstance();
-
-        // Step 1: Check the content type passed into this method 
-        if (null != desiredContentTypeList) {
-            contentType = findMatch(
-                 desiredContentTypeList,
-                 SUPPORTED_CONTENT_TYPES_ARRAY);
-        }
-
-        // Step 2: Check the response content type
-        if (null == desiredContentTypeList) {
-            desiredContentTypeList =
-                 context.getExternalContext().getResponseContentType();
-            if (null != desiredContentTypeList) {
-                contentType = findMatch(
-                     desiredContentTypeList,
-                     SUPPORTED_CONTENT_TYPES_ARRAY);
-                if (null == contentType) {
-                    contentTypeNullFromResponse = true;
-                }
-            }
-        }
-
-        // Step 3: Check the Accept Header content type
-        // Evaluate the accept header in accordance with HTTP specification - 
-        // Section 14.1
-        // Preconditions for this (1 or 2):
-        //  1. content type was not specified to begin with
-        //  2. an unsupported content type was retrieved from the response 
-        if (null == desiredContentTypeList || contentTypeNullFromResponse) {
-            String[] typeArray =
-                 context.getExternalContext().getRequestHeaderValuesMap().get("Accept");
-            if (typeArray.length > 0) {
-                StringBuffer buff = new StringBuffer();
-                buff.append(typeArray[0]);
-                for (int i = 1, len = typeArray.length; i < len; i++) {
-                    buff.append(',');
-                    buff.append(typeArray[i]);
-                }
-                desiredContentTypeList = buff.toString();
-            }
-
-            if (null != desiredContentTypeList) {
-                desiredContentTypeList =
-                      RenderKitUtils.determineContentType(desiredContentTypeList,
-                                                          SUPPORTED_CONTENT_TYPES,
-                                                          ((preferXhtml())
-                                                              ? RIConstants.XHTML_CONTENT_TYPE
-                                                              : null));
-                if (null != desiredContentTypeList) {
-                    contentType = findMatch(
-                         desiredContentTypeList,
-                         SUPPORTED_CONTENT_TYPES_ARRAY);
-                }
-            }
-        }
-
-        // Step 4: Default to text/html
-        if (contentType == null) {
-            if (null == desiredContentTypeList) {
-                contentType = getDefaultContentType();
-            } else {
-                String[] desiredContentTypes =
-                      contentTypeSplit(desiredContentTypeList);
-                for (String desiredContentType : desiredContentTypes) {
-                    if (RIConstants.ALL_MEDIA.equals(desiredContentType.trim())) {
-                        contentType = getDefaultContentType();
-                    }
-                }
-            }
-        }
-
-        if (null == contentType) {
-            throw new IllegalArgumentException(MessageUtils.getExceptionMessageString(
-                 MessageUtils.CONTENT_TYPE_ERROR_MESSAGE_ID));
-        }
-
-        if (characterEncoding == null) {
-            characterEncoding = RIConstants.CHAR_ENCODING;
-        }
-
-        boolean scriptHiding = webConfig.isOptionEnabled(EnableJSStyleHiding);
-        boolean scriptInAttributes = webConfig.isOptionEnabled( EnableScriptInAttributeValue);
-        WebConfiguration.DisableUnicodeEscaping escaping =
-              WebConfiguration.DisableUnicodeEscaping.getByValue(
-                    webConfig.getOptionValue(DisableUnicodeEscaping));
-        boolean isPartial = context.getPartialViewContext().isPartialRequest();
-        return new HtmlResponseWriter(writer,
-                                      contentType,
-                                      characterEncoding,
-                                      scriptHiding,
-                                      scriptInAttributes,
-                                      escaping,
-                                      isPartial);
-    }
-
-
-    private boolean preferXhtml() {
-
-        return webConfig.isOptionEnabled(PreferXHTMLContentType);
-
-    }
-
-
-    private String getDefaultContentType() {
-
-        return ((preferXhtml())
-                ? RIConstants.XHTML_CONTENT_TYPE
-                : RIConstants.HTML_CONTENT_TYPE);
-
-    }
-
-
-    private String[] contentTypeSplit(String contentTypeString) {
-        String[] result = Util.split(contentTypeString, ",");
-        for (int i = 0; i < result.length; i++) {
-            int semicolon = result[i].indexOf(";");
-            if (-1 != semicolon) {
-                result[i] = result[i].substring(0, semicolon);
-            }
-        }
-        return result;
-    }
-
-    // Helper method that returns the content type if the desired content type is found in the
-    // array of supported types. 
-
-    private String findMatch(String desiredContentTypeList,
-                             String[] supportedTypes) {
-
-        String contentType = null;
-        String[] desiredTypes = contentTypeSplit(desiredContentTypeList);
-
-        // For each entry in the desiredTypes array, look for a match in
-        // the supportedTypes array
-        for (int i = 0, ilen = desiredTypes.length; i < ilen; i++) {
-            String curDesiredType = desiredTypes[i];
-            for (int j = 0, jlen = supportedTypes.length; j < jlen; j++) {
-                String curContentType = supportedTypes[j].trim();
-                if (curDesiredType.contains(curContentType)) {
-                    if (curContentType.contains(RIConstants.HTML_CONTENT_TYPE)) {
-                        contentType = RIConstants.HTML_CONTENT_TYPE;
-                    } else
-                    if (curContentType.contains(RIConstants.XHTML_CONTENT_TYPE) ||
-                         curContentType.contains(RIConstants.APPLICATION_XML_CONTENT_TYPE) ||
-                         curContentType.contains(RIConstants.TEXT_XML_CONTENT_TYPE)) {
-                        contentType = RIConstants.XHTML_CONTENT_TYPE;
-                    }
-                    break;
-                }
-            }
-            if (null != contentType) {
-                break;
-            }
-        }
-        return contentType;
-    }
-
-
-    public ResponseStream createResponseStream(OutputStream out) {
-        final OutputStream output = out;
-        return new ResponseStream() {
-            public void write(int b) throws IOException {
-                output.write(b);
-            }
-
-
-            public void write(byte b[]) throws IOException {
-                output.write(b);
-            }
-
-
-            public void write(byte b[], int off, int len) throws IOException {
-                output.write(b, off, len);
-            }
-
-
-            public void flush() throws IOException {
-                output.flush();
-            }
-
-
-            public void close() throws IOException {
-                output.close();
-            }
-        };
-    }
-
-
-    /**
-     * @see javax.faces.render.RenderKit#getComponentFamilies()
-     */
-    @Override
-    public Iterator<String> getComponentFamilies() {
-
-        return rendererFamilies.keySet().iterator();
-
-    }
-
-
-    /**
-     * @see javax.faces.render.RenderKit#getRendererTypes(String)  
-     */
-    @Override
-    public Iterator<String> getRendererTypes(String componentFamily) {
-
-        Map<String,Renderer> family = rendererFamilies.get(componentFamily);
-        if (family != null) {
-            return family.keySet().iterator();
-        } else {
-            Set<String> empty = Collections.emptySet();
-            return empty.iterator();
-        }
-
-    }
-
-    // The test for this class is in TestRenderKit.java
-
-} // end of class RenderKitImpl
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitUtils.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitUtils.java
deleted file mode 100644
index 9436882..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/RenderKitUtils.java
+++ /dev/null
@@ -1,1781 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.math.BigDecimal;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.ProjectStage;
-import javax.faces.application.Application;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.behavior.*;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.context.ExternalContext;
-import javax.faces.model.SelectItem;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.ResponseStateManager;
-import javax.faces.render.Renderer;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.facelets.util.DevTools;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-
-import javax.faces.component.*;
-import javax.faces.component.html.HtmlMessages;
-
-/**
- * <p>A set of utilities for use in {@link RenderKit}s.</p>
- */
-public class RenderKitUtils {
-
-    /**
-     * <p>The prefix to append to certain attributes when renderking
-     * <code>XHTML Transitional</code> content.
-     */
-    private static final String XHTML_ATTR_PREFIX = "xml:";
-
-
-    /**
-     * <p><code>Boolean</code> attributes to be rendered
-     * using <code>XHMTL</code> semantics.
-     */
-    private static final String[] BOOLEAN_ATTRIBUTES = {
-          "disabled", "ismap", "readonly"
-    };
-
-
-    /**
-     * <p>An array of attributes that must be prefixed by
-     * {@link #XHTML_ATTR_PREFIX} when rendering
-     * <code>XHTML Transitional</code> content.
-     */
-    private static final String[] XHTML_PREFIX_ATTRIBUTES = {
-          "lang"
-    };
-
-    /**
-     * <p>The maximum number of content type parts.
-     * For example: for the type: "text/html; level=1; q=0.5"
-     * The parts of this type would be:
-     *      "text" - type
-     *      "html; level=1" - subtype
-     *      "0.5" - quality value
-     *      "1" - level value </p>
-     */
-    private final static int MAX_CONTENT_TYPE_PARTS = 4;
-
-    /**
-     * The character that is used to delimit content types
-     * in an accept String.</p>
-     */
-    private final static String CONTENT_TYPE_DELIMITER = ",";
-
-    /**
-     * The character that is used to delimit the type and
-     * subtype portions of a content type in an accept String.
-     * Example: text/html </p>
-     */
-    private final static String CONTENT_TYPE_SUBTYPE_DELIMITER = "/";
-
-    /**
-     * This represents the base package that can leverage the
-     * <code>attributesThatAreSet</code> List for optimized attribute
-     * rendering.
-     *
-     * IMPLEMENTATION NOTE:  This must be kept in sync with the array
-     * in UIComponentBase$AttributesMap and HtmlComponentGenerator.
-     *
-     * Hopefully JSF 2.0 will remove the need for this.
-     */
-    private static final String OPTIMIZED_PACKAGE = "javax.faces.component.";
-
-
-    /**
-     * IMPLEMENTATION NOTE:  This must be kept in sync with the Key
-     * in UIComponentBase$AttributesMap and HtmlComponentGenerator.
-     *
-     * Hopefully JSF 2.0 will remove the need for this.
-     */
-    private static final String ATTRIBUTES_THAT_ARE_SET_KEY =
-        UIComponentBase.class.getName() + ".attributesThatAreSet";
-
-
-    protected static final Logger LOGGER = FacesLogger.RENDERKIT.getLogger();
-    
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private RenderKitUtils() {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Return the {@link RenderKit} for the current request.</p>
-     * @param context the {@link FacesContext} of the current request
-     * @return the {@link RenderKit} for the current request.
-     */
-    public static RenderKit getCurrentRenderKit(FacesContext context) {
-
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-              FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        return renderKitFactory.getRenderKit(context,
-                                             context
-                                                   .getViewRoot().getRenderKitId());
-
-    }
-
-
-    /**
-     * <p>Obtain and return the {@link ResponseStateManager} for
-     * the specified #renderKitId.</p>
-     *
-     * @param context the {@link FacesContext} of the current request
-     * @param renderKitId {@link RenderKit} ID
-     * @return the {@link ResponseStateManager} for the specified
-     *  #renderKitId
-     * @throws FacesException if an exception occurs while trying
-     *  to obtain the <code>ResponseStateManager</code>
-     */
-    public static ResponseStateManager getResponseStateManager(
-          FacesContext context, String renderKitId)
-          throws FacesException {
-
-        assert (null != renderKitId);
-        assert (null != context);
-
-        RenderKit renderKit = context.getRenderKit();
-        if (renderKit == null) {
-            // check request scope for a RenderKitFactory implementation
-            RenderKitFactory factory = (RenderKitFactory)
-                  RequestStateManager.get(context, RequestStateManager.RENDER_KIT_IMPL_REQ);
-            if (factory != null) {
-                renderKit = factory.getRenderKit(context, renderKitId);
-            } else {
-                factory = (RenderKitFactory)
-                      FactoryFinder
-                            .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-                if (factory == null) {
-                    throw new IllegalStateException();
-                } else {
-                    RequestStateManager.set(context,
-                                            RequestStateManager.RENDER_KIT_IMPL_REQ,
-                                            factory);
-                }
-                renderKit = factory.getRenderKit(context, renderKitId);
-            }
-        }
-        return renderKit.getResponseStateManager();
-
-    }
-
-    /**
-     * <p>Return a List of {@link javax.faces.model.SelectItem}
-     * instances representing the available options for this component,
-     * assembled from the set of {@link javax.faces.component.UISelectItem}
-     * and/or {@link javax.faces.component.UISelectItems} components that are
-     * direct children of this component.  If there are no such children, an
-     * empty <code>Iterator</code> is returned.</p>
-     *
-     * @param context The {@link javax.faces.context.FacesContext} for the current request.
-     *                If null, the UISelectItems behavior will not work.
-     * @param component the component
-     * @throws IllegalArgumentException if <code>context</code>
-     *                                  is <code>null</code>
-     * @return a List of the select items for the specified component
-     */
-    public static Iterator<SelectItem> getSelectItems(FacesContext context,
-                                                     UIComponent component) {
-
-        Util.notNull("context", context);
-        Util.notNull("component", component);
-
-        return new SelectItemsIterator(context, component);
-        
-    }
-
-
-
-    /**
-     * <p>Render any "passthru" attributes, where we simply just output the
-     * raw name and value of the attribute.  This method is aware of the
-     * set of HTML4 attributes that fall into this bucket.  Examples are
-     * all the javascript attributes, alt, rows, cols, etc. </p>
-     *
-     * @param context the FacesContext for this request
-     * @param writer writer the {@link javax.faces.context.ResponseWriter} to be used when writing
-     *  the attributes
-     * @param component the component
-     * @param attributes an array of attributes to be processed
-     * @throws IOException if an error occurs writing the attributes
-     */
-    public static void renderPassThruAttributes(FacesContext context,
-                                                ResponseWriter writer,
-                                                UIComponent component,
-                                                Attribute[] attributes)
-    throws IOException {
-
-        assert (null != context);
-        assert (null != writer);
-        assert (null != component);
-
-        Map<String, List<ClientBehavior>> behaviors = null;
-
-        if (component instanceof ClientBehaviorHolder) {
-            behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
-        }
-
-        // Don't render behavior scripts if component is disabled
-        if ((null != behaviors) && 
-            (behaviors.size() > 0) &&
-            Util.componentIsDisabled(component)) {
-            behaviors = null;
-        }
-
-        renderPassThruAttributes(context, writer, component, attributes, behaviors);
-    }
-
-    /**
-     * <p>Render any "passthru" attributes, where we simply just output the
-     * raw name and value of the attribute.  This method is aware of the
-     * set of HTML4 attributes that fall into this bucket.  Examples are
-     * all the javascript attributes, alt, rows, cols, etc. </p>
-     *
-     * @param context the FacesContext for this request
-     * @param writer writer the {@link javax.faces.context.ResponseWriter} to be used when writing
-     *  the attributes
-     * @param component the component
-     * @param attributes an array of attributes to be processed
-     * @param behaviors the behaviors for this component, or null if
-     *   component is not a ClientBehaviorHolder
-     * @throws IOException if an error occurs writing the attributes
-     */
-    public static void renderPassThruAttributes(FacesContext context,
-                                                ResponseWriter writer,
-                                                UIComponent component,
-                                                Attribute[] attributes,
-                                                Map<String, List<ClientBehavior>> behaviors)
-    throws IOException {
-
-        assert (null != writer);
-        assert (null != component);
-
-        if (behaviors == null) {
-            behaviors = Collections.emptyMap();
-        }
-
-        if (canBeOptimized(component, behaviors)) {
-            //noinspection unchecked
-            List<String> setAttributes = (List<String>)
-              component.getAttributes().get(ATTRIBUTES_THAT_ARE_SET_KEY);
-            if (setAttributes != null) {
-                renderPassThruAttributesOptimized(context,
-                                                  writer,
-                                                  component,
-                                                  attributes,
-                                                  setAttributes,
-                                                  behaviors);
-            }
-        } else {
-
-            // this block should only be hit by custom components leveraging
-            // the RI's rendering code, or in cases where we have behaviors
-            // attached to multiple events.  We make no assumptions and loop
-            // through
-            renderPassThruAttributesUnoptimized(context,
-                                                writer,
-                                                component,
-                                                attributes,
-                                                behaviors);
-        }
-    }
-
-    // Renders the onchange handler for input components.  Handles
-    // chaining together the user-provided onchange handler with
-    // any Behavior scripts.
-    public static void renderOnchange(FacesContext context, UIComponent component, boolean incExec)
-        throws IOException {
-
-        final String handlerName = "onchange";
-        final Object userHandler = component.getAttributes().get(handlerName);
-        String behaviorEventName = "valueChange";
-        if (component instanceof ClientBehaviorHolder) {
-            Map behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
-            if (null != behaviors && behaviors.containsKey("change")) {
-                behaviorEventName = "change";
-            }
-        }
-
-
-        List<ClientBehaviorContext.Parameter> params;
-        if (!incExec) {
-            params = Collections.emptyList();
-        } else {
-            params = new LinkedList<ClientBehaviorContext.Parameter>();
-            params.add(new ClientBehaviorContext.Parameter("incExec",true));
-        }
-        renderHandler(context,
-                      component,
-                      params,
-                      handlerName,
-                      userHandler,
-                      behaviorEventName,
-                      null,
-                      false,
-                      incExec);
-    }
-
-    // Renders onclick handler for SelectRaidio and SelectCheckbox
-    public static void renderSelectOnclick(FacesContext context, UIComponent component, boolean incExec)
-        throws IOException {
-
-        final String handlerName = "onclick";
-        final Object userHandler = component.getAttributes().get(handlerName);
-        String behaviorEventName = "valueChange";
-        if (component instanceof ClientBehaviorHolder) {
-            Map behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
-            if (null != behaviors && behaviors.containsKey("click")) {
-                behaviorEventName = "click";
-            }
-        }
-
-        List<ClientBehaviorContext.Parameter> params;
-        if (!incExec) {
-            params = Collections.emptyList();
-        } else {
-            params = new LinkedList<ClientBehaviorContext.Parameter>();
-            params.add(new ClientBehaviorContext.Parameter("incExec",true));
-        }
-        renderHandler(context,
-                      component,
-                      params,
-                      handlerName,
-                      userHandler,
-                      behaviorEventName,
-                      null,
-                      false,
-                      incExec);
-    }
-
-    // Renders the onclick handler for command buttons.  Handles
-    // chaining together the user-provided onclick handler, any
-    // Behavior scripts, plus the default button submit script.
-    public static void renderOnclick(FacesContext context, 
-                                     UIComponent component,
-                                     Collection<ClientBehaviorContext.Parameter> params,
-                                     String submitTarget,
-                                     boolean needsSubmit)
-        throws IOException {
-
-        final String handlerName = "onclick";
-        final Object userHandler = component.getAttributes().get(handlerName);
-        String behaviorEventName = "action";
-        if (component instanceof ClientBehaviorHolder) {
-            Map behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
-            if (null != behaviors && behaviors.containsKey("click")) {
-                behaviorEventName = "click";
-            }
-        }
-
-        renderHandler(context,
-                      component,
-                      params,
-                      handlerName,
-                      userHandler,
-                      behaviorEventName,
-                      submitTarget,
-                      needsSubmit,
-                      false);
-    }
-
-    public static String prefixAttribute(final String attrName,
-                                         final ResponseWriter writer) {
-
-        return (prefixAttribute(attrName,
-             RIConstants.XHTML_CONTENT_TYPE.equals(writer.getContentType())));
-
-    }
-
-
-    public static String prefixAttribute(final String attrName,
-                                         boolean isXhtml) {
-        if (isXhtml) {
-            if (Arrays.binarySearch(XHTML_PREFIX_ATTRIBUTES, attrName) > -1) {
-                return XHTML_ATTR_PREFIX + attrName;
-            } else {
-                return attrName;
-            }
-        } else {
-            return attrName;
-        }
-
-    }
-
-
-    /**
-     * <p>Renders the attributes from {@link #BOOLEAN_ATTRIBUTES}
-     * using <code>XHMTL</code> semantics (i.e., disabled="disabled").</p>
-     *
-     * @param writer writer the {@link ResponseWriter} to be used when writing
-     *  the attributes
-     * @param component the component
-     * @throws IOException if an error occurs writing the attributes
-     */
-    public static void renderXHTMLStyleBooleanAttributes(ResponseWriter writer,
-                                                         UIComponent component)
-          throws IOException {
-
-        assert (writer != null);
-        assert (component != null);
-
-        Map attrMap = component.getAttributes();
-        for (String attrName : BOOLEAN_ATTRIBUTES) {
-            Object val = attrMap.get(attrName);
-            if (val == null) {
-                continue;
-            }
-
-            if (Boolean.valueOf(val.toString())) {
-                writer.writeAttribute(attrName,
-                                      true,
-                                      attrName);
-            }
-        }
-
-    }
-
-    /**
-     * <p>Given an accept String from the client, and a <code>String</code>
-     * of server supported content types, determine the best qualified
-     * content type for the client.  If no match is found, or either of the
-     * arguments are <code>null</code>,  <code>null</code> is returned.</p>
-     *
-     * @param accept The client accept String
-     * @param serverSupportedTypes The types that the server supports
-     * @param preferredType The preferred content type if another type is found
-     *        with the same highest quality factor.
-     * @return The content type <code>String</code>
-     */
-    public static String determineContentType(String accept, String serverSupportedTypes, String preferredType) {
-        String contentType = null;
-
-        if (null == accept || null == serverSupportedTypes) {
-            return contentType;
-        }
-
-        String[][] clientContentTypes = buildTypeArrayFromString(accept);
-        String[][] serverContentTypes = buildTypeArrayFromString(serverSupportedTypes);
-        String[][] preferredContentType = buildTypeArrayFromString(preferredType);
-        String[][] matchedInfo = findMatch(clientContentTypes, serverContentTypes, preferredContentType);
-
-        // if best match exits and best match is not some wildcard,
-        // return best match
-        if ((matchedInfo[0][1] != null) && !(matchedInfo[0][2].equals("*"))) {
-            contentType = matchedInfo[0][1] + CONTENT_TYPE_SUBTYPE_DELIMITER + matchedInfo[0][2];
-        }
-
-        return contentType;
-    }
-
-
-    /**
-     * @param contentType the content type in question
-     * @return <code>true</code> if the content type is a known XML-based
-     *  content type, otherwise, <code>false</code>
-     */
-    public static boolean isXml(String contentType) {
-        return (RIConstants.XHTML_CONTENT_TYPE.equals(contentType)
-                || RIConstants.APPLICATION_XML_CONTENT_TYPE.equals(contentType)
-                || RIConstants.TEXT_XML_CONTENT_TYPE.equals(contentType));
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    
-    /**
-     * @param component the UIComponent in question
-     * @return <code>true</code> if the component is within the
-     *  <code>javax.faces.component</code> or <code>javax.faces.component.html</code>
-     *  packages, otherwise return <code>false</code>
-     */
-    private static boolean canBeOptimized(UIComponent component,
-                                          Map<String, List<ClientBehavior>> behaviors) {
-        assert(component != null);
-        assert(behaviors != null);
-
-        String name = component.getClass().getName();
-        if (name != null && name.startsWith(OPTIMIZED_PACKAGE)) {
-
-            // If we've got behaviors attached to multiple events
-            // it is difficult to optimize, so fall back to the
-            // non-optimized code path.  Behaviors attached to 
-            // multiple event handlers should be a fairly rare case.
-            return (behaviors.size() < 2);
-        }
-
-        return false;
-    }
-
-
-    /**
-     * <p>For each attribute in <code>setAttributes</code>, perform a binary
-     * search against the array of <code>knownAttributes</code>  If a match is found
-     * and the value is not <code>null</code>, render the attribute.
-     * @param context the {@link FacesContext} of the current request
-     * @param writer the current writer
-     * @param component the component whose attributes we're rendering
-     * @param knownAttributes an array of pass-through attributes supported by
-     *  this component
-     * @param setAttributes a <code>List</code> of attributes that have been set
-     *  on the provided component
-     * @param behaviors the non-null behaviors map for this request.
-     * @throws IOException if an error occurs during the write
-     */
-    private static void renderPassThruAttributesOptimized(FacesContext context,
-                                                          ResponseWriter writer,
-                                                          UIComponent component,
-                                                          Attribute[] knownAttributes, 
-                                                          List<String> setAttributes,
-                                                          Map<String,List<ClientBehavior>> behaviors)
-    throws IOException {
-
-        // We should only come in here if we've got zero or one behavior event
-        assert((behaviors != null) && (behaviors.size() < 2));
-        String behaviorEventName = getSingleBehaviorEventName(behaviors);
-        boolean renderedBehavior = false;
-
-        Collections.sort(setAttributes);
-        boolean isXhtml =
-              RIConstants.XHTML_CONTENT_TYPE.equals(writer.getContentType());
-        Map<String, Object> attrMap = component.getAttributes();
-        for (String name : setAttributes) {
-
-            // Note that this search can be optimized by switching from
-            // an array to a Map<String, Attribute>.  This would change
-            // the search time from O(log n) to O(1).
-            int index = Arrays.binarySearch(knownAttributes, Attribute.attr(name));
-            if (index >= 0) {
-                Object value =
-                      attrMap.get(name);
-                if (value != null && shouldRenderAttribute(value)) {
-
-                    Attribute attr = knownAttributes[index];
-
-                    if (isBehaviorEventAttribute(attr, behaviorEventName)) {
-                        renderHandler(context,
-                                      component,
-                                      null,
-                                      name,
-                                      value,
-                                      behaviorEventName,
-                                      null,
-                                      false,
-                                      false);
-
-                        renderedBehavior = true;
-                    } else {
-                        writer.writeAttribute(prefixAttribute(name, isXhtml),
-                                              value,
-                                              name);
-                    }
-                }
-            }
-        }
-
-        // We did not render out the behavior as part of our optimized
-        // attribute rendering.  Need to manually render it out now.
-        if ((behaviorEventName != null) && !renderedBehavior) {
-
-            // Note that we can optimize this search by providing
-            // an event name -> Attribute inverse look up map.
-            // This would change the search time from O(n) to O(1).
-            for (int i = 0; i < knownAttributes.length; i++) {
-                Attribute attr = knownAttributes[i];
-                String[] events = attr.getEvents();
-                if ((events != null) &&
-                    (events.length > 0) &&
-                    (behaviorEventName.equals(events[0]))) {
-
-                        renderHandler(context, 
-                                      component,
-                                      null,
-                                      attr.getName(),
-                                      null,
-                                      behaviorEventName,
-                                      null,
-                                      false,
-                                      false);
-                }
-            }
- 
-
-        }
-    }
-
-    /**
-     * <p>Loops over all known attributes and attempts to render each one.
-     * @param context the {@link FacesContext} of the current request
-     * @param writer the current writer
-     * @param component the component whose attributes we're rendering
-     * @param knownAttributes an array of pass-through attributes supported by
-     *  this component
-     * @param behaviors the non-null behaviors map for this request.
-     * @throws IOException if an error occurs during the write
-     */
-    private static void renderPassThruAttributesUnoptimized(FacesContext context,
-                                                            ResponseWriter writer,
-                                                            UIComponent component,
-                                                            Attribute[] knownAttributes, 
-                                                            Map<String,List<ClientBehavior>> behaviors)
-    throws IOException {
-
-        boolean isXhtml = RIConstants.XHTML_CONTENT_TYPE.equals(writer.getContentType());
-
-        Map<String, Object> attrMap = component.getAttributes();
-
-        for (Attribute attribute : knownAttributes) {
-            String attrName = attribute.getName();
-            String[] events = attribute.getEvents();
-            boolean hasBehavior = ((events != null) &&
-                                   (events.length > 0) &&
-                                   (behaviors.containsKey(events[0])));
-
-            Object value = attrMap.get(attrName);
-
-            if (value != null && shouldRenderAttribute(value) && !hasBehavior) {
-                writer.writeAttribute(prefixAttribute(attrName, isXhtml),
-                                      value,
-                                      attrName);
-            } else if (hasBehavior) {
-
-                // If we've got a behavior for this attribute,
-                // we may need to chain scripts together, so use 
-                // renderHandler().
-                renderHandler(context, 
-                              component, 
-                              null,
-                              attrName,
-                              value,
-                              events[0],
-                              null,
-                              false,
-                              false);
-            }
-        }
-    }
-
-    /**
-     * <p>Determines if an attribute should be rendered based on the
-     * specified #attributeVal.</p>
-     *
-     * @param attributeVal the attribute value
-     * @return <code>true</code> if and only if #attributeVal is
-     *  an instance of a wrapper for a primitive type and its value is
-     *  equal to the default value for that type as given in the specification.
-     */
-    private static boolean shouldRenderAttribute(Object attributeVal) {
-
-        if (attributeVal instanceof String) {
-            return true;
-        } else if (attributeVal instanceof Boolean &&
-            Boolean.FALSE.equals(attributeVal)) {
-            return false;
-        } else if (attributeVal instanceof Integer &&
-                   (Integer) attributeVal == Integer.MIN_VALUE) {
-            return false;
-        } else if (attributeVal instanceof Double &&
-                   (Double) attributeVal == Double.MIN_VALUE) {
-            return false;
-        } else if (attributeVal instanceof Character &&
-                   (Character) attributeVal
-                   == Character
-                         .MIN_VALUE) {
-            return false;
-        } else if (attributeVal instanceof Float &&
-                   (Float) attributeVal == Float.MIN_VALUE) {
-            return false;
-        } else if (attributeVal instanceof Short &&
-                   (Short) attributeVal == Short.MIN_VALUE) {
-            return false;
-        } else if (attributeVal instanceof Byte &&
-                   (Byte) attributeVal == Byte.MIN_VALUE) {
-            return false;
-        } else if (attributeVal instanceof Long &&
-                   (Long) attributeVal == Long.MIN_VALUE) {
-            return false;
-        }
-        return true;
-
-    }
-
-    /**
-     * <p>This method builds a two element array structure as follows:
-     * Example:
-     *     Given the following accept string:
-     *       text/html; level=1, text/plain; q=0.5
-     *     [0][0] 1  (quality is 1 if none specified)
-     *     [0][1] "text"  (type)
-     *     [0][2] "html; level=1" (subtype)
-     *     [0][3] 1 (level, if specified; null if not)
-     *
-     *     [1][0] .5
-     *     [1][1] "text"
-     *     [1][2] "plain"
-     *     [1][3] (level, if specified; null if not)
-     *
-     * The array is used for comparison purposes in the findMatch method.</p>
-     *
-     * @param accept An accept <code>String</code>
-     * @return an two dimensional array containing content-type/quality info
-     */
-    private static String[][] buildTypeArrayFromString(String accept) {
-        // return if empty
-        if ((accept == null) || (accept.length() == 0)) {
-            return new String[0][0];
-        }
-        // some helper variables
-        StringBuilder typeSubType;
-        String type;
-        String subtype;
-        String level = null;
-        String quality = null;
-
-        // Parse "types"
-        String[] types = Util.split(accept, CONTENT_TYPE_DELIMITER);
-        String[][] arrayAccept = new String[types.length][MAX_CONTENT_TYPE_PARTS];
-        int index = -1;
-        for (int i=0; i<types.length; i++) {
-            String token = types[i].trim();
-            index += 1;
-            // Check to see if our accept string contains the delimiter that is used
-            // to add uniqueness to a type/subtype, and/or delimits a qualifier value:
-            //    Example: text/html;level=1,text/html;level=2; q=.5
-            if (token.contains(";")) {
-                String[] typeParts = Util.split(token, ";");
-                typeSubType = new StringBuilder(typeParts[0].trim());
-                for (int j=1; j<typeParts.length; j++) {
-                    quality = "not set";
-                    token = typeParts[j].trim();
-                    // if "level" is present, make sure it gets included in the "type/subtype"
-                    if (token.contains("level")) {
-                        typeSubType.append(';').append(token);
-                        String[] levelParts = Util.split(token, "=");
-                        level = levelParts[0].trim();
-                        if (level.equalsIgnoreCase("level")) {
-                            level = levelParts[1].trim();
-                        }
-                    } else {
-                        quality = token;
-                        String[] qualityParts = Util.split(quality, "=");
-                        quality = qualityParts[0].trim();
-                        if (quality.equalsIgnoreCase("q")) {
-                            quality = qualityParts[1].trim();
-                            break;
-                        } else {
-                            quality = "not set"; // to identifiy that no quality was supplied
-                        }
-                    }
-                }
-            } else {
-                typeSubType = new StringBuilder(token);
-                quality = "not set"; // to identifiy that no quality was supplied
-            }
-            // now split type and subtype
-            if (typeSubType.indexOf(CONTENT_TYPE_SUBTYPE_DELIMITER) >= 0) {
-                String[] typeSubTypeParts = Util.split(typeSubType.toString(), CONTENT_TYPE_SUBTYPE_DELIMITER);
-                // Apparently there are user-agents that send invalid
-                // Accept headers containing no subtype (i.e. text/).
-                // For those cases, assume "*" for the subtype.
-                if (typeSubTypeParts.length == 1) {
-                    type = typeSubTypeParts[0].trim();
-                    subtype = "*";
-                } else {
-                    type = typeSubTypeParts[0].trim();
-                    subtype = typeSubTypeParts[1].trim();
-                }
-
-            } else {
-                type = typeSubType.toString();
-                subtype = "";
-            }
-            // check quality and assign values
-            if ("not set".equals(quality)) {
-                if (type.equals("*") && subtype.equals("*")) {
-                    quality = "0.01";
-                } else if (!type.equals("*") && subtype.equals("*")) {
-                    quality = "0.02";
-                } else if (type.equals("*") && subtype.length() == 0) {
-                    quality = "0.01";
-                } else {
-                    quality = "1";
-                }
-            }
-            arrayAccept[index][0] = quality;
-            arrayAccept[index][1] = type;
-            arrayAccept[index][2] = subtype;
-            arrayAccept[index][3] = level;
-        }
-        return (arrayAccept);
-    }
-
-    /**
-     * <p>For each server supported type, compare client (browser) specified types.
-     * If a match is found, keep track of the highest quality factor.
-     * The end result is that for all matches, only the one with the highest
-     * quality will be returned.</p>
-     *
-     * @param clientContentTypes An <code>array</code> of accept <code>String</code>
-     * information for the client built from @{link #buildTypeArrayFromString}.
-     * @param serverSupportedContentTypes An <code>array</code> of accept <code>String</code>
-     * information for the server supported types built from @{link #buildTypeArrayFromString}.
-     * @param preferredContentType An <code>array</code> of preferred content type information.
-     * @return An <code>array</code> containing the parts of the preferred content type for the
-     * client.  The information is stored as outlined in @{link #buildTypeArrayFromString}.
-     */
-    private static String[][] findMatch(String[][] clientContentTypes,
-                                        String[][] serverSupportedContentTypes,
-                                        String[][] preferredContentType) {
-
-        List<String[]> resultList = new ArrayList<String[]>(serverSupportedContentTypes.length);
-
-        // the highest quality
-        double highestQFactor = 0;
-        // the record with the highest quality
-        int idx = 0;
-        for (int sidx = 0, slen = serverSupportedContentTypes.length; sidx < slen; sidx++) {
-            // get server type
-            String serverType = serverSupportedContentTypes[sidx][1];
-            if (serverType != null) {
-                for (int cidx = 0, clen = clientContentTypes.length; cidx < clen; cidx++) {
-                    // get browser type
-                    String browserType = clientContentTypes[cidx][1];
-                    if (browserType != null) {
-                        // compare them and check for wildcard
-                        if ((browserType.equalsIgnoreCase(serverType)) || (browserType.equals("*"))) {
-                            // types are equal or browser type is wildcard - compare subtypes
-                            if ((clientContentTypes[cidx][2].equalsIgnoreCase(
-                                serverSupportedContentTypes[sidx][2])) ||
-                                (clientContentTypes[cidx][2].equals("*"))) {
-                                // subtypes are equal or browser subtype is wildcard
-                                // found match: multiplicate qualities and add to result array
-                                // if there was a level associated, this gets higher precedence, so
-                                // factor in the level in the calculation.
-                                double cLevel = 0.0;
-                                double sLevel = 0.0;
-                                if (clientContentTypes[cidx][3] != null) {
-                                    cLevel = (Double.parseDouble(clientContentTypes[cidx][3]))*.10;
-                                }
-                                if (serverSupportedContentTypes[sidx][3] != null) {
-                                    sLevel = (Double.parseDouble(serverSupportedContentTypes[sidx][3]))*.10;
-                                }
-                                double cQfactor = Double.parseDouble(clientContentTypes[cidx][0]) + cLevel;
-                                double sQfactor = Double.parseDouble(serverSupportedContentTypes[sidx][0]) + sLevel;
-                                double resultQuality = cQfactor * sQfactor;
-
-                                String[] curResult = new String[MAX_CONTENT_TYPE_PARTS];
-                                resultList.add(curResult);
-                                curResult[0] = String.valueOf(resultQuality);
-
-                                if (clientContentTypes[cidx][2].equals("*")) {
-                                    // browser subtype is wildcard
-                                    // return type and subtype (wildcard)
-                                    curResult[1] = clientContentTypes[cidx][1];
-                                    curResult[2] = clientContentTypes[cidx][2];
-                                } else {
-                                    // return server type and subtype
-                                    curResult[1] = serverSupportedContentTypes[sidx][1];
-                                    curResult[2] = serverSupportedContentTypes[sidx][2];
-                                    curResult[3] = serverSupportedContentTypes[sidx][3];
-                                }
-                                // check if this was the highest factor
-                                if (resultQuality > highestQFactor) {
-                                    idx = resultList.size() - 1;
-                                    highestQFactor = resultQuality;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        // First, determine if we have a type that has the highest quality factor that
-        // also matches the preferred type (if there is one):
-        String[][] match = new String[1][3];
-        if (preferredContentType.length != 0 && preferredContentType[0][0] != null) {
-            BigDecimal highestQual = BigDecimal.valueOf(highestQFactor);
-            for (int i = 0, len = resultList.size(); i < len; i++) {
-                String[] result = resultList.get(i);
-                if ((BigDecimal.valueOf(Double.parseDouble(result[0])).compareTo(highestQual) == 0)
-                    && (result[1]).equals(preferredContentType[0][1])
-                    && (result[2]).equals(preferredContentType[0][2])) {
-                    match[0][0] = result[0];
-                    match[0][1] = result[1];
-                    match[0][2] = result[2];
-                    return match;
-                }
-            }
-        }
-
-        if (!resultList.isEmpty()) {
-            String[] fallBack = resultList.get(idx);
-            match[0][0] = fallBack[0];
-            match[0][1] = fallBack[1];
-            match[0][2] = fallBack[2];
-        }
-
-        return match;
-    }
-
-    /**
-     * <p>Replaces all occurrences of <code>-</code> with <code>$_</code>.</p>
-     *
-     * @param origIdentifier the original identifer that needs to be
-     *  'ECMA-ized'
-     * @return an ECMA valid identifer
-     */
-    public static String createValidECMAIdentifier(String origIdentifier) {
-        return origIdentifier.replace("-", "$_");
-    }
-
-
-    /**
-     * <p>Renders the Javascript necessary to add and remove request
-     * parameters to the current form.</p>
-     * @param context the <code>FacesContext</code> for the current request
-     * @throws java.io.IOException if an error occurs writing to the response
-     */
-    public static void renderJsfJs(FacesContext context) throws IOException {
-
-
-        if (hasScriptBeenRendered(context)) {
-            // Already included, return
-            return;
-        }
-
-        final String name = "jsf.js";
-        final String library = "javax.faces";
-
-        if (hasResourceBeenInstalled(context, name, library)) {
-            setScriptAsRendered(context);
-            return;
-        }
-        // Since we've now determined that it's not in the page, we need to add it.
-
-        ResourceHandler handler = context.getApplication().getResourceHandler();
-        Resource resource = handler.createResource(name, library);
-        ResponseWriter writer = context.getResponseWriter();
-        writer.write('\n');
-        writer.startElement("script", null);
-        writer.writeAttribute("type", "text/javascript", null);
-        writer.writeAttribute("src", ((resource != null) ? resource.getRequestPath() : ""), null);
-        writer.endElement("script");
-        writer.append('\r');
-        writer.append('\n');
-
-        // Set the context to record script as included
-        setScriptAsRendered(context);
-    }
-
-
-    public static boolean hasResourceBeenInstalled(FacesContext ctx,
-                                                   String name,
-                                                   String library) {
-
-        UIViewRoot viewRoot = ctx.getViewRoot();
-        ListIterator iter = (viewRoot.getComponentResources(ctx, "head")).listIterator();
-        while (iter.hasNext()) {
-            UIComponent resource = (UIComponent)iter.next();
-            String rname = (String)resource.getAttributes().get("name");
-            String rlibrary = (String)resource.getAttributes().get("library");
-            if (name.equals(rname) && library.equals(rlibrary)) {
-                // Set the context to record script as included
-                return true;
-            }
-        }
-        iter = (viewRoot.getComponentResources(ctx, "body")).listIterator();
-        while (iter.hasNext()) {
-            UIComponent resource = (UIComponent)iter.next();
-            String rname = (String)resource.getAttributes().get("name");
-            String rlibrary = (String)resource.getAttributes().get("library");
-            if (name.equals(rname) && library.equals(rlibrary)) {
-                // Set the context to record script as included
-                return true;
-            }
-        }
-        iter = (viewRoot.getComponentResources(ctx, "form")).listIterator();
-        while (iter.hasNext()) {
-            UIComponent resource = (UIComponent)iter.next();
-            String rname = (String)resource.getAttributes().get("name");
-            String rlibrary = (String)resource.getAttributes().get("library");
-            if (name.equals(rname) && library.equals(rlibrary)) {
-                // Set the context to record script as included
-                return true;
-            }
-        }
-
-        return false;
-
-    }
-
-
-    public static void renderUnhandledMessages(FacesContext ctx) {
-
-        if (ctx.isProjectStage(ProjectStage.Development)) {
-            Application app = ctx.getApplication();
-            HtmlMessages messages = (HtmlMessages) app.createComponent(HtmlMessages.COMPONENT_TYPE);
-            messages.setId("javax_faces_developmentstage_messages");
-            Renderer messagesRenderer = ctx.getRenderKit().getRenderer(HtmlMessages.COMPONENT_FAMILY, "javax.faces.Messages");
-            messages.setErrorStyle("Color: red");
-            messages.setWarnStyle("Color: orange");
-            messages.setInfoStyle("Color: blue");
-            messages.setFatalStyle("Color: red");
-            messages.setTooltip(true);
-            messages.setTitle("Project Stage[Development]: Unhandled Messages");
-            messages.setRedisplay(false);
-            try {
-                messagesRenderer.encodeBegin(ctx, messages);
-                messagesRenderer.encodeEnd(ctx, messages);
-            } catch (IOException ioe) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE, ioe.toString(), ioe);
-                }
-            }
-        } else {
-            Iterator<String> clientIds = ctx.getClientIdsWithMessages();
-            int messageCount = 0;
-            if (clientIds.hasNext()) {
-                //Display each message possibly not displayed.
-                StringBuilder builder = new StringBuilder();
-                while (clientIds.hasNext()) {
-                    String clientId = clientIds.next();
-                    Iterator<FacesMessage> messages =
-                          ctx.getMessages(clientId);
-                    while (messages.hasNext()) {
-                        FacesMessage message = messages.next();
-                        if (message.isRendered()) {
-                            continue;
-                        }
-                        messageCount++;
-                        builder.append("\n");
-                        builder.append("sourceId=").append(clientId);
-                        builder.append("[severity=(")
-                              .append(message.getSeverity());
-                        builder.append("), summary=(")
-                              .append(message.getSummary());
-                        builder.append("), detail=(")
-                              .append(message.getDetail()).append(")]");
-                    }
-                }
-                if (messageCount > 0) {
-                	if (LOGGER.isLoggable(Level.INFO)) {
-                		LOGGER.log(Level.INFO, "jsf.non_displayed_message", builder.toString());
-                	}
-                }
-            }
-        }
-
-    }
-
-    public static  void renderHtmlErrorPage(FacesContext ctx, FacesException fe) {
-
-        ExternalContext extContext = ctx.getExternalContext();
-        if (!extContext.isResponseCommitted()) {
-            extContext.responseReset();
-            extContext.setResponseContentType("text/html; charset=UTF-8");
-            extContext.setResponseStatus(500);
-            try {
-                Writer w = extContext.getResponseOutputWriter();
-                DevTools.debugHtml(w, ctx, fe.getCause());
-                w.flush();
-            } catch (IOException ioe) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "Unable to generate Facelets error page.",
-                               ioe);
-                }
-            }
-            ctx.responseComplete();
-        } else {
-        	if (LOGGER.isLoggable(Level.WARNING)) {
-	            LOGGER.log(Level.WARNING,
-	                       "jsf.facelets.error.page.response.committed");
-        	}
-        	if (LOGGER.isLoggable(Level.SEVERE)) {
-        		LOGGER.log(Level.SEVERE, fe.toString(), fe);
-        	}
-        }
-
-    }
-
-    // Check the request parameters to see whether an action event has
-    // been triggered either via jsf.ajax.request() or via a submitting
-    // behavior.
-    public static boolean isPartialOrBehaviorAction(FacesContext context,
-                                                    String clientId) {
-        if ((clientId == null) || (clientId.length() == 0)) {
-            return false;
-        }
-
-        ExternalContext external = context.getExternalContext();
-        Map<String, String> params = external.getRequestParameterMap();
-
-        String source = params.get("javax.faces.source");
-        if (!clientId.equals(source)) {
-            return false;
-        }
-
-        // First check for a Behavior action event.
-        String behaviorEvent = params.get("javax.faces.behavior.event");
-        if (null != behaviorEvent) {
-            return ("action".equals(behaviorEvent));
-        }
-
-        // Not a Behavior-related request.  Check for jsf.ajax.request()
-        // request params.
-        String partialEvent = params.get("javax.faces.partial.event");
-
-        return ("click".equals(partialEvent));
-    }
-
-
-   /**
-     * <p>Utility method to return the client ID of the parent form.</p>
-     *
-     * @param component typically a command component
-     * @param context   the <code>FacesContext</code> for the current request
-     *
-     * @return the client ID of the parent form, if any
-     */
-    public static String getFormClientId(UIComponent component,
-                                   FacesContext context) {
-
-        UIComponent parent = component.getParent();
-        while (parent != null) {
-            if (parent instanceof UIForm) {
-                break;
-            }
-            parent = parent.getParent();
-        }
-        
-        UIForm form = (UIForm) parent;
-        if (form != null) {
-            return form.getClientId(context);
-        }
-
-        return null;
-    }
-
-
-    /**
-     * @param context the <code>FacesContext</code> for the current request
-     *
-     * @return <code>true</code> If the <code>add/remove</code> javascript
-     *         has been rendered, otherwise <code>false</code>
-     */
-    public static boolean hasScriptBeenRendered(FacesContext context) {
-
-        return RequestStateManager.containsKey(context, RequestStateManager.SCRIPT_STATE);
-
-    }
-
-
-    /**
-     * <p>Set a flag to indicate that the <code>add/remove</code> javascript
-     * has been rendered for the current form.
-     *
-     * @param context the <code>FacesContext</code> of the current request
-     */
-    public static void setScriptAsRendered(FacesContext context) {
-
-        RequestStateManager.set(context,
-                                RequestStateManager.SCRIPT_STATE,
-                                Boolean.TRUE);
-
-    }
-
-
-    /**
-     * <p>
-     * Determine the path value of an image value for a component such as
-     * UIGraphic or UICommand.
-     * </p>
-     *
-     * @param context the {@link FacesContext} for the current request.
-     * @param component the component to obtain the image information from
-     * @param attrName the attribute name that needs to be queried if the
-     *  name and library attributes are not specified
-     *
-     * @return the encoded path to the image source
-     */
-    public static String getImageSource(FacesContext context, UIComponent component, String attrName) {
-
-        String resName = (String) component.getAttributes().get("name");
-        if (resName != null) {
-            String libName = (String) component.getAttributes().get("library");
-            ResourceHandler handler = context.getApplication().getResourceHandler();
-            Resource res = handler.createResource(resName, libName);
-            if (res == null) {
-                if (context.isProjectStage(ProjectStage.Development)) {
-                    String msg = "Unable to find resource " + resName;
-                    context.addMessage(component.getClientId(context),
-                                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                        msg,
-                                                        msg));
-                }
-                return "RES_NOT_FOUND";
-            } else {
-                return res.getRequestPath();
-            }
-        } else {
-            
-            String value = (String) component.getAttributes().get(attrName);
-            if (value == null || value.length() == 0) {
-                return "";
-            }
-            if (value.contains(ResourceHandler.RESOURCE_IDENTIFIER)) {
-                return value;
-            } else {
-                value = context.getApplication().getViewHandler().
-                      getResourceURL(context, value);
-                return (context.getExternalContext().encodeResourceURL(value));
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-
-    // Appends a script to a jsf.util.chain() call
-    private static void appendScriptToChain(StringBuilder builder, 
-                                               String script) {
-
-        if ((script == null) || (script.length() == 0)) {
-            return;
-        }
-
-        if (builder.charAt(builder.length() - 1) != ',')
-            builder.append(',');
-
-        appendQuotedValue(builder, script);
-    }
-
-    // Appends an name/value property pair to a JSON object.  Assumes
-    // object has already been opened by the caller.  The value will
-    // be quoted (ie. wrapped in single quotes and escaped appropriately).
-    public static void appendProperty(StringBuilder builder, 
-                                      String name,
-                                      Object value) {
-        appendProperty(builder, name, value, true);
-    }
-
-    // Appends an name/value property pair to a JSON object.  Assumes
-    // object has already been opened by the caller.
-    public static void appendProperty(StringBuilder builder, 
-                                      String name,
-                                      Object value,
-                                      boolean quoteValue) {
-
-        if ((null == name) || (name.length() == 0))
-            throw new IllegalArgumentException();
-
-
-        char lastChar = builder.charAt(builder.length() - 1);
-        if ((lastChar != ',') && (lastChar != '{'))
-            builder.append(',');
-
-        RenderKitUtils.appendQuotedValue(builder, name);
-        builder.append(":");
-
-        if (value == null) {
-            builder.append("''");
-        } else if (quoteValue) {
-            RenderKitUtils.appendQuotedValue(builder, value.toString());
-        } else {
-            builder.append(value.toString());
-        }
-    }
-
-    // Append a script to the chain, escaping any single quotes, since
-    // our script content is itself nested within single quotes.
-    private static void appendQuotedValue(StringBuilder builder, 
-                                          String script) {
-
-        builder.append("'");
-
-        int length = script.length();
-
-        for (int i = 0; i < length; i++) {
-            char c = script.charAt(i);
-
-            if (c == '\'' || c == '\\') {
-                builder.append('\\');
-            } 
-
-            builder.append(c);
-        }
-
-        builder.append("'");
-    }
-
-    // Appends one or more behavior scripts a jsf.util.chain() call
-    private static boolean appendBehaviorsToChain(StringBuilder builder,
-                                                  FacesContext context, 
-                                                  UIComponent component,
-                                                  List<ClientBehavior> behaviors,
-                                                  String behaviorEventName,
-                                                  Collection<ClientBehaviorContext.Parameter> params) {
-
-        if ((behaviors == null) || (behaviors.isEmpty())) {
-            return false;
-        }
-
-        ClientBehaviorContext bContext = createClientBehaviorContext(context,
-                                                         component,
-                                                         behaviorEventName,
-                                                         params);
-
-        boolean submitting = false;
-
-        for (ClientBehavior behavior : behaviors) {
-            String script = behavior.getScript(bContext);
-            if ((script != null) && (script.length() > 0)) {
-                appendScriptToChain(builder, script);
-
-                if (isSubmitting(behavior)) {
-                    submitting = true;
-               }
-            }
-        }
-
-        return submitting;
-    }
-
-    // Given a behaviors Map with a single entry, returns the event name
-    // for that entry.  Or, if no entries, returns null.  Used by 
-    // renderPassThruAttributesOptimized.
-    private static String getSingleBehaviorEventName(Map<String, List<ClientBehavior>> behaviors) {
-        assert(behaviors != null);
-
-        int size = behaviors.size();
-        if (size == 0) {
-            return null;
-        }
-
-        // If we made it this far, we should have a single
-        // entry in the behaviors map.
-        assert(size == 1);
-
-        Iterator<String> keys = behaviors.keySet().iterator();
-        assert(keys.hasNext());
-
-        return keys.next();
-    }
-
-    // Tests whether the specified Attribute matches to specified
-    // behavior event name.  Used by renderPassThruAttributesOptimized.
-    private static boolean isBehaviorEventAttribute(Attribute attr,
-                                                    String behaviorEventName) {
-
-      String[] events = attr.getEvents();
-
-      return ((behaviorEventName != null) &&
-              (events != null) &&
-              (events.length > 0) &&
-              (behaviorEventName.equals(events[0])));
-    }
-
-    // Ensures that the user-specified DOM event handler script
-    // is non-empty, and trimmed if necessary.
-    private static String getNonEmptyUserHandler(Object handlerObject) {
-
-        String handler = null;
-
-        if (null != handlerObject) {
-            handler = handlerObject.toString();
-            handler = handler.trim();
-
-            if (handler.length() == 0)
-                handler = null;
-        }
-
-        return handler;
-    }
-
-    // Returns the Behaviors for the specified component/event name,
-    // or null if no Behaviors are available
-    private static List<ClientBehavior> getClientBehaviors(UIComponent component,
-                                               String behaviorEventName) {
-
-        if (component instanceof ClientBehaviorHolder) {
-            ClientBehaviorHolder bHolder = (ClientBehaviorHolder)component;
-            Map <String, List <ClientBehavior>> behaviors = bHolder.getClientBehaviors();
-            if (null != behaviors) {
-                return behaviors.get(behaviorEventName);
-            }
-        }
-
-        return null;
-    }
-
-    // Returns a submit handler - ie. a script that calls
-    // mojara.jsfcljs()
-    private static String getSubmitHandler(FacesContext context,
-                                           UIComponent component,
-                                           Collection<ClientBehaviorContext.Parameter> params,
-                                           String submitTarget,
-                                           boolean preventDefault) {
-
-        StringBuilder builder = new StringBuilder(256);
-
-        String formClientId = getFormClientId(component, context);
-        String componentClientId = component.getClientId(context);
-
-        builder.append("mojarra.jsfcljs(document.getElementById('");
-        builder.append(formClientId);
-        builder.append("'),{");
-
-        appendProperty(builder, componentClientId, componentClientId);
-
-        if ((null != params) && (!params.isEmpty())) {
-            for (ClientBehaviorContext.Parameter param : params) {
-                appendProperty(builder, param.getName(), param.getValue());
-            }
-        }
-
-        builder.append("},'");
-
-        if (submitTarget != null) {
-            builder.append(submitTarget);
-        }
-
-        builder.append("')");
-
-        if (preventDefault) {
-            builder.append(";return false");
-        }
-
-        return builder.toString();
-    }
-
-    // Chains together a number of Behavior scripts with a user handler
-    // script.
-    private static String getChainedHandler(FacesContext context,
-                                            UIComponent component,
-                                            List<ClientBehavior> behaviors,
-                                            Collection<ClientBehaviorContext.Parameter> params,
-                                            String behaviorEventName,
-                                            String userHandler,
-                                            String submitTarget,
-                                            boolean needsSubmit) {
-
-
-        // Hard to pre-compute builder initial capacity
-        StringBuilder builder = new StringBuilder(100);
-        builder.append("jsf.util.chain(this,event,");
-
-        appendScriptToChain(builder, userHandler);
-
-        boolean  submitting = appendBehaviorsToChain(builder,
-                                                     context,
-                                                     component, 
-                                                     behaviors, 
-                                                     behaviorEventName,
-                                                     params);
-    
-
-
-        boolean hasParams = ((null != params) && !params.isEmpty());
-
-        // If we've got parameters but we didn't render a "submitting"
-        // behavior script, we need to explicitly render a submit script.
-        if (!submitting && (hasParams || needsSubmit)) {
-            String submitHandler = getSubmitHandler(context, 
-                                                    component,
-                                                    params,
-                                                    submitTarget,
-                                                    false);
-
-            appendScriptToChain(builder, submitHandler);
-
-            // We are now submitting since we've rendered a submit script.
-            submitting = true;
-        }
-
-        builder.append(")");
-
-        // If we're submitting (either via a behavior, or by rendering
-        // a submit script), we need to return false to prevent the
-        // default button/link action.
-        if (submitting &&
-                ("action".equals(behaviorEventName) ||
-                 "click".equals(behaviorEventName))) {
-            builder.append(";return false");
-        }
-
-        return builder.toString();
-    }
-
-    // Returns the script for a single Behavior
-    private static String getSingleBehaviorHandler(FacesContext context,
-                                                   UIComponent component,
-                                                   ClientBehavior behavior,
-                                                   Collection<ClientBehaviorContext.Parameter> params,
-                                                   String behaviorEventName,
-                                                   String submitTarget,
-                                                   boolean needsSubmit) {
-
-        ClientBehaviorContext bContext = createClientBehaviorContext(context,
-                                                         component,
-                                                         behaviorEventName,
-                                                         params);
-
-        String script = behavior.getScript(bContext);
-
-        // TODO: The "action".equals(behaviorEventName) is a bit awkward - we
-        // should find a better solution.  The problem that we are trying
-        // to avoid is that we do not want to prevent the default behavior
-        // (ie. we do not want to return false), for handlers most handlers.
-        // However, for actions we do since the HTML content (links, buttons)
-        // has native default behavior.  We should generalize this so that
-        // we do not have to perform that explicitly check for "action".
-        boolean preventDefault = ((needsSubmit || isSubmitting(behavior)) &&
-                                  ("action".equals(behaviorEventName) || "click".equals(behaviorEventName)));
-
-         if (script == null) {
-             if (needsSubmit) {
-                 script = getSubmitHandler(context, 
-                                           component,
-                                           params,
-                                           submitTarget,
-                                           preventDefault);
-             }
-         }
-         else if (preventDefault) {
-             script = script +  ";return false";
-         }
-
-         return script;
-    }
-
-    // Creates a ClientBehaviorContext with the specified properties.
-    private static ClientBehaviorContext createClientBehaviorContext(FacesContext context,
-                                                         UIComponent component,
-                                                         String behaviorEventName,
-                                                         Collection<ClientBehaviorContext.Parameter> params) {
-
-    return ClientBehaviorContext.createClientBehaviorContext(context,
-                                                 component,
-                                                 behaviorEventName,
-                                                 null,
-                                                 params);
-    }
-
-    // Tests whether the specified behavior is submitting
-    private static boolean isSubmitting(ClientBehavior behavior) {
-        return behavior.getHints().contains(ClientBehaviorHint.SUBMITTING);
-    }
-
-    /**
-     * Renders a handler script, which may require chaining together
-     * the user-specified event handler, any scripts required by attached 
-     * Behaviors, and also possibly the mojarra.jsfcljs() "submit" script.
-     * @param context the FacesContext for this request.
-     * @param component the UIComponent that we are rendering
-     * @param params any parameters that should be included by "submitting"
-     *        scripts.
-     * @param handlerName the name of the handler attribute to render (eg.
-     *        "onclick" or "ommouseover")
-     * @param handlerValue the user-specified value for the handler attribute
-     * @param behaviorEventName the name of the behavior event that corresponds
-     *        to this handler (eg. "action" or "mouseover").
-     * @param needsSubmit indicates whether the mojarra.jsfcljs() 
-     *        "submit" script is required by the component.  Most components 
-     *        do not need this, either because they submit themselves
-     *        (eg. commandButton), or because they do not perform submits
-     *        (eg. non-command components).  This flag is mainly here for
-     *        the commandLink case, where we need to render the submit
-     *        script to make the link submit.
-     */
-    private static void renderHandler(FacesContext context,
-                                      UIComponent component,
-                                      Collection<ClientBehaviorContext.Parameter> params,
-                                      String handlerName,
-                                      Object handlerValue,
-                                      String behaviorEventName,
-                                      String submitTarget,
-                                      boolean needsSubmit,
-                                      boolean includeExec)
-        throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        String userHandler = getNonEmptyUserHandler(handlerValue);
-        List<ClientBehavior> behaviors = getClientBehaviors(component, behaviorEventName);
-
-        // Don't render behavior scripts if component is disabled
-        if ((null != behaviors) && 
-            (behaviors.size() > 0) && 
-             Util.componentIsDisabled(component)) {
-            behaviors = null;
-        }
-
-        if (params == null) {
-            params = Collections.emptyList();
-        }
-        String handler = null;
-        switch (getHandlerType(behaviors, params, userHandler, needsSubmit, includeExec)) {
-        
-            case USER_HANDLER_ONLY:
-                handler = userHandler;
-                break;
-
-            case SINGLE_BEHAVIOR_ONLY:
-                handler = getSingleBehaviorHandler(context, 
-                                                   component,
-                                                   behaviors.get(0),
-                                                   params,
-                                                   behaviorEventName,
-                                                   submitTarget,
-                                                   needsSubmit);
-                break;
-
-            case SUBMIT_ONLY:
-                handler = getSubmitHandler(context, 
-                                           component,
-                                           params,
-                                           submitTarget,
-                                           true);
-                break;
-
-            case CHAIN:
-                handler = getChainedHandler(context,
-                                            component,
-                                            behaviors,
-                                            params,
-                                            behaviorEventName,
-                                            userHandler,
-                                            submitTarget,
-                                            needsSubmit);
-                break;
-            default:
-                assert(false);
-        }
-
-
-        writer.writeAttribute(handlerName, handler, null);
-    }
-
-
-    // Determines the type of handler to render based on what sorts of
-    // scripts we need to render/chain.
-    private static HandlerType getHandlerType(List<ClientBehavior> behaviors,
-                                              Collection<ClientBehaviorContext.Parameter> params,
-                                              String userHandler,
-                                              boolean needsSubmit,
-                                              boolean includeExec) {
-
-        if ((behaviors == null) || (behaviors.isEmpty())) {
-
-            // No behaviors and no params means user handler only,
-            // if we have a param only because of includeExec while having
-            // no behaviors, also, user handler only
-            if ((params.isEmpty() && !needsSubmit) || includeExec)
-                return HandlerType.USER_HANDLER_ONLY;
-
-            // We've got params.  If we've also got a user handler, we need 
-            // to chain.  Otherwise, we only render the submit script.
-            return (userHandler == null) ? HandlerType.SUBMIT_ONLY :
-                                           HandlerType.CHAIN;
-        }
-
-
-        // We've got behaviors.  See if we can optimize for the single
-        // behavior case.  We can only do this if we don't have a user
-        // handler.
-        if ((behaviors.size() == 1) && (userHandler == null)) {
-            ClientBehavior behavior = behaviors.get(0);
-
-            // If we've got a submitting behavior, then it will handle
-            // submitting the params.  If not, then we need to use
-            // a submit script to handle the params.
-            if (isSubmitting(behavior) || ((params.isEmpty()) && !needsSubmit))
-                return HandlerType.SINGLE_BEHAVIOR_ONLY;            
-        }
-
-        return HandlerType.CHAIN;
-    }
-
-    // Little utility enum that we use to identify the type of
-    // handler that we are going to render.
-    private static enum HandlerType {
-
-        // Indicates that we only have a user handler - nothing else
-        USER_HANDLER_ONLY,
-
-        // Indicates that we only have a single behavior - no chaining
-        SINGLE_BEHAVIOR_ONLY,
-
-        // Indicates that we only render the mojarra.jsfcljs() script
-       SUBMIT_ONLY,
-
-        // Indicates that we've got a chain
-        CHAIN
-    }
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-} // END RenderKitUtils
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/ResponseStateManagerImpl.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/ResponseStateManagerImpl.java
deleted file mode 100644
index 6ac2896..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/ResponseStateManagerImpl.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.renderkit;
-
-import java.io.IOException;
-
-import javax.faces.FacesException;
-import javax.faces.application.StateManager;
-import javax.faces.context.FacesContext;
-import javax.faces.render.ResponseStateManager;
-
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.StateSavingMethod;
-import com.sun.faces.util.RequestStateManager;
-
-
-/**
- * <p>A <code>ResonseStateManager</code> implementation
- * for the default HTML render kit.
- */
-public class ResponseStateManagerImpl extends ResponseStateManager {
-
-    private StateHelper helper;
-
-    public ResponseStateManagerImpl() {
-
-        WebConfiguration webConfig = WebConfiguration.getInstance();
-        String stateMode =
-              webConfig.getOptionValue(StateSavingMethod);
-        helper = ((StateManager.STATE_SAVING_METHOD_CLIENT.equals(stateMode)
-                   ? new ClientSideStateHelper()
-                   : new ServerSideStateHelper()));
-
-    }
-
-
-    // --------------------------------------- Methods from ResponseStateManager
-
-
-    /**
-     * @see {@link ResponseStateManager#isPostback(javax.faces.context.FacesContext)}
-     */
-    @Override
-    public boolean isPostback(FacesContext context) {
-
-        return context.getExternalContext().getRequestParameterMap().
-              containsKey(ResponseStateManager.VIEW_STATE_PARAM);
-
-    }
-
-
-    /**
-     * @see {@link javax.faces.render.ResponseStateManager#getState(javax.faces.context.FacesContext, String)}
-     */
-    @Override
-    public Object getState(FacesContext context, String viewId) {
-
-        Object state =
-              RequestStateManager.get(context, RequestStateManager.FACES_VIEW_STATE);
-        if (state == null) {
-            try {
-                state = helper.getState(context, viewId);
-                if (state != null) {
-                    RequestStateManager.set(context,
-                                            RequestStateManager.FACES_VIEW_STATE,
-                                            state);
-                }
-            } catch (IOException e) {
-                throw new FacesException(e);
-            }
-        }
-        return state;
-
-    }
-
-
-    /**
-     * @see {@link javax.faces.render.ResponseStateManager#writeState(javax.faces.context.FacesContext, Object)}
-     */
-    @Override
-    public void writeState(FacesContext context, Object state)
-          throws IOException {
-
-        helper.writeState(context, state, null);
-
-    }
-
-
-    /**
-     * @see {@link javax.faces.render.ResponseStateManager#getViewState(javax.faces.context.FacesContext, Object)}
-     */
-    @Override
-    public String getViewState(FacesContext context, Object state) {
-
-        StringBuilder sb = new StringBuilder(32);
-        try {
-            helper.writeState(context, state, sb);
-        } catch (IOException e) {
-            throw new FacesException(e);
-        }
-        return sb.toString();
-
-    }
-
-
-    @SuppressWarnings({"deprecation"})
-    @Override
-    public Object getTreeStructureToRestore(FacesContext context, String viewId) {
-
-        Object[] state = (Object[]) getState(context, viewId);
-        if (state != null) {
-            return state[0];
-        }
-        return null;
-
-    }
-    
-} 
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/SelectItemsIterator.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/SelectItemsIterator.java
deleted file mode 100644
index 6959a0b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/SelectItemsIterator.java
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Map;
-import java.util.ListIterator;
-import java.io.ObjectOutputStream;
-import java.io.IOException;
-import java.io.NotSerializableException;
-import java.io.ObjectInputStream;
-import java.lang.reflect.Array;
-
-import javax.faces.model.SelectItem;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectItem;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UISelectOne;
-
-
-/**
- * <p>Package private class for iterating over the set of {@link SelectItem}s
- * for a parent {@link UISelectMany} or {@link UISelectOne}.</p>
- *
- * // RELEASE_PENDING (rlubke,driscoll) performanc review
- */
-final class SelectItemsIterator implements Iterator<SelectItem> {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Construct an iterator instance for the specified parent component.</p>
-     *
-     * @param ctx the {@link FacesContext} for the current request
-     * @param parent The parent {@link UIComponent} whose children will be
-     *  processed
-     */
-    public SelectItemsIterator(FacesContext ctx, UIComponent parent) {
-
-        kids = parent.getChildren().listIterator();
-        this.ctx = ctx;
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    /**
-     * <p>Iterator over the SelectItem elements pointed at by a
-     * <code>UISelectItems</code> component, or <code>null</code>.</p>
-     */
-    private Iterator<SelectItem> items;
-
-
-    /**
-     * <p>Iterator over the children of the parent component.</p>
-     */
-    private ListIterator<UIComponent> kids;
-
-
-    /**
-     * Expose single SelectItems via an Iterator.  This iterator will be
-     * reset/reused for each individual SelectItem instance encountered.
-     */
-    private SingleElementIterator singleItemIterator;
-
-
-    /**
-     * The {@link FacesContext} for the current request.
-     */
-    private FacesContext ctx;
-
-
-    // -------------------------------------------------------- Iterator Methods
-
-
-    /**
-     * <p>Return <code>true</code> if the iteration has more elements.</p>
-     */
-    public boolean hasNext() {
-
-        if (items != null) {
-            if (items.hasNext()) {
-                return (true);
-            } else {
-                items = null;
-            }
-        }
-        Object next = findNextValidChild();
-        while (next != null) {
-            initializeItems(next);
-            if (items != null) {
-                return true;
-            } else {
-                next = findNextValidChild();
-            }
-        }
-        return false;
-
-    }
-
-
-    /**
-     * <p>Return the next element in the iteration.</p>
-     *
-     * @throws NoSuchElementException if there are no more elements
-     */
-    @SuppressWarnings({"unchecked"})
-    public SelectItem next() {
-
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-        if (items != null) {
-            return (items.next());
-        }
-        return next();
-
-    }
-
-
-    /**
-     * <p>Throw UnsupportedOperationException.</p>
-     */
-    public void remove() {
-
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>
-     * Initializes the <code>items</code> instance variable with an
-     * <code>Iterator</code> appropriate to the UISelectItem(s) value.
-     * </p>
-     */
-    private void initializeItems(Object kid) {
-
-        if (kid instanceof UISelectItem) {
-            UISelectItem ui = (UISelectItem) kid;
-            SelectItem item = (SelectItem) ui.getValue();
-            if (item == null) {
-                item = new SelectItem(ui.getItemValue(),
-                                      ui.getItemLabel(),
-                                      ui.getItemDescription(),
-                                      ui.isItemDisabled(),
-                                      ui.isItemEscaped(),
-                                      ui.isNoSelectionOption());
-            }
-            updateSingeItemIterator(item);
-            items = singleItemIterator;
-        } else if (kid instanceof UISelectItems) {
-            UISelectItems ui = (UISelectItems) kid;
-            Object value = ui.getValue();
-            if (value != null) {
-                if (value instanceof SelectItem) {
-                    updateSingeItemIterator((SelectItem) value);
-                    items = singleItemIterator;
-                } else if (value.getClass().isArray()) {
-                    items = new ArrayIterator(ctx, (UISelectItems) kid, value);
-                } else if (value instanceof Iterable) {
-                    items = new IterableItemIterator(ctx,
-                                                     (UISelectItems) kid,
-                                                     (Iterable<?>) value);
-                } else if (value instanceof Map) {
-                    items = new MapIterator((Map) value);
-                } else {
-                    throw new IllegalArgumentException();
-                }
-            }
-            if (items != null && !items.hasNext()) {
-                items = null;
-            }
-        } 
-
-    }
-
-
-    /**
-     * @return the next valid child for processing
-     */
-    private Object findNextValidChild() {
-
-        if (kids.hasNext()) {
-            Object next = kids.next();
-            while (kids.hasNext() && !(next instanceof UISelectItem || next instanceof UISelectItems)) {
-                next = kids.next();
-            }
-            if (next instanceof UISelectItem || next instanceof UISelectItems) {
-                return next;
-            }
-        }
-        return null;
-
-    }
-
-
-    /**
-     * Update the <code>singleItemIterator</code> with the provided
-     * <code>item</code>
-     * @param item the {@link SelectItem} to expose as an Iterator
-     */
-    private void updateSingeItemIterator(SelectItem item) {
-
-        if (singleItemIterator == null) {
-            singleItemIterator = new SingleElementIterator();
-        }
-        singleItemIterator.updateItem(item);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    /**
-     * Exposes single {@link SelectItem} instances as an Iterator.
-     */
-    private static final class SingleElementIterator implements Iterator<SelectItem> {
-
-        private SelectItem item;
-        private boolean nextCalled;
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return !nextCalled;
-
-        }
-
-
-        public SelectItem next() {
-
-            if (nextCalled) {
-                throw new NoSuchElementException();
-            }
-            nextCalled = true;
-            return item;
-
-        }
-
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private void updateItem(SelectItem item) {
-
-            this.item = item;
-            nextCalled = false;
-
-        }
-
-    } // END SingleElementIterator
-
-
-    /**
-     * Iterates over a <code>Map</code> of values exposing each entry as a SelectItem.
-     * Note that this will do so re-using the same SelectItem but changing
-     * the value and label as appropriate.
-     */
-    private static final class MapIterator implements Iterator<SelectItem> {
-
-        private SelectItem item = new SelectItem();
-        private Iterator iterator;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        private MapIterator(Map map) {
-
-            this.iterator = map.entrySet().iterator();
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return iterator.hasNext();
-
-        }
-
-
-        public SelectItem next() {
-
-            Map.Entry entry = (Map.Entry) iterator.next();
-            Object key = entry.getKey();
-            Object value = entry.getValue();
-            item.setLabel(((key != null) ? key.toString() : value.toString()));
-            item.setValue(((value != null) ? value : ""));
-            return item;
-            
-        }
-
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-
-        }
-
-    } // END MapIterator
-
-
-    /**
-     * <p>
-     * Base class to support iterating over Collections or Arrays that may
-     * or may not contain <code>SelectItem</code> instances.
-     * </p>
-     */
-    private static abstract class GenericObjectSelectItemIterator implements Iterator<SelectItem> {
-
-        /**
-         * SelectItem that is updated based on the current Object being
-         * iterated over.
-         */
-        private GenericObjectSelectItem genericObjectSI;
-
-        /**
-         * The source <code>UISelectItems</code>.
-         */
-        protected UISelectItems sourceComponent;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        protected GenericObjectSelectItemIterator(UISelectItems sourceComponent) {
-
-            this.sourceComponent = sourceComponent;
-
-        }
-
-
-        // --------------------------------------------------- Protected Methods
-
-
-        protected SelectItem getSelectItemFor(FacesContext ctx, Object value) {
-
-            if (genericObjectSI == null) {
-                genericObjectSI = new GenericObjectSelectItem(sourceComponent);
-            }
-
-            genericObjectSI.updateItem(ctx, value);
-            return genericObjectSI;
-            
-        }
-
-
-        // ------------------------------------------------------ Nested Classes
-
-
-        /**
-         * A <code>SelectItem</code> implementation to support generating
-         * unique <code>SelectItem</code> values based on <code>ValueExpressions</code>
-         * from the owning {@link UISelectItems} instance.
-         */
-        @SuppressWarnings({"serial"})
-        private static final class GenericObjectSelectItem extends SelectItem {
-
-
-            private static final String VAR = "var";
-            private static final String ITEM_VALUE = "itemValue";
-            private static final String ITEM_LABEL = "itemLabel";
-            private static final String ITEM_DESCRIPTION = "itemDescription";
-            private static final String ITEM_ESCAPED = "itemLabelEscaped";
-            private static final String ITEM_DISABLED = "itemDisabled";
-            private static final String NO_SELECTION_OPTION = "noSelectionOption";
-            private static final String NO_SELECTION_VALUE = "noSelectionValue";
-
-            /**
-             * The request-scoped variable under which the current object
-             * will be exposed.
-             */
-            private String var;
-
-            private UISelectItems sourceComponent;
-
-            // -------------------------------------------------------- Constructors
-
-
-            private GenericObjectSelectItem(UISelectItems sourceComponent) {
-
-                var = (String) sourceComponent.getAttributes().get(VAR);
-                this.sourceComponent = sourceComponent;
-
-            }
-
-            // ----------------------------------------------------- Private Methods
-
-
-            /**
-             * Updates the <code>SelectItem</code> properties based on the
-             * current value.
-             *
-             * @param ctx the {@link FacesContext} for the current request
-             * @param value the value to build the updated values from
-             */
-            private void updateItem(FacesContext ctx, Object value) {
-
-                Map<String, Object> reqMap =
-                      ctx.getExternalContext().getRequestMap();
-                Object oldVarValue = null;
-                if (var != null) {
-                    oldVarValue = reqMap.put(var, value);
-                }
-                try {
-                    Map<String,Object> attrs = sourceComponent.getAttributes();
-                    Object itemValueResult = attrs.get(ITEM_VALUE);
-                    Object itemLabelResult = attrs.get(ITEM_LABEL);
-                    Object itemDescriptionResult = attrs.get(ITEM_DESCRIPTION);
-                    Object itemEscapedResult = attrs.get(ITEM_ESCAPED);
-                    Object itemDisabledResult = attrs.get(ITEM_DISABLED);
-                    Object noSelectionValueResult = attrs.get(NO_SELECTION_VALUE);
-                    Object noSelectionOptionResult = attrs.get(NO_SELECTION_OPTION);
-                    setValue(((itemValueResult != null) ? itemValueResult : value));
-                    setLabel(((itemLabelResult != null)
-                                  ? itemLabelResult.toString()
-                                  : value.toString()));
-                    setDescription(((itemDescriptionResult != null)
-                                        ? itemDescriptionResult.toString()
-                                        : null));
-                    setEscape(((itemEscapedResult != null)
-                                   ? Boolean.valueOf(itemEscapedResult.toString())
-                                   : false));
-                    setDisabled(((itemDisabledResult != null)
-                                     ? Boolean.valueOf(itemDisabledResult.toString())
-                                     : false));
-                    if (null != noSelectionOptionResult) {
-                        setNoSelectionOption(Boolean.valueOf(noSelectionOptionResult.toString()));
-                    } else if (null != noSelectionValueResult) {
-                        setNoSelectionOption(getValue().equals(noSelectionValueResult));
-                    }
-                } finally {
-                    if (var != null) {
-                        if (oldVarValue != null) {
-                            reqMap.put(var, oldVarValue);
-                        } else {
-                            reqMap.remove(var);
-                        }
-                    }
-                }
-
-            }
-
-
-            // --------------------------------------- Methods from Serializable
-
-
-            private void writeObject(ObjectOutputStream out) throws IOException {
-
-                throw new NotSerializableException();
-
-            }
-
-
-            private void readObject(ObjectInputStream in) throws IOException {
-
-                throw new NotSerializableException();
-
-            }
-
-        } // END GenericObjectSelectItem
-
-    } // END GenericObjectSelectItemIterator
-
-
-    /**
-     * Handles arrays of <code>SelectItem</code>s, generic Objects,
-     * or combintations of both.
-     *
-     * A single <code>GenericObjectSelectItem</code> will be leverage for any
-     * non-<code>SelectItem</code> objects encountered.
-     */
-    private static final class ArrayIterator extends GenericObjectSelectItemIterator {
-
-
-        private FacesContext ctx;
-        private Object array;
-        private int count;
-        private int index;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        private ArrayIterator(FacesContext ctx,
-                              UISelectItems sourceComponent,
-                              Object array) {
-
-            super(sourceComponent);
-            this.ctx = ctx;
-            this.array = array;
-            count = Array.getLength(array);
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return (index < count);
-
-        }
-
-        public SelectItem next() {
-
-            if (index >= count) {
-                throw new NoSuchElementException();
-            }
-
-            Object item = Array.get(array, index++);
-            if (item instanceof SelectItem) {
-                return (SelectItem) item;
-            } else {
-                return getSelectItemFor(ctx, item);
-            }
-
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-
-    } // END ArrayIterator
-
-
-    /**
-     * Handles Collections of <code>SelectItem</code>s, generic Objects,
-     * or combintations of both.
-     *
-     * A single <code>GenericObjectSelectItem</code> will be leverage for any
-     * non-<code>SelectItem</code> objects encountered.
-     */
-    private static final class IterableItemIterator extends GenericObjectSelectItemIterator {
-
-
-        private FacesContext ctx;
-        private Iterator<?> iterator;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        private IterableItemIterator(FacesContext ctx,
-                                     UISelectItems sourceComponent,
-                                     Iterable<?> iterable) {
-
-            super(sourceComponent);
-            this.ctx = ctx;
-            this.iterator = iterable.iterator();
-
-        }
-
-
-        // ----------------------------------------------- Methods from Iterator
-
-
-        public boolean hasNext() {
-
-            return iterator.hasNext();
-
-        }
-
-
-        public SelectItem next() {
-
-            Object item = iterator.next();
-            if (item instanceof SelectItem) {
-                return (SelectItem) item;
-            } else {
-                return getSelectItemFor(ctx, item);
-            }
-
-        }
-
-
-        public void remove() {
-
-            throw new UnsupportedOperationException();
-            
-        }
-
-    } // END CollectionItemIterator
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/ServerSideStateHelper.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/ServerSideStateHelper.java
deleted file mode 100644
index 35506c3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/ServerSideStateHelper.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.renderkit;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.zip.GZIPOutputStream;
-import java.util.zip.GZIPInputStream;
-import java.util.Map;
-import java.util.Random;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectOutputStream;
-import java.io.IOException;
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.FacesException;
-import javax.faces.component.UIViewRoot;
-
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.SerializeServerState;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.GenerateUniqueServerStateIds;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.TypedCollections;
-import com.sun.faces.util.LRUMap;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.NumberOfLogicalViews;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.NumberOfViews;
-import com.sun.faces.config.WebConfiguration;
-
-/**
- * <p>
- * This <code>StateHelper</code> provides the functionality associated with server-side state saving,
- * though in actuallity, it is a hybrid between client and server.
- * </p>
- */
-public class ServerSideStateHelper extends StateHelper {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    /**
-     * Key to store the <code>AtomicInteger</code> used to generate
-     * unique state map keys.
-     */
-    public static final String STATEMANAGED_SERIAL_ID_KEY =
-          ServerSideStateHelper.class.getName() + ".SerialId";
-
-    /**
-     * The top level attribute name for storing the state structures within
-     * the session.
-     */
-    public static final String LOGICAL_VIEW_MAP =
-          ServerSideStateHelper.class.getName() + ".LogicalViewMap";
-
-    /**
-     * The number of logical views as configured by the user.
-     */
-    protected final Integer numberOfLogicalViews;
-
-
-    /**
-     * The number of views as configured by the user.
-     */
-    protected final Integer numberOfViews;
-
-
-    /**
-     * Flag determining how server state IDs are generated.
-     */
-    protected boolean generateUniqueStateIds;
-
-
-    /**
-     * Used to generate unique server state IDs.
-     */
-    protected final Random random;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new <code>ServerSideStateHelper</code> instance.
-     */
-    public ServerSideStateHelper() {
-
-        numberOfLogicalViews = getIntegerConfigValue(NumberOfLogicalViews);
-        numberOfViews = getIntegerConfigValue(NumberOfViews);
-        WebConfiguration webConfig = WebConfiguration.getInstance();
-        generateUniqueStateIds =
-              webConfig.isOptionEnabled(GenerateUniqueServerStateIds);
-        if (generateUniqueStateIds) {
-            random = new Random(System.nanoTime() + webConfig.getServletContext().hashCode());
-        } else {
-            random = null;
-        }
-
-    }
-
-
-    // ------------------------------------------------ Methods from StateHelper
-
-
-    /**
-     * <p>
-     * Stores the provided state within the session obtained from the provided
-     * <code>FacesContext</code>
-     * </p>
-     *
-     * <p>If <code>stateCapture</code> is <code>null</code>, the composite
-     * key used to look up the actual and logical views will be written to
-     * the client as a hidden field using the <code>ResponseWriter</code>
-     * from the provided <code>FacesContext</code>.</p>
-     *
-     * <p>If <code>stateCapture</code> is not <code>null</code>, the compisite
-     * key will be appended to the <code>StringBuilder<code> without any markup
-     * included or any content written to the client.
-     *
-     * @see {@link com.sun.faces.renderkit.StateHelper#writeState(javax.faces.context.FacesContext, Object, StringBuilder)}
-     */
-    public void writeState(FacesContext ctx,
-                           Object state,
-                           StringBuilder stateCapture)
-    throws IOException {
-
-        Util.notNull("context", ctx);
-        Util.notNull("state", state);
-
-        Object[] stateToWrite = (Object[]) state;
-        ExternalContext externalContext = ctx.getExternalContext();
-        Object sessionObj = externalContext.getSession(true);
-        Map<String, Object> sessionMap = externalContext.getSessionMap();
-
-        //noinspection SynchronizationOnLocalVariableOrMethodParameter
-        synchronized (sessionObj) {
-            Map<String, Map> logicalMap = TypedCollections.dynamicallyCastMap(
-                  (Map) sessionMap
-                        .get(LOGICAL_VIEW_MAP), String.class, Map.class);
-            if (logicalMap == null) {
-                logicalMap = new LRUMap<String, Map>(numberOfLogicalViews);
-                sessionMap.put(LOGICAL_VIEW_MAP, logicalMap);
-            }
-
-            Object structure = stateToWrite[0];
-            Object savedState = handleSaveState(stateToWrite[1]);
-
-            String idInLogicalMap = (String)
-                      RequestStateManager.get(ctx, RequestStateManager.LOGICAL_VIEW_MAP);
-            if (idInLogicalMap == null) {
-                idInLogicalMap = ((generateUniqueStateIds)
-                                      ? createRandomId()
-                                      : createIncrementalRequestId(ctx));
-            }
-            String idInActualMap = null;
-            if(ctx.getPartialViewContext().isPartialRequest()){
-                // If partial request, do not change actual view Id, because page not actually changed.
-                // Otherwise partial requests will soon overflow cache with values that would be never used.
-                idInActualMap = (String) RequestStateManager.get(ctx, RequestStateManager.ACTUAL_VIEW_MAP);
-            }
-            if (null == idInActualMap) {
-                    idInActualMap = ((generateUniqueStateIds) ? createRandomId()
-                                                : createIncrementalRequestId(ctx));
-            }
-            Map<String, Object[]> actualMap =
-                  TypedCollections.dynamicallyCastMap(
-                        logicalMap.get(idInLogicalMap), String.class, Object[].class);
-            if (actualMap == null) {
-                actualMap = new LRUMap<String, Object[]>(numberOfViews);
-                logicalMap.put(idInLogicalMap, actualMap);
-            }
-
-            String id = idInLogicalMap + ':' + idInActualMap;
-
-            Object[] stateArray = actualMap.get(idInActualMap);
-            // reuse the array if possible
-            if (stateArray != null) {
-                stateArray[0] = structure;
-                stateArray[1] = savedState;
-            } else {
-                actualMap.put(idInActualMap, new Object[]{ structure, savedState });
-            }
-
-            // always call put/setAttribute as we may be in a clustered environment.
-            sessionMap.put(LOGICAL_VIEW_MAP, logicalMap);
-
-             if (stateCapture != null) {
-                stateCapture.append(id);
-             } else {
-                 ResponseWriter writer = ctx.getResponseWriter();
-                 writer.write(stateFieldStart);
-                 writer.write(id);
-                 writer.write(stateFieldEnd);
-                 writeRenderKitIdField(ctx, writer);
-             }
-        }
-
-
-    }
-
-
-    /**
-     * <p>Inspects the incoming request parameters for the standardized state
-     * parameter name.  In this case, the parameter value will be the composite
-     * ID generated by {@link com.sun.faces.renderkit.ServerSideStateHelper#writeState(javax.faces.context.FacesContext, Object, StringBuilder)}.</p>
-     *
-     * <p>The composite key will be used to find the appropriate view within the
-     * session obtained from the provided <code>FacesContext</code>
-     *
-     * @see {@link com.sun.faces.renderkit.StateHelper#getState(javax.faces.context.FacesContext, String)}
-     */
-    public Object getState(FacesContext ctx, String viewId) {
-
-        String compoundId = getStateParamValue(ctx);
-        if (compoundId == null) {
-            return null;
-        }
-
-        int sep = compoundId.indexOf(':');
-        assert (sep != -1);
-        assert (sep < compoundId.length());
-
-        String idInLogicalMap = compoundId.substring(0, sep);
-        String idInActualMap = compoundId.substring(sep + 1);
-
-        ExternalContext externalCtx = ctx.getExternalContext();
-        Object sessionObj = externalCtx.getSession(false);
-
-        // stop evaluating if the session is not available
-        if (sessionObj == null) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "Unable to restore server side state for view ID {0} as no session is available",
-                           viewId);
-            }
-            return null;
-        }
-
-        //noinspection SynchronizationOnLocalVariableOrMethodParameter
-        synchronized (sessionObj) {
-            Map logicalMap = (Map) externalCtx.getSessionMap() .get(LOGICAL_VIEW_MAP);
-            if (logicalMap != null) {
-                Map actualMap = (Map) logicalMap.get(idInLogicalMap);
-                if (actualMap != null) {
-                    RequestStateManager.set(ctx,
-                                            RequestStateManager.LOGICAL_VIEW_MAP,
-                                            idInLogicalMap);
-                    Object[] state = (Object[]) actualMap.get(idInActualMap);
-                    if(state != null){
-                        RequestStateManager.set(ctx,
-                                                RequestStateManager.ACTUAL_VIEW_MAP,
-                                                idInActualMap);
-                        if (state.length == 2 && state[1] != null) {
-                            state[1] = handleRestoreState(state[1]);
-                        }
-                    }
-
-                    return state;
-                }
-            }
-        }
-
-        return null;
-        
-    }
-
-   
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Utility method for obtaining the <code>Integer</code> based configuration
-     * values used to change the behavior of the <code>ServerSideStateHelper</code>.
-     * @param param the paramter to parse
-     * @return the Integer representation of the parameter value
-     */
-    protected Integer getIntegerConfigValue(WebContextInitParameter param) {
-
-        String noOfViewsStr = webConfig.getOptionValue(param);
-        Integer value = null;
-        try {
-            value = Integer.valueOf(noOfViewsStr);
-        } catch (NumberFormatException nfe) {
-            String defaultValue = param.getDefaultValue();
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                           "jsf.state.server.cannot.parse.int.option",
-                           new Object[] { param.getQualifiedName(),
-                                          defaultValue} );
-            }
-            try {
-                value = Integer.valueOf(defaultValue);
-            } catch (NumberFormatException ne) {
-                // won't occur
-            }
-        }
-
-        return value;
-
-    }
-
-
-    /**
-     * @param state the object returned from <code>UIView.processSaveState</code>
-     * @return If {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#SerializeServerState} is
-     *  <code>true</code>, serialize and return the state, otherwise, return
-     *  <code>state</code> unchanged.
-     */
-    protected Object handleSaveState(Object state) {
-
-        if (webConfig.isOptionEnabled(SerializeServerState)) {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
-            ObjectOutputStream oas = null;
-            try {
-                oas = serialProvider
-                      .createObjectOutputStream(((compressViewState)
-                                                 ? new GZIPOutputStream(baos, 1024)
-                                                 : baos));
-                //noinspection NonSerializableObjectPassedToObjectStream
-                oas.writeObject(state);
-                oas.flush();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            } finally {
-                if (oas != null) {
-                    try {
-                        oas.close();
-                    } catch (IOException ignored) { }
-                }
-            }
-            return baos.toByteArray();
-        } else {
-            return state;
-        }
-
-    }
-
-
-    /**
-     * @param state the state as it was stored in the session
-     * @return an object that can be passed to <code>UIViewRoot.processRestoreState</code>.
-     *  If {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#SerializeServerState} de-serialize the
-     *  state prior to returning it, otherwise return <code>state</code> as is.
-     */
-    protected Object handleRestoreState(Object state) {
-
-        if (webConfig.isOptionEnabled(SerializeServerState)) {
-            ByteArrayInputStream bais = new ByteArrayInputStream((byte[]) state);
-            ObjectInputStream ois = null;
-            try {
-                ois = serialProvider
-                      .createObjectInputStream(((compressViewState)
-                                                ? new GZIPInputStream(bais, 1024)
-                                                : bais));
-                return ois.readObject();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            } finally {
-                if (ois != null) {
-                    try {
-                        ois.close();
-                    } catch (IOException ignored) { }
-                }
-            }
-        } else {
-            return state;
-        }
-
-    }
-
-
-     /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @return a unique ID for building the keys used to store
-     *  views within a session
-     */
-    private String createIncrementalRequestId(FacesContext ctx) {
-
-        Map<String, Object> sm = ctx.getExternalContext().getSessionMap();
-        AtomicInteger idgen =
-              (AtomicInteger) sm.get(STATEMANAGED_SERIAL_ID_KEY);
-        if (idgen == null) {
-            idgen = new AtomicInteger(1);
-        }
-
-        // always call put/setAttribute as we may be in a clustered environment.
-        sm.put(STATEMANAGED_SERIAL_ID_KEY, idgen);
-        return (UIViewRoot.UNIQUE_ID_PREFIX + idgen.getAndIncrement());
-
-    }
-
-
-    private String createRandomId() {
-
-        return Long.valueOf(random.nextLong()).toString();
-
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/StateHelper.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/StateHelper.java
deleted file mode 100644
index d79bddf..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/StateHelper.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-
-import java.io.IOException;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.ResponseStateManager;
-import javax.faces.render.RenderKitFactory;
-
-import com.sun.faces.spi.SerializationProviderFactory;
-import com.sun.faces.spi.SerializationProvider;
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.CompressViewState;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.EnableViewStateIdRendering;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.AutoCompleteOffOnViewState;
-
-
-/**
- * Common code for the default <code>StateHelper</code> implementations.
- */
-public abstract class StateHelper {
-
-    /**
-     * <p>
-     * State hidden field start.  Content after this is the actual
-     * state representation followed by the {@link #STATE_FIELD_END}.
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#EnableViewStateIdRendering}
-     */
-    protected static final char[] STATE_FIELD_START =
-          ("<input type=\"hidden\" name=\""
-           + ResponseStateManager.VIEW_STATE_PARAM
-           + "\" id=\""
-           + ResponseStateManager.VIEW_STATE_PARAM
-           + "\" value=\"").toCharArray();
-
-    /**
-     * <p>
-     * Alternate hidden field to generate W3C valid XHTML.  This version
-     * includes no id attribute.  This version will be used when the
-     * <code>EnableViewStateIdRendering</code> is disabled.
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#EnableViewStateIdRendering}
-     */
-    protected static final char[] STATE_FIELD_START_NO_ID =
-          ("<input type=\"hidden\" name=\""
-           + ResponseStateManager.VIEW_STATE_PARAM
-           + "\" value=\"").toCharArray();
-
-
-    /**
-     * <p>
-     * The end of the hidden state field.
-     * </p>
-     */
-    protected static final char[] STATE_FIELD_END =
-          "\" />".toCharArray();
-
-    /**
-     * <p>
-     * The end of the hidden state field.
-     * </p>
-     */
-    protected static final char[] STATE_FIELD_AUTOCOMPLETE_END =
-          "\" autocomplete=\"off\" />".toCharArray();
-
-    /**
-     * <p>
-     * Factory for serialization streams.  These are pluggable via
-     * the {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#SerializationProviderClass}.
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.WebContextInitParameter#SerializationProviderClass}
-     */
-    protected SerializationProvider serialProvider;
-
-    /**
-     * <p>
-     * Access to the context init parameters that configure this application.
-     * </p>
-     */
-    protected WebConfiguration webConfig;
-
-
-    /**
-     * <p>
-     * Flag indicating whether or not view state should be compressed to reduce
-     * the memory/bandwidth footprint.  This option is common to both types
-     * of state saving.
-     * </p>
-     *
-     * @see {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#CompressViewState}
-     */
-    protected boolean compressViewState;
-
-
-    /**
-     * This will be used the by the different <code>StateHelper</code> implementations
-     * when writing the start of the state field.  This value of this field is
-     * determined by the value of the {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#EnableViewStateIdRendering}<code>
-     */
-    protected char[] stateFieldStart;
-
-
-    /**
-     * This will be used the by the different <code>StateHelper</code> implementations
-     * when writing the end of the state field.  This value of this field is
-     * determined by the value of the {@link com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter#AutoCompleteOffOnViewState}<code>
-     */
-    protected char[] stateFieldEnd;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructs a new <code>StateHelper</code> instance.
-     */
-    public StateHelper() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        serialProvider = SerializationProviderFactory
-              .createInstance(ctx.getExternalContext());
-        webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
-        compressViewState = webConfig.isOptionEnabled(CompressViewState);
-        stateFieldStart = (webConfig.isOptionEnabled(EnableViewStateIdRendering)
-                           ? STATE_FIELD_START
-                           : STATE_FIELD_START_NO_ID);
-        stateFieldEnd = (webConfig.isOptionEnabled(AutoCompleteOffOnViewState)
-                           ? STATE_FIELD_AUTOCOMPLETE_END
-                           : STATE_FIELD_END);
-
-
-        if (serialProvider == null) {
-            serialProvider = SerializationProviderFactory
-                  .createInstance(FacesContext
-                        .getCurrentInstance().getExternalContext());
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>
-     * Functionally similar to {@link ResponseStateManager#writeState(javax.faces.context.FacesContext, Object)}
-     * with an option to write the state directly to the provided <code>StringBuilder</code>
-     * without sending any markup to the client.
-     * </p>
-     *
-     * @see {@link javax.faces.render.ResponseStateManager#writeState(javax.faces.context.FacesContext, Object)}
-     */
-    public abstract void writeState(FacesContext ctx,
-                                    Object state,
-                                    StringBuilder stateCapture)
-    throws IOException;
-
-
-    /**
-     * @see javax.faces.render.ResponseStateManager#getState(javax.faces.context.FacesContext, String)
-     */
-    public abstract Object getState(FacesContext ctx, String viewId)
-    throws IOException;
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Get our view state from this request</p>
-     *
-     * @param context the <code>FacesContext</code> for the current request
-     *
-     * @return the view state from this request
-     */
-    protected static String getStateParamValue(FacesContext context) {
-
-        String pValue = context.getExternalContext().getRequestParameterMap().
-              get(ResponseStateManager.VIEW_STATE_PARAM);
-        if (pValue != null && pValue.length() == 0) {
-            pValue = null;
-        }
-        return pValue;
-
-    }
-
-
-    /**
-     * <p>
-     * If a custom <code>RenderKit</code> is used, write out the ID
-     * of the <code>RenderKit</code> out as a hidden field.  This will be used
-     * when restoring the view state.
-     * </p>
-     * @param context the <code>FacesContext</code> for the current request
-     * @param writer the <code>ResponseWriter</code> to write to
-     * @throws IOException if an error occurs writing to the client
-     */
-    protected void writeRenderKitIdField(FacesContext context,
-                                         ResponseWriter writer)
-    throws IOException {
-
-        String result = context.getApplication().getDefaultRenderKitId();
-        if (result != null
-            && !RenderKitFactory.HTML_BASIC_RENDER_KIT.equals(result)) {
-            writer.startElement("input", context.getViewRoot());
-            writer.writeAttribute("type", "hidden", "type");
-            writer.writeAttribute("name",
-                                  ResponseStateManager.RENDER_KIT_ID_PARAM,
-                                  "name");
-            writer.writeAttribute("value",
-                                  result,
-                                  "value");
-            writer.endElement("input");
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/AjaxBehaviorRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/AjaxBehaviorRenderer.java
deleted file mode 100644
index bcb295a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/AjaxBehaviorRenderer.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.util.FacesLogger;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-import javax.faces.component.ActionSource;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.AjaxBehavior;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorContext;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AjaxBehaviorEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.render.ClientBehaviorRenderer;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/*
- *<b>AjaxBehaviorRenderer</b> renders Ajax behavior for a component.
- * It also  
- */
-
-public class AjaxBehaviorRenderer extends ClientBehaviorRenderer  {
-    
-    // Log instance for this class
-    protected static final Logger logger = FacesLogger.RENDERKIT.getLogger();
-
-    
-    // ------------------------------------------------------ Rendering Methods
-
-    @Override
-    public String getScript(ClientBehaviorContext behaviorContext,
-                            ClientBehavior behavior) {
-        if (!(behavior instanceof AjaxBehavior)) {
-            // TODO: use MessageUtils for this error message?
-            throw new IllegalArgumentException(
-                "Instance of javax.faces.component.behavior.AjaxBehavior required: " + behavior);
-        }
-
-        return buildAjaxCommand(behaviorContext, (AjaxBehavior)behavior);
-    }
-
-
-    @Override
-    public void decode(FacesContext context,
-                       UIComponent component,
-                       ClientBehavior behavior) {
-        if (null == context || null == component || null == behavior) {
-            throw new NullPointerException();
-        }
-
-        if (!(behavior instanceof AjaxBehavior)) {
-            // TODO: use MessageUtils for this error message?
-            throw new IllegalArgumentException(
-                "Instance of javax.faces.component.behavior.AjaxBehavior required: " + behavior);
-        }
-
-        AjaxBehavior ajaxBehavior = (AjaxBehavior)behavior;
-
-        // First things first - if AjaxBehavior is disabled, we are done.
-        if (ajaxBehavior.isDisabled()) {
-            return;
-        }        
-
-        component.queueEvent(createEvent(component, ajaxBehavior));
-
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("This command resulted in form submission " +
-                " AjaxBehaviorEvent queued.");
-            logger.log(Level.FINE,
-                "End decoding component {0}", component.getId());
-        }
-
-
-    }
-
-    // Creates an AjaxBehaviorEvent for the specified component/behavior
-    private static AjaxBehaviorEvent createEvent(UIComponent component,
-                                                 AjaxBehavior ajaxBehavior) {
-
-        AjaxBehaviorEvent event = new AjaxBehaviorEvent(component, ajaxBehavior);
-
-        PhaseId phaseId = isImmediate(component, ajaxBehavior) ?
-                              PhaseId.APPLY_REQUEST_VALUES :
-                              PhaseId.INVOKE_APPLICATION;
-
-        event.setPhaseId(phaseId);
-
-        return event;
-    }
-
-
-    // Tests whether we should perform immediate processing.  Note
-    // that we "inherit" immediate from the parent if not specified
-    // on the behavior.
-    private static boolean isImmediate(UIComponent component,
-                                       AjaxBehavior ajaxBehavior) {
-
-        boolean immediate = false;
-
-        if (ajaxBehavior.isImmediateSet()) {
-            immediate = ajaxBehavior.isImmediate();
-        } else if (component instanceof EditableValueHolder) {
-            immediate = ((EditableValueHolder)component).isImmediate();
-        } else if (component instanceof ActionSource) {
-            immediate = ((ActionSource)component).isImmediate();
-        }
-
-        return immediate;
-    }
-    private static String buildAjaxCommand(ClientBehaviorContext behaviorContext,
-                                           AjaxBehavior ajaxBehavior) {
-
-        // First things first - if AjaxBehavior is disabled, we are done.
-        if (ajaxBehavior.isDisabled()) {
-            return null;
-        }        
-
-        UIComponent component = behaviorContext.getComponent();
-        String eventName = behaviorContext.getEventName();
-
-        StringBuilder ajaxCommand = new StringBuilder(256);
-        Collection<String> execute = ajaxBehavior.getExecute();
-        Collection<String> render = ajaxBehavior.getRender();
-        String onevent = ajaxBehavior.getOnevent();
-        String onerror = ajaxBehavior.getOnerror();
-        String sourceId = behaviorContext.getSourceId();
-        Collection<ClientBehaviorContext.Parameter> params = behaviorContext.getParameters();
-
-        // Needed workaround for SelectManyCheckbox - if execute doesn't have sourceId,
-        // we need to add it - otherwise, we use the default, which is sourceId:child, which
-        // won't work.
-        ClientBehaviorContext.Parameter foundparam = null;
-        for (ClientBehaviorContext.Parameter param : params) {
-            if (param.getName().equals("incExec") && (Boolean)param.getValue()) {
-                foundparam = param;
-            }
-        }
-        if (foundparam != null && !execute.contains(sourceId)) {
-                execute = new LinkedList<String>(execute);
-                execute.add(component.getClientId());
-        }
-        if (foundparam != null) {
-            try {
-                // And since this is a hack, we now try to remove the param
-                params.remove(foundparam);
-            } catch (UnsupportedOperationException unop) {
-                // nothing we can do about it
-            }
-        }
-
-        ajaxCommand.append("mojarra.ab(");
-
-        if (sourceId == null) {
-            ajaxCommand.append("this");
-        } else {
-            ajaxCommand.append("'");
-            ajaxCommand.append(sourceId);
-            ajaxCommand.append("'");
-        }
-
-        ajaxCommand.append(",event,'");
-        ajaxCommand.append(eventName);
-        ajaxCommand.append("',");
-
-        appendIds(component, ajaxCommand, execute);
-        ajaxCommand.append(",");
-        appendIds(component, ajaxCommand, render);
-
-        if ((onevent != null) || (onerror != null) || !params.isEmpty())  {
-
-            ajaxCommand.append(",{");
-
-            if (onevent != null) {
-                RenderKitUtils.appendProperty(ajaxCommand, "onevent", onevent, false);
-            }
-
-            if (onerror != null) {
-                RenderKitUtils.appendProperty(ajaxCommand, "onerror", onerror, false);
-            }
-
-            if (!params.isEmpty()) {
-                for (ClientBehaviorContext.Parameter param : params) {
-                    RenderKitUtils.appendProperty(ajaxCommand, 
-                                                  param.getName(),
-                                                  param.getValue());
-                }
-            }
-             
-            ajaxCommand.append("}");
-        }
-
-        ajaxCommand.append(")");
-
-        return ajaxCommand.toString();
-    }
-
-    // Appends an ids argument to the ajax command
-    private static void appendIds(UIComponent component,
-                                  StringBuilder builder,
-                                  Collection<String> ids) {
-
-        if ((null == ids) || ids.isEmpty()) {
-            builder.append('0');
-            return;
-        }
-
-        builder.append("'");
-
-        boolean first = true;
-
-        for (String id : ids) {
-            if (!first) {
-                builder.append(' ');
-            } else {
-                first = false;
-            }
-
-            if (id.equals("@all") || id.equals("@none") ||
-                id.equals("@form") || id.equals("@this")) {
-                builder.append(id);
-            } else {
-                builder.append(getResolvedId(component, id));
-            }
-        }
-
-        builder.append("'");
-    }
-
-    // Returns the resolved (client id) for a particular id.
-    private static String getResolvedId(UIComponent component, String id) {
-
-        UIComponent resolvedComponent = component.findComponent(id);
-        if (resolvedComponent == null) {
-            // RELEASE_PENDING  i18n
-            throw new FacesException(
-                "<f:ajax> contains an unknown id '"
-                + id
-                + "' - cannot locate it in the context of the component "+component.getId());
-        }
-
-        return resolvedComponent.getClientId();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/BaseTableRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/BaseTableRenderer.java
deleted file mode 100644
index 34361cb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/BaseTableRenderer.java
+++ /dev/null
@@ -1,518 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Map;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIColumn;
-import javax.faces.component.UIData;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.Util;
-
-/**
- * Base class for concrete Grid and Table renderers.
- */
-public abstract class BaseTableRenderer extends HtmlBasicRenderer {
-
-
-    // ------------------------------------------------------- Protected Methods
-
-    /**
-     * Called to render the opening/closing <code>thead</code> elements
-     * and any content nested between.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    protected abstract void renderHeader(FacesContext context,
-                                         UIComponent table,
-                                         ResponseWriter writer)
-    throws IOException;
-
-
-    /**
-     * Called to render the opening/closing <code>tfoot</code> elements
-     * and any content nested between.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    protected abstract void renderFooter(FacesContext context,
-                                         UIComponent table,
-                                         ResponseWriter writer)
-    throws IOException;
-
-
-    /**
-     * Call to render the content that should be included between opening
-     * and closing <code>tr</code> elements.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param row the current row (if any - an implmenetation may not need this)
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    protected abstract void renderRow(FacesContext context,
-                                      UIComponent table,
-                                      UIComponent row,
-                                      ResponseWriter writer)
-    throws IOException;
-
-
-    /**
-     * Renders the start of a table and applies the value of
-     * <code>styleClass</code> if available and renders any
-     * pass through attributes that may be specified.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @param attributes pass-through attributes that the component
-     *  supports
-     * @throws IOException if content cannot be written
-     */
-    protected void renderTableStart(FacesContext context,
-                                    UIComponent table,
-                                    ResponseWriter writer,
-                                    Attribute[] attributes)
-    throws IOException {
-
-        writer.startElement("table", table);
-        writeIdAttributeIfNecessary(context, writer, table);
-        String styleClass = (String) table.getAttributes().get("styleClass");
-        if (styleClass != null) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                table,
-                                                attributes);
-        writer.writeText("\n", table, null);
-
-    }
-
-
-    /**
-     * Renders the closing <code>table</code> element.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    protected void renderTableEnd(FacesContext context,
-                                  UIComponent table,
-                                  ResponseWriter writer)
-    throws IOException {
-
-        writer.endElement("table");
-        writer.writeText("\n", table, null);
-
-    }
-
-
-    /**
-     * Renders the caption of the table applying the values of
-     * <code>captionClass</code> as the class and <code>captionStyle</code>
-     * as the style if either are present.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    protected void renderCaption(FacesContext context,
-                                 UIComponent table,
-                                 ResponseWriter writer) throws IOException {
-
-        UIComponent caption = getFacet(table, "caption");
-        if (caption != null) {
-            String captionClass =
-                  (String) table.getAttributes().get("captionClass");
-            String captionStyle = (String)
-                  table.getAttributes().get("captionStyle");
-            writer.startElement("caption", table);
-            if (captionClass != null) {
-                writer.writeAttribute("class", captionClass, "captionClass");
-            }
-            if (captionStyle != null) {
-                writer.writeAttribute("style", captionStyle, "captionStyle");
-            }
-            encodeRecursive(context, caption);
-            writer.endElement("caption");
-        }
-        
-    }
-
-
-    /**
-     * Renders the starting <code>tbody</code> element.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    protected void renderTableBodyStart(FacesContext context,
-                                        UIComponent table,
-                                        ResponseWriter writer)
-    throws IOException {
-
-            writer.startElement("tbody", table);
-            writer.writeText("\n", table, null);
-
-    }
-
-
-    /**
-     * Renders the closing <code>tbody</code> element.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    protected void renderTableBodyEnd(FacesContext context,
-                                      UIComponent table,
-                                      ResponseWriter writer)
-    throws IOException {
-
-        writer.endElement("tbody");
-        writer.writeText("\n", table, null);
-
-    }
-
-
-    /**
-     * Renders the starting <code>tr</code> element applying any values
-     * from the <code>rowClasses</code> attribute.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    protected void renderRowStart(FacesContext context,
-                                  UIComponent table,
-                                  ResponseWriter writer)
-          throws IOException {
-
-        TableMetaInfo info = getMetaInfo(context, table);
-        writer.startElement("tr", table);
-        if (info.rowClasses.length > 0) {
-            writer.writeAttribute("class", info.getCurrentRowClass(),
-                                  "rowClasses");
-        }
-        writer.writeText("\n", table, null);
-
-    }
-
-
-    /**
-     * Renders the closing <code>rt</code> element.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @param writer the current writer
-     * @throws IOException if content cannot be written
-     */
-    @SuppressWarnings({"UnusedDeclaration"})
-    protected void renderRowEnd(FacesContext context,
-                                UIComponent table,
-                                ResponseWriter writer)
-    throws IOException {
-
-        writer.endElement("tr");
-        writer.writeText("\n", table, null);
-
-    }
-
-
-    /**
-     * Returns a <code>TableMetaInfo</code> object containing details such
-     * as row and column classes, columns, and a mechanism for scrolling through
-     * the row/column classes.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table that's being rendered
-     * @return the <code>TableMetaInfo</code> for provided table
-     */
-    protected TableRenderer.TableMetaInfo getMetaInfo(FacesContext context,
-                                                      UIComponent table) {
-
-        String key = createKey(table);
-        Map<Object,Object> attributes = context.getAttributes();
-        TableRenderer.TableMetaInfo info = (TableRenderer.TableMetaInfo)
-              attributes.get(key);
-        if (info == null) {
-            info = new TableRenderer.TableMetaInfo(table);
-            attributes.put(key, info);
-        }
-        return info;
-
-    }
-
-
-    /**
-     * Removes the cached TableMetaInfo from the specified component.
-     * @param context the <code>FacesContext</code> for the current request
-     * @param table the table from which the TableMetaInfo will be removed
-     */
-    protected void clearMetaInfo(FacesContext context, UIComponent table) {
-
-        context.getAttributes().remove(createKey(table));
-
-    }
-
-
-    /**
-     * Creates a unique key based on the provided <code>UIComponent</code> with
-     *  which the TableMetaInfo can be looked up.
-     *
-     * @param table the table that's being rendered
-     * @return a unique key to store the metadata in the request and still have
-     *  it associated with a specific component.
-     */
-    protected String createKey(UIComponent table) {
-
-        return TableMetaInfo.KEY + '_' + table.hashCode();
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    protected static class TableMetaInfo {
-
-        private static final UIColumn PLACE_HOLDER_COLUMN = new UIColumn();
-        private static final String[] EMPTY_STRING_ARRAY = new String[0];
-        public static final String KEY = TableMetaInfo.class.getName();
-
-        public final String[] rowClasses;
-        public final String[] columnClasses;
-        public final List<UIColumn> columns;
-        public final boolean hasHeaderFacets;
-        public final boolean hasFooterFacets;
-        public final int columnCount;
-        public int columnStyleCounter;
-        public int rowStyleCounter;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public TableMetaInfo(UIComponent table) {
-            rowClasses = getRowClasses(table);
-            columnClasses = getColumnClasses(table);
-            columns = getColumns(table);
-            columnCount = columns.size();
-            hasHeaderFacets = hasFacet("header", columns);
-            hasFooterFacets = hasFacet("footer", columns);
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        /**
-         * Reset the counter used to apply column styles.
-         */
-        public void newRow() {
-
-            columnStyleCounter = 0;
-
-        }
-
-
-        /**
-         * Obtain the column class based on the current counter.  Calling this
-         * method automatically moves the pointer to the next style.  If the
-         * counter is larger than the number of total classes, the counter will
-         * be reset.
-         * @return the current style
-         */
-        public String getCurrentColumnClass() {
-
-            String style = null;
-            if (columnStyleCounter < columnClasses.length
-                 && columnStyleCounter <= columnCount) {
-                style = columnClasses[columnStyleCounter++];
-            }
-            return ((style != null && style.length() > 0) ? style : null);
-
-        }
-
-
-        /**
-         * Obtain the row class based on the current counter.  Calling this
-         * method automatically moves the pointer to the next style.  If the
-         * counter is larger than the number of total classes, the counter will
-         * be reset.
-         * @return the current style
-         */
-        public String getCurrentRowClass() {
-            String style = rowClasses[rowStyleCounter++];
-            if (rowStyleCounter >= rowClasses.length) {
-                rowStyleCounter = 0;
-            }
-            return style;
-        }
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        /**
-         * <p>Return an array of stylesheet classes to be applied to each column in
-         * the table in the order specified. Every column may or may not have a
-         * stylesheet.</p>
-         *
-         * @param table {@link javax.faces.component.UIComponent} component being rendered
-         *
-         * @return an array of column classes
-         */
-        private static String[] getColumnClasses(UIComponent table) {
-
-            String values = (String) table.getAttributes().get("columnClasses");
-            if (values == null) {
-                return EMPTY_STRING_ARRAY;
-            }
-            return Util.split(values.trim(), ",");
-
-        }
-
-
-        /**
-         * <p>Return an Iterator over the <code>UIColumn</code> children of the
-         * specified <code>UIData</code> that have a <code>rendered</code> property
-         * of <code>true</code>.</p>
-         *
-         * @param table the table from which to extract children
-         *
-         * @return the List of all UIColumn children
-         */
-        private static List<UIColumn> getColumns(UIComponent table) {
-
-            if (table instanceof UIData) {
-                int childCount = table.getChildCount();
-                if (childCount > 0) {
-                    List<UIColumn> results =
-                          new ArrayList<UIColumn>(childCount);
-                    for (UIComponent kid : table.getChildren()) {
-                        if ((kid instanceof UIColumn) && kid.isRendered()) {
-                            results.add((UIColumn) kid);
-                        }
-                    }
-                    return results;
-                } else {
-                    return Collections.emptyList();
-                }
-            } else {
-                int count;
-                Object value = table.getAttributes().get("columns");
-                if ((value != null) && (value instanceof Integer)) {
-                    count = ((Integer) value);
-                } else {
-                    count = 2;
-                }
-                if (count < 1) {
-                    count = 1;
-                }
-                List<UIColumn> result = new ArrayList<UIColumn>(count);
-                for (int i = 0; i < count; i++) {
-                    result.add(PLACE_HOLDER_COLUMN);
-                }
-                return result;
-            }
-
-        }
-
-
-        /**
-         * <p>Return the number of child <code>UIColumn</code> components nested in
-         * the specified <code>UIData</code> that have a facet with the specified
-         * name.</p>
-         *
-         * @param name    Name of the facet being analyzed
-         * @param columns the columns to search
-         *
-         * @return the number of columns associated with the specified Facet name
-         */
-        private static boolean hasFacet(String name, List<UIColumn> columns) {
-
-            if (!columns.isEmpty()) {
-                for (UIColumn column : columns) {
-                    if (column.getFacetCount() > 0) {
-                        if (column.getFacets().containsKey(name)) {
-                            return true;
-                        }
-                    }
-                }
-            }
-            return false;
-
-        }
-
-
-        /**
-         * <p>Return an array of stylesheet classes to be applied to each row in the
-         * table, in the order specified.  Every row may or may not have a
-         * stylesheet.</p>
-         *
-         * @param table {@link javax.faces.component.UIComponent} component being rendered
-         *
-         * @return an array of row classes
-         */
-        private static String[] getRowClasses(UIComponent table) {
-
-            String values = (String) table.getAttributes().get("rowClasses");
-            if (values == null) {
-                return (EMPTY_STRING_ARRAY);
-            }
-            return Util.split(values.trim(), ",");
-
-        }
-
-    } // END UIDataMetaInfo
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/BodyRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/BodyRenderer.java
deleted file mode 100644
index 9b450b7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/BodyRenderer.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.Renderer;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-
-/**
- * <p>This <code>Renderer</code> is responsible for rendering
- * the standard HTML body element as well as rendering any resources
- * that should be output before the <code>body</code> tag is closed.</p>
- */
-public class BodyRenderer extends Renderer {
-
-    private static final Attribute[] BODY_ATTRIBUTES =
-             AttributeManager.getAttributes(AttributeManager.Key.OUTPUTBODY);
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-        // no-op
-    }
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        writer.startElement("body", component);
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        if (styleClass != null && styleClass.length() != 0) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                BODY_ATTRIBUTES);
-    }
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-        // no-op
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        UIViewRoot viewRoot = context.getViewRoot();
-        ListIterator iter = (viewRoot.getComponentResources(context, "body")).listIterator();
-        while (iter.hasNext()) {
-            UIComponent resource = (UIComponent)iter.next();
-            resource.encodeAll(context);
-        }
-        RenderKitUtils.renderUnhandledMessages(context);
-        writer.endElement("body");
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ButtonRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ButtonRenderer.java
deleted file mode 100644
index 84e45fc..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ButtonRenderer.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ButtonRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.ClientBehaviorContext;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.ActionEvent;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/**
- * <B>ButtonRenderer</B> is a class that renders the current value of
- * <code>UICommand<code> as a Button.
- */
-
-public class ButtonRenderer extends HtmlBasicRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.COMMANDBUTTON);
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldDecode(component)) {
-            return;
-        }
-
-        String clientId = decodeBehaviors(context, component);
-
-        if (wasClicked(context, component, clientId) && !isReset(component)) {
-            component.queueEvent(new ActionEvent(component));
-
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("This command resulted in form submission " +
-                            " ActionEvent queued.");
-                logger.log(Level.FINE,
-                           "End decoding component {0}",
-                           component.getId());
-            }
-        }
-
-    }
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        // Which button type (SUBMIT, RESET, or BUTTON) should we generate?
-        String type = getButtonType(component);
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String label = "";
-        Object value = ((UICommand) component).getValue();
-        if (value != null) {
-            label = value.toString();
-        }
-
-        /*
-         * If we have any parameters and the button type is submit or button, 
-         * then render Javascript to use later.
-         * RELEASE_PENDING this logic is slightly wrong - we should buffer the user onclick, and use it later.
-         * Leaving it for when we decide how to do script injection.
-         */
-
-        Collection<ClientBehaviorContext.Parameter> params = getBehaviorParameters(component);
-        if ( !params.isEmpty() && (type.equals("submit") || type.equals("button"))) {
-           RenderKitUtils.renderJsfJs(context);
-        }
-
-
-
-        String imageSrc = (String) component.getAttributes().get("image");
-        writer.startElement("input", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        String clientId = component.getClientId(context);
-        if (imageSrc != null) {
-            writer.writeAttribute("type", "image", "type");
-            writer.writeURIAttribute("src", RenderKitUtils.getImageSource(context, component, "image"), "image");
-            writer.writeAttribute("name", clientId, "clientId");
-        } else {
-            writer.writeAttribute("type", type, "type");
-            writer.writeAttribute("name", clientId, "clientId");
-            writer.writeAttribute("value", label, "value");
-        }
-
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES,
-                                                getNonOnClickBehaviors(component));
-
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-        String styleClass = (String)
-              component.getAttributes().get("styleClass");
-        if (styleClass != null && styleClass.length() > 0) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-
-        RenderKitUtils.renderOnclick(context, 
-                                     component, 
-                                     params,
-                                     null,
-                                     false);
-
-        writer.endElement("input");
-
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Determine if this component was activated on the client side.</p>
-     *
-     * @param context the <code>FacesContext</code> for the current request
-     * @param component the component of interest
-     * @param clientId the client id, if it has been retrieved, otherwise null
-     * @return <code>true</code> if this component was in fact activated,
-     *  otherwise <code>false</code>
-     */
-    private static boolean wasClicked(FacesContext context,
-                                      UIComponent component,
-                                      String clientId) {
-
-        // Was our command the one that caused this submission?
-        // we don' have to worry about getting the value from request parameter
-        // because we just need to know if this command caused the submission. We
-        // can get the command name by calling currentValue. This way we can
-        // get around the IE bug.
-
-        if (clientId == null) {
-            clientId = component.getClientId(context);
-        }
-
-        Map<String, String> requestParameterMap = context.getExternalContext()
-              .getRequestParameterMap();
-        if (requestParameterMap.get(clientId) == null) {
-
-            // Check to see whether we've got an action event
-            // as a result of a partial/behavior postback.
-            if (RenderKitUtils.isPartialOrBehaviorAction(context, clientId)) {
-                return true;
-            }
-
-            StringBuilder builder = new StringBuilder(clientId);
-            String xValue = builder.append(".x").toString();
-            builder.setLength(clientId.length());
-            String yValue = builder.append(".y").toString();
-            return (requestParameterMap.get(xValue) != null
-                    && requestParameterMap.get(yValue) != null);
-        }
-        return true;
-
-    }
-
-    /**
-     * @param component the component of interest
-     * @return <code>true</code> if the button represents a <code>reset</code>
-     *  button, otherwise <code>false</code>
-     */
-    private static boolean isReset(UIComponent component) {
-
-        return ("reset".equals(component.getAttributes().get("type")));
-
-    }
-
-    /**
-     * <p>If the component's type attribute is null or not equal
-     * to <code>reset</code>, <code>submit</code> or <code>button</code>,
-     * default to <code>submit</code>.
-     * @param component the component of interest
-     * @return the type for this button
-     */
-    private static String getButtonType(UIComponent component) {
-
-        String type = (String) component.getAttributes().get("type");
-        if (type == null || (!"reset".equals(type) &&
-                !"submit".equals(type) && !"button".equals(type))) {
-            type = "submit";
-            // This is needed in the decode method
-            component.getAttributes().put("type", type);
-        }
-        return type;
-
-    }
-
-    // Returns the Behaviors map, but only if it contains some entry other
-    // than those handled by renderOnclick().  This helps us optimize
-    // renderPassThruAttributes() in the very common case where the
-    // button only contains an "action" (or "click") Behavior.  In that
-    // we pass a null Behaviors map into renderPassThruAttributes(),
-    // which allows us to take a more optimized code path.
-    private static Map<String, List<ClientBehavior>> getNonOnClickBehaviors(UIComponent component) {
-
-        return getPassThruBehaviors(component, "click", "action");
-    }
-
-} // end of class ButtonRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CheckboxRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CheckboxRenderer.java
deleted file mode 100644
index d239308..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CheckboxRenderer.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// CheckboxRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Map;
-import java.util.logging.Level;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.convert.ConverterException;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-
-/**
- * <B>CheckboxRenderer</B> is a class that renders the current value of
- * <code>UISelectBoolean<code> as a checkbox.
- */
-
-public class CheckboxRenderer extends HtmlBasicInputRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.SELECTBOOLEANCHECKBOX);
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldDecode(component)) {
-            return;
-        }
-
-        String clientId = decodeBehaviors(context, component);
-
-        if (clientId == null) {
-            clientId = component.getClientId(context);
-        }
-        assert(clientId != null);
-        // Convert the new value
-
-        Map<String, String> requestParameterMap = context.getExternalContext()
-              .getRequestParameterMap();
-        boolean isChecked = isChecked(requestParameterMap.get(clientId));
-        setSubmittedValue(component, isChecked);
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE,
-                       "new value after decoding: {0}",
-                       isChecked);
-        }
-
-    }
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-
-    @Override
-    public Object getConvertedValue(FacesContext context,
-                                    UIComponent component,
-                                    Object submittedValue)
-    throws ConverterException {
-
-        return ((submittedValue instanceof Boolean)
-                ? submittedValue
-                : Boolean.valueOf(submittedValue.toString()));
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected void getEndTextToRender(FacesContext context,
-                                      UIComponent component,
-                                      String currentValue) throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        String styleClass;
-
-        writer.startElement("input", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        writer.writeAttribute("type", "checkbox", "type");
-        writer.writeAttribute("name", component.getClientId(context),
-                              "clientId");
-
-        if (Boolean.valueOf(currentValue)) { 
-            writer.writeAttribute("checked", Boolean.TRUE, "value");
-        }
-        if (null != (styleClass = (String)
-              component.getAttributes().get("styleClass"))) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES,
-                                                getNonOnClickSelectBehaviors(component));
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-        RenderKitUtils.renderSelectOnclick(context, component, false);
-
-        writer.endElement("input");
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    /**
-     * @param value the submitted value
-     * @return "true" if the component was checked, otherise "false"
-     */
-    private static boolean isChecked(String value) {
-
-        return "on".equalsIgnoreCase(value)
-               || "yes".equalsIgnoreCase(value)
-               || "true".equalsIgnoreCase(value);
-
-    }
-
-} // end of class CheckboxRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java
deleted file mode 100644
index 57817bf..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// CommandLinkRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.ClientBehaviorContext;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.ActionEvent;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageUtils;
-
-
-/**
- * <B>CommandLinkRenderer</B> is a class that renders the current value of
- * <code>UICommand<code> as a HyperLink that acts like a Button.
- */
-
-public class CommandLinkRenderer extends LinkRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.COMMANDLINK);
-
-
-    private static final String SCRIPT_STATE = RIConstants.FACES_PREFIX +
-                                               "scriptState";
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldDecode(component)) {
-            return;
-        }
-
-        String clientId = decodeBehaviors(context, component);
-
-        if (wasClicked(context, component, clientId)) {
-            component.queueEvent(new ActionEvent(component));
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("This commandLink resulted in form submission " +
-                            " ActionEvent queued.");
-
-            }
-        }
-
-    }
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        boolean componentDisabled =
-              Boolean.TRUE.equals(component.getAttributes().get("disabled"));
-
-        String formClientId = RenderKitUtils.getFormClientId(component, context);
-
-        if (componentDisabled || formClientId == null) {
-            renderAsDisabled(context, component);
-        } else {
-            RenderKitUtils.renderJsfJs(context);
-            renderAsActive(context, component);
-        }
-
-    }
-
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncodeChildren(component)) {
-            return;
-        }
-
-        if (component.getChildCount() > 0) {
-            for (UIComponent kid : component.getChildren()) {
-                encodeRecursive(context, kid);
-            }
-        }
-        
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        String formClientId = RenderKitUtils.getFormClientId(component, context);
-        if (formClientId == null) {
-            writer.write(MessageUtils.getExceptionMessageString(
-                  MessageUtils.COMMAND_LINK_NO_FORM_MESSAGE_ID));
-            writer.endElement("span");
-            return;
-        }
-
-        if (Boolean.TRUE.equals(component.getAttributes().get("disabled"))) {
-            writer.endElement("span");
-        } else {
-            writer.endElement("a");
-        }
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-
-        return true;
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected Object getValue(UIComponent component) {
-
-        return ((UICommand) component).getValue();       
-
-    }
-
-    /*
-     * Render the necessary Javascript for the link.
-     * Note that much of this code is shared with CommandButtonRenderer.renderOnClick
-     * RELEASE_PENDING: Consolidate this code into a utility method, if possible.
-     */
-    protected void renderAsActive(FacesContext context, UIComponent command)
-          throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        String formClientId = RenderKitUtils.getFormClientId(command, context);
-        if (formClientId == null) {
-            return;
-        }
-
-        //make link act as if it's a button using javascript        
-        writer.startElement("a", command);
-        writeIdAttributeIfNecessary(context, writer, command);
-        writer.writeAttribute("href", "#", "href");
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                command,
-                                                ATTRIBUTES,
-                                                getNonOnClickBehaviors(command));
-
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, command);
-
-        String target = (String) command.getAttributes().get("target");
-        if (target != null) {
-            target = target.trim();
-        } else {
-            target = "";
-        }
-
-        Collection<ClientBehaviorContext.Parameter> params = getBehaviorParameters(command);
-        RenderKitUtils.renderOnclick(context, 
-                                     command,
-                                     params,
-                                     target,
-                                     true);
-
-        writeCommonLinkAttributes(writer, command);
-
-        // render the current value as link text.
-        writeValue(command, writer);
-        writer.flush();
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    private static boolean wasClicked(FacesContext context,
-                                      UIComponent component,
-                                      String clientId) {
-
-        Map<String,String> requestParamMap =
-              context.getExternalContext().getRequestParameterMap();
-
-        if (clientId == null) {
-            clientId = component.getClientId(context);
-        }
-
-        // Fire an action event if we've had a traditional (non-Ajax)
-        // postback, or if we've had a partial or behavior-based postback.
-        return (requestParamMap.containsKey(clientId) ||
-                RenderKitUtils.isPartialOrBehaviorAction(context, clientId));
-    }
-
-    // Returns the Behaviors map, but only if it contains some entry other
-    // than those handled by renderOnclick().  This helps us optimize
-    // renderPassThruAttributes() in the very common case where the
-    // link only contains an "action" (or "click") Behavior.  In that
-    // we pass a null Behaviors map into renderPassThruAttributes(),
-    // which allows us to take a more optimized code path.
-    private static Map<String, List<ClientBehavior>> getNonOnClickBehaviors(UIComponent component) {
-
-        return getPassThruBehaviors(component, "click", "action");
-    }
-
-
-} // end of class CommandLinkRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CompositeFacetRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CompositeFacetRenderer.java
deleted file mode 100644
index e97546c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CompositeFacetRenderer.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.render.Renderer;
-
-/**
- * <p>
- * This <code>Renderer</code> is responsible for rendering the content of a
- * facet defined within the <em>using page</em> template in the desired location
- * within the composite component implementation section.
- * </p>
- */
-public class CompositeFacetRenderer extends Renderer {
-
-    private static final Logger logger = FacesLogger.RENDERKIT.getLogger();
-
-
-    // --------------------------------------------------- Methods from Renderer
-
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-    throws IOException {
-
-        Util.notNull("context", context);
-        Util.notNull("component", component);
-
-        String facetName = (String)
-              component.getAttributes().get(UIComponent.FACETS_KEY);
-        if (null == facetName) {
-            return;
-        }
-
-        UIComponent currentCompositeComponent = UIComponent
-              .getCurrentCompositeComponent(context);
-        if (null != currentCompositeComponent) {
-            UIComponent facet = currentCompositeComponent.getFacet(facetName);
-            if (null != facet) {
-                facet.encodeAll(context);
-            } else {
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE,
-                               "Could not find facet named {0}",
-                               facetName);
-                }
-            }
-        }
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-        return true;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CompositeRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CompositeRenderer.java
deleted file mode 100644
index c836db4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/CompositeRenderer.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.util.Util;
-
-import java.io.IOException;
-import java.util.Map;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.render.Renderer;
-
-/**
- * <p>
- * This <code>Renderer</code> is responsible for rendering the children
- * defined within the composite implementation section of a composite component
- * template.
- * </p>
- */
-public class CompositeRenderer extends Renderer {
-
-
-    // --------------------------------------------------- Methods from Renderer
-
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
-
-        Util.notNull("context", context);
-        Util.notNull("component", component);
-
-        Map<String,UIComponent> facets = component.getFacets();
-        UIComponent compositeRoot = facets.get(UIComponent.COMPOSITE_FACET_NAME);
-        if (null == compositeRoot) {
-            throw new IOException("PENDING_I18N: Unable to find composite " + 
-                    " component root for composite component with id " + 
-                    component.getId() + " and class " + 
-                    component.getClass().getName());
-        }
-        compositeRoot.encodeAll(context);
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-        return true;
-    }
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/FormRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/FormRenderer.java
deleted file mode 100644
index fbbc183..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/FormRenderer.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// FormRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.logging.Level;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import javax.faces.render.Renderer;
-
-/** <B>FormRenderer</B> is a class that renders a <code>UIForm<code> as a Form. */
-
-public class FormRenderer extends HtmlBasicRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.FORMFORM);
-
-    private boolean writeStateAtEnd;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public FormRenderer() {
-        WebConfiguration webConfig = WebConfiguration.getInstance();
-        writeStateAtEnd =
-             webConfig.isOptionEnabled(
-                  BooleanWebContextInitParameter.WriteStateAtFormEnd);
-
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-
-        rendererParamsNotNull(context, component);
-
-        String clientId = decodeBehaviors(context, component);
-
-        if (clientId == null) {
-            clientId = component.getClientId(context);
-        }
-                
-        // Was our form the one that was submitted?  If so, we need to set
-        // the indicator accordingly..
-        Map<String, String> requestParameterMap = context.getExternalContext()
-              .getRequestParameterMap();
-        if (requestParameterMap.containsKey(clientId)) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                           "UIForm with client ID {0}, submitted",
-                           clientId);
-            }
-            ((UIForm) component).setSubmitted(true);
-        } else {
-            ((UIForm) component).setSubmitted(false);
-        }
-
-    }
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        String clientId = component.getClientId(context);
-        // since method and action are rendered here they are not added
-        // to the pass through attributes in Util class.
-        writer.write('\n');
-        writer.startElement("form", component);
-        writer.writeAttribute("id", clientId, "clientId");
-        writer.writeAttribute("name", clientId, "name");
-        writer.writeAttribute("method", "post", null);
-        writer.writeAttribute("action", getActionStr(context), null);
-        String styleClass =
-              (String) component.getAttributes().get("styleClass");
-        if (styleClass != null) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        String acceptcharset = (String)
-              component.getAttributes().get("acceptcharset");
-        if (acceptcharset != null) {
-            writer.writeAttribute("accept-charset", acceptcharset,
-                                  "acceptcharset");
-        }
-
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES);
-        writer.writeText("\n", component, null);
-
-        // this hidden field will be checked in the decode method to
-        // determine if this form has been submitted.         
-        writer.startElement("input", component);
-        writer.writeAttribute("type", "hidden", "type");
-        writer.writeAttribute("name", clientId,
-                              "clientId");
-        writer.writeAttribute("value", clientId, "value");
-        writer.endElement("input");
-        writer.write('\n');
-
-        // Write out special hhidden field for partial submits
-        String viewId = context.getViewRoot().getViewId();
-        String actionURL =
-            context.getApplication().getViewHandler().getActionURL(context, viewId);
-        ExternalContext externalContext = context.getExternalContext();
-        String encodedActionURL = externalContext.encodeActionURL(actionURL);
-        String encodedPartialActionURL = externalContext.encodePartialActionURL(actionURL);
-        if (encodedPartialActionURL != null) {
-            if (!encodedPartialActionURL.equals(encodedActionURL)) {
-                writer.startElement("input", component);
-                writer.writeAttribute("type", "hidden", "type");
-                writer.writeAttribute("name", "javax.faces.encodedURL", null);
-                writer.writeAttribute("value", encodedPartialActionURL, "value");
-                writer.endElement("input");
-                writer.write('\n');
-            }
-        }
-
-        if (!writeStateAtEnd) {
-            context.getApplication().getViewHandler().writeState(context);
-            writer.write('\n');
-        }
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        // Render the end tag for form
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        
-        // Render ay resources that have been targeted for this form.
-
-        UIViewRoot viewRoot = context.getViewRoot();
-        ListIterator iter = (viewRoot.getComponentResources(context, "form")).listIterator();
-        while (iter.hasNext()) {
-            UIComponent resource = (UIComponent)iter.next();
-            resource.encodeAll(context);
-        }
-        
-        // Render the end tag for form
-        if (writeStateAtEnd) {
-            context.getApplication().getViewHandler().writeState(context);
-        }
-        writer.writeText("\n", component, null);
-        writer.endElement("form");
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * @param context FacesContext for the response we are creating
-     *
-     * @return Return the value to be rendered as the <code>action</code> attribute
-     *  of the form generated for this component.
-     */
-    private static String getActionStr(FacesContext context) {
-
-        String viewId = context.getViewRoot().getViewId();
-        String actionURL =
-              context.getApplication().getViewHandler().
-                    getActionURL(context, viewId);
-        return (context.getExternalContext().encodeActionURL(actionURL));
-
-    }
-
-} // end of class FormRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/GridRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/GridRenderer.java
deleted file mode 100644
index f2375ae..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/GridRenderer.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-
-/**
- * <B>GridRenderer</B> is a class that renders <code>UIPanel</code> component
- * as a "Grid".
- */
-
-public class GridRenderer extends BaseTableRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.PANELGRID);
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        // Render the beginning of this panel
-        ResponseWriter writer = context.getResponseWriter();
-        renderTableStart(context, component, writer, ATTRIBUTES);
-
-        // render the caption facet (if present)
-        renderCaption(context, component, writer);
-
-        // Render the header facet (if any)
-        renderHeader(context, component, writer);
-
-        // Render the footer facet (if any)
-        renderFooter(context, component, writer);
-
-    }
-
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncodeChildren(component)) {
-            return;
-        }
-
-        // Set up the variables we will need
-        ResponseWriter writer = context.getResponseWriter();
-        TableMetaInfo info = getMetaInfo(context, component);
-        int columnCount = info.columns.size();
-        boolean open = false;
-        int i = 0;
-
-        // Render our children, starting a new row as needed
-        renderTableBodyStart(context, component, writer);
-        boolean rowRendered = false;
-        for (Iterator<UIComponent> kids = getChildren(component);
-             kids.hasNext();) {
-
-            UIComponent child = kids.next();
-            if (!child.isRendered()) {
-                continue;
-            }
-            if ((i % columnCount) == 0) {
-                if (open) {
-                    renderRowEnd(context, component, writer);
-                }
-                renderRowStart(context, component, writer);
-                rowRendered = true;
-                open = true;
-                info.newRow();
-            }
-            renderRow(context, component, child, writer);
-            i++;
-        }
-        if (open) {
-           renderRowEnd(context, component, writer);
-        }
-        if (!rowRendered) {
-            this.renderEmptyTableRow(writer, component);
-        }
-        renderTableBodyEnd(context, component, writer);
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        // Render the ending of this panel
-        renderTableEnd(context, component, context.getResponseWriter());
-
-        clearMetaInfo(context, component);
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-
-        return true;
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected void renderRow(FacesContext context,
-                             UIComponent table,
-                             UIComponent child,
-                             ResponseWriter writer)
-    throws IOException {
-
-        TableMetaInfo info = getMetaInfo(context, table);
-        writer.startElement("td", table);
-        String columnClass = info.getCurrentColumnClass();
-        if (columnClass != null) {
-            writer.writeAttribute("class",
-                                  columnClass,
-                                  "columns");
-        }
-        encodeRecursive(context, child);
-        writer.endElement("td");
-        writer.writeText("\n", table, null);
-
-    }
-
-
-    protected void renderHeader(FacesContext context,
-                                UIComponent table,
-                                ResponseWriter writer) throws IOException {
-
-        TableMetaInfo info = getMetaInfo(context, table);
-        UIComponent header = getFacet(table, "header");
-        String headerClass =
-              (String) table.getAttributes().get("headerClass");
-        if (header != null) {
-            writer.startElement("thead", table);
-            writer.writeText("\n", table, null);
-            writer.startElement("tr", header);
-            writer.startElement("th", header);
-            if (headerClass != null) {
-                writer.writeAttribute("class", headerClass, "headerClass");
-            }
-            writer.writeAttribute("colspan",
-                                  String.valueOf(info.columns.size()),
-                                  null);
-            writer.writeAttribute("scope", "colgroup", null);
-            encodeRecursive(context, header);
-            writer.endElement("th");
-            writer.endElement("tr");
-            writer.writeText("\n", table, null);
-            writer.endElement("thead");
-            writer.writeText("\n", table, null);
-        }
-
-    }
-
-
-    protected void renderFooter(FacesContext context,
-                                UIComponent table,
-                                ResponseWriter writer) throws IOException {
-
-        TableMetaInfo info = getMetaInfo(context, table);
-        UIComponent footer = getFacet(table, "footer");
-        String footerClass =
-              (String) table.getAttributes().get("footerClass");
-        if (footer != null) {
-            writer.startElement("tfoot", table);
-            writer.writeText("\n", table, null);
-            writer.startElement("tr", footer);
-            writer.startElement("td", footer);
-            if (footerClass != null) {
-                writer.writeAttribute("class", footerClass, "footerClass");
-            }
-            writer.writeAttribute("colspan",
-                                  String.valueOf(info.columns.size()),
-                                  null);
-            encodeRecursive(context, footer);
-            writer.endElement("td");
-            writer.endElement("tr");
-            writer.writeText("\n", table, null);
-            writer.endElement("tfoot");
-            writer.writeText("\n", table, null);
-        }
-
-    }
-
-
-    // ------------------------------------------------------- Private Methods
-
-
-    private void renderEmptyTableRow(final ResponseWriter writer,
-            final UIComponent component) throws IOException {
-
-        writer.startElement("tr", component);
-        writer.startElement("td", component);
-        writer.endElement("td");
-        writer.endElement("tr");
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/GroupRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/GroupRenderer.java
deleted file mode 100644
index 1a8ad70..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/GroupRenderer.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-/**
- * Arbitrary grouping "renderer" that simply renders its children
- * recursively in the <code>encodeEnd()</code> method.
- *
- */
-public class GroupRenderer extends HtmlBasicRenderer {
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-        // Render a span around this group if necessary
-        String style = (String) component.getAttributes().get("style");
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        ResponseWriter writer = context.getResponseWriter();
-
-        if (divOrSpan(component)) {
-            if (("block".equals(component.getAttributes().get("layout")))) {
-                writer.startElement("div", component);
-            } else {
-                writer.startElement("span", component);
-            }
-            writeIdAttributeIfNecessary(context, writer, component);
-            if (styleClass != null) {
-                writer.writeAttribute("class", styleClass, "styleClass");
-            }
-            if (style != null) {
-                writer.writeAttribute("style", style, "style");
-            }
-        }
-
-    }
-
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncodeChildren(component)) {
-            return;
-        }
-
-        // Render our children recursively
-        Iterator<UIComponent> kids = getChildren(component);
-        while (kids.hasNext()) {
-            encodeRecursive(context, kids.next());
-        }
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        // Close our span element if necessary
-        ResponseWriter writer = context.getResponseWriter();
-        if (divOrSpan(component)) {
-            if ("block".equals(component.getAttributes().get("layout"))) {
-                writer.endElement("div");
-            } else {
-                writer.endElement("span");
-            }
-        }
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-
-        return true;
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * @param component <code>UIComponent</code> for this group
-     *
-     * @return <code>true</code> if we need to render a div or span element
-     *  around this group.
-     */
-    private boolean divOrSpan(UIComponent component) {
-
-        return (shouldWriteIdAttribute(component) ||
-            (component.getAttributes().get("style") != null) ||
-            (component.getAttributes().get("styleClass") != null));
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HeadRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HeadRenderer.java
deleted file mode 100644
index 384a211..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HeadRenderer.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.Renderer;
-
-/**
- * /**
- * <p>This <code>Renderer</code> is responsible for rendering
- * the standard HTML head elements as well as rendering any resources
- * that should be output before the <code>head</code> tag is closed.</p>
- */
-public class HeadRenderer extends Renderer {
-
-    private static final Attribute[] HEAD_ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTHEAD);
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-        // no-op
-    }
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        writer.startElement("head", component);
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                HEAD_ATTRIBUTES);
-        encodeHeadResources(context);
-    }
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-        // no-op
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        writer.endElement("head");
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void encodeHeadResources(FacesContext context)
-    throws IOException {
-
-        UIViewRoot viewRoot = context.getViewRoot();
-        for (UIComponent resource : viewRoot.getComponentResources(context, "head")) {
-            resource.encodeAll(context);
-        }
-
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HiddenRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HiddenRenderer.java
deleted file mode 100644
index 2e8f84f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HiddenRenderer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// HiddenRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-/**
- * <B>HiddenRenderer</B> is a class that renders the current value of
- * <code>UIInput<code> component as a HTML hidden variable.
- */
-public class HiddenRenderer extends HtmlBasicInputRenderer {
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected void getEndTextToRender(FacesContext context,
-                                      UIComponent component,
-                                      String currentValue)
-          throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        writer.startElement("input", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        writer.writeAttribute("type", "hidden", "type");
-        String clientId = component.getClientId(context);
-        writer.writeAttribute("name", clientId, "clientId");
-
-        // render default text specified
-        if (currentValue != null) {
-            writer.writeAttribute("value", currentValue, "value");
-        }
-        writer.endElement("input");
-
-    }
-
-    // The testcase for this class is TestRenderers_3.java 
-
-} // end of class HiddenRenderer
-
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlBasicInputRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlBasicInputRenderer.java
deleted file mode 100644
index b217907..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlBasicInputRenderer.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// HtmlBasicInputRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-
-import javax.el.ValueExpression;
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.ValueHolder;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-
-import com.sun.faces.util.MessageFactory;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.RequestStateManager;
-
-/**
- * <B>HtmlBasicInputRenderer</B> is a base class for implementing renderers
- * that support UIInput type components
- */
-
-public abstract class HtmlBasicInputRenderer extends HtmlBasicRenderer {
-
-
-    private boolean hasStringConverter = false;
-
-    private boolean hasStringConverterSet = false;
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public Object getConvertedValue(FacesContext context, UIComponent component,
-                                    Object submittedValue)
-          throws ConverterException {
-
-        String newValue = (String) submittedValue;
-        // if we have no local value, try to get the valueExpression.
-        ValueExpression valueExpression = component.getValueExpression("value");
-        Converter converter = null;
-
-        // If there is a converter attribute, use it to to ask application
-        // instance for a converter with this identifer.
-        if (component instanceof ValueHolder) {
-            converter = ((ValueHolder) component).getConverter();
-        }
-
-        if (null == converter && null != valueExpression) {
-            Class converterType = valueExpression.getType(context.getELContext());
-            // if converterType is null, assume the modelType is "String".
-            if (converterType == null ||
-                converterType == Object.class) {
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE,
-                               "No conversion necessary for value {0} of component {1}",
-                               new Object[]{
-                                     submittedValue,
-                                     component.getId() });
-                }
-                return newValue;
-            }
-
-            // If the converterType is a String, and we don't have a 
-            // converter-for-class for java.lang.String, assume the type is 
-            // "String".
-            if (converterType == String.class && !hasStringConverter(context)) {
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE,
-                               "No conversion necessary for value {0} of component {1}",
-                               new Object[]{
-                                     submittedValue,
-                                     component.getId()});
-                }
-                return newValue;
-            }
-            // if getType returns a type for which we support a default
-            // conversion, acquire an appropriate converter instance.
-
-            try {
-                Application application = context.getApplication();
-                converter = application.createConverter(converterType);
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE,
-                               "Created converter ({0}) for type {1} for component {2}.",
-                               new Object[] {
-                                     converter.getClass().getName(),
-                                     converterType.getClass().getName(),
-                                     component.getId() });
-                }
-            } catch (Exception e) {
-                if (logger.isLoggable(Level.SEVERE)) {
-                    logger.log(Level.SEVERE,
-                               "Could not instantiate converter for type {0}: {1}",
-                               new Object[] {
-                                     converterType,
-                                     e.toString() });
-                    logger.log(Level.SEVERE, "", e);
-                }
-                return (null);
-            }
-        } else if (converter == null) {
-            // if there is no valueExpression and converter attribute set,
-            // assume the modelType as "String" since we have no way of
-            // figuring out the type. So for the selectOne and
-            // selectMany, converter has to be set if there is no
-            // valueExpression attribute set on the component.
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                            "No conversion necessary for value {0} of component {1}",
-                            new Object[] {
-                                  submittedValue,
-                                  component.getId() });
-                logger.fine(" since there is no explicitly registered converter "
-                            + "and the component value is not bound to a model property");
-            }
-            return newValue;
-        }
-
-        if (converter != null) {
-            // If the conversion eventually falls to needing to use EL type coercion,
-            // make sure our special ConverterPropertyEditor knows about this value.
-            RequestStateManager.set(context,
-                                    RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
-                                    component);
-            return converter.getAsObject(context, component, newValue);
-        } else {
-            // throw converter exception.
-            Object[] params = {
-                  newValue,
-                  "null Converter"
-            };
-
-            throw new ConverterException(MessageFactory.getMessage(
-                  context, MessageUtils.CONVERSION_ERROR_MESSAGE_ID, params));
-        }
-
-    }
-
-
-    @Override
-    public void setSubmittedValue(UIComponent component, Object value) {
-
-        if (component instanceof UIInput) {
-            ((UIInput) component).setSubmittedValue(value);
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Set submitted value " + value + " on component ");
-            }
-        }
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected Object getValue(UIComponent component) {
-
-        if (component instanceof ValueHolder) {
-            Object value = ((ValueHolder) component).getValue();
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("component.getValue() returned " + value);
-            }
-            return value;
-        }
-
-        return null;
-
-    }
-
-    // Returns the Behaviors map, but only if it contains some entry other
-    // than those handled by renderOnchange().  This helps us optimize
-    // renderPassThruAttributes() in the very common case where the
-    // button only contains an "valueChange" (or "change") Behavior.  In that
-    // we pass a null Behaviors map into renderPassThruAttributes(),
-    // which allows us to take a more optimized code path.
-    protected static Map<String, List<ClientBehavior>> getNonOnChangeBehaviors(UIComponent component) {
-        return getPassThruBehaviors(component, "change", "valueChange");
-    }
-
-    // Returns the Behaviors map, but only if it contains some entry other
-    // than those handled by renderOnchange().  This helps us optimize
-    // renderPassThruAttributes() in the very common case where the
-    // button only contains an "valueChange" (or "change") Behavior.  In that
-    // we pass a null Behaviors map into renderPassThruAttributes(),
-    // which allows us to take a more optimized code path.
-    protected static Map<String, List<ClientBehavior>> getNonOnClickSelectBehaviors(UIComponent component) {
-        return getPassThruBehaviors(component, "click", "valueChange");
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    private boolean hasStringConverter(FacesContext context) {
-
-        if (!hasStringConverterSet) {
-            hasStringConverter = (null !=
-                                  context.getApplication()
-                                        .createConverter(String.class));
-            hasStringConverterSet = true;
-        }
-        return hasStringConverter;
-
-    }
-
-} // end of class HtmlBasicInputRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlBasicRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlBasicRenderer.java
deleted file mode 100644
index 48e0288..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlBasicRenderer.java
+++ /dev/null
@@ -1,964 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// HtmlBasicRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIParameter;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.ValueHolder;
-import javax.faces.component.behavior.ClientBehaviorContext;
-import javax.faces.component.behavior.ClientBehavior;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.faces.render.Renderer;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-
-/**
- * <B>HtmlBasicRenderer</B> is a base class for implementing renderers
- * for HtmlBasicRenderKit.
- */
-
-public abstract class HtmlBasicRenderer extends Renderer {   
-
-
-    // Log instance for this class
-    protected static final Logger logger = FacesLogger.RENDERKIT.getLogger();
-
-    protected static final Param[] EMPTY_PARAMS = new Param[0];
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public HtmlBasicRenderer() {
-
-        super();
-
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public String convertClientId(FacesContext context, String clientId) {
-
-        return clientId;
-
-    }
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldDecode(component)) {
-            return;
-        }
-
-        String clientId = decodeBehaviors(context, component);
-
-        if (!(component instanceof UIInput)) {
-            // decode needs to be invoked only for components that are
-            // instances or subclasses of UIInput.
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                           "No decoding necessary since the component {0} is not an instance or a sub class of UIInput",
-                           component.getId());
-            }
-            return;
-        }
-
-        if (clientId == null) {
-            clientId = component.getClientId(context);
-        }
-
-        assert(clientId != null);
-        Map<String, String> requestMap =
-              context.getExternalContext().getRequestParameterMap();
-        // Don't overwrite the value unless you have to!
-        String newValue = requestMap.get(clientId);
-        if (newValue != null) {
-            setSubmittedValue(component, newValue);
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                           "new value after decoding {0}",
-                           newValue);
-            }
-        }
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-       rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String currentValue = getCurrentValue(context, component);
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE,
-                       "Value to be rendered {0}",
-                       currentValue);
-        }
-        getEndTextToRender(context, component, currentValue);
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-
-        return true;
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    // Decodes Behaviors if any match the behavior source/event.
-    // As a convenience, returns component id, but only if it
-    // was retrieved.  This allows us to avoid duplicating
-    // calls to getClientId(), which can be expensive for 
-    // deep component trees.
-    protected final String decodeBehaviors(FacesContext context, 
-                                           UIComponent component)  {
-
-        if (!(component instanceof ClientBehaviorHolder)) {
-            return null;
-        }
-
-        ClientBehaviorHolder holder = (ClientBehaviorHolder)component;
-        Map<String, List<ClientBehavior>> behaviors = holder.getClientBehaviors();
-        if (behaviors.isEmpty()) {
-            return null;
-        }
-
-        ExternalContext external = context.getExternalContext();
-        Map<String, String> params = external.getRequestParameterMap();
-        String behaviorEvent = params.get("javax.faces.behavior.event");
-
-        if (null != behaviorEvent) {
-            List<ClientBehavior> behaviorsForEvent = behaviors.get(behaviorEvent);
-
-            if (behaviors.size() > 0) {
-               String behaviorSource = params.get("javax.faces.source");
-               String clientId = component.getClientId();
-               if (isBehaviorSource(context, behaviorSource, clientId)) {
-                   for (ClientBehavior behavior: behaviorsForEvent) {
-                       behavior.decode(context, component);
-                   }
-               }
-
-               return clientId;
-            }
-        }
-
-        return null;
-    }
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param behaviorSourceId the ID of the behavior source
-     * @param componentClientId the client ID of the component being decoded
-     * @return <code>true</code> if the behavior source is for the component
-     *  being decoded, otherwise <code>false</code>
-     */
-    protected boolean isBehaviorSource(FacesContext ctx,
-                                       String behaviorSourceId,
-                                       String componentClientId) {
-
-        return (behaviorSourceId != null && behaviorSourceId.equals(componentClientId));
-
-    }
-
-
-    /**
-     * <p>Conditionally augment an id-reference value.</p>
-     * <p>If the <code>forValue</code> doesn't already include a generated
-     * suffix, but the id of the <code>fromComponent</code> does include a
-     * generated suffix, then append the suffix from the
-     * <code>fromComponent</code> to the <code>forValue</code>.
-     * Otherwise just return the <code>forValue</code> as is.</p>
-     *
-     * @param forValue      - the basic id-reference value.
-     * @param fromComponent - the component that holds the
-     *                      code>forValue</code>.
-     *
-     * @return the (possibly augmented) <code>forValue<code>.
-     */
-    protected String augmentIdReference(String forValue,
-                                        UIComponent fromComponent) {
-
-        int forSuffix = forValue.lastIndexOf(UIViewRoot.UNIQUE_ID_PREFIX);
-        if (forSuffix <= 0) {
-            // if the for-value doesn't already have a suffix present
-            String id = fromComponent.getId();
-            if (id != null) {
-                int idSuffix = id.lastIndexOf(UIViewRoot.UNIQUE_ID_PREFIX);
-                if (idSuffix > 0) {
-                    // but the component's own id does have a suffix
-                    if (logger.isLoggable(Level.FINE)) {
-                        logger.fine("Augmenting for attribute with " +
-                                    id.substring(idSuffix) +
-                                    " suffix from Id attribute");
-                    }
-                    forValue += id.substring(idSuffix);
-                }
-            }
-        }
-        return forValue;
-
-    }
-
-
-    /**
-     * <p>Render nested child components by invoking the encode methods
-     * on those components, but only when the <code>rendered</code>
-     * property is <code>true</code>.</p>
-     *
-     * @param context FacesContext for the current request
-     * @param component the component to recursively encode
-     *
-     * @throws IOException if an error occurrs during the encode process
-     */
-    protected void encodeRecursive(FacesContext context, UIComponent component)
-          throws IOException {
-
-        // suppress rendering if "rendered" property on the component is
-        // false.
-        if (!component.isRendered()) {
-            return;
-        }
-
-        // Render this component and its children recursively
-        component.encodeBegin(context);
-        if (component.getRendersChildren()) {
-            component.encodeChildren(context);
-        } else {
-            Iterator<UIComponent> kids = getChildren(component);
-            while (kids.hasNext()) {
-                UIComponent kid = kids.next();
-                encodeRecursive(context, kid);
-            }
-        }
-        component.encodeEnd(context);
-
-    }
-
-
-    /**
-     * @param component <code>UIComponent</code> for which to extract children
-     *
-     * @return an Iterator over the children of the specified
-     *  component, selecting only those that have a
-     *  <code>rendered</code> property of <code>true</code>.
-     */
-    protected Iterator<UIComponent> getChildren(UIComponent component) {
-
-        int childCount = component.getChildCount();
-        if (childCount > 0) {
-            return component.getChildren().iterator();
-        } else {
-            return Collections.<UIComponent>emptyList().iterator();
-        }
-
-    }
-
-
-    /**
-     * @param context the FacesContext for the current request
-     * @param component the UIComponent whose value we're interested in
-     *
-     * @return the value to be rendered and formats it if required. Sets to
-     *  empty string if value is null.
-     */
-    protected String getCurrentValue(FacesContext context,
-                                     UIComponent component) {
-
-        if (component instanceof UIInput) {
-            Object submittedValue = ((UIInput) component).getSubmittedValue();
-            if (submittedValue != null) {
-                // value may not be a String...
-                return submittedValue.toString();
-            }
-        }
-
-        String currentValue = null;
-        Object currentObj = getValue(component);
-        if (currentObj != null) {
-            currentValue = getFormattedValue(context, component, currentObj);
-        }
-        return currentValue;
-
-    }
-
-
-    /**
-     * Renderers override this method to write appropriate HTML content into
-     * the buffer.
-     *
-     * @param context the FacesContext for the current request
-     * @param component the UIComponent of interest
-     * @param currentValue <code>component</code>'s current value
-     *
-     * @throws IOException if an error occurs rendering the text
-     */
-    protected void getEndTextToRender(FacesContext context,
-                                      UIComponent component,
-                                      String currentValue) throws IOException {
-
-        // no-op unless overridden
-
-    }
-
-
-    /**
-     * @param component Component from which to return a facet
-     * @param name      Name of the desired facet
-     *
-     * @return the specified facet from the specified component, but
-     *  <strong>only</strong> if its <code>rendered</code> property is
-     *  set to <code>true</code>.
-     */
-    protected UIComponent getFacet(UIComponent component, String name) {
-
-        UIComponent facet = null;
-        if (component.getFacetCount() > 0) {
-            facet = component.getFacet(name);
-            if ((facet != null) && !facet.isRendered()) {
-                facet = null;
-            }
-        }
-        return (facet);
-
-    }
-
-
-    /**
-     * Locates the component identified by <code>forComponent</code>
-     *
-     * @param context the FacesContext for the current request
-     * @param forComponent - the component to search for
-     * @param component    - the starting point in which to begin the search
-     *
-     * @return the component with the the <code>id</code that matches
-     *         <code>forComponent</code> otheriwse null if no match is found.
-     */
-    protected UIComponent getForComponent(FacesContext context,
-                                          String forComponent,
-                                          UIComponent component) {
-
-        if (null == forComponent || forComponent.length() == 0) {
-            return null;
-        }
-
-        UIComponent result = null;
-        UIComponent currentParent = component;
-        try {
-            // Check the naming container of the current 
-            // component for component identified by
-            // 'forComponent'
-            while (currentParent != null) {
-                // If the current component is a NamingContainer,
-                // see if it contains what we're looking for.
-                result = currentParent.findComponent(forComponent);
-                if (result != null) {
-                    break;
-                }
-                // if not, start checking further up in the view
-                currentParent = currentParent.getParent();
-            }
-
-            // no hit from above, scan for a NamingContainer
-            // that contains the component we're looking for from the root.    
-            if (result == null) {
-                result =
-                      findUIComponentBelow(context.getViewRoot(), forComponent);
-            }
-        } catch (Exception e) {
-            // ignore - log the warning
-        }
-        // log a message if we were unable to find the specified
-        // component (probably a misconfigured 'for' attribute
-        if (result == null) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.warning(MessageUtils.getExceptionMessageString(
-                      MessageUtils.COMPONENT_NOT_FOUND_IN_VIEW_WARNING_ID,
-                      forComponent));
-            }
-        }
-        return result;
-
-    }
-
-    /**
-     * Overloads getFormattedValue to take a advantage of a previously
-     * obtained converter.
-     * @param context the FacesContext for the current request
-     * @param component UIComponent of interest
-     * @param currentValue the current value of <code>component</code>
-     * @param converter the component's converter
-     * @return the currentValue after any associated Converter has been
-     *  applied
-     *
-     * @throws ConverterException if the value cannot be converted
-     */
-    protected String getFormattedValue(FacesContext context,
-                                       UIComponent component,
-                                       Object currentValue,
-                                       Converter converter)
-          throws ConverterException {
-
-        // formatting is supported only for components that support
-        // converting value attributes.
-        if (!(component instanceof ValueHolder)) {
-            if (currentValue != null) {
-                return currentValue.toString();
-            }
-            return null;
-        }
-
-        if (converter == null) {
-            // If there is a converter attribute, use it to to ask application
-            // instance for a converter with this identifer.
-            converter = ((ValueHolder) component).getConverter();
-        }
-
-        if (converter == null) {
-            // if value is null and no converter attribute is specified, then
-            // return a zero length String.
-            if(currentValue == null) {
-        	return "";
-            }
-            // Do not look for "by-type" converters for Strings
-            if (currentValue instanceof String) {
-                return (String) currentValue;
-            }
-
-            // if converter attribute set, try to acquire a converter
-            // using its class type.
-
-            Class converterType = currentValue.getClass();
-            converter = Util.getConverterForClass(converterType, context);
-
-            // if there is no default converter available for this identifier,
-            // assume the model type to be String.
-            if (converter == null) {
-                return currentValue.toString();
-            }
-        }
-
-        return converter.getAsString(context, component, currentValue);
-    }
-
-
-    /**
-     * @param context the FacesContext for the current request
-     * @param component UIComponent of interest
-     * @param currentValue the current value of <code>component</code>
-     *
-     * @return the currentValue after any associated Converter has been
-     *  applied
-     *
-     * @throws ConverterException if the value cannot be converted
-     */
-    protected String getFormattedValue(FacesContext context,
-                                       UIComponent component,
-                                       Object currentValue)
-          throws ConverterException {
-
-        return getFormattedValue(context, component, currentValue, null);
-
-    }
-
-
-    protected Iterator getMessageIter(FacesContext context,
-                                      String forComponent,
-                                      UIComponent component) {
-
-        Iterator messageIter;
-        // Attempt to use the "for" attribute to locate 
-        // messages.  Three possible scenarios here:
-        // 1. valid "for" attribute - messages returned
-        //    for valid component identified by "for" expression.
-        // 2. zero length "for" expression - global errors
-        //    not associated with any component returned
-        // 3. no "for" expression - all messages returned.
-        if (null != forComponent) {
-            if (forComponent.length() == 0) {
-                messageIter = context.getMessages(null);
-            } else {
-                UIComponent result = getForComponent(context, forComponent,
-                                                     component);
-                if (result == null) {
-                    messageIter = Collections.EMPTY_LIST.iterator();
-                } else {
-                    messageIter =
-                          context.getMessages(result.getClientId(context));
-                }
-            }
-        } else {
-            messageIter = context.getMessages();
-        }
-        return messageIter;
-
-    }
-
-
-    /**
-     * @param command the command which may have parameters
-     *
-     * @return an array of parameters
-     */
-    protected Param[] getParamList(UIComponent command) {
-
-        if (command.getChildCount() > 0) {
-            ArrayList<Param> parameterList = new ArrayList<Param>();
-
-            for (UIComponent kid : command.getChildren()) {
-                if (kid instanceof UIParameter) {
-                    UIParameter uiParam = (UIParameter) kid;
-                    if (!uiParam.isDisable()) {
-                        Object value = uiParam.getValue();
-                        Param param = new Param(uiParam.getName(),
-                                                (value == null ? null :
-                                                 value.toString()));
-                        parameterList.add(param);
-                    }
-                }
-            }
-            return parameterList.toArray(new Param[parameterList.size()]);
-        } else {
-            return EMPTY_PARAMS;
-        }
-
-
-    }
-
-    /**
-     * Collections parameters for use with Behavior script rendering.
-     * Similar to getParamList(), but returns a collection of 
-     * ClientBehaviorContext.Parameter instances.
-     *
-     * @param command the command which may have parameters
-     *
-     * @return a collection of ClientBehaviorContext.Parameter instances.
-     */
-    protected Collection<ClientBehaviorContext.Parameter> getBehaviorParameters(
-        UIComponent command) {
-
-        ArrayList<ClientBehaviorContext.Parameter> params = null;
-        int childCount = command.getChildCount();
-
-        if (childCount > 0) {
-
-            for (UIComponent kid : command.getChildren()) {
-                if (kid instanceof UIParameter) {
-                    UIParameter uiParam = (UIParameter) kid;
-                    String name = uiParam.getName();
-                    Object value = uiParam.getValue();
-
-                    if ((name != null) && (name.length() > 0)) {
-
-                        if (params == null) {
-                            params = new ArrayList<ClientBehaviorContext.Parameter>(childCount);
-                        }
-
-                        params.add(new ClientBehaviorContext.Parameter(name, value));
-                    }
-                }
-            }
-        }
-
-        return (params == null) ? Collections.<ClientBehaviorContext.Parameter>emptyList() : params;
-
-    }
-
-
-    protected Object getValue(UIComponent component) {
-
-        // Make sure this method isn't being called except 
-        // from subclasses that override getValue()!
-        throw new UnsupportedOperationException();
-
-    }
-
-
-    /**
-     * Renderers override this method to store the previous value
-     * of the associated component.
-     *
-     * @param component the target component to which the submitted value
-     *  will be set
-     * @param value the value to set
-     */
-    protected void setSubmittedValue(UIComponent component, Object value) {
-
-        // no-op unless overridden
-
-    }
-
-
-    /**
-     * @param component the component of interest
-     *
-     * @return true if this renderer should render an id attribute.
-     */
-    protected boolean shouldWriteIdAttribute(UIComponent component) {
-
-        // By default we only write the id attribute if:
-        //
-        // - We have a non-auto-generated id, or...
-        // - We have client behaviors.
-        //
-        // We assume that if client behaviors are present, they
-        // may need access to the id (AjaxBehavior certainly does).
-
-        String id;
-        return (null != (id = component.getId()) &&
-                    (!id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX) ||
-                        ((component instanceof ClientBehaviorHolder) &&
-                          !((ClientBehaviorHolder)component).getClientBehaviors().isEmpty())));
-    }
-
-
-    protected String writeIdAttributeIfNecessary(FacesContext context,
-                                                 ResponseWriter writer,
-                                                 UIComponent component) {
-
-        String id = null;
-        if (shouldWriteIdAttribute(component)) {
-            try {
-                writer.writeAttribute("id", id = component.getClientId(context),
-                                      "id");
-            } catch (IOException e) {
-                if (logger.isLoggable(Level.WARNING)) {
-                    String message = MessageUtils.getExceptionMessageString
-                          (MessageUtils.CANT_WRITE_ID_ATTRIBUTE_ERROR_MESSAGE_ID,
-                           e.getMessage());
-                    logger.warning(message);
-                }
-            }
-        }
-        return id;
-
-    }
-
-    protected void rendererParamsNotNull(FacesContext context,
-                                         UIComponent component) {
-
-        Util.notNull("context", context);
-        Util.notNull("component", component);
-        
-    }
-
-
-    protected boolean shouldEncode(UIComponent component) {
-
-        // suppress rendering if "rendered" property on the component is
-        // false.
-        if (!component.isRendered()) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                           "End encoding component {0} since rendered attribute is set to false",
-                           component.getId());
-            }
-            return false;
-        }
-        return true;
-
-    }
-
-
-    protected boolean shouldDecode(UIComponent component) {
-
-        if (Util.componentIsDisabledOrReadonly(component)) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                           "No decoding necessary since the component {0} is disabled or read-only",
-                           component.getId());
-            }
-            return false;
-        }
-        return true;
-
-    }
-
-    protected boolean shouldEncodeChildren(UIComponent component) {
-
-        // suppress rendering if "rendered" property on the component is
-        // false.
-        if (!component.isRendered()) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                            "Children of component {0} will not be encoded since this component's rendered attribute is false",
-                            component.getId());
-            }
-            return false;
-        }
-        return true;
-
-    }
-
-    /**
-     * When rendering pass thru attributes, we need to take any
-     * attached Behaviors into account.  The presence of a non-empty
-     * Behaviors map can cause us to switch from optimized pass thru
-     * attribute rendering to the unoptimized code path.  However,
-     * in two very common cases - attaching action behaviors to 
-     * commands and attaching value change behaviors to editable value
-     * holders - the behaviors map is populated with behaviors that
-     * are not handled by the pass thru attribute code - ie. the
-     * behaviors are handled locally by the renderer.
-     *
-     * In order to optimize such cases, we check to see whether the
-     * component's behaviors map actually contains behaviors only 
-     * for these non-pass thru attributes.  If so, we can pass a
-     * null behavior map into renderPassThruAttributes(), thus ensuring
-     * that we can take advantage of the optimized pass thru rendering
-     * logic.
-     *
-     * Note that in all cases where we use this method, we actually have
-     * two behavior events that we want to check for - a low-level/dom
-     * event (eg. "click", or "change") plus a high-level component
-     * event (eg. "action", or "valueChange").
-     *
-     * @param component the component that we are rendering
-     * @param domEventName the name of the dom-level event
-     * @param componentEventName the name of the component-level event
-     */
-    protected static Map<String, List<ClientBehavior>> getPassThruBehaviors(
-        UIComponent component,
-        String domEventName,
-        String componentEventName) {
-
-        if (!(component instanceof ClientBehaviorHolder)) {
-            return null;
-        }
-
-        Map<String, List<ClientBehavior>> behaviors = ((ClientBehaviorHolder)component).getClientBehaviors();
-
-        int size = behaviors.size();
-
-        if ((size == 1) || (size == 2)) {
-            boolean hasDomBehavior = behaviors.containsKey(domEventName);
-            boolean hasComponentBehavior = behaviors.containsKey(componentEventName);
-
-            // If the behavior map only contains behaviors for non-pass
-            // thru attributes, return null.
-            if (((size == 1) && (hasDomBehavior || hasComponentBehavior)) ||
-                ((size == 2) && hasDomBehavior && hasComponentBehavior)) {
-                return null;
-            }
-        }
-
-        return behaviors;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Recursively searches for {@link NamingContainer}s from the
-     * given start point looking for the component with the <code>id</code>
-     * specified by <code>forComponent</code>.
-     *
-     * @param startPoint   - the starting point in which to begin the search
-     * @param forComponent - the component to search for
-     *
-     * @return the component with the the <code>id</code that matches
-     *         <code>forComponent</code> otheriwse null if no match is found.
-     */
-    private static UIComponent findUIComponentBelow(UIComponent startPoint,
-                                                    String forComponent) {
-
-        UIComponent retComp = null;
-        if (startPoint.getChildCount() > 0) {
-            List<UIComponent> children = startPoint.getChildren();
-            for (int i = 0, size = children.size(); i < size; i++) {
-                UIComponent comp = children.get(i);
-
-                if (comp instanceof NamingContainer) {
-                    try {
-                        retComp = comp.findComponent(forComponent);
-                    } catch (IllegalArgumentException iae) {
-                        continue;
-                    }
-                }
-
-                if (retComp == null) {
-                    if (comp.getChildCount() > 0) {
-                        retComp = findUIComponentBelow(comp, forComponent);
-                    }
-                }
-
-                if (retComp != null) {
-                    break;
-                }
-            }
-        }
-        return retComp;
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * <p>Simple class to encapsulate the name and value of a
-     * <code>UIParameter</code>.
-     */
-    public static class Param {
-
-
-        public String name;
-        public String value;
-
-        
-        // -------------------------------------------------------- Constructors
-
-
-        public Param(String name, String value) {
-
-            this.name = name;
-            this.value = value;
-
-        }
-
-    }
-
-
-    /**
-     * Structure to hold common info used by Select* components
-     * to reduce the number of times component attributes are evaluated
-     * when rendering options.
-     */
-    public static class OptionComponentInfo {
-
-        String disabledClass;
-        String enabledClass;
-        String selectedClass;
-        String unselectedClass;
-        boolean disabled;
-        boolean hideNoSelection;
-
-        public OptionComponentInfo(String disabledClass,
-                                   String enabledClass,
-                                   boolean disabled,
-                                   boolean hideNoSelection) {
-
-            this(disabledClass, enabledClass, null, null, disabled, hideNoSelection);
-
-        }
-
-
-        public OptionComponentInfo(String disabledClass,
-                                   String enabledClass,
-                                   String unselectedClass,
-                                   String selectedClass,
-                                   boolean disabled,
-                                   boolean hideNoSelection) {
-
-            this.disabledClass = disabledClass;
-            this.enabledClass = enabledClass;
-            this.unselectedClass = unselectedClass;
-            this.selectedClass = selectedClass;
-            this.disabled = disabled;
-            this.hideNoSelection = hideNoSelection;
-            
-        }
-
-        public String getDisabledClass() {
-            return disabledClass;
-        }
-
-        public String getEnabledClass() {
-            return enabledClass;
-        }
-
-        public boolean isDisabled() {
-            return disabled;
-        }
-
-        public boolean isHideNoSelection() {
-            return hideNoSelection;
-        }
-
-        public String getSelectedClass() {
-            return selectedClass;
-        }
-
-        public String getUnselectedClass() {
-            return unselectedClass;
-        }
-        
-    }
-    
-
-} // end of class HtmlBasicRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlResponseWriter.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlResponseWriter.java
deleted file mode 100644
index d839511..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/HtmlResponseWriter.java
+++ /dev/null
@@ -1,1225 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
-import com.sun.faces.io.FastStringWriter;
-import com.sun.faces.util.HtmlUtils;
-import com.sun.faces.util.MessageUtils;
-import javax.faces.context.ExternalContext;
-
-
-/**
- * <p><strong>HtmlResponseWriter</strong> is an Html specific implementation
- * of the <code>ResponseWriter</code> abstract class.
- * Kudos to Adam Winer (Oracle) for much of this code.
- */
-public class HtmlResponseWriter extends ResponseWriter {
-
-
-    // Content Type for this Writer.
-    //
-    private String contentType = "text/html";
-
-    // Character encoding of that Writer - this may be null
-    // if the encoding isn't known.
-    //
-    private String encoding = null;
-
-    // Writer to use for output;
-    //
-    private Writer writer = null;
-
-    // True when we need to close a start tag
-    //
-    private boolean closeStart;
-
-    // Configuration flag regarding disableUnicodeEscaping
-    //
-    private WebConfiguration.DisableUnicodeEscaping disableUnicodeEscaping;
-
-    //Flag to escape Unicode
-    //
-    private boolean escapeUnicode;
-
-    // Flag to escape ISO-8859-1 codes
-    //
-    private boolean escapeIso;
-
-    // True when we shouldn't be escaping output (basically,
-    // inside of <script> and <style> elements).   Note
-    // that this will *not* be set for CDATA blocks - that's
-    // instead the writingCdata flag
-    //
-    private boolean dontEscape;
-
-    // flag to indicate we're writing a CDATA section
-    private boolean writingCdata;
-
-    // flat to indicate the current element is CDATA
-    private boolean isCdata;
-
-    // flag to indicate that we're writing a 'script' or 'style' element
-    private boolean isScript;
-
-    // flag to indicate that we're writing a 'style' element
-    private boolean isStyle;
-
-    // flag to indicate that we're writing a 'src' attribute as part of
-    // 'script' or 'style' element
-    private boolean scriptOrStyleSrc;
-
-    // flag to indicate if this is a partial response
-    private boolean isPartial;
-
-    // flag to indicate if the content type is XHTML
-    private boolean isXhtml;
-
-    // HtmlResponseWriter to use when buffering is required
-    private Writer origWriter;
-
-    // Keep one instance of the script buffer per Writer
-    private FastStringWriter scriptBuffer;
-
-    // Keep one instance of attributesBuffer to buffer the writing
-    // of all attributes for a particular element to reduce the number
-    // of writes
-    private FastStringWriter attributesBuffer;
-    
-    // Enables hiding of inlined script and style
-    // elements from old browsers
-    private Boolean isScriptHidingEnabled;
-
-    // Enables scripts to be included in attribute values
-    private Boolean isScriptInAttributeValueEnabled;
-
-    // Internal buffer used when outputting properly escaped information
-    // using HtmlUtils class.
-    //
-    private char[] buffer = new char[1028];
-
-    // Internal buffer used when outputting properly escaped CData information.
-    //
-    private final static int cdataBufferSize = 1024;
-    private char[] cdataBuffer = new char[cdataBufferSize];
-    private int cdataBufferLength = 0;
-    // Secondary cdata buffer, used for writeText
-    private final static int cdataTextBufferSize = 128;
-    private char[] cdataTextBuffer = new char[cdataTextBufferSize];
-
-    // Internal buffer for to store the result of String.getChars() for
-    // values passed to the writer as String to reduce the overhead
-    // of String.charAt().  This buffer will be grown, if necessary, to
-    // accomodate larger values.
-    private char[] textBuffer = new char[128];
-
-    private char[] charHolder = new char[1];
-
-
-    private static final String BREAKCDATA = "]]><![CDATA[";
-    private static final char[] ESCAPEDSINGLEBRACKET = ("]"+BREAKCDATA).toCharArray();
-    private static final char[] ESCAPEDLT= ("<"+BREAKCDATA).toCharArray();
-    private static final char[] ESCAPEDSTART= ("<"+BREAKCDATA+"![").toCharArray();
-    private static final char[] ESCAPEDEND= ("]"+BREAKCDATA+"]>").toCharArray();
-
-    private static final int CLOSEBRACKET = (int)']';
-    private static final int LT = (int)'<';
-
-    static final Pattern CDATA_START_SLASH_SLASH;
-
-    static final Pattern CDATA_END_SLASH_SLASH;
-
-    static final Pattern CDATA_START_SLASH_STAR;
-
-    static final Pattern CDATA_END_SLASH_STAR;
-
-    static {
-        // At the beginning of a line, match // followed by any amount of
-        // whitespace, followed by <![CDATA[
-        CDATA_START_SLASH_SLASH = Pattern.compile("^//\\s*\\Q<![CDATA[\\E");
-
-        // At the end of a line, match // followed by any amout of whitespace,
-        // followed by ]]>
-        CDATA_END_SLASH_SLASH = Pattern.compile("//\\s*\\Q]]>\\E$");
-
-        // At the beginning of a line, match /* followed by any amout of
-        // whitespace, followed by <![CDATA[, followed by any amount of whitespace,
-        // followed by */
-        CDATA_START_SLASH_STAR = Pattern.compile("^/\\*\\s*\\Q<![CDATA[\\E\\s*\\*/");
-
-        // At the end of a line, match /* followed by any amount of whitespace,
-        // followed by ]]> followed by any amount of whitespace, followed by */
-        CDATA_END_SLASH_STAR = Pattern.compile("/\\*\\s*\\Q]]>\\E\\s*\\*/$");
-
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Constructor sets the <code>ResponseWriter</code> and
-     * encoding, and enables script hiding by default.
-     *
-     * @param writer      the <code>ResponseWriter</code>
-     * @param contentType the content type.
-     * @param encoding    the character encoding.
-     *
-     * @throws javax.faces.FacesException the encoding is not recognized.
-     */
-    public HtmlResponseWriter(Writer writer,
-                              String contentType,
-                              String encoding)
-    throws FacesException {
-        this(writer, contentType, encoding, null, null, null, false);
-    }
-
-    /**
-     * <p>Constructor sets the <code>ResponseWriter</code> and
-     * encoding.</p>
-     *
-     * <p>The argument configPrefs is a map of configurable prefs that affect
-     * this instance's behavior.  Supported keys are:</p>
-     *
-     * <p>BooleanWebContextInitParameter.EnableJSStyleHiding: <code>true</code>
-     * if the writer should attempt to hide JS from older browsers</p>
-     *
-     * @param writer      the <code>ResponseWriter</code>
-     * @param contentType the content type.
-     * @param encoding    the character encoding.
-     *
-     * @throws javax.faces.FacesException the encoding is not recognized.
-     */
-    public HtmlResponseWriter(Writer writer,
-                              String contentType,
-                              String encoding,
-                              Boolean isScriptHidingEnabled,
-                              Boolean isScriptInAttributeValueEnabled,
-                              WebConfiguration.DisableUnicodeEscaping disableUnicodeEscaping,
-                              boolean isPartial)
-    throws FacesException {
-
-        this.writer = writer;
-
-        if (null != contentType) {
-            this.contentType = contentType;
-        }
-
-        this.encoding = encoding;
-
-        // init those configuration parameters not yet initialized
-        WebConfiguration webConfig = null;
-        if (isScriptHidingEnabled == null) {
-            webConfig = getWebConfiguration(webConfig);
-            isScriptHidingEnabled = (null == webConfig) ? BooleanWebContextInitParameter.EnableJSStyleHiding.getDefaultValue() :
-                                webConfig.isOptionEnabled(
-                                BooleanWebContextInitParameter.EnableJSStyleHiding);
-        }
-
-        if (isScriptInAttributeValueEnabled == null) {
-            webConfig = getWebConfiguration(webConfig);
-            isScriptInAttributeValueEnabled = (null == webConfig) ? BooleanWebContextInitParameter.EnableScriptInAttributeValue.getDefaultValue() :
-                             webConfig.isOptionEnabled(
-                             BooleanWebContextInitParameter.EnableScriptInAttributeValue);
-        }
-
-        if (disableUnicodeEscaping == null) {
-            webConfig = getWebConfiguration(webConfig);
-            disableUnicodeEscaping =
-                    WebConfiguration.DisableUnicodeEscaping.getByValue(
-                        (null == webConfig) ? WebConfiguration.WebContextInitParameter.DisableUnicodeEscaping.getDefaultValue() :
-                                webConfig.getOptionValue(
-                                 WebConfiguration.WebContextInitParameter.DisableUnicodeEscaping));
-            if (disableUnicodeEscaping == null) {
-                disableUnicodeEscaping = WebConfiguration.DisableUnicodeEscaping.False;
-            }
-        }
-
-        // and store them for later use
-        this.isPartial = isPartial;
-        this.isScriptHidingEnabled = isScriptHidingEnabled;
-        this.isScriptInAttributeValueEnabled = isScriptInAttributeValueEnabled;
-        this.disableUnicodeEscaping = disableUnicodeEscaping;
-
-        this.attributesBuffer = new FastStringWriter(128);
-
-        // Check the character encoding
-        if (!HtmlUtils.validateEncoding(encoding)) {
-            throw new IllegalArgumentException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.ENCODING_ERROR_MESSAGE_ID));
-        }
-
-        String charsetName = encoding.toUpperCase();
-
-        switch (disableUnicodeEscaping)
-        {
-            case True:
-                // html escape noting (except the dangerous characters like "<>'" etc
-                escapeUnicode = false;
-                escapeIso = false;
-                break;
-            case False:
-                // html escape any non-ascii character
-                escapeUnicode = true;
-                escapeIso = true;
-                break;
-            case Auto:
-                // is stream capable of rendering unicode, do not escape
-                escapeUnicode = !HtmlUtils.isUTFencoding(charsetName);
-                // is stream capable of rendering unicode or iso-8859-1, do not escape
-                escapeIso = !HtmlUtils.isISO8859_1encoding(charsetName) && !HtmlUtils.isUTFencoding(charsetName);
-                break;
-        }
-    }
-
-    private WebConfiguration getWebConfiguration(WebConfiguration webConfig) {
-        if (webConfig != null)
-        {
-            return webConfig;
-        }
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (null != context) {
-            ExternalContext extContext = context.getExternalContext();
-            if (null != extContext) {
-                webConfig = WebConfiguration.getInstance(extContext);
-            }
-        }
-        return webConfig;
-    }
-
-    // -------------------------------------------------- Methods From Closeable
-
-
-    /** Methods From <code>java.io.Writer</code> */
-
-    public void close() throws IOException {
-
-        closeStartIfNecessary();
-        writer.close();
-
-    }
-
-    // -------------------------------------------------- Methods From Flushable
-
-
-    /**
-     * Flush any buffered output to the contained writer.
-     *
-     * @throws IOException if an input/output error occurs.
-     */
-    public void flush() throws IOException {
-
-        // NOTE: Internal buffer's contents (the ivar "buffer") is
-        // written to the contained writer in the HtmlUtils class - see
-        // HtmlUtils.flushBuffer method; Buffering is done during
-        // writeAttribute/writeText - otherwise, output is written
-        // directly to the writer (ex: writer.write(....)..
-        //
-        // close any previously started element, if necessary
-        closeStartIfNecessary();
-
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /** @return the content type such as "text/html" for this ResponseWriter. */
-    public String getContentType() {
-
-        return contentType;
-
-    }
-
-
-    /**
-     * <p>Create a new instance of this <code>ResponseWriter</code> using
-     * a different <code>Writer</code>.
-     *
-     * @param writer The <code>Writer</code> that will be used to create
-     *               another <code>ResponseWriter</code>.
-     */
-    public ResponseWriter cloneWithWriter(Writer writer) {
-
-        try {
-            return new HtmlResponseWriter(writer,
-                                          getContentType(),
-                                          getCharacterEncoding(),
-                                          isScriptHidingEnabled,
-                                          isScriptInAttributeValueEnabled,
-                                          disableUnicodeEscaping,
-                                          isPartial);
-        } catch (FacesException e) {
-            // This should never happen
-            throw new IllegalStateException();
-        }
-
-    }
-
-
-    /** Output the text for the end of a document. */
-    public void endDocument() throws IOException {
-
-        writer.flush();
-
-    }
-
-
-    /**
-     * <p>Write the end of an element. This method will first
-     * close any open element created by a call to
-     * <code>startElement()</code>.
-     *
-     * @param name Name of the element to be ended
-     *
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>name</code>
-     *                              is <code>null</code>
-     */
-    public void endElement(String name) throws IOException {
-
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-
-        // always turn escaping back on once an element ends
-        dontEscape = false;
-
-        isXhtml = getContentType().equals(
-            RIConstants.XHTML_CONTENT_TYPE);
-
-        if (isScriptOrStyle(name)
-             && !scriptOrStyleSrc
-             && writer instanceof FastStringWriter) {
-            String result = ((FastStringWriter) writer).getBuffer().toString();
-            writer = origWriter;
-
-            if (result != null) {
-                String trim = result.trim();
-                if (isXhtml) {
-                    if (isScript) {
-                        Matcher
-                            cdataStartSlashSlash =
-                              CDATA_START_SLASH_SLASH.matcher(trim),
-                            cdataEndSlashSlash =
-                              CDATA_END_SLASH_SLASH.matcher(trim),
-                            cdataStartSlashStar =
-                              CDATA_START_SLASH_STAR.matcher(trim),
-                            cdataEndSlashStar =
-                              CDATA_END_SLASH_STAR.matcher(trim);
-                        int trimLen = trim.length(), start, end;
-                        // case 1 start is // end is //
-                        if (cdataStartSlashSlash.find() &&
-                            cdataEndSlashSlash.find()) {
-                            start = cdataStartSlashSlash.end() - cdataStartSlashSlash.start();
-                            end = trimLen - (cdataEndSlashSlash.end() - cdataEndSlashSlash.start());
-                            writer.write(trim.substring(start, end));
-                        }
-                        // case 2 start is // end is /* */
-                        else if ((null != cdataStartSlashSlash.reset() && cdataStartSlashSlash.find()) &&
-                                 cdataEndSlashStar.find()) {
-                            start = cdataStartSlashSlash.end() - cdataStartSlashSlash.start();
-                            end = trimLen - (cdataEndSlashStar.end() - cdataEndSlashStar.start());
-                            writer.write(trim.substring(start, end));
-                        }
-                        // case 3 start is /* */ end is /* */
-                        else if (cdataStartSlashStar.find() &&
-                                 (null != cdataEndSlashStar.reset() && cdataEndSlashStar.find())) {
-                            start = cdataStartSlashStar.end() - cdataStartSlashStar.start();
-                            end = trimLen - (cdataEndSlashStar.end() - cdataEndSlashStar.start());
-                            writer.write(trim.substring(start, end));
-                        }
-                        // case 4 start is /* */ end is //
-                        else if ((null != cdataStartSlashStar.reset() && cdataStartSlashStar.find()) &&
-                                 (null != cdataEndSlashStar.reset() && cdataEndSlashSlash.find())) {
-                            start = cdataStartSlashStar.end() - cdataStartSlashStar.start();
-                            end = trimLen - (cdataEndSlashSlash.end() - cdataEndSlashSlash.start());
-                            writer.write(trim.substring(start, end));
-                        }
-                        // case 5 no commented out cdata present.
-                        else {
-                            writer.write(result);
-                        }
-                    } else {
-                        if (trim.startsWith("<![CDATA[") && trim.endsWith("]]>")) {
-                            writer.write(trim.substring(9, trim.length() - 3));
-                        } else {
-                            writer.write(result);
-                        }
-                    }
-                } else {
-                    if (trim.startsWith("<!--") && trim.endsWith("//-->")) {
-                        writer.write(trim.substring(4, trim.length() - 5));
-                    } else {
-                        writer.write(result);
-                    }
-                }
-            }
-            if (isXhtml) {
-                if (!writingCdata) {
-                    if (isScript) {
-                        writer.write("\n//]]>\n");
-                    } else {
-                        writer.write("\n]]>\n");
-                    }
-                }
-            } else {
-                if (isScriptHidingEnabled) {
-                    writer.write("\n//-->\n");
-                }
-            }
-        }
-        isScript = false;
-        isStyle = false;
-        if ("cdata".equalsIgnoreCase(name)) {
-            endCDATA();
-            return;
-        }
-        // See if we need to close the start of the last element
-        if (closeStart) {
-            boolean isEmptyElement = HtmlUtils.isEmptyElement(name);
-
-            // Tricky: we need to use the writer ivar here, rather than the
-            // one from the FacesContext because we don't want
-            // spurious /> characters to appear in the output.
-            if (isEmptyElement) {
-                flushAttributes();
-                writer.write(" />");
-                closeStart = false;
-                return;
-            }
-            flushAttributes();
-            writer.write('>');
-            closeStart = false;
-        }
-
-        writer.write("</");
-        writer.write(name);
-        writer.write('>');
-
-    }
-
-
-    /**
-     * @return the character encoding, such as "ISO-8859-1" for this
-     *         ResponseWriter.  Refer to:
-     *         <a href="http://www.iana.org/assignments/character-sets">theIANA</a>
-     *         for a list of character encodings.
-     */
-    public String getCharacterEncoding() {
-
-        return encoding;
-
-    }
-
-
-    /**
-     * <p>Write the text that should begin a response.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    public void startDocument() throws IOException {
-
-        // do nothing;
-
-    }
-
-
-    /**
-     * <p>Write the start of an element, up to and including the
-     * element name.  Clients call <code>writeAttribute()</code> or
-     * <code>writeURIAttribute()</code> methods to add attributes after
-     * calling this method.
-     *
-     * @param name                Name of the starting element
-     * @param componentForElement The UIComponent instance that applies to this
-     *                            element.  This argument may be <code>null</code>.
-     *
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>name</code>
-     *                              is <code>null</code>
-     */
-    public void startElement(String name, UIComponent componentForElement)
-          throws IOException {
-
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-        closeStartIfNecessary();
-        isScriptOrStyle(name);
-        scriptOrStyleSrc = false;
-        if ("cdata".equalsIgnoreCase(name)) {
-            isCdata = true;
-            startCDATA();
-            return;
-        } else if (writingCdata) {
-            // starting an element within a cdata section,
-            // keep escaping disabled
-            isCdata = false;
-            writingCdata = true;
-        }
-
-        writer.write('<');
-        writer.write(name);
-        closeStart = true;
-
-    }
-
-
-    /**
-     * Starts a CDATA block.  Nested blocks are not allowed.
-     *
-     * @since 2.0
-     * @throws IOException on a read/write error
-     * @throws IllegalStateException If startCDATA is called a second time before endCDATA.
-     */
-    // RELEASE_PENDING_2_1 edburns, rogerk - need to expand on this description.
-    public void startCDATA() throws IOException {
-        if (writingCdata) {
-            throw new IllegalStateException("CDATA tags may not nest");
-        }
-        closeStartIfNecessary();        
-        writingCdata = true;
-        writer.write("<![CDATA[");
-        closeStart = false;
-    }
-
-    /**
-     * Closes the CDATA block.
-     *
-     * @since 2.0
-     * @throws IOException
-     */
-    // RELEASE_PENDING_2_1 edburns, rogerk - need to expand on this description.
-    public void endCDATA() throws IOException {
-        closeStartIfNecessary();
-        writer.write("]]>");
-        writingCdata = false;
-    }
-
-    @Override
-    public void write(char[] cbuf) throws IOException {
-        closeStartIfNecessary();
-        writer.write(cbuf);
-    }
-
-    @Override
-    public void write(int c) throws IOException {
-        closeStartIfNecessary();
-        writer.write(c);
-    }
-
-    @Override
-    public void write(String str) throws IOException {
-        closeStartIfNecessary();
-        writer.write(str);
-    }
-
-    @Override
-    public void write(char[] cbuf, int off, int len) throws IOException {
-        closeStartIfNecessary();
-        writer.write(cbuf, off, len);
-    }
-
-    @Override
-    public void write(String str, int off, int len) throws IOException {
-        closeStartIfNecessary();
-        writer.write(str, off, len);
-    }
-
-
-    /**
-     * <p>Write a properly escaped attribute name and the corresponding
-     * value.  The value text will be converted to a String if
-     * necessary.  This method may only be called after a call to
-     * <code>startElement()</code>, and before the opened element has been
-     * closed.</p>
-     *
-     * @param name                  Attribute name to be added
-     * @param value                 Attribute value to be added
-     * @param componentPropertyName The name of the component property to
-     *                              which this attribute argument applies.  This argument may be
-     *                              <code>null</code>.
-     *
-     * @throws IllegalStateException if this method is called when there
-     *                               is no currently open element
-     * @throws IOException           if an input/output error occurs
-     * @throws NullPointerException  if <code>name</code> is <code>null</code>
-     */
-    public void writeAttribute(String name, Object value,
-                               String componentPropertyName)
-          throws IOException {
-
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-        if (value == null) {
-            return;
-        }
-
-        if (isCdata) {
-            return;
-        }
-
-        if (name.equalsIgnoreCase("src") && isScriptOrStyle()) {
-            scriptOrStyleSrc = true;
-        }
-
-        Class valueClass = value.getClass();
-
-        // Output Boolean values specially
-        if (valueClass == Boolean.class) {
-            if (Boolean.TRUE.equals(value)) {
-                // NOTE:  HTML 4.01 states that boolean attributes
-                //        may legally take a single value which is the
-                //        name of the attribute itself or appear using
-                //        minimization.
-                //  http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.3.4.2
-                attributesBuffer.write(' ');
-                attributesBuffer.write(name);
-                attributesBuffer.write("=\"");
-                attributesBuffer.write(name);
-                attributesBuffer.write('"');
-            }
-        } else {
-            attributesBuffer.write(' ');
-            attributesBuffer.write(name);
-            attributesBuffer.write("=\"");
-            // write the attribute value
-            String val = value.toString();
-            ensureTextBufferCapacity(val);
-            HtmlUtils.writeAttribute(attributesBuffer,
-                                     escapeUnicode,
-                                     escapeIso,
-                                     buffer,
-                                     val,
-                                     textBuffer,
-                                     isScriptInAttributeValueEnabled);
-            attributesBuffer.write('"');
-        }
-
-    }
-
-
-    /**
-     * <p>Write a comment string containing the specified text.
-     * The text will be converted to a String if necessary.
-     * If there is an open element that has been created by a call
-     * to <code>startElement()</code>, that element will be closed
-     * first.</p>
-     *
-     * @param comment Text content of the comment
-     *
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>comment</code>
-     *                              is <code>null</code>
-     */
-    public void writeComment(Object comment) throws IOException {
-
-        if (comment == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID));
-        }
-
-        if (writingCdata) {
-            return;
-        }
-
-        closeStartIfNecessary();
-        // Don't include a trailing space after the '<!--'
-        // or a leading space before the '-->' to support
-        // IE conditional commentsoth
-        writer.write("<!--");
-        writer.write(comment.toString());
-        writer.write("-->");
-
-    }
-
-
-    /**
-     * <p>Write a properly escaped single character, If there
-     * is an open element that has been created by a call to
-     * <code>startElement()</code>, that element will be closed first.</p>
-     * <p/>
-     * <p>All angle bracket occurrences in the argument must be escaped
-     * using the &gt; &lt; syntax.</p>
-     *
-     * @param text Text to be written
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    public void writeText(char text) throws IOException {
-
-        closeStartIfNecessary();
-        if (dontEscape) {
-            writer.write(text);
-        } else if (isPartial || !writingCdata) {
-            charHolder[0] = text;
-            HtmlUtils.writeText(writer, escapeUnicode, escapeIso, buffer, charHolder);
-        } else {  // if writingCdata
-            assert writingCdata;
-            charHolder[0] = text;
-            writeEscaped(charHolder, 0, 1);
-        }
-
-    }
-
-
-    /**
-     * <p>Write properly escaped text from a character array.
-     * The output from this command is identical to the invocation:
-     * <code>writeText(c, 0, c.length)</code>.
-     * If there is an open element that has been created by a call to
-     * <code>startElement()</code>, that element will be closed first.</p>
-     * </p>
-     * <p/>
-     * <p>All angle bracket occurrences in the argument must be escaped
-     * using the &gt; &lt; syntax.</p>
-     *
-     * @param text Text to be written
-     *
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>text</code>
-     *                              is <code>null</code>
-     */
-    public void writeText(char text[]) throws IOException {
-
-        if (text == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
-        }
-        closeStartIfNecessary();
-
-        if (dontEscape) {
-            writer.write(text);
-        } else if (isPartial || !writingCdata) {
-            HtmlUtils.writeText(writer, escapeUnicode, escapeIso, buffer, text);
-        } else { // if writingCdata
-            assert writingCdata;
-            writeEscaped(text, 0, text.length);
-        }
-
-    }
-
-
-    /**
-     * <p>Write a properly escaped object. The object will be converted
-     * to a String if necessary.  If there is an open element
-     * that has been created by a call to <code>startElement()</code>,
-     * that element will be closed first.</p>
-     *
-     * @param text                  Text to be written
-     * @param componentPropertyName The name of the component property to
-     *                              which this text argument applies.  This argument may be <code>null</code>.
-     *
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>text</code>
-     *                              is <code>null</code>
-     */
-    public void writeText(Object text, String componentPropertyName)
-          throws IOException {
-
-        if (text == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
-        }
-        closeStartIfNecessary();
-        String textStr = text.toString();
-
-        if (dontEscape) {
-            writer.write(textStr);
-        } else if (isPartial || !writingCdata) {
-            ensureTextBufferCapacity(textStr);
-            HtmlUtils.writeText(writer,
-                                escapeUnicode,
-                                escapeIso,
-                                buffer,
-                                textStr,
-                                textBuffer);
-        } else { // if writingCdata
-            assert writingCdata;
-            int textLen = textStr.length();
-            if (textLen > cdataTextBufferSize) {
-                writeEscaped(textStr.toCharArray(), 0, textLen);
-            } else if (textLen >= 16) { // >16, < cdataTextBufferSize
-                textStr.getChars(0, textLen, cdataTextBuffer, 0);
-                writeEscaped(cdataTextBuffer, 0, textLen);
-            } else { // <16
-                for (int i=0; i < textLen;  i++)  {
-                    cdataTextBuffer[i] = textStr.charAt(i);
-                }
-                writeEscaped(cdataTextBuffer, 0, textLen);
-            }
-        }
-    }
-
-
-    /**
-     * <p>Write properly escaped text from a character array.
-     * If there is an open element that has been created by a call
-     * to <code>startElement()</code>, that element will be closed
-     * first.</p>
-     * <p/>
-     * <p>All angle bracket occurrences in the argument must be escaped
-     * using the &gt; &lt; syntax.</p>
-     *
-     * @param text Text to be written
-     * @param off  Starting offset (zero-relative)
-     * @param len  Number of characters to be written
-     *
-     * @throws IndexOutOfBoundsException if the calculated starting or
-     *                                   ending position is outside the bounds of the character array
-     * @throws IOException               if an input/output error occurs
-     * @throws NullPointerException      if <code>text</code>
-     *                                   is <code>null</code>
-     */
-    public void writeText(char text[], int off, int len)
-          throws IOException {
-
-        if (text == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
-        }
-        if (off < 0 || off > text.length || len < 0 || len > text.length) {
-            throw new IndexOutOfBoundsException();
-        }
-        closeStartIfNecessary();
-
-        // optimize away zero length write, called by Facelets to close tags
-        if (len == 0) return;
-
-        if (dontEscape) {
-            writer.write(text, off, len);
-        } else if (isPartial || !writingCdata) {
-            HtmlUtils.writeText(writer, escapeUnicode, escapeIso, buffer, text, off, len);
-        } else { // if (writingCdata)
-            assert writingCdata;
-            writeEscaped(text, off, len);
-        }
-
-    }
-
-
-    /**
-     * <p>Write a properly encoded URI attribute name and the corresponding
-     * value. The value text will be converted to a String if necessary).
-     * This method may only be called after a call to
-     * <code>startElement()</code>, and before the opened element has been
-     * closed.</p>
-     *
-     * @param name                  Attribute name to be added
-     * @param value                 Attribute value to be added
-     * @param componentPropertyName The name of the component property to
-     *                              which this attribute argument applies.  This argument may be
-     *                              <code>null</code>.
-     *
-     * @throws IllegalStateException if this method is called when there
-     *                               is no currently open element
-     * @throws IOException           if an input/output error occurs
-     * @throws NullPointerException  if <code>name</code> or
-     *                               <code>value</code> is <code>null</code>
-     */
-    public void writeURIAttribute(String name, Object value,
-                                  String componentPropertyName)
-          throws IOException {
-
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-        if (value == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "value"));
-        }
-
-        if (isCdata) {
-            return;
-        }
-
-        if (name.equalsIgnoreCase("src") && isScriptOrStyle()) {
-            scriptOrStyleSrc = true;
-        }
-
-        attributesBuffer.write(' ');
-        attributesBuffer.write(name);
-        attributesBuffer.write("=\"");
-
-        String stringValue = value.toString();
-        ensureTextBufferCapacity(stringValue);
-        // Javascript URLs should not be URL-encoded
-        if (stringValue.startsWith("javascript:")) {
-            HtmlUtils.writeAttribute(attributesBuffer,
-                                     escapeUnicode,
-                                     escapeIso,
-                                     buffer,
-                                     stringValue,
-                                     textBuffer,
-                                     isScriptInAttributeValueEnabled);
-        } else {
-            HtmlUtils.writeURL(attributesBuffer,
-                               stringValue,
-                               textBuffer,
-                               encoding);
-        }
-
-        attributesBuffer.write('"');
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    private void ensureTextBufferCapacity(String source) {
-        int len = source.length();
-        if (textBuffer.length < len) {
-            textBuffer = new char[len * 2];
-        }
-    }
-
-    /**
-     * This method automatically closes a previous element (if not
-     * already closed).
-     * @throws IOException if an error occurs writing
-     */
-    private void closeStartIfNecessary() throws IOException {
-
-        if (closeStart) {
-            flushAttributes();
-            writer.write('>');
-            closeStart = false;
-            if (isScriptOrStyle() && !scriptOrStyleSrc) {
-                isXhtml = getContentType().equals(
-                     RIConstants.XHTML_CONTENT_TYPE);
-                if (isXhtml) {
-                    if (!writingCdata) {
-                        if (isScript) {
-                            writer.write("\n//<![CDATA[\n");
-                        } else {
-                            writer.write("\n<![CDATA[\n");
-                        }
-                    }
-                } else {
-                    if (isScriptHidingEnabled) {
-                        writer.write("\n<!--\n");
-                    }
-                }
-                origWriter = writer;
-                if (scriptBuffer == null) {
-                    scriptBuffer = new FastStringWriter(1024);
-                }
-                scriptBuffer.reset();
-                writer = scriptBuffer;
-                isScript = false;
-                isStyle = false;
-            }
-        }
-
-    }
-
-
-    private void flushAttributes() throws IOException {
-
-        // a little complex, but the end result is, potentially, two
-        // fewer temp objects created per call.
-        StringBuilder b = attributesBuffer.getBuffer();
-        int totalLength = b.length();
-        if (totalLength != 0) {
-            int curIdx = 0;
-            while (curIdx < totalLength) {
-                if ((totalLength - curIdx) > buffer.length) {
-                    int end = curIdx + buffer.length;
-                    b.getChars(curIdx, end, buffer, 0);
-                    writer.write(buffer);
-                    curIdx += buffer.length;
-                } else {
-                    int len = totalLength - curIdx;
-                    b.getChars(curIdx, curIdx + len, buffer, 0);
-                    writer.write(buffer, 0, len);
-                    curIdx += len;
-                }
-            }
-            attributesBuffer.reset();
-        }
-
-    }
-
-
-    private boolean isScriptOrStyle(String name) {
-        if ("script".equalsIgnoreCase(name)) {
-            isScript = true;
-            dontEscape = true;
-        } else if ("style".equalsIgnoreCase(name)) {
-            isStyle = true;
-            dontEscape = true;
-        } else {
-            isScript = false;
-            isStyle = false;
-            dontEscape = false;
-        }
-
-        return (isScript || isStyle);
-    }
-
-    private boolean isScriptOrStyle() {
-        return (isScript || isStyle);
-    }
-
-/*
- *  Method to escape all CDATA instances in a character array, then write to writer.
- *
- * This method looks for occurrences of "<![" and "]]>"
- */
-private void writeEscaped(char cbuf[], int offset, int length) throws IOException {
-    if (cbuf == null || cbuf.length == 0 || length == 0) {
-        return;
-    }
-
-   if (offset < 0 || length < 0 || offset + length > cbuf.length ) {
-        throw new IndexOutOfBoundsException("off < 0 || len < 0 || off + len > cbuf.length");
-   }
-
-    // Single char case
-    if (length == 1) {
-        if (cbuf[offset] == '<') {
-            appendBuffer(ESCAPEDLT);
-        } else if (cbuf[offset] == ']') {
-            appendBuffer(ESCAPEDSINGLEBRACKET);
-        } else {
-            appendBuffer(cbuf[offset]);
-        }
-        flushBuffer();
-        return;
-    }
-    // two char case
-    if (length == 2) {
-        if (cbuf[offset] == '<' && cbuf[offset + 1] == '!') {
-            appendBuffer(ESCAPEDLT);
-            appendBuffer(cbuf[offset + 1]);
-        } else if (cbuf[offset] == ']' && cbuf[offset + 1] == ']') {
-            appendBuffer(ESCAPEDSINGLEBRACKET);
-            appendBuffer(ESCAPEDSINGLEBRACKET);
-        } else {
-            appendBuffer(cbuf[offset]);
-            appendBuffer(cbuf[offset + 1]);
-        }
-        flushBuffer();
-        return;
-    }
-    // > 2 char case
-    boolean last = false;
-    for (int i = offset; i < length - 2; i++) {
-        if (cbuf[i] == '<' && cbuf[i + 1] == '!' && cbuf[i + 2] == '[') {
-            appendBuffer(ESCAPEDSTART);
-            i += 2;
-        } else if (cbuf[i] == ']' && cbuf[i + 1] == ']' && cbuf[i + 2] == '>') {
-            appendBuffer(ESCAPEDEND);
-            i += 2;
-        } else {
-            appendBuffer(cbuf[i]);
-        }
-        if (i == (offset + length - 1)) {
-            last = true;
-        }
-    }
-    // if we didn't look at the last characters, look at them now
-    if (!last) {
-        if (cbuf[offset + length - 2] == '<') {
-            appendBuffer(ESCAPEDLT);
-        } else if (cbuf[offset + length - 2] == ']') {
-            appendBuffer(ESCAPEDSINGLEBRACKET);
-        } else {
-            appendBuffer(cbuf[offset + length - 2]);
-        }
-        if (cbuf[offset + length - 1] == '<') {
-            appendBuffer(ESCAPEDLT);
-        } else if (cbuf[offset + length - 1] == ']') {
-            appendBuffer(ESCAPEDSINGLEBRACKET);
-        } else {
-            appendBuffer(cbuf[offset + length - 1]);
-        }
-    }
-    flushBuffer();
-}
-
-/*
- *  append a character array to the cdatabuffer
- */
-private void appendBuffer(char[] cbuf) throws IOException {
-    if (cbuf.length + cdataBufferLength >= cdataBufferSize) {
-        flushBuffer();
-    }
-    if (cbuf.length >= cdataBufferSize) {  // bigger than the buffer, direct write
-        writer.write(cbuf);
-    }
-    System.arraycopy(cbuf, 0, cdataBuffer, cdataBufferLength, cbuf.length);
-    cdataBufferLength = cdataBufferLength + cbuf.length;
-}
-/*
- * append a character to the cdatabuffer
- */
-private void appendBuffer(char c) throws IOException {
-    if (cdataBufferLength + 1 >= cdataBufferSize) {
-        flushBuffer();
-    }
-    cdataBuffer[cdataBufferLength] = c;
-    cdataBufferLength++;
-}
-
-/*
- * flush the cdatabuffer to the writer
- */
-private void flushBuffer() throws IOException {
-    if (cdataBufferLength == 0) {
-        return;
-    }
-    writer.write(cdataBuffer, 0, cdataBufferLength);
-    cdataBufferLength = 0;
-}
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ImageRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ImageRenderer.java
deleted file mode 100644
index 4587ac8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ImageRenderer.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ImageRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.logging.Level;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/**
- * <B>ImageRenderer</B> is a class that handles the rendering of the graphic
- * ImageTag
- *
- */
-
-public class ImageRenderer extends HtmlBasicRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.GRAPHICIMAGE);
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        writer.startElement("img", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        writer.writeURIAttribute("src", RenderKitUtils.getImageSource(context, component, "value"), "value");
-        // if we're writing XHTML and we have a null alt attribute
-        if (writer.getContentType().equals(RIConstants.XHTML_CONTENT_TYPE) &&
-            null == component.getAttributes().get("alt")) {
-            // write out an empty alt
-            writer.writeAttribute("alt", "", "alt");
-        }
-
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES);
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-        String styleClass;
-        if (null != (styleClass = (String)
-              component.getAttributes().get("styleClass"))) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        writer.endElement("img");
-        if (logger.isLoggable(Level.FINER)) {
-            logger.log(Level.FINER,
-                       "End encoding component " + component.getId());
-        }
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    // The testcase for this class is TestRenderers_2.java
-
-} // end of class ImageRenderer
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/LabelRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/LabelRenderer.java
deleted file mode 100644
index d9858da..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/LabelRenderer.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// LabelRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.logging.Level;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/** <p><B>LabelRenderer</B> renders Label element.<p>. */
-public class LabelRenderer extends HtmlBasicInputRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTLABEL);
-
-
-    private static final String RENDER_END_ELEMENT =
-          "com.sun.faces.RENDER_END_ELEMENT";
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String forClientId = null;
-        String forValue = (String) component.getAttributes().get("for");
-        if (forValue != null) {
-            forValue = augmentIdReference(forValue, component);
-            UIComponent forComponent = getForComponent(context, forValue, component);
-            if (forComponent == null) {
-                // it could that the component hasn't been created yet. So
-                // construct the clientId for component.
-                forClientId = getForComponentClientId(component, context,
-                                                      forValue);
-            } else {
-                forClientId = forComponent.getClientId(context);
-            }
-        }
-
-        // set a temporary attribute on the component to indicate that
-        // label end element needs to be rendered.
-        component.getAttributes().put(RENDER_END_ELEMENT, "yes");
-        writer.startElement("label", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        if (forClientId != null) {
-            writer.writeAttribute("for", forClientId, "for");
-        }
-
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES);
-        String styleClass = (String)
-            component.getAttributes().get("styleClass");
-        if (null != styleClass) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        writer.writeText("\n", component, null);
-
-        // render the curentValue as label text if specified.
-        String value = getCurrentValue(context, component);
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("Value to be rendered " + value);
-        }
-        if (value != null && value.length() != 0) {
-            Object val = component.getAttributes().get("escape");
-            boolean escape = (val != null) && Boolean.valueOf(val.toString());
-
-            if (escape) {
-                writer.writeText(value, component, "value");
-            } else {
-                writer.write(value);
-            }
-        }
-        writer.flush();
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        // render label end element if RENDER_END_ELEMENT is set.
-        String render = (String) component.getAttributes().get(
-              RENDER_END_ELEMENT);
-        if ("yes".equals(render)) {
-            component.getAttributes().remove(RENDER_END_ELEMENT);
-            ResponseWriter writer = context.getResponseWriter();
-            assert(writer != null);
-            writer.endElement("label");
-        }
-
-    }
-
-    // ------------------------------------------------------- Private Methods
-
-
-    /**
-     * Builds and returns the clientId of the component that is
-     * represented by the forValue. Since the component has not been created
-     * yet, invoking <code>getClientId(context)</code> is not possible.
-     *
-     * @param component UIComponent that represents the label
-     * @param context   FacesContext for this request
-     * @param forValue  String representing the "id" of the component
-     *                  that this label represents.
-     *
-     * @return String clientId of the component represented by the forValue.
-     */
-    protected String getForComponentClientId(UIComponent component,
-                                             FacesContext context,
-                                             String forValue) {
-
-        String result = null;
-        // ASSUMPTION: The component for which this acts as the label
-        // as well ths label component are part of the same form.
-        // locate the nearest NamingContainer and get its clientId.
-        UIComponent parent = component.getParent();
-        while (parent != null) {
-            if (parent instanceof NamingContainer) {
-                break;
-            }
-            parent = parent.getParent();
-        }
-        if (parent == null) {
-            return result;
-        }
-        String parentClientId = parent.getClientId(context);
-        // prepend the clientId of the nearest container to the forValue.
-        result = parentClientId + UINamingContainer.getSeparatorChar(context) + forValue;
-        return result;
-
-    }
-
-    // The testcase for this class is TestRenderResponsePhase.java
-
-} // end of class LabelRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/LinkRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/LinkRenderer.java
deleted file mode 100644
index 0784942..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/LinkRenderer.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// LinkRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.logging.Level;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-
-/**
- * <B>LinkRenderer</B> acts as superclass for CommandLinkRenderer and
- * OutputLinkRenderer.
- */
-
-public abstract class LinkRenderer extends HtmlBasicRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.COMMANDLINK);
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected abstract void renderAsActive(FacesContext context,
-                                           UIComponent component)
-          throws IOException;
-
-
-    protected void renderAsDisabled(FacesContext context, UIComponent component)
-          throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        writer.startElement("span", component);
-        String writtenId =
-              writeIdAttributeIfNecessary(context, writer, component);
-        if (null != writtenId) {
-            writer.writeAttribute("name", writtenId, "name");
-        }
-
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES);
-
-        writeCommonLinkAttributes(writer, component);
-        writeValue(component, writer);
-        writer.flush();
-
-    }
-
-
-    protected void writeCommonLinkAttributes(ResponseWriter writer,
-                                             UIComponent component)
-          throws IOException {
-
-        // handle styleClass
-        String styleClass = (String)
-              component.getAttributes().get("styleClass");
-        if (styleClass != null) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-
-    }
-
-
-    protected void writeValue(UIComponent component, ResponseWriter writer)
-          throws IOException {
-
-        Object v = getValue(component);
-        String label = null;
-        if (v != null) {
-            label = v.toString();
-        }        
-
-        if (label != null && label.length() != 0) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("Value to be rendered " + label);
-            }
-            writer.writeText(label, component, null);
-        }
-
-    }
-
-} // end of class LinkRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ListboxRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ListboxRenderer.java
deleted file mode 100644
index f3beee1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ListboxRenderer.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * (C) Copyright International Business Machines Corp., 2001,2002
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U. S. Copyright Office.   
- */
-
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-
-import javax.faces.context.ResponseWriter;
-
-/**
- * <B>ListRenderer</B> is a class that renders the current value of
- * <code>UISelectOne<code> or <code>UISelectMany<code> component as a list of
- * options.
- */
-
-public class ListboxRenderer extends MenuRenderer {
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected void writeDefaultSize(ResponseWriter writer, int itemCount)
-          throws IOException {
-
-        // If size not specified, default to number of items
-        writer.writeAttribute("size", itemCount, "size");
-
-    }
-
-} // end of class ListboxRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MenuRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MenuRenderer.java
deleted file mode 100644
index 3b122d4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MenuRenderer.java
+++ /dev/null
@@ -1,1035 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * (C) Copyright International Business Machines Corp., 2001,2002
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U. S. Copyright Office.
- */
-
-// MenuRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.Queue;
-import java.util.LinkedList;
-import java.util.logging.Level;
-
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UISelectOne;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-import javax.faces.FacesException;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.io.FastStringWriter;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-import com.sun.faces.util.ReflectionUtils;
-
-/**
- * <B>MenuRenderer</B> is a class that renders the current value of
- * <code>UISelectOne<code> or <code>UISelectMany<code> component as a list of
- * menu options.
- */
-
-public class MenuRenderer extends HtmlBasicInputRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.SELECTMANYMENU);
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public Object convertSelectManyValue(FacesContext context,
-                                         UISelectMany uiSelectMany,
-                                         String[] newValues)
-          throws ConverterException {
-
-        // if we have no local value, try to get the valueExpression.
-        ValueExpression valueExpression =
-              uiSelectMany.getValueExpression("value");
-
-        Object result = newValues; // default case, set local value
-        boolean throwException = false;
-
-        // If we have a ValueExpression
-        if (null != valueExpression) {
-            Class modelType = valueExpression.getType(context.getELContext());
-            // Does the valueExpression resolve properly to something with
-            // a type?
-            if (modelType != null) {
-                result = convertSelectManyValuesForModel(context,
-                                                         uiSelectMany,
-                                                         modelType,
-                                                         newValues);
-            }
-            // If it could not be converted, as a fall back try the type of
-            // the valueExpression's current value covering some edge cases such
-            // as where the current value came from a Map.
-            if(result == null) {
-                Object value = valueExpression.getValue(context.getELContext());
-                if(value != null) {
-                    result = convertSelectManyValuesForModel(context,
-                                                             uiSelectMany,
-                                                             value.getClass(),
-                                                             newValues);
-                }
-            }
-            if(result == null) {
-                throwException = true;
-            }
-        } else {
-            // No ValueExpression, just use Object array.
-            result = convertSelectManyValues(context, uiSelectMany,
-                                             Object[].class,
-                                             newValues);
-        }
-        if (throwException) {
-            StringBuffer values = new StringBuffer();
-            if (null != newValues) {
-                for (int i = 0; i < newValues.length; i++) {
-                    if (i == 0) {
-                        values.append(newValues[i]);
-                    } else {
-                        values.append(' ').append(newValues[i]);
-                    }
-                }
-            }
-            Object[] params = {
-                  values.toString(),
-                  valueExpression.getExpressionString()
-            };
-            throw new ConverterException
-                  (MessageUtils.getExceptionMessage(MessageUtils.CONVERSION_ERROR_MESSAGE_ID,
-                                                    params));
-        }
-
-        // At this point, result is ready to be set as the value
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("SelectMany Component  " + uiSelectMany.getId() +
-                        " convertedValues " + result);
-        }
-        return result;
-
-    }
-
-
-    public Object convertSelectOneValue(FacesContext context,
-                                        UISelectOne uiSelectOne,
-                                        String newValue)
-          throws ConverterException {
-
-        if (RIConstants.NO_VALUE.equals(newValue)) {
-            return null;
-        }
-        if (newValue == null) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("No conversion necessary for SelectOne Component  "
-                            + uiSelectOne.getId()
-                            + " since the new value is null ");
-            }
-            return null;
-        }
-
-        Object convertedValue =
-              super.getConvertedValue(context, uiSelectOne, newValue);
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("SelectOne Component  " + uiSelectOne.getId() +
-                        " convertedValue " + convertedValue);
-        }
-        return convertedValue;
-
-    }
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldDecode(component)) {
-            return;
-        }
-
-        String clientId = decodeBehaviors(context, component);
-
-        if (clientId == null) {
-            clientId = component.getClientId(context);
-        }
-        assert(clientId != null);
-        // currently we assume the model type to be of type string or
-        // convertible to string and localized by the application.
-        if (component instanceof UISelectMany) {
-            Map<String, String[]> requestParameterValuesMap =
-                  context.getExternalContext().
-                        getRequestParameterValuesMap();
-            if (requestParameterValuesMap.containsKey(clientId)) {
-                String newValues[] = requestParameterValuesMap.
-                      get(clientId);
-                setSubmittedValue(component, newValues);
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.fine("submitted values for UISelectMany component "
-                                +
-                                component.getId()
-                                + " after decoding "
-                                + Arrays.toString(newValues));
-                }
-            } else {
-                // Use the empty array, not null, to distinguish
-                // between an deselected UISelectMany and a disabled one
-                setSubmittedValue(component, new String[0]);
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.fine("Set empty array for UISelectMany component " +
-                                component.getId() + " after decoding ");
-                }
-            }
-        } else {
-            // this is a UISelectOne
-            Map<String, String> requestParameterMap =
-                  context.getExternalContext().
-                        getRequestParameterMap();
-            if (requestParameterMap.containsKey(clientId)) {
-                String newValue = requestParameterMap.get(clientId);
-                setSubmittedValue(component, newValue);
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.fine("submitted value for UISelectOne component "
-                                +
-                                component.getId()
-                                + " after decoding "
-                                + newValue);
-                }
-
-            } else {
-                // there is no value, but this is different from a null
-                // value.
-                setSubmittedValue(component, RIConstants.NO_VALUE);
-            }
-        }
-
-    }
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        renderSelect(context, component);
-
-    }
-
-
-    @Override
-    public Object getConvertedValue(FacesContext context, UIComponent component,
-                                    Object submittedValue)
-          throws ConverterException {
-
-        if (component instanceof UISelectMany) {
-            // need to set the 'TARGET_COMPONENT_ATTRIBUTE_NAME' request attr so the
-            // coerce-value call in the jsf-api UISelectMany.matchValue will work
-            // (need a better way to determine the currently processing UIComponent ...)
-            RequestStateManager.set(context,
-                                    RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
-                                    component);
-            return convertSelectManyValue(context,
-                                          ((UISelectMany) component),
-                                          (String[]) submittedValue);
-        } else {
-            return convertSelectOneValue(context,
-                                         ((UISelectOne) component),
-                                         (String) submittedValue);
-        }
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /*
-     * Converts the provided string array and places them into the correct provided model type.
-     */
-    protected Object convertSelectManyValuesForModel(FacesContext context,
-                                                     UISelectMany uiSelectMany,
-                                                     Class modelType,
-                                                     String[] newValues) {
-
-        if (modelType.isArray()) {
-            return convertSelectManyValues(context,
-                                           uiSelectMany,
-                                           modelType,
-                                           newValues);
-        } else if (Collection.class.isAssignableFrom(modelType)) {
-            Object[] values = (Object[]) convertSelectManyValues(context,
-                                                                 uiSelectMany,
-                                                                 Object[].class,
-                                                                 newValues);
-
-            Collection targetCollection = null;
-
-            // see if the collectionType hint is available, if so, use that
-            Object collectionTypeHint = uiSelectMany.getAttributes().get("collectionType");
-            if (collectionTypeHint != null) {
-                targetCollection = createCollectionFromHint(collectionTypeHint);
-            } else {
-                // try to get a new Collection to store the values based
-                // by trying to create a clone
-                Collection currentValue = (Collection) uiSelectMany.getValue();
-                if (currentValue != null) {
-                    targetCollection = cloneValue(currentValue);
-                }
-
-                // No cloned instance so if the modelType happens to represent a
-                // concrete type (probably not the norm) try to reflect a
-                // no-argument constructor and invoke if available.
-                if (targetCollection == null) {
-                    //noinspection unchecked
-                    targetCollection =
-                          createCollection(currentValue, modelType);
-                }
-
-                // No suitable instance to work with, make our best guess
-                // based on the type.
-                if (targetCollection == null) {
-                    //noinspection unchecked
-                    targetCollection = bestGuess(modelType, values.length);
-                }
-            }
-
-            //noinspection ManualArrayToCollectionCopy
-            for (Object v : values) {
-                //noinspection unchecked
-                targetCollection.add(v);
-            }
-
-            return targetCollection;
-        } else if (Object.class.equals(modelType)) {
-            return convertSelectManyValues(context,
-                                           uiSelectMany,
-                                           Object[].class,
-                                           newValues);
-        } else {
-            throw new FacesException("Target model Type is no a Collection or Array");
-        }
-        
-    }
-
-
-
-
-    protected Object convertSelectManyValues(FacesContext context,
-                                             UISelectMany uiSelectMany,
-                                             Class arrayClass,
-                                             String[] newValues)
-          throws ConverterException {
-
-        Object result;
-        Converter converter;
-        int len = (null != newValues ? newValues.length : 0);
-
-        Class elementType = arrayClass.getComponentType();
-
-        // Optimization: If the elementType is String, we don't need
-        // conversion.  Just return newValues.
-        if (elementType.equals(String.class)) {
-            return newValues;
-        }
-
-        try {
-            result = Array.newInstance(elementType, len);
-        } catch (Exception e) {
-            throw new ConverterException(e);
-        }
-
-        // bail out now if we have no new values, returning our
-        // oh-so-useful zero-length array.
-        if (null == newValues) {
-            return result;
-        }
-
-        // obtain a converter.
-
-        // attached converter takes priority
-        if (null == (converter = uiSelectMany.getConverter())) {
-            // Otherwise, look for a by-type converter
-            if (null == (converter = Util.getConverterForClass(elementType,
-                                                               context))) {
-                // if that fails, and the attached values are of Object type,
-                // we don't need conversion.
-                if (elementType.equals(Object.class)) {
-                    return newValues;
-                }
-                StringBuffer valueStr = new StringBuffer();
-                for (int i = 0; i < len; i++) {
-                    if (i == 0) {
-                        valueStr.append(newValues[i]);
-                    } else {
-                        valueStr.append(' ').append(newValues[i]);
-                    }
-                }
-                Object[] params = {
-                      valueStr.toString(),
-                      "null Converter"
-                };
-
-                throw new ConverterException(MessageUtils.getExceptionMessage(
-                      MessageUtils.CONVERSION_ERROR_MESSAGE_ID, params));
-            }
-        }
-
-        assert(null != result);
-        if (elementType.isPrimitive()) {
-            for (int i = 0; i < len; i++) {
-                if (elementType.equals(Boolean.TYPE)) {
-                    Array.setBoolean(result, i,
-                                     ((Boolean) converter.getAsObject(context,
-                                                                      uiSelectMany,
-                                                                      newValues[i])));
-                } else if (elementType.equals(Byte.TYPE)) {
-                    Array.setByte(result, i,
-                                  ((Byte) converter.getAsObject(context,
-                                                                uiSelectMany,
-                                                                newValues[i])));
-                } else if (elementType.equals(Double.TYPE)) {
-                    Array.setDouble(result, i,
-                                    ((Double) converter.getAsObject(context,
-                                                                    uiSelectMany,
-                                                                    newValues[i])));
-                } else if (elementType.equals(Float.TYPE)) {
-                    Array.setFloat(result, i,
-                                   ((Float) converter.getAsObject(context,
-                                                                  uiSelectMany,
-                                                                  newValues[i])));
-                } else if (elementType.equals(Integer.TYPE)) {
-                    Array.setInt(result, i,
-                                 ((Integer) converter.getAsObject(context,
-                                                                  uiSelectMany,
-                                                                  newValues[i])));
-                } else if (elementType.equals(Character.TYPE)) {
-                    Array.setChar(result, i,
-                                  ((Character) converter.getAsObject(context,
-                                                                     uiSelectMany,
-                                                                     newValues[i])));
-                } else if (elementType.equals(Short.TYPE)) {
-                    Array.setShort(result, i,
-                                   ((Short) converter.getAsObject(context,
-                                                                  uiSelectMany,
-                                                                  newValues[i])));
-                } else if (elementType.equals(Long.TYPE)) {
-                    Array.setLong(result, i,
-                                  ((Long) converter.getAsObject(context,
-                                                                uiSelectMany,
-                                                                newValues[i])));
-                }
-            }
-        } else {
-            for (int i = 0; i < len; i++) {
-                if (logger.isLoggable(Level.FINE)) {
-                    Object converted = converter.getAsObject(context,
-                                                             uiSelectMany,
-                                                             newValues[i]);
-                    logger.fine("String value: " + newValues[i] +
-                                " converts to : " + converted);
-                }
-                Array.set(result, i, converter.getAsObject(context,
-                                                           uiSelectMany,
-                                                           newValues[i]));
-            }
-        }
-        return result;
-
-    }
-
-
-    protected boolean renderOption(FacesContext context,
-                                   UIComponent component,
-                                   Converter converter,
-                                   SelectItem curItem,
-                                   Object currentSelections,
-                                   Object[] submittedValues,
-                                   OptionComponentInfo optionInfo) throws IOException {
-
-        Object valuesArray;
-        Object itemValue;
-        String valueString = getFormattedValue(context, component,
-                                               curItem.getValue(), converter);
-        boolean containsValue;
-        if (submittedValues != null) {
-            containsValue = containsaValue(submittedValues);
-            if (containsValue) {
-                valuesArray = submittedValues;
-                itemValue = valueString;
-            } else {
-                valuesArray = currentSelections;
-                itemValue = curItem.getValue();
-            }
-        } else {
-            valuesArray = currentSelections;
-            itemValue = curItem.getValue();
-        }
-
-        boolean isSelected = isSelected(context, component, itemValue, valuesArray, converter);
-        if (optionInfo.isHideNoSelection()
-                && curItem.isNoSelectionOption()
-                && currentSelections != null
-                && !isSelected) {
-            return false;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert (writer != null);
-        writer.writeText("\t", component, null);
-        writer.startElement("option", component);
-        writer.writeAttribute("value", valueString, "value");
-
-        if (isSelected) {
-            writer.writeAttribute("selected", true, "selected");
-        }
-
-        // if the component is disabled, "disabled" attribute would be rendered
-        // on "select" tag, so don't render "disabled" on every option.
-        if ((!optionInfo.isDisabled()) && curItem.isDisabled()) {
-            writer.writeAttribute("disabled", true, "disabled");
-        }
-
-        String labelClass;
-        if (optionInfo.isDisabled() || curItem.isDisabled()) {
-            labelClass = optionInfo.getDisabledClass();
-        } else {
-            labelClass = optionInfo.getEnabledClass();
-        }
-        if (labelClass != null) {
-            writer.writeAttribute("class", labelClass, "labelClass");
-        }
-
-        if (curItem.isEscape()) {
-            String label = curItem.getLabel();
-            if (label == null) {
-                label = valueString;
-            }
-            writer.writeText(label, component, "label");
-        } else {
-            writer.write(curItem.getLabel());
-        }
-        writer.endElement("option");
-        writer.writeText("\n", component, null);
-        return true;
-    }
-
-
-    protected void writeDefaultSize(ResponseWriter writer, int itemCount)
-          throws IOException {
-
-        // if size is not specified default to 1.
-        writer.writeAttribute("size", "1", "size");
-
-    }
-
-
-    protected boolean containsaValue(Object valueArray) {
-
-        if (null != valueArray) {
-            int len = Array.getLength(valueArray);
-            for (int i = 0; i < len; i++) {
-                Object value = Array.get(valueArray, i);
-                if (value != null && !(value.equals(RIConstants.NO_VALUE))) {
-                    return true;
-                }
-            }
-        }
-        return false;
-
-    }
-
-
-    protected Object getCurrentSelectedValues(UIComponent component) {
-
-        if (component instanceof UISelectMany) {
-            UISelectMany select = (UISelectMany) component;
-            Object value = select.getValue();
-            if (value == null) {
-                return null;
-            } else if (value instanceof Collection) {
-                return ((Collection) value).toArray();
-            } else if (value.getClass().isArray()) {
-                if (Array.getLength(value) == 0) {
-                    return null;
-                }
-            } else if (!value.getClass().isArray()) {
-                logger.warning(
-                    "The UISelectMany value should be an array or a collection type, the actual type is " +
-                    value.getClass().getName());
-            }
-
-            return value;
-        }
-
-        UISelectOne select = (UISelectOne) component;
-        Object val = select.getValue();
-        if (val != null) {
-            return new Object[] { val };
-        }
-        return null;
-
-    }
-
-
-    // To derive a selectOne type component from this, override
-    // these methods.
-    protected String getMultipleText(UIComponent component) {
-
-        if (component instanceof UISelectMany) {
-            return " multiple ";
-        }
-        return "";
-
-    }
-
-    protected Object[] getSubmittedSelectedValues(UIComponent component) {
-
-        if (component instanceof UISelectMany) {
-            UISelectMany select = (UISelectMany) component;
-            return (Object[]) select.getSubmittedValue();
-        }
-
-        UISelectOne select = (UISelectOne) component;
-        Object val = select.getSubmittedValue();
-        if (val != null) {
-            return new Object[] { val };
-        }
-        return null;
-
-    }
-
-
-    protected boolean isSelected(FacesContext context,
-                                 UIComponent component,
-                                 Object itemValue,
-                                 Object valueArray,
-                                 Converter converter) {
-
-        if (itemValue == null && valueArray == null) {
-            return true;
-        }
-        if (null != valueArray) {
-            if (!valueArray.getClass().isArray()) {
-                logger.warning("valueArray is not an array, the actual type is " +
-                    valueArray.getClass());
-                return valueArray.equals(itemValue);
-            }
-            int len = Array.getLength(valueArray);
-            for (int i = 0; i < len; i++) {
-                Object value = Array.get(valueArray, i);
-                if (value == null && itemValue == null) {
-                    return true;
-                } else {
-                    if ((value == null) ^ (itemValue == null)) {
-                        continue;
-                    }
-                    Object compareValue;
-                    if (converter == null) {
-                        compareValue = coerceToModelType(context,
-                                                        itemValue,
-                                                        value.getClass());
-                    } else {
-                        compareValue = itemValue;
-                        if (compareValue instanceof String && !(value instanceof String)) {
-                            // type mismatch between the time and the value we're
-                            // comparing.  Invoke the Converter.
-                            compareValue = converter.getAsObject(context,
-                                                                component,
-                                                                (String) compareValue);
-                        }
-                    }
-
-                    if (value.equals(compareValue)) {
-                        return (true);
-                    }
-                }
-            }
-        }
-        return false;
-
-    }
-
-
-    protected int renderOptions(FacesContext context,
-                                UIComponent component,
-                                Iterator<SelectItem> items)
-    throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        Converter converter = null;
-        if(component instanceof ValueHolder) {
-            converter = ((ValueHolder)component).getConverter();
-        }
-        int count = 0;
-        Object currentSelections = getCurrentSelectedValues(component);
-        Object[] submittedValues = getSubmittedSelectedValues(component);
-        Map<String,Object> attributes = component.getAttributes();
-        boolean componentDisabled = Util.componentIsDisabled(component);
-
-        OptionComponentInfo optionInfo =
-              new OptionComponentInfo((String) attributes.get("disabledClass"),
-                                      (String) attributes.get("enabledClass"),
-                                      componentDisabled,
-                                      isHideNoSelection(component));
-        RequestStateManager.set(context,
-                                RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
-                                component);
-        while (items.hasNext()) {
-            SelectItem item = items.next();
-
-            if (item instanceof SelectItemGroup) {
-                // render OPTGROUP
-                writer.startElement("optgroup", component);
-                writer.writeAttribute("label", item.getLabel(), "label");
-
-                // if the component is disabled, "disabled" attribute would be rendered
-                // on "select" tag, so don't render "disabled" on every option.
-                if ((!componentDisabled) && item.isDisabled()) {
-                    writer.writeAttribute("disabled", true, "disabled");
-                }
-                count++;
-                // render options of this group.
-                SelectItem[] itemsArray =
-                      ((SelectItemGroup) item).getSelectItems();
-                for (int i = 0; i < itemsArray.length; ++i) {
-                    if (renderOption(context,
-                                     component,
-                                     converter,
-                                     itemsArray[i],
-                                     currentSelections,
-                                     submittedValues,
-                                     optionInfo)) {
-                        count++;
-                    }
-                }
-                writer.endElement("optgroup");
-            } else {
-                if (renderOption(context,
-                                 component,
-                                 converter,
-                                 item,
-                                 currentSelections,
-                                 submittedValues,
-                                 optionInfo)) {
-                    count ++;
-                }
-            }
-        }
-
-        return count;
-
-    }
-
-
-    // Render the "select" portion..
-    //
-    protected void renderSelect(FacesContext context,
-                                UIComponent component) throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        if (logger.isLoggable(Level.FINER)) {
-            logger.log(Level.FINER, "Rendering 'select'");
-        }
-        writer.startElement("select", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        writer.writeAttribute("name", component.getClientId(context),
-                              "clientId");
-        // render styleClass attribute if present.
-        String styleClass;
-        if (null !=
-            (styleClass =
-                  (String) component.getAttributes().get("styleClass"))) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        if (!getMultipleText(component).equals("")) {
-            writer.writeAttribute("multiple", true, "multiple");
-        }
-
-        // Determine how many option(s) we need to render, and update
-        // the component's "size" attribute accordingly;  The "size"
-        // attribute will be rendered as one of the "pass thru" attributes
-        Iterator<SelectItem> items = RenderKitUtils.getSelectItems(context, component);
-
-        // render the options to a buffer now so that we can determine
-        // the size
-        FastStringWriter bufferedWriter = new FastStringWriter(128);
-        context.setResponseWriter(writer.cloneWithWriter(bufferedWriter));
-        int count = renderOptions(context, component, items);
-        context.setResponseWriter(writer);
-        // If "size" is *not* set explicitly, we have to default it correctly
-        Integer size = (Integer) component.getAttributes().get("size");
-        if (size == null || size == Integer.MIN_VALUE) {
-            size = count;
-        }
-        writeDefaultSize(writer, size);
-
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES,
-                                                getNonOnChangeBehaviors(component));
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer,
-                                                         component);
-
-        RenderKitUtils.renderOnchange(context, component, false);
-
-        // Now, write the buffered option content
-        writer.write(bufferedWriter.toString());
-        
-        writer.endElement("select");
-
-    }
-
-    protected Object coerceToModelType(FacesContext ctx,
-                                       Object value,
-                                       Class itemValueType) {
-
-        Object newValue;
-        try {
-            ExpressionFactory ef = ctx.getApplication().getExpressionFactory();
-            newValue = ef.coerceToType(value, itemValueType);
-        } catch (ELException ele) {
-            newValue = value;
-        } catch (IllegalArgumentException iae) {
-            // If coerceToType fails, per the docs it should throw
-            // an ELException, however, GF 9.0 and 9.0u1 will throw
-            // an IllegalArgumentException instead (see GF issue 1527).
-            newValue = value;
-        }
-
-        return newValue;
-
-    }
-
-
-    /**
-     * @param collection a Collection instance
-     *
-     * @return a new <code>Collection</code> instance or null if the instance
-     *         cannot be created
-     */
-    protected Collection createCollection(Collection collection,
-                                          Class<? extends Collection> fallBackType) {
-
-        Class<? extends Collection> lookupClass =
-              ((collection != null) ? collection.getClass() : fallBackType);
-
-        if (!lookupClass.isInterface()
-             && !Modifier.isAbstract(lookupClass.getModifiers())) {
-            try {
-                return lookupClass.newInstance();
-            } catch (Exception e) {
-                if (logger.isLoggable(Level.SEVERE)) {
-                    logger.log(Level.SEVERE,
-                               "Unable to create new Collection instance for type "
-                               + lookupClass.getName(),
-                               e);
-                }
-            }
-        }
-
-        return null;
-
-    }
-
-
-    /**
-     * <p>
-     * Utility method to invoke the the <code>clone</code> method on the provided
-     * value.
-     * </p>
-     *
-     * @param value the value to clone
-     * @return the result of invoking <code>clone()</code> or <code>null</code>
-     *  if the value could not be cloned or does not implement the
-     *  {@link Cloneable} interface
-     */
-    protected Collection cloneValue(Object value) {
-
-        if (value instanceof Cloneable) {
-            // even though Clonable marks an instance of a Class as being
-            // safe to call .clone(), .clone() by default is protected.
-            // The Collection classes that do implement Clonable do so at variable
-            // locations within the class hierarchy, so we're stuck having to
-            // use reflection.
-            Method clone =
-                  ReflectionUtils.lookupMethod(value.getClass(), "clone");
-            if (clone != null) {
-                try {
-                    Collection c = (Collection) clone.invoke(value);
-                    c.clear();
-                    return c;
-                } catch (Exception e) {
-                    if (logger.isLoggable(Level.SEVERE)) {
-                        logger.log(Level.SEVERE,
-                                   "Unable to clone collection type: {0}",
-                                   value.getClass().getName());
-                        logger.log(Level.SEVERE, e.toString(), e);
-                    }
-                }
-            } else {
-                // no public clone method
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE,
-                               "Type {0} implements Cloneable, but has no public clone method.",
-                               value.getClass().getName());
-                }
-            }
-        }
-
-        return null;
-
-    }
-
-
-    /**
-     * @param type the target model type
-     * @param initialSize the initial size of the <code>Collection</code>
-     * @return a <code>Collection</code> instance that best matches
-     *  <code>type</code>
-     */
-    protected Collection bestGuess(Class<? extends Collection> type,
-                                   int initialSize) {
-
-        if (SortedSet.class.isAssignableFrom(type)) {
-            return new TreeSet();
-        } else if (Queue.class.isAssignableFrom(type)) {
-           return new LinkedList(); 
-        } else if (Set.class.isAssignableFrom(type)) {
-            return new HashSet(initialSize);
-        } else {
-            // this covers the where type is List or Collection
-            return new ArrayList(initialSize);
-        }
-
-    }
-
-
-    /**
-     * <p>
-     * Create a collection from the provided hint.
-     * @param collectionTypeHint the Collection type as either a String or Class
-     * @return a new Collection instance
-     */
-    protected Collection createCollectionFromHint(Object collectionTypeHint) {
-
-        Class<? extends Collection> collectionType;
-        if (collectionTypeHint instanceof Class) {
-            //noinspection unchecked
-            collectionType = (Class<? extends Collection>) collectionTypeHint;
-        } else if (collectionTypeHint instanceof String) {
-            try {
-                //noinspection unchecked
-                collectionType = Util.loadClass((String) collectionTypeHint,
-                                                this);
-            } catch (ClassNotFoundException cnfe) {
-                throw new FacesException(cnfe);
-            }
-        } else {
-            // RELEASE_PENDING (i18n)
-            throw new FacesException(
-                  "'collectionType' should resolve to type String or Class.  Found: "
-                  + collectionTypeHint.getClass().getName());
-        }
-
-        Collection c = createCollection(null, collectionType);
-        if (c == null) {
-            // RELEASE_PENDING (i18n)
-            throw new FacesException("Unable to create collection type " + collectionType);
-        }
-        return c;
-
-    }
-
-
-    protected boolean isHideNoSelection(UIComponent component) {
-
-        Object result = component.getAttributes().get("hideNoSelectionOption");
-        return ((result != null) ? (Boolean) result : false);
-
-    }
-
-} // end of class MenuRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MessageRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MessageRenderer.java
deleted file mode 100644
index 1ded2f3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MessageRenderer.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// MessageRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.logging.Level;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIMessage;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/**
- * <p><B>MessageRenderer</B> handles rendering for the Message<p>.
- *
- */
-
-public class MessageRenderer extends HtmlBasicRenderer {
-
-
-    private OutputMessageRenderer omRenderer = null;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public MessageRenderer() {
-
-        omRenderer = new OutputMessageRenderer();
-
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (component instanceof UIOutput) {
-            omRenderer.encodeBegin(context, component);
-        }
-
-    }
-
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (component instanceof UIOutput) {
-            omRenderer.encodeChildren(context, component);
-        }
-
-    }
-
-
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (component instanceof UIOutput) {
-            omRenderer.encodeEnd(context, component);
-            return;
-        }
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        //  If id is user specified, we must render
-        boolean mustRender = shouldWriteIdAttribute(component);
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        UIMessage message = (UIMessage) component;
-
-        String clientId = message.getFor();
-        //"for" attribute required for Message. Should be taken care of
-        //by TLD in JSP case, but need to cover non-JSP case.
-        if (clientId == null) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.warning("'for' attribute cannot be null");
-            }
-            return;
-        }
-
-        clientId = augmentIdReference(clientId, component);
-        Iterator messageIter = getMessageIter(context, clientId, component);
-
-
-        assert(messageIter != null);
-        if (!messageIter.hasNext()) {
-            if (mustRender) {
-                // no message to render, but must render anyway
-                writer.startElement("span", component);
-                writeIdAttributeIfNecessary(context, writer, component);
-                writer.endElement("span");
-            } // otherwise, return without rendering
-            return;
-        }
-        FacesMessage curMessage = (FacesMessage) messageIter.next();
-        if (curMessage.isRendered() && !message.isRedisplay()) {
-            return;
-        }
-        curMessage.rendered();
-
-        String severityStyle = null;
-        String severityStyleClass = null;
-        boolean showSummary = message.isShowSummary();
-        boolean showDetail = message.isShowDetail();
-
-        // make sure we have a non-null value for summary and
-        // detail.
-        String summary = (null != (summary = curMessage.getSummary())) ?
-                  summary : "";
-        // Default to summary if we have no detail
-        String detail = (null != (detail = curMessage.getDetail())) ?
-                 detail : summary;
-
-        if (curMessage.getSeverity() == FacesMessage.SEVERITY_INFO) {
-            severityStyle =
-                  (String) component.getAttributes().get("infoStyle");
-            severityStyleClass = (String)
-                  component.getAttributes().get("infoClass");
-        } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_WARN) {
-            severityStyle =
-                  (String) component.getAttributes().get("warnStyle");
-            severityStyleClass = (String)
-                  component.getAttributes().get("warnClass");
-        } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_ERROR) {
-            severityStyle =
-                  (String) component.getAttributes().get("errorStyle");
-            severityStyleClass = (String)
-                  component.getAttributes().get("errorClass");
-        } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_FATAL) {
-            severityStyle =
-                  (String) component.getAttributes().get("fatalStyle");
-            severityStyleClass = (String)
-                  component.getAttributes().get("fatalClass");
-        }
-
-        String style = (String) component.getAttributes().get("style");
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        String dir = (String) component.getAttributes().get("dir");
-        String lang = (String) component.getAttributes().get("lang");
-        String title = (String) component.getAttributes().get("title");
-
-        // if we have style and severityStyle
-        if ((style != null) && (severityStyle != null)) {
-            // severityStyle wins
-            style = severityStyle;
-        }
-        // if we have no style, but do have severityStyle
-        else if ((style == null) && (severityStyle != null)) {
-            // severityStyle wins
-            style = severityStyle;
-        }
-
-        // if we have styleClass and severityStyleClass
-        if ((styleClass != null) && (severityStyleClass != null)) {
-            // severityStyleClass wins
-            styleClass = severityStyleClass;
-        }
-        // if we have no styleClass, but do have severityStyleClass
-        else if ((styleClass == null) && (severityStyleClass != null)) {
-            // severityStyleClass wins
-            styleClass = severityStyleClass;
-        }
-
-        //Done intializing local variables. Move on to rendering.
-
-        boolean wroteSpan = false;
-        if (styleClass != null
-             || style != null
-             || dir != null
-             || lang != null
-             || title != null
-             || mustRender) {
-            writer.startElement("span", component);
-            writeIdAttributeIfNecessary(context, writer, component);
-
-            wroteSpan = true;
-            if (style != null) {               
-                writer.writeAttribute("style", style, "style");
-            }
-            if (styleClass != null) {
-                writer.writeAttribute("class", styleClass, "styleClass");
-            }
-            if (dir != null) {
-                writer.writeAttribute("dir", dir, "dir");
-            }
-            if (lang != null) {
-                writer.writeAttribute(RenderKitUtils.prefixAttribute("lang", writer),
-                     lang,
-                     "lang");
-            }
-            if (title != null) {
-                writer.writeAttribute("title", title, "title");
-            }
-
-        }
-
-        Object val = component.getAttributes().get("tooltip");
-        boolean isTooltip = (val != null) && Boolean.valueOf(val.toString());
-
-        boolean wroteTooltip = false;
-        if (showSummary && showDetail && isTooltip) {
-
-            if (!wroteSpan) {
-                writer.startElement("span", component);
-            }            
-            if (title == null || title.length() == 0) {
-                writer.writeAttribute("title", summary, "title");
-            }
-            writer.flush();
-            writer.writeText("\t", component, null);
-            wroteTooltip = true;
-        } else if (wroteSpan) {
-            writer.flush();
-        }
-
-        if (!wroteTooltip && showSummary) {
-            writer.writeText("\t", component, null);
-            writer.writeText(summary, component, null);
-            writer.writeText(" ", component, null);
-        }
-        if (showDetail) {
-            writer.writeText(detail, component, null);
-        }
-
-        if (wroteSpan || wroteTooltip) {
-            writer.endElement("span");
-        }
-
-    }
-
-} // end of class MessageRenderer
-
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MessagesRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MessagesRenderer.java
deleted file mode 100644
index e08e422..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/MessagesRenderer.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// MessagesRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIMessages;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/**
- * <p><B>MessagesRenderer</B> handles rendering for the Messages<p>.
- *
- */
-
-public class MessagesRenderer extends HtmlBasicRenderer {
-
-
-     private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.MESSAGESMESSAGES);
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        //  If id is user specified, we must render
-        boolean mustRender = shouldWriteIdAttribute(component);
-
-        UIMessages messages = (UIMessages) component;
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String clientId = ((UIMessages) component).getFor();
-        // if no clientId was included
-        if (clientId == null) {
-            // and the author explicitly only wants global messages
-            if (messages.isGlobalOnly()) {
-                // make it so only global messages get displayed.
-                clientId = "";
-            }
-        }
-
-        //"for" attribute optional for Messages
-        Iterator messageIter = getMessageIter(context, clientId, component);
-
-        assert(messageIter != null);
-        
-        if (!messageIter.hasNext()) {
-            if (mustRender) {
-                // no message to render, but must render anyway
-                // but if we're writing the dev stage messages,
-                // only write it if messages exist
-                if ("javax_faces_developmentstage_messages".equals(component.getId())) {
-                    return;
-                }
-                writer.startElement("div", component);
-                writeIdAttributeIfNecessary(context, writer, component);
-                writer.endElement("div");
-            } // otherwise, return without rendering
-            return;
-        }
-
-        String layout = (String) component.getAttributes().get("layout");
-        boolean showSummary = messages.isShowSummary();
-        boolean showDetail = messages.isShowDetail();
-        String styleClass = (String) component.getAttributes().get(
-              "styleClass");
-
-        boolean wroteTable = false;
-
-        //For layout attribute of "table" render as HTML table.
-        //If layout attribute is not present, or layout attribute
-        //is "list", render as HTML list. 
-        if ((layout != null) && (layout.equals("table"))) {
-            writer.startElement("table", component);
-            wroteTable = true;
-        } else {
-            writer.startElement("ul", component);
-        }
-
-        //Render "table" or "ul" level attributes.
-        writeIdAttributeIfNecessary(context, writer, component);
-        if (null != styleClass) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        // style is rendered as a passthru attribute
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES);
-
-        while (messageIter.hasNext()) {
-            FacesMessage curMessage = (FacesMessage) messageIter.next();
-            if (curMessage.isRendered() && !messages.isRedisplay()) {
-                continue;
-            }
-            curMessage.rendered();
-
-            String severityStyle = null;
-            String severityStyleClass = null;
-
-            // make sure we have a non-null value for summary and
-            // detail.
-            String summary = (null != (summary = curMessage.getSummary())) ?
-                      summary : "";
-            // Default to summary if we have no detail
-            String detail = (null != (detail = curMessage.getDetail())) ?
-                     detail : summary;
-
-
-            if (curMessage.getSeverity() == FacesMessage.SEVERITY_INFO) {
-                severityStyle =
-                      (String) component.getAttributes().get("infoStyle");
-                severityStyleClass = (String)
-                      component.getAttributes().get("infoClass");
-            } else if (curMessage.getSeverity() == FacesMessage.SEVERITY_WARN) {
-                severityStyle =
-                      (String) component.getAttributes().get("warnStyle");
-                severityStyleClass = (String)
-                      component.getAttributes().get("warnClass");
-            } else
-            if (curMessage.getSeverity() == FacesMessage.SEVERITY_ERROR) {
-                severityStyle =
-                      (String) component.getAttributes().get("errorStyle");
-                severityStyleClass = (String)
-                      component.getAttributes().get("errorClass");
-            } else
-            if (curMessage.getSeverity() == FacesMessage.SEVERITY_FATAL) {
-                severityStyle =
-                      (String) component.getAttributes().get("fatalStyle");
-                severityStyleClass = (String)
-                      component.getAttributes().get("fatalClass");
-            }
-
-            //Done intializing local variables. Move on to rendering.
-
-            if (wroteTable) {
-                writer.startElement("tr", component);
-            } else {
-                writer.startElement("li", component);
-            }
-
-            if (severityStyle != null) {
-                writer.writeAttribute("style", severityStyle, "style");
-            }
-            if (severityStyleClass != null) {
-                styleClass = severityStyleClass;
-                writer.writeAttribute("class", styleClass, "styleClass");
-            }
-
-            if (wroteTable) {
-                writer.startElement("td", component);
-            }
-
-            Object val = component.getAttributes().get("tooltip");
-            boolean isTooltip = (val != null) && Boolean.valueOf(val.toString());
-
-            boolean wroteTooltip = false;
-            if (showSummary && showDetail && isTooltip) {
-                writer.startElement("span", component);
-                String title = (String) component.getAttributes().get("title");
-                if (title == null || title.length() == 0) {
-                    writer.writeAttribute("title", summary, "title");
-                }
-                writer.flush();
-                writer.writeText("\t", component, null);
-                wroteTooltip = true;
-            }
-
-            if (!wroteTooltip && showSummary) {
-                writer.writeText("\t", component, null);
-                writer.writeText(summary, component, null);
-                writer.writeText(" ", component, null);
-            }
-            if (showDetail) {
-                writer.writeText(detail, component, null);
-            }
-
-            if (wroteTooltip) {
-                writer.endElement("span");
-            }
-
-            //close table row if present
-            if (wroteTable) {
-                writer.endElement("td");
-                writer.endElement("tr");
-            } else {
-                writer.endElement("li");
-            }
-
-        } //messageIter
-
-        //close table if present
-        if (wroteTable) {
-            writer.endElement("table");
-        } else {
-            writer.endElement("ul");
-        }
-
-    }
-
-} // end of class MessagesRenderer
-
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetButtonRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetButtonRenderer.java
deleted file mode 100644
index 5d73e84..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetButtonRenderer.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import java.io.IOException;
-import javax.faces.application.NavigationCase;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-public class OutcomeTargetButtonRenderer extends OutcomeTargetRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-        AttributeManager.getAttributes(AttributeManager.Key.COMMANDBUTTON);
-
-
-    // --------------------------------------------------- Methods from Renderer
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-    throws IOException {
-
-        rendererParamsNotNull(context, component);
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        writer.startElement("input", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-
-        String imageSrc = (String) component.getAttributes().get("image");
-        if (imageSrc != null) {
-            writer.writeAttribute("type", "image", "type");
-            writer.writeURIAttribute("src", RenderKitUtils.getImageSource(context, component, "image"), "image");
-        }
-        else {
-            writer.writeAttribute("type", "button", "type");
-        }
-
-        String label = getLabel(component);
-
-        if (!Util.componentIsDisabled(component)) {
-            NavigationCase navCase = getNavigationCase(context, component);
-
-            if (navCase == null) {
-                // QUESTION should this only be added in development mode?
-                label += MessageUtils.getExceptionMessageString(MessageUtils.OUTCOME_TARGET_BUTTON_NO_MATCH);
-                writer.writeAttribute("disabled", "true", "disabled");
-            }
-            else {
-                String hrefVal = getEncodedTargetURL(context, component, navCase);
-                hrefVal += getFragment(component);
-                writer.writeAttribute("onclick", getOnclick(component, hrefVal), "onclick");
-            }
-        }
-
-        // value should be used even for image type for accessibility (e.g., images disabled in browser)
-        writer.writeAttribute("value", label, "value");
-
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        if (styleClass != null && styleClass.length() > 0) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-
-        renderPassThruAttributes(context, writer, component, ATTRIBUTES);
-
-        writer.endElement("input");
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-
-        return false;
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-    throws IOException {
-
-        // no-op
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected String getOnclick(UIComponent component, String targetURI) {
-
-        String onclick = (String) component.getAttributes().get("onclick");
-
-        if (onclick != null) {
-            onclick = onclick.trim();
-            if (onclick.length() > 0 && !onclick.endsWith(";")) {
-                onclick += "; ";
-            }
-        }
-        else {
-            onclick = "";
-        }
-
-        if (targetURI != null) {
-            onclick += "window.location.href='" + targetURI + "'; ";
-        }
-
-        onclick += "return false;";
-
-        return onclick;
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetLinkRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetLinkRenderer.java
deleted file mode 100644
index fe1e53e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetLinkRenderer.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import java.io.IOException;
-import javax.faces.application.NavigationCase;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-public class OutcomeTargetLinkRenderer extends OutcomeTargetRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-        AttributeManager.getAttributes(AttributeManager.Key.OUTPUTLINK);
-
-    private static final String NO_NAV_CASE =
-          OutcomeTargetLinkRenderer.class.getName() + "_NO_NAV_CASE";
-
-
-    // --------------------------------------------------- Methods from Renderer
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-    throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        NavigationCase navCase = null;
-        boolean failedToResolveNavigationCase = false;
-        boolean disabled = Util.componentIsDisabled(component);
-
-        if (!disabled) {
-            navCase = getNavigationCase(context, component);
-            if (navCase == null) {
-                failedToResolveNavigationCase = true;
-                context.getAttributes().put(NO_NAV_CASE, true);
-            }
-
-        }
-
-        if (disabled || navCase == null) {
-            renderAsDisabled(context, component, failedToResolveNavigationCase);
-        } else {
-            renderAsActive(context, navCase, component);
-        }
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        String endElement = ((Util.componentIsDisabled(component) || context.getAttributes().remove(NO_NAV_CASE) != null) 
-                                ? "span"
-                                : "a");
-        writer.endElement(endElement);
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected void renderAsDisabled(FacesContext context,
-                                    UIComponent component,
-                                    boolean failedToResolveNavigationCase)
-    throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        writer.startElement("span", component);
-        writeIdAndNameAttributes(context, writer, component);
-        renderLinkCommonAttributes(writer, component);
-        renderPassThruAttributes(context, writer, component, ATTRIBUTES);
-        writeValue(writer, component);
-
-        // shame that we can't put this in encodeEnd, but then we have to attempt to resolve the navigation case again
-        if (failedToResolveNavigationCase) {
-            if (!context.isProjectStage(ProjectStage.Production)) {
-                writer.write(MessageUtils.getExceptionMessageString(MessageUtils.OUTCOME_TARGET_LINK_NO_MATCH));
-            }
-        }
-
-    }
-
-    protected void renderAsActive(FacesContext context,
-                                  NavigationCase navCase,
-                                  UIComponent component)
-    throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        writer.startElement("a", component);
-        writeIdAndNameAttributes(context, writer, component);
-
-        String hrefVal = getEncodedTargetURL(context, component, navCase);
-        hrefVal += getFragment(component);
-        writer.writeURIAttribute("href", hrefVal, "outcome");
-
-        renderLinkCommonAttributes(writer, component);
-        renderPassThruAttributes(context, writer, component, ATTRIBUTES);
-        writeValue(writer, component);
-
-    }
-
-    protected void writeIdAndNameAttributes(FacesContext context,
-                                            ResponseWriter writer,
-                                            UIComponent component)
-    throws IOException {
-
-        String writtenId = writeIdAttributeIfNecessary(context, writer, component);
-        if (null != writtenId) {
-            writer.writeAttribute("name", writtenId, "name");
-        }
-
-    }
-
-    protected void writeValue(ResponseWriter writer, UIComponent component)
-    throws IOException {
-
-        writer.writeText(getLabel(component), component, null);
-        writer.flush();
-        
-    }
-
-
-    protected void renderLinkCommonAttributes(ResponseWriter writer,
-                                              UIComponent component)
-    throws IOException {
-
-        // this is common to both link and button target renderers
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        if (styleClass != null && styleClass.length() > 0) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-
-        // target/onclick should be pass through, but right now, due to command Link,
-        // they all share the same base properties file which marks them as non
-        // pass-through
-        String target = (String) component.getAttributes().get("target");
-        if (target != null && target.length() > 0) {
-            writer.writeAttribute("target", target, "target");
-        }
-
-        String onclick = (String) component.getAttributes().get("onclick");
-        if (onclick != null && onclick.length() > 0) {
-            writer.writeAttribute("onclick", onclick, "onclick");
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetRenderer.java
deleted file mode 100644
index 191300b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutcomeTargetRenderer.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.util.Util;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import javax.faces.application.*;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutcomeTarget;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-public abstract class OutcomeTargetRenderer extends HtmlBasicRenderer {
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {}
-
-    // ------------------------------------------------------- Protected Methods
-    
-
-    protected void renderPassThruAttributes(FacesContext ctx,
-                                            ResponseWriter writer,
-                                            UIComponent component,
-                                            Attribute[] attributes)
-    throws IOException {
-        RenderKitUtils.renderPassThruAttributes(ctx, writer, component, attributes);
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-        
-    }
-
-    protected String getLabel(UIComponent component) {
-
-        Object value = ((UIOutcomeTarget) component).getValue();
-        return value != null ? value.toString() : "";
-        
-    }
-
-    protected String getFragment(UIComponent component) {
-
-        String fragment = (String) component.getAttributes().get("fragment");
-        fragment = (fragment != null ? fragment.trim() : "");
-        if (fragment.length() > 0) {
-            fragment = "#" + fragment;
-        }
-        return fragment;
-
-    }
-
-    @Override
-    protected Object getValue(UIComponent component) {
-
-        return ((UIOutcomeTarget) component).getValue();
-
-    }
-
-    protected boolean isIncludeViewParams(UIComponent component, NavigationCase navcase) {
-
-        return (((UIOutcomeTarget) component).isIncludeViewParams() || navcase.isIncludeViewParams());
-
-    }
-
-    /**
-     * Invoke the {@link NavigationHandler} preemptively to resolve a {@link NavigationCase}
-     * for the outcome declared on the {@link UIOutcomeTarget} component. The current view id
-     * is used as the from-view-id when matching navigation cases and the from-action is
-     * assumed to be null.
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @param component the target {@link UIComponent}
-     *
-     * @return the NavigationCase represeting the outcome target
-     */
-    protected NavigationCase getNavigationCase(FacesContext context, UIComponent component) {
-        NavigationHandler navHandler = context.getApplication().getNavigationHandler();
-        if (!(navHandler instanceof ConfigurableNavigationHandler)) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.log(Level.WARNING,
-                    "jsf.outcome.target.invalid.navigationhandler.type",
-                    component.getId());
-            }
-            return null;
-        }
-
-        String outcome = ((UIOutcomeTarget) component).getOutcome();
-        if (outcome == null) {
-            outcome = context.getViewRoot().getViewId();
-            // QUESTION should we avoid the call to getNavigationCase() and instead instantiate one explicitly?
-            //String viewId = context.getViewRoot().getViewId();
-            //return new NavigationCase(viewId, null, null, null, viewId, false, false);
-        }
-        NavigationCase navCase = ((ConfigurableNavigationHandler) navHandler).getNavigationCase(context, null, outcome);
-        if (navCase == null) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.log(Level.WARNING,
-                           "jsf.outcometarget.navigation.case.not.resolved",
-                           component.getId());
-            }
-        }
-        return navCase;
-    }
-
-    /**
-     * <p>Resolve the target view id and then delegate to
-     * {@link ViewHandler#getBookmarkableURL(javax.faces.context.FacesContext, String, java.util.Map, boolean)}
-     * to produce a redirect URL, which will add the page parameters if necessary
-     * and properly prioritizing the parameter overrides.</p>
-     *
-     * @param context the {@link FacesContext} for the current request
-     * @param component the target {@link UIComponent}
-     * @param navCase the target navigation case
-     *
-     * @return an encoded URL for the provided navigation case
-     */
-    protected String getEncodedTargetURL(FacesContext context, UIComponent component, NavigationCase navCase) {
-        // FIXME getNavigationCase doesn't resolve the target viewId (it is part of CaseStruct)
-        String toViewId = navCase.getToViewId(context);
-        Map<String,List<String>> params = getParamOverrides(component);
-        addNavigationParams(navCase, params);
-        return Util.getViewHandler(context).getBookmarkableURL(context,
-                                                               toViewId,
-                                                               params,
-                                                               isIncludeViewParams(component, navCase));
-    }
-
-    protected void addNavigationParams(NavigationCase navCase,
-                                       Map<String,List<String>> existingParams) {
-
-        Map<String,List<String>> navParams = navCase.getParameters();
-        if (navParams == null || navParams.isEmpty()) {
-            return;
-        }
-        for (Map.Entry<String,List<String>> entry : navParams.entrySet()) {
-            String navParamName = entry.getKey();
-            // only add the navigation params to the existing params collection
-            // if the parameter name isn't already present within the existing
-            // collection
-            if (!existingParams.containsKey(navParamName)) {
-                existingParams.put(navParamName, entry.getValue());
-            }
-        }
-
-    }
-
-    protected Map<String, List<String>> getParamOverrides(UIComponent component) {
-        Map<String, List<String>> params = new LinkedHashMap<String, List<String>>();
-        Param[] declaredParams = getParamList(component);
-        for (Param candidate : declaredParams) {
-            // QUESTION shouldn't the trimming of name should be done elsewhere?
-            // null value is allowed as a way to suppress page parameter
-            if (candidate.name != null && candidate.name.trim().length() > 0) {
-                candidate.name = candidate.name.trim();
-                List<String> values = params.get(candidate.name);
-                if (values == null) {
-                    values = new ArrayList<String>();
-                    params.put(candidate.name, values);
-                }
-                values.add(candidate.value);
-            }
-        }
-
-        return params;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutputLinkRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutputLinkRenderer.java
deleted file mode 100644
index 9ceba37..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutputLinkRenderer.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// OutputLinkRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.logging.Level;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.Util;
-
-import java.net.URLEncoder;
-
-
-/**
- * <B>OutputLinkRenderer</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class OutputLinkRenderer extends LinkRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTLINK);
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-
-        rendererParamsNotNull(context, component);
-
-
-        if (shouldDecode(component)) {
-            decodeBehaviors(context, component);
-        }
-    }
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        UIOutput output = (UIOutput) component;
-        boolean componentDisabled = false;
-        if (output.getAttributes().get("disabled") != null) {
-            if ((output.getAttributes().get("disabled")).equals(Boolean.TRUE)) {
-                componentDisabled = true;
-            }
-        }
-        if (componentDisabled) {
-            renderAsDisabled(context, output);
-        } else {
-            renderAsActive(context, output);
-        }
-
-    }
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncodeChildren(component)) {
-            return;
-        }
-
-        if (component.getChildCount() > 0) {
-            for (UIComponent kid : component.getChildren()) {
-                encodeRecursive(context, kid);
-            }
-        }
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        if (Boolean.TRUE.equals(component.getAttributes().get("disabled"))) {
-            writer.endElement("span");
-        } else {
-            //Write Anchor inline elements
-            //Done writing Anchor element
-            writer.endElement("a");
-        }
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-
-        return true;
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected String getFragment(UIComponent component) {
-
-        String fragment = (String) component.getAttributes().get("fragment");
-        fragment = (fragment != null ? fragment.trim() : "");
-        if (fragment.length() > 0) {
-            fragment = "#" + fragment;
-        }
-        return fragment;
-
-    }
-
-    @Override
-    protected Object getValue(UIComponent component) {
-
-        if (Util.componentIsDisabled(component)) {
-            return null;
-        } else {
-            return ((UIOutput) component).getValue();
-        }
-
-    }
-
-
-    protected void renderAsActive(FacesContext context, UIComponent component)
-          throws IOException {
-
-        String hrefVal = getCurrentValue(context, component);
-        if (logger.isLoggable(Level.FINE)) {
-            logger.fine("Value to be rendered " + hrefVal);
-        }
-
-        // suppress rendering if "rendered" property on the output is
-        // false
-        if (!component.isRendered()) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("End encoding component "
-                            + component.getId() + " since " +
-                            "rendered attribute is set to false ");
-            }
-            return;
-        }
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        writer.startElement("a", component);
-        String writtenId =
-              writeIdAttributeIfNecessary(context, writer, component);
-        if (null != writtenId) {
-            writer.writeAttribute("name", writtenId, "name");
-        }
-        // render an empty value for href if it is not specified
-        if (null == hrefVal || 0 == hrefVal.length()) {
-            hrefVal = "";
-        }
-
-        //Write Anchor attributes
-
-        Param paramList[] = getParamList(component);
-        StringBuffer sb = new StringBuffer();
-        sb.append(hrefVal);
-        boolean paramWritten = false;
-        for (int i = 0, len = paramList.length; i < len; i++) {
-            String pn = paramList[i].name;
-            if (pn != null && pn.length() != 0) {
-                String pv = paramList[i].value;
-                sb.append((paramWritten) ? '&' : '?');
-                sb.append(URLEncoder.encode(pn,"UTF-8"));
-                sb.append('=');
-                if (pv != null && pv.length() != 0) {
-                    sb.append(URLEncoder.encode(pv, "UTF-8"));
-                }
-                paramWritten = true;
-            }
-        }
-        sb.append(getFragment(component));
-        writer.writeURIAttribute("href",
-                                 context.getExternalContext()
-                                       .encodeResourceURL(sb.toString()),
-                                 "href");
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES);
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-        String target = (String) component.getAttributes().get("target");
-        if (target != null && target.trim().length() != 0) {
-            writer.writeAttribute("target", target, "target");
-        }
-
-        writeCommonLinkAttributes(writer, component);
-
-        writer.flush();
-
-    }
-
-} // end of class OutputLinkRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutputMessageRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutputMessageRenderer.java
deleted file mode 100644
index 8780ac4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/OutputMessageRenderer.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// OutputMessageRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIParameter;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.RenderKitUtils;
-
-
-/** <B>OutputMessageRenderer</B> is a class that renderes UIOutput */
-
-public class OutputMessageRenderer extends HtmlBasicRenderer {
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-
-
-        Object currentObj = ((ValueHolder) component).getValue();
-        String currentValue;
-        if (currentObj != null) {
-            currentValue = currentObj.toString();
-        } else {
-            // if the value is null, do not output anything.
-            return;
-        }
-
-        int childCount = component.getChildCount();
-        List<Object> parameterList;
-
-        if (childCount > 0) {
-            parameterList = new ArrayList<Object>(childCount);
-            // get UIParameter children...
-
-            for (UIComponent kid : component.getChildren()) {
-                //PENDING(rogerk) ignore if child is not UIParameter?
-                if (!(kid instanceof UIParameter)) {
-                    continue;
-                }
-
-                parameterList.add(((UIParameter) kid).getValue());
-            }
-        } else {
-            parameterList = Collections.emptyList();
-        }
-
-        // If at least one substitution parameter was specified,
-        // use the string as a MessageFormat instance.
-        String message;
-        if (parameterList.size() > 0) {
-            MessageFormat fmt = new MessageFormat(currentValue,
-                                                  context.getViewRoot().getLocale());
-            StringBuffer buf = new StringBuffer(currentValue.length() * 2);
-            fmt.format(parameterList.toArray(new Object[parameterList.size()]),
-                       buf,
-                       null);
-            message = buf.toString();
-        } else {
-            message = currentValue;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String style = (String) component.getAttributes().get("style");
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        String lang = (String) component.getAttributes().get("lang");
-        String dir = (String) component.getAttributes().get("dir");
-        String title = (String) component.getAttributes().get("title");
-        boolean wroteSpan = false;
-        if (styleClass != null
-             || style != null
-             || dir != null
-             || lang != null
-             || title != null
-             || shouldWriteIdAttribute(component)) {
-            writer.startElement("span", component);
-            writeIdAttributeIfNecessary(context, writer, component);
-            wroteSpan = true;
-
-            if (style != null) {
-                writer.writeAttribute("style", style, "style");
-            }
-            if (null != styleClass) {
-                writer.writeAttribute("class", styleClass, "styleClass");
-            }
-            if (dir != null) {
-                writer.writeAttribute("dir", dir, "dir");
-            }
-            if (lang != null) {
-                writer.writeAttribute(RenderKitUtils.prefixAttribute("lang", writer),
-                                      lang,
-                                      "lang");
-            }
-            if (title != null) {
-                writer.writeAttribute("title", title, "title");
-            }
-        }
-
-        Object val = component.getAttributes().get("escape");
-        boolean escape = (val != null) && Boolean.valueOf(val.toString());
-        
-        if (escape) {
-            writer.writeText(message, component, "value");
-        } else {
-            writer.write(message);
-        }
-        if (wroteSpan) {
-            writer.endElement("span");
-        }
-
-    }
-
-} // end of class OutputMessageRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/RadioRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/RadioRenderer.java
deleted file mode 100644
index 99ed7d1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/RadioRenderer.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// RadioRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.RequestStateManager;
-
-import javax.el.ELException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.UISelectOne;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.convert.Converter;
-import javax.faces.model.SelectItem;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.io.IOException;
-
-/**
- * <B>ReadoRenderer</B> is a class that renders the current value of
- * <code>UISelectOne<code> or <code>UISelectMany<code> component as a list of
- * radio buttons
- */
-
-public class RadioRenderer extends SelectManyCheckboxListRenderer {
-
-    private static final Attribute[] ATTRIBUTES =
-            AttributeManager.getAttributes(AttributeManager.Key.SELECTONERADIO);
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected void renderOption(FacesContext context,
-                                UIComponent component,
-                                Converter converter,
-                                SelectItem curItem,
-                                Object currentSelections,
-                                Object[] submittedValues,
-                                boolean alignVertical,
-                                int itemNumber,
-                                OptionComponentInfo optionInfo) throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert (writer != null);
-
-        UISelectOne selectOne = (UISelectOne) component;
-        Object curValue = selectOne.getSubmittedValue();
-        if (curValue == null) {
-            curValue = selectOne.getValue();
-        }
-
-
-
-        Class type = String.class;
-        if (curValue != null) {
-            type = curValue.getClass();
-            if (type.isArray()) {
-                curValue = ((Object[]) curValue)[0];
-                if (null != curValue) {
-                    type = curValue.getClass();
-                }
-            } else if (Collection.class.isAssignableFrom(type)) {
-                Iterator valueIter = ((Collection) curValue).iterator();
-                if (null != valueIter && valueIter.hasNext()) {
-                    curValue = valueIter.next();
-                    if (null != curValue) {
-                        type = curValue.getClass();
-                    }
-                }
-            }
-        }
-        Object itemValue = curItem.getValue();
-        RequestStateManager.set(context,
-                RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
-                component);
-        Object newValue;
-        try {
-            newValue = context.getApplication().getExpressionFactory().
-                    coerceToType(itemValue, type);
-        } catch (ELException ele) {
-            newValue = itemValue;
-        } catch (IllegalArgumentException iae) {
-            // If coerceToType fails, per the docs it should throw
-            // an ELException, however, GF 9.0 and 9.0u1 will throw
-            // an IllegalArgumentException instead (see GF issue 1527).
-            newValue = itemValue;
-        }
-
-        boolean checked = null != newValue && newValue.equals(curValue);
-
-        if (optionInfo.isHideNoSelection()
-                && curItem.isNoSelectionOption()
-                && curValue != null
-                && !checked) {
-            return;
-        }
-
-        if (alignVertical) {
-            writer.writeText("\t", component, null);
-            writer.startElement("tr", component);
-            writer.writeText("\n", component, null);
-        }
-
-        String labelClass;
-        if (optionInfo.isDisabled() || curItem.isDisabled()) {
-            labelClass = optionInfo.getDisabledClass();
-        } else {
-            labelClass = optionInfo.getEnabledClass();
-        }
-        writer.startElement("td", component);
-        writer.writeText("\n", component, null);
-
-        writer.startElement("input", component);
-        writer.writeAttribute("type", "radio", "type");
-
-        if (checked) {
-            writer.writeAttribute("checked", Boolean.TRUE, null);
-        }
-        writer.writeAttribute("name", component.getClientId(context),
-                "clientId");
-        String idString = component.getClientId(context)
-                + UINamingContainer.getSeparatorChar(context)
-                + Integer.toString(itemNumber);
-        writer.writeAttribute("id", idString, "id");
-
-        writer.writeAttribute("value",
-                              (getFormattedValue(context, component,
-                                      curItem.getValue(), converter)),
-                              "value");
-
-        // Don't render the disabled attribute twice if the 'parent'
-        // component is already marked disabled.
-        if (!optionInfo.isDisabled()) {
-            if (curItem.isDisabled()) {
-                writer.writeAttribute("disabled", true, "disabled");
-            }
-        }
-        // Apply HTML 4.x attributes specified on UISelectMany component to all
-        // items in the list except styleClass and style which are rendered as
-        // attributes of outer most table.
-        RenderKitUtils.renderPassThruAttributes(context,
-                writer,
-                component,
-                ATTRIBUTES,
-                getNonOnClickSelectBehaviors(component));
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer,
-                component);
-
-        RenderKitUtils.renderSelectOnclick(context, component, false);
-
-
-        writer.endElement("input");
-        writer.startElement("label", component);
-        writer.writeAttribute("for", idString, "for");
-        // if enabledClass or disabledClass attributes are specified, apply
-        // it on the label.
-        if (labelClass != null) {
-            writer.writeAttribute("class", labelClass, "labelClass");
-        }
-        String itemLabel = curItem.getLabel();
-        if (itemLabel != null) {
-            writer.writeText(" ", component, null);
-            if (!curItem.isEscape()) {
-                // It seems the ResponseWriter API should
-                // have a writeText() with a boolean property
-                // to determine if it content written should
-                // be escaped or not.
-                writer.write(itemLabel);
-            } else {
-                writer.writeText(itemLabel, component, "label");
-            }
-        }
-        writer.endElement("label");
-        writer.endElement("td");
-        writer.writeText("\n", component, null);
-        if (alignVertical) {
-            writer.writeText("\t", component, null);
-            writer.endElement("tr");
-            writer.writeText("\n", component, null);
-        }
-    }
-
-
-} // end of class RadioRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ScriptRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ScriptRenderer.java
deleted file mode 100644
index dfeddc6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ScriptRenderer.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Map;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.application.Resource;
-
-/**
- * <p>This <code>Renderer</code> handles the rendering of external <code>script</code>
- * references.</p>
- */
-public class ScriptRenderer extends ScriptStyleBaseRenderer {
-    
-    
-    @Override
-    protected void startElement(ResponseWriter writer, UIComponent component) throws IOException {
-        writer.startElement("script", component);
-        writer.writeAttribute("type", "text/javascript", "type");
-    }
-    
-    @Override
-    protected void endElement(ResponseWriter writer) throws IOException {
-        writer.endElement("script");
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        Map<String,Object> attributes = component.getAttributes();
-        Map<Object, Object> contextMap = context.getAttributes();
-
-        String name = (String) attributes.get("name");
-        String library = (String) attributes.get("library");
-
-        String key = name + library;
-        
-        if (null == name) {
-            return;
-        }
-        
-        // Ensure this script is not rendered more than once per request
-        if (contextMap.containsKey(key)) {
-            return;
-        }
-        contextMap.put(key, Boolean.TRUE);
-
-        // Special case of scripts that have query strings
-        // These scripts actually use their query strings internally, not externally
-        // so we don't need the resource to know about them
-        int queryPos = name.indexOf("?");
-        String query = null;
-        if (queryPos > -1 && name.length() > queryPos) {
-            query = name.substring(queryPos+1);
-            name = name.substring(0,queryPos);
-        }
-
-
-        Resource resource = context.getApplication().getResourceHandler()
-              .createResource(name, library);
-
-        ResponseWriter writer = context.getResponseWriter();
-        this.startElement(writer, component);
-
-        String resourceSrc;
-        if (resource == null) {
-            resourceSrc = "RES_NOT_FOUND";
-        } else {
-            resourceSrc = resource.getRequestPath();
-            if (query != null) {
-                resourceSrc = resourceSrc +
-                        ((resourceSrc.indexOf("?") > -1) ? "+" : "?") +
-                        query;
-            }
-        }
-
-        writer.writeURIAttribute("src", resourceSrc, "src");
-        this.endElement(writer);
-        super.encodeEnd(context, component);
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ScriptStyleBaseRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ScriptStyleBaseRenderer.java
deleted file mode 100644
index 7249cc6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/ScriptStyleBaseRenderer.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.util.FacesLogger;
-
-import java.io.IOException;
-import java.util.Map;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.faces.application.FacesMessage;
-import javax.faces.application.ProjectStage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.Renderer;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.event.ListenerFor;
-
-/**
- * <p>Base class for shared behavior between Script and Stylesheet renderers.
- * Maybe composition would be better, but inheritance is easier</p>
- */
- at ListenerFor(systemEventClass=PostAddToViewEvent.class)
-public abstract class ScriptStyleBaseRenderer extends Renderer implements ComponentSystemEventListener {
-
-    private static final String COMP_KEY =
-          ScriptStyleBaseRenderer.class.getName() + "_COMPOSITE_COMPONENT";
-
-    // Log instance for this class
-    protected static final Logger logger = FacesLogger.RENDERKIT.getLogger();
-
-    /*
-     * Indicates that the component associated with this Renderer has already
-     * been added to the facet in the view.
-     */ 
-
-    /* When this method is called, we know that there is a component
-     * with a script renderer somewhere in the view.  We need to make it
-     * so that when an element with a name given by the value of the optional
-     * "target" component attribute is encountered, this component 
-     * can be called upon to render itself.
-     * This method will add the component (associated with this Renderer)
-     * to a facet in the view only if a "target" component attribute is set.
-     * 
-     */
-    public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
-        UIComponent component = event.getComponent();
-        FacesContext context = FacesContext.getCurrentInstance();
-        
-        String target = verifyTarget((String) component.getAttributes().get("target"));
-        if (target != null) {
-            // We're checking for a composite component here as if the resource
-            // is relocated, it may still require it's composite component context
-            // in order to properly render.  Store it for later use by
-            // encodeBegin() and encodeEnd().
-            UIComponent cc = UIComponent.getCurrentCompositeComponent(context);
-            if (cc != null) {
-                component.getAttributes().put(COMP_KEY, cc.getClientId(context));
-            }
-            context.getViewRoot().addComponentResource(context, component, target);
-
-        }
-    }
-    
-    @Override
-    public final void decode(FacesContext context, UIComponent component) {
-        // no-op
-    }
-
-    @Override
-    public final boolean getRendersChildren() {
-        return true;
-    }
-
-
-    /**
-     * If overridden, this method (i.e. super.encodeEnd) should be called
-     * <em>last</em> within the overridding implementation.
-     */
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        // Remove the key to prevent issues with state saving...
-        String ccID = (String) component.getAttributes().get(COMP_KEY);
-        if (ccID != null) {
-            // the first pop maps to the component we're rendering.
-            // the second pop maps to the composite component that was pushed
-            // in this renderer's encodeBegin implementation.
-            // re-push the current component to reset the original context
-            component.popComponentFromEL(context);
-            component.popComponentFromEL(context);
-            component.pushComponentToEL(context, component);
-        }
-    }
-
-
-    /**
-     * If overridden, this method (i.e. super.encodeBegin) should be called
-     * <em>first</em> within the overridding implementation.
-     */
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        String ccID = (String) component.getAttributes().get(COMP_KEY);
-        UIComponent cc = context.getViewRoot().findComponent(':' + ccID);
-        UIComponent curCC = UIComponent.getCurrentCompositeComponent(context);
-        if (cc != curCC) {
-            // the first pop maps to the component we're rendering.
-            // push the composite component to the 'stack' and then re-push
-            // the component we're rendering so the current component is
-            // correct.
-            component.popComponentFromEL(context);
-            component.pushComponentToEL(context, cc);
-            component.pushComponentToEL(context, component);
-        } 
-
-    }
-        
-    @Override
-    public final void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-        Map<String,Object> attributes = component.getAttributes();
-
-        String name = (String) attributes.get("name");
-        int childCount = component.getChildCount();
-        boolean renderChildren = (0 < childCount);
-        
-        // If we have no "name" attribute...
-        if (null == name) {
-            // and no child content...
-            if (0 == childCount) {
-                // this is user error, so put up a message if desired
-                if (context.isProjectStage(ProjectStage.Development)) {
-                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN,
-                            "outputScript with no library, no name, and no body content",
-                            "Is body content intended?");
-                    context.addMessage(component.getClientId(context), message);
-                }
-                // We have no children, but don't bother with the method 
-                // invocation anyway.
-                renderChildren = false;
-            }            
-        } else if (0 < childCount) {
-            // If we have a "name" and also have child content, ignore
-            // the child content and log a message.
-        	if (logger.isLoggable(Level.INFO)) {
-        		logger.info("outputScript with \"name\" attribute and nested content.  Ignoring nested content.");
-        	}
-            renderChildren = false;
-        }
-        if (renderChildren) {
-            ResponseWriter writer = context.getResponseWriter();
-            startElement(writer, component);
-            super.encodeChildren(context, component);
-            endElement(writer);
-        }
-        
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Allow the subclass to customize the start element content</p>
-     */
-    protected abstract void startElement(ResponseWriter writer, 
-                                         UIComponent component) throws IOException;
-    
-    /**
-     * <p>Allow the subclass to customize the start element content</p>
-     */
-    protected abstract void endElement(ResponseWriter writer) throws IOException;
-    
-    /**
-     * <p>Allow a subclass to control what's a valid value for "target".
-     */
-    protected String verifyTarget(String toVerify) {
-        return toVerify;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/SecretRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/SecretRenderer.java
deleted file mode 100644
index 2bb423a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/SecretRenderer.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// SecretRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/**
- * <B>SecretRenderer</B> is a class that renders the current value of
- * <code>UIInput<code> component as a password field.
- */
-
-public class SecretRenderer extends HtmlBasicInputRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.INPUTSECRET);
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected void getEndTextToRender(FacesContext context,
-                                      UIComponent component,
-                                      String currentValue)
-          throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String redisplay = String.valueOf(component.getAttributes().get("redisplay"));
-        if (redisplay == null || !redisplay.equals("true")) {
-            currentValue = "";
-        }
-
-        writer.startElement("input", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        writer.writeAttribute("type", "password", "type");
-        writer.writeAttribute("name", component.getClientId(context),
-                              "clientId");
-
-        String autoComplete = (String)
-              component.getAttributes().get("autocomplete");
-        if (autoComplete != null) {
-            // only output the autocomplete attribute if the value
-            // is 'off' since its lack of presence will be interpreted
-            // as 'on' by the browser
-            if ("off".equals(autoComplete)) {
-                writer.writeAttribute("autocomplete",
-                                      "off",
-                                      "autocomplete");
-            }
-        }
-
-        // render default text specified
-        if (currentValue != null) {
-            writer.writeAttribute("value", currentValue, "value");
-        }
-
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES,
-                                                getNonOnChangeBehaviors(component));
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-        RenderKitUtils.renderOnchange(context, component, false);
-
-        String styleClass;
-        if (null != (styleClass = (String)
-              component.getAttributes().get("styleClass"))) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-
-        writer.endElement("input");
-
-    }
-
-} // end of class SecretRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/SelectManyCheckboxListRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/SelectManyCheckboxListRenderer.java
deleted file mode 100644
index 95824e1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/SelectManyCheckboxListRenderer.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- *
- * (C) Copyright International Business Machines Corp., 2001,2002
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U. S. Copyright Office.   
- */
-
-// SelectManyCheckboxListRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.ValueHolder;
-import javax.faces.component.UINamingContainer;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.convert.Converter;
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-
-/**
- * <B>SelectManyCheckboxListRenderer</B> is a class that renders the
- * current value of <code>UISelectMany<code> component as a list of checkboxes.
- */
-
-public class SelectManyCheckboxListRenderer extends MenuRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.SELECTMANYCHECKBOX);
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String alignStr;
-        Object borderObj;
-        boolean alignVertical = false;
-        int border = 0;
-
-        if (null !=
-            (alignStr = (String) component.getAttributes().get("layout"))) {
-            alignVertical = alignStr.equalsIgnoreCase("pageDirection");
-        }
-        if (null != (borderObj = component.getAttributes().get("border"))) {
-            border = (Integer) borderObj;
-        }
-
-        Converter converter = null;
-        if(component instanceof ValueHolder) {
-            converter = ((ValueHolder)component).getConverter();
-        }
-
-        renderBeginText(component, border, alignVertical, context, true);
-
-        Iterator<SelectItem> items =
-              RenderKitUtils.getSelectItems(context, component);
-
-        Object currentSelections = getCurrentSelectedValues(component);
-        Object[] submittedValues = getSubmittedSelectedValues(component);
-        Map<String,Object> attributes = component.getAttributes();
-        OptionComponentInfo optionInfo =
-              new OptionComponentInfo((String) attributes.get("disabledClass"),
-                                      (String) attributes.get("enabledClass"),
-                                      (String) attributes.get("unselectedClass"),
-                                      (String) attributes.get("selectedClass"),
-                                      Util.componentIsDisabled(component),
-                                      isHideNoSelection(component));
-        int idx = -1;
-        while (items.hasNext()) {
-            SelectItem curItem = items.next();
-            idx++;
-            // If we come across a group of options, render them as a nested
-            // table.
-            if (curItem instanceof SelectItemGroup) {
-                // write out the label for the group.
-                if (curItem.getLabel() != null) {
-                    if (alignVertical) {
-                        writer.startElement("tr", component);
-                    }
-                    writer.startElement("td", component);
-                    writer.writeText(curItem.getLabel(), component, "label");
-                    writer.endElement("td");
-                    if (alignVertical) {
-                        writer.endElement("tr");
-                    }
-
-                }
-                if (alignVertical) {
-                    writer.startElement("tr", component);
-                }
-                writer.startElement("td", component);
-                writer.writeText("\n", component, null);
-                renderBeginText(component, 0, alignVertical,
-                                context, false);
-                // render options of this group.
-                SelectItem[] itemsArray =
-                      ((SelectItemGroup) curItem).getSelectItems();
-                for (int i = 0; i < itemsArray.length; ++i) {
-                    renderOption(context,
-                                 component,
-                                 converter,
-                                 itemsArray[i],
-                                 currentSelections,
-                                 submittedValues,
-                                 alignVertical,
-                                 i,
-                                 optionInfo);
-                }
-                renderEndText(component, alignVertical, context);
-                writer.endElement("td");
-                if (alignVertical) {
-                    writer.endElement("tr");
-                    writer.writeText("\n", component, null);
-                }
-            } else {
-                renderOption(context,
-                             component,
-                             converter,
-                             curItem,
-                             currentSelections,
-                             submittedValues,
-                             alignVertical,
-                             idx,
-                             optionInfo);
-            }
-        }
-
-        renderEndText(component, alignVertical, context);
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * We override isBehaviorSource since the ID of the activated check box
-     * will have been augmented with the option number.
-     *
-     * @see HtmlBasicRenderer#isBehaviorSource(FacesContext, String, String)
-     */
-    @Override
-    protected boolean isBehaviorSource(FacesContext ctx,
-                                       String behaviorSourceId,
-                                       String componentClientId) {
-
-        if (behaviorSourceId == null) {
-            return false;
-        }
-        char sepChar = UINamingContainer.getSeparatorChar(ctx);
-        String actualBehaviorId =
-              behaviorSourceId.substring(0, behaviorSourceId.lastIndexOf(sepChar));
-        return (actualBehaviorId.equals(componentClientId));
-
-    }
-
-
-    protected void renderBeginText(UIComponent component, int border,
-                                   boolean alignVertical, FacesContext context,
-                                   boolean outerTable)
-          throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        writer.startElement("table", component);
-        if (border != Integer.MIN_VALUE) {
-            writer.writeAttribute("border", border, "border");
-        }
-
-        // render style and styleclass attribute on the outer table instead of 
-        // rendering it as pass through attribute on every option in the list.
-        if (outerTable) {
-            // render "id" only for outerTable.
-            if (shouldWriteIdAttribute(component)) {
-                writeIdAttributeIfNecessary(context, writer, component);
-            }
-            String styleClass = (String) component.getAttributes().get(
-                  "styleClass");
-            String style = (String) component.getAttributes().get("style");
-            if (styleClass != null) {
-                writer.writeAttribute("class", styleClass, "class");
-            }
-            if (style != null) {
-                writer.writeAttribute("style", style, "style");
-            }
-        }
-        writer.writeText("\n", component, null);
-
-        if (!alignVertical) {
-            writer.writeText("\t", component, null);
-            writer.startElement("tr", component);
-            writer.writeText("\n", component, null);
-        }
-
-    }
-
-
-    protected void renderEndText(UIComponent component,
-                                 boolean alignVertical,
-                                 FacesContext context)
-          throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        if (!alignVertical) {
-            writer.writeText("\t", component, null);
-            writer.endElement("tr");
-            writer.writeText("\n", component, null);
-        }
-        writer.endElement("table");
-
-    }
-
-
-    protected void renderOption(FacesContext context,
-                                UIComponent component,
-                                Converter converter,
-                                SelectItem curItem,
-                                Object currentSelections,
-                                Object[] submittedValues,
-                                boolean alignVertical,
-                                int itemNumber,
-                                OptionComponentInfo optionInfo) throws IOException {
-
-
-        String valueString = getFormattedValue(context, component,
-                                               curItem.getValue(), converter);
-
-        Object valuesArray;
-        Object itemValue;
-        if (submittedValues != null) {
-            valuesArray = submittedValues;
-            itemValue = valueString;
-        } else {
-            valuesArray = currentSelections;
-            itemValue = curItem.getValue();
-        }
-
-        RequestStateManager.set(context,
-                                RequestStateManager.TARGET_COMPONENT_ATTRIBUTE_NAME,
-                                component);
-
-        boolean isSelected = isSelected(context, component, itemValue, valuesArray, converter);
-        if (optionInfo.isHideNoSelection()
-                && curItem.isNoSelectionOption()
-                && currentSelections != null
-                && !isSelected) {
-            return;
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert (writer != null);
-
-        if (alignVertical) {
-            writer.writeText("\t", component, null);
-            writer.startElement("tr", component);
-            writer.writeText("\n", component, null);
-        }
-        writer.startElement("td", component);
-        writer.writeText("\n", component, null);
-
-        writer.startElement("input", component);
-        writer.writeAttribute("name", component.getClientId(context),
-                              "clientId");
-        String idString = component.getClientId(context)
-                          + UINamingContainer.getSeparatorChar(context)
-                          + Integer.toString(itemNumber);
-        writer.writeAttribute("id", idString, "id");
-
-        writer.writeAttribute("value", valueString, "value");
-        writer.writeAttribute("type", "checkbox", null);
-
-        if (isSelected) {
-            writer.writeAttribute(getSelectedTextString(), Boolean.TRUE, null);
-        }
-
-        // Don't render the disabled attribute twice if the 'parent'
-        // component is already marked disabled.
-        if (!optionInfo.isDisabled()) {
-            if (curItem.isDisabled()) {
-                writer.writeAttribute("disabled", true, "disabled");
-            }
-        }
-
-        // Apply HTML 4.x attributes specified on UISelectMany component to all
-        // items in the list except styleClass and style which are rendered as
-        // attributes of outer most table.
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES,
-                                                getNonOnClickSelectBehaviors(component));
-
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-        
-        RenderKitUtils.renderSelectOnclick(context, component, true);
-
-        writer.endElement("input");
-        writer.startElement("label", component);
-        writer.writeAttribute("for", idString, "for");
-
-        // Set up the label's class, if appropriate
-        StringBuilder labelClass = new StringBuilder();
-        String style;
-        // If disabledClass or enabledClass set, add it to the label's class
-        if (optionInfo.isDisabled() || curItem.isDisabled()) {
-            style = optionInfo.getDisabledClass();
-        } else {  // enabled
-            style = optionInfo.getEnabledClass();
-        }
-        if (style != null) {
-            labelClass.append(style);
-        }
-        // If selectedClass or unselectedClass set, add it to the label's class
-        if (isSelected(context, component, itemValue, valuesArray, converter)) {
-            style = optionInfo.getSelectedClass();
-        } else { // not selected
-            style = optionInfo.getUnselectedClass();
-        }
-        if (style != null) {
-            if (labelClass.length() > 0) {
-                labelClass.append(' ');
-            }
-            labelClass.append(style);
-        }
-        writer.writeAttribute("class", labelClass.toString(), "labelClass");
-        String itemLabel = curItem.getLabel();
-        if (itemLabel == null) {
-            itemLabel = valueString;
-        }
-        writer.writeText(" ", component, null);
-        if (!curItem.isEscape()) {
-            // It seems the ResponseWriter API should
-            // have a writeText() with a boolean property
-            // to determine if it content written should
-            // be escaped or not.
-            writer.write(itemLabel);
-        } else {
-            writer.writeText(itemLabel, component, "label");
-        }
-        if (isSelected(context, component, itemValue, valuesArray, converter)) {
-            
-        } else { // not selected
-            
-        }
-        writer.endElement("label");
-        writer.endElement("td");
-        writer.writeText("\n", component, null);
-        if (alignVertical) {
-            writer.writeText("\t", component, null);
-            writer.endElement("tr");
-            writer.writeText("\n", component, null);
-        }
-    }
-
-
-    // ------------------------------------------------- Package Private Methods
-
-
-    String getSelectedTextString() {
-
-        return "checked";
-
-    }
-
-} // end of class SelectManyCheckboxListRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/StylesheetRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/StylesheetRenderer.java
deleted file mode 100644
index 7439ba4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/StylesheetRenderer.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-import java.util.Map;
-
-import javax.faces.application.Resource;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-/**
- * <p>This <code>Renderer</code> handles the rendering of external <code>stylesheet</code>
- * references.</p>
- */
-public class StylesheetRenderer extends ScriptStyleBaseRenderer {
-
-
-    @Override
-    protected void startElement(ResponseWriter writer, UIComponent component) throws IOException {
-        writer.startElement("style", component);
-        writer.writeAttribute("type", "text/css", "type");
-    }
-    
-    @Override
-    protected void endElement(ResponseWriter writer) throws IOException {
-        writer.endElement("style");
-    }
-
-    @Override
-    protected String verifyTarget(String toVerify) {
-        return "head";
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        Map<String,Object> attributes = component.getAttributes();
-        Map<Object, Object> contextMap = context.getAttributes();
-
-        String name = (String) attributes.get("name");
-        String library = (String) attributes.get("library");
-        String key = name + library;
-        
-        if (null == name) {
-            return;
-        }
-        
-        // Ensure this stylesheet is not rendered more than once per request
-        if (contextMap.containsKey(key)) {
-            return;
-        }
-        contextMap.put(key, Boolean.TRUE);
-        
-        Resource resource = context.getApplication().getResourceHandler()
-              .createResource(name, library);
-
-        ResponseWriter writer = context.getResponseWriter();
-        writer.startElement("link", component);
-        writer.writeAttribute("type", "text/css", "type");
-        writer.writeAttribute("rel", "stylesheet", "rel");
-        writer.writeURIAttribute("href",
-                              ((resource != null)
-                                  ? resource.getRequestPath()
-                                  : "RES_NOT_FOUND"),
-                              "href");
-        writer.endElement("link");
-        super.encodeEnd(context, component);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TableRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TableRenderer.java
deleted file mode 100644
index 681e6db..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TableRenderer.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ArrayList;
-
-import javax.faces.component.UIColumn;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIData;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.util.Util;
-
-/** <p>Render a {@link UIData} component as a two-dimensional table.</p> */
-
-public class TableRenderer extends BaseTableRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.DATATABLE);
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        UIData data = (UIData) component;
-        data.setRowIndex(-1);
-
-        // Render the beginning of the table
-        ResponseWriter writer = context.getResponseWriter();
-
-        renderTableStart(context, component, writer, ATTRIBUTES);
-
-        // Render the caption (if any)
-        renderCaption(context, data, writer);
-
-        // Render column groups (if any)
-        renderColumnGroups(context, data);
-
-        // Render the header facets (if any)
-        renderHeader(context, component, writer);
-
-        // Render the footer facets (if any)
-        renderFooter(context, component, writer);
-
-    }
-
-
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncodeChildren(component)) {
-            return;
-        }
-
-        UIData data = (UIData) component;
-
-        ResponseWriter writer = context.getResponseWriter();
-        
-        // Check if any columns are being rendered, if not
-        // render the minimal markup and exit
-        TableMetaInfo info = getMetaInfo(context, data);
-        if(info.columns.isEmpty()) {
-        	renderEmptyTableBody(writer,data);
-        	return;
-        }
-        // Iterate over the rows of data that are provided
-        int processed = 0;
-        int rowIndex = data.getFirst() - 1;
-        int rows = data.getRows();
-        List<Integer> bodyRows = getBodyRows(data);
-        boolean hasBodyRows = (bodyRows != null && !bodyRows.isEmpty());
-        boolean wroteTableBody = false;
-        if (!hasBodyRows) {
-            renderTableBodyStart(context, component, writer);
-        }
-        boolean renderedRow = false;
-        while (true) {
-
-            // Have we displayed the requested number of rows?
-            if ((rows > 0) && (++processed > rows)) {
-                break;
-            }
-            // Select the current row
-            data.setRowIndex(++rowIndex);
-            if (!data.isRowAvailable()) {
-                break; // Scrolled past the last row
-            }
-
-            // render any table body rows
-            if (hasBodyRows && bodyRows.contains(data.getRowIndex())) {
-                if (wroteTableBody) {
-                    writer.endElement("tbody");
-                }
-                writer.startElement("tbody", data);
-                wroteTableBody = true;
-            }
-
-            // Render the beginning of this row
-            renderRowStart(context, component, writer);
-
-            // Render the row content
-            renderRow(context, component, null, writer);
-
-            // Render the ending of this row
-            renderRowEnd(context, component, writer);
-            renderedRow = true;
-
-        }
-
-        // fill an empty tbody, if no row has been rendered
-        if(!renderedRow) {
-        	this.renderEmptyTableRow(writer, data);
-        }
-        renderTableBodyEnd(context, component, writer);
-
-        // Clean up after ourselves
-        data.setRowIndex(-1);
-
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncode(component)) {
-            return;
-        }
-
-        clearMetaInfo(context, component);
-        ((UIData) component).setRowIndex(-1);
-
-        // Render the ending of this table
-        renderTableEnd(context, component, context.getResponseWriter());
-
-    }
-
-    @Override
-    public boolean getRendersChildren() {
-
-        return true;
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    private List<Integer> getBodyRows(UIData data) {
-
-        List<Integer> result = null;
-        String bodyRows = (String) data.getAttributes().get("bodyrows");
-        if (bodyRows != null) {
-            String [] rows = Util.split(bodyRows, ",");
-            if (rows != null) {
-                result = new ArrayList<Integer>(rows.length);
-                for (String curRow : rows) {
-                    result.add(Integer.valueOf(curRow));
-                }
-            }
-        }
-
-        return result;
-
-     }
-
-
-    protected void renderColumnGroups(FacesContext context,
-                                      UIComponent table)
-          throws IOException {
-
-        UIComponent colGroups = getFacet(table, "colgroups");
-        if (colGroups != null) {
-            encodeRecursive(context, colGroups);
-        }
-
-    }
-
-    protected void renderFooter(FacesContext context,
-                                UIComponent table,
-                                ResponseWriter writer)
-          throws IOException {
-
-        TableMetaInfo info = getMetaInfo(context, table);
-        UIComponent footer = getFacet(table, "footer");
-        // check if any footer has to be rendered
-        if (footer == null && !info.hasFooterFacets) {
-            return;
-        }
-        String footerClass = (String) table.getAttributes().get("footerClass");
-        writer.startElement("tfoot", table);
-        writer.writeText("\n", table, null);
-        if (info.hasFooterFacets) {
-            writer.startElement("tr", table);
-            writer.writeText("\n", table, null);
-            for (UIColumn column : info.columns) {
-                String columnFooterClass =
-                      (String) column.getAttributes().get("footerClass");
-                writer.startElement("td", column);
-                if (columnFooterClass != null) {
-                    writer.writeAttribute("class", columnFooterClass,
-                                          "columnFooterClass");
-                } else if (footerClass != null) {
-                    writer.writeAttribute("class", footerClass, "footerClass");
-                }
-                UIComponent facet = getFacet(column, "footer");
-                if (facet != null) {
-                    encodeRecursive(context, facet);
-                }
-                writer.endElement("td");
-                writer.writeText("\n", table, null);
-            }
-            renderRowEnd(context, table, writer);
-        }
-        if (footer != null) {
-            writer.startElement("tr", footer);
-            writer.startElement("td", footer);
-            if (footerClass != null) {
-                writer.writeAttribute("class", footerClass, "footerClass");
-            }
-            if(info.columns.size()>1) {
-            	writer.writeAttribute("colspan", String.valueOf(info.columns.size()), null);
-            }
-            encodeRecursive(context, footer);
-            writer.endElement("td");
-            renderRowEnd(context, table, writer);
-        }
-        writer.endElement("tfoot");
-        writer.writeText("\n", table, null);
-
-    }
-
-    protected void renderHeader(FacesContext context,
-                                UIComponent table,
-                                ResponseWriter writer)
-    throws IOException {
-
-        TableMetaInfo info = getMetaInfo(context, table);
-        UIComponent header = getFacet(table, "header");
-        // check if any header has to be rendered
-        if(header==null && !info.hasHeaderFacets) {
-        	return;
-        }
-        String headerClass = (String) table.getAttributes().get("headerClass");
-        writer.startElement("thead", table);
-        writer.writeText("\n", table, null);
-        if (header != null) {
-            writer.startElement("tr", header);
-            writer.startElement("th", header);
-            if (headerClass != null) {
-                writer.writeAttribute("class", headerClass, "headerClass");
-            }
-            if(info.columns.size()>1) {
-            	writer.writeAttribute("colspan", String.valueOf(info.columns.size()), null);
-            }
-            writer.writeAttribute("scope", "colgroup", null);
-            encodeRecursive(context, header);
-            writer.endElement("th");
-            renderRowEnd(context, table, writer);
-        }
-        if (info.hasHeaderFacets) {
-            writer.startElement("tr", table);
-            writer.writeText("\n", table, null);
-            for (UIColumn column : info.columns) {
-                String columnHeaderClass =
-                      (String) column.getAttributes().get("headerClass");
-                writer.startElement("th", column);
-                if (columnHeaderClass != null) {
-                    writer.writeAttribute("class", columnHeaderClass,
-                                          "columnHeaderClass");
-                } else if (headerClass != null) {
-                    writer.writeAttribute("class", headerClass, "headerClass");
-                }
-                writer.writeAttribute("scope", "col", null);
-                UIComponent facet = getFacet(column, "header");
-                if (facet != null) {
-                    encodeRecursive(context, facet);
-                }
-                writer.endElement("th");
-                writer.writeText("\n", table, null);
-            }
-            renderRowEnd(context, table, writer);
-        }
-        writer.endElement("thead");
-        writer.writeText("\n", table, null);
-
-    }
-
-
-    protected void renderRow(FacesContext context,
-                             UIComponent table,
-                             UIComponent child,
-                             ResponseWriter writer) throws IOException {
-
-        // Iterate over the child UIColumn components for each row
-        TableMetaInfo info = getMetaInfo(context, table);
-        info.newRow();
-        for (UIColumn column : info.columns) {
-
-            // Render the beginning of this cell
-            boolean isRowHeader = Boolean.TRUE.equals(column.getAttributes().get("rowHeader"));
-            if (isRowHeader) {
-                writer.startElement("th", column);
-                writer.writeAttribute("scope", "row", null);
-            } else {
-                writer.startElement("td", column);
-            }
-
-            String columnClass = info.getCurrentColumnClass();
-            if (columnClass != null) {
-                writer.writeAttribute("class",
-                                      columnClass,
-                                      "columnClasses");
-            }
-
-            // Render the contents of this cell by iterating over
-            // the kids of our kids
-            for (Iterator<UIComponent> gkids = getChildren(column);
-                 gkids.hasNext();) {
-                encodeRecursive(context, gkids.next());
-            }
-
-            // Render the ending of this cell
-            if (isRowHeader) {
-                writer.endElement("th");
-            } else {
-                writer.endElement("td");
-            }
-            writer.writeText("\n", table, null);
-
-        }
-
-    }
-
-
-    // ------------------------------------------------------- Private Methods
-        
-    private void renderEmptyTableBody(final ResponseWriter writer, 
-    								  final UIComponent component) 
-    		throws IOException {
-    	
-    	writer.startElement("tbody", component);
-    	this.renderEmptyTableRow(writer, component);
-    	writer.endElement("tbody");
-    
-    }
-    
-    private void renderEmptyTableRow(final ResponseWriter writer, 
-    							     final UIComponent component) 
-    		throws IOException {
-    	
-    	writer.startElement("tr", component);
-    	writer.startElement("td", component);
-    	writer.endElement("td");
-    	writer.endElement("tr");
-    
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TextRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TextRenderer.java
deleted file mode 100644
index 4c385eb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TextRenderer.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TextRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.config.WebConfiguration;
-
-/**
- * <B>TextRenderer</B> is a class that renders the current value of
- * <code>UIInput<code> or <code>UIOutput<code> component as a input field or
- * static text.
- */
-public class TextRenderer extends HtmlBasicInputRenderer {
-
-
-    private static final Attribute[] INPUT_ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.INPUTTEXT);
-    private static final Attribute[] OUTPUT_ATTRIBUTES = 
-          AttributeManager.getAttributes(AttributeManager.Key.OUTPUTTEXT);
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected void getEndTextToRender(FacesContext context,
-                                      UIComponent component,
-                                      String currentValue)
-          throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-        boolean shouldWriteIdAttribute = false;
-        boolean isOutput = false;
-
-        String style = (String) component.getAttributes().get("style");
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        String dir = (String) component.getAttributes().get("dir");
-        String lang = (String) component.getAttributes().get("lang");
-        String title = (String) component.getAttributes().get("title");
-        if (component instanceof UIInput) {
-            writer.startElement("input", component);
-            writeIdAttributeIfNecessary(context, writer, component);
-            writer.writeAttribute("type", "text", null);
-            writer.writeAttribute("name", (component.getClientId(context)),
-                                  "clientId");
-
-            // only output the autocomplete attribute if the value
-            // is 'off' since its lack of presence will be interpreted
-            // as 'on' by the browser
-            if ("off".equals(component.getAttributes().get("autocomplete"))) {
-                writer.writeAttribute("autocomplete",
-                                      "off",
-                                      "autocomplete");
-            }
-
-            // render default text specified
-            if (currentValue != null) {
-                writer.writeAttribute("value", currentValue, "value");
-            }
-            if (null != styleClass) {
-                writer.writeAttribute("class", styleClass, "styleClass");
-            }
-
-            // style is rendered as a passthur attribute
-            RenderKitUtils.renderPassThruAttributes(context,
-                                                    writer,
-                                                    component,
-                                                    INPUT_ATTRIBUTES,
-                                                    getNonOnChangeBehaviors(component));
-            RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-            RenderKitUtils.renderOnchange(context, component, false);
-
-
-            writer.endElement("input");
-
-        } else if (isOutput = (component instanceof UIOutput)) {
-            if (styleClass != null
-                 || style != null
-                 || dir != null
-                 || lang != null
-                 || title != null
-                 || (shouldWriteIdAttribute = shouldWriteIdAttribute(component))) {
-                writer.startElement("span", component);
-                writeIdAttributeIfNecessary(context, writer, component);
-                if (null != styleClass) {
-                    writer.writeAttribute("class", styleClass, "styleClass");
-                }
-                // style is rendered as a passthru attribute
-                RenderKitUtils.renderPassThruAttributes(context,
-                                                        writer,
-                                                        component,
-                                                        OUTPUT_ATTRIBUTES);
-
-            }
-            if (currentValue != null) {
-                Object val = component.getAttributes().get("escape");
-                if ((val != null) && Boolean.valueOf(val.toString())) {
-                    writer.writeText(currentValue, component, "value");
-                } else {
-                    writer.write(currentValue);
-                }
-            }
-        }
-        if (isOutput && (styleClass != null
-                 || style != null
-                 || dir != null
-                 || lang != null
-                 || title != null
-                 || (shouldWriteIdAttribute))) {
-            writer.endElement("span");
-        }
-
-    }
-
-
-    @Override
-    public boolean getRendersChildren() {
-        return true;
-    }
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-          throws IOException {
-
-        boolean renderChildren = WebConfiguration.getInstance()
-                .isOptionEnabled(WebConfiguration.BooleanWebContextInitParameter.AllowTextChildren);
-
-        if (!renderChildren) {
-            return;
-        }
-
-        rendererParamsNotNull(context, component);
-
-        if (!shouldEncodeChildren(component)) {
-            return;
-        }
-
-        if (component.getChildCount() > 0) {
-            for (UIComponent kid : component.getChildren()) {
-                encodeRecursive(context, kid);
-            }
-        }
-
-    }
-
-    // The testcase for this class is TestRenderers_2.java
-
-} // end of class TextRenderer
-
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TextareaRenderer.java b/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TextareaRenderer.java
deleted file mode 100644
index 019da97..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/renderkit/html_basic/TextareaRenderer.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TextareaRenderer.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageUtils;
-
-/**
- * <B>TextareaRenderer</B> is a class that renders the current value of
- * <code>UIInput<code> component as a Textarea.
- */
-
-public class TextareaRenderer extends HtmlBasicInputRenderer {
-
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.INPUTTEXTAREA);
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-          throws IOException {
-
-        rendererParamsNotNull(context, component);
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    @Override
-    protected void getEndTextToRender(FacesContext context,
-                                      UIComponent component,
-                                      String currentValue) throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert(writer != null);
-
-        String styleClass =
-              (String) component.getAttributes().get("styleClass");
-
-        writer.startElement("textarea", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-        writer.writeAttribute("name", component.getClientId(context),
-                              "clientId");
-        if (null != styleClass) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-
-        // style is rendered as a passthru attribute
-        RenderKitUtils.renderPassThruAttributes(context,
-                                                writer,
-                                                component,
-                                                ATTRIBUTES);
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-        RenderKitUtils.renderOnchange(context, component, false);
-        
-
-        // render default text specified
-        if (currentValue != null) {
-            writer.writeText(currentValue, component, "value");
-        }
-
-        writer.endElement("textarea");
-
-    }
-
-} // end of class TextareaRenderer
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/GroovySupportFilter.java b/jsf-ri/src/main/java/com/sun/faces/scripting/GroovySupportFilter.java
deleted file mode 100644
index 3cd6ad2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/GroovySupportFilter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting;
-
-import com.sun.faces.scripting.groovy.GroovyHelper;
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletContext;
-
-public class GroovySupportFilter implements Filter {
-
-    private boolean helperChecked;
-    private GroovyHelper helper;
-    private ServletContext sc;
-
-    public void init(FilterConfig filterConfig) throws ServletException {
-        sc = filterConfig.getServletContext();
-    }
-
-    public void doFilter(ServletRequest servletRequest,
-                         ServletResponse servletResponse,
-                         FilterChain filterChain)
-          throws IOException, ServletException {
-
-        if (!helperChecked) {
-            helper = GroovyHelper.getCurrentInstance(sc);
-            // if null at this point, it will be null for the remainder
-            // of the app.  Set a flag so that we don't continually hit
-            // the ServletContext looking up the helper.
-            helperChecked = true;
-        }
-        if (helper != null) {
-            helper.setClassLoader();
-        }
-        filterChain.doFilter(servletRequest, servletResponse);
-        
-    }
-
-    public void destroy() {
-        // no-op
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/ScriptManager.java b/jsf-ri/src/main/java/com/sun/faces/scripting/ScriptManager.java
deleted file mode 100644
index 4743539..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/ScriptManager.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.scripting;
-
-import javax.faces.context.ExternalContext;
-import java.util.Set;
-
-public interface ScriptManager {
-    /**
-     * This method should return all of the scripts available
-     */
-    Set<String> getScripts();
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ActionListenerProxy.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ActionListenerProxy.java
deleted file mode 100644
index 63bc7d7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ActionListenerProxy.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.scripting.groovy;
-
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.FacesException;
-
-/**
- * Proxy instance for a groovy-based ActionListener.  This allows the ActionListener
- * to remain registered with the Application while picking up changes at runtime
- * from the associated groovy script.
- */
-public class ActionListenerProxy implements ActionListener {
-
-    private String scriptName;
-    private ActionListener alDelegate;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ActionListenerProxy(String scriptName,
-                               ActionListener alDelegate) {
-
-        this.scriptName = scriptName;
-        this.alDelegate = alDelegate;
-
-    }
-
-
-    // --------------------------------------------- Methods from ActionListener
-
-
-    public void processAction(ActionEvent event)
-    throws AbortProcessingException {
-
-        getGroovyDelegate().processAction(event);
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private ActionListener getGroovyDelegate() {
-
-        try {
-            return ((ActionListener) GroovyHelper.newInstance(scriptName,
-                                                              ActionListener.class,
-                                                              alDelegate));
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ELResolverProxy.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ELResolverProxy.java
deleted file mode 100644
index 42fa7ac..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ELResolverProxy.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-
-import javax.el.ELContext;
-import javax.el.ELResolver;
-import javax.faces.FacesException;
-
-/**
- * Proxy instance for a groovy-based ELResolvers.  This allows the ELResolver
- * to remain registered in the application while picking up changes at runtime
- * from the associated groovy script.
- */
-public class ELResolverProxy extends ELResolver {
-
-    private String scriptName;
-
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public ELResolverProxy(String scriptName) {
-        this.scriptName = scriptName;
-    }
-
-    // ------------------------------------------------- Methods from ELResolver
-
-
-    public Object getValue(ELContext elContext, Object o, Object o1) {
-        return getGroovyDelegate().getValue(elContext, o, o1);
-    }
-
-    public Class<?> getType(ELContext elContext, Object o, Object o1) {
-        return getGroovyDelegate().getType(elContext, o, o1);
-    }
-
-    public void setValue(ELContext elContext, Object o, Object o1, Object o2) {
-        getGroovyDelegate().setValue(elContext, o, o1, o2);
-    }
-
-    public boolean isReadOnly(ELContext elContext, Object o, Object o1) {
-        return getGroovyDelegate().isReadOnly(elContext, o, o1);
-    }
-
-    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext elContext,
-                                                             Object o) {
-        return getGroovyDelegate().getFeatureDescriptors(elContext, o);
-    }
-
-    public Class<?> getCommonPropertyType(ELContext elContext, Object o) {
-        return getGroovyDelegate().getCommonPropertyType(elContext, o);
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-   private ELResolver getGroovyDelegate() {
-
-       try {
-            return ((ELResolver) GroovyHelper.newInstance(scriptName));
-       } catch (Exception e) {
-           throw new FacesException(e);
-       }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelper.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelper.java
deleted file mode 100644
index f5edb09..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelper.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import com.sun.faces.util.Util;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.servlet.ServletContext;
-import java.lang.reflect.Constructor;
-import java.net.URL;
-import java.util.Set;
-
-/**
- * Base class for interfacing with Groovy.
- */
-public abstract class GroovyHelper {
-
-    public static boolean isGroovyAvailable(FacesContext ctx) {
-
-        return (ctx.getExternalContext().getApplicationMap().get("com.sun.faces.groovyhelper") != null);
-        
-    }
-
-    public static GroovyHelper getCurrentInstance(FacesContext ctx) {
-
-        return (GroovyHelper) ctx.getExternalContext().getApplicationMap().get("com.sun.faces.groovyhelper");
-
-    }
-
-
-    public static GroovyHelper getCurrentInstance(ServletContext sc) {
-        return (GroovyHelper) sc.getAttribute("com.sun.faces.groovyhelper");
-    }
-
-
-    public static GroovyHelper getCurrentInstance() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        if (ctx != null) {
-            return getCurrentInstance(ctx);
-        }
-        return null;
-
-    }
-    public abstract Class<?> loadScript(String name);
-
-    public static Object newInstance(String name, Class<?> type, Object root)
-    throws Exception {
-        Class<?> delegate = Util.loadClass(name, GroovyHelper.class);
-        try {
-            Constructor decorationCtor = requiresDecoration(delegate, type, root);
-            if (decorationCtor != null) {
-                return decorationCtor.newInstance(root);
-            } else {
-                return delegate.newInstance();
-            }
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-    }
-
-    public static Object newInstance(String name) throws Exception {
-        return newInstance(name, null, null);
-    }
-
-    public abstract void setClassLoader();
-    
-    public abstract void addURL(URL toAdd);
-
-    // --------------------------------------------------------- Private Methods
-
-
-     private static Constructor requiresDecoration(Class<?> groovyClass, Class<?> ctorArgument, Object root) {
-        if (root != null) {
-            try {
-                return groovyClass.getConstructor(ctorArgument);
-            } catch (Exception ignored) {
-            }
-        }
-        return null;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelperFactory.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelperFactory.java
deleted file mode 100644
index 520882e..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelperFactory.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-/**
- * This class exists to avoid having to have Groovy available at runtime.
- */
-public class GroovyHelperFactory {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    private static final String GROOVY_HELPER_IMPL =
-          "com.sun.faces.scripting.groovy.GroovyHelperImpl";
-
-    public static GroovyHelper createHelper() {
-        try {
-            if (Util.loadClass("groovy.util.GroovyScriptEngine", GroovyHelperFactory.class) != null) {
-                try {
-                    Class<?> c =
-                          Util.loadClass(GROOVY_HELPER_IMPL, GroovyHelperFactory.class);
-                    return (GroovyHelper) c.newInstance();
-                } catch (UnsupportedOperationException ignored) {
-                    if (LOGGER.isLoggable(Level.FINE)) {
-                        LOGGER.fine("Groovy runtime available, but WEB-INF/groovy directory not present."
-                                    + "  Groovy support will not be enabled.");
-                    }
-                } catch (Exception e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "Groovy support not available",
-                                   e);
-                    }
-                }
-            }
-        } catch (ClassNotFoundException ignored) {
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelperImpl.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelperImpl.java
deleted file mode 100644
index 101fbd7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyHelperImpl.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import groovy.util.GroovyScriptEngine;
-
-import javax.faces.FacesException;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-/**
- * Helper class to interface with the Groovy runtime.
- */
-class GroovyHelperImpl extends GroovyHelper {
-
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    private static final String SCRIPT_PATH = "/WEB-INF/groovy/";
-
-    private MojarraGroovyClassLoader loader;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    GroovyHelperImpl() throws Exception {
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        ExternalContext extContext = facesContext.getExternalContext();
-        ClassLoader curLoader = Thread.currentThread().getContextClassLoader();
-
-        URL combinedRoots[] = getResourceRoots(extContext, curLoader);
-
-        if (0 < combinedRoots.length) {
-            GroovyScriptEngine engine =
-                    new GroovyScriptEngine(combinedRoots, curLoader);
-//            Class<?> c = Util.loadClass("groovy.util.GroovyScriptEngine", GroovyHelperFactory.class);
-//            Constructor<?> ctor = c.getConstructor(URL[].class, ClassLoader.class);
-//            GroovyScriptEngine engine = (GroovyScriptEngine)ctor.newInstance(combinedRoots, curLoader);
-            loader = new MojarraGroovyClassLoader(engine);
-            if (LOGGER.isLoggable(Level.INFO)) {
-                LOGGER.log(Level.INFO,
-                        "Groovy support enabled.");
-            }
-            extContext.getApplicationMap().put("com.sun.faces.groovyhelper",
-                    this);
-        }
-
-    }
-
-    private URL[] getResourceRoots(ExternalContext extContext,
-                                   ClassLoader curLoader) throws IOException {
-        URL[] combinedRoots;
-        Enumeration<URL> classpathResourceEnumeration =
-                curLoader.getResources("META-INF/resources/");
-        List<URL> classpathResourceList = new ArrayList<URL>();
-        while (classpathResourceEnumeration.hasMoreElements()) {
-            classpathResourceList.add(classpathResourceEnumeration.nextElement());
-        }
-
-        // only called during init - safe to cast and save.
-        URL u = extContext.getResource(SCRIPT_PATH);
-        URL webappRoots[] = getWebappResourceRoots(extContext),
-                classpathRoots[] = new URL[classpathResourceList.size()];
-        classpathResourceList.toArray(classpathRoots);
-
-        if (null != u ||
-                0 < webappRoots.length ||
-                0 < classpathRoots.length) {
-            combinedRoots = new URL[webappRoots.length + classpathRoots.length +
-                    (null != u ? 1 : 0)];
-            System.arraycopy(webappRoots, 0,
-                    combinedRoots, 0,
-                    webappRoots.length);
-            System.arraycopy(classpathRoots, 0,
-                    combinedRoots, webappRoots.length,
-                    classpathRoots.length);
-            if (null != u) {
-                combinedRoots[webappRoots.length + classpathRoots.length] = u;
-            }
-        } else {
-            combinedRoots = new URL[0];
-        }
-
-        return combinedRoots;
-    }
-
-
-    private URL[] getWebappResourceRoots(ExternalContext extContext) {
-        URL[] result = null;
-        int size = 0, i = 0;
-        Set<String> resourceRoots = extContext.getResourcePaths("/resources/");
-        if (null != resourceRoots && !resourceRoots.isEmpty()) {
-            // Determine the size of script roots that end with "/"
-            for (String cur : resourceRoots) {
-                if (cur.endsWith("/")) {
-                    size++;
-                }
-            }
-            result = new URL[size];
-            for (String cur : resourceRoots) {
-                if (cur.endsWith("/")) {
-                    try {
-                        result[i++] = extContext.getResource(cur);
-                    } catch (MalformedURLException ex) {
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE, null, ex);
-                        }
-                    }
-                }
-            }
-        }
-        if (null == result) {
-            result = new URL[0];
-        }
-        return result;
-    }
-
-    public void addURL(URL toAdd) {
-        loader.getGroovyScriptEngine().getGroovyClassLoader().addURL(toAdd);
-    }
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public Class<?> loadScript(String name) {
-        try {
-            String script = name;
-            if (script.endsWith(".groovy")) {
-                script = script.substring(0, script.indexOf(".groovy"));
-            }
-            //return engine.loadScriptByName(script);
-            return Util.loadClass(script, this);
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-    }
-
-    public void setClassLoader() {
-        if (loader != null) {
-            Thread.currentThread().setContextClassLoader(loader);
-        }
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-    private static final class MojarraGroovyClassLoader extends URLClassLoader {
-
-        private GroovyScriptEngine gse;
-
-        public MojarraGroovyClassLoader(GroovyScriptEngine gse) {
-            super(new URL[0], gse.getGroovyClassLoader());
-            this.gse = gse;
-        }
-
-        public GroovyScriptEngine getGroovyScriptEngine() {
-            return gse;
-        }
-
-        @Override
-        public Class<?> loadClass(String name) throws ClassNotFoundException {
-            if (name == null) {
-                throw new NullPointerException();
-            }
-            Class<?> c;
-            try {
-                c = gse.getGroovyClassLoader().getParent().loadClass(name);
-            } catch (ClassNotFoundException cnfe) {
-                try {
-                    c = gse.loadScriptByName(name);
-                } catch (Exception e) {
-                    throw new ClassNotFoundException(name, e);
-                }
-            }
-            if (c == null) {
-                throw new ClassNotFoundException(name);
-            }
-            return c;
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyScriptManager.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyScriptManager.java
deleted file mode 100644
index b585f16..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/GroovyScriptManager.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import com.sun.faces.scripting.ScriptManager;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.context.ExternalContext;
-import javax.servlet.ServletContext;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public class GroovyScriptManager implements ScriptManager {
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    private static final String SCRIPT_PATH = "/WEB-INF/groovy/";
-    private static final String SUFFIX = ".groovy";
-    private ServletContext servletContext;
-
-    // Borrowed from AnnotationScanner.  Perhaps this should be made public somewhere
-    public static final Set<String> FACES_ANNOTATIONS;
-
-    static {
-        HashSet<String> annotations = new HashSet<String>(15, 1.0f);
-        Collections.addAll(annotations,
-                "javax.faces.component.FacesComponent",
-                "javax.faces.component.*",
-                "javax.faces.convert.FacesConverter",
-                "javax.faces.convert.*",
-                "javax.faces.validator.FacesValidator",
-                "javax.faces.validator.*",
-                "javax.faces.render.FacesRenderer",
-                "javax.faces.render.*",
-                "javax.faces.bean.ManagedBean",
-                "javax.faces.bean.*",
-                "javax.faces.event.NamedEvent",
-                "javax.faces.event.*",
-                "javax.faces.component.behavior.FacesBehavior",
-                "javax.faces.component.behavior.*",
-                "javax.faces.render.FacesBehaviorRenderer");
-        FACES_ANNOTATIONS = Collections.unmodifiableSet(annotations);
-    }
-
-    public GroovyScriptManager(ServletContext servletContext) {
-        this.servletContext = servletContext;
-    }
-
-    public Set<String> getScripts() {
-        Set<String> scripts = new HashSet<String>();
-        processWebInfGroovy(servletContext, servletContext.getResourcePaths(SCRIPT_PATH), scripts);
-
-        return scripts;
-    }
-
-    private void processWebInfGroovy(ServletContext sc, Set<String> paths, Set<String> classList) {
-        if (paths != null && !paths.isEmpty()) {
-            for (String pathElement : paths) {
-                if (pathElement.endsWith("/")) {
-                    processWebInfGroovy(sc, sc.getResourcePaths(pathElement), classList);
-                } else {
-                    if (pathElement.endsWith(SUFFIX)) {
-                        String cname = convertToClassName(SCRIPT_PATH, pathElement);
-                        if (containsAnnotation(sc, pathElement)) {
-                            if (LOGGER.isLoggable(Level.FINE)) {
-                                LOGGER.log(Level.FINE, "[WEB-INF/groovy] Found annotated Class: {0}", cname);
-                            }
-                            classList.add(cname);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    private boolean containsAnnotation(ServletContext sc, String pathElement) {
-        boolean containsAnnotation = false;
-        BufferedReader in = null;
-        try {
-            URL url = sc.getResource(pathElement);
-            in = new BufferedReader(new InputStreamReader(url.openStream()));
-            String line = in.readLine();
-            while ((line != null) && (!containsAnnotation)) {
-                line = line.trim();
-                if (line.length() != 0) {
-                    for (String pattern : FACES_ANNOTATIONS) {
-                        if (line.indexOf(pattern) > -1) {
-                            containsAnnotation = true;
-                            break;
-                        }
-                    }
-                }
-
-                line = in.readLine();
-            }
-        } catch (Exception ioe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE, null, ioe);
-            }
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (Exception ignore) {
-                    //
-                }
-            }
-        }
-        return containsAnnotation;
-    }
-
-    /**
-     * Utility method for converting paths to fully qualified class names.
-     *
-     * @param prefix    the prefix that should be stripped from the class name
-     *                  before converting it
-     * @param pathEntry a path to a class file
-     * @return a fully qualified class name using dot notation
-     */
-    private String convertToClassName(String prefix, String pathEntry) {
-        String className = pathEntry;
-
-        if (prefix != null) {
-            // remove the prefix
-            className = className.substring(prefix.length());
-        }
-        // remove the .class suffix
-        className = className.substring(0, (className.length() - 7));
-
-        return className.replace('/', '.');
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/NavigationHandlerProxy.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/NavigationHandlerProxy.java
deleted file mode 100644
index aa7c6b1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/NavigationHandlerProxy.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import javax.faces.application.NavigationHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.FacesException;
-
-/**
- * Proxy instance for a groovy-based NavigationHandlers.  This allows the NavigationHandler
- * to remain registered with the Application while picking up changes at runtime
- * from the associated groovy script.
- */
-public class NavigationHandlerProxy extends NavigationHandler {
-
-
-    private String scriptName;
-    private NavigationHandler nvDelegate;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public NavigationHandlerProxy(String scriptName,
-                                  NavigationHandler nvDelegate) {
-
-        this.scriptName = scriptName;
-        this.nvDelegate = nvDelegate;
-
-    }
-
-
-    // ------------------------------------------ Methods from NavigationHandler
-
-
-    public void handleNavigation(FacesContext context,
-                                 String fromAction,
-                                 String outcome) {
-
-        getGroovyDelegate().handleNavigation(context, fromAction, outcome);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private NavigationHandler getGroovyDelegate() {
-
-        try {
-            return ((NavigationHandler) GroovyHelper.newInstance(scriptName,
-                                                                 NavigationHandler.class,
-                                                                 nvDelegate));
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/PhaseListenerProxy.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/PhaseListenerProxy.java
deleted file mode 100644
index b9a0d07..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/PhaseListenerProxy.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.FacesException;
-
-/**
- * Proxy instance for a groovy-based PhaseListeners.  This allows the PhaseListener
- * to remain registered with the Lifecycle while picking up changes at runtime
- * from the associated groovy script.
- */
-public class PhaseListenerProxy implements PhaseListener {
-
-    private String scriptName;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public PhaseListenerProxy(String scriptName) {
-        this.scriptName = scriptName;
-    }
-
-    // ---------------------------------------------- Methods from PhaseListener
-
-
-
-    public void afterPhase(PhaseEvent event) {
-        getGroovyDelegate().afterPhase(event);
-    }
-
-
-    public void beforePhase(PhaseEvent event) {
-        getGroovyDelegate().beforePhase(event);
-    }
-
-
-    public PhaseId getPhaseId() {
-        return getGroovyDelegate().getPhaseId();
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private PhaseListener getGroovyDelegate() {
-
-        try {
-            return ((PhaseListener) GroovyHelper.newInstance(scriptName));
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/RendererProxy.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/RendererProxy.java
deleted file mode 100644
index 481d0ec..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/RendererProxy.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.ConverterException;
-import javax.faces.render.Renderer;
-import javax.faces.FacesException;
-
-/**
- * Proxy instance for a groovy-based Renderers.  This allows the Renderer
- * to remain registered with the renderkit while picking up changes at runtime
- * from the associated groovy script.
- */
-public class RendererProxy extends Renderer {
-
-    private String scriptName;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RendererProxy(String scriptName) {
-        this.scriptName = scriptName;
-    }
-
-
-    // --------------------------------------------------- Methods from Renderer
-
-
-    @Override
-    public void decode(FacesContext context, UIComponent component) {
-        getGroovyDelegate().decode(context, component);
-    }
-
-    @Override
-    public void encodeBegin(FacesContext context, UIComponent component)
-    throws IOException {
-        getGroovyDelegate().encodeBegin(context, component);
-    }
-
-    @Override
-    public void encodeChildren(FacesContext context, UIComponent component)
-    throws IOException {
-        getGroovyDelegate().encodeChildren(context, component);
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context, UIComponent component)
-    throws IOException {
-        getGroovyDelegate().encodeEnd(context, component);
-    }
-
-    @Override
-    public String convertClientId(FacesContext context, String clientId) {
-        return getGroovyDelegate().convertClientId(context, clientId);
-    }
-
-    @Override
-    public boolean getRendersChildren() {
-        return getGroovyDelegate().getRendersChildren();
-    }
-
-    @Override
-    public Object getConvertedValue(FacesContext context,
-                                    UIComponent component,
-                                    Object submittedValue)
-    throws ConverterException {
-        return getGroovyDelegate().getConvertedValue(context, component, submittedValue);
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private Renderer getGroovyDelegate() {
-
-        try {
-            return ((Renderer) GroovyHelper.newInstance(scriptName));
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ViewHandlerProxy.java b/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ViewHandlerProxy.java
deleted file mode 100644
index 5a74134..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/scripting/groovy/ViewHandlerProxy.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.faces.FacesException;
-import javax.faces.view.ViewDeclarationLanguage;
-import javax.faces.view.AttachedObjectHandler;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-/**
- * Proxy instance for a groovy-based ViewHandler.  This allows the ViewHandler
- * to remain registered with the application chain while picking up changes at runtime
- * from the associated groovy script.
- */
-public class ViewHandlerProxy extends ViewHandler {
-
-    private String scriptName;
-    private ViewHandler vhDelegate;
-
-
-    // ------------------------------------------------------------ Constructors
-    
-
-    public ViewHandlerProxy(String scriptName, ViewHandler vhDelegate) {
-
-        this.scriptName = scriptName;
-        this.vhDelegate = vhDelegate;
-
-    }
-
-
-    // ------------------------------------------------ Methods from ViewHandler
-
-
-    @Override
-    public String calculateCharacterEncoding(FacesContext context) {
-        return getGroovyDelegate().calculateCharacterEncoding(context);
-    }
-
-    @Override
-    public void initView(FacesContext context) throws FacesException {
-        getGroovyDelegate().initView(context);
-    }
-
-
-    public Locale calculateLocale(FacesContext context) {
-        return getGroovyDelegate().calculateLocale(context);
-    }
-
-    public String calculateRenderKitId(FacesContext context) {
-        return getGroovyDelegate().calculateRenderKitId(context);
-    }
-
-    public UIViewRoot createView(FacesContext context, String viewId) {
-        return getGroovyDelegate().createView(context, viewId);
-    }
-
-    public String getActionURL(FacesContext context, String viewId) {
-        return getGroovyDelegate().getActionURL(context, viewId);
-    }
-
-    public String getResourceURL(FacesContext context, String path) {
-        return getGroovyDelegate().getResourceURL(context, path);
-    }
-
-    @Override
-    public String deriveViewId(FacesContext context, String input) {
-        return getGroovyDelegate().deriveViewId(context, input);
-    }
-
-    @Override
-    public String getRedirectURL(FacesContext context,
-                                 String viewId,
-                                 Map<String,List<String>> parameters,
-                                 boolean includeViewParams) {
-        return getGroovyDelegate().getRedirectURL(context,
-                                                  viewId,
-                                                  parameters,
-                                                  includeViewParams);
-    }
-
-    @Override
-    public String getBookmarkableURL(FacesContext context,
-                                     String viewId,
-                                     Map<String,List<String>> parameters,
-                                     boolean includeViewParams) {
-        return getGroovyDelegate().getBookmarkableURL(context,
-                                                      viewId,
-                                                      parameters,
-                                                      includeViewParams);
-    }
-
-    @Override
-    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context, String viewId) {
-        return getGroovyDelegate().getViewDeclarationLanguage(context, viewId);
-    }
-
-    public void renderView(FacesContext context, UIViewRoot viewToRender)
-    throws IOException, FacesException {
-        getGroovyDelegate().renderView(context, viewToRender);
-    }
-
-    public UIViewRoot restoreView(FacesContext context, String viewId) {
-        return getGroovyDelegate().restoreView(context, viewId);
-    }
-
-    public void writeState(FacesContext context) throws IOException {
-        getGroovyDelegate().writeState(context);
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private ViewHandler getGroovyDelegate() {
-
-        try {
-            return ((ViewHandler) GroovyHelper.newInstance(scriptName,
-                                                           ViewHandler.class,
-                                                           vhDelegate));
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/AnnotationProvider.java b/jsf-ri/src/main/java/com/sun/faces/spi/AnnotationProvider.java
deleted file mode 100644
index 1b62c77..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/AnnotationProvider.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-import javax.servlet.ServletContext;
-import java.lang.annotation.Annotation;
-import java.util.Set;
-import java.util.Map;
-import java.net.URL;
-
-/**
- * <p>
- * An integration point for integrators to provide custom annotation scanning.
- * </p>
- *
- * <p>
- * <em>All</em> <code>AnnotationProvider</code> implementations <em>must</em>
- * scan for the following annotations:
- * </p>
- * <ul>
- *  <li>FacesComponent</li>
- *  <li>FacesConverter</li>
- *  <li>FacesRenderer</li>
- *  <li>ManagedBean</li>
- *  <li>NamedEvent</li>
- *  <li>FacesBehavior</li>
- *  <li>FacesBehaviorRenderer</li>
- * </ul>
- *
- * <p>
- * The <code>AnnotationProvider</code> instance will be wrapped as a {@link java.util.concurrent.Future} and
- * executed during the environment initialization.  The result of the future can be obtained
- * by calling {@link com.sun.faces.config.ConfigManager#getAnnotatedClasses(javax.faces.context.FacesContext)}.
- * </p>
- *
- * <p>
- * The {@link java.util.concurrent.Future} itself can be obtained from the
- * application map using the key <code>com.sun.faces.config.ConfigManager__ANNOTATION_SCAN_TASK</code>.
- * </p>
- *
- * <p>
- * It's important to note that the value returned by either method described above
- * is only available while the application is being initialized and will be removed
- * before the application is put into service.
- * </p>
- *
- * <p>
- * To register a custom AnnotationProvider with the runtime, place a file named
- * com.sun.faces.spi.annotationprovider within META-INF/services of a JAR file,
- * with a single line referencing the fully qualified class name of the AnnotationProvider
- * implementation.  Custom AnnotationProviders can be used to decorate the default
- * AnnotationProvider by providing a constructor that takes an AnnotationProvider as the
- * second parameter:</p>
- *
- * <p><code>public AnnotationProvider(ServletContext sc, AnnotationProvider parent)</code></p>
- * 
- * <p>If decoration is not desired, then the custom provider must have a constructor
- * that takes one paramer, a <code>ServletContext</code>:
- *
- * <p><code>public AnnotationProvider(ServletContext sc)</code></p>
- *
- * <p>All customer providers must extend this class.</p>
- * 
- */
-public abstract class AnnotationProvider {
-
-
-    protected ServletContext sc;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public AnnotationProvider(ServletContext sc) {
-
-        this.sc = sc;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @param urls a <code>Set</code> of URLs that refer to specific faces-config.xml
-     *  documents on the classpath.  The information returned by the map may
-     *  return annotation information from sources outside of those defined by the
-     *  urls.
-     * @return a <code>Map</code> of classes mapped to a specific annotation type.
-     *  If no annotations are present, this method returns an empty <code>Map</code>.
-     */
-    public abstract Map<Class<? extends Annotation>,Set<Class<?>>> getAnnotatedClasses(Set<URL> urls);
-
-} // END AnnotationProvider
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/AnnotationProviderFactory.java b/jsf-ri/src/main/java/com/sun/faces/spi/AnnotationProviderFactory.java
deleted file mode 100644
index 4dcbb11..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/AnnotationProviderFactory.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-import com.sun.faces.config.AnnotationScanner;
-
-import javax.servlet.ServletContext;
-import javax.faces.FacesException;
-import java.lang.reflect.Constructor;
-
-/**
- * 
- */
-public class AnnotationProviderFactory {
-
-    private static final Class<? extends AnnotationProvider> DEFAULT_ANNOTATION_PROVIDER =
-       AnnotationScanner.class;
-
-    private static final String ANNOTATION_PROVIDER_SERVICE_KEY =
-         "com.sun.faces.spi.annotationprovider";
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public static AnnotationProvider createAnnotationProvider(ServletContext sc) {
-        AnnotationProvider annotationProvider = createDefaultProvider(sc);
-
-        String[] services = ServiceFactoryUtils.getServiceEntries(ANNOTATION_PROVIDER_SERVICE_KEY);
-        if (services.length > 0) {
-            // only use the first entry...
-            Object provider = ServiceFactoryUtils.getProviderFromEntry(services[0],
-                new Class[] { ServletContext.class, AnnotationProvider.class }, new Object[] { sc , annotationProvider });
-            if (provider == null) {
-                provider = ServiceFactoryUtils.getProviderFromEntry(services[0], new Class[] { ServletContext.class }, new Object[] { sc });
-            }
-            
-            if (provider != null) {
-                if (!(provider instanceof AnnotationProvider)) {
-                    throw new FacesException("Class " + provider.getClass().getName() + " is not an instance of com.sun.faces.spi.AnnotationProvider");
-                }
-                annotationProvider = (AnnotationProvider)provider;
-            }
-        }
-
-        return annotationProvider;
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static AnnotationProvider createDefaultProvider(ServletContext sc) {
-
-        try {
-            Constructor c = DEFAULT_ANNOTATION_PROVIDER.getDeclaredConstructor(new Class<?>[] { ServletContext.class });
-            return (AnnotationProvider) c.newInstance(sc);
-        } catch (Exception e) {
-            throw new FacesException(e);
-        }
-
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/ConfigurationResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/spi/ConfigurationResourceProvider.java
deleted file mode 100644
index ff6b1a3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/ConfigurationResourceProvider.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-import javax.servlet.ServletContext;
-
-import java.net.URL;
-import java.util.Collection;
-
-/**
- * <p> Classes that implement this interface return zero or more
- * <code>URL</code>s which refer to application configuration resources.
- * </p>
- *
- * @see FacesConfigResourceProvider
- * @see FaceletConfigResourceProvider
- */
-public interface ConfigurationResourceProvider {
-
-    /**
-     * @param context the <code>ServletContext</code> for this application
-     *
-     * @return a List zero or more <code>URL</code> instances representing
-     *         application configuration resources
-     */
-    public Collection<URL> getResources(ServletContext context);
-
-}
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/ConfigurationResourceProviderFactory.java b/jsf-ri/src/main/java/com/sun/faces/spi/ConfigurationResourceProviderFactory.java
deleted file mode 100644
index 23a84b3..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/ConfigurationResourceProviderFactory.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Factory class for creating <code>ConfigurationResourceProvider</code> instances
- * using the Java services discovery mechanism.
- */
-public class ConfigurationResourceProviderFactory {
-
-
-    public enum ProviderType {
-
-        /**
-         * ConfigurationResourceProvider type for configuration resources
-         * that follow the faces-config DTD/Schema.
-         */
-        FacesConfig(FacesConfigResourceProvider.SERVICES_KEY),
-
-        /**
-         * ConfigurationResourceProvider type for configuration resources
-         * that follow the Facelet taglib DTD/Schema.
-         */
-        FaceletConfig(FaceletConfigResourceProvider.SERVICES_KEY);
-
-        String servicesKey;
-
-        ProviderType(String servicesKey) {
-            this.servicesKey = servicesKey;
-        }
-        
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @param providerType the type of providers that should be discovered and instantiated.
-     *
-     * @return an array of all <code>ConfigurationResourceProviders discovered that
-     *  match the specified <code>ProviderType</code>.
-     */
-    public static ConfigurationResourceProvider[] createProviders(ProviderType providerType) {
-
-        String[] serviceEntries = ServiceFactoryUtils.getServiceEntries(providerType.servicesKey);
-        List<ConfigurationResourceProvider> providers = new ArrayList<ConfigurationResourceProvider>();
-        if (serviceEntries.length > 0) {
-            for (String serviceEntry : serviceEntries) {
-                ConfigurationResourceProvider provider = (ConfigurationResourceProvider)
-                      ServiceFactoryUtils.getProviderFromEntry(serviceEntry, null, null);
-                if (provider != null) {
-                    if (ProviderType.FacesConfig == providerType) {
-                        if (!(provider instanceof FacesConfigResourceProvider)) {
-                            throw new IllegalStateException("Expected ConfigurationResourceProvider type to be an instance of FacesConfigResourceProvider");
-                        }
-                    } else {
-                        if (!(provider instanceof FaceletConfigResourceProvider)) {
-                            throw new IllegalStateException("Expected ConfigurationResourceProvider type to be an instance of FaceletConfigResourceProvider");
-                        }
-                    }
-                    providers.add(provider);
-                }
-            }
-            return providers.toArray(new ConfigurationResourceProvider[providers.size()]);
-        } else {
-            return new ConfigurationResourceProvider[0];
-        }
-        
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/DiscoverableInjectionProvider.java b/jsf-ri/src/main/java/com/sun/faces/spi/DiscoverableInjectionProvider.java
deleted file mode 100644
index 9b3c569..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/DiscoverableInjectionProvider.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-import com.sun.faces.util.Util;
-
-/**
- * <p><code>InjectionProvider</code>s that implement this interface
- * can be configured via <code>META-INF/services/com.sun.faces.spi.injectionprovider</code>.
- *
- * <p>The format of the configuration entries is:</p>
- * <ul>
- *   <li><code><InjectionProviderClassName>:<DelegateClassName></code></li>
- * <ul>
- *
- * <p>Example:</p}
- * <ul>
- *    <li><code>com.sun.faces.vendor.GlassFishInjectionProvider:com.sun.enterprise.InjectionManager</code></li>
- * </ul>
- *
- * <p>Multiple <code>DiscoverableInjectionProvider</code>s can be configured
- * within a single services entry.</p>
- */
-public abstract class DiscoverableInjectionProvider implements InjectionProvider {
-
-
-    /**
-     * @param delegateClass the name of the delegate used by the
-     *  <code>InjectionProvider</code> implementation.
-     * @return returns <code>true</code> if the
-     *  <code>InjectionProvider</code> instance
-     *  is appropriate for the container its currently
-     *  deployed within, otherwise return <code>false</code>
-     */
-    public static boolean isInjectionFeatureAvailable(String delegateClass) {
-
-        try {
-            Util.loadClass(delegateClass, null);
-            return true;
-        } catch (Exception e) {
-            return false;
-        }
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/FaceletConfigResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/spi/FaceletConfigResourceProvider.java
deleted file mode 100644
index 609ecd0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/FaceletConfigResourceProvider.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-/**
- * <p> Classes that implement this interface return zero or more
- * <code>URL</code>s which refer to application configuration resources (i.e.
- * documents conforming the Facelet taglib DTD or Schema). </p>
- *
- * <p>
- * Implementations of this interface are made known to the runtime using
- * service discovery.
- * </p>
- *
- * <p>For example:</p>
- *
- * <pre>
- *     META-INF/services/com.sun.faces.spi.FaceletConfigResourceProvider
- * </pre>
- *
- * <p>
- * The file, <code>com.sun.faces.spi.FaceletConfigResourceProvider</code>,
- * contains a single line which represents the fully qualified class name
- * of the concrete <code>FacesConfigResourceProvider</code>.
- * </p>
- *
- * <p>
- * The <code>FaceletConfigResourceProvider</code> instances that are found
- * will be inserted into a List of existing <code>ConfigurationResourceProviders</code>
- * <em>after</em> those that process <code>taglib.xml</code> files in <code>META-INF</code>
- * but <em>before</em> those that process <code>taglib.xml</code> files in the
- * web application.
- * </p>
- */
-public interface FaceletConfigResourceProvider {
-
-    public static final String SERVICES_KEY = "com.sun.faces.spi.FaceletConfigResourceProvider";
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/FacesConfigResourceProvider.java b/jsf-ri/src/main/java/com/sun/faces/spi/FacesConfigResourceProvider.java
deleted file mode 100644
index f3d0035..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/FacesConfigResourceProvider.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-/**
- * <p> Classes that implement this interface return zero or more
- * <code>URL</code>s which refer to application configuration resources (i.e.
- * documents conforming the faces-config DTD or Schema). </p>
- *
- * <p>
- * Implementations of this interface are made known to the runtime using
- * service discovery.
- * </p>
- *
- * <p>For example:</p>
- *
- * <pre>
- *     META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider
- * </pre>
- *
- * <p>
- * The file, <code>com.sun.faces.spi.FacesConfigResourceProvider</code>,
- * contains a single line which represents the fully qualified class name
- * of the concrete <code>FacesConfigResourceProvider</code>.
- * </p>
- *
- * <p>
- * The <code>FacesConfigResourceProvider</code> instances that are found
- * will be inserted into a List of existing <code>ConfigurationResourceProviders</code>
- * <em>after</em> those that process <code>faces-config.xml</code> files in <code>META-INF</code>
- * but <em>before</em> those that process <code>faces-config.xml</code> files in the
- * web application.  If the documents returned by this <code>ConfigurationResourceProvider</code>
- * instance require specific ordering semantics, then use the partial or absolute ordering
- * feature provided by the JavaServer Faces 2.0 specification.
- * </p>
- */
-public interface FacesConfigResourceProvider extends ConfigurationResourceProvider {
-
-    public static final String SERVICES_KEY = "com.sun.faces.spi.FacesConfigResourceProvider";
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProvider.java b/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProvider.java
deleted file mode 100644
index 8200a61..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProvider.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-/**
- * <p>This interface defines an integration point for Java EE vendors.
- * Each vendor will need to provide an implementation of this interface
- * which will provide the JSF implementation the necessary hooks to 
- * perform resource injection.</p>  
- * 
- * <p>The implementation of this interface *must* be thread-safe and must
- * provider either a no-arg constructor, or a constructor accepting
- * a <code>ServletContext</code> instance.</p>
- */
-public interface InjectionProvider {
-
-    /**
-     * <p>The implementation of this method must perform the following
-     * steps:
-     *    <ul>
-     *        <li>Inject the supported resources per the Servlet 2.5
-     *           specification into the provided object</li>        
-     *    </ul>
-     * </p>
-     * <p>This method <em>must not</em> invoke any methods
-     * annotated with <code>@PostConstruct</code>
-     * @param managedBean the target managed bean
-     * @throws InjectionProviderException if an error occurs during 
-     *  resource injection
-     */
-    public void inject(Object managedBean) throws InjectionProviderException;
-
-    
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PreDestroy</code> annotation
-     * (per the Common Annotations Specification).
-     * @param managedBean the target managed bean
-     * @throws InjectionProviderException if an error occurs when invoking
-     *  the method annotated by the <code>@PreDestroy</code> annotation
-     */
-    public void invokePreDestroy(Object managedBean) 
-    throws InjectionProviderException;
-    
-    
-    /**
-     * <p>The implemenation of this method must invoke any
-     * method marked with the <code>@PostConstruct</code> annotation
-     * (per the Common Annotations Specification).
-     * @param managedBean the target managed bean
-     * @throws InjectionProviderException if an error occurs when invoking
-     *  the method annotated by the <code>@PostConstruct</code> annotation
-     */
-    public void invokePostConstruct(Object managedBean) 
-    throws InjectionProviderException;
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProviderException.java b/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProviderException.java
deleted file mode 100644
index a8429b1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProviderException.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-/**
- * Wraps any exception thrown by an implementation
- * of <code>InjectionProvider</code>.
- */
-public class InjectionProviderException extends Exception {
-
-    /**
-     * Creates a new <code>InjectionProviderException</code> with
-     * the root cause of the error.    
-     * @param cause the root cause
-     */
-    public InjectionProviderException(Throwable cause) {
-        super(cause);
-    }
-    
-    
-    /**
-     * Creates a new <code>InjectionProviderException</code> with
-     * a descriptive message and the root cause of the error.
-     * @param message descriptive message
-     * @param cause the root cause
-     */
-    public InjectionProviderException(String message, Throwable cause) {
-        super(message, cause);        
-    }
-    
-} // END InjectionProviderException
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProviderFactory.java b/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProviderFactory.java
deleted file mode 100644
index 9162664..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/InjectionProviderFactory.java
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.spi;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Enumeration;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.net.URL;
-import java.net.URLConnection;
-
-import javax.faces.context.ExternalContext;
-import javax.servlet.ServletContext;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-import com.sun.faces.vendor.WebContainerInjectionProvider;
-
-
-/**
- * <p>A factory for creating <code>InjectionProvider</code>
- * instances.</p>
- */
-
-public class InjectionProviderFactory {
-
-
-    /**
-     * <p>Our no-op <code>InjectionProvider</code>.</p>
-     */
-    private static final InjectionProvider NOOP_PROVIDER =
-          new NoopInjectionProvider();
-
-    private static final InjectionProvider GENERIC_WEB_PROVIDER =
-         new WebContainerInjectionProvider();
-
-
-    private static final String INJECTION_SERVICE =
-         "META-INF/services/com.sun.faces.spi.injectionprovider";
-
-    /**
-      * <p>The system property that will be checked for alternate
-      * <code>InjectionProvider</code> implementations.</p>
-      */
-     private static final String INJECTION_PROVIDER_PROPERTY =
-           RIConstants.FACES_PREFIX + "InjectionProvider";
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    private static final String[] EMPTY_ARRAY = new String[] {};
-
-
-    /**
-     * <p>Creates a new instance of the class specified by the
-     * <code>com.sun.faces.InjectionProvider</code> system property.
-     * If this propery is not defined, then a default, no-op,
-     * <code>InjectionProvider</code> will be returned.
-     *
-     * @param extContext ExteranlContext for the current request
-     *
-     * @return an implementation of the <code>InjectionProvider</code>
-     *  interfaces
-     */
-    public static InjectionProvider createInstance(ExternalContext extContext) {
-
-        String providerClass = findProviderClass(extContext);
-        InjectionProvider provider =
-             getProviderInstance(providerClass, extContext);
-
-        if (!NoopInjectionProvider.class.equals(provider.getClass())
-            && !WebContainerInjectionProvider.class.equals(provider.getClass())) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.spi.injection.provider_configured",
-                           new Object[]{provider.getClass().getName()});
-            }
-            return provider;
-        } else if (WebContainerInjectionProvider.class.equals(provider.getClass())) {
-            if (LOGGER.isLoggable(Level.INFO)) {
-                LOGGER.info("jsf.core.injection.provider_generic_web_configured");
-            }
-            return provider;
-        } else {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING, "jsf.spi.injection.no_injection");
-            }
-            return provider;
-        }
-
-    }
-
-
-    private static InjectionProvider getProviderInstance(String className,
-                                                         ExternalContext extContext) {
-
-        InjectionProvider provider = NOOP_PROVIDER;
-        if (className != null) {
-            try {
-                Class<?> clazz = Util.loadClass(className, InjectionProviderFactory.class);
-                if (implementsInjectionProvider(clazz)) {
-                    try {
-                        Constructor ctor = clazz.getConstructor(ServletContext.class);
-                        return (InjectionProvider)
-                             ctor.newInstance((ServletContext) extContext.getContext());
-                    } catch (NoSuchMethodException nsme) {
-                        return (InjectionProvider) clazz.newInstance();
-                    } catch (InvocationTargetException ite) {
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE,
-                                 "jsf.spi.injection.provider_cannot_instantiate",
-                                 new Object[]{className});
-                            LOGGER.log(Level.SEVERE, "", ite);
-                        }
-                    }
-                } else {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "jsf.spi.injection.provider_not_implemented",
-                                   new Object[]{ className });
-                    }
-                }
-            } catch (ClassNotFoundException cnfe) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                   LOGGER.log(Level.SEVERE,
-                              "jsf.spi.injection.provider_not_found",
-                              new Object[]{ className });
-                }
-            } catch (InstantiationException ie) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.spi.injection.provider_cannot_instantiate",
-                               new Object[]{className});
-                    LOGGER.log(Level.SEVERE, "", ie);
-                }
-            } catch (IllegalAccessException iae) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.spi.injection.provider_cannot_instantiate",
-                               new Object[]{className});
-                    LOGGER.log(Level.SEVERE, "", iae);
-                }
-            }
-        }
-
-        // We weren't able to find a configured provider - check
-        // to see if the PostConstruct and PreDestroy annotations
-        // are available.  If they are, then default to the
-        // WebContainerInjectionProvider, otherwise, use
-        // NoopInjectionProvider
-        if (NOOP_PROVIDER.equals(provider)) {
-            try {
-                if (Util.loadClass("javax.annotation.PostConstruct", null) != null
-                    && Util.loadClass("javax.annotation.PreDestroy", null) != null) {
-                    provider = GENERIC_WEB_PROVIDER;
-                }
-            } catch (Exception e) {
-                provider = NOOP_PROVIDER;
-            }
-        }
-
-        return provider;
-
-    }
-
-
-    /**
-     * <p>Determine if the specified class implements the
-     * <code>InjectionProvider</code> interfaces.</p>
-     * @param clazz the class in question
-     * @return <code>true</code> if <code>clazz</code> implements
-     *  the <code>InjectionProvider</code> interface
-     */
-    private static boolean implementsInjectionProvider(Class<?> clazz) {
-
-        return InjectionProvider.class.isAssignableFrom(clazz);
-
-    }
-
-
-    /**
-     * <p>Determine if the specified class extends the
-     * <code>DiscoverableInjectionProvider</code> interfaces.</p>
-     * @param clazz the class in question
-     * @return <code>true</code> if <code>clazz</code> implements
-     *  the <code>InjectionProvider</code> interface
-     */
-    private static boolean extendsDiscoverableInjectionProvider(Class<?> clazz) {
-
-        return DiscoverableInjectionProvider.class.isAssignableFrom(clazz);
-
-    }
-
-
-    /**
-     * <p>Attempt to find an <code>InjectionProvider</code> based on the following
-     * algorithm:</p>
-     * <ul>
-     * <li>Check for an explicit configuration within the web.xml using
-     *     the key <code>com.sun.faces.injectionProvider</code>.  If found,
-     *     return the value.</li>
-     * <li>Check for a system property keyed by <code>com.sun.faces.InjectionProvider</code>.
-     *     If found, return the value.</li>
-     * <li>Check for entries within <code>META-INF/services/com.sun.faces.injectionprovider</code>.
-     *     If entries are found and the entries extend <code>DiscoverableInjectionProvider</code>,
-     *     invoke <code>isInjectionFeatureAvailable(String)</code> passing in the configured
-     *     delegate.  If <code>isInjectionFeatureAvailable(String)</code> returns <code>true</code>
-     *     return the service entry.</li>
-     * <li>If no <code>InjectionProviders are found, return <code>null</code></li>
-     * Tries to find a provider class in a web context parameter.  If not
-     * present it tries to find it as a System property.  If still not found
-     * returns null.
-     * <ul>
-     *
-     * @param extContext The ExternalContext for this request
-     * @return The provider class name specified in the container configuration,
-     *         or <code>null</code> if not found.
-     */
-    private static String findProviderClass(ExternalContext extContext) {
-
-        WebConfiguration webConfig = WebConfiguration.getInstance(extContext);
-        String provider = webConfig.getOptionValue(WebContextInitParameter.InjectionProviderClass);
-
-        if (provider != null) {
-            return provider;
-        } else {
-            provider = System.getProperty(INJECTION_PROVIDER_PROPERTY);
-        }
-
-        if (provider != null) {
-            return provider;
-        } else {
-            String[] serviceEntries = getServiceEntries();
-            if (serviceEntries.length > 0) {
-                for (int i = 0; i < serviceEntries.length; i++) {
-                    provider = getProviderFromEntry(serviceEntries[i]);
-                    if (provider != null) {
-                        break;
-                    }
-                }
-            } else {
-                return provider;
-            }
-        }
-
-        return provider;
-
-    }
-
-
-    private static String getProviderFromEntry(String entry) {
-
-        if (entry == null) {
-            return null;
-        }
-
-        String[] parts = Util.split(entry, ":");
-        if (parts.length != 2) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           "jsf.spi.injection.invalid_service_entry",
-                           new Object[] { entry });
-            }
-            return null;
-        }
-
-        try {
-            Class<?> clazz = Util.loadClass(parts[0], null);
-            if (extendsDiscoverableInjectionProvider(clazz)) {
-                if (DiscoverableInjectionProvider.isInjectionFeatureAvailable(parts[1])) {
-                    return parts[0];
-                }
-            } else {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.spi.injection.provider.entry_not_discoverable",
-                               new Object[] { parts[0] });
-                }
-                return null;
-            }
-        } catch (ClassNotFoundException cnfe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           "jsf.spi.injection.provider_not_found",
-                           new Object[] { parts[0] });
-            }
-            return null;
-        }
-
-        return null;
-
-    }
-
-
-
-
-
-    private static String[] getServiceEntries() {
-
-        List<String> results = null;
-        ClassLoader loader = Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            return EMPTY_ARRAY;
-        }
-
-        Enumeration<URL> urls = null;
-        try {
-            urls = loader.getResources(INJECTION_SERVICE);
-        } catch (IOException ioe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           ioe.toString(),
-                           ioe);
-            }
-        }
-
-        if (urls != null) {
-            InputStream input = null;
-            BufferedReader reader = null;
-            while (urls.hasMoreElements()) {
-                try {
-                    if (results == null) {
-                        results = new ArrayList<String>();
-                    }
-                    URL url = urls.nextElement();
-                    URLConnection conn = url.openConnection();
-                    conn.setUseCaches(false);
-                    input = conn.getInputStream();
-                    if (input != null) {
-                        try {
-                            reader =
-                                  new BufferedReader(new InputStreamReader(input, "UTF-8"));
-                        } catch (Exception e) {
-                            reader =
-                                  new BufferedReader(new InputStreamReader(input));
-                        }
-                        for (String line = reader.readLine();
-                             line != null;
-                             line = reader.readLine()) {
-                            results.add(line.trim());
-                        }
-                    }
-                } catch (Exception e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "jsf.spi.provider.cannot_read_service",
-                                   new Object[] { INJECTION_SERVICE });
-                        LOGGER.log(Level.SEVERE,
-                                   e.toString(),
-                                   e);
-                    }
-                } finally {
-                    if (input != null) {
-                        try {
-                            input.close();
-                        } catch (Exception ignored) {
-                        }
-                    }
-                    if (reader != null) {
-                        try {
-                            reader.close();
-                        } catch (Exception ignored) {
-                        }
-                    }
-                }
-            }
-        }
-
-        return ((results != null && !results.isEmpty())
-                ? results.toArray(new String[results.size()])
-                : EMPTY_ARRAY);
-
-    }
-
-
-    /**
-     * <p>A no-op implementation of <code>InjectionProvider</code> which will
-     * be used when the #INJECTION_PROVIDER_PROPERTY is not specified or
-     * is invalid.</p>
-     */
-    private static final class NoopInjectionProvider implements InjectionProvider {
-
-        /**
-         * <p>This is a no-op.</p>
-         * @param managedBean target ManagedBean
-         */
-        public void inject(Object managedBean) { }
-
-
-        /**
-         * <p>This is a no-op.</p>
-         * @param managedBean target ManagedBean
-         */
-        public void invokePreDestroy(Object managedBean) { }
-
-        /**
-         * <p>This is a no-op.</p>
-         * @param managedBean target ManagedBean
-         */
-        public void invokePostConstruct(Object managedBean)
-        throws InjectionProviderException { }
-
-    }
-
-} // END InjectionProviderFactory
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/SerializationProvider.java b/jsf-ri/src/main/java/com/sun/faces/spi/SerializationProvider.java
deleted file mode 100644
index af3361f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/SerializationProvider.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-import java.io.ObjectInputStream;
-import java.io.InputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-
-/**
- * <p>This interface provides a mechanism to allow the use
- * of alternate Java Serialization implementations.</p>
- * 
- * <p>The implementation of this interface *must* be thread-safe and must
- * have a no-arg constructor.</p>
- */
-public interface SerializationProvider {
-
-    /**
-     * <p>Creates a new <code>ObjectInputStream</code> wrapping the specified
-     * <code>source</code>.</p>
-     * 
-     * <p>It's <em>extremely important</em> that the ObjectInputStream
-     * returned by this method extends the serialization implementation's ObjectInputStream 
-     * and overrides the {@link ObjectInputStream#resolveClass(java.io.ObjectStreamClass)}
-     * of  to perform the following or the equivalent thereof: 
-     * <br>
-     * <pre>
-     *     return Class.forName(desc.getName(),true, 
-                Thread.currentThread().getContextClassLoader());
-     * </pre>
-     * <br>
-     * 
-     * If this step isn't done, there may be problems when deserializing.</p>
-     * 
-     * @param source the source stream from which to read the Object(s)
-     *  from
-     * @return an <code>ObjectInputStream</code>
-     * @throws IOException if an error occurs when creating the input stream
-     */
-    public ObjectInputStream createObjectInputStream(InputStream source)
-    throws IOException;
-
-
-    /**
-     * <p>Creates a new <code>ObjectOutputStream</code> wrapping the
-     * specified <code>destination</code>.</p>
-     * @param destination the destination of the serialized Object(s)
-     * @return an <code>ObjectOutputStream</code>
-     * @throws IOException if an error occurs when creating the output stream
-     */
-    public ObjectOutputStream createObjectOutputStream(OutputStream destination)
-    throws IOException;
-
-
-} // END SerializationProvider
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/SerializationProviderFactory.java b/jsf-ri/src/main/java/com/sun/faces/spi/SerializationProviderFactory.java
deleted file mode 100644
index 26d07e6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/SerializationProviderFactory.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-import javax.faces.context.ExternalContext;
-
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.ObjectInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.renderkit.ApplicationObjectInputStream;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.WebConfiguration.WebContextInitParameter;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-/**
- * <p>A factory for creating <code>SerializationProvider</code>
- * instances.</p>
- */
-public class SerializationProviderFactory {
-    
-    /**
-     * <p>Our default <code>SerializationProvider</code>.</p>
-     */
-    private static final SerializationProvider JAVA_PROVIDER =
-          new SerializationProviderFactory.JavaSerializationProvider();
-
-    /**
-      * <p>The system property that will be checked for alternate
-      * <code>SerializationProvider</code> implementations.</p>
-      */
-     private static final String SERIALIZATION_PROVIDER_PROPERTY =
-           RIConstants.FACES_PREFIX + "SerializationProvider";
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-
-    /**
-     * <p>Creates a new instance of the class specified by the
-     * <code>com.sun.faces.InjectionProvider</code> system property.
-     * If this propery is not defined, then a default, no-op, 
-     * <code>InjectionProvider</code> will be returned.
-     * @param extContext the ExternalContext for this application
-     * @return an implementation of the <code>InjectionProvider</code>
-     *  interfaces
-     */
-    public static SerializationProvider createInstance(ExternalContext extContext) {
-        String providerClass = findProviderClass(extContext);
-                
-        
-        SerializationProvider provider = getProviderInstance(providerClass);
-
-        if (provider.getClass() != JavaSerializationProvider.class) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.spi.serialization.provider_configured",
-                           new Object[]{provider.getClass().getName()});
-            }
-        } 
-        return provider;
-        
-    }
-    
-
-    private static SerializationProvider getProviderInstance(String className) {
-        SerializationProvider provider = JAVA_PROVIDER;
-        if (className != null) {
-            try {
-                Class<?> clazz = Util.loadClass(className, SerializationProviderFactory.class);
-                if (implementsSerializationProvider(clazz)) {
-                    provider = (SerializationProvider) clazz.newInstance();
-                } else {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "jsf.spi.serialization.provider_not_implemented",
-                                   new Object[]{ className });
-                    }
-                }
-            } catch (ClassNotFoundException cnfe) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                   LOGGER.log(Level.SEVERE,
-                              "jsf.spi.serialization.provider_not_found",
-                              new Object[]{ className });
-                }
-            } catch (InstantiationException ie) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.spi.serialization.provider_cannot_instantiate",
-                               new Object[]{className});
-                    LOGGER.log(Level.SEVERE, "", ie);
-                }
-            } catch (IllegalAccessException iae) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.spi.serialization.provider_cannot_instantiate",
-                               new Object[]{className});
-                    LOGGER.log(Level.SEVERE, "", iae);
-                }
-            }
-        } 
-       
-        return provider;
-    }
-
-    /**
-     * <p>Determine if the specified class implements the
-     * <code>SerializationProvider</code> interfaces.</p>
-     * @param clazz the class in question
-     * @return <code>true</code> if <code>clazz</code> implements
-     *  the <code>SerializationProvider</code> interface
-     */
-    private static boolean implementsSerializationProvider(Class<?> clazz) {
-        return SerializationProvider.class.isAssignableFrom(clazz);
-    }
-    
-    /**
-     * Tries to find a provider class in a web context parameter.  If not
-     * present it tries to find it as a System property.  If still not found
-     * returns null.
-     *
-     * @param extContext The ExternalContext for this request
-     * @return The provider class name specified in the container configuration, 
-     *         or <code>null</code> if not found.
-     */
-    private static String findProviderClass(ExternalContext extContext) {
-        
-        WebConfiguration webConfig = WebConfiguration.getInstance(extContext);
-        
-        String provider = webConfig.getOptionValue(
-              WebContextInitParameter.SerializationProviderClass);
-        
-        if (provider != null) {
-            return provider;
-        } else {
-            return System.getProperty(SERIALIZATION_PROVIDER_PROPERTY);
-        }
-    }
-
-    /**
-     * <p>An implementation of <code>SerializationProvider</code> which
-     * uses standard Java serialization.</p>
-     */
-    private static final class JavaSerializationProvider 
-          implements SerializationProvider {
-
-
-        /**
-         * <p>Creates a new <code>ObjectOutputStream</code> wrapping the
-         * specified <code>destination</code>.</p>
-         *
-         * @param destination the destination of the serialized Object(s)
-         *
-         * @return an <code>ObjectOutputStream</code>
-         */
-        public ObjectOutputStream createObjectOutputStream(
-              OutputStream destination) throws IOException {
-            return new ObjectOutputStream(destination);
-        }
-
-        /**
-         * <p>Creates a new <code>ObjectInputStream</code> wrapping the specified
-         * <code>source</code>.</p>
-         *
-         * @param source the source stream from which to read the Object(s)
-         *               from
-         *
-         * @return an <code>ObjectInputStream</code>
-         */
-        public ObjectInputStream createObjectInputStream(InputStream source)
-        throws IOException {
-            return new ApplicationObjectInputStream(source);
-        }
-    }
-
-} // END InjectionProviderFactory
diff --git a/jsf-ri/src/main/java/com/sun/faces/spi/ServiceFactory.java b/jsf-ri/src/main/java/com/sun/faces/spi/ServiceFactory.java
deleted file mode 100644
index 87b0b84..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/spi/ServiceFactory.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.spi;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.FacesException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.List;
-import java.util.Enumeration;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.net.URL;
-import java.net.URLConnection;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.lang.reflect.Constructor;
-
-/**
- * <p>
- * Base class for service discovery.
- * </p>
- */
-final class ServiceFactoryUtils {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-    private static final String[] EMPTY_ARRAY = new String[0];
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    static Object getProviderFromEntry(String entry, Class<?>[] argumentTypes, Object[] arguments) {
-
-        if (entry == null) {
-            return null;
-        }
-
-        try {
-            Class<?> clazz = Util.loadClass(entry, null);
-            Constructor c = clazz.getDeclaredConstructor(argumentTypes);
-            if (c == null) {
-                throw new FacesException("Unable to find constructor accepting arguments: " + Arrays.toString(arguments));
-            }
-            return c.newInstance(arguments);
-        } catch (Exception e) {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE, e.toString(), e);
-            }
-            return null;
-        }
-
-    }
-
-
-    static String[] getServiceEntries(String key) {
-
-        List<String> results = null;
-        ClassLoader loader = Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            return EMPTY_ARRAY;
-        }
-
-        Enumeration<URL> urls = null;
-        String serviceName = "META-INF/services/" + key;
-        try {
-            urls = loader.getResources(serviceName);
-        } catch (IOException ioe) {
-            if (LOGGER.isLoggable(Level.SEVERE)) {
-                LOGGER.log(Level.SEVERE,
-                           ioe.toString(),
-                           ioe);
-            }
-        }
-
-        if (urls != null) {
-            InputStream input = null;
-            BufferedReader reader = null;
-            while (urls.hasMoreElements()) {
-                try {
-                    if (results == null) {
-                        results = new ArrayList<String>();
-                    }
-                    URL url = urls.nextElement();
-                    URLConnection conn = url.openConnection();
-                    conn.setUseCaches(false);
-                    input = conn.getInputStream();
-                    if (input != null) {
-                        try {
-                            reader =
-                                  new BufferedReader(new InputStreamReader(input,
-                                                                           "UTF-8"));
-                        } catch (Exception e) {
-                            reader =
-                                  new BufferedReader(new InputStreamReader(input));
-                        }
-                        for (String line = reader.readLine();
-                             line != null;
-                             line = reader.readLine()) {
-                            results.add(line.trim());
-                        }
-                    }
-                } catch (Exception e) {
-                    if (LOGGER.isLoggable(Level.SEVERE)) {
-                        LOGGER.log(Level.SEVERE,
-                                   "jsf.spi.provider.cannot_read_service",
-                                   new Object[]{serviceName});
-                        LOGGER.log(Level.SEVERE,
-                                   e.toString(),
-                                   e);
-                    }
-                } finally {
-                    if (input != null) {
-                        try {
-                            input.close();
-                        } catch (Exception ignored) {
-                        }
-                    }
-                    if (reader != null) {
-                        try {
-                            reader.close();
-                        } catch (Exception ignored) {
-                        }
-                    }
-                }
-            }
-        }
-
-        return ((results != null && !results.isEmpty())
-                ? results.toArray(new String[results.size()])
-                : EMPTY_ARRAY);
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/FacesValidator.java b/jsf-ri/src/main/java/com/sun/faces/taglib/FacesValidator.java
deleted file mode 100644
index 057d8e2..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/FacesValidator.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib;
-
-import java.io.IOException;
-
-import javax.servlet.jsp.tagext.PageData;
-import javax.servlet.jsp.tagext.TagLibraryValidator;
-import javax.servlet.jsp.tagext.ValidationMessage;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * <p>Base class for all faces TLVs</p>
- *
- * @author Justyna Horwat
- * @author Ed Burns
- */
-public abstract class FacesValidator extends TagLibraryValidator {
-
-    //*********************************************************************
-    // Constants
-
-    //*********************************************************************
-    // Validation and configuration state (protected)
-
-    protected boolean failed;			// did the page fail?
-
-
-    //*********************************************************************
-    // Constants
-
-    private static final String JSF_CORE_URI = "http://java.sun.com/jsf/core";
-
-    private static final String JSF_HTML_URI = "http://java.sun.com/jsf/html";
-
-    private static final String JSTL_OLD_CORE_URI =
-        "http://java.sun.com/jstl/core";
-
-    private static final String JSTL_NEW_CORE_URI =
-        "http://java.sun.com/jsp/jstl/core";
-
-    // Prefix for JSF HTML tags
-    protected String JSF_HTML_PRE = null;
-
-
-    public String getJSF_HTML_PRE() {
-        return JSF_HTML_PRE;
-    }
-
-
-    // Prefix for JSF CORE tags
-    protected String JSF_CORE_PRE = null;
-
-
-    public String getJSF_CORE_PRE() {
-        return JSF_CORE_PRE;
-    }
-
-
-    // Prefix for JSTL CORE tags
-    protected String JSTL_CORE_PRE = null;
-
-
-    public String getJSTL_CORE_PRE() {
-        return JSTL_CORE_PRE;
-    }
-
-
-    // QName for JSTL conditional tag
-    protected String JSTL_IF_QN = ":if";
-
-
-    public String getJSTL_IF_QN() {
-        return JSTL_IF_QN;
-    }
-
-    // Local Name for JSTL conditional tag
-    protected String JSTL_IF_LN = "if";
-
-
-    public String getJSTL_IF_LN() {
-        return JSTL_IF_LN;
-    }
-
-    // QName for JSTL conditional tag
-    protected String JSTL_CHOOSE_QN = ":choose";
-
-
-    public String getJSTL_CHOOSE_QN() {
-        return JSTL_CHOOSE_QN;
-    }
-
-    // Local Name for JSTL conditional tag
-    protected String JSTL_CHOOSE_LN = "choose";
-
-
-    public String getJSTL_CHOOSE_LN() {
-        return JSTL_CHOOSE_LN;
-    }
-
-    // QName for JSTL iterator tag
-    protected String JSTL_FOREACH_QN = ":forEach";
-
-
-    public String getJSTL_FOREACH_QN() {
-        return JSTL_FOREACH_QN;
-    }
-
-    // Local Name for JSTL iterator tag
-    protected String JSTL_FOREACH_LN = "forEach";
-
-
-    public String getJSTL_FOREACH_LN() {
-        return JSTL_FOREACH_LN;
-    }
-
-    // QName for JSTL iterator tag
-    protected String JSTL_FORTOKENS_QN = ":forTokens";
-
-
-    public String getJSTL_FORTOKENS_QN() {
-        return JSTL_FORTOKENS_QN;
-    }
-
-    // Local Name for JSTL iterator tag
-    protected String JSTL_FORTOKENS_LN = "forTokens";
-
-
-    public String getJSTL_FORTOKENS_LN() {
-        return JSTL_FORTOKENS_LN;
-    }
-
-    // QName for JSF Form tag
-    protected String JSF_FORM_QN = ":form";
-
-
-    public String getJSF_FORM_QN() {
-        return JSF_FORM_QN;
-    }
-
-    // Local Name for JSF Form tag
-    protected String JSF_FORM_LN = "form";
-
-
-    public String getJSF_FORM_LN() {
-        return JSF_FORM_LN;
-    }
-
-    // QName for JSF subview tag
-    protected String JSF_SUBVIEW_QN = ":subview";
-
-
-    public String getJSF_SUBVIEW_QN() {
-        return JSF_SUBVIEW_QN;
-    }
-    
-    // Local Name for JSF subview tag
-    protected String JSF_SUBVIEW_LN = "subview";
-
-
-    public String getJSF_SUBVIEW_LN() {
-        return JSF_SUBVIEW_LN;
-    }
-    
-
-
-
-    //*********************************************************************
-    // Constructor and lifecycle management
-
-    public FacesValidator() {
-        super();
-        init();
-    }
-
-
-    protected void init() {
-        failed = false;
-    }
-
-
-    public void release() {
-        super.release();
-        init();
-    }
-
-    /**
-     * <p>Subclass override.  If it returns null, the subclass is
-     * telling us: do not validate.</p>
-     */
-
-
-    protected abstract DefaultHandler getSAXHandler();
-
-
-    protected abstract String getFailureMessage(String prefix, String uri);
-
-    //*********************************************************************
-    // Validation entry point
-
-    /**
-     * Validate a JSP page. Return an an array of Validation
-     * Messages if a validation failure occurs. Return null
-     * on success.
-     *
-     * @param prefix Value of directive prefix argument.
-     * @param uri    Value of directive uri argument.
-     * @param page   JspData page object.
-     * @return ValidationMessage[] An array of Validation messages.
-     */
-    public synchronized ValidationMessage[] validate(String prefix, String uri, PageData page) {
-        ValidationMessage[] result = null;
-        try {
-
-// get a handler
-            DefaultHandler h = getSAXHandler();
-
-	    // if the subclass doesn't want validation to ocurr
-	    if (null == h) {
-		// don't validate
-		return result;
-	    }
-
-            // parse the page
-            SAXParserFactory f = SAXParserFactory.newInstance();
-            f.setNamespaceAware(true);
-            f.setValidating(true);
-            SAXParser p = f.newSAXParser();
-            p.parse(page.getInputStream(), h);
-
-//on validation failure generate error message
-            if (failed) {
-                result = vmFromString(getFailureMessage(prefix, uri));
-            } else {
-//success
-                result = null;
-            }
-
-        } catch (SAXException ex) {
-            result = vmFromString(ex.toString());
-        } catch (ParserConfigurationException ex) {
-            result = vmFromString(ex.toString());
-        } catch (IOException ex) {
-            result = vmFromString(ex.toString());
-        }
-        // Make sure all resources are released
-        this.release();
-        return result;
-    }
-
-
-    //*********************************************************************
-    // Utility functions
-
-    /**
-     * Construct a ValidationMessage[] from a single String and no ID.
-     *
-     * @param message Message string.
-     * @return ValidationMessage[] An array of Validation Messages.
-     */
-    private ValidationMessage[] vmFromString(String message) {
-        return new ValidationMessage[]{
-            new ValidationMessage(null, message)
-        };
-    }
-
-
-    protected void debugPrintTagData(String ns, String ln, String qn,
-                                     Attributes attrs) {
-        int
-            i = 0,
-            len = attrs.getLength();
-        System.out.println("nameSpace: " + ns + " localName: " + ln +
-                           " QName: " + qn);
-        for (i = 0; i < len; i++) {
-            System.out.println("\tlocalName: " + attrs.getLocalName(i));
-            System.out.println("\tQName: " + attrs.getQName(i));
-            System.out.println("\tvalue: " + attrs.getValue(i) + "\n");
-        }
-    }
-
-
-    /**
-     * This method provides for the ability of the TLV to use whatever
-     * user defined tag lib prefix is in the page to recognize tags.
-     */
-
-    protected void maybeSnagTLPrefixes(String qName, Attributes attrs) {
-
-        if (!qName.equals("jsp:root")) {
-            return;
-        }
-        int
-            colon,
-            i = 0,
-            len = attrs.getLength();
-        String
-            prefix = null,
-            value = null;
-        for (i = 0; i < len; i++) {
-            if (null != (value = attrs.getValue(i)) &&
-                null != (qName = attrs.getQName(i))) {
-                if (qName.startsWith("xmlns:") && 7 <= qName.length()) {
-                    prefix = qName.substring(6);
-                    if (value.equals(JSF_CORE_URI)) {
-                        JSF_CORE_PRE = prefix;
-                        JSF_SUBVIEW_QN = JSF_CORE_PRE + JSF_SUBVIEW_QN;
-                    } else if (value.equals(JSF_HTML_URI)) {
-                        JSF_HTML_PRE = prefix;
-                        JSF_FORM_QN = JSF_HTML_PRE + JSF_FORM_QN;
-                    } else if (value.equals(JSTL_OLD_CORE_URI) ||
-                        value.equals(JSTL_NEW_CORE_URI)) {
-                        JSTL_CORE_PRE = prefix;
-                        JSTL_IF_QN = JSTL_CORE_PRE + JSTL_IF_QN;
-                        JSTL_CHOOSE_QN = JSTL_CORE_PRE + JSTL_CHOOSE_QN;
-                        JSTL_FOREACH_QN = JSTL_CORE_PRE + JSTL_FOREACH_QN;
-                        JSTL_FORTOKENS_QN = JSTL_CORE_PRE + JSTL_FORTOKENS_QN;
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/TagParser.java b/jsf-ri/src/main/java/com/sun/faces/taglib/TagParser.java
deleted file mode 100644
index 6a5a35d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/TagParser.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib;
-
-/**
- * <p>Interface defining the Validator Tag Parser implementation methods</p>
- */
-public interface TagParser {
-
-    /**
-     * <p>Return the failure message for a failed validation</p>
-     *
-     * @return String Failure message
-     */
-    public String getMessage();
-
-
-    /**
-     * <p>Return false if validator conditions have not been met</p>
-     *
-     * @return boolean false if validation conditions have not been met
-     */
-    public boolean hasFailed();
-
-
-    /**
-     * <p>Set the Validator Info Bean</p>
-     */
-    public void setValidatorInfo(ValidatorInfo validatorInfo);
-
-
-    /**
-     * <p>Parse the starting element.  Parcel out to appropriate
-     * handler method.</p>
-     */
-    public void parseStartElement();
-
-
-    /**
-     * <p>Parse the ending element.  Parcel out to appropriate
-     * handler method.</p>
-     */
-    public void parseEndElement();
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/ValidatorInfo.java b/jsf-ri/src/main/java/com/sun/faces/taglib/ValidatorInfo.java
deleted file mode 100644
index 0d713df..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/ValidatorInfo.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib;
-
-import org.xml.sax.Attributes;
-
-/**
- *
- *
- */
-public class ValidatorInfo {
-
-    //*********************************************************************
-    // Validation and configuration state (protected)
-    private String nameSpace;
-    private String localName;
-    private String qName;
-    private Attributes attributes;
-    private FacesValidator validator;
-    private String prefix;
-    private String uri;
-
-
-    public void setNameSpace(String nameSpace) {
-        this.nameSpace = nameSpace;
-    }
-
-
-    public String getNameSpace() {
-        return nameSpace;
-    }
-
-
-    public void setLocalName(String localName) {
-        this.localName = localName;
-    }
-
-
-    public String getLocalName() {
-        return localName;
-    }
-
-
-    public void setQName(String qName) {
-        this.qName = qName;
-    }
-
-
-    public String getQName() {
-        return qName;
-    }
-
-
-    public void setAttributes(Attributes attributes) {
-        this.attributes = attributes;
-    }
-
-
-    public Attributes getAttributes() {
-        return attributes;
-    }
-
-
-    public void setValidator(FacesValidator validator) {
-        this.validator = validator;
-    }
-
-
-    public FacesValidator getValidator() {
-        return validator;
-    }
-
-
-    public void setPrefix(String prefix) {
-        this.prefix = prefix;
-    }
-
-
-    public String getPrefix() {
-        return prefix;
-    }
-
-
-    public void setUri(String uri) {
-        this.uri = uri;
-    }
-
-
-    public String getUri() {
-        return uri;
-    }
-
-
-    public String toString() {
-        StringBuffer mesg = new StringBuffer();
-
-        mesg.append("\nValidatorInfo NameSpace: ");
-        mesg.append(nameSpace);
-        mesg.append("\nValidatorInfo LocalName: ");
-        mesg.append(localName);
-        mesg.append("\nValidatorInfo QName: ");
-        mesg.append(qName);
-        for (int i = 0; i < attributes.getLength(); i++) {
-            mesg.append("\nValidatorInfo attributes.getQName(");
-            mesg.append(i);
-            mesg.append("): ");
-            mesg.append(attributes.getQName(i));
-            mesg.append("\nValidatorInfo attributes.getValue(");
-            mesg.append(i);
-            mesg.append("): ");
-            mesg.append(attributes.getValue(i));
-        }
-        mesg.append("\nValidatorInfo prefix: ");
-        mesg.append(prefix);
-        mesg.append("\nValidatorInfo uri: ");
-        mesg.append(uri);
-
-        return mesg.toString();
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/ColumnTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/ColumnTag.java
deleted file mode 100644
index 3205647..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/ColumnTag.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.taglib.html_basic;
-
-import javax.faces.component.UIColumn;
-import javax.faces.component.UIComponent;
-import javax.faces.webapp.UIComponentELTag;
-import javax.servlet.jsp.JspException;
-import javax.el.ValueExpression;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-public class ColumnTag extends UIComponentELTag {
-
-    // Log instance for this class
-    private static final Logger logger = FacesLogger.TAGLIB.getLogger();
-
-    //
-    // Instance Variables
-    //
-
-
-    //
-    // Setter Methods
-    //
-    // PROPERTY: footerClass
-    private ValueExpression footerClass;
-    public void setFooterClass(ValueExpression footerClass) {
-        this.footerClass = footerClass;
-    }
-
-    // PROPERTY: headerClass
-    private ValueExpression headerClass;
-    public void setHeaderClass(ValueExpression headerClass) {
-        this.headerClass = headerClass;
-    }
-
-    // PROPERTY: rowHeader
-    private ValueExpression rowHeader;
-    public void setRowHeader(ValueExpression rowHeader) {
-        this.rowHeader = rowHeader;
-    }
-
-    //
-    // General Methods
-    //
-    public String getRendererType() {
-        return null;
-    }
-
-
-    public String getComponentType() {
-        return "javax.faces.Column";
-    }
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        UIColumn column;
-
-        try {
-            column = (UIColumn) component;
-        } catch (ClassCastException cce) {
-            throw new IllegalStateException("Component " + component.toString() + " not expected type.  Expected: UIColumn.  Perhaps you're missing a tag?");
-        }
-        if (footerClass != null) {
-            column.setValueExpression("footerClass", footerClass);
-        }
-        if (headerClass != null) {
-            column.setValueExpression("headerClass", headerClass);
-        }
-        if (rowHeader != null) {
-            column.setValueExpression("rowHeader", rowHeader);
-        }
-    }
-
-    //
-    // Methods From TagSupport
-    //
-
-    public int doStartTag() throws JspException {
-        try {
-            return super.doStartTag();
-        } catch (JspException e) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.log(Level.WARNING, getDebugString(), e);
-            }
-            throw e;
-        } catch (Throwable t) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.log(Level.WARNING, getDebugString(), t);
-            }
-            throw new JspException(t);
-        }
-    }
-
-
-    public int doEndTag() throws JspException {
-        try {
-            return super.doEndTag();
-        } catch (JspException e) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.log(Level.WARNING, getDebugString(), e);
-            }
-            throw e;
-        } catch (Throwable t) {
-            if (logger.isLoggable(Level.WARNING)) {
-                logger.log(Level.WARNING, getDebugString(), t);
-            }
-            throw new JspException(t);
-        }
-    }
-
-    // RELEASE
-    public void release() {
-        super.release();
-        this.headerClass = null;
-        this.footerClass = null;
-    }
-
-    public String getDebugString() {
-        return "id: " + this.getId() + " class: " +
-            this.getClass().getName();
-    }
-
-}
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/CommandTagParserImpl.java b/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/CommandTagParserImpl.java
deleted file mode 100644
index b7d93ad..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/CommandTagParserImpl.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.html_basic;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.taglib.TagParser;
-import com.sun.faces.taglib.ValidatorInfo;
-import org.xml.sax.Attributes;
-
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-
-/**
- * <p> Parses the command tag attributes and verifies that the required
- * attributes are present</p>
- */
-public class CommandTagParserImpl implements TagParser {
-
-    //*********************************************************************
-    // Validation and configuration state (protected)
-
-    // PENDING(edburns): Make this localizable
-    private StringBuffer failureMessages;	// failureMessages
-    private boolean failed;
-    private ValidatorInfo validatorInfo;
-
-    //*********************************************************************
-    // Constructor and lifecycle management
-
-    /**
-     * <p>CommandTagParserImpl constructor</p>
-     */
-    public CommandTagParserImpl() {
-        failed = false;
-        failureMessages = new StringBuffer();
-    }
-
-
-    /**
-     * <p>Set the validator info object that has the current tag
-     * information</p>
-     *
-     * @param ValidatorInfo object with current tag info
-     */
-    public void setValidatorInfo(ValidatorInfo validatorInfo) {
-        this.validatorInfo = validatorInfo;
-    }
-
-
-    /**
-     * <p>Get the failure message</p>
-     *
-     * @return String Failure message
-     */
-    public String getMessage() {
-        return failureMessages.toString();
-    }
-
-
-    /**
-     * <p>Return false if validator conditions have not been met</p>
-     *
-     * @return boolean false if validation conditions have not been met
-     */
-    public boolean hasFailed() {
-        return failed;
-    }
-
-
-    /**
-     * <p>Parse the starting element.  Parcel out to appropriate
-     * handler method.</p>
-     */
-    public void parseStartElement() {
-        String ns = validatorInfo.getNameSpace();
-        String ln = validatorInfo.getLocalName();
-
-        if (ns.equals(RIConstants.HTML_NAMESPACE)) {
-            if (ln.equals("commandButton")) {
-                handleCommandButton();
-            }
-        
-        }
-    }
-
-
-    /**
-     * <p>Parse the end element</p>
-     */
-    public void parseEndElement() {
-        //no parsing required
-    }
-
-
-    //*********************************************************************
-    // Private methods
-
-    /**
-     * <p>set failed flag to true unless tag has a value attribute</p>.
-     * <p/>
-     * <p>PRECONDITION: qn is a commandButton</p>
-     */
-    private void handleCommandButton() {
-        Attributes attrs = validatorInfo.getAttributes();
-        String ln = validatorInfo.getLocalName();
-        boolean hasValue = false;
-        boolean hasImage = false;
-	boolean hasBinding = false;
-
-        for (int i = 0; i < attrs.getLength(); i++) {
-            if (attrs.getLocalName(i).equals("value")) {
-                hasValue = true;
-            }
-            if (attrs.getLocalName(i).equals("image")) {
-                hasImage = true;
-            }
-            if (attrs.getLocalName(i).equals("binding")) {
-                hasBinding = true;
-            }
-        }
-        if (failed = (!hasBinding && !(hasValue || hasImage))) {
-            Object[] obj = new Object[1];
-            obj[0] = ln;
-            ResourceBundle rb = ResourceBundle.getBundle(
-                RIConstants.TLV_RESOURCE_LOCATION);
-            failureMessages.append(
-                MessageFormat.format(rb.getString("TLV_COMMAND_ERROR"), obj));
-            failureMessages.append("\n");
-        }
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/HtmlBasicValidator.java b/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/HtmlBasicValidator.java
deleted file mode 100644
index 39b7103..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/html_basic/HtmlBasicValidator.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.html_basic;
-
-import com.sun.faces.taglib.FacesValidator;
-import com.sun.faces.taglib.ValidatorInfo;
-import com.sun.faces.util.Util;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.helpers.DefaultHandler;
-
-
-/**
- * <p>Top level validator for the html_basic tld</p>
- *
- * @author Justyna Horwat
- * @author Ed Burns
- */
-public class HtmlBasicValidator extends FacesValidator {
-
-    //*********************************************************************
-    // Validation and configuration state (protected)
-    private ValidatorInfo validatorInfo;
-    private CommandTagParserImpl commandTagParser;
-
-
-    //*********************************************************************
-    // Constructor and lifecycle management
-
-    public HtmlBasicValidator() {
-        super();
-        init();
-    }
-
-
-    protected void init() {
-        super.init();
-        failed = false;
-        validatorInfo = new ValidatorInfo();
-
-        commandTagParser = new CommandTagParserImpl();
-        commandTagParser.setValidatorInfo(validatorInfo);
-    }
-
-
-    public void release() {
-        super.release();
-        init();
-    }
-
-
-    protected DefaultHandler getSAXHandler() {
-	// don't run the TLV if we're in designTime, or the RIConstants
-	// says not to.
-	if (java.beans.Beans.isDesignTime() || 
-	    !Util.isHtmlTLVActive()) {
-	    return null;
-	}
-	
-        return new HtmlBasicValidatorHandler();
-    }
-
-
-    protected String getFailureMessage(String prefix, String uri) {
-        // we should only get called if this Validator failed        
-
-        StringBuffer result = new StringBuffer();
-      
-        if (commandTagParser.getMessage() != null) {
-            result.append(commandTagParser.getMessage());
-        }
-        return result.toString();
-    }
-	    
-    //*********************************************************************
-    // SAX handler
-
-    /**
-     * The handler that provides the base of the TLV implementation.
-     */
-    private class HtmlBasicValidatorHandler extends DefaultHandler {
-
-        /**
-         * Parse the starting element.  Parcel out to appropriate
-         * handler method.
-         *
-         * @param ns Element name space.
-         * @param ln Element local name.
-         * @param qn Element QName.
-         * @param attrs  Element's Attribute list.
-         */
-        public void startElement(String ns,
-                                 String ln,
-                                 String qn,
-                                 Attributes attrs) {
-            maybeSnagTLPrefixes(qn, attrs);
-            validatorInfo.setNameSpace(ns);
-            validatorInfo.setLocalName(ln);
-            validatorInfo.setQName(qn);
-            validatorInfo.setAttributes(attrs);
-
-            commandTagParser.parseStartElement();
-            if (commandTagParser.hasFailed()) {
-                failed = true;
-            }
-        }
-
-
-        /**
-         * Parse the ending element. If it is a specific JSTL tag
-         * make sure that the nested count is decreased.
-         *
-         * @param ns Element namespace.
-         * @param ln Element local name.
-         * @param qn Element QName.
-         */
-        public void endElement(String ns, String ln, String qn) {
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AbstractConverterTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AbstractConverterTag.java
deleted file mode 100644
index 155f0c1..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AbstractConverterTag.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.webapp.ConverterELTag;
-import javax.faces.convert.Converter;
-import javax.faces.context.FacesContext;
-import javax.faces.FacesException;
-import javax.el.ValueExpression;
-import javax.el.ELContext;
-import javax.servlet.jsp.JspException;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>Base class for all <code>ConverterTag<code>s.</p>
- */
-public class AbstractConverterTag extends ConverterELTag {
-
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-    /**
-     * <p>The {@link javax.el.ValueExpression} that evaluates to an object that
-     * implements {@link javax.faces.convert.Converter}.</p>
-     */
-    protected ValueExpression binding = null;
-
-
-    /**
-     * <p>The identifier of the {@link javax.faces.convert.Converter}
-     * instance to be created.</p>
-     */
-    protected ValueExpression converterId = null;
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Set the expression that will be used to create a
-     * {@link javax.el.ValueExpression} that references a backing bean property
-     * of the {@link javax.faces.convert.Converter} instance to be created.</p>
-     *
-     * @param binding The new expression
-     */
-    public void setBinding(ValueExpression binding) {
-
-        this.binding = binding;
-
-    }
-
-
-    /**
-     * <p>Set the identifer of the {@link javax.faces.convert.Converter}
-     * instance to be created.
-     *
-     * @param converterId The identifier of the converter instance to be
-     *                    created.
-     */
-    public void setConverterId(ValueExpression converterId) {
-
-        this.converterId = converterId;
-
-    }
-
-    // --------------------------------------------- Methods from ConverterELTag
-
-
-    protected Converter createConverter() throws JspException {
-
-        try {
-            return createConverter(converterId,
-                                   binding,
-                                   FacesContext.getCurrentInstance());
-        } catch (FacesException fe) {
-            throw new JspException(fe.getCause());
-        }
-
-    }
-
-
-    protected static Converter createConverter(ValueExpression converterId,
-                                               ValueExpression binding,
-                                               FacesContext facesContext) {
-
-        ELContext elContext = facesContext.getELContext();
-        Converter converter = null;
-
-        // If "binding" is set, use it to create a converter instance.
-        if (binding != null) {
-            try {
-                converter = (Converter) binding.getValue(elContext);
-                if (converter != null) {
-                    return converter;
-                }
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-
-        // If "converterId" is set, use it to create the converter
-        // instance.  If "converterId" and "binding" are both set, store the
-        // converter instance in the value of the property represented by
-        // the ValueExpression 'binding'.
-        if (converterId != null) {
-            try {
-                String converterIdVal = (String)
-                     converterId.getValue(elContext);
-                converter = facesContext.getApplication()
-                     .createConverter(converterIdVal);
-                if (converter != null && binding != null) {
-                    binding.setValue(elContext, converter);
-                }
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-
-        if (converter == null) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.CANNOT_CONVERT_ID,
-                          converterId != null ? converterId.getExpressionString() : "",
-                          binding != null ? binding.getExpressionString() : ""));
-            }
-        }
-
-        return converter;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AbstractValidatorTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AbstractValidatorTag.java
deleted file mode 100644
index e987007..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AbstractValidatorTag.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.util.Util;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.FacesLogger;
-
-import javax.faces.webapp.ValidatorELTag;
-import javax.faces.validator.Validator;
-import javax.faces.context.FacesContext;
-import javax.faces.FacesException;
-import javax.servlet.jsp.JspException;
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>Base class for all <code>ValidatorTag<code>s.</p>
- */
-public class AbstractValidatorTag extends ValidatorELTag {
-
-     private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-    /**
-     * <p>The {@link javax.el.ValueExpression} that evaluates to an object that
-     * implements {@link javax.faces.convert.Converter}.</p>
-     */
-    protected ValueExpression binding = null;
-
-
-    /**
-     * <p>The identifier of the {@link javax.faces.validator.Validator}
-     * instance to be created.</p>
-     */
-    protected ValueExpression validatorId = null;    
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Set the expression that will be used to create a
-     * {@link javax.el.ValueExpression} that references a backing bean property
-     * of the {@link javax.faces.validator.Validator} instance to be created.</p>
-     *
-     * @param binding The new expression
-     */
-    public void setBinding(ValueExpression binding) {
-
-        this.binding = binding;
-
-    } // END setBinding
-
-
-    /**
-     * <p>Set the identifer of the {@link javax.faces.validator.Validator}
-     * instance to be created.
-     *
-     * @param validatorId The identifier of the converter instance to be
-     * created.
-     */
-    public void setValidatorId(ValueExpression validatorId) {
-
-        this.validatorId = validatorId;
-
-    } // END setValidatorId
-
-
-    // --------------------------------------------- Methods from ValdiatorELTag
-
-
-    protected Validator createValidator() throws JspException {
-
-        try {
-            return createValidator(validatorId,
-                                   binding,
-                                   FacesContext.getCurrentInstance());
-        } catch (FacesException fe) {
-            throw new JspException(fe.getCause());
-        }
-
-    }
-
-
-    protected static Validator createValidator(ValueExpression validatorId,
-                                               ValueExpression binding,
-                                               FacesContext facesContext) {
-
-        ELContext elContext = facesContext.getELContext();
-        Validator validator = null;
-
-        // If "binding" is set, use it to create a validator instance.
-        if (binding != null) {
-            try {
-                validator = (Validator) binding.getValue(elContext);
-                if (validator != null) {
-                    return validator;
-                }
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-
-        // If "validatorId" is set, use it to create the validator
-        // instance.  If "validatorId" and "binding" are both set, store the
-        // validator instance in the value of the property represented by
-        // the ValueExpression 'binding'.
-        if (validatorId != null) {
-            try {
-                String validatorIdVal = (String)
-                     validatorId.getValue(elContext);
-                validator = facesContext.getApplication()
-                     .createValidator(validatorIdVal);
-                if (validator != null && binding != null) {
-                    binding.setValue(elContext, validator);
-                }
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-
-        if (validator == null) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                     MessageUtils.getExceptionMessageString(
-                          MessageUtils.CANNOT_VALIDATE_ID,
-                          validatorId != null ? validatorId.getExpressionString() : "",
-                          binding != null ? binding.getExpressionString() : ""));
-            }
-        }
-
-        return validator;
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ActionListenerTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ActionListenerTag.java
deleted file mode 100644
index ec562ce..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ActionListenerTag.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ValueExpression;
-import javax.faces.component.ActionSource;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionListener;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.webapp.UIComponentClassicTagBase;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.io.Serializable;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-
-/**
- * <p>Tag implementation that creates a {@link ActionListener} instance
- * and registers it on the {@link UIComponent} associated with our most
- * immediate surrounding instance of a tag whose implementation class
- * is a subclass of {@link UIComponentClassicTagBase}.  This tag creates no output to
- * the page currently being created.</p>
- * <p/>
- * <p>This class may be used directly to implement a generic event handler
- * registration tag (based on the fully qualified Java class name specified
- * by the <code>type</code> attribute), or as a base class for tag instances
- * that support specific {@link ActionListener} subclasses.</p>
- * <p/>
- * <p>Subclasses of this class must implement the
- * <code>createActionListener()</code> method, which creates and returns a
- * {@link ActionListener} instance.  Any configuration properties that
- * are required by this {@link ActionListener} instance must have been
- * set by the <code>createActionListener()</code> method.  Generally,
- * this occurs by copying corresponding attribute values on the tag
- * instance.</p>
- * <p/>
- * <p>This tag creates no output to the page currently being created.  It
- * is used solely for the side effect of {@link ActionListener}
- * creation.</p>
- */
-
-public class ActionListenerTag extends TagSupport {
-
-    // ------------------------------------------------------------- Attributes
-
-    private static final long serialVersionUID = -5222351612904952740L;
-    private static final Logger logger = FacesLogger.TAGLIB.getLogger();
-    /**
-     * <p>The fully qualified class name of the {@link ActionListener}
-     * instance to be created.</p>
-     */
-    private ValueExpression type = null;
-
-    /**
-     * <p>The value expression used to create a listener instance and it is
-     * also used to wire up this listener to an {@link ActionListener} property
-     * of a JavaBean class.</p>
-     */
-    private ValueExpression binding = null;
-
-    /**
-     * <p>Set the fully qualified class name of the
-     * {@link ActionListener} instance to be created.
-     *
-     * @param type The new class name
-     */
-    public void setType(ValueExpression type) {
-
-        this.type = type;
-
-    }
-
-    /*
-     * <p>Set the value binding expression  for this listener.</p>
-     *
-     * @param binding The new value binding expression
-     */
-    public void setBinding(ValueExpression binding) {
-        this.binding = binding;
-    }
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the specified {@link ActionListener}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentClassicTagBase}
-     * instance, if the {@link UIComponent} instance was created by this
-     * execution of the containing JSP page.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) {
-            Object params[] = {this.getClass().getName()};
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(
-                      MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID, params));
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }
-
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
-        }
-        if (!(component instanceof ActionSource)) {           
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(
-                      MessageUtils.NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID,
-                      "actionListener",
-                      "javax.faces.component.ActionSource"));
-        }
-
-        // If binding is null, type is set and is a literal value,
-        // then don't bother wrapping.  Just instantiate and
-        // set.
-        ActionListener listener;
-        if (binding == null && type != null && type.isLiteralText()) {
-            try {
-                listener = (ActionListener)
-                     Util.getListenerInstance(type, null);
-            } catch (Exception e) {
-                throw new JspException(e.getMessage(), e.getCause());
-            }
-        } else {
-            listener = new BindingActionListener(type, binding);
-        }
-        
-        ((ActionSource) component).addActionListener(listener);
-
-        return (SKIP_BODY);
-
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.type = null;
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class BindingActionListener
-         implements ActionListener, Serializable {
-
-        private ValueExpression type;
-        private ValueExpression binding;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public BindingActionListener(ValueExpression type,
-                                     ValueExpression binding) {
-
-            this.type = type;
-            this.binding = binding;
-
-        }
-
-        // ----------------------------------------- Methods from ActionListener
-
-
-        /**
-         * PENDING
-         *
-         * @param event The {@link javax.faces.event.ActionEvent} that has occurred
-         * @throws javax.faces.event.AbortProcessingException
-         *          Signal the JavaServer Faces
-         *          implementation that no further processing on the current event
-         *          should be performed
-         */
-        public void processAction(ActionEvent event) throws AbortProcessingException {           
-
-            ActionListener instance = (ActionListener)
-                     Util.getListenerInstance(type, binding);
-            if (instance != null) {
-                instance.processAction(event);
-            } else {
-                if (logger.isLoggable(Level.WARNING)) {
-                    logger.log(Level.WARNING,
-                               "jsf.core.taglib.action_or_valuechange_listener.null_type_binding",
-                               new Object[] {
-                                "ActionListener",
-                                event.getComponent().getClientId(FacesContext.getCurrentInstance())});
-                }
-            }
-        }
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AttributeTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AttributeTag.java
deleted file mode 100644
index cc05a2a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/AttributeTag.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.webapp.UIComponentELTag;
-import javax.faces.webapp.UIComponentClassicTagBase;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import com.sun.faces.util.MessageUtils;
-
-
-/**
- * <p>Tag implementation that adds an attribute with a specified name
- * and String value to the component whose tag it is nested inside,
- * if the component does not already contain an attribute with the
- * same name.  This tag creates no output to the page currently
- * being created.</p>
- *
- */
-
-public class AttributeTag extends TagSupport {
-
-
-    // ------------------------------------------------------------- Attributes
-
-
-    /**
-     * <p>The name of the attribute to be created, if not already present.
-     */
-    private ValueExpression name = null;
-
-
-    /**
-     * <p>Set the attribute name.</p>
-     *
-     * @param name The new attribute name
-     */
-    public void setName(ValueExpression name) {
-
-        this.name = name;
-
-    }
-
-
-    /**
-     * <p>The value to be associated with this attribute, if it is created.</p>
-     */
-    private ValueExpression value = null;
-
-
-
-    /**
-     * <p>Set the attribute value.</p>
-     *
-     * @param value The new attribute value
-     */
-    public void setValue(ValueExpression value) {
-
-        this.value = value;
-
-    }
-
-
-    // -------------------------------------------------------- Methods from Tag
-
-
-    /**
-     * <p>Register the specified attribute name and value with the
-     * {@link UIComponent} instance associated with our most immediately
-     * surrounding {@link UIComponentClassicTagBase} instance, if this
-     * {@link UIComponent} does not already have a value for the
-     * specified attribute name.</p>
-     *
-     * @exception JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // Locate our parent UIComponentTagBase
-        UIComponentClassicTagBase tag =
-            UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) {
-        	String message = MessageUtils.getExceptionMessageString
-        	(MessageUtils.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR_MESSAGE_ID);
-        	throw new JspException(message);
-        }
-        
-        // Add this attribute if it is not already defined
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {
-        	String message = MessageUtils.getExceptionMessageString
-        	(MessageUtils.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG_MESSAGE_ID);
-        	throw new JspException(message);
-        }
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        ELContext elContext = context.getELContext();
-
-        String nameVal = null;
-        Object valueVal = null;
-	boolean isLiteral = false;
-
-        if (name != null) {
-            nameVal = (String) name.getValue(elContext);
-        }
-
-        if (value != null) {
-	    if (isLiteral = value.isLiteralText()) {
-		valueVal = value.getValue(elContext);
-	    }
-        }
-	
-        if (component.getAttributes().get(nameVal) == null) {
-	    if (isLiteral) {
-		component.getAttributes().put(nameVal, valueVal);
-	    }
-	    else {
-		component.setValueExpression(nameVal, value);
-	    }
-        }
-        return (SKIP_BODY);
-
-    }
-
-    public int doEndTag() throws JspException {
-	this.release();
-	return (EVAL_PAGE);
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.name = null;
-        this.value = null;
-
-    } // END release
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConvertDateTimeTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConvertDateTimeTag.java
deleted file mode 100644
index 2ff1fdb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConvertDateTimeTag.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.DateTimeConverter;
-import javax.servlet.jsp.JspException;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.TimeZone;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-/**
- * <p>ConvertDateTimeTag is a ConverterTag implementation for
- * javax.faces.convert.DateTimeConverter</p>
- *
- */
-
-public class ConvertDateTimeTag extends AbstractConverterTag {
-
-    private static final long serialVersionUID = -5815655767093677438L;
-    private static ValueExpression CONVERTER_ID_EXPR = null;
-
-     private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-    //
-    // Instance Variables
-    //
-
-    private ValueExpression dateStyleExpression;
-    private ValueExpression localeExpression;
-    private ValueExpression patternExpression;
-    private ValueExpression timeStyleExpression;
-    private ValueExpression timeZoneExpression;
-    private ValueExpression typeExpression;
-
-    private String dateStyle;
-    private Locale locale;
-    private String pattern;
-    private String timeStyle;
-    private TimeZone timeZone;
-    private String type;// Log instance for this class
-
-
-    // Attribute Instance Variables
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-    public ConvertDateTimeTag() {
-        super();
-        init();
-    }
-
-
-    public void release() {
-        super.release();
-        init();
-    }
-
-
-    private void init() {
-        dateStyle = "default";
-        dateStyleExpression = null;
-        locale = null;
-        localeExpression = null;
-        pattern = null;
-        patternExpression = null;
-        timeStyle = "default";
-        timeStyleExpression = null;
-        timeZone = null;
-        timeZoneExpression = null;
-        type = "date";
-        typeExpression = null;
-        if (CONVERTER_ID_EXPR == null) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ExpressionFactory factory = context.getApplication().
-                    getExpressionFactory();
-            CONVERTER_ID_EXPR = factory.createValueExpression(
-                    context.getELContext(),"javax.faces.DateTime",String.class);
-        }
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-
-    public void setDateStyle(ValueExpression dateStyle) {
-        this.dateStyleExpression = dateStyle;
-    }
-
-
-    public void setLocale(ValueExpression locale) {
-        this.localeExpression = locale;
-    }
-
-
-    public void setPattern(ValueExpression pattern) {
-        this.patternExpression = pattern;
-    }
-
-
-    public void setTimeStyle(ValueExpression timeStyle) {
-        this.timeStyleExpression = timeStyle;
-    }
-
-
-    public void setTimeZone(ValueExpression timeZone) {
-        this.timeZoneExpression = timeZone;
-    }
-
-
-    public void setType(ValueExpression type) {
-        this.typeExpression = type;
-    }
-
-    public int doStartTag() throws JspException {
-        super.setConverterId(CONVERTER_ID_EXPR);
-        return super.doStartTag();
-    }
-
-    //
-    // Methods from ConverterTag
-    //
-
-    protected Converter createConverter() throws JspException {
-
-        DateTimeConverter result = (DateTimeConverter) super.createConverter();
-        assert (null != result);
-
-        evaluateExpressions();
-        result.setDateStyle(dateStyle);
-        result.setLocale(locale);
-        result.setPattern(pattern);
-        result.setTimeStyle(timeStyle);
-        result.setTimeZone(timeZone);
-        result.setType(type);
-
-        return result;
-    }
-
-
-    /* Evaluates expressions as necessary */
-    private void evaluateExpressions() {
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        ELContext elContext = facesContext.getELContext();
-
-        if (dateStyleExpression != null) {
-            dateStyle = (String)
-            ELUtils.evaluateValueExpression(dateStyleExpression, elContext);
-        }
-        if (patternExpression != null) {
-            pattern = (String)
-            ELUtils.evaluateValueExpression(patternExpression, elContext);
-        }
-        if (timeStyleExpression != null) {
-            timeStyle = (String)
-            ELUtils.evaluateValueExpression(timeStyleExpression, elContext);
-        }
-        if (typeExpression != null) {
-            type = (String)
-            ELUtils.evaluateValueExpression(typeExpression, elContext);
-        } else {
-            if (timeStyleExpression != null) {
-                if (dateStyleExpression != null) {
-                    type = "both";
-                } else {
-                    type = "time";
-                }
-            } else {
-                type = "date";
-            }
-        }
-        if (localeExpression != null) {
-            if (localeExpression.isLiteralText()) {
-                locale = getLocale(localeExpression.getExpressionString());
-            } else {
-                Object loc = ELUtils.evaluateValueExpression(localeExpression,
-                                                          elContext);
-                if (loc != null) {
-                    if (loc instanceof String) {
-                        locale = getLocale((String) loc);
-                    } else if (loc instanceof Locale) {
-                        locale = (Locale) loc;
-                    } else {
-                        Object[] params = {
-                            "locale",
-                            "java.lang.String or java.util.Locale",
-                            loc.getClass().getName()
-                        };
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE,
-                                       "jsf.core.tags.eval_result_not_expected_type",
-                                       params);
-                        }
-                        throw new FacesException(
-                            MessageUtils.getExceptionMessageString(
-                                MessageUtils.EVAL_ATTR_UNEXPECTED_TYPE, params));
-                    }
-                } else {
-                    locale = facesContext.getViewRoot().getLocale();
-                }
-            }
-        }
-        if (timeZoneExpression != null) {
-            if (timeZoneExpression.isLiteralText()) {
-                timeZone =
-                TimeZone.getTimeZone(
-                    timeZoneExpression.getExpressionString());
-            } else {
-                Object tz = ELUtils.evaluateValueExpression(timeZoneExpression,
-                                                         elContext);
-                if (tz != null) {
-                    if (tz instanceof String) {
-                        timeZone = TimeZone.getTimeZone((String) tz);
-                    } else if (tz instanceof TimeZone) {
-                        timeZone = (TimeZone) tz;
-                    } else {
-                        Object[] params = {
-                            "timeZone",
-                            "java.lang.String or java.util.TimeZone",
-                            tz.getClass().getName()
-                        };
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE,
-                                       "jsf.core.tags.eval_result_not_expected_type",
-                                       params);
-                        }
-                        throw new FacesException(
-                            MessageUtils.getExceptionMessageString(
-                                MessageUtils.EVAL_ATTR_UNEXPECTED_TYPE, params));
-                    }
-                }
-            }
-        }
-    }
-
-    protected static Locale getLocale(String string) {
-        if (string == null) {
-            return Locale.getDefault();
-        }
-
-        if (string.length() > 2) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                           "jsf.core.taglib.invalid_locale_value",
-                           string);
-            }
-        } else {
-            String[] langs = Locale.getISOLanguages();
-            Arrays.sort(langs);
-            if (Arrays.binarySearch(langs, string) < 0) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.core.taglib.invalid_language",
-                               string);
-                }
-            }
-        }
-
-        return new Locale(string, "");
-    }
-} // end of class ConvertDateTimeTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConvertNumberTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConvertNumberTag.java
deleted file mode 100644
index b00f2ef..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConvertNumberTag.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.NumberConverter;
-import javax.servlet.jsp.JspException;
-
-import com.sun.faces.el.ELUtils;
-
-/**
- * <p>ConvertNumberTag is a ConverterTag implementation for
- * javax.faces.convert.NumberConverter</p>
- *
- */
-
-public class ConvertNumberTag extends AbstractConverterTag {
-
-    private static final long serialVersionUID = -2710405278792415110L;
-    private static ValueExpression CONVERTER_ID_EXPR = null;
-    
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-
-    //
-    // Instance Variables
-    //
-
-    private ValueExpression currencyCodeExpression;
-    private ValueExpression currencySymbolExpression;
-    private ValueExpression groupingUsedExpression;
-    private ValueExpression integerOnlyExpression;
-    private ValueExpression maxFractionDigitsExpression;
-    private ValueExpression maxIntegerDigitsExpression;
-    private ValueExpression minFractionDigitsExpression;
-    private ValueExpression minIntegerDigitsExpression;
-    private ValueExpression localeExpression;
-    private ValueExpression patternExpression;
-    private ValueExpression typeExpression;
-
-    private String currencyCode;
-    private String currencySymbol;
-    private boolean groupingUsed;
-    private boolean integerOnly;
-    private int maxFractionDigits;
-    private int maxIntegerDigits;
-    private int minFractionDigits;
-    private int minIntegerDigits;
-    private Locale locale;
-    private String pattern;
-    private String type;
-
-    private boolean maxFractionDigitsSpecified;
-    private boolean maxIntegerDigitsSpecified;
-    private boolean minFractionDigitsSpecified;
-    private boolean minIntegerDigitsSpecified;
-
-    // Attribute Instance Variables
-    
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-    public ConvertNumberTag() {
-        super();
-        init();
-    }
-
-
-    public void release() {
-        super.release();
-        init();
-    }
-
-
-    private void init() {
-        currencyCode = null;
-        currencyCodeExpression = null;
-        currencySymbol = null;
-        currencySymbolExpression = null;
-        groupingUsed = true;
-        groupingUsedExpression = null;
-        integerOnly = false;
-        integerOnlyExpression = null;
-        maxFractionDigits = 0;
-        maxFractionDigitsExpression = null;
-        maxFractionDigitsSpecified = false;
-        maxIntegerDigits = 0;
-        maxIntegerDigitsExpression = null;
-        maxIntegerDigitsSpecified = false;
-        minFractionDigits = 0;
-        minFractionDigitsExpression = null;
-        minFractionDigitsSpecified = false;
-        minIntegerDigits = 0;
-        minIntegerDigitsExpression = null;
-        minIntegerDigitsSpecified = false;
-        locale = null;
-        localeExpression = null;
-        pattern = null;
-        patternExpression = null;
-        type = "number";
-        typeExpression = null;
-        if (CONVERTER_ID_EXPR == null) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ExpressionFactory factory =
-                context.getApplication().getExpressionFactory();
-            CONVERTER_ID_EXPR =
-                factory.createValueExpression(context.getELContext(), 
-                    "javax.faces.Number", String.class);
-        }
-    }
-
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-
-    public void setCurrencyCode(ValueExpression currencyCode) {
-        this.currencyCodeExpression = currencyCode;
-    }
-
-
-    public void setCurrencySymbol(ValueExpression currencySymbol) {
-        this.currencySymbolExpression = currencySymbol;
-    }
-
-
-    public void setGroupingUsed(ValueExpression groupingUsed) {
-        this.groupingUsedExpression = groupingUsed;
-    }
-
-
-    public void setIntegerOnly(ValueExpression integerOnly) {
-        this.integerOnlyExpression = integerOnly;
-    }
-
-
-    public void setMaxFractionDigits(ValueExpression maxFractionDigits) {
-        this.maxFractionDigitsExpression = maxFractionDigits;
-        this.maxFractionDigitsSpecified = true;
-    }
-
-
-    public void setMaxIntegerDigits(ValueExpression maxIntegerDigits) {
-        this.maxIntegerDigitsExpression = maxIntegerDigits;
-        this.maxIntegerDigitsSpecified = true;
-    }
-
-
-    public void setMinFractionDigits(ValueExpression minFractionDigits) {
-        this.minFractionDigitsExpression = minFractionDigits;
-        this.minFractionDigitsSpecified = true;
-    }
-
-
-    public void setMinIntegerDigits(ValueExpression minIntegerDigits) {
-        this.minIntegerDigitsExpression = minIntegerDigits;
-    }
-
-
-    public void setLocale(ValueExpression locale) {
-        this.localeExpression = locale;
-    }
-
-
-    public void setPattern(ValueExpression pattern) {
-        this.patternExpression = pattern;
-    }
-
-
-    public void setType(ValueExpression type) {
-        this.typeExpression = type;
-    }
-
-    public int doStartTag() throws JspException {
-        super.setConverterId(CONVERTER_ID_EXPR);
-        return super.doStartTag();
-    }
-
-    // 
-    // Methods from ConverterTag
-    // 
-
-    protected Converter createConverter() throws JspException {
-
-        NumberConverter result = (NumberConverter) super.createConverter();
-        assert (null != result);
-
-        evaluateExpressions();
-        result.setCurrencyCode(currencyCode);
-        result.setCurrencySymbol(currencySymbol);
-        result.setGroupingUsed(groupingUsed);
-        result.setIntegerOnly(integerOnly);
-        if (maxFractionDigitsSpecified) {
-            result.setMaxFractionDigits(maxFractionDigits);
-        }
-        if (maxIntegerDigitsSpecified) {
-            result.setMaxIntegerDigits(maxIntegerDigits);
-        }
-        if (minFractionDigitsSpecified) {
-            result.setMinFractionDigits(minFractionDigits);
-        }
-        if (minIntegerDigitsSpecified) {
-            result.setMinIntegerDigits(minIntegerDigits);
-        }
-        result.setLocale(locale);
-        result.setPattern(pattern);
-        result.setType(type);
-
-        return result;
-    }
-
-
-    /* Evaluates expressions as necessary */
-    private void evaluateExpressions() {
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        ELContext elContext = facesContext.getELContext();
-
-        if (currencyCodeExpression != null) {
-            currencyCode = (String)
-            ELUtils.evaluateValueExpression(currencyCodeExpression,
-                elContext);
-        }
-        if (currencySymbolExpression != null) {
-            currencySymbol = (String)
-            ELUtils.evaluateValueExpression(currencySymbolExpression,
-                elContext);
-        }
-        if (patternExpression != null) {
-            pattern = (String)
-            ELUtils.evaluateValueExpression(patternExpression,
-                elContext);
-        }
-        if (typeExpression != null) {
-            type = (String)
-            ELUtils.evaluateValueExpression(typeExpression,
-                elContext);
-        }
-        if (groupingUsedExpression != null) {
-            if (groupingUsedExpression.isLiteralText()) {
-                groupingUsed =
-                Boolean.valueOf(
-                    groupingUsedExpression.getExpressionString()).
-                    booleanValue();
-            } else {
-                groupingUsed = ((Boolean)
-                                   ELUtils.evaluateValueExpression(groupingUsedExpression,
-                                       elContext)).booleanValue();
-            }
-        }
-        if (integerOnlyExpression != null) {
-            if (integerOnlyExpression.isLiteralText()) {
-                integerOnly =
-                Boolean.valueOf(
-                    integerOnlyExpression.getExpressionString()).
-                    booleanValue();
-            } else {
-                integerOnly = ((Boolean)
-                                  ELUtils.evaluateValueExpression(integerOnlyExpression,
-                                      elContext)).booleanValue();
-            }
-        }
-        if (maxFractionDigitsExpression != null) {
-            if (maxFractionDigitsExpression.isLiteralText()) {
-                maxFractionDigits =
-                Integer.valueOf(
-                    maxFractionDigitsExpression.getExpressionString()).
-                    intValue();
-            } else {
-                maxFractionDigits = ((Integer)
-                                        ELUtils.evaluateValueExpression(maxFractionDigitsExpression,
-                                            elContext)).intValue();
-            }
-        }
-        if (maxIntegerDigitsExpression != null) {
-            if (maxIntegerDigitsExpression.isLiteralText()) {
-                maxIntegerDigits =
-                Integer.valueOf(
-                    maxIntegerDigitsExpression.getExpressionString()).
-                    intValue();
-            } else {
-                maxIntegerDigits = ((Integer)
-                                       ELUtils.evaluateValueExpression(maxIntegerDigitsExpression,
-                                           elContext)).intValue();
-            }
-        }
-        if (minFractionDigitsExpression != null) {
-            if (minFractionDigitsExpression.isLiteralText()) {
-                minFractionDigits =
-                Integer.valueOf(
-                    minFractionDigitsExpression.getExpressionString()).
-                    intValue();
-            } else {
-                minFractionDigits = ((Integer)
-                                        ELUtils.evaluateValueExpression(minFractionDigitsExpression,
-                                            elContext)).intValue();
-            }
-        }
-        if (minIntegerDigitsExpression != null) {
-            if (minIntegerDigitsExpression.isLiteralText()) {
-                minIntegerDigits =
-                Integer.valueOf(
-                    minIntegerDigitsExpression.getExpressionString()).
-                    intValue();
-            } else {
-                minIntegerDigits = ((Integer)
-                                       ELUtils.evaluateValueExpression(minIntegerDigitsExpression,
-                                           elContext)).intValue();
-            }
-        }
-        
-        if (localeExpression != null) {
-            if (localeExpression.isLiteralText()) {
-                locale = getLocale(localeExpression.getExpressionString());
-            } else {
-                Object loc = ELUtils.evaluateValueExpression(localeExpression,
-                                                          elContext);
-                if (loc != null) {
-                    if (loc instanceof String) {
-                        locale = getLocale((String) loc);
-                    } else if (loc instanceof Locale) {
-                        locale = (Locale) loc;
-                    } else {
-                        Object[] params = {
-                            "locale",
-                            "java.lang.String or java.util.Locale",
-                            loc.getClass().getName()
-                        };
-                        if (LOGGER.isLoggable(Level.SEVERE)) {
-                            LOGGER.log(Level.SEVERE,
-                                       "jsf.core.tags.eval_result_not_expected_type",
-                                       params);
-                        }
-                        throw new FacesException(
-                            MessageUtils.getExceptionMessageString(
-                                MessageUtils.EVAL_ATTR_UNEXPECTED_TYPE, params));
-                    }
-                } else {
-                    locale = facesContext.getViewRoot().getLocale();
-                }
-            }
-        }
-
-    }
-
-
-    protected static Locale getLocale(String string) {
-        if (string == null) {
-            return Locale.getDefault();
-        }
-
-        if (string.length() > 2) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING,
-                           "jsf.core.taglib.invalid_locale_value",
-                           string);
-            }
-        } else {
-            String[] langs = Locale.getISOLanguages();
-            Arrays.sort(langs);
-            if (Arrays.binarySearch(langs, string) < 0) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.core.taglib.invalid_language",
-                               string);
-            }
-        }
-    }
-
-        return new Locale(string, "");
-    }
-    
-} // end of class ConvertNumberTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConverterTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConverterTag.java
deleted file mode 100644
index 0c466d8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ConverterTag.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.util.MessageUtils;
-
-import javax.el.ValueExpression;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.servlet.jsp.JspException;
-
-/**
- * Basic implementation of <code>ConverterELTag</code>.
- */
-public class ConverterTag extends AbstractConverterTag {
-
-    // --------------------------------------------- Methods from ConverterELTag
-
-
-    @Override
-    protected Converter createConverter() throws JspException {
-
-        if (converterId != null && converterId.isLiteralText()) {
-            return createConverter(converterId,
-                                   binding,
-                                   FacesContext.getCurrentInstance());
-        } else {
-            return new BindingConverter(converterId, binding);
-        }
-
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    public static class BindingConverter implements Converter, StateHolder {
-
-        ValueExpression converterId;
-        ValueExpression binding;       
-
-        // -------------------------------------------------------- Constructors
-
-
-        /**
-         * <p>This is only used during state restoration.</p>
-         */
-        public BindingConverter() {
-        }
-
-
-        public BindingConverter(ValueExpression converterId,
-                                ValueExpression binding) {
-
-            this.converterId = converterId;
-            this.binding = binding;
-
-        }
-
-        // ---------------------------------------------- Methods From Converter
-
-
-        public Object getAsObject(FacesContext context, UIComponent component, String value) {
-            Converter delegate = getDelegate(context);
-            if (delegate != null) {
-                return delegate.getAsObject(context, component, value);
-            } else {
-                throw new ConverterException(
-                     MessageUtils.getExceptionMessage(
-                          MessageUtils.CANNOT_CONVERT_ID,
-                          converterId != null ? converterId.getExpressionString() : "",
-                          binding != null ? binding.getExpressionString() : ""));
-            }
-        }
-
-        public String getAsString(FacesContext context, UIComponent component, Object value) {
-            Converter delegate = getDelegate(context);
-            if (delegate != null) {
-                return delegate.getAsString(context, component, value);
-            } else {
-                throw new ConverterException(
-                     MessageUtils.getExceptionMessage(
-                          MessageUtils.CANNOT_CONVERT_ID,
-                          converterId != null ? converterId.getExpressionString() : "",
-                          binding != null ? binding.getExpressionString() : "")); 
-            }
-        }
-
-        // -------------------------------------------- Methods from StateHolder
-
-
-        private Object[] state;
-        public Object saveState(FacesContext context) {
-
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            if (state == null) {
-                state = new Object[2];
-            }
-            state[0] = converterId;
-            state[1] = binding;
-
-            return state;
-
-        }
-
-        public void restoreState(FacesContext context, Object state) {
-
-            if (context == null) {
-                throw new NullPointerException();
-            }
-
-            this.state = (Object[]) state;
-            if (this.state != null) {
-                this.converterId = (ValueExpression) this.state[0];
-                this.binding = (ValueExpression) this.state[1];
-            }
-
-        }
-
-        public boolean isTransient() {
-
-            return false;
-
-        }
-
-        public void setTransient(boolean newTransientValue) {
-            //no-op
-        }
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private Converter getDelegate(FacesContext context) {
-
-            return createConverter(converterId, binding, context);
-
-        }
-
-    }
-    
-}
-
-
-
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/CoreTagParserImpl.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/CoreTagParserImpl.java
deleted file mode 100644
index f6a9ccd..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/CoreTagParserImpl.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.taglib.TagParser;
-import com.sun.faces.taglib.ValidatorInfo;
-
-/**
- * <p> Parses the command tag attributes and verifies that the required
- * attributes are present</p>
- */
-public class CoreTagParserImpl implements TagParser {
-
-    //*********************************************************************
-    // Validation and configuration state (protected)
-
-    // PENDING(edburns): Make this localizable
-    private StringBuffer failureMessages;	// failureMessages
-    private boolean failed;
-    private ValidatorInfo validatorInfo;
-
-    //*********************************************************************
-    // Constructor and lifecycle management
-
-    /**
-     * <p>CoreTagParserImpl constructor</p>
-     */
-    public CoreTagParserImpl() {
-        failed = false;
-        failureMessages = new StringBuffer();
-    }
-
-
-    /**
-     * <p>Set the validator info object that has the current tag
-     * information</p>
-     *
-     * @param validatorInfo object with current tag info
-     */
-    public void setValidatorInfo(ValidatorInfo validatorInfo) {
-        this.validatorInfo = validatorInfo;
-    }
-
-
-    /**
-     * <p>Get the failure message</p>
-     *
-     * @return String Failure message
-     */
-    public String getMessage() {
-        return failureMessages.toString();
-    }
-
-
-    /**
-     * <p>Return false if validator conditions have not been met</p>
-     *
-     * @return boolean false if validation conditions have not been met
-     */
-    public boolean hasFailed() {
-        return failed;
-    }
-
-
-    /**
-     * <p>Parse the starting element.  Parcel out to appropriate
-     * handler method.</p>
-     */
-    public void parseStartElement() {
-       
-        String ns = validatorInfo.getNameSpace();
-        String ln = validatorInfo.getLocalName();
-
-        if (ns.equals(RIConstants.CORE_NAMESPACE)) {
-            if(ln.equals("valueChangeListener")) {
-                handleListener();
-            } else if (ln.equals("actionListener")) {
-                handleListener();
-            } else if (ln.equals("converter")) {
-                handleConverter();
-            } else if (ln.equals("validator")) {
-                handleValidator();
-            }
-        }
-    }
-
-
-    /**
-     * <p>Parse the end element</p>
-     */
-    public void parseEndElement() {
-        //no parsing required
-    }
-
-
-    //*********************************************************************
-    // Private methods
-
-    /**
-     * <p>Listener tags must have a "type" and/or "binding" attribute.</p>
-     * <p/>
-     * <p>PRECONDITION: qn is an actionListener or valueChangeListener </p>
-     */
-    private void handleListener() {
-        Attributes attrs = validatorInfo.getAttributes();
-        String ln = validatorInfo.getLocalName();
-	boolean hasType = false;
-	boolean hasBinding = false;
-
-        for (int i = 0; i < attrs.getLength(); i++) {
-            if (attrs.getLocalName(i).equals("type")) {
-                hasType = true;
-            }
-            if (attrs.getLocalName(i).equals("binding")) {
-                hasBinding = true;
-            }
-        }
-        if (failed = (!hasBinding && !hasType)) {
-            Object[] obj = new Object[1];
-            obj[0] = ln;
-            ResourceBundle rb = ResourceBundle.getBundle(
-                RIConstants.TLV_RESOURCE_LOCATION);
-            failureMessages.append(
-                MessageFormat.format(rb.getString("TLV_LISTENER_ERROR"), obj));
-            failureMessages.append("\n");
-        }
-    }
-
-    /**
-     * <p>Validator tag must have a "validatorId" and/or "binding" attribute.</p>
-     * <p/>
-     * <p>PRECONDITION: qn is a validator</p>
-     */
-    private void handleValidator() {
-        Attributes attrs = validatorInfo.getAttributes();
-        String ln = validatorInfo.getLocalName();
-        boolean hasValidatorId = false;
-        boolean hasBinding = false;
-                                                                                     
-        for (int i = 0; i < attrs.getLength(); i++) {
-            if (attrs.getLocalName(i).equals("validatorId")) {
-                hasValidatorId = true;
-            }
-            if (attrs.getLocalName(i).equals("binding")) {
-                hasBinding = true;
-            }
-        }
-        if (failed = (!hasBinding && !hasValidatorId)) {
-            Object[] obj = new Object[1];
-            obj[0] = ln;
-            ResourceBundle rb = ResourceBundle.getBundle(
-                RIConstants.TLV_RESOURCE_LOCATION);
-            failureMessages.append(
-                MessageFormat.format(rb.getString("TLV_VALIDATOR_ERROR"), obj));
-            failureMessages.append("\n");
-        }
-    }
-
-    /**
-     * <p>Converter tag must have a "converterId" and/or "binding" attribute.</p>
-     * <p/>
-     * <p>PRECONDITION: qn is a converter</p>
-     */
-    private void handleConverter() {
-        Attributes attrs = validatorInfo.getAttributes();
-        String ln = validatorInfo.getLocalName();
-        boolean hasConverterId = false;
-        boolean hasBinding = false;
-                                                                                     
-        for (int i = 0; i < attrs.getLength(); i++) {
-            if (attrs.getLocalName(i).equals("converterId")) {
-                hasConverterId = true;
-            }
-            if (attrs.getLocalName(i).equals("binding")) {
-                hasBinding = true;
-            }
-        }
-        if (failed = (!hasBinding && !hasConverterId)) {
-            Object[] obj = new Object[1];
-            obj[0] = ln;
-            ResourceBundle rb = ResourceBundle.getBundle(
-                RIConstants.TLV_RESOURCE_LOCATION);
-            failureMessages.append(
-                MessageFormat.format(rb.getString("TLV_CONVERTER_ERROR"), obj));
-            failureMessages.append("\n");
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/CoreValidator.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/CoreValidator.java
deleted file mode 100644
index ba36dbf..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/CoreValidator.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.taglib.FacesValidator;
-import com.sun.faces.taglib.ValidatorInfo;
-import com.sun.faces.util.Util;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * <p>A TagLibrary Validator class to allow a TLD to mandate that
- * JSF tag must have an id if it is a child or sibling of a JSTL
- * conditional or iteration tag</p>
- *
- * @author Justyna Horwat
- */
-public class CoreValidator extends FacesValidator {
-
-    //*********************************************************************
-    // Constants
-
-    //*********************************************************************
-    // Validation and configuration state (protected)
-
-    private ValidatorInfo validatorInfo;
-    private IdTagParserImpl idTagParser;
-    private CoreTagParserImpl coreTagParser;
-
-    //*********************************************************************
-    // Constructor and lifecycle management
-
-    /**
-     * <p>CoreValidator constructor</p>
-     */
-    public CoreValidator() {
-        super();
-        init();
-    }
-
-
-    /**
-     * <p>Initialize state</p>
-     */
-    protected void init() {
-        super.init();
-        failed = false;
-        validatorInfo = new ValidatorInfo();
-
-        idTagParser = new IdTagParserImpl();
-        idTagParser.setValidatorInfo(validatorInfo);        
-  
-        coreTagParser = new CoreTagParserImpl();
-        coreTagParser.setValidatorInfo(validatorInfo);
-        
-    }
-
-
-    /**
-     * <p>Release and re-initialize state</p>
-     */
-    public void release() {
-        super.release();
-        init();
-    }
-
-    //
-    // Superclass overrides.
-    // 
-
-    /**
-     * <p>Get the validator handler</p>
-     */
-    protected DefaultHandler getSAXHandler() {
-        if (java.beans.Beans.isDesignTime() || 
-	    !Util.isCoreTLVActive()) {
-	    return null;
-	}
-        return new CoreValidatorHandler();
-    }
-
-
-    /**
-     * <p>Create failure message from any failed validations</p>
-     *
-     * @param prefix Tag library prefix
-     * @param uri    Tag library uri
-     */
-    protected String getFailureMessage(String prefix, String uri) {
-        // we should only get called if this Validator failed        
-        StringBuffer result = new StringBuffer();
-
-        if (idTagParser.getMessage() != null) {
-            result.append(idTagParser.getMessage());
-        }
-        if (coreTagParser.getMessage() != null) {
-            result.append(coreTagParser.getMessage());
-        }
-        
-        return result.toString();
-    }
-
-
-    //*********************************************************************
-    // SAX handler
-
-    /**
-     * <p>The handler that provides the base of the TLV implementation.</p>
-     */
-    private class CoreValidatorHandler extends DefaultHandler {
-
-        /**
-         * Parse the starting element. If it is a specific JSTL tag
-         * make sure that the nested JSF tags have IDs.
-         *
-         * @param ns Element name space.
-         * @param ln Element local name.
-         * @param qn Element QName.
-         * @param attrs  Element's Attribute list.
-         */
-        public void startElement(String ns,
-                                 String ln,
-                                 String qn,
-                                 Attributes attrs) {
-            maybeSnagTLPrefixes(qn, attrs);
-
-            validatorInfo.setNameSpace(ns);
-            validatorInfo.setLocalName(ln);
-            validatorInfo.setQName(qn);
-            validatorInfo.setAttributes(attrs);
-            validatorInfo.setValidator(CoreValidator.this);
-
-            idTagParser.parseStartElement();
-
-            if (idTagParser.hasFailed()) {
-                failed = true;
-            }
-            
-            coreTagParser.parseStartElement();
-
-            if (coreTagParser.hasFailed()) {
-                failed = true;
-            }
-        }
-
-
-        /**
-         * <p>Parse the ending element. If it is a specific JSTL tag
-         * make sure that the nested count is decreased.</p>
-         *
-         * @param ns Element name space.
-         * @param ln Element local name.
-         * @param qn Element QName.
-         */
-        public void endElement(String ns, String ln, String qn) {
-            validatorInfo.setNameSpace(ns);
-            validatorInfo.setLocalName(ln);
-            validatorInfo.setQName(qn);
-            idTagParser.parseEndElement();
-            coreTagParser.parseEndElement();
-            
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/IdTagParserImpl.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/IdTagParserImpl.java
deleted file mode 100644
index 07dcb80..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/IdTagParserImpl.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.taglib.FacesValidator;
-import com.sun.faces.taglib.TagParser;
-import com.sun.faces.taglib.ValidatorInfo;
-
-
-/**
- * <p>Parses tags to verify that an id attribute is present if it is
- * determined to be required</p>
- */
-public class IdTagParserImpl implements TagParser {
-
-    //*********************************************************************
-    // Constants
-
-    //*********************************************************************
-    // Validation and configuration state (protected)
-
-    private boolean siblingSatisfied;		// is there a JSF sibling?
-    private int requiresIdCount;		// nested count
-    private StringBuffer requiresIdList;	// list of failing tags
-    private boolean failed;
-    private ValidatorInfo validatorInfo;
-    private boolean nestedInNamingContainer;
-
-
-    //*********************************************************************
-    // Constructor and lifecycle management
-
-    /**
-     * <p>CommandTagParser constructor</p>
-     */
-    public IdTagParserImpl() {
-        failed = false;
-        siblingSatisfied = true;
-        requiresIdCount = 0;
-        requiresIdList = new StringBuffer();
-    }
-
-
-    /**
-     * <p>Set the validator info object that has the current tag
-     * information</p>
-     *
-     * @param validatorInfo object with current tag info
-     */
-    public void setValidatorInfo(ValidatorInfo validatorInfo) {
-        this.validatorInfo = validatorInfo;
-    }
-
-
-    /**
-     * <p>Get the failure message</p>
-     *
-     * @return String Failure message
-     */
-    public String getMessage() {
-        Object[] obj = new Object[1];
-        obj[0] = requiresIdList;
-        ResourceBundle rb = ResourceBundle.getBundle(
-            RIConstants.TLV_RESOURCE_LOCATION);
-        return MessageFormat.format(rb.getString("TLV_ID_ERROR"), obj);
-    }
-
-
-    /**
-     * <p>Return false if validator conditions have not been met</p>
-     *
-     * @return boolean false if validation conditions have not been met
-     */
-    public boolean hasFailed() {
-        return failed;
-    }
-
-
-    /**
-     * <p>Parse the starting element. If it is a specific JSTL tag
-     * make sure that the nested JSF tags have IDs. </p>
-     */
-    public void parseStartElement() {
-        String ns = validatorInfo.getNameSpace();
-        String ln = validatorInfo.getLocalName();
-
-        String qn = validatorInfo.getQName();
-        Attributes a = validatorInfo.getAttributes();
-        FacesValidator validator = validatorInfo.getValidator();
-
-        if (isNamingContainerTag(validator, ns, ln)) {
-            nestedInNamingContainer = true;
-        } else if ((ns.equals(RIConstants.HTML_NAMESPACE)) &&
-            (requiresIdCount > 0)) {
-            //make sure that id is present in attributes
-            if ((!(nestedInNamingContainer)) && (!hasIdAttribute(a))) {
-                //add to list of jsf tags for error report
-                failed = true;
-                requiresIdList.append(qn).append(' ');
-            }
-        } else if ((requiresIdCount == 0) &&
-            (!siblingSatisfied)) {
-            //make sure jsf sibling has an id
-            if (((ns.equals(RIConstants.HTML_NAMESPACE)) ||
-                (ns.equals(RIConstants.CORE_NAMESPACE))) &&
-                (!hasIdAttribute(a)) && (!(nestedInNamingContainer))) {
-
-                //add to list of jsf tags for error report
-                failed = true;
-                requiresIdList.append(qn).append(' ');
-            }
-            siblingSatisfied = true;
-        } else if (requiresIdCount == 0) {
-            // sibling is a non-JSF tag
-            // JSF tags no longer need id's
-            siblingSatisfied = true;
-        }
-
-    }
-
-
-    /**
-     * <p>Parse the ending element. If it is a specific JSTL tag
-     * make sure that the appropriate flags are set.</p>
-     */
-    public void parseEndElement() {
-        String ns = validatorInfo.getNameSpace();
-        String ln = validatorInfo.getLocalName();
-        FacesValidator validator = validatorInfo.getValidator();
-        if (isNamingContainerTag(validator, ns, ln)) {
-            nestedInNamingContainer = false;
-        }
-    }
-
-    //*********************************************************************
-    // Private methods
-
-    /**
-     * <p>Check element to make sure that the id attribute is
-     * present.</p>
-     *
-     * @param a Attribute list
-     * @return boolean True if id attribute found."id"
-     */
-    private boolean hasIdAttribute(Attributes a) {
-        for (int i = 0; i < a.getLength(); i++) {
-            if (a.getQName(i).equals("id")) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Check to make sure that the element is either a
-     * form tag or a subview tag.
-     *
-     * @param validator Parent validator
-     * @param ns        The Namespace.
-     * @param ln        The Local Name.
-     * @return boolean True if JSF tag is form or subview
-     */
-    private boolean isNamingContainerTag(FacesValidator validator, String ns, String ln) {
-
-        // PENDING (visvan) Handle custom implementations of NamingContainer.
-        // This requires the compiler to look up a fake Faces environment
-        // so that we can look up the component class based on what 
-        // getComponentType() returns to detect customer NamingContainer
-        // components.
-        if (ns.equals(RIConstants.HTML_NAMESPACE)) {
-            if (ln.equals(validator.getJSF_FORM_LN())) {
-                return true; 
-            }
-        } 
-        if (ns.equals(RIConstants.CORE_NAMESPACE)) {
-            if (ln.equals(validator.getJSF_SUBVIEW_LN())) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/LoadBundleTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/LoadBundleTag.java
deleted file mode 100644
index 11479df..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/LoadBundleTag.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.ReflectionUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.webapp.UIComponentClassicTagBase;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.Tag;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.Stack;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>Tag action that loads the specified ResourceBundle as a Map into
- * the request scope of the current {@link
- * javax.faces.context.FacesContext}.</p>
- * <p/>
- * <p>The user is discouraged from using multiple dot syntax in their
- * resource bundle keys.  For example, for the bundle loaded under the
- * var <code>msgs</code>, this key: <code>index.page.title</code> is
- * discouraged.  If your application requires this syntax for resource
- * bundle keys, they may be referred to in the page with a syntax like
- * this: <code>#{msgs["index.page.title"]}.</code></p>
- */
-
-public class LoadBundleTag extends TagSupport {
-    
-    static final String 
-            PRE_VIEW_LOADBUNDLES_LIST_ATTR_NAME = 
-            "com.sun.faces.taglib.jsf_core.PRE_VIEW_LOADBUNDLES_LIST";
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-
-    // ------------------------------------------------------------- Attributes
-
-    private ValueExpression basenameExpression;
-
-
-    /**
-     * <p>Set the base name of the <code>ResourceBundle</code> to be
-     * loaded.</p>
-     * @param basename the ValueExpression which will resolve the basename
-     */
-    public void setBasename(ValueExpression basename) {
-        this.basenameExpression = basename;
-    }
-
-
-    private String var;
-
-
-    /**
-     * <p>Set the name of the attribute in the request scope under which
-     * to store the <code>ResourceBundle</code> <code>Map</code>.</p>
-     * @param var the variable name to export the loaded ResourceBundle to
-     */
-    public void setVar(String var) {
-        this.var = var;
-    }
-
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Load the <code>ResourceBundle</code> named by our
-     * <code>basename</code> property.</p>  Wrap it in an immutable
-     * <code>Map</code> implementation and store the <code>Map</code> in
-     * the request attr set of under the key given by our
-     * <code>var</code> property.
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-
-        // evaluate any VB expression that we were passed
-        String basename;
-
-        basename = (String)
-            ELUtils.evaluateValueExpression(basenameExpression,
-                                         context.getELContext());
-
-
-        if (null == basename) {
-        	String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "baseName");
-        	throw new NullPointerException(message);
-        }
-        if (null == var) {
-        	String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "baseName");
-        	throw new NullPointerException(message);
-        }
-
-        final ResourceBundle bundle =
-            ResourceBundle.getBundle(basename,
-                                     context.getViewRoot().getLocale(),
-                                     Util.getCurrentLoader(this));
-        if (null == bundle) {
-            throw new JspException("null ResourceBundle for " + basename);
-        }
-
-        Map toStore =
-            new Map() {
-                // this is an immutable Map
-            
-            public String toString() {
-                StringBuffer sb = new StringBuffer();
-                Iterator<Map.Entry<String,Object>> entries = 
-                        this.entrySet().iterator();
-                Map.Entry<String,Object> cur;
-                while (entries.hasNext()) {
-                    cur = entries.next();
-                    sb.append(cur.getKey()).append(": ").append(cur.getValue()).append('\n');
-                }
-
-                return sb.toString();
-            }
-
-                // Do not need to implement for immutable Map
-                public void clear() {
-                    throw new UnsupportedOperationException();
-                }
-
-
-                public boolean containsKey(Object key) {
-                    boolean result = false;
-                    if (null != key) {
-                        result = (null != bundle.getObject(key.toString()));
-                    }
-                    return result;
-                }
-
-
-                public boolean containsValue(Object value) {
-                    Enumeration<String> keys = bundle.getKeys();
-                    boolean result = false;
-                    while (keys.hasMoreElements()) {
-                        Object curObj = bundle.getObject(keys.nextElement());
-                        if ((curObj == value) ||
-                            ((null != curObj) && curObj.equals(value))) {
-                            result = true;
-                            break;
-                        }
-                    }
-                    return result;
-                }
-
-
-                public Set<Map.Entry<String,Object>> entrySet() {
-                    HashMap<String,Object> mappings = new HashMap<String, Object>();
-                    Enumeration<String> keys = bundle.getKeys();
-                    while (keys.hasMoreElements()) {
-                        String key = keys.nextElement();
-                        Object value = bundle.getObject(key);
-                        mappings.put(key, value);
-                    }
-                    return mappings.entrySet();
-                }
-
-
-                public boolean equals(Object obj) {
-                    return !((obj == null) || !(obj instanceof Map))
-                           && entrySet().equals(((Map) obj).entrySet());
-
-                }
-
-
-                public Object get(Object key) {
-                    if (null == key) {
-                        return null;
-                    }
-                    try {
-                        return bundle.getObject(key.toString());
-                    } catch (MissingResourceException e) {
-                        return "???" + key + "???";
-                    }
-                }
-
-
-                public int hashCode() {
-                    return bundle.hashCode();
-                }
-
-
-                public boolean isEmpty() {
-                    Enumeration<String> keys = bundle.getKeys();
-                    return !keys.hasMoreElements();
-                }
-
-
-                public Set keySet() {
-                    Set<String> keySet = new HashSet<String>();
-                    Enumeration<String> keys = bundle.getKeys();
-                    while (keys.hasMoreElements()) {
-                        keySet.add(keys.nextElement());
-                    }
-                    return keySet;
-                }
-
-
-                // Do not need to implement for immutable Map
-                public Object put(Object k, Object v) {
-                    throw new UnsupportedOperationException();
-                }
-
-
-                // Do not need to implement for immutable Map
-                public void putAll(Map t) {
-                    throw new UnsupportedOperationException();
-                }
-
-
-                // Do not need to implement for immutable Map
-                public Object remove(Object k) {
-                    throw new UnsupportedOperationException();
-                }
-
-
-                public int size() {
-                    int result = 0;
-                    Enumeration<String> keys = bundle.getKeys();
-                    while (keys.hasMoreElements()) {
-                        keys.nextElement();
-                        result++;
-                    }
-                    return result;
-                }
-
-
-                public java.util.Collection values() {
-                    ArrayList<Object> result = new ArrayList<Object>();
-                    Enumeration<String> keys = bundle.getKeys();
-                    while (keys.hasMoreElements()) {
-                        result.add(
-                            bundle.getObject(keys.nextElement()));
-                    }
-                    return result;
-                }
-            };
-
-        ExternalContext extContext = context.getExternalContext();
-        extContext.getRequestMap().put(var, toStore);
-
-        if (WebConfiguration.getInstance(extContext)
-              .isOptionEnabled
-                    (BooleanWebContextInitParameter.EnableLoadBundle11Compatibility)) {
-            // the UIComponent that wraps the Map
-            UIComponent bundleComponent =
-                  createNewLoadBundleComponent(var, toStore);
-            UIComponentClassicTagBase parentTag = getParentUIComponentTag();
-
-            // Is this loadBundle tag instance outside of <f:view>?
-            if (null == parentTag) {
-                // Yes.  Store the bundleComponent in a list so the <f:view> tag
-                // can add the list contents as the first children.
-                List<UIComponent> preViewBundleComponents =
-                      getPreViewLoadBundleComponentList();
-                preViewBundleComponents.add(bundleComponent);
-            } else {
-                // No.  Use addChild to add the bundeComponent to the tree.
-                addChildToParentTagAndParentComponent(bundleComponent, parentTag);
-            }
-        }
-
-        return (EVAL_BODY_INCLUDE);
-
-    }
-    
-    static void addChildToParentTagAndParentComponent(UIComponent child,
-            UIComponentClassicTagBase parentTag) {
-        
-        Method addChildToComponentAndTag;
-        
-        if (null != (addChildToComponentAndTag = 
-                ReflectionUtils.lookupMethod(UIComponentClassicTagBase.class,
-                "addChildToComponentAndTag",
-                UIComponent.class))) {
-            try {
-                addChildToComponentAndTag.setAccessible(true);
-                addChildToComponentAndTag.invoke(parentTag,
-                        child);
-            }
-            catch (IllegalAccessException accessException) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING, 
-                            "Unable to add " + child + " to tree:", accessException);
-                }
-                
-            }
-            catch (IllegalArgumentException argumentException) {
-                if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING, 
-                            "Unable to add " + child + " to tree:", argumentException);
-                }
-                
-            }
-            catch (InvocationTargetException targetException) {
-                Throwable cause = targetException.getCause();
-                if (cause instanceof RuntimeException) {
-                    throw ((RuntimeException) cause);
-                }
-            }
-        }
-    }
-    
-    static List<UIComponent> getPreViewLoadBundleComponentList() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        //noinspection unchecked
-        List<UIComponent> result = (List<UIComponent>)
-              RequestStateManager.get(ctx, PRE_VIEW_LOADBUNDLES_LIST_ATTR_NAME);
-        if (result == null) {
-            result = new ArrayList<UIComponent>();
-            RequestStateManager.set(ctx,
-                                    PRE_VIEW_LOADBUNDLES_LIST_ATTR_NAME,
-                                    result);
-        }
-        
-        return result;
-    }
-    
-    private UIComponent createNewLoadBundleComponent(String var, 
-            Map toStore) {
-        UIComponent result = new LoadBundleComponent(var, toStore);
-        result.setTransient(true);
-        return result;
-    }
-
-    /**
-     * @return the <code>UIComponentClassicTagBase</code> instance
-     *  that represents the tag in the page to which the special
-     *  component should be added as a child
-     */
-    private UIComponentClassicTagBase getParentUIComponentTag() {
-        Tag parent = this.getParent();
-        while (null != parent && 
-                (!(parent instanceof UIComponentClassicTagBase))) {
-            parent = this.getParent();
-        }
-        UIComponentClassicTagBase result = (UIComponentClassicTagBase) parent;
-        
-        // Check for case where the <f:loadBundle> is inside of an included page,
-        // but outside of the <f:subview> for that page.  This can happen
-        // either when the <f:subview> is in the includING page *OR* when
-        // the <f:subview> is in the includED page, yet the <f:loadBundle> is
-        // outside of the <f:subview> in the includED page.
-        Stack<UIComponentClassicTagBase> viewTagStack = SubviewTag.getViewTagStack();
-        if (!viewTagStack.empty()) {
-            result = viewTagStack.peek();
-        }
-        
-        return result;
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.basenameExpression = null;
-        this.var = null;
-
-    }
-    
-    private static class LoadBundleComponent extends UIComponentBase {
-            private String var;
-            private Map toStore;
-            
-            public LoadBundleComponent(String var, Map toStore) {
-                this.var = var;
-                this.toStore = toStore;
-            }
-        
-            public String getFamily() {
-                return null;
-            }
-            
-            public void encodeBegin(FacesContext context) throws IOException {
-                Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
-                
-                requestMap.put(var, toStore);
-            }
-            
-            public void encodeEnd(FacesContext context) throws IOException {
-            }
-
-            public void encodeChildren(FacesContext context) throws IOException {
-            }
-            
-            public String toString() {
-
-                return "LoadBundleComponent: var: " + var + " keys: " +
-                        toStore.toString();
-            }
-        
-    }
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/MaxMinValidatorTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/MaxMinValidatorTag.java
deleted file mode 100644
index 262118d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/MaxMinValidatorTag.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// MaxMinValidatorTag.java
-
-package com.sun.faces.taglib.jsf_core;
-
-/**
- * <B>MaxMinValidatorTag</B> contains ivars for maximumSet and minimumSet.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public abstract class MaxMinValidatorTag extends AbstractValidatorTag {
-
-
-    /**
-     * <p>Flag indicating whether a maximum limit has been set.</p>
-     */
-    protected boolean maximumSet = false;
-
-    /**
-     * <p>Flag indicating whether a minimum limit has been set.</p>
-     */
-    protected boolean minimumSet = false;
-
-
-} // end of class MaxMinValidatorTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ParameterTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ParameterTag.java
deleted file mode 100644
index aec0ccb..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ParameterTag.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ParameterTag.java
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIParameter;
-import javax.faces.webapp.UIComponentELTag;
-
-public class ParameterTag extends UIComponentELTag {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private ValueExpression name;
-    private ValueExpression value;
-
-// Attribute Instance Variables
-
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers
-//
-
-    public ParameterTag() {
-        super();
-    }
-
-//
-// Class methods
-//
-
-//
-// Accessors
-//
-    public void setName(ValueExpression name) {
-        this.name = name;
-    }
-
-
-    public void setValue(ValueExpression value) {
-        this.value = value;
-    }
-
-//
-// General Methods
-//
-
-    public String getRendererType() {
-        return null;
-    }
-
-
-    public String getComponentType() {
-        return "javax.faces.Parameter";
-    }
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        UIParameter parameter = (UIParameter) component;
-
-        if (name != null) {
-            if (!name.isLiteralText()) {
-                parameter.setValueExpression("name", name);
-            } else {
-                parameter.setName(name.getExpressionString());
-            }
-        }
-        // if component has non null value, do not call setValue().
-        if (value != null) {
-            if (!value.isLiteralText()) {
-                component.setValueExpression("value", value);
-            } else {
-                parameter.setValue(value.getExpressionString());
-            }
-        }
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/PhaseListenerTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/PhaseListenerTag.java
deleted file mode 100644
index 424bfc0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/PhaseListenerTag.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.webapp.UIComponentELTag;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.Tag;
-import javax.servlet.jsp.tagext.TagSupport;
-import java.io.Serializable;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>Tag implementation that creates a {@link PhaseListener} instance
- * and registers it on the {@link UIViewRoot} associated with our most
- * immediate surrounding instance of a tag whose component
- * is an instance of {@link UIViewRoot}.  This tag creates no output to the
- * page currently being created.</p>
- * <p/>
- */
-
-public class PhaseListenerTag extends TagSupport {
-
-
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-
-    // ------------------------------------------------------------- Attributes
-
-
-    /**
-     * <p>The fully qualified class name of the {@link PhaseListener}
-     * instance to be created.</p>
-     */
-    private ValueExpression type = null;
-
-    /**
-     * <p>The value binding expression used to create a listener
-     * instance and it is also used to wire up this listener to an
-     * {@link PhaseListener} property of a JavaBean class.</p>
-     */
-    private ValueExpression binding = null;
-
-    /**
-     * <p>Set the fully qualified class name of the
-     * {@link PhaseListener} instance to be created.
-     *
-     * @param type The new class name
-     */
-    public void setType(ValueExpression type) {
-
-        this.type = type;
-
-    }
-
-    /*
-     * <p>Set the value binding expression  for this listener.</p>
-     *
-     * @param binding The new value binding expression
-     */
-    public void setBinding(ValueExpression binding) {
-        this.binding = binding;
-    }
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the specified {@link PhaseListener}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentELTag} instance, if
-     * the {@link UIComponent} instance was created by this execution of the
-     * containing JSP page.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // find the viewTag
-        Tag parent = this;
-        UIComponentELTag tag = null;
-        while (null != (parent = parent.getParent())) {
-            if (parent instanceof UIComponentELTag) {
-                tag = (UIComponentELTag) parent;
-            }
-        }
-
-        if (tag == null) {
-            Object params[] = {this.getClass().getName()};
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(
-                      MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID, params));
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }
-
-        UIViewRoot viewRoot = (UIViewRoot) tag.getComponentInstance();
-        if (viewRoot == null) {
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
-        }
-
-        // If binding is null, type is set and is a literal value,
-        // then don't bother wrapping.  Just instantiate and
-        // set.
-        PhaseListener listener;
-        if (binding == null && type != null && type.isLiteralText()) {
-            try {
-                listener = (PhaseListener)
-                    Util.getListenerInstance(type, null);
-            } catch (Exception e) {
-                throw new JspException(e.getMessage(), e.getCause());
-            }
-        } else {
-            listener = new BindingPhaseListener(type, binding);            
-        }
-        viewRoot.addPhaseListener(listener);
-
-        return (SKIP_BODY);
-
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.type = null;
-
-    }
-
-
-// ----------------------------------------------------------- Inner Classes
-
-
-    private static class BindingPhaseListener
-         implements PhaseListener, Serializable {
-
-        private ValueExpression type;
-        private ValueExpression binding;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public BindingPhaseListener(ValueExpression type,
-                                    ValueExpression binding) {
-
-            this.type = type;
-            this.binding = binding;
-
-        }
-
-        // ------------------------------------------ Methods from PhaseListener
-
-
-        /**
-         * <p>Handle a notification that the processing for a particular
-         * phase has just been completed.</p>
-         */
-        public void afterPhase(PhaseEvent event) {
-
-            PhaseListener listener = getPhaseListener();
-            if (listener != null) {
-                listener.afterPhase(event);
-            }
-
-        }
-
-        /**
-         * <p>Handle a notification that the processing for a particular
-         * phase of the request processing lifecycle is about to begin.</p>
-         */
-        public void beforePhase(PhaseEvent event) {
-
-            PhaseListener listener = getPhaseListener();
-            if (listener != null) {
-                listener.beforePhase(event);
-            }
-
-        }
-
-        /**
-         * <p>Return the identifier of the request processing phase during
-         * which this listener is interested in processing {@link javax.faces.event.PhaseEvent}
-         * events.  Legal values are the singleton instances defined by the
-         * {@link javax.faces.event.PhaseId} class, including <code>PhaseId.ANY_PHASE</code>
-         * to indicate an interest in being notified for all standard phases.</p>
-         */
-        public PhaseId getPhaseId() {
-
-            PhaseListener listener = getPhaseListener();
-            if (listener != null) {
-                return listener.getPhaseId();
-            }
-
-            return null;
-
-        }
-
-        /**
-         * <p>Invoked when the value change described by the specified
-         * {@link javax.faces.event.ValueChangeEvent} occurs.</p>
-         *
-         * @return a <code>PhaseListener</code> instance
-         * @throws javax.faces.event.AbortProcessingException
-         *          Signal the JavaServer Faces
-         *          implementation that no further processing on the current event
-         *          should be performed
-         */
-        public PhaseListener getPhaseListener() throws AbortProcessingException {
-            PhaseListener instance = (PhaseListener)
-                     Util.getListenerInstance(type, binding);
-            if (instance != null) {
-                return instance;
-            } else {
-                 if (LOGGER.isLoggable(Level.WARNING)) {
-                    // PENDING i18n
-                    LOGGER.warning("PhaseListener will not be processed - " +
-                         "both 'binding' and 'type' are null");
-                }
-                return null;
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/RegexValidatorTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/RegexValidatorTag.java
deleted file mode 100644
index 7c47178..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/RegexValidatorTag.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.faces.validator.RegexValidator;
-import javax.faces.application.Application;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-import javax.faces.webapp.ValidatorELTag;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-import javax.servlet.jsp.JspException;
-
-
-/**
- * Tag for the Regular Expression Validator.  Can accept a regex pattern as a
- * property - this will be used to validate against.
- * @author driscoll
- */
-public class RegexValidatorTag extends AbstractValidatorTag {
-
-    private ValueExpression regex;
-    private ValueExpression VALIDATOR_ID_EXPR;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RegexValidatorTag() {
-        if (VALIDATOR_ID_EXPR == null) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ExpressionFactory factory =
-                context.getApplication().getExpressionFactory();
-            VALIDATOR_ID_EXPR =
-                factory.createValueExpression(context.getELContext(),
-                    "javax.faces.RegularExpression",String.class);
-        }
-    }
-
-    /**
-     * Set the Regular Expression to use for validation.
-     * @param pattern A regular expression - needs to be escaped, @see java.util.regex .
-     */
-    public void setPattern(ValueExpression pattern) {
-        this.regex = pattern;
-    }
-
-    @Override
-    protected Validator createValidator() throws JspException {
-        super.setValidatorId(VALIDATOR_ID_EXPR);
-        RegexValidator validator = (RegexValidator) super.createValidator();
-        assert (validator != null);
-        if (regex != null) {
-            FacesContext ctx = FacesContext.getCurrentInstance();
-            validator.setPattern((String) regex.getValue(ctx.getELContext()));
-        }
-        return validator;
-        
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SelectItemTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SelectItemTag.java
deleted file mode 100644
index 26d4c72..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SelectItemTag.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectItem;
-import javax.faces.webapp.UIComponentELTag;
-
-
-/**
- * This class is the tag handler that evaluates the
- * <code>selectitem</code> custom tag.
- */
-
-public class SelectItemTag extends UIComponentELTag {
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-    protected ValueExpression itemValue;
-    protected ValueExpression itemLabel;
-    protected ValueExpression itemDescription;
-    protected ValueExpression itemDisabled;
-    protected ValueExpression noSelectionOption = null;
-
-    protected ValueExpression value;
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-
-    public SelectItemTag() {
-        super();
-    }
-
-    //
-    // Class methods
-    //
-
-    // 
-    // Accessors
-    //
-
-    public void setItemValue(ValueExpression value) {
-        this.itemValue = value;
-    }
-
-
-    public void setItemLabel(ValueExpression label) {
-        this.itemLabel = label;
-    }
-
-
-    public void setItemDescription(ValueExpression itemDescription) {
-        this.itemDescription = itemDescription;
-    }
-
-    public void setItemDisabled(ValueExpression itemDisabled) {
-        this.itemDisabled = itemDisabled;
-    }
-
-
-    public void setValue(ValueExpression value) {
-        this.value = value;
-    }
-
-    public void setNoSelectionOption(ValueExpression noSelectionOption) {
-        this.noSelectionOption = noSelectionOption;
-    }
-
-
-    //
-    // General Methods
-    //
-    public String getRendererType() {
-        return null;
-    }
-
-
-    public String getComponentType() {
-        return "javax.faces.SelectItem";
-    }
-    
-    //
-    // Methods from BaseComponentTag
-    //
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        UISelectItem selectItem = (UISelectItem) component;
-
-        if (null != value) {
-            if (!value.isLiteralText()) {
-                selectItem.setValueExpression("value", value);
-            } else {
-                selectItem.setValue(value.getExpressionString());
-            }
-        }
-
-        if (null != itemValue) {
-            if (!itemValue.isLiteralText()) {
-                selectItem.setValueExpression("itemValue", itemValue);
-            } else {
-                selectItem.setItemValue(itemValue.getExpressionString());
-            }
-        }
-        if (null != itemLabel) {
-            if (!itemLabel.isLiteralText()) {
-                selectItem.setValueExpression("itemLabel", itemLabel);
-            } else {
-                selectItem.setItemLabel(itemLabel.getExpressionString());
-            }
-        }
-        if (null != itemDescription) {
-            if (!itemDescription.isLiteralText()) {
-                selectItem.setValueExpression("itemDescription",
-                                              itemDescription);
-            } else {
-                selectItem.setItemDescription(
-                    itemDescription.getExpressionString());
-            }
-        }
-        if (null != itemDisabled) {
-            if (!itemDisabled.isLiteralText()) {
-                selectItem.setValueExpression("itemDisabled", itemDisabled);
-            } else {
-                selectItem.setItemDisabled(
-                    Boolean.valueOf(itemDisabled.getExpressionString()).
-                        booleanValue());
-            }
-        }
-        if (null != noSelectionOption) {
-            if (!noSelectionOption.isLiteralText()) {
-                selectItem.setValueExpression("noSelectionOption", noSelectionOption);
-            } else {
-                selectItem.setNoSelectionOption(
-                    Boolean.valueOf(noSelectionOption.getExpressionString()).
-                        booleanValue());
-            }
-        }
-        if (null != escape) {
-            if (!escape.isLiteralText()) {
-                selectItem.setValueExpression("escape", escape);
-            } else {
-                selectItem.setItemEscaped(
-                    Boolean.valueOf(escape.getExpressionString()).
-                        booleanValue());            }
-        }
-
-    }
-
-    /**
-     * Holds value of property escape.
-     */
-    private ValueExpression escape;
-
-    /**
-     * Getter for property escape.
-     * @return Value of property escape.
-     */
-    public ValueExpression getEscape() {
-        return this.escape;
-    }
-
-    /**
-     * Setter for property escape.
-     * @param escape New value of property escape.
-     */
-    public void setEscape(ValueExpression escape) {
-        this.escape = escape;
-    }
-
-} // end of class SelectItemTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SelectItemsTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SelectItemsTag.java
deleted file mode 100644
index ed4dbc4..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SelectItemsTag.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectItems;
-import javax.faces.webapp.UIComponentELTag;
-
-/**
- * This class is the tag handler that evaluates the
- * <code>selectitems</code> custom tag.
- */
-
-public class SelectItemsTag extends UIComponentELTag {
-
-    private ValueExpression value;
-    private String var;
-    private ValueExpression itemValue;
-    private ValueExpression itemLabel;
-    private ValueExpression itemDescription;
-    private ValueExpression itemDisabled;
-    private ValueExpression itemLabelEscaped;
-    private ValueExpression noSelectionOption;
-    
-
-    // ---------------------------------------------------------- Tag Attributes
-
-
-    public void setValue(ValueExpression value) {
-        this.value = value;
-    }
-
-    public void setVar(String var) {
-        this.var = var;
-    }
-
-    public void setItemValue(ValueExpression itemValue) {
-        this.itemValue = itemValue;
-    }
-
-    public void setItemLabel(ValueExpression itemLabel) {
-        this.itemLabel = itemLabel;
-    }
-
-    public void setItemDescription(ValueExpression itemDescription) {
-        this.itemDescription = itemDescription;
-    }
-
-    public void setItemDisabled(ValueExpression itemDisabled) {
-        this.itemDisabled = itemDisabled;
-    }
-
-    public void setItemLabelEscaped(ValueExpression itemLabelEscaped) {
-        this.itemLabelEscaped = itemLabelEscaped;
-    }
-
-    public void setNoSelectionOption(ValueExpression noSelectionOption) {
-        this.noSelectionOption = noSelectionOption;
-    }
-    
-    // ----------------------------------------- Methods from UIComponentTagBase
-
-
-    /**
-     * @see javax.faces.webapp.UIComponentELTag#getRendererType()
-     */
-    public String getRendererType() {
-        return null;
-    }
-
-
-    /**
-     * @see javax.faces.webapp.UIComponentELTag#getComponentType()
-     * @see javax.faces.component.UISelectItems#COMPONENT_TYPE
-     */
-    public String getComponentType() {
-        return UISelectItems.COMPONENT_TYPE;
-    }
-
-
-    // ------------------------------------------- Methods from UIComponentELTag
-
-
-    /**
-     * @see javax.faces.webapp.UIComponentELTag#setProperties(javax.faces.component.UIComponent)
-     * @param component
-     */
-    @Override
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-
-        if (value != null) {
-            component.setValueExpression("value", value);
-        }
-        if (var != null) {
-            component.getAttributes().put("var", var);
-        }
-        if (itemValue != null) {
-            component.setValueExpression("itemValue", value);
-        }
-        if (itemLabel != null) {
-            component.setValueExpression("itemLabel", itemLabel);
-        }
-        if (itemDescription != null) {
-            component.setValueExpression("itemDescription", itemDescription);
-        }
-        if (itemDisabled != null) {
-            component.setValueExpression("itemDisabled", itemDisabled);
-        }
-        if (itemLabelEscaped != null) {
-            component.setValueExpression("itemLabelEscaped", itemLabelEscaped);
-        }
-        if (noSelectionOption != null) {
-            component.setValueExpression("noSelectionOption", noSelectionOption);
-        }
-
-    }
-
-} // end of class SelectItemsTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerImpl.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerImpl.java
deleted file mode 100644
index 218627d..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-import javax.faces.component.StateHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-
-public class SetPropertyActionListenerImpl implements ActionListener, StateHolder {
-    
-    private ValueExpression target;
-    private ValueExpression source;
-
-
-    // ------------------------------------------------------------ Constructors
-    
-    public SetPropertyActionListenerImpl() {}
-
-
-    public SetPropertyActionListenerImpl(ValueExpression target, ValueExpression value) {
-
-        this.target = target;
-        this.source = value;
-
-    }
-
-
-    // --------------------------------------------- Methods from ActionListener
-
-
-    public void processAction(ActionEvent e) throws AbortProcessingException {
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        ELContext elContext = facesContext.getELContext();
-
-        try {
-            Object value = source.getValue(elContext);
-            if (value != null) {
-                ExpressionFactory factory =
-                      facesContext.getApplication().getExpressionFactory();
-                value = factory.coerceToType(value, target.getType(elContext));
-            }
-            target.setValue(elContext, value);
-        } catch (ELException ele) {
-            throw new AbortProcessingException(ele);
-        }
-
-
-    }
-
-
-    // ------------------------------------------------ Methods from StateHolder
-
-    
-    public void setTransient(boolean trans) {
-    }
-
-    
-    public boolean isTransient() {
-
-        return false;
-
-    }
-
-    
-    public Object saveState(FacesContext context) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        Object [] state = new Object[2];
-        state[0] = target;
-        state[1] = source;
-        return state;
-
-    }
-    
-    public void restoreState(FacesContext context, Object state) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-        Object [] stateArray = (Object []) state;
-        target = (ValueExpression) stateArray[0];
-        source = (ValueExpression) stateArray[1];
-
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerTag.java
deleted file mode 100644
index a91fa7c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SetPropertyActionListenerTag.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ValueExpression;
-import javax.faces.component.ActionSource;
-import javax.faces.component.UIComponent;
-import javax.faces.event.ActionListener;
-import javax.faces.webapp.UIComponentClassicTagBase;
-import javax.faces.webapp.UIComponentELTag;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-
-import com.sun.faces.util.MessageUtils;
-
-
-/**
- * <p>Tag implementation that creates a special {@link ActionListener} instance
- * and registers it on the {@link ActionSource} associated with our most
- * immediate surrounding instance of a tag whose implementation class
- * is a subclass of {@link UIComponentClassicTagBase}.  This tag creates no output to
- * the page currently being created.</p>
- * <p/>
- * <p>The ActionListener instance created and installed by this tag has the 
- * following behavior and contract.</p>
- *
- * <ul>
- *
- * <li>Only create and register the <code>ActionListener</code> instance
- * the first time the component for this tag is created</li>
- *
- * <li>The "target" and "value" tag attributes are ValueExpression
- * instances and are stored unevaluated as instance variables of the
- * listener.</li>
- *
- * <li>When the listener executes, call getValue() on the "value"
- * ValueExpression.  Pass the result to a call to setValue() on the
- * "target" ValueExpression</li>
- *
- * </ul>
- *
- * <p>This tag creates no output to the page currently being created.  It
- * is used solely for the side effect of {@link ActionListener}
- * creation.</p>
- */
-
-public class SetPropertyActionListenerTag extends TagSupport {
-
-
-    // ------------------------------------------------------------- Attributes
-
-    static final long serialVersionUID = 7966883942522780374L;
-
-    /**
-     * <p>The target of the value attribute.</p>
-     */
-    private ValueExpression target = null;
-
-    /**
-     * <p>The value that is set into the target attribute.</p>
-     */
-    private ValueExpression value = null;
-
-    /**
-     * <p>Setter for the target attribute</p>
-     *
-     * @param target The new class name
-     */
-    public void setTarget(ValueExpression target) {
-
-        this.target = target;
-
-    }
-
-    /*
-     * <p>Setter for the value attribute</p>
-     *
-     * @param value The new value value expression
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public void setValue(ValueExpression value) {
-    this.value = value;
-    }
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the {@link ActionListener}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentClassicTagBase}
-     * instance.  The behavior of the {@link ActionListener} must conform 
-     * to the class description.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-            UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) {
-            Object params [] = {this.getClass().getName()};
-            throw new JspException(
-                MessageUtils.getExceptionMessageString(
-                    MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID, params));
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }    
-
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {
-            throw new JspException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
-        }
-        if (!(component instanceof ActionSource)) {
-            Object params [] = {"setPropertyActionListener", "javax.faces.component.ActionSource"};
-            throw new JspException(
-                MessageUtils.getExceptionMessageString(
-                    MessageUtils.NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID, params));
-        }
-
-        ActionListener handler = new SetPropertyActionListenerImpl(target, value);
-        ((ActionSource) component).addActionListener(handler);
-
-        return (SKIP_BODY);
-
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.value = null;
-        this.target = null;
-
-    }
-
-
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SubviewTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SubviewTag.java
deleted file mode 100644
index 23229b5..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/SubviewTag.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import java.util.Stack;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.webapp.UIComponentClassicTagBase;
-import javax.faces.webapp.UIComponentELTag;
-import javax.servlet.jsp.JspException;
-
-import java.lang.reflect.Method;
-
-import com.sun.faces.util.RequestStateManager;
-import com.sun.faces.util.ReflectionUtils;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.RIConstants;
-
-public class SubviewTag extends UIComponentELTag {
-
-
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public SubviewTag() {
-
-        super();
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getComponentType() {
-
-        return "javax.faces.NamingContainer";
-
-    }
-
-   
-    public String getRendererType() {
-
-        return null;
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected UIComponent createVerbatimComponentFromBodyContent() {
-
-        UIOutput verbatim = (UIOutput)
-              super.createVerbatimComponentFromBodyContent();
-        String value = null;
-
-        FacesContext ctx = getFacesContext();
-        Object response = ctx.getExternalContext().getResponse();
-        // flush out any content above the view tag
-        Method customFlush = ReflectionUtils.lookupMethod(response.getClass(),
-                                                          "flushContentToWrappedResponse",
-                                                          RIConstants.EMPTY_CLASS_ARGS);
-        Method isBytes = ReflectionUtils.lookupMethod(response.getClass(),
-                                                      "isBytes",
-                                                      RIConstants.EMPTY_CLASS_ARGS);
-        Method isChars = ReflectionUtils.lookupMethod(response.getClass(),
-                                                      "isChars",
-                                                      RIConstants.EMPTY_CLASS_ARGS);
-        Method resetBuffers = ReflectionUtils.lookupMethod(response.getClass(),
-                                                           "resetBuffers",
-                                                           RIConstants.EMPTY_CLASS_ARGS);
-        Method getChars = ReflectionUtils.lookupMethod(response.getClass(),
-                                                       "getChars",
-                                                       RIConstants.EMPTY_CLASS_ARGS);
-        boolean cont = true;
-        if (isBytes == null) {
-            cont = false;
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.core.taglib.subviewtag.interweaving_failed_isbytes");
-            }
-        }
-        if (isChars == null) {
-            cont = false;
-             if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.core.taglib.subviewtag.interweaving_failed_ischars");
-            }
-        }
-        if (resetBuffers == null) {
-            cont = false;
-             if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers");
-            }
-        }
-        if (getChars == null) {
-            cont = false;
-             if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.core.taglib.subviewtag.interweaving_failed_getchars");
-            }
-        }
-        if (customFlush == null) {
-            cont = false;
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.core.taglib.viewtag.interweaving_failed");
-            }
-        }
-
-        if (cont) {
-            try {
-                if ((Boolean) isBytes.invoke(response)) {
-                    customFlush.invoke(response);
-                } else if ((Boolean) isChars.invoke(response)) {
-                    char[] chars = (char[]) getChars.invoke(response);
-                    if (null != chars && 0 < chars.length) {
-                        if (null != verbatim) {
-                            value = (String) verbatim.getValue();
-                        }
-                        verbatim = super.createVerbatimComponent();
-                        if (null != value) {
-                            verbatim.setValue(value + new String(chars));
-                        } else {
-                            verbatim.setValue(new String(chars));
-                        }
-                    }
-                }
-                resetBuffers.invoke(response);
-
-            } catch (Exception e) {
-                throw new FacesException("Response interweaving failed!", e);
-            }
-        }
-
-        return verbatim;
-
-    }
-
-    public int doEndTag() throws JspException {
-        int retValue;
-
-        getViewTagStack().pop();
-        retValue = super.doEndTag();
-        return retValue;
-    }
-
-    public int doStartTag() throws JspException {
-        int retValue;
-        
-        retValue = super.doStartTag();
-        getViewTagStack().push(this);
-        
-        return retValue;
-    }
-
-    /** 
-     *  @return Stack of UIComponentClassicTagBase instances, each of
-     *  which is a "view" tag.  The bottom most element on the stack is
-     *  the ViewTag itself.  Subsequent instances are SubviewTag
-     *  instances.
-     */
-    static Stack<UIComponentClassicTagBase> getViewTagStack() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        //noinspection unchecked
-        Stack<UIComponentClassicTagBase> result = (Stack<UIComponentClassicTagBase>)
-              RequestStateManager.get(ctx, RequestStateManager.VIEWTAG_STACK_ATTR_NAME);
-        if (result == null) {
-            result = new Stack<UIComponentClassicTagBase>();
-            RequestStateManager.set(ctx, RequestStateManager.VIEWTAG_STACK_ATTR_NAME, result);
-        }
-        
-        return result;
-    }
-    
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateDoubleRangeTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateDoubleRangeTag.java
deleted file mode 100644
index ab3410b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateDoubleRangeTag.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ValidateDoubleRangeTag.java
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.DoubleRangeValidator;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-
-import com.sun.faces.el.ELUtils;
-
-/**
- * ValidateDoubleRangeTag is the tag handler class for
- * <code>validate_doublerange</code> tag.
- */
-
-public class ValidateDoubleRangeTag extends MaxMinValidatorTag {
-
-    private static final long serialVersionUID = 1677210040390032609L;
-    private static ValueExpression VALIDATOR_ID_EXPR = null;
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-    protected ValueExpression maximumExpression = null;
-    protected ValueExpression minimumExpression = null;
-
-    protected double maximum = 0;
-    protected double minimum = 0;
-
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public ValidateDoubleRangeTag() {
-        super();
-        if (VALIDATOR_ID_EXPR == null) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ExpressionFactory factory =
-                context.getApplication().getExpressionFactory();
-            VALIDATOR_ID_EXPR =
-                factory.createValueExpression(context.getELContext(), 
-                    "javax.faces.DoubleRange",String.class);
-        }
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void setMaximum(ValueExpression newMaximum) {
-        maximumSet = true;
-        maximumExpression = newMaximum;
-    }
-
-
-    public void setMinimum(ValueExpression newMinimum) {
-        minimumSet = true;
-        minimumExpression = newMinimum;
-    }
-
-    public int doStartTag() throws JspException {
-        super.setValidatorId(VALIDATOR_ID_EXPR);
-        return super.doStartTag();
-    }
-
-
-
-// 
-// Methods from ValidatorTag
-//
-
-    protected Validator createValidator() throws JspException {
-
-        DoubleRangeValidator result = (DoubleRangeValidator)
-            super.createValidator();
-
-        assert (null != result);
-
-        evaluateExpressions();
-        if (maximumSet) {
-            result.setMaximum(maximum);
-        }
-
-        if (minimumSet) {
-            result.setMinimum(minimum);
-        }
-
-        return result;
-    }
-
-/* Evaluates expressions as necessary */
-    private void evaluateExpressions() {
-
-        ELContext context = FacesContext.getCurrentInstance().getELContext();
-
-        if (minimumExpression != null) {
-            if (!minimumExpression.isLiteralText()) {
-                minimum = ((Number)
-                              ELUtils.evaluateValueExpression(minimumExpression,
-                                  context)).doubleValue();
-            } else {
-                minimum =
-                Double.valueOf(minimumExpression.getExpressionString()).
-                    doubleValue();
-            }
-        }
-        if (maximumExpression != null) {
-            if (!maximumExpression.isLiteralText()) {
-                maximum = ((Number)
-                              ELUtils.evaluateValueExpression(maximumExpression,
-                                  context)).doubleValue();
-            } else {
-                maximum =
-                Double.valueOf(maximumExpression.getExpressionString()).
-                    doubleValue();
-            }
-        }
-    }
-
-} // end of class ValidateDoubleRangeTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateLengthTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateLengthTag.java
deleted file mode 100644
index 867606c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateLengthTag.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ValidateLengthTag.java
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.LengthValidator;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-
-import com.sun.faces.el.ELUtils;
-
-/**
- * ValidateLengthTag is the tag handler class for
- * <code>validate_length</code> tag
- */
-
-public class ValidateLengthTag extends MaxMinValidatorTag {
-
-    private static final long serialVersionUID = -3594596279980791500L;
-    private static ValueExpression VALIDATOR_ID_EXPR = null;
-
-
-// Attribute Instance Variables
-    protected ValueExpression maximumExpression = null;
-    protected ValueExpression minimumExpression = null;
-
-    protected int maximum = 0;
-    protected int minimum = 0;
-
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers
-//
-
-    public ValidateLengthTag() {
-        super();
-        if (VALIDATOR_ID_EXPR == null) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ExpressionFactory factory = context.getApplication().
-                    getExpressionFactory();
-            VALIDATOR_ID_EXPR =
-                factory.createValueExpression(context.getELContext(), 
-                    "javax.faces.Length", String.class);
-        }
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void setMaximum(ValueExpression newMaximum) {
-        maximumSet = true;
-        maximumExpression = newMaximum;
-    }
-
-
-    public void setMinimum(ValueExpression newMinimum) {
-        minimumSet = true;
-        minimumExpression = newMinimum;
-    }
-
-    public int doStartTag() throws JspException {
-        super.setValidatorId(VALIDATOR_ID_EXPR);
-        return super.doStartTag();
-    }
-
-
-//
-// Methods from ValidatorTag
-//
-
-    protected Validator createValidator() throws JspException {
-
-        LengthValidator result = (LengthValidator)
-            super.createValidator();
-        assert (null != result);
-
-        evaluateExpressions();
-        if (maximumSet) {
-            result.setMaximum(maximum);
-        }
-
-        if (minimumSet) {
-            result.setMinimum(minimum);
-        }
-
-        return result;
-    }
-
-/* Evaluates expressions as necessary */
-    private void evaluateExpressions() {
-
-        ELContext context = FacesContext.getCurrentInstance().getELContext();
-
-        if (minimumExpression != null) {
-            if (!minimumExpression.isLiteralText()) {
-                minimum = ((Number)
-                              ELUtils.evaluateValueExpression(minimumExpression,
-                                  context)).intValue();
-            } else {
-                minimum =
-                Integer.valueOf(minimumExpression.getExpressionString()).
-                    intValue();
-            }
-        }
-        if (maximumExpression != null) {
-            if (!maximumExpression.isLiteralText()) {
-                maximum = ((Number)
-                              ELUtils.evaluateValueExpression(maximumExpression,
-                                  context)).intValue();
-            } else {
-                maximum =
-                Integer.valueOf(maximumExpression.getExpressionString()).
-                    intValue();
-            }
-        }
-    }
-
-} // end of class ValidateLengthTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateLongRangeTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateLongRangeTag.java
deleted file mode 100644
index 59e5210..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidateLongRangeTag.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ValidateLongRangeTag.java
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ELContext;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.LongRangeValidator;
-import javax.faces.validator.Validator;
-import javax.servlet.jsp.JspException;
-
-import com.sun.faces.el.ELUtils;
-
-/**
- * ValidateLongRangeTag is the tag handler class for
- * <code>validate_longrange</code> tag.
- */
-
-public class ValidateLongRangeTag extends MaxMinValidatorTag {
-
-    private static final long serialVersionUID = 292617728229736800L;
-    private static ValueExpression VALIDATOR_ID_EXPR = null;
-
-// Attribute Instance Variables
-    protected ValueExpression maximumExpression = null;
-    protected ValueExpression minimumExpression = null;
-
-    protected long maximum = 0;
-    protected long minimum = 0;
-
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public ValidateLongRangeTag() {
-        super();
-        if (VALIDATOR_ID_EXPR == null) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            ExpressionFactory factory =
-                FacesContext.getCurrentInstance().getApplication().
-                    getExpressionFactory();
-            VALIDATOR_ID_EXPR =
-                factory.createValueExpression(context.getELContext(),  
-                                              "javax.faces.LongRange",
-                                              String.class);
-        }
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void setMaximum(ValueExpression newMaximum) {
-        maximumSet = true;
-        maximumExpression = newMaximum;
-    }
-
-
-    public void setMinimum(ValueExpression newMinimum) {
-        minimumSet = true;
-        minimumExpression = newMinimum;
-    }
-
-    public int doStartTag() throws JspException {
-        super.setValidatorId(VALIDATOR_ID_EXPR);
-        return super.doStartTag();
-    }
-
-
-// 
-// Methods from ValidatorTag
-//
-
-    protected Validator createValidator() throws JspException {
-
-        LongRangeValidator result = (LongRangeValidator)
-            super.createValidator();
-        assert (null != result);
-
-        evaluateExpressions();
-        if (maximumSet) {
-            result.setMaximum(maximum);
-        }
-
-        if (minimumSet) {
-            result.setMinimum(minimum);
-        }
-
-        return result;
-    }
-
-/* Evaluates expressions as necessary */
-    private void evaluateExpressions() {
-
-        ELContext context = FacesContext.getCurrentInstance().getELContext();
-
-        if (minimumExpression != null) {
-            if (!minimumExpression.isLiteralText()) {
-                minimum = ((Number)
-                              ELUtils.evaluateValueExpression(minimumExpression,
-                                  context)).longValue();
-            } else {
-                minimum =
-                Long.valueOf(minimumExpression.getExpressionString()).
-                    longValue();
-            }
-        }
-        if (maximumExpression != null) {
-            if (!maximumExpression.isLiteralText()) {
-                maximum = ((Number)
-                              ELUtils.evaluateValueExpression(maximumExpression,
-                                  context)).longValue();
-            } else {
-                maximum =
-                Long.valueOf(maximumExpression.getExpressionString()).
-                    longValue();
-            }
-        }
-    }
-
-} // end of class ValidateLongRangeTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidatorTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidatorTag.java
deleted file mode 100644
index 194d9c6..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValidatorTag.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.util.MessageUtils;
-
-import javax.el.ValueExpression;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.servlet.jsp.JspException;
-
-/**
- * Basic implementation of <code>ValidatorELTag</code>.
- */
-public class ValidatorTag extends AbstractValidatorTag {
-
-
-    // --------------------------------------------- Methods from ValidatorELTag
-
-
-    @Override
-    protected Validator createValidator() throws JspException {       
-
-        if (validatorId != null && validatorId.isLiteralText()) {
-            return createValidator(validatorId,
-                                   binding,
-                                   FacesContext.getCurrentInstance());
-        } else {
-            return new BindingValidator(validatorId, binding);
-        }
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    public static class BindingValidator implements Validator, StateHolder {
-
-        private ValueExpression binding;
-        private ValueExpression validatorId;
-
-        // -------------------------------------------------------- Constructors
-
-        /**
-         * <p>Only used during state restoration</p>
-         */
-        public BindingValidator() { }
-
-
-        public BindingValidator(ValueExpression validatorId,
-                                ValueExpression binding) {
-
-            this.validatorId = validatorId;
-            this.binding = binding;
-
-        }
-
-
-        // -------------------------------------------- Methods from StateHolder
-
-        private Object[] state;
-        public Object saveState(FacesContext context) {
-
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            if (state == null) {
-                state = new Object[2];
-            }
-            state[0] = validatorId;
-            state[1] = binding;
-
-            return state;
-            
-        }
-
-        public void restoreState(FacesContext context, Object state) {
-
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            this.state = (Object[]) state;
-            if (this.state != null) {
-                this.validatorId = (ValueExpression) this.state[0];
-                this.binding = (ValueExpression) this.state[1];
-            }
-
-        }
-
-        public boolean isTransient() {
-
-            return false;
-
-        }
-
-        public void setTransient(boolean newTransientValue) {
-            //no-op
-        }
-
-
-        // ---------------------------------------------- Methods from Validator
-
-
-        /**
-         * <p>Perform the correctness checks implemented by this
-         * {@link javax.faces.validator.Validator} against the specified {@link javax.faces.component.UIComponent}.
-         * If any violations are found, a {@link javax.faces.validator.ValidatorException}
-         * will be thrown containing the {@link javax.faces.application.FacesMessage} describing
-         * the failure.
-         *
-         * @param context   FacesContext for the request we are processing
-         * @param component UIComponent we are checking for correctness
-         * @param value     the value to validate
-         * @throws javax.faces.validator.ValidatorException
-         *                              if validation fails
-         * @throws NullPointerException if <code>context</code>
-         *                              or <code>component</code> is <code>null</code>
-         */
-        public void validate(FacesContext context,
-                             UIComponent component,
-                             Object value)
-        throws ValidatorException {
-
-
-           Validator instance = createValidator(validatorId, binding, context);
-
-
-            if (instance != null) {
-                instance.validate(context, component, value);
-            } else {
-                throw new ValidatorException(
-                     MessageUtils.getExceptionMessage(
-                          MessageUtils.CANNOT_VALIDATE_ID,
-                          validatorId != null ? validatorId.getExpressionString() : "",
-                          binding != null ? binding.getExpressionString() : ""));
-            }
-
-        }
-
-    }
-    
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValueChangeListenerTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValueChangeListenerTag.java
deleted file mode 100644
index 672ec09..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ValueChangeListenerTag.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-import javax.el.ValueExpression;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.webapp.UIComponentClassicTagBase;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-import java.io.Serializable;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>Tag implementation that creates a {@link ValueChangeListener} instance
- * and registers it on the {@link UIComponent} associated with our most
- * immediate surrounding instance of a tag whose implementation class
- * is a subclass of {@link UIComponentClassicTagBase}.  This tag creates no output to the
- * page currently being created.</p>
- * <p/>
- * <p>This class may be used directly to implement a generic event handler
- * registration tag (based on the fully qualified Java class name specified
- * by the <code>type</code> attribute), or as a base class for tag instances
- * that support specific {@link ValueChangeListener} subclasses.</p>
- * <p/>
- * <p>Subclasses of this class must implement the
- * <code>createValueChangeListener()</code> method, which creates and returns a
- * {@link ValueChangeListener} instance.  Any configuration properties that
- * are required by this {@link ValueChangeListener} instance must have been
- * set by the <code>createValueChangeListener()</code> method.  Generally,
- * this occurs by copying corresponding attribute values on the tag
- * instance.</p>
- * <p/>
- * <p>This tag creates no output to the page currently being created.  It
- * is used solely for the side effect of {@link ValueChangeListener}
- * creation.</p>
- */
-
-public class ValueChangeListenerTag extends TagSupport {
-
-    // ------------------------------------------------------------- Attributes
-
-    private static final long serialVersionUID = -212845116876281363L;
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-
-    /**
-     * <p>The fully qualified class name of the {@link ValueChangeListener}
-     * instance to be created.</p>
-     */
-    private ValueExpression type = null;
-
-    /**
-     * <p>The value expression used to create a listener instance and it
-     * is also used to wire up this listener to an {@link
-     * ValueChangeListener} property of a JavaBean class.</p>
-     */
-    private ValueExpression binding = null;
-
-    /**
-     * <p>Set the fully qualified class name of the
-     * {@link ValueChangeListener} instance to be created.
-     *
-     * @param type The new class name
-     */
-    public void setType(ValueExpression type) {
-
-        this.type = type;
-
-    }
-
-    /*
-     * <p>Set the value binding expression  for this listener.</p>
-     *
-     * @param binding The new value binding expression
-     */
-    public void setBinding(ValueExpression binding) {
-        this.binding = binding;
-    }
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Create a new instance of the specified {@link ValueChangeListener}
-     * class, and register it with the {@link UIComponent} instance associated
-     * with our most immediately surrounding {@link UIComponentClassicTagBase} instance, if
-     * the {@link UIComponent} instance was created by this execution of the
-     * containing JSP page.</p>
-     *
-     * @throws JspException if a JSP error occurs
-     */
-    public int doStartTag() throws JspException {
-
-        // Locate our parent UIComponentTag
-        UIComponentClassicTagBase tag =
-             UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
-        if (tag == null) {
-            //  Object[] params = {this.getClass().getName()};
-            // PENDING(rogerk): do something with params
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(
-                      MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID));
-        }
-
-        // Nothing to do unless this tag created a component
-        if (!tag.getCreated()) {
-            return (SKIP_BODY);
-        }
-
-        UIComponent component = tag.getComponentInstance();
-        if (component == null) {
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID));
-        }
-        if (!(component instanceof EditableValueHolder)) {
-            Object[] params = {"valueChangeListener", "javax.faces.component.EditableValueHolder"};
-            throw new JspException(
-                 MessageUtils.getExceptionMessageString(
-                      MessageUtils.NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID, params));
-        }
-
-        // If binding is null, type is set and is a literal value,
-        // then don't bother wrapping.  Just instantiate and
-        // set.
-        ValueChangeListener listener;
-        if (binding == null && type != null && type.isLiteralText()) {
-            try {
-                listener = (ValueChangeListener)
-                     Util.getListenerInstance(type, null);
-            } catch (Exception e) {
-                throw new JspException(e.getMessage(), e.getCause());
-            }
-        } else {
-            listener = new BindingValueChangeListener(type, binding);
-        }
-        
-        ((EditableValueHolder) component).addValueChangeListener(listener);
-
-        return (SKIP_BODY);
-
-    }
-
-
-    /**
-     * <p>Release references to any acquired resources.
-     */
-    public void release() {
-
-        this.type = null;
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class BindingValueChangeListener
-         implements ValueChangeListener, Serializable {
-
-        private ValueExpression type;
-        private ValueExpression binding;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public BindingValueChangeListener(ValueExpression type,
-                                          ValueExpression binding) {
-
-            this.type = type;
-            this.binding = binding;
-
-        }
-
-        // ------------------------------------ Methods from ValueChangeListener
-
-
-        /**
-         * <p>Invoked when the value change described by the specified
-         * {@link javax.faces.event.ValueChangeEvent} occurs.</p>
-         *
-         * @param event The {@link javax.faces.event.ValueChangeEvent} that has occurred
-         * @throws javax.faces.event.AbortProcessingException
-         *          Signal the JavaServer Faces
-         *          implementation that no further processing on the current event
-         *          should be performed
-         */
-        public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {
-
-            ValueChangeListener instance = (ValueChangeListener)
-                    Util.getListenerInstance(type, binding);
-            if (instance != null) {
-                instance.processValueChange(event);
-            } else {
-                 if (LOGGER.isLoggable(Level.WARNING)) {
-                    LOGGER.log(Level.WARNING,
-                               "jsf.core.taglib.action_or_valuechange_listener.null_type_binding",
-                               new Object[] {
-                                "ValueChangeListener", 
-                                event.getComponent().getClientId(FacesContext.getCurrentInstance())});
-                }
-            }
-        }
-        
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/VerbatimTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/VerbatimTag.java
deleted file mode 100644
index d42935f..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/VerbatimTag.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.webapp.UIComponentELTag;
-import javax.servlet.jsp.JspException;
-
-/**
- * <p>Tag implementation that creates a {@link UIOutput} instance
- * and allows the user to write raw markup.</p>
- */
-
-public class VerbatimTag extends UIComponentELTag {
-
-
-    // ------------------------------------------------------------- Attributes
-
-
-    private ValueExpression escape = null;
-
-
-    public void setEscape(ValueExpression escape) {
-        this.escape = escape;
-    }
-
-    
-    /**
-     * Holds value of property rendered.
-     */
-    private ValueExpression rendered;
-
-    /**
-     * Setter for property rendered.
-     * @param rendered New value of property rendered.
-     */
-    public void setRendered(ValueExpression rendered) {
-
-        this.rendered = rendered;
-    }
-    
-
-    // --------------------------------------------------------- Public Methods
-
-
-    public String getRendererType() {
-        return "javax.faces.Text";
-    }
-
-
-    public String getComponentType() {
-        return "javax.faces.Output";
-    }
-
-
-    protected void setProperties(UIComponent component) {
-
-        super.setProperties(component);
-        if (null != escape) {
-            component.setValueExpression("escape", escape);
-        } else {
-            component.getAttributes().put("escape", Boolean.FALSE);
-        }
-        if (null != rendered) {
-            component.setValueExpression("rendered", rendered);
-        }
-        component.setTransient(true);
-
-    }
-
-
-    /**
-     * <p>Set the local value of this component to reflect the nested
-     * body content of this JSP tag.</p>
-     */
-    public int doAfterBody() throws JspException {
-
-        if (getBodyContent() != null) {
-            String value = getBodyContent().getString();
-            if (value != null) {
-                UIOutput output = (UIOutput) getComponentInstance();
-                output.setValue(value);
-		getBodyContent().clearBody();
-            }
-        }
-        return (getDoAfterBodyValue());
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ViewTag.java b/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ViewTag.java
deleted file mode 100644
index f153980..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/taglib/jsf_core/ViewTag.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Stack;
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.webapp.UIComponentClassicTagBase;
-import javax.faces.webapp.UIComponentELTag;
-import javax.servlet.http.HttpSession;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.jstl.core.Config;
-import javax.servlet.jsp.tagext.BodyContent;
-import javax.servlet.jsp.tagext.BodyTag;
-
-import java.io.IOException;
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.ReflectionUtils;
-import com.sun.faces.RIConstants;
-
-/**
- * All JSF component tags must be nested within a f:view tag.  This tag
- * corresponds to the root of the UIComponent tree.  It does not have a
- * Renderer. It exists mainly to provide a guarantee that all faces
- * components reside inside of this tag.
- *
- */
-
-public class ViewTag extends UIComponentELTag {
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    private static final Logger LOGGER = FacesLogger.TAGLIB.getLogger();
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-    protected ValueExpression renderKitId = null;
-
-    public void setRenderKitId(ValueExpression renderKitId) {
-        this.renderKitId = renderKitId;
-    }
-
-    protected ValueExpression locale = null;
-
-    public void setLocale(ValueExpression newLocale) {
-        locale = newLocale;
-    }
-
-    protected MethodExpression beforePhase = null;
-
-    public void setBeforePhase(MethodExpression newBeforePhase) {
-    beforePhase = newBeforePhase;
-    }
-
-    protected MethodExpression afterPhase = null;
-
-    public void setAfterPhase(MethodExpression newAfterPhase) {
-    afterPhase = newAfterPhase;
-    }
-
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-
-    public ViewTag() {
-        super();
-    }
-
-    //
-    // Class methods
-    //
-
-    // 
-    // Accessors
-    //
-
-    //
-    // General Methods
-    //
-
-    protected int getDoStartValue() throws JspException {
-        return BodyTag.EVAL_BODY_BUFFERED;
-    }
-
-    /**
-     * <p>Override parent <code>doStartTag()</code> to do the following:</p>
-     *
-     * <ul>
-     *
-     * <li><p>Reflect the response object for a method called flushContentToWrappedResponse
-     * and invoke it. This causes any content that appears before the view to be written out
-     * to the response.  This is necessary to allow proper ordering to
-     * happen.</p></li>
-     *
-     * </ul>
-     *
-     */
-
-    public int doStartTag() throws JspException {
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        if (facesContext == null) {
-            throw new IllegalStateException(
-                  MessageUtils.getExceptionMessageString(
-                        MessageUtils.FACES_CONTEXT_NOT_FOUND_ID));
-        }
-
-        // flush out any content above the view tag
-        Object response = facesContext.getExternalContext().getResponse();
-        Method customFlush = ReflectionUtils.lookupMethod(response.getClass(),
-                                                          "flushContentToWrappedResponse",
-                                                          RIConstants.EMPTY_CLASS_ARGS);
-        if (customFlush != null) {
-            try {
-                pageContext.getOut().flush();
-                customFlush.invoke(response, RIConstants.EMPTY_METH_ARGS);
-            } catch (Exception e) {
-                throw new JspException("Exception attemtping to write content above the <f:view> tag.", e);
-            }
-        } else {
-            if (LOGGER.isLoggable(Level.FINE)) {
-                LOGGER.log(Level.FINE,
-                           "jsf.core.taglib.viewtag.interweaving_failed");
-            }
-        }
-
-        int rc;
-        try {
-            rc = super.doStartTag();
-        } catch (JspException e) {
-            if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING, "Can't leverage base class", e);
-            }
-            throw e;
-        } catch (Throwable t) {
-             if (LOGGER.isLoggable(Level.WARNING)) {
-                LOGGER.log(Level.WARNING, "Can't leverage base class", t);
-            }
-            throw new JspException(t);
-        }
-
-        // this must happen after our overriderProperties executes.
-        pageContext.getResponse().setLocale(facesContext.getViewRoot().getLocale());
-        
-        List<UIComponent> preViewLoadBundleComponents = LoadBundleTag.getPreViewLoadBundleComponentList();
-        if (!preViewLoadBundleComponents.isEmpty()) {
-            Iterator<UIComponent> iter = preViewLoadBundleComponents.iterator();
-            UIComponent cur;
-            while (iter.hasNext()) {
-                cur = iter.next();
-                LoadBundleTag.addChildToParentTagAndParentComponent(cur, this);
-            }
-            preViewLoadBundleComponents.clear();
-        }
-        Stack<UIComponentClassicTagBase> viewTagStack = SubviewTag.getViewTagStack();
-        viewTagStack.push(this);
-        return rc;
-    }
-
-    /**
-     * <p>Examine the body content of this tag.  If it is
-     * non-<code>null</code>, non-zero length, and not an HTML comment,
-     * call {@link javax.faces.webapp.UIComponentClassicTagBase#createVerbatimComponent()}.</p>
-     *
-     * <p>Set the value of the verbatim component to be
-     * <code>content</code>.</p>
-     *
-     * <p>Add this child to the end of the child list for
-     * <code>UIViewRoot</code>.</p>
-     */
-
-    public int doAfterBody() throws JspException {
-        int result = EVAL_PAGE;
-        BodyContent bodyContent;
-        UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
-        UIOutput verbatim;
-        String content;
-        String trimContent;
-
-        Stack<UIComponentClassicTagBase> viewTagStack =
-              SubviewTag.getViewTagStack();
-        viewTagStack.pop();
-
-        if (null == (bodyContent = getBodyContent()) ||
-            null == (content = bodyContent.getString()) ||
-            0 == (trimContent = content.trim()).length() ||
-            (trimContent.startsWith("<!--") && trimContent.endsWith("-->"))) {
-            return result;
-        }
-
-        bodyContent.clearBody();
-
-        verbatim = createVerbatimComponent();
-        verbatim.setValue(content);
-
-        root.getChildren().add(verbatim);
-
-        return result;
-    }
-
-    /**
-     * <p>Exercise a contract with the {@link ViewHandler} to get the
-     * character encoding from the response and set it into the
-     * session.</p>
-     */
-
-    public int doEndTag() throws JspException {
-        int rc = super.doEndTag();
-        // store the response character encoding
-        HttpSession session;
-
-        if (null != (session = pageContext.getSession())) {
-            session.setAttribute(ViewHandler.CHARACTER_ENCODING_KEY,
-                                 pageContext.getResponse().getCharacterEncoding());
-        }
-        return rc;
-    }
-
-
-    public String getComponentType() {
-        return UIViewRoot.COMPONENT_TYPE;
-    }
-
-    public String getRendererType() {
-        return null;
-    }
-
-
-    protected int getDoEndValue() throws JspException {
-        return (EVAL_PAGE);
-    }
-
-
-    //
-    // Methods from Superclass
-    // 
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        Locale viewLocale = null;
-    UIViewRoot viewRoot = (UIViewRoot) component;
-    FacesContext context = FacesContext.getCurrentInstance();
-    ELContext elContext = context.getELContext();
-    try {
-
-        if (null != renderKitId) {
-        if (renderKitId.isLiteralText()) {
-            // PENDING(edburns): better error message than NPE
-            // possible here.
-            viewRoot.setRenderKitId(renderKitId.getValue(elContext).toString());
-        } else {
-            // clear out the literal value to force using the
-            // expression
-            viewRoot.setRenderKitId(null);
-            viewRoot.setValueExpression("renderKitId", renderKitId);
-        }
-        }
-        else if (viewRoot.getRenderKitId() == null) {
-        String renderKitIdString =
-            context.getApplication().getDefaultRenderKitId();
-        if (null == renderKitIdString) {
-            renderKitIdString = RenderKitFactory.HTML_BASIC_RENDER_KIT;
-        }
-        viewRoot.setRenderKitId(renderKitIdString);
-        }
-
-        if (null != locale) {
-        if (locale.isLiteralText()) {
-            // PENDING(edburns): better error message than NPE
-            // possible here.
-            viewLocale =
-            getLocaleFromString(locale.getValue(elContext).toString());
-        }
-        else {
-            component.setValueExpression("locale", locale);
-                    Object result = locale.getValue(context.getELContext());
-                    if (result instanceof Locale) {
-                        viewLocale = (Locale) result;
-                    } else if (result instanceof String) {
-                        viewLocale = getLocaleFromString((String) result);
-                    }
-        }
-
-        assert(null != viewLocale);
-
-        ((UIViewRoot) component).setLocale(viewLocale);
-        // update the JSTL locale attribute in request scope so that
-        // JSTL picks up the locale from viewRoot. This attribute
-        // must be updated before the JSTL setBundle tag is called
-        // because that is when the new LocalizationContext object
-        // is created based on the locale.
-        Config.set(pageContext.getRequest(),Config.FMT_LOCALE, viewLocale);
-        }
-
-        if (null != beforePhase) {
-        if (beforePhase.isLiteralText()) {
-            Object params [] = {beforePhase};
-            throw new javax.faces.FacesException(MessageUtils.getExceptionMessageString(MessageUtils.INVALID_EXPRESSION_ID, params));
-        }
-        else {
-            viewRoot.setBeforePhaseListener(beforePhase);
-
-        }
-        }
-        if (null != afterPhase) {
-        if (afterPhase.isLiteralText()) {
-            Object params [] = {afterPhase};
-            throw new javax.faces.FacesException(MessageUtils.getExceptionMessageString(MessageUtils.INVALID_EXPRESSION_ID, params));
-        }
-        else {
-            viewRoot.setAfterPhaseListener(afterPhase);
-        }
-        }
-    } catch (ELException ele) {
-        throw new FacesException(ele);
-    }
-    }
-
-
-    /**
-     * Returns the locale represented by the expression.
-     *
-     * @param localeExpr a String in the format specified by JSTL Specification
-     *                   as follows:
-     *                   "A String value is interpreted as the printable
-     *                   representation of a locale, which must contain a
-     *                   two-letter (lower-case) language code (as defined by
-     *                   ISO-639), and may contain a two-letter (upper-case)
-     *                   country code (as defined by ISO-3166). Language and
-     *                   country codes must be separated by hyphen (???-???) or
-     *                   underscore (???_???)."
-     * @return Locale instance cosntructed from the expression.
-     */
-    protected Locale getLocaleFromString(String localeExpr) {
-        Locale result = Locale.getDefault();
-        if (localeExpr.indexOf("_") == -1 && localeExpr.indexOf("-") == -1) {
-            // expression has just language code in it. make sure the 
-            // expression contains exactly 2 characters.
-            if (localeExpr.length() == 2) {
-                result = new Locale(localeExpr, "");
-            }
-        } else {
-            // expression has country code in it. make sure the expression 
-            // contains exactly 5 characters.
-            if (localeExpr.length() == 5) {
-                // get the language and country to construct the locale.
-                String language = localeExpr.substring(0, 2);
-                String country = localeExpr.substring(3, localeExpr.length());
-                result = new Locale(language, country);
-            }
-        }
-        return result;
-    }
-
-} // end of class ViewTag
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/Cache.java b/jsf-ri/src/main/java/com/sun/faces/util/Cache.java
deleted file mode 100644
index f16bde8..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/Cache.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.faces.FacesException;
-
-    /**
-     * A concurrent caching mechanism.
-     */
-public class Cache<K, V> {
-
-            // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.UTIL.getLogger();
-
-
-        /**
-     * Factory interface for creating various cacheable objects.
-     */
-    public interface Factory<K,V> {
-
-        V newInstance(final K arg) throws InterruptedException;
-
-    } // END Factory
-
-
-        private ConcurrentMap<K,Future<V>> cache =
-              new ConcurrentHashMap<K,Future<V>>();
-        private Factory<K,V> factory;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        /**
-         * Constructs this cache using the specified <code>Factory</code>.
-         * @param factory
-         */
-        public Cache(Factory<K,V> factory) {
-
-            this.factory = factory;
-
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        /**
-         * If a value isn't associated with the specified key, a new
-         * {@link java.util.concurrent.Callable} will be created wrapping the <code>Factory</code>
-         * specified via the constructor and passed to a {@link java.util.concurrent.FutureTask}.  This task
-         * will be passed to the backing ConcurrentMap.  When {@link java.util.concurrent.FutureTask#get()}
-         * is invoked, the Factory will return the new Value which will be cached
-         * by the {@link java.util.concurrent.FutureTask}.
-         *
-         * @param key the key the value is associated with
-         * @return the value for the specified key, if any
-         */
-        public V get(final K key) {
-
-            while (true) {
-                Future<V> f = cache.get(key);
-                if (f == null) {
-                    Callable<V> callable = new Callable<V>() {
-                        public V call() throws Exception {
-                            return factory.newInstance(key);
-                        }
-                    };
-                    FutureTask<V> ft = new FutureTask<V>(callable);
-                    // here is the real beauty of the concurrent utilities.
-                    // 1.  putIfAbsent() is atomic
-                    // 2.  putIfAbsent() will return the value already associated
-                    //     with the specified key
-                    // So, if multiple threads make it to this point
-                    // they will all be calling f.get() on the same
-                    // FutureTask instance, so this guarantees that the instances
-                    // that the invoked Callable will return will be created once
-                    f = cache.putIfAbsent(key, ft);
-                    if (f == null) {
-                        f = ft;
-                        ft.run();
-                    }
-                }
-                try {
-                    return f.get();
-                } catch (CancellationException ce) {
-                    if (LOGGER.isLoggable(Level.FINEST)) {
-                        LOGGER.log(Level.FINEST,
-                                   ce.toString(),
-                                   ce);
-                    }
-                    cache.remove(key);
-                } catch (InterruptedException ie) {
-                    if (LOGGER.isLoggable(Level.FINEST)) {
-                        LOGGER.log(Level.FINEST,
-                                   ie.toString(),
-                                   ie);
-                    }
-                    cache.remove(key);
-                } catch (ExecutionException ee) {
-                    throw new FacesException(ee);
-                }
-            }
-
-        }
-
-        public V remove(final K key) {
-            Future<V> t = cache.remove(key);
-            V result = null;
-
-            if (null != t) {
-                try {
-                    result = t.get();
-                } catch (CancellationException ce) {
-                    if (LOGGER.isLoggable(Level.FINEST)) {
-                        LOGGER.log(Level.FINEST,
-                                ce.toString(),
-                                ce);
-                    }
-                } catch (InterruptedException ie) {
-                    if (LOGGER.isLoggable(Level.FINEST)) {
-                        LOGGER.log(Level.FINEST,
-                                ie.toString(),
-                                ie);
-                    }
-                } catch (ExecutionException ee) {
-                    throw new FacesException(ee);
-                }
-            }
-
-            return result;
-    }
-
-    } // END Cache
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/CollectionsUtils.java b/jsf-ri/src/main/java/com/sun/faces/util/CollectionsUtils.java
deleted file mode 100644
index 487ba91..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/CollectionsUtils.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * <p class="changed_added_2_0"></p>
- * @author asmirnov at exadel.com
- *
- */
-public class CollectionsUtils {
-
-	private CollectionsUtils() {
-		// this class contains static methods only.
-	}
-	
-	public static <T> T[] ar(T...ts){
-		return ts;
-	}
-	
-	public static <T> T[] ar(){
-		return null;
-	}
-
-	public static <T,V> ConstMap<T,V> map() {
-		return new ConstMap<T, V>();
-	}
-	
-	@SuppressWarnings("serial")
-	public static class ConstMap<T,V> extends HashMap<T,V> {
-		
-		public ConstMap() {
-			super(50, 1.0F);
-		}
-		
-		public ConstMap<T, V> add(T key, V value) {
-			put(key, value);
-			return this;
-		}
-		
-		public Map<T,V> fix() {
-			return Collections.unmodifiableMap(this);
-		}
-	}
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/ComponentStruct.java b/jsf-ri/src/main/java/com/sun/faces/util/ComponentStruct.java
deleted file mode 100644
index cfc278a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/ComponentStruct.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import javax.faces.component.StateHolder;
-import javax.faces.context.FacesContext;
-
-/**
- * Utility class to enable partial state saving of components that have been
- * dynamically added to the view.
- */
-public class ComponentStruct implements StateHolder {
-
-    public String parentClientId;
-    public String clientId;
-    public int indexOfChildInParent = -1;
-    public String facetName;
-
-    public boolean isTransient() {
-        return false;
-    }
-
-    public void restoreState(FacesContext ctx, Object state) {
-        if (ctx == null) {
-            throw new NullPointerException();
-        }
-        if (state == null) {
-            return;
-        }
-        Object s[] = (Object[]) state;
-        this.parentClientId = s[0].toString();
-        this.clientId = s[1].toString();
-        this.indexOfChildInParent = (Integer) s[2];
-        this.facetName = (String) s[3];
-    }
-
-    public Object saveState(FacesContext ctx) {
-        if (ctx == null) {
-            throw new NullPointerException();
-        }
-        Object state[] = new Object[4];
-        state[0] = this.parentClientId;
-        state[1] = this.clientId;
-        state[2] = this.indexOfChildInParent;
-        state[3] = this.facetName;
-        return state;
-    }
-
-    public void setTransient(boolean trans) {
-    }
-
-
-} // END ComponentStruct
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/ConcurrentCache.java b/jsf-ri/src/main/java/com/sun/faces/util/ConcurrentCache.java
deleted file mode 100644
index f186151..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/ConcurrentCache.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.concurrent.ExecutionException;
-
-
-/**
- * Defines a concurrent cache with a factory for creating new object instances.
- * 
- * This (combined with ExpiringConcurrentCache) offers functionality similar
- * to com.sun.faces.util.Cache.  Two differences:
- *
- * 1. Cache is concrete/assumes a particular implementation.  ConcurrentCache
- *    is abstract/allows subclasses to provide the implementation.  This
- *    facilitates alternative implementations, such as DefaultFaceletCache's
- *    NoCache.
- * 2. ConcurrentCache does not provide remove() as part of its contract, since
- *    remove behavior may be subclass-specific.  For example,
- *    ExpiringConcurentCache automatically removes items by checking for
- *    expiration rather than requiring manual removes.
- *
- * We should consider consolidating Cache and ConcurrentCache + 
- * ExpiringConcurrentCache into a single class hierarchy so that we
- * do not need to duplicate the JCIP scalable result cache code.
- */
-public abstract class ConcurrentCache<K, V> {
-  
-    /**
-     * Factory interface for creating various cacheable objects.
-     */
-    public interface Factory<K,V> {
-        public V newInstance(final K arg) throws Exception;
-    }
-    
-    /**
-     * Constructs this cache using the specified <code>Factory</code>.
-     * @param factory
-     */
-    public ConcurrentCache(Factory<K,V> f) {
-        _f = f;
-    }
-    
-    /**
-     * Retrieves a value for the specified key.
-     * If the value is not already present in the cache, a new instance will
-     * be allocated using the <code>Factory</code> interface
-     *
-     * @param key the key the value is associated with
-     * @return the value for the specified key
-     */
-    public abstract V get(final K key) throws ExecutionException;
-    
-    /**
-     * Tests whether the cache contains a value for the specified key
-     * @param key key to test
-     * @return true if the value for the specified key is already cached, false otherwise
-     */
-    public abstract boolean containsKey(final K key);
-    
-    /**
-     * Retrieves a <code>Factory</code> instance aasociated with this cache
-     * @return <code>Factory</code> instance
-     */
-    protected final Factory<K, V> getFactory() {
-        return _f;
-    }
-    
-    
-    private final Factory<K, V> _f;
-} 
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/DebugUtil.java b/jsf-ri/src/main/java/com/sun/faces/util/DebugUtil.java
deleted file mode 100644
index 234295a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/DebugUtil.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-// DebugUtil.java
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.model.SelectItem;
-import javax.el.ValueExpression;
-
-import com.sun.faces.io.FastStringWriter;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-/**
- * <B>DebugUtil</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class DebugUtil {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-    private static boolean keepWaiting = true;
-
-    private static int curDepth = 0;
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public DebugUtil() {
-        super();
-        // Util.parameterNonNull();
-        this.init();
-    }
-
-
-    protected void init() {
-        // super.init();
-    }
-
-//
-// Class methods
-//
-
-    public static void setKeepWaiting(boolean keepWaiting) {
-
-        DebugUtil.keepWaiting = keepWaiting;
-
-    }
-
-    /**
-     * Usage: <P>
-     * <p/>
-     * Place a call to this method in the earliest possible entry point of
-     * your servlet app.  It will cause the app to enter into an infinite
-     * loop, sleeping until the static var keepWaiting is set to false.  The
-     * idea is that you attach your debugger to the servlet, then, set a
-     * breakpont in this method.  When it is hit, you use the debugger to set
-     * the keepWaiting class var to false.
-     */
-
-    public static void waitForDebugger() {
-        while (keepWaiting) {
-            try {
-                Thread.sleep(5000);
-            } catch (InterruptedException e) {
-                System.out.println("DebugUtil.waitForDebugger(): Exception: " +
-                                   e.getMessage());
-            }
-        }
-    }
-
-
-    private static void indentPrintln(Writer out, String str) {
-
-        // handle indentation
-        try {
-            for (int i = 0; i < curDepth; i++) {
-                out.write("  ");
-            }
-            out.write(str + "\n");
-        } catch (IOException ignored) {}
-    }
-
-    /**
-     * @param root the root component
-     * @return the output of printTree() as a String.
-     * Useful when used with a Logger. For example:
-     *    logger.log(DebugUtil.printTree(root));
-     */
-    public static String printTree(UIComponent root) {
-        Writer writer = new FastStringWriter(1024);
-        printTree(root, writer);
-        return writer.toString();
-    }
-
-    /**
-     * Output of printTree() to a PrintStream.
-     * Usage:
-     *    DebugUtil.printTree(root, System.out);
-     *
-     * @param root the root component
-     * @param out the PrintStream to write to
-     */
-    public static void printTree(UIComponent root, PrintStream out) {
-        PrintWriter writer = new PrintWriter(out);
-        printTree(root, writer);
-        writer.flush();
-    }
-    
-    public static void printTree(UIComponent root, Logger logger, Level level) {
-        StringWriter sw = new StringWriter();
-        printTree(root, sw);
-        logger.log(level, sw.toString());
-    }
-
-    public static void printTree(UIComponent root, Writer out) {
-        if (null == root) {
-            return;
-        }
-        Object value = null;
-
-/* PENDING
-   indentPrintln(out, "===>Type:" + root.getComponentType());
-*/
-        indentPrintln(out, "id:" + root.getId());
-        indentPrintln(out, "type:" + root.getClass().getName());
-
-        if (root instanceof javax.faces.component.UISelectOne) {
-            Iterator<SelectItem> items = null;
-            try {
-                items = RenderKitUtils.getSelectItems(FacesContext.getCurrentInstance(),
-                                                      root);
-            } catch (Exception e) {
-                 // select items couldn't be resolved at this time
-                indentPrintln(out, " { SelectItem(s) not resolvable at this point in time }");
-            }
-            if (items != null) {
-                indentPrintln(out, " {");
-                while (items.hasNext()) {
-                    SelectItem curItem = items.next();
-                    indentPrintln(out, "\t value = "
-                                       + curItem.getValue()
-                                       +
-                                       ", label = "
-                                       + curItem.getLabel()
-                                       + ", description = "
-                                       +
-                                       curItem.getDescription());
-                }
-                indentPrintln(out, " }");
-            }
-        } else {
-            ValueExpression ve = null;
-            if (root instanceof ValueHolder) {
-                ve = root.getValueExpression("value");
-                try {
-                    value = ((ValueHolder) root).getValue();
-                } catch (Exception e) {
-                    value = "UNAVAILABLE";
-                }
-            }
-            if (ve != null) {
-                indentPrintln(out, "expression/value = " + ve.getExpressionString() + " : " + value);
-            } else {
-                indentPrintln(out, "value = " + value);
-            }
-
-            Iterator<String> it = root.getAttributes().keySet().iterator();
-            if (it != null) {
-                while (it.hasNext()) {                   
-                    String attrName = it.next();
-                    ve = root.getValueExpression(attrName);
-                    String expr = null;
-                    if (ve != null) {
-                        expr = ve.getExpressionString();
-                    }
-                    String val;
-                    try {
-                        val = root.getAttributes().get(attrName).toString();
-                    } catch (Exception e) {
-                        val = "UNAVAILABLE";
-                    }
-                    if (expr != null) {
-                        indentPrintln(out, "attr = " + attrName + " : [" + expr + " : " + val + " ]");
-                    } else {
-                        indentPrintln(out, "attr = " + attrName + " : " + val);
-                    }
-                }
-            }
-        }
-
-        curDepth++;
-        Iterator<UIComponent> it = root.getChildren().iterator();
-        // print all the facets of this component
-        for (UIComponent uiComponent : root.getFacets().values()) {
-            printTree(uiComponent, out);
-        }
-        // print all the children of this component
-        while (it.hasNext()) {
-            printTree(it.next(), out);
-        }
-        curDepth--;
-    }
-    
-    public static void simplePrintTree(UIComponent root, 
-                                      String duplicateId,
-                                       Writer out) {
-        if (null == root) {
-            return;
-        }                     
-
-        if (duplicateId.equals(root.getId())) {
-            indentPrintln(out, "+id: " + root.getId() + "  <===============");
-        } else {
-            indentPrintln(out, "+id: " + root.getId());
-        }
-        indentPrintln(out, " type: " + root.toString());           
-
-        curDepth++;       
-        // print all the facets of this component
-        for (UIComponent uiComponent : root.getFacets().values()) {
-            simplePrintTree(uiComponent, duplicateId, out);
-        }
-        // print all the children of this component
-        for (UIComponent uiComponent : root.getChildren()) {
-            simplePrintTree(uiComponent, duplicateId, out);
-        }
-        curDepth--;
-    }
-
-
-//    /**
-//     * Output of printTree() as a String. 
-//     * Useful when used with a Logger. For example:
-//     *    logger.log(DebugUtil.printTree(root));
-//     */
-//    public static String printTree(TreeStructure root) {
-//        Writer writer = new FastStringWriter(1024);
-//        printTree(root, writer);
-//        return writer.toString();
-//    }
-//
-//    /**
-//     * Output of printTree() to a PrintStream. 
-//     * Usage:
-//     *    DebugUtil.printTree(root, System.out);
-//     */
-//    public static void printTree(TreeStructure root, PrintStream out) {
-//        PrintWriter writer = new PrintWriter(out);
-//        printTree(root, writer);
-//        writer.flush();
-//    }
-//
-//    public static void printTree(TreeStructure root, Writer out) {
-//        if (null == root) {
-//            return;
-//        }
-//        int i = 0;
-//        Object value = null;
-//
-///* PENDING
-//   indentPrintln(out, "===>Type:" + root.getComponentType());
-//*/
-//        indentPrintln(out, "id:" + root.id);
-//        indentPrintln(out, "type:" + root.className);
-//
-//        Iterator items = null;
-//        SelectItem curItem = null;
-//        int j = 0;
-//
-//        curDepth++;
-//        if (null != root.children) {
-//            Iterator<TreeStructure> it = root.children.iterator();
-//            while (it.hasNext()) {
-//                printTree(it.next(), out);
-//            }
-//        }
-//        curDepth--;
-//    }
-
-    public static void printTree(Object [] root, Writer out) {
-        if (null == root) {
-            indentPrintln(out, "null");
-            return;
-        }
-
-/* PENDING
-   indentPrintln(out, "===>Type:" + root.getComponentType());
-*/
-        // drill down to the bottom of the first element in the array
-        boolean foundBottom = false;
-        Object [] myState = root;
-        while (!foundBottom) {
-            Object state = myState[0];
-            foundBottom = !state.getClass().isArray();
-            if (!foundBottom) {
-                myState = (Object []) state;
-            }
-        }
-
-        indentPrintln(out, "type:" + myState[8]);
-
-        curDepth++;
-        root = (Object []) root[1];
-        for (int i = 0; i < root.length; i++) {
-            printTree((Object []) root[i], out);
-        }
-        curDepth--;
-    }
-//
-// General Methods
-//
-
-
-} // end of class DebugUtil
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/ExpiringConcurrentCache.java b/jsf-ri/src/main/java/com/sun/faces/util/ExpiringConcurrentCache.java
deleted file mode 100644
index ef4d198..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/ExpiringConcurrentCache.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FacesException;
-
-/**
- * This class implements an abstract ConcurrentCache with  objects in the cache potentially expiring.
- * Only non-expired objects will be returned from the cache or considered to be contained in the cache
- * The cache is self-managing, so no remove() method is defined
- */
-public final class ExpiringConcurrentCache<K, V> extends ConcurrentCache<K, V> {
-    
-    /**
-     * Interface for checking whether a cached object expired
-     */
-    public interface ExpiryChecker<K, V>{
-        /**
-         * Checks whether a cached object expired
-         * @param key cache key
-         * @param value cached value
-         * @return true if the value expired and should be removed from the cache, false otherwise
-         */
-        public boolean isExpired(K key, V value);
-    }
-    
-    /**
-     * Public constructor.
-     * @param factory used to create new instances of objects that are not already available
-     * @param checker used to check whether an object in the cache has expired
-     */
-    public ExpiringConcurrentCache(Factory<K, V> f, ExpiryChecker<K, V> checker) {
-        super(f);
-        _checker = checker;
-    }
-    
-    @Override
-    public V get(final K key) throws ExecutionException {
-        // This method uses a design pattern from "Java concurrency in practice".
-        // The pattern ensures that only one thread gets to create an object  missing in the cache,
-        // while the all the other threads tring to get it are waiting
-        while (true) {
-            boolean newlyCached = false;
-            
-            Future<V> f = _cache.get(key);
-            if (f == null) {
-                Callable<V> callable = new Callable<V>() {
-                    public V call() throws Exception {
-                        return getFactory().newInstance(key);
-                    }
-                };
-                FutureTask<V> ft = new FutureTask<V>(callable);
-                // here is the real beauty of the concurrent utilities.
-                // 1.  putIfAbsent() is atomic
-                // 2.  putIfAbsent() will return the value already associated
-                //     with the specified key
-                // So, if multiple threads make it to this point
-                // they will all be calling f.get() on the same
-                // FutureTask instance, so this guarantees that the instances
-                // that the invoked Callable will return will be created once
-                f = _cache.putIfAbsent(key, ft);
-                if (f == null) {
-                    f = ft;
-                    ft.run();
-                    newlyCached = true;
-                }
-            }
-            try {
-                V obj = f.get();
-                if (!newlyCached && _getExpiryChecker().isExpired(key, obj)) {
-                    
-                    // Note that we are using both key and value in remove() call to ensure
-                    // that we are not removing the Future added after expiry check by a different thread
-                    _cache.remove(key, f);
-                }
-                else {
-                    return obj;
-                }
-            } catch (CancellationException ce) {
-                if (_LOGGER.isLoggable(Level.SEVERE)) {
-                    _LOGGER.log(Level.SEVERE,
-                               ce.toString(),
-                               ce);
-                }
-                _cache.remove(key, f);
-            } catch (ExecutionException ee) {
-                _cache.remove(key, f);
-                throw ee;
-            } catch (InterruptedException ie) {                 
-                throw new FacesException(ie); 
-                
-            }
-        }  
-    }
-    
-    @Override
-    public boolean containsKey(final K key) {
-        
-        Future<V> f = _cache.get(key);
-
-        if (f != null && f.isDone() && !f.isCancelled()) {
-
-            try {
-                // Call get() with a 0 timeout to avoid any wait
-                V obj = f.get(0, TimeUnit.MILLISECONDS);
-                if (_getExpiryChecker().isExpired(key, obj)) {
-
-                    // Note that we are using both key and value in remove() call to ensure
-                    // that we are not removing the Future added after expiry check by a different thread
-                    _cache.remove(key, f);
-                } else {
-                    
-                    return true;
-                }
-            } catch (TimeoutException ce) {
-                    // do nothing. This just indicates that the object is not yet ready
-                } catch (CancellationException ce) {
-                if (_LOGGER.isLoggable(Level.SEVERE)) {
-                    _LOGGER.log(Level.SEVERE, ce.toString(), ce);
-                }
-            } catch (InterruptedException ie) {
-                throw new FacesException(ie);
-
-            } catch (ExecutionException ee) {
-                // Do nothing - the FutureTask will be removed by the thread that called get() on this class
-            }
-        }
-        
-        return false;
-    }
-
-    
-
-
-    private final ExpiryChecker<K, V> _getExpiryChecker() {
-        return _checker;
-    }
-    
-    private final ExpiryChecker<K, V> _checker;
-    private final ConcurrentMap<K, Future<V>> _cache = new ConcurrentHashMap<K, Future<V>>();
-    
-    private static final Logger _LOGGER = FacesLogger.UTIL.getLogger();
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/FacesLogger.java b/jsf-ri/src/main/java/com/sun/faces/util/FacesLogger.java
deleted file mode 100644
index 9f18143..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/FacesLogger.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
- 
-package com.sun.faces.util;
-
-import java.util.logging.Logger;
-
-/**
- * <p/>
- * An <code>enum</code> of all application <code>Logger</code>s.
- * </p>
- */
-public enum FacesLogger {
-
-    APPLICATION("application"),
-    APPLICATION_VIEW("application.view"),
-    RESOURCE("resource"),
-    CONFIG("config"),
-    CONTEXT("context"),
-    FACELETS_COMPILER("facelets.compiler"),
-    FACELETS_COMPONENT("facelets.tag.component"),
-    FACELETS_META("facelets.tag.meta"),
-    FACELETS_COMPOSITION("facelets.tag.ui.composition"),
-    FACELETS_DECORATE("facelets.tag.ui.decorate"),
-    FACELETS_INCLUDE("facelets.tag.ui.include"),
-    FACELETS_FACELET("faclets.facelet"),
-    FACELETS_FACTORY("facelets.factory"),
-    LIFECYCLE("lifecycle"),
-    MANAGEDBEAN("managedbean"),
-    RENDERKIT("renderkit"),
-    TAGLIB("taglib"),
-    TIMING("timing"),
-    UTIL("util"),
-    FLASH("flash");
-
-    private static final String LOGGER_RESOURCES
-         = "com.sun.faces.LogStrings";
-    public static final String FACES_LOGGER_NAME_PREFIX
-         = "javax.enterprise.resource.webcontainer.jsf.";
-    private String loggerName;
-
-
-    FacesLogger(String loggerName) {
-        this.loggerName = FACES_LOGGER_NAME_PREFIX + loggerName;
-    }
-
-
-    public String getLoggerName() {
-        return loggerName;
-    }
-
-
-    public String getResourcesName() {
-        return LOGGER_RESOURCES;
-    }
-
-    public Logger getLogger() {
-        return Logger.getLogger(loggerName, LOGGER_RESOURCES);
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/HtmlUtils.java b/jsf-ri/src/main/java/com/sun/faces/util/HtmlUtils.java
deleted file mode 100644
index d3da2a0..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/HtmlUtils.java
+++ /dev/null
@@ -1,1236 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import com.sun.faces.config.WebConfiguration;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.BitSet;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Arrays;
-
-/**
- * Utility class for HTML.
- * Kudos to Adam Winer (Oracle) for much of this code.
- */
-public class HtmlUtils {
-
-    private final static Set<String> UTF_CHARSET = new HashSet<String>(Arrays.asList("UTF-8", "UTF-16",
-            "UTF-16BE", "UTF-16LE", "UTF-32", "UTF-32BE", "UTF-32LE", "x-UTF-16LE-BOM", "X-UTF-32BE-BOM",
-            "X-UTF-32LE-BOM", ""));
-
-    //-------------------------------------------------
-    // The following methods include the handling of
-    // escape characters....
-    //-------------------------------------------------
-
-    static public void writeText(Writer out,
-                                 boolean escapeUnicode,
-                                 boolean escapeIsocode, char[] buffer,
-                                 char[] text) throws IOException {
-        writeText(out, escapeUnicode, escapeIsocode, buffer, text, 0, text.length);
-    }
-
-
-    /**
-     * Write char array text.
-     */
-    static public void writeText(Writer out,
-                                 boolean escapeUnicode,
-                                 boolean escapeIsocode, char[] buff,
-                                 char[] text,
-                                 int start,
-                                 int length) throws IOException {
-        int buffLength = buff.length;
-        int buffIndex = 0;
-
-        int end = start + length;
-        for (int i = start; i < end; i++) {
-            buffIndex = writeTextChar(out, escapeUnicode, escapeIsocode, text[i], buffIndex, buff, buffLength);
-        }
-
-        flushBuffer(out, buff, buffIndex);
-    }
-
-
-    /**
-     * Write String text.  
-     */
-    static public void writeText(Writer out,
-                                 boolean escapeUnicode,
-                                 boolean escapeIsocode, char[] buff,
-                                 String text,
-                                 char[] textBuff) throws IOException {
-
-        int length = text.length();
-
-        if (length >= 16) {
-            text.getChars(0, length, textBuff, 0);
-            writeText(out, escapeUnicode, escapeIsocode, buff, textBuff, 0, length);
-        } else {
-            int buffLength = buff.length;
-            int buffIndex = 0;
-            for (int i = 0; i < length; i++) {
-                char ch = text.charAt(i);
-                buffIndex = writeTextChar(out, escapeUnicode, escapeIsocode, ch, buffIndex, buff, buffLength);
-            }
-            flushBuffer(out, buff, buffIndex);
-        }
-
-        
-    }
-
-    private static int writeTextChar(Writer out,
-                                     boolean escapeUnicode,
-                                     boolean escapeIsocode,
-                                     char ch,
-                                     int buffIndex,
-                                     char[] buff,
-                                     int buffLength) throws IOException {
-        int nextIndex;
-        if (ch <= 0x1f) {
-            if (!isPrintableControlChar(ch)) {
-                return buffIndex;
-            }
-        }
-        if (ch < 0xA0) {
-            // If "?" or over, no escaping is needed (this covers
-            // most of the Latin alphabet)
-            if (ch >= 0x3f) {
-                nextIndex = addToBuffer(out, buff, buffIndex,
-                                        buffLength, ch);
-            } else if (ch >= 0x27) {  // If above "'"...
-                // If between "'" and ";", no escaping is needed
-                if (ch < 0x3c) {
-                    nextIndex = addToBuffer(out, buff, buffIndex,
-                                            buffLength, ch);
-                } else if (ch == '<') {
-                    nextIndex = addToBuffer(out,
-                                            buff,
-                                            buffIndex,
-                                            buffLength,
-                                            LT_CHARS);
-                } else if (ch == '>') {
-                    nextIndex = addToBuffer(out,
-                                            buff,
-                                            buffIndex,
-                                            buffLength,
-                                            GT_CHARS);
-                } else {
-                    nextIndex = addToBuffer(out, buff, buffIndex,
-                                            buffLength, ch);
-                }
-            } else {
-                if (ch == '&') {
-                    nextIndex = addToBuffer(out,
-                                            buff,
-                                            buffIndex,
-                                            buffLength,
-                                            AMP_CHARS);
-                } else if (ch == '"') {
-                     nextIndex = addToBuffer(out,
-                                             buff,
-                                             buffIndex,
-                                             buffLength,
-                                             QUOT_CHARS);
-                } else {
-                    nextIndex = addToBuffer(out, buff, buffIndex,
-                                            buffLength, ch);
-                }
-            }
-        } else if (ch <= 0xff) {
-            if (escapeIsocode) {
-                // ISO-8859-1 entities: encode as needed
-                nextIndex = addToBuffer(out,
-                                        buff,
-                                        buffIndex,
-                                        buffLength,
-                                        sISO8859_1_Entities[ch - 0xA0]);
-            }
-            else {
-                nextIndex = addToBuffer(out, buff, buffIndex,
-                        buffLength, ch);
-            }
-        } else {
-            if(escapeUnicode) {
-                // UNICODE entities: encode as needed
-                nextIndex =
-                      _writeDecRef(out, buff, buffIndex, buffLength, ch);
-            } else {
-                nextIndex = addToBuffer(out, buff, buffIndex,
-                        buffLength, ch);
-            }
-        }
-        return nextIndex;
-    }
-
-
-    /**
-     * Write a string attribute.  Note that this code
-     * is duplicated below for character arrays - change both
-     * places if you make any changes!!!
-     */
-    static public void writeAttribute(Writer out,
-                                      boolean escapeUnicode,
-                                      boolean escapeIsocode,
-                                      char[] buff,
-                                      String text,
-                                      char[] textBuff,
-                                      boolean isScriptInAttributeValueEnabled) throws IOException {
-
-        int length = text.length();
-        if (length >= 16) {
-            if (length > textBuff.length) {
-                // resize our buffer
-                textBuff = new char[length * 2];
-            }
-            text.getChars(0, length, textBuff, 0);
-            writeAttribute(out, escapeUnicode, escapeIsocode, buff, textBuff, 0, length,
-                    isScriptInAttributeValueEnabled);
-        } else {
-            int buffLength = buff.length;
-            int buffIndex = 0;
-            for (int i = 0; i < length; i++) {
-                char ch = text.charAt(i);
-
-                if (ch <= 0x1f) {
-                    if (!isPrintableControlChar(ch)) {
-                        continue;
-                    }
-                }
-                // Tilde or less...
-                if (ch < 0xA0) {
-                    // If "?" or over, no escaping is needed (this covers
-                    // most of the Latin alphabet)
-                    if (ch >= 0x3f) {
-                        if (ch == 's') {
-                            // If putting scripts in attribute values
-                            // has been disabled (the defualt), look for
-                            // script: in the attribute value.
-                            // ensure the attribute value is long enough
-                            // to accomodate "script:"
-                            if (!isScriptInAttributeValueEnabled &&
-                                    ((i + 6) < text.length())) {
-                                if ('c' == text.charAt(i + 1) &&
-                                    'r' == text.charAt(i + 2) &&
-                                    'i' == text.charAt(i + 3) &&
-                                    'p' == text.charAt(i + 4) &&
-                                    't' == text.charAt(i + 5) &&
-                                    ':' == text.charAt(i + 6)) {
-                                    return;
-                                }
-                            }
-                        }
-                        buffIndex = addToBuffer(out, buff, buffIndex,
-                                                buffLength, ch);
-                    } else if (ch >= 0x27) { // If above "'"...
-                        // If between "'" and ";", no escaping is needed
-                        if (ch < 0x3c) {
-                            buffIndex = addToBuffer(out, buff, buffIndex,
-                                                    buffLength, ch);
-                        } else if (ch == '<') {
-                            buffIndex = addToBuffer(out,
-                                                    buff,
-                                                    buffIndex,
-                                                    buffLength,
-                                                    LT_CHARS);
-                        } else if (ch == '>') {
-                            buffIndex = addToBuffer(out,
-                                                    buff,
-                                                    buffIndex,
-                                                    buffLength,
-                                                    GT_CHARS);
-                        } else {
-                            buffIndex = addToBuffer(out, buff, buffIndex,
-                                                    buffLength, ch);
-                        }
-                    } else {
-                        if (ch == '&') {
-                            // HTML 4.0, section B.7.1: ampersands followed by
-                            // an open brace don't get escaped
-                            if ((i + 1 < length) && (text.charAt(i + 1)
-                                                     == '{')) {
-                                buffIndex = addToBuffer(out,
-                                                        buff,
-                                                        buffIndex,
-                                                        buffLength,
-                                                        ch);
-                            } else {
-                                buffIndex = addToBuffer(out,
-                                                        buff,
-                                                        buffIndex,
-                                                        buffLength,
-                                                        AMP_CHARS);
-                            }
-                        } else if (ch == '"') {
-                            buffIndex = addToBuffer(out,
-                                                    buff,
-                                                    buffIndex,
-                                                    buffLength,
-                                                    QUOT_CHARS);
-                        } else {
-                            buffIndex = addToBuffer(out, buff, buffIndex,
-                                                    buffLength, ch);
-                        }
-                    }
-                } else if (ch <= 0xff) {
-                    if (escapeIsocode) {
-                        // ISO-8859-1 entities: encode as needed
-                        buffIndex = addToBuffer(out,
-                                                buff,
-                                                buffIndex,
-                                                buffLength,
-                                                sISO8859_1_Entities[ch - 0xA0]);
-                    } else {
-                        buffIndex = addToBuffer(out, buff, buffIndex,
-                                                buffLength, ch);
-                    }
-                } else {
-                    if(escapeUnicode) {
-                        // UNICODE entities: encode as needed
-                        buffIndex =
-                              _writeDecRef(out, buff, buffIndex, buffLength, ch);
-                    } else {
-                        buffIndex = addToBuffer(out, buff, buffIndex,
-                                buffLength, ch);
-                    }
-                }
-            }
-
-            flushBuffer(out, buff, buffIndex);
-        }
-    }
-
-
-    static public void writeAttribute(Writer out,
-                                      boolean escapeUnicode,
-                                      boolean escapeIsocode,
-                                      char[] buffer,
-                                      char[] text) throws IOException {
-        writeAttribute(out, escapeUnicode, escapeIsocode, buffer, text, 0, text.length,
-                WebConfiguration.BooleanWebContextInitParameter.EnableScriptInAttributeValue.getDefaultValue());
-    }
-
-
-    /**
-     * Write a character array attribute.  Note that this code
-     * is duplicated above for string - change both places if you make
-     * any changes!!!
-     */
-    static public void writeAttribute(Writer out,
-                                      boolean escapeUnicode,
-                                      boolean escapeIsocode,
-                                      char[] buff,
-                                      char[] text,
-                                      int start,
-                                      int length,
-                                      boolean isScriptInAttributeValueEnabled) throws IOException {
-        int buffLength = buff.length;
-        int buffIndex = 0;
-
-        int end = start + length;
-        for (int i = start; i < end; i++) {
-            char ch = text[i];
-
-            // "Application Program Command" or less...
-            if (ch <= 0x1f) {
-                if (!isPrintableControlChar(ch)) {
-                    continue;
-                }
-            }
-            if (ch < 0xA0) {
-                // If "?" or over, no escaping is needed (this covers
-                // most of the Latin alphabet)
-                if (ch >= 0x3f) {
-                    if (ch == 's') {
-                        // If putting scripts in attribute values
-                        // has been disabled (the defualt), look for
-                        // script: in the attribute value.  
-                        // ensure the attribute value is long enough
-                        // to accomodate "script:"
-                        if (!isScriptInAttributeValueEnabled &&
-                                ((i + 6) < text.length)) {
-                            if ('c' == text[i + 1] &&
-                                'r' == text[i + 2] &&
-                                'i' == text[i + 3] &&
-                                'p' == text[i + 4] &&
-                                't' == text[i + 5] &&
-                                ':' == text[i + 6]) {
-                                return;
-                            }
-                        }
-                    }
-                    
-                    buffIndex = addToBuffer(out, buff, buffIndex,
-                                            buffLength, ch);
-                } else if (ch >= 0x27) { // If above "'"...
-                    if (ch < 0x3c) {
-                        // If between "'" and ";", no escaping is needed
-                        buffIndex = addToBuffer(out, buff, buffIndex,
-                                                buffLength, ch);                       
-                    } else if (ch == '<') {
-                        buffIndex = addToBuffer(out,
-                                                buff,
-                                                buffIndex,
-                                                buffLength,
-                                                LT_CHARS);
-                    } else if (ch == '>') {
-                        buffIndex = addToBuffer(out,
-                                                buff,
-                                                buffIndex,
-                                                buffLength,
-                                                GT_CHARS);
-                    } else {
-                        buffIndex = addToBuffer(out, buff, buffIndex,
-                                                buffLength, ch);
-                    }
-                } else {
-                    if (ch == '&') {
-                        // HTML 4.0, section B.7.1: ampersands followed by
-                        // an open brace don't get escaped
-                        if ((i + 1 < end) && (text[i + 1] == '{')) {
-                            buffIndex = addToBuffer(out,
-                                                    buff,
-                                                    buffIndex,
-                                                    buffLength,
-                                                    ch);
-                        } else {
-                            buffIndex = addToBuffer(out,
-                                                buff,
-                                                buffIndex,
-                                                buffLength,
-                                                AMP_CHARS);
-                        }
-                    } else if (ch == '"') {
-                        buffIndex = addToBuffer(out,
-                                                buff,
-                                                buffIndex,
-                                                buffLength,
-                                                QUOT_CHARS);
-                    } else {
-                        buffIndex = addToBuffer(out, buff, buffIndex,
-                                                buffLength, ch);
-                    }
-                }
-            } else if (ch <= 0xff) {
-                if (escapeIsocode) {
-                    // ISO-8859-1 entities: encode as needed
-                    buffIndex = addToBuffer(out,
-                                            buff,
-                                            buffIndex,
-                                            buffLength,
-                                            sISO8859_1_Entities[ch - 0xA0]);
-                }
-                else {
-                    buffIndex = addToBuffer(out, buff, buffIndex,
-                            buffLength, ch);
-                }
-            } else {
-                if(escapeUnicode) {
-                    // UNICODE entities: encode as needed
-                    buffIndex = _writeDecRef(out, buff, buffIndex, buffLength, ch);
-                } else {
-                    buffIndex = addToBuffer(out, buff, buffIndex,
-                            buffLength, ch);
-                }
-            }
-        }
-
-        flushBuffer(out, buff, buffIndex);
-    }
-
-
-    static private boolean isPrintableControlChar(int ch) {
-
-        return (ch == 0x09 || ch == 0x0A || ch == 0x0C || ch == 0x0D);
-
-    }
-
-
-    /**
-     * Writes a character as a decimal escape.  Hex escapes are smaller than
-     * the decimal version, but Netscape didn't support hex escapes until
-     * 4.7.4.
-     */
-    static private int _writeDecRef(Writer out,
-                                    char[] buffer,
-                                    int bufferIndex,
-                                    int bufferLength,
-                                    char ch) throws IOException {
-        if (ch == '\u20ac') {
-            bufferIndex = addToBuffer(out,
-                                      buffer,
-                                      bufferIndex,
-                                      bufferLength,
-                                      EURO_CHARS);
-            return bufferIndex;
-        }
-        bufferIndex = addToBuffer(out,
-                                  buffer,
-                                  bufferIndex,
-                                  bufferLength,
-                                  DEC_REF_START);
-        // Formerly used String.valueOf().  This version tests out
-        // about 40% faster in a microbenchmark (and on systems where GC is
-        // going gonzo, it should be even better)
-        int i = (int) ch;
-        if (i > 10000) {
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10000))));
-            i = i % 10000;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 1000))));
-            i = i % 1000;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 100))));
-            i = i % 100;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10))));
-            i = i % 10;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + i)));
-        } else if (i > 1000) {
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 1000))));
-            i = i % 1000;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 100))));
-            i = i % 100;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10))));
-            i = i % 10;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + i)));
-        } else {
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 100))));
-            i = i % 100;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + (i / 10))));
-            i = i % 10;
-            bufferIndex = addToBuffer(out, buffer, bufferIndex, bufferLength, ((char) ('0' + i)));
-        }
-
-        return addToBuffer(out, buffer, bufferIndex, bufferLength, ';');
-        
-    }
-
-    // 
-    // Buffering scheme: we use a tremendously simple buffering
-    // scheme that greatly reduces the number of calls into the
-    // Writer/PrintWriter.  In practice this has produced significant
-    // measured performance gains (at least in JDK 1.3.1).
-    //
-
-    /**
-     * Add a character to the buffer, flushing the buffer if the buffer is
-     * full, and returning the new buffer index
-     */
-    private static int addToBuffer(Writer out,
-                                   char[] buffer,
-                                   int bufferIndex,
-                                   int bufferLength,
-                                   char ch) throws IOException {
-        if (bufferIndex >= bufferLength) {
-            out.write(buffer, 0, bufferIndex);
-            bufferIndex = 0;
-        }
-
-        buffer[bufferIndex] = ch;
-
-        return bufferIndex + 1;
-    }
-
-    /**
-     * Add an array of characters to the buffer, flushing the buffer
-     * if the buffer is full, and returning the new buffer index. 
-     */
-    private static int addToBuffer(Writer out,
-                                   char[] buffer,
-                                   int bufferIndex,
-                                   int bufferLength,
-                                   char[] toAdd) throws IOException {
-
-        if (bufferIndex >= bufferLength
-            || (toAdd.length + bufferIndex >= bufferLength)) {
-            out.write(buffer, 0, bufferIndex);
-            bufferIndex = 0;
-        }
-        System.arraycopy(toAdd, 0, buffer, bufferIndex, toAdd.length);
-        return bufferIndex + toAdd.length;
-
-    }
-
-
-    /**
-     * Flush the contents of the buffer to the output stream
-     * and return the reset buffer index
-     */
-    private static int flushBuffer(Writer out,
-                                   char[] buffer,
-                                   int bufferIndex) throws IOException {
-        if (bufferIndex > 0)
-            out.write(buffer, 0, bufferIndex);
-
-        return 0;
-    }
-
-
-    private HtmlUtils() {
-    }
-
-
-    /**
-     * Writes a string into URL-encoded format out to a Writer.
-     * <p/>
-     * All characters before the start of the query string will be encoded
-     * using ISO-8859-1.
-     * PENDING: Ideally, we'd encode characters before the query string
-     * using UTF-8, which is what the HTML spec recommends.  Unfortunately,
-     * the Apache server doesn't support this until 2.0.
-     * <p/>
-     * Characters after the start of the query string will be encoded
-     * using a client-defined encoding.  You'll need to use the encoding
-     * that the server will expect.  (HTML forms will generate query
-     * strings using the character encoding that the HTML itself was
-     * generated in.)
-     * <p/>
-     * All characters will be encoded as needed for URLs, with the exception
-     * of the percent symbol ("%").  Because this is the character
-     * itself used for escaping, attempting to escape this character
-     * would cause this code to double-escape some strings.  It also may
-     * be necessary to pre-escape some characters.  In particular, a
-     * question mark ("?") is considered the start of the query string.
-     * <p/>
-     *
-     * <p>
-     * NOTE:  This is method is duplicated below.  The difference being
-     *  the acceptance of a char[] for the text to write.  Any changes made
-     *  here, should be made below.
-     * </p>
-     *
-     * @param out           a Writer for the output
-     * @param text          the unencoded (or partially encoded) String
-     * @param queryEncoding the character set encoding for after the first
-     *                      question mark
-     */
-    static public void writeURL(Writer out,
-                                String text,
-                                char[] textBuff,
-                                String queryEncoding)
-          throws IOException, UnsupportedEncodingException {
-
-        int length = text.length();
-        if (length >= 16) {
-            text.getChars(0, length, textBuff, 0);
-            writeURL(out, textBuff, 0, length, queryEncoding);
-        } else {
-            for (int i = 0; i < length; i++) {
-                char ch = text.charAt(i);
-
-                if ((ch < 33) || (ch > 126)) {
-                    if (ch == ' ') {
-                        out.write('+');
-                    } else {
-                        // ISO-8859-1.  Blindly assume the character will be < 255.
-                        // Not much we can do if it isn't.
-                        writeURIDoubleHex(out, ch);
-
-                    }
-                }
-                // DO NOT encode '%'.  If you do, then for starters,
-                // we'll double-encode anything that's pre-encoded.
-                // And, what's worse, there becomes no way to use
-                // characters that must be encoded if you
-                // don't want them to be interpreted, like '?' or '&'.
-                // else if('%' == ch)
-                // {
-                //   writeURIDoubleHex(out, ch);
-                // }
-                else if (ch == '"') {
-                    out.write("%22");
-                }
-                // Everything in the query parameters will be decoded
-                // as if it were in the request's character set.  So use
-                // the real encoding for those!
-                else if (ch == '?') {
-                    out.write('?');
-                    encodeURIString(out,
-                                    text,
-                                    queryEncoding,
-                                    i + 1);
-                    return;
-                } else {
-                    out.write(ch);
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Writes a string into URL-encoded format out to a Writer.
-     * <p/>
-     * All characters before the start of the query string will be encoded
-     * using ISO-8859-1.
-     * PENDING: Ideally, we'd encode characters before the query string
-     * using UTF-8, which is what the HTML spec recommends.  Unfortunately,
-     * the Apache server doesn't support this until 2.0.
-     * <p/>
-     * Characters after the start of the query string will be encoded
-     * using a client-defined encoding.  You'll need to use the encoding
-     * that the server will expect.  (HTML forms will generate query
-     * strings using the character encoding that the HTML itself was
-     * generated in.)
-     * <p/>
-     * All characters will be encoded as needed for URLs, with the exception
-     * of the percent symbol ("%").  Because this is the character
-     * itself used for escaping, attempting to escape this character
-     * would cause this code to double-escape some strings.  It also may
-     * be necessary to pre-escape some characters.  In particular, a
-     * question mark ("?") is considered the start of the query string.
-     * <p/>
-     * <p>
-     * NOTE:  This is method is duplicated above.  The difference being
-     *  the acceptance of a String for the text to write.  Any changes made
-     *  here, should be made above.
-     * </p>
-     *
-     * @param out           a Writer for the output
-     * @param textBuff    char[] containing the content to write
-     * @param queryEncoding the character set encoding for after the first
-     *                      question mark
-     */
-    static public void writeURL(Writer out,
-                                char[] textBuff,
-                                int start,
-                                int len,
-                                String queryEncoding)
-        throws IOException, UnsupportedEncodingException {
-
-        int end = start + len;
-        for (int i = start; i < end; i++) {
-            char ch = textBuff[i];
-
-            if ((ch < 33) || (ch > 126)) {
-                if (ch == ' ') {
-                    out.write('+');
-                } else {
-                    // ISO-8859-1.  Blindly assume the character will be < 255.
-                    // Not much we can do if it isn't.
-                    writeURIDoubleHex(out, ch);
-
-                }
-            }
-            // DO NOT encode '%'.  If you do, then for starters,
-            // we'll double-encode anything that's pre-encoded.
-            // And, what's worse, there becomes no way to use
-            // characters that must be encoded if you
-            // don't want them to be interpreted, like '?' or '&'.
-            // else if('%' == ch)
-            // {
-            //   writeURIDoubleHex(out, ch);
-            // }
-            else if (ch == '"') {
-                out.write("%22");
-            }
-            // Everything in the query parameters will be decoded
-            // as if it were in the request's character set.  So use
-            // the real encoding for those!
-            else if (ch == '?') {
-           out.write('?');
-                encodeURIString(out,
-                                textBuff,
-                                queryEncoding,
-                                i + 1,
-                                end);
-                return;
-            } else {
-                out.write(ch);
-            }
-        }
-    }
-
-
-    // Encode a String into URI-encoded form.  This code will
-    // appear rather (ahem) similar to java.net.URLEncoder
-    // This is duplicated below accepting a char[] for the content
-    // to write.  Any changes here, should be made there as well.
-     static private void encodeURIString(Writer out,
-                                        String text,
-                                        String encoding,
-                                        int start)
-     throws IOException {   
-        MyByteArrayOutputStream buf = null;
-        OutputStreamWriter writer = null;
-        char[] charArray = null;
-
-        int length = text.length();
-        for (int i = start; i < length; i++) {
-            char ch = text.charAt(i);
-            if (DONT_ENCODE_SET.get(ch)) {
-                if (ch == '&') {
-                    if (((i + 1) < length) && isAmpEscaped(text, i + 1)) {
-                        out.write(ch);
-                        continue;
-                    }
-                    out.write(AMP_CHARS);
-                } else {
-                    out.write(ch);
-                }
-            } else {
-                if (buf == null) {
-                    buf = new MyByteArrayOutputStream(MAX_BYTES_PER_CHAR);
-                    if (encoding != null) {
-                        writer = new OutputStreamWriter(buf, encoding);
-                    } else {
-                        writer = new OutputStreamWriter(buf);
-                    }
-                    charArray = new char[1];
-                }
-
-                // convert to external encoding before hex conversion
-                try {
-                    // An inspection of OutputStreamWriter reveals
-                    // that write(char) always allocates a one element
-                    // character array.  We can reuse our own.
-                    charArray[0] = ch;
-                    writer.write(charArray, 0, 1);
-                    writer.flush();
-                } catch (IOException e) {
-                    buf.reset();
-                    continue;
-                }
-
-                byte[] ba = buf.getBuf();
-                for (int j = 0, size = buf.size(); j < size; j++) {
-                    writeURIDoubleHex(out, ba[j] + 256);
-                }
-
-                buf.reset();
-            }
-        }      
-    }
-
-    // Encode a String into URI-encoded form.  This code will
-    // appear rather (ahem) similar to java.net.URLEncoder
-    // This is duplicated above accepting a String for the content
-    // to write.  Any changes here, should be made there as well.
-     static private void encodeURIString(Writer out,
-                                        char[] textBuff,
-                                        String encoding,
-                                        int start,
-                                        int end)
-     throws IOException {
-        MyByteArrayOutputStream buf = null;
-        OutputStreamWriter writer = null;
-        char[] charArray = null;
-
-
-        for (int i = start; i < end; i++) {
-            char ch = textBuff[i];
-            if (DONT_ENCODE_SET.get(ch)) {
-                if (ch == '&') {
-                    if (((i + 1) < end) && isAmpEscaped(textBuff, i + 1)) {
-                        out.write(ch);
-                        continue;
-                    }
-                    out.write(AMP_CHARS);
-                } else {
-                    out.write(ch);
-                }
-            } else {
-                if (buf == null) {
-                    buf = new MyByteArrayOutputStream(MAX_BYTES_PER_CHAR);
-                    if (encoding != null) {
-                        writer = new OutputStreamWriter(buf, encoding);
-                    } else {
-                        writer = new OutputStreamWriter(buf);
-                    }
-                    charArray = new char[1];
-                }
-
-                // convert to external encoding before hex conversion
-                try {
-                    // An inspection of OutputStreamWriter reveals
-                    // that write(char) always allocates a one element
-                    // character array.  We can reuse our own.
-                    charArray[0] = ch;
-                    writer.write(charArray, 0, 1);
-                    writer.flush();
-                } catch (IOException e) {
-                    buf.reset();
-                    continue;
-                }
-
-                byte[] ba = buf.getBuf();
-                for (int j = 0, size = buf.size(); j < size; j++) {
-                    writeURIDoubleHex(out, ba[j] + 256);
-                }
-
-                buf.reset();
-            }
-        }
-    }
-    
-
-    // NOTE: Any changes made to this method should be made
-    //  in the associated method that accepts a char[] instead
-    //  of String
-    static private boolean isAmpEscaped(String text, int idx) {       
-        for (int i = 1, ix = idx; i < AMP_CHARS.length; i++, ix++) {
-            if (text.charAt(ix) == AMP_CHARS[i]) {
-                continue;
-            }
-            return false;
-        }
-        return true;
-    }
-
-    // NOTE: Any changes made to this method should be made
-    //  in the associated method that accepts a String instead
-    //  of char[]
-    static private boolean isAmpEscaped(char[] text, int idx) {
-         for (int i = 1, ix = idx; i < AMP_CHARS.length; i++, ix++) {
-            if (text[ix] == AMP_CHARS[i]) {
-                continue;
-            }
-            return false;
-        }
-        return true;
-    }
-
-
-    static private void writeURIDoubleHex(Writer out,
-                                          int i) throws IOException {
-        out.write('%');
-        out.write(intToHex((i >> 4) % 0x10));
-        out.write(intToHex(i % 0x10));
-    }
-
-
-    static private char intToHex(int i) {
-        if (i < 10)
-            return ((char) ('0' + i));
-        else
-            return ((char) ('A' + (i - 10)));
-    }
-
-    static private final char[] AMP_CHARS = "&".toCharArray();
-    static private final char[] QUOT_CHARS = """.toCharArray();
-    static private final char[] GT_CHARS = ">".toCharArray();
-    static private final char[] LT_CHARS = "<".toCharArray();
-    static private final char[] EURO_CHARS = "€".toCharArray();
-    static private final char[] DEC_REF_START = "&#".toCharArray();
-    static private final int MAX_BYTES_PER_CHAR = 10;
-    static private final BitSet DONT_ENCODE_SET = new BitSet(256);
-
-
-    // See: http://www.ietf.org/rfc/rfc2396.txt
-    // We're not fully along for that ride either, but we do encode
-    // ' ' as '%20', and don't bother encoding '~' or '/'
-    static {
-        for (int i = 'a'; i <= 'z'; i++) {
-            DONT_ENCODE_SET.set(i);
-        }
-
-        for (int i = 'A'; i <= 'Z'; i++) {
-            DONT_ENCODE_SET.set(i);
-        }
-
-        for (int i = '0'; i <= '9'; i++) {
-            DONT_ENCODE_SET.set(i);
-        }
-        
-        // Don't encode '%' - we don't want to double encode anything.
-        DONT_ENCODE_SET.set('%');
-        // Ditto for '+', which is an encoded space
-        DONT_ENCODE_SET.set('+');
-
-        DONT_ENCODE_SET.set('#');
-        DONT_ENCODE_SET.set('&');
-        DONT_ENCODE_SET.set('=');
-        DONT_ENCODE_SET.set('-');
-        DONT_ENCODE_SET.set('_');
-        DONT_ENCODE_SET.set('.');
-        DONT_ENCODE_SET.set('*');
-        DONT_ENCODE_SET.set('~');
-        DONT_ENCODE_SET.set('/');
-        DONT_ENCODE_SET.set('\'');
-        DONT_ENCODE_SET.set('!');
-        DONT_ENCODE_SET.set('(');
-        DONT_ENCODE_SET.set(')');
-        DONT_ENCODE_SET.set(';');
-    }
-
-
-    //
-    // Entities from HTML 4.0, section 24.2.1; character codes 0xA0 to 0xFF
-    //
-    static private char[][] sISO8859_1_Entities = new char[][]{
-        " ".toCharArray(),
-        "¡".toCharArray(),
-        "¢".toCharArray(),
-        "£".toCharArray(),
-        "¤".toCharArray(),
-        "¥".toCharArray(),
-        "¦".toCharArray(),
-        "§".toCharArray(),
-        "¨".toCharArray(),
-        "©".toCharArray(),
-        "ª".toCharArray(),
-        "«".toCharArray(),
-        "¬".toCharArray(),
-        "­".toCharArray(),
-        "®".toCharArray(),
-        "¯".toCharArray(),
-        "°".toCharArray(),
-        "±".toCharArray(),
-        "&sup2;".toCharArray(),
-        "&sup3;".toCharArray(),
-        "´".toCharArray(),
-        "µ".toCharArray(),
-        "¶".toCharArray(),
-        "·".toCharArray(),
-        "¸".toCharArray(),
-        "&sup1;".toCharArray(),
-        "º".toCharArray(),
-        "»".toCharArray(),
-        "&frac14;".toCharArray(),
-        "&frac12;".toCharArray(),
-        "&frac34;".toCharArray(),
-        "¿".toCharArray(),
-        "À".toCharArray(),
-        "Á".toCharArray(),
-        "Â".toCharArray(),
-        "Ã".toCharArray(),
-        "Ä".toCharArray(),
-        "Å".toCharArray(),
-        "Æ".toCharArray(),
-        "Ç".toCharArray(),
-        "È".toCharArray(),
-        "É".toCharArray(),
-        "Ê".toCharArray(),
-        "Ë".toCharArray(),
-        "Ì".toCharArray(),
-        "Í".toCharArray(),
-        "Î".toCharArray(),
-        "Ï".toCharArray(),
-        "Ð".toCharArray(),
-        "Ñ".toCharArray(),
-        "Ò".toCharArray(),
-        "Ó".toCharArray(),
-        "Ô".toCharArray(),
-        "Õ".toCharArray(),
-        "Ö".toCharArray(),
-        "×".toCharArray(),
-        "Ø".toCharArray(),
-        "Ù".toCharArray(),
-        "Ú".toCharArray(),
-        "Û".toCharArray(),
-        "Ü".toCharArray(),
-        "Ý".toCharArray(),
-        "Þ".toCharArray(),
-        "ß".toCharArray(),
-        "à".toCharArray(),
-        "á".toCharArray(),
-        "â".toCharArray(),
-        "ã".toCharArray(),
-        "ä".toCharArray(),
-        "å".toCharArray(),
-        "æ".toCharArray(),
-        "ç".toCharArray(),
-        "è".toCharArray(),
-        "é".toCharArray(),
-        "ê".toCharArray(),
-        "ë".toCharArray(),
-        "ì".toCharArray(),
-        "í".toCharArray(),
-        "î".toCharArray(),
-        "ï".toCharArray(),
-        "ð".toCharArray(),
-        "ñ".toCharArray(),
-        "ò".toCharArray(),
-        "ó".toCharArray(),
-        "ô".toCharArray(),
-        "õ".toCharArray(),
-        "ö".toCharArray(),
-        "÷".toCharArray(),
-        "ø".toCharArray(),
-        "ù".toCharArray(),
-        "ú".toCharArray(),
-        "û".toCharArray(),
-        "ü".toCharArray(),
-        "ý".toCharArray(),
-        "þ".toCharArray(),
-        "ÿ".toCharArray()
-    };
-
-
-    //----------------------------------------------------------
-    // The following is used to verify encodings
-    //----------------------------------------------------------
-    //
-    static public boolean validateEncoding(String encoding) {
-        return Charset.isSupported(encoding);
-    }
-
-    //----------------------------------------------------------
-    // Check if the given encoding is the ISO-8859-1 encoding
-    //----------------------------------------------------------
-    //
-    static public boolean isISO8859_1encoding(String encoding) {
-        return "ISO-8859-1".equals(encoding);
-    }
-
-    //----------------------------------------------------------
-    // Check if the given encoding is a UTF encoding
-    //----------------------------------------------------------
-    //
-    static public boolean isUTFencoding(String encoding) {
-        return UTF_CHARSET.contains(encoding);
-    }
-
-    //----------------------------------------------------------
-    // The following is used to verify "empty" Html elements.
-    // "Empty" Html elements are those that do not require an
-    // ending tag.  For example, <br>  or <hr>...
-    //----------------------------------------------------------
-
-    static public boolean isEmptyElement(String name) {
-        char firstChar = name.charAt(0);
-        if (firstChar > _LAST_EMPTY_ELEMENT_START)
-            return false;
-
-        // Can we improve performance here?  It's certainly slower to use
-        // a HashMap, at least if we can't assume the input name is lowercased.
-        String[] array = emptyElementArr[firstChar];
-        if (array != null) {
-            for (int i = array.length - 1; i >= 0; i--) {
-                if (name.equalsIgnoreCase(array[i]))
-                    return true;
-            }
-        }
-        return false;
-    }
-
-
-    static private char _LAST_EMPTY_ELEMENT_START = 'p';
-    static private String[][] emptyElementArr =
-        new String[((int) _LAST_EMPTY_ELEMENT_START) + 1][];
-
-    static private String[] aNames = new String[]{
-        "area",
-    };
-
-    static private String[] bNames = new String[]{
-        "br",
-        "base",
-        "basefont",
-    };
-
-    static private String[] cNames = new String[]{
-        "col",
-    };
-
-    static private String[] fNames = new String[]{
-        "frame",
-    };
-
-    static private String[] hNames = new String[]{
-        "hr",
-    };
-
-    static private String[] iNames = new String[]{
-        "img",
-        "input",
-        "isindex",
-    };
-
-    static private String[] lNames = new String[]{
-        "link",
-    };
-
-    static private String[] mNames = new String[]{
-        "meta",
-    };
-
-    static private String[] pNames = new String[]{
-        "param",
-    };
-
-
-    static {
-        emptyElementArr['a'] = aNames;
-        emptyElementArr['A'] = aNames;
-        emptyElementArr['b'] = bNames;
-        emptyElementArr['B'] = bNames;
-        emptyElementArr['c'] = cNames;
-        emptyElementArr['C'] = cNames;
-        emptyElementArr['f'] = fNames;
-        emptyElementArr['F'] = fNames;
-        emptyElementArr['h'] = hNames;
-        emptyElementArr['H'] = hNames;
-        emptyElementArr['i'] = iNames;
-        emptyElementArr['I'] = iNames;
-        emptyElementArr['l'] = lNames;
-        emptyElementArr['L'] = lNames;
-        emptyElementArr['m'] = mNames;
-        emptyElementArr['M'] = mNames;
-        emptyElementArr['p'] = pNames;
-        emptyElementArr['P'] = pNames;
-    }
-    
-    
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * <p>Private implementation of ByteArrayOutputStream.</p>
-     */
-    private static class MyByteArrayOutputStream extends ByteArrayOutputStream {
-
-        
-        public MyByteArrayOutputStream(int initialCapacity) {
-            super(initialCapacity);
-        }
-        /**
-         * Obtain access to the underlying byte array to prevent 
-         * unecessary temp object creation.
-         * @return <code>buf</code>
-         */
-        public byte[] getBuf() {
-            return buf;
-        }
-        
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/LRUMap.java b/jsf-ri/src/main/java/com/sun/faces/util/LRUMap.java
deleted file mode 100644
index e6eea4a..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/LRUMap.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-
-/**
- * A special implementation of {@link java.util.LinkedHashMap} to provide
- * LRU functionality.
- */
-public class LRUMap<K,V> extends LinkedHashMap<K,V> {
-
-    private int maxCapacity;
-
-    // ------------------------------------------------------------ Constructors
-
-    public LRUMap(int maxCapacity) {
-        super(maxCapacity, 1.0f, true);
-        this.maxCapacity = maxCapacity;        
-    }
-
-    // ---------------------------------------------- Methods from LinkedHashMap
-
-    protected boolean removeEldestEntry(Map.Entry eldest) {
-        return (size() > maxCapacity);   
-    }
-    
-    // TEST: com.sun.faces.TestLRUMap_local
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/MessageUtils.java b/jsf-ri/src/main/java/com/sun/faces/util/MessageUtils.java
deleted file mode 100644
index 999cca7..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/MessageUtils.java
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import javax.faces.application.FacesMessage;
-
-import java.text.MessageFormat;
-
-/**
- * <p>This class contains all message constants and utility methods
- * for creating <code>FacesMessage</code> instances or localized 
- * <code>String</code>s for said constants.</p> 
- */
-public class MessageUtils {
-
-
-    // IMPORTANT - ensure that any new message constant is properly
-    // tested in test/com/sun/faces/util/TestUtil_messages (see comments
-    // in test class for details on the test).    
-
-    public static final String APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK_ID =
-          "com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK";
-    public static final String APPLICATION_ASSOCIATE_EXISTS_ID =
-          "com.sun.faces.APPLICATION_ASSOCIATE_EXISTS";
-    public static final String ASSERTION_FAILED_ID =
-          "com.sun.faces.ASSERTION_FAILED";
-    public static final String ATTRIBUTE_NOT_SUPORTED_ERROR_MESSAGE_ID =
-          "com.sun.faces.ATTRIBUTE_NOT_SUPORTED";
-    public static final String CANT_CLOSE_INPUT_STREAM_ID =
-          "com.sun.faces.CANT_CLOSE_INPUT_STREAM";
-    public static final String CANT_CONVERT_VALUE_ERROR_MESSAGE_ID =
-          "com.sun.faces.CANT_CONVERT_VALUE";
-    public static final String CANT_CREATE_CLASS_ERROR_ID =
-          "com.sun.faces.CANT_CREATE_CLASS_ERROR";
-    public static final String CANT_CREATE_LIFECYCLE_ERROR_MESSAGE_ID =
-          "com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR";
-    public static final String CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID =
-          "com.sun.faces.CANT_INSTANTIATE_CLASS";
-    public static final String CANT_INTROSPECT_CLASS_ERROR_MESSAGE_ID =
-          "com.sun.faces.CANT_INTROSPECT_CLASS";
-    public static final String CANT_LOAD_CLASS_ERROR_MESSAGE_ID =
-          "com.sun.faces.CANT_INSTANTIATE_CLASS";
-    public static final String CANT_PARSE_FILE_ERROR_MESSAGE_ID =
-          "com.sun.faces.CANT_PARSE_FILE";
-    public static final String CANT_WRITE_ID_ATTRIBUTE_ERROR_MESSAGE_ID =
-          "com.sun.faces.CANT_WRITE_ID_ATTRIBUTE";
-    public static final String CHILD_NOT_OF_EXPECTED_TYPE_ID =
-          "com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE";
-    public static final String COMMAND_LINK_NO_FORM_MESSAGE_ID =
-          "com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE";
-    public static final String COMPONENT_NOT_FOUND_ERROR_MESSAGE_ID =
-          "com.sun.faces.COMPONENT_NOT_FOUND_ERROR";
-    public static final String COMPONENT_NOT_FOUND_IN_VIEW_WARNING_ID =
-          "com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING";
-    public static final String CONTENT_TYPE_ERROR_MESSAGE_ID =
-          "com.sun.faces.CONTENT_TYPE_ERROR";
-    public static final String CONVERSION_ERROR_MESSAGE_ID =
-          "com.sun.faces.TYPECONVERSION_ERROR";
-    public static final String CYCLIC_REFERENCE_ERROR_ID =
-          "com.sun.faces.CYCLIC_REFERENCE_ERROR";
-    public static final String DUPLICATE_COMPONENT_ID_ERROR_ID =
-          "com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR";
-    public static final String EL_OUT_OF_BOUNDS_ERROR_ID =
-          "com.sun.faces.OUT_OF_BOUNDS_ERROR";
-    public static final String EL_PROPERTY_TYPE_ERROR_ID =
-          "com.sun.faces.PROPERTY_TYPE_ERROR";
-    public static final String EL_SIZE_OUT_OF_BOUNDS_ERROR_ID =
-          "com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR";
-    public static final String EMPTY_PARAMETER_ID =
-          "com.sun.faces.EMPTY_PARAMETER";
-    public static final String ENCODING_ERROR_MESSAGE_ID =
-          "com.sun.faces.ENCODING_ERROR";
-    public static final String ERROR_GETTING_VALUEREF_VALUE_ERROR_MESSAGE_ID =
-          "com.sun.faces.ERROR_GETTING_VALUEREF_VALUE";
-    public static final String ERROR_GETTING_VALUE_BINDING_ERROR_MESSAGE_ID =
-          "com.sun.faces.ERROR_GETTING_VALUE_BINDING";
-    public static final String ERROR_OPENING_FILE_ERROR_MESSAGE_ID =
-          "com.sun.faces.ERROR_OPENING_FILE";
-    public static final String ERROR_PROCESSING_CONFIG_ID =
-         "com.sun.faces.ERROR_PROCESSING_CONFIG";
-    public static final String ERROR_REGISTERING_DTD_ERROR_MESSAGE_ID =
-          "com.sun.faces.ERROR_REGISTERING_DTD";
-    public static final String ERROR_SETTING_BEAN_PROPERTY_ERROR_MESSAGE_ID =
-          "com.sun.faces.ERROR_SETTING_BEAN_PROPERTY";
-    public static final String EVAL_ATTR_UNEXPECTED_TYPE =
-          "com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE";
-    public static final String FACES_CONTEXT_CONSTRUCTION_ERROR_MESSAGE_ID =
-          "com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR";
-    public static final String FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED_ID =
-          "com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED";
-    public static final String FACES_SERVLET_MAPPING_INCORRECT_ID = 
-          "com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT";
-    public static final String FACES_CONTEXT_NOT_FOUND_ID=
-          "com.sun.faces.FACES_CONTEXT_NOT_FOUND";
-    public static final String FILE_NOT_FOUND_ERROR_MESSAGE_ID =
-          "com.sun.faces.FILE_NOT_FOUND";
-    public static final String ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID =
-          "com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT";    
-    public static final String ILLEGAL_CHARACTERS_ERROR_MESSAGE_ID =
-          "com.sun.faces.ILLEGAL_CHARACTERS_ERROR";
-    public static final String ILLEGAL_IDENTIFIER_LVALUE_MODE_ID =
-          "com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE";
-    public static final String ILLEGAL_MODEL_REFERENCE_ID =
-          "com.sun.faces.ILLEGAL_MODEL_REFERENCE";
-    public static final String ILLEGAL_VIEW_ID_ID =
-          "com.sun.faces.ILLEGAL_VIEW_ID";
-    public static final String INCORRECT_JSP_VERSION_ID =
-          "com.sun.faces.INCORRECT_JSP_VERSION";
-    public static final String INVALID_EXPRESSION_ID =
-          "com.sun.faces.INVALID_EXPRESSION";
-    public static final String INVALID_INIT_PARAM_ERROR_MESSAGE_ID =
-          "com.sun.faces.INVALID_INIT_PARAM";
-    public static final String INVALID_MESSAGE_SEVERITY_IN_CONFIG_ID =
-          "com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG";
-    public static final String INVALID_SCOPE_LIFESPAN_ERROR_MESSAGE_ID =
-          "com.sun.faces.INVALID_SCOPE_LIFESPAN";
-    public static final String LIFECYCLE_ID_ALREADY_ADDED_ID =
-          "com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED";
-    public static final String LIFECYCLE_ID_NOT_FOUND_ERROR_MESSAGE_ID =
-          "com.sun.faces.LIFECYCLE_ID_NOT_FOUND";
-    public static final String MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY_ID =
-          "com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY";    
-    public static final String MANAGED_BEAN_EXISTING_VALUE_NOT_LIST_ID =
-          "com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST";
-    public static final String MANAGED_BEAN_TYPE_CONVERSION_ERROR_ID =
-          "com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR";
-    public static final String MANAGED_BEAN_CLASS_NOT_FOUND_ERROR_ID =
-          "com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR";
-    public static final String MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR";
-    public static final String MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR";
-    public static final String MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR";
-    public static final String MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR";
-    public static final String MANAGED_BEAN_INJECTION_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_INJECTION_ERROR";
-    public static final String MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR";
-    public static final String MANAGED_BEAN_AS_LIST_CONFIG_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR";
-    public static final String MANAGED_BEAN_AS_MAP_CONFIG_ERROR_ID = 
-         "com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR";
-    public static final String MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR";
-    public static final String MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR";
-    public static final String MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR";
-    public static final String MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR";
-    public static final String MANAGED_BEAN_INTROSPECTION_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR";
-    public static final String MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR";
-    public static final String MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ID =
-         "com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR";
-    public static final String MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR";
-    public static final String MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR_ID = 
-         "com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR";
-    public static final String MANAGED_BEAN_LIST_GETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR";
-    public static final String MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR_ID = 
-         "com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR";
-    public static final String MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR";
-    public static final String MANAGED_BEAN_PROBLEMS_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR";
-    public static final String MANAGED_BEAN_PROBLEMS_STARTUP_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR";
-    public static final String MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR";
-    public static final String MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR_ID =
-         "com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR";
-    public static final String MANAGED_BEAN_INVALID_SCOPE_ERROR_ID =
-          "com.sun.faces.MANAGED_BEAN_INVALID_SCOPE";
-    public static final String MAXIMUM_EVENTS_REACHED_ERROR_MESSAGE_ID =
-          "com.sun.faces.MAXIMUM_EVENTS_REACHED";
-    public static final String MISSING_CLASS_ERROR_MESSAGE_ID =
-          "com.sun.faces.MISSING_CLASS_ERROR";
-    public static final String MISSING_RESOURCE_ERROR_MESSAGE_ID =
-          "com.sun.faces.MISSING_RESOURCE_ERROR";
-    public static final String MODEL_UPDATE_ERROR_MESSAGE_ID =
-          "com.sun.faces.MODELUPDATE_ERROR";
-    public static final String NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID =
-          "com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR";
-    public static final String NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID =
-          "com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR";
-    public static final String NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID =
-          "com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR";
-    public static final String NOT_NESTED_IN_UICOMPONENT_TAG_ERROR_MESSAGE_ID =
-          "com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR";
-    public static final String NO_DTD_FOUND_ERROR_ID =
-          "com.sun.faces.NO_DTD_FOUND_ERROR";
-    public static final String NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG_MESSAGE_ID =
-          "com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG";
-    public static final String NULL_BODY_CONTENT_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_BODY_CONTENT_ERROR";
-    public static final String NULL_COMPONENT_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_COMPONENT_ERROR";
-    public static final String NULL_CONFIGURATION_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_CONFIGURATION";
-    public static final String NULL_CONTEXT_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_CONTEXT_ERROR";
-    public static final String NULL_EVENT_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_EVENT_ERROR";
-    public static final String NULL_FORVALUE_ID =
-          "com.sun.faces.NULL_FORVALUE";
-    public static final String NULL_HANDLER_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_HANDLER_ERROR";
-    public static final String NULL_LOCALE_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_LOCALE_ERROR";
-    public static final String NULL_MESSAGE_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_MESSAGE_ERROR";
-    public static final String NULL_PARAMETERS_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_PARAMETERS_ERROR";
-    public static final String NULL_REQUEST_VIEW_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_REQUEST_VIEW_ERROR";
-    public static final String NULL_RESPONSE_STREAM_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_RESPONSE_STREAM_ERROR";
-    public static final String NULL_RESPONSE_VIEW_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_RESPONSE_VIEW_ERROR";
-    public static final String NULL_RESPONSE_WRITER_ERROR_MESSAGE_ID =
-          "com.sun.faces.NULL_RESPONSE_WRITER_ERROR";
-    public static final String OBJECT_CREATION_ERROR_ID =
-          "com.sun.faces.OBJECT_CREATION_ERROR";
-    public static final String OBJECT_IS_READONLY =
-          "com.sun.faces.OBJECT_IS_READONLY";
-    public static final String PHASE_ID_OUT_OF_BOUNDS_ERROR_MESSAGE_ID =
-          "com.sun.faces.PHASE_ID_OUT_OF_BOUNDS";
-    public static final String RENDERER_NOT_FOUND_ERROR_MESSAGE_ID =
-          "com.sun.faces.RENDERER_NOT_FOUND";
-    public static final String REQUEST_VIEW_ALREADY_SET_ERROR_MESSAGE_ID =
-          "com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR";
-    public static final String RESTORE_VIEW_ERROR_MESSAGE_ID =
-          "com.sun.faces.RESTORE_VIEW_ERROR";
-    public static final String SAVING_STATE_ERROR_MESSAGE_ID =
-          "com.sun.faces.SAVING_STATE_ERROR";
-    public static final String SUPPORTS_COMPONENT_ERROR_MESSAGE_ID =
-          "com.sun.faces.SUPPORTS_COMPONENT_ERROR";
-    public static final String VALIDATION_COMMAND_ERROR_ID =
-          "com.sun.faces.VALIDATION_COMMAND_ERROR";
-    public static final String VALIDATION_EL_ERROR_ID =
-          "com.sun.faces.VALIDATION_EL_ERROR";
-    public static final String VALIDATION_ID_ERROR_ID =
-          "com.sun.faces.VALIDATION_ID_ERROR";   
-    public static final String VALUE_NOT_SELECT_ITEM_ID =
-          "com.sun.faces.OPTION_NOT_SELECT_ITEM";
-    public static final String CANNOT_CONVERT_ID =
-          "com.sun.faces.CANNOT_CONVERT";
-    public static final String CANNOT_VALIDATE_ID =
-          "com.sun.faces.CANNOT_VALIDATE";
-    public static final String VERIFIER_CLASS_NOT_FOUND_ID =
-           "com.sun.faces.verifier.CLASS_NOT_FOUND";
-    public static final String VERIFIER_CLASS_MISSING_DEP_ID =
-            "com.sun.faces.verifier.CLASS_MISSING_DEP";
-    public static final String VERIFIER_CTOR_NOT_PUBLIC_ID =
-            "com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR";
-    public static final String VERIFIER_NO_DEF_CTOR_ID =
-            "com.sun.faces.verifier.NO_DEF_CTOR";
-    public static final String VERIFIER_WRONG_TYPE_ID =
-            "com.sun.faces.verifier.WRONG_TYPE";
-    public static final String RENDERER_CANNOT_BE_REGISTERED_ID =
-          "com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT";
-    public static final String COMMAND_NOT_NESTED_WITHIN_FORM_ID =
-          "com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM";
-    public static final String NAVIGATION_NO_MATCHING_OUTCOME_ID =
-          "com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME";
-    public static final String NAVIGATION_NO_MATCHING_OUTCOME_ACTION_ID =
-          "com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION";
-    public static final String NAVIGATION_INVALID_QUERY_STRING_ID =
-          "com.sun.faces.NAVIGATION_INVALID_QUERY_STRING";
-	public static final String OUTCOME_TARGET_BUTTON_NO_MATCH =
-		  "com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH";
-	public static final String OUTCOME_TARGET_LINK_NO_MATCH =
-		  "com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH";
-    public static final String NO_RESOURCE_TARGET_AVAILABLE =
-          "com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE";
-    public static final String INVALID_RESOURCE_FORMAT_COLON_ERROR =
-          "com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR";
-    public static final String INVALID_RESOURCE_FORMAT_NO_LIBRARY_NAME_ERROR =
-          "com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR";
-    public static final String INVALID_RESOURCE_FORMAT_ERROR =
-          "com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR";
-    public static final String ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR =
-          "com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR";
-    public static final String PARTIAL_STATE_ERROR_RESTORING_ID =
-          "com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT";
-   
-    
-    public static final String JS_RESOURCE_WRITING_ERROR_ID =
-        "com.sun.faces.JS_RESOURCE_WRITING_ERROR";
-    public static final String MISSING_COMPONENT_ATTRIBUTE_VALUE =
-            "com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE";
-    public static final String MISSING_COMPONENT_FACET =
-            "com.sun.faces.MISSING_COMPONENT_FACET";
-    public static final String MISSING_COMPONENT_METADATA =
-            "com.sun.faces.MISSING_COMPONENT_METADATA";
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private MessageUtils() {}
-
-
-    // ---------------------------------------------------------- Public Methods
-    
-
-    /**
-     * <p>Creates a new <code>FacesMessage</code> instance using the
-     * specified #messageId.</p>
-     * 
-     * @param messageId the message ID
-     * @param params an array of substitution parameters
-     * @return a new <code>FacesMessage</code> based on the provided
-     *  <code>messageId</code>
-     */
-    public static FacesMessage getExceptionMessage(
-          String messageId,
-          Object... params) {
-
-        return MessageFactory.getMessage(messageId, params);
-
-    }    
-
-
-    /**
-     * <p>Returns the localized message for the specified 
-     * #messageId.</p>
-     * 
-     * @param messageId the message ID
-     * @param params an array of substitution parameters
-     * @return the localized message for the specified 
-     *  <code>messageId</code>
-     */
-    public static String getExceptionMessageString(
-          String messageId,
-          Object... params) {
-
-        String result = null;
-
-        FacesMessage message = MessageFactory.getMessage(messageId, params);
-        if (null != message) {
-            result = message.getSummary();
-        }
-
-
-        if (null == result) {
-            result = "null MessageFactory";
-        } else {
-            if (params != null) {
-                result = MessageFormat.format(result, params);
-            }
-        }
-        return result;
-
-    }
-
-} // END MessageUtils
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/MojarraThreadFactory.java b/jsf-ri/src/main/java/com/sun/faces/util/MojarraThreadFactory.java
deleted file mode 100644
index 99f9f52..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/MojarraThreadFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.ThreadFactory;
-
-public class MojarraThreadFactory implements ThreadFactory {
-
-    static final AtomicInteger poolNumber = new AtomicInteger(1);
-    final ThreadGroup group;
-    final AtomicInteger threadNumber = new AtomicInteger(1);
-    final String namePrefix;
-
-
-    // -------------------------------------------------------- Constructors
-
-
-    public MojarraThreadFactory(String factoryName) {
-
-        SecurityManager s = System.getSecurityManager();
-        group = (s != null) ? s.getThreadGroup() :
-                Thread.currentThread().getThreadGroup();
-        namePrefix = "Mojarra-" + factoryName + '-' +
-                     poolNumber.getAndIncrement() +
-                     "-thread-";
-
-    }
-
-
-    // ------------------------------------------ Methods from ThreadFactory
-
-    
-    public Thread newThread(Runnable r) {
-
-        Thread t = new Thread(group,
-                              r,
-                              namePrefix + threadNumber.getAndIncrement());
-        t.setDaemon(true);
-        if (t.getPriority() != Thread.NORM_PRIORITY) {
-            t.setPriority(Thread.NORM_PRIORITY);
-        }
-        return t;
-
-    }
-
-} // END MojarraThreadFactory
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/MultiKeyConcurrentHashMap.java b/jsf-ri/src/main/java/com/sun/faces/util/MultiKeyConcurrentHashMap.java
deleted file mode 100644
index 5344944..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/MultiKeyConcurrentHashMap.java
+++ /dev/null
@@ -1,1212 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * This code is based off the source for ConcurrentHashMap from JDK 5 with the
- * ability of mapping multiple keys to a single value.
- *
- * <ul>
- *   <li>
- *     This Map implemenation does not support iteration through keys
- *     and/or values.
- *   <li>
- *   <li>
- *     This Map implementation is <em>NOT</em> Serialziable.
- *   <li>
- *   <li>
- *     This cannot be cast as a general Map implementation.
- *   </li>
- * </ul>
- */
-public class MultiKeyConcurrentHashMap<K, V> {
-
-    /*
-     * The basic strategy is to subdivide the table among Segments,
-     * each of which itself is a concurrently readable hash table.
-     */
-
-    /* ---------------- Constants -------------- */
-
-    /**
-     * The default initial number of table slots for this table. Used when not
-     * otherwise specified in constructor.
-     */
-    static int DEFAULT_INITIAL_CAPACITY = 16;
-
-    /**
-     * The maximum capacity, used if a higher value is implicitly specified by
-     * either of the constructors with arguments.  MUST be a power of two <=
-     * 1<<30 to ensure that entries are indexible using ints.
-     */
-    static final int MAXIMUM_CAPACITY = 1 << 30;
-
-    /**
-     * The default load factor for this table.  Used when not otherwise
-     * specified in constructor.
-     */
-    static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
-    /**
-     * The default number of concurrency control segments.
-     */
-    static final int DEFAULT_SEGMENTS = 16;
-
-    /**
-     * The maximum number of segments to allow; used to bound constructor
-     * arguments.
-     */
-    static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
-
-    /**
-     * Number of unsynchronized retries in size and containsValue methods before
-     * resorting to locking. This is used to avoid unbounded retries if tables
-     * undergo continuous modification which would make it impossible to obtain
-     * an accurate result.
-     */
-    static final int RETRIES_BEFORE_LOCK = 2;
-
-    /* ---------------- Fields -------------- */
-
-    /**
-     * Mask value for indexing into segments. The upper bits of a key's hash
-     * code are used to choose the segment.
-     */
-    final int segmentMask;
-
-    /**
-     * Shift value for indexing within segments.
-     */
-    final int segmentShift;
-
-    /**
-     * The segments, each of which is a specialized hash table
-     */
-    final Segment[] segments;
-
-
-    /* ---------------- Small Utilities -------------- */
-
-    /**
-     * Returns a hash code for non-null Objects. Uses the same hash code
-     * spreader as most other java.util hash tables.
-     *
-     * @return the hash code
-     */
-    static int hash(Object x1, Object x2, Object x3, Object x4) {
-        int h = 0;
-        // xor one or Object hashcodes
-        h ^= x1.hashCode();
-        if (x2 != null) {
-            h ^= x2.hashCode();
-        }
-        if (x3 != null) {
-            h ^= x3.hashCode();
-        }
-        if (x4 != null) {
-            h ^= x4.hashCode();
-        }
-        // the following is the standard hashing algorithm included
-        // in the original source
-        h += ~(h << 9);
-        h ^= (h >>> 14);
-        h += (h << 4);
-        h ^= (h >>> 10);
-        return h;
-    }
-
-
-    /**
-     * Returns the segment that should be used for key with given hash
-     *
-     * @param hash the hash code for the key
-     *
-     * @return the segment
-     */
-    final Segment<K, V> segmentFor(int hash) {
-        //noinspection unchecked
-        return (Segment<K, V>) segments[(hash >>> segmentShift) & segmentMask];
-    }
-
-    /* ---------------- Inner Classes -------------- */
-
-    /**
-     * ConcurrentHashMap list entry. Note that this is never exported out as a
-     * user-visible Map.Entry.
-     * <p/>
-     * Because the value field is volatile, not final, it is legal wrt the Java
-     * Memory Model for an unsynchronized reader to see null instead of initial
-     * value when read via a data race.  Although a reordering leading to this
-     * is not likely to ever actually occur, the Segment.readValueUnderLock
-     * method is used as a backup in case a null (pre-initialized) value is ever
-     * seen in an unsynchronized access method.
-     */
-    static final class HashEntry<K, V> {
-        final K key1;
-        final K key2;
-        final K key3;
-        final K key4;
-        final int hash;
-        volatile V value;
-        final HashEntry<K, V> next;
-
-        HashEntry(K key1,
-                  K key2,
-                  K key3,
-                  K key4,
-                  int hash,
-                  HashEntry<K, V> next,
-                  V value) {
-            this.key1 = key1;
-            this.key2 = key2;
-            this.key3 = key3;
-            this.key4 = key4;
-            this.hash = hash;
-            this.next = next;
-            this.value = value;
-        }
-    }
-
-    /**
-     * Segments are specialized versions of hash tables.  This subclasses from
-     * ReentrantLock opportunistically, just to simplify some locking and avoid
-     * separate construction.
-     */
-    @SuppressWarnings({"serial"})
-    static final class Segment<K, V> extends ReentrantLock {
-        /*
-         * Segments maintain a table of entry lists that are ALWAYS
-         * kept in a consistent state, so can be read without locking.
-         * Next fields of nodes are immutable (final).  All list
-         * additions are performed at the front of each bin. This
-         * makes it easy to check changes, and also fast to traverse.
-         * When nodes would otherwise be changed, new nodes are
-         * created to replace them. This works well for hash tables
-         * since the bin lists tend to be short. (The average length
-         * is less than two for the default load factor threshold.)
-         *
-         * Read operations can thus proceed without locking, but rely
-         * on selected uses of volatiles to ensure that completed
-         * write operations performed by other threads are
-         * noticed. For most purposes, the "count" field, tracking the
-         * number of elements, serves as that volatile variable
-         * ensuring visibility.  This is convenient because this field
-         * needs to be read in many read operations anyway:
-         *
-         *   - All (unsynchronized) read operations must first read the
-         *     "count" field, and should not look at table entries if
-         *     it is 0.
-         *
-         *   - All (synchronized) write operations should write to
-         *     the "count" field after structurally changing any bin.
-         *     The operations must not take any action that could even
-         *     momentarily cause a concurrent read operation to see
-         *     inconsistent data. This is made easier by the nature of
-         *     the read operations in Map. For example, no operation
-         *     can reveal that the table has grown but the threshold
-         *     has not yet been updated, so there are no atomicity
-         *     requirements for this with respect to reads.
-         *
-         * As a guide, all critical volatile reads and writes to the
-         * count field are marked in code comments.
-         */
-
-        /**
-         * The number of elements in this segment's region.
-         */
-        volatile int count;
-
-        /**
-         * Number of updates that alter the size of the table. This is used
-         * during bulk-read methods to make sure they see a consistent snapshot:
-         * If modCounts change during a traversal of segments computing size or
-         * checking containsValue, then we might have an inconsistent view of
-         * state so (usually) must retry.
-         */
-        int modCount;
-
-        /**
-         * The table is rehashed when its size exceeds this threshold. (The
-         * value of this field is always (int)(capacity * loadFactor).)
-         */
-        int threshold;
-
-        /**
-         * The per-segment table. Declared as a raw type, casted to
-         * HashEntry<K,V> on each use.
-         */
-        @SuppressWarnings({"NonSerializableFieldInSerializableClass"})
-        volatile HashEntry[] table;
-
-        /**
-         * The load factor for the hash table.  Even though this value is same
-         * for all segments, it is replicated to avoid needing links to outer
-         * object.
-         *
-         * @serial
-         */
-        final float loadFactor;
-
-        Segment(int initialCapacity, float lf) {
-            loadFactor = lf;
-            setTable(new HashEntry[initialCapacity]);
-        }
-
-        /**
-         * Set table to new HashEntry array. Call only while holding lock or in
-         * constructor.
-         */
-        void setTable(HashEntry[] newTable) {
-            threshold = (int) (newTable.length * loadFactor);
-            table = newTable;
-        }
-
-        /**
-         * Return properly casted first entry of bin for given hash
-         */
-        HashEntry<K, V> getFirst(int hash) {
-            HashEntry[] tab = table;
-            //noinspection unchecked
-            return (HashEntry<K, V>) tab[hash & (tab.length - 1)];
-        }
-
-        /**
-         * Read value field of an entry under lock. Called if value field ever
-         * appears to be null. This is possible only if a compiler happens to
-         * reorder a HashEntry initialization with its table assignment, which
-         * is legal under memory model but is not known to ever occur.
-         */
-        V readValueUnderLock(HashEntry<K, V> e) {
-            lock();
-            try {
-                return e.value;
-            } finally {
-                unlock();
-            }
-        }
-
-        /* Specialized implementations of map methods */
-
-        V get(Object key1, Object key2, Object key3, Object key4, int hash) {
-            if (count != 0) { // read-volatile
-                HashEntry<K, V> e = getFirst(hash);
-                while (e != null) {
-                    if ((e.hash == hash && key1.equals(e.key1))
-                        && ((key2 == null && e.key2 == null) || (key2 != null && key2.equals(e.key2)))
-                        && ((key3 == null && e.key3 == null) || (key3 != null && key3.equals(e.key3)))
-                        && ((key4 == null && e.key4 == null) || (key4 != null && key4.equals(e.key2)))) {
-                        V v = e.value;
-                        if (v != null) {
-                            return v;
-                        }
-                        return readValueUnderLock(e); // recheck
-                    }
-                    e = e.next;
-                }
-            }
-            return null;
-        }
-
-        boolean containsKey(Object key1,
-                            Object key2,
-                            Object key3,
-                            Object key4,
-                            int hash) {
-            if (count != 0) { // read-volatile
-                HashEntry<K, V> e = getFirst(hash);
-                while (e != null) {
-                    if ((e.hash == hash && key1.equals(e.key1))
-                        && ((key2 == null && e.key2 == null) || (key2 != null && key2.equals(e.key2)))
-                        && ((key3 == null && e.key3 == null) || (key3 != null && key3.equals(e.key3)))
-                        && ((key4 == null && e.key4 == null) || (key4 != null && key4.equals(e.key2)))) {
-                        return true;
-                    }
-                    e = e.next;
-                }
-            }
-            return false;
-        }
-
-        boolean containsValue(Object value) {
-            if (count != 0) { // read-volatile
-                HashEntry[] tab = table;
-                int len = tab.length;
-                for (int i = 0; i < len; i++) {
-                    for (//noinspection unchecked
-                          HashEntry<K, V> e = (HashEntry<K, V>) tab[i];
-                         e != null;
-                         e = e.next) {
-                        V v = e.value;
-                        if (v == null) // recheck
-                        {
-                            v = readValueUnderLock(e);
-                        }
-                        if (value.equals(v)) {
-                            return true;
-                        }
-                    }
-                }
-            }
-            return false;
-        }
-
-        boolean replace(K key1,
-                        K key2,
-                        K key3,
-                        K key4,
-                        int hash,
-                        V oldValue,
-                        V newValue) {
-            lock();
-            try {
-                HashEntry<K, V> e = getFirst(hash);
-                while (e != null && (e.hash != hash
-                                     || key1 != null && !key1.equals(e.key1)
-                                     || key2 != null && !key2.equals(e.key2)
-                                     || key3 != null && !key3.equals(e.key3)
-                                     || key4 != null && !key4.equals(e.key4))) {
-                    e = e.next;
-                }
-
-                boolean replaced = false;
-                if (e != null && oldValue.equals(e.value)) {
-                    replaced = true;
-                    e.value = newValue;
-                }
-                return replaced;
-            } finally {
-                unlock();
-            }
-        }
-
-        V replace(K key1, K key2, K key3, K key4, int hash, V newValue) {
-            lock();
-            try {
-                HashEntry<K, V> e = getFirst(hash);
-                while (e != null && (e.hash != hash
-                                     || key1 != null && !key1.equals(e.key1)
-                                     || key2 != null && !key2.equals(e.key2)
-                                     || key3 != null && !key3.equals(e.key3)
-                                     || key4 != null && !key4.equals(e.key4))) {
-                    e = e.next;
-                }
-
-                V oldValue = null;
-                if (e != null) {
-                    oldValue = e.value;
-                    e.value = newValue;
-                }
-                return oldValue;
-            } finally {
-                unlock();
-            }
-        }
-
-
-        V put(K key1,
-              K key2,
-              K key3,
-              K key4,
-              int hash,
-              V value,
-              boolean onlyIfAbsent) {
-            lock();
-            try {
-                int c = count;
-                if (c++ > threshold) // ensure capacity
-                {
-                    rehash();
-                }
-                HashEntry[] tab = table;
-                int index = hash & (tab.length - 1);
-                //noinspection unchecked
-                HashEntry<K, V> first = (HashEntry<K, V>) tab[index];
-                HashEntry<K, V> e = first;
-                while (e != null && (e.hash != hash
-                                     || key1 != null && !key1.equals(e.key1)
-                                     || key2 != null && !key2.equals(e.key2)
-                                     || key3 != null && !key3.equals(e.key3)
-                                     || key4 != null && !key4.equals(e.key4))) {
-                    e = e.next;
-                }
-
-                V oldValue;
-                if (e != null) {
-                    oldValue = e.value;
-                    if (!onlyIfAbsent) {
-                        e.value = value;
-                    }
-                } else {
-                    oldValue = null;
-                    ++modCount;
-                    tab[index] =
-                          new HashEntry<K, V>(key1, key2, key3, key4, hash, first, value);
-                    count = c; // write-volatile
-                }
-                return oldValue;
-            } finally {
-                unlock();
-            }
-        }
-
-        void rehash() {
-            HashEntry[] oldTable = table;
-            int oldCapacity = oldTable.length;
-            if (oldCapacity >= MAXIMUM_CAPACITY) {
-                return;
-            }
-
-            /*
-             * Reclassify nodes in each list to new Map.  Because we are
-             * using power-of-two expansion, the elements from each bin
-             * must either stay at same index, or move with a power of two
-             * offset. We eliminate unnecessary node creation by catching
-             * cases where old nodes can be reused because their next
-             * fields won't change. Statistically, at the default
-             * threshold, only about one-sixth of them need cloning when
-             * a table doubles. The nodes they replace will be garbage
-             * collectable as soon as they are no longer referenced by any
-             * reader thread that may be in the midst of traversing table
-             * right now.
-             */
-
-            HashEntry[] newTable = new HashEntry[oldCapacity << 1];
-            threshold = (int) (newTable.length * loadFactor);
-            int sizeMask = newTable.length - 1;
-            for (int i = 0; i < oldCapacity; i++) {
-                // We need to guarantee that any existing reads of old Map can
-                //  proceed. So we cannot yet null out each bin.
-                //noinspection unchecked
-                HashEntry<K, V> e = (HashEntry<K, V>) oldTable[i];
-
-                if (e != null) {
-                    HashEntry<K, V> next = e.next;
-                    int idx = e.hash & sizeMask;
-
-                    //  Single node on list
-                    if (next == null) {
-                        newTable[idx] = e;
-                    } else {
-                        // Reuse trailing consecutive sequence at same slot
-                        HashEntry<K, V> lastRun = e;
-                        int lastIdx = idx;
-                        for (HashEntry<K, V> last = next;
-                             last != null;
-                             last = last.next) {
-                            int k = last.hash & sizeMask;
-                            if (k != lastIdx) {
-                                lastIdx = k;
-                                lastRun = last;
-                            }
-                        }
-                        newTable[lastIdx] = lastRun;
-
-                        // Clone all remaining nodes
-                        for (HashEntry<K, V> p = e; p != lastRun; p = p.next) {
-                            int k = p.hash & sizeMask;
-                            //noinspection unchecked
-                            HashEntry<K, V> n = (HashEntry<K, V>) newTable[k];
-                            newTable[k] = new HashEntry<K, V>(p.key1,
-                                                              p.key2,
-                                                              p.key3,
-                                                              p.key4,
-                                                              p.hash,
-                                                              n,
-                                                              p.value);
-                        }
-                    }
-                }
-            }
-            table = newTable;
-        }
-
-        /**
-         * Remove; match on key only if value null, else match both.
-         */
-        V remove(Object key1,
-                 Object key2,
-                 Object key3,
-                 Object key4,
-                 int hash,
-                 Object value) {
-            lock();
-            try {
-                int c = count - 1;
-                HashEntry[] tab = table;
-                int index = hash & (tab.length - 1);
-                //noinspection unchecked
-                HashEntry<K, V> first = (HashEntry<K, V>) tab[index];
-                HashEntry<K, V> e = first;
-                while (e != null && (e.hash != hash
-                                     || key1 != null && !key1.equals(e.key1)
-                                     || key2 != null && !key2.equals(e.key2)
-                                     || key3 != null && !key3.equals(e.key3)
-                                     || key4 != null && !key4.equals(e.key4))) {
-                    e = e.next;
-                }
-
-                V oldValue = null;
-                if (e != null) {
-                    V v = e.value;
-                    if (value == null || value.equals(v)) {
-                        oldValue = v;
-                        // All entries following removed node can stay
-                        // in list, but all preceding ones need to be
-                        // cloned.
-                        ++modCount;
-                        HashEntry<K, V> newFirst = e.next;
-                        for (HashEntry<K, V> p = first; p != e; p = p.next) {
-                            newFirst = new HashEntry<K, V>(p.key1,
-                                                           p.key2,
-                                                           p.key3,
-                                                           p.key4,
-                                                           p.hash,
-                                                           newFirst,
-                                                           p.value);
-                        }
-                        tab[index] = newFirst;
-                        count = c; // write-volatile
-                    }
-                }
-                return oldValue;
-            } finally {
-                unlock();
-            }
-        }
-
-        void clear() {
-            if (count != 0) {
-                lock();
-                try {
-                    HashEntry[] tab = table;
-                    for (int i = 0; i < tab.length; i++) {
-                        tab[i] = null;
-                    }
-                    ++modCount;
-                    count = 0; // write-volatile
-                } finally {
-                    unlock();
-                }
-            }
-        }
-    }
-
-    /* ---------------- Public operations -------------- */
-
-    /**
-     * Creates a new, empty map with the specified initial capacity, load
-     * factor, and concurrency level.
-     *
-     * @param initialCapacity  the initial capacity. The implementation performs
-     *                         internal sizing to accommodate this many
-     *                         elements.
-     * @param loadFactor       the load factor threshold, used to control
-     *                         resizing. Resizing may be performed when the
-     *                         average number of elements per bin exceeds this
-     *                         threshold.
-     * @param concurrencyLevel the estimated number of concurrently updating
-     *                         threads. The implementation performs internal
-     *                         sizing to try to accommodate this many threads.
-     *
-     * @throws IllegalArgumentException if the initial capacity is negative or
-     *                                  the load factor or concurrencyLevel are
-     *                                  nonpositive.
-     */
-    public MultiKeyConcurrentHashMap(int initialCapacity,
-                                     float loadFactor,
-                                     int concurrencyLevel) {
-        if (!(loadFactor > 0) || initialCapacity < 0 || concurrencyLevel <= 0) {
-            throw new IllegalArgumentException();
-        }
-
-        if (concurrencyLevel > MAX_SEGMENTS) {
-            concurrencyLevel = MAX_SEGMENTS;
-        }
-
-        // Find power-of-two sizes best matching arguments
-        int sshift = 0;
-        int ssize = 1;
-        while (ssize < concurrencyLevel) {
-            ++sshift;
-            ssize <<= 1;
-        }
-        segmentShift = 32 - sshift;
-        segmentMask = ssize - 1;
-        this.segments = new Segment[ssize];
-
-        if (initialCapacity > MAXIMUM_CAPACITY) {
-            initialCapacity = MAXIMUM_CAPACITY;
-        }
-        int c = initialCapacity / ssize;
-        if (c * ssize < initialCapacity) {
-            ++c;
-        }
-        int cap = 1;
-        while (cap < c) {
-            cap <<= 1;
-        }
-
-        for (int i = 0; i < this.segments.length; ++i) {
-            this.segments[i] = new Segment<K, V>(cap, loadFactor);
-        }
-    }
-
-    /**
-     * Creates a new, empty map with the specified initial capacity, and with
-     * default load factor and concurrencyLevel.
-     *
-     * @param initialCapacity the initial capacity. The implementation performs
-     *                        internal sizing to accommodate this many
-     *                        elements.
-     *
-     * @throws IllegalArgumentException if the initial capacity of elements is
-     *                                  negative.
-     */
-    public MultiKeyConcurrentHashMap(int initialCapacity) {
-        this(initialCapacity, DEFAULT_LOAD_FACTOR, DEFAULT_SEGMENTS);
-    }
-
-    /**
-     * Creates a new, empty map with a default initial capacity, load factor,
-     * and concurrencyLevel.
-     */
-    public MultiKeyConcurrentHashMap() {
-        this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_SEGMENTS);
-    }
-
-    
-
-    /**
-     * @see java.util.Map#isEmpty()
-     */
-    public boolean isEmpty() {
-        final Segment[] segments = this.segments;
-        /*
-         * We keep track of per-segment modCounts to avoid ABA
-         * problems in which an element in one segment was added and
-         * in another removed during traversal, in which case the
-         * table was never actually empty at any point. Note the
-         * similar use of modCounts in the size() and containsValue()
-         * methods, which are the only other methods also susceptible
-         * to ABA problems.
-         */
-        int[] mc = new int[segments.length];
-        int mcsum = 0;
-        for (int i = 0; i < segments.length; ++i) {
-            if (segments[i].count != 0) {
-                return false;
-            } else {
-                mcsum += mc[i] = segments[i].modCount;
-            }
-        }
-        // If mcsum happens to be zero, then we know we got a snapshot
-        // before any modifications at all were made.  This is
-        // probably common enough to bother tracking.
-        if (mcsum != 0) {
-            for (int i = 0; i < segments.length; ++i) {
-                if (segments[i].count != 0 ||
-                    mc[i] != segments[i].modCount) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * @see java.util.Map#size()
-     */
-    public int size() {
-        final Segment[] segments = this.segments;
-        long sum = 0;
-        long check = 0;
-        int[] mc = new int[segments.length];
-        // Try a few times to get accurate count. On failure due to
-        // continuous async changes in table, resort to locking.
-        for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
-            check = 0;
-            sum = 0;
-            int mcsum = 0;
-            for (int i = 0; i < segments.length; ++i) {
-                sum += segments[i].count;
-                mcsum += mc[i] = segments[i].modCount;
-            }
-            if (mcsum != 0) {
-                for (int i = 0; i < segments.length; ++i) {
-                    check += segments[i].count;
-                    if (mc[i] != segments[i].modCount) {
-                        check = -1; // force retry
-                        break;
-                    }
-                }
-            }
-            if (check == sum) {
-                break;
-            }
-        }
-        if (check != sum) { // Resort to locking all segments
-            sum = 0;
-            for (int i = 0; i < segments.length; ++i) {
-                segments[i].lock();
-            }
-            for (int i = 0; i < segments.length; ++i) {
-                sum += segments[i].count;
-            }
-            for (int i = 0; i < segments.length; ++i) {
-                segments[i].unlock();
-            }
-        }
-        if (sum > Integer.MAX_VALUE) {
-            return Integer.MAX_VALUE;
-        } else {
-            return (int) sum;
-        }
-    }
-
-
-    /**
-     * Returns the value to which the specified key is mapped in this table.
-     *
-     * @param key a key in the table.
-     *
-     * @return the value to which the key is mapped in this table; <tt>null</tt>
-     *         if the key is not mapped to any value in this table.
-     *
-     * @throws NullPointerException if the key is <tt>null</tt>.
-     */
-    public V get(Object key) {
-        int hash = hash(key, null, null, null);
-        return segmentFor(hash).get(key, null, null, null, hash);
-    }
-
-    /**
-     * @see #get(Object)
-     */
-    public V get(Object key1, Object key2) {
-        int hash = hash(key1, key2, null, null);
-        return segmentFor(hash).get(key1, key2, null, null, hash);
-    }
-
-    /**
-     * @see #get(Object)
-     */
-    public V get(Object key1, Object key2, Object key3) {
-        int hash = hash(key1, key2, key3, null);
-        return segmentFor(hash).get(key1, key2, key3, null, hash);
-    }
-
-    /**
-     * @see #get(Object)
-     */
-    public V get(Object key1, Object key2, Object key3, Object key4) {
-        int hash = hash(key1, key2, key3, key4);
-        return segmentFor(hash).get(key1, key2, key3, key4, hash);
-    }
-
-    /**
-     * Tests if the specified object is a key in this table.
-     *
-     * @param key possible key.
-     *
-     * @return <tt>true</tt> if and only if the specified object is a key in
-     *         this table, as determined by the <tt>equals</tt> method;
-     *         <tt>false</tt> otherwise.
-     *
-     * @throws NullPointerException if the key is <tt>null</tt>.
-     */
-    public boolean containsKey(Object key) {
-        int hash = hash(key, null, null, null);
-        return segmentFor(hash).containsKey(key, null, null, null, hash);
-    }
-
-    /**
-     * @see #containsKey(Object)
-     */
-    public boolean containsKey(Object key1, Object key2) {
-        int hash = hash(key1, key2, null, null);
-        return segmentFor(hash).containsKey(key1, key2, null, null, hash);
-    }
-
-    /**
-     * @see #containsKey(Object)
-     */
-    public boolean containsKey(Object key1, Object key2, Object key3) {
-        int hash = hash(key1, key2, key3, null);
-        return segmentFor(hash).containsKey(key1, key2, key3, null, hash);
-    }
-
-    /**
-     * @see #containsKey(Object)
-     */
-    public boolean containsKey(Object key1,
-                               Object key2,
-                               Object key3,
-                               Object key4) {
-        int hash = hash(key1, key2, key3, key4);
-        return segmentFor(hash).containsKey(key1, key2, key3, key4, hash);
-    }
-
-    /**
-     * Returns <tt>true</tt> if this map maps one or more keys to the specified
-     * value. Note: This method requires a full internal traversal of the hash
-     * table, and so is much slower than method <tt>containsKey</tt>.
-     *
-     * @param value value whose presence in this map is to be tested.
-     *
-     * @return <tt>true</tt> if this map maps one or more keys to the specified
-     *         value.
-     *
-     * @throws NullPointerException if the value is <tt>null</tt>.
-     */
-    public boolean containsValue(Object value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-
-        // See explanation of modCount use above
-
-        final Segment[] segments = this.segments;
-        int[] mc = new int[segments.length];
-
-        // Try a few times without locking
-        for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
-            int mcsum = 0;
-            for (int i = 0; i < segments.length; ++i) {
-                mcsum += mc[i] = segments[i].modCount;
-                if (segments[i].containsValue(value)) {
-                    return true;
-                }
-            }
-            boolean cleanSweep = true;
-            if (mcsum != 0) {
-                for (int i = 0; i < segments.length; ++i) {
-                    if (mc[i] != segments[i].modCount) {
-                        cleanSweep = false;
-                        break;
-                    }
-                }
-            }
-            if (cleanSweep) {
-                return false;
-            }
-        }
-        // Resort to locking all segments
-        for (int i = 0; i < segments.length; ++i) {
-            segments[i].lock();
-        }
-        boolean found = false;
-        try {
-            for (int i = 0; i < segments.length; ++i) {
-                if (segments[i].containsValue(value)) {
-                    found = true;
-                    break;
-                }
-            }
-        } finally {
-            for (int i = 0; i < segments.length; ++i) {
-                segments[i].unlock();
-            }
-        }
-        return found;
-    }
-
-    /**
-     * Legacy method testing if some key maps into the specified value in this
-     * table.  This method is identical in functionality to {@link
-     * #containsValue}, and  exists solely to ensure full compatibility with
-     * class {@link java.util.Hashtable}, which supported this method prior to
-     * introduction of the Java Collections framework.
-     *
-     * @param value a value to search for.
-     *
-     * @return <tt>true</tt> if and only if some key maps to the <tt>value</tt>
-     *         argument in this table as determined by the <tt>equals</tt>
-     *         method; <tt>false</tt> otherwise.
-     *
-     * @throws NullPointerException if the value is <tt>null</tt>.
-     */
-    public boolean contains(Object value) {
-        return containsValue(value);
-    }
-
-    /**
-     * Maps the specified <tt>key</tt> to the specified <tt>value</tt> in this
-     * table. Neither the key nor the value can be <tt>null</tt>.
-     * <p/>
-     * <p> The value can be retrieved by calling the <tt>get</tt> method with a
-     * key that is equal to the original key.
-     *
-     * @param key   the table key.
-     * @param value the value.
-     *
-     * @return the previous value of the specified key in this table, or
-     *         <tt>null</tt> if it did not have one.
-     *
-     * @throws NullPointerException if the key or value is <tt>null</tt>.
-     */
-    public V put(K key, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key, null, null, null);
-        return segmentFor(hash).put(key, null, null, null, hash, value, false);
-    }
-
-    /**
-     * @see #put(Object, Object)
-     */
-    public V put(K key1, K key2, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key1, key2, null, null);
-        return segmentFor(hash).put(key1, key2, null, null, hash, value, false);
-    }
-
-    /**
-     * @see #put(Object, Object)
-     */
-    public V put(K key1, K key2, K key3, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key1, key2, key3, null);
-        return segmentFor(hash).put(key1, key2, key3, null, hash, value, false);
-    }
-
-    /**
-     * @see #put(Object, Object)
-     */
-    public V put(K key1, K key2, K key3, K key4, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key1, key2, key3, key4);
-        return segmentFor(hash).put(key1, key2, key3, key4, hash, value, false);
-    }
-
-
-    /**
-     * If the specified key is not already associated with a value, associate it
-     * with the given value. This is equivalent to
-     * <pre>
-     *   if (!map.containsKey(key))
-     *      return map.put(key, value);
-     *   else
-     *      return map.get(key);
-     * </pre>
-     * Except that the action is performed atomically.
-     *
-     * @param key   key with which the specified value is to be associated.
-     * @param value value to be associated with the specified key.
-     *
-     * @return previous value associated with specified key, or <tt>null</tt> if
-     *         there was no mapping for key.
-     *
-     * @throws NullPointerException if the specified key or value is
-     *                              <tt>null</tt>.
-     */
-    public V putIfAbsent(K key, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key, null, null, null);
-        return segmentFor(hash).put(key, null, null, null, hash, value, true);
-    }
-
-    /**
-     * @see #putIfAbsent(Object, Object)
-     */
-    public V putIfAbsent(K key1, K key2, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key1, key2, null, null);
-        return segmentFor(hash).put(key1, key2, null, null, hash, value, true);
-    }
-
-    /**
-     * @see #putIfAbsent(Object, Object)
-     */
-    public V putIfAbsent(K key1, K key2, K key3, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key1, key2, key3, null);
-        return segmentFor(hash).put(key1, key2, key3, null, hash, value, true);
-    }
-
-    /**
-     * @see #putIfAbsent(Object, Object)
-     */
-    public V putIfAbsent(K key1, K key2, K key3, K key4, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key1, key2, key3, key4);
-        return segmentFor(hash).put(key1, key2, key3, key4, hash, value, true);
-    }
-
-
-    /**
-     * @see Map#remove(Object)
-     */
-    public V remove(K key) {
-        int hash = hash(key, null, null, null);
-        return segmentFor(hash).remove(key, null, null, null, hash, null);
-    }
-
-    /**
-     * @see Map#remove(Object)
-     */
-    public V remove(K key1, K key2) {
-        int hash = hash(key1, key2, null, null);
-        return segmentFor(hash).remove(key1, key2, null, null, hash, null);
-    }
-
-    /**
-     * @see Map#remove(Object)
-     */
-    public V remove(K key1, K key2, K key3) {
-        int hash = hash(key1, key2, key3, null);
-        return segmentFor(hash).remove(key1, key2, null, null, hash, null);
-    }
-
-    /**
-     * @see Map#remove(Object)
-     */
-    public V remove(K key1, K key2, K key3, K key4) {
-        // we don't have multiple versions of remove here because
-        // erasure would cause a collision with boolean remove(Object, Object)
-        int hash = hash(key1, key2, key3, key4);
-        return segmentFor(hash).remove(key1, key2, key3, key4, hash, null);
-    }
-
-
-    /**
-     * Replace entry for key only if currently mapped to given value. Acts as
-     * <pre>
-     *  if (map.get(key).equals(oldValue)) {
-     *     map.put(key, newValue);
-     *     return true;
-     * } else return false;
-     * </pre>
-     * except that the action is performed atomically.
-     *
-     * @param key      key with which the specified value is associated.
-     * @param oldValue value expected to be associated with the specified key.
-     * @param newValue value to be associated with the specified key.
-     *
-     * @return true if the value was replaced
-     *
-     * @throws NullPointerException if the specified key or values are
-     *                              <tt>null</tt>.
-     */
-    public boolean replace(K key, V oldValue, V newValue) {
-        if (oldValue == null || newValue == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key, null, null, null);
-        return segmentFor(hash)
-              .replace(key, null, null, null, hash, oldValue, newValue);
-    }
-
-    /**
-     * Replace entry for key only if currently mapped to some value. Acts as
-     * <pre>
-     *  if ((map.containsKey(key)) {
-     *     return map.put(key, value);
-     * } else return null;
-     * </pre>
-     * except that the action is performed atomically.
-     *
-     * @param key   key with which the specified value is associated.
-     * @param value value to be associated with the specified key.
-     *
-     * @return previous value associated with specified key, or <tt>null</tt> if
-     *         there was no mapping for key.
-     *
-     * @throws NullPointerException if the specified key or value is
-     *                              <tt>null</tt>.
-     */
-    public V replace(K key, V value) {
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        int hash = hash(key, null, null, null);
-        return segmentFor(hash).replace(key, null, null, null, hash, value);
-    }
-
-
-    /**
-     * Removes all mappings from this map.
-     */
-    public void clear() {
-        for (int i = 0; i < segments.length; ++i) {
-            segments[i].clear();
-        }
-    }
-
-    /**
-     * Unsupported
-     */
-    public Set<K> keySet() {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Unsupported.
-     */
-    public Collection<V> values() {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Unsupported.
-     */
-    public Set<Map.Entry<K, V>> entrySet() {
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/ReflectionUtils.java b/jsf-ri/src/main/java/com/sun/faces/util/ReflectionUtils.java
deleted file mode 100644
index ac34786..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/ReflectionUtils.java
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.beans.PropertyDescriptor;
-import java.beans.Introspector;
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-
-/**
- * <p>A set of utility methods to make working with
- * Classes and Reflection a little easier.</p>
- */
-public final class ReflectionUtils {
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    /**
-     * <p>Cache</p>
-     */
-    private static final Map<ClassLoader, ConcurrentMap<String, MetaData>> REFLECTION_CACHE =
-          new WeakHashMap<ClassLoader,ConcurrentMap<String, MetaData>>();
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private ReflectionUtils() { }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Clears the cache for the specified <code>ClassLoader</code>.</p>
-     * <p>This method <em>MUST</em> be called when <code>ConfigureListener
-     * .contextDestroyed()</code> is called.</p>
-     * @param loader the <code>ClassLoader</code> whose associated cache
-     *  should be cleared
-     */
-    public static synchronized void clearCache(ClassLoader loader) {
-
-            REFLECTION_CACHE.remove(loader);
-
-    }
-
-
-    public static synchronized void initCache(ClassLoader loader) {
-
-        if (REFLECTION_CACHE.get(loader) == null) {
-            REFLECTION_CACHE.put(loader,
-                                 new ConcurrentHashMap<String,MetaData>());
-        }
-
-    }
-
-
-    /**
-     * <p>Returns the <code>Constructor</code> appropriate to the specified
-     * Class and parameters.</p>
-     * @param clazz the Class of interest
-     * @param params the parameters for the constructor of the provided Class
-     * @return a Constructor that can be invoked with the specified parameters
-     */
-    public static Constructor lookupConstructor(
-          Class<?> clazz,
-          Class<?>... params) {
-
-        ClassLoader loader = Util.getCurrentLoader(clazz);
-        if (loader == null) {
-            return null;
-        }
-        
-        return getMetaData(loader, clazz).lookupConstructor(params);
-        
-    }
-    
-    /**
-     * <p>Returns the <code>Method</code> appropriate to the specified
-     * Class, method name, and parameters.</p>
-     * @param clazz the Class of interest
-     * @param methodName the name of the method
-     * @param params the parameters for the specified method
-     * @return a Method that can be invoked with the specified parameters
-     */
-    public static Method lookupMethod(
-          Class<?> clazz,
-          String methodName,
-          Class<?>... params) {
-
-        ClassLoader loader = Util.getCurrentLoader(clazz);
-        if (loader == null) {
-            return null;
-        }        
-        
-        return getMetaData(loader, clazz).lookupMethod(methodName, params);
-        
-    }
-
-
-    /**
-     * <p>Constructs a new object instance based off the
-     * provided class name.</p>
-     * @param className the class of the object to instantiate
-     * @return a new instances of said class
-     * @throws InstantiationException if the class cannot be instantiated
-     * @throws IllegalAccessException if there is a security violation
-     */
-    public static Object newInstance(String className)
-    throws InstantiationException, IllegalAccessException {
-
-        ClassLoader loader = Util.getCurrentLoader(null);
-        if (loader == null) {
-            return null;
-        }
-
-        return getMetaData(loader, className).lookupClass().newInstance();
-        
-    }
-
-
-    /**
-     * <p>Obtain a <code>Class</code> instance based on the provided
-     * String name.</p>
-     * @param className the class to look up
-     * @return the <code>Class</code> corresponding to <code>className</code>
-     */
-    public static Class<?> lookupClass(String className) {
-
-        ClassLoader loader = Util.getCurrentLoader(null);
-        if (loader == null) {
-            return null;
-        }
-
-        return getMetaData(loader, className).lookupClass();
-        
-    }
-
-
-    /**
-     * @param className the fully qualified class name
-     * @param propertyName a JavaBeans property name
-     * @return a method suitable for setting a JavaBeans property, or
-     *  <code>null</code> if the property doesn't exist or is readonly.
-     */
-    public static Method lookupWriteMethod(String className, String propertyName) {
-
-        ClassLoader loader = Util.getCurrentLoader(null);
-        if (loader == null) {
-            return null;
-        }
-
-        return getMetaData(loader, className).lookupWriteMethod(propertyName);
-
-    }
-
-
-    /**
-     * @param className the fully qualified class name
-     * @param propertyName a JavaBeans property name
-     * @return a method suitable for obtaining the value of a JavaBeans property,
-     *  or <code>null</code> if the property doesn't exist or can't be read.
-     */
-    public static Method lookupReadMethod(String className, String propertyName) {
-
-
-        ClassLoader loader = Util.getCurrentLoader(null);
-        if (loader == null) {
-            return null;
-        }
-
-        return getMetaData(loader, className).lookupReadMethod(propertyName);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Return the <code>MetaData</code> for the specified Class.</p>
-     * 
-     * <p>This will check the cache associated with the specified
-     * <code>ClassLoader</code>.  If there is no cache hit, then a new
-     * <code>MetaData</code> instance will be created and stored.
-     * 
-     * @param loader <code>ClassLoader</code>
-     * @param clazz the Class of interest
-     * @return a <code>MetaData</code> object for the specified Class
-     */
-    private static MetaData getMetaData(ClassLoader loader, Class<?> clazz) {
-
-        ConcurrentMap<String, MetaData> cache = REFLECTION_CACHE.get(loader);
-
-        if (cache == null) {
-            initCache(loader);
-            cache = REFLECTION_CACHE.get(loader);
-        }
-
-        MetaData meta = cache.get(clazz.getName());
-        if (meta == null) {
-            meta = new MetaData(clazz);
-            cache.put(clazz.getName(), meta);
-        }
-       
-        return meta;
-
-    }
-
-
-    /**
-     * <p>Return the <code>MetaData</code> for the specified className.</p>
-     *
-     * <p>This will check the cache associated with the specified
-     * <code>ClassLoader</code>.  If there is no cache hit, then a new
-     * <code>MetaData</code> instance will be created and stored.
-     *
-     * @param loader <code>ClassLoader</code>
-     * @param className the class of interest
-     * @return a <code>MetaData</code> object for the specified Class
-     */
-    private static MetaData getMetaData(ClassLoader loader, String className) {
-
-        ConcurrentMap<String, MetaData> cache = REFLECTION_CACHE.get(loader);
-
-        if (cache == null) {
-            initCache(loader);
-            cache = REFLECTION_CACHE.get(loader);
-        }
-
-        MetaData meta = cache.get(className);
-        if (meta == null) {
-            try {
-                Class<?> clazz = Util.loadClass(className, cache);
-                meta = new MetaData(clazz);
-                cache.put(className, meta);
-            } catch (ClassNotFoundException cnfe) {
-                return null;
-            }
-        }
-
-        return meta;
-    }
-
-
-    /**
-     * <p>MetaData contains lookup methods for <code>Constructor</code>s and
-     * <code>Method</code>s of a particular Class.
-     */
-    private static final class MetaData {
-
-
-        Map<Integer,Constructor> constructors;
-        Map<String,HashMap<Integer,Method>> methods;
-        Map<String,HashMap<Integer,Method>> declaredMethods;
-        Map<String, PropertyDescriptor> propertyDescriptors;
-        Class<?> clazz;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-        /**
-         * <p>Constructs a new <code>MetaData</code> instance for the specified
-         * class.</p>
-         * @param clazz class to construct a new MetaData instance from.
-         */
-        public MetaData(Class<?> clazz) {
-
-            String name;
-            this.clazz = clazz;
-            Constructor[] ctors = clazz.getConstructors();
-            constructors = new HashMap<Integer,Constructor>(ctors.length, 1.0f);
-            for (int i = 0, len = ctors.length; i < len; i++) {
-                constructors.put(getKey(ctors[i].getParameterTypes()),
-                                 ctors[i]);
-            }
-            Method[] meths = clazz.getMethods();
-            methods = new HashMap<String,HashMap<Integer,Method>>(meths.length, 1.0f);
-            for (int i = 0, len = meths.length; i < len; i++) {
-                name = meths[i].getName();
-                HashMap<Integer,Method> methodsMap = methods.get(name);
-                if (methodsMap == null) {
-                    methodsMap = new HashMap<Integer,Method>(4, 1.0f);
-                    methods.put(name, methodsMap);
-                }
-                methodsMap.put(getKey(meths[i].getParameterTypes()), meths[i]);
-            }
-            
-            meths = clazz.getDeclaredMethods();
-            declaredMethods = new HashMap<String,HashMap<Integer,Method>>(meths.length, 1.0f);
-            for (int i = 0, len = meths.length; i < len; i++) {
-                name = meths[i].getName();
-                HashMap<Integer,Method> declaredMethodsMap = declaredMethods.get(name);
-                if (declaredMethodsMap == null) {
-                    declaredMethodsMap = new HashMap<Integer,Method>(4, 1.0f);
-                    declaredMethods.put(name, declaredMethodsMap);
-                }
-                declaredMethodsMap.put(getKey(meths[i].getParameterTypes()), meths[i]);
-            }
-
-            try {
-                BeanInfo info = Introspector.getBeanInfo(clazz);
-                PropertyDescriptor[] pds = info.getPropertyDescriptors();
-                if (pds != null) {
-                    if (propertyDescriptors == null) {
-                        propertyDescriptors = new HashMap<String,PropertyDescriptor>(pds.length, 1.0f);
-                    }
-                    for (PropertyDescriptor pd : pds) {
-                        propertyDescriptors.put(pd.getName(), pd);
-                    }
-                }
-            } catch (IntrospectionException ie) {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               ie.toString(),
-                               ie);
-                }
-            }
-
-        }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-        /**
-         * <p>Looks up a <code>Constructor</code> based off the specified
-         * <code>params</code>.</p>
-         * @param params constructor parameters
-         * @return the <code>Constructor</code> appropriate to the specified 
-         *  parameters or <code>null</code>
-         */
-        public Constructor lookupConstructor(Class<?>... params) {
-
-            return constructors.get(getKey(params));
-
-        }
-
-
-        /**
-         * <p>Looks up a <code>Method</code> based off the specified method
-         * name and <code>params</code>.</p>
-         * @param name the name of the <cod>Method</code>
-         * @param params the <code>Method</code> parameters
-         * @return the <code>Method</code> appropriate to the specified 
-         *  name and parameters or <code>null</code>
-         */
-        public Method lookupMethod(String name, Class<?>... params) {
-
-            Map<Integer,Method> map = methods.get(name);
-            Integer key = getKey(params);
-            Method result = null;
-            if ((null == map) || null == (result = map.get(key))) {
-                map = declaredMethods.get(name);
-                if (null != map) {
-                    result = map.get(key);
-                }
-            }
-            return result;
-
-        }
-
-
-        /**
-         * <p>Looks up the class for this MetaData instance.</p>
-         * @return the <code>Class</code> for this MetaData instance
-         */
-        public Class<?> lookupClass() {
-
-            return clazz;
-
-        }
-
-
-        /**
-         * @param propName a JavaBeans property name
-         * @return a method suitable for setting a JavaBeans property, or
-         *  <code>null</code> if the property doesn't exist or is readonly.
-         */
-        public Method lookupWriteMethod(String propName) {
-
-            if (propertyDescriptors == null) {
-                return null;
-            }
-
-            PropertyDescriptor pd = propertyDescriptors.get(propName);
-            if (pd != null) {
-                return pd.getWriteMethod();
-            }
-            return null;
-
-        }
-
-
-        /**
-         * @param propName a JavaBeans property name
-         * @return a method suitable for obtaining the value of a JavaBeans property,
-         *  or <code>null</code> if the property doesn't exist or can't be read.
-         */
-        public Method lookupReadMethod(String propName) {
-
-            if (propertyDescriptors == null) {
-                return null;
-            }
-
-            PropertyDescriptor pd = propertyDescriptors.get(propName);
-            if (pd != null) {
-                return pd.getReadMethod();
-            }
-            return null;
-
-        }
-
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-        /**
-         * Return a hashcode of all the class parameters.
-         * @param params the parameters to a <code>Constructor</code> or
-         *  a <code>Method</code> instance
-         * @return the result of <code>Arrays.deepHashCode</code>
-         */
-        private static Integer getKey(Class<?>... params) {
-
-            return Arrays.deepHashCode(params);
-
-        }
-
-    }
-
-    
-} // END ReflectionUtils
\ No newline at end of file
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/RequestStateManager.java b/jsf-ri/src/main/java/com/sun/faces/util/RequestStateManager.java
deleted file mode 100644
index 7ae759b..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/RequestStateManager.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-import com.sun.faces.RIConstants;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * <p>
- * This helper class is used a central location for per-request state
- * that is needed by Mojarra.  This class leverages FacesContext.getAttributes()
- * which as added in 2.0 instead of the request scope to prevent the unecessary
- * triggering of ServletREquestAttributeListeners.
- * </p>
- */
-public class RequestStateManager {
-
-    /**
-     * Attribute for storing any content within a page that is defined
-     * after the closing f:view.
-     */
-    public static final String AFTER_VIEW_CONTENT =
-          RIConstants.FACES_PREFIX + "AFTER_VIEW_CONTENT";
-
-    /**
-     * Attribute describing the current ELResolver chain type (either JSP
-     * or Faces)
-     */
-    public static final String EL_RESOLVER_CHAIN_TYPE_NAME =
-          RIConstants.FACES_PREFIX + "ELResolverChainType";
-
-    /**
-     * Attribute indicating the current component being processed.
-     * This will be used when generating bytecode for custom converters.
-     */
-    public static final String TARGET_COMPONENT_ATTRIBUTE_NAME =
-          RIConstants.FACES_PREFIX + "ComponentForValue";    
-
-    /**
-     * Attribute defining the {@link javax.faces.render.RenderKit} being used
-     * for this request.
-     */
-    public static final String RENDER_KIT_IMPL_REQ =
-          RIConstants.FACES_PREFIX + "renderKitImplForRequest";
-
-    /**
-     * This attribute is used by the StateMangaer during restore view.
-     * The values are stored in the request for later use.
-     */
-    public static final String LOGICAL_VIEW_MAP =
-          RIConstants.FACES_PREFIX + "logicalViewMap";
-
-    /**
-     * This attribute is used by the StateMangaer during restore view.
-     * The values are stored in the request for later use.
-     */
-    public static final String ACTUAL_VIEW_MAP =
-          RIConstants.FACES_PREFIX + "actualViewMap";
-
-    /**
-     * This attribute is used by the loadBundle tag for tracking views/subviews
-     * within the logical view (this is only used when 1.1 compatibility is
-     * enabled).
-     */
-    public static final String VIEWTAG_STACK_ATTR_NAME =
-          RIConstants.FACES_PREFIX + "taglib.jsf_core.VIEWTAG_STACK";
-
-    /**
-     * Attribute to store the {@link javax.faces.webapp.FacesServlet} path of
-     * the original request.
-     */
-    public static final String INVOCATION_PATH =
-          RIConstants.FACES_PREFIX + "INVOCATION_PATH";
-
-    /**
-     * This attribute protects against infinite loops on expressions that
-     * touch a custom legacy VariableResolver that delegates to its parent
-     * VariableResolver.
-     */
-    public static final String REENTRANT_GUARD =
-          RIConstants.FACES_PREFIX + "LegacyVariableResolver";
-
-    /**
-     * Leveraged by the RequestStateManager to allow deprecated ResponseStateManager
-     * methods to continue to work if called.
-     */
-    public static final String FACES_VIEW_STATE =
-          "com.sun.faces.FACES_VIEW_STATE";
-
-
-    /**
-     * Leveraged by ResourceHandlerImpl to denote whether or not a request
-     * is a resource request.  A <code>Boolean</code> value will be assoicated
-     * with this key.
-     */
-    public static final String RESOURCE_REQUEST =
-          "com.sun.faces.RESOURCE_REQUEST";
-
-    /**
-     * Used to store the FaceletFactory as other components may need to
-     * use it during their processing. 
-     */
-    public static final String FACELET_FACTORY =
-          "com.sun.faces.FACELET_FACTORY";
-
-    /**
-     * Used to indicate whether or not jsf.js has already be rendered.
-     */
-    public static final String SCRIPT_STATE =
-          "com.sun.faces.SCRIPT_STATE";
-
-
-    /**
-     * Used to communicate which validators have been disabled for a particular
-     * nesting level within a view.
-     */
-    public static final String DISABLED_VALIDATORS =
-          "com.sun.faces.DISABLED_VALIDATORS";
-
-
-    /**
-     * Used to store the Set of ResourceDependency annotations that have
-     * been processed.
-     */
-    public static final String PROCESSED_RESOURCE_DEPENDENCIES =
-          "com.sun.faces.PROCESSED_RESOURCE_DEPENDENCIES";
-
-
-    private static final String[] RENDER_RESPONSE = {
-          SCRIPT_STATE,
-          PROCESSED_RESOURCE_DEPENDENCIES
-    };
-
-    private static final Map<PhaseId,String[]> PHASE_ATTRIBUTES =
-        new HashMap<PhaseId,String[]>(2, 1.0f);
-
-    static {
-        PHASE_ATTRIBUTES.put(PhaseId.RENDER_RESPONSE, RENDER_RESPONSE);
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param key the key for the value
-     * @return the value associated with the specified key.
-     */
-    public static Object get(FacesContext ctx, String key) {
-
-        if (ctx == null || key == null) {
-            return null;
-        }
-        return ctx.getAttributes().get(key);
-
-    }
-
-
-    /**
-     * <p>
-     * Adds the specified key and value to the Map stored in the request.
-     * If <code>value</code> is <code>null</code>, that key/value pair will
-     * be removed from the Map.
-     * </p>
-     *
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param key the key for the value
-     * @param value the value to store
-     */
-    public static void set(FacesContext ctx, String key, Object value) {
-
-        if (ctx == null || key == null) {
-            return;
-        }
-        if (value == null) {
-            remove(ctx, key);
-        }
-        ctx.getAttributes().put(key, value);
-
-    }
-
-
-    /**
-     * <p>
-     * Remove the value associated with the specified key.
-     * </p>
-     *
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param key the key for the value
-     * @return the value previous associated with the specified key, if any
-     */
-    public static Object remove(FacesContext ctx, String key) {
-
-        if (ctx == null || key == null) {
-            return null;
-        }
-
-        return ctx.getAttributes().remove(key);
-
-    }
-
-
-    /**
-     * <p>
-     * Remove all request state attributes associated that need to be cleared
-     * before the execution of a particular lifecycle phase.
-     * </p>
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param phaseId the phase used to obtain the associated attributes
-     */
-    public static void clearAttributesForPhase(FacesContext ctx,
-                                               PhaseId phaseId) {
-
-        if (ctx == null || phaseId == null) {
-            return;
-        }
-        String[] phaseAttributes = PHASE_ATTRIBUTES.get(phaseId);
-        if (phaseAttributes != null) {
-            Map<Object,Object> attrs = ctx.getAttributes();
-            for (String key : phaseAttributes) {
-                attrs.remove(key);
-            }
-        }
-
-    }
-
-
-    /**
-     * @param ctx the <code>FacesContext</code> for the current request
-     * @param key the key for the value
-     * @return true if the specified key exists in the Map
-     */
-    public static boolean containsKey(FacesContext ctx, String key) {
-
-        return !(ctx == null || key == null) && ctx.getAttributes()
-              .containsKey(key);
-
-    }
-
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/Timer.java b/jsf-ri/src/main/java/com/sun/faces/util/Timer.java
deleted file mode 100644
index e824e6c..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/Timer.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * This class is a simple wrapper for timing method calls.
- * The traditional methid is to add two variables, start, and stop,
- * and display the difference of these values.  Encapsulates
- * the process.
- */
-public class Timer {
-
-    private static final Logger LOGGER = FacesLogger.TIMING.getLogger();
-
-    long start;
-    long stop;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    private Timer() { }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * @return a new <code>Timer</code> instance if the <code>TIMING</code>
-     *  logging level is <code>FINE</code>, otherwise, return null;
-     */
-    public static Timer getInstance() {
-        if (LOGGER.isLoggable(Level.FINE)) {
-            return new Timer();
-        }
-        return null;
-    }
-
-
-    /**
-     * Start timing.
-     */
-    public void startTiming() {
-        start = System.currentTimeMillis();
-    }
-
-
-    /**
-     * Stop timing.
-     */
-    public void stopTiming() {
-        stop = System.currentTimeMillis();
-    }
-
-
-    /**
-     * Log the timing result.
-     * @param taskInfo task description
-     */
-    public void logResult(String taskInfo) {
-    	if (LOGGER.isLoggable(Level.FINE)) {
-	        LOGGER.log(Level.FINE,
-	                   " [TIMING] - [" + getTimingResult() + "ms] : " + taskInfo);
-    	}
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * @return the time for this task
-     */
-    private long getTimingResult() {
-        return (stop - start);
-    }
-}
diff --git a/jsf-ri/src/main/java/com/sun/faces/util/Util.java b/jsf-ri/src/main/java/com/sun/faces/util/Util.java
deleted file mode 100644
index 85369f9..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/util/Util.java
+++ /dev/null
@@ -1,827 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// Util.java
-
-package com.sun.faces.util;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.io.FastStringWriter;
-
-import javax.el.ELResolver;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.event.AbortProcessingException;
-import java.beans.FeatureDescriptor;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.Iterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-import javax.servlet.ServletContext;
-
-/**
- * <B>Util</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class Util {
-
-    
-    // Log instance for this class
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-    // README - make sure to add the message identifier constant
-    // (ex: Util.CONVERSION_ERROR_MESSAGE_ID) and the number of substitution
-    // parameters to test/com/sun/faces/util/TestUtil_messages (see comment there).
-
-
-    /**
-     * Flag that enables/disables the core TLV.
-     */
-    private static final String coreTLVEnabled = RIConstants.FACES_PREFIX + "coreTLVEnabled";
-
-    /**
-     * Flag that enables/disables the html TLV.
-     */
-    private static final String htmlTLVEnabled = RIConstants.FACES_PREFIX + "htmlTLVEnabled";
-    
-    /**
-     * RegEx patterns
-     */
-    private static final String patternCacheKey = RIConstants.FACES_PREFIX + "patternCache";
-
-
-    private Util() {
-        throw new IllegalStateException();
-    }
-
-    /**
-     * <p>The <code>ThreadLocal</code> when invoking methods on this class
-     * from outside the scope of the FacesContext, this threadLocal is used
-     * to serve as the ApplicationMap.</p>
-     */
-    private static ThreadLocal<Map<String, Object>> nonFacesContextApplicationMap;
-
-
-    private static void setNonFacesContextApplicationMap(Map<String, Object> instance) {
-        lazilyInitializeNonFacesContextApplicationMap();
-        if (null == instance) {
-            nonFacesContextApplicationMap.remove();
-        } else {
-            nonFacesContextApplicationMap.set(instance);
-        }
-    }
-
-    private static void lazilyInitializeNonFacesContextApplicationMap() {
-        if (null == nonFacesContextApplicationMap) {
-            nonFacesContextApplicationMap = new ThreadLocal<Map<String, Object>>() {
-                @Override
-                protected Map<String, Object> initialValue() {
-                    return (null);
-                }
-            };
-        }
-    }
-
-    private static Map<String, Object> getNonFacesContextApplicationMap() {
-        lazilyInitializeNonFacesContextApplicationMap();
-        return nonFacesContextApplicationMap.get();
-    }
-
-    private static Map<String, Object> getApplicationMap() {
-        Map<String, Object> result = null;
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (null != context) {
-            ExternalContext externalContext = context.getExternalContext();
-            if (null != externalContext) {
-                result = externalContext.getApplicationMap();
-            }
-        }
-        // This will be true if FacesServlet.service is not on the callstack
-        if (null == result) {
-            result = getNonFacesContextApplicationMap();
-            if (null == result) {
-                result = new HashMap<String, Object>();
-                setNonFacesContextApplicationMap(result);
-            }
-        }
-
-        return result;
-    }
-
-    private static Map<String,Pattern> getPatternCache() {
-        Map<String, Object> appMap = getApplicationMap();
-        Map<String,Pattern> result = 
-                (Map<String,Pattern>) appMap.get(patternCacheKey);
-        if (null == result) {
-            result = new LRUMap<String,Pattern>(15);
-            appMap.put(patternCacheKey, result);
-        }
-        
-        return result;
-    }
-
-    private static Map<String,Pattern> getPatternCache(ServletContext sc) {
-        Map<String,Pattern> result =
-                (Map<String,Pattern>) sc.getAttribute(patternCacheKey);
-        if (null == result) {
-            result = new LRUMap<String,Pattern>(15);
-            sc.setAttribute(patternCacheKey, result);
-        }
-
-        return result;
-    }
-
-    /**
-     * <p>
-     * Convenience method for determining if the request associated
-     * with the specified <code>FacesContext</code> is a PortletRequest
-     * submitted by the JSR-301 bridge.
-     * </p>
-     * @param context the <code>FacesContext</code> associated with
-     *  the request.
-     */
-    public static boolean isPortletRequest (FacesContext context) {
-        return (context.getExternalContext().getRequestMap().get("javax.portlet.faces.phase") != null);
-    }
-    
-
-    /**
-     * <p>Factory method for creating the varius JSF listener
-     *  instances that may be referenced by <code>type</code>
-     *  or <code>binding</code>.</p>
-     * <p>If <code>binding</code> is not <code>null</code>
-     * and the evaluation result is not <code>null</code> return
-     * that instance.  Otherwise try to instantiate an instances
-     * based on <code>type</code>.</p>
-     * 
-     * @param type the <code>Listener</code> type
-     * @param binding a <code>ValueExpression</code> which resolves
-     *  to a <code>Listener</code> instance
-     * @return a <code>Listener</code> instance based off the provided
-     *  <code>type</code> and <binding>
-     */
-    public static Object getListenerInstance(ValueExpression type,
-                                             ValueExpression binding) {
-
-        FacesContext faces = FacesContext.getCurrentInstance();
-        Object instance = null;
-        if (faces == null) {
-            return null;
-        }
-        if (binding != null) {
-            instance = binding.getValue(faces.getELContext());
-        }
-        if (instance == null && type != null) {
-            try {
-                instance = ReflectionUtils.newInstance(((String) type.getValue(faces.getELContext())));
-            } catch (Exception e) {
-                throw new AbortProcessingException(e.getMessage(), e);
-            }
-
-            if (binding != null) {
-                binding.setValue(faces.getELContext(), instance);
-            }
-        }
-
-        return instance;
-
-    }
-
-
-    public static void setCoreTLVActive(boolean active) {
-        Map<String, Object> appMap = getApplicationMap();
-        appMap.put(coreTLVEnabled, (Boolean) active);
-    }
-
-    public static boolean isCoreTLVActive() {
-        Boolean result = true;
-        Map<String, Object> appMap = getApplicationMap();
-        return (null == (result = (Boolean) appMap.get(coreTLVEnabled)) ? true
-                : result.booleanValue());
-    }
-
-    public static void setHtmlTLVActive(boolean active) {
-        Map<String, Object> appMap = getApplicationMap();
-        appMap.put(htmlTLVEnabled, (Boolean) active);
-    }
-
-    public static boolean isHtmlTLVActive() {
-        Boolean result = true;
-        Map<String, Object> appMap = getApplicationMap();
-        return (null == (result = (Boolean) appMap.get(htmlTLVEnabled)) ? true
-                : result.booleanValue());
-    }
-
-
-    public static Class loadClass(String name,
-                                  Object fallbackClass)
-        throws ClassNotFoundException {
-        ClassLoader loader = Util.getCurrentLoader(fallbackClass);
-        // Where to begin...
-        // JDK 6 introduced CR 6434149 where one couldn't pass
-        // in a literal for an array type ([Ljava.lang.String) and
-        // get the Class representation using ClassLoader.loadClass().
-        // It was recommended to use Class.forName(String, boolean, ClassLoader)
-        // for all ClassLoading requests.
-        // HOWEVER, when trying to eliminate the need for .groovy extensions
-        // being specified in the faces-config.xml for Groovy-based artifacts,
-        // by using a an adapter to the GroovyScriptEngine, I found that the class
-        // instance was cached somewhere, so that no matter what change I made,
-        // Class.forName() always returned the same instance.  I haven't been
-        // able to determine why this happens in the appserver environment
-        // as the same adapter in a standalone program works as one might expect.
-        // So, for now, if the classname starts with '[', then use Class.forName()
-        // to avoid CR 643419 and for all other cases, use ClassLoader.loadClass().
-        if (name.charAt(0) == '[') {
-            return Class.forName(name, true, loader);
-        } else {
-            return loader.loadClass(name);
-        }
-    }
-
-
-    public static ClassLoader getCurrentLoader(Object fallbackClass) {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return loader;
-    }
-
-
-    public static void notNull(String varname, Object var) {
-
-        if (var == null) {
-            throw new NullPointerException(
-                  MessageUtils.getExceptionMessageString(
-                      MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, varname));
-        }
-        
-    }
-
-
-    /**
-     * @param context the <code>FacesContext</code> for the current request
-     * @return the Locale from the UIViewRoot, the the value of Locale.getDefault()
-     */
-    public static Locale getLocaleFromContextOrSystem(FacesContext context) {
-        Locale result, temp = Locale.getDefault();
-        UIViewRoot root;
-        result = temp;
-        if (null != context) {
-            if (null != (root = context.getViewRoot())) {
-                if (null == (result = root.getLocale())) {
-                    result = temp;
-                }
-            }
-        }
-        return result;
-    }
-
-
-    public static Converter getConverterForClass(Class converterClass,
-                                                 FacesContext context) {
-        if (converterClass == null) {
-            return null;
-        }
-        try {            
-            Application application = context.getApplication();
-            return (application.createConverter(converterClass));
-        } catch (Exception e) {
-            return (null);
-        }
-    }
-
-
-    public static Converter getConverterForIdentifer(String converterId,
-                                                     FacesContext context) {
-        if (converterId == null) {
-            return null;
-        }
-        try {            
-            Application application = context.getApplication();
-            return (application.createConverter(converterId));
-        } catch (Exception e) {
-            return (null);
-        }
-    }
-
-
-    public static StateManager getStateManager(FacesContext context)
-        throws FacesException {
-        return (context.getApplication().getStateManager());
-    }
-    
-    public static Class getTypeFromString(String type) throws ClassNotFoundException {
-        Class result;
-        if (type.equals("byte")) {
-            result = Byte.TYPE;
-        } else if (type.equals("short")) {
-            result = Short.TYPE;
-        } else if (type.equals("int")) {
-            result = Integer.TYPE;
-        } else if (type.equals("long")) {
-            result = Long.TYPE;
-        } else if (type.equals("float")) {
-            result = Float.TYPE;
-        } else if (type.equals("double")) {
-            result = Double.TYPE;
-        } else if (type.equals("boolean")) {
-            result = Boolean.TYPE;
-        } else if (type.equals("char")) {
-            result = Character.TYPE;
-        } else if (type.equals("void")) {
-            result = Void.TYPE;
-        } else {
-            if (type.indexOf('.') == -1) {
-                type = "java.lang." + type;
-            }
-            result = Util.loadClass(type, Void.TYPE);
-        }
-
-        return result;
-    }
-
-
-    public static ViewHandler getViewHandler(FacesContext context)
-        throws FacesException {
-        // Get Application instance
-        Application application = context.getApplication();
-        assert (application != null);
-
-        // Get the ViewHandler
-        ViewHandler viewHandler = application.getViewHandler();
-        assert (viewHandler != null);
-
-        return viewHandler;
-    }
-
-
-    public static boolean componentIsDisabled(UIComponent component) {
-
-        return (Boolean.valueOf(String.valueOf(component.getAttributes().get("disabled"))));
-
-    }
-
-
-    public static boolean componentIsDisabledOrReadonly(UIComponent component) {
-        return Boolean.valueOf(String.valueOf(component.getAttributes().get("disabled"))) || Boolean.valueOf(String.valueOf(component.getAttributes().get("readonly")));
-    }
-
-
-    // W3C XML specification refers to IETF RFC 1766 for language code
-    // structure, therefore the value for the xml:lang attribute should
-    // be in the form of language or language-country or
-    // language-country-variant.
-
-    public static Locale getLocaleFromString(String localeStr)
-        throws IllegalArgumentException {
-        // length must be at least 2.
-        if (null == localeStr || localeStr.length() < 2) {
-            throw new IllegalArgumentException("Illegal locale String: " +
-                                               localeStr);
-        }
-
-        Locale result = null;
-        String lang = null;
-        String country = null;
-        String variant = null;
-        char[] seps = {
-            '-',
-            '_'
-        };
-        int inputLength = localeStr.length();
-        int i = 0;
-        int j = 0;
-
-        // to have a language, the length must be >= 2
-        if ((inputLength >= 2) &&
-            ((i = indexOfSet(localeStr, seps, 0)) == -1)) {
-            // we have only Language, no country or variant
-            if (2 != localeStr.length()) {
-                throw new
-                    IllegalArgumentException("Illegal locale String: " +
-                                             localeStr);
-            }
-            lang = localeStr.toLowerCase();
-        }
-
-        // we have a separator, it must be either '-' or '_'
-        if (i != -1) {
-            lang = localeStr.substring(0, i);
-            // look for the country sep.
-            // to have a country, the length must be >= 5
-            if ((inputLength >= 5) &&
-                ((j = indexOfSet(localeStr, seps, i + 1)) == -1)) {
-                // no further separators, length must be 5
-                if (inputLength != 5) {
-                    throw new
-                        IllegalArgumentException("Illegal locale String: " +
-                                                 localeStr);
-                }
-                country = localeStr.substring(i + 1);
-            }
-            if (j != -1) {
-                country = localeStr.substring(i + 1, j);
-                // if we have enough separators for language, locale,
-                // and variant, the length must be >= 8.
-                if (inputLength >= 8) {
-                    variant = localeStr.substring(j + 1);
-                } else {
-                    throw new
-                        IllegalArgumentException("Illegal locale String: " +
-                                                 localeStr);
-                }
-            }
-        }
-        if (variant != null && country != null && lang != null) {
-            result = new Locale(lang, country, variant);
-        } else if (lang != null && country != null) {
-            result = new Locale(lang, country);
-        } else if (lang != null) {
-            result = new Locale(lang, "");
-        }
-        return result;
-    }
-
-
-    /**
-     * @param str local string
-     * @param set the substring
-     * @param fromIndex starting index
-     * @return starting at <code>fromIndex</code>, the index of the
-     *         first occurrence of any substring from <code>set</code> in
-     *         <code>toSearch</code>, or -1 if no such match is found
-     */
-    public static int indexOfSet(String str, char[] set, int fromIndex) {
-        int result = -1;
-        for (int i = fromIndex, len = str.length(); i < len; i++) {
-            for (int j = 0, innerLen = set.length; j < innerLen; j++) {
-                if (str.charAt(i) == set[j]) {
-                    result = i;
-                    break;
-                }
-            }
-            if (-1 != result) {
-                break;
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * <p>Leverage the Throwable.getStackTrace() method to produce a String
-     * version of the stack trace, with a "\n" before each line.</p>
-     *
-     * @param e the Throwable to obtain the stacktrace from
-     *
-     * @return the String representation ofthe stack trace obtained by calling
-     *         getStackTrace() on the passed in exception.  If null is passed
-     *         in, we return the empty String.
-     */
-    public static String getStackTraceString(Throwable e) {
-        if (null == e) {
-            return "";
-        }
-
-        StackTraceElement[] stacks = e.getStackTrace();
-        StringBuffer sb = new StringBuffer();
-        for (StackTraceElement stack : stacks) {
-            sb.append(stack.toString()).append('\n');
-        }
-        return sb.toString();
-    }
-
-    /**
-     * <p>PRECONDITION: argument <code>response</code> is non-null and
-     * has a method called <code>getContentType</code> that takes no
-     * arguments and returns a String, with no side-effects.</p>
-     *
-     * <p>This method allows us to get the contentType in both the
-     * servlet and portlet cases, without introducing a compile-time
-     * dependency on the portlet api.</p>
-     *
-     * @param response the current response
-     * @return the content type of the response
-     */
-    public static String getContentTypeFromResponse(Object response) {
-        String result = null;
-        if (null != response) {           
-
-            try {
-                Method method = ReflectionUtils.lookupMethod(
-                      response.getClass(),
-                      "getContentType",
-                      RIConstants.EMPTY_CLASS_ARGS
-                );
-                if (null != method) {
-                    Object obj =
-                          method.invoke(response, RIConstants.EMPTY_METH_ARGS);
-                    if (null != obj) {
-                        result = obj.toString();
-                    }
-                }
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return result;
-    }
-
-    public static FeatureDescriptor getFeatureDescriptor(String name, String
-        displayName, String desc, boolean expert, boolean hidden, 
-        boolean preferred, Object type, Boolean designTime) {
-            
-        FeatureDescriptor fd = new FeatureDescriptor();
-        fd.setName(name);
-        fd.setDisplayName(displayName);
-        fd.setShortDescription(desc);
-        fd.setExpert(expert);
-        fd.setHidden(hidden);
-        fd.setPreferred(preferred);
-        fd.setValue(ELResolver.TYPE, type);
-        fd.setValue(ELResolver.RESOLVABLE_AT_DESIGN_TIME, designTime);
-        return fd;
-    }
-   
-
-    /**
-     * <p>A slightly more efficient version of 
-     * <code>String.split()</code> which caches
-     * the <code>Pattern</code>s in an LRUMap instead of
-     * creating a new <code>Pattern</code> on each
-     * invocation.</p>
-     * @param toSplit the string to split
-     * @param regex the regex used for splitting
-     * @return the result of <code>Pattern.spit(String, int)</code>
-     */
-    public synchronized static String[] split(String toSplit, String regex) {
-        Map<String, Pattern> patternCache = getPatternCache();
-        Pattern pattern = patternCache.get(regex);
-        if (pattern == null) {
-            pattern = Pattern.compile(regex);
-            patternCache.put(regex, pattern);
-        }
-        return  pattern.split(toSplit, 0);
-    }
-
-     public synchronized static String[] split(ServletContext sc,
-             String toSplit, String regex) {
-        Map<String, Pattern> patternCache = getPatternCache(sc);
-        Pattern pattern = patternCache.get(regex);
-        if (pattern == null) {
-            pattern = Pattern.compile(regex);
-            patternCache.put(regex, pattern);
-        }
-        return  pattern.split(toSplit, 0);
-    }
-
-
-    /**
-     * <p>Returns the URL pattern of the
-     * {@link javax.faces.webapp.FacesServlet} that
-     * is executing the current request.  If there are multiple
-     * URL patterns, the value returned by
-     * <code>HttpServletRequest.getServletPath()</code> and
-     * <code>HttpServletRequest.getPathInfo()</code> is
-     * used to determine which mapping to return.</p>
-     * If no mapping can be determined, it most likely means
-     * that this particular request wasn't dispatched through
-     * the {@link javax.faces.webapp.FacesServlet}.
-     *
-     * @param context the {@link FacesContext} of the current request
-     *
-     * @return the URL pattern of the {@link javax.faces.webapp.FacesServlet}
-     *         or <code>null</code> if no mapping can be determined
-     *
-     * @throws NullPointerException if <code>context</code> is null
-     */
-    public static String getFacesMapping(FacesContext context) {
-
-        if (context == null) {
-            String message = MessageUtils.getExceptionMessageString
-                  (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context");
-            throw new NullPointerException(message);
-        }
-
-        // Check for a previously stored mapping   
-        ExternalContext extContext = context.getExternalContext();
-        String mapping =
-              (String) RequestStateManager.get(context, RequestStateManager.INVOCATION_PATH);
-
-        if (mapping == null) {
-         
-            // first check for javax.servlet.forward.servlet_path
-            // and javax.servlet.forward.path_info for non-null
-            // values.  if either is non-null, use this
-            // information to generate determine the mapping.
-
-            String servletPath = extContext.getRequestServletPath();
-            String pathInfo = extContext.getRequestPathInfo();
-
-            mapping = getMappingForRequest(servletPath, pathInfo);
-            if (mapping == null) {
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.log(Level.FINE,
-                               "jsf.faces_servlet_mapping_cannot_be_determined_error",
-                               new Object[]{servletPath});
-                }
-            }
-        }
-        
-        // if the FacesServlet is mapped to /* throw an 
-        // Exception in order to prevent an endless 
-        // RequestDispatcher loop
-        //if ("/*".equals(mapping)) {
-        //    throw new FacesException(MessageUtils.getExceptionMessageString(
-        //          MessageUtils.FACES_SERVLET_MAPPING_INCORRECT_ID));
-        //}
-
-        if (mapping != null) {
-            RequestStateManager.set(context,
-                                    RequestStateManager.INVOCATION_PATH,
-                                    mapping);
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE,
-                       "URL pattern of the FacesServlet executing the current request "
-                       + mapping);
-        }
-        return mapping;
-    }
-
-    /**
-     * <p>Return the appropriate {@link javax.faces.webapp.FacesServlet} mapping
-     * based on the servlet path of the current request.</p>
-     *
-     * @param servletPath the servlet path of the request
-     * @param pathInfo    the path info of the request
-     *
-     * @return the appropriate mapping based on the current request
-     *
-     * @see javax.servlet.http.HttpServletRequest#getServletPath()
-     */
-    private static String getMappingForRequest(String servletPath, String pathInfo) {
-
-        if (servletPath == null) {
-            return null;
-        }
-        if (LOGGER.isLoggable(Level.FINE)) {
-            LOGGER.log(Level.FINE, "servletPath " + servletPath);
-            LOGGER.log(Level.FINE, "pathInfo " + pathInfo);
-        }
-        // If the path returned by HttpServletRequest.getServletPath()
-        // returns a zero-length String, then the FacesServlet has
-        // been mapped to '/*'.
-        if (servletPath.length() == 0) {
-            return "/*";
-        }
-
-        // presence of path info means we were invoked
-        // using a prefix path mapping
-        if (pathInfo != null) {
-            return servletPath;
-        } else if (servletPath.indexOf('.') < 0) {
-            // if pathInfo is null and no '.' is present, assume the
-            // FacesServlet was invoked using prefix path but without
-            // any pathInfo - i.e. GET /contextroot/faces or
-            // GET /contextroot/faces/
-            return servletPath;
-        } else {
-            // Servlet invoked using extension mapping
-            return servletPath.substring(servletPath.lastIndexOf('.'));
-        }
-    }
-    
-    
-    /**
-     * <p>Returns true if the provided <code>url-mapping</code> is
-     * a prefix path mapping (starts with <code>/</code>).</p>
-     *
-     * @param mapping a <code>url-pattern</code>
-     * @return true if the mapping starts with <code>/</code>
-     */
-    public static boolean isPrefixMapped(String mapping) {
-        return (mapping.charAt(0) == '/');
-    }
-
-
-    /**
-     * @param ctx the {@link FacesContext} for the current request
-     * @param viewToRender the {@link UIViewRoot} to check
-     * @return <code>true</code> if the {@link FacesContext} attributes map
-     *  contains a reference to the {@link UIViewRoot}'s view ID
-     */
-    public static boolean isViewPopulated(FacesContext ctx, UIViewRoot viewToRender) {
-
-        return ctx.getAttributes().containsKey(viewToRender);
-
-    }
-
-
-    /**
-     * <p>
-     * Flag the specified {@link UIViewRoot} as populated.
-     * </p>
-     * @param ctx the {@link FacesContext} for the current request
-     * @param viewToRender the {@link UIViewRoot} to mark as populated
-     */
-    public static void setViewPopulated(FacesContext ctx,
-                                        UIViewRoot viewToRender) {
-
-        ctx.getAttributes().put(viewToRender, Boolean.TRUE);
-
-    }
-
-
-    /**
-     * Utility method to validate ID uniqueness for the tree represented
-     * by <code>component</code>.
-     */
-    public static void checkIdUniqueness(FacesContext context,
-                                          UIComponent component,
-                                          Set<String> componentIds) {
-
-        // deal with children/facets that are marked transient.
-        for (Iterator<UIComponent> kids = component.getFacetsAndChildren();
-             kids.hasNext();) {
-
-            UIComponent kid = kids.next();
-            // check for id uniqueness
-            String id = kid.getClientId(context);
-            if (componentIds.add(id)) {
-                checkIdUniqueness(context, kid, componentIds);
-            } else {
-                if (LOGGER.isLoggable(Level.SEVERE)) {
-                    LOGGER.log(Level.SEVERE,
-                               "jsf.duplicate_component_id_error",
-                               id);
-
-
-                    FastStringWriter writer = new FastStringWriter(128);
-                    DebugUtil.simplePrintTree(context.getViewRoot(), id, writer);
-                    LOGGER.severe(writer.toString());
-                }
-
-                String message =
-                      MessageUtils.getExceptionMessageString(
-                            MessageUtils.DUPLICATE_COMPONENT_ID_ERROR_ID, id);
-                throw new IllegalStateException(message);
-            }
-        }
-
-    }
-
-
-} // end of class Util
diff --git a/jsf-ri/src/main/java/com/sun/faces/vendor/WebContainerInjectionProvider.java b/jsf-ri/src/main/java/com/sun/faces/vendor/WebContainerInjectionProvider.java
deleted file mode 100644
index b395217..0000000
--- a/jsf-ri/src/main/java/com/sun/faces/vendor/WebContainerInjectionProvider.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.vendor;
-
-import com.sun.faces.spi.InjectionProvider;
-import com.sun.faces.spi.InjectionProviderException;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.FacesLogger;
-
-import javax.annotation.PreDestroy;
-import javax.annotation.PostConstruct;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.annotation.Annotation;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-/**
- * <p>This <code>InjectionProvider</code> will be used if the
- * <code>PostConstruct</code> and <code>PreDestroy</code> annotations
- * are present, but no specific <code>InjectionProvider</code> has
- * been configured.</p>.
- *
- * <p>It's important to note that this will not provide resource injection.</p>
- */
-public class WebContainerInjectionProvider implements InjectionProvider {
-
-
-    private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
-
-
-    // ------------------------------------------ Methods from InjectionProvider
-
-
-    public void inject(Object managedBean) throws InjectionProviderException {
-
-        // no-op
-
-    }
-
-    public void invokePreDestroy(Object managedBean)
-    throws InjectionProviderException {
-
-        if (managedBean != null) {
-            invokeAnnotatedMethod(getAnnotatedMethod(managedBean,
-                                                     PreDestroy.class),
-                                  managedBean);
-        }
-
-    }
-
-    public void invokePostConstruct(Object managedBean)
-    throws InjectionProviderException {
-
-
-        if (managedBean != null) {
-            invokeAnnotatedMethod(getAnnotatedMethod(managedBean,
-                                                     PostConstruct.class),
-                                  managedBean);
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static void invokeAnnotatedMethod(Method method, Object managedBean)
-    throws InjectionProviderException {
-
-        if (method != null) {
-            boolean accessible = method.isAccessible();
-            method.setAccessible(true);
-            try {
-                method.invoke(managedBean);
-            } catch (Exception e) {
-                throw new InjectionProviderException(e.getMessage(), e);
-            } finally {
-                method.setAccessible(accessible);
-            }
-        }
-
-    }
-
-
-    private static Method getAnnotatedMethod(Object managedBean,
-                                             Class<? extends Annotation> annotation) {
-
-        Class<?> clazz = managedBean.getClass();
-        while (!Object.class.equals(clazz)) {
-
-            Method[] methods = clazz.getDeclaredMethods();
-            for (Method method : methods) {
-                if (method.isAnnotationPresent(annotation)) {
-                    // validate method
-                    if (Modifier.isStatic(method.getModifiers())) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.core.web.injection.method_not_static",
-                                       new Object[] { method.toString(),
-                                                      annotation.getName() });
-                        }
-                        continue;
-                    }
-                    if (!Void.TYPE.equals(method.getReturnType())) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.core.web.injection.method_return_not_void",
-                                       new Object[] { method.toString(),
-                                                      annotation.getName() });
-                        }
-                        continue;
-                    }
-                    if (method.getParameterTypes().length != 0) {
-                        if (LOGGER.isLoggable(Level.WARNING)) {
-                            LOGGER.log(Level.WARNING,
-                                       "jsf.core.web.injection.method_no_params",
-                                       new Object[] { method.toString(),
-                                                      annotation.getName() });
-                        }
-                        continue;
-                    }
-                    Class<?>[] exceptions = method.getExceptionTypes();
-                    if (method.getExceptionTypes().length != 0) {
-                        boolean hasChecked = false;
-                        for (Class<?> excClass : exceptions) {
-                            if (!RuntimeException.class.isAssignableFrom(excClass)) {
-                                hasChecked = true;
-                                break;
-                            }
-                        }
-                        if (hasChecked) {
-                            if (LOGGER.isLoggable(Level.WARNING)) {
-                                LOGGER.log(Level.WARNING,
-                                     "jsf.core.web.injection.method_no_checked_exceptions",
-                                     new Object[]{method.toString(),
-                                          annotation.getName()});
-                            }
-                            continue;
-                        }
-                    }
-                    // we found a match.
-                    return method;
-                }
-            }
-
-            clazz = clazz.getSuperclass();
-        }
-
-        return null;
-    }
-
-
-}
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings.properties
deleted file mode 100644
index 5a13016..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings.properties
+++ /dev/null
@@ -1,147 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001: Managedbean {0} could not be created.
-jsf.cannot_instantiate_validator_error=JSF1005: Cannot instantiate validator of type {0}
-jsf.cannot_instantiate_converter_error=JSF1006: Cannot instantiate converter of type {0}
-jsf.duplicate_component_id_error=JSF1007: Duplicate component ID {0} found in view.
-jsf.redirect_failed_error=JSF1008: Redirect to path {0} failed
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009: Unable to determine FaceServlet mapping for servlet path {0}.
-jsf.illegal_view_id_error=JSF1010: Illegal view ID {0}. The ID must begin with ''/''
-jsf.util.no.adapter.ctor.available="JSF1016: Target class ''{0}'' doesn't have an adapter constructor to accept ''{1}'', creating a new instance instead.
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011: Evaluation of expression for attribute ''{0}'' resulted in unexpected type.  Expected {1}, but received {2}.
-jsf.util_no_annotation_processed=JSF1014: Unable to load annotation class ''{0}''.  As a result, this annotation will not be processed.
-jsf.config.listener.version=Initializing Mojarra |version.string| for context ''{0}''
-jsf.config.listener.version.complete=Completed initializing Mojarra (|version.string|) for context ''{0}''
-jsf.config.listener.predestroy.error=JSF1017: ''{0}'' was thrown while handling the PreDestroy annotation(s) for bean ''{1}'' in scope ''{2}''.  Message: {3}
-jsf.viewhandler.requestpath.recursion=JSF1015: Request path ''{0}'' begins with one or more occurrences of the FacesServlet prefix path mapping ''{1}''.
-jsf.non_displayed_message=WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.{0}
-
-jsf.config.webconfig.configinfo=JSF1018: [{0}] Configuration option ''{1}'' set to ''{2}''
-jsf.config.webconfig.configinfo.reset=JSF1019: [{0}] Configuration option ''{1}'' RESET to ''{2}''
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020: [{0}] Configuration option ''{1}'' RESET to ENABLED
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020: [{0}] Configuration option ''{1}'' RESET to DISABLED
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021: [{0}] Configuration option ''{1}'' - ENABLED
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021: [{0}] Configuration option ''{1}'' - DISABLED
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022: [{0}] Invalid value ''{1}'' for configuration option ''{2}''.  Valid values are ''{3}''.  Falling back to the default of ''{4}''.
-jsf.config.webconfig.enventryinfo=JSF1023: [{0}] Environment entry ''{1}'' processed, value ''{2}''
-jsf.config.webconfig.enventry.clientencrypt=JSF1024: [{0}] Client state encryption: ENABLED
-jsf.config.webconfig.param.deprecated=JSF1025: [{0}] Context initialization parameter ''{1}'' is deprecated.  The option will still be configured, but please use ''{2}'' in the future.
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025: [{0}] Context initialization parameter ''{1}'' is deprecated and will have no effect.  
-jsf.config.webconfig.option.notconfigured=JSF1026: [{0}] Configuration option ''{1}'' not configured
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027: [{0}] The ELResolvers for JSF were not registered with the JSP container.
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028: [{0}] The ELResolvers for JSF successfully registered with the JSP container.
-jsf.spi.injection.provider_not_implemented=JSF1029: The specified InjectionProvider implementation ''{0}'' does not implement the InjectionProvider interface. 
-jsf.spi.injection.provider_not_found=JSF1030: The specified InjectionProvider implementation ''{0}'' cannot be loaded.
-jsf.spi.injection.provider_cannot_instantiate=JSF1031: The specified InjectionProvider ''{0}'' cannot be instantiated.
-jsf.spi.injection.provider_configured=JSF1032: Resource injection ENABLED using InjectionProvider ''{0}''.
-jsf.spi.injection.no_injection=JSF1033: Resource injection is DISABLED.
-jsf.spi.serialization.provider_not_implemented=JSF1036: The specified SerializationProvider implementation ''{0}'' does not implement the SerializationProvider interface. 
-jsf.spi.serialization.provider_not_found=JSF1037: The specified SerializationProvider implementation ''{0}'' cannot be loaded.
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038: The specified SerializationProvider ''{0}'' cannot be instantiated.
-jsf.spi.serialization.provider_configured=JSF1039: Resource injection ENABLED using InjectionProvider ''{0}''.
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034: The value ''{1}'' for ''{0}'' must be evenly divisable by 2.  Defaulting to ''{2}''.
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035: The value ''{1}'' for ''{0}'' is not an Integer.  Defaulting to ''{2}''.
-jsf.core.taglib.invalid_locale_value=JSF1041: The locale specified, ''{0}'', is invalid.  The locale attribute value must be a valid ISO 639 language code that does not contain a country or variant.
-jsf.core.taglib.invalid_language=JSF1042: The language specified, ''{0}'', is not a known ISO 639 language code.
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043: {0} for component ''{1}'' will not be processed - both 'binding' and 'type' are null.
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043: PhaseListener (specified via PhaseListenerTag) will not be processed - both 'binding' and 'type' are null
-jsf.core.web.injection.method_not_static=JSF1044: Method ''{0}'' marked with the ''{1}'' annotation cannot be static.  This method will be ignored.
-jsf.core.web.injection.method_return_not_void=JSF1045: Method ''{0}'' marked with the ''{1}'' annotation can only return void.  This method will be ignored.
-jsf.core.web.injection.method_no_params=JSF1046: Method ''{0}'' marked with the ''{1}'' annotation cannot have any parameters.  This method will be ignored.
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047: Method ''{0}'' marked with the ''{1}'' annotation cannot declare any checked exceptions.  This method will be ignored.
-jsf.core.injection.provider_generic_web_configured=JSF1048: PostConstruct/PreDestroy annotations present.  ManagedBeans methods marked with these annotations will have said annotations processed.
-jsf.spi.injection.provider.invalid_service_entry=JSF1049: Invalid service entry ''{0}''.  Format should be ''<DiscoverableInjectionProviderClass>:<DelegateClass>''.  Entry will be ignored.
-jsf.spi.injection.provider.discovery_error=JSF1050: Error invoking DiscoverableInjectionProvider.isProviderAppropriate(String) for entry ''{0}''.  Entry will be ignored.
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051: Service entry ''{0}'' does not extend DiscoverableInjectionProvider.  Entry will be ignored.
-jsf.spi.provider.cannot_read_service=JSF1052:  Unexpected error processing service entry ''{0}''.
-jsf.lifecycle.phaselistener.exception=JSF1053: (Listener: {0}, Phase ID: {1},  View ID: {2}) Exception thrown during phase-listener execution: {3}
-jsf.lifecycle.phase.exception=JSF1054: (Phase ID: {0}, View ID: {1}) Exception thrown during phase execution: {2}
-jsf.config.cannot_resolve_entities=JSF1055: Unable to locate local resource ''{0}''.  Standard entity resolution will be used when a request is present for ''{1}''.
-jsf.config.cannot_create_inputsource=JSF1056: Unable to create InputSource for URL ''{0}''.
-jsf.config.navigation.from_view_id_leading_slash=JSF1057: The resource referred to by from-view-id, ''{0}'', does not start with ''/''.  This will be added for you, but it should be corrected. 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058: The resource referred to by to-view-id, ''{0}'', for navigation from ''{1}'', does not start with ''/''.  This will be added for you, but it should be corrected.
-jsf.config.navigation.if_invalid_expression=JSF1070: The condition ''{0}'' for navigation from ''{1}'' is not a contiguous value expression and will be ignored.
-jsf.config.verifyobjects.development_only=JSF1059: WARNING!  The com.sun.faces.verifyObjects feature is to aid developers not using tools.  It shouldn''t be enabled if using an IDE, or if this application is being deployed for production as it will impact application start times.
-jsf.config.verifyobjects.failures_detected=JSF1060: Verification produced one or more failures.  Details will follow this message.
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061: WARNING! An attempt was made to add a duplicate phase listener: {0}.  This duplicate will be ignored.
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062: WARNING!  The response object returned by ExternalContext.getResponse() doesn't provide a method with signature 'public void flushContentToWrappedResponse()'.  This method is necessary in order to provide content interweaving in a JSP environment.  Because of this, content will not be displayed correctly.
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062: WARNING!  The response object returned by ExternalContext.getResponse() doesn't provide a method with signature 'public boolean isBytes()'.  This method is necessary in order to provide content interweaving in a JSP environment.  Because of this, content will not be displayed correctly.
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062: WARNING!  The response object returned by ExternalContext.getResponse() doesn't provide a method with signature 'public boolean isChars()'.  This method is necessary in order to provide content interweaving in a JSP environment.  Because of this, content will not be displayed correctly.
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062: WARNING!  The response object returned by ExternalContext.getResponse() doesn't provide a method with signature 'public char[] getChars()'.  This method is necessary in order to provide content interweaving in a JSP environment.  Because of this, content will not be displayed correctly.
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062: WARNING!  The response object returned by ExternalContext.getResponse() doesn't provide a method with signature 'public void resetBuffers'.  This method is necessary in order to provide content interweaving in a JSP environment.  Because of this, content will not be displayed correctly.
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063: WARNING! Setting non-serializable attribute value into HttpSession (key: {0}, value class: {1}).
-jsf.application.resource.unable_to_serve_from_library=JSF1064: Unable to find or serve resource, {0}, from library, {1}.
-jsf.application.resource.unable_to_serve=JSF1064: Unable to find or serve resource, {0}.
-jsf.application.resource.unable_to_determine_resource_version=JSF1065: Unable to determine version for resource name {0}.
-jsf.application.resource.unable_to_create_compression_directory=JSF1065: Unable to create directory {0} to store compressed resource.
-jsf.application.publish.event.base_type_mismatch=JSF1066: Source object {0} is not an instance of provided base type {1}.  Event search will not occur.
-jsf.config.web_resource_not_found=JSF1067: Resource {0} specified by the {1} configuration option cannot be found.  The resource will be ignored.
-jsf.cannot_instantiate_component_error=JSF1068: Cannot instantiate component with component-type {0}
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069: Disabling the JSF 2.0 Facelets ViewHandler as an older FaceletViewHandler, {0}, has been explicitly configured. \
-  If this is not desired behavior, remove the older FaceletViewHandler and library from your application.
-jsf.navigation_invalid_query_string=JSF1070: Invalid query string in navigation outcome {0}
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071: {0} caught during beforePhase() processing of {1} : UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log_after=JSF1072: {0} caught during afterPhase() processing of {1} : UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log=JSF1073: {0} caught during processing of {1} : UIComponent-ClientId={2}, Message={3}
-jsf.managed.bean.duplicate=JSF1074: Managed bean named ''{0}'' has already been registered.  Replacing existing managed bean class type {1} with {2}.
-jsf.resource.mime.type.configration.invalid=JSF1075: Mime type {0} doesn't match expected pattern {1}. Ignoring.
-jsf.annotation.scanner.configuration.invalid=JSF1076: [{0}] {1} : invalid jar specification format.  Expected jar:<jar name or *>:<package or *>.  Entry will be ignored.
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077: [{0}] {1} : duplicate wildcard entry for jar name found.  Entry will be ignored.
-jsf.configuration.web.xml.parse.failed=JSF1078: Unable to process deployment descriptor for context ''{0}''.
-jsf.configuration.absolute.order.duplicate.document=JSF1079: Multiple documents named {0} found while processing absolute ordering.  Processing the first named document only.
-jsf.configuration.absolute.order.missing.document=JSF1080: Unable to find document named ''{0}'' while performing absolute ordering processing.
-jsf.configuration.web.faces.config.contains.ordering=JSF1081: /WEB-INF/faces-config.xml contains <ordering> elements.  These will be ignored.
-jsf.configuration.illegal.eager.bean=JSF1082: Eager managed bean instantiation is allowable for application scoped beans only.  Managed bean ''{0}'' is configured as eager, but the scope ''{1}'' is invalid.
-jsf.composite.component.insertchildren.missing.template=JSF1083: Unable to find owning composite component template for insertChildren handler at location: {0}"
-jsf.composite.component.insertfacet.missing.template=JSF1084: Unable to find owning composite component template for insertFacet handler at location: {0}"
-jsf.managed.bean.custom.scope.eval.null=JSF1085: Custom scope ''{0}'' evaluated to null.  Managed bean was not pushed to scope.
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086: Custom scope ''{0}'' evaluated to null.  Unable to determine if managed bean exists.
-jsf.facelets.error.page.response.committed=JSF1087: Unable to generate Facelets error page as the response has already been committed.
-jsf.state.server.cannot.parse.int.option=JSF1088: Error parsing the context init parameter {0}.  Using default value {1} instead.
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089: NavigationHandler must be an instance of ConfigurableNavigationHandler to use a UIOutputTarget component {0}.
-jsf.outcometarget.navigation.case.not.resolved=JSF1090: Navigation case not resolved for component {0}.
-jsf.externalcontext.no.mime.type.found=JSF1091: No mime type could be found for file {0}.  To resolve this, add a mime-type mapping to the application's web.xml.
-jsf.config.legacy.facelet.warning=JSF1029:  Application is versioned at 2.0 (either explicitly by the version of /WEB-INF/faces-config.xml or the lack of a /WEB-INF/faces-confg.xml), however class ''{0}'' depends on a legacy facelet class.  The facelet artifact represented by this class will not be registered.
-jsf.view.cannot.render.response.committed=JSF1030: Unable to render view ''{0}'' as the response has already been committed.
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_de.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_de.properties
deleted file mode 100644
index a25bd20..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_de.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001: Verwalteter Bean {0} konnte nicht erstellt werden.
-jsf.cannot_instantiate_validator_error=JSF1005: Instanziierung des Validators vom Typ {0} nicht m\u00f6glich.
-jsf.cannot_instantiate_converter_error=JSF1006: Instanziierung des Konvertierungsprogramms vom Typ {0} nicht m\u00f6glich.
-jsf.duplicate_component_id_error=JSF1007: Doppelte Komponenten-ID {0} in Ansicht gefunden.
-jsf.redirect_failed_error=JSF1008: Umleitung zu Pfad {0} fehlgeschlagen.
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009: FaceServlet-Zuordnung f\u00fcr Servlet-Pfad {0} kann nicht ermittelt werden.
-jsf.illegal_view_id_error=JSF1010: Unzul\u00e4ssige Ansicht-ID {0}. Die ID muss mit ''''/'''' beginnen.
-jsf.util.no.adapter.ctor.available="JSF1016: Zielklasse ''{0}'' weist keinen Adapter-Konstruktor f\u00fcr die Annahme von ''{1}'' auf, es wird stattdessen eine neue Instanz erstellt.
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011: Ergebnis der Ausdruckauswertung f\u00fcr Attribut ''{0}'' hatte einen unerwarteten Typ.  Erwartet: {1}, aber empfangen: {2}.
-jsf.util_no_annotation_processed=JSF1014: Annotationsklasse ''{0}'' kann nicht geladen werden.  Folglich wird diese Annotation nicht verarbeitet.
-jsf.config.listener.version=Mojarra |version.string| f\u00fcr Kontext ''{0}'' wird initialisiert.
-jsf.config.listener.version.complete=Mojarra (|version.string|) f\u00fcr Kontext ''{0}'' wurde initialisiert.
-jsf.config.listener.predestroy.error=JSF1017: ''{0}'' wurde beim Verarbeiten der PreDestroy-Annotationen f\u00fcr Bean ''''{1}'' in Bereich ''{2}'' ausgel\u00f6st. Meldung: {3}
-jsf.viewhandler.requestpath.recursion=JSF1015: Anforderungspfad ''{0}'' beginnt mit einem oder mehreren Vorkommen der FacesServlet-Pr\u00e4fix-Pfad-Zuordnung ''{1}''.
-jsf.non_displayed_message=WARNUNG: FacesMessage(s) wurde(n) in die Warteschlange gestellt, aber m\u00f6glicherweise nicht angezeigt.{0}
-
-jsf.config.webconfig.configinfo=JSF1018: [{0}] Konfigurationsoption ''{1}'' ist auf ''{2}'' festgelegt.
-jsf.config.webconfig.configinfo.reset=JSF1019: [{0}] Konfigurationsoption ''{1}'' wurde auf ''{2}'' zur\u00fcckgesetzt.
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020: [{0}] Konfigurationsoption ''{1}'' wurde auf ENABLED zur\u00fcckgesetzt.
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020: [{0}] Konfigurationsoption ''{1}'' wurde auf DISABLED zur\u00fcckgesetzt.
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021: [{0}] Konfigurationsoption ''{1}'' - ENABLED
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021: [{0}] Konfigurationsoption ''{1}'' - DISABLED
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022: [{0}] Ung\u00fcltiger Wert ''{1}'' f\u00fcr Konfigurationsoption ''{2}''.  G\u00fcltige Werte sind ''{3}''.  Standard ''{4}'' wird wiederhergestellt.
-jsf.config.webconfig.enventryinfo=JSF1023: [{0}] Umgebungseintrag ''{1}'' verarbeitet, Wert ''{2}''
-jsf.config.webconfig.enventry.clientencrypt=JSF1024: [{0}] Clientstatusverschl\u00fcsselung: ENABLED
-jsf.config.webconfig.param.deprecated=JSF1025: [{0}] Kontextinitialisierungs-Parameter ''{1}'' wurde abgelehnt.  Die Option wird trotzdem konfiguriert, aber bitte verwenden Sie in Zukunft ''{2}''.
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025: [{0}] Kontextinitialiasierungsparameter ''{1}'' wurde abgelehnt und wird nicht wirksam.  
-jsf.config.webconfig.option.notconfigured=JSF1026: [{0}] Konfigurationsoption ''{1}'' wurde nicht konfiguriert
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027: [{0} Die ELResolvers f\u00fcr JSF wurden nicht im JSP-Container registriert.
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028: [{0}] Die ELResolvers f\u00fcr JSF wurden erfolgreich im JSP-Container registriert.
-jsf.spi.injection.provider_not_implemented=JSF1029: Die angegebene InjectionProvider-Implementierung ''{0}'' implementiert nicht die InjectionProvider-Schnittstelle. 
-jsf.spi.injection.provider_not_found=JSF1030: Die angegebene InjectionProvider-Implementierung ''{0}'' kann nicht geladen werden.
-jsf.spi.injection.provider_cannot_instantiate=JSF1031: Der angegebene InjectionProvider ''{0}'' kann nicht instanziiert werden.
-jsf.spi.injection.provider_configured=JSF1032: Die Ressourceneinspeisung wurde mit InjectionProvider ''{0}'' aktiviert.
-jsf.spi.injection.no_injection=JSF1033: Die Ressourceneinspeisung ist DISABLED.
-jsf.spi.serialization.provider_not_implemented=JSF1036: Die angegebene SerializationProvider-Implementierung ''{0}'' implementiert nicht die SerializationProvider-Schnittstelle. 
-jsf.spi.serialization.provider_not_found=JSF1037: Die angegebene SerializationProvider-Implementierung ''{0}'' kann nicht geladen werden.
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038: Der angegebene SerializationProvider ''{0}'' kann nicht instanziiert werden.
-jsf.spi.serialization.provider_configured=JSF1039: Die Ressourceneinspeisung wurde mit InjectionProvider "{0}'' aktiviert.
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034: Der Wert ''{1}'' f\u00fcr ''{0}''muss gleichm\u00e4\u00df\u00edg durch 2 geteilt werden k\u00f6nnen.  Standardwert ''{2}'' wird verwendet.
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035: Der Wert ''{1}'' f\u00fcr ''{0}'' ist keine Ganzzahl.  Standardwert ''{2}'' wird verwendet.
-jsf.core.taglib.invalid_locale_value=JSF1041: Das angegebene Gebietsschema ''{0}'' ist ung\u00fcltig.  Das Gebietsschema-Attribut muss ein g\u00fcltiger ISO 639-Sprachcode sein, der kein Land bzw. keine Variante enth\u00e4lt.
-jsf.core.taglib.invalid_language=JSF1042: Die angegebene Sprache ''{0}'' ist kein bekannter ISO 639-Sprachcode.
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043: {0} f\u00fcr Komponente ''{1}'' wird nicht verarbeitet - ''Verbindung'' und ''Typ'' sind null.
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043: PhaseListener (angegeben \u00fcber PhaseListenerTag) wird nicht verarbeitet - ''Verbindung'' und ''Typ'' sind null.
-jsf.core.web.injection.method_not_static=JSF1044: Methode ''{0}'', markiert mit der Annotation ''{1}'', kann nicht statisch sein.  Diese Methode wird ignoriert.
-jsf.core.web.injection.method_return_not_void=JSF1045: Methode ''{0}'', markiert mit der Annotation ''{1}'', kann nur leer zur\u00fcckgegeben werden. Diese Methode wird ignoriert.
-jsf.core.web.injection.method_no_params=JSF1046: Methode ''{0}'', markiert mit der Annotation ''{1}'', kann nicht \u00fcber Parameter verf\u00fcgen. Diese Methode wird ignoriert.
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047: Methode ''{0}'', markiert mit der Annotation ''{1}'', kann keine aktivierten Ausnahmen angeben.  Diese Methode wird ignoriert.
-jsf.core.injection.provider_generic_web_configured=JSF1048: PostConstruct/PreDestroy-Annotationen vorhanden.  Verwaltete Bean-Methoden, die mit diesen Annotationen markiert sind, lassen die entsprechenden Annotationen verarbeiten.
-jsf.spi.injection.provider.invalid_service_entry=JSF1049: Ung\u00fcltiger Diensteintrag ''{0}''.  Format muss ''''<DiscoverableInjectionProviderClass>:<DelegateClass>'''' sein.  Der Eintrag wird ignoriert.
-jsf.spi.injection.provider.discovery_error=JSF1050: Fehler beim Aufrufen von DiscoverableInjectionProvider.isProviderAppropriate(String) f\u00fcr Eintrag ''{0}''.  Der Eintrag wird ignoriert.
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051: Diensteintrag ''{0}'' erweitert DiscoverableInjectionProvider nicht.  Der Eintrag wird ignoriert.
-jsf.spi.provider.cannot_read_service=JSF1052:  Unerwarteter Fehler beim Verarbeiten des Diensteintrags ''{0}''.
-jsf.lifecycle.phaselistener.exception=JSF1053: Zielger\u00e4t: {0}, Phasen-ID: {1},  Ansicht-ID: {2}) Ausnahme w\u00e4hrend phase-listener-Ausf\u00fchrung ausgel\u00f6st: {3}
-jsf.lifecycle.phase.exception=JSF1054: (Phasen-ID: {0}, Ansicht-ID: {1}) Ausnahme w\u00e4hrend Phasenausf\u00fchrung ausgel\u00f6st: {2}
-jsf.config.cannot_resolve_entities=JSF1055:Lokale Ressource ''{0}'' kann nicht ermittelt werden.  Standardm\u00e4\u00dfige Entity-Aufl\u00f6sung wird verwendet, wenn eine Anforderung f\u00fcr ''{1}'' vorhanden ist.
-jsf.config.cannot_create_inputsource=JSF1056: InputSource f\u00fcr URL ''{0}'' kann nicht erstellt werden.
-jsf.config.navigation.from_view_id_leading_slash=JSF1057: Die Ressource ''{0}'', auf die die from-view-ID verweist, beginnt nicht mit ''''/''''.  Wird f\u00fcr Sie hinzugef\u00fcgt, muss aber korrigiert werden. 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058: Die Ressource ''{0}'', auf die to-view-ID f\u00fcr die Navigation von ''{1}'' verweist, beginnt nicht mit ''''/''''.  Wird f\u00fcr Sie hinzugef\u00fcgt, muss aber korrigiert werden.
-jsf.config.navigation.if_invalid_expression=JSF1070: Die Bedingung ''{0}'' f\u00fcr die Navigation von ''{1}'' ist kein zusammenh\u00e4ngender Wertausdruck und wird ignoriert.
-jsf.config.verifyobjects.development_only=JSF1059: WARNUNG!  Die Funktion com.sun.faces.verifyObjects bietet Entwicklern Unterst\u00fctzung, wenn sie keine Tools verwenden.  Sie darf nicht aktiviert werden, wenn eine IDE verwendet wird oder diese Anwendung zur Produktion bereitgestellt wird, da sie die Startzeit von Anwendungen beeintr\u00e4chtigt.
-jsf.config.verifyobjects.failures_detected=JSF1060: Die \u00dcberpr\u00fcfung erzeugte einen oder mehrere Fehler. Auf diese Meldung folgen Details.
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061: WARNUNG! Es wurde versucht, ein doppeltes Phasen-Zielger\u00e4t hinzuzuf\u00fcgen: {0}.  Dieses Duplikat wird ignoriert.
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062: WARNUNG!  Das Reaktionsobjekt, das von ExternalContext.getResponse() zur\u00fcckgegeben wurde, bietet keine Methode mit der Signatur ''public void flushContentToWrappedResponse()''.  Diese Methode wird f\u00fcr das Inhalt-Interweaving in einer JSP-Umgebung verwendet.  Daher wird der Inhalt nicht einwandfrei angezeigt.
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062: WARNUNG!  Das Reaktionsobjekt, das von ExternalContext.getResponse() zur\u00fcckgegeben wurde, bietet keine Methode mit der Signatur ''public boolean isBytes()''.  Diese Methode wird f\u00fcr das Inhalt-Interweaving in einer JSP-Umgebung verwendet.  Daher wird der Inhalt nicht einwandfrei angezeigt.
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062: WARNUNG!  Das Reaktionsobjekt, das von ExternalContext.getResponse() zur\u00fcckgegeben wurde, bietet keine Methode mit der Signatur ''public boolean isChars()''.  Diese Methode ist wird f\u00fcr das Inhalt-Interweaving in einer JSP-Umgebung verwendet.  Daher wird der Inhalt nicht einwandfrei angezeigt.
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062: WARNUNG!  Das von ExternalContext.getResponse() zur\u00fcckgegebene Reaktionsobjekt bietet keine Methode mit der Signatur ''public char[] getChars()''.  Diese Methode wird f\u00fcr das Inhalt-Interweaving in einer JSP-Umgebung verwendet.  Daher wird der Inhalt nicht einwandfrei angezeigt.
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062: WARNUNG!  Das von ExternalContext.getResponse() zur\u00fcckgegebene Reaktionsobjekt bietet keine Methode mit der Signatur ''public void resetBuffers''.  Diese Methode ist wird f\u00fcr das Inhalt-Interweaving in einer JSP-Umgebung verwendet.  Daher wird der Inhalt nicht einwandfrei angezeigt.
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063: WARNUNG! Der nicht serialisierbare Attributswert wird in HttpSession festgelegt (Schl\u00fcssel: {0}, Wertklasse: {1}).
-jsf.application.resource.unable_to_serve_from_library=JSF1064: Ressource {0} aus Bibliothek {1} kann nicht gefunden oder bedient werden.
-jsf.application.resource.unable_to_serve=JSF1064: Ressource {0} kann nicht gefunden oder bedient werden.
-jsf.application.resource.unable_to_determine_resource_version=JSF1065: Version f\u00fcr Ressourcennamen {0} kann nicht ermittelt werden.
-jsf.application.resource.unable_to_create_compression_directory=JSF1065: Verzeichnis {0} zum Speichern der komprimierten Ressource kann nicht erstellt werden.
-jsf.application.publish.event.base_type_mismatch=JSF1066: Quellobjekt {0} ist keine Instanz des angegebenen Basistyps {1}.  Ereignissuche tritt nicht auf.
-jsf.config.web_resource_not_found=JSF1067: Ressource {0}, die von der Konfigurationsoption {1} angegeben wird, kann nicht gefunden werden.  Die Ressource wird ignoriert.
-jsf.cannot_instantiate_component_error=JSF1068: Komponente mit Komponententyp {0} kann nicht instanziiert werden.
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069: Der JSF 2.0 Facelets ViewHandler wird deaktiviert, da ein \u00e4lterer FaceletViewHandler, {0}, ausdr\u00fccklich konfiguriert wurde. Wenn dieses Verhalten nicht erw\u00fcnscht ist, entfernen Sie den \u00e4lteren FaceletViewHandler und die Bibliothek aus Ihrer Anwendung.
-jsf.navigation_invalid_query_string=JSF1070: Ung\u00fcltige Abfragezeichenfolge in Navigationsergebnis {0}
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071: {0} erfasst w\u00e4hrend beforePhase()-Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log_after=JSF1072: {0} erfasst w\u00e4hrend afterPhase()-Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log=JSF1073: {0} erfasst w\u00e4hrend Verarbeitung von {1} : UIComponent-ClientId={2}, Message={3}
-jsf.managed.bean.duplicate=JSF1074: Verwalteter Bean mit dem Namen ''{0}'' wurde bereits registriert.  Ersetzen des bestehenden Klassentyps des verwalteten Beans {1} durch {2}.
-jsf.resource.mime.type.configration.invalid=JSF1075: Mime-Typ {0} stimmt nicht mit dem erwarteten Muster {1} \u00fcberein. Wird ignoriert.
-jsf.annotation.scanner.configuration.invalid=JSF1076: [{0}] {1} : ung\u00fcltiges Jar-Spezifizierungsformat.  Erwartete Jar:<jar-Name oder *>:<Paket oder *>.  Der Eintrag wird ignoriert.
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077: [{0}] {1} : doppelter Platzhaltereintrag f\u00fcr Jar-Namen gefunden.  Der Eintrag wird ignoriert.
-jsf.configuration.web.xml.parse.failed=JSF1078: Bereitstellungsbeschreibung f\u00fcr Kontext ''{0}" kann nicht beschrieben werden.
-jsf.configuration.absolute.order.duplicate.document=JSF1079: Es wurden mehrere Dokumente mit dem Namen {0} gefunden, w\u00e4hrend die absolute Auftragserteilung verarbeitet wurde.  Nur das erste Dokument mit Namen wird verarbeitet.
-jsf.configuration.absolute.order.missing.document=JSF1080: Dokument mit dem Namen ''{0}'' kann w\u00e4hrend der Verarbeitung der absoluten Auftragserteilung nicht ausgef\u00fchrt werden.
-jsf.configuration.web.faces.config.contains.ordering=JSF1081: /WEB-INF/faces-config.xml enth\u00e4lt <ordering>-Elemente.  Sie werden ignoriert.
-jsf.configuration.illegal.eager.bean=JSF1082: Instanziierung des verwalteten Beans ist nur f\u00fcr Beans im Anwendungsbereich zul\u00e4ssig.  Der verwaltete Bean ''{0}'' ist als bereit konfiguriert, aber der Bereich ''{1}'' ist ung\u00fcltig.
-jsf.composite.component.insertchildren.missing.template=JSF1083: Besitzende Kompositkomponenten-Vorlage f\u00fcr insertChildren-Behandlungsroutine kann an folgendem Speicherort nicht gefunden werden: {0}"
-jsf.composite.component.insertfacet.missing.template=JSF1084: Besitzende Kompositkomponenten-Vorlage f\u00fcr insertFacer-Behandlungsroutine kann an folgendem Speicherort nicht gefunden werden: {0}"
-jsf.managed.bean.custom.scope.eval.null=JSF1085: Benutzerdefinierter Bereich ''{0}'' wurde als null bewertet.  Verwalteter Bean wurde nicht in Bereich erweitert.
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086: Benutzerdefinierter Bereich ''{0}'' wurde als null bewertet.  Es kann nicht ermittelt werden, ob der verwaltete Bean existiert.
-jsf.facelets.error.page.response.committed=JSF1087: Facelets-Fehlerseite kann nicht generiert werden, da die Reaktion bereits \u00fcbermittelt wurde.
-jsf.state.server.cannot.parse.int.option=JSF1088: Fehler beim Analysieren des Kontext-ini-Parameters {0}.  Es wird stattdessen Standardwert {1} verwendet.
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089: NavigationHandler muss eine Instanz von ConfigurableNavigationHandler sein, um eine UIOutputTarget-Komponente {0} zu verwenden.
-jsf.outcometarget.navigation.case.not.resolved=JSF1090: Navigations-Fall wurde f\u00fcr Komponente {0} nicht aufgel\u00f6st.
-jsf.externalcontext.no.mime.type.found=JSF1091: F\u00fcr Datei {0} konnte kein Mime-Typ gefunden werden.  F\u00fcgen Sie eine Mime-Typ-Zuordnung zur web.xml der Anwendung hinzu, um dies aufzul\u00f6sen.
-jsf.config.legacy.facelet.warning=JSF1029:  Die Anwendung hat Version 2.0 (entweder ausdr\u00fccklich durch die Version von /WEB-INF/faces-config.xml oder eine fehlende /WEB-INF/faces-confg.xml), jedoch h\u00e4ngt Klasse ''{0}'' von einer Legacy-Facelet-Klasse ab.  Das von dieser Klasse registrierte Facelet-Artefakt wird nicht registriert.
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_es.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_es.properties
deleted file mode 100644
index 3cb78be..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_es.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001: no se pudo crear el bean administrado {0}.
-jsf.cannot_instantiate_validator_error=JSF1005: no se puede crear una instancia para el validador del tipo {0}
-jsf.cannot_instantiate_converter_error=JSF1006: no se puede crear una instancia para el conversor del tipo {0}
-jsf.duplicate_component_id_error=JSF1007: se ha encontrado un ID de componente duplicado {0} en la vista.
-jsf.redirect_failed_error=JSF1008: error al redirigir a la ruta {0}
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009: no se puede determinar la asignaci\u00f3n FaceServlet para la ruta del servlet {0}.
-jsf.illegal_view_id_error=JSF1010: ID de vista no v\u00e1lido {0}. El ID debe comenzar con ''/''
-jsf.util.no.adapter.ctor.available="JSF1016: la clase de destino ''{0}'' no tiene un constructor de adaptador para aceptar ''{1}'''; se crear\u00e1 en su lugar una nueva instancia.
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011: la evaluaci\u00f3n de la expresi\u00f3n del atributo ''{0}'' ha devuelto un tipo inesperado.  Se esperaba {1}, pero se recibi\u00f3 {2}.
-jsf.util_no_annotation_processed=JSF1014: no se puede cargar la clase de anotaci\u00f3n ''{0}''.  Por lo tanto, no se procesar\u00e1 esta anotaci\u00f3n.
-jsf.config.listener.version=Inicializando Mojarra |version.string| para el contexto ''{0}''
-jsf.config.listener.version.complete=Se ha completado la inicializaci\u00f3n de Mojarra (|version.string|) para el contexto ''{0}''
-jsf.config.listener.predestroy.error=JSF1017: ''{0}''se ha generado al administrar las anotaciones PreDestroy para el bean ''{1}'' en el \u00e1mbito ''{2}''.  Mensaje: {3}
-jsf.viewhandler.requestpath.recursion=JSF1015: la ruta de solicitud ''{0}'' comienza con una o varias apariciones de la asignaci\u00f3n de ruta de prefijo de FacesServlet ''{1}''.
-jsf.non_displayed_message=ADVERTENCIA: FacesMessage(s) se han puesto en la cola, pero es posible que no se muestren.{0}
-
-jsf.config.webconfig.configinfo=JSF1018: [{0}] la opci\u00f3n de configuraci\u00f3n ''{1}'' se ha definido como ''{2}''
-jsf.config.webconfig.configinfo.reset=JSF1019: [{0}] la opci\u00f3n de configuraci\u00f3n ''{1}'' se ha restablecido como ''{2}''
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020: [{0}] la opci\u00f3n de configuraci\u00f3n ''{1}'' se ha restablecido como ACTIVADO
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020: [{0}] la opci\u00f3n de configuraci\u00f3n ''{1}'' se ha restablecido como DESACTIVADO
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021: [{0}] opci\u00f3n de configuraci\u00f3n ''{1}'' - ACTIVADO
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021: [{0}] opci\u00f3n de configuraci\u00f3n ''{1}'' - DESACTIVADO
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022: [{0}] valor no v\u00e1lido ''{1}'' para la opci\u00f3n de configuraci\u00f3n ''{2}''.  Los valores v\u00e1lidos son '{3}''.  Retrocediendo al valor predeterminado ''{4}''.
-jsf.config.webconfig.enventryinfo=JSF1023: [{0}] entrada de entorno ''{1}'' procesada, valor ''{2}''
-jsf.config.webconfig.enventry.clientencrypt=JSF1024: [{0}] cifrado de estado de cliente: ACTIVADO
-jsf.config.webconfig.param.deprecated=JSF1025: [{0}] el par\u00e1metro de inicializaci\u00f3n del contexto''{1}'' se ha desaprobado.  La opci\u00f3n se configurar\u00e1, en lo sucesivo utilice ''{2}''.
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025: [{0}] el par\u00e1metro de inicializaci\u00f3n del contexto''{1}'' se ha desaprobado y no tendr\u00e1 efecto.  
-jsf.config.webconfig.option.notconfigured=JSF1026: [{0}] opci\u00f3n de configuraci\u00f3n ''{1}'' no configurada
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027: [{0}] los ELResolvers para JSF no se han registrado con el contenedor JSP.
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028: [{0}] los ELResolvers para JSF se han registrado con \u00e9xito con el contenedor JSP.
-jsf.spi.injection.provider_not_implemented=JSF1029: la implementaci\u00f3n especificada de InjectionProvider ''{0}'' no implementa la interfaz de InjectionProvider. 
-jsf.spi.injection.provider_not_found=JSF1030: la implementaci\u00f3n especificada de InjectionProvider ''{0}'' no se puede cargar.
-jsf.spi.injection.provider_cannot_instantiate=JSF1031: no se puede crear una instancia de la implementaci\u00f3n InjectionProvider ''{0}'' especificada.
-jsf.spi.injection.provider_configured=JSF1032: inyecci\u00f3n de recursos ACTIVADA con InjectionProvider ''{0}''.
-jsf.spi.injection.no_injection=JSF1033: la inyecci\u00f3n de recursos est\u00e1 DESACTIVADA.
-jsf.spi.serialization.provider_not_implemented=JSF1036: la implementaci\u00f3n especificada de SerializationProvider ''{0}'' no implementa la interfaz de SerializationProvider. 
-jsf.spi.serialization.provider_not_found=JSF1037: la implementaci\u00f3n especificada de SerializationProvider ''{0}'' no se puede cargar.
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038: no se puede crear una instancia de la implementaci\u00f3n SerializationProvider ''{0}'' especificada.
-jsf.spi.serialization.provider_configured=JSF1039: inyecci\u00f3n de recursos ACTIVADA con InjectionProvider ''{0}''.
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034: el valor ''{1}'' para ''{0}'' debe ser divisible por 2.  Se utilizar\u00e1 por defecto ''{2}''.
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035: el valor ''{1}'' para ''{0}'' no es un n\u00famero entero.  Se utilizar\u00e1 por defecto ''{2}''.
-jsf.core.taglib.invalid_locale_value=JSF1041: la configuraci\u00f3n regional especificada, ''{0}'', no es v\u00e1lida.  El valor del atributo de la ubicaci\u00f3n debe ser un lenguaje de c\u00f3digo ISO 639 v\u00e1lido que no contenga un pa\u00eds ni una variante.
-jsf.core.taglib.invalid_language=JSF1042: el idioma especificado, ''{0}'', no es un c\u00f3digo de idioma ISO 639 conocido.
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043: {0} para el componente ''{1}'' no se procesar\u00e1 - tanto 'binding' como 'type' son nulos.
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043: PhaseListener (especificado a trav\u00e9s de PhaseListenerTag) no se procesar\u00e1 - tanto 'binding' como 'type' son nulos
-jsf.core.web.injection.method_not_static=JSF1044: el m\u00e9todo ''{0}'' marcado con la anotaci\u00f3n ''{1}'' no puede ser est\u00e1tico.  Se ignorar\u00e1 este m\u00e9todo.
-jsf.core.web.injection.method_return_not_void=JSF1045: el m\u00e9todo ''{0}'' marcado con la anotaci\u00f3n ''{1}'' s\u00f3lo puede devolver un valor vac\u00edo.  Se ignorar\u00e1 este m\u00e9todo.
-jsf.core.web.injection.method_no_params=JSF1046: el m\u00e9todo ''{0}'' marcado con la anotaci\u00f3n ''{1}'' no puede tener cualquier par\u00e1metro.  Se ignorar\u00e1 este m\u00e9todo.
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047: el m\u00e9todo ''{0}'' marcado con la anotaci\u00f3n ''{1}'' no puede declarar excepciones marcadas.  Se ignorar\u00e1 este m\u00e9todo.
-jsf.core.injection.provider_generic_web_configured=JSF1048: hay presentes anotaciones PostConstruct/PreDestroy.  Los m\u00e9todos de beans administrados marcados con estas anotaciones procesar\u00e1n dichas anotaciones.
-jsf.spi.injection.provider.invalid_service_entry=JSF1049: entrada de servicio no v\u00e1lida ''{0}''.  El formato deber\u00eda ser ''<DiscoverableInjectionProviderClass>:<DelegateClass>''.  Se ignorar\u00e1 la entrada.
-jsf.spi.injection.provider.discovery_error=JSF1050: error al invocar DiscoverableInjectionProvider.isProviderAppropriate(Cadena) para la entrada ''{0}''.  Se ignorar\u00e1 la entrada.
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051: la entrada de servicio ''{0}'' no extiende DiscoverableInjectionProvider.  Se ignorar\u00e1 la entrada.
-jsf.spi.provider.cannot_read_service=JSF1052: error inesperado al procesar la entrada de servicio ''{0}''.
-jsf.lifecycle.phaselistener.exception=JSF1053: (Escucha: {0}, ID de fase: {1}, ID de vista: {2}) se ha arrojado una excepci\u00f3n durante la ejecuci\u00f3n de fase-escucha: {3}
-jsf.lifecycle.phase.exception=JSF1054: (ID de fase: {0}, ID de vista: {1}) se ha arrojado una excepci\u00f3n durante la ejecuci\u00f3n de fase: {2}
-jsf.config.cannot_resolve_entities=JSF1055: no se puede ubicar el recurso local ''{0}''.  Se utilizar\u00e1 la resoluci\u00f3n de entidad est\u00e1ndar cuando haya una solicitud presente para ''{1}''.
-jsf.config.cannot_create_inputsource=JSF1056: no se puede crear InputSource para la URL ''{0}''.
-jsf.config.navigation.from_view_id_leading_slash=JSF1057: el recurso al que hace referencia from-view-id, ''{0}'', no empieza por ''/''.  Se a\u00f1adir\u00e1 por usted, pero se debe corregir. 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058: el recurso al que hace referencia to-view-id, ''{0}'', para navegaci\u00f3n desde ''{1}'', no empieza por ''/''.  Se a\u00f1adir\u00e1 por usted, pero se debe corregir.
-jsf.config.navigation.if_invalid_expression=JSF1070: la condici\u00f3n ''{0}'' para navegaci\u00f3n desde ''{1}'' no es una expresi\u00f3n de valor contiguo y ser\u00e1 ignorada.
-jsf.config.verifyobjects.development_only=JSF1059: ADVERTENCIA  La funci\u00f3n com.sun.faces.verifyObjects tiene como objetivo ayudar a los desarrolladores que no utilizan herramientas.  No se debe habilitar si se utiliza un IDE o si esta aplicaci\u00f3n se est\u00e1 implementando para producci\u00f3n y afectar\u00e1 a los plazos de inicio de la aplicaci\u00f3n.
-jsf.config.verifyobjects.failures_detected=JSF1060: se han producido uno o varios fallos en la verificaci\u00f3n.  Los detalles se indican a continuaci\u00f3n de este mensaje.
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061: ADVERTENCIA Se ha intentado a\u00f1adir una escucha de fase duplicada: {0}.  Se ignorar\u00e1 este duplicado.
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062: ADVERTENCIA  El objeto de respuesta devuelto por ExternalContext.getResponse() no proporciona un m\u00e9todo con firma 'public void flushContentToWrappedResponse()'.  Este m\u00e9todo es necesario para proporcionar trenzado de contenido en un entorno JSP.  Por este motivo, el contenido no se mostrar\u00e1 correctamente.
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062: ADVERTENCIA  El objeto de respuesta devuelto por ExternalContext.getResponse() no proporciona un m\u00e9todo con firma 'public boolean isBytes()'.  Este m\u00e9todo es necesario para proporcionar trenzado de contenido en un entorno JSP.  Por este motivo, el contenido no se mostrar\u00e1 correctamente.
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062: ADVERTENCIA  El objeto de respuesta devuelto por ExternalContext.getResponse() no proporciona un m\u00e9todo con firma 'public boolean isChars()'.  Este m\u00e9todo es necesario para proporcionar trenzado de contenido en un entorno JSP.  Por este motivo, el contenido no se mostrar\u00e1 correctamente.
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062: ADVERTENCIA  El objeto de respuesta devuelto por ExternalContext.getResponse() no proporciona un m\u00e9todo con firma 'public char[] getChars()'. Este m\u00e9todo es necesario para proporcionar trenzado de contenido en un entorno JSP.  Por este motivo, el contenido no se mostrar\u00e1 correctamente.
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062: ADVERTENCIA  El objeto de respuesta devuelto por ExternalContext.getResponse() no proporciona un m\u00e9todo con firma 'public void resetBuffers'.  Este m\u00e9todo es necesario para proporcionar trenzado de contenido en un entorno JSP.  Por este motivo, el contenido no se mostrar\u00e1 correctamente.
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063: ADVERTENCIA Definiendo valor de atributo no serializable en HttpSession: (clave: {0}, clase de valor: {1}).
-jsf.application.resource.unable_to_serve_from_library=JSF1064: no se encuentra o sirve el recurso, {0}, desde la biblioteca, {1}.
-jsf.application.resource.unable_to_serve=JSF1064: no se encuentra o sirve el recurso, {0}.
-jsf.application.resource.unable_to_determine_resource_version=JSF1065: no se puede determinar la versi\u00f3n para el nombre de recurso {0}.
-jsf.application.resource.unable_to_create_compression_directory=JSF1065: no se puede crear el directorio {0} para almacenar el recurso comprimido.
-jsf.application.publish.event.base_type_mismatch=JSF1066: el objeto de origen {0} no es una instancia del tipo de base proporcionado {1}.  No se producir\u00e1 la b\u00fasqueda de eventos.
-jsf.config.web_resource_not_found=JSF1067: no se encuentra el recurso {0} especificado por la opci\u00f3n de configuraci\u00f3n {1}.  Se ignorar\u00e1 este recurso.
-jsf.cannot_instantiate_component_error=JSF1068: no se puede crear una instancia para el componente con component-type {0}
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069: se han desactivado FaceletsViewHandler JSF 2.0 ya que se ha configurado expl\u00edcitamente un FaceletViewHandler, {0} m\u00e1s antiguo. Este comportamiento no es el deseado, elimine de la aplicaci\u00f3n el FaceletViewHandler m\u00e1s antiguo y la biblioteca.
-jsf.navigation_invalid_query_string=JSF1070: cadena de consulta no v\u00e1lida en el resultado de navegaci\u00f3n {0}
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071: se ha interceptado {0} durante el procesamiento beforePhase() de {1} : UIComponent-ClientId={2}, Mensaje={3}
-jsf.context.exception.handler.log_after=JSF1072: se ha interceptado {0} durante el procesamiento afterPhase() de {1} : UIComponent-ClientId={2}, Mensaje={3}
-jsf.context.exception.handler.log=JSF1073: se ha interceptado {0} durante el procesamiento de {1} : UIComponent-ClientId={2}, Mensaje={3}
-jsf.managed.bean.duplicate=JSF1074: ya se ha registrado el bean administrado denominado ''{0}''.  Sustituyendo el tipo de clase de bean administrado {1} existente por {2}.
-jsf.resource.mime.type.configration.invalid=JSF1075: el tipo MIME {0} no coincide con el patr\u00f3n esperado {1}. Ignorando.
-jsf.annotation.scanner.configuration.invalid=JSF1076: [{0}] {1}: formato de especificaci\u00f3n jar no v\u00e1lido.  jar esperado:<nombre jar o *>:<paquete o *>.  Se ignorar\u00e1 la entrada.
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077: [{0}] {1}: se ha encontrado una entrada de comod\u00edn duplicada para el nombre jar.  Se ignorar\u00e1 la entrada.
-jsf.configuration.web.xml.parse.failed=JSF1078: no se puede procesar el descriptor de implementaci\u00f3n para el contexto ''{0}''.
-jsf.configuration.absolute.order.duplicate.document=JSF1079: se han encontrado varios documentos denominados {0} al procesar la ordenaci\u00f3n absoluta.  Procesando s\u00f3lo los primeros documentos con nombre.
-jsf.configuration.absolute.order.missing.document=JSF1080: no se encuentra el documento denominado ''{0}'' al realizar el procesamiento de ordenaci\u00f3n absoluta.
-jsf.configuration.web.faces.config.contains.ordering=JSF1081: /WEB-INF/faces-config.xml contiene <ordering> elementos.  Se ignorar\u00e1n.
-jsf.configuration.illegal.eager.bean=JSF1082: la creaci\u00f3n de instancias para bean administrado Eager s\u00f3lo se permite para beans con \u00e1mbito de aplicaci\u00f3n.  El bean administrado ''{0}'' se ha configurado como eager, pero el \u00e1mbito ''{1}'' no es v\u00e1lido.
-jsf.composite.component.insertchildren.missing.template=JSF1083: no se encuentra el componente de propiedad compuesta para el controlador insertChildren en la ubicaci\u00f3n: {0}"
-jsf.composite.component.insertfacet.missing.template=JSF1084: no se encuentra el componente de propiedad compuesta para el controlador insertFacet en la ubicaci\u00f3n: {0}"
-jsf.managed.bean.custom.scope.eval.null=JSF1085: el \u00e1mbito personalizado ''{0}'' se ha evaluado como nulo.  El bean administrado no se ha insertado en el \u00e1mbito.
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086: el \u00e1mbito personalizado ''{0}'' se ha evaluado como nulo.  No se puede determinar si existe el bean administrado.
-jsf.facelets.error.page.response.committed=JSF1087: no se puede generar la p\u00e1gina de error de Facelets dado que la respuesta ya se ha confirmado.
-jsf.state.server.cannot.parse.int.option=JSF1088: error al analizar el par\u00e1metro de inicio de contexto {0}.  Se utiliza en su lugar el valor predeterminado {1}.
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089: NavigationHandler debe ser una instancia de ConfigurableNavigationHandler para utilizar un componente UIOutputTarget {0}.
-jsf.outcometarget.navigation.case.not.resolved=JSF1090: no se ha resuelto el tipo de navegaci\u00f3n para el componente {0}.
-jsf.externalcontext.no.mime.type.found=JSF1091: no se ha encontrado ning\u00fan tipo MIME para el archivo {0}.  Para resolverlo, agregue una asignaci\u00f3n de tipo MIME al archivo web.xml de la aplicaci\u00f3n.
-jsf.config.legacy.facelet.warning=JSF1029: se ha asignado como versi\u00f3n de aplicaci\u00f3n la 2.0 (bien expl\u00edcitamente a trav\u00e9s de la versi\u00f3n de /WEB-INF/faces-config.xml o por la falta de /WEB-INF/faces-confg.xml), no obstante la clase ''{0}'' depende de una clase de facelet tradicional.  No se registrar\u00e1 el artefacto de facelet representado por esta clase.
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_fr.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_fr.properties
deleted file mode 100644
index f1eaf3d..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_fr.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001 : Impossible de cr\u00e9er le bean g\u00e9r\u00e9 {0}.
-jsf.cannot_instantiate_validator_error=JSF1005 : Impossible d''instancier un valideur de type {0}
-jsf.cannot_instantiate_converter_error=JSF1006: Impossible d''instancier un convertisseur de type {0}
-jsf.duplicate_component_id_error=JSF1007 : ID de composant {0} en double dans la vue.
-jsf.redirect_failed_error=JSF1008 : Echec de la redirection vers le chemin {0}
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009 : Impossible de d\u00e9terminer le mappage FaceServlet pour le chemin d''acc\u00e8s au servlet {0}
-jsf.illegal_view_id_error=JSF1010 : ID de vue {0} non admis. L''ID doit commencer par ''''/''''.
-jsf.util.no.adapter.ctor.available="JSF1016 : La classe cible ''{0}'' n''a pas de constructeur d''adaptateur pour accepter ''{1}'', et cr\u00e9e donc une nouvelle instance \u00e0 la place.
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011 : L''\u00e9valuation de l''expression de l''attribut ''{0}'' a donn\u00e9 un type inattendu.  {1} \u00e9tait attendu, mais {2} a \u00e9t\u00e9 re\u00e7u.
-jsf.util_no_annotation_processed=JSF1014 : Impossible de charger la classe d''annotation ''{0}''.  Cette annotation ne sera donc pas trait\u00e9e.
-jsf.config.listener.version=Initialisation de Mojarra |version.string| pour le contexte ''{0}''
-jsf.config.listener.version.complete=Initialisation de Mojarra termin\u00e9e (|version.string|) pour le contexte ''{0}''
-jsf.config.listener.predestroy.error=JSF1017 : ''{0}'' \u00e9mis lors du traitement de la ou des annotations PreDestroy pour le bean ''{1}'' dans l''\u00e9tendue ''{2}''.  Message : {3}
-jsf.viewhandler.requestpath.recursion=JSF1015 : Le chemin de requ\u00eate ''{0}'' commence par une ou plusieurs occurrences du mappage du pr\u00e9fixe FacesServlet ''{1}''.
-jsf.non_displayed_message=AVERTISSEMENT : Les FacesMessage(s) ont \u00e9t\u00e9 mis en file d''attente, mais n''ont peut-\u00eatre pas \u00e9t\u00e9 affich\u00e9s.{0}
-
-jsf.config.webconfig.configinfo=JSF1018 : [{0}] option de configuration ''{1}'' d\u00e9finie sur ''{2}''
-jsf.config.webconfig.configinfo.reset=JSF1019 : [{0}] option de configuration ''{1}'' r\u00e9initialis\u00e9e sur ''{2}''
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020 : [{0}] option de configuration ''{1}'' r\u00e9initialis\u00e9e sur Activ\u00e9e
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020 : [{0}] option de configuration ''{1}'' r\u00e9initialis\u00e9e sur D\u00e9sactiv\u00e9e
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021 : [{0}] option de configuration ''{1}'' - Activ\u00e9e
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021 : [{0}] option de configuration ''{1}'' - D\u00e9sactiv\u00e9e
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022 : [{0}] valeur incorrecte ''{1}'' pour l''option de configuration ''{2}''.  Les valeurs valides sont ''{3}''.  R\u00e9tablissement de la valeur par d\u00e9faut ''{4}''
-jsf.config.webconfig.enventryinfo=JSF1023 : [{0}] Entr\u00e9e d''environnement ''{1}'' trait\u00e9e, valeur ''{2}''
-jsf.config.webconfig.enventry.clientencrypt=JSF1024 : [{0}] Cryptage de l''\u00e9tat du client\u00a0: Activ\u00e9
-jsf.config.webconfig.param.deprecated=JSF1025 : [{0}] le param\u00e8tre d''initialisation du contexte ''{1}'' est d\u00e9sapprouv\u00e9.  Cette option sera toujours configur\u00e9e, mais \u00e0 l''avenir, utilisez ''{2}''.
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025 : [{0}] le param\u00e8tre d''initialisation du contexte ''{1}'' est d\u00e9sapprouv\u00e9 et n''aura aucun effet.  
-jsf.config.webconfig.option.notconfigured=JSF1026: [{0}] L''option de configuration ''{1}'' n''est pas configur\u00e9e.
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027 : [{0}] Les objets ELResolvers de JSF n''ont pas \u00e9t\u00e9 enregistr\u00e9s avec le conteneur JSP.
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028 : [{0}] Les objets ELResolvers de JSF ont bien \u00e9t\u00e9 enregistr\u00e9s avec le conteneur JSP.
-jsf.spi.injection.provider_not_implemented=JSF1029 : L''impl\u00e9mentation sp\u00e9cifi\u00e9e d''InjectionProvider ''{0}'' n''impl\u00e9mente pas l''interface InjectionProvider. 
-jsf.spi.injection.provider_not_found=JSF1030 : Impossible de charger l''impl\u00e9mentation sp\u00e9cifi\u00e9e d''InjectionProvider ''{0}''
-jsf.spi.injection.provider_cannot_instantiate=JSF1031 : Impossible d''instancier l''InjectionProvider sp\u00e9cifi\u00e9 ''{0}''
-jsf.spi.injection.provider_configured=JSF1032 : Injection des ressources ACTIV\u00c9E \u00e0 l''aide de l''InjectionProvider ''{0}''.
-jsf.spi.injection.no_injection=JSF1033 : L''injection des ressources est D\u00e9sactiv\u00e9e.
-jsf.spi.serialization.provider_not_implemented=JSF1036 : L''impl\u00e9mentation sp\u00e9cifi\u00e9e de SerializationProvider ''{0}'' n''impl\u00e9mente pas l''interface SerializationProvider. 
-jsf.spi.serialization.provider_not_found=JSF1037 : Impossible de charger l''impl\u00e9mentation sp\u00e9cifi\u00e9e du SerializationProvider ''{0}''
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038 : Impossible d''instancier le SerializationProvider sp\u00e9cifi\u00e9 ''{0}''
-jsf.spi.serialization.provider_configured=JSF1039 : Injection des ressources ACTIV\u00c9E \u00e0 l''aide de l''InjectionProvider ''{0}''.
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034 : La valeur ''{1}'' de ''{0}'' doit \u00eatre divisible par 2.  \u00c9tablissement de la valeur par d\u00e9faut ''{2}''
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035 : La valeur ''{1}'' de ''{0}'' n''est pas un nombre entier.  \u00c9tablissement de la valeur par d\u00e9faut ''{2}''
-jsf.core.taglib.invalid_locale_value=JSF1041 : La langue sp\u00e9cifi\u00e9e ''{0}'' est incorrecte.  La valeur de l''attribut de langue doit \u00eatre un code de langue ISO\u00a0639 valide ne contenant ni pays ni variante.
-jsf.core.taglib.invalid_language=JSF1042 : La langue sp\u00e9cifi\u00e9e ''{0}'' n''est pas un code de langue ISO\u00a0639 connu.
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043 : Le {0} du composant ''{1}'' ne sera pas trait\u00e9 car les valeurs de ''binding'' et ''type'' sont nulles.
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043 : Le PhaseListener (sp\u00e9cifi\u00e9 via PhaseListenerTag) ne sera pas trait\u00e9 car les valeurs de ''binding'' et ''type'' sont nulles.
-jsf.core.web.injection.method_not_static=JSF1044 : La m\u00e9thode ''{0}'' marqu\u00e9e avec l''annotation ''{1}'' ne peut pas \u00eatre statique.  Cette m\u00e9thode sera ignor\u00e9e.
-jsf.core.web.injection.method_return_not_void=JSF1045 : La m\u00e9thode ''{0}'' marqu\u00e9e avec l''annotation ''{1}'' ne peut renvoyer que la valeur void.  Cette m\u00e9thode sera ignor\u00e9e.
-jsf.core.web.injection.method_no_params=JSF1046 : La m\u00e9thode ''{0}'' marqu\u00e9e avec l''annotation ''{1}'' ne peut pas avoir de param\u00e8tres.  Cette m\u00e9thode sera ignor\u00e9e.
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047 : La m\u00e9thode ''{0}'' marqu\u00e9e avec l''annotation ''{1}'' ne peut d\u00e9clarer aucune exception v\u00e9rifi\u00e9e.  Cette m\u00e9thode sera ignor\u00e9e.
-jsf.core.injection.provider_generic_web_configured=JSF1048 : Pr\u00e9sence d''annotations PostConstruct/PreDestroy  Les m\u00e9thodes de beans g\u00e9r\u00e9s marqu\u00e9es avec ces annotations auront des annotations dites trait\u00e9es.
-jsf.spi.injection.provider.invalid_service_entry=JSF1049 : Entr\u00e9e de service non valide ''{0}''.  Le format doit \u00eatre ''''<DiscoverableInjectionProviderClass>:<DelegateClass>''''.  Cette entr\u00e9e sera ignor\u00e9e.
-jsf.spi.injection.provider.discovery_error=JSF1050 : Erreur lors de l''invocation de DiscoverableInjectionProvider.isProviderAppropriate(String) pour l''entr\u00e9e ''{0}''.  Cette entr\u00e9e sera ignor\u00e9e.
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051 : L''entr\u00e9e du service ''{0}'' n''\u00e9tend pas le DiscoverableInjectionProvider.  Cette entr\u00e9e sera ignor\u00e9e.
-jsf.spi.provider.cannot_read_service=JSF1052 : Erreur inattendue lors du traitement de l''entr\u00e9e du service ''{0}''.
-jsf.lifecycle.phaselistener.exception=JSF1053 : (Listener : {0}, ID de la Phase : {1}, ID de la vue : {2}) Exception \u00e9mise lors de l''ex\u00e9cution du phase-listener\u00a0: {3}
-jsf.lifecycle.phase.exception=JSF1054 : (ID de la Phase : {0}, ID de la vue : {1}) Exception \u00e9mise lors de l''ex\u00e9cution de la phase : {2}
-jsf.config.cannot_resolve_entities=JSF1055 : Impossible de localiser la ressource locale ''{0}''.  La r\u00e9solution standard des entit\u00e9s sera utilis\u00e9e en cas de pr\u00e9sence d''une requ\u00eate pour ''{1}''.
-jsf.config.cannot_create_inputsource=JSF1056 : Impossible de cr\u00e9er une InputSource pour l''URL ''{0}''.
-jsf.config.navigation.from_view_id_leading_slash=JSF1057 : La ressource r\u00e9f\u00e9renc\u00e9e par from-view-id, ''{0}'', ne commence pas par ''''/''''.  Ce caract\u00e8re sera ajout\u00e9 pour vous, mais l''erreur doit \u00eatre corrig\u00e9e. 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058 : La ressource r\u00e9f\u00e9renc\u00e9e par to-view-id, ''{0}'', pour la navigation depuis ''{1}'', ne commence pas par ''''/''''.  Ce caract\u00e8re sera ajout\u00e9 pour vous, mais l''erreur doit \u00eatre corrig\u00e9e.
-jsf.config.navigation.if_invalid_expression=JSF1070 : La condition ''{0}'' pour la navigation depuis ''{1}'' n''est pas une expression \u00e0 valeur contig\u00fce et sera ignor\u00e9e.
-jsf.config.verifyobjects.development_only=JSF1059 : AVERTISSEMENT !  La fonctionnalit\u00e9 com.sun.faces.verifyObjects est destin\u00e9e \u00e0 aider les d\u00e9veloppeurs \u00e0 se passer des outils.  Elle ne doit pas \u00eatre activ\u00e9e si vous utilisez un EDI, ou si cette application est d\u00e9ploy\u00e9e en production car cela risque d''affecter la dur\u00e9e du d\u00e9marrage.
-jsf.config.verifyobjects.failures_detected=JSF1060 : La v\u00e9rification a provoqu\u00e9 une ou plusieurs d\u00e9faillances.  Des d\u00e9tails suivent ce message.
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061 : AVERTISSEMENT ! Une tentative d''ajout d''un listener de phase en double s''est produite\u00a0: {0}.  Ce double sera ignor\u00e9.
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062 : AVERTISSEMENT !  L''objet r\u00e9ponse renvoy\u00e9 par la m\u00e9thode ExternalContext.getResponse() ne fournit pas de m\u00e9thode avec signature ''public void flushContentToWrappedResponse()''.  Cette m\u00e9thode est n\u00e9cessaire pour fournir l''inter-tramage du contenu dans un environnement JSP.  En son absence, le contenu ne s''affichera pas correctement.
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062 : AVERTISSEMENT !  L''objet r\u00e9ponse renvoy\u00e9 par la m\u00e9thode ExternalContext.getResponse() ne fournit pas de m\u00e9thode avec signature ''public boolean isBytes()''. Cette m\u00e9thode est n\u00e9cessaire pour fournir l''inter-tramage du contenu dans un environnement JSP.  En son absence, le contenu ne s''affichera pas correctement.
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062 : AVERTISSEMENT !  L''objet r\u00e9ponse renvoy\u00e9 par la m\u00e9thode ExternalContext.getResponse() ne fournit pas de m\u00e9thode avec signature ''public boolean isChars()''. Cette m\u00e9thode est n\u00e9cessaire pour fournir l''inter-tramage du contenu dans un environnement JSP.  En son absence, le contenu ne s''affichera pas correctement.
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062 : AVERTISSEMENT !  L''objet r\u00e9ponse renvoy\u00e9 par la m\u00e9thode ExternalContext.getResponse() ne fournit pas de m\u00e9thode avec signature ''public char[] getChars()''. Cette m\u00e9thode est n\u00e9cessaire pour fournir l''inter-tramage du contenu dans un environnement JSP.  En son absence, le contenu ne s''affichera pas correctement.
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062 : AVERTISSEMENT !  L''objet r\u00e9ponse renvoy\u00e9 par la m\u00e9thode ExternalContext.getResponse() ne fournit pas de m\u00e9thode avec signature ''public void resetBuffers''. Cette m\u00e9thode est n\u00e9cessaire pour fournir l''inter-tramage du contenu dans un environnement JSP.  En son absence, le contenu ne s''affichera pas correctement.
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063 : AVERTISSEMENT ! D\u00e9finition d''une valeur d''attribut non-s\u00e9rialisable dans HttpSession (cl\u00e9 : {0}, classe de la valeur : {1}).
-jsf.application.resource.unable_to_serve_from_library=JSF1064 : Impossible de localiser ou de servir une ressource, {0}, depuis la biblioth\u00e8que {1}.
-jsf.application.resource.unable_to_serve=JSF1064 : Impossible de localiser ou de servir une ressource, {0}.
-jsf.application.resource.unable_to_determine_resource_version=JSF1065 : Impossible de d\u00e9terminer la version de la ressource nomm\u00e9e {0}.
-jsf.application.resource.unable_to_create_compression_directory=JSF1065: Impossible de cr\u00e9er un r\u00e9pertoire {0} pour stocker la ressource compress\u00e9e.
-jsf.application.publish.event.base_type_mismatch=JSF1066 : L''objet source {0} n''est pas une instance du type de base fourni {1}.  La recherche d''\u00e9v\u00e9nements ne sera pas r\u00e9alis\u00e9e.
-jsf.config.web_resource_not_found=JSF1067 : La ressource {0} sp\u00e9cifi\u00e9e par l''option de configuration {1} est introuvable.  Cette ressource sera ignor\u00e9e.
-jsf.cannot_instantiate_component_error=JSF1068 : Impossible d''instancier un composant dont le type est {0}
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069 : Le ViewHandler de Facelets JSF 2.0 a \u00e9t\u00e9 d\u00e9sactiv\u00e9 car un FaceletViewHandler plus ancien, {0}, a \u00e9t\u00e9 configur\u00e9 explicitement. Ce comportement n''est pas d\u00e9sir\u00e9. Retirez l''ancien FaceletViewHandler et sa biblioth\u00e8que de votre application.
-jsf.navigation_invalid_query_string=JSF1070 : Cha\u00eene de requ\u00eate non valide dans le r\u00e9sultat de navigation {0}
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071 : {0} intercept\u00e9 durant le traitement beforePhase() de {1} : UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log_after=JSF1072 : {0} intercept\u00e9 durant le traitement afterPhase() de {1} : UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log=JSF1073 : {0} intercept\u00e9 durant le traitement de {1} : UIComponent-ClientId={2}, Message={3}
-jsf.managed.bean.duplicate=JSF1074 : Le bean g\u00e9r\u00e9 nomm\u00e9 ''{0}'' a d\u00e9j\u00e0 \u00e9t\u00e9 enregistr\u00e9.  Remplacement du type de classe du bean g\u00e9r\u00e9 existant {1} par {2}.
-jsf.resource.mime.type.configration.invalid=JSF1075 : Le type Mime {0} ne correspond pas au mod\u00e8le attendu {1}. Ignor\u00e9
-jsf.annotation.scanner.configuration.invalid=JSF1076 : [{0}] {1} : format de sp\u00e9cification jar non valide.  Format jar attendu :<jar name or *>:<package or *>.  Cette entr\u00e9e sera ignor\u00e9e.
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077 : [{0}] {1} : entr\u00e9e g\u00e9n\u00e9rique en double pour le nom jar d\u00e9tect\u00e9.  Cette entr\u00e9e sera ignor\u00e9e.
-jsf.configuration.web.xml.parse.failed=JSF1078 : Impossible de traiter le descripteur de d\u00e9ploiement pour le contexte ''{0}''.
-jsf.configuration.absolute.order.duplicate.document=JSF1079 : Plusieurs documents nomm\u00e9s {0} ont \u00e9t\u00e9 d\u00e9tect\u00e9s lors du traitement du tri absolu.  Seul le premier document nomm\u00e9 sera trait\u00e9.
-jsf.configuration.absolute.order.missing.document=JSF1080 : Impossible de localiser le document nomm\u00e9 ''{0}'' lors du tri absolu.
-jsf.configuration.web.faces.config.contains.ordering=JSF1081 : /WEB-INF/faces-config.xml contient des \u00e9l\u00e9ments <ordering>.  Ces \u00e9l\u00e9ments seront ignor\u00e9s.
-jsf.configuration.illegal.eager.bean=JSF1082 : L''instanciation d''un bean travailleur est autoris\u00e9e uniquement pour les beans avec \u00e9tendue d''application.  Le bean g\u00e9r\u00e9 ''{0}'' est configur\u00e9 en tant que travailleur, mais l''\u00e9tendue ''{1}'' n''est pas valide.
-jsf.composite.component.insertchildren.missing.template=JSF1083 : Impossible de localiser un mod\u00e8le de composant composite propri\u00e9taire pour le gestionnaire insertChildren \u00e0 l''emplacement {0}"
-jsf.composite.component.insertfacet.missing.template=JSF1084 : Impossible de localiser un mod\u00e8le de composant composite propri\u00e9taire pour le gestionnaire insertFacet \u00e0 l''emplacement {0}"
-jsf.managed.bean.custom.scope.eval.null=JSF1085 : L''\u00e9tendue personnalis\u00e9e ''{0}'' a renvoy\u00e9 la valeur null.  Le bean g\u00e9r\u00e9 n''a pas \u00e9t\u00e9 envoy\u00e9 \u00e0 l''\u00e9tendue.
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086 : L''\u00e9tendue personnalis\u00e9e ''{0}'' a renvoy\u00e9 la valeur null.  Impossible de savoir si un bean g\u00e9r\u00e9 est pr\u00e9sent
-jsf.facelets.error.page.response.committed=JSF1087 : Impossible de g\u00e9n\u00e9rer une page d''erreur Facelets car la r\u00e9ponse a d\u00e9j\u00e0 \u00e9t\u00e9 valid\u00e9e.
-jsf.state.server.cannot.parse.int.option=JSF1088 : Erreur lors de l''analyse du param\u00e8tre d''initialisation du contexte {0}.  La valeur par d\u00e9faut {1} sera utilis\u00e9e \u00e0 sa place.
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089 : Le NavigationHandler doit \u00eatre une instance du ConfigurableNavigationHandler pour utiliser un composant UIOutputTarget {0}.
-jsf.outcometarget.navigation.case.not.resolved=JSF1090 : Le cas de navigation n''est pas r\u00e9solu pour le composant {0}.
-jsf.externalcontext.no.mime.type.found=JSF1091 : Aucun type mime d\u00e9tect\u00e9 pour le fichier {0}.  Pour r\u00e9soudre ce probl\u00e8me, ajoutez un mappage mime-type au fichier web.xml de l''application.
-jsf.config.legacy.facelet.warning=JSF1029 : La version de l''application est 2.0 (soit explicitement par la version du fichier /WEB-INF/faces-config.xml ou par l''absence de fichier /WEB-INF/faces-confg.xml). Toutefois, la classe ''{0}'' d\u00e9pend d''une classe de facelet h\u00e9rit\u00e9e.  L''artefact de facelet repr\u00e9sent\u00e9 par cette classe ne sera pas enregistr\u00e9.
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_ja.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_ja.properties
deleted file mode 100644
index 7310f74..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_ja.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001: \u7ba1\u7406\u5bfe\u8c61 Bean {0} \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-jsf.cannot_instantiate_validator_error=JSF1005: \u30bf\u30a4\u30d7 {0} \u306e\u30d0\u30ea\u30c7\u30fc\u30bf\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093
-jsf.cannot_instantiate_converter_error=JSF1006: \u30bf\u30a4\u30d7 {0} \u306e\u30b3\u30f3\u30d0\u30fc\u30bf\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093
-jsf.duplicate_component_id_error=JSF1007: \u30d3\u30e5\u30fc\u306b\u91cd\u8907\u3059\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 ID {0} \u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002
-jsf.redirect_failed_error=JSF1008: \u30d1\u30b9 {0} \u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009: \u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u30d1\u30b9 {0} \u306e FaceServlet \u30de\u30c3\u30d4\u30f3\u30b0\u3092\u5224\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.illegal_view_id_error=JSF1010: \u30d3\u30e5\u30fc ID {0} \u304c\u4e0d\u6b63\u3067\u3059\u3002ID \u306f "/" \u3067\u59cb\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059
-jsf.util.no.adapter.ctor.available="JSF1016: \u30bf\u30fc\u30b2\u30c3\u30c8\u30af\u30e9\u30b9 ''{0}'' \u306b\u3001''{1}'' \u3092\u53d7\u3051\u4ed8\u3051\u308b\u305f\u3081\u306e\u30a2\u30c0\u30d7\u30bf\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u65b0\u3057\u3044\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011: \u5c5e\u6027 ''{0}'' \u306b\u5bfe\u3059\u308b\u5f0f\u306e\u8a55\u4fa1\u7d50\u679c\u304c\u3001\u4e88\u671f\u3057\u306a\u3044\u30bf\u30a4\u30d7\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u4e88\u60f3\u3057\u3066\u3044\u305f\u30bf\u30a4\u30d7\u306f {1} \u3067\u3059\u304c\u3001\u53d7\u3051\u53d6\u3063\u305f\u30bf\u30a4\u30d7\u306f {2} \u3067\u3059\u3002
-jsf.util_no_annotation_processed=JSF1014: \u6ce8\u91c8\u30af\u30e9\u30b9 ''{0}'' \u3092\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u7d50\u679c\u3068\u3057\u3066\u3001\u3053\u306e\u6ce8\u91c8\u306f\u51e6\u7406\u3055\u308c\u307e\u305b\u3093\u3002
-jsf.config.listener.version=\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8 ''{0}'' \u306e Mojarra |version.string| \u3092\u521d\u671f\u5316\u3057\u307e\u3059
-jsf.config.listener.version.complete=\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8 ''{0}'' \u306e Mojarra (|version.string|) \u306e\u521d\u671f\u5316\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f
-jsf.config.listener.predestroy.error=JSF1017: Bean ''{1}'' \u306e\u30b9\u30b3\u30fc\u30d7 ''{2}'' \u3067 PreDestroy \u6ce8\u91c8\u306e\u51e6\u7406\u4e2d\u306b ''{0}'' \u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f\u3002\u30e1\u30c3\u30bb\u30fc\u30b8: {3}
-jsf.viewhandler.requestpath.recursion=JSF1015: \u8981\u6c42\u30d1\u30b9 ''{0}'' \u306e\u5148\u982d\u306b\u3001FacesServlet \u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u30d1\u30b9\u30de\u30c3\u30d4\u30f3\u30b0 ''{1}'' \u304c 1 \u3064\u4ee5\u4e0a\u3042\u308a\u307e\u3059\u3002
-jsf.non_displayed_message=\u8b66\u544a: FacesMessage \u304c\u30ad\u30e5\u30fc\u306b\u5165\u3063\u3066\u3044\u307e\u3059\u304c\u3001\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002{0}
-
-jsf.config.webconfig.configinfo=JSF1018: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{1}'' \u306f ''{2}'' \u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3057\u305f
-jsf.config.webconfig.configinfo.reset=JSF1019: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{1}'' \u306f ''{2}'' \u306b\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u307e\u3057\u305f
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{1}'' \u306f\u6709\u52b9\u306b\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u307e\u3057\u305f
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{1}'' \u306f\u7121\u52b9\u306b\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u307e\u3057\u305f
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{1}'' - \u6709\u52b9
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{1}'' - \u7121\u52b9
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{2}'' \u306b\u5bfe\u3057\u3066\u5024 ''{1}'' \u306f\u7121\u52b9\u3067\u3059\u3002\u6709\u52b9\u306a\u5024\u306f ''{3}'' \u3067\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e ''{4}'' \u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002
-jsf.config.webconfig.enventryinfo=JSF1023: [{0}] \u74b0\u5883\u30a8\u30f3\u30c8\u30ea ''{1}'' \u304c\u51e6\u7406\u3055\u308c\u307e\u3057\u305f\u3002\u5024\u306f ''{2}'' \u3067\u3059
-jsf.config.webconfig.enventry.clientencrypt=JSF1024: [{0}] \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u72b6\u614b\u306e\u6697\u53f7\u5316: \u6709\u52b9
-jsf.config.webconfig.param.deprecated=JSF1025: [{0}] \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u521d\u671f\u5316\u30d1\u30e9\u30e1\u30fc\u30bf ''{1}'' \u306f\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u69cb\u6210\u3055\u308c\u307e\u3059\u304c\u3001\u4eca\u5f8c\u306f ''{2}'' \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025: [{0}] \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u521d\u671f\u5316\u30d1\u30e9\u30e1\u30fc\u30bf ''{1}'' \u306f\u975e\u63a8\u5968\u3067\u3001\u52b9\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002  
-jsf.config.webconfig.option.notconfigured=JSF1026: [{0}] \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 ''{1}'' \u304c\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027: [{0}] JSF \u306e ELResolver \u304c JSP \u30b3\u30f3\u30c6\u30ca\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028: [{0}] JSF \u306e ELResolver \u306f\u3001JSP \u30b3\u30f3\u30c6\u30ca\u306b\u6b63\u5e38\u306b\u767b\u9332\u3055\u308c\u307e\u3057\u305f\u3002
-jsf.spi.injection.provider_not_implemented=JSF1029: \u6307\u5b9a\u3057\u305f InjectionProvider \u306e\u5b9f\u88c5 ''{0}'' \u306f\u3001InjectionProvider \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u307e\u305b\u3093\u3002 
-jsf.spi.injection.provider_not_found=JSF1030: \u6307\u5b9a\u3057\u305f InjectionProvider \u306e\u5b9f\u88c5 ''{0}'' \u3092\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.spi.injection.provider_cannot_instantiate=JSF1031: \u6307\u5b9a\u3057\u305f InjectionProvider ''{0}'' \u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.spi.injection.provider_configured=JSF1032: \u30ea\u30bd\u30fc\u30b9\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306f InjectionProvider ''{0}'' \u3092\u4f7f\u7528\u3057\u3066\u6709\u52b9\u5316\u3055\u308c\u307e\u3057\u305f\u3002
-jsf.spi.injection.no_injection=JSF1033: \u30ea\u30bd\u30fc\u30b9\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306f\u7121\u52b9\u3067\u3059\u3002
-jsf.spi.serialization.provider_not_implemented=JSF1036: \u6307\u5b9a\u3057\u305f SerializationProvider \u306e\u5b9f\u88c5 ''{0}'' \u306f\u3001SerializationProvider \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u307e\u305b\u3093\u3002 
-jsf.spi.serialization.provider_not_found=JSF1037: \u6307\u5b9a\u3057\u305f SerializationProvider \u306e\u5b9f\u88c5 ''{0}'' \u3092\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038: \u6307\u5b9a\u3057\u305f SerializationProvider ''{0}'' \u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.spi.serialization.provider_configured=JSF1039: \u30ea\u30bd\u30fc\u30b9\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306f InjectionProvider ''{0}'' \u3092\u4f7f\u7528\u3057\u3066\u6709\u52b9\u5316\u3055\u308c\u307e\u3057\u305f\u3002
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034: ''{0}'' \u306e\u5024 ''{1}'' \u306f\u30012 \u3067\u5272\u308a\u5207\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e ''{2}'' \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035: ''{0}'' \u306e\u5024 ''{1}'' \u304c\u6574\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e ''{2}'' \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
-jsf.core.taglib.invalid_locale_value=JSF1041: \u6307\u5b9a\u3057\u305f\u30ed\u30b1\u30fc\u30eb\u306e ''{0}'' \u306f\u7121\u52b9\u3067\u3059\u3002\u30ed\u30b1\u30fc\u30eb\u5c5e\u6027\u306e\u5024\u306b\u306f\u3001\u56fd\u3084\u30d0\u30ea\u30a2\u30f3\u30c8\u3092\u542b\u307e\u306a\u3044 ISO 639 \u8a00\u8a9e\u30b3\u30fc\u30c9\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-jsf.core.taglib.invalid_language=JSF1042: \u6307\u5b9a\u3057\u305f\u8a00\u8a9e\u306e ''{0}'' \u306f\u3001\u65e2\u77e5\u306e ISO 639 \u8a00\u8a9e\u30b3\u30fc\u30c9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043: \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 ''{1}'' \u306e {0} \u306f\u51e6\u7406\u3055\u308c\u307e\u305b\u3093\u3002\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3068\u30bf\u30a4\u30d7\u306e\u4e21\u65b9\u304c null \u3067\u3059\u3002
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043: PhaseListener (PhaseListenerTag \u3067\u6307\u5b9a) \u306f\u51e6\u7406\u3055\u308c\u307e\u305b\u3093\u3002\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3068\u30bf\u30a4\u30d7\u306e\u4e21\u65b9\u304c null \u3067\u3059
-jsf.core.web.injection.method_not_static=JSF1044: ''{1}'' \u306e\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u305f\u30e1\u30bd\u30c3\u30c9 ''{0}'' \u306f\u3001static \u306b\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.core.web.injection.method_return_not_void=JSF1045: ''{1}'' \u306e\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u305f\u30e1\u30bd\u30c3\u30c9 ''{0}'' \u306f\u3001void \u3057\u304b\u8fd4\u305b\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.core.web.injection.method_no_params=JSF1046: ''{1}'' \u306e\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u305f\u30e1\u30bd\u30c3\u30c9 ''{0}'' \u306b\u306f\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6307\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047: ''{1}'' \u306e\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u305f\u30e1\u30bd\u30c3\u30c9 ''{0}'' \u306f\u3001\u691c\u67fb\u4f8b\u5916\u3092\u5ba3\u8a00\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.core.injection.provider_generic_web_configured=JSF1048: PostConstruct/PreDestroy \u306e\u6ce8\u91c8\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u305f\u7ba1\u7406\u5bfe\u8c61 Bean \u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u6ce8\u91c8\u304c\u51e6\u7406\u3055\u308c\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
-jsf.spi.injection.provider.invalid_service_entry=JSF1049: \u30b5\u30fc\u30d3\u30b9\u30a8\u30f3\u30c8\u30ea ''{0}'' \u304c\u7121\u52b9\u3067\u3059\u3002\u5f62\u5f0f\u306f ''<DiscoverableInjectionProviderClass>:<DelegateClass>'' \u3067\u3059\u3002\u30a8\u30f3\u30c8\u30ea\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.spi.injection.provider.discovery_error=JSF1050: \u30a8\u30f3\u30c8\u30ea ''{0}'' \u3067 DiscoverableInjectionProvider.isProviderAppropriate(String) \u306e\u547c\u3073\u51fa\u3057\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30a8\u30f3\u30c8\u30ea\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051: \u30b5\u30fc\u30d3\u30b9\u30a8\u30f3\u30c8\u30ea ''{0}'' \u306f\u3001DiscoverableInjectionProvider \u3092\u62e1\u5f35\u3057\u307e\u305b\u3093\u3002\u30a8\u30f3\u30c8\u30ea\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.spi.provider.cannot_read_service=JSF1052:  \u30b5\u30fc\u30d3\u30b9\u30a8\u30f3\u30c8\u30ea ''{0}'' \u306e\u51e6\u7406\u4e2d\u306b\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
-jsf.lifecycle.phaselistener.exception=JSF1053: (\u30ea\u30b9\u30ca\u30fc: {0}\u3001\u30d5\u30a7\u30fc\u30ba ID: {1}\u3001\u30d3\u30e5\u30fc ID: {2}) \u30d5\u30a7\u30fc\u30ba\u30ea\u30b9\u30ca\u30fc\u306e\u5b9f\u884c\u4e2d\u306b\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f: {3}
-jsf.lifecycle.phase.exception=JSF1054: (\u30d5\u30a7\u30fc\u30ba ID: {0}\u3001\u30d3\u30e5\u30fc ID: {1}) \u30d5\u30a7\u30fc\u30ba\u306e\u5b9f\u884c\u4e2d\u306b\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f: {2}
-jsf.config.cannot_resolve_entities=JSF1055: \u30ed\u30fc\u30ab\u30eb\u30ea\u30bd\u30fc\u30b9 ''{0}'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002''{1}'' \u306b\u5bfe\u3059\u308b\u8981\u6c42\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u6a19\u6e96\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30fc\u89e3\u6c7a\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002
-jsf.config.cannot_create_inputsource=JSF1056: URL ''{0}'' \u306e InputSource \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.config.navigation.from_view_id_leading_slash=JSF1057: from-view-id \u3067\u53c2\u7167\u3055\u308c\u308b\u30ea\u30bd\u30fc\u30b9 ''{0}'' \u306f\u3001\u5148\u982d\u304c ''/'' \u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u81ea\u52d5\u7684\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u304c\u3001\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058: ''{1}'' \u304b\u3089\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3067 to-view-id \u3067\u53c2\u7167\u3055\u308c\u308b\u30ea\u30bd\u30fc\u30b9 ''{0}'' \u306f\u3001\u5148\u982d\u304c ''/'' \u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u81ea\u52d5\u7684\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u304c\u3001\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-jsf.config.navigation.if_invalid_expression=JSF1070: ''{1}'' \u304b\u3089\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u306b\u5bfe\u3059\u308b\u6761\u4ef6 ''{0}'' \u306f\u3001\u9023\u7d9a\u3057\u305f\u5024\u8868\u73fe\u3067\u306a\u3044\u305f\u3081\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.config.verifyobjects.development_only=JSF1059: \u8b66\u544a: com.sun.faces.verifyObjects \u6a5f\u80fd\u306f\u3001\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u306a\u3044\u958b\u767a\u8005\u306e\u652f\u63f4\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002IDE \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3084\u3001\u672c\u7a3c\u50cd\u306b\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u914d\u5099\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u670 [...]
-jsf.config.verifyobjects.failures_detected=JSF1060: \u691c\u8a3c\u306b\u3088\u308a 1 \u3064\u4ee5\u4e0a\u306e\u969c\u5bb3\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u8a73\u7d30\u306f\u3001\u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u3042\u3068\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061: \u8b66\u544a: \u91cd\u8907\u3059\u308b\u30d5\u30a7\u30fc\u30ba\u30ea\u30b9\u30ca\u30fc {0} \u3092\u8ffd\u52a0\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002\u91cd\u8907\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062: \u8b66\u544a: ExternalContext.getResponse() \u304b\u3089\u8fd4\u3055\u308c\u305f\u5fdc\u7b54\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001'public void flushContentToWrappedResponse()' \u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u3092\u6301\u3064\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001JSP \u74b0\u5883\u3067\u4f7f\u7528\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u3 [...]
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062: \u8b66\u544a: ExternalContext.getResponse() \u304b\u3089\u8fd4\u3055\u308c\u305f\u5fdc\u7b54\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001'public boolean isBytes()' \u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u3092\u6301\u3064\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001JSP \u74b0\u5883\u3067\u4f7f\u7528\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u309 [...]
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062: \u8b66\u544a: ExternalContext.getResponse() \u304b\u3089\u8fd4\u3055\u308c\u305f\u5fdc\u7b54\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001'public boolean isChars()' \u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u3092\u6301\u3064\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001JSP \u74b0\u5883\u3067\u4f7f\u7528\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u309 [...]
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062: \u8b66\u544a: ExternalContext.getResponse() \u304b\u3089\u8fd4\u3055\u308c\u305f\u5fdc\u7b54\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001'public char[] getChars()' \u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u3092\u6301\u3064\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001JSP \u74b0\u5883\u3067\u4f7f\u7528\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u30 [...]
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062: \u8b66\u544a: ExternalContext.getResponse() \u304b\u3089\u8fd4\u3055\u308c\u305f\u5fdc\u7b54\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001'public void resetBuffers' \u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u3092\u6301\u3064\u30e1\u30bd\u30c3\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001JSP \u74b0\u5883\u3067\u4f7f\u7528\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4 [...]
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063: \u8b66\u544a: \u76f4\u5217\u5316\u53ef\u80fd\u3067\u306a\u3044\u5c5e\u6027\u5024\u3092 HttpSession \u306b\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059 (\u30ad\u30fc: {0}\u3001\u5024\u30af\u30e9\u30b9: {1})\u3002
-jsf.application.resource.unable_to_serve_from_library=JSF1064: \u30e9\u30a4\u30d6\u30e9\u30ea {1} \u306b\u30ea\u30bd\u30fc\u30b9 {0} \u304c\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u63d0\u4f9b\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.application.resource.unable_to_serve=JSF1064: \u30ea\u30bd\u30fc\u30b9 {0} \u304c\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u63d0\u4f9b\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.application.resource.unable_to_determine_resource_version=JSF1065: \u30ea\u30bd\u30fc\u30b9\u540d {0} \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5224\u65ad\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.application.resource.unable_to_create_compression_directory=JSF1065: \u5727\u7e2e\u3057\u305f\u30ea\u30bd\u30fc\u30b9\u3092\u683c\u7d0d\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea {0} \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.application.publish.event.base_type_mismatch=JSF1066: \u30bd\u30fc\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 {0} \u306f\u3001\u6307\u5b9a\u3057\u305f\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7 {1} \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30a4\u30d9\u30f3\u30c8\u691c\u7d22\u306f\u767a\u751f\u3057\u307e\u305b\u3093\u3002
-jsf.config.web_resource_not_found=JSF1067: {1} \u69cb\u6210\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u3057\u305f\u30ea\u30bd\u30fc\u30b9 {0} \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30ea\u30bd\u30fc\u30b9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.cannot_instantiate_component_error=JSF1068: \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30bf\u30a4\u30d7\u304c {0} \u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069: JSF 2.0 Facelets ViewHandler \u3092\u53e4\u3044 FaceletViewHandler {0} \u3068\u3057\u3066\u7121\u52b9\u306b\u3059\u308b\u3053\u3068\u304c\u3001\u660e\u793a\u7684\u306b\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u52d5\u4f5c\u304c\u671b\u307e\u3057\u304f\u306a\u3044\u5834\u5408\u306f\u3001\u53e4\u3044 FaceletViewHandler \u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30 [...]
-jsf.navigation_invalid_query_string=JSF1070: \u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u7d50\u679c {0} \u306b\u7121\u52b9\u306a\u30af\u30a8\u30ea\u30fc\u6587\u5b57\u5217\u304c\u3042\u308a\u307e\u3059
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071: {1} \u306e beforePhase() \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientID ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
-jsf.context.exception.handler.log_after=JSF1072: {1} \u306e afterPhase() \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientId ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
-jsf.context.exception.handler.log=JSF1073: {1} \u306e\u51e6\u7406\u4e2d\u306b {0} \u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: UIComponent \u306e ClientId ={2}\u3001\u30e1\u30c3\u30bb\u30fc\u30b8 ={3}
-jsf.managed.bean.duplicate=JSF1074: ''{0}'' \u3068\u3044\u3046\u540d\u524d\u306e\u7ba1\u7406\u5bfe\u8c61 Bean \u306f\u3001\u3059\u3067\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u65e2\u5b58\u306e\u7ba1\u7406\u5bfe\u8c61 Bean \u306e\u30af\u30e9\u30b9\u30bf\u30a4\u30d7 {1} \u3092 {2} \u3067\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002
-jsf.resource.mime.type.configration.invalid=JSF1075: MIME \u30bf\u30a4\u30d7 {0} \u304c\u4e88\u671f\u3055\u308c\u305f\u30d1\u30bf\u30fc\u30f3 {1} \u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.annotation.scanner.configuration.invalid=JSF1076: [{0}] {1} : \u7121\u52b9\u306a jar \u6307\u5b9a\u5f62\u5f0f\u3067\u3059\u3002\u4e88\u671f\u3055\u308c\u308b jar \u306f\u3001<jar \u540d\u307e\u305f\u306f *>:<\u30d1\u30c3\u30b1\u30fc\u30b8\u307e\u305f\u306f *> \u3067\u3059\u3002\u30a8\u30f3\u30c8\u30ea\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077: [{0}] {1} : jar \u540d\u306e\u91cd\u8907\u3059\u308b\u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9\u30a8\u30f3\u30c8\u30ea\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u30a8\u30f3\u30c8\u30ea\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.configuration.web.xml.parse.failed=JSF1078: \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8 ''{0}'' \u306e\u914d\u5099\u8a18\u8ff0\u5b50\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.configuration.absolute.order.duplicate.document=JSF1079: \u7d76\u5bfe\u7684\u306a\u9806\u5e8f\u6307\u5b9a\u306e\u51e6\u7406\u4e2d\u306b\u3001{0} \u3068\u3044\u3046\u540d\u524d\u306e\u8907\u6570\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u6700\u521d\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u307f\u304c\u51e6\u7406\u3055\u308c\u307e\u3059\u3002
-jsf.configuration.absolute.order.missing.document=JSF1080: ''\u7d76\u5bfe\u7684\u306a\u9806\u5e8f\u6307\u5b9a\u306e\u51e6\u7406\u4e2d\u306b\u3001{0}'' \u3068\u3044\u3046\u540d\u524d\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-jsf.configuration.web.faces.config.contains.ordering=JSF1081: /WEB-INF/faces-config.xml \u306b <ordering> \u8981\u7d20\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
-jsf.configuration.illegal.eager.bean=JSF1082: Eager \u306e\u7ba1\u7406\u5bfe\u8c61 Bean \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b9\u30b3\u30fc\u30d7\u306e Bean \u306e\u307f\u3067\u8a31\u53ef\u3067\u304d\u307e\u3059\u3002\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306f Eager \u3068\u3057\u3066\u69cb\u6210\u3055\u308c\u307e\u3059\u304c\u3001\u30b9\u30b3\u30fc\u30d7 ''{1}'' \u306f\u7121\u52b9\u3067\u3059\u3002
-jsf.composite.component.insertchildren.missing.template=JSF1083: \u6b21\u306e\u5834\u6240\u306b\u3001insertChildren \u30cf\u30f3\u30c9\u30e9\u306e\u6240\u6709\u5074\u5408\u6210\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0}"
-jsf.composite.component.insertfacet.missing.template=JSF1084: \u6b21\u306e\u5834\u6240\u306b\u3001insertFacet \u30cf\u30f3\u30c9\u30e9\u306e\u6240\u6709\u5074\u5408\u6210\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0}"
-jsf.managed.bean.custom.scope.eval.null=JSF1085: \u30ab\u30b9\u30bf\u30e0\u30b9\u30b3\u30fc\u30d7 ''{0}'' \u306f null \u306b\u8a55\u4fa1\u3055\u308c\u307e\u3057\u305f\u3002\u7ba1\u7406\u5bfe\u8c61 Bean \u306f\u3001\u30b9\u30b3\u30fc\u30d7\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086: \u30ab\u30b9\u30bf\u30e0\u30b9\u30b3\u30fc\u30d7 ''{0}'' \u306f null \u306b\u8a55\u4fa1\u3055\u308c\u307e\u3057\u305f\u3002\u7ba1\u7406\u5bfe\u8c61 Bean \u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u5224\u65ad\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.facelets.error.page.response.committed=JSF1087: \u5fdc\u7b54\u304c\u3059\u3067\u306b\u30b3\u30df\u30c3\u30c8\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001Facelets \u30a8\u30e9\u30fc\u30da\u30fc\u30b8\u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093\u3002
-jsf.state.server.cannot.parse.int.option=JSF1088: \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306e init \u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306e\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306e {1} \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089: NavigationHandler \u306f\u3001UIOutputTarget \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 {0} \u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u3001ConfigurableNavigationHandler \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-jsf.outcometarget.navigation.case.not.resolved=JSF1090: \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 {0} \u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30b1\u30fc\u30b9\u304c\u89e3\u6c7a\u3055\u308c\u307e\u305b\u3093\u3002
-jsf.externalcontext.no.mime.type.found=JSF1091: \u30d5\u30a1\u30a4\u30eb {0} \u306e MIME \u30bf\u30a4\u30d7\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u308c\u3092\u89e3\u6c7a\u3059\u308b\u306b\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e web.xml \u306b MIME \u30bf\u30a4\u30d7\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
-jsf.config.legacy.facelet.warning=JSF1029:  \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f 2.0 \u3067\u3059\u304c (/WEB-INF/faces-config.xml \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u660e\u793a\u7684\u306b\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3001/WEB-INF/faces-confg.xml \u304c\u306a\u3044)\u3001\u30af\u30e9\u30b9 ''{0}'' \u304c\u53e4\u3044 facelet \u30af\u30e9\u30b9\u306b\u4f9d\u5b58\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306 [...]
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_ko.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_ko.properties
deleted file mode 100644
index c1b05b0..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_ko.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001: Managedbean {0}\uc744(\ub97c) \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.cannot_instantiate_validator_error=JSF1005: {0} \uc720\ud615\uc758 \uac80\uc99d\uc790\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.cannot_instantiate_converter_error=JSF1006: {0} \uc720\ud615\uc758 \ubcc0\ud658\uae30\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.duplicate_component_id_error=JSF1007: \ubcf4\uae30\uc5d0\uc11c \uc911\ubcf5\ub41c \uad6c\uc131 \uc694\uc18c \uc544\uc774\ub514 {0}\uc744(\ub97c) \ucc3e\uc558\uc2b5\ub2c8\ub2e4.
-jsf.redirect_failed_error=JSF1008: {0} \uacbd\ub85c\ub85c \ub9ac\ub514\ub809\uc158\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009: \uc11c\ube14\ub9bf \uacbd\ub85c {0}\uc5d0 \ub300\ud55c FaceServlet \ub9e4\ud551\uc744 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.illegal_view_id_error=JSF1010: \ubcf4\uae30 \uc544\uc774\ub514 {0}\uc774(\uac00) \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc544\uc774\ub514\ub294 ''/''\ub85c \uc2dc\uc791\ud574\uc57c \ud569\ub2c8\ub2e4.
-jsf.util.no.adapter.ctor.available="JSF1016: \ub300\uc0c1 \ud074\ub798\uc2a4 ''{0}''\uc5d0 ''{1}''\uc744(\ub97c) \ud5c8\uc6a9\ud558\ub294 \uc5b4\ub311\ud130 \uad6c\uc131\uc790\uac00 \uc5c6\uc5b4\uc11c, \ub300\uc2e0 \uc0c8 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011: ''{0}'' \uc18d\uc131\uc758 \ud45c\ud604\uc2dd\uc744 \ud3c9\uac00\ud55c \uacb0\uacfc \uc608\uae30\uce58 \uc54a\uc740 \uc720\ud615\uc774 \ubc18\ud658\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  {1} \uc720\ud615\uc774 \ud544\uc694\ud558\uc9c0\ub9cc {2} \uc720\ud615\uc774 \uc218\uc2e0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.util_no_annotation_processed=JSF1014: ''{0}'' \uc8fc\uc11d \ud074\ub798\uc2a4\ub97c \ub85c\ub4dc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \ub530\ub77c\uc11c, \uc774 \uc8fc\uc11d\uc740 \ucc98\ub9ac\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-jsf.config.listener.version=''{0}'' \ucee8\ud14d\uc2a4\ud2b8\uc5d0 \ub300\ud574 Mojarra |version.string|\uc744 \ucd08\uae30\ud654\ud558\ub294 \uc911
-jsf.config.listener.version.complete=''{0}'' \ucee8\ud14d\uc2a4\ud2b8\uc5d0 \ub300\ud574 Mojarra (|version.string|) \ucd08\uae30\ud654\ub97c \uc644\ub8cc\ud588\uc2b5\ub2c8\ub2e4.
-jsf.config.listener.predestroy.error=JSF1017: \ubc94\uc704 ''{2}''\uc5d0\uc11c Bean ''{1}''\uc5d0 \ub300\ud55c PreDestroy \uc8fc\uc11d\uc744 \ucc98\ub9ac\ud558\ub294 \uc911 ''{0}''\uc774(\uac00) \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.  \uba54\uc2dc\uc9c0: {3}
-jsf.viewhandler.requestpath.recursion=JSF1015: \uc694\uccad \uacbd\ub85c ''{0}''\uc774(\uac00) ''{1}''\uacfc(\uc640) \ub9e4\ud551\ud558\ub294 \ud558\ub098 \uc774\uc0c1\uc758 FacesServlet \uc811\ub450\uc5b4 \uacbd\ub85c\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.
-jsf.non_displayed_message=\uacbd\uace0: FacesMessage\uac00 \ub300\uae30\uc5f4\uc5d0 \uc788\uc9c0\ub9cc \ud45c\uc2dc\ub418\uc9c0 \uc54a\uc558\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. {0}
-
-jsf.config.webconfig.configinfo=JSF1018: [{0}] \uad6c\uc131 \uc635\uc158 ''{1}''\uc774(\uac00) ''{2}''(\uc73c)\ub85c \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.config.webconfig.configinfo.reset=JSF1019: [{0}] \uad6c\uc131 \uc635\uc158 ''{1}''\uc774(\uac00) ''{2}''(\uc73c)\ub85c \uc7ac\uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020: [{0}] \uad6c\uc131 \uc635\uc158 ''{1}''\uc774(\uac00) \ud65c\uc131\ud654\ub85c \uc7ac\uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020: [{0}] \uad6c\uc131 \uc635\uc158 ''{1}''\uc774(\uac00) \ube44\ud65c\uc131\ud654\ub85c \uc7ac\uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021: [{0}] \uad6c\uc131 \uc635\uc158 ''{1}'' - \ud65c\uc131\ud654
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021: [{0}] \uad6c\uc131 \uc635\uc158 ''{1}'' - \ube44\ud65c\uc131\ud654
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022: [{0}] \uad6c\uc131 \uc635\uc158 ''{2}''\uc758 ''{1}'' \uac12\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uc720\ud6a8\ud55c \uac12\uc740 ''{3}''\uc785\ub2c8\ub2e4.  \uae30\ubcf8\uac12 ''{4}''(\uc73c)\ub85c \ub2e4\uc2dc \uc9c0\uc815\ub429\ub2c8\ub2e4.
-jsf.config.webconfig.enventryinfo=JSF1023: [{0}] \ud658\uacbd \ud56d\ubaa9 ''{1}''\uc774(\uac00) \ucc98\ub9ac\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uac12\uc740 ''{2}''\uc785\ub2c8\ub2e4.
-jsf.config.webconfig.enventry.clientencrypt=JSF1024: [{0}] \ud074\ub77c\uc774\uc5b8\ud2b8 \uc0c1\ud0dc \uc554\ud638\ud654: \ud65c\uc131\ud654
-jsf.config.webconfig.param.deprecated=JSF1025: [{0}] \ucee8\ud14d\uc2a4\ud2b8 \ucd08\uae30\ud654 \ub9e4\uac1c \ubcc0\uc218 ''{1}''\uc740(\ub294) \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  \uc635\uc158\uc774 \uacc4\uc18d \uad6c\uc131\ub418\uc9c0\ub9cc \uc774\ud6c4\uc5d0\ub294 ''{2}''\uc744(\ub97c) \uc0ac\uc6a9\ud558\uc2ed\uc2dc\uc624.
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025: [{0}] \ucee8\ud14d\uc2a4\ud2b8 \ucd08\uae30\ud654 \ub9e4\uac1c \ubcc0\uc218 ''{1}''\uc740(\ub294) \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uc544\ubb34\ub7f0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  
-jsf.config.webconfig.option.notconfigured=JSF1026: [{0}] \uad6c\uc131 \uc635\uc158 ''{1}''\uc774(\uac00) \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027: [{0}] JSF\uc6a9 ELResolver\uac00 JSP \ucee8\ud14c\uc774\ub108\uc5d0 \ub4f1\ub85d\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028: [{0}] JSF\uc6a9 ELResolver\uac00 JSP \ucee8\ud14c\uc774\ub108\uc5d0 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.spi.injection.provider_not_implemented=JSF1029: \uc9c0\uc815\ub41c InjectionProvider \uad6c\ud604 "{0}"\uc774(\uac00) InjectionProvider \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. 
-jsf.spi.injection.provider_not_found=JSF1030: \uc9c0\uc815\ub41c InjectionProvider \uad6c\ud604 "{0}"\uc744(\ub97c) \ub85c\ub4dc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.spi.injection.provider_cannot_instantiate=JSF1031: \uc9c0\uc815\ub41c InjectionProvider ''{0}''\uc744(\ub97c) \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.spi.injection.provider_configured=JSF1032: InjectionProvider ''{0}'' \uc0ac\uc6a9\uc73c\ub85c \uc790\uc6d0 \uc0bd\uc785\uc774 \ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.spi.injection.no_injection=JSF1033: \uc790\uc6d0 \uc0bd\uc785\uc774 \ube44\ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.spi.serialization.provider_not_implemented=JSF1036: \uc9c0\uc815\ub41c SerializationProvider \uad6c\ud604 ''{0}''\uc774(\uac00) SerializationProvider \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. 
-jsf.spi.serialization.provider_not_found=JSF1037: \uc9c0\uc815\ub41c SerializationProvider \uad6c\ud604 ''{0}''\uc744(\ub97c) \ub85c\ub4dc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038: \uc9c0\uc815\ub41c SerializationProvider ''{0}''\uc744(\ub97c) \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.spi.serialization.provider_configured=JSF1039: InjectionProvider ''{0}'' \uc0ac\uc6a9\uc73c\ub85c \uc790\uc6d0 \uc0bd\uc785\uc774 \ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034: ''{0}''\uc758 \uac12 ''{1}''\uc740(\ub294) 2\ub85c \uade0\ub4f1\ud558\uac8c \ub098\ub20c \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.  \uae30\ubcf8\uac12\uc740 ''{2}''\uc785\ub2c8\ub2e4.
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035: ''{0}''\uc758 \uac12 ''{1}''\uc774(\uac00) \uc815\uc218\uac00 \uc544\ub2d9\ub2c8\ub2e4.  \uae30\ubcf8\uac12\uc740 ''{2}''\uc785\ub2c8\ub2e4.
-jsf.core.taglib.invalid_locale_value=JSF1041: \uc9c0\uc815\ub41c \ub85c\ucf08 ''{0}''\uc774(\uac00) \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ub85c\ucf08 \uc18d\uc131 \uac12\uc740 \uad6d\uac00 \ub610\ub294 \ubcc0\ud615\uc774 \ud3ec\ud568\ub418\uc9c0 \uc54a\uc740 \uc720\ud6a8\ud55c ISO 639 \uc5b8\uc5b4 \ucf54\ub4dc\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-jsf.core.taglib.invalid_language=JSF1042: \uc9c0\uc815\ub41c \uc5b8\uc5b4 "{0}"\uc740(\ub294) \uc54c\ub824\uc9c4 ISO 639 \uc5b8\uc5b4 \ucf54\ub4dc\uac00 \uc544\ub2d9\ub2c8\ub2e4.
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043: \uad6c\uc131 \uc694\uc18c ''{1}''\uc5d0 \ub300\ud55c {0}\uc774(\uac00) \ucc98\ub9ac\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. 'binding'\uacfc 'type'\uc774 \ubaa8\ub450 null\uc785\ub2c8\ub2e4.
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043: PhaseListenerTag\ub97c \ud1b5\ud574 \uc9c0\uc815\ud55c PhaseListener\uac00 \ucc98\ub9ac\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. 'binding'\uacfc 'type'\uc774 \ubaa8\ub450 null\uc785\ub2c8\ub2e4.
-jsf.core.web.injection.method_not_static=JSF1044: ''{1}'' \uc8fc\uc11d\uc774 \ud45c\uc2dc\ub41c \uba54\uc18c\ub4dc ''{0}''\uc740(\ub294) \uc815\uc801\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc774 \uba54\uc18c\ub4dc\uac00 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.core.web.injection.method_return_not_void=JSF1045: ''{1}'' \uc8fc\uc11d\uc774 \ud45c\uc2dc\ub41c \uba54\uc18c\ub4dc ''{0}''\uc740(\ub294) void\ub9cc \ubc18\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.  \uc774 \uba54\uc18c\ub4dc\uac00 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.core.web.injection.method_no_params=JSF1046: ''{1}'' \uc8fc\uc11d\uc774 \ud45c\uc2dc\ub41c \uba54\uc18c\ub4dc ''{0}''\uc740(\ub294) \ub9e4\uac1c \ubcc0\uc218\ub97c \uac00\uc9c8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc774 \uba54\uc18c\ub4dc\uac00 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047: ''{1}'' \uc8fc\uc11d\uc774 \ud45c\uc2dc\ub41c \uba54\uc18c\ub4dc ''{0}''\uc740(\ub294) \ud655\uc778\ub41c \uc608\uc678\ub97c \uc120\uc5b8\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc774 \uba54\uc18c\ub4dc\uac00 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.core.injection.provider_generic_web_configured=JSF1048: PostConstruct/PreDestroy \uc8fc\uc11d\uc774 \uc788\uc2b5\ub2c8\ub2e4.  \uc774 \uc8fc\uc11d\uc774 \ud45c\uc2dc\ub41c ManagedBeans \uba54\uc18c\ub4dc\uc5d0\uc11c \ud574\ub2f9 \uc8fc\uc11d\uc744 \ucc98\ub9ac\ud569\ub2c8\ub2e4.
-jsf.spi.injection.provider.invalid_service_entry=JSF1049: \uc11c\ube44\uc2a4 \ud56d\ubaa9 ''{0}''\uc774(\uac00) \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  ''<DiscoverableInjectionProviderClass>:<DelegateClass>'' \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.  \ud56d\ubaa9\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.spi.injection.provider.discovery_error=JSF1050: ''{0}'' \ud56d\ubaa9\uc5d0 \ub300\ud574 DiscoverableInjectionProvider.isProviderAppropriate(String)\uc744 \ud638\ucd9c\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.  \ud56d\ubaa9\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051: \uc11c\ube44\uc2a4 \ud56d\ubaa9 ''{0}''\uc740(\ub294) DiscoverableInjectionProvider\ub97c \ud655\uc7a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  \ud56d\ubaa9\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.spi.provider.cannot_read_service=JSF1052: \uc11c\ube44\uc2a4 \ud56d\ubaa9 ''{0}''\uc744(\ub97c) \ucc98\ub9ac\ud558\ub294 \uc911 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-jsf.lifecycle.phaselistener.exception=JSF1053: (\uc218\uc2e0\uae30: {0}, \ub2e8\uacc4 \uc544\uc774\ub514: {1}, \ubcf4\uae30 \uc544\uc774\ub514: {2}) phase-listener \uc2e4\ud589 \uc911 \uc608\uc678 \ubc1c\uc0dd: {3}
-jsf.lifecycle.phase.exception=JSF1054: (\ub2e8\uacc4 \uc544\uc774\ub514: {0}, \ubcf4\uae30 \uc544\uc774\ub514: {1}) \ub2e8\uacc4 \uc2e4\ud589 \uc911 \uc608\uc678 \ubc1c\uc0dd: {2}
-jsf.config.cannot_resolve_entities=JSF1055: ''{0}'' \ub85c\uceec \uc790\uc6d0\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  ''{1}''\uc5d0 \ub300\ud55c \uc694\uccad\uc774 \uc788\uc744 \ub54c \ud45c\uc900 \uc5d4\ud2f0\ud2f0 \ud655\uc778\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.
-jsf.config.cannot_create_inputsource=JSF1056: URL ''{0}''\uc758 InputSource\ub97c \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.config.navigation.from_view_id_leading_slash=JSF1057: from-view-id\uc5d0\uc11c \ucc38\uc870\ud558\ub294 \uc790\uc6d0\uc778 ''{0}''\uc774(\uac00) ''/''\ub85c \uc2dc\uc791\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  \uc774 \uacbd\uc6b0\uc5d0\ub294 \ucd94\uac00\ub418\uc9c0\ub9cc, \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058: ''{1}''\uc5d0\uc11c \ud0d0\uc0c9\ud558\uae30 \uc704\ud574 to-view-id\uc5d0\uc11c \ucc38\uc870\ud558\ub294 \uc790\uc6d0\uc778 ''{0}''\uc774(\uac00) ''/''\ub85c \uc2dc\uc791\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  \uc774 \uacbd\uc6b0\uc5d0\ub294 \ucd94\uac00\ub418\uc9c0\ub9cc, \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.
-jsf.config.navigation.if_invalid_expression=JSF1070: ''{1}''\uc5d0\uc11c \ud0d0\uc0c9\ud558\uae30 \uc704\ud55c ''{0}'' \uc870\uac74\uc740 \uc5f0\uc18d \uac12 \ud45c\ud604\uc2dd\uc774 \uc544\ub2c8\ubbc0\ub85c \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.config.verifyobjects.development_only=JSF1059: \uacbd\uace0!  com.sun.faces.verifyObjects \uae30\ub2a5\uc740 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac1c\ubc1c\uc790\uc5d0\uac8c \ub3c4\uc6c0\uc744 \uc8fc\uae30 \uc704\ud55c \uac83\uc785\ub2c8\ub2e4.  IDE\ub97c \uc0ac\uc6a9\ud558\uac70\ub098, \ud504\ub85c\ub355\uc158\uc744 \uc704\ud574 \uc774 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc744 \ubc30\ud3ec \uc911\uc778 \uacbd\uc6b0 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uc2d [...]
-jsf.config.verifyobjects.failures_detected=JSF1060: \ud655\uc778\uc774 \ud55c \ubc88 \uc774\uc0c1 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.  \uc138\ubd80 \uc815\ubcf4\uac00 \uc774 \uba54\uc2dc\uc9c0 \ub2e4\uc74c\uc5d0 \ud45c\uc2dc\ub429\ub2c8\ub2e4.
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061: \uacbd\uace0! \uc911\ubcf5\ub41c \ub2e8\uacc4 \uc218\uc2e0\uae30\ub97c \ucd94\uac00\ud558\ub824\uace0 \uc2dc\ub3c4\ud588\uc2b5\ub2c8\ub2e4: {0}.  \uc774 \uc911\ubcf5\ub41c \ub2e8\uacc4 \uc218\uc2e0\uae30\uac00 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062: \uacbd\uace0!  ExternalContext.getResponse()\uc5d0\uc11c \ubc18\ud658\ub418\ub294 \uc751\ub2f5 \uac1d\uccb4\ub294 'public void flushContentToWrappedResponse()' \uc11c\uba85\uc744 \ud3ec\ud568\ud55c \uba54\uc18c\ub4dc\ub97c \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  JSP \ud658\uacbd\uc5d0\uc11c \ub0b4\uc6a9 \uc778\ud130\uc704\ube59(content interweaving)\uc744 \uc81c\uacf5\ud558\ub824\uba74 \uc774 \uba54\uc18c\ub4dc\uac00 \ud544 [...]
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062: \uacbd\uace0!  ExternalContext.getResponse()\uc5d0\uc11c \ubc18\ud658\ub418\ub294 \uc751\ub2f5 \uac1d\uccb4\ub294 'public boolean isBytes()' \uc11c\uba85\uc744 \ud3ec\ud568\ud55c \uba54\uc18c\ub4dc\ub97c \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  JSP \ud658\uacbd\uc5d0\uc11c \ub0b4\uc6a9 \uc778\ud130\uc704\ube59(content interweaving)\uc744 \uc81c\uacf5\ud558\ub824\uba74 \uc774 \uba54\uc18c\ub4dc\uac00 \ud544\uc694\u [...]
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062: \uacbd\uace0!  ExternalContext.getResponse()\uc5d0\uc11c \ubc18\ud658\ub418\ub294 \uc751\ub2f5 \uac1d\uccb4\ub294 'public boolean isChars()' \uc11c\uba85\uc744 \ud3ec\ud568\ud55c \uba54\uc18c\ub4dc\ub97c \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  JSP \ud658\uacbd\uc5d0\uc11c \ub0b4\uc6a9 \uc778\ud130\uc704\ube59(content interweaving)\uc744 \uc81c\uacf5\ud558\ub824\uba74 \uc774 \uba54\uc18c\ub4dc\uac00 \ud544\uc694\u [...]
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062: \uacbd\uace0!  ExternalContext.getResponse()\uc5d0\uc11c \ubc18\ud658\ub418\ub294 \uc751\ub2f5 \uac1d\uccb4\ub294 'public char[] getChars()' \uc11c\uba85\uc744 \ud3ec\ud568\ud55c \uba54\uc18c\ub4dc\ub97c \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  JSP \ud658\uacbd\uc5d0\uc11c \ub0b4\uc6a9 \uc778\ud130\uc704\ube59(content interweaving)\uc744 \uc81c\uacf5\ud558\ub824\uba74 \uc774 \uba54\uc18c\ub4dc\uac00 \ud544\uc694\ [...]
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062: \uacbd\uace0!  ExternalContext.getResponse()\uc5d0\uc11c \ubc18\ud658\ub418\ub294 \uc751\ub2f5 \uac1d\uccb4\ub294 'public void resetBuffers' \uc11c\uba85\uc744 \ud3ec\ud568\ud55c \uba54\uc18c\ub4dc\ub97c \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.  JSP \ud658\uacbd\uc5d0\uc11c \ub0b4\uc6a9 \uc778\ud130\uc704\ube59(content interweaving)\uc744 \uc81c\uacf5\ud558\ub824\uba74 \uc774 \uba54\uc18c\ub4dc\uac00 \ud544\uc [...]
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063: \uacbd\uace0! HttpSession\uc5d0 \uc77c\ub828\ud654\ud560 \uc218 \uc5c6\ub294 \uc18d\uc131 \uac12\uc744 \uc124\uc815\ud569\ub2c8\ub2e4(\ud0a4: {0}, \uac12 \ud074\ub798\uc2a4: {1}).
-jsf.application.resource.unable_to_serve_from_library=JSF1064: {1} \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c {0} \uc790\uc6d0\uc744 \ucc3e\uac70\ub098 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.application.resource.unable_to_serve=JSF1064: {0} \uc790\uc6d0\uc744 \ucc3e\uac70\ub098 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.application.resource.unable_to_determine_resource_version=JSF1065: \uc790\uc6d0 \uc774\ub984 {0}\uc758 \ubc84\uc804\uc744 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.application.resource.unable_to_create_compression_directory=JSF1065: \uc555\ucd95\ub41c \uc790\uc6d0\uc744 \uc800\uc7a5\ud560 {0} \ub514\ub809\ud1a0\ub9ac\ub97c \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.application.publish.event.base_type_mismatch=JSF1066: \uc18c\uc2a4 \uac1d\uccb4 {0}\uc740(\ub294) \uc81c\uacf5\ub41c \uae30\ubcf8 \uc720\ud615 {1}\uc758 \uc778\uc2a4\ud134\uc2a4\uac00 \uc544\ub2d9\ub2c8\ub2e4.  \uc774\ubca4\ud2b8 \uac80\uc0c9\uc774 \uc218\ud589\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-jsf.config.web_resource_not_found=JSF1067: {1} \uad6c\uc131 \uc635\uc158\uc5d0\uc11c \uc9c0\uc815\ud55c \uc790\uc6d0 {0}\uc744(\ub97c) \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc790\uc6d0\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.cannot_instantiate_component_error=JSF1068: component-type\uc774 {0}\uc778 \uad6c\uc131 \uc694\uc18c\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069: JSF 2.0 Facelets ViewHandler\ub97c \uc774\uc804 FaceletViewHandler, {0}(\uc73c)\ub85c \ube44\ud65c\uc131\ud654\ud558\ub3c4\ub85d \uba85\uc2dc\uc801\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc6d0\ud558\ub294 \ub3d9\uc791\uc774 \uc544\ub2c8\uba74 \uc774\uc804 FaceletViewHandler \ubc0f \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c \uc81c\uac70\ud558\uc2ed\uc2dc\uc624.
-jsf.navigation_invalid_query_string=JSF1070: \ud0d0\uc0c9 \uacb0\uacfc {0}\uc758 \ucffc\ub9ac \ubb38\uc790\uc5f4\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071: {1}\uc758 beforePhase() \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
-jsf.context.exception.handler.log_after=JSF1072: {1}\uc758 afterPhase() \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
-jsf.context.exception.handler.log=JSF1073: {1} \ucc98\ub9ac \uc911 {0} \ubc1c\uc0dd: UIComponent-ClientId={2}, \uba54\uc2dc\uc9c0={3}
-jsf.managed.bean.duplicate=JSF1074: ''{0}''(\uc774)\ub77c\ub294 \uad00\ub9ac\ub418\ub294 Bean\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uae30\uc874\uc758 \uad00\ub9ac\ub418\ub294 Bean \ud074\ub798\uc2a4 \uc720\ud615 {1}\uc744(\ub97c) {2}(\uc73c)\ub85c \ub300\uccb4\ud558\ub294 \uc911\uc785\ub2c8\ub2e4.
-jsf.resource.mime.type.configration.invalid=JSF1075: MIME \uc720\ud615 {0}\uc774(\uac00) \ud544\uc694\ud55c \ud328\ud134 {1}\uacfc(\uc640) \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ubb34\uc2dc\ud569\ub2c8\ub2e4.
-jsf.annotation.scanner.configuration.invalid=JSF1076: [{0}] {1} : jar \uc0ac\uc591 \ud615\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ud544\uc694\ud55c jar:<jar \uc774\ub984 \ub610\ub294 *>:<\ud328\ud0a4\uc9c0 \uc774\ub984 *>.  \ud56d\ubaa9\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077: [{0}] {1} : jar \uc774\ub984\uc5d0 \ub300\ud574 \uc911\ubcf5\ub418\ub294 \uc640\uc77c\ub4dc\uce74\ub4dc \ud56d\ubaa9\uc774 \ubc1c\uacac\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ud56d\ubaa9\uc774 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.configuration.web.xml.parse.failed=JSF1078: ''{0}'' \ucee8\ud14d\uc2a4\ud2b8\uc758 \ubc30\ud3ec \uc124\uba85\uc790\ub97c \ucc98\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.configuration.absolute.order.duplicate.document=JSF1079: \uc808\ub300 \uc21c\uc11c\ub97c \ucc98\ub9ac\ud558\ub294 \uc911 {0} \uc774\ub984\uc758 \ubb38\uc11c\uac00 \uc5ec\ub7ec \uac1c \ubc1c\uacac\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ud574\ub2f9 \uc774\ub984\uc758 \uccab \ubc88\uc9f8 \ubb38\uc11c\ub9cc \ucc98\ub9ac\ud558\ub294 \uc911\uc785\ub2c8\ub2e4.
-jsf.configuration.absolute.order.missing.document=JSF1080: \uc808\ub300 \uc21c\uc11c \ucc98\ub9ac\ub97c \uc218\ud589\ud558\ub294 \uc911 ''{0}'' \uc774\ub984\uc758 \ubb38\uc11c\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.configuration.web.faces.config.contains.ordering=JSF1081: /WEB-INF/faces-config.xml\uc5d0 <ordering> \uc694\uc18c\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.  \ud574\ub2f9 \uc694\uc18c\uac00 \ubb34\uc2dc\ub429\ub2c8\ub2e4.
-jsf.configuration.illegal.eager.bean=JSF1082: Eager \uad00\ub9ac\ub418\ub294 Bean \uc778\uc2a4\ud134\uc2a4\ud654\ub294 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \ubc94\uc704\uc758 Bean\uc5d0\ub9cc \ud5c8\uc6a9\ub429\ub2c8\ub2e4.  \uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc740(\ub294) eager\ub85c \uad6c\uc131\ub418\uc9c0\ub9cc \ubc94\uc704 ''{1}''\uc774(\uac00) \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-jsf.composite.component.insertchildren.missing.template=JSF1083: {0}" \uc704\uce58\uc5d0\uc11c insertChildren \ucc98\ub9ac\uae30\uc5d0 \ub300\ud574 \uc18c\uc720 \uc911\uc778 \ubcf5\ud569 \uad6c\uc131 \uc694\uc18c \ud15c\ud50c\ub9ac\ud2b8\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.composite.component.insertfacet.missing.template=JSF1084: {0}" \uc704\uce58\uc5d0\uc11c insertFacet \ucc98\ub9ac\uae30\uc5d0 \ub300\ud574 \uc18c\uc720 \uc911\uc778 \ubcf5\ud569 \uad6c\uc131 \uc694\uc18c \ud15c\ud50c\ub9ac\ud2b8\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.managed.bean.custom.scope.eval.null=JSF1085: \uc0ac\uc6a9\uc790 \uc815\uc758 \ubc94\uc704 ''{0}''\uc774(\uac00) null\ub85c \ud3c9\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uad00\ub9ac\ub418\ub294 Bean\uc774 \ubc94\uc704\uc5d0 \uc804\ub2ec\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086: \uc0ac\uc6a9\uc790 \uc815\uc758 \ubc94\uc704 ''{0}''\uc774(\uac00) null\ub85c \ud3c9\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uad00\ub9ac\ub418\ub294 Bean\uc774 \uc874\uc7ac\ud558\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.facelets.error.page.response.committed=JSF1087: \uc751\ub2f5\uc774 \uc774\ubbf8 \uc644\uacb0\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 Facelets \uc624\ub958 \ud398\uc774\uc9c0\ub97c \uc0dd\uc131\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-jsf.state.server.cannot.parse.int.option=JSF1088: \ucee8\ud14d\uc2a4\ud2b8 init \ub9e4\uac1c \ubcc0\uc218 {0}\uc744(\ub97c) \uad6c\ubb38 \ubd84\uc11d\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.  \ub300\uc2e0 \uae30\ubcf8\uac12 {1}\uc744(\ub97c) \uc0ac\uc6a9\ud569\ub2c8\ub2e4.
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089: UIOutputTarget \uad6c\uc131 \uc694\uc18c {0}\uc744(\ub97c) \uc0ac\uc6a9\ud558\ub824\uba74 NavigationHandler\uc774(\uac00) ConfigurableNavigationHandler\uc758 \uc778\uc2a4\ud134\uc2a4\uc5ec\uc57c \ud569\ub2c8\ub2e4.
-jsf.outcometarget.navigation.case.not.resolved=JSF1090: {0} \uad6c\uc131 \uc694\uc18c\uc5d0 \ub300\ud55c \ud0d0\uc0c9 \ud56d\ubaa9\uc774 \ud655\uc778\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-jsf.externalcontext.no.mime.type.found=JSF1091: {0} \ud30c\uc77c\uc5d0 \ub300\ud55c MIME \uc720\ud615\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub824\uba74 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc758 web.xml\uc5d0 MIME \uc720\ud615 \ub9e4\ud551\uc744 \ucd94\uac00\ud558\uc2ed\uc2dc\uc624.
-jsf.config.legacy.facelet.warning=JSF1029: \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc758 \ubc84\uc804\uc740 2.0\uc73c\ub85c \uc9c0\uc815\ub418\uc9c0\ub9cc(/WEB-INF/faces-config.xml\uc758 \ubc84\uc804\uc5d0 \ub530\ub77c \uba85\uc2dc\uc801\uc73c\ub85c \ub610\ub294 /WEB-INF/faces-confg.xml\uc758 \ubd80\uc7ac\ub85c), ''{0}'' \ud074\ub798\uc2a4\ub294 \ub808\uac70\uc2dc facelet \ud074\ub798\uc2a4\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9d1\ub2c8\ub2e4.  \uc774 \ud074\ub798\uc2a4\uac00 \ub098\ud0c0\ub0 [...]
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_pt_BR.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_pt_BR.properties
deleted file mode 100644
index 09a2068..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_pt_BR.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001: O bean gerenciado\u00b7{0} n\u00e3o p\u00f4de ser criado.
-jsf.cannot_instantiate_validator_error=JSF1005: N\u00e3o pode criar inst\u00e2ncia para o validador de tipo {0}
-jsf.cannot_instantiate_converter_error=JSF1006: N\u00e3o pode criar inst\u00e2ncia para o conversor de tipo {0}
-jsf.duplicate_component_id_error=JSF1007: ID de componente duplicada {0} encontrada na visualiza\u00e7\u00e3o.
-jsf.redirect_failed_error=JSF1008: Falha ao redirecionar para o caminho {0}
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009: N\u00e3o foi poss\u00edvel determinar o mapeamento do FaceServlet para o caminho {0} do servlet.
-jsf.illegal_view_id_error=JSF1010: ID de visualiza\u00e7\u00e3o ilegal {0}. A ID deve come\u00e7ar com ''/''
-jsf.util.no.adapter.ctor.available="JSF1016: A classe de destino ''{0}'' n\u00e3o possui um construtor de adaptador para aceitar ''{1}'', em vez disso, ela cria uma nova inst\u00e2ncia.
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011: A avalia\u00e7\u00e3o da express\u00e3o do atributo ''{0}'' resultou em um tipo inesperado.  Esperado {1}, recebido {2}.
-jsf.util_no_annotation_processed=JSF1014: N\u00e3o foi poss\u00edvel carregar a classe de anota\u00e7\u00e3o\u00b7''{0}''.  Como resultado, essa anota\u00e7\u00e3o n\u00e3o ser\u00e1 processada.
-jsf.config.listener.version=Inicializando Mojarra |version.string| para o contexto ''{0}''
-jsf.config.listener.version.complete=Conclu\u00edda a inicializa\u00e7\u00e3o do Mojarra |version.string| para o contexto ''{0}''
-jsf.config.listener.predestroy.error=JSF1017: ''{0}'' foi lan\u00e7ado durante a manipula\u00e7\u00e3o da(s) anota\u00e7\u00e3o(\u00f5es) de PreDestroy para o bean ''{1}'' no escopo ''{2}''.  Mensagem: {3}
-jsf.viewhandler.requestpath.recursion=JSF1015: O caminho da solicita\u00e7\u00e3o ''{0}'' come\u00e7a com uma ou mais ocorr\u00eancias do mapeamento do prefixo do FacesServlet ''{1}''.
-jsf.non_displayed_message=AVISO: FacesMessage(s) foram enfileirados, mas podem n\u00e3o ter sido exibidos.{0}
-
-jsf.config.webconfig.configinfo=JSF1018: [{0}] A op\u00e7\u00e3o de configura\u00e7\u00e3o ''{1}'' foi definida para ''{2}''
-jsf.config.webconfig.configinfo.reset=JSF1019: [{0}] A op\u00e7\u00e3o de configura\u00e7\u00e3o ''{1}'' foi REDEFINIDA para ''{2}''
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020: [{0}] A op\u00e7\u00e3o de configura\u00e7\u00e3o ''{1}'' foi REDEFINIDA para ATIVADO
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020: [{0}] A op\u00e7\u00e3o de configura\u00e7\u00e3o ''{1}'' foi REDEFINIDA para DESATIVADO
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021: [{0}] Op\u00e7\u00e3o de configura\u00e7\u00e3o ''{1}'' - ATIVADO
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021: [{0}] Op\u00e7\u00e3o de configura\u00e7\u00e3o ''{1}'' - DESATIVADO
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022: [{0}] Valor inv\u00e1lido ''{1}'' para a op\u00e7\u00e3o de configura\u00e7\u00e3o ''{2}''.  Os valores v\u00e1lidos s\u00e3o ''{3}''.  Falha ao redefinir para o padr\u00e3o de ''{4}''.
-jsf.config.webconfig.enventryinfo=JSF1023: [{0}] Entrada do ambiente ''{1}'' processada, valor ''{2}''
-jsf.config.webconfig.enventry.clientencrypt=JSF1024: [{0}] Criptografia de estado de cliente: ATIVADA
-jsf.config.webconfig.param.deprecated=JSF1025: [{0}] O par\u00e2metro de inicializa\u00e7\u00e3o de contexto ''{1}'' est\u00e1 desaprovado.  A op\u00e7\u00e3o continuar\u00e1 configurada, mas use ''{2}'' no futuro.
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025: [{0}] O par\u00e2metro de iniciali\u00e7\u00e3o de contexto ''{1}'' est\u00e1 desaprovado e n\u00e3o ter\u00e1 efeito.  
-jsf.config.webconfig.option.notconfigured=JSF1026: [{0}] A op\u00e7\u00e3o de configura\u00e7\u00e3o ''{1}'' n\u00e3o est\u00e1 configurada
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027: [{0}] Os ELResolvers para JSF n\u00e3o foram registrados com o cont\u00eainer JSP.
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028: [{0}] Os ELResolvers para JSF foram registrados com o cont\u00eainer JSP.
-jsf.spi.injection.provider_not_implemented=JSF1029: A implementa\u00e7\u00e3o do InjectionProvider especificado ''{0}'' n\u00e3o implementa a interface do InjectionProvider. 
-jsf.spi.injection.provider_not_found=JSF1030: A implementa\u00e7\u00e3o do InjectionProvider especificado ''{0}'' n\u00e3o pode ser carregada.
-jsf.spi.injection.provider_cannot_instantiate=JSF1031: O InjectionProvider especificado ''{0}'' n\u00e3o pode ser instanciado.
-jsf.spi.injection.provider_configured=JSF1032: A inje\u00e7\u00e3o de recurso foi ATIVADA usando o InjectionProvider ''{0}''.
-jsf.spi.injection.no_injection=JSF1033: A inje\u00e7\u00e3o de recurso est\u00e1 DESATIVADA.
-jsf.spi.serialization.provider_not_implemented=JSF1036: A implementa\u00e7\u00e3o do SerializationProvider especificado ''{0}'' n\u00e3o implementa a interface do SerializationProvider. 
-jsf.spi.serialization.provider_not_found=JSF1037: A implementa\u00e7\u00e3o do SerializationProvider especificado ''{0}'' n\u00e3o pode ser carregada.
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038: O SerializationProvider especificado ''{0}'' n\u00e3o pode ser instanciado.
-jsf.spi.serialization.provider_configured=JSF1039: A inje\u00e7\u00e3o de recurso foi ATIVADA usando o InjectionProvider ''{0}''.
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034: O valor ''{1}'' para ''{0}'' deve ser divis\u00edvel por 2.  Definindo como padr\u00e3o para ''{2}''.
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035: O valor ''{1}'' para ''{0}'' n\u00e3o \u00e9 um n\u00famero inteiro.  Definindo como padr\u00e3o para ''{2}''.
-jsf.core.taglib.invalid_locale_value=JSF1041: O local especificado, ''{0}'', \u00e9 inv\u00e1lido.  O valor do atributo de local deve ser um c\u00f3digo de idioma ISO 639 v\u00e1lido que n\u00e3o cont\u00e9m um pa\u00eds ou variante.
-jsf.core.taglib.invalid_language=JSF1042: O idioma especificado, ''{0}'', n\u00e3o \u00e9 um c\u00f3digo de idioma ISO 639 conhecido.
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043: {0} para o componente ''{1}'' n\u00e3o ser\u00e1 processado - 'liga\u00e7\u00e3o' e 'tipo' s\u00e3o nulos.
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043: O PhaseListener (especificado pelo PhaseListenerTag) n\u00e3o ser\u00e1 processado - 'liga\u00e7\u00e3o' e 'tipo' s\u00e3o nulos
-jsf.core.web.injection.method_not_static=JSF1044: O m\u00e9todo ''{0}'' marcado com a anota\u00e7\u00e3o ''{1}'' n\u00e3o pode ser est\u00e1tico.  Este m\u00e9todo ser\u00e1 ignorado.
-jsf.core.web.injection.method_return_not_void=JSF1045: O m\u00e9todo ''{0}'' marcado com a anota\u00e7\u00e3o ''{1}'' pode retornar somente\u00b7vazio.  Este m\u00e9todo ser\u00e1 ignorado.
-jsf.core.web.injection.method_no_params=JSF1046: O m\u00e9todo ''{0}'' marcado com a anota\u00e7\u00e3o ''{1}'' n\u00e3o pode ter par\u00e2metros.  Este m\u00e9todo ser\u00e1 ignorado.
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047: O m\u00e9todo ''{0}'' marcado com a anota\u00e7\u00e3o ''{1}'' n\u00e3o pode declarar nenhuma exce\u00e7\u00e3o marcada.  Este m\u00e9todo ser\u00e1 ignorado.
-jsf.core.injection.provider_generic_web_configured=JSF1048: Anota\u00e7\u00f5es PostConstruct/PreDestroy presentes.  Os m\u00e9todos ManagedBeans marcados com essas anota\u00e7\u00f5es informar\u00e3o as anota\u00e7\u00f5es processadas.
-jsf.spi.injection.provider.invalid_service_entry=JSF1049: Entrada de servi\u00e7o ''{0}'' inv\u00e1lida.  O formato deve ser ''<DiscoverableInjectionProviderClass>:<DelegateClass>''.  A entrada ser\u00e1 ignorada.
-jsf.spi.injection.provider.discovery_error=JSF1050: Erro ao invocar DiscoverableInjectionProvider.isProviderAppropriate(String) para a entrada ''{0}''.  A entrada ser\u00e1 ignorada.
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051: A entrada de servi\u00e7o ''{0}'' n\u00e3o estende DiscoverableInjectionProvider.  A entrada ser\u00e1 ignorada.
-jsf.spi.provider.cannot_read_service=JSF1052: Erro inesperado ao processar a entrada de servi\u00e7o ''{0}''.
-jsf.lifecycle.phaselistener.exception=JSF1053: (Escuta: {0}, ID da fase: {1},  ID da exibi\u00e7\u00e3o: {2}) Exce\u00e7\u00e3o lan\u00e7ada durante a execu\u00e7\u00e3o de phase-listener: {3}
-jsf.lifecycle.phase.exception=JSF1054: (ID da fase: {0}, ID da exibi\u00e7\u00e3o: {1}) Exce\u00e7\u00e3o lan\u00e7ada durante a execu\u00e7\u00e3o da fase: {2}
-jsf.config.cannot_resolve_entities=JSF1055: N\u00e3o foi poss\u00edvel localizar o recurso local ''{0}''.  A resolu\u00e7\u00e3o de entidade padr\u00e3o ser\u00e1 usada quando uma solicita\u00e7\u00e3o for apresentada para ''{1}''.
-jsf.config.cannot_create_inputsource=JSF1056: N\u00e3o foi poss\u00edvel criar InputSource para a URL ''{0}''.
-jsf.config.navigation.from_view_id_leading_slash=JSF1057: O recurso referido por\u00b7from-view-id, ''{0}'', n\u00e3o come\u00e7a com ''/''.  Isso ser\u00e1 adicionado para voc\u00ea, mas deveria ser corrigido. 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058: O recurso referido por to-view-id, ''{0}'', para navega\u00e7\u00e3o de ''{1}'', n\u00e3o come\u00e7a com ''/''.  Isso ser\u00e1 adicionado para voc\u00ea, mas deveria ser corrigido.
-jsf.config.navigation.if_invalid_expression=JSF1070: A condi\u00e7\u00e3o ''{0}'' para navega\u00e7\u00e3o de ''{1}'' n\u00e3o \u00e9 uma express\u00e3o de valor cont\u00edguo v\u00e1lido e ser\u00e1 ignorada.
-jsf.config.verifyobjects.development_only=JSF1059: AVISO!  O recurso com.sun.faces.verifyObjects foi desenvolvido para ajudar desenvolvedores que n\u00e3o usam ferramentas.  Ele n\u00e3o deve ser ativado se um IDE, ou se esse aplicativo estiver sendo implantado para produ\u00e7\u00e3o, pois impactar\u00e1 nos hor\u00e1rios de in\u00edcio do aplicativo.
-jsf.config.verifyobjects.failures_detected=JSF1060: A verifica\u00e7\u00e3o gerou uma ou mais falhas.  Os detalhes ser\u00e3o exibidos ap\u00f3s esta mensagem.
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061: AVISO! Houve uma tentativa de adicionar uma escuta de fase duplicada: {0}.  Esta duplicata ser\u00e1 ignorada.
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062: AVISO!  O objeto de resposta retornado por ExternalContext.getResponse() n\u00e3o fornece um m\u00e9todo com a assinatura 'public void flushContentToWrappedResponse()'.  Este m\u00e9todo \u00e9 necess\u00e1rio para fornecer liga\u00e7\u00f5es de conte\u00fado em um ambiente JSP.  Por isso, o conte\u00fado n\u00e3o ser\u00e1 exibido corretamente.
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062: AVISO!  O objeto de resposta retornado por ExternalContext.getResponse() n\u00e3o fornece um m\u00e9todo com a assinatura 'public boolean isBytes()'.  Este m\u00e9todo \u00e9 necess\u00e1rio para fornecer liga\u00e7\u00f5es de conte\u00fado em um ambiente JSP.  Por isso, o conte\u00fado n\u00e3o ser\u00e1 exibido corretamente.
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062: AVISO!  O objeto de resposta retornado por ExternalContext.getResponse() n\u00e3o fornece um m\u00e9todo com a assinatura 'public boolean isChars'.  Este m\u00e9todo \u00e9 necess\u00e1rio para fornecer liga\u00e7\u00f5es de conte\u00fado em um ambiente JSP.  Por isso, o conte\u00fado n\u00e3o ser\u00e1 exibido corretamente.
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062: AVISO!  O objeto de resposta retornado por ExternalContext.getResponse() n\u00e3o fornece um m\u00e9todo com a assinatura 'public char[] getChars()'.  Este m\u00e9todo \u00e9 necess\u00e1rio para fornecer liga\u00e7\u00f5es de conte\u00fado em um ambiente JSP.  Por isso, o conte\u00fado n\u00e3o ser\u00e1 exibido corretamente.
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062: AVISO!  O objeto de resposta retornado por ExternalContext.getResponse() n\u00e3o fornece um m\u00e9todo com a assinatura 'public void resetBuffers'.  Este m\u00e9todo \u00e9 necess\u00e1rio para fornecer liga\u00e7\u00f5es de conte\u00fado em um ambiente JSP.  Por isso, o conte\u00fado n\u00e3o ser\u00e1 exibido corretamente.
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063: AVISO! Definindo valor de atributo n\u00e3o serializ\u00e1vel em HttpSession (chave: {0}, classe do valor: {1}).
-jsf.application.resource.unable_to_serve_from_library=JSF1064: N\u00e3o foi poss\u00edvel encontrar ou fornecer o recurso, {0}, pela biblioteca, {1}.
-jsf.application.resource.unable_to_serve=JSF1064: N\u00e3o foi poss\u00edvel encontrar ou fornecer o recurso, {0}.
-jsf.application.resource.unable_to_determine_resource_version=JSF1065: N\u00e3o foi poss\u00edvel determinar a vers\u00e3o do nome do recurso {0}.
-jsf.application.resource.unable_to_create_compression_directory=JSF1065: N\u00e3o foi poss\u00edvel criar o diret\u00f3rio {0} para armazenar o recurso compactado.
-jsf.application.publish.event.base_type_mismatch=JSF1066: O objeto de origem {0} n\u00e3o \u00e9 uma inst\u00e2ncia do tipo de base fornecido {1}.  A pesquisa de evento n\u00e3o ser\u00e1 realizada.
-jsf.config.web_resource_not_found=JSF1067: O recurso {0} especificado pela op\u00e7\u00e3o de configura\u00e7\u00e3o {1} n\u00e3o p\u00f4de ser encontrado.  O recurso ser\u00e1 ignorado.
-jsf.cannot_instantiate_component_error=JSF1068: N\u00e3o \u00e9 poss\u00edvel criar inst\u00e2ncia para o componente com o component-type {0}
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069: Desativar os Facelets do JSF 2.0 ViewHandler como um FaceletViewHandler antigo, {0}, foi explicitamente configurado. Se este n\u00e3o for um comportamento desejado, remova o FaceletViewHandler antigo e a biblioteca do seu aplicativo.
-jsf.navigation_invalid_query_string=JSF1070: Seq\u00fc\u00eancia de consulta inv\u00e1lida no resultado da navega\u00e7\u00e3o {0}
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071: {0} obtido durante o processamento de beforePhase() de {1}: UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log_after=JSF1072: {0} obtido durante o processamento de afterPhase() de {1}: UIComponent-ClientId={2}, Message={3}
-jsf.context.exception.handler.log=JSF1073: {0} obtido durante o processamento de {1}: UIComponent-ClientId={2}, Message={3}
-jsf.managed.bean.duplicate=JSF1074: O bean gerenciado denominado ''{0}'' j\u00e1 foi registrado.  Substituindo o tipo de classe do bean gerenciado {1} por {2}.
-jsf.resource.mime.type.configration.invalid=JSF1075: O tipo de mime {0} n\u00e3o corresponde ao padr\u00e3o esperado {1}. Ignorando.
-jsf.annotation.scanner.configuration.invalid=JSF1076: [{0}] {1}: formato de especifica\u00e7\u00e3o de jar inv\u00e1lido.  Esperado jar:<jar name or *>:<package or *>.  A entrada ser\u00e1 ignorada.
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077: [{0}] {1}: entrada de curinga duplicada para o nome do jar encontrada.  A entrada ser\u00e1 ignorada.
-jsf.configuration.web.xml.parse.failed=JSF1078: N\u00e3o foi poss\u00edvel processar o descritor de implanta\u00e7\u00e3o para o contexto ''{0}''.
-jsf.configuration.absolute.order.duplicate.document=JSF1079: V\u00e1rios documentos denominados {0} encontrados durante o processamento da solicita\u00e7\u00e3o absoluta.  Processando apenas o primeiro documento nomeado.
-jsf.configuration.absolute.order.missing.document=JSF1080: N\u00e3o foi poss\u00edvel nomear ''{0}'' durante o processamento da solicita\u00e7\u00e3o absoluta.
-jsf.configuration.web.faces.config.contains.ordering=JSF1081: /WEB-INF/faces-config.xml cont\u00e9m elementos de <ordering>.  Eles ser\u00e3o ignorados.
-jsf.configuration.illegal.eager.bean=JSF1082: A cria\u00e7\u00e3o de inst\u00e2ncias de bean gerenciado eager \u00e9 permitida somente para beans no escopo do aplicativo.  O bean gerenciado ''{0}'' est\u00e1 configurado como eager, mas o escopo ''{1}'' \u00e9 inv\u00e1lido.
-jsf.composite.component.insertchildren.missing.template=JSF1083: N\u00e3o foi poss\u00edvel encontrar o modelo de componente composto de propriedade para o manipulador insertChildren no local: {0}"
-jsf.composite.component.insertfacet.missing.template=JSF1084: N\u00e3o foi poss\u00edvel encontrar o modelo de componente composto de propriedade para o manipulador insertFacet no local: {0}"
-jsf.managed.bean.custom.scope.eval.null=JSF1085: Escopo personalizado ''{0}'' avaliado como nulo.  O bean gerenciado n\u00e3o foi empurrado para o escopo.
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086: Escopo personalizado ''{0}'' avaliado como nulo.  N\u00e3o foi poss\u00edvel determinar se o bean gerenciado existe.
-jsf.facelets.error.page.response.committed=JSF1087: N\u00e3o foi poss\u00edvel gerar a p\u00e1gina de erro de Facelets porque a resposta j\u00e1 foi enviada.
-jsf.state.server.cannot.parse.int.option=JSF1088: Erro ao analisar o par\u00e2metro init do contexto {0}.  Usando o valor padr\u00e3o {1}.
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089: NavigationHandler deve ser uma inst\u00e2ncia de ConfigurableNavigationHandler para usar um componente UIOutputTarget {0}.
-jsf.outcometarget.navigation.case.not.resolved=JSF1090: Caso de navega\u00e7\u00e3o n\u00e3o resolvido para o componente {0}.
-jsf.externalcontext.no.mime.type.found=JSF1091: Nenhum tipo de mime p\u00f4de ser encontrado para o arquivo {0}.  Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
-jsf.config.legacy.facelet.warning=JSF1029:  A vers\u00e3o do aplicativo \u00e9 2.0 (explicitado pela vers\u00e3o de /WEB-INF/faces-config.xml ou pela aus\u00eancia de um /WEB-INF/faces-confg.xml). Contudo, a classe ''{0}'' depende de uma classe de facelet legado.  O artefato do facelet representado por esta classe n\u00e3o ser\u00e1 registrado.
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_zh_CN.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_zh_CN.properties
deleted file mode 100644
index c46abdd..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_zh_CN.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001\uff1a\u65e0\u6cd5\u521b\u5efa Managedbean {0}\u3002
-jsf.cannot_instantiate_validator_error=JSF1005\uff1a\u65e0\u6cd5\u5b9e\u4f8b\u5316\u7c7b\u578b\u4e3a {0} \u7684\u9a8c\u8bc1\u5668
-jsf.cannot_instantiate_converter_error=JSF1006\uff1a\u65e0\u6cd5\u5b9e\u4f8b\u5316\u7c7b\u578b\u4e3a {0} \u7684\u8f6c\u6362\u5668
-jsf.duplicate_component_id_error=JSF1007\uff1a\u89c6\u56fe\u4e2d\u6709\u91cd\u590d\u7684\u7ec4\u4ef6 ID {0}\u3002
-jsf.redirect_failed_error=JSF1008\uff1a\u91cd\u5b9a\u5411\u5230\u8def\u5f84 {0} \u5931\u8d25
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009\uff1a\u65e0\u6cd5\u786e\u5b9a Servlet \u8def\u5f84 {0} \u7684 FaceServlet \u6620\u5c04\u3002
-jsf.illegal_view_id_error=JSF1010\uff1a\u89c6\u56fe ID {0} \u975e\u6cd5\u3002\u8be5 ID \u5fc5\u987b\u4ee5 ''/'' \u5f00\u5934
-jsf.util.no.adapter.ctor.available=JSF1016\uff1a\u76ee\u6807\u7c7b ''{0}'' \u6ca1\u6709\u7528\u4e8e\u63a5\u53d7 ''{1}'' \u7684\u9002\u914d\u5668\u6784\u9020\u51fd\u6570\uff0c\u800c\u662f\u4f1a\u521b\u5efa\u65b0\u5b9e\u4f8b\u3002
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011\uff1a\u5c5e\u6027 ''{0}'' \u7684\u8868\u8fbe\u5f0f\u7684\u8ba1\u7b97\u7ed3\u679c\u662f\u610f\u5916\u7c7b\u578b\u3002\u5e94\u4e3a {1}\uff0c\u4f46\u6536\u5230\u7684\u5374\u662f {2}\u3002
-jsf.util_no_annotation_processed=JSF1014\uff1a\u65e0\u6cd5\u88c5\u5165\u6ce8\u91ca\u7c7b ''{0}''\u3002\u56e0\u6b64\u4e0d\u4f1a\u5904\u7406\u6b64\u6ce8\u91ca\u3002
-jsf.config.listener.version=\u521d\u59cb\u5316\u4e0a\u4e0b\u6587 ''{0}'' \u7684 Mojarra |version.string|
-jsf.config.listener.version.complete=\u521d\u59cb\u5316\u4e0a\u4e0b\u6587 ''{0}'' \u7684 Mojarra (|version.string|) \u5df2\u5b8c\u6210
-jsf.config.listener.predestroy.error=JSF1017\uff1a\u5728\u8303\u56f4 ''{2}'' \u4e2d\u5904\u7406 Bean ''{1}'' \u7684 PreDestroy \u6ce8\u91ca\u65f6\u629b\u51fa ''{0}''\u3002\u6d88\u606f\uff1a{3}
-jsf.viewhandler.requestpath.recursion=JSF1015\uff1a\u8bf7\u6c42\u8def\u5f84 ''{0}'' \u4ee5\u4e00\u4e2a\u6216\u591a\u4e2a FacesServlet \u524d\u7f00\u8def\u5f84\u6620\u5c04 ''{1}'' \u5f00\u5934\u3002
-jsf.non_displayed_message=\u8b66\u544a\uff1aFacesMessage \u5df2\u52a0\u5165\u961f\u5217\uff0c\u4f46\u53ef\u80fd\u5c1a\u672a\u663e\u793a\u3002{0}
-
-jsf.config.webconfig.configinfo=JSF1018\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{1}'' \u8bbe\u7f6e\u4e3a ''{2}''
-jsf.config.webconfig.configinfo.reset=JSF1019\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{1}'' \u91cd\u7f6e\u4e3a ''{2}''
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{1}'' \u91cd\u7f6e\u4e3a\u5df2\u542f\u7528
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{1}'' \u91cd\u7f6e\u4e3a\u5df2\u7981\u7528
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{1}'' - \u5df2\u542f\u7528
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{1}'' - \u5df2\u7981\u7528
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{2}'' \u7684\u503c ''{1}'' \u65e0\u6548\u3002\u6709\u6548\u503c\u4e3a ''{3}''\u3002\u6062\u590d\u4e3a\u9ed8\u8ba4\u503c ''{4}''\u3002
-jsf.config.webconfig.enventryinfo=JSF1023\uff1a[{0}] \u73af\u5883\u6761\u76ee ''{1}'' \u5df2\u5904\u7406\uff0c\u503c\u4e3a ''{2}''
-jsf.config.webconfig.enventry.clientencrypt=JSF1024\uff1a[{0}] \u5ba2\u6237\u673a\u72b6\u6001\u52a0\u5bc6\uff1a\u5df2\u542f\u7528
-jsf.config.webconfig.param.deprecated=JSF1025\uff1a[{0}] \u4e0a\u4e0b\u6587\u521d\u59cb\u5316\u53c2\u6570 ''{1}'' \u5df2\u8fc7\u65f6\u3002\u4ecd\u5c06\u914d\u7f6e\u8be5\u9009\u9879\uff0c\u4f46\u4ee5\u540e\u8bf7\u4f7f\u7528 ''{2}''\u3002
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025\uff1a[{0}] \u4e0a\u4e0b\u6587\u521d\u59cb\u5316\u53c2\u6570 ''{1}'' \u5df2\u8fc7\u65f6\uff0c\u4e0d\u8d77\u4f5c\u7528\u3002  
-jsf.config.webconfig.option.notconfigured=JSF1026\uff1a[{0}] \u914d\u7f6e\u9009\u9879 ''{1}'' \u672a\u914d\u7f6e
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027\uff1a[{0}] \u672a\u5728 JSP \u5bb9\u5668\u4e2d\u6ce8\u518c JSF \u7684 ELResolver\u3002
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028\uff1a[{0}] \u5df2\u5728 JSP \u5bb9\u5668\u4e2d\u6210\u529f\u6ce8\u518c JSF \u7684 ELResolver\u3002
-jsf.spi.injection.provider_not_implemented=JSF1029\uff1a\u6307\u5b9a\u7684 InjectionProvider \u5b9e\u73b0 ''{0}'' \u672a\u5b9e\u73b0 InjectionProvider \u63a5\u53e3\u3002 
-jsf.spi.injection.provider_not_found=JSF1030\uff1a\u6307\u5b9a\u7684 InjectionProvider \u5b9e\u73b0 ''{0}'' \u65e0\u6cd5\u88c5\u5165\u3002
-jsf.spi.injection.provider_cannot_instantiate=JSF1031\uff1a\u6307\u5b9a\u7684 InjectionProvider ''{0}'' \u65e0\u6cd5\u5b9e\u4f8b\u5316\u3002
-jsf.spi.injection.provider_configured=JSF1032\uff1a\u5df2\u4f7f\u7528 InjectionProvider ''{0}'' \u542f\u7528\u8d44\u6e90\u6ce8\u5165 (Resource injection)\u3002
-jsf.spi.injection.no_injection=JSF1033\uff1a\u8d44\u6e90\u6ce8\u5165 (Resource injection) \u5df2\u7981\u7528\u3002
-jsf.spi.serialization.provider_not_implemented=JSF1036\uff1a\u6307\u5b9a\u7684 SerializationProvider \u5b9e\u73b0 ''{0}'' \u672a\u5b9e\u73b0 SerializationProvider \u63a5\u53e3\u3002 
-jsf.spi.serialization.provider_not_found=JSF1037\uff1a\u6307\u5b9a\u7684 SerializationProvider \u5b9e\u73b0 ''{0}'' \u65e0\u6cd5\u88c5\u5165\u3002
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038\uff1a\u6307\u5b9a\u7684 SerializationProvider ''{0}'' \u65e0\u6cd5\u5b9e\u4f8b\u5316\u3002
-jsf.spi.serialization.provider_configured=JSF1039\uff1a\u5df2\u4f7f\u7528 InjectionProvider ''{0}'' \u542f\u7528\u8d44\u6e90\u6ce8\u5165 (Resource injection)\u3002
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034\uff1a''{0}'' \u7684\u503c ''{1}'' \u5fc5\u987b\u4e3a 2 \u7684\u500d\u6570\u3002\u9ed8\u8ba4\u503c\u4e3a ''{2}''\u3002
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035\uff1a''{0}'' \u7684\u503c ''{1}'' \u4e0d\u662f\u6574\u6570\u3002\u9ed8\u8ba4\u503c\u4e3a ''{2}''\u3002
-jsf.core.taglib.invalid_locale_value=JSF1041\uff1a\u6307\u5b9a\u7684\u8bed\u8a00\u73af\u5883 ''{0}'' \u65e0\u6548\u3002\u8bed\u8a00\u73af\u5883\u5c5e\u6027\u503c\u5fc5\u987b\u4e3a\u4e0d\u5305\u542b\u56fd\u5bb6/\u5730\u533a\u6216\u53d8\u91cf\u7684\u6709\u6548 ISO 639 \u8bed\u8a00\u4ee3\u7801\u3002
-jsf.core.taglib.invalid_language=JSF1042\uff1a\u6307\u5b9a\u7684\u8bed\u8a00 ''{0}'' \u4e0d\u662f\u5df2\u77e5\u7684 ISO 639 \u8bed\u8a00\u4ee3\u7801\u3002
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043\uff1a\u7ec4\u4ef6 ''{1}'' \u7684 {0} \u4e0d\u4f1a\u88ab\u5904\u7406 - 'binding' \u548c 'type' \u90fd\u662f null\u3002
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043\uff1a\uff08\u901a\u8fc7 PhaseListenerTag \u6307\u5b9a\u7684\uff09PhaseListener \u4e0d\u4f1a\u88ab\u5904\u7406 - 'binding' \u548c 'type' \u90fd\u662f null
-jsf.core.web.injection.method_not_static=JSF1044\uff1a\u6807\u6709 ''{1}'' \u6ce8\u91ca\u7684\u65b9\u6cd5 ''{0}'' \u4e0d\u80fd\u662f\u9759\u6001\u7684\u3002\u6b64\u65b9\u6cd5\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.core.web.injection.method_return_not_void=JSF1045\uff1a\u6807\u6709 ''{1}'' \u6ce8\u91ca\u7684\u65b9\u6cd5 ''{0}'' \u53ea\u80fd\u8fd4\u56de void\u3002\u6b64\u65b9\u6cd5\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.core.web.injection.method_no_params=JSF1046\uff1a\u6807\u6709 ''{1}'' \u6ce8\u91ca\u7684\u65b9\u6cd5 ''{0}'' \u4e0d\u80fd\u6709\u4efb\u4f55\u53c2\u6570\u3002\u6b64\u65b9\u6cd5\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047\uff1a\u6807\u6709 ''{1}'' \u6ce8\u91ca\u7684\u65b9\u6cd5 ''{0}'' \u4e0d\u80fd\u58f0\u660e\u4efb\u4f55\u9009\u4e2d\u7684\u5f02\u5e38\u3002\u6b64\u65b9\u6cd5\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.core.injection.provider_generic_web_configured=JSF1048\uff1a\u6709 PostConstruct/PreDestroy \u6ce8\u91ca\u3002\u6807\u6709\u8fd9\u4e9b\u6ce8\u91ca\u7684 ManagedBeans \u65b9\u6cd5\u5c06\u8868\u793a\u6ce8\u91ca\u5df2\u5904\u7406\u3002
-jsf.spi.injection.provider.invalid_service_entry=JSF1049\uff1a\u670d\u52a1\u6761\u76ee ''{0}'' \u65e0\u6548\u3002\u683c\u5f0f\u5e94\u4e3a ''<DiscoverableInjectionProviderClass>:<DelegateClass>''\u3002\u6761\u76ee\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.spi.injection.provider.discovery_error=JSF1050\uff1a\u8c03\u7528\u6761\u76ee ''{0}'' \u7684 DiscoverableInjectionProvider.isProviderAppropriate(String) \u65f6\u53d1\u751f\u9519\u8bef\u3002\u6761\u76ee\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051\uff1a\u670d\u52a1\u6761\u76ee ''{0}'' \u4e0d\u6269\u5c55 DiscoverableInjectionProvider\u3002\u6761\u76ee\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.spi.provider.cannot_read_service=JSF1052\uff1a\u5904\u7406\u670d\u52a1\u6761\u76ee ''{0}'' \u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef\u3002
-jsf.lifecycle.phaselistener.exception=JSF1053\uff1a\uff08\u4fa6\u542c\u5668\uff1a{0}\uff0c\u9636\u6bb5 ID\uff1a{1}\uff0c\u89c6\u56fe ID\uff1a{2}\uff09\u5728\u9636\u6bb5\u4fa6\u542c\u5668\u6267\u884c\u8fc7\u7a0b\u4e2d\u629b\u51fa\u5f02\u5e38\uff1a{3}
-jsf.lifecycle.phase.exception=JSF1054\uff1a\uff08\u9636\u6bb5 ID\uff1a{0}\uff0c\u89c6\u56fe ID\uff1a{1}\uff09\u5728\u9636\u6bb5\u6267\u884c\u8fc7\u7a0b\u4e2d\u629b\u51fa\u5f02\u5e38\uff1a{2}
-jsf.config.cannot_resolve_entities=JSF1055\uff1a\u65e0\u6cd5\u627e\u5230\u672c\u5730\u8d44\u6e90 ''{0}''\u3002\u5982\u679c\u5b58\u5728\u5bf9 ''{1}'' \u7684\u8bf7\u6c42\uff0c\u5219\u4f7f\u7528\u6807\u51c6\u5b9e\u4f53\u89e3\u6790\u3002
-jsf.config.cannot_create_inputsource=JSF1056\uff1a\u65e0\u6cd5\u4e3a URL ''{0}'' \u521b\u5efa InputSource\u3002
-jsf.config.navigation.from_view_id_leading_slash=JSF1057\uff1a\u6765\u6e90\u89c6\u56fe ID ''{0}'' \u5f15\u7528\u7684\u8d44\u6e90\u4e0d\u662f\u4ee5 ''/'' \u5f00\u5934\u3002\u7cfb\u7edf\u5c06\u4e3a\u60a8\u6dfb\u52a0\u6b64\u5b57\u7b26\uff0c\u4f46\u60a8\u5e94\u66f4\u6b63\u6b64\u8d44\u6e90\u3002 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058\uff1a\u76ee\u6807\u89c6\u56fe ID ''{0}'' \u5f15\u7528\u6765\u4ece ''{1}'' \u8fdb\u884c\u5bfc\u822a\u7684\u8d44\u6e90\u4e0d\u662f\u4ee5 ''/'' \u5f00\u5934\u3002\u7cfb\u7edf\u5c06\u4e3a\u60a8\u6dfb\u52a0\u6b64\u5b57\u7b26\uff0c\u4f46\u60a8\u5e94\u66f4\u6b63\u6b64\u8d44\u6e90\u3002
-jsf.config.navigation.if_invalid_expression=JSF1070\uff1a\u7528\u4e8e\u4ece ''{1}'' \u8fdb\u884c\u5bfc\u822a\u7684\u6761\u4ef6 ''{0}'' \u4e0d\u662f\u8fde\u7eed\u503c\u8868\u8fbe\u5f0f\uff0c\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.config.verifyobjects.development_only=JSF1059\uff1a\u8b66\u544a\uff01com.sun.faces.verifyObjects \u529f\u80fd\u65e8\u5728\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u4e0d\u4f7f\u7528\u5de5\u5177\u3002\u5982\u679c\u4f7f\u7528 IDE\uff0c\u6216\u8005\u6b64\u5e94\u7528\u7a0b\u5e8f\u662f\u4e3a\u751f\u4ea7\u90e8\u7f72\u7684\uff0c\u5219\u4e0d\u5e94\u542f\u7528\u6b64\u529f\u80fd\uff0c\u56e0\u4e3a\u5b83\u4f1a\u5f71\u54cd\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\u95f4\u3002
-jsf.config.verifyobjects.failures_detected=JSF1060\uff1a\u51fa\u73b0\u4e00\u6b21\u6216\u591a\u6b21\u9a8c\u8bc1\u5931\u8d25\u3002\u5728\u6b64\u6d88\u606f\u4e4b\u540e\uff0c\u5c06\u4f1a\u6709\u8be6\u7ec6\u4fe1\u606f\u3002
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061\uff1a\u8b66\u544a\uff01\u66fe\u5c1d\u8bd5\u6dfb\u52a0\u91cd\u590d\u7684\u9636\u6bb5\u4fa6\u542c\u5668\uff1a{0}\u3002\u6b64\u91cd\u590d\u7684\u9636\u6bb5\u4fa6\u542c\u5668\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u8fd4\u56de\u7684\u54cd\u5e94\u5bf9\u8c61\u4e0d\u63d0\u4f9b\u5177\u6709\u7b7e\u540d 'public void flushContentToWrappedResponse()' \u7684\u65b9\u6cd5\u3002\u4e3a\u4e86\u5728 JSP \u73af\u5883\u4e2d\u63d0\u4f9b\u5185\u5bb9\u4ea4\u7ec7\uff0c\u9700\u8981\u4f7f\u7528\u6b64\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5185\u5bb9\u5c06\u4e0d\u4f1a\u6b63\u786e\u663e\u793a\u51fa\u6765\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u8fd4\u56de\u7684\u54cd\u5e94\u5bf9\u8c61\u4e0d\u63d0\u4f9b\u5177\u6709\u7b7e\u540d 'public boolean isBytes()' \u7684\u65b9\u6cd5\u3002\u4e3a\u4e86\u5728 JSP \u73af\u5883\u4e2d\u63d0\u4f9b\u5185\u5bb9\u4ea4\u7ec7\uff0c\u9700\u8981\u4f7f\u7528\u6b64\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5185\u5bb9\u5c06\u4e0d\u4f1a\u6b63\u786e\u663e\u793a\u51fa\u6765\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u8fd4\u56de\u7684\u54cd\u5e94\u5bf9\u8c61\u4e0d\u63d0\u4f9b\u5177\u6709\u7b7e\u540d 'public boolean isChars()' \u7684\u65b9\u6cd5\u3002\u4e3a\u4e86\u5728 JSP \u73af\u5883\u4e2d\u63d0\u4f9b\u5185\u5bb9\u4ea4\u7ec7\uff0c\u9700\u8981\u4f7f\u7528\u6b64\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5185\u5bb9\u5c06\u4e0d\u4f1a\u6b63\u786e\u663e\u793a\u51fa\u6765\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u8fd4\u56de\u7684\u54cd\u5e94\u5bf9\u8c61\u4e0d\u63d0\u4f9b\u5177\u6709\u7b7e\u540d 'public char[] getChars()' \u7684\u65b9\u6cd5\u3002\u4e3a\u4e86\u5728 JSP \u73af\u5883\u4e2d\u63d0\u4f9b\u5185\u5bb9\u4ea4\u7ec7\uff0c\u9700\u8981\u4f7f\u7528\u6b64\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5185\u5bb9\u5c06\u4e0d\u4f1a\u6b63\u786e\u663e\u793a\u51fa\u6765\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u8fd4\u56de\u7684\u54cd\u5e94\u5bf9\u8c61\u4e0d\u63d0\u4f9b\u5177\u6709\u7b7e\u540d 'public void resetBuffers' \u7684\u65b9\u6cd5\u3002\u4e3a\u4e86\u5728 JSP \u73af\u5883\u4e2d\u63d0\u4f9b\u5185\u5bb9\u4ea4\u7ec7\uff0c\u9700\u8981\u4f7f\u7528\u6b64\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5185\u5bb9\u5c06\u4e0d\u4f1a\u6b63\u786e\u663e\u793a\u51fa\u6765\u3002
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063\uff1a\u8b66\u544a\uff01\u5c06\u4e0d\u53ef\u5e8f\u5217\u5316\u5c5e\u6027\u503c\u8bbe\u7f6e\u4e3a HttpSession\uff08\u5bc6\u94a5\uff1a{0}\uff0c\u503c\u7c7b\uff1a{1}\uff09\u3002
-jsf.application.resource.unable_to_serve_from_library=JSF1064\uff1a\u65e0\u6cd5\u4ece\u5e93 {1} \u4e2d\u627e\u5230\u6216\u63d0\u4f9b\u8d44\u6e90 {0}\u3002
-jsf.application.resource.unable_to_serve=JSF1064\uff1a\u65e0\u6cd5\u627e\u5230\u6216\u63d0\u4f9b\u8d44\u6e90 {0}\u3002
-jsf.application.resource.unable_to_determine_resource_version=JSF1065\uff1a\u65e0\u6cd5\u786e\u5b9a\u8d44\u6e90\u540d\u79f0 {0} \u7684\u7248\u672c\u3002
-jsf.application.resource.unable_to_create_compression_directory=JSF1065\uff1a\u65e0\u6cd5\u521b\u5efa\u76ee\u5f55 {0} \u4ee5\u5b58\u50a8\u538b\u7f29\u8d44\u6e90\u3002
-jsf.application.publish.event.base_type_mismatch=JSF1066\uff1a\u6e90\u5bf9\u8c61 {0} \u4e0d\u662f\u6240\u63d0\u4f9b\u7684\u57fa\u7c7b\u578b {1} \u7684\u5b9e\u4f8b\u3002\u4e0d\u4f1a\u8fdb\u884c\u4e8b\u4ef6\u641c\u7d22\u3002
-jsf.config.web_resource_not_found=JSF1067\uff1a\u65e0\u6cd5\u627e\u5230 {1} \u914d\u7f6e\u9009\u9879\u6307\u5b9a\u7684\u8d44\u6e90 {0}\u3002\u6b64\u8d44\u6e90\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.cannot_instantiate_component_error=JSF1068\uff1a\u65e0\u6cd5\u5b9e\u4f8b\u5316\u7ec4\u4ef6\u7c7b\u578b\u4e3a {0} \u7684\u7ec4\u4ef6
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069\uff1a\u5df2\u660e\u786e\u914d\u7f6e\u7981\u6b62\u5c06 JSF 2.0 Facelets ViewHandler \u7528\u4f5c\u8f83\u65e7\u7684 FaceletViewHandler {0}\u3002\u5982\u679c\u6b64\u884c\u4e3a\u4e0d\u662f\u6240\u9700\u7684\u884c\u4e3a\uff0c\u8bf7\u4ece\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5220\u9664\u8f83\u65e7\u7684 FaceletViewHandler \u548c\u5e93\u3002
-jsf.navigation_invalid_query_string=JSF1070\uff1a\u5bfc\u822a\u7ed3\u679c {0} \u4e2d\u7684\u67e5\u8be2\u5b57\u7b26\u4e32\u65e0\u6548
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071\uff1a\u5728 {1} \u7684 beforePhase() \u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
-jsf.context.exception.handler.log_after=JSF1072\uff1a\u5728 {1} \u7684 afterPhase() \u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
-jsf.context.exception.handler.log=JSF1073\uff1a\u5728 {1} \u7684\u5904\u7406\u8fc7\u7a0b\u4e2d\u6355\u6349\u5230 {0}\uff1aUIComponent-ClientId={2}\uff0cMessage={3}
-jsf.managed.bean.duplicate=JSF1074\uff1a\u540d\u4e3a ''{0}'' \u7684\u53d7\u7ba1 bean \u5df2\u6ce8\u518c\u3002\u5c06\u73b0\u6709\u53d7\u7ba1 bean \u7c7b\u7c7b\u578b {1} \u66ff\u6362\u4e3a {2}\u3002
-jsf.resource.mime.type.configration.invalid=JSF1075\uff1aMime \u7c7b\u578b {0} \u4e0e\u9884\u671f\u7684\u6a21\u5f0f {1} \u4e0d\u5339\u914d\u3002\u5ffd\u7565\u3002
-jsf.annotation.scanner.configuration.invalid=JSF1076\uff1a[{0}] {1}\uff1ajar \u89c4\u8303\u683c\u5f0f\u65e0\u6548\u3002\u5e94\u4e3a jar:<jar \u540d\u79f0\u6216 *>:<\u8f6f\u4ef6\u5305\u6216 *>\u3002\u6761\u76ee\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077\uff1a[{0}] {1}\uff1a\u53d1\u73b0\u91cd\u590d\u7684 jar \u540d\u79f0\u901a\u914d\u7b26\u6761\u76ee\u3002\u6761\u76ee\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.configuration.web.xml.parse.failed=JSF1078\uff1a\u65e0\u6cd5\u5904\u7406\u4e0a\u4e0b\u6587 ''{0}'' \u7684\u90e8\u7f72\u63cf\u8ff0\u7b26\u3002
-jsf.configuration.absolute.order.duplicate.document=JSF1079\uff1a\u5728\u5904\u7406\u7edd\u5bf9\u6392\u5e8f\u65f6\uff0c\u53d1\u73b0\u591a\u4e2a\u540d\u4e3a {0} \u7684\u6587\u6863\u3002\u4ec5\u5904\u7406\u7b2c\u4e00\u4e2a\u540c\u540d\u6587\u6863\u3002
-jsf.configuration.absolute.order.missing.document=JSF1080\uff1a\u5728\u8fdb\u884c\u7edd\u5bf9\u6392\u5e8f\u5904\u7406\u65f6\uff0c\u65e0\u6cd5\u627e\u5230\u540d\u4e3a ''{0}'' \u7684\u6587\u6863\u3002
-jsf.configuration.web.faces.config.contains.ordering=JSF1081\uff1a/WEB-INF/faces-config.xml \u5305\u542b <ordering> \u5143\u7d20\u3002\u8fd9\u4e9b\u5143\u7d20\u5c06\u88ab\u5ffd\u7565\u3002
-jsf.configuration.illegal.eager.bean=JSF1082\uff1a\u4ec5\u5141\u8bb8\u5e94\u7528\u7a0b\u5e8f\u8303\u56f4\u7684 bean \u8fdb\u884c eager \u53d7\u7ba1 bean \u5b9e\u4f8b\u5316\u3002\u53d7\u7ba1 bean ''{0}'' \u5df2\u914d\u7f6e\u4e3a eager\uff0c\u4f46\u8303\u56f4 ''{1}'' \u65e0\u6548\u3002
-jsf.composite.component.insertchildren.missing.template=JSF1083\uff1a\u65e0\u6cd5\u5728 {0} \u4f4d\u7f6e\u627e\u5230 insertChildren \u5904\u7406\u7a0b\u5e8f\u7684\u81ea\u6709\u590d\u5408\u7ec4\u4ef6\u6a21\u677f
-jsf.composite.component.insertfacet.missing.template=JSF1084\uff1a\u65e0\u6cd5\u5728 {0} \u4f4d\u7f6e\u627e\u5230 insertFacet \u5904\u7406\u7a0b\u5e8f\u7684\u81ea\u6709\u590d\u5408\u7ec4\u4ef6\u6a21\u677f
-jsf.managed.bean.custom.scope.eval.null=JSF1085\uff1a\u81ea\u5b9a\u4e49\u8303\u56f4 ''{0}'' \u7684\u8ba1\u7b97\u7ed3\u679c\u4e3a null\u3002\u53d7\u7ba1 bean \u672a\u63a8\u5165\u8303\u56f4\u3002
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086\uff1a\u81ea\u5b9a\u4e49\u8303\u56f4 ''{0}'' \u7684\u8ba1\u7b97\u7ed3\u679c\u4e3a null\u3002\u65e0\u6cd5\u786e\u5b9a\u53d7\u7ba1 bean \u662f\u5426\u5b58\u5728\u3002
-jsf.facelets.error.page.response.committed=JSF1087\uff1a\u65e0\u6cd5\u751f\u6210 Facelets \u9519\u8bef\u9875\uff0c\u56e0\u4e3a\u54cd\u5e94\u5df2\u63d0\u4ea4\u3002
-jsf.state.server.cannot.parse.int.option=JSF1088\uff1a\u89e3\u6790\u4e0a\u4e0b\u6587\u521d\u59cb\u5316\u53c2\u6570 {0} \u65f6\u53d1\u751f\u9519\u8bef\u3002\u6539\u7528\u9ed8\u8ba4\u503c {1}\u3002
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089\uff1aNavigationHandler \u5fc5\u987b\u662f ConfigurableNavigationHandler \u7684\u5b9e\u4f8b\uff0c\u624d\u80fd\u4f7f\u7528 UIOutputTarget \u7ec4\u4ef6 {0}\u3002
-jsf.outcometarget.navigation.case.not.resolved=JSF1090\uff1a\u672a\u89e3\u6790\u7ec4\u4ef6 {0} \u7684\u5bfc\u822a\u6761\u4ef6\u3002
-jsf.externalcontext.no.mime.type.found=JSF1091\uff1a\u65e0\u6cd5\u627e\u5230\u6587\u4ef6 {0} \u7684 Mime \u7c7b\u578b\u3002\u8981\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u8bf7\u5c06 Mime \u7c7b\u578b\u6620\u5c04\u6dfb\u52a0\u5230\u5e94\u7528\u7a0b\u5e8f\u7684 web.xml\u3002
-jsf.config.legacy.facelet.warning=JSF1029\uff1a\u5e94\u7528\u7a0b\u5e8f\u7684\u7248\u672c\u4e3a 2.0\uff08\u7531 /WEB-INF/faces-config.xml \u7684\u7248\u672c\u660e\u786e\u6307\u5b9a\u6216\u7531\u7f3a\u4e4f /WEB-INF/faces-confg.xml \u800c\u9ed8\u8ba4\u6307\u5b9a\uff09\uff0c\u4f46\u7c7b ''{0}'' \u5374\u53d6\u51b3\u4e8e\u4f20\u7edf facelet \u7c7b\u3002\u6b64\u7c7b\u4ee3\u8868\u7684 facelet \u5de5\u4ef6\u5c06\u4e0d\u4f1a\u6ce8\u518c\u3002
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_zh_TW.properties b/jsf-ri/src/main/resources/com/sun/faces/LogStrings_zh_TW.properties
deleted file mode 100644
index 889e777..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/LogStrings_zh_TW.properties
+++ /dev/null
@@ -1,145 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-jsf.managed_bean_creation_error=JSF1001\uff1a\u7121\u6cd5\u5efa\u7acb Managedbean {0}\u3002
-jsf.cannot_instantiate_validator_error=JSF1005\uff1a\u7121\u6cd5\u5be6\u4f8b\u5316\u985e\u578b {0} \u7684\u9a57\u8b49\u7a0b\u5f0f
-jsf.cannot_instantiate_converter_error=JSF1006\uff1a\u7121\u6cd5\u5be6\u4f8b\u5316\u985e\u578b {0} \u7684\u8f49\u63db\u5668
-jsf.duplicate_component_id_error=JSF1007\uff1a\u5728\u6aa2\u8996\u4e2d\u627e\u5230\u91cd\u8907\u7684\u5143\u4ef6 ID {0}\u3002
-jsf.redirect_failed_error=JSF1008\uff1a\u91cd\u65b0\u5c0e\u5411\u81f3\u8def\u5f91 {0} \u5931\u6557
-jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009\uff1a\u7121\u6cd5\u78ba\u5b9a Servlet \u8def\u5f91 {0} \u7684 FaceServlet \u5c0d\u6620\u3002
-jsf.illegal_view_id_error=JSF1010\uff1a\u975e\u6cd5\u7684\u6aa2\u8996 ID {0}\u3002ID \u5fc5\u9808\u4ee5\u300c/\u300d\u958b\u982d
-jsf.util.no.adapter.ctor.available=JSF1016\uff1a\u76ee\u6a19\u985e\u5225\u300c{0}\u300d\u4e0d\u5177\u6709\u914d\u63a5\u5361\u5efa\u69cb\u5b50\u4ee5\u63a5\u53d7\u300c{1}\u300d\uff0c\u6240\u4ee5\u6539\u70ba\u5efa\u7acb\u65b0\u7684\u5be6\u4f8b\u3002
-# core tags
-jsf.core.tags.eval_result_not_expected_type=JSF1011\uff1a\u5c6c\u6027\u300c{0}\u300d\u8868\u793a\u5f0f\u7684\u8a66\u7528\u5f97\u5230\u672a\u9810\u671f\u7684\u985e\u578b\u3002\u9810\u671f\u70ba {1}\uff0c\u4f46\u6536\u5230 {2}\u3002
-jsf.util_no_annotation_processed=JSF1014\uff1a\u7121\u6cd5\u8f09\u5165\u9644\u8a3b\u985e\u5225\u300c{0}\u300d\u3002\u56e0\u6b64\uff0c\u5c07\u4e0d\u6703\u8655\u7406\u6b64\u9644\u8a3b\u3002
-jsf.config.listener.version=\u6b63\u5728\u521d\u59cb\u5316\u74b0\u5883\u300c{0}\u300d\u7684 Mojarra |version.string|
-jsf.config.listener.version.complete=\u5df2\u5b8c\u6210\u521d\u59cb\u5316\u74b0\u5883\u300c{0}\u300d\u7684 Mojarra (|version.string|)
-jsf.config.listener.predestroy.error=JSF1017\uff1a\u5728\u7bc4\u570d\u300c{2}\u300d\u4e2d\u8655\u7406 Bean\u300c{1}\u300d\u7684 PreDestroy \u9644\u8a3b\u6642\u4e1f\u51fa\u300c{0}\u300d\u3002\u8a0a\u606f: {3}
-jsf.viewhandler.requestpath.recursion=JSF1015\uff1a\u8acb\u6c42\u8def\u5f91\u300c{0}\u300d\u4ee5\u4e00\u500b\u6216\u591a\u500b FacesServlet \u524d\u7db4\u8def\u5f91\u5c0d\u6620\u300c{1}\u300d\u958b\u982d\u3002
-jsf.non_displayed_message=\u8b66\u544a\uff1aFacesMessage \u5df2\u6392\u5165\u4f47\u5217\uff0c\u4f46\u53ef\u80fd\u5c1a\u672a\u986f\u793a\u3002{0}
-
-jsf.config.webconfig.configinfo=JSF1018\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{1}\u300d\u8a2d\u70ba\u300c{2}\u300d
-jsf.config.webconfig.configinfo.reset=JSF1019\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{1}\u300d\u91cd\u8a2d\u70ba\u300c{2}\u300d
-jsf.config.webconfig.configinfo.reset.enabled=JSF1020\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{1}\u300d\u91cd\u8a2d\u70ba\u5df2\u555f\u7528
-jsf.config.webconfig.configinfo.reset.disabled=JSF1020\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{1}\u300d\u91cd\u8a2d\u70ba\u5df2\u505c\u7528
-jsf.config.webconfig.boolconfiginfo.enabled=JSF1021\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{1}\u300d- \u5df2\u555f\u7528
-jsf.config.webconfig.boolconfiginfo.disabled=JSF1021\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{1}\u300d- \u5df2\u505c\u7528
-jsf.config.webconfig.boolconfig.invalidvalue=JSF1022\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{2}\u300d\u7684\u503c\u300c{1}\u300d\u7121\u6548\u3002\u6709\u6548\u503c\u70ba\u300c{3}\u300d\u3002\u8f49\u81f3\u5099\u7528\u9810\u8a2d\u503c\u300c{4}\u300d\u3002
-jsf.config.webconfig.enventryinfo=JSF1023\uff1a[{0}] \u74b0\u5883\u9805\u76ee\u300c{1}\u300d\u5df2\u8655\u7406\uff0c\u503c\u300c{2}\u300d
-jsf.config.webconfig.enventry.clientencrypt=JSF1024\uff1a[{0}] \u7528\u6236\u7aef\u72c0\u614b\u52a0\u5bc6\uff1a\u5df2\u555f\u7528
-jsf.config.webconfig.param.deprecated=JSF1025\uff1a[{0}] \u74b0\u5883\u521d\u59cb\u5316\u53c3\u6578\u300c{1}\u300d\u5df2\u505c\u7528\u3002\u4ecd\u6703\u914d\u7f6e\u6b64\u9078\u9805\uff0c\u4f46\u5c07\u4f86\u8acb\u6539\u7528\u300c{2}\u300d\u3002
-jsf.config.webconfig.param.deprecated.no_replacement=JSF1025\uff1a[{0}] \u74b0\u5883\u521d\u59cb\u5316\u53c3\u6578\u300c{1}\u300d\u5df2\u505c\u7528\uff0c\u5c07\u7121\u4f5c\u7528\u3002  
-jsf.config.webconfig.option.notconfigured=JSF1026\uff1a[{0}] \u914d\u7f6e\u9078\u9805\u300c{1}\u300d\u672a\u914d\u7f6e
-jsf.lifecycle.initphaselistener.resolvers_not_registered=JSF1027\uff1a[{0}] JSF \u7684 ELResolvers \u672a\u5728 JSP \u5bb9\u5668\u4e2d\u8a3b\u518a\u3002
-jsf.lifecycle.initphaselistener.resolvers_registered=JSF1028\uff1a[{0}] JSF \u7684 ELResolvers \u5df2\u5728 JSP \u5bb9\u5668\u4e2d\u6210\u529f\u8a3b\u518a\u3002
-jsf.spi.injection.provider_not_implemented=JSF1029\uff1a\u6307\u5b9a\u7684 InjectionProvider \u5be6\u4f5c\u300c{0}\u300d\u672a\u5be6\u4f5c InjectionProvider \u4ecb\u9762\u3002 
-jsf.spi.injection.provider_not_found=JSF1030\uff1a\u7121\u6cd5\u8f09\u5165\u6307\u5b9a\u7684 InjectionProvider \u5be6\u4f5c\u300c{0}\u300d\u3002
-jsf.spi.injection.provider_cannot_instantiate=JSF1031\uff1a\u7121\u6cd5\u5be6\u4f8b\u5316\u6307\u5b9a\u7684 InjectionProvider\u300c{0}\u300d\u3002
-jsf.spi.injection.provider_configured=JSF1032\uff1a\u4f7f\u7528 InjectionProvider\u300c{0}\u300d\u555f\u7528\u8cc7\u6e90\u5f15\u5165\u3002
-jsf.spi.injection.no_injection=JSF1033\uff1a\u8cc7\u6e90\u5f15\u5165\u505c\u7528\u3002
-jsf.spi.serialization.provider_not_implemented=JSF1036\uff1a\u6307\u5b9a\u7684 SerializationProvider \u5be6\u4f5c\u300c{0}\u300d\u672a\u5be6\u4f5c SerializationProvider \u4ecb\u9762\u3002 
-jsf.spi.serialization.provider_not_found=JSF1037\uff1a\u7121\u6cd5\u8f09\u5165\u6307\u5b9a\u7684 SerializationProvider \u5be6\u4f5c\u300c{0}\u300d\u3002
-jsf.spi.serialization.provider_cannot_instantiate=JSF1038\uff1a\u7121\u6cd5\u5be6\u4f8b\u5316\u6307\u5b9a\u7684 SerializationProvider\u300c{0}\u300d\u3002
-jsf.spi.serialization.provider_configured=JSF1039\uff1a\u4f7f\u7528 InjectionProvider\u300c{0}\u300d\u555f\u7528\u8cc7\u6e90\u5f15\u5165\u3002
-jsf.renderkit.resstatemgr.clientbuf_div_two=JSF1034\uff1a\u300c{0}\u300d\u7684\u503c\u300c{1}\u300d\u5fc5\u9808\u88ab 2 \u6574\u9664\u3002\u9810\u8a2d\u70ba\u300c{2}\u300d\u3002
-jsf.renderkit.resstatemgr.clientbuf_not_integer=JSF1035\uff1a\u300c{0}\u300d\u7684\u503c\u300c{1}\u300d\u4e0d\u662f\u6574\u6578\u3002\u9810\u8a2d\u70ba\u300c{2}\u300d\u3002
-jsf.core.taglib.invalid_locale_value=JSF1041\uff1a\u6307\u5b9a\u7684\u8a9e\u8a00\u74b0\u5883\u300c{0}\u300d\u7121\u6548\u3002\u8a9e\u8a00\u74b0\u5883\u5c6c\u6027\u503c\u5fc5\u9808\u662f\u4e0d\u542b\u570b\u5bb6/\u5730\u5340\u6216\u8b8a\u9ad4\u7684\u6709\u6548 ISO 639 \u8a9e\u8a00\u78bc\u3002
-jsf.core.taglib.invalid_language=JSF1042\uff1a\u6307\u5b9a\u7684\u8a9e\u8a00\u300c{0}\u300d\u4e0d\u662f\u5df2\u77e5\u7684 ISO 639 \u8a9e\u8a00\u78bc\u3002
-jsf.core.taglib.action_or_valuechange_listener.null_type_binding=JSF1043\uff1a\u5c07\u4e0d\u6703\u8655\u7406\u5143\u4ef6\u300c{1}\u300d\u7684 {0} -\u300cbinding\u300d\u548c\u300ctype\u300d\u5747\u70ba\u7a7a\u503c\u3002
-jsf.core.taglib.phaselistener.null_type_binding=JSF1043\uff1a\u5c07\u4e0d\u6703\u8655\u7406 PhaseListener (\u900f\u904e PhaseListenerTag \u6307\u5b9a) -\u300cbinding\u300d\u548c\u300ctype\u300d\u5747\u70ba\u7a7a\u503c\u3002
-jsf.core.web.injection.method_not_static=JSF1044\uff1a\u6a19\u793a\u300c{1}\u300d\u9644\u8a3b\u7684\u65b9\u6cd5\u300c{0}\u300d\u4e0d\u80fd\u662f\u975c\u614b\u3002\u6b64\u65b9\u6cd5\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.core.web.injection.method_return_not_void=JSF1045\uff1a\u6a19\u793a\u300c{1}\u300d\u9644\u8a3b\u7684\u65b9\u6cd5\u300c{0}\u300d\u53ea\u80fd\u50b3\u56de Void\u3002\u6b64\u65b9\u6cd5\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.core.web.injection.method_no_params=JSF1046\uff1a\u6a19\u793a\u300c{1}\u300d\u9644\u8a3b\u7684\u65b9\u6cd5\u300c{0}\u300d\u4e0d\u80fd\u6709\u4efb\u4f55\u53c3\u6578\u3002\u6b64\u65b9\u6cd5\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.core.web.injection.method_no_checked_exceptions=JSF1047\uff1a\u6a19\u793a\u300c{1}\u300d\u9644\u8a3b\u7684\u65b9\u6cd5\u300c{0}\u300d\u4e0d\u80fd\u5ba3\u544a\u4efb\u4f55\u52fe\u9078\u7684\u7570\u5e38\u3002\u6b64\u65b9\u6cd5\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.core.injection.provider_generic_web_configured=JSF1048\uff1a\u5b58\u5728 PostConstruct/PreDestroy \u9644\u8a3b\u3002\u6a19\u793a\u9019\u4e9b\u9644\u8a3b\u7684 ManagedBeans \u65b9\u6cd5\u5c07\u8868\u793a\u9644\u8a3b\u5df2\u8655\u7406\u3002
-jsf.spi.injection.provider.invalid_service_entry=JSF1049\uff1a\u7121\u6548\u7684\u670d\u52d9\u9805\u76ee\u300c{0}\u300d\u3002\u683c\u5f0f\u61c9\u70ba\u300c<DiscoverableInjectionProviderClass>:<DelegateClass>\u300d\u3002\u9805\u76ee\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.spi.injection.provider.discovery_error=JSF1050\uff1a\u547c\u53eb\u9805\u76ee\u300c{0}\u300d\u7684 DiscoverableInjectionProvider.isProviderAppropriate(String) \u6642\u767c\u751f\u932f\u8aa4\u3002\u9805\u76ee\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.spi.injection.provider.entry_not_discoverable=JSF1051\uff1a\u670d\u52d9\u9805\u76ee\u300c{0}\u300d\u4e0d\u6703\u5ef6\u4f38 DiscoverableInjectionProvider\u3002\u9805\u76ee\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.spi.provider.cannot_read_service=JSF1052\uff1a\u8655\u7406\u670d\u52d9\u9805\u76ee\u300c{0}\u300d\u6642\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4\u3002
-jsf.lifecycle.phaselistener.exception=JSF1053\uff1a(\u5075\u807d\u7a0b\u5f0f: {0}\uff0c\u968e\u6bb5 ID: {1}\uff0c\u6aa2\u8996 ID: {2}) \u968e\u6bb5\u5075\u807d\u7a0b\u5f0f\u57f7\u884c\u671f\u9593\u4e1f\u51fa\u7570\u5e38: {3}
-jsf.lifecycle.phase.exception=JSF1054\uff1a(\u968e\u6bb5 ID: {0}\uff0c\u6aa2\u8996 ID: {1}) \u968e\u6bb5\u57f7\u884c\u671f\u9593\u4e1f\u51fa\u7570\u5e38: {2}
-jsf.config.cannot_resolve_entities=JSF1055\uff1a\u627e\u4e0d\u5230\u672c\u6a5f\u8cc7\u6e90\u300c{0}\u300d\u3002 \u7576\u5b58\u5728\u5c0d\u300c{1}\u300d\u7684\u8acb\u6c42\u6642\uff0c\u5c07\u4f7f\u7528\u6a19\u6e96\u5be6\u9ad4\u89e3\u6790\u3002
-jsf.config.cannot_create_inputsource=JSF1056\uff1a\u7121\u6cd5\u5efa\u7acb URL\u300c{0}\u300d\u7684 InputSource\u3002
-jsf.config.navigation.from_view_id_leading_slash=JSF1057\uff1afrom-view-id \u53c3\u7167\u7684\u8cc7\u6e90\u300c{0}\u300d\u672a\u4ee5\u300c/\u300d\u958b\u982d\u3002\u7cfb\u7d71\u5c07\u70ba\u60a8\u81ea\u52d5\u589e\u52a0\uff0c\u4f46\u61c9\u66f4\u6b63\u6b64\u932f\u8aa4\u3002 
-jsf.config.navigation.to_view_id_leading_slash=JSF1058\uff1ato-view-id \u53c3\u7167\u7684\u8cc7\u6e90\u300c{0}\u300d(\u4ee5\u5f9e\u300c{1}\u300d\u700f\u89bd) \u672a\u4ee5\u300c/\u300d\u958b\u982d\u3002\u7cfb\u7d71\u5c07\u70ba\u60a8\u81ea\u52d5\u589e\u52a0\uff0c\u4f46\u61c9\u66f4\u6b63\u6b64\u932f\u8aa4\u3002
-jsf.config.navigation.if_invalid_expression=JSF1070\uff1a\u5f9e\u300c{1}\u300d\u700f\u89bd\u6240\u9700\u7684\u689d\u4ef6\u300c{0}\u300d\u4e0d\u662f\u9023\u7e8c\u7684\u503c\u8868\u793a\u5f0f\uff0c\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.config.verifyobjects.development_only=JSF1059\uff1a\u8b66\u544a\uff01com.sun.faces.verifyObjects \u529f\u80fd\u662f\u7528\u4f86\u5354\u52a9\u4e0d\u4f7f\u7528\u5de5\u5177\u7684\u958b\u767c\u4eba\u54e1\u3002\u5982\u679c\u4f7f\u7528 IDE\uff0c\u6216\u5982\u679c\u6b64\u61c9\u7528\u7a0b\u5f0f\u662f\u90e8\u7f72\u4f9b\u751f\u7522\u4f7f\u7528\uff0c\u5247\u4e0d\u61c9\u555f\u7528\u5b83\uff0c\u56e0\u70ba\u9019\u6703\u5f71\u97ff\u61c9\u7528\u7a0b\u5f0f\u7684\u555f\u52d5\u6642\u9593\u3002
-jsf.config.verifyobjects.failures_detected=JSF1060\uff1a\u9a57\u8b49\u7522\u751f\u4e00\u6216\u591a\u9805\u5931\u6557\u3002\u6b64\u8a0a\u606f\u4e4b\u5f8c\u6703\u6709\u8a73\u7d30\u8cc7\u8a0a\u3002
-jsf.lifecycle.duplicate_phase_listener_detected=JSF1061\uff1a\u8b66\u544a\uff01\u5df2\u5617\u8a66\u589e\u52a0\u91cd\u8907\u7684\u968e\u6bb5\u5075\u807d\u7a0b\u5f0f: {0}\u3002\u6b64\u91cd\u8907\u7684\u9805\u76ee\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.core.taglib.viewtag.interweaving_failed=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u50b3\u56de\u7684\u56de\u61c9\u7269\u4ef6\u672a\u63d0\u4f9b\u5177\u6709\u7c3d\u540d\u300cpublic void flushContentToWrappedResponse()\u300d\u7684\u65b9\u6cd5\u3002\u9019\u662f\u5728 JSP \u74b0\u5883\u4e2d\u63d0\u4f9b\u5167\u5bb9\u7d50\u5408\u6240\u9700\u7684\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5167\u5bb9\u5c07\u7121\u6cd5\u6b63\u78ba\u986f\u793a\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_isbytes=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u50b3\u56de\u7684\u56de\u61c9\u7269\u4ef6\u672a\u63d0\u4f9b\u5177\u6709\u7c3d\u540d\u300cpublic boolean isBytes()\u300d\u7684\u65b9\u6cd5\u3002\u9019\u662f\u5728 JSP \u74b0\u5883\u4e2d\u63d0\u4f9b\u5167\u5bb9\u7d50\u5408\u6240\u9700\u7684\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5167\u5bb9\u5c07\u7121\u6cd5\u6b63\u78ba\u986f\u793a\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_ischars=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u50b3\u56de\u7684\u56de\u61c9\u7269\u4ef6\u672a\u63d0\u4f9b\u5177\u6709\u7c3d\u540d\u300cpublic boolean isChars()\u300d\u7684\u65b9\u6cd5\u3002\u9019\u662f\u5728 JSP \u74b0\u5883\u4e2d\u63d0\u4f9b\u5167\u5bb9\u7d50\u5408\u6240\u9700\u7684\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5167\u5bb9\u5c07\u7121\u6cd5\u6b63\u78ba\u986f\u793a\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_getchars=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u50b3\u56de\u7684\u56de\u61c9\u7269\u4ef6\u672a\u63d0\u4f9b\u5177\u6709\u7c3d\u540d\u300cpublic char[] getChars()\u300d\u7684\u65b9\u6cd5\u3002\u9019\u662f\u5728 JSP \u74b0\u5883\u4e2d\u63d0\u4f9b\u5167\u5bb9\u7d50\u5408\u6240\u9700\u7684\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5167\u5bb9\u5c07\u7121\u6cd5\u6b63\u78ba\u986f\u793a\u3002
-jsf.core.taglib.subviewtag.interweaving_failed_resetbuffers=JSF1062\uff1a\u8b66\u544a\uff01ExternalContext.getResponse() \u50b3\u56de\u7684\u56de\u61c9\u7269\u4ef6\u672a\u63d0\u4f9b\u5177\u6709\u7c3d\u540d\u300cpublic void resetBuffers\u300d\u7684\u65b9\u6cd5\u3002\u9019\u662f\u5728 JSP \u74b0\u5883\u4e2d\u63d0\u4f9b\u5167\u5bb9\u7d50\u5408\u6240\u9700\u7684\u65b9\u6cd5\u3002\u56e0\u6b64\uff0c\u5167\u5bb9\u5c07\u7121\u6cd5\u6b63\u78ba\u986f\u793a\u3002
-jsf.context.extcontext.sessionmap.nonserializable=JSF1063\uff1a\u8b66\u544a\uff01\u5c07\u4e0d\u53ef\u4e32\u5217\u5316\u7684\u5c6c\u6027\u503c\u8a2d\u70ba HttpSession (\u6a5f\u78bc: {0}\uff0c\u503c\u985e\u5225: {1})\u3002
-jsf.application.resource.unable_to_serve_from_library=JSF1064\uff1a\u5f9e\u7a0b\u5f0f\u5eab {1} \u627e\u4e0d\u5230\u6216\u7121\u6cd5\u63d0\u4f9b\u8cc7\u6e90 {0}\u3002
-jsf.application.resource.unable_to_serve=JSF1064\uff1a\u627e\u4e0d\u5230\u6216\u7121\u6cd5\u63d0\u4f9b\u8cc7\u6e90 {0}\u3002
-jsf.application.resource.unable_to_determine_resource_version=JSF1065\uff1a\u7121\u6cd5\u5224\u65b7\u8cc7\u6e90\u540d\u7a31 {0} \u7684\u7248\u672c\u3002
-jsf.application.resource.unable_to_create_compression_directory=JSF1065\uff1a\u7121\u6cd5\u5efa\u7acb\u76ee\u9304 {0} \u4f86\u5132\u5b58\u58d3\u7e2e\u7684\u8cc7\u6e90\u3002
-jsf.application.publish.event.base_type_mismatch=JSF1066\uff1a\u4f86\u6e90\u7269\u4ef6 {0} \u4e0d\u662f\u6240\u63d0\u4f9b\u4e4b\u57fa\u5e95\u985e\u578b {1} \u7684\u5be6\u4f8b\u3002\u4e8b\u4ef6\u641c\u5c0b\u5c07\u4e0d\u6703\u57f7\u884c\u3002
-jsf.config.web_resource_not_found=JSF1067\uff1a\u627e\u4e0d\u5230 {1} \u914d\u7f6e\u9078\u9805\u6307\u5b9a\u7684\u8cc7\u6e90 {0}\u3002\u6b64\u8cc7\u6e90\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.cannot_instantiate_component_error=JSF1068\uff1a\u7121\u6cd5\u5be6\u4f8b\u5316\u5143\u4ef6\u985e\u578b\u70ba {0} \u7684\u5143\u4ef6
-jsf.application.legacy_facelet_viewhandler_detected=JSF1069\uff1a\u505c\u7528 JSF 2.0 Facelets ViewHandler\uff0c\u56e0\u5df2\u660e\u78ba\u914d\u7f6e\u4f7f\u7528\u820a\u7248 FaceletViewHandler {0}\u3002\u5982\u679c\u9019\u4e0d\u662f\u6240\u8981\u7684\u904b\u4f5c\u65b9\u5f0f\uff0c\u8acb\u5f9e\u61c9\u7528\u7a0b\u5f0f\u79fb\u9664\u820a\u7248 FaceletViewHandler \u548c\u7a0b\u5f0f\u5eab\u3002
-jsf.navigation_invalid_query_string=JSF1070\uff1a\u700f\u89bd\u7d50\u679c {0} \u4e2d\u6709\u7121\u6548\u7684\u67e5\u8a62\u5b57\u4e32
-# the following three messages are duplicated in javax.faces.LogStrings.properties
-jsf.context.exception.handler.log_before=JSF1071\uff1a\u5728 {1} \u7684 beforePhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
-jsf.context.exception.handler.log_after=JSF1072\uff1a\u5728 {1} \u7684 afterPhase() \u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
-jsf.context.exception.handler.log=JSF1073\uff1a\u5728 {1} \u7684\u8655\u7406\u671f\u9593\u622a\u7372 {0}\uff1aUIComponent-ClientId={2}\uff0c\u8a0a\u606f={3}
-jsf.managed.bean.duplicate=JSF1074\uff1a\u540d\u70ba\u300c{0}\u300d\u7684\u53d7\u7ba1 Bean \u5df2\u7d93\u8a3b\u518a\u3002\u5c07\u73fe\u6709\u7684\u53d7\u7ba1 Bean \u985e\u5225\u985e\u578b {1} \u53d6\u4ee3\u6210 {2}\u3002
-jsf.resource.mime.type.configration.invalid=JSF1075\uff1aMime \u985e\u578b {0} \u8207\u9810\u671f\u7684\u6a21\u5f0f {1} \u4e0d\u7b26\u3002\u5c07\u5ffd\u7565\u3002
-jsf.annotation.scanner.configuration.invalid=JSF1076\uff1a[{0}] {1}\uff1a\u7121\u6548\u7684 jar \u898f\u683c\u683c\u5f0f\u3002\u9810\u671f\u7684 jar\uff1a<jar \u540d\u7a31\u6216 *>:<\u5957\u88dd\u6a21\u7d44\u6216 *>\u3002\u9805\u76ee\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.annotation.scanner.configuration.duplicate.wildcard=JSF1077\uff1a[{0}] {1}\uff1ajar \u540d\u7a31\u627e\u5230\u91cd\u8907\u7684\u842c\u7528\u5b57\u5143\u9805\u76ee\u3002\u9805\u76ee\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.configuration.web.xml.parse.failed=JSF1078\uff1a\u7121\u6cd5\u8655\u7406\u74b0\u5883\u300c{0}\u300d\u7684\u90e8\u7f72\u63cf\u8ff0\u5143\u3002
-jsf.configuration.absolute.order.duplicate.document=JSF1079\uff1a\u8655\u7406\u7d55\u5c0d\u6392\u5e8f\u6642\u627e\u5230\u591a\u500b\u540d\u70ba {0} \u7684\u6587\u4ef6\u3002\u7cfb\u7d71\u53ea\u6703\u8655\u7406\u7b2c\u4e00\u500b\u5177\u6709\u8a72\u540d\u7a31\u7684\u6587\u4ef6\u3002
-jsf.configuration.absolute.order.missing.document=JSF1080\uff1a\u57f7\u884c\u7d55\u5c0d\u6392\u5e8f\u8655\u7406\u6642\u627e\u4e0d\u5230\u540d\u70ba\u300c{0}\u300d\u7684\u6587\u4ef6\u3002
-jsf.configuration.web.faces.config.contains.ordering=JSF1081\uff1a/WEB-INF/faces-config.xml \u542b\u6709 <ordering> \u5143\u4ef6\u3002\u9019\u4e9b\u5143\u4ef6\u5c07\u88ab\u5ffd\u7565\u3002
-jsf.configuration.illegal.eager.bean=JSF1082\uff1a\u53ea\u6709\u61c9\u7528\u7a0b\u5f0f\u7bc4\u570d Bean \u624d\u80fd\u9032\u884c\u7dca\u6025\u53d7\u7ba1 Bean \u5be6\u4f8b\u5316\u3002\u53d7\u7ba1 Bean\u300c{0}\u300d\u914d\u7f6e\u70ba\u7dca\u6025\uff0c\u4f46\u7bc4\u570d\u300c{1}\u300d\u7121\u6548\u3002
-jsf.composite.component.insertchildren.missing.template=JSF1083\uff1a\u5728\u4f4d\u7f6e:\u300c{0}\u300d\u627e\u4e0d\u5230\u64c1\u6709\u8907\u5408\u5143\u4ef6\u7bc4\u672c\u7684 insertChildren \u8655\u7406\u5668
-jsf.composite.component.insertfacet.missing.template=JSF1084\uff1a\u5728\u4f4d\u7f6e:\u300c{0}\u300d\u627e\u4e0d\u5230 insertFacet \u8655\u7406\u5668\u7684\u64c1\u6709\u8907\u5408\u5143\u4ef6\u7bc4\u672c
-jsf.managed.bean.custom.scope.eval.null=JSF1085\uff1a\u81ea\u8a02\u7bc4\u570d\u300c{0}\u300d\u8a08\u7b97\u70ba\u7a7a\u503c\u3002\u672a\u5c07\u53d7\u7ba1 Bean \u63a8\u81f3\u7bc4\u570d\u3002
-jsf.managed.bean.custom.scope.eval.null.existence=JSF1086\uff1a\u81ea\u8a02\u7bc4\u570d\u300c{0}\u300d\u8a08\u7b97\u70ba\u7a7a\u503c\u3002\u7121\u6cd5\u5224\u65b7\u53d7\u7ba1 Bean \u662f\u5426\u5b58\u5728\u3002
-jsf.facelets.error.page.response.committed=JSF1087\uff1a\u7121\u6cd5\u7522\u751f Facelet \u932f\u8aa4\u9801\uff0c\u56e0\u70ba\u56de\u61c9\u5df2\u78ba\u5b9a\u3002
-jsf.state.server.cannot.parse.int.option=JSF1088\uff1a\u5256\u6790\u74b0\u5883 init \u53c3\u6578 {0} \u6642\u767c\u751f\u932f\u8aa4\u3002\u6539\u7528\u9810\u8a2d\u503c {1}\u3002
-jsf.outcometarget.invalid.navigationhandler.type=JSF1089\uff1aNavigationHandler \u5fc5\u9808\u662f ConfigurableNavigationHandler \u7684\u5be6\u4f8b\u624d\u80fd\u4f7f\u7528 UIOutputTarget \u5143\u4ef6 {0}\u3002
-jsf.outcometarget.navigation.case.not.resolved=JSF1090\uff1a\u672a\u89e3\u6790\u5143\u4ef6 {0} \u7684\u700f\u89bd\u689d\u4ef6\u3002
-jsf.externalcontext.no.mime.type.found=JSF1091\uff1a\u627e\u4e0d\u5230\u6a94\u6848 {0} \u7684 mime \u985e\u578b\u3002\u82e5\u8981\u89e3\u6c7a\u6b64\u554f\u984c\uff0c\u8acb\u5c07 mime \u985e\u578b\u5c0d\u6620\u589e\u52a0\u5230\u61c9\u7528\u7a0b\u5f0f\u7684 web.xml\u3002
-jsf.config.legacy.facelet.warning=JSF1029\uff1a\u61c9\u7528\u7a0b\u5f0f\u8a2d\u70ba\u7248\u672c 2.0 (\u7531 /WEB-INF/faces-config.xml \u7684\u7248\u672c\u6216\u7531\u65bc\u7f3a\u5c11 /WEB-INF/faces-confg.xml \u800c\u660e\u78ba\u8a2d\u5b9a)\uff0c\u4f46\u985e\u5225\u300c{0}\u300d\u76f8\u4f9d\u65bc\u820a\u7248 Facelet \u985e\u5225\u3002\u6b64\u985e\u5225\u4ee3\u8868\u7684 Facelet \u5de5\u4ef6\u5c07\u4e0d\u6703\u8a3b\u518a\u3002
-jsf.compcomp.unecessary.targets.attribute=JSF1092: {0} : Unnecessary specification of the ''targets'' attribute for composite attribute ''{1}''.  The ''targets'' attribute is only necessary when the composite attribute is named ''action'', ''actionListener'', ''validator'', or ''valueChangeListener''.
-jsf.compcomp.binding.eval.non.compcomp=JSF1093: {0} : UIComponent returned by expression evaluation is not a valid composite component.  Value will be ignored.
-jsf.externalcontext.flash.bad.cookie=JSF1094: Could not decode flash data from incoming cookie value {0}.  Processing will continue, but the flash is unavailable for this request.
-jsf.externalcontext.flash.response.already.committed=JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.
-jsf.metadata.uiviewroot.unavailable=JSF1096: UIViewRoot unavailable at the time view metadata was being processed.  Metadata will be unavailable.
-jsf.application.resource.invalid_if_modified_since_header=JSF1097: Unable to parse date sent by User Agent for If-Modified-Since header, {0}.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages.properties
deleted file mode 100644
index c9b4bf8..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=ApplicationAssociate ctor not called in same callstack as ConfigureListener.contextInitialized().
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=ApplicationAssociate already exists for this webapp.
-com.sun.faces.ASSERTION_FAILED=Assertion Failed
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=Attribute ''{0}'' not supported for component type ''{1}''.
-com.sun.faces.CANT_CONVERT_VALUE=Can''t convert property: ''{0}'' to value type: ''{1}''.
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=Unable to close input stream.
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=Can''t create Lifecycle for id: ''{0}''.
-com.sun.faces.CANT_INSTANTIATE_CLASS=Can''t instantiate class: ''{0}''.
-com.sun.faces.CANT_INTROSPECT_CLASS=Can''t introspect class: ''{0}''
-com.sun.faces.CANT_PARSE_FILE=Can''t parse file: ''{0}'': Error at line {1} column {2}: {3}.
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=Expected a child component type of ''{0}'' for component type ''{1}({2})''.  Found ''{3}''.
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: This link is disabled as it is not nested within a JSF form.
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=One or more UICommand instances found within the view that weren't nested within a UIForm.  The actions associated with these commands will not be invoked.
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=Component Not Found for identifier: ''{0}''.
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=Unable to find component with ID ''{0}'' in view.
-com.sun.faces.CONTENT_TYPE_ERROR=Unrecognized Content Type.
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=Unable to register renderers with RenderKit using id {0}.  RenderKit does not exist.
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=Component ID ''{0}'' has already been found in the view.
-com.sun.faces.EMPTY_PARAMETER=Parameter is empty
-com.sun.faces.ENCODING_ERROR=Unrecognized Character Encoding.
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=Can''t get ValueBinding for value: ''{0}''.
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=Can''t get value from value binding expression: ''{0}''.
-com.sun.faces.ERROR_OPENING_FILE=Can''t open configuration file: ''{0}''.
-com.sun.faces.ERROR_PROCESSING_CONFIG=An unexpected error occurred during configuration processing. 
-com.sun.faces.ERROR_REGISTERING_DTD=Can''t register DTD: ''{0}''.
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=Can''t set managed bean property: ''{0}''.
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=Evaluation of expression for attribute ''{0}'' resulted in unexpected type.  Expected {1}, but received {2}.
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=Construction Error: One or more input parameters may be null.
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=Unable to determine FaceServlet mapping for servlet path ''{0}''.
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=The FacesServlet cannot have a url-pattern of '/*'.  Please define a different url-pattern.
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=No FacesContext is available to process this request.  This is most likely due to the request being sent to the wrong path.
-com.sun.faces.FILE_NOT_FOUND=File Not Found for file: ''{0}''.
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=Illegal attempt to set {0} after a response has been rendered.
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=Characters not allowed.
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=Illegal use of implicit object identifier in lValue mode: ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=Illegal Model Reference in this context for expression ''{0}''.
-com.sun.faces.ILLEGAL_VIEW_ID=Illegal view ID ''{0}''.  The ID must begin with ''/''
-com.sun.faces.INVALID_EXPRESSION=Invalid expression: ''{0}''.
-com.sun.faces.INVALID_INIT_PARAM=Invalid value: ''{0}'', for initialization parameter: ''{1}''.  Acceptable values are 'true' or 'false'.  Defaulting to 'false'.
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=Invalid Message severity ''{0}'' defined in configuration.
-com.sun.faces.INVALID_SCOPE_LIFESPAN=The scope of the object referenced by expression ''{0}'', ''{1}'', is shorter than the referring managed bean''s (''{2}'') scope of ''{3}''
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=LifecycleId already added for id: ''{0}''.
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=LifecycleId not found for id ''{0}''.
-com.sun.faces.MAXIMUM_EVENTS_REACHED=Maximum number of events ''{0}'' reached.
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=Unable to set target property ''{0}'' in managed bean ''{1}''. The property must accept either List or Array instances.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a map property, however, the setter in the class does not accept Map instances.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a map property, however, the getter in the class does not return Map instances.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a list property, however, the setter in the class does not accept List or Array instances.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a list property, however, the getter in the class does not return List or Array instances.
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a list property.  The getter returns an array type, but there is no associated setter.
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=Unable to set target property ''{0}'' in managed bean ''{1}''.  The target property returned an existing value that was not an instance of List.
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''. The managed bean is configured as a List, but also attempts to define map entries or managed properties.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean is configured as a Map, but also attempts to define managed properties.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean contains a managed property named ''{1}'' with list entries, but has illegally defined a value and/or map entries.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean contains a managed property named ''{1}'' with map entries, but has illegally defined a value as well.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean contains a managed property named ''{1}'' containing no list or map entires, nor any value elements.
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=Error performing conversion of value ''{0}'' of type ''{1}'' to type ''{2}'' for managed bean ''{3}''.
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=Bean or property class ''{0}'' for managed bean ''{1}'' cannot be found.
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=Bean or property class ''{0}'' for managed bean ''{1}'' cannot be loaded due to a missing dependency: {2}.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=Managed bean class ''{0}'' for managed bean ''{1}'' is not declared public.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=Managed bean class ''{0}'' for managed bean ''{1}'' is declared as abstract or as an interface.
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=Managed bean class ''{0}'' for managed bean ''{1}'' doesn't declare a public no-argument constructor.
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=An error occurred performing resource injection on managed bean ''{0}''
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=The property ''{0}'' for managed bean ''{1}'' is defined with a property class of ''{2}'', however, this class is not assignable to the property.
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=Unable to Introspect managed bean ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=Property ''{0}'' for managed bean ''{1}'' does not exist.  Check that appropriate getter and/or setter methods exist.
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=Property ''{0}'' for managed bean ''{1}'' has no setter.
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=Property ''{0}'' for managed bean ''{1}'' accepts more than one argument
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=Unable to set property ''{0}'' for managed bean ''{1}''
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=Unable to create managed bean ''{0}''.  The following problems were found:
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=JSF will be unable to create managed bean ''{0}'' when it is requested.  The following problems where found:
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=Unexpected error processing managed bean ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=Unexpected error processing managed property ''{0}''
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=Scope ''{0}'' is not one of ''view'', ''request'', ''session'', ''application'', nor does it represent a ValueExpression (#{...})
-com.sun.faces.MISSING_CLASS_ERROR=Missing Class: Can''t load class ''{0}''.
-com.sun.faces.MISSING_RESOURCE_ERROR=Missing Resource: Can''t get ResourceBundle.
-com.sun.faces.MODELUPDATE_ERROR=Model Update failure for value ''{0}'' in model''{1}''.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=Unable to find matching navigation case from view ID ''{0}'' for outcome ''{1}''
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=Unable to find matching navigation case with from-view-id ''{0}'' for action ''{1}'' with outcome ''{2}''
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=Invalid query string in outcome ''{0}''
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=Expression Error: Named Object: ''{0}'' not found.
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=Not nested in a UIComponentTag Error for tag with handler class: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR=The {0} tag should be nested within a tag that is associated with a component of type {1}.
-com.sun.faces.NO_DTD_FOUND_ERROR=Unable to locate DTD with PUBLIC ID ''{0}'' at path ''{1}''.
-com.sun.faces.NULL_BODY_CONTENT_ERROR=BodyContent is null for tag with handler class: ''{0}''.
-com.sun.faces.NULL_COMPONENT_ERROR=Construction Error: Component argument is null.
-com.sun.faces.NULL_CONFIGURATION=No Configuration loaded for the application.
-com.sun.faces.NULL_CONTEXT_ERROR=Argument Error: Context argument is null.
-com.sun.faces.NULL_EVENT_ERROR=Argument Error: Event argument is null.
-com.sun.faces.NULL_FORVALUE=Component "{0}" not found
-com.sun.faces.NULL_HANDLER_ERROR=Argument Error: Handler argument is null.
-com.sun.faces.NULL_LOCALE_ERROR=Argument Error: Locale argument is null.
-com.sun.faces.NULL_MESSAGE_ERROR=Argument Error: Message parameter cannot be null
-com.sun.faces.NULL_PARAMETERS_ERROR=Argument Error: Parameter ''{0}'' is null
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=Argument Error: Request View argument is null.
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=Argument Error: ResponseStream argument is null.
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=Argument Error: ResponseView argument is null.
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=Argument Error: ResponseWriter argument is null.
-com.sun.faces.OBJECT_CREATION_ERROR=One or more confgured application objects could not be created.  Check your web application logs for details.
-com.sun.faces.OPTION_NOT_SELECT_ITEM=Argument Error: An option for component ''{0}'' was not an instance of javax.faces.model.SelectItem.  Type found: ''{1}''.
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: This button is disabled because a navigation case could not be matched.
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: This link is disabled because a navigation case could not be matched.
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId out of bounds for id: ''{0}''.
-com.sun.faces.RENDERER_NOT_FOUND=Renderer not found for Renderer type: ''{0}''.
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=State Error: RequestView has already been set for this request.
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=""Invalid resource format.  Property ''{0}'' cannot be parsed."
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=Invalid resource format.  Property ''{0}'' contains more than one colon (:).
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=Invalid resource format.  Property ''{0}'' cannot be parsed to extract resource name and library name."
-com.sun.faces.SAVING_STATE_ERROR=Error while saving state.
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=Argument Error: ''{0}'' is not supported for this renderer.
-com.sun.faces.TYPECONVERSION_ERROR=Conversion Error setting value ''{0}'' for ''{1}''. 
-com.sun.faces.VALIDATION_COMMAND_ERROR=Validation error. ''{0}'' must have value or image attribute.
-com.sun.faces.VALIDATION_EL_ERROR=Validation error. Expression invalid for:''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=Validation error. The following JSF tags are required to contain IDs:''{0}''
-com.sun.faces.CANNOT_CONVERT=Unable to resolve a Converter instance using either converterId ''{0}'' or binding ''{1}''.
-com.sun.faces.CANNOT_VALIDATE=Unable to resolve a Validator instance using either validatorId ''{0}'' or binding ''{1}''.
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] Class does not exist
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] Class cannot be loaded due to a missing dependency -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] Class contains a no argument constructor, but it is not public
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] Class contains no public no-argument constructor
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] Class does not implement or extend {2}
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=Managed bean ''{0}'' contains cyclic references.  Evaluation path: ''{1}''.
-com.sun.faces.OBJECT_IS_READONLY={0} object is read only
-com.sun.faces.INCORRECT_JSP_VERSION=It appears the JSP version of the container is older than 2.1 and unable to locate the EL RI expression factory, ''{0}''.  If not using JSP or the EL RI, make sure the context initialization parameter, ''{1}'', is properly set.
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=Index {1} Out of Bounds for {0}
-com.sun.faces.PROPERTY_TYPE_ERROR={0} is not Array or List type.
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=Index {1} Out of Bounds for {0} with a length of {2}
-com.sun.faces.RESTORE_VIEW_ERROR=View ''{0}'' could not be restored.
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=Can''t write ID attribute: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=Not nested in a UIComponentTag.
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=No component associated with UIComponentTag.
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=Can''t write the JavaScript file to client.
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=One or more resources have the target of ''{0}'', but no ''{0}'' component has been defined within the view.
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_de.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_de.properties
deleted file mode 100644
index f2b7a89..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_de.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=ApplicationAssociate-ctor nicht im gleichen Callstack wie ConfigureListener.contextInitialized() aufgerufen.
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=ApplicationAssociate ist f\u00fcr diese Webanwendung bereits vorhanden.
-com.sun.faces.ASSERTION_FAILED=Behauptungsfehler
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=Attribut ''{0}'' wird f\u00fcr Komponententyp ''{1}'' nicht unterst\u00fctzt.
-com.sun.faces.CANT_CONVERT_VALUE=Eigenschaft ''{0}'' kann nicht in Werttyp ''{1}'' konvertiert werden.
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=Eingabefluss kann nicht geschlossen werden.
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=G\u00fcltigkeitsdauer f\u00fcr ID ''{0}'' kann nicht erstellt werden.
-com.sun.faces.CANT_INSTANTIATE_CLASS=Klasse ''{0}'' kann nicht instanziiert werden.
-com.sun.faces.CANT_INTROSPECT_CLASS=Klasse ''{0}'' kann sich nicht selbst pr\u00fcfen.
-com.sun.faces.CANT_PARSE_FILE=Datei ''{0}'' kann nicht analysiert werden. Fehler in Zeile {1} Spalte {2}: {3}.
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=Untergeordneten Komponententyp von ''{0}'' f\u00fcr Komponententyp ''{1}({2})'' erwartet. ''{3}'' gefunden.
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: Dieser Link ist deaktiviert, da er nicht in ein JSF-Formular eingebettet ist.
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=Eine oder mehrere UICommand-Instanzen in der Ansicht gefunden, die nicht in einer UIForm eingebettet waren.  Die mit diesen Befehlen verkn\u00fcpften Aktionen werden nicht aufgerufen.
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=Komponente f\u00fcr Kennung ''{0}'' nicht gefunden.
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=Komponente mit ID ''{0}'' kann nicht in Ansicht gefunden werden.
-com.sun.faces.CONTENT_TYPE_ERROR=Unerkannter Inhaltstyp
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=Renderer mit RenderKit, die ID {0} verwenden, k\u00f6nnen nicht verwendet werden.  RenderKit ist nicht vorhanden.
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=Komponenten-ID ''{0}'' wurde bereits in der Ansicht gefunden.
-com.sun.faces.EMPTY_PARAMETER=Parameter ist leer.
-com.sun.faces.ENCODING_ERROR=Unerkannte Zeichencodierung.
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=ValueBinding f\u00fcr Wert ''{0}'' kann nicht abgerufen werden.
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=Wert von Wertverbindungsausdruck ''{0}'' kann nicht abgerufen werden.
-com.sun.faces.ERROR_OPENING_FILE=Konfigurationsdatei ''{0}'' kann nicht ge\u00f6ffnet werden.
-com.sun.faces.ERROR_PROCESSING_CONFIG=W\u00e4hrend der Verarbeitung der Konfiguration ist ein unerwarteter Fehler aufgetreten. 
-com.sun.faces.ERROR_REGISTERING_DTD=DTD kann nicht registriert werden: ''{0}''.
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=Eigenschaft des verwalteten Beans kann nicht festgelegt werden: ''{0}''.
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=Ergebnis der Ausdruckauswertung f\u00fcr Attribut ''{0}'' hatte einen unerwarteten Typ.  Erwartet: {1}, aber empfangen: {2}.
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=Konstruktionsfehler: Ein oder mehrere Eingabeparameter k\u00f6nnen null sein.
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=FaceServlet-Zuordnung f\u00fcr Servlet-Pfad "{0}" kann nicht ermittelt werden.
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=Das FacesServlet kann kein url-pattern von ''/*'' haben.  Geben Sie ein anderes url-pattern an.
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=Es ist kein FacesContext zur Verarbeitung dieser Anforderung verf\u00fcgbar.  Dies liegt h\u00f6chstwahrscheinlich daran, dass die Anforderung an den falschen Pfad gesendet wird.
-com.sun.faces.FILE_NOT_FOUND=Datei nicht gefunden f\u00fcr Datei: ''{0}''.
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=Unzul\u00e4ssiger Versuch, {0} festzulegen, nachdem eine Antwort erstellt wurde.
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=Zeichen nicht zugelassen.
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=Unzul\u00e4ssige Verwendung der impliziten Objektkennung im IValue-Modus: ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=Unzul\u00e4ssige Modellreferenz in diesem Kontext f\u00fcr Ausdruck ''{0}''.
-com.sun.faces.ILLEGAL_VIEW_ID=Unzul\u00e4ssige Ansicht-ID {0}''.  Die ID muss mit ''''/'''' beginnen.
-com.sun.faces.INVALID_EXPRESSION=Ung\u00fcltiger Ausdruck: ''{0}''.
-com.sun.faces.INVALID_INIT_PARAM=Ung\u00fcltiger Wert: ''{0}'' f\u00fcr Initialisierungsparameter: ''{1}''.  Akzeptable Werte sind ''true'' oder ''false''.  Als Standardwert wird ''false'' festgelegt.
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=Ung\u00fcltiger Nachrichtenschweregrad ''{0}'' in der Konfiguration festgelegt.
-com.sun.faces.INVALID_SCOPE_LIFESPAN=Der Bereich des Objekts, auf das Ausdruck ''{0}'', ''{1}'', ist k\u00fcrzer als der verweisende Bereich ''{3}'' des verweisenden Beans ''{2}''.
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=LifecycleId bereits hinzugef\u00fcgt f\u00fcr ID: ''{0}''.
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=LifecycleId nicht gefunden f\u00fcr ID ''{0}''.
-com.sun.faces.MAXIMUM_EVENTS_REACHED=Maximale Anzahl von Ereignissen ''{0}'' erreicht.
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=Zieleigenschaft ''{0}'' in verwalteter Bean ''{1}'' konnte nicht festgelegt werden. Die Eigenschaft muss entweder Listen- oder Array-Instanzen akzeptieren.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=Eigenschaft ''{0}'' in verwaltetem Bean ''{1}'' ist als Zuordnungseigenschaft definiert. Der Setter in der Klasse akzeptiert jedoch keine Zuordnungsinstanzen.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=Eigenschaft ''{0}'' in verwaltetem Bean ''{1}'' ist als Zuordnungseigenschaft definiert. Der Empf\u00e4nger in der Klasse akzeptiert jedoch keine Zuordnungsinstanzen.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=Eigenschaft ''{0}'' in verwaltetem Bean ''{1}'' ist als Zuordnungseigenschaft definiert. Der Setter in der Klasse akzeptiert jedoch keine Zuordnungsinstanzen.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=Eigenschaft ''{0}'' in verwaltetem Bean ''{1}'' ist als Listeneigenschaft definiert. Der Empf\u00e4nger in der Klasse gibt jedoch keine Arraylisten-Instanzen zur\u00fcck.
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=Eigenschaft ''{0}'' in verwaltetem Bean ''{1}'' ist als Listeneigenschaft definiert.  Der Empf\u00e4nger gibt einen Array-Typ zur\u00fcck, aber es besteht kein entsprechender Setter.
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=Zieleigenschaft ''{0}'' in verwalteter Bean ''{1}'' konnte nicht festgelegt werden.  Die Zieleigenschaft hat einen vorhandenen Wert zur\u00fcckgegeben, der keine Instanz von List ist.
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Ung\u00fcltige Konfiguration f\u00fcr verwaltete Bean ''{0}''. Der verwaltete Bean ist als eine Liste konfiguriert, versucht jedoch auch, Zuordnungseintr\u00e4ge oder verwaltete Eintr\u00e4ge zu definieren.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Ung\u00fcltige Konfiguration f\u00fcr verwaltete Bean ''{0}''.  Der verwaltete Bean ist als Zuordnung konfiguriert,  versucht jedoch auch, verwaltete Eigenschaften zu definieren.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Ung\u00fcltige Konfiguration f\u00fcr verwaltete Bean ''{0}''.  Der verwaltete Bean enth\u00e4lt eine verwaltete Eigenschaft mit dem Namen ''{1}'', sie enth\u00e4lt jedoch einen ung\u00fcltig definierten Wert und/oder ung\u00fcltig definierte Zuordnungseintr\u00e4ge.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Ung\u00fcltige Konfiguration f\u00fcr verwaltete Bean ''{0}''.  Der verwaltete Bean enth\u00e4lt eine verwaltete Eigenschaft mit dem Namen ''{1}'', sie enth\u00e4lt jedoch auch einen ung\u00fcltig definierten Wert.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Ung\u00fcltige Konfiguration f\u00fcr verwaltete Bean ''{0}''.  Der verwaltete Bean enth\u00e4lt eine verwaltete Eigenschaft mit dem Namen ''{1}'', die weder Listen- oder Zuordnungseintr\u00e4ge noch Wertelemente enth\u00e4lt.
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=Fehler beim Konvertieren des Werts ''{0}'' von Typ ''{1}'' in Typ ''{2}'' f\u00fcr verwaltete Bean ''{3}''
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=Bean- oder Eigenschaftenklasse ''{0}'' f\u00fcr verwalteten Bean ''{1}'' kann nicht gefunden werden.
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=Bean- oder Eigenschaftenklasse ''{0}'' f\u00fcr verwaltete Bean ''{1}'' kann aufgrund einer fehlenden Abh\u00e4ngigkeit: {2} nicht geladen werden.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=Die verwaltete Bean-Klasse ''{0}'' f\u00fcr den verwalteten Bean ''{1}'' ist nicht \u00f6ffentlich.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=Verwaltete Bean-Klasse ''{0}'' f\u00fcr verwalteten Bean ''{1}'' wird als Abstract oder als Schnittstelle eingestuft.
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=Die verwaltete Bean-Klasse ''{0}'' f\u00fcr den verwalteten Bean ''{1}'' gibt keinen \u00f6ffentlichen Constructor ohne Argument vor.
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=Bei der Ressourcen-Einspeisung auf dem verwalteten Bean ''{0}'' ist ein Fehler aufgetreten.
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=Die Eigenschaft ''{0}'' f\u00fcr den verwalteten Bean ''{1}'' wird mit einer Eigenschaftenklasse von ''{2}'' definiert. Diese Klasse kann der Eigenschaft jedoch nicht zugewiesen werden.
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=Verwalteter Bean kann nicht selbstgepr\u00fcft werden ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=Eigenschaft ''{0}'' f\u00fcr verwalteten Bean "{1}'' ist nicht vorhanden.
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=Eigenschaft ''{0}'' f\u00fcr  verwalteten Bean "{1}'' verf\u00fcgt \u00fcber keinen Setter.
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=Eigenschaft ''{0}'' f\u00fcr verwalteten Bean ''{1}'' akzeptiert mehr als ein Argument.
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=Eigenschaft ''{0}'' f\u00fcr verwalteten Bean ''{1}" kann nicht festgelegt werden.
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=Verwalteter Bean ''{0}'' kann nicht erstellt werden. Die folgenden Probleme wurden gefunden:
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=JSF kann auf Anforderung nicht den verwalteten Bean ''{0}'' erstellen.  Die folgenden Probleme wurden gefunden:
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=Unerwarteter Fehler beim Verarbeiten von verwaltetem Bean ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=Unerwarteter Fehler beim Verarbeiten der verwalteten Eigenschaft ''{0}''
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=Bereich ''{0}'' geh\u00f6rt nicht zur Anwendung ''''Ansicht'''', ''''Anforderung'''', ''''Sitzung'''', ''''Anwendung'''', und stellt keine ValueExpression (#{...}) dar.
-com.sun.faces.MISSING_CLASS_ERROR=Fehlende Klasse: Klasse ''{0}'' kann nicht geladen werden.
-com.sun.faces.MISSING_RESOURCE_ERROR=Fehlende Ressource: ResourceBundle kann nicht abgerufen werden.
-com.sun.faces.MODELUPDATE_ERROR=Modellaktualisierungsfehler f\u00fcr Wert ''{0}'' in Modell''{1}''.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=Kein \u00fcbereinstimmendes navigation-case-Element von Ansichts-ID ''{0}'' f\u00fcr Ergebnis ''{1}'' gefunden.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=Kein \u00fcbereinstimmendes navigation-case Element von View ID ''{0}'' f\u00fcr die Aktion ''{1}'' mit dem Ergebnis ''{2}'' gefunden.
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=Ung\u00fcltige Anforderungszeichenfolge in Ergebnis ''{0}''.
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=Ausdrucksfehler: Benanntes Objekt ''{0}'' nicht gefunden.
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=Fehler nicht in einer UIComponentTag eingebettet f\u00fcr Tag mit Behandlungsroutineklasse: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR=Der Tag {0} muss in einem Tag eingebettet sein, der mit einer Komponente vom Typ {1} verkn\u00fcpft ist.
-com.sun.faces.NO_DTD_FOUND_ERROR=DTD mit PUBLIC ID ''{0}'' unter Pfad ''{1}'' kann nicht ermittelt werden.
-com.sun.faces.NULL_BODY_CONTENT_ERROR=BodyContent ist null f\u00fcr Tag mit Behandlungsroutineklasse: ''{0}''.
-com.sun.faces.NULL_COMPONENT_ERROR=Konstruktionsfehler: Komponentenargument ist null.
-com.sun.faces.NULL_CONFIGURATION=Keine Konfiguration f\u00fcr die Anwendung geladen.
-com.sun.faces.NULL_CONTEXT_ERROR=Argumentfehler: Kontextargument ist null.
-com.sun.faces.NULL_EVENT_ERROR=Argumentfehler: Ereignisargument ist null.
-com.sun.faces.NULL_FORVALUE=Komponente "{0}" nicht gefunden.
-com.sun.faces.NULL_HANDLER_ERROR=Argumentfehler: Behandlungsroutinenargument ist null.
-com.sun.faces.NULL_LOCALE_ERROR=Argumentfehler: Gebietsschemaargument ist null.
-com.sun.faces.NULL_MESSAGE_ERROR=Argumentfehler: Nachrichtenparameter kann nicht null sein.
-com.sun.faces.NULL_PARAMETERS_ERROR=Argumentfehler: Parameter ''{0}'' ist null
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=Argumentfehler: Anforderungsansicht-Argument ist null.
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=Argumentfehler: ResponseStream-Argument ist null.
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=Argumentfehler: ResponseView-Argument ist null.
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=Argumentfehler: ResponseWriter-Argument ist null.
-com.sun.faces.OBJECT_CREATION_ERROR=Ein oder mehr konfigurierte Anwendungsobjekte konnten nicht erstellt werden.  Details finden Sie in den Webanwendungsprotokollen. 
-com.sun.faces.OPTION_NOT_SELECT_ITEM=Argumentfehler: Eine Option f\u00fcr Komponente ''{0}'' war keine Instanz von javax.faces.model.SelectItem.  Gefundener Typ: ''{1}''.
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: Diese Schaltfl\u00e4che ist deaktiviert, da ein Navigationsfall nicht abgeglichen werden konnte.
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: Dieser Link ist deaktiviert, da ein Navigationsfall nicht abgeglichen werden konnte.
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId \u00fcberschreitet H\u00f6chstwerte f\u00fcr ID: ''{0}''.
-com.sun.faces.RENDERER_NOT_FOUND=Renderer nicht gefunden f\u00fcr Renderer-Typ: ''{0}''.
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=Zustandsfehler: RequestView wurde f\u00fcr diese Anforderung bereits festgelegt.
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=""Ung\u00fcltiges Ressourcenformat.  Eigenschaft ''{0}'' kann nicht analysiert werden."
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=Ung\u00fcltiges Ressourcenformat  Eigenschaft ''{0}'' enth\u00e4lt mehr als einen Doppelpunkt (:).
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=Ung\u00fcltiges Ressourcenformat  Eigenschaft ''{0}'' kann nicht analysiert werden, um Ressourcennamen und Bibliotheksnamen zu extrahieren."
-com.sun.faces.SAVING_STATE_ERROR=Fehler beim Speichern des Zustands.
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=Argumentfehler: ''{0}'' wird f\u00fcr diesen Renderer nicht unterst\u00fctzt.
-com.sun.faces.TYPECONVERSION_ERROR=Konvertierungsfehler beim Festlegen von Wert ''{0}'' f\u00fcr ''{1}''. 
-com.sun.faces.VALIDATION_COMMAND_ERROR=\u00dcberpr\u00fcfungsfehler ''{0}'' muss \u00fcber das Wert- oder Bildattribut verf\u00fcgen.
-com.sun.faces.VALIDATION_EL_ERROR=\u00dcberpr\u00fcfungsfehler Ausdruck ung\u00fcltig f\u00fcr:''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=\u00dcberpr\u00fcfungsfehler Die folgenden JSF-Tags m\u00fcssen IDs enthalten:''{0}''
-com.sun.faces.CANNOT_CONVERT=Converter-Instanz kann mit converterId ''{0}'' oder Verbindung ''{1}'' nicht aufgel\u00f6st werden.
-com.sun.faces.CANNOT_VALIDATE=Validator-Instanz kann mit validatorId ''{0}'' oder Verbindung ''{1}'' nicht aufgel\u00f6st werden.
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] Klasse ist nicht vorhanden.
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] Klasse kann aufgrund einer fehlenden Abh\u00e4ngigkeit nicht geladen werden -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] Klasse enth\u00e4lt einen Constructor ohne Argument, ist jedoch nicht \u00f6ffentlich.
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] Klasse enth\u00e4lt keinen \u00f6ffentlichen Constructor ohne Argument.
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] Klasse implementiert oder erweitert {2} nicht.
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=Verwalteter Bean ''{0}'' enth\u00e4lt zyklische Referenzen.  Auswertungspfad: ''{1}''.
-com.sun.faces.OBJECT_IS_READONLY={0}-Objekt ist schreibgesch\u00fctzt.
-com.sun.faces.INCORRECT_JSP_VERSION=Die JSP-Version des Containers ist \u00e4lter als 2.1 und kann die EL RI-Ausdrucks-Factory nicht ermitteln, ''{0}''.  Wenn Sie JSP oder die EL RI nicht verwenden, achten Sie darauf, dass der Initialisierungsparameter ''{1}'' richtig festgelegt ist.
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=Index {1} au\u00dferhalb der Grenzen f\u00fcr {0}
-com.sun.faces.PROPERTY_TYPE_ERROR={0} ist kein Array- bzw. Listentyp.
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=Index {1} mit einer L\u00e4nge von {2} au\u00dferhalb der Grenzen f\u00fcr {0}.
-com.sun.faces.RESTORE_VIEW_ERROR=Ansicht ''{0}'' konnte nicht wiederhergestellt werden.
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=Folgendes ID-Attribut kann nicht geschrieben werden: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=Nicht in einem UIComponentTag eingebettet.
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=Mit UIComponentTag ist keine Komponente verbunden.
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=Die JavaScript-Datei kann nicht in den Client geschrieben werden.
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=Eine oder mehrere Ressourcen haben das Ziel ''{0}'', aber es wurde keine Komponente ''{0}'' in der Ansicht definiert.
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=Folgendes Eigenschaften sind erforderlich, aber leider Sie haben keinen Werte �bergegeben: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=Folgendes facets(s) sind erforderlich, aber lieder Sie haben keinen Facets �bergegeben: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=Composite Component metadata f�r component clientid ''{0}'' nicht gefunden.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_en.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_en.properties
deleted file mode 100644
index b137ca0..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_en.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=ApplicationAssociate ctor not called in same callstack as ConfigureListener.contextInitialized().
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=ApplicationAssociate already exists for this webapp.
-com.sun.faces.ASSERTION_FAILED=Assertion Failed
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=Attribute ''{0}'' not supported for component type ''{1}''.
-com.sun.faces.CANT_CONVERT_VALUE=Can''t convert property: ''{0}'' to value type: ''{1}''.
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=Unable to close input stream.
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=Can''t create Lifecycle for id: ''{0}''.
-com.sun.faces.CANT_INSTANTIATE_CLASS=Can''t instantiate class: ''{0}''.
-com.sun.faces.CANT_INTROSPECT_CLASS=Can''t introspect class: ''{0}''
-com.sun.faces.CANT_PARSE_FILE=Can''t parse file: ''{0}'': Error at line {1} column {2}: {3}.
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=Expected a child component type of ''{0}'' for component type ''{1}({2})''.  Found ''{3}''.
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: This link is disabled as it is not nested within a JSF form.
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=One or more UICommand instances found within the view that weren't nested within a UIForm.  The actions associated with these commands will not be invoked.
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=Component Not Found for identifier: ''{0}''.
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=Unable to find component with ID ''{0}'' in view.
-com.sun.faces.CONTENT_TYPE_ERROR=Unrecognized Content Type.
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=Unable to register renderers with RenderKit using id {0}.  RenderKit does not exist.
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=Component ID ''{0}'' has already been found in the view.  
-com.sun.faces.EMPTY_PARAMETER=Parameter is empty
-com.sun.faces.ENCODING_ERROR=Unrecognized Character Encoding.
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=Can''t get ValueBinding for value: ''{0}''.
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=Can''t get value from value binding expression: ''{0}''.
-com.sun.faces.ERROR_OPENING_FILE=Can''t open configuration file: ''{0}''.
-com.sun.faces.ERROR_PROCESSING_CONFIG=An unexpected error occurred during configuration processing.
-com.sun.faces.ERROR_REGISTERING_DTD=Can''t register DTD: ''{0}''.
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=Can''t set managed bean property: ''{0}''.
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=Evaluation of expression for attribute ''{0}'' resulted in unexpected type.  Expected {1}, but received {2}.
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=Construction Error: One or more input parameters may be null.
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=Unable to determine FaceServlet mapping for servlet path ''{0}''.
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=The FacesServlet cannot have a url-pattern of '/*'.  Please define a different url-pattern.
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=No FacesContext is available to process this request.  This is most likely due to the request being sent to the wrong path.
-com.sun.faces.FILE_NOT_FOUND=File Not Found for file: ''{0}''.
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=Illegal attempt to set {0} after a response has been rendered.
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=Characters not allowed.
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=Illegal use of implicit object identifier in lValue mode: ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=Illegal Model Reference in this context for expression ''{0}''.
-com.sun.faces.ILLEGAL_VIEW_ID=Illegal view ID ''{0}''.  The ID must begin with ''/''
-com.sun.faces.INVALID_EXPRESSION=Invalid expression: ''{0}''.
-com.sun.faces.INVALID_INIT_PARAM=Invalid value: ''{0}'', for initialization parameter: ''{1}''.  Acceptable values are 'true' or 'false'.  Defaulting to 'false'.
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=Invalid Message severity ''{0}'' defined in configuration.
-com.sun.faces.INVALID_SCOPE_LIFESPAN=The scope of the object referenced by expression ''{0}'', ''{1}'', is shorter than the referring managed bean''s (''{2}'') scope of ''{3}''
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=LifecycleId already added for id: ''{0}''.
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=LifecycleId not found for id ''{0}''.
-com.sun.faces.MAXIMUM_EVENTS_REACHED=Maximum number of events ''{0}'' reached.
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=Unable to set target property ''{0}'' in managed bean ''{1}''. The property must accept either List or Array instances.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a map property, however, the setter in the class does not accept Map instances.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a map property, however, the getter in the class does not return Map instances.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a list property, however, the setter in the class does not accept List or Array instances.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a list property, however, the getter in the class does not return List or Array instances.
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=Property ''{0}'' in managed bean ''{1}'' is defined as a list property.  The getter returns an array type, but there is no associated setter.
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=Unable to set target property ''{0}'' in managed bean ''{1}''.  The target property returned an existing value that was not an instance of List.
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''. The managed bean is configured as a List, but also attempts to define map entries or managed properties.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean is configured as a Map, but also attempts to define managed properties.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean contains a managed property named ''{1}'' with list entries, but has illegally defined a value and/or map entries.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean contains a managed property named ''{1}'' with map entries, but has illegally defined a value as well.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  The managed bean contains a managed property named ''{1}'' containing no list or map entires, nor any value elements.
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=Error performing conversion of value ''{0}'' of type ''{1}'' to type ''{2}'' for managed bean ''{3}''.
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=Bean or property class ''{0}'' for managed bean ''{1}'' cannot be found.
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=Bean or property class ''{0}'' for managed bean ''{1}'' cannot be loaded due to a missing dependency: {2}.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=Managed bean class ''{0}'' for managed bean ''{1}'' is not declared public.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=Managed bean class ''{0}'' for managed bean ''{1}'' is declared as abstract or as an interface.
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=Managed bean class ''{0}'' for managed bean ''{1}'' doesn't declare a public no-argument constructor.
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=An error occurred performing resource injection on managed bean ''{0}''
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=The property ''{0}'' for managed bean ''{1}'' is defined with a property class of ''{2}'', however, this class is not assignable to the property.
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=Unable to Introspect managed bean ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=Property ''{0}'' for managed bean ''{1}'' does not exist.  Check that appropriate getter and/or setter methods exist.
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=Property ''{0}'' for managed bean ''{1}'' has no setter.
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=Property ''{0}'' for managed bean ''{1}'' accepts more than one argument
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=Unable to set property ''{0}'' for managed bean ''{1}''
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=Unable to create managed bean ''{0}''.  The following problems were found:
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=JSF will be unable to create managed bean ''{0}'' when it is requested.  The following problems where found:
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=Unexpected error processing managed bean ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=Unexpected error processing managed property ''{0}''
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=Scope ''{0}'' is not one of ''view'', ''request'', ''session'', ''application'', nor does it represent a ValueExpression (#{...})
-com.sun.faces.MISSING_CLASS_ERROR=Missing Class: Can''t load class ''{0}''.
-com.sun.faces.MISSING_RESOURCE_ERROR=Missing Resource: Can''t get ResourceBundle.
-com.sun.faces.MODELUPDATE_ERROR=Model Update failure for value ''{0}'' in model''{1}''.
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=Expression Error: Named Object: ''{0}'' not found.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=Unable to find matching navigation case from view ID ''{0}'' for outcome ''{1}''
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=Unable to find matching navigation case with from-view-id ''{0}'' for action ''{1}'' with outcome ''{2}''
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=Invalid query string in outcome ''{0}''
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=Not nested in a UIComponentTag Error for tag with handler class: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR=The {0} tag should be nested within a tag that is associated with a component of type {1}.
-com.sun.faces.NO_DTD_FOUND_ERROR=Unable to locate DTD with PUBLIC ID ''{0}'' at path ''{1}''.
-com.sun.faces.NULL_BODY_CONTENT_ERROR=BodyContent is null for tag with handler class: ''{0}''.
-com.sun.faces.NULL_COMPONENT_ERROR=Construction Error: Component argument is null.
-com.sun.faces.NULL_CONFIGURATION=No Configuration loaded for the application.
-com.sun.faces.NULL_CONTEXT_ERROR=Argument Error: Context argument is null.
-com.sun.faces.NULL_EVENT_ERROR=Argument Error: Event argument is null.
-com.sun.faces.NULL_FORVALUE=Component "{0}" not found
-com.sun.faces.NULL_HANDLER_ERROR=Argument Error: Handler argument is null.
-com.sun.faces.NULL_LOCALE_ERROR=Argument Error: Locale argument is null.
-com.sun.faces.NULL_MESSAGE_ERROR=Argument Error: Message parameter cannot be null
-com.sun.faces.NULL_PARAMETERS_ERROR=Argument Error: Parameter ''{0}'' is null
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=Argument Error: Request View argument is null.
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=Argument Error: ResponseStream argument is null.
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=Argument Error: ResponseView argument is null.
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=Argument Error: ResponseWriter argument is null.
-com.sun.faces.OBJECT_CREATION_ERROR=One or more confgured application objects could not be created.  Check your web application logs for details.
-com.sun.faces.OPTION_NOT_SELECT_ITEM=Argument Error: An option for component ''{0}'' was not an instance of javax.faces.model.SelectItem.  Type found: ''{1}''.
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: This button is disabled because a navigation case could not be matched.
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: This link is disabled because a navigation case could not be matched.
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId out of bounds for id: ''{0}''.
-com.sun.faces.RENDERER_NOT_FOUND=Renderer not found for Renderer type: ''{0}''.
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=State Error: RequestView has already been set for this request.
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=""Invalid resource format.  Property ''{0}'' cannot be parsed."
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=Invalid resource format.  Property ''{0}'' contains more than one colon (:).
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=Invalid resource format.  Property ''{0}'' cannot be parsed to extract resource name and library name."
-com.sun.faces.SAVING_STATE_ERROR=Error while saving state.
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=Argument Error: ''{0}'' is not supported for this renderer.
-com.sun.faces.TYPECONVERSION_ERROR=Conversion Error setting value ''{0}'' for ''{1}''.
-com.sun.faces.VALIDATION_COMMAND_ERROR=Validation error. ''{0}'' must have value or image attribute.
-com.sun.faces.VALIDATION_EL_ERROR=Validation error. Expression invalid for:''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=Validation error. The following JSF tags are required to contain IDs:''{0}''
-com.sun.faces.CANNOT_CONVERT=Unable to resolve a Converter instance using either converterId ''{0}'' or binding ''{1}''.
-com.sun.faces.CANNOT_VALIDATE=Unable to resolve a Validator instance using either validatorId ''{0}'' or binding ''{1}''.
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] Class does not exist
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] Class cannot be loaded due to a missing dependency -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] Class contains a no argument constructor, but it is not public
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] Class contains no public no-argument constructor
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] Class does not implement or extend {2}
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=Managed bean ''{0}'' contains cyclic references.  Evaluation path: ''{1}''.
-com.sun.faces.OBJECT_IS_READONLY={0} object is read only
-com.sun.faces.INCORRECT_JSP_VERSION=It appears the JSP version of the container is older than 2.1 and unable to locate the EL RI expression factory, ''{0}''.  If not using JSP or the EL RI, make sure the context initialization parameter, ''{1}'', is properly set.
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=Index {1} Out of Bounds for {0}
-com.sun.faces.PROPERTY_TYPE_ERROR={0} is not Array or List type.
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=Index {1} Out of Bounds for {0} with a length of {2}
-com.sun.faces.RESTORE_VIEW_ERROR=View ''{0}'' could not be restored.
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=Can''t write ID attribute: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=Not nested in a UIComponentTag.
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=No component associated with UIComponentTag.
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=Can''t write the JavaScript file to client.
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=One or more resources have the target of ''{0}'', but no ''{0}'' component has been defined within the view.
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_es.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_es.properties
deleted file mode 100644
index cef325d..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_es.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=No se ha llamado a ctor de ApplicationAssociate ctor en la misma pila de llamadas que ConfigureListener.contextInitialized().
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=ApplicationAssociate ya existe para esta aplicaci\u00f3n web.
-com.sun.faces.ASSERTION_FAILED=Error de aserci\u00f3n
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=El atributo ''{0}'' no es compatible con el tipo de componente ''{1}''.
-com.sun.faces.CANT_CONVERT_VALUE=No se puede convertir la propiedad: ''{0}'' al tipo de valor: ''{1}''.
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=No se puede cerrar la secuencia de entrada.
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=No se puede crear el ciclo de vida para el ID: ''{0}''.
-com.sun.faces.CANT_INSTANTIATE_CLASS=No se puede crear la instancia de clase: ''{0}''.
-com.sun.faces.CANT_INTROSPECT_CLASS=No se puede crear la introspecci\u00f3n de clase: ''{0}''
-com.sun.faces.CANT_PARSE_FILE=No se puede analizar el archivo: ''{0}'': error en l\u00ednea {1} columna {2}: {3}.
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=Se esperaba un componente secundario con el tipo ''{0}'' para el tipo de componente ''{1}({2})''.  Encontrado ''{3}''.
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: Este v\u00ednculo est\u00e1 deshabilitado, ya que no se ha anidado en un formulario JSF.
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=Se han encontrado una o varias instancias UICommand dentro de la vista que no se han anidado dentro de UIForm.  No se invocar\u00e1n las acciones asociadas a estos comandos.
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=No se ha encontrado el componente para el identificador: ''{0}''.
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=No se encuentra el componente con ID ''{0}'' en la vista.
-com.sun.faces.CONTENT_TYPE_ERROR=Tipo de contenido no reconocido.
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=No se pueden registrar renderers con RenderKit utilizando el ID {0}.  RenderKit no existe.
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=El ID del componente ''{0}'' ya se ha encontrado en la vista.
-com.sun.faces.EMPTY_PARAMETER=El par\u00e1metro est\u00e1 vac\u00edo
-com.sun.faces.ENCODING_ERROR=Codificaci\u00f3n de caracteres no reconocida.
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=No se puede obtener ValueBinding para el valor: ''{0}''.
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=No se puede obtener el valor de la expresi\u00f3n de enlace de valor: ''{0}''.
-com.sun.faces.ERROR_OPENING_FILE=No se puede abrir el archivo de configuraci\u00f3n: ''{0}''.
-com.sun.faces.ERROR_PROCESSING_CONFIG=Se ha producido un error inesperado durante el procesamiento de configuraci\u00f3n. 
-com.sun.faces.ERROR_REGISTERING_DTD=No se puede registrar el DTD: ''{0}''.
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=No se puede definir la propiedad de bean administrado: ''{0}''.
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=La evaluaci\u00f3n de la expresi\u00f3n del atributo ''{0}'' ha devuelto un tipo inesperado.  Se esperaba {1}, pero se recibi\u00f3 {2}.
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=Error de construcci\u00f3n: es posible que uno o varios par\u00e1metros de entrada sean nulos.
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=No se puede determinar la asignaci\u00f3n FaceServlet para la ruta del servlet ''{0}''.
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=FacesServlet no puede tener un url-pattern de '/*'.  Por favor defina un url-pattern diferente.
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=No hay disponible ning\u00fan contexto FacesContext para procesar esta solicitud.  Es probable que esto se deba a que la solicitud se ha enviado a la ruta incorrecta.
-com.sun.faces.FILE_NOT_FOUND=No se ha encontrado el archivo para el archivo: ''{0}''.
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=Intento no v\u00e1lido para definir {0} despu\u00e9s de que se haya procesado una respuesta.
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=Caracteres no permitidos.
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=Uso no v\u00e1lido del identificador de objeto impl\u00edcito en modo lValue: ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=Referencia de modelo no v\u00e1lida en este contexto para la expresi\u00f3n ''{0}''.
-com.sun.faces.ILLEGAL_VIEW_ID=ID de vista no v\u00e1lido ''{0}''.  El ID debe comenzar con ''/''
-com.sun.faces.INVALID_EXPRESSION=Expresi\u00f3n no v\u00e1lida: ''{0}''.
-com.sun.faces.INVALID_INIT_PARAM=Valor no v\u00e1lido: ''{0}'', para el par\u00e1metro de inicializaci\u00f3n: ''{1}''.  Los valores aceptados son 'true' o 'false'.  Se utilizar\u00e1 por defecto 'false'.
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=Se ha definido una gravedad de mensaje ''{0}'' no v\u00e1lida en la configuraci\u00f3n.
-com.sun.faces.INVALID_SCOPE_LIFESPAN=El \u00e1mbito del objeto al que hace referencia la expresi\u00f3n ''{0}'', ''{1}'', es m\u00e1s corto que el \u00e1mbito de ''{3}'' del bean administrado de referencia (''{2}'')
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=LifecycleId ya se ha agregado para el ID: ''{0}''.
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=LifecycleId no se ha encontrado para el ID ''{0}''.
-com.sun.faces.MAXIMUM_EVENTS_REACHED=Se ha alcanzado el n\u00famero m\u00e1ximo de eventos ''{0}''.
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=No se puede definir la propiedad de destino ''{0}'' en el bean administrado ''{1}''. La propiedad debe aceptar las instancias de lista o matriz.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=La propiedad ''{0}'' en el bean administrado ''{1}'' se define como una propiedad de mapa, no obstante el setter de la clase no acepta instancias Map.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=La propiedad ''{0}'' en el bean administrado ''{1}'' se define como una propiedad de mapa, no obstante el getter de la clase no devuelve instancias Map.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=La propiedad ''{0}'' en el bean administrado ''{1}'' se define como una propiedad de lista, no obstante el setter de la clase no acepta instancias de tipo lista o matriz.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=La propiedad ''{0}'' en el bean administrado ''{1}'' se define como una propiedad de lista, no obstante el getter de la clase no devuelve instancias de tipo lista o matriz.
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=La propiedad ''{0}'' en el bean administrado ''{1}'' se ha definido como una propiedad de lista.  El getter devuelve un tipo matriz, pero no hay setter asociado.
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=No se puede definir la propiedad de destino ''{0}'' en el bean administrado ''{1}''.  La propiedad de destino ha devuelto un valor existente que no era una instancia de lista.
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Configuraci\u00f3n incorrecta para el bean administrado ''{0}''. El bean administrado est\u00e1 configurado como una lista, pero tambi\u00e9n intenta definir entradas de mapa o propiedades administradas.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Configuraci\u00f3n incorrecta para el bean administrado ''{0}''.  El bean administrado est\u00e1 configurado como una asignaci\u00f3n, pero tambi\u00e9n intenta definir propiedades administradas.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Configuraci\u00f3n incorrecta para el bean administrado ''{0}''.  El bean administrado contiene una propiedad denominada ''{1}'' con entradas de lista, pero tiene un valor o entradas de asignaci\u00f3n definidas de forma no v\u00e1lida.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Configuraci\u00f3n incorrecta para el bean administrado ''{0}''.  El bean administrado contiene una propiedad administrada denominada ''{1}'' con entradas de asignaci\u00f3n, pero tiene tambi\u00e9n un valor definido de forma no v\u00e1lida.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Configuraci\u00f3n incorrecta para el bean administrado ''{0}''.  El bean administrado contiene una propiedad administrada denominada ''{1}'' sin entradas de asignaci\u00f3n o lista ni elementos de valor.
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=Error al realizar la conversi\u00f3n del valor ''{0}'' del tipo ''{1}'' al tipo ''{2}'' para el bean administrado ''{3}''.
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=No se encuentra el bean o la clase de propiedad ''{0}'' para el bean administrado ''{1}''.
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=El bean o la clase de propiedad ''{0}'' para el bean administrado ''{1} no se puede cargar debido a que falta una dependencia: {2}.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=La clase de bean administrado ''{0}'' para el bean administrado ''{1}'' no se ha declarado p\u00fablica.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=La clase de bean administrado ''{0}'' para el bean administrado ''{1}'' se ha declarado como abstracta o como interfaz.
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=La clase de bean administrado ''{0}'' para el bean administrado ''{1}'' no declara un constructor sin argumentos p\u00fablico.
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=Se ha producido un error al realizar la inyecci\u00f3n de recurso en el bean administrado ''{0}''
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=La propiedad ''{0}'' para el bean administrado ''{1}'' se ha definido con una clase de propiedad ''{2}'', sin embargo, esta clase no se puede asignar a la propiedad.
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=No se puede realizar la introspecci\u00f3n del bean administrado ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=No existe la propiedad ''{0}'' para el bean administrado ''{1}''.
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=La propiedad ''{0}'' para el bean administrado ''{1}'' no tiene setter.
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=La propiedad ''{0}'' para el bean administrado ''{1}'' acepta m\u00e1s de un argumento
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=No se puede definir la propiedad ''{0}'' para el bean administrado ''{1}''
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=No se puede crear el bean administrado ''{0}''.  Se han encontrado los problemas siguientes:
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=JSF no podr\u00e1 crear el bean administrado ''{0}'' cuando se solicite.  Se han encontrado los problemas siguientes:
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=Error inesperado al procesar el bean administrado ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=Error inesperado al procesar la propiedad administrada ''{0}''
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=El \u00e1mbito de ''{0}'' no es ''view'', ''request'', ''session'', ''application'' ni representa un ValueExpression (#{...})
-com.sun.faces.MISSING_CLASS_ERROR=Falta la clase: no se puede cargar la clase ''{0}''.
-com.sun.faces.MISSING_RESOURCE_ERROR=Falta el recurso: no se puede obtener ResourceBundle.
-com.sun.faces.MODELUPDATE_ERROR=Error de actualizaci\u00f3n de modelo para el valor ''{0}'' en el modelo ''{1}''.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=No se puede encontrar el caso de navegaci\u00f3n coincidente del ID de vista ''{0}'' para el resultado ''{1}''
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=No se puede encontrar el caso de navegaci\u00f3n coincidente del ID de vista ''{0}'' para la acci\u00f3n '{1}'' con el resultado ''{2}''
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=Cadena de consulta no v\u00e1lida en el resultado ''{0}''
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=Error de expresi\u00f3n: objeto con nombre: ''{0}'' no encontrado.
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=Error de no anidaci\u00f3n UIComponentTag para la etiqueta con clase de controlador: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR=La etiqueta {0} debe ser anidada en una etiqueta asociada a un componente del tipo {1}.
-com.sun.faces.NO_DTD_FOUND_ERROR=No se puede ubicar DTD con ID p\u00fablico ''{0}'' en la ruta ''{1}''.
-com.sun.faces.NULL_BODY_CONTENT_ERROR=BodyContent es nulo para la etiqueta con controlador de clase: ''{0}''.
-com.sun.faces.NULL_COMPONENT_ERROR=Error de construcci\u00f3n: el argumento de componente es nulo.
-com.sun.faces.NULL_CONFIGURATION=No se ha cargado ninguna configuraci\u00f3n para la aplicaci\u00f3n.
-com.sun.faces.NULL_CONTEXT_ERROR=Error de argumento: el argumento de contexto es nulo.
-com.sun.faces.NULL_EVENT_ERROR=Error de argumento: el argumento de evento es nulo.
-com.sun.faces.NULL_FORVALUE=No se ha encontrado el componente "{0}"
-com.sun.faces.NULL_HANDLER_ERROR=Error de argumento: el argumento de controlador es nulo.
-com.sun.faces.NULL_LOCALE_ERROR=Error de argumento: el argumento de configuraci\u00f3n regional es nulo.
-com.sun.faces.NULL_MESSAGE_ERROR=Error de argumento: el par\u00e1metro de mensaje no puede ser nulo
-com.sun.faces.NULL_PARAMETERS_ERROR=Error de argumento: el par\u00e1metro ''{0}'' es nulo
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=Error de argumento: el argumento RequestView es nulo.
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=Error de argumento: el argumento ResponseStream es nulo.
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=Error de argumento: el argumento ResponseView es nulo.
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=Error de argumento: el argumento ResponseWriter es nulo.
-com.sun.faces.OBJECT_CREATION_ERROR=No se han podido crear uno o varios objetos de aplicaci\u00f3n configurados.  Compruebe los registros de aplicaci\u00f3n Web para m\u00e1s informaci\u00f3n.
-com.sun.faces.OPTION_NOT_SELECT_ITEM=Error de argumento: una opci\u00f3n del componente ''{0}'' no era una instancia de javax.faces.model.SelectItem.  Tipo encontrado: ''{1}''.
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: Este bot\u00f3n est\u00e1 desactivado porque no se ha podido asignar un caso de navegaci\u00f3n.
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: Este v\u00ednculo est\u00e1 desactivado porque no se ha podido asignar un caso de navegaci\u00f3n.
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId se encuentra fuera de los l\u00edmites para ID: ''{0}''.
-com.sun.faces.RENDERER_NOT_FOUND=No se ha encontrado ning\u00fan renderer para el tipo de renderer ''{0}''.
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=Error de estado: ya se ha definido RequestView para esta solicitud.
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=""Formato de recurso no v\u00e1lido.  La propiedad ''{0}'' no se puede analizar."
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=Formato de recurso no v\u00e1lido.  La propiedad ''{0}'' contiene m\u00e1s de un signo de dos puntos (:).
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=Formato de recurso no v\u00e1lido.  La propiedad ''{0}'' no se puede analizar para extraer el nombre de recurso y el nombre de biblioteca."
-com.sun.faces.SAVING_STATE_ERROR=Error al guardar el estado.
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=Error de argumento: no se admite ''{0}'' para este renderer.
-com.sun.faces.TYPECONVERSION_ERROR=Error de conversi\u00f3n al definir el valor ''{0}'' para ''{1}''. 
-com.sun.faces.VALIDATION_COMMAND_ERROR=Error de validaci\u00f3n. ''{0}'' debe tener un atributo de valor o imagen.
-com.sun.faces.VALIDATION_EL_ERROR=Error de validaci\u00f3n. Expresi\u00f3n no v\u00e1lida para: ''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=Error de validaci\u00f3n. Se requiere que las siguientes etiquetas JSF contengan ID:''{0}''
-com.sun.faces.CANNOT_CONVERT=No se puede resolver una instancia Converter mediante converterId ''{0}'' o un enlace ''{1}''.
-com.sun.faces.CANNOT_VALIDATE=No se puede resolver una instancia Validator mediante validatorId ''{0}'' o un enlace ''{1}''.
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] la clase no existe
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] la clase no se puede cargar debido a que falta una dependencia -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] la clase contiene un constructor sin argumentos, pero no es p\u00fablico
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] la clase no contiene ning\u00fan constructor sin argumentos p\u00fablico
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] la clase no implementa o extiende {2}
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=El bean administrado ''{0}'' contiene referencias c\u00edclicas.  Ruta de evaluaci\u00f3n: ''{1}''.
-com.sun.faces.OBJECT_IS_READONLY=El objeto {0} es de s\u00f3lo lectura
-com.sun.faces.INCORRECT_JSP_VERSION=Parece que la versi\u00f3n JSP del contenedor es m\u00e1s antigua que la 2.1 y no se puede ubicar la f\u00e1brica de expresiones EL RI, ''{0}''.  Si no utiliza JSP o EL RI, aseg\u00farese de que el par\u00e1metro de inicializaci\u00f3n de contexto, ''{1}'', est\u00e9 definido correctamente.
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=El \u00edndice {1} se encuentra fuera de los l\u00edmites para {0}
-com.sun.faces.PROPERTY_TYPE_ERROR={0} no es del tipo Matriz o Lista.
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=El \u00edndice {1} se encuentra fuera de los l\u00edmites para {0} con una longitud de {2}
-com.sun.faces.RESTORE_VIEW_ERROR=No se pudo restablecer la vista ''{0}''.
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=No se puede escribir el atributo de ID: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=No est\u00e1 anidado en UIComponentTag.
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=No se ha encontrado ning\u00fan componente asociado a UIComponentTag.
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=No se puede escribir el archivo JavaScript en el cliente.
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=Uno o m\u00e1s recursos tienen el destino de ''{0}'', pero no se ha definido ning\u00fan componente de ''{0}'' dentro de la vista.
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_fr.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_fr.properties
deleted file mode 100644
index 789708c..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_fr.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=ApplicationAssociate ctor non appel\u00e9 dans la m\u00eame pile d''appels que ConfigureListener.contextInitialized().
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=ApplicationAssociate existe d\u00e9j\u00e0 pour cette application Web.
-com.sun.faces.ASSERTION_FAILED=Echec de l''assertion
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=L''attribut ''{0}'' n''est pas pris en charge pour le type de composant ''{1}''.
-com.sun.faces.CANT_CONVERT_VALUE=Impossible de convertir la propri\u00e9t\u00e9 ''{0}'' en type de valeur ''{1}''.
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=Impossible de fermer le flux d''entr\u00e9e.
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=Impossible de cr\u00e9er le Lifecycle pour l''id ''{0}''.
-com.sun.faces.CANT_INSTANTIATE_CLASS=Impossible d''instancier la classe ''{0}''.
-com.sun.faces.CANT_INTROSPECT_CLASS=Impossible d''appliquer une introspection \u00e0 la classe ''{0}''.
-com.sun.faces.CANT_PARSE_FILE=Impossible d''analyser le fichier ''{0}''. Erreur \u00e0 la ligne {1} colonne {2} : {3}.
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=Le type de composant enfant ''{0}'' \u00e9tait attendu pour le type de composant ''{1}({2})''''.  ''{3}'' d\u00e9tect\u00e9.
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: ce lien est d\u00e9sactiv\u00e9 car il n''est pas imbriqu\u00e9 dans un formulaire JSF.
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=Une ou plusieurs instances d''UICommand d\u00e9tect\u00e9es dans la vue et non imbriqu\u00e9es dans un formulaire UIForm.  Les actions associ\u00e9es \u00e0 ces commandes ne seront pas invoqu\u00e9es.
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=Composant non d\u00e9tect\u00e9 pour l''identificateur ''{0}''.
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=Impossible de d\u00e9tecter le composant dont l''ID est ''{0}'' dans la vue.
-com.sun.faces.CONTENT_TYPE_ERROR=Type de contenu non reconnu
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=Impossible d''enregistrer des renderers avec RenderKit \u00e0 l''aide de l''id {0}.  RenderKit inexistant.
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=L''ID de composant ''{0}'' a d\u00e9j\u00e0 \u00e9t\u00e9 d\u00e9tect\u00e9 dans la vue.
-com.sun.faces.EMPTY_PARAMETER=Param\u00e8tre vide
-com.sun.faces.ENCODING_ERROR=Codage des caract\u00e8res non reconnu
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=Impossible d''obtenir la ValueBinding pour la valeur ''{0}''.
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=Impossible d''obtenir la valeur de l''expression d''appel par valeur ''{0}''.
-com.sun.faces.ERROR_OPENING_FILE=Impossible d''ouvrir le fichier de configuration ''{0}''.
-com.sun.faces.ERROR_PROCESSING_CONFIG=Une erreur inattendue s''est produite pendant le traitement de la configuration. 
-com.sun.faces.ERROR_REGISTERING_DTD=Impossible d''enregistrer le fichier DTD ''{0}''.
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=Impossible de d\u00e9finir la propri\u00e9t\u00e9 de bean g\u00e9r\u00e9 ''{0}''.
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=L''\u00e9valuation de l''expression de l''attribut ''{0}'' a g\u00e9n\u00e9r\u00e9 un type inattendu.  Valeur attendue : {1} ; valeur re\u00e7ue : {2}.
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=Erreur de construction : un ou plusieurs param\u00e8tres d''entr\u00e9e peuvent \u00eatre null.
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=Impossible de d\u00e9terminer le mappage de FaceServlet pour le chemin de servlet ''{0}''.
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=Le FacesServlet ne peut pas avoir d''\u00e9l\u00e9ment url-pattern ''/*''.  D\u00e9finissez un autre \u00e9l\u00e9ment url-pattern.
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=Aucun FacesContext n''est disponible pour le traitement de cette requ\u00eate.  Ceci est probablement d\u00fb au fait que la requ\u00eate a \u00e9t\u00e9 envoy\u00e9e vers un chemin d''acc\u00e8s erron\u00e9.
-com.sun.faces.FILE_NOT_FOUND=Fichier non d\u00e9tect\u00e9 pour le fichier ''{0}''.
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=Tentative non autoris\u00e9e de d\u00e9finition de {0} apr\u00e8s la restitution d''une r\u00e9ponse.
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=Caract\u00e8res non autoris\u00e9s
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=Utilisation non autoris\u00e9e d''un identificateur d''objet implicite en mode lValue : ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=R\u00e9f\u00e9rence de mod\u00e8le non autoris\u00e9e dans ce contexte pour l''expression ''{0}''.
-com.sun.faces.ILLEGAL_VIEW_ID=ID de vue ''{0}'' non autoris\u00e9.  L''ID doit commencer par ''''/''''.
-com.sun.faces.INVALID_EXPRESSION=Expression non autoris\u00e9e : ''{0}''.
-com.sun.faces.INVALID_INIT_PARAM=Valeur incorrecte : ''{0}'', pour le param\u00e8tre d''initialisation ''{1}''.  Les valeurs tol\u00e9r\u00e9es sont ''true'' ou ''false''.  D\u00e9finition de la valeur par d\u00e9faut ''false''.
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=Gravit\u00e9 de message non valide ''{0}'' d\u00e9finie dans la configuration.
-com.sun.faces.INVALID_SCOPE_LIFESPAN=L''\u00e9tendue de l''objet r\u00e9f\u00e9renc\u00e9 par l''expression ''{0}'', ''{1}'', est plus courte que celle du bean g\u00e9r\u00e9 r\u00e9f\u00e9rant (''{2}'') ''{3}''.
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=LifecycleId d\u00e9j\u00e0 ajout\u00e9 pour l''id ''{0}''.
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=LifecycleId non d\u00e9tect\u00e9 pour l''id ''{0}''.
-com.sun.faces.MAXIMUM_EVENTS_REACHED=Nombre maximum d''\u00e9v\u00e9nements ''{0}'' atteint.
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=Impossible de d\u00e9finir la propri\u00e9t\u00e9 cible ''{0}'' dans le bean g\u00e9r\u00e9 ''{1}''. La propri\u00e9t\u00e9 doit accepter des instances de List ou Array.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est d\u00e9finie en tant que propri\u00e9t\u00e9 Map, mais le mutateur de la classe n''accepte pas d''instances de Map.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est d\u00e9finie en tant que propri\u00e9t\u00e9 Map, mais le m\u00e9canisme d''obtention de la classe ne renvoie pas d''instances de Map.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est d\u00e9finie en tant que propri\u00e9t\u00e9 list, mais le mutateur de la classe n''accepte pas d''instances de List ou d''Array.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est d\u00e9finie en tant que propri\u00e9t\u00e9 list, mais le m\u00e9canisme d''obtention de la classe ne renvoie pas d''instances de List ou d''Array.
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est d\u00e9finie en tant que propri\u00e9t\u00e9 list.  Le m\u00e9canisme d''obtention renvoie un type array, mais il n''y a pas de mutateur associ\u00e9. 
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=Impossible de d\u00e9finir la propri\u00e9t\u00e9 cible ''{0}'' dans le bean g\u00e9r\u00e9 ''{1}''. La propri\u00e9t\u00e9 cible a renvoy\u00e9 une valeur existante qui n''\u00e9tait pas une instance de List.
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Configuration incorrecte du bean g\u00e9r\u00e9 ''{0}''. Le bean g\u00e9r\u00e9 est configur\u00e9 en tant que List, mais tente \u00e9galement de d\u00e9finir des entr\u00e9es de mappage ou des propri\u00e9t\u00e9s g\u00e9r\u00e9es.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Configuration incorrecte du bean g\u00e9r\u00e9 ''{0}''. Le bean g\u00e9r\u00e9 est configur\u00e9 en tant que Map, mais tente \u00e9galement de d\u00e9finir des propri\u00e9t\u00e9s g\u00e9r\u00e9es.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Configuration incorrecte du bean g\u00e9r\u00e9 ''{0}''. Le bean g\u00e9r\u00e9 contient une propri\u00e9t\u00e9 g\u00e9r\u00e9e nomm\u00e9e ''{1}'' avec des entr\u00e9es de liste, mais a ill\u00e9galement d\u00e9fini une valeur et/ou des entr\u00e9es de mappage.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Configuration incorrecte du bean g\u00e9r\u00e9 ''{0}''. Le bean g\u00e9r\u00e9 contient une propri\u00e9t\u00e9 g\u00e9r\u00e9e nomm\u00e9e ''{1}'' avec des entr\u00e9es de mappage, mais il a aussi ill\u00e9galement d\u00e9fini une valeur.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Configuration incorrecte du bean g\u00e9r\u00e9 ''{0}''. Le bean g\u00e9r\u00e9 contient une propri\u00e9t\u00e9 nomm\u00e9e ''{1}'' sans entr\u00e9es de liste ou de mappage ni \u00e9l\u00e9ments de valeur.
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=Erreur lors de la conversion de la valeur ''{0}'' du bean g\u00e9r\u00e9 ''{3}'' du type ''{1}'' vers le type ''{2}''.
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=La classe de bean ou de propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est introuvable.
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=La classe de bean ou de propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' ne peut pas \u00eatre charg\u00e9e \u00e0 cause de l''absence de la d\u00e9pendance {2}.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=La classe de bean g\u00e9r\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' n''est pas d\u00e9clar\u00e9e publique.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=La classe de bean g\u00e9r\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est d\u00e9clar\u00e9e abstraite ou en tant qu''interface.
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=La classe de bean g\u00e9r\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' ne d\u00e9clare pas de constructeur public sans argument.
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=Erreur lors de l''injection de ressources dans le bean g\u00e9r\u00e9 ''{0}''
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' est d\u00e9finie avec une classe de propri\u00e9t\u00e9 de ''{2}'', mais cette classe ne peut pas \u00eatre affect\u00e9e \u00e0 la propri\u00e9t\u00e9.
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=Introspection du bean g\u00e9r\u00e9 ''{0}'' impossible
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' n''existe pas.
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' n''a pas de mutateur. 
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=La propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}'' accepte plusieurs arguments.
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=Impossible de d\u00e9finir la propri\u00e9t\u00e9 ''{0}'' du bean g\u00e9r\u00e9 ''{1}''.
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=Impossible de cr\u00e9er le bean g\u00e9r\u00e9 ''{0}''.  Les probl\u00e8mes suivants ont \u00e9t\u00e9 d\u00e9tect\u00e9s\u00a0:
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=JSF ne pourra pas cr\u00e9\u00e9 le bean g\u00e9r\u00e9 ''{0}'' lorsqu''il sera demand\u00e9.  Les probl\u00e8mes suivants ont \u00e9t\u00e9 d\u00e9tect\u00e9s\u00a0:
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=Erreur inattendue lors du traitement du bean g\u00e9r\u00e9 ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=Erreur inattendue lors du traitement de la propri\u00e9t\u00e9 g\u00e9r\u00e9e ''{0}''
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=L''\u00e9tendue ''{0}'' ne repr\u00e9sente ni ''''view'''', ''''request'''', ''''session'''', ''''application'''', ni une ValueExpression (#{...}).
-com.sun.faces.MISSING_CLASS_ERROR=Classe manquante\u00a0: impossible de charger la classe ''{0}''.
-com.sun.faces.MISSING_RESOURCE_ERROR=Ressource manquante\u00a0: impossible d''obtenir le ResourceBundle. 
-com.sun.faces.MODELUPDATE_ERROR=Echec de la mise \u00e0 jour du mod\u00e8le pour la valeur ''{0}'' du mod\u00e8le ''{1}''.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=Impossible de trouver un cas de navigation correspondant depuis l''ID de vue ''{0}'' pour le r\u00e9sultat ''{1}''
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=Impossible de trouver un cas de navigation correspondant depuis l''ID de vue ''{0}'' pour l''action ''{1}'' avec le r\u00e9sultat ''{2}''.
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=Cha\u00eene de requ\u00eate non valide dans le r\u00e9sultat ''{0}''
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=Erreur d''expression : objet nomm\u00e9 ''{0}'' non d\u00e9tect\u00e9
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=Non imbriqu\u00e9 dans une erreur UIComponentTag pour la balise avec classe de gestionnaire ''{0}''.
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR=La balise {0} doit \u00eatre imbriqu\u00e9e dans une balise associ\u00e9e \u00e0 un composant du type {1}.
-com.sun.faces.NO_DTD_FOUND_ERROR=Impossible de localiser un fichier DTD avec PUBLIC ID ''{0}'' \u00e0 l''adresse ''{1}''.
-com.sun.faces.NULL_BODY_CONTENT_ERROR=BodyContent est null pour la balise avec classe de gestionnaire ''{0}''.
-com.sun.faces.NULL_COMPONENT_ERROR=Erreur de construction : l''argument du composant est null.
-com.sun.faces.NULL_CONFIGURATION=Aucune configuration charg\u00e9e pour l''application
-com.sun.faces.NULL_CONTEXT_ERROR=Erreur d''argument : l''argument du contexte est null.
-com.sun.faces.NULL_EVENT_ERROR=Erreur d''argument : l''argument de l''\u00e9v\u00e9nement est null.
-com.sun.faces.NULL_FORVALUE=Composant "{0}" non d\u00e9tect\u00e9
-com.sun.faces.NULL_HANDLER_ERROR=Erreur d''argument : l''argument de Handler est null.
-com.sun.faces.NULL_LOCALE_ERROR=Erreur d''argument : l''argument de Locale est null.
-com.sun.faces.NULL_MESSAGE_ERROR=Erreur d''argument : le param\u00e8tre Message ne peut pas \u00eatre null.
-com.sun.faces.NULL_PARAMETERS_ERROR=Erreur d''argument : le param\u00e8tre ''{0}'' est null.
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=Erreur d''argument : l''argument Request View est null.
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=Erreur d''argument : l''argument ResponseStream est null.
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=Erreur d''argument : l''argument ResponseView est null.
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=Erreur d''argument : l''argument ResponseWriter est null.
-com.sun.faces.OBJECT_CREATION_ERROR=Un ou plusieurs objets d''application configur\u00e9s n''ont pas pu \u00eatre cr\u00e9\u00e9s.  V\u00e9rifiez les journaux de votre application Web pour plus de d\u00e9tails.
-com.sun.faces.OPTION_NOT_SELECT_ITEM=Erreur d''argument : une option du composant ''{0}'' n''\u00e9tait pas une instance de javax.faces.model.SelectItem.  Type d\u00e9tect\u00e9\u00a0: ''{1}''.
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: ce bouton est d\u00e9sactiv\u00e9 car un cas de navigation n''a pas eu de correspondance.
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: ce lien est d\u00e9sactiv\u00e9 car un cas de navigation n''a pas eu de correspondance.
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId hors limites pour l''id ''{0}''.
-com.sun.faces.RENDERER_NOT_FOUND=Renderer non d\u00e9tect\u00e9 pour le type de Renderer ''{0}''.
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=Erreur d''\u00e9tat : RequestView a d\u00e9j\u00e0 \u00e9t\u00e9 d\u00e9fini pour cette requ\u00eate.
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=""Format de ressource non valide.  La propri\u00e9t\u00e9 ''{0}'' ne peut pas \u00eatre analys\u00e9e."
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=Format de ressource non valide.  La propri\u00e9t\u00e9 ''{0}'' contient plusieurs caract\u00e8res deux-points (:).
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=Format de ressource non valide.  La propri\u00e9t\u00e9 ''{0}'' ne peut pas \u00eatre analys\u00e9e pour extraire le nom de la ressource et le nom de la biblioth\u00e8que."
-com.sun.faces.SAVING_STATE_ERROR=Erreur lors de l''enregistrement de l''\u00e9tat.
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=Erreur d''argument : ''{0}'' n''est pas pris en charge pour ce renderer.
-com.sun.faces.TYPECONVERSION_ERROR=Erreur de conversion lors de la d\u00e9finition de la valeur ''{0}'' pour ''{1}''. 
-com.sun.faces.VALIDATION_COMMAND_ERROR=Erreur de validation ''{0}'' doit avoir une valeur ou un attribut d''image.
-com.sun.faces.VALIDATION_EL_ERROR=Erreur de validation Expression non valide pour ''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=Erreur de validation Les balises JSF suivantes doivent contenir des ID : ''{0}''
-com.sun.faces.CANNOT_CONVERT=Impossible de r\u00e9soudre une instance de Converter \u00e0 l''aide de converterId ''{0}'' ou de binding ''{1}''.
-com.sun.faces.CANNOT_VALIDATE=Impossible de r\u00e9soudre une instance de Validator \u00e0 l''aide de validatorId ''{0}'' ou de binding ''{1}''.
-com.sun.faces.verifier.CLASS_NOT_FOUND=La classe [{0}:{1}] n''existe pas.
-com.sun.faces.verifier.CLASS_MISSING_DEP=Impossible de charger la classe [{0}:{1}] en l''absence de la d\u00e9pendance -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=La classe [{0}:{1}] contient un constructeur sans argument, mais n''est pas publique.
-com.sun.faces.verifier.NO_DEF_CTOR=La classe [{0}:{1}] ne contient pas de constructeur public sans argument.
-com.sun.faces.verifier.WRONG_TYPE=La classe [{0}:{1}] n''impl\u00e9mente pas ni n''\u00e9tend {2}.
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=Le bean g\u00e9r\u00e9 ''{0}'' contient des r\u00e9f\u00e9rences cycliques.  Chemin d''\u00e9valuation : ''{1}''.
-com.sun.faces.OBJECT_IS_READONLY=L''objet {0} est en lecture seule.
-com.sun.faces.INCORRECT_JSP_VERSION=Il semble que la version JSP du conteneur soit ant\u00e9rieure \u00e0 2.1 et soit donc incapable de localiser la fabrique d''expressions EL RI, ''{0}''.  Si vous n''utilisez ni JSP ni la fabrique EL RI, assurez-vous que le param\u00e8tre d''initialisation du contexte, ''{1}'', soit d\u00e9fini correctement.
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=Index {1} hors limites pour {0}
-com.sun.faces.PROPERTY_TYPE_ERROR={0} n''est pas de type Array ou List.
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=Index {1} hors limites pour {0} avec une longueur de {2}
-com.sun.faces.RESTORE_VIEW_ERROR=La vue ''{0}'' n''a pas pu \u00eatre restaur\u00e9e.
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=Impossible d''\u00e9crire l''attribut d''ID ''{0}''.
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=Non imbriqu\u00e9 dans un UIComponentTag.
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=Aucun composant n''est associ\u00e9 \u00e0 UIComponentTag.
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=Impossible d''\u00e9crire le fichier JavaScript sur le client.
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=Une ou plusieurs ressources partagent la cible ''{0}'', mais aucun composant ''{0}'' n''a \u00e9t\u00e9 d\u00e9fini dans la vue.
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_ja.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_ja.properties
deleted file mode 100644
index 441d50d..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_ja.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=ApplicationAssociate \u306f\u3001ConfigureListener.contextInitialized() \u3068\u540c\u3058\u547c\u3073\u51fa\u3057\u30b9\u30bf\u30c3\u30af\u3067\u547c\u3073\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=ApplicationAssociate \u306f\u3001\u3059\u3067\u306b\u3053\u306e Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002
-com.sun.faces.ASSERTION_FAILED=\u8868\u660e\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=\u5c5e\u6027 ''{0}'' \u306f\u3001\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30bf\u30a4\u30d7 ''{1}'' \u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093\u3002
-com.sun.faces.CANT_CONVERT_VALUE=\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u3092\u5024\u30bf\u30a4\u30d7 ''{1}'' \u306b\u5909\u63db\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=\u5165\u529b\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=ID ''{0}'' \u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.CANT_INSTANTIATE_CLASS=\u30af\u30e9\u30b9 ''{0}'' \u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.CANT_INTROSPECT_CLASS=\u30af\u30e9\u30b9\u3092\u30a4\u30f3\u30c8\u30ed\u30b9\u30da\u30af\u30c8\u3067\u304d\u307e\u305b\u3093: ''{0}''
-com.sun.faces.CANT_PARSE_FILE=\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093: ''{0}'': \u884c {1}\u3001\u5217 {2} \u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {3}\u3002
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30bf\u30a4\u30d7 ''{1}({2})'' \u306b\u5bfe\u3057\u3066\u3001\u4e88\u671f\u3055\u308c\u308b\u5b50\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30bf\u30a4\u30d7\u306f ''{0}'' \u3067\u3059\u3002''{3}'' \u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: \u3053\u306e\u30ea\u30f3\u30af\u306f\u7121\u52b9\u3067\u3059\u3002JSF \u30d5\u30a9\u30fc\u30e0\u5185\u3067\u5165\u308c\u5b50\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=UIForm \u5185\u3067\u5165\u308c\u5b50\u306b\u306a\u3063\u3066\u3044\u306a\u3044\u30d3\u30e5\u30fc\u5185\u306b\u30011 \u3064\u4ee5\u4e0a\u306e UICommand \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u30b3\u30de\u30f3\u30c9\u306b\u95a2\u9023\u3059\u308b\u30a2\u30af\u30b7\u30e7\u30f3\u306f\u547c\u3073\u51fa\u3055\u308c\u307e\u305b\u3093\u3002
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=\u8b58\u5225\u5b50 ''{0}'' \u306b\u5bfe\u3059\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=ID ''{0}'' \u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u30d3\u30e5\u30fc\u306b\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.CONTENT_TYPE_ERROR=\u8a8d\u8b58\u3067\u304d\u306a\u3044\u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30a4\u30d7\u3067\u3059\u3002
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=ID {0} \u3092\u4f7f\u7528\u3057\u3066 RenderKit \u3067\u30ec\u30f3\u30c0\u30e9\u3092\u767b\u9332\u3067\u304d\u307e\u305b\u3093\u3002RenderKit \u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 ID ''{0}'' \u306f\u3059\u3067\u306b\u30d3\u30e5\u30fc\u306b\u3042\u308a\u307e\u3059\u3002
-com.sun.faces.EMPTY_PARAMETER=\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u7a7a\u3067\u3059
-com.sun.faces.ENCODING_ERROR=\u8a8d\u8b58\u3067\u304d\u306a\u3044\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3067\u3059\u3002
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=\u5024 ''{0}'' \u306e ValueBinding \u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=\u5024\u30d0\u30a4\u30f3\u30c9\u5f0f ''{0}'' \u304b\u3089\u5024\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.ERROR_OPENING_FILE=\u69cb\u6210\u30d5\u30a1\u30a4\u30eb ''{0}'' \u3092\u958b\u3051\u307e\u305b\u3093\u3002
-com.sun.faces.ERROR_PROCESSING_CONFIG=\u69cb\u6210\u306e\u51e6\u7406\u4e2d\u306b\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 
-com.sun.faces.ERROR_REGISTERING_DTD=DTD ''{0}'' \u3092\u767b\u9332\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=\u7ba1\u7406\u5bfe\u8c61 Bean \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u3092\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=\u5c5e\u6027 ''{0}'' \u306b\u5bfe\u3059\u308b\u5f0f\u306e\u8a55\u4fa1\u7d50\u679c\u304c\u3001\u4e88\u671f\u3057\u306a\u3044\u30bf\u30a4\u30d7\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u4e88\u60f3\u3057\u3066\u3044\u305f\u30bf\u30a4\u30d7\u306f {1} \u3067\u3059\u304c\u3001\u53d7\u3051\u53d6\u3063\u305f\u30bf\u30a4\u30d7\u306f {2} \u3067\u3059\u3002
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=\u69cb\u7bc9\u30a8\u30e9\u30fc: 1 \u3064\u307e\u305f\u306f\u8907\u6570\u306e\u5165\u529b\u30d1\u30e9\u30e1\u30fc\u30bf\u304c null \u3067\u3059\u3002
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u30d1\u30b9 ''{0}'' \u306e FaceServlet \u30de\u30c3\u30d4\u30f3\u30b0\u3092\u5224\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=FacesServlet \u306b\u3001'/*' \u306e url-pattern \u306f\u6307\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002\u5225\u306e url-pattern \u3092\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=\u3053\u306e\u8981\u6c42\u3092\u51e6\u7406\u3067\u304d\u308b FacesContext \u304c\u3042\u308a\u307e\u305b\u3093\u3002\u591a\u304f\u306e\u5834\u5408\u3001\u8981\u6c42\u304c\u9593\u9055\u3063\u305f\u30d1\u30b9\u306b\u9001\u4fe1\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u539f\u56e0\u3067\u3059\u3002
-com.sun.faces.FILE_NOT_FOUND=\u30d5\u30a1\u30a4\u30eb ''{0}'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=\u5fdc\u7b54\u304c\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u3042\u3068\u3001\u4e0d\u6b63\u306b {0} \u3092\u8a2d\u5b9a\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=\u6587\u5b57\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=lValue \u30e2\u30fc\u30c9\u3067\u6697\u9ed9\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u8b58\u5225\u5b50\u304c\u4e0d\u6b63\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059: ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=\u5f0f ''{0}'' \u306b\u3001\u3053\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3067\u306f\u4e0d\u6b63\u306a\u30e2\u30c7\u30eb\u53c2\u7167\u304c\u3042\u308a\u307e\u3059\u3002
-com.sun.faces.ILLEGAL_VIEW_ID=\u30d3\u30e5\u30fc ID ''{0}'' \u304c\u4e0d\u6b63\u3067\u3059\u3002ID \u306f "/" \u3067\u59cb\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059
-com.sun.faces.INVALID_EXPRESSION=\u5f0f ''{0}'' \u304c\u7121\u52b9\u3067\u3059\u3002
-com.sun.faces.INVALID_INIT_PARAM=\u521d\u671f\u5316\u30d1\u30e9\u30e1\u30fc\u30bf ''{1}'' \u306b\u5bfe\u3057\u3066\u3001\u7121\u52b9\u306a\u5024 ''{0}' \u3067\u3059\u3002\u6307\u5b9a\u3067\u304d\u308b\u5024\u306f 'true' \u307e\u305f\u306f 'false' \u3067\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e 'false' \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=\u69cb\u6210\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u91cd\u8981\u5ea6 ''{0}'' \u304c\u4e0d\u6b63\u3067\u3059\u3002
-com.sun.faces.INVALID_SCOPE_LIFESPAN=\u5f0f ''{0}'' \u3067\u53c2\u7167\u3055\u308c\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30b9\u30b3\u30fc\u30d7 ''{1}'' \u306f\u3001\u53c2\u7167\u5143\u306e\u7ba1\u7406\u5bfe\u8c61 Bean (''{2}'') \u306e\u30b9\u30b3\u30fc\u30d7 ''{3}'' \u3088\u308a\u5c0f\u3055\u304f\u306a\u3063\u3066\u3044\u307e\u3059
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=ID ''{0}'' \u306b\u306f LifecycleId \u304c\u3059\u3067\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=ID ''{0}'' \u306b LifecycleId \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-com.sun.faces.MAXIMUM_EVENTS_REACHED=\u30a4\u30d9\u30f3\u30c8\u306e\u6700\u5927\u6570 ''{0}'' \u306b\u9054\u3057\u307e\u3057\u305f\u3002
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u3092\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u306b\u306f List \u307e\u305f\u306f Array \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306f\u3001\u30de\u30c3\u30d7\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u304c\u3001\u30af\u30e9\u30b9\u306e\u8a2d\u5b9a\u30e1\u30bd\u30c3\u30c9\u306f Map \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u53d7\u3051\u4ed8\u3051\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306f\u3001\u30de\u30c3\u30d7\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u304c\u3001\u30af\u30e9\u30b9\u306e\u53d6\u5f97\u30e1\u30bd\u30c3\u30c9\u306f Map \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306f\u3001\u30ea\u30b9\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u304c\u3001\u30af\u30e9\u30b9\u306e\u8a2d\u5b9a\u30e1\u30bd\u30c3\u30c9\u306f List \u307e\u305f\u306f Array \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u53d7\u3051\u4ed8\u3051\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306f\u3001\u30ea\u30b9\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u304c\u3001\u30af\u30e9\u30b9\u306e\u53d6\u5f97\u30e1\u30bd\u30c3\u30c9\u306f List \u307e\u305f\u306f Array \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306f\u3001\u30ea\u30b9\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u53d6\u5f97\u30e1\u30bd\u30c3\u30c9\u306f\u914d\u5217\u30bf\u30a4\u30d7\u3092\u8fd4\u3057\u307e\u3059\u304c\u3001\u95a2\u9023\u3059\u308b\u8a2d\u5b9a\u30e1\u30bd\u30c3\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u3092\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002\u30bf\u30fc\u30b2\u30c3\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u306f\u3001List \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u306f\u306a\u3044\u65e2\u5b58\u306e\u5024\u3092\u8fd4\u3057\u307e\u3057\u305f\u3002
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306e\u69cb\u6210\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u7ba1\u7406\u5bfe\u8c61 Bean \u306f List \u3068\u3057\u3066\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u30de\u30c3\u30d7\u30a8\u30f3\u30c8\u30ea\u307e\u305f\u306f\u7ba1\u7406\u5bfe\u8c61\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3082\u5b9a\u7fa9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306e\u69cb\u6210\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u7ba1\u7406\u5bfe\u8c61 Bean \u306f Map \u3068\u3057\u3066\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u7ba1\u7406\u5bfe\u8c61\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u3082\u5b9a\u7fa9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306e\u69cb\u6210\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u7ba1\u7406\u5bfe\u8c61 Bean \u306b\u3001\u30ea\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u3092\u6301\u3064 ''{1}'' \u3068\u3044\u3046\u540d\u524d\u306e\u7ba1\u7406\u5bfe\u8c61\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u5024\u307e\u305f\u306f\u30de\u30c3\u30d7\u30a8\u30f3\ [...]
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306e\u69cb\u6210\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u7ba1\u7406\u5bfe\u8c61 Bean \u306b\u3001\u30de\u30c3\u30d7\u30a8\u30f3\u30c8\u30ea\u3092\u6301\u3064 ''{1}'' \u3068\u3044\u3046\u540d\u524d\u306e\u7ba1\u7406\u5bfe\u8c61\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u6b63\u3057\u304f\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u [...]
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306e\u69cb\u6210\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u7ba1\u7406\u5bfe\u8c61 Bean \u306b\u3001\u30ea\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u3001\u30de\u30c3\u30d7\u30a8\u30f3\u30c8\u30ea\u3001\u304a\u3088\u3073\u5024\u8981\u7d20\u306e\u3044\u305a\u308c\u3082\u542b\u307e\u306a\u3044\u3001''{1}'' \u3068\u3044\u3046\u540d\u524d\u306e\u7ba1\u7406\u5bfe\u8c61\u30d7\u30ed\u30d1\u30c6\ [...]
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=\u30bf\u30a4\u30d7 ''{1}'' \u306e\u5024 ''{0}'' \u3092\u7ba1\u7406\u5bfe\u8c61 Bean ''{3}'' \u306e\u30bf\u30a4\u30d7 ''{2}'' \u306b\u5909\u63db\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e Bean \u307e\u305f\u306f\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u30af\u30e9\u30b9 ''{0}'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e Bean \u307e\u305f\u306f\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u30af\u30e9\u30b9 ''{0}'' \u306f\u3001\u4f9d\u5b58\u95a2\u4fc2 {2} \u304c\u306a\u3044\u305f\u3081\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u7ba1\u7406\u5bfe\u8c61 Bean \u30af\u30e9\u30b9 ''{0}'' \u306f\u3001public \u3067\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u7ba1\u7406\u5bfe\u8c61 Bean \u30af\u30e9\u30b9 ''{0}'' \u306f\u3001abstract \u307e\u305f\u306f interface \u3068\u3057\u3066\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u7ba1\u7406\u5bfe\u8c61 Bean \u30af\u30e9\u30b9 ''{0}'' \u306f\u3001public \u3067\u5f15\u6570\u306e\u306a\u3044\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u5ba3\u8a00\u3057\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u3067\u30ea\u30bd\u30fc\u30b9\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306f\u3001''{2}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u30af\u30e9\u30b9\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u306e\u30af\u30e9\u30b9\u306f\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u3092\u30a4\u30f3\u30c8\u30ed\u30b9\u30da\u30af\u30c8\u3067\u304d\u307e\u305b\u3093
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306b\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306b\u8a2d\u5b9a\u30e1\u30bd\u30c3\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306f\u3001\u8907\u6570\u306e\u5f15\u6570\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{1}'' \u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u3092\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u6b21\u306e\u554f\u984c\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=JSF \u306f\u3001\u8981\u6c42\u3055\u308c\u305f\u3068\u304d\u306b\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u6b21\u306e\u554f\u984c\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306e\u51e6\u7406\u4e2d\u306b\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=\u7ba1\u7406\u5bfe\u8c61\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306e\u51e6\u7406\u4e2d\u306b\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=\u30b9\u30b3\u30fc\u30d7 ''{0}'' \u304c ''\u30d3\u30e5\u30fc''\u3001''\u8981\u6c42''\u3001''\u30bb\u30c3\u30b7\u30e7\u30f3''\u3001''\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3'' \u306e\u3044\u305a\u308c\u3067\u3082\u306a\u304f\u3001ValueExpression (#{...}) \u3082\u8868\u3057\u3066\u3044\u307e\u305b\u3093
-com.sun.faces.MISSING_CLASS_ERROR=\u30af\u30e9\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: \u30af\u30e9\u30b9 ''{0}'' \u3092\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.MISSING_RESOURCE_ERROR=\u30ea\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: ResourceBundle \u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.MODELUPDATE_ERROR=\u30e2\u30c7\u30eb ''{1}'' \u306e\u5024 ''{0}'' \u3067\u30e2\u30c7\u30eb\u66f4\u65b0\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=\u7d50\u679c ''{1}'' \u306e\u30d3\u30e5\u30fc ID ''{0}'' \u304b\u3089\u3001\u4e00\u81f4\u3059\u308b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30b1\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=\u7d50\u679c ''{2}'' \u306e\u30a2\u30af\u30b7\u30e7\u30f3 ''{1}'' \u306e\u30d3\u30e5\u30fc ID ''{0}'' \u304b\u3089\u3001\u4e00\u81f4\u3059\u308b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30b1\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=\u7d50\u679c ''{0}'' \u306b\u7121\u52b9\u306a\u30af\u30a8\u30ea\u30fc\u6587\u5b57\u5217\u304c\u3042\u308a\u307e\u3059
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=\u5f0f\u30a8\u30e9\u30fc: \u540d\u524d\u4ed8\u304d\u30aa\u30d6\u30b8\u30a7\u30af\u30c8: ''{0}'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=\u30cf\u30f3\u30c9\u30e9\u30af\u30e9\u30b9\u3092\u6301\u3064\u30bf\u30b0 ''{0}'' \u3067\u3001UIComponentTag \u3067\u5165\u308c\u5b50\u306b\u306a\u3063\u3066\u3044\u306a\u3044\u30a8\u30e9\u30fc\u3067\u3059\u3002
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR={0} \u30bf\u30b0\u306f\u3001\u30bf\u30a4\u30d7 {1} \u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30bf\u30b0\u5185\u3067\u5165\u308c\u5b50\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-com.sun.faces.NO_DTD_FOUND_ERROR=\u30d1\u30b9 ''{1}'' \u306b PUBLIC ID ''{0}'' \u306e DTD \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.NULL_BODY_CONTENT_ERROR=\u30cf\u30f3\u30c9\u30e9\u30af\u30e9\u30b9\u3092\u6301\u3064\u30bf\u30b0 ''{0}'' \u3067 BodyContent \u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_COMPONENT_ERROR=\u69cb\u7bc9\u30a8\u30e9\u30fc: Component \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_CONFIGURATION=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u6210\u306f\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.NULL_CONTEXT_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: Context \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_EVENT_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: Event \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_FORVALUE=\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 "{0}" \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
-com.sun.faces.NULL_HANDLER_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: Handler \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_LOCALE_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: Locale \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_MESSAGE_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: Message \u30d1\u30e9\u30e1\u30fc\u30bf\u306f null \u306b\u3067\u304d\u307e\u305b\u3093
-com.sun.faces.NULL_PARAMETERS_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: \u30d1\u30e9\u30e1\u30fc\u30bf ''{0}'' \u304c null \u3067\u3059
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: Request View \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: ResponseStream \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: ResponseView \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: ResponseWriter \u5f15\u6570\u304c null \u3067\u3059\u3002
-com.sun.faces.OBJECT_CREATION_ERROR=1 \u3064\u4ee5\u4e0a\u306e\u69cb\u6210\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u8a73\u7d30\u306f\u3001Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-com.sun.faces.OPTION_NOT_SELECT_ITEM=\u5f15\u6570\u30a8\u30e9\u30fc: \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 ''{0}'' \u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3001javax.faces.model.SelectItem \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u898b\u3064\u304b\u3063\u305f\u30bf\u30a4\u30d7: ''{1}''\u3002
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: \u4e00\u81f4\u3059\u308b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30b1\u30fc\u30b9\u304c\u306a\u3044\u305f\u3081\u3001\u3053\u306e\u30dc\u30bf\u30f3\u306f\u7121\u52b9\u3067\u3059\u3002
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: \u4e00\u81f4\u3059\u308b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30b1\u30fc\u30b9\u304c\u306a\u3044\u305f\u3081\u3001\u3053\u306e\u30ea\u30f3\u30af\u306f\u7121\u52b9\u3067\u3059\u3002
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=ID ''{0}'' \u306b\u5bfe\u3057\u3066 PhaseId \u304c\u7bc4\u56f2\u5916\u3067\u3059\u3002
-com.sun.faces.RENDERER_NOT_FOUND=\u30ec\u30f3\u30c0\u30e9\u30bf\u30a4\u30d7 ''{0}'' \u306e\u30ec\u30f3\u30c0\u30e9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=\u72b6\u614b\u30a8\u30e9\u30fc: RequestView \u306f\u3001\u3053\u306e\u8981\u6c42\u306b\u5bfe\u3057\u3066\u3059\u3067\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=\u7121\u52b9\u306a\u30ea\u30bd\u30fc\u30b9\u5f62\u5f0f\u3067\u3059\u3002\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=\u7121\u52b9\u306a\u30ea\u30bd\u30fc\u30b9\u5f62\u5f0f\u3067\u3059\u3002\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u306b\u8907\u6570\u306e\u30b3\u30ed\u30f3 (:) \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=\u7121\u52b9\u306a\u30ea\u30bd\u30fc\u30b9\u5f62\u5f0f\u3067\u3059\u3002\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc ''{0}'' \u3092\u89e3\u6790\u3057\u3066\u3001\u30ea\u30bd\u30fc\u30b9\u540d\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u540d\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.SAVING_STATE_ERROR=\u72b6\u614b\u306e\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=\u5f15\u6570\u30a8\u30e9\u30fc: ''\u3053\u306e\u30ec\u30f3\u30c0\u30e9\u3067\u306f {0}'' \u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.TYPECONVERSION_ERROR=''{1}'' \u306e\u5024 ''{0}'' \u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u3001\u5909\u63db\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 
-com.sun.faces.VALIDATION_COMMAND_ERROR=\u691c\u8a3c\u30a8\u30e9\u30fc\u3067\u3059\u3002''{0}'' \u306b\u306f\u3001value \u307e\u305f\u306f image \u5c5e\u6027\u304c\u5fc5\u8981\u3067\u3059\u3002
-com.sun.faces.VALIDATION_EL_ERROR=\u691c\u8a3c\u30a8\u30e9\u30fc\u3067\u3059\u3002\u5f0f\u304c\u7121\u52b9\u3067\u3059: ''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=\u691c\u8a3c\u30a8\u30e9\u30fc\u3067\u3059\u3002ID \u3092\u542b\u3081\u308b\u306b\u306f\u6b21\u306e JSF \u30bf\u30b0\u304c\u5fc5\u8981\u3067\u3059: ''{0}''
-com.sun.faces.CANNOT_CONVERT=converterId ''{0}'' \u307e\u305f\u306f\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0 ''{1}'' \u3092\u4f7f\u7528\u3057\u3066 Converter \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u89e3\u6c7a\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.CANNOT_VALIDATE=validatorId ''{0}'' \u307e\u305f\u306f\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0 ''{1}'' \u3092\u4f7f\u7528\u3057\u3066 Validator \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u89e3\u6c7a\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] \u30af\u30e9\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] \u4f9d\u5b58\u95a2\u4fc2\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u305f\u3081\u3001\u30af\u30e9\u30b9\u3092\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] \u30af\u30e9\u30b9\u306b\u5f15\u6570\u306a\u3057\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u304c\u3001public \u3067\u306f\u3042\u308a\u307e\u305b\u3093
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] \u30af\u30e9\u30b9\u306b public \u3067\u5f15\u6570\u306a\u3057\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] \u30af\u30e9\u30b9\u306f {2} \u3092\u5b9f\u88c5\u307e\u305f\u306f\u62e1\u5f35\u3057\u307e\u305b\u3093
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=\u7ba1\u7406\u5bfe\u8c61 Bean ''{0}'' \u306b\u5faa\u74b0\u53c2\u7167\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u8a55\u4fa1\u30d1\u30b9: ''{1}''\u3002
-com.sun.faces.OBJECT_IS_READONLY={0} \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3067\u3059
-com.sun.faces.INCORRECT_JSP_VERSION=\u30b3\u30f3\u30c6\u30ca\u306e JSP \u30d0\u30fc\u30b8\u30e7\u30f3\u304c 2.1 \u3088\u308a\u53e4\u304f\u3001EL RI \u5f0f\u30d5\u30a1\u30af\u30c8\u30ea ''{0}'' \u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3002JSP \u307e\u305f\u306f EL RI \u3092\u4f7f\u7528\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u521d\u671f\u5316\u30d1\u30e9\u30e1\u30fc\u30bf ''{1}'' \u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u3 [...]
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR={0} \u306b\u5bfe\u3057\u3066\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 {1} \u304c\u7bc4\u56f2\u5916\u3067\u3059
-com.sun.faces.PROPERTY_TYPE_ERROR={0} \u304c Array \u307e\u305f\u306f List \u30bf\u30a4\u30d7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=\u9577\u3055 {2} \u306e {0} \u306b\u5bfe\u3057\u3066\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 {1} \u304c\u7bc4\u56f2\u5916\u3067\u3059
-com.sun.faces.RESTORE_VIEW_ERROR=\u30d3\u30e5\u30fc ''{0}'' \u3092\u5fa9\u5143\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=ID \u5c5e\u6027 ''{0}'' \u3092\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=UIComponentTag \u3067\u5165\u308c\u5b50\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=UIComponentTag \u306b\u95a2\u9023\u3059\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\u3002
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=JavaScript \u30d5\u30a1\u30a4\u30eb\u3092\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=1 \u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30ea\u30bd\u30fc\u30b9\u306b ''{0}'' \u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\u304c\u3001''{0}'' \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u30d3\u30e5\u30fc\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_ko.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_ko.properties
deleted file mode 100644
index 0a1a48f..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_ko.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=ApplicationAssociate ctor\uc774 ConfigureListener.contextInitialized()\uc640 \ub3d9\uc77c\ud55c \ud638\ucd9c \uc2a4\ud0dd\uc5d0\uc11c \ud638\ucd9c\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=\uc774 webapp\uc5d0 \ub300\ud55c ApplicationAssociate\uac00 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4.
-com.sun.faces.ASSERTION_FAILED=\uba85\uc81c \uc2e4\ud328
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=''{0}'' \uc18d\uc131\uc740 \uad6c\uc131 \uc694\uc18c \uc720\ud615 ''{1}''\uc5d0 \ub300\ud574 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.CANT_CONVERT_VALUE=''{0}'' \ub4f1\ub85d \uc815\ubcf4\ub97c \uac12 \uc720\ud615\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{1}''.
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=\uc785\ub825 \uc2a4\ud2b8\ub9bc\uc744 \ub2eb\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=\uc544\uc774\ub514\uc5d0 \ub300\ud55c \ub77c\uc774\ud504\uc0ac\uc774\ud074\uc744 \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.CANT_INSTANTIATE_CLASS=\ud074\ub798\uc2a4\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.CANT_INTROSPECT_CLASS=\ud074\ub798\uc2a4\ub97c \uac80\uc0ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''
-com.sun.faces.CANT_PARSE_FILE=\ud30c\uc77c\uc744 \uad6c\ubb38 \ubd84\uc11d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}'': {1} \ud589\uc758 {2} \uc5f4\uc5d0\uc11c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: {3}.
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=\uad6c\uc131 \uc694\uc18c \uc720\ud615 "{1}({2})"\uc5d0 \ub300\ud574 \uc790\uc2dd \uad6c\uc131 \uc694\uc18c \uc720\ud615 "{0}"\uc774(\uac00) \ud544\uc694\ud569\ub2c8\ub2e4.  "{3}"\uc774(\uac00) \uac80\uc0c9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: \uc774 \ub9c1\ud06c\ub294 JSF \ud615\uc2dd \ub0b4\uc5d0 \uc911\ucca9\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc544\uc11c \ube44\ud65c\uc131\ud654\ub429\ub2c8\ub2e4.
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=UIForm \ub0b4 \uc911\ucca9\ub418\uc9c0 \uc54a\uc740 \ud558\ub098 \uc774\uc0c1\uc758 UICommand \uc778\uc2a4\ud134\uc2a4\uac00 \ubcf4\uae30\uc5d0\uc11c \uac80\uc0c9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uc774\ub7ec\ud55c \uba85\ub839\uacfc \uc5f0\uacb0\ub41c \uc791\uc5c5\uc774 \ud638\ucd9c\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=\uc2dd\ubcc4\uc790\uc5d0 \ub300\ud55c \uad6c\uc131 \uc694\uc18c\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=\ubcf4\uae30\uc5d0\uc11c \uc544\uc774\ub514 ''{0}''\uc744(\ub97c) \uac00\uc9c0\ub294 \uad6c\uc131 \uc694\uc18c\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.CONTENT_TYPE_ERROR=\uc778\uc2dd\ud560 \uc218 \uc5c6\ub294 \ub0b4\uc6a9 \uc720\ud615\uc785\ub2c8\ub2e4.
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=\uc544\uc774\ub514 {0}\uc744(\ub97c) \uc0ac\uc6a9\ud558\uc5ec RenderKit\uc5d0 \ub80c\ub354\ub7ec\ub97c \ub4f1\ub85d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  RenderKit\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=\ubcf4\uae30\uc5d0 \uad6c\uc131 \uc694\uc18c \uc544\uc774\ub514 "{0}"\uc774(\uac00) \uc774\ubbf8 \uc788\uc2b5\ub2c8\ub2e4.
-com.sun.faces.EMPTY_PARAMETER=\ub9e4\uac1c \ubcc0\uc218\uac00 \ube44\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
-com.sun.faces.ENCODING_ERROR=\uc778\uc2dd\ud560 \uc218 \uc5c6\ub294 \ubb38\uc790 \uc778\ucf54\ub529\uc785\ub2c8\ub2e4.
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=\uac12\uc5d0 \ub300\ud55c ValueBinding\uc744 \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=\uac12 \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc5d0\uc11c \uac12\uc744 \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.ERROR_OPENING_FILE=\uad6c\uc131 \ud30c\uc77c\uc744 \uc5f4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.ERROR_PROCESSING_CONFIG=\uad6c\uc131 \ucc98\ub9ac \uc911 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. 
-com.sun.faces.ERROR_REGISTERING_DTD=DTD\ub97c \ub4f1\ub85d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=\uad00\ub9ac\ub418\ub294 Bean \ub4f1\ub85d \uc815\ubcf4\ub97c \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=''{0}'' \uc18d\uc131\uc758 \ud45c\ud604\uc2dd\uc744 \ud3c9\uac00\ud55c \uacb0\uacfc \uc608\uae30\uce58 \uc54a\uc740 \uc720\ud615\uc774 \ubc18\ud658\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  {1} \uc720\ud615\uc774 \ud544\uc694\ud558\uc9c0\ub9cc {2} \uc720\ud615\uc774 \uc218\uc2e0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=\uad6c\uc131 \uc624\ub958: \ud558\ub098 \uc774\uc0c1\uc758 \uc785\ub825 \ub9e4\uac1c \ubcc0\uc218\uac00 null\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=\uc11c\ube14\ub9bf \uacbd\ub85c ''{0}''\uc5d0 \ub300\ud55c FaceServlet \ub9e4\ud551\uc744 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=FacesServlet\uc5d0 '/*'\uc758 url-pattern\uc774 \uc788\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \ub2e4\ub978 url-pattern\uc744 \uc815\uc758\ud558\uc2ed\uc2dc\uc624.
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=\uc774 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 FacesContext\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc694\uccad\uc774 \uc798\ubabb\ub41c \uacbd\ub85c\ub85c \uc804\uc1a1\ub418\uc5c8\uae30 \ub54c\ubb38\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-com.sun.faces.FILE_NOT_FOUND=\ud30c\uc77c\uc5d0 \ub300\ud55c \ud30c\uc77c\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=\uc751\ub2f5\uc774 \ub80c\ub354\ub9c1\ub41c \ud6c4\uc5d0 {0}\uc744(\ub97c) \uc124\uc815\ud558\ub824\ub294 \uc798\ubabb\ub41c \uc2dc\ub3c4\uac00 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=\ud5c8\uc6a9\ub418\uc9c0 \uc54a\ub294 \ubb38\uc790\uc785\ub2c8\ub2e4.
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=lValue \ubaa8\ub4dc\uc5d0\uc11c \uc554\uc2dc\uc801 \uac1d\uccb4 \uc2dd\ubcc4\uc790\ub97c \uc798\ubabb \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4: ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=''{0}'' \ud45c\ud604\uc2dd\uc5d0 \ub300\ud55c \uc774 \ucee8\ud14d\uc2a4\ud2b8\uc5d0\uc11c \ubaa8\ub378 \ucc38\uc870\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.ILLEGAL_VIEW_ID=\ubcf4\uae30 \uc544\uc774\ub514 ''{0}''\uc774(\uac00) \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uc544\uc774\ub514\ub294 ''/''\ub85c \uc2dc\uc791\ud574\uc57c \ud569\ub2c8\ub2e4.
-com.sun.faces.INVALID_EXPRESSION=\uc798\ubabb\ub41c \ud45c\ud604\uc2dd\uc785\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.INVALID_INIT_PARAM=\ucd08\uae30\ud654 \ub9e4\uac1c \ubcc0\uc218 ''{1}''\uc758 \uac12\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4: ''{0}'.  \ud5c8\uc6a9 \uac00\ub2a5\ud55c \uac12\uc740 'true' \ub610\ub294 'false'\uc785\ub2c8\ub2e4.  \uae30\ubcf8\uac12\uc740 'false'\uc785\ub2c8\ub2e4.
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=\uc798\ubabb\ub41c \uba54\uc2dc\uc9c0 \uc2ec\uac01\ub3c4 ''{0}''\uc774(\uac00) \uad6c\uc131\uc5d0 \uc815\uc758\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.INVALID_SCOPE_LIFESPAN=\ud45c\ud604\uc2dd ''{0}''\uc5d0 \uc758\ud574 \ucc38\uc870\ub41c \uac1d\uccb4\uc758 \ubc94\uc704 ''{1}''\uc774(\uac00) \ucc38\uc870\ud558\ub294 \uad00\ub9ac\ub418\ub294 Bean(''{2}'')\uc758 \ubc94\uc704 ''{3}'' \ubcf4\ub2e4 \uc9e7\uc2b5\ub2c8\ub2e4.
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=\uc544\uc774\ub514\uc5d0 \ub300\ud574 LifecycleId\uac00 \uc774\ubbf8 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=\uc544\uc774\ub514 ''{0}''\uc5d0 \ub300\ud55c LifecycleId\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MAXIMUM_EVENTS_REACHED=\ucd5c\ub300 \uc774\ubca4\ud2b8 \uc218 ''{0}''\uc5d0 \ub3c4\ub2ec\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 \ub300\uc0c1 \ub4f1\ub85d \uc815\ubcf4 ''{0}''\uc744(\ub97c) \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub4f1\ub85d \uc815\ubcf4\ub294 \ubaa9\ub85d \ub610\ub294 \ubc30\uc5f4 \uc778\uc2a4\ud134\uc2a4\ub97c \ud5c8\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 \ub9f5 \ub4f1\ub85d \uc815\ubcf4\ub85c \uc815\uc758\ub418\uc5c8\uc9c0\ub9cc, \ud074\ub798\uc2a4\uc758 setter\uac00 \ub9f5 \uc778\uc2a4\ud134\uc2a4\ub97c \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 \ub9f5 \ub4f1\ub85d \uc815\ubcf4\ub85c \uc815\uc758\ub418\uc5c8\uc9c0\ub9cc, \ud074\ub798\uc2a4\uc758 getter\uac00 \ub9f5 \uc778\uc2a4\ud134\uc2a4\ub97c \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 \ubaa9\ub85d \ub4f1\ub85d \uc815\ubcf4\ub85c \uc815\uc758\ub418\uc5c8\uc9c0\ub9cc, \ud074\ub798\uc2a4\uc758 setter\uac00 \ubaa9\ub85d \ub610\ub294 \ubc30\uc5f4 \uc778\uc2a4\ud134\uc2a4\ub97c \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 \ubaa9\ub85d \ub4f1\ub85d \uc815\ubcf4\ub85c \uc815\uc758\ub418\uc5c8\uc9c0\ub9cc, \ud074\ub798\uc2a4\uc758 getter\uac00 \ubaa9\ub85d \ub610\ub294 \ubc30\uc5f4 \uc778\uc2a4\ud134\uc2a4\ub97c \ubc18\ud658\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 \ubaa9\ub85d \ub4f1\ub85d \uc815\ubcf4\ub85c \uc815\uc758\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  getter\uac00 \ubc30\uc5f4 \uc720\ud615\uc744 \ubc18\ud658\ud558\uc9c0\ub9cc, \uc5f0\uacb0\ub41c setter\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 \ub300\uc0c1 \ub4f1\ub85d \uc815\ubcf4 ''{0}''\uc744(\ub97c) \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \ub300\uc0c1 \ub4f1\ub85d \uc815\ubcf4\uac00 \ubaa9\ub85d\uc758 \uc778\uc2a4\ud134\uc2a4\uac00 \uc544\ub2cc \uae30\uc874 \uac12\uc744 \ubc18\ud658\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc5d0 \ub300\ud55c \uad6c\uc131\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uad00\ub9ac\ub418\ub294 Bean\uc774 \ubaa9\ub85d\uc73c\ub85c \uad6c\uc131\ub418\uc5c8\uc9c0\ub9cc \ub9f5 \ud56d\ubaa9 \ub610\ub294 \uad00\ub9ac\ub418\ub294 \ub4f1\ub85d \uc815\ubcf4\ub97c \uc815\uc758\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc5d0 \ub300\ud55c \uad6c\uc131\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uad00\ub9ac\ub418\ub294 Bean\uc774 \ub9f5\uc73c\ub85c \uad6c\uc131\ub418\uc5c8\uc9c0\ub9cc, \uad00\ub9ac\ub418\ub294 \ub4f1\ub85d \uc815\ubcf4\ub97c \uc815\uc758\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc5d0 \ub300\ud55c \uad6c\uc131\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uad00\ub9ac\ub418\ub294 Bean\uc5d0 \ubaa9\ub85d \ud56d\ubaa9\uc744 \ud3ec\ud568\ud558\ub294 ''{1}'' \uc774\ub984\uc758 \uad00\ub9ac\ub418\ub294 \ub4f1\ub85d \uc815\ubcf4\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0\ub9cc \uac12 \ubc0f/\ub610\ub294 \ub9f5 \ud56d\ubaa9\uc774 \uc798\ubabb \uc815\uc758\ub418\uc5c8\uc2b5 [...]
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc5d0 \ub300\ud55c \uad6c\uc131\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uad00\ub9ac\ub418\ub294 Bean\uc5d0 \ub9f5 \ud56d\ubaa9\uc744 \ud3ec\ud568\ud558\ub294 ''{1}'' \uc774\ub984\uc758 \uad00\ub9ac\ub418\ub294 \ub4f1\ub85d \uc815\ubcf4\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0\ub9cc \uac12\uc774 \uc798\ubabb \uc815\uc758\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc5d0 \ub300\ud55c \uad6c\uc131\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uad00\ub9ac\ub418\ub294 Bean\uc5d0 \ubaa9\ub85d \ub610\ub294 \ub9f5 \ud56d\ubaa9\uc774\ub098 \uac12 \uc694\uc18c\ub97c \ud3ec\ud568\ud558\uc9c0 \uc54a\ub294 ''{1}'' \uc774\ub984\uc758 \uad00\ub9ac\ub418\ub294 \ub4f1\ub85d \uc815\ubcf4\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{3}''\uc5d0 \ub300\ud574 ''{1}'' \uc720\ud615\uc758 \uac12 ''{0}''\uc744(\ub97c) ''{2}'' \uc720\ud615\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 \ub300\ud55c Bean \ub610\ub294 \ub4f1\ub85d \uc815\ubcf4 \ud074\ub798\uc2a4 ''{0}''\uc744(\ub97c) \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=\uc885\uc18d\uc131\uc774 \ub204\ub77d\ub418\uc5b4 \uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 \ub300\ud55c Bean \ub610\ub294 \ub4f1\ub85d \uc815\ubcf4 \ud074\ub798\uc2a4 ''{0}''\uc744(\ub97c) \ub85c\ub4dc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: {2}.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 \ub300\ud55c \uad00\ub9ac\ub418\ub294 Bean \ud074\ub798\uc2a4 ''{0}''\uc774(\uac00) \uacf5\uc6a9\uc73c\ub85c \uc120\uc5b8\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 \ub300\ud55c \uad00\ub9ac\ub418\ub294 Bean \ud074\ub798\uc2a4 ''{0}''\uc774(\uac00) \ucd94\uc0c1 \ub610\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub85c \uc120\uc5b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc5d0 \ub300\ud55c \uad00\ub9ac\ub418\ub294 Bean \ud074\ub798\uc2a4 ''{0}''\uc774(\uac00) \uacf5\uc6a9 no-argument \uad6c\uc131\uc790\ub97c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc5d0\uc11c \uc790\uc6d0 \uc0bd\uc785\uc744 \uc218\ud589\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc758 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 ''{2}''\uc758 \ub4f1\ub85d \uc815\ubcf4 \ud074\ub798\uc2a4\ub85c \uc815\uc758\ub418\uc5c8\uc9c0\ub9cc \uc774 \ud074\ub798\uc2a4\ub97c \ub4f1\ub85d \uc815\ubcf4\uc5d0 \ud560\ub2f9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc744(\ub97c) \uac80\uc0ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc758 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc758 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uc5d0 setter\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc758 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\uac00 \ub450 \uac1c \uc774\uc0c1\uc758 \uc778\uc218\ub97c \ud5c8\uc6a9\ud569\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{1}''\uc758 ''{0}'' \ub4f1\ub85d \uc815\ubcf4\ub97c \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. 
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc744(\ub97c) \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \ub2e4\uc74c \ubb38\uc81c\uac00 \ubc1c\uacac\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc774(\uac00) \uc694\uccad\ub420 \ub54c JSF\uac00 \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \ub2e4\uc74c \ubb38\uc81c\uac00 \ubc1c\uacac\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc744(\ub97c) \ucc98\ub9ac\ud558\ub294 \uc911 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=\uad00\ub9ac\ub418\ub294 \ub4f1\ub85d \uc815\ubcf4 ''{0}''\uc744(\ub97c) \ucc98\ub9ac\ud558\ub294 \uc911 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=\ubc94\uc704 ''{0}''\uc774(\uac00) ''view'', ''request'', ''session'', ''application'' \uc911 \ud558\ub098\uac00 \uc544\ub2c8\uba70, ValueExpression(#{...})\uc744 \ub098\ud0c0\ub0b4\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MISSING_CLASS_ERROR=\ud074\ub798\uc2a4 \ub204\ub77d: ''{0}'' \ud074\ub798\uc2a4\ub97c \ub85c\ub4dc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MISSING_RESOURCE_ERROR=\uc790\uc6d0 \ub204\ub77d: ResourceBundle\uc744 \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.MODELUPDATE_ERROR=''{1}'' \ubaa8\ub378\uc5d0\uc11c ''{0}'' \uac12\uc5d0 \ub300\ud55c \ubaa8\ub378 \uc5c5\ub370\uc774\ud2b8\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=\uacb0\uacfc ''{1}''\uc5d0 \ub300\ud574 \ubcf4\uae30 \uc544\uc774\ub514 ''{0}''\uc5d0\uc11c \uc77c\uce58\ud558\ub294 \ud0d0\uc0c9 \ud56d\ubaa9\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=\uacb0\uacfc ''{2}''\uc744(\ub97c) \uac00\uc9c0\ub294 \uc791\uc5c5 ''{1}''\uc5d0 \ub300\ud574 \ubcf4\uae30 \uc544\uc774\ub514 ''{0}''\uc5d0\uc11c \uc77c\uce58\ud558\ub294 \ud0d0\uc0c9 \ud56d\ubaa9\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=\uacb0\uacfc ''{0}''\uc758 \ucffc\ub9ac \ubb38\uc790\uc5f4\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=\ud45c\ud604\uc2dd \uc624\ub958: ''{0}'' \uc774\ub984\uc758 \uac1d\uccb4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=\ucc98\ub9ac\uae30 \ud074\ub798\uc2a4\uac00 \uc788\ub294 \ud0dc\uadf8\uc5d0 UIComponentTag \uc624\ub958\uac00 \uc911\ucca9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR={0} \ud0dc\uadf8\ub294 \uc720\ud615 {1}\uc758 \uad6c\uc131 \uc694\uc18c\uc640 \uc5f0\uacb0\ub41c \ud0dc\uadf8 \ub0b4\uc5d0\uc11c \uc911\ucca9\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.
-com.sun.faces.NO_DTD_FOUND_ERROR=\uacf5\uc6a9 \uc544\uc774\ub514 ''{0}''(\uc73c)\ub85c \uacbd\ub85c ''{1}''\uc5d0\uc11c DTD\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NULL_BODY_CONTENT_ERROR=\ucc98\ub9ac\uae30 \ud074\ub798\uc2a4\uac00 \uc788\ub294 \ud0dc\uadf8\uc5d0 \ub300\ud574 BodyContent\uac00 null\uc785\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.NULL_COMPONENT_ERROR=\uad6c\uc131 \uc624\ub958: \uad6c\uc131 \uc694\uc18c \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_CONFIGURATION=\uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc5d0 \ub300\ud574 \ub85c\ub4dc\ub41c \uad6c\uc131\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NULL_CONTEXT_ERROR=\uc778\uc218 \uc624\ub958: \ucee8\ud14d\uc2a4\ud2b8 \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_EVENT_ERROR=\uc778\uc218 \uc624\ub958: \uc774\ubca4\ud2b8 \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_FORVALUE=\uad6c\uc131 \uc694\uc18c "{0}"\uc744(\ub97c) \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NULL_HANDLER_ERROR=\uc778\uc218 \uc624\ub958: \ucc98\ub9ac\uae30 \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_LOCALE_ERROR=\uc778\uc218 \uc624\ub958: \ub85c\ucf08 \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_MESSAGE_ERROR=\uc778\uc218 \uc624\ub958: \uba54\uc2dc\uc9c0 \ub9e4\uac1c \ubcc0\uc218\ub294 null\uc774 \ub420 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NULL_PARAMETERS_ERROR=\uc778\uc218 \uc624\ub958: \ub9e4\uac1c \ubcc0\uc218 ''{0}''\uc774(\uac00) null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=\uc778\uc218 \uc624\ub958: \uc694\uccad \ubcf4\uae30 \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=\uc778\uc218 \uc624\ub958: ResponseStream \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=\uc778\uc218 \uc624\ub958: ResponseView \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=\uc778\uc218 \uc624\ub958: ResponseWriter \uc778\uc218\uac00 null\uc785\ub2c8\ub2e4.
-com.sun.faces.OBJECT_CREATION_ERROR=\uad6c\uc131\ub41c \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uac1d\uccb4\ub97c \ud558\ub098 \uc774\uc0c1 \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc6f9 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \ub85c\uadf8\ub97c \ud655\uc778\ud558\uc2ed\uc2dc\uc624.
-com.sun.faces.OPTION_NOT_SELECT_ITEM=\uc778\uc218 \uc624\ub958: \uad6c\uc131 \uc694\uc18c \uc635\uc158 "{0}"\uc740(\ub294) javax.faces.model.SelectItem\uc758 \uc778\uc2a4\ud134\uc2a4\uac00 \uc544\ub2d9\ub2c8\ub2e4.  \uc720\ud615\uc744 \ucc3e\uc558\uc2b5\ub2c8\ub2e4: ''{1}''.
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: \ud0d0\uc0c9 \ud56d\ubaa9\uc744 \uc77c\uce58\uc2dc\ud0ac \uc218 \uc5c6\uc5b4\uc11c \uc774 \ubc84\ud2bc\uc774 \ube44\ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: \ud0d0\uc0c9 \ud56d\ubaa9\uc744 \uc77c\uce58\uc2dc\ud0ac \uc218 \uc5c6\uc5b4\uc11c \uc774 \ub9c1\ud06c\uac00 \ube44\ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId\uac00 \uc544\uc774\ub514\uc5d0 \ub300\ud55c \uacbd\uacc4\ub97c \ubc97\uc5b4\ub0a9\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.RENDERER_NOT_FOUND=\ub80c\ub354\ub7ec \uc720\ud615\uc5d0 \ub300\ud55c \ub80c\ub354\ub7ec\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=\uc0c1\ud0dc \uc624\ub958: \uc774 \uc694\uccad\uc5d0 \ub300\ud55c RequestView\uac00 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=\uc790\uc6d0 \ud615\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ub4f1\ub85d \uc815\ubcf4 ''{0}''\uc744(\ub97c) \uad6c\ubb38 \ubd84\uc11d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=\uc790\uc6d0 \ud615\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ub4f1\ub85d \uc815\ubcf4 ''{0}''\uc5d0 \ucf5c\ub860(:)\uc774 \ub450 \uac1c \uc774\uc0c1 \uc788\uc2b5\ub2c8\ub2e4.
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=\uc790\uc6d0 \ud615\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \uc790\uc6d0 \uc774\ub984\uacfc \ub77c\uc774\ube0c\ub7ec\ub9ac \uc774\ub984\uc744 \ucd94\ucd9c\ud558\uae30 \uc704\ud574 \ub4f1\ub85d \uc815\ubcf4 ''{0}''\uc744(\ub97c) \uad6c\ubb38 \ubd84\uc11d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.SAVING_STATE_ERROR=\uc0c1\ud0dc\ub97c \uc800\uc7a5\ud558\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=\uc778\uc218 \uc624\ub958: ''{0}''\uc740(\ub294) \uc774 \ub80c\ub354\ub7ec\uc5d0 \ub300\ud574 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-com.sun.faces.TYPECONVERSION_ERROR=''{1}''\uc758 \uac12 ''{0}''\uc744(\ub97c) \uc124\uc815\ud558\ub294 \uc911 \ubcc0\ud658 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. 
-com.sun.faces.VALIDATION_COMMAND_ERROR=\uac80\uc99d \uc624\ub958\uc785\ub2c8\ub2e4. ''{0}''\uc740(\ub294) \uac12 \ub610\ub294 \uc774\ubbf8\uc9c0 \uc18d\uc131\uc744 \uac00\uc838\uc57c \ud569\ub2c8\ub2e4.
-com.sun.faces.VALIDATION_EL_ERROR=\uac80\uc99d \uc624\ub958\uc785\ub2c8\ub2e4. \ub2e4\uc74c\uc5d0 \ub300\ud55c \ud45c\ud604\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4: ''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=\uac80\uc99d \uc624\ub958\uc785\ub2c8\ub2e4. \ub2e4\uc74c JSF \ud0dc\uadf8\uc5d0 \uc544\uc774\ub514\uac00 \ub4e4\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4:''{0}''
-com.sun.faces.CANNOT_CONVERT=converterId "{0}" \ub610\ub294 \ubc14\uc778\ub4dc "{1}"\uc744(\ub97c) \uc0ac\uc6a9\ud558\uc5ec \ubcc0\ud658\uae30 \uc778\uc2a4\ud134\uc2a4\ub97c \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.CANNOT_VALIDATE=validatorId "{0}\" \ub610\ub294 \ubc14\uc778\ub4dc "{1}"\uc744(\ub97c) \uc0ac\uc6a9\ud558\uc5ec \uac80\uc99d\uc790 \uc778\uc2a4\ud134\uc2a4\ub97c \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] \ud074\ub798\uc2a4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] \uc885\uc18d\uc131\uc774 \ub204\ub77d\ub418\uc5b4 \ud074\ub798\uc2a4\ub97c \ub85c\ub4dc\ud560 \uc218 \uc5c6\uc74c -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] \ud074\ub798\uc2a4\uc5d0 no argument \uad6c\uc131\uc790\uac00 \ub4e4\uc5b4 \uc788\uc9c0\ub9cc \uacf5\uc6a9\uc774 \uc544\ub2d9\ub2c8\ub2e4.
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] \ud074\ub798\uc2a4\uc5d0 \uacf5\uc6a9 no-argument \uad6c\uc131\uc790\uac00 \ub4e4\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] \ud074\ub798\uc2a4\uac00 {2}\uc744(\ub97c) \uad6c\ud604\ud558\uac70\ub098 \ud655\uc7a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=\uad00\ub9ac\ub418\ub294 Bean ''{0}''\uc5d0 \uc21c\ud658 \ucc38\uc870\uac00 \uc788\uc2b5\ub2c8\ub2e4.  \ud3c9\uac00 \uacbd\ub85c: ''{1}''.
-com.sun.faces.OBJECT_IS_READONLY={0} \uac1d\uccb4\uac00 \uc77d\uae30 \uc804\uc6a9\uc785\ub2c8\ub2e4.
-com.sun.faces.INCORRECT_JSP_VERSION=\ucee8\ud14c\uc774\ub108\uc758 JSP \ubc84\uc804\uc774 2.1 \uc774\uc804\uc73c\ub85c \ub098\ud0c0\ub098\ubbc0\ub85c EL RI \ud45c\ud604\uc2dd \ud329\ud1a0\ub9ac, ''{0}''\uc744(\ub97c) \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.  JSP \ub610\ub294 EL RI\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\uba74 \ucee8\ud14d\uc2a4\ud2b8 \ucd08\uae30\ud654 \ub9e4\uac1c \ubcc0\uc218, ''{1}''\uc774(\uac00) \uc801\uc808\ud558\uac8c \uc124\uc815\ub418\uc5c8\ub294\uc9c0  [...]
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=\uc0c9\uc778 {1}\uc774(\uac00) {0}\uc5d0 \ub300\ud55c \uacbd\uacc4\ub97c \ubc97\uc5b4\ub0a8
-com.sun.faces.PROPERTY_TYPE_ERROR={0}\uc774(\uac00) \ubc30\uc5f4 \ub610\ub294 \ubaa9\ub85d \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=\uc0c9\uc778 {1}\uc774(\uac00) {2} \uae38\uc774\uc758 {0}\uc5d0 \ub300\ud55c \uacbd\uacc4\ub97c \ubc97\uc5b4\ub0a8
-com.sun.faces.RESTORE_VIEW_ERROR=\ubcf4\uae30 ''{0}''\uc744(\ub97c) \ubcf5\uc6d0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=\uc544\uc774\ub514 \uc18d\uc131\uc744 \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=UIComponentTag\uc5d0 \uc911\ucca9\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=UIComponentTag\uc640 \uc5f0\uacb0\ub41c \uad6c\uc131 \uc694\uc18c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=JavaScript \ud30c\uc77c\uc744 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=\ud558\ub098 \uc774\uc0c1\uc758 \uc790\uc6d0\uc774 ''{0}'' \ub300\uc0c1\uc744 \uac00\uc9c0\uc9c0\ub9cc \ubcf4\uae30 \ub0b4 ''{0}'' \uad6c\uc131 \uc694\uc18c\uac00 \uc815\uc758\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_pt_BR.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_pt_BR.properties
deleted file mode 100644
index b59cc14..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_pt_BR.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=O ctor do ApplicationAssociate n\u00e3o foi chamado na mesma pilha de chamadas que ConfigureListener.contextInitialized().
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=J\u00e1 existe um ApplicationAssociate para este aplicativo Web.
-com.sun.faces.ASSERTION_FAILED=Falha na afirma\u00e7\u00e3o
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=O atributo ''{0}'' n\u00e3o tem suporte para o tipo de componente ''{1}''.
-com.sun.faces.CANT_CONVERT_VALUE=N\u00e3o \u00e9 poss\u00edvel converter a propriedade: ''{0}'' para o tipo de valor: ''{1}''.
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=N\u00e3o foi poss\u00edvel fechar o fluxo de entrada.
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=N\u00e3o \u00e9 poss\u00edvel criar o Ciclo de vida para a ID: ''{0}''.
-com.sun.faces.CANT_INSTANTIATE_CLASS=N\u00e3o \u00e9 poss\u00edvel criar inst\u00e2ncia para\u00b7a classe: ''{0}''.
-com.sun.faces.CANT_INTROSPECT_CLASS=N\u00e3o \u00e9 poss\u00edvel fazer a introspec\u00e7\u00e3o da classe: ''{0}''
-com.sun.faces.CANT_PARSE_FILE=N\u00e3o \u00e9 poss\u00edvel analisar o arquivo: ''{0}'': Erro na linha {1} coluna {2}: {3}.
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=Esperado um tipo de componente filho de ''{0}'' para o tipo de componente ''{1}({2})''.  Encontrado ''{3}''.
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: Este link est\u00e1 desativado, pois n\u00e3o est\u00e1 aninhado em um formul\u00e1rio JSF.
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=Uma ou mais inst\u00e2ncias de UICommand encontradas na exibi\u00e7\u00e3o que n\u00e3o foram aninhadas em um UIForm.  As a\u00e7\u00f5es associadas a esses comandos n\u00e3o ser\u00e3o invocadas.
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=Componente n\u00e3o encontrado para o identificador: ''{0}''.
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=N\u00e3o foi poss\u00edvel encontrar o componente com a ID ''{0}'' na exibi\u00e7\u00e3o.
-com.sun.faces.CONTENT_TYPE_ERROR=Tipo de conte\u00fado n\u00e3o reconhecido.
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=N\u00e3o foi poss\u00edvel registrar renderizadores com RenderKit usando a ID {0}.  RenderKit n\u00e3o existe.
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=A ID de componente ''{0}'' j\u00e1 foi encontrada na visualiza\u00e7\u00e3o.
-com.sun.faces.EMPTY_PARAMETER=O par\u00e2metro est\u00e1 vazio
-com.sun.faces.ENCODING_ERROR=Codifica\u00e7\u00e3o de caracteres n\u00e3o reconhecida.
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=N\u00e3o \u00e9 poss\u00edvel obter ValueBinding para o valor: ''{0}''.
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=N\u00e3o \u00e9 poss\u00edvel obter o valor na express\u00e3o de liga\u00e7\u00e3o de valor: ''{0}''.
-com.sun.faces.ERROR_OPENING_FILE=N\u00e3o \u00e9 poss\u00edvel abrir o arquivo de configura\u00e7\u00e3o: ''{0}''.
-com.sun.faces.ERROR_PROCESSING_CONFIG=Um erro inesperado ocorreu durante o processamento da configura\u00e7\u00e3o. 
-com.sun.faces.ERROR_REGISTERING_DTD=N\u00e3o \u00e9 poss\u00edvel registrar o DTD: ''{0}''.
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=N\u00e3o \u00e9 poss\u00edvel definir a propriedade do bean gerenciado: ''{0}''.
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=A avalia\u00e7\u00e3o da express\u00e3o do atributo ''{0}'' resultou em um tipo inesperado.  Esperado {1}, recebido {2}.
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=Erro de constru\u00e7\u00e3o: Um ou mais par\u00e2metros de entrada podem ser nulos.
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=N\u00e3o foi poss\u00edvel determinar o mapeamento do FaceServlet para o caminho "{0}" do servlet.
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=O FacesServlet n\u00e3o pode ter um url-pattern de '/*'.  Defina um url-pattern diferente
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=Nenhum FacesContext est\u00e1 dispon\u00edvel para processar esta solicita\u00e7\u00e3o.  Isso provavelmente ocorreu devido ao envio da solicita\u00e7\u00e3o para o caminho errado.
-com.sun.faces.FILE_NOT_FOUND=Arquivo n\u00e3o encontrado para o arquivo: ''{0}''.
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=Tentativa ilegal de definir {0} depois de uma resposta ter sido renderizada.
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=Caracteres n\u00e3o permitidos
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=Uso ilegal de identificador de objeto impl\u00edcito no modo lValue: ''{0}''
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=Refer\u00eancia de modelo ilegal neste contexto para a express\u00e3o ''{0}''.
-com.sun.faces.ILLEGAL_VIEW_ID=ID de exibi\u00e7\u00e3o ilegal ''{0}''.  A ID deve come\u00e7ar com ''/''
-com.sun.faces.INVALID_EXPRESSION=Express\u00e3o inv\u00e1lida: ''{0}''.
-com.sun.faces.INVALID_INIT_PARAM=Valor inv\u00e1lido: ''{0}'', para o par\u00e2metro de inicializa\u00e7\u00e3o: ''{1}''.  Os valores aceitos s\u00e3o 'verdadeiro' ou 'falso'.  Definindo 'falso' como padr\u00e3o.
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=Gravidade de mensagem inv\u00e1lida ''{0}'' definida na configura\u00e7\u00e3o.
-com.sun.faces.INVALID_SCOPE_LIFESPAN=O escopo do objeto referido pela express\u00e3o ''{0}'', ''{1}'', \u00e9 menor do que o escopo do bean gerenciado referido (''{2}'') de ''{3}''
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=LifecycleId j\u00e1 adicionado para a ID: ''{0}''.
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=LifecycleId n\u00e3o encontrada para a ID ''{0}''.
-com.sun.faces.MAXIMUM_EVENTS_REACHED=N\u00famero m\u00e1ximo de eventos ''{0}'' atingido.
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=N\u00e3o \u00e9 poss\u00edvel definir a propriedade de destino ''{0}'' no bean gerenciado ''{1}''. A propriedade deve aceitar as inst\u00e2ncias de Lista ou Matriz.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=A propriedade ''{0}'' no bean gerenciado ''{1}'' est\u00e1 definida como uma propriedade de mapa, contudo, o setter na classe n\u00e3o aceita inst\u00e2ncias de Mapa.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=A propriedade ''{0}'' no bean gerenciado ''{1}'' est\u00e1 definida como uma propriedade de mapa, contudo, o getter na classe n\u00e3o retorna inst\u00e2ncias de Mapa.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=A propriedade ''{0}'' no bean gerenciado ''{1}'' est\u00e1 definida como uma propriedade de mapa, contudo, o setter na classe n\u00e3o aceita inst\u00e2ncias de Lista ou Matriz.
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=A propriedade ''{0}'' no bean gerenciado ''{1}'' est\u00e1 definida como uma propriedade de mapa, contudo, o getter na classe n\u00e3o retorna inst\u00e2ncias de Lista ou Matriz.
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=A propriedade ''{0}'' no bean gerenciado ''{1}'' est\u00e1 definida como uma propriedade de lista.  O getter retorna um tipo de matriz, mas n\u00e3o h\u00e1 um setter associado.
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=N\u00e3o \u00e9 poss\u00edvel definir a propriedade de destino ''{0}'' no bean gerenciado ''{1}''. A propriedade de destino retornou um valor existente que n\u00e3o era uma inst\u00e2ncia de Lista.
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Configura\u00e7\u00e3o incorreta para o bean gerenciado ''{0}''. O bean gerenciado est\u00e1 configurado como uma Lista, mas tamb\u00e9m tenta definir entradas de mapa ou propriedades gerenciadas.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Configura\u00e7\u00e3o incorreta para o bean gerenciado ''{0}''. O bean gerenciado est\u00e1 configurado como um Mapa, mas tamb\u00e9m tenta definir propriedades gerenciadas.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Configura\u00e7\u00e3o incorreta para o bean gerenciado ''{0}''. O bean\u00b7gerenciado cont\u00e9m uma propriedade gerenciada denominada ''{1}'' com entradas de lista, mas definiu de forma ilegal entradas de valor e/ou mapa.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Configura\u00e7\u00e3o incorreta para o bean gerenciado ''{0}''. O bean gerenciado cont\u00e9m uma propriedade gerenciada denominada ''{1}'' com entradas de mapa, mas tamb\u00e9m definiu de forma ilegal um valor.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Configura\u00e7\u00e3o incorreta para o bean gerenciado ''{0}''. O bean gerenciado cont\u00e9m uma propriedade gerenciada denominada ''{1}'', que n\u00e3o cont\u00e9m entradas de lista ou mapa, nem qualquer elemento de valor.
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=Erro ao realizar convers\u00e3o do valor ''{0}'' do tipo ''{1}'' para o tipo ''{2}'' para o bean gerenciado ''{3}''.
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=O bean ou a classe da propriedade ''{0}'' do bean gerenciado ''{1}'' n\u00e3o p\u00f4de ser encontrada.
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=O bean ou a classe da propriedade ''{0}'' do bean gerenciado ''{1}'' n\u00e3o p\u00f4de ser carregada devido a uma depend\u00eancia ausente: {2}.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=A classe de bean gerenciado ''{0}'' para o bean gerenciado ''{1}'' n\u00e3o foi declarada p\u00fablica.
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=A classe de bean gerenciado ''{0}'' para o bean gerenciado ''{1}'' foi declarada abstrata ou como uma interface.
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=A classe de bean gerenciado ''{0}'' para o bean gerenciado ''{1}'' n\u00e3o declara um construtor no-argument p\u00fablico.
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=Um erro ocorreu ao realizar a inje\u00e7\u00e3o de recurso no bean gerenciado ''{0}''
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=A propriedade ''{0}'' para o bean gerenciado ''{1}'' est\u00e1 definida com uma classe de propriedade de ''{2}''. Contudo, essa classe n\u00e3o pode ser atribu\u00edda \u00e0 propriedade.
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=N\u00e3o foi poss\u00edvel fazer a introspec\u00e7\u00e3o do bean gerenciado ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=A propriedade ''{0}'' para o bean gerenciado ''{1}'' n\u00e3o existe.
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=A propriedade ''{0}'' para o bean gerenciado ''{1}'' n\u00e3o possui um setter.
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=A propriedade ''{0}'' para o bean gerenciado ''{1}'' aceita mais de um argumento.
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=N\u00e3o \u00e9 poss\u00edvel definir a propriedade ''{0}'' para o bean gerenciado ''{1}''.
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=N\u00e3o foi poss\u00edvel criar o bean gerenciado ''{0}''.  Os seguintes problemas foram encontrados:
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=O JSF estar\u00e1 indispon\u00edvel para criar o bean gerenciado ''{0}'' quando ele for solicitado.  Os seguintes problemas foram encontrados:
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=Erro inesperado ao processar o bean gerenciado ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=Erro inesperado ao processar a propriedade gerenciada ''{0}''
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=O escopo ''{0}'' n\u00e3o \u00e9 ''exibi\u00e7\u00e3o'', ''solicita\u00e7\u00e3o'', ''sess\u00e3o'', ''aplicativo'', nem representa um ValueExpression (#{...})
-com.sun.faces.MISSING_CLASS_ERROR=Classe ausente: N\u00e3o \u00e9 poss\u00edvel carregar a classe ''{0}''.
-com.sun.faces.MISSING_RESOURCE_ERROR=Recurso ausente: N\u00e3o \u00e9 poss\u00edvel obter ResourceBundle.
-com.sun.faces.MODELUPDATE_ERROR=Falha na atualiza\u00e7\u00e3o de modelo para o valor ''{0}'' no modelo ''{1}''.
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=N\u00e3o foi poss\u00edvel encontrar um caso de navega\u00e7\u00e3o correspondente na ID de exibi\u00e7\u00e3o ''{0}'' com o resultado ''{1}''
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=N\u00e3o foi poss\u00edvel encontrar um caso de navega\u00e7\u00e3o correspondente na ID de exibi\u00e7\u00e3o ''{0}'' para a a\u00e7\u00e3o ''{1}'' com o resultado ''{2}''
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=Seq\u00fc\u00eancia de consulta inv\u00e1lida no resultado ''{0}''
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=Erro de express\u00e3o: Objeto denominado: ''{0}'' n\u00e3o encontrado.
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=N\u00e3o est\u00e1 aninhado em um erro de UIComponentTag para marca\u00e7\u00e3o com a classe de manipulador: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR=A marca {0} deveria estar aninhada em uma marca associada a um componente do tipo {1}.
-com.sun.faces.NO_DTD_FOUND_ERROR=N\u00e3o foi poss\u00edvel localizar o DTD com ID P\u00daBLICA ''{0}'' no caminho ''{1}''.
-com.sun.faces.NULL_BODY_CONTENT_ERROR=BodyContent \u00e9 nulo para a marca com a classe de manipulador: ''{0}''.
-com.sun.faces.NULL_COMPONENT_ERROR=Erro de constru\u00e7\u00e3o: O argumento do componente \u00e9 nulo.
-com.sun.faces.NULL_CONFIGURATION=Nenhuma configura\u00e7\u00e3o carregada para o aplicativo.
-com.sun.faces.NULL_CONTEXT_ERROR=Erro de argumento: O argumento Contexto \u00e9 nulo.
-com.sun.faces.NULL_EVENT_ERROR=Erro de argumento: O argumento Evento \u00e9 nulo.
-com.sun.faces.NULL_FORVALUE=Componente "{0}" n\u00e3o encontrado
-com.sun.faces.NULL_HANDLER_ERROR=Erro de argumento: O argumento Manipulador \u00e9 nulo.
-com.sun.faces.NULL_LOCALE_ERROR=Erro de argumento: O argumento Local \u00e9 nulo.
-com.sun.faces.NULL_MESSAGE_ERROR=Erro de argumento: O par\u00e2metro Message n\u00e3o pode ser nulo
-com.sun.faces.NULL_PARAMETERS_ERROR=Erro de argumento: O par\u00e2metro ''{0}'' \u00e9 nulo
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=Erro de argumento: O argumento RequestView \u00e9 nulo.
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=Erro de argumento: O argumento ResponseStream \u00e9 nulo.
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=Erro de argumento: O argumento ResponseView \u00e9 nulo.
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=Erro de argumento: O argumento ResponseWriter \u00e9 nulo.
-com.sun.faces.OBJECT_CREATION_ERROR=Um ou mais objetos de aplicativo configurados n\u00e3o puderam ser criados.  Verifique os logs de aplicativo Web para obter detalhes.
-com.sun.faces.OPTION_NOT_SELECT_ITEM=Erro de argumento: Uma op\u00e7\u00e3o para o componente ''{0}'' n\u00e3o era uma inst\u00e2ncia de javax.faces.model.SelectItem.  Tipo encontrado: ''{1}''.
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: Este bot\u00e3o est\u00e1 desativado porque um caso de navega\u00e7\u00e3o n\u00e3o p\u00f4de ser correspondido.
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: Este link est\u00e1 desativado porque um caso de navega\u00e7\u00e3o n\u00e3o p\u00f4de ser correspondido.
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId fora dos limites da ID: ''{0}''.
-com.sun.faces.RENDERER_NOT_FOUND=O renderizador n\u00e3o foi encontrado para o tipo de renderizador: ''{0}''.
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=Erro de estado: RequestView j\u00e1 definido para esta solicita\u00e7\u00e3o.
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=""Formato de recurso inv\u00e1lido.  A propriedade ''{0}'' n\u00e3o pode ser analisada."
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=Formato de recurso inv\u00e1lido.  A propriedade ''{0}'' cont\u00e9m mais de um sinal de dois-pontos (:).
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=Formato de recurso inv\u00e1lido.  A propriedade ''{0}'' n\u00e3o pode ser analisada para extrair o nome do recurso e da biblioteca."
-com.sun.faces.SAVING_STATE_ERROR=Erro ao salvar estado.
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=Erro de argumento: ''{0}'' sem suporte para este renderizador.
-com.sun.faces.TYPECONVERSION_ERROR=Erro de convers\u00e3o ao definir o valor ''{0}'' para ''{1}''. 
-com.sun.faces.VALIDATION_COMMAND_ERROR=Erro de valida\u00e7\u00e3o. ''{0}'' deve ter um atributo de valor ou imagem.
-com.sun.faces.VALIDATION_EL_ERROR=Erro de valida\u00e7\u00e3o. Express\u00e3o inv\u00e1lida para:''{0}''
-com.sun.faces.VALIDATION_ID_ERROR=Erro de valida\u00e7\u00e3o. As seguintes marcas JSF s\u00e3o necess\u00e1rias para conter IDs:''{0}''
-com.sun.faces.CANNOT_CONVERT=N\u00e3o foi poss\u00edvel resolver uma inst\u00e2ncia do Conversor usando converterId ''{0}'' ou a liga\u00e7\u00e3o ''{1}''.
-com.sun.faces.CANNOT_VALIDATE=N\u00e3o foi poss\u00edvel resolver uma inst\u00e2ncia do Validador usando validatorId ''{0}'' ou a liga\u00e7\u00e3o ''{1}''.
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] A classe n\u00e3o existe
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] A classe n\u00e3o pode ser carregada devido a uma depend\u00eancia ausente -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] A classe cont\u00e9m um argumento sem construtor, mas n\u00e3o \u00e9 p\u00fablica
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] A classe cont\u00e9m um construtor no-argument n\u00e3o p\u00fablico
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] A classe n\u00e3o implementa ou estende {2}
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=O bean gerenciado ''{0}'' cont\u00e9m refer\u00eancias c\u00edclicas.  Caminho da avalia\u00e7\u00e3o: ''{1}''.
-com.sun.faces.OBJECT_IS_READONLY=O objeto {0} \u00e9 somente leitura
-com.sun.faces.INCORRECT_JSP_VERSION=Parece que a vers\u00e3o do JSP do cont\u00eainer \u00e9 mais antiga que a 2.1 e n\u00e3o pode localizar o gerador de express\u00f5es EL RI, ''{0}''.  Se n\u00e3o estiver usando o JSP ou o EL RI, verifique se o par\u00e2metro de inicializa\u00e7\u00e3o de contexto, ''{1}'', est\u00e1 definido corretamente.
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=\u00cdndice {1} fora dos limites para {0}
-com.sun.faces.PROPERTY_TYPE_ERROR={0} n\u00e3o \u00e9 do tipo Matriz ou Lista.
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=\u00cdndice {1} fora dos limites para {0} com um comprimento de {2}
-com.sun.faces.RESTORE_VIEW_ERROR=A exibi\u00e7\u00e3o de ''{0}'' n\u00e3o p\u00f4de ser restaurada.
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=N\u00e3o \u00e9 poss\u00edvel gravar o atributo da ID: ''{0}''.
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=N\u00e3o est\u00e1 aninhado em um UIComponentTag.
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=Nenhum componente associado a UIComponentTag.
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=N\u00e3o \u00e9 poss\u00edvel gravar o arquivo JavaScript no cliente.
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=Um ou mais recursos possuem o destino de ''{0}'', mas nenhum componente de ''{0}'' foi definido na exibi\u00e7\u00e3o.
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_zh_CN.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_zh_CN.properties
deleted file mode 100644
index 243145e..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_zh_CN.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=\u672a\u5728\u8c03\u7528 ConfigureListener.contextInitialized() \u7684\u540c\u4e00\u8c03\u7528\u6808\u4e2d\u8c03\u7528 ApplicationAssociate ctor\u3002
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=\u6b64 Web \u5e94\u7528\u7a0b\u5e8f\u7684 ApplicationAssociate \u5df2\u5b58\u5728\u3002
-com.sun.faces.ASSERTION_FAILED=\u65ad\u8a00\u5931\u8d25
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=\u7ec4\u4ef6\u7c7b\u578b ''{1}'' \u4e0d\u652f\u6301\u5c5e\u6027 ''{0}''\u3002
-com.sun.faces.CANT_CONVERT_VALUE=\u65e0\u6cd5\u5c06\u5c5e\u6027 ''{0}'' \u8f6c\u6362\u4e3a\u503c\u7c7b\u578b ''{1}''\u3002
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=\u65e0\u6cd5\u5173\u95ed\u8f93\u5165\u6d41\u3002
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=\u65e0\u6cd5\u4e3a ID ''{0}'' \u521b\u5efa\u751f\u547d\u5468\u671f\u3002
-com.sun.faces.CANT_INSTANTIATE_CLASS=\u65e0\u6cd5\u5b9e\u4f8b\u5316\u7c7b\uff1a''{0}''\u3002
-com.sun.faces.CANT_INTROSPECT_CLASS=\u65e0\u6cd5\u5185\u7701\u7c7b\uff1a''{0}''
-com.sun.faces.CANT_PARSE_FILE=\u65e0\u6cd5\u89e3\u6790\u6587\u4ef6 ''{0}''\uff1a\u884c {1} \u5217 {2} \u5904\u51fa\u9519\uff1a{3}\u3002
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=\u5bf9\u4e8e\u7ec4\u4ef6\u7c7b\u578b ''{1}({2})''\uff0c\u671f\u671b\u7684\u5b50\u7ec4\u4ef6\u7c7b\u578b\u4e3a ''{0}''\u3002\u627e\u5230 ''{3}''\u3002
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=: \u6b64\u94fe\u63a5\u5df2\u7981\u7528\uff0c\u56e0\u4e3a\u5b83\u672a\u5d4c\u5957\u5728 JSF \u8868\u5355\u5185\u3002
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=\u5728\u672a\u5d4c\u5957\u5728 UIForm \u5185\u7684\u89c6\u56fe\u4e2d\uff0c\u627e\u5230\u4e00\u4e2a\u6216\u591a\u4e2a UICommand \u5b9e\u4f8b\u3002\u4e0e\u8fd9\u4e9b\u547d\u4ee4\u5173\u8054\u7684\u64cd\u4f5c\u5c06\u4e0d\u4f1a\u88ab\u8c03\u7528\u3002
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=\u672a\u627e\u5230\u6807\u8bc6\u7b26 ''{0}'' \u7684\u7ec4\u4ef6\u3002
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=\u65e0\u6cd5\u5728\u89c6\u56fe\u4e2d\u627e\u5230 ID \u4e3a ''{0}'' \u7684\u7ec4\u4ef6\u3002
-com.sun.faces.CONTENT_TYPE_ERROR=\u65e0\u6cd5\u8bc6\u522b\u5185\u5bb9\u7c7b\u578b\u3002
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=\u65e0\u6cd5\u4f7f\u7528 ID {0} \u5728 RenderKit \u4e2d\u6ce8\u518c renderer\u3002RenderKit \u4e0d\u5b58\u5728\u3002
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=\u5df2\u5728\u89c6\u56fe\u4e2d\u627e\u5230\u7ec4\u4ef6 ID ''{0}''\u3002
-com.sun.faces.EMPTY_PARAMETER=\u53c2\u6570\u662f\u7a7a\u7684
-com.sun.faces.ENCODING_ERROR=\u65e0\u6cd5\u8bc6\u522b\u5b57\u7b26\u7f16\u7801\u3002
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=\u65e0\u6cd5\u83b7\u53d6\u503c ''{0}'' \u7684 ValueBinding\u3002
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=\u65e0\u6cd5\u4ece\u503c\u7ed1\u5b9a\u8868\u8fbe\u5f0f ''{0}'' \u83b7\u53d6\u503c\u3002
-com.sun.faces.ERROR_OPENING_FILE=\u65e0\u6cd5\u6253\u5f00\u914d\u7f6e\u6587\u4ef6\uff1a''{0}''\u3002
-com.sun.faces.ERROR_PROCESSING_CONFIG=\u5728\u914d\u7f6e\u5904\u7406\u8fc7\u7a0b\u4e2d\uff0c\u53d1\u751f\u610f\u5916\u9519\u8bef\u3002 
-com.sun.faces.ERROR_REGISTERING_DTD=\u65e0\u6cd5\u6ce8\u518c DTD\uff1a''{0}''\u3002
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=\u65e0\u6cd5\u8bbe\u7f6e\u53d7\u7ba1 bean \u5c5e\u6027\uff1a''{0}''\u3002
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=\u5c5e\u6027 ''{0}'' \u7684\u8868\u8fbe\u5f0f\u7684\u8ba1\u7b97\u7ed3\u679c\u662f\u610f\u5916\u7c7b\u578b\u3002\u5e94\u4e3a {1}\uff0c\u4f46\u6536\u5230\u7684\u5374\u662f {2}\u3002
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=\u6784\u9020\u9519\u8bef\uff1a\u4e00\u4e2a\u6216\u591a\u4e2a\u8f93\u5165\u53c2\u6570\u53ef\u80fd\u4e3a null\u3002
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=\u65e0\u6cd5\u786e\u5b9a Servlet \u8def\u5f84 ''{0}'' \u7684 FaceServlet \u6620\u5c04\u3002
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=FacesServlet \u7684 url-pattern \u4e0d\u80fd\u4e3a '/*'\u3002\u8bf7\u5b9a\u4e49\u5176\u4ed6 url-pattern\u3002
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=\u6ca1\u6709\u53ef\u7528\u4e8e\u5904\u7406\u6b64\u8bf7\u6c42\u7684 FacesContext\u3002\u5f88\u53ef\u80fd\u662f\u56e0\u4e3a\u5c06\u8bf7\u6c42\u53d1\u9001\u5230\u4e86\u9519\u8bef\u7684\u8def\u5f84\u3002
-com.sun.faces.FILE_NOT_FOUND=\u672a\u627e\u5230\u6587\u4ef6\uff1a''{0}''\u3002
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=\u5448\u73b0\u54cd\u5e94\u540e\u8bbe\u7f6e {0} \u7684\u5c1d\u8bd5\u975e\u6cd5\u3002
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=\u4e0d\u5141\u8bb8\u5b57\u7b26\u3002
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=\u5728 lValue \u6a21\u5f0f ''{0}'' \u4e2d\u4f7f\u7528\u9690\u542b\u5bf9\u8c61\u6807\u8bc6\u7b26\u975e\u6cd5
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=\u8868\u8fbe\u5f0f ''{0}'' \u7684\u6b64\u4e0a\u4e0b\u6587\u4e2d\u7684\u6a21\u578b\u5f15\u7528\u975e\u6cd5\u3002
-com.sun.faces.ILLEGAL_VIEW_ID=\u89c6\u56fe ID ''{0}'' \u975e\u6cd5\u3002\u8be5 ID \u5fc5\u987b\u4ee5 ''/'' \u5f00\u5934
-com.sun.faces.INVALID_EXPRESSION=\u8868\u8fbe\u5f0f ''{0}'' \u65e0\u6548\u3002
-com.sun.faces.INVALID_INIT_PARAM=\u521d\u59cb\u5316\u53c2\u6570 ''{1}'' \u7684\u503c ''{0}'' \u65e0\u6548\u3002\u53ef\u63a5\u53d7\u7684\u503c\u4e3a 'true' \u6216 'false'\u3002\u9ed8\u8ba4\u503c\u4e3a 'false'\u3002
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=\u914d\u7f6e\u4e2d\u5b9a\u4e49\u7684\u6d88\u606f\u4e25\u91cd\u6027 ''{0}'' \u65e0\u6548\u3002
-com.sun.faces.INVALID_SCOPE_LIFESPAN=\u8868\u8fbe\u5f0f ''{0}'' \u5f15\u7528\u7684\u5bf9\u8c61\u8303\u56f4 ''{1}'' \u6bd4\u5f15\u7528\u53d7\u7ba1 bean \u7684 ''{3}'' \u7684 (''{2}'') \u8303\u56f4\u77ed
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=\u5df2\u4e3a ID ''{0}'' \u6dfb\u52a0\u751f\u547d\u5468\u671f ID\u3002
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=\u672a\u627e\u5230 ID ''{0}'' \u7684\u751f\u547d\u5468\u671f ID\u3002
-com.sun.faces.MAXIMUM_EVENTS_REACHED=\u5df2\u8fbe\u5230\u4e8b\u4ef6 ''{0}'' \u7684\u6700\u5927\u6570\u76ee\u3002
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=\u65e0\u6cd5\u8bbe\u7f6e\u53d7\u7ba1 bean ''{1}'' \u4e2d\u7684\u76ee\u6807\u5c5e\u6027 ''{0}''\u3002\u6b64\u5c5e\u6027\u5fc5\u987b\u63a5\u53d7 List \u6216 Array \u5b9e\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=\u53d7\u7ba1 bean ''{1}'' \u4e2d\u7684\u5c5e\u6027 ''{0}'' \u5b9a\u4e49\u4e3a\u6620\u5c04\u5c5e\u6027\uff0c\u4f46\u7c7b\u4e2d\u7684\u8bbe\u7f6e\u4e0d\u63a5\u53d7 Map \u5b9e\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=\u53d7\u7ba1 bean ''{1}'' \u4e2d\u7684\u5c5e\u6027 ''{0}'' \u5b9a\u4e49\u4e3a\u6620\u5c04\u5c5e\u6027\uff0c\u4f46\u7c7b\u4e2d\u7684\u83b7\u53d6\u4e0d\u8fd4\u56de Map \u5b9e\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=\u53d7\u7ba1 bean ''{1}'' \u4e2d\u7684\u5c5e\u6027 ''{0}'' \u5b9a\u4e49\u4e3a\u5217\u8868\u5c5e\u6027\uff0c\u4f46\u7c7b\u4e2d\u7684\u8bbe\u7f6e\u4e0d\u63a5\u53d7 List \u6216 Array \u5b9e\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=\u53d7\u7ba1 bean ''{1}'' \u4e2d\u7684\u5c5e\u6027 ''{0}'' \u5b9a\u4e49\u4e3a\u5217\u8868\u5c5e\u6027\uff0c\u4f46\u7c7b\u4e2d\u7684\u83b7\u53d6\u4e0d\u8fd4\u56de List \u6216 Array \u5b9e\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=\u53d7\u7ba1 bean ''{1}'' \u4e2d\u7684\u5c5e\u6027 ''{0}'' \u5b9a\u4e49\u4e3a\u5217\u8868\u5c5e\u6027\u3002\u83b7\u53d6\u8fd4\u56de\u6570\u7ec4\u7c7b\u578b\uff0c\u4f46\u6ca1\u6709\u5173\u8054\u7684\u8bbe\u7f6e\u3002
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=\u65e0\u6cd5\u8bbe\u7f6e\u53d7\u7ba1 bean ''{1}'' \u4e2d\u7684\u76ee\u6807\u5c5e\u6027 ''{0}''\u3002\u76ee\u6807\u5c5e\u6027\u8fd4\u56de\u4e86\u4e00\u4e2a\u4e0d\u662f List \u5b9e\u4f8b\u7684\u73b0\u6709\u503c\u3002
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=\u53d7\u7ba1 bean ''{0}'' \u7684\u914d\u7f6e\u4e0d\u6b63\u786e\u3002\u53d7\u7ba1 bean \u5df2\u5b9a\u4e49\u4e3a List\uff0c\u4f46\u8fd8\u5c1d\u8bd5\u5b9a\u4e49\u6620\u5c04\u6761\u76ee\u6216\u53d7\u7ba1\u5c5e\u6027\u3002
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=\u53d7\u7ba1 bean ''{0}'' \u7684\u914d\u7f6e\u4e0d\u6b63\u786e\u3002\u53d7\u7ba1 bean \u5df2\u5b9a\u4e49\u4e3a Map\uff0c\u4f46\u8fd8\u5c1d\u8bd5\u5b9a\u4e49\u53d7\u7ba1\u5c5e\u6027\u3002
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=\u53d7\u7ba1 bean ''{0}'' \u7684\u914d\u7f6e\u4e0d\u6b63\u786e\u3002\u53d7\u7ba1 bean \u5305\u542b\u540d\u4e3a ''{1}'' \u5e76\u5177\u6709\u5217\u8868\u6761\u76ee\u7684\u53d7\u7ba1\u5c5e\u6027\uff0c\u4f46\u5374\u975e\u6cd5\u5b9a\u4e49\u4e86\u503c\u548c/\u6216\u6620\u5c04\u6761\u76ee\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=\u53d7\u7ba1 bean ''{0}'' \u7684\u914d\u7f6e\u4e0d\u6b63\u786e\u3002\u53d7\u7ba1 bean \u5305\u542b\u540d\u4e3a ''{1}'' \u5e76\u5177\u6709\u6620\u5c04\u6761\u76ee\u7684\u53d7\u7ba1\u5c5e\u6027\uff0c\u4f46\u5374\u975e\u6cd5\u5b9a\u4e49\u4e86\u503c\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=\u53d7\u7ba1 bean ''{0}'' \u7684\u914d\u7f6e\u4e0d\u6b63\u786e\u3002\u53d7\u7ba1 bean \u5305\u542b\u540d\u4e3a ''{1}'' \u7684\u53d7\u7ba1\u5c5e\u6027\uff0c\u6b64\u5c5e\u6027\u672a\u5305\u542b\u5217\u8868\u6216\u6620\u5c04\u6761\u76ee\uff0c\u4e5f\u672a\u5305\u542b\u4efb\u4f55\u503c\u5143\u7d20\u3002
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=\u5728\u5c06\u53d7\u7ba1 bean ''{3}'' \u7684\u7c7b\u578b ''{1}'' \u7684\u503c ''{0}'' \u8f6c\u6362\u4e3a\u7c7b\u578b ''{2}'' \u65f6\u53d1\u751f\u9519\u8bef\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=\u65e0\u6cd5\u627e\u5230\u53d7\u7ba1 bean ''{1}'' \u7684 bean \u6216\u5c5e\u6027\u7c7b ''{0}''\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=\u65e0\u6cd5\u88c5\u5165\u53d7\u7ba1 bean ''{1}'' \u7684 bean \u6216\u5c5e\u6027\u7c7b ''{0}''\uff0c\u539f\u56e0\u662f\u7f3a\u5c11\u4f9d\u8d56\u6027\uff1a{2}\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=\u53d7\u7ba1 bean ''{1}'' \u7684\u53d7\u7ba1 bean \u7c7b ''{0}'' \u672a\u58f0\u660e\u4e3a public\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=\u53d7\u7ba1 bean ''{1}'' \u7684\u53d7\u7ba1 bean \u7c7b ''{0}'' \u58f0\u660e\u4e3a abstract \u6216 interface\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=\u53d7\u7ba1 bean ''{1}'' \u7684\u53d7\u7ba1 bean \u7c7b ''{0}'' \u4e0d\u58f0\u660e\u516c\u5f00\u7684\u65e0\u53c2\u6570\u6784\u9020\u51fd\u6570\u3002
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=\u5bf9\u53d7\u7ba1 bean ''{0}'' \u6267\u884c\u8d44\u6e90\u6ce8\u5165 (resource injection) \u65f6\u53d1\u751f\u9519\u8bef
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=\u5df2\u4f7f\u7528 ''{2}'' \u7684\u5c5e\u6027\u7c7b\u5b9a\u4e49\u53d7\u7ba1 bean ''{1}'' \u7684\u5c5e\u6027 ''{0}''\uff0c\u4f46\u6b64\u7c7b\u5374\u65e0\u6cd5\u5206\u914d\u7ed9\u6b64\u5c5e\u6027\u3002
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=\u65e0\u6cd5\u5185\u7701\u53d7\u7ba1 bean ''{0}''
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=\u53d7\u7ba1 bean ''{1}'' \u7684\u5c5e\u6027 ''{0}'' \u4e0d\u5b58\u5728\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=\u53d7\u7ba1 bean ''{1}'' \u7684\u5c5e\u6027 ''{0}'' \u6ca1\u6709\u8bbe\u7f6e\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=\u53d7\u7ba1 bean ''{1}'' \u7684\u5c5e\u6027 ''{0}'' \u63a5\u53d7\u591a\u4e2a\u53c2\u6570
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=\u65e0\u6cd5\u8bbe\u7f6e\u53d7\u7ba1 bean ''{1}'' \u7684\u5c5e\u6027 ''{0}''
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=\u65e0\u6cd5\u521b\u5efa\u53d7\u7ba1 bean ''{0}''\u3002\u53d1\u73b0\u4ee5\u4e0b\u95ee\u9898\uff1a
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=\u8bf7\u6c42\u53d7\u7ba1 bean ''{0}'' \u65f6\uff0cJSF \u65e0\u6cd5\u521b\u5efa\u5b83\u3002\u53d1\u73b0\u4ee5\u4e0b\u95ee\u9898\uff1a
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=\u5904\u7406\u53d7\u7ba1 bean ''{0}'' \u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=\u5904\u7406\u53d7\u7ba1\u5c5e\u6027 ''{0}'' \u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=\u8303\u56f4 ''{0}'' \u65e2\u4e0d\u662f ''view''\u3001''request''\u3001''session''\u3001''application'' \u4e4b\u4e00\uff0c\u4e5f\u4e0d\u4ee3\u8868 ValueExpression (#{...})
-com.sun.faces.MISSING_CLASS_ERROR=\u7f3a\u5c11\u7c7b\uff1a\u65e0\u6cd5\u88c5\u5165\u7c7b ''{0}''\u3002
-com.sun.faces.MISSING_RESOURCE_ERROR=\u7f3a\u5c11\u8d44\u6e90\uff1a\u65e0\u6cd5\u83b7\u53d6 ResourceBundle\u3002
-com.sun.faces.MODELUPDATE_ERROR=\u6a21\u578b\u66f4\u65b0\u5931\u8d25\uff0c\u539f\u56e0\u662f\u6a21\u578b ''{1}'' \u4e2d\u6709\u503c ''{0}''\u3002
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=\u65e0\u6cd5\u4ece\u89c6\u56fe ID ''{0}'' \u4e2d\u627e\u5230\u7ed3\u679c ''{1}'' \u7684\u5339\u914d\u5bfc\u822a\u6761\u4ef6
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=\u65e0\u6cd5\u4ece\u89c6\u56fe ID ''{0}'' \u4e2d\u627e\u5230\u5177\u6709\u7ed3\u679c ''{2}'' \u7684\u64cd\u4f5c ''{1}'' \u7684\u5339\u914d\u5bfc\u822a\u6761\u4ef6
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=\u7ed3\u679c ''{0}'' \u4e2d\u7684\u67e5\u8be2\u5b57\u7b26\u4e32\u65e0\u6548
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=\u8868\u8fbe\u5f0f\u9519\u8bef\uff1a\u672a\u627e\u5230\u6307\u5b9a\u7684\u5bf9\u8c61 ''{0}''\u3002
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=\u5904\u7406\u7a0b\u5e8f\u7c7b\u4e3a ''{0}'' \u7684\u6807\u8bb0\u53d1\u751f\u201c\u672a\u5d4c\u5957\u5728 UIComponentTag \u4e2d\u201d\u7684\u9519\u8bef\u3002
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR={0} \u6807\u8bb0\u5e94\u5d4c\u5957\u5728\u4e0e {1} \u7c7b\u578b\u7684\u7ec4\u4ef6\u5173\u8054\u7684\u6807\u8bb0\u4e2d\u3002
-com.sun.faces.NO_DTD_FOUND_ERROR=\u65e0\u6cd5\u5728\u8def\u5f84 ''{1}'' \u4e0b\u627e\u5230 PUBLIC ID \u4e3a ''{0}'' \u7684 DTD\u3002
-com.sun.faces.NULL_BODY_CONTENT_ERROR=\u5904\u7406\u7a0b\u5e8f\u7c7b\u4e3a ''{0}'' \u7684\u6807\u8bb0\u7684 BodyContent \u4e3a null\u3002
-com.sun.faces.NULL_COMPONENT_ERROR=\u6784\u9020\u9519\u8bef\uff1aComponent \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_CONFIGURATION=\u672a\u4e3a\u5e94\u7528\u7a0b\u5e8f\u88c5\u5165\u914d\u7f6e\u3002
-com.sun.faces.NULL_CONTEXT_ERROR=\u53c2\u6570\u9519\u8bef\uff1aContext \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_EVENT_ERROR=\u53c2\u6570\u9519\u8bef\uff1aEvent \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_FORVALUE=\u672a\u627e\u5230\u7ec4\u4ef6 "{0}"
-com.sun.faces.NULL_HANDLER_ERROR=\u53c2\u6570\u9519\u8bef\uff1aHandler \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_LOCALE_ERROR=\u53c2\u6570\u9519\u8bef\uff1aLocale \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_MESSAGE_ERROR=\u53c2\u6570\u9519\u8bef\uff1aMessage \u53c2\u6570\u4e0d\u80fd\u4e3a null
-com.sun.faces.NULL_PARAMETERS_ERROR=\u53c2\u6570\u9519\u8bef\uff1a\u53c2\u6570 ''{0}'' \u4e3a null
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=\u53c2\u6570\u9519\u8bef\uff1aRequest View \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=\u53c2\u6570\u9519\u8bef\uff1aResponseStream \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=\u53c2\u6570\u9519\u8bef\uff1aResponseView \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=\u53c2\u6570\u9519\u8bef\uff1aResponseWriter \u53c2\u6570\u4e3a null\u3002
-com.sun.faces.OBJECT_CREATION_ERROR=\u65e0\u6cd5\u521b\u5efa\u4e00\u4e2a\u6216\u591a\u4e2a\u914d\u7f6e\u7684\u5e94\u7528\u7a0b\u5e8f\u5bf9\u8c61\u3002\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u68c0\u67e5\u60a8\u7684 web \u5e94\u7528\u7a0b\u5e8f\u65e5\u5fd7\u3002
-com.sun.faces.OPTION_NOT_SELECT_ITEM=\u53c2\u6570\u9519\u8bef\uff1a\u7ec4\u4ef6 ''{0}'' \u7684\u67d0\u4e2a\u9009\u9879\u4e0d\u662f javax.faces.model.SelectItem \u7684\u5b9e\u4f8b\u3002\u627e\u5230\u7684\u7c7b\u578b\uff1a''{1}''\u3002
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=: \u6b64\u6309\u94ae\u5df2\u7981\u7528\uff0c\u56e0\u4e3a\u65e0\u6cd5\u5339\u914d\u5bfc\u822a\u6761\u4ef6\u3002
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=: \u6b64\u94fe\u63a5\u5df2\u7981\u7528\uff0c\u56e0\u4e3a\u65e0\u6cd5\u5339\u914d\u5bfc\u822a\u6761\u4ef6\u3002
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=\u9636\u6bb5 ID \u8d85\u51fa\u4e86 ID ''{0}'' \u7684\u9650\u5236\u3002
-com.sun.faces.RENDERER_NOT_FOUND=\u672a\u627e\u5230 Renderer \u7c7b\u578b ''{0}'' \u7684 renderer\u3002
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=\u72b6\u6001\u9519\u8bef\uff1a\u5df2\u4e3a\u6b64\u8bf7\u6c42\u8bbe\u7f6e RequestView\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=\u8d44\u6e90\u683c\u5f0f\u65e0\u6548\u3002\u65e0\u6cd5\u89e3\u6790\u5c5e\u6027 ''{0}''\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=\u8d44\u6e90\u683c\u5f0f\u65e0\u6548\u3002\u5c5e\u6027 ''{0}'' \u5305\u542b\u591a\u4e2a\u5192\u53f7 (:)\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=\u8d44\u6e90\u683c\u5f0f\u65e0\u6548\u3002\u65e0\u6cd5\u89e3\u6790\u5c5e\u6027 ''{0}'' \u4ee5\u63d0\u53d6\u8d44\u6e90\u540d\u79f0\u548c\u5e93\u540d\u79f0\u3002
-com.sun.faces.SAVING_STATE_ERROR=\u4fdd\u5b58\u72b6\u6001\u65f6\u51fa\u9519\u3002
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=\u53c2\u6570\u9519\u8bef\uff1a\u6b64 renderer \u4e0d\u652f\u6301 ''{0}''\u3002
-com.sun.faces.TYPECONVERSION_ERROR=\u4e3a ''{1}'' \u8bbe\u7f6e\u503c ''{0}'' \u65f6\u53d1\u751f\u8f6c\u6362\u9519\u8bef\u3002 
-com.sun.faces.VALIDATION_COMMAND_ERROR=\u9a8c\u8bc1\u9519\u8bef\u3002''{0}'' \u5fc5\u987b\u5177\u6709\u503c\u6216\u56fe\u50cf\u5c5e\u6027\u3002
-com.sun.faces.VALIDATION_EL_ERROR=\u9a8c\u8bc1\u9519\u8bef\u3002''{0}'' \u7684\u8868\u8fbe\u5f0f\u65e0\u6548
-com.sun.faces.VALIDATION_ID_ERROR=\u9a8c\u8bc1\u9519\u8bef\u3002\u4ee5\u4e0b JSF \u6807\u8bb0\u5fc5\u987b\u5305\u542b ID\uff1a''{0}''
-com.sun.faces.CANNOT_CONVERT=\u65e0\u6cd5\u4f7f\u7528\u8f6c\u6362\u5668 ID ''{0}'' \u6216\u7ed1\u5b9a ''{1}'' \u89e3\u6790 Converter \u5b9e\u4f8b\u3002
-com.sun.faces.CANNOT_VALIDATE=\u65e0\u6cd5\u4f7f\u7528\u9a8c\u8bc1\u5668 ID ''{0}'' \u6216\u7ed1\u5b9a ''{1}'' \u89e3\u6790 Validator \u5b9e\u4f8b\u3002
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] \u7c7b\u4e0d\u5b58\u5728
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] \u7c7b\u65e0\u6cd5\u88c5\u5165\uff0c\u539f\u56e0\u662f\u7f3a\u5c11\u4f9d\u8d56\u6027 -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] \u7c7b\u5305\u542b\u65e0\u53c2\u6570\u6784\u9020\u51fd\u6570\uff0c\u4f46\u5b83\u4e0d\u662f\u516c\u5f00\u7684
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] \u7c7b\u5305\u542b\u975e\u516c\u5f00\u65e0\u53c2\u6570\u6784\u9020\u51fd\u6570
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] \u7c7b\u4e0d\u5b9e\u73b0\u6216\u6269\u5c55 {2}
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=\u53d7\u7ba1 bean ''{0}'' \u5305\u542b\u5faa\u73af\u5f15\u7528\u3002\u8ba1\u7b97\u8def\u5f84\uff1a''{1}''\u3002
-com.sun.faces.OBJECT_IS_READONLY={0} \u5bf9\u8c61\u662f\u53ea\u8bfb\u5bf9\u8c61
-com.sun.faces.INCORRECT_JSP_VERSION=\u5bb9\u5668\u7684 JSP \u7248\u672c\u4f3c\u4e4e\u5c0f\u4e8e 2.1\uff0c\u65e0\u6cd5\u627e\u5230 EL RI \u8868\u8fbe\u5f0f\u5de5\u5382 ''{0}''\u3002\u5982\u679c\u4e0d\u4f7f\u7528 JSP \u6216 EL RI\uff0c\u8bf7\u786e\u4fdd\u4e0a\u4e0b\u6587\u521d\u59cb\u5316\u53c2\u6570 ''{1}'' \u5df2\u6b63\u786e\u8bbe\u7f6e\u3002
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=\u7d22\u5f15 {1} \u8d85\u51fa\u4e86 {0} \u7684\u9650\u5236
-com.sun.faces.PROPERTY_TYPE_ERROR={0} \u4e0d\u662f Array \u6216 List \u7c7b\u578b\u3002
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=\u7d22\u5f15 {1} \u7684\u957f\u5ea6 {2} \u8d85\u51fa\u4e86 {0} \u7684\u9650\u5236
-com.sun.faces.RESTORE_VIEW_ERROR=\u65e0\u6cd5\u6062\u590d\u89c6\u56fe ''{0}''\u3002
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=\u65e0\u6cd5\u5199\u5165 ID \u5c5e\u6027\uff1a''{0}''\u3002
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=\u672a\u5d4c\u5957\u5728 UIComponentTag \u4e2d\u3002
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=\u6ca1\u6709\u4e0e UIComponentTag \u5173\u8054\u7684\u7ec4\u4ef6\u3002
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=\u65e0\u6cd5\u5c06 JavaScript \u6587\u4ef6\u5199\u5165\u5ba2\u6237\u673a\u3002
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=\u4e00\u4e2a\u6216\u591a\u4e2a\u8d44\u6e90\u5177\u6709 ''{0}'' \u7684\u76ee\u6807\uff0c\u4f46\u89c6\u56fe\u4e2d\u5374\u672a\u5b9a\u4e49 ''{0}'' \u7ec4\u4ef6\u3002
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_zh_TW.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_zh_TW.properties
deleted file mode 100644
index c8de8db..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Messages_zh_TW.properties
+++ /dev/null
@@ -1,181 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-#
-# The contents of this file are subject to the terms of either the GNU
-# General Public License Version 2 only ("GPL") or the Common Development
-# and Distribution License("CDDL") (collectively, the "License").  You
-# may not use this file except in compliance with the License. You can obtain
-# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-# or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-# language governing permissions and limitations under the License.
-#
-# When distributing the software, include this License Header Notice in each
-# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-# Sun designates this particular file as subject to the "Classpath" exception
-# as provided by Sun in the GPL Version 2 section of the License file that
-# accompanied this code.  If applicable, add the following below the License
-# Header, with the fields enclosed by brackets [] replaced by your own
-# identifying information: "Portions Copyrighted [year]
-# [name of copyright owner]"
-#
-# Contributor(s):
-#
-# If you wish your version of this file to be governed by only the CDDL or
-# only the GPL Version 2, indicate your decision by adding "[Contributor]
-# elects to include this software in this distribution under the [CDDL or GPL
-# Version 2] license."  If you don't indicate a single choice of license, a
-# recipient has the option to distribute your version of this file under
-# either the CDDL, the GPL Version 2 or to extend the choice of license to
-# its licensees as provided above.  However, if you add GPL Version 2 code
-# and therefore, elected the GPL Version 2 license, then the option applies
-# only if the new code is made subject to such option by the copyright
-# holder.
-#
-
-com.sun.faces.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK=\u672a\u5728\u547c\u53eb ConfigureListener.contextInitialized() \u7684\u76f8\u540c\u547c\u53eb\u5806\u758a\u4e2d\u547c\u53eb ApplicationAssociate ctor\u3002
-com.sun.faces.APPLICATION_ASSOCIATE_EXISTS=\u5c0d\u65bc\u6b64 Web \u61c9\u7528\u7a0b\u5f0f\uff0cApplicationAssociate \u5df2\u7d93\u5b58\u5728\u3002
-com.sun.faces.ASSERTION_FAILED=\u6307\u5b9a\u5931\u6557
-com.sun.faces.ATTRIBUTE_NOT_SUPORTED=\u5143\u4ef6\u985e\u578b\u300c{1}\u300d\u4e0d\u652f\u63f4\u5c6c\u6027\u300c{0}\u300d\u3002
-com.sun.faces.CANT_CONVERT_VALUE=\u7121\u6cd5\u5c07\u7279\u6027\u300c{0}\u300d\u8f49\u63db\u70ba\u503c\u985e\u578b\u300c{1}\u300d\u3002
-com.sun.faces.CANT_CLOSE_INPUT_STREAM=\u7121\u6cd5\u95dc\u9589\u8f38\u5165\u4e32\u6d41\u3002
-com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=\u7121\u6cd5\u5efa\u7acb ID\u300c{0}\u300d\u7684\u751f\u547d\u9031\u671f\u3002
-com.sun.faces.CANT_INSTANTIATE_CLASS=\u7121\u6cd5\u5be6\u4f8b\u5316\u985e\u5225:\u300c{0}\u300d\u3002
-com.sun.faces.CANT_INTROSPECT_CLASS=\u7121\u6cd5\u5167\u8996\u985e\u5225:\u300c{0}\u300d
-com.sun.faces.CANT_PARSE_FILE=\u7121\u6cd5\u5256\u6790\u6a94\u6848\u300c{0}\u300d\uff1a\u884c {1} \u6b04 {2} \u767c\u751f\u932f\u8aa4: {3}\u3002
-com.sun.faces.CHILD_NOT_OF_EXPECTED_TYPE=\u5c0d\u65bc\u5143\u4ef6\u985e\u578b\u300c{1}({2})\u300d\uff0c\u9810\u671f\u7684\u5b50\u5143\u4ef6\u985e\u578b\u70ba\u300c{0}\u300d\u3002\u4f46\u662f\u537b\u627e\u5230\u300c{3}\u300d\u3002
-com.sun.faces.COMMAND_LINK_NO_FORM_MESSAGE=\uff1a\u6b64\u9023\u7d50\u5df2\u505c\u7528\uff0c\u56e0\u70ba\u5b83\u672a\u5d4c\u5957\u5728 JSF \u8868\u55ae\u5167\u3002
-com.sun.faces.COMMAND_NOT_NESTED_WITHIN_FORM=\u6aa2\u8996\u5167\u627e\u5230\u4e00\u6216\u591a\u500b UICommand \u5be6\u4f8b\u672a\u5d4c\u5957\u5728 UIForm \u5167\u3002\u5c07\u4e0d\u6703\u547c\u53eb\u8207\u9019\u4e9b\u6307\u4ee4\u76f8\u95dc\u806f\u7684\u52d5\u4f5c\u3002
-com.sun.faces.COMPONENT_NOT_FOUND_ERROR=\u672a\u627e\u5230\u8b58\u5225\u78bc\u300c{0}\u300d\u7684\u5143\u4ef6\u3002
-com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=\u5728\u6aa2\u8996\u4e2d\u627e\u4e0d\u5230 ID \u70ba\u300c{0}\u300d\u7684\u5143\u4ef6\u3002
-com.sun.faces.CONTENT_TYPE_ERROR=\u7121\u6cd5\u8fa8\u8b58\u7684\u5167\u5bb9\u985e\u578b\u3002
-com.sun.faces.CONFIG_RENDERER_REGISTRATION_MISSING_RENDERKIT=\u7121\u6cd5\u4f7f\u7528 ID {0} \u8a3b\u518a\u5177\u6709 RenderKit \u7684\u7de8\u8b6f\u5668\u3002RenderKit \u4e0d\u5b58\u5728\u3002
-com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=\u5728\u6aa2\u8996\u4e2d\u5df2\u627e\u5230\u5143\u4ef6 ID\u300c{0}\u300d\u3002
-com.sun.faces.EMPTY_PARAMETER=\u53c3\u6578\u662f\u7a7a\u7684
-com.sun.faces.ENCODING_ERROR=\u7121\u6cd5\u8fa8\u8b58\u7684\u5b57\u5143\u7de8\u78bc\u3002
-com.sun.faces.ERROR_GETTING_VALUE_BINDING=\u7121\u6cd5\u53d6\u5f97\u503c\u300c{0}\u300d\u7684 ValueBinding\u3002
-com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=\u7121\u6cd5\u5f9e\u9023\u7d50\u8868\u793a\u5f0f\u300c{0}\u300d\u53d6\u5f97\u503c\u3002
-com.sun.faces.ERROR_OPENING_FILE=\u7121\u6cd5\u958b\u555f\u914d\u7f6e\u6a94\u6848:\u300c{0}\u300d\u3002
-com.sun.faces.ERROR_PROCESSING_CONFIG=\u914d\u7f6e\u8655\u7406\u671f\u9593\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4\u3002 
-com.sun.faces.ERROR_REGISTERING_DTD=\u7121\u6cd5\u8a3b\u518a DTD:\u300c{0}\u300d\u3002
-com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=\u7121\u6cd5\u8a2d\u5b9a\u53d7\u7ba1 Bean \u7279\u6027:\u300c{0}\u300d\u3002
-com.sun.faces.EVAL_ATTR_UNEXPECTED_TYPE=\u5c6c\u6027\u300c{0}\u300d\u8868\u793a\u5f0f\u7684\u8a08\u7b97\u5f97\u5230\u672a\u9810\u671f\u7684\u985e\u578b\u3002\u9810\u671f\u70ba {1}\uff0c\u4f46\u6536\u5230 {2}\u3002
-com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=\u5efa\u69cb\u932f\u8aa4\uff1a\u4e00\u6216\u591a\u500b\u8f38\u5165\u53c3\u6578\u53ef\u80fd\u70ba\u7a7a\u503c\u3002
-com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=\u7121\u6cd5\u78ba\u5b9a Servlet \u8def\u5f91\u300c{0}\u300d\u7684 FaceServlet \u5c0d\u6620\u3002
-com.sun.faces.FACES_SERVLET_MAPPING_INCORRECT=FacesServlet \u4e0d\u80fd\u6709\u300c/*\u300durl-pattern\u3002\u8acb\u5b9a\u7fa9\u4e0d\u540c\u7684 url-pattern\u3002
-com.sun.faces.FACES_CONTEXT_NOT_FOUND=\u7121 FacesContext \u53ef\u7528\u65bc\u8655\u7406\u6b64\u8acb\u6c42\u3002\u5f88\u53ef\u80fd\u662f\u7531\u65bc\u5c07\u8acb\u6c42\u50b3\u9001\u81f3\u932f\u8aa4\u7684\u8def\u5f91\u3002
-com.sun.faces.FILE_NOT_FOUND=\u627e\u4e0d\u5230\u6a94\u6848:\u300c{0}\u300d\u3002
-com.sun.faces.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT=\u7522\u751f\u56de\u61c9\u5f8c\uff0c\u8a2d\u5b9a {0} \u7684\u5617\u8a66\u975e\u6cd5\u3002
-com.sun.faces.ILLEGAL_CHARACTERS_ERROR=\u4e0d\u5141\u8a31\u5b57\u5143\u3002
-com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=lValue \u6a21\u5f0f\u300c{0}\u300d\u4e2d\u4f7f\u7528\u96b1\u5f0f\u7269\u4ef6\u8b58\u5225\u78bc\u975e\u6cd5
-com.sun.faces.ILLEGAL_MODEL_REFERENCE=\u5728\u6b64\u74b0\u5883\u4e2d\uff0c\u8868\u793a\u5f0f\u300c{0}\u300d\u7684\u6a21\u578b\u53c3\u7167\u975e\u6cd5\u3002
-com.sun.faces.ILLEGAL_VIEW_ID=\u975e\u6cd5\u6aa2\u8996 ID\u300c{0}\u300d\u3002ID \u5fc5\u9808\u4ee5\u300c/\u300d\u958b\u982d
-com.sun.faces.INVALID_EXPRESSION=\u7121\u6548\u7684\u8868\u793a\u5f0f:\u300c{0}\u300d\u3002
-com.sun.faces.INVALID_INIT_PARAM=\u521d\u59cb\u5316\u53c3\u6578\u300c{1}\u300d\u7684\u503c\u300c{0}\u300d\u7121\u6548\u3002\u53ef\u63a5\u53d7\u7684\u503c\u70ba\u300ctrue\u300d\u6216\u300cfalse\u300d\u3002\u9810\u8a2d\u70ba\u300cfalse\u300d\u3002
-com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=\u914d\u7f6e\u4e2d\u5b9a\u7fa9\u7684\u8a0a\u606f\u56b4\u91cd\u6027\u300c{0}\u300d\u7121\u6548\u3002
-com.sun.faces.INVALID_SCOPE_LIFESPAN=\u8868\u793a\u5f0f\u300c{0}\u300d\u53c3\u7167\u7684\u7269\u4ef6\u7bc4\u570d\u300c{1}\u300d\u6bd4\u53c3\u7167\u300c{3}\u300d\u7684\u53d7\u7ba1 Bean (\u300c{2}\u300d) \u7bc4\u570d\u77ed\u3002
-com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=\u5df2\u589e\u52a0 ID\u300c{0}\u300d\u7684 LifecycleId\u3002
-com.sun.faces.LIFECYCLE_ID_NOT_FOUND=\u627e\u4e0d\u5230 ID\u300c{0}\u300d\u7684 LifecycleId\u3002
-com.sun.faces.MAXIMUM_EVENTS_REACHED=\u5df2\u9054\u4e8b\u4ef6\u7684\u6700\u5927\u6578\u76ee\u300c{0}\u300d\u3002
-com.sun.faces.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY=\u7121\u6cd5\u5728\u53d7\u7ba1 Bean\u300c{1}\u300d\u4e2d\u8a2d\u5b9a\u76ee\u6a19\u7279\u6027\u300c{0}\u300d\u3002\u6b64\u7279\u6027\u5fc5\u9808\u63a5\u53d7\u6e05\u55ae\u6216\u9663\u5217\u5be6\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u4e2d\u7684\u7279\u6027\u300c{0}\u300d\u5b9a\u7fa9\u70ba\u5c0d\u6620\u7279\u6027\uff0c\u4f46\u985e\u5225\u4e2d\u7684 setter \u4e0d\u63a5\u53d7\u5c0d\u6620\u5be6\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u4e2d\u7684\u7279\u6027\u300c{0}\u300d\u5b9a\u7fa9\u70ba\u5c0d\u6620\u7279\u6027\uff0c\u4f46\u985e\u5225\u4e2d\u7684 getter \u4e0d\u6703\u50b3\u56de\u5c0d\u6620\u5be6\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u4e2d\u7684\u7279\u6027\u300c{0}\u300d\u5b9a\u7fa9\u70ba\u6e05\u55ae\u7279\u6027\uff0c\u4f46\u985e\u5225\u4e2d\u7684 setter \u4e0d\u63a5\u53d7\u6e05\u55ae\u6216\u9663\u5217\u5be6\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_LIST_SETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u4e2d\u7684\u7279\u6027\u300c{0}\u300d\u5b9a\u7fa9\u70ba\u6e05\u55ae\u7279\u6027\uff0c\u4f46\u985e\u5225\u4e2d\u7684 getter \u4e0d\u6703\u50b3\u56de\u6e05\u55ae\u6216\u9663\u5217\u5be6\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u4e2d\u7684\u7279\u6027\u300c{0}\u300d\u5b9a\u7fa9\u70ba\u6e05\u55ae\u7279\u6027\u3002getter \u6703\u50b3\u56de\u9663\u5217\u985e\u578b\uff0c\u4f46\u6c92\u6709\u76f8\u95dc\u806f\u7684 setter\u3002
-com.sun.faces.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST=\u7121\u6cd5\u5728\u53d7\u7ba1 Bean\u300c{1}\u300d\u4e2d\u8a2d\u5b9a\u76ee\u6a19\u7279\u6027\u300c{0}\u300d\u3002\u76ee\u6a19\u7279\u6027\u50b3\u56de\u7684\u73fe\u6709\u503c\u4e0d\u662f\u6e05\u55ae\u7684\u5be6\u4f8b\u3002
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=\u53d7\u7ba1 Bean\u300c{0}\u300d\u7684\u914d\u7f6e\u4e0d\u6b63\u78ba\u3002\u53d7\u7ba1 Bean \u914d\u7f6e\u70ba\u6e05\u55ae\uff0c\u4f46\u4e5f\u5617\u8a66\u5b9a\u7fa9\u5c0d\u6620\u9805\u76ee\u6216\u53d7\u7ba1\u7279\u6027\u3002
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=\u53d7\u7ba1 Bean\u300c{0}\u300d\u7684\u914d\u7f6e\u4e0d\u6b63\u78ba\u3002\u53d7\u7ba1 Bean \u914d\u7f6e\u70ba\u5c0d\u6620\uff0c\u4f46\u4e5f\u5617\u8a66\u5b9a\u7fa9\u53d7\u7ba1\u7279\u6027\u3002
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=\u53d7\u7ba1 Bean\u300c{0}\u300d\u7684\u914d\u7f6e\u4e0d\u6b63\u78ba\u3002\u53d7\u7ba1 Bean \u542b\u6709\u5177\u6709\u6e05\u55ae\u9805\u76ee\u7684\u53d7\u7ba1\u7279\u6027\u300c{1}\u300d\uff0c\u4f46\u975e\u6cd5\u5b9a\u7fa9\u4e86\u503c\u548c/\u6216\u5c0d\u6620\u9805\u76ee\u3002
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=\u53d7\u7ba1 Bean\u300c{0}\u300d\u7684\u914d\u7f6e\u4e0d\u6b63\u78ba\u3002\u53d7\u7ba1 Bean \u542b\u6709\u5177\u6709\u5c0d\u6620\u9805\u76ee\u7684\u53d7\u7ba1\u7279\u6027\u300c{1}\u300d\uff0c\u4f46\u4e5f\u975e\u6cd5\u5b9a\u7fa9\u4e86\u503c\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=\u53d7\u7ba1 Bean\u300c{0}\u300d\u7684\u914d\u7f6e\u4e0d\u6b63\u78ba\u3002\u53d7\u7ba1 Bean \u542b\u6709\u672a\u5305\u542b\u6e05\u55ae\u6216\u5c0d\u6620\u9805\u76ee\u6216\u4efb\u4f55\u503c\u5143\u7d20\u7684\u53d7\u7ba1\u7279\u6027\u300c{1}\u300d\u3002
-com.sun.faces.MANAGED_BEAN_TYPE_CONVERSION_ERROR=\u91dd\u5c0d\u53d7\u7ba1 Bean\u300c{3}\u300d\uff0c\u5c07\u985e\u578b\u300c{1}\u300d\u7684\u503c\u300c{0}\u300d\u8f49\u63db\u70ba\u985e\u578b\u300c{2}\u300d\u6642\u767c\u751f\u932f\u8aa4\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR=\u627e\u4e0d\u5230\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684 Bean \u6216\u7279\u6027\u985e\u5225\u300c{0}\u300d\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR=\u7121\u6cd5\u8f09\u5165\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684 Bean \u6216\u7279\u6027\u985e\u5225\u300c{0}\u300d\uff0c\u539f\u56e0\u662f\u7f3a\u5c11\u76f8\u4f9d\u6027: {2}\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u53d7\u7ba1 Bean \u985e\u5225\u300c{0}\u300d\u672a\u5ba3\u544a\u70ba\u516c\u7528\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u53d7\u7ba1 Bean \u985e\u5225\u300c{0}\u300d\u5ba3\u544a\u70ba\u62bd\u8c61\u6216\u4ecb\u9762\u3002
-com.sun.faces.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u53d7\u7ba1 Bean \u985e\u5225\u300c{0}\u300d\u672a\u5ba3\u544a\u516c\u7528\u7121\u5f15\u6578\u5efa\u69cb\u5b50\u3002
-com.sun.faces.MANAGED_BEAN_INJECTION_ERROR=\u5728\u53d7\u7ba1 Bean\u300c{0}\u300d\u4e0a\u57f7\u884c\u8cc7\u6e90\u5f15\u5165\u6642\u767c\u751f\u932f\u8aa4\u3002
-com.sun.faces.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u7279\u6027\u300c{0}\u300d\u4f7f\u7528\u7279\u6027\u985e\u5225\u300c{2}\u300d\u5b9a\u7fa9\uff0c\u4f46\u6b64\u985e\u5225\u7121\u6cd5\u6307\u5b9a\u7d66\u7279\u6027\u3002
-com.sun.faces.MANAGED_BEAN_INTROSPECTION_ERROR=\u7121\u6cd5\u5167\u8996\u53d7\u7ba1 Bean\u300c{0}\u300d
-com.sun.faces.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u7279\u6027\u300c{0}\u300d\u4e0d\u5b58\u5728\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u7279\u6027\u300c{0}\u300d\u6c92\u6709 setter\u3002
-com.sun.faces.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR=\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u7279\u6027\u300c{0}\u300d\u63a5\u53d7\u8d85\u904e\u4e00\u500b\u5f15\u6578\u3002
-com.sun.faces.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR=\u7121\u6cd5\u8a2d\u5b9a\u53d7\u7ba1 Bean\u300c{1}\u300d\u7684\u7279\u6027\u300c{0}\u300d\u3002
-com.sun.faces.MANAGED_BEAN_PROBLEMS_ERROR=\u7121\u6cd5\u5efa\u7acb\u53d7\u7ba1 Bean\u300c{0}\u300d\u3002\u627e\u5230\u4e0b\u5217\u554f\u984c\uff1a
-com.sun.faces.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR=JSF \u6536\u5230\u8acb\u6c42\u6642\u5c07\u7121\u6cd5\u5efa\u7acb\u53d7\u7ba1 Bean\u300c{0}\u300d\u3002\u627e\u5230\u4e0b\u5217\u554f\u984c\uff1a
-com.sun.faces.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR=\u8655\u7406\u53d7\u7ba1 Bean\u300c{0}\u300d\u6642\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4
-com.sun.faces.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR=\u8655\u7406\u53d7\u7ba1\u7279\u6027\u300c{0}\u300d\u6642\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=\u7bc4\u570d\u300c{0}\u300d\u4e0d\u662f\u300cview\u300d\u300crequest\u300d\u300csession\u300d\u3001\u300capplication\u300d\u5176\u4e2d\u4e4b\u4e00\uff0c\u4e5f\u4e0d\u662f\u4ee3\u8868 ValueExpression (#{...})
-com.sun.faces.MISSING_CLASS_ERROR=\u7f3a\u5c11\u985e\u5225\uff1a\u7121\u6cd5\u8f09\u5165\u985e\u5225\u300c{0}\u300d\u3002
-com.sun.faces.MISSING_RESOURCE_ERROR=\u7f3a\u5c11\u8cc7\u6e90\uff1a\u7121\u6cd5\u53d6\u5f97 ResourceBundle\u3002
-com.sun.faces.MODELUPDATE_ERROR=\u6a21\u578b\u66f4\u65b0\u5931\u6557\uff0c\u56e0\u70ba\u6a21\u578b\u300c{1}\u300d\u4e2d\u5b58\u5728\u503c\u300c{0}\u300d\u3002
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME=\u7121\u6cd5\u5f9e\u6aa2\u8996 ID\u300c{0}\u300d\u4e2d\u70ba\u7d50\u679c\u300c{1}\u300d\u627e\u5230\u76f8\u7b26\u7684\u700f\u89bd\u689d\u4ef6
-com.sun.faces.NAVIGATION_NO_MATCHING_OUTCOME_ACTION=\u7121\u6cd5\u5f9e\u6aa2\u8996 ID\u300c{0}\u300d\u4e2d\u70ba\u5177\u6709\u7d50\u679c\u300c{2}\u300d\u7684\u52d5\u4f5c\u300c{1}\u300d\u627e\u5230\u76f8\u7b26\u7684\u700f\u89bd\u689d\u4ef6
-com.sun.faces.NAVIGATION_INVALID_QUERY_STRING=\u7d50\u679c\u300c{0}\u300d\u4e2d\u7684\u67e5\u8a62\u5b57\u4e32\u7121\u6548
-com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=\u8868\u793a\u5f0f\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u5df2\u547d\u540d\u7684\u7269\u4ef6:\u300c{0}\u300d\u3002
-com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=\u8655\u7406\u7a0b\u5f0f\u985e\u5225\u70ba\u300c{0}\u300d\u6a19\u8a18\u767c\u751f\u300c\u672a\u5d4c\u5957\u65bc UIComponentTag \u4e2d\u300d\u7684\u932f\u8aa4\u3002
-com.sun.faces.NOT_NESTED_IN_TYPE_TAG_ERROR={0} \u6a19\u8a18\u61c9\u8a72\u5d4c\u5957\u5728\u8207 {1} \u985e\u578b\u5143\u4ef6\u76f8\u95dc\u806f\u7684\u6a19\u8a18\u4e2d\u3002
-com.sun.faces.NO_DTD_FOUND_ERROR=\u5728\u8def\u5f91\u300c{1}\u300d\u4e2d\u627e\u4e0d\u5230\u5177\u6709 PUBLIC ID\u300c{0}\u300d\u7684 DTD\u3002
-com.sun.faces.NULL_BODY_CONTENT_ERROR=\u5c0d\u65bc\u5177\u6709\u8655\u7406\u5668\u985e\u5225:\u300c{0}\u300d\u7684\u6a19\u8a18\uff0cBodyContent \u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_COMPONENT_ERROR=\u5efa\u69cb\u932f\u8aa4\uff1a\u5143\u4ef6\u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_CONFIGURATION=\u672a\u8f09\u5165\u61c9\u7528\u7a0b\u5f0f\u7684\u914d\u7f6e\u3002
-com.sun.faces.NULL_CONTEXT_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u74b0\u5883\u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_EVENT_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u4e8b\u4ef6\u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_FORVALUE=\u627e\u4e0d\u5230\u5143\u4ef6\u300c{0}\u300d
-com.sun.faces.NULL_HANDLER_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u8655\u7406\u5668\u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_LOCALE_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u8a9e\u8a00\u74b0\u5883\u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_MESSAGE_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u8a0a\u606f\u53c3\u6578\u4e0d\u80fd\u70ba\u7a7a\u503c
-com.sun.faces.NULL_PARAMETERS_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u53c3\u6578\u300c{0}\u300d\u70ba\u7a7a\u503c
-com.sun.faces.NULL_REQUEST_VIEW_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u8acb\u6c42\u6aa2\u8996\u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_RESPONSE_STREAM_ERROR=\u5f15\u6578\u932f\u8aa4\uff1aResponseStream \u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_RESPONSE_VIEW_ERROR=\u5f15\u6578\u932f\u8aa4\uff1aResponseView \u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.NULL_RESPONSE_WRITER_ERROR=\u5f15\u6578\u932f\u8aa4\uff1aResponseWriter \u5f15\u6578\u70ba\u7a7a\u503c\u3002
-com.sun.faces.OBJECT_CREATION_ERROR=\u7121\u6cd5\u5efa\u7acb\u4e00\u6216\u591a\u500b\u914d\u7f6e\u7684\u61c9\u7528\u7a0b\u5f0f\u7269\u4ef6\u3002\u8a73\u7d30\u8cc7\u8a0a\u8acb\u67e5\u770b Web \u61c9\u7528\u7a0b\u5f0f\u8a18\u9304\u6a94\u3002
-com.sun.faces.OPTION_NOT_SELECT_ITEM=\u5f15\u6578\u932f\u8aa4\uff1a\u5143\u4ef6\u300c{0}\u300d\u7684\u9078\u9805\u4e0d\u662f javax.faces.model.SelectItem \u7684\u5be6\u4f8b\u3002\u627e\u5230\u985e\u578b\uff1a\u300c{1}\u300d\u3002
-com.sun.faces.OUTCOME_TARGET_BUTTON_NO_MATCH=\uff1a\u6b64\u6309\u9215\u505c\u7528\uff0c\u539f\u56e0\u662f\u700f\u89bd\u689d\u4ef6\u4e0d\u7b26\u3002
-com.sun.faces.OUTCOME_TARGET_LINK_NO_MATCH=\uff1a\u6b64\u9023\u7d50\u505c\u7528\uff0c\u539f\u56e0\u662f\u700f\u89bd\u689d\u4ef6\u4e0d\u7b26\u3002
-com.sun.faces.PHASE_ID_OUT_OF_BOUNDS= PhaseId \u8d85\u51fa ID\u300c{0}\u300d\u7684\u754c\u9650\u3002
-com.sun.faces.RENDERER_NOT_FOUND=\u627e\u4e0d\u5230\u7de8\u8b6f\u5668\u985e\u578b\u70ba\u300c{0}\u300d\u7684\u7de8\u8b6f\u5668\u3002
-com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=\u72c0\u614b\u932f\u8aa4\uff1a\u6b64\u8acb\u6c42\u5df2\u8a2d\u5b9a RequestView\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_ERROR=\u8cc7\u6e90\u683c\u5f0f\u7121\u6548\u3002\u7121\u6cd5\u5256\u6790\u7279\u6027\u300c{0}\u300d\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_COLON_ERROR=\u8cc7\u6e90\u683c\u5f0f\u7121\u6548\u3002\u7279\u6027\u300c{0}\u300d\u542b\u6709\u8d85\u904e\u4e00\u500b\u5192\u865f (:)\u3002
-com.sun.faces.RESOURCE_INVALID_FORMAT_NO_LIBRARY_NAME_ERROR=\u8cc7\u6e90\u683c\u5f0f\u7121\u6548\u3002\u7121\u6cd5\u5256\u6790\u7279\u6027\u300c{0}\u300d\u4f86\u64f7\u53d6\u8cc7\u6e90\u540d\u7a31\u548c\u7a0b\u5f0f\u5eab\u540d\u7a31\u3002
-com.sun.faces.SAVING_STATE_ERROR=\u5132\u5b58\u72c0\u614b\u6642\u767c\u751f\u932f\u8aa4\u3002
-com.sun.faces.SUPPORTS_COMPONENT_ERROR=\u5f15\u6578\u932f\u8aa4\uff1a\u6b64\u7de8\u8b6f\u5668\u4e0d\u652f\u63f4\u300c{0}\u300d\u3002
-com.sun.faces.TYPECONVERSION_ERROR=\u8a2d\u5b9a\u300c{1}\u300d\u7684\u503c\u300c{0}\u300d\u6642\u767c\u751f\u8f49\u63db\u932f\u8aa4\u3002 
-com.sun.faces.VALIDATION_COMMAND_ERROR=\u9a57\u8b49\u932f\u8aa4\u3002\u300c{0}\u300d\u5fc5\u9808\u5177\u6709\u503c\u6216\u5f71\u50cf\u5c6c\u6027\u3002
-com.sun.faces.VALIDATION_EL_ERROR=\u9a57\u8b49\u932f\u8aa4\u3002\u8868\u793a\u5f0f\u5c0d\u65bc\u300c{0}\u300d\u7121\u6548
-com.sun.faces.VALIDATION_ID_ERROR=\u9a57\u8b49\u932f\u8aa4\u3002\u4e0b\u5217 JSF \u6a19\u8a18\u5fc5\u9808\u542b\u6709 ID:\u300c{0}\u300d
-com.sun.faces.CANNOT_CONVERT=\u7121\u6cd5\u4f7f\u7528 converterId\u300c{0}\u300d\u6216 binding\u300c{1}\u300d\u89e3\u6790\u8f49\u63db\u5668\u5be6\u4f8b\u3002
-com.sun.faces.CANNOT_VALIDATE=\u7121\u6cd5\u4f7f\u7528 validatorId\u300c{0}\u300d\u6216 binding\u300c{1}\u300d\u89e3\u6790\u9a57\u8b49\u5668\u5be6\u4f8b\u3002
-com.sun.faces.verifier.CLASS_NOT_FOUND=[{0}:{1}] \u985e\u5225\u4e0d\u5b58\u5728
-com.sun.faces.verifier.CLASS_MISSING_DEP=[{0}:{1}] \u7121\u6cd5\u8f09\u5165\u985e\u5225\uff0c\u539f\u56e0\u662f\u7f3a\u5c11\u76f8\u4f9d\u6027 -> {2}
-com.sun.faces.verifier.NON_PUBLIC_DEF_CTOR=[{0}:{1}] \u985e\u5225\u542b\u6709\u7121\u5f15\u6578\u5efa\u69cb\u5b50\uff0c\u4f46\u5b83\u4e0d\u662f\u516c\u7528\u7684
-com.sun.faces.verifier.NO_DEF_CTOR=[{0}:{1}] \u985e\u5225\u542b\u6709\u7121\u516c\u7528\u3001\u7121\u5f15\u6578\u5efa\u69cb\u5b50
-com.sun.faces.verifier.WRONG_TYPE=[{0}:{1}] \u985e\u5225\u672a\u5be6\u4f5c\u6216\u5ef6\u4f38 {2}
-
-
-com.sun.faces.CYCLIC_REFERENCE_ERROR=\u53d7\u7ba1 Bean\u300c{0}\u300d\u542b\u6709\u5faa\u74b0\u53c3\u7167\u3002\u8a08\u7b97\u8def\u5f91:\u300c{1}\u300d\u3002
-com.sun.faces.OBJECT_IS_READONLY={0} \u7269\u4ef6\u70ba\u552f\u8b80
-com.sun.faces.INCORRECT_JSP_VERSION=\u5bb9\u5668\u7684 JSP \u7248\u672c\u4f3c\u4e4e\u6bd4 2.1 \u7248\u66f4\u820a\uff0c\u56e0\u6b64\u627e\u4e0d\u5230 EL RI \u8868\u793a\u5f0f\u5de5\u5ee0\u300c{0}\u300d\u3002\u5982\u679c\u672a\u4f7f\u7528 JSP \u6216 EL RI\uff0c\u8acb\u78ba\u5b9a\u74b0\u5883\u521d\u59cb\u5316\u53c3\u6578\u300c{1}\u300d\u6b63\u78ba\u8a2d\u5b9a\u3002
-
-#com.sun.faces.el.PropertyResolverImpl
-com.sun.faces.OUT_OF_BOUNDS_ERROR=\u7d22\u5f15 {1} \u8d85\u51fa {0} \u7684\u754c\u9650
-com.sun.faces.PROPERTY_TYPE_ERROR={0} \u4e0d\u662f\u9663\u5217\u6216\u6e05\u55ae\u985e\u578b\u3002
-com.sun.faces.SIZE_OUT_OF_BOUNDS_ERROR=\u7d22\u5f15 {1} \u7684\u9577\u5ea6\u70ba {2}\uff0c\u8d85\u51fa {0} \u7684\u754c\u9650
-com.sun.faces.RESTORE_VIEW_ERROR=\u6aa2\u8996\u300c{0}\u300d\u7121\u6cd5\u5fa9\u539f\u3002
-
-com.sun.faces.CANT_WRITE_ID_ATTRIBUTE=\u7121\u6cd5\u5beb\u5165 ID \u5c6c\u6027:\u300c{0}\u300d\u3002
-com.sun.faces.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR=\u672a\u5d4c\u5957\u5728 UIComponentTag \u4e2d\u3002
-com.sun.faces.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG=\u6c92\u6709\u8207 UIComponentTag \u76f8\u95dc\u806f\u7684\u5143\u4ef6\u3002
-
-com.sun.faces.JS_RESOURCE_WRITING_ERROR=\u7121\u6cd5\u5c07 JavaScript \u6a94\u6848\u5beb\u5165\u7528\u6236\u7aef\u3002
-
-com.sun.faces.RESOURCE_TARGET_NOT_AVAILABLE=\u4e00\u6216\u591a\u500b\u8cc7\u6e90\u5177\u6709\u76ee\u6a19\u300c{0}\u300d\uff0c\u4f46\u6aa2\u8996\u5167\u672a\u5b9a\u7fa9\u4efb\u4f55\u300c{0}\u300d\u5143\u4ef6\u3002
-com.sun.faces.ARGUMENTS_NOT_LEGAL_WITH_CC_ATTRS_EXPR=Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
-com.sun.faces.partial.statesaving.ERROR_RESTORING_STATE_FOR_COMPONENT=Unexpected error restoring state for component with id ''{0}''.  Cause: {1}.
-com.sun.faces.MISSING_COMPONENT_ATTRIBUTE_VALUE=The following attribute(s) are required, but no values have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_FACET=The following facets(s) are required, but no facets have been supplied for them: ''{0}''.
-com.sun.faces.MISSING_COMPONENT_METADATA=The composite component metadata for component with clientid ''{0}'' cannot be found.  
diff --git a/jsf-ri/src/main/resources/com/sun/faces/resources/Resources.properties b/jsf-ri/src/main/resources/com/sun/faces/resources/Resources.properties
deleted file mode 100644
index 6af6356..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/resources/Resources.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#########################################################################
-# Generic tag error messages
-#
-# ResourceBundle is required for the TLV since the JSF runtime is not
-# available during pre-compilation and the validators are executed
-# during that time. The validators cannot be dependant on the JSF runtime
-# objects including the MessagesFactory.
-#
-#########################################################################
-
-#########################################################################
-# JSF core TLV messages
-#########################################################################
-
-TLV_EL_ERROR=\
-    Validation error. Expression invalid for:"{0}"
-
-TLV_ID_ERROR=\
-    Validation error. The following JSF tags are required to contain IDs:"{0}"
-
-TLV_LISTENER_ERROR=\
-    Validation error. "{0}" must have binding and/or type attribute.
-
-TLV_CONVERTER_ERROR=\
-    Validation error. "{0}" must have binding and/or converterId attribute. 
-
-TLV_VALIDATOR_ERROR=\
-    Validation error. "{0}" must have binding and/or validatorId attribute. 
-
-#########################################################################
-# JSF html TLV messages
-#########################################################################
-
-TLV_COMMAND_ERROR=\
-    Validation error. "{0}" must have value or image attributes.
diff --git a/jsf-ri/src/main/resources/com/sun/faces/standard-html-renderkit-impl.xml b/jsf-ri/src/main/resources/com/sun/faces/standard-html-renderkit-impl.xml
deleted file mode 100644
index 026ac3a..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/standard-html-renderkit-impl.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<root>
-    <command-button-renderer-class>
-        com.sun.faces.renderkit.html_basic.ButtonRenderer
-    </command-button-renderer-class>
-    <command-link-renderer-class>
-        com.sun.faces.renderkit.html_basic.CommandLinkRenderer
-    </command-link-renderer-class>
-    <data-table-renderer-class>
-        com.sun.faces.renderkit.html_basic.TableRenderer
-    </data-table-renderer-class>
-    <form-form-renderer-class>
-        com.sun.faces.renderkit.html_basic.FormRenderer
-    </form-form-renderer-class>
-    <graphic-image-renderer-class>
-        com.sun.faces.renderkit.html_basic.ImageRenderer
-    </graphic-image-renderer-class>
-    <input-hidden-renderer-class>
-        com.sun.faces.renderkit.html_basic.HiddenRenderer
-    </input-hidden-renderer-class>
-    <input-secret-renderer-class>
-        com.sun.faces.renderkit.html_basic.SecretRenderer
-    </input-secret-renderer-class>
-    <input-text-renderer-class>
-        com.sun.faces.renderkit.html_basic.TextRenderer
-    </input-text-renderer-class>
-    <input-textarea-renderer-class>
-        com.sun.faces.renderkit.html_basic.TextareaRenderer
-    </input-textarea-renderer-class>
-    <message-message-renderer-class>
-        com.sun.faces.renderkit.html_basic.MessageRenderer
-    </message-message-renderer-class>
-    <messages-messages-renderer-class>
-        com.sun.faces.renderkit.html_basic.MessagesRenderer
-    </messages-messages-renderer-class>
-    <output-label-renderer-class>
-        com.sun.faces.renderkit.html_basic.LabelRenderer
-    </output-label-renderer-class>
-    <output-link-renderer-class>
-       com.sun.faces.renderkit.html_basic.OutputLinkRenderer
-    </output-link-renderer-class>
-    <outcome-target-link-renderer-class>
-       com.sun.faces.renderkit.html_basic.OutcomeTargetLinkRenderer
-    </outcome-target-link-renderer-class>
-    <outcome-target-button-renderer-class>
-       com.sun.faces.renderkit.html_basic.OutcomeTargetButtonRenderer
-    </outcome-target-button-renderer-class>
-    <output-format-renderer-class>
-        com.sun.faces.renderkit.html_basic.OutputMessageRenderer
-    </output-format-renderer-class>
-    <output-text-renderer-class>
-        com.sun.faces.renderkit.html_basic.TextRenderer
-    </output-text-renderer-class>
-    <output-body-renderer-class>
-        com.sun.faces.renderkit.html_basic.BodyRenderer
-    </output-body-renderer-class>
-    <output-head-renderer-class>
-        com.sun.faces.renderkit.html_basic.HeadRenderer
-    </output-head-renderer-class>
-    <output-script-renderer-class>
-        com.sun.faces.renderkit.html_basic.ScriptRenderer
-    </output-script-renderer-class>
-    <naming-container-composite-renderer-class>
-        com.sun.faces.renderkit.html_basic.CompositeRenderer
-    </naming-container-composite-renderer-class>
-    <output-composite-facet-renderer-class>
-        com.sun.faces.renderkit.html_basic.CompositeFacetRenderer
-    </output-composite-facet-renderer-class>
-
-    <output-stylesheet-renderer-class>
-        com.sun.faces.renderkit.html_basic.StylesheetRenderer
-    </output-stylesheet-renderer-class>
-    <panel-grid-renderer-class>
-        com.sun.faces.renderkit.html_basic.GridRenderer
-    </panel-grid-renderer-class>
-    <panel-group-renderer-class>
-        com.sun.faces.renderkit.html_basic.GroupRenderer
-    </panel-group-renderer-class>
-    <selectboolean-checkbox-renderer-class>
-        com.sun.faces.renderkit.html_basic.CheckboxRenderer
-    </selectboolean-checkbox-renderer-class>
-    <selectmany-checkbox-renderer-class>
-        com.sun.faces.renderkit.html_basic.SelectManyCheckboxListRenderer
-    </selectmany-checkbox-renderer-class>
-    <selectmany-listbox-renderer-class>
-        com.sun.faces.renderkit.html_basic.ListboxRenderer
-    </selectmany-listbox-renderer-class>
-    <selectmany-menu-renderer-class>
-        com.sun.faces.renderkit.html_basic.MenuRenderer
-    </selectmany-menu-renderer-class>
-    <selectone-listbox-renderer-class>
-        com.sun.faces.renderkit.html_basic.ListboxRenderer
-    </selectone-listbox-renderer-class>
-    <selectone-menu-renderer-class>
-        com.sun.faces.renderkit.html_basic.MenuRenderer
-    </selectone-menu-renderer-class>
-    <selectone-radio-renderer-class>
-        com.sun.faces.renderkit.html_basic.RadioRenderer
-    </selectone-radio-renderer-class>
-</root>
-
diff --git a/jsf-ri/src/main/resources/com/sun/faces/web-facesconfig_1_1.xsd b/jsf-ri/src/main/resources/com/sun/faces/web-facesconfig_1_1.xsd
deleted file mode 100644
index 7c31669..0000000
--- a/jsf-ri/src/main/resources/com/sun/faces/web-facesconfig_1_1.xsd
+++ /dev/null
@@ -1,2008 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-<xsd:schema
-     targetNamespace="http://java.sun.com/xml/ns/javaee"
-     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
-     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-     xmlns:xml="http://www.w3.org/XML/1998/namespace"
-     elementFormDefault="qualified"
-     attributeFormDefault="unqualified"
-     version="1.1">
-
-    <xsd:annotation>
-        <xsd:documentation>
-            faces config 1.1
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:annotation>
-        <xsd:documentation>
-
-            Copyright 2005 Sun Microsystems, Inc., 
-            901 San Antonio Road, 
-            Palo Alto, California 94303, U.S.A. 
-            All rights reserved.
-
-            Sun Microsystems, Inc. has intellectual property 
-            rights relating to technology described in this document. In
-            particular, and without limitation, these intellectual
-            property rights may include one or more of the U.S. patents
-            listed at http://www.sun.com/patents and one or more
-            additional patents or pending patent applications in the
-            U.S. and other countries.
-
-            This document and the technology which it describes are
-            distributed under licenses restricting their use, copying,
-            distribution, and decompilation. No part of this document
-            may be reproduced in any form by any means without prior
-            written authorization of Sun and its licensors, if any.
-
-            Third-party software, including font technology, is
-            copyrighted and licensed from Sun suppliers.
-
-            Sun, Sun Microsystems, the Sun logo, Solaris, Java, Java EE,
-            JavaServer Pages, Enterprise JavaBeans and the Java Coffee
-            Cup logo are trademarks or registered trademarks of Sun
-            Microsystems, Inc. in the U.S. and other countries.
-
-            Federal Acquisitions: Commercial Software - Government Users
-            Subject to Standard License Terms and Conditions.
-
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:annotation>
-        <xsd:documentation>
-
-            <![CDATA[
-
-            This is a private schema conversion of the 1.1 DTD.
-            This was necessary due to some restrictions that were
-            enforced by the 1.2 schema that weren't enforced by
-            the 1.0/1.1 DTD.
-
-            This *should not ever* be referenced by actual
-            faces-config files.
-
-            ]]>
-
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:include schemaLocation="javaee_5.xsd"/>
-
-    <!-- **************************************************** -->
-
-    <xsd:element name = "faces-config" type="javaee:faces-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "faces-config" element is the root of the configuration
-                information hierarchy, and contains nested elements for all
-                of the other configuration settings.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:unique name="faces-config-converter-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Converter IDs must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:converter"/>
-            <xsd:field    xpath="javaee:converter-id"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-converter-for-class-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    'converter-for-class' element values must be unique
-                    within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:converter"/>
-            <xsd:field    xpath="javaee:converter-for-class"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-validator-ID-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Validator IDs must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:validator"/>
-            <xsd:field    xpath="javaee:validator-id"/>
-        </xsd:unique>
-
-        <xsd:unique name="faces-config-managed-bean-name-uniqueness">
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    Managed bean names must be unique within a document.
-
-                </xsd:documentation>
-            </xsd:annotation>
-
-            <xsd:selector xpath="javaee:managed-bean"/>
-            <xsd:field    xpath="javaee:managed-bean-name"/>
-        </xsd:unique>
-    </xsd:element>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "faces-config" element is the root of the configuration
-                information hierarchy, and contains nested elements for all
-                of the other configuration settings.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="application"
-                         type="javaee:faces-config-applicationType"/>
-            <xsd:element name="factory"
-                         type="javaee:faces-config-factoryType"/>
-            <xsd:element name="component"
-                         type="javaee:faces-config-componentType"/>
-            <xsd:element name="converter"
-                         type="javaee:faces-config-converterType"/>
-            <xsd:element name="managed-bean"
-                         type="javaee:faces-config-managed-beanType"/>
-            <xsd:element name="navigation-rule"
-                         type="javaee:faces-config-navigation-ruleType"/>
-            <xsd:element name="referenced-bean"
-                         type="javaee:faces-config-referenced-beanType"/>
-            <xsd:element name="render-kit"
-                         type="javaee:faces-config-render-kitType"/>
-            <xsd:element name="lifecycle"
-                         type="javaee:faces-config-lifecycleType"/>
-            <xsd:element name="validator"
-                         type="javaee:faces-config-validatorType"/>
-            <xsd:element name="faces-config-extension"
-                         type="javaee:faces-config-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:choice>
-            <xsd:attribute name = "id" type = "xsd:ID"/>
-            <xsd:attribute name="version"
-                type="javaee:faces-config-versionType"
-                use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for faces-config.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-applicationType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "application" element provides a mechanism to define the
-                various per-application-singleton implementation artifacts for
-                a particular web application that is utilizing 
-                JavaServer Faces.  For nested elements that are not specified, 
-                the JSF implementation must provide a suitable default.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="action-listener"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "action-listener" element contains the fully 
-                            qualified class name of the concrete 
-                            ActionListener implementation class that will be 
-                            called during the Invoke Application phase of the 
-                            request processing lifecycle.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-render-kit-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "default-render-kit-id" element allows the 
-                            application to define a renderkit to be used other 
-                            than the standard one. 
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="message-bundle"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The base name of a resource bundle representing 
-                            the message resources for this application.  See 
-                            the JavaDocs for the "java.util.ResourceBundle" 
-                            class for more information on the syntax of 
-                            resource bundle names.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="navigation-handler"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "navigation-handler" element contains the 
-                            fully qualified class name of the concrete 
-                            NavigationHandler implementation class that will 
-                            be called during the Invoke Application phase 
-                            of the request processing lifecycle, if the 
-                            default ActionListener (provided by the JSF 
-                            implementation) is used.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="view-handler"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "view-handler" element contains the fully 
-                            qualified class name of the concrete ViewHandler 
-                            implementation class that will be called during 
-                            the Restore View and Render Response phases of the 
-                            request processing lifecycle.  The faces 
-                            implementation must provide a default 
-                            implementation of this class.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="state-manager"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "state-manager" element contains the fully 
-                            qualified class name of the concrete StateManager 
-                            implementation class that will be called during 
-                            the Restore View and Render Response phases of the 
-                            request processing lifecycle.  The faces 
-                            implementation must provide a default 
-                            implementation of this class.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="el-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "el-resolver" element contains the fully
-                            qualified class name of the concrete
-                            javax.el.ELResolver implementation class
-                            that will be used during the processing of
-                            EL expressions.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                            The "property-resolver" element contains the fully 
-                            qualified class name of the concrete 
-                            PropertyResolver implementation class that will 
-                            be used during the processing of value binding 
-                            expressions.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="variable-resolver"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                            The "variable-resolver" element contains the fully
-                            qualified class name of the concrete 
-                            VariableResolver implementation class that will 
-                            be used during the processing of value binding 
-                            expressions.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element 
-                name="locale-config"
-                type="javaee:faces-config-locale-configType"/>
-
-            <xsd:element name="application-extension"
-                         type="javaee:faces-config-application-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            </xsd:choice>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>   
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-application-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for application.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-factoryType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "factory" element provides a mechanism to define the 
-                various Factories that comprise parts of the implementation 
-                of JavaServer Faces.  For nested elements that are not 
-                specified, the JSF implementation must provide a suitable 
-                default.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:choice minOccurs="0" maxOccurs="unbounded">
-            <xsd:element name="application-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                        The "application-factory" element contains the 
-                        fully qualified class name of the concrete 
-                        ApplicationFactory implementation class that will 
-                        be called when 
-                        FactoryFinder.getFactory(APPLICATION_FACTORY) is
-                        called.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="faces-context-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                        The "faces-context-factory" element contains the
-                        fully qualified class name of the concrete
-                        FacesContextFactory implementation class that will
-                        be called when 
-                        FactoryFinder.getFactory(FACES_CONTEXT_FACTORY) 
-                        is called.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="lifecycle-factory"
-                        type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                            
-                        The "lifecycle-factory" element contains the fully
-                        qualified class name of the concrete LifecycleFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(LIFECYCLE_FACTORY) is called.
-                            
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="render-kit-factory"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "render-kit-factory" element contains the fully
-                        qualified class name of the concrete RenderKitFactory
-                        implementation class that will be called when
-                        FactoryFinder.getFactory(RENDER_KIT_FACTORY) is 
-                        called.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="factory-extension"
-                         type="javaee:faces-config-factory-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:choice>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-factory-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for factory.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-attributeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "attribute" element represents a named, typed, value
-                associated with the parent UIComponent via the generic
-                attributes mechanism.
-
-                Attribute names must be unique within the scope of the parent
-                (or related) component.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="attribute-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "attribute-name" element represents the name under 
-                        which the corresponding value will be stored, in the 
-                        generic attributes of the UIComponent we are related 
-                        to.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "attribute-class" element represents the Java type
-                        of the value associated with this attribute name.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-value"
-                         type="javaee:faces-config-default-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="suggested-value"
-                         type="javaee:faces-config-suggested-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="attribute-extension"
-                         type="javaee:faces-config-attribute-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name = "id" type = "xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-attribute-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for attribute.  It may contain 
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-componentType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "component" element represents a concrete UIComponent
-                implementation class that should be registered under the
-                specified type identifier, along with its associated 
-                properties and attributes.  Component types must be unique 
-                within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that 
-                are recognized by the implementation logic of this component.
-                Nested "property" elements identify JavaBeans properties of 
-                the component class that may be exposed for manipulation 
-                via tools.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="component-type"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "component-type" element represents the name under 
-                        which the corresponding UIComponent class should be 
-                        registered.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="component-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "component-class" element represents the fully 
-                        qualified class name of a concrete UIComponent 
-                        implementation class.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet"
-                         type="javaee:faces-config-facetType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="component-extension"
-                         type="javaee:faces-config-component-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-component-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-                Extension element for component.  It may contain 
-                implementation specific content.
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-default-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "default-locale" element declares the default locale 
-                for this application instance.
-
-                It must be specified as :language:[_:country:[_:variant:]]
-                without the colons, for example "ja_JP_SJIS".  The
-                separators between the segments may be '-' or '_'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-localeType">
-                <xsd:attribute name="id" type="xsd:ID"/>                
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-
-    <xsd:complexType name="faces-config-default-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "default-value" contains the value for the property or
-                attribute in which this element resides.  This value differs
-                from the "suggested-value" in that the property or attribute
-                must take the value, whereas in "suggested-value" taking the
-                value is optional.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-el-expressionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                EL expressions present within a faces config file
-                must start with the character sequence of '#{' and
-                end with '}'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:string">
-            <xsd:pattern value="#\{.*\}"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-facetType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Define the name and other design-time information for a facet
-                that is associated with a renderer or a component.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="facet-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "facet-name" element represents the facet name 
-                        under which a UIComponent will be added to its parent.  
-                        It must be of type "Identifier".
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet-extension"
-                         type="javaee:faces-config-facet-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-facet-extensionType">
-         <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for facet.  It may contain implementation
-                specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-from-view-idType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The value of from-view-id must contain one of the following 
-                values:
-
-                  - The exact match for a view identifier that is recognized
-                    by the the ViewHandler implementation being used (such as
-                    "/index.jsp" if you are using the default ViewHandler).
-
-                  - A proper prefix of a view identifier, plus a trailing 
-                    "*" character.  This pattern indicates that all view 
-                    identifiers that match the portion of the pattern up to 
-                    the asterisk will match the surrounding rule.  When more 
-                    than one match exists, the match with the longest pattern 
-                    is selected.
-
-                  - An "*" character, which means that this pattern applies 
-                    to all view identifiers.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-from-actionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "from-action" element contains an action reference 
-                expression that must have been executed (by the default 
-                ActionListener for handling application level events) 
-                in order to select the navigation rule.  If not specified, 
-                this rule will be relevant no matter which action reference 
-                was executed (or if no action reference was executed).
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-el-expressionType">
-                <xsd:attribute name="id" type="xsd:ID"/>
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-converterType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "converter" element represents a concrete Converter
-                implementation class that should be registered under the
-                specified converter identifier.  Converter identifiers must 
-                be unique within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that
-                may be configured on the corresponding UIComponent in order 
-                to affect the operation of the Converter.  Nested "property"
-                elements identify JavaBeans properties of the Converter
-                implementation class that may be configured to affect the
-                operation of the Converter.  "attribute" and "property" 
-                elements are intended to allow component developers to 
-                more completely describe their components to tools and users.
-                These elements have no required runtime semantics.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:choice>
-                <xsd:element name="converter-id"
-                             type="javaee:string">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            The "converter-id" element represents the 
-                            identifier under which the corresponding 
-                            Converter class should be registered.
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-                
-                <xsd:element name="converter-for-class"
-                             type="javaee:fully-qualified-classType">
-                    <xsd:annotation>
-                        <xsd:documentation>
-
-                            The "converter-for-class" element represents the 
-                            fully qualified class name for which a Converter 
-                            class will be registered.
-
-                        </xsd:documentation>
-                    </xsd:annotation>
-                </xsd:element>
-            </xsd:choice>
-            
-            <xsd:element name="converter-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "converter-class" element represents the fully
-                        qualified class name of a concrete Converter 
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "attribute" elements identify generic
-                       attributes that may be configured on the
-                       corresponding UIComponent in order to affect the
-                       operation of the Converter.  This attribute is
-                       primarily for design-time tools and is not
-                       specified to have any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0"
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "property" elements identify JavaBeans
-                       properties of the Converter implementation class
-                       that may be configured to affect the operation of
-                       the Converter.  This attribute is primarily for
-                       design-time tools and is not specified to have
-                       any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="converter-extension"
-                         type="javaee:faces-config-converter-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-converter-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for converter.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-lifecycleType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "lifecycle" element provides a mechanism to specify
-                modifications to the behaviour of the default Lifecycle
-                implementation for this web application.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="phase-listener"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">
-                
-                <xsd:annotation>
-                    <xsd:documentation>
-                    
-                        The "phase-listener" element contains the fully 
-                        qualified class name of the concrete PhaseListener 
-                        implementation class that will be registered on 
-                        the Lifecycle.
-                    
-                    </xsd:documentation>
-            </xsd:annotation>                
-            </xsd:element>
-            <xsd:element name="lifecycle-extension"
-                         type="javaee:faces-config-lifecycle-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-lifecycle-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for lifecycle.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    
-    <!-- **************************************************** -->
-    
-    <xsd:simpleType name="faces-config-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The localeType defines valid locale defined by ISO-639-1
-                and ISO-3166.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:restriction base="xsd:string">
-            <xsd:pattern value="[a-z]{2}(_|-)?([\p{L}\-\p{Nd}]{2})?"/>
-        </xsd:restriction>
-  </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-locale-configType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "locale-config" element allows the app developer to 
-                declare the supported locales for this application.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        
-        <xsd:sequence>
-            <xsd:element name="default-locale"
-                         type="javaee:faces-config-default-localeType"
-                         minOccurs="0">
-            </xsd:element>
-            <xsd:element name="supported-locale"
-                         type="javaee:faces-config-supported-localeType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">                
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-managed-beanType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "managed-bean" element represents a JavaBean, of a 
-                particular class, that will be dynamically instantiated 
-                at runtime (by the default VariableResolver implementation) 
-                if it is referenced as the first element of a value binding 
-                expression, and no corresponding bean can be identified in 
-                any scope.  In addition to the creation of the managed bean, 
-                and the optional storing of it into the specified scope, 
-                the nested managed-property elements can be used to 
-                initialize the contents of settable JavaBeans properties of 
-                the created instance.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="managed-bean-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-name" element represents the 
-                        attribute name under which a managed bean will 
-                        be searched for, as well as stored (unless the 
-                        "managed-bean-scope" value is "none").
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="managed-bean-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-class" element represents the fully
-                        qualified class name of the Java class that will be 
-                        used`to instantiate a new instance if creation of the 
-                        specified`managed bean is requested.
-
-                        The specified class must conform to standard JavaBeans
-                        conventions.  In particular, it must have a public
-                        zero-arguments constructor, and zero or more public
-                        property setters.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element 
-                name="managed-bean-scope"
-                type="javaee:faces-config-managed-bean-scopeOrNoneType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "managed-bean-scope" element represents the scope 
-                        into which a newly created instance of the specified 
-                        managed bean will be stored (unless the value is 
-                        "none").
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="managed-property"
-                             type="javaee:faces-config-managed-propertyType"
-                             minOccurs="0"
-                             maxOccurs="unbounded"/>
-                <xsd:element name="map-entries"
-                             type="javaee:faces-config-map-entriesType"/>
-                <xsd:element name="list-entries"
-                             type="javaee:faces-config-list-entriesType"/>
-            </xsd:choice>
-            <xsd:element name="managed-bean-extension"
-                         type="javaee:faces-config-managed-bean-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-managed-bean-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for managed-bean.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-    
-    <xsd:complexType name="faces-config-managed-bean-scopeOrNoneType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                <![CDATA[
-                Defines the legal values for the <managed-bean-scope>
-                element's body content, which includes all of the scopes
-                normally used in a web application, plus the "none" value
-                indicating that a created bean should not be stored into
-                any scope.
-                ]]>
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string">
-                <xsd:enumeration value="request"/>
-                <xsd:enumeration value="session"/>
-                <xsd:enumeration value="application"/>
-                <xsd:enumeration value="none"/>
-            </xsd:restriction>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-managed-propertyType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "managed-property" element represents an individual 
-                property of a managed bean that will be configured to the 
-                specified value (or value set) if the corresponding 
-                managed bean is automatically created.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="property-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "property-name" element represents the JavaBeans 
-                        property name under which the corresponding value may 
-                        be stored.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-class"
-                         type="javaee:java-typeType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                    
-                        The "property-class" element represents the Java type 
-                        of the value associated with this property name.  
-                        If not specified, it can be inferred from existing 
-                        classes; however, this element should be specified 
-                        if the configuration file is going to be the source 
-                        for generating the corresponding classes.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="map-entries"
-                             type="javaee:faces-config-map-entriesType"/>
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType">
-                </xsd:element>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-                <xsd:element name="list-entries"
-                             type="javaee:faces-config-list-entriesType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-map-entryType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "map-entry" element reprsents a single key-entry pair 
-                that will be added to the computed value of a managed 
-                property of type java.util.Map.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="key"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "key" element is the String representation of a 
-                        map key that will be stored in a managed property of 
-                        type java.util.Map.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:choice>
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType"/>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-map-entriesType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "map-entries' element represents a set of key-entry pairs 
-                that will be added to the computed value of a managed property 
-                of type java.util.Map.  In addition, the Java class types 
-                of the key and entry values may be optionally declared.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:element name="key-class"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "key-class" element defines the Java type to which 
-                        each "key" element in a set of "map-entry" elements 
-                        will be converted to.  If omitted, "java.lang.String" 
-                        is assumed.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="value-class"
-                         type="javaee:faces-config-value-classType"
-                         minOccurs="0"/>                
-            <xsd:element name="map-entry"
-                         type="javaee:faces-config-map-entryType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-navigation-caseType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "navigation-case" element describes a particular 
-                combination of conditions that must match for this case to 
-                be executed, and the view id of the component tree that 
-                should be selected next.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="from-action"
-                         type="javaee:faces-config-from-actionType"
-                         minOccurs="0">
-            </xsd:element>
-            <xsd:element name="from-outcome"
-                         type="javaee:string" minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "from-outcome" element contains a logical outcome
-                        string returned by the execution of an application
-                        action method selected via an "actionRef" property
-                        (or a literal value specified by an "action" property)
-                        of a UICommand component.  If specified, this rule 
-                        will be relevant only if the outcome value matches 
-                        this element's value.  If not specified, this rule 
-                        will be relevant no matter what the outcome value was.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="to-view-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "to-view-id" element contains the view identifier 
-                        of the next view that should be displayed if this
-                        navigation rule is matched.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element 
-                name="redirect"
-                type="javaee:faces-config-redirectType" minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-navigation-ruleType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "navigation-rule" element represents an individual 
-                decision rule that will be utilized by the default 
-                NavigationHandler implementation to make decisions on 
-                what view should be displayed next, based on the 
-                view id being processed.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="from-view-id"
-                         type="javaee:faces-config-from-view-idType"
-                         minOccurs="0"/>
-            <xsd:element name="navigation-case"
-                         type="javaee:faces-config-navigation-caseType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element 
-                name="navigation-rule-extension"
-                type="javaee:faces-config-navigation-rule-extensionType"
-                minOccurs="0"
-                maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-navigation-rule-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for navigation-rule.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-null-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "null-value" element indicates that the managed
-                property in which we are nested will be explicitly
-                set to null if our managed bean is automatically
-                created.  This is different from omitting the managed
-                property element entirely, which will cause no
-                property setter to be called for this property.
-
-                The "null-value" element can only be used when the
-                associated "property-class" identifies a Java class,
-                not a Java primitive.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-    
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-propertyType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "property" element represents a JavaBean property of the 
-                Java class represented by our parent element.
-
-                Property names must be unique within the scope of the Java 
-                class that is represented by the parent element, and must 
-                correspond to property names that will be recognized when 
-                performing introspection against that class via 
-                java.beans.Introspector.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="property-name"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "property-name" element represents the JavaBeans 
-                        property name under which the corresponding value 
-                        may be stored.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="property-class"
-                         type="javaee:java-typeType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "property-class" element represents the Java type 
-                        of the value associated with this property name.  
-                        If not specified, it can be inferred from existing 
-                        classes; however, this element should be specified if 
-                        the configuration file is going to be the source for 
-                        generating the corresponding classes.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="default-value"
-                         type="javaee:faces-config-default-valueType"
-                         minOccurs="0"/>               
-            <xsd:element name="suggested-value"
-                         type="javaee:faces-config-suggested-valueType"
-                         minOccurs="0"/>
-            <xsd:element name="property-extension"
-                         type="javaee:faces-config-property-extensionType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-property-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for property.  It may contain 
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-redirectType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                    The "redirect" element indicates that navigation to the
-                    specified "to-view-id" should be accomplished by 
-                    performing an HTTP redirect rather than the usual 
-                    ViewHandler mechanisms.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-referenced-beanType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "referenced-bean" element represents at design time the 
-                promise that a Java object of the specified type will exist at 
-                runtime in some scope, under the specified key.  This can be 
-                used by design time tools to construct user interface dialogs 
-                based on the properties of the specified class.  The presence 
-                or absence of a referenced bean element has no impact on the 
-                JavaServer Faces runtime environment inside a web application.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="referenced-bean-name"
-                         type="javaee:java-identifierType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "referenced-bean-name" element represents the 
-                        attribute name under which the corresponding 
-                        referenced bean may be assumed to be stored, in one 
-                        of 'request', 'session', or 'application' scopes.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="referenced-bean-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "referenced-bean-class" element represents the 
-                        fully qualified class name of the Java class 
-                        (either abstract or concrete) or Java interface 
-                        implemented by the corresponding referenced bean. 
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-render-kitType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "render-kit" element represents a concrete RenderKit 
-                implementation that should be registered under the specified 
-                render-kit-id.  If no render-kit-id is specified, the 
-                identifier of the default RenderKit 
-                (RenderKitFactory.DEFAULT_RENDER_KIT) is assumed.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="render-kit-id"
-                         type="javaee:string"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "render-kit-id" element represents an identifier 
-                        for the RenderKit represented by the parent 
-                        "render-kit" element.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="render-kit-class"
-                         type="javaee:fully-qualified-classType"
-                         minOccurs="0">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "render-kit-class" element represents the fully 
-                        qualified class name of a concrete RenderKit 
-                        implementation class.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="renderer"
-                         type="javaee:faces-config-rendererType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded"/>
-            <xsd:element name="render-kit-extension"
-                         type="javaee:faces-config-render-kit-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-rendererType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "renderer" element represents a concrete Renderer 
-                implementation class that should be registered under the 
-                specified component family and renderer type identifiers, 
-                in the RenderKit associated with the parent "render-kit" 
-                element.  Combinations of component family and 
-                renderer type must be unique within the RenderKit 
-                associated with the parent "render-kit" element.
-
-                Nested "attribute" elements identify generic component 
-                attributes that are recognized by this renderer.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="component-family"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "component-family" element represents the 
-                        component family for which the Renderer represented 
-                        by the parent "renderer" element will be used.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>                    
-            </xsd:element>
-            <xsd:element name="renderer-type"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "renderer-type" element represents a renderer type 
-                        identifier for the Renderer represented by the parent 
-                        "renderer" element.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="renderer-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                        The "renderer-class" element represents the fully
-                        qualified class name of a concrete Renderer
-                        implementation class.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="facet"
-                         type="javaee:faces-config-facetType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-            <xsd:element name="renderer-extension"
-                         type="javaee:faces-config-renderer-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-renderer-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for renderer.  It may contain implementation
-                specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-render-kit-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for render-kit.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-suggested-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "suggested-value" contains the value for the property or
-                attribute in which this element resides.  This value is 
-                advisory only and is intended for tools to use when 
-                populating pallettes.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:string"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-supported-localeType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "supported-locale" element allows authors to declare
-                which locales are supported in this application instance.
-
-                It must be specified as :language:[_:country:[_:variant:]]
-                without the colons, for example "ja_JP_SJIS".  The
-                separators between the segments may be '-' or '_'.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:extension base="javaee:faces-config-localeType">
-                <xsd:attribute name="id" type="xsd:ID"/> 
-            </xsd:extension>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-validatorType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "validator" element represents a concrete Validator
-                implementation class that should be registered under the
-                specified validator identifier.  Validator identifiers must 
-                be unique within the entire web application.
-
-                Nested "attribute" elements identify generic attributes that 
-                may be configured on the corresponding UIComponent in order 
-                to affect the operation of the Validator.  Nested "property"
-                elements identify JavaBeans properties of the Validator
-                implementation class that may be configured to affect the
-                operation of the Validator.  "attribute" and "property" 
-                elements are intended to allow component developers to 
-                more completely describe their components to tools and users.
-                These elements have no required runtime semantics.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:group ref="javaee:descriptionGroup"/>
-            <xsd:element name="validator-id"
-                         type="javaee:string">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "validator-id" element represents the identifier 
-                        under which the corresponding Validator class should 
-                        be registered.
-                        
-                    </xsd:documentation>
-                </xsd:annotation>                
-            </xsd:element>
-            <xsd:element name="validator-class"
-                         type="javaee:fully-qualified-classType">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                        The "validator-class" element represents the fully 
-                        qualified class name of a concrete Validator 
-                        implementation class.  
-                        
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="attribute"
-                         type="javaee:faces-config-attributeType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-                        
-                       Nested "attribute" elements identify generic
-                       attributes that may be configured on the
-                       corresponding UIComponent in order to affect the
-                       operation of the Validator.  This attribute is
-                       primarily for design-time tools and is not
-                       specified to have any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-
-            </xsd:element>
-            <xsd:element name="property"
-                         type="javaee:faces-config-propertyType"
-                         minOccurs="0" 
-                         maxOccurs="unbounded">
-                <xsd:annotation>
-                    <xsd:documentation>
-
-                       Nested "property" elements identify JavaBeans
-                       properties of the Validator implementation class
-                       that may be configured to affect the operation of
-                       the Validator.  This attribute is primarily for
-                       design-time tools and is not specified to have
-                       any meaning at runtime.
-
-                    </xsd:documentation>
-                </xsd:annotation>
-            </xsd:element>
-            <xsd:element name="validator-extension"
-                         type="javaee:faces-config-validator-extensionType"
-                         minOccurs="0"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name = "faces-config-validator-extensionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Extension element for validator.  It may contain
-                implementation specific content.
-
-            </xsd:documentation>
-        </xsd:annotation>
-
-        <xsd:sequence>
-            <xsd:any namespace="##any"
-                     processContents="lax"
-                     minOccurs="0"
-                     maxOccurs="unbounded" />
-         </xsd:sequence>
-         <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-valueType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                The "value" element is the String representation of
-                a literal value to which a scalar managed property
-                will be set, or a value binding expression ("#{...}")
-                that will be used to calculate the required value.
-                It will be converted as specified for the actual
-                property type.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:union 
-            memberTypes="javaee:faces-config-el-expressionType xsd:string"/>
-    </xsd:simpleType>
-    
-    <!-- **************************************************** -->
-    
-    <xsd:complexType name="faces-config-value-classType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "value-class" element defines the Java type to which each
-                "value" element's value will be converted to, prior to adding 
-                it to the "list-entries" list for a managed property that is 
-                a java.util.List, or a "map-entries" map for a managed 
-                property that is a java.util.Map.  
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleContent>
-            <xsd:restriction base="javaee:fully-qualified-classType"/>
-        </xsd:simpleContent>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="faces-config-list-entriesType">
-        <xsd:annotation>
-            <xsd:documentation>
-                
-                The "list-entries" element represents a set of initialization
-                elements for a managed property that is a java.util.List or an
-                array.  In the former case, the "value-class" element can 
-                optionally be used to declare the Java type to which each 
-                value should be converted before adding it to the Collection.
-                
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="value-class"
-                         type="javaee:faces-config-value-classType"
-                         minOccurs="0"/>
-            <xsd:choice minOccurs="0" maxOccurs="unbounded">
-                <xsd:element name="null-value"
-                             type="javaee:faces-config-null-valueType"/>
-                <xsd:element name="value"
-                             type="javaee:faces-config-valueType"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="id" type="xsd:ID"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="faces-config-versionType">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                This type contains the recognized versions of
-                faces-config supported.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="1.1"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-</xsd:schema>
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/AbsoluteOrderingTestCase.java b/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/AbsoluteOrderingTestCase.java
deleted file mode 100644
index 40fb5ad..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/AbsoluteOrderingTestCase.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-public class AbsoluteOrderingTestCase extends AbstractTestCase {
-
-
-    public AbsoluteOrderingTestCase(String name) {
-           super(name);
-       }
-
-       /**
-        * Set up instance variables required by this test case.
-        */
-       public void setUp() throws Exception {
-           super.setUp();
-       }
-
-
-       /**
-        * Return the tests included in this test suite.
-        */
-       public static Test suite() {
-           return (new TestSuite(AbsoluteOrderingTestCase.class));
-       }
-
-
-       /**
-        * Tear down instance variables required by this test case.
-        */
-       public void tearDown() {
-           super.tearDown();
-       }
-
-
-       // ------------------------------------------------------------ Test Methods
-
-       public void testDocumentOrdering() throws Exception {
-
-           HtmlPage page = getPage("/faces/test.xhtml");
-           assertTrue(page.asText().contains("Order Correct: true"));
-
-       }
-}
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerA.java b/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerA.java
deleted file mode 100644
index 8120232..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerA.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerA implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-    
-}
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerB.java b/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerB.java
deleted file mode 100644
index 3fa5952..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerB.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerB implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerC.java b/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerC.java
deleted file mode 100644
index 80adb51..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerC.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerC implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerD.java b/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerD.java
deleted file mode 100644
index 4bb66e1..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/PhaseListenerD.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerD implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/model/OrderingBean.java b/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/model/OrderingBean.java
deleted file mode 100644
index 0e1441b..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/src/java/com/sun/faces/systest/model/OrderingBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import javax.faces.FactoryFinder;
-import javax.faces.event.PhaseListener;
-
- at ManagedBean
-public class OrderingBean {
-
-    public boolean isOrderCorrect() {
-
-        LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-        Lifecycle l = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-        PhaseListener[] listeners = l.getPhaseListeners();
-        List<PhaseListener> list = new ArrayList<PhaseListener>();
-        for (PhaseListener listener : listeners) {
-            if (listener.getClass().getName().contains("com.sun.faces.systest.PhaseListener")) {
-                list.add(listener);
-            }
-        }
-        listeners = list.toArray(new PhaseListener[list.size()]);
-        String[] suffixes = { "B", "C", "A", "D"};
-        if (listeners.length != 4) {
-            System.out.println("INCORRECT LISTENER COUNT");
-            return false;
-        }
-        for (int i = 0; i < listeners.length; i++) {
-            if (!listeners[i].getClass().getName().endsWith(suffixes[i])) {
-                System.out.println("INCORRECT DOCUMENT ORDERING: " + Arrays.toString(listeners));
-                return false;
-            }
-        }
-
-        return true;
-
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 75a0dc5..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-              version="2.0">
-    <name>D</name>
-
-    <!-- this ordering info shouldn't be considered -->
-    <ordering>
-        <before>
-            <others/>
-        </before>
-    </ordering>
-
-    <absolute-ordering>
-       <name>B</name>
-       <others/>
-       <name>A</name>
-    </absolute-ordering>
-
-    <lifecycle>
-        <phase-listener>com.sun.faces.systest.PhaseListenerD</phase-listener>
-    </lifecycle>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/faces-configB.xml b/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/faces-configB.xml
deleted file mode 100644
index b143710..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/faces-configB.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-              version="2.0">
-    <name>B</name>
-
-    <lifecycle>
-        <phase-listener>com.sun.faces.systest.PhaseListenerB</phase-listener>
-    </lifecycle>
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/web.xml
deleted file mode 100644
index 51443bd..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-    <description>
-        Verify Document Ordering Algorithm
-    </description>
-    <display-name>Document Orderdering</display-name>
-
-    <context-param>
-        <param-name>javax.faces.CONFIG_FILES</param-name>
-        <param-value>/WEB-INF/faces-configB.xml</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/absolute-ordering/web/test.xhtml b/jsf-ri/systest-per-webapp/absolute-ordering/web/test.xhtml
deleted file mode 100644
index 566e5e8..0000000
--- a/jsf-ri/systest-per-webapp/absolute-ordering/web/test.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<head>
-    <title>Document Ordering</title>
-</head>
-<body>
-    <h:outputText value="Order Correct: #{orderingBean.orderCorrect}"/>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/AnnotationProcessingTestCase.java b/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/AnnotationProcessingTestCase.java
deleted file mode 100644
index 0e9ffde..0000000
--- a/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/AnnotationProcessingTestCase.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-public class AnnotationProcessingTestCase extends AbstractTestCase {
-
-
-    public AnnotationProcessingTestCase(String name) {
-           super(name);
-       }
-
-       /**
-        * Set up instance variables required by this test case.
-        */
-       public void setUp() throws Exception {
-           super.setUp();
-       }
-
-
-       /**
-        * Return the tests included in this test suite.
-        */
-       public static Test suite() {
-           return (new TestSuite(AnnotationProcessingTestCase.class));
-       }
-
-
-       /**
-        * Tear down instance variables required by this test case.
-        */
-       public void tearDown() {
-           super.tearDown();
-       }
-
-
-       // ------------------------------------------------------------ Test Methods
-
-       public void testAnnotationProcessing() throws Exception {
-
-
-           HtmlPage page = getPage("/faces/test.xhtml");
-           assertTrue(page.asText().contains("PASSED"));
-           
-       }
-}
diff --git a/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/model/AnnotationProcessingBean.java b/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/model/AnnotationProcessingBean.java
deleted file mode 100644
index 69a32f6..0000000
--- a/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/model/AnnotationProcessingBean.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.mgbean.BeanManager;
-
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean(name="ap")
-public class AnnotationProcessingBean {
-
-    public String getValidationResult() {
-
-        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
-        BeanManager manager = associate.getBeanManager();
-        if (manager.isManaged("notFoundWebInfClasses")) {
-            return "FAILED : FOUND NotFoundWebInfClasses";
-        }
-        if (manager.isManaged("notFoundWebInfLib")) {
-            return "FAILED : FOUND NotFoundWebInfLib";
-        }
-        if (manager.isManaged("notFoundWebInfLib2")) {
-            return "FAILED : FOUND NotFoundWebInfLib2";
-        }
-        if (!manager.isManaged("foundWebInfLib")) {
-            return "FAILED : NOT FOUND FoundWebInfLib";
-        }
-        return "PASSED";
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/test/NotFoundWebInfClasses.java b/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/test/NotFoundWebInfClasses.java
deleted file mode 100644
index 8004ff5..0000000
--- a/jsf-ri/systest-per-webapp/annotation-restrictions/src/java/com/sun/faces/systest/test/NotFoundWebInfClasses.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.test;
-
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean
-public class NotFoundWebInfClasses {
-}
diff --git a/jsf-ri/systest-per-webapp/annotation-restrictions/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/annotation-restrictions/web/WEB-INF/web.xml
deleted file mode 100644
index 66ae800..0000000
--- a/jsf-ri/systest-per-webapp/annotation-restrictions/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-    <description>
-        Verify Document Ordering Algorithm
-    </description>
-    <display-name>Document Orderdering</display-name>
-
-    <context-param>
-        <param-name>com.sun.faces.annotationScanPackages</param-name>
-        <param-value>
-            com.sun.faces.systest.model
-            jar:a.jar:test2
-        </param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.CONFIG_FILES</param-name>
-        <param-value>/WEB-INF/faces-configB.xml</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/annotation-restrictions/web/test.xhtml b/jsf-ri/systest-per-webapp/annotation-restrictions/web/test.xhtml
deleted file mode 100644
index 5407a43..0000000
--- a/jsf-ri/systest-per-webapp/annotation-restrictions/web/test.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<head>
-    <title>Annotation Processing</title>
-</head>
-<body>
-    <h:outputText value="#{ap.validationResult}"/>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/build-tests.xml b/jsf-ri/systest-per-webapp/build-tests.xml
deleted file mode 100644
index c1f307f..0000000
--- a/jsf-ri/systest-per-webapp/build-tests.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ********** JSF System Integration Test File ************************** -->
-
-
-<project name="JSF-RI-Systest-Execute" default="test" basedir=".">
-
-
-    <!-- =========================== Configuration ============================ -->
-
-
-    <property file="${user.home}/build.properties"/>
-    <property file="../../build.properties"/>
-    <import file="${jsf.build.home}/common/ant/common.xml"/>
-
-    <!-- Property containing all of the currenly running systests.
-         This property list *must* match the one defined in the
-         systest-per-webapp build.xml. -->
-    <property name="applications"
-              value="annotation-restrictions,
-                   clientside-statesaving,
-                   absolute-ordering,
-                   document-ordering,
-                   empty-string-as-null,
-                   resource-locale-prefix,
-                   nested-loadbundles,
-                   replace-application,
-                   invalid-mapping,
-                   replace-statemanager,
-                   nested-datatables,
-                   jar-ordering,
-                   replace-lifecycle,
-                   string-converter,
-                   replace-variableresolver,
-                   converter-property-editor,
-                   disable-unicode-escaping,
-                   late-bindings,
-                   property-resolver-jsp,
-                   never-unwrap-exceptions,
-                   write-attribute-script-disabled,
-                   write-attribute-script-enabled,
-                   wcag-datatable,
-                   flash,
-                   jsp-flash,
-                   disable-bean-validator"/>
-    <!--
-       EXCLUDED APPLICATIONS:
-          view-expired
-          core-tags
-          el-performance
-          command-link-redirect
-    -->
-
-    <!-- Property definitions to map the application to a JUnit test case -->
-    <property  name="annotation-restrictions"
-               value="com/sun/faces/systest/AnnotationProcessingTestCase.class" />
-    <property name="absolute-ordering"
-              value="com/sun/faces/systest/AbsoluteOrderingTestCase.class"/>
-    <property name="clientside-statesaving"
-              value="com/sun/faces/systest/clientside/AjaxMultiformTestCase.class"/>
-    <property name="document-ordering"
-              value="com/sun/faces/systest/DocumentOrderingTestCase.class"/>
-    <property name="empty-string-as-null"
-              value="com/sun/faces/systest/EmptyStringAsNullTestCase.class"/>
-    <property name="flash"
-              value="com/sun/faces/systest/FlashTestCase.class"/>
-    <property name="jsp-flash"
-              value="com/sun/faces/systest/JspFlashTestCase.class"/>
-    <property name="resource-locale-prefix"
-              value="com/sun/faces/systest/ResourceLocalePrefixTestCase.class"/>
-    <property name="replace-application"
-              value="com/sun/faces/systest/ReplaceApplicationTestCase.class"/>
-    <property name="replace-statemanager"
-              value="com/sun/faces/systest/ReplaceStateManagerTestCase.class"/>
-    <property name="invalid-mapping"
-              value="com/sun/faces/systest/InvalidMappingTestCase.class"/>
-    <property name="nested-datatables"
-              value="com/sun/faces/systest/NestedDatatablesTestCase.class"/>
-    <property name="nested-loadbundles"
-              value="com/sun/faces/systest/NestedLoadBundlesTestCase.class"/>
-    <property name="jar-ordering"
-              value="com/sun/faces/systest/JarOrderingTestCase.class"/>
-    <property name="replace-lifecycle"
-              value="com/sun/faces/systest/ReplaceLifecycleTestCase.class"/>
-    <property name="string-converter"
-              value="com/sun/faces/systest/StringConverterTestCase.class"/>
-    <property name="replace-variableresolver"
-              value="com/sun/faces/systest/ReplaceVariableResolverTestCase.class"/>
-    <property name="converter-property-editor"
-              value="com/sun/faces/systest/ConverterPropertyEditorTestCase.class"/>
-    <property name="late-bindings"
-              value="com/sun/faces/systest/LateBindingTestCase.class"/>
-    <property name="property-resolver-jsp"
-              value="com/sun/faces/systest/PropertyResolverJspTestCase.class"/>
-    <property name="never-unwrap-exceptions"
-              value="com/sun/faces/systest/NeverUnwrapExceptionsTestCase.class"/>
-    <property name="write-attribute-script-disabled"
-              value="com/sun/faces/systest/WriteAttributeScriptDisabledTestCase.class"/>
-    <property name="write-attribute-script-enabled"
-              value="com/sun/faces/systest/WriteAttributeScriptEnabledTestCase.class"/>
-    <property name="disable-unicode-escaping"
-              value="com/sun/faces/systest/UnicodeTestCase.class"/>
-    <property name="wcag-datatable"
-              value="com/sun/faces/systest/WcagDataTableTestCase.class"/>
-    <property name="disable-bean-validator"
-              value="com/sun/faces/systest/DisableBeanValidatorTestCase.class"/>
-
-    <!--
-        EXCLUDED APPLICATIONS:
-
-        <property name="core-tags
-                  value="com/sun/faces/systest/CoreTagsTestCase.class"/>
-        <property name="view-expired"
-                  value="com/sun/faces/systest/ViewExpiredExceptionTestCase.class"/>
-    -->
-
-
-    <!-- ======================== Test Execution ============================== -->
-
-
-    <target name="test"
-            description="Execute all tests against installed applications">
-
-        <for list="${applications}" param="app" trim="true">
-            <sequential>
-	      <if>
-                <and>
-                  <contains string="${applications-for-v3-only}"
-                            substring="@{app}" />
-                  <not>
-                    <equals arg1="${container.name}" arg2="glassfishV3" />
-                  </not>
-                </and>
-                <then>
-                  <echo message="Skipping @{app}.  That one runs on v3 only, and our current container is ${container.name}" />
-                </then>
-		<else>
-		  <propertycopy name="test.name"
-				from="@{app}"
-				override="true"/>
-		  <test-webapp app-name="@{app}"
-			       app-base-dir="${basedir}/@{app}"
-			       test-case="${test.name}"/>
-		</else>
-	      </if>
-            </sequential>
-        </for>
-
-    </target>
-
-    <macrodef name="test-webapp">
-        <attribute name="app-name"/>
-        <attribute name="app-base-dir"/>
-        <attribute name="test-case"/>
-        <sequential>
-            <path id="test.classpath">
-                <pathelement location="@{app-base-dir}/build/classes"/>
-                <pathelement location="${basedir}/build/classes"/>
-                <path refid="htmlunit.runtime.classpath"/>
-            </path>
-            <jsf.junit classpath-refid="test.classpath"
-                       context-path="/jsf-@{app-name}"
-                       test-results-dir="${impl.test.results.dir}">
-                <tests>
-                    <fileset dir="@{app-base-dir}/build/classes"
-                             includes="@{test-case}"/>
-                </tests>
-            </jsf.junit>
-        </sequential>
-    </macrodef>
-
-</project>
diff --git a/jsf-ri/systest-per-webapp/build.xml b/jsf-ri/systest-per-webapp/build.xml
deleted file mode 100644
index 619a5ee..0000000
--- a/jsf-ri/systest-per-webapp/build.xml
+++ /dev/null
@@ -1,301 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ************ JSF build file ************************************** -->
-
-<project name="JSF-RI-Systest-per-webapp" default="test" basedir=".">
-
-    <property name="Name" value="JavaServer Faces RI per-webapp System Test"/>
-    <property name="name" value="jsf-ri-systest-per-webapp"/>
-
-    <!-- ************ Per user local properties ******************************* -->
-
-    <property file="${user.home}/build.properties"/>
-    <!-- User local        -->
-    <property file="../../build.properties"/>
-    <!-- Project local     -->
-    <import file="${jsf.build.home}/common/ant/common.xml"/>   
-
-    <!-- Construct compile classpath -->
-    <path id="test.compile.classpath">
-        <pathelement location="${jsf-api.jar}"/>
-        <pathelement location="${jsf-impl.jar}"/>
-        <pathelement location="${jsf.test.jar}"/>
-        <path refid="compile.classpath"/>
-        <pathelement location="${basedir}/build/classes"/>       
-        <pathelement location="${basedir}/../build/test/classes"/>       
-        <path refid="htmlunit.compile.classpath"/>
-    </path>
-
-    <property name="applications-for-v3-only"
-              value="disable-bean-validator" />
-
-    <!-- Property containing all of the currenly running systests.  
-         This property list *must* match the one defined in the
-         systest-per-webapp build-tests.xml. -->
-    <property name="applications"
-              value="annotation-restrictions,
-                   clientside-statesaving,
-                   absolute-ordering,
-                   document-ordering,
-                   empty-string-as-null,
-                   resource-locale-prefix,
-                   nested-loadbundles,
-                   replace-application,
-                   replace-statemanager,  
-                   invalid-mapping,
-                   nested-datatables,
-                   jar-ordering,                  
-                   replace-lifecycle,
-                   string-converter,
-                   replace-variableresolver,
-                   converter-property-editor,
-                   disable-unicode-escaping,
-                   late-bindings,
-                   property-resolver-jsp,
-                   never-unwrap-exceptions,
-                   write-attribute-script-disabled,
-                   write-attribute-script-enabled,
-                   wcag-datatable,
-                   flash,
-                   jsp-flash,
-                   disable-bean-validator"/>
-    <!-- 
-
-       EXCLUDED APPLICATIONS:
-          view-expired
-          core-tags
-          el-performance
-          command-link-redirect,
-                   flash,
-                   jsp-flash
-    -->
-
-    <!-- ************ Executable Targets ************************************** -->
-
-
-    <target name="init"
-            description="Initialize and evaluate conditionals">
-        <echo message="-------- ${Name} ${impl.version} --------"/>
-    </target>
-
-
-    <target name="prepare" depends="init"
-            description="Prepare build directory">       
-
-    </target>    
-
-    <macrodef name="build.app">
-        <attribute name="base-app-dir"/>
-        <attribute name="appname"/>
-        <sequential>
-            <if>
-              <and>
-                <contains string="${applications-for-v3-only}"
-                          substring="@{appname}" />
-                <not>
-                  <equals arg1="${container.name}" arg2="glassfishV3" />
-                </not>
-              </and>
-              <then>
-                <echo message="Skipping @{appname}.  That one runs on v3 only, and our current container is ${container.name}" />
-              </then>
-              <else>
-                <mkdir dir="@{base-app-dir}/build/classes"/>
-                <jsf.javac srcdir="@{base-app-dir}/src/java"
-                           destdir="@{base-app-dir}/build/classes">
-                    <classpath>
-                        <path refid="test.compile.classpath"/>
-                    </classpath>
-                </jsf.javac>
-                  <jsf.war archive-name="jsf-@{appname}"
-                           basedir="@{base-app-dir}/build"
-                           webxml="@{base-app-dir}/web/WEB-INF/web.xml">
-                      <archive-elements>
-                          <zipfileset dir="@{base-app-dir}/web"
-                                      includes="**/*"/>
-                          <zipfileset dir="@{base-app-dir}/build/classes"
-                                      prefix="WEB-INF/classes"
-                                      excludes="**/*TestCase.class"/>
-                          <zipfileset dir="@{base-app-dir}/src/java"
-                                      includes="**/*.properties,**/*.xml"
-                                      prefix="WEB-INF/classes"/>
-                          <zipfileset dir="${basedir}/build/classes"
-                                      prefix="WEB-INF/classes"
-                                      excludes="**/*TestCase.class"/>
-                      </archive-elements>
-                  </jsf.war>
-                <mkdir dir="@{base-app-dir}/build/jsf-@{appname}" />
-                <unwar src="@{base-app-dir}/build/jsf-@{appname}.war"
-                       dest="@{base-app-dir}/build/jsf-@{appname}" />
-              </else>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="deploy.app">
-        <attribute name="base-app-dir"/>
-        <attribute name="appname"/>
-        <sequential>
-          <if>
-            <and>
-              <contains string="${applications-for-v3-only}"
-                        substring="@{appname}" />
-              <not>
-                <equals arg1="${container.name}" arg2="glassfishV3" />
-              </not>
-            </and>
-            <then>
-              <echo message="Skipping @{appname}.  That one runs on v3 only, and our current container is ${container.name}" />
-            </then>
-            <else>
-              <deploy.artifact
-                    artifact="@{base-app-dir}/build/jsf-@{appname}.war"
-                    appName="jsf-@{appname}"/>
-            </else>
-          </if>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="undeploy.app">
-        <attribute name="appname"/>
-        <sequential>
-            <undeploy.artifact artifact="jsf-@{appname}.war"
-                               appName="jsf-@{appname}"/>
-        </sequential>
-    </macrodef>
-
-    <target name="compile.base.sources">
-        <mkdir dir="${basedir}/build/classes"/>
-        <jsf.javac srcdir="${impl.dir}/systest/src"
-                   destdir="${basedir}/build/classes">
-            <classpath>
-                <path refid="test.compile.classpath"/>
-            </classpath>
-        </jsf.javac>
-    </target>
-
-    <target name="install" depends="compile.base.sources">
-        
-        <for list="${applications}" param="app" trim="true">
-            <sequential>
-                <undeploy.app appname="@{app}"/>
-                <build.app appname="@{app}"
-                            base-app-dir="${basedir}/@{app}"/>
-                <deploy.app appname="@{app}"
-                            base-app-dir="${basedir}/@{app}"/>
-            </sequential>
-        </for>
-
-    </target>
-
-    <target name="build" depends="compile.base.sources">
-        
-        <for list="${applications}" param="app" trim="true">
-            <sequential>
-                <build.app appname="@{app}"
-                            base-app-dir="${basedir}/@{app}"/>
-            </sequential>
-        </for>
-
-    </target>
-
-    <target name="remove">
-        
-        <for list="${applications}" param="app" trim="true">
-            <sequential>
-              <if>
-                <and>
-                  <contains string="${applications-for-v3-only}"
-                            substring="@{app}" />
-                  <not>
-                    <equals arg1="${container.name}" arg2="glassfishV3" />
-                  </not>
-                </and>
-                <then>
-                  <echo message="Skipping @{app}.  That one runs on v3 only, and our current container is ${container.name}" />
-                </then>
-                <else>
-                  <undeploy.app appname="@{app}"/>              
-                </else>
-              </if>
-            </sequential>
-        </for>
-        
-    </target>
-
-    <target name="clean"
-            description="Clean build and distribution directories">
-        
-        <delete dir="${basedir}/build"/>
-        <for list="${applications}" param="app" trim="true">
-            <sequential>
-               <delete dir="${basedir}/@{app}/build"/>
-               <delete dir="${basedir}/@{app}/target"/>
-            </sequential>
-        </for>
-               
-    </target>    
-
-
-    <!-- ********** Test Execution Targets ************************************ -->
-
-    <target name="test.no.install" 
-            description="Execute all tests against installed /jsf-* applications">
-
-        <ant antfile="build-tests.xml" target="test">
-          <property name="applications" value="${applications}" />
-        </ant>
-
-    </target>    
-
-
-    <target name="test" depends="install"
-            description="Execute all tests against installed /jsf-* applications">
-
-        <ant antfile="build-tests.xml" target="test">
-          <property name="applications" value="${applications}" />
-          <property name="applications-for-v3-only" 
-                    value="${applications-for-v3-only}" />
-          <property name="container.name" value="${container.name}" />
-        </ant>
-
-    </target>    
-        
-</project>
diff --git a/jsf-ri/systest-per-webapp/clientside-statesaving/src/java/com/sun/faces/systest/clientside/AjaxMultiformTestCase.java b/jsf-ri/systest-per-webapp/clientside-statesaving/src/java/com/sun/faces/systest/clientside/AjaxMultiformTestCase.java
deleted file mode 100644
index f1b63ba..0000000
--- a/jsf-ri/systest-per-webapp/clientside-statesaving/src/java/com/sun/faces/systest/clientside/AjaxMultiformTestCase.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.clientside;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.sun.faces.ajax.AjaxTagTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class AjaxMultiformTestCase extends AbstractTestCase {
-
-    public AjaxMultiformTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxMultiformTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxMultiform() throws Exception {
-        getPage("/faces/ajaxMultiform.xhtml");
-        System.out.println("Start ajax multiform test");
-        // First we'll check the first page was output correctly
-        checkTrue("countForm1:out1","0");
-        checkTrue("countForm2:out1","1");
-        checkTrue("countForm3:out1","2");
-        checkTrue("out2","3");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("countForm1:out1","4");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","3");
-
-        // Submit the ajax request
-        button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm2:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("countForm2:out1","5");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","3");
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/clientside-statesaving/src/java/com/sun/faces/systest/clientside/AjaxRequestBean.java b/jsf-ri/systest-per-webapp/clientside-statesaving/src/java/com/sun/faces/systest/clientside/AjaxRequestBean.java
deleted file mode 100644
index e8a24b1..0000000
--- a/jsf-ri/systest-per-webapp/clientside-statesaving/src/java/com/sun/faces/systest/clientside/AjaxRequestBean.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.clientside;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ValueChangeEvent;
-
- at ManagedBean(name="ajaxrequest")
- at SessionScoped
-public class AjaxRequestBean {
-    private Integer count = 0;
-
-    private String echo = "echo";
-    private String echo1 = "";
-    private String echo2 = "";
-    private String echo3 = "";
-    private String echo4 = "";
-
-    public String getEcho1() {
-        return echo1;
-    }
-
-    public void setEcho1(String echo1) {
-        this.echo1 = echo1;
-    }
-
-    public String getEcho2() {
-        return echo2;
-    }
-
-    public void setEcho2(String echo2) {
-        this.echo2 = echo2;
-    }
-
-    public String getEcho3() {
-        return echo3;
-    }
-
-    public void setEcho3(String echo3) {
-        this.echo3 = echo3;
-    }
-
-    public String getEcho4() {
-        return echo4;
-    }
-
-    public void setEcho4(String echo4) {
-        this.echo4 = echo4;
-    }
-
-    public String getEcho() {
-        return echo;
-    }
-
-    public void setEcho(String echo) {
-        this.echo = echo;
-    }
-
-    public void echoValue(ValueChangeEvent event) {
-        String str = (String)event.getNewValue();
-        echo = str;
-    }
-
-    public void resetEcho(ActionEvent ae) {
-        echo = "reset";
-        echo1 = "reset";
-        echo2 = "reset";
-        echo3 = "reset";
-        echo4 = "reset";
-    }
-
-    public Integer getCount() {
-        return count++;
-    }
-
-    public void resetCount(ActionEvent ae) {
-        count = 0;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/clientside-statesaving/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/clientside-statesaving/web/WEB-INF/web.xml
deleted file mode 100644
index 54d9f07..0000000
--- a/jsf-ri/systest-per-webapp/clientside-statesaving/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>com.sun.faces.managedBeanFactoryDecoratorClass</param-name>
-        <param-value>com.sun.faces.systest.NewManagedBeanFactory</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/clientside-statesaving/web/ajaxMultiform.xhtml b/jsf-ri/systest-per-webapp/clientside-statesaving/web/ajaxMultiform.xhtml
deleted file mode 100644
index 7335d39..0000000
--- a/jsf-ri/systest-per-webapp/clientside-statesaving/web/ajaxMultiform.xhtml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm1">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm1:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm1:reset" render="countForm1:out1"/>
-        </h:commandButton>
-    </h:form>
-    <h:form id="countForm2">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm2:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm2:reset" render="countForm2:out1"/>
-        </h:commandButton>
-    </h:form>
-    <h:form id="countForm3">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm3:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm3:reset" render="countForm3:out1"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/command-link-back-button/src/java/com/sun/faces/systest/CommandLinkBackButtonTestCase.java b/jsf-ri/systest-per-webapp/command-link-back-button/src/java/com/sun/faces/systest/CommandLinkBackButtonTestCase.java
deleted file mode 100644
index de2c575..0000000
--- a/jsf-ri/systest-per-webapp/command-link-back-button/src/java/com/sun/faces/systest/CommandLinkBackButtonTestCase.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure no extra baggage from a previously clicked commandLink
- * is submitted along with a button press.</p>
- */
-
-public class CommandLinkBackButtonTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public CommandLinkBackButtonTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CommandLinkBackButtonTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testInputFieldUpdate() throws Exception {
-	HtmlPage page = getPage("/faces/test.jsp");
-	List list;
-
-	HtmlAnchor link = null;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlAnchor.class); 
-	link = (HtmlAnchor) list.get(0);
-
-	// due to a bug in HtmlUnit 1.2.3, we can't just click the link:
-	// page = (HtmlPage) link.click();
-	// therefore, we have to hack around it.
-	list = page.getForms();
-	HtmlHiddenInput hidden = (HtmlHiddenInput) ((HtmlForm)list.get(0)).getInputByName("form:j_idcl");
-        assertTrue( hidden != null);
-	hidden.setValueAttribute("form:link");
-	page = (HtmlPage) ((HtmlForm)list.get(0)).submit();
-	
-	// make sure the page contains evidence that the hidden field
-	// *did* receive a value.
-        // PENDING (visvan) this doesn't work due to bug in HTMLUnit 1.2.3
-	// assertTrue(-1 != page.asText().indexOf("form:link"));
-	
-	page = getPage("/faces/test.jsp");
-	HtmlSubmitInput button = null;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        
-	// make sure the page contains evidence that the hidden field
-	// *did not* receive a value.
-	assertTrue(-1 == page.asText().indexOf("form:link"));
-
-    }
-    
-}
-
diff --git a/jsf-ri/systest-per-webapp/command-link-back-button/src/java/com/sun/faces/systest/model/BackingBean.java b/jsf-ri/systest-per-webapp/command-link-back-button/src/java/com/sun/faces/systest/model/BackingBean.java
deleted file mode 100644
index 38c63a5..0000000
--- a/jsf-ri/systest-per-webapp/command-link-back-button/src/java/com/sun/faces/systest/model/BackingBean.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.model;
-
-public class BackingBean extends Object {
-
-    public String linkPressed() {
-	result.append("linkPressed");
-	return "linkPressed";
-    }
-
-    public String buttonPressed() {
-	result.append("buttonPressed");
-	return "buttonPressed";
-    }
-
-    StringBuffer result = new StringBuffer();
-
-    public String getResult() {
-	return result.toString();
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/command-link-back-button/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/command-link-back-button/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 5a4f421..0000000
--- a/jsf-ri/systest-per-webapp/command-link-back-button/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>bean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.BackingBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <navigation-rule>
-    <from-view-id>/test.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>linkPressed</from-outcome>
-      <to-view-id>/linkPressed.jsp</to-view-id>
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>buttonPressed</from-outcome>
-      <to-view-id>/buttonPressed.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>*</from-view-id>
-    <navigation-case>
-      <from-outcome>back</from-outcome>
-      <to-view-id>/test.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/command-link-back-button/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/command-link-back-button/web/WEB-INF/web.xml
deleted file mode 100644
index 9a038b9..0000000
--- a/jsf-ri/systest-per-webapp/command-link-back-button/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/command-link-back-button/web/buttonPressed.jsp b/jsf-ri/systest-per-webapp/command-link-back-button/web/buttonPressed.jsp
deleted file mode 100644
index 4907c40..0000000
--- a/jsf-ri/systest-per-webapp/command-link-back-button/web/buttonPressed.jsp
+++ /dev/null
@@ -1,88 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Button Pressed</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Button Pressed</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:outputText value="Button Pressed" />
-
-    <h:messages />
-
-    <h:commandButton action="back" value="back" />
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/command-link-back-button/web/linkPressed.jsp b/jsf-ri/systest-per-webapp/command-link-back-button/web/linkPressed.jsp
deleted file mode 100644
index fdda748..0000000
--- a/jsf-ri/systest-per-webapp/command-link-back-button/web/linkPressed.jsp
+++ /dev/null
@@ -1,88 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Link Pressed</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Link Pressed</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:outputText value="Link Pressed" />
-
-    <h:messages />
-
-    <h:commandButton action="back" value="back" />
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/command-link-back-button/web/test.jsp b/jsf-ri/systest-per-webapp/command-link-back-button/web/test.jsp
deleted file mode 100644
index 4584b14..0000000
--- a/jsf-ri/systest-per-webapp/command-link-back-button/web/test.jsp
+++ /dev/null
@@ -1,98 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Command Link Back Button</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Command Link Back Button</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:commandLink id="link" action="#{bean.linkPressed}">
-      <h:outputText value="click" />
-    </h:commandLink>
-
-    <p />
-
-    <h:commandButton id="button" style="color: red" value="press" 
-                     action="#{bean.buttonPressed}" />
-
-    <p />
-
-    <h:outputText value="#{bean.result}" />
-
-    <h:messages />
-
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/src/java/placeholder.txt b/jsf-ri/systest-per-webapp/command-link-redirect/src/java/placeholder.txt
deleted file mode 100644
index 8d1c8b6..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/src/java/placeholder.txt
+++ /dev/null
@@ -1 +0,0 @@
- 
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/command-link-redirect/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 40c7362..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <navigation-rule>
-    <from-view-id>/one.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>two</from-outcome>
-      <to-view-id>/two.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>three</from-outcome>
-      <to-view-id>/three.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>four</from-outcome>
-      <to-view-id>/three.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>five</from-outcome>
-      <to-view-id>/five.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/two.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>one</from-outcome>
-      <to-view-id>/one.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>three</from-outcome>
-      <to-view-id>/three.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/three.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>one</from-outcome>
-      <to-view-id>/one.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>two</from-outcome>
-      <to-view-id>/two.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/four.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>two</from-outcome>
-      <to-view-id>/two.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>three</from-outcome>
-      <to-view-id>/three.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>one</from-outcome>
-      <to-view-id>/one.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>five</from-outcome>
-      <to-view-id>/five.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/five.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>two</from-outcome>
-      <to-view-id>/two.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>three</from-outcome>
-      <to-view-id>/three.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>one</from-outcome>
-      <to-view-id>/one.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>four</from-outcome>
-      <to-view-id>/four.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-  </navigation-rule>
-
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/command-link-redirect/web/WEB-INF/web.xml
deleted file mode 100644
index 9a038b9..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/web/five.jsp b/jsf-ri/systest-per-webapp/command-link-redirect/web/five.jsp
deleted file mode 100644
index 1511ddb..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/web/five.jsp
+++ /dev/null
@@ -1,112 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-    <p>Page Five</p>
-
-  <h:form>
-
-    <h:commandLink id="one" action="one">
-      <h:outputText value="one" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="three" action="three">
-      <h:outputText value="three" />
-    </h:commandLink>
-
-
-  </h:form>
-
-  <h:form>
-
-    <h:commandLink id="two" action="two">
-      <h:outputText value="two" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="four" action="four">
-      <h:outputText value="four" />
-    </h:commandLink>
-
-
-  </h:form>
-
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/web/four.jsp b/jsf-ri/systest-per-webapp/command-link-redirect/web/four.jsp
deleted file mode 100644
index 991cb38..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/web/four.jsp
+++ /dev/null
@@ -1,112 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-    <p>Page Four</p>
-
-  <h:form>
-
-    <h:commandLink id="one" action="one">
-      <h:outputText value="one" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="three" action="three">
-      <h:outputText value="three" />
-    </h:commandLink>
-
-
-  </h:form>
-
-  <h:form>
-
-    <h:commandLink id="two" action="two">
-      <h:outputText value="two" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="five" action="five">
-      <h:outputText value="five" />
-    </h:commandLink>
-
-
-  </h:form>
-
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/web/one.jsp b/jsf-ri/systest-per-webapp/command-link-redirect/web/one.jsp
deleted file mode 100644
index edadbf3..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/web/one.jsp
+++ /dev/null
@@ -1,146 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-    <p>Page One</p>
-
-	<ol>
-
-	  <li><p>Click one the "one" link below
-	  </p></li>
-
-	  <li><p>Use the browser back button to go back
-	  </p></li>
-
-	  <li><p>Click on the "two" link below
-	  </p></li>
-
-	  <li><p>Note you receive no IllegalStateException
-	  </p></li>
-
-	  <li><p>Click on the "one" link below
-	  </p></li>
-
-	  <li><p>Use the browser back button to go back
-	  </p></li>
-
-	  <li><p>Click on the "four" button" note that you go to page four
-	  </p></li>
-
-	  <li><p>Use the browser back button to go back
-	  </p></li>
-
-	  <li><p>Click on the "five" button" note that you go to page five
-	  </p></li>
-
-
-
-	</ol>
-
-
-  <h:form>
-
-    <h:commandLink id="two" action="two">
-      <h:outputText value="two" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="three" action="three">
-      <h:outputText value="three" />
-    </h:commandLink>
-
-
-  </h:form>
-
-  <h:form>
-
-    <h:commandLink id="four" action="four">
-      <h:outputText value="four" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="five" action="five">
-      <h:outputText value="five" />
-    </h:commandLink>
-
-
-  </h:form>
-
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/web/three.jsp b/jsf-ri/systest-per-webapp/command-link-redirect/web/three.jsp
deleted file mode 100644
index 7b415b9..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/web/three.jsp
+++ /dev/null
@@ -1,95 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <p>Page Three</p>
-
-    <h:commandLink id="one" action="one">
-      <h:outputText value="one" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="two" action="two">
-      <h:outputText value="two" />
-    </h:commandLink>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/command-link-redirect/web/two.jsp b/jsf-ri/systest-per-webapp/command-link-redirect/web/two.jsp
deleted file mode 100644
index 7d75dc4..0000000
--- a/jsf-ri/systest-per-webapp/command-link-redirect/web/two.jsp
+++ /dev/null
@@ -1,96 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <p>Page Two</p>
-
-    <h:commandLink id="one" action="one">
-      <h:outputText value="one" />
-    </h:commandLink>
-
-<br />
-
-    <h:commandLink id="three" action="three">
-      <h:outputText value="three" />
-    </h:commandLink>
-
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/com/sun/faces/systest/ConverterPropertyEditorTestCase.java b/jsf-ri/systest-per-webapp/converter-property-editor/src/java/com/sun/faces/systest/ConverterPropertyEditorTestCase.java
deleted file mode 100644
index 0339205..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/com/sun/faces/systest/ConverterPropertyEditorTestCase.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class ConverterPropertyEditorTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ConverterPropertyEditorTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ConverterPropertyEditorTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that selectOne conversion has successfully occurred.</p>
-     */
-
-    public void testConverterPropertyEditor() throws Exception {
-	HtmlPage page;
-	List list;
-	HtmlSubmitInput button;
-
-	page = getPage("/faces/selectone.jsp");
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-
-	assertTrue(-1 != page.asText().indexOf("This selectOneMenu is bound to a list of test.Payment"));
-    assertTrue(!page.asText().contains("Validation Error"));
-
-    page = getPage("/faces/selectoneRadio.jsp");
-	list = getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-
-	assertTrue(-1 != page.asText().indexOf("This selectOneRadio is bound to a list of test.Payment"));
-    assertTrue(!page.asText().contains("Validation Error"));
-
-    page = getPage("/faces/selectmany.jsp");
-	list = getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-
-	assertTrue(-1 != page.asText().indexOf("This selectManyMenu is bound to a list of test.Payment"));
-    assertTrue(!page.asText().contains("Validation Error"));
-
-        page = getPage("/faces/selectmanyListbox.jsp");
-        list = getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class); 
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("This selectManyListbox is bound to a list of test.Payment"));
-        assertTrue(!page.asText().contains("Validation Error"));
-
-        page = getPage("/faces/selectmanyCheckbox.jsp");
-        list = getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class); 
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("This selectManyCheckbox is bound to a list of test.Payment"));
-        assertTrue(!page.asText().contains("Validation Error"));
-
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/Payment.java b/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/Payment.java
deleted file mode 100644
index a4acdce..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/Payment.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * Payment.java
- *
- * Created on 10 novembre 2005, 16.34
- *
- */
-
-package test;
-
-import java.math.BigDecimal;
-
-public class Payment {
-
-    private String value;
-    private String label;
-
-    public Payment() {
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return "Payment[" + getLabel() + ": " + getValue() + "]";
-    }
-
-    public boolean equals(Object rhs) {
-        if (!(rhs instanceof Payment)) {
-            return false;
-        }
-        String rv = ((Payment) rhs).getValue();
-        return getValue() == rv || getValue() != null &&
-            getValue().equals(((Payment) rhs).getValue());
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/PaymentConverter.java b/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/PaymentConverter.java
deleted file mode 100644
index 31188a2..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/PaymentConverter.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * PaymentConverter.java
- *
- * Created on 10 novembre 2005, 20.25
- *
- */
-
-package test;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-
-public class PaymentConverter  implements Converter {
-
-    public String getAsString(FacesContext context, UIComponent component,
-            Object object) throws ConverterException {
-        System.out.println("CONVERTER CALLED!!!!!!!! getAsString(component=" +
-            component + ", object=" + object + ")");
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-        if(object == null) {
-            return null;
-        }
-        if (object instanceof String) {
-            return (String) object;
-        }
-        Payment payment = (Payment) object;
-        return payment.getValue();
-    }
-
-    public Object getAsObject(FacesContext context, UIComponent component,
-            String value) throws ConverterException {
-        System.out.println("CONVERTER CALLED!!!!!!!! getAsObject(component=" +
-            component + ", id=" + (component != null ? component.getId() : "null") +
-            ", value=" + value + ")");
-
-        if (context == null || component == null) {
-            throw new NullPointerException();
-        }
-        if (value == null || value.equals("")) {
-            return null;
-        }
-
-        Payment p = new Payment();
-        p.setLabel("credit card " + value);
-        p.setValue(value);
-
-        return p;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/TestBean.java b/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/TestBean.java
deleted file mode 100644
index dc6b1dc..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/src/java/test/TestBean.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- *
- * Created on 10 agosto 2006, 16.45
- */
-
-package test;
-
-import javax.faces.model.SelectItem;
-
-
-/**
- *
- * @author agori
- */
-public class TestBean {
-
-    private Payment payment;
-    private Payment[] payments = new Payment[0];
-
-    public Payment getPayment() {
-        return payment;
-    }
-
-    public void setPayment(Payment payment) {
-        this.payment = payment;
-    }
-
-    public Payment[] getPayments() {
-        return payments;
-    }
-
-    public void setPayments(Payment[] payments) {
-        System.out.println(this + " setting payments to " + java.util.Arrays.asList(payments));
-        this.payments = payments;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 7e1dd14..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- =========== FULL CONFIGURATION FILE ================================== -->
-
-<faces-config version="1.2" 
-    xmlns="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
-    
-    <converter>
-        <converter-for-class>test.Payment</converter-for-class>
-        <converter-class>test.PaymentConverter</converter-class>
-    </converter>
-    
-    <managed-bean>
-        <managed-bean-name>testBean</managed-bean-name>
-        <managed-bean-class>test.TestBean</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>payment4</managed-bean-name>
-        <managed-bean-class>test.Payment</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-        <managed-property>
-	        <property-name>label</property-name>
-	        <value>Credit Card 4</value>
-        </managed-property>
-        <managed-property>
-	        <property-name>value</property-name>
-	        <value>4</value>
-        </managed-property>
-    </managed-bean>
-    
-    <managed-bean>
-        <managed-bean-name>testBean2</managed-bean-name>
-        <managed-bean-class>test.TestBean</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-        <managed-property>
-            <property-name>payment</property-name>
-            <property-class>test.Payment</property-class>
-            <value>#{payment4}</value>
-        </managed-property>
-        <managed-property>
-            <property-name>payments</property-name>
-            <list-entries>
-                <value-class>test.Payment</value-class>
-                <value>#{payment4}</value>
-            </list-entries>
-        </managed-property>
-    </managed-bean>
-    
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/sun-web.xml b/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/sun-web.xml
deleted file mode 100644
index 1b656ab..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/sun-web.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
-<sun-web-app error-url="">
-  <context-root>/jsf-converter-property-editor</context-root>
-  <class-loader delegate="true"/>
-  <jsp-config>
-    <property name="classdebuginfo" value="true">
-      <description>Enable debug info compilation in the generated servlet class</description>
-    </property>
-    <property name="mappedfile" value="true">
-      <description>Maintain a one-to-one correspondence between static content and the generated servlet class' java code</description>
-    </property>
-  </jsp-config>
-</sun-web-app>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/web.xml
deleted file mode 100644
index c46571c..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-    <context-param>
-        <param-name>com.sun.faces.verifyObjects</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.validateXml</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.registerConverterPropertyEditors</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-        </servlet>
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-    <session-config>
-        <session-timeout>
-            30
-        </session-timeout>
-    </session-config>
-    <welcome-file-list>
-	<welcome-file>
-            index.jsp
-        </welcome-file>
-    </welcome-file-list>
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/index.jsp b/jsf-ri/systest-per-webapp/converter-property-editor/web/index.jsp
deleted file mode 100644
index db37d7c..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/index.jsp
+++ /dev/null
@@ -1,40 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<jsp:forward page="faces/selectone.jsp"/>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmany.jsp b/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmany.jsp
deleted file mode 100644
index 2405acf..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmany.jsp
+++ /dev/null
@@ -1,80 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>JSP Page</title>
-    </head>
-    <body>
-        <f:view>
-            <h:form>
-
-<p>This selectManyMenu is bound to a list of test.Payment instances.  There
-is a converter-for-class registered for the test.Payment class.  This
-will cause the EL coerceToType to be called to coerce the value from a
-String to a test.Payment instance.  The EL uses JavaBeans PropertyEditor
-instances to do this. </p>
-
-<p>This test verifies that a custom converter-for-class converter is
-called by the EL coerceToType via the ConverterPropertyEditor class in
-Sun's JSF Impl.</p>
-
-<p>                <h:selectManyMenu value="#{testBean.payments}">
-                    <f:selectItem itemLabel="cc1" itemValue="1"/>
-                    <f:selectItem itemLabel="cc2" itemValue="2"/>
-                </h:selectManyMenu></p>
-<p>                <h:selectManyMenu value="#{testBean2.payments}">
-                    <f:selectItem itemLabel="cc3" itemValue="3"/>
-                    <f:selectItem itemLabel="cc4" itemValue="4"/></p>
-                </h:selectManyMenu>
-
-<p>Messages: <h:messages /> </p>
-
-<p>                <h:commandButton id="press" value="submit" /></p>
-            </h:form>
-        </f:view>
-    </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmanyCheckbox.jsp b/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmanyCheckbox.jsp
deleted file mode 100644
index f982523..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmanyCheckbox.jsp
+++ /dev/null
@@ -1,80 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>JSP Page</title>
-    </head>
-    <body>
-        <f:view>
-            <h:form>
-
-<p>This selectManyCheckbox is bound to a list of test.Payment instances.  There
-is a converter-for-class registered for the test.Payment class.  This
-will cause the EL coerceToType to be called to coerce the value from a
-String to a test.Payment instance.  The EL uses JavaBeans PropertyEditor
-instances to do this. </p>
-
-<p>This test verifies that a custom converter-for-class converter is
-called by the EL coerceToType via the ConverterPropertyEditor class in
-Sun's JSF Impl.</p>
-
-<p>                <h:selectManyCheckbox value="#{testBean.payments}">
-                    <f:selectItem itemLabel="cc1" itemValue="1"/>
-                    <f:selectItem itemLabel="cc2" itemValue="2"/>
-                </h:selectManyCheckbox></p>
-<p>                <h:selectManyCheckbox value="#{testBean2.payments}">
-                    <f:selectItem itemLabel="cc3" itemValue="3"/>
-                    <f:selectItem itemLabel="cc4" itemValue="4"/></p>
-                </h:selectManyCheckbox>
-
-<p>Messages: <h:messages /> </p>
-
-<p>                <h:commandButton id="press" value="submit" /></p>
-            </h:form>
-        </f:view>
-    </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmanyListbox.jsp b/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmanyListbox.jsp
deleted file mode 100644
index 60e14e8..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectmanyListbox.jsp
+++ /dev/null
@@ -1,80 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>JSP Page</title>
-    </head>
-    <body>
-        <f:view>
-            <h:form>
-
-<p>This selectManyListbox is bound to a list of test.Payment instances.  There
-is a converter-for-class registered for the test.Payment class.  This
-will cause the EL coerceToType to be called to coerce the value from a
-String to a test.Payment instance.  The EL uses JavaBeans PropertyEditor
-instances to do this. </p>
-
-<p>This test verifies that a custom converter-for-class converter is
-called by the EL coerceToType via the ConverterPropertyEditor class in
-Sun's JSF Impl.</p>
-
-<p>                <h:selectManyListbox value="#{testBean.payments}">
-                    <f:selectItem itemLabel="cc1" itemValue="1"/>
-                    <f:selectItem itemLabel="cc2" itemValue="2"/>
-                </h:selectManyListbox></p>
-<p>                <h:selectManyListbox value="#{testBean2.payments}">
-                    <f:selectItem itemLabel="cc3" itemValue="3"/>
-                    <f:selectItem itemLabel="cc4" itemValue="4"/></p>
-                </h:selectManyListbox>
-
-<p>Messages: <h:messages /> </p>
-
-<p>                <h:commandButton id="press" value="submit" /></p>
-            </h:form>
-        </f:view>
-    </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectone.jsp b/jsf-ri/systest-per-webapp/converter-property-editor/web/selectone.jsp
deleted file mode 100644
index eddd3d5..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectone.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>JSP Page</title>
-    </head>
-    <body>
-        <f:view>
-            <h:form>
-
-<p>This selectOneMenu is bound to a list of test.Payment instances.  There
-is a converter-for-class registered for the test.Payment class.  This
-will cause the EL coerceToType to be called to coerce the value from a
-String to a test.Payment instance.  The EL uses JavaBeans PropertyEditor
-instances to do this. </p>
-
-<p>This test verifies that a custom converter-for-class converter is
-called by the EL coerceToType via the ConverterPropertyEditor class in
-Sun's JSF Impl.</p>
-
-       <p>         <h:selectOneMenu value="#{testBean.payment}">
-                    <f:selectItem itemLabel="cc1" itemValue="1"/>
-                    <f:selectItem itemLabel="cc2" itemValue="2"/>
-                </h:selectOneMenu></p>
-
-<p>       <h:selectOneMenu value="#{testBean2.payment}">
-          <f:selectItem itemLabel="cc3" itemValue="3"/>
-          <f:selectItem itemLabel="cc4" itemValue="4"/>
-       </h:selectOneMenu></p>
-
-<p>Messages: <h:messages /> </p>
-
-                <p><h:commandButton id="press" value="submit" /></p>
-            </h:form>
-        </f:view>
-    </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectoneRadio.jsp b/jsf-ri/systest-per-webapp/converter-property-editor/web/selectoneRadio.jsp
deleted file mode 100644
index c81cf9e..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/selectoneRadio.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>JSP Page</title>
-    </head>
-    <body>
-        <f:view>
-            <h:form>
-
-<p>This selectOneRadio is bound to a list of test.Payment instances.  There
-is a converter-for-class registered for the test.Payment class.  This
-will cause the EL coerceToType to be called to coerce the value from a
-String to a test.Payment instance.  The EL uses JavaBeans PropertyEditor
-instances to do this. </p>
-
-<p>This test verifies that a custom converter-for-class converter is
-called by the EL coerceToType via the ConverterPropertyEditor class in
-Sun's JSF Impl.</p>
-
-       <p>         <h:selectOneRadio value="#{testBean.payment}">
-                    <f:selectItem itemLabel="cc1" itemValue="1"/>
-                    <f:selectItem itemLabel="cc2" itemValue="2"/>
-                </h:selectOneRadio></p>
-
-<p>       <h:selectOneRadio value="#{testBean2.payment}">
-          <f:selectItem itemLabel="cc3" itemValue="3"/>
-          <f:selectItem itemLabel="cc4" itemValue="4"/>
-       </h:selectOneRadio></p>
-
-<p>Messages: <h:messages /> </p>
-
-                <p><h:commandButton id="press" value="submit" /></p>
-            </h:form>
-        </f:view>
-    </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/converter-property-editor/web/welcome.jsp b/jsf-ri/systest-per-webapp/converter-property-editor/web/welcome.jsp
deleted file mode 100644
index b48d661..0000000
--- a/jsf-ri/systest-per-webapp/converter-property-editor/web/welcome.jsp
+++ /dev/null
@@ -1,80 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>JSP Page</title>
-    </head>
-    <body>
-        <f:view>
-            <h:form>
-
-<p>This selectOneMenu is bound to a list test.Payment instances.  There
-is a converter-for-class registered for the test.Payment class.  This
-will cause the EL coerceToType to be called to coerce the value from a
-String to a test.Payment instance.  The EL uses JavaBeans PropertyEditor
-instances to do this. </p>
-
-<p>This test verifies that a custom converter-for-class converter is
-called by the EL coerceToType via the ConverterPropertyEditor class in
-Sun's JSF Impl.</p>
-
-<p>This test uses UISelcOne.</p>
-
-                <h:selectOneMenu value="#{testBean.payment}">
-                    <f:selectItem itemLabel="cc1" itemValue="1"/>
-                    <f:selectItem itemLabel="cc2" itemValue="2"/>
-                </h:selectOneMenu>
-                <h:commandButton id="press" value="submit" />
-            </h:form>
-
-<p>Test <a href="selectmany.jsp">UISelectMany</a>.</p>
-
-
-
-        </f:view>
-    </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/core-tags/src/java/com/sun/faces/systest/CoreTagsListener.java b/jsf-ri/systest-per-webapp/core-tags/src/java/com/sun/faces/systest/CoreTagsListener.java
deleted file mode 100644
index 922703c..0000000
--- a/jsf-ri/systest-per-webapp/core-tags/src/java/com/sun/faces/systest/CoreTagsListener.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-/**
- * <p>Right now, just a minimal listener that sets the java.beans.Beans.DesignTime
- *    property to "true" to test the bypass of the TLV and allowance of not
- *    specifying non required attributes. </p> 
- * <p/>
- */
-public class CoreTagsListener implements ServletContextListener {
-
-
-    // -------------------------------------------------------- Static Variables
-
-    /**
-     * <p>The <code>Log</code> instance for this class.</p>
-     */
-    private static Log log = LogFactory.getLog(CoreTagsListener.class);
-
-
-    // ------------------------------------------ ServletContextListener Methods
-    public void contextInitialized(ServletContextEvent sce) {
-        java.beans.Beans.setDesignTime(true);
-    }
-
-
-    public void contextDestroyed(ServletContextEvent sce) {
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-} 
-
diff --git a/jsf-ri/systest-per-webapp/core-tags/src/java/com/sun/faces/systest/CoreTagsTestCase.java b/jsf-ri/systest-per-webapp/core-tags/src/java/com/sun/faces/systest/CoreTagsTestCase.java
deleted file mode 100644
index 1c9fb3e..0000000
--- a/jsf-ri/systest-per-webapp/core-tags/src/java/com/sun/faces/systest/CoreTagsTestCase.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure no extra baggage from a previously clicked commandLink
- * is submitted along with a button press.</p>
- */
-
-public class CoreTagsTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public CoreTagsTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CoreTagsTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testListenerPage() throws Exception {
-	HtmlPage page = getPage("/faces/listener_noval.jsp");
-
-	assertTrue(-1 != page.asText().indexOf("submit with listener no typebinding"));
-
-    }
-    
-    public void testConverterPage() throws Exception {
-	HtmlPage page = getPage("/faces/converter_noval.jsp");
-
-	assertTrue(-1 != page.asText().indexOf("submit converter page"));
-
-    }
-
-    public void testValidatorPage() throws Exception {
-	HtmlPage page = getPage("/faces/validator_noval.jsp");
-
-	assertTrue(-1 != page.asText().indexOf("submit validator page"));
-
-    }
-}
-
diff --git a/jsf-ri/systest-per-webapp/core-tags/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/core-tags/web/WEB-INF/web.xml
deleted file mode 100644
index 6e3f721..0000000
--- a/jsf-ri/systest-per-webapp/core-tags/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-  <listener>
-    <listener-class>com.sun.faces.systest.CoreTagsListener</listener-class>
-  </listener>
-
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/core-tags/web/converter_noval.jsp b/jsf-ri/systest-per-webapp/core-tags/web/converter_noval.jsp
deleted file mode 100644
index fe14238..0000000
--- a/jsf-ri/systest-per-webapp/core-tags/web/converter_noval.jsp
+++ /dev/null
@@ -1,104 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Converters</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Converters</h1>
-
-<f:view>
-
-  <h:form>
-
-<%-- Custom Converter with no no attributes --%>
-
-      <h:inputText id="text1"> 
-        <f:converter />
-      </h:inputText>
-
-<%-- DateTime Converter with no  attributes --%>
-
-      <h:inputText id="text05" value="10:00:01 PM" size="10" maxlength="20">
-         <f:convertDateTime />
-      </h:inputText>
-
-<%-- Number Converter with no attributes --%>
-
-      <h:inputText id="texti09" value="9" size="10" maxlength="20">
-         <f:convertNumber />
-      </h:inputText>
-
-      <h:commandButton value="submit converter page" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/core-tags/web/listener_noval.jsp b/jsf-ri/systest-per-webapp/core-tags/web/listener_noval.jsp
deleted file mode 100644
index 19ad424..0000000
--- a/jsf-ri/systest-per-webapp/core-tags/web/listener_noval.jsp
+++ /dev/null
@@ -1,95 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>ActionListeners and ValueChangeListeners</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>ActionListeners and ValueChangeListeners</h1>
-
-<f:view>
-
-  <h:form>
-
-<%-- ValueChangeListener with no attributes --%>
-
-      <h:inputText id="text0" > 
-          <f:valueChangeListener />
-      </h:inputText>
-
-<%-- ActionListener with no attributes --%>
-      <h:commandButton id="button0" value="submit with listener no typebinding" > 
-          <f:actionListener />
-      </h:commandButton>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/core-tags/web/validator_noval.jsp b/jsf-ri/systest-per-webapp/core-tags/web/validator_noval.jsp
deleted file mode 100644
index 920d320..0000000
--- a/jsf-ri/systest-per-webapp/core-tags/web/validator_noval.jsp
+++ /dev/null
@@ -1,92 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Validators</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Validators</h1>
-
-<f:view>
-
-  <h:form>
-
-<%-- Custom Validator with no attributes --%>
-
-      <h:inputText id="text1"> 
-        <f:validator />
-      </h:inputText>
-
-      <h:commandButton value="submit validator page" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/disable-bean-validator/src/java/com/sun/faces/systest/DisableBeanValidatorTestCase.java b/jsf-ri/systest-per-webapp/disable-bean-validator/src/java/com/sun/faces/systest/DisableBeanValidatorTestCase.java
deleted file mode 100644
index 0d9d5c9..0000000
--- a/jsf-ri/systest-per-webapp/disable-bean-validator/src/java/com/sun/faces/systest/DisableBeanValidatorTestCase.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class DisableBeanValidatorTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public DisableBeanValidatorTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(DisableBeanValidatorTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-
-    public void testDisableBeanValidator() throws Exception {
-	HtmlPage page = getPage("/faces/index.xhtml");
-	assertTrue(-1 == page.asText().indexOf("javax.faces.validator.BeanValidator"));
-	page = getPage("/faces/enable.xhtml");
-	assertTrue(-1 != page.asText().indexOf("javax.faces.validator.BeanValidator"));
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/disable-bean-validator/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/disable-bean-validator/web/WEB-INF/web.xml
deleted file mode 100644
index 3feccd4..0000000
--- a/jsf-ri/systest-per-webapp/disable-bean-validator/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--  
-
- The contents of this file are subject to the terms 
- of the Common Development and Distribution License 
- (the "License").  You may not use this file except 
- in compliance with the License.
- 
- You can obtain a copy of the license at 
- glassfish/bootstrap/legal/CDDLv1.0.txt or 
- https://glassfish.dev.java.net/public/CDDLv1.0.html. 
- See the License for the specific language governing 
- permissions and limitations under the License.
- 
- When distributing Covered Code, include this CDDL 
- HEADER in each file and include the License file at 
- glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
- add the following below this CDDL HEADER, with the 
- fields enclosed by brackets "[]" replaced with your 
- own identifying information: Portions Copyright [yyyy] 
- [name of copyright owner]
-
- -->
-
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-  <description>Disable Bean Validator</description>
-  <display-name>jsf-disable-bean-validator</display-name>
-
-    <context-param>
-        <param-name>javax.faces.validator.DISABLE_DEFAULT_BEAN_VALIDATOR</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.allowTextChildren</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <!-- Faces Servlet Mapping -->
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-    <url-pattern>*.jsf</url-pattern>
-  </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/disable-bean-validator/web/enable.xhtml b/jsf-ri/systest-per-webapp/disable-bean-validator/web/enable.xhtml
deleted file mode 100644
index ef68d50..0000000
--- a/jsf-ri/systest-per-webapp/disable-bean-validator/web/enable.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>Ensure DISABLE_BEAN_VALIDATOR context-param works</title>
-</h:head>
-<h:body bgcolor="white">
-  <h:form prependId="false" id="form1">
-
-    <p>
-
-       <h:inputText>
-         <f:validateBean />
-         <ui:repeat var="validator" value="#{component.parent.validators}">
-            #{validator.class.name}<br />
-         </ui:repeat>
-      </h:inputText>
-
-    </p>
-
-
-  </h:form>
-
-</h:body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/disable-bean-validator/web/index.html b/jsf-ri/systest-per-webapp/disable-bean-validator/web/index.html
deleted file mode 100644
index dc9261e..0000000
--- a/jsf-ri/systest-per-webapp/disable-bean-validator/web/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=index.jsf">
-</head>
-
-<body>
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/disable-bean-validator/web/index.xhtml b/jsf-ri/systest-per-webapp/disable-bean-validator/web/index.xhtml
deleted file mode 100644
index 70b5b4e..0000000
--- a/jsf-ri/systest-per-webapp/disable-bean-validator/web/index.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ensure DISABLE_BEAN_VALIDATOR context-param works</title>
-</h:head>
-<h:body bgcolor="white">
-  <h:form prependId="false" id="form1">
-
-    <p>
-
-      <h:inputText>
-         <ui:repeat var="validator" value="#{component.parent.validators}">
-            #{validator.class.name}<br />
-         </ui:repeat>
-      </h:inputText>
-
-    </p>
-
-
-  </h:form>
-
-</h:body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeBean.java b/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeBean.java
deleted file mode 100644
index f6bd324..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeBean.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-/**
- * @author youngm
- */
-public class UnicodeBean {
-
-    /**
-     * The unicode value \u1234 should be encoded with ISO-8859-1 and US-ASCII output.
-     * The unicode value \u00c4 should be encoded with US-ASCII only.
-     * No encoding should happen with UTF-8 output as the stream will be able
-     * to represent the UTF-16 representation of the string. 
-     */
-    public String getValue() {
-        return "a\u1234a Unicode, german umlaut a=b\u00c4b";
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeBeanFilter.java b/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeBeanFilter.java
deleted file mode 100644
index 98a8482..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeBeanFilter.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.systest;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-
-import com.sun.faces.config.WebConfiguration;
-
-/**
- * a filter which sets the character encoding of the request and response to the one set by the browsers
- * Accept-Encoding header.
- * This is mainly usful for the UnicodeTestCase where we have to check the response with different encodings.
- */
-public class UnicodeBeanFilter implements Filter {
-
-    private ServletContext ctx;
-    public void init(FilterConfig filterConfig) throws ServletException {
-        ctx = filterConfig.getServletContext();
-    }
-
-    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
-        if (servletRequest instanceof HttpServletRequest) {
-            HttpServletRequest hreq = (HttpServletRequest) servletRequest;
-            String charsetEncoding = hreq.getHeader("Accept-Encoding");
-            
-            servletRequest.setCharacterEncoding(charsetEncoding);
-            servletResponse.setCharacterEncoding(charsetEncoding);
-            WebConfiguration config = WebConfiguration.getInstance(ctx);            
-            config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.DisableUnicodeEscaping, servletRequest.getParameter("escape"));
-        }
-        filterChain.doFilter(servletRequest, servletResponse);
-    }
-
-    public void destroy() {
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeTestCase.java b/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeTestCase.java
deleted file mode 100644
index 695d0d8..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/src/java/com/sun/faces/systest/UnicodeTestCase.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p> Make sure that an application that replaces the ApplicationFactory but
- * uses the decorator pattern to allow the existing ApplicationImpl to do the
- * bulk of the requests works. </p>
- */
-
-public class UnicodeTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public UnicodeTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(UnicodeTestCase.class));
-    }
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testUnicodeEscapingTrue() throws Exception {
-        client.addRequestHeader("Accept-Encoding", "UTF-8");
-        HtmlPage page = getPage("/faces/indexUTF.jsp?escape=true");
-        assertTrue(
-              "Title should contain the unicode characters '\u1234' and '\u00c4'.",
-              page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              !page.getWebResponse().getContentAsString().contains("aሴa") &&
-              page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              !page.getWebResponse().getContentAsString().contains("bÄb"));
-
-        client.addRequestHeader("Accept-Encoding", "US-ASCII");
-        page = getPage("/faces/indexUSASCII.jsp?escape=true");
-        assertTrue(
-              "Title should contain the unicode characters replaced by ?.",
-              !page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              page.getWebResponse().getContentAsString().contains("a?a") &&
-              !page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              page.getWebResponse().getContentAsString().contains("b?b"));
-
-        client.addRequestHeader("Accept-Encoding", "ISO-8859-1");
-        page = getPage("/faces/indexISO8859_1.jsp?escape=true");
-        assertTrue(
-              "Title should contain the unicode character replaced by ? but the correct iso character.",
-              !page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              page.getWebResponse().getContentAsString().contains("a?a") &&
-              page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              !page.getWebResponse().getContentAsString().contains("bÄb"));
-    }
-
-    public void testUnicodeEscapingFalse() throws Exception {
-        client.addRequestHeader("Accept-Encoding", "UTF-8");
-        HtmlPage page = getPage("/faces/indexUTF.jsp?escape=false");
-        assertTrue(
-              "Title should contain the escaped unicode characters only.",
-              !page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              page.getWebResponse().getContentAsString().contains("aሴa") &&
-              !page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              page.getWebResponse().getContentAsString().contains("bÄb"));
-
-        client.addRequestHeader("Accept-Encoding", "US-ASCII");
-        page = getPage("/faces/indexUSASCII.jsp?escape=false");
-        assertTrue(
-              "Title should contain the escaped unicode characters only.",
-              !page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              page.getWebResponse().getContentAsString().contains("aሴa") &&
-              !page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              page.getWebResponse().getContentAsString().contains("bÄb"));
-
-        client.addRequestHeader("Accept-Encoding", "ISO-8859-1");
-        page = getPage("/faces/indexISO8859_1.jsp?escape=false");
-        assertTrue(
-              "Title should contain the escaped unicode characters only.",
-              !page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              page.getWebResponse().getContentAsString().contains("aሴa") &&
-              !page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              page.getWebResponse().getContentAsString().contains("bÄb"));
-    }
-
-    public void testUnicodeEscapingAuto() throws Exception {
-        client.addRequestHeader("Accept-Encoding", "UTF-8");
-        HtmlPage page = getPage("/faces/indexUTF.jsp?escape=auto");
-        assertTrue(
-              "Title should contain the unicode characters '\u1234' and '\u00c4'.",
-              page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              !page.getWebResponse().getContentAsString().contains("aሴa") &&
-              page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              !page.getWebResponse().getContentAsString().contains("bÄb"));
-
-        client.addRequestHeader("Accept-Encoding", "US-ASCII");
-        page = getPage("/faces/indexUSASCII.jsp?escape=auto");
-        assertTrue(
-              "Title should contain the escaped entity 'ሴ' and the escaped umlaut a.",
-              !page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              page.getWebResponse().getContentAsString().contains("aሴa") &&
-              !page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              page.getWebResponse().getContentAsString().contains("bÄb"));
-
-        client.addRequestHeader("Accept-Encoding", "ISO-8859-1");
-        page = getPage("/faces/indexISO8859_1.jsp?escape=auto");
-        assertTrue(
-              "Title should contain the escaped entity 'ሴ' and the correct iso character.",
-              !page.getWebResponse().getContentAsString().contains("a\u1234a") &&
-              page.getWebResponse().getContentAsString().contains("aሴa") &&
-              page.getWebResponse().getContentAsString().contains("b\u00c4b") &&
-              !page.getWebResponse().getContentAsString().contains("bÄb"));
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/faces-config.xml
deleted file mode 100644
index cc97928..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>unicodeBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.UnicodeBean</managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-  </managed-bean>
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/web.xml
deleted file mode 100644
index 58066ea..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-    <display-name>Unicode Test</display-name>
-    <description>
-        Unicode Test
-    </description>
-
-    <context-param>
-        <param-name>com.sun.faces.disableUnicodeEscaping</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <filter>
-        <filter-name>CharsetEncodingSetter</filter-name>
-        <filter-class>com.sun.faces.systest.UnicodeBeanFilter</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>CharsetEncodingSetter</filter-name>
-        <servlet-name>Faces Servlet</servlet-name>
-    </filter-mapping>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexISO8859_1.jsp b/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexISO8859_1.jsp
deleted file mode 100644
index 92589ea..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexISO8859_1.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
-
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt.
- See the License for the specific language governing
- permission and limitations under the License.
-
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
-
- [Name of File] [ver.__] [Date]
-
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-<%@ page contentType="application/xhtml+xml" pageEncoding="ISO-8859-1" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<f:view>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>Hello <h:outputText value="#{unicodeBean.value}"/></title> </head>
-</html>
-</f:view>
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexUSASCII.jsp b/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexUSASCII.jsp
deleted file mode 100644
index 1950506..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexUSASCII.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
-
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt.
- See the License for the specific language governing
- permission and limitations under the License.
-
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
-
- [Name of File] [ver.__] [Date]
-
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-<%@ page contentType="application/xhtml+xml" pageEncoding="US-ASCII" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<f:view>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>Hello <h:outputText value="#{unicodeBean.value}"/></title> </head>
-</html>
-</f:view>
diff --git a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexUTF.jsp b/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexUTF.jsp
deleted file mode 100644
index af14e77..0000000
--- a/jsf-ri/systest-per-webapp/disable-unicode-escaping/web/indexUTF.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
-
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt.
- See the License for the specific language governing
- permission and limitations under the License.
-
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
-
- [Name of File] [ver.__] [Date]
-
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-<%@ page contentType="application/xhtml+xml" pageEncoding="UTF-8" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<f:view>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>Hello <h:outputText value="#{unicodeBean.value}"/></title> </head>
-</html>
-</f:view>
diff --git a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/DocumentOrderingTestCase.java b/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/DocumentOrderingTestCase.java
deleted file mode 100644
index 48023df..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/DocumentOrderingTestCase.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-public class DocumentOrderingTestCase extends AbstractTestCase {
-
-
-    public DocumentOrderingTestCase(String name) {
-           super(name);
-       }
-
-       /**
-        * Set up instance variables required by this test case.
-        */
-       public void setUp() throws Exception {
-           super.setUp();
-       }
-
-
-       /**
-        * Return the tests included in this test suite.
-        */
-       public static Test suite() {
-           return (new TestSuite(DocumentOrderingTestCase.class));
-       }
-
-
-       /**
-        * Tear down instance variables required by this test case.
-        */
-       public void tearDown() {
-           super.tearDown();
-       }
-
-
-       // ------------------------------------------------------------ Test Methods
-
-       public void testDocumentOrdering() throws Exception {
-
-           HtmlPage page = getPage("/faces/test.xhtml");
-           assertTrue(page.asText().contains("Order Correct: true"));
-
-       }
-}
diff --git a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerA.java b/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerA.java
deleted file mode 100644
index 8120232..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerA.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerA implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-    
-}
diff --git a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerB.java b/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerB.java
deleted file mode 100644
index 3fa5952..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerB.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerB implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerC.java b/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerC.java
deleted file mode 100644
index 80adb51..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerC.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerC implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerD.java b/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerD.java
deleted file mode 100644
index 4bb66e1..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/PhaseListenerD.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-
-/**
- * Created by IntelliJ IDEA. User: rlubke Date: Dec 2, 2008 Time: 2:00:51 PM To
- * change this template use File | Settings | File Templates.
- */
-public class PhaseListenerD implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public void beforePhase(PhaseEvent event) {
-        // no-op
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/model/OrderingBean.java b/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/model/OrderingBean.java
deleted file mode 100644
index 91ddeb4..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/src/java/com/sun/faces/systest/model/OrderingBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import javax.faces.FactoryFinder;
-import javax.faces.event.PhaseListener;
-
- at ManagedBean
-public class OrderingBean {
-
-    public boolean isOrderCorrect() {
-
-        LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-        Lifecycle l = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-        PhaseListener[] listeners = l.getPhaseListeners();
-        List<PhaseListener> list = new ArrayList<PhaseListener>();
-        for (PhaseListener listener : listeners) {
-            if (listener.getClass().getName().contains("com.sun.faces.systest.PhaseListener")) {
-                list.add(listener);
-            }
-        }
-        listeners = list.toArray(new PhaseListener[list.size()]);
-        String[] suffixes = { "C", "B", "A", "D"};
-        if (listeners.length != 4) {
-            System.out.println("INCORRECT LISTENER COUNT");
-            return false;
-        }
-        for (int i = 0; i < listeners.length; i++) {
-            if (!listeners[i].getClass().getName().endsWith(suffixes[i])) {
-                System.out.println("INCORRECT DOCUMENT ORDERING: " + Arrays.toString(listeners));
-                return false;
-            }
-        }
-
-        return true;
-
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 44b542a..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-              version="2.0">
-    <name>D</name>
-
-    <!-- this ordering info shouldn't be considered -->
-    <ordering>
-        <before>
-            <others/>
-        </before>
-    </ordering>
-
-    <lifecycle>
-        <phase-listener>com.sun.faces.systest.PhaseListenerD</phase-listener>
-    </lifecycle>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/faces-configB.xml b/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/faces-configB.xml
deleted file mode 100644
index b143710..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/faces-configB.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-              version="2.0">
-    <name>B</name>
-
-    <lifecycle>
-        <phase-listener>com.sun.faces.systest.PhaseListenerB</phase-listener>
-    </lifecycle>
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/web.xml
deleted file mode 100644
index 6b07d4a..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-    <description>
-        Verify Document Ordering Algorithm
-    </description>
-    <display-name>Document Orderdering</display-name>
-
-    <context-param>
-        <param-name>javax.faces.CONFIG_FILES</param-name>
-        <param-value>/WEB-INF/faces-configB.xml
-        </param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/document-ordering/web/test.xhtml b/jsf-ri/systest-per-webapp/document-ordering/web/test.xhtml
deleted file mode 100644
index f1ab8d5..0000000
--- a/jsf-ri/systest-per-webapp/document-ordering/web/test.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<head>
-    <title>Document Ordering</title>
-</head>
-<body>
-    <h:outputText value="Order Correct: #{orderingBean.orderCorrect}"/>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/el-performance/src/java/com/sun/faces/systest/EvaluatorBean.java b/jsf-ri/systest-per-webapp/el-performance/src/java/com/sun/faces/systest/EvaluatorBean.java
deleted file mode 100644
index 3df4361..0000000
--- a/jsf-ri/systest-per-webapp/el-performance/src/java/com/sun/faces/systest/EvaluatorBean.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.event.ActionEvent;
-import javax.faces.context.FacesContext;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIComponent;
-import javax.el.ValueExpression;
-
-import java.util.Date;
-import java.util.Random;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.text.SimpleDateFormat;
-
-import java.io.PrintStream;
-
-import com.sun.faces.util.MultiThreadTestRunner;
-
-public class EvaluatorBean extends Object {
-
-    public EvaluatorBean() {
-	random = new Random(32714);
-    }
-
-    Random random = null;
-
-    protected int reps = 30000;
-    public int getReps() {
-	return reps;
-    }
-
-    public void setReps(int newReps) {
-	reps = newReps;
-    }
-
-    protected int numThreads = 1;
-    public int getNumThreads() {
-	return numThreads;
-    }
-
-    public void setNumThreads(int newNumThreads) {
-	numThreads = newNumThreads;
-    }
-
-    protected Object [] threadOutcomes;
-    public Object [] getThreadOutcomes() {
-	return threadOutcomes;
-    }
-
-    public void setThreadOutcomes(Object [] newThreadOutcomes) {
-	threadOutcomes = newThreadOutcomes;
-    }
-
-    private long start = 0;
-    private long end = 0;
-    private SimpleDateFormat formatter = new SimpleDateFormat("mm:ss:SS");
-
-    public String getElapsedTime() {
-	long elapsedSeconds = end - start;
-	end = start = 0;
-	return formatter.format(new Date(elapsedSeconds));
-    }
-
-    public void doGet(ActionEvent event) {
-	int i = 0;
-	FacesContext context = FacesContext.getCurrentInstance();
-	String id = event.getComponent().getId();
-	// strip off the first character
-	id = "i" + id.substring(1);
-	// get the expression to evaluate
-	UIOutput output = (UIOutput) context.getViewRoot().findComponent("form" + NamingContainer.SEPARATOR_CHAR +  id);
-	String expression = "#{" + output.getValue() + "}";
-	ValueExpression vb = 
-	    context.getApplication().getExpressionFactory().
-            createValueExpression(context.getELContext(),expression, Object.class);
-	// if the user wants to show results
-	if (showResults) {
-	    // clear the buffer for the new results
-	    results = new StringBuffer();
-	}
-	// evaluate it as a get, reps number of times 
-	start = System.currentTimeMillis();
-	for (i = 0; i < reps; i++) {
-	    if (showResults) {
-		results.append(vb.getValue(context.getELContext()) + "\n");
-	    }
-	    else {
-		vb.getValue(context.getELContext());
-	    }
-	}
-	end = System.currentTimeMillis();
-    }
-
-    public void doAttributeMapGet(ActionEvent event) throws Exception {
-	int i = 0;
-	FacesContext context = FacesContext.getCurrentInstance();
-
-	// Create numThreads Threads passing in a new UIComponent with an
-	// attribute "foo" value "bar" to the ctor.
-
-	Thread threads[] = new Thread[numThreads];
-	UIComponent curInput = null;
-	threadOutcomes = new Object[numThreads];
-	Runnable runnable = null;
-
-	// initialize threads array
-	for (i = 0; i < numThreads; i++) {
-	    curInput = 
-		context.getApplication().createComponent("javax.faces.Input");
-	    curInput.getAttributes().put("foo", "bar");
-	    runnable = new AttributeGetRunnable(curInput, getReps(), "foo", 
-						random, i, 
-						true,
-						System.out,
-						this);
-
-	    threads[i] = new Thread(runnable, "TestThread" + i);
-	}
-
-	MultiThreadTestRunner runner = 
-	    new MultiThreadTestRunner(threads, threadOutcomes);
-
-	// if the user wants to show results
-	if (showResults) {
-	    // clear the buffer for the new results
-	    results = new StringBuffer();
-	}
-	// evaluate it as a get, reps number of times 
-	start = System.currentTimeMillis();
-	boolean foundFailedThread = false;
-	foundFailedThread = runner.runThreadsAndOutputResults(System.out);
-	end = System.currentTimeMillis();
-    }
-
-    protected boolean showResults = false;
-    public boolean isShowResults() {
-	return showResults;
-    }
-
-    public void setShowResults(boolean newShowResults) {
-	showResults = newShowResults;
-    }
-
-    protected String [] expressions;
-    public String [] getExpressions() {
-	return expressions;
-    }
-
-    public void setExpressions(String [] newExpressions) {
-	expressions = newExpressions;
-    }
-
-
-    protected StringBuffer results = new StringBuffer();
-    public String getResults() {
-	return results.toString();
-    }
-
-    public void setResults(String newResults) {
-	results = new StringBuffer(newResults);
-    }
-
-    // Each Thread has an index assigned to it and does reps get()
-    // operations on the attribute map for key, pausing for a Random
-    // amount of millis between each get.  EvaluatorBean maintains an
-    // Object array property threadOutcomes of length numThreads that
-    // stores the outcomes of the Threads.  Each Thread writes its
-    // outcome to the entry at the Thread's index into the
-    // threadOutcomes array.  If an exception is thrown, it is written
-    // to the array.  If the Thread executes successfully, a success
-    // message is written to the threadOutcomes array.
-
-    public static class AttributeGetRunnable extends Object implements Runnable {
-	UIComponent component = null;
-	int reps = 1;
-	Object key = null;
-	Random random = null;
-	boolean sleepBetweenGets = true;
-	int index = 0;
-	EvaluatorBean host = null;
-	PrintStream out = null;
-	
-	public AttributeGetRunnable(UIComponent component, int reps, 
-				    Object key, Random random, int index, 
-				    boolean sleepBetweenGets,
-				    PrintStream out,
-				    EvaluatorBean host) {
-	    this.component = component;
-	    this.reps = reps;
-	    this.key = key;
-	    this.random = random;
-	    this.index = index;
-	    this.sleepBetweenGets = sleepBetweenGets;
-	    this.out = out;
-	    this.host = host;
-	}
-
-	public void run() {
-	    String name = Thread.currentThread().getName();
-	    
-	    for (int i = 0; i < reps; i++) {
-		try {
-		    component.getAttributes().get(key);
-		}
-		catch (Exception e) {
-		    host.getThreadOutcomes()[index] = e;
-		    System.out.println("index: " + index + " exception on get(): " + e.getMessage());
-		    return;
-		}   
-		
-		if (sleepBetweenGets) {
-		    try {
-			Thread.sleep(0L, Math.abs(random.nextInt()) % 100);
-		    }
-		    catch (InterruptedException e) {
-			host.getThreadOutcomes()[index] = e;
-			return;
-		    }
-		}
-	    }
-	    
-	    host.getThreadOutcomes()[index] = name + " executed successfully.";
-
-	}
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/el-performance/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/el-performance/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 6ecffeb..0000000
--- a/jsf-ri/systest-per-webapp/el-performance/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>lesser</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>booleanProperty</property-name>
-      <value>true</value>
-    </managed-property>
-    <managed-property>
-      <property-name>byteProperty</property-name>
-      <value>11</value>
-    </managed-property>
-    <managed-property>
-      <property-name>doubleProperty</property-name>
-      <value>300.14</value>
-    </managed-property>
-    <managed-property>
-      <property-name>floatProperty</property-name>
-      <value>12.3</value>
-    </managed-property>
-    <managed-property>
-      <property-name>intProperty</property-name>
-      <value>3000</value>
-    </managed-property>
-    <managed-property>
-      <property-name>longProperty</property-name>
-      <value>5000</value>
-    </managed-property>
-    <managed-property>
-      <property-name>shortProperty</property-name>
-      <value>4000</value>
-    </managed-property>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>A String Value</value>
-    </managed-property>
-    <managed-property>
-      <property-name>bean</property-name>
-      <value>#{nested.stringProperty}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>greater</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>booleanProperty</property-name>
-      <value>false</value>
-    </managed-property>
-    <managed-property>
-      <property-name>byteProperty</property-name>
-      <value>21</value>
-    </managed-property>
-    <managed-property>
-      <property-name>doubleProperty</property-name>
-      <value>321.54</value>
-    </managed-property>
-    <managed-property>
-      <property-name>floatProperty</property-name>
-      <value>21.43</value>
-    </managed-property>
-    <managed-property>
-      <property-name>intProperty</property-name>
-      <value>5000</value>
-    </managed-property>
-    <managed-property>
-      <property-name>longProperty</property-name>
-      <value>54321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>shortProperty</property-name>
-      <value>4321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>New String Value</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>nested</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>nested 0</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>nested1</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>bean</property-name>
-      <value>#{nested2.bean.bean.stringProperty}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>nested2</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>bean</property-name>
-      <value>#{nested3}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>nested3</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>bean</property-name>
-      <value>#{nested4}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>nested4</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>Finally, a simple property</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>evaluator</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.EvaluatorBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>reps</property-name>
-      <value>30000</value>
-    </managed-property>
-    <managed-property>
-      <property-name>expressions</property-name>
-      <list-entries>
-        <value>nested1.bean</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-
-
-  </managed-bean>
-
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/el-performance/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/el-performance/web/WEB-INF/web.xml
deleted file mode 100644
index 9a038b9..0000000
--- a/jsf-ri/systest-per-webapp/el-performance/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/el-performance/web/attribute-test.jsp b/jsf-ri/systest-per-webapp/el-performance/web/attribute-test.jsp
deleted file mode 100644
index a80c2d7..0000000
--- a/jsf-ri/systest-per-webapp/el-performance/web/attribute-test.jsp
+++ /dev/null
@@ -1,118 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Attribute/Property Transparency Performance</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test Attribute/Property Transparency Performance</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:panelGrid columns="2">
-
-      <h:outputText value="Repetitions:" />
-
-      <h:inputText id="reps" value="#{evaluator.reps}" />
-
-      <h:outputText value="Number of Threads:" />
-
-      <h:inputText id="numThreads" value="#{evaluator.numThreads}" />
-
-      <h:outputText value="Show results:" />
-
-      <h:selectBooleanCheckbox value="#{evaluator.showResults}" />
-
-      <!-- expression evaluator widgets -->
-
-      <h:commandButton id="c0" value="evaluate" 
-                       actionListener="#{evaluator.doAttributeMapGet}"/>
-
-    </h:panelGrid>
-
-    <hr />
-
-    <p>Elapsed time: <h:outputText value="#{evaluator.elapsedTime}" /></p>
-
-    <p>
-
-    <h:outputText rendered="#{evaluator.showResults}" value="Results:" />
-
-    <pre>
-
-<h:outputText rendered="#{evaluator.showResults}" 
-              value="#{evaluator.results}" />
-
-    </pre>
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/el-performance/web/test.jsp b/jsf-ri/systest-per-webapp/el-performance/web/test.jsp
deleted file mode 100644
index ffbebb7..0000000
--- a/jsf-ri/systest-per-webapp/el-performance/web/test.jsp
+++ /dev/null
@@ -1,116 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test EL Performance</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test EL Performance</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:panelGrid columns="2">
-
-      <h:outputText value="Repetitions:" />
-
-      <h:inputText id="reps" value="#{evaluator.reps}" />
-
-      <h:outputText value="Show results:" />
-
-      <h:selectBooleanCheckbox value="#{evaluator.showResults}" />
-
-      <!-- expression evaluator widgets -->
-
-      <h:inputText id="i0" value="#{evaluator.expressions[0]}" />
-
-      <h:commandButton id="c0" value="evaluate" 
-                       actionListener="#{evaluator.doGet}"/>
-
-    </h:panelGrid>
-
-    <hr />
-
-    <p>Elapsed time: <h:outputText value="#{evaluator.elapsedTime}" /></p>
-
-    <p>
-
-    <h:outputText rendered="#{evaluator.showResults}" value="Results:" />
-
-    <pre>
-
-<h:outputText rendered="#{evaluator.showResults}" 
-              value="#{evaluator.results}" />
-
-    </pre>
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/empty-string-as-null/src/java/com/sun/faces/systest/EmptyStringAsNullTestCase.java b/jsf-ri/systest-per-webapp/empty-string-as-null/src/java/com/sun/faces/systest/EmptyStringAsNullTestCase.java
deleted file mode 100644
index 354322b..0000000
--- a/jsf-ri/systest-per-webapp/empty-string-as-null/src/java/com/sun/faces/systest/EmptyStringAsNullTestCase.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class EmptyStringAsNullTestCase extends AbstractTestCase {
-
-    public EmptyStringAsNullTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(EmptyStringAsNullTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-    
-    // ------------------------------------------------------------ Test Methods
-    
-    public void testWriteAttributeDisabled() throws Exception {
-
-        HtmlPage page = getPage("/faces/test.xhtml");
-
-        HtmlTextInput stringInput = (HtmlTextInput) getInputContainingGivenId(page, "string");
-        HtmlTextInput integerInput = (HtmlTextInput) getInputContainingGivenId(page, "integer");
-
-        assertNotNull(stringInput);
-        assertNotNull(integerInput);
-        assertEquals(stringInput.getValueAttribute(), "");
-        assertEquals(integerInput.getValueAttribute(), "");
-
-        String pageAsText = page.asText();
-        assertTrue(pageAsText.contains("VC1 Fired: false"));
-        assertTrue(pageAsText.contains("VC2 Fired: false"));
-        assertTrue(pageAsText.contains("String model set with null: false"));
-        assertTrue(pageAsText.contains("Integer model set with null: false"));
-
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "command");
-        assertNotNull(submit);
-
-        stringInput.setValueAttribute("11");
-        integerInput.setValueAttribute("11");
-
-        page = (HtmlPage) submit.click();
-
-        stringInput = (HtmlTextInput) getInputContainingGivenId(page, "string");
-        integerInput = (HtmlTextInput) getInputContainingGivenId(page, "integer");
-
-        assertNotNull(stringInput);
-        assertNotNull(integerInput);
-        assertEquals(stringInput.getValueAttribute(), "11");
-        assertEquals(integerInput.getValueAttribute(), "11");
-
-        pageAsText = page.asText();
-        assertTrue(pageAsText.contains("VC1 Fired: true"));
-        assertTrue(pageAsText.contains("VC2 Fired: true"));
-        assertTrue(pageAsText.contains("String model set with null: false"));
-        assertTrue(pageAsText.contains("Integer model set with null: false"));
-
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "command");
-        assertNotNull(submit);
-
-        stringInput.setValueAttribute("");
-        integerInput.setValueAttribute("");
-
-        page = (HtmlPage) submit.click();
-
-        stringInput = (HtmlTextInput) getInputContainingGivenId(page, "string");
-        integerInput = (HtmlTextInput) getInputContainingGivenId(page, "integer");
-
-        assertNotNull(stringInput);
-        assertNotNull(integerInput);
-        assertEquals(stringInput.getValueAttribute(), "");
-        assertEquals(integerInput.getValueAttribute(), "");
-
-        pageAsText = page.asText();
-        assertTrue(pageAsText.contains("VC1 Fired: true"));
-        assertTrue(pageAsText.contains("VC2 Fired: true"));
-        assertTrue(pageAsText.contains("String model set with null: true"));
-        assertTrue(pageAsText.contains("Integer model set with null: true"));
-
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "command");
-        assertNotNull(submit);
-
-        stringInput.setValueAttribute("");
-        integerInput.setValueAttribute("");
-
-        page = (HtmlPage) submit.click();
-
-        stringInput = (HtmlTextInput) getInputContainingGivenId(page, "string");
-        integerInput = (HtmlTextInput) getInputContainingGivenId(page, "integer");
-
-        assertNotNull(stringInput);
-        assertNotNull(integerInput);
-        assertEquals(stringInput.getValueAttribute(), "");
-        assertEquals(integerInput.getValueAttribute(), "");
-
-        pageAsText = page.asText();
-        assertTrue(pageAsText.contains("VC1 Fired: false"));
-        assertTrue(pageAsText.contains("VC2 Fired: false"));
-        assertTrue(pageAsText.contains("String model set with null: true"));
-        assertTrue(pageAsText.contains("Integer model set with null: true"));
-        
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/empty-string-as-null/src/java/com/sun/faces/systest/model/Bean.java b/jsf-ri/systest-per-webapp/empty-string-as-null/src/java/com/sun/faces/systest/model/Bean.java
deleted file mode 100644
index 387e02e..0000000
--- a/jsf-ri/systest-per-webapp/empty-string-as-null/src/java/com/sun/faces/systest/model/Bean.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.event.ValueChangeEvent;
-
-public class Bean {
-
-    Object integerPropertySet = "";
-    Integer integerProperty;
-    Object stringPropertySet = "";
-    String stringProperty;
-    boolean vceFired;
-    boolean vce2Fired;
-
-    public Integer getIntegerProperty() {
-        return integerProperty;
-    }
-
-    public void setIntegerProperty(Integer integerProperty) {
-        integerPropertySet = integerProperty;
-        this.integerProperty = integerProperty;
-    }
-
-    public String getStringProperty() {
-        return stringProperty;
-    }
-
-    public void setStringProperty(String stringProperty) {
-        stringPropertySet = stringProperty;
-        this.stringProperty = stringProperty;
-    }
-
-    public boolean isVceFired() {
-        boolean tmp = vceFired;
-        vceFired = false;
-        return tmp;
-    }
-
-    public boolean isVce2Fired() {
-        boolean tmp = vce2Fired;
-        vce2Fired = false;
-        return tmp;
-    }
-
-    public boolean isStringNull() {
-        boolean isNull = (this.stringPropertySet == null);
-        this.stringPropertySet = "";
-        return (isNull);
-    }
-
-    public boolean isIntegerNull() {
-        boolean isNull = (this.integerPropertySet == null);
-        this.integerPropertySet = "";
-        return (isNull);
-    }
-
-    public void valueChange(ValueChangeEvent event) {
-        vceFired = true;
-    }
-
-    public void valueChange2(ValueChangeEvent event) {
-        vce2Fired = true;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/empty-string-as-null/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/empty-string-as-null/web/WEB-INF/faces-config.xml
deleted file mode 100644
index d72db07..0000000
--- a/jsf-ri/systest-per-webapp/empty-string-as-null/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">
-
-  <managed-bean>
-    <managed-bean-name>bean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.Bean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/empty-string-as-null/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/empty-string-as-null/web/WEB-INF/web.xml
deleted file mode 100644
index f6224c6..0000000
--- a/jsf-ri/systest-per-webapp/empty-string-as-null/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-  <description>
-       Verify empty Strings are treated as null when so configured.
-  </description>
-  <display-name>Empty String As Null Test</display-name>
-
-    <context-param>
-        <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup> 1 </load-on-startup>
-  </servlet>
-    
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-  </servlet-mapping>
-    
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/empty-string-as-null/web/test.xhtml b/jsf-ri/systest-per-webapp/empty-string-as-null/web/test.xhtml
deleted file mode 100644
index dfa45e4..0000000
--- a/jsf-ri/systest-per-webapp/empty-string-as-null/web/test.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-  <head>
-    <title>Empty String As Null Test</title>
-  </head>
-  <body>
-  <h:form id="form">
-    <h:inputText id="string"
-                 value="#{bean.stringProperty}"
-                 valueChangeListener="#{bean.valueChange}"/>
-    <h:inputText id="integer"
-                 value="#{bean.integerProperty}"
-                 valueChangeListener="#{bean.valueChange2}"/>
-    <h:commandButton id="command" value="Submit"/>
-  </h:form>
-  VC1 Fired: <h:outputText value="#{bean.vceFired}"/><br />
-  VC2 Fired: <h:outputText value="#{bean.vce2Fired}"/><br />
-  <h:outputText value="String model set with null: #{bean.stringNull}"/><br />
-  <h:outputText value="Integer model set with null: #{bean.integerNull}"/><br />  
-  </body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/model/Bean.java b/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/model/Bean.java
deleted file mode 100644
index b5ac65d..0000000
--- a/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/model/Bean.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.model;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.event.ComponentSystemEvent;
-
- at RequestScoped
- at ManagedBean(name="bean")
-public class Bean {
-    
-    protected String stringVal;
-
-    private Long selectedEventId;
-
-    public void loadTrainingEvent(ComponentSystemEvent cse) {
-        Long eventId = getSelectedEventId();
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (null == eventId) {
-            context.addMessage(null,
-                    new FacesMessage("The training event you requested is invalid"));
-            context.getExternalContext().getFlash().setKeepMessages(true);
-            context.getApplication().getNavigationHandler().
-                    handleNavigation(context, null, "/index?faces-redirect=true");
-        }
-    }
-
-    public String getStringVal() {
-        return stringVal;
-    }
-
-    public void setStringVal(String stringVal) {
-        this.stringVal = stringVal;
-        
-        if (null != stringVal && stringVal.equals("addMessage")) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
-                    "test that this persists across the redirect", 
-                    "This message must persist across the redirect");
-            context.addMessage(null, message);
-            context.getExternalContext().getFlash().setKeepMessages(true);
-        }
-    }
-
-    public Long getSelectedEventId() {
-        return selectedEventId;
-    }
-
-    public void setSelectedEventId(Long selectedEventId) {
-        this.selectedEventId = selectedEventId;
-    }
-
-    public String start() {
-        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("wizardId", 4711);
-        return "flash12?faces-redirect=true";
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/run_time_test/ResultSetBean.java b/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/run_time_test/ResultSetBean.java
deleted file mode 100644
index 0714f7e..0000000
--- a/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/run_time_test/ResultSetBean.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.run_time_test.model;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIData;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.sun.faces.CustomerBean;
-
-/**
- * <p>Backing file bean for <code>ResultSet</code> 
- com.sun.javaee.blueprints.simpleuicomponentsonents.</p>
- */
-
-public class ResultSetBean {
-
-    private List list = null;
-
-
-    public ResultSetBean() {
-    }
-
-
-    public List getList() {
-        // Construct a preconfigured customer list lazily.
-        if (list == null) {
-            list = new ArrayList();
-            for (int i = 0; i < 1000; i++) {
-                list.add(new CustomerBean(Integer.toString(i),
-                                          "name_" + Integer.toString(i),
-                                          "symbol_" + Integer.toString(i), i));
-            }
-        }
-        return list;
-    }
-
-
-    public void setList(List newlist) {
-        this.list = newlist;
-    }
-
-    // -------------------------------------------------------- Bound Components
-
-    /**
-     * <p>The <code>UIData</code> component representing the entire table.</p>
-     */
-    private UIData data = null;
-
-
-    public UIData getData() {
-        return data;
-    }
-
-
-    public void setData(UIData data) {
-        this.data = data;
-    }
-
-
-    // ---------------------------------------------------------- Action Methods
-
-
-    /**
-     * <p>Scroll directly to the first page.</p>
-     */
-    public String first() {
-        scroll(0);
-        return (null);
-
-    }
-
-
-    /**
-     * <p>Scroll directly to the last page.</p>
-     */
-    public String last() {
-        scroll(data.getRowCount() - 1);
-        return (null);
-
-    }
-
-
-    /**
-     * <p>Scroll forwards to the next page.</p>
-     */
-    public String next() {
-        int first = data.getFirst();
-        scroll(first + data.getRows());
-        return (null);
-
-    }
-
-
-    /**
-     * <p>Scroll backwards to the previous page.</p>
-     */
-    public String previous() {
-        int first = data.getFirst();
-        scroll(first - data.getRows());
-        return (null);
-
-    }
-
-
-    /**
-     * <p>Scroll to the page that contains the specified row number.</p>
-     *
-     * @param row Desired row number
-     */
-    public void scroll(int row) {
-
-        int rows = data.getRows();
-        if (rows < 1) {
-            return; // Showing entire table already
-        }
-        if (row < 0) {
-            data.setFirst(0);
-        } else if (row >= data.getRowCount()) {
-            data.setFirst(data.getRowCount() - 1);
-        } else {
-            data.setFirst(row - (row % rows));
-        }
-
-    }
-
-
-    /**
-     * Handles the ActionEvent generated as a result of clicking on a
-     * link that points a particular page in the result-set.
-     */
-    public void processScrollEvent(ActionEvent event) {
-        int currentRow = 1;
-        FacesContext context = FacesContext.getCurrentInstance();
-        UIComponent component = event.getComponent();
-        Integer curRow = (Integer) component.getAttributes().get("currentRow");
-        if (curRow != null) {
-            currentRow = curRow.intValue();
-        }
-        // scroll to the appropriate page in the ResultSet.
-        scroll(currentRow);
-    }
-
-
-}
diff --git a/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/systest/FlashTestCase.java b/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/systest/FlashTestCase.java
deleted file mode 100644
index 88fbd82..0000000
--- a/jsf-ri/systest-per-webapp/flash/src/java/com/sun/faces/systest/FlashTestCase.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class FlashTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FlashTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FlashTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-
-    public void testFlash() throws Exception {
-        // Get the first page
-        HtmlPage page = getPage("/faces/index.xhtml");
-        String pageText = page.asXml();
-        // (?s) is an "embedded flag expression" for the "DOTALL" operator.
-        // It says, "let . match any character including line terminators."
-        // Because page.asXml() returns a big string with lots of \r\n chars
-        // in it, we need (?s).
-        // the page contains a table tag with a frame attribute whose value is hsides.
-
-        // the page contains the following span, with the following id, with no contents
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"fooValueId\">\\s*</span>.*"));
-        
-        // Click the reload button
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("reload");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        // verify that fooValue is there, indicating that it's been stored in the flash
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"fooValueId\">\\s*fooValue\\s*</span>.*"));
-
-        // Get the first page, again
-        page = getPage("/faces/index.xhtml");
-        pageText = page.asXml();
-
-        // the page contains the following span, with the following id, with no contents
-        // meaning the flash has no value for foo
-        //assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"fooValueId\">\\s*</span>.*"));
-
-
-        
-        // fill in "addMessage" in the textBox
-        HtmlTextInput text = (HtmlTextInput) page.getHtmlElementById("inputText");
-        text.setValueAttribute("addMessage");
-        
-        // go to the next page
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        // See that it has fooValue
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash2FooValueId\">\\s*fooValue\\s*</span>.*"));
-        // See that it has barValue
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash2BarValueId\">\\s*barValue\\s*</span>.*"));
-        // See that it has the message
-        assertTrue(-1 != pageText.indexOf("test that this persists across the redirect"));
-        
-        // click the reload button
-        button = (HtmlSubmitInput) page.getHtmlElementById("reload");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();        
-        
-        // See that it doesn't have the message
-        assertTrue(-1 == pageText.indexOf("test that this persists across the redirect"));
-        
-        // Click the back button
-        button = (HtmlSubmitInput) page.getHtmlElementById("back");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // Click the next button
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // See that the page does not have the message
-        assertTrue(-1 == pageText.indexOf("test that this persists across the redirect"));
-        
-        // Click the next button
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // See that it has banzai
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash3NowValueId\">\\s*banzai\\s*</span>.*"));
-        
-        // Click the next button
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // See that it still has banzai
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash4BuckarooValueId\">\\s*banzai\\s*</span>.*"));
-
-        // click the link http://localhost:8080/jsf-flash/flash5.jsf?id=1
-        HtmlAnchor link = (HtmlAnchor) page.getElementById("link");
-        page = link.click();
-
-        // on flash5
-        link = (HtmlAnchor) page.getElementById("link");
-        page = link.click(); // clicks http://localhost:8080/jsf-flash/flash6.jsf
-
-        assertTrue(page.asText().contains("Value is 1."));
-
-        // click the link on the next page
-        link = (HtmlAnchor) page.getElementById("link"); // http://localhost:8080/jsf-flash/flash7.jsf
-        page = link.click();
-
-        assertTrue(page.asText().contains("Value is 1."));
-
-        // click the link on the same page
-        link = (HtmlAnchor) page.getElementById("link"); // http://localhost:8080/jsf-flash/flash7.jsf
-        page = link.click();
-
-        assertTrue(page.asText().contains("Value is 1."));
-
-        // click the link on the same page
-        link = (HtmlAnchor) page.getElementById("link"); // http://localhost:8080/jsf-flash/flash7.jsf
-        page = link.click();
-
-        assertTrue(page.asText().contains("Value is 1."));
-
-        link = (HtmlAnchor) page.getElementById("link2"); // http://localhost:8080/jsf-flash/flash8.jsf
-        page = link.click();
-
-        assertTrue(page.asText().contains("Value is 1."));
-
-        link = (HtmlAnchor) page.getElementById("link"); // http://localhost:8080/jsf-flash/flash8.jsf
-        page = link.click();
-
-        // it went away because there was no keep
-        assertTrue(page.asText().contains("Value is ."));
-
-        page = getPage("/faces/flash9.xhtml"); // http://localhost:8080/jsf-flash/flash9.jsf
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueA");
-        text.setValueAttribute("a value");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueB");
-        text.setValueAttribute("b value");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueC");
-        text.setValueAttribute("c value");
-
-        button = (HtmlSubmitInput) page.getHtmlElementById("keep");
-        page = (HtmlPage) button.click();  // http://localhost:8080/jsf-flash/flash11.jsf
-
-        pageText = page.asText();
-
-        assertTrue(pageText.contains("valueA: a value"));
-        assertTrue(pageText.contains("valueB: b value"));
-        assertTrue(pageText.contains("valueC: c value"));
-
-        link = (HtmlAnchor) page.getElementById("flash9"); // http://localhost:8080/jsf-flash/flash9.jsf
-        page = link.click();
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueA");
-        assertEquals(text.getValueAttribute(), "a value");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueB");
-        assertEquals(text.getValueAttribute(), "b value");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueC");
-        assertEquals(text.getValueAttribute(), "c value");
-
-        page = getPage("/faces/flash9.xhtml"); // http://localhost:8080/jsf-flash/flash9.jsf
-        text = (HtmlTextInput) page.getHtmlElementById("valueA");
-        assertEquals(text.getValueAttribute(), "");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueB");
-        assertEquals(text.getValueAttribute(), "");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueC");
-        assertEquals(text.getValueAttribute(), "");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueA");
-        text.setValueAttribute("A value");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueB");
-        text.setValueAttribute("B value");
-
-        text = (HtmlTextInput) page.getHtmlElementById("valueC");
-        text.setValueAttribute("C value");
-
-        button = (HtmlSubmitInput) page.getHtmlElementById("nokeep");
-        page = (HtmlPage) button.click();  // http://localhost:8080/jsf-flash/flash10.jsf
-
-        pageText = page.asText();
-
-        assertTrue(pageText.contains("valueA: A value"));
-        assertTrue(pageText.contains("valueB: B value"));
-        assertTrue(pageText.contains("valueC: C value"));
-
-        button = (HtmlSubmitInput) page.getHtmlElementById("reload");
-        page = (HtmlPage) button.click();  // http://localhost:8080/jsf-flash/flash10.jsf
-
-        pageText = page.asText();
-
-        assertTrue(!pageText.contains("valueA: A value"));
-        assertTrue(!pageText.contains("valueB: B value"));
-        assertTrue(!pageText.contains("valueC: C value"));
-
-        // content from Sebastian Hennebrueder
-        page = getPage("/faces/flash12.xhtml");
-        button = (HtmlSubmitInput) page.getHtmlElementById("start");
-        page = (HtmlPage) button.click();  // http://localhost:8080/jsf-flash/flash10.jsf
-
-        pageText = page.asText();
-        assertTrue(pageText.contains("4711"));
-
-        page = (HtmlPage) page.refresh();
-
-        pageText = page.asText();
-        assertTrue(!pageText.contains("4711"));
-
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/flash/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/flash/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 6829935..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- The contents of this file are subject to the terms 
- of the Common Development and Distribution License 
- (the "License").  You may not use this file except 
- in compliance with the License.
- 
- You can obtain a copy of the license at 
- glassfish/bootstrap/legal/CDDLv1.0.txt or 
- https://glassfish.dev.java.net/public/CDDLv1.0.html. 
- See the License for the specific language governing 
- permissions and limitations under the License.
- 
- When distributing Covered Code, include this CDDL 
- HEADER in each file and include the License file at 
- glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
- add the following below this CDDL HEADER, with the 
- fields enclosed by brackets "[]" replaced with your 
- own identifying information: Portions Copyright [yyyy] 
- [name of copyright owner]
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-              version="2.0">
-
-  <managed-bean>
-    <managed-bean-name>ResultSetBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.run_time_test.model.ResultSetBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-  
-  <managed-bean>
-    <managed-bean-name>ResetUniqueRequestIdBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.application.ResetUniqueRequestIdBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-        
-  <navigation-rule>
-    <from-view-id>/index.xhtml</from-view-id>
-    <navigation-case>
-      <from-outcome>next</from-outcome>
-      <to-view-id>/flash2.xhtml</to-view-id>
-      <redirect />
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/flash2.xhtml</from-view-id>
-    <navigation-case>
-      <from-outcome>back</from-outcome>
-      <to-view-id>/index.xhtml</to-view-id>
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>next</from-outcome>
-      <to-view-id>/flash3.xhtml</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/flash3.xhtml</from-view-id>
-    <navigation-case>
-      <from-outcome>next</from-outcome>
-      <to-view-id>/flash4.xhtml</to-view-id>
-      <redirect />
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>back</from-outcome>
-      <to-view-id>/flash2.xhtml</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/flash4.xhtml</from-view-id>
-    <navigation-case>
-      <from-outcome>back</from-outcome>
-      <to-view-id>/flash3.xhtml</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/flash/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/flash/web/WEB-INF/web.xml
deleted file mode 100644
index 40f506e..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--  
-
- The contents of this file are subject to the terms 
- of the Common Development and Distribution License 
- (the "License").  You may not use this file except 
- in compliance with the License.
- 
- You can obtain a copy of the license at 
- glassfish/bootstrap/legal/CDDLv1.0.txt or 
- https://glassfish.dev.java.net/public/CDDLv1.0.html. 
- See the License for the specific language governing 
- permissions and limitations under the License.
- 
- When distributing Covered Code, include this CDDL 
- HEADER in each file and include the License file at 
- glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
- add the following below this CDDL HEADER, with the 
- fields enclosed by brackets "[]" replaced with your 
- own identifying information: Portions Copyright [yyyy] 
- [name of copyright owner]
-
--->
-
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-  <description>Test Webapp for jsf-extensions-run-time </description>
-  <display-name>jsf-run-time-test</display-name>
-
-  <context-param>
-    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-    <param-value>server</param-value>
-  </context-param>
-  <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <context-param>
-    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
-    <param-value>.xhtml</param-value>
-  </context-param>
-  <context-param>
-      <param-name>facelets.DEVELOPMENT</param-name>
-      <param-value>true</param-value>
-  </context-param>
-  <context-param>
-      <param-name>javax.faces.PROJECT_STAGE</param-name>
-      <param-value>Development</param-value>
-  </context-param>
-  <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-  </context-param>
-
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <!-- Faces Servlet Mapping -->
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-    <url-pattern>*.jsf</url-pattern>
-  </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash10.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash10.xhtml
deleted file mode 100644
index 7acd68e..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash10.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-            <h3>flash10</h3>
-
-<h:form prependId="false">
-
-  valueA: <h:outputText value="#{flash.valueA}" /> <br />
-  valueB: <h:outputText value="#{flash.valueB}" /> <br />
-  valueC: <h:outputText value="#{flash.valueC}" /> <br />
-
-  <h:commandButton id="reload" value="reload" />
-
-</h:form>
-
-
-
-		<ui:debug/>
-
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash11.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash11.xhtml
deleted file mode 100644
index 4565bcd..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash11.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-            <h3>flash10</h3>
-
-<h:form prependId="false">
-
-  valueA: <h:outputText value="#{flash.keep.valueA}" /> <br />
-  valueB: <h:outputText value="#{flash.keep.valueB}" /> <br />
-  valueC: <h:outputText value="#{flash.keep.valueC}" /> <br />
-
-  <h:link id="flash9" outcome="flash9">Back to flash9</h:link>
-
-</h:form>
-
-
-
-		<ui:debug/>
-
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash12.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash12.xhtml
deleted file mode 100644
index 186d2c6..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash12.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-            <h3>flash12</h3>
-
-#{flash['wizardId']}
-<h:form prependId="false">
-
-<h:commandButton id="start" action="#{bean.start}" value="Start" />
-
-
-</h:form>
-
-
-
-		<ui:debug/>
-
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash2.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash2.xhtml
deleted file mode 100644
index cc4814e..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash2.xhtml
+++ /dev/null
@@ -1,98 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>RoR Flash Test Page 2</title>
-</h:head>
-<h:body bgcolor="white">
-    <h1>RoR Flash Test Page 2</h1>
-
-  <p>As mentioned in the previous page, if I wanted to store something
-  in the flash during this request and also access it during this
-  request, <code>\#{flash.now.bar}</code> is the way to do it.  In
-  reality, this just puts the value in request scope, but that's what
-  "now" is, anyway.</p>
-
-  <h:form prependId="false" id="form1">
-
-  <h:panelGrid columns="2" border="1">
-
-  <f:verbatim>
-    Value of the previous request's foo
-  </f:verbatim>
-
-    <h:outputText id="flash2FooValueId" value="#{flash.foo}" />
-
-  <f:verbatim>
-    Put <code>barValue</code> in the flash.now under key
-    <code>bar</code>.
-  </f:verbatim>
-
-    <c:set target="#{flash.now}" property="bar" value="barValue" />
-
-    <f:verbatim>
-      c:set target="\#{flash.now}" property="bar" value="barValue"
-    </f:verbatim>
-
-  <f:verbatim>
-    Value of <code>\#{flash.now.bar}</code>, should be <code>barValue</code>.
-  </f:verbatim>
-
-    <h:outputText id="flash2BarValueId" value="#{flash.now.bar}" />
-
-    <h:commandButton value="reload"  id="reload" />
-
-    <h:commandButton value="back" id="back" action="back" />
-
-    <f:verbatim> </f:verbatim>
-
-    <h:commandButton value="next" id="next" action="next" />
-
-   </h:panelGrid>
-
-   <p><h:messages id="messages"/></p>
-
-  </h:form>
-
-		<ui:debug/>
-</h:body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash3.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash3.xhtml
deleted file mode 100644
index b247c38..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash3.xhtml
+++ /dev/null
@@ -1,114 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>RoR Flash Test Page 3</title>
-</h:head>
-
-<h:body bgcolor="white">
-    <h1>RoR Flash Test Page 3</h1>
-
-  <p>If you have something in flash.now that you later, during the same
-  request, decide you want to promote to stick around for the next
-  request, use flash.keep.</p>
-
-  <h:form prependId="false" id="form1">
-
-  <h:panelGrid columns="2" border="1">
-
-    <f:verbatim>
-      Value of the previous request's foo.  Should be null.
-    </f:verbatim>
-
-    <h:outputText value="#{flash.foo}" />
-
-    <f:verbatim>
-      Value of the this request's bar.  Should be null.
-    </f:verbatim>
-
-    <h:outputText value="#{flash.bar}" />
-
-    <f:verbatim>
-      Put <code>banzai</code> in the flash.now under key
-      <code>buckaroo</code>.
-    </f:verbatim>
-
-    <c:set target="#{flash.now}" property="buckaroo" value="banzai" />
-
-    <f:verbatim>
-      c:set target="\#{flash.now}" property="buckaroo" value="banzai" 
-    </f:verbatim>
-
-    <f:verbatim>
-      Value of <code>\#{flash.now.buckaroo}</code>, should be
-      <code>banzai</code>.
-    </f:verbatim>
-
-    <h:outputText id="flash3NowValueId" value="#{flash.now.buckaroo}" />
-
-    <f:verbatim>
-      Promote buckaroo to stick around for the next request.
-    </f:verbatim>
-
-    <c:set target="#{flash.keep}" property="buckaroo" value="#{flash.now.buckaroo}" />
-
-    <f:verbatim>
-      c:set target="\#{flash.now}" property="buckaroo" 
-                     value="\#{flash.keep.buckaroo}"
-    </f:verbatim>
-
-    <h:commandButton value="reload" />
-
-    <h:commandButton value="back" action="back" />
-
-    <f:verbatim> </f:verbatim>
-
-    <h:commandButton id="next" value="next" action="next" />
-
-   </h:panelGrid>
-
-  </h:form>
-
-
-		<ui:debug/>
-</h:body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash4.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash4.xhtml
deleted file mode 100644
index 4131fb5..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash4.xhtml
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>RoR Flash Test Page 4</title>
-</h:head>
-
-<h:body bgcolor="white">
-    <h1>RoR Flash Test Page 4</h1>
-
-  <h:form prependId="false" id="form1">
-
-  <h:panelGrid columns="2" border="1">
-
-<f:verbatim>
-    Show that buckaroo is still here.
-</f:verbatim>
-
-    <h:outputText id="flash4BuckarooValueId" value="#{flash.buckaroo}" />
-
-    <h:commandButton value="reload" />
-
-    <h:commandButton value="back" action="back" />
-
-    <h:outputText value="test interaction with view parameters" />
-
-    <h:link id="link" 
-        outcome="flash5?faces-redirect=true" value="go to flash6">
-      <f:param name="id" value="1" />
-    </h:link>
-
-   </h:panelGrid>
-
-  </h:form>
-
-		<ui:debug/>
-</h:body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash5.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash5.xhtml
deleted file mode 100644
index a6d2eab..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash5.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-    <f:metadata>
-        <f:viewParam name="id" required="true"
-                     value="#{bean.selectedEventId}"
-                     requiredMessage="No training event selected"
-                     validatorMessage="Invalid training event id selected">
-            <f:validateLongRange minimum="1" />
-        </f:viewParam>
-    </f:metadata>
-    <f:event type="preRenderView"
-             listener="#{bean.loadTrainingEvent}" />
-
-            <c:set target="#{flash}" property="selectedEventId"
-                   value="#{bean.selectedEventId}" />
-            <h:link id="link" outcome="flash6?faces-redirect=true"
-                      value="Add training session for this event" />
-
-		<ui:debug/>
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash6.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash6.xhtml
deleted file mode 100644
index 6c9f5c4..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash6.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-            <h3>Event Information</h3>
-
-<c:set target="#{bean}" property="selectedEventId"
-       value="#{flash.selectedEventId}" />
-#{flash.keep.selectedEventId}
-
-<p>Value is <h:outputText value="#{bean.selectedEventId}" />.</p>
-
-<h:link id="link" outcome="flash7" value="go to flash7" />
-
-		<ui:debug/>
-
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash7.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash7.xhtml
deleted file mode 100644
index d82384e..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash7.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-            <h3>flash7</h3>
-
-<p>Value is <h:outputText value="#{flash.selectedEventId}" />.</p>
-#{flash.keep.selectedEventId}
-
-<h:link id="link" outcome="flash7" value="stay on flash7" />
-<h:link id="link2" outcome="flash8" value="go to flash8" />
-
-		<ui:debug/>
-
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash8.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash8.xhtml
deleted file mode 100644
index d1d3b40..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash8.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-            <h3>flash8</h3>
-
-<p>Value is <h:outputText value="#{flash.selectedEventId}" />.</p>
-
-<h:link id="link" outcome="flash8" value="stay on flash8" />
-
-<h:form>
-<h:commandButton value="go to flash9" action="flash9" />
-</h:form>
-
-		<ui:debug/>
-
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/flash9.xhtml b/jsf-ri/systest-per-webapp/flash/web/flash9.xhtml
deleted file mode 100644
index a929237..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/flash9.xhtml
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<body>
-
-            <h3>flash9</h3>
-
-<h:form prependId="false">
-
-  valueA: <h:inputText id="valueA" value="#{flash.valueA}" /> <br />
-  valueB: <h:inputText id="valueB" value="#{flash.valueB}" /> <br />
-  valueC: <h:inputText id="valueC" value="#{flash.valueC}" /> <br />
-
-  <h:commandButton id="nokeep" value="visit with no keep" action="flash10?faces-redirect=true" />
-  <h:commandButton id="keep" value="visit with keep" action="flash11?faces-redirect=true" />
-  <h:commandButton id="reload" value="reload" />
-
-</h:form>
-
-
-
-		<ui:debug/>
-
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/index.html b/jsf-ri/systest-per-webapp/flash/web/index.html
deleted file mode 100644
index e754f2c..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=index.jsf">
-</head>
-
-<body>
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/flash/web/index.xhtml b/jsf-ri/systest-per-webapp/flash/web/index.xhtml
deleted file mode 100644
index 20d4840..0000000
--- a/jsf-ri/systest-per-webapp/flash/web/index.xhtml
+++ /dev/null
@@ -1,89 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>Flash test</title>
-</h:head>
-<h:body bgcolor="white">
-  <h:form prependId="false" id="form1">
-
-  <c:set target="#{flash}" property="foo" value="fooValue" />
-
-  <h:panelGrid columns="2" border="1" width="600">
-      
-    Put <code>fooValue</code> in the flash under key <code>foo</code>
-    using <code>c:set</code>.  Note that things stored in the flash
-    during <b>this</b> request are only retrievable on the <b>next</b>
-    request.  If you want to store something on this request and see it
-    on this one as well, use either
-    <code>\#{flash.now.foo}</code> or
-    <code>\#{requestScope.foo}</code>.  The former is simply
-    an alias for the latter.
-
-    <f:verbatim>
-      c:set target="\#{flash}" property="foo" value="fooValue" 
-    </f:verbatim>
-
-    <f:verbatim>
-      Value of <code>\#{flash.foo}</code>, should be <code>null</code>.
-    </f:verbatim>
-
-    <h:outputText id="fooValueId" value="#{flash.foo}" />
-
-    <h:commandButton value="reload" id="reload" />
-
-    <h:commandButton value="next" id="next" action="next" />
-
-   </h:panelGrid>
-
-   <p>Type "addMessage", without the quotes, to cause a FacesMessage to
-   be added <h:inputText id="inputText"
-   value="#{bean.stringVal}" /></p>
-
-   <p><h:messages id="messages"/></p>
-
-<ui:debug />
-
-  </h:form>
-
-</h:body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/invalid-mapping/src/java/com/sun/faces/systest/InvalidMappingTestCase.java b/jsf-ri/systest-per-webapp/invalid-mapping/src/java/com/sun/faces/systest/InvalidMappingTestCase.java
deleted file mode 100644
index d70f778..0000000
--- a/jsf-ri/systest-per-webapp/invalid-mapping/src/java/com/sun/faces/systest/InvalidMappingTestCase.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class InvalidMappingTestCase extends AbstractTestCase {
-
-    public InvalidMappingTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(InvalidMappingTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-    
-    // ------------------------------------------------------------ Test Methods
-    
-    public void testInvalidMapping() throws Exception {
-        WebClient client = new WebClient();
-        client.setThrowExceptionOnFailingStatusCode(false);
-        client.setTimeout(0);                
-        HtmlPage page = (HtmlPage) getPage("/test.jsp", client);       
-        assertTrue(page.asText().contains("The FacesServlet cannot have a url-pattern of /*"));
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/invalid-mapping/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/invalid-mapping/web/WEB-INF/web.xml
deleted file mode 100644
index 12ab22c..0000000
--- a/jsf-ri/systest-per-webapp/invalid-mapping/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd">
-    <description>
-        Webapp to validate ViewExpiredException is properly handled.
-    </description>
-    <display-name>View Expired Test</display-name>
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/invalid-mapping/web/test.jsp b/jsf-ri/systest-per-webapp/invalid-mapping/web/test.jsp
deleted file mode 100644
index 1538566..0000000
--- a/jsf-ri/systest-per-webapp/invalid-mapping/web/test.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
-The contents of this file are subject to the terms
-of the Common Development and Distribution License
-(the License). You may not use this file except in
-compliance with the License.
-
-You can obtain a copy of the License at
-https://javaserverfaces.dev.java.net/CDDL.html or
-legal/CDDLv1.0.txt.
-See the License for the specific language governing
-permission and limitations under the License.
-
-When distributing Covered Code, include this CDDL
-Header Notice in each file and include the License file
-at legal/CDDLv1.0.txt.
-If applicable, add the following below the CDDL Header,
-with the fields enclosed by brackets [] replaced by
-your own identifying information:
-"Portions Copyrighted [year] [name of copyright owner]"
-
-[Name of File] [ver.__] [Date]
-
-Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-</head>
-
-<body>
-
-
-<f:view>
-
-    <h1>test</h1>
-
-</f:view>
-
-<hr>
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/jar-ordering/src/java/com/sun/faces/systest/JarOrderingTestCase.java b/jsf-ri/systest-per-webapp/jar-ordering/src/java/com/sun/faces/systest/JarOrderingTestCase.java
deleted file mode 100644
index d3dece2..0000000
--- a/jsf-ri/systest-per-webapp/jar-ordering/src/java/com/sun/faces/systest/JarOrderingTestCase.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that only unique view ids are saved in the session</p>
- */
-
-public class JarOrderingTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public JarOrderingTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(JarOrderingTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testProperOrdering() throws Exception {
-	HtmlPage page = getPage("/faces/test.jsp");
-        assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.bViewHandler"));
-    }
-
-    
-}
-
diff --git a/jsf-ri/systest-per-webapp/jar-ordering/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/jar-ordering/web/WEB-INF/web.xml
deleted file mode 100644
index 54d9f07..0000000
--- a/jsf-ri/systest-per-webapp/jar-ordering/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>com.sun.faces.managedBeanFactoryDecoratorClass</param-name>
-        <param-value>com.sun.faces.systest.NewManagedBeanFactory</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/jar-ordering/web/test.jsp b/jsf-ri/systest-per-webapp/jar-ordering/web/test.jsp
deleted file mode 100644
index b6af2da..0000000
--- a/jsf-ri/systest-per-webapp/jar-ordering/web/test.jsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:outputText id="viewHandler" value="#{facesContext.application.viewHandler}" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/src/java/com/sun/faces/systest/JspFlashTestCase.java b/jsf-ri/systest-per-webapp/jsp-flash/src/java/com/sun/faces/systest/JspFlashTestCase.java
deleted file mode 100644
index 439fb8e..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/src/java/com/sun/faces/systest/JspFlashTestCase.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.sun.faces.systest.*;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class JspFlashTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public JspFlashTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(JspFlashTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-
-    public void testFlash() throws Exception {
-        // Get the first page
-        HtmlPage page = getPage("/home-flash.jsf");
-        String pageText = page.asXml();
-        // (?s) is an "embedded flag expression" for the "DOTALL" operator.
-        // It says, "let . match any character including line terminators."
-        // Because page.asXml() returns a big string with lots of \r\n chars
-        // in it, we need (?s).
-        // the page contains a table tag with a frame attribute whose value is hsides.
-
-        // the page contains the following span, with the following id, with no contents
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"fooValueId\">\\s*</span>.*"));
-        
-        // Click the reload button
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("reload");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        // verify that fooValue is there, indicating that it's been stored in the flash
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"fooValueId\">\\s*fooValue\\s*</span>.*"));
-
-        // Get the first page, again
-        page = getPage("/home-flash.jsf");
-        
-        // fill in "addMessage" in the textBox
-        HtmlTextInput text = (HtmlTextInput) page.getHtmlElementById("inputText");
-        text.setValueAttribute("addMessage");
-        
-        // go to the next page
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        // See that it has fooValue
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash2FooValueId\">\\s*fooValue\\s*</span>.*"));
-        // See that it has barValue
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash2BarValueId\">\\s*barValue\\s*</span>.*"));
-        // See that it has the message
-        assertTrue(-1 != pageText.indexOf("test that this persists across the redirect"));
-        
-        // click the reload button
-        button = (HtmlSubmitInput) page.getHtmlElementById("reload");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();        
-        
-        // See that it doesn't have the message
-        assertTrue(-1 == pageText.indexOf("test that this persists across the redirect"));
-        
-        // Click the back button
-        button = (HtmlSubmitInput) page.getHtmlElementById("back");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // Click the next button
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // See that the page does not have the message
-        assertTrue(-1 == pageText.indexOf("test that this persists across the redirect"));
-        
-        // Click the next button
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // See that it has banzai
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash3NowValueId\">\\s*banzai\\s*</span>.*"));
-        
-        // Click the next button
-        button = (HtmlSubmitInput) page.getHtmlElementById("next");
-        page = (HtmlPage) button.click();
-        pageText = page.asXml();
-        
-        // See that it still has banzai
-        assertTrue(pageText.matches("(?s)(?m).*<span.*id=\"flash4BuckarooValueId\">\\s*banzai\\s*</span>.*"));
-        
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/src/java/com/sun/faces/systest/model/Bean.java b/jsf-ri/systest-per-webapp/jsp-flash/src/java/com/sun/faces/systest/model/Bean.java
deleted file mode 100644
index a18d43c..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/src/java/com/sun/faces/systest/model/Bean.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-
- at ManagedBean(name="bean")
- at RequestScoped
-public class Bean {
-    
-        protected String stringVal;
-
-    public String getStringVal() {
-        return stringVal;
-    }
-
-    public void setStringVal(String stringVal) {
-        this.stringVal = stringVal;
-        
-        if (null != stringVal && stringVal.equals("addMessage")) {
-            FacesContext context = FacesContext.getCurrentInstance();
-            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
-                    "test that this persists across the redirect", 
-                    "This message must persist across the redirect");
-            context.addMessage(null, message);
-            context.getExternalContext().getFlash().setKeepMessages(true);
-        }
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/jsp-flash/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 9a25f0c..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- The contents of this file are subject to the terms 
- of the Common Development and Distribution License 
- (the "License").  You may not use this file except 
- in compliance with the License.
- 
- You can obtain a copy of the license at 
- glassfish/bootstrap/legal/CDDLv1.0.txt or 
- https://glassfish.dev.java.net/public/CDDLv1.0.html. 
- See the License for the specific language governing 
- permissions and limitations under the License.
- 
- When distributing Covered Code, include this CDDL 
- HEADER in each file and include the License file at 
- glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
- add the following below this CDDL HEADER, with the 
- fields enclosed by brackets "[]" replaced with your 
- own identifying information: Portions Copyright [yyyy] 
- [name of copyright owner]
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-              version="2.0">
-
-  <managed-bean>
-    <managed-bean-name>ResultSetBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.run_time_test.model.ResultSetBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-  
-  <managed-bean>
-    <managed-bean-name>ResetUniqueRequestIdBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.application.ResetUniqueRequestIdBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-        
-  <navigation-rule>
-    <from-view-id>/home-flash.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>next</from-outcome>
-      <to-view-id>/flash2.jsp</to-view-id>
-      <redirect />
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/flash2.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>back</from-outcome>
-      <to-view-id>/home-flash.jsp</to-view-id>
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>next</from-outcome>
-      <to-view-id>/flash3.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/flash3.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>next</from-outcome>
-      <to-view-id>/flash4.jsp</to-view-id>
-    </navigation-case>
-    <navigation-case>
-      <from-outcome>back</from-outcome>
-      <to-view-id>/flash2.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/flash4.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>back</from-outcome>
-      <to-view-id>/flash3.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/jsp-flash/web/WEB-INF/web.xml
deleted file mode 100644
index 726184f..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--  
-
- The contents of this file are subject to the terms 
- of the Common Development and Distribution License 
- (the "License").  You may not use this file except 
- in compliance with the License.
- 
- You can obtain a copy of the license at 
- glassfish/bootstrap/legal/CDDLv1.0.txt or 
- https://glassfish.dev.java.net/public/CDDLv1.0.html. 
- See the License for the specific language governing 
- permissions and limitations under the License.
- 
- When distributing Covered Code, include this CDDL 
- HEADER in each file and include the License file at 
- glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
- add the following below this CDDL HEADER, with the 
- fields enclosed by brackets "[]" replaced with your 
- own identifying information: Portions Copyright [yyyy] 
- [name of copyright owner]
-
- -->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-  <description>Test Webapp for jsf-extensions-run-time </description>
-  <display-name>jsf-run-time-test</display-name>
-  <context-param>
-    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-    <param-value>server</param-value>
-  </context-param>
-  <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <!-- Faces Servlet Mapping -->
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>*.jsf</url-pattern>
-  </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/bottomPanel.jsp b/jsf-ri/systest-per-webapp/jsp-flash/web/bottomPanel.jsp
deleted file mode 100644
index d3604b0..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/bottomPanel.jsp
+++ /dev/null
@@ -1,38 +0,0 @@
-<%--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
---%>
-<p>Step through each one of the pages in the example and read the text.</p>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/flash2.jsp b/jsf-ri/systest-per-webapp/jsp-flash/web/flash2.jsp
deleted file mode 100644
index bf0de56..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/flash2.jsp
+++ /dev/null
@@ -1,97 +0,0 @@
-<%--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>RoR Flash Test Page 2</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-  </head>
-
-  <body>
-    <h1>RoR Flash Test Page 2</h1>
-
-<f:view>
-
-  <p>As mentioned in the previous page, if I wanted to store something
-  in the flash during this request and also access it during this
-  request, <code>\#{flash.now.bar}</code> is the way to do it.  In
-  reality, this just puts the value in request scope, but that's what
-  "now" is, anyway.</p>
-
-  <h:form prependId="false" id="form1">
-
-  <h:panelGrid columns="2" border="1">
-
-    Value of the previous request's foo
-
-    <h:outputText id="flash2FooValueId" value="#{flash.foo}" />
-
-    Put <code>barValue</code> in the flash.now under key
-    <code>bar</code>.
-
-    <c:set target="${flash.now}" property="bar" value="barValue" />
-
-    <f:verbatim>
-      <c:set target="\${flash.now}" property="bar" value="barValue" />
-    </f:verbatim>
-
-    Value of <code>\#{flash.now.bar}</code>, should be <code>barValue</code>.
-
-    <h:outputText id="flash2BarValueId" value="#{flash.now.bar}" />
-
-    <h:commandButton id="reload" value="reload" />
-
-    <h:commandButton id="back" value="back" action="back" />
-
-     
-
-    <h:commandButton id="next" value="next" action="next" />
-
-   </h:panelGrid>
-
-   <p><h:messages id="messages"/></p>
-
-  </h:form>
-
-</f:view>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/flash3.jsp b/jsf-ri/systest-per-webapp/jsp-flash/web/flash3.jsp
deleted file mode 100644
index b446f23..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/flash3.jsp
+++ /dev/null
@@ -1,109 +0,0 @@
-<%--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>RoR Flash Test Page 3</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-  </head>
-
-  <body>
-    <h1>RoR Flash Test Page 3</h1>
-
-<f:view>
-
-  <p>If you have something in flash.now that you later, during the same
-  request, decide you want to promote to stick around for the next
-  request, use flash.keep.</p>
-
-  <h:form prependId="false" id="form1">
-
-  <h:panelGrid columns="2" border="1">
-
-    Value of the previous request's foo
-
-    <h:outputText value="#{flash.foo}" />
-
-    Value of the this request's bar.  Should be null.
-
-    <h:outputText value="#{flash.bar}" />
-
-    Put <code>banzai</code> in the flash.now under key
-    <code>buckaroo</code>.
-
-    <c:set target="${flash.now}" property="buckaroo" value="banzai" />
-
-    <f:verbatim>
-      <c:set target="\${flash.now}" property="buckaroo" value="banzai" />
-    </f:verbatim>
-
-    Value of <code>\#{flash.now.buckaroo}</code>, should be
-    <code>banzai</code>.
-
-    <h:outputText id="flash3NowValueId" value="#{flash.now.buckaroo}" />
-
-    Promote buckaroo to stick around for the next request.
-
-    <c:set target="${flash.keep}" property="buckaroo" 
-           value="${flash.now.buckaroo}" />
-
-    <f:verbatim>
-      <c:set target="\${flash.keep}" property="buckaroo" 
-                     value="\${flash.now.buckaroo}" />
-    </f:verbatim>
-
-    <h:commandButton id="reload" value="reload" />
-
-    <h:commandButton id="back" value="back" action="back" />
-
-     
-
-    <h:commandButton id="next" value="next" action="next" />
-
-   </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/flash4.jsp b/jsf-ri/systest-per-webapp/jsp-flash/web/flash4.jsp
deleted file mode 100644
index f232dbe..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/flash4.jsp
+++ /dev/null
@@ -1,71 +0,0 @@
-<%--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>RoR Flash Test Page 4</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-  </head>
-
-  <body>
-    <h1>RoR Flash Test Page 4</h1>
-
-<f:view>
-
-  <h:form prependId="false" id="form1">
-
-  <h:panelGrid columns="2" border="1">
-
-    Show that buckaroo is still here.
-
-    <h:outputText id="flash4BuckarooValueId" value="#{flash.buckaroo}" />
-
-    <h:commandButton value="reload" />
-
-    <h:commandButton value="back" action="back" />
-
-   </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/home-flash.jsp b/jsf-ri/systest-per-webapp/jsp-flash/web/home-flash.jsp
deleted file mode 100644
index 515a74c..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/home-flash.jsp
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<%--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
---%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 
-<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<f:view>
-
-<html>
-  <head>
-    <title>JavaServer Faces Extensions Flash</title>
-  </head>
-
-    <%@ page contentType="text/html" %>
-
-<body leftmargin="0" topmargin="0" marginheight="0" marginwidth="0" rightmargin="0" bgcolor="#ffffff" class="vaa2v0">
-
-<a name="top"></a> 
-
-JavaServer Faces Extensions Flash
-
-  <p>This series of pages illustrates the usage of the flash concept
-  taken from <a target="_"
-  href="http://api.rubyonrails.com/classes/ActionController/Flash.html">Ruby
-  On Rails</a>.</p>
-
-  <p>In JSF, the flash is exposed naturally via the new <a
-  href="http://java.sun.com/products/jsp/reference/techart/unifiedEL.html">Unified
-  Expression Language in Java EE 5</a>.  It is implemented via a custom
-  <code>ELResolver</code> that introduces a new implicit object called
-  "flash".  I considered calling it "dhhIsMyHero" but opted for the
-  simpler "flash" instead.</p>
-
-  <p>Using the flash is simple, and semantically identical to the way it
-  works in Rails.  It's a Map.  Stuff you put in the Map will be
-  accessible on the "next" view shown to user.  The Map will be cleared
-  when the user has been shown the "next" view.</p>
-
-
-
-<!-- BEGIN WRAPPER TABLE, 2 COLUMN, MAIN/RIGHT -->
-<table border="0" cellpadding="0" cellspacing="10" width="100%">
-<tr valign="top"><td>
-
-<!-- BEGIN MAIN COLUMN -->
-
-  <h:form prependId="false" id="form1">
-
-  <h:panelGrid columns="2" border="1" width="600">
-      
-    Put <code>fooValue</code> in the flash under key <code>foo</code>
-    using <code>jsfExt:set</code>.  Note that things stored in the flash
-    during <b>this</b> request are only retrievable on the <b>next</b>
-    request.  If you want to store something on this request and see it
-    on this one as well, use either <code>#{flash.now.foo}</code> or
-    <code>#{requestScope.foo}</code>.  The former is simply an alias
-    for the latter.
-
-    <c:set target="${flash}" property="foo" value="fooValue" />
-
-    <f:verbatim>
-      <c:set target="\${flash}" property="foo" value="fooValue" />
-    </f:verbatim>
-
-    Value of <code>#{flash.foo}</code>, should be <code>null</code>.
-
-    <h:outputText id="fooValueId" value="#{flash.foo}" />
-
-    <h:commandButton id="reload" value="reload" />
-
-    <h:commandButton id="next" value="next" action="next" />
-
-   </h:panelGrid>
-
-   <p>Type "addMessage", without the quotes, to cause a FacesMessage to
-   be added <h:inputText id="inputText"
-   value="#{bean.stringVal}" /></p>
-
-   <p><h:messages id="messages"/></p>
-
-  </h:form>
-
-
-</tr>
-
-</table>
-
-  </body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/index.html b/jsf-ri/systest-per-webapp/jsp-flash/web/index.html
deleted file mode 100644
index a278d14..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-<meta http-equiv="refresh" content="2;url=home-flash.jsf">
-</head>
-
-<body>
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/jsp-flash/web/rightColumn.jsp b/jsf-ri/systest-per-webapp/jsp-flash/web/rightColumn.jsp
deleted file mode 100644
index bd02d5e..0000000
--- a/jsf-ri/systest-per-webapp/jsp-flash/web/rightColumn.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
---%>
-<div class="navtitle">Example Files</div>
-
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/home-flash.jsp">home-flash.jsp</a></div>
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/mainColumn.jsp">mainColumn.jsp</a></div>
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/flash2.jsp">flash2.jsp</a></div>
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/flash3.jsp">flash3.jsp</a></div>
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/flash4.jsp">flash4.jsp</a></div>
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/rightColumn.jsp">rightColumn.jsp</a></div>
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/WEB-INF/web.xml">WEB-INF/web.xml</a></div>
-<div class="bluearrows"><a href="ShowSource.jsp?filename=/WEB-INF/faces-config.xml">WEB-INF/faces-config.xml</a></div>
diff --git a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/LateBindingTestCase.java b/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/LateBindingTestCase.java
deleted file mode 100644
index 0e93150..0000000
--- a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/LateBindingTestCase.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class LateBindingTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public LateBindingTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(LateBindingTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     * <p>Verify that selectOne conversion has successfully occurred.</p>
-     */
-
-    public void testConverterPropertyEditor() throws Exception {
-        
-        HtmlPage page = getPage("/faces/Test.jsp");
-        assertTrue(!(page.asText().contains("Custom Converter") && (page.asText().contains("Custom Validator"))));
-
-        HtmlSubmitInput button = (HtmlSubmitInput) 
-             getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class).get(0);
-        page = (HtmlPage) button.click();
-        assertTrue((page.asText().contains("CustomConverter1 invoked"))
-             && (page.asText().contains("CustomValidator2 invoked"))
-             && !(page.asText().contains("CustomConverter2 invoked"))
-             && !(page.asText().contains("CustomValidator1 invoked")));
-
-        button = (HtmlSubmitInput)
-             getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class).get(0);
-        page = (HtmlPage) button.click();
-        assertTrue((page.asText().contains("CustomConverter2 invoked"))
-             && (page.asText().contains("CustomValidator1 invoked"))
-             && !(page.asText().contains("CustomConverter1 invoked"))
-             && !(page.asText().contains("CustomValidator2 invoked")));
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/Bean.java b/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/Bean.java
deleted file mode 100644
index 70c4632..0000000
--- a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/Bean.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.late;
-
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.application.FacesMessage;
-
-
-public class Bean {
-
-    private boolean switchit;
-
-
-    private Validator v1 = new CustomValidator1();
-    private Validator v2 = new CustomValidator2();
-    private Validator vret = v1;
-    private Validator vnext = v2;
-    public Validator getValidator() {
-        if (switchit) {
-            Validator tmp = vret;
-            vret = vnext;
-            vnext = tmp;
-            switchit = false;
-        }
-        return vret;
-    }
-
-    private Converter c1 = new CustomConverter1();
-    private Converter c2 = new CustomConverter2();
-    private Converter cret = c1;
-    private Converter cnext = c2;
-    public Converter getConverter() {
-        if (switchit) {
-            Converter tmp = cret;
-            cret = cnext;
-            cnext = tmp;
-            switchit = false;
-        }
-        return cret;
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-    private Validator val;
-    public void setValidator2(Validator val) {
-        System.out.println("setValidator2() -> " + val.getClass().getName());
-        if (!(val instanceof LBValidator)) {
-            throw new IllegalArgumentException("Expected LBValidator, received: " + val.getClass().getName());
-        }
-        this.val = val;
-    }
-
-    public Validator getValidator2() {
-        return val;
-    }
-
-    private Converter con;
-    public void setConverter2(Converter con) {
-        System.out.println("setConverter2() -> " + con.getClass().getName());
-        if (!(con instanceof LBConverter)) {
-            throw new IllegalArgumentException("Expected LBConverter, received: " + con.getClass().getName());
-        }
-        this.con = con;
-    }
-
-    public Converter getConverter2() {
-        return con;
-    }
-    private class CustomValidator1 implements Validator {
-
-        public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
-            switchit = true;
-            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                          "CustomValidator1 invoked",
-                                                          "CustomValidator1 invoked"));
-        }
-    }
-
-    private class CustomValidator2 implements Validator {
-
-        public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
-            switchit = true;
-            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                          "CustomValidator2 invoked",
-                                                          "CustomValidator2 invoked"));
-        }
-    }
-
-    private class CustomConverter1 implements Converter {
-
-        public Object getAsObject(FacesContext context, UIComponent component, String value) {
-            switchit = true;
-            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                          "CustomConverter1 invoked",
-                                                          "customConverter1 invoked"));
-        }
-
-        public String getAsString(FacesContext context, UIComponent component, Object value) {
-            switchit = true; 
-            return value.toString();
-        }
-
-    }
-
-    private class CustomConverter2 implements Converter {
-
-        public Object getAsObject(FacesContext context, UIComponent component, String value) {
-            switchit = true;
-            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                          "CustomConverter2 invoked",
-                                                          "customConverter2 invoked"));
-        }
-
-        public String getAsString(FacesContext context, UIComponent component, Object value) {
-            switchit = true;
-            return value.toString();
-        }
-
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/LBConverter.java b/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/LBConverter.java
deleted file mode 100644
index 4a2d919..0000000
--- a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/LBConverter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.late;
-
-import javax.faces.convert.Converter;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-
-
-public class LBConverter implements Converter {
-
-    public Object getAsObject(FacesContext context,
-                              UIComponent component,
-                              String value) {
-        return value;
-    }
-
-    public String getAsString(FacesContext context,
-                              UIComponent component,
-                              Object value) {
-        return ((value != null) ? value.toString() : "");
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/LBValidator.java b/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/LBValidator.java
deleted file mode 100644
index ebd9110..0000000
--- a/jsf-ri/systest-per-webapp/late-bindings/src/java/com/sun/faces/systest/late/LBValidator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.late;
-
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-
-
-public class LBValidator implements Validator {
-
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) throws ValidatorException {
-        // no-op
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/late-bindings/web/Test.jsp b/jsf-ri/systest-per-webapp/late-bindings/web/Test.jsp
deleted file mode 100644
index fc80935..0000000
--- a/jsf-ri/systest-per-webapp/late-bindings/web/Test.jsp
+++ /dev/null
@@ -1,67 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-
-
-<html>
-  <head><title>Simple jsp page</title></head>
-  <body>
-  <f:view>
-      <h:messages />
-      <h:form>
-          <h:inputText value="hello">
-              <f:converter binding="#{bean.converter}"/>
-          </h:inputText>
-          <h:inputText value="hello2">
-              <f:validator binding="#{bean.validator}"/>
-          </h:inputText>
-          <h:inputText value="hello3">
-              <f:validator validatorId="lbv" binding="#{bean.validator2}"/>
-              <f:converter converterId="lbc" binding="#{bean.converter2}"/>
-          </h:inputText>
-
-          <h:commandButton value="#{fn:toUpperCase('click me')}"
-                           type="submit"/>
-
-      </h:form>
-  </f:view>
-  </body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/late-bindings/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/late-bindings/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 5dd8cdd..0000000
--- a/jsf-ri/systest-per-webapp/late-bindings/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-    <managed-bean>
-        <managed-bean-name>bean</managed-bean-name>
-        <managed-bean-class>com.sun.faces.systest.late.Bean</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-
-    <converter>
-        <converter-id>lbc</converter-id>
-        <converter-class>com.sun.faces.systest.late.LBConverter</converter-class>
-    </converter>
-
-    <validator>
-        <validator-id>lbv</validator-id>
-        <validator-class>com.sun.faces.systest.late.LBValidator</validator-class>
-    </validator>
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/late-bindings/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/late-bindings/web/WEB-INF/web.xml
deleted file mode 100644
index e2824f7..0000000
--- a/jsf-ri/systest-per-webapp/late-bindings/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-        Validate late binding Validator and Converters
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Added for passive validation of issue 610 -->
-    <context-param>
-        <param-name>javax.faces.CONFIG_FILES</param-name>
-        <param-value></param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/NestedDatatablesTestCase.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/NestedDatatablesTestCase.java
deleted file mode 100644
index a5cd6fe..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/NestedDatatablesTestCase.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that only unique view ids are saved in the session</p>
- */
-
-public class NestedDatatablesTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public NestedDatatablesTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(NestedDatatablesTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testInputFieldUpdate() throws Exception {
-	HtmlPage page = getPage("/faces/test.jsp");
-	List list;
-	int i;
-	char c, max;
-
-	HtmlTextInput input = null;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	// 
-	// submit values 1 thru list.size();
-	// 
-	for (i = 0; i < list.size(); i++) {
-	    ((HtmlTextInput)list.get(i)).setValueAttribute("" + i);
-	}
-
-	HtmlSubmitInput button = null;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	// verify they are correctly updated
-	for (i = 0; i < list.size(); i++) {
-	    assertEquals("" + i, 
-			 ((HtmlTextInput)list.get(i)).getValueAttribute());
-	}
-
-	// 
-	// submit values a thru (a + list.size())
-	// 
-
-	max = (char) ('a' + (char) list.size());
-	i = 0;
-
-	for (c = 'a'; c < max; c++) {
-	    ((HtmlTextInput)list.get(i++)).setValueAttribute("" + c);
-	}
-	
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-
-	i = 0;
-	// verify they are correctly updated
-	for (c = 'a'; c < max; c++) {
-	    assertEquals("" + c, 
-			 ((HtmlTextInput)list.get(i++)).getValueAttribute());
-	}
-
-
-    }
-
-    public void testInputFieldUpdate2() throws Exception {
-	HtmlPage page = getPage("/faces/nested.jsp");
-	List list;
-	int i;
-	char c, max;
-
-	HtmlSubmitInput button = null;
-	HtmlTextInput input = null;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	// 
-	// submit values 1 thru list.size();
-	// 
-	for (i = 0; i < list.size(); i++) {
-	    ((HtmlTextInput)list.get(i)).setValueAttribute("" + i);
-	}
-
-	// find and press the "reload" button
-	page = pressReloadButton(page);
-
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	// verify they are correctly updated
-	for (i = 0; i < list.size(); i++) {
-	    assertEquals("" + i, 
-			 ((HtmlTextInput)list.get(i)).getValueAttribute());
-	}
-
-	// 
-	// submit values a thru (a + list.size())
-	// 
-
-	max = (char) ('a' + (char) list.size());
-	i = 0;
-
-	for (c = 'a'; c < max; c++) {
-	    ((HtmlTextInput)list.get(i++)).setValueAttribute("" + c);
-	}
-	
-	// find and press the "reload" button
-	page = pressReloadButton(page);
-
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	i = 0;
-	// verify they are correctly updated
-	for (c = 'a'; c < max; c++) {
-	    assertEquals("" + c, 
-			 ((HtmlTextInput)list.get(i++)).getValueAttribute());
-	}
-
-	// add some ports
-       
-	// press first add port button
-	page = pressAddPortButton(page, 0);
-
-	// change the port number
-	input = (HtmlTextInput) getNthInputContainingGivenId(page, 
-							     "portNumber", 0);
-	input.setValueAttribute("12");
-
-	page = pressReloadButton(page);
-
-	// verify that it is updated correctly.
-	input = (HtmlTextInput) getNthInputContainingGivenId(page, 
-							     "portNumber", 0);
-	assertEquals("12", input.getValueAttribute());
-
-	// press second add port button
-	page = pressAddPortButton(page, 1);
-
-	// verify that the last port input in the page doesn't the value
-	input = (HtmlTextInput) getNthFromLastInputContainingGivenId(page, 
-							     "portNumber", 0);
-	assertTrue(-1 == input.getValueAttribute().indexOf("12"));
-
-    }
-
-    private HtmlPage pressReloadButton(HtmlPage page) throws Exception {
-	HtmlSubmitInput button = null;
-	
-	button = (HtmlSubmitInput)getInputContainingGivenId(page, 
-							    "reload");
-	page = (HtmlPage) button.click();
-	return page;
-    }
-    
-    private HtmlPage pressAddPortButton(HtmlPage page, 
-					int whichButton) throws Exception {
-	HtmlSubmitInput button = null;
-	
-	button = (HtmlSubmitInput)getNthInputContainingGivenId(page, 
-							       "add-port",
-							       whichButton);
-	page = (HtmlPage) button.click();
-	return page;
-    }
-    
-}
-
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/ActionBean.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/ActionBean.java
deleted file mode 100644
index 7077802..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/ActionBean.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-public class ActionBean extends Object {
-
-
-    public ActionBean() {
-    }
-
-    public String outerAction() {
-        outerActionCallCount++;
-        return null;
-    }
-
-    public String innerAction() {
-        innerActionCallCount++;
-        return null;
-    }
-
-    protected int outerActionCallCount = 0;
-
-    public int getOuterActionCallCount() {
-        return outerActionCallCount;
-    }
-
-    public void setOuterActionCallCount(int newOuterActionCallCount) {
-        outerActionCallCount = newOuterActionCallCount;
-    }
-
-    protected int innerActionCallCount = 0;
-
-    public int getInnerActionCallCount() {
-        return innerActionCallCount;
-    }
-
-    public void setInnerActionCallCount(int newInnerActionCallCount) {
-        innerActionCallCount = newInnerActionCallCount;
-    }
-
-
-}
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/Bean62.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/Bean62.java
deleted file mode 100644
index e3cffc7..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/Bean62.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-import javax.faces.model.ListDataModel;
-
-/**
- * @author edburns
- */
-public class Bean62 {
-
-    /**
-     * Creates a new instance of Bean62
-     */
-    public Bean62() {
-    }
-
-    public Bean62(String label) {
-        this.label = label;
-    }
-
-    /**
-     * Holds value of property model.
-     */
-    private ListDataModel model;
-
-    /**
-     * Getter for property model.
-     *
-     * @return Value of property model.
-     */
-    public ListDataModel getModel() {
-        if (null == this.model) {
-            ArrayList list = new ArrayList();
-            if (isRoot()) {
-                list.add(new Bean62(label + ".one"));
-                list.add(new Bean62(label + ".two"));
-                list.add(new Bean62(label + ".three"));
-            } else {
-                list.add("leaf1");
-                list.add("leaf2");
-                list.add("leaf3");
-            }
-            model = new ListDataModel(list);
-        }
-        return this.model;
-    }
-
-    /**
-     * Setter for property model.
-     *
-     * @param model New value of property model.
-     */
-    public void setModel(ListDataModel model) {
-
-        this.model = model;
-    }
-
-    /**
-     * Holds value of property root.
-     */
-    private boolean root = false;
-
-    /**
-     * Getter for property root.
-     *
-     * @return Value of property root.
-     */
-    public boolean isRoot() {
-
-        return this.root;
-    }
-
-    /**
-     * Setter for property root.
-     *
-     * @param root New value of property root.
-     */
-    public void setRoot(boolean root) {
-
-        this.root = root;
-    }
-
-    /**
-     * Holds value of property label.
-     */
-    private String label;
-
-    /**
-     * Getter for property label.
-     *
-     * @return Value of property label.
-     */
-    public String getLabel() {
-
-        return this.label;
-    }
-
-    /**
-     * Setter for property label.
-     *
-     * @param label New value of property label.
-     */
-    public void setLabel(String label) {
-
-        this.label = label;
-    }
-
-    public String action() {
-        Bean62 yyyInstance = (Bean62) this.model.getRowData();
-        Object wwwInstance = yyyInstance.getModel().getRowData();
-
-        setCurStatus(wwwInstance);
-
-        return null;
-    }
-
-    /**
-     * Holds value of property curStatus.
-     */
-    private Object curStatus;
-
-    /**
-     * Getter for property curStatus.
-     *
-     * @return Value of property curStatus.
-     */
-    public Object getCurStatus() {
-
-        return this.curStatus;
-    }
-
-    /**
-     * Setter for property curStatus.
-     *
-     * @param curStatus New value of property curStatus.
-     */
-    public void setCurStatus(Object curStatus) {
-
-        this.curStatus = curStatus;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/BeanList.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/BeanList.java
deleted file mode 100644
index 3a964b7..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/BeanList.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.model.ListDataModel;
-import javax.faces.component.UIData;
-import javax.faces.context.FacesContext;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class BeanList extends Object {
-
-    private ListDataModel listDataModel = null;
-
-    public BeanList() {
-    }
-
-    protected String outerDataName;
-
-    public String getOuterDataName() {
-        return outerDataName;
-    }
-
-    public void setOuterDataName(String newOuterDataName) {
-        outerDataName = newOuterDataName;
-    }
-
-    protected String innerDataName;
-
-    public String getInnerDataName() {
-        return innerDataName;
-    }
-
-    public void setInnerDataName(String newInnerDataName) {
-        innerDataName = newInnerDataName;
-    }
-
-
-    protected String name = "name";
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String newName) {
-        if (null == newName) {
-            return;
-        }
-        name = newName;
-    }
-
-    protected int size = 10;
-
-    public int getSize() {
-        return size;
-    }
-
-    public void setSize(int newSize) {
-        size = newSize;
-    }
-
-    public ListDataModel getListDataModel() {
-        if (null == listDataModel) {
-            ArrayList beans = new ArrayList(size);
-            InputBean curBean = null;
-
-            for (int i = 0; i < size; i++) {
-                curBean = new InputBean(this, size, getName() + " " + i);
-
-                beans.add(curBean);
-            }
-            listDataModel = new ListDataModel(beans);
-
-        }
-
-        return listDataModel;
-    }
-
-    public void setListDataModel(ListDataModel newListDataModel) {
-        listDataModel = newListDataModel;
-    }
-
-    protected List inputValues = null;
-
-    public List getInputValues() {
-        return inputValues;
-    }
-
-    public void setInputValues(List newInputValues) {
-        inputValues = newInputValues;
-    }
-
-
-}
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/InputBean.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/InputBean.java
deleted file mode 100644
index bec0263..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/InputBean.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.component.UIData;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class InputBean extends Object {
-
-    /**
-     * so we know when to reset our counters
-     */
-
-    protected int max;
-
-    protected BeanList list;
-
-    public InputBean(BeanList list, int max, String stringProperty) {
-        this.list = list;
-        this.max = max;
-        this.stringProperty = stringProperty;
-    }
-
-    protected String stringProperty;
-
-    public String getStringProperty() {
-        String result = null;
-        if (null != stringProperty) {
-            result = stringProperty;
-            return result;
-        }
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        int
-                index = getFlatIndex();
-        List inputValues = null;
-
-        if (null == (inputValues = list.getInputValues())) {
-            result = null;
-        } else {
-            result = (String) inputValues.get(index);
-        }
-
-        return result;
-    }
-
-    public void setStringProperty(String newStringProperty) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        int
-                size = getFlatSize(),
-                index = getFlatIndex();
-        List inputValues = null;
-
-        if (null == (inputValues = list.getInputValues())) {
-            list.setInputValues(inputValues = new ArrayList(size));
-            for (int i = 0; i < size; i++) {
-                inputValues.add(new Object());
-            }
-        }
-
-        inputValues.set(index, newStringProperty);
-        this.stringProperty = null;
-    }
-
-    private int getFlatIndex() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        UIViewRoot root = context.getViewRoot();
-
-        UIData
-                outerData = (UIData) root.findComponent(list.getOuterDataName()),
-                innerData = (UIData) root.findComponent(list.getInnerDataName());
-
-        int
-                outerIndex = outerData.getRowIndex(),
-                innerIndex = innerData.getRowIndex(),
-                innerRowCount = innerData.getRowCount(),
-                index = innerRowCount * outerIndex + innerIndex;
-
-        return index;
-    }
-
-    private int getFlatSize() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        UIViewRoot root = context.getViewRoot();
-
-        UIData
-                outerData = (UIData) root.findComponent(list.getOuterDataName()),
-                innerData = (UIData) root.findComponent(list.getInnerDataName());
-
-        int size = outerData.getRowCount() * innerData.getRowCount();
-        return size;
-    }
-
-
-}
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/PrintTreePhaseListener.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/PrintTreePhaseListener.java
deleted file mode 100644
index 4d42e5b..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/sun/faces/systest/model/PrintTreePhaseListener.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseEvent;
-
-import com.sun.faces.util.DebugUtil;
-
-import javax.faces.context.FacesContext;
-
-public class PrintTreePhaseListener extends Object implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-        DebugUtil.printTree(FacesContext.getCurrentInstance().getViewRoot(),
-                System.out);
-    }
-
-
-    public void beforePhase(PhaseEvent event) {
-
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.ANY_PHASE;
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/Port.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/Port.java
deleted file mode 100644
index 3f538c4..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/Port.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.tavve.webapps.nested;
-
-import java.io.Serializable;
-
-public class Port implements Serializable {
-    
-    String _portNumber = "0";
-    
-    public Port() {
-    }
-    
-    public Port(String portNumber) {
-        _portNumber = portNumber;
-    }
-    
-    public void setPortNumber(String portNumber) {
-        _portNumber = portNumber;
-    }
-    
-    public String getPortNumber() {
-        return _portNumber;
-    }
-
-    public boolean equals(Object o) {
-        if (!(o instanceof Port)) {
-            return false;
-        }
-        
-        String otherPortNumber = ((Port)o).getPortNumber();
-        
-        return _portNumber == null ? (otherPortNumber == null) : _portNumber.equals(otherPortNumber);
-    }
-}
-
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/Service.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/Service.java
deleted file mode 100644
index a5d92ca..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/Service.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.tavve.webapps.nested;
-
-import java.util.Vector;
-import java.io.Serializable;
-
-public class Service implements Serializable {
-    
-    String _name;
-    Vector _ports = new Vector();
-    
-    public Service() {
-        _name="";
-    }
-    
-    public Service(String name) {
-        _name = name;
-    }
-    
-    public void setName(String name) {
-        _name = name;
-    }
-    
-    public String getName() {
-        return _name;
-    }
-    
-    public Vector getPorts() {
-        return _ports;
-    }
-    
-    public void setPorts(Vector ports) {
-        _ports = ports;
-    }
-
-    public void addPort(Port port) {
-        _ports.addElement(port);
-    }
-    
-    public void deletePort(Port port) {
-        _ports.remove(port);
-    }
-    
-    public boolean equals(Object o) {
-        if (!(o instanceof Service)) {
-            return false;
-        }
-        
-        String otherName = ((Service)o).getName();
-        
-        return _name == null ? (otherName == null) : _name.equals(otherName);
-    }
-}
-
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/TestBean.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/TestBean.java
deleted file mode 100644
index 20c75c1..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/com/tavve/webapps/nested/TestBean.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.tavve.webapps.nested;
-
-import java.util.Vector;
-import java.io.Serializable;
-import java.util.Iterator;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-
-import javax.servlet.http.HttpSession;
-
-public class TestBean implements Serializable {
-
-    Vector _services = new Vector();
-
-    public TestBean() {
-
-        System.err.println("Constructing a TestBean");
-
-        Service service1 = new Service("Service 1");
-        //        service1.addPort(new Port("80"));
-
-        _services.addElement(service1);
-
-        Service service2 = new Service("Service 2");
-        //service1.addPort(new Port("90"));
-
-        _services.addElement(service2);
-    }
-
-    public Vector getServices() {
-        return _services;
-    }
-
-    public void setServices(Vector services) {
-        _services = services;
-    }
-
-    public String addService() {
-
-        System.err.println("addService");
-
-        _services.add(new Service("New Service"));
-
-        return "OK";
-    }
-
-    public String deleteService() {
-
-        System.err.println("deleteService");
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        Service service = (Service) facesContext.getExternalContext().getRequestMap().get("service");
-
-        _services.remove(service);
-
-        return "OK";
-    }
-
-    public String addPortNumber() {
-
-        System.err.println("addPortNumber");
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        Service service = (Service) facesContext.getExternalContext().getRequestMap().get("service");
-
-        service.addPort(new Port());
-
-        return "OK";
-    }
-
-    public String deletePortNumber() {
-
-        System.err.println("deletePortNumber");
-
-        FacesContext facesContext = FacesContext.getCurrentInstance();
-        Service service = (Service) facesContext.getExternalContext().getRequestMap().get("service");
-        Port port = (Port) facesContext.getExternalContext().getRequestMap().get("portNumber");
-
-        service.deletePort(port);
-
-        return "OK";
-    }
-
-    public String getCurrentStateTable() {
-        StringBuffer out = new StringBuffer();
-        Iterator inner, outer = _services.iterator();
-        Service curService;
-        Port curPort;
-
-        out.append("<table border=\"1\">\n");
-        while (outer.hasNext()) {
-            curService = (Service) outer.next();
-            out.append("  <tr>\n");
-            inner = curService.getPorts().iterator();
-            out.append("<td>service: " + curService.getName() + "</td>");
-            while (inner.hasNext()) {
-                curPort = (Port) inner.next();
-                out.append(" <td>port: " + curPort.getPortNumber() + "</td>\n");
-            }
-            out.append("</tr>\n");
-        }
-        out.append("</table>\n");
-        return out.toString();
-
-    }
-
-    public String printTree() {
-        Iterator inner, outer = _services.iterator();
-        Service curService;
-        Port curPort;
-        while (outer.hasNext()) {
-            curService = (Service) outer.next();
-            System.out.println("service: " + curService + " " +
-                    curService.getName());
-            inner = curService.getPorts().iterator();
-            while (inner.hasNext()) {
-                curPort = (Port) inner.next();
-                System.out.println("\tport: " + curPort + " " +
-                        curPort.getPortNumber());
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/src/java/test/NestedBean.java b/jsf-ri/systest-per-webapp/nested-datatables/src/java/test/NestedBean.java
deleted file mode 100644
index 031644a..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/src/java/test/NestedBean.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package test;
-
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-
-/**
- *
- * @author edburns
- */
-public class NestedBean {
-    
-    /** Creates a new instance of NestedBean */
-    public NestedBean() {
-    }
-    
-    private String id;
-    
-    public String getId() {
-        return id;
-    }
-    
-    public void setId(String id) {
-        this.id = id;
-    }
-    
-    public void executeLink(ActionEvent event) {
-        String whichLink = "You clicked on link: "+id;
-        System.out.println(whichLink);
-        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("whichLink", whichLink);
-    }
-    
-}
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/nested-datatables/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 0348d26..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-    
-  <managed-bean>
-    <managed-bean-name>outer62</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.Bean62</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>root</property-name>
-      <value>true</value>
-    </managed-property>    
-    <managed-property>
-      <property-name>label</property-name>
-      <value>root</value>
-    </managed-property>    
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>outer</managed-bean-name>
-    <managed-bean-class>java.util.ArrayList</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <list-entries>
-      <value-class>java.lang.String</value-class>
-      <value>outer 0</value>
-      <value>outer 1</value>
-    </list-entries>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>bean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.ActionBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>inner</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.BeanList
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>name</property-name>
-      <value>inner</value>
-    </managed-property>
-    <managed-property>
-      <property-name>outerDataName</property-name>
-      <value>form:outerData</value>
-    </managed-property>
-    <managed-property>
-      <property-name>innerDataName</property-name>
-      <value>form:outerData:innerData</value>
-    </managed-property>
-    <managed-property>
-      <property-name>size</property-name>
-      <value>3</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>testbean</managed-bean-name>
-    <managed-bean-class>com.tavve.webapps.nested.TestBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-  
-  <managed-bean>
-		<managed-bean-name>nestedBean1</managed-bean-name>
-		<managed-bean-class>test.NestedBean</managed-bean-class>
-		<managed-bean-scope>none</managed-bean-scope>
-		<managed-property>
-			<property-name>id</property-name>
-			<value>1</value>
-		</managed-property>
-	</managed-bean>
-
-	<managed-bean>
-		<managed-bean-name>nestedBean2</managed-bean-name>
-		<managed-bean-class>test.NestedBean</managed-bean-class>
-		<managed-bean-scope>none</managed-bean-scope>
-		<managed-property>
-			<property-name>id</property-name>
-			<value>2</value>
-		</managed-property>
-	</managed-bean>
-	
-	<managed-bean>
-		<managed-bean-name>nestedBean3</managed-bean-name>
-		<managed-bean-class>test.NestedBean</managed-bean-class>
-		<managed-bean-scope>none</managed-bean-scope>
-		<managed-property>
-			<property-name>id</property-name>
-			<value>3</value>
-		</managed-property>
-	</managed-bean>
-
-	<managed-bean>
-		<managed-bean-name>nestedBean4</managed-bean-name>
-		<managed-bean-class>test.NestedBean</managed-bean-class>
-		<managed-bean-scope>none</managed-bean-scope>
-		<managed-property>
-			<property-name>id</property-name>
-			<value>4</value>
-		</managed-property>
-	</managed-bean>
-	
-	<managed-bean>
-		<managed-bean-name>nestedTestList1</managed-bean-name>
-		<managed-bean-class>java.util.ArrayList</managed-bean-class>
-		<managed-bean-scope>request</managed-bean-scope>
-		<list-entries>
-			<value>#{nestedBean1}</value>
-			<value>#{nestedBean2}</value>
-		</list-entries>
-	</managed-bean>
-	
-	<managed-bean>
-		<managed-bean-name>nestedTestList2</managed-bean-name>
-		<managed-bean-class>java.util.ArrayList</managed-bean-class>
-		<managed-bean-scope>request</managed-bean-scope>
-		<list-entries>
-			<value>#{nestedBean3}</value>
-			<value>#{nestedBean4}</value>
-		</list-entries>
-	</managed-bean>
-	<managed-bean>
-		<managed-bean-name>nestedTestList</managed-bean-name>
-		<managed-bean-class>java.util.ArrayList</managed-bean-class>
-		<managed-bean-scope>request</managed-bean-scope>
-		<list-entries>
-			<value>#{nestedTestList1}</value>
-			<value>#{nestedTestList2}</value>
-		</list-entries>
-	</managed-bean>
-  
-  <navigation-rule>
-    <from-view-id>/nested.jsp</from-view-id>
-    <navigation-case>
-      <from-outcome>OK</from-outcome>
-      <to-view-id>/nested.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/nested-datatables/web/WEB-INF/web.xml
deleted file mode 100644
index ab55083..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5"> 
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.serializeServerState</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>server</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/index.jsp b/jsf-ri/systest-per-webapp/nested-datatables/web/index.jsp
deleted file mode 100644
index f583254..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/index.jsp
+++ /dev/null
@@ -1,64 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
-<jsp:forward page="/faces/nested.jsp"/>
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/jsfri62.jsp b/jsf-ri/systest-per-webapp/nested-datatables/web/jsfri62.jsp
deleted file mode 100644
index ca3577f..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/jsfri62.jsp
+++ /dev/null
@@ -1,92 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-  <html>
-    <head>
-      <title>Nested Tables</title>
-    </head>
-    <body>
-    
-    <p>Test from issue <a href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=62">62</a>.</p>
-      <h:form id="form">
-        <h:dataTable id="outer" value="#{outer62.model}" var="yyy">
-          <h:column>
-            outer
-            <h:dataTable id="inner" value="#{yyy.model}" var="www">
-              <h:column>
-                inner
-                <h:commandLink action="#{outer62.action}">link</h:commandLink>
-             </h:column>
-           </h:dataTable>
-          </h:column>
-         </h:dataTable>
-         
-         <p>Current Status = <h:outputText value="#{outer62.curStatus}" /></p>
-      </h:form>
-    </body>
-  </html>
-</f:view>
-
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/nested.jsp b/jsf-ri/systest-per-webapp/nested-datatables/web/nested.jsp
deleted file mode 100644
index 1731dbf..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/nested.jsp
+++ /dev/null
@@ -1,113 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-  <html>
-    <head>
-      <title>Nested Tables</title>
-    </head>
-    <body>
-      <h:form id="form">
-	    <h:dataTable id="outer" value="#{testbean.services}" var="service">
-		  <h:column>
-		    <f:facet name="header">
-		      <h:outputText value="Service"/>
-		    </f:facet>
-		
-	        <h:inputText value="#{service.name}" required="true"/>
-		    <h:commandButton id="delete" styleClass="command-multiple" immediate="false" action="#{testbean.deleteService}" value="Delete"/>
-			
-		    <f:facet name="footer">
-		      <h:commandButton id="add" styleClass="command-multiple" immediate="false" action="#{testbean.addService}" value="Add"/>
-		    </f:facet>
-		  </h:column>
-		
-		  <h:column>
-		    <f:facet name="header">
-		      <h:outputText value="Port"/>
-		    </f:facet>
-
-		    <h:dataTable id="inner" value="#{service.ports}" var="portNumber">
-		      <h:column>
-			    <h:inputText id="portNumber" value="#{portNumber.portNumber}" size="5"/>
-			    <h:commandButton styleClass="command-multiple" immediate="false" action="#{testbean.deletePortNumber}" value="Delete"/>
-				    
-                <f:facet name="footer">
-				  <h:commandButton id="add-port" styleClass="command-multiple" immediate="false"  action="#{testbean.addPortNumber}" value="Add port"/>
-	            </f:facet>
-			  </h:column>
-				
-			</h:dataTable>
-		  </h:column>
-	    </h:dataTable>  
-<hr />
-          <h:commandButton id="reload" value="reload" action="#{testbean.printTree}"/>
-          
-          <p>Current state after previous load: <h:outputText escape="false" value="#{testbean.currentStateTable}" /></p>
-      </h:form>
-    </body>
-  </html>
-</f:view>
-
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/nestedTest-jsfri159.jsp b/jsf-ri/systest-per-webapp/nested-datatables/web/nestedTest-jsfri159.jsp
deleted file mode 100644
index 6b84eea..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/nestedTest-jsfri159.jsp
+++ /dev/null
@@ -1,97 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<html><head><title>test From Michael Youngstrom</title></head>
-<body>
-<p>Test from issue <a href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=159">159</a>.</p>
-
-
-<p>When nestedTest is loaded you are presented with 4 links.  If you click on "test
-bean: 4" then "You clicked on link: 4" is correctly printed to the console. 
-However, if you click on "test bean: 1" then "You clicked on link: 3" is
-INCORRECTLY displayed.</p>
-
-<p>The problem is there are actually 2 DataModels associated with the datatable
-with var="nestedBean".  But when the Action Event is fired there is no way for
-the UIData to switch to the correct DataModel.</p>
-
-<f:view>
-	<h:form>
-		<h:dataTable value="#{nestedTestList}" var="nestedList">
-			<h:column>
-				<h:dataTable value="#{nestedList}" var="nestedBean">
-					<h:column>
-						<h:commandLink actionListener="#{nestedBean.executeLink}"><h:outputText
-value="test bean: #{nestedBean.id}"/></h:commandLink>
-					</h:column>
-				</h:dataTable>
-			</h:column>
-		</h:dataTable>
-	</h:form>
-	
-	<p><h:outputText value="#{whichLink}" /></p>
-	
-</f:view>
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/test.jsp b/jsf-ri/systest-per-webapp/nested-datatables/web/test.jsp
deleted file mode 100644
index f8e2bb5..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/test.jsp
+++ /dev/null
@@ -1,110 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Nested Tables</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Nested Tables</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:dataTable id="outerData" value="#{outer}" var="outerVar">
-
-      <h:column id="outerColumn">
-
-        <h:dataTable id="innerData" value="#{inner.listDataModel}" 
-                     var="innerVar">
-
-          <f:facet name="header">
-            <h:outputText id="header" value="#{outerVar}" />
-          </f:facet>
-
-          <h:column id="innerColumn">
-            <h:inputText id="inputText" value="#{innerVar.stringProperty}" />
-          </h:column>
-
-        </h:dataTable>
-
-      </h:column>
-
-    </h:dataTable>
-
-    <h:commandButton style="color: red" value="reload" />
-
-    <p />
-
-    <h:messages />
-
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/nested-datatables/web/test2.jsp b/jsf-ri/systest-per-webapp/nested-datatables/web/test2.jsp
deleted file mode 100644
index 5963b6b..0000000
--- a/jsf-ri/systest-per-webapp/nested-datatables/web/test2.jsp
+++ /dev/null
@@ -1,121 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Nested Tables 2</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Nested Tables 2</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:dataTable id="outerData" value="#{outer}" var="outerVar">
-
-      <h:column id="outerColumn0">
-
-       <h:commandButton id="outerButton" action="#{bean.outerAction}" 
-                        value="outerButton" />
-
-      </h:column>
-
-      <h:column id="outerColumn1">
-
-        <h:dataTable id="innerData" value="#{inner.listDataModel}" 
-                     var="innerVar">
-
-
-          <h:column id="innerColumn">
-            <h:commandButton id="innerButton" action="#{bean.innerAction}" 
-                       value="innerButton" />
-          </h:column>
-
-        </h:dataTable>
-
-      </h:column>
-
-    </h:dataTable>
-
-    <h:commandButton style="color: red" value="reload" />
-
-    <p />
-
-    <p>Outer Action called 
-       <h:outputText value="#{bean.outerActionCallCount}" /> times</p>
-
-    <p>Inner Action called 
-       <h:outputText value="#{bean.innerActionCallCount}" /> times</p>
-
-    <h:messages />
-
-
-  </h:form>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/NestedLoadBundlesTestCase.java b/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/NestedLoadBundlesTestCase.java
deleted file mode 100644
index 605a1dc..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/NestedLoadBundlesTestCase.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure loadBundle works as expected in JSF 1.2</p>
- */
-
-public class NestedLoadBundlesTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public NestedLoadBundlesTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(NestedLoadBundlesTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testNestedLoadBundles() throws Exception {
-	HtmlPage page = getPage("/faces/index.jsp");
-	HtmlSubmitInput button = null;
-
-	String pageText = page.asText();
-	assertNotNull(pageText);
-	assertTrue(-1 != pageText.indexOf("Output 01 from bundle: Bundle A"));
-	assertTrue(-1 != pageText.indexOf("Output 02 from bundle: Bundle B"));
-	assertTrue(-1 != pageText.indexOf("Output 03 from bundle: Bundle C"));
-	assertTrue(-1 != pageText.indexOf("Output 04 from bundle: Bundle C"));
-	assertTrue(-1 != pageText.indexOf("Output 05 from bundle: Bundle D"));
-	assertTrue(-1 != pageText.indexOf("Output 06 from bundle: Bundle E"));
-
-	List list;
-
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	assertTrue(0 == button.getValueAttribute().indexOf("Bundle E"));
-	page = (HtmlPage) button.click();
-
-	pageText = page.asText();
-	assertNotNull(pageText);
-	assertTrue(-1 != pageText.indexOf("Output 01 from bundle: Bundle A"));
-	assertTrue(-1 != pageText.indexOf("Output 02 from bundle: Bundle B"));
-	assertTrue(-1 != pageText.indexOf("Output 03 from bundle: Bundle C"));
-	assertTrue(-1 != pageText.indexOf("Output 04 from bundle: Bundle C"));
-	assertTrue(-1 != pageText.indexOf("Output 05 from bundle: Bundle D"));
-	assertTrue(-1 != pageText.indexOf("Output 06 from bundle: Bundle E"));
-
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	assertTrue(0 == button.getValueAttribute().indexOf("Bundle E"));
-	page = (HtmlPage) button.click();
-
-    }    
-}
-
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleA_en.properties b/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleA_en.properties
deleted file mode 100644
index 10b26d8..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleA_en.properties
+++ /dev/null
@@ -1 +0,0 @@
-okLabel=Bundle A
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleB_en.properties b/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleB_en.properties
deleted file mode 100644
index 2578ff6..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleB_en.properties
+++ /dev/null
@@ -1 +0,0 @@
-okLabel=Bundle B
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleC_en.properties b/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleC_en.properties
deleted file mode 100644
index 5eb499c..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleC_en.properties
+++ /dev/null
@@ -1 +0,0 @@
-okLabel=Bundle C
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleD_en.properties b/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleD_en.properties
deleted file mode 100644
index 0c778ab..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleD_en.properties
+++ /dev/null
@@ -1 +0,0 @@
-okLabel=Bundle D
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleE_en.properties b/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleE_en.properties
deleted file mode 100644
index 9e3f102..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/src/java/com/sun/faces/systest/model/BundleE_en.properties
+++ /dev/null
@@ -1 +0,0 @@
-okLabel=Bundle E
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/nested-loadbundles/web/WEB-INF/faces-config.xml
deleted file mode 100644
index cc3d484..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-    
-    <application>
-        <locale-config>
-        <default-locale>en</default-locale>
-        </locale-config>
-    </application>
-    
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/nested-loadbundles/web/WEB-INF/web.xml
deleted file mode 100644
index bc18aac..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5"> 
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <context-param>
-        <param-name>com.sun.faces.enabledLoadBundle11Compatibility</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/web/bar01.jsp b/jsf-ri/systest-per-webapp/nested-loadbundles/web/bar01.jsp
deleted file mode 100644
index 3d25486..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/web/bar01.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="inner02">
-
-<f:loadBundle var="bundle" basename="com.sun.faces.systest.model.BundleC" />
-
-<p>Output 03 from bundle: <h:outputText id="output03" value="#{bundle.okLabel}" /></p>
-
-<h:outputText value="bar01"/>
-</f:subview>
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/web/bar02.jsp b/jsf-ri/systest-per-webapp/nested-loadbundles/web/bar02.jsp
deleted file mode 100644
index 788dae0..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/web/bar02.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:loadBundle var="bundle" basename="com.sun.faces.systest.model.BundleE" />
-
-<p>Output 06 from bundle: <h:outputText id="output06" value="#{bundle.okLabel}" /></p>
-
-
-<h:outputText value="bar02"/>
-
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/web/foo01.jsp b/jsf-ri/systest-per-webapp/nested-loadbundles/web/foo01.jsp
deleted file mode 100644
index ca49b96..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/web/foo01.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:loadBundle var="bundle" basename="com.sun.faces.systest.model.BundleB" />
-
-<p>Output 02 from bundle: <h:outputText id="outputO2" value="#{bundle.okLabel}" /></p>
-
-<f:subview id="inner01">
-<h:outputText value="foo01"/>
-</f:subview>
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/web/foo02.jsp b/jsf-ri/systest-per-webapp/nested-loadbundles/web/foo02.jsp
deleted file mode 100644
index a124080..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/web/foo02.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-
-<f:loadBundle var="bundle" basename="com.sun.faces.systest.model.BundleD" />
-
-<p>Output 05 from bundle: <h:outputText id="output05" value="#{bundle.okLabel}" /></p>
-
-
-<h:outputText value="foo02"/>
-
diff --git a/jsf-ri/systest-per-webapp/nested-loadbundles/web/index.jsp b/jsf-ri/systest-per-webapp/nested-loadbundles/web/index.jsp
deleted file mode 100644
index 8251bd1..0000000
--- a/jsf-ri/systest-per-webapp/nested-loadbundles/web/index.jsp
+++ /dev/null
@@ -1,140 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-
-<html>
-<head>
-<title>subview01</title>
-</head>
-<body>
-
-<p>Correct nesting order of ResourceBundles</p>
-
-<pre><code>
-
-viewRoot
-
-  BundleA
-
-  output01
-
-  BundleB
-
-  output02
-
-  subview id=inner02
-
-    Bundle C
-
-    output03
-
-  output04
-
-  subview id=outer01
-
-    BundleD
-
-    output05
-
-  subview id=outer02
-
-    BundleE
-
-    output06
-
-  button
-
-
-</code></pre>
-
-
-<f:loadBundle var="bundle" basename="com.sun.faces.systest.model.BundleA" />
-
-<f:view>
-
-<p>Output 01 from bundle: <h:outputText id="outputO1" value="#{bundle.okLabel}" /></p>
-
-<h:outputText value="Begin test <c:import> with subview tag in imported page"/>
-
-<p>
-<c:import url="foo01.jsp"/>
-</p>
-
-<p><h:outputText value="subview01"/></p>
-
-<p><c:import url="bar01.jsp"/></p>
-
-<p><h:outputText value="End test <c:import> with subview tag in imported page"/></p>
-
-<p>Output 04 from bundle: <h:outputText id="output04" value="#{bundle.okLabel}" /></p>
-
-<p>
-<h:outputText value="Begin test <c:import> with subview tag in importing page"/>
-</p>
-
-<p><f:subview id="outer01">
-<c:import url="foo02.jsp"/>
-</f:subview></p>
-
-
-<p><h:outputText value="subview02"/></p>
-
-<p><f:subview id="outer02">
-<c:import url="bar02.jsp"/>
-</f:subview>
-</p>
-
-<p><h:outputText value="End test <c:import> with subview tag in importing page"/></p>
-
-<h:form prependId="false">
-
-<p>Reload: <h:commandButton id="button" value="#{bundle.okLabel}" /></p>
-
-</h:form>
-
-</f:view>
-
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/NeverUnwrapExceptionsTestCase.java b/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/NeverUnwrapExceptionsTestCase.java
deleted file mode 100644
index 8c353ec..0000000
--- a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/NeverUnwrapExceptionsTestCase.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that only unique view ids are saved in the session</p>
- */
-
-public class NeverUnwrapExceptionsTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public NeverUnwrapExceptionsTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(NeverUnwrapExceptionsTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testNeverUnwrapExceptions() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-        
-	HtmlPage page = getPage("/faces/test.jsp");
-        String text = page.asText();
-        assertTrue(text.contains("Exception class: javax.servlet.ServletException"));
-        assertTrue(text.contains("Root cause: java.lang.IllegalStateException"));
-        assertTrue(text.contains("Exception message: java.lang.IllegalArgumentException: java.lang.UnsupportedOperationException"));
-    }
-
-    
-}
-
diff --git a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/model/CatchExceptionServlet.java b/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/model/CatchExceptionServlet.java
deleted file mode 100644
index e61a677..0000000
--- a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/model/CatchExceptionServlet.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * CatchExceptionServlet.java
- *
- * Created on March 19, 2007, 2:14 PM
- */
-
-package com.sun.faces.systest.model;
-
-import java.io.IOException;
-import java.util.Map;
-import javax.faces.context.FacesContext;
-import javax.faces.webapp.FacesServlet;
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-
-
-/**
- *
- * @author edburns
- * @version
- */
-public class CatchExceptionServlet implements Servlet {
-    
-    private FacesServlet wrapped = null;
-    
-    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
-        try {
-            wrapped.service(servletRequest, servletResponse);
-            
-        }
-        catch (ServletException e) {
-            HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
-            httpRequest.setAttribute("exceptionClass", e.getClass().getName());
-            httpRequest.setAttribute("rootCause", e.getCause().getClass().getName());
-            httpRequest.setAttribute("exceptionMessage", e.getMessage());
-            throw e;
-        }
-    }
-
-    public void init(ServletConfig servletConfig) throws ServletException {
-        if (null == wrapped) {
-            wrapped = new FacesServlet();
-        }
-        wrapped.init(servletConfig);
-    }
-
-    public void destroy() {
-        wrapped.destroy();
-    }
-
-    public String getServletInfo() {
-        return ((wrapped != null) ? wrapped.getServletInfo() : null);
-    }
-
-    public ServletConfig getServletConfig() {
-        return ((wrapped != null) ? wrapped.getServletConfig() : null);
-    }
-    
-
-}
diff --git a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/model/ThrowWrappedExceptionOnPropertyGet.java b/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/model/ThrowWrappedExceptionOnPropertyGet.java
deleted file mode 100644
index 896bc8e..0000000
--- a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/src/java/com/sun/faces/systest/model/ThrowWrappedExceptionOnPropertyGet.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.model;
-
-public class ThrowWrappedExceptionOnPropertyGet {
-    
-    private String stringProperty = "This is a String property";
-
-    public String getStringProperty() {
-	if (null != stringProperty) {
-	    throw new IllegalStateException(new IllegalArgumentException(new UnsupportedOperationException()));
-	}
-        return (this.stringProperty);
-    }
-
-
-    public void setStringProperty(String stringProperty) {
-        this.stringProperty = stringProperty;
-    }
-
-
-}
diff --git a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 0cf7241..0000000
--- a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- =========== FULL CONFIGURATION FILE ================================== -->
-
-<faces-config version="1.2" 
-    xmlns="http://java.sun.com/xml/ns/javaee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
-    
-    <managed-bean>
-        <managed-bean-name>bean</managed-bean-name>
-        <managed-bean-class>com.sun.faces.systest.model.ThrowWrappedExceptionOnPropertyGet</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-    </managed-bean>
-    
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/web.xml
deleted file mode 100644
index b94a61a..0000000
--- a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet>
-        <servlet-name>WrappedServlet</servlet-name>
-        <servlet-class>com.sun.faces.systest.model.CatchExceptionServlet</servlet-class>
-        <load-on-startup>2</load-on-startup>
-        </servlet>
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>*.jsf</url-pattern>
-    </servlet-mapping>
-    
-    <servlet-mapping>
-        <servlet-name>WrappedServlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-    <error-page>
-        <error-code>500</error-code>
-        <location>/error.jsp</location>
-    </error-page>    
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/error.jsp b/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/error.jsp
deleted file mode 100644
index fe74500..0000000
--- a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/error.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<head>
-    <title>Exception Caught</title>
-</head>
-<body>
-
-  <p>Exception class: ${requestScope.exceptionClass}</p>
-  <p>Root cause: ${requestScope.rootCause}</p>
-  <p>Exception message: ${requestScope.exceptionMessage}</p>
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/test.jsp b/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/test.jsp
deleted file mode 100644
index 98acfad..0000000
--- a/jsf-ri/systest-per-webapp/never-unwrap-exceptions/web/test.jsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:outputText id="viewHandler" value="#{bean.stringProperty}" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/property-resolver-jsp/src/java/com/sun/faces/systest/PropertyResolverJspTestCase.java b/jsf-ri/systest-per-webapp/property-resolver-jsp/src/java/com/sun/faces/systest/PropertyResolverJspTestCase.java
deleted file mode 100644
index 775b537..0000000
--- a/jsf-ri/systest-per-webapp/property-resolver-jsp/src/java/com/sun/faces/systest/PropertyResolverJspTestCase.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>If a custom PropertyResolver is added, ensure the
- * JSP layer still works.</p>
- */
-
-public class PropertyResolverJspTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public PropertyResolverJspTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(PropertyResolverJspTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     * <p>Verify that selectOne conversion has successfully occurred.</p>
-     */
-
-    public void testConverterPropertyEditor() throws Exception {
-
-        HtmlPage page = getPage("/faces/Test.jsp");
-        assertTrue(page.asText().contains("resolved!"));
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/property-resolver-jsp/src/java/com/sun/faces/systest/RegisteredPropertyResolver.java b/jsf-ri/systest-per-webapp/property-resolver-jsp/src/java/com/sun/faces/systest/RegisteredPropertyResolver.java
deleted file mode 100644
index fedb8dc..0000000
--- a/jsf-ri/systest-per-webapp/property-resolver-jsp/src/java/com/sun/faces/systest/RegisteredPropertyResolver.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-
-
-public class RegisteredPropertyResolver extends PropertyResolver { 
-
-     private PropertyResolver delegate;
-
-    public RegisteredPropertyResolver(PropertyResolver delegate) {
-        this.delegate = delegate;
-    }
-
-    public Object getValue(Object object, Object object1) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".getValue(Object,Object) called");
-        return delegate.getValue(object, object1);
-    }
-
-    public Object getValue(Object object, int i) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".getValue(Object,int) called");
-        return delegate.getValue(object, i);
-    }
-
-    public void setValue(Object object, Object object1, Object object2) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".setValue(Object,Object) called");
-        delegate.setValue(object, object1, object2);
-    }
-
-    public void setValue(Object object, int i, Object object1) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".setValue(Object,int) called");
-        delegate.setValue(object, i, object1);
-    }
-
-    public boolean isReadOnly(Object object, Object object1) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".isReadOnly(Object,Object) called");
-        return delegate.isReadOnly(object, object1);
-    }
-
-    public boolean isReadOnly(Object object, int i) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".isReadOnly(Object,int) called");
-        return delegate.isReadOnly(object, i);
-    }
-
-    public Class getType(Object object, Object object1) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".getType(Object,Object) called");
-        return delegate.getType(object, object1);
-    }
-
-    public Class getType(Object object, int i) throws EvaluationException, PropertyNotFoundException {
-        System.out.println(this.getClass().getName() + ".getValue(Object,int) called");
-        return delegate.getType(object, i);
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/property-resolver-jsp/web/Test.jsp b/jsf-ri/systest-per-webapp/property-resolver-jsp/web/Test.jsp
deleted file mode 100644
index 6115eb5..0000000
--- a/jsf-ri/systest-per-webapp/property-resolver-jsp/web/Test.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-
-
-<html>
-  <head><title>Simple jsp page</title></head>
-  <body>
-  <%
-      pageContext.setAttribute("resolved", "resolved!", PageContext.REQUEST_SCOPE);
-  %>
-  <p>${requestScope.resolved}</p>
-  </body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/property-resolver-jsp/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/property-resolver-jsp/web/WEB-INF/faces-config.xml
deleted file mode 100644
index dfd71e6..0000000
--- a/jsf-ri/systest-per-webapp/property-resolver-jsp/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-   <application>
-       <property-resolver>
-           com.sun.faces.systest.RegisteredPropertyResolver
-       </property-resolver>
-   </application>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/property-resolver-jsp/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/property-resolver-jsp/web/WEB-INF/web.xml
deleted file mode 100644
index a33e94d..0000000
--- a/jsf-ri/systest-per-webapp/property-resolver-jsp/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-        Validate custom PropertyResolvers don't break JSP property resolution
-    </description>
-    <display-name>JSF Systests</display-name>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewApplication.java b/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewApplication.java
deleted file mode 100644
index d5f75c0..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewApplication.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import java.util.Iterator;
-import java.util.Collection;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import javax.faces.FacesException;
-import javax.faces.application.*;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.validator.Validator;
-
-import javax.el.ELContextListener;
-import javax.el.ELException;
-import javax.el.ELResolver;
-
-
-public class NewApplication extends Application {
-    
-    private Application oldApp = null;
-
-    public NewApplication(Application oldApp) {
-	this.oldApp = oldApp;
-    }
-
-    public ActionListener getActionListener() {
-	return oldApp.getActionListener();
-    }
-
-    @Override
-    public ProjectStage getProjectStage() {
-        return oldApp.getProjectStage();
-    }
-
-    @Override
-    public void publishEvent(FacesContext ctx,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Object source) {
-        oldApp.publishEvent(ctx, systemEventClass, source);
-    }
-
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 Class<?> sourceClass,
-                                 SystemEventListener listener) {
-        oldApp.subscribeToEvent(systemEventClass, sourceClass, listener);
-    }
-
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 SystemEventListener listener) {
-        oldApp.subscribeToEvent(systemEventClass, listener);
-    }
-
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     Class<?> sourceClass,
-                                     SystemEventListener listener) {
-        oldApp.unsubscribeFromEvent(systemEventClass,
-                                    sourceClass,
-                                    listener);
-    }
-
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     SystemEventListener listener) {
-        oldApp.unsubscribeFromEvent(systemEventClass, listener);
-    }
-
-    public void setActionListener(ActionListener listener) {
-	oldApp.setActionListener(listener);
-    }
-
-
-    public Locale getDefaultLocale() {
-	return oldApp.getDefaultLocale();
-    }
-
-
-    public void setDefaultLocale(Locale locale) {
-	oldApp.setDefaultLocale(locale);
-    }
-
-
-    public String getDefaultRenderKitId() {
-	return oldApp.getDefaultRenderKitId();
-    }
-
-
-    public void setDefaultRenderKitId(String renderKitId) {
-	oldApp.setDefaultRenderKitId(renderKitId);
-    }
-	
-    public String getMessageBundle() {
-	return oldApp.getMessageBundle();
-    }
-
-
-    public void setMessageBundle(String bundle) {
-	oldApp.setMessageBundle(bundle);
-    }
-
-
-    public NavigationHandler getNavigationHandler() {
-	return oldApp.getNavigationHandler();
-    }
-
-    public void setResourceHandler(ResourceHandler rh) {
-       oldApp.setResourceHandler(rh);
-    }
-   
-    public ResourceHandler getResourceHandler() {
-       return oldApp.getResourceHandler();
-    }
-
-    public void setNavigationHandler(NavigationHandler handler) {
-	oldApp.setNavigationHandler(handler);
-    }
-
-
-    public PropertyResolver getPropertyResolver() {
-	return oldApp.getPropertyResolver();
-    }
-
-
-    public void setPropertyResolver(PropertyResolver resolver) {
-	oldApp.setPropertyResolver(resolver);
-    }
-
-
-    public VariableResolver getVariableResolver() {
-	return oldApp.getVariableResolver();
-    }
-
-
-    public void setVariableResolver(VariableResolver resolver) {
-	oldApp.setVariableResolver(resolver);
-    }
-
-
-    public ViewHandler getViewHandler() {
-	return oldApp.getViewHandler();
-    }
-
-
-    public void setViewHandler(ViewHandler handler) {
-	oldApp.setViewHandler(handler);
-    }
-
-    public StateManager getStateManager() {
-	return oldApp.getStateManager();
-    }
-
-
-    public void setStateManager(StateManager manager) {
-	oldApp.setStateManager(manager);
-    }
-
-    public ResourceBundle getResourceBundle(FacesContext ctx, String name) {
-        return oldApp.getResourceBundle(ctx, name);
-    }
-
-
-    // ------------------------------------------------------- Object Factories
-
-
-    public void addComponent(String componentType,
-			     String componentClass) {
-	oldApp.addComponent(componentType, componentClass);
-    }
-
-
-    public UIComponent createComponent(String componentType)
-        throws FacesException {
-	return oldApp.createComponent(componentType);
-    }
-
-
-    public UIComponent createComponent(ValueBinding componentBinding,
-                                                FacesContext context,
-                                                String componentType)
-	throws FacesException {
-	return oldApp.createComponent(componentBinding, context, 
-				      componentType);
-    }
-
-
-    public Iterator getComponentTypes() {
-	return oldApp.getComponentTypes();
-    }
-
-
-    public void addConverter(String converterId, 
-			     String converterClass) {
-	oldApp.addConverter(converterId, converterClass);
-    }
-
-
-    public void addConverter(Class targetClass,
-			     String converterClass) {
-	oldApp.addConverter(targetClass, converterClass);
-    }
-
-
-    public Converter createConverter(String converterId) {
-	return oldApp.createConverter(converterId);
-    }
-
-
-    public Converter createConverter(Class targetClass) {
-	return oldApp.createConverter(targetClass);
-    }
-
-
-    public Iterator getConverterIds() {
-	return oldApp.getConverterIds();
-    }
-
-    
-    public Iterator getConverterTypes() {
-	return oldApp.getConverterTypes();
-    }
-
-
-    public MethodBinding createMethodBinding(String ref,
-                                                      Class params[])
-        throws ReferenceSyntaxException {
-	return oldApp.createMethodBinding(ref, params);
-    }
-
-
-    public Iterator getSupportedLocales() {
-	return oldApp.getSupportedLocales();
-    }
-
-
-    public void setSupportedLocales(Collection locales) {
-	oldApp.setSupportedLocales(locales);
-    }
-
-
-    public void addValidator(String validatorId, 
-			     String validatorClass) {
-	oldApp.addValidator(validatorId, validatorClass);
-    }
-
-
-    public Validator createValidator(String validatorId)
-        throws FacesException {
-	return oldApp.createValidator(validatorId);
-    }
-
-
-    public Iterator getValidatorIds() {
-	return oldApp.getValidatorIds();
-    }
-
-
-    public ValueBinding createValueBinding(String ref)
-        throws ReferenceSyntaxException {
-	return oldApp.createValueBinding(ref);
-    }
-    
-    public ELContextListener [] getELContextListeners() {
-        return oldApp.getELContextListeners();
-    }
-    
-    public void addELContextListener(ELContextListener listener) {
-        oldApp.addELContextListener(listener);
-    } 
-    
-    public void removeELContextListener(ELContextListener listener) {
-        oldApp.removeELContextListener(listener);
-    }
-    
-     public Object evaluateExpressionGet(FacesContext context, 
-        String expression, Class expectedType) throws ELException {
-        return oldApp.evaluateExpressionGet(context, expression, expectedType);
-    }
-    
-     public javax.el.ExpressionFactory getExpressionFactory() {
-        return oldApp.getExpressionFactory();
-     }
-     
-    public UIComponent createComponent(javax.el.ValueExpression componentExpression,
-        FacesContext context, String componentType) throws FacesException {
-        return oldApp.createComponent(componentExpression, context, componentType);
-    } 
-    
-    public void addELResolver(ELResolver resolver) {
-       oldApp.addELResolver(resolver);
-    }
-    
-    public ELResolver getELResolver() {
-        return oldApp.getELResolver();
-    }
-
-    public void addBehavior(String behaviorId, String behaviorClass) {
-        oldApp.addBehavior(behaviorId, behaviorClass);
-    }
-
-    public Behavior createBehavior(String behaviorId) throws FacesException {
-        return oldApp.createBehavior(behaviorId);
-    }
-
-    public Iterator<String> getBehaviorIds() {
-        return oldApp.getBehaviorIds();
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewApplicationFactory.java b/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewApplicationFactory.java
deleted file mode 100644
index 92264b2..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewApplicationFactory.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.Application;
-
-public class NewApplicationFactory extends ApplicationFactory {
-    
-    private ApplicationFactory oldFactory = null;
-
-    private NewApplication newApp = null;
-    
-    public NewApplicationFactory(ApplicationFactory yourOldFactory) {
-	oldFactory = yourOldFactory;
-    }
-    
-    public Application getApplication() {
-	if (null == newApp) {
-	    newApp = new NewApplication(oldFactory.getApplication());
-	}
-	return newApp;
-    }
-    
-    public void setApplication(Application application) {
-	newApp = (NewApplication) application;
-    }
-
-    public String toString() {
-	return "NewApplicationFactory";
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewStateManager.java b/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewStateManager.java
deleted file mode 100644
index 1a75b40..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewStateManager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import javax.faces.application.StateManager;
-import javax.faces.application.StateManagerWrapper;
-
-public class NewStateManager extends StateManagerWrapper {
-
-    private StateManager oldStateManager = null;
-
-    public NewStateManager(StateManager oldStateManager) {
-	this.oldStateManager = oldStateManager;
-    }
-
-    public StateManager getWrapped() {
-	return oldStateManager;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewViewHandler.java b/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewViewHandler.java
deleted file mode 100644
index bace6b1..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/NewViewHandler.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import javax.faces.application.ViewHandler;
-import javax.faces.application.ViewHandlerWrapper;
-
-public class NewViewHandler extends ViewHandlerWrapper {
-
-    private ViewHandler oldViewHandler = null;
-
-    public NewViewHandler(ViewHandler oldViewHandler) {
-	this.oldViewHandler = oldViewHandler;
-    }
-
-    public ViewHandler getWrapped() {
-	return oldViewHandler;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/ReplaceApplicationBean.java b/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/ReplaceApplicationBean.java
deleted file mode 100644
index 7004ebf..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/ReplaceApplicationBean.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import javax.faces.context.FacesContext;
-
-public class ReplaceApplicationBean {
-
-    public String getStateManagerClass() {
-	FacesContext context = FacesContext.getCurrentInstance();
-	return context.getApplication().getStateManager().toString();
-    }
-
-    public String getViewHandlerClass() {
-	FacesContext context = FacesContext.getCurrentInstance();
-	return context.getApplication().getViewHandler().toString();
-    }
-
-    public String getApplicationClass() {
-	FacesContext context = FacesContext.getCurrentInstance();
-	return context.getApplication().toString();
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/ReplaceApplicationTestCase.java b/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/ReplaceApplicationTestCase.java
deleted file mode 100644
index bb3e979..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/src/java/com/sun/faces/systest/ReplaceApplicationTestCase.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class ReplaceApplicationTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ReplaceApplicationTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ReplaceApplicationTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-
-    public void testReplaceApplication() throws Exception {
-	HtmlPage page = getPage("/faces/test.jsp");
-	assertTrue(-1 != page.asText().indexOf("New String Value"));
-	assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.NewStateManager"));
-	assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.NewViewHandler"));
-	assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.NewApplication"));
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-application/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/replace-application/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 63aeaa1..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <application>
-    <view-handler>com.sun.faces.systest.NewViewHandler</view-handler>
-    <state-manager>com.sun.faces.systest.NewStateManager</state-manager>
-  </application>
-
-  <factory>
-    <application-factory>com.sun.faces.systest.NewApplicationFactory</application-factory>
-  </factory>
-
-  <!-- Managed Bean #1, No Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test1</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-
-  <!-- Managed Bean #2, Primitive Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test2</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>booleanProperty</property-name>
-      <value>false</value>
-    </managed-property>
-    <managed-property>
-      <property-name>byteProperty</property-name>
-      <value>21</value>
-    </managed-property>
-    <managed-property>
-      <property-name>doubleProperty</property-name>
-      <value>321.54</value>
-    </managed-property>
-    <managed-property>
-      <property-name>floatProperty</property-name>
-      <value>21.43</value>
-    </managed-property>
-    <managed-property>
-      <property-name>intProperty</property-name>
-      <value>321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>longProperty</property-name>
-      <value>54321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>shortProperty</property-name>
-      <value>4321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>New String Value</value>
-    </managed-property>
-  </managed-bean>
-
-  <!-- Managed Bean #3, No Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test3</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>replaceApplication</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.ReplaceApplicationBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/replace-application/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/replace-application/web/WEB-INF/web.xml
deleted file mode 100644
index f8c0d8e..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/replace-application/web/test.jsp b/jsf-ri/systest-per-webapp/replace-application/web/test.jsp
deleted file mode 100644
index 0d8e923..0000000
--- a/jsf-ri/systest-per-webapp/replace-application/web/test.jsp
+++ /dev/null
@@ -1,93 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:outputText value="#{test2.stringProperty}" />
-
-    <h:commandButton value="submit" /> <br />
-
-    <h:outputText value="#{replaceApplication.stateManagerClass}" /> <br />
-
-    <h:outputText value="#{replaceApplication.viewHandlerClass}" /> <br />
-
-    <h:outputText value="#{replaceApplication.applicationClass}" /> <br />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/LifecycleFactoryImpl.java b/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/LifecycleFactoryImpl.java
deleted file mode 100644
index b0c7d2d..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/LifecycleFactoryImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import javax.faces.FactoryFinder;
-import javax.faces.FacesException;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-
-import java.util.Iterator;
-
-public class LifecycleFactoryImpl extends LifecycleFactory {
-
-    private LifecycleFactory previous = null;
-
-    private Lifecycle newLifecycle = null;
-
-    public LifecycleFactoryImpl(LifecycleFactory previous) {
-	this.previous = previous;
-	try {
-	    newLifecycle = new NewLifecycle("com.sun.faces.systest.NewLifecycle");
-	    this.previous.addLifecycle("com.sun.faces.systest.NewLifecycle",
-				       newLifecycle);
-            newLifecycle = new NewLifecycle("com.sun.faces.systest.AlternateLifecycle");
-            this.previous.addLifecycle("com.sun.faces.systest.AlternateLifecycle",
-				       newLifecycle);
-	}
-	catch (Throwable e) {
-	    throw new FacesException(e);
-	}
-    }
-
-    public void addLifecycle(String lifecycleId,
-			     Lifecycle lifecycle) {
-	previous.addLifecycle(lifecycleId, lifecycle);
-    }
-
-    public Lifecycle getLifecycle(String lifecycleId) {
-	return previous.getLifecycle(lifecycleId);
-    }
-
-
-    public Iterator getLifecycleIds() {
-	return previous.getLifecycleIds();
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/NewLifecycle.java b/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/NewLifecycle.java
deleted file mode 100644
index 1b1adf2..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/NewLifecycle.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.sun.faces.lifecycle.LifecycleImpl;
-
-public class NewLifecycle extends LifecycleImpl {
-    
-    private String lifecycleId = null;
-
-    public NewLifecycle(String lifecycleId) {
-        this.lifecycleId = lifecycleId;
-    }
-    
-    public String getLifecycleId() {
-        return lifecycleId;
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/ReplaceLifecycleTestCase.java b/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/ReplaceLifecycleTestCase.java
deleted file mode 100644
index 0de32ef..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/ReplaceLifecycleTestCase.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Replace the LifecycleFactory with an impl that knows about a new
- * LifecycleId that is passed to the app as a ServletContext init
- * parameter.  Make sure that a phaseListener still gets called with a
- * replaced lifecycle id.</p>
- */
-
-public class ReplaceLifecycleTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ReplaceLifecycleTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ReplaceLifecycleTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-
-    public void testReplaceLifecycle() throws Exception {
-	HtmlPage page = getPage("/faces/test.jsp");
-	assertTrue(-1 != page.asText().indexOf("beforePhase"));
-	
-    }
-
-    public void testAlternateLifecycle() throws Exception {
-	HtmlPage page = getPage("/alternate/test2.jsp");
-	assertTrue(-1 != page.asText().indexOf("beforePhase"));
-	assertTrue(-1 != page.asText().indexOf("AlternateLifecycle"));	
-	page = getPage("/faces/test2.jsp");
-	assertTrue(-1 != page.asText().indexOf("beforePhase"));
-	assertTrue(-1 != page.asText().indexOf("NewLifecycle"));	
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/SimplePhaseListener.java b/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/SimplePhaseListener.java
deleted file mode 100644
index 91d3598..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/src/java/com/sun/faces/systest/SimplePhaseListener.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest;
-
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-
-public class SimplePhaseListener implements PhaseListener {
-
-    public SimplePhaseListener() {
-    }
-
-
-    public void afterPhase(PhaseEvent event) {
-	event.getFacesContext().getExternalContext().getRequestMap().put("afterPhase",
-									 "afterPhase");
-    }
-
-
-    public void beforePhase(PhaseEvent event) {
-	event.getFacesContext().getExternalContext().getRequestMap().put("beforePhase",
-									 "beforePhase");
-	event.getFacesContext().getExternalContext().getRequestMap().put("lifecycleImpl",
-									 event.getSource());
-    }
-
-
-    public PhaseId getPhaseId() {
-        return PhaseId.RENDER_RESPONSE;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/replace-lifecycle/web/WEB-INF/faces-config.xml
deleted file mode 100644
index f20c488..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-   <factory>
-      <lifecycle-factory>com.sun.faces.systest.LifecycleFactoryImpl</lifecycle-factory>
-   </factory>
-
-   <lifecycle>
-     <phase-listener>com.sun.faces.systest.SimplePhaseListener</phase-listener>
-   </lifecycle>
-
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/replace-lifecycle/web/WEB-INF/web.xml
deleted file mode 100644
index 5ecffec..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd">
-  <description>
-       JSF Systests
-    </description>
-  <display-name>JSF Systests</display-name>
-  <!-- Validate the Application Configuration Resources -->
-  <context-param>
-    <param-name>com.sun.faces.validateXml</param-name>
-    <param-value>true</param-value>
-  </context-param>
-  <context-param>
-    <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-    <param-value>true</param-value>
-  </context-param>
-  <context-param>
-    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-    <param-value>client</param-value>
-  </context-param>
-  <context-param>
-    <param-name>javax.faces.LIFECYCLE_ID</param-name>
-    <param-value>com.sun.faces.systest.NewLifecycle</param-value>
-  </context-param>
-   <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup> 1 </load-on-startup>
-  </servlet>
-  <!-- Faces Servlet Mapping -->
-  <servlet>
-    <servlet-name>Alternate FacesServlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <init-param>
-      <param-name>javax.faces.LIFECYCLE_ID</param-name>
-      <param-value>com.sun.faces.systest.AlternateLifecycle</param-value>
-    </init-param>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>Alternate FacesServlet</servlet-name>
-    <url-pattern>/alternate/*</url-pattern>
-  </servlet-mapping>
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/web/test.jsp b/jsf-ri/systest-per-webapp/replace-lifecycle/web/test.jsp
deleted file mode 100644
index ed63e52..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/web/test.jsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:outputText value="#{beforePhase}" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/replace-lifecycle/web/test2.jsp b/jsf-ri/systest-per-webapp/replace-lifecycle/web/test2.jsp
deleted file mode 100644
index e8d2a47..0000000
--- a/jsf-ri/systest-per-webapp/replace-lifecycle/web/test2.jsp
+++ /dev/null
@@ -1,86 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:outputText value="#{beforePhase}" /> <p />
-    <h:outputText value="#{lifecycleImpl.lifecycleId}" /> <p />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewApplication.java b/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewApplication.java
deleted file mode 100644
index d77f36c..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewApplication.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest;
-
-
-import javax.el.ELContextListener;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.ExpressionFactory;
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationWrapper;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.ProjectStage;
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.validator.Validator;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-public class NewApplication extends ApplicationWrapper {
-
-
-    private Application oldApp = null;
-
-    public Application getWrapped() {
-        return oldApp;
-    }
-
-
-    public NewApplication(Application oldApp) {
-
-        this.oldApp = oldApp;
-
-    }
-
-
-    public ActionListener getActionListener() {
-
-        return oldApp.getActionListener();
-
-    }
-
-    @Override
-    public ProjectStage getProjectStage() {
-        return oldApp.getProjectStage();
-    }
-
-    @Override
-    public void publishEvent(FacesContext ctx,
-                             Class<? extends SystemEvent> systemEventClass,
-                             Object source) {
-        oldApp.publishEvent(ctx, systemEventClass, source);
-    }
-
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 Class<?> sourceClass,
-                                 SystemEventListener listener) {
-        oldApp.subscribeToEvent(systemEventClass, sourceClass, listener);
-    }
-
-    @Override
-    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,
-                                 SystemEventListener listener) {
-        oldApp.subscribeToEvent(systemEventClass, listener);
-    }
-
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     Class<?> sourceClass,
-                                     SystemEventListener listener) {
-        oldApp.unsubscribeFromEvent(systemEventClass,
-                                    sourceClass,
-                                    listener);
-    }
-
-    @Override
-    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,
-                                     SystemEventListener listener) {
-        oldApp.unsubscribeFromEvent(systemEventClass, listener);
-    }
-
-
-    public void setActionListener(ActionListener listener) {
-
-        oldApp.setActionListener(listener);
-
-    }
-
-
-    public Locale getDefaultLocale() {
-
-        return oldApp.getDefaultLocale();
-
-    }
-
-
-    public void setDefaultLocale(Locale locale) {
-
-        oldApp.setDefaultLocale(locale);
-
-    }
-
-
-    public String getDefaultRenderKitId() {
-
-        return oldApp.getDefaultRenderKitId();
-
-    }
-
-
-    public void setDefaultRenderKitId(String renderKitId) {
-
-        oldApp.setDefaultRenderKitId(renderKitId);
-
-    }
-
-
-    public String getMessageBundle() {
-
-        return oldApp.getMessageBundle();
-
-    }
-
-
-    public void setMessageBundle(String bundle) {
-
-        oldApp.setMessageBundle(bundle);
-
-    }
-
-
-    public NavigationHandler getNavigationHandler() {
-
-        return oldApp.getNavigationHandler();
-
-    }
-
-
-    public void setNavigationHandler(NavigationHandler handler) {
-
-        oldApp.setNavigationHandler(handler);
-
-    }
-
-
-    public void setResourceHandler(ResourceHandler rh) {
-        oldApp.setResourceHandler(rh);
-    }
-
-
-    public ResourceHandler getResourceHandler() {
-        return oldApp.getResourceHandler();
-    }
-
-
-    public PropertyResolver getPropertyResolver() {
-
-        return oldApp.getPropertyResolver();
-
-    }
-
-
-    public void setPropertyResolver(PropertyResolver resolver) {
-
-        oldApp.setPropertyResolver(resolver);
-
-    }
-
-    public ELResolver getELResolver() {
-
-        return oldApp.getELResolver();
-
-    }
-
-    public ExpressionFactory getExpressionFactory() {
-        return oldApp.getExpressionFactory();
-    }
-
-    public void addELContextListener(ELContextListener listener) {
-        oldApp.addELContextListener(listener);
-    }
-
-    public void removeELContextListener(ELContextListener listener) {
-        oldApp.removeELContextListener(listener);
-    }
-
-    public void addELResolver(ELResolver resolver) {
-        oldApp.addELResolver(resolver);
-    }
-
-    public ELContextListener[] getELContextListeners() {
-        return oldApp.getELContextListeners();
-    }
-
-    public Object evaluateExpressionGet(FacesContext context,
-                                        String expression,
-                                        Class expectedType) throws ELException {
-        return oldApp.evaluateExpressionGet(context, expression, expectedType);
-    }
-
-    public VariableResolver getVariableResolver() {
-
-        return oldApp.getVariableResolver();
-
-    }
-
-
-    public void setVariableResolver(VariableResolver resolver) {
-
-        oldApp.setVariableResolver(resolver);
-
-    }
-
-
-    public ViewHandler getViewHandler() {
-
-        return oldApp.getViewHandler();
-
-    }
-
-
-    public void setViewHandler(ViewHandler handler) {
-
-        oldApp.setViewHandler(handler);
-
-    }
-
-
-    public StateManager getStateManager() {
-
-        return oldApp.getStateManager();
-
-    }
-
-
-    public void setStateManager(StateManager manager) {
-
-        oldApp.setStateManager(manager);
-
-    }
-
-
-    public ResourceBundle getResourceBundle(FacesContext ctx, String name) {
-
-        return oldApp.getResourceBundle(ctx, name);
-
-    }
-
-
-    // ------------------------------------------------------- Object Factories
-
-
-    public void addComponent(String componentType,
-
-                             String componentClass) {
-
-        oldApp.addComponent(componentType, componentClass);
-
-    }
-
-
-    public UIComponent createComponent(String componentType)
-
-          throws FacesException {
-
-        return oldApp.createComponent(componentType);
-
-    }
-
-
-    public UIComponent createComponent(ValueBinding componentBinding,
-
-                                       FacesContext context,
-
-                                       String componentType)
-
-          throws FacesException {
-
-        return oldApp.createComponent(componentBinding, context,
-
-                                      componentType);
-
-    }
-
-
-    public Iterator getComponentTypes() {
-
-        return oldApp.getComponentTypes();
-
-    }
-
-
-    public void addConverter(String converterId,
-
-                             String converterClass) {
-
-        oldApp.addConverter(converterId, converterClass);
-
-    }
-
-
-    public void addConverter(Class targetClass,
-
-                             String converterClass) {
-
-        oldApp.addConverter(targetClass, converterClass);
-
-    }
-
-
-    public Converter createConverter(String converterId) {
-
-        return oldApp.createConverter(converterId);
-
-    }
-
-
-    public Converter createConverter(Class targetClass) {
-
-        return oldApp.createConverter(targetClass);
-
-    }
-
-
-    public Iterator getConverterIds() {
-
-        return oldApp.getConverterIds();
-
-    }
-
-
-    public Iterator getConverterTypes() {
-
-        return oldApp.getConverterTypes();
-
-    }
-
-
-    public MethodBinding createMethodBinding(String ref,
-
-                                             Class params[])
-
-          throws ReferenceSyntaxException {
-
-        return oldApp.createMethodBinding(ref, params);
-
-    }
-
-
-    public Iterator getSupportedLocales() {
-
-        return oldApp.getSupportedLocales();
-
-    }
-
-
-    public void setSupportedLocales(Collection locales) {
-
-        oldApp.setSupportedLocales(locales);
-
-    }
-
-
-    public void addValidator(String validatorId,
-
-                             String validatorClass) {
-
-        oldApp.addValidator(validatorId, validatorClass);
-
-    }
-
-
-    public Validator createValidator(String validatorId)
-
-          throws FacesException {
-
-        return oldApp.createValidator(validatorId);
-
-    }
-
-
-    public Iterator getValidatorIds() {
-
-        return oldApp.getValidatorIds();
-
-    }
-
-
-    public ValueBinding createValueBinding(String ref)
-
-          throws ReferenceSyntaxException {
-
-        return oldApp.createValueBinding(ref);
-
-    }
-
-
-}
-
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewApplicationFactory.java b/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewApplicationFactory.java
deleted file mode 100644
index 99c1e2a..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewApplicationFactory.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.Application;
-
-public class NewApplicationFactory extends ApplicationFactory {
-    
-    private ApplicationFactory oldFactory = null;
-
-    private NewApplication newApp = null;
-    
-    public NewApplicationFactory(ApplicationFactory yourOldFactory) {
-	oldFactory = yourOldFactory;
-    }
-    
-    public Application getApplication() {
-	if (null == newApp) {
-	    newApp = new NewApplication(oldFactory.getApplication());
-	}
-	return newApp;
-    }
-    
-    public void setApplication(Application application) {
-	newApp = (NewApplication) application;
-    }
-
-    public String toString() {
-	return "NewApplicationFactory";
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewStateManager.java b/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewStateManager.java
deleted file mode 100644
index 2326219..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewStateManager.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import javax.faces.application.StateManager;
-import javax.faces.application.StateManagerWrapper;
-
-import javax.faces.FactoryFinder;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.RenderKit;
-import javax.faces.render.ResponseStateManager;
-import javax.faces.component.UIViewRoot;
-
-import javax.faces.context.FacesContext;
-
-import java.io.IOException;
-
-public class NewStateManager extends StateManagerWrapper {
-
-    private StateManager oldStateManager = null;
-
-    public NewStateManager(StateManager oldStateManager) {
-	this.oldStateManager = oldStateManager;
-    }
-
-    public StateManager getWrapped() {
-	return oldStateManager;
-    }
-
-    /**
-     * <p>Just save the view in the session.</p>
-     */
-
-    public Object saveView(FacesContext context) {    
-        return oldStateManager.saveView(context);
-    }
-
-    /**
-     * <p>Override superclass processing and call the new version of
-     * <code>writeState()</code> that takes <code>Object</code>.</p>
-     */
-	
-    public void writeState(FacesContext context, Object state) throws IOException {
-	getResponseStateManager(context).writeState(context, state);
-    }
-
-
-    public UIViewRoot restoreView(FacesContext context, String viewId,
-                                  String renderKitId) {
-	
-        return oldStateManager.restoreView(context, viewId, renderKitId);
-    }
-
-    private ResponseStateManager getResponseStateManager(FacesContext context){
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(context, 
-							    RenderKitFactory.HTML_BASIC_RENDER_KIT);
-	ResponseStateManager responseStateManager = 
-	    renderKit.getResponseStateManager();
-	
-	return responseStateManager;
-    }
-
-    char requestIdSerial = 0;
-
-    private String createUniqueRequestId() {
-	if (requestIdSerial++ == Character.MAX_VALUE) {
-	    requestIdSerial = 0;
-	}
-	return UIViewRoot.UNIQUE_ID_PREFIX + ((int) requestIdSerial);
-    }
-
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewViewHandler.java b/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewViewHandler.java
deleted file mode 100644
index 5232f01..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/NewViewHandler.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import javax.faces.application.ViewHandler;
-import javax.faces.application.ViewHandlerWrapper;
-
-public class NewViewHandler extends ViewHandlerWrapper {
-
-    private ViewHandler oldViewHandler = null;
-
-    public NewViewHandler(ViewHandler oldViewHandler) {
-	this.oldViewHandler = oldViewHandler;
-    }
-
-    public ViewHandler getWrapped() {
-	return oldViewHandler;
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/ReplaceApplicationBean.java b/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/ReplaceApplicationBean.java
deleted file mode 100644
index 7004ebf..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/ReplaceApplicationBean.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import javax.faces.context.FacesContext;
-
-public class ReplaceApplicationBean {
-
-    public String getStateManagerClass() {
-	FacesContext context = FacesContext.getCurrentInstance();
-	return context.getApplication().getStateManager().toString();
-    }
-
-    public String getViewHandlerClass() {
-	FacesContext context = FacesContext.getCurrentInstance();
-	return context.getApplication().getViewHandler().toString();
-    }
-
-    public String getApplicationClass() {
-	FacesContext context = FacesContext.getCurrentInstance();
-	return context.getApplication().toString();
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/ReplaceStateManagerTestCase.java b/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/ReplaceStateManagerTestCase.java
deleted file mode 100644
index 84aa646..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/src/java/com/sun/faces/systest/ReplaceStateManagerTestCase.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class ReplaceStateManagerTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ReplaceStateManagerTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ReplaceStateManagerTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-
-    public void testReplaceStateManager() throws Exception {
-	HtmlPage page = getPage("/faces/test.jsp");
-	assertTrue(-1 != page.asText().indexOf("New String Value"));
-	assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.NewStateManager"));
-	assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.NewViewHandler"));
-	assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.NewApplication"));
-	
-	List list;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	((HtmlTextInput)list.get(0)).setValueAttribute("text from client");
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-	
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	assertEquals("text from client", 
-		     ((HtmlTextInput)list.get(0)).asText());
-	
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/replace-statemanager/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 63aeaa1..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <application>
-    <view-handler>com.sun.faces.systest.NewViewHandler</view-handler>
-    <state-manager>com.sun.faces.systest.NewStateManager</state-manager>
-  </application>
-
-  <factory>
-    <application-factory>com.sun.faces.systest.NewApplicationFactory</application-factory>
-  </factory>
-
-  <!-- Managed Bean #1, No Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test1</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-
-  <!-- Managed Bean #2, Primitive Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test2</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>booleanProperty</property-name>
-      <value>false</value>
-    </managed-property>
-    <managed-property>
-      <property-name>byteProperty</property-name>
-      <value>21</value>
-    </managed-property>
-    <managed-property>
-      <property-name>doubleProperty</property-name>
-      <value>321.54</value>
-    </managed-property>
-    <managed-property>
-      <property-name>floatProperty</property-name>
-      <value>21.43</value>
-    </managed-property>
-    <managed-property>
-      <property-name>intProperty</property-name>
-      <value>321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>longProperty</property-name>
-      <value>54321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>shortProperty</property-name>
-      <value>4321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>New String Value</value>
-    </managed-property>
-  </managed-bean>
-
-  <!-- Managed Bean #3, No Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test3</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>replaceApplication</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.ReplaceApplicationBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/replace-statemanager/web/WEB-INF/web.xml
deleted file mode 100644
index 9a038b9..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/replace-statemanager/web/test.jsp b/jsf-ri/systest-per-webapp/replace-statemanager/web/test.jsp
deleted file mode 100644
index d14d284..0000000
--- a/jsf-ri/systest-per-webapp/replace-statemanager/web/test.jsp
+++ /dev/null
@@ -1,95 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:outputText value="#{test2.stringProperty}" />
-
-    <h:inputText /> <br />
-
-    <h:commandButton value="submit" /> <br />
-
-    <h:outputText value="#{replaceApplication.stateManagerClass}" /> <br />
-
-    <h:outputText value="#{replaceApplication.viewHandlerClass}" /> <br />
-
-    <h:outputText value="#{replaceApplication.applicationClass}" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/Bean.java b/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/Bean.java
deleted file mode 100644
index 94d0481..0000000
--- a/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/Bean.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * Bean.java
- *
- * Created on April 29, 2006, 1:57 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package com.sun.faces.systest;
-
-import com.sun.faces.systest.model.TestBean;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.VariableResolver;
-
-/**
- *
- * @author edburns
- */
-public class Bean {
-    
-    /** Creates a new instance of Bean */
-    public Bean() {
-    }
-    
-    public String callMethodsOnVariableResolver(FacesContext context, 
-            VariableResolver vr) throws EvaluationException {
-        Object result = null;
-        
-        result = vr.resolveVariable(context, "noneBean");
-        
-        if (!(result instanceof TestBean)) {
-            throw new IllegalStateException("Bean not of correct type");
-        }
-        
-        result = vr.resolveVariable(context, "custom");
-        
-        if (!result.equals("custom")) {
-            throw new IllegalStateException("Bean not of correct type");
-        }
-        
-        return "success";
-    }
-    
-    public String getInvokeVariableResolverThruChain() throws EvaluationException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        VariableResolver vr = context.getApplication().getVariableResolver();
-        return callMethodsOnVariableResolver(context, vr);
-    }
-    
-    public String getInvokeVariableResolverDirectly() throws EvaluationException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        VariableResolver vr = (VariableResolver) context.getExternalContext().getApplicationMap().get("newVR");
-        return callMethodsOnVariableResolver(context, vr);
-    }
-    
-    public String getInvokeVariableResolverThruChain1() throws EvaluationException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        VariableResolver vr = context.getApplication().getVariableResolver();
-        Object result = vr.resolveVariable(context, "nonmanaged");
-        if (!(result instanceof TestBean)) {
-            throw new IllegalStateException("Bean not of correct type");
-        }
-        return "success";
-    }
-    
-    public String getInvokeVariableResolverDirectly1() throws EvaluationException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        VariableResolver vr = (VariableResolver) context.getExternalContext().getApplicationMap().get("newVR");
-        Object result = vr.resolveVariable(context, "nonmanaged");
-        if (!(result instanceof TestBean)) {
-            throw new IllegalStateException("Bean not of correct type");
-        }
-        return "success";
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/NewVariableResolver.java b/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/NewVariableResolver.java
deleted file mode 100644
index 546c6d5..0000000
--- a/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/NewVariableResolver.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * NewVariableResolver.java
- *
- * Created on April 29, 2006, 1:50 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package com.sun.faces.systest;
-
-import com.sun.faces.config.ConfigureListener;
-import com.sun.faces.util.Util;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.VariableResolver;
-
-/**
- *
- * @author edburns
- */
-public class NewVariableResolver extends VariableResolver {
-    
-    private VariableResolver original = null;
-    
-    /** Creates a new instance of NewVariableResolver */
-    public NewVariableResolver(VariableResolver original) {
-        this.original = original;
-        
-        FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().put("newVR", this);
-    }
-
-    public Object resolveVariable(FacesContext context, String name) throws EvaluationException {
-        Object result = null;
-        
-        // This expects a plain old bean that is not configured as a Faces
-        // managed bean.  However, an additional check is done to make sure
-        // that is not configured as a managed bean.  So, we've resolved 
-        // the name as a "non" managed bean, but want to do some additional
-        // checks to make sure that name does not also resolve to a 
-        // managed bean. 
-        //  
-        if (name.equals("nonmanaged")) {
-            Object bean = null;
-            Object managedBean = null;             
-            try {
-                Class clazz = Util.loadClass("com.sun.faces.systest.model.TestBean", context);
-                bean = clazz.newInstance();
-            } catch (Exception e) {
-            } 
-            managedBean = original.resolveVariable(context, name); 
-            if (bean == null) {
-                if (managedBean==null) {
-                    return null;
-                } else {
-                    result = managedBean;
-                }
-            } else {
-                result = bean;
-            }
-            return result;
-        }
-
-        if (name.equals("custom")) {
-            result = "custom";
-        }
-        else {
-            result = original.resolveVariable(context, name);
-        }
-        
-        return result;
-    }
-    
-}
diff --git a/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/ReplaceVariableResolverTestCase.java b/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/ReplaceVariableResolverTestCase.java
deleted file mode 100644
index c57585e..0000000
--- a/jsf-ri/systest-per-webapp/replace-variableresolver/src/java/com/sun/faces/systest/ReplaceVariableResolverTestCase.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class ReplaceVariableResolverTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ReplaceVariableResolverTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ReplaceVariableResolverTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-
-    public void testReplaceVariableResolver() throws Exception {
-	HtmlPage page = getPage("/faces/test.jsp");
-	assertTrue(-1 != page.asText().indexOf("Invoking the resolver chain: success."));
-	assertTrue(-1 != page.asText().indexOf("Invoking the resolver directly: success."));
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/replace-variableresolver/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/replace-variableresolver/web/WEB-INF/faces-config.xml
deleted file mode 100644
index c9fe325..0000000
--- a/jsf-ri/systest-per-webapp/replace-variableresolver/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <application>
-    <variable-resolver>com.sun.faces.systest.NewVariableResolver</variable-resolver>
-  </application>
-
-  <managed-bean>
-    <managed-bean-name>noneBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>requestBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.Bean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/replace-variableresolver/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/replace-variableresolver/web/WEB-INF/web.xml
deleted file mode 100644
index 9a038b9..0000000
--- a/jsf-ri/systest-per-webapp/replace-variableresolver/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
-    </context-param>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/replace-variableresolver/web/test.jsp b/jsf-ri/systest-per-webapp/replace-variableresolver/web/test.jsp
deleted file mode 100644
index feff4eb..0000000
--- a/jsf-ri/systest-per-webapp/replace-variableresolver/web/test.jsp
+++ /dev/null
@@ -1,87 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <p>Invoking the resolver chain: <h:outputText value="#{requestBean.invokeVariableResolverThruChain}" />.</p>
-    
-    <p>Invoking the resolver directly: <h:outputText value="#{requestBean.invokeVariableResolverDirectly}" />.</p>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/replace-variableresolver/web/test1.jsp b/jsf-ri/systest-per-webapp/replace-variableresolver/web/test1.jsp
deleted file mode 100644
index 6894845..0000000
--- a/jsf-ri/systest-per-webapp/replace-variableresolver/web/test1.jsp
+++ /dev/null
@@ -1,87 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>
-
-    <p>Invoking the resolver chain: <h:outputText value="#{requestBean.invokeVariableResolverThruChain1}" />.</p>
-    
-    <p>Invoking the resolver directly: <h:outputText value="#{requestBean.invokeVariableResolverDirectly1}" />.</p>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/ResourceLocalePrefixTestCase.java b/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/ResourceLocalePrefixTestCase.java
deleted file mode 100644
index 36ab73a..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/ResourceLocalePrefixTestCase.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlImage;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlScript;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class ResourceLocalePrefixTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ResourceLocalePrefixTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ResourceLocalePrefixTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testLocalePrefixes() throws Exception {
-
-        String[] locales = {"en", "de", "fr", "ja"};
-        WebClient client = new WebClient();
-        HtmlPage page = null;
-        for (String locale : locales) {
-            System.out.println("Testing locale: " + locale);
-            client.addRequestHeader("Accept-Language", locale);
-            page = getPage("/faces/test.jsp", client);
-            assertTrue(page != null);
-            List<HtmlImage> images = new ArrayList<HtmlImage>(2);
-            getAllElementsOfGivenClass(page, images, HtmlImage.class);
-            assertTrue(images.size() == 2);
-            HtmlImage img = images.get(0);
-            assertTrue((
-                  "/jsf-resource-locale-prefix/faces/javax.faces.resource/duke.gif?loc="
-                  + (("ja".equals(locale)
-                      ? "en"
-                      : locale))).equals(img.getSrcAttribute()));
-            img = images.get(1);
-            assertTrue((
-                  "/jsf-resource-locale-prefix/faces/javax.faces.resource/duke.gif?ln=lib&loc="
-                  + (("ja".equals(locale)
-                      ? "en"
-                      : locale))).equals(img.getSrcAttribute()));
-            List<HtmlScript> scripts = new ArrayList<HtmlScript>(1);
-        getAllElementsOfGivenClass(page, scripts, HtmlScript.class);
-        assertTrue(scripts.size() == 1);
-        HtmlScript script = scripts.get(0);
-        // The Ajax external script isn't localized - ensure it gets
-        // rendered in all cases.
-        // This should be true for all non-localized resources
-        assertTrue("/jsf-resource-locale-prefix/faces/javax.faces.resource/jsf.js?ln=javax.faces".equals(script.getSrcAttribute()));
-            System.out.println("Locale, " + locale + ", PASSED");
-        }
-
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages.properties b/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages.properties
deleted file mode 100644
index 3a50ca5..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages.properties
+++ /dev/null
@@ -1 +0,0 @@
-javax.faces.resource.localePrefix=none
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_de.properties b/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_de.properties
deleted file mode 100644
index 3d34b64..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_de.properties
+++ /dev/null
@@ -1 +0,0 @@
-javax.faces.resource.localePrefix=de
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_en.properties b/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_en.properties
deleted file mode 100644
index 91d43c2..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_en.properties
+++ /dev/null
@@ -1 +0,0 @@
-javax.faces.resource.localePrefix=en
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_fr.properties b/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_fr.properties
deleted file mode 100644
index 2ffaecd..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/src/java/com/sun/faces/systest/resource/Messages_fr.properties
+++ /dev/null
@@ -1 +0,0 @@
-javax.faces.resource.localePrefix=fr
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/resource-locale-prefix/web/WEB-INF/faces-config.xml
deleted file mode 100644
index e7d5e34..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">
-
-  <application>
-      <message-bundle>com.sun.faces.systest.resource.Messages</message-bundle>
-      <locale-config>
-          <default-locale>en</default-locale>
-          <supported-locale>en</supported-locale>
-          <supported-locale>de</supported-locale>
-          <supported-locale>fr</supported-locale>
-      </locale-config>
-  </application>
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/resource-locale-prefix/web/WEB-INF/web.xml
deleted file mode 100644
index dace980..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-         version="2.5">
-
-    <description>
-       Systest to validate resource/locale-prefix handling
-    </description>
-    <display-name>resource-locale-prefix</display-name>
-
-    <context-param>
-      <param-name>com.sun.faces.externalizeJavaScript</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/de/duke.gif b/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/de/duke.gif
deleted file mode 100644
index 4409b2e..0000000
Binary files a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/de/duke.gif and /dev/null differ
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/en/duke.gif b/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/en/duke.gif
deleted file mode 100644
index d8441c8..0000000
Binary files a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/en/duke.gif and /dev/null differ
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/fr/duke.gif b/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/fr/duke.gif
deleted file mode 100644
index c900b85..0000000
Binary files a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/resources/fr/duke.gif and /dev/null differ
diff --git a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/test.jsp b/jsf-ri/systest-per-webapp/resource-locale-prefix/web/test.jsp
deleted file mode 100644
index 409495c..0000000
--- a/jsf-ri/systest-per-webapp/resource-locale-prefix/web/test.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head><title>Resource Test</title></head>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<body>
-Non-library: <img src="${resource['duke.gif']}" alt="non-library" border="0"/>
-<br/>
-Library: <img src="${resource['lib:duke.gif']}" alt="library" border="0"/>
-<f:view>
-    <h:form>
-        <h:commandLink value="Click Me"/>
-    </h:form>
-</f:view>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest-per-webapp/string-converter/src/java/com/sun/faces/systest/StringConverter.java b/jsf-ri/systest-per-webapp/string-converter/src/java/com/sun/faces/systest/StringConverter.java
deleted file mode 100644
index fad3484..0000000
--- a/jsf-ri/systest-per-webapp/string-converter/src/java/com/sun/faces/systest/StringConverter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-/**
- *
- * @author edburns
- */
-public class StringConverter implements Converter {
-    
-    /** Creates a new instance of StringConverter */
-    public StringConverter() {
-    }
-    
-    public Object getAsObject(FacesContext context, UIComponent component,
-            String value) {
-        return "String_" + value;
-    }
-
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) {
-        return "String_" + value.toString();
-    }
-
-    
-}
diff --git a/jsf-ri/systest-per-webapp/string-converter/src/java/com/sun/faces/systest/StringConverterTestCase.java b/jsf-ri/systest-per-webapp/string-converter/src/java/com/sun/faces/systest/StringConverterTestCase.java
deleted file mode 100644
index 502f2ab..0000000
--- a/jsf-ri/systest-per-webapp/string-converter/src/java/com/sun/faces/systest/StringConverterTestCase.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-
-public class StringConverterTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public StringConverterTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(StringConverterTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testStringConverter() throws Exception {
-	HtmlPage page = getPage("/faces/index.jsp");
-	List list;
-
-	HtmlTextInput input = null;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlTextInput.class); 
-	((HtmlTextInput)list.get(0)).setValueAttribute("newString");
-
-	HtmlSubmitInput button = null;
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-
-	assertTrue(-1 != page.asText().indexOf("String_newString"));
-
-	list = getAllElementsOfGivenClass(page, null, 
-					  HtmlSubmitInput.class); 
-	button = (HtmlSubmitInput) list.get(0);
-	page = (HtmlPage) button.click();
-
-	assertTrue(-1 != page.asText().indexOf("String_String_newString"));
-
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/string-converter/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/string-converter/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 2b149cd..0000000
--- a/jsf-ri/systest-per-webapp/string-converter/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <converter>
-    <converter-for-class>java.lang.String</converter-for-class>
-    <converter-class>com.sun.faces.systest.StringConverter</converter-class>
-  </converter>
-
-  <managed-bean>
-    <managed-bean-name>bean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.TestBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/string-converter/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/string-converter/web/WEB-INF/web.xml
deleted file mode 100644
index 2b1f56e..0000000
--- a/jsf-ri/systest-per-webapp/string-converter/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
-
-    <display-name>String Converter Test</display-name>
-    <description>
-        String Converter Test
-    </description>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/string-converter/web/index.jsp b/jsf-ri/systest-per-webapp/string-converter/web/index.jsp
deleted file mode 100644
index b32bac2..0000000
--- a/jsf-ri/systest-per-webapp/string-converter/web/index.jsp
+++ /dev/null
@@ -1,93 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>Hello</title> </head>
-    <%@ page contentType="application/xhtml+xml" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <body bgcolor="white">
-    <f:view>
-    <h:form>
-
-      <h:panelGrid columns="2">
-
-        Input String <h:inputText value="#{bean.stringProperty}"/>
-
-        Output String <h:outputText value="#{bean.stringProperty}"/>
-
-        <h:commandButton value="reload" />
-
-      </h:panelGrid>
-    </h:form>
-    </f:view>
-
-    <p>
-      <a href="http://validator.w3.org/check?uri=referer"><img
-          src="http://www.w3.org/Icons/valid-xhtml10"
-          alt="Valid XHTML 1.0!" height="31" width="88" /></a>
-    </p>
-    </body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/view-expired/src/java/com/sun/faces/systest/ViewExpiredExceptionTestCase.java b/jsf-ri/systest-per-webapp/view-expired/src/java/com/sun/faces/systest/ViewExpiredExceptionTestCase.java
deleted file mode 100644
index 784d292..0000000
--- a/jsf-ri/systest-per-webapp/view-expired/src/java/com/sun/faces/systest/ViewExpiredExceptionTestCase.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import java.net.URL;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class ViewExpiredExceptionTestCase extends AbstractTestCase {
-
-    public ViewExpiredExceptionTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(InvalidMappingTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-    
-    // ------------------------------------------------------------ Test Methods
-    
-    public void testViewExpiredExceptionErrorPage() throws Exception {
-        WebClient client = new WebClient();
-        client.setThrowExceptionOnFailingStatusCode(false);
-        client.setTimeout(0);
-       
-        HtmlPage page = (HtmlPage) client.getPage("/faces/test.jsp", client);
-
-        HtmlSubmitInput submit = (HtmlSubmitInput) 
-            getInputContainingGivenId(page, "submit");
-
-        Thread.sleep(65000);
-
-        HtmlPage errorPage = (HtmlPage) submit.click();
-        assertTrue(errorPage.asText().indexOf("Error page invoked") >= 0);
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/view-expired/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/view-expired/web/WEB-INF/web.xml
deleted file mode 100644
index c7d5bdd..0000000
--- a/jsf-ri/systest-per-webapp/view-expired/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5" 
-         xmlns="http://java.sun.com/xml/ns/javaee" 
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd">
-  <description>
-       Webapp to validate ViewExpiredException is properly handled.
-  </description>
-  <display-name>View Expired Test</display-name>
-  <!-- Validate the Application Configuration Resources -->
-  <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup> 1 </load-on-startup>
-  </servlet>
-    
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-  </servlet-mapping>
-    
-    <error-page>
-        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
-        <location>/error.jsp</location>
-    </error-page>
- 
-  <session-config>
-      <session-timeout>1</session-timeout>
-  </session-config>  
-  
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/view-expired/web/error.jsp b/jsf-ri/systest-per-webapp/view-expired/web/error.jsp
deleted file mode 100644
index 323a595..0000000
--- a/jsf-ri/systest-per-webapp/view-expired/web/error.jsp
+++ /dev/null
@@ -1,44 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<head>
-    <title>View Expired</title>
-</head>
-<body>
-Error page invoked
-</body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/view-expired/web/test.jsp b/jsf-ri/systest-per-webapp/view-expired/web/test.jsp
deleted file mode 100644
index f1e5ee8..0000000
--- a/jsf-ri/systest-per-webapp/view-expired/web/test.jsp
+++ /dev/null
@@ -1,83 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form>        
-    <h:commandButton id="submit" value="Click me in about 1 minute"/>
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/WcagDataTableTestCase.java b/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/WcagDataTableTestCase.java
deleted file mode 100644
index 9e63f29..0000000
--- a/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/WcagDataTableTestCase.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Make sure that an application that replaces the ApplicationFactory
- * but uses the decorator pattern to allow the existing ApplicationImpl
- * to do the bulk of the requests works.</p>
- */
-public class WcagDataTableTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public WcagDataTableTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(WcagDataTableTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /*
-     *
-     * <p>Verify that the bean is successfully resolved</p>
-     */
-    public void testReplaceStateManager() throws Exception {
-        HtmlPage page = getPage("/faces/index.jsp");
-        String pageText = page.asXml();
-        //System.out.println(pageText);
-        // (?s) is an "embedded flag expression" for the "DOTALL" operator.
-        // It says, "let . match any character including line terminators."
-        // Because page.asXml() returns a big string with lots of \r\n chars
-        // in it, we need (?s).
-        // the page contains a table tag with a frame attribute whose value is hsides.
-        assertTrue(pageText.matches("(?s).*<table.*frame=.hsides.*>.*"));
-        // the page contains a table tag with a rules attribute whose value is groups.
-        assertTrue(pageText.matches("(?s).*<table.*rules..groups.*>.*"));
-        // the page contains a table tag with a summary attribute whose value is that string.
-        assertTrue(pageText.matches("(?s).*<table.*summary..Code page support in different versions of MS Windows.*>.*"));
-        // the page contains a table tag followed immediately by the caption element as follows.
-        assertTrue(pageText.matches("(?sm).*<table.*>\\s*<caption>.*CODE-PAGE SUPPORT IN MICROSOFT WINDOWS.*</caption>.*"));
-        // the page contains a close caption tag followed immediately by a three colgroup tags as follows.
-        assertTrue(pageText.matches("(?sm).*</caption>\\s*" +
-                "<colgroup align=.center.\\s*/>\\s*" +
-                "<colgroup align=.left.\\s*/>\\s*" +
-                "<colgroup align=.center.*span=.2.*/>\\s*" +
-                "<colgroup align=.center.*span=.3.*/>.*"));
-
-        // A table with a thead, with a tr with a th scope=col
-        assertTrue(pageText.matches("(?sm).*<table.*>.*<thead>\\s*" +
-                "<tr>\\s*" +
-                "<th\\s*scope=.col.*"));
-        
-        // A table with a tbody, with a tr with a th scope=row
-        assertTrue(pageText.matches("(?sm).*<table.*>.*<tbody>.*" +
-                "<th\\s*scope=.row.*"));
-
-        // A table with a tbody, with a tr with a th scope=row
-        assertTrue(pageText.matches("(?sm).*<table.*>.*<tbody>.*" +
-                "</tbody>.*<tbody>.*</tbody>.*</table>.*"));
-
-    }
-
-}
diff --git a/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/model/WindowsCodePageData.java b/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/model/WindowsCodePageData.java
deleted file mode 100644
index 943d061..0000000
--- a/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/model/WindowsCodePageData.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *
- * @author edburns
- */
-public class WindowsCodePageData {
-    
-    /** Creates a new instance of WindowsCodePageData */
-    public WindowsCodePageData() {
-        codePageData = new ArrayList<WindowsCodePageDataBean>();
-        WindowsCodePageDataBean bean = null;
-        bean = new WindowsCodePageDataBean("1200", "Unicode (BMP of ISO 10646)",
-                false, false, true, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1251", "Windows 3.1 Cyrillic",
-                true, false, true, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1250", "Windows 3.1 Eastern European",
-                true, false, true, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1252", "Windows 3.1 US (ANSI)",
-                true, false, true, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1253", "Windows 3.1 Greek",
-                true, false, true, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1254", "Windows 3.1 Turkish",
-                true, false, true, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1255", "Hebrew",
-                true, false, false, false, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1256", "Arabic",
-                true, false, false, false, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1257", "Baltic",
-                true, false, false, false, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("1361", "Korean (Johab)",
-                true, false, false, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("437", "MS-DOS United States",
-                false, true, true, true, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("708", "Arabic (ASMO 708)",
-                false, true, false, false, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("709", "Arabic (ASMO 449+, BCON V4)",
-                false, true, false, false, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("710", "Arabic (Transparent Arabic)",
-                false, true, false, false, true);
-        codePageData.add(bean);
-        bean = new WindowsCodePageDataBean("720", "Arabic (Transparent ASMO)",
-                false, true, false, false, true);
-        codePageData.add(bean);
-    }
-    
-    private List<WindowsCodePageDataBean> codePageData = null;
-    
-    public List<WindowsCodePageDataBean> getCodePageData() {
-        return codePageData;
-    }
-    
-}
diff --git a/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/model/WindowsCodePageDataBean.java b/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/model/WindowsCodePageDataBean.java
deleted file mode 100644
index d8bc487..0000000
--- a/jsf-ri/systest-per-webapp/wcag-datatable/src/java/com/sun/faces/systest/model/WindowsCodePageDataBean.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-/**
- *
- * @author edburns
- */
-public class WindowsCodePageDataBean {
-    
-    /** Creates a new instance of WcagTableData */
-    public WindowsCodePageDataBean() {
-    }
-    
-    public WindowsCodePageDataBean(String codePageId, String name, boolean acp,
-            boolean oemcp, boolean winNT31, boolean winNT351, boolean win95) {
-        this.codePageId = codePageId;
-        this.name = name;
-        this.ACP = acp;
-        this.OEMCP = oemcp;
-        this.winNT31 = winNT31;
-        this.winNT351 = winNT351;
-        this.win95 = win95;
-    }
-
-    /**
-     * Holds value of property codePageId.
-     */
-    private String codePageId;
-
-    /**
-     * Getter for property codePageId.
-     * @return Value of property codePageId.
-     */
-    public String getCodePageId() {
-        return this.codePageId;
-    }
-
-    /**
-     * Setter for property codePageId.
-     * @param codePageId New value of property codePageId.
-     */
-    public void setCodePageId(String codePageId) {
-        this.codePageId = codePageId;
-    }
-
-    /**
-     * Holds value of property name.
-     */
-    private String name;
-
-    /**
-     * Getter for property name.
-     * @return Value of property name.
-     */
-    public String getName() {
-        return this.name;
-    }
-
-    /**
-     * Setter for property name.
-     * @param name New value of property name.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Holds value of property isOEMCP.
-     */
-    private String isOEMCP;
-
-    /**
-     * Holds value of property ACP.
-     */
-    private boolean ACP;
-
-    /**
-     * Getter for property ACP.
-     * @return Value of property ACP.
-     */
-    public boolean isACP() {
-        return this.ACP;
-    }
-
-    /**
-     * Setter for property ACP.
-     * @param ACP New value of property ACP.
-     */
-    public void setACP(boolean ACP) {
-        this.ACP = ACP;
-    }
-
-    /**
-     * Holds value of property OEMCP.
-     */
-    private boolean OEMCP;
-
-    /**
-     * Getter for property OEMCP.
-     * @return Value of property OEMCP.
-     */
-    public boolean isOEMCP() {
-        return this.OEMCP;
-    }
-
-    /**
-     * Setter for property OEMCP.
-     * @param OEMCP New value of property OEMCP.
-     */
-    public void setOEMCP(boolean OEMCP) {
-        this.OEMCP = OEMCP;
-    }
-
-    /**
-     * Holds value of property winNT31.
-     */
-    private boolean winNT31;
-
-    /**
-     * Getter for property winNT31.
-     * @return Value of property winNT31.
-     */
-    public boolean isWinNT31() {
-        return this.winNT31;
-    }
-
-    /**
-     * Setter for property winNT31.
-     * @param winNT31 New value of property winNT31.
-     */
-    public void setWinNT31(boolean winNT31) {
-        this.winNT31 = winNT31;
-    }
-
-    /**
-     * Holds value of property winNT351.
-     */
-    private boolean winNT351;
-
-    /**
-     * Getter for property winNT351.
-     * @return Value of property winNT351.
-     */
-    public boolean isWinNT351() {
-        return this.winNT351;
-    }
-
-    /**
-     * Setter for property winNT351.
-     * @param winNT351 New value of property winNT351.
-     */
-    public void setWinNT351(boolean winNT351) {
-        this.winNT351 = winNT351;
-    }
-
-    /**
-     * Holds value of property win95.
-     */
-    private boolean win95;
-
-    /**
-     * Getter for property win95.
-     * @return Value of property win95.
-     */
-    public boolean isWin95() {
-        return this.win95;
-    }
-
-    /**
-     * Setter for property win95.
-     * @param win95 New value of property win95.
-     */
-    public void setWin95(boolean win95) {
-        this.win95 = win95;
-    }
-
-    
-}
diff --git a/jsf-ri/systest-per-webapp/wcag-datatable/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/wcag-datatable/web/WEB-INF/faces-config.xml
deleted file mode 100644
index f14e06a..0000000
--- a/jsf-ri/systest-per-webapp/wcag-datatable/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>dataSource</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.WindowsCodePageData</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/wcag-datatable/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/wcag-datatable/web/WEB-INF/web.xml
deleted file mode 100644
index 2b1f56e..0000000
--- a/jsf-ri/systest-per-webapp/wcag-datatable/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
-
-    <display-name>String Converter Test</display-name>
-    <description>
-        String Converter Test
-    </description>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/wcag-datatable/web/index.jsp b/jsf-ri/systest-per-webapp/wcag-datatable/web/index.jsp
deleted file mode 100644
index d5def71..0000000
--- a/jsf-ri/systest-per-webapp/wcag-datatable/web/index.jsp
+++ /dev/null
@@ -1,156 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>WCAG Table Test</title> </head>
-    <%@ page contentType="application/xhtml+xml" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <body bgcolor="white">
-    <f:view>
-    <h:form>
-
-      <p>This is the sample table from the HTML 4.0.1 specificion
-      section 11.5.  You can see it at <<a
-      href="http://www.w3.org/TR/html401/struct/tables.html#h-11.5">http://www.w3.org/TR/html401/struct/tables.html#h-11.5</a>>.
-      </p>
-
-      <h:dataTable value="#{dataSource.codePageData}" var="row"
-                   frame="hsides" rules="groups"
-                   summary="Code page support in different versions of MS Windows." bodyrows="0,10">
-        <f:facet name="colgroups">
-          <h:panelGroup>
-	    <colgroup align="center" />
-	    <colgroup align="left" />
-	    <colgroup align="center" span="2" />
-	    <colgroup align="center" span="3" />
-          </h:panelGroup>
-        </f:facet>
-
-        <f:facet name="caption">
-          <h:outputText value="CODE-PAGE SUPPORT IN MICROSOFT WINDOWS" />
-        </f:facet>
-
-	<h:column>
-	  <f:facet name="header">
-	    <h:outputText value="Code-Page ID" />
-	  </f:facet>
-	  <h:outputText value="#{row.codePageId}" />
-	</h:column>
-
-	<h:column>
-	  <f:facet name="header">
-	    <h:outputText value="Name" />
-	  </f:facet>
-	  <h:outputText value="#{row.name}" />
-	</h:column>
-
-	<h:column>
-	  <f:facet name="header">
-	    <h:outputText value="ACP" />
-	  </f:facet>
-	  <h:outputText value="#{row.ACP}" />
-	</h:column>
-
-	<h:column>
-	  <f:facet name="header">
-	    <h:outputText value="OEMCP" />
-	  </f:facet>
-	  <h:outputText value="#{row.OEMCP}" />
-	</h:column>
-
-	<h:column rowHeader="true">
-	  <f:facet name="header">
-	    <h:outputText value="Windows NT 3.1" />
-	  </f:facet>
-	  <h:outputText value="#{row.winNT31}" />
-	</h:column>
-
-	<h:column>
-	  <f:facet name="header">
-	    <h:outputText value="Windows NT 3.51" />
-	  </f:facet>
-	  <h:outputText value="#{row.winNT351}" />
-	</h:column>
-
-	<h:column>
-	  <f:facet name="header">
-	    <h:outputText value="Windows 95" />
-	  </f:facet>
-	  <h:outputText value="#{row.win95}" />
-	</h:column>
-
-      </h:dataTable>
-
-    </h:form>
-    </f:view>
-
-    <p>
-      <a href="http://validator.w3.org/check?uri=referer"><img
-          src="http://www.w3.org/Icons/valid-xhtml10"
-          alt="Valid XHTML 1.0!" height="31" width="88" /></a>
-    </p>
-    </body>
-</html>  
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/src/java/com/sun/faces/systest/WriteAttributeScriptDisabledTestCase.java b/jsf-ri/systest-per-webapp/write-attribute-script-disabled/src/java/com/sun/faces/systest/WriteAttributeScriptDisabledTestCase.java
deleted file mode 100644
index fcd2103..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/src/java/com/sun/faces/systest/WriteAttributeScriptDisabledTestCase.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import java.net.URL;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-
-public class WriteAttributeScriptDisabledTestCase extends AbstractTestCase {
-
-    public WriteAttributeScriptDisabledTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(WriteAttributeScriptDisabledTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-    
-    // ------------------------------------------------------------ Test Methods
-    
-    public void testWriteAttributeDisabled() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-       
-        HtmlPage page = getPage("/faces/test.jsp");
-
-        HtmlAnchor link = (HtmlAnchor) page.getAnchors().get(0);
-
-        HtmlPage errorPage = (HtmlPage) link.click();
-        assertTrue(errorPage.asText().indexOf("new value!") == -1);
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/src/java/com/sun/faces/systest/model/Bean.java b/jsf-ri/systest-per-webapp/write-attribute-script-disabled/src/java/com/sun/faces/systest/model/Bean.java
deleted file mode 100644
index d11ebc4..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/src/java/com/sun/faces/systest/model/Bean.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-public class Bean {
-
-
-    public String getScriptAttribute() {
-	String result = "javascript:var element = document.getElementById(\"modifiedByScript\");element.innerHTML = \"<b>new value!</b>\";";
-
-	return result;
-    }
-	  
-}
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 98128e0..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>bean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.Bean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/web.xml
deleted file mode 100644
index 51238f0..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5" 
-         xmlns="http://java.sun.com/xml/ns/javaee" 
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd">
-  <description>
-       Webapp to test that script content may not be written as an attribute, by default.
-  </description>
-  <display-name>Write Attribute Script Disabled</display-name>
-  <!-- Validate the Application Configuration Resources -->
-  <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <context-param>
-    <param-name>com.sun.faces.enableScriptsInAttributeValues</param-name>
-    <param-value>false</param-value>
-  </context-param>
-
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup> 1 </load-on-startup>
-  </servlet>
-    
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-  </servlet-mapping>
-    
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/test.jsp b/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/test.jsp
deleted file mode 100644
index 2f9a3c9..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-disabled/web/test.jsp
+++ /dev/null
@@ -1,89 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form prependId="false">        
-    <h:outputLink id="link" value="#{bean.scriptAttribute}">
-      Link text
-    </h:outputLink>
-
-    <h:commandButton value="submit" />
-
-    <p><span id="modifiedByScript">initial value, modified by script</span></p>
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/src/java/com/sun/faces/systest/WriteAttributeScriptEnabledTestCase.java b/jsf-ri/systest-per-webapp/write-attribute-script-enabled/src/java/com/sun/faces/systest/WriteAttributeScriptEnabledTestCase.java
deleted file mode 100644
index 4707add..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/src/java/com/sun/faces/systest/WriteAttributeScriptEnabledTestCase.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import java.net.URL;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-public class WriteAttributeScriptEnabledTestCase extends AbstractTestCase {
-
-    public WriteAttributeScriptEnabledTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(WriteAttributeScriptEnabledTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-    
-    // ------------------------------------------------------------ Test Methods
-    
-    public void testWriteAttributeDisabled() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-
-        // HACK: The first request to the page will result in the value
-        // having jsessionid encoded in the link value.  Making a second
-        // request to the page means we've joined the session and the value
-        // will no longer include the jsessionid (at least when cookies are enabled)
-        // and clicking the link will not produce JS errors.
-        HtmlPage page = getPage("/faces/test.jsp");
-        page = getPage("/faces/test.jsp");
-
-        HtmlAnchor link = (HtmlAnchor) page.getAnchors().get(0);
-
-        HtmlPage errorPage = (HtmlPage) link.click();
-        assertTrue(errorPage.asText().indexOf("new value!") >= 0);
-    }
-}
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/src/java/com/sun/faces/systest/model/Bean.java b/jsf-ri/systest-per-webapp/write-attribute-script-enabled/src/java/com/sun/faces/systest/model/Bean.java
deleted file mode 100644
index 483ef3e..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/src/java/com/sun/faces/systest/model/Bean.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-public class Bean {
-
-
-    public String getScriptAttribute() {
-	String result = "javascript:var element = document.getElementById(\"modifiedByScript\");element.innerHTML = \"<b>new value!</b>\";";
-
-	return result;
-    }
-	  
-}
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/faces-config.xml b/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 98128e0..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>bean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.systest.model.Bean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-
-</faces-config>
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/web.xml b/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/web.xml
deleted file mode 100644
index c954f0e..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<web-app version="2.5" 
-         xmlns="http://java.sun.com/xml/ns/javaee" 
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd">
-  <description>
-       Webapp to test that script content may not be written as an attribute, by default.
-  </description>
-  <display-name>Write Attribute Script Disabled</display-name>
-  <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-  <!-- Faces Servlet -->
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup> 1 </load-on-startup>
-  </servlet>
-    
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-  </servlet-mapping>
-    
-</web-app>
diff --git a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/test.jsp b/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/test.jsp
deleted file mode 100644
index 2f9a3c9..0000000
--- a/jsf-ri/systest-per-webapp/write-attribute-script-enabled/web/test.jsp
+++ /dev/null
@@ -1,89 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-
-  <h:form prependId="false">        
-    <h:outputLink id="link" value="#{bean.scriptAttribute}">
-      Link text
-    </h:outputLink>
-
-    <h:commandButton value="submit" />
-
-    <p><span id="modifiedByScript">initial value, modified by script</span></p>
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/build-tests.xml b/jsf-ri/systest/build-tests.xml
deleted file mode 100644
index 591abf4..0000000
--- a/jsf-ri/systest/build-tests.xml
+++ /dev/null
@@ -1,1384 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!-- ********** JSF System Integration Test File ************************** -->
-
-
-<project name="JSF-RI-Systest-Execute" default="test" basedir=".">
-
-
-    <!-- =========================== Configuration ============================ -->
-
-
-    <!-- Load properties in case this script executed directly -->
-    <property file="${user.home}/build.properties"/>
-    <property file="../../build.properties"/>
-
-    <import file="${jsf.build.home}/common/ant/common.xml"/>
-
-    <!-- SystestClient connection properties -->
-    <property name="context.path" value="/jsf-systest"/>
-
-    <!-- SystestClient failure handling properties -->
-    <property name="failonerror" value="true"/>
-    <!-- Set 'protocol' to a zero length string to use HttpURLConnection -->
-    <property name="protocol" value="HTTP/1.0"/>
-
-    <property name="golden.path" value="${context.path}/golden"/>
-    <property name="ignore.path" value="${context.path}/ignore"/>
-    <property name="local.golden.path" value="${basedir}/web/golden"/>
-
-
-    <!-- SystestClient taskdef classpath -->
-    <path id="test.classpath">
-        <pathelement location="${jsf-api.jar}"/>
-        <pathelement location="${jsf-impl.jar}"/>
-        <pathelement location="${basedir}/build/classes"/>
-        <path refid="compile.classpath"/>
-    </path>
-
-
-    <!-- SystestClient taskdef declaration -->
-    <taskdef name="tester"
-             classname="com.sun.faces.systest.ant.SystestClient">
-        <classpath refid="test.classpath"/>
-    </taskdef>
-
-    <macrodef name="jsf.tester">
-        <attribute name="request"/>
-        <attribute name="outContent"
-                   default=""/>
-        <attribute name="golden"
-                   default=""/>
-        <attribute name="status"
-                   default="200"/>
-        <attribute name="ignoreIfContains"
-                   default=""/>
-        <attribute name="recordGolden"
-                   default=""/>
-        <attribute name="ignore"
-                   default=""/>
-        <attribute name="joinSession"
-                   default="false"/>
-        <sequential>
-            <tester request="@{request}"
-                    host="${container.host}"
-                    port="${container.port}"
-                    protocol="${protocol}"
-                    failonerror="${failonerror}"
-                    outContent="@{outContent}"
-                    golden="@{golden}"
-                    recordGolden="@{recordGolden}"
-                    status="@{status}"
-                    ignoreIfContains="@{ignoreIfContains}"
-                    ignore="@{ignore}"
-                    joinSession="@{joinSession}"/>
-        </sequential>
-    </macrodef>
-
-
-    <!-- HtmlUnit client classpath -->
-    <path id="html.classpath">  
-        <pathelement location="${basedir}/build/classes"/>
-        <path refid="htmlunit.runtime.classpath"/>
-    </path>
-
-
-    <!-- ======================== Test Execution ============================== -->
-    <!-- converter06 impl logic deferred to 2.0 -->
-    <!-- DO NOT REORDER test.annotations -->
-    <target name="test"
-            description="Execute all tests against installed application"
-            depends="test.annotations,
-                test.ajax,
-                test.composite,
-                test.facelets,
-                test.init,
-                test.render,
-                test.html.taglib,
-                test.prefix.security,
-                test.config,
-                test.interweaving,
-                test.listener,
-                test.duplicateIds,
-                test.viewIdNormalization,
-                test.renderkit,
-                test.hello,
-                test.external,
-                test.el,
-                test.flash,
-                test.f.event,
-                test.resourcelocation,
-                test.managed,
-                test.message,
-                test.converter,
-                test.converter01,
-                test.converter02,
-                test.converter03,
-                test.converter04,
-                test.converter05,
-                test.enum-converter-1,
-                test.validator,
-                test.validator01,
-                test.validator02,
-                test.validator03,
-                test.valuechange,
-                test.component,
-                test.component01,
-                test.navigation,
-                test.implicitnav,
-                test.state,
-                test.resourceBundleELResolver,
-                test.tlvalidator,
-                test.standard,
-                test.verbatim,
-                test.phases,
-                test.subview,
-                test.methodRef,
-                test.jsp,  
-                test.jsf2jsp,
-                test.path,
-                test.valueBindingGet,
-                test.misc,
-                test.regressions"
-            />
-            <!--
-                test.groovy"
-            -->
-
-    <target name="test.init">
-        <mkdir dir="${impl.test.results.dir}"/>
-    </target>
-    
-    <target name="test.misc">
-        <!-- validates fix for issue IMPL-262 - should be 404 not 500 -->
-        <jsf.tester request="${context.path}/faces/thispagedoesnexist.jsp"
-            status="404"/>
-    </target>
-
-    <target name="test.duplicateIds"
-            description="Test duplicate ID detection">
-
-        <jsf.tester request="${context.path}/faces/duplicateIds01.jsp"
-                    status="500"/> 
-
-        <jsf.tester request="${context.path}/faces/duplicateIds02.jsp"
-                status="200"/>
-
-        <jsf.tester request="${context.path}/faces/duplicateIds03.jsp"
-                status="500"/>
-
-        <jsf.tester
-              request="${context.path}/faces/duplicateIds05.jsp"
-              status="200"/>
-
-        <jsf.tester
-              request="${context.path}/faces/forEach02.jsp"
-              status="200"/>
-
-        <!-- PENDING: return to running
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/DuplicateIds04TestCase.class"/>
-            </tests>
-        </jsf.junit>               
-        -->
-
-
-    </target>
-    
-    
-    <target name="test.viewIdNormalization">
-        <!-- request for any page will do -->
-        <jsf.tester request="${context.path}/faces/faces/faces/faces/duplicateIds02.jsp"
-                status="200"/>
-    </target>
-
-    <target name="test.external"
-            description="Test ExternalContext implementation issues">
-
-        <!-- Request scope attribute transparency -->
-        <jsf.tester
-              request="${context.path}/faces/external01.jsp"
-              outContent="/external01.jsp PASSED"/>
-
-        <!-- Session scope attribute transparency -->
-        <jsf.tester
-              request="${context.path}/faces/external02.jsp"
-              outContent="/external02.jsp PASSED"/>
-
-        <!-- Application scope attribute transparency -->
-        <jsf.tester
-              request="${context.path}/faces/external03.jsp"
-              outContent="/external03.jsp PASSED"/>
-
-    </target>
-
-    <target name="test.facelets">
-        <!-- Tests to verify 955, return a 500, rather than a 404 -->
-        <jsf.tester request="${context.path}/faces/facelets/compositionnotfound.xhtml"
-            status="500"/>
-        <jsf.tester request="${context.path}/faces/facelets/decoratenotfound.xhtml"
-            status="500"/>
-        <jsf.tester request="${context.path}/faces/facelets/includenotfound.xhtml"
-            status="500"/>        
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/facelets/*TestCase.class"/> 
-            </tests>
-        </jsf.junit>
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/viewparameters/ViewParametersTestCase.class"/>
-            </tests>
-        </jsf.junit>  
-
-    </target>
-
-    <target name="test.groovy">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/groovy/*TestCase.class"/> 
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.annotations">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/annotation/AnnotatedComponentsTestCase.class"/> 
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.el">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/el/ELTestCase.class"/> 
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.flash">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/Flash*TestCase.class"/> 
-            </tests>
-        </jsf.junit>
-    </target>
-
-
-
-    <target name="test.f.event">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/tags/EventTestCase.class"/> 
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.resourcelocation">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/ResourceRelocationTestCase.class"/> 
-            </tests>
-        </jsf.junit>
-    </target>
-
-
-    <target name="test.hello"
-            description="Basic Hello, World Tests">
-
-        <!-- Simple Non-Faces Response -->
-        <jsf.tester
-              request="${context.path}/hello.jsp" status="200"
-              outContent="/hello.jsp PASSED"/>
-
-        <!-- Simple Faces Response (Direct) -->
-        <jsf.tester
-              request="${context.path}/faces/hello.jsp"
-              outContent="/hello.jsp PASSED"/>
-
-        <!-- Simple Golden File Test -->
-        <jsf.tester
-              request="${context.path}/hello.jsp"
-              golden="${golden.path}/hello.txt"/>
-
-        <!-- Simple Golden File Plus Ignore File Test -->
-        <jsf.tester
-              request="${context.path}/hello.jsp"
-              golden="${golden.path}/hello-mismatch.txt"
-              ignore="${ignore.path}/hello-mismatch.txt"/>
-
-    </target>
-
-
-    <target name="test.jsp"
-            description="Test JSP Integration">
-        
-        <jsf.tester
-              request="${context.path}/faces/positiveTagFile.jsp"
-              status="200"/>
-        
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/jsptest/ViewTagTestCase.class,
-                                   com/sun/faces/jsptest/CommandLinkNoFormTestCase.class,
-                                   com/sun/faces/jsptest/FormElTestCase.class,
-                                   com/sun/faces/jsptest/MissingActionListenerMethodTestCase.class,
-                                   com/sun/faces/jsptest/ConverterTestCase.class,
-                                   com/sun/faces/jsptest/IdRefTestCase.class,
-                                   com/sun/faces/jsptest/ForEachTestCase.class,
-                                   com/sun/faces/jsptest/SetPropertyTestCase.class"/>
-                               <!--
-                                   com/sun/faces/jsptest/PrependIdTestCase.class,
-                               -->
-            </tests>
-        </jsf.junit>       
-    </target>
-
-    <target name="test.jsf2jsp" 
-            description="Issue 636 test JSF2 features with JSP">
-
-            <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/jsf2jsp/Jsf2JspTestCase.class"
-                         />
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.path"
-            description="Test Path Handling">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/pathtest/*TestCase.class"
-                         excludes="com/sun/faces/pathtest/PathTestCase.class"/>
-            </tests>
-        </jsf.junit>       
-    </target>
-
-    <target name="test.methodRef"
-            description="Test Method References">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/methodref/*TestCase.class"/>
-            </tests>
-        </jsf.junit> 
-       
-        <!-- MethodBinding Test #2 (Superclass Method Calls) -->
-        <jsf.tester
-              request="${context.path}/faces/methodref02.jsp"
-              outContent="/methodref02.jsp PASSED"/>
-
-    </target>
-
-    <target name="test.prefix.security"
-            description="Ensure a prefix mapped FacesServlet doesn't allow access to WEB-INF">
-        <jsf.tester
-              request="${context.path}/faces/WEB-INF/test.jsp"
-              status="404"/>
-        <jsf.tester
-              request="${context.path}/faces/WEB-INF"
-              status="404"/>
-        <jsf.tester
-              request="${context.path}/faces/WEB-INF/"
-              status="404"/>
-        <jsf.tester
-              request="${context.path}/faces/META-INF/MANIFEST.MF"
-              status="404"/>
-        <jsf.tester
-              request="${context.path}/faces/META-INF"
-              status="404"/>
-        <jsf.tester
-              request="${context.path}/faces/META-INF/"
-              status="404"/>
-        <jsf.tester
-              request="${context.path}/faces/web-Inf/test.jsp"
-              status="404"/>
-        <jsf.tester
-              request="${context.path}/faces/mEtA-InF/MANIFEST.MF"
-              status="404"/>
-    </target>
-
-    <target name="test.valueBindingGet"
-            description="Test ValueBinding.getValue() implementation">
-
-        <!-- ValueBinding Test #1 (Simple Bean Getter) -->
-        <jsf.tester
-              request="${context.path}/faces/valueBinding01.jsp"
-              outContent="/valueBinding01.jsp PASSED"/>
-
-        <!-- ValueBinding Test #2 (Simple String Property Getter) -->
-        <jsf.tester
-              request="${context.path}/faces/valueBinding02.jsp"
-              outContent="/valueBinding02.jsp PASSED"/>
-
-        <!-- ValueBinding Test #3 (Simple Integer Property Getter) -->
-        <jsf.tester
-              request="${context.path}/faces/valueBinding03.jsp"
-              outContent="/valueBinding03.jsp PASSED"/>
-
-        <!-- ValueBinding Test #4 (Simple Boolean Property Getter) -->
-        <jsf.tester
-              request="${context.path}/faces/valueBinding04.jsp"
-              outContent="/valueBinding04.jsp PASSED"/>
-
-        <!-- ValueBinding Test #5 (Simple Integer Expression Getter) -->
-        <jsf.tester
-              request="${context.path}/faces/valueBinding05.jsp"
-              outContent="/valueBinding05.jsp PASSED"/>
-
-        <!-- ValueBinding Test #6 (Simple Boolean Expression Getter) -->
-        <jsf.tester
-              request="${context.path}/faces/valueBinding06.jsp"
-              outContent="/valueBinding06.jsp PASSED"/>
-
-        <!-- ValueBinding Test #7 (Mixed Literal and Expression Getter) -->
-        <jsf.tester
-              request="${context.path}/faces/valueBinding07.jsp"
-              outContent="/valueBinding07.jsp PASSED"/>
-
-    </target>
-
-    <target name="test.config"
-            description="Test config loading facility">
-
-        <jsf.tester
-              request="${context.path}/faces/config01.jsp"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              outContent="/config01.jsp PASSED"/>
-
-        <jsf.tester
-              request="${context.path}/faces/factoryFinder.jsp"
-              golden="${golden.path}/factoryFinder.txt"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              recordGolden="${local.golden.path}/factoryFinder.txt"
-              />
-    </target>
-
-    <target name="test.listener"
-            description="Test listener">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/listener.jsp"
-              status="200"/>
-    </target>
-
-    <target name="test.managed"
-            description="Test managed bean creation facility">
-
-        <!-- Managed Bean Create #1 (No Property Setters) -->
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/managed01.jsp"
-              outContent="/managed01.jsp PASSED"/>
-
-        <!-- Managed Bean Create #2 (Primitive Property Setters) -->
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/managed02.jsp"
-              outContent="/managed02.jsp PASSED"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/managed03.jsp"
-              status="500"/>
-
-        <jsf.tester
-              request="${context.path}/faces/managed04.jsp"
-              golden="${golden.path}/managed04.txt"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              recordGolden="${local.golden.path}/managed04.txt"
-              />
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/managed07.jsp"
-              status="500"/>
-
-        <jsf.tester
-              request="${context.path}/faces/resourceInjection01.jsp"
-              golden="${golden.path}/resourceInjection01.txt"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              recordGolden="${local.golden.path}/resourceInjection01.txt"
-              />
-
-         <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/eagerbean.jsp"
-              status="200"/>
-        
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/lifecycle/*TestCase.class"/>
-            </tests>
-        </jsf.junit>         
-    </target>
-
-
-    <target name="test.message"
-            description="Test message resources processing">
-
-        <!--
-            These tests aren't run due to their design.  They
-            shouldn't be changing the ViewRoot while the view
-            is being built.
-        -->
-        <!-- Standard API Message Resources -->
-        <!--
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/message01.jsp"
-              outContent="/message01.jsp PASSED"/>-->
-
-        <!-- Standard IMPL Message Resources -->
-        <!--
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/message02.jsp"
-              outContent="/message02.jsp PASSED"/>-->
-
-        <!-- Single Message Resources Element -->
-        <!--<jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/message03.jsp"
-               outContent="/message03.jsp PASSED"/>-->
-
-        <!-- Double Message Resources Element -->
-        <!--<jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/message04.jsp"
-              outContent="/message04.jsp PASSED"/>-->
-
-    </target>
-
-    <target name="test.navigation"
-            description="Test navigation handler rule processing">
-        
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/*NavigationTestCase.class"/>
-            </tests>
-        </jsf.junit>         
-        
-
-    </target>
-
-    <target name="test.state"
-            description="Test new state manager">
-        
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/state/*TestCase.class"/>
-            </tests>
-        </jsf.junit>  
-
-    </target>
-
-    <target name="test.tlvalidator"
-            description="Test the RI Tag Library Validator">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestHtmlBasicValidatorFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/TestHtmlBasicValidatorFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestHtmlBasicValidatorSucceed.jsp"
-              status="200"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestCoreValidatorFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/TestCoreValidatorFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestCoreValidatorSucceed.jsp"
-              status="200"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestCoreValidatorIfFail.jsp"
-              status="200"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestCoreValidatorIfSucceed.jsp"
-              status="200"/>
-        <!-- JSTL forEach integration indefinately inoperable.
-            <jsf.tester 
-                 request="${context.path}/faces/TestCoreValidatorIteratorFail.jsp"
-              status="500"/>
-        
-            <jsf.tester 
-                 request="${context.path}/faces/TestCoreValidatorIteratorSucceed.jsp"
-              status="200"/>
-        -->
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorActionRefFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorActionRefSucceed.jsp"
-              status="200"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorComponentFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorComponentSucceed.jsp"
-              status="200"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorIdFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorIdSucceed.jsp"
-              status="200"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorValueRefFail.jsp"
-              status="500"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/TestElValidatorValueRefSucceed.jsp"
-              status="200"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/jsp/tlvTest01.jsp"
-              status="200"/>
-
-    </target>
-
-    <target name="test.valuechange"
-            description="Test ValueChangeListeners">
-
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/jsptest/ValueChangeListenerTestCase.class"/>
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.converter"
-            description="Test Converter creation facility">
-
-        <!-- Test Converter creation -->
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/converter.jsp"
-              outContent="/converter.jsp PASSED"/>
-    </target>
-
-    <target name="test.converter01"
-            description="Test standard Converter replacement">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/converter01.jsp"
-              outContent="/converter01.jsp PASSED"/>
-    </target>
-
-    <target name="test.converter02"
-            description="Test passing Converter instances to component tag">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/converter02.jsp"
-              recordGolden="${local.golden.path}/standard/converter02.txt"
-              golden="${golden.path}/standard/converter02.txt"/>
-    </target>
-
-    <target name="test.converter03"
-            description="Test converter">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/converter03.jsp"
-              status="200"/>
-    </target>
-
-    <target name="test.converter04"
-            description="Test converter">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/converter04.jsp"
-              status="200"/>
-    </target>
-
-    <target name="test.converter05">
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/converter05.jsp"
-              recordGolden="${local.golden.path}/standard/converter05.txt"
-              golden="${golden.path}/standard/converter05.txt"/>
-    </target>
-
-    <target name="test.converter06">
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/converter06.jsp"
-              recordGolden="${local.golden.path}/standard/converter06.txt"
-              golden="${golden.path}/standard/converter06.txt"/>
-    </target>
-
-    <target name="test.enum-converter-1"
-            description="Test Enum Converter ">
-                                                                                                                          
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/enum-converter-1.jsp"
-              outContent="/enum-converter-1.jsp PASSED"/>
-    </target>
-
-    <target name="test.validator"
-            description="Test Validator creation facility">
-
-        <!-- Test validator creation -->
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/validator.jsp"
-              outContent="/validator.jsp PASSED"/>
-
-            <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/validator/*TestCase.class"/>
-            </tests>
-        </jsf.junit>
-
-    </target>
-
-    <target name="test.validator01"
-            description="Test standard Validator replacement">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/validator01.jsp"
-              outContent="/validator01.jsp PASSED"/>
-    </target>
-
-    <target name="test.validator02"
-            description="Test validator">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/validator02.jsp"
-              status="200"/>
-    </target>
-
-    <target name="test.validator03"
-            description="Test validator">
-
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/validator03.jsp"
-              status="200"/>
-    </target>
-
-    <target name="test.ajax"
-            description="Test Ajax Functionality">
-
-            <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/ajax/*TestCase.class"                         />
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.render"
-            description="Test Rendering Functionality">
-
-            <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/render/*TestCase.class" />
-                         <!-- excludes="com/sun/faces/render/CommandButtonTestCase.class" /> -->
-<!-- 139-StateSaving -->
-            </tests>
-        </jsf.junit>
-    </target>
-
-    <target name="test.component"
-            description="Test Component creation facility">
-
-        <!-- Test Component creation -->
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/component.jsp"
-              outContent="/component.jsp PASSED"/>
-        
-        <jsf.tester             
-              request="${context.path}/faces/ProcessSaveRestoreStateTest.jsp"
-              status="200"/>
-        
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/ComponentMiscTestCase.class"/>
-            </tests>
-        </jsf.junit>
-        
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/component/*TestCase.class,com/sun/faces/event/DynamicAddTestCase.class"
-                         excludes="com/sun/faces/component/GetClientIdELTestCase.class"
-                         />
-<!-- 139-StateSaving edburns remove excludes -->
-            </tests>
-        </jsf.junit>
-        
-    </target>
-
-    <target name="test.component01"
-            description="Test standard Component replacement">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/component01.jsp"
-              outContent="/component01.jsp PASSED"/>
-    </target>
-
-    <target name="test.composite"
-            description="Test composite components">
-
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/composite/*TestCase.class"/>
-            </tests>
-        </jsf.junit>  
-
-        <if>
-            <equals arg1="${container.name}" arg2="glassfishV3"/>
-            <then>
-		<jsf.junit context-path="${context.path}"
-			   classpath-refid="html.classpath"
-			   test-results-dir="${impl.test.results.dir}">
-		    <tests>
-			<fileset dir="${basedir}/build/classes"
-				 includes="com/sun/faces/composite/*TestCaseWithEE6Dependencies.class"/>
-		    </tests>
-		</jsf.junit>  
-            </then>
-        </if>
-
-
-    </target>
-
-
-    <target name="test.standard"
-            description="Test the Standard RenderKit">
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/standard/messages01.jsp"
-              recordGolden="${local.golden.path}/standard/messages01.txt"
-              golden="${golden.path}/standard/messages01.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/standard/messages02.jsp"
-              golden="${golden.path}/standard/messages02.txt"
-              recordGolden="${local.golden.path}/standard/messages02.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/standard/component01.jsp"
-              recordGolden="${local.golden.path}/standard/component01.txt"
-              golden="${golden.path}/standard/component01.txt"/>
-        <jsf.tester
-              request="${context.path}/faces/standard/autocomplete.jsp"
-              golden="${golden.path}/standard/autocomplete.txt"/>
-        <jsf.tester
-            request="${context.path}/faces/standard/dtablecolumnclasses.jsp"
-            golden="${golden.path}/standard/dtablecolumnclasses.txt"/>
-        <jsf.tester
-            request="${context.path}/faces/standard/pgridcolumnclasses.jsp"
-            golden="${golden.path}/standard/pgridcolumnclasses.txt"/>
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/SelectOneManyEnumTestCase.class,
-                                   com/sun/faces/systest/SelectManyCollectionTestCase.class,
-                                   com/sun/faces/systest/DataTableTestCase.class,
-                                   com/sun/faces/systest/TestOutputTargets.class,
-                                   com/sun/faces/systest/LinkTypeAttributeTestCase.class,
-                                   com/sun/faces/systest/CheckboxTestCase.class,
-                                   com/sun/faces/systest/SelectOneHideNoSelectItemGroupTestCase.class,
-                                   com/sun/faces/systest/SelectOneHideNoSelectionTestCase.class,
-                                   com/sun/faces/systest/SelectOneValueExpressionHideNoSelectionTestCase.class"/>
-            </tests>
-        </jsf.junit>  
-    </target>
-
-    <target name="test.html.taglib"
-            description="Test the HTML JSP Tags">
-        <echo message="Testing commandButton..."/>
-
-        <jsf.tester
-              request="${context.path}/faces/taglib/commandButton_test.jsp"
-              golden="${golden.path}/taglib/commandButton_test.txt"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              recordGolden="${local.golden.path}/taglib/commandButton_test.txt"/>
-
-        <jsf.tester
-              request="${context.path}/faces/taglib/commandButton_param_test.jsp"
-              golden="${golden.path}/taglib/commandButton_param_test.txt"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              recordGolden="${local.golden.path}/taglib/commandButton_param_test.txt"/>
-
-        <echo message="Testing commandLink..."/>
-        <jsf.tester
-              request="${context.path}/faces/taglib/commandLink_test.jsp"
-              golden="${golden.path}/taglib/commandLink_test.txt"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              recordGolden="${local.golden.path}/taglib/commandLink_test.txt"/>
-        <jsf.tester
-              request="${context.path}/faces/taglib/commandLink_multiform_test.jsp"
-              golden="${golden.path}/taglib/commandLink_multiform_test.txt"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              recordGolden="${local.golden.path}/taglib/commandLink_multiform_test.txt"/>
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/taglib/attributeTest.jsp"
-              recordGolden="${local.golden.path}/taglib/attributeTest.txt"
-              golden="${golden.path}/taglib/attributeTest.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/standard/selectmany02.jsp"
-              recordGolden="${local.golden.path}/standard/selectmany02.txt"
-              golden="${golden.path}/standard/selectmany02.txt"/>
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/standard/selectmany03.jsp"
-              recordGolden="${local.golden.path}/standard/selectmany03.txt"
-              golden="${golden.path}/standard/selectmany03.txt"/>              
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/standard/selectmany04.jsp"
-              recordGolden="${local.golden.path}/standard/selectmany04.txt"
-              golden="${golden.path}/standard/selectmany04.txt"/>
-    </target>
-
-    <target name="test.verbatim"
-            description="Test the Verbatim tag">
-        <echo message="Testing verbatim..."/>
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/verbatim_test.jsp"
-              golden="${golden.path}/verbatim_test.txt"
-              />
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/escape_test.jsp"
-              golden="${golden.path}/escape_test.txt"
-              />
-    </target>
-
-
-    <target name="test.renderkit"
-            description="Test renderkit processing">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/renderkit01.jsp"
-              outContent="/renderkit01.jsp PASSED"/>
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/renderkit02.jsp"
-              golden="${golden.path}/renderkit02A.txt"
-              recordGolden="${local.golden.path}/renderkit02A.txt"
-              />
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/renderkit03.jsp"
-              recordGolden="${local.golden.path}/renderkit03A.txt"
-              golden="${golden.path}/renderkit03A.txt"/>
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/RenderKitsTestCase.class"/>
-            </tests>
-        </jsf.junit>        
-    </target>
-
-    <target name="test.resourceBundleELResolver"
-            description="Test ResourceBundleELResolver ">
-
-        <jsf.tester
-              request="${context.path}/faces/resourceBundle01.jsp"
-              outContent="Expression in raw JSP page is Value From ResourceBundle."/>
-        <jsf.tester
-              request="${context.path}/faces/resourceBundle02.jsp"
-              recordGolden="${local.golden.path}/resourceBundle02.txt"
-              golden="${golden.path}/resourceBundle02.txt"/>
-        <jsf.tester
-              request="${context.path}/faces/resourceBundle03.jsp"
-              recordGolden="${local.golden.path}/resourceBundle03.txt"
-              golden="${golden.path}/resourceBundle03.txt"/>
-        <!-- RETURN TO RUNNING
-            <jsf.tester 
-                 request="${context.path}/faces/resourceBundle04.jsp"
-                 recordGolden="${local.golden.path}/resourceBundle04.txt"
-                 golden="${golden.path}/resourceBundle04.txt"/>
-        -->
-    </target>
-
-
-    <target name="test.phases"
-            description="Test Phase processing with Phase Listener">
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/phaseListener01.jsp"
-              outContent="/phaseListener01.jsp PASSED"/>
-        <!-- PENDING investigate the need for this
-  <jsf.tester 
-        request="${context.path}/faces/phaseListener01.jsp?param=foo"
-        outContent="/phaseListener01.jsp FAILED"/>
-        -->
-    </target>
-    <target name="test.subview"
-            description="Test subview tag">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/subview01.jsp"
-              recordGolden="${local.golden.path}/subview01.txt"
-              golden="${golden.path}/subview01.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/subview02.jsp"
-              recordGolden="${local.golden.path}/subview02.txt"
-              golden="${golden.path}/subview02.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/subview03.jsp"
-              recordGolden="${local.golden.path}/subview03.txt"
-              golden="${golden.path}/subview03.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/subview04.jsp"
-              recordGolden="${local.golden.path}/subview04.txt"
-              golden="${golden.path}/subview04.txt"/>
-
-        <jsf.tester
-              request="${context.path}/faces/subview05.jsp"
-              recordGolden="${local.golden.path}/subview05.txt"
-              golden="${golden.path}/subview05.txt"/>
-
-        <jsf.tester
-              request="${context.path}/faces/subview06.jsp"
-              recordGolden="${local.golden.path}/subview06.txt"
-              golden="${golden.path}/subview06.txt"/>
-
-    </target>
-
-    <target name="test.interweaving"
-            description="Test interweaving">
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/interweaving01.jsp"
-              recordGolden="${local.golden.path}/interweaving01.txt"
-              golden="${golden.path}/interweaving01.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/interweaving02.jsp"
-              recordGolden="${local.golden.path}/interweaving02.txt"
-              golden="${golden.path}/interweaving02.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/interweaving03.jsp"
-              recordGolden="${local.golden.path}/interweaving03.txt"
-              golden="${golden.path}/interweaving03.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/interweaving04.jsp"
-              recordGolden="${local.golden.path}/interweaving04.txt"
-              golden="${golden.path}/interweaving04.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/interweaving05.jsp"
-              recordGolden="${local.golden.path}/interweaving05.txt"
-              golden="${golden.path}/interweaving05.txt"/>
-        
-        <jsf.tester
-              request="${context.path}/faces/interweaving06.jsp"  
-              recordGolden="${local.golden.path}/interweaving06.txt"
-              golden="${golden.path}/interweaving06.txt"/>
-                  
-         <jsf.tester
-              request="${context.path}/faces/interweaving07.jsp"  
-              recordGolden="${local.golden.path}/interweaving07.txt"
-              golden="${golden.path}/interweaving07.txt"/>  
-        
-        <!-- Make multiple requests to the same page and ensure
-             the response is 200 -->
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving08.jsp"
-            golden="${golden.path}/interweaving08.txt"
-            joinSession="true"/>
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving08.jsp"
-            golden="${golden.path}/interweaving08.txt"
-            joinSession="true"/>
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving08.jsp"
-            golden="${golden.path}/interweaving08.txt"
-            joinSession="true"/>
-        <!-- Make multiple requests to the same page and ensure
-             the response is 200 -->
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving09.jsp"
-            golden="${golden.path}/interweaving09.txt"
-            joinSession="true"/>
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving09.jsp"
-            golden="${golden.path}/interweaving09.txt"
-            joinSession="true"/>
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving09.jsp"
-            golden="${golden.path}/interweaving09.txt"
-            joinSession="true"/>
-        
-        <!-- Make multiple requests to the same page and ensure
-             the response is 200 -->
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving10.jsp"
-            golden="${golden.path}/interweaving10.txt"
-            joinSession="true"/>
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving10.jsp"              
-            golden="${golden.path}/interweaving10.txt"
-            joinSession="true"/>
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/interweaving10.jsp"
-            golden="${golden.path}/interweaving10.txt"
-            joinSession="true"/>
-        
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/interweaving11.jsp"              
-              recordGolden="${local.golden.path}/interweaving11.txt"
-              golden="${golden.path}/interweaving11.txt"/>
-
-        <jsf.tester
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              request="${context.path}/faces/interweaving12.jsp"
-              recordGolden="${local.golden.path}/interweaving12.txt"
-              golden="${golden.path}/interweaving12.txt"/>
-        
-        <jsf.tester
-              request="${context.path}/faces/include-import-interweaving.jsp"
-              ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-              golden="${golden.path}/include-import-interweaving.txt"
-              recordGolden="${local.golden.path}/include-import-interweaving.txt"/>
-
-    </target>
-    
-    <target name="test.regressions">
-        <jsf.tester
-            request="${context.path}/faces/regression/AreaTextRowsAttrTest.jsp"
-            golden="${golden.path}/regression/AreaTextRowsAttrTest.txt"
-            recordGolden="${local.golden.path}/regression/AreaTextRowsAttrTest.txt"/>
-        <jsf.tester
-            request="${context.path}/faces/regression/SelectOneManySizeAttrTest.jsp"
-            golden="${golden.path}/regression/SelectOneManySizeAttrTest.txt"
-            recordGolden="${local.golden.path}/regression/SelectOneManySizeAttrTest.txt"/>
-        <jsf.tester
-            ignoreIfContains="${ignore.path}/ignoreIfContains.txt"
-            request="${context.path}/faces/regression/InjectUserDefJS.jsp"
-            golden="${golden.path}/regression/InjectUserDefJS.txt"
-            recordGolden="${local.golden.path}/regression/InjectUserDefJS.txt"/>
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/event/*TestCase.class"/> 
-            </tests>
-        </jsf.junit>
-
-    </target>
-
-    <target name="test.implicitnav">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/systest/implicitnav/*TestCase.class"/> 
-            </tests>
-        </jsf.junit>
-
-    </target>
-
-    <target name="passthru">
-        <jsf.junit context-path="${context.path}"
-                   classpath-refid="html.classpath"
-                   test-results-dir="${impl.test.results.dir}">
-            <tests>
-                <fileset dir="${basedir}/build/classes"
-                         includes="com/sun/faces/jsf2jsp/Jsf2JspTestCase.class"
-                         />
-<!-- 139-StateSaving edburns remove excludes -->
-            </tests>
-        </jsf.junit>
-    </target>
-
-
-    <target name="scratch">
-      <antcall target="test.methodRef" />
-    </target>
-
-</project>
diff --git a/jsf-ri/systest/build.properties.sample b/jsf-ri/systest/build.properties.sample
deleted file mode 100644
index c3671d7..0000000
--- a/jsf-ri/systest/build.properties.sample
+++ /dev/null
@@ -1,2 +0,0 @@
-# Uncomment the following property to build for deployment in JWSDP
-#jwsdp.deploy=true
diff --git a/jsf-ri/systest/build.xml b/jsf-ri/systest/build.xml
deleted file mode 100644
index ed875f9..0000000
--- a/jsf-ri/systest/build.xml
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ************ JSF build file ******************************************* -->
-
-<project name="JSF-RI-Systest" default="main" basedir=".">    
-
-    <property name="Name" value="JavaServer Faces RI System Test"/>   
-
-    <!-- ************ Per user local properties **************************** -->
-    <property file="${user.home}/build.properties"/>    
-    <property file="../../build.properties"/>
-    
-    <!-- Deployment handling import -->  
-    <import file="${jsf.build.home}/common/ant/common.xml"/>
-
-
-    <!-- ************ Where are we building into? ************************** -->
-
-    <property name="test.suite.name" value="jsf-systest"/>  
-
-    <!-- The base directory for compilation targets -->
-    <property name="build.dir" value="${basedir}/build"/>
-    <property name="dist.dir" value="${basedir}/dist"/>
-
-    <!-- The base directory for system test sources -->
-    <property name="source.dir" value="${basedir}/src"/>   
-
-    <!-- The base directory for static web files -->
-    <property name="web.dir" value="${basedir}/web"/>
-
-
-    <!-- Context Path of the integration test web-app -->
-    <property name="context.path" value="/${test.suite.name}"/>
-
-    <path id="systest.compile.classpath">
-        <pathelement path="${jsf-api.jar}"/>
-        <pathelement path="${jsf-impl.jar}"/>
-        <path refid="jsf.test.jar.classpath"/>
-        <path refid="compile.classpath"/>
-        <path refid="htmlunit.compile.classpath"/> 
-    </path>
-           
-    <!-- ************ Executable Targets ************************************** -->
-
-
-    <target name="init"
-            description="Initialize and evaluate conditionals">
-        <echo message="-------- ${test.suite.name} ${impl.version} --------"/>
-    </target>
-    
-    
-    <target name="build.war" depends="compile">
-
-        <echo message="Building jsf-systest.war with partial state saving: ${partial.state.saving}" />
-        <copy file="${web.dir}/WEB-INF/web.xml.template" tofile="${web.dir}/WEB-INF/web.xml" />
-        <replace token="{partial-state-saving}"
-                 file="${web.dir}/WEB-INF/web.xml"
-                 value="${partial.state.saving}" />
-        <jsf.war basedir="${build.dir}"
-                 archive-name="jsf-systest"
-                 webxml="${web.dir}/WEB-INF/web.xml">
-            <archive-elements>
-                <zipfileset dir="${source.dir}"
-                            includes="**/*.properties,**/*.xml"
-                            prefix="WEB-INF/classes"/>
-                <zipfileset dir="${build.dir}/classes"
-                            prefix="WEB-INF/classes"
-                            excludes="**/*TestCase.class"/>
-                <zipfileset dir="${web.dir}"/>
-            </archive-elements>
-        </jsf.war>
-        <mkdir dir="${build.dir}/target/jsf-systest" />
-        <unjar src="${build.dir}/jsf-systest.war" overwrite="true"
-               dest="${build.dir}/target/jsf-systest" />
-        <delete file="${web.dir}/WEB-INF/web.xml" />
-
-    </target>
-
-    <target name="compile" depends=""
-            description="Just compile the classes">
-        <mkdir dir="${build.dir}/classes"/>
-        <!-- Run javac through everything -->
-        <jsf.javac srcdir="${impl.dir}/test"
-                   destdir="${build.dir}/classes"
-                   includes="**/TestingUtil**">
-            <classpath>
-                <path refid="systest.compile.classpath"/>                   
-            </classpath>              
-        </jsf.javac>
-        <jsf.javac srcdir="${source.dir}"
-                   destdir="${build.dir}/classes">
-            <classpath>
-                <path refid="systest.compile.classpath"/>                   
-            </classpath>
-        </jsf.javac>                         
-    </target>
-
-
-    <target name="clean"
-            description="Clean build and distribution directories">
-        <delete dir="${build.dir}"/>
-        <delete dir="${dist.dir}"/>
-    </target>
-
-
-    <target name="main" depends="init,compile"/>
-
-
-    <!-- ********** Test Execution Targets ************************************ -->
-
-
-    <target name="test" depends="init"
-            description="Execute all tests against installed /jsf-systest application">
-
-        <antcall target="build.war">
-            <param name="partial.state.saving" value="true" />
-        </antcall>
-        <echo>
-
-**** RUNNING JSF-SYSTEST USING PARTIAL STATE SAVING ****
-
-        </echo>
-        <antcall target="undeploy"/>
-        <antcall target="deploy"/>
-        <ant antfile="build-tests.xml" target="test">
-            <property name="partial.state.saving" value="true" />
-        </ant>
-        <antcall target="undeploy"/>
-
-        <antcall target="build.war">
-            <param name="partial.state.saving" value="false" />
-        </antcall>
-        <echo>
-
-**** RUNNING JSF-SYSTEST USING FULL STATE SAVING ****
-
-        </echo>
-        <antcall target="deploy"/>
-        <ant antfile="build-tests.xml" target="test">
-            <property name="partial.state.saving" value="false" />
-        </ant>
-        <antcall target="undeploy"/>
-        
-    </target>  
-    
-    <target name="test.with.nodeploy"
-            description="The same as 'test', but with no deployment">
-        <ant antfile="build-tests.xml" target="test"/>    
-    </target>
-
-    <target name="deploy" 
-            description="Deploy the jsf-systest application">
-        <deploy.artifact artifact="${build.dir}/jsf-systest.war"
-                appName="jsf-systest"/>
-    </target>
-    
-    <target name="undeploy" 
-            description="Undeploy the jsf-systest application">
-        <undeploy.artifact artifact="${build.dir}/jsf-systest.war"
-                  appName="jsf-systest"/>
-    </target>
-
-    <target name="passthru"
-            description="useful for running one test">
-       
-        <ant antfile="build-tests.xml" target="passthru"/>
-
-        
-    </target>  
-
-        
-</project>
diff --git a/jsf-ri/systest/nbproject/project.xml b/jsf-ri/systest/nbproject/project.xml
deleted file mode 100644
index c6c011a..0000000
--- a/jsf-ri/systest/nbproject/project.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.ant.freeform</type>
-    <configuration>
-        <general-data xmlns="http://www.netbeans.org/ns/freeform-project/1">
-            <!-- Do not use Project Properties customizer when editing this file manually. -->
-            <name>JSF-RI-Systest</name>
-            <properties/>
-            <folders>
-                <source-folder>
-                    <label>web</label>
-                    <type>doc_root</type>
-                    <location>web</location>
-                </source-folder>
-                <source-folder>
-                    <label>WEB-INF</label>
-                    <type>web_inf</type>
-                    <location>web/WEB-INF</location>
-                </source-folder>
-                <source-folder>
-                    <label>src</label>
-                    <type>java</type>
-                    <location>src</location>
-                </source-folder>
-            </folders>
-            <ide-actions>
-                <action name="build">
-                    <target>build.war</target>
-                </action>
-                <action name="clean">
-                    <target>clean</target>
-                </action>
-                <action name="run">
-                    <target>deploy</target>
-                </action>
-                <action name="test">
-                    <target>test</target>
-                </action>
-                <action name="redeploy">
-                    <target>deploy</target>
-                </action>
-                <action name="rebuild">
-                    <target>clean</target>
-                    <target>build.war</target>
-                </action>
-            </ide-actions>
-            <view>
-                <items>
-                    <source-folder style="tree">
-                        <label>Web Pages</label>
-                        <location>web</location>
-                    </source-folder>
-                    <source-folder style="tree">
-                        <label>WEB-INF Content</label>
-                        <location>web/WEB-INF</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>src</label>
-                        <location>src</location>
-                    </source-folder>
-                    <source-file>
-                        <location>build.xml</location>
-                    </source-file>
-                </items>
-                <context-menu>
-                    <ide-action name="build"/>
-                    <ide-action name="rebuild"/>
-                    <ide-action name="clean"/>
-                    <ide-action name="run"/>
-                    <ide-action name="redeploy"/>
-                    <ide-action name="test"/>
-                </context-menu>
-            </view>
-            <subprojects/>
-        </general-data>
-        <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/1">
-            <compilation-unit>
-                <package-root>src</package-root>
-                <classpath mode="compile">../build/classes:../../jsf-api/build/classes:../../dependencies/junit3.8.1/junit.jar:../../dependencies/htmlunit-2.4/lib/htmlunit-2.4.jar:../../lib/jsf-extensions-test-time.jar:../../dependencies/jars/servlet-api-2.5.jar:../../dependencies/jars/el-api-2.1.2-b05.jar:../../dependencies/jars/jsp-api-2.1.jar:/Users/edburns/Downloads/mvnrepo/org/apache/ant/ant/1.7.1/ant-1.7.1.jar</classpath>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-        </java-data>
-        <preferences xmlns="http://www.netbeans.org/ns/auxiliary-configuration-preferences/1">
-            <module name="org-netbeans-modules-editor-indent">
-                <node name="CodeStyle"/>
-            </module>
-            <module name="org-netbeans-modules-projectapi">
-                <property name="jsf.language" value="Facelets"/>
-            </module>
-            <module name="org-netbeans-modules-projectimport-eclipse-core"/>
-        </preferences>
-        <web-data xmlns="http://www.netbeans.org/ns/freeform-project-web/1">
-            <web-module>
-                <doc-root>web</doc-root>
-                <classpath/>
-                <j2ee-spec-level>1.5</j2ee-spec-level>
-            </web-module>
-        </web-data>
-    </configuration>
-</project>
diff --git a/jsf-ri/systest/src/com/sun/faces/CustomMessages.properties b/jsf-ri/systest/src/com/sun/faces/CustomMessages.properties
deleted file mode 100644
index df211f7..0000000
--- a/jsf-ri/systest/src/com/sun/faces/CustomMessages.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-javax.faces.validator.DoubleRangeValidator.LIMIT=Validation Error:This summary replaces the RI summary
-Custom1A=This Is Custom1A Summary
-Custom1A_detail=This Is Custom1A Detail
-Custom1B=This Is Custom1B Summary
-Custom1B_detail=This Is Custom1B Detail
-Custom1C=This Is Custom1C Summary
-Custom1C_detail=This Is Custom1C Detail
-Custom2A=This Is Custom2A Summary
-Custom2A_detail=This Is Custom2A Detail
-Custom2B=This Is Custom2B Summary
-Custom2B_detail=This Is Custom2B Detail
-Custom2C=This Is Custom2C Summary
-Custom2C_detail=This Is Custom2C Detail
-
-BigDecimalLabel=BigDecimal2
-
-
-
diff --git a/jsf-ri/systest/src/com/sun/faces/CustomMessages_en.properties b/jsf-ri/systest/src/com/sun/faces/CustomMessages_en.properties
deleted file mode 100644
index 7adaa92..0000000
--- a/jsf-ri/systest/src/com/sun/faces/CustomMessages_en.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-Custom1B=This Is Custom1B Summary (en)
-Custom1B_detail=This Is Custom1B Detail (en)
-Custom2B=This Is Custom2B Summary (en)
-Custom2B_detail=This Is Custom2B Detail (en)
-
diff --git a/jsf-ri/systest/src/com/sun/faces/CustomMessages_fr.properties b/jsf-ri/systest/src/com/sun/faces/CustomMessages_fr.properties
deleted file mode 100644
index d7aea9c..0000000
--- a/jsf-ri/systest/src/com/sun/faces/CustomMessages_fr.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-Custom1B=This Is Custom1B Summary (fr)
-Custom1B_detail=This Is Custom1B Detail (fr)
-Custom2B=This Is Custom2B Summary (fr)
-Custom2B_detail=This Is Custom2B Detail (fr)
-
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxAllKeywordTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxAllKeywordTestCase.java
deleted file mode 100644
index 29d384d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxAllKeywordTestCase.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AjaxAllKeywordTestCase extends AbstractTestCase {
-
-    public AjaxAllKeywordTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxAllKeywordTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxAllKeyword1() throws Exception {
-
-        getPage("/faces/ajax/ajaxAllKeyword1.xhtml");
-        System.out.println("Start ajax All Keyword test");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","testtext");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:allKeyword");
-        HtmlPage lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds - if the page is rewritten, this will be the same
-        checkTrue("form1:out1","testtext");
-
-    }
-    public void testAjaxAllKeyword2() throws Exception {
-
-        getPage("/faces/ajax/ajaxAllKeyword2.xhtml");
-        System.out.println("Start ajax All Keyword test");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","testtext");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:allKeyword");
-        HtmlPage lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds - if the page is rewritten, this will be the same
-        checkTrue("form1:out1","testtext");
-
-    }
-    public void testAjaxAllKeyword3() throws Exception {
-
-        getPage("/faces/ajax/ajaxAllKeyword3.xhtml");
-        System.out.println("Start ajax All Keyword test");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","testtext");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:allKeyword");
-        HtmlPage lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds - if the page is rewritten, this will be the same
-        checkTrue("form1:out1","testtext");
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxAttrsTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxAttrsTestCase.java
deleted file mode 100644
index 6f2265d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxAttrsTestCase.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.CollectingAlertHandler;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class AjaxAttrsTestCase extends AbstractTestCase {
-
-
-     public AjaxAttrsTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxAttrsTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testAjaxAttrs() throws Exception {
-
-        List<String> collectedAlerts = new ArrayList<String>(1);
-        client.setAlertHandler(new CollectingAlertHandler(collectedAlerts));
-
-        HtmlPage page = getPage("/faces/ajax/ajaxAttrs.xhtml");
-
-        HtmlSubmitInput button = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:attr");
-        assertNotNull(button);
-
-        String value = button.getValueAttribute();
-
-        assertTrue("expected Dummy but got "+value, "Dummy".equals(value));
-
-        page = button.click();
-
-        button = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:attr");
-
-        value = button.getValueAttribute();
-
-        assertTrue("expected New Value but got "+value, "New Value".equals(value));
-        
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxBadXMLTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxBadXMLTestCase.java
deleted file mode 100644
index fa1204f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxBadXMLTestCase.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AjaxBadXMLTestCase extends AbstractTestCase {
-
-    public AjaxBadXMLTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxBadXMLTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // Test basic ajax functionality
-    public void testAjaxBadXML() throws Exception {
-        getPage("/faces/ajax/ajaxInvalidXML.xhtml");
-
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:bad");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("h2","Bread & Butter");
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxEchoTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxEchoTestCase.java
deleted file mode 100644
index 10b3ac5..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxEchoTestCase.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AjaxEchoTestCase  extends AbstractTestCase {
-
-    public AjaxEchoTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxEchoTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // Test basic ajax functionality
-    public void testAjaxEcho() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("hello");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","hello");
-    }
-
-    // Test using a valid string as the request identifier, instead of an element
-    public void testAjaxEchoWithStringId() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("hello");
-
-        // Submit the ajax request
-        HtmlSubmitInput button2 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button2");
-        lastpage = (HtmlPage) button2.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","hello");
-    }
-
-    // Test basic ajax functionality
-    public void testAjaxEchoLT() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("<");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","<");
-    }
-
-
-    /*
-     * Regression test for bug #939
-     */
-    public void testCdataEscape1() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("]]>");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","]]>");
-    }
-    public void testCdataEscape2() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("<!");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","<!");
-    }
-    public void testCdataEscape3() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("]");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","]");
-    }
-    public void testCdataEscape4() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("]");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","]");
-    }
-    public void testCdataEscape5() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("<![CDATA[ ]]>");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","<![CDATA[ ]]>");
-    }
-
-    // Test for bug #1284
-    public void testCdataEscape6() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("[");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","[");
-    }
-    // Test for bug #1284
-    public void testCdataEscape7() throws Exception {
-        getPage("/faces/ajax/ajaxEcho.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("var a=[");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","var a=[");
-    }
-
-    public void testProjectStage() throws Exception {
-        getPage("/faces/ajax/ajaxProjectStage.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("stage","Development");
-    }
-
-    public void testTextArea() throws Exception {
-        getPage("/faces/ajax/ajaxEchoArea.xhtml");
-
-        // First we'll check the first page was output correctly
-        checkTrue("form1:out1","");
-        checkTrue("form1:in1","");
-
-        HtmlTextArea in1 = (HtmlTextArea) lastpage.getHtmlElementById("form1:in1");
-
-        in1.type("test value");
-
-        // Submit the ajax request
-        HtmlButtonInput button1 = (HtmlButtonInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("form1:out1","test value");
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxErrorTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxErrorTestCase.java
deleted file mode 100644
index 70b26e5..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxErrorTestCase.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.CollectingAlertHandler;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class AjaxErrorTestCase extends AbstractTestCase {
-
-
-     public AjaxErrorTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxErrorTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testAjaxError() throws Exception {
-
-        List<String> collectedAlerts = new ArrayList<String>(1);
-        client.setAlertHandler(new CollectingAlertHandler(collectedAlerts));
-
-        HtmlPage page = getPage("/faces/ajax/ajaxError2.xhtml");
-
-        HtmlSubmitInput button = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:error");
-        assertNotNull(button);
-
-        button.click();
-
-        assertEquals(1, collectedAlerts.size());
-        assertEquals("serverError: errorName Error Message", collectedAlerts.get(0));
-        
-    }
-
-
-    public void testAjaxServerError() throws Exception {
-
-        List<String> collectedAlerts = new ArrayList<String>(1);
-        client.setAlertHandler(new CollectingAlertHandler(collectedAlerts));
-
-        HtmlPage page = getPage("/faces/ajax/ajaxError.xhtml");
-
-        HtmlSubmitInput button = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:eval");
-        assertNotNull(button);
-
-        button.click();
-
-        assertEquals(1, collectedAlerts.size());
-        String serverError = "serverError: class javax.faces.el.MethodNotFoundException /ajax/ajaxError.xhtml @52,76 action=\"#{evalBean.error}\": Method not found:";
-        assertEquals(serverError.substring(0,130), collectedAlerts.get(0).substring(0,130));
-
-        page = getPage("/faces/ajax/ajaxError3.xhtml");
-        button = (HtmlSubmitInput) getInputContainingGivenId(page, "form:error");
-        assertNotNull(button);
-
-        HtmlPage page1 = button.click();
-        HtmlElement element = page1.getElementById("statusArea");
-        assertNotNull(element);
-        String statusText = element.getAttribute("value");
-        assertTrue(statusText.equals("Name: form:error Error: serverError "));
-
-    }
-
-    public void testAjaxMalformedXMLError() throws Exception {
-
-        List<String> collectedAlerts = new ArrayList<String>(1);
-        client.setAlertHandler(new CollectingAlertHandler(collectedAlerts));
-
-        HtmlPage page = getPage("/faces/ajax/ajaxMalformedXML.xhtml");
-
-        HtmlSubmitInput button = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:error");
-        assertNotNull(button);
-
-        button.click();
-
-        assertEquals(1, collectedAlerts.size());
-        assertEquals("malformedXML: During update: doesntExist not found", collectedAlerts.get(0));
-
-}
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxEvalTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxEvalTestCase.java
deleted file mode 100644
index 8cbb904..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxEvalTestCase.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.CollectingAlertHandler;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class AjaxEvalTestCase extends AbstractTestCase {
-
-
-     public AjaxEvalTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxEvalTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testAjaxEval() throws Exception {
-
-        List<String> collectedAlerts = new ArrayList<String>(1);
-        client.setAlertHandler(new CollectingAlertHandler(collectedAlerts));
-
-        HtmlPage page = getPage("/faces/ajax/ajaxEval.xhtml");
-
-        HtmlSubmitInput button = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:eval");
-        assertNotNull(button);
-
-        button.click();
-
-        assertEquals(1, collectedAlerts.size());
-        assertEquals("test", collectedAlerts.get(0));
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxIncludedTextTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxIncludedTextTestCase.java
deleted file mode 100644
index f78d9d1..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxIncludedTextTestCase.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AjaxIncludedTextTestCase  extends AbstractTestCase {
-
-    public AjaxIncludedTextTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxIncludedTextTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxIncludedText() throws Exception {
-        getPage("/faces/ajax/ajaxIncludedText.xhtml");
-        System.out.println("Start ajax included text test");
-
-        // First we'll check the first page was output correctly
-        checkTrue("finalSpan1","Text should stay");
-        checkTrue("finalSpan2","Text should stay");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:refresh");
-        lastpage = (HtmlPage) button1.click();
-        HtmlSubmitInput button2 = (HtmlSubmitInput) lastpage.getHtmlElementById("form2:refresh");
-        lastpage = (HtmlPage) button2.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("finalSpan1","Text should stay");
-        checkTrue("finalSpan2","Text should stay");
-    }
-}
-
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxInsertDeleteTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxInsertDeleteTestCase.java
deleted file mode 100644
index 35c2555..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxInsertDeleteTestCase.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlHorizontalRule;
-import com.gargoylesoftware.htmlunit.html.HtmlHeading2;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AjaxInsertDeleteTestCase extends AbstractTestCase {
-
-    public AjaxInsertDeleteTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxInsertDeleteTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testInsertDelete() throws Exception {
-
-        HtmlPage page = getPage("/faces/ajax/ajaxInsertDelete.xhtml");
-
-        assertNull(getBeforeHeading(page));
-        assertNull(getAfterHeading(page));
-
-        HtmlSubmitInput beforeButton = getBeforeButton(page);
-        assertNotNull(beforeButton);
-        page = beforeButton.click();
-
-        HtmlHeading2 beforeHeading = getBeforeHeading(page);
-        assertNotNull(beforeHeading);
-        assertTrue(beforeHeading.getNextSibling() instanceof HtmlHorizontalRule);
-
-        HtmlSubmitInput afterButton = getAfterButton(page);
-        assertNotNull(afterButton);
-        page = afterButton.click();
-
-        HtmlHeading2 afterHeading = getAfterHeading(page);
-        assertNotNull(afterHeading);
-        assertTrue(afterHeading.getPreviousSibling() instanceof HtmlHorizontalRule);
-
-        HtmlSubmitInput removeBefore = getRemoveBeforeButton(page);
-        assertNotNull(removeBefore);
-        page = removeBefore.click();
-
-        assertNull(getBeforeHeading(page));
-        assertNotNull(getAfterHeading(page));
-
-        HtmlSubmitInput removeAfter = getRemoveAfterButton(page);
-        assertNotNull(removeAfter);
-        page = removeAfter.click();
-
-        assertNull(getBeforeHeading(page));
-        assertNull(getAfterHeading(page));
-
-    }
-
-
-    // --------------------------------------------------------  Private Methods
-
-
-    private HtmlSubmitInput getBeforeButton(HtmlPage page) {
-
-        return (HtmlSubmitInput) getInputContainingGivenId(page, "form1:before");
-
-    }
-
-
-    private HtmlSubmitInput getAfterButton(HtmlPage page) {
-
-        return (HtmlSubmitInput) getInputContainingGivenId(page, "form1:after");
-
-    }
-
-
-    private HtmlSubmitInput getRemoveBeforeButton(HtmlPage page) {
-
-        return (HtmlSubmitInput) getInputContainingGivenId(page, "form1:removeBefore");
-
-    }
-
-
-    private HtmlSubmitInput getRemoveAfterButton(HtmlPage page) {
-
-        return (HtmlSubmitInput) getInputContainingGivenId(page, "form1:removeAfter");
-
-    }
-
-
-    private HtmlHeading2 getBeforeHeading(HtmlPage page) {
-
-        return (HtmlHeading2) page.getElementById("h2before");
-
-    }
-
-
-    private HtmlHeading2 getAfterHeading(HtmlPage page) {
-
-        return (HtmlHeading2) page.getElementById("h2after");
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxMessageTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxMessageTestCase.java
deleted file mode 100644
index 65969bb..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxMessageTestCase.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.sun.faces.render.MessageRenderTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-import com.gargoylesoftware.htmlunit.javascript.host.Node;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AjaxMessageTestCase extends AbstractTestCase {
-
-    public AjaxMessageTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxMessageTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testCommandButtonButton() throws Exception {
-        getPage("/faces/ajax/ajaxMessage.xhtml");
-
-
-        // Check that ids were rendered
-        try {
-            lastpage.getHtmlElementById("testform1:msgs");
-        } catch (Exception e) {
-            fail("testform1:msgs not rendered");
-        }
-        try {
-            lastpage.getHtmlElementById("testform1a:msgs");
-        } catch (Exception e) {
-            fail("testform1a:msgs not rendered");
-        }
-        try {
-            lastpage.getHtmlElementById("testform2:msg");
-        } catch (Exception e) {
-            fail("testform2:msg not rendered");
-        }
-
-        // check that other ids weren't
-
-        try {
-            lastpage.getHtmlElementById("testform3:msgs");
-            fail("testform3:msgs rendered - not correct");
-        } catch (Exception e) {
-            //  Success
-        }
-        try {
-            lastpage.getHtmlElementById("testform3a:msgs");
-            fail("testform3:msgs rendered - not correct");
-        } catch (Exception e) {
-            //  Success
-        }
-        try {
-            lastpage.getHtmlElementById("testform4:msg");
-            fail("testform4:msg rendered - not correct");
-        } catch (Exception e) {
-            //  Success
-        }
-
-        // Check initial state
-        checkTrue("testform1:in1","0");
-        checkTrue("testform1a:in1","0");
-        checkTrue("testform2:in1","0");
-        checkTrue("testform3:in1","0");
-        checkTrue("testform3a:in1","0");
-        checkTrue("testform4:in1","0");
-
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("testform1:in1");
-
-        in1.type("1");
-
-        // Submit the ajax request
-        HtmlSubmitInput button2 = (HtmlSubmitInput) lastpage.getHtmlElementById("testform1:button2");
-        lastpage = (HtmlPage) button2.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("testform1:in1","1");
-
-        // And that others weren't effected
-        checkTrue("testform1a:in1","0");
-        checkTrue("testform2:in1","0");
-        checkTrue("testform3:in1","0");
-        checkTrue("testform3a:in1","0");
-        checkTrue("testform4:in1","0");
-
-
-        in1 = (HtmlTextInput) lastpage.getHtmlElementById("testform1:in1");
-
-        in1.type("a");
-
-        // Submit the ajax request
-        button2 = (HtmlSubmitInput) lastpage.getHtmlElementById("testform1:button2");
-        lastpage = (HtmlPage) button2.click();
-
-        HtmlUnorderedList ul = (HtmlUnorderedList) lastpage.getHtmlElementById("testform1:msgs");
-        DomNode node = ul.getFirstChild();
-        System.out.println(node.asText());
-        assertTrue("not equal to: testform1:in1: '1a' must be a number consisting of one or more digits. ",
-                node.asText().trim().equals("testform1:in1: '1a' must be a number consisting of one or more digits."));
-
-
-        checkTrue("testform1a:in1","0");
-        checkTrue("testform2:in1","0");
-        checkTrue("testform3:in1","0");
-        checkTrue("testform3a:in1","0");
-        checkTrue("testform4:in1","0");
-
-        // RELEASE_PENDING
-        // FINISH WRITING TESTS FOR OTHER 5 TEST CASES
-
-        
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxMultiformTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxMultiformTestCase.java
deleted file mode 100644
index 24451a7..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxMultiformTestCase.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class AjaxMultiformTestCase extends AbstractTestCase {
-
-    public AjaxMultiformTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxMultiformTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxMultiform() throws Exception {
-        getPage("/faces/ajax/ajaxMultiform.xhtml");
-        System.out.println("Start ajax multiform test");
-        // First we'll check the first page was output correctly
-        checkTrue("countForm1:out1","0");
-        checkTrue("countForm2:out1","1");
-        checkTrue("countForm3:out1","2");
-        checkTrue("out2","3");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm1:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("countForm1:out1","4");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","3");
-
-        // Submit the ajax request
-        button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm2:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("countForm2:out1","5");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","3");
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRedirectTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRedirectTestCase.java
deleted file mode 100644
index 57dfa56..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRedirectTestCase.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class AjaxRedirectTestCase extends AbstractTestCase {
-
-    public AjaxRedirectTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxRedirectTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testAjaxRedirect() throws Exception {
-
-        HtmlPage page = getPage("/faces/ajax/ajaxRedirect.xhtml");
-        HtmlSubmitInput button = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:redirect");
-        assertNotNull(button);
-
-        page = button.click();
-
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(1);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals(1, spans.size());
-        HtmlSpan span = spans.get(0);
-        assertEquals("Redirect Target", span.asText());
-        
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestMultiRenderTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestMultiRenderTestCase.java
deleted file mode 100644
index fcd0c01..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestMultiRenderTestCase.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-
-public class AjaxRequestMultiRenderTestCase extends AbstractTestCase {
-
-    public AjaxRequestMultiRenderTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxRequestMultiRenderTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxMultiRender() throws Exception {
-        getPage("/faces/ajax/ajaxRequestMultiRender.xhtml");
-        System.out.println("Start ajax multi render test");
-
-        // First we'll check the first page was output correctly
-        assertTrue(check("out1","0"));
-        assertTrue(check("out2","0"));
-        assertTrue(check("out3","0"));
-        assertTrue(check("out4","0"));
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the request succeeds
-        assertTrue(check("out1","1"));
-        assertTrue(check("out2","1"));
-        assertTrue(check("out3","1"));
-
-        // Check that the request did NOT update the rest of the page.
-        assertTrue(check("out4","0"));
-
-        // Submit the reset
-        HtmlSubmitInput reset = (HtmlSubmitInput) lastpage.getHtmlElementById("reset");
-        lastpage = (HtmlPage) reset.click();
-
-        // Check that reset succeeds
-        assertTrue(check("out1","0"));
-        assertTrue(check("out2","0"));
-        assertTrue(check("out3","0"));
-        assertTrue(check("out4","0"));
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestScriptTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestScriptTestCase.java
deleted file mode 100644
index 14938e4..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestScriptTestCase.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-
-public class AjaxRequestScriptTestCase extends AbstractTestCase {
-
-    public AjaxRequestScriptTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxRequestScriptTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxAndScript() throws Exception {
-        getPage("/faces/ajax/ajaxIncludedScript.xhtml");
-        System.out.println("Start ajax script test");
-
-        // First we'll check the first page was output correctly
-        assertTrue(check("countForm:out1","0"));
-        assertTrue(check("out2","1"));
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button1");
-        HtmlPage lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        assertTrue(check("countForm:out1","2"));
-
-        // Check that the request did NOT update the rest of the page.
-        assertTrue(check("out2","1"));
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestTestCase.java
deleted file mode 100644
index 6b4c441..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRequestTestCase.java
+++ /dev/null
@@ -1,502 +0,0 @@
-
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-
-public class AjaxRequestTestCase extends AbstractTestCase {
-
-    public AjaxRequestTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxRequestTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxCount() throws Exception {
-        getPage("/faces/ajax/ajaxCount.xhtml");
-        System.out.println("Start ajax count test");
-
-        // First we'll check the first page was output correctly
-        assertTrue(check("countForm:out1","0"));
-        assertTrue(check("out2","1"));
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button1");
-        HtmlPage lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        assertTrue(check("countForm:out1","2"));
-
-        // Check that the request did NOT update the rest of the page.
-        assertTrue(check("out2","1"));
-    }
-
-    public void testAjaxRequestDefaultsButton() throws Exception {
-        System.out.println("Starting Request Defaults Button Test");
-        getPage("/faces/ajax/ajaxRequestDefaultsButton.xhtml");
-
-        String out1 = "form1:out1";
-        String out2 = "form1:out2";
-        String out3 = "out3";
-        String reload = "form1:reload";
-        String reset1 = "form1:reset1";
-        String reset2 = "form1:reset2";
-        String reset3 = "form1:reset3";
-        String reset4 = "form1:reset4";
-
-        // First, we'll test to make sure the initial values come out right
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"1"));
-        assertTrue(check(out3,"2"));
-
-        // Reload the page
-        HtmlSubmitInput button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"3"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Now, make the Ajax call to first reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset1);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the ajax request succeeds
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"1"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Now, make the Ajax call to second reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset2);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"1"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Now, make the Ajax call to third reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset3);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        assertTrue(check(out1,"1"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Now, Reload the page, to check that reset3 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"1"));
-        assertTrue(check(out3,"2"));
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"3"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Now, make the Ajax call to fourth reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset4);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        assertTrue(check(out1,"3"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Now, Reload the page, to check that reset4 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"1"));
-        assertTrue(check(out3,"2"));
-    }
-
-    public void testAjaxRequestDefaultsButtonNoPrepend() throws Exception {
-        System.out.println("Starting Request Defaults Button No Prepend Test");
-        getPage("/faces/ajax/ajaxRequestDefaultsButtonNoPrepend.xhtml");
-
-        String out1 = "out1";
-        String out2 = "out2";
-        String out3 = "out3";
-        String reload = "reload";
-        String reset1 = "reset1";
-        String reset2 = "reset2";
-        String reset3 = "reset3";
-        String reset4 = "reset4";
-
-
-        // First, we'll test to make sure the initial values come out right
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"1"));
-        assertTrue(check(out3,"2"));
-
-        // Reload the page
-        HtmlSubmitInput button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"3"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Now, make the Ajax call to first reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset1);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the ajax request succeeds
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"1"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Now, make the Ajax call to second reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset2);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"1"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Now, make the Ajax call to third reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset3);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        assertTrue(check(out1,"1"));
-        assertTrue(check(out2,"2"));
-        assertTrue(check(out3,"3"));
-
-        // Now, Reload the page, to check that reset3 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"1"));
-        assertTrue(check(out3,"2"));
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        assertTrue(check(out1,"3"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Now, make the Ajax call to fourth reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset4);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        assertTrue(check(out1,"3"));
-        assertTrue(check(out2,"4"));
-        assertTrue(check(out3,"5"));
-
-        // Now, Reload the page, to check that reset4 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check(out1,"0"));
-        assertTrue(check(out2,"1"));
-        assertTrue(check(out3,"2"));
-    }
-
-    public void testAjaxRequestDefaultsEdit() throws Exception {
-        System.out.println("Starting Request Defaults Edit Test");
-        getPage("/faces/ajax/ajaxRequestDefaultsEdit.xhtml");
-
-        String out1 = "form1:out1";
-        String out2 = "form1:out2";
-        String out3 = "out3";
-        String echo1Out = "form1:echo1Out";
-        String echo2Out = "form1:echo2Out";
-        String echo3Out = "form1:echo3Out";
-        String echo4Out = "form1:echo4Out";
-        String edit1 = "form1:edit1";
-        String edit2 = "form1:edit2";
-        String edit3 = "form1:edit3";
-        String edit4 = "form1:edit4";
-        String refresh = "form1:refresh";
-
-        // First, we'll test to make sure the initial values come out right
-        assertTrue(check(out1,"echo"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-        assertTrue(check(echo1Out,""));
-        assertTrue(check(echo2Out,""));
-        assertTrue(check(echo3Out,""));
-        assertTrue(check(echo4Out,""));
-
-        // Next, enter data into first field
-        HtmlTextInput echo1 = ((HtmlTextInput)lastpage.getHtmlElementById(edit1));
-        echo1.focus();
-        echo1.type("test1");
-        echo1.blur();
-
-        // Refresh the panel to check the listener fired
-        HtmlSubmitInput button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo1Out,"test1"));
-        assertTrue(check(out1,"test1"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-
-        // Next, enter data into second field
-        HtmlTextInput echo2 = ((HtmlTextInput)lastpage.getHtmlElementById(edit2));
-        echo2.focus();
-        echo2.type("test2");
-        echo2.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo2Out,"test2"));
-        assertTrue(check(out1,"test2"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-
-        // Next, enter data into third field
-        HtmlTextInput echo3 = ((HtmlTextInput)lastpage.getHtmlElementById(edit3));
-        echo3.focus();
-        echo3.type("test3");
-        echo3.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo3Out,"test3"));
-        assertTrue(check(out1,"test3"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-
-        // Next, enter data into the fourth field
-        HtmlTextInput echo4 = ((HtmlTextInput)lastpage.getHtmlElementById(edit4));
-        echo4.focus();
-        echo4.type("test4");
-        echo4.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo4Out,"test4"));
-        assertTrue(check(out1,"test4"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-
-    }
-
-    public void testAjaxRequestDefaultsEditNoPrepend() throws Exception {
-        System.out.println("Starting Request Defaults Edit No Prepend Test");
-        getPage("/faces/ajax/ajaxRequestDefaultsEditNoPrepend.xhtml");
-
-        String out1 = "out1";
-        String out2 = "out2";
-        String out3 = "out3";
-        String echo1Out = "echo1Out";
-        String echo2Out = "echo2Out";
-        String echo3Out = "echo3Out";
-        String echo4Out = "echo4Out";
-        String edit1 = "edit1";
-        String edit2 = "edit2";
-        String edit3 = "edit3";
-        String edit4 = "edit4";
-        String refresh = "refresh";
-
-        // First, we'll test to make sure the initial values come out right
-        assertTrue(check(out1,"echo"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-        assertTrue(check(echo1Out,""));
-        assertTrue(check(echo2Out,""));
-        assertTrue(check(echo3Out,""));
-        assertTrue(check(echo4Out,""));
-
-        // Next, enter data into first field
-        HtmlTextInput echo1 = ((HtmlTextInput)lastpage.getHtmlElementById(edit1));
-        echo1.focus();
-        echo1.type("test1");
-        echo1.blur();
-
-        // Refresh the panel to check the listener fired
-        HtmlSubmitInput button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo1Out,"test1"));
-        assertTrue(check(out1,"test1"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-
-        // Next, enter data into second field
-        HtmlTextInput echo2 = ((HtmlTextInput)lastpage.getHtmlElementById(edit2));
-        echo2.focus();
-        echo2.type("test2");
-        echo2.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo2Out,"test2"));
-        assertTrue(check(out1,"test2"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-
-        // Next, enter data into third field
-        HtmlTextInput echo3 = ((HtmlTextInput)lastpage.getHtmlElementById(edit3));
-        echo3.focus();
-        echo3.type("test3");
-        echo3.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo3Out,"test3"));
-        assertTrue(check(out1,"test3"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-
-        // Next, enter data into the fourth field
-        HtmlTextInput echo4 = ((HtmlTextInput)lastpage.getHtmlElementById(edit4));
-        echo4.focus();
-        echo4.type("test4");
-        echo4.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        assertTrue(check(echo4Out,"test4"));
-        assertTrue(check(out1,"test4"));
-        assertTrue(check(out2,"echo"));
-        assertTrue(check(out3,"echo"));
-    }
-
-    public void testAjaxEvent() throws Exception {
-        getPage("/faces/ajax/ajaxEvent.xhtml");
-        System.out.println("Start ajax event test");
-
-        // First we'll check the first page was output correctly
-        assertTrue(check("countForm:out1","0"));
-        assertTrue(check("out2","1"));
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button1");
-        HtmlPage lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        assertTrue(check("countForm:out1","2"));
-
-        // Check that the request did NOT update the rest of the page.
-        assertTrue(check("out2","1"));
-
-        // Check that events were written to the page.
-        String statusArea = "Name: countForm:button1 Event: begin ";
-        statusArea = statusArea + "Name: countForm:button1 Event: complete " ;
-        statusArea = statusArea + "Name: countForm:button1 Event: success " ;
-        //System.out.println(statusArea);
-        //System.out.println(getText("statusArea"));
-        assertTrue(check("statusArea",statusArea));
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRerenderOtherFormTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRerenderOtherFormTestCase.java
deleted file mode 100644
index 12cce75..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxRerenderOtherFormTestCase.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.Page;
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AjaxRerenderOtherFormTestCase  extends AbstractTestCase {
-
-    public AjaxRerenderOtherFormTestCase(String name) {
-        super(name);
-    }
-
-    /*
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxRerenderOtherFormTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testRerenderingOtherForm() throws Exception {
-        HtmlPage htmlPage = getPage("/faces/ajax/ajaxRerenderOtherForm.xhtml");
-        
-        HtmlInput ajaxButton = getInputContainingGivenId(htmlPage, "button2");
-        HtmlPage rerenderedPage = ajaxButton.click();
-        
-        HtmlInput nonAjaxButton = getInputContainingGivenId(rerenderedPage, "button1");
-        HtmlPage finalPage = nonAjaxButton.click();
-        assertTrue(-1 != finalPage.asText().indexOf("It was a postback!!!"));
-        
-    }
-}
-
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxSelectTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxSelectTestCase.java
deleted file mode 100644
index 30e82a5..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxSelectTestCase.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.ajax;
-
-import com.gargoylesoftware.htmlunit.html.ClickableElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AjaxSelectTestCase extends AbstractTestCase {
-
-    public AjaxSelectTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxTagWrappingTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /*
-       Test each component to see that it behaves correctly when used with an Ajax tag
-     */
-    public void testAjaxSelect() throws Exception {
-        getPage("/faces/ajax/ajaxSelect.xhtml");
-
-        checkTrue("out", "Pending");
-
-        ClickableElement click = lastpage.getHtmlElementById("form:s1rad:0");
-
-        lastpage = click.click();
-
-        checkTrue("out", "radio-1");
-
-        HtmlSelect select = lastpage.getHtmlElementById("form:s1menu");
-
-        lastpage = (HtmlPage) select.setSelectedAttribute("2",true);
-
-        checkTrue("out", "menu-2");
-
-        select = lastpage.getHtmlElementById("form:s1list");
-
-        lastpage = (HtmlPage) select.setSelectedAttribute("2",true);
-
-        checkTrue("out", "list-2");
-
-        select = lastpage.getHtmlElementById("form:smlist");
-
-        lastpage = (HtmlPage) select.setSelectedAttribute("2",true);
-
-        checkTrue("out", "mlist-2");
-
-        click = lastpage.getHtmlElementById("form:smcheck:0");
-
-        lastpage = click.click();
-
-        checkTrue("out", "mcheck-1");
-
-        click = lastpage.getHtmlElementById("form:bool");
-
-        lastpage = click.click();
-
-        checkTrue("out", "PASSED");
-
-
-        // Now, reload everything and do it again.
-        // This tests for bug 1339
-        click = lastpage.getHtmlElementById("form:button");
-
-        click.click();
-
-        checkTrue("out", "Pending");
-
-        click = lastpage.getHtmlElementById("form:s1rad:0");
-
-        lastpage = click.click();
-
-        checkTrue("out", "radio-1");
-
-        select = lastpage.getHtmlElementById("form:s1menu");
-
-        lastpage = (HtmlPage) select.setSelectedAttribute("2",true);
-
-        checkTrue("out", "menu-2");
-
-        select = lastpage.getHtmlElementById("form:s1list");
-
-        lastpage = (HtmlPage) select.setSelectedAttribute("2",true);
-
-        checkTrue("out", "list-2");
-
-        select = lastpage.getHtmlElementById("form:smlist");
-
-        lastpage = (HtmlPage) select.setSelectedAttribute("2",true);
-
-        checkTrue("out", "mlist-2");
-
-        click = lastpage.getHtmlElementById("form:smcheck:0");
-
-        lastpage = click.click();
-
-        checkTrue("out", "mcheck-1");
-
-        click = lastpage.getHtmlElementById("form:bool");
-
-        lastpage = click.click();
-
-        checkTrue("out", "PASSED");
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTableTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTableTestCase.java
deleted file mode 100644
index 8c92452..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTableTestCase.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class AjaxTableTestCase extends AbstractTestCase {
-
-    public AjaxTableTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxTableTestCase.class));
-    }
-
-
-    /*
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /*
-       Test each component to see that it behaves correctly when used with an Ajax tag
-     */
-    public void testAjaxTable() throws Exception {
-        getPage("/faces/ajax/ajaxTable.xhtml");
-        System.out.println("Start ajax table test");
-
-        assertTrue(check("table:2:inCity","Boston"));
-
-        // Check on the text field
-        HtmlTextInput intext = ((HtmlTextInput)lastpage.getHtmlElementById("table:2:inCity"));
-        intext.setValueAttribute("");
-        intext.focus();
-        intext.type("test");
-        intext.blur();
-
-        checkTrue("table:2:inCity","test");
-        System.out.println("Text Checked");
-
-        // Check on the checkbox
-
-        checkTrue("table:3:cheesepref","Eww");
-
-        HtmlCheckBoxInput checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("table:3:cheesecheck"));
-        lastpage = (HtmlPage)checked.click();
-
-        checkTrue("table:3:cheesepref","Cheese Please");
-        System.out.println("Boolean Checkbox Checked");
-
-        checkTrue("table:4:count", "4");
-        HtmlAnchor countlink = (HtmlAnchor) lastpage.getHtmlElementById("table:4:countlink");
-        lastpage = countlink.click();
-
-        checkTrue("table:4:count", "5");
-        checkTrue("count","1");
-
-
-        HtmlSubmitInput button = (HtmlSubmitInput)lastpage.getHtmlElementById("submitButton");
-        lastpage = button.click();
-        checkTrue("table:0:count", "6");
-        checkTrue("count","1");
-        
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagEventAttributeTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagEventAttributeTestCase.java
deleted file mode 100644
index 820e97d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagEventAttributeTestCase.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class AjaxTagEventAttributeTestCase extends AbstractTestCase {
-
-    public AjaxTagEventAttributeTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxTagEventAttributeTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxTagEventAttribute() throws Exception {
-        getPage("/faces/ajax/ajaxTagEventAttribute.xhtml");
-        System.out.println("Start ajax tag event attribute test");
-
-        // Check initial values
-        checkTrue("out1","0");
-        checkTrue("out2","1");
-        checkTrue("out3","");
-        checkTrue("checkedvalue1","false");
-        checkTrue("checkedvalue2","false");
-
-        // Press Count
-        HtmlSubmitInput button = (HtmlSubmitInput) lastpage.getHtmlElementById("button");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("out1","0");
-        checkTrue("out2","0");
-
-        HtmlInput input = (HtmlInput) lastpage.getHtmlElementById("in1");
-        lastpage = (HtmlPage) input.setValueAttribute("test");
-
-        checkTrue("out3","test");
-
-
-        // Check ajax checkbox
-        HtmlCheckBoxInput checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("checkbox1"));
-        lastpage = (HtmlPage)checked.click();
-
-        checkTrue("checkedvalue1","true");
-
-        // Check ajax checkbox
-        checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("checkbox2"));
-        lastpage = (HtmlPage)checked.click();
-
-        checkTrue("checkedvalue2","true");
-
-
-
-        // Check that all ajax requests didn't result in a reload
-        checkTrue("out4","2");
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagEventWrappingTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagEventWrappingTestCase.java
deleted file mode 100644
index 66657d5..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagEventWrappingTestCase.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class AjaxTagEventWrappingTestCase extends AbstractTestCase {
-
-    public AjaxTagEventWrappingTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxTagEventWrappingTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxTagEventWrapping() throws Exception {
-        getPage("/faces/ajax/ajaxTagEventWrapping.xhtml");
-        System.out.println("Start ajax tag event wrapping test");
-
-        // Check initial values
-        checkTrue("out1","0");
-        checkTrue("say","init");
-        checkTrue("paramOut","");
-        checkTrue("out2","1");
-
-        // Press Count
-        HtmlSubmitInput button = (HtmlSubmitInput) lastpage.getHtmlElementById("button1");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("out1","2");
-        checkTrue("out2","1");
-
-        // Press Say
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("button2");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("say","1");
-        checkTrue("out1","2");
-        checkTrue("out2","1");
-
-        // Press Count and Say
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("button3");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("say","2");
-        checkTrue("out1","3");
-        checkTrue("out2","1");
-
-        // Press Param
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("button4");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("say","init");
-        checkTrue("out1","4");
-        checkTrue("out2","5");
-        checkTrue("paramOut","testval");
-
-        // Reset Page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("reset");
-        lastpage = (HtmlPage) button.click();
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("reload");
-        lastpage = (HtmlPage) button.click();
-
-        // Check initial values
-        checkTrue("out1","0");
-        checkTrue("say","init");
-        checkTrue("paramOut","");
-        checkTrue("out2","1");
-
-        // Press Count and Param
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("button5");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("out1","2");
-        checkTrue("say","init");
-        checkTrue("paramOut","testval");
-        checkTrue("out2","1");
-
-        // Reset Page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("reset");
-        lastpage = (HtmlPage) button.click();
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("reload");
-        lastpage = (HtmlPage) button.click();
-
-        // Check initial values
-        checkTrue("out1","0");
-        checkTrue("say","init");
-        checkTrue("paramOut","");
-        checkTrue("out2","1");
-
-        // Press Count and Say and Param
-        /*  Test is faulty - commenting out - race to see if say is actually set
-
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("button6");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("out1","2");
-        checkTrue("say","1");
-        checkTrue("paramOut","testval");
-        checkTrue("out2","1");
-        */
-        // leaving out button 7
-
-        // Reset Page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("reset");
-        lastpage = (HtmlPage) button.click();
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("reload");
-        lastpage = (HtmlPage) button.click();
-
-        // Check initial values
-        checkTrue("out1","0");
-        checkTrue("say","init");
-        checkTrue("paramOut","");
-        checkTrue("out2","1");
-
-
-        // Check ajax checkbox
-        HtmlCheckBoxInput checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("checkbox1"));
-        lastpage = (HtmlPage)checked.click();
-
-        System.out.println(getText("checkedvalue1"));
-        checkTrue("checkedvalue1","true");
-        checkTrue("out2","1");
-
-        // Check ajax + userwrap checkbox
-        checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("checkbox2"));
-        lastpage = (HtmlPage)checked.click();
-
-        checkTrue("checkedvalue2","true");
-        checkTrue("say","1");
-        checkTrue("out2","1");
-
-        // Check user onchange checkbox
-        checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("checkbox3"));
-        lastpage = (HtmlPage)checked.click();
-
-        checkTrue("checkedvalue3","false");
-        checkTrue("say","2");
-        checkTrue("out2","1");
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagResolveTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagResolveTestCase.java
deleted file mode 100644
index fb78afe..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagResolveTestCase.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.AjaxController;
-import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
-
-public class AjaxTagResolveTestCase extends AbstractTestCase {
-
-    public AjaxTagResolveTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxTagResolveTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /*
-     * Check that the id's resolve correctly.
-     */
-    public void testAjaxTagWrapping() throws Exception {
-        getPage("/faces/ajax/ajaxTagResolve.xhtml");
-        System.out.println("Start ajax tag resolution test");
-
-        // First we'll check the first page was output correctly
-        assertTrue(check("form1:out1", "0"));
-        assertTrue(check("form1:out5", "1"));
-        assertTrue(check("form2:out2", "2"));
-        assertTrue(check("out3", "3"));
-        assertTrue(check("out4", "4"));
-
-        HtmlSubmitInput button;
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button1");
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check("form1:out1","5"));
-
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button2");
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check("form2:out2","6"));
-
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button3");
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check("out3","7"));
-
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button4");
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check("form1:out1","8"));
-
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("form1:button5");
-        lastpage = (HtmlPage) button.click();
-        assertTrue(check("form1:out1","9"));
-        assertTrue(check("form2:out2","10"));
-        assertTrue(check("out3","11"));
-
-        // Check that nothing updated that we didn't want
-        assertTrue(check("out4","4"));
-        assertTrue(check("form1:out5","1"));
-
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagTestCase.java
deleted file mode 100644
index c6f11a1..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagTestCase.java
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class AjaxTagTestCase extends AbstractTestCase {
-
-    public AjaxTagTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /*
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxTagTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testAjaxTagCount() throws Exception {
-        getPage("/faces/ajax/ajaxTagCount.xhtml");
-        System.out.println("Start ajax count test");
-        // First we'll check the first page was output correctly
-        checkTrue("countForm:out1","0");
-        checkTrue("out2","1");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("countForm:out1","2");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","1");
-    }
-
-    public void testAjaxTagMulti() throws Exception {
-        getPage("/faces/ajax/ajaxTagMulti.xhtml");
-        System.out.println("Start ajax tag multi test");
-        // First we'll check the first page was output correctly
-        checkTrue("countForm:out1","0");
-        checkTrue("countForm:out2","1");
-        checkTrue("countForm:out3","2");
-        checkTrue("outside","3");
-
-        // Press Count 1
-        HtmlSubmitInput button = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button1");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("countForm:out1","4");
-
-        // Press Count 2
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button2");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("countForm:out1","5");
-        checkTrue("countForm:out2","6");
-
-        // Press Count all 3
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button3");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("countForm:out1","7");
-        checkTrue("countForm:out2","8");
-        checkTrue("countForm:out3","9");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("outside","3");
-
-        // Press Count form
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button4");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("countForm:out1","10");
-        checkTrue("countForm:out2","11");
-        checkTrue("countForm:out3","12");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("outside","3");
-
-        // Press Refresh form
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:reset");
-        lastpage = (HtmlPage) button.click();
-
-        checkTrue("countForm:out1","0");
-        checkTrue("countForm:out2","1");
-        checkTrue("countForm:out3","2");
-
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("outside","3");
-    }
-
-    public void testAjaxTagDefaultsButton() throws Exception {
-        System.out.println("Starting Ajax Tag Defaults Button Test");
-        getPage("/faces/ajax/ajaxTagDefaultsButton.xhtml");
-
-
-        String out1 = "form1:out1";
-        String out2 = "form1:out2";
-        String out3 = "out3";
-        String reload = "form1:reload";
-        String reset1 = "form1:reset1";
-        String reset2 = "form1:reset2";
-        String reset3 = "form1:reset3";
-        String reset4 = "form1:reset4";
-
-        // First, we'll test to make sure the initial values come out right
-        checkTrue(out1,"0");
-        checkTrue(out2,"1");
-        checkTrue(out3,"2");
-
-        // Reload the page
-        HtmlSubmitInput button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"3");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Now, make the Ajax call to first reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset1);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the ajax request succeeds
-        checkTrue(out1,"0");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"1");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Now, make the Ajax call to second reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset2);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"0");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"1");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Now, make the Ajax call to third reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset3);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        checkTrue(out1,"1");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Now, Reload the page, to check that reset3 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        checkTrue(out1,"0");
-        checkTrue(out2,"1");
-        checkTrue(out3,"2");
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"3");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Now, make the Ajax call to fourth reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset4);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        checkTrue(out1,"3");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Now, Reload the page, to check that reset4 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        checkTrue(out1,"0");
-        checkTrue(out2,"1");
-        checkTrue(out3,"2");
-    }
-
-    public void testAjaxTagDefaultsButtonNoPrepend() throws Exception {
-        System.out.println("Starting Tag Defaults Button No Prepend Test");
-        getPage("/faces/ajax/ajaxTagDefaultsButtonNoPrepend.xhtml");
-
-
-        String out1 = "out1";
-        String out2 = "out2";
-        String out3 = "out3";
-        String reload = "reload";
-        String reset1 = "reset1";
-        String reset2 = "reset2";
-        String reset3 = "reset3";
-        String reset4 = "reset4";
-
-
-        // First, we'll test to make sure the initial values come out right
-        checkTrue(out1,"0");
-        checkTrue(out2,"1");
-        checkTrue(out3,"2");
-
-        // Reload the page
-        HtmlSubmitInput button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"3");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Now, make the Ajax call to first reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset1);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the ajax request succeeds
-        checkTrue(out1,"0");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"1");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Now, make the Ajax call to second reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset2);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"0");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"1");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Now, make the Ajax call to third reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset3);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        checkTrue(out1,"1");
-        checkTrue(out2,"2");
-        checkTrue(out3,"3");
-
-        // Now, Reload the page, to check that reset3 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        checkTrue(out1,"0");
-        checkTrue(out2,"1");
-        checkTrue(out3,"2");
-
-        // Reload the page
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the page updated correctly
-        checkTrue(out1,"3");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Now, make the Ajax call to fourth reset button
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reset4);
-        lastpage = (HtmlPage) button.click();
-
-        // Check the page did *not* update
-        checkTrue(out1,"3");
-        checkTrue(out2,"4");
-        checkTrue(out3,"5");
-
-        // Now, Reload the page, to check that reset4 actually executed
-        button = (HtmlSubmitInput) lastpage.getHtmlElementById(reload);
-        lastpage = (HtmlPage) button.click();
-        checkTrue(out1,"0");
-        checkTrue(out2,"1");
-        checkTrue(out3,"2");
-    }
-
-    public void testAjaxTagDefaultsEdit() throws Exception {
-        System.out.println("Starting Tag Defaults Edit Test");
-        getPage("/faces/ajax/ajaxTagDefaultsEdit.xhtml");
-
-
-        String out1 = "form1:out1";
-        String out2 = "form1:out2";
-        String out3 = "out3";
-        String echo1Out = "form1:echo1Out";
-        String echo2Out = "form1:echo2Out";
-        String echo3Out = "form1:echo3Out";
-        String echo4Out = "form1:echo4Out";
-        String edit1 = "form1:edit1";
-        String edit2 = "form1:edit2";
-        String edit3 = "form1:edit3";
-        String edit4 = "form1:edit4";
-        String refresh = "form1:refresh";
-
-        // First, we'll test to make sure the initial values come out right
-        checkTrue(out1,"echo");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-        checkTrue(echo1Out,"");
-        checkTrue(echo2Out,"");
-        checkTrue(echo3Out,"");
-        checkTrue(echo4Out,"");
-
-        // Next, enter data into first field
-        HtmlTextInput echo1 = ((HtmlTextInput)lastpage.getHtmlElementById(edit1));
-        echo1.focus();
-        echo1.type("test1");
-        echo1.blur();
-
-        // Refresh the panel to check the listener fired
-        HtmlSubmitInput button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo1Out,"test1");
-        checkTrue(out1,"test1");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-        // Next, enter data into second field
-        HtmlTextInput echo2 = ((HtmlTextInput)lastpage.getHtmlElementById(edit2));
-        echo2.focus();
-        echo2.type("test2");
-        echo2.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo2Out,"test2");
-        checkTrue(out1,"test2");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-        // Next, enter data into third field
-        HtmlTextInput echo3 = ((HtmlTextInput)lastpage.getHtmlElementById(edit3));
-        echo3.focus();
-        echo3.type("test3");
-        echo3.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo3Out,"test3");
-        checkTrue(out1,"test3");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-        // Next, enter data into the fourth field
-        HtmlTextInput echo4 = ((HtmlTextInput)lastpage.getHtmlElementById(edit4));
-        echo4.focus();
-        echo4.type("test4");
-        echo4.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo4Out,"test4");
-        checkTrue(out1,"test4");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-
-    }
-
-    public void testAjaxTagDefaultsEditNoPrepend() throws Exception {
-        System.out.println("Starting Tag Defaults Edit No Prepend Test");
-        getPage("/faces/ajax/ajaxTagDefaultsEditNoPrepend.xhtml");
-
-        String out1 = "out1";
-        String out2 = "out2";
-        String out3 = "out3";
-        String echo1Out = "echo1Out";
-        String echo2Out = "echo2Out";
-        String echo3Out = "echo3Out";
-        String echo4Out = "echo4Out";
-        String edit1 = "edit1";
-        String edit2 = "edit2";
-        String edit3 = "edit3";
-        String edit4 = "edit4";
-        String refresh = "refresh";
-
-        // First, we'll test to make sure the initial values come out right
-        checkTrue(out1,"echo");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-        checkTrue(echo1Out,"");
-        checkTrue(echo2Out,"");
-        checkTrue(echo3Out,"");
-        checkTrue(echo4Out,"");
-
-        // Next, enter data into first field
-        HtmlTextInput echo1 = ((HtmlTextInput)lastpage.getHtmlElementById(edit1));
-        echo1.focus();
-        echo1.type("test1");
-        echo1.blur();
-
-        // Refresh the panel to check the listener fired
-        HtmlSubmitInput button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo1Out,"test1");
-        checkTrue(out1,"test1");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-        // Next, enter data into second field
-        HtmlTextInput echo2 = ((HtmlTextInput)lastpage.getHtmlElementById(edit2));
-        echo2.focus();
-        echo2.type("test2");
-        echo2.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo2Out,"test2");
-        checkTrue(out1,"test2");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-        // Next, enter data into third field
-        HtmlTextInput echo3 = ((HtmlTextInput)lastpage.getHtmlElementById(edit3));
-        echo3.focus();
-        echo3.type("test3");
-        echo3.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo3Out,"test3");
-        checkTrue(out1,"test3");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-        // Next, enter data into the fourth field
-        HtmlTextInput echo4 = ((HtmlTextInput)lastpage.getHtmlElementById(edit4));
-        echo4.focus();
-        echo4.type("test4");
-        echo4.blur();
-
-        // Refresh the panel to check the listener fired
-        button = lastpage.getHtmlElementById(refresh);
-        button.click();
-        checkTrue(echo4Out,"test4");
-        checkTrue(out1,"test4");
-        checkTrue(out2,"echo");
-        checkTrue(out3,"echo");
-
-    }
-
-    public void testAjaxTagEvent() throws Exception {
-        getPage("/faces/ajax/ajaxTagEvent.xhtml");
-        System.out.println("Start ajax tag event test");
-
-        // First we'll check the first page was output correctly
-        checkTrue("countForm:out1","0");
-        checkTrue("out2","1");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("countForm:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("countForm:out1","2");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","1");
-
-        // Check that events were written to the page.
-        String statusArea = "Name: countForm:button1 Event: begin ";
-        statusArea = statusArea + "Name: countForm:button1 Event: complete " ;
-        statusArea = statusArea + "Name: countForm:button1 Event: success " ;
-        //System.out.println(statusArea);
-        //System.out.println(getText("statusArea");
-        checkTrue("statusArea",statusArea);
-    }
-
-    public void testAjaxTagDisabled() throws Exception {
-        getPage("/faces/ajax/ajaxTagDisabled.xhtml");
-        System.out.println("Start ajax tag Disabled test");
-
-        // First we'll check the first page was output correctly
-        checkTrue("countForm:out1","0");
-        checkTrue("out2","1");
-
-        // Submit the ajax request
-        HtmlButtonInput button1 = (HtmlButtonInput) lastpage.getHtmlElementById("countForm:button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the button does nothing
-        checkTrue("countForm:out1","0");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","1");
-
-        // Submit the ajax request
-        HtmlButtonInput button2 = (HtmlButtonInput) lastpage.getHtmlElementById("countForm:button2");
-        lastpage = (HtmlPage) button2.click();
-
-        // Check that the request succeeds
-        checkTrue("countForm:out1","2");
-
-        // Check that the request did NOT update the rest of the page.
-        checkTrue("out2","1");
-
-    }
-
-    public void testAjaxTagKeywords() throws Exception {
-        getPage("/faces/ajax/ajaxTagKeywords.xhtml");
-        System.out.println("Start ajax tag Keyword test");
-
-        checkTrue("out1","0");
-        checkTrue("out2","1");
-        checkTrue("button3","2");
-        checkTrue("out3","3");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("button1");
-        lastpage = (HtmlPage) button1.click();
-
-
-        checkTrue("out1","4");
-        checkTrue("out2","5");
-        checkTrue("button3","6");
-        checkTrue("out3","7");
-
-        // Submit the ajax request
-        HtmlSubmitInput button2 = (HtmlSubmitInput) lastpage.getHtmlElementById("button2");
-        lastpage = (HtmlPage) button2.click();
-
-        checkTrue("out1","8");
-        checkTrue("out2","9");
-        checkTrue("button3","10");
-        checkTrue("out3","7");
-
-        // Submit the ajax request
-        HtmlSubmitInput button3 = (HtmlSubmitInput) lastpage.getHtmlElementById("button3");
-        lastpage = (HtmlPage) button3.click();
-
-        checkTrue("out1","8");
-        checkTrue("out2","9");
-        checkTrue("button3","11");
-        checkTrue("out3","7");
-
-        // Submit the ajax request
-        HtmlSubmitInput button4 = (HtmlSubmitInput) lastpage.getHtmlElementById("button4");
-        lastpage = (HtmlPage) button4.click();
-
-        checkTrue("out1","8");
-        checkTrue("out2","9");
-        checkTrue("button3","11");
-        checkTrue("out3","7");
-
-        // Submit the ajax request
-        HtmlSubmitInput button5 = (HtmlSubmitInput) lastpage.getHtmlElementById("button5");
-        lastpage = (HtmlPage) button5.click();
-
-        checkTrue("out1","8");
-        checkTrue("out2","12");
-        checkTrue("button3","11");
-        checkTrue("out3","7");
-        
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagWrappingTestCase.java b/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagWrappingTestCase.java
deleted file mode 100644
index c05c16e..0000000
--- a/jsf-ri/systest/src/com/sun/faces/ajax/AjaxTagWrappingTestCase.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ajax;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class AjaxTagWrappingTestCase extends AbstractTestCase {
-
-    public AjaxTagWrappingTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AjaxTagWrappingTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /*
-       Test each component to see that it behaves correctly when used with an Ajax tag
-     */
-    public void testAjaxTagWrapping() throws Exception {
-        getPage("/faces/ajax/ajaxTagWrapping.xhtml");
-        System.out.println("Start ajax tag wrapping test");
-
-        // First we'll check the first page was output correctly
-        checkTrue("out1", "0");
-        checkTrue("checkedvalue", "false");
-        checkTrue("outtext", "");
-
-        // Submit the ajax request
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("button1");
-        lastpage = (HtmlPage) button1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("out1","1");
-
-        HtmlAnchor link1 = (HtmlAnchor) lastpage.getHtmlElementById("link1");
-        lastpage = (HtmlPage) link1.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("out1","2");
-
-        // Submit the ajax request
-        HtmlSubmitInput button2 = (HtmlSubmitInput) lastpage.getHtmlElementById("button2");
-        lastpage = (HtmlPage) button2.click();
-
-        // Check that the ajax request succeeds
-        checkTrue("out1","3");
-
-        // Check on the text field
-        HtmlTextInput intext = ((HtmlTextInput)lastpage.getHtmlElementById("intext"));
-        intext.focus();
-        intext.type("test");
-        intext.blur();
-
-        checkTrue("outtext","test");
-
-        // Check on the text field
-        HtmlTextInput intext2 = ((HtmlTextInput)lastpage.getHtmlElementById("intext2"));
-        intext2.focus();
-        intext2.type("test2");
-        intext2.blur();
-
-        checkTrue("outtext","test2");
-
-        // Check on the checkbox
-        HtmlCheckBoxInput checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("checkbox"));
-        lastpage = (HtmlPage)checked.click();
-
-        checkTrue("checkedvalue","true");
-
-        // Check on the select many checkbox
-        checked = ((HtmlCheckBoxInput)lastpage.getHtmlElementById("manyCheckbox:0"));
-        lastpage = (HtmlPage)checked.click();
-
-        checkTrue("manyCheckedValue","Value: 1");
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBean.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBean.java
deleted file mode 100644
index 6885008..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBean.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.ManagedProperty;
-import javax.faces.bean.RequestScoped;
-
- at ManagedBean
- at RequestScoped
-public class AnnotatedBean {
-
-    @ManagedProperty(name="silly",value="#{requestScope.name}")
-    private String name;
-
-    public void setSilly(String name) {
-        this.name = name;
-    }
-
-    public String getSilly() {
-        return name;
-    }
-
-    @ManagedProperty(name="age",value="#{requestScope.age}")
-    private int age;
-
-    public int getAge() {
-        return age;
-    }
-
-    public void setAge(int age) {
-        this.age = age;
-    }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBehavior.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBehavior.java
deleted file mode 100644
index 780a6a3..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBehavior.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.component.behavior.ClientBehaviorBase;
-import javax.faces.component.behavior.FacesBehavior;
-
-/**
- * <p class="changed_added_2_0"></p>
- * @author asmirnov at exadel.com
- *
- */
- at FacesBehavior("AnnotatedBehavior")
-public class AnnotatedBehavior extends ClientBehaviorBase {
-
-	@Override
-	public String getRendererType() {
-		return "AnnotatedBehaviorRenderer";
-	}
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBehaviorRenderer.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBehaviorRenderer.java
deleted file mode 100644
index 6d42afd..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedBehaviorRenderer.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.FacesBehaviorRenderer;
-
-/**
- * <p class="changed_added_2_0"></p>
- * @author asmirnov at exadel.com
- *
- */
- at FacesBehaviorRenderer(rendererType="AnnotatedBehaviorRenderer")
-public class AnnotatedBehaviorRenderer extends ClientBehaviorRenderer {
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponent.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponent.java
deleted file mode 100644
index c6e6e54..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponent.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UIComponentBase;
-
-/**
- * Annotated Component
- */
- at FacesComponent(value = "AnnotatedComponent")
-public class AnnotatedComponent extends UIComponentBase {
-
-    public String getFamily() {
-        return "AnnotatedComponent";
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponentSystemEvent.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponentSystemEvent.java
deleted file mode 100644
index 70fa6e0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponentSystemEvent.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.component.UIComponent;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.NamedEvent;
-
-/**
- *
- */
- at NamedEvent
-public class AnnotatedComponentSystemEvent extends ComponentSystemEvent {
-    public AnnotatedComponentSystemEvent(UIComponent component) {
-        super(component);
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponentsTestCase.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponentsTestCase.java
deleted file mode 100644
index f534a4a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedComponentsTestCase.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import javax.faces.context.FacesContext;
-import javax.faces.application.Application;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.RenderKit;
-import javax.faces.render.Renderer;
-import javax.faces.FactoryFinder;
-import javax.faces.validator.Validator;
-import javax.faces.convert.Converter;
-import javax.faces.component.UIComponent;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.NamedEventManager;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.mgbean.ManagedBeanInfo;
-import com.sun.faces.mgbean.BeanBuilder;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AnnotatedComponentsTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public AnnotatedComponentsTestCase() {
-        super("AnnotatedComponentsTestCase");
-    }
-
-
-    public AnnotatedComponentsTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AnnotatedComponentsTestCase.class));
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testAnnotations() throws Exception {
-
-        HtmlPage page = getPage("/faces/annotationtest.xhtml");
-        List<HtmlSpan> output = new ArrayList<HtmlSpan>(1);
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(output.size() == 1);
-        HtmlSpan span = output.get(0);
-        assertTrue(span.asText().contains("true"));
-        
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedConverter.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedConverter.java
deleted file mode 100644
index 9e63078..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedConverter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.convert.Converter;
-import javax.faces.convert.FacesConverter;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.validator.FacesValidator;
-
-
- at FacesConverter(value = "AnnotatedConverter")
-public class AnnotatedConverter implements Converter {
-
-    public Object getAsObject(FacesContext context,
-                              UIComponent component,
-                              String value) {
-        return value;
-    }
-
-    public String getAsString(FacesContext context,
-                              UIComponent component,
-                              Object value) {
-        return value.toString();
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedConverterForClass.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedConverterForClass.java
deleted file mode 100644
index 704f920..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedConverterForClass.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.convert.Converter;
-import javax.faces.convert.FacesConverter;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.validator.FacesValidator;
-
-
- at FacesConverter(forClass=java.lang.CharSequence.class)
-public class AnnotatedConverterForClass implements Converter {
-
-    public Object getAsObject(FacesContext context,
-                              UIComponent component,
-                              String value) {
-        return value;
-    }
-
-    public String getAsString(FacesContext context,
-                              UIComponent component,
-                              Object value) {
-        return value.toString();
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedRenderer.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedRenderer.java
deleted file mode 100644
index 7d4e24d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedRenderer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.render.Renderer;
-import javax.faces.render.FacesRenderer;
-
- at FacesRenderer(renderKitId = "HTML_BASIC",
-               rendererType = "AnnotatedRenderer",
-               componentFamily = "AnnotatedRenderer")
-public class AnnotatedRenderer extends Renderer {
-
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedValidator.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedValidator.java
deleted file mode 100644
index c77bc25..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedValidator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.faces.validator.FacesValidator;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-
- at FacesValidator(value = "AnnotatedValidator")
-public class AnnotatedValidator implements Validator {
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value) throws ValidatorException {
-        return;
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedValidatorDefault.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedValidatorDefault.java
deleted file mode 100644
index 0664bb5..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotatedValidatorDefault.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.validator.FacesValidator;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-
-
- at FacesValidator(value = "AnnotatedValidatorDefault", isDefault = true)
-public class AnnotatedValidatorDefault implements Validator {
-
-    public void validate(FacesContext context,
-                         UIComponent component,
-                         Object value)
-    throws ValidatorException {
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotationTestBean.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnnotationTestBean.java
deleted file mode 100644
index 9b04f3f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnnotationTestBean.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.render.ClientBehaviorRenderer;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-import javax.faces.validator.Validator;
-import javax.servlet.http.HttpServletRequest;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.mgbean.BeanBuilder;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.mgbean.ManagedBeanInfo;
-
-
-public class AnnotationTestBean {
-
-    public String getTestResult() {
-
-        try {
-            testAnnotatedComponentsWebInfClasses();
-            testAnnotatedComponentsWebInfLib();
-            return Boolean.TRUE.toString();
-        } catch (Exception e) {
-            Logger.getAnonymousLogger().log(Level.SEVERE,
-                                            "AnnotationTestBean validation failure!",
-                                            e);
-            return Boolean.FALSE.toString();
-        }
-    }
-
-    private void testAnnotatedComponentsWebInfClasses() throws Exception {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        Application app = ctx.getApplication();
-
-        UIComponent c = app.createComponent("AnnotatedComponent");
-        assertNotNull(c);
-        assertTrue(c instanceof AnnotatedComponent);
-
-        Converter cv = app.createConverter("AnnotatedConverter");
-        assertNotNull(cv);
-        assertTrue(cv instanceof AnnotatedConverter);
-
-        cv = app.createConverter(java.lang.CharSequence.class);
-        assertNotNull(cv);
-        assertTrue(cv instanceof AnnotatedConverterForClass);
-
-        Validator v = app.createValidator("AnnotatedValidator");
-        assertNotNull(v);
-        assertTrue(v instanceof AnnotatedValidator);
-        Set<String> defaultValidatorIds = app.getDefaultValidatorInfo().keySet();
-        assertFalse(defaultValidatorIds.contains("AnnotatedValidator"));
-
-        // AnnotatedValidatorDefault has isDefault set to true.  Make sure
-        // it's present in the default validator info obtained above.
-        assertTrue(defaultValidatorIds.contains("AnnotatedValidatorDefault"));
-        
-        Behavior b = app.createBehavior("AnnotatedBehavior");
-        assertNotNull(b);
-        assertTrue(b instanceof AnnotatedBehavior);
-
-        RenderKitFactory rkf = (RenderKitFactory) FactoryFinder
-              .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk =
-              rkf.getRenderKit(ctx, RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        assertNotNull(rk);
-
-        Renderer r = rk.getRenderer("AnnotatedRenderer", "AnnotatedRenderer");
-        assertNotNull(r);
-        assertTrue(r instanceof AnnotatedRenderer);
-
-        ClientBehaviorRenderer br = rk.getClientBehaviorRenderer("AnnotatedBehaviorRenderer");
-        assertNotNull(br);
-        assertTrue(br instanceof AnnotatedBehaviorRenderer);
-        // validate class annotated with @ManagedBean
-        ApplicationAssociate associate =
-              ApplicationAssociate.getInstance(ctx.getExternalContext());
-        BeanManager manager = associate.getBeanManager();
-        BeanBuilder bean1 = manager.getBuilder("annotatedBean");
-        assertNotNull(bean1);
-        ManagedBeanInfo bean1Info = bean1.getManagedBeanInfo();
-        assertEquals("annotatedBean", bean1Info.getName());
-        assertEquals("request", bean1Info.getScope());
-        assertFalse(bean1Info.isEager());
-        List<ManagedBeanInfo.ManagedProperty> managedProperties =
-              bean1Info.getManagedProperties();
-        assertNotNull(managedProperties);
-        assertTrue(managedProperties.size() == 2);
-        ManagedBeanInfo.ManagedProperty p1 = managedProperties.get(0);
-        assertEquals("silly", p1.getPropertyName());
-        assertEquals(String.class.getName(), p1.getPropertyClass());
-        assertEquals("#{requestScope.name}", p1.getPropertyValue());
-        ManagedBeanInfo.ManagedProperty p2 = managedProperties.get(1);
-        assertEquals("age", p2.getPropertyName());
-        assertEquals(Integer.TYPE.getName(), p2.getPropertyClass());
-        assertEquals("#{requestScope.age}", p2.getPropertyValue());
-        HttpServletRequest request = (HttpServletRequest) ctx.getExternalContext().getRequest();
-        request.setAttribute("name", "Bill");
-        request.setAttribute("age", 33);
-        AnnotatedBean bean1Instance =
-              (AnnotatedBean) manager.create("annotatedBean", ctx);
-        assertEquals("Bill", bean1Instance.getSilly());
-        assertEquals(33, bean1Instance.getAge());
-        assertNotNull(request.getAttribute("annotatedBean"));
-        request.removeAttribute("annotatedBean");
-
-        // custom scope
-        ExpressionFactory factory = ctx.getApplication().getExpressionFactory();
-        ValueExpression ve = factory.createValueExpression(ctx.getELContext(),
-                                                           "#{customScopeAnnotatedBean.greeting}",
-                                                           String.class);
-        String greeting = (String) ve.getValue(ctx.getELContext());
-        assertEquals("Hello", greeting);
-        assertTrue(ctx.getExternalContext().getRequestMap().get("customScopeAnnotatedBean") instanceof CustomScopeAnnotatedBean);
-
-        // validate inheritance
-        ve = factory.createValueExpression(ctx.getELContext(),
-                                           "#{baseBean}",
-                                           Object.class);
-        BaseBeanImplementation impl = (BaseBeanImplementation) ve.getValue(ctx.getELContext());
-        assertEquals(20, impl.getAge());
-        assertEquals("Bill", impl.getName());
-
-    }
-
-    private void testAnnotatedComponentsWebInfLib() throws Exception {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        Application app = ctx.getApplication();
-
-        UIComponent c = app.createComponent("AnnotatedComponent2");
-        assertNotNull(c);
-        assertTrue(c.getClass().getName().endsWith("AnnotatedComponent2"));
-
-        Converter cv = app.createConverter("AnnotatedConverter2");
-        assertNotNull(cv);
-        assertTrue(cv.getClass().getName().endsWith("AnnotatedConverter2"));
-
-
-        Validator v = app.createValidator("AnnotatedValidator2");
-        assertNotNull(v);
-        assertTrue(v.getClass().getName().endsWith("AnnotatedValidator2"));
-        Set<String> defaultValidatorIds = app.getDefaultValidatorInfo().keySet();
-        assertFalse(defaultValidatorIds.contains("AnnotatedValidator2"));
-
-        RenderKitFactory rkf = (RenderKitFactory) FactoryFinder
-              .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk =
-              rkf.getRenderKit(ctx, RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        assertNotNull(rk);
-
-        Renderer r = rk.getRenderer("AnnotatedRenderer2", "AnnotatedRenderer2");
-        assertNotNull(r);
-        assertTrue(r.getClass().getName().endsWith("AnnotatedRenderer2"));
-
-        // Test default naming logic
-        assertNotNull(ApplicationAssociate.getInstance(ctx.getExternalContext())
-              .getNamedEventManager().getNamedEvent("com.sun.faces.annotation.annotatedComponentSystem"));
-        // Test short name
-        assertNotNull(ApplicationAssociate.getInstance(ctx.getExternalContext())
-              .getNamedEventManager().getNamedEvent("com.sun.faces.annotation.anotherAnnotatedComponentSystem"));
-        // Test FQCN
-        assertNotNull(ApplicationAssociate.getInstance(ctx.getExternalContext())
-              .getNamedEventManager().getNamedEvent(AnnotatedComponentSystemEvent.class.getName()));
-        assertNotNull(ApplicationAssociate.getInstance(ctx.getExternalContext())
-              .getNamedEventManager().getNamedEvent("explicitEventName"));
-
-        Object bean = ctx.getApplication().evaluateExpressionGet(ctx,
-                                                                 "#{annotatedBean4}",
-                                                                 Object.class);
-        assertNotNull(bean);
-        assertEquals("com.sun.faces.annotation.AnnotatedBean4", bean.getClass().getName());
-
-        // negative tests - if the jar files are metadata-complete, then their
-        // annotated classes shouldn't be scanned/registered
-
-        // faces-config is versioned at 2.0 and is marked metadata-complete
-        bean = ctx.getApplication().evaluateExpressionGet(ctx,
-                                                          "#{notFoundBean1}",
-                                                          Object.class);
-        assertTrue(bean == null);
-
-        // faces-config is versioned at 1.2 which assumes metadata-complete
-        bean = ctx.getApplication().evaluateExpressionGet(ctx,
-                                                          "#{notFoundBean2}",
-                                                          Object.class);
-        assertTrue(bean == null);
-
-    }
-
-    private void assertNotNull(Object v) {
-        if (v == null) {
-            throw new RuntimeException();
-        }
-    }
-
-    private void assertTrue(boolean t) {
-        if (!t) {
-            throw new RuntimeException();
-        }
-    }
-
-    private void assertEquals(Object o1, Object o2) {
-        if (o1 == null && o2 != null) {
-            throw new RuntimeException();
-        }
-        if (o2 == null && o1 != null) {
-            throw new RuntimeException();
-        }
-        if (o1 == null) {
-            return;
-        }
-        if (!o1.equals(o2)) {
-            throw new RuntimeException();
-        }
-
-    }
-
-    private void assertFalse(boolean t) {
-        if (t) {
-            throw new RuntimeException();
-        }
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/AnotherAnnotatedComponentSystemEvent.java b/jsf-ri/systest/src/com/sun/faces/annotation/AnotherAnnotatedComponentSystemEvent.java
deleted file mode 100644
index 8279828..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/AnotherAnnotatedComponentSystemEvent.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.component.UIComponent;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.NamedEvent;
-
-/**
- *
- */
- at NamedEvent(shortName="explicitEventName")
-public class AnotherAnnotatedComponentSystemEvent  extends ComponentSystemEvent {
-    public AnotherAnnotatedComponentSystemEvent(UIComponent component) {
-        super(component);
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/BaseBean.java b/jsf-ri/systest/src/com/sun/faces/annotation/BaseBean.java
deleted file mode 100644
index 8566d04..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/BaseBean.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.bean.ManagedProperty;
-
-
-public abstract class BaseBean {
-
-    @ManagedProperty(name="name", value="FAIL")
-    private String name;
-
-    @ManagedProperty(name="age", value="20")
-    private int age;
-
-
-    public int getAge() {
-        return age;
-    }
-
-    public void setAge(int age) {
-        this.age = age;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/BaseBeanImplementation.java b/jsf-ri/systest/src/com/sun/faces/annotation/BaseBeanImplementation.java
deleted file mode 100644
index 4a9e3c7..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/BaseBeanImplementation.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.bean.ManagedProperty;
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean(name="baseBean")
-public class BaseBeanImplementation extends BaseBean {
-
-    @ManagedProperty(name="name", value="Bill")
-    private String name;
-
-    @Override
-    public void setName(String name) {
-        super.setName(name);
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/annotation/CustomScopeAnnotatedBean.java b/jsf-ri/systest/src/com/sun/faces/annotation/CustomScopeAnnotatedBean.java
deleted file mode 100644
index b385ecb..0000000
--- a/jsf-ri/systest/src/com/sun/faces/annotation/CustomScopeAnnotatedBean.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.annotation;
-
-import javax.faces.bean.CustomScoped;
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean
- at CustomScoped(value="#{facesContext.externalContext.requestMap}")
-public class CustomScopeAnnotatedBean {
-
-    public String getGreeting() { return "Hello"; }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/application/ResetUniqueRequestIdBean.java b/jsf-ri/systest/src/com/sun/faces/application/ResetUniqueRequestIdBean.java
deleted file mode 100644
index c8d7bcc..0000000
--- a/jsf-ri/systest/src/com/sun/faces/application/ResetUniqueRequestIdBean.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.cactus.TestingUtil;
-import com.sun.faces.util.LRUMap;
-import com.sun.faces.util.RequestStateManager;
-
-public class ResetUniqueRequestIdBean {
-
-    public ResetUniqueRequestIdBean() {
-    }
-
-    protected String reset = "Unique Id Counter Has Been Reset";
-
-    public String getReset() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        LRUMap lruMap = new LRUMap(15);
-        context.getExternalContext().getSessionMap().put(RequestStateManager.LOGICAL_VIEW_MAP, lruMap);
-        StateManagerImpl stateManagerImpl =
-            (StateManagerImpl) context.getApplication().getStateManager();
-        TestingUtil.setPrivateField("requestIdSerial",
-                                    StateManagerImpl.class,
-                                    stateManagerImpl,
-                                    ((char) -1));
-        return reset;
-    }
-
-    public void setReset(String newReset) {
-        reset = newReset;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/component/ComponentTestCase.java b/jsf-ri/systest/src/com/sun/faces/component/ComponentTestCase.java
deleted file mode 100644
index 14039bc..0000000
--- a/jsf-ri/systest/src/com/sun/faces/component/ComponentTestCase.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class ComponentTestCase extends AbstractTestCase {
-
-    public ComponentTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ComponentTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /**
-     * Added for issue 212.
-     * Ensure no exception when restoring state containing
-     * transient components.
-     *
-     * @throws Exception
-     */
-    public void testComponentTransienceRestoration() throws Exception {
-
-        HtmlPage page = getPage("/faces/component02.jsp");
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-                getInputContainingGivenId(page, "submit");
-        try {
-            submit.click();
-        } catch (Exception ioe) {
-            fail("No exception should have been thrown: " +
-                    ioe.getMessage());
-        }
-
-    }
-
-
-} // end of class PathTestCase
diff --git a/jsf-ri/systest/src/com/sun/faces/component/CompositeMetaDataTestCase.java b/jsf-ri/systest/src/com/sun/faces/component/CompositeMetaDataTestCase.java
deleted file mode 100644
index 755ba13..0000000
--- a/jsf-ri/systest/src/com/sun/faces/component/CompositeMetaDataTestCase.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class CompositeMetaDataTestCase extends AbstractTestCase {
-
-    public CompositeMetaDataTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CompositeMetaDataTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /**
-     * Added for issue 10
-     *
-     * @throws Exception
-     */
-    public void testPrefixMappedFaceletPage() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/jsr276-using.xhtml");
-        String text = page.asText();
-        assertTrue(-1 != text.indexOf("composite component with correctly specified jsr276 metadata"));
-        assertTrue(-1 == text.indexOf("prefix fmd"));
-        assertTrue(-1 != text.indexOf("prefix metaData"));
-    }
-
-    public void testExtensionMappedFaceletPage() throws Exception {
-
-        HtmlPage page = getPage("/composite/jsr276-using.faces");
-        String text = page.asText();
-        assertTrue(-1 != text.indexOf("composite component with correctly specified jsr276 metadata"));
-        assertTrue(-1 != text.indexOf("composite component with incorrectly specified jsr276 metadata"));
-    }
-
-   public void testDirectlyAccessedCompositeComponent() throws Exception {
-
-       HtmlPage page = null;
-       client.setThrowExceptionOnFailingStatusCode(false);
-       page = getPage("/faces/resources/composite/jsr276Correct01.xhtml");
-       String text = page.asText();
-       assertTrue(text.contains("Component Not Found for identifier"));
-    }
-
-    
-
-} // end of class PathTestCase
diff --git a/jsf-ri/systest/src/com/sun/faces/component/DynamicAdd.java b/jsf-ri/systest/src/com/sun/faces/component/DynamicAdd.java
deleted file mode 100644
index c90273f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/component/DynamicAdd.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component;
-
-import java.io.IOException;
-import java.util.Map;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.html.HtmlPanelGroup;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-
- at FacesComponent(value="dynamicAdd")
-public class DynamicAdd extends UINamingContainer implements SystemEventListener {
-  
-  private boolean facetRequired = true;
-
-    public boolean isFacetRequired() {
-        return facetRequired;
-    }
-
-    public void setFacetRequired(boolean facetRequired) {
-        this.facetRequired = facetRequired;
-    }
-
-    public DynamicAdd() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        Map<Object, Object> ctxMap = ctx.getAttributes();
-        // increment the counter
-        ctxMap.put("dynamicAdd", null == ctxMap.get("dynamicAdd") ? 
-            (Integer) 1 : ((Integer)ctxMap.get("dynamicAdd")) + 1);
-        this.setId("dynamic" + ctxMap.get("dynamicAdd").toString());
-
-        ctx.getViewRoot().subscribeToViewEvent(PostAddToViewEvent.class, (SystemEventListener) this);
-    }
-
-    public void processEvent(SystemEvent se) throws AbortProcessingException {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent source = (UIComponent) se.getSource();
-        String id = source.getClientId(ctx);
-        if (source.equals(this)) {
-            Map<Object, Object> ctxMap = ctx.getAttributes();
-            Integer numAddedSoFar = (Integer) ctxMap.get("dynamicAdd");
-            if (numAddedSoFar < 5) {
-                UIComponent dynamic = ctx.getApplication().createComponent("dynamicAdd");
-                this.getChildren().add(dynamic);
-            }
-        }
-    }
-
-    public boolean isListenerForSource(Object o) {
-        return o instanceof DynamicAdd;
-    }
-
-    @Override
-    public void encodeBegin(FacesContext context) throws IOException {
-      // conditionally create dynamic component facets
-      if (facetRequired && null == getFacet("dynamicAddFacet")) {
-        getFacets().put("dynamicAddFacet", new HtmlPanelGroup());
-      }
-        Map<Object, Object> contextMap = context.getAttributes();
-        ResponseWriter writer = context.getResponseWriter();
-        writer.startElement("ul", this);
-        writer.startElement("p", this);
-        writer.write("Dynamic Component " + this.getId());
-        
-    }
-
-    @Override
-    public void encodeEnd(FacesContext context) throws IOException {
-        Map<Object, Object> contextMap = context.getAttributes();
-        ResponseWriter writer = context.getResponseWriter();
-        writer.endElement("p");
-        writer.endElement("ul");
-
-    }
-
-    @Override
-    public void processDecodes(FacesContext context) {
-      // conditionally recreate the dynamic component facet before process decode
-      if (facetRequired && null == getFacet("dynamicAddFacet")) {
-        getFacets().put("dynamicAddFacet", new HtmlPanelGroup());
-      }
-      
-      // TODO Auto-generated method stub
-      super.processDecodes(context);
-    }
-
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/component/GetClientIdELTestCase.java b/jsf-ri/systest/src/com/sun/faces/component/GetClientIdELTestCase.java
deleted file mode 100644
index 16d3ed4..0000000
--- a/jsf-ri/systest/src/com/sun/faces/component/GetClientIdELTestCase.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class GetClientIdELTestCase extends AbstractTestCase {
-
-    public GetClientIdELTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(GetClientIdELTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /**
-     * Added for issue 501
-     * Verify #{component.clientId} and #{cc.clientId} work
-     * properly
-     *
-     * @throws Exception
-     */
-    public void testELClientId() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/clientId01.xhtml");
-        String text = page.asText();
-        assertTrue(-1 != text.indexOf("j_id6:j_id9"));
-        assertTrue(-1 != text.indexOf("j_id6:componentId"));
-        assertTrue(-1 != text.indexOf("j_id18"));
-        assertTrue(-1 != text.indexOf("componentId01"));
-        assertTrue(-1 != text.indexOf("form2:j_id26"));
-        assertTrue(-1 != text.indexOf("form2:componentId"));
-        assertTrue(-1 != text.indexOf("j_id34"));
-        assertTrue(-1 != text.indexOf("componentId02"));
-
-    }
-
-
-} // end of class PathTestCase
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/BootstrapCompositeComponent.java b/jsf-ri/systest/src/com/sun/faces/composite/BootstrapCompositeComponent.java
deleted file mode 100644
index 50c0699..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/BootstrapCompositeComponent.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.util.Enumeration;
-import javax.el.ValueExpression;
-import javax.faces.application.Resource;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.view.ViewDeclarationLanguage;
-
- at FacesComponent(value="systest.BootstrapComponent")
-public class BootstrapCompositeComponent extends UIOutput {
-
-    @Override
-    public void encodeAll(FacesContext context) throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-
-        ViewDeclarationLanguage vdl = context.getApplication().
-                getViewHandler().getViewDeclarationLanguage(context,
-                "/composite/boostrapCompositeComponentMetadata.xhtml");
-        Resource compositeComponentResource = context.getApplication().getResourceHandler().createResource("componentWithMetadata.xhtml", "composite");
-
-        long
-                beforeFirstCall = System.currentTimeMillis(),
-                afterFirstCall, beforeSecondCall, afterSecondCall,
-                firstCallDuration, secondCallDuration;
-        BeanInfo metadata = vdl.getComponentMetadata(context, compositeComponentResource);
-        afterFirstCall = System.currentTimeMillis();
-        firstCallDuration = afterFirstCall - beforeFirstCall;
-
-        CompositeComponentMetadataUtils.writeMetadata(metadata, writer);
-
-        beforeSecondCall = System.currentTimeMillis();
-        metadata = vdl.getComponentMetadata(context, compositeComponentResource);
-        afterSecondCall = System.currentTimeMillis();
-        
-        secondCallDuration = afterSecondCall - beforeSecondCall;
-
-        CompositeComponentMetadataUtils.writeMetadata(metadata, writer);
-
-        writer.write("firstCallDuration: " + firstCallDuration +
-                " secondCallDuration: " + secondCallDuration + "\n");
-        if (firstCallDuration > secondCallDuration) {
-            writer.write("First call longer than second call by " +
-                    (firstCallDuration - secondCallDuration));
-        } else {
-            writer.write("Cache did not work!");
-        }
-
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/ComponentResolverActionListener.java b/jsf-ri/systest/src/com/sun/faces/composite/ComponentResolverActionListener.java
deleted file mode 100644
index 8edee41..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/ComponentResolverActionListener.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import javax.el.ValueExpression;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-
-public class ComponentResolverActionListener implements ActionListener {
-
-    public void processAction(ActionEvent event)
-          throws AbortProcessingException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        ValueExpression expression = context.getApplication()
-              .getExpressionFactory()
-              .createValueExpression(context.getELContext(),
-                                     "#{component.family}",
-                                     String.class);
-        context.getExternalContext().getRequestMap().put(
-              "resolvedComponentFamily",
-              expression.getValue(context.getELContext()));
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/CompositeBean.java b/jsf-ri/systest/src/com/sun/faces/composite/CompositeBean.java
deleted file mode 100644
index 92a86b0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/CompositeBean.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import java.text.DecimalFormat;
-import java.text.Format;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.event.ActionListener;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
-import javax.faces.application.FacesMessage;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.faces.convert.Converter;
-
- at ManagedBean
- at RequestScoped
-public class CompositeBean {
-
-
-    public List<String> getTableInputValues() {
-        List<String> result = new ArrayList<String>();
-        result.add("a value");
-        return result;
-    }
-
-    public ActionListener getActionListener() {
-        return new ActionListener() {
-
-            public void processAction(ActionEvent event)
-                  throws AbortProcessingException {
-                FacesContext ctx = FacesContext.getCurrentInstance();
-                UIComponent source = (UIComponent) event.getSource();
-                String cid = source.getClientId(ctx);
-                ctx.addMessage(cid,
-                               new FacesMessage(FacesMessage.SEVERITY_INFO,
-                                                "Action Invoked : " + cid,
-                                                "Action Invoked : " + cid));
-            }
-        };
-
-    }
-
-
-    public Validator getValidator() {
-
-        return new TestValidator();
-
-    }
-
-
-    public Converter getConverter() {
-
-        return new TestConverter();
-
-    }
-
-
-    public String doNav() {
-
-        return "nestingNav";
-
-    }
-
-
-    public String action() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent c = UIComponent.getCurrentComponent(ctx);
-        ctx.addMessage(null,
-                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                        "Action invoked: " + c.getClientId(ctx),
-                                        "Action invoked: " + c.getClientId(ctx)));
-        return "";
-
-    }
-
-
-    public String action(Object arg1, Object arg2) {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent c = UIComponent.getCurrentComponent(ctx);
-        String message = "Action invoked: "
-                             + c.getClientId(ctx)
-                             + ", arg1: " + arg1.toString()
-                             + ", arg2: " + arg2.toString();
-
-        ctx.addMessage(null,
-                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                        message,
-                                        message));
-        return "";
-
-    }
-
-    public String custom() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent c = UIComponent.getCurrentComponent(ctx);
-        ctx.addMessage(null,
-                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                        "Custom action invoked: " + c.getClientId(ctx),
-                                        "Custom action invoked: " + c.getClientId(ctx)));
-        return "";
-
-    }
-
-     public String custom(Object arg1, Object arg2) {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent c = UIComponent.getCurrentComponent(ctx);
-        String message = "Custom action invoked: "
-                             + c.getClientId(ctx)
-                             + ", arg1: " + arg1.toString()
-                             + ", arg2: " + arg2.toString();
-
-        ctx.addMessage(null,
-                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                        message,
-                                        message));
-        return "";
-
-    }
-
-
-    public String display(String arg) {
-
-        return "arg: " + arg;
-
-    }
-
-
-    public void actionListener(ActionEvent ae) {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent c = UIComponent.getCurrentComponent(ctx);
-        ctx.addMessage(null,
-                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                        "ActionListener invoked: " + c.getClientId(ctx),
-                                        "ActionListener invoked: " + c.getClientId(ctx)));
-    }
-
-
-    public void validate(FacesContext ctx, UIComponent c, Object o) {
-
-        ctx.addMessage(null,
-                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                        "validator invoked: " + c.getClientId(ctx),
-                                        "validator invoked: " + c.getClientId(ctx)));
-
-    }
-
-
-    public void valueChange(ValueChangeEvent event) {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent c = event.getComponent();
-        ctx.addMessage(null,
-                       new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                        "ValueChange invoked: " + c.getClientId(ctx),
-                                        "ValueChange invoked: " + c.getClientId(ctx)));
-
-    }
-
-    public Format getFormat() {
-        Format result = new DecimalFormat();
-        return result;
-    }
-
-
-    public String getStringValue() {
-
-        return "equalityCheck";
-        
-    }
-
-    public String[] getStringValues() {
-        return new String[] { "equalityCheck", "failedCheck" };
-    }
-
-    public String[] getItems() {
-        return new String[] { "A", "B", "C" };
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    public static class TestValidator implements Validator {
-
-        public void validate(FacesContext context, UIComponent component, Object value)
-              throws ValidatorException {
-
-            String cid = component.getClientId(context);
-            context.addMessage(cid,
-                               new FacesMessage(FacesMessage.SEVERITY_INFO,
-                                                "Validator Invoked : " + cid,
-                                                "Validator Invoked : " + cid));
-        }
-    }
-
-
-    public static class TestConverter implements Converter {
-
-        public Object getAsObject(FacesContext context, UIComponent component, String value) {
-            return value;
-        }
-
-        public String getAsString(FacesContext context, UIComponent component, Object value) {
-            String cid = component.getClientId(context);
-            context.addMessage(cid,
-                               new FacesMessage(FacesMessage.SEVERITY_INFO,
-                                                "Converter Invoked : " + cid,
-                                                "Converter Invoked : " + cid));
-            return value.toString();
-        }
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentMetadataUtils.java b/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentMetadataUtils.java
deleted file mode 100644
index 8d83beb..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentMetadataUtils.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.beans.FeatureDescriptor;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.view.AttachedObjectTarget;
-
-public class CompositeComponentMetadataUtils {
-
-    /**
-     * <p>Use the composite component metadata specification
-     * in section JSF.3.6.2.1 to print out the metadata to
-     * the argument writer.</p>
-     * @throws IOException
-     */
-
-    public static void writeMetadata(BeanInfo metadata, 
-            ResponseWriter writer) throws IOException{
-
-        // Print out the top level BeanDescriptor stuff.
-        BeanDescriptor descriptor = metadata.getBeanDescriptor();
-        writeFeatureDescriptor("composite-component-BeanDescriptor", descriptor,
-                writer);
-        writeFeatureDescriptorValues(
-                "composite-component-BeanDescriptor", descriptor,
-                writer);
-        PropertyDescriptor attributes[] = metadata.getPropertyDescriptors();
-        for (PropertyDescriptor cur : attributes) {
-            writeFeatureDescriptor("composite-component-attribute", cur,
-                    writer);
-            writeFeatureDescriptorValues("composite-component-attribute", cur,
-                    writer);
-        }
-    }
-
-    public static void writeFeatureDescriptor(String prefix,
-            FeatureDescriptor fd, ResponseWriter writer) throws IOException {
-
-        writer.write(prefix + "-name:" +
-                fd.getName() + "\n");
-        writer.write(prefix + "-displayName:" +
-                fd.getDisplayName() + "\n");
-        writer.write(prefix + "-shortDescription:" +
-                fd.getShortDescription() + "\n");
-        writer.write(prefix + "-expert:" +
-                fd.isExpert() + "\n");
-        writer.write(prefix + "-hidden:" +
-                fd.isHidden() + "\n");
-        writer.write(prefix + "-preferred:" +
-                fd.isPreferred() + "\n");
-
-    }
-
-    public static void writeFeatureDescriptorValues(String prefix,
-            FeatureDescriptor fd, ResponseWriter writer) throws IOException {
-
-        Enumeration<String> extraValues = fd.attributeNames();
-        String curName;
-        while (extraValues.hasMoreElements()) {
-            curName = extraValues.nextElement();
-            if (curName.equals(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY)) {
-                List<AttachedObjectTarget> attachedObjects =
-                        (List<AttachedObjectTarget>) fd.getValue(curName);
-                for (AttachedObjectTarget curTarget : attachedObjects) {
-                    writer.write(prefix + "-attached-object-" + curTarget.getName() + "\n");
-                }
-            } else if (curName.equals(UIComponent.FACETS_KEY)) {
-                Map<String, PropertyDescriptor> facets =
-                        (Map<String, PropertyDescriptor>) fd.getValue(curName);
-                for (String cur : facets.keySet()) {
-                    String facetPrefix = prefix + "-facet-" + cur;
-                    writeFeatureDescriptor(facetPrefix, facets.get(cur),
-                            writer);
-                    writeFeatureDescriptorValues(facetPrefix,
-                            facets.get(cur), writer);
-                }
-            } else {
-                ValueExpression ve = (ValueExpression) fd.getValue(curName);
-                writer.write(prefix + "-extra-attribute-" + curName + ": " +
-                        ve.getValue(FacesContext.getCurrentInstance().getELContext())
-                        + "\n");
-            }
-        }
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentsTestCase.java b/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentsTestCase.java
deleted file mode 100644
index 2d0605e..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentsTestCase.java
+++ /dev/null
@@ -1,1086 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Unit tests for Composite Components.
- */
-public class CompositeComponentsTestCase extends AbstractTestCase {
-
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    public CompositeComponentsTestCase() {
-        this("CompositeComponentsTestCase");
-    }
-
-    public CompositeComponentsTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CompositeComponentsTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    /**
-     * <p>
-     *  Maps ActionListener to commandButton within composite/actionSource1.xhtml using
-     *   only the name attribute.
-     * </p>
-     */
-    public void testActionSource1() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/actionsource.xhtml");
-        validateActionMessagePresent(page,
-                                     "form:actionsource1:command");
-
-    }
-
-
-    /**
-     * <p>
-     *   Maps ActionListener to commandButton within composite/actionSource2.xhtml using
-     *   name and target attributes.
-     * </p>
-     */
-    public void testActionSource2() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/actionsource.xhtml");
-        validateActionMessagePresent(page,
-                                     "form:actionsource2:ac2");
-
-    }
-
-
-    /**
-     * <p>
-     *  Maps ActionListener to a commandButton within a composite/actionSource1.xhtml
-     *   which is nested within composite/actionSource3.xhtml. Using the same ID
-     *   in the nesting.
-     * </p>
-     */
-    public void testActionSource3() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/actionsource.xhtml");
-        validateActionMessagePresent(page,
-                                     "form:actionsource3:command:command");
-        
-    }
-
-
-    /**
-     * <p>
-     *  Ensure actionListeners are properly re-targeted when the
-     *  target of the actionListener is nested within another naming
-     *  container.  Note that the value of the 'for' attribute doesn't
-     *  mimic the NamingContainer hierarchy, that's handled by the
-     *  'targets' attribute within the composite:implementation section
-     *  of actionSource4.xhtml.
-     * </p>
-     */
-    public void testActionSource4() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/actionsource.xhtml");
-        validateActionMessagePresent(page,
-                                     "form:actionsource4:naming:command");
-        
-    }
-
-
-    /**
-     * <p>
-     *  Maps Validator to inputText within composite/validator1.xhtml using
-     *   only the name attribute.
-     * </p>
-     */
-    public void testValidator1() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/attachedvalidator.xhtml");
-        validateValidatorMessagePresent(page,
-                                        "form:s1",
-                                        "form:validator1:input");
-
-    }
-
-
-    /**
-     * <p>
-     *   Maps Validator to inputText within composite/validator2.xhtml using
-     *   name and target attributes.
-     * </p>
-     */
-    public void testValidator2() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/attachedvalidator.xhtml");
-        validateValidatorMessagePresent(page,
-                                        "form2:s2",
-                                        "form2:validator2:it2");
-
-    }
-
-
-    /**
-     * <p>
-     *   Maps Validator to inputText within composite/validator2.xhtml using
-     *   name and target attributes.
-     * </p>
-     */
-    public void testValidator3() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/attachedvalidator.xhtml");
-        validateValidatorMessagePresent(page,
-                                        "form3:s3",
-                                        "form3:validator3:input:input");
-
-    }
-
-
-    /**
-     * <p>
-     *  Ensure validators are properly re-targeted when the
-     *  target of the validator is nested within another naming
-     *  container.  Note that the value of the 'for' attribute doesn't
-     *  mimic the NamingContainer hierarchy, that's handled by the
-     *  'targets' attribute within the composite:implementation section
-     *  of validator4.xhtml.
-     * </p>
-     */
-    public void testValidator4() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/attachedvalidator.xhtml");
-        validateValidatorMessagePresent(page,
-                                        "form4:s4",
-                                        "form4:validator4:naming:input");
-
-    }
-
-    /**
-     * <p>
-     *  Maps Converter to inputText within composite/validator1.xhtml using
-     *   only the name attribute.
-     * </p>
-     *
-     * <p>
-     *   Maps Converter to inputText within composite/validator2.xhtml using
-     *   name and target attributes.
-     * </p>
-     *
-     * <p>
-     *   Maps Converter to inputText within composite/validator2.xhtml using
-     *   name and target attributes.
-     * </p>
-     *
-     * <p>
-     *  Ensure validators are properly re-targeted when the
-     *  target of the validator is nested within another naming
-     *  container.  Note that the value of the 'for' attribute doesn't
-     *  mimic the NamingContainer hierarchy, that's handled by the
-     *  'targets' attribute within the composite:implementation section
-     *  of validator4.xhtml.
-     * </p>
-     */
-    public void testConverters() throws Exception {
-
-        String[] messageSuffixes = new String[] {
-              "form:converter1:input",
-              "form2:converter2:it2",
-              "form3:converter3:input:input",
-              "form4:converter4:naming:input"
-        };
-
-        HtmlPage page = getPage("/faces/composite/attachedconverter.xhtml");
-        validateConverterMessages(page, messageSuffixes);
-        page = pushButton(page, "cf:clear");
-        validateConverterMessages(page, messageSuffixes);
-
-    }
-
-
-    public void testActions() throws Exception {
-
-        final String[] commandIds = {
-              "form:c0:command",
-              "form:c1:nesting:aw1:command",
-              "form:c2:nesting:aw2:command",
-              "form:c3:nesting:aw3:nesting:aw1:command",
-              "form:c4:nesting:aw4:nesting:aw1:command"
-        };
-
-        HtmlPage page = getPage("/faces/composite/action.xhtml");
-        for (String commandId : commandIds) {
-            HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, commandId);
-            assertNotNull(submit);
-            page = submit.click();
-            String message = "Action invoked: " + commandId;
-            assertTrue(page.asText().contains(message));
-        }
-        
-    }
-
-
-    public void testCustomActions() throws Exception {
-
-        final String[] commandIds = {
-              "form:c0:command",
-              "form:c1:nesting:aw1:command",
-              "form:c2:nesting:aw2:command",
-              "form:c3:nesting:aw3:nesting:aw1:command",
-              "form:c4:nesting:aw4:nesting:aw1:command"
-        };
-
-        HtmlPage page = getPage("/faces/composite/customAction.xhtml");
-        for (String commandId : commandIds) {
-            HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, commandId);
-            assertNotNull(submit);
-            page = submit.click();
-            String message = "Custom action invoked: " + commandId;
-            assertTrue(page.asText().contains(message));
-        }
-
-    }
-
-
-    public void testActionListeners() throws Exception {
-
-        final String[] commandIds = {
-              "form:c0:command",
-              "form:c1:nesting:aw1:command",
-              "form:c2:nesting:aw2:command",
-              "form:c3:nesting:aw3:nesting:aw1:command",
-              "form:c4:nesting:aw4:nesting:aw1:command"
-        };
-
-        HtmlPage page = getPage("/faces/composite/actionListener.xhtml");
-        for (String commandId : commandIds) {
-            HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, commandId);
-            assertNotNull(submit);
-            page = submit.click();
-            String message = "ActionListener invoked: " + commandId;
-            assertTrue(page.asText().contains(message));
-        }
-
-    }
-
-
-    public void testValidators() throws Exception {
-        try {
-            getPage("/faces/setApplicationMapProperty.xhtml?name=javax.faces.VALIDATE_EMPTY_FIELDS&value=true");
-
-            HtmlPage page = getPage("/faces/composite/validator.xhtml");
-            HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form:submit");
-            assertNotNull(submit);
-            page = submit.click();
-
-            final String[] inputIds = {
-                "form:c0:input",
-                "form:c1:nesting:aw1:input",
-                "form:c2:nesting:aw2:input",
-                "form:c3:nesting:aw3:nesting:aw1:input",
-                "form:c4:nesting:aw4:nesting:aw1:input"
-            };
-
-            String pageText = page.asText();
-            for (String inputId : inputIds) {
-                String message = "validator invoked: " + inputId;
-                assertTrue(pageText.contains(message));
-            }
-        }
-        finally {
-            getPage("/faces/clearApplicationMapProperty.xhtml?name=javax.faces.VALIDATE_EMPTY_FIELDS");
-
-        }
-
-    }
-
-
-    public void testValueChangeListeners() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/valueChangeListener.xhtml");
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form:submit");
-        assertNotNull(submit);
-        page = submit.click();
-
-        final String[] inputIds = {
-              "form:c0:input",
-              "form:c1:nesting:aw1:input",
-              "form:c2:nesting:aw2:input",
-              "form:c3:nesting:aw3:nesting:aw1:input",
-              "form:c4:nesting:aw4:nesting:aw1:input"
-        };
-
-        String pageText = page.asText();
-        for (String inputId : inputIds) {
-            String message = "ValueChange invoked: " + inputId;
-            assertTrue(pageText.contains(message));
-        }
-
-    }
-
-
-    public void testNesting01() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting01.xhtml");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(2);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals(2, spans.size());
-        HtmlSpan span = spans.get(0);
-        assertEquals("Should have a value: Hello World", span.asText());
-        span = spans.get(1);
-        assertEquals("Shouldn't have a value:", span.asText());
-
-    }
-
-
-    public void testNesting02() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting02.xhtml");
-        HtmlSubmitInput input = (HtmlSubmitInput) getInputContainingGivenId(page, "commandButton");
-        assertNotNull(input);
-        page = input.click();
-        assertEquals("Navigation Result", page.getTitleText());
-
-    }
-
-
-    public void testNesting03() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting03.xhtml");
-        HtmlSubmitInput input = (HtmlSubmitInput) getInputContainingGivenId(page, "commandButton");
-        assertNotNull(input);
-        page = input.click();
-        assertEquals("Navigation Result", page.getTitleText());
-
-    }
-
-
-    public void testNesting04() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting04.xhtml");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(3);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals(3, spans.size());
-        assertEquals("static", spans.get(0).asText());
-        assertEquals("com.sun.faces.context.FacesContextImpl", spans.get(1).asText());
-        assertEquals("form:nesting4", spans.get(2).asText());
-
-        HtmlSubmitInput input = (HtmlSubmitInput) getInputContainingGivenId(page, "form:sub");
-        page = input.click();
-        spans.clear();
-         getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals(3, spans.size());
-        assertEquals("static", spans.get(0).asText());
-        assertEquals("com.sun.faces.context.FacesContextImpl", spans.get(1).asText());
-        assertEquals("form:nesting4", spans.get(2).asText());
-        
-    }
-
-
-    public void testNesting05() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting05.xhtml");
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting6:nesting7:form1:command");
-        page = submit.click();
-        assertTrue(page.asText().contains("Action invoked"));
-
-        page = getPage("/faces/composite/nesting05.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting6:nesting7:form2:command2");
-        page = submit.click();
-        assertTrue(page.asText().contains("ActionListener invoked"));
-
-        page = getPage("/faces/composite/nesting05.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting6:nesting7:form3:command3");
-        page = submit.click();
-        assertTrue(page.asText().contains("Custom action invoked"));
-
-        page = getPage("/faces/composite/nesting05.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting6:nesting7:form4:command");
-        HtmlTextInput text = (HtmlTextInput) getInputContainingGivenId(page, "nesting6:nesting7:form4:input");
-        text.setValueAttribute("foo");
-        page = submit.click();
-        assertTrue(page.asText().contains("validator invoked"));
-
-        page = getPage("/faces/composite/nesting05.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting6:nesting7:form5:command");
-        page = submit.click();
-        assertTrue(page.asText().contains("ValueChange invoked"));
-        
-    }
-
-
-    public void testNesting06() throws Exception {
-        HtmlPage page = getPage("/faces/composite/addPhaseListener.xhtml");
-        assertTrue(page.asText().contains("/composite/addPhaseListener.xhtml PASSED"));
-    }
-
-
-    /**
-     * Added for issue 1238.
-     */
-    public void testNesting07() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nestingCompositeExpressionTreeCreation.xhtml");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(5);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals(5, spans.size());
-        final String[] expectedSpanValues = {
-              "PASSED", "PASSED", "PASSED", "PASSED", "FAILED"
-        };
-        for (int i = 0; i < expectedSpanValues.length; i++) {
-            assertEquals(expectedSpanValues[i], expectedSpanValues[i], spans.get(i).asText());
-        }
-
-        // redisplay the view to make sure nothing changes over post back
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form:submit");
-        assertNotNull(submit);
-        page = submit.click();
-        spans.clear();
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals(5, spans.size());
-        for (int i = 0; i < expectedSpanValues.length; i++) {
-            assertEquals(expectedSpanValues[i], expectedSpanValues[i], spans.get(i).asText());
-        }
-        
-    }
-
-
-    /**
-     * Added for issue 1255.
-     */
-    public void testNesting08() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting06.xhtml");
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting10:nesting6:nesting7:form1:command");
-        page = submit.click();
-        assertTrue(page.asText().contains("Action invoked"));
-
-        page = getPage("/faces/composite/nesting06.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting10:nesting6:nesting7:form2:command2");
-        page = submit.click();
-        assertTrue(page.asText().contains("ActionListener invoked"));
-
-        page = getPage("/faces/composite/nesting06.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting10:nesting6:nesting7:form3:command3");
-        page = submit.click();
-        assertTrue(page.asText().contains("Custom action invoked"));
-
-        page = getPage("/faces/composite/nesting06.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting10:nesting6:nesting7:form4:command");
-        HtmlTextInput text = (HtmlTextInput) getInputContainingGivenId(page, "nesting10:nesting6:nesting7:form4:input");
-        text.setValueAttribute("foo");
-        page = submit.click();
-        assertTrue(page.asText().contains("validator invoked"));
-
-        page = getPage("/faces/composite/nesting06.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "nesting10:nesting6:nesting7:form5:command");
-        page = submit.click();
-        assertTrue(page.asText().contains("ValueChange invoked"));
-
-    }
-    
-
-
-    public void testChildrenAndFacets() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/childrenfacets.xhtml");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(6);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        validateChildrenAndFacets(spans);
-        page = pushButton(page, "form:submit");
-        spans.clear();
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        validateChildrenAndFacets(spans);
-        
-    }
-
-
-    public void testCompositeInsertChildrenNested() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/compositeInsertChildrenNesting.xhtml");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>();
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        String[] expectedItems = {
-            "Before Insert A(1)",
-            "Before Nested compcomp (3)",
-            "Before Insert B(1)",
-            "Inside nested Component (4)",
-            "After Insert B(2)",
-            "After Nested compcomp(5)",
-            "After Insert A(2)"
-        };
-        assertTrue(spans.size() == expectedItems.length);
-        for (int i = 0, len = expectedItems.length; i < len; i++) {
-            assertTrue(expectedItems[i].equals(spans.get(i).asText()));    
-        }
-
-        HtmlSubmitInput input = (HtmlSubmitInput) getInputContainingGivenId(page, "form:submit");
-        assertNotNull(input);
-        page = input.click();
-
-        spans = new ArrayList<HtmlSpan>();
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertTrue(spans.size() == expectedItems.length);
-        for (int i = 0, len = expectedItems.length; i < len; i++) {
-            assertTrue(expectedItems[i].equals(spans.get(i).asText()));
-        }
-        
-    }
-
-
-    public void testCompositeInsertChildrenNested02() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/compositeInsertChildrenNesting02.xhtml");
-        List<HtmlDivision> divs = new ArrayList<HtmlDivision>(1);
-        getAllElementsOfGivenClass(page, divs, HtmlDivision.class);
-        assertTrue(Integer.toString(divs.size()), divs.size() == 1);
-        HtmlDivision div = divs.get(0);
-        int count = 0;
-        Class[] expectedElements = {
-              HtmlAnchor.class,
-              HtmlBreak.class
-        };
-        for (HtmlElement element : div.getChildElements()) {
-            if (count > 2) {
-                fail("Expected two children of the div");
-            }
-            assertTrue(element.getClass().equals(expectedElements[count]));
-            count++;
-        }
-        
-    }
-
-
-    public void testCompositeInsertFacetNested() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/compositeInsertFacetNesting.xhtml");
-        List<HtmlTable> tables = new ArrayList<HtmlTable>();
-        getAllElementsOfGivenClass(page, tables, HtmlTable.class);
-        assertTrue(tables.size() == 1);
-        HtmlTable table = tables.get(0);
-        HtmlTableHeader header = table.getHeader();
-        assertNotNull(header);
-        assertEquals(header.asText(), "header");
-        HtmlTableFooter footer = table.getFooter();
-        assertNotNull(footer);
-        assertEquals(footer.asText(), "footer");
-
-    }
-
-
-    public void testCompositeInsertFacetNested02() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/compositeInsertFacetNesting02.xhtml");
-        List<HtmlTable> tables = new ArrayList<HtmlTable>();
-        getAllElementsOfGivenClass(page, tables, HtmlTable.class);
-        assertTrue(tables.size() == 1);
-        HtmlTable table = tables.get(0);
-        HtmlTableHeader header = table.getHeader();
-        assertNotNull(header);
-        assertEquals(header.asText(), "Header");
-        HtmlTableFooter footer = table.getFooter();
-        assertNotNull(footer);
-        assertEquals(footer.asText(), "Footer");
-
-    }
-
-
-    public void testInsertFacetRequired01() throws Exception {
-
-        // facet required but not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/insertfacetrequired01.xhtml");
-        assertTrue(page.asText().contains("Unable to find facet named 'header'"));
-
-    }
-
-
-    public void testInsertFacetRequired02() throws Exception {
-
-        // facet required but not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/insertfacetrequired02.xhtml");
-        assertTrue(page.asText().contains("Unable to find facet named 'header'"));
-
-    }
-
-
-    public void testInsertFacetRequired03() throws Exception {
-
-        // facet not required and not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/insertfacetrequired03.xhtml");
-        assertTrue(!page.asText().contains("Unable to find facet named 'header'"));
-
-    }
-    
-    
-    public void testRenderFacetRequired01() throws Exception {
-
-        // facet required but not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/renderfacetrequired01.xhtml");
-        assertTrue(page.asText().contains("Unable to find facet named 'header'"));
-
-    }
-
-
-    public void testRenderFacetRequired02() throws Exception {
-
-        // facet required but not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/renderfacetrequired02.xhtml");
-        assertTrue(page.asText().contains("Unable to find facet named 'header'"));
-
-    }
-
-
-    public void testRenderFacetRequired03() throws Exception {
-
-        // facet not required and not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/renderfacetrequired03.xhtml");
-        assertTrue(!page.asText().contains("Unable to find facet named 'header'"));
-
-    }
-    
-    
-    public void testInsertChildrenRequired01() throws Exception {
-
-        // facet required but not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/insertchildrenrequired01.xhtml");
-        assertTrue(page.asText().contains("Unable to find any children components nested within parent composite component"));
-
-    }
-
-
-    public void testInsertChildrenRequired02() throws Exception {
-
-        // facet required but not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/insertchildrenrequired02.xhtml");
-        assertTrue(page.asText().contains("Unable to find any children components nested within parent composite component"));
-
-    }
-
-
-    public void testInsertChildrenRequired03() throws Exception {
-
-        // facet not required and not present
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/insertchildrenrequired03.xhtml");
-        assertTrue(!page.asText().contains("Unable to find any children components nested within parent composite component"));
-
-    }
-
-    public void testTemplateDecorate() throws Exception {
-        lastpage = getPage("/faces/composite/decorate.xhtml");
-
-        assertTrue("Decorate Test".equals(lastpage.getTitleText()));
-
-        String templateText = lastpage.getElementById("comp").getTextContent();
-        assertTrue("Composition Text".equals(templateText));
-
-        String toplevelContent = lastpage.getElementById("insert").getTextContent();
-        assertTrue("Inserted Text".equals(toplevelContent));
-    }
-
-    public void testMetadataCache() throws Exception {
-        HtmlPage page = getPage("/faces/composite/boostrapCompositeComponentMetadata.xhtml");
-        String text = page.asText();
-        assertTrue(text.contains("First call longer than second call"));
-    }
-
-    public void testMethodExprNotRequired() throws Exception {
-
-        try {
-            getPage("/faces/composite/methodExprNotRequired.xhtml");
-        } catch (Exception e) {
-            fail("Exception thrown when compiling page methodExprNotRequired.");
-        }
-
-    }
-
-    public void testMethodExprRequired() throws Exception {
-
-        try {
-            getPage("/faces/composite/methodExprRequired.xhtml");
-            fail("No exception thrown when composite component was missing a required MethodExpression enabled attribute");
-        } catch (Exception e) {
-            
-        }
-
-    }
-
-
-    public void testCompositionWithinComposite() throws Exception {
-        try {
-            getPage("/faces/composite/compositionWithinCompositeUsingPage.xhtml");
-            fail("No exception thrown when composite component contained ui:composition");
-        } catch (Exception e) {
-
-        }
-
-    }
-
-
-    /**
-     * Added for issue 1256.
-     */
-    public void testCompositeComponentResolutionWithinRelocatableResources() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/compAttributeResourceRelocation.xhtml");
-        List<HtmlStyle> styles = new ArrayList<HtmlStyle>(4);
-        List<HtmlScript> scripts = new ArrayList<HtmlScript>(1);
-        getAllElementsOfGivenClass(page, styles, HtmlStyle.class);
-        getAllElementsOfGivenClass(page, scripts, HtmlScript.class);
-        assertEquals(4, styles.size());
-        assertEquals(1, scripts.size());
-        String[] styleValues = {
-              "color:red",
-              "color:blue",
-              "color:red",
-              "color:red"
-        };
-        String[] scriptValues = {
-              "var a = \"ss\";"
-        };
-
-        for (int i = 0, len = styles.size(); i < len; i++) {
-            assertTrue(styles.get(i).asXml().contains(styleValues[i]));
-        }
-        for (int i = 0, len = scripts.size(); i < len; i++) {
-            assertTrue(scripts.get(i).asXml().contains(scriptValues[i]));
-        }
-
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form:submit");
-        page = submit.click();
-
-        styles.clear();
-        scripts.clear();
-        getAllElementsOfGivenClass(page, styles, HtmlStyle.class);
-        getAllElementsOfGivenClass(page, scripts, HtmlScript.class);
-        assertEquals(4, styles.size());
-        assertEquals(1, scripts.size());
-        for (int i = 0, len = styles.size(); i < len; i++) {
-            assertTrue(styles.get(i).asXml().contains(styleValues[i]));
-        }
-        for (int i = 0, len = scripts.size(); i < len; i++) {
-            assertTrue(scripts.get(i).asXml().contains(scriptValues[i]));
-        }
-    }
-
-
-    /**
-     * Added for issue 1290.
-     */
-    public void testCCParentExpressionEvaluationWithNestingLevels() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting07.xhtml");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(4);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-
-        assertEquals(4, 4, spans.size());
-
-        final String[] expectedSpanValues = {
-              "A",  // runtime eval value
-              "A",  // tree creation eval value
-              "B",  // tree creation eval value
-              "C"   // tree creation eval value
-        };
-
-        for (int i = 0, len = spans.size(); i < len; i++) {
-            String spanText = spans.get(i).asText();
-            assertEquals("Index: "
-                         + i
-                         + ", expected: "
-                         + expectedSpanValues[i]
-                         + ", received: "
-                         + spanText,
-                         expectedSpanValues[i],
-                         spanText);
-        }
-
-        HtmlSubmitInput button = (HtmlSubmitInput) getInputContainingGivenId(page, "form:submit");
-        assertNotNull(button);
-
-        page = button.click();
-
-        spans.clear();
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals(4, 4, spans.size());
-        for (int i = 0, len = spans.size(); i < len; i++) {
-            String spanText = spans.get(i).asText();
-            assertEquals("Index: "
-                         + i
-                         + ", expected: "
-                         + expectedSpanValues[i]
-                         + ", received: "
-                         + spanText,
-                         expectedSpanValues[i],
-                         spanText);
-        }
-
-    }
-
-
-    /**
-     * Added for issue 1298.
-     */
-    /*
-    public void testMethodExpressionNesting() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/nesting08.xhtml");
-
-        HtmlSubmitInput button = (HtmlSubmitInput) getInputContainingGivenId(page, "form:submit");
-        assertNotNull(button);
-
-        page = button.click();
-        assertTrue(page.asText().contains("Action invoked"));
-
-    }
-    */
-
-
-    public void testMethodExpressionDefaults() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/defaultAttributeMethodExpression.xhtml");
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "def:form1:command");
-        page = submit.click();
-        assertTrue(page.asText().contains("Action invoked"));
-
-        page = getPage("/faces/composite/defaultAttributeMethodExpression.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "def:form2:command2");
-        page = submit.click();
-        assertTrue(page.asText().contains("ActionListener invoked"));
-
-        page = getPage("/faces/composite/defaultAttributeMethodExpression.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "def:form3:command3");
-        page = submit.click();
-        assertTrue(page.asText().contains("Custom action invoked"));
-
-        page = getPage("/faces/composite/defaultAttributeMethodExpression.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "def:form4:command");
-        HtmlTextInput text = (HtmlTextInput) getInputContainingGivenId(page, "def:form4:input");
-        text.setValueAttribute("foo");
-        page = submit.click();
-        assertTrue(page.asText().contains("validator invoked"));
-
-        page = getPage("/faces/composite/defaultAttributeMethodExpression.xhtml");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "def:form5:command");
-        page = submit.click();
-        assertTrue(page.asText().contains("ValueChange invoked"));
-
-    }
-
-
-    public void testProgrammaticDefaultAttributeValueAccess() throws Exception {
-        HtmlPage page = getPage("/faces/composite/programmaticDefaultAttributeValueAccess.xhtml");
-        String pageText = page.asText();
-        assertTrue(pageText.contains("attr1 value is attr1Value. attr2 value is attr2Value."));
-        assertTrue(pageText.contains("attr3 value is"));
-        assertTrue(pageText.contains("action value is"));
-        assertTrue(pageText.contains("actionListener value is"));
-        assertTrue(pageText.contains("validator value is"));
-        assertTrue(pageText.contains("valueChangeListener value is"));
-    }
-
-    public void testMissingRequiredAttribute() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/requiredAttribute.xhtml");
-        String text = page.asText();
-        assertTrue(text.contains("<ez:required01>"));
-        assertTrue(text.contains("The following attribute(s) are required, but no values have been supplied for them: table."));
-    }
-    
-    public void testMissingRequiredFacet() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/requiredFacet.xhtml");
-        String text = page.asText();
-        assertTrue(text.contains("The following facets(s) are required, but no facets have been supplied for them: table."));
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void validateChildrenAndFacets(List<HtmlSpan> spans) throws Exception {
-
-        String[] ids = new String[] {
-            "form:cf:outheader2",
-                  "form:cf:outheader",
-                  "form:cf:out1",
-                  "form:cf:out2",
-                  "ccCount",
-                  "header2Facet",
-                  "header1Facet"
-
-        };
-        String[] values = new String[] {
-              "Rendered",
-              "Inserted",
-              "v1",
-              "v2",
-              "0",
-              "true",
-              "true"
-        };
-
-        assertEquals(ids.length, spans.size());
-        for (int i = 0, len = ids.length; i < len; i++) {
-            HtmlSpan span = spans.get(i);
-            assertEquals(ids[i], span.getId());
-            assertEquals(values[i], span.asText());
-        }
-       
-    }
-
-
-    private void validateActionMessagePresent(HtmlPage page, String commandId)
-    throws Exception {
-
-        page = pushButton(page, commandId);
-        validateMessage(page, "Action Invoked", commandId);
-
-    }
-
-
-    private void validateValidatorMessagePresent(HtmlPage page, String commandId, String inputId)
-    throws Exception {
-
-        page = pushButton(page, commandId);
-        validateMessage(page, "Validator Invoked", inputId);
-
-    }
-
-
-    private void validateConverterMessages(HtmlPage page, String[] messageSuffixes) {
-
-        List<HtmlUnorderedList> list = new ArrayList<HtmlUnorderedList>();
-        getAllElementsOfGivenClass(page, list, HtmlUnorderedList.class);
-        HtmlUnorderedList ulist = list.get(0);
-        assertEquals("messages", ulist.getId());
-        int count = 0;
-
-        for (HtmlElement e : ulist.getAllHtmlChildElements()) {
-            if (count > messageSuffixes.length) {
-                fail("Expected only four message to be displayed");
-            }
-            String message = ("Converter Invoked : " + messageSuffixes[count]);
-            count++;
-            assertTrue(e instanceof HtmlListItem);
-            assertEquals(message, message, e.asText());
-        }
-
-        if (list.size() == 2) {
-            ulist = list.get(1);
-            for (HtmlElement e : ulist.getAllHtmlChildElements()) {
-                fail("Messages have been redisplayed");
-            }
-        }
-
-    }
-
-
-    private HtmlPage pushButton(HtmlPage page, String commandId)
-    throws Exception {
-
-        HtmlSubmitInput input = (HtmlSubmitInput)
-              getInputContainingGivenId(page, commandId);
-        assertNotNull(input);
-        return (HtmlPage) input.click();
-
-    }
-
-
-    private void validateMessage(HtmlPage page,
-                                 String messagePrefix,
-                                 String messageSuffix) {
-
-        List<HtmlUnorderedList> list = new ArrayList<HtmlUnorderedList>();
-        getAllElementsOfGivenClass(page, list, HtmlUnorderedList.class);
-        HtmlUnorderedList ulist = list.get(0);
-        assertEquals("messages", ulist.getId());
-        int count = 0;
-        String message = (messagePrefix + " : " + messageSuffix);
-        for (HtmlElement e : ulist.getAllHtmlChildElements()) {
-            if (count > 1) {
-                fail("Expected only one message to be displayed");
-            }
-            count++;
-            assertTrue(e instanceof HtmlListItem);
-            assertEquals(message, message, e.asText());
-        }
-
-        if (list.size() == 2) {
-            ulist = list.get(1);
-            for (HtmlElement e : ulist.getAllHtmlChildElements()) {
-                fail("Messages have been redisplayed");
-            }
-        }
-
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentsTestCaseWithEE6Dependencies.java b/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentsTestCaseWithEE6Dependencies.java
deleted file mode 100644
index ed13099..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/CompositeComponentsTestCaseWithEE6Dependencies.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Unit tests for Composite Components.
- */
-public class CompositeComponentsTestCaseWithEE6Dependencies extends AbstractTestCase {
-
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    public CompositeComponentsTestCaseWithEE6Dependencies() {
-        this("CompositeComponentsTestCaseWithEE6Dependencies");
-    }
-
-    public CompositeComponentsTestCaseWithEE6Dependencies(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CompositeComponentsTestCaseWithEE6Dependencies.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    /**
-     * Added for issue 1318.
-     */
-    public void testIssue1318() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/issue1318.xhtml");
-        HtmlSubmitInput button = (HtmlSubmitInput) getInputContainingGivenId(page, "form:arg:n1:n2:command");
-        assertNotNull(button);
-        page = button.click();
-        String message = "Action invoked: form:arg:n1:n2:command, arg1: Hello, arg2: World!";
-        assertTrue(page.asText().contains(message));
-        
-    }
-
-    public void testCompositeComponentActionWithArgs() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/compActionWithArgs.xhtml");
-        HtmlSubmitInput button = (HtmlSubmitInput) getInputContainingGivenId(page, "n:form:command");
-        assertNotNull(button);
-        page = button.click();
-        String message = "Custom action invoked: c:n:form:command, arg1: arg1, arg2: arg2";
-        assertTrue(page.asText().contains(message));
-
-    }
-
-
-    public void testCompositeComponentAttributeWithArgs() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/compAttributeWithArgs.xhtml");
-        String message = "arg: arg1";
-        assertTrue(page.asText().contains(message));
-
-    }
-
-    public void testInvalidArgsToCCExpression() throws Exception {
-
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/composite/invalidMeArgs.xhtml");
-        assertTrue(page.asText().contains("value=\"#{cc.attrs.custom(cc.attrs.arg1)}\" Illegal attempt to pass arguments to a composite component lookup expression"));
-
-        page = getPage("/faces/composite/invalidVeArgs.xhtml");
-        assertTrue(page.asText().contains("value=\"#{cc.attrs.bean(cc.attrs.arg1)}\" Illegal attempt to pass arguments to a composite component lookup expression"));
-    }
-
-
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/DefaultActionTestCase.java b/jsf-ri/systest/src/com/sun/faces/composite/DefaultActionTestCase.java
deleted file mode 100644
index 6cbd021..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/DefaultActionTestCase.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-
-/**
- * Unit tests for Composite Components.
- */
-public class DefaultActionTestCase extends AbstractTestCase {
-
-
-    public DefaultActionTestCase() {
-        this("ResourceDependencyComponentTestCase");
-    }
-
-    public DefaultActionTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(DefaultActionTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    public void testDefaultAction() throws Exception {
-        HtmlPage page = getPage("/faces/composite/defaultActionUsingPage.xhtml");
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("ccTag:loginButton");
-        page = button.click();
-        assertTrue(page.asText().contains("defaultActionNext"));
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/JavaBackedComponentDefaultAttrValues.java b/jsf-ri/systest/src/com/sun/faces/composite/JavaBackedComponentDefaultAttrValues.java
deleted file mode 100644
index b9ab0bf..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/JavaBackedComponentDefaultAttrValues.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.composite;
-
-import java.io.IOException;
-import java.util.Map;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
- at FacesComponent(value="JavaBackedComponentDefaultAttrValues")
-public class JavaBackedComponentDefaultAttrValues extends UINamingContainer {
-
-    @Override
-    public String getFamily() {
-        return "javax.faces.NamingContainer";
-    }
-
-    @Override
-    public void encodeAll(FacesContext context) throws IOException {
-        super.encodeAll(context);
-        ResponseWriter responseWriter = context.getResponseWriter();
-        Map<String, Object> attrs = this.getAttributes();
-        String clientId = this.getClientId(context);
-        responseWriter.startElement("p", this);
-        responseWriter.writeAttribute("id", clientId, "clientId");
-        responseWriter.writeText("attr1 value is " + attrs.get("attr1").toString() + ". ", "attr1");
-        responseWriter.writeText("attr2 value is " + attrs.get("attr2").toString() + ". ", "attr2");
-        responseWriter.writeText("attr3 value is " + attrs.get("attr3").toString() + ". ", "attr3");
-        responseWriter.writeText("action value is " + attrs.get("action").toString() + ". ", "action");
-        responseWriter.writeText("actionListener value is " + attrs.get("action").toString() + ". ", "action");
-        responseWriter.writeText("validator value is " + attrs.get("validator").toString() + ". ", "validator");
-        responseWriter.writeText("valueChangeListener value is " + attrs.get("valueChangeListener").toString() + ". ", "valueChangeListener");
-        responseWriter.endElement("p");
-    }
-
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelActionListenerComponent.java b/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelActionListenerComponent.java
deleted file mode 100644
index 2aeb53a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelActionListenerComponent.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.composite;
-
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-
- at FacesComponent(value = "javaTopLevelActionListenerComponent")
-public class JavaTopLevelActionListenerComponent extends UINamingContainer
-      implements ActionListener {
-
-    private String item = "Value hard coded in Java source file";
-
-    public String getItem() {
-        return item;
-    }
-
-    public void processAction(ActionEvent event)
-          throws AbortProcessingException {
-        item = "Action was processed successfully";
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelActionListenerComponentTestCase.java b/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelActionListenerComponentTestCase.java
deleted file mode 100644
index e902603..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelActionListenerComponentTestCase.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-
-/**
- * Unit tests for Composite Components.
- */
-public class JavaTopLevelActionListenerComponentTestCase extends AbstractTestCase {
-
-
-    public JavaTopLevelActionListenerComponentTestCase() {
-        this("JavaTopLevelActionListenerComponentTestCase");
-    }
-
-    public JavaTopLevelActionListenerComponentTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(JavaTopLevelActionListenerComponentTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    public void testActionListeningComponentWasInvokedSuccessFully() throws Exception {
-        HtmlPage page = getPage("/faces/composite/javaTopLevelActionListenerComponentUsingPage.xhtml");
-        HtmlInput htmlInput = getInputContainingGivenId(page, "loginAction");
-        HtmlPage newPage = htmlInput.click();
-        String text = newPage.asText();
-        assertTrue(-1 != text.indexOf("javax.faces.Command"));
-        assertTrue(-1 != text.indexOf("Action was processed successfully"));
-    }
-
-
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelComponent.java b/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelComponent.java
deleted file mode 100644
index 3dc6b8b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelComponent.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.composite;
-
-import javax.el.ValueExpression;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.FacesComponent;
-import javax.faces.context.FacesContext;
-
- at FacesComponent(value = "javaTopLevelComponent")
-public class JavaTopLevelComponent extends UINamingContainer {
-
-    public JavaTopLevelComponent() {
-
-    }
-
-    public String getFamily() {
-        return "javax.faces.NamingContainer";
-    }
-    private String item = "Value hard coded in Java source file";
-
-    public String getItem() {
-        return item;
-    }
-
-    public void setItem(String item) {
-        this.item = item;
-    }
-
-    private int intv;
-
-    public void setInt(int intv) {
-        this.intv = intv;
-    }
-
-    public int getInt() {
-        return intv;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelComponentTestCase.java b/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelComponentTestCase.java
deleted file mode 100644
index 59f27c9..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/JavaTopLevelComponentTestCase.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-
-
-/**
- * Unit tests for Composite Components.
- */
-public class JavaTopLevelComponentTestCase extends AbstractTestCase {
-
-
-    public JavaTopLevelComponentTestCase() {
-        this("JavaTopLevelComponentTestCase");
-    }
-
-    public JavaTopLevelComponentTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(JavaTopLevelComponentTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    public void testJavaBeanPropertyOnTopLevelComponentHasExpectedValue() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/javaTopLevelComponentUsingPage.xhtml?q=foo");
-        String text = page.asText();
-        assertTrue(-1 != text.indexOf("Get out java property of type String Smallberries"));
-        assertTrue(-1 != text.indexOf("Get out java property of type int 5"));
-    }
-
-    public void testDefaultActionAttribute() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/javaTopLevelComponentUsingPage.xhtml?q=foo");
-        HtmlSubmitInput button = (HtmlSubmitInput)
-                getInputContainingGivenId(page, "loginPanel1:loginAction");
-        page = button.click();
-        String text = page.asText();
-        assertTrue(-1 != text.indexOf("Made it to page 2"));
-
-    }
-
-    public void testDefaultAttribute() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/defaultAttributeValuesUsingPage.xhtml");
-        String text = page.asXml();
-        assertTrue(-1 != text.indexOf("User ID:"));
-        assertTrue(-1 != text.indexOf("value=\"Login"));
-    }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/PhaseListenerInCompositeComponent.java b/jsf-ri/systest/src/com/sun/faces/composite/PhaseListenerInCompositeComponent.java
deleted file mode 100644
index ee32130..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/PhaseListenerInCompositeComponent.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-
-public class PhaseListenerInCompositeComponent implements PhaseListener {
-
-    public void beforePhase(PhaseEvent event) {
-        event.getFacesContext().getExternalContext().getRequestMap().put("beforeMessage",
-                "PASSED");
-    }
-
-    public void afterPhase(PhaseEvent event) {
-    }
-
-    public PhaseId getPhaseId() {
-        return PhaseId.RENDER_RESPONSE;
-    }
-
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/ResourceDependencyComponent.java b/jsf-ri/systest/src/com/sun/faces/composite/ResourceDependencyComponent.java
deleted file mode 100644
index e2cd730..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/ResourceDependencyComponent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import javax.faces.application.ResourceDependency;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UINamingContainer;
-
- at FacesComponent(value = "resourceDependencyComponent")
- at ResourceDependency(name="simple.css")
-public class ResourceDependencyComponent extends UINamingContainer {
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/ResourceDependencyComponentTestCase.java b/jsf-ri/systest/src/com/sun/faces/composite/ResourceDependencyComponentTestCase.java
deleted file mode 100644
index c55ed33..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/ResourceDependencyComponentTestCase.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import org.w3c.dom.NodeList;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-
-/**
- * Unit tests for Composite Components.
- */
-public class ResourceDependencyComponentTestCase extends AbstractTestCase {
-
-
-    public ResourceDependencyComponentTestCase() {
-        this("ResourceDependencyComponentTestCase");
-    }
-
-    public ResourceDependencyComponentTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ResourceDependencyComponentTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    public void testForwardingToNextPageProcessesResourceDependencies() throws Exception {
-        HtmlPage page = getPage("/faces/composite/resourceDependencyComponentUsingPage.xhtml");
-        assertNrOfLinksPresent(page, 1);
-        HtmlInput button = getInputContainingGivenId(page, "navigateAway");
-        page = button.click();
-        assertTrue(-1 != page.asText().indexOf("Next page"));
-        assertNrOfLinksPresent(page, 1);
-    }
-    
-    public void testStayingOnSamePageProcessesResourceDependencies() throws Exception {
-        HtmlPage page = getPage("/faces/composite/resourceDependencyComponentUsingPage.xhtml");
-        assertNrOfLinksPresent(page, 1);
-        HtmlInput button = getInputContainingGivenId(page, "stay");
-        page = button.click();
-        assertTrue(-1 != page.asText().indexOf("Using page"));
-        assertNrOfLinksPresent(page, 1);
-    }
-
-    private void assertNrOfLinksPresent(HtmlPage page, int number) {
-        NodeList nodeList = page.getElementsByTagName("link");
-        assertEquals(1, nodeList.getLength());
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/TimeWastingTagHandler.java b/jsf-ri/systest/src/com/sun/faces/composite/TimeWastingTagHandler.java
deleted file mode 100644
index 8083681..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/TimeWastingTagHandler.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import java.io.IOException;
-import javax.faces.component.UIComponent;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.TagConfig;
-import javax.faces.view.facelets.TagHandler;
-
-
-public class TimeWastingTagHandler extends TagHandler {
-
-    public TimeWastingTagHandler(TagConfig config) {
-        super(config);
-    }
-
-    public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
-
-        try {
-            Thread.sleep(5000);
-        } catch (InterruptedException ex) {
-        }
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/composite/ValueChangeListenerSetPropertyActionListener01TestCase.java b/jsf-ri/systest/src/com/sun/faces/composite/ValueChangeListenerSetPropertyActionListener01TestCase.java
deleted file mode 100644
index 55b6197..0000000
--- a/jsf-ri/systest/src/com/sun/faces/composite/ValueChangeListenerSetPropertyActionListener01TestCase.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.composite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-
-
-/**
- * Unit tests for Composite Components.
- */
-public class ValueChangeListenerSetPropertyActionListener01TestCase extends AbstractTestCase {
-
-
-    public ValueChangeListenerSetPropertyActionListener01TestCase() {
-        this("ValueChangeListenerSetPropertyActionListener01TestCase");
-    }
-
-    public ValueChangeListenerSetPropertyActionListener01TestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ValueChangeListenerSetPropertyActionListener01TestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    @Override
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    /**
-     * <p>
-     *  Maps ActionListener to commandButton within composite/actionSource1.xhtml using
-     *   only the name attribute.
-     * </p>
-     */
-    public void testValueChangeActionListener() throws Exception {
-
-        HtmlPage page = getPage("/faces/composite/valueChangeListenerSetPropertyActionListener01.xhtml");
-        HtmlInput input = getInputContainingGivenId(page, "form:composite:value");
-        input.setValueAttribute("Cause A ValueChangeEvent");
-        HtmlSubmitInput button = (HtmlSubmitInput)
-                getInputContainingGivenId(page, "form:composite:submit");
-        page = button.click();
-        String pageText = page.asText();
-
-        assertTrue(-1 != pageText.indexOf("ValueChangeSetPropertyActionListenerBean.processValueChange called"));
-
-        String searchString = "Property set by setPropertyActionListener:";
-        int searchStringLength = searchString.length(), i = 0, j = 0;
-        long lesser, greater;
-
-        // Get the value of the property set by the setPropertyActionListener
-        assertTrue(-1 != (i = pageText.indexOf(searchString)));
-        i += searchStringLength;
-        assertTrue(-1 != (j = pageText.indexOf(";", i)));
-        lesser = Long.valueOf(pageText.substring(i, j));
-
-        // Get the value of the currentTimeMillis at the time the page rendered
-        searchString = "System.currentTimeMillis():";
-        searchStringLength = searchString.length();
-        assertTrue(-1 != (i = pageText.indexOf(searchString)));
-        i += searchStringLength;
-        assertTrue(-1 != (j = pageText.indexOf(";", i)));
-        greater = Long.valueOf(pageText.substring(i, j));
-
-        assertTrue(lesser < greater);
-
-        
-
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/event/DynamicAddTestCase.java b/jsf-ri/systest/src/com/sun/faces/event/DynamicAddTestCase.java
deleted file mode 100644
index 86d7d80..0000000
--- a/jsf-ri/systest/src/com/sun/faces/event/DynamicAddTestCase.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.event;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-import java.util.regex.Pattern;
-
-
-/**
- * Unit tests for Composite Components.
- */
-public class DynamicAddTestCase extends AbstractTestCase {
-
-
-    public DynamicAddTestCase() {
-        this("VerifyBuildBeforeRestoreTestCase");
-    }
-
-    public DynamicAddTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(DynamicAddTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    public void testVerifyDynamicAdd() throws Exception {
-
-        HtmlPage page = getPage("/faces/dynamicComponents.xhtml");
-        String text = page.asXml();
-        assertTrue(Pattern.matches("(?s).*\\s*<ul>\\s*\\s*<p>\\s*Dynamic Component dynamic1\\s*<ul>\\s*\\s*<p>\\s*Dynamic Component dynamic2\\s*<ul>\\s*\\s*<p>\\s*Dynamic Component dynamic3\\s*<ul>\\s*\\s*<p>\\s*Dynamic Component dynamic4\\s*<ul>\\s*\\s*<p>\\s*Dynamic Component dynamic5\\s*</p>\\s*\\s*</ul>\\s*\\s*</p>\\s*\\s*</ul>\\s*\\s*</p>\\s*\\s*</ul>\\s*\\s*</p>\\s*\\s*</ul>\\s*\\s*</p>\\s*\\s*</ul>\\s*.*",
-                text));
-
-    }
-
-    public void testDynamicAddHandlesViewIdChanges() throws Exception {
-
-        HtmlPage page = getPage("/faces/dynamicComponents00.xhtml");
-        String text;
-        HtmlSubmitInput button = (HtmlSubmitInput)
-                this.getInputContainingGivenId(page, "next");
-        page = button.click();
-        button = (HtmlSubmitInput)
-                this.getInputContainingGivenId(page, "thisAgain");
-        page = button.click();
-        button = (HtmlSubmitInput)
-                this.getInputContainingGivenId(page, "thisAgain");
-        page = button.click();
-        text = page.asXml();
-        assertTrue(text.contains("Dynamic Component dynamic1"));
-        button = (HtmlSubmitInput)
-                this.getInputContainingGivenId(page, "next");
-        page = button.click();
-        text = page.asXml();
-        assertTrue(page.asXml().contains("no dynamic component"));
-
-
-
-    }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/event/PostAddToViewListener.java b/jsf-ri/systest/src/com/sun/faces/event/PostAddToViewListener.java
deleted file mode 100644
index 337c3ad..0000000
--- a/jsf-ri/systest/src/com/sun/faces/event/PostAddToViewListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.event;
-
-import java.util.Map;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.component.UIComponent;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-
- at ManagedBean
- at SessionScoped
-public class PostAddToViewListener implements SystemEventListener {
-
-    private boolean installed = false;
-
-    public String getInstallEvent() {
-        if (!installed) {
-            FacesContext.getCurrentInstance().
-                    getApplication().subscribeToEvent(PostAddToViewEvent.class,
-                    HtmlInputText.class, this);
-            installed = true;
-        }
-
-        return "";
-    }
-
-    public String getUninstallEvent() {
-        FacesContext.getCurrentInstance().
-                getApplication().unsubscribeFromEvent(PostAddToViewEvent.class,
-                HtmlInputText.class, this);
-        installed = false;
-        return "";
-    }
-
-    public void processEvent(SystemEvent event) throws AbortProcessingException {
-        Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
-        requestMap.put("message", event.getClass().getName());
-
-    }
-
-    public boolean isListenerForSource(Object source) {
-        return source instanceof HtmlInputText;
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/event/PostRestoreStateListener.java b/jsf-ri/systest/src/com/sun/faces/event/PostRestoreStateListener.java
deleted file mode 100644
index c8430f4..0000000
--- a/jsf-ri/systest/src/com/sun/faces/event/PostRestoreStateListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.event;
-
-import java.util.Map;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PostRestoreStateEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-
- at ManagedBean
- at SessionScoped
-public class PostRestoreStateListener implements SystemEventListener {
-
-
-    private boolean installed = false;
-
-    public String getInstallEvent() {
-        if (!installed) {
-            FacesContext.getCurrentInstance().
-                    getApplication().subscribeToEvent(PostRestoreStateEvent.class,
-                    HtmlInputText.class, this);
-            installed = true;
-        }
-
-        return "";
-    }
-
-    public String getUninstallEvent() {
-        FacesContext.getCurrentInstance().
-                getApplication().unsubscribeFromEvent(PostRestoreStateEvent.class,
-                HtmlInputText.class, this);
-        installed = false;
-        return "";
-    }
-
-    public void processEvent(SystemEvent event) throws AbortProcessingException {
-        Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
-        String message = requestMap.get("message").toString();
-        requestMap.put("message", message + " " + event.getClass().getName());
-    }
-
-    public boolean isListenerForSource(Object source) {
-        return source instanceof HtmlInputText;
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/event/VerifyBuildBeforeRestoreTestCase.java b/jsf-ri/systest/src/com/sun/faces/event/VerifyBuildBeforeRestoreTestCase.java
deleted file mode 100644
index 23a3129..0000000
--- a/jsf-ri/systest/src/com/sun/faces/event/VerifyBuildBeforeRestoreTestCase.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.event;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-
-
-/**
- * Unit tests for Composite Components.
- */
-public class VerifyBuildBeforeRestoreTestCase extends AbstractTestCase {
-
-
-    public VerifyBuildBeforeRestoreTestCase() {
-        this("VerifyBuildBeforeRestoreTestCase");
-    }
-
-    public VerifyBuildBeforeRestoreTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(VerifyBuildBeforeRestoreTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-    
-
-    // -------------------------------------------------------------- Test Cases
-
-    public void testVerifyBuildBeforeRestore() throws Exception {
-
-        if (Boolean.TRUE.equals(Boolean.valueOf(System.getProperty("partial.state.saving")))) {
-            HtmlPage page = getPage("/faces/regression/verifyBuildBeforeRestore.xhtml");
-            HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("submit");
-
-            page = button.click();
-            String text = page.asText();
-            assertTrue(text.contains("Message: javax.faces.event.PostAddToViewEvent javax.faces.event.PostRestoreStateEvent"));
-            page = getPage("/faces/regression/uninstallListeners.xhtml");
-        }
-
-    }
-
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/facelets/FaceletsTargetNotFoundTestCase.java b/jsf-ri/systest/src/com/sun/faces/facelets/FaceletsTargetNotFoundTestCase.java
deleted file mode 100644
index f171fd8..0000000
--- a/jsf-ri/systest/src/com/sun/faces/facelets/FaceletsTargetNotFoundTestCase.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test cases for Facelets functionality
- */
-public class FaceletsTargetNotFoundTestCase extends AbstractTestCase {
-
-
-    // --------------------------------------------------------------- Test Init
-
-
-    public FaceletsTargetNotFoundTestCase() {
-        this("FaceletsTargetNotFoundTestCase");
-    }
-
-
-    public FaceletsTargetNotFoundTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FaceletsTargetNotFoundTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-    /*
-     * Check that not found errors give a 500 status, instead of the 404 that
-     * they used to give.
-     */
-    public void testFaillingCode() throws Exception {
-
-        WebClient client = new WebClient();
-        client.setThrowExceptionOnFailingStatusCode(true);
-        HtmlPage page;
-        int code;
-
-        try {
-            page = getPage("/faces/facelets/compositionnotfound.xhtml", client) ;
-            fail("A Failing status code was not received");
-        } catch (FailingHttpStatusCodeException fail) {
-            code = fail.getStatusCode();
-            assertTrue("Expected 500, got: "+code, code==500);
-        }
-        try {
-            page = getPage("/faces/facelets/decoratenotfound.xhtml", client) ;
-            fail("A Failing status code was not received");
-        } catch (FailingHttpStatusCodeException fail) {
-            code = fail.getStatusCode();
-            assertTrue("Expected 500, got: "+code, code==500);
-        }
-        try {
-            page = getPage("/faces/facelets/includenotfound.xhtml", client) ;
-            fail("A Failing status code was not received");
-        } catch (FailingHttpStatusCodeException fail) {
-            code = fail.getStatusCode();
-            assertTrue("Expected 500, got: "+code, code==500);
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/facelets/FaceletsTestCase.java b/jsf-ri/systest/src/com/sun/faces/facelets/FaceletsTestCase.java
deleted file mode 100644
index 8e6b653..0000000
--- a/jsf-ri/systest/src/com/sun/faces/facelets/FaceletsTestCase.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.gargoylesoftware.htmlunit.html.HtmlUnorderedList;
-import com.gargoylesoftware.htmlunit.html.HtmlDivision;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * Test cases for Facelets functionality
- */
-public class FaceletsTestCase extends AbstractTestCase {
-
-
-    // --------------------------------------------------------------- Test Init
-
-
-    public FaceletsTestCase() {
-        this("FaceletsTestCase");
-    }
-
-
-    public FaceletsTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FaceletsTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /*
-     * Added for issue 917.
-     */
-    public void testSetPropertyActionListener1() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/setpropertyactionlistener1.xhtml") ;
-
-        // verify the output is initially null
-        List<HtmlSpan> output = new ArrayList<HtmlSpan>(1);
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(!output.isEmpty());
-        HtmlSpan span = output.get(0);
-        assertTrue("Expected: 'Current Name: ', Received: '"+span.asText()+"'","Current Name:".equals(span.asText()));
-
-        // click the commandLink with a nested setPropertyActionListener
-        // to cause the name attribute in the session to be populated.
-        HtmlElement clink = page.getHtmlElementById("form:s1");
-        assertNotNull(clink);
-        page = (HtmlPage) ((HtmlSubmitInput) clink).click();
-        output.clear();
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(!output.isEmpty());
-        span = output.get(0);
-        assertTrue("Current Name: Mojarra".equals(span.asText()));
-
-        // click the commandButton with a nested setPropertyActionListener
-        // to cause the name attribute in the session to be cleared
-        HtmlElement cbutton = page.getHtmlElementById("form:s2");
-        assertNotNull(clink);
-        page = (HtmlPage) ((HtmlAnchor) cbutton).click();
-        output.clear();
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(!output.isEmpty());
-        span = output.get(0);
-        assertTrue("Current Name:".equals(span.asText()));
-        
-    }
-
-
-    /*
-     * Added for issue 909.
-     */
-    public void testTagSourceFromDtdDocument() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/sourcefromdtdconfig.xhtml") ;
-
-        // verify the output is initially null
-        List<HtmlSpan> output = new ArrayList<HtmlSpan>(1);
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(!output.isEmpty());
-        HtmlSpan span = output.get(0);
-        assertTrue("Hello!".equals(span.asText()));
-        assertTrue("color:red".equals(span.getStyleAttribute()));
-
-    }
-
-
-    /*
-     * Verify #{component} and #{cc} expressions evaluate
-     * at build time.
-     * @throws Exception
-     */
-    public void testComponentELAtBuildTime() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/componentELAtBuildTime.xhtml") ;
-
-        // verify the output is initially null
-        List<HtmlSpan> output = new ArrayList<HtmlSpan>(4);
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(output.size() == 3);
-        for (HtmlSpan span : output) {
-            assertTrue("PASSED".equals(span.asText()));
-        }
-
-    }
-
-
-    /**
-     * Ensure attributes that evaluate EL expressions only render the attribute
-     * name/value pair when the value is non-null.
-     *
-     * https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=940
-     */ 
-    public void testConditionalAttributeRendering() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/conditionalCCAttributeRendering.xhtml") ;
-
-        // verify the output is initially null
-        List<HtmlSpan> output = new ArrayList<HtmlSpan>(1);
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(output.size() == 1);
-        HtmlSpan span = output.get(0);
-        assertTrue(span.getStyleAttribute().length() == 0);
-        HtmlSubmitInput add = (HtmlSubmitInput) getInputContainingGivenId(page, "form:add");
-        page = add.click();
-
-        // ensure the span is now styled since there is a non-null value available.
-        output.clear();
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(output.size() == 1);
-        span = output.get(0);
-        assertEquals("color:red", span.getStyleAttribute());
-
-        // ensure the style is not rendered once again after the attribute value
-        // is set to "".
-        HtmlSubmitInput remove = (HtmlSubmitInput) getInputContainingGivenId(page, "form:remove");
-        page = remove.click();
-        output.clear();
-        getAllElementsOfGivenClass(page, output, HtmlSpan.class);
-        assertTrue(output.size() == 1);
-        span = output.get(0);
-        assertTrue(span.getStyleAttribute().length() == 0);
-
-    }
-
-    public void testTemplateComp() throws Exception {
-        lastpage = getPage("/faces/facelets/templateComp.xhtml");
-
-        assertTrue("Template Test".equals(lastpage.getTitleText()));
-
-        String templateText = lastpage.getElementById("templateText").getTextContent();
-        assertTrue("Template text".equals(templateText));
-
-        String toplevelContent = lastpage.getElementById("toplevelContent").getTextContent();
-        assertTrue("Inserted Content".equals(toplevelContent));
-    }
-
-    public void testTemplateDecorate() throws Exception {
-        lastpage = getPage("/faces/facelets/templateDecorate.xhtml");
-
-        assertTrue("Decorate Test".equals(lastpage.getTitleText()));
-
-        String templateText = lastpage.getElementById("comp").getTextContent();
-        assertTrue("Composition Text".equals(templateText));
-
-        String toplevelContent = lastpage.getElementById("insert").getTextContent();
-        assertTrue("Inserted Text".equals(toplevelContent));
-    }
-
-
-    public void testValidatorWrappingNestingDisableHandling() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/validatorDisabled.xhtml");
-        HtmlTextInput input = (HtmlTextInput) getInputContainingGivenId(page, "form1:input");
-        assertNotNull(input);
-        input.setValueAttribute("aaaa");
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form1:sub");
-        page = submit.click();
-
-        HtmlUnorderedList list = (HtmlUnorderedList) page.getElementById("form1:messages1");
-        int count = 0;
-        for (HtmlElement element : list.getAllHtmlChildElements()) {
-            count++;
-            assertEquals("form1:input: Validation Error: Length is less than allowable minimum of '5'", element.asText());
-            if (count > 1) {
-                fail("Expected a single validation failure");
-            }
-        }
-
-        page = getPage("/faces/facelets/validatorDisabled.xhtml");
-        HtmlTextInput input1 = (HtmlTextInput) getInputContainingGivenId(page, "form2:input1");
-        HtmlTextInput input2 = (HtmlTextInput) getInputContainingGivenId(page, "form2:input2");
-        input1.setValueAttribute("aaaa");
-        input2.setValueAttribute("aaaa");
-        submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form2:sub");
-        page = submit.click();
-
-        HtmlElement list1 = page.getElementById("form2:messages2");
-        assertTrue(list1 instanceof HtmlDivision); // if it's not, it means messages where displayed
-        HtmlUnorderedList list2 = (HtmlUnorderedList) page.getElementById("form2:messages3");
-        assertFalse(list1.getAllHtmlChildElements().iterator().hasNext());
-        count = 0;
-        for (HtmlElement element : list2.getAllHtmlChildElements()) {
-            count++;
-            assertEquals("form2:input2: Validation Error: Length is less than allowable minimum of '5'", element.asText());
-            if (count > 1) {
-                fail("Expected a single validation failure");
-            }
-        }
-    }
-
-
-    
-
-
-    /**
-     * Added for issue 1202.  Ensure duplicate phase listeners aren't registered
-     * when using f:phaseListener and partial state saving is enabled (which is
-     * the default for systest).
-     */
-    public void testPhaseListenerRegistration() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/viewPhaseListeners.xhtml");
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form:button");
-        assertNotNull(submit);
-
-        for (int i = 0; i < 5; i++) {
-            page = (HtmlPage) submit.click();
-            assertTrue(!page.asText().contains("ERROR"));
-            submit = (HtmlSubmitInput) getInputContainingGivenId(page, "form:button");
-        }
-
-    }
-
-    public void testWhen() throws Exception {
-        HtmlPage page = getPage("/faces/facelets/when.xhtml");
-        String text = page.asText();
-        assertTrue(text.contains("size = 1"));
-        assertTrue(text.contains("isEmpty = false"));
-        assertTrue(text.contains("there is some!!!"));
-        assertTrue(text.contains("there is some (really)!!!"));
-
-    }
-
-
-    /**
-     * Added for issue 1552.
-     */
-    public void testModeratelyComplexTemplating() throws Exception {
-        HtmlPage page = getPage("/faces/facelets/templateDecoration2.xhtml");
-        String text = page.asText();
-        assertTrue(text.contains("Inserted from client1 Default"));
-    }
-
-
-    /**
-     * Added for issue 1313
-     */
-    public void testIssue1313() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/issue1313.xhtml");
-        List<HtmlDivision> divs = new ArrayList<HtmlDivision>();
-
-        getAllElementsOfGivenClass(page, divs, HtmlDivision.class);
-        validateToggleState1(divs);
-        HtmlSubmitInput input = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:nonajax");
-        assertNotNull(input);
-        page = input.click();
-        divs.clear();
-        getAllElementsOfGivenClass(page, divs, HtmlDivision.class);
-        validateToggleState2(divs);
-        input = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:ajax");
-        assertNotNull(input);
-        page = input.click();
-        divs.clear();
-        getAllElementsOfGivenClass(page, divs, HtmlDivision.class);
-        validateToggleState1(divs);
-        input = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:nonajax");
-        assertNotNull(input);
-        page = input.click();
-        divs.clear();
-        getAllElementsOfGivenClass(page, divs, HtmlDivision.class);
-        validateToggleState2(divs);
-        input = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:ajax");
-        assertNotNull(input);
-        page = input.click();
-        divs.clear();
-        getAllElementsOfGivenClass(page, divs, HtmlDivision.class);
-        validateToggleState1(divs);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void validateToggleState1(List<HtmlDivision> divs) {
-        assertTrue(divs.size() == 2);
-        HtmlDivision div1 = divs.get(0);
-        assertEquals("frag1", "frag1", div1.getId());
-        assertEquals("frag1", "frag1", div1.asText().trim());
-        HtmlDivision div2 = divs.get(1);
-        assertEquals("otherwise", "otherwise", div2.getId());
-        assertEquals("C:OTHERWISE TOGGLE STATE FALSE C:OTHERWISE",
-                     "C:OTHERWISE TOGGLE STATE FALSE C:OTHERWISE",
-                     div2.asText().trim());
-    }
-
-
-    private void validateToggleState2(List<HtmlDivision> divs) {
-        assertTrue(divs.size() == 3);
-        HtmlDivision div1 = divs.get(0);
-        assertEquals("frag2", "frag2", div1.getId());
-        assertEquals("frag2", "frag2", div1.asText().trim());
-        HtmlDivision div2 = divs.get(1);
-        assertEquals("if", "if", div2.getId());
-        assertEquals("C:IF TOGGLE STATE TRUE C:IF",
-                     "C:IF TOGGLE STATE TRUE C:IF",
-                     div2.asText().trim());
-        HtmlDivision div3 = divs.get(2);
-        assertEquals("when", "when", div3.getId());
-        assertEquals("C:WHEN TOGGLE STATE TRUE C:WHEN",
-                     "C:WHEN TOGGLE STATE TRUE C:WHEN",
-                     div3.asText().trim());
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/facelets/ImplicitFacetTestCase.java b/jsf-ri/systest/src/com/sun/faces/facelets/ImplicitFacetTestCase.java
deleted file mode 100644
index 8b4f980..0000000
--- a/jsf-ri/systest/src/com/sun/faces/facelets/ImplicitFacetTestCase.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test cases for Facelets functionality
- */
-public class ImplicitFacetTestCase extends AbstractTestCase {
-
-
-    // --------------------------------------------------------------- Test Init
-
-
-    public ImplicitFacetTestCase() {
-        this("FaceletsTestCase");
-    }
-
-
-    public ImplicitFacetTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ImplicitFacetTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /*
-     * Added for issue 917.
-     */
-    public void testUIRepeat() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/implicitFacet01.xhtml") ;
-        
-        String text = page.asText();
-        
-        assertTrue(-1 != text.indexOf("Implicit facet 01 id: j_id2. Child 01 of facet 01 id: output01. Child 02 of facet 01 id: output02. Child 03 of facet 01 id: output03."));
-        assertTrue(-1 != text.indexOf("Implicit facet 01 id: panelGroup01. Child 01 of facet 01 id: output07. Child 02 of facet 01 id: output08. Child 03 of facet 01 id: output09."));
-
-        HtmlSubmitInput input = (HtmlSubmitInput) getInputContainingGivenId(page, "command");
-        page = input.click();
-
-        text = page.asText();
-
-        assertTrue(-1 != text.indexOf("Implicit facet 01 id: j_id2. Child 01 of facet 01 id: output01. Child 02 of facet 01 id: output02. Child 03 of facet 01 id: output03."));
-        assertTrue(-1 != text.indexOf("Implicit facet 01 id: panelGroup01. Child 01 of facet 01 id: output07. Child 02 of facet 01 id: output08. Child 03 of facet 01 id: output09."));
-
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/facelets/KeepMessagesTestCase.java b/jsf-ri/systest/src/com/sun/faces/facelets/KeepMessagesTestCase.java
deleted file mode 100644
index 3a290a3..0000000
--- a/jsf-ri/systest/src/com/sun/faces/facelets/KeepMessagesTestCase.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.io.IOException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-public class KeepMessagesTestCase extends AbstractTestCase {
-
-
-    // --------------------------------------------------------------- Test Init
-
-
-    public KeepMessagesTestCase() {
-        this("keepMessagesTestCase");
-    }
-
-
-    public KeepMessagesTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(KeepMessagesTestCase.class));
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testMessagesAreKeptAfterRedirect() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/keepMessages.xhtml") ;
-        HtmlSubmitInput button = (HtmlSubmitInput) getInputContainingGivenId(page, "submit");
-        page = button.click();
-
-        assertTrue(-1 != page.asText().indexOf("This is a global message"));
-
-        // submit the page again to make sure messages aren't re-displayed since
-        // keep messages isn't set to true on this view
-        button = (HtmlSubmitInput) getInputContainingGivenId(page, "button");
-        page = button.click();
-
-        assertTrue(page.asText().indexOf("This is a global message") == -1);
-    }
-    
-    public void testMessagesAreKeptAfterRedirectAfterDoubleValidationError() throws Exception {
-    	
-    	HtmlPage page = getPage("/faces/facelets/keepMessages.xhtml") ;
-		page = submitRequiredForm(page);
-    	assertOnPage(page, "first page");
-    	
-    	page = submitRequiredForm(page);
-    	assertOnPage(page, "first page");
-    	
-    	HtmlInput requiredInput = getInputContainingGivenId(page, "requiredInput");
-    	requiredInput.setValueAttribute("a value");
-    	
-    	page = submitRequiredForm(page);
-    	assertOnPage(page, "second page");
-    	
-    	assertTrue("FacesMessage should have survived redirect", page.asText().indexOf("This is a global message") != -1);
-    }
-
-
-	private void assertOnPage(HtmlPage page, String titleText) {
-		assertTrue(-1 != page.getTitleText().indexOf(titleText));
-	}
-
-
-	private HtmlPage submitRequiredForm(HtmlPage page) throws IOException {
-		HtmlSubmitInput button = (HtmlSubmitInput) getInputContainingGivenId(page, "submitRequired");
-    	return button.click();
-	}
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/facelets/RepeatBean.java b/jsf-ri/systest/src/com/sun/faces/facelets/RepeatBean.java
deleted file mode 100644
index 1e97c39..0000000
--- a/jsf-ri/systest/src/com/sun/faces/facelets/RepeatBean.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.context.FacesContext;
-import javax.faces.application.FacesMessage;
-
- at ManagedBean
- at RequestScoped
-public class RepeatBean {
-    
-    List<String> flavors;
-    List<String> singleFlavor;
-    
-    public List<String> getFlavorsList() {
-        if (null == flavors) {
-            flavors = new ArrayList<String>();
-            flavors.add("chocolate");
-            flavors.add("vanilla");
-            flavors.add("strawberry");
-            flavors.add("chocolate peanut butter");
-        }
-        return flavors;
-    }
-
-    public List<String> getSingleFlavorList() {
-        if (singleFlavor == null) {
-            singleFlavor = new ArrayList<String>(1);
-            singleFlavor.add("chocolate");
-        }
-        return singleFlavor;
-    }
-
-
-    public void setIndex(int index) {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
-                                            "Index: " + index,
-                                            "Index: " + index);
-        ctx.addMessage(null, msg);
-        
-    }
-
-    
-    public String [] getFlavorsArray() {
-        String [] result = new String[getFlavorsList().size()];
-        getFlavorsList().toArray(result);    
-        return result;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/facelets/UIRepeatTestCase.java b/jsf-ri/systest/src/com/sun/faces/facelets/UIRepeatTestCase.java
deleted file mode 100644
index 2b5d57d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/facelets/UIRepeatTestCase.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test cases for Facelets functionality
- */
-public class UIRepeatTestCase extends AbstractTestCase {
-
-
-    // --------------------------------------------------------------- Test Init
-
-
-    public UIRepeatTestCase() {
-        this("UIRepeatTestCase");
-    }
-
-
-    public UIRepeatTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(UIRepeatTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /*
-     * Added for issue 917.
-     */
-    public void testUIRepeat() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/uirepeat.xhtml") ;
-        
-        String text = page.asText();
-        
-        assertTrue(-1 != text.indexOf("ListFlavor is chocolate. Begin is . End is . Index is 0. Step is . Index is even: true. Index is odd: false. Index is first: true. Index is last: false."));
-        assertTrue(-1 != text.indexOf("ListFlavor is vanilla. Begin is . End is . Index is 1. Step is . Index is even: false. Index is odd: true. Index is first: false. Index is last: false."));
-        assertTrue(-1 != text.indexOf("ListFlavor is strawberry. Begin is . End is . Index is 2. Step is . Index is even: true. Index is odd: false. Index is first: false. Index is last: false."));
-        assertTrue(-1 != text.indexOf("ListFlavor is chocolate peanut butter. Begin is . End is . Index is 3. Step is . Index is even: false. Index is odd: true. Index is first: false. Index is last: true."));
-        assertTrue(-1 != text.indexOf("ArrayFlavor is chocolate. Begin is . End is . Index is 0. Step is . Index is even: true. Index is odd: false. Index is first: true. Index is last: false."));
-        assertTrue(-1 != text.indexOf("ArrayFlavor is vanilla. Begin is . End is . Index is 1. Step is . Index is even: false. Index is odd: true. Index is first: false. Index is last: false."));
-        assertTrue(-1 != text.indexOf("ArrayFlavor is strawberry. Begin is . End is . Index is 2. Step is . Index is even: true. Index is odd: false. Index is first: false. Index is last: false."));
-        assertTrue(-1 != text.indexOf("ArrayFlavor is chocolate peanut butter. Begin is . End is . Index is 3. Step is . Index is even: false. Index is odd: true. Index is first: false. Index is last: true."));
-        
-    }
-
-
-    public void testUIRepeatVarStatusBroadcast() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/uirepeat2.xhtml");
-        List<HtmlAnchor> anchors = new ArrayList<HtmlAnchor>(4);
-        getAllElementsOfGivenClass(page, anchors, HtmlAnchor.class);
-        assertEquals("Expected to find only 4 HtmlAnchors", 4, anchors.size());
-        String[] expectedValues = {
-              "Index: 0",
-              "Index: 1",
-              "Index: 2",
-              "Index: 3",
-        };
-
-        for (int i = 0, len = expectedValues.length; i < len; i++) {
-            HtmlAnchor anchor = anchors.get(i);
-            page = anchor.click();
-            assertTrue(page.asText().contains(expectedValues[i]));
-        }
-
-    }
-
-
-    public void testUIRepeatStateNotLostOnNonUIRepeatMessage() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/uirepeat3.xhtml");
-        List<HtmlTextInput> inputs = new ArrayList<HtmlTextInput>(5);
-        getAllElementsOfGivenClass(page, inputs, HtmlTextInput.class);
-        assertEquals("Expected 5 input fields", 5, inputs.size());
-        inputs.get(0).setValueAttribute("A"); // this causes a validation failure
-        inputs.get(1).setValueAttribute("1");
-        inputs.get(2).setValueAttribute("2");
-        inputs.get(3).setValueAttribute("3");
-        inputs.get(4).setValueAttribute("4");
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "submit");
-        page = submit.click();
-        assertTrue(page.asText().contains("'A' is not a number."));
-        // now verify the inputs nested within the UIRepeat were not cleared
-        inputs.clear();
-        getAllElementsOfGivenClass(page, inputs, HtmlTextInput.class);
-        assertEquals("A", inputs.get(0).getValueAttribute());
-        assertEquals("1", inputs.get(1).getValueAttribute());
-        assertEquals("2", inputs.get(2).getValueAttribute());
-        assertEquals("3", inputs.get(3).getValueAttribute());
-        assertEquals("4", inputs.get(4).getValueAttribute());
-
-    }
-
-
-    public void testUIRepeatVarBeginEndStepProperties() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/uirepeat4.xhtml");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(9);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertEquals("Expected 9 spans", 9, spans.size());
-        String[] expectedValues = {
-              "vanilla : index=1 : begin=1 : end= : step= : first=true : last=false : even=true : odd=false",
-              "strawberry : index=2 : begin=1 : end= : step= : first=false : last=false : even=false : odd=true",
-              "chocolate peanut butter : index=3 : begin=1 : end= : step= : first=false : last=true : even=true : odd=false",
-              "strawberry: index=2 : begin=2 : end=3 : step= : first=true : last=false : even=true : odd=false",
-              "chocolate peanut butter: index=3 : begin=2 : end=3 : step= : first=false : last=true : even=false : odd=true",
-              "chocolate: index=0 : begin= : end= : step=2 : first=true : last=false : even=true : odd=false",
-              "strawberry: index=2 : begin= : end= : step=2 : first=false : last=true : even=false : odd=true",
-              "vanilla: index=1 : begin=1 : end=1 : step=2 : first=true : last=true : even=true : odd=false",
-              "chocolate: index=0 : begin= : end= : step= : first=true : last=true : even=true : odd=false"
-        };
-        for (int i = 0, len = spans.size(); i < len; i++) {
-            assertEquals("Expected: " + expectedValues[i] + ", received: " + spans.get(i).asText(),
-                         expectedValues[i],
-                         spans.get(i).asText());
-        }
-
-    }
-
-    /**
-     * Added for issue 1218.
-     */
-    public void testForEachVarStatusNoException() throws Exception {
-
-        HtmlPage page = getPage("/faces/facelets/forEach.xhtml");
-        assertTrue(page.asText().contains("1 2 3"));
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/facelets/csetTestCase.java b/jsf-ri/systest/src/com/sun/faces/facelets/csetTestCase.java
deleted file mode 100644
index 3633580..0000000
--- a/jsf-ri/systest/src/com/sun/faces/facelets/csetTestCase.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.facelets;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test cases for Facelets functionality
- */
-public class csetTestCase extends AbstractTestCase {
-
-
-    // --------------------------------------------------------------- Test Init
-
-
-    public csetTestCase() {
-        this("csetTestCase");
-    }
-
-
-    public csetTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(csetTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /*
-     * Added for issue 917.
-     */
-    public void testSetPropertyActionListener1() throws Exception {
-
-        lastpage = getPage("/faces/facelets/csetTagBody.xhtml") ;
-
-        checkTrue("output", "y bop alice bop yes");
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/groovy/GroovyTestCase.java b/jsf-ri/systest/src/com/sun/faces/groovy/GroovyTestCase.java
deleted file mode 100644
index dc60bdb..0000000
--- a/jsf-ri/systest/src/com/sun/faces/groovy/GroovyTestCase.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.groovy;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class GroovyTestCase extends AbstractTestCase {
-    public GroovyTestCase() {
-        this("groovyTestCase");
-    }
-
-
-    public GroovyTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(GroovyTestCase.class));
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testManagedBean() throws Exception {
-        HtmlPage page = getPage("/faces/groovy/groovy.xhtml") ;
-        assertNotNull(page.getElementById("bean"));
-        assertTrue (page.getElementById("bean").getTextContent().equals("Hello World!"));
-    }
-
-    public void testComponent() throws Exception {
-        HtmlPage page = getPage("/faces/groovy/groovy.xhtml") ;
-        assertNotNull(page.getElementById("header"));
-        assertTrue (page.getElementById("header").getTextContent().equals("THIS IS A HEADER!"));
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/htmlunit/AbstractTestCase.java b/jsf-ri/systest/src/com/sun/faces/htmlunit/AbstractTestCase.java
deleted file mode 100644
index 49d4b2a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/htmlunit/AbstractTestCase.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.htmlunit;
-
-
-import com.gargoylesoftware.htmlunit.*;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import java.net.URL;
-import java.util.Iterator;
-
-import java.util.List;
-import java.util.ArrayList;
-
-
-/**
- * <p>Abstract base class for test cases utilizing HtmlUnit.</p>
- */
-
-public abstract class AbstractTestCase extends TestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public AbstractTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // System property values used to configure the HTTP connection
-    protected String contextPath = null;
-    protected String host = null;
-    protected int port = 0;
-
-    // The current session identifier
-    protected String sessionId = null;
-
-
-    // The WebClient instance for this test case
-    protected WebClient client = null;
-
-    // The URL for our test application
-    protected URL domainURL = null;
-
-    // The cookie manager
-    protected CookieManager cmanager = null;
-
-    // The last requested page
-    protected HtmlPage lastpage = null;
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-
-        BrowserVersion browserVersion;
-
-        contextPath = System.getProperty("context.path");
-        host = System.getProperty("host");
-        port = Integer.parseInt(System.getProperty("port"));
-        String browser = System.getProperty("browser");
-
-        if ("FF3".equals(browser)) {
-            browserVersion = BrowserVersion.FIREFOX_3;
-        } else if ("FF2".equals(browser)) {
-            browserVersion = BrowserVersion.FIREFOX_2;
-        } else if ("IE6".equals(browser)) {
-            browserVersion = BrowserVersion.INTERNET_EXPLORER_6;
-        } else {
-            browserVersion = BrowserVersion.INTERNET_EXPLORER_7;
-        }
-        
-        String proxyHost = System.getProperty("proxyHost");
-        String proxyPort = System.getProperty("proxyPort");
-
-        client = new WebClient(browserVersion);
-        cmanager = client.getCookieManager();
-        // Add an ajax controller to synchronize all ajax calls
-        client.setAjaxController(new NicelyResynchronizingAjaxController());
-        domainURL = getURL("/");
-        WebRequestSettings settings = new WebRequestSettings(domainURL);
-        if (null != proxyHost && null != proxyPort) {
-            settings.setProxyHost(proxyHost);
-            int proxyPortInt = Integer.parseInt(proxyPort);
-            settings.setProxyPort(proxyPortInt);
-            ProxyConfig config = client.getProxyConfig();
-            config.setProxyHost(proxyHost);
-            config.setProxyPort(proxyPortInt);
-            
-        }
-        WebResponse response = client.getWebConnection().getResponse(settings);
-
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(AbstractTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-
-        client = null;
-        domainURL = null;
-        cmanager = null;
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Extract and return the result of calling <code>asText()</code>
-     * on the <code><body></code> element of this page.</p>
-     *
-     * @param page The <code>HtmlPage</code> to process
-     */
-    protected String getBodyText(HtmlPage page) {
-
-        Object body =
-                page.getDocumentElement().getHtmlElementsByTagName("body").get(0);
-
-        if (body != null) {
-            if (body instanceof HtmlBody) {
-                return (((HtmlBody) body).asText());
-            }
-        }
-
-        fail("This page does not have a <body> element");
-        return (null); // To satisfy the compiler
-
-    }
-
-
-    /**
-     * <p>Return the page for the specified context-relative path,
-     * maintaining session affinity if <code>sessionId</code> is not null.</p>
-     *
-     * @param path Context-relative part of the path
-     */
-    protected HtmlPage getPage(String path) throws Exception {
-
-        /* Cookies seem to be maintained automatically now
-        if (sessionId != null) {
-            //            System.err.println("Joining   session " + sessionId);
-            client.addRequestHeader("Cookie", "JSESSIONID=" + sessionId);
-        }
-        */
-        lastpage  = (HtmlPage) client.getPage(getURL(path));
-        if (sessionId == null) {
-            parseSession(lastpage);
-        }
-        return lastpage;
-
-    }
-
-
-    /**
-     * The same as {@link #getPage(String)} except this uses the specified
-     * WebClient.
-     *
-     * @param path   context-relative path
-     * @param client WebClient
-     * @return an HtmlPage instance
-     * @throws Exception if an error occurs
-     */
-    protected HtmlPage getPage(String path, WebClient client) throws Exception {
-        lastpage = (HtmlPage) client.getPage(getURL(path));
-        if (sessionId == null) {
-            parseSession(lastpage);
-        }
-        return lastpage;
-    }
-
-
-    /**
-     * <p>Return a <code>URL</code> for the specified context-relative
-     * path.</p>
-     *
-     * @param path Context relative path
-     */
-    protected URL getURL(String path) throws Exception {
-
-        StringBuffer sb = new StringBuffer("http://");
-        sb.append(host);
-        if (port != 80) {
-            sb.append(":");
-            sb.append("" + port);
-        }
-        sb.append(contextPath);
-        sb.append(path);
-        return (new URL(sb.toString()));
-
-    }
-
-
-    /**
-     * <p>Parse and save any session identifier from the specified page.</p>
-     *
-     * @param page The current page
-     */
-    protected void parseSession(HtmlPage page) {
-
-        String value =
-                page.getWebResponse().getResponseHeaderValue("Set-Cookie");
-        if (value == null) {
-            return;
-        }
-        int equals = value.indexOf("JSESSIONID=");
-        if (equals < 0) {
-            return;
-        }
-        value = value.substring(equals + "JSESSIONID=".length());
-        int semi = value.indexOf(";");
-        if (semi >= 0) {
-            value = value.substring(0, semi);
-        }
-        sessionId = value;
-        //        System.err.println("Beginning session " + sessionId);
-
-    }
-
-
-    protected boolean clearAllCookies() {
-        cmanager.clearCookies();
-        return true;
-    }
-
-    // Return the form with the specified "id" from the specified page
-    // (HtmlPage.getFormByName() looks at "name" instead)
-    protected HtmlForm getFormById(HtmlPage page, String id) {
-
-        Iterator forms = page.getForms().iterator();
-        while (forms.hasNext()) {
-            HtmlForm form = (HtmlForm) forms.next();
-            if (id.equals(form.getAttributeValue("id"))) {
-                return (form);
-            }
-        }
-        return (null);
-
-    }
-
-
-    /**
-     * <p>Added to compensate for changes in the HtmlUnit 1.4 API.</p>
-     *
-     * @see #getAllElementsOfGivenClass(com.gargoylesoftware.htmlunit.html.HtmlElement, java.util.List, Class)
-     */
-    protected List getAllElementsOfGivenClass(HtmlPage root, List list,
-                                              Class matchClass) {
-
-        return getAllElementsOfGivenClass(root.getDocumentElement(),
-                list,
-                matchClass);
-
-    }
-
-    /**
-     * Depth first search from root to find all children that are
-     * instances of HtmlInput.  Add them to the list.
-     */
-    protected List getAllElementsOfGivenClass(HtmlElement root, List list,
-                                              Class matchClass) {
-        if (null == root) {
-            return list;
-        }
-        if (null == list) {
-            list = new ArrayList();
-        }
-        Iterable<HtmlElement> iterable = root.getAllHtmlChildElements();
-        Iterator<HtmlElement> iter = iterable.iterator();
-        while (iter.hasNext()) {
-            getAllElementsOfGivenClass((HtmlElement) iter.next(), list,
-                    matchClass);
-        }
-        if (matchClass.isInstance(root)) {
-            if (!list.contains(root)) {
-                list.add(root);
-            }
-        }
-        return list;
-    }
-
-    protected HtmlInput getInputContainingGivenId(HtmlPage root,
-                                                  String id) {
-        List list;
-        int i;
-        HtmlInput result = null;
-
-        list = getAllElementsOfGivenClass(root, null, HtmlInput.class);
-        for (i = 0; i < list.size(); i++) {
-            result = (HtmlInput) list.get(i);
-            if (-1 != result.getIdAttribute().indexOf(id)) {
-                break;
-            }
-            result = null;
-        }
-        return result;
-
-    }
-
-    protected HtmlInput getNthInputContainingGivenId(HtmlPage root,
-                                                     String id,
-                                                     int whichInput) {
-        List list;
-        int i, hitCount = 0;
-        HtmlInput result = null;
-
-        list = getAllElementsOfGivenClass(root, null, HtmlInput.class);
-        for (i = 0; i < list.size(); i++) {
-            result = (HtmlInput) list.get(i);
-            if (-1 != result.getIdAttribute().indexOf(id) &&
-                    hitCount++ == whichInput) {
-                break;
-            }
-            result = null;
-        }
-        return result;
-
-    }
-
-    protected HtmlInput getNthFromLastInputContainingGivenId(HtmlPage root,
-                                                             String id,
-                                                             int whichInput) {
-        List list;
-        int i, hitCount = 0;
-        HtmlInput result = null;
-
-        list = getAllElementsOfGivenClass(root, null, HtmlInput.class);
-        for (i = list.size() - 1; i >= 0; i--) {
-            result = (HtmlInput) list.get(i);
-            if (-1 != result.getIdAttribute().indexOf(id) &&
-                    hitCount++ == whichInput) {
-                break;
-            }
-            result = null;
-        }
-        return result;
-
-    }
-
-    protected String getText(String element) {
-        return ((HtmlElement)lastpage.getHtmlElementById(element)).asText();
-    }
-
-    /*
-      Check that the text of the element is equal to the supplied string
-     */
-    protected boolean check(String element, String expected) {
-        return expected.equals(getText(element));
-    }
-
-    protected void checkTrue(String element, String expected) {
-        assertTrue(element+":- Expected '"+expected+"', but received '"+getText(element)+"'", check(element,expected));
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsf2jsp/Jsf2JspTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsf2jsp/Jsf2JspTestCase.java
deleted file mode 100644
index 34407cb..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsf2jsp/Jsf2JspTestCase.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.jsf2jsp;
-
-
-import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.jsptest.ValidatorTestCase;
-import junit.framework.Test;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-public class Jsf2JspTestCase extends AbstractTestCase {
-
-
-    public Jsf2JspTestCase() {
-        this("Jsf2Js2TestCase");
-    }
-
-
-    public Jsf2JspTestCase(String name) {
-        super(name);
-    }
-
-    public static Test suite() {
-        return (new TestSuite(Jsf2JspTestCase.class));
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testUnsupportedFeaturesAreUnsupported() throws Exception {
-
-        // These features are not implemented in JSP
-        assert500Response("/faces/jsf2jsp/head-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/body-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/outputScript-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/outputStylesheet-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/button-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/link-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/resource-ELResolver-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/ajax-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/event-gives-500.jspx");
-        assert500Response("/faces/jsf2jsp/metadata-gives-500.jspx");
-
-    }
-
-    public void testSupportedFeaturesAreSupported() throws Exception {
-
-        // These features are implemented in JSP
-        HtmlPage page = getPage("/faces/jsf2jsp/commandButton-parameter-children-gives-hidden-fields.jspx");
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("reload");
-        page = button.click();
-        String text = page.asText();
-        assertTrue(text.contains("name01=value01"));
-        assertTrue(text.contains("name02=value02"));
-
-
-        page = getPage("/faces/jsf2jsp/resources.jspx");
-        text = page.asXml();
-        assertTrue(text.contains("duke.gif"));
-        assertTrue(text.contains("vLibrary"));
-        assertTrue(text.contains("2_01_1"));
-
-        assert200Response("/faces/jsf2jsp/selectManyJsf2Features.jspx");
-
-        Test validatorTest = ValidatorTestCase.suite();
-        TestResult validatorResult = new TestResult();
-        validatorTest.run(validatorResult);
-        assertTrue(validatorResult.failureCount() == 0);
-
-
-
-    }
-    
-    private void assert500Response(String urlFragment) throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(true);
-        HtmlPage page = null;
-        int code;
-        try {
-            page = getPage(urlFragment);
-        } catch (FailingHttpStatusCodeException fail) {
-            code = fail.getStatusCode();
-            assertTrue("GET " + urlFragment + " Expected 500, got: "+code, code==500);
-        }
-        
-    }
-
-    private void assert200Response(String urlFragment) throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(true);
-        HtmlPage page = null;
-        int code;
-        try {
-            page = getPage(urlFragment);
-        } catch (FailingHttpStatusCodeException fail) {
-            code = fail.getStatusCode();
-            assertTrue("GET " + urlFragment + " Expected 200, got: "+code, code==200);
-        }
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkMultiFormTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkMultiFormTestCase.java
deleted file mode 100644
index 469e0c1..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkMultiFormTestCase.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class CommandLinkMultiFormTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public CommandLinkMultiFormTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     * @return Tests included in suite
-     */
-    public static Test suite() {
-        return (new TestSuite(CommandLinkMultiFormTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testMultiForm() throws Exception {
-        HtmlForm form1, form2;
-        HtmlAnchor link1, link2, link3;
-        HtmlTextInput input;
-        HtmlPage page, page1;
-        HtmlHiddenInput hidden1, hidden2;
-
-        page = getPage("/faces/taglib/commandLink_multiform_test.jsp");
-        // press all command links..
-        List forms = page.getForms();
-        form1 = (HtmlForm) forms.get(0);
-        form2 = (HtmlForm) forms.get(1);
-
-        // links within the first form
-        hidden1 = (HtmlHiddenInput) form1.getInputByName("form01:j_idcl");
-        assertNotNull(hidden1);
-        //hidden1.setValueAttribute("form01:Link1");
-        //page1 = (HtmlPage) form1.submit();
-        page1 = page.getAnchorByName("form01:Link1").click();
-        assertTrue(-1 != page1.asText().indexOf("Thank you"));
-        //hidden1.setValueAttribute("form01:Link2");
-        //page1 = (HtmlPage) form1.submit();
-        page1 = page.getAnchorByName("form01:Link2").click();
-        assertTrue(-1 != page1.asText().indexOf("Thank you"));
-
-        // links within second form
-        hidden2 = (HtmlHiddenInput) form2.getInputByName("form02:j_idcl");
-        assertNotNull(hidden2);
-        //hidden2.setValueAttribute("form02:Link3");
-        //page1 = (HtmlPage) form1.submit();
-        page1 = page.getAnchorByName("form02:Link3").click();
-        assertTrue(-1 != page1.asText().indexOf("Thank you"));
-        //hidden2.setValueAttribute("form02:Link4");
-        //page1 = (HtmlPage) form1.submit();
-        page1 = page.getAnchorByName("form02:Link4").click();
-        assertTrue(-1 != page1.asText().indexOf("Thank you"));
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkNoFormTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkNoFormTestCase.java
deleted file mode 100644
index 91b2be9..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkNoFormTestCase.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-/**
- * <p>Verify expected behavior when command link is not enclosed by a form</p>
- */
-
-public class CommandLinkNoFormTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public CommandLinkNoFormTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CommandLinkNoFormTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testRenderedClinkWithNoForm() throws Exception {
-        String noFormString =
-                ": This link is disabled as it is not nested within a JSF form.";
-        HtmlPage page = getPage("/faces/standard/clinknoform.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSpan.class);
-
-        HtmlSpan p = (HtmlSpan) list.get(0);
-        assertEquals("Link1" + noFormString, p.asText());
-        p = (HtmlSpan) list.get(1);
-        assertEquals("Link2" + noFormString, p.asText());
-        p = (HtmlSpan) list.get(2);
-        assertEquals("Click me once and click me twice" +
-                noFormString, p.asText());
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkOnClickTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkOnClickTestCase.java
deleted file mode 100644
index e8af787..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/CommandLinkOnClickTestCase.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.ElementNotFoundException;
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Test Case for Multiple RenderKits.</p>
- */
-
-public class CommandLinkOnClickTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public CommandLinkOnClickTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CommandLinkOnClickTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-    // This method tests that a user provided commandLink "onclick" javascript
-    // method will get executed in addition to the internal one rendered
-    // as part of CommandLinkRenderer.
-
-    public void testOnClickReturnTrue() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/commandLinkOnClickTrue.jsp");
-
-        HtmlForm form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        HtmlHiddenInput hidden = null;
-        try {
-            hidden = (HtmlHiddenInput) form.getInputByName("form:j_idcl");
-        } catch (ElementNotFoundException e) {
-            assertTrue(false);
-        }
-        // This initial value was set by an "onLoad" javascript function in the jsp.
-        assertTrue(hidden.getValueAttribute().equals("Goodbye"));
-
-        // click the link..
-        HtmlAnchor submit = (HtmlAnchor)
-                page.getFirstAnchorByText("submit");
-        assertTrue(submit.getOnClickAttribute().equals("var a=function(){setValue('form');};var b=function(){clearFormHiddenParams_form('form');document.forms['form']['form:j_idcl'].value='form:submit'; document.forms['form'].submit(); return false;};return (a()==false) ? false : b();"));
-        try {
-            page = (HtmlPage) submit.click();
-        } catch (Exception e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        // The value of this field was set by the user provided "onclick" javascript
-        // function.
-        HtmlTextInput input = (HtmlTextInput) form.getInputByName("form:init");
-        assertTrue(input.getValueAttribute().equals("Hello"));
-
-        // The value of this field was changed by the internal Faces javascript function
-        // created by CommandLinkRenderer..
-        try {
-            hidden = (HtmlHiddenInput) form.getInputByName("form:j_idcl");
-        } catch (ElementNotFoundException e) {
-            assertTrue(false);
-        }
-        assertTrue(hidden.getValueAttribute().equals("form:submit"));
-    }
-
-    // This method tests that a user provided commandLink "onclick" javascript
-    // method will get executed.  The user provided function returns "false",
-    // so, the internal Faces function should not execute.
-    public void testOnClickReturnFalse() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/commandLinkOnClickFalse.jsp");
-
-        HtmlForm form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        HtmlHiddenInput hidden = null;
-        try {
-            hidden = (HtmlHiddenInput) form.getInputByName("form:j_idcl");
-        } catch (ElementNotFoundException e) {
-            assertTrue(false);
-        }
-        // This initial value was set by an "onLoad" javascript function in the jsp.
-        assertTrue(hidden.getValueAttribute().equals("Goodbye"));
-
-        // click the link..
-        HtmlAnchor submit = (HtmlAnchor)
-                page.getFirstAnchorByText("submit");
-        assertTrue(submit.getOnClickAttribute().equals("var a=function(){setValue('form'); return false;};var b=function(){clearFormHiddenParams_form('form');document.forms['form']['form:j_idcl'].value='form:submit'; document.forms['form'].submit(); return false;};return (a()==false) ? false : b();"));
-        try {
-            page = (HtmlPage) submit.click();
-        } catch (Exception e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        HtmlTextInput input = (HtmlTextInput) form.getInputByName("form:init");
-        assertTrue(input.getValueAttribute().equals("Hello"));
-
-        // The value of this field remains unchanged from the initial value. 
-        try {
-            hidden = (HtmlHiddenInput) form.getInputByName("form:j_idcl");
-        } catch (ElementNotFoundException e) {
-            assertTrue(false);
-        }
-        assertTrue(hidden.getValueAttribute().equals("Goodbye"));
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/ConverterTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/ConverterTestCase.java
deleted file mode 100644
index 01425f0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/ConverterTestCase.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-/**
- * <p>Test that invalid values don't cause valueChangeEvents to occur.</p>
- */
-
-public class ConverterTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ConverterTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ConverterTestCase.class));
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-    public void testConverter() throws Exception {
-        HtmlPage page = getPage("/faces/converter03.jsp");
-        List list;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        // set the initial value to be 1 for all input fields
-        ((HtmlTextInput) list.get(0)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(1)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(2)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(3)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(4)).setValueAttribute("99");
-        ((HtmlTextInput) list.get(5)).setValueAttribute("4");
-        ((HtmlTextInput) list.get(6)).setValueAttribute("12");
-        ((HtmlTextInput) list.get(7)).setValueAttribute("7");
-        ((HtmlTextInput) list.get(8)).setValueAttribute("10");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        assertTrue(-1 != page.asText().indexOf("text1 was converted to Object"));
-        assertTrue(-1 != page.asText().indexOf("text1 was converted to String"));
-        assertTrue(-1 != page.asText().indexOf("text2 was converted to Object"));
-        assertTrue(-1 != page.asText().indexOf("text2 was converted to String"));
-        assertTrue(-1 != page.asText().indexOf("text3 was converted to Object"));
-        assertTrue(-1 != page.asText().indexOf("text3 was converted to String"));
-        assertTrue(-1 != page.asText().indexOf("text4 was converted to Object"));
-        assertTrue(-1 != page.asText().indexOf("text4 was converted to String"));
-        assertTrue(-1 != page.asText().indexOf("text5: '99' could not be understood as a time. Example:"));
-        assertTrue(-1 != page.asText().indexOf("4.0"));
-        assertTrue(-1 != page.asText().indexOf("12.0"));
-        assertTrue(-1 != page.asText().indexOf("7.0"));
-        assertTrue(-1 != page.asText().indexOf("10"));
-    }
-
-    public void testConverterMessages() throws Exception {
-        HtmlPage page = getPage("/faces/converter04.jsp");
-        List list;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        // set the initial value to be "aaa" for all input fields
-        for (int i = 0; i < list.size(); i++) {
-            ((HtmlTextInput) list.get(i)).setValueAttribute("aaa");
-        }
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("form:bd1: 'aaa' must be a signed decimal number."));
-        assertTrue(-1 != page.asText().indexOf("form:bd1: 'aaa' must be a signed decimal number consisting of zero or more digits, that may be followed by a decimal point and fraction. Example: 198.23"));
-        assertTrue(-1 != page.asText().indexOf("BigDecimal2: 'aaa' must be a signed decimal number."));
-        assertTrue(-1 != page.asText().indexOf("BigDecimal2: 'aaa' must be a signed decimal number consisting of zero or more digits, that may be followed by a decimal point and fraction. Example: 198.23"));
-        assertTrue(-1 != page.asText().indexOf("form:bi1: 'aaa' must be a number consisting of one or more digits."));
-        assertTrue(-1 != page.asText().indexOf("form:bi1: 'aaa' must be a number consisting of one or more digits. Example: 9876"));
-        assertTrue(-1 != page.asText().indexOf("BigInteger2: 'aaa' must be a number consisting of one or more digits."));
-        assertTrue(-1 != page.asText().indexOf("BigInteger2: 'aaa' must be a number consisting of one or more digits. Example: 9876"));
-        assertTrue(-1 != page.asText().indexOf("form:byte1: 'aaa' must be a number between 0 and 255. "));
-        assertTrue(-1 != page.asText().indexOf("form:byte1: 'aaa' must be a number between 0 and 255. Example: 254"));
-        assertTrue(-1 != page.asText().indexOf("Byte2: 'aaa' must be a number between 0 and 255. "));
-        assertTrue(-1 != page.asText().indexOf("Byte2: 'aaa' must be a number between 0 and 255. Example: 254"));
-        assertTrue(-1 != page.asText().indexOf("form:date1: 'aaa' could not be understood as a date."));
-        assertTrue(-1 != page.asText().indexOf("form:date1: 'aaa' could not be understood as a date. Example:"));
-        assertTrue(-1 != page.asText().indexOf("Date2: 'aaa' could not be understood as a date."));
-        assertTrue(-1 != page.asText().indexOf("Date2: 'aaa' could not be understood as a date. Example:"));
-        assertTrue(-1 != page.asText().indexOf("form:time1: 'aaa' could not be understood as a time."));
-        assertTrue(-1 != page.asText().indexOf("form:time1: 'aaa' could not be understood as a time. Example:"));
-        assertTrue(-1 != page.asText().indexOf("Time2: 'aaa' could not be understood as a time."));
-        assertTrue(-1 != page.asText().indexOf("Time2: 'aaa' could not be understood as a time. Example:"));
-        assertTrue(-1 != page.asText().indexOf("form:datetime1: 'aaa' could not be understood as a date and time."));
-        assertTrue(-1 != page.asText().indexOf("form:datetime1: 'aaa' could not be understood as a date and time. Example:"));
-        assertTrue(-1 != page.asText().indexOf("DateTime2: 'aaa' could not be understood as a date and time."));
-        assertTrue(-1 != page.asText().indexOf("DateTime2: 'aaa' could not be understood as a date and time. Example:"));
-        assertTrue(-1 != page.asText().indexOf("form:double1: 'aaa' must be a number consisting of one or more digits."));
-        assertTrue(-1 != page.asText().indexOf("form:double1: 'aaa' must be a number between 4.9E-324 and 1.7976931348623157E308 Example: 1999999"));
-        assertTrue(-1 != page.asText().indexOf("Double2: 'aaa' must be a number consisting of one or more digits."));
-        assertTrue(-1 != page.asText().indexOf("Double2: 'aaa' must be a number between 4.9E-324 and 1.7976931348623157E308 Example: 1999999"));
-        assertTrue(-1 != page.asText().indexOf("form:float1: 'aaa' must be a number between 1.4E-45 and 3.4028235E38 Example: 2000000000"));
-        assertTrue(-1 != page.asText().indexOf("Float2: 'aaa' must be a number consisting of one or more digits."));
-        assertTrue(-1 != page.asText().indexOf("Float2: 'aaa' must be a number between 1.4E-45 and 3.4028235E38 Example: 2000000000"));
-        assertTrue(-1 != page.asText().indexOf("form:integer1: 'aaa' must be a number between -2147483648 and 2147483647 Example: 9346"));
-        assertTrue(-1 != page.asText().indexOf("Integer2: 'aaa' must be a number consisting of one or more digits. "));
-        assertTrue(-1 != page.asText().indexOf("Integer2: 'aaa' must be a number between -2147483648 and 2147483647 Example: 9346"));
-        assertTrue(-1 != page.asText().indexOf("form:long1: 'aaa' must be a number between -9223372036854775808 to 9223372036854775807 Example: 98765432"));
-        assertTrue(-1 != page.asText().indexOf("Long2: 'aaa' must be a number consisting of one or more digits. "));
-        assertTrue(-1 != page.asText().indexOf("Long2: 'aaa' must be a number between -9223372036854775808 to 9223372036854775807 Example: 98765432"));
-        assertTrue(-1 != page.asText().indexOf("form:number1: 'aaa' could not be understood as a currency value."));
-        assertTrue(-1 != page.asText().indexOf("form:number1: 'aaa' could not be understood as a currency value. Example: $99.99"));
-        assertTrue(-1 != page.asText().indexOf("Number2: 'aaa' could not be understood as a currency value."));
-        assertTrue(-1 != page.asText().indexOf("Number2: 'aaa' could not be understood as a currency value. Example: $99.99"));
-        assertTrue(-1 != page.asText().indexOf("form:number3: 'aaa' is not a number."));
-        assertTrue(-1 != page.asText().indexOf("form:number3: 'aaa' is not a number. Example: 99"));
-        assertTrue(-1 != page.asText().indexOf("Number4: 'aaa' is not a number."));
-        assertTrue(-1 != page.asText().indexOf("Number4: 'aaa' is not a number. Example: 99"));
-        assertTrue(-1 != page.asText().indexOf("form:number5: 'aaa' could not be understood as a percentage."));
-        assertTrue(-1 != page.asText().indexOf("form:number5: 'aaa' could not be understood as a percentage. Example: 75%"));
-        assertTrue(-1 != page.asText().indexOf("Number6: 'aaa' could not be understood as a percentage."));
-        assertTrue(-1 != page.asText().indexOf("Number6: 'aaa' could not be understood as a percentage. Example: 75%"));
-        assertTrue(-1 != page.asText().indexOf("form:number7: 'aaa' is not a number pattern."));
-        assertTrue(-1 != page.asText().indexOf("form:number7: 'aaa' is not a number pattern. Example: #,##0.0#"));
-        assertTrue(-1 != page.asText().indexOf("Number8: 'aaa' is not a number pattern."));
-        assertTrue(-1 != page.asText().indexOf("Number8: 'aaa' is not a number pattern. Example: #,##0.0#"));
-        assertTrue(-1 != page.asText().indexOf("form:short1: 'aaa' must be a number between -32768 and 32767 Example: 32456"));
-        assertTrue(-1 != page.asText().indexOf("Short2: 'aaa' must be a number consisting of one or more digits. "));
-        assertTrue(-1 != page.asText().indexOf("Short2: 'aaa' must be a number between -32768 and 32767 Example: 32456"));
-    }
-
-    public void testEnumConverter() throws Exception {
-        HtmlPage page = getPage("/faces/enum-converter.jsp");
-        List list;
-
-        // Case 0, invalid data in both text fields
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-        for (int i = 0; i < list.size(); i++) {
-            ((HtmlTextInput) list.get(i)).setValueAttribute("aoeuoeuoe");
-        }
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("suit: 'aoeuoeuoe' must be convertible to an enum. suit: 'aoeuoeuoe' must be convertible to an enum from the enum that contains the constant 'aoeuoeuoe'."));
-        assertTrue(-1 != page.asText().indexOf("color: 'aoeuoeuoe' must be convertible to an enum. color: 'aoeuoeuoe' must be convertible to an enum from the enum that contains the constant 'aoeuoeuoe'."));
-
-        // Case 1, valid Suit, invalid color
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-        ((HtmlTextInput) list.get(0)).setValueAttribute("Hearts");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 == page.asText().indexOf("suit:"));
-        assertTrue(-1 != page.asText().indexOf("color: 'aoeuoeuoe' must be convertible to an enum. color: 'aoeuoeuoe' must be convertible to an enum from the enum that contains the constant 'aoeuoeuoe'."));
-
-        // Case 2, valid Suit, valid color
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-        ((HtmlTextInput) list.get(1)).setValueAttribute("Blue");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 == page.asText().indexOf("suit:"));
-        assertTrue(-1 == page.asText().indexOf("color:"));
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        // Case 3, invalid suit, valid color
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-        ((HtmlTextInput) list.get(0)).setValueAttribute("aoeuoeuoe");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("suit: 'aoeuoeuoe' must be convertible to an enum. suit: 'aoeuoeuoe' must be convertible to an enum from the enum that contains the constant 'aoeuoeuoe'."));
-        assertTrue(-1 == page.asText().indexOf("color:"));
-
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/ForEachTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/ForEachTestCase.java
deleted file mode 100644
index 815fc16..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/ForEachTestCase.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <p>Test that invalid values don't cause valueChangeEvents to occur.</p>
- */
-
-public class ForEachTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ForEachTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ForEachTestCase.class));
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-    public void testForEach() throws Exception {
-        HtmlPage page = getPage("/faces/forEach01.jsp");
-
-        // Make sure values are displayed properly for the initial request 
-        //assert outputText values are as expected
-        assertTrue(-1 != page.asText().indexOf("output1"));
-        assertTrue(-1 != page.asText().indexOf("output2"));
-        assertTrue(-1 != page.asText().indexOf("output3"));
-
-        //assert inputText without "id" values are as expected
-        assertTrue(-1 != page.asText().indexOf("inputText1=input1"));
-        assertTrue(-1 != page.asText().indexOf("inputText2=input2"));
-        assertTrue(-1 != page.asText().indexOf("inputText3=input3"));
-
-        //assert inputText with "id" values are as expected
-        assertTrue(-1 != page.asText().indexOf("inputid1"));
-        assertTrue(-1 != page.asText().indexOf("inputid2"));
-        assertTrue(-1 != page.asText().indexOf("inputid3"));
-
-        // Assign new values to input fields, submit the form.
-        List list;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        ((HtmlTextInput) list.get(0)).setValueAttribute("newValue1");
-        ((HtmlTextInput) list.get(1)).setValueAttribute("newValue2");
-        ((HtmlTextInput) list.get(2)).setValueAttribute("newValue3");
-
-        ((HtmlTextInput) list.get(3)).setValueAttribute("newValueid1");
-        ((HtmlTextInput) list.get(4)).setValueAttribute("newValueid2");
-        ((HtmlTextInput) list.get(5)).setValueAttribute("newValueid3");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        // make sure the values are as expected on post back.
-        assertTrue(-1 != page.asText().indexOf("output1"));
-        assertTrue(-1 != page.asText().indexOf("output2"));
-        assertTrue(-1 != page.asText().indexOf("output3"));
-
-        //assert inputText without "id" values are as expected
-        assertTrue(-1 != page.asText().indexOf("inputText1=input1"));
-        assertTrue(-1 != page.asText().indexOf("inputText2=input2"));
-        assertTrue(-1 != page.asText().indexOf("inputText3=input3"));
-
-        assertTrue(-1 != page.asText().indexOf("newValue1"));
-        assertTrue(-1 != page.asText().indexOf("newValue2"));
-        assertTrue(-1 != page.asText().indexOf("newValue3"));
-
-        //assert inputText with "id" values are as expected
-        assertTrue(-1 != page.asText().indexOf("inputid1"));
-        assertTrue(-1 != page.asText().indexOf("inputid2"));
-        assertTrue(-1 != page.asText().indexOf("inputid3"));
-
-        assertTrue(-1 != page.asText().indexOf("newValueid1"));
-        assertTrue(-1 != page.asText().indexOf("newValueid2"));
-        assertTrue(-1 != page.asText().indexOf("newValueid3"));
-    }
-
-    public void testForEachIssue714() throws Exception {
-
-        HtmlPage page = getPage("/faces/forEach04.jsp");
-        List<HtmlSpan> spans = new ArrayList<HtmlSpan>(2);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertTrue(spans.size() == 2);
-        HtmlSpan span = spans.get(0);
-        assertTrue("j_id_id16:idfrag1:frag1".equals(span.getIdAttribute()));
-        span = spans.get(1);
-        assertTrue("j_id_id16:idfrag2:frag2".equals(span.getIdAttribute()));
-
-        // submit the form to ensure no duplicate ID exceptions are
-        // raised during post-back
-        List<HtmlSubmitInput> buttons = new ArrayList<HtmlSubmitInput>(1);
-        buttons = getAllElementsOfGivenClass(page, buttons, HtmlSubmitInput.class);
-        assertTrue(buttons.size() == 1);
-        HtmlSubmitInput submit = buttons.get(0);
-        page = (HtmlPage) submit.click();
-
-        // validate the IDs are as expected after post-back
-        spans = new ArrayList<HtmlSpan>(2);
-        getAllElementsOfGivenClass(page, spans, HtmlSpan.class);
-        assertTrue(spans.size() == 2);
-        span = spans.get(0);
-        assertTrue("j_id_id16:idfrag1:frag1".equals(span.getIdAttribute()));
-        span = spans.get(1);
-        assertTrue("j_id_id16:idfrag2:frag2".equals(span.getIdAttribute()));
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/FormElTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/FormElTestCase.java
deleted file mode 100644
index 1ccb5ef..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/FormElTestCase.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-
-/**
- * <p>Verify that we have an intelligent error message when the user
- * forgets the view tag.</p>
- */
-
-public class FormElTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FormElTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FormElTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testFormEnctype() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/jsp/formEl.jsp");
-        List forms = page.getForms();
-        assertEquals("multipart/form-data", ((HtmlForm) forms.get(0)).getEnctypeAttribute());
-        assertEquals("application/x-www-form-urlencoded", ((HtmlForm) forms.get(1)).getEnctypeAttribute());
-        assertEquals("hi", ((HtmlForm) forms.get(2)).getEnctypeAttribute());
-        assertEquals("multipart/form-data", ((HtmlForm) forms.get(3)).getEnctypeAttribute());
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/FormInputTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/FormInputTestCase.java
deleted file mode 100644
index 1d9da89..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/FormInputTestCase.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Test Case for Form Input.</p>
- */
-
-public class FormInputTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FormInputTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FormInputTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------- form-input-02.jsp values ----------
-
-    private String formInput02_name = "formInput02_form";
-
-    private String formInput02_names[] =
-            {
-                    "booleanProperty", "byteProperty", "doubleProperty", "floatProperty",
-                    "intProperty", "longProperty", "shortProperty", "stringProperty"
-            };
-
-    private String formInput02_pristine[] =
-            {
-                    "true", "12", "123.45", "12.34",
-                    "123", "12345", "1234", "This is a String property"
-            };
-
-    private String formInput02_updated[] =
-            {
-                    "false", "21", "543.21", "43.21",
-                    "321", "54321", "4321", "This was a String property"
-            };
-
-    // ------------------------------------------------- Individual Test Methods
-
-    // ---------- form-input-02.jsp tests ----------
-
-    // Request a pristine copy of the form a couple of times
-
-    public void testFormInput02_pristine() throws Exception {
-
-        checkFormInput00();
-        checkFormInput02(getFormInput02(), formInput02_pristine);
-        checkFormInput01();
-        checkFormInput02(getFormInput02(), formInput02_pristine);
-        checkFormInput00();
-
-    }
-
-
-    // Submit the form with no modifications
-    public void testFormInput02_submit01() throws Exception {
-
-        checkFormInput00();
-        HtmlPage page = getFormInput02();
-        checkFormInput02(page, formInput02_pristine);
-        HtmlForm form = getFormById(page, formInput02_name);
-        assertNotNull("form exists", form);
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-                form.getInputByName(formInput02_name +
-                        NamingContainer.SEPARATOR_CHAR +
-                        "submit");
-        page = (HtmlPage) submit.click();
-        checkFormInput02(page, formInput02_pristine);
-
-    }
-
-
-    // Submit the form with updates to every field
-    public void testFormInput02_submit02() throws Exception {
-
-        checkFormInput00();
-        HtmlPage page = getFormInput02();
-        checkFormInput02(page, formInput02_pristine);
-        HtmlForm form = getFormById(page, formInput02_name);
-        assertNotNull("form exists", form);
-        for (int i = 0; i < formInput02_names.length; i++) {
-            HtmlTextInput input = (HtmlTextInput)
-                    form.getInputByName(formInput02_name +
-                            NamingContainer.SEPARATOR_CHAR +
-                            formInput02_names[i]);
-            assertNotNull("field '" + formInput02_names[i] + "' exists", input);
-            input.setValueAttribute(formInput02_updated[i]);
-        }
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-                form.getInputByName(formInput02_name +
-                        NamingContainer.SEPARATOR_CHAR +
-                        "submit");
-        page = (HtmlPage) submit.click();
-        checkFormInput02(page, formInput02_updated);
-        checkFormInput01();
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    // Check the reset page to force a new component tree
-
-    private void checkFormInput00() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/form-input-00.jsp");
-        assertEquals("Correct page title",
-                "form-input-00", page.getTitleText());
-
-    }
-
-
-    // Check the success page was received
-    private void checkFormInput01() throws Exception {
-
-        checkFormInput01(getPage("/faces/jsp/form-input-01.jsp"));
-
-    }
-
-
-    // Check the success page was received
-    private void checkFormInput01(HtmlPage page) {
-
-        assertEquals("Correct page title",
-                "form-input-01", page.getTitleText());
-
-    }
-
-
-    // Check the values of the input fields against the specified list
-    private void checkFormInput02(HtmlPage page, String expected[]) {
-
-
-        assertEquals("Correct page title",
-                "form-input-02", page.getTitleText());
-        HtmlForm form = getFormById(page, formInput02_name);
-        assertNotNull("form exists", form);
-        for (int i = 0; i < expected.length; i++) {
-            HtmlTextInput input = (HtmlTextInput)
-                    form.getInputByName(formInput02_name +
-                            NamingContainer.SEPARATOR_CHAR +
-                            formInput02_names[i]);
-            assertNotNull("field '" + formInput02_names[i] + "' exists", input);
-            assertEquals("field '" + formInput02_names[i] + "' value",
-                    expected[i], input.getValueAttribute());
-        }
-
-    }
-
-
-    // Retrieve the form-input-02 page
-    private HtmlPage getFormInput02() throws Exception {
-
-        return (getPage("/faces/jsp/form-input-02.jsp"));
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/IdRefTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/IdRefTestCase.java
deleted file mode 100644
index 0a4731e..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/IdRefTestCase.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.*;
-
-/**
- * <p>
- * Test id-ref values in <code>h:message</code> and <code>h:outputLabel</code>
- * tags, and their interaction with <code>c:forEach</code>.
- * </p>
- */
-
-public class IdRefTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------
-    // Constructors
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public IdRefTestCase(String name) {
-        super(name);
-    }
-
-    // ----------------------------------------------------
-    // Overall Test Methods
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(IdRefTestCase.class));
-    }
-
-    private Map mapElementsByAttribute(HtmlElement docElem, String tagName,
-                                       String attName, String filterAtt, String filterValue) {
-        Map elems = new TreeMap();
-        List tags = docElem.getHtmlElementsByTagName(tagName);
-        for (Iterator tagIt = tags.iterator(); tagIt.hasNext();) {
-            HtmlElement tag = (HtmlElement) tagIt.next();
-            if (filterAtt != null && filterValue != null &&
-                    !filterValue.equals(tag.getAttributeValue(filterAtt))) {
-                continue;
-            }
-            String attValue = tag.getAttributeValue(attName);
-            assertNotNull(attName + " attribute of " + tagName, attValue);
-            assertNotSame(attName + " attribute of " + tagName, 0, attValue.length());
-            assertFalse("More than one " + tagName + " contains " + attName
-                    + "=" + attValue, elems.containsKey(attValue));
-            elems.put(attValue, tag);
-        }
-        return elems;
-    }
-
-    private Map mapMessagesById(HtmlElement docElem) {
-        Map elems = new TreeMap();
-        List tags = docElem.getHtmlElementsByTagName("span");
-        for (Iterator tagIt = tags.iterator(); tagIt.hasNext();) {
-            HtmlSpan tag = (HtmlSpan) tagIt.next();
-            if ("message".equals(tag.getClassAttribute())) {
-                String text = tag.asText();
-                assertNotSame(
-                        "expect validation message to start with component id",
-                        -1, text.indexOf(": "));
-                String id = text.substring(0, text.indexOf(": ")).trim();
-                assertFalse("Duplicate message for input " + id, elems
-                        .containsKey(id));
-                elems.put(id, tag);
-            }
-        }
-        return elems;
-    }
-
-    // -------------------------------------------------
-    // Individual Test Methods
-    public void testIdRefs() throws Exception {
-        HtmlPage page = getPage("/faces/forEach03.jsp");
-
-        // assert every input has a label, and every label refers to an input
-        Map inputTagsById = mapElementsByAttribute(page.getDocumentElement(),
-                "input", "id", "type", "text");
-        Map labelTagsByFor = mapElementsByAttribute(page.getDocumentElement(),
-                "label", "for", null, null);
-        assertEquals("//label/@for set should be the same as //input/@id set",
-                inputTagsById.keySet(), labelTagsByFor.keySet());
-
-        // assign new values to input fields, submit the form.
-        String idPrefix = "myform:input";
-        String[] testIds = new String[]{idPrefix + "Int1", idPrefix + "Id1",
-                idPrefix + "Id2j_id_1", idPrefix + "Id3j_id_2"};
-        for (int i = 0; i < testIds.length; ++i) {
-            HtmlTextInput input = (HtmlTextInput) inputTagsById.get(testIds[i]);
-            input.setValueAttribute("");
-        }
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        // make sure every 'value required' validation is present on post back.
-        Map messageMap = mapMessagesById(page.getDocumentElement());
-        assertEquals("One 'value required' message for each cleared input",
-                testIds.length, messageMap.size());
-        assertTrue("Only cleared inputs have messages", Arrays.asList(testIds)
-                .containsAll(messageMap.keySet()));
-        assertTrue("All cleared inputs have messages", messageMap.keySet()
-                .containsAll(Arrays.asList(testIds)));
-    }
-
-    public void testIncludedLoopIdRefs() throws Exception {
-        HtmlPage page = getPage("/faces/forEach03.jsp");
-        Map inputTagsById = mapElementsByAttribute(page.getDocumentElement(),
-                "input", "id", "type", "text");
-        String[] testIds = {
-                "myform:inputId11",
-                "myform:inputId11j_id_1",
-                "myform:inputId11j_id_2"
-        };
-        for (int i = 0; i < testIds.length; i++) {
-            HtmlTextInput input = (HtmlTextInput) inputTagsById.get(testIds[i]);
-            input.setValueAttribute("");
-        }
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        Map messageMap = mapMessagesById(page.getDocumentElement());
-        assertEquals("One 'value required' message for each cleared input",
-                testIds.length, messageMap.size());
-        assertTrue("Only cleared inputs have messages", Arrays.asList(testIds)
-                .containsAll(messageMap.keySet()));
-        assertTrue("All cleared inputs have messages", messageMap.keySet()
-                .containsAll(Arrays.asList(testIds)));
-    }
-
-    public void testIncludeNoLoopIdRef() throws Exception {
-        HtmlPage page = getPage("/faces/forEach03.jsp");
-        Map inputTagsById = mapElementsByAttribute(page.getDocumentElement(),
-                "input", "id", "type", "text");
-        String[] testIds = {
-                "myform:Short11",
-        };
-        for (int i = 0; i < testIds.length; i++) {
-            HtmlTextInput input = (HtmlTextInput) inputTagsById.get(testIds[i]);
-            input.setValueAttribute("");
-        }
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        Map messageMap = mapMessagesById(page.getDocumentElement());
-        assertEquals("One 'value required' message for each cleared input",
-                testIds.length, messageMap.size());
-        assertTrue("Only cleared inputs have messages", Arrays.asList(testIds)
-                .containsAll(messageMap.keySet()));
-        assertTrue("All cleared inputs have messages", messageMap.keySet()
-                .containsAll(Arrays.asList(testIds)));
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/InvalidateSessionTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/InvalidateSessionTestCase.java
deleted file mode 100644
index 7c59cde..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/InvalidateSessionTestCase.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class InvalidateSessionTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public InvalidateSessionTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(InvalidateSessionTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testInvalidateSession() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlAnchor link;
-        HtmlTextInput input;
-        HtmlPage page;
-
-        page = getPage("/faces/session-invalidator.jsp");
-        form = getFormById(page, "form");
-        submit = (HtmlSubmitInput)
-                form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                        "button1");
-
-        // press button1
-        page = (HtmlPage) submit.click();
-        assertEquals("Test with action that invalidates a session.",
-                page.getTitleText());
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/JspIntegrationTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/JspIntegrationTestCase.java
deleted file mode 100644
index 935a29b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/JspIntegrationTestCase.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class JspIntegrationTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public JspIntegrationTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(JspIntegrationTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-    // Test dynamically adding and removing components
-
-    public void testJspDynamic01() throws Exception {
-
-        // Check with children that have explicit ids
-        checkJspDynamic00();
-        checkJspDynamic01("",
-                "[A]{ } [Z]");
-        checkJspDynamic01("?mode=create&id=C1&value=[1]&javax.faces.ViewState=j_id2:j_id3",
-                "[A]{ [1] } [Z]");
-        checkJspDynamic01("?mode=create&id=C2&value=[2]&javax.faces.ViewState=j_id2:j_id4",
-                "[A]{ [1] [2] } [Z]");
-        checkJspDynamic01("?mode=create&id=C3&value=[3]&javax.faces.ViewState=j_id2:j_id5",
-                "[A]{ [1] [2] [3] } [Z]");
-        checkJspDynamic01("?mode=delete&id=C2&javax.faces.ViewState=j_id2:j_id6",
-                "[A]{ [1] [3] } [Z]");
-
-        checkJspDynamic00();
-        client = new WebClient();
-        checkJspDynamic01("",
-                "[A]{ } [Z]");
-
-        // Check with children that do not have ids
-        /********** PENDING(edburns): pending resolution of 5040235
-         checkJspDynamic00();
-         checkJspDynamic01("",
-         "[A] { } [Z]");
-         checkJspDynamic01("?mode=create&value=[1]",
-         "[A] { [1] } [Z]");
-         checkJspDynamic01("?mode=create&value=[2]",
-         "[A] { [1] [2] } [Z]");
-         checkJspDynamic01("?mode=create&value=[3]",
-         "[A] { [1] [2] [3] } [Z]");
-         **************/
-        checkJspDynamic00();
-        client = new WebClient();
-        checkJspDynamic01("",
-                "[A]{ } [Z]");
-    }
-
-    // NOTE:  testJspIncludeXX tests are analogous to testJstlImportXX
-    // tests, but exercise <jsp:include> instead of <c:import>.
-
-    // Test importing JSPs with literal text
-
-    public void testJspInclude01() throws Exception {
-
-        checkJspInclude00();
-        checkJspInclude01();
-        checkJspInclude01();
-
-        checkJspInclude00();
-        checkJspInclude01();
-        checkJspInclude01();
-
-    }
-
-
-    // Test importing JSPs with simple components
-    public void testJspInclude02() throws Exception {
-
-        checkJspInclude00();
-        checkJspInclude02();
-        checkJspInclude02();
-
-        checkJspInclude00();
-        checkJspInclude02();
-        checkJspInclude02();
-
-    }
-
-
-    // Test selectively importing JSPs with simple components (explicit ids)
-    public void testJspInclude03() throws Exception {
-
-        // Check each individual case multiple times
-        checkJspInclude00();
-        checkJspInclude03();
-        checkJspInclude03a();
-        checkJspInclude03a();
-        checkJspInclude03a();
-        checkJspInclude00();
-        checkJspInclude03();
-        checkJspInclude03b();
-        checkJspInclude03b();
-        checkJspInclude03b();
-        checkJspInclude00();
-        checkJspInclude03();
-        checkJspInclude03c();
-        checkJspInclude03c();
-        checkJspInclude03c();
-
-        // Check cases in ascending order
-        checkJspInclude00();
-        checkJspInclude03();
-        checkJspInclude03a();
-        checkJspInclude03b();
-        checkJspInclude03c();
-
-        // Check cases in descending order
-        checkJspInclude00();
-        checkJspInclude03();
-        checkJspInclude03c();
-        checkJspInclude03b();
-        checkJspInclude03a();
-
-        // Check cases in random order
-        checkJspInclude00();
-        checkJspInclude03();
-        checkJspInclude03b();
-        checkJspInclude03a();
-        checkJspInclude03c();
-
-    }
-
-
-    // Test selectively importing JSPs with simple components (naming container)
-    public void testJspInclude04() throws Exception {
-
-        // Check each individual case multiple times
-        checkJspInclude00();
-        checkJspInclude04();
-        checkJspInclude04a();
-        checkJspInclude04a();
-        checkJspInclude04a();
-        checkJspInclude00();
-        checkJspInclude04();
-        checkJspInclude04b();
-        checkJspInclude04b();
-        checkJspInclude04b();
-        checkJspInclude00();
-        checkJspInclude04();
-        checkJspInclude04c();
-        checkJspInclude04c();
-        checkJspInclude04c();
-
-        // Check cases in ascending order
-        checkJspInclude00();
-        checkJspInclude04();
-        checkJspInclude04a();
-        checkJspInclude04b();
-        checkJspInclude04c();
-
-        // Check cases in descending order
-        checkJspInclude00();
-        checkJspInclude04();
-        checkJspInclude04c();
-        checkJspInclude04b();
-        checkJspInclude04a();
-
-        // Check cases in random order
-        checkJspInclude00();
-        checkJspInclude04();
-        checkJspInclude04b();
-        checkJspInclude04a();
-        checkJspInclude04c();
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    // Check the reset page to force a new component tree
-
-    private void checkJspDynamic00() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-dynamic-00.jsp");
-        assertEquals("Correct page title",
-                "jsp-dynamic-00", page.getTitleText());
-
-    }
-
-
-    // Check the result of requesting the specified page
-    private void checkJspDynamic01(String query, String result)
-            throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-dynamic-01.jsp" + query);
-        assertEquals("Correct page title",
-                "jsp-dynamic-01", page.getTitleText());
-        String bodyText = getBodyText(page);
-        assertTrue("Correct body element",
-                -1 != bodyText.indexOf(result));
-
-    }
-
-
-    // Check the reset page to force a new component tree
-    private void checkJspInclude00() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-00.jsp");
-        assertEquals("Correct page title",
-                "jsp-include-00", page.getTitleText());
-
-    }
-
-
-    // Check imports with literal text
-    private void checkJspInclude01() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-01.jsp");
-        assertEquals("Correct page title",
-                "jsp-include-01", page.getTitleText());
-        assertEquals("Correct body element",
-                "[A] [B] [C] [D] [E]", getBodyText(page));
-
-    }
-
-
-    // Check imports with simple components
-    private void checkJspInclude02() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-02.jsp");
-        assertEquals("Correct page title",
-                "jsp-include-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[A][B][C][D][E]", getBodyText(page));
-
-    }
-
-    private void checkJspInclude03() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-03.jsp");
-        assertEquals("Correct page title",
-                "jsp-include-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2c][2x][3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (explicit ids)
-    private void checkJspInclude03a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-03.jsp?choose=a&javax.faces.ViewState=j_id2:j_id3");
-        assertEquals("Correct page title",
-                "jsp-include-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2a][2z][3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (explicit ids)
-    private void checkJspInclude03b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-03.jsp?choose=b&javax.faces.ViewState=j_id2:j_id3");
-        assertEquals("Correct page title",
-                "jsp-include-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2b][2y][3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (explicit ids)
-    private void checkJspInclude03c() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-03.jsp?choose=c&javax.faces.ViewState=j_id2:j_id3");
-        assertEquals("Correct page title",
-                "jsp-include-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2c][2x][3]", getBodyText(page));
-
-    }
-
-    private void checkJspInclude04() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-04.jsp");
-        assertEquals("Correct page title",
-                "jsp-include-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2c][2x][3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (naming container)
-    private void checkJspInclude04a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-04.jsp?choose=a&javax.faces.ViewState=j_id2:j_id3");
-        assertEquals("Correct page title",
-                "jsp-include-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2a][2z][3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (naming container)
-    private void checkJspInclude04b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-04.jsp?choose=b&javax.faces.ViewState=j_id2:j_id3");
-        assertEquals("Correct page title",
-                "jsp-include-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2b][2y][3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (naming container)
-    private void checkJspInclude04c() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jsp-include-04.jsp?choose=c&javax.faces.ViewState=j_id2:j_id3");
-        assertEquals("Correct page title",
-                "jsp-include-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1][2c][2x][3]", getBodyText(page));
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/JstlIntegrationTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/JstlIntegrationTestCase.java
deleted file mode 100644
index b8ab09f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/JstlIntegrationTestCase.java
+++ /dev/null
@@ -1,907 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Test Case for JSTL Interoperability.</p>
- */
-
-public class JstlIntegrationTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public JstlIntegrationTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------- jstl-foreach-01.jsp values ----------
-
-    private String jstlForEach01_name = "jstlForeach01_form";
-
-    private String jstlForEach01_names[] =
-            {"arrayProp0", "arrayProp1", "arrayProp2", "arrayProp3", "arrayProp4"};
-
-    private String jstlForEach01_pristine[] =
-            {
-                    "First String", "Second String", "Third String", "Fourth String",
-                    "Fifth String"
-            };
-
-    private String jstlForEach01_updated[] =
-            {
-                    "New First String", "Second String", "Third String", "New Fourth String",
-                    "Fifth String"
-            };
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(JstlIntegrationTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testEmpty() {
-    }
-
-
-    /**
-     * ******************* PENDING(): re-enable these when we figure
-     * out how to do c:forEach.
-     * <p/>
-     * // Components Inside Choose (Explicit Identifiers)
-     * public void testJstlChoose01() throws Exception {
-     * <p/>
-     * // Check each individual case multiple times
-     * checkJstlChoose00();
-     * checkJstlChoose01a();
-     * checkJstlChoose01a();
-     * checkJstlChoose01a();
-     * checkJstlChoose00();
-     * checkJstlChoose01b();
-     * checkJstlChoose01b();
-     * checkJstlChoose01b();
-     * checkJstlChoose00();
-     * checkJstlChoose01c();
-     * checkJstlChoose01c();
-     * checkJstlChoose01c();
-     * <p/>
-     * // Check cases in ascending order
-     * checkJstlChoose00();
-     * checkJstlChoose01a();
-     * checkJstlChoose01b();
-     * checkJstlChoose01c();
-     * <p/>
-     * // Check cases in descending order
-     * checkJstlChoose00();
-     * checkJstlChoose01c();
-     * checkJstlChoose01b();
-     * checkJstlChoose01a();
-     * <p/>
-     * // Check cases in random order
-     * checkJstlChoose00();
-     * checkJstlChoose01b();
-     * checkJstlChoose01a();
-     * checkJstlChoose01c();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Components Inside Choose (In Naming Container)
-     * public void testJstlChoose02() throws Exception {
-     * <p/>
-     * // Check each individual case multiple times
-     * checkJstlChoose00();
-     * checkJstlChoose02a();
-     * checkJstlChoose02a();
-     * checkJstlChoose02a();
-     * checkJstlChoose00();
-     * checkJstlChoose02b();
-     * checkJstlChoose02b();
-     * checkJstlChoose02b();
-     * checkJstlChoose00();
-     * checkJstlChoose02c();
-     * checkJstlChoose02c();
-     * checkJstlChoose02c();
-     * <p/>
-     * // Check cases in ascending order
-     * checkJstlChoose00();
-     * checkJstlChoose02a();
-     * checkJstlChoose02b();
-     * checkJstlChoose02c();
-     * <p/>
-     * // Check cases in descending order
-     * checkJstlChoose00();
-     * checkJstlChoose02c();
-     * checkJstlChoose02b();
-     * checkJstlChoose02a();
-     * <p/>
-     * // Check cases in random order
-     * checkJstlChoose00();
-     * checkJstlChoose02b();
-     * checkJstlChoose02a();
-     * checkJstlChoose02c();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Form with fields rendered inside a <c:forEach> - pristine
-     * public void testJstForEach01_pristine() throws Exception {
-     * <p/>
-     * checkJstlForEach00();
-     * checkJstlForEach01(getJstlForEach01(), jstlForEach01_pristine);
-     * checkJstlForEach00();
-     * checkJstlForEach01(getJstlForEach01(), jstlForEach01_pristine);
-     * checkJstlForEach00();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Form with fields rendered inside a <c:forEach> - submit unchanged
-     * public void testJstForEach01_submit01() throws Exception {
-     * <p/>
-     * checkJstlForEach00();
-     * HtmlPage page = getJstlForEach01();
-     * checkJstlForEach01(page, jstlForEach01_pristine);
-     * HtmlForm form = getFormById(page, jstlForEach01_name);
-     * assertNotNull("form exists", form);
-     * HtmlSubmitInput submit = (HtmlSubmitInput)
-     * form.getInputByName(jstlForEach01_name +
-     * NamingContainer.SEPARATOR_CHAR +
-     * "submit");
-     * page = (HtmlPage) submit.click();
-     * checkJstlForEach01(page, jstlForEach01_pristine);
-     * checkJstlForEach00();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Form with fields rendered inside a <c:forEach> - submit modified
-     * public void testJstForEach01_submit02() throws Exception {
-     * <p/>
-     * checkJstlForEach00();
-     * HtmlPage page = getJstlForEach01();
-     * checkJstlForEach01(page, jstlForEach01_pristine);
-     * HtmlForm form = getFormById(page, jstlForEach01_name);
-     * assertNotNull("form exists", form);
-     * for (int i = 0; i < jstlForEach01_names.length; i++) {
-     * HtmlTextInput input = (HtmlTextInput)
-     * form.getInputByName(jstlForEach01_name +
-     * NamingContainer.SEPARATOR_CHAR +
-     * jstlForEach01_names[i]);
-     * assertNotNull("field '" + jstlForEach01_names[i] + "' exists", input);
-     * input.setValueAttribute(jstlForEach01_updated[i]);
-     * }
-     * HtmlSubmitInput submit = (HtmlSubmitInput)
-     * form.getInputByName(jstlForEach01_name + NamingContainer.SEPARATOR_CHAR +
-     * "submit");
-     * page = (HtmlPage) submit.click();
-     * checkJstlForEach01(page, jstlForEach01_updated);
-     * checkJstlForEach00();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Components Inside Conditional
-     * public void testJstlIf01() throws Exception {
-     * <p/>
-     * // Check the "true" case multiple times in a row
-     * checkJstlIf00();
-     * checkJstlIf01a();
-     * checkJstlIf01a();
-     * checkJstlIf01a();
-     * checkJstlIf01a();
-     * <p/>
-     * // Check the "false case multiple times in a row
-     * checkJstlIf00();
-     * checkJstlIf01b();
-     * checkJstlIf01b();
-     * checkJstlIf01b();
-     * checkJstlIf01b();
-     * <p/>
-     * // Check alternating access to the same page (first pattern)
-     * checkJstlIf00();
-     * checkJstlIf01a();
-     * checkJstlIf01b();
-     * checkJstlIf01a();
-     * checkJstlIf01b();
-     * <p/>
-     * // Check alternating access to the same page (second pattern)
-     * checkJstlIf00();
-     * checkJstlIf01b();
-     * checkJstlIf01a();
-     * checkJstlIf01b();
-     * checkJstlIf01a();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Components and facets inside conditional
-     * public void testJstlIf02() throws Exception {
-     * <p/>
-     * // Check each style sequentially
-     * checkJstlIf00();
-     * checkJstlIf02a();
-     * checkJstlIf02a();
-     * checkJstlIf02a();
-     * checkJstlIf00();
-     * checkJstlIf02b();
-     * checkJstlIf02b();
-     * checkJstlIf02b();
-     * checkJstlIf00();
-     * checkJstlIf02c();
-     * checkJstlIf02c();
-     * checkJstlIf02c();
-     * checkJstlIf00();
-     * checkJstlIf02d();
-     * checkJstlIf02d();
-     * checkJstlIf02d();
-     * checkJstlIf00();
-     * checkJstlIf02e();
-     * checkJstlIf02e();
-     * checkJstlIf02e();
-     * <p/>
-     * // Check each style in ascending order
-     * checkJstlIf00();
-     * checkJstlIf02a();
-     * checkJstlIf02b();
-     * checkJstlIf02c();
-     * checkJstlIf02d();
-     * checkJstlIf02e();
-     * <p/>
-     * // Check each style in descending order
-     * checkJstlIf00();
-     * checkJstlIf02e();
-     * checkJstlIf02d();
-     * checkJstlIf02c();
-     * checkJstlIf02b();
-     * checkJstlIf02a();
-     * <p/>
-     * // Check each style in a more random order
-     * checkJstlIf00();
-     * checkJstlIf02c();
-     * checkJstlIf02e();
-     * checkJstlIf02a();
-     * checkJstlIf02d();
-     * checkJstlIf02b();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Component and Template Text Inside Conditional
-     * public void testJstlIf03() throws Exception {
-     * <p/>
-     * // Check the "true" case multiple times in a row
-     * checkJstlIf00();
-     * checkJstlIf03a();
-     * checkJstlIf03a();
-     * checkJstlIf03a();
-     * checkJstlIf03a();
-     * <p/>
-     * // Check the "false case multiple times in a row
-     * checkJstlIf00();
-     * checkJstlIf03b();
-     * checkJstlIf03b();
-     * checkJstlIf03b();
-     * checkJstlIf03b();
-     * <p/>
-     * // Check alternating access to the same page (first pattern)
-     * checkJstlIf00();
-     * checkJstlIf03a();
-     * checkJstlIf03b();
-     * checkJstlIf03a();
-     * checkJstlIf03b();
-     * <p/>
-     * // Check alternating access to the same page (second pattern)
-     * checkJstlIf00();
-     * checkJstlIf03b();
-     * checkJstlIf03a();
-     * checkJstlIf03b();
-     * checkJstlIf03a();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Renders-Child Component Inside Conditional (no nested template text) (
-     * public void testJstlIf04() throws Exception {
-     * <p/>
-     * // Check the "true" case multiple times in a row
-     * checkJstlIf00();
-     * checkJstlIf04a();
-     * checkJstlIf04a();
-     * checkJstlIf04a();
-     * checkJstlIf04a();
-     * <p/>
-     * // Check the "false case multiple times in a row
-     * checkJstlIf00();
-     * checkJstlIf04b();
-     * checkJstlIf04b();
-     * checkJstlIf04b();
-     * checkJstlIf04b();
-     * <p/>
-     * // Check alternating access to the same page (first pattern)
-     * checkJstlIf00();
-     * checkJstlIf04a();
-     * checkJstlIf04b();
-     * checkJstlIf04a();
-     * checkJstlIf04b();
-     * <p/>
-     * // Check alternating access to the same page (second pattern)
-     * checkJstlIf00();
-     * checkJstlIf04b();
-     * checkJstlIf04a();
-     * checkJstlIf04b();
-     * checkJstlIf04a();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Test importing JSPs with literal text
-     * public void testJstlImport01() throws Exception {
-     * <p/>
-     * checkJstlImport00();
-     * checkJstlImport01();
-     * checkJstlImport01();
-     * <p/>
-     * checkJstlImport00();
-     * checkJstlImport01();
-     * checkJstlImport01();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Test importing JSPs with simple components
-     * public void testJstlImport02() throws Exception {
-     * <p/>
-     * checkJstlImport00();
-     * checkJstlImport02();
-     * checkJstlImport02();
-     * <p/>
-     * checkJstlImport00();
-     * checkJstlImport02();
-     * checkJstlImport02();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Test selectively importing JSPs with simple components (explicit ids)
-     * public void testJstlImport03() throws Exception {
-     * <p/>
-     * // Check each individual case multiple times
-     * checkJstlImport00();
-     * checkJstlImport03a();
-     * checkJstlImport03a();
-     * checkJstlImport03a();
-     * checkJstlImport00();
-     * checkJstlImport03b();
-     * checkJstlImport03b();
-     * checkJstlImport03b();
-     * checkJstlImport00();
-     * checkJstlImport03c();
-     * checkJstlImport03c();
-     * checkJstlImport03c();
-     * <p/>
-     * // Check cases in ascending order
-     * checkJstlImport00();
-     * checkJstlImport03a();
-     * checkJstlImport03b();
-     * checkJstlImport03c();
-     * <p/>
-     * // Check cases in descending order
-     * checkJstlImport00();
-     * checkJstlImport03c();
-     * checkJstlImport03b();
-     * checkJstlImport03a();
-     * <p/>
-     * // Check cases in random order
-     * checkJstlImport00();
-     * checkJstlImport03b();
-     * checkJstlImport03a();
-     * checkJstlImport03c();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * // Test selectively importing JSPs with simple components (naming container)
-     * public void testJstlImport04() throws Exception {
-     * <p/>
-     * // Check each individual case multiple times
-     * checkJstlImport00();
-     * checkJstlImport04a();
-     * checkJstlImport04a();
-     * checkJstlImport04a();
-     * checkJstlImport00();
-     * checkJstlImport04b();
-     * checkJstlImport04b();
-     * checkJstlImport04b();
-     * checkJstlImport00();
-     * checkJstlImport04c();
-     * checkJstlImport04c();
-     * checkJstlImport04c();
-     * <p/>
-     * // Check cases in ascending order
-     * checkJstlImport00();
-     * checkJstlImport04a();
-     * checkJstlImport04b();
-     * checkJstlImport04c();
-     * <p/>
-     * // Check cases in descending order
-     * checkJstlImport00();
-     * checkJstlImport04c();
-     * checkJstlImport04b();
-     * checkJstlImport04a();
-     * <p/>
-     * // Check cases in random order
-     * checkJstlImport00();
-     * checkJstlImport04b();
-     * checkJstlImport04a();
-     * checkJstlImport04c();
-     * <p/>
-     * }
-     * <p/>
-     * <p/>
-     * **************************************
-     */
-
-    // --------------------------------------------------------- Private Methods
-
-    // Check the reset page to force a new component tree
-    private void checkJstlChoose00() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-choose-00.jsp");
-        assertEquals("Correct page title",
-                "jstl-choose-00", page.getTitleText());
-
-    }
-
-
-    // Check chosen components with explicit ids
-    private void checkJstlChoose01a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-choose-01.jsp?choose=a");
-        assertEquals("Correct page title",
-                "jstl-choose-01", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2a] [2z] [3]", getBodyText(page));
-
-    }
-
-
-    // Check chosen components with explicit ids
-    private void checkJstlChoose01b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-choose-01.jsp?choose=b");
-        assertEquals("Correct page title",
-                "jstl-choose-01", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2b] [2y] [3]", getBodyText(page));
-
-    }
-
-
-    // Check chosen components with explicit ids
-    private void checkJstlChoose01c() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-choose-01.jsp?choose=c");
-        assertEquals("Correct page title",
-                "jstl-choose-01", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2c] [2x] [3]", getBodyText(page));
-
-    }
-
-
-    // Check chosen components with naming containers
-    private void checkJstlChoose02a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-choose-02.jsp?choose=a");
-        assertEquals("Correct page title",
-                "jstl-choose-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2a] [2z] [3]", getBodyText(page));
-
-    }
-
-
-    // Check chosen components with naming containers
-    private void checkJstlChoose02b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-choose-02.jsp?choose=b");
-        assertEquals("Correct page title",
-                "jstl-choose-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2b] [2y] [3]", getBodyText(page));
-
-    }
-
-
-    // Check chosen components with naming containers
-    private void checkJstlChoose02c() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-choose-02.jsp?choose=c");
-        assertEquals("Correct page title",
-                "jstl-choose-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2c] [2x] [3]", getBodyText(page));
-
-    }
-
-
-    // Check the reset page to force a new component tree
-    private void checkJstlForEach00() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-foreach-00.jsp");
-        assertEquals("Correct page title",
-                "jstl-foreach-00", page.getTitleText());
-
-    }
-
-
-    // Check the values of the input fields against the specified list
-    private void checkJstlForEach01(HtmlPage page, String expected[]) {
-
-
-        assertEquals("Correct page title",
-                "jstl-foreach-01", page.getTitleText());
-        HtmlForm form = getFormById(page, jstlForEach01_name);
-        assertNotNull("form exists", form);
-        for (int i = 0; i < expected.length; i++) {
-            HtmlTextInput input = (HtmlTextInput)
-                    form.getInputByName(jstlForEach01_name +
-                            NamingContainer.SEPARATOR_CHAR +
-                            jstlForEach01_names[i]);
-            assertNotNull("field '" + jstlForEach01_names[i] + "' exists",
-                    input);
-            assertEquals("field '" + jstlForEach01_names[i] + "' value",
-                    expected[i], input.getValueAttribute());
-        }
-
-    }
-
-
-    // Check the reset page to force a new component tree
-    private void checkJstlIf00() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-if-00.jsp");
-        assertEquals("Correct page title",
-                "jstl-if-00", page.getTitleText());
-
-    }
-
-
-    // Check the actual conditional page with a "true" flag
-    private void checkJstlIf01a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-if-01.jsp?cond=true");
-        assertEquals("Correct page title",
-                "jstl-if-01", page.getTitleText());
-        assertEquals("Correct body element",
-                "[First] [Second] [Third]", getBodyText(page));
-
-    }
-
-
-    // Check the actual conditional page with a "false" flag
-    private void checkJstlIf01b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-if-01.jsp?cond=false");
-        assertEquals("Correct page title",
-                "jstl-if-01", page.getTitleText());
-        assertEquals("Correct body element",
-                "[First] [Third]", getBodyText(page));
-
-    }
-
-
-    // Check the actual facet page with true/true/true flags
-    private void checkJstlIf02a() throws Exception {
-
-        HtmlPage page = getPage
-                (
-                        "/faces/jsp/jstl-if-02.jsp?component=true&header=true&footer=true");
-        assertEquals("Correct page title",
-                "jstl-if-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[First] [Header] [Second] [Footer] [Third]",
-                getBodyText(page));
-
-    }
-
-
-    // Check the actual facet page with true/true/false flags
-    private void checkJstlIf02b() throws Exception {
-
-        HtmlPage page = getPage
-                (
-                        "/faces/jsp/jstl-if-02.jsp?component=true&header=true&footer=false");
-        assertEquals("Correct page title",
-                "jstl-if-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[First] [Header] [Second] [] [Third]",
-                getBodyText(page));
-
-    }
-
-
-    // Check the actual facet page with true/false/true flags
-    private void checkJstlIf02c() throws Exception {
-
-        HtmlPage page = getPage
-                (
-                        "/faces/jsp/jstl-if-02.jsp?component=true&header=false&footer=true");
-        assertEquals("Correct page title",
-                "jstl-if-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[First] [] [Second] [Footer] [Third]",
-                getBodyText(page));
-
-    }
-
-
-    // Check the actual facet page with true/false/false flags
-    private void checkJstlIf02d() throws Exception {
-
-        HtmlPage page = getPage
-                (
-                        "/faces/jsp/jstl-if-02.jsp?component=true&header=false&footer=false");
-        assertEquals("Correct page title",
-                "jstl-if-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[First] [] [Second] [] [Third]",
-                getBodyText(page));
-
-    }
-
-
-    // Check the actual facet page with false/true/true flags
-    private void checkJstlIf02e() throws Exception {
-
-        HtmlPage page = getPage
-                (
-                        "/faces/jsp/jstl-if-02.jsp?component=false&header=true&footer=true");
-        assertEquals("Correct page title",
-                "jstl-if-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[First] [Third]",
-                getBodyText(page));
-
-    }
-
-
-    // Check the actual template page with a "true" flag
-    private void checkJstlIf03a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-if-03.jsp?cond=true");
-        assertEquals("Correct page title",
-                "jstl-if-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2] [3] [4] [5]", getBodyText(page));
-
-    }
-
-
-    // Check the actual conditional page with a "false" flag
-    private void checkJstlIf03b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-if-03.jsp?cond=false");
-        assertEquals("Correct page title",
-                "jstl-if-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [5]", getBodyText(page));
-
-    }
-
-
-    // Check the actual conditional page with a "true" flag
-    private void checkJstlIf04a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-if-04.jsp?cond=true");
-        assertEquals("Correct page title",
-                "jstl-if-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2] [3] { [4a] [4b] [4c] } [5] [6] [7]",
-                getBodyText(page));
-
-    }
-
-
-    // Check the actual conditional page with a "false" flag
-    private void checkJstlIf04b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-if-04.jsp?cond=false");
-        assertEquals("Correct page title",
-                "jstl-if-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [7]", getBodyText(page));
-
-    }
-
-
-    // Check the reset page to force a new component tree
-    private void checkJstlImport00() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-00.jsp");
-        assertEquals("Correct page title",
-                "jstl-import-00", page.getTitleText());
-
-    }
-
-
-    // Check imports with literal text
-    private void checkJstlImport01() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-01.jsp");
-        assertEquals("Correct page title",
-                "jstl-import-01", page.getTitleText());
-        assertEquals("Correct body element",
-                "[A] [B] [C] [D] [E]", getBodyText(page));
-
-    }
-
-
-    // Check imports with simple components
-    private void checkJstlImport02() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-02.jsp");
-        assertEquals("Correct page title",
-                "jstl-import-02", page.getTitleText());
-        assertEquals("Correct body element",
-                "[A] [B] [C] [D] [E]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (explicit ids)
-    private void checkJstlImport03a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-03.jsp?choose=a");
-        assertEquals("Correct page title",
-                "jstl-import-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2a][2z] [3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (explicit ids)
-    private void checkJstlImport03b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-03.jsp?choose=b");
-        assertEquals("Correct page title",
-                "jstl-import-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2b][2y] [3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (explicit ids)
-    private void checkJstlImport03c() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-03.jsp?choose=c");
-        assertEquals("Correct page title",
-                "jstl-import-03", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2c][2x] [3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (naming container)
-    private void checkJstlImport04a() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-04.jsp?choose=a");
-        assertEquals("Correct page title",
-                "jstl-import-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2a][2z] [3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (naming container)
-    private void checkJstlImport04b() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-04.jsp?choose=b");
-        assertEquals("Correct page title",
-                "jstl-import-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2b][2y] [3]", getBodyText(page));
-
-    }
-
-
-    // Check selective imports with simple components (naming container)
-    private void checkJstlImport04c() throws Exception {
-
-        HtmlPage page = getPage("/faces/jsp/jstl-import-04.jsp?choose=c");
-        assertEquals("Correct page title",
-                "jstl-import-04", page.getTitleText());
-        assertEquals("Correct body element",
-                "[1] [2c][2x] [3]", getBodyText(page));
-
-    }
-
-
-    // Retrieve the jstl-foreach-01 page
-    private HtmlPage getJstlForEach01() throws Exception {
-
-        return (getPage("/faces/jsp/jstl-foreach-01.jsp"));
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/ListenerTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/ListenerTestCase.java
deleted file mode 100644
index da4c031..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/ListenerTestCase.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-/**
- * <p>Test that invalid values don't cause valueChangeEvents to occur.</p>
- */
-
-public class ListenerTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ListenerTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ListenerTestCase.class));
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-    public void testListener() throws Exception {
-        HtmlPage page = getPage("/faces/listener.jsp");
-        List list;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        // set the initial value to be 1 for all input fields
-        ((HtmlTextInput) list.get(0)).setValueAttribute("1");
-        ((HtmlTextInput) list.get(1)).setValueAttribute("1");
-        ((HtmlTextInput) list.get(2)).setValueAttribute("1");
-        ((HtmlTextInput) list.get(3)).setValueAttribute("1");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        assertTrue(-1 != page.asText().indexOf("text1 value was changed"));
-
-        assertTrue(-1 != page.asText().indexOf("text2 value was changed"));
-
-        assertTrue(-1 != page.asText().indexOf("text3 value was changed"));
-
-        assertTrue(-1 != page.asText().indexOf("text4 value was changed"));
-
-        // re-submit the form, make sure no valueChangeEvents are fired
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 == page.asText().indexOf("text1 value was changed"));
-        assertTrue(-1 == page.asText().indexOf("text2 value was changed"));
-        assertTrue(-1 == page.asText().indexOf("text3 value was changed"));
-        assertTrue(-1 == page.asText().indexOf("text4 value was changed"));
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("button1 was pressed"));
-
-        button = (HtmlSubmitInput) list.get(1);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("button2 was pressed"));
-
-        button = (HtmlSubmitInput) list.get(2);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("button3 was pressed"));
-
-        button = (HtmlSubmitInput) list.get(3);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("button4 was pressed"));
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/LocaleTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/LocaleTestCase.java
deleted file mode 100644
index 7270c54..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/LocaleTestCase.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class LocaleTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public LocaleTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(LocaleTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-    // Test dynamically adding and removing components
-
-    public void testLocaleAndEncoding() throws Exception {
-        client.addRequestHeader("Content-Type",
-                "text/html; charset=ISO-8859-4");
-        HtmlPage page = getPage("/faces/renderkit02A.jsp");
-        // PENDING(edburns): when you figure out why the encoding
-        // doesn't get passed through, fix this.
-        boolean correct =
-                page.getPageEncoding().equals("ISO-8859-1") ||
-                        page.getPageEncoding().equals("ISO-8859-4");
-        assertTrue("Encoding not as expected", correct);
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/MissingActionListenerMethodTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/MissingActionListenerMethodTestCase.java
deleted file mode 100644
index dbbd4d8..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/MissingActionListenerMethodTestCase.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Assert;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * @author Jason Lee
- */
-
-public class MissingActionListenerMethodTestCase extends AbstractTestCase {
-    // ------------------------------------------------------------ Constructors
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public MissingActionListenerMethodTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(MissingActionListenerMethodTestCase.class));
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testMissingActionListenerMethod() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/testMissingActionListenerMethod.jsp");
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("testForm:testButton");
-        try {
-            button.click();
-        } catch (Exception e) {
-            Assert.fail();
-        }
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/MissingViewTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/MissingViewTestCase.java
deleted file mode 100644
index e8fd4c6..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/MissingViewTestCase.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Verify that we have an intelligent error message when the user
- * forgets the view tag.</p>
- */
-
-public class MissingViewTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public MissingViewTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(MissingViewTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testMissingView() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/jsp/missing-view.jsp");
-        assertTrue(-1 != page.asText().indexOf("UIViewRoot"));
-        assertTrue(-1 != page.asText().indexOf("UIForm"));
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/PrependIdTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/PrependIdTestCase.java
deleted file mode 100644
index 9834897..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/PrependIdTestCase.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Verify that we have an intelligent error message when the user
- * forgets the view tag.</p>
- */
-
-public class PrependIdTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public PrependIdTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(PrependIdTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testMissingView() throws Exception {
-        client.setThrowExceptionOnFailingStatusCode(false);
-        HtmlPage page = getPage("/faces/jsp/prependId.jsp");
-        String pageText = page.asXml();
-        // Literal ids with prependId literal
-        assertTrue(-1 != pageText.indexOf("span id=\"case1prependIdFalse\""));
-        assertTrue(-1 != pageText.indexOf("span id=\"form2:case1prependIdTrue\""));
-        assertTrue(-1 != pageText.indexOf("span id=\"form3:case1prependIdUnspecified\""));
-
-        // Literal ids with prependId from expression
-        assertTrue(-1 != pageText.indexOf("span id=\"case2prependIdFalse\""));
-        assertTrue(-1 != pageText.indexOf("span id=\"form5:case2prependIdTrue\""));
-        assertTrue(-1 != pageText.indexOf("span id=\"form6:case2prependIdUnspecified\""));
-
-        // Auto-generated ids with prependId literal
-        assertTrue(-1 != pageText.indexOf("input value=\"prependIdFalse\" type=\"text\" name=\"j_id_id54\""));
-        assertTrue(-1 != pageText.indexOf("input value=\"prependIdTrue\" type=\"text\" name=\"j_id_id57:j_id_id59\""));
-        assertTrue(-1 != pageText.indexOf("input value=\"prependIdUnspecified\" type=\"text\" name=\"j_id_id62:j_id_id64\""));
-
-        // Auto-generated ids with prependId from expression
-        assertTrue(-1 != pageText.indexOf("input value=\"prependIdFalse\" type=\"text\" name=\"j_id_id71\""));
-        assertTrue(-1 != pageText.indexOf("input value=\"prependIdTrue\" type=\"text\" name=\"j_id_id74:j_id_id76\""));
-        assertTrue(-1 != pageText.indexOf("input value=\"prependIdUnspecified\" type=\"text\" name=\"j_id_id79:j_id_id81\""));
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/SelectComponentValueTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/SelectComponentValueTestCase.java
deleted file mode 100644
index 19516cd..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/SelectComponentValueTestCase.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-import java.util.Random;
-import java.util.ResourceBundle;
-
-
-/**
- * <p>Verify that required validation occurrs for Select* components.</p>
- */
-
-public class SelectComponentValueTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SelectComponentValueTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SelectComponentValueTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     * <p>Verify that the required validator works for SelectOne</p>
-     */
-
-    public void testSelectOneNoValue() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectOneNoValue.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        assertTrue(-1 != page.asText().indexOf("equired"));
-
-    }
-
-    /**
-     * <p>Verify that the required validator works for SelectMany</p>
-     */
-
-    public void testSelectManyNoValue() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectManyNoValue.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        assertTrue(-1 != page.asText().indexOf("equired"));
-
-    }
-
-    /**
-     * <p>Verify that the conversion error works for SelectMany</p>
-     */
-
-    public void testSelectManyMismatchValue() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectManyMismatchValue.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        list = getAllElementsOfGivenClass(page, null, HtmlSelect.class);
-        HtmlSelect options = (HtmlSelect) list.get(0);
-        String chosen[] = {"one", "three"};
-        options.setSelectedAttribute("one", true);
-        options.setSelectedAttribute("three", true);
-        //options.fakeSelectedAttribute(chosen);
-        page = (HtmlPage) button.click();
-        assertTrue(-1 != page.asText().indexOf("one three"));
-        assertTrue(-1 != page.asText().indexOf("#{test3.selection}"));
-
-    }
-
-
-    /**
-     * On SelectMany, test that the membership test works and doesn't
-     * produce spurious ValueChangeEvent instances.
-     */
-    public void testSelectManyInvalidValue() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectManyInvalidValue.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        list = getAllElementsOfGivenClass(page, null, HtmlSelect.class);
-        HtmlSelect options = (HtmlSelect) list.get(0);
-        Random random = new Random(4143);
-        String str = new String((new Float(random.nextFloat())).toString());
-
-        String chosen[] = {
-                (new Float(random.nextFloat())).toString(),
-                (new Float(random.nextFloat())).toString()
-        };
-        options.setSelectedAttribute((new Float(random.nextFloat())).toString(), true);
-        options.setSelectedAttribute((new Float(random.nextFloat())).toString(), true);
-        //options.fakeSelectedAttribute(chosen);
-        page = (HtmlPage) button.click();
-        ResourceBundle messages = ResourceBundle.getBundle(
-                "javax.faces.Messages");
-        String message = messages.getString("javax.faces.component.UISelectMany.INVALID");
-        // it does have a validation message
-        assertTrue(-1 != page.asText().indexOf("Validation Error"));
-        // it does not have a value change message
-        assertTrue(-1 == page.asText().indexOf("value changed"));
-    }
-
-
-    /**
-     * run doInvalidTest on UISelectOne
-     */
-
-    public void testSelectOneInvalidValue() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectOneInvalidValue.jsp");
-
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlRadioButtonInput.class);
-        HtmlRadioButtonInput radio = (HtmlRadioButtonInput) list.get(0);
-        radio.setChecked(true);
-        page = (HtmlPage) button.click();
-        ResourceBundle messages = ResourceBundle.getBundle("javax.faces.Messages");
-        String message = messages.getString("javax.faces.component.UIInput.REQUIRED");
-        // it does not have a validation error
-        assertTrue(-1 == page.asText().indexOf(message));
-    }
-
-    public void testSelectOneTypeInt() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectOneTypeInt.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        list = getAllElementsOfGivenClass(page, null, HtmlSelect.class);
-        HtmlSelect options = (HtmlSelect) list.get(0);
-
-        String chosen = "2";
-        options.setSelectedAttribute(chosen,true);
-        //options.fakeSelectedAttribute(chosen);
-        page = (HtmlPage) button.click();
-        ResourceBundle messages = ResourceBundle.getBundle(
-                "javax.faces.Messages");
-        String message = messages.getString("javax.faces.component.UISelectMany.INVALID");
-        // it does not have a validation message
-        assertTrue(-1 == page.asText().indexOf("Validation Error"));
-    }
-
-    // Verifies original selection from model is unchanged
-    // when button with immediate="true" is pressed.
-    //
-    public void testSelectOneRadioTypeInteger() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectOneRadioTypeInteger.jsp");
-        HtmlSubmitInput nonImmediateButton = null, immediateButton = null;
-        HtmlRadioButtonInput radio1 = null, radio2 = null, radio3 = null;
-        List submitList = getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class);
-        List radioList = getAllElementsOfGivenClass(page, null, HtmlRadioButtonInput.class);
-        radio1 = (HtmlRadioButtonInput) radioList.get(0);
-        radio2 = (HtmlRadioButtonInput) radioList.get(1);
-        radio3 = (HtmlRadioButtonInput) radioList.get(2);
-        for (int i = 0; i < submitList.size(); i++) {
-            HtmlSubmitInput result = (HtmlSubmitInput) submitList.get(i);
-            if (-1 != result.getIdAttribute().indexOf("nonImmediate")) {
-                nonImmediateButton = result;
-            } else {
-                immediateButton = result;
-            }
-        }
-        assertTrue(-1 != page.asText().indexOf("Model Selection:2"));
-
-        // now press the immediate button and verify that our original
-        // selection is there...
-        page = (HtmlPage) immediateButton.click();
-        assertTrue(-1 != page.asText().indexOf("Model Selection:2"));
-
-        // now click the first radio option...
-        radio1.setChecked(true);
-        // now press the immediate button and verify that our original
-        // selection is there...
-        page = (HtmlPage) immediateButton.click();
-        assertTrue(-1 != page.asText().indexOf("Model Selection:2"));
-
-        // now click the first radio option...
-        radio1.setChecked(true);
-        // now press the non immediate button and verify that our new
-        // selection is there...
-        page = (HtmlPage) nonImmediateButton.click();
-        assertTrue(-1 != page.asText().indexOf("Model Selection:1"));
-    }
-
-    public void testSelectOneRadioTypeInt() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectOneRadioTypeInt.jsp");
-        HtmlSubmitInput nonImmediateButton = null, immediateButton = null;
-        HtmlRadioButtonInput radio1 = null, radio2 = null, radio3 = null;
-        List submitList = getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class);
-        List radioList = getAllElementsOfGivenClass(page, null, HtmlRadioButtonInput.class);
-        radio1 = (HtmlRadioButtonInput) radioList.get(0);
-        radio2 = (HtmlRadioButtonInput) radioList.get(1);
-        radio3 = (HtmlRadioButtonInput) radioList.get(2);
-        for (int i = 0; i < submitList.size(); i++) {
-            HtmlSubmitInput result = (HtmlSubmitInput) submitList.get(i);
-            if (-1 != result.getIdAttribute().indexOf("nonImmediate")) {
-                nonImmediateButton = result;
-            } else {
-                immediateButton = result;
-            }
-        }
-        assertTrue(-1 != page.asText().indexOf("Model Selection:3"));
-
-        // now press the immediate button and verify that our original
-        // selection is there...
-        page = (HtmlPage) immediateButton.click();
-        assertTrue(-1 != page.asText().indexOf("Model Selection:3"));
-
-        // now click the first radio option...
-        radio1.setChecked(true);
-        // now press the immediate button and verify that our original
-        // selection is there...
-        page = (HtmlPage) immediateButton.click();
-        assertTrue(-1 != page.asText().indexOf("Model Selection:3"));
-
-        // now click the first radio option...
-        radio1.setChecked(true);
-        // now press the non immediate button and verify that our new
-        // selection is there...
-        page = (HtmlPage) nonImmediateButton.click();
-        assertTrue(-1 != page.asText().indexOf("Model Selection:1"));
-    }
-
-    public void testSelectManyTypeInts() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/selectManyTypeInts.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        list = getAllElementsOfGivenClass(page, null, HtmlSelect.class);
-        HtmlSelect options = (HtmlSelect) list.get(0);
-
-        String chosen[] = {"2", "3"};
-        options.setSelectedAttribute("2", true);
-        options.setSelectedAttribute("3", true);
-        //options.fakeSelectedAttribute(chosen);
-        page = (HtmlPage) button.click();
-        ResourceBundle messages = ResourceBundle.getBundle(
-                "javax.faces.Messages");
-        String message = messages.getString("javax.faces.component.UISelectMany.INVALID");
-        // it does not have a validation message
-        assertTrue(-1 == page.asText().indexOf("Validation Error"));
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/SelectItemEscapeTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/SelectItemEscapeTestCase.java
deleted file mode 100644
index f43e0af..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/SelectItemEscapeTestCase.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Verify that required validation occurrs for Select* components.</p>
- */
-
-public class SelectItemEscapeTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SelectItemEscapeTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SelectComponentValueTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     * <p>Verify that the required validator works for SelectOne</p>
-     */
-
-    public void testSelectOneNoValue() throws Exception {
-        HtmlPage page = getPage("/faces/selectItemEscape.jsp");
-
-        assertTrue(-1 != page.asText().indexOf("menu1_Wayne <Gretzky>"));
-        assertTrue(-1 != page.asText().indexOf("menu1_Bobby +Orr+"));
-        assertTrue(-1 != page.asText().indexOf("menu1_Brad &{Park}"));
-        assertTrue(-1 != page.asText().indexOf("menu1_Brad &{Park}"));
-
-        assertTrue(-1 != page.asText().indexOf("menu2_Wayne <Gretzky>"));
-        assertTrue(-1 != page.asText().indexOf("menu2_Bobby +Orr+"));
-        assertTrue(-1 != page.asText().indexOf("menu2_Brad &{Park}"));
-        assertTrue(-1 != page.asText().indexOf("menu2_Brad &{Park}"));
-
-        assertTrue(-1 != page.asText().indexOf("menu3_Wayne <Gretzky>"));
-        assertTrue(-1 != page.asText().indexOf("menu3_Bobby +Orr+"));
-        assertTrue(-1 != page.asText().indexOf("menu3_Brad &{Park}"));
-        assertTrue(-1 != page.asText().indexOf("menu3_Gordie &Howe&"));
-
-    }
-
-}
-
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/SelectManyMultiFormTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/SelectManyMultiFormTestCase.java
deleted file mode 100644
index 901e359..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/SelectManyMultiFormTestCase.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class SelectManyMultiFormTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SelectManyMultiFormTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SelectManyMultiFormTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testMultiForm() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlAnchor link;
-        HtmlTextInput input;
-        HtmlPage page;
-
-        page = getPage("/faces/standard/selectmany01.jsp");
-        // verify that the model tier is as expected
-        assertTrue(-1 !=
-                page.asText().indexOf("Current model value: 1, 2, ,"));
-        form = getFormById(page, "form2");
-        submit = (HtmlSubmitInput)
-                form.getInputByName("form2" + NamingContainer.SEPARATOR_CHAR +
-                        "doNotModify");
-
-        // press button1
-        page = (HtmlPage) submit.click();
-        // verify that submitting the form does not change the model tier
-        assertTrue(-1 !=
-                page.asText().indexOf("Current model value: 1, 2, ,"));
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/SetPropertyTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/SetPropertyTestCase.java
deleted file mode 100644
index c838dc7..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/SetPropertyTestCase.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Test Case for f:setProperty.</p>
- */
-
-public class SetPropertyTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SetPropertyTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SetPropertyTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testSetPropertyPositive() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/jsp-setProperty-01.jsp");
-
-        // press the button to increment the property
-        assertTrue(page.asText().contains("Integer Property is: 123."));
-        assertTrue(page
-                .asText().contains("String Property is: This is a String property."));
-        List buttons = getAllElementsOfGivenClass(page, new ArrayList(),
-                HtmlSubmitInput.class);
-        page = (HtmlPage) ((HtmlSubmitInput) buttons.get(0)).click();
-        assertTrue(page.asText().contains("Integer Property is: 100."));
-        assertTrue(page
-                .asText().contains("String Property is: This is a String property."));
-
-        buttons = getAllElementsOfGivenClass(page, new ArrayList(),
-                HtmlSubmitInput.class);
-        page = (HtmlPage) ((HtmlSubmitInput) buttons.get(1)).click();
-        assertTrue(page.asText().contains("Integer Property is: 100."));
-        assertTrue(page.asText().contains("String Property is: 100."));
-
-        buttons = getAllElementsOfGivenClass(page, new ArrayList(),
-                HtmlSubmitInput.class);
-        page = (HtmlPage) ((HtmlSubmitInput) buttons.get(2)).click();
-        assertTrue(page.asText().contains("Integer Property is: 100."));
-        assertTrue(page.asText().contains("String Property is: String."));
-
-        buttons = getAllElementsOfGivenClass(page, new ArrayList(),
-                HtmlSubmitInput.class);
-        page = (HtmlPage) ((HtmlSubmitInput) buttons.get(3)).click();
-        assertTrue(page.asText().contains("Integer Property is: 100."));
-        assertTrue(page
-                .asText().contains("String Property is: com.sun.faces.context.FacesContextImpl"));
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/TagIvarTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/TagIvarTestCase.java
deleted file mode 100644
index 6adb6dc..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/TagIvarTestCase.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class TagIvarTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public TagIvarTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(TagIvarTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testLocaleOnTagIvar() throws Exception {
-        HtmlPage page;
-
-        // ignore the exception intentionally thrown by the first page.
-        client.setThrowExceptionOnFailingStatusCode(false);
-        page = getPage("/faces/tag-ivars1.jsp");
-
-        client.setThrowExceptionOnFailingStatusCode(true);
-        page = getPage("/faces/tag-ivars2.jsp");
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/TlvTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/TlvTestCase.java
deleted file mode 100644
index 736d814..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/TlvTestCase.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-
-/**
- * <p>Verify that required validation occurrs for Select* components.</p>
- */
-
-public class TlvTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public TlvTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(TlvTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     * <p>Verify that the required validator works for SelectOne</p>
-     */
-
-    public void testButtonWithBinding() throws Exception {
-        HtmlPage page = getPage("/faces/jsp/tlvTest01.jsp");
-        List list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        assertEquals("button label", button.asText());
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/ValidatorTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/ValidatorTestCase.java
deleted file mode 100644
index ccd87ad..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/ValidatorTestCase.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-/**
- * <p>Test that invalid values don't cause valueChangeEvents to occur.</p>
- */
-
-public class ValidatorTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ValidatorTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ValidatorTestCase.class));
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-    public void testValidator() throws Exception {
-        HtmlPage page = getPage("/faces/validator02.jsp");
-        List list;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        // set the initial value to be 1 for all input fields
-        ((HtmlTextInput) list.get(0)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(1)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(2)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(3)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(4)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(5)).setValueAttribute("1111111111");
-        ((HtmlTextInput) list.get(6)).setValueAttribute("1111111111");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-	String text = page.asText();
-        assertTrue(text.contains("text1 was validated"));
-        assertTrue(text.contains("text2 was validated"));
-        assertTrue(text.contains("text3 was validated"));
-        assertTrue(text.contains("text4 was validated"));
-        String str = "allowable maximum of " + '"' + "2" + '"';
-        assertTrue(text.contains(str));
-        assertTrue(text.contains("allowable maximum of '5'"));
-
-    }
-
-    public void testValidatorMessages() throws Exception {
-        HtmlPage page = getPage("/faces/validator03.jsp");
-        List list;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        // set the initial value to be "1" for all input fields
-        for (int i = 0; i < list.size(); i++) {
-            ((HtmlTextInput) list.get(i)).setValueAttribute("1");
-        }
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        String text = page.asXml();
-        assertTrue(text.contains("Validation Error: Specified attribute is not between the expected values of 2 and 5."));
-        assertTrue(text.contains("DoubleRange2: Validation Error: Specified attribute is not between the expected values of 2 and 5."));
-        assertTrue(text.contains("Validation Error: Length is less than allowable minimum of '2'"));
-        assertTrue(text.contains("Length2: Validation Error: Length is less than allowable minimum of '2'"));
-        assertTrue(text.contains("Validation Error: Specified attribute is not between the expected values of 2 and 5."));
-        assertTrue(text.contains("LongRange2: Validation Error: Specified attribute is not between the expected values of 2 and 5."));
-    }
-
-    public void testRequiredValidatorMessage() throws Exception {
-        HtmlPage page = getPage("/faces/validator04.jsp");
-        List list;
-        list = getAllElementsOfGivenClass(page, null, HtmlTextInput.class);
-        ((HtmlTextInput) list.get(2)).setValueAttribute("a");
-        ((HtmlTextInput) list.get(3)).setValueAttribute("a");
-        ((HtmlTextInput) list.get(4)).setValueAttribute("20");
-        ((HtmlTextInput) list.get(5)).setValueAttribute("20");
-        list = getAllElementsOfGivenClass(page, null, HtmlSubmitInput.class);
-        page = (HtmlPage) ((HtmlSubmitInput) list.get(0)).click();
-        String text = page.asText();
-        assertTrue(text.contains("Literal Message"));
-        assertTrue(text.contains("New String Value"));
-        assertTrue(text.contains("Converter Literal"));
-        assertTrue(text.contains("Converter Message Expression"));
-        assertTrue(text.contains("Validator Literal"));
-        assertTrue(text.contains("Validator Message Expression"));
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/ValueChangeListenerTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/ValueChangeListenerTestCase.java
deleted file mode 100644
index f8a77a7..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/ValueChangeListenerTestCase.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-/**
- * <p>Test that invalid values don't cause valueChangeEvents to occur.</p>
- */
-
-public class ValueChangeListenerTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ValueChangeListenerTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ValueChangeListenerTestCase.class));
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-    public void testValueChangeListener() throws Exception {
-        HtmlPage page = getPage("/faces/valueChangeListener.jsp");
-        List list;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        // set the initial value to be 1 for both fields
-        ((HtmlTextInput) list.get(0)).setValueAttribute("1");
-        ((HtmlTextInput) list.get(1)).setValueAttribute("1");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 !=
-                page.asText().indexOf("Received valueChangeEvent for textA"));
-
-        assertTrue(-1 !=
-                page.asText().indexOf("Received valueChangeEvent for textB"));
-
-        // re-submit the form, make sure no valueChangeEvents are fired
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 ==
-                page.asText().indexOf("Received valueChangeEvent for textA"));
-
-        assertTrue(-1 ==
-                page.asText().indexOf("Received valueChangeEvent for textB"));
-
-        // give invalid values to one field and make sure no
-        // valueChangeEvents are fired.
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlTextInput.class);
-
-        ((HtmlTextInput) list.get(1)).setValueAttribute("-123");
-
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 ==
-                page.asText().indexOf("Received valueChangeEvent for textA"));
-
-        assertTrue(-1 ==
-                page.asText().indexOf("Received valueChangeEvent for textB"));
-
-        assertTrue(-1 !=
-                page.asText().indexOf("Validation Error"));
-
-        // make sure dir and lang are passed through as expected for
-        // message and messages
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSpan.class);
-
-        boolean
-                hasMessageContent = false, // do we have the h:message
-                // content we're looking for
-                hasMessagesContent = false; // do we have the h:messages
-        // content we're looking for.
-        HtmlSpan span = null;
-        HtmlUnorderedList ulist = null;
-
-        for (int i = 0; i < list.size(); i++) {
-            span = (HtmlSpan) list.get(i);
-            if (-1 != span.asXml().indexOf("dir=\"RTL\"")
-                    && span.asXml().indexOf("lang=\"de\"") != -1) {
-                hasMessageContent = true;
-            }
-        }
-        list = getAllElementsOfGivenClass(page, null, HtmlUnorderedList.class);
-        for (int i = 0; i < list.size(); i++) {
-            ulist = (HtmlUnorderedList) list.get(i);
-            if (-1 != ulist.asXml().indexOf("dir=\"LTR\"")
-                    && ulist.asXml().indexOf("lang=\"en\"") != -1) {
-                hasMessagesContent = true;
-            }
-        }
-        assertTrue(hasMessagesContent && hasMessageContent);
-
-    }
-
-    // Test case for Issue 752
-    // https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=752
-    public void testValueChangeListener02() throws Exception {
-
-        HtmlPage page = getPage("/faces/valueChangeListener02.jsp");
-        List list = getAllElementsOfGivenClass(page,
-                null,
-                HtmlSubmitInput.class);
-        HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        assertTrue(!page.asText().contains("old value"));
-        assertTrue(!page.asText().contains("new value"));
-
-        list = getAllElementsOfGivenClass(page,
-                null,
-                HtmlCheckBoxInput.class);
-        HtmlCheckBoxInput input = (HtmlCheckBoxInput) list.get(0);
-        input.setChecked(false);
-        list = getAllElementsOfGivenClass(page,
-                null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(page.asText().contains("old value: true"));
-        assertTrue(page.asText().contains("new value: false"));
-
-        list = getAllElementsOfGivenClass(page,
-                null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-        assertTrue(!page.asText().contains("old value"));
-        assertTrue(!page.asText().contains("new value"));
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/ViewRootPhaseListenerTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/ViewRootPhaseListenerTestCase.java
deleted file mode 100644
index 8dc3957..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/ViewRootPhaseListenerTestCase.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-
-/**
- * <p>Make sure that only unique view ids are saved in the session</p>
- */
-
-public class ViewRootPhaseListenerTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ViewRootPhaseListenerTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ViewRootPhaseListenerTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testViewTagListeners() throws Exception {
-        HtmlPage page = getPage("/faces/viewTagListeners.jsp");
-
-        assertTrue(-1 != page.asText().indexOf("beforePhaseEvent: beforePhase: RENDER_RESPONSE 6."));
-        assertTrue(-1 != page.asText().indexOf("afterPhaseEvent: ."));
-
-        List list;
-
-        HtmlSubmitInput button = null;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("beforePhaseEvent: beforePhase: APPLY_REQUEST_VALUES 2 beforePhase: PROCESS_VALIDATIONS 3 beforePhase: UPDATE_MODEL_VALUES 4 beforePhase: INVOKE_APPLICATION 5 beforePhase: RENDER_RESPONSE 6."));
-        assertTrue(-1 != page.asText().indexOf("afterPhaseEvent: afterPhase: APPLY_REQUEST_VALUES 2 afterPhase: PROCESS_VALIDATIONS 3 afterPhase: UPDATE_MODEL_VALUES 4 afterPhase: INVOKE_APPLICATION 5."));
-
-
-    }
-
-    public void testListenerTagListenersType() throws Exception {
-        HtmlPage page = getPage("/faces/listenerTagListenersType.jsp");
-        doTestListenerTagListeners(page);
-    }
-
-    public void testListenerTagListenersBinding() throws Exception {
-        HtmlPage page = getPage("/faces/listenerTagListenersBinding.jsp");
-        doTestListenerTagListeners(page);
-    }
-
-    public void testListenerTagListenersBindingType() throws Exception {
-        HtmlPage page = getPage("/faces/listenerTagListenersBindingType.jsp");
-        doTestListenerTagListeners(page);
-    }
-
-    public void doTestListenerTagListeners(HtmlPage page) throws Exception {
-
-        assertTrue(-1 != page.asText().indexOf("beforePhaseEvent: beforePhase: RENDER_RESPONSE 6."));
-        assertTrue(-1 != page.asText().indexOf("afterPhaseEvent: ."));
-
-        List list;
-
-        HtmlSubmitInput button = null;
-        list = getAllElementsOfGivenClass(page, null,
-                HtmlSubmitInput.class);
-        button = (HtmlSubmitInput) list.get(0);
-        page = (HtmlPage) button.click();
-
-        assertTrue(-1 != page.asText().indexOf("beforePhaseEvent: beforePhase: APPLY_REQUEST_VALUES 2 beforePhase: PROCESS_VALIDATIONS 3 beforePhase: UPDATE_MODEL_VALUES 4 beforePhase: INVOKE_APPLICATION 5 beforePhase: RENDER_RESPONSE 6."));
-        assertTrue(-1 != page.asText().indexOf("afterPhaseEvent: afterPhase: APPLY_REQUEST_VALUES 2 afterPhase: PROCESS_VALIDATIONS 3 afterPhase: UPDATE_MODEL_VALUES 4 afterPhase: INVOKE_APPLICATION 5."));
-
-
-    }
-
-}
-
diff --git a/jsf-ri/systest/src/com/sun/faces/jsptest/ViewTagTestCase.java b/jsf-ri/systest/src/com/sun/faces/jsptest/ViewTagTestCase.java
deleted file mode 100644
index 6c7ed52..0000000
--- a/jsf-ri/systest/src/com/sun/faces/jsptest/ViewTagTestCase.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.jsptest;
-
-
-import com.gargoylesoftware.htmlunit.html.*;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class ViewTagTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ViewTagTestCase(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------ Instance Variables
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ViewTagTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testLocaleOnViewTag() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlAnchor link;
-        HtmlTextInput input;
-        HtmlPage page;
-
-        page = getPage("/faces/viewLocale.jsp");
-        form = getFormById(page, "form");
-        submit = (HtmlSubmitInput)
-                form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                        "button");
-
-        // press the button
-        page = (HtmlPage) submit.click();
-        assertTrue(-1 != page.asText().indexOf("erreur"));
-
-    }
-
-    public void testReplaceViewRoot() throws Exception {
-        HtmlPage page;
-        HtmlAnchor link;
-
-        page = getPage("/faces/replaceViewRoot.jsp");
-        link = page.getAnchorByName("examine");
-        page = (HtmlPage) link.click();
-        assertTrue(-1 != page.asText().indexOf("Replaced ViewRoot is com.sun.faces.systest.model.ViewRootExtension"));
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/methodref/MethodRefTestCase.java b/jsf-ri/systest/src/com/sun/faces/methodref/MethodRefTestCase.java
deleted file mode 100644
index 27335f9..0000000
--- a/jsf-ri/systest/src/com/sun/faces/methodref/MethodRefTestCase.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.methodref;
-
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIViewRoot;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class MethodRefTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public MethodRefTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(MethodRefTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-    
-    public void testActionAndActionListener() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlAnchor link;
-        HtmlTextInput input;
-        HtmlPage page;
-
-        page = getPage("/faces/methodref01.jsp");
-        form = getFormById(page, "form");
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "button1");
-
-        // press button1
-        page = (HtmlPage) submit.click();
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "buttonStatus");
-        assertTrue("Input does not have expected value",
-                   -1 != input.asText().indexOf("button1 was pressed"));
-        link = (HtmlAnchor) page.getAnchors().get(0);
-
-        // press button2
-        page = (HtmlPage) link.click(); 
-        assertNotNull(page);
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "buttonStatus");
-        assertTrue("Input does not have expected value",
-                   -1 != input.asText().indexOf("button2 was pressed"));
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "button3"); 
-
-        // press button3
-        page = (HtmlPage) submit.click();
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "buttonStatus");
-        assertTrue("Input does not have expected value",
-                   -1 != input.asText().indexOf("button3 was pressed"));
-
-
-    } 
-
-
-    public void testValidatorReference() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlAnchor link;
-        HtmlTextInput input;
-        HtmlPage page;
-
-        page = getPage("/faces/methodref01.jsp");
-        form = getFormById(page, "form");
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "validate");
-
-        // press the button with no value, see that no value appears in
-        // the "toValidate" textField.
-        page = (HtmlPage) submit.click();
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toValidate");
-        int fieldLen = input.asText().length();
-        assertTrue("Input does not have expected value", 0 == fieldLen);
-
-        // fill in an incorrect value, see that still no value appears
-        // in the text field.
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toValidate");
-        input.setValueAttribute("aoeuaoeu");
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "validate");
-        page = (HtmlPage) submit.click();
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toValidate");
-        fieldLen = input.asText().length();
-        assertTrue("Input does not have expected value", 8 == fieldLen);
-
-        // fill in the correct value, see that finally we have a value
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toValidate");
-        input.setValueAttribute("batman");
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "validate");
-        page = (HtmlPage) submit.click();
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toValidate");
-        assertEquals("Input does not have expected value",
-                     "batman", input.asText());
-    }
-
-
-    public void testValueChangeListenerByReference() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlAnchor link;
-        HtmlTextInput input;
-        HtmlPage page;
-
-        page = getPage("/faces/methodref01.jsp");
-        form = getFormById(page, "form");
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "changeValue");
-
-        // fill in a value, see we have a value
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toChange");
-        input.setValueAttribute("batman");
-        page = (HtmlPage) submit.click();
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toChange");
-        assertEquals("Input does not have expected value",
-                     "batman", input.getOnBlurAttribute());
-    }
-    
-    /**
-     * Test case for bug 5030555
-     */
-    public void testValueChangeListenerWithBinding() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlAnchor link;
-        HtmlTextInput input;
-        HtmlPage page;
-
-        page = getPage("/faces/binding01.jsp");
-        form = getFormById(page, "form");
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "changeValue");
-
-        // fill in a value, see we have a value
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toChange");
-        input.setValueAttribute("binding works!!");
-        page = (HtmlPage) submit.click();
-        form = getFormById(page, "form");
-        input = (HtmlTextInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "toChange");
-        assertEquals("Input does not have expected value",
-                     "binding works!!", input.getOnBlurAttribute());
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/methodref/TagAttributeListenerMethodExpressionNoArgTestCase.java b/jsf-ri/systest/src/com/sun/faces/methodref/TagAttributeListenerMethodExpressionNoArgTestCase.java
deleted file mode 100644
index e72784f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/methodref/TagAttributeListenerMethodExpressionNoArgTestCase.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.methodref;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import java.io.IOException;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Validate resource re-location of scripts and stylesheets
- */
-public class TagAttributeListenerMethodExpressionNoArgTestCase extends AbstractTestCase {
-
-
-    public TagAttributeListenerMethodExpressionNoArgTestCase() {
-        this("TagAttributeListenerMethodExpressionNoArgTestCase");
-    }
-
-
-    public TagAttributeListenerMethodExpressionNoArgTestCase(String name) {
-        super(name);
-    }
-
-    public static Test suite() {
-        return (new TestSuite(TagAttributeListenerMethodExpressionNoArgTestCase.class));
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testResourceRelocation() throws Exception {
-
-        HtmlPage page = getPage("/faces/TestValueChangeAndActionListenerNoArg.jsp");
-        executeTest(page);
-        page = getPage("/faces/TestValueChangeAndActionListenerNoArg.xhtml");
-        executeTest(page);
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    private void executeTest(HtmlPage page) throws IOException {
-        HtmlTextInput usernameField = (HtmlTextInput) page.getHtmlElementById("username");
-        usernameField.setValueAttribute("newValue, not oldValue");
-        HtmlForm form = getFormById(page, "form");
-        HtmlSubmitInput button = (HtmlSubmitInput) form.getInputByName("loginEvent");
-        page = (HtmlPage) button.click();
-        String text = page.asText();
-        boolean hasExpectedValue = 
-                (-1 != text.indexOf("valueChange0Called:true")) ||
-                (-1 != text.indexOf("valueChange0Called: true"));
-        assertTrue(hasExpectedValue);
-        hasExpectedValue =
-                (-1 != text.indexOf("actionListener0Called:true")) ||
-                (-1 != text.indexOf("actionListener0Called: true"));
-        assertTrue(hasExpectedValue);
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/pathtest/PathTestCase.java b/jsf-ri/systest/src/com/sun/faces/pathtest/PathTestCase.java
deleted file mode 100644
index 619be8f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/pathtest/PathTestCase.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.pathtest;
-
-import com.gargoylesoftware.htmlunit.TextPage;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class PathTestCase extends AbstractTestCase {
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-
-    public PathTestCase(String name) {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(PathTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    /**
-     * Verify that if an initial request comes to a FacesSevlet
-     * mapped using a prefix path, that the client is redirected
-     * to the context root.
-     * Additionally verify that after request to a particular view
-     * has been made, if a subsequent request is made to the
-     * prefix path, context root redirection occurs.
-     */
-    public void testVerifyPathBehavior() throws Exception {
-        final String welcomePage = "WELCOMEPAGE";
-        HtmlPage page = getPage("/faces");
-        WebResponse response = page.getWebResponse();
-        assertTrue(welcomePage.equals(response.getContentAsString().trim()));
-        
-        // Ok, now get a page
-        HtmlPage textPage = getHtmlPage("/faces/hello.jsp");
-        response = textPage.getWebResponse();
-        assertTrue("/hello.jsp PASSED".equals(
-            response.getContentAsString().trim()));
-
-        page = getPage("/faces");
-        response = page.getWebResponse();
-        assertTrue("WELCOMEPAGE".equals(response.getContentAsString().trim()));
-    }
-
-
-    protected HtmlPage getHtmlPage(String path) throws Exception {
-        HtmlPage page = (HtmlPage) client.getPage(getURL(path));
-
-        return (page);
-
-    }
-
-
-} // end of class PathTestCase
-
diff --git a/jsf-ri/systest/src/com/sun/faces/render/CommandButtonTestCase.java b/jsf-ri/systest/src/com/sun/faces/render/CommandButtonTestCase.java
deleted file mode 100644
index f6de482..0000000
--- a/jsf-ri/systest/src/com/sun/faces/render/CommandButtonTestCase.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.render;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class CommandButtonTestCase extends AbstractTestCase {
-
-    public CommandButtonTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CommandButtonTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testCommandButtonButton() throws Exception {
-        getPage("/faces/render/commandButtonButton.xhtml");
-        System.out.println("Start command Button type=button test");
-        // First we'll check the first page was output correctly
-        assertTrue(check("out1","0"));
-        assertTrue(check("outside","1"));
-
-        // Submit the ajax tagged request
-        HtmlButtonInput button = (HtmlButtonInput) lastpage.getHtmlElementById("button1");
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the ajax request succeeds
-        assertTrue(check("out1","2"));
-
-        // Check that the request did NOT update the rest of the page.
-        assertTrue(check("outside","1"));
-
-        // Submit the onclick enhanced request - with no return false
-        button = (HtmlButtonInput) lastpage.getHtmlElementById("button2");
-        lastpage = (HtmlPage) button.click();
-
-        // Check that the ajax request succeeds
-        assertTrue(check("out1","3"));
-
-        // Check that the request did NOT update the rest of the page.
-        assertTrue(check("outside","1"));
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/render/MessageRenderTestCase.java b/jsf-ri/systest/src/com/sun/faces/render/MessageRenderTestCase.java
deleted file mode 100644
index 3dad1ac..0000000
--- a/jsf-ri/systest/src/com/sun/faces/render/MessageRenderTestCase.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.render;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class MessageRenderTestCase extends AbstractTestCase {
-
-    public MessageRenderTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(MessageRenderTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testCommandButtonButton() throws Exception {
-        getPage("/faces/render/messageRender.xhtml");
-
-
-        // Check that ids were rendered
-        try {
-            lastpage.getHtmlElementById("testform1:msgs");
-        } catch (Exception e) {
-            fail("testform1:msgs not rendered");
-        }
-        try {
-            lastpage.getHtmlElementById("testform1a:msgs");
-        } catch (Exception e) {
-            fail("testform1a:msgs not rendered");
-        }
-        try {
-            lastpage.getHtmlElementById("testform2:msg");
-        } catch (Exception e) {
-            fail("testform2:msg not rendered");
-        }
-
-        // check that other ids weren't
-
-        try {
-            lastpage.getHtmlElementById("testform3:msgs");
-            fail("testform3:msgs rendered - not correct");
-        } catch (Exception e) {
-            //  Success
-        }
-        try {
-            lastpage.getHtmlElementById("testform3a:msgs");
-            fail("testform3:msgs rendered - not correct");
-        } catch (Exception e) {
-            //  Success
-        }
-        try {
-            lastpage.getHtmlElementById("testform4:msg");
-            fail("testform4:msg rendered - not correct");
-        } catch (Exception e) {
-            //  Success
-        }
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/render/OutputScriptStyleTestCase.java b/jsf-ri/systest/src/com/sun/faces/render/OutputScriptStyleTestCase.java
deleted file mode 100644
index cf94591..0000000
--- a/jsf-ri/systest/src/com/sun/faces/render/OutputScriptStyleTestCase.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.render;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-
-public class OutputScriptStyleTestCase extends AbstractTestCase {
-
-    public OutputScriptStyleTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(OutputScriptStyleTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testOutputScriptStyle() throws Exception {
-        HtmlPage page = getPage("/faces/render/outputScriptStyleNested.xhtml");
-
-        String text = page.asXml();
-
-        // case 1
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<script type=\"text/javascript\".*src=\"/jsf-systest/faces/javax.faces.resource/case1.js\">.*" + 
-                "</script>.*" + 
-                "</head>.*"
-                ));
-        
-        assertTrue(!text.matches("(?s).*alert\\(\"case1\"\\);.*"));
-        
-        // case 2
-        assertTrue(text.matches(
-                "(?s).*<body>.*"+
-                "<script type=\"text/javascript\">.*" + 
-                "alert\\(\"case2\"\\);.*" +
-                "</script>.*" + 
-                "</body>.*"
-                ));
-        
-        // case 3
-        assertTrue(text.matches(
-                "(?s).*<body>.*"+
-                "<script type=\"text/javascript\".*src=\"/jsf-systest/faces/javax.faces.resource/case3.js\">.*" + 
-                "</script>.*" + 
-                "</body>.*"
-                ));
-        
-        assertTrue(!text.matches("(?s).*alert\\(\"case3\"\\);.*"));
-        
-        // case 4
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<script type=\"text/javascript\".*src=\"/jsf-systest/faces/javax.faces.resource/case4.js\">.*" + 
-                "</script>.*" + 
-                "</head>.*"
-                ));
-
-        // case 5, if not satisfied, would cause the page to fail.
-
-        // case 6
-        assertTrue(text.matches(
-                "(?s).*<body>.*"+
-                "<script type=\"text/javascript\".*src=\"/jsf-systest/faces/javax.faces.resource/case6.js\">.*" + 
-                "</script>.*" + 
-                "</body>.*"
-                ));
-        
-        // case 7, if not satisfied, would cause the page to fail
-        
-        // case 8
-        assertTrue(text.matches(
-                "(?s).*<body>.*"+
-                "<script type=\"text/javascript\">.*" + 
-                "alert\\(\"case8\"\\);.*" +
-                "</script>.*" + 
-                "</body>.*"
-                ));
-        
-        // case 9
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<link.* type=\"text/css\".*rel=\"stylesheet\".* href=\"/jsf-systest/faces/javax.faces.resource/case9.css\"\\s*/>.*" + 
-                "</head>.*"
-                ));
-        
-        assertTrue(!text.matches("(?s).*\\.case9.*"));
-        
-        // case 10
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<style\\s*type=\"text/css\">.*" +
-                "\\.case10\\s*\\{.*" +
-                "color: blue;.*" +
-                "\\}.*" +
-                "</style>.*" +
-                "</head>.*"
-                ));
-        
-
-        // case 11
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<link.* type=\"text/css\".*rel=\"stylesheet\".* href=\"/jsf-systest/faces/javax.faces.resource/case11.css\"\\s*/>.*" + 
-                "</head>.*"
-                ));
-        
-        assertTrue(!text.matches("(?s).*\\.case11.*"));
-        
-        // case 12
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<link.* type=\"text/css\".*rel=\"stylesheet\".* href=\"/jsf-systest/faces/javax.faces.resource/case12.css\"\\s*/>.*" + 
-                "</head>.*"
-                ));
-
-        // case 13, if not satisfied, would cause the page to fail.
-
-        // case 14
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<link.* type=\"text/css\".*rel=\"stylesheet\".* href=\"/jsf-systest/faces/javax.faces.resource/case14.css\"\\s*/>.*" + 
-                "</head>.*"
-                ));
-
-        // case 15, if not satisfied, would cause the page to fail.
-        
-        // case 16
-        assertTrue(text.matches(
-                "(?s).*<head>.*"+
-                "<style\\s*type=\"text/css\">.*" +
-                "\\.case16\\s*\\{.*" +
-                "color: orange;.*" +
-                "\\}.*" +
-                "</style>.*" +
-                "</head>.*"
-                ));
-
-    }
-
-    public void testScriptQuery() throws Exception {
-        lastpage = getPage("/faces/render/outputScriptQuery.xhtml");
-        String text = lastpage.asXml();
-
-        assertTrue(text.matches(
-                "(?s).*"+
-                "<script type=\"text/javascript\".*src=\"/jsf-systest/faces/javax.faces.resource/simple.js\\?mod=test\">.*" +
-                "</script>.*"
-                ));
-
-        assertTrue(text.matches(
-                "(?s).*"+
-                "<script type=\"text/javascript\".*src=\"/jsf-systest/faces/javax.faces.resource/simple2.js\">.*" +
-                "</script>.*"
-                ));
-
-        assertTrue(text.matches(
-                "(?s).*"+
-                "<script type=\"text/javascript\".*src=\"/jsf-systest/faces/javax.faces.resource/jsf.js\\?ln=javax.faces&stage=Development\">.*" +
-                "</script>.*"
-                ));
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/render/SelectStarTestCase.java b/jsf-ri/systest/src/com/sun/faces/render/SelectStarTestCase.java
deleted file mode 100644
index 92488f5..0000000
--- a/jsf-ri/systest/src/com/sun/faces/render/SelectStarTestCase.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.render;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.*;
-
-import java.util.List;
-
-public class SelectStarTestCase extends AbstractTestCase {
-
-    public SelectStarTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SelectStarTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testSelectStarXhtml() throws Exception {
-        String failMsg;
-
-        getPage("/faces/render/selectStarNoSelection.xhtml");
-        System.out.println("Start select star test case - facelets");
-
-        // Check SelectManyListbox
-        HtmlSelect selectOneList = (HtmlSelect) lastpage.getHtmlElementById("selectOneListbox");
-        List<HtmlOption> selectOneListOptions = selectOneList.getOptions();
-        failMsg = "Wrong number of options for SelectManyListbox, expected 5, got "+selectOneListOptions.size();
-        assertTrue(failMsg,selectOneListOptions.size() == 5);
-        HtmlOption selectOption = selectOneListOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectOneListOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectOneListbox
-        HtmlSelect selectOneMenu = (HtmlSelect) lastpage.getHtmlElementById("selectOneMenu");
-        List<HtmlOption> selectOneMenuOptions = selectOneMenu.getOptions();
-        assertTrue(selectOneMenuOptions.size() == 5);
-        selectOption = selectOneMenuOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectOneMenuOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectOneRadio
-        HtmlInput selectOneRadio0 = (HtmlInput) lastpage.getHtmlElementById("selectOneRadio:0");
-        assertTrue(selectOneRadio0.getValueAttribute().equals("noSelection"));
-        HtmlInput selectOneRadio1 = (HtmlInput) lastpage.getHtmlElementById("selectOneRadio:1");
-        assertTrue(selectOneRadio1.getValueAttribute().equals("Apple"));
-
-        // Check SelectManyCheckbox
-        HtmlInput selectManyCheckbox0 = (HtmlInput) lastpage.getHtmlElementById("selectManyCheckbox:0");
-        assertTrue(selectManyCheckbox0.getValueAttribute().equals("noSelection"));
-        HtmlInput selectManyCheckbox1 = (HtmlInput) lastpage.getHtmlElementById("selectManyCheckbox:1");
-        assertTrue(selectManyCheckbox1.getValueAttribute().equals("Apple"));
-
-        // Check SelectManyListbox
-        HtmlSelect selectManyListbox = (HtmlSelect) lastpage.getHtmlElementById("selectManyListbox");
-        List<HtmlOption> selectManyListOptions = selectManyListbox.getOptions();
-        assertTrue(selectManyListOptions.size() == 5);
-        selectOption = selectManyListOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectManyListOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectManyMenu
-        HtmlSelect selectManyMenu = (HtmlSelect) lastpage.getHtmlElementById("selectManyMenu");
-        List<HtmlOption> selectManyMenuOptions = selectManyMenu.getOptions();
-        assertTrue(selectManyMenuOptions.size() == 5);
-        selectOption = selectManyMenuOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectManyMenuOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-    }
-
-    public void testSelectStarJspx() throws Exception {
-        String failMsg;
-
-        getPage("/faces/render/selectStarNoSelection.jspx");
-        System.out.println("Start select star test case - jspx");
-
-        // Check SelectManyListbox
-        HtmlSelect selectOneList = (HtmlSelect) lastpage.getHtmlElementById("selectOneListbox");
-        List<HtmlOption> selectOneListOptions = selectOneList.getOptions();
-        failMsg = "Wrong number of options for SelectManyListbox, expected 5, got "+selectOneListOptions.size();
-        assertTrue(failMsg,selectOneListOptions.size() == 5);
-        HtmlOption selectOption = selectOneListOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectOneListOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectOneListbox
-        HtmlSelect selectOneMenu = (HtmlSelect) lastpage.getHtmlElementById("selectOneMenu");
-        List<HtmlOption> selectOneMenuOptions = selectOneMenu.getOptions();
-        assertTrue(selectOneMenuOptions.size() == 5);
-        selectOption = selectOneMenuOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectOneMenuOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectOneRadio
-        HtmlInput selectOneRadio0 = (HtmlInput) lastpage.getHtmlElementById("selectOneRadio:0");
-        assertTrue(selectOneRadio0.getValueAttribute().equals("noSelection"));
-        HtmlInput selectOneRadio1 = (HtmlInput) lastpage.getHtmlElementById("selectOneRadio:1");
-        assertTrue(selectOneRadio1.getValueAttribute().equals("Apple"));
-
-        // Check SelectManyCheckbox
-        HtmlInput selectManyCheckbox0 = (HtmlInput) lastpage.getHtmlElementById("selectManyCheckbox:0");
-        assertTrue(selectManyCheckbox0.getValueAttribute().equals("noSelection"));
-        HtmlInput selectManyCheckbox1 = (HtmlInput) lastpage.getHtmlElementById("selectManyCheckbox:1");
-        assertTrue(selectManyCheckbox1.getValueAttribute().equals("Apple"));
-
-        // Check SelectManyListbox
-        HtmlSelect selectManyListbox = (HtmlSelect) lastpage.getHtmlElementById("selectManyListbox");
-        List<HtmlOption> selectManyListOptions = selectManyListbox.getOptions();
-        assertTrue(selectManyListOptions.size() == 5);
-        selectOption = selectManyListOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectManyListOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectManyMenu
-        HtmlSelect selectManyMenu = (HtmlSelect) lastpage.getHtmlElementById("selectManyMenu");
-        List<HtmlOption> selectManyMenuOptions = selectManyMenu.getOptions();
-        assertTrue(selectManyMenuOptions.size() == 5);
-        selectOption = selectManyMenuOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("noSelection"));
-        assertTrue(selectOption.asText().equals("No selection"));
-        selectOption = selectManyMenuOptions.get(1);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-    }
-
-    public void testSelectStarXhtmlHide() throws Exception {
-        String failMsg;
-
-        getPage("/faces/render/selectStarSelectionHideNoSelection.xhtml");
-        System.out.println("Start select star test case - facelets");
-
-        // Check SelectManyListbox
-        HtmlSelect selectOneList = (HtmlSelect) lastpage.getHtmlElementById("selectOneListbox");
-        List<HtmlOption> selectOneListOptions = selectOneList.getOptions();
-        failMsg = "Wrong number of options for SelectManyListbox, expected 4, got "+selectOneListOptions.size();
-        assertTrue(failMsg,selectOneListOptions.size() == 4);
-        HtmlOption selectOption = selectOneListOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectOneListbox
-        HtmlSelect selectOneMenu = (HtmlSelect) lastpage.getHtmlElementById("selectOneMenu");
-        List<HtmlOption> selectOneMenuOptions = selectOneMenu.getOptions();
-        assertTrue(selectOneMenuOptions.size() == 4);
-        selectOption = selectOneMenuOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectOneRadio
-        HtmlInput selectOneRadio0 = (HtmlInput) lastpage.getHtmlElementById("selectOneRadio:1");
-        assertTrue(selectOneRadio0.getValueAttribute().equals("Apple"));
-
-        // Check SelectManyCheckbox
-        HtmlInput selectManyCheckbox0 = (HtmlInput) lastpage.getHtmlElementById("selectManyCheckbox:1");
-        assertTrue(selectManyCheckbox0.getValueAttribute().equals("Apple"));
-
-        // Check SelectManyListbox
-        HtmlSelect selectManyListbox = (HtmlSelect) lastpage.getHtmlElementById("selectManyListbox");
-        List<HtmlOption> selectManyListOptions = selectManyListbox.getOptions();
-        assertTrue(selectManyListOptions.size() == 4);
-        selectOption = selectManyListOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-
-        // Check SelectManyMenu
-        HtmlSelect selectManyMenu = (HtmlSelect) lastpage.getHtmlElementById("selectManyMenu");
-        List<HtmlOption> selectManyMenuOptions = selectManyMenu.getOptions();
-        assertTrue(selectManyMenuOptions.size() == 4);
-        selectOption = selectManyMenuOptions.get(0);
-        assertTrue(selectOption.getValueAttribute().equals("Apple"));
-        assertTrue(selectOption.asText().equals("Apple"));
-    }
-
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/CheckboxTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/CheckboxTestCase.java
deleted file mode 100644
index 3c3f3bf..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/CheckboxTestCase.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
-  *
- */
-public class CheckboxTestCase extends AbstractTestCase {
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public CheckboxTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(CheckboxTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /**
-     * Added for issue 904.
-     */
-    public void testBooleanCheckboxSubmittedValue() throws Exception {
-
-        HtmlPage page = getPage("/faces/standard/checkboxSubmittedValue.xhtml");
-        HtmlCheckBoxInput box1 = (HtmlCheckBoxInput) page.getHtmlElementById("box1");
-        assertNotNull(box1);
-        page = (HtmlPage) box1.click();
-        HtmlCheckBoxInput box2 = (HtmlCheckBoxInput) page.getHtmlElementById("box2");
-        assertNotNull(box2);
-        HtmlPage newPage = (HtmlPage) box2.click();
-        box1 = (HtmlCheckBoxInput) newPage.getHtmlElementById("box1");
-        assertTrue(box1.isChecked());
-        box2 = (HtmlCheckBoxInput) newPage.getHtmlElementById("box2");
-        assertTrue(box2.isChecked());
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponent.java b/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponent.java
deleted file mode 100644
index 8c711f8..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponent.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-
-/**
- * <p>Test <code>UIComponent</code> for sys tests.</p>
- */
-
-public class ChildrenComponent extends UIOutput {
-
-
-    public ChildrenComponent() {
-        super();
-    }
-
-
-    public ChildrenComponent(String id) {
-        super();
-        setId(id);
-    }
-
-
-    public boolean getRendersChildren() {
-        return (true);
-    }
-
-
-    public void encodeBegin(FacesContext context) throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        writer.write("{ ");
-    }
-
-
-    public void encodeChildren(FacesContext context) throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        Iterator kids = getChildren().iterator();
-        while (kids.hasNext()) {
-            encodeRecursive(context, (UIComponent) kids.next());
-            writer.write(" ");
-        }
-    }
-
-
-    public void encodeEnd(FacesContext context) throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        writer.write("}\n");
-    }
-
-
-    private void encodeRecursive(FacesContext context, UIComponent component)
-        throws IOException {
-
-        component.encodeBegin(context);
-        if (component.getRendersChildren()) {
-            component.encodeChildren(context);
-        } else {
-            Iterator kids = component.getChildren().iterator();
-            while (kids.hasNext()) {
-                UIComponent kid = (UIComponent) kids.next();
-                encodeRecursive(context, kid);
-            }
-        }
-        component.encodeEnd(context);
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponentBodyTag.java b/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponentBodyTag.java
deleted file mode 100644
index 1926e88..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponentBodyTag.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.webapp.UIComponentBodyTag;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyContent;
-
-
-/**
- * <p><code>UIComponentBodyTag</code> for <code>ChildrenComponent</code>.</p>
- */
-
-public class ChildrenComponentBodyTag extends UIComponentBodyTag {
-
-    private boolean firstPass = true;
-
-    // -------------------------------------------------------------- Attributes
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getComponentType() {
-        return ("ChildrenComponent");
-    }
-
-
-    public String getRendererType() {
-        return (null);
-    }
-
-
-    /**
-     * <p>Handle the ending of the nested body content for this tag.  The
-     * default implementation simply calls <code>getDoAfterBodyValue()</code> to
-     * retrieve the flag value to be returned.</p>
-     *
-     * @throws javax.servlet.jsp.JspException if an error is encountered
-     */
-    public int doAfterBody() throws JspException {
-        if (firstPass) {
-            System.out.println("Evaluating body again...");
-            BodyContent cont = getBodyContent();
-            cont.clearBody();
-            firstPass = false;
-            return EVAL_BODY_AGAIN;
-        }
-        else {
-            return super.doAfterBody();
-        }
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponentTag.java b/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponentTag.java
deleted file mode 100644
index 9a670e2..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/ChildrenComponentTag.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.webapp.UIComponentTag;
-
-
-/**
- * <p><code>UIComponentTag</code> for <code>ChildrenComponent</code>.</p>
- */
-
-public class ChildrenComponentTag extends UIComponentTag {
-
-
-    // -------------------------------------------------------------- Attributes
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getComponentType() {
-        return ("ChildrenComponent");
-    }
-
-
-    public String getRendererType() {
-        return (null);
-    }
-
-
-    public void release() {
-        super.release();
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/ComponentMiscTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/ComponentMiscTestCase.java
deleted file mode 100644
index 91b07db..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/ComponentMiscTestCase.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.html.HtmlOption;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class ComponentMiscTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ComponentMiscTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ComponentMiscTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testModelCoercionForUISelectOne() throws Exception {
-        HtmlPage page = getPage("/faces/ModelSelectItemConversion.jsp");
-        HtmlSelect select = (HtmlSelect) getAllElementsOfGivenClass(page, 
-                                                                    new ArrayList(),
-                                                                    HtmlSelect.class).get(0);
-        HtmlOption option = select.getOption(1);
-        option.setSelected(true);
-        
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page,
-                                                                             "submit");
-        
-        // clicking this should yield no errors.
-        submit.click();
-        
-    }
-    
-    public void testConverterForUISelectMany() throws Exception {
-        HtmlPage page = getPage("/faces/SelectManyConverterTest.jsp");
-        List selects = getAllElementsOfGivenClass(page, 
-                                                  new ArrayList(), 
-                                                  HtmlSelect.class);
-        HtmlSelect select = (HtmlSelect) selects.get(0);
-        HtmlSelect select2 = (HtmlSelect) selects.get(1);
-        select.getOption(1).setSelected(true);
-        select.getOption(2).setSelected(true);
-        select2.getOption(1).setSelected(true);
-        select2.getOption(2).setSelected(true);
-        
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page,
-                                                                             "submit");
-        page = (HtmlPage) submit.click();
-        
-        // ensure no validator errors
-        String pageText = page.asText();
-        assertTrue(pageText.indexOf("Value is not valid") < 0);
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/ConditionalNavigationTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/ConditionalNavigationTestCase.java
deleted file mode 100644
index 8ae53b1..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/ConditionalNavigationTestCase.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-public class ConditionalNavigationTestCase extends AbstractTestCase {
-
-
-    public ConditionalNavigationTestCase(String name) {
-           super(name);
-       }
-
-       /**
-        * Set up instance variables required by this test case.
-        */
-       public void setUp() throws Exception {
-           super.setUp();
-       }
-
-
-       /**
-        * Return the tests included in this test suite.
-        */
-       public static Test suite() {
-           return (new TestSuite(ConditionalNavigationTestCase.class));
-       }
-
-
-       /**
-        * Tear down instance variables required by this test case.
-        */
-       public void tearDown() {
-           super.tearDown();
-       }
-
-
-       // ------------------------------------------------------------ Test Methods
-
-       public void testConditionalNavigation() throws Exception {
-
-           HtmlPage page = getPage("/faces/conditionalNav.xhtml");
-
-           HtmlCheckBoxInput checkbox = (HtmlCheckBoxInput)
-                   page.getElementById("checkbox");
-           checkbox.setChecked(true);
-           HtmlSubmitInput button = (HtmlSubmitInput)
-                   page.getElementById("submit");
-           page = button.click();
-           String text = page.asText();
-           assertTrue(text.contains("Success!"));
-
-           page = getPage("/faces/conditionalNav.xhtml");
-
-           checkbox = (HtmlCheckBoxInput)
-                   page.getElementById("checkbox");
-           checkbox.setChecked(false);
-           button = (HtmlSubmitInput)
-                   page.getElementById("submit");
-           page = button.click();
-           text = page.asText();
-           assertTrue(text.contains("Failure!"));
-
-
-
-       }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/DataTableTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/DataTableTestCase.java
deleted file mode 100644
index 6b4da87..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/DataTableTestCase.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.*;
-
-public class DataTableTestCase extends AbstractTestCase {
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public DataTableTestCase(String name) {
-        super(name);
-    }
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(DataTableTestCase.class));
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /*
-     * Test for https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=774
-     */
-    public void testVarNotOverrwrittenByNull() throws Exception {
-
-        HtmlPage page = getPage("/faces/standard/dtablevarnotoverwritten.jsp");
-        List<HtmlAnchor> links = new ArrayList<HtmlAnchor>(3);
-        getAllElementsOfGivenClass(page, links, HtmlAnchor.class);
-
-        // should have three links rendered by the table
-        // with their display values being abc, def, ghi in that
-        // order *if* the var attribute wasn't overwritten by the tag.
-        assertEquals(3, links.size());
-        List<String> expectedValues = new ArrayList<String>(3);
-        expectedValues.add("abc");
-        expectedValues.add("def");
-        expectedValues.add("ghi");
-        for (int i = 0, len = links.size(); i < len; i++) {
-            HtmlAnchor anchor = links.get(i);
-            String expectedValue = expectedValues.get(i);
-            assertEquals(expectedValue, expectedValue, anchor.asText().trim());
-        }
-
-    }
-
-
-    /*
-     * Test regression https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=902.
-     */
-    public void testRowClasses() throws Exception {
-
-        HtmlPage page = getPage("/faces/standard/dtablerowclasses.jsp");
-        assertNotNull(page);
-        List<HtmlTable> tableList = new ArrayList<HtmlTable>(1);
-        getAllElementsOfGivenClass(page, tableList, HtmlTable.class);
-        assertTrue(tableList.size() == 1);
-        HtmlTable table = tableList.get(0);
-        List<HtmlTableRow> rows = table.getRows();
-        assertEquals(6,rows.size());
-        for (int i = 0, len = rows.size(); i < len; i++) {
-            HtmlTableRow row = rows.get(i);
-            if (i % 2 == 0) {
-            	assertEquals("b1",row.getClassAttribute());
-            } else {
-            	assertEquals("b2",row.getClassAttribute());
-            }
-        }
-
-    }
-
-    public void testTablesWithEmptyBody() throws Exception {
-
-        HtmlPage page = getPage("/faces/standard/dtablewithemptybody.jsp");
-        String xml = page.asText();
-        System.out.println(xml);
-        assertNotNull(page);
-
-        assertEmptyTable("Empty", page, false);
-
-        HtmlTable table = (HtmlTable) page.getElementById("Some");
-        assertNotNull(table);
-        HtmlTableHeader header = table.getHeader();
-        HtmlTableRow row = assertSingle(header.getRows());
-        HtmlTableCell cell = assertSingle(row.getCells());
-        assertFalse(cell.hasAttribute("colspan"));
-        HtmlTableFooter footer = table.getFooter();
-        row = assertSingle(footer.getRows());
-        cell = assertSingle(row.getCells());
-        assertFalse(cell.hasAttribute("colspan"));
-        HtmlTableBody body = assertSingle(table.getBodies());
-        row = assertSingle(body.getRows());
-        cell = assertSingle(row.getCells());
-        assertEquals("", cell.asText());
-
-        assertEmptyTable("PureEmptyDataTable", page, false);
-
-        // panelGridTests
-        assertEmptyTable("PureEmptyPanelGrid", page, false);
-        assertEmptyTable("NoRenderedContentPanelGrid", page, true);
-
-    }
-
-    /**
-     * tests that a table with the given id exists, and that it is rendered as
-     * <table>
-     * <tr>
-     * <td></td>
-     * </tr>
-     * </table>
-     *
-     * @param tableId
-     *            the id of the table
-     * @param page
-     *            the page to lookup the table in
-     */
-    private static void assertEmptyTable(final String tableId,
-            final HtmlPage page, final boolean hasHeader) {
-        HtmlTable table = (HtmlTable) page.getElementById(tableId);
-        assertNotNull("Should find Table with ID: " + tableId, table);
-        // Test that we have only one row at all
-        List<HtmlTableRow> allRows = table.getRows();
-        int expectedRowCount = hasHeader ? 2 : 1;
-        assertEquals("Table " + tableId
-                + " should have " + expectedRowCount
-                + " row(s)", expectedRowCount,
-                allRows.size());
-        // test that we have <tbody><tr><td></td></tr></tbody>
-        HtmlTableBody body = assertSingle(tableId + "should have one tbody",
-                table.getBodies());
-        HtmlTableRow row = assertSingle(tableId + ":tbody should have one tr",
-                body.getRows());
-        HtmlTableCell cell = assertSingle(tableId
-                + ":tbody:tr should have one td", row.getCells());
-        assertEquals(tableId + " the single td should be empty", "", cell
-                .asText());
-    }
-
-    private static <T> T assertSingle(final String msg, final List<T> input) {
-        assertEquals(msg, 1, input.size());
-        return input.get(0);
-    }
-
-    private static <T> T assertSingle(final List<T> input) {
-        assertEquals(1, input.size());
-        return input.get(0);
-    }
-
-    public void testTableForms() throws Exception {
-        getPage("/faces/standard/dtablemultiforms.jsp");
-        checkTrue("out","");
-
-        HtmlTextInput in0 = (HtmlTextInput) lastpage.getHtmlElementById("table:0:columnform:columninput");
-        in0.setValueAttribute("test0");
-
-        HtmlSubmitInput button0 = (HtmlSubmitInput) lastpage.getHtmlElementById("table:0:columnform:columnbutton");
-        lastpage = (HtmlPage) button0.click();
-
-        checkTrue("out","test0");
-
-        HtmlTextInput in1 = (HtmlTextInput) lastpage.getHtmlElementById("table:1:columnform:columninput");
-        in1.setValueAttribute("test1");
-
-        HtmlSubmitInput button1 = (HtmlSubmitInput) lastpage.getHtmlElementById("table:1:columnform:columnbutton");
-        lastpage = (HtmlPage) button1.click();
-
-        checkTrue("out","test1");
-
-        HtmlTextInput in2 = (HtmlTextInput) lastpage.getHtmlElementById("table:2:columnform:columninput");
-        in2.setValueAttribute("test2");
-
-        HtmlSubmitInput button2 = (HtmlSubmitInput) lastpage.getHtmlElementById("table:2:columnform:columnbutton");
-        lastpage = (HtmlPage) button2.click();
-
-        checkTrue("out","test2");
-
-        HtmlTextInput finalin = (HtmlTextInput) lastpage.getHtmlElementById("finalform:finalinput");
-        finalin.setValueAttribute("testfinal");
-
-        HtmlSubmitInput finalbutton = (HtmlSubmitInput) lastpage.getHtmlElementById("finalform:finalbutton");
-        lastpage = (HtmlPage) finalbutton.click();
-
-        checkTrue("out","testfinal");
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/DuplicateIds04.java b/jsf-ri/systest/src/com/sun/faces/systest/DuplicateIds04.java
deleted file mode 100644
index f7c12dd..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/DuplicateIds04.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-
-package com.sun.faces.systest;
-
-import java.util.List;
-import javax.faces.component.UISelectItem;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.component.html.HtmlPanelGrid;
-import javax.faces.component.html.HtmlSelectOneMenu;
-import javax.faces.event.ValueChangeEvent;
-
-/**
- * Backing bean for search criteria screen.
- *
- * @author  Mark Roth
- */
-public class DuplicateIds04 {
-    
-    /** Either "and" or "or" */
-    private String operator = "and";
-    
-    /** Panel grid component to store components */
-    private HtmlPanelGrid panelGrid;
-
-    private int serialNumber = 0;
-
-    public DuplicateIds04() { }
-    
-    /**
-     * Called when the "More" button is pressed
-     */
-    public String more() {
-        return "again";
-    }
-    
-    /**
-     * Called when the "Fewer" button is pressed
-     */
-    public String fewer() {
-        return "again";
-    }
-    
-    /**
-     * Called when the "Search" button is pressed
-     */
-    public String search() {
-        return "search";
-    }
-    
-    /**
-     * Getter for property operator.
-     * @return Value of property operator.
-     */
-    public String getOperator() {
-        return operator;
-    }
-    
-    /**
-     * Setter for property operator.
-     * @param operator New value of property operator.
-     */
-    public void setOperator(String operator) {
-        this.operator = operator;
-    }
-    
-    /**
-     * Getter for property panelGrid.  If the panel grid does not yet exist,
-     * create it, and add the initial children.
-     *
-     * @return Value of property panelGrid.
-     */
-    public HtmlPanelGrid getPanelGrid() {
-        if(panelGrid == null) {
-            panelGrid = new HtmlPanelGrid();
-	    //	    panelGrid.setId("searchCriteria" + serialNumber++);
-
-            panelGrid.setColumns(3);
-            panelGrid.setBorder(1);
-            panelGrid.setCellpadding("5");
-            panelGrid.setCellspacing("0");
-            List children = panelGrid.getChildren();
-            HtmlSelectOneMenu field = createFieldMenu();
-            HtmlSelectOneMenu operator = createOperatorMenu();
-            HtmlInputText text = new HtmlInputText();
-	    //	    text.setId("searchCriteria" + serialNumber++);
-
-            text.setSize(25);
-            children.add(field);
-            children.add(operator);
-            children.add(text);
-        }
-        return panelGrid;
-    }
-    
-    /**
-     * Creates the menu that allows the user to select a field.
-     */
-    private HtmlSelectOneMenu createFieldMenu() {
-        HtmlSelectOneMenu field = new HtmlSelectOneMenu();
-	//	field.setId("searchCriteria" + serialNumber++);
-
-        List children = field.getChildren();
-        children.add(createSelectItem("Subject"));
-        children.add(createSelectItem("Sender"));
-        children.add(createSelectItem("Date"));
-        children.add(createSelectItem("Priority"));
-        children.add(createSelectItem("Status"));
-        children.add(createSelectItem("To"));
-        children.add(createSelectItem("Cc"));
-        children.add(createSelectItem("To or Cc"));
-        return field;
-    }
-    
-    /**
-     * Creates the menu that allows the user to select an operator
-     */
-    private HtmlSelectOneMenu createOperatorMenu() {
-        HtmlSelectOneMenu field = new HtmlSelectOneMenu();
-	//	field.setId("searchCriteria" + serialNumber++);
-
-        List children = field.getChildren();
-        children.add(createSelectItem("contains"));
-        children.add(createSelectItem("doesn't contain"));
-        children.add(createSelectItem("is"));
-        children.add(createSelectItem("isn't"));
-        children.add(createSelectItem("starts with"));
-        children.add(createSelectItem("ends with"));
-        return field;
-    }
-    
-    /**
-     * Creates a select tiem with the given value and label.
-     */
-    private UISelectItem createSelectItem(String label) {
-        UISelectItem result = new UISelectItem();
-	//	result.setId("searchCriteria" + serialNumber++);
-        result.setItemValue(label);
-        result.setItemLabel(label);
-        return result;
-    }
-    
-    /**
-     * Setter for property panelGrid.
-     * @param panelGrid New value of property panelGrid.
-     */
-    public void setPanelGrid(HtmlPanelGrid panelGrid) {
-        this.panelGrid = panelGrid;
-    }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/DuplicateIds04TestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/DuplicateIds04TestCase.java
deleted file mode 100644
index 63dcaa7..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/DuplicateIds04TestCase.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.util.List;
-
-
-/**
- * <p>Verify that required validation occurrs for Select* components.</p>
- */
-
-public class DuplicateIds04TestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public DuplicateIds04TestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(DuplicateIds04TestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    /**
-     *
-     * <p>Verify duplicate ids are caught.</p>
-     */
-
-    public void testDuplicateIdsFromBinding() throws Exception {
-	HtmlPage page = getPage("/faces/duplicateIds04.jsp");
-	List list = getAllElementsOfGivenClass(page, null, 
-					       HtmlSubmitInput.class); 
-	HtmlSubmitInput button = (HtmlSubmitInput) list.get(0);
-	client.setThrowExceptionOnFailingStatusCode(false);
-	page = (HtmlPage) button.click();
-	assertTrue(-1 != page.asText().indexOf("j_id0:j_id2"));
-	assertTrue(-1 != page.asText().indexOf("Duplicate"));
-	client.setThrowExceptionOnFailingStatusCode(true);
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/DynamicComponent.java b/jsf-ri/systest/src/com/sun/faces/systest/DynamicComponent.java
deleted file mode 100644
index 0dda115..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/DynamicComponent.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIComponentBase;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-
-
-/**
- * <p>Test <code>UIComponent</code> for sys tests that dynamically creates
- * or removes children UIOutput components with specified ids and values.
- * It pays attention to the following request parameters in the
- * <code>encodeBegin()</code> method:</p>
- * <ul>
- * <li><code>?mode=create&id=foo&value=bar</code> - Create a new
- * <code>UIOutput</code> child with a component identifier of
- * <code>foo</code> and a value of <code>bar</code> (optional).  Set the
- * <code>rendererType</code> property to <code>Text</code>.  The
- * new child will be appended to the child list.</li>
- * <li><code>?mode=delete&id=foo</code> - Remove any child with a
- * component identifier of <code>foo</code>.</li>
- * </ul>
- *
- * <p>In accordance with our current restrictions, this component sets
- * <code>rendersChildren</code> to <code>true</code>, and recursively
- * renders its children in <code>encodeChildren</code>.  This component
- * itself renders "{" at the beginning and "}" at the end, just like
- * <code>ChildrenComponent</code>.</p>
- */
-
-public class DynamicComponent extends UIComponentBase {
-
-
-    public static final String COMPONENT_FAMILY = "Dynamic";
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public DynamicComponent() {
-        this("dynamic");
-    }
-
-
-    public DynamicComponent(String componentId) {
-        super();
-        setId(componentId);
-    }
-
-
-    // ----------------------------------------------------- UIComponent Methods
-
-    public String getFamily() {
-
-        return (COMPONENT_FAMILY);
-
-    }
-
-
-    public boolean getRendersChildren() {
-        return (true);
-    }
-
-
-    public void encodeBegin(FacesContext context) throws IOException {
-        process(context);
-        ResponseWriter writer = context.getResponseWriter();
-        writer.write("{ ");
-    }
-
-
-    public void encodeChildren(FacesContext context) throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        Iterator kids = getChildren().iterator();
-        while (kids.hasNext()) {
-            encodeRecursive(context, (UIComponent) kids.next());
-            writer.write(" ");
-        }
-    }
-
-
-    public void encodeEnd(FacesContext context) throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        writer.write(" }\n");
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void encodeRecursive(FacesContext context, UIComponent component)
-        throws IOException {
-
-        component.encodeBegin(context);
-        if (component.getRendersChildren()) {
-            component.encodeChildren(context);
-        } else {
-            Iterator kids = component.getChildren().iterator();
-            while (kids.hasNext()) {
-                UIComponent kid = (UIComponent) kids.next();
-                encodeRecursive(context, kid);
-            }
-        }
-        component.encodeEnd(context);
-
-    }
-
-
-    private void process(FacesContext context) {
-        Map map = context.getExternalContext().getRequestParameterMap();
-        String mode = (String) map.get("mode");
-        String id = (String) map.get("id");
-        String value = (String) map.get("value");
-        if (mode == null) {
-            return;
-        } else if ("create".equals(mode)) {
-            UIOutput output = new UIOutput();
-            output.setId(id);
-            output.setRendererType("javax.faces.Text");
-            output.setValue(value);
-            getChildren().add(output);
-        } else if ("delete".equals(mode)) {
-            Iterator kids = getChildren().iterator();
-            while (kids.hasNext()) {
-                UIComponent kid = (UIComponent) kids.next();
-                if (id.equals(kid.getId())) {
-                    getChildren().remove(kid);
-                    break;
-                }
-            }
-        }
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/DynamicComponentTag.java b/jsf-ri/systest/src/com/sun/faces/systest/DynamicComponentTag.java
deleted file mode 100644
index d6de849..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/DynamicComponentTag.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.webapp.UIComponentTag;
-
-
-/**
- * <p><code>UIComponentTag</code> for <code>ChildrenComponent</code>.</p>
- */
-
-public class DynamicComponentTag extends UIComponentTag {
-
-
-    // -------------------------------------------------------------- Attributes
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getComponentType() {
-        return ("DynamicComponent");
-    }
-
-
-    public String getRendererType() {
-        return (null);
-    }
-
-
-    public void release() {
-        super.release();
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/FacetComponent.java b/jsf-ri/systest/src/com/sun/faces/systest/FacetComponent.java
deleted file mode 100644
index ef2a30a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/FacetComponent.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import java.io.IOException;
-
-
-/**
- * <p>Test <code>UIComponent</code> for sys tests.</p>
- */
-
-public class FacetComponent extends UIOutput {
-
-
-    public FacetComponent() {
-        super();
-    }
-
-
-    public FacetComponent(String id) {
-        super();
-        setId(id);
-    }
-
-
-    public void encodeEnd(FacesContext context) throws IOException {
-        ResponseWriter writer = context.getResponseWriter();
-        UIOutput facet = (UIOutput) getFacet("header");
-        if (facet != null) {
-            writer.write("[" + facet.getValue() + "] ");
-        } else {
-            writer.write("[] ");
-        }
-        writer.write("[");
-        writer.write((String) getValue());
-        writer.write("] ");
-        facet = (UIOutput) getFacet("footer");
-        if (facet != null) {
-            writer.write("[" + facet.getValue() + "] ");
-        } else {
-            writer.write("[] ");
-        }
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/FacetComponentTag.java b/jsf-ri/systest/src/com/sun/faces/systest/FacetComponentTag.java
deleted file mode 100644
index 3ab5c1a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/FacetComponentTag.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.webapp.UIComponentTag;
-
-
-/**
- * <p><code>UIComponentTag</code> for <code>FacetComponent</code>.</p>
- */
-
-public class FacetComponentTag extends UIComponentTag {
-
-
-    // -------------------------------------------------------------- Attributes
-
-
-    private String value = null;
-
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getComponentType() {
-        return ("FacetComponent");
-    }
-
-
-    public String getRendererType() {
-        return (null);
-    }
-
-
-    public void release() {
-        super.release();
-        value = null;
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-        if (value != null) {
-            ((FacetComponent) component).setValue(value);
-        }
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/FlashMessagesTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/FlashMessagesTestCase.java
deleted file mode 100644
index 1a03699..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/FlashMessagesTestCase.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
-  *
- */
-public class FlashMessagesTestCase extends AbstractTestCase {
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FlashMessagesTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FlashMessagesTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /**
-     * Added for issue 1476.
-     */
-    public void testBooleanCheckboxSubmittedValue() throws Exception {
-
-        HtmlPage page = getPage("/faces/flash/flashKeepMessages01.xhtml");
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("nextButton");
-        page = button.click();
-        String pageText = page.asText();
-        assertTrue(pageText.contains("Mesage 1 survives redirect"));
-        assertTrue(pageText.contains("Mesage 2 survives redirect"));
-
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/FlashReaperBean.java b/jsf-ri/systest/src/com/sun/faces/systest/FlashReaperBean.java
deleted file mode 100644
index bedea99..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/FlashReaperBean.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.context.flash.ELFlash;
-import java.lang.reflect.Field;
-import java.util.Map;
-import javax.faces.bean.ApplicationScoped;
-import javax.faces.bean.ManagedBean;
-import javax.faces.context.FacesContext;
-
- at ManagedBean(eager=true)
- at ApplicationScoped
-public class FlashReaperBean {
-
-    static final int NUMBER_OF_ZOMBIES = 12;
-
-    public  FlashReaperBean() {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.NumberOfConcurrentFlashUsers, "" + NUMBER_OF_ZOMBIES);
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.NumberOfFlashesBetweenFlashReapings, "24");
-
-    }
-
-    public String getNumberEntriesInInnerMap() throws Exception {
-        String result = null;
-
-        ELFlash flash = (ELFlash) FacesContext.getCurrentInstance().getExternalContext().getFlash();
-        Field innerMapField = ELFlash.class.getDeclaredField("flashInnerMap");
-        innerMapField.setAccessible(true);
-        Map<String,Map<String, Object>> innerMap =
-                (Map<String,Map<String, Object>>) innerMapField.get(flash);
-        result = "" + innerMap.size();
-
-        return result;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/FlashReaperTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/FlashReaperTestCase.java
deleted file mode 100644
index c9389f0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/FlashReaperTestCase.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import java.net.URL;
-import java.net.URLConnection;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
-  *
- */
-public class FlashReaperTestCase extends AbstractTestCase {
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FlashReaperTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FlashReaperTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testFlashesAreReaped() throws Exception {
-
-        URL makeZombie = getURL("/faces/flashReaper.xhtml");
-        URLConnection zombieConnection;
-        HtmlPage page;
-        int numberOfReaps = 0, numberEntriesInInnerMap = 0;
-        boolean didReap = false;
-
-
-        for (int i = 0; i < 50; i++) {
-            zombieConnection = makeZombie.openConnection();
-            zombieConnection.getContent();
-            zombieConnection.getInputStream().close();
-            page = getPage("/faces/flashReaper.xhtml");
-
-            numberEntriesInInnerMap = Integer.parseInt(page.asText().trim());
-            if (numberEntriesInInnerMap <= FlashReaperBean.NUMBER_OF_ZOMBIES) {
-                didReap = true;
-                numberOfReaps++;
-            }
-        }
-
-        assertTrue(didReap);
-        assertTrue(2 < numberOfReaps);
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/FlashViewParamTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/FlashViewParamTestCase.java
deleted file mode 100644
index 655bd11..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/FlashViewParamTestCase.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
-  *
- */
-public class FlashViewParamTestCase extends AbstractTestCase {
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public FlashViewParamTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(FlashViewParamTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /**
-     * Added for issue 904.
-     */
-    public void testBooleanCheckboxSubmittedValue() throws Exception {
-
-        HtmlPage page = getPage("/faces/flash01.xhtml");
-        HtmlButtonInput button = (HtmlButtonInput) page.getElementById("nextButton");
-        page = button.click();
-        assertTrue(page.asText().contains("foo = bar"));
-
-        page = getPage("/faces/flash01.xhtml");
-        HtmlAnchor link = (HtmlAnchor) page.getElementById("nextLink");
-        page = link.click();
-        assertTrue(page.asText().contains("foo = bar"));
-
-        page = getPage("/faces/flash01.xhtml");
-        link = (HtmlAnchor) page.getElementById("nextCommandLink");
-        page = link.click();
-        assertTrue(page.asText().contains("foo = bar"));
-
-        page = getPage("/faces/flash01.xhtml");
-        HtmlSubmitInput submitButton = (HtmlSubmitInput) page.getElementById("nextCommandButton");
-        page = submitButton.click();
-        assertTrue(page.asText().contains("foo = bar"));
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/LinkTypeAttributeTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/LinkTypeAttributeTestCase.java
deleted file mode 100644
index 58e45c3..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/LinkTypeAttributeTestCase.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-
-
-/**
- * Test case for issue 1098.
- */
-public class LinkTypeAttributeTestCase extends AbstractTestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-
-       /**
-        * Construct a new instance of this test case.
-        *
-        * @param name Name of the test case
-        */
-       public LinkTypeAttributeTestCase(String name) {
-           super(name);
-       }
-
-    // ------------------------------------------------------ Instance Variables
-
-       // ---------------------------------------------------- Overall Test Methods
-
-
-       /**
-        * Set up instance variables required by this test case.
-        */
-       public void setUp() throws Exception {
-           super.setUp();
-       }
-
-
-       /**
-        * Return the tests included in this test suite.
-        */
-       public static Test suite() {
-           return (new TestSuite(LinkTypeAttributeTestCase.class));
-       }
-
-
-       /**
-        * Tear down instance variables required by this test case.
-        */
-       public void tearDown() {
-           super.tearDown();
-       }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testLinkAttributeNotDuplicated() throws Exception {
-
-        String type ="type=\"type\"";
-        HtmlPage page = getPage("/faces/standard/linkTypeAttribute.xhtml");
-
-        HtmlElement link = page.getElementById("form:clink");
-        String xml = link.asXml();
-        int idx = xml.indexOf(type);
-        assertTrue(idx != -1);
-        idx = xml.indexOf(type, idx + type.length());
-        assertTrue(idx == -1);
-
-        link = page.getElementById("form:link");
-        xml = link.asXml();
-        idx = xml.indexOf(type);
-        assertTrue(idx != -1);
-        idx = xml.indexOf(type, idx + type.length());
-        assertTrue(idx == -1);
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/NamingTag.java b/jsf-ri/systest/src/com/sun/faces/systest/NamingTag.java
deleted file mode 100644
index 399f192..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/NamingTag.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.webapp.UIComponentTag;
-
-
-/**
- * <p><code>UIComponentTag</code> for a <code>UINamingContainer</code>
- * component.</p>
- */
-
-public class NamingTag extends UIComponentTag {
-
-
-    // -------------------------------------------------------------- Attributes
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getComponentType() {
-        return ("NamingContainer");
-    }
-
-
-    public String getRendererType() {
-        return (null);
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/NavigationTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/NavigationTestCase.java
deleted file mode 100644
index ccd8a6b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/NavigationTestCase.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class NavigationTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public NavigationTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(NavigationTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    // Test dynamically adding and removing components
-    public void testRedirect() throws Exception {
-        client.setRedirectEnabled(false);
-        // the navigation-case for this url is set up to cause a redirect
-        HtmlPage page = getPage("/faces/redirect.jsp");
-        HtmlForm form = getFormById(page, "redirect");
-        assertNotNull("form exists", form);
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-            form.getInputByName("redirect" +
-                                NamingContainer.SEPARATOR_CHAR +
-                                "submit");
-        boolean exceptionThrown = false;
-        try {
-            page = (HtmlPage) submit.click();
-        } catch (FailingHttpStatusCodeException fhsce) {
-            assertEquals("Didn't get expected redirect",
-                         fhsce.getStatusCode(), 302);
-            exceptionThrown = true;
-        }
-        assertTrue("Didn't get expected redirect", exceptionThrown);
-    }
-
-
-    public void testNavigateWithVerbatim() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlPage page, page1;
-
-        page = getPage("/faces/jsp/verbatim-test.jsp");
-        form = getFormById(page, "form1");
-        assertNotNull("form exists", form);
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form1" + NamingContainer.SEPARATOR_CHAR +
-                                "submit");
-
-        // press the button
-	try {
-            page1 = (HtmlPage) submit.click();
-            assertTrue(-1 != page1.asText().indexOf("Thank you"));
-	} catch (Exception e) {
-	    e.printStackTrace();
-	    assertTrue(false);
-	}
-    }
-
-    public void testNavigateWithVerbatim_One() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlPage page, page1;
-                                                                                
-        page = getPage("/faces/jsp/verbatim-one-test.jsp");
-        form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "submit");
-                                                                                
-        // press the link, return to the same page, and check that
-        // output text (header) is still present...
- 
-        try {
-            page1 = (HtmlPage) submit.click();
-            assertTrue(-1 != page1.asText().indexOf("this is the header"));
-        } catch (Exception e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-    }
-
-    public void testNavigateWithVerbatim_Two() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlPage page, page1;
-                                                                               
-                                                                               
-        page = getPage("/faces/jsp/verbatim-two-test.jsp");
-        form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "submit");
-                                                                               
-                                                                               
-        // submit the form, return to the same page, and check that
-        // output text (header) is still present...
-        // and verbatim text is still present...
-                                                                               
-        try {
-            page1 = (HtmlPage) submit.click();
-            assertTrue(-1 != page1.asText().indexOf("verbatim one text here"));
-            assertTrue(-1 != page1.asText().indexOf("this is the header"));
-            assertTrue(-1 != page1.asText().indexOf("verbatim two text here"));
-        } catch (Exception e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-    }
-    
-    public void testNavigateWithEnum() throws Exception {
-        HtmlForm form;
-        HtmlSubmitInput submit;
-        HtmlPage page, page1;
-                                                                               
-                                                                               
-        page = getPage("/faces/enum01.jsp");
-        form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "go");
-                                                                               
-        // submit the form, go to next page, check that the text exists
-                                                                               
-        try {
-            page1 = (HtmlPage) submit.click();
-            assertTrue(-1 != page1.asText().indexOf("/hello.jsp PASSED"));
-        } catch (Exception e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        
-        page = getPage("/faces/enum01.jsp");
-        form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" + NamingContainer.SEPARATOR_CHAR +
-                                "stay");
-                                                                               
-        // submit the form, stay on same page, check that the text does not exist
-                                                                               
-        try {
-            page1 = (HtmlPage) submit.click();
-            assertTrue(-1 == page1.asText().indexOf("/hello.jsp PASSED"));
-            assertTrue(-1 != page1.asText().indexOf("stay here"));
-        } catch (Exception e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        
-    }
-
-
-    public void testNullOutcomeNoMessage() throws Exception {
-        HtmlPage page = getPage("/faces/standard/selectmany05.xhtml");
-
-        HtmlInput input = getInputContainingGivenId(page, "command");
-        page = (HtmlPage) input.click();
-
-        // if there is no outcome, no message should be displayed to the user
-        assertTrue(!page.asText().contains("javax_faces_developmentstage_messages"));
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/OutputTargetsTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/OutputTargetsTestCase.java
deleted file mode 100644
index cfc8f56..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/OutputTargetsTestCase.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Test h:link and h:button.
- */
-public class OutputTargetsTestCase extends AbstractTestCase {
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public OutputTargetsTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(OutputTargetsTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testOutputTargetButton() throws Exception {
-        HtmlPage page = getPage("/faces/standard/outcometarget01.xhtml");
-        // get the page twice to avoid jsession ID encoding in the results
-        page = getPage("/faces/standard/outcometarget01.xhtml");
-        assertNotNull(page);
-
-        List<HtmlInput> buttonList = new ArrayList<HtmlInput>(7);
-        getAllElementsOfGivenClass(page, buttonList, HtmlInput.class);
-        assertTrue(buttonList.size() == 7);
-
-        HtmlInput button = buttonList.get(0);
-        String onclick = button.getOnClickAttribute();
-        assertEquals("button", button.getTypeAttribute());
-        assertEquals("button1", button.getIdAttribute());
-        assertEquals("window.location.href='/jsf-systest/faces/standard/outcometarget01.xhtml'; return false;",
-                     onclick);
-        page = button.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        button = buttonList.get(1);
-        onclick = button.getOnClickAttribute();
-        assertEquals("button", button.getTypeAttribute());
-        assertEquals("button2", button.getIdAttribute());
-        assertEquals("window.location.href='/jsf-systest/faces/standard/nav1.xhtml'; return false;", onclick);
-        page = button.click();
-        assertEquals("nav1", page.getTitleText());
-        page = getPage("/faces/standard/outcometarget01.xhtml");
-
-        // ---------------------------------------------------------------------
-
-        button = buttonList.get(2);
-        onclick = button.getOnClickAttribute();
-        assertEquals("button", button.getTypeAttribute());
-        assertEquals("button3", button.getIdAttribute());
-        assertEquals("window.location.href='/jsf-systest/faces/standard/outcometarget01.xhtml?id=page&id2=view#about'; return false;",
-                     onclick);
-        page = button.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        button = buttonList.get(3);
-        onclick = button.getOnClickAttribute();
-        assertEquals("button", button.getTypeAttribute());
-        assertEquals("button4", button.getIdAttribute());
-        assertEquals("alert('foo'); window.location.href='/jsf-systest/faces/standard/nav2.xhtml'; return false;", onclick);
-        page = button.click();
-        assertEquals("nav2", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        button = buttonList.get(4);
-        onclick = button.getOnClickAttribute();
-        assertEquals("button", button.getTypeAttribute());
-        assertEquals("button5", button.getIdAttribute());
-        assertEquals("window.location.href='/jsf-systest/faces/standard/outcometarget01.xhtml?id=page'; return false;", onclick);
-        page = button.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        button = buttonList.get(5);
-        onclick = button.getOnClickAttribute();
-        assertEquals("button", button.getTypeAttribute());
-        assertEquals("button6", button.getIdAttribute());
-        assertEquals("window.location.href='/jsf-systest/faces/standard/outcometarget01.xhtml?id=page&id2=view'; return false;", onclick);
-        page = button.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        button = buttonList.get(6);
-        onclick = button.getOnClickAttribute();
-        assertEquals("button", button.getTypeAttribute());
-        assertEquals("button7", button.getIdAttribute());
-        assertEquals("window.location.href='/jsf-systest/faces/standard/outcometarget01.xhtml?id=config&id2=view'; return false;", onclick);
-        page = button.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-    }
-
-
-    public void testOutputTargetLink() throws Exception {
-
-        HtmlPage page = getPage("/faces/standard/outcometarget01.xhtml");
-        // get the page twice to avoid jsession ID encoding in the results
-        page = getPage("/faces/standard/outcometarget01.xhtml");
-        assertNotNull(page);
-
-        List<HtmlAnchor> linkList = new ArrayList<HtmlAnchor>(7);
-        getAllElementsOfGivenClass(page, linkList, HtmlAnchor.class);
-        assertTrue(linkList.size() == 7);
-
-        HtmlAnchor link = linkList.get(0);
-        String onclick = link.getOnClickAttribute();
-        assertEquals("link1", link.getIdAttribute());
-        assertEquals("", onclick);
-        assertEquals("/jsf-systest/faces/standard/outcometarget01.xhtml", link.getHrefAttribute());
-        page = link.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        link = linkList.get(1);
-        onclick = link.getOnClickAttribute();
-        assertEquals("link2", link.getIdAttribute());
-        assertEquals("", onclick);
-        assertEquals("/jsf-systest/faces/standard/nav1.xhtml", link.getHrefAttribute());
-        page = link.click();
-        assertEquals("nav1", page.getTitleText());
-        page = getPage("/faces/standard/outcometarget01.xhtml");
-
-        // ---------------------------------------------------------------------
-
-        link = linkList.get(2);
-        onclick = link.getOnClickAttribute();
-        assertEquals("link3", link.getIdAttribute());
-        assertEquals("", onclick);
-        assertEquals("/jsf-systest/faces/standard/outcometarget01.xhtml?id=page&id2=view#about",
-                     link.getHrefAttribute());
-        page = link.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        link = linkList.get(3);
-        onclick = link.getOnClickAttribute();
-        assertEquals("link4", link.getIdAttribute());
-        assertEquals("alert('foo');", onclick);
-        assertEquals("/jsf-systest/faces/standard/nav2.xhtml", link.getHrefAttribute());
-        page = link.click();
-        assertEquals("nav2", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        link = linkList.get(4);
-        onclick = link.getOnClickAttribute();
-        assertEquals("link5", link.getIdAttribute());
-        assertEquals("/jsf-systest/faces/standard/outcometarget01.xhtml?id=page", link.getHrefAttribute());
-        page = link.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        link = linkList.get(5);
-        onclick = link.getOnClickAttribute();
-        assertEquals("link6", link.getIdAttribute());
-        assertEquals("/jsf-systest/faces/standard/outcometarget01.xhtml?id=page&id2=view", link.getHrefAttribute());
-        page = link.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-        // ---------------------------------------------------------------------
-
-        link = linkList.get(6);
-        onclick = link.getOnClickAttribute();
-        assertEquals("link7", link.getIdAttribute());
-        assertEquals("/jsf-systest/faces/standard/outcometarget01.xhtml?id=config&id2=view", link.getHrefAttribute());
-        page = link.click();
-        assertEquals("outcometarget01", page.getTitleText());
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/OutputVerbatimTag.java b/jsf-ri/systest/src/com/sun/faces/systest/OutputVerbatimTag.java
deleted file mode 100644
index 3d89603..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/OutputVerbatimTag.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIOutput;
-import javax.faces.webapp.UIComponentBodyTag;
-import javax.servlet.jsp.JspException;
-
-
-/**
- * <p><code>UIComponentBodyTag</code> for <code>Verbatim</code> rendering.
- * In other words, the body content of this tag is captured and then
- * rendered as the value of this component.</p>
- */
-
-public class OutputVerbatimTag extends UIComponentBodyTag {
-
-
-    // -------------------------------------------------------------- Attributes
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String getComponentType() {
-        return ("Output");
-    }
-
-
-    public String getRendererType() {
-        return ("Text");
-    }
-
-
-    // Assign the trimmed body content of this tag as the value of the
-    // current component.
-    public int doAfterBody() throws JspException {
-
-        // Save the trimmed body content of this tag (if any)
-        if (getBodyContent() != null) {
-            String value = getBodyContent().getString().trim();
-            if (value != null) {
-                ((UIOutput) getComponentInstance()).setValue(value);
-            }
-        }
-
-        // Perform normal superclass processing
-        return (super.doAfterBody());
-
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/RenderKitsTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/RenderKitsTestCase.java
deleted file mode 100644
index 02fdcd0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/RenderKitsTestCase.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.gargoylesoftware.htmlunit.ElementNotFoundException;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import javax.faces.component.NamingContainer;
-
-/**
- * <p>Test Case for Multiple RenderKits.</p>
- */
-
-public class RenderKitsTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public RenderKitsTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(RenderKitsTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-    public void testRenderKits() throws Exception {
-        HtmlPage page = getPage("/faces/renderkit04.jsp");
-        assertTrue(-1 != page.asText().indexOf("HTML_BASIC"));
-            assertTrue(-1 != page.asText().indexOf("com.sun.faces.renderkit.html_basic.HtmlResponseWriter"));
-
-        HtmlForm form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-            form.getInputByName("form" +
-                                NamingContainer.SEPARATOR_CHAR +
-                                "submit");
-        try {
-            page = (HtmlPage) submit.click();
-            assertTrue(-1 != page.asText().indexOf("CUSTOM"));
-            assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.render.CustomResponseWriter"));
-	} catch (Exception e) {
-	    e.printStackTrace();
-	    assertTrue(false);
-        }
-
-        form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        submit = (HtmlSubmitInput)
-            form.getInputByName("form" +
-                                NamingContainer.SEPARATOR_CHAR +
-                                "submit");
-        try {
-            page = (HtmlPage) submit.click();
-            assertTrue(-1 != page.asText().indexOf("HTML_BASIC"));
-            assertTrue(-1 != page.asText().indexOf("com.sun.faces.renderkit.html_basic.HtmlResponseWriter"));
-	} catch (Exception e) {
-	    e.printStackTrace();
-	    assertTrue(false);
-        }
-    }
-
-    // Assert with no renderKitId specfied on the view, and no defaultRenderKitId, 
-    // HTML_BASIC is set.  Also assert that the hidden field was not written; 
-    public void testNoRenderKitId() throws Exception {
-        HtmlPage page = getPage("/faces/renderkit06.jsp");
-        HtmlForm form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        HtmlHiddenInput hidden = null;
-        boolean exceptionThrown = false;
-        try {
-            hidden = (HtmlHiddenInput)form.getInputByName("javax.faces.RenderKitId");
-        } catch (ElementNotFoundException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        assertTrue(-1 != page.asText().indexOf("HTML_BASIC"));
-        assertTrue(-1 != page.asText().indexOf("com.sun.faces.renderkit.html_basic.HtmlResponseWriter"));
-    }
-
-    // Test when default-render-kit-id is set for application;
-    public void testDefaultRenderKitId() throws Exception {
-        // sets default-render-kit-id in application
-        HtmlPage page = getPage("/faces/renderkit-default.jsp");
-
-        // Load a page with renderKitId="CUSTOM"; 
-        // Assert hidden field is not written because renderKitId == defaultRenderKitId;
-        page = getPage("/faces/renderkit06.jsp");
-        HtmlForm form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        HtmlHiddenInput hidden = null;
-        boolean exceptionThrown = false;
-        try {
-            hidden = (HtmlHiddenInput)form.getInputByName("javax.faces.RenderKitId");
-        } catch (ElementNotFoundException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(-1 != page.asText().indexOf("CUSTOM"));
-        assertTrue(-1 != page.asText().indexOf("com.sun.faces.systest.render.CustomResponseWriter"));
-
-        // Load a page with renderKitId="HTML_BASIC";
-        // Assert hidden field is written because renderKitId != defaultRenderKitId;
-        page = getPage("/faces/renderkit04.jsp");
-        form = getFormById(page, "form");
-        assertNotNull("form exists", form);
-        hidden = (HtmlHiddenInput)form.getInputByName("javax.faces.RenderKitId");
-        assertNotNull("hidden exists", hidden);
-        assertTrue(-1 != page.asText().indexOf("HTML_BASIC"));
-        assertTrue(-1 != page.asText().indexOf("com.sun.faces.renderkit.html_basic.HtmlResponseWriter"));
-        page = getPage("/faces/renderkit-default-clear.jsp");
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/ResourceRelocationTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/ResourceRelocationTestCase.java
deleted file mode 100644
index c975fe0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/ResourceRelocationTestCase.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlHead;
-import com.gargoylesoftware.htmlunit.html.HtmlTitle;
-import com.gargoylesoftware.htmlunit.html.HtmlScript;
-import com.gargoylesoftware.htmlunit.html.HtmlLink;
-import com.gargoylesoftware.htmlunit.html.HtmlBody;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Validate resource re-location of scripts and stylesheets
- */
-public class ResourceRelocationTestCase extends AbstractTestCase {
-
-
-    public ResourceRelocationTestCase() {
-        this("ResourceRelocationTestCase");
-    }
-
-
-    public ResourceRelocationTestCase(String name) {
-        super(name);
-    }
-
-    public static Test suite() {
-        return (new TestSuite(ResourceRelocationTestCase.class));
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testResourceRelocation() throws Exception {
-
-        resourceRelocationTest("/faces/resourcerelocation.xhtml",true);
-        resourceRelocationTest("/faces/resourcerelocation2.xhtml",false);
-        resourceRelocationTest("/faces/resourcerelocation3.xhtml",false);
-        resourceRelocationTest("/faces/resourcerelocation4.xhtml",true);
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void resourceRelocationTest(String urlfrag, boolean scriptfirst) throws Exception {
-
-        int scriptPos;
-        int sheetPos;
-
-        if (scriptfirst) {
-            scriptPos = 0;
-            sheetPos = 1;
-        } else {
-            sheetPos = 0;
-            scriptPos = 1;
-        }
-
-        // for this request, the script and stylesheet will be in the head
-        HtmlPage page = getPage(urlfrag+"?location=head");
-        List<HtmlHead> headList = new ArrayList<HtmlHead>(1);
-        getAllElementsOfGivenClass(page, headList, HtmlHead.class);
-        assertTrue(headList.size() == 1);
-        HtmlHead head = headList.get(0);
-        List<HtmlElement> headChildren = getChildren(head);
-        assertTrue(headChildren.size() == 3);
-        assertTrue(headChildren.get(2) instanceof HtmlTitle);
-        assertTrue(headChildren.get(scriptPos) instanceof HtmlScript);
-        assertTrue(headChildren.get(sheetPos) instanceof HtmlLink);
-        List<HtmlBody> bodyList = new ArrayList<HtmlBody>(1);
-        getAllElementsOfGivenClass(page, bodyList, HtmlBody.class);
-        assertTrue(bodyList.size() == 1);
-        HtmlBody body = bodyList.get(0);
-        List<HtmlElement> bodyChildren = getChildren(body);
-        assertTrue(bodyChildren.size() == 1);
-        assertTrue(bodyChildren.get(0) instanceof HtmlForm);
-        List<HtmlForm> formList = new ArrayList<HtmlForm>(1);
-        getAllElementsOfGivenClass(page, formList, HtmlForm.class);
-        assertTrue(formList.size() == 1);
-        HtmlForm form = formList.get(0);
-        List<HtmlElement> formChildren = getChildren(form);
-        assertTrue(formChildren.size() == 2);
-        assertTrue(formChildren.get(0) instanceof HtmlInput);
-        assertTrue(formChildren.get(1) instanceof HtmlInput);
-
-        // for this request, the stylesheet will be in the head, and the script
-        // will be the last child of body
-        page = getPage(urlfrag+"?location=body");
-        headList.clear();
-        getAllElementsOfGivenClass(page, headList, HtmlHead.class);
-        assertTrue(headList.size() == 1);
-        head = headList.get(0);
-        headChildren = getChildren(head);
-        assertTrue(headChildren.size() == 2);
-        assertTrue(headChildren.get(1) instanceof HtmlTitle);
-        assertTrue(headChildren.get(0) instanceof HtmlLink);
-        bodyList.clear();
-        getAllElementsOfGivenClass(page, bodyList, HtmlBody.class);
-        assertTrue(bodyList.size() == 1);
-        body = bodyList.get(0);
-        bodyChildren = getChildren(body);
-        assertTrue(bodyChildren.size() == 2);
-        assertTrue(bodyChildren.get(0) instanceof HtmlForm);
-        assertTrue(bodyChildren.get(1) instanceof HtmlScript);
-        formList.clear();
-        getAllElementsOfGivenClass(page, formList, HtmlForm.class);
-        assertTrue(formList.size() == 1);
-        form = formList.get(0);
-        formChildren = getChildren(form);
-        assertTrue(formChildren.size() == 2);
-        assertTrue(formChildren.get(0) instanceof HtmlInput);
-        assertTrue(formChildren.get(1) instanceof HtmlInput);
-
-        // for this request, the stylesheet will be in the head, and the
-        // script will be the last child of the form
-        page = getPage(urlfrag+"?location=form");
-        headList.clear();
-        getAllElementsOfGivenClass(page, headList, HtmlHead.class);
-        assertTrue(headList.size() == 1);
-        head = headList.get(0);
-        headChildren = getChildren(head);
-        assertTrue(headChildren.size() == 2);
-        assertTrue(headChildren.get(1) instanceof HtmlTitle);
-        assertTrue(headChildren.get(0) instanceof HtmlLink);
-        bodyList.clear();
-        getAllElementsOfGivenClass(page, bodyList, HtmlBody.class);
-        assertTrue(bodyList.size() == 1);
-        body = bodyList.get(0);
-        bodyChildren = getChildren(body);
-        assertTrue(bodyChildren.size() == 1);
-        assertTrue(bodyChildren.get(0) instanceof HtmlForm);
-        formList.clear();
-        getAllElementsOfGivenClass(page, formList, HtmlForm.class);
-        assertTrue(formList.size() == 1);
-        form = formList.get(0);
-        formChildren = getChildren(form);
-        assertTrue(formChildren.size() == 3);
-        assertTrue(formChildren.get(0) instanceof HtmlInput);
-        assertTrue(formChildren.get(1) instanceof HtmlInput);
-        assertTrue(formChildren.get(2) instanceof HtmlScript);
-
-    }
-
-    private List<HtmlElement> getChildren(HtmlElement parent) {
-        List<HtmlElement> list = new ArrayList<HtmlElement>();
-        for (Iterator i = parent.getChildElements().iterator(); i.hasNext();) {
-            Object o = i.next();
-            if (o instanceof HtmlElement) {
-                list.add((HtmlElement) o);
-            }
-        }
-        return list;
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/SelectManyCollectionTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/SelectManyCollectionTestCase.java
deleted file mode 100644
index 010d08b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/SelectManyCollectionTestCase.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlOption;
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class SelectManyCollectionTestCase extends AbstractTestCase {
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SelectManyCollectionTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SelectManyCollectionTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testSelectManyCollections() throws Exception {
-
-        HtmlPage page = getPage("/faces/standard/selectmany05.xhtml");
-        String[] selectIds = {
-              "array",
-              "list",
-              "set",
-              "sortedset",
-              "collection",
-              "ilist",
-              "ilist2",
-              "iset",
-              "isortedset",
-              "icollection",
-              "hintString",
-              "hintClass",
-              "object",
-              "intList1",
-              "integerList1",
-              "escape01",
-              "escape02",
-              "emptyItems",
-        };
-        int[] totalNumberOfSelections = {
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              4,
-              1,
-        };
-        String[][] initialSelections = {
-              new String[0],
-              new String[0],
-              new String[0],
-              new String[0],
-              new String[0],
-              new String[] { "Bilbo", "Pippin", "Merry" },
-              new String[] { "Bilbo", "Pippin", "Merry" },
-              new String[] { "Frodo" },
-              new String[] { "Pippin", "Frodo" },
-              new String[] { "Bilbo", "Merry" },
-              new String[0],
-              new String[0],
-              new String[0],
-              new String[0],
-              new String[0],
-              new String[] { "Frodo - <Ring Bearer>" },
-              new String[] { "Frodo -" },
-              new String[0],
-        };
-
-        String[][] postBackSelections = {
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "Bilbo" },
-              new String[] { "2" },
-              new String[] { "3" },
-              new String[] { "Bilbo - <Ring Finder>" },
-              new String[] {  },
-              new String[] {  },
-        };
-
-        // =====================================================================
-        //  Validate initial page state
-        //
-        List<HtmlSelect> selects = new ArrayList<HtmlSelect>(18);
-        getAllElementsOfGivenClass(page, selects, HtmlSelect.class);
-        assertTrue(selects.size() == 18);
-        for (int i = 0; i < selectIds.length; i++) {
-            String id = selectIds[i];
-            System.out.println("Validating HtmlSelect with ID: " + id);
-            String[] initialSelection = initialSelections[i];
-            String[] newSelection = postBackSelections[i];
-            HtmlSelect select = getHtmlSelectForId(selects, id);
-            assertNotNull(select);
-            validateState(select, totalNumberOfSelections[i], initialSelection);
-            updateSelections(select, totalNumberOfSelections[i], newSelection);
-        }
-
-        HtmlInput input = getInputContainingGivenId(page, "command");
-        page = (HtmlPage) input.click();
-
-        // ensure no messages were queued by the post-back
-        assertTrue(!page.asText().contains("Error"));
-
-        selects.clear();
-        getAllElementsOfGivenClass(page, selects, HtmlSelect.class);
-        assertTrue(selects.size() == 18);
-        for (int i = 0; i < selectIds.length; i++) {
-            String id = selectIds[i];
-            if ("escape02".equals(id)) {
-                continue;
-            }
-            String[] newSelection = postBackSelections[i];
-            HtmlSelect select = getHtmlSelectForId(selects, id);
-            assertNotNull(select);
-            validateState(select, totalNumberOfSelections[i], newSelection);
-        }
-        
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    private void updateSelections(HtmlSelect select,
-                                  int totalNumberOfOptions,
-                                  String[] selectedOptions) {
-
-        assertNotNull(select);
-        List<HtmlOption> options = select.getOptions();
-        assertTrue(options.size() == totalNumberOfOptions);
-        for (String s : selectedOptions) {
-            for (HtmlOption option : options) {
-                option.setSelected(s.equals(option.asText()));
-            }
-        }
-    }
-
-
-    private void validateState(HtmlSelect select,
-                               int totalNumberOfOptions,
-                               String[] selectedOptions) {
-
-        assertNotNull(select);
-        List<HtmlOption> options = select.getOptions();
-        assertTrue(options.size() == totalNumberOfOptions);
-        if (selectedOptions == null || selectedOptions.length == 0) {
-            for (HtmlOption option : options) {
-                System.out.println(option.asText());
-                assertTrue(!option.isSelected());
-            }
-        } else {
-            for (String text : selectedOptions) {
-                for (HtmlOption option : options) {
-                    if (text.equals(option.asText())) {
-                        assertTrue(option.isSelected());
-                    } 
-                }
-            }
-        }
-
-    }
-
-
-    private HtmlSelect getHtmlSelectForId(List<HtmlSelect> selects, String id) {
-
-        for (HtmlSelect select : selects) {
-            if (select.getId().contains(id)) {
-                return select;
-            }
-        }
-        
-        return null;
-
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneHideNoSelectionInSelectItemGroupTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/SelectOneHideNoSelectionInSelectItemGroupTestCase.java
deleted file mode 100644
index 1fd7634..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneHideNoSelectionInSelectItemGroupTestCase.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-
-public class SelectOneHideNoSelectionInSelectItemGroupTestCase extends SelectOneHideNoSelectionTestCase {
-
-    public SelectOneHideNoSelectionInSelectItemGroupTestCase(String name) {
-		super(name);
-	}
-
-	@Override
-    protected String getPath() {
-		return "/faces/standard/selectOneLiteralHideNoSelectionOptionInSelectItemGroup.xhtml";
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneHideNoSelectionTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/SelectOneHideNoSelectionTestCase.java
deleted file mode 100644
index 7be1bcb..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneHideNoSelectionTestCase.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-
-public class SelectOneHideNoSelectionTestCase extends AbstractTestCase {
-
-
-    private HtmlPage page;
-
-	/**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SelectOneHideNoSelectionTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-        this.page = getPage(getPath());
-    }
-
-
-	protected String getPath() {
-		return "/faces/standard/selectOneLiteralHideNoSelectionOption.xhtml";
-	}
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SelectOneHideNoSelectionTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testSelectItemsWithSelectedValueDoesntShowNoSelectionOption() throws Exception {
-        HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemsSelectedValue");
-        assertEquals(4, select.getOptionSize());
-    }
-    
-    public void testSelectItemsWithNoSelectedValueShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemsNoSelectedValue");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemsWithNoSelectionSelectedValueShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemsNoSelectionSelectedValue");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemWithSelectedValueDoesntShowNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemSelectedValue");
-    	assertEquals(4, select.getOptionSize());
-    }
-    
-    //same test as testSelectItemWithSelectedValueDoesntShowNoSelectionOption, but now the
-    //no selection option is put as last option in the selectOneMenu
-    public void testSelectItemAsLastWithSelectedValueDoesntShowNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemSelectedValueLast");
-    	assertEquals(4, select.getOptionSize());
-    }
-    
-    public void testSelectItemWithNoSelectedValueShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemNoSelectedValue");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemWithNoSelectionSelectedValueShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemNoSelectionSelectedValue");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    
-    public void testSelectItemsWithSelectedValueNoHidingShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemsSelectedValueNoHiding");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemsWithNoSelectedValueNoHidingShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemsNoSelectedValueNoHiding");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemsWithNoSelectionSelectedValueNoHidingShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemsNoSelectionSelectedValueNoHiding");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemWithSelectedValueNoHidingShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemSelectedValueNoHiding");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemWithNoSelectedValueNoHidingShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemNoSelectedValueNoHiding");
-    	assertEquals(5, select.getOptionSize());
-    }
-    
-    public void testSelectItemWithNoSelectionSelectedValueNoHidingShowsNoSelectionOption() throws Exception {
-    	HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemNoSelectionSelectedValueNoHiding");
-    	assertEquals(5, select.getOptionSize());
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneManyEnumTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/SelectOneManyEnumTestCase.java
deleted file mode 100644
index 75f31d1..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneManyEnumTestCase.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.component.NamingContainer;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.gargoylesoftware.htmlunit.html.HtmlOption;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class SelectOneManyEnumTestCase extends AbstractTestCase {
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SelectOneManyEnumTestCase(String name) {
-        super(name);
-    }
-    
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(NavigationTestCase.class));
-    }
-
-    // ------------------------------------------------------------ Test Methods
-
-    public void testEnums() throws Exception {
-        HtmlPage page = getPage("/faces/standard/selectonemanyenum.jsp");
-        HtmlForm form = getFormById(page, "test");
-        assertNotNull(form);
-        List<HtmlSelect> selectList = getAllElementsOfGivenClass(page, 
-                                                     new ArrayList<HtmlSelect>(), 
-                                                     HtmlSelect.class);
-        assertTrue(selectList.size() == 5);
-        
-        // ID selected
-        HtmlSelect select = selectList.get(0);
-        assertTrue(select.getId().contains("selected"));
-        List<HtmlOption> selectedOptions = select.getSelectedOptions();
-        assertTrue(selectedOptions.size() == 1);
-        assertTrue("Value2".equals(selectedOptions.get(0).getValueAttribute()));
-        select.setSelectedAttribute(selectedOptions.get(0), false);
-        select.setSelectedAttribute("Value1", true);
-        
-        // ID selected2
-        HtmlSelect select2 = selectList.get(1);
-        assertTrue(select2.getId().contains("selected2"));
-        List<HtmlOption> selectedOptions2 = select2.getSelectedOptions();
-        assertTrue(selectedOptions2.size() == 1);
-        assertTrue("Value3".equals(selectedOptions2.get(0).getValueAttribute()));
-        select2.setSelectedAttribute(selectedOptions2.get(0), false);
-        select2.setSelectedAttribute("Value2", true);
-        
-        // ID selected3
-        HtmlSelect select3 = selectList.get(2);
-        assertTrue(select3.getId().contains("selected3"));
-        List<HtmlOption> selectedOptions3 = select3.getSelectedOptions();
-        assertTrue(selectedOptions3.size() == 1);
-        assertTrue("Value4".equals(selectedOptions3.get(0).getValueAttribute()));
-        select3.setSelectedAttribute(selectedOptions3.get(0), false);
-        select3.setSelectedAttribute("Value3", true);
-        
-        // ID array
-        HtmlSelect selectArray = selectList.get(3);
-        assertTrue(selectArray.getId().contains("array"));
-        List<HtmlOption> selectedOptionsArray = selectArray.getSelectedOptions();
-        assertTrue(selectedOptionsArray.size() == 2);
-        assertTrue("Value2".equals(selectedOptionsArray.get(0).getValueAttribute()));
-        assertTrue("Value4".equals(selectedOptionsArray.get(1).getValueAttribute()));
-        selectArray.setSelectedAttribute(selectedOptionsArray.get(0), false);
-        selectArray.setSelectedAttribute(selectedOptionsArray.get(1), false);
-        selectArray.setSelectedAttribute("Value1", true);
-        selectArray.setSelectedAttribute("Value3", true);
-        
-              
-        // ID list
-        HtmlSelect selectListt = selectList.get(4);
-        assertTrue(selectListt.getId().contains("list"));
-        List<HtmlOption> selectedOptionsList = selectListt.getSelectedOptions();
-        assertTrue(selectedOptionsList.size() == 2);
-        assertTrue("Value1".equals(selectedOptionsList.get(0).getValueAttribute()));
-        assertTrue("Value2".equals(selectedOptionsList.get(1).getValueAttribute()));
-        selectListt.setSelectedAttribute(selectedOptionsList.get(0), false);
-        selectListt.setSelectedAttribute(selectedOptionsList.get(1), false);
-        selectListt.setSelectedAttribute("Value2", true);
-        selectListt.setSelectedAttribute("Value4", true);
-        
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-            form.getInputByName("test" +
-                                NamingContainer.SEPARATOR_CHAR +
-                                "submit");
-        page = (HtmlPage) submit.click();
-        
-        // verify the correct options were selected
-        
-        selectList = getAllElementsOfGivenClass(page, 
-                                                     new ArrayList<HtmlSelect>(), 
-                                                     HtmlSelect.class);
-        assertTrue(selectList.size() == 5);
-        
-        assertTrue(selectList.size() == 5);
-        
-        // ID selected
-        select = selectList.get(0);
-        assertTrue(select.getId().contains("selected"));
-        selectedOptions = select.getSelectedOptions();
-        assertTrue(selectedOptions.size() == 1);
-        assertTrue("Value1".equals(selectedOptions.get(0).getValueAttribute()));
-        
-        // ID selected2
-        select2 = selectList.get(1);
-        assertTrue(select2.getId().contains("selected2"));
-        selectedOptions2 = select2.getSelectedOptions();
-        assertTrue(selectedOptions2.size() == 1);
-        assertTrue("Value2".equals(selectedOptions2.get(0).getValueAttribute()));
-        
-        // ID selected3
-        select3 = selectList.get(2);
-        assertTrue(select3.getId().contains("selected3"));
-        selectedOptions3 = select3.getSelectedOptions();
-        assertTrue(selectedOptions3.size() == 1);
-        assertTrue("Value3".equals(selectedOptions3.get(0).getValueAttribute()));
-        
-        // ID array
-        selectArray = selectList.get(3);
-        assertTrue(selectArray.getId().contains("array"));
-        selectedOptionsArray = selectArray.getSelectedOptions();
-        assertTrue(selectedOptionsArray.size() == 2);
-        assertTrue("Value1".equals(selectedOptionsArray.get(0).getValueAttribute()));
-        assertTrue("Value2".equals(selectedOptionsArray.get(1).getValueAttribute()));
-              
-        // ID list
-        selectListt = selectList.get(4);
-        assertTrue(selectListt.getId().contains("list"));
-        selectedOptionsList = selectListt.getSelectedOptions();
-        assertTrue(selectedOptionsList.size() == 2);
-        assertTrue("Value2".equals(selectedOptionsList.get(0).getValueAttribute()));
-        assertTrue("Value3".equals(selectedOptionsList.get(1).getValueAttribute()));
-                
-    }
-    
-
-
-} // END SelectOneManyEnumTestCase
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneValueExpressionHideNoSelectionTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/SelectOneValueExpressionHideNoSelectionTestCase.java
deleted file mode 100644
index da8efcd..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/SelectOneValueExpressionHideNoSelectionTestCase.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSelect;
-import com.sun.faces.htmlunit.AbstractTestCase;
-
-
-public class SelectOneValueExpressionHideNoSelectionTestCase extends AbstractTestCase {
-
-    private HtmlPage page;
-
-	/**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public SelectOneValueExpressionHideNoSelectionTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-        this.page = getPage(getPath());
-    }
-
-
-	protected String getPath() {
-		return "/faces/standard/selectOneValueExpressionHideNoSelectionOption.xhtml";
-	}
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(SelectOneValueExpressionHideNoSelectionTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testHideNoSelectionOptionIsAValueExpression() throws Exception {
-        HtmlSelect select = (HtmlSelect) this.page.getElementById("f:selectItemNoSelectedValue");
-        //validate initial page
-        assertEquals(4, select.getOptionSize());
-        
-        HtmlInput button = (HtmlInput) this.page.getElementById("f:command");
-        select.getOptionByValue("Pippin").click();
-        this.page = button.click();
-        
-        select = (HtmlSelect) this.page.getElementById("f:selectItemNoSelectedValue");
-        assertEquals(5, select.getOptionSize());
-    }
-    
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/SystemEventListenerImpl.java b/jsf-ri/systest/src/com/sun/faces/systest/SystemEventListenerImpl.java
deleted file mode 100644
index a7b076e..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/SystemEventListenerImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import com.sun.faces.systest.model.TestBean;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-
-/**
- *
- * @author edburns
- */
-public class SystemEventListenerImpl implements SystemEventListener {
-
-    public boolean isListenerForSource(Object component) {
-        return component instanceof TestBean;
-    }
-
-    public void processEvent(SystemEvent event) throws AbortProcessingException {
-	FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("eventFromBean",
-									 "eventFromBean: source: " + 
-                                                                         event.getSource().getClass().getName());
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestActionListener01.java b/jsf-ri/systest/src/com/sun/faces/systest/TestActionListener01.java
deleted file mode 100644
index 0e84b05..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestActionListener01.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionListener;
-import javax.faces.event.ActionEvent;
-import javax.faces.component.StateHolder;
-import javax.faces.event.AbortProcessingException;
-
-public class TestActionListener01 implements ActionListener {
-    
-    public TestActionListener01() {}
-
-    public void processAction(ActionEvent ae)
-        throws AbortProcessingException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.addMessage(ae.getComponent().getClientId(context),
-            new FacesMessage(FacesMessage.SEVERITY_ERROR,
-            	ae.getComponent().getId() + " was pressed", null));
-    } 
-    
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestComponent.java b/jsf-ri/systest/src/com/sun/faces/systest/TestComponent.java
deleted file mode 100644
index ec243d0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestComponent.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIInput;
-import javax.faces.context.FacesContext;
-
-import java.io.IOException;
-
-
-/**
- * <p>Test <code>UIComponent</code> for sys tests.</p>
- */
-
-public class TestComponent extends UIInput {
-
-
-    public TestComponent() {
-        this("test");
-    }
-
-
-    public TestComponent(String componentId) {
-        super();
-        setId(componentId);
-    }
-
-
-    public String getComponentType() {
-        return ("TestComponent");
-    }
-
-
-    // -------------------------------------------------- Trace-Enabled Methods
-
-
-    public void decode(FacesContext context) {
-        trace("d-" + getId());
-        super.decode(context);
-    }
-
-
-    public void encodeBegin(FacesContext context) throws IOException {
-        trace("eB-" + getId());
-        super.encodeBegin(context);
-    }
-
-
-    public void encodeChildren(FacesContext context) throws IOException {
-        trace("eC-" + getId());
-        super.encodeChildren(context);
-    }
-
-
-    public void encodeEnd(FacesContext context) throws IOException {
-        trace("eE-" + getId());
-        super.encodeEnd(context);
-    }
-
-
-    public void updateModel(FacesContext context) {
-        trace("u-" + getId());
-        super.updateModel(context);
-    }
-
-
-    public void validate(FacesContext context) {
-        trace("v-" + getId());
-        super.validate(context);
-    }
-
-
-    public void processDecodes(FacesContext context) {
-        trace("pD-" + getId());
-        super.processDecodes(context);
-    }
-
-
-    public void processValidators(FacesContext context) {
-        trace("pV-" + getId());
-        super.processValidators(context);
-    }
-
-
-    public void processUpdates(FacesContext context) {
-        trace("pU-" + getId());
-        super.processUpdates(context);
-    }
-
-
-    // --------------------------------------------------- Static Trace Methods
-
-
-    // Accumulated trace log
-    private static StringBuffer trace = new StringBuffer();
-
-
-    // Append to the current trace log (or clear if null)
-    public static void trace(String text) {
-        if (text == null) {
-            trace.setLength(0);
-        } else {
-            trace.append('/');
-            trace.append(text);
-        }
-    }
-
-
-    // Retrieve the current trace log
-    public static String trace() {
-        return (trace.toString());
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestConverter.java b/jsf-ri/systest/src/com/sun/faces/systest/TestConverter.java
deleted file mode 100644
index 3255210..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestConverter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-
-/**
- * <p>Test implementation of {@link Converter}.</p>
- */
-public class TestConverter implements Converter {
-
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String newValue) throws ConverterException {
-        // No action taken
-        return newValue;
-    }
-
-
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) throws ConverterException {
-        // No action taken
-        return (value.toString());
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestConverter01.java b/jsf-ri/systest/src/com/sun/faces/systest/TestConverter01.java
deleted file mode 100644
index c51e2d2..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestConverter01.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-
-/**
- * <p>Test implementation of {@link Converter}.</p>
- */
-public class TestConverter01 implements Converter {
-
-    public Object getAsObject(FacesContext context, UIComponent component,
-                              String newValue) throws ConverterException {
-        context.addMessage(component.getClientId(context),
-            new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                component.getId() + " was converted to Object", null));
-
-        return newValue;
-    }
-
-
-    public String getAsString(FacesContext context, UIComponent component,
-                              Object value) throws ConverterException {
-        context.addMessage(component.getClientId(context),
-            new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                component.getId() + " was converted to String", null));
-
-        return (value.toString());
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestValidator.java b/jsf-ri/systest/src/com/sun/faces/systest/TestValidator.java
deleted file mode 100644
index f97f64d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestValidator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-
-
-/**
- * <p>Test implementation of {@link Validator}.</p>
- */
-
-public class TestValidator implements Validator {
-
-
-    public void validate(FacesContext context, UIComponent component, Object value) {
-        ;  // No action taken
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestValidator01.java b/jsf-ri/systest/src/com/sun/faces/systest/TestValidator01.java
deleted file mode 100644
index a5b0abf..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestValidator01.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-
-
-/**
- * <p>Test implementation of {@link Validator}.</p>
- */
-
-public class TestValidator01 implements Validator {
-
-
-    public void validate(FacesContext context, UIComponent component, Object value) {
-        context.addMessage(component.getClientId(context),
-            new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                component.getId() + " was validated", null));
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestValueChangeListener.java b/jsf-ri/systest/src/com/sun/faces/systest/TestValueChangeListener.java
deleted file mode 100644
index b2af7be..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestValueChangeListener.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-
-import javax.faces.component.UIComponent;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.component.StateHolder;
-import javax.faces.event.AbortProcessingException;
-
-public class TestValueChangeListener implements ValueChangeListener {
-    
-    public TestValueChangeListener() {}
-
-    public void processValueChange(ValueChangeEvent vce)
-    throws AbortProcessingException {
-       vce.getComponent().getAttributes().put("onblur",
-                                               vce.getNewValue().toString());
-    } 
-    
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/TestValueChangeListener01.java b/jsf-ri/systest/src/com/sun/faces/systest/TestValueChangeListener01.java
deleted file mode 100644
index 2d48fce..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/TestValueChangeListener01.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.component.StateHolder;
-import javax.faces.event.AbortProcessingException;
-
-public class TestValueChangeListener01 implements ValueChangeListener {
-    
-    public TestValueChangeListener01() {}
-
-    public void processValueChange(ValueChangeEvent vce)
-        throws AbortProcessingException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.addMessage(vce.getComponent().getClientId(context),
-            new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                vce.getComponent().getId() + " value was changed", null));
-    } 
-    
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/ant/SystestClient.java b/jsf-ri/systest/src/com/sun/faces/systest/ant/SystestClient.java
deleted file mode 100644
index 78feb00..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/ant/SystestClient.java
+++ /dev/null
@@ -1,1554 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/* ========================================================================= *
- *                                                                           *
- *                 The Apache Software License,  Version 1.1                 *
- *                                                                           *
- *         Copyright (c) 1999, 2000  The Apache Software Foundation.         *
- *                           All rights reserved.                            *
- *                                                                           *
- * ========================================================================= *
- *                                                                           *
- * Redistribution and use in source and binary forms,  with or without modi- *
- * fication, are permitted provided that the following conditions are met:   *
- *                                                                           *
- * 1. Redistributions of source code  must retain the above copyright notice *
- *    notice, this list of conditions and the following disclaimer.          *
- *                                                                           *
- * 2. Redistributions  in binary  form  must  reproduce the  above copyright *
- *    notice,  this list of conditions  and the following  disclaimer in the *
- *    documentation and/or other materials provided with the distribution.   *
- *                                                                           *
- * 3. The end-user documentation  included with the redistribution,  if any, *
- *    must include the following acknowlegement:                             *
- *                                                                           *
- *       "This product includes  software developed  by the Apache  Software *
- *        Foundation <http://www.apache.org/>."                              *
- *                                                                           *
- *    Alternately, this acknowlegement may appear in the software itself, if *
- *    and wherever such third-party acknowlegements normally appear.         *
- *                                                                           *
- * 4. The names  "The  Jakarta  Project",  "Tomcat",  and  "Apache  Software *
- *    Foundation"  must not be used  to endorse or promote  products derived *
- *    from this  software without  prior  written  permission.  For  written *
- *    permission, please contact <apache at apache.org>.                        *
- *                                                                           *
- * 5. Products derived from this software may not be called "Apache" nor may *
- *    "Apache" appear in their names without prior written permission of the *
- *    Apache Software Foundation.                                            *
- *                                                                           *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES *
- * INCLUDING, BUT NOT LIMITED TO,  THE IMPLIED WARRANTIES OF MERCHANTABILITY *
- * AND FITNESS FOR  A PARTICULAR PURPOSE  ARE DISCLAIMED.  IN NO EVENT SHALL *
- * THE APACHE  SOFTWARE  FOUNDATION OR  ITS CONTRIBUTORS  BE LIABLE  FOR ANY *
- * DIRECT,  INDIRECT,   INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL *
- * DAMAGES (INCLUDING,  BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE GOODS *
- * OR SERVICES;  LOSS OF USE,  DATA,  OR PROFITS;  OR BUSINESS INTERRUPTION) *
- * 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 OF  THIS  SOFTWARE,  EVEN  IF  ADVISED  OF THE *
- * POSSIBILITY OF SUCH DAMAGE.                                               *
- *                                                                           *
- * ========================================================================= *
- *                                                                           *
- * This software  consists of voluntary  contributions made  by many indivi- *
- * duals on behalf of the  Apache Software Foundation.  For more information *
- * on the Apache Software Foundation, please see <http://www.apache.org/>.   *
- *                                                                           *
- * ========================================================================= */
-
-package com.sun.faces.systest.ant;
-
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.net.ConnectException;
-import java.net.HttpURLConnection;
-import java.net.Socket;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-
-/**
- * <p>This class contains a <strong>Task</strong> for Ant that is used to
- * send HTTP requests to a servlet container, and examine the responses.
- * It is similar in purpose to the <code>GTest</code> task in Watchdog,
- * but uses the JDK's HttpURLConnection for underlying connectivity.</p>
- *
- * <p>The task is registered with Ant using a <code>taskdef</code> directive:
- * <pre>
- *   <taskdef name="systest"
- *       classname="com.sun.faces.systest.ant.SystestClient">
- * </pre>
- * and accepts the following configuration properties:</p>
- * <ul>
- * <li><strong>golden</strong> - The server-relative path of the static
- * resource containing the golden file for this request.</li>
- * <li><strong>host</strong> - The server name to which this request will be
- * sent.  Defaults to <code>localhost</code> if not specified.</li>
- * <li><strong>ignore</strong> - The server-relative path of the static
- * resource containing lines from the specified golden file that should
- * not be matched against the actual response.  If a golden file is
- * specified but not an ignore file, then the contents must match
- * exactly.</li>
-
- * <li><strong>ignoreIfContains</strong> - The server-relative path of
- * the static resource containing a String on each line, the presence of
- * which in the actual response line will cause that response line to be
- * ignored.</li>
-
- * <li><strong>inContent</strong> - The data content that will be submitted
- * with this request.  The test client will transparently add a carriage
- * return and line feed, and set the content length header, if this is
- * specified.  Otherwise, no content will be included in the request.</li>
- * <li><strong>inHeaders</strong> - The set of one or more HTTP headers that
- * will be included on the request, in the format
- * <code>{name}:{value}{##{name}:{value}...</li>
- * <li><strong>joinSession</strong> - Should we join the session whose session
- * identifier was returned on the previous request.  [false]</li>
- * <li><strong>message</strong> - The HTTP response message that is expected
- * in the response from the server.  No check is made if no message
- * is specified.</li>
- * <li><strong>method</strong> - The HTTP request method to be used on this
- * request.  Defaults to <ocde>GET</code> if not specified.</li>
- * <li><strong>outContent</strong> - The first line of the response data
- * content that we expect to receive.  No check is made if no content is
- * specified.</li>
- * <li><strong>outHeaders</strong> - The set of one or more HTTP headers that
- * are expected in the response (order independent).</li>
- * <li><strong>port</strong> - The port number to which this request will be
- * sent.  Defaults to <code>8080</code> if not specified.</li>
- * <li><strong>protocol</strong> - The protocol and version (such as
- * "HTTP/1.0") to include in the request, if executed as a direct
- * socket connection.  If not specified, HttpURLConnection will be used
- * instead.</li>
- * <li><strong>redirect</strong> - If set to true, follow any redirect that
- * is returned by the server.  (Only works when using HttpURLConnection).
- * </li>
- * <li><strong>request</strong> - The request URI to be transmitted for this
- * request.  This value should start with a slash character ("/"), and
- * be the server-relative URI of the requested resource.</li>
- * <li><strong>status</strong> - The HTTP status code that is expected in the
- * response from the server.  Defaults to <code>200</code> if not
- * specified.  Set to zero to disable checking the return value.</li>
- * <li><strong>recordGolden</strong> - Record a goldenfile of the response
- * if a goldenfile is specifed for the request and the goldenfile doesn't
- * already exist.</li>
- * </ul>
- *
- * @author Craig R. McClanahan
- * @version $Revision: 1.20 $ $Date: 2007/04/30 23:35:43 $
- */
-
-public class SystestClient extends Task {
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    /**
-     * The <code>Log</code> instance for this class.
-     */
-    protected static final Logger log = Logger.getLogger("Systest");
-
-
-    /**
-     * The saved golden file we will compare to the response.  Each element
-     * contains a line of text without any line delimiters.
-     */
-    protected List saveGolden = new ArrayList();
-
-
-    /**
-     * The saved headers we received in our response.  The key is the header
-     * name (converted to lower case), and the value is an ArrayList of the
-     * string value(s) received for that header.
-     */
-    protected Map saveHeaders = new HashMap();
-
-
-    /**
-     * The saved ignore lines for modifying our golden file comparison to the
-     * response.  Each element contains a line of text without any line
-     * delimiters.
-     */
-    protected List saveIgnore = new ArrayList();
-
-    /**
-     * The saved ignoreIfContains lines for modifying our golden file
-     * comparison to the response.  Each element contains a line of text
-     * without any line delimiters.  The presence of that text as a
-     * substring in a response line causes that line to be ignored.
-     */
-    protected List saveIgnoreIfContains = new ArrayList();
-
-
-    /**
-     * The response file to be compared to the golden file.  Each element
-     * contains a line of text without any line delimiters.
-     */
-    protected List saveResponse = new ArrayList();
-
-
-    // ------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Flag indicating whether we should throw an exception when a test
-     * fails.</p>
-     */
-    protected boolean failonerror = true;
-
-
-    public boolean getFailonerror() {
-        return (this.failonerror);
-    }
-
-
-    public void setFailonerror(boolean failonerror) {
-        this.failonerror = failonerror;
-    }
-
-
-    /**
-     * The server-relative request URI of the golden file for this request.
-     */
-    protected String golden = null;
-
-
-    public String getGolden() {
-        return (this.golden);
-    }
-
-
-    public void setGolden(String golden) {
-        if (golden.length() > 0) {
-            this.golden = golden;
-        }
-    }
-
-
-    /**
-     * The host name to which we will connect.
-     */
-    protected String host = "localhost";
-
-
-    public String getHost() {
-        return (this.host);
-    }
-
-
-    public void setHost(String host) {
-        this.host = host;
-    }
-
-
-    /**
-     * The server-relative request URI of the ignore file for this request.
-     */
-    protected String ignore = null;
-
-
-    public String getIgnore() {
-        return (this.ignore);
-    }
-
-
-    public void setIgnore(String ignore) {
-        if (ignore.length() > 0) {
-            this.ignore = ignore;
-        }
-    }
-
-    /**
-     * The server-relative request URI of the ignoreIfContains file for this request.
-     */
-    protected String ignoreIfContains = null;
-
-
-    public String getIgnoreIfContains() {
-        return (this.ignoreIfContains);
-    }
-
-
-    public void setIgnoreIfContains(String ignoreIfContains) {
-        if (ignoreIfContains.length() > 0) {
-            this.ignoreIfContains = ignoreIfContains;
-        }
-    }
-
-
-
-
-    /**
-     * The first line of the request data that will be included on this
-     * request.
-     */
-    protected String inContent = null;
-
-
-    public String getInContent() {
-        return (this.inContent);
-    }
-
-
-    public void setInContent(String inContent) {
-        this.inContent = inContent;
-    }
-
-
-    /**
-     * The HTTP headers to be included on the request.  Syntax is
-     * <code>{name}:{value}[##{name}:{value}] ...</code>.
-     */
-    protected String inHeaders = null;
-
-
-    public String getInHeaders() {
-        return (this.inHeaders);
-    }
-
-
-    public void setInHeaders(String inHeaders) {
-        this.inHeaders = inHeaders;
-    }
-
-
-    /**
-     * Should we join the session whose session identifier was returned
-     * on the previous request.
-     */
-    protected boolean joinSession = false;
-
-
-    public boolean getJoinSession() {
-        return (this.joinSession);
-    }
-
-
-    public void setJoinSession(boolean joinSession) {
-        this.joinSession = true;
-    }
-
-
-    /**
-     * The HTTP response message to be expected in the response.
-     */
-    protected String message = null;
-
-
-    public String getMessage() {
-        return (this.message);
-    }
-
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-
-    /**
-     * The HTTP request method that will be used.
-     */
-    protected String method = "GET";
-
-
-    public String getMethod() {
-        return (this.method);
-    }
-
-
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-
-    /**
-     * The first line of the response data content that we expect to receive.
-     */
-    protected String outContent = null;
-
-
-    public String getOutContent() {
-        return (this.outContent);
-    }
-
-
-    public void setOutContent(String outContent) {
-        if (outContent.length() > 0) {
-            this.outContent = outContent;
-        }
-    }
-
-
-    /**
-     * The HTTP headers to be checked on the response.  Syntax is
-     * <code>{name}:{value}[##{name}:{value}] ...</code>.
-     */
-    protected String outHeaders = null;
-
-
-    public String getOutHeaders() {
-        return (this.outHeaders);
-    }
-
-
-    public void setOutHeaders(String outHeaders) {
-        this.outHeaders = outHeaders;
-    }
-
-
-    /**
-     * The port number to which we will connect.
-     */
-    protected int port = 8080;
-
-
-    public int getPort() {
-        return (this.port);
-    }
-
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-
-    /**
-     * The protocol and version to include in the request, if executed as
-     * a direct socket connection.  Lack of a value here indicates that an
-     * HttpURLConnection should be used instead.
-     */
-    protected String protocol = null;
-
-
-    public String getProtocol() {
-        return (this.protocol);
-    }
-
-
-    public void setProtocol(String protocol) {
-        this.protocol = protocol;
-    }
-
-
-    /**
-     * Should we follow redirects returned by the server?
-     */
-    protected boolean redirect = false;
-
-
-    public boolean getRedirect() {
-        return (this.redirect);
-    }
-
-
-    public void setRedirect(boolean redirect) {
-        this.redirect = redirect;
-    }
-
-
-    /**
-     * The request URI to be sent to the server.  This value is required.
-     */
-    protected String request = null;
-
-
-    public String getRequest() {
-        return (this.request);
-    }
-
-
-    public void setRequest(String request) {
-        this.request = request;
-    }
-
-
-    /**
-     * The HTTP status code expected on the response.
-     */
-    protected int status = 200;
-
-
-    public int getStatus() {
-        return (this.status);
-    }
-
-
-    public void setStatus(int status) {
-        this.status = status;
-    }
-
-
-    /**
-     * Goldenfile recording.
-     */
-    protected String recordGolden;
-
-
-    public String getRecordGolden() {
-        return (this.recordGolden);
-    }
-
-
-    public void setRecordGolden(String recordGolden) {
-        if (recordGolden.length() > 0) {
-            this.recordGolden = recordGolden;
-        }
-    }
-
-
-    // ------------------------------------------------------- Static Variables
-
-
-    /**
-     * The session identifier returned by the most recent request, or
-     * <code>null</code> if the previous request did not specify a session
-     * identifier.
-     */
-    protected static String sessionId = null;
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * Execute the test that has been configured by our property settings.
-     *
-     * @throws BuildException if an exception occurs
-     */
-    public void execute() throws BuildException {
-
-        saveHeaders.clear();
-        try {
-            readGolden();
-        } catch (IOException e) {
-            System.out.println("FAIL:  readGolden(" + golden + ")");
-            e.printStackTrace(System.out);
-            if (failonerror) {
-                throw new BuildException("Failure reading golden file", e);
-            }
-        }
-        try {
-            readIgnore();
-        } catch (IOException e) {
-            System.out.println("FAIL:  readIgnore(" + ignore + ")");
-            e.printStackTrace(System.out);
-            if (failonerror) {
-                throw new BuildException("Failure reading golden file", e);
-            }
-        }
-
-        try {
-            readIgnoreIfContains();
-        } catch (IOException e) {
-            System.out.println("FAIL:  readIgnoreIfContains(" + 
-			       ignoreIfContains + ")");
-            e.printStackTrace(System.out);
-            if (failonerror) {
-                throw new BuildException("Failure reading golden file", e);
-            }
-        }
-
-        if ((protocol == null) || (protocol.length() == 0)) {
-            executeHttp();
-        } else {
-            executeSocket();
-        }
-
-    }
-
-
-    // ------------------------------------------------------ Protected Methods
-
-
-    /**
-     * Execute the test via use of an HttpURLConnection.
-     *
-     * @throws BuildException if an exception occurs
-     */
-    protected void executeHttp() throws BuildException {
-
-        // Construct a summary of the request we will be sending
-        String summary = "[" + method + " " + request + "]";
-        boolean success = true;
-        String result = null;
-        Throwable throwable = null;
-        HttpURLConnection conn = null;
-
-        try {
-
-            // Configure an HttpURLConnection for this request
-            if (log.isLoggable(Level.FINE)) {
-                log.fine("Configuring HttpURLConnection for this request");
-            }
-            URL url = new URL("http", host, port, request);
-            conn = (HttpURLConnection) url.openConnection();
-            conn.setAllowUserInteraction(false);
-            conn.setDoInput(true);
-            if (inContent != null) {
-                conn.setDoOutput(true);
-                conn.setRequestProperty("Content-Length",
-                                        "" + inContent.length());
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("INPH: Content-Length: " + inContent.length());
-                }
-            } else {
-                conn.setDoOutput(false);
-            }
-
-            // Send the session id cookie (if any)
-            if (joinSession && (sessionId != null)) {
-                conn.setRequestProperty("Cookie",
-                                        "JSESSIONID=" + sessionId);
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("INPH: Cookie: JSESSIONID=" + sessionId);
-                }
-            }
-
-            if (this.redirect && log.isLoggable(Level.FINE)) {
-                log.fine("FLAG: setInstanceFollowRedirects(" +
-                          this.redirect + ")");
-            }
-            conn.setInstanceFollowRedirects(this.redirect);
-            conn.setRequestMethod(method);
-            if (inHeaders != null) {
-                String headers = inHeaders;
-                while (headers.length() > 0) {
-                    int delimiter = headers.indexOf("##");
-                    String header = null;
-                    if (delimiter < 0) {
-                        header = headers;
-                        headers = "";
-                    } else {
-                        header = headers.substring(0, delimiter);
-                        headers = headers.substring(delimiter + 2);
-                    }
-                    int colon = header.indexOf(":");
-                    if (colon < 0)
-                        break;
-                    String name = header.substring(0, colon).trim();
-                    String value = header.substring(colon + 1).trim();
-                    conn.setRequestProperty(name, value);
-                    if (log.isLoggable(Level.FINE)) {
-                        log.fine("INPH: " + name + ": " + value);
-                    }
-                }
-            }
-
-            // Connect to the server and send our output if necessary
-            conn.connect();
-            if (inContent != null) {
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("INPD: " + inContent);
-                }
-                OutputStream os = conn.getOutputStream();
-                for (int i = 0, length = inContent.length(); i < length; i++)
-                    os.write(inContent.charAt(i));
-                os.close();
-            }
-
-            // Acquire the response data, if there is any
-            String outData = "";
-            String outText = "";
-            boolean eol = false;
-            InputStream is = conn.getInputStream();
-            int lines = 0;
-            while (true) {
-                String line = read(is);
-                if (line == null)
-                    break;
-                if (lines == 0)
-                    outData = line;
-                else
-                    outText += line + "\r\n";
-
-                if (line.trim().length() == 0 && saveResponse.isEmpty()) {
-                    lines++;
-                    continue;
-                }
-                saveResponse.add(line);
-                lines++;
-            }
-            is.close();
-
-            // Dump out the response stuff
-            if (log.isLoggable(Level.FINE)) {
-                log.fine("RESP: " + conn.getResponseCode() + " " +
-                          conn.getResponseMessage());
-            }
-            for (int i = 1; i < 1000; i++) {
-                String name = conn.getHeaderFieldKey(i);
-                String value = conn.getHeaderField(i);
-                if ((name == null) || (value == null))
-                    break;
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("HEAD: " + name + ": " + value);
-                }
-                save(name, value);
-                if ("Set-Cookie".equals(name))
-                    parseSession(value);
-            }
-            if (log.isLoggable(Level.FINE)) {
-                log.fine("DATA: " + outData);
-                if (outText.length() > 2) {
-                    log.fine("TEXT: " + outText);
-                }
-            }
-
-            // Validate the response against our criteria
-            if (success) {
-                result = validateStatus(conn.getResponseCode());
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateMessage(conn.getResponseMessage());
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateHeaders();
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateData(outText);
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateGolden();
-                if (result != null)
-                    success = false;
-            }
-
-        } catch (Throwable t) {
-            if (t instanceof FileNotFoundException) {
-                if (status == 404) {
-                    success = true;
-                    result = "Not Found";
-                    throwable = null;
-                } else {
-                    success = false;
-                    try {
-                        result = "Status=" + conn.getResponseCode() +
-                            ", Message=" + conn.getResponseMessage();
-                    } catch (IOException e) {
-                        result = e.toString();
-                    }
-                    throwable = null;
-                }
-            } else if (t instanceof ConnectException) {
-                success = false;
-                result = t.getMessage();
-                throwable = null;
-            } else {
-                success = false;
-                result = t.getMessage();
-                throwable = t;
-            }
-        }
-
-        // Log the results of executing this request
-        if (success) {
-            System.out.println("OK   " + summary);
-        } else {
-            System.out.println("FAIL " + summary + " " + result);
-            if (throwable != null)
-                throwable.printStackTrace(System.out);
-            if (failonerror) {
-                if (throwable != null) {
-                    throw new BuildException("System test failed", throwable);
-                } else {
-                    throw new BuildException("System test failed");
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * Execute the test via use of a socket with direct input/output.
-     *
-     * @throws BuildException if an exception occurs
-     */
-    protected void executeSocket() throws BuildException {
-
-        // Construct a summary of the request we will be sending
-        String command = method + " " + request + " " + protocol;
-        String summary = "[" + command + "]";
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("RQST: " + summary);
-        }
-        boolean success = true;
-        String result = null;
-        Socket socket = null;
-        OutputStream os = null;
-        PrintWriter pw = null;
-        InputStream is = null;
-        Throwable throwable = null;
-        int outStatus = 0;
-        String outMessage = null;
-
-        try {
-
-            // Open a client socket for this request
-            socket = new Socket(host, port);
-            os = socket.getOutputStream();
-            pw = new PrintWriter(os);
-            is = socket.getInputStream();
-
-            // Send the command and content length header (if any)
-            pw.print(command + "\r\n");
-            if (inContent != null) {
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("INPH: " + "Content-Length: " +
-                              inContent.length());
-                }
-                pw.print("Content-Length: " + inContent.length() + "\r\n");
-            }
-
-            // Send the session id cookie (if any)
-            if (joinSession && (sessionId != null)) {
-                pw.println("Cookie: JSESSIONID=" + sessionId);
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("INPH: Cookie: JSESSIONID=" +
-                              sessionId);
-                }
-            }
-
-            // Send the specified headers (if any)
-            if (inHeaders != null) {
-                String headers = inHeaders;
-                while (headers.length() > 0) {
-                    int delimiter = headers.indexOf("##");
-                    String header = null;
-                    if (delimiter < 0) {
-                        header = headers;
-                        headers = "";
-                    } else {
-                        header = headers.substring(0, delimiter);
-                        headers = headers.substring(delimiter + 2);
-                    }
-                    int colon = header.indexOf(":");
-                    if (colon < 0)
-                        break;
-                    String name = header.substring(0, colon).trim();
-                    String value = header.substring(colon + 1).trim();
-                    if (log.isLoggable(Level.FINE)) {
-                        log.fine("INPH: " + name + ": " + value);
-                    }
-                    pw.print(name + ": " + value + "\r\n");
-                }
-            }
-            pw.print("\r\n");
-
-            // Send our content (if any)
-            if (inContent != null) {
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("INPD: " + inContent);
-                }
-                for (int i = 0, length = inContent.length(); i < length; i++)
-                    pw.print(inContent.charAt(i));
-            }
-            pw.flush();
-
-            // Read the response status and associated message
-            String line = read(is);
-            if (line == null) {
-                outStatus = -1;
-                outMessage = "NO RESPONSE";
-            } else {
-                line = line.trim();
-                if (log.isLoggable(Level.FINE)) {
-                    log.fine("RESP: " + line);
-                }
-                int space = line.indexOf(" ");
-                if (space >= 0) {
-                    line = line.substring(space + 1).trim();
-                    space = line.indexOf(" ");
-                }
-                try {
-                    if (space < 0) {
-                        outStatus = Integer.parseInt(line);
-                        outMessage = "";
-                    } else {
-                        outStatus = Integer.parseInt(line.substring(0, space));
-                        outMessage = line.substring(space + 1).trim();
-                    }
-                } catch (NumberFormatException e) {
-                    outStatus = -1;
-                    outMessage = "NUMBER FORMAT EXCEPTION";
-                }
-            }
-            if (log.isLoggable(Level.FINE)) {
-                log.fine("STAT: " + outStatus + " MESG: " + outMessage);
-            }
-
-            // Read the response headers (if any)
-            String headerName = null;
-            String headerValue = null;
-            while (true) {
-                line = read(is);
-                if ((line == null) || (line.length() == 0))
-                    break;
-                int colon = line.indexOf(":");
-                if (colon < 0) {
-                    if (log.isLoggable(Level.FINE)) {
-                        log.fine("????: " + line);
-                    }
-                } else {
-                    headerName = line.substring(0, colon).trim();
-                    headerValue = line.substring(colon + 1).trim();
-                    if (log.isLoggable(Level.FINE)) {
-                        log.fine("HEAD: " + headerName + ": " +
-                                  headerValue);
-                    }
-                    save(headerName, headerValue);
-                    if ("Set-Cookie".equals(headerName))
-                        parseSession(headerValue);
-                }
-            }
-
-            // Acquire the response data (if any)
-            String outData = "";
-            String outText = "";
-            int lines = 0;
-            while (true) {
-                line = read(is);
-                if (line == null)
-                    break;
-                if (lines == 0)
-                    outData = line;
-                else
-                    outText += line + "\r\n";
-
-                if (line.trim().length() == 0 && saveResponse.isEmpty()) {
-                    lines++;
-                    continue;
-                }
-                saveResponse.add(line);
-                lines++;
-            }
-            is.close();
-            if (log.isLoggable(Level.FINE)) {
-                log.fine("DATA: " + outData);
-                if (outText.length() > 2) {
-                    log.fine("TEXT: " + outText);
-                }
-            }
-
-            // Validate the response against our criteria
-            if (success) {
-                result = validateStatus(outStatus);
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateMessage(message);
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateHeaders();
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateData(outText);
-                if (result != null)
-                    success = false;
-            }
-            if (success) {
-                result = validateGolden();
-                if (result != null)
-                    success = false;
-            }
-
-        } catch (Throwable t) {
-            success = false;
-            result = "Status=" + outStatus +
-                ", Message=" + outMessage;
-            throwable = null;
-        } finally {
-            if (pw != null) {
-                try {
-                    pw.close();
-                } catch (Throwable w) {
-                    ;
-                }
-            }
-            if (os != null) {
-                try {
-                    os.close();
-                } catch (Throwable w) {
-                    ;
-                }
-            }
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (Throwable w) {
-                    ;
-                }
-            }
-            if (socket != null) {
-                try {
-                    socket.close();
-                } catch (Throwable w) {
-                    ;
-                }
-            }
-        }
-
-        if (success) {
-            System.out.println("OK   " + summary);
-        } else {
-            System.out.println("FAIL " + summary + " " + result);
-            if (throwable != null)
-                throwable.printStackTrace(System.out);
-            if (failonerror) {
-                if (throwable != null) {
-                    throw new BuildException("System test failed", throwable);
-                } else {
-                    throw new BuildException("System test failed");
-                }
-            }
-        }
-
-    }
-
-
-    /**
-     * Parse the session identifier from the specified Set-Cookie value.
-     *
-     * @param value The Set-Cookie value to parse
-     */
-    protected void parseSession(String value) {
-
-        if (value == null) {
-            return;
-        }
-        int equals = value.indexOf("JSESSIONID=");
-        if (equals < 0) {
-            return;
-        }
-        value = value.substring(equals + "JSESSIONID=".length());
-        int semi = value.indexOf(";");
-        if (semi >= 0) {
-            value = value.substring(0, semi);
-        }
-        if (log.isLoggable(Level.FINE)) {
-            log.fine("S ID: " + value);
-        }
-        sessionId = value;
-
-    }
-
-
-    /**
-     * Read and return the next line from the specified input stream, with
-     * no carriage return or line feed delimiters.  If
-     * end of file is reached, return <code>null</code> instead.
-     *
-     * @param stream The input stream to read from
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    protected String read(InputStream stream) throws IOException {
-
-        StringBuffer result = new StringBuffer();
-        while (true) {
-            int b = stream.read();
-            if (b < 0) {
-                if (result.length() == 0) {
-                    return (null);
-                } else {
-                    break;
-                }
-            }
-            char c = (char) b;
-            if (c == '\r') {
-                continue;
-            } else if (c == '\n') {
-                break;
-            } else {
-                result.append(c);
-            }
-        }
-        return (result.toString());
-
-    }
-
-
-    /**
-     * Read and save the contents of the golden file for this test, if any.
-     * Otherwise, the <code>saveGolden</code> list will be empty.
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    protected void readGolden() throws IOException {
-
-        // Was a golden file specified?
-        saveGolden.clear();
-        if (golden == null) {
-            return;
-        }
-
-        // Create a connection to receive the golden file contents
-        URL url = new URL("http", host, port, golden);
-        HttpURLConnection conn =
-            (HttpURLConnection) url.openConnection();
-        conn.setAllowUserInteraction(false);
-        conn.setDoInput(true);
-        conn.setDoOutput(false);
-        conn.setFollowRedirects(true);
-        conn.setRequestMethod("GET");
-
-        // Connect to the server and retrieve the golden file
-        conn.connect();
-        InputStream is = conn.getInputStream();
-        while (true) {
-            String line = read(is);
-            if (line == null) {
-                break;
-            }
-            if (line.trim().length() == 0 && saveGolden.isEmpty()) {
-                continue;
-            }
-            saveGolden.add(line);
-        }
-        is.close();
-        conn.disconnect();
-
-    }
-
-
-    /**
-     * Read and save the contents of the ignore file for this test, if any.
-     * Otherwise, the <code>saveIgnore</code> list will be empty.
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    protected void readIgnore() throws IOException {
-
-        // Was an ignore file specified?
-        saveIgnore.clear();
-        if (ignore == null) {
-            return;
-        }
-
-        // Create a connection to receive the ignore file contents
-        URL url = new URL("http", host, port, ignore);
-        HttpURLConnection conn =
-            (HttpURLConnection) url.openConnection();
-        conn.setAllowUserInteraction(false);
-        conn.setDoInput(true);
-        conn.setDoOutput(false);
-        conn.setFollowRedirects(true);
-        conn.setRequestMethod("GET");
-
-        // Connect to the server and retrieve the ignore file
-        conn.connect();
-        InputStream is = conn.getInputStream();
-        while (true) {
-            String line = read(is);
-            if (line == null) {
-                break;
-            }
-            saveIgnore.add(line);
-        }
-        is.close();
-        conn.disconnect();
-
-    }
-
-    /**
-     * Read and save the contents of the ignoreIfContains file for this
-     * test, if any.  Otherwise, the <code>saveIgnoreIfContains</code>
-     * list will be empty.
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    protected void readIgnoreIfContains() throws IOException {
-
-        // Was an ignoreIfContains file specified?
-        saveIgnoreIfContains.clear();
-        if (ignoreIfContains == null) {
-            return;
-        }
-
-        // Create a connection to receive the ignoreIfContains file contents
-        URL url = new URL("http", host, port, ignoreIfContains);
-        HttpURLConnection conn =
-            (HttpURLConnection) url.openConnection();
-        conn.setAllowUserInteraction(false);
-        conn.setDoInput(true);
-        conn.setDoOutput(false);
-        conn.setFollowRedirects(true);
-        conn.setRequestMethod("GET");
-
-        // Connect to the server and retrieve the ignoreIfContains file
-        conn.connect();
-        InputStream is = conn.getInputStream();
-        while (true) {
-            String line = read(is);
-            if (line == null) {
-                break;
-            }
-            saveIgnoreIfContains.add(line);
-        }
-        is.close();
-        conn.disconnect();
-
-    }
-
-
-    /**
-     * Save the specified header name and value in our collection.
-     *
-     * @param name  Header name to save
-     * @param value Header value to save
-     */
-    protected void save(String name, String value) {
-
-        String key = name.toLowerCase();
-        ArrayList list = (ArrayList) saveHeaders.get(key);
-        if (list == null) {
-            list = new ArrayList();
-            saveHeaders.put(key, list);
-        }
-        list.add(value);
-
-    }
-
-
-    /**
-     * Validate the output data against what we expected.  Return
-     * <code>null</code> for no problems, or an error message.
-     *
-     * @param data The output data to be tested
-     */
-    protected String validateData(String data) {
-        data = data.trim();
-        if (outContent == null) {
-            return (null);
-        } else if (data.startsWith(outContent)) {
-            return (null);
-        } else {
-            return ("Expected data '" + outContent + "', got data '" +
-                data + "'");
-        }
-
-    }
-
-
-    protected String stripJsessionidFromLine(String line) {
-        if (null == line) {
-            return line;
-        }
-        int
-            start = 0,
-            end = 0;
-        String result = line;
-
-        if (-1 == (start = line.indexOf(";jsessionid="))) {
-            return result;
-        }
-
-        if (-1 == (end = line.indexOf("?", start))) {
-            if (-1 == (end = line.indexOf("\"", start))) {
-                throw new IllegalStateException();
-            }
-        }
-        result = stripJsessionidFromLine(line.substring(0, start) +
-                                         line.substring(end));
-        return result;
-    }
-
-
-    /**
-     * Validate the response against the golden file (if any), skipping the
-     * comparison on any golden file line that is also in the ignore file
-     * (if any).  Return <code>null</code> for no problems, or an error
-     * message.
-     */
-    protected String validateGolden() {
-
-        if (golden == null) {
-            return (null);
-        }
-        boolean ok = true;
-        if (saveGolden.size() != saveResponse.size()) {
-            ok = false;
-        }
-        if (ok) {
-            for (int i = 0, size = saveGolden.size(); i < size; i++) {
-                String golden = (String) saveGolden.get(i);
-                String response = (String) saveResponse.get(i);
-                if (!validateIgnore(golden) && 
-		    !validateIgnoreIfContains(golden) && 
-		    !golden.equals(response)) {
-                    response = stripJsessionidFromLine(response);
-                    golden = stripJsessionidFromLine(golden);
-                    if (!golden.trim().equals(response.trim())) {
-                        ok = false;
-                        break;
-                    }
-                }
-            }
-        }
-        if (ok) {
-            return (null);
-        }
-        System.out.println("EXPECTED: ======================================");
-        for (int i = 0, size = saveGolden.size(); i < size; i++) {
-            System.out.println((String) saveGolden.get(i));
-        }
-        System.out.println("================================================");
-        if (saveIgnore.size() >= 1) {
-            System.out.println(
-                "IGNORED: =======================================");
-            for (int i = 0, size = saveIgnore.size(); i < size; i++) {
-                System.out.println((String) saveIgnore.get(i));
-            }
-            System.out.println(
-                "================================================");
-        }
-        System.out.println("RECEIVED: ======================================");
-        for (int i = 0, size = saveResponse.size(); i < size; i++) {
-            System.out.println((String) saveResponse.get(i));
-        }
-        System.out.println("================================================");
-        
-        // write the goldenfile if the GF size from the server was 0
-        // and the goldenfile doesn't already exist on the local filesystem.
-        System.out.println("RECORD GOLDEN: " + recordGolden);
-        if (recordGolden != null) {
-            File gf = new File(recordGolden);
-            if (!gf.exists() || gf.length() == 0) {
-                System.out.println(
-                    "[INFO] RECORDING GOLDENFILE: " + recordGolden);
-                // write the goldenfile using the encoding specified in the response.
-                // if there is no encoding available, default to ISO-8859-1
-                String encoding = "ISO-8859-1";
-                if (saveHeaders.containsKey("content-type")) {
-                    List vals = (List) saveHeaders.get("content-type");
-                    if (vals != null) {
-                        String val = (String) vals.get(0);
-                        int charIdx = val.indexOf('=');
-                        if (charIdx > -1) {
-                            encoding = val.substring(charIdx + 1).trim();
-                        }
-                    }
-                }
-                OutputStreamWriter out = null;
-                try {
-                    out = new OutputStreamWriter(new FileOutputStream(gf),
-                                                 encoding);
-                    for (int i = 0, size = saveResponse.size(); i < size; i++) {
-                        out.write((String) saveResponse.get(i));
-                        out.write('\n');
-                    }
-                    out.flush();
-                } catch (Throwable t) {
-                    System.out.println(
-                        "[WARNING] Unable to write goldenfile: " +
-                        t.toString());
-                } finally {
-                    try {
-                        if (out != null) {
-                            out.close();
-                        }
-                    } catch (IOException ioe) {
-                        ; // do nothing
-                    }
-                }
-            }
-        }
-        return ("Failed Golden File Comparison");
-
-    }
-
-
-    /**
-     * Validate the saved headers against the <code>outHeaders</code>
-     * property, and return an error message if there is anything missing.
-     * If all of the expected headers are present, return <code>null</code>.
-     */
-    protected String validateHeaders() {
-
-        // Do we have any headers to check for?
-        if (outHeaders == null) {
-            return (null);
-        }
-
-        // Check each specified name:value combination
-        String headers = outHeaders;
-        while (headers.length() > 0) {
-            // Parse the next name:value combination
-            int delimiter = headers.indexOf("##");
-            String header = null;
-            if (delimiter < 0) {
-                header = headers;
-                headers = "";
-            } else {
-                header = headers.substring(0, delimiter);
-                headers = headers.substring(delimiter + 2);
-            }
-            int colon = header.indexOf(":");
-            String name = header.substring(0, colon).trim();
-            String value = header.substring(colon + 1).trim();
-            // Check for the occurrence of this header
-            ArrayList list = (ArrayList) saveHeaders.get(name.toLowerCase());
-            if (list == null) {
-                return ("Missing header name '" + name + "'");
-            }
-            boolean found = false;
-            for (int i = 0, size = list.size(); i < size; i++) {
-                if (value.equals((String) list.get(i))) {
-                    found = true;
-                    break;
-                }
-            }
-            if (!found) {
-                return ("Missing header name '" + name + "' with value '" +
-                    value + "'");
-            }
-        }
-
-        // Everything was found successfully
-        return (null);
-
-    }
-
-
-    /**
-     * Return <code>true</code> if we should ignore this golden file line
-     * because it is also in the ignore file.
-     *
-     * @param line Line from the golden file to be checked
-     */
-    protected boolean validateIgnore(String line) {
-
-        for (int i = 0, size = saveIgnore.size(); i < size; i++) {
-            String ignore = (String) saveIgnore.get(i);
-            if (ignore.equals(line)) {
-                return (true);
-            }
-        }
-        return (false);
-
-    }
-
-    /**
-     * Return <code>true</code> if we should ignore this golden file line
-     * because it is also in the ignore file.
-     *
-     * @param line Line from the golden file to be checked
-     */
-    protected boolean validateIgnoreIfContains(String line) {
-
-        for (int i = 0, size = saveIgnoreIfContains.size(); i < size; i++) {
-            String ignoreIfContains = (String) saveIgnoreIfContains.get(i);
-            if (-1 != line.indexOf(ignoreIfContains)) {
-                return (true);
-            }
-        }
-        return (false);
-
-    }
-
-    /**
-     * Validate the returned response message against what we expected.
-     * Return <code>null</code> for no problems, or an error message.
-     *
-     * @param message The returned response message
-     */
-    protected String validateMessage(String message) {
-
-        if (this.message == null) {
-            return (null);
-        } else if (this.message.equals(message)) {
-            return (null);
-        } else {
-            return ("Expected message='" + this.message + "', got message='" +
-                message + "'");
-        }
-
-    }
-
-
-    /**
-     * Validate the returned status code against what we expected.  Return
-     * <code>null</code> for no problems, or an error message.
-     *
-     * @param status The returned status code
-     */
-    protected String validateStatus(int status) {
-
-        if (this.status == 0) {
-            return (null);
-        }
-        if (this.status == status) {
-            return (null);
-        } else {
-            return ("Expected status=" + this.status + ", got status=" +
-                status);
-        }
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/el/ELTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/el/ELTestCase.java
deleted file mode 100644
index 553a899..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/el/ELTestCase.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.el;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlInput;
-
-/**
- * Validate new EL features such as the component implicit object
- */
-public class ELTestCase extends AbstractTestCase {
-
-    public ELTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ELTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testComponentImplicitObject() throws Exception {
-        HtmlPage page = getPage("/faces/componentImplicitObject.jsp");
-        List<HtmlSpan> outputs = new ArrayList<HtmlSpan>(2);
-        getAllElementsOfGivenClass(page, outputs, HtmlSpan.class);
-        assertTrue(outputs.size() ==2);
-        HtmlSpan s = outputs.get(0);
-        assertTrue("ot".equals(s.getId()));
-        assertTrue("ot".equals(s.asText()));
-        s = outputs.get(1);
-        assertTrue(s.getId().contains("facetOT"));
-        assertTrue("facetOT".equals(s.asText()));
-        List<HtmlInput> inputs = new ArrayList<HtmlInput>(2);
-        getAllElementsOfGivenClass(page, inputs, HtmlInput.class);
-        HtmlInput i = inputs.get(2);
-        assertTrue(i.getId().contains("0:it"));
-        assertTrue("it".equals(i.asText()));
-        i = inputs.get(3);
-        assertTrue(i.getId().contains("1:it"));
-        assertTrue("it".equals(i.asText()));
-
-    }
-
-
-    public void testProgrammaticExpressionFunctionEval() throws Exception {
-
-        HtmlPage page = getPage("/faces/elfunction.xhtml");
-        assertTrue(page.asText().contains("PASSED"));
-        
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/flash/FlashMessagesBean.java b/jsf-ri/systest/src/com/sun/faces/systest/flash/FlashMessagesBean.java
deleted file mode 100644
index 728ac07..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/flash/FlashMessagesBean.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.flash;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.ManagedProperty;
-import javax.faces.bean.RequestScoped;
-import javax.faces.context.FacesContext;
-
- at ManagedBean
- at RequestScoped
-public class FlashMessagesBean {
-
-    @ManagedProperty(value="#{facesContext}")
-    protected FacesContext facesContext;
-
-    public FacesContext getFacesContext() {
-        return facesContext;
-    }
-
-    public void setFacesContext(FacesContext facesContext) {
-        this.facesContext = facesContext;
-    }
-
-
-    protected String value;
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
-                "Mesage 1", "survives redirect");
-        getFacesContext().addMessage(null, message);
-        message = new FacesMessage(FacesMessage.SEVERITY_INFO,
-                "Mesage 2", "survives redirect");
-        getFacesContext().addMessage(null, message);
-        getFacesContext().getExternalContext().getFlash().setKeepMessages(true);
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/implicitnav/ImplicitNavigationBean.java b/jsf-ri/systest/src/com/sun/faces/systest/implicitnav/ImplicitNavigationBean.java
deleted file mode 100644
index daddd98..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/implicitnav/ImplicitNavigationBean.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.implicitnav;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import javax.faces.application.ConfigurableNavigationHandler;
-import javax.faces.application.NavigationCase;
-import javax.faces.context.FacesContext;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-
- at ManagedBean
- at RequestScoped
-public class ImplicitNavigationBean {
-    
-    public String getCurrentActionUrl() throws MalformedURLException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        ConfigurableNavigationHandler navHandler = (ConfigurableNavigationHandler)
-                context.getApplication().getNavigationHandler();
-        NavigationCase navCase = navHandler.getNavigationCase(context, 
-                null, context.getViewRoot().getViewId());
-        URL myUrl = navCase.getActionURL(context);
-        
-        return myUrl.toExternalForm();
-    }
-
-    public String getCurrentResourceUrl() throws MalformedURLException {
-        FacesContext context = FacesContext.getCurrentInstance();
-        ConfigurableNavigationHandler navHandler = (ConfigurableNavigationHandler)
-                context.getApplication().getNavigationHandler();
-        NavigationCase navCase = navHandler.getNavigationCase(context, 
-                null, context.getViewRoot().getViewId());
-        URL myUrl = navCase.getResourceURL(context);
-        
-        return myUrl.toExternalForm();
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/implicitnav/ImplicitNavigationTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/implicitnav/ImplicitNavigationTestCase.java
deleted file mode 100644
index 9615ac1..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/implicitnav/ImplicitNavigationTestCase.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.implicitnav;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
-import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-
-public class ImplicitNavigationTestCase extends AbstractTestCase {
-
-
-    public ImplicitNavigationTestCase(String name) {
-           super(name);
-       }
-
-       /**
-        * Set up instance variables required by this test case.
-        */
-       public void setUp() throws Exception {
-           super.setUp();
-       }
-
-
-       /**
-        * Return the tests included in this test suite.
-        */
-       public static Test suite() {
-           return (new TestSuite(ImplicitNavigationTestCase.class));
-       }
-
-
-       /**
-        * Tear down instance variables required by this test case.
-        */
-       public void tearDown() {
-           super.tearDown();
-       }
-
-
-       // ------------------------------------------------------------ Test Methods
-
-       public void testImplicitNavigation() throws Exception {
-
-           HtmlPage page = getPage("/faces/implicitnav/page01.xhtml");
-
-           // Assert that the navCase getters work correctly
-           String text = page.asText();
-           assertTrue(-1 != text.indexOf("/jsf-systest/faces/implicitnav/page01.xhtml"));
-           assertTrue(-1 != text.indexOf("/jsf-systest/implicitnav/page01.xhtml"));
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("[page01]"));
-
-           // click the page02 button
-           HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("page02");
-           page = button.click();
-           text = page.asText();
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("[page02]"));
-
-           // click the page01 button to go back to page01
-           button = (HtmlSubmitInput) page.getElementById("page01");
-           page = button.click();
-           text = page.asText();
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("[page01]"));
-
-           // go back again to page02
-           button = (HtmlSubmitInput) page.getElementById("page02");
-           page = button.click();
-           text = page.asText();
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("[page02]"));
-
-           // go forward to page03
-           button = (HtmlSubmitInput) page.getElementById("page03");
-           page = button.click();
-           text = page.asText();
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("[page03]"));
-
-           // click the page02 button to go back to page02
-           button = (HtmlSubmitInput) page.getElementById("page02");
-           page = button.click();
-           text = page.asText();
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("[page02]"));
-
-           // go forward to page03
-           button = (HtmlSubmitInput) page.getElementById("page03");
-           page = button.click();
-           text = page.asText();
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("[page03]"));
-
-           // go forward to page04.  This uses a redirect
-           button = (HtmlSubmitInput) page.getElementById("page04");
-           client.setRedirectEnabled(false);
-           boolean exceptionThrown = false;
-           try {
-               page = button.click();
-           } catch (FailingHttpStatusCodeException fhsce) {
-               exceptionThrown = true;
-               assertEquals(302, fhsce.getStatusCode());
-           }
-           assertTrue(exceptionThrown);
-           client.setRedirectEnabled(true);
-           page = button.click();
-           text = page.asText();
-           // Make sure we're on the expected page
-           assertTrue(-1 != text.indexOf("This is the last page."));
-
-
-
-
-       }
-
-
-       public void testImplicitNavigationWithredirect() throws Exception {
-
-           HtmlPage page = getPage("/faces/implicitnav/implicitNavRedirect.xhtml");
-           String text;
-           final String SEARCH_TEXT = "SEARCH_TEXT";
-
-           // case 1, h:button, make sure the input value is lost.
-           HtmlTextInput input = (HtmlTextInput) page.getElementById("input");
-           input.setValueAttribute(SEARCH_TEXT);
-           HtmlButtonInput buttonButton = (HtmlButtonInput) page.getElementById("httpGet");
-
-           page = buttonButton.click();
-           text = page.asText();;
-           assertTrue(!text.contains(SEARCH_TEXT));
-
-           // case 2 h:commandButton that does redirect.  Make sure a redirect is
-           // performed and the value is lost.
-           client.setRedirectEnabled(false);
-           boolean exceptionThrown = false;
-           page = getPage("/faces/implicitnav/implicitNavRedirect.xhtml");
-           input = (HtmlTextInput) page.getElementById("input");
-           input.setValueAttribute(SEARCH_TEXT);
-           HtmlSubmitInput submitButton = (HtmlSubmitInput) page.getElementById("httpPostRedirect");
-           try {
-               page = submitButton.click();
-           } catch (FailingHttpStatusCodeException e) {
-               assertEquals(302, e.getStatusCode());
-               exceptionThrown = true;
-           }
-           assertTrue(exceptionThrown);
-           client.setRedirectEnabled(true);
-           page = submitButton.click();
-           text = page.asText();;
-           assertTrue(!text.contains(SEARCH_TEXT));
-
-           // case 3 h:commandButton with empty query string
-           page = getPage("/faces/implicitnav/implicitNavRedirect.xhtml");
-           input = (HtmlTextInput) page.getElementById("input");
-           input.setValueAttribute(SEARCH_TEXT);
-           submitButton = (HtmlSubmitInput) page.getElementById("httpPostInvalidQueryString");
-           page = submitButton.click();
-           text = page.asText();
-           assertTrue(text.contains(SEARCH_TEXT));
-           assertTrue(text.contains("Invalid query string in outcome \'implicitNavRedirect02?\'"));
-
-           // case 4: h:commandButton, regular post.
-           page = getPage("/faces/implicitnav/implicitNavRedirect.xhtml");
-           input = (HtmlTextInput) page.getElementById("input");
-           input.setValueAttribute(SEARCH_TEXT);
-           submitButton = (HtmlSubmitInput) page.getElementById("httpPost");
-           page = submitButton.click();
-           text = page.asText();;
-           assertTrue(text.contains(SEARCH_TEXT));
-
-       }
-
-       public void testImplicitNavEmptyString() throws Exception {
-           HtmlPage page = getPage("/faces/implicitnav/implicitNavEmptyString.xhtml");
-           HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("button");
-           page = button.click();
-           assertTrue(page.asText().contains("Implicit Navigation with empty string action"));
-
-
-       }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ApplicationFactoryWrapper.java b/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ApplicationFactoryWrapper.java
deleted file mode 100644
index 2ed39b1..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ApplicationFactoryWrapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.lifecycle;
-
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.Application;
-
-public class ApplicationFactoryWrapper extends ApplicationFactory {
-    
-    private ApplicationFactory oldFactory = null;
-    
-    public ApplicationFactoryWrapper(ApplicationFactory yourOldFactory) {
-	oldFactory = yourOldFactory;
-    }
-    
-    public Application getApplication() {
-	return oldFactory.getApplication();
-    }
-    
-    public void setApplication(Application application) {
-	oldFactory.setApplication(application);
-    }
-
-    public String toString() {
-	return "ApplicationFactoryWrapper";
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/FacesContextFactoryWrapper.java b/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/FacesContextFactoryWrapper.java
deleted file mode 100644
index 5d6f460..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/FacesContextFactoryWrapper.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.lifecycle;
-
-import javax.faces.context.FacesContextFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.FacesException;
-
-public class FacesContextFactoryWrapper extends FacesContextFactory {
-    
-    private FacesContextFactory oldFactory = null;
-    
-    public FacesContextFactoryWrapper(FacesContextFactory yourOldFactory) {
-	oldFactory = yourOldFactory;
-    }
-    
-    public FacesContext getFacesContext(Object context, Object request,
-					Object response, 
-					Lifecycle lifecycle) throws FacesException {
-	return oldFactory.getFacesContext(context, request, response, 
-					  lifecycle);
-    }
-
-    public String toString() {
-	return "FacesContextFactoryWrapper";
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/LifecycleFactoryWrapper.java b/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/LifecycleFactoryWrapper.java
deleted file mode 100644
index 89fd4d7..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/LifecycleFactoryWrapper.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.lifecycle;
-
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import javax.faces.FacesException;
-import java.util.Iterator;
-
-public class LifecycleFactoryWrapper extends LifecycleFactory {
-    
-    private LifecycleFactory oldFactory = null;
-    
-    public LifecycleFactoryWrapper(LifecycleFactory yourOldFactory) {
-	oldFactory = yourOldFactory;
-    }
-    
-    public void addLifecycle(String lifecycleId,
-			     Lifecycle lifecycle) {
-	oldFactory.addLifecycle(lifecycleId, lifecycle);
-    }
-
-    public Lifecycle getLifecycle(String lifecycleId) {
-	return oldFactory.getLifecycle(lifecycleId);
-    }
-
-    public Iterator getLifecycleIds() {
-	return oldFactory.getLifecycleIds();
-    }
-
-    public String toString() {
-	return "LifecycleFactoryWrapper";
-    }
-
-
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ManagedBeanLifecycleAnnotationTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ManagedBeanLifecycleAnnotationTestCase.java
deleted file mode 100644
index 3ae8ef0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ManagedBeanLifecycleAnnotationTestCase.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.lifecycle;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Test Case for JSP Interoperability.</p>
- */
-
-public class ManagedBeanLifecycleAnnotationTestCase extends AbstractTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public ManagedBeanLifecycleAnnotationTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ManagedBeanLifecycleAnnotationTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testRequestLifecycle() throws Exception {
-        String text = null;
-        HtmlPage page = getPage("/faces/managed08.jsp");
-        HtmlSubmitInput button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        Pattern pattern = null;
-        assertTrue(-1 != text.indexOf("requestBean PostConstruct: true"));
-        assertTrue(-1 != text.indexOf("requestBean PreDestroy: false"));
-        assertTrue(-1 != text.indexOf("sessionBean PostConstruct: true"));
-        assertTrue(-1 != text.indexOf("sessionBean PreDestroy: false"));
-        assertTrue(-1 != text.indexOf("applicationBean PostConstruct: true"));
-        assertTrue(-1 != text.indexOf("applicationBean PreDestroy: false"));
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*",
-                text));
-        
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:reload");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*",
-                text));
-        
-
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:removeSessionBean");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: sessionBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*bean: sessionBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:removeSessionBean2");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: sessionBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*bean: sessionBean postConstructCalled: true.*",
-                text));
-        
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:removeApplicationBean");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: applicationBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*bean: applicationBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:removeApplicationBean2");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: applicationBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*bean: applicationBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:invalidateSession");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: sessionBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*bean: sessionBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput) 
-            page.getHtmlElementById("form:clearSessionMapTwice");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: sessionBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*bean: sessionBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:replaceRequestBean");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*-----------------.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:replaceRequestBean2");
-        button.click();
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:removeSessionBean");
-        page = (HtmlPage) button.click();
-         button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:replaceSessionBean");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: sessionBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:removeSessionBean");
-        page = (HtmlPage) button.click();
-         button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:replaceSessionBean2");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:removeApplicationBean");
-        page = (HtmlPage) button.click();
-         button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:replaceApplicationBean");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*bean: applicationBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*",
-                text));
-
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:removeApplicationBean");
-        page = (HtmlPage) button.click();
-         button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:clearStatusMessage");
-        page = (HtmlPage) button.click();
-        button = (HtmlSubmitInput)
-            page.getHtmlElementById("form:replaceApplicationBean2");
-        page = (HtmlPage) button.click();
-        text = page.asText();
-        assertTrue(Pattern.matches("(?s).*-----------------.*bean: requestBean postConstructCalled: true.*bean: requestBean preDestroyCalled: true.*-----------------.*bean: requestBean postConstructCalled: true.*",
-                text));
-        
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ReloadPhaseListenerImpl.java b/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ReloadPhaseListenerImpl.java
deleted file mode 100644
index 95132f4..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/ReloadPhaseListenerImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.lifecycle;
-
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-
-
-/**
- * <B>ReloadPhaseListener</B> is a class that looks for a Restore or Render
- * phase. If it finds that a phase has been entered other than a Restore or
- * Render, it sets a system property to false.
- *
- * This listener is used to determine whether a client refresh with no
- * request parameters or save state has occurred.
- *
- */
-public class ReloadPhaseListenerImpl implements PhaseListener {
-
-    PhaseId phaseId = null;
-    String pageRefresh;
-
-
-    public ReloadPhaseListenerImpl(PhaseId newPhaseId) {
-        phaseId = newPhaseId;
-        pageRefresh = "true";
-    }
-
-
-    public void afterPhase(PhaseEvent event) {
-        System.setProperty("PageRefreshPhases", pageRefresh);
-    }
-
-
-    public void beforePhase(PhaseEvent event) {
-        if (event.getPhaseId() == PhaseId.RESTORE_VIEW) {
-            //reset System property to true when starting phase processing
-            pageRefresh = "true";
-            return;
-        } else if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
-            //no other phases should be called
-            return;
-        }
-
-        //phase other than Restore or Render is called
-        pageRefresh = "false";
-    }
-
-
-    public PhaseId getPhaseId() {
-        return phaseId;
-    }
-
-} // end of class ReloadPhaseListenerImpl
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/RenderKitFactoryWrapper.java b/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/RenderKitFactoryWrapper.java
deleted file mode 100644
index ecf2795..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/lifecycle/RenderKitFactoryWrapper.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.lifecycle;
-
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.FacesException;
-import java.util.Iterator;
-
-public class RenderKitFactoryWrapper extends RenderKitFactory {
-    
-    private RenderKitFactory oldFactory = null;
-    
-    public RenderKitFactoryWrapper(RenderKitFactory yourOldFactory) {
-	oldFactory = yourOldFactory;
-    }
-    
-    public void addRenderKit(String renderKitId,
-			     RenderKit renderKit) {
-	oldFactory.addRenderKit(renderKitId, renderKit);
-    }
-
-    public RenderKit getRenderKit(FacesContext context, String renderKitId) {
-	return oldFactory.getRenderKit(context, renderKitId);
-    }
-
-    public Iterator getRenderKitIds() {
-	return oldFactory.getRenderKitIds();
-    }
-
-    public String toString() {
-	return "RenderKitFactoryWrapper";
-    }
-
-
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/AbstractTestBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/AbstractTestBean.java
deleted file mode 100644
index 5ad9471..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/AbstractTestBean.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-
-/**
- * <p>Test JavaBean for managed object creation facility.</p>
- */
-
-public abstract class AbstractTestBean {
-
-    private String stringProperty = "String Property";
-
-
-    public String getStringProperty() {
-        return this.stringProperty;
-    }
-
-
-    public void setStringProperty(String stringProperty) {
-        this.stringProperty = stringProperty;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/AddMessageBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/AddMessageBean.java
deleted file mode 100644
index 834e30f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/AddMessageBean.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.bean.ManagedBean;
-import javax.faces.context.FacesContext;
-
- at ManagedBean
-public class AddMessageBean {
-
-    public String addMessage() {
-        FacesContext.getCurrentInstance()
-              .addMessage(null, new FacesMessage("This is a global message"));
-        return "messagePage?faces-redirect=true";
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/BookBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/BookBean.java
deleted file mode 100644
index 9b79b3b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/BookBean.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.ValidatorException;
-
-
-public class BookBean {
-
-    private String title;
-    private String author;
-    private String isbn;
-    private double price;
-    private int quantity;
-
-    public BookBean(String title, String author, String isbn, double price) {
-        this.title = title;
-        this.author = author;
-        this.isbn = isbn;
-        this.price = price;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public String getAuthor() {
-        return author;
-    }
-
-    public String getFirstName() {
-        return author;
-    }
-
-    public String getSurname() {
-        return author;
-    }
-
-    public String getIsbn() {
-        return isbn;
-    }
-
-    public double getPrice() {
-        return price;
-    }
-
-    public int getQuantity() {
-        return quantity;
-    }
-
-    public void setQuantity(int quantity) {
-        this.quantity = quantity;
-    }
-
-    public void validateQuantity(FacesContext context,
-                                 UIComponent component,
-                                 Object value) {        
-        int q = (Integer) value;
-        if (q < 0) {
-            throw new ValidatorException(
-                new FacesMessage("Quantity must be zero or greater."));                   
-        }
-    }
-}
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/BooksBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/BooksBean.java
deleted file mode 100644
index f3d3b74..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/BooksBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-
-public class BooksBean {
-
-    private List<BookBean> books;    
-
-
-    public BooksBean() {
-        books = new ArrayList<BookBean>();
-        books.add(new BookBean("Harry Potter and the Sorcerer's Stone",
-                                "J.K. Rowling",
-                                "10009001",
-                                12.99));
-        books.add(new BookBean("Dune",
-                                "Frank Herbert",
-                                "98111012",
-                                15.99));
-        books.add(new BookBean("The Hitchhiker's Guide to the Galaxy",
-                                "Douglas Adams",
-                                "11001199",
-                                13.99));
-    }    
-
-
-    public List<BookBean> getBooks() {
-        return books;
-    }    
-    
-    public double getTotalCost() {
-        double cost = 0.0;
-        for (Iterator<BookBean> i = books.iterator(); i.hasNext(); ) {
-            BookBean book = i.next();
-            cost += (book.getQuantity() * book.getPrice());     
-        }
-        
-        return cost;
-    }      
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ConverterBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ConverterBean.java
deleted file mode 100644
index a8cdb82..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ConverterBean.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import com.sun.faces.systest.TestConverter01;
-
-import javax.faces.event.AbortProcessingException;
-import javax.faces.convert.Converter;
-
-
-public class ConverterBean extends Object {
-
-    public ConverterBean() {
-    }
-
-    private Converter converter = null;
-    public Converter getConverter() {
-        if (converter == null) {
-            return new TestConverter01();
-        }
-        return converter;
-    }
-    public void setConverter(Converter converter) {
-        this.converter = converter;
-    }
-
-    private Converter dateTimeConverter = null;
-    public Converter getDateTimeConverter() {
-        if (dateTimeConverter == null) {
-            return new javax.faces.convert.DateTimeConverter();
-        }
-        return dateTimeConverter;
-    }
-    public void setDateTimeConverter(Converter dateTimeConverter) {
-        this.dateTimeConverter = dateTimeConverter;
-    }
-
-    private Converter doubleConverter = null;
-    public Converter getDoubleConverter() {
-        if (doubleConverter == null) {
-            return new javax.faces.convert.DoubleConverter();
-        }
-        return doubleConverter;
-    }
-    public void setDoubleConverter(Converter doubleConverter) {
-        this.doubleConverter = doubleConverter;
-    }
-
-    private Converter numberConverter = null;
-    public Converter getNumberConverter() {
-        if (numberConverter == null) {
-            return new javax.faces.convert.NumberConverter();
-        }
-        return numberConverter;
-    }
-    public void setNumberConverter(Converter numberConverter) {
-        this.numberConverter = numberConverter;
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/CustomDatatableBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/CustomDatatableBean.java
deleted file mode 100644
index 2357622..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/CustomDatatableBean.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import javax.faces.component.html.HtmlDataTable;
-import javax.faces.component.html.HtmlCommandLink;
-import javax.faces.component.html.HtmlColumn;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.application.Application;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.el.MethodExpression;
-import javax.el.ELContext;
-
-
-public class CustomDatatableBean {
-
-    private HtmlDataTable table;
-
-        public List<String> getList() {
-            List<String> result = new ArrayList<String>();
-            result.add("abc");
-            result.add("def");
-            result.add("ghi");
-            return result;
-        }
-
-        public UIComponent getTable() {
-            if (table == null) {
-                FacesContext context = FacesContext.getCurrentInstance();
-                Application app = context.getApplication();
-                ExpressionFactory factory = app.getExpressionFactory();
-                table = new HtmlDataTable();
-                table.setVar("p");
-                ELContext elContext = context.getELContext();
-                table.setValueExpression("value", factory.createValueExpression(
-                        elContext, "#{customDataTable.list}", Object.class));
-                HtmlColumn c1 = new HtmlColumn();
-                HtmlCommandLink l = new HtmlCommandLink();
-                MethodExpression expr = factory.createMethodExpression(elContext,
-                        "ok", String.class, new Class<?>[] {});
-                l.setActionExpression(expr);
-                ValueExpression source = factory.createValueExpression(elContext,
-                        "#{p}", String.class);
-                l.setValueExpression("value", source);
-                c1.getChildren().add(l);
-                table.getChildren().add(c1);
-            }
-            return table;
-        }
-
-        public void setTable(UIComponent table) {
-            this.table = (HtmlDataTable) table;
-        }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/EnumBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/EnumBean.java
deleted file mode 100644
index 0d0fb13..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/EnumBean.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class EnumBean {
-
-    public enum Simple {
-        Value1,
-        Value2,
-        Value3,
-        Value4
-    }
-
-    private Simple selected;
-    private Simple selected2;
-    private Simple selected3;
-    private Simple[] mSelected;
-    public List<Simple> lSelected;
-
-    public EnumBean() {
-        selected = Simple.Value2;
-        selected2 = Simple.Value3;
-        selected3 = Simple.Value4;
-        mSelected = new Simple[] { Simple.Value1, Simple.Value3 };
-        lSelected = new ArrayList<Simple>(4);
-        lSelected.add(Simple.Value2);
-        lSelected.add(Simple.Value4);
-    }   
-
-    public Simple getSelected() {
-        return selected;
-    }
-
-    public void setSelected(Simple selected) {
-        this.selected = selected;
-    }
-    
-     public Simple getSelected2() {
-        return selected2;
-    }
-
-    public void setSelected2(Simple selected2) {
-        this.selected2 = selected2;
-    }
-
-
-    public Simple getSelected3() {
-        return selected3;
-    }
-
-    public void setSelected3(Simple selected3) {
-        this.selected3 = selected3;
-    }
-
-    public Simple[] getSelectedArray() {
-        return mSelected;
-    }
-    
-    public void setSelectedArray(Simple[] mSelected) {
-        this.mSelected = mSelected;
-    }
-    
-    public List getSelectedList() {
-        return lSelected;
-    }
-    
-    public void setSelectedList(List<Simple> lSelected) {
-        this.lSelected = lSelected;
-    }
-
-
-} // END EnumBean
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/EventTagBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/EventTagBean.java
deleted file mode 100644
index 2762485..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/EventTagBean.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.ContextCallback;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIOutput;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ComponentSystemEvent;
-
-/**
- *
- */
-public class EventTagBean {
-    
-    
-    public void beforeViewRender(ComponentSystemEvent event) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        
-        context.getExternalContext().getRequestMap().put("preRenderComponentMessage", 
-                event.getComponent().getClass() + " pre-render");
-    }
-
-
-    public void beforeEncode(ComponentSystemEvent event) {
-        UIOutput output = (UIOutput)event.getComponent();
-        output.setValue("The '" + event.getClass().getName() + "' event fired!");
-    }
-    
-    public void beforeEncodeNoArg() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        UIOutput output = (UIOutput) context.getViewRoot().findComponent("form:noArgTest");
-//        UIOutput output = (UIOutput)event.getComponent();
-        output.setValue("The no-arg event fired!");
-    }
-
-    public void postValidate(ComponentSystemEvent event) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        final UIForm form = (UIForm) event.getComponent();
-        final String [] clientIds = { "lesser", "greater" };
-        final int [] values = new int[2];
-        final boolean [] hasValues = new boolean[2];
-        final List<FacesMessage> toAdd = new ArrayList<FacesMessage>();
-        
-        // Traverse the form and suck out the individual values
-        for (int i = 0; i < clientIds.length; i++) {
-            final int finalI = i;
-            form.invokeOnComponent(context, clientIds[i], new ContextCallback() {
-
-                public void invokeContextCallback(FacesContext context, UIComponent target) {
-                    Object value = ((ValueHolder) target).getValue();
-                    try {
-                        if (null != value) {
-                            values[finalI] = Integer.parseInt(value.toString());
-                            hasValues[finalI] = true;
-                        } else {
-                            hasValues[finalI] = false;
-                            FacesMessage msg = new FacesMessage(clientIds[finalI] +
-                                    " must have a value");
-                            toAdd.add(msg);
-                        }
-                    } catch (NumberFormatException nfe) {
-                        FacesMessage msg = new FacesMessage("unable to parse the number for field " + 
-                                clientIds[finalI]);
-                        toAdd.add(msg);
-                    }
-
-                }
-            });
-        }
-
-        // case one, ensure both fields have a value
-        if (!hasValues[0] || !hasValues[1]) {
-            FacesMessage msg = new FacesMessage("both fields must have a value");
-            toAdd.add(msg);
-        } else {
-            // case two, ensure lesser is lesser than greater
-            if (!(values[0] < values[1])) {
-                FacesMessage msg = new FacesMessage("lesser must be lesser than greater");
-                toAdd.add(msg);
-            }
-        }
-        
-        // If we have any messages
-        if (!toAdd.isEmpty()) {
-            // add them so the user sees the message
-            String formClientId = form.getClientId(context);
-            for (FacesMessage cur : toAdd) {
-                context.addMessage(formClientId, cur);
-            }
-            // skip remaining lifecycle phases
-            context.renderResponse();
-        }
-    }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/FaceletsBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/FaceletsBean.java
deleted file mode 100644
index 1e66390..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/FaceletsBean.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-
- at ManagedBean
- at SessionScoped
-public class FaceletsBean {
-
-    boolean toggleState;
-
-
-    public String getFragment() {
-        return (toggleState ? "frag2" : "frag1");
-    }
-
-    public boolean getToggleState() {
-        return toggleState;
-    }
-
-    public String action() {
-        toggleState = !toggleState;
-        return null; // stay with the same UIViewRoot instance on post-back
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ForEachBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ForEachBean.java
deleted file mode 100644
index 793383c..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ForEachBean.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Test JavaBean for <code><c:forEach></code> testing.</p>
- */
-
-public class ForEachBean {
-
-
-    // String Array property with pre-initialized values
-    private String arrayProperty[] = {
-        "First String",
-        "Second String",
-        "Third String",
-        "Fourth String",
-        "Fifth String"
-    };
-
-
-    public String[] getArrayProperty() {
-        return (arrayProperty);
-    }
-
-
-    public void setArrayProperty(String arrayProperty[]) {
-        this.arrayProperty = arrayProperty;
-    }
-
-
-    // String List property with pre-initialized values
-    List listProperty = new ArrayList();
-
-
-    {
-        listProperty.add("List First");
-        listProperty.add("List Second");
-        listProperty.add("List Third");
-        listProperty.add("List Fourth");
-        listProperty.add("List Fifth");
-    }
-
-
-    public List getListProperty() {
-        return (listProperty);
-    }
-
-
-    public void setListProperty(List listProperty) {
-        this.listProperty = listProperty;
-    }
-
-
-    // Scalar string property
-    private String stringProperty = "This is a String property";
-
-
-    public String getStringProperty() {
-        return (this.stringProperty);
-    }
-
-
-    public void setStringProperty(String stringProperty) {
-        this.stringProperty = stringProperty;
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/FunctionBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/FunctionBean.java
deleted file mode 100644
index 4609d89..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/FunctionBean.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.context.FacesContext;
-import javax.faces.application.FacesMessage;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-
- at ManagedBean
-public class FunctionBean {
-
-    public String getValidationResult() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExpressionFactory factory = ctx.getApplication().getExpressionFactory();
-        ValueExpression expr = factory.createValueExpression(ctx.getELContext(),
-                                                             "#{fn:contains('somestrvalue', 'str')}",
-                                                             Boolean.class);
-        Boolean result = (Boolean) expr.getValue(ctx.getELContext());
-        return (result != null && result) ? "PASSED" : "FAILED";
-        
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/InterweavingBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/InterweavingBean.java
deleted file mode 100644
index 595e71d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/InterweavingBean.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.component.UIData;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class InterweavingBean {
-
-    private UIData table;
-    List<String> list;
-
-    public InterweavingBean() {
-        list = new ArrayList<String>(1);
-        list.add("Value");
-    }
-
-
-    public UIData getTable() {
-        return table;
-    }
-
-    public void setTable(UIData table) {
-        this.table = table;
-    }
-
-    public List getItems() {
-        return list;
-    }
-    
-} // END InterweavingBean
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ListHolder.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ListHolder.java
deleted file mode 100644
index cde6e50..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ListHolder.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import java.util.List;
-import java.util.ArrayList;
-import java.io.Serializable;
-
-
- at ManagedBean(name = "listholder")
- at SessionScoped
-public class ListHolder implements Serializable {
-
-    private List<String[]> list = new ArrayList<String[]>(6);
-
-    {
-        list.add(new String[]{"c1"});
-        list.add(new String[]{"c1_1"});
-        list.add(new String[]{"c1_2"});
-    }
-
-    public List getList() {
-        return list;
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ListenerBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ListenerBean.java
deleted file mode 100644
index 6aa814e..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ListenerBean.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-
-
-public class ListenerBean extends Object {
-
-    public ListenerBean() {
-    }
-
-    private ActionListener actionListener = null;
-    public ActionListener getActionListener() {
-        return actionListener;
-    }
-    public void setActionListener(ActionListener actionListener) {
-        this.actionListener = actionListener;
-    }
-
-    private ValueChangeListener valueChangeListener = null;
-    public ValueChangeListener getValueChangeListener() {
-        return valueChangeListener;
-    }
-    public void setValueChangeListener(ValueChangeListener valueChangeListener) {
-        this.valueChangeListener = valueChangeListener;
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ListenerCheckBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ListenerCheckBean.java
deleted file mode 100644
index bb93f5b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ListenerCheckBean.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIViewRoot;
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.application.FacesMessage;
-import java.util.List;
-
- at ManagedBean
-public class ListenerCheckBean {
-
-    public void checkListeners() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIViewRoot root = ctx.getViewRoot();
-        List<PhaseListener> listeners = root.getPhaseListeners();
-        if (listeners == null || listeners.isEmpty()) {
-            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                "ERROR: No listeners registered",
-                                                "ERROR: No listeners registered");
-            ctx.addMessage(null, msg);
-        }
-        if (listeners.size() > 1) {
-            String message = "ERROR: Expected one registered listener but found: " + listeners.size();
-            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                                message,
-                                                message);
-            ctx.addMessage(null, msg);
-        }
-    }
-
-    public PhaseListener getListener() {
-
-        return new PhaseListener() {
-            public void afterPhase(PhaseEvent event) {
-
-            }
-
-            public void beforePhase(PhaseEvent event) {
-
-            }
-
-            public PhaseId getPhaseId() {
-                return PhaseId.ANY_PHASE;
-            }
-        };
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/MethodRef.java b/jsf-ri/systest/src/com/sun/faces/systest/model/MethodRef.java
deleted file mode 100644
index a9df220..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/MethodRef.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.validator.ValidatorException;
-import javax.servlet.http.HttpSession;
-
-import javax.faces.component.UIInput;
-import javax.faces.el.MethodBinding;
-
-import com.sun.faces.systest.TestValueChangeListener;
-
-public class MethodRef extends Object {
-
-    public MethodRef() {
-    }
-
-
-    protected String buttonPressedOutcome = null;
-
-
-    public String getButtonPressedOutcome() {
-        return buttonPressedOutcome;
-    }
-
-
-    public void setButtonPressedOutcome(String newButtonPressedOutcome) {
-        buttonPressedOutcome = newButtonPressedOutcome;
-    }
-
-
-    public String button1Pressed() {
-        setButtonPressedOutcome("button1 was pressed");
-        return null;
-    }
-
-
-    public String invalidateSession() {
-        FacesContext fContext = FacesContext.getCurrentInstance();
-        HttpSession session = (HttpSession)
-            fContext.getExternalContext().getSession(true);
-        session.invalidate();
-        return null;
-    }
-
-
-    public String button2Pressed() {
-        setButtonPressedOutcome("button2 was pressed");
-        return null;
-    }
-
-
-    public void button3Pressed(ActionEvent event) {
-        setButtonPressedOutcome(event.getComponent().getId() +
-                                " was pressed");
-    }
-
-
-    protected String validateOutcome;
-
-
-    public String getValidateOutcome() {
-        return validateOutcome;
-    }
-
-
-    public void setValidateOutcome(String newValidateOutcome) {
-        validateOutcome = newValidateOutcome;
-    }
-
-
-    public void validateInput(FacesContext context, UIComponent toValidate, Object valueObj) {
-        String value = (String) valueObj;
-        if (!value.equals("batman")) {
-            throw new ValidatorException(new FacesMessage(
-                "You didn't enter batman",
-                "You must enter batman"));
-        }
-
-    }
-
-
-    protected String changeOutcome;
-
-
-    public String getChangeOutcome() {
-        return changeOutcome;
-    }
-
-
-    public void setChangeOutcome(String newChangeOutcome) {
-        changeOutcome = newChangeOutcome;
-    }
-
-
-    public void valueChange(ValueChangeEvent vce) {
-        vce.getComponent().getAttributes().put("onblur",
-                                               vce.getNewValue().toString());
-        setChangeOutcome(vce.getNewValue().toString());
-    }
-    
-    public void inputFieldValueChange(ValueChangeEvent vce) {
-        vce.getComponent().getAttributes().put("onblur",
-                                               vce.getNewValue().toString());
-    }
-    
-    protected UIInput inputField = null;
-    public void setInputField(UIInput input){
-        this.inputField = input;
-    }
-    
-    public UIInput getInputField() {
-        if (inputField == null) {
-            inputField = new UIInput();
-            inputField.addValueChangeListener(new TestValueChangeListener());
-            Class args[] = { ValueChangeEvent.class };
-            MethodBinding mb = 
-            FacesContext.getCurrentInstance().getApplication().
-            createMethodBinding("#{methodRef.inputFieldValueChange}", args);
-            inputField.setValueChangeListener(mb);
-        }
-        return inputField;
-    }
-
-
-}
-
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/NumberHolder.java b/jsf-ri/systest/src/com/sun/faces/systest/model/NumberHolder.java
deleted file mode 100644
index 9e1b415..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/NumberHolder.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import java.io.Serializable;
-
-
- at ManagedBean(name = "numberholder")
- at SessionScoped
-public class NumberHolder implements Serializable {
-
-    private String s = "";
-
-    private int i = 0;
-
-    public void setNumber(int i) {
-        this.i = i;
-    }
-
-    public int getNumber() {
-        return i;
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/PrintEventToRequestMapPhaseListener.java b/jsf-ri/systest/src/com/sun/faces/systest/model/PrintEventToRequestMapPhaseListener.java
deleted file mode 100644
index c7ca45f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/PrintEventToRequestMapPhaseListener.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseEvent;
-
-import javax.faces.context.FacesContext;
-
-public class PrintEventToRequestMapPhaseListener extends Object implements PhaseListener {
-
-    public void afterPhase(PhaseEvent event) {
-	String attr = (String) event.getFacesContext().getExternalContext().getRequestMap().get("afterPhaseEvent");
-	if (null == attr) {
-	    attr = "";
-	}
-	event.getFacesContext().getExternalContext().getRequestMap().put("afterPhaseEvent", attr + " afterPhase: " + event.getPhaseId());
-    }
-    
-    
-    public void beforePhase(PhaseEvent event) {
-	String attr = (String) event.getFacesContext().getExternalContext().getRequestMap().get("beforePhaseEvent");
-	if (null == attr) {
-	    attr = "";
-	}
-	event.getFacesContext().getExternalContext().getRequestMap().put("beforePhaseEvent", attr + " beforePhase: " + event.getPhaseId());
-    }
-
-    private String phaseIdString = null;
-
-    public void setPhaseIdString(String phaseIdString) {
-	this.phaseIdString = phaseIdString;
-    }
-
-    /**
-     * <p>Look at our phaseIdString ivar.  If non-null, use this as the
-     * phaseId for the substring search below.  If null, look in the
-     * request map for an attribute called "phaseId".  If not found,
-     * return <code>PhaseId.ANY_PHASE</code>.  If found, see if it is a
-     * substring of any of the known phases, if so, return the
-     * corresponding phase Id.  If not return
-     * <code>PhaseId.ANY_PHASE</code>.</p>
-     */
-
-    public PhaseId getPhaseId() {
-
-	String phaseId = 
-	    (null != phaseIdString) ? phaseIdString : (String)
-	    FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("phaseId");
-	PhaseId result = PhaseId.ANY_PHASE;
-	if (null == phaseId) {
-	    return result;
-	}
-	if (-1 != PhaseId.ANY_PHASE.toString().indexOf(phaseId)) {
-	    result = PhaseId.ANY_PHASE;
-	}
-	else if(-1 !=PhaseId.APPLY_REQUEST_VALUES.toString().indexOf(phaseId)){
-	    result = PhaseId.APPLY_REQUEST_VALUES;
-	}
-	else if(-1 != PhaseId.PROCESS_VALIDATIONS.toString().indexOf(phaseId)){
-	    result = PhaseId.PROCESS_VALIDATIONS;
-	}
-	else if(-1 != PhaseId.UPDATE_MODEL_VALUES.toString().indexOf(phaseId)){
-	    result = PhaseId.UPDATE_MODEL_VALUES;
-	}
-	else if(-1 != PhaseId.INVOKE_APPLICATION.toString().indexOf(phaseId)){
-	    result = PhaseId.INVOKE_APPLICATION;
-	}
-	return result;
-    }
-
-    public PhaseListener getInstance() {
-	return this;
-    }
-
-    protected PhaseListener otherListener = null;
-    public PhaseListener getOtherListener() {
-	return otherListener;
-    }
-
-    public void setOtherListener(PhaseListener newOtherListener) {
-	otherListener = newOtherListener;
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/PropertyOrderBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/PropertyOrderBean.java
deleted file mode 100644
index 857dadf..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/PropertyOrderBean.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-
-public class PropertyOrderBean extends Object {
-
-    protected String one;
-    public String getOne() {
-	return one;
-    }
-
-    public void setOne(String newOne) {
-	one = newOne;
-	order = order + " " + one;
-    }
-
-    protected String two;
-    public String getTwo() {
-	return two;
-    }
-
-    public void setTwo(String newTwo) {
-	two = newTwo;
-	order = order + " " + two;
-    }
-
-    protected String three;
-    public String getThree() {
-	return three;
-    }
-
-    public void setThree(String newThree) {
-	three = newThree;
-	order = order + " " + three;
-    }
-
-    protected String four;
-    public String getFour() {
-	return four;
-    }
-
-    public void setFour(String newFour) {
-	four = newFour;
-	order = order + " " + four;
-    }
-
-    
-    protected String order = "";
-    public String getOrder() {
-	return order;
-    }
-
-    protected ArrayList listProperty = new ArrayList();
-
-    public ArrayList getListProperty() {
-	return listProperty;
-    }
-
-    public void setListProperty(ArrayList newListProperty) {
-	listProperty = newListProperty;
-    }
-
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ResourceInjectionBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ResourceInjectionBean.java
deleted file mode 100644
index a4a7d1b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ResourceInjectionBean.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.io.IOException;
-import java.sql.Connection;
-
-import javax.naming.InitialContext;
-import javax.annotation.Resource;
-import javax.annotation.Resources;
-import javax.sql.DataSource;
-
-
-  
-public class ResourceInjectionBean {
-
-    @Resource(name="welcomeMessage")
-    private String welcomeMessage;
-    
-    public String getWelcomeMessage() {
-        return welcomeMessage;
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/SelectItemsBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/SelectItemsBean.java
deleted file mode 100644
index 181a5d3..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/SelectItemsBean.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-
- at ManagedBean
-public class SelectItemsBean {
-
-	public List<SelectItem> getHobbits() {
-		List<SelectItem> result = new ArrayList<SelectItem>(4);
-		result.add(new SelectItem("Frodo"));
-		result.add(new SelectItem("Pippin"));
-		result.add(new SelectItem("Bilbo"));
-		result.add(new SelectItem("Merry"));
-		return result;
-	}
-	
-	public List<SelectItem> getHobbitsNestedInGroup() {
-		List<SelectItem> result = new ArrayList<SelectItem>();
-		SelectItemGroup group = new SelectItemGroup("Hobbits");
-		group.setSelectItems(getHobbits().toArray(new SelectItem[0]));
-		result.add(group);
-		return result;
-	}
-	
-	public List<SelectItem> getHobbitsNoSelectionNestedInGroup() {
-		List<SelectItem> result = new ArrayList<SelectItem>();
-		SelectItemGroup group = new SelectItemGroup("Hobbits");
-		group.setSelectItems(getHobbitsNoSelection().toArray(new SelectItem[0]));
-		result.add(group);
-		return result;
-	}
-	
-	public List<SelectItem> getHobbitsNoSelection() {
-		List<SelectItem> result = new ArrayList<SelectItem>(5);
-		SelectItem noSelectionOption = new SelectItem("No Selection");
-		noSelectionOption.setNoSelectionOption(true);
-		result.add(noSelectionOption);
-		result.addAll(getHobbits());
-		return result;
-	}
-    
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/SelectMany05Bean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/SelectMany05Bean.java
deleted file mode 100644
index fa05f18..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/SelectMany05Bean.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.Set;
-import java.util.List;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Collections;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.Vector;
-import java.util.LinkedList;
-import java.util.Arrays;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-import javax.faces.model.SelectItem;
-import javax.faces.model.DataModel;
-import javax.faces.model.ListDataModel;
-import javax.faces.FacesException;
-
-
-public class SelectMany05Bean {
-
-    private final Collection<SelectItem> possibleValues;
-    private Set<String> setValues;
-    private SortedSet<String> sortedSetValues;
-    private List<String> listValues;
-    private Collection<String> collectionValues;
-    private String[] arrayValues;
-    private SortedSet<String> initialSortedSetValues;
-    private Collection<String> initialCollectionValues;
-    private Set<String> initialSetValues;
-    private List<String> initialListValues;
-    private Collection<String> collectionFromHintValues;
-    private Collection<String> collectionFromHintValues2;
-    private Object someValues;
-    private Collection<HobbitBean> hobbitCollection;
-    private DataModel<HobbitBean> hobbitDataModel;
-
-    // ------------------------------------------------------------ Constructors
-
-    public SelectMany05Bean() {
-        HobbitBean[] hobbits = getHobbitBeanArray();
-
-        Set<SelectItem> items = new LinkedHashSet<SelectItem>();
-        for (HobbitBean hobbit : hobbits) {
-            items.add(new SelectItem(hobbit.getName()));
-        }
-        hobbitCollection = new TreeSet<HobbitBean>();
-        hobbitCollection.addAll(Arrays.asList(hobbits));
-        possibleValues = Collections.unmodifiableSet(items);
-        initialSortedSetValues = new TreeSet<String>(Collections.reverseOrder());
-        initialSortedSetValues.add("Pippin");
-        initialSortedSetValues.add("Frodo");
-        initialCollectionValues = new LinkedHashSet<String>(2);
-        initialCollectionValues.add("Bilbo");
-        initialCollectionValues.add("Merry");
-        initialSetValues = new CopyOnWriteArraySet<String>(); // not Cloneable
-        initialSetValues.add("Frodo");
-        initialListValues = new Vector<String>();
-        initialListValues.add("Bilbo");
-        initialListValues.add("Pippin");
-        initialListValues.add("Merry");
-        hobbitDataModel = new ListDataModel<HobbitBean>(new ArrayList<HobbitBean>(Arrays.asList(hobbits)));
-
-    }
-    
-    protected HobbitBean [] getHobbitBeanArray() {
-        HobbitBean[] hobbits = {
-              new HobbitBean("Bilbo", "Bilbo - <Ring Finder>"),
-              new HobbitBean("Frodo", "Frodo - <Ring Bearer>"),
-              new HobbitBean("Merry", "Merry - <Trouble Maker>"),
-              new HobbitBean("Pippin", "Pipping - <Trouble Maker>")
-        };
-        return hobbits;
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public Collection<HobbitBean> getHobbitCollection() {
-        return hobbitCollection;
-    }
-
-    public DataModel<HobbitBean> getHobbitDataModel() {
-        return hobbitDataModel;
-    }
-
-    public Set<String> getSetValues() {
-        return setValues;
-    }
-
-    public void setSetValues(Set<String> setValues) {
-        if (!(setValues instanceof HashSet)) {
-            throw new FacesException("[setSetValues] Error: Expected value to be ArrayList");
-        }
-        this.setValues = setValues;
-    }
-
-    public List<String> getListValues() {
-        return listValues;
-    }
-
-    public void setListValues(List<String> listValues) {
-        if (!(listValues instanceof ArrayList)) {
-            throw new FacesException("[setListValues] Error: Expected value to be ArrayList");
-        }
-        this.listValues = listValues;
-    }
-
-    public String[] getArrayValues() {
-        return arrayValues;
-    }
-
-    public void setArrayValues(String[] arrayValues) {
-        this.arrayValues = arrayValues;
-    }
-
-    public SortedSet<String> getSortedSetValues() {
-        return sortedSetValues;
-    }
-
-    public void setSortedSetValues(SortedSet<String> sortedSetValues) {
-        if (!(sortedSetValues instanceof TreeSet)) {
-            throw new FacesException("[setSortedSetValues] Error: Expected value to be TreeSet");
-        }
-        if (((TreeSet) sortedSetValues).comparator() != null) {
-            throw new FacesException("[setSortedSetValues] Error: Expected null comparator");
-        }
-        this.sortedSetValues = sortedSetValues;
-    }
-
-    public Collection<String> getCollectionValues() {
-        return collectionValues;
-    }
-
-    public void setCollectionValues(Collection<String> collectionValues) {
-        if (!(collectionValues instanceof ArrayList)) {
-            throw new FacesException("[setCollectionValues] Error: Expected value to be ArrayList");
-        }
-        this.collectionValues = collectionValues;
-    }
-
-    public Collection<SelectItem> getPossibleValues() {
-        return possibleValues;
-    }
-
-    public Collection<?> getEmptyCollection() {
-        return Collections.emptyList();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-
-
-    public SortedSet<String> getInitialSortedSetValues() {
-        return initialSortedSetValues;
-    }
-
-    public void setInitialSortedSetValues(SortedSet<String> initialSortedSetValues) {
-        if (!(initialSortedSetValues instanceof TreeSet)) {
-            throw new FacesException("[setInitialSortedSetValues] Error: Expected value to be TreeMap");
-        }
-        if (!Collections.reverseOrder().equals(((TreeSet) initialSortedSetValues).comparator())) {
-            throw new FacesException("[setInitialSortedSetValues] Error: Comparator is not equivalent to Collections.reverseOrder()");
-        }
-        this.initialSortedSetValues = initialSortedSetValues;
-    }
-
-    public Collection<String> getInitialCollectionValues() {
-        return initialCollectionValues;
-    }
-
-    public void setInitialCollectionValues(Collection<String> initialCollectionValues) {
-        if (!(initialCollectionValues instanceof LinkedHashSet)) {
-            throw new FacesException("[setCollectionValues] Error: Expected value to be LinkedHashSet");
-        }
-        this.initialCollectionValues = initialCollectionValues;
-    }
-
-    public Set<String> getInitialSetValues() {
-        return initialSetValues;
-    }
-
-    public void setInitialSetValues(Set<String> initialSetValues) {
-        if (!(initialSetValues instanceof CopyOnWriteArraySet)) {
-            throw new FacesException("[initialSetValues] Error: Expected value to be CopyOnWriteArraySet");
-        }
-        this.initialSetValues = initialSetValues;
-    }
-
-    public List<String> getInitialListValues() {
-        return initialListValues;
-    }
-
-    public void setInitialListValues(List<String> initialListValues) {
-        if (!(initialListValues instanceof Vector)) {
-            throw new FacesException("[initialListValues] Error: Expected value to be Vector");
-        }
-        this.initialListValues = initialListValues;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    public Collection<String> getCollectionFromHintValues() {
-        return collectionFromHintValues;
-    }
-
-    public void setCollectionFromHintValues(Collection<String> collectionFromHintValues) {
-        if (!(collectionFromHintValues instanceof LinkedList)) {
-            throw new FacesException("[collectionFromHintValues] Error: Expected value to be LinkedList");
-        }
-        this.collectionFromHintValues = collectionFromHintValues;
-    }
-
-     public Collection<String> getCollectionFromHintValues2() {
-        return collectionFromHintValues2;
-    }
-
-    public void setCollectionFromHintValues2(Collection<String> collectionFromHintValues) {
-        if (!(collectionFromHintValues instanceof LinkedList)) {
-            throw new FacesException("[collectionFromHintValues2] Error: Expected value to be LinkedList");
-        }
-        this.collectionFromHintValues2 = collectionFromHintValues;
-    }
-
-    public Class<? extends Collection> getCollectionType() {
-        return LinkedList.class;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    private int[] selectedIntValues;
-    private int[] intOptions = new int[] { 1, 2, 3, 4 };
-
-    public int[] getSelectedIntValues() {
-        return selectedIntValues;
-    }
-
-    public void setSelectedIntValues(int[] selectedIntValues) {
-        this.selectedIntValues = selectedIntValues;
-    }
-
-    public int[] getIntOptions() {
-        return intOptions;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    private Integer[] selectedIntegerValues;
-    private Integer[] integerOptions = new Integer[] { 1, 2, 3, 4 };
-
-    public Integer[] getSelectedIntegerValues() {
-        return selectedIntegerValues;
-    }
-
-    public void setSelectedIntegerValues(Integer[] selectedIntegerValues) {
-        this.selectedIntegerValues = selectedIntegerValues;
-    }
-
-    public Integer[] getIntegerOptions() {
-        return integerOptions;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    public Object getSomeValues() {
-        return someValues;
-    }
-
-    public void setSomeValues(Object someValues) {
-        // validate the case where the type is Object.class.  The logic should
-        // default the value to Object[].
-        if (!someValues.getClass().isArray()) {
-            throw new FacesException("[someValues] Error: Expected value to be an array type");
-        }
-        this.someValues = someValues;
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    public static final class HobbitBean implements Comparable {
-
-        private String name;
-        private String bio;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public HobbitBean(String name, String bio) {
-            this.name = name;
-            this.bio = bio;
-        }
-
-
-        public String getName() {
-            return name;
-        }
-
-        public String getBio() {
-            return bio;
-        }
-
-        @Override
-        public String toString() {
-            return name;
-        }
-
-        // --------------------------------------------- Methods from Comparable
-
-
-        public int compareTo(Object o) {
-            return name.compareTo(((HobbitBean) o).name);
-        }
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/SelectMany05BeanWithNoSelectionValue.java b/jsf-ri/systest/src/com/sun/faces/systest/model/SelectMany05BeanWithNoSelectionValue.java
deleted file mode 100644
index c1e163a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/SelectMany05BeanWithNoSelectionValue.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- *
- * @author edburns
- */
-public class SelectMany05BeanWithNoSelectionValue extends SelectMany05Bean {
-
-    private List<HobbitBean> hobbitList;
-    
-    
-    public SelectMany05BeanWithNoSelectionValue() {
-        HobbitBean[] hobbits = getHobbitBeanArray();
-
-        hobbitList = new ArrayList<HobbitBean>();
-        hobbitList.addAll(Arrays.asList(hobbits));
-        
-    }
-
-    @Override
-    protected HobbitBean[] getHobbitBeanArray() {
-        // Prepend a HobbitBean with the value of "No Selection"
-        // without the quotes, to the super's hobbit bean array.
-        HobbitBean [] superResult = super.getHobbitBeanArray();
-        HobbitBean [] result = new HobbitBean[superResult.length + 1];
-        result[0] = new HobbitBean("No Selection", "<No Selection>");
-        for (int i = 1; i < result.length; i++) {
-            result[i] = superResult[i-1];
-        }
-        
-        return result;
-    }
-    
-    public List<HobbitBean> getHobbitList() {
-        return hobbitList;
-    }
-    
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/SpecialBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/SpecialBean.java
deleted file mode 100644
index 4ce9de8..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/SpecialBean.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-public class SpecialBean {
-
-        private final String special;
-
-        public SpecialBean(String specialValue) {
-            special = specialValue;
-        }
-
-        public String getString() {
-            return special;
-        }
-
-        public boolean equals(Object target) {
-           if (!(target instanceof SpecialBean)) {
-              return false;
-           } else {
-           return (special.equals(((SpecialBean) target).getString()));
-           }
-        }
-    }
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/SpecialConverter.java b/jsf-ri/systest/src/com/sun/faces/systest/model/SpecialConverter.java
deleted file mode 100644
index 6769837..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/SpecialConverter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.context.*;
-import javax.faces.component.*;
-import javax.faces.convert.*;
-public class SpecialConverter implements Converter {
-        public Object getAsObject(FacesContext context,
-                                  UIComponent component,
-                                  String value)
-        throws ConverterException {            
-            if (value == null) {
-               throw new ConverterException();
-            } else {
-                return new SpecialBean(value);
-            }
-        }
-
-        public String getAsString(FacesContext context,
-                                  UIComponent component,
-                                  Object value)
-        throws ConverterException {           
-            if (!(value instanceof SpecialBean)) {
-                throw new ConverterException();
-            } else {
-                return ((SpecialBean) value).getString();
-            }
-        }
-    }
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/StringHolder.java b/jsf-ri/systest/src/com/sun/faces/systest/model/StringHolder.java
deleted file mode 100644
index 674affd..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/StringHolder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import java.io.Serializable;
-
-
- at ManagedBean(name = "stringholder")
- at SessionScoped
-public class StringHolder implements Serializable {
-
-    private String s = "";
-
-    public void setString(String s) {
-        this.s = s;
-    }
-
-    public String getString() {
-        return s;
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestBean.java
deleted file mode 100644
index c968a7b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBean.java
+++ /dev/null
@@ -1,921 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.html.HtmlCommandButton;
-import javax.faces.component.html.HtmlOutputText;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.PropertyResolver;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEventListenerHolder;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.model.SelectItem;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-/**
- * <p>Test JavaBean for managed object creation facility.</p>
- */
-public class TestBean implements SystemEventListenerHolder {
-
-    public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> arg0) {
-        return Collections.EMPTY_LIST;
-    }
-    
-public enum Suit { Hearts, Clubs, Diamonds, Spades }
-public enum Color { Red, Blue, Green, Orange }
-
-    private Random random;
-    private ArrayList newList1= new ArrayList();
-    private ArrayList newList2= new ArrayList();
-    private ArrayList oneElementList;
-
-    ServletContext servletContext = null;
-    
-    public Suit returnSpades() {
-        return Suit.Spades;
-    }
-    
-    public Suit returnDiamonds() {
-        return Suit.Diamonds;
-    }
-
-    public TestBean() {
-    random = new Random(4143);
-        FacesContext context = FacesContext.getCurrentInstance();
-        ExternalContext extContext = (null != context) ? context.getExternalContext() : null;
-        servletContext = (null != extContext) ? (ServletContext) extContext.getContext() : null;
-        oneElementList = new ArrayList<String>(1);
-        oneElementList.add("hello");
-    }
-
-
-    private boolean booleanProperty = true;
-
-
-    public boolean getBooleanProperty() {
-        return (this.booleanProperty);
-    }
-
-
-    public void setBooleanProperty(boolean booleanProperty) {
-        this.booleanProperty = booleanProperty;
-    }
-
-    private boolean booleanProperty2 = false;
-    public boolean getBooleanProperty2() {
-    return booleanProperty2;
-    }
-
-    public void setBooleanProperty2(boolean newBooleanProperty2) {
-    booleanProperty2 = newBooleanProperty2;
-    }
-
-    protected String successOutcome = "/success.xhtml";
-
-    public String getSuccessOutcome() {
-        return successOutcome;
-    }
-
-    public void setSuccessOutcome(String successOutcome) {
-        this.successOutcome = successOutcome;
-    }
-    protected String failureOutcome = "/failure.xhtml";
-
-    public String getFailureOutcome() {
-        return failureOutcome;
-    }
-
-    public void setFailureOutcome(String failureOutcome) {
-        this.failureOutcome = failureOutcome;
-    }
-
-
-
-    private byte byteProperty = 12;
-
-
-    public byte getByteProperty() {
-        return (this.byteProperty);
-    }
-
-
-    public void setByteProperty(byte byteProperty) {
-        this.byteProperty = byteProperty;
-    }
-
-
-    private double doubleProperty = 123.45;
-
-
-    public double getDoubleProperty() {
-        return (this.doubleProperty);
-    }
-
-
-    public void setDoubleProperty(double doubleProperty) {
-        this.doubleProperty = doubleProperty;
-    }
-
-
-    private float floatProperty = (float) 12.34;
-
-
-    public float getFloatProperty() {
-        return (this.floatProperty);
-    }
-
-
-    public void setFloatProperty(float floatProperty) {
-        this.floatProperty = floatProperty;
-    }
-
-
-    private int intProperty = 123;
-
-
-    public int getIntProperty() {
-        return (this.intProperty);
-    }
-
-
-    public void setIntProperty(int intProperty) {
-        this.intProperty = intProperty;
-    }
-
-    private int[] intsProperty = {5, 6, 7};
-
-    public int[] getIntsProperty() {
-        return (this.intsProperty);
-    }
-
-    public void setIntsProperty(int[] intsProperty) {
-        this.intsProperty = intsProperty;
-    }
-
-    private long longProperty = 12345;
-
-
-    public long getLongProperty() {
-        return (this.longProperty);
-    }
-
-
-    public void setLongProperty(long longProperty) {
-        this.longProperty = longProperty;
-    }
-
-
-    private short shortProperty = 1234;
-
-
-    public short getShortProperty() {
-        return (this.shortProperty);
-    }
-
-
-    public void setShortProperty(short shortProperty) {
-        this.shortProperty = shortProperty;
-    }
-
-
-    private String stringProperty = "This is a String property";
-
-
-    public String getStringProperty() {
-        return (this.stringProperty);
-    }
-
-
-    public void setStringProperty(String stringProperty) {
-        this.stringProperty = stringProperty;
-    }
-
-
-    private UIInput userName = null;
-
-
-    public UIInput getUserName() {
-        return (this.userName);
-    }
-
-
-    public void setUserName(UIInput userName) {
-        this.userName = userName;
-    }
-
-    private String renderKitInfo = null;
-    public String getRenderKitInfo() {
-        renderKitInfo = FacesContext.getCurrentInstance().
-            getViewRoot().getRenderKitId();
-        return renderKitInfo;
-    }
-    public void setRenderKitInfo(String renderKitInfo) {
-        this.renderKitInfo = renderKitInfo;
-    }
-    private String responseWriterInfo = null;
-    public String getResponseWriterInfo() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (null != context) {
-            Object responseWriter = context.getResponseWriter();
-            if (null != responseWriter) {
-                responseWriterInfo = responseWriter.getClass().getName();
-            }
-        }
-        return responseWriterInfo;
-    }
-    public void setResponseWriterInfo(String responseWriterInfo) {
-        this.responseWriterInfo = responseWriterInfo;
-    }
-
-    private Object bean = null;
-
-
-    public Object getBean() {
-        return (this.bean);
-    }
-
-
-    public void setBean(Object bean) {
-        this.bean = bean;
-    }
-
-    public List selectList = null;
-
-    public List getSelectList() {
-    if (null == selectList) {
-        selectList = new ArrayList();
-        selectList.add(new SelectItem("one", "one", "one"));
-        selectList.add(new SelectItem("two", "two", "two"));
-        selectList.add(new SelectItem("three", "three", "three"));
-    }
-    return selectList;
-    }
-
-    public void setSelectList(List newSelectList) {
-    selectList = newSelectList;
-    }
-
-    protected String selection = null;
-
-    public String getSelection() {
-    return selection;
-    }
-
-    public void setSelection(String newSelection) {
-    selection = newSelection;
-    }
-
-    protected String [] multiSelection;
-    public String [] getMultiSelection() {
-    return multiSelection;
-    }
-
-    public void setMultiSelection(String [] newMultiSelection) {
-    multiSelection = newMultiSelection;
-    }
-
-    public ArrayList getOneElementList() {
-        return oneElementList;
-    }
-
-    public void setOneElementList(ArrayList oneElementList) {
-        this.oneElementList = oneElementList;
-    }
-
-    public void valueChanged(ValueChangeEvent event)
-        throws AbortProcessingException {
-    String [] values = (String []) event.getNewValue();
-    if (null == values) {
-        valueChangeMessage = "";
-    }
-    else {
-        valueChangeMessage = "value changed, new values: ";
-        for (int i = 0; i < values.length; i++) {
-        valueChangeMessage = valueChangeMessage + " " + values[i];
-        }
-    }
-    }
-
-    protected String valueChangeMessage;
-    public String getValueChangeMessage() {
-    return valueChangeMessage;
-    }
-
-    public void setValueChangeMessage(String newValueChangeMessage) {
-    valueChangeMessage = newValueChangeMessage;
-    }
-
-    public List getNondeterministicSelectList() {
-    ArrayList list = new ArrayList(3);
-    String str = new String((new Float(random.nextFloat())).toString());
-    list.add(new SelectItem(str, str, str));
-    str = new String((new Float(random.nextFloat())).toString());
-    list.add(new SelectItem(str, str, str));
-    str = new String((new Float(random.nextFloat())).toString());
-    list.add(new SelectItem(str, str, str));
-    return list;
-    }
-
-    public void setNondeterministicSelectList(List newNondeterministicSelectList) {
-    }
-
-    public void addComponentToTree(ActionEvent action) {
-    HtmlOutputText output = new HtmlOutputText();
-    output.setValue("<p>==new output==</p>");
-    output.setEscape(false);
-
-    FacesContext ctx = FacesContext.getCurrentInstance();
-    UIComponent group = ctx.getViewRoot().findComponent("form" + UINamingContainer.getSeparatorChar(ctx) +  "addHere");
-    group.getChildren().add(output);
-
-    }
-
-    /*
-     * replace the propertyResolver with one that does our bidding for
-     * this test.
-     */
-
-    public void replacePropertyResolver(ActionEvent action) {
-    FacesContext context = FacesContext.getCurrentInstance();
-    Application app = context.getApplication();
-
-    // see if we need to take action-
-    if (null == context.getExternalContext().getSessionMap().get("systest.replacePropertyResolver")) {
-        final PropertyResolver oldProp = app.getPropertyResolver();
-        PropertyResolver
-        newProp = new PropertyResolver() {
-            public Object getValue(Object base, Object property)
-            throws EvaluationException, PropertyNotFoundException {
-            return oldProp.getValue(base, property);
-            }
-
-            public Object getValue(Object base, int index)
-            throws EvaluationException, PropertyNotFoundException {
-            return oldProp.getValue(base, index);
-            }
-
-            public void setValue(Object base, Object property, Object value)
-            throws EvaluationException, PropertyNotFoundException {
-            TestBean.this.setValueChangeMessage("setValue() called");
-            oldProp.setValue(base, property, value);
-            }
-
-            public void setValue(Object base, int index, Object value)
-            throws EvaluationException, PropertyNotFoundException {
-            TestBean.this.setValueChangeMessage("setValue() called");
-            oldProp.setValue(base, index, value);
-            }
-
-            public boolean isReadOnly(Object base, Object property)
-            throws EvaluationException, PropertyNotFoundException {
-            return oldProp.isReadOnly(base, property);
-            }
-
-            public boolean isReadOnly(Object base, int index)
-            throws EvaluationException, PropertyNotFoundException {
-            return oldProp.isReadOnly(base, index);
-            }
-
-            public Class getType(Object base, Object property)
-            throws EvaluationException, PropertyNotFoundException {
-            return oldProp.getType(base, property);
-            }
-
-            public Class getType(Object base, int index)
-            throws EvaluationException, PropertyNotFoundException {
-            return oldProp.getType(base, index);
-            }
-
-        };
-        app.setPropertyResolver(newProp);
-        context.getExternalContext().getSessionMap().put("systest.replacePropertyResolver", oldProp);
-    }
-    }
-
-
-
-    /*
-     * restore the original PropertyResolver.
-     */
-
-    public void restorePropertyResolver(ActionEvent action) {
-    FacesContext context = FacesContext.getCurrentInstance();
-    Application app = context.getApplication();
-    PropertyResolver oldProp = null;
-
-    // see if we need to take action-
-    if (null != (oldProp = (PropertyResolver) context.getExternalContext().getSessionMap().get("systest.replacePropertyResolver"))) {
-        app.setPropertyResolver(oldProp);
-        context.getExternalContext().getSessionMap().remove("systest.replacePropertyResolver");
-        setValueChangeMessage(null);
-
-    }
-    }
-
-    protected HtmlCommandButton boundButton = new HtmlCommandButton();
-    public HtmlCommandButton getBoundButton() {
-    if (null != boundButton) {
-        boundButton.setValue("button label");
-    }
-    return boundButton;
-    }
-
-    public void setBoundButton(HtmlCommandButton newBoundButton) {
-    boundButton = newBoundButton;
-    }
-
-    public String getFactoryPrintout() {
-        String result = "";
-        String[] factoryNames = {
-              FactoryFinder.APPLICATION_FACTORY,
-              FactoryFinder.FACES_CONTEXT_FACTORY,
-              FactoryFinder.LIFECYCLE_FACTORY,
-              FactoryFinder.RENDER_KIT_FACTORY
-        };
-        for (int i = 0; i < factoryNames.length; i++) {
-            String tmp = FactoryFinder.getFactory(factoryNames[i]).toString();
-            if (tmp.startsWith("com.sun.faces")) {
-                int idx = tmp.lastIndexOf('.');
-                tmp = tmp.substring(idx + 1);
-                idx = tmp.indexOf('@');
-                tmp = tmp.substring(0, idx);
-                result += tmp + ' ';
-            } else {
-                result += FactoryFinder.getFactory(factoryNames[i]).toString()
-                          + ' ';
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Holds value of property setPropertyTarget.
-     */
-    private String setPropertyTarget = "default value";
-
-    /**
-     * Getter for property setPropertyTarget.
-     * @return Value of property setPropertyTarget.
-     */
-    public String getSetPropertyTarget() {
-
-        return this.setPropertyTarget;
-    }
-
-    /**
-     * Setter for property setPropertyTarget.
-     * @param setPropertyTarget New value of property setPropertyTarget.
-     */
-    public void setSetPropertyTarget(String setPropertyTarget) {
-
-        this.setPropertyTarget = setPropertyTarget;
-    }
-
-    /**
-     * Holds value of property counter.
-     */
-    private String counter = "0";
-    private int counterInt = 0;
-
-    /**
-     * Getter for property counter.
-     * @return Value of property counter.
-     */
-    public String getCounter() {
-        counter = Integer.valueOf(counterInt++).toString();
-        return counter;
-    }
-
-    /**
-     * Holds value of property validatorMessage.
-     */
-    private String validatorMessage = "Validator Message Expression";
-
-    /**
-     * Getter for property validatorMessage.
-     * @return Value of property validatorMessage.
-     */
-    public String getValidatorMessage() {
-
-        return this.validatorMessage;
-    }
-
-    /**
-     * Holds value of property converterMessage.
-     */
-    private String converterMessage = "Converter Message Expression";
-
-    /**
-     * Getter for property converterMessage.
-     * @return Value of property converterMessage.
-     */
-    public String getConverterMessage() {
-
-        return this.converterMessage;
-    }
-
-    public ArrayList getNewList1() {
-        return newList1;
-    }
-
-    public ArrayList getNewList2() {
-        return newList2;
-    }
-
-   public void valueChange1(ValueChangeEvent vce) {
-        String newValue = vce.getNewValue().toString();
-        if (newList1.size() == 3){
-            newList1.clear();
-        }
-        newList1.add(newValue);
-   }
-   
-   public void valueChange0() {
-       FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("valueChange0Called", 
-               "true");
-   }
-   
-    public void actionListener0() {
-       FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("actionListener0Called", 
-               "true");
-   }
-
-
-   public void valueChange2(ValueChangeEvent vce) {
-        String newValue = vce.getNewValue().toString();
-        if (newList2.size() == 3){
-            newList2.clear();
-        }
-        newList2.add(newValue);
-   }
-
-    private Integer selectedValue = new Integer(2);
-
-    public Integer getSelectedValue() {
-        return selectedValue;
-    }
-
-    public void setSelectedValue(Integer selectedValue) {
-        this.selectedValue = selectedValue;
-    }
-
-    public SelectItem[] getMySelectItems(){
-        return new SelectItem[]{
-            new SelectItem(new Integer(1),"1"),
-            new SelectItem(new Integer(2),"2"),
-            new SelectItem(new Integer(3),"3")
-        };
-    }
-
-    private int intVal = 3;
-    public int getInt() {
-        return intVal;
-    }
-
-
-    public void setInt(int newIntVal) {
-        intVal = newIntVal;
-    }
-
-
-    @PostConstruct
-    public void postConstruct() {
-        setPostConstructCalled(true);
-        FacesContext context = FacesContext.getCurrentInstance();
-        context.getApplication().publishEvent(context, TestBeanPostConstructEvent.class, this);
-    }
-
-    @PreDestroy
-    public void preDestroy() {
-        setPreDestroyCalled(true);
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (null != context) {
-            context.getApplication().publishEvent(context, TestBeanPreDestroyEvent.class, this);
-        }
-    }
-
-    /**
-     * Holds value of property postConstructCalled.
-     */
-    private boolean postConstructCalled  = false;
-
-    /**
-     * Getter for property postConstructCalled.
-     * @return Value of property postConstructCalled.
-     */
-    public boolean isPostConstructCalled() {
-
-        return this.postConstructCalled;
-    }
-
-    /**
-     * Setter for property postConstructCalled.
-     * @param postConstructCalled New value of property postConstructCalled.
-     */
-    public void setPostConstructCalled(boolean postConstructCalled) {
-
-        this.postConstructCalled = postConstructCalled;
-        appendStatusMessage("bean: " + getStringProperty() +
-                            " postConstructCalled: " + postConstructCalled);
-
-    }
-
-    /**
-     * Holds value of property preDestroyCalled.
-     */
-    private boolean preDestroyCalled  = false;
-
-    /**
-     * Getter for property preDestroyCalled.
-     * @return Value of property preDestroyCalled.
-     */
-    public boolean isPreDestroyCalled() {
-
-        return this.preDestroyCalled;
-    }
-
-    /**
-     * Setter for property preDestroyCalled.
-     * @param preDestroyCalled New value of property preDestroyCalled.
-     */
-    public void setPreDestroyCalled(boolean preDestroyCalled) {
-        this.preDestroyCalled = preDestroyCalled;
-        appendStatusMessage("bean: " + getStringProperty() +
-                            " preDestroyCalled: " + preDestroyCalled);
-    }
-
-    public String invalidateSession() {
-        ((HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true)).invalidate();
-        return null;
-    }
-
-    public String removeRequestBean() {
-        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("requestBean");
-        return null;
-    }
-
-    public String removeRequestBean2() {
-        HttpServletRequest request = (HttpServletRequest)
-              FacesContext.getCurrentInstance().getExternalContext().getRequest();
-        request.removeAttribute("requestBean");
-        return null;
-    }
-
-    public String replaceRequestBean() {
-        HttpServletRequest request = (HttpServletRequest)
-            FacesContext.getCurrentInstance().getExternalContext().getRequest();
-        request.setAttribute("requestBean", new TestBean());
-        return null;
-    }
-
-    public String replaceRequestBean2() {
-        HttpServletRequest request = (HttpServletRequest)
-            FacesContext.getCurrentInstance().getExternalContext().getRequest();
-        Object oldValue = request.getAttribute("requestBean");
-        request.setAttribute("requestBean", oldValue);
-        return null;
-    }
-
-    public String removeSessionBean() {
-        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("sessionBean");
-        return null;
-    }
-
-    public String removeSessionBean2() {
-        HttpSession request = (HttpSession)
-              FacesContext.getCurrentInstance().getExternalContext().getSession(true);
-        request.removeAttribute("sessionBean");
-        return null;
-    }
-
-    public String replaceSessionBean() {
-        HttpSession session = (HttpSession)
-            FacesContext.getCurrentInstance().getExternalContext().getSession(true);
-        session.setAttribute("sessionBean", new TestBean());
-        return null;
-    }
-
-    public String replaceSessionBean2() {
-        HttpSession session = (HttpSession)
-            FacesContext.getCurrentInstance().getExternalContext().getSession(true);
-        Object oldValue = session.getAttribute("sessionBean");
-        session.setAttribute("sessionBean", oldValue);
-        return null;
-    }
-
-    public String removeApplicationBean() {
-        FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().remove("applicationBean");
-        return null;
-    }
-
-    public String removeApplicationBean2() {
-        ServletContext request = (ServletContext)
-              FacesContext.getCurrentInstance().getExternalContext().getContext();
-        request.removeAttribute("applicationBean");
-        return null;
-    }
-
-    public String replaceApplicationBean() {
-        ServletContext application = (ServletContext)
-            FacesContext.getCurrentInstance().getExternalContext().getContext();
-        application.setAttribute("applicationBean", new TestBean());
-        return null;
-    }
-
-    public String replaceApplicationBean2() {
-        ServletContext application = (ServletContext)
-            FacesContext.getCurrentInstance().getExternalContext().getContext();
-        Object oldValue = application.getAttribute("applicationBean");
-        application.setAttribute("applicationBean", oldValue);
-        return null;
-    }
-
-    public String clearRequestMap() {
-        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().clear();
-        return null;
-    }
-
-    public String clearRequestMapTwice() {
-        clearRequestMap();
-        clearRequestMap();
-        return null;
-    }
-
-    public String clearSessionMap() {
-        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
-        return null;
-    }
-
-    public String clearSessionMapTwice() {
-        clearSessionMap();
-        clearSessionMap();
-        return null;
-    }
-
-    public void appendStatusMessage(String message) {
-        if (null == servletContext) {
-            return;
-        }
-        String oldMessage = (String) servletContext.getAttribute("previousRequestStatus");
-        oldMessage = (null != oldMessage) ? oldMessage + "\n": "";
-        message = (null != message) ? message : "";
-        oldMessage = oldMessage + message;
-        servletContext.setAttribute("previousRequestStatus", oldMessage);
-
-    }
-
-    public String getAppendRequestMarker() {
-        appendStatusMessage("-----------------");
-        return "";
-    }
-
-    public String clearStatusMessage() {
-        if (null != servletContext) {
-            servletContext.removeAttribute("previousRequestStatus");
-        }
-        return null;
-    }
-    
-    public Map getSelectItems() {
-        Map<String,SpecialBean> map = new HashMap<String,SpecialBean>();
-        map.put("key1", new SpecialBean("value1"));
-        map.put("key2", new SpecialBean("value2"));
-        map.put("key3", new SpecialBean("value3"));
-        return map;        
-    }
-    
-    private SpecialBean special;
-    public void setSpecialModel(SpecialBean special) {
-        this.special = special;        
-    }
-    
-    public SpecialBean getSpecialModel() {
-        return special;
-    }
-
-    /**
-     * Holds value of property suit.
-     */
-    private Suit suit;
-
-    /**
-     * Getter for property suit.
-     * @return Value of property suit.
-     */
-    public Suit getSuit() {
-        return this.suit;
-    }
-
-    /**
-     * Setter for property suit.
-     * @param suit New value of property suit.
-     */
-    public void setSuit(Suit suit) {
-        this.suit = suit;
-    }
-
-    /**
-     * Holds value of property referencedSuit.
-     */
-    private Suit referencedSuit;
-
-    /**
-     * Getter for property referencedSuit.
-     * @return Value of property referencedSuit.
-     */
-    public Suit getReferencedSuit() {
-        return this.referencedSuit;
-    }
-
-    /**
-     * Setter for property referencedSuit.
-     * @param referencedSuit New value of property referencedSuit.
-     */
-    public void setReferencedSuit(Suit referencedSuit) {
-        this.referencedSuit = referencedSuit;
-    }
-
-    /**
-     * Holds value of property color.
-     */
-    private Color color;
-
-    /**
-     * Getter for property color.
-     * @return Value of property color.
-     */
-    public Color getColor() {
-        return this.color;
-    }
-
-    /**
-     * Setter for property color.
-     * @param color New value of property color.
-     */
-    public void setColor(Color color) {
-        this.color = color;
-    }
-
-    public String emptyStringAction() {
-        return null;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBean2.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestBean2.java
deleted file mode 100644
index 033bd37..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBean2.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import java.io.Serializable;
-
-public class TestBean2 implements Serializable {
-        public int id;
-        public String name;
-        public TestBean2(int id, String name) {
-                this.id = id;
-                this.name = name;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-                if(obj instanceof TestBean2) {
-                        return ((TestBean2)obj).id == this.id;
-                }
-                return false;
-        }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanConverter.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanConverter.java
deleted file mode 100644
index c89f378..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanConverter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-public class TestBeanConverter implements Converter {
-
-        public Object getAsObject(FacesContext context, UIComponent component, String
-value) {
-                return new TestBean2(Integer.valueOf(value.substring(0, value.indexOf(","))),
-value.substring(value.indexOf(",")+1));
-        }
-
-        public String getAsString(FacesContext context, UIComponent component, Object
-value) {
-                return ((TestBean2)value).id+","+((TestBean2)value).name;
-        }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanEventClass.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanEventClass.java
deleted file mode 100644
index 2912e32..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanEventClass.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.event.SystemEvent;
-
-/**
- *
- * @author edburns
- */
-public class TestBeanEventClass extends SystemEvent {
-
-    public TestBeanEventClass(TestBean source) {
-        super(source);
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanPostConstructEvent.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanPostConstructEvent.java
deleted file mode 100644
index af86b98..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanPostConstructEvent.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-/**
- *
- * @author edburns
- */
-public class TestBeanPostConstructEvent extends TestBeanEventClass {
-
-    public TestBeanPostConstructEvent(TestBean source) {
-        super(source);
-    }
-    
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanPreDestroyEvent.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanPreDestroyEvent.java
deleted file mode 100644
index 6fd56f4..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanPreDestroyEvent.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-
-public class TestBeanPreDestroyEvent extends TestBeanEventClass {
-
-    public TestBeanPreDestroyEvent(TestBean source) {
-        super(source);
-    }
-    
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanSubclass.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanSubclass.java
deleted file mode 100644
index 44cc296..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestBeanSubclass.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-
-/**
- * <p>Test JavaBean for managed object creation facility.</p>
- */
-
-public class TestBeanSubclass extends AbstractTestBean {
-
-    private String extraProperty = "Extra Property";
-
-
-    public String getExtraProperty() {
-        return this.extraProperty;
-    }
-
-
-    public void setExtraProperty(String extraProperty) {
-        this.extraProperty = extraProperty;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestListBox.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestListBox.java
deleted file mode 100644
index cbc1597..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestListBox.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.model.SelectItem;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TestListBox {
-        private List<TestBean2> listResults;
-        private TestBean2[] arrayResults;
-
-        public List<TestBean2> getListResults() {
-                return listResults;
-        }
-        public void setListResults(List<TestBean2> listResults) {
-                this.listResults = listResults;
-        }
-        public TestBean2[] getArrayResults() {
-                return arrayResults;
-        }
-        public void setArrayResults(TestBean2[] arrayResults) {
-                this.arrayResults = arrayResults;
-        }
-
-
-        public List getSelectItems() {
-                List selectItems = new ArrayList();
-                selectItems.add(new SelectItem(new TestBean2(10, "joe"), "joe"));
-                selectItems.add(new SelectItem(new TestBean2(20, "bob"), "bob"));
-                selectItems.add(new SelectItem(new TestBean2(30, "fred"), "fred"));
-
-                return selectItems;
-        }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/TestValueChangeListener.java b/jsf-ri/systest/src/com/sun/faces/systest/model/TestValueChangeListener.java
deleted file mode 100644
index c5f5c47..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/TestValueChangeListener.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.systest.model;
-
-import javax.faces.event.ValueChangeListener;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.context.FacesContext;
-import javax.faces.application.FacesMessage;
-
-/**
- * Leveraged by systest/web/valueChangeListener02.jsp
- */
-public class TestValueChangeListener implements ValueChangeListener {
-
-    public void processValueChange(ValueChangeEvent event)
-    throws AbortProcessingException {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        String value = event.getOldValue() + "";
-        if (value.length() == 0) {
-            value = "[empty string]";
-        }
-        FacesMessage msg1 = new FacesMessage("old value: " + value);
-
-        value = event.getNewValue() + "";
-        if (value.length() == 0) {
-            value = "[empty string]";
-        }
-
-        FacesMessage msg2 = new FacesMessage("new value: " + value);
-        ctx.addMessage(null, msg1);
-        ctx.addMessage(null, msg2);
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ValidatorBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ValidatorBean.java
deleted file mode 100644
index 9eae63b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ValidatorBean.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import com.sun.faces.systest.TestValidator01;
-
-import javax.faces.event.AbortProcessingException;
-import javax.faces.validator.Validator;
-
-
-public class ValidatorBean extends Object {
-
-    public ValidatorBean() {
-    }
-
-    private Validator validator = null;
-    public Validator getValidator() {
-        if (validator == null) {
-            return new TestValidator01();
-        }
-        return validator;
-    }
-    public void setValidator(Validator validator) {
-        this.validator = validator;
-    }
-
-    private Validator doubleValidator = null;
-    public Validator getDoubleValidator() {
-        if (doubleValidator == null) {
-            return new javax.faces.validator.DoubleRangeValidator();
-        }
-        return doubleValidator;
-    }
-    public void setDoubleValidator(Validator doubleValidator) {
-        this.doubleValidator = doubleValidator;
-    }
-
-    private Validator lengthValidator = null;
-    public Validator getLengthValidator() {
-//        if (lengthValidator == null) {
-//System.out.println("RETURN VAL INSTANCE..");
-//            return new javax.faces.validator.LengthValidator();
-//        }
-        return lengthValidator;
-    }
-    public void setLengthValidator(Validator lengthValidator) {
-        this.lengthValidator = lengthValidator;
-System.out.println("SET VAL INSTANCE..");
-    }
-
-    private Validator longRangeValidator = null;
-    public Validator getLongRangeValidator() {
-        if (longRangeValidator == null) {
-            return new javax.faces.validator.LongRangeValidator();
-        }
-        return longRangeValidator;
-    }
-    public void setLongRangeValidator(Validator longRangeValidator) {
-        this.longRangeValidator = longRangeValidator;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ValueChangeListenerBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ValueChangeListenerBean.java
deleted file mode 100644
index fdc0b44..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ValueChangeListenerBean.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.context.FacesContext;
-
-
-public class ValueChangeListenerBean extends Object {
-
-    public ValueChangeListenerBean() {
-    }
-
-    protected String textAResult;
-    public String getTextAResult() {
-	return textAResult;
-    }
-
-    public void setTextAResult(String newTextAResult) {
-	textAResult = newTextAResult;
-    }
-
-    protected String textBResult;
-    public String getTextBResult() {
-	return textBResult;
-    }
-
-    public void setTextBResult(String newTextBResult) {
-	textBResult = newTextBResult;
-    }
-    
-    public void textAChanged(ValueChangeEvent event) throws AbortProcessingException {
-	setTextAResult("Received valueChangeEvent for textA: " + 
-		       event.hashCode());
-    }
-
-    public void textBChanged(ValueChangeEvent event) throws AbortProcessingException {
-	setTextBResult("Received valueChangeEvent for textB: " + 
-		       event.hashCode());
-    }
-
-    public void valueChange(ValueChangeEvent event)
-    throws AbortProcessingException {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ctx.renderResponse();
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ValueChangeSetPropertyActionListenerBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ValueChangeSetPropertyActionListenerBean.java
deleted file mode 100644
index 2dead85..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ValueChangeSetPropertyActionListenerBean.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.event.ValueChangeListener;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.context.FacesContext;
-import java.io.Serializable;
-
-
- at ManagedBean
- at RequestScoped
-public class ValueChangeSetPropertyActionListenerBean implements Serializable, ValueChangeListener {
-
-    public ValueChangeSetPropertyActionListenerBean() {
-        System.out.println(this.getClass().getName() + "ctor called");
-    }
-
-    
-    
-    
-    public void processValueChange(ValueChangeEvent event) {
-        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("message", "ValueChangeSetPropertyActionListenerBean.processValueChange called");
-    }
-    
-    public String getNanoTime() {
-        return "" + System.nanoTime();
-    }
-
-    
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ViewRootExtension.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ViewRootExtension.java
deleted file mode 100644
index 9ca9751..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ViewRootExtension.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model;
-
-import javax.faces.component.UIViewRoot;
-
-/**
- *
- * @author edburns
- */
-public class ViewRootExtension extends UIViewRoot {
-    
-    /**
-     * Creates a new instance of ViewRootExtension 
-     */
-    public ViewRootExtension() {
-    }
-    
- 
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxRequestBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxRequestBean.java
deleted file mode 100644
index 283a640..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxRequestBean.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ValueChangeEvent;
-
- at ManagedBean(name="ajaxrequest")
- at SessionScoped
-public class AjaxRequestBean {
-    private Integer count = 0;
-
-    private String echo = "echo";
-    private String echo1 = "";
-    private String echo2 = "";
-    private String echo3 = "";
-    private String echo4 = "";
-
-    public String getEcho1() {
-        return echo1;
-    }
-
-    public void setEcho1(String echo1) {
-        this.echo1 = echo1;
-    }
-
-    public String getEcho2() {
-        return echo2;
-    }
-
-    public void setEcho2(String echo2) {
-        this.echo2 = echo2;
-    }
-
-    public String getEcho3() {
-        return echo3;
-    }
-
-    public void setEcho3(String echo3) {
-        this.echo3 = echo3;
-    }
-
-    public String getEcho4() {
-        return echo4;
-    }
-
-    public void setEcho4(String echo4) {
-        this.echo4 = echo4;
-    }
-
-    public String getEcho() {
-        return echo;
-    }
-
-    public void setEcho(String echo) {
-        this.echo = echo;
-    }
-
-    public void echoValue(ValueChangeEvent event) {
-        String str = (String)event.getNewValue();
-        echo = str;
-    }
-
-    public void resetEcho(ActionEvent ae) {
-        echo = "reset";
-        echo1 = "reset";
-        echo2 = "reset";
-        echo3 = "reset";
-        echo4 = "reset";
-    }
-
-    public Integer getCount() {
-        return count++;
-    }
-
-    public void resetCount(ActionEvent ae) {
-        count = 0;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxTable.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxTable.java
deleted file mode 100644
index 9becd3f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxTable.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-
-
- at ManagedBean
- at SessionScoped
-public class AjaxTable {
-
-
-    private Info[] list = new Info[]{
-            new Info(101, "Ryan", "Mountain Fastness", true),
-            new Info(102, "Jim", "Santa Clara", true),
-            new Info(103, "Roger", "Boston", true),
-            new Info(104, "Ed", "Orlando", false),
-            new Info(105, "Barbera", "Mountain View", true),
-    };
-
-    public Info[] getList() {
-        return list;
-    }
-
-    public class Info {
-        int id;
-        String name;
-        String city;
-        boolean likescheese;
-
-        public Info(int id, String name, String city, boolean likescheese) {
-            this.id = id;
-            this.name = name;
-            this.city = city;
-            this.likescheese = likescheese;
-        }
-
-        public int getId() {
-            return id;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-
-        public String getCity() {
-            return city;
-        }
-
-        public void setCity(String city) {
-            this.city = city;
-        }
-
-        public boolean getLikesCheese() {
-            return likescheese;
-        }
-
-        public void setLikesCheese(boolean likescheese) {
-            this.likescheese = likescheese;
-        }
-
-        public String getCheesePreference() {
-            return (likescheese ? "Cheese Please" : "Eww");
-        }
-
-    }
-
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxTagValuesBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxTagValuesBean.java
deleted file mode 100644
index 7cbbc68..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AjaxTagValuesBean.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ValueChangeEvent;
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.Arrays;
-
- at ManagedBean(name="ajaxtag")
- at SessionScoped
-public class AjaxTagValuesBean {
-    private Integer count = 0;
-    private Boolean checked = false;
-    private String text = "";
-    private String[] outArray = { "out1", ":form2:out2", ":out3" };
-    private Collection<String> outSet = new LinkedHashSet<String>(Arrays.asList(outArray));
-    private String render = "out1";
-    private String[] checkedvalues = {};
-    
-    public String getText() {
-        return text;
-    }
-
-    public void setText(String text) {
-        this.text = text;
-    }
-
-    public Boolean getChecked() {
-        return checked;
-    }
-
-    public void setChecked(Boolean checked) {
-        this.checked = checked;
-    }
-
-    public Integer getCount() {
-        return count++;
-    }
-
-    public void setCheckedValues(String[] values) {
-        this.checkedvalues = values;
-    }
-
-    public String[] getCheckedValues() {
-        return checkedvalues;
-    }
-
-    public String getCheckedValuesString() {
-        String v = "Value: ";
-        for (String value : checkedvalues) {
-            v = v + value;
-        }
-        return v;
-    }
-
-    public void reset(ActionEvent ae) {
-        count = 0;
-        checked = false;
-        text = "";
-    }
-
-    public Collection<String> getRenderList() {
-        return outSet;
-    }
-
-    public String getRenderOne() {
-        return render;
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AttrsBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AttrsBean.java
deleted file mode 100644
index b052f60..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/AttrsBean.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.FacesException;
-import javax.faces.bean.RequestScoped;
-import javax.faces.bean.ManagedBean;
-import java.util.Map;
-import java.util.HashMap;
-
- at ManagedBean
- at RequestScoped
-public class AttrsBean {
-
-    public String eval() {
-
-        Map<String, String> map = new HashMap<String, String>();
-        map.put("value","New Value");
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.updateAttributes("form:attr",map);
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/CountBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/CountBean.java
deleted file mode 100644
index c8296fd..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/CountBean.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.event.ActionEvent;
-
-
- at ManagedBean(name="ajaxcount")
- at SessionScoped
-public class CountBean {
-    private Integer count1 = 0;
-    private Integer count2 = 0;
-    private Integer count3 = 0;
-    private Integer count4 = 0;
-    private Integer count5 = 0;
-
-    public void resetCount(ActionEvent ae) {
-        count1 = 0;
-        count2 = 0;
-        count3 = 0;
-        count4 = 0;
-        count5 = 0;
-    }
-
-    public Integer getCount1() {
-        return count1++;
-    }
-
-    public Integer getCount2() {
-        return count2++;
-    }
-
-    public Integer getCount3() {
-        return count3++;
-    }
-
-    public Integer getCount4() {
-        return count4++;
-    }
-
-    public Integer getCount5() {
-        return count5++;
-    }
-}
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/Echo.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/Echo.java
deleted file mode 100644
index d680c9a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/Echo.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.event.ActionEvent;
-
- at ManagedBean(name = "ajaxecho")
- at SessionScoped
-public class Echo {
-    String str = "";
-
-    public String getStr() {
-        return str;
-    }
-
-    public void setStr(String str) {
-        this.str = str;
-    }
-
-    public void reset(ActionEvent ae) {
-        str = "";
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/ErrorBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/ErrorBean.java
deleted file mode 100644
index cf0f0ad..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/ErrorBean.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.FacesException;
-import javax.faces.bean.RequestScoped;
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean
- at RequestScoped
-public class ErrorBean {
-
-    public String error() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startError("errorName");
-                writer.write("Error Message");
-                writer.endError();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/EvalBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/EvalBean.java
deleted file mode 100644
index 894117a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/EvalBean.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.FacesException;
-import javax.faces.bean.RequestScoped;
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean
- at RequestScoped
-public class EvalBean {
-
-    public String eval() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startEval();
-                writer.write("alert('test');");
-                writer.endEval();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/FailBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/FailBean.java
deleted file mode 100644
index 54c8947..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/FailBean.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.FacesException;
-import javax.faces.bean.RequestScoped;
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean
- at RequestScoped
-public class FailBean {
-
-    public String fail1() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("doesntExist");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/InsertDeleteBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/InsertDeleteBean.java
deleted file mode 100644
index 6024dd5..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/InsertDeleteBean.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.bean.RequestScoped;
-import javax.faces.bean.ManagedBean;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.context.ExternalContext;
-import javax.faces.FacesException;
-
- at ManagedBean
- at RequestScoped
-public class InsertDeleteBean {
-
-    public String insertBefore() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startInsertBefore("hr");
-                writer.writeAttribute("id", "h2before", "id");
-                writer.startElement("h2", null);
-                writer.writeText("BEFORE", null, null);
-                writer.endElement("h2");
-                writer.endInsert();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-
-    public String insertAfter() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                writer.startDocument();
-                writer.startInsertAfter("hr");
-                writer.startElement("h2", null);
-                writer.writeAttribute("id", "h2after", "id");
-                writer.writeText("AFTER", null, null);
-                writer.endElement("h2");
-                writer.endInsert();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-
-
-    public String removeBefore() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                writer.startDocument();
-                writer.delete("h2before");
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-
-    public String removeAfter() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                writer.startDocument();
-                writer.delete("h2after");
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;    
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/InvalidXMLBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/InvalidXMLBean.java
deleted file mode 100644
index 887068d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/InvalidXMLBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.FacesException;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialResponseWriter;
-
- at ManagedBean
- at RequestScoped
-public class InvalidXMLBean {
-
-    public String emitBadXML() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewBody");
-                writer.startElement("body",null);
-                writer.startElement("h2", null);
-                writer.writeAttribute("id", "h2", "id");
-                writer.write("Bread & Butter");
-                writer.endElement("h2");
-                writer.endElement("body");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/RedirectBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/RedirectBean.java
deleted file mode 100644
index 9d2b2a0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/RedirectBean.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax;
-
-import javax.faces.bean.RequestScoped;
-import javax.faces.bean.ManagedBean;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.FacesException;
-import java.io.IOException;
-
- at ManagedBean
- at RequestScoped
-public class RedirectBean {
-
-    public String redirect() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        String url = extContext.encodeActionURL(ctx.getApplication().getViewHandler().getActionURL(ctx, "/ajax/redirecttarget.xhtml"));
-        try {
-            extContext.redirect(url);
-        } catch (IOException ioe) {
-            throw new FacesException(ioe);
-        }
-        return null;
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/BrowserAttributesBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/BrowserAttributesBean.java
deleted file mode 100644
index d65ea7d..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/BrowserAttributesBean.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax.browser;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.FacesException;
-import java.util.Map;
-import java.util.TreeMap;
-
- at ManagedBean(name="browserAttributes")
- at RequestScoped
- at SuppressWarnings("unused")
-public class BrowserAttributesBean {
-
-    public String updateValue() {
-        Map<String,String> map = new TreeMap<String,String>();
-        map.put("value","PASSED");
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.updateAttributes("checkvalue",map);
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateStyle() {
-        Map<String,String> map = new TreeMap<String,String>();
-        map.put("value","green means PASSED");
-        map.put("style","background-color: green;");
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.updateAttributes("checkvalue",map);
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateClass() {
-        Map<String,String> map = new TreeMap<String,String>();
-        map.put("value","green means PASSED");
-        map.put("class","green");
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.updateAttributes("checkvalue",map);
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateEvent() {
-        Map<String,String> map = new TreeMap<String,String>();
-        map.put("style","display: inline;");
-        map.put("value","Click Me");
-        map.put("onclick","checkPass();");
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.updateAttributes("checkbutton",map);
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/EvalScriptBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/EvalScriptBean.java
deleted file mode 100644
index 62ce267..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/EvalScriptBean.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax.browser;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.FacesException;
-
- at ManagedBean
- at RequestScoped
- at SuppressWarnings("unused")
-public class EvalScriptBean {
-
-    public String doEval() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startEval();
-                writer.write("var marker = true; checkPass();");
-                writer.endEval();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-
-    public String doInline() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("updated");
-                writer.startElement("div", null);
-                writer.writeAttribute("id","updated","id");
-                writer.startElement("script",null);
-                writer.writeAttribute("type","text/javascript","type");
-                writer.write("var marker = true; checkPass();");
-                writer.endElement("script");
-                writer.endElement("div");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String doUpdateRootAllEval() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("html",null);
-                writer.startElement("head",null);
-                writer.startElement("title",null);
-                writer.writeText("PASSED",null);
-                writer.endElement("title");
-                writer.endElement("head");
-                writer.startElement("body",null);
-                writer.startElement("span",null);
-                writer.writeAttribute("id","target","id");
-                writer.endElement("span");
-                writer.startElement("script",null);
-                writer.writeAttribute("type","text/javascript","type");
-                writer.write("var marker = true; checkPass();");
-                writer.endElement("script");
-                writer.endElement("body");
-                writer.endElement("html");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-        public String doUpdateRootSimpleEval() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("span",null);
-                writer.writeAttribute("id","target","id");
-                writer.endElement("span");
-                writer.startElement("script",null);
-                writer.writeAttribute("type","text/javascript","type");
-                writer.write("var marker = true; checkPass();");
-                writer.endElement("script");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String doUpdateBodyTagEval() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewBody");
-                writer.startElement("body",null);
-                writer.startElement("span",null);
-                writer.writeAttribute("id","target","id");
-                writer.endElement("span");
-                writer.startElement("script",null);
-                writer.writeAttribute("type","text/javascript","type");
-                writer.write("var marker = true; checkPass();");
-                writer.endElement("script");
-                writer.endElement("body");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String insertBeforeEval() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startInsertBefore("target");
-                writer.writeAttribute("id", "target2", "id");
-                writer.startElement("script",null);
-                writer.writeAttribute("type","text/javascript","type");
-                writer.write("var marker = true; checkPass();");
-                writer.endElement("script");
-                writer.endInsert();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/SelectChangeBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/SelectChangeBean.java
deleted file mode 100644
index 662cfdf..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/SelectChangeBean.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.systest.model.ajax.browser;
-
-import javax.faces.bean.RequestScoped;
-import javax.faces.bean.ManagedBean;
-
- at ManagedBean(name="selectChange")
- at RequestScoped
- at SuppressWarnings("unused")
-public class SelectChangeBean {
-
-    private String string = "Pending";
-    private String[] sarray;
-    private boolean bool;
-
-    public String getString() {
-        return string;
-    }
-
-    public void setString(String string) {
-        this.string = string;
-    }
-
-    public String[] getSarray() {
-        return sarray;
-    }
-
-    public void setSarray(String[] sarray) {
-        this.sarray = sarray;
-        if (sarray.length == 0) {
-            string = "Pending";
-        } else {
-            string = "";
-        }
-        for (String str : sarray) {
-            if (!"".equals(string)) {
-                string = string + " ";
-            }
-            string = string + str;
-        }
-    }
-
-    public boolean isBool() {
-        return bool;
-    }
-
-    public void setBool(boolean bool) {
-        this.bool = bool;
-        if (bool) {
-            string = "PASSED";
-        } else {
-            string = "Pending";
-        }
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/UpdateRootBean.java b/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/UpdateRootBean.java
deleted file mode 100644
index d2db48e..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/model/ajax/browser/UpdateRootBean.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.model.ajax.browser;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.FacesException;
-
- at ManagedBean
- at RequestScoped
- at SuppressWarnings("unused")
-public class UpdateRootBean {
-
-    public String updateRootSimple() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeText("PASSED",null);
-                writer.endElement("span");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateRootBody() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("body",null);
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeText("PASSED",null);
-                writer.endElement("span");
-                writer.endElement("body");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateRootAll() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("html",null);
-                writer.startElement("head",null);
-                writer.startElement("title",null);
-                writer.writeText("PASSED",null);
-                writer.endElement("title");
-                writer.endElement("head");
-                writer.startElement("body",null);
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeText("PASSED",null);
-                writer.endElement("span");
-                writer.endElement("body");
-                writer.endElement("html");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateRootFaulty() {  // missing end tags
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("html",null);
-                writer.startElement("head",null);
-                writer.startElement("title",null);
-                writer.writeText("PASSED",null);
-                writer.endElement("title");
-                writer.endElement("head");
-                writer.startElement("body",null);
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeText("PASSED",null);
-                writer.endElement("span");
-                writer.endElement("body");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateBodySimple() {  // missing end tags
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeText("PASSED",null);
-                writer.endElement("span");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateBodyTag() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewBody");
-                writer.startElement("body",null);
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeText("PASSED",null);
-                writer.endElement("span");
-                writer.endElement("body");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateHead() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewHead");
-                writer.startElement("head",null);
-                writer.startElement("title",null);
-                writer.writeText("PASSED",null);
-                writer.endElement("title");
-                writer.endElement("head");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateRootAllEvent() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("html",null);
-                writer.startElement("head",null);
-                writer.startElement("title",null);
-                writer.writeText("PASSED",null);
-                writer.endElement("title");
-                writer.endElement("head");
-                writer.startElement("body",null);
-                writer.startElement("input", null);
-                writer.writeAttribute("id","newbutton","id");
-                writer.writeAttribute("type","button","type");
-                writer.writeAttribute("onclick","checkPass();","onclick");
-                writer.writeAttribute("value","Click Me","value");
-                writer.endElement("input");
-                writer.endElement("body");
-                writer.endElement("html");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateRootBodyStyle() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("html",null);
-                writer.startElement("head",null);
-                writer.startElement("title",null);
-                writer.writeText("PASSED",null);
-                writer.endElement("title");
-                writer.endElement("head");
-                writer.startElement("body",null);
-                writer.writeAttribute("id","bodyId","id");
-                writer.writeAttribute("style", "background-color: green","style");
-                writer.writeText("Green means PASSED",null);
-                writer.endElement("body");
-                writer.endElement("html");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateRootSimpleEvent() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("input", null);
-                writer.writeAttribute("id","newbutton","id");
-                writer.writeAttribute("type","button","type");
-                writer.writeAttribute("onclick","checkPass();","onclick");
-                writer.writeAttribute("value","Click Me","value");
-                writer.endElement("input");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-
-    public String updateRootAllStyle() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("html",null);
-                writer.startElement("head",null);
-                writer.startElement("title",null);
-                writer.writeText("PASSED",null);
-                writer.endElement("title");
-                writer.endElement("head");
-                writer.startElement("body",null);
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeAttribute("style", "background-color: green","style");
-                writer.writeText("Green means PASSED",null);
-                writer.endElement("span");
-                writer.endElement("body");
-                writer.endElement("html");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-    public String updateRootSimpleStyle() {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ExternalContext extContext = ctx.getExternalContext();
-        if (ctx.getPartialViewContext().isAjaxRequest()) {
-            try {
-                extContext.setResponseContentType("text/xml");
-                extContext.addResponseHeader("Cache-Control", "no-cache");
-                PartialResponseWriter writer =
-                      ctx.getPartialViewContext().getPartialResponseWriter();
-                writer.startDocument();
-                writer.startUpdate("javax.faces.ViewRoot");
-                writer.startElement("span", null);
-                writer.writeAttribute("id","newvalue","id");
-                writer.writeAttribute("style", "background-color: green","style");
-                writer.writeText("Green means PASSED",null);
-                writer.endElement("span");
-                writer.endUpdate();
-                writer.endDocument();
-                writer.flush();
-                ctx.responseComplete();
-            } catch (Exception e) {
-                throw new FacesException(e);
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/render/Base64.java b/jsf-ri/systest/src/com/sun/faces/systest/render/Base64.java
deleted file mode 100644
index a607166..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/render/Base64.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * $Header: /cvs/javaserverfaces-sources/jsf-ri/systest/src/com/sun/faces/systest/render/Base64.java,v 1.2 2007/04/27 22:01:16 ofung Exp $
- * $Revision: 1.2 $
- * $Date: 2007/04/27 22:01:16 $
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "HttpClient", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package com.sun.faces.systest.render;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-
-/**
- * <p>Base64 encoder and decoder.</p>
- * <p/>
- * This class provides encoding/decoding methods for
- * the Base64 encoding as defined by RFC 2045,
- * N. Freed and N. Borenstein.
- * RFC 2045: Multipurpose Internet Mail Extensions (MIME)
- * Part One: Format of Internet Message Bodies. Reference
- * 1996. Available at: http://www.ietf.org/rfc/rfc2045.txt
- * </p>
- *
- * @@author Jeffrey Rodriguez
- * @@version $Revision: 1.2 $ $Date: 2007/04/27 22:01:16 $
- */
-public final class Base64 {
-
-    static protected final String DEFAULT_CHAR_ENCODING = "ISO-8859-1";
-    static private final int BASELENGTH = 255;
-    static private final int LOOKUPLENGTH = 64;
-    static private final int TWENTYFOURBITGROUP = 24;
-    static private final int EIGHTBIT = 8;
-    static private final int SIXTEENBIT = 16;
-    static private final int SIXBIT = 6;
-    static private final int FOURBYTE = 4;
-    static private final int SIGN = -128;
-    static private final byte PAD = (byte) '=';
-    static private final byte[] EMPTY_BYTE_ARRAY = new byte[0];
-    static private byte[] base64Alphabet = new byte[BASELENGTH];
-    static private byte[] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];
-
-
-    static {
-
-        for (int i = 0; i < BASELENGTH; i++) {
-            base64Alphabet[i] = -1;
-        }
-        for (int i = 'Z'; i >= 'A'; i--) {
-            base64Alphabet[i] = (byte) (i - 'A');
-        }
-        for (int i = 'z'; i >= 'a'; i--) {
-            base64Alphabet[i] = (byte) (i - 'a' + 26);
-        }
-
-        for (int i = '9'; i >= '0'; i--) {
-            base64Alphabet[i] = (byte) (i - '0' + 52);
-        }
-
-        base64Alphabet['+'] = 62;
-        base64Alphabet['/'] = 63;
-
-        for (int i = 0; i <= 25; i++)
-            lookUpBase64Alphabet[i] = (byte) ('A' + i);
-
-        for (int i = 26, j = 0; i <= 51; i++, j++)
-            lookUpBase64Alphabet[i] = (byte) ('a' + j);
-
-        for (int i = 52, j = 0; i <= 61; i++, j++)
-            lookUpBase64Alphabet[i] = (byte) ('0' + j);
-        lookUpBase64Alphabet[62] = (byte) '+';
-        lookUpBase64Alphabet[63] = (byte) '/';
-
-    }
-
-    //
-    // Constructors and Initializers
-    //
-    private Base64() {
-
-        throw new IllegalStateException();
-
-    }
-
-
-    public static boolean isBase64(String isValidString) {
-        return (isBase64(isValidString.getBytes()));
-    }
-
-
-    public static boolean isBase64(byte octect) {
-        // Should we ignore white space?
-        return (octect == PAD || base64Alphabet[octect] != -1);
-    }
-
-
-    public static boolean isBase64(byte[] arrayOctect) {
-        int length = arrayOctect.length;
-        if (length == 0) {
-            return true;
-        }
-        for (int i = 0; i < length; i++) {
-            if (!Base64.isBase64(arrayOctect[i]))
-                return false;
-        }
-        return true;
-    }
-
-
-    /**
-     * Encodes hex octects into Base64
-     *
-     * @@param binaryData Array containing binaryData
-     * @@return Base64-encoded array
-     */
-    public static byte[] encode(byte[] binaryData) {
-        if (binaryData == null)
-            binaryData = EMPTY_BYTE_ARRAY;
-
-        int lengthDataBits = binaryData.length * EIGHTBIT;
-        int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
-        int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
-        byte encodedData[] = null;
-
-
-        if (fewerThan24bits != 0) //data not divisible by 24 bit
-            encodedData = new byte[(numberTriplets + 1) * 4];
-        else // 16 or 8 bit
-            encodedData = new byte[numberTriplets * 4];
-
-        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
-
-        int encodedIndex = 0;
-        int dataIndex = 0;
-        int i = 0;
-        for (i = 0; i < numberTriplets; i++) {
-
-            dataIndex = i * 3;
-            b1 = binaryData[dataIndex];
-            b2 = binaryData[dataIndex + 1];
-            b3 = binaryData[dataIndex + 2];
-
-            l = (byte) (b2 & 0x0f);
-            k = (byte) (b1 & 0x03);
-
-            encodedIndex = i * 4;
-            byte val1 = ((b1 & SIGN) == 0) ?
-                (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
-
-            byte val2 = ((b2 & SIGN) == 0) ?
-                (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);
-            byte val3 = ((b3 & SIGN) == 0) ?
-                (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc);
-
-            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];
-            encodedData[encodedIndex + 1] =
-                lookUpBase64Alphabet[val2 | (k << 4)];
-            encodedData[encodedIndex + 2] =
-                lookUpBase64Alphabet[(l << 2) | val3];
-            encodedData[encodedIndex + 3] = lookUpBase64Alphabet[b3 & 0x3f];
-        }
-
-        // form integral number of 6-bit groups
-        dataIndex = i * 3;
-        encodedIndex = i * 4;
-        if (fewerThan24bits == EIGHTBIT) {
-            b1 = binaryData[dataIndex];
-            k = (byte) (b1 & 0x03);
-            byte val1 = ((b1 & SIGN) == 0) ?
-                (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
-            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];
-            encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4];
-            encodedData[encodedIndex + 2] = PAD;
-            encodedData[encodedIndex + 3] = PAD;
-        } else if (fewerThan24bits == SIXTEENBIT) {
-            b1 = binaryData[dataIndex];
-            b2 = binaryData[dataIndex + 1];
-            l = (byte) (b2 & 0x0f);
-            k = (byte) (b1 & 0x03);
-
-            byte val1 = ((b1 & SIGN) == 0) ?
-                (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);
-            byte val2 = ((b2 & SIGN) == 0) ?
-                (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);
-
-            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];
-            encodedData[encodedIndex + 1] =
-                lookUpBase64Alphabet[val2 | (k << 4)];
-            encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2];
-            encodedData[encodedIndex + 3] = PAD;
-        }
-        return encodedData;
-    }
-
-
-    /**
-     * Returns the base64 encoding of String.  First the String is
-     * converted to byte[], using the character encoding of
-     * <code>ISO-8859-1</code>.
-     *
-     * @@param data String of data to convert
-     * @@return Base64-encoded String
-     */
-    public static String encode(String data) {
-        try {
-            return encode(data, DEFAULT_CHAR_ENCODING);
-        } catch (UnsupportedEncodingException uee) {
-            throw new IllegalStateException(uee.toString());
-        }
-    }
-
-
-    /**
-     * Returns the base64 encoding of String (by first converting to
-     * byte[], using the specified <code>charEncoding</code>).  The
-     * return value is also a String.  The Default
-     * <code>codeEncoding</chode> is <code>ISO-8859-1</code>.
-     *
-     * @@param data String of data to convert
-     * @@param charEncoding the character encoding to use when converting
-     * a String to a byte[]
-     * @@return Base64-encoded String
-     */
-    public static String encode(String data, String charEncoding)
-        throws UnsupportedEncodingException {
-
-        // Check arguments
-        if (data == null)
-            data = "";
-        if (charEncoding == null)
-            charEncoding = DEFAULT_CHAR_ENCODING;
-
-        // Convert to byte[]
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        OutputStreamWriter osw = new OutputStreamWriter(bos, charEncoding);
-        try {
-            osw.write(data);
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe.toString());
-        }
-
-        // Encode
-        byte[] encodedData = encode(bos.toByteArray());
-
-        // Convert to String
-        if (encodedData == null)
-            return "";
-        bos = new ByteArrayOutputStream(encodedData.length);
-        try {
-            bos.write(encodedData);
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe.toString());
-        }
-
-        return bos.toString(charEncoding);
-    }
-
-
-    /**
-     * Decodes Base64 data into octects
-     *
-     * @@param binaryData Byte array containing Base64 data
-     * @@return Array containing decoded data.
-     */
-    public static byte[] decode(byte[] base64Data) {
-        // Should we throw away anything not in base64Data ?
-
-        // handle the edge case, so we don't have to worry about it later
-        if (base64Data.length == 0) {
-            return EMPTY_BYTE_ARRAY;
-        }
-
-        int numberQuadruple = base64Data.length / FOURBYTE;
-        byte decodedData[] = null;
-        byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0;
-
-        int encodedIndex = 0;
-        int dataIndex = 0;
-        {
-            // this block sizes the output array properly - rlw
-            int lastData = base64Data.length;
-            // ignore the '=' padding
-            while (base64Data[lastData - 1] == PAD) {
-                if (--lastData == 0) {
-                    return EMPTY_BYTE_ARRAY;
-                }
-            }
-            decodedData = new byte[lastData - numberQuadruple];
-        }
-
-        for (int i = 0; i < numberQuadruple; i++) {
-            dataIndex = i * 4;
-            marker0 = base64Data[dataIndex + 2];
-            marker1 = base64Data[dataIndex + 3];
-
-            b1 = base64Alphabet[base64Data[dataIndex]];
-            b2 = base64Alphabet[base64Data[dataIndex + 1]];
-
-            if (marker0 != PAD && marker1 != PAD) {
-                //No PAD e.g 3cQl
-                b3 = base64Alphabet[marker0];
-                b4 = base64Alphabet[marker1];
-
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-                decodedData[encodedIndex + 1] =
-                    (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-                decodedData[encodedIndex + 2] = (byte) (b3 << 6 | b4);
-            } else if (marker0 == PAD) {
-                //Two PAD e.g. 3c[Pad][Pad]
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-            } else if (marker1 == PAD) {
-                //One PAD e.g. 3cQ[Pad]
-                b3 = base64Alphabet[marker0];
-
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-                decodedData[encodedIndex + 1] =
-                    (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-            }
-            encodedIndex += 3;
-        }
-        return decodedData;
-    }
-
-}
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/render/ButtonRenderer.java b/jsf-ri/systest/src/com/sun/faces/systest/render/ButtonRenderer.java
deleted file mode 100644
index a9befb4..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/render/ButtonRenderer.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// ButtonRenderer.java
-
-package com.sun.faces.systest.render;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UINamingContainer;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.ActionEvent;
-import javax.faces.render.Renderer;
-
-import java.io.IOException;
-import java.util.Map;
-
-/**
- * <B>ButtonRenderer</B> is a class that renders the current value of
- * <code>UICommand<code> as a Button.
- */
-
-public class ButtonRenderer extends Renderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.COMMANDBUTTON);
-
-    public static final String CLEAR_HIDDEN_FIELD_FN_NAME = 
-         "clearFormHiddenParams";
-    public static final String FORM_CLIENT_ID_ATTR = 
-         "com.sun.faces.FORM_CLIENT_ID_ATTR";
-
-    //
-    // Protected Constants
-    //
-    // Log instance for this class
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-    
-    //
-    // Methods From Renderer
-    //
-
-    public void decode(FacesContext context, UIComponent component) {
-        if (context == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-        if (component == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "component"));
-        }
-
-        // If the component is disabled, do not change the value of the
-        // component, since its state cannot be changed.
-        if (Util.componentIsDisabledOrReadonly(component)) {
-            return;
-        } 
-
-
-        // Was our command the one that caused this submission?
-        // we don' have to worry about getting the value from request parameter
-        // because we just need to know if this command caused the submission. We
-        // can get the command name by calling currentValue. This way we can 
-        // get around the IE bug.
-        String clientId = component.getClientId(context);
-        Map requestParameterMap = context.getExternalContext()
-            .getRequestParameterMap();
-        String value = (String) requestParameterMap.get(clientId);
-        if (value == null) {
-            if (requestParameterMap.get(clientId + ".x") == null &&
-                requestParameterMap.get(clientId + ".y") == null) {
-                return;
-            }
-        }
-
-        String type = (String) component.getAttributes().get("type");
-        if ((type != null) && (type.toLowerCase().equals("reset"))) {
-            return;
-        }
-        ActionEvent actionEvent = new ActionEvent(component);
-        component.queueEvent(actionEvent);
-
-
-        return;
-    }
-
-
-    public void encodeBegin(FacesContext context, UIComponent component)
-        throws IOException {
-        if (context == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-        if (component == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "component"));
-        }
-        // suppress rendering if "rendered" property on the component is
-        // false.
-        if (!component.isRendered()) {
-            return;
-        }
-        
-        // Which button type (SUBMIT, RESET, or BUTTON) should we generate?
-        String type = (String) component.getAttributes().get("type");
-        String styleClass = null;
-        if (type == null) {
-            type = "submit";
-            // This is needed in the decode method
-            component.getAttributes().put("type", type);
-        }
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert (writer != null);
-
-        String label = "";
-        Object value = ((UICommand) component).getValue();
-        if (value != null) {
-            label = value.toString();
-        }
-        String imageSrc = (String) component.getAttributes().get("image");
-        writer.startElement("input", component);
-        writeIdAttributeIfNecessary(context, writer, component);
-	String clientId = component.getClientId(context);
-        if (imageSrc != null) {
-            writer.writeAttribute("type", "image", "type");
-            writer.writeURIAttribute("src", src(context, imageSrc), "image");
-            writer.writeAttribute("name", clientId, "clientId");
-        } else {
-            writer.writeAttribute("type", type.toLowerCase(), "type");
-            writer.writeAttribute("name", clientId, "clientId");
-            writer.writeAttribute("value", label, "value");
-        }
-        
-        // look up the clientId of the form in request scope to arrive the name of
-        // the javascript function to invoke from the onclick event handler.
-        // PENDING (visvan) we need to fix this dependency between the renderers.
-        // This solution is only temporary.
-        Map requestMap = context.getExternalContext().getRequestMap();
-        String formClientId = (String)requestMap.get(FORM_CLIENT_ID_ATTR);
-        
-        StringBuffer sb = new StringBuffer();
-        // call the javascript function that clears the all the hidden field
-        // parameters in the form.
-        sb.append(CLEAR_HIDDEN_FIELD_FN_NAME);
-        if (formClientId != null) {
-            sb.append("_").append(formClientId.replace(UINamingContainer.getSeparatorChar(context), '_'));
-        }
-        sb.append("(this.form.id);");
-        // append user specified script for onclick if any.
-        String onclickAttr = (String)component.getAttributes().get("onclick");
-        if (onclickAttr != null && onclickAttr.length() != 0) {
-            sb.append(onclickAttr);
-            
-        }
-        writer.writeAttribute("onclick", sb.toString(), null);
-
-        RenderKitUtils.renderPassThruAttributes(context,
-              writer,
-                                                component,
-                                                ATTRIBUTES);
-        RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-        if (null != (styleClass = (String)
-            component.getAttributes().get("styleClass"))) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        writer.endElement("input");
-    }
-
-    public void encodeEnd(FacesContext context, UIComponent component)
-        throws IOException {
-        if (context == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-        if (component == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "component"));
-        }
-    }
-
-    //
-    // General Methods
-    //
-       
-    private String src(FacesContext context, String value) {
-        if (value == null) {
-            return "";
-        }
-        value = context.getApplication().getViewHandler().
-            getResourceURL(context, value);
-        return (context.getExternalContext().encodeResourceURL(value));
-    }
-                                                                                                          
-    private boolean shouldWriteIdAttribute(UIComponent component) {
-        String id;
-        return (null != (id = component.getId()) &&
-            !id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX));
-    }
-
-    private void writeIdAttributeIfNecessary(FacesContext context,
-                                               ResponseWriter writer,
-                                               UIComponent component) {
-        String id;
-        if (shouldWriteIdAttribute(component)) {
-            try {
-                writer.writeAttribute("id", component.getClientId(context),
-                                      "id");
-            } catch (IOException e) {
-            }
-        }
-    }
-
-
-} // end of class ButtonRenderer
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/render/CustomRenderKitImpl.java b/jsf-ri/systest/src/com/sun/faces/systest/render/CustomRenderKitImpl.java
deleted file mode 100644
index 2cfa77b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/render/CustomRenderKitImpl.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// CustomRenderKitImpl.java
-
-package com.sun.faces.systest.render;
-
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.renderkit.ResponseStateManagerImpl;
-
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.Renderer;
-import javax.faces.render.ResponseStateManager;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.HashMap;
-
-/**
- * <B>CustomRenderKitImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class CustomRenderKitImpl extends RenderKit {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    // used for ResponseWriter creation;
-    private static String HTML_CONTENT_TYPE = "text/html";
-    private static String CHAR_ENCODING = "ISO-8859-1";
-//
-// Ivars used during actual client lifetime
-//
-
-// Relationship Instance Variables
-
-    /**
-     * Keys are String renderer family.  Values are HashMaps.  Nested
-     * HashMap keys are Strings for the rendererType, and values are the
-     * Renderer instances themselves.
-     */
-
-    private HashMap rendererFamilies;
-
-    private ResponseStateManager responseStateManager = null;
-//
-// Constructors and Initializers    
-//
-
-    public CustomRenderKitImpl() {
-        super();
-	rendererFamilies = new HashMap();
-    }
-
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-
-    //
-    // Methods From RenderKit
-    //
-
-    public void addRenderer(String family, String rendererType,
-                            Renderer renderer) {
-        if (family == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "family");
-            throw new NullPointerException(message);
-                
-        }
-        if (rendererType == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "rendererType");
-            throw new NullPointerException(message);
-                
-        }
-        if (renderer == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderer");
-            throw new NullPointerException(message);
-                
-        }
-        HashMap renderers = null;
-
-        synchronized (rendererFamilies) {
-	    // PENDING(edburns): generics would be nice here.
-	    if (null == (renderers = (HashMap) rendererFamilies.get(family))) {
-		rendererFamilies.put(family, renderers = new HashMap());
-	    }
-            renderers.put(rendererType, renderer);
-        }
-    }
-
-
-    public Renderer getRenderer(String family, String rendererType) {
-
-        if (rendererType == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "rendererType");
-            throw new NullPointerException(message);
-        }
-        if (family == null) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "family");
-            throw new NullPointerException(message);
-        }
-
-        assert (rendererFamilies != null);
-
-        HashMap renderers = null;
-        Renderer renderer = null;
-
-	if (null != (renderers = (HashMap) rendererFamilies.get(family))) {
-	    renderer = (Renderer) renderers.get(rendererType);
-	}
-	
-        return renderer;
-    }
-
-
-    public synchronized ResponseStateManager getResponseStateManager() {
-        if (responseStateManager == null) {
-            responseStateManager = new ResponseStateManagerImpl();
-        }
-        return responseStateManager;
-    }
-
-
-    public ResponseWriter createResponseWriter(Writer writer, String contentTypeList,
-                                               String characterEncoding) {
-        if (writer == null) {
-            return null;
-        }
-        // Set the default content type to html;  However, if a content type list
-        // argument was specified, make sure it contains an html content type;
-        // PENDING(rogerk) ideally, we want to analyze the content type string
-        // in more detail, to determine the preferred content type - as outlined in
-        // http://www.ietf.org/rfc/rfc2616.txt?number=2616 - Section 14.1
-        // (since this is not an html renderkit);
-        //
-        String contentType = HTML_CONTENT_TYPE;
-        if (contentTypeList != null) {
-            if (contentTypeList.indexOf(contentType) < 0) {
-                throw new IllegalArgumentException(MessageUtils.getExceptionMessageString(
-                    MessageUtils.CONTENT_TYPE_ERROR_MESSAGE_ID));
-            }
-        }
-        if (characterEncoding == null) {
-            characterEncoding = CHAR_ENCODING;
-        }
-
-        return new CustomResponseWriter(writer, contentType, characterEncoding);
-    }
-
-
-    public ResponseStream createResponseStream(OutputStream out) {
-        final OutputStream output = out;
-        return new ResponseStream() {
-            public void write(int b) throws IOException {
-                output.write(b);
-            }
-
-
-            public void write(byte b[]) throws IOException {
-                output.write(b);
-            }
-
-
-            public void write(byte b[], int off, int len) throws IOException {
-                output.write(b, off, len);
-            }
-
-
-            public void flush() throws IOException {
-                output.flush();
-            }
-
-
-            public void close() throws IOException {
-                output.close();
-            }
-        };
-    }       
-    // The test for this class is in TestRenderKit.java
-
-} // end of class CustomRenderKitImpl
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/render/CustomResponseStateManagerImpl.java b/jsf-ri/systest/src/com/sun/faces/systest/render/CustomResponseStateManagerImpl.java
deleted file mode 100644
index 6db0f00..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/render/CustomResponseStateManagerImpl.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.render;
-
-import javax.faces.application.StateManager;
-import javax.faces.application.StateManager.SerializedView;
-import javax.faces.context.FacesContext;
-import javax.faces.render.ResponseStateManager;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Map;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import com.sun.faces.util.Util;
-
-
-/**
- * <B>RenderKitImpl</B> is a class ...
- */
-
-public class CustomResponseStateManagerImpl extends ResponseStateManager {
-
-    //
-    // Protected Constants
-    //
-    private static final String FACES_VIEW_STATE =
-        "com.sun.faces.FACES_VIEW_STATE";
-    
-     private static final String COMPRESS_STATE_PARAM =
-        "com.sun.faces.COMPRESS_STATE";
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-    private Boolean compressStateSet = null;
-
-    
-    //
-    // Ivars used during actual client lifetime
-    //
-
-    // Relationship Instance Variables
-
-    
-    //
-    // Constructors and Initializers    
-    //
-
-    public CustomResponseStateManagerImpl() {
-        super();       
-    }
-
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-
-    //
-    // Methods From ResponseStateManager
-    //
-
-    public Object getState(FacesContext context, String viewId) {
-        Object stateArray[] = { getTreeStructure(context, viewId),
-                                getComponentState(context) };
-        return stateArray;
-    }
-
-    public boolean isPostback(FacesContext context) {
-	boolean result = context.getExternalContext().getRequestParameterMap().
-                containsKey(javax.faces.render.ResponseStateManager.VIEW_STATE_PARAM);
-	return result;
-    }
-
-    private Object getComponentState(FacesContext context) {
-
-        // requestMap is a local variable so we don't need to synchronize
-        Map requestMap = context.getExternalContext().getRequestMap();
-        Object state = requestMap.get(FACES_VIEW_STATE);
-        // null out the temporary attribute, since we don't need it anymore.
-        requestMap.remove(FACES_VIEW_STATE);
-        return state;
-    }
-
-    private Object getTreeStructure(FacesContext context,
-                                            String treeId) {
-	StateManager stateManager = Util.getStateManager(context);
-        
-	Map requestParamMap = context.getExternalContext()
-	    .getRequestParameterMap();
-	
-	String viewString = (String) requestParamMap.get(
-							 javax.faces.render.ResponseStateManager.VIEW_STATE_PARAM);
-	Object structure = null;
-	if (viewString == null) {
-	    return null;
-	}
-	
-	if (stateManager.isSavingStateInClient(context)) {
-	    Object state = null;
-	    ByteArrayInputStream bis = null;
-	    GZIPInputStream gis = null;
-	    ObjectInputStream ois = null;
-	    boolean compress = isCompressStateSet(context);
-	   
-	    try {
-                 byte[] bytes = Base64.decode(viewString.getBytes());
-		bis = new ByteArrayInputStream(bytes);
-		if (isCompressStateSet(context)) {
-		    gis = new GZIPInputStream(bis);
-		    ois = new ObjectInputStream(gis);
-		} else {
-		    ois = new ObjectInputStream(bis);
-		}
-		structure = ois.readObject();
-		state = ois.readObject();
-		Map requestMap = context.getExternalContext().getRequestMap();
-		// store the state object temporarily in request scope
-		// until it is processed by getComponentStateToRestore
-		// which resets it.
-		requestMap.put(FACES_VIEW_STATE, state);
-		bis.close();
-		if ( compress) {
-		    gis.close();
-		}
-		ois.close();
-	    } catch (java.io.OptionalDataException ode) {
-	    } catch (java.lang.ClassNotFoundException cnfe) {
-	    } catch (java.io.IOException iox) {
-	    }
-	}
-	else {
-	    structure = viewString;
-	}
-	return structure;
-    }
-
-    public void writeState(FacesContext context,
-                           Object state) throws IOException {
-        SerializedView view = null;
-        if (state instanceof SerializedView) {
-            view = (SerializedView) state;
-        }
-        else {
-            Object[] stateArray = (Object[])state;
-            StateManager stateManager =
-                context.getApplication().getStateManager();
-            view = stateManager.new SerializedView(stateArray[0], null);
-        }
-        writeSerializedState(context, view);
-    }
-
-    private void writeSerializedState(FacesContext context, SerializedView view)
-        throws IOException {
-        String hiddenField = null;
-	StateManager stateManager = Util.getStateManager(context);
-	
-	if (stateManager.isSavingStateInClient(context)) {
-	    GZIPOutputStream zos = null;
-	    ObjectOutputStream oos = null;
-	    boolean compress = isCompressStateSet(context);
-	    
-	    ByteArrayOutputStream bos = new ByteArrayOutputStream();
-	    if (compress) {
-		zos = new GZIPOutputStream(bos);
-		oos = new ObjectOutputStream(zos);
-	    } else {
-		oos = new ObjectOutputStream(bos);    
-	    }
-	    oos.writeObject(view.getStructure());
-	    oos.writeObject(view.getState());
-	    oos.close();
-	    if (compress) {
-		zos.close();
-	    }
-            byte[] securedata = bos.toByteArray();
-	    bos.close();
-	    
-	    hiddenField = " <input type=\"hidden\" name=\""
-		+ javax.faces.render.ResponseStateManager.VIEW_STATE_PARAM + "\"" + " value=\"" +
-                    (new String(Base64.encode(securedata), "ISO-8859-1"))
-		+ "\" />\n ";
-	}
-	else {
-	    hiddenField = " <input type=\"hidden\" name=\""
-		+ javax.faces.render.ResponseStateManager.VIEW_STATE_PARAM + "\"" + " value=\"" +
-		view.getStructure() +
-		"\" />\n ";
-	    
-	}
-        context.getResponseWriter().write(hiddenField);
-
-        // write this out regardless of state saving mode
-        // Only write it out if there is a default specified, and 
-        // this render kit identifier is not the default.
-        String result = context.getApplication().getDefaultRenderKitId();
-        if ((null != result && !result.equals("CUSTOM")) || result == null) {
-            hiddenField = " <input type=\"hidden\" name=\""
-                + ResponseStateManager.RENDER_KIT_ID_PARAM + "\"" + " value=\"CUSTOM\"" +
-                "\" />\n ";
-            context.getResponseWriter().write(hiddenField);
-        }
-    }
-    
-    private boolean isCompressStateSet(FacesContext context) {
-	if (null != compressStateSet) {
-	    return compressStateSet.booleanValue();
-	}
-	compressStateSet = Boolean.TRUE;
-
-        String compressStateParam = context.getExternalContext().
-            getInitParameter(COMPRESS_STATE_PARAM);
-        if (compressStateParam != null){
-	    compressStateSet = Boolean.valueOf(compressStateParam);
-        }
-	return compressStateSet.booleanValue();
-    }
-
-
-} // end of class CustomResponseStateManagerImpl
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/render/CustomResponseWriter.java b/jsf-ri/systest/src/com/sun/faces/systest/render/CustomResponseWriter.java
deleted file mode 100644
index 57efb23..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/render/CustomResponseWriter.java
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.render;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.ResponseWriter;
-
-import java.io.IOException;
-import java.io.Writer;
-
-import com.sun.faces.util.HtmlUtils;
-import com.sun.faces.util.MessageUtils;
-
-
-/**
- * <p><strong>CustomResponseWriter</strong> is an Html specific implementation
- * of the <code>ResponseWriter</code> abstract class.
- * Kudos to Adam Winer (Oracle) for much of this code.
- */
-public class CustomResponseWriter extends ResponseWriter {
-
-    // Content Type for this Writer.
-    //
-    private String contentType = "text/html";
-
-    // Character encoding of that Writer - this may be null
-    // if the encoding isn't known.
-    //
-    private String encoding = null;
-
-    // Writer to use for output;
-    //
-    private Writer writer = null;
-
-    // True when we need to close a start tag
-    //
-    private boolean closeStart;
-
-    // True when we shouldn't be escaping output (basically,
-    // inside of <script> and <style> elements).
-    //
-    private boolean dontEscape;
-
-    // Internal buffer used when outputting properly escaped information
-    // using HtmlUtils class.
-    //
-    private char[] buffer = new char[1028];
-
-    // Internal buffer for to store the result of String.getChars() for
-    // values passed to the writer as String to reduce the overhead
-    // of String.charAt().  This buffer will be grown, if necessary, to
-    // accomodate larger values.
-    private char[] textBuffer = new char[128];
-
-    private char[] charHolder = new char[1];
-
-
-    /**
-     * Constructor sets the <code>ResponseWriter</code> and
-     * encoding.
-     *
-     * @param writer      the <code>ResponseWriter</code>
-     * @param contentType the content type.
-     * @param encoding    the character encoding.
-     * @throws if the encoding is not recognized.
-     */
-    public CustomResponseWriter(Writer writer, String contentType, String encoding)
-        throws FacesException {
-        this.writer = writer;
-        if (null != contentType) {
-            this.contentType = contentType;
-        }
-        this.encoding = encoding;
-
-        // Check the character encoding
-        // Check the character encoding
-        if (!HtmlUtils.validateEncoding(encoding)) {
-            throw new IllegalArgumentException(MessageUtils.getExceptionMessageString(
-                  MessageUtils.ENCODING_ERROR_MESSAGE_ID));    
-        }
-    }
-
-
-    /**
-     * @return the content type such as "text/html" for this ResponseWriter.
-     */
-    public String getContentType() {
-        return contentType;
-    }
-
-
-    /**
-     * @return the character encoding, such as "ISO-8859-1" for this
-     *         ResponseWriter.  Refer to:
-     *         <a href="http://www.iana.org/assignments/character-sets">theIANA</a>
-     *         for a list of character encodings.
-     */
-    public String getCharacterEncoding() {
-        return encoding;
-    }
-
-
-    /**
-     * <p>Write the text that should begin a response.</p>
-     *
-     * @throws IOException if an input/output error occurs
-     */
-    public void startDocument() throws IOException {
-        // do nothing;
-    }
-
-
-    /**
-     * Output the text for the end of a document.
-     */
-    public void endDocument() throws IOException {
-        writer.flush();
-    }
-
-
-    /**
-     * Flush any buffered output to the contained writer.
-     *
-     * @throws IOException if an input/output error occurs.
-     */
-    public void flush() throws IOException {
-        // NOTE: Internal buffer's contents (the ivar "buffer") is
-        // written to the contained writer in the HtmlUtils class - see
-        // HtmlUtils.flushBuffer method; Buffering is done during
-        // writeAttribute/writeText - otherwise, output is written
-        // directly to the writer (ex: writer.write(....)..
-        //
-        // close any previously started element, if necessary
-        closeStartIfNecessary();
-    }
-
-
-    /**
-     * <p>Write the start of an element, up to and including the
-     * element name.  Clients call <code>writeAttribute()</code> or
-     * <code>writeURIAttribute()</code> methods to add attributes after
-     * calling this method.
-     *
-     * @param name                Name of the starting element
-     * @param componentForElement The UIComponent instance that applies to this
-     *                            element.  This argument may be <code>null</code>.
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>name</code>
-     *                              is <code>null</code>
-     */
-    public void startElement(String name, UIComponent componentForElement)
-        throws IOException {
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-        closeStartIfNecessary();
-        char firstChar = name.charAt(0);
-        if ((firstChar == 's') ||
-            (firstChar == 'S')) {
-            if ("script".equalsIgnoreCase(name) ||
-                "style".equalsIgnoreCase(name)) {
-                dontEscape = true;
-            }
-        }
-        
-        
-        //PENDING (horwat) using String as a result of Tomcat char writer
-        //         ArrayIndexOutOfBoundsException (3584)
-        writer.write("<");
-        writer.write(name);
-        closeStart = true;
-    }
-
-
-    /**
-     * <p>Write the end of an element. This method will first
-     * close any open element created by a call to
-     * <code>startElement()</code>.
-     *
-     * @param name Name of the element to be ended
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>name</code>
-     *                              is <code>null</code>
-     */
-    public void endElement(String name) throws IOException {
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-
-        // always turn escaping back on once an element ends
-        dontEscape = false;
-        // See if we need to close the start of the last element
-        if (closeStart) {
-            boolean isEmptyElement = HtmlUtils.isEmptyElement(name);
-
-            if (isEmptyElement) {
-                writer.write(" />");
-                closeStart = false;
-                return;
-            }
-
-            writer.write(">");
-            closeStart = false;
-        }
-
-        writer.write("</");
-        writer.write(name);
-        //PENDING (horwat) using String as a result of Tomcat char writer
-        //         ArrayIndexOutOfBoundsException (3584)
-        writer.write(">");
-    }
-
-
-    /**
-     * <p>Write a properly escaped attribute name and the corresponding
-     * value.  The value text will be converted to a String if
-     * necessary.  This method may only be called after a call to
-     * <code>startElement()</code>, and before the opened element has been
-     * closed.</p>
-     *
-     * @param name                  Attribute name to be added
-     * @param value                 Attribute value to be added
-     * @param componentPropertyName The name of the component property to
-     *                              which this attribute argument applies.  This argument may be
-     *                              <code>null</code>.
-     * @throws IllegalStateException if this method is called when there
-     *                               is no currently open element
-     * @throws IOException           if an input/output error occurs
-     * @throws NullPointerException  if <code>name</code> or
-     *                               <code>value</code> is <code>null</code>
-     */
-    public void writeAttribute(String name, Object value, String componentPropertyName)
-        throws IOException {
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-        if (value == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "value"));
-        }
-
-        Class valueClass = value.getClass();
-
-        // Output Boolean values specially
-        if (valueClass == Boolean.class) {
-            if (Boolean.TRUE.equals(value)) {
-                //PENDING (horwat) using String as a result of
-                //Tomcat char writer ArrayIndexOutOfBoundsException (3584)
-                writer.write(" ");
-                writer.write(name);
-            } else {
-                // Don't write anything for "false" booleans
-            }
-        } else {
-            writer.write(" ");
-            writer.write(name);
-            writer.write("=\"");
-            
-            // write the attribute value
-            ensureTextBufferCapacity(value.toString());
-            HtmlUtils.writeAttribute(writer, true, true, buffer, value.toString(), textBuffer, true);
-            //PENDING (horwat) using String as a result of Tomcat char
-            //        writer ArrayIndexOutOfBoundsException (3584)
-            writer.write("\"");
-        }
-    }
-
-
-    /**
-     * <p>Write a properly encoded URI attribute name and the corresponding
-     * value. The value text will be converted to a String if necessary).
-     * This method may only be called after a call to
-     * <code>startElement()</code>, and before the opened element has been
-     * closed.</p>
-     *
-     * @param name                  Attribute name to be added
-     * @param value                 Attribute value to be added
-     * @param componentPropertyName The name of the component property to
-     *                              which this attribute argument applies.  This argument may be
-     *                              <code>null</code>.
-     * @throws IllegalStateException if this method is called when there
-     *                               is no currently open element
-     * @throws IOException           if an input/output error occurs
-     * @throws NullPointerException  if <code>name</code> or
-     *                               <code>value</code> is <code>null</code>
-     */
-    public void writeURIAttribute(String name, Object value,
-                                  String componentPropertyName)
-        throws IOException {
-        if (name == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name"));
-        }
-        if (value == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "value"));
-        }
-
-        //PENDING (horwat) using String as a result of Tomcat char writer
-        //         ArrayIndexOutOfBoundsException (3584)
-        writer.write(" ");
-        writer.write(name);
-        writer.write("=\"");
-
-        String stringValue = value.toString();
-        ensureTextBufferCapacity(stringValue);
-        // Javascript URLs should not be URL-encoded
-        if (stringValue.startsWith("javascript:")) {
-            HtmlUtils.writeAttribute(writer, true, true, buffer, stringValue, textBuffer, true);
-        } else {
-            HtmlUtils.writeURL(writer, stringValue, textBuffer, encoding);
-        }
-        
-        //PENDING (horwat) using String as a result of Tomcat char writer
-        //         ArrayIndexOutOfBoundsException (3584)
-        writer.write("\"");
-    }
-
-
-    /**
-     * <p>Write a comment string containing the specified text.
-     * The text will be converted to a String if necessary.
-     * If there is an open element that has been created by a call
-     * to <code>startElement()</code>, that element will be closed
-     * first.</p>
-     *
-     * @param comment Text content of the comment
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>comment</code>
-     *                              is <code>null</code>
-     */
-    public void writeComment(Object comment) throws IOException {
-        if (comment == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "comment"));
-        }
-        closeStartIfNecessary();
-        writer.write("<!-- ");
-        writer.write(comment.toString());
-        writer.write(" -->");
-    }
-
-
-    /**
-     * <p>Write a properly escaped object. The object will be converted
-     * to a String if necessary.  If there is an open element
-     * that has been created by a call to <code>startElement()</code>,
-     * that element will be closed first.</p>
-     *
-     * @param text                  Text to be written
-     * @param componentPropertyName The name of the component property to
-     *                              which this text argument applies.  This argument may be <code>null</code>.
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>text</code>
-     *                              is <code>null</code>
-     */
-    public void writeText(Object text, String componentPropertyName)
-        throws IOException {
-        if (text == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
-        }
-        closeStartIfNecessary();
-        if (dontEscape) {
-            writer.write(text.toString());
-        } else {
-            ensureTextBufferCapacity(text.toString());
-            HtmlUtils.writeText(writer, true, true, buffer, text.toString(), textBuffer);
-        }
-    }
-
-
-    /**
-     * <p>Write a properly escaped single character, If there
-     * is an open element that has been created by a call to
-     * <code>startElement()</code>, that element will be closed first.</p>
-     * <p/>
-     * <p>All angle bracket occurrences in the argument must be escaped
-     * using the &gt; &lt; syntax.</p>
-     *
-     * @param text Text to be written
-     * @throws IOException if an input/output error occurs
-     */
-    public void writeText(char text) throws IOException {
-        closeStartIfNecessary();
-        if (dontEscape) {
-            writer.write(text);
-        } else {
-            charHolder[0] = text;
-            HtmlUtils.writeText(writer, true, true, buffer, charHolder);
-        }
-    }
-
-
-    /**
-     * <p>Write properly escaped text from a character array.
-     * The output from this command is identical to the invocation:
-     * <code>writeText(c, 0, c.length)</code>.
-     * If there is an open element that has been created by a call to
-     * <code>startElement()</code>, that element will be closed first.</p>
-     * </p>
-     * <p/>
-     * <p>All angle bracket occurrences in the argument must be escaped
-     * using the &gt; &lt; syntax.</p>
-     *
-     * @param text Text to be written
-     * @throws IOException          if an input/output error occurs
-     * @throws NullPointerException if <code>text</code>
-     *                              is <code>null</code>
-     */
-    public void writeText(char text[]) throws IOException {
-        if (text == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
-        }
-        closeStartIfNecessary();
-        if (dontEscape) {
-            writer.write(text);
-        } else {
-            HtmlUtils.writeText(writer, true, true, buffer, text);
-        }
-    }
-
-
-    /**
-     * <p>Write properly escaped text from a character array.
-     * If there is an open element that has been created by a call
-     * to <code>startElement()</code>, that element will be closed
-     * first.</p>
-     * <p/>
-     * <p>All angle bracket occurrences in the argument must be escaped
-     * using the &gt; &lt; syntax.</p>
-     *
-     * @param text Text to be written
-     * @param off  Starting offset (zero-relative)
-     * @param len  Number of characters to be written
-     * @throws IndexOutOfBoundsException if the calculated starting or
-     *                                   ending position is outside the bounds of the character array
-     * @throws IOException               if an input/output error occurs
-     * @throws NullPointerException      if <code>text</code>
-     *                                   is <code>null</code>
-     */
-    public void writeText(char text[], int off, int len)
-        throws IOException {
-        if (text == null) {
-            throw new NullPointerException(MessageUtils.getExceptionMessageString(
-                MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "text"));
-        }
-        if (off < 0 || off > text.length || len < 0 || len > text.length) {
-            throw new IndexOutOfBoundsException();
-        }
-        closeStartIfNecessary();
-        if (dontEscape) {
-            writer.write(text, off, len);
-        } else {
-            HtmlUtils.writeText(writer, true, true, buffer, text, off, len);
-        }
-    }
-
-
-    // PENDING - Do we need to implement these for this test?
-    public void startCDATA() {
-        throw new IllegalStateException();
-    }
-    public void endCDATA() {
-        throw new IllegalStateException();
-    }
-
-    /**
-     * <p>Create a new instance of this <code>ResponseWriter</code> using
-     * a different <code>Writer</code>.
-     *
-     * @param writer The <code>Writer</code> that will be used to create
-     *               another <code>ResponseWriter</code>.
-     */
-    public ResponseWriter cloneWithWriter(Writer writer) {
-        try {
-            return new CustomResponseWriter(writer, getContentType(),
-                                          getCharacterEncoding());
-        } catch (FacesException e) {
-            // This should never happen
-            throw new IllegalStateException();
-        }
-    }
-
-
-    /**
-     * This method automatically closes a previous element (if not
-     * already closed).
-     */
-    private void closeStartIfNecessary() throws IOException {
-        if (closeStart) {
-            //PENDING (horwat) using String as a result of Tomcat char 
-            //         writer ArrayIndexOutOfBoundsException (3584)
-            writer.write(">");
-            closeStart = false;
-        }
-    }
-
-
-    /**
-     * Methods From <code>java.io.Writer</code>
-     */
-
-    public void close() throws IOException {
-        closeStartIfNecessary();
-        writer.close();
-    }
-
-
-    public void write(char cbuf) throws IOException {
-        closeStartIfNecessary();
-        writer.write(cbuf);
-    }
-
-
-    public void write(char[] cbuf, int off, int len) throws IOException {
-        closeStartIfNecessary();
-        writer.write(cbuf, off, len);
-    }
-
-
-    public void write(int c) throws IOException {
-        closeStartIfNecessary();
-        writer.write(c);
-    }
-
-
-    public void write(String str) throws IOException {
-        closeStartIfNecessary();
-        writer.write(str);
-    }
-
-
-    public void write(String str, int off, int len) throws IOException {
-        closeStartIfNecessary();
-        writer.write(str, off, len);
-    }
-
-    private void ensureTextBufferCapacity(String source) {
-        int len = source.length();
-        if (textBuffer.length < len) {
-            textBuffer = new char[len * 2];
-        }
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/render/FormRenderer.java b/jsf-ri/systest/src/com/sun/faces/systest/render/FormRenderer.java
deleted file mode 100644
index d1de614..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/render/FormRenderer.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// FormRenderer.java
-
-package com.sun.faces.systest.render;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageUtils;
-
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
-import javax.faces.component.UINamingContainer;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.Renderer;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * <B>FormRenderer</B> is a class that renders a <code>UIForm<code> as a Form.
- */
-
-public class FormRenderer extends Renderer {
-
-    private static final Attribute[] ATTRIBUTES =
-          AttributeManager.getAttributes(AttributeManager.Key.FORMFORM);
-
-    public static final String SCRIPT_ELEMENT = "script";
-    public static final String SCRIPT_TYPE = "type";
-    public static final String CLEAR_HIDDEN_FIELD_FN_NAME = 
-         "clearFormHiddenParams";
-    public static final String FORM_CLIENT_ID_ATTR = 
-         "com.sun.faces.FORM_CLIENT_ID_ATTR";
-
-    //
-    // Protected Constants
-    //
-    // Log instance for this class
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-
-    public FormRenderer() {
-        super();
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-
-    //
-    // Methods From Renderer
-    //
-
-    public void decode(FacesContext context, UIComponent component) {
-        // Was our form the one that was submitted?  If so, we need to set
-        // the indicator accordingly..
-        //
-        String clientId = component.getClientId(context);
-        Map requestParameterMap = context.getExternalContext()
-            .getRequestParameterMap();
-        if (requestParameterMap.containsKey(clientId)) {
-            ((UIForm) component).setSubmitted(true);
-        } else {
-            ((UIForm) component).setSubmitted(false);
-        }
-    }
-
-
-    public void encodeBegin(FacesContext context, UIComponent component)
-        throws IOException {
-        String styleClass = null;
-
-        if (context == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-        if (component == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "component"));
-        }
-        // suppress rendering if "rendered" property on the component is
-        // false.
-        if (!component.isRendered()) {
-            return;
-        }
-        ResponseWriter writer = context.getResponseWriter();
-        assert (writer != null);
-        // since method and action are rendered here they are not added
-        // to the pass through attributes in Util class.
-        writer.startElement("form", component);
-        writer.writeAttribute("id", component.getClientId(context), "clientId");
-        writer.writeAttribute("method", "post", null);
-        writer.writeAttribute("action", getActionStr(context), null);
-        if (null != (styleClass = (String)
-            component.getAttributes().get("styleClass"))) {
-            writer.writeAttribute("class", styleClass, "styleClass");
-        }
-        String acceptcharset = null;
-        if (null != (acceptcharset = (String)
-            component.getAttributes().get("acceptcharset"))) {
-            writer.writeAttribute("accept-charset", acceptcharset, 
-                    "acceptcharset");
-        }
-        
-        RenderKitUtils.renderPassThruAttributes(context,
-              writer,
-                                                component,
-                                                ATTRIBUTES);       
-        writer.writeText("\n", null);
-        
-        // store the clientId of the form in request scope. This will be used
-        // by the commandLinkRenderer and ButtonRenderer to arrive the name of
-        // the javascript function to invoke from the onclick event handler.
-        // PENDING (visvan) we need to fix this dependency between the renderers.
-        // This solution is only temporary.
-        Map requestMap =context.getExternalContext().getRequestMap();
-        requestMap.put(FORM_CLIENT_ID_ATTR, component.getClientId(context));
-    }
-
-
-    /**
-     * <p>Return the value to be rendered as the <code>action</code> attribute
-     * of the form generated for this component.</p>
-     *
-     * @param context FacesContext for the response we are creating
-     */
-    private String getActionStr(FacesContext context) {
-        String viewId = context.getViewRoot().getViewId();
-        String actionURL =
-            context.getApplication().getViewHandler().
-            getActionURL(context, viewId);
-        return (context.getExternalContext().encodeActionURL(actionURL));
-    }
-
-
-    public void encodeEnd(FacesContext context, UIComponent component)
-        throws IOException {
-        if (context == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-        if (component == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "component"));
-        }
-        // suppress rendering if "rendered" property on the component is
-        // false.
-        if (!component.isRendered()) {
-            return;
-        }
-
-        context.getApplication().getViewHandler().writeState(context);
-
-        // Render the end tag for form
-        ResponseWriter writer = context.getResponseWriter();
-        assert (writer != null);
-
-        // this hidden field will be checked in the decode method to determine if
-        // this form has been submitted.
-        //
-        writer.startElement("input", component);
-        writer.writeAttribute("type", "hidden", "type");
-        writer.writeAttribute("name", component.getClientId(context),
-                              "clientId");
-        writer.writeAttribute("value", component.getClientId(context), "value");
-        writer.endElement("input");
-
-        renderNeededHiddenFields(context, component);
-        writer.endElement("form");
-        
-        Map requestMap = context.getExternalContext().getRequestMap();
-        String formClientId = (String)requestMap.put(FORM_CLIENT_ID_ATTR, null);
-    }
-
-
-    /**
-     * <p>Render any need hidden fields.</p>
-     */
-    private static void renderNeededHiddenFields(FacesContext context,
-                                                 UIComponent component)
-        throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        Map map = getHiddenFieldMap(context, false);
-        if (map != null) {
-            Iterator entries = map.entrySet().iterator();
-            while (entries.hasNext()) {
-                Map.Entry entry = (Map.Entry) entries.next();
-                if (Boolean.TRUE.equals(entry.getValue())) {
-                    writer.startElement("input", component);
-                    writer.writeAttribute("type", "hidden", null);
-                    writer.writeAttribute("name", entry.getKey(), null);
-                    writer.endElement("input");
-                }
-            }
-                
-            // Clear the hidden field map
-            Map requestMap = context.getExternalContext().getRequestMap();
-            requestMap.put(HIDDEN_FIELD_KEY, null);
-        }
-        String formTarget = (String) component.getAttributes().get("target");
-        renderClearHiddenParamsJavaScript(context,
-                                          writer,
-                                          map,
-                                          formTarget,
-                                          component.getClientId(context));
-    }
-
-
-    /**
-     * <p>Remember that we will need a new hidden field.</p>
-     */
-    public static void addNeededHiddenField(FacesContext context,
-                                            String clientId) {
-        Map map = getHiddenFieldMap(context, true);
-        if (!map.containsKey(clientId)) {
-            map.put(clientId, Boolean.TRUE);
-        }
-    }
-
-
-    /**
-     * <p>Note that a hidden field has already been rendered.</p>
-     */
-    public static void addRenderedHiddenField(FacesContext context,
-                                              String clientId) {
-        Map map = getHiddenFieldMap(context, true);
-        map.put(clientId, Boolean.FALSE);
-    }
-
-
-    private static Map getHiddenFieldMap(FacesContext context,
-                                         boolean createIfNew) {
-        Map requestMap = context.getExternalContext().getRequestMap();
-        Map map = (Map) requestMap.get(HIDDEN_FIELD_KEY);
-        if (map == null) {
-            if (createIfNew) {
-                map = new HashMap();
-                requestMap.put(HIDDEN_FIELD_KEY, map);
-            }
-        }
-
-        return map;
-    }
-
-    /**
-     * Generates a JavaScript function to clear all the hidden fields
-     * associated with a form and reset the target attribute if necessary.
-     */
-    private static void renderClearHiddenParamsJavaScript(FacesContext ctx,
-                                                          ResponseWriter writer,
-                                                          Map formParams,
-                                                          String formTarget,
-                                                          String formName)
-    throws IOException {
-            
-         // clear all the hidden field parameters in the form represented by
-         // formName.
-         writer.write("\n");
-         writer.startElement(SCRIPT_ELEMENT, null);
-         writer.writeAttribute(SCRIPT_TYPE, "text/javascript", null);
-         writer.write("\n<!--");
-         writer.write("\nfunction ");
-         String functionName = (CLEAR_HIDDEN_FIELD_FN_NAME + "_" + formName.replace(UINamingContainer.getSeparatorChar(ctx), '_'));
-         writer.write(functionName);
-         writer.write("(curFormName) {");
-         writer.write("\n  var curForm = document.forms[curFormName];"); 
-         if (formParams != null) {
-            Iterator entries = formParams.entrySet().iterator();
-            // clear only the hidden fields rendered by the form.
-            while (entries.hasNext()) {
-                Map.Entry entry = (Map.Entry) entries.next();
-                if (Boolean.TRUE.equals(entry.getValue())) {
-                    writer.write("\n curForm.elements['"); 
-                    writer.write((String) entry.getKey());
-                    writer.write("'].value = null;");
-                }
-            }
-         }
-         // clear form target attribute if its present
-         if (formTarget != null && formTarget.length() > 0) {
-             writer.write("\n  curForm.target=");
-             writer.write("'");
-             writer.write(formTarget);
-             writer.write("';");
-         }
-         writer.write("\n}");
-         writer.write("\n//-->\n");
-         writer.endElement(SCRIPT_ELEMENT);
-         writer.write("\n");
-         
-     }
-
-    private static final String HIDDEN_FIELD_KEY =
-        RIConstants.FACES_PREFIX + "FormHiddenFieldMap";
-
-} // end of class FormRenderer
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/render/TextRenderer.java b/jsf-ri/systest/src/com/sun/faces/systest/render/TextRenderer.java
deleted file mode 100644
index 91db19a..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/render/TextRenderer.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TextRenderer.java
-
-package com.sun.faces.systest.render;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.ValueHolder;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.faces.render.Renderer;
-
-import java.io.IOException;
-
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.MessageFactory;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.Util;
-
-
-/**
- * <B>TextRenderer</B> is a class that renders the current value of
- * <code>UIInput<code> or <code>UIOutput<code> component as a input field or
- * static text.
- */
-public class TextRenderer extends Renderer {
-
-    private static final Attribute[] INPUT_ATTRIBUTES =
-              AttributeManager.getAttributes(AttributeManager.Key.INPUTTEXT);
-        private static final Attribute[] OUTPUT_ATTRIBUTES =
-              AttributeManager.getAttributes(AttributeManager.Key.OUTPUTTEXT);
-
-
-    //
-    // Protected Constants
-    //
-    // Log instance for this class
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers
-    //
-
-    public TextRenderer() {
-        super();
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-
-    //
-    // Methods From Renderer
-    //
-
-    public void encodeBegin(FacesContext context, UIComponent component)
-        throws IOException {
-        if (context == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-        if (component == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "component"));
-        }
-    }
-
-    public void encodeEnd(FacesContext context, UIComponent component)
-        throws IOException {
-
-        String currentValue = null;
-        ResponseWriter writer = null;
-        String styleClass = null;
-
-        if (context == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));
-        }
-        if (component == null) {
-            throw new NullPointerException(
-                MessageUtils.getExceptionMessageString(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "component"));
-        }
-
-
-        // suppress rendering if "rendered" property on the component is
-        // false.
-        if (!component.isRendered()) {
-            return;
-        }
-
-        writer = context.getResponseWriter();
-        assert (writer != null);
-
-        currentValue = getCurrentValue(context, component);
-        getEndTextToRender(context, component, currentValue);
-    }
-
-    protected String getCurrentValue(FacesContext context, UIComponent component) {
-
-        if (component instanceof UIInput) {
-            Object submittedValue = ((UIInput) component).getSubmittedValue();
-            if (submittedValue != null) {
-                return (String) submittedValue;
-            }
-        }
-
-        String currentValue = null;
-        Object currentObj = getValue(component);
-        if (currentObj != null) {
-            currentValue = getFormattedValue(context, component, currentObj);
-        }
-        return currentValue;
-    }
-
-    protected void getEndTextToRender(FacesContext context,
-                                      UIComponent component, String currentValue)
-        throws IOException {
-
-        ResponseWriter writer = context.getResponseWriter();
-        assert (writer != null);
-        boolean
-            shouldWriteIdAttribute = false,
-            isOutput = false;
-
-        String style = (String) component.getAttributes().get("style");
-        String styleClass = (String) component.getAttributes().get("styleClass");
-        String dir = (String) component.getAttributes().get("dir");
-        String lang = (String) component.getAttributes().get("lang");
-        String title = (String) component.getAttributes().get("title");
-        if (component instanceof UIInput) {
-            writer.startElement("input", component);
-            writeIdAttributeIfNecessary(context, writer, component);
-            writer.writeAttribute("type", "text", null);
-            writer.writeAttribute("name", (component.getClientId(context)),
-                                  "clientId");
-
-            // render default text specified
-            if (currentValue != null) {
-                writer.writeAttribute("value", currentValue, "value");
-            }
-            if (null != styleClass) {
-                writer.writeAttribute("class", styleClass, "styleClass");
-            }
-
-            // style is rendered as a passthur attribute
-            RenderKitUtils.renderPassThruAttributes(context,
-                  writer,
-                                                    component,
-                                                    INPUT_ATTRIBUTES);
-            RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-            writer.endElement("input");
-
-        } else if (isOutput = (component instanceof UIOutput)) {
-            if (styleClass != null
-                 || style != null
-                 || dir != null
-                 || lang != null
-                 || title != null
-                 || (shouldWriteIdAttribute = shouldWriteIdAttribute(component))) {
-                writer.startElement("span", component);
-                writeIdAttributeIfNecessary(context, writer, component);
-                if (null != styleClass) {
-                    writer.writeAttribute("class", styleClass, "styleClass");
-                }
-                // style is rendered as a passthru attribute
-                RenderKitUtils.renderPassThruAttributes(context,
-                      writer,
-                                                        component,
-                                                        OUTPUT_ATTRIBUTES);
-                RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, component);
-
-            }
-            if (currentValue != null) {
-                Object val = null;
-                boolean escape = true;
-                if (null != (val = component.getAttributes().get("escape"))) {
-                    if (val instanceof Boolean) {
-                        escape = ((Boolean) val).booleanValue();
-                    } else if (val instanceof String) {
-                        try {
-                            escape =
-                                Boolean.valueOf((String) val).booleanValue();
-                        } catch (Throwable e) {
-                        }
-                    }
-                }
-                if (escape) {
-                    writer.writeText(currentValue, "value");
-                } else {
-                    writer.write(currentValue);
-                }
-                writer.writeText(" FROM THE CUSTOM RENDERER", null);
-            }
-        }
-        if (isOutput && (styleClass != null
-                 || style != null
-                 || dir != null
-                 || lang != null
-                 || title != null
-                 || (shouldWriteIdAttribute))) {
-            writer.endElement("span");
-        }
-    }
-
-    protected Object getValue(UIComponent component) {
-        if (component instanceof ValueHolder) {
-            Object value = ((ValueHolder) component).getValue();
-            return value;
-        }
-
-        return null;
-    }
-
-    protected String getFormattedValue(FacesContext context, UIComponent component,
-                                       Object currentValue)
-        throws ConverterException {
-
-        String result = null;
-        // formatting is supported only for components that support
-        // converting value attributes.
-        if (!(component instanceof ValueHolder)) {
-            if (currentValue != null) {
-                result = currentValue.toString();
-            }
-            return result;
-        }
-
-        Converter converter = null;
-
-        // If there is a converter attribute, use it to to ask application
-        // instance for a converter with this identifer.
-
-        if (component instanceof ValueHolder) {
-            converter = ((ValueHolder) component).getConverter();
-        }
-
-        // if value is null and no converter attribute is specified, then
-        // return a zero length String.
-        if (converter == null && currentValue == null) {
-            return "";
-        }
-
-        if (converter == null) {
-            // Do not look for "by-type" converters for Strings
-            if (currentValue instanceof String) {
-                return (String) currentValue;
-            }
-
-            // if converter attribute set, try to acquire a converter
-            // using its class type.
-
-            Class converterType = currentValue.getClass();
-            converter = Util.getConverterForClass(converterType, context);
-
-            // if there is no default converter available for this identifier,
-            // assume the model type to be String.
-            if (converter == null && currentValue != null) {
-                result = currentValue.toString();
-                return result;
-            }
-        }
-
-        if (converter != null) {
-            result = converter.getAsString(context, component, currentValue);
-
-            return result;
-        } else {
-            // throw converter exception if no converter can be
-            // identified
-	    Object [] params = {
-		currentValue,
-		"null Converter"
-	    };
-
-            throw new ConverterException(MessageFactory.getMessage(
-                context, MessageUtils.CONVERSION_ERROR_MESSAGE_ID, params));
-        }
-    }
-    private boolean shouldWriteIdAttribute(UIComponent component) {
-        String id;
-        return (null != (id = component.getId()) &&
-            !id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX));
-    }
-
-    private void writeIdAttributeIfNecessary(FacesContext context,
-                                               ResponseWriter writer,
-                                               UIComponent component) {
-        String id;
-        if (shouldWriteIdAttribute(component)) {
-            try {
-                writer.writeAttribute("id", component.getClientId(context),
-                                      "id");
-            } catch (IOException e) {
-            }
-        }
-    }
-
-
-    // The testcase for this class is TestRenderers_2.java
-
-} // end of class TextRenderer
-
-
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/resources/ResourceBundle01_en.properties b/jsf-ri/systest/src/com/sun/faces/systest/resources/ResourceBundle01_en.properties
deleted file mode 100644
index 1a15bcf..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/resources/ResourceBundle01_en.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-# Sample ResourceBundle properties file
-value1=Value From ResourceBundle
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/resources/ResourceBundle03_en.properties b/jsf-ri/systest/src/com/sun/faces/systest/resources/ResourceBundle03_en.properties
deleted file mode 100644
index 4bead02..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/resources/ResourceBundle03_en.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-# Sample ResourceBundle properties file
-value3=Value from ResourceBundle03
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/resources/Resources_en.java b/jsf-ri/systest/src/com/sun/faces/systest/resources/Resources_en.java
deleted file mode 100644
index fbcc8ec..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/resources/Resources_en.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * %W% %G%
- */
-
-package com.sun.faces.systest.resources;
-
-import java.util.ListResourceBundle;
-
-public class Resources_en extends ListResourceBundle {
-
-    public Resources_en() {
-    }
-
-
-    /**
-     * See class description.
-     */
-    protected Object[][] getContents() {
-        return new Object[][]{
-            {"button_key", "RES-BUNDLE KEY"},
-            {"image_key", "resbundle_image.gif"},
-            {"hyperlink_key", "RES-BUNDLE LINK"}
-        };
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateBean.java b/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateBean.java
deleted file mode 100644
index 23d1099..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateBean.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.state;
-
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIComponentBase;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.html.HtmlCommandButton;
-import javax.faces.component.html.HtmlOutputText;
-import javax.faces.component.html.HtmlPanelGroup;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-import javax.faces.validator.ValidatorException;
-
- at ManagedBean
- at RequestScoped
-public class DynamicStateBean {
-    
-    public void validateDeletion(FacesContext context, UIComponent comp, Object val) {
-        // The button should not be here on postback
-        UIComponent button = findButton(context);
-        if (null != button) {
-            throw new ValidatorException(new FacesMessage("cbutton should not be found"));
-        }
-        
-    }
-    
-    public void validateAddition(FacesContext context, UIComponent comp, Object val) {
-        // The button should not be here on postback
-        UIComponent button = findButton(context);
-        if (null == button) {
-            throw new ValidatorException(new FacesMessage("cbutton should be found"));
-        }
-        
-    }
-    public void beforeRenderDeletion(ComponentSystemEvent event) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        
-        UIComponent 
-                buttonParent = null, 
-                button = findButton(context);
-        if (null != button) {
-            buttonParent = button.getParent();
-            buttonParent.getChildren().remove(button);
-        }
-    }
-
-    public void beforeRenderAddition(ComponentSystemEvent event) {
-        FacesContext context = FacesContext.getCurrentInstance();
-        
-        UIComponent
-                form = findForm(context);
-        HtmlCommandButton button;
-        if (null == (button = (HtmlCommandButton) findButton(context))) {
-            button = new HtmlCommandButton();
-            button.setId("cbutton");
-            button.setValue("added button");
-            form.getChildren().add(button);
-        }
-    }
-
-
-    public void transientRoot(ActionEvent ae) {
-       
-        UIComponent button = ae.getComponent();
-        UIComponent addto = button.findComponent("addto");
-
-        HtmlPanelGroup transientRoot = new HtmlPanelGroup();
-        transientRoot.setTransient(true);
-        transientRoot.setId("troot");
-        StateComponent text = new StateComponent();
-        text.setValue("transient parent");
-        text.setId("text");
-        HtmlPanelGroup group = new HtmlPanelGroup();
-        group.setId("group");
-        StateComponent text2 = new StateComponent();
-        text2.setValue(" test");
-        text2.setId("text2");
-        group.getChildren().add(text2);
-        transientRoot.getChildren().add(text);
-        transientRoot.getChildren().add(group);
-        addto.getChildren().add(transientRoot);
-
-    }
-
-
-    
-    
-    private UIComponent findButton(FacesContext context) {
-        char sep = UINamingContainer.getSeparatorChar(context);
-        UIComponent result = null;
-                result = context.getViewRoot().findComponent(sep + "form" + 
-                sep + "cbutton");
-        return result;
-    }
-
-    private UIComponent findForm(FacesContext context) {
-        char sep = UINamingContainer.getSeparatorChar(context);
-        UIComponent result = null;
-                result = context.getViewRoot().findComponent(sep + "form");
-        return result;
-    }
-
-
-    public static class StateComponent extends HtmlOutputText {
-
-
-        @Override public Object saveState(FacesContext context) {
-
-            throw new FacesException("saveState(FacesContext) was incorrectly called for component with client ID: "
-                                     + this.getClientId(context));
-        }
-
-    }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateBean2.java b/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateBean2.java
deleted file mode 100644
index acc4fad..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateBean2.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.systest.state;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.component.UIComponent;
-import javax.faces.component.html.HtmlPanelGroup;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.component.html.HtmlCommandButton;
-import javax.faces.context.FacesContext;
-
- at ManagedBean
-public class DynamicStateBean2 {
-
-    private String value;
-
-    public DynamicStateBean2() {
-        value = "default value";
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public void render() {
-
-        // <h:form id="form">
-        //   <h:panelGroup id="viewPanel"/>
-        // </h:form>
-
-        UIComponent viewPanel = FacesContext
-              .getCurrentInstance()
-              .getViewRoot()
-              .findComponent("form:viewPanel");
-
-        viewPanel.getChildren().clear();
-
-        UIComponent childPanel = new HtmlPanelGroup();
-        childPanel.setId("childPanel");
-        viewPanel.getChildren().add(childPanel);
-
-        // Add a textinput to the inner most panel with a
-        // binding to the the value property of this bean.
-        //  ...
-        //  <h:panelGroup id="viewPanel">
-        //      <h:panelGroup id="childPanel"/>
-        //        <h:textInput value="#{render.value}"/>
-        //      </h:panelGroup>
-        //  </h:panelGroup>
-        //  ...
-
-        UIComponent textInput = new HtmlInputText();
-        textInput.setId("textInput");
-        textInput.setValueExpression("value", FacesContext.getCurrentInstance()
-              .getApplication().getExpressionFactory().createValueExpression(
-              FacesContext.getCurrentInstance().getELContext(),
-              "#{dynamicStateBean2.value}", Object.class));
-
-        childPanel.getChildren().add(textInput);
-    }
-
-    public void render2() {
-
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        UIComponent viewPanel = ctx.getViewRoot().findComponent("form:viewPanel");
-
-        viewPanel.getChildren().clear();
-
-        HtmlCommandButton btn = (HtmlCommandButton)
-              ctx.getApplication().createComponent(HtmlCommandButton.COMPONENT_TYPE);
-        btn.setValue("dynamically added button");
-
-        // Using a non-generated identifier will not cause
-        // the exception to be thrown.
-
-        //btn.setId("btn");
-
-        viewPanel.getChildren().add(btn);
-
-    }
-    
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateTestCase.java
deleted file mode 100644
index 4ac693f..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/state/DynamicStateTestCase.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.state;
-
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class DynamicStateTestCase extends AbstractTestCase {
-
-    public DynamicStateTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(DynamicStateTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    public void testDynamicDeletionPrefix() throws Exception {
-        doTestDynamicDeletion("/faces/state/dynamicDeletion.xhtml");
-    }
-    
-    public void testDynamicDeletionExtension() throws Exception {
-        doTestDynamicDeletion("/state/dynamicDeletion.faces");
-    }
-    
-    public void testDynamicAdditionPrefix() throws Exception {
-        doTestDynamicAddition("/faces/state/dynamicAddition.xhtml");
-    }
-    
-    public void testDynamicAdditionExtension() throws Exception {
-        doTestDynamicAddition("/state/dynamicAddition.faces");
-    }
-
-    /*
-     * Added for issue 1183.
-     */
-    public void testNestedComponentAddition() throws Exception {
-
-        HtmlPage page = getPage("/faces/state/dynamicAddition2.xhtml");
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:render");
-        page = submit.click();
-        HtmlTextInput input = (HtmlTextInput)
-              getInputContainingGivenId(page, "form:textInput");
-        assertNotNull(input);
-        assertEquals("default value", input.getValueAttribute());
-        input.setValueAttribute("new value");
-        submit = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:render");
-        page = submit.click();
-        input = (HtmlTextInput)
-              getInputContainingGivenId(page, "form:textInput");
-        assertNotNull(input);
-        assertEquals("new value", input.getValueAttribute());
-
-        // ensure events are fired properly when adding tree deltas
-        // to the view
-        submit = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:submit");
-        page = submit.click();
-        input = (HtmlTextInput)
-              getInputContainingGivenId(page, "form:textInput");
-        assertNotNull(input);
-
-        // once more for good measure
-        submit = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:submit");
-        page = submit.click();
-        input = (HtmlTextInput)
-              getInputContainingGivenId(page, "form:textInput");
-        assertNotNull(input);
-
-    }
-
-
-    /**
-     * Added for issue 1185.
-     */
-    public void testDeleteAddSameAction() throws Exception {
-
-        HtmlPage page = getPage("/faces/state/dynamicAdditionDeletion.xhtml");
-        HtmlSubmitInput submit = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:render");
-        page = submit.click();
-
-        // first click removes children from the panel (should be empty)
-        // and adds a new button
-        assertTrue(page.asText().contains("dynamically added button"));
-
-        for (int i = 0; i < 5; i++) {
-            // repeated clicks will remove the single child and add a new button
-            // back.
-            submit = (HtmlSubmitInput)
-              getInputContainingGivenId(page, "form:render");
-            page = submit.click();
-
-            assertTrue(page.asText().contains("dynamically added button"));
-        }
-
-    }
-
-
-    /**
-     * Added for issue 1553.
-     */
-    public void testDynamicAdditionTransietSubTree() throws Exception {
-
-        // any exception thrown here will fail the test
-        client.setThrowExceptionOnFailingStatusCode(true);
-        getPage("/faces/state/dynamicAdditionTransientSubTree.xhtml");
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void doTestDynamicDeletion(String viewId) throws Exception {
-        HtmlPage page = getPage(viewId);
-        HtmlTextInput textField = (HtmlTextInput)
-                getInputContainingGivenId(page, "textField");
-        textField.setValueAttribute("some text");
-        HtmlSubmitInput button = (HtmlSubmitInput)
-                getInputContainingGivenId(page, "reload");
-        try {
-            page = (HtmlPage) button.click();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-        assertTrue(-1 == page.asText().indexOf("cbutton should not be found"));
-    }
-
-
-    private void doTestDynamicAddition(String viewId) throws Exception {
-        HtmlPage page = getPage(viewId);
-        HtmlTextInput textField = (HtmlTextInput)
-                getInputContainingGivenId(page, "textField");
-        textField.setValueAttribute("some text");
-        HtmlSubmitInput button = (HtmlSubmitInput)
-                getInputContainingGivenId(page, "reload");
-        try {
-            page = (HtmlPage) button.click();
-        } catch (Exception e) {
-            fail(e.getMessage());
-        }
-        assertTrue(-1 == page.asText().indexOf("cbutton should be found"));
-    }
-
-} // end of class PathTestCase
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/tags/EventTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/tags/EventTestCase.java
deleted file mode 100644
index fff3296..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/tags/EventTestCase.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.tags;
-
-import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
-import java.util.List;
-import java.util.ArrayList;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSpan;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-
-
-/**
- * Validate new EL features such as the component implicit object
- */
-public class EventTestCase extends AbstractTestCase {
-
-    public EventTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(EventTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testValidEvents() throws Exception {
-        HtmlPage page = getPage("/faces/eventTag.xhtml");
-        List<HtmlSpan> outputs = new ArrayList<HtmlSpan>(4);
-        getAllElementsOfGivenClass(page, outputs, HtmlSpan.class);
-        assertTrue(outputs.size() == 6);
-        validateOutput(outputs);
-
-        HtmlSubmitInput submit = (HtmlSubmitInput) getInputContainingGivenId(page, "click");
-        assertNotNull(submit);
-        page = (HtmlPage) submit.click();
-        outputs.clear();
-        getAllElementsOfGivenClass(page, outputs, HtmlSpan.class);
-        assertTrue(outputs.size() == 6);
-        validateOutput(outputs);
-    }
-
-    public void testBeforeViewRender() throws Exception {
-        HtmlPage page = getPage("/faces/eventTag01.xhtml");
-        assertTrue(-1 != page.asText().indexOf("class javax.faces.component.UIViewRoot pre-render"));
-
-        page = getPage("/faces/eventTag02.xhtml");
-        assertTrue(-1 != page.asText().indexOf("class javax.faces.component.UIViewRoot pre-render"));
-
-    }
-
-
-    public void testInvalidEvent() throws Exception {
-        try {
-            getPage("/faces/eventTagInvalid.xhtml");
-            fail ("An exception should be thrown for an invalid event name in Development mode");
-        } catch (FailingHttpStatusCodeException fail) {
-            //
-        }
-    }
-
-    public static void main (String... args) {
-        try {
-            EventTestCase etc = new EventTestCase("foo");
-            etc.setUp();
-            etc.testValidEvents();
-            etc.testInvalidEvent();
-            etc.tearDown();
-        } catch (Exception ex) {
-            Logger.getLogger(EventTestCase.class.getName()).log(Level.SEVERE, null, ex);
-        }
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void validateOutput(List<HtmlSpan> outputs) {
-
-        HtmlSpan s;
-
-        // Short name
-        s = outputs.get(0);
-        assertTrue(("The 'javax.faces.event.PreRenderComponentEvent' event fired!").equals(s.asText()));
-
-        // Long name
-        s = outputs.get(1);
-        assertTrue(("The 'javax.faces.event.PreRenderComponentEvent' event fired!").equals(s.asText()));
-
-        // Short Name
-        s = outputs.get(2);
-        assertTrue(("The 'javax.faces.event.PostAddToViewEvent' event fired!").equals(s.asText()));
-
-        // Long name
-        s = outputs.get(3);
-        assertTrue(("The 'javax.faces.event.PostAddToViewEvent' event fired!").equals(s.asText()));
-
-        // Fully-qualified class name
-        s = outputs.get(4);
-        assertTrue(("The 'javax.faces.event.PreRenderComponentEvent' event fired!").equals(s.asText()));
-
-        // No-arg
-        s = outputs.get(5);
-        assertTrue(("The no-arg event fired!").equals(s.asText()));
-
-    }
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsIndex.java b/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsIndex.java
deleted file mode 100644
index 75724d0..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsIndex.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.viewparameters;
-
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.concurrent.atomic.AtomicLong;
-import javax.annotation.PostConstruct;
-import javax.faces.bean.ApplicationScoped;
-import javax.faces.bean.ManagedBean;
-
-
- at ApplicationScoped @ManagedBean(eager = true)
-public class NewsIndex {
-
-    private AtomicLong sequenceGenerator;
-    private Map<Long, NewsStory> entries;
-
-    @PostConstruct
-    public void postContruct() {
-        sequenceGenerator = new AtomicLong();
-        entries = new TreeMap<Long, NewsStory>();
-
-        entries.put(sequenceGenerator.incrementAndGet(), new NewsStory(sequenceGenerator.get(), "Story 1 Headline: Glassfish V3 released", "Story 1 Content: After much anticipation, Glassfish V3 has finally been released. And it's a really great piece of engineering."));
-        entries.put(sequenceGenerator.incrementAndGet(), new NewsStory(sequenceGenerator.get(), "Story 2 Headline: ICEfaces evolves integration with NetBeans IDE and GlassFish", "Story 2 Content: The most recent release of ICEfaces (v1.7.2SP1) enhances the migration of existing Project Woodstock applications to ICEfaces. With the latest ICEfaces NetBeans plugin, it's now possible to add the ICEfaces framework to an existing Woodstock project, and begin to develop ICEfaces pages along sid [...]
-    }
-
-    public Map<Long, NewsStory> getEntries() {
-        return entries;
-    }
-
-    public NewsStory getStory(Long id) {
-        if (id == null) {
-            return null;
-        }
-        
-        return entries.get(id);
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsReader.java b/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsReader.java
deleted file mode 100644
index 4a0a1ac..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsReader.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.viewparameters;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.ManagedProperty;
-import javax.faces.bean.RequestScoped;
-
-
- at RequestScoped @ManagedBean
-public class NewsReader {
-
-    private FacesContext facesContext;
-
-    @ManagedProperty("#{newsIndex}")
-    private NewsIndex newsIndex;
-
-    private List<NewsStory> stories;
-
-    private NewsStory selectedStory;
-
-    private Long selectedStoryId;
-
-    @PostConstruct
-    public void postConstruct() {
-        facesContext = FacesContext.getCurrentInstance();
-        stories = new ArrayList<NewsStory>(newsIndex.getEntries().values());
-    }
-
-    public void loadStory() {
-        if (!facesContext.isValidationFailed()) {
-            NewsStory story = newsIndex.getStory(selectedStoryId);
-            if (story != null) {
-                selectedStory = story;
-                return;
-            }
-
-            facesContext.addMessage(null, new FacesMessage("The headline you requested does not exist."));
-        }
-
-        //facesContext.getFlash().setKeepMessages(true); // only needed if navigation case is a redirect
-        facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null, "/viewParameters/page01");
-        // we would like the following instead
-        // facesContext.fireNavigation("home");
-    }
-
-    public List<NewsStory> getStories() {
-        return stories;
-    }
-
-    public NewsStory getSelectedStory() {
-        return selectedStory;
-    }
-
-    public Long getSelectedStoryId() {
-        return selectedStoryId;
-    }
-
-    public void setSelectedStoryId(Long storyId) {
-        this.selectedStoryId = storyId;
-    }
-
-    // Injected Properties
-
-    public void setNewsIndex(NewsIndex newsIndex) {
-        this.newsIndex = newsIndex;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsStory.java b/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsStory.java
deleted file mode 100644
index 2aa7ddf..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/NewsStory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.viewparameters;
-
-
-public class NewsStory {
-
-    private Long id;
-    private String headline;
-    private String content;
-
-    public NewsStory(Long id, String headline, String content) {
-        this.id = id;
-        this.headline = headline;
-        this.content = content;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public String getContent() {
-        return content;
-    }
-    
-    public String getHeadline() {
-        return headline;
-    }
-
-}
diff --git a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/ViewParametersTestCase.java b/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/ViewParametersTestCase.java
deleted file mode 100644
index 400127b..0000000
--- a/jsf-ri/systest/src/com/sun/faces/systest/viewparameters/ViewParametersTestCase.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.systest.viewparameters;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.sun.faces.htmlunit.AbstractTestCase;
-import java.net.URL;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test cases for Facelets functionality
- */
-public class ViewParametersTestCase extends AbstractTestCase {
-
-
-    // --------------------------------------------------------------- Test Init
-
-
-    public ViewParametersTestCase() {
-        this("FaceletsTestCase");
-    }
-
-
-    public ViewParametersTestCase(String name) {
-        super(name);
-    }
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() {
-        return (new TestSuite(ViewParametersTestCase.class));
-    }
-
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    /*
-     * Added for issue 917.
-     */
-    public void testViewParameters() throws Exception {
-
-        doTestExtensionMapped(0);
-        doTestExtensionMapped(1);
-        
-    }
-
-    public void testViewParametersValidation() throws Exception {
-
-        HtmlPage page = getPage("/viewParameters/page02.faces?id=0");
-        assertTrue(page.asText().contains("Invalid headline. (The id parameter is not a positive number)"));
-
-    }
-    
-    
-    private void doTestExtensionMapped(int i) throws Exception {
-
-        int storyNum = i + 1;
-        HtmlPage page = null;
-        
-        page = fetchHomePageAndClickStoryLink(i);
-
-        page = fetchHomePageAndClickStoryLink(i);
-        
-        page = doRefreshButton(page, storyNum);
-        
-        page = doRefreshClearParamButton(page, storyNum);
-
-        page = fetchHomePageAndClickStoryLink(i);
-        
-        page = doRefreshWithRedirectParamsButton(page, storyNum);
-        
-        page = fetchHomePageAndClickStoryLink(i);
-        
-        page = doRefreshWithoutRedirectParamsButton(page, storyNum);
-        
-        page = fetchHomePageAndClickStoryLink(i);
-
-        page = doHomeButton(page, storyNum);
-        
-        page = fetchHomePageAndClickStoryLink(i);
-
-        page = doHomeKeepSelectionButton(page, i);
-        
-        page = fetchHomePageAndClickStoryLink(i);
-
-        page = doHomeKeepSelectionNavCaseButton(page, i);
-        
-        page = fetchHomePageAndClickStoryLink(i);
-
-        page = doStory2Button(page, i);
-        
-        
-    }
-    
-    private HtmlPage fetchHomePageAndClickStoryLink(int i) throws Exception {
-        HtmlPage page = getPage("/viewParameters/page01.faces") ;
-        String pageText = page.asText();
-
-        assertOnHomePage(pageText);
-        
-        List<HtmlAnchor> anchors = new ArrayList<HtmlAnchor>();
-        this.getAllElementsOfGivenClass(page, anchors, HtmlAnchor.class);
-        HtmlAnchor toClick = anchors.get(i);
-        page = (HtmlPage) toClick.click();
-        
-        int storyNum = i+1;
-        
-        // Assert some things about the content of the page
-        pageText = page.asText();
-        assertTrue(-1 != pageText.indexOf(getTitleContains(storyNum)));
-        assertTrue(-1 != pageText.indexOf(getContentContains(storyNum)));
-        
-        return page;
-    }
-    
-    private String getTitleContains(int storyNum) {
-        String titleContains = "Story " + storyNum + " Headline:";
-        return titleContains;
-    }
-    
-    private String getContentContains(int storyNum) {
-        String contentContains = "Story " + storyNum + " Content:";
-        return contentContains;
-    }
-    
-    private HtmlPage doRefreshButton(HtmlPage page, int storyNum) throws Exception {
-        String pageText = null;
-        
-        // Click the "refresh" button, ensure the page refreshes properly
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("refresh");
-        page = (HtmlPage) button.click();
-        pageText = page.asText();
-        assertTrue(-1 != pageText.indexOf(getTitleContains(storyNum)));
-        assertTrue(-1 != pageText.indexOf(getContentContains(storyNum)));
-
-        return page;
-    }
-    
-    private HtmlPage doRefreshClearParamButton(HtmlPage page, int storyNum) throws Exception {
-        String pageText = null;
-        // Click the "refreshClearParam" button, ensure you get back
-        // to the home page
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("refreshClearParam");
-        page = (HtmlPage) button.click();
-        pageText = page.asText();
-        
-        // no story content on home page
-        assertTrue(-1 == pageText.indexOf(getContentContains(storyNum)));
-        assertTrue(-1 != pageText.indexOf("You did not specify a headline. (The id parameter is missing)"));
-        assertOnHomePage(pageText);
-        return page;
-    }
-    
-    private HtmlPage doRefreshWithRedirectParamsButton(HtmlPage page, int storyNum) throws Exception {
-        // click the "refreshWithRedirectParams" button and make sure we're still
-        // on the same page.
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("refreshWithRedirectParams");
-        page = (HtmlPage) button.click();
-        String pageText = page.asText();
-        assertTrue(-1 != pageText.indexOf(getTitleContains(storyNum)));
-        assertTrue(-1 != pageText.indexOf(getContentContains(storyNum)));
-        
-        return page;
-    }
-    
-    private HtmlPage doRefreshWithoutRedirectParamsButton(HtmlPage page, int storyNum) throws Exception {
-        String pageText = null;
-        // Click the "refreshWithRedirect" button, ensure you get back
-        // to the home page
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("refreshWithRedirect");
-        page = (HtmlPage) button.click();
-        pageText = page.asText();
-        
-        // no story content on home page
-        assertTrue(-1 == pageText.indexOf(getContentContains(storyNum)));
-        assertTrue(-1 != pageText.indexOf("You did not specify a headline. (The id parameter is missing)"));
-        assertOnHomePage(pageText);
-        return page;
-    }
-
-    private HtmlPage doHomeButton(HtmlPage page, int storyNum) throws Exception {
-        String pageText = null;
-        // Click the "home" button, ensure you get back
-        // to the home page
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("home");
-        page = (HtmlPage) button.click();
-        pageText = page.asText();
-        
-        // no story content on the page, and no messages either
-        assertTrue(-1 == pageText.indexOf(getContentContains(storyNum)));
-        assertTrue(-1 == pageText.indexOf("The headline you requested does not exist."));
-        assertTrue(-1 == pageText.indexOf("You did not specify a headline. (The id parameter is missing)"));
-        assertOnHomePage(pageText);
-
-        return page;
-    }
-    
-    private HtmlPage doHomeKeepSelectionButton(HtmlPage page, int storyNum) throws Exception {
-        String pageText = null;
-        // Click the "homeKeepSelection" button, ensure you get back
-        // to the home page with the proper story number
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("homeRememberSelection");
-        page = (HtmlPage) button.click();
-        pageText = page.asText();
-        
-        assertOnHomePage(pageText);
-        assertTrue(-1 == pageText.indexOf("You just looked at story #" + storyNum + "."));
-        
-        
-        return page;
-    }
-    
-    private HtmlPage doHomeKeepSelectionNavCaseButton(HtmlPage page, int storyNum) throws Exception {
-        String pageText = null;
-        // Click the "homeKeepSelectionNavCase" button, ensure you get back
-        // to the home page with the proper story number
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("homeRememberSelectionNavCase");
-        page = (HtmlPage) button.click();
-        pageText = page.asText();
-        
-        assertOnHomePage(pageText);
-        assertTrue(-1 == pageText.indexOf("You just looked at story #" + storyNum + "."));
-        
-        
-        return page;
-    }
-    
-    private HtmlPage doStory2Button(HtmlPage page, int storyNum) throws Exception {
-        String pageText = null;
-        // Click the "story2" button, ensure you get
-        // to the story 2 page
-        HtmlSubmitInput button = (HtmlSubmitInput) page.getHtmlElementById("story2RememberSelectionNavCase");
-        page = (HtmlPage) button.click();
-        pageText = page.asText();
-        
-        URL requestUrl = page.getWebResponse().getRequestUrl();
-        
-        assertTrue(-1 != pageText.indexOf("Story 2"));
-        assertTrue(-1 != pageText.indexOf("bar is: foo"));
-        
-        return page;
-    }
-    
-    private void assertOnHomePage(String pageText) throws Exception {
-        assertTrue(-1 != pageText.indexOf("The big news stories of the day"));
-    }
-
-}
diff --git a/jsf-ri/systest/web/Iterator02.jsp b/jsf-ri/systest/web/Iterator02.jsp
deleted file mode 100644
index 61351bb..0000000
--- a/jsf-ri/systest/web/Iterator02.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-  <br>
-  <c:forEach var="i" begin="0" end="3" varStatus="status">
-    Array[<c:out value="${i}"/>]: 
-    <h:outputText value="This component has no ID " /><br>
-  </c:forEach>
-
-
diff --git a/jsf-ri/systest/web/ModelSelectItemConversion.jsp b/jsf-ri/systest/web/ModelSelectItemConversion.jsp
deleted file mode 100644
index 1e68c78..0000000
--- a/jsf-ri/systest/web/ModelSelectItemConversion.jsp
+++ /dev/null
@@ -1,84 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2006 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>test</h1>
-
-<f:view>
-    <h:form id="form">
-        <h:selectOneMenu id="test" value="#{sessionBean.specialModel}" >
-            <f:selectItems value="#{sessionBean.selectItems}"/>
-        </h:selectOneMenu>
-        <h:commandButton id="submit" value="Submit" type="submit"/>
-    </h:form>
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/ProcessSaveRestoreStateTest.jsp b/jsf-ri/systest/web/ProcessSaveRestoreStateTest.jsp
deleted file mode 100644
index 8dc3472..0000000
--- a/jsf-ri/systest/web/ProcessSaveRestoreStateTest.jsp
+++ /dev/null
@@ -1,66 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page contentType="text/html"%>
-<%@page pageEncoding="UTF-8"%>
-
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-<%@page import="javax.faces.component.*,javax.faces.context.*" %>
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>ProcessSaveRestoreStateTest</title>
-    </head>
-    <body>
-    <%
-       UIComponent comp1 = new UIOutput();
-       UIComponent child11 = new UIInput();
-       child11.setTransient(true);
-       UIComponent child12 = new UIInput();
-       UIComponent child111 = new UIInput();
-       UIComponent child121 = new UIInput();
-       comp1.getChildren().add(child11); 
-       comp1.getChildren().add(child12); 
-       child11.getChildren().add(child111);
-       child12.getChildren().add(child121);
-       Object state = comp1.processSaveState(FacesContext.getCurrentInstance());
-       comp1.processRestoreState(FacesContext.getCurrentInstance(), state);
-    %>
-    PASSED
-    </body>
-</html>
diff --git a/jsf-ri/systest/web/SelectManyConverterTest.jsp b/jsf-ri/systest/web/SelectManyConverterTest.jsp
deleted file mode 100644
index 7b854e8..0000000
--- a/jsf-ri/systest/web/SelectManyConverterTest.jsp
+++ /dev/null
@@ -1,95 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
-The contents of this file are subject to the terms
-of the Common Development and Distribution License
-(the License). You may not use this file except in
-compliance with the License.
-
-You can obtain a copy of the License at
-https://javaserverfaces.dev.java.net/CDDL.html or
-legal/CDDLv1.0.txt.
-See the License for the specific language governing
-permission and limitations under the License.
-
-When distributing Covered Code, include this CDDL
-Header Notice in each file and include the License file
-at legal/CDDLv1.0.txt.
-If applicable, add the following below the CDDL Header,
-with the fields enclosed by brackets [] replaced by
-your own identifying information:
-"Portions Copyrighted [year] [name of copyright owner]"
-
-[Name of File] [ver.__] [Date]
-
-Copyright 2006 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-</head>
-
-<body>
-<h1>test</h1>
-
-<f:view>
-    <%-- Ensure converters are applied for List as well as Array
-         target values --%>
-    <h:form>
-        <h:selectManyListbox id="list" value="#{testListBox.listResults}"
-                             converter="#{testBeanConverter}">
-            <f:selectItems value="#{testListBox.selectItems}"/>
-        </h:selectManyListbox>
-        <h:message for="list"/>
-        <br/>
-        <h:selectManyListbox id="array" value="#{testListBox.arrayResults}"
-                             converter="#{testBeanConverter}">
-            <f:selectItems value="#{testListBox.selectItems}"/>
-        </h:selectManyListbox>
-        <h:message for="array"/>
-        <br/>
-        <h:commandButton id="submit" value="Submit"/>
-    </h:form>
-</f:view>
-
-<hr>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/TCCI_subview01.jsp b/jsf-ri/systest/web/TCCI_subview01.jsp
deleted file mode 100644
index c98048c..0000000
--- a/jsf-ri/systest/web/TCCI_subview01.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" autoFlush="true" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<p>Subview 1: Inner template text followed by
-
-<h:outputText id="innerComponent1" value="inner component 1" />
-
-</p>
-
-<p>Subview 1: Inner template 2 text followed by
-
-<h:outputText id="innerComponent2" value="inner component 2" />
-
-</p>
diff --git a/jsf-ri/systest/web/TCCI_subview02.jsp b/jsf-ri/systest/web/TCCI_subview02.jsp
deleted file mode 100644
index de520c0..0000000
--- a/jsf-ri/systest/web/TCCI_subview02.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="innerSubView">
-
-<p>Subview 2: Inner template text followed by
-<h:outputText id="innerComponent3" value="inner component 3" /></p>
-
-
-</f:subview>
diff --git a/jsf-ri/systest/web/TCCI_subview03.jsp b/jsf-ri/systest/web/TCCI_subview03.jsp
deleted file mode 100644
index b36699f..0000000
--- a/jsf-ri/systest/web/TCCI_subview03.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="innerSubView2">
-
-<p>Subview 2: Inner template text followed by
-<h:outputText id="innerComponent4" value="inner component 4" /></p>
-
-
-</f:subview>
diff --git a/jsf-ri/systest/web/TCCI_subview04.jsp b/jsf-ri/systest/web/TCCI_subview04.jsp
deleted file mode 100644
index 6bfb8a7..0000000
--- a/jsf-ri/systest/web/TCCI_subview04.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" autoFlush="true" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<p>Subview 4: Inner template text followed by
-
-<h:outputText id="innerComponent5" value="inner component 5" />
-
-</p>
-
-<p>Subview 4: Inner template 2 text followed by
-
-<h:outputText id="innerComponent6" value="inner component 6" />
-
-</p>
diff --git a/jsf-ri/systest/web/TCCI_subview05.jsp b/jsf-ri/systest/web/TCCI_subview05.jsp
deleted file mode 100644
index b066967..0000000
--- a/jsf-ri/systest/web/TCCI_subview05.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="innerSubView4">
-
-<p>Subview 5: Inner template text followed by
-<h:outputText id="innerComponent7" value="inner component 7" /></p>
-
-
-</f:subview>
diff --git a/jsf-ri/systest/web/TCCI_subview06.jsp b/jsf-ri/systest/web/TCCI_subview06.jsp
deleted file mode 100644
index 36071a9..0000000
--- a/jsf-ri/systest/web/TCCI_subview06.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="innerSubView5">
-
-<p>Subview 6: Inner template text followed by
-<h:outputText id="innerComponent8" value="inner component 8" /></p>
-
-
-</f:subview>
diff --git a/jsf-ri/systest/web/TestCoreValidatorFail.jsp b/jsf-ri/systest/web/TestCoreValidatorFail.jsp
deleted file mode 100644
index 9fb40c9..0000000
--- a/jsf-ri/systest/web/TestCoreValidatorFail.jsp
+++ /dev/null
@@ -1,77 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-
-<f:view>
-
-  <p>actionListener must have either a type or binding attribute.</p>
-  <h:commandButton value="submit" >
-      <f:actionListener /> 
-  </h:commandButton>
-
-  <p>valueChangeListener must have either a type or binding attribute.</p>
-  <h:inputText >
-      <f:valueChangeListener /> 
-  </h:inputText>
-
-  <p>validator must have either a validatorId or binding attribute.</p>
-  <h:inputText >
-      <f:validator />
-  </h:inputText>
-
-  <p>converter must have either a converterId or binding attribute.</p>
-  <h:inputText >
-      <f:converter />
-  </h:inputText>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestCoreValidatorIfFail.jsp b/jsf-ri/systest/web/TestCoreValidatorIfFail.jsp
deleted file mode 100644
index 0d0b612..0000000
--- a/jsf-ri/systest/web/TestCoreValidatorIfFail.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-</head>
-<body>
-
-<h1>TLV c:if without JSF id</h1>
-This page should FAIL.
-<br>
-<br>
-
-<% request.setAttribute("one", new String("one")); %>
-
-<f:view>
-
-  <c:if test="${one == 'one'}">
-    <h:outputText  value="NO ID"/>
-  </c:if>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestCoreValidatorIfSucceed.jsp b/jsf-ri/systest/web/TestCoreValidatorIfSucceed.jsp
deleted file mode 100644
index 85fe5ce..0000000
--- a/jsf-ri/systest/web/TestCoreValidatorIfSucceed.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-</head>
-<body>
-
-<h1>TLV c:if with JSF id</h1>
-This page should succeed.
-<br>
-<br>
-
-<% request.setAttribute("one", new String("one")); %>
-
-<f:view>
-
-  <c:if test="${one == 'one'}">
-    <h:outputText id="has_id" value="HAS ID"/>
-  </c:if>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestCoreValidatorIteratorFail.jsp b/jsf-ri/systest/web/TestCoreValidatorIteratorFail.jsp
deleted file mode 100644
index f55d611..0000000
--- a/jsf-ri/systest/web/TestCoreValidatorIteratorFail.jsp
+++ /dev/null
@@ -1,67 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-</head>
-<body>
-
-<h1>TLV c:iterator without JSF id</h1>
-This page should FAIL.
-<br>
-<br>
-
-<f:view>
-
-  <c:forEach var="i" begin="0" end="3" varStatus="status">
-    Array[<c:out value="${i}"/>]: 
-    <h:outputText value="NO ID"/><br>
-  </c:forEach>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestCoreValidatorIteratorSucceed.jsp b/jsf-ri/systest/web/TestCoreValidatorIteratorSucceed.jsp
deleted file mode 100644
index 073458e..0000000
--- a/jsf-ri/systest/web/TestCoreValidatorIteratorSucceed.jsp
+++ /dev/null
@@ -1,70 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-</head>
-<body>
-
-<h1>TLV c:iterator with JSF id</h1>
-This page should succeed.
-<br>
-<br>
-
-<f:view>
-
-  <c:forEach begin="0" end="3"  var="i" varStatus="status">
-    <c:set var="i" scope="request" value="${i}"/>
-    <c:set var="status" scope="request" value="${status}"/>
-    <c:set var="id" scope="request" value="foo${status.index}"/>
-    Array[<c:out value="${i}"/>]: 
-    <h:outputText id="#{id}" value="#{i}"/><br>
-  </c:forEach>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestCoreValidatorSucceed.jsp b/jsf-ri/systest/web/TestCoreValidatorSucceed.jsp
deleted file mode 100644
index b8ddfc1..0000000
--- a/jsf-ri/systest/web/TestCoreValidatorSucceed.jsp
+++ /dev/null
@@ -1,77 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-
-<f:view>
-
-  <p>actionListener must have either a type or binding attribute.</p>
-  <h:commandButton value="submit" >
-      <f:actionListener type="com.sun.faces.systest.TestActionListener01" /> 
-  </h:commandButton>
-
-  <p>valueChangeListener must have either a type or binding attribute.</p>
-  <h:inputText >
-      <f:valueChangeListener type="com.sun.faces.systest.TestValueChangeListener01"/>
-  </h:inputText>
-
-  <p>validator must have either a validatorId or binding attribute.</p>
-  <h:inputText >
-      <f:validator validatorId="javax.faces.DoubleRange" />
-  </h:inputText>
-
-  <p>converter must have either a converterId or binding attribute.</p>
-  <h:inputText >
-      <f:converter converterId="javax.faces.Number" />
-  </h:inputText>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorActionRefFail.jsp b/jsf-ri/systest/web/TestElValidatorActionRefFail.jsp
deleted file mode 100644
index b64f63c..0000000
--- a/jsf-ri/systest/web/TestElValidatorActionRefFail.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<%
-  pageContext.setAttribute("ford", new String("harrison"), PageContext.REQUEST_SCOPE);
-%>
-
-<h1>TLV commandButton, invalid 'action' expression</h1>
-This page should Fail.
-<br>
-<br>
-
-<f:view>
-
-  <p>This command button has an invalid action expression</p>
-  <h:commandButton value="hello" action="#{ford < 1}"/>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorActionRefSucceed.jsp b/jsf-ri/systest/web/TestElValidatorActionRefSucceed.jsp
deleted file mode 100644
index ffa861a..0000000
--- a/jsf-ri/systest/web/TestElValidatorActionRefSucceed.jsp
+++ /dev/null
@@ -1,67 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<%
-  pageContext.setAttribute("ford", new String("harrison"), PageContext.REQUEST_SCOPE);
-%>
-
-<h1>TLV commandButton, valid 'action' expression</h1>
-This page should Succeed.
-<br>
-<br>
-
-<f:view>
-
-  <h:commandButton value="hello" action="#{ford.go}" />
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorComponentFail.jsp b/jsf-ri/systest/web/TestElValidatorComponentFail.jsp
deleted file mode 100644
index 340eecb..0000000
--- a/jsf-ri/systest/web/TestElValidatorComponentFail.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<%
-  pageContext.setAttribute("ford", new String("harrison"), PageContext.REQUEST_SCOPE);
-%>
-
-<h1>TLV commandButton, invalid 'binding' expression</h1>
-This page should Fail.
-<br>
-<br>
-
-<f:view>
-
-  <p>This command button has an invalid component expression</p>
-  <h:commandButton value="hello" binding=".ford"/>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorComponentSucceed.jsp b/jsf-ri/systest/web/TestElValidatorComponentSucceed.jsp
deleted file mode 100644
index 0b9bd69..0000000
--- a/jsf-ri/systest/web/TestElValidatorComponentSucceed.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.component.UICommand"
-%>
-
-<%
-  UICommand command = new UICommand();
-  pageContext.setAttribute("ford", command, PageContext.REQUEST_SCOPE);
-%>
-
-<h1>TLV commandButton, valid 'binding' expression</h1>
-This page should Succeed.
-<br>
-<br>
-
-<f:view>
-
-  <h:commandButton value="hello" binding="#{requestScope.ford}" />
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorIdFail.jsp b/jsf-ri/systest/web/TestElValidatorIdFail.jsp
deleted file mode 100644
index 3b6200b..0000000
--- a/jsf-ri/systest/web/TestElValidatorIdFail.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<%
-  pageContext.setAttribute("ford", new String("harrison"));
-%>
-
-<h1>TLV commandButton, invalid 'id' expression</h1>
-This page should Fail.
-<br>
-<br>
-
-<f:view>
-
-  <p>This command button has an invalid id expression</p>
-  <h:commandButton id="#{#{ford}}" value="hello" />
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorIdSucceed.jsp b/jsf-ri/systest/web/TestElValidatorIdSucceed.jsp
deleted file mode 100644
index 4d7e251..0000000
--- a/jsf-ri/systest/web/TestElValidatorIdSucceed.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<%
-  pageContext.setAttribute("first", new String("Harrison"));
-  pageContext.setAttribute("last", new String("Ford"));
-%>
-
-<h1>TLV commandButton, valid 'id' expression</h1>
-This page should Succeed.
-<br>
-<br>
-
-<f:view>
-  <c:set var="temp" scope="request" value="${pageScope.first}${pageScope.last}"/>
-  <h:commandButton id="temp" value="indiana" />
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorValueRefFail.jsp b/jsf-ri/systest/web/TestElValidatorValueRefFail.jsp
deleted file mode 100644
index f16b762..0000000
--- a/jsf-ri/systest/web/TestElValidatorValueRefFail.jsp
+++ /dev/null
@@ -1,64 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<h1>TLV commandButton, invalid 'value' expression</h1>
-This page should Fail.
-<br>
-<br>
-
-<f:view>
-
-  <p>This command button has an invalid value expression</p>
-  <h:commandButton value="hello" value="#{-3"/>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestElValidatorValueRefSucceed.jsp b/jsf-ri/systest/web/TestElValidatorValueRefSucceed.jsp
deleted file mode 100644
index e14c68a..0000000
--- a/jsf-ri/systest/web/TestElValidatorValueRefSucceed.jsp
+++ /dev/null
@@ -1,63 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<h1>TLV commandButton, valid 'valueRef' expression</h1>
-This page should Succeed.
-<br>
-<br>
-
-<f:view>
-
-  <h:commandButton value="#{hello}" />
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestHtmlBasicValidatorFail.jsp b/jsf-ri/systest/web/TestHtmlBasicValidatorFail.jsp
deleted file mode 100644
index 0746576..0000000
--- a/jsf-ri/systest/web/TestHtmlBasicValidatorFail.jsp
+++ /dev/null
@@ -1,76 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-</head>
-<body>
-
-<%
-  pageContext.setAttribute("hello", new String("hello"), PageContext.REQUEST_SCOPE);
-%>
-
-
-    <c:set scope="application" var="javax.faces.VALIDATE_EMPTY_FIELDS"
-           value="false" />
-
-
-<h1>TLV commandButton, no lable or key</h1>
-This page should FAIL.
-<br>
-<br>
-
-<f:view>
-
-  <p>This must have either a label or key attribute.</p>
-  <h:commandButton>
-    <h:outputText value="#{hello}"/>
-  </h:commandButton>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestHtmlBasicValidatorSucceed.jsp b/jsf-ri/systest/web/TestHtmlBasicValidatorSucceed.jsp
deleted file mode 100644
index 2d92aec..0000000
--- a/jsf-ri/systest/web/TestHtmlBasicValidatorSucceed.jsp
+++ /dev/null
@@ -1,65 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<title>Validator Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<h1>TLV commandButton, no lable or key</h1>
-This page should Succeed.
-<br>
-<br>
-
-<f:view>
-
-  <h:commandButton value="hello"/>
-
-  <h:commandButton value="hello"/>
-
-</f:view>
-
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/TestValueChangeAndActionListenerNoArg.jsp b/jsf-ri/systest/web/TestValueChangeAndActionListenerNoArg.jsp
deleted file mode 100644
index 19daeab..0000000
--- a/jsf-ri/systest/web/TestValueChangeAndActionListenerNoArg.jsp
+++ /dev/null
@@ -1,78 +0,0 @@
-<%--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
---%>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test that method expressions pointing to no-arg methods work for valueChangeListener and actionListener</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test that method expressions pointing to no-arg methods work for valueChangeListener and actionListener</h1>
-
-
-<f:view>
-    <h:form id="form" prependId="false">
-
-      <p>
-
-         <h:inputText id="username" value="#{test1.stringProperty}" 
-                required="true"
-             valueChangeListener="#{test1.valueChange0}"/>
-
-      </p>
-
-      <p>
-
-	<h:commandButton id="loginEvent" value="Login" 
-             actionListener="#{test1.actionListener0}">
-
-	</h:commandButton>  
-
-      </p>
-
-<p>valueChange0Called: <h:outputText value="#{valueChange0Called}" /></p>
-
-<p>actionListener0Called: <h:outputText value="#{actionListener0Called}" /></p>
-
-    </h:form>
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/TestValueChangeAndActionListenerNoArg.xhtml b/jsf-ri/systest/web/TestValueChangeAndActionListenerNoArg.xhtml
deleted file mode 100644
index 78b234f..0000000
--- a/jsf-ri/systest/web/TestValueChangeAndActionListenerNoArg.xhtml
+++ /dev/null
@@ -1,78 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-  <h:head>
-    <title>Test that method expressions pointing to no-arg methods work for valueChangeListener and actionListener</title>
-  </h:head>
-
-  <h:body>
-    <h1>Test that method expressions pointing to no-arg methods work for valueChangeListener and actionListener</h1>
-
-
-<f:view>
-    <h:form id="form" prependId="false">
-
-      <p>
-
-         <h:inputText id="username" value="#{test1.stringProperty}" 
-                required="true"
-             valueChangeListener="#{test1.valueChange0}"/>
-
-      </p>
-
-      <p>
-
-	<h:commandButton id="loginEvent" value="Login" 
-             actionListener="#{test1.actionListener0}">
-
-	</h:commandButton>  
-
-      </p>
-
-<p>valueChange0Called: <h:outputText value="#{valueChange0Called}" /></p>
-
-<p>actionListener0Called: <h:outputText value="#{actionListener0Called}" /></p>
-
-    </h:form>
-</f:view>
-
-  </h:body>
-</html>
diff --git a/jsf-ri/systest/web/WEB-INF/composite-behavior.taglib.xml b/jsf-ri/systest/web/WEB-INF/composite-behavior.taglib.xml
deleted file mode 100644
index 7b81026..0000000
--- a/jsf-ri/systest/web/WEB-INF/composite-behavior.taglib.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-              version="2.0">
-    <namespace>http://mojarra.dev.java.net/composite-behavior</namespace>
-
-    <tag>
-        <tag-name>behavior</tag-name>
-        <behavior>
-           <behavior-id>compositeBehavior</behavior-id>
-        </behavior>
-    </tag>
-
-</facelet-taglib>
-
diff --git a/jsf-ri/systest/web/WEB-INF/faces-config.xml b/jsf-ri/systest/web/WEB-INF/faces-config.xml
deleted file mode 100644
index 90e40dc..0000000
--- a/jsf-ri/systest/web/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">
-
-
-  <application>
-    <message-bundle>com.sun.faces.CustomMessages</message-bundle>
-    <locale-config>
-        <default-locale>en_US</default-locale>
-    </locale-config>
-    <resource-bundle>      
-      <base-name>com.sun.faces.systest.resources.ResourceBundle01</base-name>
-      <var>resourceBundle01</var>
-    </resource-bundle>
-    <resource-bundle>      
-      <base-name>com.sun.faces.systest.resources.ResourceBundle03</base-name>
-        <var>resourceBundle03</var>
-    </resource-bundle>     
-  </application>
-  <factory>
-    <application-factory>com.sun.faces.systest.lifecycle.ApplicationFactoryWrapper</application-factory>
-    <faces-context-factory>com.sun.faces.systest.lifecycle.FacesContextFactoryWrapper</faces-context-factory>
-    <lifecycle-factory>com.sun.faces.systest.lifecycle.LifecycleFactoryWrapper</lifecycle-factory>
-    <render-kit-factory>com.sun.faces.systest.lifecycle.RenderKitFactoryWrapper</render-kit-factory>
-  </factory>
-    
-    <converter>
-        <converter-for-class>com.sun.faces.systest.model.SpecialBean</converter-for-class>
-        <converter-class>com.sun.faces.systest.model.SpecialConverter</converter-class>        
-    </converter>
-
-    <managed-bean>
-        <managed-bean-name>enumbean</managed-bean-name>
-        <managed-bean-class>
-            com.sun.faces.systest.model.EnumBean
-        </managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>annotationTestBean</managed-bean-name>
-        <managed-bean-class>com.sun.faces.annotation.AnnotationTestBean</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-    </managed-bean>
-    
-  <managed-bean>
-    <managed-bean-name>valueChangeListenerBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.ValueChangeListenerBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>listenerBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.ListenerBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>TestValueChangeListener01</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.TestValueChangeListener01
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>TestActionListener01</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.TestActionListener01
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>validatorBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.ValidatorBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-                                                                                
-  <managed-bean>
-    <managed-bean-name>converterBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.ConverterBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <!-- Managed Bean #1, No Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test1</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-    
-    <managed-bean>
-        <managed-bean-name>interweaving08</managed-bean-name>
-        <managed-bean-class>
-            com.sun.faces.systest.model.InterweavingBean
-        </managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-    
-    <managed-bean>
-        <managed-bean-name>interweaving09</managed-bean-name>
-        <managed-bean-class>
-            com.sun.faces.systest.model.InterweavingBean
-        </managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-    
-    <managed-bean>
-        <managed-bean-name>interweaving10</managed-bean-name>
-        <managed-bean-class>
-            com.sun.faces.systest.model.InterweavingBean
-        </managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-  
-  <managed-bean>
-    <managed-bean-name>forEachBean1</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-        <managed-bean-name>BooksBean</managed-bean-name>
-        <managed-bean-class>com.sun.faces.systest.model.BooksBean</managed-bean-class> 
-        <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>     
-
-  <!-- Managed Bean #2, Primitive Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test2</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>booleanProperty</property-name>
-      <value>false</value>
-    </managed-property>
-    <managed-property>
-      <property-name>byteProperty</property-name>
-      <value>21</value>
-    </managed-property>
-    <managed-property>
-      <property-name>doubleProperty</property-name>
-      <value>321.54</value>
-    </managed-property>
-    <managed-property>
-      <property-name>floatProperty</property-name>
-      <value>21.43</value>
-    </managed-property>
-    <managed-property>
-      <property-name>intProperty</property-name>
-      <value>321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>longProperty</property-name>
-      <value>54321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>shortProperty</property-name>
-      <value>4321</value>
-    </managed-property>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>New String Value</value>
-    </managed-property>
-    <managed-property>
-      <property-name>userName</property-name>
-      <value>#{usernamecomponent}</value>
-    </managed-property>
-    <managed-property>
-      <property-name>suit</property-name>
-      <value>Hearts</value>
-    </managed-property>
-    <managed-property>
-      <property-name>referencedSuit</property-name>
-      <value>#{test3.suit}</value>
-    </managed-property>    
-  </managed-bean>
-
-  <!-- Managed Bean #3, No Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>test3</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>suit</property-name>
-      <value>Spades</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>phaseListener</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.PrintEventToRequestMapPhaseListener
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>phaseIdString</property-name>
-      <value>ANY_PHASE</value>
-    </managed-property>
-  </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>eagerApp1</managed-bean-name>
-        <managed-bean-class>java.util.Date</managed-bean-class>
-        <managed-bean-scope>application</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean eager="true">
-        <managed-bean-name>eagerApp2</managed-bean-name>
-        <managed-bean-class>java.util.Date</managed-bean-class>
-        <managed-bean-scope>application</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean eager="false">
-        <managed-bean-name>eagerApp3</managed-bean-name>
-        <managed-bean-class>java.util.Date</managed-bean-class>
-        <managed-bean-scope>application</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean eager="true">
-        <managed-bean-name>eagerSes1</managed-bean-name>
-        <managed-bean-class>java.util.Date</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean eager="true">
-        <managed-bean-name>eagerReq1</managed-bean-name>
-        <managed-bean-class>java.util.Date</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>select05</managed-bean-name>
-        <managed-bean-class>com.sun.faces.systest.model.SelectMany05Bean</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>select05NoSelection</managed-bean-name>
-        <managed-bean-class>com.sun.faces.systest.model.SelectMany05BeanWithNoSelectionValue</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
-    </managed-bean>
-
-
-   <!-- validator -->
-  <validator>
-    <description>TestValidator Description</description>
-    <validator-id>TestValidator</validator-id>
-    <validator-class>com.sun.faces.systest.TestValidator</validator-class>
-  </validator>
-
-  <validator>
-    <description>TestValidator01 Description</description>
-    <validator-id>TestValidator01</validator-id>
-    <validator-class>com.sun.faces.systest.TestValidator01</validator-class>
-  </validator>
-
-  <!-- converter -->
-  <converter>
-    <description>Test Converter</description>
-    <converter-id>TestConverter</converter-id>
-    <converter-class>com.sun.faces.systest.TestConverter</converter-class>
-  </converter>
-  
-  <converter>
-    <description>TestConverter01 Description</description>
-    <converter-id>TestConverter01</converter-id>
-    <converter-class>com.sun.faces.systest.TestConverter01</converter-class>
-  </converter>
-
-  <!-- component -->
-  <component>
-    <component-type>TestComponent</component-type>
-    <component-class>com.sun.faces.systest.TestComponent</component-class>
-  </component>
-  
-   <managed-bean>
-      <managed-bean-name>usernamecomponent</managed-bean-name>
-      <managed-bean-class>
-         javax.faces.component.UIInput
-      </managed-bean-class>
-      <managed-bean-scope>request</managed-bean-scope>
-      <managed-property>
-        <property-name>size</property-name>
-        <value>16</value>
-      </managed-property>
-      <managed-property>
-        <property-name>maxlength</property-name>
-        <value>32</value>
-      </managed-property>
-  </managed-bean>
-  
-  <!-- custom renderkit -->
-  <render-kit>
-    <render-kit-id>CUSTOM</render-kit-id>
-    <render-kit-class>com.sun.faces.systest.render.CustomRenderKitImpl</render-kit-class>
-    <renderer>
-      <component-family>javax.faces.Output</component-family>
-      <renderer-type>javax.faces.Text</renderer-type>
-      <renderer-class>com.sun.faces.systest.render.TextRenderer</renderer-class>
-    </renderer>
-    <renderer>
-      <component-family>javax.faces.Form</component-family>
-      <renderer-type>javax.faces.Form</renderer-type>
-      <renderer-class>com.sun.faces.systest.render.FormRenderer</renderer-class>
-    </renderer>
-    <renderer>
-      <component-family>javax.faces.Command</component-family>
-      <renderer-type>javax.faces.Button</renderer-type>
-      <renderer-class>com.sun.faces.systest.render.ButtonRenderer</renderer-class>
-    </renderer>
-  </render-kit>
-
-  <!-- Component that renders its own "header" and "footer" facets -->
-  <component>
-    <component-type>FacetComponent</component-type>
-    <component-class>com.sun.faces.systest.FacetComponent</component-class>
-  </component>
-
-  <!-- Component that renders its own children -->
-  <component>
-    <component-type>ChildrenComponent</component-type>
-    <component-class>com.sun.faces.systest.ChildrenComponent</component-class>
-  </component>
-
-  <!-- Component that dynamically adds and removes children -->
-  <component>
-    <component-type>DynamicComponent</component-type>
-    <component-class>com.sun.faces.systest.DynamicComponent</component-class>
-  </component>
-
-  <!-- Managed Bean for "jsp/form-input-02" tests -->
-  <managed-bean>
-    <managed-bean-name>formInput02</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <!-- Managed Bean for "jsp/prependId" tests -->
-  <managed-bean>
-    <managed-bean-name>prependIdBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>booleanProperty</property-name>
-      <value>true</value>
-    </managed-property>
-    <managed-property>
-      <property-name>booleanProperty2</property-name>
-      <value>false</value>
-    </managed-property>
-  </managed-bean>
-
-
-  <!-- Managed Bean for "jsp/jstl-foreach-XX" tests -->
-  <managed-bean>
-    <managed-bean-name>forEachBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.ForEachBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-  <!-- Test Managed bean cyclic references -->
-  <managed-bean>
-    <managed-bean-name>
-        cyclic1
-    </managed-bean-name>
-    <managed-bean-class>
-        com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>
-        request
-    </managed-bean-scope>
-   
-    <managed-property>
-        <property-name>bean</property-name>
-        <value>#{cyclic2}</value>
-    </managed-property>
-  </managed-bean>
-   
-  <managed-bean>
-    <managed-bean-name>
-        cyclic2
-    </managed-bean-name>
-    <managed-bean-class>
-        com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>
-        request
-    </managed-bean-scope>
-   
-    <managed-property>
-        <property-name>bean</property-name>
-        <value>#{cyclic3}</value>
-    </managed-property> 
-  </managed-bean>
-  
-  <managed-bean>
-    <managed-bean-name>
-        cyclic3
-    </managed-bean-name>
-    <managed-bean-class>
-        com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>
-        request
-    </managed-bean-scope>
-   
-    <managed-property>
-        <property-name>bean</property-name>
-        <value>#{cyclic1}</value>
-    </managed-property> 
-  </managed-bean>
-  
-  <!-- for the methodref tests -->
-  <managed-bean>
-    <managed-bean-name>methodRef</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.MethodRef
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <description>This bean refers to a request scoped bean: should cause exception.</description>
-    <managed-bean-name>test4</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>#{test1.stringProperty}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <description>immediate01</description>
-    <managed-bean-name>immediateBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <null-value />
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>propertyOrder</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.PropertyOrderBean
-    </managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-    <managed-property>
-      <property-name>one</property-name>
-      <value>one</value>
-    </managed-property>
-    <managed-property>
-      <property-name>two</property-name>
-      <value>two</value>
-    </managed-property>
-    <managed-property>
-      <property-name>three</property-name>
-      <value>three</value>
-    </managed-property>
-    <managed-property>
-      <property-name>four</property-name>
-      <value>four</value>
-    </managed-property>
-    <managed-property>
-      <property-name>listProperty</property-name>
-      <list-entries>
-        <value>five</value>
-        <value>six</value>
-        <value>seven</value>
-        <value>eight</value>
-      </list-entries>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>duplicateIds04</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.DuplicateIds04
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-  
-  <managed-bean>
-    <managed-bean-name>resourceInjectionBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.ResourceInjectionBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>resourceInjectionBean2</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.ResourceInjectionBean
-    </managed-bean-class>
-    <managed-bean-scope>view</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>ResetUniqueRequestIdBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.application.ResetUniqueRequestIdBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-  
-    <managed-bean>
-    <managed-bean-name>noneBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>noneBean</value>
-    </managed-property>
-  </managed-bean>
-  
-    <managed-bean>
-    <managed-bean-name>requestBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>requestBean</value>
-    </managed-property>
-  </managed-bean>
-  
-  <managed-bean>
-    <managed-bean-name>sessionBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>sessionBean</value>
-    </managed-property>
-  </managed-bean>
-  
-  <managed-bean>
-    <managed-bean-name>applicationBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>application</managed-bean-scope>
-      <managed-property>
-      <property-name>stringProperty</property-name>
-      <value>applicationBean</value>
-    </managed-property>
-</managed-bean>  
-    
-    <managed-bean>
-       <managed-bean-name>testListBox</managed-bean-name>
-       <managed-bean-class>com.sun.faces.systest.model.TestListBox</managed-bean-class>
-       <managed-bean-scope>request</managed-bean-scope>
-     </managed-bean>
-     <managed-bean>
-       <managed-bean-name>testBeanConverter</managed-bean-name>
-       <managed-bean-class>com.sun.faces.systest.model.TestBeanConverter</managed-bean-class>
-       <managed-bean-scope>none</managed-bean-scope>
-     </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>customDataTable</managed-bean-name>
-        <managed-bean-class>com.sun.faces.systest.model.CustomDatatableBean</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-    </managed-bean>
-    
-    <managed-bean>
-        <managed-bean-name>eventTagBean</managed-bean-name>
-        <managed-bean-class>com.sun.faces.systest.model.EventTagBean</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-    </managed-bean>
-
-  <navigation-rule>
-    <from-view-id>*</from-view-id>
-    <navigation-case>
-      <description>Default rule, go back to welcome page</description> 
-      <display-name>The Generic Rule</display-name> 
-      <from-outcome>welcome</from-outcome>
-      <to-view-id>/index.html</to-view-id>
-      <redirect/>
-    </navigation-case>
-  </navigation-rule>
-    
-
-  <navigation-rule>
-    <from-view-id>/redirect.jsp</from-view-id>
-    <navigation-case>
-      <description>If the action returns "success", goto
-      redirect1.jsp</description> 
-      <display-name>The Generic Rule</display-name> 
-      <from-outcome>success</from-outcome>
-      <to-view-id>/redirect1.jsp</to-view-id>
-      <redirect/>
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/jsp/verbatim-test.jsp</from-view-id>
-    <navigation-case>
-      <description>If the action returns "success", goto
-      redirect1.jsp</description> 
-      <display-name>The Generic Rule</display-name> 
-      <from-outcome>success</from-outcome>
-      <to-view-id>/redirect1.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/taglib/commandLink_multiform_test.jsp</from-view-id>
-     <navigation-case>
-       <from-outcome>redirect</from-outcome>
-       <to-view-id>/redirect1.jsp</to-view-id>
-       <redirect/>
-     </navigation-case>
-     <navigation-case>
-       <from-outcome>forward</from-outcome>
-       <to-view-id>/redirect1.jsp</to-view-id>
-     </navigation-case>
-  </navigation-rule>
-
-  <navigation-rule>
-    <from-view-id>/renderkit04.jsp</from-view-id>
-    <navigation-case>
-      <description>If the action returns "success", goto
-      renderkit05.jsp</description>
-      <display-name>The Generic Rule</display-name>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/renderkit05.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-  <navigation-rule>
-    <from-view-id>/renderkit05.jsp</from-view-id>
-    <navigation-case>
-      <description>If the action returns "success", goto
-      renderkit04.jsp</description>
-      <display-name>The Generic Rule</display-name>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/renderkit04.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-  
-  <navigation-rule>
-    <from-view-id>/enum01.jsp</from-view-id>
-    <navigation-case>
-      <description>If the action returns "Spades", goto
-      hello.jsp</description>
-      <display-name>The Generic Rule</display-name>
-      <from-outcome>Spades</from-outcome>
-      <to-view-id>/hello.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>/viewParameters/page02.xhtml</from-view-id>
-        <navigation-case>
-            <from-outcome>homeWithParams</from-outcome>
-            <to-view-id>/viewParameters/page01.xhtml</to-view-id>
-            <redirect include-view-params="true"/>
-        </navigation-case>
-        <navigation-case>
-            <from-outcome>story2WithParams</from-outcome>
-            <to-view-id>/viewParameters/page03.xhtml</to-view-id>
-            <redirect include-view-params="true"/>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>/viewParameters/page03.xhtml</from-view-id>
-        <navigation-case>
-            <from-outcome>homeWithParams</from-outcome>
-            <to-view-id>/viewParameters/page01.xhtml</to-view-id>
-            <redirect include-view-params="true"/>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>/standard/outcometarget01.xhtml</from-view-id>
-        <navigation-case>
-            <from-outcome>nav1</from-outcome>
-            <to-view-id>/standard/nav1.xhtml</to-view-id>
-        </navigation-case>
-        <navigation-case>
-            <from-outcome>nav2</from-outcome>
-            <to-view-id>/standard/nav2.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>redirectWithParams</from-outcome>
-            <to-view-id>/standard/outcometarget01.xhtml</to-view-id>
-            <redirect>
-                <view-param>
-                    <name>id</name>
-                    <value>config</value>
-                </view-param>
-            </redirect>
-        </navigation-case>
-    </navigation-rule>
-
-     <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>redirectWithAll</from-outcome>
-            <to-view-id>/standard/outcometarget01.xhtml</to-view-id>
-            <redirect include-view-params="true">
-                <view-param>
-                    <name>id</name>
-                    <value>#{'config'}</value>
-                </view-param>
-            </redirect>
-        </navigation-case>
-    </navigation-rule>
-
-<navigation-rule>
-  <from-view-id>/conditionalNav.xhtml</from-view-id>
-  <navigation-case>
-    <from-outcome>submit</from-outcome>
-    <if>#{test1.booleanProperty}</if>
-    <to-view-id>#{test1.successOutcome}</to-view-id>
-  </navigation-case>
-  <navigation-case>
-    <from-outcome>submit</from-outcome>
-    <to-view-id>#{test1.failureOutcome}</to-view-id>
-  </navigation-case>
-</navigation-rule>
-
-
-
-</faces-config>
diff --git a/jsf-ri/systest/web/WEB-INF/groovy/com/sun/faces/groovy/GroovyBacked.groovy b/jsf-ri/systest/web/WEB-INF/groovy/com/sun/faces/groovy/GroovyBacked.groovy
deleted file mode 100644
index d09f7bd..0000000
--- a/jsf-ri/systest/web/WEB-INF/groovy/com/sun/faces/groovy/GroovyBacked.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.groovy;
-
-import javax.faces.component.FacesComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UINamingContainer;
-
- at FacesComponent("com.sun.faces.groovy.GroovyBacked")
-class GroovyBacked extends UIInput implements NamingContainer {
-    @Override
-    public String getFamily() {
-        return UINamingContainer.COMPONENT_FAMILY;
-    }
-
-    public String getText() {
-        String value = (String) getValue();
-        if (value != null) {
-            return value.toUpperCase();
-        } else {
-            return null;
-        }
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/web/WEB-INF/groovy/com/sun/faces/groovy/SimpleBean.groovy b/jsf-ri/systest/web/WEB-INF/groovy/com/sun/faces/groovy/SimpleBean.groovy
deleted file mode 100644
index 65369cc..0000000
--- a/jsf-ri/systest/web/WEB-INF/groovy/com/sun/faces/groovy/SimpleBean.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package com.sun.faces.groovy;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
-
- at ManagedBean(name="bean")
-public class SimpleBean {
-    
-    private String message = "Hello World!";
-    
-    public String getMessage() {
-        return message;
-    }
-}
diff --git a/jsf-ri/systest/web/WEB-INF/init-faces-config.xml b/jsf-ri/systest/web/WEB-INF/init-faces-config.xml
deleted file mode 100644
index 8278b84..0000000
--- a/jsf-ri/systest/web/WEB-INF/init-faces-config.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-
-  <!-- Managed Bean #1, No Property Overrides -->
-  <managed-bean>
-    <managed-bean-name>mybean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.systest.model.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/systest/web/WEB-INF/source1.taglib.xml b/jsf-ri/systest/web/WEB-INF/source1.taglib.xml
deleted file mode 100644
index d917321..0000000
--- a/jsf-ri/systest/web/WEB-INF/source1.taglib.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-        
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->    
-
-<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
-              version="2.0">
-    <namespace>http://mojarra.dev.java.net/source1</namespace>
-    <tag>
-        <tag-name>hello</tag-name>
-        <source>tags/source.xhtml</source>
-    </tag>
-    <tag>
-        <tag-name>naming</tag-name>
-        <component>
-            <component-type>javax.faces.NamingContainer</component-type>
-        </component>
-    </tag>
-
-    <tag>
-        <tag-name>bootstrapComponent</tag-name>
-        <component>
-            <component-type>systest.BootstrapComponent</component-type>
-        </component>
-    </tag>
-
-    <tag>
-        <tag-name>timeWastingTag</tag-name>
-        <handler-class>com.sun.faces.composite.TimeWastingTagHandler</handler-class>
-    </tag>
-
-    <tag>
-        <tag-name>dynamicAdd</tag-name>
-        <component>
-            <component-type>dynamicAdd</component-type>
-        </component>
-    </tag>
-
-
-</facelet-taglib>
diff --git a/jsf-ri/systest/web/WEB-INF/sun-web.xml b/jsf-ri/systest/web/WEB-INF/sun-web.xml
deleted file mode 100644
index ec2fcfd..0000000
--- a/jsf-ri/systest/web/WEB-INF/sun-web.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-
-<sun-web-app>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <resource-ref>
-     <res-ref-name>com.sun.faces.systest.model.ResourceInjectionBean/ds1</res-ref-name>
-     <jndi-name>jdbc/__default</jndi-name>
-  </resource-ref>
-  <resource-ref>
-     <res-ref-name>myDataSource2</res-ref-name>
-     <jndi-name>jdbc/__default</jndi-name>
-  </resource-ref>
-  <resource-ref>
-     <res-ref-name>jdbc/myDataSource3</res-ref-name>
-     <jndi-name>jdbc/__default</jndi-name>
-  </resource-ref>
-  <resource-ref>
-     <res-ref-name>myDataSource4</res-ref-name>
-     <jndi-name>jdbc/__default</jndi-name>
-  </resource-ref>
-  <resource-ref>
-     <res-ref-name>myDataSource5</res-ref-name>
-     <jndi-name>jdbc/__default</jndi-name>
-  </resource-ref>
-  <resource-ref>
-     <res-ref-name>jdbc/myDataSource6</res-ref-name>
-     <jndi-name>jdbc/__default</jndi-name>
-  </resource-ref>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</sun-web-app>
-
diff --git a/jsf-ri/systest/web/WEB-INF/taglib.tld b/jsf-ri/systest/web/WEB-INF/taglib.tld
deleted file mode 100644
index 5ab8c4b..0000000
--- a/jsf-ri/systest/web/WEB-INF/taglib.tld
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!DOCTYPE taglib
-  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
-  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-
-
-<taglib>
-
-  <tlib-version>0.01</tlib-version>
-  <jsp-version>1.2</jsp-version>
-  <short-name>Systest Components Tag Library</short-name>
-  <uri>/WEB-INF/taglib.tld</uri>
-  <description>
-    Tag library containing component tags for the systest suite.
-  </description>
-
-  <tag>
-                                                                                                                           
-    <name>converter</name>
-    <tag-class>javax.faces.webapp.ConverterTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-      Register a named Converter instance on the UIComponent
-      associated with the closest parent UIComponent custom action.
-    </description>
-                                                                                                                           
-    <attribute>
-      <name>converterId</name>
-      <required>true</required>
-      <rtexprvalue>false</rtexprvalue>
-      <description>
-        Converter identifier of the Converter instance to be
-        created and registered.
-      </description>
-    </attribute>
-                                                                                                                           
-  </tag>
-
-  <tag>
-
-    <name>children_body</name>
-    <tag-class>com.sun.faces.systest.ChildrenComponentBodyTag</tag-class>
-
-    <attribute>
-      <name>id</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-  </tag>
-
-
-  <tag>
-
-    <name>children</name>
-    <tag-class>com.sun.faces.systest.ChildrenComponentTag</tag-class>
-
-    <attribute>
-      <name>id</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-  </tag>
-
-
-  <tag>
-
-    <name>dynamic</name>
-    <tag-class>com.sun.faces.systest.DynamicComponentTag</tag-class>
-
-    <attribute>
-      <name>id</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-  </tag>
-
-
-  <tag>
-
-    <name>facets</name>
-    <tag-class>com.sun.faces.systest.FacetComponentTag</tag-class>
-
-    <attribute>
-      <name>id</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-    <attribute>
-      <name>value</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-  </tag>
-
-
-  <tag>
-
-    <name>naming</name>
-    <tag-class>com.sun.faces.systest.NamingTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-      Tag to introduce a UINamingContainer component.
-    </description>
-
-    <attribute>
-      <name>binding</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-    <attribute>
-      <name>id</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-    <attribute>
-      <name>rendered</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-  </tag>
-
-
-  <tag>
-      <name>output_text</name>
-      <tag-class>com.sun.faces.taglib.html_basic.Output_TextTag</tag-class>
-      <body-content>JSP</body-content>
-      <description>
-        This is a copy of the output_text tag from the html_basic.tld,
-        and is placed here in an attempt to bypass the TLV checking for
-        mandatory ids inside c:if and c:choose tags.
-      </description>
-      <attribute>
-        <name>id</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-      </attribute>
-    <attribute>
-      <name>rendered</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-      <name>converter</name>
-      <required>false</required>
-      <rtexprvalue>true</rtexprvalue>
-      <type>javax.faces.convert.Converter</type>
-    </attribute>
-    <attribute>
-      <name>value</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-      <name>styleClass</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-      <name>binding</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-
-  <tag>
-
-    <name>output_verbatim</name>
-    <tag-class>com.sun.faces.systest.OutputVerbatimTag</tag-class>
-
-    <attribute>
-      <name>id</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-    </attribute>
-
-  </tag>
-
-
-</taglib>
diff --git a/jsf-ri/systest/web/WEB-INF/tags/outputLink.tag b/jsf-ri/systest/web/WEB-INF/tags/outputLink.tag
deleted file mode 100644
index 05bb66b..0000000
--- a/jsf-ri/systest/web/WEB-INF/tags/outputLink.tag
+++ /dev/null
@@ -1,4 +0,0 @@
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<h:outputLink value="http://java.sun.com"><f:verbatim>java.sun.com</f:verbatim></h:outputLink>
diff --git a/jsf-ri/systest/web/WEB-INF/tags/source.xhtml b/jsf-ri/systest/web/WEB-INF/tags/source.xhtml
deleted file mode 100644
index 0bd1eb9..0000000
--- a/jsf-ri/systest/web/WEB-INF/tags/source.xhtml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<h:outputText xmlns:h="http://java.sun.com/jsf/html" style="color:red" value="Hello!"/>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/WEB-INF/templates/compositeTestTemplate.xhtml b/jsf-ri/systest/web/WEB-INF/templates/compositeTestTemplate.xhtml
deleted file mode 100644
index a1b7760..0000000
--- a/jsf-ri/systest/web/WEB-INF/templates/compositeTestTemplate.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xml:lang="en" lang="en">
-<h:head>
-    <title>${title}</title>
-</h:head>
-
-<body>
-<div id="container">
-   <span id="templateText">Template text</span>
-<ui:insert name="content"/>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/WEB-INF/templates/templateCompTemplate.xhtml b/jsf-ri/systest/web/WEB-INF/templates/templateCompTemplate.xhtml
deleted file mode 100644
index a1b7760..0000000
--- a/jsf-ri/systest/web/WEB-INF/templates/templateCompTemplate.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xml:lang="en" lang="en">
-<h:head>
-    <title>${title}</title>
-</h:head>
-
-<body>
-<div id="container">
-   <span id="templateText">Template text</span>
-<ui:insert name="content"/>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/WEB-INF/templates/templateDecorateTemplate.xhtml b/jsf-ri/systest/web/WEB-INF/templates/templateDecorateTemplate.xhtml
deleted file mode 100644
index 30810ff..0000000
--- a/jsf-ri/systest/web/WEB-INF/templates/templateDecorateTemplate.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xml:lang="en" lang="en">
-<h:head>
-    <title>Ignored</title>
-</h:head>
-
-<body>
-<div id="container">
-    <ui:composition>
-        <span id="comp">Composition Text</span>
-        <ui:insert name="insert"/>
-    </ui:composition>
-    <span id="templateText">Template text</span>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/WEB-INF/test.jsp b/jsf-ri/systest/web/WEB-INF/test.jsp
deleted file mode 100644
index 3394b80..0000000
--- a/jsf-ri/systest/web/WEB-INF/test.jsp
+++ /dev/null
@@ -1,49 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-<head>
-    <title>Shouldn't be here</title>
-</head>
-<body>
-We shouldn't have gotten here
-</body>
-</html>
diff --git a/jsf-ri/systest/web/WEB-INF/web.xml.template b/jsf-ri/systest/web/WEB-INF/web.xml.template
deleted file mode 100644
index 89a079d..0000000
--- a/jsf-ri/systest/web/WEB-INF/web.xml.template
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<web-app version="2.5"
-         xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-    <description>
-       JSF Systests
-    </description>
-    <display-name>JSF Systests</display-name>
-
-    <!-- Validate the Application Configuration Resources -->
-    <context-param>
-      <param-name>com.sun.faces.validateXml</param-name>
-      <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.generateUniqueServerStateIds</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableHtmlTagLibValidator</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>server</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
-        <param-value>{partial-state-saving}</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableJSStyleHiding</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.writeStateAtFormEnd</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.CONFIG_FILES</param-name>
-        <param-value>/WEB-INF/init-faces-config.xml</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>com.sun.faces.externalizeJavaScript</param-name>
-        <param-value>false</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>facelets.VIEW_MAPPINGS</param-name>
-        <param-value>/resources/composite/*;*.xhtml</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>javax.faces.PROJECT_STAGE</param-name>
-        <param-value>Development</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
-        <param-value>/WEB-INF/source1.taglib.xml;/WEB-INF/composite-behavior.taglib.xml</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.enableGroovyScripting</param-name>
-        <param-value>true</param-value>
-    </context-param>
-
-    <jsp-config>
-        <jsp-property-group>
-            <url-pattern>*.jspx</url-pattern>
-            <is-xml>true</is-xml>
-        </jsp-property-group>
-    </jsp-config>
-
-    <filter>
-        <filter-name>GroovyFilter</filter-name>
-        <filter-class>com.sun.faces.scripting.GroovySupportFilter</filter-class>
-    </filter>
-    <filter-mapping>
-        <filter-name>GroovyFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-        <dispatcher>REQUEST</dispatcher>
-        <dispatcher>FORWARD</dispatcher>
-        <dispatcher>INCLUDE</dispatcher>
-        <dispatcher>ERROR</dispatcher>
-    </filter-mapping>
-
-    <!-- Faces Servlet -->
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup> 1 </load-on-startup>
-    </servlet>
-
-    <!-- Faces Servlet Mapping -->
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>*.faces</url-pattern>
-    </servlet-mapping>
-
-
-    <env-entry>
-        <env-entry-name>welcomeMessage</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>Hello World from env-entry!</env-entry-value>
-    </env-entry>
-
-
-</web-app>
diff --git a/jsf-ri/systest/web/ajax/ajaxAllKeyword1.xhtml b/jsf-ri/systest/web/ajax/ajaxAllKeyword1.xhtml
deleted file mode 100644
index aa12c62..0000000
--- a/jsf-ri/systest/web/ajax/ajaxAllKeyword1.xhtml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<h:head>
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-    <title>Ajax Request</title>
-    <script type="text/javascript">
-    </script>
-</h:head>
-
-<h:body>
-
-<!-- Ajaxify Individual Controls -->
-
-    <h:form id="form1" >
-        <h:outputText id="out1" value="testtext"/>
-
-       <h:commandButton id="allKeyword"
-                        value="@all">
-           <f:ajax execute="@all"
-                   render="@all"/>
-       </h:commandButton>
-
-   </h:form>
-
-</h:body>
-
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxAllKeyword2.xhtml b/jsf-ri/systest/web/ajax/ajaxAllKeyword2.xhtml
deleted file mode 100644
index 6d3f11a..0000000
--- a/jsf-ri/systest/web/ajax/ajaxAllKeyword2.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<h:head>
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-    <title>Ajax Request</title>
-    <script type="text/javascript">
-        var a = true;
-        var b = false;
-    </script>
-</h:head>
-
-<h:body>
-
-<!-- Ajaxify Individual Controls -->
-
-    <h:form id="form1" >
-        <h:outputText id="out1" value="testtext"/>
-
-       <h:commandButton id="allKeyword"
-                        value="@all">
-           <f:ajax execute="@all"
-                   render="@all"/>
-       </h:commandButton>
-
-   </h:form>
-
-</h:body>
-
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxAllKeyword3.xhtml b/jsf-ri/systest/web/ajax/ajaxAllKeyword3.xhtml
deleted file mode 100644
index f070157..0000000
--- a/jsf-ri/systest/web/ajax/ajaxAllKeyword3.xhtml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-
-<h:head>
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-    <title>Ajax Request</title>
-    <script type="text/javascript">
-        // <![CDATA[
-        var a = true;
-        var b = false;
-        var c = a && b;
-        // ]]>
-    </script>
-</h:head>
-
-<h:body>
-
-<!-- Ajaxify Individual Controls -->
-
-    <h:form id="form1" >
-        <h:outputText id="out1" value="testtext"/>
-
-       <h:commandButton id="allKeyword"
-                        value="@all">
-           <f:ajax execute="@all"
-                   render="@all"/>
-       </h:commandButton>
-
-   </h:form>
-
-</h:body>
-
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxAttrs.xhtml b/jsf-ri/systest/web/ajax/ajaxAttrs.xhtml
deleted file mode 100644
index 34b49df..0000000
--- a/jsf-ri/systest/web/ajax/ajaxAttrs.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Eval</title>
-</h:head>
-<body>
-    <h:form id="form">
-        <h:commandButton id="attr" value="Dummy" action="#{attrsBean.eval}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxCount.xhtml b/jsf-ri/systest/web/ajax/ajaxCount.xhtml
deleted file mode 100644
index 346fdb8..0000000
--- a/jsf-ri/systest/web/ajax/ajaxCount.xhtml
+++ /dev/null
@@ -1,67 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count"
-                         onclick="jsf.ajax.request(this, event, {execute: this.id, render: 'countForm:out1'}); return false;"/>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset"
-                            onclick="jsf.ajax.request(this, event, {execute:'countForm:reset', render: 'countForm:out1'}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxEcho.xhtml b/jsf-ri/systest/web/ajax/ajaxEcho.xhtml
deleted file mode 100644
index 6b271db..0000000
--- a/jsf-ri/systest/web/ajax/ajaxEcho.xhtml
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<f:view contentType="text/html"/>
-<h:head>
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-    <title>Ajax</title>
-</h:head>
-<h:body>
-    <h:form id="form1">    <!-- Note that unlike previous examples, prependid='true' -->
-        <h:outputScript name="jsf.js" library="javax.faces" target="head"/>
-        <h:outputScript name="ajax/echo1.js" target="head"/>
-        <h:outputStylesheet name="stylesheet.css"/>
-
-        Output: <h:outputText id="out1" value="#{ajaxecho.str}"/>
-        <br/>
-        Input: <h:inputText id="in1" value="#{ajaxecho.str}"/>
-        <!-- Increment the counter on the server, and the client -->
-        <br/>
-        <h:commandButton id="button1" value="Echo"
-                         onclick="return buttonpush('form1:out1 form1:in1', 'form1:button1 form1:in1', this, event);"/>
-        <br/>
-        <!-- Test using a valid string as an identifier, instead of an element -->
-        <h:commandButton id="button2" value="Echo"
-                         onclick="return buttonpush('form1:out1 form1:in1', 'form1:button2 form1:in1', 'form1:button2', event);"/>
-        <br/>
-        <!-- Resets the string, refreshes the form, but not the page -->
-        <h:commandButton id="reset" value="reset"
-                            onclick="return resetpush(this, event);"
-                            actionListener="#{ajaxecho.reset}"/>
-        <!-- Reloads the page, doesn't reset the string -->
-        <h:commandButton id="reload" value="reload"/>
-        <h:messages/>
-    </h:form>
-
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxEchoArea.xhtml b/jsf-ri/systest/web/ajax/ajaxEchoArea.xhtml
deleted file mode 100644
index 23938ed..0000000
--- a/jsf-ri/systest/web/ajax/ajaxEchoArea.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<f:view contentType="text/html; charset=iso-8859-1"/>
-<h:head>
-    <title>Ajax Textarea</title>
-</h:head>
-<h:body>
-    <h:form id="form1">
-        Output: <h:outputText id="out1" value="#{ajaxecho.str}"/>
-        <br/>
-        Input: <h:inputTextarea id="in1" value="#{ajaxecho.str}">
-            <f:ajax render="out1"/>
-        </h:inputTextarea>
-        <br/>
-        <h:commandButton id="button1" value="Echo" type="button"/>
-        <br/>
-        <h:commandButton id="reload" value="reload"/>
-        <h:messages/>
-    </h:form>
-
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxError.xhtml b/jsf-ri/systest/web/ajax/ajaxError.xhtml
deleted file mode 100644
index b4654f9..0000000
--- a/jsf-ri/systest/web/ajax/ajaxError.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<f:view contentType="text/html"/>
-<h:head>
-    <title>Ajax Eval</title>
-</h:head>
-<body>
-    <h:form id="form">
-        <h:commandButton id="eval" value="Eval" action="#{evalBean.error}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxError2.xhtml b/jsf-ri/systest/web/ajax/ajaxError2.xhtml
deleted file mode 100644
index 80438e9..0000000
--- a/jsf-ri/systest/web/ajax/ajaxError2.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<f:view contentType="text/html"/>
-<h:head>
-    <title>Ajax Error 2</title>
-</h:head>
-<body>
-    <h:form id="form">
-        <h:commandButton id="error" value="Error" action="#{errorBean.error}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxError3.xhtml b/jsf-ri/systest/web/ajax/ajaxError3.xhtml
deleted file mode 100644
index bef34fc..0000000
--- a/jsf-ri/systest/web/ajax/ajaxError3.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Error 3</title>
-</h:head>
-<body>
-    <script type="text/javascript">
-        var errorUpdate = function errorUpdate(data) {
-            var statusArea = document.getElementById("statusArea");
-            var text = statusArea.value;
-            text = text + "Name: "+data.source.id;
-            if (data.type === "event") {
-                text = text +" Event: "+data.status+" ";
-            } else {  // otherwise, it's an error
-                text = text + " Error: "+data.status+" ";
-            }
-            statusArea.value = text;
-        }
-    </script>
-
-    <h:form id="form">
-        <h:commandButton id="error" value="Error" action="#{errorBean.error}">
-            <f:ajax execute="@this" render="@none" onerror="errorUpdate"/>
-        </h:commandButton>
-    </h:form>
-
-    <input id="statusArea" type="text" />
-</body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxEval.xhtml b/jsf-ri/systest/web/ajax/ajaxEval.xhtml
deleted file mode 100644
index 346ed31..0000000
--- a/jsf-ri/systest/web/ajax/ajaxEval.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Eval</title>
-</h:head>
-<body>
-    <h:form id="form">
-        <h:commandButton id="eval" value="Eval" action="#{evalBean.eval}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxEvent.xhtml b/jsf-ri/systest/web/ajax/ajaxEvent.xhtml
deleted file mode 100644
index 414e2ae..0000000
--- a/jsf-ri/systest/web/ajax/ajaxEvent.xhtml
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-<script type="text/javascript">
-var statusUpdate = function statusUpdate(data) {
-    var statusArea = document.getElementById("statusArea");
-    var text = statusArea.value;
-    text = text + "Name: "+data.source.id;
-    if (data.type === "event") {
-        text = text +" Event: "+data.status+" ";
-    } else {  // otherwise, it's an error
-        text = text + " Error: "+data.status+" ";
-    }
-    statusArea.value = text;
-}
-</script>
-    <h1>Simple Event Test</h1>
-    <h:form id="countForm">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count"
-                         onclick="jsf.ajax.request(this, event, {execute: this.id, render: 'countForm:out1', onevent: statusUpdate, onerror: statusUpdate}); return false;"/>
-        <br/>
-        <h:commandButton id="button2" value="Count form"
-                         onclick="jsf.ajax.request(this, event, {execute: this.id, render: 'countForm', onevent: statusUpdate, onerror: statusUpdate}); return false;"/>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset"
-                            onclick="jsf.ajax.request(this, event, {execute:'countForm:reset', render: 'countForm:out1', onevent: statusUpdate, onerror: statusUpdate}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-    <p>
-        <h3> Status:</h3>
-        <textarea id="statusArea" cols="40" rows="10" readonly="readonly" />
-    </p>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxIncludedScript.xhtml b/jsf-ri/systest/web/ajax/ajaxIncludedScript.xhtml
deleted file mode 100644
index de6d3ca..0000000
--- a/jsf-ri/systest/web/ajax/ajaxIncludedScript.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-
-    <h1>Simple Event Test</h1>
-    <h:form id="countForm">
-<!--   Render the entire form, including the enclosed script.
-       This tests if included scripts have their CDATA blocks
-       escaped correctly.
-    -->
-<script type="text/javascript">
-var statusUpdate = function statusUpdate(data) {
-    var statusArea = document.getElementById("statusArea");
-    var text = statusArea.value;
-    text = text + "Name: "+data.source.id;
-    if (data.type === "event") {
-        text = text +" Event: "+data.name+" ";
-    } else {  // otherwise, it's an error
-        text = text + " Error: "+data.name+" ";
-    }
-    statusArea.value = text;
-}
-</script>
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count"
-                         onclick="jsf.ajax.request(this, event, {execute: this.id, render: 'countForm', onevent: statusUpdate, onerror: statusUpdate}); return false;"/>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset"
-                            onclick="jsf.ajax.request(this, event, {execute:'countForm:reset', render: 'countForm:out1', onevent: statusUpdate, onerror: statusUpdate}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-    <p>
-        <h3> Status:</h3>
-        <textarea id="statusArea" cols="40" rows="10" readonly="readonly" />
-    </p>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxIncludedText.xhtml b/jsf-ri/systest/web/ajax/ajaxIncludedText.xhtml
deleted file mode 100644
index 65705bd..0000000
--- a/jsf-ri/systest/web/ajax/ajaxIncludedText.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Included Text Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test included text with ajax</h1>
-    <h:form id="form1" prependId="true">
-        <h:panelGroup layout="block" id="outPanel">
-            <h:outputText id="out" value="outval"/><br/>
-            <span id="finalSpan1">Text should stay</span>
-        </h:panelGroup>
-        <br/>
-        <h:commandButton id="refresh"
-                         onclick="jsf.ajax.request(this,event, {render: 'form1:outPanel'}); return false;" />
-        Explicit parameters:
-    </h:form>
-    <h:form id="form2" prependId="true">
-        <h:panelGroup layout="block" id="outPanel">
-            <h:outputText id="out" value=""/><br/>
-            <span id="finalSpan2">Text should stay</span>
-        </h:panelGroup>
-        <br/>
-        <h:commandButton id="refresh"
-                         onclick="jsf.ajax.request(this,event, {render: 'form2:outPanel'}); return false;" />
-        Explicit parameters:
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxInsertDelete.xhtml b/jsf-ri/systest/web/ajax/ajaxInsertDelete.xhtml
deleted file mode 100644
index 095cdc9..0000000
--- a/jsf-ri/systest/web/ajax/ajaxInsertDelete.xhtml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Insert/Delete</title>
-</h:head>
-<h:body>
-    <h:form id="form1">
-        <h:commandButton id="before" value="Add Before" action="#{insertDeleteBean.insertBefore}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        <h:commandButton id="removeBefore" value="Remove Before" action="#{insertDeleteBean.removeBefore}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        <h:commandButton id="after" value="Add After" action="#{insertDeleteBean.insertAfter}">
-            <f:ajax execute="@this" render="@none" />
-        </h:commandButton>
-         <h:commandButton id="removeAfter" value="Remove After" action="#{insertDeleteBean.removeAfter}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-    <br/>
-    <hr id="hr" />
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxInvalidXML.xhtml b/jsf-ri/systest/web/ajax/ajaxInvalidXML.xhtml
deleted file mode 100644
index ffbed6e..0000000
--- a/jsf-ri/systest/web/ajax/ajaxInvalidXML.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Bad XML</title>
-</h:head>
-<h:body>
-    <h:form id="form1">
-        <h:commandButton id="bad" value="Emit Bad XML" action="#{invalidXMLBean.emitBadXML}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxMalformedXML.xhtml b/jsf-ri/systest/web/ajax/ajaxMalformedXML.xhtml
deleted file mode 100644
index 4699749..0000000
--- a/jsf-ri/systest/web/ajax/ajaxMalformedXML.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Eval</title>
-</h:head>
-<body>
-    <h:form id="form">
-        <h:commandButton id="error" value="error" action="#{failBean.fail1}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxMessage.xhtml b/jsf-ri/systest/web/ajax/ajaxMessage.xhtml
deleted file mode 100644
index e20c8d2..0000000
--- a/jsf-ri/systest/web/ajax/ajaxMessage.xhtml
+++ /dev/null
@@ -1,115 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Test Message Render</title>
-</h:head>
-<h:body>
-    <h1>Test Message Render</h1>
-    <h2> Test with id</h2>
-    <h:form id="testform1">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/ajax/ajaxMessage">
-            <f:ajax execute="in1" render="in1 msgs"/>
-                         </h:commandButton>
-        <h:messages id="msgs"/>
-    </h:form>
-    <br/>
-    <h:form id="testform1a">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/ajax/ajaxMessage">
-            <f:ajax execute="in1" render="in1 msgs"/>
-                         </h:commandButton>
-        <h:messages id="msgs" layout="table"/>
-    </h:form>
-    <br/>
-    <h:form id="testform2">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/ajax/ajaxMessage">
-            <f:ajax execute="in1" render="in1 msg"/>
-                         </h:commandButton>
-        <br/>
-        <h:message for="in1" id="msg"/>
-    </h:form>
-
-    <h2>Test without id</h2>
-    <h:form id="testform3">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/ajax/ajaxMessage">
-            <f:ajax execute="in1" render="@form"/>
-                         </h:commandButton>
-        <h:messages/>
-    </h:form>
-    <br/>
-    <h:form id="testform3a">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/ajax/ajaxMessage">
-            <f:ajax execute="in1" render="@form"/>
-                         </h:commandButton>
-        <h:messages layout="table"/>
-    </h:form>
-    <br/>
-    <h:form id="testform4">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/ajax/ajaxMessage">
-            <f:ajax execute="in1" render="@form"/>
-                         </h:commandButton>
-        <br/>
-        <h:message for="in1"/>
-    </h:form>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxMultiform.xhtml b/jsf-ri/systest/web/ajax/ajaxMultiform.xhtml
deleted file mode 100644
index 7335d39..0000000
--- a/jsf-ri/systest/web/ajax/ajaxMultiform.xhtml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm1">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm1:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm1:reset" render="countForm1:out1"/>
-        </h:commandButton>
-    </h:form>
-    <h:form id="countForm2">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm2:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm2:reset" render="countForm2:out1"/>
-        </h:commandButton>
-    </h:form>
-    <h:form id="countForm3">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm3:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm3:reset" render="countForm3:out1"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxProjectStage.xhtml b/jsf-ri/systest/web/ajax/ajaxProjectStage.xhtml
deleted file mode 100644
index 0cc15ee..0000000
--- a/jsf-ri/systest/web/ajax/ajaxProjectStage.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<f:view contentType="text/html"/>
-<h:head>
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-    <title>Ajax Project Stage</title>
-</h:head>
-<h:body>
-    <h:outputScript name="jsf.js" library="javax.faces" target="head"/>
-
-    <div id="stage"/>
-
-    <script type="text/javascript">
-        var stage = document.getElementById("stage");
-        stage.innerHTML = jsf.getProjectStage();
-    </script>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxRedirect.xhtml b/jsf-ri/systest/web/ajax/ajaxRedirect.xhtml
deleted file mode 100644
index 193c57a..0000000
--- a/jsf-ri/systest/web/ajax/ajaxRedirect.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Redirect</title>
-</h:head>
-<h:body>
-    <h:form id="form">
-        <h:commandButton id="redirect" value="Redirect" action="#{redirectBean.redirect}">
-             <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsButton.xhtml b/jsf-ri/systest/web/ajax/ajaxRequestDefaultsButton.xhtml
deleted file mode 100644
index 19db7a5..0000000
--- a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsButton.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test defaults with Prepended Ids</h1>
-    <h:form id="form1">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count"
-                         onclick="jsf.ajax.request(this, event, {execute: this.id, render: 'form1:out1'}); return false;"/>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page-->
-        Explicit parameters:
-        <h:commandButton id="reset1" value="reset1"
-                            onclick="jsf.ajax.request(this, event, {execute:'form1:reset1', render: 'form1:out1'}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        Implicit execute:
-        <h:commandButton id="reset2" value="reset2"
-                            onclick="jsf.ajax.request(this, event, {render: 'form1:out1'}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        Implicit render:
-        <h:commandButton id="reset3" value="reset3"
-                            onclick="jsf.ajax.request(this, event, {execute:'form1:reset3'}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        Default Options:
-        <h:commandButton id="reset4" value="reset4"
-                            onclick="jsf.ajax.request(this, event); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsButtonNoPrepend.xhtml b/jsf-ri/systest/web/ajax/ajaxRequestDefaultsButtonNoPrepend.xhtml
deleted file mode 100644
index b286d38..0000000
--- a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsButtonNoPrepend.xhtml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test defaults without Prepended Ids</h1>
-    <h:form id="form1" prependId="false">
-
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count"
-                         onclick="jsf.ajax.request(this, event, {execute: this.id, render: 'out1'}); return false;"/>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page-->
-        Explicit parameters:
-        <h:commandButton id="reset1" value="reset1"
-                            onclick="jsf.ajax.request(this, event, {execute:'reset1', render: 'out1'}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        Implicit execute:
-        <h:commandButton id="reset2" value="reset2"
-                            onclick="jsf.ajax.request(this, event, {render: 'out1'}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        Implicit render:
-        <h:commandButton id="reset3" value="reset3"
-                            onclick="jsf.ajax.request(this, event, {execute:'reset3'}); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        Default Options:
-        <h:commandButton id="reset4" value="reset4"
-                            onclick="jsf.ajax.request(this, event); return false;"
-                            actionListener="#{ajaxrequest.resetCount}"/>
-        <br/>
-        <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsEdit.xhtml b/jsf-ri/systest/web/ajax/ajaxRequestDefaultsEdit.xhtml
deleted file mode 100644
index 16416c1..0000000
--- a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsEdit.xhtml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test defaults with Prepended Ids</h1>
-    <h:form id="form1">
-        <h:panelGroup layout="block" id="outPanel">
-            <h:outputText id="out1" value="#{ajaxrequest.echo}"/>
-            <br/>
-            <h:outputText id="echo1Out" value="#{ajaxrequest.echo1}"/>
-            <br/>
-            <h:outputText id="echo2Out" value="#{ajaxrequest.echo2}"/>
-            <br/>
-            <h:outputText id="echo3Out" value="#{ajaxrequest.echo3}"/>
-            <br/>
-            <h:outputText id="echo4Out" value="#{ajaxrequest.echo4}"/>
-            <br/>
-        </h:panelGroup>
-        <h:commandButton id="refresh"
-                         onclick="jsf.ajax.request(this,event, {render: 'form1:outPanel'}); return false;" />
-        Explicit parameters:
-        <h:inputText id="edit1" value="#{ajaxrequest.echo1}"
-                            onchange="jsf.ajax.request(this,event, {execute:'form1:edit1', render: 'form1:edit1'});"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        Implicit execute:
-        <h:inputText id="edit2" value="#{ajaxrequest.echo2}"
-                            onchange="jsf.ajax.request(this,event, {render: 'form1:edit2'});"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        Implicit render:
-        <h:inputText id="edit3" value="#{ajaxrequest.echo3}"
-                            onchange="jsf.ajax.request(this,event, {execute:'form1:edit3'});"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        Default Options:
-        <h:inputText id="edit4" value="#{ajaxrequest.echo4}"
-                            onchange="jsf.ajax.request(this,event);"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.echo}"/>
-        <br/>
-        <!-- Used to reset the values between tests -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetEcho}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.echo}"/>
-
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsEditNoPrepend.xhtml b/jsf-ri/systest/web/ajax/ajaxRequestDefaultsEditNoPrepend.xhtml
deleted file mode 100644
index c16f5b1..0000000
--- a/jsf-ri/systest/web/ajax/ajaxRequestDefaultsEditNoPrepend.xhtml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test defaults without Prepended Ids</h1>
-    <h:form id="form1" prependId="false">
-        <h:panelGroup layout="block" id="outPanel">
-            <h:outputText id="out1" value="#{ajaxrequest.echo}"/>
-            <br/>
-            <h:outputText id="echo1Out" value="#{ajaxrequest.echo1}"/>
-            <br/>
-            <h:outputText id="echo2Out" value="#{ajaxrequest.echo2}"/>
-            <br/>
-            <h:outputText id="echo3Out" value="#{ajaxrequest.echo3}"/>
-            <br/>
-            <h:outputText id="echo4Out" value="#{ajaxrequest.echo4}"/>
-            <br/>
-        </h:panelGroup>
-        <h:commandButton id="refresh"
-                         onclick="jsf.ajax.request(this,event, {render: 'outPanel'}); return false;" />
-        Explicit parameters:
-        <h:inputText id="edit1" value="#{ajaxrequest.echo1}"
-                            onchange="jsf.ajax.request(this,event, {execute:'edit1', render: 'edit1'});"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        Implicit execute:
-        <h:inputText id="edit2" value="#{ajaxrequest.echo2}"
-                            onchange="jsf.ajax.request(this,event, {render: 'edit2'});"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        Implicit render:
-        <h:inputText id="edit3" value="#{ajaxrequest.echo3}"
-                            onchange="jsf.ajax.request(this,event, {execute:'edit3'});"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        Default Options:
-        <h:inputText id="edit4" value="#{ajaxrequest.echo4}"
-                            onchange="jsf.ajax.request(this,event);"
-                            valueChangeListener="#{ajaxrequest.echoValue}"/>
-        <br/>
-        <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.echo}"/>
-        <br/>
-        <!-- Used to reset the values between tests -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetEcho}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.echo}"/>
-
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxRequestMultiRender.xhtml b/jsf-ri/systest/web/ajax/ajaxRequestMultiRender.xhtml
deleted file mode 100644
index aa195e6..0000000
--- a/jsf-ri/systest/web/ajax/ajaxRequestMultiRender.xhtml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm" prependId="false">
-        <h:outputText id="out1" value="#{ajaxcount.count1}"/>
-        <br/>
-        <h:outputText id="out2" value="#{ajaxcount.count2}"/>
-        <br/>
-        <h:outputText id="out3" value="#{ajaxcount.count3}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count 1 2 3"
-                         onclick="jsf.ajax.request(this, event, {execute: this.id, render: 'out1 out2 out3'}); return false;"/>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset 1 2 3"
-                            onclick="jsf.ajax.request(this, event, {render: 'out1 out2 out3 out4'}); return false;"
-                            actionListener="#{ajaxcount.resetCount}">
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out4" value="#{ajaxcount.count4}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxRerenderOtherForm.xhtml b/jsf-ri/systest/web/ajax/ajaxRerenderOtherForm.xhtml
deleted file mode 100644
index 0740c79..0000000
--- a/jsf-ri/systest/web/ajax/ajaxRerenderOtherForm.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-
-    <h1>Rerender a form from within another form</h1>
-    <h:form id="form1">
-    	<h:outputText value="#{viewScope.postback}"/>
-        <h:commandButton value="Should be postback" id="button1">
-        	<f:setPropertyActionListener value="It was a postback!!!" target="#{viewScope['postback']}"/>
-        </h:commandButton>
-    </h:form>
-    
-    <h:form id="form2">
-    	<h:commandButton value="Rerender form1" id="button2">
-			<f:ajax render=":form1"/>
-	</h:commandButton>
-    </h:form>
-
-</h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/ajax/ajaxSelect.xhtml b/jsf-ri/systest/web/ajax/ajaxSelect.xhtml
deleted file mode 100644
index 4abbf5c..0000000
--- a/jsf-ri/systest/web/ajax/ajaxSelect.xhtml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-    <h:head><title>SelectOneAjaxTest</title></h:head>
-    <h:body>
-
-    <h:outputText id="out" value="#{selectChange.string}"/>
-    <hr/>
-    <h:form id="form">
-        <h:selectOneRadio id="s1rad" value="#{selectChange.string}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="radio-1" itemLabel="1"/>
-            <f:selectItem itemValue="radio-2" itemLabel="2"/>
-            <f:selectItem itemValue="radio-2" itemLabel="3"/>
-        </h:selectOneRadio>
-        <br/>
-        <h:selectOneMenu id="s1menu" value="#{selectChange.string}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="menu-1" itemLabel="1"/>
-            <f:selectItem itemValue="menu-2" itemLabel="2"/>
-            <f:selectItem itemValue="menu-3" itemLabel="3"/>
-        </h:selectOneMenu>
-        <br/>
-        <h:selectOneListbox id="s1list" value="#{selectChange.string}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="list-1" itemLabel="1"/>
-            <f:selectItem itemValue="list-2" itemLabel="2"/>
-            <f:selectItem itemValue="list-3" itemLabel="3"/>
-        </h:selectOneListbox>
-        <br/>
-        <h:selectManyListbox id="smlist" value="#{selectChange.sarray}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="mlist-1" itemLabel="1"/>
-            <f:selectItem itemValue="mlist-2" itemLabel="2"/>
-            <f:selectItem itemValue="mlist-3" itemLabel="3"/>
-        </h:selectManyListbox>
-        <br/>
-        <h:selectManyCheckbox id="smcheck" value="#{selectChange.sarray}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="mcheck-1" itemLabel="1"/>
-            <f:selectItem itemValue="mcheck-2" itemLabel="2"/>
-            <f:selectItem itemValue="mcheck-3" itemLabel="3"/>
-        </h:selectManyCheckbox>
-        <br/>
-        <h:outputLabel for="bool" value="Check me"/>
-        <h:selectBooleanCheckbox id="bool" value="#{selectChange.bool}">
-            <f:ajax render=":out"/>
-        </h:selectBooleanCheckbox>
-        <br/>
-        <h:commandButton id="button" value="Click Me">
-            <f:ajax render="@all"/>
-        </h:commandButton>
-    </h:form>
-    </h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/ajax/ajaxTable.xhtml b/jsf-ri/systest/web/ajax/ajaxTable.xhtml
deleted file mode 100644
index 9a1c436..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTable.xhtml
+++ /dev/null
@@ -1,124 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Table</title>
-</h:head>
-<body>
-    <h:form id="form" prependId="false">
-
-        <h:dataTable id="table" value="#{ajaxTable.list}" var="item">
-
-            <f:facet name="header">
-                    <h:outputText id="head" value="'dataTable' ajax test" />
-            </f:facet>
-
-            <h:column>
-                    <f:facet name="header">
-                    <h:outputText value="id" />
-                    </f:facet>
-                         <h:outputText id="outId" value="#{item.id}"/>
-            </h:column>
-
-            <h:column>
-                    <f:facet name="header">
-                    <h:outputText value="name"/>
-                    </f:facet>
-                         <h:outputText id="outName" value="#{item.name}"/>
-            </h:column>
-
-            <h:column id="city">
-                    <f:facet name="header">
-                    <h:outputText value="city"/>
-                    </f:facet>
-                         <h:inputText id="inCity" value="#{item.city}">
-                             <f:ajax/>
-                         </h:inputText>
-            </h:column>
-
-            <h:column>
-                <f:facet name="likescheese">
-                    <h:outputText value="likescheese"/>
-                </f:facet>
-                <h:selectBooleanCheckbox id="cheesecheck" value="#{item.likesCheese}">
-                    <f:ajax render="cheesepref"/>
-                </h:selectBooleanCheckbox>
-            </h:column>
-            
-            <h:column>
-                <f:facet name="cheesepref">
-                    <h:outputText value="Cheese Pref"/>
-                </f:facet>
-                <h:outputText id="cheesepref" value="#{item.cheesePreference}"/>
-            </h:column>
-
-            <h:column>
-                <f:facet name="countlink">
-                    <h:outputText value="Count Link"/>
-                </f:facet>
-                <h:commandLink id="countlink" value="Count">
-                    <f:ajax render="count :form:count"/>
-                </h:commandLink>
-            </h:column>
-
-            <h:column>
-                <f:facet name="count">
-                    <h:outputText value="Count"/>
-                </f:facet>
-                <h:outputText id="count" value="#{ajaxcount.count1}"/>
-            </h:column>
-        </h:dataTable>
-
-        <!-- Submits with out executing the table, so tests the city change -->
-        <h:commandButton id="submitButton" value="Submit" type="submit">
-            <f:ajax render="form:table"/>
-        </h:commandButton>
-
-        <br/>
-
-        <h:outputText value="Count:"/><h:outputText id="count" value="#{ajaxcount.count2}"/>
-
-    </h:form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxTagCount.xhtml b/jsf-ri/systest/web/ajax/ajaxTagCount.xhtml
deleted file mode 100644
index 3ef5b41..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagCount.xhtml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax  render="countForm:out1"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagDefaultsButton.xhtml b/jsf-ri/systest/web/ajax/ajaxTagDefaultsButton.xhtml
deleted file mode 100644
index 330ec9f..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagDefaultsButton.xhtml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Test Page</title>
-</h:head>
-<h:body>
-    <h1>Test Ajax tag defaults with Prepended Ids</h1>
-    <h:form id="form1">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="form1:out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page-->
-        Explicit parameters:
-        <h:commandButton id="reset1" value="reset1" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="form1:reset1" render="form1:out1"/>
-        </h:commandButton>
-        <br/>
-        Implicit execute:
-        <h:commandButton id="reset2" value="reset2" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax render="form1:out1"/>
-        </h:commandButton>
-        <br/>
-        Implicit render:
-        <h:commandButton id="reset3" value="reset3" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="form1:reset3"/>
-        </h:commandButton>
-        <br/>
-        Default Options:
-        <h:commandButton id="reset4" value="reset4" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax/>
-        </h:commandButton>
-        <br/>
-        <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload"/>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagDefaultsButtonNoPrepend.xhtml b/jsf-ri/systest/web/ajax/ajaxTagDefaultsButtonNoPrepend.xhtml
deleted file mode 100644
index 2b641a9..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagDefaultsButtonNoPrepend.xhtml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Test Page</title>
-</h:head>
-<h:body>
-    <h1>Test Ajax tag defaults with Prepended Ids</h1>
-    <h:form id="form1" prependId="false">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="out1"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page-->
-        Explicit parameters:
-        <h:commandButton id="reset1" value="reset1" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="reset1" render="out1"/>
-        </h:commandButton>
-        <br/>
-        Implicit execute:
-        <h:commandButton id="reset2" value="reset2" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax render="out1"/>
-        </h:commandButton>
-        <br/>
-        Implicit render:
-        <h:commandButton id="reset3" value="reset3" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="reset3"/>
-        </h:commandButton>
-        <br/>
-        Default Options:
-        <h:commandButton id="reset4" value="reset4" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax/>
-        </h:commandButton>
-        <br/>
-        <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload"/>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagDefaultsEdit.xhtml b/jsf-ri/systest/web/ajax/ajaxTagDefaultsEdit.xhtml
deleted file mode 100644
index a20549f..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagDefaultsEdit.xhtml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test defaults with Prepended Ids</h1>
-    <h:form id="form1">
-        <h:panelGroup layout="block" id="outPanel">
-        <h:outputText id="out1" value="#{ajaxrequest.echo}"/>
-        <br/>
-        <h:outputText id="echo1Out" value="#{ajaxrequest.echo1}"/>
-        <br/>
-        <h:outputText id="echo2Out" value="#{ajaxrequest.echo2}"/>
-        <br/>
-        <h:outputText id="echo3Out" value="#{ajaxrequest.echo3}"/>
-        <br/>
-        <h:outputText id="echo4Out" value="#{ajaxrequest.echo4}"/>
-        <br/>
-        </h:panelGroup>
-    <h:commandButton id="refresh" value="refresh">
-            <f:ajax render="form1:outPanel"/>
-            </h:commandButton>
-        Explicit parameters:
-            <h:inputText id="edit1" value="#{ajaxrequest.echo1}" valueChangeListener="#{ajaxrequest.echoValue}" >
-                <f:ajax execute="form1:edit1" render="form1:edit1" />
-                </h:inputText>
-            <br/>
-            Implicit execute:
-            <h:inputText id="edit2" value="#{ajaxrequest.echo2}" valueChangeListener="#{ajaxrequest.echoValue}" >
-                <f:ajax render="form1:edit2" />
-            </h:inputText>
-            <br/>
-            Implicit render:
-            <h:inputText id="edit3" value="#{ajaxrequest.echo3}" valueChangeListener="#{ajaxrequest.echoValue}" >
-                <f:ajax execute="form1:edit3"/>
-                </h:inputText>
-            <br/>
-            Default Options:
-            <h:inputText id="edit4" value="#{ajaxrequest.echo4}" valueChangeListener="#{ajaxrequest.echoValue}" >
-                <f:ajax/>
-                </h:inputText>
-            <br/>
-            <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.echo}"/>
-        <br/>
-        <!-- Used to reset the values between tests -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetEcho}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.echo}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagDefaultsEditNoPrepend.xhtml b/jsf-ri/systest/web/ajax/ajaxTagDefaultsEditNoPrepend.xhtml
deleted file mode 100644
index 73315f3..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagDefaultsEditNoPrepend.xhtml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Defaults Request Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test defaults without Prepended Ids</h1>
-    <h:form id="form1" prependId="false">
-        <h:panelGroup layout="block" id="outPanel">
-        <h:outputText id="out1" value="#{ajaxrequest.echo}"/>
-        <br/>
-        <h:outputText id="echo1Out" value="#{ajaxrequest.echo1}"/>
-        <br/>
-        <h:outputText id="echo2Out" value="#{ajaxrequest.echo2}"/>
-        <br/>
-        <h:outputText id="echo3Out" value="#{ajaxrequest.echo3}"/>
-        <br/>
-        <h:outputText id="echo4Out" value="#{ajaxrequest.echo4}"/>
-        <br/>
-        </h:panelGroup>
-        <h:commandButton id="refresh" value="refresh">
-            <f:ajax render="outPanel"/>
-            </h:commandButton>
-        Explicit parameters:
-        <h:inputText id="edit1" value="#{ajaxrequest.echo1}" valueChangeListener="#{ajaxrequest.echoValue}" >
-            <f:ajax execute="edit1" render="edit1" />
-            </h:inputText>
-        <br/>
-        Implicit execute:
-        <h:inputText id="edit2" value="#{ajaxrequest.echo2}" valueChangeListener="#{ajaxrequest.echoValue}" >
-            <f:ajax render="edit2" />
-        </h:inputText>
-        <br/>
-        Implicit render:
-        <h:inputText id="edit3" value="#{ajaxrequest.echo3}" valueChangeListener="#{ajaxrequest.echoValue}" >
-            <f:ajax execute="edit3"/>
-            </h:inputText>
-        <br/>
-        Default Options:
-        <h:inputText id="edit4" value="#{ajaxrequest.echo4}" valueChangeListener="#{ajaxrequest.echoValue}" >
-            <f:ajax/>
-            </h:inputText>
-        <br/>
-        <!-- Contained within the form - but still shouldn't update except for full page load -->
-        <h:outputText id="out2" value="#{ajaxrequest.echo}"/>
-        <br/>
-        <!-- Used to reset the values between tests -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetEcho}"/>
-        <br/>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.echo}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagDisabled.xhtml b/jsf-ri/systest/web/ajax/ajaxTagDisabled.xhtml
deleted file mode 100644
index 24eb23f..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagDisabled.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" type="button" value="Disabled Count">
-            <f:ajax render="countForm:out1" disabled="true"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button2" type="button" value="Enabled Count">
-            <f:ajax render="countForm:out1" disabled="false"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm:reset" render="countForm:out1"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagEvent.xhtml b/jsf-ri/systest/web/ajax/ajaxTagEvent.xhtml
deleted file mode 100644
index d5f8218..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagEvent.xhtml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-<script type="text/javascript">
- var statusUpdate = function statusUpdate(data) {
-    var statusArea = document.getElementById("statusArea");
-    var text = statusArea.value;
-    text = text + "Name: "+data.source.id;
-    if (data.type === "event") {
-        text = text +" Event: "+data.status+" ";
-    } else {  // otherwise, it's an error
-        text = text + " Error: "+data.status+" ";
-    }
-    statusArea.value = text;
-}
-</script>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="countForm:out1" onevent="statusUpdate" onerror="statusUpdate"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm:reset" render="countForm:out1" onevent="statusUpdate" onerror="statusUpdate"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-    <p>
-        <h3> Status:</h3>
-        <textarea id="statusArea" cols="40" rows="10" readonly="readonly" />
-    </p>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxTagEventAttribute.xhtml b/jsf-ri/systest/web/ajax/ajaxTagEventAttribute.xhtml
deleted file mode 100644
index 9251d63..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagEventAttribute.xhtml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Tag Test Page</title>
-</h:head>
-<h:body>
-    <h1>Test ajax tag event attribute</h1>
-    <h:form id="form" prependId="false">
-
-        <!-- Bug #1081 filed against it not using mouseover on outputText -->
-        <f:ajax event="mouseover" render="out2">
-            <h:outputText id="out1" value="#{ajaxtag.count}"/>
-        </f:ajax>
-        <br/>
-
-        <h:outputText id="out2" value="#{ajaxtag.count}"/>
-        <br/>
-        
-        <f:ajax event="valueChange" render="out3">
-            <h:inputText id="in1" value="#{ajaxtag.text}"/>
-        </f:ajax>
-        <br/>
-
-        <h:outputText id="out3" value="#{ajaxtag.text}"/>
-        <br/>
-
-        <f:ajax event="action" render="out2">
-            <h:commandButton id="button" value="reset" actionListener="#{ajaxtag.reset}"/>
-        </f:ajax>
-
-
-        <br/>
-        <h:selectBooleanCheckbox id="checkbox1" value="#{ajaxtag.checked}">
-            <f:ajax render="checkedvalue1"/>
-            </h:selectBooleanCheckbox>
-        <h:outputText id="checkedvalue1" value="#{ajaxtag.checked}"/>
-        <br/>
-
-        <h:selectBooleanCheckbox id="checkbox2" value="#{ajaxtag.checked}">
-            <f:ajax event="valueChange" render="checkedvalue2"/>
-            </h:selectBooleanCheckbox>
-        <h:outputText id="checkedvalue2" value="#{ajaxtag.checked}"/>
-        <br/>
-
-
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxtag.reset}">
-            <f:ajax execute="reset"/>
-        </h:commandButton>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out4" value="#{ajaxtag.count}"/>
-
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxTagEventWrapping.xhtml b/jsf-ri/systest/web/ajax/ajaxTagEventWrapping.xhtml
deleted file mode 100644
index 163cd9f..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagEventWrapping.xhtml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Tag Test Page</title>
-</h:head>
-<h:body>
-    <script type="text/javascript">
-        var count = 1;
-        function say() {
-            var out2 = document.getElementById("say");
-            out2.innerHTML = count++;
-        };
-    </script>
-    <h1>Test onclick and onchange wrapping</h1>
-    <h:form id="form" prependId="false">
-        <h:outputText id="out1" value="#{ajaxtag.count}"/>
-        <br/>
-        <h:outputText id="say" value="init"/>
-        <br/>
-        <h:outputText id="paramOut" value="#{param.testname}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="out1"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button2" value="Say"
-                onclick="say();return false;"/>
-        <br/>
-        <h:commandButton id="button3" value="Count and Say"
-                onclick="say();return true;">
-            <f:ajax render="out1 paramOut"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button4" value="Param">
-            <f:param name="testname" value="testval"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button5" value="Count and Param">
-            <f:param name="testname" value="testval"/>
-            <f:ajax render="out1 paramOut"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button6" value="Count and Say and Param"
-                onclick="say();return true;">
-            <f:param name="testname" value="testval"/>
-            <f:ajax render="out1 paramOut"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button7" value="Say and Param"
-                onclick="say();return true;">
-            <f:param name="testname" value="testval"/>
-        </h:commandButton>
-        <br/>
-        <h:selectBooleanCheckbox id="checkbox1" value="#{ajaxtag.checked}">
-            <f:ajax render="checkedvalue1"/>
-            </h:selectBooleanCheckbox>
-        <h:outputText id="checkedvalue1" value="#{ajaxtag.checked}"/>
-        <br/>
-        <h:selectBooleanCheckbox id="checkbox2" value="#{ajaxtag.checked}"
-                onclick="say();return true;">
-            <f:ajax render="checkedvalue2"/>
-        </h:selectBooleanCheckbox>
-        <h:outputText id="checkedvalue2" value="#{ajaxtag.checked}"/>
-        <br/>
-        <h:selectBooleanCheckbox id="checkbox3" value="#{ajaxtag.checked}"
-                onclick="say();return true;">
-        </h:selectBooleanCheckbox>
-        <h:outputText id="checkedvalue3" value="#{ajaxtag.checked}"/>
-        <br/>
-        <h:selectBooleanCheckbox id="checkbox4" value="#{ajaxtag.checked}"/>
-        <h:outputText id="checkedvalue4" value="#{ajaxtag.checked}"/>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxtag.reset}">
-            <f:ajax execute="reset"/>
-        </h:commandButton>
-        <h:commandButton id="reload" value="reload" />
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out2" value="#{ajaxtag.count}"/>
-
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/ajaxTagKeywords.xhtml b/jsf-ri/systest/web/ajax/ajaxTagKeywords.xhtml
deleted file mode 100644
index 8621a31..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagKeywords.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm" prependId="false">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="@all"/>
-        </h:commandButton>
-        <br/>
-        <br/>
-        <h:commandButton id="button2" value="Count">
-            <f:ajax render="@form"/>
-        </h:commandButton>
-        <br/>
-        <br/>
-        <h:commandButton id="button3" value="#{ajaxrequest.count}">
-            <f:ajax render="@this"/>
-        </h:commandButton>
-        <br/>
-        <br/>
-        <h:commandButton id="button4" value="Count">
-            <f:ajax render="@none"/>
-        </h:commandButton>
-        <br/>
-        <br/>
-        <h:commandButton id="button5" value="Count">
-            <f:ajax render="countForm:out2"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm:reset" render="countForm:out1"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="out3" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagMulti.xhtml b/jsf-ri/systest/web/ajax/ajaxTagMulti.xhtml
deleted file mode 100644
index 14f6ba6..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagMulti.xhtml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Request Test Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Simple Counter Test</h1>
-    <h:form id="countForm">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:outputText id="out2" value="#{ajaxrequest.count}"/>
-        <br/>
-        <h:outputText id="out3" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count 1">
-            <f:ajax render="out1"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button2" value="Count 2">
-            <f:ajax render="out1 out2"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button3" value="Count all 3">
-            <f:ajax render="out1 out2 out3"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button4" value="Refresh Form">
-            <f:ajax render="countForm"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="countForm:reset" render="countForm"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="outside" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagResolve.xhtml b/jsf-ri/systest/web/ajax/ajaxTagResolve.xhtml
deleted file mode 100644
index 550aa3b..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagResolve.xhtml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Tag Resolve Test Page</title>
-</h:head>
-<h:body>
-    <h1>Test of Resolving Cliet Id's within Ajax Tag</h1>
-    <h:form id="form1">
-        <h:outputText id="out1" value="#{ajaxtag.count}"/>
-        <br/>
-        <h:outputText id="out5" value="#{ajaxtag.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count 1">
-            <f:ajax render="out1"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button2" value="Count 2">
-            <f:ajax render=":form2:out2"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button3" value="Count 3">
-            <f:ajax render=":out3"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button4" value="Count One">
-            <f:ajax render="#{ajaxtag.renderOne}"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button5" value="Count List">
-            <f:ajax render="#{ajaxtag.renderList}"/>
-        </h:commandButton>
-        <br/>
-        <!-- Resets the counter, doesn't refresh the form -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxtag.reset}">
-            <f:ajax execute="reset" render="form1"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="reload" value="reload"/>
-        <br/>
-    </h:form>
-    <h:form id="form2">
-        <h:outputText id="out2" value="#{ajaxtag.count}"/>
-        <br/>
-    </h:form>
-    <h:outputText id="out3" value="#{ajaxtag.count}"/>
-    <br/>
-    <h:outputText id="out4" value="#{ajaxtag.count}"/>
-    <br/>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/ajaxTagWrapping.xhtml b/jsf-ri/systest/web/ajax/ajaxTagWrapping.xhtml
deleted file mode 100644
index e38250b..0000000
--- a/jsf-ri/systest/web/ajax/ajaxTagWrapping.xhtml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Tag Test Page</title>
-</h:head>
-<h:body>
-    <h1>Test Tag with each component</h1>
-    <h:form id="form" prependId="false">
-        <h:outputText id="out1" value="#{ajaxtag.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" value="Count">
-            <f:ajax render="out1"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button2" value="Count">
-            <f:ajax event="click" render="out1"/>
-        </h:commandButton>
-        <br/>
-        <h:commandLink id="link1" value="Count" >
-            <f:ajax render="out1"/>
-        </h:commandLink>
-        <br/>
-        <h:inputText id="intext" value="#{ajaxtag.text}">
-            <f:ajax render="outtext"/>
-        </h:inputText>
-        <h:inputText id="intext2" value="#{ajaxtag.text}">
-            <f:ajax event="change" render="outtext"/>
-        </h:inputText>
-        <h:outputText id="outtext" value="#{ajaxtag.text}"/>
-        <br/>
-        <h:selectBooleanCheckbox id="checkbox" value="#{ajaxtag.checked}">
-            <f:ajax render="checkedvalue"/>
-        </h:selectBooleanCheckbox>
-        <h:outputText id="checkedvalue" value="#{ajaxtag.checked}"/>
-        <br/>
-        <h:selectManyCheckbox id="manyCheckbox" value="#{ajaxtag.checkedValues}">
-            <f:selectItem itemLabel="One" itemValue="1" />
-            <f:selectItem itemLabel="Two" itemValue="2" />
-            <f:selectItem itemLabel="Three" itemValue="3" />
-            <f:ajax render="manyCheckedValue" />
-        </h:selectManyCheckbox>
-        <h:outputText id="manyCheckedValue" value="#{ajaxtag.checkedValuesString}" />
-        <br/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxtag.reset}">
-            <f:ajax execute="reset" render="form"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="reload-ajax" value="reload-ajax" type="submit">
-            <f:ajax execute="@all" render="@all"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="reload" value="reload" type="submit" />
-    </h:form>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/browser/browser.xhtml b/jsf-ri/systest/web/ajax/browser/browser.xhtml
deleted file mode 100644
index 2489d78..0000000
--- a/jsf-ri/systest/web/ajax/browser/browser.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>JSF Browser Compatibility Test</title>
-</h:head>
-<h:body>
-    <h:link value="browserSelectChange" outcome="browserSelectChange" />    <br/>
-    <h:link value="browserUpdateAttribute" outcome="browserUpdateAttribute" />   <br/>
-    <h:link value="browserUpdateView" outcome="browserUpdateView" />    <br/>
-    <h:link value="browserEvalScripts" outcome="browserEvalScripts" />    <br/>
-</h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/ajax/browser/browserEvalScripts.xhtml b/jsf-ri/systest/web/ajax/browser/browserEvalScripts.xhtml
deleted file mode 100644
index 42131d9..0000000
--- a/jsf-ri/systest/web/ajax/browser/browserEvalScripts.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:cc="http://java.sun.com/jsf/composite/ajax">
-<h:head>
-    <title>Eval Script Tests</title>
-</h:head>
-<h:body>
-
-    <span id="target">Pending</span> <br/>
-
-    <script type="text/javascript">
-        var target;
-        window.fileMarker = 0;
-        var checkPass = function checkPass() {
-            target = document.getElementById('target');
-            if (typeof marker === 'undefined') {
-                target.innerHTML = "Failed - marker unset";
-            } else {
-                target.innerHTML = "PASSED";
-            }
-        };
-        var checkPassFile = function checkPassFile(data) {
-            target = document.getElementById("target");
-            if (window.fileMarker == 2) {
-                target.innerHTML = "PASSED";
-            } else {
-                target.innerHTML = "Failed - file marker is " + window.fileMarker + ", should be 2";
-            }
-        };
-        var evalFileEvent = function evalFileEvent(data) {
-            if (data.status == "success") {
-                // need a sleep function, to wait for file load
-                setTimeout(checkPassFile,200);
-            }
-        };
-    </script>
-    <div id="updated"></div>
-    <cc:evalTestFile id="evalFile"/>
-    <cc:evalTestInline id="evalInline"/>
-    <h:form>
-        <h:commandButton id="doEval" value="doEval" action="#{evalScriptBean.doEval}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        Works in all browsers except K
-        <br/>
-        <h:commandButton id="doInline" value="doInline" action="#{evalScriptBean.doInline}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        Works in all browsers
-        <br/>
-        <h:commandButton id="doInlineCC" value="doInlineCC">
-            <f:ajax execute="@none" render=":evalInline"/>
-        </h:commandButton>
-        Works in all browsers
-        <br/>
-        <h:commandButton id="doFile" value="doFile" action="#{evalScriptBean.doInline}">
-            <f:ajax execute="@none" render=":evalFile" onevent="evalFileEvent"/>
-        </h:commandButton>
-        Works in all browsers
-        <br/>
-        <h:commandButton id="doUpdateRootAllEval" value="doUpdateRootAllEval" action="#{evalScriptBean.doUpdateRootAllEval}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        Works in all browsers
-        <br/>
-        <h:commandButton id="doUpdateRootSimpleEval" value="doUpdateRootSimpleEval" action="#{evalScriptBean.doUpdateRootSimpleEval}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        Works in all browsers
-        <br/>
-        <h:commandButton id="doUpdateBodyTagEval" value="doUpdateBodyTagEval" action="#{evalScriptBean.doUpdateBodyTagEval}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        Works in all browsers
-        <br/>
-        <h:commandButton id="insertBeforeEval" value="insertBeforeEval" action="#{evalScriptBean.insertBeforeEval}">
-            <f:ajax execute="@this" render="@none"/>
-        </h:commandButton>
-        Works in all browsers
-        <br/>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/browser/browserSelectChange.xhtml b/jsf-ri/systest/web/ajax/browser/browserSelectChange.xhtml
deleted file mode 100644
index 2c7d7fa..0000000
--- a/jsf-ri/systest/web/ajax/browser/browserSelectChange.xhtml
+++ /dev/null
@@ -1,113 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>JSF OnChange Test</title>
-</h:head>
-<h:body bgcolor="white">
-    <h:outputText id="out" value="#{selectChange.string}"/>
-    <hr/>
-    <h:form>
-        <h:selectOneRadio value="#{selectChange.string}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="PASSED" itemLabel="Click Me"/>
-            <f:selectItem itemValue="PASSED" itemLabel="2"/>
-            <f:selectItem itemValue="PASSED" itemLabel="3"/>
-        </h:selectOneRadio>
-        <br/>
-    </h:form>
-
-
-    <h:form>
-        <h:selectOneMenu value="#{selectChange.string}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="PASSED" itemLabel="1"/>
-            <f:selectItem itemValue="PASSED" itemLabel="Click Me"/>
-            <f:selectItem itemValue="PASSED" itemLabel="3"/>
-        </h:selectOneMenu>
-    </h:form>
-
-    <h:form>
-        <h:selectOneListbox value="#{selectChange.string}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="PASSED" itemLabel="1"/>
-            <f:selectItem itemValue="PASSED" itemLabel="Click Me"/>
-            <f:selectItem itemValue="PASSED" itemLabel="3"/>
-        </h:selectOneListbox>
-    </h:form>
-
-    <h:form>
-        <h:selectOneListbox value="#{selectChange.string}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="PASSED" itemLabel="1"/>
-            <f:selectItem itemValue="PASSED" itemLabel="Click Me"/>
-            <f:selectItem itemValue="PASSED" itemLabel="3"/>
-        </h:selectOneListbox>
-    </h:form>
-
-    <h:form>
-        <h:selectManyListbox value="#{selectChange.sarray}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="PASSED" itemLabel="1"/>
-            <f:selectItem itemValue="PASSED" itemLabel="Click Me"/>
-            <f:selectItem itemValue="PASSED" itemLabel="3"/>
-        </h:selectManyListbox>
-    </h:form>
-
-    <h:form>
-        <h:selectManyCheckbox value="#{selectChange.sarray}">
-            <f:ajax render=":out"/>
-            <f:selectItem itemValue="PASSED" itemLabel="Check Me"/>
-            <f:selectItem itemValue="PASSED" itemLabel="2"/>
-            <f:selectItem itemValue="PASSED" itemLabel="3"/>
-        </h:selectManyCheckbox>
-    </h:form>
-
-    <h:form>
-        <h:outputLabel for="bool" value="Check me"/>
-        <h:selectBooleanCheckbox id="bool" value="#{selectChange.bool}">
-            <f:ajax render=":out"/>
-        </h:selectBooleanCheckbox>
-    </h:form>
-    
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/ajax/browser/browserUpdateAttribute.xhtml b/jsf-ri/systest/web/ajax/browser/browserUpdateAttribute.xhtml
deleted file mode 100644
index 78424d1..0000000
--- a/jsf-ri/systest/web/ajax/browser/browserUpdateAttribute.xhtml
+++ /dev/null
@@ -1,82 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Update Root</title>
-</h:head>
-<h:body>
-    <style type="text/css">
-        .green { background-color: green;}
-    </style>
-    <script type="text/javascript">
-        function checkPass() {
-            var check = document.getElementById('checkvalue');
-            check.value = 'PASSED';
-        };
-    </script>
-    <h:form id="form1" prependId="true">
-        <input id="checkvalue" value="Pending"/>
-        <br/>
-        <input type="button" id="checkbutton" value="" style="display: none"/>
-        <hr/>
-        <h:commandButton id="updatevalue" value="UpdateValue" action="#{browserAttributes.updateValue}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="updatestyle" value="UpdateStyle" action="#{browserAttributes.updateStyle}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="updateclass" value="UpdateClass" action="#{browserAttributes.updateClass}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="updateevent" value="UpdateEvent" action="#{browserAttributes.updateEvent}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-    </h:form>
-</h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/ajax/browser/browserUpdateView.xhtml b/jsf-ri/systest/web/ajax/browser/browserUpdateView.xhtml
deleted file mode 100644
index 8ec7f0d..0000000
--- a/jsf-ri/systest/web/ajax/browser/browserUpdateView.xhtml
+++ /dev/null
@@ -1,115 +0,0 @@
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Ajax Update Root</title>
-</h:head>
-<h:body style="background-color: silver">
-    <script type="text/javascript">
-        function checkPass() {
-            var body = document.getElementsByTagName('body')[0];
-            body.innerHTML = '<span id="newvalue">PASSED</span>';
-        };
-        function checkId() {
-            var body = document.getElementById('bodyId');
-            if (body) {
-                body.innerHTML = '<span id="newvalue">PASSED</span>';
-            } else {
-                body.innerHTML = '<span id="newvalue">Failed</span>';
-
-            }
-        };
-    </script>
-    <h:form id="form1">
-        <h:commandButton id="simpleroot" value="SimpleRoot" action="#{updateRootBean.updateRootSimple}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="bodyviewroot" value="RootBody" action="#{updateRootBean.updateRootBody}">
-              <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="allviewroot" value="AllRoot" action="#{updateRootBean.updateRootAll}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="faultyviewroot" value="AllRootFaulty" action="#{updateRootBean.updateRootFaulty}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="bodysimple" value="BodySimple" action="#{updateRootBean.updateBodySimple}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="bodytag" value="BodyTag" action="#{updateRootBean.updateBodyTag}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="viewhead" value="ViewHead" action="#{updateRootBean.updateHead}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Fails on all - this is fine
-        <br/>
-        <h:commandButton id="rootsimpleevent" value="RootSimpleEvent" action="#{updateRootBean.updateRootSimpleEvent}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="rootallevent" value="RootAllEvent" action="#{updateRootBean.updateRootAllEvent}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="rootbodystyle" value="RootBodyStyle" action="#{updateRootBean.updateRootBodyStyle}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="rootsimplestyle" value="RootSimpleStyle" action="#{updateRootBean.updateRootSimpleStyle}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-        <h:commandButton id="rootallStyle" value="RootAllStyle" action="#{updateRootBean.updateRootAllStyle}">
-                      <f:ajax execute="@this" render="@none"/>
-        </h:commandButton> Works in all browsers
-        <br/>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/ajax/redirecttarget.xhtml b/jsf-ri/systest/web/ajax/redirecttarget.xhtml
deleted file mode 100644
index 48c75a9..0000000
--- a/jsf-ri/systest/web/ajax/redirecttarget.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-  The contents of this file are subject to the terms of either the GNU
-  General Public License Version 2 only ("GPL") or the Common Development
-  and Distribution License("CDDL") (collectively, the "License").  You
-  may not use this file except in compliance with the License. You can obtain
-  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-  language governing permissions and limitations under the License.
-
-  When distributing the software, include this License Header Notice in each
-  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-  Sun designates this particular file as subject to the "Classpath" exception
-  as provided by Sun in the GPL Version 2 section of the License file that
-  accompanied this code.  If applicable, add the following below the License
-  Header, with the fields enclosed by brackets [] replaced by your own
-  identifying information: "Portions Copyrighted [year]
-  [name of copyright owner]"
-
-  Contributor(s):
-
-  If you wish your version of this file to be governed by only the CDDL or
-  only the GPL Version 2, indicate your decision by adding "[Contributor]
-  elects to include this software in this distribution under the [CDDL or GPL
-  Version 2] license."  If you don't indicate a single choice of license, a
-  recipient has the option to distribute your version of this file under
-  either the CDDL, the GPL Version 2 or to extend the choice of license to
-  its licensees as provided above.  However, if you add GPL Version 2 code
-  and therefore, elected the GPL Version 2 license, then the option applies
-  only if the new code is made subject to such option by the copyright
-  holder.
-
--->
-
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<head>
-    <title>Redirect Target</title>
-</head>
-<body>
-<h:outputText id="redirect" value="Redirect Target"/>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/annotationtest.xhtml b/jsf-ri/systest/web/annotationtest.xhtml
deleted file mode 100644
index 2dd83c3..0000000
--- a/jsf-ri/systest/web/annotationtest.xhtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>Annotation Scanning Test Case</title>
-</head>
-
-<body>
-<h:outputText style="font-style: italic;"
-          value="Test Passed: #{annotationTestBean.testResult}"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/bar01.jsp b/jsf-ri/systest/web/bar01.jsp
deleted file mode 100644
index c9b80a5..0000000
--- a/jsf-ri/systest/web/bar01.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="bar01">
-<h:outputText value="bar01"/>
-</f:subview>
diff --git a/jsf-ri/systest/web/bar02.jsp b/jsf-ri/systest/web/bar02.jsp
deleted file mode 100644
index 7158919..0000000
--- a/jsf-ri/systest/web/bar02.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-
-<h:outputText value="bar02"/>
-
diff --git a/jsf-ri/systest/web/binding01.jsp b/jsf-ri/systest/web/binding01.jsp
deleted file mode 100644
index ea9a24d..0000000
--- a/jsf-ri/systest/web/binding01.jsp
+++ /dev/null
@@ -1,57 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>Test case for bug5030555</title>
-</head>
-<body>
-<h:form id="form">
-<h:inputText id="toChange" binding="#{methodRef.inputField}"/>
-<h:commandButton id="changeValue" value="changeValue"/>
-</h:form>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/clearApplicationMapProperty.xhtml b/jsf-ri/systest/web/clearApplicationMapProperty.xhtml
deleted file mode 100644
index 6544b07..0000000
--- a/jsf-ri/systest/web/clearApplicationMapProperty.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
->
-<h:head>
-<title>Clear an application scoped property named in a query string parameter</title>
-</h:head>
-
-<h:body>
-
-    <c:set value="#{null}" target="#{applicationScope}" property="#{param['name']}" />
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/commandLinkPrependId.jsp b/jsf-ri/systest/web/commandLinkPrependId.jsp
deleted file mode 100644
index 7e93800..0000000
--- a/jsf-ri/systest/web/commandLinkPrependId.jsp
+++ /dev/null
@@ -1,70 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test CommandLink inside prependId form with button name == submit</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-  </head>
-
-  <body>
-    <h1>Test CommandLink inside prependId form with button name == submit</h1>
-
-<f:view>
-
-  <h:form id="form" prependId="false">
-
-    <p>This form has prepndId==false and has a button with an
-    id=="submit".</p>
-
-    <p><h:commandButton id="submit" value="submit" action="welcome"/></p>
-
-    <p><h:commandLink id="whatever" action="welcome">Command Link</h:commandLink></p>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-    <address><a href="mailto:ed.burns at sun.com">Edward Burns</a></address>
-<!-- Created: Fri Jul 21 06:40:37 PDT 2006 -->
-<!-- hhmts start -->
-Last modified: Fri Jul 21 07:12:08 PDT 2006
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/component.jsp b/jsf-ri/systest/web/component.jsp
deleted file mode 100644
index 8173392..0000000
--- a/jsf-ri/systest/web/component.jsp
+++ /dev/null
@@ -1,61 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.component.UIComponent"
-%><%@ page import="com.sun.faces.systest.TestComponent"
-%><%
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // try to retrieve our component from Application
-  UIComponent result = appl.createComponent("TestComponent");
-  // report the result
-  if (result == null || 
-      !(result instanceof com.sun.faces.systest.TestComponent)) {
-    out.println("/component.jsp FAILED");
-    return;
-  } else {
-      out.println("/component.jsp PASSED");
-  }
-  
-%>
diff --git a/jsf-ri/systest/web/component01.jsp b/jsf-ri/systest/web/component01.jsp
deleted file mode 100644
index c01124e..0000000
--- a/jsf-ri/systest/web/component01.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.component.UIComponent"
-%><%@ page import="com.sun.faces.systest.TestComponent"
-%><%
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // replace mappings provided by the JSF implementation in order to 
-  // customize the behavior of standard JSF features.
-  UIComponent oldForm = appl.createComponent("javax.faces.Form");
-  appl.addComponent("javax.faces.Form", "com.sun.faces.systest.TestComponent");
-
-  // try to retrieve our component from Application
-  UIComponent result = appl.createComponent("javax.faces.Form");
-  // report the result
-  if (result == null || 
-      !(result instanceof com.sun.faces.systest.TestComponent)) {
-    out.println("/component01.jsp FAILED");
-    return;
-  } else {
-      out.println("/component01.jsp PASSED");
-  }
-
-  // restore the old mapping
-  appl.addComponent("javax.faces.Form", oldForm.getClass().getName());
-  
-%>
diff --git a/jsf-ri/systest/web/component02.jsp b/jsf-ri/systest/web/component02.jsp
deleted file mode 100644
index 2aaadf5..0000000
--- a/jsf-ri/systest/web/component02.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%--
-    Added for issue 212.  
-    Ensure transient components do not cause issues
-    with state restoration (verbatim is treated as transient)
---%>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<f:view>
-    <h:form>
-        <f:verbatim>
-            Test Verbatim
-        </f:verbatim>
-        <h:outputText value="Test Output Text"/>       
-        <h:commandButton id="submit" value="Groovy Button"/>
-    </h:form>
-</f:view>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/componentImplicitObject.jsp b/jsf-ri/systest/web/componentImplicitObject.jsp
deleted file mode 100644
index 952a818..0000000
--- a/jsf-ri/systest/web/componentImplicitObject.jsp
+++ /dev/null
@@ -1,58 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%
-    java.util.List<String> l = new java.util.ArrayList<String>(2);
-    l.add("one");
-    l.add("two");
-    request.setAttribute("list", l);
-%>
-<f:view>
-    <h:form prependId="false">
-        <h:outputText id="ot" value="#{component.id}"/>
-        <h:dataTable value="#{requestScope.list}" var="v">
-            <h:column>
-                <f:facet name="header" >
-                    <h:outputText id="facetOT" value="#{component.id}"/>
-                </f:facet>
-                <h:inputText id="it" value="#{component.id}"/>
-            </h:column>
-        </h:dataTable>        
-    </h:form>
-</f:view>
diff --git a/jsf-ri/systest/web/composite/action.xhtml b/jsf-ri/systest/web/composite/action.xhtml
deleted file mode 100644
index dc5aaa5..0000000
--- a/jsf-ri/systest/web/composite/action.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Action at various composite nesting levels</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <p>
-        1. One nesting level.  Level 1 targets an action.
-    </p>
-    <ez:customAction id="c0" action="#{compositeBean.action}" />
-
-    <p>
-        2. Two nesting levels.  Level 1 defines a custom action and passes it to level 2.  Level 2 targets an action.
-    </p>
-    <ez:actionWrapper1 id="c1" customAction="#{compositeBean.action}"/>
-
-    <p>
-        3. Two nesting levels.  Level 1 defines a bean and passes a property as an action to level 2.  Level 2 targets an action.
-    </p>
-    <ez:actionWrapper2 id="c2" bean="#{compositeBean}" />
-
-    <p>
-        4. Three nesting levels.  Level 1 defines a bean and passes a property as a custom action to level 2.  Level 2 defines a custom action and passes it to level 3.  Level 3 targets an action.
-    </p>
-    <ez:actionWrapper3 id="c3" bean="#{compositeBean}" />
-
-    <p>
-        5. Three nesting levels.  Level 1 defines a custom action and passes it to level 2.  Level 2 defines a custom action and passes it to level 3.  Level 3 targets an action.
-    </p>
-    <ez:actionWrapper4 id="c4" customAction="#{compositeBean.action}" />
-
-</h:form>
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/actionListener.xhtml b/jsf-ri/systest/web/composite/actionListener.xhtml
deleted file mode 100644
index 9014fe0..0000000
--- a/jsf-ri/systest/web/composite/actionListener.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>ActionListener at various composite nesting levels</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <p>
-        1. One nesting level.  Level 1 targets an actionListener.
-    </p>
-    <ez:customActionListener id="c0" actionListener="#{compositeBean.actionListener}" />
-
-    <p>
-        2. Two nesting levels.  Level 1 defines a custom actionListener and passes it to level 2.  Level 2 targets an actionListener.
-    </p>
-    <ez:actionListenerWrapper1 id="c1" customActionListener="#{compositeBean.actionListener}"/>
-
-    <p>
-        3. Two nesting levels.  Level 1 defines a bean and passes a property as an actionListener to level 2.  Level 2 targets an actionListener.
-    </p>
-    <ez:actionListenerWrapper2 id="c2" bean="#{compositeBean}" />
-
-    <p>
-        4. Three nesting levels.  Level 1 defines a bean and passes a property as a custom actionListener to level 2.  Level 2 defines a custom actionListener and passes it to level 3.  Level 3 targets an actionListener.
-    </p>
-    <ez:actionListenerWrapper3 id="c3" bean="#{compositeBean}" />
-
-    <p>
-        5. Three nesting levels.  Level 1 defines a custom actionListener and passes it to level 2.  Level 2 defines a custom actionListener and passes it to level 3.  Level 3 targets an actionListener.
-    </p>
-    <ez:actionListenerWrapper4 id="c4" customActionListener="#{compositeBean.actionListener}" />
-
-</h:form>
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/actionsource.xhtml b/jsf-ri/systest/web/composite/actionsource.xhtml
deleted file mode 100644
index 832fe83..0000000
--- a/jsf-ri/systest/web/composite/actionsource.xhtml
+++ /dev/null
@@ -1,101 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>actionSource1</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-   
-    <p>
-        Maps ActionListener to commandButton within composite/actionSource1.xhtml using
-        only the name attribute.
-    </p>
-    <ez:actionSource1 id="actionsource1">
-        <f:actionListener for="command" binding="#{compositeBean.actionListener}"/>
-    </ez:actionSource1>
-
-    <p>
-        Maps ActionListener to commandButton within composite/actionSource2.xhtml using
-        name and target attributes.
-    </p>
-    <ez:actionSource2 id="actionsource2">
-        <f:actionListener for="command" binding="#{compositeBean.actionListener}"/>
-    </ez:actionSource2>
-    
-    <p>
-        Maps ActionListener to a commandButton within a composite/actionSource1.xhtml
-        which is nested within composite/actionSource3.xhtml. Using the same ID
-        in the nesting.
-    </p>
-    <ez:actionSource3 id="actionsource3">
-        <f:actionListener for="command" binding="#{compositeBean.actionListener}"/>
-    </ez:actionSource3>
-
-    <p>
-        Ensure actionListeners are properly re-targeted when the
-        target of the actionListener is nested within another naming
-        container.  Note that the value of the 'for' attribute doesn't
-        mimic the NamingContainer hierarchy, that's handled by the
-        'targets' attribute within the composite:implementation section
-        of actionSource4.xhtml.
-    </p>
-    <ez:actionSource4 id="actionsource4">
-        <f:actionListener for="command" binding="#{compositeBean.actionListener}"/>
-    </ez:actionSource4>
-
-
-    <p />
-    <h:commandButton id="clear" value="Clear Messages"/>
-
-</h:form>
- <h:messages id="messages"/>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/addPhaseListener.xhtml b/jsf-ri/systest/web/composite/addPhaseListener.xhtml
deleted file mode 100644
index 9531879..0000000
--- a/jsf-ri/systest/web/composite/addPhaseListener.xhtml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>PhaseListener within a composite component</title>
-</h:head>
-<h:body>
-/composite/addPhaseListener.xhtml <my:addPhaseListener />
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/attachedconverter.xhtml b/jsf-ri/systest/web/composite/attachedconverter.xhtml
deleted file mode 100644
index b57bd4a..0000000
--- a/jsf-ri/systest/web/composite/attachedconverter.xhtml
+++ /dev/null
@@ -1,113 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>attachedconverter</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-   
-    <p>
-        Maps Conveter to inputText within composite/converter1.xhtml using
-        only the name attribute.
-    </p>
-    <ez:converter1 id="converter1">
-        <f:converter for="input" binding="#{compositeBean.converter}"/>
-    </ez:converter1>
-    <h:commandButton id="s1" value="Submit"/>
-
-</h:form>
-
-<h:form id="form2">
-    <p>
-        Maps Converter to inputText within composite/converter2.xhtml using
-        name and target attributes.
-    </p>
-    <ez:converter2 id="converter2">
-        <f:converter for="input" binding="#{compositeBean.converter}"/>
-    </ez:converter2>
-    <h:commandButton id="s2" value="Submit"/>
-
-</h:form>
-
-<h:form id="form3">
-    <p>
-        Maps Converter to a inputText within a composite/converter1.xhtml
-        which is nested within composite/converter3.xhtml. Using the same ID
-        in the nesting.
-    </p>
-    <ez:converter3 id="converter3">
-        <f:converter for="input" binding="#{compositeBean.converter}"/>
-    </ez:converter3>
-    <h:commandButton id="s3" value="Submit"/>
-
-</h:form>
-
-<h:form id="form4">
-    <p>
-        Ensure converters are properly re-targeted when the
-        target of the converter is nested within another naming
-        container.  Note that the value of the 'for' attribute doesn't
-        mimic the NamingContainer hierarchy, that's handled by the
-        'targets' attribute within the composite:implementation section
-        of converter4.xhtml.
-    </p>
-    <ez:converter4 id="converter4">
-        <f:converter for="input" binding="#{compositeBean.converter}"/>
-    </ez:converter4>
-    <h:commandButton id="s4" value="Submit"/>
-</h:form>
-
-
-<h:form id="cf">
-    <p />
-    <h:commandButton id="clear" value="Clear Messages"/>
-</h:form>
-<h:messages id="messages"/>
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/attachedvalidator.xhtml b/jsf-ri/systest/web/composite/attachedvalidator.xhtml
deleted file mode 100644
index 42bce50..0000000
--- a/jsf-ri/systest/web/composite/attachedvalidator.xhtml
+++ /dev/null
@@ -1,113 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>attachedvalidator</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-   
-    <p>
-        Maps Validator to inputText within composite/validator1.xhtml using
-        only the name attribute.
-    </p>
-    <ez:validator1 id="validator1">
-        <f:validator for="input" binding="#{compositeBean.validator}"/>
-    </ez:validator1>
-    <h:commandButton id="s1" value="Submit"/>
-
-</h:form>
-
-<h:form id="form2">
-    <p>
-        Maps Validator to inputText within composite/validator2.xhtml using
-        name and target attributes.
-    </p>
-    <ez:validator2 id="validator2">
-        <f:validator for="input" binding="#{compositeBean.validator}"/>
-    </ez:validator2>
-    <h:commandButton id="s2" value="Submit"/>
-
-</h:form>
-
-<h:form id="form3">
-    <p>
-        Maps Validator to a inputText within a composite/validator1.xhtml
-        which is nested within composite/validator3.xhtml. Using the same ID
-        in the nesting.
-    </p>
-    <ez:validator3 id="validator3">
-        <f:validator for="input" binding="#{compositeBean.validator}"/>
-    </ez:validator3>
-    <h:commandButton id="s3" value="Submit"/>
-
-</h:form>
-
-<h:form id="form4">
-    <p>
-        Ensure validators are properly re-targeted when the
-        target of the validator is nested within another naming
-        container.  Note that the value of the 'for' attribute doesn't
-        mimic the NamingContainer hierarchy, that's handled by the
-        'targets' attribute within the composite:implementation section
-        of validator4.xhtml.
-    </p>
-    <ez:validator4 id="validator4">
-        <f:validator for="input" binding="#{compositeBean.validator}"/>
-    </ez:validator4>
-    <h:commandButton id="s4" value="Submit"/>
-</h:form>
-
-
-<h:form>
-    <p />
-    <h:commandButton id="clear" value="Clear Messages"/>
-</h:form>
-<h:messages id="messages"/>
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/behavior/composite.xhtml b/jsf-ri/systest/web/composite/behavior/composite.xhtml
deleted file mode 100644
index 3714dd6..0000000
--- a/jsf-ri/systest/web/composite/behavior/composite.xhtml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<f:view contentType="text/html" xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ezb="http://java.sun.com/jsf/composite/ezbehaviors"
-      xmlns:b="http://mojarra.dev.java.net/composite-behavior">
-      <h:form id="form">
-        <ezb:compositeTest commandAction="#{testBean.doAction}">
-              	<b:behavior event="ok"/>        
-                <f:validateLength for="input" minimum="3" />
-        </ezb:compositeTest>
-        <h:commandButton action="refresh" value="refresh" id="refresh" />
-      </h:form>
-</f:view>
diff --git a/jsf-ri/systest/web/composite/boostrapCompositeComponentMetadata.xhtml b/jsf-ri/systest/web/composite/boostrapCompositeComponentMetadata.xhtml
deleted file mode 100644
index a64b6d9..0000000
--- a/jsf-ri/systest/web/composite/boostrapCompositeComponentMetadata.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:b="http://mojarra.dev.java.net/source1">
-<h:head>
-<title></title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-</h:head>
-
-<h:body>
-
-<h:form>
-
-<pre>
-
-  <b:bootstrapComponent />
-
-</pre>
-
-</h:form>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/childrenfacets.xhtml b/jsf-ri/systest/web/composite/childrenfacets.xhtml
deleted file mode 100644
index 92b3d02..0000000
--- a/jsf-ri/systest/web/composite/childrenfacets.xhtml
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Children and Facets</title>
-</h:head>
-
-<h:body>
-
-<h:form id="form">
-
-   <ez:childrenAndFacets id="cf">
-       <f:facet name="header">
-           <h:outputText id="outheader" style="color:blue" value="Inserted"/>
-       </f:facet>
-       <f:facet name="header2">
-           <h:outputText id="outheader2" style="color:red" value="Rendered"/>
-       </f:facet>
-       <h:outputText id="out1" value="v1"/>
-       <h:outputText id="out2" value="v2"/>
-   </ez:childrenAndFacets>
-   <h:commandButton id="submit" value="Reload"/>
-</h:form>
-<h:messages id="messages"/>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/clientId01.xhtml b/jsf-ri/systest/web/composite/clientId01.xhtml
deleted file mode 100644
index 90c4bd4..0000000
--- a/jsf-ri/systest/web/composite/clientId01.xhtml
+++ /dev/null
@@ -1,99 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>clientId from EL</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form>
-
-<h1>Form with no componentId and no prependId </h1>
-
-  <p>No componentId on usage: <ez:showClientId01 /></p>
-
-  <p>Yes componentId on usage: <ez:showClientId01 id="componentId" /></p>
-
-</h:form>
-
-<h:form prependId="false">
-
-<h1>Form with no componentId and prependId </h1>
-
-  <p>No componentId on usage: <ez:showClientId01 /></p>
-
-  <p>Yes componentId on usage: <ez:showClientId01 id="componentId01" /></p>
-
-</h:form>
-
-<h:form id="form2">
-
-<h1>Form with a componentId and no prependId </h1>
-
-  <p>No componentId on usage: <ez:showClientId01 /></p>
-
-  <p>Yes componentId on usage: <ez:showClientId01 id="componentId" /></p>
-
-</h:form>
-
-<h:form prependId="false" id="form3">
-
-<h1>Form with a componentId and prependId </h1>
-
-  <p>No componentId on usage: <ez:showClientId01 /></p>
-
-  <p>Yes componentId on usage: <ez:showClientId01 id="componentId02" /></p>
-
-</h:form>
-
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/compActionWithArgs.xhtml b/jsf-ri/systest/web/composite/compActionWithArgs.xhtml
deleted file mode 100644
index ac12c28..0000000
--- a/jsf-ri/systest/web/composite/compActionWithArgs.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Expression using EL arguments</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-
-  <ez:compWithArgs id="c" arg1="#{'arg1'}" bean="#{compositeBean}" />
-
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/compAttributeResourceRelocation.xhtml b/jsf-ri/systest/web/composite/compAttributeResourceRelocation.xhtml
deleted file mode 100644
index 1beb8bc..0000000
--- a/jsf-ri/systest/web/composite/compAttributeResourceRelocation.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>Composite attribute resolution/resource relocation</title>
-</h:head>
-<body>
-<h:form id="form">
-<ez:inlinedStyle1 style="color:red" />
-<h:commandButton id="submit" value="Submit" />
-</h:form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/composite/compAttributeWithArgs.xhtml b/jsf-ri/systest/web/composite/compAttributeWithArgs.xhtml
deleted file mode 100644
index 18912b4..0000000
--- a/jsf-ri/systest/web/composite/compAttributeWithArgs.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Expression using EL arguments</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-
-  <ez:compAttributeWithArgs id="c" arg1="#{'arg1'}" bean="#{compositeBean}" />
-
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/compositeInsertChildrenNesting.xhtml b/jsf-ri/systest/web/composite/compositeInsertChildrenNesting.xhtml
deleted file mode 100644
index 7996cca..0000000
--- a/jsf-ri/systest/web/composite/compositeInsertChildrenNesting.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>Composite InsertChildren Nesting</title>
-</h:head>
-<body>
-<h:form id="form">
-<ez:compA id="compA">
-    <span>Before Nested compcomp (3)</span><br/>
-    <ez:compB id="compB">
-        <span>Inside nested Component (4)</span><br/>
-    </ez:compB>
-    <span>After Nested compcomp(5)</span><br/>
-</ez:compA>
-<h:commandButton id="submit" value="Submit" />
-</h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/compositeInsertChildrenNesting02.xhtml b/jsf-ri/systest/web/composite/compositeInsertChildrenNesting02.xhtml
deleted file mode 100644
index df35a55..0000000
--- a/jsf-ri/systest/web/composite/compositeInsertChildrenNesting02.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>compositeInsertChildrenNesting02.xhtml</title>
-</head>
-<body>
-<ez:compD id="d">
-    <h:link value="Test">
-        <f:param name="foo" value="bar" />
-    </h:link>
-</ez:compD>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/compositeInsertFacetNesting.xhtml b/jsf-ri/systest/web/composite/compositeInsertFacetNesting.xhtml
deleted file mode 100644
index 5b1e17f..0000000
--- a/jsf-ri/systest/web/composite/compositeInsertFacetNesting.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>Composite InsertFacet Nesting</title>
-</h:head>
-<body>
-<h:form id="form">
-<ez:facetA id="facetA">
-    <f:facet name="header">
-        <h:outputText value="header" />
-    </f:facet>
-    <ez:facetB id="facetB">
-        <h:outputText value="Inside nested Component" style="color:black"/>
-    </ez:facetB>
-    <f:facet name="footer">
-        <h:outputText value="footer" />
-    </f:facet>
-</ez:facetA>
-<h:commandButton id="submit" value="Submit" />
-</h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/compositeInsertFacetNesting02.xhtml b/jsf-ri/systest/web/composite/compositeInsertFacetNesting02.xhtml
deleted file mode 100644
index a0540fc..0000000
--- a/jsf-ri/systest/web/composite/compositeInsertFacetNesting02.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>compositeInsertChildrenNesting02.xhtml</title>
-</head>
-<body>
-<ez:facetD id="d">
-   <f:facet name="header">
-       <h:outputText value="Header" />
-   </f:facet>
-   <f:facet name="footer">
-       <h:outputText value="Footer" />
-   </f:facet>
-</ez:facetD>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/compositionWithinCompositeUsingPage.xhtml b/jsf-ri/systest/web/composite/compositionWithinCompositeUsingPage.xhtml
deleted file mode 100644
index 5da2ab2..0000000
--- a/jsf-ri/systest/web/composite/compositionWithinCompositeUsingPage.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-
-</h:head>
-<h:body>
-  <h:form prependId="false">
-
-      <p>Ensures a nice exception happens when you try to use a
-      ui:composition within a composite component.</p>
-
-    <p>Composite Component usage:</p>
-
-<div id="cc" class="grayBox" style="border: 1px solid #090;">
-<p><my:compositionWithinComposite id="compcomp" /></p>
-</div>
-
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/customAction.xhtml b/jsf-ri/systest/web/composite/customAction.xhtml
deleted file mode 100644
index f43a29b..0000000
--- a/jsf-ri/systest/web/composite/customAction.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Action at various composite nesting levels</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <p>
-        1. One nesting level.  Level 1 passes the action as an attribute.
-    </p>
-    <ez:customCustomAction id="c0" customAction="#{compositeBean.custom}" />
-
-    <p>
-        2. Two nesting levels.  Level 1 defines a custom action and passes it to level 2.  Level 2 passes the action as an attribute.
-    </p>
-    <ez:customActionWrapper1 id="c1" customAction="#{compositeBean.custom}"/>
-
-    <p>
-        3. Two nesting levels.  Level 1 defines a bean and passes a property as an action to level 2.  Level 2 passes the action as an attribute.
-    </p>
-    <ez:customActionWrapper2 id="c2" bean="#{compositeBean}" />
-
-    <p>
-        4. Three nesting levels.  Level 1 defines a bean and passes a property as a custom action to level 2.  Level 2 defines a custom action and passes it to level 3.  Level 3 passes the action as an attribute.
-    </p>
-    <ez:customActionWrapper3 id="c3" bean="#{compositeBean}" />
-
-    <p>
-        5. Three nesting levels.  Level 1 defines a custom action and passes it to level 2.  Level 2 defines a custom action and passes it to level 3.  Level 3 passes the action as an attribute.
-    </p>
-    <ez:customActionWrapper4 id="c4" customAction="#{compositeBean.custom}" />
-
-</h:form>
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/decorate.xhtml b/jsf-ri/systest/web/composite/decorate.xhtml
deleted file mode 100644
index 94fd0fa..0000000
--- a/jsf-ri/systest/web/composite/decorate.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Decorate Test</title>
-</head>
-<body>
-    <ez:decorate/>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/defaultActionNext.xhtml b/jsf-ri/systest/web/composite/defaultActionNext.xhtml
deleted file mode 100644
index ee4b254..0000000
--- a/jsf-ri/systest/web/composite/defaultActionNext.xhtml
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>Next Page</title>
-</h:head>
-<h:body><p>defaultActionNext</p></h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/defaultActionUsingPage.xhtml b/jsf-ri/systest/web/composite/defaultActionUsingPage.xhtml
deleted file mode 100644
index 9a18dda..0000000
--- a/jsf-ri/systest/web/composite/defaultActionUsingPage.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-</h:head>
-<h:body>
-  <h:form prependId="false">
-      <ez:defaultAction id="ccTag"/>
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/defaultAttributeMethodExpression.xhtml b/jsf-ri/systest/web/composite/defaultAttributeMethodExpression.xhtml
deleted file mode 100644
index ac644f1..0000000
--- a/jsf-ri/systest/web/composite/defaultAttributeMethodExpression.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Decorate Test</title>
-</head>
-<body>
-    <ez:meDefaults id="def"/>
-    <h:messages />
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/defaultAttributeValuesUsingPage.xhtml b/jsf-ri/systest/web/composite/defaultAttributeValuesUsingPage.xhtml
deleted file mode 100644
index 55f9ef7..0000000
--- a/jsf-ri/systest/web/composite/defaultAttributeValuesUsingPage.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-
-</h:head>
-<h:body>
-  <h:form prependId="false">
-
-      <p>This test shows that composite:attribute default works for both
-      simple attrbutes and method-expression attributes</p>
-
-    <p>Composite Component usage:</p>
-
-<div id="cc" class="grayBox" style="border: 1px solid #090;">
-<p><my:javaTopLevelComponent id="loginPanel1" 
-                             item="Many Jars"
-                             valExp="#{''}"/></p>
-</div>
-
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/insertchildrenrequired01.xhtml b/jsf-ri/systest/web/composite/insertchildrenrequired01.xhtml
deleted file mode 100644
index 925a036..0000000
--- a/jsf-ri/systest/web/composite/insertchildrenrequired01.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Insert Children Required 01</title>
-</h:head>
-
-<h:body>
-
-   <ez:insertChildrenRequiredTrue/>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/insertchildrenrequired02.xhtml b/jsf-ri/systest/web/composite/insertchildrenrequired02.xhtml
deleted file mode 100644
index a80a4ef..0000000
--- a/jsf-ri/systest/web/composite/insertchildrenrequired02.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Insert Children Required 02</title>
-</h:head>
-
-<h:body>
-
-   <ez:insertChildrenRequiredTrue>
-       <f:facet name="facet">
-           <h:outputText value="Shouldn't be rendered"/>
-       </f:facet>
-   </ez:insertChildrenRequiredTrue>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/insertchildrenrequired03.xhtml b/jsf-ri/systest/web/composite/insertchildrenrequired03.xhtml
deleted file mode 100644
index d40a9cf..0000000
--- a/jsf-ri/systest/web/composite/insertchildrenrequired03.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Insert Children Required 03</title>
-</h:head>
-
-<h:body>
-
-   <ez:insertChildrenRequiredFalse/>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/insertfacetrequired01.xhtml b/jsf-ri/systest/web/composite/insertfacetrequired01.xhtml
deleted file mode 100644
index fa7f439..0000000
--- a/jsf-ri/systest/web/composite/insertfacetrequired01.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Insert Facet Required 01</title>
-</h:head>
-
-<h:body>
-
-   <ez:insertFacetRequiredTrue/>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/insertfacetrequired02.xhtml b/jsf-ri/systest/web/composite/insertfacetrequired02.xhtml
deleted file mode 100644
index b519961..0000000
--- a/jsf-ri/systest/web/composite/insertfacetrequired02.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Insert Facet Required 02</title>
-</h:head>
-
-<h:body>
-
-   <ez:insertFacetRequiredTrue>
-       <f:facet name="notWhatIsExpected">
-           <h:outputText value="Should Not Be Rendered"/>
-       </f:facet>
-   </ez:insertFacetRequiredTrue>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/insertfacetrequired03.xhtml b/jsf-ri/systest/web/composite/insertfacetrequired03.xhtml
deleted file mode 100644
index 6dc683d..0000000
--- a/jsf-ri/systest/web/composite/insertfacetrequired03.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Insert Facet Required 02</title>
-</h:head>
-
-<h:body>
-
-   <ez:insertFacetRequiredFalse/>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/invalidMeArgs.xhtml b/jsf-ri/systest/web/composite/invalidMeArgs.xhtml
deleted file mode 100644
index 0bd7955..0000000
--- a/jsf-ri/systest/web/composite/invalidMeArgs.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Expression using EL arguments</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-
-  <ez:invalidMeArgs id="c" custom="#{compositeBean.custom}" />
-
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/invalidVeArgs.xhtml b/jsf-ri/systest/web/composite/invalidVeArgs.xhtml
deleted file mode 100644
index e228c2d..0000000
--- a/jsf-ri/systest/web/composite/invalidVeArgs.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Expression using EL arguments</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-
-  <ez:invalidVeArgs id="c" bean="#{compositeBean}" />
-
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/issue1318.xhtml b/jsf-ri/systest/web/composite/issue1318.xhtml
deleted file mode 100644
index 57256b9..0000000
--- a/jsf-ri/systest/web/composite/issue1318.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>argAction</title>
-</head>
-<body>
-    <h:form id="form">
-        <ez:argAction id="arg" arg1="Hello" arg2="World!" />
-    </h:form>
-    <h:messages />
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/javaTopLevelActionListenerComponentUsingPage.xhtml b/jsf-ri/systest/web/composite/javaTopLevelActionListenerComponentUsingPage.xhtml
deleted file mode 100644
index bfb4878..0000000
--- a/jsf-ri/systest/web/composite/javaTopLevelActionListenerComponentUsingPage.xhtml
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>A Simple JavaServer Faces 2.0 View</title>
-    <style type="text/css">
-        .grayBox {
-            padding: 8px;
-            margin: 10px 0;
-            border: 1px solid #CCC;
-            background-color: #f9f9f9;
-        }
-    </style>
-
-</h:head>
-<h:body>
-    <h:form prependId="false">
-
-        <p>We nest a composite component inside a UIData. The composite
-            component consists of
-            a UICommand with an attached actionListener, in this case the
-            attached actionListener
-            is the composite component itself. When clicking the UICommand,
-            \#{cc} must resolve
-            to the composite component.
-        </p>
-
-        <p>We also added another action listener to the UICommand. This
-            actionListener will resolve \#{component.family} via the EL API. It
-            should return the family of UICommand
-        </p>
-
-
-        <div id="cc" class="grayBox" style="border: 1px solid #090;">
-            <h:form id="form">
-                <h:dataTable value="#{compositeBean.tableInputValues}"
-                             id="table">
-                    <h:column>
-                        <my:javaTopLevelActionListenerComponent/>
-                    </h:column>
-                </h:dataTable>
-            </h:form>
-        </div>
-
-    </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/javaTopLevelComponent2.xhtml b/jsf-ri/systest/web/composite/javaTopLevelComponent2.xhtml
deleted file mode 100644
index 4cd6fe4..0000000
--- a/jsf-ri/systest/web/composite/javaTopLevelComponent2.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>Page 2, tests default action</title>
-
-</h:head>
-<h:body>
-    <p>Made it to page 2</p>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/javaTopLevelComponentUsingPage.xhtml b/jsf-ri/systest/web/composite/javaTopLevelComponentUsingPage.xhtml
deleted file mode 100644
index 5f1f9ea..0000000
--- a/jsf-ri/systest/web/composite/javaTopLevelComponentUsingPage.xhtml
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-
-</h:head>
-<h:body>
-  <h:form prependId="false">
-
-      <p>We pass a literal string as the value of the "item" attribute in the
-          composite component below.  This literal string must be set into
-          the value of the corresponding javaBeans property on the
-      java top level component for javaTopLevelComponent.</p>
-
-      <p>Also, we do not pass an "action" attribute.  The composite component
-          has a default value for the "action" attribute, which is
-      javaTopLevelComponent2.  This means that pressing the login button will
-      cause navigation to javaTopLevelComponent2.</p>
-
-    <p>First Name: #{userBean.firstName} Last Name: #{userBean.lastName}</p>
-
-    <p>Composite Component usage:</p>
-
-<div id="cc" class="grayBox" style="border: 1px solid #090;">
-<p><my:javaTopLevelComponent id="loginPanel1" usernameLabel="username"
-                             loginButtonLabel="Login"
-                             item="Smallberries" valExp="#{param.q}"
-                             int="5"/></p>
-</div>
-
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/jsr276-using.xhtml b/jsf-ri/systest/web/composite/jsr276-using.xhtml
deleted file mode 100644
index 4ebdb14..0000000
--- a/jsf-ri/systest/web/composite/jsr276-using.xhtml
+++ /dev/null
@@ -1,71 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Using jsr276 in a composite component</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form>
-
-<h1>Correct usage</h1>
-
-  <p><ez:jsr276Correct01 /></p>
-
-<h1>Incorrect usage</h1>
-
-  <p><ez:jsr276Incorrect01 /></p>
-
-
-
-</h:form>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/methodExprNotRequired.xhtml b/jsf-ri/systest/web/composite/methodExprNotRequired.xhtml
deleted file mode 100644
index d7720a9..0000000
--- a/jsf-ri/systest/web/composite/methodExprNotRequired.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>actionSource1</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <ez:notrequired />
-
-</h:form>
- <h:messages id="messages"/>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/methodExprRequired.xhtml b/jsf-ri/systest/web/composite/methodExprRequired.xhtml
deleted file mode 100644
index c7ee243..0000000
--- a/jsf-ri/systest/web/composite/methodExprRequired.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>actionSource1</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <ez:required />
-
-</h:form>
- <h:messages id="messages"/>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/nesting01.xhtml b/jsf-ri/systest/web/composite/nesting01.xhtml
deleted file mode 100644
index bbfc842..0000000
--- a/jsf-ri/systest/web/composite/nesting01.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Nesting 01</title>
-</head>
-<body>
-    <ez:nesting1 value="Hello World" />   
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/nesting02.xhtml b/jsf-ri/systest/web/composite/nesting02.xhtml
deleted file mode 100644
index b15041d..0000000
--- a/jsf-ri/systest/web/composite/nesting02.xhtml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Nesting 02</title>
-</head>
-<body>
-    <h:form>
-        <ez:nesting2 customAction="#{compositeBean.doNav}" />
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/nesting03.xhtml b/jsf-ri/systest/web/composite/nesting03.xhtml
deleted file mode 100644
index 962edd2..0000000
--- a/jsf-ri/systest/web/composite/nesting03.xhtml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Nesting 03</title>
-</head>
-<body>
-    <h:form>
-        <ez:nesting3 action="#{compositeBean.doNav}" />
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/nesting04.xhtml b/jsf-ri/systest/web/composite/nesting04.xhtml
deleted file mode 100644
index aef5f2b..0000000
--- a/jsf-ri/systest/web/composite/nesting04.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Nesting 04</title>
-</head>
-<body>
-    <h:form id="form">
-        <ez:nesting4 id="nesting4" attr1="static" attr2="#{facesContext.class.name}" />
-        <h:commandButton id="sub" value="Submit" />
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/nesting05.xhtml b/jsf-ri/systest/web/composite/nesting05.xhtml
deleted file mode 100644
index 5bb30c7..0000000
--- a/jsf-ri/systest/web/composite/nesting05.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>Nesting 05</title>
-</h:head>
-<body>
-    <ez:nesting6 id="nesting6" bean="#{compositeBean}" />
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/nesting06.xhtml b/jsf-ri/systest/web/composite/nesting06.xhtml
deleted file mode 100644
index d18d1f9..0000000
--- a/jsf-ri/systest/web/composite/nesting06.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>Nesting 06</title>
-</h:head>
-<body>
-    <ez:nesting10 id="nesting10" bean="#{compositeBean}" />
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/nesting07.xhtml b/jsf-ri/systest/web/composite/nesting07.xhtml
deleted file mode 100644
index 06f7cd1..0000000
--- a/jsf-ri/systest/web/composite/nesting07.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>Nesting 07</title>
-</h:head>
-<body>
-    <h:form id="form">
-        <ez:wrapper itemsList="#{compositeBean.items}">
-            <ez:ccParentExpression items="#{compositeBean.items}" />
-        </ez:wrapper>
-        <h:commandButton id="submit" value="Refresh" />
-    </h:form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/composite/nesting08.xhtml b/jsf-ri/systest/web/composite/nesting08.xhtml
deleted file mode 100644
index 94794ac..0000000
--- a/jsf-ri/systest/web/composite/nesting08.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-    <title>Nesting 08</title>
-</h:head>
-<body>
-    <ez:wrapper testAction="#{compositeBean.action}">
-        <ez:wrapper testAction2="#{cc.attrs.testAction}">
-            <ez:myaction myaction="#{cc.attrs.testAction2}" />
-        </ez:wrapper>
-    </ez:wrapper>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/composite/nestingCompositeExpressionTreeCreation.xhtml b/jsf-ri/systest/web/composite/nestingCompositeExpressionTreeCreation.xhtml
deleted file mode 100644
index 438a49a..0000000
--- a/jsf-ri/systest/web/composite/nestingCompositeExpressionTreeCreation.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Composite Component Nesting Expression Eval During Tree Creation</title>
-</head>
-<body>
-    <h:form id="form">
-        <ez:nesting8 value="#{compositeBean.stringValue}"
-                     values="#{compositeBean.stringValues}"/>
-        <h:commandButton id="submit" value="Redisplay" /> 
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/nestingNav.xhtml b/jsf-ri/systest/web/composite/nestingNav.xhtml
deleted file mode 100644
index 7281a5e..0000000
--- a/jsf-ri/systest/web/composite/nestingNav.xhtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title>Navigation Result</title>
-</head>
-<body>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/composite/programmaticDefaultAttributeValueAccess.xhtml b/jsf-ri/systest/web/composite/programmaticDefaultAttributeValueAccess.xhtml
deleted file mode 100644
index 58f03ae..0000000
--- a/jsf-ri/systest/web/composite/programmaticDefaultAttributeValueAccess.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-    <h:head>
-        <title>Facelet Title</title>
-    </h:head>
-    <h:body>
-        <ez:javaBackedComponentDefaultAttrValues />
-    </h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/composite/renderfacetrequired01.xhtml b/jsf-ri/systest/web/composite/renderfacetrequired01.xhtml
deleted file mode 100644
index e60adaa..0000000
--- a/jsf-ri/systest/web/composite/renderfacetrequired01.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Render Facet Required 01</title>
-</h:head>
-
-<h:body>
-
-   <ez:renderFacetRequiredTrue/>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/renderfacetrequired02.xhtml b/jsf-ri/systest/web/composite/renderfacetrequired02.xhtml
deleted file mode 100644
index 7437a77..0000000
--- a/jsf-ri/systest/web/composite/renderfacetrequired02.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Render Facet Required 02</title>
-</h:head>
-
-<h:body>
-
-   <ez:renderFacetRequiredTrue>
-       <f:facet name="NotWhatIsExpected">
-           <h:outputText value="Should Not Be Rendered"/>
-       </f:facet>
-   </ez:renderFacetRequiredTrue>
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/renderfacetrequired03.xhtml b/jsf-ri/systest/web/composite/renderfacetrequired03.xhtml
deleted file mode 100644
index 9af1bcf..0000000
--- a/jsf-ri/systest/web/composite/renderfacetrequired03.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Render Facet Required 03</title>
-</h:head>
-
-<h:body>
-
-   <ez:renderFacetRequiredFalse/>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/requiredAttribute.xhtml b/jsf-ri/systest/web/composite/requiredAttribute.xhtml
deleted file mode 100644
index 8554a22..0000000
--- a/jsf-ri/systest/web/composite/requiredAttribute.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>actionSource1</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <ez:required01 />
-
-</h:form>
- <h:messages id="messages"/>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/requiredFacet.xhtml b/jsf-ri/systest/web/composite/requiredFacet.xhtml
deleted file mode 100644
index c4bf076..0000000
--- a/jsf-ri/systest/web/composite/requiredFacet.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>actionSource1</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <ez:requiredFacet />
-
-</h:form>
- <h:messages id="messages"/>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/resourceDependencyComponentNextPage.xhtml b/jsf-ri/systest/web/composite/resourceDependencyComponentNextPage.xhtml
deleted file mode 100644
index 0ea9599..0000000
--- a/jsf-ri/systest/web/composite/resourceDependencyComponentNextPage.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-
-</h:head>
-<h:body>
-    <h1>Next page</h1>
-    <my:resourceDependencyComponent/>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/resourceDependencyComponentUsingPage.xhtml b/jsf-ri/systest/web/composite/resourceDependencyComponentUsingPage.xhtml
deleted file mode 100644
index 7e27545..0000000
--- a/jsf-ri/systest/web/composite/resourceDependencyComponentUsingPage.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:my="http://java.sun.com/jsf/composite/composite">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-
-</h:head>
-<h:body>
-    <h1>Using page</h1>
-    <my:resourceDependencyComponent/>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/composite/validator.xhtml b/jsf-ri/systest/web/composite/validator.xhtml
deleted file mode 100644
index 2f42781..0000000
--- a/jsf-ri/systest/web/composite/validator.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>Validator at various composite nesting levels</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <p>
-        1. One nesting level.  Level 1 targets a validator.
-    </p>
-    <ez:customValidator id="c0" validator="#{compositeBean.validate}" />
-
-    <p>
-        2. Two nesting levels.  Level 1 defines a custom validator and passes it to level 2.  Level 2 targets a validator.
-    </p>
-    <ez:validatorWrapper1 id="c1" customValidator="#{compositeBean.validate}"/>
-
-    <p>
-        3. Two nesting levels.  Level 1 defines a bean and passes a property as a validator to level 2.  Level 2 targets a validator.
-    </p>
-    <ez:validatorWrapper2 id="c2" bean="#{compositeBean}" />
-
-    <p>
-        4. Three nesting levels.  Level 1 defines a bean and passes a property as a custom validator to level 2.  Level 2 defines a custom validator and passes it to level 3.  Level 3 targets a validator.
-    </p>
-    <ez:validatorWrapper3 id="c3" bean="#{compositeBean}" />
-
-    <p>
-        5. Three nesting levels.  Level 1 defines a custom validator and passes it to level 2.  Level 2 defines a custom validator and passes it to level 3.  Level 3 targets a validator.
-    </p>
-    <ez:validatorWrapper4 id="c4" customValidator="#{compositeBean.validate}" />
-    <h:commandButton id="submit" value="Submit" />
-</h:form>
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/valueChangeListener.xhtml b/jsf-ri/systest/web/composite/valueChangeListener.xhtml
deleted file mode 100644
index 4b3ffe1..0000000
--- a/jsf-ri/systest/web/composite/valueChangeListener.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>ValueChangeListener at various composite nesting levels</title>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-    <p>
-        1. One nesting level.  Level 1 targets a valueChangeListener.
-    </p>
-    <ez:customValueChangeListener id="c0" valueChangeListener="#{compositeBean.valueChange}" />
-
-    <p>
-        2. Two nesting levels.  Level 1 defines a custom valueChangeListener and passes it to level 2.  Level 2 targets a valueChangeListener.
-    </p>
-    <ez:valueChangeWrapper1 id="c1" customValueChange="#{compositeBean.valueChange}"/>
-
-    <p>
-        3. Two nesting levels.  Level 1 defines a bean and passes a property as a valueChangeListener to level 2.  Level 2 targets a valueChangeListener.
-    </p>
-    <ez:valueChangeWrapper2 id="c2" bean="#{compositeBean}" />
-
-    <p>
-        4. Three nesting levels.  Level 1 defines a bean and passes a property as a custom valueChangeListener to level 2.  Level 2 defines a custom valueChangeListener and passes it to level 3.  Level 3 targets a valueChangeListener.
-    </p>
-    <ez:valueChangeWrapper3 id="c3" bean="#{compositeBean}" />
-
-    <p>
-        5. Three nesting levels.  Level 1 defines a custom valueChangeListener and passes it to level 2.  Level 2 defines a custom valueChangeListener and passes it to level 3.  Level 3 targets a valueChangeListener.
-    </p>
-    <ez:valueChangeWrapper4 id="c4" customValueChange="#{compositeBean.valueChange}" />
-    <h:commandButton id="submit" value="Submit" />
-</h:form>
-<h:messages id="messages"/>
-<h:form>
-    <h:commandButton value="Clear Messages" />
-</h:form>
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/composite/valueChangeListenerSetPropertyActionListener01.xhtml b/jsf-ri/systest/web/composite/valueChangeListenerSetPropertyActionListener01.xhtml
deleted file mode 100644
index 52bd66a..0000000
--- a/jsf-ri/systest/web/composite/valueChangeListenerSetPropertyActionListener01.xhtml
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<h:head>
-<title>valueChangeListener with nested setPropertyActionListener</title>
-</h:head>
-
-<h:body>
-
-<h:form id="form">
-
-   <ez:valueChangeSetPropertyActionListener id="composite">
-
-      <f:valueChangeListener binding="#{valueChangeSetPropertyActionListenerBean}" for="value" />
-
-      <f:setPropertyActionListener for="submit" 
-         value="#{valueChangeSetPropertyActionListenerBean.nanoTime}" 
-         target="#{flash.note}" />
-
-   </ez:valueChangeSetPropertyActionListener>
-
-   <p>Message: <h:outputText value="#{message}" /></p>
-
-   <p>Property set by setPropertyActionListener:<h:outputText value="#{flash.note}" />; </p>
-
-   <p>System.currentTimeMillis():<h:outputText 
-       value="#{valueChangeSetPropertyActionListenerBean.nanoTime}" />;</p>
-
-
-</h:form>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/conditionalNav.xhtml b/jsf-ri/systest/web/conditionalNav.xhtml
deleted file mode 100644
index ca597ee..0000000
--- a/jsf-ri/systest/web/conditionalNav.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-</h:head>
-<h:body>
-  <h:form prependId="false">
-      <p>If the checkbox is checked, we go to the success page,
-      otherwise we go to the failure page.</p>
-      <p><h:selectBooleanCheckbox id="checkbox" value="#{test1.booleanProperty}" /></p>
-    <p><h:commandButton id="submit" value="submit" action="submit"/></p>
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/config01.jsp b/jsf-ri/systest/web/config01.jsp
deleted file mode 100644
index aa7d4f7..0000000
--- a/jsf-ri/systest/web/config01.jsp
+++ /dev/null
@@ -1,111 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.el.ValueExpression"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-// This test exercices the config system's ability to load information
-// from a faces configuration file specified as a servlet context
-// initialization parameter, in addition to one that is specified
-// under WEB-INF.
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/configd01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-
-  // Acquire a ValueExpression for the bean to be created
-  // "mybean" exists in a Faces configuration file specified as
-  // as a servlet context init parameter.
-  //
-  ValueExpression valueExpression = appl.getExpressionFactory().
-      createValueExpression(facesContext.getELContext(),"#{mybean}", Object.class);
-  if (valueExpression == null) {
-    out.println("/config01.jsp FAILED - No ValueExpression returned");
-    return;
-  }
-
-  // Evaluate the value binding and check for bean creation
-  Object result = valueExpression.getValue(facesContext.getELContext());
-  if (result == null) {
-    out.println("/config01.jsp FAILED - getValue() returned null");
-    return;
-  }
-
-  Object scoped = request.getAttribute("mybean");
-  if (scoped == null) {
-    out.println("/config01.jsp FAILED - not created in request scope");
-    return;
-  }
-
-  // Acquire a ValueExpression for the bean to be created
-  // "test1" exists in a Faces configuration file under WEB-INF. 
-  //
-  valueExpression = appl.getExpressionFactory().createValueExpression(facesContext.getELContext(),"#{test1}", 
-     Object.class);
-  if (valueExpression == null) {
-    out.println("/config01.jsp FAILED - No ValueExpression returned");
-    return;
-  }
-
-  // Evaluate the value binding and check for bean creation
-  result = valueExpression.getValue(facesContext.getELContext());
-  if (result == null) {
-    out.println("/config01.jsp FAILED - getValue() returned null");
-    return;
-  }
-
-  scoped = request.getAttribute("test1");
-  if (scoped == null) {
-    out.println("/config01.jsp FAILED - not created in request scope");
-    return;
-  }
-
-  out.println("/config01.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/converter.jsp b/jsf-ri/systest/web/converter.jsp
deleted file mode 100644
index a6695d4..0000000
--- a/jsf-ri/systest/web/converter.jsp
+++ /dev/null
@@ -1,61 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.convert.Converter"
-%><%@ page import="com.sun.faces.systest.TestConverter"
-%><%
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // try to retrieve the converter id from Application
-  Converter result = appl.createConverter("TestConverter");
-  // report the result
-  if (result == null || 
-      !(result instanceof com.sun.faces.systest.TestConverter)) {
-    out.println("/converter.jsp FAILED");
-    return;
-  } else {
-      out.println("/converter.jsp PASSED");
-  }
-  
-%>
diff --git a/jsf-ri/systest/web/converter01.jsp b/jsf-ri/systest/web/converter01.jsp
deleted file mode 100644
index 69770c4..0000000
--- a/jsf-ri/systest/web/converter01.jsp
+++ /dev/null
@@ -1,65 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.convert.Converter"
-%><%@ page import="com.sun.faces.systest.TestConverter"
-%><%
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // replace mappings provided by the JSF implementation in order to 
-  // customize the behavior of standard JSF features.
-  appl.addConverter("number", "com.sun.faces.systest.TestConverter");
-
-  // try to retrieve our component from Application
-  Converter result = appl.createConverter("number");
-  // report the result
-  if (result == null || 
-      !(result instanceof com.sun.faces.systest.TestConverter)) {
-    out.println("/converter01.jsp FAILED");
-    return;
-  } else {
-      out.println("/converter01.jsp PASSED");
-  }
-  
-%>
diff --git a/jsf-ri/systest/web/converter02.jsp b/jsf-ri/systest/web/converter02.jsp
deleted file mode 100644
index 2e2f297..0000000
--- a/jsf-ri/systest/web/converter02.jsp
+++ /dev/null
@@ -1,49 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-<jsp:useBean id="numConverter" class="javax.faces.convert.NumberConverter" scope="session" />
-<%
-   // configure the converter
-   numConverter.setLocale(java.util.Locale.US);
-   numConverter.setType("currency");
-%>
-<f:view>
-    <h:outputText id="id1" value="#{test1.doubleProperty}" converter="#{numConverter}" />
-</f:view>
diff --git a/jsf-ri/systest/web/converter03.jsp b/jsf-ri/systest/web/converter03.jsp
deleted file mode 100644
index f0c49f3..0000000
--- a/jsf-ri/systest/web/converter03.jsp
+++ /dev/null
@@ -1,149 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Converters</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Converters</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="2">
-
-<%-- Case 1: Custom Converter with "converterId" attribute --%>
-
-      <h:inputText id="text1"> 
-        <f:converter converterId="TestConverter01" />
-      </h:inputText>
-
-      <h:message for="text1" />
-
-<%-- Case 2: Custom Converter with "binding" attribute --%>
-
-      <h:inputText id="text2"> 
-        <f:converter binding="#{converterBean.converter}" />
-      </h:inputText>
-
-      <h:message for="text2" />
-
-<%-- Case 3: "converterId" and "binding" specified                        --%>
-<%--         "binding" will set the instance (created from "converterId") --%>
-<%--         to a property on the backing bean                     --%>
-
-      <h:inputText id="text3"> 
-        <f:converter converterId="TestConverter01"
-           binding="#{converterBean.converter}" />
-      </h:inputText>
-
-      <h:message for="text3" />
-
-<%-- Bind the converter we created (Case 3) to the component --%>
-
-      <h:inputText id="text4">
-        <f:converter binding="#{converterBean.converter}" />
-      </h:inputText>
-
-      <h:message for="text4" />
-
-<%-- DateTime Converter with "binding" attribute --%>
-
-      <h:inputText id="text5" label="text5" value="10:00:01 PM" size="10" maxlength="20">
-         <f:convertDateTime binding="#{converterBean.dateTimeConverter}"
-            type="time" timeStyle="medium"/>
-      </h:inputText>
-
-      <h:message for="text5" />
-
-<%-- Case 1: Double Converter with "converterId" attribute --%>
-
-      <h:inputText id="text6" value="100" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Double" />
-      </h:inputText>
-
-      <h:message for="text6" />
-
-<%-- Case 2: Double Converter with "binding" attribute --%>
-
-      <h:inputText id="text7" value="100" size="10" maxlength="20">
-         <f:converter binding="#{converterBean.doubleConverter}" />
-      </h:inputText>
-
-      <h:message for="text7" />
-
-<%-- Case 3: Double Converter "converterId" and "binding" specified       --%> 
-<%--         "binding" will set the instance (created from "converterId") --%>
-<%--         to a property on the backing bean                            --%>
-
-      <h:inputText id="text8"> 
-        <f:converter converterId="javax.faces.Double"
-           binding="#{converterBean.doubleConverter}" />
-      </h:inputText>
-
-      <h:message for="text8" />
-
-<%-- Number Converter with "binding" attribute --%>
-
-      <h:inputText id="text9" value="9" size="10" maxlength="20">
-         <f:convertNumber binding="#{converterBean.numberConverter}" />
-      </h:inputText>
-
-      <h:message for="text9" />
-
-      <h:commandButton value="submit" /> <h:messages />
-
-    </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/converter04.jsp b/jsf-ri/systest/web/converter04.jsp
deleted file mode 100644
index c994c7d..0000000
--- a/jsf-ri/systest/web/converter04.jsp
+++ /dev/null
@@ -1,345 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Converters</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Converters</h1>
-
-<f:loadBundle basename="com.sun.faces.CustomMessages" var="customBundle"/>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:panelGrid id="panelGrid" columns="3">
-
-<%-- Case 1: Big Decimal Converter with no "label" attribute --%>
-
-      <h:outputText value="BigDecimal1:" />
-      <h:inputText id="bd1"> 
-        <f:converter converterId="javax.faces.BigDecimal" />
-      </h:inputText>
-      <h:message for="bd1" showSummary="true"/>
-
-<%-- Case 2: Big Decimal Converter with "label" attribute --%>
-
-      <h:outputText value="BigDecimal2:" />
-      <h:inputText id="bd2" label="#{customBundle.BigDecimalLabel}"> 
-        <f:converter converterId="javax.faces.BigDecimal" />
-      </h:inputText>
-      <h:message for="bd2" showSummary="true" />
-
-<%-- Case 3: Big Integer Converter with no "label" attribute --%>
-                                                                                
-      <h:outputText value="BigInteger1:" />
-      <h:inputText id="bi1">
-        <f:converter converterId="javax.faces.BigInteger" />
-      </h:inputText>
-      <h:message for="bi1" showSummary="true"/>
-                                                                                
-<%-- Case 4: Big Integer Converter with "label" attribute --%>
-                                                                                
-      <h:outputText value="BigInteger2:" />
-      <h:inputText id="bi2" label="BigInteger2">
-        <f:converter converterId="javax.faces.BigInteger" />
-      </h:inputText>
-      <h:message for="bi2" showSummary="true" />
-
-<%-- Case 5: Boolean Converter with no "label" attribute --%>
-                                                                                
-      <h:outputText value="Boolean1:" />
-      <h:selectBooleanCheckbox id="b1" value="idontknow">
-        <f:converter converterId="javax.faces.Boolean" />
-      </h:selectBooleanCheckbox>
-      <h:message for="b1" showSummary="true" />
-
-                                                                                
-<%-- Case 6: Boolean Converter with "label" attribute --%>
-                                                                                
-      <h:outputText value="Boolean2:" />
-      <h:selectBooleanCheckbox id="b2" label="Boolean2" value="true">
-        <f:converter converterId="javax.faces.Boolean" />
-      </h:selectBooleanCheckbox>
-      <h:message for="b2" showSummary="true" />
-
-<%-- Case 7: Byte Converter with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Byte1:" />
-      <h:inputText id="byte1">
-        <f:converter converterId="javax.faces.Byte" />
-      </h:inputText>
-      <h:message for="byte1"  showSummary="true"/>
-                                                                                         
-<%-- Case 8: Byte Converter with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Byte2:" />
-      <h:inputText id="byte2" label="Byte2">
-        <f:converter converterId="javax.faces.Byte" />
-      </h:inputText>
-      <h:message for="byte2" showSummary="true" />
-
-<%-- Case 9: Character Converter with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Character1:" />
-      <h:inputText id="char1">
-        <f:converter converterId="javax.faces.Character" />
-      </h:inputText>
-      <h:message for="char1"  showSummary="true"/>
-                                                                                         
-<%-- Case 10: Character Converter with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Character2:" />
-      <h:inputText id="char2" label="Character2">
-        <f:converter converterId="javax.faces.Character" />
-      </h:inputText>
-      <h:message for="char2" showSummary="true" />
-
-<%-- Case 11: DateTime Converter - type="date" with no "label" attribute --%>
-
-      <h:outputText value="Date1:" />
-      <h:inputText id="date1" size="10" maxlength="20">
-         <f:convertDateTime type="date" dateStyle="medium"/>
-      </h:inputText>
-      <h:message for="date1"  showSummary="true"/>
-
-<%-- Case 12: DateTime Converter - type="date" with "label" attribute --%>
-
-      <h:outputText value="Date2:" />
-      <h:inputText id="date2" label="Date2" size="10" maxlength="20">
-         <f:convertDateTime type="date" dateStyle="medium"/>
-      </h:inputText>
-      <h:message for="date2" showSummary="true" />
-
-<%-- Case 13: DateTime Converter - type="time" with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Time1:" />
-      <h:inputText id="time1" size="10" maxlength="20">
-         <f:convertDateTime type="time" timeStyle="medium"/>
-      </h:inputText>
-      <h:message for="time1"  showSummary="true"/>
-                                                                                         
-<%-- Case 12: DateTime Converter - type="time" with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Time2:" />
-      <h:inputText id="time2" label="Time2" size="10" maxlength="20">
-         <f:convertDateTime type="time" timeStyle="medium"/>
-      </h:inputText>
-      <h:message for="time2" showSummary="true" />
-
-<%-- Case 13: DateTime Converter - type="both" with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="DateTime1:" />
-      <h:inputText id="datetime1" size="10" maxlength="20">
-         <f:convertDateTime type="both"/>
-      </h:inputText>
-      <h:message for="datetime1"  showSummary="true"/>
-                                                                                         
-<%-- Case 14: DateTime Converter - type="both" with "label" attribute --%>
-                                                                                         
-      <h:outputText value="DateTime2:" />
-      <h:inputText id="datetime2" label="DateTime2" size="10" maxlength="20">
-         <f:convertDateTime type="both" />
-      </h:inputText>
-      <h:message for="datetime2" showSummary="true" />
-
-<%-- Case 15: Double Converter with no "label" attribute --%>
-
-      <h:outputText value="Double1:" />
-      <h:inputText id="double1" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Double" />
-      </h:inputText>
-      <h:message for="double1"  showSummary="true"/>
-
-<%-- Case 16: Double Converter with "label" attribute --%>
-
-      <h:outputText value="Double2:" />
-      <h:inputText id="double2" label="Double2" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Double" />
-      </h:inputText>
-      <h:message for="double2" showSummary="true" />
-
-<%-- Case 17: Float Converter with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Float1:" />
-      <h:inputText id="float1" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Float" />
-      </h:inputText>
-      <h:message for="float1"  showSummary="true"/>
-                                                                                         
-<%-- Case 18: Float Converter with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Float2:" />
-      <h:inputText id="float2" label="Float2" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Float" />
-      </h:inputText>
-      <h:message for="float2" showSummary="true" />
-                                                                                         
-<%-- Case 19: Integer Converter with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Integer1:" />
-      <h:inputText id="integer1" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Integer" />
-      </h:inputText>
-      <h:message for="integer1"  showSummary="true"/>
-                                                                                         
-<%-- Case 20: Integer Converter with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Integer2:" />
-      <h:inputText id="integer2" label="Integer2" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Integer" />
-      </h:inputText>
-      <h:message for="integer2" showSummary="true" />
-                                                                                         
-<%-- Case 21: Long Converter with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Long1:" />
-      <h:inputText id="long1" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Long" />
-      </h:inputText>
-      <h:message for="long1"  showSummary="true"/>
-                                                                                         
-<%-- Case 22: Long Converter with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Long2:" />
-      <h:inputText id="long2" label="Long2" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Long" />
-      </h:inputText>
-      <h:message for="long2" showSummary="true" />
-
-<%-- Case 23: Number Converter type="currency" with no "label" attribute --%>
-
-      <h:outputText value="Number1:" />
-      <h:inputText id="number1" size="10" maxlength="20">
-         <f:convertNumber type="currency" />
-      </h:inputText>
-      <h:message for="number1"  showSummary="true"/>
-
-<%-- Case 24: Number Converter type="currency" with "label" attribute --%>
-
-      <h:outputText value="Number2:" />
-      <h:inputText id="number2" label="Number2" size="10" maxlength="20">
-         <f:convertNumber type="currency" />
-      </h:inputText>
-      <h:message for="number2" showSummary="true" />
-
-<%-- Case 25: Number Converter type="number" with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Number3:" />
-      <h:inputText id="number3" size="10" maxlength="20">
-         <f:convertNumber type="number" />
-      </h:inputText>
-      <h:message for="number3"  showSummary="true"/>
-                                                                                         
-<%-- Case 26: Number Converter type="number" with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Number4:" />
-      <h:inputText id="number4" label="Number4" size="10" maxlength="20">
-         <f:convertNumber type="number" />
-      </h:inputText>
-      <h:message for="number4" showSummary="true" />
-
-<%-- Case 27: Number Converter type="percent" with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Number5:" />
-      <h:inputText id="number5" size="10" maxlength="20">
-         <f:convertNumber type="percent" />
-      </h:inputText>
-      <h:message for="number5"  showSummary="true"/>
-                                                                                         
-<%-- Case 28: Number Converter type="percent" with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Number6:" />
-      <h:inputText id="number6" label="Number6" size="10" maxlength="20">
-         <f:convertNumber type="percent" />
-      </h:inputText>
-      <h:message for="number6" showSummary="true" />
-
-<%-- Case 29: Number Converter with pattern with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Number7:" />
-      <h:inputText id="number7" size="10" maxlength="20">
-         <f:convertNumber pattern="invalid pattern" />
-      </h:inputText>
-      <h:message for="number7"  showSummary="true"/>
-                                                                                         
-<%-- Case 30: Number Converter with pattern with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Number8:" />
-      <h:inputText id="number8" label="Number8" size="10" maxlength="20">
-         <f:convertNumber pattern="invalid pattern" />
-      </h:inputText>
-      <h:message for="number8" showSummary="true" />
-
-<%-- Case 31: Short Converter with no "label" attribute --%>
-                                                                                         
-      <h:outputText value="Short1:" />
-      <h:inputText id="short1" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Short" />
-      </h:inputText>
-      <h:message for="short1"  showSummary="true"/>
-                                                                                         
-<%-- Case 32: Short Converter with "label" attribute --%>
-                                                                                         
-      <h:outputText value="Short2:" />
-      <h:inputText id="short2" label="Short2" size="10" maxlength="20">
-         <f:converter converterId="javax.faces.Short" />
-      </h:inputText>
-      <h:message for="short2" showSummary="true" />
-
-      <h:commandButton value="submit" /> 
-
-    </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/converter05.jsp b/jsf-ri/systest/web/converter05.jsp
deleted file mode 100644
index 1c40ec9..0000000
--- a/jsf-ri/systest/web/converter05.jsp
+++ /dev/null
@@ -1,122 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-    <html>
-        <head>
-            <title>Converters</title>
-            <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-            <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-        </head>
-
-        <body>
-            <%
-                java.util.Locale localeObject = new java.util.Locale("en", "US");
-                java.util.TimeZone tzObject =
-                    java.util.TimeZone.getTimeZone("America/New_York");
-                String localeString = "en";
-                String timeZoneString = "America/New_York";
-
-                request.setAttribute("localeObject", localeObject);
-                request.setAttribute("timeZoneObject", tzObject);
-                request.setAttribute("localeString", localeString);
-                request.setAttribute("timeZoneString", timeZoneString);
-                request.setAttribute("localeObjectAU", new java.util.Locale("en", "AU"));
-                request.setAttribute("timeZoneStringAU", "Australia/Melbourne");
-
-            %>
-
-            <f:view>
-                <%--
-                    Ensure timeZone and locale attributes can accept:
-                       - literal string
-                       - VE expression resolving to a String
-                       - VE expression resolving to Locale or TimeZone instance
-                         in the case of the locate and timeZone attributes (respectively)
-                --%>
-                <h:outputText id="outputDatetime1"
-                              value="7/10/96 12:31:31 PM PDT">
-                    <f:convertDateTime type="both" timeStyle="full"
-                                       dateStyle="short"
-                                       locale="en"
-                                       timeZone="America/New_York"/>
-                </h:outputText>
-
-                <h:outputText id="outputDatetime2"
-                              value="7/10/96 12:31:31 PM PDT">
-                    <f:convertDateTime type="both" timeStyle="full"
-                                       dateStyle="short"
-                                       locale="#{requestScope.localeString}"
-                                       timeZone="#{requestScope.timeZoneString}"/>
-                </h:outputText>
-                <h:outputText id="outputDatetime3"
-                              value="7/10/96 12:31:31 PM PDT">
-                    <f:convertDateTime type="both" timeStyle="full"
-                                       dateStyle="short"
-                                       locale="#{requestScope.localeObject}"
-                                       timeZone="#{requestScope.timeZoneObject}"/>
-                </h:outputText>
-                <%--
-                     // commented out due to output differences between
-                     // JDK6u10 and releases prior to that version.  In the test below,
-                     // versions prior to JDK6u10 would always output a two digit
-                     // hour (i.e. 05), however, in JDK6u10, it will trim leading
-                     // zeros.  This part of the test could be considered redundant
-                     // anyway.
-                <h:outputText id="outputDatetime4"
-                              value="7/10/96 12:31:31 PM PDT">
-                    <f:convertDateTime type="both" timeStyle="full"
-                                       dateStyle="short"
-                                       locale="#{requestScope.localeObjectAU}"
-                                       timeZone="#{requestScope.timeZoneStringAU}"/>
-                </h:outputText>
-                --%>
-                <h:outputText id="outputNumber1" value="10000">
-                    <f:convertNumber locale="de"/>
-                </h:outputText>
-                <h:outputText id="outputNumber2" value="10000">
-                    <f:convertNumber locale="#{requestScope.localeString}" />
-                </h:outputText>
-                <h:outputText id="outputNumber3" value="10000">
-                    <f:convertNumber locale="#{requestScope.localeObject}" />
-                </h:outputText>
-            </f:view>
-        </body>
-    </html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/converter06.jsp b/jsf-ri/systest/web/converter06.jsp
deleted file mode 100644
index b30d183..0000000
--- a/jsf-ri/systest/web/converter06.jsp
+++ /dev/null
@@ -1,133 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Converters</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-    <%@ taglib uri="/WEB-INF/taglib.tld"           prefix="s" %>
-  </head>
-
-  <body>
-    <h1>Converters</h1>
-
-<f:loadBundle basename="com.sun.faces.CustomMessages" var="customBundle"/>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:panelGrid id="panelGrid" columns="3">
-
-
-<%--
-      Exercises javax.faces.webapp.ConverterELTag when ConverterException
-      Expected result: FacesMessage queued;  Log message;
---%>
-      <h:outputText value="Number4:" />
-      <h:inputText id="number4" label="Number4" size="10" maxlength="20" value="aaa">
-         <f:convertNumber type="number" />
-      </h:inputText>
-      <h:message for="number4" showSummary="true" />
-
-<%--
-      Exercises javax.faces.webapp.ConverterELTag when ConverterException
-      Expected result: Log message;
---%>
-      <h:outputText value="Number5:" />
-      <h:outputText id="number5" value="aaa">
-         <f:convertNumber type="number" />
-      </h:outputText>
-      <h:message for="number5" showSummary="true" />
-
-<%--
-      Exercises javax.faces.webapp.ConverterELTag when ConverterException
-      Expected result: FacesMessage queued;  Log message; 
---%>
-      <h:outputText value="Number6:" />
-      <h:inputText id="number6" label="Number6" size="10" maxlength="20" value="aaa" converterMessage="My own message">
-         <f:convertNumber type="number" />
-      </h:inputText>
-      <h:message for="number6" showSummary="false" />
-
-<%--
-      Exercises javax.faces.webapp.ConverterTag when ConverterException
-      Expected result: FacesMessage queued;  Log message; 
---%>
-      <h:outputText value="Number6:" />
-      <h:outputText value="Number7:" />
-      <h:inputText id="number7" label="Number7" size="10" maxlength="20" value="aaa">
-         <s:converter converterId="javax.faces.Number" />
-      </h:inputText>
-      <h:message for="number7" showSummary="true" />
-
-<%--
-      Exercises javax.faces.webapp.ConverterTag when ConverterException
-      Expected result: Log message;
---%>
-      <h:outputText value="Number8:" />
-      <h:outputText id="number8" value="aaa">
-         <s:converter converterId="javax.faces.Number" />
-      </h:outputText>
-      <h:message for="number8" showSummary="true" />
-
-<%--
-      Exercises javax.faces.webapp.ConverterTag when ConverterException
-      Expected result: FacesMessage queued;  Log message; 
---%>
-      <h:outputText value="Number9:" />
-      <h:inputText id="number9" label="Number6" size="10" maxlength="20" value="aaa" converterMessage="My own message">
-         <s:converter converterId="javax.faces.Number" />
-      </h:inputText>
-      <h:message for="number9" showSummary="false" />
-      <h:commandButton value="submit" /> 
-    </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/duplicateIds01.jsp b/jsf-ri/systest/web/duplicateIds01.jsp
deleted file mode 100644
index b284eb9..0000000
--- a/jsf-ri/systest/web/duplicateIds01.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<%-- Confirm duplicate ID's are found --%>
-<% try { %>
-<f:view>
-    <h:outputText id="duplicate1" value="one"/>
-    <h:outputText id="output2" value="two"/>
-    <h:outputText id="duplicate1" value="three"/>
-</f:view>
-<% 
-  } catch (JspException je) {
-       je.printStackTrace();
-       if (!(je.getRootCause() instanceof IllegalStateException)) {
-           throw je;
-       }
-   }
-%>
diff --git a/jsf-ri/systest/web/duplicateIds02.jsp b/jsf-ri/systest/web/duplicateIds02.jsp
deleted file mode 100644
index ca59b2b..0000000
--- a/jsf-ri/systest/web/duplicateIds02.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<%-- Confirm no errors --%>
-
-
-<f:view>
-    <h:outputText id="output1"/>
-    <h:outputText />
-    <h:outputText />
-</f:view>
diff --git a/jsf-ri/systest/web/duplicateIds03.jsp b/jsf-ri/systest/web/duplicateIds03.jsp
deleted file mode 100644
index 2f73a9b..0000000
--- a/jsf-ri/systest/web/duplicateIds03.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<%-- Confirm duplicate ID's are found --%>
-
-<f:view>
-    <h:outputText id="output1"/>
-    <h:outputText />
-    <h:outputText>
-       <f:facet name="facet1">
-           <h:outputText id="output1"/>
-       </f:facet>
-    </h:outputText>
-</f:view>
-
diff --git a/jsf-ri/systest/web/duplicateIds04.jsp b/jsf-ri/systest/web/duplicateIds04.jsp
deleted file mode 100644
index 487e5ce..0000000
--- a/jsf-ri/systest/web/duplicateIds04.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%--
-  - @@copyright@@
-  --%>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<f:view>
-  <html>
-    <head>
-      <title>Search Criteria</title>
-    </head>
-    <body>
-      <h2>Search for items that:</h2>
-      <h:form>
-        <h:panelGrid columns="3" border="1" cellpadding="5" cellspacing="0"
-                     binding="#{duplicateIds04.panelGrid}" />
-        <br>
-        <h:commandButton value="redisplay" />
-      </h:form>
-    </body>
-  </html>
-</f:view>
diff --git a/jsf-ri/systest/web/duplicateIds05.jsp b/jsf-ri/systest/web/duplicateIds05.jsp
deleted file mode 100644
index e19576d..0000000
--- a/jsf-ri/systest/web/duplicateIds05.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-<%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-<%@ taglib uri="/WEB-INF/taglib.tld"           prefix="s" %>
-
-<f:view>
-  <s:children_body>
-    <h:outputText id="id1" value="output"/>
-    <h:outputText id="id2" value="output2"/>
-    <h:outputText value="output3"/>
-  </s:children_body>
-</f:view>
diff --git a/jsf-ri/systest/web/dynamicComponents.xhtml b/jsf-ri/systest/web/dynamicComponents.xhtml
deleted file mode 100644
index 4f83d29..0000000
--- a/jsf-ri/systest/web/dynamicComponents.xhtml
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:dy="http://mojarra.dev.java.net/source1">
-  <h:head>
-    <title>1402</title>
-  </h:head>
-
-  <h:body>
-
-<p>Test for <a href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1402">1402</a>.</p>
-
-
-<f:view>
-
-    <ui:debug />
-    
-    <h:form id="form" prependId="false">
-
-        <dy:dynamicAdd id="dynamic1" />
-
-    </h:form>
-</f:view>
-
-  </h:body>
-</html>
diff --git a/jsf-ri/systest/web/dynamicComponents00.xhtml b/jsf-ri/systest/web/dynamicComponents00.xhtml
deleted file mode 100644
index c489356..0000000
--- a/jsf-ri/systest/web/dynamicComponents00.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-  <h:head>
-    <title>1654</title>
-  </h:head>
-
-  <h:body>
-
-<p>Test for <a href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1654">1654</a>.</p>
-
-
-<f:view>
-
-    <ui:debug />
-    
-    <h:form id="form" prependId="false">
-
-      <h:commandButton id="next" value="next" action="dynamicComponents01" />
-
-    </h:form>
-</f:view>
-
-  </h:body>
-</html>
diff --git a/jsf-ri/systest/web/dynamicComponents01.xhtml b/jsf-ri/systest/web/dynamicComponents01.xhtml
deleted file mode 100644
index 168cc2f..0000000
--- a/jsf-ri/systest/web/dynamicComponents01.xhtml
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:dy="http://mojarra.dev.java.net/source1">
-  <h:head>
-    <title>1654</title>
-  </h:head>
-
-  <h:body>
-
-<p>Test for <a href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1654">1654</a>.</p>
-
-
-<f:view>
-
-    <ui:debug />
-    
-    <h:form id="form" prependId="false">
-
-        <dy:dynamicAdd id="dynamic1" />
-
-        <h:commandButton id="thisAgain" value="this again" 
-                         action="dynamicComponents01" />
-        <h:commandButton id="next" value="next" action="dynamicComponents02" />
-
-    </h:form>
-</f:view>
-
-  </h:body>
-</html>
diff --git a/jsf-ri/systest/web/dynamicComponents02.xhtml b/jsf-ri/systest/web/dynamicComponents02.xhtml
deleted file mode 100644
index dafa7d3..0000000
--- a/jsf-ri/systest/web/dynamicComponents02.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-  <h:head>
-    <title>1654</title>
-  </h:head>
-
-  <h:body>
-
-<p>Test for <a href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1654">1654</a>.</p>
-
-
-<f:view>
-
-    <ui:debug />
-    
-    <h:form id="form" prependId="false">
-
-      <h:outputText value="no dynamic component" />
-
-      <h:commandButton value="next" action="dynamicComponents03" />
-
-    </h:form>
-</f:view>
-
-  </h:body>
-</html>
diff --git a/jsf-ri/systest/web/eagerbean.jsp b/jsf-ri/systest/web/eagerbean.jsp
deleted file mode 100644
index 4a90632..0000000
--- a/jsf-ri/systest/web/eagerbean.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" %>
-<%@ page import="javax.faces.context.FacesContext, java.util.Map" %>
-<%
-    FacesContext ctx = FacesContext.getCurrentInstance();
-    Map<String,Object> appMap = ctx.getExternalContext().getApplicationMap();
-    Map<String,Object> sesMap = ctx.getExternalContext().getSessionMap();
-    Map<String,Object> reqMap = ctx.getExternalContext().getRequestMap();
-
-    if (appMap.containsKey("eagerApp1")) {
-        throw new RuntimeException();
-    }
-    if (!appMap.containsKey("eagerApp2")) {
-        throw new RuntimeException();
-    }
-    if (appMap.containsKey("eagerApp3")) {
-        throw new RuntimeException();
-    }
-    if (appMap.containsKey("eagerSes1")) {
-        throw new RuntimeException();
-    }
-    if (appMap.containsKey("eagerReq1")) {
-        throw new RuntimeException();
-    }
-%>
diff --git a/jsf-ri/systest/web/elfunction.xhtml b/jsf-ri/systest/web/elfunction.xhtml
deleted file mode 100644
index 7182c7d..0000000
--- a/jsf-ri/systest/web/elfunction.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:fn="http://java.sun.com/jsp/jstl/functions">
-<head>
-    <title>Programmatic ELFunction Access</title>
-</head>
-
-<body>
-<h:outputText style="font-style: italic;"
-          value="Test Result: #{functionBean.validationResult}"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/enum-converter-1.jsp b/jsf-ri/systest/web/enum-converter-1.jsp
deleted file mode 100644
index 5fcb048..0000000
--- a/jsf-ri/systest/web/enum-converter-1.jsp
+++ /dev/null
@@ -1,89 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.component.UIInput" 
-%><%@ page import="javax.faces.context.FacesContext" 
-%><%@ page import="javax.faces.convert.ConverterException"
-%><%@ page import="javax.faces.convert.EnumConverter"
-%><%@ page import="com.sun.faces.systest.model.EnumBean"
-%><%
-
-  // Test - no targetClass Exception
-  EnumConverter enumConverter = new EnumConverter();
-  UIInput input = new UIInput();
-  input.setId("myInput");
-  String msg = null;
-  try {
-      Object obj = enumConverter.getAsObject(FacesContext.getCurrentInstance(), input, "foo");
-  } catch (ConverterException ce) {
-      msg = ce.getMessage();
-  }
-  if (msg.equals("myInput: 'foo' must be convertible to an enum from the enum, but no enum class provided.")) {
-      out.println("/enum-converter-1.jsp PASSED");
-  } else {
-      out.println("/enum-converter-1.jsp FAILED");
-  }
-      
-  try {
-      String str = enumConverter.getAsString(FacesContext.getCurrentInstance(), input, "bar");
-  } catch (ConverterException ce) {
-      msg = ce.getMessage();
-  }
-  if (msg.equals("myInput: 'bar' must be convertible to an enum from the enum, but no enum class provided.")) {
-      out.println("/enum-converter-1.jsp PASSED");
-  } else {
-      out.println("/enum-converter-1.jsp FAILED");
-  }
-
-  // Test Valid Enum member
-  try {
-      enumConverter = new EnumConverter(EnumBean.Simple.class);
-      String str = enumConverter.getAsString(FacesContext.getCurrentInstance(), input, EnumBean.Simple.Value2);  
-      out.println("/enum-converter-1.jsp PASSED");
-  } catch (ConverterException ce) {
-      out.println("/enum-converter-1.jsp FAILED");
-  }
-
-  // Test Invalid Enum member
-  try {
-      enumConverter = new EnumConverter(EnumBean.Simple.class);
-      String str = enumConverter.getAsString(FacesContext.getCurrentInstance(), input, "FOO");  
-      out.println("/enum-converter-1.jsp FAILED");
-  } catch (ConverterException ce) {
-      out.println("/enum-converter-1.jsp PASSED");
-  }
-%>
diff --git a/jsf-ri/systest/web/enum-converter.jsp b/jsf-ri/systest/web/enum-converter.jsp
deleted file mode 100644
index 08e7bd5..0000000
--- a/jsf-ri/systest/web/enum-converter.jsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>Test Enum Converter</title> </head>
-    <%@ page contentType="application/xhtml+xml" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <body bgcolor="white">
-    <f:view>
-
-      <h:form prependId="false">
-
-        Suit (Hearts): <h:inputText id="suit" value="#{test1.suit}" /><p />
-        Color (Blue): <h:inputText id="color" value="#{test1.color}" /><p />
-        <h:commandButton value="reload" /><p />
-        messages: <h:messages showDetail="true"/> <p />
-
-      </h:form>
-
-    </f:view>
-    </body>
-</html>  
diff --git a/jsf-ri/systest/web/enum01.jsp b/jsf-ri/systest/web/enum01.jsp
deleted file mode 100644
index 89bc5d6..0000000
--- a/jsf-ri/systest/web/enum01.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-  <h:form id="form">
-    <h:commandButton id="go" value="go to hello" action="#{test1.returnSpades}" />
-    <p />
-    <h:commandButton id="stay" value="stay here" action="#{test1.returnDiamonds}" />
-  </h:form>
-</f:view>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/escape_test.jsp b/jsf-ri/systest/web/escape_test.jsp
deleted file mode 100644
index 4582f76..0000000
--- a/jsf-ri/systest/web/escape_test.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-<%@ page import="javax.faces.context.FacesContext"%>
-<%
-  String textToEscape = "This text <b>has angle brackets</b>.";
-  FacesContext.getCurrentInstance().getExternalContext().
-   getRequestMap().put("textToEscape", textToEscape);  
-%>
-
-<f:view>
-
-  <html>
-
-    <head>
-      <title>Test of outputText Escaping</title>
-    </head>
-
-    <body>
-
-      <h1>Test of outputText Escaping</h1>
-
-      <p>
-        [DEFAULT]
-        <h:outputText value="#{textToEscape}"/>
-        The angle brackets MUST be escaped.
-      </p>
-
-      <p>
-        [FALSE]
-        <h:outputText value="#{textToEscape}" escape="false"/>
-        The angle brackets MUST NOT be escaped.
-      </p>
-
-      <p>
-        [TRUE]
-        <h:outputText value="#{textToEscape}" escape="true"/>
-        The angle brackets MUST be escaped.
-      </p>
-
-    </body>
-
-  </html>
-
-</f:view>
diff --git a/jsf-ri/systest/web/eventTag.xhtml b/jsf-ri/systest/web/eventTag.xhtml
deleted file mode 100644
index b0273b9..0000000
--- a/jsf-ri/systest/web/eventTag.xhtml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:h="http://java.sun.com/jsf/html"
-    xmlns:f="http://java.sun.com/jsf/core">
-    <h:head>
-        <title>Test that f:event handles events correctly</title>
-    </h:head>
-
-    <h:body>
-    <h1>Test that f:event handles events correctly</h1>
-
-
-    <h:form id="form" prependId="false">
-        <h:outputText id="preRenderComponentTest1" >
-            <f:event type="preRenderComponent" listener="#{eventTagBean.beforeEncode}" />
-        </h:outputText>
-        <br />
-        <h:outputText id="preRenderComponentTest2" >
-            <f:event type="javax.faces.event.PreRenderComponent" listener="#{eventTagBean.beforeEncode}" />
-        </h:outputText>
-        <br />
-        <h:outputText id="postAddToViewTest1" >
-            <f:event type="postAddToView" listener="#{eventTagBean.beforeEncode}" />
-        </h:outputText>
-        <br />
-        <h:outputText id="postAddToViewTest2" >
-            <f:event type="javax.faces.event.PostAddToView" listener="#{eventTagBean.beforeEncode}" />
-        </h:outputText>
-        <br />
-        <h:outputText id="fqcnTest" >
-            <f:event type="javax.faces.event.PreRenderComponentEvent" listener="#{eventTagBean.beforeEncode}" />
-        </h:outputText>
-        <br />
-        <h:outputText id="noArgTest" >
-            <f:event type="preRenderComponent" listener="#{eventTagBean.beforeEncodeNoArg}" />
-        </h:outputText>
-        <h:commandButton id="click" value="Click" />
-    </h:form>
-  </h:body>
-</html>
diff --git a/jsf-ri/systest/web/eventTag01.xhtml b/jsf-ri/systest/web/eventTag01.xhtml
deleted file mode 100644
index 3bd2e4c..0000000
--- a/jsf-ri/systest/web/eventTag01.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:h="http://java.sun.com/jsf/html"
-    xmlns:f="http://java.sun.com/jsf/core">
-<f:view>
-  <f:event type="preRenderComponent" listener="#{eventTagBean.beforeViewRender}" />
-  
-    <h:head>
-        <title>Ensure that an f:event just inside of f:view gets called before the page is rendered.</title>
-    </h:head>
-
-    <h:body>
-
-    <h:form id="form" prependId="false">
-      <p><h:outputText value="#{preRenderComponentMessage}" /></p>
-    </h:form>
-  </h:body>
-</f:view>
-</html>
diff --git a/jsf-ri/systest/web/eventTag02.xhtml b/jsf-ri/systest/web/eventTag02.xhtml
deleted file mode 100644
index 61aeb3e..0000000
--- a/jsf-ri/systest/web/eventTag02.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:h="http://java.sun.com/jsf/html"
-    xmlns:f="http://java.sun.com/jsf/core">
-<f:view>
-  
-    <h:head>
-        <title>Ensure that an f:event deep inside of f:view gets called before the page is rendered.</title>
-    </h:head>
-
-    <h:body>
-
-    <h:form id="form" prependId="false">
-
-    <h:panelGrid columns="1">
-      <h:outputText value="#{preRenderComponentMessage}" />
-
-      <f:event type="preRenderView" 
-               listener="#{eventTagBean.beforeViewRender}" />
-    </h:panelGrid>
-
-    </h:form>
-
-
-
-    </h:body>
-</f:view>
-</html>
diff --git a/jsf-ri/systest/web/eventTagInvalid.xhtml b/jsf-ri/systest/web/eventTagInvalid.xhtml
deleted file mode 100644
index 6d989af..0000000
--- a/jsf-ri/systest/web/eventTagInvalid.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:h="http://java.sun.com/jsf/html"
-    xmlns:f="http://java.sun.com/jsf/core">
-    <h:head>
-        <title>Test that f:event handles events correctly</title>
-    </h:head>
-
-    <h:body>
-    <h1>Test that f:event handles events correctly</h1>
-
-
-    <h:form id="form" prependId="false">
-        <h:outputText id="preRenderComponentTest" >
-            <f:event type="invalidEvent" listener="#{eventTagBean.beforeEncode}" />
-        </h:outputText>
-    </h:form>
-  </h:body>
-</html>
diff --git a/jsf-ri/systest/web/examineViewRoot.jsp b/jsf-ri/systest/web/examineViewRoot.jsp
deleted file mode 100644
index 808c1d3..0000000
--- a/jsf-ri/systest/web/examineViewRoot.jsp
+++ /dev/null
@@ -1,66 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Show that createView uses overridden ViewRoot</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-    <%@ page import="javax.faces.context.FacesContext" %>
-  </head>
-
-  <body>
-    <h1>Show that createView uses overridden ViewRoot</h1>
-
-<% 
-FacesContext context = FacesContext.getCurrentInstance();
-
-context.getExternalContext().getRequestMap().put("root", context.getViewRoot().getClass().getName());
-FacesContext.getCurrentInstance().getApplication().addComponent("javax.faces.ViewRoot", "javax.faces.component.UIViewRoot");
-%>
-
-<f:view>
-
-<p>Replaced ViewRoot is <h:outputText value="#{requestScope.root}" /></p>
-
-<p><a name="replace" href="replaceViewRoot.jsp">Go back to replace</a></p>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/external01.jsp b/jsf-ri/systest/web/external01.jsp
deleted file mode 100644
index 5672697..0000000
--- a/jsf-ri/systest/web/external01.jsp
+++ /dev/null
@@ -1,96 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%
-
-  // Set the attribute key and values we'll use throughout the test
-  String key = "/external01.jsp";
-  String value1 = "From Servlet";
-  String value2 = "From Faces";
-  String actual = null;
-
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/managed01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-
-  // Eliminate any current attribute under this key
-  request.removeAttribute(key);
-  if (request.getAttribute(key) != null) {
-    out.println("/external01.jsp FAILED - can not remove ServletContext attribute");
-    return;
-  }
-  facesContext.getExternalContext().getRequestMap().remove(key);
-  if (facesContext.getExternalContext().getRequestMap().get(key) != null) {
-    out.println("/external01.jsp FAILED - can not remove application scope attribute");
-    return;
-  }
-
-  // Set via Servlet API and check via Faces API
-  request.setAttribute(key, value1);
-  actual = (String) request.getAttribute(key);
-  if (!value1.equals(actual)) {
-    out.println("/external01.jsp FAILED - ServletContext attribute set to '" +
-                value1 + "' but Servlet API returned '" + actual + "'");
-    return;
-  }
-  actual = (String) facesContext.getExternalContext().getRequestMap().get(key);
-  if (!value1.equals(actual)) {
-    out.println("/external01.jsp FAILED - ServletContext attribute set to '" +
-                value1 + "' but Faces API returned '" + actual + "'");
-  }
-
-  // Set via Faces API and check via Servlet API
-  facesContext.getExternalContext().getRequestMap().put(key, value2);
-  actual = (String) facesContext.getExternalContext().getRequestMap().get(key);
-  if (!value2.equals(actual)) {
-    out.println("/external01.jsp FAILED - Faces attribute set to '" +
-                value2 + "' but Faces API returned '" + actual + "'");
-    return;
-  }
-  actual = (String) request.getAttribute(key);
-  if (!value2.equals(actual)) {
-    out.println("/external01.jsp FAILED - Faces attribute set to '" +
-                value2 + "' but Servlet API returned '" + actual + "'");
-    return;
-  }
-
-  out.println("/external01.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/external02.jsp b/jsf-ri/systest/web/external02.jsp
deleted file mode 100644
index 588bdc6..0000000
--- a/jsf-ri/systest/web/external02.jsp
+++ /dev/null
@@ -1,96 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%
-
-  // Set the attribute key and values we'll use throughout the test
-  String key = "/external02.jsp";
-  String value1 = "From Servlet";
-  String value2 = "From Faces";
-  String actual = null;
-
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/managed01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-
-  // Eliminate any current attribute under this key
-  session.removeAttribute(key);
-  if (session.getAttribute(key) != null) {
-    out.println("/external02.jsp FAILED - can not remove ServletContext attribute");
-    return;
-  }
-  facesContext.getExternalContext().getSessionMap().remove(key);
-  if (facesContext.getExternalContext().getSessionMap().get(key) != null) {
-    out.println("/external02.jsp FAILED - can not remove application scope attribute");
-    return;
-  }
-
-  // Set via Servlet API and check via Faces API
-  session.setAttribute(key, value1);
-  actual = (String) session.getAttribute(key);
-  if (!value1.equals(actual)) {
-    out.println("/external02.jsp FAILED - ServletContext attribute set to '" +
-                value1 + "' but Servlet API returned '" + actual + "'");
-    return;
-  }
-  actual = (String) facesContext.getExternalContext().getSessionMap().get(key);
-  if (!value1.equals(actual)) {
-    out.println("/external02.jsp FAILED - ServletContext attribute set to '" +
-                value1 + "' but Faces API returned '" + actual + "'");
-  }
-
-  // Set via Faces API and check via Servlet API
-  facesContext.getExternalContext().getSessionMap().put(key, value2);
-  actual = (String) facesContext.getExternalContext().getSessionMap().get(key);
-  if (!value2.equals(actual)) {
-    out.println("/external02.jsp FAILED - Faces attribute set to '" +
-                value2 + "' but Faces API returned '" + actual + "'");
-    return;
-  }
-  actual = (String) session.getAttribute(key);
-  if (!value2.equals(actual)) {
-    out.println("/external02.jsp FAILED - Faces attribute set to '" +
-                value2 + "' but Servlet API returned '" + actual + "'");
-    return;
-  }
-
-  out.println("/external02.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/external03.jsp b/jsf-ri/systest/web/external03.jsp
deleted file mode 100644
index c26638b..0000000
--- a/jsf-ri/systest/web/external03.jsp
+++ /dev/null
@@ -1,96 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%
-
-  // Set the attribute key and values we'll use throughout the test
-  String key = "/external03.jsp";
-  String value1 = "From Servlet";
-  String value2 = "From Faces";
-  String actual = null;
-
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/managed01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-
-  // Eliminate any current attribute under this key
-  application.removeAttribute(key);
-  if (application.getAttribute(key) != null) {
-    out.println("/external03.jsp FAILED - can not remove ServletContext attribute");
-    return;
-  }
-  facesContext.getExternalContext().getApplicationMap().remove(key);
-  if (facesContext.getExternalContext().getApplicationMap().get(key) != null) {
-    out.println("/external03.jsp FAILED - can not remove application scope attribute");
-    return;
-  }
-
-  // Set via Servlet API and check via Faces API
-  application.setAttribute(key, value1);
-  actual = (String) application.getAttribute(key);
-  if (!value1.equals(actual)) {
-    out.println("/external03.jsp FAILED - ServletContext attribute set to '" +
-                value1 + "' but Servlet API returned '" + actual + "'");
-    return;
-  }
-  actual = (String) facesContext.getExternalContext().getApplicationMap().get(key);
-  if (!value1.equals(actual)) {
-    out.println("/external03.jsp FAILED - ServletContext attribute set to '" +
-                value1 + "' but Faces API returned '" + actual + "'");
-  }
-
-  // Set via Faces API and check via Servlet API
-  facesContext.getExternalContext().getApplicationMap().put(key, value2);
-  actual = (String) facesContext.getExternalContext().getApplicationMap().get(key);
-  if (!value2.equals(actual)) {
-    out.println("/external03.jsp FAILED - Faces attribute set to '" +
-                value2 + "' but Faces API returned '" + actual + "'");
-    return;
-  }
-  actual = (String) application.getAttribute(key);
-  if (!value2.equals(actual)) {
-    out.println("/external03.jsp FAILED - Faces attribute set to '" +
-                value2 + "' but Servlet API returned '" + actual + "'");
-    return;
-  }
-
-  out.println("/external03.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/facelets/Client1.xhtml b/jsf-ri/systest/web/facelets/Client1.xhtml
deleted file mode 100644
index 849a830..0000000
--- a/jsf-ri/systest/web/facelets/Client1.xhtml
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<ui:decorate template="Template1.xhtml" xmlns:f="http://java.sun.com/jsf/core"
-xmlns:ui="http://java.sun.com/jsf/facelets">
-  <ui:define name="insertArea">
-    Inserted from client1
-  </ui:define>
-</ui:decorate>
diff --git a/jsf-ri/systest/web/facelets/Client2.xhtml b/jsf-ri/systest/web/facelets/Client2.xhtml
deleted file mode 100644
index bc26069..0000000
--- a/jsf-ri/systest/web/facelets/Client2.xhtml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<ui:decorate template="Template2.xhtml" xmlns:f="http://java.sun.com/jsf/core"
-xmlns:ui="http://java.sun.com/jsf/facelets" />
diff --git a/jsf-ri/systest/web/facelets/Template1.xhtml b/jsf-ri/systest/web/facelets/Template1.xhtml
deleted file mode 100644
index 4f66b2b..0000000
--- a/jsf-ri/systest/web/facelets/Template1.xhtml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<f:subview id="t1" xmlns:ui="http://java.sun.com/jsf/facelets"
-xmlns:f="http://java.sun.com/jsf/core">
-         <ui:insert name="insertArea" >
-          Default
-        </ui:insert>
-</f:subview>
-
diff --git a/jsf-ri/systest/web/facelets/Template2.xhtml b/jsf-ri/systest/web/facelets/Template2.xhtml
deleted file mode 100644
index 17fb1ef..0000000
--- a/jsf-ri/systest/web/facelets/Template2.xhtml
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<f:subview id="t2" xmlns:ui="http://java.sun.com/jsf/facelets" 
-xmlns:f="http://java.sun.com/jsf/core">
-        <ui:insert name="insertArea" >
-          Default
-        </ui:insert>
-</f:subview>
diff --git a/jsf-ri/systest/web/facelets/componentELAtBuildTime.xhtml b/jsf-ri/systest/web/facelets/componentELAtBuildTime.xhtml
deleted file mode 100644
index ed8728b..0000000
--- a/jsf-ri/systest/web/facelets/componentELAtBuildTime.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>componentELAtBuildTime</title>
-</head>
-
-<body>
-    <h:panelGrid id="out1" value="ignore">
-        <c:if test="#{component.id eq 'out1'}">
-            <h:panelGrid id="out2"><br />
-                <c:if test="#{component.id eq 'out2'}">
-                    <h:outputText style="color:blue" value="PASSED"/><br />
-                </c:if>
-            </h:panelGrid>
-        </c:if>
-        <c:if test="#{component.id eq 'out1'}">
-            <h:outputText style="color:yellow" value="PASSED"/><br />
-        </c:if>
-    </h:panelGrid>
-    <ez:compositeComponentEL />
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/compositionnotfound.xhtml b/jsf-ri/systest/web/facelets/compositionnotfound.xhtml
deleted file mode 100644
index 7ead7c3..0000000
--- a/jsf-ri/systest/web/facelets/compositionnotfound.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<head>
-    <title>compositionnotfound.xhtml</title>
-</head>
-
-<body>
-
-<p><strong>template.jsf</strong></p>
-
-<h2><ui:insert name="title" /></h2>
-
-<p><strong>composition.jsf</strong></p>
-
-This text will be ignored.
-<ui:composition template="template.jsf">
-  <ui:define name="title">Hello World!</ui:define>
-</ui:composition>
-This text will be ignored.
-
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/conditionalCCAttributeRendering.xhtml b/jsf-ri/systest/web/facelets/conditionalCCAttributeRendering.xhtml
deleted file mode 100644
index f2aba03..0000000
--- a/jsf-ri/systest/web/facelets/conditionalCCAttributeRendering.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>conditionalCCAttributeRendering</title>
-</head>
-
-<body>
-    <ez:conditionalAttributeRendering style="#{sessionScope.style}"/>
-    <h:form id="form">
-        <h:commandButton id="add" value="Set Attribute">
-            <f:setPropertyActionListener value="color:red" target="#{sessionScope.style}"/>
-        </h:commandButton>
-        <h:commandButton id="remove" value="Remove Attribute">
-            <f:setPropertyActionListener value="#{''}" target="#{sessionScope.style}"/>
-        </h:commandButton>
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/csetTagBody.xhtml b/jsf-ri/systest/web/facelets/csetTagBody.xhtml
deleted file mode 100644
index 4318272..0000000
--- a/jsf-ri/systest/web/facelets/csetTagBody.xhtml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-<head>
-    <title>csetTagBody</title>
-</head>
-
-<body>
-        <c:set var="x" value="y"/>
-        <c:set var="foo" value="bop"></c:set>
-        <c:set var="bob">alice</c:set>
-        <c:set var="bar">#{foo}</c:set>
-        <c:set var="baz" value="yes">no</c:set>
-        <span id="output">#{x} #{foo} #{bob} #{bar} #{baz}</span>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/decoratenotfound.xhtml b/jsf-ri/systest/web/facelets/decoratenotfound.xhtml
deleted file mode 100644
index b3f7961..0000000
--- a/jsf-ri/systest/web/facelets/decoratenotfound.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<head>
-    <title>includenotfound.xhtml</title>
-</head>
-
-<body>
-
-Text before will stay.<br />
-<ui:decorate template="template.jsf">
-<ui:define name="title">Our Products</ui:define>
-  <ui:define name="body">
-    <ul>
-      <li>Apples</li>
-      <li>Oranges</li>
-      <li>Bananas</li>
-    </ul>
-  </ui:define>
-</ui:decorate>
-Text after will stay.
-
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/forEach.xhtml b/jsf-ri/systest/web/facelets/forEach.xhtml
deleted file mode 100644
index f9e0918..0000000
--- a/jsf-ri/systest/web/facelets/forEach.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:fn="http://java.sun.com/jsp/jstl/functions">
-<head>
-    <title>forEach</title>
-</head>
-
-<body>
-   <c:forEach items="${fn:split('1,2,3', ',')}" var="item" varStatus="vs">
-        #{item}
-    </c:forEach>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/frag1.xhtml b/jsf-ri/systest/web/facelets/frag1.xhtml
deleted file mode 100644
index c72f247..0000000
--- a/jsf-ri/systest/web/facelets/frag1.xhtml
+++ /dev/null
@@ -1,8 +0,0 @@
-<div xmlns="http://www.w3.org/1999/xhtml"
-         xmlns:ui="http://java.sun.com/jsf/facelets"
-         xmlns:f="http://java.sun.com/jsf/core"
-         xmlns:c="http://java.sun.com/jstl/core"
-         xmlns:h="http://java.sun.com/jsf/html"
-         id="frag1">
-    <h:outputText id="frag1" style="color:green" value="frag1" />    
-</div>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/frag2.xhtml b/jsf-ri/systest/web/facelets/frag2.xhtml
deleted file mode 100644
index 1d61e7b..0000000
--- a/jsf-ri/systest/web/facelets/frag2.xhtml
+++ /dev/null
@@ -1,8 +0,0 @@
-<div xmlns="http://www.w3.org/1999/xhtml"
-         xmlns:ui="http://java.sun.com/jsf/facelets"
-         xmlns:f="http://java.sun.com/jsf/core"
-         xmlns:c="http://java.sun.com/jstl/core"
-         xmlns:h="http://java.sun.com/jsf/html"
-         id="frag2">
-    <h:outputText id="frag2" style="color:blue" value="frag2" />
-</div>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/implicitFacet01.xhtml b/jsf-ri/systest/web/facelets/implicitFacet01.xhtml
deleted file mode 100644
index fec49e9..0000000
--- a/jsf-ri/systest/web/facelets/implicitFacet01.xhtml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>implicit facet test</title>
-</head>
-<body>
-<h:form prependId="false" id="form">
-
-  <f:facet id="facet01" name="facet01">
-
-    <h:outputText id="output01" value="output01" />
-    <h:outputText id="output02" value="output02" />
-    <h:outputText id="output03" value="output03" />
-
-  </f:facet>
-
-  <f:facet id="facet02" name="facet02">
-
-    <h:panelGroup id="panelGroup01">
-
-      <h:outputText id="output07" value="output07" />
-      <h:outputText id="output08" value="output08" />
-      <h:outputText id="output09" value="output09" />
-
-    </h:panelGroup>
-
-  </f:facet>
-
-<p>
- Implicit facet 01 id: <h:outputText id="facet01Output01"
- value="#{component.parent.facets['facet01'].id}" />.
- Child 01 of facet 01 id: <h:outputText id="facet01Output02"
- value="#{component.parent.facets['facet01'].children['0'].id}" />.
- Child 02 of facet 01 id: <h:outputText id="facet01Output03"
- value="#{component.parent.facets['facet01'].children['1'].id}" />.
- Child 03 of facet 01 id: <h:outputText id="facet01Output04"
- value="#{component.parent.facets['facet01'].children['2'].id}" />.
-
-</p>
-
-<p>
- Implicit facet 01 id: <h:outputText id="facet02Output01"
- value="#{component.parent.facets['facet02'].id}" />.
- Child 01 of facet 01 id: <h:outputText id="facet02Output02"
- value="#{component.parent.facets['facet02'].children['0'].id}" />.
- Child 02 of facet 01 id: <h:outputText id="facet02Output03"
- value="#{component.parent.facets['facet02'].children['1'].id}" />.
- Child 03 of facet 01 id: <h:outputText id="facet02Output04"
- value="#{component.parent.facets['facet02'].children['2'].id}" />.
-
-</p>
-
-<h:commandButton id="command" value="Click Me"/>  
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/includenotfound.xhtml b/jsf-ri/systest/web/facelets/includenotfound.xhtml
deleted file mode 100644
index 2e740bc..0000000
--- a/jsf-ri/systest/web/facelets/includenotfound.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<head>
-    <title>includenotfound.xhtml</title>
-</head>
-
-<body>
-
-<p><strong>include.jsf</strong></p>
-
-<ui:include src="header.jsf"/>
-Body text here.
-
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/issue1313.xhtml b/jsf-ri/systest/web/facelets/issue1313.xhtml
deleted file mode 100644
index 9145fd1..0000000
--- a/jsf-ri/systest/web/facelets/issue1313.xhtml
+++ /dev/null
@@ -1,80 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>Issue 1313</title>
-</h:head>
-
-<h:body>
-
-    <h:panelGroup id="group">
-    Dynamic Include: <ui:include src="#{faceletsBean.fragment}.xhtml" />
-    <c:if test="#{faceletsBean.toggleState}">
-        <div id="if">
-        C:IF <h:outputText value="TOGGLE STATE TRUE" /> C:IF
-        </div>
-    </c:if>
-
-    <c:choose>
-        <c:when test="#{faceletsBean.toggleState}">
-            <div id="when">
-            C:WHEN <h:outputText value="TOGGLE STATE TRUE" /> C:WHEN
-            </div>
-        </c:when>
-        <c:otherwise>
-            <div id="otherwise">
-            C:OTHERWISE <h:outputText value="TOGGLE STATE FALSE" /> C:OTHERWISE
-            </div>
-        </c:otherwise>
-    </c:choose>
-    <h:messages />
-    </h:panelGroup>
-
-    <h:form id="form">
-        <h:commandButton id="nonajax" value="Submit non-ajax" action="#{faceletsBean.action}"/>
-        <h:commandButton id="ajax" value="Submit ajax" action="#{faceletsBean.action}">
-            <f:ajax render="@all" execute="@all" />
-        </h:commandButton>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/keepMessages.xhtml b/jsf-ri/systest/web/facelets/keepMessages.xhtml
deleted file mode 100644
index 3843564..0000000
--- a/jsf-ri/systest/web/facelets/keepMessages.xhtml
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
-      "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core">
-<f:view>
-    <h:head>
-        <meta http-equiv="Content-Type"
-              content="text/html; charset=ISO-8859-1"/>
-        <title>Keep Messages Test: first page</title>
-    </h:head>
-    <h:body>
-        <c:set target="#{flash}" property="keepMessages" value="true"/>
-
-        <h:form>
-            <h:commandButton value="Submit"
-                             action="#{addMessageBean.addMessage}" id="submit"/>
-        </h:form>
-
-        <h:form id="requiredForm">
-        	<h:inputText required="true" id="requiredInput"/>
-            <h:commandButton value="Submit"
-                             action="#{addMessageBean.addMessage}" id="submitRequired"/>
-        </h:form>
-    </h:body>
-</f:view>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/messagePage.xhtml b/jsf-ri/systest/web/facelets/messagePage.xhtml
deleted file mode 100644
index 7647a43..0000000
--- a/jsf-ri/systest/web/facelets/messagePage.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
-      "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core">
-<f:view>
-    <h:head>
-        <meta http-equiv="Content-Type"
-              content="text/html; charset=ISO-8859-1"/>
-        <title>Keep Messages Test: second page</title>
-    </h:head>
-    <h:body>
-        <h:messages/>
-        <h:form id="form">
-            <h:commandButton id="button" value="Submit" />
-        </h:form>
-    </h:body>
-</f:view>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/setpropertyactionlistener1.xhtml b/jsf-ri/systest/web/facelets/setpropertyactionlistener1.xhtml
deleted file mode 100644
index 4598a49..0000000
--- a/jsf-ri/systest/web/facelets/setpropertyactionlistener1.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>setpropertyactionlistener1</title>
-</head>
-
-<body>
-    <h:form id="form">
-        <span>Current Name: #{sessionScope.name}</span>
-        <br/>
-        <h:commandButton id="s1" value="ClickMe">
-            <f:setPropertyActionListener value="Mojarra" target="#{sessionScope.name}"/>
-        </h:commandButton>
-        <br/>
-        <h:commandLink id="s2" value="DeleteMe">
-            <f:setPropertyActionListener value="#{null}" target="#{sessionScope.name}"/>
-        </h:commandLink>
-        <br/>
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/sourcefromdtdconfig.xhtml b/jsf-ri/systest/web/facelets/sourcefromdtdconfig.xhtml
deleted file mode 100644
index ed8320c..0000000
--- a/jsf-ri/systest/web/facelets/sourcefromdtdconfig.xhtml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:s1="http://mojarra.dev.java.net/source1">
-<head>
-    <title>sourcefromdtdconfig.xhtml</title>
-</head>
-
-<body>
-    <s1:hello />
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/templateComp.xhtml b/jsf-ri/systest/web/facelets/templateComp.xhtml
deleted file mode 100644
index 99967b6..0000000
--- a/jsf-ri/systest/web/facelets/templateComp.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xml:lang="en" lang="en">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>   
-<ui:composition  template="/WEB-INF/templates/templateCompTemplate.xhtml" >
-    <ui:param name="title" value="Template Test"/>
-    <ui:define name="content">
-        <div id="toplevelContent">Inserted Content</div>
-    </ui:define>
-</ui:composition>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/templateDecorate.xhtml b/jsf-ri/systest/web/facelets/templateDecorate.xhtml
deleted file mode 100644
index fa116aa..0000000
--- a/jsf-ri/systest/web/facelets/templateDecorate.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xml:lang="en" lang="en">
-<head>
-    <title>Decorate Test</title>
-</head>
-<body>
-<ui:decorate template="/WEB-INF/templates/templateDecorateTemplate.xhtml">
-    <ui:define name="insert">
-        <span id="insert">Inserted Text</span>
-    </ui:define>
-</ui:decorate>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/templateDecoration2.xhtml b/jsf-ri/systest/web/facelets/templateDecoration2.xhtml
deleted file mode 100644
index 4337fc8..0000000
--- a/jsf-ri/systest/web/facelets/templateDecoration2.xhtml
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html">
-<h:head />
-<h:body>
-  <ui:include src="Client1.xhtml" />
-  <ui:include src="Client2.xhtml" />
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/uirepeat.xhtml b/jsf-ri/systest/web/facelets/uirepeat.xhtml
deleted file mode 100644
index e437216..0000000
--- a/jsf-ri/systest/web/facelets/uirepeat.xhtml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>ui:repeat test</title>
-</head>
-<body>
-<h:form id="form">
-
-<h1>Iterate over <code>List</code> property</h1>
-<ui:repeat value="#{repeatBean.flavorsList}" var="cur" varStatus="curStatus">
-
-  <p>ListFlavor is #{cur}.  Begin is #{curStatus.begin}. End is #{curStatus.end}. Index is #{curStatus.index}. Step is #{curStatus.step}.  Index is even: #{curStatus.even}. Index is odd: #{curStatus.odd}.  Index is first: #{curStatus.first}. Index is last: #{curStatus.last}.</p>
-
-</ui:repeat>
-
-<h1>Iterate over <code>array</code> property</h1>
-<ui:repeat value="#{repeatBean.flavorsArray}" var="cur" varStatus="curStatus">
-
-  <p>ArrayFlavor is #{cur}.  Begin is #{curStatus.begin}. End is #{curStatus.end}. Index is #{curStatus.index}. Step is #{curStatus.step}.  Index is even: #{curStatus.even}. Index is odd: #{curStatus.odd}.  Index is first: #{curStatus.first}. Index is last: #{curStatus.last}.</p>
-
-</ui:repeat>
-
-  
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/uirepeat2.xhtml b/jsf-ri/systest/web/facelets/uirepeat2.xhtml
deleted file mode 100644
index 92bb9a4..0000000
--- a/jsf-ri/systest/web/facelets/uirepeat2.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>ui:repeat2 test</title>
-</head>
-<body>
-<h:form id="form">
-
-   <ui:repeat var="var" value="#{repeatBean.flavorsList}" varStatus="status">
-       <h:commandLink value="#{var}">
-           <f:setPropertyActionListener target="#{repeatBean.index}" value="#{status.index}" />
-       </h:commandLink>
-       <br />
-   </ui:repeat>
-
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/uirepeat3.xhtml b/jsf-ri/systest/web/facelets/uirepeat3.xhtml
deleted file mode 100644
index 7ead892..0000000
--- a/jsf-ri/systest/web/facelets/uirepeat3.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>ui:repeat3 test</title>
-</head>
-<body>
-<h:form id="form">
-   <h:inputText id="num" value="#{requestScope.num}">
-        <f:convertNumber integerOnly="true" />    
-   </h:inputText>
-   <ui:repeat var="var" value="#{repeatBean.flavorsList}" varStatus="status">
-       <h:inputText value="#{requestScope.val}" />
-   </ui:repeat>
-   <h:commandButton id="submit" value="submit" />
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/uirepeat4.xhtml b/jsf-ri/systest/web/facelets/uirepeat4.xhtml
deleted file mode 100644
index fb3dd8a..0000000
--- a/jsf-ri/systest/web/facelets/uirepeat4.xhtml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>ui:repeat4 test</title>
-</head>
-<body>
-<h:form id="form">
-
-    <div id="section1">
-        <ui:repeat var="var"
-                   value="#{repeatBean.flavorsList}"
-                   varStatus="status"
-                   begin="1">
-            <span>#{var} : index=#{status.index} : begin=#{status.begin} : end=#{status.end} : step=#{status.step} : first=#{status.first} : last=#{status.last} : even=#{status.even} : odd=#{status.odd}</span>
-            <br/>
-        </ui:repeat>
-    </div>
-    <br />
-    <br />
-    <div id="section2">
-        <ui:repeat var="var" value="#{repeatBean.flavorsList}"
-                   varStatus="status"
-                   begin="2"
-                   end="3">
-            <span>#{var}: index=#{status.index} : begin=#{status.begin} : end=#{status.end} : step=#{status.step} : first=#{status.first} : last=#{status.last} : even=#{status.even} : odd=#{status.odd}</span>
-            <br/>
-        </ui:repeat>
-    </div>
-    <br />
-    <br />
-    <div id="section3">
-        <ui:repeat var="var" value="#{repeatBean.flavorsList}"
-                   varStatus="status"
-                   step="2">
-            <span>#{var}: index=#{status.index} : begin=#{status.begin} : end=#{status.end} : step=#{status.step} : first=#{status.first} : last=#{status.last} : even=#{status.even} : odd=#{status.odd}</span>
-            <br/>
-        </ui:repeat>
-    </div>
-    <br />
-    <br />
-    <div id="section4">
-        <ui:repeat var="var" value="#{repeatBean.flavorsList}"
-                   varStatus="status"
-                   begin="1"
-                   end="1"
-                   step="2">
-            <span>#{var}: index=#{status.index} : begin=#{status.begin} : end=#{status.end} : step=#{status.step} : first=#{status.first} : last=#{status.last} : even=#{status.even} : odd=#{status.odd}</span>
-            <br/>
-        </ui:repeat>
-    </div>
-    <br />
-    <br />
-    <div id="section5">
-        <ui:repeat var="var" value="#{repeatBean.singleFlavorList}"
-                   varStatus="status">
-            <span>#{var}: index=#{status.index} : begin=#{status.begin} : end=#{status.end} : step=#{status.step} : first=#{status.first} : last=#{status.last} : even=#{status.even} : odd=#{status.odd}</span>
-            <br/>
-        </ui:repeat>
-    </div>
-
-
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/validatorDisabled.xhtml b/jsf-ri/systest/web/facelets/validatorDisabled.xhtml
deleted file mode 100644
index 667e5d5..0000000
--- a/jsf-ri/systest/web/facelets/validatorDisabled.xhtml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<head>
-    <title></title>
-</head>
-<body>
-<p>
-    Test 1.  Validate nested validators marked as disabled aren't processed.
-</p>
-<h:form id="form1">
-    <h:inputText id="input" value="#{requestScope.value}">
-        <f:validateLongRange maximum="10" disabled="true" />
-        <f:validateLength minimum="5" />
-        <f:validateDoubleRange minimum="5" disabled="true" />
-    </h:inputText>
-        <br />
-        <h:commandButton id="sub" value="Submit" />
-        <h:messages id="messages1" for="input" />
-</h:form>
-<p>
-    Test 2.  Nested validator disable status takes precedence over wrapped validators.
-    First input field disables the validator, so no messages should appear over the
-    HR.  The second field doesn't have a validator.  Surrounding both fields is
-    a length validator with a minimum of 5.
-</p>
-<h:form id="form2">
-    <f:validateLength minimum="5">
-        <h:inputText id="input1" value="#{requestScope.value1}">
-            <f:validateLength disabled="true" />
-        </h:inputText>
-        <h:inputText id="input2" value="#{requestScope.value2}" />
-    </f:validateLength>
-    <h:commandButton id="sub" value="Submit" />
-    <h:messages id="messages2" for="input1" />
-    <hr />
-    <h:messages id="messages3" for="input2" />
-</h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facelets/viewPhaseListeners.xhtml b/jsf-ri/systest/web/facelets/viewPhaseListeners.xhtml
deleted file mode 100644
index cae551e..0000000
--- a/jsf-ri/systest/web/facelets/viewPhaseListeners.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>UIViewRoot PhaseListeners</title>
-</head>
-<body>
-<h:form id="form">
-   <f:phaseListener binding="#{listenerCheckBean.listener}" />
-   <h:commandButton id="button" value="Submit" action="#{listenerCheckBean.checkListeners}" />
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/facelets/when.xhtml b/jsf-ri/systest/web/facelets/when.xhtml
deleted file mode 100644
index 073dfcf..0000000
--- a/jsf-ri/systest/web/facelets/when.xhtml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:fn="http://java.sun.com/jsp/jstl/functions">
-<head>
-    <title>forEach</title>
-</head>
-
-<body>
-
-
-    <c:set var="isEmpty" value="#{fn:length(test1.oneElementList) lt 1}"/>
-<p>
-    <h:outputText value="size = #{fn:length(test1.oneElementList)}"/>
-</p>
-<p>
-    <h:outputText value="isEmpty = #{isEmpty}"/>
-</p>
-<c:if test="#{fn:length(test1.oneElementList) lt 1}">
-    <p>there is none!!!</p>
-</c:if>
-<c:if test="#{fn:length(test1.oneElementList) ge 1}">
-    <p>there is some!!!</p>
-</c:if>
-<c:choose>
-    <c:when test="#{isEmpty}">
-        <p>there is none (really)!!!</p>
-    </c:when>
-    <c:otherwise>
-        <p>there is some (really)!!!</p>
-    </c:otherwise>
-</c:choose>
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/facesResponse.jsp b/jsf-ri/systest/web/facesResponse.jsp
deleted file mode 100644
index a35a5cb..0000000
--- a/jsf-ri/systest/web/facesResponse.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page import="javax.servlet.RequestDispatcher" %><%
-
-  // Generically link to a Faces Response for a View Id
-  //
-  // Query Parameters:
-  //  responseViewId           View Id to display via Faces
-
-  String toViewId = request.getParameter("responseViewId");
-  RequestDispatcher rd = application.getRequestDispatcher
-    ("/faces" + toViewId);
-  rd.forward(request, response);
-
-  // Should always forward or throw an exception
-
-%>
diff --git a/jsf-ri/systest/web/factoryFinder.jsp b/jsf-ri/systest/web/factoryFinder.jsp
deleted file mode 100644
index 83d75bf..0000000
--- a/jsf-ri/systest/web/factoryFinder.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Print out the names of the current Factories</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Print out the names of the current Factories</h1>
-
-<f:view>
-
-  <h:form>
-
-      <h:outputText value="#{test3.factoryPrintout}" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/failure.xhtml b/jsf-ri/systest/web/failure.xhtml
deleted file mode 100644
index 7a74475..0000000
--- a/jsf-ri/systest/web/failure.xhtml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-    <head><title>Failure!</title></head>
-    <body>
-        <p>Failure!</p>
-    </body>
-</html>
diff --git a/jsf-ri/systest/web/flash/flashKeepMessages01.xhtml b/jsf-ri/systest/web/flash/flashKeepMessages01.xhtml
deleted file mode 100644
index a8a50cb..0000000
--- a/jsf-ri/systest/web/flash/flashKeepMessages01.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html">
-    <h:head>
-        <title>Test that flash shows multiple messages: issue 1476</title>
-    </h:head>
-    <h:body>
-        <h:form prependId="false">
-
-            <h:inputText value="#{flashMessagesBean.value}" />
-            <h:commandButton id="nextButton" value="submit" action="flashKeepMessages02?faces-redirect=true" />
-
-        </h:form>
-    </h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/flash/flashKeepMessages02.xhtml b/jsf-ri/systest/web/flash/flashKeepMessages02.xhtml
deleted file mode 100644
index 32770a4..0000000
--- a/jsf-ri/systest/web/flash/flashKeepMessages02.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html">
-    <h:head>
-        <title>Test that flash shows multiple messages: issue 1476</title>
-    </h:head>
-    <h:body>
-        <h:messages showDetail="true" showSummary="true"
-                    title="should have two messages"
-                    tooltip="should have two messages" />
-    </h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/flash01.xhtml b/jsf-ri/systest/web/flash01.xhtml
deleted file mode 100644
index dcf31dd..0000000
--- a/jsf-ri/systest/web/flash01.xhtml
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-	<h:head>
-		<title>flash 1</title>
-	</h:head>
-	
-	<h:body>
-		<h:form id="nextForm" prependId="false">
-			<c:set target="#{flash}" property="foo" value="bar"/>
-			
-			<h:panelGrid id="trials" columns="1">
-				<h:button id="nextButton"
-						  value="Next (button)"
-						  outcome="flash02.xhtml">
-                                  <f:param name="foo" value="bar"/>
-                                </h:button>
-				<h:link id="nextLink"
-						value="Next (link)"
-						outcome="flash02.xhtml">
-                                  <f:param name="foo" value="bar"/>
-                                </h:link>
-				<h:commandLink id="nextCommandLink"
-						       action="flash02.xhtml"
-						       value="Next 
-(commandLink)"/>
-				<h:commandButton id="nextCommandButton"
-						         action="flash02.xhtml"
-						         value="Next 
-(commandButton)"/>
-			</h:panelGrid>
-		</h:form>
-
-		<ui:debug/>
-	</h:body>
-</html>
diff --git a/jsf-ri/systest/web/flash02.xhtml b/jsf-ri/systest/web/flash02.xhtml
deleted file mode 100644
index 509ea6b..0000000
--- a/jsf-ri/systest/web/flash02.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC
-	"-//W3C//DTD XHTML 1.0 Strict//EN"
-	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-
-<f:metadata>
-  <f:viewParam name="foo" id="foo" value="#{flash.now.foo}" />
-</f:metadata>
-
-	<h:head>
-		<meta http-equiv="Content-Type" content="text/html; charset=UTF-
-8"/>
-		<title>flash 2</title>
-	</h:head>
-	
-	<h:body>
-		foo = ${flash.foo}
-
-		<ui:debug/>
-	</h:body>
-</html>
diff --git a/jsf-ri/systest/web/flashReaper.xhtml b/jsf-ri/systest/web/flashReaper.xhtml
deleted file mode 100644
index e7d61e6..0000000
--- a/jsf-ri/systest/web/flashReaper.xhtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-    <h:body>
-
-        <c:set target="#{flash}" property="dontcare" value="dontcare" />
-
-        #{flashReaperBean.numberEntriesInInnerMap}
-
-    </h:body>
-</html>
-
diff --git a/jsf-ri/systest/web/foo01.jsp b/jsf-ri/systest/web/foo01.jsp
deleted file mode 100644
index 0a977ec..0000000
--- a/jsf-ri/systest/web/foo01.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="foo01">
-<h:outputText value="foo01"/>
-</f:subview>
diff --git a/jsf-ri/systest/web/foo02.jsp b/jsf-ri/systest/web/foo02.jsp
deleted file mode 100644
index 2a387a4..0000000
--- a/jsf-ri/systest/web/foo02.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-
-<h:outputText value="foo02"/>
-
diff --git a/jsf-ri/systest/web/forEach01.jsp b/jsf-ri/systest/web/forEach01.jsp
deleted file mode 100644
index 1674428..0000000
--- a/jsf-ri/systest/web/forEach01.jsp
+++ /dev/null
@@ -1,112 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%@ page import="java.util.*" %>
-
-<% ArrayList list = new ArrayList();
-   list.add("output1"); list.add("output2"); list.add("output3");
-   pageContext.setAttribute("output", list, pageContext.SESSION_SCOPE);
-
-   ArrayList inputWithIdList = new ArrayList();
-   inputWithIdList.add("inputid1"); inputWithIdList.add("inputid2"); inputWithIdList.add("inputid3");
-   pageContext.setAttribute("inputWithIdList", inputWithIdList, pageContext.SESSION_SCOPE);
-
-   
-   HashMap map1 = new HashMap();
-   map1.put("inputText1", "input1");
-   map1.put("inputText2", "input2");
-   map1.put("inputText3", "input3");
-   pageContext.setAttribute("input", map1, pageContext.SESSION_SCOPE);
-
-%>
-<f:view>
-<html>
-<head>
-<title>c:forEach Test</title>
-</head>
-<body>
-
-<br>
-<h:form id="myform" >
-<br>
-   <h:outputText value ="Test c:ForEach with outputText and no id" />
-   <br> 
-   <c:forEach var="item" items="#{output}">
-       <h:outputText value="#{item}"/> <br>
-   </c:forEach>
-   <br> <br>
-   
-   <!-- inputText without "id" -->
-   <h:outputText value ="Test c:ForEach with inputText and no id" />
-   <br> 
-   <c:forEach var="item" items="#{input}">
-       <h:inputText value="#{item}" valueChangeListener="#{forEachBean1.valueChange1}"/> <br>
-   </c:forEach>
-   
-   <c:forEach var="item" items="#{forEachBean1.newList1}">
-       <h:inputText value="#{item}" /> <br>
-   </c:forEach>
-   
-   
-   <br> <br>
-   <h:outputText value ="Test c:ForEach with inputText and with id" />
-   <br> 
-   <!-- inputText with "id" -->
-   <c:forEach var="itemWithId" items="#{inputWithIdList}">
-       <h:inputText id ="inputId1" value="#{itemWithId}" valueChangeListener="#{forEachBean1.valueChange2}"/>
-       <br>
-   </c:forEach>
-   
-   <c:forEach var="item" items="#{forEachBean1.newList2}">
-       <h:inputText id="inputId2" value="#{item}" /> <br>
-   </c:forEach>
-       
-   <br> <br>
-
-<h:commandButton id="submit" value="Submit" />
-</h:form>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/forEach02.jsp b/jsf-ri/systest/web/forEach02.jsp
deleted file mode 100644
index 17324c0..0000000
--- a/jsf-ri/systest/web/forEach02.jsp
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<html>
-  <head>
-    <title></title>
-  </head>
-
-  <body>
-    <h1></h1>
-
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<f:view>
-
-<h:messages/>
-<br>
-
-<h:form               id="form">
-
-
-   <table border="1" style="list-background"
-        summary="Add books from the catalog to your shopping cart.">
-       <tr><th>header</th>
-       </tr>
-
-       <c:forEach items="#{BooksBean.books}" var="book" varStatus="stat" >
-          <tr styleClass="${(stat.index % 2) == 0 ? "list-row-event" : "list-row-odd"}">
-               <td style="list-column-left">
-               <h:commandLink action="null">
-                       
-                          <h:outputText id="bookTitle" value="#{book.title}"/>
-                       
-               </h:commandLink>
-               </td>
-          </tr>
-       </c:forEach>
-  </table>
-
-</h:form>
-
-</f:view>
-
-
-
-    <hr>
-    <address><a href="mailto:ed.burns at sun.com">Edward Burns</a></address>
-<!-- Created: Tue Oct  4 13:39:02 EDT 2005 -->
-<!-- hhmts start -->
-Last modified: Tue Oct  4 14:02:27 EDT 2005
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/forEach03.jsp b/jsf-ri/systest/web/forEach03.jsp
deleted file mode 100644
index 741b561..0000000
--- a/jsf-ri/systest/web/forEach03.jsp
+++ /dev/null
@@ -1,149 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ page contentType="text/html" language="java"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<%@ page import="java.util.*"%>
-
-<%
-        for (int j = 0; j < 3; ++j)
-        {
-            String mapName = "input" + (j + 1);
-            if (pageContext.getAttribute(mapName) == null)
-            {
-                Map map = new LinkedHashMap();
-                for (int i = 0; i < 3; ++i)
-                    map.put("inputText" + (j * 3 + i + 1), "input" + (j * 3 + i + 1));
-                pageContext.setAttribute(mapName, map, pageContext.SESSION_SCOPE);
-            }
-        }
-%>
-<f:view>
-    <html>
-    <head>
-    <title>Test Interaction of c:forEach, h:label and h:message</title>
-    <style type="text/css">
-    label { font-family: sans-serif; font-weight: bold; font-size: 0.8em; }
-    .message { color: red; font-weight: bold; }
-    .subheading { font-weight: bold; background-color: #cfffcf; }
-    </style>
-    </head>
-    <body>
-
-    <br>
-    <h:form id="myform">
-        <h:panelGrid>
-            <f:facet name="header">
-                <h:outputText
-                    value="Test Interaction of c:forEach, h:label and h:message" />
-            </f:facet>
-
-            <!-- list all messages -->
-            <h:messages id="messages" layout="table" styleClass="message" />
-
-            <!-- label without "id" -->
-            <h:outputText styleClass="subheading"
-                value="Test simple label and inputText and no id on the label" />
-            <h:outputLabel for="inputInt1" value="Label for intProperty below" />
-            <h:message for="inputInt1" styleClass="message" />
-            <h:inputText id="inputInt1" value="#{forEachBean1.intProperty}"
-                required="true" />
-
-            <h:inputText id="inputByte1" value="#{forEachBean1.byteProperty}"
-                required="true" />
-            <h:message for="inputByte1" styleClass="message" />
-            <h:outputLabel for="inputByte1" value="Label for byteProperty above" />
-
-            <h:outputText styleClass="subheading"
-                value="Test c:ForEach with label and inputText and no id on the label" />
-            <c:forEach var="item" items="#{input1}">
-                <h:outputLabel for="inputId1" value="Label for #{item.key} below" />
-                <h:message for="inputId1" styleClass="message" />
-                <h:inputText id="inputId1" value="#{input1[item.key]}" required="true" />
-            </c:forEach>
-
-            <!-- label with "id" -->
-            <h:outputText styleClass="subheading"
-                value="Test simple label and inputText with an id on the label" />
-            <h:outputLabel id="inputLong1Label" for="inputLong1"
-                value="Label for longProperty below" />
-            <h:message id="inputLong1Msg" for="inputLong1" styleClass="message" />
-            <h:inputText id="inputLong1" value="#{forEachBean1.longProperty}"
-                required="true" />
-
-            <h:inputText id="inputShort1" value="#{forEachBean1.longProperty}"
-                required="true" />
-            <h:message id="inputShort1Msg" for="inputShort1" styleClass="message" />
-            <h:outputLabel id="inputShort1Label" for="inputShort1"
-                value="Label for shortProperty above" />
-
-            <h:outputText styleClass="subheading"
-                value="Test c:ForEach with label and inputText with an id on the label" />
-            <c:forEach var="item" items="#{input2}">
-                <h:inputText id="inputId2" value="#{input2[item.key]}" required="true" />
-                <h:message id="inputId2Msg" for="inputId2" styleClass="message" />
-                <h:outputLabel id="inputId2Label" for="inputId2"
-                    value="Label for #{item.key} above" />
-            </c:forEach>
-
-            <h:outputText styleClass="subheading"
-                value="Test c:ForEach with transposed table" />
-            <h:panelGroup>
-                <h:panelGrid columns="#{fn:length(input3)}">
-                    <c:forEach var="item" items="#{input3}">
-                        <h:outputLabel for="inputId3" value="Label for #{item.key} below" />
-                    </c:forEach>
-                    <c:forEach var="item" items="#{input3}">
-                        <h:message for="inputId3" styleClass="message" />
-                    </c:forEach>
-                    <c:forEach var="item" items="#{input3}">
-                        <h:inputText id="inputId3" value="#{input3[item.key]}"
-                            required="true" />
-                    </c:forEach>
-                </h:panelGrid>
-            </h:panelGroup>
-        </h:panelGrid>
-        
-        <jsp:include page="forEach03Include.jsp" />       
-
-        <h:commandButton id="submit" value="Submit" />
-    </h:form>
-    </body>
-    </html>
-</f:view>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/forEach03Include.jsp b/jsf-ri/systest/web/forEach03Include.jsp
deleted file mode 100644
index eeb58fc..0000000
--- a/jsf-ri/systest/web/forEach03Include.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-<c:forEach var="item" items="#{input1}">
-    <h:outputLabel for="inputId11" value="Label for #{item.key} below"/>
-    <h:message for="inputId11" styleClass="message"/>
-    <h:inputText id="inputId11" value="#{input1[item.key]}" required="true"/>
-</c:forEach>
-
-<h:inputText id="Short11" value="#{forEachBean1.longProperty}"
-             required="true"/>
-<h:message for="Short11" styleClass="message"/>
-<h:outputLabel id="Short11Label" for="Short11"
-               value="Label for shortProperty above"/>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/forEach04.jsp b/jsf-ri/systest/web/forEach04.jsp
deleted file mode 100644
index a9ac7e2..0000000
--- a/jsf-ri/systest/web/forEach04.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%
-    String[] paths = new String[] { "frag1", "frag2" };
-    request.setAttribute("paths", paths);
-%>
-<f:view>
-    <html>
-    <head>
-        <title>forEach04.jsp (validates fix for Issue 714)</title>
-    </head>
-    <body>
-    <h:form>
-        <h:commandButton id="clickit" value="Click Me"/>
-        <c:forEach items="#{paths}" var="fragmentPath">
-            <f:subview id="id${fragmentPath}">
-                <jsp:include page="/${fragmentPath}.jsp"/>
-            </f:subview>
-        </c:forEach>
-    </h:form>
-    </body>
-    </html>
-</f:view>
diff --git a/jsf-ri/systest/web/frag1.jsp b/jsf-ri/systest/web/frag1.jsp
deleted file mode 100644
index 971ba73..0000000
--- a/jsf-ri/systest/web/frag1.jsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<h:outputText value="frag1" id="frag1"/>
diff --git a/jsf-ri/systest/web/frag2.jsp b/jsf-ri/systest/web/frag2.jsp
deleted file mode 100644
index 4b58749..0000000
--- a/jsf-ri/systest/web/frag2.jsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<h:outputText value="frag2" id="frag2"/>
diff --git a/jsf-ri/systest/web/golden/escape_test.txt b/jsf-ri/systest/web/golden/escape_test.txt
deleted file mode 100644
index d725390..0000000
--- a/jsf-ri/systest/web/golden/escape_test.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-  <html>
-
-    <head>
-      <title>Test of outputText Escaping</title>
-    </head>
-
-    <body>
-
-      <h1>Test of outputText Escaping</h1>
-
-      <p>
-        [DEFAULT]
-        This text <b>has angle brackets</b>.
-        The angle brackets MUST be escaped.
-      </p>
-
-      <p>
-        [FALSE]
-        This text <b>has angle brackets</b>.
-        The angle brackets MUST NOT be escaped.
-      </p>
-
-      <p>
-        [TRUE]
-        This text <b>has angle brackets</b>.
-        The angle brackets MUST be escaped.
-      </p>
-
-    </body>
-
-  </html>
-
-
diff --git a/jsf-ri/systest/web/golden/factoryFinder.txt b/jsf-ri/systest/web/golden/factoryFinder.txt
deleted file mode 100644
index ff6897a..0000000
--- a/jsf-ri/systest/web/golden/factoryFinder.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Print out the names of the current Factories</title>
-    
-    
-  </head>
-
-  <body>
-    <h1>Print out the names of the current Factories</h1>
-
-
-<form id="j_id_id16" name="j_id_id16" method="post" action="/jsf-systest/faces/factoryFinder.jsp;jsessionid=4a6a287194d75d4c7d41f07ebeac" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="j_id_id16" value="j_id_id16" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id3:j_id4" />
-InjectionApplicationFactory InjectionFacesContextFactory LifecycleFactoryWrapper RenderKitFactoryWrapper 
-</form>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/hello-mismatch.txt b/jsf-ri/systest/web/golden/hello-mismatch.txt
deleted file mode 100644
index 04a6d51..0000000
--- a/jsf-ri/systest/web/golden/hello-mismatch.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-/hello.jsp MISMATCH
-
diff --git a/jsf-ri/systest/web/golden/hello.txt b/jsf-ri/systest/web/golden/hello.txt
deleted file mode 100644
index f9d4564..0000000
--- a/jsf-ri/systest/web/golden/hello.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-/hello.jsp PASSED
-
diff --git a/jsf-ri/systest/web/golden/include-import-interweaving.txt b/jsf-ri/systest/web/golden/include-import-interweaving.txt
deleted file mode 100644
index c99970f..0000000
--- a/jsf-ri/systest/web/golden/include-import-interweaving.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>Hello</title> </head>
-    
-    
-        
-    
-    <body bgcolor="white">
-    
-<form id="form" name="form" method="post" action="/jsf-systest/faces/include-import-interweaving.jsp;jsessionid=4bbc0a31bc8e689ae2830143bdb5" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form" value="form" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id27:j_id28" />
-
-    
-        <p>Outer Template Text followed by 
-        <span id="form:outerComponent">outer component</span></p>
-	
-<table border="1">	
-
-<tr><td>
-<ul><font color="blue">        
-
- 
-	    <p>Subview on the outside only with jsp:include:</p>
-            
-
-
-
-
-
-
-<p>Subview 1: Inner template text followed by
-
-<span id="form:subview01:innerComponent1">inner component 1</span>
-
-</p>
-
-<p>Subview 1: Inner template 2 text followed by
-
-<span id="form:subview01:innerComponent2">inner component 2</span>
-
-</p>
-
- 
-        
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="green">        
-
-	    <p>Subview on the inside only with jsp:include:</p>
-            
-
-
-
-
-
-
-
-
-<p>Subview 2: Inner template text followed by
-<span id="form:innerSubView:innerComponent3">inner component 3</span></p>
-
-
-
-
-        
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="purple">        
-
-	    <p>Subview on the outside and inside with jsp:include:</p>
-
-	    <p>Template Text before the include</p>
-            
-
-
-
-
-
-
-
-
-<p>Subview 2: Inner template text followed by
-<span id="form:subview03:innerSubView2:innerComponent4">inner component 4</span></p>
-
-
-
-        
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="red">        
-        
-	    <p>Subview on the outside only with c:import:</p>
-            
-
-
-
-
-
-
-<p>Subview 4: Inner template text followed by
-
-<span id="form:outerSubview3:innerComponent5">inner component 5</span>
-
-</p>
-
-<p>Subview 4: Inner template 2 text followed by
-
-<span id="form:outerSubview3:innerComponent6">inner component 6</span>
-
-</p>
-
-        
-</font></ul>        
-
-	    
-</td></tr>
-
-
-<tr><td>
-<ul><font color="red">        
-	    <p>Subview on the inside only with c:import:</p>
-            
-
-
-
-
-
-
-
-
-<p>Subview 5: Inner template text followed by
-<span id="form:innerSubView4:innerComponent7">inner component 7</span></p>
-
-
-
-
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="orange">        
-	    <p>Subview on the outside and inside with c:import:</p>
-
-	    <p>Template Text on the outside</p>
-            
-
-
-
-
-
-
-
-
-<p>Subview 6: Inner template text followed by
-<span id="form:subview05:innerSubView5:innerComponent8">inner component 8</span></p>
-
-
-
-</font></ul>        
-
-	    
-</td></tr>
-
-
-</table>
-	 
-
-    
-</form>
-    </body>
-</html>  
diff --git a/jsf-ri/systest/web/golden/interweaving01.txt b/jsf-ri/systest/web/golden/interweaving01.txt
deleted file mode 100644
index 2c6f4d4..0000000
--- a/jsf-ri/systest/web/golden/interweaving01.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>interweaving01</title>
-</head>
-<body>
-Begin
-test
-jsp include without verbatim
-interweaving
-works
-well!!
-End
-
-
-test
-jsp include without verbatim
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/interweaving02.txt b/jsf-ri/systest/web/golden/interweaving02.txt
deleted file mode 100644
index 8a49b0f..0000000
--- a/jsf-ri/systest/web/golden/interweaving02.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>interweaving01</title>
-</head>
-<body>
-Begin
-test
-jstl import without verbatim
-interweaving
-works
-well!!
-End
-
-
-test
-jstl import without verbatim
-</body>
-</html>
-
-
-
diff --git a/jsf-ri/systest/web/golden/interweaving03.txt b/jsf-ri/systest/web/golden/interweaving03.txt
deleted file mode 100644
index d3cbf67..0000000
--- a/jsf-ri/systest/web/golden/interweaving03.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<form id="j_id_id11" name="j_id_id11" method="post" action="/jsf-systest/faces/interweaving03.jsp;jsessionid=4b9d4981e04824d79b869a2f026c" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="j_id_id11" value="j_id_id11" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id5:j_id6" />
-<table>
-<tbody>
-<tr>
-<td>
-	Row 1
-	</td>
-</tr>
-<tr>
-<td>Row 2</td>
-</tr>
-<tr>
-<td>
-	Row 3
-      </td>
-</tr>
-</tbody>
-</table>
-
-</form>
diff --git a/jsf-ri/systest/web/golden/interweaving04.txt b/jsf-ri/systest/web/golden/interweaving04.txt
deleted file mode 100644
index 3caa4b9..0000000
--- a/jsf-ri/systest/web/golden/interweaving04.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<html>
-<head>
-<title>jstl-if-without-id</title>
-</head>
-<body>
-[First][Second][Third]
-
-  
-
-
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/interweaving05.txt b/jsf-ri/systest/web/golden/interweaving05.txt
deleted file mode 100644
index bcd0cdf..0000000
--- a/jsf-ri/systest/web/golden/interweaving05.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-
-
-
-<html>
-<head>
-<title>jstl-choose test without "id"</title>
-</head>
-<body>
-Begin jstl-choose test without id[FIRST][SECOND]End jstl-choose test without id
-
-  
-    
-    
-  
-  
-  
-
-
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/interweaving06.txt b/jsf-ri/systest/web/golden/interweaving06.txt
deleted file mode 100644
index 11bb8b1..0000000
--- a/jsf-ri/systest/web/golden/interweaving06.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>interweaving06</title>
-</head>
-<body>
-<p>Begin test jsp:include without subview and iterator tag in included page</p>
-<br />
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-  <br>
-  
-    Array[0]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2" value="This component has no ID " /><br>
-  
-    Array[1]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2j_id_1" value="This component has no ID " /><br>
-  
-    Array[2]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2j_id_2" value="This component has no ID " /><br>
-  
-    Array[3]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2j_id_3" value="This component has no ID " /><br>
-  
-
-</p>
-
-<p>Text from interweaving06.jsp</p>
-</p>End test jsp:include without subview and iterator tag in included page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/interweaving07.txt b/jsf-ri/systest/web/golden/interweaving07.txt
deleted file mode 100644
index e0b6d21..0000000
--- a/jsf-ri/systest/web/golden/interweaving07.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>interweaving07</title>
-</head>
-<body>
-<p>Begin test <c:import> with iterator tag in imported page</p>
-<br />
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-  <br>
-  
-    Array[0]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2" value="This component has no ID " /><br>
-  
-    Array[1]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2j_id_1" value="This component has no ID " /><br>
-  
-    Array[2]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2j_id_2" value="This component has no ID " /><br>
-  
-    Array[3]: 
-    This component has no ID <br>
-    <input type="text" name="j_id_id16pc2j_id_3" value="This component has no ID " /><br>
-  
-
-</p>
-
-<p>Text from interweaving07.jsp</p>
-
-<p>End test <c:import> with iterator tag in imported page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/interweaving08.txt b/jsf-ri/systest/web/golden/interweaving08.txt
deleted file mode 100644
index d849c5d..0000000
--- a/jsf-ri/systest/web/golden/interweaving08.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-    <html>
-        <body>
-            
-<form id="form" name="form" method="post" action="/jsf-systest/faces/interweaving08.jsp;jsessionid=b6a55da92c55d06c043b90f68e43" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form" value="form" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id21:j_id22" />
-<table>
-<tbody>
-<tr>
-<td>
-                        
-                        ciao
-                        Value</td>
-</tr>
-</tbody>
-</table>
-
-</form>
-        </body>
-    </html>
-
-
diff --git a/jsf-ri/systest/web/golden/interweaving09.txt b/jsf-ri/systest/web/golden/interweaving09.txt
deleted file mode 100644
index de95a48..0000000
--- a/jsf-ri/systest/web/golden/interweaving09.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-    <html>
-        <body>
-            
-<form id="form" name="form" method="post" action="/jsf-systest/faces/interweaving09.jsp;jsessionid=b6c56e1112007b33b36de4d24f7d" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form" value="form" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id27:j_id28" />
-<table>
-<tbody>
-<tr>
-<td>Value
-                        
-                                             
-                        ciao
-                        Value</td>
-</tr>
-</tbody>
-</table>
-
-</form>
-        </body>
-    </html>
-
-
diff --git a/jsf-ri/systest/web/golden/interweaving10.txt b/jsf-ri/systest/web/golden/interweaving10.txt
deleted file mode 100644
index 299c602..0000000
--- a/jsf-ri/systest/web/golden/interweaving10.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-    <html>
-        <body>
-            
-<form id="form" name="form" method="post" action="/jsf-systest/faces/interweaving10.jsp;jsessionid=b6e2e2b1f4635f2dd037bea45cee" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form" value="form" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id33:j_id34" />
-<table>
-<tbody>
-<tr>
-<td>Value
-                        
-                         
-                        ciao                       
-                    </td>
-</tr>
-</tbody>
-</table>
-
-</form>
-        </body>
-    </html>
-
-
diff --git a/jsf-ri/systest/web/golden/interweaving11.txt b/jsf-ri/systest/web/golden/interweaving11.txt
deleted file mode 100644
index e5a4bb0..0000000
--- a/jsf-ri/systest/web/golden/interweaving11.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-<html>
-  <head>
-      <title>interweaving11</title>
-  </head>
-  <body>
-
-<form id="j_id_id18" name="j_id_id18" method="post" action="/jsf-systest/faces/interweaving11.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="j_id_id18" value="j_id_id18" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id31:j_id32" />
-
-<script type="text/javascript" src="/jsf-systest/faces/javax.faces.resource/jsf.js?ln=javax.faces&stage=Development"></script>
-<a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id_id18'),{'j_id_id18:j_id_id22':'j_id_id18:j_id_id22','param':'value'},'');return false">one</a>
-
-
-                </br>
-
-                <a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id_id18'),{'j_id_id18:j_id_id22j_id_1':'j_id_id18:j_id_id22j_id_1','param':'value'},'');return false">two</a>
-                </br>
-
-                <a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id_id18'),{'j_id_id18:j_id_id22j_id_2':'j_id_id18:j_id_id22j_id_2','param':'value'},'');return false">three</a>
-                </br>
-
-
-</form>
-  </body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/interweaving12.txt b/jsf-ri/systest/web/golden/interweaving12.txt
deleted file mode 100644
index ded0f88..0000000
--- a/jsf-ri/systest/web/golden/interweaving12.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-<html>
-<head><title>interweaving13</title></head>
-<body>
-
-<form id="j_id_id14" name="j_id_id14" method="post" action="/jsf-systest/faces/interweaving12.jsp;jsessionid=58335911147ca1cee932a98fe519" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="j_id_id14" value="j_id_id14" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id25:j_id26" />
-
-     
-
-
-
-
-
-    this should be before the button
-    <input id="j_id_id14:button" type="submit" name="j_id_id14:button" value="commandButton 1" />
-</form>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/managed04.txt b/jsf-ri/systest/web/golden/managed04.txt
deleted file mode 100644
index b6d9cdd..0000000
--- a/jsf-ri/systest/web/golden/managed04.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Verify property ordering</title>
-    
-    
-  </head>
-
-  <body>
-    <h1>Verify property ordering</h1>
-
-
-<form id="j_id_id16" name="j_id_id16" method="post" action="/jsf-systest/faces/managed04.jsp;jsessionid=4be1e1717b6e7c5f2bff5c4165d0" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="j_id_id16" value="j_id_id16" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id43:j_id44" />
- one two three fourfivesixseveneight
-</form>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/regression/AreaTextRowsAttrTest.txt b/jsf-ri/systest/web/golden/regression/AreaTextRowsAttrTest.txt
deleted file mode 100644
index 39d03bb..0000000
--- a/jsf-ri/systest/web/golden/regression/AreaTextRowsAttrTest.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-<html>
-    <head>
-        <title>Text Area Row Attribute Regression Test</title>        
-    </head>
-    <body>
-        <textarea name="j_id_id16" rows="30"></textarea>
-    </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/regression/InjectUserDefJS.txt b/jsf-ri/systest/web/golden/regression/InjectUserDefJS.txt
deleted file mode 100644
index bda0eaa..0000000
--- a/jsf-ri/systest/web/golden/regression/InjectUserDefJS.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>
-    <head>
-        <title>User Defined JS Injection Test</title>        
-    </head>
-    <body>
-        
-<form id="j_id_id16" name="j_id_id16" method="post" action="/jsf-systest/faces/regression/InjectUserDefJS.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="j_id_id16" value="j_id_id16" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id55:j_id56" />
-
-<script type="text/javascript" src="/jsf-systest/faces/javax.faces.resource/jsf.js?ln=javax.faces&stage=Development"></script>
-<a href="#" onclick="jsf.util.chain(this,event,'alert(\'Are you sure?\')','mojarra.jsfcljs(document.getElementById(\'j_id_id16\'),{\'j_id_id16:j_id_id18\':\'j_id_id16:j_id_id18\'},\'\')');return false">Link</a><input type="submit" name="j_id_id16:j_id_id20" value="Button" onclick="alert('Are you sure?')" />
-</form>
-    </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/regression/SelectOneManySizeAttrTest.txt b/jsf-ri/systest/web/golden/regression/SelectOneManySizeAttrTest.txt
deleted file mode 100644
index f6dd9e6..0000000
--- a/jsf-ri/systest/web/golden/regression/SelectOneManySizeAttrTest.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-<html>
-    <head>
-        <title>Select{One,Many}ListBox Size Attribute Test</title>        
-    </head>
-    <body>
-        <select name="j_id_id16" size="5">	<option value="val1">val1</option>
-</select><select name="j_id_id21" multiple="multiple" size="5">	<option value="val1">val1</option>
-</select>
-    </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/renderkit02A.txt b/jsf-ri/systest/web/golden/renderkit02A.txt
deleted file mode 100644
index b34b206..0000000
--- a/jsf-ri/systest/web/golden/renderkit02A.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-<HTML>
-
-    
-    
-
-       <span id="simplelabel">Simple Label</span>
-
-</HTML>
-
-
-/renderkit02.jsp PASSED
-
diff --git a/jsf-ri/systest/web/golden/renderkit03A.txt b/jsf-ri/systest/web/golden/renderkit03A.txt
deleted file mode 100644
index a3641ea..0000000
--- a/jsf-ri/systest/web/golden/renderkit03A.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-<HTML>
-
-    
-    
-
-       <span id="simplelabel">This IS A SIMPLE LABEL FROM THE CUSTOM RENDERER</span>
-
-</HTML>
-
-
-/renderkit03.jsp PASSED
-
diff --git a/jsf-ri/systest/web/golden/resourceBundle02.txt b/jsf-ri/systest/web/golden/resourceBundle02.txt
deleted file mode 100644
index 4476862..0000000
--- a/jsf-ri/systest/web/golden/resourceBundle02.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-Value from Faces component is Value From ResourceBundle.
diff --git a/jsf-ri/systest/web/golden/resourceBundle03.txt b/jsf-ri/systest/web/golden/resourceBundle03.txt
deleted file mode 100644
index 973dd4d..0000000
--- a/jsf-ri/systest/web/golden/resourceBundle03.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-Values from Components: <br />
-
-resourceBundle01: Value From ResourceBundle <br />
-
-non existing resourceBundle:  <br />
-
-resourceBundle03: Value from ResourceBundle03 <br />
-
-
diff --git a/jsf-ri/systest/web/golden/resourceBundle04.txt b/jsf-ri/systest/web/golden/resourceBundle04.txt
deleted file mode 100644
index b9fc5e1..0000000
--- a/jsf-ri/systest/web/golden/resourceBundle04.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-Values from Components: <br />
-
-exsting resource bundle, but non-existing key: ???bogusKey??? <br />
-
-
diff --git a/jsf-ri/systest/web/golden/resourceInjection01.txt b/jsf-ri/systest/web/golden/resourceInjection01.txt
deleted file mode 100644
index cb18556..0000000
--- a/jsf-ri/systest/web/golden/resourceInjection01.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Resource Injection in Managed Beans</title>
-    
-    
-  </head>
-
-  <body>
-    <h1>Test Resource Injection in Managed Beans</h1>
-
-Hello World from env-entry!Hello World from env-entry!
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/standard/autocomplete.txt b/jsf-ri/systest/web/golden/standard/autocomplete.txt
deleted file mode 100644
index f6b86c6..0000000
--- a/jsf-ri/systest/web/golden/standard/autocomplete.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>autocomplete.jsp</title>
-
- 
- 
-
-  </head>
-  <body>
-      
-          autocomplete on -> no attribute rendered: <input id="a" type="password" name="a" value="" />
-          autocomplete off -> attribute rendered: <input id="b" type="password" name="b" autocomplete="off" value="" />
-          no autocomplete defined -> no attribute rendered: <input id="c" type="password" name="c" value="" />
-          autocomplete on -> no attribute rendered: <input id="d" type="text" name="d" />
-          autocomplete off -> attribute rendered: <input id="e" type="text" name="e" autocomplete="off" />
-          no autocomplete defined -> no attribute rendered: <input id="f" type="text" name="f" />
-  </body>
-</html>
-
-
diff --git a/jsf-ri/systest/web/golden/standard/component01.txt b/jsf-ri/systest/web/golden/standard/component01.txt
deleted file mode 100644
index be0f8e2..0000000
--- a/jsf-ri/systest/web/golden/standard/component01.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>component01.jsp</title>
-
-
- 
- 
-
-  </head>
-  <body>
-      <input id="username" type="text" name="username" maxlength="32" onkeypress="attrValue" size="20" />
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/standard/converter02.txt b/jsf-ri/systest/web/golden/standard/converter02.txt
deleted file mode 100644
index d89697d..0000000
--- a/jsf-ri/systest/web/golden/standard/converter02.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-<span id="id1">$123.45</span>
diff --git a/jsf-ri/systest/web/golden/standard/converter05.txt b/jsf-ri/systest/web/golden/standard/converter05.txt
deleted file mode 100644
index 321cff7..0000000
--- a/jsf-ri/systest/web/golden/standard/converter05.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-    <html>
-        <head>
-            <title>Converters</title>
-
-
-        </head>
-
-        <body>
-
-
-            <span id="outputDatetime1">7/10/96 3:31:31 PM EDT</span><span id="outputDatetime2">7/10/96 3:31:31 PM EDT</span><span id="outputDatetime3">7/10/96 3:31:31 PM EDT</span><span id="outputNumber1">10.000</span><span id="outputNumber2">10,000</span><span id="outputNumber3">10,000</span>
-        </body>
-    </html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/golden/standard/converter06.txt b/jsf-ri/systest/web/golden/standard/converter06.txt
deleted file mode 100644
index 129a189..0000000
--- a/jsf-ri/systest/web/golden/standard/converter06.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Converters</title>
-    
-    
-    
-  </head>
-
-  <body>
-    <h1>Converters</h1>
-
-
-
-
-<form id="form" name="form" method="post" action="/jsf-systest/faces/converter06.jsp;jsessionid=4689f1f189053215520315a812598" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form" value="form" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" />
-<table id="form:panelGrid">
-<tbody>
-<tr>
-<td>Number4:</td>
-<td><input id="form:number4" type="text" name="form:number4" value="aaa" maxlength="20" size="10" /></td>
-<td>	Number4: 'aaa' is not a number. Number4: 'aaa' is not a number. Example: 99</td>
-</tr>
-<tr>
-<td>Number5:</td>
-<td><span id="form:number5">aaa</span></td>
-<td></td>
-</tr>
-<tr>
-<td>Number6:</td>
-<td><input id="form:number6" type="text" name="form:number6" value="aaa" maxlength="20" size="10" /></td>
-<td>My own message</td>
-</tr>
-<tr>
-<td>Number6:</td>
-<td>Number7:</td>
-<td><input id="form:number7" type="text" name="form:number7" value="aaa" maxlength="20" size="10" /></td>
-</tr>
-<tr>
-<td>	Number7: 'aaa' is not a number. Number7: 'aaa' is not a number. Example: 99</td>
-<td>Number8:</td>
-<td><span id="form:number8">aaa</span></td>
-</tr>
-<tr>
-<td></td>
-<td>Number9:</td>
-<td><input id="form:number9" type="text" name="form:number9" value="aaa" maxlength="20" size="10" /></td>
-</tr>
-<tr>
-<td>My own message</td>
-<td><input type="submit" name="form:j_id_id86" value="submit" /></td>
-</tr>
-</tbody>
-</table>
-
-</form>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/standard/dtablecolumnclasses.txt b/jsf-ri/systest/web/golden/standard/dtablecolumnclasses.txt
deleted file mode 100644
index bfa41c3..0000000
--- a/jsf-ri/systest/web/golden/standard/dtablecolumnclasses.txt
+++ /dev/null
@@ -1,206 +0,0 @@
-
-
-
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>dtablecolumnclasses.jsp</title>
-    <style type="text/css">
-        .b1 {
-            background-color: red;
-        }
-
-        .b2 {
-            background-color: green;
-        }
-
-        .b3 {
-            background-color: blue;
-        }
-
-        .b4 {
-            background-color: burlywood;
-        }
-        .b5 {
-            background-color: darkolivegreen;
-        }
-        .b6 {
-            background-color: darkviolet;
-        }
-        .b7 {
-            background-color: skyblue;
-        }
-    </style>
-    
-    
-
-
-    
-</head>
-<body>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td>c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td class="b3">c3</td>
-<td class="b4">c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td class="b3">c3_1</td>
-<td class="b4">c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td class="b3">c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td class="b3">c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td>c2</td>
-<td>c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td>c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td>c1</td>
-<td>c2</td>
-<td>c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td>c1_1</td>
-<td>c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td class="b3">c3</td>
-<td class="b4">c4</td>
-<td class="b5">c5</td>
-<td class="b6">c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td class="b3">c3_1</td>
-<td class="b4">c4_1</td>
-<td class="b5">c5_1</td>
-<td class="b6">c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td class="b3">c3</td>
-<td class="b4">c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td class="b3">c3_1</td>
-<td class="b4">c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td>c1</td>
-<td class="b2">c2</td>
-<td>c3</td>
-<td>c4</td>
-<td class="b4">c5</td>
-<td class="b5">c6</td>
-</tr>
-<tr>
-<td>c1_1</td>
-<td class="b2">c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td class="b4">c5_1</td>
-<td class="b5">c6_1</td>
-</tr>
-</tbody>
-</table>
-
-</body>
-</html>
-
-
diff --git a/jsf-ri/systest/web/golden/standard/messages01.txt b/jsf-ri/systest/web/golden/standard/messages01.txt
deleted file mode 100644
index a89c332..0000000
--- a/jsf-ri/systest/web/golden/standard/messages01.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>messages01.jsp</title>
-
-
-
-    
-    
-
-<STYLE TYPE="text/css" MEDIA=screen>
-<!--
-.errors { 
-  background-color: #7171A5;
-  border: 5px outset #71A5A5;
-  border-collapse: collapse;
-  font-family: sans-serif;
-  font-size: 14pt;
-  padding: 10px;
-}
--->
-</STYLE>
-  </head>
-
-  <body>
-
-<ul class="errors"><li>	{0}: Validation Error: Value is required. </li></ul>
-
-
-
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/standard/messages02.txt b/jsf-ri/systest/web/golden/standard/messages02.txt
deleted file mode 100644
index e3a2c6a..0000000
--- a/jsf-ri/systest/web/golden/standard/messages02.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-                                                                                    
-
-                                                                                    
-<html>
-<STYLE TYPE="text/css" MEDIA=screen>
-<!--
-.errors {
-  background-color: #7171A5;
-  border: 5px outset #71A5A5;
-  border-collapse: collapse;
-  font-family: sans-serif;
-  font-size: 14pt;
-  padding: 10px;
-  left: 48px;
-  top: 300px;
-  position: absolute;
-}
--->
-</STYLE>
-
-<table>
-<tbody>
-<tr>
-<td><ul dir="LTR" style="left: 48px; top: 100px; position: absolute"><li style="color: yellow"><span title="Information Summary">	Informational Detail</span></li><li><span title="Warning Summary">	Warning Detail</span></li><li style="color: red"><span title="Error Summary">	Error Detail</span></li><li style="color: blue"><span title="Fatal Summary">	Fatal Detail</span></li></ul></td>
-</tr>
-<tr>
-<td><table lang="en" style="left: 48px; top: 200px; position: absolute"><tr style="color: yellow"><td><span title="Information Summary">	Informational Detail</span></td></tr><tr><td><span title="Warning Summary">	Warning Detail</span></td></tr><tr style="color: red"><td><span title="Error Summary">	Error Detail</span></td></tr><tr style="color: blue"><td><span title="Fatal Summary">	Fatal Detail</span></td></tr></table></td>
-</tr>
-<tr>
-<td><ul class="errors"><li>	Information Summary Informational Detail</li><li>	Warning Summary Warning Detail</li><li>	Error Summary Error Detail</li><li>	Fatal Summary Fatal Detail</li></ul></td>
-</tr>
-<tr>
-<td><table style="left: 48px; top: 500px; position: absolute"><tr style="color: yellow"><td>	Information Summary Informational Detail</td></tr><tr><td>	Warning Summary Warning Detail</td></tr><tr style="color: red"><td>	Error Summary Error Detail</td></tr><tr style="color: blue"><td>	Fatal Summary Fatal Detail</td></tr></table></td>
-</tr>
-</tbody>
-</table>
-
-</html>
diff --git a/jsf-ri/systest/web/golden/standard/pgridcolumnclasses.txt b/jsf-ri/systest/web/golden/standard/pgridcolumnclasses.txt
deleted file mode 100644
index 271232c..0000000
--- a/jsf-ri/systest/web/golden/standard/pgridcolumnclasses.txt
+++ /dev/null
@@ -1,187 +0,0 @@
-
-
-
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>pgridcolumnclasses.jsp</title>
-    <style type="text/css">
-        .b1 {
-            background-color: red;
-        }
-
-        .b2 {
-            background-color: green;
-        }
-
-        .b3 {
-            background-color: blue;
-        }
-
-        .b4 {
-            background-color: burlywood;
-        }
-
-        .b5 {
-            background-color: darkolivegreen;
-        }
-
-        .b6 {
-            background-color: darkviolet;
-        }
-
-        .b7 {
-            background-color: skyblue;
-        }
-    </style>
-    
-    
-
-</head>
-<body>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td>c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td class="b3">c3</td>
-<td class="b4">c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td class="b3">c3_1</td>
-<td class="b4">c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td class="b3">c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td class="b3">c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td>c2</td>
-<td>c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td>c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td>c1</td>
-<td>c2</td>
-<td>c3</td>
-<td>c4</td>
-<td>c5</td>
-<td>c6</td>
-</tr>
-<tr>
-<td>c1_1</td>
-<td>c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td>c5_1</td>
-<td>c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td class="b1">c1</td>
-<td class="b2">c2</td>
-<td class="b3">c3</td>
-<td class="b4">c4</td>
-<td class="b5">c5</td>
-<td class="b6">c6</td>
-</tr>
-<tr>
-<td class="b1">c1_1</td>
-<td class="b2">c2_1</td>
-<td class="b3">c3_1</td>
-<td class="b4">c4_1</td>
-<td class="b5">c5_1</td>
-<td class="b6">c6_1</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tbody>
-<tr>
-<td>c1</td>
-<td class="b2">c2</td>
-<td>c3</td>
-<td>c4</td>
-<td class="b5">c5</td>
-<td class="b6">c6</td>
-</tr>
-<tr>
-<td>c1_1</td>
-<td class="b2">c2_1</td>
-<td>c3_1</td>
-<td>c4_1</td>
-<td class="b5">c5_1</td>
-<td class="b6">c6_1</td>
-</tr>
-</tbody>
-</table>
-
-</body>
-</html>
-
-
diff --git a/jsf-ri/systest/web/golden/standard/selectmany02.txt b/jsf-ri/systest/web/golden/standard/selectmany02.txt
deleted file mode 100644
index 131d3d7..0000000
--- a/jsf-ri/systest/web/golden/standard/selectmany02.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-<table class="one">
-	<tr>
-<td>
-<input name="j_id_id11" id="j_id_id11:0" value="1" type="checkbox" checked="checked" /><label for="j_id_id11:0" class=""> Open</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:1" value="2" type="checkbox" checked="checked" /><label for="j_id_id11:1" class=""> Submitted</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:2" value="3" type="checkbox" /><label for="j_id_id11:2" class=""> Accepted</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:3" value="4" type="checkbox" /><label for="j_id_id11:3" class=""> Rejected</label></td>
-	</tr>
-</table><table border="5" style="two">
-	<tr>
-<td>
-<input name="j_id_id23" id="j_id_id23:0" value="1" type="checkbox" checked="checked" /><label for="j_id_id23:0" class=""> Open</label></td>
-<td>
-<input name="j_id_id23" id="j_id_id23:1" value="2" type="checkbox" checked="checked" /><label for="j_id_id23:1" class=""> Submitted</label></td>
-<td>
-<input name="j_id_id23" id="j_id_id23:2" value="3" type="checkbox" /><label for="j_id_id23:2" class=""> Accepted</label></td>
-<td>
-<input name="j_id_id23" id="j_id_id23:3" value="4" type="checkbox" /><label for="j_id_id23:3" class=""> Rejected</label></td>
-	</tr>
-</table>
diff --git a/jsf-ri/systest/web/golden/standard/selectmany03.txt b/jsf-ri/systest/web/golden/standard/selectmany03.txt
deleted file mode 100644
index c3c7d7b..0000000
--- a/jsf-ri/systest/web/golden/standard/selectmany03.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-<table>
-	<tr>
-<td>
-<input name="j_id_id11" id="j_id_id11:0" value="1" type="checkbox" checked="checked" /><label for="j_id_id11:0" class="three"> Open</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:1" value="2" type="checkbox" checked="checked" /><label for="j_id_id11:1" class="three"> Submitted</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:2" value="3" type="checkbox" /><label for="j_id_id11:2" class="four"> Accepted</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:3" value="4" type="checkbox" /><label for="j_id_id11:3" class="four"> Rejected</label></td>
-	</tr>
-</table><table>
-	<tr>
-<td>
-<input name="j_id_id23" id="j_id_id23:0" value="1" type="checkbox" checked="checked" /><label for="j_id_id23:0" class="four"> Open</label></td>
-<td>
-<input name="j_id_id23" id="j_id_id23:1" value="2" type="checkbox" checked="checked" /><label for="j_id_id23:1" class="four"> Submitted</label></td>
-<td>
-<input name="j_id_id23" id="j_id_id23:2" value="3" type="checkbox" /><label for="j_id_id23:2" class="four"> Accepted</label></td>
-<td>
-<input name="j_id_id23" id="j_id_id23:3" value="4" type="checkbox" disabled="disabled" /><label for="j_id_id23:3" class="five"> Rejected</label></td>
-	</tr>
-</table>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/golden/standard/selectmany04.txt b/jsf-ri/systest/web/golden/standard/selectmany04.txt
deleted file mode 100644
index e52bc56..0000000
--- a/jsf-ri/systest/web/golden/standard/selectmany04.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-<table>
-	<tr>
-<td>
-<input name="j_id_id11" id="j_id_id11:0" value="1" type="checkbox" checked="checked" /><label for="j_id_id11:0" class="six eight"> Open</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:1" value="2" type="checkbox" checked="checked" disabled="disabled" /><label for="j_id_id11:1" class="seven eight"> Submitted</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:2" value="3" type="checkbox" /><label for="j_id_id11:2" class="six nine"> Accepted</label></td>
-<td>
-<input name="j_id_id11" id="j_id_id11:3" value="4" type="checkbox" disabled="disabled" /><label for="j_id_id11:3" class="seven nine"> Rejected</label></td>
-	</tr>
-</table>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/golden/subview01.txt b/jsf-ri/systest/web/golden/subview01.txt
deleted file mode 100644
index 0c8990c..0000000
--- a/jsf-ri/systest/web/golden/subview01.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>subview01</title>
-</head>
-<body>
-Begin test <c:import> with subview tag in imported page
-
-<p>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-foo01
-
-</p>
-
-<p>subview01</p>
-
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-bar01
-</p>
-
-<p>End test <c:import> with subview tag in imported page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/subview02.txt b/jsf-ri/systest/web/golden/subview02.txt
deleted file mode 100644
index 7fb4fbd..0000000
--- a/jsf-ri/systest/web/golden/subview02.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>subview02</title>
-</head>
-<body>
-<p>
-Begin test <c:import> with subview tag in importing page
-</p>
-
-<p>foo02</p>
-
-
-<p>subview02</p>
-
-<p>bar02
-</p>
-
-<p>End test <c:import> with subview tag in importing page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/subview03.txt b/jsf-ri/systest/web/golden/subview03.txt
deleted file mode 100644
index 822fb67..0000000
--- a/jsf-ri/systest/web/golden/subview03.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>subview03</title>
-</head>
-<body>
-<p>
-Begin test <c:include> with subview tag in included page</p>
-
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-foo01
-</p>
-
-<p>subview03</p>
-
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-bar01
-</p>
-
-<p>End test <c:include> with subview tag in included page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/subview04.txt b/jsf-ri/systest/web/golden/subview04.txt
deleted file mode 100644
index 4b7c387..0000000
--- a/jsf-ri/systest/web/golden/subview04.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>subview04</title>
-</head>
-<body>
-<p>
-[A]</p>
-
-
-<p>Begin test <c:include> with subview tag in including page</p>
-
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-bar01
-</p>
-
-
-<p>subview04</p>
-
-
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-bar02
-
-</p>
-
-
-<p>End test <c:include> with subview tag in including page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/subview05.txt b/jsf-ri/systest/web/golden/subview05.txt
deleted file mode 100644
index 633e4fe..0000000
--- a/jsf-ri/systest/web/golden/subview05.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>subview05</title>
-</head>
-<body>
-<p>Begin test jsp:include with subview and iterator tag in included page</p>
-<br />
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-
-  <br>
-  
-    Array[0]: 
-    This component has no ID <br>
-    <input type="text" name="subviewInner:j_id_id18pc2" value="This component has no ID " /><br>
-  
-    Array[1]: 
-    This component has no ID <br>
-    <input type="text" name="subviewInner:j_id_id18pc2j_id_1" value="This component has no ID " /><br>
-  
-    Array[2]: 
-    This component has no ID <br>
-    <input type="text" name="subviewInner:j_id_id18pc2j_id_2" value="This component has no ID " /><br>
-  
-    Array[3]: 
-    This component has no ID <br>
-    <input type="text" name="subviewInner:j_id_id18pc2j_id_3" value="This component has no ID " /><br>
-  
-
-
-
-</p>
-
-<p>Text from subview05.jsp</p>
-</p>End test jsp:include with subview and iterator tag in included page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/subview06.txt b/jsf-ri/systest/web/golden/subview06.txt
deleted file mode 100644
index b77a8ab..0000000
--- a/jsf-ri/systest/web/golden/subview06.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-<html>
-<head>
-<title>subview06</title>
-</head>
-<body>
-<p>Begin test <c:import> with iterator tag in imported page</p>
-
-<br />
-<p>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-
-
-
-
-
-
-  <br>
-  
-    Array[0]: 
-    This component has no ID <br>
-    <input type="text" name="subviewOuter:subviewInner:j_id_id18pc2" value="This component has no ID " /><br>
-  
-    Array[1]: 
-    This component has no ID <br>
-    <input type="text" name="subviewOuter:subviewInner:j_id_id18pc2j_id_1" value="This component has no ID " /><br>
-  
-    Array[2]: 
-    This component has no ID <br>
-    <input type="text" name="subviewOuter:subviewInner:j_id_id18pc2j_id_2" value="This component has no ID " /><br>
-  
-    Array[3]: 
-    This component has no ID <br>
-    <input type="text" name="subviewOuter:subviewInner:j_id_id18pc2j_id_3" value="This component has no ID " /><br>
-  
-
-
-
-</p>
-
-
-<p>Text from subview06.jsp</p>
-
-<p>End test <c:import> with iterator tag in imported page</p>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/taglib/attributeTest.txt b/jsf-ri/systest/web/golden/taglib/attributeTest.txt
deleted file mode 100644
index 7ded988..0000000
--- a/jsf-ri/systest/web/golden/taglib/attributeTest.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>f:attribute</title>
-    
-    
-  </head>
-
-  <body>
-    <h1>f:attribute</h1>
-
-
-    <p>
-    <span style="color: red">This Should Be Red</span>
-    </p>
-
-    <p>
-    New String Value
-    </p>
-
-
-
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/taglib/commandButton_param_test.txt b/jsf-ri/systest/web/golden/taglib/commandButton_param_test.txt
deleted file mode 100644
index 2133836..0000000
--- a/jsf-ri/systest/web/golden/taglib/commandButton_param_test.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-<html>
-<head>
-    
-    
-    <title>commandButton_param_test.jsp</title>
-</head>
-<body>
-    
-    
-<form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandButton_param_test.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form01" value="form01" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id3:j_id4" />
-
-<script type="text/javascript" src="/jsf-systest/faces/javax.faces.resource/jsf.js?ln=javax.faces&stage=Development"></script>
-<input id="form01:button01" type="submit" name="form01:button01" value="Label" onclick="mojarra.jsfcljs(document.getElementById('form01'),{'form01:button01':'form01:button01','testname':'testval'},'');return false" />Test Link
-        
-        <p/>
-        <input id="form01:button02" type="submit" name="form01:button02" value="Label" />Test Link
-        <p/>
-        <input id="form01:button03" type="submit" name="form01:button03" value="Label" onclick="mojarra.jsfcljs(document.getElementById('form01'),{'form01:button03':'form01:button03','testname2':'This is a String property'},'');return false" />Test Link
-        <p/>
-        <input id="form01:button04" type="submit" name="form01:button04" value="Label" onclick="jsf.util.chain(this,event,'hello();','mojarra.jsfcljs(document.getElementById(\'form01\'),{\'form01:button04\':\'form01:button04\',\'testname\':\'testval\'},\'\')');return false" />Test Link
-</form>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/golden/taglib/commandButton_test.txt b/jsf-ri/systest/web/golden/taglib/commandButton_test.txt
deleted file mode 100644
index 00114df..0000000
--- a/jsf-ri/systest/web/golden/taglib/commandButton_test.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-<html>
-<head>
-    
-    
-    <title>commandButton_test.jsp</title>
-</head>
-<body>
-    
-    
-    
-<form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandButton_test.jsp;jsessionid=b7ca922155d383885935e4ebf957" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form01" value="form01" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id231:j_id232" />
-<input id="form01:button01" type="submit" name="form01:button01" value="My Label" /><input id="form01:button02" type="reset" name="form01:button02" value="This is a String property" /><input id="form01:button03" type="submit" name="form01:button03" value="RES-BUNDLE KEY" /><input id="form01:button04" type="image" src="duke.gif" name="form01:button04" /><input id="form01:button05" type="image" src="resbundle_image.gif" name="form01:button05" /><input id="form01:button06" type="image" src= [...]
-</form>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/taglib/commandLink_multiform_test.txt b/jsf-ri/systest/web/golden/taglib/commandLink_multiform_test.txt
deleted file mode 100644
index a95c12d..0000000
--- a/jsf-ri/systest/web/golden/taglib/commandLink_multiform_test.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-
-
-
-
-<html>
-  <body>
-
-<form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandLink_multiform_test.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form01" value="form01" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id7:j_id8" />
-
-<script type="text/javascript" src="/jsf-systest/faces/javax.faces.resource/jsf.js?ln=javax.faces&stage=Development"></script>
-<a id="form01:Link1" href="#" onclick="mojarra.jsfcljs(document.getElementById('form01'),{'form01:Link1':'form01:Link1','param1':'value1','param2':'value2'},'');return false">Link1</a><a id="form01:Link2" href="#" onclick="mojarra.jsfcljs(document.getElementById('form01'),{'form01:Link2':'form01:Link2','param1':'value1','param2':'value2'},'');return false">Link2</a>
-</form>
-<form id="form02" name="form02" method="post" action="/jsf-systest/faces/taglib/commandLink_multiform_test.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form02" value="form02" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id7:j_id8" />
-<a id="form02:Link3" href="#" onclick="mojarra.jsfcljs(document.getElementById('form02'),{'form02:Link3':'form02:Link3','param3':'value3','param4':'value4'},'');return false">Link3</a><a id="form02:Link4" href="#" onclick="mojarra.jsfcljs(document.getElementById('form02'),{'form02:Link4':'form02:Link4'},'');return false">Link4</a><a href="#" onclick="mojarra.jsfcljs(document.getElementById('form02'),{'form02:j_id_id47':'form02:j_id_id47','param5':''},'');return false">Link5</a>
-</form>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/golden/taglib/commandLink_test.txt b/jsf-ri/systest/web/golden/taglib/commandLink_test.txt
deleted file mode 100644
index 759e2cc..0000000
--- a/jsf-ri/systest/web/golden/taglib/commandLink_test.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-<html>
-<head>
-
-
-    <title>commandLink_test.jsp</title>
-</head>
-<body>
-
-
-<form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandLink_test.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form01" value="form01" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id5:j_id6" />
-
-<script type="text/javascript" src="/jsf-systest/faces/javax.faces.resource/jsf.js?ln=javax.faces&stage=Development"></script>
-<a id="form01:hyperlink01" href="#" onclick="mojarra.jsfcljs(document.getElementById('form01'),{'form01:hyperlink01':'form01:hyperlink01'},'');return false">My Link</a><a id="form01:hyperlink02" href="#" onclick="mojarra.jsfcljs(document.getElementById('form01'),{'form01:hyperlink02':'form01:hyperlink02'},'');return false">This is a String property</a><a id="form01:hyperlink03" href="#" onclick="mojarra.jsfcljs(document.getElementById('form01'),{'form01:hyperlink03':'form01:hyperlink03'} [...]
-</form>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/taglib/command_button_test.txt b/jsf-ri/systest/web/golden/taglib/command_button_test.txt
deleted file mode 100644
index ed3a643..0000000
--- a/jsf-ri/systest/web/golden/taglib/command_button_test.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-<html>
-<head>
-    
-    
-    <title>command_button_test.jsp</title>
-</head>
-<body>
-    
-    
-    
-      <form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/command_button_test.jsp;jsessionid=F7DE89B48158F37AED9E48FA5D2E93F5">
-
-        <input id="form01:button01" type="submit" name="form01:button01" value="My Label" />
-        <input id="form01:button02" type="reset" name="form01:button02" value="This is a String property" />
-        <input id="form01:button03" type="submit" name="form01:button03" value="RES-BUNDLE KEY" />
-        <input id="form01:button04" type="image" src="duke.gif" name="form01:button04" />
-        <input id="form01:button05" type="image" src="resbundle_image.gif" name="form01:button05" />
-      <input type="hidden" name="form01" value="form01" /></form>
-    
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/taglib/command_link_test.txt b/jsf-ri/systest/web/golden/taglib/command_link_test.txt
deleted file mode 100644
index 722e0dc..0000000
--- a/jsf-ri/systest/web/golden/taglib/command_link_test.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-<html>
-<head>
-    
-    
-    <title>command_link_test.jsp</title>
-</head>
-<body>
-    
-    
-      <form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/command_link_test.jsp;jsessionid=66560F4ABCA57E8DA0E279515F1FC72B">
-
-        <a id="form01:hyperlink01" href="#" onclick="document.getElementById('form01')['form01:hyperlink01'].value='form01:hyperlink01'; document.getElementById('form01').submit()">My Link</a>
-        <a id="form01:hyperlink02" href="#" onclick="document.getElementById('form01')['form01:hyperlink02'].value='form01:hyperlink02'; document.getElementById('form01').submit()">This is a String property</a>
-        <a id="form01:hyperlink03" href="#" onclick="document.getElementById('form01')['form01:hyperlink03'].value='form01:hyperlink03'; document.getElementById('form01').submit()">RES-BUNDLE LINK</a>
-        <a id="form01:hyperlink04" href="#" onclick="document.getElementById('form01')['form01:hyperlink04'].value='form01:hyperlink04'; document.getElementById('form01').submit()"><img src="duke.gif" /></a>
-        <a id="form01:hyperlink05" href="#" onclick="document.getElementById('form01')['form01:hyperlink05'].value='form01:hyperlink05'; document.getElementById('form01').submit()"><img src="resbundle_image.gif" alt="" /></a>
-        
-            
-        <a id="form01:hyperlink06" href="#" onclick="document.getElementById('form01')['form01:hyperlink06'].value='form01:hyperlink06';document.getElementById('form01')['param1'].value='value1'; document.getElementById('form01').submit()">Paramter Link</a>
-      <input type="hidden" name="form01" value="form01" /><input type="hidden" name="form01:hyperlink02" /><input type="hidden" name="form01:hyperlink06" /><input type="hidden" name="form01:hyperlink04" /><input type="hidden" name="form01:hyperlink01" /><input type="hidden" name="form01:hyperlink03" /><input type="hidden" name="param1" /><input type="hidden" name="form01:hyperlink05" /></form>
-    
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/golden/verbatim_test.txt b/jsf-ri/systest/web/golden/verbatim_test.txt
deleted file mode 100644
index 4fe6e2c..0000000
--- a/jsf-ri/systest/web/golden/verbatim_test.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-  <html>
-
-    <head>
-      <title>Test of the Verbatim Tag</title>
-    </head>
-
-    <body>
-
-      <h1>Test of the Verbatim Tag</h1>
-
-      <p>
-        
-          [DEFAULT]
-          This text <b>has angle brackets</b>.
-          The angle brackets MUST NOT be escaped.
-        
-      </p>
-
-      <p>
-        
-          [FALSE]
-          This text <b>has angle brackets</b>.
-          The angle brackets MUST NOT be escaped.
-        
-      </p>
-
-      <p>
-        
-          [TRUE]
-          This text <b>has angle brackets</b>.
-          The angle brackets MUST be escaped.
-        
-      </p>
-
-     <p>  This text is rendered.
-     </p>
-
-    </body>
-
-  </html>
-
-
-
diff --git a/jsf-ri/systest/web/groovy/groovy.xhtml b/jsf-ri/systest/web/groovy/groovy.xhtml
deleted file mode 100644
index af2834c..0000000
--- a/jsf-ri/systest/web/groovy/groovy.xhtml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    </head>
-    <body>
-        <h:outputText id="bean" style="display: block" value="#{bean.message}"/>
-        <br/>
-        <ez:groovyBacked id="header" value="This is a header!"/>
-    </body>
-</html>
diff --git a/jsf-ri/systest/web/hello.jsp b/jsf-ri/systest/web/hello.jsp
deleted file mode 100644
index 5635fce..0000000
--- a/jsf-ri/systest/web/hello.jsp
+++ /dev/null
@@ -1,39 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" %><%
-  out.println("/hello.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/ignore/hello-mismatch.txt b/jsf-ri/systest/web/ignore/hello-mismatch.txt
deleted file mode 100644
index e59c53b..0000000
--- a/jsf-ri/systest/web/ignore/hello-mismatch.txt
+++ /dev/null
@@ -1 +0,0 @@
-/hello.jsp MISMATCH
diff --git a/jsf-ri/systest/web/ignore/ignoreIfContains.txt b/jsf-ri/systest/web/ignore/ignoreIfContains.txt
deleted file mode 100644
index 22ae291..0000000
--- a/jsf-ri/systest/web/ignore/ignoreIfContains.txt
+++ /dev/null
@@ -1 +0,0 @@
-javax.faces.ViewState
diff --git a/jsf-ri/systest/web/ignore/taglib/commandButton_test.txt b/jsf-ri/systest/web/ignore/taglib/commandButton_test.txt
deleted file mode 100644
index 1fe0fdb..0000000
--- a/jsf-ri/systest/web/ignore/taglib/commandButton_test.txt
+++ /dev/null
@@ -1 +0,0 @@
-      <form id="form01" method="post" action="/jsf-systest/faces/taglib/command_button_test.jsp;jsessionid=9804610C1F5A391C51671ACD3B3DCE88" enctype="application/x-www-form-urlencoded">
diff --git a/jsf-ri/systest/web/ignore/taglib/commandLink_multiform_test.txt b/jsf-ri/systest/web/ignore/taglib/commandLink_multiform_test.txt
deleted file mode 100644
index faf2bb2..0000000
--- a/jsf-ri/systest/web/ignore/taglib/commandLink_multiform_test.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-     <form id="_id0" method="post" action="/jsf-systest/faces/taglib/commandLink_multiform_test.jsp;jsessionid=74D1DE85D6D2DD3DC9C8830361B53688" enctype="application/x-www-form-urlencoded">
-
diff --git a/jsf-ri/systest/web/ignore/taglib/commandLink_test.txt b/jsf-ri/systest/web/ignore/taglib/commandLink_test.txt
deleted file mode 100644
index 15262b4..0000000
--- a/jsf-ri/systest/web/ignore/taglib/commandLink_test.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-      <form id="form01" method="post" action="/jsf-systest/faces/taglib/command_link_test.jsp;jsessionid=D3E423C65F27CA81AD8CAB5333C4D202" enctype="application/x-www-form-urlencoded">
-        <a id="form01:hyperlink05" href="#" onclick="document.forms['form01']['form01:hyperlink05'].value='form01:hyperlink05'; document.forms['form01'].submit()"><img id="form01:_id4" src="resbundle_image.gif;jsessionid=D3E423C65F27CA81AD8CAB5333C4D202" alt="" /></a>
diff --git a/jsf-ri/systest/web/ignore/taglib/command_button_test.txt b/jsf-ri/systest/web/ignore/taglib/command_button_test.txt
deleted file mode 100644
index a4b4a4a..0000000
--- a/jsf-ri/systest/web/ignore/taglib/command_button_test.txt
+++ /dev/null
@@ -1 +0,0 @@
-      <form id="form01" method="post" action="/jsf-systest/faces/taglib/command_button_test.jsp;jsessionid=F7DE89B48158F37AED9E48FA5D2E93F5">
diff --git a/jsf-ri/systest/web/ignore/taglib/command_link_test.txt b/jsf-ri/systest/web/ignore/taglib/command_link_test.txt
deleted file mode 100644
index 9f7b668..0000000
--- a/jsf-ri/systest/web/ignore/taglib/command_link_test.txt
+++ /dev/null
@@ -1 +0,0 @@
-      <form id="form01" method="post" action="/jsf-systest/faces/taglib/command_link_test.jsp;jsessionid=66560F4ABCA57E8DA0E279515F1FC72B">
diff --git a/jsf-ri/systest/web/immediate01.jsp b/jsf-ri/systest/web/immediate01.jsp
deleted file mode 100644
index b5de085..0000000
--- a/jsf-ri/systest/web/immediate01.jsp
+++ /dev/null
@@ -1,74 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>immediate01</title>
-</head>
-<body>
-
-<h:form>
-
-<p>PENDING: write an HTMLUNIT testcase for this.</p>
-
-Output: <h:outputText value="#{immediateBean.stringProperty}"/> Input: 
-<h:inputText value="#{immediateBean.stringProperty}"/> <br />
-<h:commandLink action="null">Submit</h:commandLink> <p />
-<h:commandLink action="null" immediate="true">Cancel</h:commandLink> <p />
-
-<h:commandButton value="Submit" action="null" /><p />
-<h:commandButton value="Cancel" action="null" immediate="true" /><p />
-
-<hr />
-
-<h:commandButton value="Clear Bean Property">
-  <f:setPropertyActionListener target="#{immediateBean.stringProperty}" value="" />
-</h:commandButton>
-
-</h:form>
-
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/implicitnav/implicitNavEmptyString.xhtml b/jsf-ri/systest/web/implicitnav/implicitNavEmptyString.xhtml
deleted file mode 100644
index 05eb983..0000000
--- a/jsf-ri/systest/web/implicitnav/implicitNavEmptyString.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
-    <title>Implicit Navigation with empty string action</title>
-</h:head>
-<h:body>
-
-  <h:form prependId="false">
-      <p>Implicit Navigation with empty string action</p>
-
-      <p><h:commandButton id="button" action="#{test1.emptyStringAction}"
-                          value="stay here" /></p>
-
-
-  </h:form>
-    
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/implicitnav/implicitNavRedirect.xhtml b/jsf-ri/systest/web/implicitnav/implicitNavRedirect.xhtml
deleted file mode 100644
index ef796a0..0000000
--- a/jsf-ri/systest/web/implicitnav/implicitNavRedirect.xhtml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-</h:head>
-<h:body>
-  <h:form prependId="false">
-      <p>Enter first name: <h:inputText id="input" value="#{test1.stringProperty}" /></p>
-    <p><h:button id="httpGet" value="HTTP GET" outcome="implicitNavRedirect02" /></p>
-    <p><h:commandButton id="httpPostRedirect" value="HTTP POST with Redirect" action="implicitNavRedirect02?faces-redirect=true" /></p>
-    <p><h:commandButton id="httpPostInvalidQueryString" value="HTTP POST with invalid query string" action="implicitNavRedirect02?" /></p>
-    <p><h:commandButton id="httpPost" value="HTTP POST" action="implicitNavRedirect02" /></p>
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/implicitnav/implicitNavRedirect02.xhtml b/jsf-ri/systest/web/implicitnav/implicitNavRedirect02.xhtml
deleted file mode 100644
index 5414bb4..0000000
--- a/jsf-ri/systest/web/implicitnav/implicitNavRedirect02.xhtml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
-  <title>Page 02</title>
-</h:head>
-<h:body>
-    <p>Page 02</p>
-    <p>Value of First name: <#{test1.stringProperty}>.</p>
-    
-    <p>The value will be empty if either of the "HTTP POST with Redirect" or the
-    "HTTP GET" buttons were pressed.  If the "HTTP POST" button was pressed,
-    the value will not be empty.</p>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/implicitnav/page01.xhtml b/jsf-ri/systest/web/implicitnav/page01.xhtml
deleted file mode 100644
index 9cafbcf..0000000
--- a/jsf-ri/systest/web/implicitnav/page01.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->      
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
-    <title>Implicit Navigation</title>
-</h:head>
-<h:body>
-
-  <h:form prependId="false">
-
-    <p>Action URL to this page: <h:outputText 
-                         value="#{implicitNavigationBean.currentActionUrl}" /></p>
-
-    <p>Resource URL to this page: <h:outputText 
-                         value="#{implicitNavigationBean.currentResourceUrl}" /></p>
-
-    <p>[page01] <h:commandButton id="page02" value="page02" action="/implicitnav/page02" /></p>
-
-  </h:form>
-    
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/implicitnav/page02.xhtml b/jsf-ri/systest/web/implicitnav/page02.xhtml
deleted file mode 100644
index 11ac4bb..0000000
--- a/jsf-ri/systest/web/implicitnav/page02.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
-    <title>Implicit Navigation</title>
-</h:head>
-<h:body>
-
-  <h:form prependId="false">
-
-    <p><h:commandButton id="page01" value="page01" action="page01" /> [page02] 
-       <h:commandButton id="page03" value="page03" action="page03" /></p>
-
-  </h:form>
-    
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/implicitnav/page03.xhtml b/jsf-ri/systest/web/implicitnav/page03.xhtml
deleted file mode 100644
index 6bf45e8..0000000
--- a/jsf-ri/systest/web/implicitnav/page03.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
-    <title>Implicit Navigation</title>
-</h:head>
-<h:body>
-
-  <h:form prependId="false">
-
-    <p><h:commandButton id="page02" value="page02" action="page02" /> [page03]
-
-    <h:commandButton id="page04" value="page04" action="page04?faces-redirect=true" /></p>
-
-  </h:form>
-    
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/implicitnav/page04.xhtml b/jsf-ri/systest/web/implicitnav/page04.xhtml
deleted file mode 100644
index c27ddb9..0000000
--- a/jsf-ri/systest/web/implicitnav/page04.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
-    <title>Implicit Navigation</title>
-</h:head>
-<h:body>
-
-  <h:form prependId="false">
-
-<p>This is the last page.</p>
-
-
-  </h:form>
-    
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/include-import-interweaving.jsp b/jsf-ri/systest/web/include-import-interweaving.jsp
deleted file mode 100644
index 5879916..0000000
--- a/jsf-ri/systest/web/include-import-interweaving.jsp
+++ /dev/null
@@ -1,134 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-    <head> <title>Hello</title> </head>
-    <%@ page contentType="application/xhtml+xml" autoFlush="true"%>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>    
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <body bgcolor="white">
-    <f:view>
-    <h:form id="form">
-    
-        <p>Outer Template Text followed by 
-        <h:outputText id="outerComponent" value="outer component" /></p>
-	
-<table border="1">	
-
-<tr><td>
-<ul><font color="blue">        
-
- <f:subview id="subview01">
-	    <p>Subview on the outside only with jsp:include:</p>
-            <jsp:include page="TCCI_subview01.jsp" />
- </f:subview>
-        
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="green">        
-
-	    <p>Subview on the inside only with jsp:include:</p>
-            <jsp:include page="TCCI_subview02.jsp" />
-        
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="purple">        
-
-	    <p>Subview on the outside and inside with jsp:include:</p>
-<f:subview id="subview03">
-	    <p>Template Text before the include</p>
-            <jsp:include page="TCCI_subview03.jsp" />
-</f:subview>
-        
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="red">        
-        <f:subview id="outerSubview3">
-	    <p>Subview on the outside only with c:import:</p>
-            <c:import url="TCCI_subview04.jsp" />
-        </f:subview>
-</font></ul>        
-
-	    
-</td></tr>
-
-
-<tr><td>
-<ul><font color="red">        
-	    <p>Subview on the inside only with c:import:</p>
-            <c:import url="TCCI_subview05.jsp" />
-</font></ul>        
-
-	    
-</td></tr>
-
-<tr><td>
-<ul><font color="orange">        
-	    <p>Subview on the outside and inside with c:import:</p>
-<f:subview id="subview05">
-	    <p>Template Text on the outside</p>
-            <c:import url="TCCI_subview06.jsp" />
-</f:subview>
-</font></ul>        
-
-	    
-</td></tr>
-
-
-</table>
-	 
-
-    </h:form>
-    </f:view>
-    </body>
-</html>  
diff --git a/jsf-ri/systest/web/include12.jsp b/jsf-ri/systest/web/include12.jsp
deleted file mode 100644
index d82af46..0000000
--- a/jsf-ri/systest/web/include12.jsp
+++ /dev/null
@@ -1,44 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<c:if test="true">
-    this should be before the button
-    <h:commandButton id="button" value="commandButton 1"/>
-</c:if>
-
diff --git a/jsf-ri/systest/web/index.html b/jsf-ri/systest/web/index.html
deleted file mode 100644
index 8da84cf..0000000
--- a/jsf-ri/systest/web/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-      
-WELCOMEPAGE
diff --git a/jsf-ri/systest/web/input01.jsp b/jsf-ri/systest/web/input01.jsp
deleted file mode 100644
index 77cb264..0000000
--- a/jsf-ri/systest/web/input01.jsp
+++ /dev/null
@@ -1,64 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>input01</title>
-</head>
-<body>
-
-<h:form id="form">
-
-  <table border="1">
-
-    <tr><td>Message: <h:message for="form:input" /></td></tr>
-
-    <tr><td>Clear this value and press reload: <h:inputText id="input" value="#{test3.intProperty}" /></td></tr>
-
-  </table>
-
-  <p><h:commandButton value="reload" /></p>
-
-</h:form>
-
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/interweaving01.jsp b/jsf-ri/systest/web/interweaving01.jsp
deleted file mode 100644
index 6d487bd..0000000
--- a/jsf-ri/systest/web/interweaving01.jsp
+++ /dev/null
@@ -1,63 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>interweaving01</title>
-</head>
-<body>
-<h:outputText value="Begin"/>
-test
-<h:outputText value="jsp include without verbatim"/>
-
-<jsp:include page="test01.jsp"/>
-
-<h:outputText value="End"/>
-test
-<h:outputText value="jsp include without verbatim"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/interweaving02.jsp b/jsf-ri/systest/web/interweaving02.jsp
deleted file mode 100644
index 241ba34..0000000
--- a/jsf-ri/systest/web/interweaving02.jsp
+++ /dev/null
@@ -1,65 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>interweaving01</title>
-</head>
-<body>
-<h:outputText value="Begin"/>
-test
-<h:outputText value="jstl import without verbatim"/>
-
-<c:import url="test01.jsp"/>
-
-<h:outputText value="End"/>
-test
-<h:outputText value="jstl import without verbatim"/>
-</body>
-</html>
-</f:view>
-
-
diff --git a/jsf-ri/systest/web/interweaving03.jsp b/jsf-ri/systest/web/interweaving03.jsp
deleted file mode 100644
index 1344166..0000000
--- a/jsf-ri/systest/web/interweaving03.jsp
+++ /dev/null
@@ -1,54 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-    <h:form>
-      <h:panelGrid columns="1">
-	Row 1
-	<h:outputText value="Row 2"/>
-	Row 3
-      </h:panelGrid>
-    </h:form>
-</f:view>
diff --git a/jsf-ri/systest/web/interweaving04.jsp b/jsf-ri/systest/web/interweaving04.jsp
deleted file mode 100644
index 8804c11..0000000
--- a/jsf-ri/systest/web/interweaving04.jsp
+++ /dev/null
@@ -1,67 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%
-    pageContext.setAttribute("cond", Boolean.TRUE,
-                             PageContext.REQUEST_SCOPE);
- 
-%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<f:view>
-<html>
-<head>
-<title>jstl-if-without-id</title>
-</head>
-<body>
-<h:outputText value="[First]"/>
-<c:if test="${requestScope.cond}">
-  <h:outputText value="[Second]"/>
-</c:if>
-<h:outputText value="[Third]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/interweaving05.jsp b/jsf-ri/systest/web/interweaving05.jsp
deleted file mode 100644
index 84132b5..0000000
--- a/jsf-ri/systest/web/interweaving05.jsp
+++ /dev/null
@@ -1,77 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%
-    pageContext.setAttribute("choose", "a",
-                             PageContext.REQUEST_SCOPE);
- 
-%>
-
-<f:view>
-<html>
-<head>
-<title>jstl-choose test without "id"</title>
-</head>
-<body>
-<h:outputText value="Begin jstl-choose test without id"/>
-<c:choose>
-  <c:when test="${requestScope.choose == 'a'}">
-    <h:outputText  value="[FIRST]"/>
-    <h:outputText  value="[SECOND]"/>
-  </c:when>
-  <c:when test="${requestScope.choose == 'b'}">
-    <h:outputText value="[THIRD]"/>
-    <h:outputText  value="[FOURTH]"/>
-  </c:when>
-  <c:otherwise>
-    <h:outputText value="[FIFTH]"/>
-    <h:outputText value="[SIXTH]"/>
-  </c:otherwise>
-</c:choose>
-<h:outputText value="End jstl-choose test without id"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/interweaving06.jsp b/jsf-ri/systest/web/interweaving06.jsp
deleted file mode 100644
index 205b2ab..0000000
--- a/jsf-ri/systest/web/interweaving06.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>interweaving06</title>
-</head>
-<body>
-<p><h:outputText value="Begin test jsp:include without subview and iterator tag in included page"/></p>
-<br />
-<p><jsp:include page="subviewIterator02.jsp"/></p>
-
-<p><h:outputText value="Text from interweaving06.jsp"/></p>
-</p><h:outputText value="End test jsp:include without subview and iterator tag in included page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/interweaving07.jsp b/jsf-ri/systest/web/interweaving07.jsp
deleted file mode 100644
index 6c7b3ca..0000000
--- a/jsf-ri/systest/web/interweaving07.jsp
+++ /dev/null
@@ -1,61 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>interweaving07</title>
-</head>
-<body>
-<p><h:outputText value="Begin test <c:import> with iterator tag in imported page"/></p>
-<br />
-<p><c:import url="subviewIterator02.jsp"/></p>
-
-<p><h:outputText value="Text from interweaving07.jsp"/></p>
-
-<p><h:outputText value="End test <c:import> with iterator tag in imported page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/interweaving08.jsp b/jsf-ri/systest/web/interweaving08.jsp
deleted file mode 100644
index 8eb3bda..0000000
--- a/jsf-ri/systest/web/interweaving08.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page pageEncoding="UTF-8"%>
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-
-<f:view>
-    <html>
-        <body>
-            <h:form id="form">
-                <h:dataTable value="#{interweaving08.items}" var="item"
-binding="#{interweaving08.table}">
-                    <h:column>
-                        <%-- 
-                           Validates CASE 1 in UIComponentClassicTagBase when
-                           using a component binding with a lifetime longer
-                           than request
-                        --%>
-                        ciao
-                        <h:outputText value="#{item}"/>
-                    </h:column>
-                </h:dataTable>                
-            </h:form>
-        </body>
-    </html>
-</f:view>
-
diff --git a/jsf-ri/systest/web/interweaving09.jsp b/jsf-ri/systest/web/interweaving09.jsp
deleted file mode 100644
index eebaa69..0000000
--- a/jsf-ri/systest/web/interweaving09.jsp
+++ /dev/null
@@ -1,63 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page pageEncoding="UTF-8"%>
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-
-<f:view>
-    <html>
-        <body>
-            <h:form id="form">
-                <h:dataTable value="#{interweaving09.items}" var="item"
-binding="#{interweaving09.table}">
-                    <h:column>
-                        <%-- 
-                           Validates CASE 2 in UIComponentClassicTagBase when
-                           using a component binding with a lifetime longer
-                           than request
-                        --%>
-                        <h:outputText value="#{item}"/>                     
-                        ciao
-                        <h:outputText value="#{item}"/>
-                    </h:column>
-                </h:dataTable>                
-            </h:form>
-        </body>
-    </html>
-</f:view>
-
diff --git a/jsf-ri/systest/web/interweaving10.jsp b/jsf-ri/systest/web/interweaving10.jsp
deleted file mode 100644
index d95e7bb..0000000
--- a/jsf-ri/systest/web/interweaving10.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@page pageEncoding="UTF-8"%>
-<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
-<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
-
-
-<f:view>
-    <html>
-        <body>
-            <h:form id="form">
-                <h:dataTable value="#{interweaving10.items}" var="item"
-binding="#{interweaving10.table}">
-                    <h:column>
-                        <%-- 
-                           Validates CASE 4 in UIComponentClassicTagBase when
-                           using a component binding with a lifetime longer
-                           than request
-                        --%>
-                         <h:outputText value="#{item}"/>
-                        ciao                       
-                    </h:column>
-                </h:dataTable>               
-            </h:form>
-        </body>
-    </html>
-</f:view>
-
diff --git a/jsf-ri/systest/web/interweaving11.jsp b/jsf-ri/systest/web/interweaving11.jsp
deleted file mode 100644
index d8b2ff0..0000000
--- a/jsf-ri/systest/web/interweaving11.jsp
+++ /dev/null
@@ -1,67 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%
-    java.util.ArrayList list = new java.util.ArrayList();
-    list.add("one");
-    list.add("two");
-    list.add("three");
-    pageContext.setAttribute("list", list, PageContext.REQUEST_SCOPE);
-%>
-<html>
-  <head>
-      <title>interweaving11</title>   
-  </head>
-  <body>
-    <f:view>
-        <h:form>
-            <c:forEach items="#{list}" var="item">
-                <h:commandLink>
-                   <f:param name="param" value="value"/>
-                   <h:outputText value="#{item}"/>
-                </h:commandLink>
-                </br>
-            </c:forEach>
-        </h:form>
-    </f:view>
-  </body>
-</html>
-
diff --git a/jsf-ri/systest/web/interweaving12.jsp b/jsf-ri/systest/web/interweaving12.jsp
deleted file mode 100644
index 99b6745..0000000
--- a/jsf-ri/systest/web/interweaving12.jsp
+++ /dev/null
@@ -1,50 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<html>
-<head><title>interweaving13</title></head>
-<body>
-<f:view>
-  <h:form>
-     <jsp:include page="include12.jsp"/>
-  </h:form>
-</f:view>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/jsf2jsp/ajax-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/ajax-gives-500.jspx
deleted file mode 100644
index 91d7a08..0000000
--- a/jsf-ri/systest/web/jsf2jsp/ajax-gives-500.jspx
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:form prependId="false">
-
-<h:commandButton value="reload">
-  <f:ajax />
-</h:commandButton>
-
-</h:form>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/body-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/body-gives-500.jspx
deleted file mode 100644
index 1f495cb..0000000
--- a/jsf-ri/systest/web/jsf2jsp/body-gives-500.jspx
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-                <h:body>
-
-                    <p>Test Resource Relocation</p>
-
-                    <ul>
-
-                        <li>output*</li>
-                        <li>@ResourceDependency</li>
-
-
-                    </ul>
-
-                </h:body>
-
-
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/button-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/button-gives-500.jspx
deleted file mode 100644
index 62cdda7..0000000
--- a/jsf-ri/systest/web/jsf2jsp/button-gives-500.jspx
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:button outcome="next" />
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/commandButton-parameter-children-gives-hidden-fields.jspx b/jsf-ri/systest/web/jsf2jsp/commandButton-parameter-children-gives-hidden-fields.jspx
deleted file mode 100644
index ba1145d..0000000
--- a/jsf-ri/systest/web/jsf2jsp/commandButton-parameter-children-gives-hidden-fields.jspx
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:form prependId="false">
-
-<h:commandButton id="reload" value="reload">
-
-  <f:param name="name01" value="value01" />
-  <f:param name="name02" value="value02" />
-
-</h:commandButton>
-
-<p>name01=<h:outputText value="#{param['name01']}" /></p>
-<p>name02=<h:outputText value="#{param['name02']}" /></p>
-
-</h:form>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/event-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/event-gives-500.jspx
deleted file mode 100644
index 6a974c4..0000000
--- a/jsf-ri/systest/web/jsf2jsp/event-gives-500.jspx
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:form prependId="false">
-
-<h:commandButton value="reload">
-<f:event name="preRenderComponent" 
-         listener="#{dynamicStateBean.beforeRenderDeletion}" />
-</h:commandButton>
-
-
-
-</h:form>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/head-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/head-gives-500.jspx
deleted file mode 100644
index b11eade..0000000
--- a/jsf-ri/systest/web/jsf2jsp/head-gives-500.jspx
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-                <h:head>
-                    <h:outputStylesheet name="case1.css" />
-
-                </h:head>
-                <h:body>
-
-                    <p>Test Resource Relocation</p>
-
-                    <ul>
-
-                        <li>output*</li>
-                        <li>@ResourceDependency</li>
-
-
-                    </ul>
-
-                </h:body>
-
-
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/link-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/link-gives-500.jspx
deleted file mode 100644
index 62cdda7..0000000
--- a/jsf-ri/systest/web/jsf2jsp/link-gives-500.jspx
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:button outcome="next" />
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/metadata-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/metadata-gives-500.jspx
deleted file mode 100644
index 502da79..0000000
--- a/jsf-ri/systest/web/jsf2jsp/metadata-gives-500.jspx
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-<f:metadata>
-  <f:viewParam name="id" />
-</f:metadata>
-
-<h:form prependId="false">
-
-<h:commandButton value="reload">
-</h:commandButton>
-
-
-
-</h:form>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/outputScript-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/outputScript-gives-500.jspx
deleted file mode 100644
index f36c0fe..0000000
--- a/jsf-ri/systest/web/jsf2jsp/outputScript-gives-500.jspx
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:outputScript name="case1.js" />
-
-                    <p>Test Resource Relocation</p>
-
-                    <ul>
-
-                        <li>output*</li>
-                        <li>@ResourceDependency</li>
-
-
-                    </ul>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/outputStylesheet-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/outputStylesheet-gives-500.jspx
deleted file mode 100644
index 51607b4..0000000
--- a/jsf-ri/systest/web/jsf2jsp/outputStylesheet-gives-500.jspx
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:outputStylesheet name="case1.css" />
-
-                    <p>Test Resource Relocation</p>
-
-                    <ul>
-
-                        <li>output*</li>
-                        <li>@ResourceDependency</li>
-
-
-                    </ul>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/resource-ELResolver-gives-500.jspx b/jsf-ri/systest/web/jsf2jsp/resource-ELResolver-gives-500.jspx
deleted file mode 100644
index 403b11f..0000000
--- a/jsf-ri/systest/web/jsf2jsp/resource-ELResolver-gives-500.jspx
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<p>h:graphicImage tag pointing to resource via ELResolver:
-<h:graphicImage value="#{resource['vLibrary:duke-nv.gif']" />.</p>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/resources.jspx b/jsf-ri/systest/web/jsf2jsp/resources.jspx
deleted file mode 100644
index 117919b..0000000
--- a/jsf-ri/systest/web/jsf2jsp/resources.jspx
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<p>h:graphicImage tag pointing to resource via attributes: 
-<h:graphicImage name="duke.gif" library="vLibrary" />.</p>
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsf2jsp/selectManyJsf2Features.jspx b/jsf-ri/systest/web/jsf2jsp/selectManyJsf2Features.jspx
deleted file mode 100644
index 2f56aa5..0000000
--- a/jsf-ri/systest/web/jsf2jsp/selectManyJsf2Features.jspx
+++ /dev/null
@@ -1,240 +0,0 @@
-<?xml version="1.0" encoding="MacRoman"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
-          xmlns:h="http://java.sun.com/jsf/html"
-          xmlns:f="http://java.sun.com/jsf/core" version="2.0">
-
-    <jsp:directive.page contentType="text/html" pageEncoding="MacRoman"/>
-
-    <!-- any content can be specified here, e.g.: -->
-    <jsp:element name="text">
-        <jsp:attribute name="lang">EN</jsp:attribute>
-        <jsp:body>
-            <f:view>
-
-<h:form prependId="false">
-
-
-    <p>
-        Array Values
-    </p>
-    <h:selectManyListbox id="array" value="#{select05.arrayValues}">
-        <f:selectItems value="#{select05.hobbitCollection}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null List Values
-    </p>
-    <h:selectManyListbox id="list" value="#{select05.listValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Set Values
-    </p>
-    <h:selectManyListbox id="set" value="#{select05.setValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Sorted Set Values
-    </p>
-    <h:selectManyListbox id="sortedset" value="#{select05.sortedSetValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Collection Values
-    </p>
-    <h:selectManyListbox id="collection" value="#{select05.collectionValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- ///////////////////////////////////////////////////////////// -->
-
-    <p>
-        Initially Non-Null List Values/Collection non-select item
-    </p>
-    <h:selectManyListbox id="ilist" value="#{select05.initialListValues}">
-        <f:selectItems value="#{select05.hobbitCollection}"
-                       var="hobbit"
-                       itemLabel="#{hobbit.name}"
-                       itemDescription="#{hobbit.bio}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null List Values/DataModel non-select item
-    </p>
-    <h:selectManyListbox id="ilist2" value="#{select05.initialListValues}">
-        <f:selectItems value="#{select05.hobbitDataModel}"
-                       var="hobbit"
-                       itemLabel="#{hobbit.name}"
-                       itemDescription="#{hobbit.bio}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null Set Values
-    </p>
-    <h:selectManyListbox id="iset" value="#{select05.initialSetValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null Sorted Set Values
-    </p>
-    <h:selectManyListbox id="isortedset" value="#{select05.initialSortedSetValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null Collection Values
-    </p>
-    <h:selectManyListbox id="icollection" value="#{select05.initialCollectionValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- ///////////////////////////////////////////////////////////// -->
-
-    <p>
-        Initially Null Collection Values using f:attribute hint (java.lang.String)
-    </p>
-    <h:selectManyListbox id="hintString"
-                         value="#{select05.collectionFromHintValues}"
-                         collectionType="java.util.LinkedList">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Collection Values using f:attribute hint (java.lang.String)
-    </p>
-    <h:selectManyListbox id="hintClass" value="#{select05.collectionFromHintValues2}">
-        <f:attribute name="collectionType" value="#{select05.collectionType}"/>
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- ///////////////////////////////////////////////////////////// -->
-
-    <p>
-        Initially Null Object type field
-    </p>
-    <h:selectManyListbox id="object" value="#{select05.someValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        int values
-    </p>
-     <h:selectManyListbox id="intList1" value="#{select05.selectedIntValues}">
-        <f:selectItems value="#{select05.intOptions}"
-                       var="x"
-                       itemLabel="#{x}"
-                       itemDescription="#{x}"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        Integer values
-    </p>
-     <h:selectManyListbox id="integerList1" value="#{select05.selectedIntegerValues}">
-        <f:selectItems value="#{select05.integerOptions}"
-                       var="n"
-                       itemLabel="#{n}"
-                       itemDescription="#{n}"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        Item Label Escape (true)
-    </p>
-    <h:selectManyListbox id="escape01" value="#{select05.initialCollectionValues}">
-       <f:selectItems value="#{select05.hobbitCollection}"
-                      var="n"
-                      itemValue="#{n}"
-                      itemLabel="#{n.bio}"
-                      itemLabelEscaped="true"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        Item Label Escape (false)
-    </p>
-    <h:selectManyListbox id="escape02" value="#{select05.initialCollectionValues}">
-       <f:selectItems value="#{select05.hobbitCollection}"
-                      var="n"
-                      itemValue="#{n}"
-                      itemLabel="#{n.bio}"
-                      itemLabelEscaped="false"/>
-    </h:selectManyListbox>
-
-     <!-- ////////////////////////////////////////////////////////////// -->
-
-
-    <p>
-        Non-null select item with empty f:selectItems Collection
-    </p>
-    <h:selectManyListbox id="emptyItems">
-        <f:selectItem itemValue="Choose" itemLabel="Choose" />
-        <f:selectItems value="#{select05.emptyCollection}"
-                       var="n"
-                       itemValue="#{n}" />
-    </h:selectManyListbox>
-
-
-    <!-- ////////////////////////////////////////////////////////////// -->
-
-
-    <p>
-    <h:commandButton id="command" value="Submit" />
-    </p>
-
-
-</h:form>
-
-
-            </f:view>
-
-
-
-        </jsp:body>
-    </jsp:element>
-
-</jsp:root>
diff --git a/jsf-ri/systest/web/jsp/addComponent.jsp b/jsf-ri/systest/web/jsp/addComponent.jsp
deleted file mode 100644
index 90d0176..0000000
--- a/jsf-ri/systest/web/jsp/addComponent.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Programmatic Component Addition</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Programmatic Component Addition</h1>
-
-<f:view>
-
-  <h:form id="form">
-
-    <h:commandButton value="submit" id="button"
-                     actionListener="#{test3.addComponentToTree}"/>
-
-    <h:panelGroup id="addHere" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/commandLinkOnClickFalse.jsp b/jsf-ri/systest/web/jsp/commandLinkOnClickFalse.jsp
deleted file mode 100644
index 75fa32c..0000000
--- a/jsf-ri/systest/web/jsp/commandLinkOnClickFalse.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<HTML>
-<body onLoad="initValue('form')"> 
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <jsp:useBean id="TestBean" class="com.sun.faces.systest.model.TestBean" scope="session" />
-       <f:view >  
-       <script type="text/javascript" language="Javascript">
-       <!--
-       function setValue(curFormName) {
-           var curForm = document.forms[curFormName];
-           curForm.elements['form:init'].value = "Hello";
-       }
-       //-->
-       </script>
-       <script type="text/javascript" language="Javascript">
-       <!--
-       function initValue(curFormName) {
-           var curForm = document.forms[curFormName];
-           curForm.elements['form:_idcl'].value = "Goodbye";
-       }
-       //-->
-       </script>
-               
-          <h:form id="form">
-              <table>
-              <tr>
-                 <td><h:outputText value="Value:" /></td> 
-                 <td><h:inputText id="init" value="initial value" /></td>
-              </tr>
-              </table>
-              <h:commandLink id="submit" onclick="setValue('form'); return false;" value="submit"/>
-          </h:form>
-       </f:view>
-</body>
-</HTML>
diff --git a/jsf-ri/systest/web/jsp/commandLinkOnClickTrue.jsp b/jsf-ri/systest/web/jsp/commandLinkOnClickTrue.jsp
deleted file mode 100644
index acced2d..0000000
--- a/jsf-ri/systest/web/jsp/commandLinkOnClickTrue.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<HTML>
-<body onLoad="initValue('form')"> 
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <jsp:useBean id="TestBean" class="com.sun.faces.systest.model.TestBean" scope="session" />
-       <f:view >  
-       <script type="text/javascript" language="Javascript">
-       <!--
-       function setValue(curFormName) {
-           var curForm = document.forms[curFormName];
-           curForm.elements['form:init'].value = "Hello";
-       }
-       //-->
-       </script>
-       <script type="text/javascript" language="Javascript">
-       <!--
-       function initValue(curFormName) {
-           var curForm = document.forms[curFormName];
-           curForm.elements['form:_idcl'].value = "Goodbye";
-       }
-       //-->
-       </script>
-               
-          <h:form id="form">
-              <table>
-              <tr>
-                 <td><h:outputText value="Value:" /></td> 
-                 <td><h:inputText id="init" value="initial value" /></td>
-              </tr>
-              </table>
-              <h:commandLink id="submit" onclick="setValue('form')" value="submit"/>
-          </h:form>
-       </f:view>
-</body>
-</HTML>
diff --git a/jsf-ri/systest/web/jsp/form-input-00.jsp b/jsf-ri/systest/web/jsp/form-input-00.jsp
deleted file mode 100644
index 4a9bb4e..0000000
--- a/jsf-ri/systest/web/jsp/form-input-00.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>form-input-00</title>
-</head>
-<body>
-Dummy page to force resetting the component tree.
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/form-input-01.jsp b/jsf-ri/systest/web/jsp/form-input-01.jsp
deleted file mode 100644
index 11e6564..0000000
--- a/jsf-ri/systest/web/jsp/form-input-01.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>form-input-01</title>
-</head>
-<body>
-<h:outputText id="success" value="success"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/form-input-02.jsp b/jsf-ri/systest/web/jsp/form-input-02.jsp
deleted file mode 100644
index e87b241..0000000
--- a/jsf-ri/systest/web/jsp/form-input-02.jsp
+++ /dev/null
@@ -1,99 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>form-input-02</title>
-</head>
-<body>
-
-<h:form id="formInput02_form">
-
-  <h:panelGrid columns="3">
-
-    <h:outputText value="booleanProperty"/>
-    <h:inputText id="booleanProperty" value="#{formInput02.booleanProperty}"/>
-    <h:message for="booleanProperty"/>
-
-    <h:outputText value="byteProperty"/>
-    <h:inputText id="byteProperty" value="#{formInput02.byteProperty}"/>
-    <h:message for="byteProperty"/>
-
-    <h:outputText value="doubleProperty"/>
-    <h:inputText id="doubleProperty" value="#{formInput02.doubleProperty}"/>
-    <h:message for="doubleProperty"/>
-
-    <h:outputText value="floatProperty"/>
-    <h:inputText id="floatProperty" value="#{formInput02.floatProperty}"/>
-    <h:message for="floatProperty"/>
-
-    <h:outputText value="intProperty"/>
-    <h:inputText id="intProperty" value="#{formInput02.intProperty}"/>
-    <h:message for="intProperty"/>
-
-    <h:outputText value="longProperty"/>
-    <h:inputText id="longProperty" value="#{formInput02.longProperty}"/>
-    <h:message for="longProperty"/>
-
-    <h:outputText value="shortProperty"/>
-    <h:inputText id="shortProperty" value="#{formInput02.shortProperty}"/>
-    <h:message for="shortProperty"/>
-
-    <h:outputText value="stringProperty"/>
-    <h:inputText id="stringProperty" value="#{formInput02.stringProperty}"/>
-    <h:message for="stringProperty"/>
-
-    <h:commandButton id="submit" type="submit" value="Submit"/>
-    <h:commandButton id="reset"  type="reset"  value="Reset"/>
-    <h:outputText value=""/>
-
-  </h:panelGrid>
-
-</h:form>
-
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/formEl.jsp b/jsf-ri/systest/web/jsp/formEl.jsp
deleted file mode 100644
index 8ac683a..0000000
--- a/jsf-ri/systest/web/jsp/formEl.jsp
+++ /dev/null
@@ -1,75 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test form enctype EL feature</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test form enctype EL feature</h1>
-
-<h2>Literal ids with prependId literal</h2>
-
-<f:view>
-
-    <h:outputText value="#{true ? 'multipart/form-data' :
-        'application/x-www-form-urlencoded'}" />
-
-    <h:form id="multiPart"
-        enctype="#{true ? 'multipart/form-data' : 'application/x-www-form-urlencoded'}">
-    </h:form>
-
-    <h:form id="urlEncoded"
-        enctype="#{false ? 'multipart/form-data' : 'application/x-www-form-urlencoded'}">
-    </h:form>
-
-    <h:form id="stringLiteral" enctype="hi"></h:form>
-
-    <h:form id="elLiteral" enctype="#{'multipart/form-data'}"></h:form>
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/jsp-dynamic-00.jsp b/jsf-ri/systest/web/jsp/jsp-dynamic-00.jsp
deleted file mode 100644
index 4366ce2..0000000
--- a/jsf-ri/systest/web/jsp/jsp-dynamic-00.jsp
+++ /dev/null
@@ -1,57 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jsp-dynamic-00</title>
-</head>
-<body>
-Dummy page to force resetting the component tree.
-<h:outputText id="dummy" value="DUMMY"/>
-<h:outputText value="#{ResetUniqueRequestIdBean.reset}"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jsp-dynamic-01.jsp b/jsf-ri/systest/web/jsp/jsp-dynamic-01.jsp
deleted file mode 100644
index 1c1bd0f..0000000
--- a/jsf-ri/systest/web/jsp/jsp-dynamic-01.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="s" uri="/WEB-INF/taglib.tld" %>
-
-<f:view>
-<html>
-<head>
-<title>jsp-dynamic-01</title>
-</head>
-<body>
-<h:form>
-<h:outputText value="[A]"/>
-<s:dynamic id="dynamic"/>
-<h:outputText value="[Z]"/>
-</h:form>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jsp-include-00.jsp b/jsf-ri/systest/web/jsp/jsp-include-00.jsp
deleted file mode 100644
index 5088750..0000000
--- a/jsf-ri/systest/web/jsp/jsp-include-00.jsp
+++ /dev/null
@@ -1,57 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jsp-include-00</title>
-</head>
-<body>
-Dummy page to force resetting the component tree.
-<h:outputText id="dummy" value="DUMMY"/>
-<h:outputText value="#{ResetUniqueRequestIdBean.reset}"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jsp-include-01.jsp b/jsf-ri/systest/web/jsp/jsp-include-01.jsp
deleted file mode 100644
index 105019c..0000000
--- a/jsf-ri/systest/web/jsp/jsp-include-01.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jsp-include-01</title>
-</head>
-<body>
-<h:outputText value="[A]"/>
-<jsp:include page="jstl-import-01a.jsp"/>
-<h:outputText value="[C]"/>
-<jsp:include page="jstl-import-01b.jsp"/>
-<h:outputText value="[E]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jsp-include-02.jsp b/jsf-ri/systest/web/jsp/jsp-include-02.jsp
deleted file mode 100644
index de05d9b..0000000
--- a/jsf-ri/systest/web/jsp/jsp-include-02.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jsp-include-02</title>
-</head>
-<body>
-<h:outputText value="[A]"/>
-<jsp:include page="jstl-import-02a.jsp"/>
-<h:outputText value="[C]"/>
-<jsp:include page="jstl-import-02b.jsp"/>
-<h:outputText value="[E]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jsp-include-03.jsp b/jsf-ri/systest/web/jsp/jsp-include-03.jsp
deleted file mode 100644
index 9eb754c..0000000
--- a/jsf-ri/systest/web/jsp/jsp-include-03.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jsp-include-03</title>
-</head>
-<body>
-<h:outputText value="[1]"/>
-<c:choose>
-  <c:when test="${param.choose == 'a'}">
-    <jsp:include page="jstl-import-03a.jsp"/>
-  </c:when>
-  <c:when test="${param.choose == 'b'}">
-    <jsp:include page="jstl-import-03b.jsp"/>
-  </c:when>
-  <c:otherwise>
-    <jsp:include page="jstl-import-03c.jsp"/>
-  </c:otherwise>
-</c:choose>
-<h:outputText value="[3]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jsp-include-04.jsp b/jsf-ri/systest/web/jsp/jsp-include-04.jsp
deleted file mode 100644
index 25222df..0000000
--- a/jsf-ri/systest/web/jsp/jsp-include-04.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jsp-include-04</title>
-</head>
-<body>
-<h:outputText value="[1]"/>
-<c:choose>
-  <c:when test="${param.choose == 'a'}">
-    <jsp:include page="jstl-import-04a.jsp"/>
-  </c:when>
-  <c:when test="${param.choose == 'b'}">
-    <jsp:include page="jstl-import-04b.jsp"/>
-  </c:when>
-  <c:otherwise>
-    <jsp:include page="jstl-import-04c.jsp"/>
-  </c:otherwise>
-</c:choose>
-<h:outputText value="[3]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jsp-setProperty-01.jsp b/jsf-ri/systest/web/jsp/jsp-setProperty-01.jsp
deleted file mode 100644
index 518b878..0000000
--- a/jsf-ri/systest/web/jsp/jsp-setProperty-01.jsp
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>f:setPropertyActionListener</title>
-</head>
-<body>
-<h:form>
-
-Integer Property is: <h:outputText value="#{test3.intProperty}" />. <br>
-String Property is: <h:outputText value="#{test3.stringProperty}" />. <br>
-
-<h:commandButton id="expressionButton1" value="Convert from String To Integer">
-  <f:setPropertyActionListener target="#{test3.intProperty}" value="100" />
-</h:commandButton>
-<h:commandButton id="expressionButton2" value="Convert from Integer to String">
-  <f:setPropertyActionListener target="#{test3.stringProperty}" value="#{test3.intProperty}" />
-</h:commandButton>   
-<h:commandButton id="expressionButton3" value="String to String">
-  <f:setPropertyActionListener target="#{test3.stringProperty}" value="String" />
-</h:commandButton>
-<h:commandButton id="expressionButton4" value="FacesContext to String">
-  <f:setPropertyActionListener target="#{test3.stringProperty}" value="#{facesContext}" />
-</h:commandButton>
-
-</h:form>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-choose-00.jsp b/jsf-ri/systest/web/jsp/jstl-choose-00.jsp
deleted file mode 100644
index 142da33..0000000
--- a/jsf-ri/systest/web/jsp/jstl-choose-00.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-choose-00</title>
-</head>
-<body>
-Dummy page to force resetting the component tree.
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-choose-01.jsp b/jsf-ri/systest/web/jsp/jstl-choose-01.jsp
deleted file mode 100644
index d2b4e38..0000000
--- a/jsf-ri/systest/web/jsp/jstl-choose-01.jsp
+++ /dev/null
@@ -1,71 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-choose-01</title>
-</head>
-<body>
-<h:outputText value="[1]"/>
-<c:choose>
-  <c:when test="${param.choose == 'a'}">
-    <h:outputText  value="[2a]"/>
-    <h:outputText  value="[2z]"/>
-  </c:when>
-  <c:when test="${param.choose == 'b'}">
-    <h:outputText value="[2b]"/>
-    <h:outputText  value="[2y]"/>
-  </c:when>
-  <c:otherwise>
-    <h:outputText  value="[2c]"/>
-    <h:outputText  value="[2x]"/>
-  </c:otherwise>
-</c:choose>
-<h:outputText value="[3]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-choose-02.jsp b/jsf-ri/systest/web/jsp/jstl-choose-02.jsp
deleted file mode 100644
index 795dbfe..0000000
--- a/jsf-ri/systest/web/jsp/jstl-choose-02.jsp
+++ /dev/null
@@ -1,77 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-choose-02</title>
-</head>
-<body>
-<h:outputText value="[1]"/>
-<c:choose>
-  <c:when test="${param.choose == 'a'}">
-    <f:subview id="naming2a">
-      <h:outputText value="[2a]"/>
-      <h:outputText value="[2z]"/>
-    </f:subview>
-  </c:when>
-  <c:when test="${param.choose == 'b'}">
-    <f:subview id="naming2b">
-      <h:outputText value="[2b]"/>
-      <h:outputText value="[2y]"/>
-    </f:subview>
-  </c:when>
-  <c:otherwise>
-    <f:subview id="naming2c">
-      <h:outputText value="[2c]"/>
-      <h:outputText value="[2x]"/>
-    </f:subview>
-  </c:otherwise>
-</c:choose>
-<h:outputText value="[3]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-foreach-00.jsp b/jsf-ri/systest/web/jsp/jstl-foreach-00.jsp
deleted file mode 100644
index 1cebe2b..0000000
--- a/jsf-ri/systest/web/jsp/jstl-foreach-00.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-foreach-00</title>
-</head>
-<body>
-Dummy page to force resetting the component tree.
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-foreach-01.jsp b/jsf-ri/systest/web/jsp/jstl-foreach-01.jsp
deleted file mode 100644
index 58f789f..0000000
--- a/jsf-ri/systest/web/jsp/jstl-foreach-01.jsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-foreach-01</title>
-</head>
-<body>
-
-<h:form id="jstlForeach01_form">
-
-  <table border="0" cellspacing="5" cellpadding="5">
-
-    <jsp:useBean scope="session" 
-                 class="com.sun.faces.systest.model.ForEachBean"
-                 id="forEachBean" />
-
-    <c:forEach items="${forEachBean.arrayProperty}" varStatus="s" var="curVal">
-      <c:set var="val" scope="request" value="${curVal}" />
-      <c:set var="s" scope="request" value="${s}"/>
-      <c:set var="arrayLabel" scope="request" value="arrayLabel${s.index}"/>
-      <c:set var="arrayLabelValue" scope="request" 
-             value="arrayLabel_${s.index}"/>
-      <c:set var="arrayProp" scope="request" value="arrayProp${s.index}"/>
-      <tr>
-        <td><h:outputText id="#{arrayLabel}" value="#{arrayLabelValue}"/></td>
-        <td><h:inputText id="#{arrayProp}" value="#{val}"/></td>
-      </tr>
-    </c:forEach>
-
-    <tr>
-      <td><h:commandButton id="submit" type="submit" value="Submit"/></td>
-      <td><h:commandButton id="reset"  type="reset"  value="Reset"/></td>
-    </tr>
-
-  </table>
-
-</h:form>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-if-00.jsp b/jsf-ri/systest/web/jsp/jstl-if-00.jsp
deleted file mode 100644
index 73cbf02..0000000
--- a/jsf-ri/systest/web/jsp/jstl-if-00.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-if-00</title>
-</head>
-<body>
-Dummy page to force resetting the component tree.
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-if-01.jsp b/jsf-ri/systest/web/jsp/jstl-if-01.jsp
deleted file mode 100644
index b2c1a9f..0000000
--- a/jsf-ri/systest/web/jsp/jstl-if-01.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-if test without "id"</title>
-</head>
-<body>
-<h:outputText value="[First]"/>
-<c:if test="${param.cond}">
-  <h:outputText value="[Second]"/>
-</c:if>
-<h:outputText value="[Third]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-if-02.jsp b/jsf-ri/systest/web/jsp/jstl-if-02.jsp
deleted file mode 100644
index d6b7ca9..0000000
--- a/jsf-ri/systest/web/jsp/jstl-if-02.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="s" uri="/WEB-INF/taglib.tld" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-if-02</title>
-</head>
-<body>
-<h:outputText value="[First]"/>
-<c:if test="${param.component}">
-  <s:facets id="comp" value="Second">
-    <c:if test="${param.header}">
-      <f:facet name="header">
-        <h:outputText id="head" value="Header"/>
-      </f:facet>
-    </c:if>
-    <c:if test="${param.footer}">
-      <f:facet name="footer">
-        <h:outputText id="foot" value="Footer"/>
-      </f:facet>
-    </c:if>
-  </s:facets>
-</c:if>
-<h:outputText value="[Third]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-if-03.jsp b/jsf-ri/systest/web/jsp/jstl-if-03.jsp
deleted file mode 100644
index 407b2d0..0000000
--- a/jsf-ri/systest/web/jsp/jstl-if-03.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-if-03</title>
-</head>
-<body>
-[1]
-<c:if test="${param.cond}">
-  [2]
-  <h:outputText id="cond" value="[3]"/>
-  [4]
-</c:if>
-[5]
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-if-04.jsp b/jsf-ri/systest/web/jsp/jstl-if-04.jsp
deleted file mode 100644
index 8a45dc4..0000000
--- a/jsf-ri/systest/web/jsp/jstl-if-04.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="s" uri="/WEB-INF/taglib.tld" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-if-04</title>
-</head>
-<body>
-[1]
-<c:if test="${param.cond}">
-  <h:outputText       id="other2"  value="[2]"/>
-  [3]
-  <s:children id="kids">
-    <s:output_verbatim id="kids4a">[4a]</s:output_verbatim>
-    <h:outputText     id="kids4b" value="[4b]"/>
-    <s:output_verbatim id="kids4c">[4c]</s:output_verbatim>
-  </s:children>
-  <h:outputText       id="other5" value="[5]"/>
-  [6]
-</c:if>
-[7]
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-if-05.jsp b/jsf-ri/systest/web/jsp/jstl-if-05.jsp
deleted file mode 100644
index 31c93cb..0000000
--- a/jsf-ri/systest/web/jsp/jstl-if-05.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%@ taglib prefix="s" uri="/WEB-INF/taglib.tld" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-if-05</title>
-</head>
-<body>
-[1]
-<c:if test="${param.cond}">
-  <h:outputText       id="other2"  value="[2]"/>
-  [3]
-  <s:children id="kids">
-    [4a]
-    <h:outputText     id="kids4b" value="[4b]"/>
-    [4c]
-  </s:children>
-  <h:outputText       id="other5" value="[5]"/>
-  [6]
-</c:if>
-[7]
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-00.jsp b/jsf-ri/systest/web/jsp/jstl-import-00.jsp
deleted file mode 100644
index afa897d..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-00.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-import-00</title>
-</head>
-<body>
-Dummy page to force resetting the component tree.
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-01.jsp b/jsf-ri/systest/web/jsp/jstl-import-01.jsp
deleted file mode 100644
index eec542d..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-01.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-import-01</title>
-</head>
-<body>
-<h:outputText value="[A]"/>
-<c:import url="jstl-import-01a.jsp"/>
-<h:outputText value="[C]"/>
-<c:import url="jstl-import-01b.jsp"/>
-<h:outputText value="[E]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-01a.jsp b/jsf-ri/systest/web/jsp/jstl-import-01a.jsp
deleted file mode 100644
index da4413a..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-01a.jsp
+++ /dev/null
@@ -1,42 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-[B]
diff --git a/jsf-ri/systest/web/jsp/jstl-import-01b.jsp b/jsf-ri/systest/web/jsp/jstl-import-01b.jsp
deleted file mode 100644
index c9aab2b..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-01b.jsp
+++ /dev/null
@@ -1,42 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-[D]
diff --git a/jsf-ri/systest/web/jsp/jstl-import-02.jsp b/jsf-ri/systest/web/jsp/jstl-import-02.jsp
deleted file mode 100644
index 2c1bd49..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-02.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-import-02</title>
-</head>
-<body>
-<h:outputText value="[A]"/>
-<c:import url="jstl-import-02a.jsp"/>
-<h:outputText value="[C]"/>
-<c:import url="jstl-import-02b.jsp"/>
-<h:outputText value="[E]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-02a.jsp b/jsf-ri/systest/web/jsp/jstl-import-02a.jsp
deleted file mode 100644
index 187b966..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-02a.jsp
+++ /dev/null
@@ -1,46 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<f:subview id="view1"> 
-<h:outputText value="[B]"/>
-</f:subview> 
diff --git a/jsf-ri/systest/web/jsp/jstl-import-02b.jsp b/jsf-ri/systest/web/jsp/jstl-import-02b.jsp
deleted file mode 100644
index 737ee55..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-02b.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%-- <f:view> --%>
-<h:outputText value="[D]"/>
-<%-- </f:view> --%>
-
diff --git a/jsf-ri/systest/web/jsp/jstl-import-03.jsp b/jsf-ri/systest/web/jsp/jstl-import-03.jsp
deleted file mode 100644
index 7ca7304..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-03.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>jstl-import-03</title>
-</head>
-<body>
-<h:outputText value="[1]"/>
-<c:choose>
-  <c:when test="${param.choose == 'a'}">
-    <c:import url="jstl-import-03a.jsp"/>
-  </c:when>
-  <c:when test="${param.choose == 'b'}">
-    <c:import url="jstl-import-03b.jsp"/>
-  </c:when>
-  <c:otherwise>
-    <c:import url="jstl-import-03c.jsp"/>
-  </c:otherwise>
-</c:choose>
-<h:outputText value="[3]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-03a.jsp b/jsf-ri/systest/web/jsp/jstl-import-03a.jsp
deleted file mode 100644
index 1d8d617..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-03a.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%-- <f:view> --%>
-<h:outputText id="import03a" value="[2a]"/>
-<h:outputText id="import03z" value="[2z]"/>
-<%-- </f:view> --%>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-03b.jsp b/jsf-ri/systest/web/jsp/jstl-import-03b.jsp
deleted file mode 100644
index 7153cb6..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-03b.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%-- <f:view> --%>
-<h:outputText id="import03b" value="[2b]"/>
-<h:outputText id="import03y" value="[2y]"/>
-<%-- </f:view> --%>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-03c.jsp b/jsf-ri/systest/web/jsp/jstl-import-03c.jsp
deleted file mode 100644
index db139cd..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-03c.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%-- <f:view> --%>
-<h:outputText id="import03c" value="[2c]"/>
-<h:outputText id="import03x" value="[2x]"/>
-<%-- </f:view> --%>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-04.jsp b/jsf-ri/systest/web/jsp/jstl-import-04.jsp
deleted file mode 100644
index 4abe1ee..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-04.jsp
+++ /dev/null
@@ -1,75 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%--
-      NOTE: The included "outputText" component tags are from
-      the systest tag library, not the standard html tag library,
-      in order to bypass the normal requirement for an "id"
---%>
-
-
-<f:view>
-<html>
-<head>
-<title>jstl-import-04</title>
-</head>
-<body>
-<h:outputText value="[1]"/>
-<c:choose>
-  <c:when test="${param.choose == 'a'}">
-    <c:import url="jstl-import-04a.jsp"/>
-  </c:when>
-  <c:when test="${param.choose == 'b'}">
-    <c:import url="jstl-import-04b.jsp"/>
-  </c:when>
-  <c:otherwise>
-    <c:import url="jstl-import-04c.jsp"/>
-  </c:otherwise>
-</c:choose>
-<h:outputText value="[3]"/>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-04a.jsp b/jsf-ri/systest/web/jsp/jstl-import-04a.jsp
deleted file mode 100644
index a2e1583..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-04a.jsp
+++ /dev/null
@@ -1,49 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-<%-- <f:view> --%>
-<f:subview id="naming2a">
- <h:outputText value="[2a]"/>
- <h:outputText value="[2z]"/>
-</f:subview>
-<%-- </f:view> --%>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-04b.jsp b/jsf-ri/systest/web/jsp/jstl-import-04b.jsp
deleted file mode 100644
index 5aa9223..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-04b.jsp
+++ /dev/null
@@ -1,50 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%-- <f:view> --%>
-<f:subview id="naming2b">
- <h:outputText value="[2b]"/>
- <h:outputText value="[2y]"/>
-</f:subview>
-<%-- </f:view> --%>
diff --git a/jsf-ri/systest/web/jsp/jstl-import-04c.jsp b/jsf-ri/systest/web/jsp/jstl-import-04c.jsp
deleted file mode 100644
index 2fe6ec7..0000000
--- a/jsf-ri/systest/web/jsp/jstl-import-04c.jsp
+++ /dev/null
@@ -1,50 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%-- <f:view> --%>
-<f:subview id="naming2c">
- <h:outputText value="[2c]"/>
- <h:outputText value="[2x]"/>
-</f:subview>
-<%-- </f:view> --%>
diff --git a/jsf-ri/systest/web/jsp/missing-view.jsp b/jsf-ri/systest/web/jsp/missing-view.jsp
deleted file mode 100644
index 511d04e..0000000
--- a/jsf-ri/systest/web/jsp/missing-view.jsp
+++ /dev/null
@@ -1,67 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>JSP page missing a view</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>JSP page missing a view</h1>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-
-      <h:outputText value="Hello" />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/prependId.jsp b/jsf-ri/systest/web/jsp/prependId.jsp
deleted file mode 100644
index f930125..0000000
--- a/jsf-ri/systest/web/jsp/prependId.jsp
+++ /dev/null
@@ -1,141 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test prependId feature</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test prependId feature</h1>
-
-<h2>Literal ids with prependId literal</h2>
-
-<f:view>
-
-  <h:form id="form1" prependId="false">
-
-      <h:outputText id="case1prependIdFalse" value="prependIdFalse" />
-
-  </h:form>
-
-  <h:form id="form2" prependId="true">
-
-      <h:outputText id="case1prependIdTrue" value="prependIdTrue" />
-
-  </h:form>
-
-  <h:form id="form3">
-
-      <h:outputText id="case1prependIdUnspecified" value="prependIdUnspecified" />
-
-  </h:form>
-
-
-<h2>Literal ids with prependId from expression</h2>
-
-  <h:form id="form4" prependId="#{prependIdBean.booleanProperty2}">
-
-      <h:outputText id="case2prependIdFalse" value="prependIdFalse" />
-
-  </h:form>
-
-  <h:form id="form5" prependId="#{prependIdBean.booleanProperty}">
-
-      <h:outputText id="case2prependIdTrue" value="prependIdTrue" />
-
-  </h:form>
-
-  <h:form id="form6">
-
-      <h:outputText id="case2prependIdUnspecified" value="prependIdUnspecified" />
-
-  </h:form>
-
-
-<h2>Auto-generated ids with prependId literal</h2>
-
-  <h:form prependId="false">
-
-      <h:inputText value="prependIdFalse" />
-
-  </h:form>
-
-  <h:form prependId="true">
-
-      <h:inputText value="prependIdTrue" />
-
-  </h:form>
-
-  <h:form>
-
-      <h:inputText value="prependIdUnspecified" />
-
-  </h:form>
-
-<h2>Auto-generated ids with prependId from expression</h2>
-
-  <h:form prependId="#{prependIdBean.booleanProperty2}">
-
-      <h:inputText value="prependIdFalse" />
-
-  </h:form>
-
-  <h:form prependId="#{prependIdBean.booleanProperty}">
-
-      <h:inputText value="prependIdTrue" />
-
-  </h:form>
-
-  <h:form >
-
-      <h:inputText value="prependIdUnspecified" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectBooleanValue.jsp b/jsf-ri/systest/web/jsp/selectBooleanValue.jsp
deleted file mode 100644
index 15cdded..0000000
--- a/jsf-ri/systest/web/jsp/selectBooleanValue.jsp
+++ /dev/null
@@ -1,113 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>selectBoolean test</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>selectBoolean test</h1>
-
-<h2>How this testcase works.</h2>
-
-<p>This is the regression test for bugtraq 5016123.</p>
-
-<p>The system test for this page does the following</p>
-
-
-	<ol>
-
-	  <li><p>presses the button with the id "replace" twice.</p>
-
-          <p>The first time pressed, it replaces the default
-          PropertyResolver with one that logs calls to setValue in the
-          "valueChanged" property of bean named test3.  The second time
-          pressed, you'll actually see that the setValue was called.</p>
-
-          </li>
-
-	  <li><p>When the page loads from the second button press, it
-	  looks for the string "setValue() called" and verifies it is
-	  not in the page. </p></li>
-
-	  <li><p>presses the button with the id "restore".
-	  </p></li>
-
-	</ol>
-
-
-<f:view>
-
-  <h:form>
-
-    <h:commandButton id="replace" value="submit and replace PropertyResolver with Logging PropertyResolver" 
-                     actionListener="#{test3.replacePropertyResolver}" />
-
-    <h:panelGrid columns="2">
-
-      <h:selectBooleanCheckbox value="#{test3.booleanProperty2}" />
-
-      <h:outputText value="checkbox" />
-
-      <h:outputText value="valueChanged:" />
-
-      <h:outputText value="#{test3.valueChangeMessage}" />
-
-      <h:messages />
-
-    </h:panelGrid>
-
-    <h:commandButton id="restore" 
-                     value="submit and restore original PropertyResolver" 
-                     actionListener="#{test3.restorePropertyResolver}" />
-
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectManyInvalidValue.jsp b/jsf-ri/systest/web/jsp/selectManyInvalidValue.jsp
deleted file mode 100644
index 08a5ec3..0000000
--- a/jsf-ri/systest/web/jsp/selectManyInvalidValue.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>SelectMany with invalid Value</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>SelectMany with invalid Value</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-
-      <h:selectManyListbox
-        required="true" 
-        valueChangeListener="#{test3.valueChanged}"
-        value="#{test3.multiSelection}">
-        <f:selectItems 
-          value="#{test3.nondeterministicSelectList}" />
-      </h:selectManyListbox>
-
-      <h:messages />
-
-      <h:outputText value="#{test3.valueChangeMessage}" />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectManyMismatchValue.jsp b/jsf-ri/systest/web/jsp/selectManyMismatchValue.jsp
deleted file mode 100644
index 4e135ed..0000000
--- a/jsf-ri/systest/web/jsp/selectManyMismatchValue.jsp
+++ /dev/null
@@ -1,78 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>SelectMany with mismatched value type</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>SelectMany with mismatched value type</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-
-      <h:selectManyListbox
-        required="true" 
-        value="#{test3.selection}">
-        <f:selectItems 
-          value="#{test3.selectList}" />
-      </h:selectManyListbox>
-
-      <h:messages />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectManyNoValue.jsp b/jsf-ri/systest/web/jsp/selectManyNoValue.jsp
deleted file mode 100644
index bfc2241..0000000
--- a/jsf-ri/systest/web/jsp/selectManyNoValue.jsp
+++ /dev/null
@@ -1,78 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>SelectMany with no Value</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>SelectMany with no Value</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-
-      <h:selectManyListbox
-        required="true" 
-        value="#{test3.multiSelection}">
-        <f:selectItems 
-          value="#{test3.selectList}" />
-      </h:selectManyListbox>
-
-      <h:messages />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectManyTypeInts.jsp b/jsf-ri/systest/web/jsp/selectManyTypeInts.jsp
deleted file mode 100644
index 1a8d29f..0000000
--- a/jsf-ri/systest/web/jsp/selectManyTypeInts.jsp
+++ /dev/null
@@ -1,76 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>SelectMany with primitive int array value</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>SelectMany with primitive int array value</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-       <h:selectManyListbox id="intListbox" value="#{test3.intsProperty}">
-          <f:selectItem itemLabel="first" itemValue="1" />
-          <f:selectItem itemLabel="second" itemValue="2" />
-          <f:selectItem itemLabel="three" itemValue="3" />
-       </h:selectManyListbox>
-
-      <h:messages />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectOneInvalidValue.jsp b/jsf-ri/systest/web/jsp/selectOneInvalidValue.jsp
deleted file mode 100644
index 46ff8ba..0000000
--- a/jsf-ri/systest/web/jsp/selectOneInvalidValue.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>SelectOne with invalid Value</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>SelectOne with invalid Value</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-
-      <h:selectOneRadio
-        required="true" 
-        valueChangeListener="#{test3.valueChanged}"
-        value="#{test3.multiSelection}">
-        <f:selectItems 
-          value="#{test3.nondeterministicSelectList}" />
-      </h:selectOneRadio>
-
-      <h:messages />
-
-      <h:outputText value="#{test3.valueChangeMessage}" />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectOneNoValue.jsp b/jsf-ri/systest/web/jsp/selectOneNoValue.jsp
deleted file mode 100644
index 2a44691..0000000
--- a/jsf-ri/systest/web/jsp/selectOneNoValue.jsp
+++ /dev/null
@@ -1,79 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>SelectOne with no Value</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>SelectOne with no Value</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-
-      <h:selectOneRadio 
-        layout="pageDirection" 
-        required="true"
-        value="#{test3.selection}">
-        <f:selectItems 
-          value="#{test3.selectList}" />
-      </h:selectOneRadio>
-
-      <h:messages />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectOneRadioTypeInt.jsp b/jsf-ri/systest/web/jsp/selectOneRadioTypeInt.jsp
deleted file mode 100644
index 53f9869..0000000
--- a/jsf-ri/systest/web/jsp/selectOneRadioTypeInt.jsp
+++ /dev/null
@@ -1,63 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-  
-<html>
-<body>
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<jsp:useBean id="myBean" class="com.sun.faces.systest.model.TestBean" scope="session" />
-
-<f:view>
-    <h:form id="form">
-        <h:selectOneRadio value="#{myBean.int}">
-          <f:selectItem itemLabel="first" itemValue="1" />
-          <f:selectItem itemLabel="second" itemValue="2" />
-          <f:selectItem itemLabel="three" itemValue="3" />
-        </h:selectOneRadio>
-        <h:outputText value="Model Selection:"/>
-        <h:outputText value="#{myBean.int}"/>
-        <br>
-        <h:commandButton id="nonImmediate" value="Submit immedate false"/>
-        <h:commandButton id="immediate" value="Submit immediate true" immediate="true"/>
-    </h:form>
-    <h:messages/>
-</f:view>
-
-</body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectOneRadioTypeInteger.jsp b/jsf-ri/systest/web/jsp/selectOneRadioTypeInteger.jsp
deleted file mode 100644
index 0757fd0..0000000
--- a/jsf-ri/systest/web/jsp/selectOneRadioTypeInteger.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-  
-<html>
-<body>
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<jsp:useBean id="myBean" class="com.sun.faces.systest.model.TestBean" scope="session" />
-
-<f:view>
-    <h:form id="form">
-        <h:selectOneRadio converter="javax.faces.Integer"
-           value="#{myBean.selectedValue}">
-            <f:selectItems value="#{myBean.mySelectItems}"/>
-        </h:selectOneRadio>
-        <h:outputText value="Model Selection:"/>
-        <h:outputText value="#{myBean.selectedValue}"/>
-        <br>
-        <h:commandButton id="nonImmediate" value="Submit immedate false" action="success"/>
-        <h:commandButton id="immediate" value="Submit immediate true" immediate="true" action="success"/>
-    </h:form>
-    <h:messages/>
-</f:view>
-
-</body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/selectOneTypeInt.jsp b/jsf-ri/systest/web/jsp/selectOneTypeInt.jsp
deleted file mode 100644
index be07067..0000000
--- a/jsf-ri/systest/web/jsp/selectOneTypeInt.jsp
+++ /dev/null
@@ -1,76 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>SelectOne with primitive int value</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>SelectOne with primitive int value</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="1">
-       <h:selectOneListbox id="intListbox" value="#{test3.intProperty}">
-          <f:selectItem itemLabel="first" itemValue="1" />
-          <f:selectItem itemLabel="second" itemValue="2" />
-          <f:selectItem itemLabel="three" itemValue="3" />
-       </h:selectOneListbox>
-
-      <h:messages />
-
-    </h:panelGrid>
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/testMissingActionListenerMethod.jsp b/jsf-ri/systest/web/jsp/testMissingActionListenerMethod.jsp
deleted file mode 100644
index 7d7d993..0000000
--- a/jsf-ri/systest/web/jsp/testMissingActionListenerMethod.jsp
+++ /dev/null
@@ -1,57 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<title>Missing ActionListener Method Test Page</title>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-</head>
-<body>
-
-<h1>commandButton w/missing ActionListener method</h1>
-This page should Fail.
-<br>
-<br>
-<f:view>
-  <p>This command button has a missing ActionListener method</p>
-  <h:form id="testForm">
-    <h:commandButton id="testButton" actionListener="#{methodRef.missingMethod}" value="Test Button"/>
-  </h:form>
-</f:view>
-</body>
-</head>
-</html>
diff --git a/jsf-ri/systest/web/jsp/tlvTest01.jsp b/jsf-ri/systest/web/jsp/tlvTest01.jsp
deleted file mode 100644
index 7661c7f..0000000
--- a/jsf-ri/systest/web/jsp/tlvTest01.jsp
+++ /dev/null
@@ -1,67 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>TLV Test 01</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>TLV Test 01</h1>
-
-<f:view>
-
-  <h:form>
-
-    <p>This is a bound button</p>
-
-    <h:commandButton binding="#{test3.boundButton}" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/jsp/verbatim-one-test.jsp b/jsf-ri/systest/web/jsp/verbatim-one-test.jsp
deleted file mode 100644
index e79ee04..0000000
--- a/jsf-ri/systest/web/jsp/verbatim-one-test.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-<f:view>
-<head>
-<title><h:outputText id="title" value="title"/></title>
-</head>
-
-<body>
-<h:form id="form">
-   <h:panelGrid id="panel1" columns="2" styleClass="book"
-      columnClasses="menuColumn, chapterColumn">
-
-      <f:facet name="header" >
-         <h:panelGrid id="panel2" columns="1" >
-            <h:outputText id="outputheader" value="this is the header" />
-            <f:verbatim><hr/></f:verbatim>
-         </h:panelGrid>
-      </f:facet>
-
-      <h:commandButton id="submit" value="submit"/>
-
-      <f:verbatim >
-         verbatim text here
-      </f:verbatim>
-
-   </h:panelGrid>
-</h:form>
-</body>
-</f:view>
-</html>
diff --git a/jsf-ri/systest/web/jsp/verbatim-test.jsp b/jsf-ri/systest/web/jsp/verbatim-test.jsp
deleted file mode 100644
index e0eb4ab..0000000
--- a/jsf-ri/systest/web/jsp/verbatim-test.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<html>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-    <f:view>
-      <h:form id="form1">
-        <table>
-        <tr>
-         <td>
-         <h:panelGrid id="panelGrid" styleClass="scrollPane" columns="1">
-           <h:panelGroup id="panelGroup">
-             <f:verbatim><DIV STYLE="overflow: auto; height: 100px;"></f:verbatim>
-             <h:outputText id="outputtext" value="An output text"/>
-             <f:verbatim></DIV></f:verbatim>
-           </h:panelGroup>
-         </h:panelGrid>
-         </td>
-        </tr>
-        <tr>
-         <td>
-         <h:commandButton id="submit" value="submit" action="success"/>
-         </td>
-        </tr>
-        </table>
-      </h:form>
-    </f:view>
-</html>
-
diff --git a/jsf-ri/systest/web/jsp/verbatim-two-test.jsp b/jsf-ri/systest/web/jsp/verbatim-two-test.jsp
deleted file mode 100644
index 2405967..0000000
--- a/jsf-ri/systest/web/jsp/verbatim-two-test.jsp
+++ /dev/null
@@ -1,70 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-<f:view>
-<head>
-<title><h:outputText id="title" value="title"/></title>
-</head>
-
-<body>
-<h:form id="form">
-   <h:panelGrid id="panel1" columns="2" styleClass="book"
-      columnClasses="menuColumn, chapterColumn">
-
-      <f:verbatim >
-         verbatim one text here
-      </f:verbatim>
-
-      <h:panelGrid id="panel2" columns="1" >
-         <h:outputText id="outputheader" value="this is the header" />
-         <f:verbatim><hr/></f:verbatim>
-      </h:panelGrid>
-
-      <h:commandButton id="submit" value="submit"/>
-
-      <f:verbatim >
-         verbatim two text here
-      </f:verbatim>
-
-   </h:panelGrid>
-</h:form>
-</body>
-</f:view>
-</html>
diff --git a/jsf-ri/systest/web/listener.jsp b/jsf-ri/systest/web/listener.jsp
deleted file mode 100644
index a4cf29e..0000000
--- a/jsf-ri/systest/web/listener.jsp
+++ /dev/null
@@ -1,141 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>ActionListeners and ValueChangeListeners</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>ActionListeners and ValueChangeListeners</h1>
-
-<f:view>
-
-  <h:form>
-
-    <p>Enter some text:</p>
-
-    <h:panelGrid columns="2">
-
-<%-- Case 1: "type" specified --%>
-
-      <h:inputText id="text1"> 
-          <f:valueChangeListener type="com.sun.faces.systest.TestValueChangeListener01"/>
-      </h:inputText>
-
-      <h:message for="text1" />
-
-<%-- Case 2: "binding" specified --%>
-
-      <h:inputText id="text2">
-          <f:valueChangeListener binding="#{TestValueChangeListener01}"/>
-      </h:inputText>
-
-      <h:message for="text2" />
-
-<%-- Case 3: "type" and "binding" specified                        --%>
-<%--         "binding" will set the instance (created from "type") --%>
-<%--         to a property on the backing bean                     --%>
-
-      <h:inputText id="text3">
-          <f:valueChangeListener type="com.sun.faces.systest.TestValueChangeListener01" binding="#{listenerBean.valueChangeListener}"/>
-      </h:inputText>      
-
-      <h:message for="text3" />
-
-<%-- Bind the listener we created (Case 3) to the component --%>
-
-      <h:inputText id="text4">
-          <f:valueChangeListener binding="#{listenerBean.valueChangeListener}"/>
-      </h:inputText>
-
-      <h:message for="text4" />
-
-<%-- Case 1: "type" specified --%>
-
-      <h:commandButton id="button1" value="submit" > 
-          <f:actionListener type="com.sun.faces.systest.TestActionListener01"/>
-      </h:commandButton>
-
-      <h:message for="button1" />
-
-<%-- Case 2: "binding" specified --%>
-
-      <h:commandButton id="button2" value="submit" > 
-          <f:actionListener binding="#{TestActionListener01}"/>
-      </h:commandButton>
-
-      <h:message for="button2" />
-
-<%-- Case 3: "type" and "binding" specified                        --%>
-<%--         "binding" will set the instance (created from "type") --%>
-<%--         to a property on the backing bean                     --%>
-
-      <h:commandButton id="button3"  value="submit" > 
-          <f:actionListener type="com.sun.faces.systest.TestActionListener01"
-              binding="#{listenerBean.actionListener}"/>
-      </h:commandButton>
-
-      <h:message for="button3" />
-
-<%-- Bind the listener we created (Case 3) to the component --%>
-
-      <h:commandButton id="button4" value="submit" >
-          <f:actionListener binding="#{listenerBean.actionListener}"/>      
-      </h:commandButton>
-
-      <h:message for="button4" />
-
-      <h:messages />
-
-    </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/listenerTagListenersBinding.jsp b/jsf-ri/systest/web/listenerTagListenersBinding.jsp
deleted file mode 100644
index 84c1d61..0000000
--- a/jsf-ri/systest/web/listenerTagListenersBinding.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-  <f:phaseListener binding="#{phaseListener.instance}" />
-  <html>
-    <head>
-      <title>f:phaseListener Tag</title>
-    </head>
-    <body>
-      <h:form>
-
-        <h2>About this test</h2>
-
-	  <p>The first time this page is visited, we'll only see output
-	  on the PhaseEvents below.  Reason: The listener isn't added
-	  until the <code>phaseListener</code> tag executes, which is
-	  after the beforePhase event time.  The outputText for the
-	  afterPhaseEvent executes before the afterPhase event.</p>
-
-          <p>When the page is re-displayed any number of times by
-          pressing the redisplay button below, we'll see the apply,
-          process, update, invoke, and render phases on the
-          beforePhaseEvent, and we'll see apply, process, update, and
-          invoke on the afterPhaseEvent.  The former is correct because
-          it's impossible to see a restore-view event by using a view
-          scoped listener.  The latter is correct because we see
-          everything but the after render event because the outputText's
-          below render their output before the after event is sent.</p>
-
-       <h2>Output from the PhaseListener</h2>
-
-        <p>beforePhaseEvent: <h:outputText value="#{beforePhaseEvent}"/>.</p>
-
-        <p>afterPhaseEvent: <h:outputText value="#{afterPhaseEvent}"/>.</p>
-
-        <p><h:commandButton value="redisplay" /></p>
-        
-      </h:form>
-     
-    </body>
-  </html>
-</f:view>
-
diff --git a/jsf-ri/systest/web/listenerTagListenersBindingType.jsp b/jsf-ri/systest/web/listenerTagListenersBindingType.jsp
deleted file mode 100644
index 210e3b6..0000000
--- a/jsf-ri/systest/web/listenerTagListenersBindingType.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-  <f:phaseListener binding="#{phaseListener.otherListener}" type="com.sun.faces.systest.model.PrintEventToRequestMapPhaseListener"/>
-  <html>
-    <head>
-      <title>f:phaseListener Tag</title>
-    </head>
-    <body>
-      <h:form>
-
-        <h2>About this test</h2>
-
-	  <p>The first time this page is visited, we'll only see output
-	  on the PhaseEvents below.  Reason: The listener isn't added
-	  until the <code>phaseListener</code> tag executes, which is
-	  after the beforePhase event time.  The outputText for the
-	  afterPhaseEvent executes before the afterPhase event.</p>
-
-          <p>When the page is re-displayed any number of times by
-          pressing the redisplay button below, we'll see the apply,
-          process, update, invoke, and render phases on the
-          beforePhaseEvent, and we'll see apply, process, update, and
-          invoke on the afterPhaseEvent.  The former is correct because
-          it's impossible to see a restore-view event by using a view
-          scoped listener.  The latter is correct because we see
-          everything but the after render event because the outputText's
-          below render their output before the after event is sent.</p>
-
-       <h2>Output from the PhaseListener</h2>
-
-        <p>beforePhaseEvent: <h:outputText value="#{beforePhaseEvent}"/>.</p>
-
-        <p>afterPhaseEvent: <h:outputText value="#{afterPhaseEvent}"/>.</p>
-
-        <p><h:commandButton value="redisplay" /></p>
-        
-      </h:form>
-     
-    </body>
-  </html>
-</f:view>
-
diff --git a/jsf-ri/systest/web/listenerTagListenersType.jsp b/jsf-ri/systest/web/listenerTagListenersType.jsp
deleted file mode 100644
index 93d94c2..0000000
--- a/jsf-ri/systest/web/listenerTagListenersType.jsp
+++ /dev/null
@@ -1,81 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-  <f:phaseListener type="com.sun.faces.systest.model.PrintEventToRequestMapPhaseListener" />
-  <html>
-    <head>
-      <title>f:phaseListener Tag</title>
-    </head>
-    <body>
-      <h:form>
-
-        <h2>About this test</h2>
-
-	  <p>The first time this page is visited, we'll only see output
-	  on the PhaseEvents below.  Reason: The listener isn't added
-	  until the <code>phaseListener</code> tag executes, which is
-	  after the beforePhase event time.  The outputText for the
-	  afterPhaseEvent executes before the afterPhase event.</p>
-
-          <p>When the page is re-displayed any number of times by
-          pressing the redisplay button below, we'll see the apply,
-          process, update, invoke, and render phases on the
-          beforePhaseEvent, and we'll see apply, process, update, and
-          invoke on the afterPhaseEvent.  The former is correct because
-          it's impossible to see a restore-view event by using a view
-          scoped listener.  The latter is correct because we see
-          everything but the after render event because the outputText's
-          below render their output before the after event is sent.</p>
-
-       <h2>Output from the PhaseListener</h2>
-
-        <p>beforePhaseEvent: <h:outputText value="#{beforePhaseEvent}"/>.</p>
-
-        <p>afterPhaseEvent: <h:outputText value="#{afterPhaseEvent}"/>.</p>
-
-        <p><h:commandButton value="redisplay" /></p>
-        
-      </h:form>
-     
-    </body>
-  </html>
-</f:view>
-
diff --git a/jsf-ri/systest/web/managed01.jsp b/jsf-ri/systest/web/managed01.jsp
deleted file mode 100644
index 232c420..0000000
--- a/jsf-ri/systest/web/managed01.jsp
+++ /dev/null
@@ -1,134 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.el.ValueExpression"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate a managed bean and validate property values #1
-
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/component01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // Acquire a ValueExpression for the bean to be created
-  ValueExpression valueExpression = appl.getExpressionFactory().createValueExpression(facesContext.getELContext(),"#{test1}", 
-      Object.class);
-  if (valueExpression == null) {
-    out.println("/managed01.jsp FAILED - No ValueExpression returned");
-    return;
-  }
-
-  // Evaluate the value binding and check for bean creation
-  Object result = valueExpression.getValue(facesContext.getELContext());
-  if (result == null) {
-    out.println("/managed01.jsp FAILED - getValue() returned null");
-    return;
-  }
-  if (!(result instanceof TestBean)) {
-    out.println("/managed01.jsp FAILED - result of type " + result.getClass());
-    return;
-  }
-  Object scopedFromExternalContext = ((javax.servlet.http.HttpServletRequest)facesContext.getExternalContext().getRequest()).getAttribute("test1");
-  if (scopedFromExternalContext == null) {
-    out.println("/managed01.jsp FAILED - not created in request scope, from ExternalContext request ");
-    return;
-  }
-  Object scopedFromMap = facesContext.getExternalContext().getRequestMap().get("test1");
-  if (scopedFromMap == null) {
-    out.println("/managed01.jsp FAILED - not created in request scope, from ExternalContext Map");
-    return;
-  }
-
-
-  Object scoped = request.getAttribute("test1");
-  if (scoped == null) {
-    out.println("/managed01.jsp FAILED - not created in request scope");
-    return;
-  }
-  if (!(result == scoped)) {
-    out.println("/managed01.jsp FAILED - created bean not same as attribute");
-    return;
-  }
-
-  // Verify the property values of the created bean
-  TestBean bean = (TestBean) result;
-  StringBuffer sb = new StringBuffer();
-  if (!bean.getBooleanProperty()) {
-    sb.append("booleanProperty(" + bean.getBooleanProperty() + ")|");
-  }
-  if ((byte) 12 != bean.getByteProperty()) {
-    sb.append("byteProperty(" + bean.getByteProperty() + ")|");
-  }
-  if (123.45 != bean.getDoubleProperty()) {
-    sb.append("doubleProperty(" + bean.getDoubleProperty() + ")|");
-  }
-  if ((float) 12.34 != bean.getFloatProperty()) {
-    sb.append("floatProperty(" + bean.getFloatProperty() + ")|");
-  }
-  if (123 != bean.getIntProperty()) {
-    sb.append("intProperty(" + bean.getIntProperty() + ")|");
-  }
-  if (12345 != bean.getLongProperty()) {
-    sb.append("longProperty(" + bean.getLongProperty() + ")|");
-  }
-  if ((short) 1234 != bean.getShortProperty()) {
-    sb.append("shortProperty(" + bean.getShortProperty() + ")|");
-  }
-  if (!"This is a String property".equals(bean.getStringProperty())) {
-    sb.append("stringProperty(" + bean.getStringProperty() + ")|");
-  }
-
-  // Report any property errors
-  String errors = sb.toString();
-  if (errors.length() < 1) {
-    out.println("/managed01.jsp PASSED");
-  } else {
-    out.println("/managed01.jsp FAILED - property value errors:  " + errors);
-  }
-%>
diff --git a/jsf-ri/systest/web/managed02.jsp b/jsf-ri/systest/web/managed02.jsp
deleted file mode 100644
index 71f49ca..0000000
--- a/jsf-ri/systest/web/managed02.jsp
+++ /dev/null
@@ -1,129 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.el.ValueExpression"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate a managed bean and validate property values #2
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/component01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // Acquire a ValueExpression for the bean to be created
-  ValueExpression valueExpression = appl.getExpressionFactory().createValueExpression(facesContext.getELContext(),"#{test2}", 
-      Object.class);
-  if (valueExpression == null) {
-    out.println("/managed02.jsp FAILED - No ValueExpression returned");
-    return;
-  }
-
-  // Evaluate the value binding and check for bean creation
-  Object result = valueExpression.getValue(facesContext.getELContext());
-  if (result == null) {
-    out.println("/managed02.jsp FAILED - getValue() returned null");
-    return;
-  }
-  if (!(result instanceof TestBean)) {
-    out.println("/managed02.jsp FAILED - result of type " + result.getClass());
-    return;
-  }
-  Object scoped = request.getAttribute("test2");
-  if (scoped == null) {
-    out.println("/managed02.jsp FAILED - not created in request scope");
-    return;
-  }
-  if (!(result == scoped)) {
-    out.println("/managed02.jsp FAILED - created bean not same as attribute");
-    return;
-  }
-
-  // Verify the property values of the created bean
-  TestBean bean = (TestBean) result;
-  StringBuffer sb = new StringBuffer();
-  if (bean.getBooleanProperty()) {
-    sb.append("booleanProperty(" + bean.getBooleanProperty() + ")|");
-  }
-  if ((byte) 21 != bean.getByteProperty()) {
-    sb.append("byteProperty(" + bean.getByteProperty() + ")|");
-  }
-  if (321.54 != bean.getDoubleProperty()) {
-    sb.append("doubleProperty(" + bean.getDoubleProperty() + ")|");
-  }
-  if ((float) 21.43 != bean.getFloatProperty()) {
-    sb.append("floatProperty(" + bean.getFloatProperty() + ")|");
-  }
-  if (321 != bean.getIntProperty()) {
-    sb.append("intProperty(" + bean.getIntProperty() + ")|");
-  }
-  if (54321 != bean.getLongProperty()) {
-    sb.append("longProperty(" + bean.getLongProperty() + ")|");
-  }
-  if ((short) 4321 != bean.getShortProperty()) {
-    sb.append("shortProperty(" + bean.getShortProperty() + ")|");
-  }
-  if (!"New String Value".equals(bean.getStringProperty())) {
-    sb.append("stringProperty(" + bean.getStringProperty() + ")|");
-  }
-  TestBean.Suit suit = bean.getSuit();
-  if (suit != TestBean.Suit.Hearts) {
-      sb.append("suit(" + suit.toString() + ")|");
-  }
-  suit = bean.getReferencedSuit();
-  if (suit != TestBean.Suit.Spades) {
-      sb.append("referencedSuit(" + suit.toString() + ")|");
-  }
-
-  // Report any property errors
-  String errors = sb.toString();
-  if (errors.length() < 1) {
-    out.println("/managed02.jsp PASSED");
-  } else {
-    out.println("/managed02.jsp FAILED - property value errors:  " + errors);
-  }
-%>2
diff --git a/jsf-ri/systest/web/managed03.jsp b/jsf-ri/systest/web/managed03.jsp
deleted file mode 100644
index e86e158..0000000
--- a/jsf-ri/systest/web/managed03.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Property that violates scope rules</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Property that violates scope rules</h1>
-
-<f:view>
-
-  <h:form>
- 
-    <h:outputText value="#{test4.stringProperty}" />
-   
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/managed04.jsp b/jsf-ri/systest/web/managed04.jsp
deleted file mode 100644
index 0cbda87..0000000
--- a/jsf-ri/systest/web/managed04.jsp
+++ /dev/null
@@ -1,64 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Verify property ordering</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Verify property ordering</h1>
-
-<f:view>
-
-  <h:form>
- 
-    <h:outputText value="#{propertyOrder.order}" /> 
-    <h:outputText value="#{propertyOrder.listProperty[0]}" />
-    <h:outputText value="#{propertyOrder.listProperty[1]}" />
-    <h:outputText value="#{propertyOrder.listProperty[2]}" />
-    <h:outputText value="#{propertyOrder.listProperty[3]}" />
-   
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/managed07.jsp b/jsf-ri/systest/web/managed07.jsp
deleted file mode 100644
index 3ee0789..0000000
--- a/jsf-ri/systest/web/managed07.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Property that violates scope rules</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Property that violates scope rules</h1>
-
-<% try { %> 
-<f:view>
-
-  <h:form>
-
-    
-    <h:outputText value="#{cyclic1.bean.stringProperty}" />
-   
-  </h:form>
-
-</f:view>
-<% 
-  } catch (Exception fe) {
-       fe.printStackTrace();
-       if (!(fe instanceof javax.faces.FacesException)) {
-           throw fe;
-       }
-   }
-%>
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/managed08.jsp b/jsf-ri/systest/web/managed08.jsp
deleted file mode 100644
index d95a55a..0000000
--- a/jsf-ri/systest/web/managed08.jsp
+++ /dev/null
@@ -1,107 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Managed Bean Lifecycle Annotations</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Managed Bean Lifecycle Annotations</h1>
-
-<f:view>
-
-  <h:form id="form">
-  
-  <h:outputText value="#{noneBean.appendRequestMarker}" />
-
-  <p>requestBean PostConstruct: <h:outputText value="#{requestBean.postConstructCalled}" /></p>
-  <p>requestBean PreDestroy: <h:outputText value="#{requestBean.preDestroyCalled}" /></p>
-
-  <p>sessionBean PostConstruct: <h:outputText value="#{sessionBean.postConstructCalled}" /></p>
-  <p>sessionBean PreDestroy: <h:outputText value="#{sessionBean.preDestroyCalled}" /></p>
-
-  <p>applicationBean PostConstruct: <h:outputText value="#{applicationBean.postConstructCalled}" /></p>
-  <p>applicationBean PreDestroy: <h:outputText value="#{applicationBean.preDestroyCalled}" /></p>
-  
-  <p>previous request status: <pre><h:outputText value="#{applicationScope.previousRequestStatus}" /></pre></p>
-  
-  <p><h:commandButton id="removeRequestBean" value="remove request bean" action="#{noneBean.removeRequestBean}" /></p>
-
-  <p><h:commandButton id="removeRequestBean2" value="remove request bean2" action="#{noneBean.removeRequestBean2}" /></p>
-
-  <p><h:commandButton id="replaceRequestBean" value="replace request bean" action="#{noneBean.replaceRequestBean}" /></p>
-
-  <p><h:commandButton id="replaceRequestBean2" value="replace request bean2" action="#{noneBean.replaceRequestBean2}" /></p>
-       
-  <p><h:commandButton id="removeSessionBean" value="remove session bean" action="#{noneBean.removeSessionBean}" /></p>
-
-  <p><h:commandButton id="removeSessionBean2" value="remove session bean2" action="#{noneBean.removeSessionBean2}" /></p>
-
-  <p><h:commandButton id="replaceSessionBean" value="replace session bean" action="#{noneBean.replaceSessionBean}" /></p>
-
-  <p><h:commandButton id="replaceSessionBean2" value="replace session bean2" action="#{noneBean.replaceSessionBean2}" /></p>
-
-  <p><h:commandButton id="removeApplicationBean" value="remove application bean" action="#{noneBean.removeApplicationBean}" /></p>
-
-  <p><h:commandButton id="removeApplicationBean2" value="remove application bean2" action="#{noneBean.removeApplicationBean2}" /></p>
-
-  <p><h:commandButton id="replaceApplicationBean" value="replace application bean" action="#{noneBean.replaceApplicationBean}" /></p>
-
-  <p><h:commandButton id="replaceApplicationBean2" value="replace application bean2" action="#{noneBean.replaceApplicationBean2}" /></p>
-       
-  <p><h:commandButton id="invalidateSession" value="invalidate session" action="#{noneBean.invalidateSession}" /></p>
-
-  <p><h:commandButton id="clearRequestMap" value="clear request map" action="#{noneBean.clearRequestMap}" /></p>
-
-  <p><h:commandButton id="clearRequestMapTwice" value="clear request map twice" action="#{noneBean.clearRequestMapTwice}" /></p>
-
-  <p><h:commandButton id="clearSessionMap" value="clear session map" action="#{noneBean.clearSessionMap}" /></p>
-
-  <p><h:commandButton id="clearSessionMapTwice" value="clear session map twice" action="#{noneBean.clearSessionMapTwice}" /></p>
-
-  <p><h:commandButton id="clearStatusMessage" value="clear status message" action="#{noneBean.clearStatusMessage}" /></p>
-  
-  <p><h:commandButton id="reload" value="reload" />
-  </h:form>
-
-</f:view>
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/message01.jsp b/jsf-ri/systest/web/message01.jsp
deleted file mode 100644
index a21f1d4..0000000
--- a/jsf-ri/systest/web/message01.jsp
+++ /dev/null
@@ -1,116 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="java.util.Locale"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.application.FacesMessage"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="com.sun.faces.util.MessageFactory"
-%><%@ page import="javax.faces.component.UIViewRoot, javax.faces.render.RenderKitFactory"
-%><%
-
-    // Initialize list of message ids
-    String list[] = {
-          "javax.faces.validator.NOT_IN_RANGE",
-          "javax.faces.validator.DoubleRangeValidator.MAXIMUM",
-          "javax.faces.validator.DoubleRangeValidator.MINIMUM",
-          "javax.faces.validator.DoubleRangeValidator.TYPE",
-          "javax.faces.validator.LengthValidator.MAXIMUM",
-          "javax.faces.validator.LengthValidator.MINIMUM",
-          "javax.faces.validator.LongRangeValidator.MAXIMUM",
-          "javax.faces.validator.LongRangeValidator.MINIMUM",
-          "javax.faces.validator.LongRangeValidator.TYPE",
-          "javax.faces.component.UIInput.REQUIRED"
-    };
-
-    // Acquire the FacesContext instance for this request
-    FacesContext facesContext = FacesContext.getCurrentInstance();
-    // Acquire our Application instance
-    ApplicationFactory afactory = (ApplicationFactory)
-          FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-    Application appl = afactory.getApplication();
-     if (appl == null) {
-        out.println("/message01.jsp FAILED - No Application returned");
-        return;
-    }
-    if (facesContext == null) {
-        out.println("/message01.jsp FAILED - No FacesContext returned");
-        return;
-    }
-    UIViewRoot root = (UIViewRoot)
-          appl.createComponent(UIViewRoot.COMPONENT_TYPE);
-    root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-    facesContext.setViewRoot(root);   
-
-    // Test for replacing a Standard Validator Message
-    facesContext.getViewRoot().setLocale(new Locale("en", "US"));
-    FacesMessage msg = MessageFactory.getMessage(facesContext,
-                                                 "javax.faces.validator.DoubleRangeValidator.LIMIT");
-    if (!msg.getSummary()
-          .equals("Validation Error:This summary replaces the RI summary")) {
-        out.println("/message01.jsp FAILED - Missing replacement message");
-        return;
-    }
-
-    // Check message identifiers that should be present (en_US)
-    facesContext.getViewRoot().setLocale(new Locale("en", "US"));
-    for (int i = 0; i < list.length; i++) {
-        FacesMessage message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message01.jsp FAILED - Missing en_US message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // Check message identifiers that should be present (fr_FR)
-    facesContext.getViewRoot().setLocale(new Locale("fr", "FR"));
-    for (int i = 0; i < list.length; i++) {
-        FacesMessage message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message01.jsp FAILED - Missing fr_FR message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // All tests passed
-    out.println("/message01.jsp PASSED");
-
-%>
diff --git a/jsf-ri/systest/web/message02.jsp b/jsf-ri/systest/web/message02.jsp
deleted file mode 100644
index b1bc66c..0000000
--- a/jsf-ri/systest/web/message02.jsp
+++ /dev/null
@@ -1,101 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="java.util.Locale"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.application.FacesMessage"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="com.sun.faces.util.MessageFactory"
-%><%@ page import="javax.faces.component.UIViewRoot, javax.faces.render.RenderKitFactory"
-%><%
-
-    // Initialize list of message ids
-    String list[] = {
-          // PENDING(craigmcc) - put message ids here
-    };
-
-    // Acquire the FacesContext instance for this request
-    FacesContext facesContext = FacesContext.getCurrentInstance();
-    if (facesContext == null) {
-        out.println("/message02.jsp FAILED - No FacesContext returned");
-        return;
-    }
-
-    ApplicationFactory afactory = (ApplicationFactory)
-          FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-    Application appl = afactory.getApplication();
-    if (appl == null) {
-        out.println("/message02.jsp FAILED - No Application returned");
-        return;
-    }
-
-    UIViewRoot root = (UIViewRoot)
-          appl.createComponent(UIViewRoot.COMPONENT_TYPE);
-    root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-    facesContext.setViewRoot(root);
-
-    facesContext.setViewRoot(root);
-    // Acquire our Application instance
-
-    // Check message identifiers that should be present (en_US)
-    facesContext.getViewRoot().setLocale(new Locale("en", "US"));
-    for (int i = 0; i < list.length; i++) {
-        FacesMessage message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message02.jsp FAILED - Missing en_US message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // Check message identifiers that should be present (fr_FR)
-    facesContext.getViewRoot().setLocale(new Locale("fr", "FR"));
-    for (int i = 0; i < list.length; i++) {
-        FacesMessage message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message02.jsp FAILED - Missing fr_FR message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // All tests passed
-    out.println("/message02.jsp PASSED");
-
-%>
diff --git a/jsf-ri/systest/web/message03.jsp b/jsf-ri/systest/web/message03.jsp
deleted file mode 100644
index 6f8c9fa..0000000
--- a/jsf-ri/systest/web/message03.jsp
+++ /dev/null
@@ -1,126 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="java.util.Locale"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.application.FacesMessage"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="com.sun.faces.util.MessageFactory"
-%><%@ page import="javax.faces.component.UIViewRoot, javax.faces.render.RenderKitFactory"
-%><%
-
-    // Initialize list of message ids
-    String list[] = {
-          "Custom1A",
-          "Custom1B",
-          "Custom1C",
-    };
-
-    // Acquire the FacesContext instance for this request
-    FacesContext facesContext = FacesContext.getCurrentInstance();
-    ApplicationFactory afactory = (ApplicationFactory)
-          FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-    Application appl = afactory.getApplication();
-    if (appl == null) {
-        out.println("/message03.jsp FAILED - No Application returned");
-        return;
-    }
-    if (facesContext == null) {
-        out.println("/message03.jsp FAILED - No FacesContext returned");
-        return;
-    }
-    UIViewRoot root = (UIViewRoot)
-          appl.createComponent(UIViewRoot.COMPONENT_TYPE);
-    root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-    facesContext.setViewRoot(root);
-
-    FacesMessage message = null;
-
-    // Check message identifiers that should be present (en_US)
-    facesContext.getViewRoot().setLocale(new Locale("en", "US"));
-    for (int i = 0; i < list.length; i++) {
-        message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message03.jsp FAILED - Missing en_US message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // Check specific message characteristics (en_US)
-    message = MessageFactory.getMessage(facesContext, "Custom1B");
-    if (!"This Is Custom1B Detail (en)".equals(message.getDetail())) {
-        out.println("/message03.jsp FAILED - Bad en_US detail '" +
-                    message.getDetail() + "'");
-        return;
-    }
-    if (!"This Is Custom1B Summary (en)".equals(message.getSummary())) {
-        out.println("/message03.jsp FAILED - Bad en_US summary '" +
-                    message.getSummary() + "'");
-        return;
-    }
-
-    // Check message identifiers that should be present (fr_FR)
-    facesContext.getViewRoot().setLocale(new Locale("fr", "FR"));
-    for (int i = 0; i < list.length; i++) {
-        message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message03.jsp FAILED - Missing fr_FR message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // Check specific message characteristics (fr_FR)
-    message = MessageFactory.getMessage(facesContext, "Custom1B");
-    if (!"This Is Custom1B Detail (fr)".equals(message.getDetail())) {
-        out.println("/message03.jsp FAILED - Bad fr_FR detail '" +
-                    message.getDetail() + "'");
-        return;
-    }
-    if (!"This Is Custom1B Summary (fr)".equals(message.getSummary())) {
-        out.println("/message03.jsp FAILED - Bad fr_FR summary '" +
-                    message.getSummary() + "'");
-        return;
-    }
-
-    // All tests passed
-    out.println("/message03.jsp PASSED");
-
-%>
diff --git a/jsf-ri/systest/web/message04.jsp b/jsf-ri/systest/web/message04.jsp
deleted file mode 100644
index 7ad3dd8..0000000
--- a/jsf-ri/systest/web/message04.jsp
+++ /dev/null
@@ -1,127 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="java.util.Locale"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.application.FacesMessage"
-%><%@ page import="com.sun.faces.util.MessageFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.component.UIViewRoot, javax.faces.render.RenderKitFactory"
-%><%
-
-    // Initialize list of message ids
-    String list[] = {
-          "Custom2A",
-          "Custom2B",
-          "Custom2C",
-    };
-
-// Acquire the FacesContext instance for this request
-    FacesContext facesContext = FacesContext.getCurrentInstance();
-    ApplicationFactory afactory = (ApplicationFactory)
-          FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-    Application appl = afactory.getApplication();
-    if (appl == null) {
-        out.println("/message03.jsp FAILED - No Application returned");
-        return;
-    }
-    if (facesContext == null) {
-        out.println("/message03.jsp FAILED - No FacesContext returned");
-        return;
-    }
-    UIViewRoot root = (UIViewRoot)
-          appl.createComponent(UIViewRoot.COMPONENT_TYPE);
-    root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-    facesContext.setViewRoot(root);
-
-
-    FacesMessage message = null;
-
-    // Check message identifiers that should be present (en_US)
-    facesContext.getViewRoot().setLocale(new Locale("en", "US"));
-    for (int i = 0; i < list.length; i++) {
-        message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message04.jsp FAILED - Missing en_US message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // Check specific message characteristics (en_US)
-    message = MessageFactory.getMessage(facesContext, "Custom2B");
-    if (!"This Is Custom2B Detail (en)".equals(message.getDetail())) {
-        out.println("/message04.jsp FAILED - Bad en_US detail '" +
-                    message.getDetail() + "'");
-        return;
-    }
-    if (!"This Is Custom2B Summary (en)".equals(message.getSummary())) {
-        out.println("/message04.jsp FAILED - Bad en_US summary '" +
-                    message.getSummary() + "'");
-        return;
-    }
-
-    // Check message identifiers that should be present (fr_FR)
-    facesContext.getViewRoot().setLocale(new Locale("fr", "FR"));
-    for (int i = 0; i < list.length; i++) {
-        message = MessageFactory.getMessage(facesContext, list[i]);
-        if (message == null) {
-            out.println("/message04.jsp FAILED - Missing fr_FR message '" +
-                        list[i] + "'");
-            return;
-        }
-    }
-
-    // Check specific message characteristics (fr_FR)
-    message = MessageFactory.getMessage(facesContext, "Custom2B");
-    if (!"This Is Custom2B Detail (fr)".equals(message.getDetail())) {
-        out.println("/message04.jsp FAILED - Bad fr_FR detail '" +
-                    message.getDetail() + "'");
-        return;
-    }
-    if (!"This Is Custom2B Summary (fr)".equals(message.getSummary())) {
-        out.println("/message04.jsp FAILED - Bad fr_FR summary '" +
-                    message.getSummary() + "'");
-        return;
-    }
-
-    // All tests passed
-    out.println("/message04.jsp PASSED");
-
-%>
diff --git a/jsf-ri/systest/web/methodref01.jsp b/jsf-ri/systest/web/methodref01.jsp
deleted file mode 100644
index 120d076..0000000
--- a/jsf-ri/systest/web/methodref01.jsp
+++ /dev/null
@@ -1,93 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Method References</title>
-  </head>
-
-  <body>
-    <h1>Test Method References</h1>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-    <c:set scope="application" var="javax.faces.VALIDATE_EMPTY_FIELDS"
-           value="false" />
-
-    <f:view>  
-      <h:form id="form">
-
-	<hr>
-	<p>Press a button, see some text.</p>
-        <h:inputText readonly="true" id="buttonStatus" 
-                      value="#{methodRef.buttonPressedOutcome}"/>
-        <h:commandButton id="button1" value="button1"
-                           action="#{methodRef.button1Pressed}"/>
-        <h:commandLink id="button2" action="#{methodRef.button2Pressed}">
-          <h:outputText value="button2"/>
-        </h:commandLink>
-        <h:commandButton id="button3" value="button3"
-                           actionListener="#{methodRef.button3Pressed}"/>
-                            <h:message for="buttonStatus"/>
-        <hr>
-	<p>the only valid value is batman</p>
-        <h:inputText id="toValidate" 
-                      validator="#{methodRef.validateInput}"/>
-        <h:commandButton id="validate" value="validate"/>
-        <h:message for="toValidate"/>
-
-        <hr>
-	<p>test value change</p>
-        <h:inputText id="toChange" 
-                      valueChangeListener="#{methodRef.valueChange}"/>
-        <h:commandButton id="changeValue" value="changeValue"/>
-        <h:message for="toChange"/>
-      </h:form>
-    </f:view>
-
-
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Fri Oct 31 10:49:23 Eastern Standard Time 2003 -->
-<!-- hhmts start -->
-Last modified: Thu Feb 26 13:28:40 EST 2009
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/methodref02.jsp b/jsf-ri/systest/web/methodref02.jsp
deleted file mode 100644
index 55342cc..0000000
--- a/jsf-ri/systest/web/methodref02.jsp
+++ /dev/null
@@ -1,108 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.MethodBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%@ page import="com.sun.faces.systest.model.TestBeanSubclass"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBeanSubclass bean = new TestBeanSubclass();
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testMB", bean);
-  MethodBinding mb;
-  Class signature[] = new Class[] { String.class };
-  Object params[] = new Object[1];
-  Object result;
-
-  // Access public methods defined on the bean class itself
-  try {
-      mb = context.getApplication().createMethodBinding
-        ("#{testMB.setExtraProperty}", signature);
-      params[0] = "New Extra Property Value";
-      mb.invoke(context, params);
-  } catch (Exception e) {
-    out.println("/methodref02.jsp FAILED - setExtraProperty() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-  try {
-      mb = context.getApplication().createMethodBinding
-        ("#{testMB.getExtraProperty}", null);
-      result = mb.invoke(context, null);
-      if (!params[0].equals(result)) {
-          out.println("/methodref02.jsp FAILED - getExtraProperty() returned: " + result);
-          return;
-      }
-  } catch (Exception e) {
-    out.println("/methodref02.jsp FAILED - getExtraProperty() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Access public methods defined on the superclass
-  try {
-      mb = context.getApplication().createMethodBinding
-        ("#{testMB.setStringProperty}", signature);
-      params[0] = "New String Property Value";
-      mb.invoke(context, params);
-  } catch (Exception e) {
-    out.println("/methodref02.jsp FAILED - setStringProperty() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-  try {
-      mb = context.getApplication().createMethodBinding
-        ("#{testMB.getStringProperty}", null);
-      result = mb.invoke(context, null);
-      if (!params[0].equals(result)) {
-          out.println("/methodref02.jsp FAILED - getStringProperty() returned: " + result);
-          return;
-      }
-  } catch (Exception e) {
-    out.println("/methodref02.jsp FAILED - getStringProperty() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Report success
-  out.println("/methodref02.jsp PASSED");
-
-%>
diff --git a/jsf-ri/systest/web/phaseListener01.jsp b/jsf-ri/systest/web/phaseListener01.jsp
deleted file mode 100644
index d12472e..0000000
--- a/jsf-ri/systest/web/phaseListener01.jsp
+++ /dev/null
@@ -1,91 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.context.FacesContextFactory"
-%><%@ page import="javax.faces.render.RenderKitFactory"
-%><%@ page import="javax.faces.component.UIViewRoot"
-%><%@ page import="javax.faces.lifecycle.Lifecycle"
-%><%@ page import="javax.faces.lifecycle.LifecycleFactory"
-%><%@ page import="javax.faces.event.PhaseId"
-%><%@ page import="javax.faces.event.PhaseListener"
-%><%@ page import="com.sun.faces.systest.lifecycle.ReloadPhaseListenerImpl"
-%><%
-
-// This test demonstrates the request processing lifecycle of 
-// a "non-faces" request --->  faces response
-// It uses the "default" renderkit to show how a renderkit can be
-// set.
-//
-    // Create a Lifecycle
-    //
-    LifecycleFactory lFactory = (LifecycleFactory)
-        FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-    Lifecycle lifecycle = lFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-    if (lifecycle == null) {
-        out.println("/phaseListener01.jsp FAILED - Could not create Lifecycle");
-        return;
-    }
-
-    // Create a FacesContext 
-    //
-    FacesContextFactory facesContextFactory = (FacesContextFactory)
-        FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
-    FacesContext facesContext = facesContextFactory.getFacesContext(
-        config.getServletContext(), request, response, lifecycle);
-    if (facesContext == null) {
-        out.println("/phaseListener01.jsp FAILED - Could not create FacesContext");
-        return;
-    }
-
-    // Acquire a View..
-    //
-    UIViewRoot view = facesContext.getApplication().getViewHandler().
-        createView(facesContext, "/phaseListener01A.jsp");
-
-    // Set the RenderKitFactory.HTML_BASIC_RENDER_KIT renderkit Id
-    //
-    view.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-    facesContext.setViewRoot(view);
-
-    PhaseListener phaseListener = new ReloadPhaseListenerImpl(PhaseId.ANY_PHASE);
-    lifecycle.addPhaseListener(phaseListener);
-    lifecycle.execute(facesContext);
-    lifecycle.render(facesContext);
-
-%>
diff --git a/jsf-ri/systest/web/phaseListener01A.jsp b/jsf-ri/systest/web/phaseListener01A.jsp
deleted file mode 100644
index b8dca19..0000000
--- a/jsf-ri/systest/web/phaseListener01A.jsp
+++ /dev/null
@@ -1,45 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%
-    String pageRefresh = System.getProperty("PageRefreshPhases");
-
-    if (pageRefresh.equals("true")) {
-      out.println("/phaseListener01.jsp PASSED");
-    } else {
-      out.println("/phaseListener01.jsp FAILED");
-    }
-%>
diff --git a/jsf-ri/systest/web/positiveTagFile.jsp b/jsf-ri/systest/web/positiveTagFile.jsp
deleted file mode 100644
index 792c968..0000000
--- a/jsf-ri/systest/web/positiveTagFile.jsp
+++ /dev/null
@@ -1,94 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
- 
- Redistribution and use in source and binary forms, with or
- without modification, are permitted provided that the following
- conditions are met:
- 
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- 
- - Redistribution in binary form must reproduce the above
-   copyright notice, this list of conditions and the following
-   disclaimer in the documentation and/or other materials
-   provided with the distribution.
-    
- Neither the name of Sun Microsystems, Inc. or the names of
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-  
- This software is provided "AS IS," without a warranty of any
- kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
- WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
- EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
- DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
- RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
- ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
- FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
- SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
- CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
- THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
- BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-  
- You acknowledge that this software is not designed, licensed or
- intended for use in the design, construction, operation or
- maintenance of any nuclear facility.
--->
-
-<HTML>
-    <HEAD> <title>positiveTagFile</title> </HEAD>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
-
-    <body bgcolor="white">
-    <f:view>
-    <h:form id="helloForm" >
-
-<p>Here is the outputLink: <tags:outputLink /></p>
-
-
-	 <h:commandButton id="submit" action="success" value="Submit" />
-         <p>
-
-    </h:form>
-    </f:view>
-    </body>
-</HTML>  
diff --git a/jsf-ri/systest/web/redirect.jsp b/jsf-ri/systest/web/redirect.jsp
deleted file mode 100644
index 345b375..0000000
--- a/jsf-ri/systest/web/redirect.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <f:view>  
-         <h:form id="redirect">
-	   <h:outputText value="Label" /> 
-	   <p>
-	   <h:commandButton id="submit" action="success" value="submit"/>
-         </h:form>
-       </f:view>
-
-</HTML>
diff --git a/jsf-ri/systest/web/redirect1.jsp b/jsf-ri/systest/web/redirect1.jsp
deleted file mode 100644
index 507b3ff..0000000
--- a/jsf-ri/systest/web/redirect1.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Standard RenderKit Demo - Thank You Page</TITLE> </HEAD>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-    <H3>Thank You Page </H3>
-    <hr>
-
-       <f:view>
-        <h:form>
-	   <h:outputText value="Thank you" style="color: blue"/> 
-        </h:form>
-     </f:view>
-</HTML>
diff --git a/jsf-ri/systest/web/regression/AreaTextRowsAttrTest.jsp b/jsf-ri/systest/web/regression/AreaTextRowsAttrTest.jsp
deleted file mode 100644
index 5b3617a..0000000
--- a/jsf-ri/systest/web/regression/AreaTextRowsAttrTest.jsp
+++ /dev/null
@@ -1,57 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ page contentType="text/html" language="java" %>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%--
-   Regression info:
-      Ensure rows attribute is rendered when using the 
-      HTML text area component.  
-   Issue 306: https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=306
---%>
-
-<html>
-    <head>
-        <title>Text Area Row Attribute Regression Test</title>        
-    </head>
-    <body>
-        <f:view>
-            <h:inputTextarea rows="30" />
-        </f:view>
-    </body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/regression/InjectUserDefJS.jsp b/jsf-ri/systest/web/regression/InjectUserDefJS.jsp
deleted file mode 100644
index afac1a5..0000000
--- a/jsf-ri/systest/web/regression/InjectUserDefJS.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ page contentType="text/html" language="java" %>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%--
-   Regression info:
-      Ensure rows attribute is rendered when using the 
-      HTML text area component.  
-   Issue 312: https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=312
---%>
-
-<html>
-    <head>
-        <title>User Defined JS Injection Test</title>        
-    </head>
-    <body>
-        <f:view>
-            <h:form>
-                <h:commandLink value="Link" onclick="alert('Are you sure?')"/>
-                <h:commandButton value="Button" onclick="alert('Are you sure?')"/>
-            </h:form>
-        </f:view>
-    </body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/regression/SelectOneManySizeAttrTest.jsp b/jsf-ri/systest/web/regression/SelectOneManySizeAttrTest.jsp
deleted file mode 100644
index b6766a8..0000000
--- a/jsf-ri/systest/web/regression/SelectOneManySizeAttrTest.jsp
+++ /dev/null
@@ -1,61 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ page contentType="text/html" language="java" %>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<%--
-   Regression info:
-      Ensure size attribute is only displayed once 
-      Bug 6410301
---%>
-
-<html>
-    <head>
-        <title>Select{One,Many}ListBox Size Attribute Test</title>        
-    </head>
-    <body>
-        <f:view>
-            <h:selectOneListbox value="#{requestScope.selection}" size="5">
-                <f:selectItem itemLabel="val1" itemValue="val1"/>
-            </h:selectOneListbox>
-            <h:selectManyListbox value="#{requestScope.selection}" size="5">
-                <f:selectItem itemLabel="val1" itemValue="val1"/>
-            </h:selectManyListbox>          
-        </f:view>
-    </body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/regression/uninstallListeners.xhtml b/jsf-ri/systest/web/regression/uninstallListeners.xhtml
deleted file mode 100644
index 93c0ff5..0000000
--- a/jsf-ri/systest/web/regression/uninstallListeners.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-</h:head>
-<h:body>
-  <h:form prependId="false">
-
-#{postAddToViewListener.uninstallEvent}
-#{postRestoreStateListener.uninstallEvent}
-
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/regression/verifyBuildBeforeRestore.xhtml b/jsf-ri/systest/web/regression/verifyBuildBeforeRestore.xhtml
deleted file mode 100644
index 8e23c56..0000000
--- a/jsf-ri/systest/web/regression/verifyBuildBeforeRestore.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-  <title>A Simple JavaServer Faces 2.0 View</title>
-</h:head>
-<h:body>
-  <h:form prependId="false">
-
-#{postAddToViewListener.installEvent}
-#{postRestoreStateListener.installEvent}
-
-      <p>Enter first name: <h:inputText id="input" value="#{test1.stringProperty}" /></p>
-
-      <p>Message: #{message}</p>
-
-      <p><h:commandButton id="submit" value="submit" /></p>     
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/render/commandButtonButton.xhtml b/jsf-ri/systest/web/render/commandButtonButton.xhtml
deleted file mode 100644
index f868a7c..0000000
--- a/jsf-ri/systest/web/render/commandButtonButton.xhtml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Test Command Button Type = Button Page</title>
-</h:head>
-<h:body>
-    <h:outputScript library="javax.faces" name="jsf.js" target="head"/>
-    <h1>Test type="button"</h1>
-    <h:form id="countForm" prependId="false">
-        <h:outputText id="out1" value="#{ajaxrequest.count}"/>
-        <br/>
-        <!-- Increment the counter on the server, and the client -->
-        <h:commandButton id="button1" type="button" value="Count">
-            <f:ajax render="out1"/>
-        </h:commandButton>
-        <br/>
-        <h:commandButton id="button2" type="button" value="Count"
-                         onclick="jsf.ajax.request(this,event,{render: 'out1'})"/>
-        <!-- Resets the counter, doesn't refresh the page -->
-        <h:commandButton id="reset" value="reset" actionListener="#{ajaxrequest.resetCount}">
-            <f:ajax execute="reset" render="out1"/>
-        </h:commandButton>
-    </h:form>
-    <!-- Contained outside the form - shouldn't update except for full page load -->
-    <h:outputText id="outside" value="#{ajaxrequest.count}"/>
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/render/messageRender.xhtml b/jsf-ri/systest/web/render/messageRender.xhtml
deleted file mode 100644
index ea5146e..0000000
--- a/jsf-ri/systest/web/render/messageRender.xhtml
+++ /dev/null
@@ -1,104 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-    <title>Test Message Render</title>
-</h:head>
-<h:body>
-    <h1>Test Message Render</h1>
-    <h2> Test with id</h2>
-    <h:form id="testform1">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/render/messageRender"/>
-        <h:messages id="msgs"/>
-    </h:form>
-    <br/>
-    <h:form id="testform1a">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/render/messageRender"/>
-        <h:messages id="msgs" layout="table"/>
-    </h:form>
-    <br/>
-    <h:form id="testform2">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/render/messageRender"/>
-        <br/>
-        <h:message for="in1" id="msg"/>
-    </h:form>
-
-    <h2>Test without id</h2>
-    <h:form id="testform3">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/render/messageRender"/>
-        <h:messages/>
-    </h:form>
-    <br/>
-    <h:form id="testform3a">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/render/messageRender"/>
-        <h:messages layout="table"/>
-    </h:form>
-    <br/>
-    <h:form id="testform4">
-        <h:inputText id="in1" value="#{numberholder.number}"/>
-        <br/>
-        <h:commandButton id="button2" type="submit" value="Count"
-                         action="/render/messageRender"/>
-        <br/>
-        <h:message for="in1"/>
-    </h:form>
-
-
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/render/outputScriptQuery.xhtml b/jsf-ri/systest/web/render/outputScriptQuery.xhtml
deleted file mode 100644
index eefeb27..0000000
--- a/jsf-ri/systest/web/render/outputScriptQuery.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>Script QueryString Test</title>
-</h:head>
-<h:body bgcolor="white">
-    <h:form id="forumForm">
-        <h:outputScript name="simple.js?mod=test"/>
-        <h:outputScript name="simple2.js"/>
-        <h:outputScript library="javax.faces" name="jsf.js"/>
-
-    </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/render/outputScriptStyleNested.xhtml b/jsf-ri/systest/web/render/outputScriptStyleNested.xhtml
deleted file mode 100644
index 6ced3be..0000000
--- a/jsf-ri/systest/web/render/outputScriptStyleNested.xhtml
+++ /dev/null
@@ -1,164 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>Test nested output script content</title>
-</h:head>
-<h:body>
-    <h:form prependId="false">
-
-<h1>Case 1: script, nested: yes; target: yes; name: yes;</h1>
-
-     <h:outputScript target="head" name="case1.js">
-      alert("case1");
-
-     </h:outputScript>
-
-<h1>Case 2: script, nested: yes; target: yes; name: no;</h1>
-
-     <h:outputScript target="body">
-      alert("case2");
-
-     </h:outputScript>
-
-<h1>Case 3: script, nested: yes; target: no; name: yes;</h1>
-
-     <h:outputScript name="case3.js">
-      alert("case3");
-
-     </h:outputScript>
-
-<h1>Case 4: script, nested: no; target: yes; name: yes;</h1>
-
-     <h:outputScript target="head" name="case4.js"/>
-
-
-<h1>Case 5: script, nested: no; target: no; name: no;</h1>
-
-     <h:outputScript />
-
-<h1>Case 6: script, nested: no; target: no; name: yes;</h1>
-
-     <h:outputScript name="case6.js"/>
-
-<h1>Case 7: script, nested: no; target: yes; name: no;</h1>
-
-     <h:outputScript target="head"/>
-
-<h1>Case 8: script, nested: yes; target: no; name: no;</h1>
-
-     <h:outputScript>
-      alert("case8");
-     </h:outputScript>
-
-<h1>Case 9: Stylesheet, nested: yes; target: yes; name: yes;</h1>
-
-     <h:outputStylesheet target="head" name="case9.css">
-
-.case9 {
-
-color: red;
-
-}
-      
-
-     </h:outputStylesheet>
-
-<h1>Case 10: Stylesheet, nested: yes; target: yes; name: no;</h1>
-
-     <h:outputStylesheet target="body">
-
-.case10 {
-
-color: blue;
-
-}
-
-
-     </h:outputStylesheet>
-
-<h1>Case 11: Stylesheet, nested: yes; target: no; name: yes;</h1>
-
-     <h:outputStylesheet name="case11.css">
-
-.case11 {
-
-color: green;
-
-}
-
-     </h:outputStylesheet>
-
-<h1>Case 12: Stylesheet, nested: no; target: yes; name: yes;</h1>
-
-     <h:outputStylesheet target="head" name="case12.css"/>
-
-<h1>Case 13: Stylesheet, nested: no; target: no; name: no;</h1>
-
-     <h:outputStylesheet />
-
-<h1>Case 14: Stylesheet, nested: no; target: no; name: yes;</h1>
-
-     <h:outputStylesheet name="case14.css"/>
-
-<h1>Case 15: Stylesheet, nested: no; target: yes; name: no;</h1>
-
-     <h:outputStylesheet target="head"/>
-
-<h1>Case 16: Stylesheet, nested: yes; target: no; name: no;</h1>
-
-     <h:outputStylesheet>
-
-.case16 {
-
-color: orange;
-
-}
-
-     </h:outputStylesheet>
-
-
-    </h:form>
-
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/render/selectStarNoSelection.jspx b/jsf-ri/systest/web/render/selectStarNoSelection.jspx
deleted file mode 100644
index cded0b1..0000000
--- a/jsf-ri/systest/web/render/selectStarNoSelection.jspx
+++ /dev/null
@@ -1,170 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:jsp="http://java.sun.com/JSP/Page"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xml:lang="en" lang="en">
-<jsp:output doctype-root-element="html"
-            doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-            doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
-<jsp:directive.page contentType="application/xhtml+xml; charset=UTF-8"/>
-<head>
-    <title>Select* with noSelectionOption</title>
-</head>
-<body bgcolor="white">
-<f:view>
-    <h:form prependId="false">
-
-<h1>SelectOneListbox</h1>
-
-<p>
-
-       <h:selectOneListbox id="selectOneListbox" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneListbox>
-
-</p>
-
-<h1>SelectOneMenu</h1>
-
-<p>
-
-       <h:selectOneMenu id="selectOneMenu" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneMenu>
-
-</p>
-
-<h1>SelectOneRadio</h1>
-
-<p>
-
-       <h:selectOneRadio id="selectOneRadio" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneRadio>
-
-</p>
-
-<h1>SelectManyCheckbox</h1>
-
-<p>
-
-       <h:selectManyCheckbox id="selectManyCheckbox" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyCheckbox>
-
-</p>
-
-<h1>SelectManyListbox</h1>
-
-<p>
-
-       <h:selectManyListbox id="selectManyListbox" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyListbox>
-
-</p>
-
-<h1>SelectManyMenu</h1>
-
-<p>
-
-       <h:selectManyMenu id="selectManyMenu" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyMenu>
-
-</p>
-
-
-
-<p>
-
-       <h:commandButton value="submit" />
-
-</p>
-
-       <p> messages: <h:messages /> </p>
-
-
-
-    </h:form>
-</f:view>
-
-<p>
-    <a href="http://validator.w3.org/check?uri=referer"><img
-          src="http://www.w3.org/Icons/valid-xhtml10"
-          alt="Valid XHTML 1.0!" height="31" width="88"/></a>
-</p>
-</body>
-</html>  
diff --git a/jsf-ri/systest/web/render/selectStarNoSelection.xhtml b/jsf-ri/systest/web/render/selectStarNoSelection.xhtml
deleted file mode 100644
index 1ddf498..0000000
--- a/jsf-ri/systest/web/render/selectStarNoSelection.xhtml
+++ /dev/null
@@ -1,160 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>Test select* with noselection</title>
-</h:head>
-<h:body>
-    <h:form prependId="false">
-
-<h1>SelectOneListbox</h1>
-
-<p>
-
-       <h:selectOneListbox id="selectOneListbox" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneListbox>
-
-</p>
-
-<h1>SelectOneMenu</h1>
-
-<p>
-
-       <h:selectOneMenu id="selectOneMenu" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneMenu>
-
-</p>
-
-<h1>SelectOneRadio</h1>
-
-<p>
-
-       <h:selectOneRadio id="selectOneRadio" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneRadio>
-
-</p>
-
-<h1>SelectManyCheckbox</h1>
-
-<p>
-
-       <h:selectManyCheckbox id="selectManyCheckbox" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyCheckbox>
-
-</p>
-
-<h1>SelectManyListbox</h1>
-
-<p>
-
-       <h:selectManyListbox id="selectManyListbox" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyListbox>
-
-</p>
-
-<h1>SelectManyMenu</h1>
-
-<p>
-
-       <h:selectManyMenu id="selectManyMenu" required="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyMenu>
-
-</p>
-
-
-
-<p>
-
-       <h:commandButton value="submit" />
-
-</p>
-
-       <p> messages: <h:messages /> </p>
-
-
-
-    </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/render/selectStarSelectionHideNoSelection.xhtml b/jsf-ri/systest/web/render/selectStarSelectionHideNoSelection.xhtml
deleted file mode 100644
index aec879d..0000000
--- a/jsf-ri/systest/web/render/selectStarSelectionHideNoSelection.xhtml
+++ /dev/null
@@ -1,160 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<h:head>
-    <title>Test select* with noselection</title>
-</h:head>
-<h:body>
-    <h:form prependId="false">
-
-<h1>SelectOneListbox</h1>
-
-<p>
-
-       <h:selectOneListbox id="selectOneListbox" value="Apple" required="true" hideNoSelectionOption="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneListbox>
-
-</p>
-
-<h1>SelectOneMenu</h1>
-
-<p>
-
-       <h:selectOneMenu id="selectOneMenu" value="Apple" required="true" hideNoSelectionOption="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneMenu>
-
-</p>
-
-<h1>SelectOneRadio</h1>
-
-<p>
-
-       <h:selectOneRadio id="selectOneRadio" value="Apple" required="true" hideNoSelectionOption="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectOneRadio>
-
-</p>
-
-<h1>SelectManyCheckbox</h1>
-
-<p>
-
-       <h:selectManyCheckbox id="selectManyCheckbox" value="Apple" required="true" hideNoSelectionOption="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyCheckbox>
-
-</p>
-
-<h1>SelectManyListbox</h1>
-
-<p>
-
-       <h:selectManyListbox id="selectManyListbox" value="Apple" required="true" hideNoSelectionOption="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyListbox>
-
-</p>
-
-<h1>SelectManyMenu</h1>
-
-<p>
-
-       <h:selectManyMenu id="selectManyMenu" value="Apple" required="true" hideNoSelectionOption="true">
-
-         <f:selectItem noSelectionOption="true" itemLabel="No selection" itemValue="noSelection"/>
-         <f:selectItem itemLabel="Apple" itemValue="Apple"/>
-         <f:selectItem itemLabel="Orange" itemValue="Orange" />
-         <f:selectItem itemLabel="Pear" itemValue="Pear" />
-         <f:selectItem itemLabel="Peach" itemValue="Peach"/>
-
-       </h:selectManyMenu>
-
-</p>
-
-
-
-<p>
-
-       <h:commandButton value="submit" />
-
-</p>
-
-       <p> messages: <h:messages /> </p>
-
-
-
-    </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/renderkit-default-clear.jsp b/jsf-ri/systest/web/renderkit-default-clear.jsp
deleted file mode 100644
index 44f37ce..0000000
--- a/jsf-ri/systest/web/renderkit-default-clear.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-FacesContext fc = FacesContext.getCurrentInstance();
-fc.getApplication().setDefaultRenderKitId(null);
-%>
diff --git a/jsf-ri/systest/web/renderkit-default.jsp b/jsf-ri/systest/web/renderkit-default.jsp
deleted file mode 100644
index e78fa4b..0000000
--- a/jsf-ri/systest/web/renderkit-default.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-FacesContext fc = FacesContext.getCurrentInstance();
-fc.getApplication().setDefaultRenderKitId("CUSTOM");
-%>
diff --git a/jsf-ri/systest/web/renderkit01.jsp b/jsf-ri/systest/web/renderkit01.jsp
deleted file mode 100644
index df488d2..0000000
--- a/jsf-ri/systest/web/renderkit01.jsp
+++ /dev/null
@@ -1,168 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="java.util.Iterator"
-%><%@ page import="java.util.Map"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.render.RenderKit"
-%><%@ page import="javax.faces.render.RenderKitFactory"
-%><%@ page import="javax.faces.render.Renderer"
-%><%
-
-// This test goes through the config system to test the loading of 
-// the default renderkit information as well as a custom renderkit
-// consisting of one renderer.
-
-    // Initialize list of Renderer types
-    //
-    String families[] = {
-      "javax.faces.Command",
-      "javax.faces.Command",
-      "javax.faces.Data",
-      "javax.faces.Form",
-      "javax.faces.Graphic",
-      "javax.faces.Input",
-      "javax.faces.Input",
-      "javax.faces.Input",
-      "javax.faces.Input",
-      "javax.faces.Message",
-      "javax.faces.Messages",
-      "javax.faces.Output",
-      "javax.faces.Output",
-      "javax.faces.Output",
-      "javax.faces.Output",
-      "javax.faces.Panel",
-      "javax.faces.Panel",
-      "javax.faces.SelectBoolean",
-      "javax.faces.SelectMany",
-      "javax.faces.SelectMany",
-      "javax.faces.SelectMany",
-      "javax.faces.SelectOne",
-      "javax.faces.SelectOne",
-      "javax.faces.SelectOne"
-    };
-
-    String defaultList[] = {
-      "javax.faces.Button",
-      "javax.faces.Link",
-      "javax.faces.Table",
-      "javax.faces.Form",
-      "javax.faces.Image",
-      "javax.faces.Hidden",
-      "javax.faces.Secret",
-      "javax.faces.Text",
-      "javax.faces.Textarea",
-      "javax.faces.Message",
-      "javax.faces.Messages",
-      "javax.faces.Format",
-      "javax.faces.Label",
-      "javax.faces.Link",
-      "javax.faces.Text",
-      "javax.faces.Grid",
-      "javax.faces.Group",
-      "javax.faces.Checkbox",
-      "javax.faces.Checkbox",
-      "javax.faces.Listbox",
-      "javax.faces.Menu",
-      "javax.faces.Listbox",
-      "javax.faces.Menu",
-      "javax.faces.Radio"
-      };
-
-    String customFamilies[] = {"SysTest"};
-    String customList[] = {"Text"};
-
-    // Acquire RenderKits and check RenderKitId(s)
-    //
-    RenderKitFactory renderKitFactory = (RenderKitFactory)
-        FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-    Iterator renderKitIds = renderKitFactory.getRenderKitIds();
-
-    boolean foundDefault = false; 
-    boolean foundCustom= false; 
-    while (renderKitIds.hasNext()) {
-        String renderKitId = (String)renderKitIds.next();
-        if (renderKitId.equals(RenderKitFactory.HTML_BASIC_RENDER_KIT)) {
-            foundDefault = true;
-        } else if (renderKitId.equals("CUSTOM")) {
-            foundCustom = true;
-        }
-    }
-    if (!foundDefault || !foundCustom) {
-        out.println("/renderkit01.jsp FAILED - all renderkit ids not found");
-	return;
-    }
-
-    // Check Renderers For Each RenderKit
-    //
-    while (renderKitIds.hasNext()) {
-        String renderKitId = (String)renderKitIds.next();
-	RenderKit rKit = renderKitFactory.getRenderKit(null, renderKitId);
-	if (rKit == null) {
-	    out.println("/renderkit01.jsp FAILED - renderkit not found");
-	    return;
-	}
-	Renderer renderer = null;
-	if (renderKitId.equals(RenderKitFactory.HTML_BASIC_RENDER_KIT)) {
-	    for (int i=0; i<defaultList.length; i++) {
-	        try {
-	            renderer = rKit.getRenderer(families[i], defaultList[i]);
-	        } catch (IllegalArgumentException ia) {
-	            out.println("/renderkit01.jsp FAILED - renderer not found for type:"+
-		        defaultList[i]+" in renderkit 'DEFAULT'");
-		    return;
-	        }
-	    }
-	} else if (renderKitId.equals("CUSTOM")) {
-	    for (int i=0; i<customList.length; i++) {
-	        try {
-	            renderer = rKit.getRenderer(customFamilies[i],
-                                                customList[i]);
-	        } catch (IllegalArgumentException ia) {
-	            out.println("/renderkit01.jsp FAILED - renderer not found for type:"+
-		        customList[i]+" in renderkit 'CUSTOM'");
-		    return;
-	        }
-	    }
-	}
-    }
-
-    // All tests passed
-    //
-    out.println("/renderkit01.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/renderkit02.jsp b/jsf-ri/systest/web/renderkit02.jsp
deleted file mode 100644
index 815f7ab..0000000
--- a/jsf-ri/systest/web/renderkit02.jsp
+++ /dev/null
@@ -1,92 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.context.FacesContextFactory"
-%><%@ page import="javax.faces.component.UIViewRoot"
-%><%@ page import="javax.faces.lifecycle.Lifecycle"
-%><%@ page import="javax.faces.render.RenderKitFactory"
-%><%@ page import="javax.faces.lifecycle.LifecycleFactory"
-%><%
-
-// This test demonstrates the request processing lifecycle of 
-// a "non-faces" request --->  faces response
-// It uses the "default" renderkit to show how a renderkit can be
-// set.
-//
-    // Create a Lifecycle
-    //
-    LifecycleFactory lFactory = (LifecycleFactory)
-        FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-    Lifecycle lifecycle = lFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-    if (lifecycle == null) {
-        out.println("/renderkit02.jsp FAILED - Could not create Lifecycle");
-        return;
-    }
-
-    // Create a FacesContext 
-    //
-    FacesContextFactory facesContextFactory = (FacesContextFactory)
-        FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
-    FacesContext facesContext = facesContextFactory.getFacesContext(
-        config.getServletContext(), request, response, lifecycle);
-    if (facesContext == null) {
-        out.println("/renderkit02.jsp FAILED - Could not create FacesContext");
-        return;
-    }
-
-    // Acquire a View..
-    //
-    UIViewRoot view = facesContext.getApplication().getViewHandler().restoreView(facesContext, "/renderkit02A.jsp");
-    if ( view == null)  {
-        view = facesContext.getApplication().getViewHandler().createView(facesContext, "/renderkit02A.jsp");
-    }
-    // Set the RenderKitFactory.HTML_BASIC_RENDER_KIT renderkit Id
-    //
-    view.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-    facesContext.setViewRoot(view);
-
-    facesContext.renderResponse();
-
-    lifecycle.execute(facesContext);
-    lifecycle.render(facesContext);
-
-    // All tests passed
-    //
-    out.println("/renderkit02.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/renderkit02A.jsp b/jsf-ri/systest/web/renderkit02A.jsp
deleted file mode 100644
index b9f0ff2..0000000
--- a/jsf-ri/systest/web/renderkit02A.jsp
+++ /dev/null
@@ -1,46 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<HTML>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <f:view>  
-          <h:outputText id="simplelabel" value="Simple Label" /> 
-       </f:view>
-
-</HTML>
diff --git a/jsf-ri/systest/web/renderkit03.jsp b/jsf-ri/systest/web/renderkit03.jsp
deleted file mode 100644
index 4f57b20..0000000
--- a/jsf-ri/systest/web/renderkit03.jsp
+++ /dev/null
@@ -1,86 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.context.FacesContextFactory"
-%><%@ page import="javax.faces.component.UIViewRoot"
-%><%@ page import="javax.faces.lifecycle.Lifecycle"
-%><%@ page import="javax.faces.render.RenderKitFactory"
-%><%@ page import="javax.faces.lifecycle.LifecycleFactory"
-%><%
-
-// This test demonstrates the request processing lifecycle of
-// a "non-faces" request --->  faces response
-// It uses a "custom" renderkit to show how a renderkit can be
-// set.
-//
-    // Create a Lifecycle
-    LifecycleFactory lFactory = (LifecycleFactory)
-        FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-    Lifecycle lifecycle = lFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-    if (lifecycle == null) {
-        out.println("/renderkit03.jsp FAILED - Could not create Lifecycle");
-        return;
-    }
-
-    // Create a FacesContext 
-    FacesContextFactory facesContextFactory = (FacesContextFactory)
-        FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
-    FacesContext facesContext = facesContextFactory.getFacesContext(
-        config.getServletContext(), request, response, lifecycle);
-    if (facesContext == null) {
-        out.println("/renderkit03.jsp FAILED - Could not create FacesContext");
-        return;
-    }
-
-    // Acquire a view
-    UIViewRoot view = facesContext.getApplication().getViewHandler().restoreView(facesContext, "/renderkit03A.jsp");
-    if ( view == null)  {
-        view = facesContext.getApplication().getViewHandler().createView(facesContext, "/renderkit03A.jsp");
-    }
-    // Set the RenderKitFactory.HTML_BASIC_RENDER_KIT renderkit Id
-    view.setRenderKitId("CUSTOM");
-    facesContext.setViewRoot(view);
-    facesContext.renderResponse();
-
-    lifecycle.execute(facesContext);
-    lifecycle.render(facesContext);
-
-    // All tests passed
-    out.println("/renderkit03.jsp PASSED");
-%>
diff --git a/jsf-ri/systest/web/renderkit03A.jsp b/jsf-ri/systest/web/renderkit03A.jsp
deleted file mode 100644
index 84cf421..0000000
--- a/jsf-ri/systest/web/renderkit03A.jsp
+++ /dev/null
@@ -1,46 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<HTML>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <f:view>  
-          <h:outputText id="simplelabel" value="This IS A SIMPLE LABEL" /> 
-       </f:view>
-
-</HTML>
diff --git a/jsf-ri/systest/web/renderkit04.jsp b/jsf-ri/systest/web/renderkit04.jsp
deleted file mode 100644
index f7cb7ce..0000000
--- a/jsf-ri/systest/web/renderkit04.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<HTML>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <jsp:useBean id="TestBean" class="com.sun.faces.systest.model.TestBean" scope="session" />
-       <f:view renderKitId="HTML_BASIC" >  
-          <h:form id="form">
-              <table>
-              <tr>
-                 <td><h:outputText value="RenderKit:" /></td> 
-                 <td><h:outputText value="#{TestBean.renderKitInfo}" /></td>
-              </tr>
-              <tr>
-                 <td><h:outputText value="ResponseWriter:" /></td> 
-                 <td><h:outputText value="#{TestBean.responseWriterInfo}" /></td> 
-              </tr>
-              </table>
-              <h:commandButton id="submit" action="success" value="submit"/>
-          </h:form>
-       </f:view>
-
-</HTML>
diff --git a/jsf-ri/systest/web/renderkit05.jsp b/jsf-ri/systest/web/renderkit05.jsp
deleted file mode 100644
index 42da6fd..0000000
--- a/jsf-ri/systest/web/renderkit05.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<HTML>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <jsp:useBean id="TestBean" class="com.sun.faces.systest.model.TestBean" scope="session" />
-       <f:view renderKitId="CUSTOM" >  
-          <h:form id="form">
-              <table>
-              <tr>
-                 <td><h:outputText value="RenderKit:" /></td> 
-                 <td><h:outputText value="#{TestBean.renderKitInfo}" /></td>
-              </tr>
-              <tr>
-                 <td><h:outputText value="ResponseWriter:" /></td> 
-                 <td><h:outputText value="#{TestBean.responseWriterInfo}" /></td> 
-              </tr>
-              </table>
-              <h:commandButton id="submit" action="success" value="submit"/>
-          </h:form>
-       </f:view>
-
-</HTML>
diff --git a/jsf-ri/systest/web/renderkit06.jsp b/jsf-ri/systest/web/renderkit06.jsp
deleted file mode 100644
index 28190a2..0000000
--- a/jsf-ri/systest/web/renderkit06.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<HTML>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-       <jsp:useBean id="TestBean" class="com.sun.faces.systest.model.TestBean" scope="session" />
-       <f:view >  
-          <h:form id="form">
-              <table>
-              <tr>
-                 <td><h:outputText value="RenderKit:" /></td> 
-                 <td><h:outputText value="#{TestBean.renderKitInfo}" /></td>
-              </tr>
-              <tr>
-                 <td><h:outputText value="ResponseWriter:" /></td> 
-                 <td><h:outputText value="#{TestBean.responseWriterInfo}" /></td> 
-              </tr>
-              </table>
-              <h:commandButton id="submit" action="success" value="submit"/>
-          </h:form>
-       </f:view>
-
-</HTML>
diff --git a/jsf-ri/systest/web/replaceViewRoot.jsp b/jsf-ri/systest/web/replaceViewRoot.jsp
deleted file mode 100644
index c101c7c..0000000
--- a/jsf-ri/systest/web/replaceViewRoot.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Replace the ViewRoot</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-    <%@ page import="javax.faces.context.FacesContext" %>
-    <%@ page import="javax.servlet.http.HttpServlet" %>
-  </head>
-
-  <body>
-    <h1>Replace the ViewRoot</h1>
-
-<% 
-
-FacesContext.getCurrentInstance().getApplication().addComponent("javax.faces.ViewRoot", "com.sun.faces.systest.model.ViewRootExtension");
-((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().invalidate();
-
-%>
-
-<p><a name="examine" href="examineViewRoot.jsp">examine the replaced viewRoot.</a></p>
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/resourceBundle01.jsp b/jsf-ri/systest/web/resourceBundle01.jsp
deleted file mode 100644
index 44ada8b..0000000
--- a/jsf-ri/systest/web/resourceBundle01.jsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-Expression in raw JSP page is ${resourceBundle01.value1}.
diff --git a/jsf-ri/systest/web/resourceBundle02.jsp b/jsf-ri/systest/web/resourceBundle02.jsp
deleted file mode 100644
index b2d3ea5..0000000
--- a/jsf-ri/systest/web/resourceBundle02.jsp
+++ /dev/null
@@ -1,40 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<f:view>Value from Faces component is <h:outputText value="#{resourceBundle01.value1}" />.</f:view>
diff --git a/jsf-ri/systest/web/resourceBundle03.jsp b/jsf-ri/systest/web/resourceBundle03.jsp
deleted file mode 100644
index 44d6a2c..0000000
--- a/jsf-ri/systest/web/resourceBundle03.jsp
+++ /dev/null
@@ -1,49 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<f:view>
-Values from Components: <br />
-
-resourceBundle01: <h:outputText value="#{resourceBundle01.value1}" /> <br />
-
-non existing resourceBundle: <h:outputText value="#{resourceBundle02.value1}" /> <br />
-
-resourceBundle03: <h:outputText value="#{resourceBundle03.value3}" /> <br />
-
-</f:view>
diff --git a/jsf-ri/systest/web/resourceBundle04.jsp b/jsf-ri/systest/web/resourceBundle04.jsp
deleted file mode 100644
index e78b003..0000000
--- a/jsf-ri/systest/web/resourceBundle04.jsp
+++ /dev/null
@@ -1,45 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<f:view>
-Values from Components: <br />
-
-exsting resource bundle, but non-existing key: <h:outputText value="#{resourceBundle03.bogusKey}" /> <br />
-
-</f:view>
diff --git a/jsf-ri/systest/web/resourceInjection01.jsp b/jsf-ri/systest/web/resourceInjection01.jsp
deleted file mode 100644
index 3199fc8..0000000
--- a/jsf-ri/systest/web/resourceInjection01.jsp
+++ /dev/null
@@ -1,57 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Resource Injection in Managed Beans</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test Resource Injection in Managed Beans</h1>
-
-<f:view>
-   
-    <h:outputText value="#{resourceInjectionBean.welcomeMessage}" />
-    <h:outputText value="#{resourceInjectionBean2.welcomeMessage}" />    
-   
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/resourcerelocation.xhtml b/jsf-ri/systest/web/resourcerelocation.xhtml
deleted file mode 100644
index b56ea26..0000000
--- a/jsf-ri/systest/web/resourcerelocation.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head id="head">
-    <title>resourcereslocation</title>
-</h:head>
-<h:body id="body">
-    <h:form id="form">
-        <h:outputScript id="js1" name="simple.js" target="#{param.location}"/>
-        <!-- duplicate added to ensure that duplicates aren't rendered twice -->
-        <h:outputScript id="js2" name="simple.js" target="#{param.location}"/>
-        <!-- target should have no impact on outputStylesheet -->
-        <h:outputStylesheet id="css1" name="simple.css" target="#{param.location}"/>
-        <!-- duplicate added to ensure that duplicates aren't rendered twice -->
-        <h:outputStylesheet id="css2" name="simple.css" target="#{param.location}"/>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resourcerelocation2.xhtml b/jsf-ri/systest/web/resourcerelocation2.xhtml
deleted file mode 100644
index d5d430b..0000000
--- a/jsf-ri/systest/web/resourcerelocation2.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head id="head">
-    <title>resourcereslocation 2</title>
-</h:head>
-<h:body id="body">
-    <h:form id="form">
-        <h:outputStylesheet id="css1" name="simple.css" target="#{param.location}"/>
-        <!-- duplicate added to ensure that duplicates aren't rendered twice -->
-        <h:outputStylesheet id="css2" name="simple.css" target="#{param.location}"/>
-
-        <h:outputScript id="js1" name="simple.js" target="#{param.location}"/>
-        <!-- duplicate added to ensure that duplicates aren't rendered twice -->
-        <h:outputScript id="js2" name="simple.js" target="#{param.location}"/>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resourcerelocation3.xhtml b/jsf-ri/systest/web/resourcerelocation3.xhtml
deleted file mode 100644
index 9e64ea8..0000000
--- a/jsf-ri/systest/web/resourcerelocation3.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head id="head">
-    <title>resourcereslocation 3</title>
-</h:head>
-<h:body id="body">
-    <h:form id="form">
-        <h:outputStylesheet id="css" name="simple.css"/>
-        <h:outputScript id="js" name="simple.js" target="#{param.location}"/>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resourcerelocation4.xhtml b/jsf-ri/systest/web/resourcerelocation4.xhtml
deleted file mode 100644
index f9f41b2..0000000
--- a/jsf-ri/systest/web/resourcerelocation4.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head id="head">
-    <title>resourcereslocation 4</title>
-</h:head>
-<h:body id="body">
-    <h:form id="form">
-        <h:outputScript id="js" name="simple.js" target="#{param.location}"/>
-        <h:outputStylesheet id="css" name="simple.css"/>
-    </h:form>
-</h:body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/ajax/echo1.js b/jsf-ri/systest/web/resources/ajax/echo1.js
deleted file mode 100644
index cab782d..0000000
--- a/jsf-ri/systest/web/resources/ajax/echo1.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-*/
-// Javascript for ajaxEcho test
-
-function buttonpush(target, exec, element, event) {
-    try {
-        jsf.ajax.request(element, event, {execute: exec, render: target});
-    } catch (ex) {
-        // Handle errors here
-        alert(ex);
-    }
-    return false;
-} 
-
-function resetpush(element, event) {
-    try {
-        jsf.ajax.request(element, event, {execute: element.id});
-    } catch (ex) {
-        // Handle errors here
-        alert(ex);
-    }
-    return false;
-}
diff --git a/jsf-ri/systest/web/resources/ajax/eval.js b/jsf-ri/systest/web/resources/ajax/eval.js
deleted file mode 100644
index 7822f7e..0000000
--- a/jsf-ri/systest/web/resources/ajax/eval.js
+++ /dev/null
@@ -1,3 +0,0 @@
-//alert("at first marker is "+window.fileMarker);
-window.fileMarker++;
-//alert("and then marker is "+window.fileMarker);
diff --git a/jsf-ri/systest/web/resources/ajax/evalTestFile.xhtml b/jsf-ri/systest/web/resources/ajax/evalTestFile.xhtml
deleted file mode 100644
index 1f6263c..0000000
--- a/jsf-ri/systest/web/resources/ajax/evalTestFile.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-    <title>Not present in rendered output</title>
-
-</head>
-<composite:interface>
-</composite:interface>
-
-<composite:implementation>
-    <div id="#{cc.clientId}">
-    <script type="text/javascript" src="../../resources/ajax/eval.js"></script>
-    </div>
-</composite:implementation>
-
-<body>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/ajax/evalTestInline.xhtml b/jsf-ri/systest/web/resources/ajax/evalTestInline.xhtml
deleted file mode 100644
index eb7035c..0000000
--- a/jsf-ri/systest/web/resources/ajax/evalTestInline.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-    <title>Not present in rendered output</title>
-
-</head>
-<composite:interface>
-</composite:interface>
-
-<composite:implementation>
-    <div id="#{cc.clientId}">
-    <script type="text/javascript">
-        // <![CDATA[
-        if (typeof inlineccmarker !== "undefined") {
-            // include extraneous amp char, to regression test some browsers
-            var ampValue = "&";
-            if (ampValue === "&") {
-                var target = document.getElementById('target');
-                target.innerHTML = "PASSED";
-            }
-        }
-        inlineccmarker = true;
-        //]]>
-    </script>
-    </div>
-</composite:implementation>
-
-<body>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/case1.js b/jsf-ri/systest/web/resources/case1.js
deleted file mode 100644
index bc81a6f..0000000
--- a/jsf-ri/systest/web/resources/case1.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function doit1() {
-    alert("doit1");
-}
diff --git a/jsf-ri/systest/web/resources/case11.css b/jsf-ri/systest/web/resources/case11.css
deleted file mode 100644
index 12c9bc4..0000000
--- a/jsf-ri/systest/web/resources/case11.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.case11 {
-    color: purple;
-}
diff --git a/jsf-ri/systest/web/resources/case12.css b/jsf-ri/systest/web/resources/case12.css
deleted file mode 100644
index cbe8f83..0000000
--- a/jsf-ri/systest/web/resources/case12.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.case12 {
-    color: fuchsia;
-}
diff --git a/jsf-ri/systest/web/resources/case14.css b/jsf-ri/systest/web/resources/case14.css
deleted file mode 100644
index 56e7895..0000000
--- a/jsf-ri/systest/web/resources/case14.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.case14 {
-    color: lime;
-}
diff --git a/jsf-ri/systest/web/resources/case3.js b/jsf-ri/systest/web/resources/case3.js
deleted file mode 100644
index 52cd1dc..0000000
--- a/jsf-ri/systest/web/resources/case3.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function doit3() {
-    alert("doit3");
-}
diff --git a/jsf-ri/systest/web/resources/case4.js b/jsf-ri/systest/web/resources/case4.js
deleted file mode 100644
index 061c315..0000000
--- a/jsf-ri/systest/web/resources/case4.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function doit4() {
-    alert("doit4");
-}
diff --git a/jsf-ri/systest/web/resources/case6.js b/jsf-ri/systest/web/resources/case6.js
deleted file mode 100644
index a94ede2..0000000
--- a/jsf-ri/systest/web/resources/case6.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function doit6() {
-    alert("doit6");
-}
diff --git a/jsf-ri/systest/web/resources/case9.css b/jsf-ri/systest/web/resources/case9.css
deleted file mode 100644
index 5a2cc1a..0000000
--- a/jsf-ri/systest/web/resources/case9.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.case9 {
-    color: yellow;
-}
diff --git a/jsf-ri/systest/web/resources/composite/actionListenerWrapper1.xhtml b/jsf-ri/systest/web/resources/composite/actionListenerWrapper1.xhtml
deleted file mode 100644
index e418f75..0000000
--- a/jsf-ri/systest/web/resources/composite/actionListenerWrapper1.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customActionListener" method-signature="void f(javax.faces.event.ActionEvent)" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customActionListener id="aw1" actionListener="#{cc.attrs.customActionListener}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionListenerWrapper2.xhtml b/jsf-ri/systest/web/resources/composite/actionListenerWrapper2.xhtml
deleted file mode 100644
index 96d5ebb..0000000
--- a/jsf-ri/systest/web/resources/composite/actionListenerWrapper2.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customActionListener id="aw2" actionListener="#{cc.attrs.bean.actionListener}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionListenerWrapper3.xhtml b/jsf-ri/systest/web/resources/composite/actionListenerWrapper3.xhtml
deleted file mode 100644
index aac0ee9..0000000
--- a/jsf-ri/systest/web/resources/composite/actionListenerWrapper3.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:actionListenerWrapper1 id="aw3" customActionListener="#{cc.attrs.bean.actionListener}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionListenerWrapper4.xhtml b/jsf-ri/systest/web/resources/composite/actionListenerWrapper4.xhtml
deleted file mode 100644
index d5d5c0d..0000000
--- a/jsf-ri/systest/web/resources/composite/actionListenerWrapper4.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customActionListener" method-signature="void f(javax.faces.event.ActionEvent)" required="true" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:actionListenerWrapper1 id="aw4" customActionListener="#{cc.attrs.customActionListener}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionSource1.xhtml b/jsf-ri/systest/web/resources/composite/actionSource1.xhtml
deleted file mode 100644
index 2172e5b..0000000
--- a/jsf-ri/systest/web/resources/composite/actionSource1.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:actionSource name="command"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:commandButton id="command" value="ActionSource1"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionSource2.xhtml b/jsf-ri/systest/web/resources/composite/actionSource2.xhtml
deleted file mode 100644
index f8096f4..0000000
--- a/jsf-ri/systest/web/resources/composite/actionSource2.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:actionSource name="command" targets="ac2"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:commandButton id="ac2" value="ActionSource2"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionSource3.xhtml b/jsf-ri/systest/web/resources/composite/actionSource3.xhtml
deleted file mode 100644
index f77b14a..0000000
--- a/jsf-ri/systest/web/resources/composite/actionSource3.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:actionSource name="command"/>
-</composite:interface>
-
-<composite:implementation>
-    <ez:actionSource1 id="command"/>    
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionSource4.xhtml b/jsf-ri/systest/web/resources/composite/actionSource4.xhtml
deleted file mode 100644
index 8f969ec..0000000
--- a/jsf-ri/systest/web/resources/composite/actionSource4.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:naming="http://mojarra.dev.java.net/source1">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:actionSource name="command" targets="naming:command"/>
-</composite:interface>
-
-<composite:implementation>
-    <naming:naming id="naming">
-        <h:commandButton id="command" value="ActionSource4"/>
-    </naming:naming>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionWrapper1.xhtml b/jsf-ri/systest/web/resources/composite/actionWrapper1.xhtml
deleted file mode 100644
index 687bb7c..0000000
--- a/jsf-ri/systest/web/resources/composite/actionWrapper1.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customAction" method-signature="String f()" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customAction id="aw1" action="#{cc.attrs.customAction}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionWrapper2.xhtml b/jsf-ri/systest/web/resources/composite/actionWrapper2.xhtml
deleted file mode 100644
index e3b57a1..0000000
--- a/jsf-ri/systest/web/resources/composite/actionWrapper2.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customAction id="aw2" action="#{cc.attrs.bean.action}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionWrapper3.xhtml b/jsf-ri/systest/web/resources/composite/actionWrapper3.xhtml
deleted file mode 100644
index 4df5202..0000000
--- a/jsf-ri/systest/web/resources/composite/actionWrapper3.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:actionWrapper1 id="aw3" customAction="#{cc.attrs.bean.action}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/actionWrapper4.xhtml b/jsf-ri/systest/web/resources/composite/actionWrapper4.xhtml
deleted file mode 100644
index 773cc64..0000000
--- a/jsf-ri/systest/web/resources/composite/actionWrapper4.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customAction" method-signature="String f()" required="true" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:actionWrapper1 id="aw4" customAction="#{cc.attrs.customAction}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/addPhaseListener.xhtml b/jsf-ri/systest/web/resources/composite/addPhaseListener.xhtml
deleted file mode 100644
index df58fa4..0000000
--- a/jsf-ri/systest/web/resources/composite/addPhaseListener.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:cc="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<cc:interface>
-</cc:interface>
-
-<cc:implementation>
-    <f:phaseListener 
-       type="com.sun.faces.composite.PhaseListenerInCompositeComponent" />
-
-    #{beforeMessage}
-</cc:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/argAction.xhtml b/jsf-ri/systest/web/resources/composite/argAction.xhtml
deleted file mode 100644
index 9076eb1..0000000
--- a/jsf-ri/systest/web/resources/composite/argAction.xhtml
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="arg1" required="true" />
-    <composite:attribute name="arg2" required="true" />
-</composite:interface>
-
-<composite:implementation>
-    <ez:nesting id="n1">
-    <ez:nesting id="n2">
-    <h:commandButton id="command" 
-                     value="Direct bean reference with arguments"
-                     action="#{compositeBean.action(cc.attrs.arg1, cc.attrs.arg2)}"/>
-    </ez:nesting>
-    </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/ccParentExpression.xhtml b/jsf-ri/systest/web/resources/composite/ccParentExpression.xhtml
deleted file mode 100644
index 739f0df..0000000
--- a/jsf-ri/systest/web/resources/composite/ccParentExpression.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="items" required="true" />
-</composite:interface>
-<composite:implementation>
-   <div>
-   <ez:wrapper>
-       <h:outputText style="color:black" value="#{cc.attrs.items[0]}" /><br/> 
-       <c:set var="items" value="#{cc.attrs.items}" />
-       <c:forEach var="i" items="#{items}">
-           <span>#{i}</span><br />
-       </c:forEach>
-   </ez:wrapper>
-   </div>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/cc_template.xhtml b/jsf-ri/systest/web/resources/composite/cc_template.xhtml
deleted file mode 100644
index c1c4c4c..0000000
--- a/jsf-ri/systest/web/resources/composite/cc_template.xhtml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-<title><ui:insert name="title">Default Title</ui:insert></title>
-</head>
-<body>
-<h1>Here is the Page Header</h1>
-<ui:insert name="body">
-  Default Body
-</ui:insert>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/childrenAndFacets.xhtml b/jsf-ri/systest/web/resources/composite/childrenAndFacets.xhtml
deleted file mode 100644
index c6db8ce..0000000
--- a/jsf-ri/systest/web/resources/composite/childrenAndFacets.xhtml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-</composite:interface>
-
-<composite:implementation>
-    <composite:renderFacet name="header2"/>
-    <h:panelGrid id="grid1" style="border-style:solid">
-        <composite:insertFacet required="true" name="header"/>
-        <composite:insertChildren />
-    </h:panelGrid>
-    <br/>
-    <h:panelGrid id="grid2" style="border-style:solid">
-        <composite:insertFacet name="header"/> <!-- should be ignored -->
-        <composite:insertChildren /> <!-- should be ignored -->
-    </h:panelGrid>
-    <br/>
-    <br/>
-    Composite Parent Children Count:                   <span id="ccCount">#{cc.childCount}</span><br/>
-    Composite Parent contains facet 'header2':         <span id="header2Facet">#{cc.facets['header2'] != null}</span><br/>
-    Composite Parent does not contain facet 'header':  <span id="header1Facet">#{cc.facets['header1'] == null}</span><br/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compA.xhtml b/jsf-ri/systest/web/resources/composite/compA.xhtml
deleted file mode 100644
index 26b6faf..0000000
--- a/jsf-ri/systest/web/resources/composite/compA.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-    <span>Before Insert A(1)</span><br />
-    <composite:insertChildren />
-    <span>After Insert A(2)</span><br />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compAttributeWithArgs.xhtml b/jsf-ri/systest/web/resources/composite/compAttributeWithArgs.xhtml
deleted file mode 100644
index c5733d4..0000000
--- a/jsf-ri/systest/web/resources/composite/compAttributeWithArgs.xhtml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:interface name="arg1" type="java.lang.String" />
-        <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" />
-    </composite:interface>
-    <composite:implementation>
-        <ez:nesting id="n">
-        <h:form id="form">
-            <h:outputText id="out" value="#{cc.attrs.bean.display(cc.attrs.arg1)}" />
-        </h:form>
-        </ez:nesting>
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compB.xhtml b/jsf-ri/systest/web/resources/composite/compB.xhtml
deleted file mode 100644
index f400bd8..0000000
--- a/jsf-ri/systest/web/resources/composite/compB.xhtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-    <span>Before Insert B(1)</span><br />
-    <composite:insertChildren />
-    <span>After Insert B(2)</span><br />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compD.xhtml b/jsf-ri/systest/web/resources/composite/compD.xhtml
deleted file mode 100644
index 79d252a..0000000
--- a/jsf-ri/systest/web/resources/composite/compD.xhtml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-    Before Insert A(1)<br />
-    <ez:compE id="e">
-       <composite:insertChildren />
-    </ez:compE>
-    After Insert A(2)<br />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compE.xhtml b/jsf-ri/systest/web/resources/composite/compE.xhtml
deleted file mode 100644
index aa74bee..0000000
--- a/jsf-ri/systest/web/resources/composite/compE.xhtml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-</head>
-
-<body>                                   
-<composite:interface />
-<composite:implementation>
-    <div id="mydiv">
-       <composite:insertChildren /> <br />
-    </div>
-</composite:implementation>
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compWithArgs.xhtml b/jsf-ri/systest/web/resources/composite/compWithArgs.xhtml
deleted file mode 100644
index a0c1cfd..0000000
--- a/jsf-ri/systest/web/resources/composite/compWithArgs.xhtml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:interface name="arg1" type="java.lang.String" />
-        <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" />
-    </composite:interface>
-    <composite:implementation>
-        <ez:nesting id="n">
-        <h:form id="form">
-            <h:commandButton id="command" value="custom" action="#{cc.attrs.bean.custom(cc.attrs.arg1, 'arg2')}"/>
-        </h:form>
-        </ez:nesting>
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/componentWithMetadata.xhtml b/jsf-ri/systest/web/resources/composite/componentWithMetadata.xhtml
deleted file mode 100644
index 5a7bb9d..0000000
--- a/jsf-ri/systest/web/resources/composite/componentWithMetadata.xhtml
+++ /dev/null
@@ -1,185 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:fmd="http://java.sun.com/xml/ns/javaee/faces/design-time-metadata"
-      xmlns:b="http://mojarra.dev.java.net/source1"
-      xmlns:cc="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<cc:interface 
-    name="component"
-    displayName="A really fancy composite component"
-    expert="true"
-    hidden="false"
-    preferred="true"
-    shortDescription="This component has all the supported metadata."
-    extraTopLevelAttribute="Whatever I want here">
-
-<!-- start top level attributes -->
-
-  <cc:attribute 
-    name="model"
-    required="true"
-    displayName="model"
-    expert="false"
-    hidden="false"
-    preferred="true"
-    shortDescription="The model for this component"
-    extraTopLevelAttribute="Whatever I want here">
-    <cc:extension>
-      <fmd:expert>true</fmd:expert>
-    </cc:extension>
-    <cc:attribute
-      name="userid"
-      default="guest"
-      displayName="User Id"
-      expert="false"
-      hidden="false"
-      preferred="true"
-      shortDescription="The model must have a userid property"/>
-    <cc:attribute
-      name="password"
-      default="guest"
-      displayName="Password"
-      expert="false"
-      hidden="false"
-      preferred="true"
-      shortDescription="The model must have a password property"/>
-  </cc:attribute>
-
-  <cc:attribute name="useridLabel" default="Userid:" />
-
-  <cc:attribute name="passwordLabel" default="Password:" />
-
-  <cc:attribute name="loginButtonLabel" default="Login" />
-
-  <cc:attribute name="loginAction" method-signature="java.lang.String f()"
-    required="true" />
-
-<!-- end top level attributes -->
-
-<!-- start facets -->
-
-  <cc:facet 
-    name="header"
-    displayName="The header facet for the fancy component"
-    expert="true"
-    hidden="false"
-    preferred="false"
-    shortDescription="If you want a header, this is where you put it"
-    anotherExtraAttribute="Lots of metadata" />
-
-  <cc:facet 
-    name="footer"
-    displayName="The footer facet for the fancy component"
-    expert="true"
-    hidden="false"
-    preferred="false"
-    shortDescription="If you want a footer, this is where you put it"
-    anotherExtraAttribute="Lots of metadata" />
-
-<!-- end facets -->
-
-<!-- start attached objects -->
-
-  <cc:editableValueHolder
-    name="userid"
-    displayName="Userid field"
-    expert="true"
-    hidden="false"
-    preferred="false"
-    shortDescription="Attach a converter or validator here, if you like"
-    someExtraMetadata="userid metadata" />
-
-  <cc:editableValueHolder
-    name="password"
-    displayName="Password field"
-    expert="true"
-    hidden="false"
-    preferred="false"
-    shortDescription="Attach a converter or validator here, if you like"
-    someExtraMetadata="password metadata" />
-
-  <cc:actionSource
-    name="login"
-    displayName="Login button"
-    expert="true"
-    hidden="false"
-    preferred="false"
-    shortDescription="Attach an actionListener here, if you like"
-    someExtraMetadata="login metadata" />
-
-<!-- end attached objects -->
-
-  <b:timeWastingTag />
-
-</cc:interface>
-
-<cc:implementation>
-
-  <cc:renderFacet name="header" />
-
-  <p><h:outputLabel for="#{cc.clientId}:userid" 
-                    value="#{cc.attrs.useridLabel}" /> 
-     <h:inputText id="userid" /></p>
-
-  <p><h:outputLabel for="#{cc.clientId}:password" 
-                    value="#{cc.attrs.passwordLabel}" /> 
-     <h:inputText id="password" /></p>
-
-  <p><h:commandButton value="#{cc.attrs.loginButtonLabel}"
-                      action="#{cc.attrs.loginAction}" /></p>
-
-  <cc:renderFacet name="footer" />
-
-
-</cc:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compositeComponentEL.xhtml b/jsf-ri/systest/web/resources/composite/compositeComponentEL.xhtml
deleted file mode 100644
index 6e535ee..0000000
--- a/jsf-ri/systest/web/resources/composite/compositeComponentEL.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-
-    <c:if test="#{cc != null}">
-        <h:outputText style="color:green;" value="PASSED"/>
-    </c:if>
-
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/compositionWithinComposite.xhtml b/jsf-ri/systest/web/resources/composite/compositionWithinComposite.xhtml
deleted file mode 100644
index 24db6a2..0000000
--- a/jsf-ri/systest/web/resources/composite/compositionWithinComposite.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:cc="http://java.sun.com/jsf/composite">
-
-<cc:interface />
-
-<cc:implementation>
-
- THIS LINE, AND EVERYTHING ABOVE IT IS DISREGARDED BY JSF
-    <ui:composition template="cc_template.xhtml">
- 
-      <ui:define name="title">title from cc:impl</ui:define>
-      <ui:define name="body">body from cc:impl</ui:define>
-         
-    </ui:composition>
-    THIS LINE, AND EVERYTHING BELOW IT IS DISREGARDED BY JSF
- 
-</cc:implementation>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/conditionalAttributeRendering.xhtml b/jsf-ri/systest/web/resources/composite/conditionalAttributeRendering.xhtml
deleted file mode 100644
index d067159..0000000
--- a/jsf-ri/systest/web/resources/composite/conditionalAttributeRendering.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-
-    <span style="#{cc.attrs.style}">Content</span>
-
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/converter1.xhtml b/jsf-ri/systest/web/resources/composite/converter1.xhtml
deleted file mode 100644
index 798eeea..0000000
--- a/jsf-ri/systest/web/resources/composite/converter1.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:inputText id="input" value="Input1"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/converter2.xhtml b/jsf-ri/systest/web/resources/composite/converter2.xhtml
deleted file mode 100644
index 94588aa..0000000
--- a/jsf-ri/systest/web/resources/composite/converter2.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input" targets="it2"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:inputText id="it2" value="Input2"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/converter3.xhtml b/jsf-ri/systest/web/resources/composite/converter3.xhtml
deleted file mode 100644
index aadf02d..0000000
--- a/jsf-ri/systest/web/resources/composite/converter3.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input"/>
-</composite:interface>
-
-<composite:implementation>
-    <ez:validator1 id="input"/>    
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/converter4.xhtml b/jsf-ri/systest/web/resources/composite/converter4.xhtml
deleted file mode 100644
index bf755f0..0000000
--- a/jsf-ri/systest/web/resources/composite/converter4.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:naming="http://mojarra.dev.java.net/source1">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input" targets="naming:input"/>
-</composite:interface>
-
-<composite:implementation>
-    <naming:naming id="naming">
-        <h:inputText id="input" value="Input4"/>
-    </naming:naming>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customAction.xhtml b/jsf-ri/systest/web/resources/composite/customAction.xhtml
deleted file mode 100644
index 4d05d67..0000000
--- a/jsf-ri/systest/web/resources/composite/customAction.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="action" method-signature="String f()" targets="command" />
-</composite:interface>
-
-<composite:implementation>
-    <div style="border: 1px black solid;">
-        <h:commandButton id="command" value="Click Me"/>
-    </div>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customActionListener.xhtml b/jsf-ri/systest/web/resources/composite/customActionListener.xhtml
deleted file mode 100644
index 64ae6f1..0000000
--- a/jsf-ri/systest/web/resources/composite/customActionListener.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="actionListener" method-signature="void f(javax.faces.event.ActionEvent)" targets="command" />
-</composite:interface>
-
-<composite:implementation>
-    <div style="border: 1px black solid;">
-        <h:commandButton id="command" value="Click Me"/>
-    </div>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customActionWrapper1.xhtml b/jsf-ri/systest/web/resources/composite/customActionWrapper1.xhtml
deleted file mode 100644
index 687bb7c..0000000
--- a/jsf-ri/systest/web/resources/composite/customActionWrapper1.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customAction" method-signature="String f()" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customAction id="aw1" action="#{cc.attrs.customAction}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customActionWrapper2.xhtml b/jsf-ri/systest/web/resources/composite/customActionWrapper2.xhtml
deleted file mode 100644
index cc6e5eb..0000000
--- a/jsf-ri/systest/web/resources/composite/customActionWrapper2.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customAction id="aw2" action="#{cc.attrs.bean.custom}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customActionWrapper3.xhtml b/jsf-ri/systest/web/resources/composite/customActionWrapper3.xhtml
deleted file mode 100644
index 61786a4..0000000
--- a/jsf-ri/systest/web/resources/composite/customActionWrapper3.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:actionWrapper1 id="aw3" customAction="#{cc.attrs.bean.custom}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customActionWrapper4.xhtml b/jsf-ri/systest/web/resources/composite/customActionWrapper4.xhtml
deleted file mode 100644
index 773cc64..0000000
--- a/jsf-ri/systest/web/resources/composite/customActionWrapper4.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customAction" method-signature="String f()" required="true" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:actionWrapper1 id="aw4" customAction="#{cc.attrs.customAction}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customCustomAction.xhtml b/jsf-ri/systest/web/resources/composite/customCustomAction.xhtml
deleted file mode 100644
index b1749de..0000000
--- a/jsf-ri/systest/web/resources/composite/customCustomAction.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="customAction" method-signature="String f()" />
-</composite:interface>
-
-<composite:implementation>
-    <div style="border: 1px black solid;">
-        <h:commandButton id="command" action="#{cc.attrs.customAction}" value="Click Me"/>
-    </div>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customValidator.xhtml b/jsf-ri/systest/web/resources/composite/customValidator.xhtml
deleted file mode 100644
index b66d62c..0000000
--- a/jsf-ri/systest/web/resources/composite/customValidator.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="validator" method-signature="void f(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)" targets="input" />
-</composite:interface>
-
-<composite:implementation>
-    <div style="border: 1px black solid;">
-        <h:inputText id="input" />
-    </div>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/customValueChangeListener.xhtml b/jsf-ri/systest/web/resources/composite/customValueChangeListener.xhtml
deleted file mode 100644
index 46b09a9..0000000
--- a/jsf-ri/systest/web/resources/composite/customValueChangeListener.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="valueChangeListener" method-signature="void f(javax.faces.event.ValueChangeEvent)" targets="input" />
-</composite:interface>
-
-<composite:implementation>
-    <div style="border: 1px black solid;">
-        <h:inputText id="input" />
-    </div>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/decorate.xhtml b/jsf-ri/systest/web/resources/composite/decorate.xhtml
deleted file mode 100644
index c81cb72..0000000
--- a/jsf-ri/systest/web/resources/composite/decorate.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface/>
-    <composite:implementation>
-            <ui:decorate template="/WEB-INF/templates/templateDecorateTemplate.xhtml">
-                <ui:define name="insert">
-                <span id="insert">Inserted Text</span>
-            </ui:define>
-        </ui:decorate>
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/defaultAction.xhtml b/jsf-ri/systest/web/resources/composite/defaultAction.xhtml
deleted file mode 100644
index abeba5f..0000000
--- a/jsf-ri/systest/web/resources/composite/defaultAction.xhtml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-  xmlns:h="http://java.sun.com/jsf/html"
-  xmlns:cc="http://java.sun.com/jsf/composite">
-<cc:interface>
-    <cc:attribute name="action" targets="loginButton" default="defaultActionNext?faces-redirect=true" />
-</cc:interface>
-
-<cc:implementation>
-
-  <h:commandButton value="Login" id="loginButton" />
-
-</cc:implementation>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/facetA.xhtml b/jsf-ri/systest/web/resources/composite/facetA.xhtml
deleted file mode 100644
index ea1e8ad..0000000
--- a/jsf-ri/systest/web/resources/composite/facetA.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-    <composite:insertFacet name="header" />
-    <span>Before Insert A(1)</span><br />
-    <composite:insertChildren />
-    <span>After Insert A(2)</span><br />
-    <composite:insertFacet name="footer" />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/facetB.xhtml b/jsf-ri/systest/web/resources/composite/facetB.xhtml
deleted file mode 100644
index cd59ff5..0000000
--- a/jsf-ri/systest/web/resources/composite/facetB.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-    <span>Before Insert B(1)</span><br />
-    <h:panelGrid id="grid">
-        <composite:insertFacet name="header" />
-        <composite:insertChildren />
-        <composite:insertFacet name="footer" />
-    </h:panelGrid>
-    <span>After Insert B(2)</span><br />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/facetD.xhtml b/jsf-ri/systest/web/resources/composite/facetD.xhtml
deleted file mode 100644
index 78a9554..0000000
--- a/jsf-ri/systest/web/resources/composite/facetD.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-    Before Insert A(1)<br />
-    <ez:facetE id="e">
-       <composite:insertFacet name="header" />
-       <composite:insertFacet name="footer" /> 
-    </ez:facetE>
-    After Insert A(2)<br />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/facetE.xhtml b/jsf-ri/systest/web/resources/composite/facetE.xhtml
deleted file mode 100644
index 6e81d9c..0000000
--- a/jsf-ri/systest/web/resources/composite/facetE.xhtml
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-</head>
-
-<body>                                   
-<composite:interface />
-<composite:implementation>
-    <h:panelGrid>
-        <composite:insertFacet name="header" />
-        <h:outputText value="row" />
-        <composite:insertFacet name="footer" />
-    </h:panelGrid>
-</composite:implementation>
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/groovyBacked.xhtml b/jsf-ri/systest/web/resources/composite/groovyBacked.xhtml
deleted file mode 100644
index 9d329ed..0000000
--- a/jsf-ri/systest/web/resources/composite/groovyBacked.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<composite:interface name="groovyBacked"
-                     displayName="Groovy Backed"
-                     shortDescription="A Groovy-backed test component"
-                     componentType="com.sun.faces.groovy.GroovyBacked">
-</composite:interface>
-
-<composite:implementation>
-    <h1 id="#{cc.attrs.id}" style="width: 100%; border: 0px; border-top: 2px; border-bottom: 2px; border-style: solid; border-color: black;">#{cc.text}</h1>
-</composite:implementation>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/inlinedStyle1.xhtml b/jsf-ri/systest/web/resources/composite/inlinedStyle1.xhtml
deleted file mode 100644
index e74357f..0000000
--- a/jsf-ri/systest/web/resources/composite/inlinedStyle1.xhtml
+++ /dev/null
@@ -1,67 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute required="true" name="style" type="java.lang.String"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:outputStylesheet>
-        <![CDATA[
-              #{cc.attrs.style}
-        ]]>
-    </h:outputStylesheet>
-    <ez:inlinedStyle2 style="#{cc.attrs.style}" alternateStyle="color:blue" useAlternateStyle="false" />
-    <ez:inlinedStyle2 style="#{cc.attrs.style}" alternateStyle="color:blue" useAlternateStyle="true" />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/inlinedStyle2.xhtml b/jsf-ri/systest/web/resources/composite/inlinedStyle2.xhtml
deleted file mode 100644
index 7cf7f63..0000000
--- a/jsf-ri/systest/web/resources/composite/inlinedStyle2.xhtml
+++ /dev/null
@@ -1,80 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute required="true" name="style" type="java.lang.String"/>
-    <composite:attribute required="true" name="alternateStyle" type="java.lang.String" />
-    <composite:attribute required="true" name="useAlternateStyle" type="java.lang.Boolean" />
-</composite:interface>
-
-<composite:implementation>
-    <c:choose>
-        <c:when test="#{cc.attrs.useAlternateStyle == true}">
-            <h:outputStylesheet>
-                <![CDATA[
-                    #{cc.attrs.style}
-                ]]>
-            </h:outputStylesheet>
-        </c:when>
-        <c:otherwise>
-            <h:outputStylesheet>
-                <![CDATA[
-                    #{cc.attrs.alternateStyle}
-                ]]>
-            </h:outputStylesheet>
-        </c:otherwise>
-    </c:choose>
-    <ez:inlinedStyleAndScript id="ss" style="#{cc.attrs.style}" />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/inlinedStyleAndScript.xhtml b/jsf-ri/systest/web/resources/composite/inlinedStyleAndScript.xhtml
deleted file mode 100644
index 30cf5ac..0000000
--- a/jsf-ri/systest/web/resources/composite/inlinedStyleAndScript.xhtml
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute required="true" name="style" type="java.lang.String"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:outputStylesheet>
-        <![CDATA[
-              #{cc.attrs.style}
-        ]]>
-    </h:outputStylesheet>
-    <h:outputScript target="head">
-        var a = "#{cc.id}";
-    </h:outputScript>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/insertChildrenRequiredFalse.xhtml b/jsf-ri/systest/web/resources/composite/insertChildrenRequiredFalse.xhtml
deleted file mode 100644
index 0285162..0000000
--- a/jsf-ri/systest/web/resources/composite/insertChildrenRequiredFalse.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface/>
-
-<composite:implementation>
-    <h:panelGrid>
-        <composite:insertChildren/>
-    </h:panelGrid>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/insertChildrenRequiredTrue.xhtml b/jsf-ri/systest/web/resources/composite/insertChildrenRequiredTrue.xhtml
deleted file mode 100644
index f185721..0000000
--- a/jsf-ri/systest/web/resources/composite/insertChildrenRequiredTrue.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface/>
-
-<composite:implementation>
-    <h:panelGrid>
-        <composite:insertChildren required="true"/>
-    </h:panelGrid>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/insertFacetRequiredFalse.xhtml b/jsf-ri/systest/web/resources/composite/insertFacetRequiredFalse.xhtml
deleted file mode 100644
index b0ec89f..0000000
--- a/jsf-ri/systest/web/resources/composite/insertFacetRequiredFalse.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface/>
-
-<composite:implementation>
-    <h:panelGrid>
-        <composite:insertFacet name="header" required="false"/>
-    </h:panelGrid>
-    <h:panelGrid>
-        <composite:insertFacet name="header2"/>
-    </h:panelGrid>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/insertFacetRequiredTrue.xhtml b/jsf-ri/systest/web/resources/composite/insertFacetRequiredTrue.xhtml
deleted file mode 100644
index e4d1625..0000000
--- a/jsf-ri/systest/web/resources/composite/insertFacetRequiredTrue.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface/>
-
-<composite:implementation>
-    <h:panelGrid>
-        <composite:insertFacet name="header" required="true"/>
-    </h:panelGrid>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/invalidMeArgs.xhtml b/jsf-ri/systest/web/resources/composite/invalidMeArgs.xhtml
deleted file mode 100644
index f626769..0000000
--- a/jsf-ri/systest/web/resources/composite/invalidMeArgs.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="custom" method-signature="String f()" />
-    </composite:interface>
-    <composite:implementation>
-        <ez:nesting id="n">
-        <h:form id="form">
-            <h:commandButton id="out" value="#{cc.attrs.custom(cc.attrs.arg1)}" />
-        </h:form>
-        </ez:nesting>
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/invalidVeArgs.xhtml b/jsf-ri/systest/web/resources/composite/invalidVeArgs.xhtml
deleted file mode 100644
index 0adbd81..0000000
--- a/jsf-ri/systest/web/resources/composite/invalidVeArgs.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="bean" method-signature="String f()" />
-    </composite:interface>
-    <composite:implementation>
-        <ez:nesting id="n">
-        <h:form id="form">
-            <h:outputText id="out" value="#{cc.attrs.bean(cc.attrs.arg1)}" />
-        </h:form>
-        </ez:nesting>
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/javaBackedComponentDefaultAttrValues.xhtml b/jsf-ri/systest/web/resources/composite/javaBackedComponentDefaultAttrValues.xhtml
deleted file mode 100644
index d5cb7b1..0000000
--- a/jsf-ri/systest/web/resources/composite/javaBackedComponentDefaultAttrValues.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:cc="http://java.sun.com/jsf/composite">
-
-    <cc:interface componentType="JavaBackedComponentDefaultAttrValues">
-
-        <cc:attribute name="attr1" default="attr1Value" />
-        <cc:attribute name="attr2" default="attr2Value" />
-        <cc:attribute name="attr3" method-signature="java.text.Format f()" default="#{compositeBean.format}" />
-        <cc:attribute name="action" method-signature="java.lang.String f()"
-                      default="#{compositeBean.action}" />
-        <cc:attribute name="actionListener" method-signature="void f(javax.faces.event.ActionEvent)"
-                      default="#{compositeBean.actionListener}" />
-        <cc:attribute name="validator" method-signature="void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)"
-                      default="#{compositeBean.validate}"/>
-        <cc:attribute name="valueChangeListener" method-signature="void valueChange(javax.faces.event.ValueChangeEvent)"
-                      default="#{compositeBean.valueChange}"/>
-
-
-    </cc:interface>
-
-    <cc:implementation>
-        
-        <h:commandButton id="action" value="action button"/>
-        <h:commandButton id="actionListener" value="actionListener button"/>
-        <h:inputText id="validator" />
-        <h:inputText id="valueChangeListener" />
-
-    </cc:implementation>
-
-</html>
-
diff --git a/jsf-ri/systest/web/resources/composite/javaTopLevelActionListenerComponent.xhtml b/jsf-ri/systest/web/resources/composite/javaTopLevelActionListenerComponent.xhtml
deleted file mode 100644
index 913ea5f..0000000
--- a/jsf-ri/systest/web/resources/composite/javaTopLevelActionListenerComponent.xhtml
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--
-
-     DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-     Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
-     The contents of this file are subject to the terms of either the GNU
-     General Public License Version 2 only ("GPL") or the Common Development
-     and Distribution License("CDDL") (collectively, the "License").  You
-     may not use this file except in compliance with the License. You can obtain
-     a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-     or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-     language governing permissions and limitations under the License.
-
-     When distributing the software, include this License Header Notice in each
-     file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-     Sun designates this particular file as subject to the "Classpath" exception
-     as provided by Sun in the GPL Version 2 section of the License file that
-     accompanied this code.  If applicable, add the following below the License
-     Header, with the fields enclosed by brackets [] replaced by your own
-     identifying information: "Portions Copyrighted [year]
-     [name of copyright owner]"
-
-     Contributor(s):
-
-     If you wish your version of this file to be governed by only the CDDL or
-     only the GPL Version 2, indicate your decision by adding "[Contributor]
-     elects to include this software in this distribution under the [CDDL or GPL
-     Version 2] license."  If you don't indicate a single choice of license, a
-     recipient has the option to distribute your version of this file under
-     either the CDDL, the GPL Version 2 or to extend the choice of license to
-     its licensees as provided above.  However, if you add GPL Version 2 code
-     and therefore, elected the GPL Version 2 license, then the option applies
-     only if the new code is made subject to such option by the copyright
-     holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:cc="http://java.sun.com/jsf/composite">
-<head>
-
-    <title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<cc:interface name="myComponent"
-              displayName="Very Simple Composite Component"
-              preferred="true"
-              expert="false"
-              shortDescription="An illustration of the composite component feature"
-              componentType="javaTopLevelActionListenerComponent">
-
-
-</cc:interface>
-
-<cc:implementation>
-
-    <h:commandButton id="loginAction" value="Login">
-        <f:actionListener
-              type="com.sun.faces.composite.ComponentResolverActionListener"/>
-        <f:actionListener binding="#{cc}"/>
-    </h:commandButton>
-
-
-    <h:panelGrid columns="2">
-        <h:outputText value="Resolved component family:"/>
-        <h:outputText value="#{resolvedComponentFamily}"/>
-        <h:outputText value="Composite component item:"/>
-        <h:outputText value="#{cc.item}"/>
-    </h:panelGrid>
-
-</cc:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/javaTopLevelComponent.xhtml b/jsf-ri/systest/web/resources/composite/javaTopLevelComponent.xhtml
deleted file mode 100644
index f508898..0000000
--- a/jsf-ri/systest/web/resources/composite/javaTopLevelComponent.xhtml
+++ /dev/null
@@ -1,98 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:cc="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<cc:interface name="myComponent"
-                     displayName="Very Simple Composite Component"
-                     preferred="true"
-                     expert="false"
-                     shortDescription="An illustration of the composite component feature"
-             componentType="javaTopLevelComponent">
-
-  <cc:attribute targets="loginAction" name="action" default="javaTopLevelComponent2"
-                method-signature="java.lang.Object action()" />
-
-  <cc:attribute name="usernameLabel" default="User ID: " />
-
-  <cc:attribute name="loginButtonLabel" default="Login " />
-
-  <cc:attribute name="int" type="int" requred="false" />
-
-  <cc:editableValueHolder name="username" />
-
-  <cc:actionSource name="loginAction" />
-
-</cc:interface>
-
-<cc:implementation>
-
-      <p>Get out java property of type String #{cc.item}</p>
-
-      <p>Get out java property of type int #{cc.int}</p>
-
-      <p>
-
-         #{cc.attrs.usernameLabel}
-         <h:inputText id="username" />
-
-      </p>
-
-      <p>
-
-	<h:commandButton id="loginAction" value="#{cc.attrs.loginButtonLabel}"
-                         action="#{cc.attrs.loginAction}"/>
-
-      </p>
-
-</cc:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/jsr276Correct01.xhtml b/jsf-ri/systest/web/resources/composite/jsr276Correct01.xhtml
deleted file mode 100644
index 27332e8..0000000
--- a/jsf-ri/systest/web/resources/composite/jsr276Correct01.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:fmd="http://java.sun.com/xml/ns/javaee/faces/design-time-metadata"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface name="jsr276">
-
-  <composite:attribute name="pinLabel" default="PIN">
-    <composite:extension>
-      <fmd:expert>true</fmd:expert>
-    </composite:extension>
-  </composite:attribute>
-
-</composite:interface>
-
-<composite:implementation>
-
-  <p class="grayBox">composite component with correctly specified jsr276
-  metadata</p>
-
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/jsr276Incorrect01.xhtml b/jsf-ri/systest/web/resources/composite/jsr276Incorrect01.xhtml
deleted file mode 100644
index d5ed420..0000000
--- a/jsf-ri/systest/web/resources/composite/jsr276Incorrect01.xhtml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:metaData="http://java.sun.com/xml/ns/javaee/faces/design-time-metadata"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface name="jsr276">
-
-  <composite:attribute name="pinLabel" default="PIN">
-      <metaData:expert>true</metaData:expert>
-  </composite:attribute>
-
-</composite:interface>
-
-<composite:implementation>
-
-  <p class="grayBox">composite component with incorrectly specified jsr276
-  metadata</p>
-
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/meDefaults.xhtml b/jsf-ri/systest/web/resources/composite/meDefaults.xhtml
deleted file mode 100644
index 7a56daf..0000000
--- a/jsf-ri/systest/web/resources/composite/meDefaults.xhtml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title></title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="action" method-signature="String method()" targets="form1:command" default="#{compositeBean.action}" />
-        <composite:attribute name="actionListener" method-signature="void method()" targets="form2:command2" default="#{compositeBean.actionListener}" />
-        <composite:attribute name="validator" method-signature="void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)" targets="form4:input" default="#{compositeBean.validate}" />
-        <composite:attribute name="valueChangeListener" method-signature="void valueChange(javax.faces.event.ValueChangeEvent)" targets="form5:input2" default="#{compositeBean.valueChange}" />
-        <composite:attribute name="custom" method-signature="String method()" default="#{compositeBean.custom}"/>
-    </composite:interface>
-    <composite:implementation>
-        <h:form id="form1">
-            <h:commandButton id="command" value="action" />
-        </h:form>
-        <br />
-        <h:form id="form2">
-            <h:commandButton id="command2" value="actionListener" />
-        </h:form>
-        <br />
-        <h:form id="form3">
-            <h:commandButton id="command3" value="custom" action="#{cc.attrs.custom}"/>
-        </h:form>
-        <br />
-        <h:form id="form4">
-            <h:inputText id="input" />
-            <h:commandButton id="command" value="valiator"/>
-        </h:form>
-        <br />
-        <h:form id="form5">
-            <h:inputText id="input2" />
-            <h:commandButton id="command" value="valueChange" />
-        </h:form>
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/myaction.xhtml b/jsf-ri/systest/web/resources/composite/myaction.xhtml
deleted file mode 100644
index c1e3551..0000000
--- a/jsf-ri/systest/web/resources/composite/myaction.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface >
-        <composite:attribute name="myaction" required="false" method-signature="java.lang.String f()" />
-    </composite:interface>
-    <composite:implementation>
-        <h:form id="form">
-            <h:commandButton id="submit" value="submit" action="#{cc.attrs.myaction}" />
-        </h:form>
-        <h:messages />
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/nesting.xhtml b/jsf-ri/systest/web/resources/composite/nesting.xhtml
deleted file mode 100644
index 790be88..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface />
-<composite:implementation>
-    <composite:insertChildren />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/nesting1.xhtml b/jsf-ri/systest/web/resources/composite/nesting1.xhtml
deleted file mode 100644
index ee6ad82..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting1.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="value" required="true"/>
-    </composite:interface>
-    <composite:implementation>
-        <ez:wrapper>
-            <span id="value">Should have a value: <h:outputText value="#{cc.attrs.value}" /></span>
-            <br />
-            <span id="novalue">Shouldn't have a value: <h:outputText value="#{cc.parent.attrs.value}" /></span>
-        </ez:wrapper>
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/nesting10.xhtml b/jsf-ri/systest/web/resources/composite/nesting10.xhtml
deleted file mode 100644
index ad90e4e..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting10.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="bean" required="true" />
-    </composite:interface>
-    <composite:implementation>
-        <ez:nesting6 id="nesting6" bean="#{cc.attrs.bean}"/>
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/nesting11.xhtml b/jsf-ri/systest/web/resources/composite/nesting11.xhtml
deleted file mode 100644
index 6c7c75d..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting11.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="value" required="true"/>
-        <composite:attribute name="values" required="true" />
-    </composite:interface>
-    <composite:implementation>
-        <c:choose>
-            <c:when test="#{cc.attrs.value eq 'equalityCheck'}">
-                <span>PASSED</span><br />
-            </c:when>
-            <c:otherwise>
-                <span>FAILED</span><br />
-            </c:otherwise>
-        </c:choose>
-        <ez:nesting9 check="#{cc.attrs.value}" />
-        <c:forEach items="#{cc.attrs.values}" var="v">
-            <ez:nesting9 check="#{v}" />
-        </c:forEach>
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/nesting2.xhtml b/jsf-ri/systest/web/resources/composite/nesting2.xhtml
deleted file mode 100644
index b54272b..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting2.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="customAction" required="true" method-signature="String method()"/>
-    </composite:interface>
-    <composite:implementation>
-        <ez:wrapper>
-            <h:commandButton id="commandButton" value="Click Me" action="#{cc.attrs.customAction}" />
-        </ez:wrapper>
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/nesting3.xhtml b/jsf-ri/systest/web/resources/composite/nesting3.xhtml
deleted file mode 100644
index 34c4e32..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting3.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="action" required="true" method-signature="String method()" targets="wrapper:commandButton"/>
-    </composite:interface>
-    <composite:implementation>
-        <ez:wrapper id="wrapper">
-            <h:commandButton id="commandButton" value="Click Me" />
-        </ez:wrapper>
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/nesting4.xhtml b/jsf-ri/systest/web/resources/composite/nesting4.xhtml
deleted file mode 100644
index 811fe80..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting4.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="attr1" required="false" />
-        <composite:attribute name="attr2" required="false" />
-    </composite:interface>
-    <composite:implementation>
-        <c:set var="myvar" value="#{cc.attrs.attr1}" />
-        <ez:nesting5 id="nesting5" other="#{myvar}" attr2="#{cc.attrs.attr2}" cid="#{cc.clientId}" />
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/nesting5.xhtml b/jsf-ri/systest/web/resources/composite/nesting5.xhtml
deleted file mode 100644
index 55c6ae4..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting5.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="other" required="false" />
-        <composite:attribute name="attr2" required="false" />
-        <composite:attribute name="cid" required="false" />
-    </composite:interface>
-    <composite:implementation>
-        Other: <h:outputText style="color:black" value="#{cc.attrs.other}" /><br />
-        Attr2: <h:outputText style="color:black" value="#{cc.attrs.attr2}" /><br />
-        Cid:   <h:outputText style="color:black" value="#{cc.attrs.cid}" /><br />
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/nesting6.xhtml b/jsf-ri/systest/web/resources/composite/nesting6.xhtml
deleted file mode 100644
index 55fa001..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting6.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="bean" required="true" />
-    </composite:interface>
-    <composite:implementation>
-        <ez:nesting7 id="nesting7" action="#{cc.attrs.bean.action}"
-                                   actionListener="#{cc.attrs.bean.actionListener}"
-                                   validator="#{cc.attrs.bean.validate}"
-                                   valueChangeListener="#{cc.attrs.bean.valueChange}"
-                                   bean="#{cc.attrs.bean}"/>
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/nesting7.xhtml b/jsf-ri/systest/web/resources/composite/nesting7.xhtml
deleted file mode 100644
index f342b8b..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting7.xhtml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="action" method-signature="String method()" targets="form1:command" />
-        <composite:attribute name="actionListener" method-signature="void method(javax.faces.event.ActionEvent)" targets="form2:command2" />
-        <composite:attribute name="validator" method-signature="void validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)" targets="form4:input" />
-        <composite:attribute name="valueChangeListener" method-signature="void valueChange(javax.faces.event.ValueChangeEvent)" targets="form5:input2" />
-        <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" />
-    </composite:interface>
-    <composite:implementation>
-        <h:form id="form1">
-            <h:commandButton id="command" value="action" />
-        </h:form>
-        <br />
-        <h:form id="form2">
-            <h:commandButton id="command2" value="actionListener" />
-        </h:form>
-        <br />
-        <h:form id="form3">
-            <h:commandButton id="command3" value="custom" action="#{cc.attrs.bean.custom}"/>
-        </h:form>
-        <br />
-        <h:form id="form4">
-            <h:inputText id="input" />
-            <h:commandButton id="command" value="valiator"/>
-        </h:form>
-        <br />
-        <h:form id="form5">
-            <h:inputText id="input2" />
-            <h:commandButton id="command" value="valueChange" />
-        </h:form>
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/nesting8.xhtml b/jsf-ri/systest/web/resources/composite/nesting8.xhtml
deleted file mode 100644
index e8e983e..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting8.xhtml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="value" required="true"/>
-        <composite:attribute name="values" required="true" />
-    </composite:interface>
-    <composite:implementation>
-        <c:choose>
-            <c:when test="#{cc.attrs.value eq 'equalityCheck'}">
-                <span>PASSED</span><br />
-            </c:when>
-            <c:otherwise>
-                <span>FAILED</span><br />
-            </c:otherwise>
-        </c:choose>
-        <ez:nesting11 value="#{cc.attrs.value}" values="#{cc.attrs.values}" />
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/nesting9.xhtml b/jsf-ri/systest/web/resources/composite/nesting9.xhtml
deleted file mode 100644
index 908884b..0000000
--- a/jsf-ri/systest/web/resources/composite/nesting9.xhtml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface>
-        <composite:attribute name="check" required="true"/>
-    </composite:interface>
-    <composite:implementation>
-        <c:choose>
-            <c:when test="#{cc.attrs.check eq 'equalityCheck'}">
-                <span>PASSED</span><br />
-            </c:when>
-            <c:otherwise>
-                <span>FAILED</span><br />
-            </c:otherwise>
-        </c:choose>
-    </composite:implementation>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/composite/notrequired.xhtml b/jsf-ri/systest/web/resources/composite/notrequired.xhtml
deleted file mode 100644
index 16d1273..0000000
--- a/jsf-ri/systest/web/resources/composite/notrequired.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="action" required="false" method-signature="String f()" targets="command" />
-</composite:interface>
-
-<composite:implementation>
-    <h:commandButton id="command" />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/renderFacetRequiredFalse.xhtml b/jsf-ri/systest/web/resources/composite/renderFacetRequiredFalse.xhtml
deleted file mode 100644
index bb8ab1b..0000000
--- a/jsf-ri/systest/web/resources/composite/renderFacetRequiredFalse.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface/>
-
-<composite:implementation>
-   <composite:renderFacet name="facet"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/renderFacetRequiredTrue.xhtml b/jsf-ri/systest/web/resources/composite/renderFacetRequiredTrue.xhtml
deleted file mode 100644
index c0e5b45..0000000
--- a/jsf-ri/systest/web/resources/composite/renderFacetRequiredTrue.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface/>
-
-<composite:implementation>
-   <composite:renderFacet name="header" required="true"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/required.xhtml b/jsf-ri/systest/web/resources/composite/required.xhtml
deleted file mode 100644
index 8183537..0000000
--- a/jsf-ri/systest/web/resources/composite/required.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:attribute name="action" required="true" method-signature="String f()" targets="command" />
-</composite:interface>
-
-<composite:implementation>
-    <h:commandButton id="command" />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/required01.xhtml b/jsf-ri/systest/web/resources/composite/required01.xhtml
deleted file mode 100644
index 6aeb53b..0000000
--- a/jsf-ri/systest/web/resources/composite/required01.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-
-    <composite:attribute name="table" required="true" />
-</composite:interface>
-
-<composite:implementation>
-    <h:commandButton id="command" value="#{cc.attrs.table}" />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/requiredFacet.xhtml b/jsf-ri/systest/web/resources/composite/requiredFacet.xhtml
deleted file mode 100644
index 48ca93d..0000000
--- a/jsf-ri/systest/web/resources/composite/requiredFacet.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-
-    <composite:facet name="table" required="true" />
-</composite:interface>
-
-<composite:implementation>
-    <composite:insertFacet name="table" />
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/resourceDependencyComponent.xhtml b/jsf-ri/systest/web/resources/composite/resourceDependencyComponent.xhtml
deleted file mode 100644
index da79954..0000000
--- a/jsf-ri/systest/web/resources/composite/resourceDependencyComponent.xhtml
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:cc="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<cc:interface name="resourceDependencyComponent"
-                     displayName="Very Simple Composite Component"
-                     preferred="true"
-                     expert="false"
-                     shortDescription="An illustration of the composite component feature with a resource dependency"
-                     componentType="resourceDependencyComponent">
-
-
-
-</cc:interface>
-
-<cc:implementation>
-
-    <h:form>
-      <h:commandButton id="navigateAway" value="Go to next page" action="resourceDependencyComponentNextPage" />
-      <h:commandButton id="stay" value="Stay on same page" />
-    </h:form>
-
-</cc:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/showClientId01.xhtml b/jsf-ri/systest/web/resources/composite/showClientId01.xhtml
deleted file mode 100644
index e006172..0000000
--- a/jsf-ri/systest/web/resources/composite/showClientId01.xhtml
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface >
-
-</composite:interface>
-
-<composite:implementation>
-
-  <p class="grayBox">My clientId is #{cc.clientId}</p>
-
-
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validator1.xhtml b/jsf-ri/systest/web/resources/composite/validator1.xhtml
deleted file mode 100644
index 798eeea..0000000
--- a/jsf-ri/systest/web/resources/composite/validator1.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:inputText id="input" value="Input1"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validator2.xhtml b/jsf-ri/systest/web/resources/composite/validator2.xhtml
deleted file mode 100644
index 94588aa..0000000
--- a/jsf-ri/systest/web/resources/composite/validator2.xhtml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input" targets="it2"/>
-</composite:interface>
-
-<composite:implementation>
-    <h:inputText id="it2" value="Input2"/>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validator3.xhtml b/jsf-ri/systest/web/resources/composite/validator3.xhtml
deleted file mode 100644
index aadf02d..0000000
--- a/jsf-ri/systest/web/resources/composite/validator3.xhtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input"/>
-</composite:interface>
-
-<composite:implementation>
-    <ez:validator1 id="input"/>    
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validator4.xhtml b/jsf-ri/systest/web/resources/composite/validator4.xhtml
deleted file mode 100644
index bf755f0..0000000
--- a/jsf-ri/systest/web/resources/composite/validator4.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:naming="http://mojarra.dev.java.net/source1">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="input" targets="naming:input"/>
-</composite:interface>
-
-<composite:implementation>
-    <naming:naming id="naming">
-        <h:inputText id="input" value="Input4"/>
-    </naming:naming>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validatorWrapper1.xhtml b/jsf-ri/systest/web/resources/composite/validatorWrapper1.xhtml
deleted file mode 100644
index 7315215..0000000
--- a/jsf-ri/systest/web/resources/composite/validatorWrapper1.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customValidator" method-signature="void f(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customValidator id="aw1" validator="#{cc.attrs.customValidator}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validatorWrapper2.xhtml b/jsf-ri/systest/web/resources/composite/validatorWrapper2.xhtml
deleted file mode 100644
index 1c5af42..0000000
--- a/jsf-ri/systest/web/resources/composite/validatorWrapper2.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customValidator id="aw2" validator="#{cc.attrs.bean.validate}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validatorWrapper3.xhtml b/jsf-ri/systest/web/resources/composite/validatorWrapper3.xhtml
deleted file mode 100644
index 968bcc5..0000000
--- a/jsf-ri/systest/web/resources/composite/validatorWrapper3.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:validatorWrapper1 id="aw3" customValidator="#{cc.attrs.bean.validate}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/validatorWrapper4.xhtml b/jsf-ri/systest/web/resources/composite/validatorWrapper4.xhtml
deleted file mode 100644
index 8d55a10..0000000
--- a/jsf-ri/systest/web/resources/composite/validatorWrapper4.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customValidator" method-signature="void f(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)" required="true" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:validatorWrapper1 id="aw4" customValidator="#{cc.attrs.customValidator}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/valueChangeSetPropertyActionListener.xhtml b/jsf-ri/systest/web/resources/composite/valueChangeSetPropertyActionListener.xhtml
deleted file mode 100644
index 8e51984..0000000
--- a/jsf-ri/systest/web/resources/composite/valueChangeSetPropertyActionListener.xhtml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-<title>Not present in rendered output</title>
-
-</head>
-
-<body>
-
-<composite:interface>
-    <composite:editableValueHolder name="value"/>
-    <composite:actionSource name="submit"/>
-</composite:interface>
-
-<composite:implementation>
-    <p>inputText with id="value": <h:inputText id="value" /></p>
-
-   <p><h:commandButton id="submit" value="submit" /></p>
-
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/valueChangeWrapper1.xhtml b/jsf-ri/systest/web/resources/composite/valueChangeWrapper1.xhtml
deleted file mode 100644
index 8612593..0000000
--- a/jsf-ri/systest/web/resources/composite/valueChangeWrapper1.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customValueChange" method-signature="void f(javax.faces.event.ValueChangeEvent)" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customValueChangeListener id="aw1" valueChangeListener="#{cc.attrs.customValueChange}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/valueChangeWrapper2.xhtml b/jsf-ri/systest/web/resources/composite/valueChangeWrapper2.xhtml
deleted file mode 100644
index bf6dea2..0000000
--- a/jsf-ri/systest/web/resources/composite/valueChangeWrapper2.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:customValueChangeListener id="aw2" valueChangeListener="#{cc.attrs.bean.valueChange}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/valueChangeWrapper3.xhtml b/jsf-ri/systest/web/resources/composite/valueChangeWrapper3.xhtml
deleted file mode 100644
index 6669dc2..0000000
--- a/jsf-ri/systest/web/resources/composite/valueChangeWrapper3.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="bean" type="com.sun.faces.composite.CompositeBean" required="false" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:valueChangeWrapper1 id="aw3" customValueChange="#{cc.attrs.bean.valueChange}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/valueChangeWrapper4.xhtml b/jsf-ri/systest/web/resources/composite/valueChangeWrapper4.xhtml
deleted file mode 100644
index 4cfb248..0000000
--- a/jsf-ri/systest/web/resources/composite/valueChangeWrapper4.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-</head>
-
-<body>
-<composite:interface>
-    <composite:attribute name="customValueChange" method-signature="void f(javax.faces.event.ValueChangeEvent)" required="true" />
-</composite:interface>
-<composite:implementation>
-   <ez:nesting id="nesting">
-   <div style="border: 1px black solid">
-       <ez:valueChangeWrapper1 id="aw4" customValueChange="#{cc.attrs.customValueChange}" />
-   </div>
-   </ez:nesting>
-</composite:implementation>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/resources/composite/wrapper.xhtml b/jsf-ri/systest/web/resources/composite/wrapper.xhtml
deleted file mode 100644
index a78702c..0000000
--- a/jsf-ri/systest/web/resources/composite/wrapper.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite"
-      xmlns:ez="http://java.sun.com/jsf/composite/composite">
-<head>
-    <title>Should Not Be Displayed</title>
-</head>
-<body>
-    <composite:interface >
-        <composite:attribute name="items" required="false" />
-        <composite:attribute name="itemsList" required="false" />
-        <composite:attribute name="testAction" required="false" method-signature="java.lang.String f()" />
-        <composite:attribute name="testAction2" required="false" method-signature="java.lang.String f()" />
-    </composite:interface>
-    <composite:implementation>
-        <composite:insertChildren />
-    </composite:implementation>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/ezbehaviors/compositeTest.xhtml b/jsf-ri/systest/web/resources/ezbehaviors/compositeTest.xhtml
deleted file mode 100644
index a3bd201..0000000
--- a/jsf-ri/systest/web/resources/ezbehaviors/compositeTest.xhtml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:composite="http://java.sun.com/jsf/composite">
-<head>
-
-    <title>Not present in rendered output</title>
-
-</head>
-<composite:interface name="composite"
-                     displayName="BehaviorHandler composite component test">
-    <composite:attribute name="commandAction"
-                         method-signature="String f1()" targets="command">
-    </composite:attribute>
-    <composite:attribute name="defferedAction">
-        <composite:deferred-method>
-            <composite:method-signature>
-                java.lang.Object action()
-            </composite:method-signature>
-        </composite:deferred-method>
-    </composite:attribute>
-    <composite:attribute name="value" targets="input"/>
-    <composite:editableValueHolder name="input"/>
-    <composite:clientBehavior name="ok" default="true" event="action"
-                              targets="command cancel"/>
-</composite:interface>
-
-<composite:implementation>
-    <p>
-        <h:inputText id="input" value="#{cc.attrs.value}">
-        </h:inputText>
-        <h:commandButton id="cancel" value="Cancel"/>
-        <f:subview id="sub">
-            <h:panelGroup id="group">
-                <h:commandButton id="command" value="Ok"
-                                 action="#{cc.attrs.commandAction}">
-                </h:commandButton>
-            </h:panelGroup>
-        </f:subview>
-    </p>
-
-
-</composite:implementation>
-
-<body>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/resources/simple.css b/jsf-ri/systest/web/resources/simple.css
deleted file mode 100644
index 52fa2d8..0000000
--- a/jsf-ri/systest/web/resources/simple.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.h1 {
-    color: red
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/simple.js b/jsf-ri/systest/web/resources/simple.js
deleted file mode 100644
index 682d7d3..0000000
--- a/jsf-ri/systest/web/resources/simple.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function doit() {
-    alert("doit");
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/simple2.js b/jsf-ri/systest/web/resources/simple2.js
deleted file mode 100644
index 682d7d3..0000000
--- a/jsf-ri/systest/web/resources/simple2.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function doit() {
-    alert("doit");
-}
\ No newline at end of file
diff --git a/jsf-ri/systest/web/resources/vLibrary/2_0/duke-nv.gif b/jsf-ri/systest/web/resources/vLibrary/2_0/duke-nv.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/systest/web/resources/vLibrary/2_0/duke-nv.gif and /dev/null differ
diff --git a/jsf-ri/systest/web/resources/vLibrary/2_0/duke.gif/1_0.gif b/jsf-ri/systest/web/resources/vLibrary/2_0/duke.gif/1_0.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/systest/web/resources/vLibrary/2_0/duke.gif/1_0.gif and /dev/null differ
diff --git a/jsf-ri/systest/web/resources/vLibrary/2_0/duke.gif/1_1.gif b/jsf-ri/systest/web/resources/vLibrary/2_0/duke.gif/1_1.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/systest/web/resources/vLibrary/2_0/duke.gif/1_1.gif and /dev/null differ
diff --git a/jsf-ri/systest/web/resources/vLibrary/2_0/duke2.gif/1_1 b/jsf-ri/systest/web/resources/vLibrary/2_0/duke2.gif/1_1
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/systest/web/resources/vLibrary/2_0/duke2.gif/1_1 and /dev/null differ
diff --git a/jsf-ri/systest/web/selectItemEscape.jsp b/jsf-ri/systest/web/selectItemEscape.jsp
deleted file mode 100644
index bdd43ef..0000000
--- a/jsf-ri/systest/web/selectItemEscape.jsp
+++ /dev/null
@@ -1,112 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-\<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-  <head> <title>Test SelectItem with escape true and false</title> </head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <body bgcolor="white">
-    <f:view>
-
-      <h:form prependId="false">
-
-<h:panelGrid columns="2">
-
-  SelectOneMenu with no escape value
-
-<h:selectOneMenu id="menu1">
-						<f:selectItem itemValue="10" itemLabel="menu1_Guy <Lafleur>" />
-						<f:selectItem itemValue="99" itemLabel="menu1_Wayne <Gretzky>" />
-						<f:selectItem itemValue="4" itemLabel="menu1_Bobby +Orr+"  />
-						<f:selectItem itemValue="2" itemLabel="menu1_Brad &{Park}" />
-						<f:selectItem itemValue="9" itemLabel="menu1_Gordie &Howe&" />
-					</h:selectOneMenu>
-SelectOneMenu with true escape value
-
-<h:selectOneMenu id="menu2">
-						<f:selectItem escape="true" itemValue="10" itemLabel="menu2_Guy <Lafleur>" />
-						<f:selectItem escape="true" itemValue="99" itemLabel="menu2_Wayne <Gretzky>" />
-						<f:selectItem escape="true" itemValue="4" itemLabel="menu2_Bobby +Orr+"  />
-						<f:selectItem escape="true" itemValue="2" itemLabel="menu2_Brad &{Park}" />
-						<f:selectItem escape="true" itemValue="9" itemLabel="menu2_Gordie &Howe&" />
-					</h:selectOneMenu>
-
-SelectOneMenu with false escape value
-
-<h:selectOneMenu id="menu3">
-						<f:selectItem escape="false" itemValue="10" itemLabel="menu3_Guy <Lafleur>" />
-						<f:selectItem escape="false" itemValue="99" itemLabel="menu3_Wayne <Gretzky>" />
-						<f:selectItem escape="false" itemValue="4" itemLabel="menu3_Bobby +Orr+"  />
-						<f:selectItem escape="false" itemValue="2" itemLabel="menu3_Brad &{Park}" />
-						<f:selectItem escape="false" itemValue="9" itemLabel="menu3_Gordie &Howe&" />
-					</h:selectOneMenu>
-
-
-</h:panelGrid>
-
-
-      </h:form>
-
-    </f:view>
-    </body>
-</html>  
diff --git a/jsf-ri/systest/web/session-invalidator.jsp b/jsf-ri/systest/web/session-invalidator.jsp
deleted file mode 100644
index 1f35665..0000000
--- a/jsf-ri/systest/web/session-invalidator.jsp
+++ /dev/null
@@ -1,91 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test with action that invalidates a session.</title>
-    <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-    <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-  </head>
-
-  <body>
-    <h1>Test with action that invalidates a session.</h1>
-
-    <f:view>
-
-     <h:form id="form">
-
-      <table border="1">
-
-       <tr>
-
-	 <td>
-
-	    Next cell's contents come from a bean in session scope.
-
-	 </td>
-
-	 <td>
-
-	    <h:outputText value="#{test3.stringProperty}" style="color: red"/>
-
-	 </td>
-
-	 <td>
-
-	   <h:commandButton action="#{methodRef.invalidateSession}"
-                          id="button1"
-                          value="Press to invalidate session and redisplay" />
-
-	 </td>
-
-       </tr>
-
-      </table>
-   
-      </h:form>
-
-    </f:view>
-
-
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/setApplicationMapProperty.xhtml b/jsf-ri/systest/web/setApplicationMapProperty.xhtml
deleted file mode 100644
index 19620d6..0000000
--- a/jsf-ri/systest/web/setApplicationMapProperty.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
->
-<h:head>
-<title>Set an application scoped property from query string parameters</title>
-</h:head>
-
-<h:body>
-
-    <c:set value="#{param['value']}" target="#{applicationScope}" property="#{param['name']}" />
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/standard/autocomplete.jsp b/jsf-ri/systest/web/standard/autocomplete.jsp
deleted file mode 100644
index f9d24a9..0000000
--- a/jsf-ri/systest/web/standard/autocomplete.jsp
+++ /dev/null
@@ -1,58 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>autocomplete.jsp</title>
-
- <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
- <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-  </head>
-  <body>
-      <f:view>
-          autocomplete on -> no attribute rendered: <h:inputSecret id="a" autocomplete="on"/>
-          autocomplete off -> attribute rendered: <h:inputSecret id="b" autocomplete="off"/>
-          no autocomplete defined -> no attribute rendered: <h:inputSecret id="c"/>
-          autocomplete on -> no attribute rendered: <h:inputText id="d" autocomplete="on"/>
-          autocomplete off -> attribute rendered: <h:inputText id="e" autocomplete="off"/>
-          no autocomplete defined -> no attribute rendered: <h:inputText id="f"/>
-      </f:view>
-  </body>
-</html>
-
-
diff --git a/jsf-ri/systest/web/standard/checkboxSubmittedValue.xhtml b/jsf-ri/systest/web/standard/checkboxSubmittedValue.xhtml
deleted file mode 100644
index 9b9b4ba..0000000
--- a/jsf-ri/systest/web/standard/checkboxSubmittedValue.xhtml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<head>
-    <title>checkboxSubmittedValue</title>
-</head>
-<body>
-   <h:form prependId="false">
-            <h:selectBooleanCheckbox id="box1" value="#{sessionScope.box1}" />
-            <h:selectBooleanCheckbox id="box2"
-                                     value="#{sessionScope.box2}"
-                                     immediate="true"
-                                     valueChangeListener="#{valueChangeListenerBean.valueChange}"
-                                     onclick="this.form.submit()"/>
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/clinknoform.jsp b/jsf-ri/systest/web/standard/clinknoform.jsp
deleted file mode 100644
index 831ff00..0000000
--- a/jsf-ri/systest/web/standard/clinknoform.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>clinknoform</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-  </head>
-  <body>
-  <f:view>
-
-      <h:commandLink id="clink1" value="Link1"/>
-
-      <h:commandLink id="clink2">
-          <h:outputText value="Link2"/>
-      </h:commandLink>
-
-      <h:commandLink id="clink3" value="Click me once">
-          <h:outputText value=" and click me twice"/>
-      </h:commandLink>
-
-  </f:view>
-  </body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/component01.jsp b/jsf-ri/systest/web/standard/component01.jsp
deleted file mode 100644
index 7f66313..0000000
--- a/jsf-ri/systest/web/standard/component01.jsp
+++ /dev/null
@@ -1,94 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>component01.jsp</title>
-
-<%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.component.UIInput"
-%><%@ page import="javax.el.ValueExpression"
-%>
- <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
- <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<% request.setAttribute("attrName", "attrValue"); %>
-  </head>
-  <body>
-      <f:view>
-          <h:inputText id="username" binding="#{usernamecomponent}" size="20" onkeypress="#{requestScope.attrName}"/> 
-      </f:view>
-  </body>
-</html>
-<%
-
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/component01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-    FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  ValueExpression binding = appl.getExpressionFactory().
-    createValueExpression(facesContext.getELContext(),"usernamecomponent", Object.class);
-  Object result = binding.getValue(facesContext.getELContext());
-  if (result == null || !(result instanceof UIInput)) {
-      System.out.println("/component01.jsp FAILED - Couldn't retrieve component.");
-      return;
-  }
-
-  UIInput usernamecomponent = (UIInput)result;
-  String size = (String) usernamecomponent.getAttributes().get("size");
-  if ( !(size.equals("20"))) {
-      System.out.println("/component01.jsp FAILED - Invalid value for size attribute");
-      return;
-  } 
-
-  String maxlength = (String) usernamecomponent.getAttributes().get("maxlength");
-  if ( !(maxlength.equals("32"))) {
-      System.out.println("/component01.jsp FAILED - Invalid value for maxlength attribute");
-      return;
-  } 
-%>
-
diff --git a/jsf-ri/systest/web/standard/dtablecolumnclasses.jsp b/jsf-ri/systest/web/standard/dtablecolumnclasses.jsp
deleted file mode 100644
index 8eb36ec..0000000
--- a/jsf-ri/systest/web/standard/dtablecolumnclasses.jsp
+++ /dev/null
@@ -1,261 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page import="java.util.List" %>
-<%@ page import="java.util.ArrayList" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>dtablecolumnclasses.jsp</title>
-    <style type="text/css">
-        .b1 {
-            background-color: red;
-        }
-
-        .b2 {
-            background-color: green;
-        }
-
-        .b3 {
-            background-color: blue;
-        }
-
-        .b4 {
-            background-color: burlywood;
-        }
-        .b5 {
-            background-color: darkolivegreen;
-        }
-        .b6 {
-            background-color: darkviolet;
-        }
-        .b7 {
-            background-color: skyblue;
-        }
-    </style>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-
-    <%
-        List<String[]> list = new ArrayList<String[]>(1);
-        list.add(new String[]{"c1", "c2", "c3", "c4", "c5", "c6"});
-        list.add(new String[]{"c1_1", "c2_1", "c3_1", "c4_1", "c5_1", "c6_1"});
-        request.setAttribute("list", list);
-    %>
-</head>
-<body>
-<f:view>
-    <h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 columnClasses="b1,b2">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-    <h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 columnClasses="b1,b2,b3,b4,">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-    <h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 columnClasses="b1,b2,b3">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-    <h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 columnClasses="b1">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-    <h:dataTable value="#{requestScope.list}"
-                 var="row">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-     <h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 columnClasses="b1,b2,b3,b4,b5,b6,b7">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-    <h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 columnClasses="b1,b2,b3,b4,">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-<h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 columnClasses=",b2,,,b4,b5,b6">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[1]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[2]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[3]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[4]}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row[5]}"/>
-        </h:column>
-    </h:dataTable>
-</f:view>
-</body>
-</html>
-
-
diff --git a/jsf-ri/systest/web/standard/dtablemultiforms.jsp b/jsf-ri/systest/web/standard/dtablemultiforms.jsp
deleted file mode 100644
index 3d5b782..0000000
--- a/jsf-ri/systest/web/standard/dtablemultiforms.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>dtablecolumnclasses.jsp</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-</head>
-<body>
-<f:view>
-    Output: <h:outputText id="out" value="#{stringholder.string}"/>
-    <h:dataTable id="table" value="#{listholder.list}" var="_dontcare">
-        <h:column id="column">
-            <h:form id="columnform">
-                 Input: <h:inputText id="columninput" value="#{stringholder.string}"/>
-                 <h:commandButton id="columnbutton" value="submit"/>
-            </h:form>
-        </h:column>
-    </h:dataTable>
-    <h:form id="finalform">
-                 Input: <h:inputText id="finalinput" value="#{stringholder.string}"/>
-                 <h:commandButton id="finalbutton" value="submit"/>
-    </h:form>
-</f:view>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/dtablerowclasses.jsp b/jsf-ri/systest/web/standard/dtablerowclasses.jsp
deleted file mode 100644
index 5175aab..0000000
--- a/jsf-ri/systest/web/standard/dtablerowclasses.jsp
+++ /dev/null
@@ -1,78 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page import="java.util.List" %>
-<%@ page import="java.util.ArrayList" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>dtablecolumnclasses.jsp</title>
-    <style type="text/css">
-        .b1 {
-            background-color: red;
-        }
-
-        .b2 {
-            background-color: green;
-        }
-    </style>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-
-    <%
-        List<String[]> list = new ArrayList<String[]>(6);
-        list.add(new String[]{"c1"});
-        list.add(new String[]{"c1_1"});
-        list.add(new String[]{"c1_2"});
-        list.add(new String[]{"c1_3"});
-        list.add(new String[]{"c1_4"});
-        list.add(new String[]{"c1_5"});
-        request.setAttribute("list", list);
-    %>
-</head>
-<body>
-<f:view>
-    <h:dataTable value="#{requestScope.list}"
-                 var="row"
-                 rowClasses="b1,b2">
-        <h:column>
-            <h:outputText value="#{row[0]}"/>
-        </h:column>
-    </h:dataTable>
-</f:view>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/dtablevarnotoverwritten.jsp b/jsf-ri/systest/web/standard/dtablevarnotoverwritten.jsp
deleted file mode 100644
index 5492974..0000000
--- a/jsf-ri/systest/web/standard/dtablevarnotoverwritten.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
- <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>dtablevarnotoverwritten.jsp</title>
-</head>
-<body>
-<f:view>
-    <h:form>
-        <h:dataTable binding="#{customDataTable.table}" />
-    </h:form>
-</f:view>
-</body>
-</html>
-
-
diff --git a/jsf-ri/systest/web/standard/dtablewithemptybody.jsp b/jsf-ri/systest/web/standard/dtablewithemptybody.jsp
deleted file mode 100644
index f85034d..0000000
--- a/jsf-ri/systest/web/standard/dtablewithemptybody.jsp
+++ /dev/null
@@ -1,102 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page import="java.util.ArrayList" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>dtablewithemptybody.jsp</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-
-    <%
-    	ArrayList<String> emptyList = new ArrayList<String>();
-        request.setAttribute("emptyList", emptyList);
-        ArrayList<String> someList = new ArrayList<String>();
-        request.setAttribute("someList", someList);
-        someList.add("AAAA");
-        someList.add("BBBB");
-        someList.add("CCCC");
-    %>
-</head>
-<body>
-<f:view>
-    <h:dataTable value="#{requestScope.emptyList}" id="Empty"
-                 var="row">
-        <h:column rendered="false">
-        	<h:outputText value="not rendered" />
-        </h:column>
-        <h:column>
-        	<h:outputText value="#{row}"/>
-        </h:column>
-        <h:column>
-            <h:outputText value="#{row}"/>
-        </h:column>
-    </h:dataTable>
-    <h:dataTable value="#{requestScope.someList}" id="Some"
-                 var="row">
-        <f:facet name="header"><h:outputText value="Table Header" /></f:facet>
-        <h:column rendered="false">
-        	<f:facet name="header"><h:outputText value="Header1" /></f:facet>
-        	<h:outputText value="not rendered" />
-        </h:column>
-        <h:column rendered="false">
-        	<f:facet name="header"><h:outputText value="Header2" /></f:facet>
-        	<h:outputText value="#{row}"/>
-        </h:column>
-        <h:column rendered="false">
-        	<f:facet name="header"><h:outputText value="Header3" /></f:facet>
-            <h:outputText value="#{row}"/>
-        </h:column>
-        <f:facet name="footer"><h:outputText value="Table Footer" /></f:facet>
-    </h:dataTable>
-    
-    <h:dataTable id="PureEmptyDataTable">
-    </h:dataTable>
-    
-    <h:panelGrid id="PureEmptyPanelGrid">
-    </h:panelGrid>
-    
-    <h:panelGrid id="NoRenderedContentPanelGrid" columns="2">
-    	<f:facet name="header"><h:outputText value="Header" /></f:facet>
-    	<h:outputText value="AAA" rendered="false" />
-    	<h:outputText value="BBB" rendered="false" />
-    	<h:outputText value="CCC" rendered="false" />
-    </h:panelGrid>
-</f:view>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/linkTypeAttribute.xhtml b/jsf-ri/systest/web/standard/linkTypeAttribute.xhtml
deleted file mode 100644
index 7ff1668..0000000
--- a/jsf-ri/systest/web/standard/linkTypeAttribute.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html">
-<head>
-    <title>linkTypeAttribute</title>
-</head>
-<body>
-    <h:form id="form">
-        <h:commandLink id="clink" type="type" value="command link" />
-        <h:outputLink id="link" type="type" value="output link" />
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/messages01.jsp b/jsf-ri/systest/web/standard/messages01.jsp
deleted file mode 100644
index 1d21ab8..0000000
--- a/jsf-ri/systest/web/standard/messages01.jsp
+++ /dev/null
@@ -1,103 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>messages01.jsp</title>
-
-<%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.FacesMessage"
-%><%@ page import="com.sun.faces.util.MessageFactory"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%
-
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/messages01.jsp FAILED - No FacesContext returned");
-    return;
-  }
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-    FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // get a message
-  FacesMessage message = MessageFactory.getMessage(facesContext, 
-        "javax.faces.component.UIInput.REQUIRED");
-  if (message == null) {
-    out.println("/messages01.jsp FAILED - No message returned");
-    return;
-  }
-
-  facesContext.addMessage(null, message);
-
-%>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<STYLE TYPE="text/css" MEDIA=screen>
-<!--
-.errors { 
-  background-color: #7171A5;
-  border: 5px outset #71A5A5;
-  border-collapse: collapse;
-  font-family: sans-serif;
-  font-size: 14pt;
-  padding: 10px;
-}
--->
-</STYLE>
-  </head>
-
-  <body>
-
-<f:view>
-
-
-<h:messages styleClass="errors"/> 
-
-</f:view>
-
-
-
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/standard/messages02.jsp b/jsf-ri/systest/web/standard/messages02.jsp
deleted file mode 100644
index 401fd01..0000000
--- a/jsf-ri/systest/web/standard/messages02.jsp
+++ /dev/null
@@ -1,112 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" %>
-<%@ page import="javax.faces.application.FacesMessage"%>
-<%@ page import="javax.faces.context.FacesContext"%>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-                                                                                    
-<%
-  // Acquire the FacesContext instance for this request
-  FacesContext facesContext = FacesContext.getCurrentInstance();
-  if (facesContext == null) {
-    out.println("/messages02.jsp FAILED - No FacesContext returned");
-    return;
-  }
-  FacesMessage imsg = new FacesMessage(FacesMessage.SEVERITY_INFO,
-      "Information Summary", "Informational Detail");
-  FacesMessage wmsg = new FacesMessage(FacesMessage.SEVERITY_WARN,
-      "Warning Summary", "Warning Detail");
-  FacesMessage emsg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-      "Error Summary", "Error Detail");
-  FacesMessage fmsg = new FacesMessage(FacesMessage.SEVERITY_FATAL,
-      "Fatal Summary", "Fatal Detail");
-  facesContext.addMessage("1", imsg);
-  facesContext.addMessage("1", wmsg);
-  facesContext.addMessage("1", emsg);
-  facesContext.addMessage("1", fmsg);
-%>
-                                                                                    
-<html>
-<STYLE TYPE="text/css" MEDIA=screen>
-<!--
-.errors {
-  background-color: #7171A5;
-  border: 5px outset #71A5A5;
-  border-collapse: collapse;
-  font-family: sans-serif;
-  font-size: 14pt;
-  padding: 10px;
-  left: 48px;
-  top: 300px;
-  position: absolute;
-}
--->
-</STYLE>
-
-<f:view>
-      <h:panelGrid columns="1"> 
-         <h:messages layout="list" 
-            style="left: 48px; top: 100px; position: absolute"
-            dir="LTR"
-            infoStyle="color: yellow"
-            errorStyle="color: red"
-            fatalStyle="color: blue"
-            showSummary="true" showDetail="true" tooltip="true"/>
-
-         <h:messages layout="table" 
-            style="left: 48px; top: 200px; position: absolute"
-            lang="en"
-            infoStyle="color: yellow"
-            errorStyle="color: red"
-            fatalStyle="color: blue"
-            showSummary="true" showDetail="true" tooltip="true"/>
-
-         <h:messages  
-            styleClass="errors"
-            showSummary="true" showDetail="true" />
-
-         <h:messages layout="table" 
-            style="left: 48px; top: 500px; position: absolute"
-            infoStyle="color: yellow"
-            errorStyle="color: red"
-            fatalStyle="color: blue"
-            showDetail="true" />
-       </h:panelGrid>
-</f:view>
-</html>
diff --git a/jsf-ri/systest/web/standard/nav1.xhtml b/jsf-ri/systest/web/standard/nav1.xhtml
deleted file mode 100644
index 1a9a7c0..0000000
--- a/jsf-ri/systest/web/standard/nav1.xhtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title>nav1</title>
-</head>
-<body>
-  nav1
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/nav2.xhtml b/jsf-ri/systest/web/standard/nav2.xhtml
deleted file mode 100644
index 7a796ce..0000000
--- a/jsf-ri/systest/web/standard/nav2.xhtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title>nav2</title>
-</head>
-<body>
-  nav2
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/outcometarget01.xhtml b/jsf-ri/systest/web/standard/outcometarget01.xhtml
deleted file mode 100644
index 34c566e..0000000
--- a/jsf-ri/systest/web/standard/outcometarget01.xhtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xml:lang="en" lang="en">
-<head>
-    <title>outcometarget01</title>
-</head>
-<f:metadata>
-    <f:viewParam id="vid" name="id" value="view"/>
-    <f:viewParam id="vid2" name="id2" value="view"/>
-</f:metadata>
-<body>
-    <h3>Button</h3>
-    <h:button id="button1" value="button1" outcome="outcometarget01" /> 
-    <h:button id="button2" value="button2" outcome="nav1?faces-redirect=true"/> 
-    <h:button id="button3" value="button3" outcome="outcometarget01" fragment="about" includeViewParams="true">
-        <f:param name="id" value="page"/>
-    </h:button> 
-    <h:button id="button4" value="button4" outcome="nav2" onclick="alert('foo')" /> 
-    <h:button id="button5" value="button5" outcome="redirectWithParams">
-        <f:param name="id" value="page" />
-    </h:button> 
-    <h:button id="button6" value="button6" outcome="redirectWithAll">
-        <f:param name="id" value="page" />
-    </h:button> 
-    <h:button id="button7" value="button7" outcome="redirectWithAll">
-        <f:param name="id" value="page" disable="true"/>
-    </h:button> 
-    <hr />
-    <h3>Link</h3>
-    <h:link id="link1" value="link1" outcome="outcometarget01" /> 
-    <h:link id="link2" value="link2" outcome="nav1?faces-redirect=true"/> 
-    <h:link id="link3" value="link3" outcome="outcometarget01" fragment="about" includeViewParams="true">
-        <f:param name="id" value="page"/>
-    </h:link> 
-    <h:link id="link4" value="link4" outcome="nav2" onclick="alert('foo');" /> 
-    <h:link id="link5" value="link5" outcome="redirectWithParams">
-        <f:param name="id" value="page" />
-    </h:link> 
-    <h:link id="link6" value="link6" outcome="redirectWithAll">
-        <f:param name="id" value="page" />
-    </h:link> 
-    <h:link id="link7" value="link7" outcome="redirectWithAll">
-        <f:param name="id" value="page" disable="true"/>
-    </h:link> 
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/pgridcolumnclasses.jsp b/jsf-ri/systest/web/standard/pgridcolumnclasses.jsp
deleted file mode 100644
index 31e53bc..0000000
--- a/jsf-ri/systest/web/standard/pgridcolumnclasses.jsp
+++ /dev/null
@@ -1,191 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>pgridcolumnclasses.jsp</title>
-    <style type="text/css">
-        .b1 {
-            background-color: red;
-        }
-
-        .b2 {
-            background-color: green;
-        }
-
-        .b3 {
-            background-color: blue;
-        }
-
-        .b4 {
-            background-color: burlywood;
-        }
-
-        .b5 {
-            background-color: darkolivegreen;
-        }
-
-        .b6 {
-            background-color: darkviolet;
-        }
-
-        .b7 {
-            background-color: skyblue;
-        }
-    </style>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-</head>
-<body>
-<f:view>
-<h:panelGrid columns="6"
-             columnClasses="b1,b2">
-    <h:outputText value="c1"/>
-    <h:outputText value="c2"/>
-    <h:outputText value="c3"/>
-    <h:outputText value="c4"/>
-    <h:outputText value="c5"/>
-    <h:outputText value="c6"/>
-
-    <h:outputText value="c1_1"/>
-    <h:outputText value="c2_1"/>
-    <h:outputText value="c3_1"/>
-    <h:outputText value="c4_1"/>
-    <h:outputText value="c5_1"/>
-    <h:outputText value="c6_1"/>
-</h:panelGrid>
-<h:panelGrid columns="6"
-             columnClasses="b1,b2,b3,b4,">
-    <h:outputText value="c1"/>
-    <h:outputText value="c2"/>
-    <h:outputText value="c3"/>
-    <h:outputText value="c4"/>
-    <h:outputText value="c5"/>
-    <h:outputText value="c6"/>
-
-    <h:outputText value="c1_1"/>
-    <h:outputText value="c2_1"/>
-    <h:outputText value="c3_1"/>
-    <h:outputText value="c4_1"/>
-    <h:outputText value="c5_1"/>
-    <h:outputText value="c6_1"/>
-</h:panelGrid>
-<h:panelGrid columns="6"
-             columnClasses="b1,b2,b3">
-    <h:outputText value="c1"/>
-    <h:outputText value="c2"/>
-    <h:outputText value="c3"/>
-    <h:outputText value="c4"/>
-    <h:outputText value="c5"/>
-    <h:outputText value="c6"/>
-
-    <h:outputText value="c1_1"/>
-    <h:outputText value="c2_1"/>
-    <h:outputText value="c3_1"/>
-    <h:outputText value="c4_1"/>
-    <h:outputText value="c5_1"/>
-    <h:outputText value="c6_1"/>
-</h:panelGrid>
-<h:panelGrid columns="6"
-             columnClasses="b1">
-    <h:outputText value="c1"/>
-    <h:outputText value="c2"/>
-    <h:outputText value="c3"/>
-    <h:outputText value="c4"/>
-    <h:outputText value="c5"/>
-    <h:outputText value="c6"/>
-
-    <h:outputText value="c1_1"/>
-    <h:outputText value="c2_1"/>
-    <h:outputText value="c3_1"/>
-    <h:outputText value="c4_1"/>
-    <h:outputText value="c5_1"/>
-    <h:outputText value="c6_1"/>
-</h:panelGrid>
-<h:panelGrid columns="6">
-    <h:outputText value="c1"/>
-    <h:outputText value="c2"/>
-    <h:outputText value="c3"/>
-    <h:outputText value="c4"/>
-    <h:outputText value="c5"/>
-    <h:outputText value="c6"/>
-
-    <h:outputText value="c1_1"/>
-    <h:outputText value="c2_1"/>
-    <h:outputText value="c3_1"/>
-    <h:outputText value="c4_1"/>
-    <h:outputText value="c5_1"/>
-    <h:outputText value="c6_1"/>
-</h:panelGrid>
-<h:panelGrid columns="6"
-             columnClasses="b1,b2,b3,b4,b5,b6,b7">
-    <h:outputText value="c1"/>
-    <h:outputText value="c2"/>
-    <h:outputText value="c3"/>
-    <h:outputText value="c4"/>
-    <h:outputText value="c5"/>
-    <h:outputText value="c6"/>
-
-    <h:outputText value="c1_1"/>
-    <h:outputText value="c2_1"/>
-    <h:outputText value="c3_1"/>
-    <h:outputText value="c4_1"/>
-    <h:outputText value="c5_1"/>
-    <h:outputText value="c6_1"/>
-</h:panelGrid>
-<h:panelGrid columns="6"
-             columnClasses=",b2,,,b5,b6,b7">
-    <h:outputText value="c1"/>
-    <h:outputText value="c2"/>
-    <h:outputText value="c3"/>
-    <h:outputText value="c4"/>
-    <h:outputText value="c5"/>
-    <h:outputText value="c6"/>
-
-    <h:outputText value="c1_1"/>
-    <h:outputText value="c2_1"/>
-    <h:outputText value="c3_1"/>
-    <h:outputText value="c4_1"/>
-    <h:outputText value="c5_1"/>
-    <h:outputText value="c6_1"/>
-</h:panelGrid>
-</f:view>
-</body>
-</html>
-
-
diff --git a/jsf-ri/systest/web/standard/selectOneLiteralHideNoSelectionOption.xhtml b/jsf-ri/systest/web/standard/selectOneLiteralHideNoSelectionOption.xhtml
deleted file mode 100644
index 3562f04..0000000
--- a/jsf-ri/systest/web/standard/selectOneLiteralHideNoSelectionOption.xhtml
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>hideNoSelection</title>
-</head>
-<body>
-<c:set target="#{requestScope}" property="selectedHobbit" value="Frodo"/>
-<c:set target="#{requestScope}" property="noSelectionValue" value="No Selection"/>
-<h:form id="f">
-
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItems with attribute noSelectionLabel and selected value different from the No Selection option.<br/>
-        As there is a selected value and the hideNoSelectionOption is set to true, the No Selection option shouldn't be shown to the user.
-    </p>
-    <h:selectOneMenu id="selectItemsSelectedValue" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItems value="#{selectItemsBean.hobbitsNoSelection}" noSelectionValue="#{selectItemsBean.hobbitsNoSelection[0]}"/>
-    </h:selectOneMenu>
-
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItems with attribute noSelectionLabel and no selected value.<br/>
-        As there is no selected value, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectedValue" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItems value="#{selectItemsBean.hobbitsNoSelection}" noSelectionValue="#{selectItemsBean.hobbitsNoSelection[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItems with attribute noSelectionLabel and selected value equal to No Selection option.<br/>
-        As the selected value is equal to the No Selection option, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectionSelectedValue" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="true">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelection}" noSelectionValue="#{selectItemsBean.hobbitsNoSelection[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItem with attribute noSelectionOption set to true and selected value different from the No Selection Option.<br/>
-        As there is a selected value and the hideNoSelectionOption is set to true, the No Selection option shouldn't be shown to the user.
-    </p>
-    <h:selectOneMenu id="selectItemSelectedValue" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbits}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItem with attribute noSelectionOption set to true and selected value different from the No Selection Option.<br/>
-        The noSelectionOption is the last option.<br/>
-        As there is a selected value and the hideNoSelectionOption is set to true, the No Selection option shouldn't be shown to the user.
-    </p>
-    <h:selectOneMenu id="selectItemSelectedValueLast" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItems value="#{selectItemsBean.hobbits}" />
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItem with attribute noSelectionOption and no selected value.<br/>
-        As there is no selected value, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectedValue" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbits}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItem with attribute noSelectionOption and selected value equal to No Selection option.<br/>
-        As the selected value is equal to the No Selection option, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectionSelectedValue" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="true">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbits}" />
-    </h:selectOneMenu>
-    
-    <!-- hideNoSelectionOption = false -->
-    
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItems with attribute noSelectionLabel and selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemsSelectedValueNoHiding" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="false">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelection}" noSelectionValue="#{selectItemsBean.hobbitsNoSelection[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItems with attribute noSelectionLabel and no selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectedValueNoHiding" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="false">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelection}" noSelectionValue="#{selectItemsBean.hobbitsNoSelection[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItems with attribute noSelectionLabel and selected value equal to No Selection option.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectionSelectedValueNoHiding" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="false">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelection}" noSelectionValue="#{selectItemsBean.hobbitsNoSelection[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItem with attribute noSelectionOption set to true and selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemSelectedValueNoHiding" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="false">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbits}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItem with attribute noSelectionOption and no selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectedValueNoHiding" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="false">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbits}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItem with attribute noSelectionOption and selected value equal to No Selection option.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectionSelectedValueNoHiding" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="false">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbits}" />
-    </h:selectOneMenu>
-
-	<h:commandButton id="command" value="Submit" />
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/standard/selectOneLiteralHideNoSelectionOptionInSelectItemGroup.xhtml b/jsf-ri/systest/web/standard/selectOneLiteralHideNoSelectionOptionInSelectItemGroup.xhtml
deleted file mode 100644
index f59828c..0000000
--- a/jsf-ri/systest/web/standard/selectOneLiteralHideNoSelectionOptionInSelectItemGroup.xhtml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
- <!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>hideNoSelection</title>
-</head>
-<body>
-<c:set target="#{requestScope}" property="selectedHobbit" value="Frodo"/>
-<c:set target="#{requestScope}" property="noSelectionValue" value="No Selection"/>
-<h:form id="f">
-
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItems with attribute noSelectionLabel and selected value different from the No Selection option.<br/>
-        As there is a selected value and the hideNoSelectionOption is set to true, the No Selection option shouldn't be shown to the user.
-    </p>
-    <h:selectOneMenu id="selectItemsSelectedValue" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItems value="#{selectItemsBean.hobbitsNoSelectionNestedInGroup}" noSelectionValue="#{selectItemsBean.hobbitsNoSelectionNestedInGroup[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItems with attribute noSelectionLabel and no selected value.<br/>
-        As there is no selected value, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectedValue" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItems value="#{selectItemsBean.hobbitsNoSelectionNestedInGroup}" noSelectionValue="#{selectItemsBean.hobbitsNoSelectionNestedInGroup[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItems with attribute noSelectionLabel and selected value equal to No Selection option.<br/>
-        As the selected value is equal to the No Selection option, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectionSelectedValue" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="true">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelectionNestedInGroup}" noSelectionValue="#{selectItemsBean.hobbitsNoSelectionNestedInGroup[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItem with attribute noSelectionOption set to true and selected value different from the No Selection Option.<br/>
-        As there is a selected value and the hideNoSelectionOption is set to true, the No Selection option shouldn't be shown to the user.
-    </p>
-    <h:selectOneMenu id="selectItemSelectedValue" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbitsNestedInGroup}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItem with attribute noSelectionOption and no selected value.<br/>
-        As there is no selected value, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectedValue" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="true">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbitsNestedInGroup}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (true) with nested selectItem with attribute noSelectionOption and selected value equal to No Selection option.<br/>
-        As the selected value is equal to the No Selection option, the No Selection option should be shown to the user, even though the hideNoSelectionOption is set to true.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectionSelectedValue" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="true">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbitsNestedInGroup}" />
-    </h:selectOneMenu>
-    
-    <!-- hideNoSelectionOption = false -->
-    
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItems with attribute noSelectionLabel and selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemsSelectedValueNoHiding" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="false">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelectionNestedInGroup}" noSelectionValue="#{selectItemsBean.hobbitsNoSelectionNestedInGroup[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItems with attribute noSelectionLabel and no selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectedValueNoHiding" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="false">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelectionNestedInGroup}" noSelectionValue="#{selectItemsBean.hobbitsNoSelectionNestedInGroup[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItems with attribute noSelectionLabel and selected value equal to No Selection option.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemsNoSelectionSelectedValueNoHiding" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="false">
-		<f:selectItems value="#{selectItemsBean.hobbitsNoSelectionNestedInGroup}" noSelectionValue="#{selectItemsBean.hobbitsNoSelectionNestedInGroup[0]}"/>
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItem with attribute noSelectionOption set to true and selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemSelectedValueNoHiding" value="#{requestScope['selectedHobbit']}" hideNoSelectionOption="false">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbitsNestedInGroup}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItem with attribute noSelectionOption and no selected value.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectedValueNoHiding" value="#{requestScope['notYetSelectedHobbit']}" hideNoSelectionOption="false">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbitsNestedInGroup}" />
-    </h:selectOneMenu>
-	
-    <p>
-        Literal hideNoSelectionOption (false) with nested selectItem with attribute noSelectionOption and selected value equal to No Selection option.<br/>
-        As the hideNoSelectionOption is set to false, the No Selection Option should always be shown.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectionSelectedValueNoHiding" value="#{requestScope['noSelectionValue']}" hideNoSelectionOption="false">
-       <f:selectItem noSelectionOption="true" itemLabel="No Selection" itemValue="No Selection"/>
-       <f:selectItems value="#{selectItemsBean.hobbitsNestedInGroup}" />
-    </h:selectOneMenu>
-
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/standard/selectOneValueExpressionHideNoSelectionOption.xhtml b/jsf-ri/systest/web/standard/selectOneValueExpressionHideNoSelectionOption.xhtml
deleted file mode 100644
index 1f42f4e..0000000
--- a/jsf-ri/systest/web/standard/selectOneValueExpressionHideNoSelectionOption.xhtml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>hideNoSelection with Value Expression</title>
-</head>
-<body>
-<c:if test="#{empty requestScope.selectedHobbit}">
-  <c:set target="#{requestScope}" property="selectedHobbit" value="Frodo"/>
-</c:if>
-<h:form id="f">
-
-    <p>
-        Initially hideNoSelectionOption evaluates to true. As the selectOneMenu
-        has a non-null value different from the No Selection value, the No
-        Selection option should be hidden.
-        When the page is submitted with a value different from 'Frodo', the
-        hideNoSelectionOption evaluates to false, as such on page re-render, the
-        No Selection option
-        should be shown.
-    </p>
-    <h:selectOneMenu id="selectItemNoSelectedValue"
-                     value="#{requestScope['selectedHobbit']}"
-                     hideNoSelectionOption="#{requestScope['selectedHobbit'] eq 'Frodo'}">
-        <f:selectItem noSelectionOption="true" itemLabel="No Selection"
-                      itemValue="No Selection"/>
-        <f:selectItems value="#{selectItemsBean.hobbits}"/>
-    </h:selectOneMenu>
-
-    <h:commandButton id="command" value="Submit"/>
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/selectmany01.jsp b/jsf-ri/systest/web/standard/selectmany01.jsp
deleted file mode 100644
index 418e0b4..0000000
--- a/jsf-ri/systest/web/standard/selectmany01.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%
-  if (session.getAttribute("status") == null) {
-    String[] a = {"1", "2"};
-    session.setAttribute("status", a);
-  }
-%>
-<f:view>
-  <h:form id="form1">
-    <h:selectManyCheckbox value="#{status}">
-      <f:selectItem itemValue="1" itemLabel="Open" />
-      <f:selectItem itemValue="2" itemLabel="Submitted" />
-      <f:selectItem itemValue="3" itemLabel="Accepted" />
-      <f:selectItem itemValue="4" itemLabel="Rejected" />
-    </h:selectManyCheckbox>
-    <h:commandButton id="modify" value="Update" />
-    <p>Current model value:
-    ${status[0]}, ${status[1]}, ${status[2]}, ${status[3]}
-  </h:form>
-  <h:form id="form2">
-    Resets the rendered values but not the model:
-    <h:commandButton id="doNotModify" value="Click" />
-  </h:form>
-</f:view>
diff --git a/jsf-ri/systest/web/standard/selectmany02.jsp b/jsf-ri/systest/web/standard/selectmany02.jsp
deleted file mode 100644
index 1866c3a..0000000
--- a/jsf-ri/systest/web/standard/selectmany02.jsp
+++ /dev/null
@@ -1,61 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ page contentType="text/html" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%
-  if (session.getAttribute("status") == null) {
-    String[] a = {"1", "2"};
-    session.setAttribute("status", a);
-  }
-%>
-
-<f:view>
-    <%--- test styleClass --%>
-    <h:selectManyCheckbox value="#{status}" styleClass="one">
-      <f:selectItem  itemValue="1" itemLabel="Open" />
-      <f:selectItem itemValue="2" itemLabel="Submitted" />
-      <f:selectItem itemValue="3" itemLabel="Accepted" />
-      <f:selectItem itemValue="4" itemLabel="Rejected" />
-    </h:selectManyCheckbox>
-    <%--- test style and border passthrough --%>
-    <h:selectManyCheckbox value="#{status}" style="two" border="5">
-      <f:selectItem  itemValue="1" itemLabel="Open" />
-      <f:selectItem itemValue="2" itemLabel="Submitted" />
-      <f:selectItem itemValue="3" itemLabel="Accepted" />
-      <f:selectItem itemValue="4" itemLabel="Rejected" />
-    </h:selectManyCheckbox>
-</f:view>
diff --git a/jsf-ri/systest/web/standard/selectmany03.jsp b/jsf-ri/systest/web/standard/selectmany03.jsp
deleted file mode 100644
index 169f77d..0000000
--- a/jsf-ri/systest/web/standard/selectmany03.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ page contentType="text/html" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%
-  if (session.getAttribute("status") == null) {
-    String[] a = {"1", "2"};
-    session.setAttribute("status", a);
-  }
-%>
-<f:view>
-    <%--- test selectedClass and unselectedClass --%>
-    <h:selectManyCheckbox value="#{status}" selectedClass="three" unselectedClass="four" >
-      <f:selectItem itemValue="1" itemLabel="Open" />
-      <f:selectItem itemValue="2" itemLabel="Submitted" />
-      <f:selectItem itemValue="3" itemLabel="Accepted" />
-      <f:selectItem itemValue="4" itemLabel="Rejected" />
-    </h:selectManyCheckbox> 
-    <%--- test disabled and enabled styles --%>
-    <h:selectManyCheckbox value="#{status}" enabledClass="four" disabledClass="five">
-      <f:selectItem  itemValue="1" itemLabel="Open" />
-      <f:selectItem itemValue="2" itemLabel="Submitted" />
-      <f:selectItem itemValue="3" itemLabel="Accepted" />
-      <f:selectItem itemValue="4" itemLabel="Rejected" itemDisabled="true" />
-    </h:selectManyCheckbox> 
-</f:view>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/standard/selectmany04.jsp b/jsf-ri/systest/web/standard/selectmany04.jsp
deleted file mode 100644
index 30fa5ac..0000000
--- a/jsf-ri/systest/web/standard/selectmany04.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-<%@ page contentType="text/html" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-<%
-  if (session.getAttribute("status") == null) {
-    String[] a = {"1", "2"};
-    session.setAttribute("status", a);
-  }
-%>
-<f:view>
-    <%--- test selected and enabled styles together --%>
-    <h:selectManyCheckbox value="#{status}" enabledClass="six" disabledClass="seven" selectedClass="eight" unselectedClass="nine">
-      <f:selectItem  itemValue="1" itemLabel="Open" />
-      <f:selectItem itemValue="2" itemLabel="Submitted" itemDisabled="true" />
-      <f:selectItem itemValue="3" itemLabel="Accepted" />
-      <f:selectItem itemValue="4" itemLabel="Rejected" itemDisabled="true" />
-    </h:selectManyCheckbox> 
-</f:view>
diff --git a/jsf-ri/systest/web/standard/selectmany05.xhtml b/jsf-ri/systest/web/standard/selectmany05.xhtml
deleted file mode 100644
index b862dd9..0000000
--- a/jsf-ri/systest/web/standard/selectmany05.xhtml
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>selectmany05</title>
-</head>
-<body>
-<h:form id="f">
-
-    <p>
-        Array Values
-    </p>
-    <h:selectManyListbox id="array" value="#{select05.arrayValues}">
-        <f:selectItems value="#{select05.hobbitCollection}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null List Values
-    </p>
-    <h:selectManyListbox id="list" value="#{select05.listValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Set Values
-    </p>
-    <h:selectManyListbox id="set" value="#{select05.setValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Sorted Set Values
-    </p>
-    <h:selectManyListbox id="sortedset" value="#{select05.sortedSetValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Collection Values
-    </p>
-    <h:selectManyListbox id="collection" value="#{select05.collectionValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- ///////////////////////////////////////////////////////////// -->
-
-    <p>
-        Initially Non-Null List Values/Collection non-select item
-    </p>
-    <h:selectManyListbox id="ilist" value="#{select05.initialListValues}">
-        <f:selectItems value="#{select05.hobbitCollection}"
-                       var="hobbit"
-                       itemLabel="#{hobbit.name}"
-                       itemDescription="#{hobbit.bio}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null List Values/DataModel non-select item
-    </p>
-    <h:selectManyListbox id="ilist2" value="#{select05.initialListValues}">
-        <f:selectItems value="#{select05.hobbitDataModel}"
-                       var="hobbit"
-                       itemLabel="#{hobbit.name}"
-                       itemDescription="#{hobbit.bio}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null Set Values
-    </p>
-    <h:selectManyListbox id="iset" value="#{select05.initialSetValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null Sorted Set Values
-    </p>
-    <h:selectManyListbox id="isortedset" value="#{select05.initialSortedSetValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Non-Null Collection Values
-    </p>
-    <h:selectManyListbox id="icollection" value="#{select05.initialCollectionValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- ///////////////////////////////////////////////////////////// -->
-
-    <p>
-        Initially Null Collection Values using f:attribute hint (java.lang.String)
-    </p>
-    <h:selectManyListbox id="hintString"
-                         value="#{select05.collectionFromHintValues}"
-                         collectionType="java.util.LinkedList">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <p>
-        Initially Null Collection Values using f:attribute hint (java.lang.String)
-    </p>
-    <h:selectManyListbox id="hintClass" value="#{select05.collectionFromHintValues2}">
-        <f:attribute name="collectionType" value="#{select05.collectionType}"/>
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- ///////////////////////////////////////////////////////////// -->
-
-    <p>
-        Initially Null Object type field
-    </p>
-    <h:selectManyListbox id="object" value="#{select05.someValues}">
-        <f:selectItems value="#{select05.possibleValues}"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        int values
-    </p>
-     <h:selectManyListbox id="intList1" value="#{select05.selectedIntValues}">
-        <f:selectItems value="#{select05.intOptions}"
-                       var="x"
-                       itemLabel="#{x}"
-                       itemDescription="#{x}"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        Integer values
-    </p>
-     <h:selectManyListbox id="integerList1" value="#{select05.selectedIntegerValues}">
-        <f:selectItems value="#{select05.integerOptions}"
-                       var="n"
-                       itemLabel="#{n}"
-                       itemDescription="#{n}"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        Item Label Escape (true)
-    </p>
-    <h:selectManyListbox id="escape01" value="#{select05.initialCollectionValues}">
-       <f:selectItems value="#{select05.hobbitCollection}"
-                      var="n"
-                      itemValue="#{n}"
-                      itemLabel="#{n.bio}"
-                      itemLabelEscaped="true"/>
-    </h:selectManyListbox>
-
-    <!-- //////////////////////////////////////////////////////////// -->
-
-    <p>
-        Item Label Escape (false)
-    </p>
-    <h:selectManyListbox id="escape02" value="#{select05.initialCollectionValues}">
-       <f:selectItems value="#{select05.hobbitCollection}"
-                      var="n"
-                      itemValue="#{n}"
-                      itemLabel="#{n.bio}"
-                      itemLabelEscaped="false"/>
-    </h:selectManyListbox>
-
-     <!-- ////////////////////////////////////////////////////////////// -->
-
-
-    <p>
-        Non-null select item with empty f:selectItems Collection
-    </p>
-    <h:selectManyListbox id="emptyItems">
-        <f:selectItem itemValue="Choose" itemLabel="Choose" />
-        <f:selectItems value="#{select05.emptyCollection}"
-                       var="n"
-                       itemValue="#{n}" />
-    </h:selectManyListbox>
-
-
-    <!-- ////////////////////////////////////////////////////////////// -->
-
-
-    <p>
-    <h:commandButton id="command" value="Submit" />
-    </p>
-
-</h:form>
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/standard/selectonemanyenum.jsp b/jsf-ri/systest/web/standard/selectonemanyenum.jsp
deleted file mode 100644
index 48c58cb..0000000
--- a/jsf-ri/systest/web/standard/selectonemanyenum.jsp
+++ /dev/null
@@ -1,93 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html" %>
-<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<html>
-    <head>
-        <title>SelectOneMany Enum Test</title>
-    </head>
-</html>
-<body>
-<f:view>
-    <h:form id="test">
-        <p>
-        <h:selectOneMenu id="selected" value="#{enumbean.selected}">
-            <f:selectItem itemValue="Value1" itemLabel="Value1"/>
-            <f:selectItem itemValue="Value2" itemLabel="Value2"/>
-            <f:selectItem itemValue="Value3" itemLabel="Value3"/>
-            <f:selectItem itemValue="Value4" itemLabel="Value4"/>
-        </h:selectOneMenu>
-        </p>
-        <p>
-        <h:selectOneListbox id="selected2" value="#{enumbean.selected2}">
-            <f:selectItem itemValue="Value1" itemLabel="Value1"/>
-            <f:selectItem itemValue="Value2" itemLabel="Value2"/>
-            <f:selectItem itemValue="Value3" itemLabel="Value3"/>
-            <f:selectItem itemValue="Value4" itemLabel="Value4"/>
-        </h:selectOneListbox>
-        </p>
-        <p>
-        <h:selectOneMenu id="selected3" value="#{enumbean.selected3}">
-            <f:selectItem itemValue="Value1" itemLabel="Value1"/>
-            <f:selectItem itemValue="Value2" itemLabel="Value2"/>
-            <f:selectItem itemValue="Value3" itemLabel="Value3"/>
-            <f:selectItem itemValue="Value4" itemLabel="Value4"/>
-        </h:selectOneMenu>
-        </p>
-        <p>
-        <h:selectManyListbox id="array" value="#{enumbean.selectedArray}">
-            <f:selectItem itemValue="Value1" itemLabel="Value1"/>
-            <f:selectItem itemValue="Value2" itemLabel="Value2"/>
-            <f:selectItem itemValue="Value3" itemLabel="Value3"/>
-            <f:selectItem itemValue="Value4" itemLabel="Value4"/>
-        </h:selectManyListbox>
-        </p>
-        <p>
-        <h:selectManyListbox id="list" value="#{enumbean.selectedList}">
-            <f:selectItem itemValue="Value1" itemLabel="Value1"/>
-            <f:selectItem itemValue="Value2" itemLabel="Value2"/>
-            <f:selectItem itemValue="Value3" itemLabel="Value3"/>
-            <f:selectItem itemValue="Value4" itemLabel="Value4"/>
-        </h:selectManyListbox>
-        </p>
-        <h:commandButton value="Submit"/>
-    </h:form>
-</f:view>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/state/dynamicAddition.xhtml b/jsf-ri/systest/web/state/dynamicAddition.xhtml
deleted file mode 100644
index 520d34b..0000000
--- a/jsf-ri/systest/web/state/dynamicAddition.xhtml
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-<title>Dynamic Component Addition</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-  <p>
-
-   Type some text <h:inputText id="textField" 
-                               validator="#{dynamicStateBean.validateAddition}" />
-
-  </p>
-
-  <p>
-
-    <h:outputText value="This text has a listener attached to it that adds the button with id cbutton">
-      <f:event type="preRenderComponent" listener="#{dynamicStateBean.beforeRenderAddition}" />
-    </h:outputText>
-
-  </p>
-
-  <p><h:commandButton value="reload" id="reload" /> </p>
-
-  <p>Text inside the form, after the reload button.</p>
-
-</h:form>
-
-  <p>Text outside the form.</p>
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/state/dynamicAddition2.xhtml b/jsf-ri/systest/web/state/dynamicAddition2.xhtml
deleted file mode 100644
index 8a3058b..0000000
--- a/jsf-ri/systest/web/state/dynamicAddition2.xhtml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html">
-<head/>
-<body>
-<h:form id="form">
-    <h:panelGroup id="viewPanel">
-        <!-- dynamic created components are added here. -->
-    </h:panelGroup>
-    <h:commandButton id="render" value="render" action="#{dynamicStateBean2.render}"/>
-    <h:commandButton id="submit" value="submit" />
-</h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/state/dynamicAdditionDeletion.xhtml b/jsf-ri/systest/web/state/dynamicAdditionDeletion.xhtml
deleted file mode 100644
index 85574eb..0000000
--- a/jsf-ri/systest/web/state/dynamicAdditionDeletion.xhtml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-      <!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html">
-<h:head/>
-<h:body>
-  <h:form id="form">
-    <h:outputText for="render" value="Pressing this button three times in a row causes a NullPointerException" />
-    <p/>
-    <h:commandButton id="render" value="dynamicStateBean2.render()" action="#{dynamicStateBean2.render2}"/>
-    <h:panelGroup id="viewPanel"/>
-  </h:form>
-</h:body>
-</html>
diff --git a/jsf-ri/systest/web/state/dynamicAdditionTransientSubTree.xhtml b/jsf-ri/systest/web/state/dynamicAdditionTransientSubTree.xhtml
deleted file mode 100644
index 497e6d9..0000000
--- a/jsf-ri/systest/web/state/dynamicAdditionTransientSubTree.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2010 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<head>
-    <title>dynamicAdditionTransientSubTree</title>
-</head>
-<body>
-    <h:form id="f">
-        <h:commandButton id="btn" actionListener="#{dynamicStateBean.transientRoot}" value="Add transient subtree" />
-        <h:panelGroup id="addto"  style="border:green 1px solid"></h:panelGroup>
-        <h:messages />
-    </h:form>
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/state/dynamicDeletion.xhtml b/jsf-ri/systest/web/state/dynamicDeletion.xhtml
deleted file mode 100644
index 153ecdf..0000000
--- a/jsf-ri/systest/web/state/dynamicDeletion.xhtml
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:head>
-<title>Dynamic Component Deletion</title>
-<style type="text/css">
-.grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }
-</style>
-</h:head>
-
-<h:body>
-
-  <ui:debug hotkey="p" rendered="true"/>
-
-<h:form id="form">
-
-  <p>
-
-   Type some text <h:inputText id="textField" 
-                               validator="#{dynamicStateBean.validateDeletion}" />
-
-  </p>
-
-  <p>
-
-    <h:outputText value="This text has a listener attached to it that deletes the button with id cbutton">
-      <f:event type="preRenderComponent" listener="#{dynamicStateBean.beforeRenderDeletion}" />
-    </h:outputText>
-
-  </p>
-
-  <p><h:commandButton value="delete me" id="cbutton" /> </p>
-
-  <p><h:commandButton value="reload" id="reload" /> </p>
-
-</h:form>
-
-
-
-</h:body>
-
-</html>
diff --git a/jsf-ri/systest/web/subview01.jsp b/jsf-ri/systest/web/subview01.jsp
deleted file mode 100644
index 53ff7db..0000000
--- a/jsf-ri/systest/web/subview01.jsp
+++ /dev/null
@@ -1,65 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>subview01</title>
-</head>
-<body>
-<h:outputText value="Begin test <c:import> with subview tag in imported page"/>
-
-<p>
-<c:import url="foo01.jsp"/>
-</p>
-
-<p><h:outputText value="subview01"/></p>
-
-<p><c:import url="bar01.jsp"/></p>
-
-<p><h:outputText value="End test <c:import> with subview tag in imported page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/subview02.jsp b/jsf-ri/systest/web/subview02.jsp
deleted file mode 100644
index f6ea5e1..0000000
--- a/jsf-ri/systest/web/subview02.jsp
+++ /dev/null
@@ -1,71 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>subview02</title>
-</head>
-<body>
-<p>
-<h:outputText value="Begin test <c:import> with subview tag in importing page"/>
-</p>
-
-<p><f:subview id="foo02">
-<c:import url="foo02.jsp"/>
-</f:subview></p>
-
-
-<p><h:outputText value="subview02"/></p>
-
-<p><f:subview id="bar02">
-<c:import url="bar02.jsp"/>
-</f:subview>
-</p>
-
-<p><h:outputText value="End test <c:import> with subview tag in importing page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/subview03.jsp b/jsf-ri/systest/web/subview03.jsp
deleted file mode 100644
index 002b41a..0000000
--- a/jsf-ri/systest/web/subview03.jsp
+++ /dev/null
@@ -1,64 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>subview03</title>
-</head>
-<body>
-<p>
-<h:outputText value="Begin test <c:include> with subview tag in included page"/></p>
-
-<p><jsp:include page="foo01.jsp"/></p>
-
-<p><h:outputText value="subview03"/></p>
-
-<p><jsp:include page="bar01.jsp"/></p>
-
-<p><h:outputText value="End test <c:include> with subview tag in included page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/subview04.jsp b/jsf-ri/systest/web/subview04.jsp
deleted file mode 100644
index e10d667..0000000
--- a/jsf-ri/systest/web/subview04.jsp
+++ /dev/null
@@ -1,70 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>subview04</title>
-</head>
-<body>
-<p>
-<h:outputText value="[A]"/></p>
-
-<f:subview id="foo02">
-<p><h:outputText value="Begin test <c:include> with subview tag in including page"/></p>
-
-<p><jsp:include page="bar01.jsp"/></p>
-</f:subview>
-
-<p><h:outputText value="subview04"/></p>
-
-<f:subview id="bar02">
-<p><jsp:include page="bar02.jsp"/></p>
-</f:subview>
-
-<p><h:outputText value="End test <c:include> with subview tag in including page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/subview05.jsp b/jsf-ri/systest/web/subview05.jsp
deleted file mode 100644
index d8a3e6b..0000000
--- a/jsf-ri/systest/web/subview05.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>subview05</title>
-</head>
-<body>
-<p><h:outputText value="Begin test jsp:include with subview and iterator tag in included page"/></p>
-<br />
-<p><jsp:include page="subviewIterator01.jsp"/></p>
-
-<p><h:outputText value="Text from subview05.jsp"/></p>
-</p><h:outputText value="End test jsp:include with subview and iterator tag in included page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/subview06.jsp b/jsf-ri/systest/web/subview06.jsp
deleted file mode 100644
index c7a6219..0000000
--- a/jsf-ri/systest/web/subview06.jsp
+++ /dev/null
@@ -1,63 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-<html>
-<head>
-<title>subview06</title>
-</head>
-<body>
-<p><h:outputText value="Begin test <c:import> with iterator tag in imported page"/></p>
-<f:subview id="subviewOuter">
-<br />
-<p><c:import url="subviewIterator01.jsp"/></p>
-</f:subview>
-
-<p><h:outputText value="Text from subview06.jsp"/></p>
-
-<p><h:outputText value="End test <c:import> with iterator tag in imported page"/></p>
-</body>
-</html>
-</f:view>
diff --git a/jsf-ri/systest/web/subviewIterator01.jsp b/jsf-ri/systest/web/subviewIterator01.jsp
deleted file mode 100644
index fc45723..0000000
--- a/jsf-ri/systest/web/subviewIterator01.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="subviewInner">
-  <br>
-  <c:forEach var="i" begin="0" end="3" varStatus="status">
-    Array[<c:out value="${i}"/>]: 
-    <h:outputText value="This component has no ID " /><br>
-    <h:inputText value="This component has no ID " /><br>
-  </c:forEach>
-
-</f:subview>
-
diff --git a/jsf-ri/systest/web/subviewIterator02.jsp b/jsf-ri/systest/web/subviewIterator02.jsp
deleted file mode 100644
index 7dea04a..0000000
--- a/jsf-ri/systest/web/subviewIterator02.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-  <br>
-  <c:forEach var="i" begin="0" end="3" varStatus="status">
-    Array[<c:out value="${i}"/>]: 
-    <h:outputText value="This component has no ID " /><br>
-    <h:inputText value="This component has no ID " /><br>
-  </c:forEach>
-
diff --git a/jsf-ri/systest/web/success.xhtml b/jsf-ri/systest/web/success.xhtml
deleted file mode 100644
index f3307c6..0000000
--- a/jsf-ri/systest/web/success.xhtml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-    <head><title>Success!</title></head>
-    <body>
-        <p>Success!</p>
-    </body>
-</html>
diff --git a/jsf-ri/systest/web/tag-ivars1.jsp b/jsf-ri/systest/web/tag-ivars1.jsp
deleted file mode 100644
index a0d6119..0000000
--- a/jsf-ri/systest/web/tag-ivars1.jsp
+++ /dev/null
@@ -1,76 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Tag ivars are cleared properly</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-  </head>
-
-  <body>
-    <h1>Test Tag ivars are cleared properly</h1>
-
-<p><a
-href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=36">https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=36</a></p>
-
-
-<f:view>
-
-<h:form>
-
-<p>  <h:outputText value="component 1" /> </p>
-
-<p>  <h:outputText value="component 2" /> </p>
-
-<p>  <h:outputText value="component 3" /> </p>
-
-<p>  <% Object hello = ""; hello = null; Object goodBye = hello.toString(); %> </p>
-
-</h:form>
-
-</f:view>
-
-    <hr>
-    <address><a href="mailto:b_edward at bellsouth.net">Ed Burns</a></address>
-<!-- Created: Tue Aug 31 13:26:22 EDT 2004 -->
-<!-- hhmts start -->
-Last modified: Tue Aug 31 13:42:12 EDT 2004
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/tag-ivars2.jsp b/jsf-ri/systest/web/tag-ivars2.jsp
deleted file mode 100644
index 7e05ad8..0000000
--- a/jsf-ri/systest/web/tag-ivars2.jsp
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Tag ivars are cleared properly</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-  </head>
-
-  <body>
-    <h1>Test Tag ivars are cleared properly</h1>
-
-<p><a
-href="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=36">https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=36</a></p>
-
-
-<f:view>
-
-<h:form>
-
-<p>  <h:outputText value="component 1" /> </p>
-
-<p>  <h:outputText value="component 2" /> </p>
-
-<p>  <h:outputText value="component 3" /> </p>
-
-</h:form>
-
-</f:view>
-
-    <hr>
-    <address><a href="mailto:b_edward at bellsouth.net">Ed Burns</a></address>
-<!-- Created: Tue Aug 31 13:26:22 EDT 2004 -->
-<!-- hhmts start -->
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/taglib/attributeTest.jsp b/jsf-ri/systest/web/taglib/attributeTest.jsp
deleted file mode 100644
index db248b0..0000000
--- a/jsf-ri/systest/web/taglib/attributeTest.jsp
+++ /dev/null
@@ -1,64 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>f:attribute</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-  </head>
-
-  <body>
-    <h1>f:attribute</h1>
-
-<f:view>
-    <p>
-    <h:outputText value="This Should Be Red">
-      <f:attribute name="style" value="color: red" />
-    </h:outputText>
-    </p>
-
-    <p>
-    <h:outputText>
-       <f:attribute name="value" value="#{test2.stringProperty}" />
-    </h:outputText>
-    </p>
-
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/taglib/commandButton_param_test.jsp b/jsf-ri/systest/web/taglib/commandButton_param_test.jsp
deleted file mode 100644
index 8a2f351..0000000
--- a/jsf-ri/systest/web/taglib/commandButton_param_test.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <title>commandButton_param_test.jsp</title>
-</head>
-<body>
-    <f:loadBundle basename="com.sun.faces.systest.resources.Resources" 
-        var="messageBundle"/>
-    <f:view locale="en_US">
-      <h:form id="form01">
-        <h:commandButton id="button01" action="next" value="Label">
-          <h:outputText value="Test Link"/>
-          <f:param name="testname" value="testval"/>
-        </h:commandButton>
-        <p/>
-        <h:commandButton id="button02" action="next" value="Label">
-          <h:outputText value="Test Link"/>
-        </h:commandButton>
-        <p/>
-        <h:commandButton id="button03" action="next" value="Label">
-          <h:outputText value="Test Link"/>
-          <f:param name="testname2" value="#{test1.stringProperty}"/>
-        </h:commandButton>
-        <p/>
-        <h:commandButton id="button04" action="next" value="Label" onclick="hello();">
-          <h:outputText value="Test Link"/>
-          <f:param name="testname" value="testval"/>
-        </h:commandButton>
-      </h:form>
-    </f:view>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/taglib/commandButton_test.jsp b/jsf-ri/systest/web/taglib/commandButton_test.jsp
deleted file mode 100644
index d6bd845..0000000
--- a/jsf-ri/systest/web/taglib/commandButton_test.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <title>commandButton_test.jsp</title>
-</head>
-<body>
-    
-    <f:loadBundle basename="com.sun.faces.systest.resources.Resources" 
-        var="messageBundle"/>
-    <f:view locale="en_US">
-      <h:form id="form01">
-        <h:commandButton id="button01" type="submit" value="My Label"/>
-        <h:commandButton id="button02" type="reset" value="#{test1.stringProperty}"/>
-        <h:commandButton id="button03" type="submit" value="#{messageBundle.button_key}"/>
-        <h:commandButton id="button04" type="reset" image="duke.gif" value="FAIL"/>
-        <h:commandButton id="button05" type="submit" image="#{messageBundle.image_key}"/>
-        <h:commandButton id="button06" type="submit" image="My Label" onclick="hello();"/>
-      </h:form>
-    </f:view>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/taglib/commandLink_multiform_test.jsp b/jsf-ri/systest/web/taglib/commandLink_multiform_test.jsp
deleted file mode 100644
index 2279093..0000000
--- a/jsf-ri/systest/web/taglib/commandLink_multiform_test.jsp
+++ /dev/null
@@ -1,74 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-                                                                                
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-                                                                                
-                                                                                
-<html>
-  <body>
-     <f:view>
-     <h:form id="form01">
-       <h:commandLink id ="Link1" action="redirect">
-          <h:outputText value="Link1"/>
-          <f:param id="hlParam1" name="param1" value="value1"/>
-          <f:param id="hlParam2" name="param2" value="value2"/>
-       </h:commandLink>
-       <h:commandLink id ="Link2" action="redirect">
-          <h:outputText value="Link2"/>
-          <f:param id="hlParam3" name="param1" value="value1"/>
-          <f:param id="hlParam4" name="param2" value="value2"/>
-       </h:commandLink>
-    </h:form> 
-    <h:form id="form02">
-       <h:commandLink id ="Link3" action="redirect">
-          <h:outputText value="Link3"/>
-          <f:param id="hlParam1" name="param3" value="value3"/>
-          <f:param id="hlParam2" name="param4" value="value4"/>
-       </h:commandLink>
-       <h:commandLink id ="Link4" action="forward">
-          <h:outputText value="Link4"/>
-       </h:commandLink>
-       <h:commandLink value="Link5">
-           <f:param id="l5param1" name="#{null}" value="should_not_be_present"/>
-           <f:param id="l5param2" name="param5" value="#{null}"/>
-       </h:commandLink>
-   </h:form>
-   </f:view>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/taglib/commandLink_test.jsp b/jsf-ri/systest/web/taglib/commandLink_test.jsp
deleted file mode 100644
index 862b2e1..0000000
--- a/jsf-ri/systest/web/taglib/commandLink_test.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <title>commandLink_test.jsp</title>
-</head>
-<body>
-    <f:loadBundle basename="com.sun.faces.systest.resources.Resources" 
-         var="messageResources"/>
-    <f:view>
-      <h:form id="form01">
-        <h:commandLink id="hyperlink01"><f:verbatim>My Link</f:verbatim></h:commandLink>
-        <h:commandLink id="hyperlink02"><h:outputText value="#{test1.stringProperty}"/></h:commandLink>
-        <h:commandLink id="hyperlink03"><h:outputText value="#{messageResources.hyperlink_key}"/></h:commandLink>
-        <h:commandLink id="hyperlink04"><f:verbatim escape="false"><img src="duke.gif" /></f:verbatim></h:commandLink>
-        <h:commandLink id="hyperlink05"><h:graphicImage value="#{messageResources.image_key}"/></h:commandLink>
-        <h:commandLink id="hyperlink06"><f:verbatim>Paramter Link</f:verbatim>
-            <f:param name="param1" value="value1"/>
-        </h:commandLink>
-      </h:form>
-    </f:view>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/taglib/command_button_test.jsp b/jsf-ri/systest/web/taglib/command_button_test.jsp
deleted file mode 100644
index d42c36f..0000000
--- a/jsf-ri/systest/web/taglib/command_button_test.jsp
+++ /dev/null
@@ -1,58 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <title>command_button_test.jsp</title>
-</head>
-<body>
-    
-    <f:loadBundle basename="com.sun.faces.systest.resources.Resources" 
-        var="messageBundle"/>
-    <f:view locale="en_US">
-      <h:form id="form01">
-        <h:command_button id="button01" type="submit" value="My Label"/>
-        <h:command_button id="button02" type="reset" value="#{test1.stringProperty}"/>
-        <h:command_button id="button03" type="submit" value="#{messageBundle.button_key}"/>
-        <h:command_button id="button04" type="reset" image="duke.gif" value="FAIL"/>
-        <h:command_button id="button05" type="submit" image="#{messageBundle.image_key}"/>
-      </h:form>
-    </f:view>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/taglib/command_link_test.jsp b/jsf-ri/systest/web/taglib/command_link_test.jsp
deleted file mode 100644
index 03d1c94..0000000
--- a/jsf-ri/systest/web/taglib/command_link_test.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<html>
-<head>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <title>command_link_test.jsp</title>
-</head>
-<body>
-    <f:loadBundle basename="com.sun.faces.systest.resources.Resources" 
-         var="messageResources"/>
-    <f:view>
-      <h:form id="form01">
-        <h:command_link id="hyperlink01"><f:verbatim>My Link</f:verbatim></h:command_link>
-        <h:command_link id="hyperlink02"><h:output_text value="#{test1.stringProperty}"/></h:command_link>
-        <h:command_link id="hyperlink03"><h:output_text value="#{messageResources.hyperlink_key}"/></h:command_link>
-        <h:command_link id="hyperlink04"><f:verbatim escape="false"><img src="duke.gif" /></f:verbatim></h:command_link>
-        <h:command_link id="hyperlink05"><h:graphic_image value="#{messageResources.image_key}"/></h:command_link>
-        <h:command_link id="hyperlink06"><f:verbatim>Paramter Link</f:verbatim>
-            <f:param name="param1" value="value1"/>
-        </h:command_link>
-      </h:form>
-    </f:view>
-</body>
-</html>
-
diff --git a/jsf-ri/systest/web/test01.jsp b/jsf-ri/systest/web/test01.jsp
deleted file mode 100644
index d5b730b..0000000
--- a/jsf-ri/systest/web/test01.jsp
+++ /dev/null
@@ -1,50 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-<%@ page contentType="text/html" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:subview id="test01">
-interweaving
-<h:outputText value="works"/>
-well!!
-</f:subview>
\ No newline at end of file
diff --git a/jsf-ri/systest/web/validator.jsp b/jsf-ri/systest/web/validator.jsp
deleted file mode 100644
index eee643f..0000000
--- a/jsf-ri/systest/web/validator.jsp
+++ /dev/null
@@ -1,61 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.validator.Validator"
-%><%@ page import="com.sun.faces.systest.TestValidator"
-%><%
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // try to retrieve our validator from Application
-  Validator result = appl.createValidator("TestValidator");
-  // report the result
-  if (result == null || 
-      !(result instanceof com.sun.faces.systest.TestValidator)) {
-    out.println("/validator.jsp FAILED");
-    return;
-  } else {
-      out.println("/validator.jsp PASSED");
-  }
-  
-%>
diff --git a/jsf-ri/systest/web/validator01.jsp b/jsf-ri/systest/web/validator01.jsp
deleted file mode 100644
index 519c7b6..0000000
--- a/jsf-ri/systest/web/validator01.jsp
+++ /dev/null
@@ -1,66 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.FactoryFinder"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.application.ApplicationFactory"
-%><%@ page import="javax.faces.validator.Validator"
-%><%@ page import="com.sun.faces.systest.TestValidator"
-%><%
-
-  // Acquire our Application instance
-  ApplicationFactory afactory = (ApplicationFactory)
-   FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-  Application appl = afactory.getApplication();
-
-  // replace mappings provided by the JSF implementation for Length
-  // LengthValidator and make sure that it can be retrieved using the
-  // standard identifier.
-  appl.addValidator("Length", "com.sun.faces.systest.TestValidator");
-
-  // try to retrieve our component from Application
-  Validator result = appl.createValidator("Length");
-  // report the result
-  if (result == null || 
-      !(result instanceof com.sun.faces.systest.TestValidator)) {
-    out.println("/validator01.jsp FAILED");
-    return;
-  } else {
-      out.println("/validator01.jsp PASSED");
-  }
-  
-%>
diff --git a/jsf-ri/systest/web/validator02.jsp b/jsf-ri/systest/web/validator02.jsp
deleted file mode 100644
index 2a19d8b..0000000
--- a/jsf-ri/systest/web/validator02.jsp
+++ /dev/null
@@ -1,133 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Validators</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Validators</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="2">
-
-<%-- Case 1: Custom Validator with "validatorId" attribute --%>
-
-      <h:inputText id="text1"> 
-        <f:validator validatorId="TestValidator01" />
-      </h:inputText>
-
-      <h:message for="text1" />
-
-<%-- Case 2: Custom Validator with "binding" attribute --%>
-
-      <h:inputText id="text2"> 
-        <f:validator binding="#{validatorBean.validator}" />
-      </h:inputText>
-
-      <h:message for="text2" />
-
-<%-- Case 3: "validatorId" and "binding" specified                        --%>
-<%--         "binding" will set the instance (created from "validatorId") --%>
-<%--         to a property on the backing bean                     --%>
-
-      <h:inputText id="text3"> 
-        <f:validator validatorId="TestValidator01"
-           binding="#{validatorBean.validator}" />
-      </h:inputText>
-
-      <h:message for="text3" />
-
-<%-- Bind the validator we created (Case 3) to the component --%>
-
-      <h:inputText id="text4">
-        <f:validator binding="#{validatorBean.validator}" />
-      </h:inputText>
-
-      <h:message for="text4" />
-
-<%-- Double Range Validator with "binding" attribute --%>
-                                                                                     
-      <h:inputText id="text5">
-        <f:validateDoubleRange binding="#{validatorBean.doubleValidator}" 
-           maximum="2" />
-      </h:inputText>
-                                                                                     
-      <h:message for="text5" />
-                                                                                     
-<%-- Length Validator with "binding" attribute --%>
-                                                                                     
-      <h:inputText id="text6">
-        <f:validateLength binding="#{validatorBean.lengthValidator}" 
-           maximum="5" />
-      </h:inputText>
-                                                                                     
-      <h:message for="text6" />
-                                                                                     
-<%-- Long Range Validator with "binding" attribute --%>
-                                                                                     
-      <h:inputText id="text7">
-        <f:validateLongRange binding="#{validatorBean.longRangeValidator}"
-           minimum="13000000000" maximum="13999999999" />
-      </h:inputText>
-                                                                                     
-      <h:message for="text7" />
-                                                                                     
-
-      <h:commandButton value="submit" /> <h:messages />
-
-    </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/validator03.jsp b/jsf-ri/systest/web/validator03.jsp
deleted file mode 100644
index cbebd99..0000000
--- a/jsf-ri/systest/web/validator03.jsp
+++ /dev/null
@@ -1,118 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Validators</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Validators</h1>
-
-<f:view>
-
-  <h:form>
-
-    <h:panelGrid columns="3">
-
-<%-- Case 1: Double Range Validator with no "label" attribute --%>
-
-      <h:outputText value="DoubleRange1:"/>
-      <h:inputText id="dr1"> 
-        <f:validateDoubleRange minimum="2" maximum="5" />
-      </h:inputText>
-      <h:message for="dr1" showSummary="true" />
-
-<%-- Case 2: Double Range Validator with "label" attribute --%>
-
-      <h:outputText value="DoubleRange2:"/>
-      <h:inputText id="dr2" label="DoubleRange2"> 
-        <f:validateDoubleRange minimum="2" maximum="5" />
-      </h:inputText>
-      <h:message for="dr2" showSummary="true" />
-
-<%-- Case 3: Length Validator with no "label" attribute --%>
-
-      <h:outputText value="Length1:"/>
-      <h:inputText id="l1"> 
-        <f:validateLength minimum="2" maximum="5" />
-      </h:inputText>
-      <h:message for="l1" showSummary="true" />
-
-<%-- Case 4: Length Validator with "label" attribute --%>
-
-      <h:outputText value="Length2:"/>
-      <h:inputText id="l2" label="Length2"> 
-        <f:validateLength minimum="2" maximum="5" />
-      </h:inputText>
-      <h:message for="l2" showSummary="true" />
-
-<%-- Case 5: Long Range Validator with no "label" attribute --%>
-
-      <h:outputText value="LongRange1:"/>
-      <h:inputText id="lr1"> 
-        <f:validateLongRange minimum="2" maximum="5" />
-      </h:inputText>
-      <h:message for="lr1" showSummary="true" />
-
-<%-- Case 6: Long Range Validator with "label" attribute --%>
-
-      <h:outputText value="LongRange2:"/>
-      <h:inputText id="lr2" label="LongRange2"> 
-        <f:validateLongRange minimum="2" maximum="5" />
-      </h:inputText>
-      <h:message for="lr2" showSummary="true" />
-
-      <h:commandButton value="submit" />
-
-    </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/validator04.jsp b/jsf-ri/systest/web/validator04.jsp
deleted file mode 100644
index 4530834..0000000
--- a/jsf-ri/systest/web/validator04.jsp
+++ /dev/null
@@ -1,103 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Validators</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Validators</h1>
-
-<f:view>
-
-  <h:form>
-
-    literal required: <h:inputText id="textField" required="true" 
-                 requiredMessage="Literal Message" />
-
-    <p/>
-
-    expression required <h:inputText id="textField2" required="true" 
-                 requiredMessage="#{test2.stringProperty}" />
-
-    <p/>
-    
-    literal converter <h:inputText id="textField3" value="#{test2.intProperty}" 
-                         converterMessage="Converter Literal" />
-
-    <p/>
-
-    expression converter <h:inputText id="textField4" value="#{test2.intProperty}" 
-                         converterMessage="#{test2.converterMessage}" />
-
-    <p/>
-    
-    literal validator <h:inputText id="textField5" value="#{test2.intProperty}" 
-                         validatorMessage="Validator Literal">
-                         <f:validateLongRange minimum="1" maximum="10" />
-                      </h:inputText>
-
-    <p/>
-
-    expression validator <h:inputText id="textField6" value="#{test2.intProperty}" 
-                         validatorMessage="#{test2.validatorMessage}">
-                         <f:validateLongRange minimum="1" maximum="10" />
-                      </h:inputText>
-
-    <p/>
-    
-
-    <h:messages />
-
-    <h:commandButton value="submit" />
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/validator05.xhtml b/jsf-ri/systest/web/validator05.xhtml
deleted file mode 100644
index 01101d1..0000000
--- a/jsf-ri/systest/web/validator05.xhtml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core">
-<head>
-    <title>form level validation test</title>
-</head>
-<body>
-<h:form id="form" prependId="false">
-  <f:event type="postValidate" listener="#{eventTagBean.postValidate}" />
-
-  <p>lesser: <h:inputText id="lesser" /></p>
-
-  <p>greater: <h:inputText id="greater" /></p>
-
-  <p>Verify that the value of "lesser" is lesser than the value of
-  "greater".</p>
-
-  <p><h:commandButton id="cbutton" value="submit" /></p>
-
-</h:form>
-
-
-<h:messages id="messages"/>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/valueBinding01.jsp b/jsf-ri/systest/web/valueBinding01.jsp
deleted file mode 100644
index 0afc748..0000000
--- a/jsf-ri/systest/web/valueBinding01.jsp
+++ /dev/null
@@ -1,71 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBean bean = new TestBean();
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testVB", bean);
-
-  // Retrieve the bean itself with a value binding expression
-  ValueBinding vb = context.getApplication().createValueBinding
-   ("#{testVB}");
-  Object result;
-  try {
-    result = vb.getValue(context);
-  } catch (Exception e) {
-    out.println("/valueBinding01.jsp FAILED - getValue() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Validate the result
-  if (result == null) {
-    out.println("/valueBinding01.jsp FAILED - getValue() returned null");
-  } else if (bean != result) {
-    out.println("/valueBinding01.jsp FAILED - getValue() returned " + result);
-  } else {
-    out.println("/valueBinding01.jsp PASSED");
-  }
-
-%>
diff --git a/jsf-ri/systest/web/valueBinding02.jsp b/jsf-ri/systest/web/valueBinding02.jsp
deleted file mode 100644
index 4033992..0000000
--- a/jsf-ri/systest/web/valueBinding02.jsp
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBean bean = new TestBean();
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testVB", bean);
-
-  // Retrieve a simple String property with a value binding expression
-  ValueBinding vb = context.getApplication().createValueBinding
-   ("#{testVB.stringProperty}");
-  Object result;
-  try {
-    result = vb.getValue(context);
-  } catch (Exception e) {
-    out.println("/valueBinding02.jsp FAILED - getValue() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Validate the result
-  if (result == null) {
-    out.println("/valueBinding02.jsp FAILED - getValue() returned null");
-  } else if (!(result instanceof String)) {
-    out.println("/valueBinding02.jsp FAILED - getValue() returned " + result);
-  } else if (!"This is a String property".equals((String) result)) {
-    out.println("/valueBinding02.jsp FAILED - getValue() returned " + result);
-  } else {
-    out.println("/valueBinding02.jsp PASSED");
-  }
-
-%>
diff --git a/jsf-ri/systest/web/valueBinding03.jsp b/jsf-ri/systest/web/valueBinding03.jsp
deleted file mode 100644
index 91e5319..0000000
--- a/jsf-ri/systest/web/valueBinding03.jsp
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBean bean = new TestBean();
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testVB", bean);
-
-  // Retrieve a simple integer property with a value binding expression
-  ValueBinding vb = context.getApplication().createValueBinding
-   ("#{testVB.intProperty}");
-  Object result;
-  try {
-    result = vb.getValue(context);
-  } catch (Exception e) {
-    out.println("/valueBinding03.jsp FAILED - getValue() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Validate the result
-  if (result == null) {
-    out.println("/valueBinding03.jsp FAILED - getValue() returned null");
-  } else if (!(result instanceof Number)) {
-    out.println("/valueBinding03.jsp FAILED - getValue() returned " + result);
-  } else if (123 != ((Number) result).intValue()) {
-    out.println("/valueBinding03.jsp FAILED - getValue() returned " + result);
-  } else {
-    out.println("/valueBinding03.jsp PASSED");
-  }
-
-%>
diff --git a/jsf-ri/systest/web/valueBinding04.jsp b/jsf-ri/systest/web/valueBinding04.jsp
deleted file mode 100644
index 3704902..0000000
--- a/jsf-ri/systest/web/valueBinding04.jsp
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBean bean = new TestBean();
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testVB", bean);
-
-  // Retrieve a simple boolean property with a value binding expression
-  ValueBinding vb = context.getApplication().createValueBinding
-   ("#{testVB.booleanProperty}");
-  Object result;
-  try {
-    result = vb.getValue(context);
-  } catch (Exception e) {
-    out.println("/valueBinding04.jsp FAILED - getValue() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Validate the result
-  if (result == null) {
-    out.println("/valueBinding04.jsp FAILED - getValue() returned null");
-  } else if (!(result instanceof Boolean)) {
-    out.println("/valueBinding04.jsp FAILED - getValue() returned " + result);
-  } else if (!((Boolean) result).booleanValue()) {
-    out.println("/valueBinding04.jsp FAILED - getValue() returned " + result);
-  } else {
-    out.println("/valueBinding04.jsp PASSED");
-  }
-
-%>
diff --git a/jsf-ri/systest/web/valueBinding05.jsp b/jsf-ri/systest/web/valueBinding05.jsp
deleted file mode 100644
index 3ae1e88..0000000
--- a/jsf-ri/systest/web/valueBinding05.jsp
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBean bean = new TestBean();
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testVB", bean);
-
-  // Retrieve a simple integer expression with a value binding expression
-  ValueBinding vb = context.getApplication().createValueBinding
-   ("#{testVB.intProperty + 1}");
-  Object result;
-  try {
-    result = vb.getValue(context);
-  } catch (Exception e) {
-    out.println("/valueBinding05.jsp FAILED - getValue() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Validate the result
-  if (result == null) {
-    out.println("/valueBinding05.jsp FAILED - getValue() returned null");
-  } else if (!(result instanceof Number)) {
-    out.println("/valueBinding05.jsp FAILED - getValue() returned " + result);
-  } else if (124 != ((Number) result).intValue()) {
-    out.println("/valueBinding05.jsp FAILED - getValue() returned " + result);
-  } else {
-    out.println("/valueBinding05.jsp PASSED");
-  }
-
-%>
diff --git a/jsf-ri/systest/web/valueBinding06.jsp b/jsf-ri/systest/web/valueBinding06.jsp
deleted file mode 100644
index 2e5faea..0000000
--- a/jsf-ri/systest/web/valueBinding06.jsp
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBean bean = new TestBean();
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testVB", bean);
-
-  // Retrieve a simple boolean expression with a value binding expression
-  ValueBinding vb = context.getApplication().createValueBinding
-   ("#{testVB.intProperty > 100}");
-  Object result;
-  try {
-    result = vb.getValue(context);
-  } catch (Exception e) {
-    out.println("/valueBinding06.jsp FAILED - getValue() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Validate the result
-  if (result == null) {
-    out.println("/valueBinding06.jsp FAILED - getValue() returned null");
-  } else if (!(result instanceof Boolean)) {
-    out.println("/valueBinding06.jsp FAILED - getValue() returned " + result);
-  } else if (!((Boolean) result).booleanValue()) {
-    out.println("/valueBinding06.jsp FAILED - getValue() returned " + result);
-  } else {
-    out.println("/valueBinding06.jsp PASSED");
-  }
-
-%>
diff --git a/jsf-ri/systest/web/valueBinding07.jsp b/jsf-ri/systest/web/valueBinding07.jsp
deleted file mode 100644
index 112f50b..0000000
--- a/jsf-ri/systest/web/valueBinding07.jsp
+++ /dev/null
@@ -1,75 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html"
-%><%@ page import="javax.faces.application.Application"
-%><%@ page import="javax.faces.context.FacesContext"
-%><%@ page import="javax.faces.el.ValueBinding"
-%><%@ page import="com.sun.faces.systest.model.TestBean"
-%><%
-
-  // Instantiate our test bean in request scope
-  TestBean bean = new TestBean();
-  bean.setStringProperty("foo");
-  FacesContext context = FacesContext.getCurrentInstance();
-  context.getExternalContext().getRequestMap().put
-   ("testVB", bean);
-
-  // Retrieve a simple String property with a value binding expression
-  ValueBinding vb;
-  Object result;
-  try {
-    vb = context.getApplication().createValueBinding
-     ("#{testVB.stringProperty} and #{testVB.stringProperty}");
-    result = vb.getValue(context);
-  } catch (Exception e) {
-    out.println("/valueBinding07.jsp FAILED - getValue() exception: " + e);
-    e.printStackTrace(System.out);
-    return;
-  }
-
-  // Validate the result
-  if (result == null) {
-    out.println("/valueBinding07.jsp FAILED - getValue() returned null");
-  } else if (!(result instanceof String)) {
-    out.println("/valueBinding07.jsp FAILED - getValue() returned " + result);
-  } else if (!"foo and foo".equals((String) result)) {
-    out.println("/valueBinding07.jsp FAILED - getValue() returned " + result);
-  } else {
-    out.println("/valueBinding07.jsp PASSED");
-  }
-
-%>
diff --git a/jsf-ri/systest/web/valueChangeListener.jsp b/jsf-ri/systest/web/valueChangeListener.jsp
deleted file mode 100644
index b347147..0000000
--- a/jsf-ri/systest/web/valueChangeListener.jsp
+++ /dev/null
@@ -1,93 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>ValueChangeListeners and Validators</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core"  prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html"  prefix="h" %>
-  </head>
-
-  <body>
-    <h1>ValueChangeListeners and Validators</h1>
-
-<f:view>
-
-  <h:form>
-
-    <p>Enter numbers from 1 to 10.</p>
-
-    <h:panelGrid columns="2">
-
-      <h:inputText id="textA" 
-	       valueChangeListener="#{valueChangeListenerBean.textAChanged}">
-        <f:validateLongRange minimum="1" maximum="10" />
-      </h:inputText>
-
-      <h:inputText id="textB" 
-	       valueChangeListener="#{valueChangeListenerBean.textBChanged}">
-        <f:validateLongRange minimum="1" maximum="10" />
-      </h:inputText>
-
-      <h:outputText value="#{valueChangeListenerBean.textAResult}" />
-
-      <h:outputText value="#{valueChangeListenerBean.textBResult}" />
-
-      <h:commandButton value="submit" /> <p>
-
-      <h:messages dir="LTR" lang="en"/>
-
-      <hr />
-
-      <h:message for="textB" dir="RTL" lang="de"/>
-
-
-    </h:panelGrid>
-
-  </h:form>
-
-</f:view>
-
-    <hr>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/valueChangeListener02.jsp b/jsf-ri/systest/web/valueChangeListener02.jsp
deleted file mode 100644
index 304541c..0000000
--- a/jsf-ri/systest/web/valueChangeListener02.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-    <title>ValueChangeListeners and Validators</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-</head>
-
-<body>
-<h1>ValueChangeListeners</h1>
-
-<f:view>
-    <h:form>
-        <h:selectBooleanCheckbox value="true">
-            <f:valueChangeListener type="com.sun.faces.systest.model.TestValueChangeListener"/>
-        </h:selectBooleanCheckbox>
-        <h:commandButton value="Click"/>
-    </h:form>
-    <h:messages/>
-</f:view>
-
-</body>
-</html>
diff --git a/jsf-ri/systest/web/verbatim_test.jsp b/jsf-ri/systest/web/verbatim_test.jsp
deleted file mode 100644
index 98f4c69..0000000
--- a/jsf-ri/systest/web/verbatim_test.jsp
+++ /dev/null
@@ -1,84 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-<f:view>
-
-  <html>
-
-    <head>
-      <title>Test of the Verbatim Tag</title>
-    </head>
-
-    <body>
-
-      <h1>Test of the Verbatim Tag</h1>
-
-      <p>
-        <f:verbatim>
-          [DEFAULT]
-          This text <b>has angle brackets</b>.
-          The angle brackets MUST NOT be escaped.
-        </f:verbatim>
-      </p>
-
-      <p>
-        <f:verbatim escape="false">
-          [FALSE]
-          This text <b>has angle brackets</b>.
-          The angle brackets MUST NOT be escaped.
-        </f:verbatim>
-      </p>
-
-      <p>
-        <f:verbatim escape="true">
-          [TRUE]
-          This text <b>has angle brackets</b>.
-          The angle brackets MUST be escaped.
-        </f:verbatim>
-      </p>
-
-     <p><f:verbatim rendered="false">This text must not be rendered.
-        </f:verbatim>  This text is rendered.
-     </p>
-
-    </body>
-
-  </html>
-
-</f:view>
-
diff --git a/jsf-ri/systest/web/viewLocale.jsp b/jsf-ri/systest/web/viewLocale.jsp
deleted file mode 100644
index b928d64..0000000
--- a/jsf-ri/systest/web/viewLocale.jsp
+++ /dev/null
@@ -1,72 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test view tag with Locale</title>
-  </head>
-
-  <body>
-    <h1>Test view tag with Locale</h1>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-    <f:view locale="fr">  
-      <h:form id="form">
-
-	<hr>
-	<p>Press a button, see some text.</p>
-        <h:inputText id="field" required="true" /> 
-
-        <h:commandButton id="button" value="submit" />
-
-        <h:message for="field" />
-      </h:form>
-    </f:view>
-
-
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-  </body>
-</html>
diff --git a/jsf-ri/systest/web/viewParameters/events.xhtml b/jsf-ri/systest/web/viewParameters/events.xhtml
deleted file mode 100644
index cc3023f..0000000
--- a/jsf-ri/systest/web/viewParameters/events.xhtml
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<f:event xmlns:f="http://java.sun.com/jsf/core" type="preRenderView"
-listener="#{newsReader.loadStory}"/>
diff --git a/jsf-ri/systest/web/viewParameters/page01.xhtml b/jsf-ri/systest/web/viewParameters/page01.xhtml
deleted file mode 100644
index 4a593c3..0000000
--- a/jsf-ri/systest/web/viewParameters/page01.xhtml
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html">
-<body>
-<ui:composition template="/viewParameters/template.xhtml">
-    <ui:define name="metadata">
-        <f:metadata>
-            <f:viewParam name="id"/>
-        </f:metadata>
-    </ui:define>
-    <ui:define name="content">
-        <h:messages style="color: red; list-style: none; border: 0 solid red; border-left-width: 2px; padding: 0 5px;"/>
-        <h1>The big news stories of the day</h1>
-        <ul>
-            <ui:repeat var="_story" value="#{newsReader.stories}">
-                <li>
-                    <h:link outcome="page02">
-                        <f:param name="id" value="#{_story.id}"/>
-                        #{_story.headline}
-                    </h:link>
-                </li>
-            </ui:repeat>
-        </ul>
-        <h:panelGroup rendered="#{not empty id}">
-            <p style="color: green;">You just looked at story ##{id}.</p>
-        </h:panelGroup>
-    </ui:define>
-</ui:composition>
-
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/viewParameters/page02.xhtml b/jsf-ri/systest/web/viewParameters/page02.xhtml
deleted file mode 100644
index 1b67a57..0000000
--- a/jsf-ri/systest/web/viewParameters/page02.xhtml
+++ /dev/null
@@ -1,104 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
-<body>
-<ui:composition template="/viewParameters/template.xhtml">
-    <ui:define name="metadata">
-        <f:metadata>
-            <f:viewParam id="id" name="id" value="#{newsReader.selectedStoryId}"
-                     required="true"
-                     requiredMessage="You did not specify a headline. (The id parameter is missing)"
-                     converterMessage="Invalid headline. (The id parameter is not a number)"
-                     validatorMessage="Invalid headline. (The id parameter is not a positive number)">
-                <f:validateLongRange minimum="1"/>
-            </f:viewParam>
-            <ui:include src="events.xhtml"/>
-        </f:metadata>
-    </ui:define>
-    <ui:define name="content">
-        <h:messages style="color: red; list-style: none; border: 0 solid red; border-left-width: 2px; padding: 0 5px;"/>
-        <h1>#{newsReader.selectedStory.headline}</h1>
-
-        <p>#{newsReader.selectedStory.content}</p>
-        <h:form prependId="false">
-            <p>
-                <h:commandButton id="refresh" value="Refresh"/>
-                #{' '}
-                <h:commandButton id="refreshClearParam"
-                                 value="Refresh (clear param)">
-                    <f:param name="id" value="#{null}"/>
-                </h:commandButton>
-                #{' '}
-                <h:commandButton id="refreshWithRedirectParams"
-                                 action="/viewParameters/page02.xhtml?faces-redirect=true&includeViewParams=true"
-                                 value="Refresh (Redirect After POST w/ params)"/>
-                #{' '}
-                <h:commandButton id="refreshWithRedirect"
-                                 action="/viewParameters/page02.xhtml?faces-redirect=true"
-                                 value="Refresh (Redirect After POST w/o params)"/>
-            </p>
-            <p>
-                <h:commandButton id="home"
-                                 action="/viewParameters/page01.xhtml?faces-redirect=true&from=story"
-                                 value="Home"/>
-                #{' '}
-                <h:commandButton id="homeRememberSelection"
-                                 action="/viewParameters/page01.xhtml?faces-redirect=true&includeViewParams=true&from=story"
-                                 value="Home (Keep selection)"/>
-                #{' '}
-                <h:commandButton id="homeRememberSelectionNavCase"
-                                 action="homeWithParams"
-                                 value="Home (Keep selection nav case)"/>
-
-                <h:commandButton id="story2RememberSelectionNavCase"
-                                 action="story2WithParams"
-                                 value="Story2 (Keep selection nav case)"/>
-
-            </p>
-        </h:form>
-    </ui:define>
-</ui:composition>
-
-</body>
-</html>
diff --git a/jsf-ri/systest/web/viewParameters/page03.xhtml b/jsf-ri/systest/web/viewParameters/page03.xhtml
deleted file mode 100644
index d1fcf93..0000000
--- a/jsf-ri/systest/web/viewParameters/page03.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html">
-<body>
-<ui:composition template="/viewParameters/template.xhtml">
-<ui:define name="metadata">
-    <f:metadata>
-        <f:viewParam id="bar" name="bar" value="foo"/>
-        <f:viewParam id="id" name="id" value="#{flash.id}"/>
-    </f:metadata>
-</ui:define>
-<ui:define name="content">
-    <h1>Story 2</h1>
-    <h:messages style="color: red; list-style: none; border: 0 solid red; border-left-width: 2px; padding: 0 5px;"/>
-    <p>bar is:
-        <h:outputText value="#{bar}"/>
-    </p>
-</ui:define>
-</ui:composition>
-</body>
-
-</html>
diff --git a/jsf-ri/systest/web/viewParameters/template.xhtml b/jsf-ri/systest/web/viewParameters/template.xhtml
deleted file mode 100644
index 8062075..0000000
--- a/jsf-ri/systest/web/viewParameters/template.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xml:lang="en" lang="en">
-
-<body>
-<f:view>
-    <ui:insert name="metadata"/>
-    <div id="container">
-        <ui:insert name="content"/>
-    </div>
-</f:view>
-</body>
-</html>
diff --git a/jsf-ri/systest/web/viewTagListeners.jsp b/jsf-ri/systest/web/viewTagListeners.jsp
deleted file mode 100644
index e2e6ee4..0000000
--- a/jsf-ri/systest/web/viewTagListeners.jsp
+++ /dev/null
@@ -1,82 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view beforePhase="#{phaseListener.beforePhase}"
-        afterPhase="#{phaseListener.afterPhase}">
-  <html>
-    <head>
-      <title>listener methods on f:view</title>
-    </head>
-    <body>
-      <h:form>
-
-        <h2>About this test</h2>
-
-	  <p>The first time this page is visited, we'll only see output
-	  on the beforePhaseEvent below.  That's because the page will
-	  be done rendering by the time the afterPhase listener gets
-	  called, and thus the outputText's below will already have
-	  rendered their content to the page by the time the phase
-	  listener is called.</p>
-
-          <p>When the page is re-displayed any number of times by
-          pressing the redisplay button below, we'll see the apply,
-          process, update, invoke, and render phases on the
-          beforePhaseEvent, and we'll see apply, process, update, and
-          invoke on the afterPhaseEvent.  The former is correct because
-          it's impossible to see a restore-view event by using a view
-          scoped listener.  The latter is correct because we see
-          everything but the after render event because the outputText's
-          below render their output before the after event is sent.</p>
-
-       <h2>Output from the PhaseListener</h2>
-
-        <p>beforePhaseEvent: <h:outputText value="#{beforePhaseEvent}"/>.</p>
-
-        <p>afterPhaseEvent: <h:outputText value="#{afterPhaseEvent}"/>.</p>
-
-        <p><h:commandButton value="redisplay" /></p>
-        
-      </h:form>
-     
-    </body>
-  </html>
-</f:view>
-
diff --git a/jsf-ri/test/com/sun/faces/AdapterPropertyResolver.java b/jsf-ri/test/com/sun/faces/AdapterPropertyResolver.java
deleted file mode 100644
index 6c78a13..0000000
--- a/jsf-ri/test/com/sun/faces/AdapterPropertyResolver.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// AdapterPropertyResolver.java
-
-package com.sun.faces;
-
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.PropertyResolver;
-
-public class AdapterPropertyResolver extends PropertyResolver {
-
-    public AdapterPropertyResolver(PropertyResolver root) {
-        this.root = root;
-    }
-
-
-    public PropertyResolver getRoot() {
-        return root;
-    }
-
-
-    private PropertyResolver root;
-
-
-    public Object getValue(Object base, Object name)
-        throws EvaluationException, PropertyNotFoundException {
-        return root.getValue(base, name);
-    }
-
-
-    public Object getValue(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException {
-        return root.getValue(base, index);
-    }
-
-
-    public void setValue(Object base, Object name, Object value)
-        throws EvaluationException, PropertyNotFoundException {
-        root.setValue(base, name, value);
-    }
-
-
-    public void setValue(Object base, int index, Object value)
-        throws EvaluationException, PropertyNotFoundException {
-        root.setValue(base, index, value);
-    }
-
-
-    public boolean isReadOnly(Object base, Object name)
-        throws PropertyNotFoundException {
-        return root.isReadOnly(base, name);
-    }
-
-
-    public boolean isReadOnly(Object base, int index)
-        throws PropertyNotFoundException {
-        return root.isReadOnly(base, index);
-    }
-
-
-    public Class getType(Object base, Object name)
-        throws PropertyNotFoundException {
-        return root.getType(base, name);
-    }
-
-
-    public Class getType(Object base, int index)
-        throws PropertyNotFoundException {
-        return root.getType(base, index);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/CustomSystemEvent.java b/jsf-ri/test/com/sun/faces/CustomSystemEvent.java
deleted file mode 100644
index 445bfa5..0000000
--- a/jsf-ri/test/com/sun/faces/CustomSystemEvent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces;
-
-import javax.faces.event.SystemEvent;
-
-
-public class CustomSystemEvent extends SystemEvent {
-
-    public CustomSystemEvent(Object source) {
-        super(source);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/CustomerBean.java b/jsf-ri/test/com/sun/faces/CustomerBean.java
deleted file mode 100644
index be4fb7e..0000000
--- a/jsf-ri/test/com/sun/faces/CustomerBean.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-
-/**
- * <p>JavaBean represented the data for an individual customer.</p>
- */
-
-public class CustomerBean implements java.io.Serializable {
-
-
-    public CustomerBean() {
-        this(null, null, null, 0.0);
-    }
-
-
-    public CustomerBean(String accountId, String name,
-                        String symbol, double totalSales) {
-        System.out.println("Created CustomerBean");
-        this.accountId = accountId;
-        this.name = name;
-        this.symbol = symbol;
-        this.totalSales = totalSales;
-    }
-
-
-    private String accountId = null;
-
-
-    public String getAccountId() {
-        return (this.accountId);
-    }
-
-
-    public void setAccountId(String accountId) {
-        this.accountId = accountId;
-    }
-
-
-    private String name = null;
-
-
-    public String getName() {
-        return (this.name);
-    }
-
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-
-    private String symbol = null;
-
-
-    public String getSymbol() {
-        return (this.symbol);
-    }
-
-
-    public void setSymbol(String symbol) {
-        this.symbol = symbol;
-    }
-
-
-    private double totalSales = 0.0;
-
-
-    public double getTotalSales() {
-        return (this.totalSales);
-    }
-
-
-    public void setTotalSales(double totalSales) {
-        this.totalSales = totalSales;
-    }
-
-
-    public String toString() {
-        StringBuffer sb = new StringBuffer("CustomerBean[accountId=");
-        sb.append(accountId);
-        sb.append(",name=");
-        sb.append(name);
-        sb.append(",symbol=");
-        sb.append(symbol);
-        sb.append(",totalSales=");
-        sb.append(totalSales);
-        sb.append("]");
-        return (sb.toString());
-    }
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/SystemEventListener1.java b/jsf-ri/test/com/sun/faces/SystemEventListener1.java
deleted file mode 100644
index dd081ef..0000000
--- a/jsf-ri/test/com/sun/faces/SystemEventListener1.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-
-public class SystemEventListener1 implements SystemEventListener {
-    public void processEvent(SystemEvent event)
-          throws AbortProcessingException {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ctx.getAttributes().put("SystemEventListener1", Boolean.TRUE);
-    }
-
-    public boolean isListenerForSource(Object source) {
-        return (source instanceof UIOutput);
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/SystemEventListener2.java b/jsf-ri/test/com/sun/faces/SystemEventListener2.java
deleted file mode 100644
index e209a58..0000000
--- a/jsf-ri/test/com/sun/faces/SystemEventListener2.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.component.UIOutput;
-import javax.faces.context.FacesContext;
-
-public class SystemEventListener2 implements SystemEventListener {
-    public void processEvent(SystemEvent event)
-          throws AbortProcessingException {
-        FacesContext ctx = FacesContext.getCurrentInstance();
-        ctx.getAttributes().put("SystemEventListener2", Boolean.TRUE);
-    }
-
-    public boolean isListenerForSource(Object source) {
-        return (source != null);
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/TestActionListener.java b/jsf-ri/test/com/sun/faces/TestActionListener.java
deleted file mode 100644
index b85e047..0000000
--- a/jsf-ri/test/com/sun/faces/TestActionListener.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestActionListener.java
-
-package com.sun.faces;
-
-import com.sun.faces.application.ActionListenerImpl;
-
-public class TestActionListener extends ActionListenerImpl {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestBean.java b/jsf-ri/test/com/sun/faces/TestBean.java
deleted file mode 100644
index 5f2c1c1..0000000
--- a/jsf-ri/test/com/sun/faces/TestBean.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import com.sun.faces.util.Util;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.el.ELException;                                                                                                  
-public class TestBean extends 
-        com.sun.faces.cactus.TestBean {
-
-    public TestBean() {
-    }
-
-    protected CustomerBean customerBean;
-    public CustomerBean getCustomerBean() {
-	return customerBean;
-    }
-
-    public void setCustomerBean(CustomerBean newCustomerBean) {
-	customerBean = newCustomerBean;
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestComponent.java b/jsf-ri/test/com/sun/faces/TestComponent.java
deleted file mode 100644
index bc7c074..0000000
--- a/jsf-ri/test/com/sun/faces/TestComponent.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import javax.faces.component.UIComponentBase;
-
-public class TestComponent extends UIComponentBase {
-
-    public String getFamily() {
-        return "TestFamily";
-    }
-
-
-    public String getComponentType() {
-        return "TestComponent";
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestConverter.java b/jsf-ri/test/com/sun/faces/TestConverter.java
deleted file mode 100644
index c8383bd..0000000
--- a/jsf-ri/test/com/sun/faces/TestConverter.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import javax.faces.convert.NumberConverter;
-
-public class TestConverter extends NumberConverter {
-
-    public String getConverterId() {
-        return "TestConverter";
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestELResolver.java b/jsf-ri/test/com/sun/faces/TestELResolver.java
deleted file mode 100644
index e6562f1..0000000
--- a/jsf-ri/test/com/sun/faces/TestELResolver.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-import java.beans.FeatureDescriptor;
-
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIViewRoot;
-
-import javax.el.ELException;
-import javax.el.PropertyNotWritableException;
-import javax.el.PropertyNotFoundException;
-import javax.el.PropertyNotFoundException;
-import javax.el.ELContext;
-import javax.el.ELResolver;
-
-import com.sun.faces.el.ELConstants;
-import com.sun.faces.util.Util;
-
-public class TestELResolver extends ELResolver {
-
-    public TestELResolver() {
-    }
-
-    public Object getValue(ELContext context,Object base, Object property) 
-            throws ELException {
-        return null;
-    }
-
-    public void  setValue(ELContext context, Object base, Object property,
-        Object val) throws ELException {
-       
-    }
-
-    public boolean isReadOnly(ELContext context, Object base, Object property) 
-        throws ELException{
-          
-        return false;	
-    }
-
-    public Class getType(ELContext context, Object base, Object property) 
-        throws ELException {
-        return Object.class;
-    } 
-
-    public Iterator getFeatureDescriptors(ELContext context, Object base) {
-        return null;
-    }
-
-    public Class getCommonPropertyType(ELContext context, Object base) {
-        if (base != null) {
-            return null;
-        }
-        return String.class;
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/TestExceptionBean.java b/jsf-ri/test/com/sun/faces/TestExceptionBean.java
deleted file mode 100644
index c72b716..0000000
--- a/jsf-ri/test/com/sun/faces/TestExceptionBean.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-/**
- * <p>JavaBean represented the data for an individual customer.</p>
- */
-
-public class TestExceptionBean implements java.io.Serializable {
-
-
-    public TestExceptionBean() throws InstantiationException{
-        throw new InstantiationException("TestConstructorException Passed");
-    }
-
-
-    private String name = null;
-
-    public String getName() {
-        return (this.name);
-    }
-
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestFirstConverter.java b/jsf-ri/test/com/sun/faces/TestFirstConverter.java
deleted file mode 100644
index fd7d95e..0000000
--- a/jsf-ri/test/com/sun/faces/TestFirstConverter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestFirstConverter.java
-
-package com.sun.faces;
-
-import javax.faces.convert.NumberConverter;
-
-public class TestFirstConverter extends NumberConverter {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestFirstValidator.java b/jsf-ri/test/com/sun/faces/TestFirstValidator.java
deleted file mode 100644
index e01d696..0000000
--- a/jsf-ri/test/com/sun/faces/TestFirstValidator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestFirstValidator.java
-
-package com.sun.faces;
-
-import javax.faces.validator.LengthValidator;
-
-public class TestFirstValidator extends LengthValidator {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestForm.java b/jsf-ri/test/com/sun/faces/TestForm.java
deleted file mode 100644
index eb5f484..0000000
--- a/jsf-ri/test/com/sun/faces/TestForm.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces;
-
-import javax.faces.component.html.HtmlForm;
-
-public class TestForm extends HtmlForm {
-
-    public static final String COMPONENT_TYPE = "javax.faces.TestForm";
-
-    public TestForm() {
-        super();
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestMessages.properties b/jsf-ri/test/com/sun/faces/TestMessages.properties
deleted file mode 100644
index af7ecd2..0000000
--- a/jsf-ri/test/com/sun/faces/TestMessages.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-euroMessage=Message with \u20ac
-buckaroo=banzai
-john=bigboote
-
-
-localeFromBundle=ps-PS
diff --git a/jsf-ri/test/com/sun/faces/TestNavigationHandler.java b/jsf-ri/test/com/sun/faces/TestNavigationHandler.java
deleted file mode 100644
index 0ee2fca..0000000
--- a/jsf-ri/test/com/sun/faces/TestNavigationHandler.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestNavigationHandler.java
-
-package com.sun.faces;
-
-import com.sun.faces.application.NavigationHandlerImpl;
-
-public class TestNavigationHandler extends NavigationHandlerImpl {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestOldVariableResolver.java b/jsf-ri/test/com/sun/faces/TestOldVariableResolver.java
deleted file mode 100644
index 17bb022..0000000
--- a/jsf-ri/test/com/sun/faces/TestOldVariableResolver.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestOldVariableResolver.java
-
-package com.sun.faces;
-
-import javax.faces.el.VariableResolver;
-import javax.faces.el.EvaluationException;
-import javax.faces.context.FacesContext;
-
-public class TestOldVariableResolver extends VariableResolver {
-   
-    VariableResolver resolver = null;
-    public TestOldVariableResolver(VariableResolver variableResolver) {
-       this.resolver = variableResolver;
-    }
-    
-    //
-    // Relationship Instance Variables
-    // 
-
-    // Specified by javax.faces.el.VariableResolver.resolveVariable()
-    public Object resolveVariable(FacesContext context, String name)
-            throws EvaluationException {
-        if (name.equals("customVRTest2")) {
-            return "TestOldVariableResolver";
-        }
-        return resolver.resolveVariable(context, name);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestPropertyResolver.java b/jsf-ri/test/com/sun/faces/TestPropertyResolver.java
deleted file mode 100644
index 4412af5..0000000
--- a/jsf-ri/test/com/sun/faces/TestPropertyResolver.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestPropertyResolver.java
-
-package com.sun.faces;
-
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-
-public class TestPropertyResolver extends PropertyResolver {
-   
-    PropertyResolver root = null;
-    public TestPropertyResolver(PropertyResolver propertyResolver) {       
-        root = propertyResolver;
-    }
-    
-    // Specified by javax.faces.el.PropertyResolver.getValue(Object,String)
-    public Object getValue(Object base, Object property) {
-         if (property.equals("customPRTest1")) {
-            return "TestPropertyResolver";
-         }
-         return root.getValue(base, property);
-    }
-
-    public Object getValue(Object base, int index)
-        throws EvaluationException, PropertyNotFoundException {
-        return root.getValue(base, index);
-    }
-
-
-    public void setValue(Object base, Object name, Object value)
-        throws EvaluationException, PropertyNotFoundException {
-        root.setValue(base, name, value);
-    }
-
-
-    public void setValue(Object base, int index, Object value)
-        throws EvaluationException, PropertyNotFoundException {
-        root.setValue(base, index, value);
-    }
-
-
-    public boolean isReadOnly(Object base, Object name)
-        throws PropertyNotFoundException {
-        return root.isReadOnly(base, name);
-    }
-
-
-    public boolean isReadOnly(Object base, int index)
-        throws PropertyNotFoundException {
-        return root.isReadOnly(base, index);
-    }
-
-
-    public Class getType(Object base, Object name)
-        throws PropertyNotFoundException {
-        return root.getType(base, name);
-    }
-
-
-    public Class getType(Object base, int index)
-        throws PropertyNotFoundException {
-        return root.getType(base, index);
-    }
-    
-}
diff --git a/jsf-ri/test/com/sun/faces/TestResourceBundle2_de.properties b/jsf-ri/test/com/sun/faces/TestResourceBundle2_de.properties
deleted file mode 100644
index ee035bc..0000000
--- a/jsf-ri/test/com/sun/faces/TestResourceBundle2_de.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-# Sample ResourceBundle properties file
-label=Abflug
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/TestResourceBundle_de.properties b/jsf-ri/test/com/sun/faces/TestResourceBundle_de.properties
deleted file mode 100644
index e81aa92..0000000
--- a/jsf-ri/test/com/sun/faces/TestResourceBundle_de.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sample ResourceBundle properties file
-value1=Bernhard
-value2=Joerg
-value3=Beate Uhse
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/TestResourceBundle_en.properties b/jsf-ri/test/com/sun/faces/TestResourceBundle_en.properties
deleted file mode 100644
index 22ff891..0000000
--- a/jsf-ri/test/com/sun/faces/TestResourceBundle_en.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-value1=Jerry
-value2=Bob
-value3=Phil
-
-
-
- 
-
-
diff --git a/jsf-ri/test/com/sun/faces/TestSecondConverter.java b/jsf-ri/test/com/sun/faces/TestSecondConverter.java
deleted file mode 100644
index 870e9f5..0000000
--- a/jsf-ri/test/com/sun/faces/TestSecondConverter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestSecondConverter.java
-
-package com.sun.faces;
-
-import javax.faces.convert.NumberConverter;
-
-public class TestSecondConverter extends NumberConverter {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestSecondValidator.java b/jsf-ri/test/com/sun/faces/TestSecondValidator.java
deleted file mode 100644
index 4dfddfa..0000000
--- a/jsf-ri/test/com/sun/faces/TestSecondValidator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestSecondValidator.java
-
-package com.sun.faces;
-
-import javax.faces.validator.LongRangeValidator;
-
-public class TestSecondValidator extends LongRangeValidator {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestVariableResolver.java b/jsf-ri/test/com/sun/faces/TestVariableResolver.java
deleted file mode 100644
index 43bc68e..0000000
--- a/jsf-ri/test/com/sun/faces/TestVariableResolver.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestVariableResolver.java
-
-package com.sun.faces;
-
-import javax.faces.el.VariableResolver;
-import javax.faces.el.EvaluationException;
-import javax.faces.context.FacesContext;
-
-public class TestVariableResolver extends VariableResolver {
-   
-    VariableResolver resolver = null;
-    public TestVariableResolver(VariableResolver variableResolver) {
-       this.resolver = variableResolver;
-    }
-    
-    //
-    // Relationship Instance Variables
-    // 
-
-    // Specified by javax.faces.el.VariableResolver.resolveVariable()
-    public Object resolveVariable(FacesContext context, String name)
-            throws EvaluationException {
-        if (name.equals("customVRTest1")) {
-            return "TestVariableResolver";
-        }
-        return resolver.resolveVariable(context, name);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/TestViewHandler.java b/jsf-ri/test/com/sun/faces/TestViewHandler.java
deleted file mode 100644
index 8a64e26..0000000
--- a/jsf-ri/test/com/sun/faces/TestViewHandler.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestViewHandler.java
-
-package com.sun.faces;
-
-import com.sun.faces.application.ViewHandlerImpl;
-
-public class TestViewHandler extends ViewHandlerImpl {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/ActionListenerTestImpl.java b/jsf-ri/test/com/sun/faces/application/ActionListenerTestImpl.java
deleted file mode 100644
index b4c743b..0000000
--- a/jsf-ri/test/com/sun/faces/application/ActionListenerTestImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-public class ActionListenerTestImpl extends ActionListenerImpl {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/DeprStateManagerImpl.java b/jsf-ri/test/com/sun/faces/application/DeprStateManagerImpl.java
deleted file mode 100644
index 9fc3e4f..0000000
--- a/jsf-ri/test/com/sun/faces/application/DeprStateManagerImpl.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-// DeprStateManagerImpl.java 
-
-package com.sun.faces.application;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.TreeStructure;
-import com.sun.faces.util.LRUMap;
-import com.sun.faces.util.MessageUtils;
-import com.sun.faces.util.RequestStateManager;
-
-import javax.faces.application.StateManager;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.render.ResponseStateManager;
-
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UINamingContainer;
-
-/**
- * <B>DeprStateManagerImpl</B> is a test class which implements
- * deprecated methods only. 
- */
-public class DeprStateManagerImpl extends StateManager {
-
-    private static final String NUMBER_OF_VIEWS_IN_SESSION =
-        RIConstants.FACES_PREFIX + "NUMBER_OF_VIEWS_IN_SESSION";
-    private static final int DEFAULT_NUMBER_OF_VIEWS_IN_SESSION = 15;
-
-    private static final String NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION =
-        RIConstants.FACES_PREFIX + "NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION";
-    private static final int DEFAULT_NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION = 15;
-
-    private static final String LOGICAL_VIEW_MAP =
-          RIConstants.FACES_PREFIX + "logicalViewMap";
-    /**
-     * Number of views in logical view to be saved in session.
-     */
-    int noOfViews = 0;
-    int noOfViewsInLogicalView = 0;
-    
-    public SerializedView saveSerializedView(FacesContext context) 
-        throws IllegalStateException{
-        SerializedView result = null;
-	Object treeStructure = null;
-	Object componentState = null;
-	// irrespective of method to save the tree, if the root is transient
-	// no state information needs to  be persisted.
-	UIViewRoot viewRoot = context.getViewRoot();
-	if (viewRoot.isTransient()) {
-            return result;
-	}
-	
-	// honor the requirement to check for id uniqueness
-	checkIdUniqueness(context, viewRoot, new HashSet());
-
-	
-	result = new SerializedView(treeStructure = 
-				    getTreeStructureToSave(context),
-				    componentState =
-				    getComponentStateToSave(context));
-        if (!isSavingStateInClient(context)) {
-            //
-            // Server Side state saving is handled stored in two nested LRU maps
-            // in the session.
-            //
-            // The first map is called the LOGICAL_VIEW_MAP.  A logical view
-            // is a top level view that may have one or more actual views inside
-            // of it.  This will be the case when you have a frameset, or an
-            // application that has multiple windows operating at the same time.
-            // The LOGICAL_VIEW_MAP map contains 
-            // an entry for each logical view, up to the limit specified by the
-            // numberOfViewsParameter.  Each entry in the LOGICAL_VIEW_MAP
-            // is an LRU Map, configured with the numberOfViewsInLogicalView
-            // parameter.  
-            //
-            // The motivation for this is to allow better memory tuning for 
-            // apps that need this multi-window behavior.
-            
-            String id = null,
-                   idInActualMap = null,
-                   idInLogicalMap = (String)
-                RequestStateManager.get(context, RequestStateManager.LOGICAL_VIEW_MAP);
-            LRUMap logicalMap = null, actualMap = null;
-            int 
-                logicalMapSize = getNumberOfViewsParameter(context),
-                actualMapSize = getNumberOfViewsInLogicalViewParameter(context);
-            
-            Object stateArray[] = { treeStructure, componentState };
-            Map sessionMap = context.getExternalContext().getSessionMap();
-            
- 	    synchronized (this) {
-                if (null == (logicalMap = (LRUMap) sessionMap.get(LOGICAL_VIEW_MAP))) {
-                    logicalMap = new LRUMap(logicalMapSize);
- 		    sessionMap.put(LOGICAL_VIEW_MAP, logicalMap);
-                }
-                assert(null != logicalMap); 
-
-                if (null == idInLogicalMap) {
-                    idInLogicalMap = createUniqueRequestId();
-                }
-                assert(null != idInLogicalMap);
- 
-                idInActualMap = createUniqueRequestId();
- 		if (null == (actualMap = (LRUMap) 
-                        logicalMap.get(idInLogicalMap))) {
-		    actualMap = new LRUMap(actualMapSize);
-                    logicalMap.put(idInLogicalMap, actualMap);
- 		}
-                id = idInLogicalMap + ':' +
-                        idInActualMap;
-		result = new SerializedView(id, null);
-                actualMap.put(idInActualMap, stateArray);
- 	    }
- 	}
-	
-        return result;
-    }
-
-
-    char requestIdSerial = 0;
-
-    private String createUniqueRequestId() {
-	if (requestIdSerial++ == Character.MAX_VALUE) {
-	    requestIdSerial = 0;
-	}
-	return UIViewRoot.UNIQUE_ID_PREFIX + ((int) requestIdSerial);
-    }
-
-
-    protected void checkIdUniqueness(FacesContext context,
-        UIComponent component, Set componentIds) throws IllegalStateException{
-        UIComponent kid;
-        // deal with children that are marked transient.
-        Iterator kids = component.getChildren().iterator();
-        String id;
-        while (kids.hasNext()) {
-            kid = (UIComponent) kids.next();
-	    // check for id uniqueness
-	    id = kid.getClientId(context);
-	    if (id != null && !componentIds.add(id)) {
-		throw new IllegalStateException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.DUPLICATE_COMPONENT_ID_ERROR_ID,
-                        new Object[]{id}));
-	    }
-
-	    checkIdUniqueness(context, kid, componentIds);
-        }
-        // deal with facets that are marked transient.
-        kids = component.getFacets().values().iterator();
-        while (kids.hasNext()) {
-            kid = (UIComponent) kids.next();
-	    // check for id uniqueness
-	    id = kid.getClientId(context);
-	    if (id != null && !componentIds.add(id)) {
-		throw new IllegalStateException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.DUPLICATE_COMPONENT_ID_ERROR_ID,
-                        new Object[]{id}));
-	    }
-
-	    checkIdUniqueness(context, kid, componentIds);
-
-        }
-    }
-
-
-    protected Object getComponentStateToSave(FacesContext context) {
-	return context.getViewRoot().processSaveState(context);
-    }
-
-
-    protected Object getTreeStructureToSave(FacesContext context) {
-        TreeStructure structRoot = null;
-        UIComponent viewRoot = context.getViewRoot();
-        if (!(viewRoot.isTransient())) {
-            structRoot = new TreeStructure(viewRoot);
-            buildTreeStructureToSave(context, viewRoot, structRoot, null);
-        }
-        return structRoot;
-    }
-
-
-    public UIViewRoot restoreView(FacesContext context, String viewId,
-                                  String renderKitId) {
-        if (null == renderKitId) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKitId");
-            throw new IllegalArgumentException(message);
-        }
-
-        UIViewRoot viewRoot = null;
-        if (isSavingStateInClient(context)) {
-            // restore view from response.
-            viewRoot = restoreTreeStructure(context, viewId, renderKitId);
-            if (viewRoot != null) {
-                restoreComponentState(context, viewRoot, renderKitId);
-            } else {
-            }
-        } else {
-            // restore tree from session.
-            // The ResponseStateManager implementation may be using the new methods or
-            // deprecated methods.  We need to know which one to call.
-            Object id = null;
-            ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
-	    id = rsm.getTreeStructureToRestore(context, viewId);
-
-	    if (null != id) {
-                String idString = (String) id,
-                       idInLogicalMap = null,
-                       idInActualMap = null;
-                
-                int sep = idString.indexOf(':');
-                assert(-1 != sep);
-                assert(sep < idString.length());
-                
-                idInLogicalMap = idString.substring(0, sep);
-                idInActualMap = idString.substring(sep + 1);
-                		
-                ExternalContext externalCtx = context.getExternalContext();
-                Object sessionObj = externalCtx.getSession(false);
-                
-                // stop evaluating if the session is not available
-                if (sessionObj == null) {
-                    return null;
-                }
-                
-                Map logicalMap = null,
-                actualMap = null,
-                sessionMap = externalCtx.getSessionMap();
-                
-		TreeStructure structRoot = null;
-		Object [] stateArray = null;
-		synchronized (sessionObj) {
-		    logicalMap = (Map) sessionMap.get(LOGICAL_VIEW_MAP);
-                    if (logicalMap != null) {
-                        actualMap = (Map) logicalMap.get(idInLogicalMap);
-                        if (actualMap != null) {
-                            RequestStateManager.set(context, RequestStateManager.LOGICAL_VIEW_MAP,
-                                idInLogicalMap);
-                            stateArray = (Object []) actualMap.get(idInActualMap);
-                        }
-                    }
-		}
-                if (stateArray == null) {
-                    return null;
-                }
-		structRoot = (TreeStructure)stateArray[0];
-		viewRoot = (UIViewRoot) structRoot.createComponent();
-		restoreComponentTreeStructure(structRoot, viewRoot);
-		
-		viewRoot.processRestoreState(context, stateArray[1]);
-		
-	    }
-        }
-        return viewRoot;
-    }
-
-
-    protected void restoreComponentState(FacesContext context,
-                                         UIViewRoot root, String renderKitId) {
-        if (null == renderKitId) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKitId");
-            throw new IllegalArgumentException(message);
-        }
-        Object state = null;
-        ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
-	state = rsm.getComponentStateToRestore(context);
-        root.processRestoreState(context, state);
-    }
-
-
-    protected UIViewRoot restoreTreeStructure(FacesContext context,
-                                              String viewId, String renderKitId) {
-        if (null == renderKitId) {
-            String message = MessageUtils.getExceptionMessageString
-                (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "renderKitId");
-            throw new IllegalArgumentException(message);
-        }
-        UIComponent viewRoot = null;
-        TreeStructure structRoot = null;
-        ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
-        structRoot = (TreeStructure)rsm.getTreeStructureToRestore(context, viewId);
-        if (structRoot == null) {
-            return null;
-        }
-        viewRoot = structRoot.createComponent();
-        restoreComponentTreeStructure(structRoot, viewRoot);
-        return ((UIViewRoot) viewRoot);
-    }
-
-    public void writeState(FacesContext context, SerializedView state)
-        throws IOException {
-        String renderKitId = context.getViewRoot().getRenderKitId();
-        ResponseStateManager rsm = RenderKitUtils.getResponseStateManager(context, renderKitId);
-        rsm.writeState(context, state);
-    }
-
-    /**
-     * Builds a hierarchy of TreeStrucure objects simulating the component
-     * tree hierarchy.
-     */
-    public void buildTreeStructureToSave(FacesContext context,
-                                         UIComponent component,
-                                         TreeStructure treeStructure,
-                                         Set componentIds) {
-        // traverse the component hierarchy and save the tree structure 
-        // information for every component.
-        
-        // Set for catching duplicate IDs
-        if (null == componentIds) {
-            componentIds = new HashSet();
-        }
-        
-        // save the structure info of the children of the component 
-        // being processed.
-        Iterator kids = component.getChildren().iterator();
-        String id;
-        while (kids.hasNext()) {
-            UIComponent kid = (UIComponent) kids.next();
-
-	    // check for id uniqueness
-	    id = kid.getClientId(context);
-	    if (id != null && !componentIds.add(id)) {
-		throw new IllegalStateException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.DUPLICATE_COMPONENT_ID_ERROR_ID,
-                        new Object[]{id}));
-	    }
-            
-            // if a component is marked transient do not persist its state as
-            // well as its children.
-            if (!kid.isTransient()) {
-                TreeStructure treeStructureChild = new TreeStructure(kid);
-                treeStructure.addChild(treeStructureChild);
-                buildTreeStructureToSave(context, kid, treeStructureChild,
-                                         componentIds);
-            }
-        }
-
-        // save structure info of the facets of the component currenly being 
-        // processed.
-        Iterator facets = component.getFacets().keySet().iterator();
-        while (facets.hasNext()) {
-            String facetName = (String) facets.next();
-            UIComponent facetComponent = (UIComponent) component.getFacets().
-                get(facetName);
-
-	    // check for id uniqueness
-	    id = facetComponent.getClientId(context);
-	    if (id != null && !componentIds.add(id)) {
-		throw new IllegalStateException(MessageUtils.getExceptionMessageString(
-                        MessageUtils.DUPLICATE_COMPONENT_ID_ERROR_ID,
-                        new Object[]{id}));
-	    }
-            
-            // if a facet is marked transient do not persist its state as well as
-            // its children.
-            if (!(facetComponent.isTransient())) {
-                TreeStructure treeStructureFacet =
-                    new TreeStructure(facetComponent);
-                treeStructure.addFacet(facetName, treeStructureFacet);
-                // process children of facet.
-                buildTreeStructureToSave(context,
-                                         facetComponent, treeStructureFacet,
-                                         componentIds);
-            }
-        }
-    }
-
-
-    /**
-     * Reconstitutes the component tree from TreeStructure hierarchy
-     */
-    public void restoreComponentTreeStructure(TreeStructure treeStructure,
-                                              UIComponent component) {
-        // traverse the tree strucure hierarchy and restore component
-        // structure.
-      
-        // restore the structure of the children of the component being processed.
-        Iterator kids = treeStructure.getChildren();
-        while (kids.hasNext()) {
-            TreeStructure kid = (TreeStructure) kids.next();
-            UIComponent child = kid.createComponent();
-            component.getChildren().add(child);
-            restoreComponentTreeStructure(kid, child);
-        }
-        
-        // process facets
-        Iterator facets = treeStructure.getFacetNames();
-        while (facets.hasNext()) {
-            String facetName = (String) facets.next();
-            TreeStructure facetTreeStructure =
-                treeStructure.getTreeStructureForFacet(facetName);
-            UIComponent facetComponent = facetTreeStructure.createComponent();
-            component.getFacets().put(facetName, facetComponent);
-            restoreComponentTreeStructure(facetTreeStructure, facetComponent);
-        }
-    }
-    
-    /**
-     * Returns the <code> UIViewRoot</code> corresponding the 
-     * <code> viewId </code> by restoring the view structure and state.
-     */
-    protected UIViewRoot restoreSerializedView(FacesContext context, 
-        SerializedView sv, String viewId) {
-        if ( sv == null) {
-            return null;
-        }
-        TreeStructure structRoot = (TreeStructure) sv.getStructure();
-        if (structRoot == null) {
-            return null;
-        }
-        UIComponent viewRoot = structRoot.createComponent();
-        if (viewRoot != null) {
-             restoreComponentTreeStructure(structRoot, viewRoot);
-             Object state = sv.getState();
-             viewRoot.processRestoreState(context, state);
-        }
-        return ((UIViewRoot)viewRoot);
-    }
-    
-    /**
-     * Returns the value of ServletContextInitParameter that specifies the
-     * maximum number of logical views to be saved in session. If none is specified
-     * returns <code>DEFAULT_NUMBER_OF_VIEWS_IN_SESSION</code>.
-     */
-    protected int getNumberOfViewsParameter(FacesContext context) {
-        if (noOfViews != 0) { 
-            return noOfViews;
-        }
-        noOfViews = DEFAULT_NUMBER_OF_VIEWS_IN_SESSION;
-        String noOfViewsStr = context.getExternalContext().
-                getInitParameter(NUMBER_OF_VIEWS_IN_SESSION);
-        if (noOfViewsStr != null) {
-            try {
-                noOfViews = Integer.valueOf(noOfViewsStr).intValue();
-            } catch (NumberFormatException nfe) {
-            }
-        } 
-        return noOfViews;
-    }
-
-    /**
-     * Returns the value of ServletContextInitParameter that specifies the
-     * maximum number of views to be saved in this logical view. If none is specified
-     * returns <code>DEFAULT_NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION</code>.
-     */
-    protected int getNumberOfViewsInLogicalViewParameter(FacesContext context) {
-        if (noOfViewsInLogicalView != 0) { 
-            return noOfViewsInLogicalView;
-        }
-        noOfViewsInLogicalView = DEFAULT_NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION;
-        String noOfViewsStr = context.getExternalContext().
-                getInitParameter(NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION);
-        if (noOfViewsStr != null) {
-            try {
-                noOfViewsInLogicalView = Integer.valueOf(noOfViewsStr).intValue();
-            } catch (NumberFormatException nfe) {
-            }
-        } 
-        return noOfViewsInLogicalView;
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/application/NavBean.java b/jsf-ri/test/com/sun/faces/application/NavBean.java
deleted file mode 100644
index cfc4739..0000000
--- a/jsf-ri/test/com/sun/faces/application/NavBean.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class NavBean {
-
-    private static AtomicInteger integer = new AtomicInteger(0);
-
-    public int getIncrement() {
-        return integer.incrementAndGet();
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/NavigationHandlerTestImpl.java b/jsf-ri/test/com/sun/faces/application/NavigationHandlerTestImpl.java
deleted file mode 100644
index a67c5d0..0000000
--- a/jsf-ri/test/com/sun/faces/application/NavigationHandlerTestImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-public class NavigationHandlerTestImpl extends NavigationHandlerImpl {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/PropertyResolverTestImpl.java b/jsf-ri/test/com/sun/faces/application/PropertyResolverTestImpl.java
deleted file mode 100644
index df1cabe..0000000
--- a/jsf-ri/test/com/sun/faces/application/PropertyResolverTestImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.TestPropertyResolver;
-import javax.faces.el.PropertyResolver;
-
-public class PropertyResolverTestImpl extends TestPropertyResolver{
-
-    PropertyResolver root = null;
-    
-    public PropertyResolverTestImpl(PropertyResolver root) {
-       super(root);
-       this.root = root;
-    }
-    
-     public Object getValue(Object base, Object property) {
-        if (property.equals("customPRTest2")) {
-            return "PropertyResolverTestImpl";
-        }
-        return root.getValue(base, property);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/TestActionListenerImpl.java b/jsf-ri/test/com/sun/faces/application/TestActionListenerImpl.java
deleted file mode 100644
index 7dbb926..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestActionListenerImpl.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestActionListenerImpl.java
-
-package com.sun.faces.application;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-
-import javax.faces.FacesException;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.MethodNotFoundException;
-import javax.faces.event.ActionEvent;
-import java.util.Locale;
-
-/**
- *
- *  <B>TestActionListenerImpl</B> is a class ...
- *
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-/**
- * This class tests the <code>ActionListenerImpl</code> class
- * functionality.  It uses the xml configuration file:
- * <code>web/test/WEB-INF/faces-navigation.xml</code>.
- */
-public class TestActionListenerImpl extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestActionListenerImpl() {
-        super("TestActionListenerImpl");
-    }
-
-
-    public TestActionListenerImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-//
-// General Methods
-//
-
-    public void testProcessAction() {
-        loadFromInitParam("/WEB-INF/faces-navigation.xml");
-        FacesContext context = getFacesContext();
-
-        System.out.println("Testing With Action Literal Set...");
-
-        UICommand command = new UICommand();
-        command.setAction(
-            context.getApplication().createMethodBinding(
-                "#{newCustomer.loginRequired}", null));
-        UIViewRoot page = Util.getViewHandler(context).createView(context, null);
-        page.setViewId("/login.jsp");
-        page.setLocale(Locale.US);
-        context.setViewRoot(page);
-
-        ActionListenerImpl actionListener = new ActionListenerImpl();
-        ActionEvent actionEvent = new ActionEvent(command);
-
-        actionListener.processAction(actionEvent);
-
-        String newViewId = context.getViewRoot().getViewId();
-        assertTrue(newViewId.equals("/must-login-first.jsp"));
-
-        System.out.println("Testing With Action Set...");
-
-        command = new UICommand();
-        MethodBinding binding =
-            context.getApplication().createMethodBinding("#{userBean.login}",
-                                                         null);
-        command.setAction(binding);
-
-        UserBean user = new UserBean();
-        context.getExternalContext().getSessionMap().put("userBean", user);
-        assertTrue(
-            user ==
-            context.getExternalContext().getSessionMap().get("userBean"));
-
-        page = Util.getViewHandler(context).createView(context, null);
-        page.setViewId("/login.jsp");
-        page.setLocale(Locale.US);
-        context.setViewRoot(page);
-
-        actionEvent = new ActionEvent(command);
-        actionListener.processAction(actionEvent);
-
-        newViewId = context.getViewRoot().getViewId();
-        // expected outcome should be view id corresponding to "page/outcome" search..
-
-        assertTrue(newViewId.equals("/home.jsp"));
-    }
-
-
-    public void testIllegalArgException() {
-        boolean exceptionThrown = false;
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(context, null);
-        page.setViewId("/login.jsp");
-        context.setViewRoot(page);
-        UserBean user = new UserBean();
-        context.getExternalContext().getApplicationMap().put("UserBean", user);
-
-        assertTrue(
-            user ==
-            context.getExternalContext().getApplicationMap().get("UserBean"));
-
-        UICommand command = new UICommand();
-        MethodBinding binding =
-            context.getApplication().createMethodBinding("#{UserBean.noMeth}",
-                                                         null);
-        command.setAction(binding);
-        ActionEvent actionEvent = new ActionEvent(command);
-
-        ActionListenerImpl actionListener = new ActionListenerImpl();
-        try {
-            actionListener.processAction(actionEvent);
-        } catch (FacesException e) {
-            assertTrue(e.getCause() instanceof MethodNotFoundException);
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-    public static class UserBean extends Object {
-
-        public String login() {
-            return ("success");
-        }
-
-    }
-
-} // end of class TestActionListenerImpl
-
diff --git a/jsf-ri/test/com/sun/faces/application/TestAdapters.java b/jsf-ri/test/com/sun/faces/application/TestAdapters.java
deleted file mode 100644
index e38b306..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestAdapters.java
+++ /dev/null
@@ -1,638 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import javax.el.ELContext;
-import javax.el.MethodExpression;
-import javax.el.MethodInfo;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.MethodNotFoundException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.PropertyNotFoundException;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-/**
- * This test case will validate  the various adapter classes
- * found in jsf-api/template-src
- */
- @SuppressWarnings("deprecation")
-public class TestAdapters extends ServletFacesTestCase {
-
-    ExpressionFactory factory;
-    
-    public TestAdapters() {
-        super("TestAdapters");
-    }
-
-
-    public TestAdapters(String name) {
-        super(name);
-    }
-
-
-    @Override public void setUp() {
-        try {
-            factory = (ExpressionFactory) 
-                  Class.forName("com.sun.el.ExpressionFactoryImpl").newInstance();
-        } catch (Exception e) {
-            System.out.println(e);
-        }
-        super.setUp();
-    }
-
-
-    @Override public void tearDown() {
-        super.tearDown();
-    }
-    
-    // ------------------------------------------------------------ Test Methods
-    
-    
-    public void testMEMBAdapterTest() throws Exception {
-        // Phase 1
-        //   - validate NPEs are thrown as expected
-        TestMethodBinding binding =  new TestMethodBinding("#{simple.invoke}", 
-                                                           Double.class, 
-                                                           new MySimpleBean());        
-        MethodExpressionMethodBindingAdapter meAdapter = 
-              new MethodExpressionMethodBindingAdapter(binding);
-        FacesContext fContext = getFacesContext();
-        ExternalContext extContext = fContext.getExternalContext();
-        TestMethodExpression methodExpr = new TestMethodExpression("invoke",
-                                                                   "#{foo.invoke}",
-                                                                   Double.class,
-                                                                   new Class[] { String.class },
-                                                                   new MySimpleBean());
-        TestMethodExpression falseExpr = new TestMethodExpression("invoke",
-                                                                  "#{foo.invoke}",
-                                                                  String.class,
-                                                                  new Class[] { String.class },
-                                                                  new MySimpleBean());
-        extContext.getRequestMap().put("simple", new MySimpleBean());
-        
-        // Phase 1
-        //   - validate NPEs are thrown as expected
-        try {
-            meAdapter.getMethodInfo(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        try {
-            meAdapter.invoke(null, new Object[] { "1.4" });
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        // Phase 2
-        //   - validate methods with correct input
-        MethodInfo info = meAdapter.getMethodInfo(fContext.getELContext());
-        assertTrue(Double.class.equals(info.getReturnType()));
-        
-        Object obj = meAdapter.invoke(fContext.getELContext(), new Object[] { "1.3" });
-        assertTrue (obj instanceof Double);
-        assertTrue ("1.3".equals(obj.toString()));
-        
-        // Phase 3
-        //   - validate the equals() method
-        
-        assertTrue(!meAdapter.equals(null));
-        // if the reference is to the same object, it should return true
-        assertTrue(meAdapter.equals(meAdapter));        
-        
-        // if the argument passed is another MethodExpressionMethodBindingAdapter
-        // with the same binding, it should return true
-        MethodExpressionMethodBindingAdapter meTrue = 
-              new MethodExpressionMethodBindingAdapter(binding);
-        MethodExpressionMethodBindingAdapter meFalse =
-              new MethodExpressionMethodBindingAdapter(new TestMethodBinding("#{foo.invoke}", 
-                                                                             String.class, 
-                                                                             new MySimpleBean()));
-         assertTrue(meAdapter.equals(meTrue));
-         assertTrue(!meAdapter.equals(meFalse));
-        
-         // if a MethodBinding is provided, then a little more work will
-         // be performed - ensure this works
-         if (factory != null) {
-            ApplicationAssociate.getInstance(extContext).setExpressionFactory(factory);            
-            assertTrue(meAdapter.equals(methodExpr));
-            assertTrue(!meAdapter.equals(falseExpr));
-         }
-    }
-    
-    
-    public void testMBMEAdapterTest() throws Exception {
-        
-        TestMethodExpression expression = new TestMethodExpression("invoke",
-                                                                   "#{simple.invoke}",
-                                                                   Double.class,
-                                                                   new Class[] { String.class },
-                                                                   new MySimpleBean());
-        MethodBindingMethodExpressionAdapter mbAdapter = 
-              new MethodBindingMethodExpressionAdapter(expression);
-        FacesContext fContext = getFacesContext();
-        ExternalContext extContext = fContext.getExternalContext();
-        TestMethodBinding methodBinding = new TestMethodBinding("#{foo.invoke}",
-                                                                Double.class, 
-                                                                new MySimpleBean());
-        TestMethodBinding falseBinding = new TestMethodBinding("#{foo.invoke}",
-                                                                String.class,
-                                                                new MySimpleBean());
-        extContext.getRequestMap().put("foo", new MySimpleBean());
-        
-        // Phase 1
-        //   - validate NPEs are thrown as expected
-        try {
-            mbAdapter.getType(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        try {
-            mbAdapter.invoke(null, new Object[]{ "" });
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        // Phase 2
-        //   - validate methods with correct input        
-        assertTrue(Double.class.equals(mbAdapter.getType(fContext)));
-        
-        Object obj = mbAdapter.invoke(fContext, new Object[] { "1.3" });
-        assertTrue (obj instanceof Double);
-        assertTrue ("1.3".equals(obj.toString()));
-        
-        // Phase 3
-        //   - validate the equals() method
-        
-        assertTrue(!mbAdapter.equals(null));
-        // if the reference is to the same object, it should return true
-        assertTrue(mbAdapter.equals(mbAdapter));        
-        
-        // if the argument passed is another MethodExpressionMethodBindingAdapter
-        // with the same binding, it should return true
-        MethodBindingMethodExpressionAdapter mbTrue = 
-              new MethodBindingMethodExpressionAdapter(expression);
-        MethodBindingMethodExpressionAdapter mbFalse =
-              new MethodBindingMethodExpressionAdapter(new TestMethodExpression("invoke",
-                                                                   "#{foo.invoke}",
-                                                                   String.class,
-                                                                   new Class[] { Double.class },
-                                                                   new MySimpleBean()));
-         assertTrue(mbAdapter.equals(mbTrue));
-         assertTrue(!mbAdapter.equals(mbFalse));
-        
-         // if a MethodBinding is provided, then a little more work will
-         // be performed - ensure this works
-         if (factory != null) {
-            ApplicationAssociate.getInstance(extContext).setExpressionFactory(factory);            
-            assertTrue(mbAdapter.equals(methodBinding));
-            assertTrue(!mbAdapter.equals(falseBinding));
-         }
-    }
-    
-    
-    public void testVEVBAdapterTest() throws Exception {
-        TestValueBinding binding = new TestValueBinding("#{simple.double}",
-                                                        new MySimpleBean(),
-                                                        Double.class);
-        ValueExpressionValueBindingAdapter veAdapter =
-              new ValueExpressionValueBindingAdapter(binding);
-        FacesContext fContext = getFacesContext();
-        ELContext elContext = fContext.getELContext();
-        
-        // Phase 1
-        //   - validate NPEs are thrown as expected
-        try {
-            veAdapter.getType(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        try {
-            veAdapter.getValue(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        try {
-            veAdapter.setValue(null, "string");
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        try {
-            veAdapter.isReadOnly(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        // Phase 2
-        //   - validate methods with correct input
-        assertTrue(Double.class.equals(veAdapter.getType(elContext)));
-        assertTrue(Double.valueOf("1.5").equals(veAdapter.getValue(elContext)));
-        assertTrue(veAdapter.isReadOnly(elContext));
-        
-        // Phase 3
-        //   - validate the equals() method
-        assertTrue(veAdapter.equals(veAdapter));
-        ValueExpressionValueBindingAdapter trueAdapter =
-            new ValueExpressionValueBindingAdapter(binding);
-        ValueExpressionValueBindingAdapter falseAdapter =
-           new ValueExpressionValueBindingAdapter(
-                 new TestValueBinding("#{simple.double}",
-                                      new MySimpleBean(),
-                                      String.class));
-        assertTrue(veAdapter.equals(trueAdapter));
-        assertTrue(!veAdapter.equals(falseAdapter));
-
-        ValueExpression trueVE = new TestValueExpression("#{ping.double}",
-                                                         Double.class,
-                                                         new MySimpleBean());
-        ValueExpression falseVE = new TestValueExpression("#{foo.double}",
-                                                          String.class,
-                                                          new MySimpleBean());
-        assertTrue(veAdapter.equals(trueVE));
-        assertTrue(!veAdapter.equals(falseVE));
-
-    }
-    
-   
-    public void testVBVEAdapterTest() throws Exception {
-        ValueExpression expression = new TestValueExpression("#{simple.double}",
-                                                             Double.class,
-                                                             new MySimpleBean());
-         ValueBindingValueExpressionAdapter vbAdapter =
-              new ValueBindingValueExpressionAdapter(expression);
-        FacesContext fContext = getFacesContext();        
-        
-        // Phase 1
-        //   - validate NPEs are thrown as expected
-        try {
-            vbAdapter.getType(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-        try {
-            vbAdapter.getValue(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-         try {
-            vbAdapter.isReadOnly(null);
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-         try {
-            vbAdapter.setValue(null, "string");
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof NullPointerException)) {
-                assertTrue(false);
-            }
-        }
-        
-         // Phase 2
-        //   - validate methods with correct input
-        assertTrue(Double.class.equals(vbAdapter.getType(fContext)));
-        assertTrue(new Double(1.5).equals(vbAdapter.getValue(fContext)));
-        assertTrue(vbAdapter.isReadOnly(fContext));
-        
-        // Phase 3
-        //   - validate the equals() method
-        assertTrue(vbAdapter.equals(vbAdapter));
-        ValueBindingValueExpressionAdapter trueAdapter =
-            new ValueBindingValueExpressionAdapter(expression);
-        ValueBindingValueExpressionAdapter falseAdapter =
-           new ValueBindingValueExpressionAdapter(
-                 new TestValueExpression("#{foo.double}",
-                                      String.class,
-                                      new MySimpleBean()));
-        assertTrue(vbAdapter.equals(trueAdapter));
-        assertTrue(!vbAdapter.equals(falseAdapter));
-
-        ValueBinding trueVB = new TestValueBinding("#{ping.double}",
-                                                   new MySimpleBean(),
-                                                   Double.class);
-        ValueBinding falseVB = new TestValueBinding("#{foo.double}",
-                                                    new MySimpleBean(),
-                                                    String.class);
-        assertTrue(vbAdapter.equals(trueVB));
-        assertTrue(!vbAdapter.equals(falseVB));
-    }
-    
-    // ----------------------------------------------------------- Inner Classes
-    
-    private static class MySimpleBean {
-        
-        Double value = 1.5;
-        
-        public Double getDouble() {
-            return value;
-        }
-        
-        public Double invoke(String value) {
-            return Double.valueOf(value);
-        }
-        
-        public String invoked(String value) {
-            return value;
-        }
-    }
-    
-    
-    private static class TestValueExpression extends ValueExpression {
-        
-        private String expr;
-        private Class<?> returnType;
-        private MySimpleBean bean;
-        
-        public TestValueExpression(String expr,
-                                   Class<?> returnType,
-                                   MySimpleBean bean) {
-            this.expr = expr;
-            this.returnType = returnType;
-            this.bean = bean;
-        }
-
-        public Object getValue(ELContext elContext) {
-            if (elContext == null) {
-                throw new NullPointerException();
-            }
-            return bean.getDouble();
-        }
-
-        public void setValue(ELContext elContext, Object object) {
-            if (elContext == null) {
-                throw new NullPointerException();
-            }
-        }
-
-        public boolean isReadOnly(ELContext elContext) {
-            if (elContext == null) {
-                throw new NullPointerException();
-            }
-            return true;
-        }
-
-        public Class<?> getType(ELContext elContext) {
-            if (elContext == null) {
-                throw new NullPointerException();
-            }
-            return returnType;
-        }
-
-        public Class<?> getExpectedType() {
-            return returnType;    
-        }
-
-        public String getExpressionString() {
-            return expr;
-        }
-
-        public boolean equals(Object object) {
-            if (object == this) {
-                return true;
-            }
-            
-            if (object instanceof TestValueExpression) {
-                TestValueExpression v = (TestValueExpression) object;
-                return v.getExpressionString().equals(expr)
-                       && v.getExpectedType().equals(returnType);
-            }
-            
-            return false;
-        }
-
-        public int hashCode() {
-            return (expr.hashCode() ^ returnType.hashCode());            
-        }
-
-        public boolean isLiteralText() {
-            return false;  
-        }
-    }
-    
-       
-    private static class TestValueBinding extends ValueBinding {
-
-        String expr;
-        MySimpleBean bean;
-        Class<?> returnType;
-        
-        public TestValueBinding(String expr,
-                                MySimpleBean bean,
-                                Class<?> returnType) {
-            this.expr = expr;
-            this.bean = bean;
-            this.returnType = returnType;
-        }
-       
-        public Object getValue(FacesContext context)
-        throws EvaluationException, PropertyNotFoundException {
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            return bean.getDouble();
-        }
-
-       
-        public void setValue(FacesContext context, Object value)
-        throws EvaluationException, PropertyNotFoundException {
-            if (context == null) {
-                throw new NullPointerException();
-            }            
-        }
-
-       
-        public boolean isReadOnly(FacesContext context)
-        throws EvaluationException, PropertyNotFoundException {
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            return true;
-        }
-        
-               
-        public Class getType(FacesContext context)
-        throws EvaluationException, PropertyNotFoundException {
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            return returnType;
-        }
-    }
-    
-   
-    private static class TestMethodBinding extends MethodBinding {
-        
-        String exprString;
-        Class<?> returnType;
-        MySimpleBean bean;
-        
-        public TestMethodBinding(String exprString,
-                                 Class<?> returnType, 
-                                 MySimpleBean bean) {
-            this.exprString = exprString;
-            this.returnType = returnType;
-            this.bean = bean;
-        }
-
-       
-        public Object invoke(FacesContext context, Object[] params)
-        throws EvaluationException, MethodNotFoundException {
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            return bean.invoke((String) params[0]);
-        }
-
-        
-        public Class getType(FacesContext context) throws MethodNotFoundException {
-            if (context == null) {
-                throw new NullPointerException();
-            }
-            return returnType;
-        }
-
-        
-        @Override public String getExpressionString() {
-            return exprString;
-        }
-    }
-
-    
-    private static class TestMethodExpression extends MethodExpression {
-
-        private String methodName;
-        private String exprString;
-        private Class<?> returnType;
-        private Class<?>[] params;
-        private MySimpleBean bean;
-        private MethodInfo info;
-        
-        public TestMethodExpression(String methodName,
-                                    String exprString,
-                                    Class<?> returnType,
-                                    Class<?>[] params,
-                                    MySimpleBean bean) {
-            this.methodName = methodName;
-            this.exprString = exprString;
-            this.returnType = returnType;
-            this.params = params;
-            this.bean = bean;
-            info = new MethodInfo(methodName, returnType, params);
-        }
-        public MethodInfo getMethodInfo(ELContext elContext) {
-            if (elContext == null) {
-                throw new NullPointerException();
-            }
-            return info;
-        }
-
-        public Object invoke(ELContext elContext, Object[] objects) {
-            if (elContext == null) {
-                throw new NullPointerException();
-            }
-            return bean.invoke((String) objects[0]);
-        }
-
-        public String getExpressionString() {
-            return exprString;
-        }
-
-        public boolean equals(Object object) {
-            return this == object
-                   || object instanceof TestMethodExpression
-                      && (exprString.equals(
-                  ((TestMethodExpression) object).getExpressionString()));
-
-        }
-
-        public int hashCode() {
-            return exprString.hashCode(); 
-        }
-
-        public boolean isLiteralText() {
-            return false;
-        }
-    }
-   
-
-
-} // END TestAdapters
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/application/TestApplicationEvents.java b/jsf-ri/test/com/sun/faces/application/TestApplicationEvents.java
deleted file mode 100644
index 0c1578c..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestApplicationEvents.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.util.List;
-
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.event.FacesListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEventListenerHolder;
-import javax.faces.event.PostConstructApplicationEvent;
-
-import com.sun.faces.CustomSystemEvent;
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-/**
- * @since 2.0.0
- */
-public class TestApplicationEvents extends ServletFacesTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestApplicationEvents() {
-        super("TestApplicationEvents");
-    }
-
-
-    public TestApplicationEvents(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-    ////////////////////////////////////////////////////////////////////////////
-    // ensure NPEs are thrown per the docs
-    public void testEventsNPEs() {
-
-        Application application = getFacesContext().getApplication();
-        SystemEventListener listener = new TestListener();
-
-        // ----------------------------------------------------------- Subscribe
-
-        try {
-            application.subscribeToEvent(null, UIViewRoot.class, listener);
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-
-        try {
-            application.subscribeToEvent(TestApplicationEvents.TestSystemEvent.class, UIViewRoot.class, null);
-            assert(false);
-        } catch (NullPointerException ignored) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-
-        // --------------------------------------------------------- Unsubscribe
-
-        try {
-            application.subscribeToEvent(null, UIViewRoot.class, listener);
-            assertTrue(false);
-        } catch (NullPointerException ignored) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-
-        try {
-            application.subscribeToEvent(TestApplicationEvents.TestSystemEvent.class, UIViewRoot.class, null);
-            assertTrue(false);
-        } catch (NullPointerException ignored) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-
-        // ------------------------------------------------------------- Publish
-
-        try {
-            application.publishEvent(getFacesContext(), null, new UIViewRoot());
-            assertTrue(false);
-        } catch (NullPointerException ignored) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-
-        try {
-            application.publishEvent(getFacesContext(),
-                                     TestApplicationEvents.TestSystemEvent.class,
-                                     null);
-            assertTrue(false);
-        } catch (NullPointerException ignored) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-
-        try {
-            application.publishEvent(null,
-                                     TestApplicationEvents.TestSystemEvent.class,
-                                     new UIViewRoot());
-            assertTrue(false);
-        } catch (NullPointerException ignored) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-        
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    // Ensure component level listeners are invoked when
-    // Application.publishEvent() is called.
-    public void testEvents1() {
-
-        TestComponentListener listener = new TestComponentListener();
-        Application application = getFacesContext().getApplication();
-        UIInput input = new UIInput();
-        input.subscribeToEvent(TestApplicationEvents.TestSystemEvent3.class,
-                               listener);
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent3.class,
-                                 input);
-        assertTrue(listener.getPassedEvent() instanceof TestApplicationEvents.TestSystemEvent3);
-
-        // new UIInput without any subs should result in no invocation
-        listener.reset();
-        UIInput input2 = new UIInput();
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent3.class,
-                                 input2);
-        assertTrue(!listener.wasProcessEventInvoked());
-
-        // unsub'd event should result in no invocations
-        input.unsubscribeFromEvent(TestApplicationEvents.TestSystemEvent3.class,
-                                   listener);
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent3.class,
-                                 input);
-        assertTrue(!listener.wasProcessEventInvoked());
-        
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    // Test Application subscribeToEvent() and unsubscribeToEvent() with
-    // a specific source.
-    public void testEvents2() {
-
-        TestListener listener = new TestListener(UIViewRoot.class);
-        Application application = getFacesContext().getApplication();
-        application.subscribeToEvent(TestApplicationEvents.TestSystemEvent.class,
-                                     UIViewRoot.class,
-                                     listener);
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent.class,
-                                 getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSource() == getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSystemEvent() instanceof TestSystemEvent);
-        assertTrue(listener.getPassedSystemEvent().getSource() == getFacesContext().getViewRoot());
-
-        // event is setup for UIViewRoot sources, so a UIInput source shouldn't
-        // trigger the listener
-        UIInput input = new UIInput();
-        listener.reset();
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent.class,
-                                 input);
-        assertTrue(listener.getPassedSource() == null);
-        assertTrue(listener.getPassedSystemEvent() == null);
-
-        // passing a custom UIViewRoot should result in the listener being
-        // triggered and the event being created
-        listener.reset();
-        CustomViewRoot root = new CustomViewRoot();
-         application.subscribeToEvent(TestApplicationEvents.TestSystemEvent.class,
-                                     CustomViewRoot.class,
-                                     listener);
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent.class,
-                                 root);
-        assertTrue(listener.getPassedSource() == root);
-        assertTrue(listener.getPassedSystemEvent() instanceof TestSystemEvent);
-        assertTrue(listener.getPassedSystemEvent().getSource() == root);
-
-        // unsubscript and verify a publish doesn't trigger the listener
-        application.unsubscribeFromEvent(TestApplicationEvents.TestSystemEvent.class,
-                                         CustomViewRoot.class,
-                                         listener);
-        listener.reset();
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent.class,
-                                 root);
-        assertTrue(!listener.wasIsListenerForSourceInvoked());
-        assertTrue(!listener.wasProcessEventInvoked());
-
-        application.unsubscribeFromEvent(TestApplicationEvents.TestSystemEvent.class,
-                                         UIViewRoot.class,
-                                         listener);
-        listener.reset();
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent.class,
-                                 root);
-        assertTrue(!listener.wasIsListenerForSourceInvoked());
-        assertTrue(!listener.wasProcessEventInvoked());
-
-        // verify multiple events for a single source works
-        listener = new TestListener(UIViewRoot.class);
-        application.subscribeToEvent(TestApplicationEvents.TestSystemEvent2.class,
-                                     UIViewRoot.class,
-                                     listener);
-        application.subscribeToEvent(TestApplicationEvents.TestSystemEvent3.class,
-                                     UIViewRoot.class,
-                                     listener);
-
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent2.class,
-                                 getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSource() == getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSystemEvent() instanceof TestSystemEvent2);
-        assertTrue(listener.getPassedSystemEvent().getSource() == getFacesContext().getViewRoot());
-        listener.reset();
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent3.class,
-                                 getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSource() == getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSystemEvent() instanceof TestSystemEvent3);
-        assertTrue(listener.getPassedSystemEvent().getSource() == getFacesContext().getViewRoot());
-
-        application.unsubscribeFromEvent(TestApplicationEvents.TestSystemEvent2.class,
-                                         UIViewRoot.class,
-                                         listener);
-        application.unsubscribeFromEvent(TestApplicationEvents.TestSystemEvent3.class,
-                                         UIViewRoot.class,
-                                         listener);
-
-        // verify subscription for source that is an Abstract type works or
-        // doesn't work depending on how the event is published.
-        TestListener abstractListener = new TestListener(Application.class);
-        application.subscribeToEvent(PostConstructApplicationEvent.class,
-                                     Application.class,
-                                     abstractListener);
-        abstractListener.reset();
-        application.publishEvent(getFacesContext(),
-                                 PostConstructApplicationEvent.class,
-                                 Application.class,
-                                 application);
-        assertTrue(abstractListener.getPassedSource() == application);
-        assertTrue(abstractListener.getPassedSystemEvent() instanceof PostConstructApplicationEvent);
-        assertTrue(abstractListener.getPassedSystemEvent().getSource() == application);
-
-        // verify that the event isn't published when the base type isn't
-        // provided with publish
-        abstractListener.reset();
-        application.publishEvent(getFacesContext(),
-                                 PostConstructApplicationEvent.class,
-                                 application);
-        assertTrue(abstractListener.getPassedSource() == null);
-        assertTrue(abstractListener.getPassedSystemEvent() == null);
-
-        // cleanup
-        application.unsubscribeFromEvent(PostConstructApplicationEvent.class,
-                                         Application.class,
-                                         abstractListener);
-
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    // Test Application subscribeToEvent() and unsubscribeToEvent() without
-    // a specific source.
-    public void testEvents3() {
-
-        TestListener listener = new TestListener(UIComponent.class);
-        Application application = getFacesContext().getApplication();
-        application.subscribeToEvent(TestApplicationEvents.TestSystemEvent2.class,
-                                     listener);
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent2.class,
-                                 getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSource() == getFacesContext().getViewRoot());
-        assertTrue(listener.getPassedSystemEvent() instanceof TestSystemEvent2);
-        assertTrue(listener.getPassedSystemEvent().getSource() == getFacesContext().getViewRoot());
-
-        // any UIComponent source should work
-        listener.reset();
-        UIInput input = new UIInput();
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent2.class, input);
-        assertTrue(listener.getPassedSource() == input);
-        assertTrue(listener.getPassedSystemEvent() instanceof TestSystemEvent2);
-        assertTrue(listener.getPassedSystemEvent().getSource() == input);
-
-        // non UIComponent SystemEventListenerHolder shouldn't result in the
-        // listener being used
-        listener.reset();
-        TestSystemEventListenerHolder holder = new TestSystemEventListenerHolder();
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent2.class,
-                                 holder);
-        assertTrue(listener.getPassedSource() == holder);
-        assertTrue(!listener.wasProcessEventInvoked());
-        assertTrue(listener.getPassedSystemEvent() == null);
-
-
-        // unsubscribe
-        listener.reset();
-        application.unsubscribeFromEvent(TestApplicationEvents.TestSystemEvent2.class, listener);
-        application.publishEvent(getFacesContext(),
-                                 TestApplicationEvents.TestSystemEvent2.class,
-                                 input);
-        assertTrue(!listener.wasIsListenerForSourceInvoked());
-        assertTrue(!listener.wasProcessEventInvoked());
-
-    }
-
-
-    public void testListenersFromConfig() {
-
-        FacesContext ctx = getFacesContext();
-        Application app = ctx.getApplication();
-        // SystemEventListener1 is only interested in UIOutput sources, while
-        // SystemEventListener2 is interested in any events.
-        app.publishEvent(getFacesContext(),
-                         CustomSystemEvent.class,
-                         new UIInput());
-        assertNull(ctx.getAttributes().remove("SystemEventListener1"));
-        assertNotNull(ctx.getAttributes().remove("SystemEventListener2"));
-        app.publishEvent(getFacesContext(),
-                         CustomSystemEvent.class,
-                         new UIOutput());
-        assertNotNull(ctx.getAttributes().remove("SystemEventListener1"));
-        assertNotNull(ctx.getAttributes().remove("SystemEventListener2"));
-
-    }
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static final class TestComponentListener
-          implements ComponentSystemEventListener {
-
-        private SystemEvent passedEvent;
-        boolean processEventInvoked;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public TestComponentListener() { }
-
-
-        // --------------------------- Methods from ComponentSystemEventListener
-
-
-        public void processEvent(ComponentSystemEvent event)
-        throws AbortProcessingException {
-            passedEvent = event;
-            processEventInvoked = true;
-        }
-
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public void reset() {
-            passedEvent = null;
-            processEventInvoked = false;
-        }
-
-        public boolean wasProcessEventInvoked() {
-            return processEventInvoked;
-        }
-
-        public SystemEvent getPassedEvent() {
-            return passedEvent;
-        }
-
-    } // END TestComponentListener
-
-
-    private static final class TestListener implements SystemEventListener {
-
-        private Class<?> sourceFor;
-
-        private Object passedSource;
-        private SystemEvent passedEvent;
-        boolean processEventInvoked;
-        private boolean forSourceInvoked;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public TestListener() { }
-
-
-        public TestListener(Class<?> sourceFor) {
-            this.sourceFor = sourceFor;
-        }
-
-
-        // ------------------------------------- Methods for SystemEventListener
-
-
-        public void processEvent(SystemEvent event)
-        throws AbortProcessingException {
-            processEventInvoked = true;
-            passedEvent = event;
-        }
-
-
-        public boolean isListenerForSource(Object source) {
-            forSourceInvoked = true;
-            passedSource = source;
-            if (sourceFor == null) {
-                return (source != null);
-            } else {
-                return sourceFor.isInstance(source);
-            }
-        }
-
-        // ------------------------------------------------------ Public Methods
-
-
-        public Object getPassedSource() {
-            return passedSource;
-        }
-
-        public SystemEvent getPassedSystemEvent() {
-            return passedEvent;
-        }
-
-        public boolean wasProcessEventInvoked() {
-            return processEventInvoked;
-        }
-
-        public boolean wasIsListenerForSourceInvoked() {
-            return forSourceInvoked;
-        }
-
-        public void reset() {
-            passedSource = null;
-            passedEvent = null;
-            processEventInvoked = false;
-            forSourceInvoked = false;
-        }
-
-        public void setSourceFor(Class<?> sourceFor) {
-            this.sourceFor = sourceFor;
-        }
-
-    } // END TestListener
-
-
-    public class CustomViewRoot extends UIViewRoot {
-
-    } // END CustomViewRoot
-
-
-    public static final class TestSystemEvent extends SystemEvent {
-
-        private static final long serialVersionUID = -1623739732540866805L;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public TestSystemEvent(UIViewRoot root) {
-            super(root);
-        }
-
-
-        // -------------------------------------------- Methods from SystemEvent
-
-
-        @Override
-        public boolean isAppropriateListener(FacesListener listener) {
-            return (listener instanceof TestListener);
-        }
-
-
-        @Override
-        public void processListener(FacesListener listener) {
-            super.processListener(listener);
-        }
-
-    } // END TestSystemEvent
-
-    public static final class TestSystemEvent2 extends SystemEvent {
-
-        private static final long serialVersionUID = -5903799319964180305L;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public TestSystemEvent2(UIComponent root) {
-            super(root);
-        }
-
-
-    } // END TestSystemEvent2
-
-    private static final class TestSystemEventListenerHolder
-          implements SystemEventListenerHolder {
-
-        public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> facesEventClass) {
-            return null;
-        }
-
-    } // END TestSystemEventListenerHolder
-
-
-    public static final class TestSystemEvent3 extends ComponentSystemEvent {
-
-        private static final long serialVersionUID = 6317143707337743522L;
-
-        public TestSystemEvent3(UIComponent component) {
-            super(component);
-        }
-
-    } // END TestSystemEvent3
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/TestApplicationFactoryImpl.java b/jsf-ri/test/com/sun/faces/application/TestApplicationFactoryImpl.java
deleted file mode 100644
index 45af37c..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestApplicationFactoryImpl.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestApplicationFactoryImpl.java
-
-package com.sun.faces.application;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-
-import com.sun.faces.config.ConfigureListener;
-import javax.faces.application.Application;
-
-/**
- * <B>TestApplicationFactoryImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestApplicationFactoryImpl extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private ApplicationFactoryImpl applicationFactory = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestApplicationFactoryImpl() {
-        super("TestApplicationFactoryImpl");
-    }
-
-
-    public TestApplicationFactoryImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testFactory() {
-        applicationFactory = new ApplicationFactoryImpl();
-
-        ApplicationAssociate.clearInstance(getFacesContext().getExternalContext());
-
-
-        // 1. Verify "getApplication" returns the same Application instance
-        //    if called multiple times.
-        //  
-        Application application1 = applicationFactory.getApplication();
-        Application application2 = applicationFactory.getApplication();
-        assertTrue(application1 == application2);
-
-        // 2. Verify "setApplication" adds instances.. /
-        //    and "getApplication" returns the same instance
-        //
-	ApplicationAssociate.clearInstance(getFacesContext().getExternalContext());
-        Application application3 = new ApplicationImpl();
-        applicationFactory.setApplication(application3);
-        Application application4 = applicationFactory.getApplication();
-        assertTrue(application3 == application4);
-    }
-
-
-    public void testSpecCompliance() {
-        applicationFactory = new ApplicationFactoryImpl();
-	ApplicationAssociate.clearInstance(getFacesContext().getExternalContext());
-
-        assertTrue(null != applicationFactory.getApplication());
-    }
-
-
-    public void testExceptions() {
-        applicationFactory = new ApplicationFactoryImpl();
-
-        // 1. Verify NullPointer exception which occurs when attempting
-        //    to add a null Application
-        //
-        boolean thrown = false;
-        try {
-            applicationFactory.setApplication(null);
-        } catch (NullPointerException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-    }
-
-
-} // end of class TestApplicationFactoryImpl
diff --git a/jsf-ri/test/com/sun/faces/application/TestApplicationImpl.java b/jsf-ri/test/com/sun/faces/application/TestApplicationImpl.java
deleted file mode 100644
index 40d83a1..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestApplicationImpl.java
+++ /dev/null
@@ -1,968 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestApplicationImpl.java
-
-package com.sun.faces.application;
-
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.List;
-import java.util.Date;
-import java.util.ArrayList;
-import java.io.IOException;
-import java.net.URL;
-
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.view.facelets.ResourceResolver;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ResourceDependencies;
-import javax.faces.application.ResourceDependency;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExternalContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.IntegerConverter;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.event.ListenerFor;
-import javax.faces.event.PostAddToViewEvent;
-import javax.faces.event.ComponentSystemEventListener;
-import javax.faces.event.ComponentSystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.ListenersFor;
-import javax.faces.event.PreRenderComponentEvent;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.TestComponent;
-import com.sun.faces.TestForm;
-import com.sun.faces.facelets.FaceletFactory;
-import com.sun.faces.facelets.Facelet;
-import com.sun.faces.facelets.impl.DefaultFaceletFactory;
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.*;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.DisableFaceletJSFViewHandler;
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.cactus.TestingUtil;
-
-/**
- * <B>TestApplicationImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestApplicationImpl extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-    public static final String HANDLED_ACTIONEVENT1 = "handledValueEvent1";
-    public static final String HANDLED_ACTIONEVENT2 = "handledValueEvent2";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private ApplicationImpl application = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestApplicationImpl() {
-        super("TestApplicationImpl");
-    }
-
-
-    public TestApplicationImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void setUp() {
-        super.setUp();
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = (ApplicationImpl) aFactory.getApplication();
-    }
-
-
-    public void testAccessors() {
-
-        assertTrue(application.getELResolver() != null);
-        assertTrue(application.getExpressionFactory() != null);
-        
-        // 1. Verify "getActionListener" returns the same ActionListener
-        //    instance if called multiple times.
-        //
-        ActionListener actionListener1 = new ValidActionListener();
-        application.setActionListener(actionListener1);
-        ActionListener actionListener2 = application.getActionListener();
-        ActionListener actionListener3 = application.getActionListener();
-        assertTrue((actionListener1 == actionListener2) &&
-                   (actionListener1 == actionListener3));
-
-        // 2. Verify "getNavigationHandler" returns the same NavigationHandler
-        //    instance if called multiple times.
-        //
-        NavigationHandler navigationHandler1 = new NavigationHandlerImpl();
-        application.setNavigationHandler(navigationHandler1);
-        NavigationHandler navigationHandler2 = application.getNavigationHandler();
-        NavigationHandler navigationHandler3 = application.getNavigationHandler();
-        assertTrue((navigationHandler1 == navigationHandler2) &&
-                   (navigationHandler1 == navigationHandler3));
-
-        // 3. Verify "getPropertyResolver" returns the same PropertyResolver
-        //    instance if called multiple times.
-        //
-        PropertyResolver propertyResolver1 = application.getPropertyResolver();
-        PropertyResolver propertyResolver2 = application.getPropertyResolver();
-        PropertyResolver propertyResolver3 = application.getPropertyResolver();
-        assertTrue((propertyResolver1 == propertyResolver2) &&
-                   (propertyResolver1 == propertyResolver3));
-
-        // 4. Verify "getVariableResolver" returns the same VariableResolver
-        //    instance if called multiple times.
-        //
-        VariableResolver variableResolver1 = application.getVariableResolver();
-        VariableResolver variableResolver2 = application.getVariableResolver();
-        VariableResolver variableResolver3 = application.getVariableResolver();
-        assertTrue((variableResolver1 == variableResolver2) &&
-                   (variableResolver1 == variableResolver3));
-
-        // 5. Verify "getStateManager" returns the same StateManager
-        //    instance if called multiple times.
-        //
-        StateManager stateManager1 = new StateManagerImpl();
-        application.setStateManager(stateManager1);
-        StateManager stateManager2 = application.getStateManager();
-        StateManager stateManager3 = application.getStateManager();
-        assertTrue((stateManager1 == stateManager2) &&
-                   (stateManager1 == stateManager3));
-    }
-
-
-    public void testExceptions() {
-        boolean thrown;
-
-        // 1. Verify NullPointer exception which occurs when attempting
-        //    to set a null ActionListener
-        //
-        thrown = false;
-        try {
-            application.setActionListener(null);
-        } catch (NullPointerException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        // 3. Verify NullPointer exception which occurs when attempting
-        //    to set a null NavigationHandler
-        //
-        thrown = false;
-        try {
-            application.setNavigationHandler(null);
-        } catch (NullPointerException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        // 4. Verify NPE occurs when attempting to set
-        // a null PropertyResolver
-        thrown = false;
-        try {
-            application.setPropertyResolver(null);
-        } catch (NullPointerException npe) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        // 5. Verify NPE occurs when attempting to set
-        // a null VariableResolver
-        thrown = false;
-        try {
-            application.setVariableResolver(null);
-        } catch (NullPointerException npe) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        // 5. Verify ISE occurs when attempting to set
-        // a VariableResolver after a request has been processed
-        ApplicationAssociate associate =
-             ApplicationAssociate.getInstance(
-                  getFacesContext().getExternalContext());
-        associate.setRequestServiced();
-        thrown = false;
-        try {
-            application.setVariableResolver(application.getVariableResolver());
-        } catch (IllegalStateException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        // 6. Verify ISE occurs when attempting to set
-        // a PropertyResolver after a request has been processed
-        thrown = false;
-        try {
-            application.setPropertyResolver(application.getPropertyResolver());
-        } catch (IllegalStateException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        // 7. Verify NullPointer exception which occurs when attempting
-        //    to get a ValueBinding with a null ref
-        //
-        thrown = false;
-        try {
-            application.createValueBinding(null);
-        } catch (Exception e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        // 8.Verify NullPointerException occurs when attempting to pass a
-        // null VariableResolver
-        //
-        thrown = false;
-        try {
-            application.setVariableResolver(null);
-        } catch (NullPointerException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-       
-        // 9. Verify NullPointer exception which occurs when attempting
-        //    to set a null StateManager
-        //
-        thrown = false;
-        try {
-            application.setStateManager(null);
-        } catch (NullPointerException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("improperexpression");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("improper expression");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("improper\texpression");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("improper\rexpression");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("improper\nexpression");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("#improperexpression");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("#{improperexpression");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertTrue(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("improperexpression}");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("{improperexpression}");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("improperexpression}#");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        } 
-        assertFalse(thrown);
-
-
-        thrown = false;
-        try {
-            application.createValueBinding("#{proper[\"a key\"]}");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        try {
-            application.createValueBinding("#{proper[\"a { } key\"]}");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        try {
-            application.createValueBinding("bean.a{indentifer");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("bean['invalid'");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("bean[[\"invalid\"]].foo");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        thrown = false;
-        try {
-            application.createValueBinding("#{bean[\"[a\"]}");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-
-        try {
-            application.createValueBinding("#{bean[\".a\"]}");
-        } catch (ReferenceSyntaxException e) {
-            thrown = true;
-        }
-        assertFalse(thrown);
-    }
-
-
-    public class InvalidActionListener implements ActionListener {
-
-        public void processAction(ActionEvent event) {
-            System.setProperty(HANDLED_ACTIONEVENT1, HANDLED_ACTIONEVENT1);
-        }
-    }
-
-    public class ValidActionListener implements ActionListener {
-
-        public void processAction(ActionEvent event) {
-            System.setProperty(HANDLED_ACTIONEVENT2, HANDLED_ACTIONEVENT2);
-        }
-    }
-
-    //
-    // Test Config related methods
-    //
-
-    public void testAddComponentPositive() {
-        TestComponent
-            newTestComponent = null,
-            testComponent = new TestComponent();
-
-
-        application.addComponent(testComponent.getComponentType(),
-                                 "com.sun.faces.TestComponent");
-        assertTrue(
-            null !=
-            (newTestComponent =
-             (TestComponent)
-            application.createComponent(testComponent.getComponentType())));
-        assertTrue(newTestComponent != testComponent);
-
-    }
-
-
-    public void testCreateComponentExtension() {
-        application.addComponent(TestForm.COMPONENT_TYPE,
-                                 TestForm.class.getName());
-        UIComponent c = application.createComponent(TestForm.COMPONENT_TYPE);
-        assertTrue(c != null);
-    }
-
-
-    public void testGetComponentWithRefNegative() {
-        ValueBinding valueBinding = null;
-        boolean exceptionThrown = false;
-        UIComponent result = null;
-        getFacesContext().getExternalContext().getSessionMap().put("TAIBean",
-                                                                   this);
-        assertTrue(null != (valueBinding =
-                            application.createValueBinding(
-                                "#{sessionScope.TAIBean}")));
-
-        try {
-            result = application.createComponent(valueBinding, getFacesContext(),
-                                                 "notreached");
-            assertTrue(false);
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-    
-    public void testGetComponentExpressionRefNegative() throws ELException{
-        ValueExpression valueBinding = null;
-        boolean exceptionThrown = false;
-        UIComponent result = null;
-        getFacesContext().getExternalContext().getSessionMap().put("TAIBean",
-                                                                   this);
-        assertTrue(null != (valueBinding =
-                            application.getExpressionFactory().createValueExpression(
-                            getFacesContext().getELContext(), "#{sessionScope.TAIBean}", Object.class)));
-
-        try {
-            result = application.createComponent(valueBinding, getFacesContext(),
-                                                 "notreached");
-            assertTrue(false);
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        
-        // make sure FacesException is thrown when a bogus ValueExpression is
-        // passed to createComponent. JSF RI Issue 162
-        assertTrue(null != (valueBinding =
-                            application.getExpressionFactory().createValueExpression(
-                            getFacesContext().getELContext(), "#{a.b}", Object.class)));
-
-        try {
-            result = application.createComponent(valueBinding, getFacesContext(),
-                                                 "notreached");
-            assertTrue(false);
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-    public void testSetViewHandlerException() throws Exception {
-        // RELEASE_PENDING - FIX.  There seems to be a problem
-        // with the test framework exposing two different applicationassociate
-        // instances.  As such, the flag denoting that a request has
-        // been processed is never flagged and thus this test fails.
-        /*
-        ViewHandler handler = new ViewHandlerImpl();
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        root.setViewId("/view");
-        root.setId("id");
-        root.setLocale(Locale.US);
-        getFacesContext().setViewRoot(root);
-
-        boolean exceptionThrown = false;
-        try {
-            application.setViewHandler(handler);
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(!exceptionThrown);
-
-        try {
-            handler.renderView(getFacesContext(),
-                               getFacesContext().getViewRoot());
-            application.setViewHandler(handler);
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        // and test setting the StateManager too.
-        exceptionThrown = false;
-        try {
-            application.setStateManager(new StateManagerImpl());
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        */
-    }
-
-    // Ensure ApplicationImpl.setDefaultLocale(null) throws NPE
-    public void testSetDefaultLocaleNPE() throws Exception {
-        try {
-            application.setDefaultLocale(null);
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            ; // we're ok
-        }
-    }
-    
-    public void testResourceBundle() throws Exception {
-        ResourceBundle rb = null;
-        UIViewRoot root = new UIViewRoot();
-        root.setLocale(Locale.ENGLISH);
-        getFacesContext().setViewRoot(root);
-       
-        // negative test, non-existant rb
-        rb = application.getResourceBundle(getFacesContext(), "bogusName");
-        
-        assertNull(rb);
-        
-        // basic test, existing rb
-        rb = application.getResourceBundle(getFacesContext(), "testResourceBundle");
-        
-        assertNotNull(rb);
-        
-        String value = rb.getString("value1");
-        assertEquals("Jerry", value);
-        
-        // switch locale to German
-        getFacesContext().getViewRoot().setLocale(Locale.GERMAN);
-        rb = application.getResourceBundle(getFacesContext(), "testResourceBundle");
-        
-        assertNotNull(rb);
-        
-        value = rb.getString("value1");
-        assertEquals("Bernhard", value);
-        
-        // switch to a different rb
-        rb = application.getResourceBundle(getFacesContext(), "testResourceBundle2");
-        
-        assertNotNull(rb);
-        value = rb.getString("label");
-        assertEquals("Abflug", value);
-        
-    }
-    
-    public void testLegacyPropertyResolversWithUnifiedEL() {
-      
-        ValueExpression ve1 = application.getExpressionFactory().
-            createValueExpression(getFacesContext().getELContext(),
-                "#{mixedBean.customPRTest1}", Object.class);
-        Object result = ve1.getValue(getFacesContext().getELContext());     
-        assertTrue(result.equals("TestPropertyResolver"));
-        
-        ValueExpression ve2 = application.getExpressionFactory().
-            createValueExpression(getFacesContext().getELContext(),
-                "#{mixedBean.customPRTest2}", Object.class);
-        result = ve2.getValue(getFacesContext().getELContext());      
-        assertTrue(result.equals("PropertyResolverTestImpl"));
-    }
-    
-    public void testLegacyVariableResolversWithUnifiedEL() {
-      
-        ValueExpression ve1 = application.getExpressionFactory().
-            createValueExpression(getFacesContext().getELContext(),
-                "#{customVRTest1}", Object.class);
-        Object result = ve1.getValue(getFacesContext().getELContext());        
-        assertTrue(result.equals("TestVariableResolver"));
-        
-        ValueExpression ve2 = application.getExpressionFactory().
-            createValueExpression(getFacesContext().getELContext(),
-                "#{customVRTest2}", Object.class);
-        result = ve2.getValue(getFacesContext().getELContext());      
-        assertTrue(result.equals("TestOldVariableResolver"));
-    }
-
-    public void testConverterUpdate() {        
-
-        FacesContext context = getFacesContext();
-        Application app = context.getApplication();
-
-        Converter intConverter = application.createConverter("javax.faces.Integer");
-        Converter intConverter2 = application.createConverter(Integer.TYPE);
-        Converter intConverter3 = application.createConverter(Integer.class);
-
-        assertTrue(IntegerConverter.class.equals(intConverter.getClass())
-             && IntegerConverter.class.equals(intConverter2.getClass())
-             && IntegerConverter.class.equals(intConverter3.getClass()));
-
-        app.addConverter("javax.faces.Integer", CustomIntConverter.class.getName());
-
-        intConverter = application.createConverter("javax.faces.Integer");
-        intConverter2 = application.createConverter(Integer.TYPE);
-        intConverter3 = application.createConverter(Integer.class);
-
-        assertTrue(CustomIntConverter.class.equals(intConverter.getClass())
-             && CustomIntConverter.class.equals(intConverter2.getClass())
-             && CustomIntConverter.class.equals(intConverter3.getClass()));
-
-        app.addConverter(Integer.TYPE, IntegerConverter.class.getName());
-
-        intConverter = application.createConverter("javax.faces.Integer");
-        intConverter2 = application.createConverter(Integer.TYPE);
-        intConverter3 = application.createConverter(Integer.class);
-
-        assertTrue(IntegerConverter.class.equals(intConverter.getClass())
-             && IntegerConverter.class.equals(intConverter2.getClass())
-             && IntegerConverter.class.equals(intConverter3.getClass()));
-
-        app.addConverter(Integer.class, CustomIntConverter.class.getName());
-
-        intConverter = application.createConverter("javax.faces.Integer");
-        intConverter2 = application.createConverter(Integer.TYPE);
-        intConverter3 = application.createConverter(Integer.class);
-
-        assertTrue(CustomIntConverter.class.equals(intConverter.getClass())
-             && CustomIntConverter.class.equals(intConverter2.getClass())
-             && CustomIntConverter.class.equals(intConverter3.getClass()));
-
-        // reset to the standard converter
-        app.addConverter("javax.faces.Integer", IntegerConverter.class.getName());
-    }
-
-
-    public void testComponentAnnotatations() throws Exception {
-
-        Application application = getFacesContext().getApplication();
-        application.addComponent("CustomInput", CustomOutput.class.getName());
-        CustomOutput c = (CustomOutput) application.createComponent("CustomInput");
-        CustomOutput c2 = (CustomOutput) application.createComponent("CustomInput");
-        UIViewRoot root = getFacesContext().getViewRoot();
-        root.getChildren().add(c);
-        root.getChildren().add(c2);
-        assertTrue(c.getEvent() instanceof PostAddToViewEvent);
-        assertTrue(c2.getEvent() instanceof PostAddToViewEvent);
-        List<UIComponent> headComponents = root.getComponentResources(getFacesContext(), "head");
-        System.out.println(headComponents.toString());
-        assertTrue(headComponents.size() == 1);
-        assertTrue(headComponents.get(0) instanceof UIOutput);
-        assertTrue("test".equals(headComponents.get(0).getAttributes().get("library")));
-        List<UIComponent> bodyComponents = root.getComponentResources(getFacesContext(), "body");
-        assertTrue(bodyComponents.size() == 1);
-        assertTrue(bodyComponents.get(0) instanceof UIOutput);
-        assertTrue("test.js".equals(bodyComponents.get(0).getAttributes().get("name")));
-        assertTrue("body".equals(bodyComponents.get(0).getAttributes().get("target")));
-
-        application.addComponent("CustomInput2", CustomOutput2.class.getName());
-        CustomOutput2 c3 = (CustomOutput2) application.createComponent("CustomInput2");
-        root.getChildren().add(c3);
-        assertTrue(c3.getEvent() instanceof PostAddToViewEvent);
-        c3.reset();
-        c3.encodeAll(getFacesContext());
-        assertTrue(c3.getEvent() instanceof PreRenderComponentEvent);
-
-    }
-
-
-    public void testEvaluateExpressionGet() {
-
-        FacesContext ctx = getFacesContext();
-        ExternalContext extCtx = ctx.getExternalContext();
-        Application app = getFacesContext().getApplication();
-
-        extCtx.getRequestMap().put("date", new Date());
-        Date d = app.evaluateExpressionGet(ctx, "#{requestScope.date}", Date.class);
-        assertNotNull(d);
-        extCtx.getRequestMap().put("list", new ArrayList());
-        List l = app.evaluateExpressionGet(ctx, "#{requestScope.list}", List.class);
-        assertNotNull(l);
-        Object o = app.evaluateExpressionGet(ctx, "#{requestScope.list}", Object.class);
-        assertNotNull(o);
-
-    }
-
-
-    public void testDecoratedFaceletFactory() {
-
-        FacesContext ctx = getFacesContext();
-        WebConfiguration webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
-        webConfig.overrideContextInitParameter(FaceletFactory,
-                                               "com.sun.faces.application.TestApplicationImpl$CustomFaceletFactory");
-        ctx.getExternalContext().getApplicationMap().remove("com.sun.faces.ApplicationAssociate");
-        webConfig.overrideContextInitParameter(DisableFaceletJSFViewHandler,
-                                               false);
-        ApplicationImpl impl = new ApplicationImpl();
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
-        assertEquals(CustomFaceletFactory.class.getName(),
-                     CustomFaceletFactory.class.getName(),
-                     associate.getFaceletFactory().getClass().getName());
-        assertEquals(DefaultFaceletFactory.class.getName(),
-                     DefaultFaceletFactory.class.getName(),
-                     ((CustomFaceletFactory) associate.getFaceletFactory()).getDelegate().getClass().getName());
-
-    }
-
-    public void testOverrideFaceletFactory() {
-
-        FacesContext ctx = getFacesContext();
-        WebConfiguration webConfig = WebConfiguration.getInstance(ctx.getExternalContext());
-        webConfig.overrideContextInitParameter(FaceletFactory,
-                                               "com.sun.faces.application.TestApplicationImpl$CustomFaceletFactory2");
-        ctx.getExternalContext().getApplicationMap().remove("com.sun.faces.ApplicationAssociate");
-        webConfig.overrideContextInitParameter(DisableFaceletJSFViewHandler,
-                                               false);
-        ApplicationImpl impl = new ApplicationImpl();
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
-        assertEquals(CustomFaceletFactory2.class.getName(),
-                     CustomFaceletFactory2.class.getName(),
-                     associate.getFaceletFactory().getClass().getName());
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-    
-    public static void clearResourceBundlesFromAssociate(ApplicationImpl application) {
-        ApplicationAssociate associate = (ApplicationAssociate)
-            TestingUtil.invokePrivateMethod("getAssociate",
-                                            RIConstants.EMPTY_CLASS_ARGS,
-                                            RIConstants.EMPTY_METH_ARGS,
-                                            ApplicationImpl.class,
-                                            application);       
-        if (null != associate) {
-            Map resourceBundles = (Map) 
-                TestingUtil.getPrivateField("resourceBundles",
-                                            ApplicationAssociate.class,
-                                            associate);
-            if (null != resourceBundles) {
-                resourceBundles.clear();
-            }
-        }
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-    public static final class CustomFaceletFactory2 extends FaceletFactory {
-        public Facelet getFacelet(String uri) throws IOException {
-            return null;
-        }
-
-        public Facelet getFacelet(URL url) throws IOException {
-            return null;
-        }
-
-        public Facelet getMetadataFacelet(String uri) throws IOException {
-            return null;
-        }
-
-        public Facelet getMetadataFacelet(URL url) throws IOException {
-            return null;
-        }
-
-        public ResourceResolver getResourceResolver() {
-            return null;
-        }
-
-        public long getRefreshPeriod() {
-            return 0;
-        }
-    }
-
-    public static final class CustomFaceletFactory extends FaceletFactory {
-
-        private FaceletFactory delegate;
-
-        public CustomFaceletFactory(FaceletFactory delegate) {
-            this.delegate = delegate;
-        }
-
-        public Facelet getFacelet(String uri) throws IOException {
-            return delegate.getFacelet(uri);
-        }
-
-        public Facelet getFacelet(URL url) throws IOException {
-            return delegate.getFacelet(url);
-        }
-
-        public Facelet getMetadataFacelet(String uri) throws IOException {
-            return delegate.getMetadataFacelet(uri);
-        }
-
-        public Facelet getMetadataFacelet(URL url) throws IOException {
-            return delegate.getMetadataFacelet(url);
-        }
-
-        public ResourceResolver getResourceResolver() {
-            return delegate.getResourceResolver();
-        }
-
-        public long getRefreshPeriod() {
-            return delegate.getRefreshPeriod();
-        }
-
-        public FaceletFactory getDelegate() {
-            return delegate;
-        }
-
-    }
-
-    public static class CustomIntConverter implements Converter {
-
-        private IntegerConverter delegate = new IntegerConverter();
-
-        public Object getAsObject(FacesContext context, UIComponent component, String value) {
-            return delegate.getAsObject(context, component, value);
-        }
-
-        public String getAsString(FacesContext context, UIComponent component, Object value) {
-            return delegate.getAsString(context, component, value);
-        }
-    }
-
-    @ListenerFor(systemEventClass=PostAddToViewEvent.class,
-                 sourceClass= CustomOutput.class)
-    @ResourceDependencies({
-        @ResourceDependency(name="#{'test.js'}",library="test",target="#{'body'}"),
-        @ResourceDependency(name="test.css",library="#{'test'}")
-    })
-    public static final class CustomOutput
-          extends UIOutput
-          implements ComponentSystemEventListener {
-
-        private boolean processEventInvoked;
-        private ComponentSystemEvent event;
-
-        public void processEvent(ComponentSystemEvent event)
-        throws AbortProcessingException {
-            processEventInvoked = true;
-            this.event = event;
-        }
-
-        public void reset() {
-            processEventInvoked = false;
-            event = null;
-        }
-
-        public boolean isProcessEventInvoked() {
-            return processEventInvoked;
-        }
-
-        public ComponentSystemEvent getEvent() {
-            return event;
-        }
-    }
-
-    @ListenersFor({
-        @ListenerFor(systemEventClass = PostAddToViewEvent.class,
-                     sourceClass = CustomOutput.class),
-        @ListenerFor(systemEventClass = PreRenderComponentEvent.class,
-                     sourceClass = CustomOutput.class)
-    })
-    public static final class CustomOutput2
-          extends UIOutput
-          implements ComponentSystemEventListener {
-
-        private boolean processEventInvoked;
-        private ComponentSystemEvent event;
-
-        public void processEvent(ComponentSystemEvent event)
-              throws AbortProcessingException {
-            processEventInvoked = true;
-            this.event = event;
-        }
-
-        public void reset() {
-            processEventInvoked = false;
-            event = null;
-        }
-
-        public boolean isProcessEventInvoked() {
-            return processEventInvoked;
-        }
-
-        public ComponentSystemEvent getEvent() {
-            return event;
-        }
-    }
-
-
-} // end of class TestApplicationImpl
diff --git a/jsf-ri/test/com/sun/faces/application/TestApplicationImpl_Config.java b/jsf-ri/test/com/sun/faces/application/TestApplicationImpl_Config.java
deleted file mode 100644
index 53f4561..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestApplicationImpl_Config.java
+++ /dev/null
@@ -1,609 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestApplicationImpl_Config.java
-
-package com.sun.faces.application;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.TestComponent;
-import com.sun.faces.TestConverter;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.convert.Converter;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-import javax.faces.validator.LengthValidator;
-import javax.faces.validator.Validator;
-
-import java.util.Iterator;
-import java.util.Locale;
-
-/**
- * <B>TestApplicationImpl_Config</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestApplicationImpl_Config extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static String standardComponentTypes[] = {
-        "javax.faces.Column",
-        "javax.faces.Command",
-        "javax.faces.Data",
-        "javax.faces.Form",
-        "javax.faces.Graphic",
-        "javax.faces.Input",
-        "javax.faces.Message",
-        "javax.faces.Messages",
-        "javax.faces.NamingContainer",
-        "javax.faces.Output",
-        "javax.faces.Panel",
-        "javax.faces.Parameter",
-        "javax.faces.SelectBoolean",
-        "javax.faces.SelectItem",
-        "javax.faces.SelectItems",
-        "javax.faces.SelectMany",
-        "javax.faces.SelectOne",
-        "javax.faces.ViewRoot",
-        "javax.faces.HtmlCommandButton",
-        "javax.faces.HtmlCommandLink",
-        "javax.faces.HtmlDataTable",
-        "javax.faces.HtmlForm",
-        "javax.faces.HtmlGraphicImage",
-        "javax.faces.HtmlInputHidden",
-        "javax.faces.HtmlInputSecret",
-        "javax.faces.HtmlInputText",
-        "javax.faces.HtmlInputTextarea",
-        "javax.faces.HtmlMessage",
-        "javax.faces.HtmlMessages",
-        "javax.faces.HtmlOutputFormat",
-        "javax.faces.HtmlOutputLabel",
-        "javax.faces.HtmlOutputLink",
-        "javax.faces.HtmlOutputText",
-        "javax.faces.HtmlPanelGrid",
-        "javax.faces.HtmlPanelGroup",
-        "javax.faces.HtmlSelectBooleanCheckbox",
-        "javax.faces.HtmlSelectManyCheckbox",
-        "javax.faces.HtmlSelectManyListbox",
-        "javax.faces.HtmlSelectManyMenu",
-        "javax.faces.HtmlSelectOneListbox",
-        "javax.faces.HtmlSelectOneMenu",
-        "javax.faces.HtmlSelectOneRadio"
-    };
-
-    public static Class standardComponentClasses[] = {
-        javax.faces.component.UIColumn.class,
-        javax.faces.component.UICommand.class,
-        javax.faces.component.UIData.class,
-        javax.faces.component.UIForm.class,
-        javax.faces.component.UIGraphic.class,
-        javax.faces.component.UIInput.class,
-        javax.faces.component.UIMessage.class,
-        javax.faces.component.UIMessages.class,
-        javax.faces.component.UINamingContainer.class,
-        javax.faces.component.UIOutput.class,
-        javax.faces.component.UIPanel.class,
-        javax.faces.component.UIParameter.class,
-        javax.faces.component.UISelectBoolean.class,
-        javax.faces.component.UISelectItem.class,
-        javax.faces.component.UISelectItems.class,
-        javax.faces.component.UISelectMany.class,
-        javax.faces.component.UISelectOne.class,
-        javax.faces.component.UIViewRoot.class,
-        javax.faces.component.html.HtmlCommandButton.class,
-        javax.faces.component.html.HtmlCommandLink.class,
-        javax.faces.component.html.HtmlDataTable.class,
-        javax.faces.component.html.HtmlForm.class,
-        javax.faces.component.html.HtmlGraphicImage.class,
-        javax.faces.component.html.HtmlInputHidden.class,
-        javax.faces.component.html.HtmlInputSecret.class,
-        javax.faces.component.html.HtmlInputText.class,
-        javax.faces.component.html.HtmlInputTextarea.class,
-        javax.faces.component.html.HtmlMessage.class,
-        javax.faces.component.html.HtmlMessages.class,
-        javax.faces.component.html.HtmlOutputFormat.class,
-        javax.faces.component.html.HtmlOutputLabel.class,
-        javax.faces.component.html.HtmlOutputLink.class,
-        javax.faces.component.html.HtmlOutputText.class,
-        javax.faces.component.html.HtmlPanelGrid.class,
-        javax.faces.component.html.HtmlPanelGroup.class,
-        javax.faces.component.html.HtmlSelectBooleanCheckbox.class,
-        javax.faces.component.html.HtmlSelectManyCheckbox.class,
-        javax.faces.component.html.HtmlSelectManyListbox.class,
-        javax.faces.component.html.HtmlSelectManyMenu.class,
-        javax.faces.component.html.HtmlSelectOneListbox.class,
-        javax.faces.component.html.HtmlSelectOneMenu.class,
-        javax.faces.component.html.HtmlSelectOneRadio.class
-    };
-
-    public static String standardConverterIds[] = {
-        "javax.faces.BigDecimal",
-        "javax.faces.BigInteger",
-        "javax.faces.Boolean",
-        "javax.faces.Byte",
-        "javax.faces.Character",
-        "javax.faces.DateTime",
-        "javax.faces.Double",
-        "javax.faces.Float",
-        "javax.faces.Integer",
-        "javax.faces.Long",
-        "javax.faces.Number",
-        "javax.faces.Short"
-    };
-    public static Class standardConverterClasses[] = {
-        javax.faces.convert.BigDecimalConverter.class,
-        javax.faces.convert.BigIntegerConverter.class,
-        javax.faces.convert.BooleanConverter.class,
-        javax.faces.convert.ByteConverter.class,
-        javax.faces.convert.CharacterConverter.class,
-        javax.faces.convert.DateTimeConverter.class,
-        javax.faces.convert.DoubleConverter.class,
-        javax.faces.convert.FloatConverter.class,
-        javax.faces.convert.IntegerConverter.class,
-        javax.faces.convert.LongConverter.class,
-        javax.faces.convert.NumberConverter.class,
-        javax.faces.convert.ShortConverter.class
-    };
-
-    public static Class standardConverterByIdClasses[] = {
-        java.math.BigDecimal.class,
-        java.math.BigInteger.class,
-        java.lang.Boolean.class,
-        java.lang.Byte.class,
-        java.lang.Character.class,
-        null,
-        java.lang.Double.class,
-        java.lang.Float.class,
-        java.lang.Integer.class,
-        java.lang.Long.class,
-        null,
-        java.lang.Short.class
-    };
-
-    public static Class standardConverterPrimitiveClasses[] = {
-        null,
-        null,
-        java.lang.Boolean.TYPE,
-        java.lang.Byte.TYPE,
-        java.lang.Character.TYPE,
-        null,
-        java.lang.Double.TYPE,
-        java.lang.Float.TYPE,
-        java.lang.Integer.TYPE,
-        java.lang.Long.TYPE,
-        null,
-        java.lang.Short.TYPE
-    };
-
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private ApplicationImpl application = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestApplicationImpl_Config() {
-        super("TestApplicationImpl_Config");
-    }
-
-
-    public TestApplicationImpl_Config(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void setUp() {
-        super.setUp();
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = (ApplicationImpl) aFactory.getApplication();
-    }
-	
-    //****
-    //**** NOTE: We should add a test for finding a faces-config.xml file under 
-    //****       WEB-INF/classes/META-INF.
-    //****
-
-    //
-    // Test Config related methods
-    //
-
-    public void testComponentPositive() {
-        TestComponent
-            newTestComponent = null,
-            testComponent = new TestComponent();
-        UIComponent uic = null;
-
-        // runtime addition
-
-        application.addComponent(testComponent.getComponentType(),
-                                 "com.sun.faces.TestComponent");
-        assertTrue(
-            null !=
-            (newTestComponent =
-             (TestComponent)
-            application.createComponent(testComponent.getComponentType())));
-        assertTrue(newTestComponent != testComponent);
-
-        // built-in components
-        for (int i = 0, len = standardComponentTypes.length; i < len; i++) {
-            assertTrue(null != (uic =
-                                application.createComponent(
-                                    standardComponentTypes[i])));
-            assertTrue(
-                standardComponentClasses[i].isAssignableFrom(uic.getClass()));
-        }
-    }
-
-
-    public void testComponentNegative() {
-        boolean exceptionThrown = false;
-
-        // componentType/componentClass with non-existent class
-        try {
-            application.addComponent("William",
-                                     "BillyBoy");
-            application.createComponent("William");
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        // non-existent mapping
-        exceptionThrown = false;
-        try {
-            application.createComponent("Joebob");
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-
-
-    public void testGetComponentTypes() {
-        Iterator iter = application.getComponentTypes();
-        assertTrue(null != iter);
-
-        assertTrue(isSubset(standardComponentTypes, iter));
-    }
-
-
-    public void testConverterPositive() {
-        TestConverter
-            newTestConverter = null,
-            testConverter = new TestConverter();
-        Converter conv = null;
-
-        // runtime addition
-
-        application.addConverter(testConverter.getConverterId(),
-                                 "com.sun.faces.TestConverter");
-        assertTrue(
-            null !=
-            (newTestConverter =
-             (TestConverter)
-            application.createConverter(testConverter.getConverterId())));
-        assertTrue(newTestConverter != testConverter);
-
-        // built-in components
-
-        // by-id
-        for (int i = 0, len = standardConverterIds.length; i < len; i++) {
-            assertTrue(null != (conv =
-                                application.createConverter(
-                                    standardConverterIds[i])));
-            assertTrue(
-                standardConverterClasses[i].isAssignableFrom(conv.getClass()));
-        }
-
-        // by-class
-        for (int i = 0, len = standardConverterByIdClasses.length; i < len; i++) {
-            // skip entries for which by-class registation doesn't make sense.
-            if (null == standardConverterByIdClasses[i]) {
-                continue;
-            }
-            assertTrue("null != " + standardConverterByIdClasses[i].toString(),
-                       null !=
-                       (conv =
-                        application.createConverter(
-                            standardConverterByIdClasses[i])));
-            assertTrue(
-                standardConverterClasses[i].isAssignableFrom(conv.getClass()));
-        }
-
-        // primitive classes
-        for (int i = 0, len = standardConverterPrimitiveClasses.length; i <
-            len; i++) {
-            if (null == standardConverterPrimitiveClasses[i]) {
-                continue;
-            }
-
-            assertTrue(
-                "null != " + standardConverterPrimitiveClasses[i].toString(),
-                null !=
-                (conv =
-                 application.createConverter(
-                     standardConverterPrimitiveClasses[i])));
-            assertTrue(
-                standardConverterClasses[i].isAssignableFrom(conv.getClass()));
-        }
-    }
-
-
-    public void testConverterNegative() {
-        boolean exceptionThrown = false;
-
-        // componentType/componentClass with non-existent class
-        try {
-            application.addConverter("William",
-                                     "BillyBoy");
-            application.createConverter("William");
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        // non-existent mapping
-        exceptionThrown = false;
-        try {
-            application.createConverter("Joebob");
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-
-
-    public void testGetConverterIds() {
-        Iterator iter = application.getConverterIds();
-        assertTrue(null != iter);
-
-        assertTrue(isSubset(standardConverterIds, iter));
-    }
-
-
-    public void testValidatorPositive() {
-        Validator
-            newTestValidator = null,
-            testValidator = new LengthValidator();
-        Validator val = null;
-
-        // runtime addition
-
-        application.addValidator("Billybob",
-                                 "javax.faces.validator.LengthValidator");
-        assertTrue(null != (newTestValidator =
-            application.createValidator("Billybob")));
-        assertTrue(newTestValidator != testValidator);
-
-        // test standard components
-        assertTrue(
-            null !=
-            (val = application.createValidator("javax.faces.DoubleRange")));
-        assertTrue(val instanceof Validator);
-        assertTrue(
-            null != (val = application.createValidator("javax.faces.Length")));
-        assertTrue(val instanceof Validator);
-        assertTrue(
-            null !=
-            (val = application.createValidator("javax.faces.LongRange")));
-        assertTrue(val instanceof Validator);
-
-    }
-
-
-    public void testValidatorNegative() {
-        boolean exceptionThrown = false;
-
-        // componentType/componentClass with non-existent class
-        try {
-            application.addValidator("William",
-                                     "BillyBoy");
-            application.createValidator("William");
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        // non-existent mapping
-        exceptionThrown = false;
-        try {
-            application.createValidator("Joebob");
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-
-
-    public void testGetValidatorIds() {
-        Iterator iter = application.getValidatorIds();
-        assertTrue(null != iter);
-        String standardValidatorIds[] = {
-            "javax.faces.DoubleRange",
-            "javax.faces.Length",
-            "javax.faces.LongRange"
-        };
-
-        assertTrue(isSubset(standardValidatorIds, iter));
-    }
-
-
-    public void testUpdateRuntimeComponents() {
-        loadFromInitParam("/runtime-components.xml");
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = (ApplicationImpl) aFactory.getApplication();
-
-        ActionListener actionListener = null;
-        NavigationHandler navHandler = null;
-        PropertyResolver propResolver = null;
-        VariableResolver varResolver = null;
-        ViewHandler viewHandler = null;
-        StateManager stateManager = null;
-
-        assertTrue(null != (actionListener =
-                            application.getActionListener()));
-        assertTrue(actionListener instanceof com.sun.faces.TestActionListener);
-
-        assertTrue(null != (navHandler =
-                            application.getNavigationHandler()));
-        assertTrue(navHandler instanceof com.sun.faces.TestNavigationHandler);
-
-        // JSF1.2 BI: application.getPropertyResolver() no longer returns the 
-        // head of the PropertyResolver. Instead returns the head of the 
-        // ELResolver stack wrapped in a PropertyResolver.This also applies to
-        // VariableResolver
-        assertTrue(null != (propResolver =
-                            application.getPropertyResolver()));
-        assertTrue(
-            application.getPropertyResolver() instanceof javax.faces.el.PropertyResolver);
-        assertTrue(null != (varResolver =
-                            application.getVariableResolver()));
-        assertTrue(varResolver instanceof javax.faces.el.VariableResolver);
-
-        assertTrue(null != (viewHandler =
-                            application.getViewHandler()));
-        assertTrue(viewHandler instanceof javax.faces.application.ViewHandler);
-
-        assertTrue(null != (stateManager =
-                            application.getStateManager()));
-        assertTrue(
-            stateManager instanceof javax.faces.application.StateManager);
-        System.out.println("DEFAULT:" + application.getDefaultRenderKitId());
-        assertEquals("WackyRenderKit", application.getDefaultRenderKitId());
-    }
-
-
-    public void testLocaleConfigPositive() {
-        loadFromInitParam("/locale-config.xml");
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = (ApplicationImpl) aFactory.getApplication();
-
-        Locale locale;
-
-        assertNotNull("Can't get default locale from Application",
-                      locale = application.getDefaultLocale());
-        assertEquals(Locale.US, locale);
-
-        Iterator iter;
-        int j = 0, len = 0;
-        boolean found = false;
-        String[][] expected = {
-            {"de", "DE"},
-            {"en", "US"},
-            {"fr", "FR"},
-            {"ps", "PS"}
-        };
-        len = expected.length;
-
-        iter = application.getSupportedLocales();
-        System.out.println("actual supported locales: ");
-        while (iter.hasNext()) {
-            System.out.println(iter.next().toString());
-        }
-
-
-        // test that the supported locales are a superset of the
-        // expected locales
-        for (j = 0; j < len; j++) {
-            assertNotNull("Can't get supportedLocales from Application",
-                          iter = application.getSupportedLocales());
-            found = false;
-            while (iter.hasNext()) {
-                locale = (Locale) iter.next();
-                if (expected[j][0].equals(locale.getLanguage()) &&
-                    expected[j][1].equals(locale.getCountry())) {
-                    found = true;
-                }
-            }
-            assertTrue("Can't find expected locale " + expected[j][0] + "_" +
-                       expected[j][1] + " in supported-locales list",
-                       found);
-        }
-
-    }
-
-
-    public void testLocaleConfigNegative2() {
-        boolean exceptionThrown = false;
-        try {
-            loadFromInitParam("/locale-config2.xml");
-        } catch (FacesException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-
-
-} // end of class TestApplicationImpl_Config
diff --git a/jsf-ri/test/com/sun/faces/application/TestFacesMessage.java b/jsf-ri/test/com/sun/faces/application/TestFacesMessage.java
deleted file mode 100644
index f37474f..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestFacesMessage.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestFacesMessage.java
-
-package com.sun.faces.application;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-
-import java.io.*;
-
-import javax.faces.application.FacesMessage;
-
-
-/**
- *
- *  <B>TestFacesMessage</B> is a class ...
- *
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-/**
- * This class tests the <code>FacesMessage</code> class
- * functionality.  It uses the xml configuration file:
- * <code>web/test/WEB-INF/faces-navigation.xml</code>.
- */
-public class TestFacesMessage extends ServletFacesTestCase {
-    
-//
-// Protected Constants
-//
-    
-//
-// Class Variables
-//
-    
-//
-// Instance Variables
-//
-    
-// Attribute Instance Variables
-    
-// Relationship Instance Variables
-    
-//
-// Constructors and Initializers
-//
-    
-    public TestFacesMessage() {
-        super("TestFacesMessage");
-    }
-    
-    
-    public TestFacesMessage(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-    
-//
-// Methods from TestCase
-//
-    
-//
-// General Methods
-//
-    
-    public void testSerializeable() {
-        FacesMessage message = null;
-        
-        // Case 0 (nothing)
-        message = new FacesMessage();
-        persistAndCheck(message);
-
-        // Case 1 (summary)
-        message = new FacesMessage("This is a bad error.");
-        persistAndCheck(message);
-        
-        // Case 2 (summary & detail)
-        message = new FacesMessage("This is a bad error.", "This is a really bad error.");
-        persistAndCheck(message);
-        
-        // Case 3 (severity, summary & detail)
-        message = new FacesMessage(FacesMessage.SEVERITY_FATAL, "This is a bad error.",
-                "This is a really bad error.");
-        persistAndCheck(message);
-    }
-    
-    private void persistAndCheck(FacesMessage message) {
-        FacesMessage message1 = null;
-        String mSummary, mSummary1 = null;
-        String mDetail, mDetail1 = null;
-        String severity, severity1 = null;
-        ByteArrayOutputStream bos = null;
-        ByteArrayInputStream bis = null;
-        
-        mSummary = message.getSummary();
-        mDetail = message.getDetail();
-        severity = message.getSeverity().toString();
-        
-        try {
-            bos = new ByteArrayOutputStream();
-            ObjectOutputStream oos = new ObjectOutputStream(bos);
-            oos.writeObject(message);
-            oos.close();
-            byte[] bytes = bos.toByteArray();
-            InputStream in = new ByteArrayInputStream(bytes);
-            ObjectInputStream ois = new ObjectInputStream(in);
-            message1 = (FacesMessage)ois.readObject();
-            ois.close();
-            mSummary1 = message1.getSummary();
-            mDetail1 = message1.getDetail();
-            severity1 = message1.getSeverity().toString();
-            if (null != mSummary1) {
-                assertTrue(mSummary1.equals(mSummary));
-            } else {
-                assertTrue(mSummary == null);
-            }
-            if (null != mDetail1) {
-                assertTrue(mDetail1.equals(mDetail));
-            } else {
-                assertTrue(mDetail == null);
-            }
-            if (null != severity1) {
-                assertTrue(severity1.equals(severity));
-            } else {
-                assertTrue(severity == null);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            assertTrue(false);
-        } 
-    }
-    
-} // end of class TestFacesMessage
-
diff --git a/jsf-ri/test/com/sun/faces/application/TestHASDeprStateManagerImpl.java b/jsf-ri/test/com/sun/faces/application/TestHASDeprStateManagerImpl.java
deleted file mode 100644
index a1b44ff..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestHASDeprStateManagerImpl.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import org.apache.cactus.WebRequest;
-import org.apache.cactus.server.ServletConfigWrapper;
-import com.sun.faces.RIConstants;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-
-import javax.faces.FacesException;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.application.StateManager.SerializedView;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIGraphic;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIPanel;
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKitFactory;
-import javax.servlet.http.HttpSession;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Locale;
-
-
-/**
- * This class tests the <code>StateManagerImpl</code> class with deprecated
- * methods only - does not contain any of the replacement methods (such
- * as saveView).
- */
-public class TestHASDeprStateManagerImpl extends ServletFacesTestCase {
-
-    public static final String TEST_URI = "/greeting.jsp";
-                                                                                                                      
-    public String getExpectedOutputFilename() {
-        return "TestViewHandlerImpl_correct";
-    }
-                                                                                                                      
-                                                                                                                      
-    public static final String ignore[] = {
-    };
-                                                                                                                      
-    public String[] getLinesToIgnore() {
-        return ignore;
-    }
-
-    public boolean sendResponseToFile() {
-        return true;
-    }
-
-    //
-    // Constructors/Initializers
-    //
-    public TestHASDeprStateManagerImpl() {
-        super("TestHASDeprStateManagerImpl");
-    }
-
-
-    public TestHASDeprStateManagerImpl(String name) {
-        super(name);
-    }
-    
-    private Application application = null;
-    
-    public void setUp() {
-        super.setUp();
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = (ApplicationImpl) aFactory.getApplication();
-        application.setViewHandler(new ViewHandlerImpl());
-        application.setStateManager(new DeprStateManagerImpl());
-    }
-    
-    //
-    // Test Methods
-    //
-    
-    public void beginRender(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-    }
-
-    public void testRender() {
-        UIViewRoot newView = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), TEST_URI);
-        newView.setLocale(Locale.US);
-        getFacesContext().setViewRoot(newView);
-                                                                                                                      
-        try {
-            ViewHandler viewHandler =
-                Util.getViewHandler(getFacesContext());
-            viewHandler.renderView(getFacesContext(),
-                                   getFacesContext().getViewRoot());
-        } catch (IOException e) {
-            System.out.println("ViewHandler IOException:" + e);
-        } catch (FacesException fe) {
-            System.out.println("ViewHandler FacesException: " + fe);
-        }
-                                                                                                                      
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-                                                                                                                      
-        assertTrue(verifyExpectedOutput());
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/application/TestHAStateManagerImpl.java b/jsf-ri/test/com/sun/faces/application/TestHAStateManagerImpl.java
deleted file mode 100644
index 7272b2f..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestHAStateManagerImpl.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import org.apache.cactus.server.ServletConfigWrapper;
-import com.sun.faces.RIConstants;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIGraphic;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIPanel;
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKitFactory;
-import javax.servlet.http.HttpSession;
-import javax.faces.application.StateManager.SerializedView;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import java.util.ArrayList;
-
-
-/**
- * This class tests the <code>StateManagerImpl</code> class
- * functionality.
- */
-public class TestHAStateManagerImpl extends ServletFacesTestCase {
-
-     public static final String TEST_URI = "/test.jsp";
-    //
-    // Constructors/Initializers
-    //
-    public TestHAStateManagerImpl() {
-        super("TestStateManagerImpl");
-    }
-
-
-    public TestHAStateManagerImpl(String name) {
-        super(name);
-    }
-    
-    private Application application = null;
-    
-    public void setUp() {
-        super.setUp();
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = (ApplicationImpl) aFactory.getApplication();
-        application.setViewHandler(new ViewHandlerImpl());
-        application.setStateManager(new StateManagerImpl());
-    }
-    
-    //
-    // Test Methods
-    //
-    
-    
-    public void testHighAvailabilityStateSaving1() {
-       
-        // precreate tree and set it in session and make sure the tree is
-        // restored from session.
-        UIViewRoot root = application.getViewHandler().createView(getFacesContext(), null);
-        root.setViewId(TEST_URI);
-
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-
-        userName.setId("userName");
-        userName.setTransient(true);
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-
-        UIPanel panel1 = new UIPanel();
-        panel1.setId("panel1");
-        basicForm.getChildren().add(panel1);
-
-        UIInput userName1 = new UIInput();
-        userName1.setId("userName1");
-        panel1.getChildren().add(userName1);
-
-        getFacesContext().setViewRoot(root);
-
-        StateManager stateManager =
-            getFacesContext().getApplication().getStateManager();
-        stateManager.saveSerializedView(getFacesContext());
-
-        // make sure that the value of viewId attribute in session is an
-        // instance of SerializedView.
-        Object result = session.getAttribute(TEST_URI);
-        assertTrue(result instanceof SerializedView);
-        
-        root = stateManager.restoreView(getFacesContext(), TEST_URI,
-                                 RenderKitFactory.HTML_BASIC_RENDER_KIT);
-       
-        assertTrue(root != null);
-        basicForm = (UIForm) root.findComponent("basicForm");
-        assertTrue(basicForm != null);
-
-        userName = (UIInput) basicForm.findComponent("userName");
-        assertTrue(userName == null);
-
-        panel1 = (UIPanel) basicForm.findComponent("panel1");
-        assertTrue(panel1 != null);
-
-        userName1 = (UIInput) panel1.findComponent("userName1");
-        assertTrue(userName1 != null);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/TestInjection.java b/jsf-ri/test/com/sun/faces/application/TestInjection.java
deleted file mode 100644
index 7b0b11a..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestInjection.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.faces.FactoryFinder;
-import javax.faces.application.ApplicationFactory;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.spi.InjectionProvider;
-
-public class TestInjection extends ServletFacesTestCase {
-
-    public TestInjection() {
-        super("TestInjection");
-    }
-
-
-    public TestInjection(String name) {
-        super(name);
-    }
-
-
-    public void setUp() {
-        super.setUp();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-    /**
-     * Validate PostConstruct/PreDestroy annotations are property
-     * invoked on protected, package private, and private methods.
-     * @throws Exception if an error occurs
-     */
-    public void testInjection() throws Exception {
-        ProtectedBean protectedBean = new ProtectedBean();
-        PackagePrivateBean packagePrivateBean = new PackagePrivateBean();
-        PrivateBean privateBean = new PrivateBean();
-        ConcreteBean concreteBean = new ConcreteBean();
-
-        ApplicationFactory aFactory =
-              (ApplicationFactory) FactoryFinder.getFactory(
-                    FactoryFinder.APPLICATION_FACTORY);
-        aFactory.getApplication(); // bootstraps the ApplicationAssociate    
-        ApplicationAssociate associate = ApplicationAssociate
-              .getInstance(getFacesContext().getExternalContext());        
-        assertNotNull(associate);       
-        
-        InjectionProvider injectionProvider = associate.getInjectionProvider();
-        assertNotNull(injectionProvider);
-        try {
-            injectionProvider.inject(protectedBean);
-            injectionProvider.invokePostConstruct(protectedBean);
-            injectionProvider.invokePreDestroy(protectedBean);
-            injectionProvider.inject(packagePrivateBean);
-            injectionProvider.invokePostConstruct(packagePrivateBean);
-            injectionProvider.invokePreDestroy(packagePrivateBean);
-            injectionProvider.inject(privateBean);
-            injectionProvider.invokePostConstruct(privateBean);
-            injectionProvider.invokePreDestroy(privateBean);
-            injectionProvider.inject(concreteBean);
-            injectionProvider.invokePostConstruct(concreteBean);
-            injectionProvider.invokePreDestroy(concreteBean);
-        } catch (Exception e) {
-            System.out.println(e);
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        
-        assertTrue(protectedBean.getInit());
-        assertTrue(protectedBean.getDestroy());
-        assertTrue(packagePrivateBean.getInit());
-        assertTrue(packagePrivateBean.getDestroy());
-        assertTrue(privateBean.getInit());
-        assertTrue(privateBean.getDestroy());
-        assertTrue(concreteBean.getInit());
-        assertTrue(concreteBean.getDestroy());
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-    private static class ProtectedBean {
-
-        private boolean initCalled;
-        private boolean destroyCalled;
-
-        @PostConstruct void init() {
-            initCalled = true;
-        }
-
-        @PreDestroy void destroy() {
-            destroyCalled = true;
-        }
-
-        public boolean getInit() {
-            return initCalled;
-        }
-
-        public boolean getDestroy() {
-            return destroyCalled;
-        }
-
-    } // END ProtectedBean
-    
-    private static class PackagePrivateBean {
-
-        private boolean initCalled;
-        private boolean destroyCalled;
-
-        @PostConstruct void init() {
-            initCalled = true;
-        }
-
-        @PreDestroy void destroy() {
-            destroyCalled = true;
-        }
-
-        public boolean getInit() {
-            return initCalled;
-        }
-
-        public boolean getDestroy() {
-            return destroyCalled;
-        }
-
-    } // END PackagePrivateBean
-    
-    private static class PrivateBean {
-
-        private boolean initCalled;
-        private boolean destroyCalled;
-
-        @PostConstruct void init() {
-            initCalled = true;
-        }
-
-        @PreDestroy void destroy() {
-            destroyCalled = true;
-        }
-
-        public boolean getInit() {
-            return initCalled;
-        }
-
-        public boolean getDestroy() {
-            return destroyCalled;
-        }
-
-    } // END PrivateBean
-    
-    private static abstract class BaseBean {
-        
-        protected boolean initCalled;
-        protected boolean destroyCalled;
-        
-        @PostConstruct void init() {
-            initCalled = true;
-        }
-    }
-    
-    private static class ConcreteBean extends BaseBean {
-        
-        @PreDestroy void destroy() {
-            destroyCalled = true;
-        }
-        
-        public boolean getInit() {
-            return initCalled;
-        }
-
-        public boolean getDestroy() {
-            return destroyCalled;
-        }
-    }
-
-} // END TestInjection
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/application/TestJSF2NavigationHandler.java b/jsf-ri/test/com/sun/faces/application/TestJSF2NavigationHandler.java
deleted file mode 100644
index ff9024e..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestJSF2NavigationHandler.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestNavigationHandler.java
-
-package com.sun.faces.application;
-
-import javax.faces.application.NavigationCase;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import com.sun.faces.config.DbfFactory;
-
-import javax.faces.FactoryFinder;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PreDestroyViewMapEvent;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.NavigationHandler;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import java.util.*;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * This class test the <code>NavigationHandlerImpl</code> functionality.
- * It uses two xml files:
- * 1) faces-navigation.xml --> contains the navigation cases themselves.
- * 2) navigation-cases.xml --> contains the test cases including expected
- * view identifier outcomes for this test to validate against.
- * Both files exist under <code>web/test/WEB-INF</code>.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestJSF2NavigationHandler extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private List testResultList = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestJSF2NavigationHandler() {
-        super("TestJSF2NavigationHandler");
-    }
-
-
-    public TestJSF2NavigationHandler(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-    public void setUp() {
-        super.setUp();
-        loadConfigFile();
-    }
-
-//
-// General Methods
-//
-    private void loadConfigFile() {
-        loadFromInitParam("/WEB-INF/faces-navigation-2.xml");
-    }
-
-
-    private void loadTestResultList() throws Exception {
-
-        DocumentBuilderFactory f = DbfFactory.getFactory();
-        f.setNamespaceAware(false);
-        f.setValidating(false);
-        DocumentBuilder builder = f.newDocumentBuilder();
-
-        Document d = builder.parse(config.getServletContext().getResourceAsStream("/WEB-INF/navigation-cases-2.xml"));
-        NodeList navigationRules = d.getDocumentElement()
-              .getElementsByTagName("test");
-        for (int i = 0; i < navigationRules.getLength(); i++) {
-            Node test = navigationRules.item(i);
-            NamedNodeMap attributes = test.getAttributes();
-            Node fromViewId = attributes.getNamedItem("fromViewId");
-            Node fromAction = attributes.getNamedItem("fromAction");
-            Node fromOutput = attributes.getNamedItem("fromOutcome");
-            Node condition = attributes.getNamedItem("if");
-            Node toViewId = attributes.getNamedItem("toViewId");
-            createAndAccrueTestResult(((fromViewId != null) ? fromViewId.getTextContent().trim() : null),
-                                      ((fromAction != null) ? fromAction.getTextContent().trim() : null),
-                                      ((fromOutput != null) ? fromOutput.getTextContent().trim() : null),
-                                      ((condition != null) ? condition.getTextContent().trim() : null),
-                                      ((toViewId != null) ? toViewId.getTextContent().trim() : null));
-        }
-
-    }
-
-
-
-
-    public void createAndAccrueTestResult(String fromViewId, String fromAction,
-                                          String fromOutcome, String condition, String toViewId) {
-        if (testResultList == null) {
-            testResultList = new ArrayList();
-        }
-        TestResult testResult = new TestResult();
-        testResult.fromViewId = fromViewId;
-        testResult.fromAction = fromAction;
-        testResult.fromOutcome = fromOutcome;
-        testResult.condition = condition;
-        testResult.toViewId = toViewId;
-        testResultList.add(testResult);
-    }
-
-
-    public void testNavigationHandler() {
-
-        Application application = getFacesContext().getApplication();
-        ViewMapDestroyedListener listener = new ViewMapDestroyedListener();
-        application.subscribeToEvent(PreDestroyViewMapEvent.class,
-                                     UIViewRoot.class,
-                                     listener);
-        try {
-            loadTestResultList();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        NavigationHandlerImpl navHandler = (NavigationHandlerImpl) application.getNavigationHandler();
-        FacesContext context = getFacesContext();
-
-        String newViewId;
-        UIViewRoot page;
-        boolean gotException = false;
-
-        for (int i = 0; i < testResultList.size(); i++) {
-            TestResult testResult = (TestResult) testResultList.get(i);
-            Boolean conditionResult = null;
-            if (testResult.condition != null) {
-                conditionResult = (Boolean) application.getExpressionFactory()
-                    .createValueExpression(context.getELContext(), testResult.condition, Boolean.class).getValue(context.getELContext());
-            }
-            System.out.println("Testing from-view-id=" + testResult.fromViewId +
-                               " from-action=" + testResult.fromAction +
-                               " from-outcome=" + testResult.fromOutcome +
-                               " if=" + testResult.condition);
-            page = Util.getViewHandler(context).createView(context, null);
-            page.setViewId(testResult.fromViewId);
-            page.setLocale(Locale.US);
-            page.getViewMap(); // cause the map to be created
-            context.setViewRoot(page);
-            listener.reset();
-            try {
-                navHandler.handleNavigation(context, testResult.fromAction,
-                                            testResult.fromOutcome);
-            } catch (Exception e) {
-                // exception is valid only if context or fromoutcome is null.
-                assertTrue(testResult.fromOutcome == null);
-                gotException = true;
-            }
-            if (!gotException) {
-                // test assumption: if the from and to change, it's because the outcome was not-null or a condition was evaluated
-                if (!testResult.fromViewId.equals(testResult.toViewId)
-                    && (testResult.fromOutcome != null || testResult.condition != null)
-                    && (testResult.condition == null || conditionResult != null)) {
-                    assertTrue(listener.getPassedEvent() instanceof PreDestroyViewMapEvent);
-                } else {
-                    assertTrue(!listener.wasProcessEventInvoked());
-                    assertTrue(listener.getPassedEvent() == null);
-                }
-                listener.reset();
-                newViewId = context.getViewRoot().getViewId();
-                if (testResult.fromOutcome == null && testResult.condition == null) {
-                    listener.reset();
-                    System.out.println(
-                        "assertTrue(" + newViewId + ".equals(" +
-                        testResult.fromViewId +
-                        "))");
-                    assertTrue(newViewId.equals(testResult.fromViewId));
-                }
-                // test assumption: if condition is false, we advance to some other view
-                else if (testResult.condition != null && conditionResult == false) {
-                    listener.reset();
-                    System.out.println(
-                        "assertTrue(!" + newViewId + ".equals(" +
-                        testResult.toViewId +
-                        "))");
-                    assertTrue(!newViewId.equals(testResult.toViewId));
-                } else {
-                    listener.reset();
-                    System.out.println(
-                        "assertTrue(" + newViewId + ".equals(" +
-                        testResult.toViewId +
-                        "))");
-                    assertTrue(newViewId.equals(testResult.toViewId));
-                }
-            }
-        }
-        application.unsubscribeFromEvent(PreDestroyViewMapEvent.class,
-                                         UIViewRoot.class,
-                                         listener);
-    }
-
-    class TestResult extends Object {
-
-        public String fromViewId = null;
-        public String fromAction = null;
-        public String fromOutcome = null;
-        public String condition = null;
-        public String toViewId = null;
-    }
-
-    private static final class ViewMapDestroyedListener
-          implements SystemEventListener {
-
-        private SystemEvent event;
-        private boolean processEventInvoked;
-
-        public void processEvent(SystemEvent event)
-        throws AbortProcessingException {
-            this.processEventInvoked = true;
-            this.event = event;
-        }
-
-        public boolean isListenerForSource(Object source) {
-            return (source instanceof UIViewRoot);
-        }
-
-        public SystemEvent getPassedEvent() {
-            return event;
-        }
-
-        public boolean wasProcessEventInvoked() {
-            return processEventInvoked;
-        }
-
-        public void reset() {
-            processEventInvoked = false;
-            event = null;
-        }
-    }
-
-} // end of class TestNavigationHandler
-
diff --git a/jsf-ri/test/com/sun/faces/application/TestNavigationHandler.java b/jsf-ri/test/com/sun/faces/application/TestNavigationHandler.java
deleted file mode 100644
index 2aae651..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestNavigationHandler.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestNavigationHandler.java
-
-package com.sun.faces.application;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import com.sun.faces.config.DbfFactory;
-
-import javax.faces.FactoryFinder;
-import javax.faces.event.SystemEventListener;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PreDestroyViewMapEvent;
-import javax.faces.application.*;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import java.util.*;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * This class test the <code>NavigationHandlerImpl</code> functionality.
- * It uses two xml files:
- * 1) faces-navigation.xml --> contains the navigation cases themselves.
- * 2) navigation-cases.xml --> contains the test cases including expected
- * view identifier outcomes for this test to validate against.
- * Both files exist under <code>web/test/WEB-INF</code>.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestNavigationHandler extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private List testResultList = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestNavigationHandler() {
-        super("TestNavigationHandler");
-    }
-
-
-    public TestNavigationHandler(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-    public void setUp() {
-        super.setUp();
-        loadConfigFile();
-    }
-
-//
-// General Methods
-//
-    private void loadConfigFile() {
-        loadFromInitParam("/WEB-INF/faces-navigation.xml");
-    }
-
-
-    private void loadTestResultList() throws Exception {
-
-        DocumentBuilderFactory f = DbfFactory.getFactory();
-        f.setNamespaceAware(false);
-        f.setValidating(false);
-        DocumentBuilder builder = f.newDocumentBuilder();
-
-        Document d = builder.parse(config.getServletContext().getResourceAsStream("/WEB-INF/navigation-cases.xml"));
-        NodeList navigationRules = d.getDocumentElement()
-              .getElementsByTagName("test");
-        for (int i = 0; i < navigationRules.getLength(); i++) {
-            Node test = navigationRules.item(i);
-            NamedNodeMap attributes = test.getAttributes();
-            Node fromViewId = attributes.getNamedItem("fromViewId");
-            Node fromAction = attributes.getNamedItem("fromAction");
-            Node fromOutput = attributes.getNamedItem("fromOutcome");
-            Node toViewId = attributes.getNamedItem("toViewId");
-            createAndAccrueTestResult(((fromViewId != null) ? fromViewId.getTextContent().trim() : null),
-                                      ((fromAction != null) ? fromAction.getTextContent().trim() : null),
-                                      ((fromOutput != null) ? fromOutput.getTextContent().trim() : null),
-                                      ((toViewId != null) ? toViewId.getTextContent().trim() : null));
-        }
-
-    }
-
-
-
-
-    public void createAndAccrueTestResult(String fromViewId, String fromAction,
-                                          String fromOutcome, String toViewId) {
-        if (testResultList == null) {
-            testResultList = new ArrayList();
-        }
-        TestResult testResult = new TestResult();
-        testResult.fromViewId = fromViewId;
-        testResult.fromAction = fromAction;
-        testResult.fromOutcome = fromOutcome;
-        testResult.toViewId = toViewId;
-        testResultList.add(testResult);
-    }
-
-
-    public void testNavigationHandler() {
-
-        Application application = getFacesContext().getApplication();
-        ViewMapDestroyedListener listener = new ViewMapDestroyedListener();
-        application.subscribeToEvent(PreDestroyViewMapEvent.class,
-                                     UIViewRoot.class,
-                                     listener);
-        try {
-            loadTestResultList();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        NavigationHandlerImpl navHandler = (NavigationHandlerImpl) application.getNavigationHandler();
-        FacesContext context = getFacesContext();
-
-        String newViewId;
-        UIViewRoot page;
-        boolean gotException = false;
-
-        for (int i = 0; i < testResultList.size(); i++) {
-            TestResult testResult = (TestResult) testResultList.get(i);
-            System.out.println("Testing from-view-id=" + testResult.fromViewId +
-                               " from-action=" + testResult.fromAction +
-                               " from-outcome=" + testResult.fromOutcome);
-            page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-            page.setViewId(testResult.fromViewId);
-            page.setLocale(Locale.US);
-            page.getViewMap(); // cause the map to be created
-            context.setViewRoot(page);
-            listener.reset();
-            try {
-                navHandler.handleNavigation(context, testResult.fromAction,
-                                            testResult.fromOutcome);
-            } catch (Exception e) {
-                // exception is valid only if context or fromoutcome is null.
-                assertTrue(testResult.fromOutcome == null);
-                gotException = true;
-            }
-            if (!gotException) {
-                if (!testResult.fromViewId.equals(testResult.toViewId)
-                    && testResult.fromOutcome != null) {
-                    assertTrue(listener.getPassedEvent() instanceof PreDestroyViewMapEvent);
-                } else {
-                    assertTrue(!listener.wasProcessEventInvoked());
-                    assertTrue(listener.getPassedEvent() == null);
-                }
-                listener.reset();
-                newViewId = context.getViewRoot().getViewId();
-                if (testResult.fromOutcome == null) {
-                    listener.reset();
-                    System.out.println(
-                        "assertTrue(" + newViewId + ".equals(" +
-                        testResult.fromViewId +
-                        "))");
-                    assertTrue(newViewId.equals(testResult.fromViewId));
-                } else {
-                    listener.reset();
-                    System.out.println(
-                        "assertTrue(" + newViewId + ".equals(" +
-                        testResult.toViewId +
-                        "))");
-                    assertTrue(newViewId.equals(testResult.toViewId));
-                }
-            }
-        }
-        application.unsubscribeFromEvent(PreDestroyViewMapEvent.class,
-                                         UIViewRoot.class,
-                                         listener);
-    }
-
-     public void testSimilarFromViewId() {
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        Application application = aFactory.getApplication();
-        NavigationHandler navHandler = application.getNavigationHandler();
-
-        UIViewRoot root = application.getViewHandler().createView(getFacesContext(), "/dir1/dir2/dir3/test.jsp");
-        root.setLocale(Locale.US);
-        getFacesContext().setViewRoot(root);
-
-        try {
-            navHandler.handleNavigation(getFacesContext(), null, "home");
-        } catch (Exception e) {
-            e.printStackTrace();
-            assert(false);
-        }
-        String newViewId = getFacesContext().getViewRoot().getViewId();
-        assertTrue("newViewId is: " + newViewId, "/dir1/dir2/dir3/home.jsp".equals(newViewId));
-    }
-
-    // This tests that the same <from-view-id> element value existing in a seperate
-    // navigation rule, gets combined with the other rules with the same <from-view-id>.
-    // Specifically, it will to make sure that after loading, there are the correct number of
-    // cases with the common <from-view-id>;
- 
-    public void testSeperateRule() {
-        int cnt = 0;
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        Application application = aFactory.getApplication();
-        assertTrue(application instanceof ApplicationImpl);
-        ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) application.getNavigationHandler();
-        Map caseListMap = handler.getNavigationCases();
-        Iterator iter = caseListMap.keySet().iterator();
-        while (iter.hasNext()) {
-            String fromViewId = (String) iter.next();
-            if (fromViewId.equals("/login.jsp")) {
-                Set<NavigationCase> caseSet = (Set<NavigationCase>) caseListMap.get(fromViewId);
-                for (NavigationCase navCase : caseSet) {
-                    if (navCase.getFromViewId().equals("/login.jsp")) {
-                        cnt++;
-                    }
-                }
-            }
-        }
-        assertTrue(cnt == 6);
-    }
-
-
-    public void testWrappedNavigationHandler() {
-
-        Application app = getFacesContext().getApplication();
-        ConfigurableNavigationHandler impl = new NavigationHandlerImpl();
-        NavigationHandler parent = new WrapperNavigationHandler(impl);
-        parent.handleNavigation(getFacesContext(), "", "");
-
-        int cnt = 0;
-        Map caseListMap = impl.getNavigationCases();
-        Iterator iter = caseListMap.keySet().iterator();
-        while (iter.hasNext()) {
-            String fromViewId = (String) iter.next();
-            if (fromViewId.equals("/login.jsp")) {
-                Set<NavigationCase> caseSet = (Set<NavigationCase>) caseListMap.get(fromViewId);
-                for (NavigationCase navCase : caseSet) {
-                    if (navCase.getFromViewId().equals("/login.jsp")) {
-                        cnt++;
-                    }
-                }
-            }
-        }
-        assertTrue(cnt == 6);
-
-    }
-
-
-    public void testRedirectParameters() {
-        Application app = getFacesContext().getApplication();
-        UIViewRoot root = (UIViewRoot) app.createComponent(UIViewRoot.COMPONENT_TYPE);
-        root.setViewId("/page1.xhtml");
-        getFacesContext().setViewRoot(root);
-        ConfigurableNavigationHandler cnh =
-              (ConfigurableNavigationHandler) getFacesContext().getApplication().getNavigationHandler();
-        NavigationCase c1 = cnh.getNavigationCase(getFacesContext(),
-                                                  null,
-                                                  "redirectOutcome1");
-        Map<String,List<String>> parameters = c1.getParameters();
-        assertNotNull(parameters);
-        assertEquals(2, parameters.size());
-        List<String> fooParams = parameters.get("foo");
-        assertNotNull(fooParams);
-        assertEquals(2, fooParams.size());
-        assertEquals("bar", fooParams.get(0));
-        assertEquals("bar2", fooParams.get(1));
-        List<String> foo2Params = parameters.get("foo2");
-        assertEquals(1, foo2Params.size());
-        assertEquals("bar3", foo2Params.get(0));
-        assertTrue(c1.isIncludeViewParams());
-
-        NavigationCase c2 = cnh.getNavigationCase(getFacesContext(),
-                                                  null,
-                                                  "redirectOutcome2");
-        parameters = c2.getParameters();
-        assertNull(parameters);
-        assertFalse(c2.isIncludeViewParams());
-
-        // ensure implicit navigation outcomes that include query strings
-        // are properly parsed.
-
-        NavigationCase c3 = cnh.getNavigationCase(getFacesContext(),
-                                                  null,
-                                                  "test?foo=rab&foo=rab2&foo2=rab3&faces-redirect=true&includeViewParams=true&");
-        assertNotNull(c3);
-        parameters = c3.getParameters();
-        assertNotNull(parameters);
-        assertTrue(c3.isRedirect());
-        assertTrue(c3.isIncludeViewParams());
-        assertEquals(2, parameters.size());
-        fooParams = parameters.get("foo");
-        assertNotNull(fooParams);
-        assertEquals(2, fooParams.size());
-        assertEquals("rab", fooParams.get(0));
-        assertEquals("rab2", fooParams.get(1));
-        foo2Params = parameters.get("foo2");
-        assertEquals(1, foo2Params.size());
-        assertEquals("rab3", foo2Params.get(0));
-
-        // ensure implicit navigation outcomes that include query strings
-        // separated with & are properly parsed.
-
-        NavigationCase c4 = cnh.getNavigationCase(getFacesContext(),
-                                                  null,
-                                                  "test?foo=rab&foo=rab2&foo2=rab3&faces-redirect=true&includeViewParams=true&");
-        assertNotNull(c4);
-        parameters = c4.getParameters();
-        assertNotNull(parameters);
-        assertTrue(c4.isRedirect());
-        assertTrue(c4.isIncludeViewParams());
-        assertEquals(2, parameters.size());
-        fooParams = parameters.get("foo");
-        assertNotNull(fooParams);
-        assertEquals(2, fooParams.size());
-        assertEquals("rab", fooParams.get(0));
-        assertEquals("rab2", fooParams.get(1));
-        foo2Params = parameters.get("foo2");
-        assertEquals(1, foo2Params.size());
-        assertEquals("rab3", foo2Params.get(0));
-
-        // ensure invalid query string correctly handled
-        NavigationCase c5 = cnh.getNavigationCase(getFacesContext(),
-                                                  null,
-                                                  "test?");
-
-        assertNotNull(c5);
-        assertNull(c5.getParameters());
-        assertFalse(c5.isRedirect());
-        assertFalse(c5.isIncludeViewParams());
-
-        // ensure redirect parameter el evaluation is performed more than once
-        NavigationCase ncase = cnh.getNavigationCase(getFacesContext(),
-                                                     null,
-                                                     "redirectOutcome3");
-        String url = getFacesContext().getExternalContext().encodeRedirectURL("/path.xhtml", ncase.getParameters());
-        System.out.println("URL: " + url);
-        assertTrue(url.contains("param=1"));
-        url = getFacesContext().getExternalContext().encodeRedirectURL("/path.xhtml", ncase.getParameters());
-        assertTrue(url.contains("param=2"));
-        
-    }
-
-    // ---------------------------------------------------------- Nested Classes
-
-    private static final class WrapperNavigationHandler extends NavigationHandler {
-
-        private NavigationHandler delegate;
-
-        public WrapperNavigationHandler(NavigationHandler delegate) {
-            this.delegate = delegate;
-        }
-
-        public void handleNavigation(FacesContext context, String fromAction, String outcome) {
-            delegate.handleNavigation(context, fromAction, outcome);
-        }
-    }
-
-    class TestResult extends Object {
-
-        public String fromViewId = null;
-        public String fromAction = null;
-        public String fromOutcome = null;
-        public String toViewId = null;
-    }
-
-    private static final class ViewMapDestroyedListener
-          implements SystemEventListener {
-
-        private SystemEvent event;
-        private boolean processEventInvoked;
-
-        public void processEvent(SystemEvent event)
-        throws AbortProcessingException {
-            this.processEventInvoked = true;
-            this.event = event;
-        }
-
-        public boolean isListenerForSource(Object source) {
-            return (source instanceof UIViewRoot);
-        }
-
-        public SystemEvent getPassedEvent() {
-            return event;
-        }
-
-        public boolean wasProcessEventInvoked() {
-            return processEventInvoked;
-        }
-
-        public void reset() {
-            processEventInvoked = false;
-            event = null;
-        }
-    }
-
-} // end of class TestNavigationHandler
-
diff --git a/jsf-ri/test/com/sun/faces/application/TestStateManagerImpl.java b/jsf-ri/test/com/sun/faces/application/TestStateManagerImpl.java
deleted file mode 100644
index f8a7ef9..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestStateManagerImpl.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import java.io.StringWriter;
-import java.util.Locale;
-import java.util.Map;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIGraphic;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.application.StateManager;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.cactus.TestingUtil;
-import com.sun.faces.renderkit.ServerSideStateHelper;
-import com.sun.faces.renderkit.RenderKitImpl;
-import com.sun.faces.renderkit.html_basic.HtmlResponseWriter;
-import com.sun.faces.util.Util;
-import com.sun.faces.config.WebConfiguration;
-import static com.sun.faces.config.WebConfiguration.WebContextInitParameter.StateSavingMethod;
-import static com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter.AutoCompleteOffOnViewState;
-import com.sun.faces.context.FacesContextImpl;
-import org.apache.cactus.WebRequest;
-
-
-
-/**
- * This class tests the <code>StateManagerImpl</code> class
- * functionality.
- */
-public class TestStateManagerImpl extends ServletFacesTestCase {
-
-
-    //
-    // Constructors/Initializers
-    //
-    public TestStateManagerImpl() {
-        super("TestStateManagerImpl");
-    }
-
-
-    public TestStateManagerImpl(String name) {
-        super(name);
-    }
-    
-    // ------------------------------------------------------------ Test Methods
-
-
-    
-    // Verify saveSerializedView() throws IllegalStateException
-    // if duplicate component id's are detected on non-transient 
-    // components.
-    public void testDuplicateIdDetection() throws Exception {
-
-        FacesContext context = getFacesContext();
-
-        // construct a view
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(context, null);
-        root.setViewId("/test");
-        root.setId("root");
-        root.setLocale(Locale.US);
-
-        UIComponent comp1 = new UIInput();
-        comp1.setId("comp1");
-
-        UIComponent comp2 = new UIOutput();
-        comp2.setId("comp2");
-
-        UIComponent comp3 = new UIGraphic();
-        comp3.setId("comp3");
-
-        UIComponent facet1 = new UIOutput();
-        facet1.setId("comp4");
-
-        UIComponent facet2 = new UIOutput();
-        facet2.setId("comp2");
-
-        comp2.getFacets().put("facet1", facet1);
-        comp2.getFacets().put("facet2", facet2);
-
-        root.getChildren().add(comp1);
-        root.getChildren().add(comp2);
-        root.getChildren().add(comp3);
-
-        context.setViewRoot(root);
-
-        StateManagerImpl stateManager = (StateManagerImpl) context.getApplication()
-            .getStateManager();
-
-        boolean exceptionThrown = false;
-        try {
-            stateManager.saveView(context);
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        
-        // multiple componentns with a null ID should not
-        // trigger an exception
-        // construct a view
-        root = Util.getViewHandler(getFacesContext()).createView(context, null); 
-        root.setViewId("/test");
-        root.setId("root");
-        root.setLocale(Locale.US);
-
-        comp1 = new UIInput();
-        comp1.setId("comp1");
-
-        comp2 = new UIOutput();
-        comp2.setId(null);
-
-        comp3 = new UIGraphic();
-        comp3.setId(null);
-
-        facet1 = new UIOutput();
-        facet1.setId("comp4");
-
-        facet2 = new UIOutput();
-        facet2.setId("comp2");
-
-        comp2.getFacets().put("facet1", facet1);
-        comp2.getFacets().put("facet2", facet2);
-
-        root.getChildren().add(comp1);
-        root.getChildren().add(comp2);
-        root.getChildren().add(comp3);
-
-        context.setViewRoot(root);
-
-        exceptionThrown = false;
-        try {
-            stateManager.saveView(context);
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(!exceptionThrown);
-        
-        // transient components with duplicate ids should 
-        // trigger an error condition
-        // construct a view
-        root = Util.getViewHandler(getFacesContext()).createView(context, null); 
-        root.setViewId("/test");
-        root.setId("root");
-        root.setLocale(Locale.US);
-
-        comp1 = new UIInput();
-        comp1.setId("comp1");
-        comp1.setTransient(true);
-
-        comp2 = new UIOutput();
-        comp2.setId("comp1");
-        comp2.setTransient(true);
-
-        comp3 = new UIGraphic();
-        comp3.setId("comp3");
-
-        facet1 = new UIOutput();
-        facet1.setId("comp4");
-
-        facet2 = new UIOutput();
-        facet2.setId("comp2");
-
-        comp2.getFacets().put("facet1", facet1);
-        comp2.getFacets().put("facet2", facet2);
-
-        root.getChildren().add(comp1);
-        root.getChildren().add(comp2);
-        root.getChildren().add(comp3);
-
-        context.setViewRoot(root);
-
-        exceptionThrown = false;
-        try {
-            stateManager.saveView(context);
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-
-    
-    public void beginMultiWindowSaveServer(WebRequest theRequest) {
-        theRequest.addParameter("javax.faces.ViewState", "j_id1:j_id2");
-    }
-
-    public void testMultiWindowSaveServer() throws Exception {
-        StateManagerImpl wrapper =
-            new StateManagerImpl() {
-                public boolean isSavingStateInClient(FacesContext context) {
-                    return false;
-                }
-            };
-
-        FacesContext ctx = getFacesContext();
-        ctx.getApplication().setStateManager(wrapper);
-        
-        // construct a view
-        initView(ctx);
-
-        UIViewRoot root = ctx.getViewRoot();
-        root.getAttributes().put("checkThisValue", "checkThisValue");
-        getFacesContext().setResponseWriter(new HtmlResponseWriter(new StringWriter(), "text/html", "UTF-8"));
-        Object viewState = wrapper.saveView(getFacesContext());
-        wrapper.writeState(getFacesContext(), viewState);
-        
-        // See that the Logical View and Actual View maps are correctly created
-        Map sessionMap = ctx.getExternalContext().getSessionMap();
-        assertTrue(sessionMap.containsKey(ServerSideStateHelper.LOGICAL_VIEW_MAP));
-        assertTrue(((Map)sessionMap.get(ServerSideStateHelper.LOGICAL_VIEW_MAP)).containsKey("j_id1"));
-
-        UIViewRoot newRoot = wrapper.restoreView(ctx, "test", "HTML_BASIC");
-        assertNotNull(newRoot);
-        assertEquals(root.getAttributes().get("checkThisValue"),
-                     newRoot.getAttributes().get("checkThisValue"));
-        
-    }
-
-
-    public void testGetViewStateServer() {
-
-        // this exercise ResponseStateManager.getViewState() as well
-        FacesContext ctx = getFacesContext();
-
-        initView(ctx);
-
-        String control = "j_id1:j_id2";
-        String result = ctx.getApplication().getStateManager().getViewState(ctx);
-
-        assertEquals(control, result);
-
-    }
-
-    public void testGetViewStateClient() throws Exception {
-
-        // this exercise ResponseStateManager.getViewState() as well
-        FacesContext ctx = getFacesContext();
-        WebConfiguration webConfig =
-              WebConfiguration.getInstance(ctx.getExternalContext());
-        webConfig.overrideContextInitParameter(StateSavingMethod,
-                                               StateManager.STATE_SAVING_METHOD_CLIENT);
-        webConfig.overrideContextInitParameter(AutoCompleteOffOnViewState, false);
-
-        // recreate the RenderKit so the change is picked up.
-        RenderKit rk = new RenderKitImpl();
-        TestingUtil.setPrivateField("lastRk",
-                                    FacesContextImpl.class,
-                                    ctx,
-                                    rk);
-        TestingUtil.setPrivateField("lastRkId",
-                                    FacesContextImpl.class,
-                                    ctx,
-                                    RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        initView(ctx);
-
-        StringWriter capture = new StringWriter();
-        ResponseWriter writer = new HtmlResponseWriter(capture,
-                                                       "text/html",
-                                                       "UTF-8");
-        ctx.setResponseWriter(writer);
-        StateManager manager = ctx.getApplication().getStateManager();
-        Object state = ctx.getApplication().getStateManager().saveView(ctx);
-        manager.writeState(ctx, state);
-        String rawResult = capture.toString();
-        Pattern p = Pattern.compile("\\bvalue=\"(.+)\"");
-        Matcher m = p.matcher(rawResult);
-        assertTrue(m.find());
-        String control = m.group(1);
-        String result = ctx.getApplication().getStateManager().getViewState(ctx);
-
-        assertEquals(control, result);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void initView(FacesContext ctx) {
-
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(ctx, null);
-        root.setViewId("/test");
-        root.setId("root");
-        root.setLocale(Locale.US);
-
-        UIComponent comp1 = new UIInput();
-        comp1.setId("comp1");
-
-        UIComponent comp2 = new UIOutput();
-        comp2.setId("comp2");
-
-        UIComponent comp3 = new UIGraphic();
-        comp3.setId("comp3");
-
-        UIComponent facet1 = new UIOutput();
-        facet1.setId("comp4");
-
-        comp2.getFacets().put("facet1", facet1);
-
-        root.getChildren().add(comp1);
-        root.getChildren().add(comp2);
-        root.getChildren().add(comp3);
-
-        ctx.setViewRoot(root);
-
-    }
-
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/TestViewHandlerImpl.java b/jsf-ri/test/com/sun/faces/application/TestViewHandlerImpl.java
deleted file mode 100644
index da96823..0000000
--- a/jsf-ri/test/com/sun/faces/application/TestViewHandlerImpl.java
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-// TestViewHandlerImpl.java
-
-
-package com.sun.faces.application;
-
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.event.PhaseId;
-import javax.faces.application.StateManager;
-import javax.faces.application.StateManager.SerializedView;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpSession;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Locale;
-import java.util.Map;
-
-import com.sun.faces.application.view.FaceletViewHandlingStrategy;
-import com.sun.faces.cactus.TestingUtil;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.util.TestUtil;
-import org.apache.cactus.WebRequest;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.context.ExternalContextImpl;
-import com.sun.faces.context.FacesContextImpl;
-import com.sun.faces.renderkit.RenderKitUtils;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-
-
-/**
- * <B>TestViewHandlerImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-
-public class TestViewHandlerImpl extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-
-    public static final String TEST_URI = "/greeting.jsp";
-
-
-    public String getExpectedOutputFilename() {
-        return "TestViewHandlerImpl_correct";
-    }
-
-
-    public static final String ignore[] = {
-    };
-
-    public String[] getLinesToIgnore() {
-        return ignore;
-    }
-
-
-    public boolean sendResponseToFile() {
-        return true;
-    }
-
-
-//
-// Class Variables
-//
-
-
-//
-// Instance Variables
-//
-
-
-// Attribute Instance Variables
-
-
-// Relationship Instance Variables
-
-
-//
-// Constructors and Initializers
-//
-
-
-    public TestViewHandlerImpl() {
-        super("TestViewHandlerImpl");
-    }
-
-
-    public TestViewHandlerImpl(String name) {
-        super(name);
-    }
-
-
-    //
-    // Class methods
-    //
-
-
-    //
-    // General Methods
-    //
-
-
-
-    public void beginRender(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-    }
-
-
-    public void beginRender2(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/somepath/greeting.jsf",
-                          null, null);
-    }
-
-    public void beginTransient(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-	theRequest.addParameter("javax.faces.ViewState", "j_id1:j_id2");
-    }
-
-    public void beginCalculateLocaleLang(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/somepath/greeting.jsf",
-                          null, null);
-        theRequest.addHeader("Accept-Language", "es-ES,tg-AF,tk-IQ,en-US");
-    }
-
-
-    public void beginCalculateLocaleExact(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/somepath/greeting.jsf",
-                          null, null);
-        theRequest.addHeader("Accept-Language", "tg-AF,tk-IQ,ps-PS,en-US");
-    }
-
-
-    public void beginCalculateLocaleLowerCase(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/somepath/greeting.jsf",
-                          null, null);
-        theRequest.addHeader("Accept-Language", "tg-af,tk-iq,ps-ps");
-    }
-
-
-    public void beginCalculateLocaleNoMatch(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/somepath/greeting.jsf",
-                          null, null);
-        theRequest.addHeader("Accept-Language", "es-ES,tg-AF,tk-IQ");
-    }
-
-
-    public void beginCalculateLocaleFindDefault(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/somepath/greeting.jsf",
-                          null, null);
-        theRequest.addHeader("Accept-Language", "en,fr");
-    }
-
-    public void beginRestoreViewNegative(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", null, null);
-    }
-
-    public void testGetActionURL() {
-
-        LifecycleFactory factory = (LifecycleFactory)
-            FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-        Lifecycle lifecycle =
-            factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-
-        // wrap the request so we can control the return value of getServletPath
-        TestRequest testRequest = new TestRequest(request);
-
-        ExternalContext extContext = new ExternalContextImpl(
-            config.getServletContext(),
-            testRequest,
-            response);
-        FacesContext facesContext = new FacesContextImpl(extContext, lifecycle);
-        String contextPath = request.getContextPath();
-
-        ViewHandlerImpl handler = new ViewHandlerImpl();
-
-        // if getServletPath() returns "" then the viewId path returned should
-        // be the same as what was passed, prefixed by the context path.
-        //testRequest.setServletPath("");
-        //testRequest.setAttribute("com.sun.faces.INVOCATION_PATH", null);
-        //String path = handler.getActionURL(facesContext, "/test.jsp");
-        //System.out.println("VIEW ID PATH 1: " + path);
-        //assertEquals(contextPath + "/test.jsp", path);
-
-        // if getServletPath() returns a path prefix, then the viewId path
-        // returned must have that path prefixed.
-        testRequest.setServletPath("/faces");
-        testRequest.setPathInfo("/path/test.jsp");
-        RequestStateManager.remove(facesContext, RequestStateManager.INVOCATION_PATH);
-        String path = handler.getActionURL(facesContext, "/path/test.jsp");
-        System.out.println("VIEW ID PATH 2: " + path);
-        String expected = contextPath + "/faces/path/test.jsp";
-        assertEquals("Expected: " + expected + ", recieved: " + path, expected, path);
-
-
-
-        // if getServletPath() returns a path indicating extension mapping
-        // and the viewId passed has no extension, append the extension
-        // to the provided viewId
-        testRequest.setServletPath("/path/firstRequest.jsf");
-        testRequest.setPathInfo(null);
-        RequestStateManager.remove(facesContext, RequestStateManager.INVOCATION_PATH);
-        path = handler.getActionURL(facesContext, "/path/test");
-        System.out.println("VIEW ID PATH 3: " + path);
-        expected = contextPath + "/path/test";
-        assertEquals("Expected: " + expected + ", recieved: " + path, expected, path);
-
-
-        // if getServletPath() returns a path indicating extension mapping
-        // and the viewId passed has an extension, replace the extension with
-        // the extension defined in the deployment descriptor
-        testRequest.setServletPath("/path/firstRequest.jsf");
-        testRequest.setPathInfo(null);
-        RequestStateManager.remove(facesContext, RequestStateManager.INVOCATION_PATH);
-        path = handler.getActionURL(facesContext, "/path/t.est.jsp");
-        System.out.println("VIEW ID PATH 4: " + path);
-        expected = contextPath + "/path/t.est.jsf";
-        assertEquals("Expected: " + expected + ", recieved: " + path, expected, path);
-
-
-
-        // if path info is null, the impl must check to see if
-        // there is an exact match on the servlet path, if so, return
-        // the servlet path
-        testRequest.setServletPath("/faces");
-        testRequest.setPathInfo(null);
-        RequestStateManager.remove(facesContext, RequestStateManager.INVOCATION_PATH);
-        path = handler.getActionURL(facesContext, "/path/t.est");
-        System.out.println("VIEW ID PATH 5: " + path);
-        expected = contextPath + "/faces/path/t.est";
-        assertEquals("Expected: " + expected + ", recieved: " + path, expected, path);
-
-
-    }
-
-
-    public void testFullAndPartialStateConfiguration() throws Exception {
-
-        WebConfiguration webConfig =
-              WebConfiguration.getInstance();
-        webConfig.overrideContextInitParameter(WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving, true);
-        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
-        ApplicationStateInfo info = new ApplicationStateInfo();
-        TestingUtil.setPrivateField("applicationStateInfo",
-                                    ApplicationAssociate.class,
-                                    associate,
-                                    info);
-        FaceletViewHandlingStrategy strat = new FaceletViewHandlingStrategy();
-        getFacesContext().getViewRoot().setViewId("/index.xhtml");
-        assertNotNull(strat.getStateManagementStrategy(getFacesContext(), "/index.xhmtl"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-        getFacesContext().getViewRoot().setViewId("/index2.xhtml");
-        assertNotNull(strat.getStateManagementStrategy(getFacesContext(), "/index2.xhtml"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-
-        // ---------------------------------------------
-
-        webConfig.overrideContextInitParameter(WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving, false);
-        info = new ApplicationStateInfo();
-        TestingUtil.setPrivateField("applicationStateInfo",
-                                    ApplicationAssociate.class,
-                                    associate,
-                                    info);
-
-        getFacesContext().getViewRoot().setViewId("/index.xhtml");
-        assertNull(strat.getStateManagementStrategy(getFacesContext(), "/index.xhmtl"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-        getFacesContext().getViewRoot().setViewId("/index2.xhtml");
-        assertNull(strat.getStateManagementStrategy(getFacesContext(), "/index2.xhtml"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-
-        // ---------------------------------------------
-
-        webConfig.overrideContextInitParameter(WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving, true);
-        webConfig.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.FullStateSavingViewIds, "/index.xhtml");
-        info = new ApplicationStateInfo();
-        TestingUtil.setPrivateField("applicationStateInfo",
-                                    ApplicationAssociate.class,
-                                    associate,
-                                    info);
-
-        getFacesContext().getViewRoot().setViewId("/index.xhtml");
-        assertNull(strat.getStateManagementStrategy(getFacesContext(), "/index.xhtml"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-
-        getFacesContext().getViewRoot().setViewId("/index2.xhtml");
-        assertNotNull(strat.getStateManagementStrategy(getFacesContext(), "/index2.xhtml"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-
-        // ---------------------------------------------
-
-        webConfig.overrideContextInitParameter(WebConfiguration.BooleanWebContextInitParameter.PartialStateSaving, true);
-        webConfig.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.FullStateSavingViewIds, "/index.xhtml,/index2.xhtml");
-        info = new ApplicationStateInfo();
-        TestingUtil.setPrivateField("applicationStateInfo",
-                                    ApplicationAssociate.class,
-                                    associate,
-                                    info);
-        
-
-        getFacesContext().getViewRoot().setViewId("/index.xhtml");
-        assertNull(strat.getStateManagementStrategy(getFacesContext(), "/index.xhtml"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-
-        getFacesContext().getViewRoot().setViewId("/index2.xhtml");
-        assertNull(strat.getStateManagementStrategy(getFacesContext(), "/index2.xhtml"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-
-        getFacesContext().getViewRoot().setViewId("/index3.xhtml");
-        assertNotNull(strat.getStateManagementStrategy(getFacesContext(), "/index3.xhtml"));
-        assertNotNull(getFacesContext().getAttributes().remove("com.sun.faces.context.StateContext_KEY"));
-        
-    }
-
-
-    public void testGetActionURLExceptions() throws Exception {
-        boolean exceptionThrown = false;
-        ViewHandler handler =
-            Util.getViewHandler(getFacesContext());
-        try {
-            handler.getActionURL(null, "/test.jsp");
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            handler.getActionURL(getFacesContext(), null);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            handler.getActionURL(getFacesContext(), "test.jsp");
-        } catch (IllegalArgumentException iae) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-    public void testGetResourceURL() throws Exception {
-
-        LifecycleFactory factory = (LifecycleFactory)
-            FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-        Lifecycle lifecycle =
-            factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-        ExternalContext extContext =
-            new ExternalContextImpl(config.getServletContext(),
-                                    request, response);
-        FacesContext context =
-            new FacesContextImpl(extContext, lifecycle);
-
-        // Validate correct calculations
-        assertEquals(request.getContextPath() + "/index.jsp",
-                     Util.getViewHandler(getFacesContext()).
-                     getResourceURL(context, "/index.jsp"));
-        assertEquals("index.jsp",
-                     Util.getViewHandler(getFacesContext()).
-                     getResourceURL(context, "index.jsp"));
-
-    }
-
-
-    public void testRender() {
-        getFacesContext().setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
-        UIViewRoot newView = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), TEST_URI);
-        //newView.setViewId(TEST_URI);
-        getFacesContext().setViewRoot(newView);
-
-        try {
-            ViewHandler viewHandler =
-                Util.getViewHandler(getFacesContext());
-            viewHandler.renderView(getFacesContext(),
-                                   getFacesContext().getViewRoot());
-        } catch (IOException e) {
-            System.out.println("ViewHandler IOException:" + e);
-        } catch (FacesException fe) {
-            System.out.println("ViewHandler FacesException: " + fe);
-        }
-
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        assertTrue(verifyExpectedOutput());
-    }
-
-
-   /* public void testRender2() {
-        // Change the viewID to end with .jsf and make sure that
-        // the implementation changes .jsf to .jsp and properly dispatches
-        // the message.
-        UIViewRoot newView = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        newView.setViewId(TEST_URI);
-        getFacesContext().setViewRoot(newView);
-
-        newView.setViewId("/faces/greeting.jsf");
-        getFacesContext().setViewRoot(newView);
-        try {
-            ViewHandler viewHandler =
-                Util.getViewHandler(getFacesContext());
-            viewHandler.renderView(getFacesContext(),
-                                   getFacesContext().getViewRoot());
-        } catch (IOException ioe) {
-            System.out.println("ViewHandler IOException: " + ioe);
-        } catch (FacesException fe) {
-            System.out.println("ViewHandler FacesException: " + fe);
-        }
-
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        assertTrue(verifyExpectedOutput());
-    } */
-
-
-    public void testCalculateLocaleLang() {
-        System.out.println("Testing calculateLocale - Language Match case");
-        ViewHandler handler = new ViewHandlerImpl();
-        Locale locale = handler.calculateLocale(getFacesContext());
-        assertTrue(locale.equals(Locale.ENGLISH));
-    }
-
-
-    public void testCalculateLocaleExact() {
-        System.out.println("Testing calculateLocale - Exact Match case ");
-        ViewHandler handler = new ViewHandlerImpl();
-        Locale locale = handler.calculateLocale(getFacesContext());
-        assertTrue(locale.equals(new Locale("ps", "PS")));
-    }
-
-
-    public void testCalculateLocaleNoMatch() {
-        System.out.println("Testing calculateLocale - No Match case");
-        ViewHandler handler = new ViewHandlerImpl();
-        Locale locale = handler.calculateLocale(getFacesContext());
-        assertTrue(locale.equals(Locale.US));
-    }
-
-
-    public void testCalculateLocaleFindDefault() {
-        System.out.println("Testing calculateLocale - find default");
-        ViewHandler handler = new ViewHandlerImpl();
-        Locale locale = handler.calculateLocale(getFacesContext());
-        assertEquals(Locale.ENGLISH.toString(), locale.toString());
-    }
-
-
-    public void testCalculateLocaleLowerCase() {
-        System.out.println("Testing calculateLocale - case sensitivity");
-        ViewHandler handler = new ViewHandlerImpl();
-        Locale locale = handler.calculateLocale(getFacesContext());
-        assertTrue(locale.equals(new Locale("ps", "PS")));
-    }
-
-
-    public void testTransient() {
-
-        // precreate tree and set it in session and make sure the tree is
-        // restored from session.        
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        root.setViewId(TEST_URI);
-
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-
-        userName.setId("userName");
-        userName.setTransient(true);
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-
-        UIPanel panel1 = new UIPanel();
-        panel1.setId("panel1");
-        basicForm.getChildren().add(panel1);
-
-        UIInput userName1 = new UIInput();
-        userName1.setId("userName1");
-        userName1.setTransient(true);
-        panel1.getChildren().add(userName1);
-
-        UIInput userName2 = new UIInput();
-        userName2.setId("userName2");
-        panel1.getChildren().add(userName2);
-
-        UIInput userName3 = new UIInput();
-        userName3.setTransient(true);
-        panel1.getFacets().put("userName3", userName3);
-
-        UIInput userName4 = new UIInput();
-        panel1.getFacets().put("userName4", userName4);
-
-        HttpSession session = (HttpSession)
-            getFacesContext().getExternalContext().getSession(false);
-        session.setAttribute(TEST_URI, root);
-
-        getFacesContext().setViewRoot(root);
-
-        StateManager stateManager =
-            getFacesContext().getApplication().getStateManager();
-	SerializedView viewState = 
-	    stateManager.saveSerializedView(getFacesContext());
-	assertTrue(null != viewState);
-	try {
-	    RenderKit curKit = RenderKitUtils.getCurrentRenderKit(getFacesContext());
-	    StringWriter writer = new StringWriter();
-	    ResponseWriter responseWriter = 
-		curKit.createResponseWriter(writer, "text/html",
-					    "ISO-8859-1");
-	    getFacesContext().setResponseWriter(responseWriter);
-	    stateManager.writeState(getFacesContext(), viewState);
-	    root = stateManager.restoreView(getFacesContext(), TEST_URI, 
-					    RenderKitFactory.HTML_BASIC_RENDER_KIT);
-	    getFacesContext().setViewRoot(root);
-	}
-	catch (Throwable ioe) {
-        ioe.printStackTrace();
-        fail();
-	}
-
-        // make sure that the transient property is not persisted.
-        basicForm =
-            (UIForm) (getFacesContext().getViewRoot()).findComponent(
-                "basicForm");
-        assertTrue(basicForm != null);
-
-        userName = (UIInput) basicForm.findComponent("userName");
-        assertTrue(userName == null);
-
-        panel1 = (UIPanel) basicForm.findComponent("panel1");
-        assertTrue(panel1 != null);
-
-        userName1 = (UIInput) panel1.findComponent("userName1");
-        assertTrue(userName1 == null);
-
-        userName2 = (UIInput) panel1.findComponent("userName2");
-        assertTrue(userName2 != null);
-
-        // make sure facets work correctly when marked transient.
-        Map facetList = panel1.getFacets();
-        assertTrue(!(facetList.containsKey("userName3")));
-        assertTrue(facetList.containsKey("userName4"));
-    }
-
-    public void testRestoreViewNegative() throws Exception {
-
-	// make sure the returned view is null if the viewId is the same
-	// as the servlet mapping.
-	assertNull(Util.getViewHandler(getFacesContext()).restoreView(getFacesContext(), 
-							   "/faces"));
-    }
-
-
-    private class TestRequest extends HttpServletRequestWrapper {
-
-        String servletPath;
-        String pathInfo;
-
-
-        public TestRequest(HttpServletRequest request) {
-            super(request);
-        }
-
-
-        public String getServletPath() {
-            return servletPath;
-        }
-
-
-        public void setServletPath(String servletPath) {
-            this.servletPath = servletPath;
-        }
-
-
-        public String getPathInfo() {
-            return pathInfo;
-        }
-
-
-        public void setPathInfo(String pathInfo) {
-            this.pathInfo = pathInfo;
-        }
-    }
-
-} // end of class TestViewHandlerImpl
diff --git a/jsf-ri/test/com/sun/faces/application/VariableResolverTestImpl.java b/jsf-ri/test/com/sun/faces/application/VariableResolverTestImpl.java
deleted file mode 100644
index 39666d1..0000000
--- a/jsf-ri/test/com/sun/faces/application/VariableResolverTestImpl.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-import com.sun.faces.TestVariableResolver;
-import javax.faces.el.VariableResolver;
-
-public class VariableResolverTestImpl extends TestVariableResolver {
-
-    public VariableResolverTestImpl(VariableResolver root) {
-        super(root);   
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/application/ViewHandlerTestImpl.java b/jsf-ri/test/com/sun/faces/application/ViewHandlerTestImpl.java
deleted file mode 100644
index 439e3c4..0000000
--- a/jsf-ri/test/com/sun/faces/application/ViewHandlerTestImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application;
-
-public class ViewHandlerTestImpl extends ViewHandlerImpl {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/resource/TestResourceHandlerImpl.java b/jsf-ri/test/com/sun/faces/application/resource/TestResourceHandlerImpl.java
deleted file mode 100644
index 6cc95de..0000000
--- a/jsf-ri/test/com/sun/faces/application/resource/TestResourceHandlerImpl.java
+++ /dev/null
@@ -1,1032 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.application.resource;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Arrays;
-import java.util.zip.GZIPOutputStream;
-
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.util.Util;
-import com.sun.faces.application.ApplicationAssociate;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-import javax.faces.application.Application;
-import org.apache.cactus.WebRequest;
-import org.apache.cactus.WebResponse;
-
-/**
- * Tests com.sun.faces.application.resource.ResourceHandlerImpl
- */
-public class TestResourceHandlerImpl extends ServletFacesTestCase {
-
-    /* HTTP Date format required by the HTTP/1.1 RFC */
-    private static final String RFC1123_DATE_PATTERN =
-          "EEE, dd MMM yyyy HH:mm:ss zzz";
-
-    private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
-
-
-     public TestResourceHandlerImpl() {
-        super("TestResourceHandlerImpl");
-    }
-
-
-    public TestResourceHandlerImpl(String name) {
-        super(name);
-    }
-
-
-    @Override
-    public void setUp() {
-        super.setUp();
-    }
-
-
-    @Override
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testAjaxIsAvailable() {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        assertTrue(handler instanceof ResourceHandlerImpl);
-
-        assertNotNull(handler.createResource("jsf.js", "javax.faces"));
-    }
-
-    public void testAjaxCompression() throws Exception {
-        
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        Resource resource =  handler.createResource("jsf-uncompressed.js", "javax.faces");
-
-        InputStream stream = resource.getInputStream();
-
-        int origSize = getBytes(stream).length;
-
-        resource =  handler.createResource("jsf.js", "javax.faces");
-
-        stream = resource.getInputStream();
-
-        int compSize = getBytes(stream).length;
-
-        //  If we're not getting 30% compression, something's gone horribly wrong.
-        assertTrue("compressed file less than 30% smaller: orig "+origSize+" comp: "+compSize,
-                origSize * 0.7 > compSize);
-
-    }
-
-
-    public void testCreateResource() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        assertTrue(handler instanceof ResourceHandlerImpl);
-
-        Resource resource = handler.createResource("duke-nv.gif");
-        assertTrue(resource != null);
-        assertTrue(resource.getLibraryName() == null);
-        assertTrue("duke-nv.gif".equals(resource.getResourceName()));
-        assertTrue("image/gif".equals(resource.getContentType()));
-
-        resource = handler.createResource("duke-nv.gif", "nvLibrary");
-        assertTrue(resource != null);
-        assertTrue("nvLibrary".equals(resource.getLibraryName()));
-        assertTrue("duke-nv.gif".equals(resource.getResourceName()));
-        assertTrue("image/gif".equals(resource.getContentType()));
-
-        resource = handler.createResource("images/duke-nv.gif", "nvLibrary");
-        assertTrue(resource != null);
-        assertTrue("nvLibrary".equals(resource.getLibraryName()));
-        assertTrue("images/duke-nv.gif".equals(resource.getResourceName()));
-        assertTrue("image/gif".equals(resource.getContentType()));
-
-        resource = handler.createResource("duke-nv.gif", "nvLibrary", "text/xml");
-        assertTrue(resource != null);
-        assertTrue("nvLibrary".equals(resource.getLibraryName()));
-        assertTrue("duke-nv.gif".equals(resource.getResourceName()));
-        assertTrue("text/xml".equals(resource.getContentType()));
-
-        resource = handler.createResource("duke-nv.gif", "nvLibrary", null);
-        assertTrue(resource != null);
-        assertTrue("nvLibrary".equals(resource.getLibraryName()));
-        assertTrue("duke-nv.gif".equals(resource.getResourceName()));
-        assertTrue("image/gif".equals(resource.getContentType()));
-
-        resource = handler.createResource("foo.jpg");
-        assertTrue(resource == null);
-
-        resource = handler.createResource("duke-nv.gif", "nonExistant");
-        assertTrue(resource == null);
-        
-    }
-
-
-    public void beginIsResourceRequestPrefixMapped(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/faces/", "/javax.faces.resource/duke-nv.gif", null);
-    }
-
-    public void testIsResourceRequestPrefixMapped() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        assertTrue(handler.isResourceRequest(getFacesContext()));
-    }
-
-
-    public void beginIsResourceRequestExtensionMapped(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-    }
-
-    public void testIsResourceRequestExtensionMapped() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        assertTrue(handler.isResourceRequest(getFacesContext()));
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludesPrefixMapped1(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/faces/", "/javax.faces.resource/test.jsp", null);
-    }
-
-    public void testHandleResourceRequestExcludesPrefixMapped1() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesPrefixMapped1(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludesPrefixMapped2(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/faces/", "/javax.faces.resource/test.properties", null);
-    }
-
-    public void testHandleResourceRequestExcludesPrefixMapped2() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesPrefixMapped2(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludesPrefixMapped3(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/faces/", "/javax.faces.resource/test.xhtml", null);
-    }
-
-    public void testHandleResourceRequestExcludesPrefixMapped3() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesPrefixMapped3(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludesPrefixMapped4(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/faces/", "/javax.faces.resource/test.class", null);
-    }
-
-    public void testHandleResourceRequestExcludesPrefixMapped4() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesPrefixMapped4(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludeExtensionMapped1(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.jsp.faces", null, null);
-    }
-
-    public void testHandleResourceRequestExcludeExtensionMapped1() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesExtensionMapped1(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludeExtensionMapped2(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.properties.faces", null, null);
-    }
-
-    public void testHandleResourceRequestExcludeExtensionMapped2() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesExtensionMapped2(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludeExtensionMapped3(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.xhtml.faces", null, null);
-    }
-
-    public void testHandleResourceRequestExcludeExtensionMapped3() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesExtensionMapped3(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginHandleResourceRequestExcludeExtensionMapped4(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.class.faces", null, null);
-    }
-
-    public void testHandleResourceRequestExcludeExtensionMapped4() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequestExcludesExtensionMapped4(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    //  The next 5 tests validate a user specified exclude.
-    //  In this case, .gif is excluded as a valid resource request.
-    //  This should cause the default exclusions of .jsp, .class, .xhtml, and
-    //  .properties to now be considered valid
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginUserSpecifiedResourceExclude1(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-    }
-
-    public void testUserSpecifiedResourceExclude1() throws Exception {
-        // documenting this once - this is hack in order to support dynamic init
-        // parameters. Unfortunately, the config object (which one can obtain
-        // the ServletContextWrapper from isn't available at the time the
-        // 'begin' methods are invoked.  So instead, leverage the knowledge that
-        // the init parameters are checked when the ResourceHandlerImpl is constructed
-        // and set the init parameters in the context before constructing.
-        WebConfiguration webconfig = WebConfiguration.getInstance(getFacesContext().getExternalContext());
-        webconfig.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.ResourceExcludes, ".gif");
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-
-	try {
-	    handler.handleResourceRequest(getFacesContext());
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-    public void endUserSpecifiedResourceExclude1(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginUserSpecifiedResourceExclude2(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/com.sun.faces.application.ApplicationImpl.class.faces", null, null);
-    }
-
-    public void testUserSpecifiedResourceExclude2() throws Exception {
-        WebConfiguration webconfig = WebConfiguration.getInstance(getFacesContext().getExternalContext());
-        webconfig.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.ResourceExcludes, ".gif");
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-
-	try {
-	    assertTrue(handler.isResourceRequest(getFacesContext()));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-    public void endUserSpecifiedResourceExclude2(WebResponse res) {
-        assertTrue(res.getStatusCode() == 200);
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    public void beginUserSpecifiedResourceExclude3(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/com.sun.faces.LogStrings.properties.faces", null, null);
-    }
-
-    public void testUserSpecifiedResourceExclude3() throws Exception {
-        WebConfiguration webconfig = WebConfiguration.getInstance(getFacesContext().getExternalContext());
-        webconfig.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.ResourceExcludes, ".gif");
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-
-	try {
-	    assertTrue(handler.isResourceRequest(getFacesContext()));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-    public void endUserSpecifiedResourceExclude3(WebResponse res) {
-        assertTrue(res.getStatusCode() == 200);
-    }
-
-
-
-    //==========================================================================
-    // Validate a resource streamed from the docroot of a webapp
-    //
-    public void beginHandleResourceRequest1(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-    }
-
-    public void testHandleResourceRequest1() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"));
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-        assertTrue(Arrays.equals(control, test));
-        assertTrue(response.containsHeader("content-length"));
-        assertTrue(response.containsHeader("last-modified"));
-        assertTrue(response.containsHeader("expires"));
-        assertTrue(response.containsHeader("etag"));
-        assertTrue(response.containsHeader("content-type"));
-        
-    }
-
-
-    //==========================================================================
-    // Validate a resource streamed from a JAR
-    //
-    public void beginHandleResourceRequest2(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addParameter("ln", "nvLibrary-jar");
-    }
-
-    public void testHandleResourceRequest2() throws Exception {
-
-        ResourceHandler handler =
-              getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext()
-              .getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(Util.getCurrentLoader(this)
-              .getResource("META-INF/resources/nvLibrary-jar/duke-nv.gif"));
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-        assertTrue(Arrays.equals(control, test));
-        assertTrue(response.containsHeader("content-length"));
-        assertTrue(response.containsHeader("last-modified"));
-        assertTrue(response.containsHeader("expires"));
-        assertTrue(response.containsHeader("etag"));
-        assertTrue(response.containsHeader("content-type"));
-        
-    }
-
-
-    //==========================================================================
-    // Validate a 304 is returned when a request contains the If-Modified-Since
-    // request header and the resource hasn't changed on the server side.
-    //
-    public void beginHandleResourceRequest3(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        long 
-                curTime = System.currentTimeMillis(),
-                threeHoursAgo = curTime - 10800000L;
-        facesService.setModificationTime("resources/duke-nv.gif", 
-                threeHoursAgo);
-        facesService.setModificationTime("resources/nvLibrary/duke-nv.gif",
-                threeHoursAgo);
-        SimpleDateFormat format =
-                new SimpleDateFormat(RFC1123_DATE_PATTERN, Locale.US);
-        format.setTimeZone(GMT);
-        Date headerValue = new Date(curTime);
-        
-        req.addParameter("ln", "nvLibrary");
-        req.addHeader("If-Modified-Since", format.format(headerValue));
-    }
-
-
-    public void testHandleResourceRequest3() throws Exception {
-        ResourceHandler handler =
-              getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequest3(WebResponse res) {
-        assertTrue(res.getStatusCode() == 304);
-    }
-
-
-    //==========================================================================
-    // Validate a 404 is returned when a request for a non existant resource
-    // is made
-    //
-    public void beginHandleResourceRequest4(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-v.gif.faces", null, null);
-        req.addParameter("ln", "nvLibrary");
-    }
-
-
-    public void testHandleResourceRequest4() throws Exception {
-        ResourceHandler handler =
-              getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequest4(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    //==========================================================================
-    // Validate a 404 is returned when a request for an excluded resource is made
-    //
-    public void beginHandleResourceRequest5(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.class.faces", null, null);
-        req.addParameter("ln", "nvLibrary");
-    }
-
-
-    public void testHandleResourceRequest5() throws Exception {
-        ResourceHandler handler =
-              getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        handler.handleResourceRequest(getFacesContext());
-    }
-
-    public void endHandleResourceRequest5(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    //==========================================================================
-    // Validate a resource streamed from the docroot of a webapp is compressed
-    //
-    public void beginHandleResourceRequest6(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addHeader("accept-encoding", "deflate");
-        req.addHeader("accept-encoding", "gzip");
-    }
-
-    public void testHandleResourceRequest6() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        app.setResourceHandler(handler);
-
-        HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"), true);
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-        try {
-	    assertTrue(Arrays.equals(control, test));
-	    assertTrue(response.containsHeader("content-length"));
-	    assertTrue(response.containsHeader("last-modified"));
-	    assertTrue(response.containsHeader("expires"));
-	    assertTrue(response.containsHeader("etag"));
-	    assertTrue(response.containsHeader("content-type"));
-	    assertTrue(response.containsHeader("content-encoding"));
-        } finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-
-    //==========================================================================
-    // Validate a resource streamed from a JAR is compressed
-    //
-    public void beginHandleResourceRequest7(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addParameter("ln", "nvLibrary-jar");
-        req.addHeader("accept-encoding", "gzip,deflate");
-    }
-
-    public void testHandleResourceRequest7() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        app.setResourceHandler(handler);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext()
-              .getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(Util.getCurrentLoader(this)
-              .getResource("META-INF/resources/nvLibrary-jar/duke-nv.gif"), true);
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-        try {
-            assertTrue(Arrays.equals(control, test));
-            assertTrue(response.containsHeader("content-length"));
-            assertTrue(response.containsHeader("last-modified"));
-            assertTrue(response.containsHeader("expires"));
-            assertTrue(response.containsHeader("etag"));
-            assertTrue(response.containsHeader("content-type"));
-            assertTrue(response.containsHeader("content-encoding"));
-        } finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-    }
-
-    //==========================================================================
-    // Validate a resource streamed from the docroot of a webapp isn't compressed
-    // when the client doesn't send the accept-encoding request header
-    //
-    public void beginHandleResourceRequest8(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-    }
-
-    public void testHandleResourceRequest8() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"));
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-	try {
-	    assertTrue(Arrays.equals(control, test));
-	    assertTrue(response.containsHeader("content-length"));
-	    assertTrue(response.containsHeader("last-modified"));
-	    assertTrue(response.containsHeader("expires"));
-	    assertTrue(response.containsHeader("etag"));
-	    assertTrue(response.containsHeader("content-type"));
-	    assertTrue(!response.containsHeader("content-encoding"));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-
-    //==========================================================================
-    // Validate a resource streamed from a JAR isn't compressed
-    // when the client doesn't send the accept-encoding request header
-    //
-    public void beginHandleResourceRequest9(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addParameter("ln", "nvLibrary-jar");
-    }
-
-    public void testHandleResourceRequest9() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext()
-              .getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext()
-              .getExternalContext().getResource("/resources/nvLibrary/duke-nv.gif"));
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-	try {
-	    assertTrue(Arrays.equals(control, test));
-	    assertTrue(response.containsHeader("content-length"));
-	    assertTrue(response.containsHeader("last-modified"));
-	    assertTrue(response.containsHeader("expires"));
-	    assertTrue(response.containsHeader("etag"));
-	    assertTrue(response.containsHeader("content-type"));
-	    assertTrue(!response.containsHeader("content-encoding"));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-
-    //==========================================================================
-    // Validate an accept-encoding of gzip;q=0 means non-compressed content
-    // is sent to the user-agent
-    //
-    public void beginHandleResourceRequest10(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addHeader("accept-encoding", "gzip;q=0, deflate");
-    }
-
-    public void testHandleResourceRequest10() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"), false);
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-	try {
-	    assertTrue(Arrays.equals(control, test));
-	    assertTrue(response.containsHeader("content-length"));
-	    assertTrue(response.containsHeader("last-modified"));
-	    assertTrue(response.containsHeader("expires"));
-	    assertTrue(response.containsHeader("etag"));
-	    assertTrue(response.containsHeader("content-type"));
-	    assertTrue(!response.containsHeader("content-encoding"));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-	    
-    }
-
-
-    //==========================================================================
-    // Validate an accept-encoding of that doesn't include gzip, and includes
-    // *;q=0 will not send compressed content to the user-agent
-    // is sent to the user-agent
-    //
-    public void beginHandleResourceRequest11(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addHeader("accept-encoding", "deflate");
-        req.addHeader("accept-encoding", "*;q=0");
-    }
-
-    public void testHandleResourceRequest11() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"), false);
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-	try {
-	    assertTrue(Arrays.equals(control, test));
-	    assertTrue(response.containsHeader("content-length"));
-	    assertTrue(response.containsHeader("last-modified"));
-	    assertTrue(response.containsHeader("expires"));
-	    assertTrue(response.containsHeader("etag"));
-	    assertTrue(response.containsHeader("content-type"));
-	    assertTrue(!response.containsHeader("content-encoding"));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-
-    }
-
-
-    //==========================================================================
-    // Validate an accept-encoding of that doesn't include gzip, and includes
-    // * will send compressed content
-    //
-    public void beginHandleResourceRequest12(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addHeader("accept-encoding", "identity;q=1.0");
-        req.addHeader("accept-encoding", "*;q=0.5");
-        req.addHeader("accept-encoding", "deflate;q=1.0");
-    }
-
-    public void testHandleResourceRequest12() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"), true);
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-	try {
-	    assertTrue(Arrays.equals(control, test));
-	    assertTrue(response.containsHeader("content-length"));
-	    assertTrue(response.containsHeader("last-modified"));
-	    assertTrue(response.containsHeader("expires"));
-	    assertTrue(response.containsHeader("etag"));
-	    assertTrue(response.containsHeader("content-type"));
-	    assertTrue(response.containsHeader("content-encoding"));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-
-    //==========================================================================
-    // Validate an accept-encoding of that doesn't include gzip will not send
-    // compressed content.
-    //
-    public void beginHandleResourceRequest13(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/duke-nv.gif.faces", null, null);
-        req.addHeader("accept-encoding", "identity;q=0.5, deflate;q=1.0");
-    }
-
-    public void testHandleResourceRequest13() throws Exception {
-
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif");
-        ApplicationAssociate associate = ApplicationAssociate.getInstance(getFacesContext().getExternalContext());
-        associate.setResourceManager(new ResourceManager(associate.getResourceCache()));
-        ResourceHandler handler = new ResourceHandlerImpl();
-        Application app = getFacesContext().getApplication();
-        ResourceHandler oldResourceHandler = app.getResourceHandler();
-        app.setResourceHandler(handler);
-        HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
-        TestResponseWrapper wrapper = new TestResponseWrapper(response);
-        getFacesContext().getExternalContext().setResponse(wrapper);
-        byte[] control = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"), false);
-        handler.handleResourceRequest(getFacesContext());
-        byte[] test = wrapper.getBytes();
-        assertTrue(Arrays.equals(control, test));
-	try {
-	    assertTrue(response.containsHeader("content-length"));
-	    assertTrue(response.containsHeader("last-modified"));
-	    assertTrue(response.containsHeader("expires"));
-	    assertTrue(response.containsHeader("etag"));
-	    assertTrue(response.containsHeader("content-type"));
-	    assertTrue(!response.containsHeader("content-encoding"));
-	} finally {
-            app.setResourceHandler(oldResourceHandler);
-        }
-
-    }
-
-
-    //==========================================================================
-    // Validate the fix for issue 1162.
-    //
-    public void beginHandleResourceRequest14(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/web.xml.faces", null, "ln=../WEB-INF");
-    }
-
-    public void testHandleResourceRequest14() throws Exception {
-
-        ResourceHandler handler =
-              getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        handler.handleResourceRequest(getFacesContext());
-        
-    }
-
-    public void endHandleResourceRequest14(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-    //==========================================================================
-    // Validate the fix for issue 1162.
-    //
-    public void beginHandleResourceRequest15(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/javax.faces.resource/web.xml.faces", null, "ln=nvLibrary/../../WEB-INF");
-    }
-
-    public void testHandleResourceRequest15() throws Exception {
-
-        ResourceHandler handler =
-              getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        handler.handleResourceRequest(getFacesContext());
-
-    }
-
-    public void endHandleResourceRequest15(WebResponse res) {
-        assertTrue(res.getStatusCode() == 404);
-    }
-
-
-
-// ---------------------------------------------------------- Helper Methods
-
-
-    private byte[] getBytes(URL url) throws Exception {
-
-        return getBytes(url, false);
-
-    }
-
-    private byte[] getBytes(URL url, boolean compress) throws Exception {
-        URLConnection c = url.openConnection();
-        c.setUseCaches(false);
-        InputStream in = c.getInputStream();
-        return ((compress) ? getCompressedBytes(in) : getBytes(in));
-    }
-
-    private byte[] getBytes(InputStream in) throws Exception {
-
-        ByteArrayOutputStream o = new ByteArrayOutputStream();
-        for (int i = in.read(); i != -1; i = in.read()) {
-            o.write(i);
-        }
-        in.close();
-        return o.toByteArray();
-
-    }
-
-    private byte[] getCompressedBytes(InputStream in) throws Exception {
-
-        ByteArrayOutputStream o = new ByteArrayOutputStream();
-        GZIPOutputStream compress = new GZIPOutputStream(o);
-        for (int i = in.read(); i != -1; i = in.read()) {
-            compress.write(i);
-        }
-        compress.flush();
-        compress.close();
-        return o.toByteArray();
-
-    }
-
-
-// ----------------------------------------------------------- Inner Classes
-
-
-    private static class TestResponseWrapper extends HttpServletResponseWrapper {
-
-        private TestServletOutputStream out;
-        public byte[] getBytes() {
-            return out.getBytes();
-        }
-
-        public TestResponseWrapper(HttpServletResponse httpServletResponse) {
-            super(httpServletResponse);
-        }
-
-        public ServletOutputStream getOutputStream() throws IOException {
-            out = new TestServletOutputStream(super.getOutputStream());
-            return out;
-        }
-
-        private class TestServletOutputStream extends ServletOutputStream {
-            private ServletOutputStream wrapped;
-            private ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            public TestServletOutputStream(ServletOutputStream wrapped) {
-                this.wrapped = wrapped;
-            }
-            public void write(int b) throws IOException {
-                wrapped.write(b);
-                out.write(b);
-            }
-
-            public void write(byte b[]) throws IOException {
-                wrapped.write(b);
-                out.write(b);
-            }
-
-            public void write(byte b[], int off, int len) throws IOException {
-                wrapped.write(b, off, len);
-                out.write(b, off, len);
-            }
-
-            public void flush() throws IOException {
-                wrapped.flush();
-                out.flush();
-            }
-
-            public void close() throws IOException {
-                wrapped.close();
-                out.close();
-            }
-
-            public byte[] getBytes() {
-                return out.toByteArray();
-            }
-        }
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/resource/TestResourceImpl.java b/jsf-ri/test/com/sun/faces/application/resource/TestResourceImpl.java
deleted file mode 100644
index fd3de06..0000000
--- a/jsf-ri/test/com/sun/faces/application/resource/TestResourceImpl.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.application.resource;
-
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.ObjectOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.faces.application.Resource;
-import javax.faces.application.ResourceHandler;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.cactus.TestingUtil;
-import com.sun.faces.util.Util;
-import com.sun.faces.util.RequestStateManager;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-import java.util.TimeZone;
-import javax.faces.context.FacesContext;
-import org.apache.cactus.WebRequest;
-
-/**
- * Test class for com.sun.faces.application.resource.ResourceImpl
- */
-public class TestResourceImpl extends ServletFacesTestCase {
-
-    /* HTTP Date format required by the HTTP/1.1 RFC */
-    private static final String RFC1123_DATE_PATTERN =
-          "EEE, dd MMM yyyy HH:mm:ss zzz";
-
-    private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
-
-    public TestResourceImpl() {
-        super("TestResourceImpl");
-    }
-
-
-    public TestResourceImpl(String name) {
-        super(name);
-    }
-
-
-    @Override
-    public void setUp() {
-        super.setUp();
-    }
-
-
-    @Override
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-    public void beginToURIPrefixMapping(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/faces", "/foo.jsp", null);
-    }
-
-    public void testToURIPrefixMapping() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue (handler != null);
-
-        Resource resource = handler.createResource("duke-nv.gif");
-        assertTrue (resource != null);
-        String expectedURI = "/test/faces/javax.faces.resource/duke-nv.gif";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke-nv.gif", "nvLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/faces/javax.faces.resource/duke-nv.gif?ln=nvLibrary";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke.gif");
-        assertTrue(resource != null);
-        expectedURI = "/test/faces/javax.faces.resource/duke.gif?v=1_1";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke.gif", "nvLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/faces/javax.faces.resource/duke.gif?ln=nvLibrary&v=1_1";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke.gif", "vLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/faces/javax.faces.resource/duke.gif?ln=vLibrary&v=2_01_1";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke-nv.gif", "vLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/faces/javax.faces.resource/duke-nv.gif?ln=vLibrary&v=2_0";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-    }
-
-    public void beginToURIExtensionMapping(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/foo.faces", null, null);
-    }
-
-    public void testToURIExtensionMapping() throws Exception {
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue (handler != null);
-
-        Resource resource = handler.createResource("duke-nv.gif");
-        assertTrue (resource != null);
-        String expectedURI = "/test/javax.faces.resource/duke-nv.gif.faces";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke-nv.gif", "nvLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/javax.faces.resource/duke-nv.gif.faces?ln=nvLibrary";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke.gif");
-        assertTrue(resource != null);
-        expectedURI = "/test/javax.faces.resource/duke.gif.faces?v=1_1";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke.gif", "nvLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/javax.faces.resource/duke.gif.faces?ln=nvLibrary&v=1_1";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke.gif", "vLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/javax.faces.resource/duke.gif.faces?ln=vLibrary&v=2_01_1";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-        resource = handler.createResource("duke-nv.gif", "vLibrary");
-        assertTrue(resource != null);
-        expectedURI = "/test/javax.faces.resource/duke-nv.gif.faces?ln=vLibrary&v=2_0";
-        assertTrue(expectedURI.equals(resource.getRequestPath()));
-
-    }
-
-    public void testWebppResourceGetInputStream() throws Exception {
-
-        // validate the behavior of getInputStream() for a webapp-based resource
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue (handler != null);
-
-        // step 1 - non-versioned
-        byte[] controlBytes = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke-nv.gif"));
-        Resource resource = handler.createResource("duke-nv.gif");
-        assertTrue(resource != null);
-        InputStream in = resource.getInputStream();
-        assertTrue(in != null);
-        byte[] underTest = getBytes(in);
-        assertTrue(Arrays.equals(controlBytes, underTest));
-
-        // step 2 - versioned
-        controlBytes = getBytes(getFacesContext().getExternalContext().getResource("/resources/duke.gif/1_1.gif"));
-        resource = handler.createResource("duke.gif");
-        assertTrue(resource != null);
-        in = resource.getInputStream();
-        assertTrue(in != null);
-        underTest = getBytes(in);
-        assertTrue(Arrays.equals(controlBytes, underTest));
-        
-    }
-
-    public void testEqualsOnResourceAndRelatedClasses() throws Exception {
-        // validate the behavior of getInputStream() for a webapp-based resource
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue (handler != null);
-
-        Object
-                x = handler.createResource("duke-nv.gif", "nvLibrary", "image/gif"),
-                y = handler.createResource("duke-nv.gif", "nvLibrary", "image/gif"),
-                z = handler.createResource("duke-nv.gif", "nvLibrary", "image/gif");
-        this.verifyEqualsContractPositive(x, y, z);
-
-        y = handler.createResource("simple.css");
-        assertFalse(x.equals(y));
-
-
-        VersionInfo
-                viA = new VersionInfo("1.0", null),
-                viB = new VersionInfo("1.0", null),
-                viC = new VersionInfo("1.0", null);
-        this.verifyEqualsContractPositive(viA, viB, viC);
-
-        ResourceHelper helper = new ClasspathResourceHelper();
-        FacesContext context = this.getFacesContext();
-
-        LibraryInfo
-                liA = helper.findLibrary("vLibrary-jar", null, context),
-                liB = helper.findLibrary("vLibrary-jar", null, context),
-                liC = helper.findLibrary("vLibrary-jar", null, context);
-        this.verifyEqualsContractPositive(liA, liB, liC);
-
-        liB = helper.findLibrary("vLibrary", null, context);
-        assertFalse(liA.equals(liB));
-
-
-    }
-
-
-    public void testJarResourceGetInputStream() throws Exception {
-
-        // validate the behavior of getInputStream() for a webapp-based resource
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue (handler != null);
-
-        // step 1 - non-versioned
-        byte[] controlBytes = getBytes(Util.getCurrentLoader(this.getClass()).getResource("META-INF/resources/duke-jar-nv.gif"));
-        Resource resource = handler.createResource("duke-jar-nv.gif");
-        assertTrue(resource != null);
-        InputStream in = resource.getInputStream();
-        assertTrue(in != null);
-        byte[] underTest = getBytes(in);
-        assertTrue(Arrays.equals(controlBytes, underTest));
-
-        // step 2 - versioned
-        /*
-        controlBytes = getBytes(Util.getCurrentLoader(this.getClass()).getResource("META-INF/resources/duke-jar.gif/1_1.gif"));
-        resource = handler.createResource("duke-jar.gif");
-        assertTrue(resource != null);
-        in = resource.getInputStream();
-        assertTrue(in != null);
-        underTest = getBytes(in);
-        assertTrue(Arrays.equals(controlBytes, underTest));
-        */
-
-    }
-
-
-    public void testGetContentType() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue (handler != null);
-
-        // non-versioned resource containing one path element
-        Resource resource = handler.createResource("duke-jar.gif");
-        assertTrue(resource != null);
-        assertTrue("image/gif".equals(resource.getContentType()));
-
-        // versioned resource containing one path element
-        resource = handler.createResource("duke.gif");
-        assertTrue(resource != null);
-        assertTrue("image/gif".equals(resource.getContentType()));
-
-        // non-versioned resource containing multiple path elements
-        resource = handler.createResource("images/duke-nv.gif", "nvLibrary");
-        assertTrue(resource != null);
-        assertTrue("image/gif".equals(resource.getContentType()));
-
-    }
-
-
-    public void testDefaultHeaders() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        RequestStateManager.set(getFacesContext(),
-                                RequestStateManager.RESOURCE_REQUEST,
-                                Boolean.TRUE);
-        Resource resource = handler.createResource("duke-jar.gif");
-        assertTrue(resource != null);
-        Map<String,String> headers = resource.getResponseHeaders();
-        assertTrue(headers != null);
-        assertTrue(headers.size() == 3);
-        assertTrue(headers.get("Expires") != null);
-        assertTrue(headers.get("ETag") != null);
-        assertTrue(headers.get("Last-Modified") != null);
-
-        // now assert that an empty map is returned if we're not servicing
-        // a resource request
-        RequestStateManager.set(getFacesContext(),
-                                RequestStateManager.RESOURCE_REQUEST,
-                                Boolean.FALSE);
-        headers = resource.getResponseHeaders();
-        assertTrue(headers.isEmpty());
-        
-    }
-
-
-    @SuppressWarnings({"deprecation"})
-    public void testUserAgentNeedsUpdate1() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        // no If-Modified-Since request header, so this should always
-        // return true
-        Resource resource = handler.createResource("duke-nv.gif");
-        assertTrue(resource.userAgentNeedsUpdate(getFacesContext()));
-
-        // set the creation date of the ResourceHandler back in time so that
-        // if the header was present it would return true - the lack of the header
-        // should result in true being returned in this case
-        Date date = new Date();
-        date.setYear(1980);
-        long origTime = (Long) TestingUtil.invokePrivateMethod("getCreationTime",
-                                                               null,
-                                                               null,
-                                                               ResourceHandlerImpl.class,
-                                                               handler);
-        TestingUtil.invokePrivateMethod("setCreationTime",
-                                        new Class[] { Long.TYPE },
-                                        new Object[] { date.getTime() },
-                                        ResourceHandlerImpl.class,
-                                        handler);
-        assertTrue(resource.userAgentNeedsUpdate(getFacesContext()));
-        TestingUtil.invokePrivateMethod("setCreationTime",
-                                        new Class[] { Long.TYPE },
-                                        new Object[] { origTime },
-                                        ResourceHandlerImpl.class,
-                                        handler);
-    }
-
-
-    public void beginUserAgentNeedsUpdate2(WebRequest req) {
-        long
-                curTime = System.currentTimeMillis(),
-                threeHoursAgo = curTime - 10800000L;
-        facesService.setModificationTime("resources/duke-nv.gif",
-                threeHoursAgo);
-        facesService.setModificationTime("resources/nvLibrary/duke-nv.gif",
-                threeHoursAgo);
-        SimpleDateFormat format =
-                new SimpleDateFormat(RFC1123_DATE_PATTERN, Locale.US);
-        format.setTimeZone(GMT);
-        Date headerValue = new Date(curTime);
-
-        req.addHeader("If-Modified-Since", format.format(headerValue));
-    }
-
-    public void testUserAgentNeedsUpdate2() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-        // If-Modified-Since request header, so this should always
-        // return true
-        Resource resource = handler.createResource("duke-nv.gif");
-        assertTrue(!resource.userAgentNeedsUpdate(getFacesContext()));
-
-    }
-
-
-    public void testResourceImplSerialization() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertTrue(handler != null);
-
-        Resource resource = handler.createResource("duke-nv.gif");
-        byte[] serializedBytes = serialize(resource);
-        resource = (Resource) deserialize(serializedBytes);
-        assertNotNull(resource);
-        assertNull(resource.getLibraryName());
-        assertEquals("duke-nv.gif", "duke-nv.gif", resource.getResourceName());
-        assertEquals("image/gif", "image/gif", resource.getContentType());
-
-
-        resource = handler.createResource("duke-nv.gif", "nvLibrary");
-        serializedBytes = serialize(resource);
-        resource = (Resource) deserialize(serializedBytes);
-        assertNotNull(resource);
-        assertEquals("nvLibrary", "nvLibrary", resource.getLibraryName());
-        assertEquals("duke-nv.gif", "duke-nv.gif", resource.getResourceName());
-        assertEquals("image/gif", "image/gif", resource.getContentType());
-
-    }
-
-
-    /**
-     * Added for issue 1274.
-     */
-    public void testResourceELEval() throws Exception {
-
-        ResourceHandler handler = getFacesContext().getApplication().getResourceHandler();
-        assertNotNull(handler);
-
-        Resource resource = handler.createResource("simple-with-el.css");
-        assertNotNull(resource);
-
-        byte[] bytes = getBytes(resource.getInputStream());
-      
-        ByteArrayInputStream bai = new ByteArrayInputStream(bytes);
-        BufferedReader reader = new BufferedReader(new InputStreamReader(bai));
-        List<String> lines = new ArrayList<String>();
-
-        for (String l = reader.readLine(); l != null; l = reader.readLine()) {
-            String t = l.trim();
-            if (t.length() > 0) {
-                lines.add(t);
-            }
-        }
-
-        assertEquals(4, lines.size());
-
-        final String[] expectedLines = {
-            "# /test",
-            "# /test",
-            "h2 { color: red }",
-            "# /test}"
-        };
-
-        for (int i = 0, len = expectedLines.length; i < len; i++) {
-            assertEquals(expectedLines[i], expectedLines[i], lines.get(i));
-        }
-        
-    }
-
-
-    // ---------------------------------------------------------- Helper Methods
-
-
-    private byte[] serialize(Object object) throws Exception {
-
-        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bytesOut);
-        oout.writeObject(object);
-        oout.flush();
-        oout.close();
-        return bytesOut.toByteArray();
-
-    }
-
-
-    private Object deserialize(byte[] bytes) throws Exception {
-
-        ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytes);
-        ObjectInputStream in = new ObjectInputStream(bytesIn);
-        return in.readObject();
-
-    }
-
-
-    private byte[] getBytes(URL url) throws Exception {
-
-        URLConnection c = url.openConnection();
-        c.setUseCaches(false);
-        InputStream in = c.getInputStream();
-        return getBytes(in);
-
-    }
-
-    private byte[] getBytes(InputStream in) throws Exception {
-
-        ByteArrayOutputStream o = new ByteArrayOutputStream();
-        for (int i = in.read(); i != -1; i = in.read()) {
-            o.write(i);
-        }
-        in.close();
-        return o.toByteArray();
-
-    }    
-
-}
diff --git a/jsf-ri/test/com/sun/faces/application/resource/TestResourceManager.java b/jsf-ri/test/com/sun/faces/application/resource/TestResourceManager.java
deleted file mode 100644
index c60d29b..0000000
--- a/jsf-ri/test/com/sun/faces/application/resource/TestResourceManager.java
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.application.resource;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.faces.context.ExternalContext;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.config.WebConfiguration;
-
-/**
- * Validate the ResourceManager.
- *
- * @since 2.0
- */
-public class TestResourceManager extends ServletFacesTestCase {
-
-    ResourceManager manager;
-
-    public TestResourceManager() {
-        super("TestResourceManager");
-    }
-
-
-    public TestResourceManager(String name) {
-        super(name);
-    }
-
-
-    @Override public void setUp() {
-        super.setUp();
-        manager = new ResourceManager(null);
-    }
-
-
-    @Override public void tearDown() {
-        super.tearDown();
-        manager = null;
-    }
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testWebappNonVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource(null, "duke-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(resource.getLibraryInfo() == null);
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(resource.getVersion() == null);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("duke-nv.gif".equals(resource.getName()));
-        assertTrue("/resources/duke-nv.gif".equals(resource.getPath()));
-    }
-
-    public void testWebappVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource(null, "duke.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(resource.getLibraryInfo() == null);
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("1_1".equals(resource.getVersion().toString()));
-        assertTrue("duke.gif".equals(resource.getName()));
-        assertTrue("/resources/duke.gif/1_1.gif".equals(resource.getPath()));
-    }
-
-    public void testWebappNonVersionedLibraryVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("nvLibrary", "duke.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("nvLibrary".equals(resource.getLibraryInfo().getName()));
-        assertTrue(resource.getLibraryInfo().getVersion() == null);
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof WebappResourceHelper);
-        assertTrue("/resources/nvLibrary".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("1_1".equals(resource.getVersion().toString()));
-        assertTrue("duke.gif".equals(resource.getName()));
-        assertTrue("/resources/nvLibrary/duke.gif/1_1.gif".equals(resource.getPath()));
-    }
-
-    public void testWebappNonVersionedLibraryNonVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("nvLibrary", "duke-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("nvLibrary".equals(resource.getLibraryInfo().getName()));
-        assertTrue(resource.getLibraryInfo().getVersion() == null);
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof WebappResourceHelper);
-        assertTrue("/resources/nvLibrary".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue(resource.getVersion() == null);
-        assertTrue("duke-nv.gif".equals(resource.getName()));
-        assertTrue("/resources/nvLibrary/duke-nv.gif".equals(resource.getPath()));
-    }
-
-    public void testWebappVersionedLibraryNonVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("vLibrary", "duke-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("vLibrary".equals(resource.getLibraryInfo().getName()));
-        assertTrue("2_0".equals(resource.getLibraryInfo().getVersion().toString()));
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof WebappResourceHelper);
-        assertTrue("/resources/vLibrary/2_0".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue(resource.getVersion() == null);
-        assertTrue("duke-nv.gif".equals(resource.getName()));
-        assertTrue("/resources/vLibrary/2_0/duke-nv.gif".equals(resource.getPath()));
-    }
-
-    public void testWebappVersionedLibraryVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("vLibrary", "duke.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("vLibrary".equals(resource.getLibraryInfo().getName()));
-        assertTrue("2_0".equals(resource.getLibraryInfo().getVersion().toString()));
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof WebappResourceHelper);
-        assertTrue("/resources/vLibrary/2_0".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("1_1".equals(resource.getVersion().toString()));
-        assertTrue("duke.gif".equals(resource.getName()));
-        assertTrue("/resources/vLibrary/2_0/duke.gif/1_1.gif".equals(resource.getPath()));
-    }
-
-
-    public void testWebappPathResource() throws Exception {
-        ResourceInfo resource = manager.findResource("nvLibrary", "images/duke-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue("images/duke-nv.gif".equals(resource.getName()));
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("/resources/nvLibrary/images/duke-nv.gif".equals(resource.getPath()));
-    }
-
-
-    public void testJarNonVersionedResources() throws Exception {
-        ResourceInfo resource = manager.findResource(null, "duke-jar-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(resource.getLibraryInfo() == null);
-        assertTrue(resource.getHelper() instanceof ClasspathResourceHelper);
-        assertTrue(resource.getVersion() == null);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("duke-jar-nv.gif".equals(resource.getName()));
-        assertTrue("META-INF/resources/duke-jar-nv.gif".equals(resource.getPath()));
-    }
-
-    /*
-    public void testJarVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource(null, "duke-jar.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(resource.getLibraryInfo() == null);
-        assertTrue(resource.getHelper() instanceof ClasspathResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("1_1".equals(resource.getVersion().toString()));
-        assertTrue("duke-jar.gif".equals(resource.getName()));
-        assertTrue("META-INF/resources/duke-jar.gif/1_1.gif".equals(resource.getPath()));
-    }
-    */
-
-    /*
-    public void testJarNonVersionedLibraryVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("nvLibrary-jar", "duke.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("nvLibrary-jar".equals(resource.getLibraryInfo().getName()));
-        assertTrue(resource.getLibraryInfo().getVersion() == null);
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof ClasspathResourceHelper);
-        assertTrue("META-INF/resources/nvLibrary-jar".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof ClasspathResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("1_1".equals(resource.getVersion().toString()));
-        assertTrue("duke.gif".equals(resource.getName()));
-        assertTrue("META-INF/resources/nvLibrary-jar/duke.gif/1_1.gif".equals(resource.getPath()));
-    }
-    */
-
-    public void testJarNonVersionedLibraryNonVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("nvLibrary-jar", "duke-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("nvLibrary-jar".equals(resource.getLibraryInfo().getName()));
-        assertTrue(resource.getLibraryInfo().getVersion() == null);
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof ClasspathResourceHelper);
-        assertTrue("META-INF/resources/nvLibrary-jar".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof ClasspathResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue(resource.getVersion() == null);
-        assertTrue("duke-nv.gif".equals(resource.getName()));
-        assertTrue("META-INF/resources/nvLibrary-jar/duke-nv.gif".equals(resource.getPath()));
-    }
-
-    /*
-    public void testJarVersionedLibraryNonVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("vLibrary-jar", "duke-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("vLibrary-jar".equals(resource.getLibraryInfo().getName()));
-        assertTrue("2_0".equals(resource.getLibraryInfo().getVersion().toString()));
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof ClasspathResourceHelper);
-        assertTrue("META-INF/resources/vLibrary-jar/2_0".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof ClasspathResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue(resource.getVersion() == null);
-        assertTrue("duke-nv.gif".equals(resource.getName()));
-        assertTrue("META-INF/resources/vLibrary-jar/2_0/duke-nv.gif".equals(resource.getPath()));
-    }
-    */
-
-    /*
-    public void testJarVersionedLibraryVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("vLibrary-jar", "duke.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("vLibrary-jar".equals(resource.getLibraryInfo().getName()));
-        assertTrue("2_0".equals(resource.getLibraryInfo().getVersion().toString()));
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof ClasspathResourceHelper);
-        assertTrue("META-INF/resources/vLibrary-jar/2_0".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof ClasspathResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("1_1".equals(resource.getVersion().toString()));
-        assertTrue("duke.gif".equals(resource.getName()));
-        assertTrue("META-INF/resources/vLibrary-jar/2_0/duke.gif/1_1.gif".equals(resource.getPath()));
-    }
-    */
-
-    public void testNoExtensionVersionedResource() throws Exception {
-        ResourceInfo resource = manager.findResource("vLibrary", "duke2.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-
-        // validate the library
-        assertTrue(resource.getLibraryInfo() != null);
-        assertTrue("vLibrary".equals(resource.getLibraryInfo().getName()));
-        assertTrue("2_0".equals(resource.getLibraryInfo().getVersion().toString()));
-        assertTrue(resource.getLibraryInfo().getHelper() instanceof WebappResourceHelper);
-        assertTrue("/resources/vLibrary/2_0".equals(resource.getLibraryInfo().getPath()));
-
-        // validate the resource
-        assertTrue(resource.getHelper() instanceof WebappResourceHelper);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-        assertTrue("1_1".equals(resource.getVersion().toString()));
-        assertTrue(resource.getVersion().getExtension() == null);
-        assertTrue("duke2.gif".equals(resource.getName()));
-        assertTrue("/resources/vLibrary/2_0/duke2.gif/1_1".equals(resource.getPath()));   
-    }
-
-
-    public void testInvalidLibraryName() throws Exception {
-        assertTrue(manager.findResource("noSuchLibrary", "duke.gif", "image/gif", getFacesContext()) == null);
-    }
-
-    public void testInvalidResourceName() throws Exception {
-        assertTrue(manager.findResource(null, "duke.fig", null, getFacesContext()) == null);
-        assertTrue(manager.findResource("nvLibrary", "duke.fig", null, getFacesContext()) == null);
-    }
-
-    public void testResourceInfoCompression() throws Exception {
-        WebConfiguration config = WebConfiguration.getInstance();
-        config.overrideContextInitParameter(WebConfiguration.WebContextInitParameter.CompressableMimeTypes, "image/gif,text/css,text/plain");
-        // create a new ResourceManager so that the mime type configuration is picked up
-        ResourceManager manager = new ResourceManager(null);
-        ResourceInfo resource = manager.findResource("nvLibrary", "images/duke-nv.gif", "image/gif", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(resource.isCompressable());
-        assertTrue(compressionPathIsValid(resource));
-        
-        // ensure compression disabled for a content type that is null
-        resource = manager.findResource("nvLibrary", "images/duke-nv.gif", "text/javascript", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-
-        // if a resource is compressable, but the compressed result is larger
-        // than the original resource, the returned ResourceInfo shouldn't
-        // be marked as compressable and getCompressedPath() will be null
-        resource = manager.findResource(null, "simple.txt", "text/plain", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(!resource.isCompressable());
-        assertTrue(resource.getCompressedPath() == null);
-
-        // if a resource is compressable, but the compressed result is larger
-        // than the original resource, the returned ResourceInfo should be
-        // marked compressable.  However, since css files may have EL expressions
-        // embedded within, the the resource will be marked as supporting such.
-        resource = manager.findResource(null, "simple.css", "text/plain", getFacesContext());
-        assertTrue(resource != null);
-        assertTrue(resource.isCompressable());
-        assertTrue(resource.supportsEL());
-        assertTrue(resource.getCompressedPath() == null);
-
-    }
-
-
-    public void testELEvalDisabledIfNoExpressionEvaluated() throws Exception {
-
-        ResourceManager manager = new ResourceManager(null);
-        ResourceInfo resource = manager.findResource(null, "simple.css", "text/css", getFacesContext());
-        assertNotNull(resource);
-        assertTrue(resource.supportsEL());
-        ResourceImpl resImpl = new ResourceImpl(resource, "text/css", 0, 0);
-        InputStream in = resImpl.getInputStream();
-        for (int i = in.read(); i != -1; i = in.read()) { }
-        try {
-            in.close();
-        } catch (Exception ioe) {
-            fail(ioe.toString());
-        }
-        assertTrue(!resource.supportsEL());
-
-        resource = manager.findResource(null, "simple-with-el.css", "text/css", getFacesContext());
-
-        assertNotNull(resource);
-        assertTrue(resource.supportsEL());
-        resImpl = new ResourceImpl(resource, "text/css", 0, 0);
-        in = resImpl.getInputStream();
-        for (int i = in.read(); i != -1; i = in.read()) { }
-        try {
-            in.close();
-        } catch (Exception ioe) {
-            fail(ioe.toString());
-        }
-        assertTrue(resource.supportsEL());
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private boolean compressionPathIsValid(ResourceInfo resource)
-    throws IOException {
-
-        ExternalContext extContext = getFacesContext().getExternalContext();
-        File tempDir = (File) extContext.getApplicationMap().get("javax.servlet.context.tempdir");
-        File expected = new File(tempDir, "/jsf-compressed" + File.separatorChar + resource.getPath());
-        return expected.getCanonicalPath().equals(resource.getCompressedPath());
-
-    }
-    
-
-
-
-} // END TestResourceManager
diff --git a/jsf-ri/test/com/sun/faces/component/visit/TestTreeVisit.java b/jsf-ri/test/com/sun/faces/component/visit/TestTreeVisit.java
deleted file mode 100644
index 4882a73..0000000
--- a/jsf-ri/test/com/sun/faces/component/visit/TestTreeVisit.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.component.visit;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import java.util.HashSet;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.html.HtmlCommandButton;
-import javax.faces.component.html.HtmlForm;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.component.html.HtmlPanelGrid;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-
-
-public class TestTreeVisit extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestTreeVisit() {
-        super("TestTreeVisit.java");
-    }
-
-
-    public TestTreeVisit(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-    private void buildTree() {
-	FacesContext context = getFacesContext();
-        UIViewRoot root = Util.getViewHandler(context).createView(context, null);
-        root.setId("root");
-        context.setViewRoot(root);
-
-        HtmlForm form = new HtmlForm();
-        form.setId("form");
-        root.getChildren().add(form);
-
-        buildPanel(form, "panel0");
-        buildPanel(form, "panel1");
-
-    }
-
-    private void buildPanel(HtmlForm form, String panelId) {
-        UIComponent
-                panel,
-                input0,
-                input1,
-                button0,
-                button1;
-
-        panel = new HtmlPanelGrid();
-        panel.setId(panelId);
-        form.getChildren().add(panel);
-
-        input0 = new HtmlInputText();
-        input0.setId("input0");
-        panel.getChildren().add(input0);
-
-        input1 = new HtmlInputText();
-        input1.setId("input1");
-        panel.getChildren().add(input1);
-
-        button0 = new HtmlCommandButton();
-        button0.setId("button0");
-        panel.getChildren().add(button0);
-
-        button1 = new HtmlCommandButton();
-        button1.setId("button1");
-        panel.getChildren().add(button1);
-
-    }
-
-    public void testFullTraversal() throws Exception {
-        
-        buildTree();
-        UIViewRoot root = getFacesContext().getViewRoot();
-        final StringBuilder builder = new StringBuilder();
-
-        root.visitTree(VisitContext.createVisitContext(getFacesContext()),
-                new VisitCallback() {
-                    public VisitResult visit(VisitContext context,
-                            UIComponent target) {
-                        builder.append(target.getClientId(context.getFacesContext()) + " ");
-                        return VisitResult.ACCEPT;
-                    }
-                });
-        System.out.println(builder);
-        String result = builder.toString().trim();
-        assertEquals(result, "root form form:panel0 form:input0 form:input1 form:button0 form:button1 form:panel1 form:input0 form:input1 form:button0 form:button1");
-
-    }
-
-    public void testSpecificIdTraversal() throws Exception {
-        buildTree();
-        UIViewRoot root = getFacesContext().getViewRoot();
-        final StringBuilder builder = new StringBuilder();
-
-        HashSet ids = new HashSet();
-        ids.add("form:panel0");
-        root.visitTree(VisitContext.createVisitContext(getFacesContext(),
-                ids, null),
-                new VisitCallback() {
-                    public VisitResult visit(VisitContext context,
-                            UIComponent target) {
-                        builder.append(target.getClientId(context.getFacesContext()) + " ");
-                        return VisitResult.ACCEPT;
-                    }
-                });
-        System.out.println(builder);
-        String result = builder.toString().trim();
-        assertEquals(result, "form:panel0");
-
-    }
-
-
-    // PENDING make sure UIData and UIRepeat are tested.
-
-} // end of class TestTreeVisit
diff --git a/jsf-ri/test/com/sun/faces/component/visit/TestTreeWithUIDataVisit.java b/jsf-ri/test/com/sun/faces/component/visit/TestTreeWithUIDataVisit.java
deleted file mode 100644
index 17f95d6..0000000
--- a/jsf-ri/test/com/sun/faces/component/visit/TestTreeWithUIDataVisit.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-// TestTreeVisit.java
-
-package com.sun.faces.component.visit;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.logging.Logger;
-import javax.faces.component.UIColumn;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIData;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.html.HtmlColumn;
-import javax.faces.component.html.HtmlCommandButton;
-import javax.faces.component.html.HtmlDataTable;
-import javax.faces.component.html.HtmlForm;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.component.html.HtmlOutputText;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitHint;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-import javax.faces.model.ArrayDataModel;
-import javax.faces.model.DataModel;
-import javax.faces.model.ListDataModel;
-import javax.faces.model.ScalarDataModel;
-
-
-public class TestTreeWithUIDataVisit extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestTreeWithUIDataVisit() {
-        super("TestTreeVisit.java");
-    }
-
-
-    public TestTreeWithUIDataVisit(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-    private void buildTree() {
-	FacesContext context = getFacesContext();
-        UIViewRoot root = Util.getViewHandler(context).createView(context, null);
-        root.setId("root");
-        context.setViewRoot(root);
-
-        HtmlForm form = new HtmlForm();
-        form.setId("form");
-        root.getChildren().add(form);
-
-        buildPanel(form, "panel0");
-        buildPanel(form, "panel1");
-
-    }
-
-    private void buildPanel(HtmlForm form, String panelId) {
-        UIComponent
-                panel,
-                input0,
-                input1,
-                button0,
-                button1,
-                column0;
-        HtmlDataTable data;
-        HtmlOutputText output0;
-        ArrayList<String> hobbits = new ArrayList<String>();
-        hobbits.add("bilbo");
-        hobbits.add("frodo");
-        hobbits.add("merry");
-        hobbits.add("pippin");
-        hobbits.add("lumpy");
-        ListDataModel dataModel = new ListDataModel(hobbits);
-
-        panel = new UINamingContainer();
-        panel.setId(panelId);
-        form.getChildren().add(panel);
-
-        input0 = new HtmlInputText();
-        input0.setId("input0");
-        panel.getChildren().add(input0);
-
-        input1 = new HtmlInputText();
-        input1.setId("input1");
-        panel.getChildren().add(input1);
-
-        data = new HtmlDataTable();
-        data.setId("data");
-        panel.getChildren().add(data);
-        data.setValue(dataModel);
-        data.setVar("hobbitName");
-        String dataId = data.getClientId();
-
-        column0 = new HtmlColumn();
-        column0.setId("column0");
-        data.getChildren().add(column0);
-
-        output0 = new HtmlOutputText();
-        output0.setId("output0");
-        output0.setValue(getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(), "#{hobbitName}", String.class));
-        column0.getChildren().add(output0);
-
-        button0 = new HtmlCommandButton();
-        button0.setId("button0");
-        panel.getChildren().add(button0);
-
-        button1 = new HtmlCommandButton();
-        button1.setId("button1");
-        panel.getChildren().add(button1);
-
-    }
-
-    public void testSpecificIdTraversal() throws Exception {
-        buildTree();
-        UIViewRoot root = getFacesContext().getViewRoot();
-        final StringBuilder builder = new StringBuilder();
-
-        HashSet ids = new HashSet();
-        ids.add("form:panel0:data:3:output0");
-        ids.add("form:panel1:data:0:output0");
-
-        // At the point of this visit call the current Phase is RESTORE_VIEW.
-        // This will cause the test to fail due to the changes for issue 1310.
-        // So we need to switch to a different phase
-        getFacesContext().setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
-        
-        root.visitTree(VisitContext.createVisitContext(getFacesContext(),
-                ids, null),
-                new VisitCallback() {
-                    public VisitResult visit(VisitContext context,
-                            UIComponent target) {
-                        builder.append(target.getClientId(context.getFacesContext()) + " ");
-                        return VisitResult.ACCEPT;
-                    }
-                });
-
-        String result = builder.toString().trim();
-        assertEquals(result, "form:panel0:data:3:output0 form:panel1:data:0:output0");
-
-    }
-
-
-    /**
-     * Added for issue https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1483
-     */
-    public void testFacetVisits() throws Exception {
-
-        UIData data = new UIData();
-        DataModel m = new ArrayDataModel<String>(new String[] {"a", "b"});
-        data.setValue(m);
-        data.setId("table");
-        UIOutput tableFacet = new UIOutput();
-        tableFacet.setId("tableFacet");
-        data.getFacets().put("header", tableFacet);
-        UIColumn c1 = new UIColumn();
-        c1.setId("column1");
-        UIOutput column1Facet = new UIOutput();
-        column1Facet.setId("column1Facet");
-        c1.getFacets().put("header", column1Facet);
-        UIOutput column1Data = new UIOutput();
-        column1Data.setId("column1Data");
-        c1.getChildren().add(column1Data);
-        data.getChildren().add(c1);
-
-        getFacesContext().setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
-        
-        final List<String> visitedIds = new ArrayList<String>();
-        data.visitTree(VisitContext.createVisitContext(getFacesContext(),
-                                                       null,
-                                                       null),
-                       new VisitCallback() {
-                           public VisitResult visit(VisitContext context,
-                                                    UIComponent target) {
-                               visitedIds
-                                     .add(target.getClientId(context.getFacesContext()));
-                               return VisitResult.ACCEPT;
-                           }
-                       });
-        
-        String[] expectedIds = { "table",
-                                 "table:tableFacet",
-                                 "table:column1Facet",
-                                 "table:column1",
-                                 "table:0:column1Data",
-                                 "table:1:column1Data" };
-
-        Logger.getAnonymousLogger().info("** Visited IDs: " + visitedIds);
-
-        assertEquals("Expected number of vists: " + expectedIds.length + ", actual number of visits: " + visitedIds.size(),
-                     expectedIds.length,
-                     visitedIds.size());
-
-        for (String id : expectedIds) {
-            assertTrue("ID: " + id + " not visited.", visitedIds.contains(id));
-        }
-
-    }
-
-
-    // PENDING make sure UIData and UIRepeat are tested.
-
-} // end of class TestTreeVisit
diff --git a/jsf-ri/test/com/sun/faces/component/visit/TestTreeWithUIRepeatVisit.java b/jsf-ri/test/com/sun/faces/component/visit/TestTreeWithUIRepeatVisit.java
deleted file mode 100644
index d3ab390..0000000
--- a/jsf-ri/test/com/sun/faces/component/visit/TestTreeWithUIRepeatVisit.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-// TestTreeVisit.java
-
-package com.sun.faces.component.visit;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.facelets.component.UIRepeat;
-import com.sun.faces.util.Util;
-import java.util.ArrayList;
-import java.util.HashSet;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.html.HtmlColumn;
-import javax.faces.component.html.HtmlCommandButton;
-import javax.faces.component.html.HtmlForm;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.component.html.HtmlOutputText;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-import javax.faces.model.ListDataModel;
-
-public class TestTreeWithUIRepeatVisit extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestTreeWithUIRepeatVisit() {
-        super("TestTreeVisit.java");
-    }
-
-
-    public TestTreeWithUIRepeatVisit(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-    private void buildTree() {
-	FacesContext context = getFacesContext();
-        UIViewRoot root = Util.getViewHandler(context).createView(context, null);
-        root.setId("root");
-        context.setViewRoot(root);
-
-        HtmlForm form = new HtmlForm();
-        form.setId("form");
-        root.getChildren().add(form);
-
-        buildPanel(form, "panel0");
-        buildPanel(form, "panel1");
-
-    }
-
-    private void buildPanel(HtmlForm form, String panelId) {
-        UIComponent
-                panel,
-                input0,
-                input1,
-                button0,
-                button1,
-                column0;
-        UIRepeat data;
-        HtmlOutputText output0;
-        ArrayList<String> hobbits = new ArrayList<String>();
-        hobbits.add("bilbo");
-        hobbits.add("frodo");
-        hobbits.add("merry");
-        hobbits.add("pippin");
-        hobbits.add("lumpy");
-        ListDataModel dataModel = new ListDataModel(hobbits);
-
-        panel = new UINamingContainer();
-        panel.setId(panelId);
-        form.getChildren().add(panel);
-
-        input0 = new HtmlInputText();
-        input0.setId("input0");
-        panel.getChildren().add(input0);
-
-        input1 = new HtmlInputText();
-        input1.setId("input1");
-        panel.getChildren().add(input1);
-
-        data = new UIRepeat();
-        data.setId("data");
-        panel.getChildren().add(data);
-        data.setValue(dataModel);
-        data.setVar("hobbitName");
-        String dataId = data.getClientId();
-
-        column0 = new HtmlColumn();
-        column0.setId("column0");
-        data.getChildren().add(column0);
-
-        output0 = new HtmlOutputText();
-        output0.setId("output0");
-        output0.setValue(getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(), "#{hobbitName}", String.class));
-        column0.getChildren().add(output0);
-
-        button0 = new HtmlCommandButton();
-        button0.setId("button0");
-        panel.getChildren().add(button0);
-
-        button1 = new HtmlCommandButton();
-        button1.setId("button1");
-        panel.getChildren().add(button1);
-
-    }
-
-    public void testSpecificIdTraversal() throws Exception {
-        buildTree();
-        UIViewRoot root = getFacesContext().getViewRoot();
-        final StringBuilder builder = new StringBuilder();
-
-        // At the point of this visit call the current Phase is RESTORE_VIEW.
-        // This will cause the test to fail due to the changes for issue 1310.
-        // So we need to switch to a different phase
-        getFacesContext().setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
-
-        HashSet ids = new HashSet();
-        ids.add("form:panel0:data:3:output0");
-        ids.add("form:panel1:data:0:output0");
-        root.visitTree(VisitContext.createVisitContext(getFacesContext(),
-                ids, null),
-                new VisitCallback() {
-                    public VisitResult visit(VisitContext context,
-                            UIComponent target) {
-                        builder.append(target.getClientId(context.getFacesContext()) + " ");
-                        return VisitResult.ACCEPT;
-                    }
-                });
-        System.out.println(builder);
-        String result = builder.toString().trim();
-        assertEquals(result, "form:panel0:data:3:output0 form:panel1:data:0:output0");
-
-    }
-
-
-    // PENDING make sure UIData and UIRepeat are tested.
-
-} // end of class TestTreeVisit
diff --git a/jsf-ri/test/com/sun/faces/config/ClaimConfiguration.java b/jsf-ri/test/com/sun/faces/config/ClaimConfiguration.java
deleted file mode 100644
index c12205f..0000000
--- a/jsf-ri/test/com/sun/faces/config/ClaimConfiguration.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-public class ClaimConfiguration extends Object {
-
-    public ClaimConfiguration() {}
-
-    protected Double waterDamageAmount = new Double(100.0);
-    public Double getWaterDamageAmount() {
-	return waterDamageAmount;
-    }
-
-    public void setWaterDamageAmount(Double newWaterDamageAmount) {
-	waterDamageAmount = newWaterDamageAmount;
-    }
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/ConfigureListenerTestCase.java b/jsf-ri/test/com/sun/faces/config/ConfigureListenerTestCase.java
deleted file mode 100644
index f5f7d49..0000000
--- a/jsf-ri/test/com/sun/faces/config/ConfigureListenerTestCase.java
+++ /dev/null
@@ -1,1001 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-import java.util.EventListener;
-import java.util.logging.Filter;
-import java.util.logging.LogRecord;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.UIColumn;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIData;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIGraphic;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIMessage;
-import javax.faces.component.UIMessages;
-import javax.faces.component.UINamingContainer;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIParameter;
-import javax.faces.component.UISelectBoolean;
-import javax.faces.component.UISelectItem;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UISelectOne;
-import javax.faces.component.html.HtmlCommandButton;
-import javax.faces.component.html.HtmlCommandLink;
-import javax.faces.component.html.HtmlDataTable;
-import javax.faces.component.html.HtmlForm;
-import javax.faces.component.html.HtmlGraphicImage;
-import javax.faces.component.html.HtmlInputHidden;
-import javax.faces.component.html.HtmlInputSecret;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.component.html.HtmlInputTextarea;
-import javax.faces.component.html.HtmlMessage;
-import javax.faces.component.html.HtmlMessages;
-import javax.faces.component.html.HtmlOutputFormat;
-import javax.faces.component.html.HtmlOutputLabel;
-import javax.faces.component.html.HtmlOutputLink;
-import javax.faces.component.html.HtmlOutputText;
-import javax.faces.component.html.HtmlPanelGrid;
-import javax.faces.component.html.HtmlPanelGroup;
-import javax.faces.component.html.HtmlSelectBooleanCheckbox;
-import javax.faces.component.html.HtmlSelectManyCheckbox;
-import javax.faces.component.html.HtmlSelectManyListbox;
-import javax.faces.component.html.HtmlSelectManyMenu;
-import javax.faces.component.html.HtmlSelectOneListbox;
-import javax.faces.component.html.HtmlSelectOneMenu;
-import javax.faces.component.html.HtmlSelectOneRadio;
-import javax.faces.convert.BigDecimalConverter;
-import javax.faces.convert.BigIntegerConverter;
-import javax.faces.convert.BooleanConverter;
-import javax.faces.convert.ByteConverter;
-import javax.faces.convert.CharacterConverter;
-import javax.faces.convert.DateTimeConverter;
-import javax.faces.convert.DoubleConverter;
-import javax.faces.convert.FloatConverter;
-import javax.faces.convert.IntegerConverter;
-import javax.faces.convert.LongConverter;
-import javax.faces.convert.NumberConverter;
-import javax.faces.convert.ShortConverter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-import javax.faces.validator.DoubleRangeValidator;
-import javax.faces.validator.LengthValidator;
-import javax.faces.validator.LongRangeValidator;
-import javax.faces.webapp.FacesServlet;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRegistration;
-import javax.servlet.FilterRegistration;
-import javax.servlet.SessionCookieConfig;
-import javax.servlet.SessionTrackingMode;
-import javax.servlet.descriptor.JspConfigDescriptor;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.config.WebConfiguration.BooleanWebContextInitParameter;
-import com.sun.faces.application.ApplicationAssociate;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * <p>Unit tests for <code>ConfigureListener</code>.</p>
- */
-public class ConfigureListenerTestCase extends ServletFacesTestCase {
-
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    // Construct a new instance of this test case.
-    public ConfigureListenerTestCase(String name) {
-        super(name);
-    }
-
-    public ConfigureListenerTestCase() {
-        this("ConfigureListenerTestCase");
-    }
-
-     // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(ConfigureListenerTestCase.class));
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-
-    // Test a basic environment with no application configuration resources
-    public void testBasic() throws Exception {
-
-        // Perform tests on the environment
-        checkComponentsGeneric();
-        checkComponentsHtml();
-        checkConvertersByClass();
-        checkConvertersById();
-        checkRenderers();
-        checkValidators();
-
-    }
-
-
-    // Representative sample only
-    private String rendersChildrenFalse[][] = {
-        
-    };
-
-    private String rendersChildrenTrue[][] = {
-        {"javax.faces.Command", "javax.faces.Link"},
-        {"javax.faces.Data", "javax.faces.Table"},
-        {"javax.faces.Output", "javax.faces.Link"},
-        {"javax.faces.Panel", "javax.faces.Grid"},
-        {"javax.faces.Panel", "javax.faces.Group"},
-        {"javax.faces.Command", "javax.faces.Button"},
-        {"javax.faces.Form", "javax.faces.Form"}
-    };
-
-
-    // Test some boolean attributes that should have been set explicitly
-    public void testBoolean() throws Exception {
-
-        RenderKitFactory rkFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk =
-            rkFactory.getRenderKit(null,
-                                   RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        // Test for isRendersChildren=false
-        for (int i = 0; i < rendersChildrenFalse.length; i++) {
-            Renderer r = rk.getRenderer(rendersChildrenFalse[i][0],
-                                        rendersChildrenFalse[i][1]);
-            assertEquals("(" + rendersChildrenFalse[i][0] + "," +
-                         rendersChildrenFalse[i][1] + ")", false,
-                         r.getRendersChildren());
-        }
-
-        // Test for isRendersChildren=true
-        for (int i = 0; i < rendersChildrenTrue.length; i++) {
-            Renderer r = rk.getRenderer(rendersChildrenTrue[i][0],
-                                        rendersChildrenTrue[i][1]);
-            assertEquals("(" + rendersChildrenTrue[i][0] + "," +
-                         rendersChildrenTrue[i][1] + ")", true,
-                         r.getRendersChildren());
-        }
-
-    }
-
-
-    // Test a webapp with a default faces-config.xml resource
-    public void testDefault() throws Exception {
-
-        // Validate standard configuration
-        checkComponentsGeneric();
-        checkComponentsHtml();
-        checkConvertersByClass();
-        checkConvertersById();
-        checkRenderers();
-        checkValidators();
-
-        // Validate what was actually configured
-        checkDefaultConfiguration();
-        checkExtraConfiguration(false);
-        checkEmbedConfiguration(false);
-
-
-    }
-
-
-    // Test a webapp with a default and extra and embedded resources
-    public void testEmbed() throws Exception {
-
-        ServletContext ctx = (ServletContext)
-              getFacesContext().getExternalContext().getContext();
-        ApplicationAssociate.clearInstance(getFacesContext().getExternalContext());
-        ctx.removeAttribute("com.sun.faces.config.WebConfiguration");  
-        ServletContextWrapper w = new ServletContextWrapper(ctx);
-        ServletContextEvent sce = new ServletContextEvent(w);
-        w.addInitParameter(FacesServlet.CONFIG_FILES_ATTR,
-                           "/WEB-INF/embed-config.xml,/WEB-INF/extra-config.xml");
-        FactoryFinder.releaseFactories();
-        ConfigureListener listener = new ConfigureListener();
-        // Initialize the context
-        try {
-            listener.contextInitialized(sce);
-        } catch (FacesException e) {
-            if (e.getCause() != null) {
-                throw (Exception) e.getCause();
-            } else {
-                throw e;
-            }
-        }
-
-        // Validate standard configuration
-        checkComponentsGeneric();
-        checkComponentsHtml();
-        checkConvertersByClass();
-        checkConvertersById();
-        checkRenderers();
-        checkValidators();
-
-        // Validate what was actually configured
-        checkDefaultConfiguration();
-        checkExtraConfiguration(true);
-        checkEmbedConfiguration(true);
-
-        // Destroy the context
-        listener.contextDestroyed(sce);
-
-    }
-
-
-    // Test a webapp with a default and extra faces-config.xml resources
-    public void testExtra() throws Exception {
-
-        ServletContext ctx = (ServletContext)
-              getFacesContext().getExternalContext().getContext();
-        ApplicationAssociate.clearInstance(getFacesContext().getExternalContext());
-        ctx.removeAttribute("com.sun.faces.config.WebConfiguration");
-        ServletContextWrapper w = new ServletContextWrapper(ctx);
-        ServletContextEvent sce = new ServletContextEvent(w);
-        w.addInitParameter(FacesServlet.CONFIG_FILES_ATTR,
-                           "/WEB-INF/extra-config.xml");
-        FactoryFinder.releaseFactories();
-        ConfigureListener listener = new ConfigureListener();
-
-        // Initialize the context
-        try {
-            listener.contextInitialized(sce);
-        } catch (FacesException e) {
-            if (e.getCause() != null) {
-                throw (Exception) e.getCause();
-            } else {
-                throw e;
-            }
-        }
-
-        // Validate standard configuration
-        checkComponentsGeneric();
-        checkComponentsHtml();
-        checkConvertersByClass();
-        checkConvertersById();
-        checkRenderers();
-        checkValidators();
-
-        // Validate what was actually configured
-        checkDefaultConfiguration();
-        checkExtraConfiguration(true);
-        checkEmbedConfiguration(false);
-
-        // Destroy the context
-        listener.contextDestroyed(sce);
-
-    }
-
-
-    // --------------------------------------------------------- Support Methods
-
-
-    // Check that all of the required generic components have been registered
-    private void checkComponentsGeneric() throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        assertTrue(application.createComponent
-                   ("javax.faces.Column") instanceof UIColumn);
-        assertTrue(application.createComponent
-                   (UIColumn.COMPONENT_TYPE) instanceof UIColumn);
-        assertTrue(application.createComponent
-                   ("javax.faces.Command") instanceof UICommand);
-        assertTrue(application.createComponent
-                   (UICommand.COMPONENT_TYPE) instanceof UICommand);
-        assertTrue(application.createComponent
-                   ("javax.faces.Data") instanceof UIData);
-        assertTrue(application.createComponent
-                   (UIData.COMPONENT_TYPE) instanceof UIData);
-        assertTrue(application.createComponent
-                   ("javax.faces.Form") instanceof UIForm);
-        assertTrue(application.createComponent
-                   (UIForm.COMPONENT_TYPE) instanceof UIForm);
-        assertTrue(application.createComponent
-                   ("javax.faces.Graphic") instanceof UIGraphic);
-        assertTrue(application.createComponent
-                   (UIGraphic.COMPONENT_TYPE) instanceof UIGraphic);
-        assertTrue(application.createComponent
-                   ("javax.faces.Input") instanceof UIInput);
-        assertTrue(application.createComponent
-                   (UIInput.COMPONENT_TYPE) instanceof UIInput);
-        assertTrue(application.createComponent
-                   ("javax.faces.Message") instanceof UIMessage);
-        assertTrue(application.createComponent
-                   (UIMessage.COMPONENT_TYPE) instanceof UIMessage);
-        assertTrue(application.createComponent
-                   ("javax.faces.Messages") instanceof UIMessages);
-        assertTrue(application.createComponent
-                   (UIMessages.COMPONENT_TYPE) instanceof UIMessages);
-        assertTrue(application.createComponent
-                   ("javax.faces.NamingContainer") instanceof UINamingContainer);
-        assertTrue(application.createComponent
-                   (UINamingContainer.COMPONENT_TYPE) instanceof UINamingContainer);
-        assertTrue(application.createComponent
-                   ("javax.faces.Output") instanceof UIOutput);
-        assertTrue(application.createComponent
-                   (UIOutput.COMPONENT_TYPE) instanceof UIOutput);
-        assertTrue(application.createComponent
-                   ("javax.faces.Panel") instanceof UIPanel);
-        assertTrue(application.createComponent
-                   (UIPanel.COMPONENT_TYPE) instanceof UIPanel);
-        assertTrue(application.createComponent
-                   ("javax.faces.Parameter") instanceof UIParameter);
-        assertTrue(application.createComponent
-                   (UIParameter.COMPONENT_TYPE) instanceof UIParameter);
-        assertTrue(application.createComponent
-                   ("javax.faces.SelectBoolean") instanceof UISelectBoolean);
-        assertTrue(application.createComponent
-                   (UISelectBoolean.COMPONENT_TYPE) instanceof UISelectBoolean);
-        assertTrue(application.createComponent
-                   ("javax.faces.SelectItem") instanceof UISelectItem);
-        assertTrue(application.createComponent
-                   (UISelectItem.COMPONENT_TYPE) instanceof UISelectItem);
-        assertTrue(application.createComponent
-                   ("javax.faces.SelectItems") instanceof UISelectItems);
-        assertTrue(application.createComponent
-                   (UISelectItems.COMPONENT_TYPE) instanceof UISelectItems);
-        assertTrue(application.createComponent
-                   ("javax.faces.SelectMany") instanceof UISelectMany);
-        assertTrue(application.createComponent
-                   (UISelectMany.COMPONENT_TYPE) instanceof UISelectMany);
-        assertTrue(application.createComponent
-                   ("javax.faces.SelectOne") instanceof UISelectOne);
-        assertTrue(application.createComponent
-                   (UISelectOne.COMPONENT_TYPE) instanceof UISelectOne);
-
-    }
-
-
-    // Check that all of the required HTML components have been registered
-    private void checkComponentsHtml() throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlCommandButton") instanceof HtmlCommandButton);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlCommandLink") instanceof HtmlCommandLink);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlDataTable") instanceof HtmlDataTable);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlForm") instanceof HtmlForm);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlGraphicImage") instanceof HtmlGraphicImage);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlInputHidden") instanceof HtmlInputHidden);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlInputSecret") instanceof HtmlInputSecret);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlInputText") instanceof HtmlInputText);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlInputTextarea") instanceof HtmlInputTextarea);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlMessage") instanceof HtmlMessage);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlMessages") instanceof HtmlMessages);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlOutputFormat") instanceof HtmlOutputFormat);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlOutputLabel") instanceof HtmlOutputLabel);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlOutputLink") instanceof HtmlOutputLink);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlOutputText") instanceof HtmlOutputText);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlPanelGrid") instanceof HtmlPanelGrid);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlPanelGroup") instanceof HtmlPanelGroup);
-        assertTrue(
-            application.createComponent
-            ("javax.faces.HtmlSelectBooleanCheckbox") instanceof HtmlSelectBooleanCheckbox);
-        assertTrue(
-            application.createComponent
-            ("javax.faces.HtmlSelectManyCheckbox") instanceof HtmlSelectManyCheckbox);
-        assertTrue(
-            application.createComponent
-            ("javax.faces.HtmlSelectManyListbox") instanceof HtmlSelectManyListbox);
-        assertTrue(
-            application.createComponent
-            ("javax.faces.HtmlSelectManyMenu") instanceof HtmlSelectManyMenu);
-        assertTrue(
-            application.createComponent
-            ("javax.faces.HtmlSelectOneListbox") instanceof HtmlSelectOneListbox);
-        assertTrue(application.createComponent
-                   ("javax.faces.HtmlSelectOneMenu") instanceof HtmlSelectOneMenu);
-        assertTrue(
-            application.createComponent
-            ("javax.faces.HtmlSelectOneRadio") instanceof HtmlSelectOneRadio);
-
-    }
-
-
-    // Check that all required by-class Converters have been registered
-    private void checkConvertersByClass() throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        assertTrue(application.createConverter
-                   (BigDecimal.class) instanceof BigDecimalConverter);
-        assertTrue(application.createConverter
-                   (BigInteger.class) instanceof BigIntegerConverter);
-        assertTrue(application.createConverter
-                   (Boolean.class) instanceof BooleanConverter);
-        assertTrue(application.createConverter
-                   (Byte.class) instanceof ByteConverter);
-        assertTrue(application.createConverter
-                   (Character.class) instanceof CharacterConverter);
-        assertTrue(application.createConverter
-                   (Double.class) instanceof DoubleConverter);
-        assertTrue(application.createConverter
-                   (Float.class) instanceof FloatConverter);
-        assertTrue(application.createConverter
-                   (Integer.class) instanceof IntegerConverter);
-        assertTrue(application.createConverter
-                   (Long.class) instanceof LongConverter);
-        assertTrue(application.createConverter
-                   (Short.class) instanceof ShortConverter);
-
-    }
-
-
-    // Check that all required by-id Converters have been registered
-    private void checkConvertersById() throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        assertTrue(application.createConverter
-                   ("javax.faces.BigDecimal") instanceof BigDecimalConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.BigInteger") instanceof BigIntegerConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Boolean") instanceof BooleanConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Byte") instanceof ByteConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Character") instanceof CharacterConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.DateTime") instanceof DateTimeConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Double") instanceof DoubleConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Float") instanceof FloatConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Integer") instanceof IntegerConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Long") instanceof LongConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Number") instanceof NumberConverter);
-        assertTrue(application.createConverter
-                   ("javax.faces.Short") instanceof ShortConverter);
-
-    }
-
-
-    // Check that the default configuration took place
-    private void checkDefaultConfiguration() throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        RenderKitFactory rkFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk =
-            rkFactory.getRenderKit(null,
-                                   RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        assertTrue(application.createComponent
-                   ("DefaultComponent") instanceof TestComponent);
-        assertTrue(application.createConverter
-                   ("DefaultConverter") instanceof TestConverter);
-        assertTrue(application.createValidator
-                   ("DefaultValidator") instanceof TestValidator);
-        assertNotNull(rk.getRenderer("Test", "DefaultRenderer"));
-
-    }
-
-
-    // Check whether embed configuration occurred or did not occur
-    private void checkEmbedConfiguration(boolean should) throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        RenderKitFactory rkFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk =
-            rkFactory.getRenderKit(null,
-                                   RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        if (should) {
-            assertTrue(application.createComponent
-                       ("EmbedComponent") instanceof TestComponent);
-            assertTrue(application.createConverter
-                       ("EmbedConverter") instanceof TestConverter);
-            assertTrue(application.createValidator
-                       ("EmbedValidator") instanceof TestValidator);
-            assertNotNull(rk.getRenderer("Test", "EmbedRenderer"));
-        } else {
-            try {
-                application.createComponent("EmbedComponent");
-                fail("Should have thrown FacesException");
-            } catch (FacesException e) {
-                ; // Expected result
-            }
-            try {
-                application.createConverter("EmbedConverter");
-                fail("Should have thrown FacesException");
-            } catch (FacesException e) {
-                ; // Expected result
-            }
-            try {
-                application.createValidator("EmbedValidator");
-                fail("Should have thrown FacesException");
-            } catch (FacesException e) {
-                ; // Expected result
-            }
-            assertNull(rk.getRenderer("Test", "EmbedRenderer"));
-        }
-
-    }
-
-
-    // Check whether extra configuration occurred or did not occur
-    private void checkExtraConfiguration(boolean should) throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        RenderKitFactory rkFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk =
-            rkFactory.getRenderKit(null,
-                                   RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        if (should) {
-            assertTrue(application.createComponent
-                       ("ExtraComponent") instanceof TestComponent);
-            assertTrue(application.createConverter
-                       ("ExtraConverter") instanceof TestConverter);
-            assertTrue(application.createValidator
-                       ("ExtraValidator") instanceof TestValidator);
-            assertNotNull(rk.getRenderer("Test", "ExtraRenderer"));
-        } else {
-            try {
-                application.createComponent("ExtraComponent");
-                fail("Should have thrown FacesException");
-            } catch (FacesException e) {
-                ; // Expected result
-            }
-            try {
-                application.createConverter("ExtraConverter");
-                fail("Should have thrown FacesException");
-            } catch (FacesException e) {
-                ; // Expected result
-            }
-            try {
-                application.createValidator("ExtraValidator");
-                fail("Should have thrown FacesException");
-            } catch (FacesException e) {
-                ; // Expected result
-            }
-            assertNull(rk.getRenderer("Test", "ExtraRenderer"));
-        }
-
-    }
-
-
-    // Check that all required Renderers have been registered
-    private void checkRenderers() throws Exception {
-
-        RenderKitFactory rkFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk =
-            rkFactory.getRenderKit(null,
-                                   RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        assertNotNull(
-            rk.getRenderer("javax.faces.Command", "javax.faces.Button"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Command", "javax.faces.Link"));
-        assertNotNull(rk.getRenderer("javax.faces.Data", "javax.faces.Table"));
-        assertNotNull(rk.getRenderer("javax.faces.Form", "javax.faces.Form"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Graphic", "javax.faces.Image"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Input", "javax.faces.Hidden"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Input", "javax.faces.Secret"));
-        assertNotNull(rk.getRenderer("javax.faces.Input", "javax.faces.Text"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Input", "javax.faces.Textarea"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Message", "javax.faces.Message"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Messages", "javax.faces.Messages"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Output", "javax.faces.Format"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.Output", "javax.faces.Label"));
-        assertNotNull(rk.getRenderer("javax.faces.Output", "javax.faces.Link"));
-        assertNotNull(rk.getRenderer("javax.faces.Output", "javax.faces.Text"));
-        assertNotNull(rk.getRenderer("javax.faces.Panel", "javax.faces.Grid"));
-        assertNotNull(rk.getRenderer("javax.faces.Panel", "javax.faces.Group"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.SelectBoolean", "javax.faces.Checkbox"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.SelectMany", "javax.faces.Checkbox"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.SelectMany", "javax.faces.Listbox"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.SelectMany", "javax.faces.Menu"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.SelectOne", "javax.faces.Listbox"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.SelectOne", "javax.faces.Menu"));
-        assertNotNull(
-            rk.getRenderer("javax.faces.SelectOne", "javax.faces.Radio"));
-
-    }
-
-
-    // Check that all required Validators have been registered
-    private void checkValidators() throws Exception {
-
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        Application application = afactory.getApplication();
-
-        assertTrue(application.createValidator
-                   ("javax.faces.DoubleRange") instanceof DoubleRangeValidator);
-        assertTrue(application.createValidator
-                   ("javax.faces.Length") instanceof LengthValidator);
-        assertTrue(application.createValidator
-                   ("javax.faces.LongRange") instanceof LongRangeValidator);
-
-
-    }
-
-
-
-
-    // Tests if a particular reset message got logged
-    // See testLogOverriddenContextConfigValues
-    private static class GotMessageFilter implements Filter {
-        private boolean gotLogMessage = false;
-        
-        public boolean isLoggable(LogRecord record) {
-            
-            if (record.getMessage().equals("jsf.config.webconfig.configinfo.reset.enabled") &&
-                record.getParameters()[1].equals(BooleanWebContextInitParameter.ValidateFacesConfigFiles.getQualifiedName())) {
-                gotLogMessage = true;
-            }
-            
-            return true;
-        }
-        
-        public boolean gotLogMessage() {
-            return gotLogMessage;
-        }
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static final class ServletContextWrapper implements ServletContext {
-
-        private ServletContext delegate;
-        private Map<String,String> initParameters;
-
-        ServletContextWrapper(ServletContext delegate) {
-            this.delegate = delegate;
-        }
-
-        void addInitParameter(String name, String value) {
-            if (initParameters == null) {
-                initParameters = new HashMap<String,String>();
-            }
-            initParameters.put(name, value);
-        }
-
-        public String getContextPath() {
-            return delegate.getContextPath();
-        }
-
-        public ServletContext getContext(String s) {
-            return delegate.getContext(s);
-        }
-
-        public int getMajorVersion() {
-            return delegate.getMajorVersion();
-        }
-
-        public int getMinorVersion() {
-            return delegate.getMinorVersion();
-        }
-
-        public String getMimeType(String s) {
-            return delegate.getMimeType(s);
-        }
-
-        public Set getResourcePaths(String s) {
-            return delegate.getResourcePaths(s);
-        }
-
-        public URL getResource(String s) throws MalformedURLException {
-            return delegate.getResource(s);
-        }
-
-        public InputStream getResourceAsStream(String s) {
-            return delegate.getResourceAsStream(s);
-        }
-
-        public RequestDispatcher getRequestDispatcher(String s) {
-            return delegate.getRequestDispatcher(s);
-        }
-
-        public RequestDispatcher getNamedDispatcher(String s) {
-            return delegate.getNamedDispatcher(s);
-        }
-
-        public Servlet getServlet(String s) throws ServletException {
-            return delegate.getServlet(s);
-        }
-
-        public Enumeration getServlets() {
-            return delegate.getServlets();
-        }
-
-        public Enumeration getServletNames() {
-            return getServletNames();
-        }
-
-        public void log(String s) {
-            delegate.log(s);
-        }
-
-        public void log(Exception e, String s) {
-            delegate.log(e, s);
-        }
-
-        public void log(String s, Throwable throwable) {
-            delegate.log(s, throwable);
-        }
-
-        public String getRealPath(String s) {
-            return delegate.getRealPath(s);
-        }
-
-        public String getServerInfo() {
-            return delegate.getServerInfo();
-        }
-
-        public String getInitParameter(String s) {
-            String v = null;
-            if (initParameters != null) {
-                v = initParameters.get(s);
-            }
-            if (v == null) {
-                v = delegate.getInitParameter(s);
-            }
-            return v;
-        }
-
-        public Enumeration getInitParameterNames() {
-            Vector<String> v = new Vector<String>();
-            if (initParameters != null) {
-                for (String key : initParameters.keySet()) {
-                    v.add(key);
-                }
-            }
-            for (Enumeration e = delegate.getInitParameterNames(); e.hasMoreElements(); ) {
-                v.add((String) e.nextElement());
-            }
-            return v.elements();
-        }
-
-        public Object getAttribute(String s) {
-            return delegate.getAttribute(s);
-        }
-
-        public Enumeration getAttributeNames() {
-            return delegate.getAttributeNames();
-        }
-
-        public void setAttribute(String s, Object o) {
-            delegate.setAttribute(s, o);
-        }
-
-        public void removeAttribute(String s) {
-            delegate.removeAttribute(s);
-        }
-
-        public String getServletContextName() {
-            return delegate.getServletContextName();
-        }
-
-        public int getEffectiveMajorVersion() {
-            return 0;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public int getEffectiveMinorVersion() {
-            return 0;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public boolean setInitParameter(String s, String s1) {
-            return false;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public ServletRegistration.Dynamic addServlet(String s, String s1) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public ServletRegistration.Dynamic addServlet(String s, Class<? extends Servlet> aClass) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public <T extends Servlet> T createServlet(Class<T> tClass)
-              throws ServletException {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public ServletRegistration getServletRegistration(String s) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public Map<String, ? extends ServletRegistration> getServletRegistrations() {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public FilterRegistration.Dynamic addFilter(String s, String s1) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public FilterRegistration.Dynamic addFilter(String s, javax.servlet.Filter filter) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public FilterRegistration.Dynamic addFilter(String s, Class<? extends javax.servlet.Filter> aClass) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public <T extends javax.servlet.Filter> T createFilter(Class<T> tClass)
-              throws ServletException {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public FilterRegistration getFilterRegistration(String s) {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public SessionCookieConfig getSessionCookieConfig() {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) {
-            //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public void addListener(String s) {
-            //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public <T extends EventListener> void addListener(T t) {
-            //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public void addListener(Class<? extends EventListener> aClass) {
-            //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public <T extends EventListener> T createListener(Class<T> tClass)
-              throws ServletException {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public JspConfigDescriptor getJspConfigDescriptor() {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public ClassLoader getClassLoader() {
-            return null;  //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-        public void declareRoles(String... strings) {
-            //To change body of implemented methods use File | Settings | File Templates.
-        }
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/NewCustomerFormHandler.java b/jsf-ri/test/com/sun/faces/config/NewCustomerFormHandler.java
deleted file mode 100644
index 0df52ed..0000000
--- a/jsf-ri/test/com/sun/faces/config/NewCustomerFormHandler.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.config;
-
-import java.util.HashMap;
-import java.util.List;
-
-public class NewCustomerFormHandler {
-
-
-    public NewCustomerFormHandler() {
-    }
-
-
-    public String loginRequired() {
-        return "loginRequired";
-    }
-
-
-    private String minimumAge;
-
-
-    public String getMinimumAge() {
-        return minimumAge;
-    }
-
-
-    public void setMinimumAge(String minimumAge) {
-        this.minimumAge = minimumAge;
-    }
-
-
-    private String maximumAge;
-
-
-    public String getMaximumAge() {
-        return maximumAge;
-    }
-
-
-    public void setMaximumAge(String maximumAge) {
-        this.maximumAge = maximumAge;
-    }
-
-
-    private String nationality;
-
-
-    public String getNationality() {
-        return nationality;
-    }
-
-
-    public void setNationality(String nationality) {
-        this.nationality = nationality;
-    }
-
-
-    private List allowableValues;
-
-
-    public List getAllowableValues() {
-        return allowableValues;
-    }
-
-
-    public void setAllowableValues(List allowableValues) {
-        this.allowableValues = allowableValues;
-    }
-
-
-    private String[] firstNames = {
-        "bob",
-        "jerry"
-    };
-
-
-    public String[] getFirstNames() {
-        return firstNames;
-    }
-
-
-    public void setFirstNames(String[] newNames) {
-        firstNames = newNames;
-    }
-
-
-    private HashMap claimAmounts;
-
-
-    public HashMap getClaimAmounts() {
-        return claimAmounts;
-    }
-
-
-    public void setClaimAmounts(HashMap claimAmounts) {
-        this.claimAmounts = claimAmounts;
-    }
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/NonManagedBean.java b/jsf-ri/test/com/sun/faces/config/NonManagedBean.java
deleted file mode 100644
index 7af94ce..0000000
--- a/jsf-ri/test/com/sun/faces/config/NonManagedBean.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-public class NonManagedBean {
-
-    public NonManagedBean() {};
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/SimpleBean.java b/jsf-ri/test/com/sun/faces/config/SimpleBean.java
deleted file mode 100644
index 5ce94c5..0000000
--- a/jsf-ri/test/com/sun/faces/config/SimpleBean.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.config;
-
-public class SimpleBean {
-
-    private String simpleProperty;
-
-
-    public SimpleBean() {
-    }
-
-
-    public String getSimpleProperty() {
-        return simpleProperty;
-    }
-
-
-    public void setSimpleProperty(String simpleProperty) {
-        this.simpleProperty = simpleProperty;
-    }
-
-
-    Integer intProp = null;
-
-
-    public void setIntProperty(Integer newVal) {
-        intProp = newVal;
-    }
-
-
-    public Integer getIntProperty() {
-        return intProp;
-    }
-
-
-    public boolean getTrueValue() {
-        return true;
-    }
-
-
-    public boolean getFalseValue() {
-        return false;
-    }
-
-    private NonManagedBean nonManagedBean = null;
-    public NonManagedBean getNonManagedBean() {
-        return nonManagedBean;
-    }
-    public void setNonManagedBean(NonManagedBean nmb) {
-        nonManagedBean = nmb;
-    }
-
-    private String headerClass = "column-header";
-    public String getHeaderClass() {
-        return headerClass;
-    }
-    public void setHeaderClass(String headerClass) {
-        this.headerClass = headerClass;
-    }
-    private String footerClass = "column-footer";
-    public String getFooterClass() {
-        return footerClass;
-    }
-    public void setFooterClass(String footerClass) {
-        this.footerClass = footerClass;
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/config/SimplePhaseListener.java b/jsf-ri/test/com/sun/faces/config/SimplePhaseListener.java
deleted file mode 100644
index d06cc38..0000000
--- a/jsf-ri/test/com/sun/faces/config/SimplePhaseListener.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.config;
-
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-
-public class SimplePhaseListener implements PhaseListener {
-
-    private static final String HANDLED_BEFORE_AFTER = "Handled Before After";
-
-    private boolean handledBefore = false;
-    private boolean handledAfter = false;
-
-
-    public SimplePhaseListener() {
-    }
-
-
-    public void afterPhase(PhaseEvent event) {
-        handledAfter = true;
-        if (handledBefore && handledAfter) {
-            System.setProperty(HANDLED_BEFORE_AFTER, HANDLED_BEFORE_AFTER);
-        }
-    }
-
-
-    public void beforePhase(PhaseEvent event) {
-        handledBefore = true;
-    }
-
-
-    public PhaseId getPhaseId() {
-        return PhaseId.APPLY_REQUEST_VALUES;
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/config/StoreServletContext.java b/jsf-ri/test/com/sun/faces/config/StoreServletContext.java
deleted file mode 100644
index ef55e08..0000000
--- a/jsf-ri/test/com/sun/faces/config/StoreServletContext.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.config;
-
-import java.io.UnsupportedEncodingException;
-import javax.servlet.ServletContext;
-import javax.faces.context.ExternalContext;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.Locale;
-import java.util.Iterator;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.cactus.TestingUtil;
-
-/**
- * <p>The purpose of this class is to call the package private
- * getThreadLocalServletContext() method to set the ServletContext into
- * ThreadLocalStorage, if IS_UNIT_TEST_MODE == true.</p>
- */
-
-public class StoreServletContext extends Object {
-    ExternalContext ec = null;
-
-    public void setServletContext(ServletContext sc) {
-        ec = new ServletContextAdapter(sc);
-
-        ThreadLocal<ServletContextAdapter> threadLocal =
-            (ThreadLocal<ServletContextAdapter>)
-                TestingUtil.invokePrivateMethod("getThreadLocalExternalContext",
-                                                RIConstants.EMPTY_CLASS_ARGS,
-                                                RIConstants.EMPTY_METH_ARGS,
-                                                ConfigureListener.class,
-                                                null);
-        threadLocal.set(new ServletContextAdapter(sc));
-    }
-
-    public ExternalContext getServletContextWrapper() {
-        return ec;
-    }
-
-    public class ServletContextAdapter extends ExternalContext {
-
-        private ServletContext servletContext = null;
-        private ApplicationMap applicationMap = null;
-
-        public ServletContextAdapter(ServletContext sc) {
-            this.servletContext = sc;
-        }
-
-        public void dispatch(String path) throws java.io.IOException {
-        }
-
-        public String encodeActionURL(String url) {
-            return null;
-        }
-
-        public String encodeNamespace(String name) {
-            return null;
-        }
-
-        public String encodePartialActionURL(String viewId) {
-            return null;
-        }
-
-        public String encodeResourceURL(String url) {
-            return null;
-        }
-
-       public Map getApplicationMap() {
-            if (applicationMap == null) {
-                applicationMap = new ApplicationMap(servletContext);
-            }
-            return applicationMap;
-        }
-
-        public String getAuthType() {
-            return null;
-        }
-
-        public String getMimeType(String file) {
-            return servletContext.getMimeType(file);
-        }
-
-        public Object getContext() {
-            return servletContext;
-        }
-
-	public String getContextName() {
-	    return servletContext.getServletContextName();
-	}
-
-
-        public String getInitParameter(String name) {
-            return null;
-        }
-
-        public Map getInitParameterMap() {
-            return null;
-        }
-
-        public String getRemoteUser() {
-            return null;
-        }
-
-
-        public Object getRequest() {
-            return null;
-        }
-
-    public void setRequest(Object request) {}
-
-
-        public String getRequestCharacterEncoding() {
-            return null;
-        }
-
-        public void setRequestCharacterEncoding(String requestCharacterEncoding) throws UnsupportedEncodingException {
-
-        }
-
-        public String getResponseCharacterEncoding() {
-            return null;
-        }
-
-        public void setResponseCharacterEncoding(String responseCharacterEncoding) {
-        }
-
-        public void setResponseHeader(String name, String value) {
-        }
-
-        public void addResponseHeader(String name, String value) {
-        }
-
-        public String getRequestContextPath() {
-            return null;
-        }
-
-        public Map getRequestCookieMap() {
-            return null;
-        }
-
-        public Map getRequestHeaderMap() {
-            return null;
-        }
-
-
-        public Map getRequestHeaderValuesMap() {
-            return null;
-        }
-
-
-        public Locale getRequestLocale() {
-            return null;
-        }
-
-        public Iterator getRequestLocales() {
-            return null;
-        }
-
-
-
-        public Map getRequestMap() {
-            return null;
-        }
-
-
-        public Map getRequestParameterMap() {
-            return null;
-        }
-
-
-        public Iterator getRequestParameterNames() {
-            return null;
-        }
-
-
-        public Map getRequestParameterValuesMap() {
-            return null;
-        }
-
-
-        public String getRequestPathInfo() {
-            return null;
-        }
-
-
-        public String getRequestServletPath() {
-            return null;
-        }
-
-
-        public String getRequestContentType() {
-            return null;
-        }
-
-	public int getRequestContentLength() {
-	    return -1;
-	}
-
-        public String getResponseContentType() {
-            return null;
-        }
-
-        public java.net.URL getResource(String path) throws
-                                                     java.net.MalformedURLException {
-            return null;
-        }
-
-
-        public java.io.InputStream getResourceAsStream(String path) {
-            return null;
-        }
-
-        public Set getResourcePaths(String path) {
-            return null;
-        }
-
-        public Object getResponse() {
-            return null;
-        }
-
-    public void setResponse(Object response) {}
-
-        public Object getSession(boolean create) {
-            return null;
-        }
-
-        public Map getSessionMap() {
-            return null;
-        }
-
-        public java.security.Principal getUserPrincipal() {
-            return null;
-        }
-
-        public boolean isUserInRole(String role) {
-            return false;
-        }
-
-        public void log(String message) {
-        }
-
-        public void log(String message, Throwable exception){
-        }
-
-        public void redirect(String url) throws java.io.IOException {
-        }
-
-    }
-
-    class ApplicationMap extends java.util.AbstractMap {
-
-        private ServletContext servletContext = null;
-
-        ApplicationMap(ServletContext servletContext) {
-            this.servletContext = servletContext;
-        }
-
-
-        public Object get(Object key) {
-            if (key == null) {
-                throw new NullPointerException();
-            }
-            return servletContext.getAttribute(key.toString());
-        }
-
-
-        public Object put(Object key, Object value) {
-            if (key == null) {
-                throw new NullPointerException();
-            }
-            String keyString = key.toString();
-            Object result = servletContext.getAttribute(keyString);
-            servletContext.setAttribute(keyString, value);
-            return (result);
-        }
-
-
-        public Object remove(Object key) {
-            if (key == null) {
-                return null;
-            }
-            String keyString = key.toString();
-            Object result = servletContext.getAttribute(keyString);
-            servletContext.removeAttribute(keyString);
-            return (result);
-        }
-
-
-        public Set entrySet() {
-           throw new UnsupportedOperationException();
-        }
-
-
-        public boolean equals(Object obj) {
-            if (obj == null || !(obj instanceof ApplicationMap))
-                return false;
-            return super.equals(obj);
-        }
-
-        public void clear() {
-            throw new UnsupportedOperationException();
-        }
-
-        public void putAll(Map t) {
-            throw new UnsupportedOperationException();
-        }
-
-
-    } // END ApplicationMap
-}
-
diff --git a/jsf-ri/test/com/sun/faces/config/TestComponent.java b/jsf-ri/test/com/sun/faces/config/TestComponent.java
deleted file mode 100644
index 35b1a15..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestComponent.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-
-import javax.faces.component.UIOutput;
-
-
-// Dummy component that can be instantiated
-
-public class TestComponent extends UIOutput {
-
-
-    public String getFamily() {
-        return "Test";
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/TestConfigListener.java b/jsf-ri/test/com/sun/faces/config/TestConfigListener.java
deleted file mode 100644
index 82a5cc4..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestConfigListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.apache.cactus.ServletTestCase;
-
-import javax.servlet.ServletContextEvent;
-
-/**
- * <p>Unit tests for Configuration File processing.</p>
- */
-
-public class TestConfigListener extends ServletFacesTestCase {
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public TestConfigListener(String name) {
-
-        super(name);
-
-    }
-
-
-    // --------------------------------------------------- Overall Test Methods
-
-
-
-
-    // ------------------------------------------------ Individual Test Methods
-
-    // this method manually invokes the ContextListener contextInitialized method
-    // multiple times to ensure the parsing logic only gets executed once
-    // (for the same webapp).
-    //
-    public void testContextInitialized() {
-        ConfigureListener cl = new ConfigureListener();
-        ServletContextEvent e = new ServletContextEvent(
-            getConfig().getServletContext());
-        cl.contextInitialized(e);
-        cl.contextInitialized(e);
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/config/TestConverter.java b/jsf-ri/test/com/sun/faces/config/TestConverter.java
deleted file mode 100644
index b92f0f4..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestConverter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-
-import javax.faces.convert.IntegerConverter;
-
-
-// Dummy converter that can be instantiated
-
-public class TestConverter extends IntegerConverter {
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/TestFacesConfigOrdering.java b/jsf-ri/test/com/sun/faces/config/TestFacesConfigOrdering.java
deleted file mode 100644
index 07a3560..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestFacesConfigOrdering.java
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Arrays;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.faces.context.FacesContext;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Attr;
-
-/**
- * Test cases to validate faces-config ordering.
- */
-public class TestFacesConfigOrdering extends ServletFacesTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestFacesConfigOrdering()  {
-
-        this("TestFacesConfigOrdering");
-
-    }
-
-
-    public TestFacesConfigOrdering(String name) {
-
-        super(name);
-
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testDocumentOrderingWrapperInit() throws Exception {
-
-        // this should test segment should fail since this document is
-        // before and after A
-        List<String> docBeforeIds = new ArrayList<String>();
-        Collections.addAll(docBeforeIds, "A");
-        List<String> docAfterIds = new ArrayList<String>();
-        Collections.addAll(docAfterIds, "A");
-
-        try {
-            new DocumentOrderingWrapper(createDocument("MyDoc", docBeforeIds, docAfterIds));
-            fail("Expected DocumentOrderingWrapper to throw an exception when the wrapped document was configured to be before and after the same document.");
-        } catch (ConfigurationException ce) {
-            // expected
-        }
-
-
-        // this test segment ensures that 'empty defaults will be used if the
-        // document has no document ID.
-        DocumentOrderingWrapper w = new DocumentOrderingWrapper(createDocument(null, docBeforeIds, null));
-        assertEquals("Expected DocumentOrderingWrapper.getDocumentId() to return an empty string when no ID was specified.  Received: " + w.getDocumentId(), "", w.getDocumentId());
-        assertTrue(Arrays.equals(new String[] { "A" }, w.getBeforeIds()));
-        assertTrue(Arrays.equals(new String[] {  }, w.getAfterIds()));
-
-        docAfterIds.clear();
-        Collections.addAll(docAfterIds, "others");
-        w = new DocumentOrderingWrapper(createDocument("MyDoc", docBeforeIds, docAfterIds));
-        assertEquals("Expected DocumentOrderingWrapper.getDocumentId() to return MyDoc, received: " + w.getDocumentId(), "MyDoc", w.getDocumentId());
-        assertTrue(Arrays.equals(new String[] { "A" }, w.getBeforeIds()));
-        assertTrue(Arrays.equals(new String[] { "others" }, w.getAfterIds()));
-        
-    }
-
-
-    public void testAfterAfterOthersBeforeBeforeOthers() throws Exception {
-
-        List<String> docAAfterIds = new ArrayList<String>();
-        Collections.addAll(docAAfterIds, "@others", "C");
-        List<String> docCAfterIds = new ArrayList<String>();
-        Collections.addAll(docCAfterIds, "@others");
-        List<String> docBBeforeIds = new ArrayList<String>();
-        Collections.addAll(docBBeforeIds, "@others");
-        List<String> docFBeforeIds = new ArrayList<String>();
-        Collections.addAll(docFBeforeIds, "B", "@others");
-        DocumentInfo docA = createDocument("A", null, docAAfterIds);
-        DocumentInfo docB = createDocument("B", docBBeforeIds, null);
-        DocumentInfo docC = createDocument("C", null, docCAfterIds);
-        DocumentInfo docD = createDocument("D", null, null);
-        DocumentInfo docE = createDocument("E", null, null);
-        DocumentInfo docF = createDocument("F", docFBeforeIds, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD),
-                           new DocumentOrderingWrapper(docE),
-                           new DocumentOrderingWrapper(docF));
-
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-        String[] ids = { "F", "B", "D", "E", "C", "A" };
-        validate(ids, wrappers);
-
-    }
-
-
-    public void testBeforeAfterOthersSorting() throws Exception {
-
-        List<String> docAAfterIds = new ArrayList<String>();
-        Collections.addAll(docAAfterIds, "@others");
-
-        List<String> docABeforeIds = new ArrayList<String>();
-        Collections.addAll(docABeforeIds, "C");
-
-        List<String> docBBeforeIds = new ArrayList<String>();
-        Collections.addAll(docBBeforeIds, "@others");
-
-        List<String> docDAfterIds = new ArrayList<String>();
-        Collections.addAll(docDAfterIds, "@others");
-
-        List<String> docEBeforeIds = new ArrayList<String>();
-        Collections.addAll(docEBeforeIds, "@others");
-
-        DocumentInfo docA = createDocument(null, docABeforeIds, docAAfterIds); // no ID here to ensure this works
-        DocumentInfo docB = createDocument("B", docBBeforeIds, null);
-        DocumentInfo docC = createDocument("C", null, null);
-        DocumentInfo docD = createDocument("D", null, docDAfterIds);
-        DocumentInfo docE = createDocument("E", docEBeforeIds, null);
-        DocumentInfo docF = createDocument("F", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD),
-                           new DocumentOrderingWrapper(docE),
-                           new DocumentOrderingWrapper(docF));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-        String[] ids = { "B", "E", "F", "", "C", "D" };
-        validate(ids, wrappers);
-
-    }
-
-
-    public void testAfterBeforeOthersSorting() throws Exception {
-
-        List<String> docAAfterIds = new ArrayList<String>();
-        Collections.addAll(docAAfterIds, "@others");
-
-        List<String> docBBeforeIds = new ArrayList<String>();
-        Collections.addAll(docBBeforeIds, "@others");
-
-        List<String> docDAfterIds = new ArrayList<String>();
-        Collections.addAll(docDAfterIds, "@others");
-
-        List<String> docEBeforeIds = new ArrayList<String>();
-        Collections.addAll(docEBeforeIds, "@others");
-        List<String> docEAfterIds = new ArrayList<String>();
-        Collections.addAll(docEAfterIds, "C");
-
-        DocumentInfo docA = createDocument("A", null, docAAfterIds);
-        DocumentInfo docB = createDocument("B", docBBeforeIds, null);
-        DocumentInfo docC = createDocument("C", null, null);
-        DocumentInfo docD = createDocument("D", null, docDAfterIds);
-        DocumentInfo docE = createDocument("E", docEBeforeIds, docEAfterIds);
-        DocumentInfo docF = createDocument("F", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD),
-                           new DocumentOrderingWrapper(docE),
-                           new DocumentOrderingWrapper(docF));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-        String[] ids = { "B", "C", "E", "F", "A", "D" };
-        validate(ids, wrappers);
-
-    }
-
-
-
-
-    public void testSpecSimple() throws Exception {
-
-        List<String> docAAfterIds = new ArrayList<String>();
-        Collections.addAll(docAAfterIds, "B");
-        List<String> docCBeforeIds = new ArrayList<String>();
-        Collections.addAll(docCBeforeIds, "@others");
-        DocumentInfo docA = createDocument("A", null, docAAfterIds);
-        DocumentInfo docB = createDocument("B", null, null);
-        DocumentInfo docC = createDocument("C", docCBeforeIds, null);
-        DocumentInfo docD = createDocument("D", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-        String[] ids = { "C", "B", "D", "A" };
-        validate(ids, wrappers);
-
-    }
-
-
-    public void testBeforeIdAfterOthers() throws Exception {
-
-        List<String> docCBeforeIds = new ArrayList<String>();
-        Collections.addAll(docCBeforeIds, "B");
-        List<String> docCAfterIds = new ArrayList<String>();
-        Collections.addAll(docCAfterIds, "@others");
-        DocumentInfo docA = createDocument("A", null, null);
-        DocumentInfo docB = createDocument("B", null, null);
-        DocumentInfo docC = createDocument("C", docCBeforeIds, docCAfterIds);
-        DocumentInfo docD = createDocument("D", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-                String[] ids = { "A", "D", "C", "B" };
-        validate(ids, wrappers);
-
-    }
-
-
-    public void testAfterIdBeforeOthers() throws Exception {
-
-        List<String> docCAfterIds = new ArrayList<String>();
-        Collections.addAll(docCAfterIds, "D");
-        List<String> docCBeforeIds = new ArrayList<String>();
-        Collections.addAll(docCBeforeIds, "@others");
-        DocumentInfo docA = createDocument("A", null, null);
-        DocumentInfo docB = createDocument("B", null, null);
-        DocumentInfo docC = createDocument("C", docCBeforeIds, docCAfterIds);
-        DocumentInfo docD = createDocument("D", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-                String[] ids = { "D", "C", "A", "B" };
-        validate(ids, wrappers);
-
-    }
-
-    
-    public void testAllAfterSpecificIds() throws Exception {
-
-        List<String> docAAfterIds = new ArrayList<String>();
-        List<String> docBAfterIds = new ArrayList<String>();
-        List<String> docCAfterIds = new ArrayList<String>();
-        Collections.addAll(docAAfterIds, "B");
-        Collections.addAll(docBAfterIds, "C");
-        Collections.addAll(docCAfterIds, "D");
-        DocumentInfo docA = createDocument("A", null, docAAfterIds);
-        DocumentInfo docB = createDocument("B", null, docBAfterIds);
-        DocumentInfo docC = createDocument("C", null, docCAfterIds);
-        DocumentInfo docD = createDocument("D", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-                String[] ids = { "D", "C", "B", "A" };
-        validate(ids, wrappers);
-
-    }
-
-
-    public void testAllBeforeSpecificIds() throws Exception {
-
-        List<String> docBBeforeIds = new ArrayList<String>();
-        List<String> docCBeforeIds = new ArrayList<String>();
-        List<String> docDBeforeIds = new ArrayList<String>();
-        Collections.addAll(docBBeforeIds, "A");
-        Collections.addAll(docCBeforeIds, "B");
-        Collections.addAll(docDBeforeIds, "C");
-        DocumentInfo docA = createDocument("A", null, null);
-        DocumentInfo docB = createDocument("B", docBBeforeIds, null);
-        DocumentInfo docC = createDocument("C", docCBeforeIds, null);
-        DocumentInfo docD = createDocument("D", docDBeforeIds, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-                String[] ids = { "D", "C", "B", "A" };
-        validate(ids, wrappers);
-
-    }
-
-
-    public void testMixed1() throws Exception {
-
-        List<String> docBAfterIds = new ArrayList<String>();
-        List<String> docCBeforeIds = new ArrayList<String>();
-        Collections.addAll(docBAfterIds, "C");
-        Collections.addAll(docCBeforeIds, "B");
-        DocumentInfo docA = createDocument("A", null, null);
-        DocumentInfo docB = createDocument("B", null, docBAfterIds);
-        DocumentInfo docC = createDocument("C", docCBeforeIds, null);
-        DocumentInfo docD = createDocument("D", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        DocumentOrderingWrapper.sort(wrappers);
-                String[] ids = { "A", "C", "D", "B" };
-        validate(ids, wrappers);
-
-    }
-
-
-    public void testCyclic1() throws Exception {
-
-        List<String> docABeforeIds = new ArrayList<String>();
-        List<String> docBBeforeIds = new ArrayList<String>();
-        List<String> docCBeforeIds = new ArrayList<String>();
-        Collections.addAll(docABeforeIds, "C");
-        Collections.addAll(docBBeforeIds, "A");
-        Collections.addAll(docCBeforeIds, "B");
-        DocumentInfo docA = createDocument("A", docABeforeIds, null);
-        DocumentInfo docB = createDocument("B", docBBeforeIds, null);
-        DocumentInfo docC = createDocument("C", docCBeforeIds, null);
-        DocumentInfo docD = createDocument("D", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-
-        try {
-            DocumentOrderingWrapper.sort(wrappers);
-            fail("No exception thrown when circular document dependency is present");
-        } catch (ConfigurationException ce) {
-            // expected
-        }
-
-    }
-
-
-    public void testCyclic2() throws Exception {
-
-        List<String> docAAfterIds = new ArrayList<String>();
-        List<String> docBAfterIds = new ArrayList<String>();
-        List<String> docCAfterIds = new ArrayList<String>();
-        Collections.addAll(docAAfterIds, "B");
-        Collections.addAll(docBAfterIds, "C");
-        Collections.addAll(docCAfterIds, "A");
-        DocumentInfo docA = createDocument("A", null, docAAfterIds);
-        DocumentInfo docB = createDocument("B", null, docBAfterIds);
-        DocumentInfo docC = createDocument("C", null, docCAfterIds);
-        DocumentInfo docD = createDocument("D", null, null);
-
-        List<DocumentOrderingWrapper> documents =
-              new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(documents,
-                           new DocumentOrderingWrapper(docA),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docD));
-        DocumentOrderingWrapper[] wrappers =
-              documents.toArray(new DocumentOrderingWrapper[documents.size()]);
-        
-        try {
-            DocumentOrderingWrapper.sort(wrappers);
-            fail("No exception thrown when circular document dependency is present");
-        } catch (ConfigurationException ce) {
-            // expected
-        }
-
-    }
-
-
-    public void testAbsoluteDocumentOrderingAPI() throws Exception {
-
-        Document d = parseDocumentAsWebInfFacesConfig(getFacesContext(), "/WEB-INF/webinfAbsolute1.xml");
-        FacesConfigInfo info = new FacesConfigInfo(new DocumentInfo(d, null));
-        assertTrue(info.isWebInfFacesConfig());
-        assertTrue(info.isVersionGreaterOrEqual(2.0));
-        assertFalse(info.isMetadataComplete());
-        List<String> ordering = info.getAbsoluteOrdering();
-        assertNotNull(ordering);
-        assertEquals(3, ordering.size());
-        assertEquals("a", ordering.get(0));
-        assertEquals("b", ordering.get(1));
-        assertEquals("c", ordering.get(2));
-
-        d = parseDocumentAsWebInfFacesConfig(getFacesContext(), "/WEB-INF/webinfAbsolute2.xml");
-        info = new FacesConfigInfo(new DocumentInfo(d, null));
-        assertTrue(info.isWebInfFacesConfig());
-        assertTrue(info.isVersionGreaterOrEqual(2.0));
-        assertTrue(info.isMetadataComplete());
-        ordering = info.getAbsoluteOrdering();
-        assertNotNull(ordering);
-        assertEquals(4, ordering.size());
-        assertEquals("a", ordering.get(0));
-        assertEquals("b", ordering.get(1));
-        assertEquals("others", ordering.get(2));
-        assertEquals("c", ordering.get(3));
-
-        d = parseDocumentAsWebInfFacesConfig(getFacesContext(), "/WEB-INF/webinfAbsolute3.xml");
-        info = new FacesConfigInfo(new DocumentInfo(d, null));
-        assertTrue(info.isWebInfFacesConfig());
-        assertFalse(info.isVersionGreaterOrEqual(2.0));
-        assertTrue(info.isMetadataComplete());
-        ordering = info.getAbsoluteOrdering();
-        assertNull(ordering);
-
-        d = parseDocument(getFacesContext(), "/WEB-INF/webinfAbsolute1.xml");
-        info = new FacesConfigInfo(new DocumentInfo(d, null));
-        assertFalse(info.isWebInfFacesConfig());
-
-    }
-
-
-    public void testAbsoluteOrderingProcessing() throws Exception {
-
-        DocumentInfo docA = createDocument("a", null, null);
-        DocumentInfo docB = createDocument("b", null, null);
-        DocumentInfo docC = createDocument("c", null, null);
-        DocumentInfo docD = createDocument("d", null, null);
-        DocumentInfo docE = createDocument("e", null, null);
-        DocumentInfo docF = createDocument("f", null, null);
-        List<DocumentOrderingWrapper> wrappers = new ArrayList<DocumentOrderingWrapper>();
-        Collections.addAll(wrappers,
-                           new DocumentOrderingWrapper(docF),
-                           new DocumentOrderingWrapper(docE),
-                           new DocumentOrderingWrapper(docD),
-                           new DocumentOrderingWrapper(docC),
-                           new DocumentOrderingWrapper(docB),
-                           new DocumentOrderingWrapper(docA));
-        DocumentOrderingWrapper[] documentWrappers =
-              wrappers.toArray(new DocumentOrderingWrapper[wrappers.size()]);
-
-        Document d = parseDocumentAsWebInfFacesConfig(getFacesContext(), "/WEB-INF/webinfAbsolute1.xml");
-        FacesConfigInfo info = new FacesConfigInfo(new DocumentInfo(d, null));
-        List<String> ordering = info.getAbsoluteOrdering();
-        DocumentOrderingWrapper[] result =
-              DocumentOrderingWrapper.sort(documentWrappers, ordering);
-        assertEquals(3, result.length);
-        assertEquals("a", result[0].getDocumentId());
-        assertEquals("b", result[1].getDocumentId());
-        assertEquals("c", result[2].getDocumentId());
-
-        d = parseDocumentAsWebInfFacesConfig(getFacesContext(), "/WEB-INF/webinfAbsolute2.xml");
-        info = new FacesConfigInfo(new DocumentInfo(d, null));
-        ordering = info.getAbsoluteOrdering();
-        result =
-              DocumentOrderingWrapper.sort(documentWrappers, ordering);
-        assertEquals(6, result.length);
-        assertEquals("a", result[0].getDocumentId());
-        assertEquals("b", result[1].getDocumentId());
-        assertEquals("d", result[2].getDocumentId());
-        assertEquals("e", result[3].getDocumentId());
-        assertEquals("f", result[4].getDocumentId());
-        assertEquals("c", result[5].getDocumentId());
-    }
-
-
-    // ---------------------------------------------------------- Helper Methods
-
-
-    private void validate(String[] ids, DocumentOrderingWrapper[] wrappers) {
-
-        for (int i = 0; i < wrappers.length; i++) {
-            assertEquals("Expected ID " + ids[i] + " at index " + i + ", but received " + wrappers[i].getDocumentId(), ids[i], wrappers[i].getDocumentId());
-        }
-
-    }
-
-
-    private Document parseDocument(FacesContext ctx, String path) throws Exception {
-
-        DocumentBuilderFactory factory = DbfFactory.getFactory();
-        factory.setValidating(true);
-        DocumentBuilder builder = factory.newDocumentBuilder();
-        return builder.parse(ctx.getExternalContext().getResourceAsStream(path));
-
-    }
-
-
-    private Document parseDocumentAsWebInfFacesConfig(FacesContext ctx, String path) throws Exception {
-
-        Document d = parseDocument(ctx, path);
-        Attr webInf = d.createAttribute(ConfigManager.WEB_INF_MARKER);
-        webInf.setValue("true");
-        d.getDocumentElement().getAttributes().setNamedItem(webInf);
-        return d;
-
-    }
-    
-
-    private DocumentInfo createDocument(String documentId,
-                                    List<String> beforeIds,
-                                    List<String> afterIds)
-          throws Exception {
-
-        String ns = "http://java.sun.com/xml/ns/javaee";
-        Document document = newDocument();
-        Element root = document.createElementNS(ns, "faces-config");
-        if (documentId != null) {
-            Element nameElement = document.createElementNS(ns, "name");
-            nameElement.setTextContent(documentId);
-            root.appendChild(nameElement);
-        }
-        document.appendChild(root);
-        boolean hasBefore = (beforeIds != null && !beforeIds.isEmpty());
-        boolean hasAfter = (afterIds != null && !afterIds.isEmpty());
-        boolean createOrdering = (hasBefore || hasAfter);
-        if (createOrdering) {
-            Element ordering = document.createElementNS(ns, "ordering");
-            root.appendChild(ordering);
-            if (hasBefore) {
-                populateIds("before", beforeIds, ns, document, ordering);
-            }
-            if (hasAfter) {
-                populateIds("after", afterIds, ns, document, ordering);
-            }
-        }
-
-        return new DocumentInfo(document, null);
-
-    }
-
-
-    private void populateIds(String elementName,
-                             List<String> ids,
-                             String ns,
-                             Document document,
-                             Element ordering) {
-
-        Element element = document.createElementNS(ns, elementName);
-        ordering.appendChild(element);
-        for (String id : ids) {
-            Element append;
-            if ("@others".equals(id)) {
-                append = document.createElementNS(ns, "others");
-            } else {
-                append = document.createElementNS(ns, "name");
-                append.setTextContent(id);
-            }
-            element.appendChild(append);
-        }
-
-    }
-
-
-    private Document newDocument() throws ParserConfigurationException {
-
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setValidating(false);
-        factory.setNamespaceAware(true);
-        return factory.newDocumentBuilder().newDocument();
-
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/TestFactoryInjection.java b/jsf-ri/test/com/sun/faces/config/TestFactoryInjection.java
deleted file mode 100644
index d53bf89..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestFactoryInjection.java
+++ /dev/null
@@ -1,874 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import java.lang.reflect.Field;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.security.Principal;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.render.RenderKit;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.behavior.Behavior;
-import javax.faces.context.FacesContext;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-import javax.faces.context.ExternalContextFactory;
-import javax.faces.convert.Converter;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-import javax.faces.validator.Validator;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.servlet.ServletContext;
-
-import com.sun.faces.application.InjectionApplicationFactory;
-import com.sun.faces.application.ApplicationFactoryImpl;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.ApplicationImpl;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.config.processor.FactoryConfigProcessor;
-import com.sun.faces.context.FacesContextFactoryImpl;
-import com.sun.faces.context.FacesContextImpl;
-import com.sun.faces.context.ExceptionHandlerFactoryImpl;
-import com.sun.faces.context.ExternalContextFactoryImpl;
-import com.sun.faces.context.InjectionFacesContextFactory;
-import com.sun.faces.context.ExternalContextImpl;
-import com.sun.faces.lifecycle.LifecycleImpl;
-import com.sun.faces.renderkit.RenderKitFactoryImpl;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-
- at SuppressWarnings({"deprecation"})
-public class TestFactoryInjection extends ServletFacesTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestFactoryInjection() {
-        super("TestFactoryFinder");
-    }
-
-
-    public TestFactoryInjection(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testFactoryFinderApplicationInjection() throws Exception {
-
-        Document d = newFacesConfigDocument();
-        Node facesConfig = d.getFirstChild();
-        Element factory = createElement(d, "factory");
-        facesConfig.appendChild(factory);
-        Element application = createElement(d, "application-factory");
-        factory.appendChild(application);
-        application.setTextContent("com.sun.faces.application.ApplicationFactoryImpl");
-
-        // clear the factories
-        FactoryFinder.releaseFactories();
-        ApplicationAssociate.clearInstance(getFacesContext().getExternalContext());
-
-        // invoke the FactoryConfigProcessor
-        FactoryConfigProcessor fcp = new FactoryConfigProcessor(false);
-        fcp.process((ServletContext) getFacesContext().getExternalContext().getContext(),
-                    new DocumentInfo[] { new DocumentInfo(d, null) });
-
-        // now get an Application instance from the Factory and ensure
-        // no injection occured.
-        ApplicationFactory appFactory = (ApplicationFactory)
-              FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        assertNotNull(appFactory);
-        assertNull(appFactory.getWrapped());
-        Application app = appFactory.getApplication();
-        // reflect the 'defaultApplication' field to ensure it's null
-        Field field = Application.class.getDeclaredField("defaultApplication");
-        field.setAccessible(true);
-        assertNull(field.get(app));
-
-        // reset for the injection portion of the test
-        FactoryFinder.releaseFactories();
-        ApplicationAssociate.clearInstance(getFacesContext().getExternalContext());
-
-        // add another factory to our document
-        Element application2 = createElement(d, "application-factory");
-        factory.appendChild(application2);
-        application2.setTextContent(BasicApplicationFactory.class.getName());
-
-        // process the document.  This should cause the the InjectionApplicationFactory
-        // to be put into play since there is more than one ApplicationFactory
-        // being configured
-        fcp.process((ServletContext) getFacesContext().getExternalContext().getContext(),
-                    new DocumentInfo[] { new DocumentInfo(d, null) });
-
-        // get the ApplicationFactory instance.  The top-level factory should
-        // be the InjectionApplicationFactory.
-        appFactory = (ApplicationFactory)
-              FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        assertNotNull(appFactory);
-        assertEquals(InjectionApplicationFactory.class, appFactory.getClass());
-        ApplicationFactory wrapped1 = appFactory.getWrapped();
-        assertNotNull(wrapped1);
-        assertEquals(BasicApplicationFactory.class, wrapped1.getClass());
-        ApplicationFactory wrapped2 = wrapped1.getWrapped();
-        assertEquals(ApplicationFactoryImpl.class, wrapped2.getClass());
-
-        // no ensure that the top level application instance's defaultApplication
-        // instance was injected with the default Application instance.
-        // This instance should be the same as that returned by wrapped2.
-        app = appFactory.getApplication();
-        assertNotNull(app);
-        Application fieldResult = (Application) field.get(app);
-        assertNotNull(fieldResult);
-        assertEquals(ApplicationImpl.class, fieldResult.getClass());
-
-        // basic application doesn't implement getProjetStage(), so without
-        // injection, this method would throw an UnsupportedOperationException,
-        // however, if we got this far, no exception should be thrown.
-        try {
-            app.getProjectStage();
-        } catch (UnsupportedOperationException uso) {
-            fail("Application.getProjectStage() threw an Exception; injection failed");
-        }
-
-    }
-
-
-    public void testFactoryFinderFacesContextInjection() throws Exception {
-
-        ExternalContext extContext = getFacesContext().getExternalContext();
-        ServletContext sc = (ServletContext) extContext.getContext();
-        Document d = newFacesConfigDocument();
-        Node facesConfig = d.getFirstChild();
-        Element factory = createElement(d, "factory");
-        facesConfig.appendChild(factory);
-        Element application = createElement(d, "application-factory");
-        factory.appendChild(application);
-        application
-              .setTextContent("com.sun.faces.application.ApplicationFactoryImpl");
-        Element facesContext = createElement(d, "faces-context-factory");
-        factory.appendChild(facesContext);
-        facesContext.setTextContent(FacesContextFactoryImpl.class.getName());
-        Element exceptionHandler = createElement(d, "exception-handler-factory");
-        factory.appendChild(exceptionHandler);
-        exceptionHandler.setTextContent(ExceptionHandlerFactoryImpl.class.getName());
-        Element externalContextFactory = createElement(d, "external-context-factory");
-        factory.appendChild(externalContextFactory);
-        externalContextFactory.setTextContent(ExternalContextFactoryImpl.class.getName());
-        Element renderKitFactory = createElement(d, "render-"
-                                                    + "kit-factory");
-        factory.appendChild(renderKitFactory);
-        renderKitFactory.setTextContent(RenderKitFactoryImpl.class.getName());
-
-
-        // clear the factories
-        FactoryFinder.releaseFactories();
-        ApplicationAssociate.clearInstance(extContext);
-        FacesContext.getCurrentInstance().release();
-
-        // invoke the FactoryConfigProcessor
-        FactoryConfigProcessor fcp = new FactoryConfigProcessor(false);
-        fcp.process(sc, new DocumentInfo[]{new DocumentInfo(d, null)});
-
-        // now get an FacesContext instance from the Factory and ensure
-        // no injection occured.
-        FacesContextFactory fcFactory = (FacesContextFactory)
-              FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
-        assertNotNull(fcFactory);
-        assertNull(fcFactory.getWrapped());
-        FacesContext fc = fcFactory.getFacesContext(sc, request, response, new LifecycleImpl());
-        // reflect the 'defaultFacesContext' field to ensure it's null
-        Field field = FacesContext.class.getDeclaredField("defaultFacesContext");
-        Field extField = ExternalContext.class.getDeclaredField("defaultExternalContext");
-        field.setAccessible(true);
-        extField.setAccessible(true);
-        assertNull(field.get(fc));
-
-        // reset for the injection portion of the test
-        FactoryFinder.releaseFactories();
-        ApplicationAssociate.clearInstance(extContext);
-        FacesContext.getCurrentInstance().release();
-
-        // add another factory to our document
-        Element facesContext2 = createElement(d, "faces-context-factory");
-        factory.appendChild(facesContext2);
-        facesContext2.setTextContent(BasicFacesContextFactory.class.getName());
-
-        // process the document.  This should cause the the InjectionFacesContextFactory
-        // to be put into play since there is more than one FacesContextFactory
-        // being configured
-        fcp.process(sc, new DocumentInfo[]{new DocumentInfo(d, null)});
-
-        // get the FacesContextFactory instance.  The top-level factory should
-        // be the InjectionFacesContextFactory.
-        fcFactory = (FacesContextFactory)
-              FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
-        assertNotNull(fcFactory);
-        assertEquals(InjectionFacesContextFactory.class, fcFactory.getClass());
-        FacesContextFactory wrapped1 = fcFactory.getWrapped();
-        assertNotNull(wrapped1);
-        assertEquals(BasicFacesContextFactory.class, wrapped1.getClass());
-        FacesContextFactory wrapped2 = wrapped1.getWrapped();
-        assertEquals(FacesContextFactoryImpl.class, wrapped2.getClass());
-
-        // now ensure that the top level facescontext instance's defaultFacesContext
-        // field was injected with the default FacesContext implementation.
-        // Also ensure that the top level ExternalContext instance's defaultExternalContext
-        // field was injected with the default ExternalContext implementation.
-        fc = fcFactory.getFacesContext(sc, request, response, new LifecycleImpl());
-
-        assertNotNull(fc);
-        FacesContext fieldResult = (FacesContext) field.get(fc);
-        assertNotNull(fieldResult);
-        assertEquals(FacesContextImpl.class, fieldResult.getClass());
-
-        ExternalContext extFieldResult = (ExternalContext) extField.get(fc.getExternalContext());
-        assertNotNull(extFieldResult);
-        assertEquals(ExternalContextImpl.class, extFieldResult.getClass());
-
-        // basic facescontext doesn't implement getAttributes(), so without
-        // injection, this method would throw an UnsupportedOperationException,
-        // however, if we got this far, no exception should be thrown.
-        try {
-            fc.getAttributes();
-        } catch (UnsupportedOperationException uso) {
-            fail("FacesContext.getAttributes() threw an Exception; injection failed");
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private Document newFacesConfigDocument()
-          throws ParserConfigurationException {
-
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setValidating(false);
-        factory.setNamespaceAware(true);
-        Document d = factory.newDocumentBuilder().newDocument();
-        Element e = createElement(d, "faces-config");
-        d.appendChild(e);
-        return d;
-
-    }
-
-
-    private Element createElement(Document d, String elementName) {
-
-        final String ns = "http://java.sun.com/xml/ns/javaee";
-        return d.createElementNS(ns, elementName);
-
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    public static final class BasicExternalContextFactory extends ExternalContextFactory {
-
-        private ExternalContextFactory delegate;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public BasicExternalContextFactory(ExternalContextFactory delegate) {
-
-            this.delegate = delegate;
-
-        }
-
-
-        // ------------------------------------------- Methods from FacesWrapper
-
-
-        @Override
-        public ExternalContextFactory getWrapped() {
-
-            return delegate;
-
-        }
-
-
-        // --------------------------------- Methods from ExternalContextFactory
-
-
-        public ExternalContext getExternalContext(Object context,
-                                                  Object request,
-                                                  Object response)
-              throws FacesException {
-
-            ExternalContext extContext = delegate.getExternalContext(context,
-                                                                     request,
-                                                                     response);
-            return new BasicExternalContext(extContext);
-
-        }
-    }
-
-
-    public static final class BasicExternalContext extends ExternalContext {
-
-        private ExternalContext delegate;
-
-        public BasicExternalContext(ExternalContext delegate) {
-            this.delegate = delegate;
-        }
-
-        public void dispatch(String path) throws IOException {
-
-        }
-
-        public String encodeActionURL(String url) {
-            return null;
-        }
-
-        public String encodeNamespace(String name) {
-            return null;
-        }
-
-        public String encodePartialActionURL(String viewId) {
-            return null;
-        }
-
-        public String encodeResourceURL(String url) {
-            return null;
-        }
-
-        public Map<String, Object> getApplicationMap() {
-            return null;
-        }
-
-        public String getAuthType() {
-            return null;
-        }
-
-        public Object getContext() {
-            return null;
-        }
-
-        public String getInitParameter(String name) {
-            return null;
-        }
-
-        public Map getInitParameterMap() {
-            return null;
-        }
-
-        public String getRemoteUser() {
-            return null;
-        }
-
-        public Object getRequest() {
-            return null;
-        }
-
-        public String getRequestContextPath() {
-            return null;
-        }
-
-        public Map<String, Object> getRequestCookieMap() {
-            return null;
-        }
-
-        public Map<String, String> getRequestHeaderMap() {
-            return null;
-        }
-
-        public Map<String, String[]> getRequestHeaderValuesMap() {
-            return null;
-        }
-
-        public Locale getRequestLocale() {
-            return null;
-        }
-
-        public Iterator<Locale> getRequestLocales() {
-            return null;
-        }
-
-        public Map<String, Object> getRequestMap() {
-            return null;
-        }
-
-        public Map<String, String> getRequestParameterMap() {
-            return null;
-        }
-
-        public Iterator<String> getRequestParameterNames() {
-            return null;
-        }
-
-        public Map<String, String[]> getRequestParameterValuesMap() {
-            return null;
-        }
-
-        public String getRequestPathInfo() {
-            return null;
-        }
-
-        public String getRequestServletPath() {
-            return null;
-        }
-
-        public URL getResource(String path) throws MalformedURLException {
-            return null;
-        }
-
-        public InputStream getResourceAsStream(String path) {
-            return null;
-        }
-
-        public Set<String> getResourcePaths(String path) {
-            return null;
-        }
-
-        public Object getResponse() {
-            return null;
-        }
-
-        public Object getSession(boolean create) {
-            return null;
-        }
-
-        public Map<String, Object> getSessionMap() {
-            return null;
-        }
-
-        public Principal getUserPrincipal() {
-            return null;
-        }
-
-        public boolean isUserInRole(String role) {
-            return false;
-        }
-
-        public void log(String message) {
-
-        }
-
-        public void log(String message, Throwable exception) {
-
-        }
-
-        public void redirect(String url) throws IOException {
-
-        }
-
-    }
-
-
-    public static final class BasicFacesContextFactory extends FacesContextFactory {
-
-        private FacesContextFactory delegate;
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        public BasicFacesContextFactory(FacesContextFactory delegate) {
-
-            this.delegate = delegate;
-
-        }
-
-
-        // ------------------------------------------- Methods from FacesWrapper
-
-        
-        @Override
-        public FacesContextFactory getWrapped() {
-
-            return delegate;
-
-        }
-
-
-        // ------------------------------------ Methods from FacesContextFactory
-
-
-        public FacesContext getFacesContext(Object context,
-                                            Object request,
-                                            Object response,
-                                            Lifecycle lifecycle)
-              throws FacesException {
-
-            FacesContext fcdelegate = delegate.getFacesContext(context, request, response, lifecycle);
-            return new BasicFacesContext(fcdelegate);
-
-        }
-
-    } // END BasicFacesContextFactory
-
-
-
-    public static final class BasicFacesContext extends FacesContext {
-
-        FacesContext delegate;
-
-        public BasicFacesContext(FacesContext delegate) {
-            this.delegate = delegate;
-        }
-
-        public Application getApplication() {
-            return null;
-        }
-
-        public Iterator<String> getClientIdsWithMessages() {
-            return null;
-        }
-
-        public ExternalContext getExternalContext() {
-            return delegate.getExternalContext();
-        }
-
-        public FacesMessage.Severity getMaximumSeverity() {
-            return null;
-        }
-
-        public Iterator<FacesMessage> getMessages() {
-            return null;
-        }
-
-        public Iterator<FacesMessage> getMessages(String clientId) {
-            return null;
-        }
-
-        public RenderKit getRenderKit() {
-            return null;
-        }
-
-        public boolean getRenderResponse() {
-            return false;
-        }
-
-        public boolean getResponseComplete() {
-            return false;
-        }
-
-        public ResponseStream getResponseStream() {
-            return null;
-        }
-
-        public void setResponseStream(ResponseStream responseStream) {
-
-        }
-
-        public ResponseWriter getResponseWriter() {
-            return null;
-        }
-
-        public void setResponseWriter(ResponseWriter responseWriter) {
-
-        }
-
-        public UIViewRoot getViewRoot() {
-            return null;
-        }
-
-        public void setViewRoot(UIViewRoot root) {
-
-        }
-
-        public void addMessage(String clientId, FacesMessage message) {
-
-        }
-
-        public void release() {
-            delegate.release();
-        }
-
-        public void renderResponse() {
-
-        }
-
-        public void responseComplete() {
-
-        }
-        
-        boolean validationFailed;
-
-        @Override
-        public boolean isValidationFailed() {
-            return validationFailed;
-        }
-
-        @Override
-        public void validationFailed() {
-            this.validationFailed = true;
-        }
-        
-        
-
-    } // END BasicFacesContext
-
-    public static final class BasicApplicationFactory extends ApplicationFactory {
-
-        private ApplicationFactory delegate;
-
-        // -------------------------------------------------------- Constructors
-
-
-        public BasicApplicationFactory(ApplicationFactory delegate) {
-
-            this.delegate = delegate;
-
-        }
-
-
-        // ------------------------------------------- Methods from FacesWrapper
-
-
-        @Override
-        public ApplicationFactory getWrapped() {
-
-            return delegate;
-
-        }
-
-
-        // ------------------------------------- Methods from ApplicationFactory
-
-
-        public Application getApplication() {
-
-            return new BasicApplication();
-        }
-
-        public void setApplication(Application application) {
-            //To change body of implemented methods use File | Settings | File Templates.
-        }
-
-    } // END BasicApplicationFactory
-
-
-    public static final class BasicApplication extends Application {
-
-        public ActionListener getActionListener() {
-            return null;
-        }
-
-        public void setActionListener(ActionListener listener) {
-
-        }
-
-        public Locale getDefaultLocale() {
-            return null;
-        }
-
-        public void setDefaultLocale(Locale locale) {
-
-        }
-
-        public String getDefaultRenderKitId() {
-            return null;
-        }
-
-        public void setDefaultRenderKitId(String renderKitId) {
-
-        }
-
-        public String getMessageBundle() {
-            return null;
-        }
-
-        public void setMessageBundle(String bundle) {
-
-        }
-
-        public NavigationHandler getNavigationHandler() {
-            return null;
-        }
-
-        public void setNavigationHandler(NavigationHandler handler) {
-
-        }
-
-        public PropertyResolver getPropertyResolver() {
-            return null;
-        }
-
-        public void setPropertyResolver(PropertyResolver resolver) {
-
-        }
-
-        public VariableResolver getVariableResolver() {
-            return null;
-        }
-
-        public void setVariableResolver(VariableResolver resolver) {
-
-        }
-
-        public ViewHandler getViewHandler() {
-            return null;
-        }
-
-        public void setViewHandler(ViewHandler handler) {
-
-        }
-
-        public StateManager getStateManager() {
-            return null;
-        }
-
-        public void setStateManager(StateManager manager) {
-
-        }
-
-        public void addComponent(String componentType, String componentClass) {
-
-        }
-
-        public UIComponent createComponent(String componentType)
-              throws FacesException {
-            return null;
-        }
-
-        public UIComponent createComponent(ValueBinding componentBinding,
-                                           FacesContext context,
-                                           String componentType)
-              throws FacesException {
-            return null;
-        }
-
-        public Iterator<String> getComponentTypes() {
-            return null;
-        }
-
-        public void addConverter(String converterId, String converterClass) {
-
-        }
-
-        public void addConverter(Class<?> targetClass, String converterClass) {
-
-        }
-
-        public Converter createConverter(String converterId) {
-            return null;
-        }
-
-        public Converter createConverter(Class<?> targetClass) {
-            return null;
-        }
-
-        public Iterator<String> getConverterIds() {
-            return null;
-        }
-
-        public Iterator<Class<?>> getConverterTypes() {
-            return null;
-        }
-
-        public MethodBinding createMethodBinding(String ref, Class<?>[] params)
-              throws ReferenceSyntaxException {
-            return null;
-        }
-
-        public Iterator<Locale> getSupportedLocales() {
-            return null;
-        }
-
-        public void setSupportedLocales(Collection<Locale> locales) {
-
-        }
-
-        public void addValidator(String validatorId, String validatorClass) {
-
-        }
-
-        public Validator createValidator(String validatorId)
-              throws FacesException {
-            return null;
-        }
-
-        public Iterator<String> getValidatorIds() {
-            return null;
-        }
-
-        public void addBehavior(String behaviorId, String behaviorClass) {
-
-        }
-
-        public Behavior createBehavior(String behaviorId)
-              throws FacesException {
-            return null;
-        }
-
-        public Iterator<String> getBehaviorIds() {
-            return null;
-        }
-
-        public ValueBinding createValueBinding(String ref)
-              throws ReferenceSyntaxException {
-            return null;
-        }
-
-    } // END BasicApplication
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/TestManagedBeanFactory.java b/jsf-ri/test/com/sun/faces/config/TestManagedBeanFactory.java
deleted file mode 100644
index 09af123..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestManagedBeanFactory.java
+++ /dev/null
@@ -1,1104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.cactus.TestingUtil;
-import com.sun.faces.TestBean;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.mgbean.ManagedBeanInfo;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.mgbean.BeanBuilder;
-import com.sun.faces.el.ELUtils;
-
-import javax.el.ValueExpression;
-
-import javax.faces.FacesException;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * <p>Unit tests for Managed Bean Factory.</p>
- */
-
-public class TestManagedBeanFactory extends ServletFacesTestCase {
-
-
-    public static String beanName = "com.sun.faces.TestBean";
-
-    // ----------------------------------------------------- Instance Variables
-
-    TestBean testBean;
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * Construct a new instance of this test case.
-     */
-    public TestManagedBeanFactory() {
-        super("TestManagedBeanFactory");
-    }
-
-
-    /**
-     * Construct a new instance of this test case.
-     *
-     * @param name Name of the test case
-     */
-    public TestManagedBeanFactory(String name) {
-
-        super(name);
-
-    }
-
-
-    // --------------------------------------------------- Overall Test Methods
-
-
-    // ------------------------------------------------ Individual Test Methods
-
-
-
-    // Test managed bean 
-    public void testNoProperty() throws Exception {
-        //Testing with no properties set
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   null,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-        assertNotNull(beanManager.create(beanName, getFacesContext()));
-        BeanBuilder builder = beanManager.getBuilder(beanName);
-        assertTrue(ELUtils.Scope.SESSION.toString().equals(builder.getScope()));
-    }
-
-
-    public void testSimpleProperty() throws Exception {
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("one",
-                                                 null,
-                                                 "one",
-                                                 null,
-                                                 null);
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        list.add(property);
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        assertTrue(testBean.getOne().equals("one"));
-
-        //make sure scope is stored properly
-        BeanBuilder builder = beanManager.getBuilder(beanName);
-        assertTrue(ELUtils.Scope.SESSION.toString().equals(builder.getScope()));
-    }
-
-
-    public void testPrimitiveProperty() throws Exception {
-
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-
-        boolean testBoolean = true;
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("boolProp",
-                                                 null,
-                                                 Boolean.toString(testBoolean),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        byte testByte = 100;
-        property = new ManagedBeanInfo.ManagedProperty("byteProp",
-                                                 null,
-                                                 Byte.valueOf(testByte).toString(),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        char testChar = 'z';
-        property = new ManagedBeanInfo.ManagedProperty("charProp",
-                                                 null,
-                                                 Character.valueOf(testChar).toString(),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        double testDouble = 11.278D;
-        property = new ManagedBeanInfo.ManagedProperty("doubleProp",
-                                                 null,
-                                                 Double.valueOf(testDouble).toString(),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        float testFloat = 45.789F;
-        property = new ManagedBeanInfo.ManagedProperty("floatProp",
-                                                 null,
-                                                 Float.valueOf(testFloat).toString(),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        int testInt = 42;
-        property = new ManagedBeanInfo.ManagedProperty("intProp",
-                                                 null,
-                                                 Integer.valueOf(testInt).toString(),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        long testLong = 3147893289L;
-        property = new ManagedBeanInfo.ManagedProperty("longProp",
-                                                 null,
-                                                 Long.valueOf(testLong).toString(),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        short testShort = 25432;
-        property = new ManagedBeanInfo.ManagedProperty("shortProp",
-                                                 null,
-                                                 Short.valueOf(testShort).toString(),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        assertTrue(testBean.getBoolProp() == testBoolean);
-        assertTrue(testBean.getByteProp() == testByte);
-        assertTrue(testBean.getCharProp() == testChar);
-        assertTrue(testBean.getDoubleProp() == testDouble);
-        assertTrue(testBean.getFloatProp() == testFloat);
-        assertTrue(testBean.getIntProp() == testInt);
-        assertTrue(testBean.getLongProp() == testLong);
-        assertTrue(testBean.getShortProp() == testShort);
-
-        //make sure scope is stored properly
-        BeanBuilder builder = beanManager.getBuilder(beanName);
-        assertTrue(ELUtils.Scope.SESSION.toString().equals(builder.getScope()));
-    }
-    
-    public void testSimpleNumericProperty() throws Exception {
-        // If a property value is "" ensure numeric properties
-        // are set to 0.
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-
-        boolean testBoolean = true;
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("boolProp",
-                                                 null,
-                                                 Boolean.toString(testBoolean),
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("byteProp",
-                                                 null,
-                                                 "",
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("charProp",
-                                                 null,
-                                                 "",
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("doubleProp",
-                                                 null,
-                                                 "",
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("floatProp",
-                                                 null,
-                                                 "",
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("intProp",
-                                                 null,
-                                                 "",
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("longProp",
-                                                 null,
-                                                 "",
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("shortProp",
-                                                 null,
-                                                 "",
-                                                 null,
-                                                 null);
-        list.add(property);
-
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-                 
-        assertTrue(testBean.getByteProp() == 0); 
-        assertTrue(testBean.getCharProp() == 0);
-        assertTrue(testBean.getDoubleProp() == 0);
-        assertTrue(testBean.getFloatProp() == 0);
-        assertTrue(testBean.getIntProp() == 0);
-        assertTrue(testBean.getLongProp() == 0);
-        assertTrue(testBean.getShortProp() == 0);
-    }
-
-
-    public void testIndexProperty() throws Exception {
-        List<String> values = new ArrayList<String>(2);
-        values.add("foo");
-        values.add("bar");
-        ManagedBeanInfo.ListEntry listEntry =
-             new ManagedBeanInfo.ListEntry(null, values);
-
-        List<ManagedBeanInfo.ManagedProperty> properties =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(2);
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("indexProperties",
-                                                 null,
-                                                 null,
-                                                 null,
-                                                 listEntry);
-        properties.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("indexPropertiesNull",
-                                                       null,
-                                                       null,
-                                                       null,
-                                                       listEntry);
-        properties.add(property);
-
-
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "request",
-                                                   null,
-                                                   null,
-                                                   properties,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        ArrayList props = (ArrayList) testBean.getIndexProperties();
-        assertTrue(props.get(5).equals("foo"));
-        assertTrue(props.get(6).equals("bar"));
-
-        // setter shouldn't be called if bean getter returns List
-        assertTrue(!testBean.getListSetterCalled());
-
-        // setter should be called if bean getter returned null
-        assertTrue(testBean.getListNullSetterCalled());
-
-        //make sure scope is stored properly
-        BeanBuilder builder = beanManager.getBuilder(beanName);
-        assertTrue(ELUtils.Scope.REQUEST.toString().equals(builder.getScope()));
-    }
-
-
-    public void testMapProperty() throws Exception {
-
-        Map<String,String> entry = new HashMap(1, 1.0f);
-        entry.put("name", "Justyna");
-        ManagedBeanInfo.MapEntry mapEntry =
-             new ManagedBeanInfo.MapEntry(null,
-                                          null,
-                                          entry);
-
-        List<ManagedBeanInfo.ManagedProperty> properties =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(2);
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("mapProperty",
-                                                 null,
-                                                 null,
-                                                 mapEntry,
-                                                 null);
-        properties.add(property);
-
-        property = new ManagedBeanInfo.ManagedProperty("mapPropertyNull",
-                                                       null,
-                                                       null,
-                                                       mapEntry,
-                                                       null);
-        properties.add(property);
-
-
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "request",
-                                                   null,
-                                                   null,
-                                                   properties,
-                                                   null);
-
-
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        HashMap mapProperty = (HashMap)
-            testBean.getMapProperty();
-        assertTrue(((String) mapProperty.get("name")).equals("Justyna"));
-
-        // setter shouldn't be called if bean getter returns Map
-        assertTrue(!testBean.getMapPropertySetterCalled());
-
-        // setter should be called if bean getter returned null
-        assertTrue(testBean.getMapPropertyNullSetterCalled());
-
-        //make sure scope is stored properly
-        BeanBuilder builder = beanManager.getBuilder(beanName);
-        assertTrue(ELUtils.Scope.REQUEST.toString().equals(builder.getScope()));
-    }
-
-
-    public void testIndexTypeProperty() throws Exception {
-        List<String> val = new ArrayList<String>(1);
-        val.add("23");
-        ManagedBeanInfo.ListEntry listEntry =
-             new ManagedBeanInfo.ListEntry("java.lang.Integer", val);
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("indexIntegerProperties",
-                                                 "java.lang.Integer",
-                                                 null,
-                                                 null,
-                                                 listEntry);
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        list.add(property);
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        ArrayList properties = (ArrayList) testBean.getIndexIntegerProperties();
-        assertTrue(properties.get(1) instanceof Integer);
-
-        Integer integer = new Integer("23");
-        assertTrue(properties.get(2).equals(integer));
-    }
-
-
-    public void testMapTypeProperty() throws Exception {
-
-        Map<String,String> entry = new HashMap(1, 1.0f);
-        entry.put("name", "23");
-        ManagedBeanInfo.MapEntry mapEntry =
-             new ManagedBeanInfo.MapEntry("java.lang.String",
-                                          "java.lang.Integer",
-                                          entry);
-
-        List<ManagedBeanInfo.ManagedProperty> properties =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("mapProperty",
-                                                 null,
-                                                 null,
-                                                 mapEntry,
-                                                 null);
-        properties.add(property);
-
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "request",
-                                                   null,
-                                                   null,
-                                                   properties,
-                                                   null);
-
-
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        HashMap mapProperty = (HashMap)
-            testBean.getMapProperty();
-
-        assertTrue(mapProperty.get("name") instanceof Integer);
-
-        Integer integer = new Integer("23");
-        assertTrue(mapProperty.get("name").equals(integer));
-
-    }
-
-
-    public void testValueRefProperty() throws Exception {
-
-        TestBean testBean = new TestBean();
-        testBean.setOne("one");
-        getFacesContext().getExternalContext().getSessionMap().put(
-            "TestRefBean", testBean);
-
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("one",
-                                                 null,
-                                                 "#{TestRefBean.one}",
-                                                 null,
-                                                 null);
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        list.add(property);
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        assertTrue(testBean.getOne().equals("one"));
-
-    }
-
-
-    public void testValueRefScope() throws Exception {
-        //Testing value ref scope
-
-        TestBean testBean = new TestBean();
-        testBean.setOne("one");
-        boolean exceptionThrown = false;
-
-        //testing with:
-        //  valueref in application scope
-        //  managed bean in session scope
-        getFacesContext().getExternalContext().getApplicationMap().put(
-            "TestRefBean", testBean);
-
-
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("one",
-                                                 null,
-                                                 "#{TestRefBean.one}",
-                                                 null,
-                                                 null);
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        list.add(property);
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        //testing with a property set
-        assertNotNull(testBean = (TestBean) beanManager.create(beanName,
-                                                               getFacesContext()));
-
-        //make sure bean instantiated properly. Get property back from bean.
-        assertTrue(testBean.getOne().equals("one"));
-
-
-        //testing with:
-        //  valueref in request scope
-        //  managed bean in application scope
-        getFacesContext().getExternalContext().getApplicationMap()
-             .remove("TestRefBean");
-        getFacesContext().getExternalContext().getRequestMap().put(
-            "TestRefBean", testBean);
-
-        bean = new ManagedBeanInfo(beanName,
-                                   beanName,
-                                   "application",
-                                   null,
-                                   null,
-                                   list,
-                                   null);
-        beanManager.register(bean);
-
-        exceptionThrown = false;
-        try {
-            //testing with a property set
-            beanManager.create(beanName, getFacesContext());
-            fail("Should have thrown FacesException");
-        } catch (FacesException ex) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        //cleanup
-        getFacesContext().getExternalContext().getRequestMap().remove(
-            "TestRefBean");
-
-        //testing with:
-        //  valueref in session scope
-        //  managed bean in no scope
-        getFacesContext().getExternalContext().getSessionMap().put(
-            "TestRefBean", testBean);
-
-       bean = new ManagedBeanInfo(beanName,
-                                   beanName,
-                                   "none",
-                                   null,
-                                   null,
-                                   list,
-                                   null);
-        beanManager.register(bean);
-
-        exceptionThrown = false;
-        try {
-            beanManager.create(beanName, getFacesContext());
-            fail("Should have thrown FacesException");
-        } catch (FacesException ex) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-
-    public void testViewScope() throws Exception {
-        TestBean testBean = new TestBean();
-        testBean.setOne("one");
-
-        getFacesContext().getExternalContext().getRequestMap().put("TestRefBean", testBean);
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("one",
-                                                 null,
-                                                 "#{TestRefBean.one}",
-                                                 null,
-                                                 null);
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        list.add(property);
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "view",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-        try {
-            // request scope is shorter than view scope, so creation should fail
-            beanManager.create(beanName, getFacesContext());
-            assertTrue(false);
-        } catch (Exception ignored) {
-        }
-
-        bean = new ManagedBeanInfo(beanName,
-                                   beanName,
-                                   "view",
-                                   null,
-                                   null,
-                                   null,
-                                   null);
-        beanManager.getRegisteredBeans().remove(beanName);
-        beanManager.register(bean);
-
-        Object beanObject = beanManager.create(beanName, getFacesContext());
-        assertNotNull(beanObject);
-        assertTrue(getFacesContext().getViewRoot().getViewMap().containsKey(beanName));
-        
-    }
-    
-    public void testNoneScope() throws Exception {
-        //Testing value ref scope
-        TestBean testBean = new TestBean();
-        testBean.setOne("one");
-        boolean exceptionThrown = false;
-
-        //  valueref in request scope
-        //  managed bean in none scope
-        // this should fail
-        getFacesContext().getExternalContext().getRequestMap().put(
-            "TestRefBean", testBean);
-
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("one",
-                                                 null,
-                                                 "#{TestRefBean.one}",
-                                                 null,
-                                                 null);
-        List<ManagedBeanInfo.ManagedProperty> list =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        list.add(property);
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "none",
-                                                   null,
-                                                   null,
-                                                   list,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-
-
-        exceptionThrown = false;
-        try {
-            beanManager.create(beanName, getFacesContext());
-            fail("Should have thrown FacesException");
-        } catch (FacesException ex) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        //cleanup
-        getFacesContext().getExternalContext().getRequestMap().remove(
-            "TestRefBean");
-
-        //  valueref in none scope
-        //  managed bean in none scope
-        // this should pass
-        ValueExpression valueExpression1 = 
-        ELUtils.createValueExpression("#{testBean.customerBean.name}");
-        exceptionThrown = false;
-        try {
-            valueExpression1.getValue(getFacesContext().getELContext());
-        } catch (FacesException ex) {
-            exceptionThrown = true;
-        }
-        assertTrue(!exceptionThrown);
-      
-    }
-
-    public void testMixedBean() throws Exception {
-        ValueExpression vb =
-            ELUtils.createValueExpression(
-                "#{mixedBean}");
-        TestBean bean = (TestBean) vb.getValue(getFacesContext().getELContext());
-        assertEquals("mixed value Bobby \" \\  \\\" Orr", bean.getProp());
-
-        vb =
-            ELUtils.createValueExpression(
-                "#{mixedBean.prop}");
-        assertEquals(bean.getProp(), (String) vb.getValue(getFacesContext().getELContext()));
-    } 
-
-    public void testMixedBeanNegative() throws Exception {
-        ValueExpression vb =
-            ELUtils.createValueExpression(
-                "#{threeBeanSaladNegative}");
-	boolean exceptionThrown = false;
-	try {
-	    TestBean bean = (TestBean) vb.getValue(getFacesContext().getELContext());
-	    assertTrue(false);
-	}
-	catch (FacesException pnfe) {
-	    exceptionThrown = true;
-	}
-
-	assertTrue(exceptionThrown);
-    }
-
-    public void testMixedBeanPositive() throws Exception {
-        ValueExpression vb =
-            ELUtils.createValueExpression(
-                "#{threeBeanSaladPositive}");
-        TestBean bean = (TestBean) vb.getValue(getFacesContext().getELContext());
-        assertEquals("request request session session none none", 
-		     bean.getProp());
-
-        vb =
-            ELUtils.createValueExpression(
-                "#{threeBeanSaladPositive.prop}");
-        assertEquals(bean.getProp(), (String) vb.getValue(getFacesContext().getELContext()));
-    }
-
-
-    public void testConstructorException() {
-        // constructor of this bean throws ann exception. Make sure the
-        // exception is not swallowed.
-        ValueExpression valueExpression1 = 
-           ELUtils.createValueExpression("#{exceptionBean.one}");
-        boolean exceptionThrown = false;
-        try {
-            valueExpression1.getValue(getFacesContext().getELContext());
-        } catch (FacesException ex) {
-            Throwable t = ex.getCause();
-            exceptionThrown = true;
-            assertTrue((t.getMessage().
-                indexOf("TestConstructorException Passed")) != -1);
-        }   
-        assertTrue(exceptionThrown);
-        
-    }
-    
-    public void testIsInjectable() throws Exception {
-
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "session",
-                                                   null,
-                                                   null,
-                                                   null,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-        BeanBuilder builder = beanManager.getBuilder(beanName);
-        Boolean isInjectable = (Boolean) TestingUtil.invokePrivateMethod("scanForAnnotations",
-                                                                         new Class[] { Class.class },
-                                                                         new Object[] { TestBean.class },
-                                                                         BeanBuilder.class,
-                                                                         builder);
-        assertTrue(!isInjectable);
-
-        bean = new ManagedBeanInfo(beanName,
-                                   "com.sun.faces.config.TestManagedBeanFactory$InjectionBean",
-                                   "request",
-                                   null,
-                                   null,
-                                   null,
-                                   null);
-        beanManager.register(bean);
-
-        isInjectable = (Boolean) TestingUtil.invokePrivateMethod("scanForAnnotations",
-                                                                 new Class[] { Class.class },
-                                                                 new Object[] { InjectionBean.class },
-                                                                 BeanBuilder.class,
-                                                                 builder);
-
-        assertTrue(isInjectable);
-    }
-
-    public void testViewScopeAnnotationCallBacks() throws Exception {
-
-        BeanManager beanManager =
-             ApplicationAssociate.getInstance(getFacesContext().getExternalContext()).getBeanManager();
-        ManagedBeanInfo bean = new ManagedBeanInfo("viewBean",
-                                                   "com.sun.faces.config.TestManagedBeanFactory$InjectionBean",
-                                                   "view",
-                                                   null,
-                                                   null,
-                                                   null,
-                                                   null);
-        beanManager.register(bean);
-        InjectionBean injectionBean = (InjectionBean) beanManager.create("viewBean", getFacesContext());
-        assertTrue(injectionBean.initCalled);
-        getFacesContext().getViewRoot().getViewMap().clear();
-        assertTrue(injectionBean.destroyCalled);
-
-    }
-
-
-
-    /**
-     * For Issue 761.
-     */
-    public void testManagedPropertyMixedVERegresssion() throws Exception {
-
-        Map<String,Object> requestMap = getFacesContext().getExternalContext().getRequestMap();
-        requestMap.put("val", "String");
-        List<ManagedBeanInfo.ManagedProperty> properties =
-             new ArrayList<ManagedBeanInfo.ManagedProperty>(1);
-        ManagedBeanInfo.ManagedProperty property =
-             new ManagedBeanInfo.ManagedProperty("modelLabel",
-                                                 null,
-                                                 "#{'this'} is a String",
-                                                 null,
-                                                 null);
-        properties.add(property);
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "request",
-                                                   null,
-                                                   null,
-                                                   properties,
-                                                   null);
-        BeanManager beanManager =
-             ApplicationAssociate.getCurrentInstance().getBeanManager();
-        beanManager.register(bean);
-        testBean = (TestBean) beanManager.create(beanName, getFacesContext());
-        assertTrue("this is a String", "this is a String".equals(testBean.getModelLabel()));
-
-    }
-
-
-    public void testManagedBeanCustomScope() throws Exception {
-
-        BeanManager beanManager =
-              ApplicationAssociate.getCurrentInstance().getBeanManager();
-        testBean = (TestBean) beanManager.create("customScopeBean", getFacesContext());
-        Map<String,Object> requestMap = getFacesContext().getExternalContext().getRequestMap();
-        assertTrue(testBean == requestMap.get("customScopeBean"));
-
-        // invalid scope sanity check
-        ManagedBeanInfo bean = new ManagedBeanInfo(beanName,
-                                                   beanName,
-                                                   "#{myScope",
-                                                   null,
-                                                   null,
-                                                   null,
-                                                   null);
-        beanManager.register(bean);
-        try {
-            beanManager.create(beanName, getFacesContext());
-            fail();
-        } catch (Exception e) {
-
-        }
-
-        bean = new ManagedBeanInfo(beanName,
-                                   beanName,
-                                   "myScope",
-                                   null,
-                                   null,
-                                   null,
-                                   null);
-        beanManager.register(bean);
-        try {
-            beanManager.create(beanName, getFacesContext());
-            fail();
-        } catch (Exception e) {
-
-        }
-        
-    }
-
-
-	
-	
-    /************* PENDING(edburns): rewrite to exercise new edge case
-     * detection.
-
-     public void testInvalidPropertyConfiguration() throws Exception {
-     // If a ConfigManagedPropertyValue has a value that requires
-     // converstion from String (the default type) to another type,
-     // say Integer as an example, and the CMPV's value category
-     // isn't set to Value, conversion will not take place.  Thus, an
-     // error should occur when creating a new instanced of the
-     // managed bean.
-
-     // no value category set
-     bean = new ManagedBeanBean();
-     bean.setManagedBeanClass(beanName);
-     bean.setManagedBeanScope("session");
-
-     boolean testBoolean = true;
-     property = new ManagedPropertyBean();
-     property.setPropertyName("boolProp");
-     propertyv = new ConfigManagedBeanPropertyValue();
-     propertyv.setValue((new Boolean(testBoolean)).toString());
-     property.setValue(propertyv);
-     bean.addManagedProperty(property);
-
-     mbf = new ManagedBeanFactory(bean);
-
-     boolean exceptionThrown = false;
-     try {
-     mbf.newInstance();
-     } catch (FacesException fe) {
-     exceptionThrown = true;
-     }
-     assertTrue(exceptionThrown);
-
-
-     // value category set to VALUE_BINDING
-     bean = new ManagedBeanBean();
-     bean.setManagedBeanClass(beanName);
-     bean.setManagedBeanScope("session");
-
-     property = new ManagedPropertyBean();
-     property.setPropertyName("boolProp");
-     propertyv = new ConfigManagedBeanPropertyValue();
-     propertyv.setValueCategory(ConfigManagedBeanPropertyValue.VALUE_BINDING);
-     propertyv.setValue((new Boolean(testBoolean)).toString());
-     property.setValue(propertyv);
-     bean.addManagedProperty(property);
-
-     mbf = new ManagedBeanFactory(bean);
-
-     exceptionThrown = false;
-     try {
-     mbf.newInstance();
-     } catch (FacesException fe) {
-     exceptionThrown = true;
-     }
-     assertTrue(exceptionThrown);
-
-     }
-
-     public void testExceptions() throws Exception {
-
-     bean = new ManagedBeanBean();
-     bean.setManagedBeanClass("foo");
-     bean.setManagedBeanScope("session");
-
-     property = new ManagedPropertyBean();
-     property.setPropertyName("one");
-
-     propertyv = new ConfigManagedBeanPropertyValue();
-     propertyv.setValue("one");
-
-     property.setValue(propertyv);
-     boolean exceptionThrown = false;
-     try {
-     bean.addManagedProperty(property);
-     } catch (FacesException fe) {
-     exceptionThrown = true;
-     }
-     assertTrue(exceptionThrown);
-     exceptionThrown = false;
-     try {
-     property = null;
-     bean.addManagedProperty(property);
-     } catch (NullPointerException npe) {
-     exceptionThrown = true;
-     }
-     assertTrue(exceptionThrown);
-     }
-     ***********/
-    
-      public static class InjectionBean {
-
-        private boolean initCalled;
-        private boolean destroyCalled;
-
-        @PostConstruct void init() {
-            initCalled = true;
-        }
-
-        @PreDestroy void destroy() {
-            destroyCalled = true;
-        }
-
-        public boolean getInit() {
-            return initCalled;
-        }
-
-        public boolean getDestroy() {
-            return destroyCalled;
-        }
-
-    } // END ProtectedBean
-}
diff --git a/jsf-ri/test/com/sun/faces/config/TestRenderer.java b/jsf-ri/test/com/sun/faces/config/TestRenderer.java
deleted file mode 100644
index 05e15a5..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestRenderer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-
-import javax.faces.render.Renderer;
-
-
-// Dummy renderer that can be instantiated
-
-public class TestRenderer extends Renderer {
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/config/TestValidator.java b/jsf-ri/test/com/sun/faces/config/TestValidator.java
deleted file mode 100644
index bd2ff9e..0000000
--- a/jsf-ri/test/com/sun/faces/config/TestValidator.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-
-import javax.faces.validator.LengthValidator;
-
-
-// Dummy converter that can be instantiated
-
-public class TestValidator extends LengthValidator {
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/context/TestExceptionHandler.java b/jsf-ri/test/com/sun/faces/context/TestExceptionHandler.java
deleted file mode 100644
index 086005e..0000000
--- a/jsf-ri/test/com/sun/faces/context/TestExceptionHandler.java
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.context;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import javax.faces.context.ExceptionHandler;
-import javax.faces.context.ExceptionHandlerFactory;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.faces.event.ExceptionQueuedEventContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.webapp.PreJsf2ExceptionHandlerFactory;
-import javax.faces.FacesException;
-import javax.el.ELException;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-/**
- * <p>
- * Test case for both {@link ExceptionHandlerImpl} and the <code>ExceptionHandler</code>
- * created by {@link javax.faces.webapp.PreJsf2ExceptionHandlerFactory}.
- * </p>
- *
- * <p>
- * Testing for the API implementation occurs here to leverage common code.
- * </p>
- *
- */
-public class TestExceptionHandler extends ServletFacesTestCase {
-
-    private ExceptionHandlerFactory implFactory = new ExceptionHandlerFactoryImpl();
-    private ExceptionHandlerFactory apiFactory = new PreJsf2ExceptionHandlerFactory();
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestExceptionHandler() {
-        super("TestExceptionHandler");
-    }
-
-
-    public TestExceptionHandler(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testIsListenerForSource() {
-        testIsListenerForSource(implFactory.getExceptionHandler());
-        testIsListenerForSource(apiFactory.getExceptionHandler());
-    }
-
-
-    public void testProcessEvent() {
-        testProcessEvent(implFactory.getExceptionHandler());
-        testProcessEvent(apiFactory.getExceptionHandler());
-    }
-
-    public void testHandle() {
-        testHandleNoEventsQueued(implFactory.getExceptionHandler());
-        testHandleNoEventsQueued(apiFactory.getExceptionHandler());
-        testHandleAbortProcessingExceptionQueued(implFactory.getExceptionHandler());
-        testHandleAbortProcessingExceptionQueued(apiFactory.getExceptionHandler());
-        testHandleExceptionThrow(implFactory.getExceptionHandler());
-        testHandleExceptionThrow(apiFactory.getExceptionHandler());
-        testHandleBeforeAfterExceptions(implFactory.getExceptionHandler(), true);
-        testHandleBeforeAfterExceptions(apiFactory.getExceptionHandler(), false);
-        //test for issue 1263
-        boolean isProcessingEvents = getFacesContext().isProcessingEvents(); 
-        try {
-            getFacesContext().setProcessingEvents(false);
-            testHandleExceptionThrow(implFactory.getExceptionHandler());
-            testHandleExceptionThrow(apiFactory.getExceptionHandler());
-        } finally {
-        	getFacesContext().setProcessingEvents(isProcessingEvents);
-        }
-    }
-
-    public void testGetRootCause() {
-        testGetRootCauseNull(implFactory.getExceptionHandler());
-        testGetRootCauseNull(apiFactory.getExceptionHandler());
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void testIsListenerForSource(ExceptionHandler handler) {
-
-        assertFalse(handler.isListenerForSource(null));
-        ExceptionQueuedEventContext ectx =
-              new ExceptionQueuedEventContext(getFacesContext(), new RuntimeException());
-        assertFalse(handler.isListenerForSource(new ExceptionQueuedEvent(ectx)));
-        assertTrue(handler.isListenerForSource(ectx));
-
-    }
-
-
-    private void testProcessEvent(ExceptionHandler handler) {
-
-        // if event is null, no action is taken, which means an empty Iterator
-        // for the getUnhandledExceptionQueuedEvents
-        handler.processEvent(null);
-        List<ExceptionQueuedEvent> events = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        assertTrue(events.isEmpty());
-
-        // queue an exception event...
-        ExceptionQueuedEventContext ectx =
-              new ExceptionQueuedEventContext(getFacesContext(), new RuntimeException());
-        handler.processEvent(new ExceptionQueuedEvent(ectx));
-        events = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        assertTrue(events.size() == 1);
-        assertTrue(events.get(0).getSource() == ectx);
-        ExceptionQueuedEventContext ectx2 =
-              new ExceptionQueuedEventContext(getFacesContext(), new RuntimeException());
-
-        // queue an additionl event to ensure order is maintained
-        handler.processEvent(new ExceptionQueuedEvent(ectx2));
-        events = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        assertTrue(events.size() == 2);
-        assertTrue(events.get(0).getSource() == ectx);
-        assertTrue(events.get(1).getSource() == ectx2);
-
-    }
-
-
-    private void testHandleNoEventsQueued(ExceptionHandler handler) {
-
-        // no events have been queued
-        try {
-            handler.handle();
-        } catch (Throwable t) {
-            assertTrue("Unexpected exception thrown with no ExceptionQueuedEvents queued", false);
-        }
-
-    }
-
-    private void testHandleAbortProcessingExceptionQueued(ExceptionHandler handler) {
-
-        getFacesContext().setExceptionHandler(handler);
-        ExceptionQueuedEventContext ctx =
-              new ExceptionQueuedEventContext(getFacesContext(), new AbortProcessingException());
-
-        // queue the abort processing exception.  When calling handle(), no
-        // exception should be thrown, but the ExceptionQueuedEvent should be returned
-        // by getHandledExceptionQueuedEvents() while getUnhandledExceptionQueuedEvents()
-        // should be null, and getHandledExceptionQueuedEvent() should return null
-        // as nothing was thrown by the handle() method.
-        // Side note, validate the exception is properly queued by publishing
-        // and event.
-        queueException(ctx);
-        List<ExceptionQueuedEvent> unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        List<ExceptionQueuedEvent> handled = copyToList(handler.getHandledExceptionQueuedEvents());
-        assertTrue(unhandled.size() == 1);
-        assertTrue(handled.isEmpty());
-
-        try {
-            handler.handle();
-        } catch (Throwable t) {
-            assertTrue("Exception thrown by handle() when only an AbortProcessingException was queued.  These should be ignored.", false);
-        }
-
-        unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        handled = copyToList(handler.getHandledExceptionQueuedEvents());
-        assertNull(handler.getHandledExceptionQueuedEvent());
-        assertTrue(unhandled.isEmpty());
-        assertTrue(handled.size() == 1);
-
-        // queue another and call handled() again
-        queueException(ctx);
-        unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        handled = copyToList(handler.getHandledExceptionQueuedEvents());
-        assertTrue(unhandled.size() == 1);
-        assertTrue(handled.size() == 1);
-
-        try {
-            handler.handle();
-        } catch (Throwable t) {
-            assertTrue("Exception thrown by handle() when only an AbortProcessingException was queued.  These should be ignored.", false);
-        }
-
-        unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        handled = copyToList(handler.getHandledExceptionQueuedEvents());
-        assertTrue(unhandled.size() == 0);
-        assertTrue(handled.size() == 2);
-
-
-    }
-
-    public void testHandleExceptionThrow(ExceptionHandler handler) {
-
-        getFacesContext().setExceptionHandler(handler);
-        ExceptionQueuedEventContext abortProcessing =
-              new ExceptionQueuedEventContext(getFacesContext(), new AbortProcessingException());
-        ExceptionQueuedEventContext abortProcessing2 =
-              new ExceptionQueuedEventContext(getFacesContext(), new AbortProcessingException());
-
-        // wrap this up in a chain of exceptions to unsure that when
-        // getRootCause() we get what we expect
-        Exception e = new FacesException(
-                          new ELException(
-                              new FacesException(
-                                  new IllegalStateException(
-                                      new FacesException(
-                                          new IllegalArgumentException())))));
-        ExceptionQueuedEventContext runtimeException =
-              new ExceptionQueuedEventContext(getFacesContext(), e);
-        ExceptionQueuedEventContext runtimeException2 =
-              new ExceptionQueuedEventContext(getFacesContext(), e);
-        ExceptionQueuedEventContext abortProcessing3 =
-              new ExceptionQueuedEventContext(getFacesContext(), new AbortProcessingException());
-
-        queueException(abortProcessing);
-        queueException(abortProcessing2);
-        queueException(runtimeException);
-        queueException(runtimeException2);
-        queueException(abortProcessing3);
-
-        List<ExceptionQueuedEvent> unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        List<ExceptionQueuedEvent> handled = copyToList(handler.getHandledExceptionQueuedEvents());
-        assertTrue(unhandled.size() == 5);
-        assertTrue(handled.isEmpty());
-
-        try {
-            handler.handle();
-            assertTrue("No exception thrown by the handle() method, but there were RuntimeExceptions present that should have been thrown.", false);
-        } catch (Throwable t) {
-            assertTrue(t instanceof FacesException);
-            Throwable root = t.getCause();
-            assertTrue(root instanceof IllegalStateException);
-            root = root.getCause();
-            assertTrue(root instanceof FacesException);
-            root = root.getCause();
-            assertTrue(root instanceof IllegalArgumentException);
-            root = root.getCause();
-            assertNull(root);
-        }
-
-        assertTrue(handler.getHandledExceptionQueuedEvent().getSource() == runtimeException);
-        unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        handled = copyToList(handler.getHandledExceptionQueuedEvents());
-
-        assertTrue(handled.size() == 3);
-        assertTrue(unhandled.size() == 2);
-        assertTrue(handled.get(0).getSource() == abortProcessing);
-        assertTrue(handled.get(1).getSource() == abortProcessing2);
-        assertTrue(handled.get(2).getSource() == runtimeException);
-        assertTrue(unhandled.get(0).getSource() == runtimeException2);
-        assertTrue(unhandled.get(1).getSource() == abortProcessing3);
-
-        // call handle() again and make sure the results are sane
-        try {
-            handler.handle();
-            assertTrue("No exception thrown by the handle() method, but there were RuntimeExceptions present that should have been thrown.", false);
-        } catch (Throwable t) {
-            // expected
-        }
-
-        assertTrue(handler.getHandledExceptionQueuedEvent().getSource() == runtimeException2);
-        unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        handled = copyToList(handler.getHandledExceptionQueuedEvents());
-
-        assertTrue(handled.size() == 4);
-        assertTrue(unhandled.size() == 1);
-        assertTrue(handled.get(0).getSource() == abortProcessing);
-        assertTrue(handled.get(1).getSource() == abortProcessing2);
-        assertTrue(handled.get(2).getSource() == runtimeException);
-        assertTrue(handled.get(3).getSource() == runtimeException2);
-        assertTrue(unhandled.get(0).getSource() == abortProcessing3);
-
-        // call handle() again and make sure the results are sane - no exception thrown
-        // this time
-        try {
-            handler.handle();
-        } catch (Throwable t) {
-            assertTrue("Exception thrown by handle() when only an AbortProcessingException was queued.  These should be ignored.", false);
-        }
-
-        assertTrue(handler.getHandledExceptionQueuedEvent().getSource() == runtimeException2);
-        unhandled = copyToList(handler.getUnhandledExceptionQueuedEvents());
-        handled = copyToList(handler.getHandledExceptionQueuedEvents());
-
-        assertTrue(handled.size() == 5);
-        assertTrue(unhandled.isEmpty());
-        assertTrue(handled.get(0).getSource() == abortProcessing);
-        assertTrue(handled.get(1).getSource() == abortProcessing2);
-        assertTrue(handled.get(2).getSource() == runtimeException);
-        assertTrue(handled.get(3).getSource() == runtimeException2);
-        assertTrue(handled.get(4).getSource() == abortProcessing3);
-
-    }
-
-
-    private void testHandleBeforeAfterExceptions(ExceptionHandler handler, boolean shouldThrow) {
-
-        // In 2.0, exceptions thrown by before or after phases of a single
-        // phase will be rethrown.  In 1.2, they were logged and swallowed.
-        // Make sure this is the case.
-        getFacesContext().setExceptionHandler(handler);
-
-        ExceptionQueuedEventContext ctx = new ExceptionQueuedEventContext(getFacesContext(), new RuntimeException());
-        ctx.getAttributes().put(ExceptionQueuedEventContext.IN_BEFORE_PHASE_KEY, Boolean.TRUE);
-        queueException(ctx);
-
-        try {
-            handler.handle();
-            if (shouldThrow) {
-                assertTrue("[BEFORE] Exception expected to be thrown", false);
-            }
-        } catch (Throwable t) {
-            if (!shouldThrow) {
-                assertTrue("[BEFORE] Exception should not have been thrown", false);
-            }
-        }
-
-        ctx.getAttributes().remove(ExceptionQueuedEventContext.IN_BEFORE_PHASE_KEY);
-        ctx.getAttributes().put(ExceptionQueuedEventContext.IN_AFTER_PHASE_KEY, Boolean.TRUE);
-
-        try {
-            handler.handle();
-            if (shouldThrow) {
-                assertTrue("[AFTER] Exception expected to be thrown", false);
-            }
-        } catch (Throwable t) {
-            if (!shouldThrow) {
-                assertTrue("[AFTER] Exception should not have been thrown", false);
-            }
-        }
-
-    }
-
-    private void testGetRootCauseNull(ExceptionHandler handler) {
-
-        assertNull(handler.getRootCause(null));
-
-    }
-
-
-    private List<ExceptionQueuedEvent> copyToList(Iterable<ExceptionQueuedEvent> events) {
-
-        List<ExceptionQueuedEvent> list = new ArrayList<ExceptionQueuedEvent>();
-        for (ExceptionQueuedEvent event : events) {
-            list.add(event);
-        }
-        return list;
-
-    }
-
-
-    private void queueException(ExceptionQueuedEventContext source) {
-
-        getFacesContext().getApplication().publishEvent(getFacesContext(),
-                                                        ExceptionQueuedEvent.class,
-                                                        source);
-
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/context/TestExternalContextFactoryImpl.java b/jsf-ri/test/com/sun/faces/context/TestExternalContextFactoryImpl.java
deleted file mode 100644
index d876c8e..0000000
--- a/jsf-ri/test/com/sun/faces/context/TestExternalContextFactoryImpl.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestExternalContextFactoryImpl.java
-
-package com.sun.faces.context;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.context.ExternalContext;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-
-/**
- * <B>TestExternalContextFactoryImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestExternalContextFactoryImpl extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestExternalContextFactoryImpl() {
-        super("TestExternalContextFactory");
-    }
-
-
-    public TestExternalContextFactoryImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-//
-// General Methods
-//
-
-    public void testCreateMethods() {
-        boolean gotException = false;
-        ExternalContext externalContext = null;
-        ExternalContextFactoryImpl externalContextFactory = null;
-
-        // create ExternalContextFactory.
-        externalContextFactory = new ExternalContextFactoryImpl();
-
-        try {
-            externalContext = externalContextFactory.getExternalContext(null, null, null);
-        } catch (FacesException fe) {
-            gotException = true;
-        } catch (NullPointerException ee) {
-            gotException = true;
-        }
-        assertTrue(gotException);
-
-    }
-
-} // end of class TestExternalContextFactoryImpl
diff --git a/jsf-ri/test/com/sun/faces/context/TestExternalContextImpl.java b/jsf-ri/test/com/sun/faces/context/TestExternalContextImpl.java
deleted file mode 100644
index 399c6b1..0000000
--- a/jsf-ri/test/com/sun/faces/context/TestExternalContextImpl.java
+++ /dev/null
@@ -1,1811 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestExternalContextImpl.java
-
-package com.sun.faces.context;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.apache.cactus.WebRequest;
-import org.apache.cactus.WebResponse;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpSession;
-import javax.faces.context.ExternalContext;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collections;
-
-/**
- * <B>TestExternalContextImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestExternalContextImpl extends ServletFacesTestCase {
-
-    // These constants identify positions in the boolean supported array;
-    // Each one is named after the existing method in the Map interface;
-    // For example, "ApplicationMap" implementation of Map interface
-    // supports "put" method, but "RequestParameterMap" implementation may not;
-    // So, for "ApplicationMap" you could say:
-    //    supported[PUT]=true;
-    // Intitially, all array elements are set to false;
-
-    public static final int CLEAR = 0;
-    public static final int CONTAINS_KEY = 1;
-    public static final int CONTAINS_VALUE = 2;
-    public static final int ENTRY_SET = 3;
-    public static final int GET = 4;
-    public static final int HASH_CODE = 5;
-    public static final int IS_EMPTY = 6;
-    public static final int KEY_SET = 7;
-    public static final int PUT = 8;
-    public static final int PUT_ALL = 9;
-    public static final int REMOVE = 10;
-    public static final int SIZE = 11;
-    public static final int VALUES = 12;
-
-    public boolean[] supported = new boolean[13];
-
-    public TestExternalContextImpl() {
-        super("TestExternalContext");
-    }
-
-
-    public TestExternalContextImpl(String name) {
-        super(name);
-    }
-
-    public void initializeSupported() {
-        for (int i = 0; i < supported.length; i++) {
-            supported[i] = false;
-        }
-    }
-
-
-    // ------------------------------------------------------------- TestMethods
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    // Tests for methods added in 2.0
-
-
-    public void beginGetRequestContentLength(WebRequest req) {
-        req.addParameter("foo", "bar", WebRequest.POST_METHOD);
-    }
-
-    public void testGetRequestContentLength() {
-
-        ExternalContext ctx = getFacesContext().getExternalContext();
-        assertEquals(Integer.valueOf(ctx.getRequestContentLength()), Integer.valueOf(7));
-        
-    }
-
-
-    public void testAddResponseCookie() {
-
-        ExternalContext ctx = getFacesContext().getExternalContext();
-
-        // first cookie - no properties
-        ctx.addResponseCookie("cookie1", "value1", null);
-
-        // second cookie - empty map
-        ctx.addResponseCookie("cookie2", "value2", Collections.<String,Object>emptyMap());
-
-        // third cookie - domain specified
-        Map<String,Object> m = new HashMap<String,Object>();
-        m.put("domain", "snoozer");
-        ctx.addResponseCookie("cookie3", "value3", m);
-
-        // fourth cookie - max age
-        m.clear();
-        m.put("maxAge", 360);
-        ctx.addResponseCookie("cookie4", "value4", m);
-
-        // fifth cookie - path
-        m.clear();
-        m.put("path", "/foo");
-        ctx.addResponseCookie("cookie5", "value5", m);
-
-        // sixth cookie - secure
-        m.clear();
-        m.put("secure", true);
-        ctx.addResponseCookie("cookie6", "value6", m);
-
-        // seventh cookie - multiple values
-        m.clear();
-        m.put("maxAge", 40);
-        m.put("path", "/foobar");
-        m.put("domain", "snoozer");
-        ctx.addResponseCookie("cookie7", "value7", m);
-
-        // invalid map property results in IllegalArgumentException
-        m.clear();
-        m.put("invalid", "invalid");
-        try {
-            ctx.addResponseCookie("cookie8", "value8", m);
-            assertTrue(false);
-        } catch (IllegalArgumentException ignored) {
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-
-    }
-
-    public void endAddResponseCookie(WebResponse res) {
-        org.apache.cactus.Cookie c = res.getCookie("cookie1");
-        assertNotNull(c);
-        assertTrue("value1".equals(c.getValue()));
-        assertTrue("localhost".equals(c.getDomain()));
-        assertTrue("/test".equals(c.getPath()));
-        assertTrue(!c.isSecure());
-        assertNull(c.getExpiryDate());
-
-        c = res.getCookie("cookie2");
-        assertNotNull(c);
-        assertTrue("value2".equals(c.getValue()));
-        assertTrue("localhost".equals(c.getDomain()));
-        assertTrue("/test".equals(c.getPath()));
-        assertTrue(!c.isSecure());
-        assertNull(c.getExpiryDate());
-
-        c = res.getCookie("cookie3");
-        assertNotNull(c);
-        assertTrue("value3".equals(c.getValue()));
-        assertTrue("snoozer".equals(c.getDomain()));
-        assertTrue("/test".equals(c.getPath()));
-        assertTrue(!c.isSecure());
-        assertNull(c.getExpiryDate());
-
-        c = res.getCookie("cookie4");
-        assertNotNull(c);
-        assertTrue("value4".equals(c.getValue()));
-        assertTrue("localhost".equals(c.getDomain()));
-        assertTrue("/test".equals(c.getPath()));
-        assertTrue(!c.isSecure());
-        assertNotNull(c.getExpiryDate());
-
-        c = res.getCookie("cookie5");
-        assertNotNull(c);
-        assertTrue("value5".equals(c.getValue()));
-        assertTrue("localhost".equals(c.getDomain()));
-        assertTrue("/foo".equals(c.getPath()));
-        assertTrue(!c.isSecure());
-        assertNull(c.getExpiryDate());
-
-        c = res.getCookie("cookie6");
-        assertNotNull(c);
-        assertTrue("value6".equals(c.getValue()));
-        assertTrue("localhost".equals(c.getDomain()));
-        assertTrue("/test".equals(c.getPath()));
-        assertTrue(c.isSecure());
-        assertNull(c.getExpiryDate());
-
-        c = res.getCookie("cookie7");
-        assertNotNull(c);
-        assertTrue("value7".equals(c.getValue()));
-        assertTrue("snoozer".equals(c.getDomain()));
-        assertTrue("/foobar".equals(c.getPath()));
-        assertTrue(!c.isSecure());
-        assertNotNull(c.getExpiryDate());
-    }
-
-
-    public void testInvalidateSession() {
-        ExternalContext ctx = getFacesContext().getExternalContext();
-        Map<String,Object> map = ctx.getSessionMap();
-        map.put("foo", "bar");
-        ctx.invalidateSession();
-        try {
-            session.getAttribute("foor");
-            assertTrue(false);
-        } catch (IllegalStateException ignored) {
-
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-    }
-
-    public void testRequestScheme() {
-        ExternalContext ctx = getFacesContext().getExternalContext();
-        assertTrue(ctx.getRequestScheme().equals(request.getScheme()));
-    }
-
-    public void testServerPort() {
-        ExternalContext ctx = getFacesContext().getExternalContext();
-        assertTrue(ctx.getRequestServerPort() == request.getServerPort());
-    }
-
-    public void testServerName() {
-        ExternalContext ctx = getFacesContext().getExternalContext();
-        assertTrue(ctx.getRequestServerName().equals(request.getServerName()));
-    }
-
-    public void testGetResponseOutputStream() throws Exception {
-        ExternalContext ctx = getFacesContext().getExternalContext();
-        assertTrue(ctx.getResponseOutputStream() != null);
-    }
-
-    public void testResponseContentType() {
-        ExternalContext ctx = getFacesContext().getExternalContext();
-        ctx.setResponseContentType("text/plain");
-        response.getContentType().contains("text/plain");
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-
-//PENDING(rogerk) the unit test for ExternalContext should cast the Object instances
-// to the expected type.  It should test put and get.  It should test the
-// UnsupportedOperationException is thrown when expected, etc.
-
-// Tests constructor's ability to create contained objects...
-    public void testConstructor() {
-        ExternalContextImpl ecImpl = new ExternalContextImpl(
-            getConfig().getServletContext(),
-            getRequest(),
-            getResponse());
-
-        System.out.println("Testing getSession not null...");
-        assertTrue(null != ecImpl.getSession(false));
-        System.out.println("Testing getContext not null...");
-        assertTrue(null != ecImpl.getContext());
-        System.out.println("Testing getRequest not null...");
-        assertTrue(null != ecImpl.getRequest());
-        System.out.println("Testing getResponse not null...");
-        assertTrue(null != ecImpl.getResponse());
-        System.out.println("Testing getApplicationMap not null...");
-        assertTrue(null != ecImpl.getApplicationMap());
-        System.out.println("Testing getSessionMap not null...");
-        assertTrue(null != ecImpl.getSessionMap());
-        System.out.println("Testing getRequestMap not null...");
-        assertTrue(null != ecImpl.getRequestMap());
-    }
-
-
-    public void testServletContext() {
-        getConfig().getServletContext().setAttribute("foo", "bar");
-        ServletContext sc = (ServletContext) getFacesContext()
-            .getExternalContext()
-            .getContext();
-        assertTrue(null != sc.getAttribute("foo"));
-        assertTrue(
-            null !=
-            getFacesContext().getExternalContext().getApplicationMap().get(
-                "foo"));
-    }
-
-
-    public void testGetSession() {
-        Object session = getFacesContext().getExternalContext().getSession(
-            false);
-        assertTrue(null != session);
-        assertTrue(session instanceof HttpSession);
-    }
-
-
-    public void testGetRequest() {
-        Object request = getFacesContext().getExternalContext().getRequest();
-        assertTrue(null != request);
-        assertTrue(request instanceof ServletRequest);
-    }
-
-
-    public void testGetResponse() {
-        Object response = getFacesContext().getExternalContext().getResponse();
-        assertTrue(null != response);
-        assertTrue(response instanceof ServletResponse);
-    }
-
-
-    public void beginGetRequestParameterNames(WebRequest theRequest) {
-        theRequest.addParameter("One", "one");
-        theRequest.addParameter("Two", "two");
-        theRequest.addParameter("Three", "three");
-    }
-
-
-    public void testGetRequestParameterNames() {
-        Iterator iter = getFacesContext().getExternalContext()
-            .getRequestParameterNames();
-        boolean oneFound = false, twoFound = false, threeFound = false;
-        while (iter.hasNext()) {
-            String paramName = (String) iter.next();
-            if (paramName.equals("One")) {
-                oneFound = true;
-            } else if (paramName.equals("Two")) {
-                twoFound = true;
-            } else if (paramName.equals("Three")) {
-                threeFound = true;
-            }
-        }
-        assertTrue(oneFound && twoFound && threeFound);
-    }
-
-
-    public void beginGetLocale(WebRequest theRequest) {
-        theRequest.addHeader("Accept-Language", "de");
-    }
-
-
-    public void testGetLocale() {
-        Locale locale = getFacesContext().getExternalContext()
-            .getRequestLocale();
-        assertTrue(locale.getLanguage().equals("de"));
-    }
-
-
-    public void beginGetRequestPathInfo(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/foo", "/bar", null);
-    }
-
-
-    public void testGetRequestPathInfo() {
-        String pathInfo = getFacesContext().getExternalContext()
-            .getRequestPathInfo();
-        assertTrue(pathInfo.equals("/bar"));
-    }
-
-    // PENDING(craigmcc) - Comment out this test because on my platform
-    // the getRequestCookies() call returns null
-    /*
-    public void beginGetRequestCookies(WebRequest theRequest) {
-        theRequest.addCookie("One", "one");
-        theRequest.addCookie("Two", "two");
-        theRequest.addCookie("Three", "three");
-    }
-
-    public void testGetRequestCookies() {
-        Cookie[] cookies = getFacesContext().getExternalContext().getRequestCookies();
-        boolean oneNFound=false,twoNFound=false,threeNFound=false;
-        boolean oneVFound=false,twoVFound=false,threeVFound=false;
-        for (int i=0; i<cookies.length; i++) {
-            if (cookies[i].getName().equals("One")) {
-                oneNFound = true;
-            } else if (cookies[i].getName().equals("Two")) {
-                twoNFound = true;
-            } else if (cookies[i].getName().equals("Three")) {
-                threeNFound = true;
-            }
-            if (cookies[i].getValue().equals("one")) {
-                oneVFound = true;
-            } else if (cookies[i].getValue().equals("two")) {
-                twoVFound = true;
-            } else if (cookies[i].getValue().equals("three")) {
-                threeVFound = true;
-            }
-        }
-        assertTrue(oneNFound && twoNFound && threeNFound &&
-            oneVFound && twoVFound && threeVFound);
-    }
-    */
-
-    public void beginGetRequestContextPath(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/foo", "/bar", null);
-    }
-
-
-    public void testGetRequestContextPath() {
-        String contextPath = getFacesContext().getExternalContext()
-            .getRequestContextPath();
-        assertTrue(contextPath.equals("/test"));
-    }
-
-
-    public void testGetInitParameter() {
-        String expectedValue = config.getServletContext().getInitParameter(
-            "testInitParam");
-        String value = getFacesContext().getExternalContext().getInitParameter(
-            "testInitParam");
-        assertTrue(expectedValue.equals(value));
-    }
-
-
-    public void testGetResourcePaths() {
-        Set paths = getFacesContext().getExternalContext().getResourcePaths(
-            "/");
-        Object[] pathArray = paths.toArray();
-        assertTrue(pathArray.length > 0);
-        boolean foundIt = false;
-        // assert that WEB-INF is found (at least)
-        for (int i = 0; i < pathArray.length; i++) {
-            if (pathArray[i].equals("/WEB-INF/")) {
-                foundIt = true;
-                break;
-            }
-        }
-        assertTrue(foundIt);
-    }
-
-
-    public void testGetResourceAsStream() {
-        InputStream is = getFacesContext().getExternalContext()
-            .getResourceAsStream("/WEB-INF/web.xml");
-        assertTrue(null != is);
-    }
-
-    //PENDNG(rogerk) not sure how to handle these...
-
-    public void testEncodeActionURL() {
-    }
-
-
-    public void testEncodeResourceURL() {
-    }
-
-
-    public void testEncodeNamespaceURL() {
-    }
-
-
-    public void testEncodeURL() {
-    }
-
-
-    public void testDispatchMessage() {
-    }
-
-
-    public void testApplicatonMap() {
-        System.out.println("Testing ApplicationMap...");
-        Map applicationMap = getFacesContext().getExternalContext()
-            .getApplicationMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[PUT] = true;
-        supported[REMOVE] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        supported[PUT_ALL] = true;
-        supported[CLEAR] = true;
-
-        testUnsupportedExceptions(applicationMap, supported);
-
-        System.out.println(
-            "    Testing supported methods of ApplicationMap...");
-        applicationMap.put("foo", "bar");
-        String value = (String) applicationMap.get("foo");
-        assertTrue(value.equals("bar"));
-        String removed = (String) applicationMap.remove("foo");
-        assertTrue(null == (String) applicationMap.get("foo"));
-        assertTrue(removed.equals("bar"));
-        applicationMap.put("foo", "bar");
-        assertTrue(applicationMap.containsKey("foo"));
-        assertTrue(applicationMap.containsValue("bar"));
-        assertTrue(!applicationMap.entrySet().isEmpty());
-        assertTrue(!applicationMap.values().isEmpty());
-        assertTrue(!applicationMap.keySet().isEmpty());
-        assertTrue(applicationMap.size() >= 1);
-        assertTrue(
-            applicationMap.hashCode() ==
-            getFacesContext().getExternalContext().getApplicationMap()
-            .hashCode());
-        assertTrue(applicationMap.equals(
-            getFacesContext().getExternalContext().getApplicationMap()));
-        assertTrue(!applicationMap.equals(null));
-        assertTrue(!applicationMap.equals(new HashMap()));
-        applicationMap.remove("foo");
-
-       if (applicationMap.isEmpty()) {
-            applicationMap.put("some", "value");
-        }
-        /* Commented out since it appears that certain attributes
-           cannot be removed from the ServletContext when running against
-           glassfish
-        Map cloneMap = new HashMap(applicationMap);
-        applicationMap.clear();
-        assertTrue(applicationMap.isEmpty());
-        applicationMap.putAll(cloneMap);
-        assertTrue(!applicationMap.isEmpty());*/
-
-        // ensure EntrySet operations reflect on the underlying map.
-        applicationMap.put("key1", "value1");
-        Set entrySet = applicationMap.entrySet();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                entrySet.remove(entry);
-            }
-        }
-        assertTrue(applicationMap.get("key1") == null);
-
-        applicationMap.put("key1", "value1");
-
-        entrySet = applicationMap.entrySet();
-        int currentSize = applicationMap.size();
-        ArrayList list = new ArrayList();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                list.add(entry);
-                break;
-            }
-        }
-        entrySet.removeAll(list);
-        assertTrue(applicationMap.size() == (currentSize - 1));
-
-        //Map cloneMap = new HashMap(applicationMap);
-        applicationMap.put("key1", "value1");
-        list = new ArrayList();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                list.add(entry);
-                break;
-            }
-        }
-         /* Commented out since it appears that certain attributes
-           cannot be removed from the ServletContext when running against
-           glassfish
-        assertTrue(entrySet.retainAll(list));
-        assertTrue(applicationMap.size() == 1);
-        applicationMap.clear();
-        applicationMap.putAll(cloneMap); */
-
-        // next validate Iterator.remove goes through to the backing Map.
-        applicationMap.put("key1", "value1");
-        for (Iterator i = applicationMap.entrySet().iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                i.remove();
-            }
-        }
-        assertTrue(applicationMap.get("key1") == null);
-
-        applicationMap.put("key1", "value1");
-        for (Iterator i = applicationMap.keySet().iterator(); i.hasNext(); ) {
-            String entry = (String) i.next();
-            if ("key1".equals(entry)) {
-                i.remove();
-            }
-        }
-        assertTrue(applicationMap.get("key1") == null);
-
-        applicationMap.put("key1", "value1");
-        applicationMap.put("key2", "value1");
-        for (Iterator i = applicationMap.values().iterator(); i.hasNext(); ) {
-            Object val = i.next();
-            if ("value1".equals(val)) {
-                i.remove();
-            }
-        }
-        assertTrue(applicationMap.get("key1") == null);
-        assertTrue(applicationMap.get("key2") == null);
-
-
-        // ensure IllegalStateException if Iterator isn't properly positioned
-        Iterator i = applicationMap.entrySet().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        i = applicationMap.keySet().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        i = applicationMap.values().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        // Breaks V3 - JSP taglib cache is stored in servlet context.
-        // If this is removed, JSPs won't compile anymore
-        
-        // ensure IllegalStateException if Iterator.remove() is called more than
-        // once per each next() call
-        //i = applicationMap.entrySet().iterator();
-        //i.next();
-        //i.remove();
-        //try {
-        //    i.remove();
-        //    assertTrue(false);
-        //} catch (Exception e) {
-        //    assertTrue(e instanceof IllegalStateException);
-        //}
-
-        //i = applicationMap.keySet().iterator();
-        //i.next();
-        //i.remove();
-        //try {
-        //    i.remove();
-        //    assertTrue(false);
-        //} catch (Exception e) {
-        //    assertTrue(e instanceof IllegalStateException);
-        //}
-        //
-        //i = applicationMap.values().iterator();
-        //i.next();
-        //i.remove();
-        //try {
-        //    i.remove();
-        //    assertTrue(false);
-        //} catch (Exception e) {
-        //    assertTrue(e instanceof IllegalStateException);
-        //}
-    }
-
-
-    public void testSessionMap() {
-        System.out.println("Testing SessionMap...");
-        Map sessionMap = getFacesContext().getExternalContext().getSessionMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[PUT] = true;
-        supported[REMOVE] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        supported[PUT_ALL] = true;
-        supported[CLEAR] = true;
-
-        testUnsupportedExceptions(sessionMap, supported);
-
-        System.out.println("    Testing supported methods of SessionMap...");
-        sessionMap.put("foo", "bar");
-        String value = (String) sessionMap.get("foo");
-        assertTrue(value.equals("bar"));
-        String removed = (String) sessionMap.remove("foo");
-        assertTrue(null == (String) sessionMap.get("foo"));
-        assertTrue(removed.equals("bar"));
-        sessionMap.put("foo", "bar");
-        assertTrue(sessionMap.containsKey("foo"));
-        assertTrue(sessionMap.containsValue("bar"));
-        assertTrue(!sessionMap.entrySet().isEmpty());
-        assertTrue(!sessionMap.values().isEmpty());
-        assertTrue(!sessionMap.keySet().isEmpty());
-        assertTrue(sessionMap.size() >= 1);
-        assertTrue(sessionMap.hashCode() ==
-                   getFacesContext().getExternalContext().getSessionMap()
-                   .hashCode());
-        assertTrue(sessionMap.equals(
-            getFacesContext().getExternalContext().getSessionMap()));
-        assertTrue(!sessionMap.equals(null));
-        assertTrue(!sessionMap.equals(new HashMap()));
-        sessionMap.remove("foo");
-        if (sessionMap.isEmpty()) {
-            sessionMap.put("some", "value");
-        }
-        Map cloneMap = new HashMap(sessionMap);
-        sessionMap.clear();
-        assertTrue(sessionMap.isEmpty());
-        sessionMap.putAll(cloneMap);
-        assertTrue(!sessionMap.isEmpty());
-
-        // ensure EntrySet operations reflect on the underlying map.
-        sessionMap.put("key1", "value1");
-        Set entrySet = sessionMap.entrySet();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                entrySet.remove(entry);
-            }
-        }
-        assertTrue(sessionMap.get("key1") == null);
-
-        sessionMap.put("key1", "value1");
-
-        entrySet = sessionMap.entrySet();
-        int currentSize = sessionMap.size();
-        ArrayList list = new ArrayList();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                list.add(entry);
-                break;
-            }
-        }
-        entrySet.removeAll(list);
-        assertTrue(sessionMap.size() == (currentSize - 1));
-
-        cloneMap = new HashMap(sessionMap);
-        sessionMap.put("key1", "value1");
-        list = new ArrayList();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                list.add(entry);
-                break;
-            }
-        }
-        assertTrue(entrySet.retainAll(list));
-        assertTrue(sessionMap.size() == 1);
-        sessionMap.clear();
-        sessionMap.putAll(cloneMap);
-
-        // next validate Iterator.remove goes through to the backing Map.
-        cloneMap = new HashMap(sessionMap);
-        for (Iterator i = sessionMap.entrySet().iterator(); i.hasNext(); ) {
-            i.next();
-            i.remove();
-        }
-        assertTrue(sessionMap.isEmpty());
-        sessionMap.putAll(cloneMap);
-
-        sessionMap.put("key1", "value1");
-        for (Iterator i = sessionMap.keySet().iterator(); i.hasNext(); ) {
-            String entry = (String) i.next();
-            if ("key1".equals(entry)) {
-                i.remove();
-            }
-        }
-        assertTrue(sessionMap.get("key1") == null);
-
-        sessionMap.put("key1", "value1");
-        sessionMap.put("key2", "value1");
-        for (Iterator i = sessionMap.values().iterator(); i.hasNext(); ) {
-            Object val = i.next();
-            if ("value1".equals(val)) {
-                i.remove();
-            }
-        }
-        assertTrue(sessionMap.get("key1") == null);
-        assertTrue(sessionMap.get("key2") == null);
-
-        // ensure IllegalStateException if Iterator isn't properly positioned
-        Iterator i = sessionMap.entrySet().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        i = sessionMap.keySet().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        i = sessionMap.values().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        // ensure IllegalStateException if Iterator.remove() is called more than
-        // once per each next() call
-        sessionMap.put("key1", "value1");
-        i = sessionMap.entrySet().iterator();
-        i.next();
-        i.remove();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        sessionMap.put("key1", "value1");
-        i = sessionMap.keySet().iterator();
-        i.next();
-        i.remove();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        sessionMap.put("key1", "value1");
-        i = sessionMap.values().iterator();
-        i.next();
-        i.remove();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-    }
-
-
-    public void testRequestMap() {
-        System.out.println("Testing RequestMap...");
-        Map requestMap = getFacesContext().getExternalContext().getRequestMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[PUT] = true;
-        supported[REMOVE] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        supported[PUT_ALL] = true;
-        supported[CLEAR] = true;
-        testUnsupportedExceptions(requestMap, supported);
-
-        System.out.println("    Testing supported methods of RequestMap...");
-        requestMap.put("foo", "bar");
-        String value = (String) requestMap.get("foo");
-        assertTrue(value.equals("bar"));
-        String removed = (String) requestMap.remove("foo");
-        assertTrue(null == (String) requestMap.get("foo"));
-        assertTrue(removed.equals("bar"));
-        requestMap.put("foo", "bar");
-        assertTrue(requestMap.containsKey("foo"));
-        assertTrue(requestMap.containsValue("bar"));
-        assertTrue(!requestMap.entrySet().isEmpty());
-        assertTrue(!requestMap.values().isEmpty());
-        assertTrue(!requestMap.keySet().isEmpty());
-        assertTrue(requestMap.size() >= 1);
-        assertTrue(requestMap.hashCode() ==
-                   getFacesContext().getExternalContext().getRequestMap()
-                   .hashCode());
-        assertTrue(requestMap.equals(
-            getFacesContext().getExternalContext().getRequestMap()));
-        assertTrue(!requestMap.equals(null));
-        assertTrue(!requestMap.equals(new HashMap()));
-        requestMap.remove("foo");
-
-        if (requestMap.isEmpty()) {
-            requestMap.put("some", "value");
-        }
-        Map cloneMap = new HashMap(requestMap);
-        requestMap.clear();
-        assertTrue(requestMap.isEmpty());
-        requestMap.putAll(cloneMap);
-        assertTrue(!requestMap.isEmpty());
-
-        // ensure EntrySet operations reflect on the underlying map.
-        requestMap.put("key1", "value1");
-        Set entrySet = requestMap.entrySet();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                entrySet.remove(entry);
-            }
-        }
-        assertTrue(requestMap.get("key1") == null);
-
-        requestMap.put("key1", "value1");
-
-        entrySet = requestMap.entrySet();
-        int currentSize = requestMap.size();
-        ArrayList list = new ArrayList();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                list.add(entry);
-                break;
-            }
-        }
-        entrySet.removeAll(list);
-        assertTrue(requestMap.size() == (currentSize - 1));
-
-        cloneMap = new HashMap(requestMap);
-        requestMap.put("key1", "value1");
-        list = new ArrayList();
-        for (Iterator i = entrySet.iterator(); i.hasNext(); ) {
-            Map.Entry entry = (Map.Entry) i.next();
-            if ("key1".equals(entry.getKey())) {
-                list.add(entry);
-                break;
-            }
-        }
-        assertTrue(entrySet.retainAll(list));
-        assertTrue(requestMap.size() == 1);
-        requestMap.clear();
-        requestMap.putAll(cloneMap);
-
-        // next validate Iterator.remove goes through to the backing Map.
-        cloneMap = new HashMap(requestMap);
-        for (Iterator i = requestMap.entrySet().iterator(); i.hasNext(); ) {
-            i.next();
-            i.remove();
-        }
-        assertTrue(requestMap.isEmpty());
-        requestMap.putAll(cloneMap);
-
-        requestMap.put("key1", "value1");
-        for (Iterator i = requestMap.keySet().iterator(); i.hasNext(); ) {
-            String entry = (String) i.next();
-            if ("key1".equals(entry)) {
-                i.remove();
-            }
-        }
-        assertTrue(requestMap.get("key1") == null);
-
-        requestMap.put("key1", "value1");
-        requestMap.put("key2", "value1");
-        for (Iterator i = requestMap.values().iterator(); i.hasNext(); ) {
-            Object val = i.next();
-            if ("value1".equals(val)) {
-                i.remove();
-            }
-        }
-        assertTrue(requestMap.get("key1") == null);
-        assertTrue(requestMap.get("key2") == null);
-
-        // ensure IllegalStateException if Iterator isn't properly positioned
-        requestMap.put("key1", "value1");
-        Iterator i = requestMap.entrySet().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        requestMap.put("key1", "value1");
-        i = requestMap.keySet().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        requestMap.put("key1", "value1");
-        i = requestMap.values().iterator();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        // ensure IllegalStateException if Iterator.remove() is called more than
-        // once per each next() call
-        requestMap.put("key1", "value1");
-        i = requestMap.entrySet().iterator();
-        i.next();
-        i.remove();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        requestMap.put("key1", "value1");
-        i = requestMap.keySet().iterator();
-        i.next();
-        i.remove();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-
-        requestMap.put("key1", "value1");
-        i = requestMap.values().iterator();
-        i.next();
-        i.remove();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof IllegalStateException);
-        }
-    }
-
-
-    public void beginRequestParameterMap(WebRequest theRequest) {
-        theRequest.addParameter("foo", "bar");
-    }
-
-
-    public void testRequestParameterMap() {
-        System.out.println("Testing RequestParameterMap...");
-        Map requestParameterMap = getFacesContext().getExternalContext()
-            .getRequestParameterMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        testUnsupportedExceptions(requestParameterMap, supported);
-
-        System.out.println(
-            "    Testing supported methods of RequestParameterMap...");
-        assertTrue(requestParameterMap.get("foo") instanceof String);
-        String value = (String) requestParameterMap.get("foo");
-        assertTrue(value.equals("bar"));
-        assertTrue(requestParameterMap.containsKey("foo"));
-        assertTrue(requestParameterMap.containsValue("bar"));
-        assertTrue(!requestParameterMap.entrySet().isEmpty());
-        assertTrue(!requestParameterMap.values().isEmpty());
-        assertTrue(!requestParameterMap.keySet().isEmpty());
-        assertTrue(requestParameterMap.size() >= 1);
-        assertTrue(
-            requestParameterMap.hashCode() ==
-            getFacesContext().getExternalContext().getRequestParameterMap()
-            .hashCode());
-        assertTrue(requestParameterMap.equals(
-            getFacesContext().getExternalContext().getRequestParameterMap()));
-        assertTrue(!requestParameterMap.equals(null));
-        assertTrue(!requestParameterMap.equals(new HashMap()));
-
-        // ensure we can't modify the map using Iterator.remove();
-        Iterator i = requestParameterMap.entrySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestParameterMap.keySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestParameterMap.values().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        // ensure we can't remove elements from the Set.
-        try {
-            requestParameterMap.entrySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestParameterMap.keySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestParameterMap.values().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-    }
-
-
-    public void beginRequestParameterValuesMap(WebRequest theRequest) {
-        theRequest.addParameter("foo", "one");
-        theRequest.addParameter("foo", "two");
-        theRequest.addParameter("foo", "three");
-    }
-
-
-    public void testRequestParameterValuesMap() {
-        System.out.println("Testing RequestParameterValuesMap...");
-        Map requestParameterValuesMap = getFacesContext().getExternalContext()
-            .getRequestParameterValuesMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        testUnsupportedExceptions(requestParameterValuesMap, supported);
-
-        System.out.println(
-            "    Testing supported methods of RequesParameterValuesMap...");
-        assertTrue(requestParameterValuesMap.get("foo") instanceof String[]);
-        String[] returnValues = (String[]) requestParameterValuesMap.get("foo");
-        String[] values = {"one", "two", "three", };
-        assertTrue(Arrays.equals(values, returnValues));
-        assertTrue(requestParameterValuesMap.containsKey("foo"));
-        assertTrue(
-            requestParameterValuesMap.containsValue(
-                request.getParameterValues("foo")));
-        assertTrue(!requestParameterValuesMap.entrySet().isEmpty());
-        assertTrue(!requestParameterValuesMap.values().isEmpty());
-        assertTrue(!requestParameterValuesMap.keySet().isEmpty());
-        assertTrue(requestParameterValuesMap.size() >= 1);
-        assertTrue(
-            requestParameterValuesMap.hashCode() ==
-            getFacesContext().getExternalContext()
-            .getRequestParameterValuesMap()
-            .hashCode());
-        assertTrue(
-            requestParameterValuesMap.equals(
-                getFacesContext().getExternalContext()
-                .getRequestParameterValuesMap()));
-        assertTrue(!requestParameterValuesMap.equals(null));
-        assertTrue(!requestParameterValuesMap.equals(new HashMap()));
-
-        // ensure we can't modify the map using Iterator.remove();
-        Iterator i = requestParameterValuesMap.entrySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestParameterValuesMap.keySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestParameterValuesMap.values().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        // ensure we can't remove elements from the Set.
-        try {
-            requestParameterValuesMap.entrySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestParameterValuesMap.keySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestParameterValuesMap.values().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-    }
-
-
-    public void beginRequestHeaderMap(WebRequest theRequest) {
-        theRequest.addHeader("foo", "bar");
-    }
-
-
-    public void testRequestHeaderMap() {
-        System.out.println("Testing RequestHeaderMap...");
-        Map requestHeaderMap = getFacesContext().getExternalContext()
-            .getRequestHeaderMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        testUnsupportedExceptions(requestHeaderMap, supported);
-
-        System.out.println(
-            "    Testing supported methods of RequesHeaderMap...");
-        assertTrue(requestHeaderMap.get("foo") instanceof String);
-        String value = (String) requestHeaderMap.get("foo");
-        assertTrue(value.equals("bar"));
-        assertTrue(requestHeaderMap.containsKey("foo"));
-        assertTrue(requestHeaderMap.containsValue("bar"));
-        assertTrue(!requestHeaderMap.entrySet().isEmpty());
-        assertTrue(!requestHeaderMap.values().isEmpty());
-        assertTrue(!requestHeaderMap.keySet().isEmpty());
-        assertTrue(requestHeaderMap.size() >= 1);
-        assertTrue(
-            requestHeaderMap.hashCode() ==
-            getFacesContext().getExternalContext().getRequestHeaderMap()
-            .hashCode());
-        assertTrue(requestHeaderMap.equals(
-            getFacesContext().getExternalContext().getRequestHeaderMap()));
-        assertTrue(!requestHeaderMap.equals(null));
-        assertTrue(!requestHeaderMap.equals(new HashMap()));
-
-         // ensure we can't modify the map using Iterator.remove();
-        Iterator i = requestHeaderMap.entrySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestHeaderMap.keySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestHeaderMap.values().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        // ensure we can't remove elements from the Set.
-        try {
-            requestHeaderMap.entrySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestHeaderMap.keySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestHeaderMap.values().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-    }
-
-
-    public void beginRequestHeaderValuesMap(WebRequest theRequest) {
-        theRequest.addHeader("foo", "one");
-        theRequest.addHeader("foo", "two");
-        theRequest.addHeader("foo", "three");
-    }
-
-
-    public void testRequestHeaderValuesMap() {
-        System.out.println("Testing RequestHeaderValuesMap...");
-        Map requestHeaderValuesMap = getFacesContext().getExternalContext()
-            .getRequestHeaderValuesMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        testUnsupportedExceptions(requestHeaderValuesMap, supported);
-
-        System.out.println(
-            "    Testing supported methods of RequesHeaderValuesMap...");
-        assertTrue(requestHeaderValuesMap.get("One") instanceof String[]);
-        String[] mapValues = (String[])requestHeaderValuesMap.get("foo");
-        String returnValues = null;
-        for (int k=0; k<mapValues.length; k++) {
-            returnValues = mapValues[k];
-        }
-
-        String value = "one,two,three";
-        assertTrue(returnValues.equals(value));
-        assertTrue(requestHeaderValuesMap.containsKey("foo"));
-        Enumeration headerEnum = request.getHeaders("foo");
-        List headerList = new ArrayList();
-        while (headerEnum.hasMoreElements()) {
-            headerList.add((String)headerEnum.nextElement());
-        }
-        assertTrue(
-            requestHeaderValuesMap.containsValue(headerList.toArray(new String[headerList.size()])));
-        assertTrue(!requestHeaderValuesMap.containsValue(null));
-        assertTrue(!requestHeaderValuesMap.containsValue(new Integer(1)));
-        assertTrue(!requestHeaderValuesMap.containsValue(new String[]{"one", "two", "three"}));
-        assertTrue(requestHeaderValuesMap.containsValue(new String[]{"one,two,three"}));
-        assertTrue(!requestHeaderValuesMap.containsValue(new String[]{"one,three,two"}));
-        assertTrue(!requestHeaderValuesMap.containsValue(new String[]{"one,two,three", "four"}));
-        assertTrue(!requestHeaderValuesMap.entrySet().isEmpty());
-        assertTrue(!requestHeaderValuesMap.values().isEmpty());
-        assertTrue(!requestHeaderValuesMap.keySet().isEmpty());
-        assertTrue(requestHeaderValuesMap.size() >= 1);
-        assertTrue(
-            requestHeaderValuesMap.hashCode() ==
-            getFacesContext().getExternalContext().getRequestHeaderValuesMap()
-            .hashCode());
-        assertTrue(
-            requestHeaderValuesMap.equals(
-                getFacesContext().getExternalContext()
-                .getRequestHeaderValuesMap()));
-        assertTrue(!requestHeaderValuesMap.equals(null));
-        assertTrue(!requestHeaderValuesMap.equals(new HashMap()));
-
-         // ensure we can't modify the map using Iterator.remove();
-        Iterator i = requestHeaderValuesMap.entrySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestHeaderValuesMap.keySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestHeaderValuesMap.values().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        // ensure we can't remove elements from the Set.
-        try {
-            requestHeaderValuesMap.entrySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestHeaderValuesMap.keySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestHeaderValuesMap.values().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-    }
-
-    public void testNoCookieEnum() {
-
-        Map requestCookieMap = getFacesContext().getExternalContext().getRequestCookieMap();
-        try {
-            Set entries = requestCookieMap.entrySet();
-            for (Object o : entries) {
-                // iterate to cause the failure
-            }
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-    }
-
-
-    public void beginRequestCookieMap(WebRequest theRequest) {
-        theRequest.addCookie("foo", "bar");
-    }
-
-    public void testRequestCookieMap() {
-        System.out.println("Testing RequestCookieMap...");
-        Map requestCookieMap = getFacesContext().getExternalContext().getRequestCookieMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        testUnsupportedExceptions(requestCookieMap, supported);
-
-        System.out.println("    Testing supported methods of RequestCookieMap...");
-        System.out.println("COOKIE MAP : " + requestCookieMap.toString());
-        assertTrue(requestCookieMap.get("foo") instanceof Cookie);
-        Cookie value = (Cookie)requestCookieMap.get("foo");
-        assertTrue(value.getValue().equals("bar"));
-        assertTrue(requestCookieMap.containsKey("foo"));
-        assertTrue(requestCookieMap.containsValue(requestCookieMap.get("foo")));        
-        assertTrue(!requestCookieMap.entrySet().isEmpty());
-        assertTrue(!requestCookieMap.values().isEmpty());
-        assertTrue(!requestCookieMap.keySet().isEmpty());
-        assertTrue(requestCookieMap.size() >= 1);
-        assertTrue(requestCookieMap.hashCode() ==
-            getFacesContext().getExternalContext().getRequestCookieMap().hashCode());
-        assertTrue(requestCookieMap.equals(
-        getFacesContext().getExternalContext().getRequestCookieMap()));
-        assertTrue(!requestCookieMap.equals(null));
-        assertTrue(!requestCookieMap.equals(new HashMap()));
-
-         // ensure we can't modify the map using Iterator.remove();
-        Iterator i = requestCookieMap.entrySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestCookieMap.keySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = requestCookieMap.values().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        // ensure we can't remove elements from the Set.
-        try {
-            requestCookieMap.entrySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestCookieMap.keySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            requestCookieMap.values().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-    }
-
-
-    public void testInitParameterMap() {
-        System.out.println("Testing InitParameterMap...");
-        String expectedValue = config.getServletContext().getInitParameter(
-            "testInitParam");
-        Map initParameterMap = getFacesContext().getExternalContext()
-            .getInitParameterMap();
-        System.out.println("    Testing UnsupportedOperationException(s)...");
-        initializeSupported();
-        supported[GET] = true;
-        supported[CONTAINS_KEY] = true;
-        supported[CONTAINS_VALUE] = true;
-        supported[ENTRY_SET] = true;
-        supported[VALUES] = true;
-        supported[HASH_CODE] = true;
-        supported[IS_EMPTY] = true;
-        supported[KEY_SET] = true;
-        supported[SIZE] = true;
-        testUnsupportedExceptions(initParameterMap, supported);
-
-        System.out.println(
-            "    Testing supported methods of InitParameterMap...");
-        assertTrue(initParameterMap.get("testInitParam") instanceof String);
-        assertTrue(
-            (initParameterMap.get("testInitParam")).equals(expectedValue));
-        assertTrue(initParameterMap.containsKey("testInitParam"));
-        assertTrue(initParameterMap.containsValue(expectedValue));
-        assertTrue(!initParameterMap.entrySet().isEmpty());
-        assertTrue(!initParameterMap.values().isEmpty());
-        assertTrue(!initParameterMap.keySet().isEmpty());
-        assertTrue(initParameterMap.size() >= 1);
-        assertTrue(
-            initParameterMap.hashCode() ==
-            getFacesContext().getExternalContext().getInitParameterMap()
-            .hashCode());
-        assertTrue(initParameterMap.equals(
-            getFacesContext().getExternalContext().getInitParameterMap()));
-        assertTrue(!initParameterMap.equals(null));
-        assertTrue(!initParameterMap.equals(new HashMap()));
-
-         // ensure we can't modify the map using Iterator.remove();
-        Iterator i = initParameterMap.entrySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = initParameterMap.keySet().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        i = initParameterMap.values().iterator();
-        i.next();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-        // ensure we can't remove elements from the Set.
-        try {
-            initParameterMap.entrySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            initParameterMap.keySet().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-
-         // ensure we can't remove elements from the Set.
-        try {
-            initParameterMap.values().remove("test");
-            assertTrue(false);
-        } catch (Exception e) {
-            assertTrue(e instanceof UnsupportedOperationException);
-        }
-    }
-
-
-    private void testUnsupportedExceptions(Map map, boolean[] supported) {
-
-        boolean exceptionThrown = false;
-
-        if (!supported[CLEAR]) {
-            exceptionThrown = false;
-            try {
-                map.clear();
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[CONTAINS_KEY]) {
-            exceptionThrown = false;
-            try {
-                map.containsKey("foo");
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[CONTAINS_VALUE]) {
-            exceptionThrown = false;
-            try {
-                map.containsValue("foo");
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[ENTRY_SET]) {
-            exceptionThrown = false;
-            try {
-                map.entrySet();
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[GET]) {
-            exceptionThrown = false;
-            try {
-                map.get("foo");
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[HASH_CODE]) {
-            exceptionThrown = false;
-            try {
-                map.hashCode();
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[IS_EMPTY]) {
-            exceptionThrown = false;
-            try {
-                map.isEmpty();
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[KEY_SET]) {
-            exceptionThrown = false;
-            try {
-                map.keySet();
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[PUT]) {
-            exceptionThrown = false;
-            try {
-                map.put("foo", "bar");
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[PUT_ALL]) {
-            exceptionThrown = false;
-            try {
-                map.putAll(new HashMap());
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[REMOVE]) {
-            exceptionThrown = false;
-            try {
-                map.remove("foo");
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-
-        if (!supported[SIZE]) {
-            exceptionThrown = false;
-            try {
-                map.size();
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-
-        }
-
-        if (!supported[VALUES]) {
-            exceptionThrown = false;
-            try {
-                map.values();
-            } catch (UnsupportedOperationException e) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        }
-    }
-
-} // end of class TestExternalContextImpl
diff --git a/jsf-ri/test/com/sun/faces/context/TestFacesContextFactoryImpl.java b/jsf-ri/test/com/sun/faces/context/TestFacesContextFactoryImpl.java
deleted file mode 100644
index 158f2eb..0000000
--- a/jsf-ri/test/com/sun/faces/context/TestFacesContextFactoryImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestFacesContextFactoryImpl.java
-
-package com.sun.faces.context;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.context.FacesContext;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-
-/**
- * <B>TestFacesContextFactoryImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestFacesContextFactoryImpl extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestFacesContextFactoryImpl() {
-        super("TestFacesContextFactory");
-    }
-
-
-    public TestFacesContextFactoryImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-//
-// General Methods
-//
-
-    public void testCreateMethods() {
-        boolean gotException = false;
-        FacesContext facesContext = null;
-        FacesContextFactoryImpl facesContextFactory = null;
-
-        // create FacesContextFactory.
-        facesContextFactory = new FacesContextFactoryImpl();
-
-        try {
-            facesContext = facesContextFactory.getFacesContext(null, null, null,
-                                                               null);
-        } catch (FacesException fe) {
-            gotException = true;
-        } catch (NullPointerException ee) {
-            gotException = true;
-        }
-        assertTrue(gotException);
-
-        LifecycleFactory factory = (LifecycleFactory)
-            FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-        assertTrue(null != factory);
-        Lifecycle lifecycle =
-            factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-        assertTrue(null != lifecycle);
-
-        gotException = false;
-        try {
-            facesContext = facesContextFactory.getFacesContext(
-                config.getServletContext(),
-                request,
-                response,
-                lifecycle);
-        } catch (FacesException fe) {
-            gotException = true;
-        }
-        assertTrue(gotException == false);
-
-    }
-
-} // end of class TestFacesContextFactoryImpl
diff --git a/jsf-ri/test/com/sun/faces/context/TestFacesContextImpl.java b/jsf-ri/test/com/sun/faces/context/TestFacesContextImpl.java
deleted file mode 100644
index 24a3ec4..0000000
--- a/jsf-ri/test/com/sun/faces/context/TestFacesContextImpl.java
+++ /dev/null
@@ -1,714 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestFacesContextImpl.java
-
-package com.sun.faces.context;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.lifecycle.LifecycleImpl;
-import com.sun.faces.util.Util;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.application.Application;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.el.ELContextListener;
-import javax.el.ELContextEvent;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Locale;
-import java.util.NoSuchElementException;
-import java.util.Map;
-import java.util.Collections;
-
-import org.apache.cactus.WebRequest;
-
-/**
- * <B>TestFacesContextImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestFacesContextImpl extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestFacesContextImpl() {
-        super("TestFacesContext");
-    }
-
-
-    public TestFacesContextImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-    public void setUp() {
-        super.setUp();
-        UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        viewRoot.setViewId("viewId");
-        viewRoot.setLocale(Locale.US);
-        getFacesContext().setViewRoot(viewRoot);
-    }
-
-//
-// General Methods
-//
-
-    public void testConstructor() {
-        ExternalContextImpl ecImpl =
-            new ExternalContextImpl(getConfig().getServletContext(),
-                                    getRequest(), getResponse());
-        LifecycleImpl lifeImpl = new LifecycleImpl();
-        try {
-            FacesContextImpl fImpl = new FacesContextImpl(null, null);
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            assertTrue(true);
-        }
-        try {
-            FacesContextImpl fImpl = new FacesContextImpl(ecImpl, null);
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            assertTrue(true);
-        }
-        try {
-            FacesContextImpl fImpl = new FacesContextImpl(null, lifeImpl);
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            assertTrue(true);
-        }
-        try {
-            FacesContextImpl fImpl = new FacesContextImpl(ecImpl, lifeImpl);
-            assertTrue(true);
-        } catch (Exception e) {
-            assertTrue(false);
-        }
-    }
-
-
-    public void testAccessors() {
-        boolean result = false;
-        boolean exceptionThrown = false;
-        ServletRequest req = null;
-        ServletResponse resp = null;
-        ServletContext sc = null;
-
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setViewId("viewId");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-        UIViewRoot root = getFacesContext().getViewRoot();
-        result = null != root;
-        System.out.println("Testing getViewRoot: " + result);
-        assertTrue(result);
-
-        ResponseStream responseStream = new ResponseStream() {
-            public void write(int b) {
-            }
-        };
-        getFacesContext().setResponseStream(responseStream);
-        result = responseStream == getFacesContext().getResponseStream();
-        assertTrue(result);
-        System.out.println("Testing responseStream: " + result);
-
-//PENDING(rogerk) JSF_API_20030718 - implement (ResponseWriter related mods..
-        ResponseWriter responseWriter = new ResponseWriter() {
-            public void close() {
-            }
-
-
-            public void flush() {
-            }
-
-
-            public void write(char[] cbuf, int off, int len) {
-            }
-
-
-            public ResponseWriter cloneWithWriter(Writer writer) {
-                return null;
-            }
-
-
-            public void writeText(char text[], int off, int len) {
-            }
-
-
-            public void writeText(char text[]) {
-            }
-
-
-            public void writeText(char text) {
-            }
-
-
-            public void writeText(Object text) {
-            }
-
-
-            public void writeComments(Object text) {
-            }
-
-
-            public void writeComment(Object text) {
-            }
-
-            public void startCDATA() {
-            }
-
-            public void endCDATA() {
-            }
-
-            public void writeURIAttribute(String name, Object value) {
-            }
-
-
-            public void writeAttribute(String name, Object value) {
-            }
-
-
-            public void endElement(String name) {
-            }
-
-
-            public void startElement(String name) {
-            }
-
-
-            public void endDocument() {
-            }
-
-
-            public void startDocument() {
-            }
-
-
-            public String getCharacterEncoding() {
-                return null;
-            }
-
-
-            public String getContentType() {
-                return null;
-            }
-
-
-            public void startElement(String name, UIComponent componentForElement)
-                throws IOException {
-            }
-
-
-            public void writeAttribute(String name, Object value, String componentPropertyName)
-                throws IOException {
-            }
-
-
-            public void writeURIAttribute(String name, Object value, String componentPropertyName)
-                throws IOException {
-            }
-
-
-            public void writeText(Object text, String componentPropertyName)
-                throws IOException {
-            }
-        };
-/*    ResponseWriter responseWriter = null;
-    try {
-        responseWriter = getFacesContext().getResponseWriter();
-    } catch ( Exception e ) {
-        assertTrue(false);
-    }    
-*/
-        getFacesContext().setResponseWriter(responseWriter);
-        result = responseWriter == getFacesContext().getResponseWriter();
-        assertTrue(result);
-        System.out.println("Testing responseWriter: " + result);
-
-        // test null response writer exception //
-        try {
-            getFacesContext().setResponseWriter(null);
-        } catch (Exception e) {
-            if (-1 == e.getMessage().indexOf("esponseWriter")) {
-                assertTrue(false);
-            }
-        }
-    }
-
-
-    public void testRenderingControls() {
-        System.out.println("Testing renderResponse()");
-        getFacesContext().renderResponse();
-        assertTrue(getFacesContext().getRenderResponse());
-        System.out.println("Testing responseComplete()");
-        getFacesContext().responseComplete();
-        assertTrue(getFacesContext().getResponseComplete());
-    }
-
-
-    public void testCurrentInstance() {
-        System.out.println("Testing getCurrentInstance()");
-        FacesContext context = getFacesContext();
-        assertTrue(context == FacesContext.getCurrentInstance());
-    }
-
-
-    public void testMessageMethodsNull() {
-        boolean gotException = false;
-
-        FacesContext fc = getFacesContext();
-        assertTrue(fc != null);
-
-        try {
-            fc.addMessage(null, null);
-        } catch (NullPointerException fe) {
-            gotException = true;
-        }
-        assertTrue(gotException);
-        gotException = false;
-
-        try {
-            fc.addMessage(null, null);
-        } catch (NullPointerException fe) {
-            gotException = true;
-        }
-        assertTrue(gotException);
-        gotException = false;
-
-    }
-
-
-    public void testMessageMethods() {
-        FacesContext fc = getFacesContext();
-        assertTrue(fc != null);
-
-        System.out.println("Testing add methods");
-        FacesMessage msg1 = new FacesMessage(FacesMessage.SEVERITY_ERROR,
-                                             "summary1", "detail1");
-        fc.addMessage(null, msg1);
-
-        FacesMessage msg2 = new FacesMessage(FacesMessage.SEVERITY_FATAL,
-                                             "summary2", "detail2");
-        fc.addMessage(null, msg2);
-
-        UICommand command = new UICommand();
-        FacesMessage msg3 = new FacesMessage(FacesMessage.SEVERITY_FATAL,
-                                             "summary3", "detail3");
-        fc.addMessage(command.getClientId(fc), msg3);
-
-        FacesMessage msg4 = new FacesMessage(FacesMessage.SEVERITY_WARN,
-                                             "summary4", "detail4");
-        fc.addMessage(command.getClientId(fc), msg4);
-
-        System.out.println("Testing get methods");
-        assertTrue(fc.getMaximumSeverity() == FacesMessage.SEVERITY_FATAL);
-
-        List controlList = new ArrayList();
-        controlList.add(msg1);
-        controlList.add(msg2);
-        controlList.add(msg3);
-        controlList.add(msg4);
-        Iterator it = fc.getMessages();
-        for (int i = 0, size = controlList.size(); i < size; i++) {
-            assertTrue(controlList.get(i).equals(it.next()));
-        }
-
-        controlList.clear();
-        controlList.add(msg3);
-        controlList.add(msg4);
-        it = fc.getMessages(command.getClientId(fc));
-        for (int i = 0, size = controlList.size(); i < size; i++) {
-            assertTrue(controlList.get(i).equals(it.next()));
-        }
-
-        controlList.clear();
-        controlList.add(msg1);
-        controlList.add(msg2);
-        it = fc.getMessages(null);
-        for (int i = 0, size = controlList.size(); i < size; i++) {
-            assertTrue(controlList.get(i).equals(it.next()));
-        }
-        
-    }
-
-    public void testGetMessageList() {
-
-        FacesContext ctx = getFacesContext();
-        FacesMessage msg1 = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "");
-        FacesMessage msg2 = new FacesMessage(FacesMessage.SEVERITY_WARN, "", "");
-        FacesMessage msg3 = new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "");
-        FacesMessage msg4 = new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "");
-
-        ctx.addMessage(null, msg1);
-        ctx.addMessage("id1", msg2);
-        ctx.addMessage("id2", msg3);
-        ctx.addMessage("id2", msg4);
-
-        Class unmodifiableType = Collections.unmodifiableList(Collections.emptyList()).getClass();
-
-        List list = ctx.getMessageList(null);
-        assertTrue(list.size() == 1);
-        assertTrue(unmodifiableType.isInstance(list));
-        assertTrue(msg1.equals(list.get(0)));
-
-        list = ctx.getMessageList("id1");
-        assertTrue(list.size() == 1);
-        assertTrue(unmodifiableType.isInstance(list));
-        assertTrue(msg2.equals(list.get(0)));
-
-        list = ctx.getMessageList("id2");
-        assertTrue(list.size() == 2);
-        assertTrue(unmodifiableType.isInstance(list));
-        assertTrue(msg3.equals(list.get(0)));
-        assertTrue(msg4.equals(list.get(1)));
-
-        list = ctx.getMessageList();
-        assertTrue(list.size() == 4);
-        assertTrue(unmodifiableType.isInstance(list));
-        assertTrue(list.contains(msg1));
-        assertTrue(list.contains(msg2));
-        assertTrue(list.contains(msg3));
-        assertTrue(list.contains(msg4));
-        
-    }
-
-    public void testGetMaxServerity1() {
-        FacesContext f = getFacesContext();
-        FacesMessage msg1 = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "");
-        FacesMessage msg2 = new FacesMessage(FacesMessage.SEVERITY_WARN, "", "");
-
-        f.addMessage(null, msg2);
-        f.addMessage(null, msg1);
-
-        assertTrue(FacesMessage.SEVERITY_WARN.equals(f.getMaximumSeverity()));
-    }
-
-     public void testGetMaxServerity2() {
-        FacesContext f = getFacesContext();
-        FacesMessage msg1 = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "");
-        FacesMessage msg2 = new FacesMessage(FacesMessage.SEVERITY_WARN, "", "");
-        FacesMessage msg3 = new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "");
-
-        f.addMessage(null, msg2);
-        f.addMessage(null, msg1);
-        f.addMessage(null, msg3);
-
-        assertTrue(FacesMessage.SEVERITY_ERROR.equals(f.getMaximumSeverity()));
-    }
-
-    public void testGetMaxSeverity3() throws Exception {
-        FacesContext f = getFacesContext();
-        Iterator<FacesMessage> messages = f.getMessages();
-        assertTrue(!messages.hasNext());
-
-        FacesMessage msg1 = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "");
-        FacesMessage msg2 = new FacesMessage(FacesMessage.SEVERITY_WARN, "", "");
-        FacesMessage msg3 = new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "");
-        FacesMessage msg4 = new FacesMessage(FacesMessage.SEVERITY_FATAL, "", "");
-        f.addMessage(null, msg2);
-        f.addMessage(null, msg1);
-        f.addMessage(null, msg3);
-
-        messages = f.getMessages();
-        assertTrue(messages.hasNext());
-        while (messages.hasNext()) {
-            messages.next();
-            messages.remove();
-        }
-        assertTrue(f.getMaximumSeverity() == null);
-
-        f.addMessage("id1", msg1);
-        f.addMessage("id3", msg1);
-        f.addMessage("id3", msg3);
-        f.addMessage("id3", msg1);
-        f.addMessage(null, msg4);
-        assertTrue(f.getMaximumSeverity() == FacesMessage.SEVERITY_FATAL);
-
-        for (Iterator<FacesMessage> i = f.getMessages(); i.hasNext(); ) {
-            FacesMessage m = i.next();
-            if (m.getSeverity() == FacesMessage.SEVERITY_FATAL) {
-                i.remove();
-            }
-        }
-        assertTrue(f.getMaximumSeverity() == FacesMessage.SEVERITY_ERROR);
-
-        for (Iterator<FacesMessage> i = f.getMessages(); i.hasNext(); ) {
-            FacesMessage m = i.next();
-            if (m.getSeverity() == FacesMessage.SEVERITY_ERROR) {
-                i.remove();
-            }
-        }
-        assertTrue(f.getMaximumSeverity() == FacesMessage.SEVERITY_INFO);
-
-        for (Iterator<FacesMessage> i = f.getMessages(); i.hasNext(); ) {
-            FacesMessage m = i.next();
-            if (m.getSeverity() == FacesMessage.SEVERITY_INFO) {
-                i.remove();
-            }
-        }
-        assertTrue(f.getMaximumSeverity() == null);
-
-
-    }
-
-
-    public void testGetMessagesWithIdsIteratorRemove() throws Exception {
-        FacesContext f = getFacesContext();
-        Iterator<FacesMessage> messages = f.getMessages();
-        assertTrue(!messages.hasNext());
-
-        FacesMessage msg1 = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "");
-        FacesMessage msg2 = new FacesMessage(FacesMessage.SEVERITY_WARN, "", "");
-        FacesMessage msg3 = new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "");
-        FacesMessage msg4 = new FacesMessage(FacesMessage.SEVERITY_FATAL, "", "");
-        f.addMessage("id1", msg1);
-        f.addMessage("id3", msg2);
-        f.addMessage("id3", msg3);
-        f.addMessage("id3", msg4);
-        f.addMessage("id2", msg1);
-
-        for (Iterator<String> i = f.getClientIdsWithMessages();
-              i.hasNext();) {
-            String id = i.next();
-            if ("id3".equals(id)) {
-                i.remove();
-            }
-        }
-
-        assertTrue(!f.getMessages("id3").hasNext());
-        assertTrue(f.getMaximumSeverity() == FacesMessage.SEVERITY_INFO);
-
-        for (Iterator<String> i = f.getClientIdsWithMessages();
-              i.hasNext();) {
-            i.next();
-            i.remove();
-        }
-
-        assertTrue(f.getMaximumSeverity() == null);
-    }
-
-    public void testGetMessagesCustomIteratorExceptions() throws Exception {
-        // we use a custom iterator for iterating over all messages.
-        // ensure the proper exceptions are thrown by next() and remove()
-        FacesContext f = getFacesContext();
-        f.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "", ""));
-
-        // next should throw NoSuchElementException after the second call to next()
-        Iterator i = f.getMessages();
-        i.next();
-        try {
-            i.next();
-            assertTrue(false);
-        } catch (NoSuchElementException nsee) { }
-
-        // remove should throw an IllegalStateException if called without having
-        // called next()
-        i = f.getMessages();
-        try {
-            i.remove();
-            assertTrue(false);
-        } catch (IllegalStateException ise) { }               
-
-    }
-
-
-    public void testGetApplication() {
-        FacesContext fc = getFacesContext();
-        assertTrue(fc != null);
-
-        assertTrue(null != fc.getApplication());
-    }
-
-
-    public void testRelease() {
-        System.out.println("Testing release method");
-        FacesContext context = getFacesContext();
-        context.release();
-        boolean exceptionThrown = false;
-        try {
-            context.getViewRoot();
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            context.getResponseStream();
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-
-        exceptionThrown = false;
-        try {
-            context.getResponseWriter();
-        } catch (IllegalStateException ise) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        // remainder of FacesContext methods are tested in TCK
-    }
-    
-    
-    public void testGetRenderKid() {
-        FacesContext orig = FacesContext.getCurrentInstance();
-        FacesContext context = new FacesContextImpl(orig.getExternalContext(),
-                                                    new LifecycleImpl());
-        Application application = context.getApplication();
-        UIViewRoot root = (UIViewRoot) 
-              application.createComponent(UIViewRoot.COMPONENT_TYPE);
-        
-        // if no UIViewRoot then null should be returned
-        assertTrue(context.getRenderKit() == null);
-        
-        // if UIViewRoot is present but has no RenderKitID, null
-        // should be rendered
-        context.setViewRoot(root);
-        assertTrue(context.getRenderKit() == null);
-        
-        // UIViewRoot is present, and has an ID for a non existent
-        // RenderKit - null should be returned
-        root.setRenderKitId("nosuchkit");
-        assertTrue(context.getRenderKit() == null);
-        
-        // UIViewRoot with valid RenderKit id should return a RenderKit
-        root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        assertTrue(context.getRenderKit() != null);
-        
-    }
-
-
-    public void testGetAttributes() {
-        FacesContext ctx = getFacesContext();
-        Map<Object,Object> m = ctx.getAttributes();
-        assertNotNull(m);
-    }
-
-
-    public void beginIsPostback1(WebRequest req) {
-        req.addParameter("javax.faces.ViewState", "something");
-    }
-
-    public void testIsPostback1() {
-        String key = "com.sun.faces.context.FacesContextImpl_POST_BACK";
-        FacesContext ctx = getFacesContext();
-        assertTrue(ctx.isPostback());
-        assertTrue(ctx.getAttributes().containsKey(key));
-        assertTrue(Boolean.TRUE.equals(getFacesContext().getAttributes().get(key)));
-    }
-
-    public void testIsPostback2() {
-        String key = "com.sun.faces.context.FacesContextImpl_POST_BACK";
-        FacesContext ctx = getFacesContext();
-        assertTrue(!ctx.isPostback());
-        assertTrue(ctx.getAttributes().containsKey(key));
-        assertTrue(Boolean.FALSE.equals(getFacesContext().getAttributes().get(key)));
-    }
-
-    public void testELContextListenerNotification() {
-
-        ELContextListenerImpl listener = new ELContextListenerImpl();
-        FacesContext ctx = getFacesContext();
-        Application app = ctx.getApplication();
-        FacesContextImpl ctxImpl = new FacesContextImpl(ctx.getExternalContext(),
-                                                        new LifecycleImpl());
-        app.addELContextListener(listener);
-        ctxImpl.getELContext();
-        assertTrue(listener.wasInvoked());
-        
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    private static final class ELContextListenerImpl implements ELContextListener {
-
-        private boolean invoked;
-
-        public void contextCreated(ELContextEvent elContextEvent) {
-            invoked = true;
-        }
-
-        public boolean wasInvoked() {
-            return invoked;
-        }
-
-    }
-
-
-// Unit tests to update and retrieve values from model objects
-// are in TestFacesContextImpl_Model.java
-} // end of class TestFacesContextImpl
diff --git a/jsf-ri/test/com/sun/faces/convert/TestConverters.java b/jsf-ri/test/com/sun/faces/convert/TestConverters.java
deleted file mode 100644
index bb254ef..0000000
--- a/jsf-ri/test/com/sun/faces/convert/TestConverters.java
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestConverters.java
-
-package com.sun.faces.convert;
-
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.UIInput;
-import javax.faces.component.UISelectItem;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.convert.Converter;
-import javax.faces.convert.ConverterException;
-import javax.faces.convert.DateTimeConverter;
-import javax.faces.convert.NumberConverter;
-import javax.servlet.ServletConfig;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.cactus.TestingUtil;
-import com.sun.faces.util.Util;
-import com.sun.faces.application.ApplicationImpl;
-import org.apache.cactus.WebRequest;
-import org.apache.cactus.server.AbstractServletContextWrapper;
-
-/**
- * Test encode and decode methods in Renderer classes.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestConverters extends JspFacesTestCase {
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-    private FacesContextFactory facesContextFactory = null;
-
-    // Attribute Instance Variables
-    // Relationship Instance Variables
-
-    protected Application application;
-    //
-    // Constructors and Initializers    
-    //
-
-    public TestConverters() {
-        super("TestConverters");
-    }
-
-
-    public TestConverters(String name) {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // Methods from TestCase
-    //
-    public void setUp() {
-        super.setUp();
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = aFactory.getApplication();
-        UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        viewRoot.setViewId("viewId");
-        viewRoot.setLocale(Locale.US);
-        getFacesContext().setViewRoot(viewRoot);
-    }
-
-
-    public void beginConverters(WebRequest theRequest) {
-
-    }
-
-
-    public void testConverters() {
-
-        try {
-            // create a dummy root for the tree.
-            UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-            root.setId("root");
-
-            testDateConverter(root);
-            testNumberConverter(root);
-            testConverterInheritance(root);
-            testBooleanConverter(root);
-            testConverterInheritance(root);
-            //assertTrue(verifyExpectedOutput());
-            testDoubleConverter(root);
-        } catch (Throwable t) {
-            t.printStackTrace();
-            assertTrue(false);
-            return;
-        }
-    }
-
-
-    public static class TestBean extends Object {
-
-        boolean[] booleans = null;
-
-        public TestBean() {
-            super();
-        }
-
-        public boolean[] getBooleans() {
-            return booleans;
-        }
-
-
-        public void setBooleans(boolean[] newBooleans) {
-            booleans = newBooleans;
-        }
-
-
-        byte[] bytes = null;
-
-
-        public byte[] getBytes() {
-            return bytes;
-        }
-
-
-        public void setBytes(byte[] newBytes) {
-            bytes = newBytes;
-        }
-
-
-        char[] chars = null;
-
-
-        public char[] getChars() {
-            return chars;
-        }
-
-
-        public void setChars(char[] newChars) {
-            chars = newChars;
-        }
-
-
-        short[] shorts = null;
-
-
-        public short[] getShorts() {
-            return shorts;
-        }
-
-
-        public void setShorts(short[] newShorts) {
-            shorts = newShorts;
-        }
-
-
-        int[] ints = null;
-
-
-        public int[] getInts() {
-            return ints;
-        }
-
-
-        public void setInts(int[] newInts) {
-            ints = newInts;
-        }
-
-
-        long[] longs = null;
-
-
-        public long[] getLongs() {
-            return longs;
-        }
-
-
-        public void setLongs(long[] newLongs) {
-            longs = newLongs;
-        }
-
-
-        float[] floats = null;
-
-
-        public float[] getFloats() {
-            return floats;
-        }
-
-
-        public void setFloats(float[] newFloats) {
-            floats = newFloats;
-        }
-
-
-        double[] doubles = null;
-
-
-        public double[] getDoubles() {
-            return doubles;
-        }
-
-
-        public void setDoubles(double[] newDoubles) {
-            doubles = newDoubles;
-        }
-
-
-        String[] strings = null;
-
-
-        public String[] getStrings() {
-            return strings;
-        }
-
-
-        public void setStrings(String[] newStrings) {
-            strings = newStrings;
-        }
-
-
-        Date[] dates = null;
-
-
-        public Date[] getDates() {
-            return dates;
-        }
-
-
-        public void setDates(Date[] newDates) {
-            dates = newDates;
-        }
-
-
-        Number[] numbers = null;
-
-
-        public Number[] getNumbers() {
-            return numbers;
-        }
-
-
-        public void setNumbers(Number[] newNumbers) {
-            numbers = newNumbers;
-        }
-
-
-        List stringList = null;
-
-
-        public List getStringList() {
-            return stringList;
-        }
-
-
-        public void setStringList(List newStringList) {
-            stringList = newStringList;
-        }
-
-    }
-
-
-    public void beginUISelectMany(WebRequest theRequest) {
-
-        // primitives
-        theRequest.addParameter("bool", "false");
-        theRequest.addParameter("bool", "true");
-        theRequest.addParameter("bool", "false");
-        theRequest.addParameter("bool2", "false");
-
-        theRequest.addParameter("byte", Byte.toString(Byte.MIN_VALUE));
-        theRequest.addParameter("byte", Byte.toString(Byte.MAX_VALUE));
-        theRequest.addParameter("byte", "1");
-        theRequest.addParameter("char", "Q");
-        theRequest.addParameter("char", "A");
-        theRequest.addParameter("char", "z");
-
-
-        theRequest.addParameter("short", Short.toString(Short.MIN_VALUE));
-        theRequest.addParameter("short", Short.toString(Short.MAX_VALUE));
-        theRequest.addParameter("short",
-                                Short.toString((short) (Byte.MAX_VALUE + 1)));
-
-        theRequest.addParameter("int", Integer.toString(Integer.MIN_VALUE));
-        theRequest.addParameter("int", Integer.toString(Integer.MAX_VALUE));
-        theRequest.addParameter("int",
-                                Integer.toString(Short.MAX_VALUE + 1));
-
-        theRequest.addParameter("float", Float.toString(Float.MIN_VALUE));
-        theRequest.addParameter("float", Float.toString(Float.MAX_VALUE));
-        theRequest.addParameter("float",
-                                Float.toString(Integer.MAX_VALUE + 1));
-
-        theRequest.addParameter("long", Long.toString(Long.MIN_VALUE));
-        theRequest.addParameter("long", Long.toString(Long.MAX_VALUE));
-        theRequest.addParameter("long",
-                                Long.toString(Integer.MAX_VALUE + 1));
-
-        theRequest.addParameter("double", Double.toString(Double.MIN_VALUE));
-        theRequest.addParameter("double", Double.toString(Double.MAX_VALUE));
-        theRequest.addParameter("double",
-                                Double.toString(Long.MAX_VALUE + 1));
-
-        // Objects
-        theRequest.addParameter("str", "value1");
-        theRequest.addParameter("str", "value2");
-        theRequest.addParameter("str", "value3");
-
-        theRequest.addParameter("str2", "");
-
-        theRequest.addParameter("date", "Jan 1, 1967");
-        theRequest.addParameter("date", "May 26, 2003");
-        theRequest.addParameter("date", "Aug 19, 1946");
-
-        theRequest.addParameter("num", "12%");
-        theRequest.addParameter("num", "3.14");
-        theRequest.addParameter("num", "49.99");
-
-        theRequest.addParameter("stringList", "value1");
-        theRequest.addParameter("stringList", "value2");
-        theRequest.addParameter("stringList", "value3");
-
-    }
-
-
-    public void testUISelectMany() throws Exception {
-        // create the test bean
-        TestBean bean = new TestBean();
-        getFacesContext().getExternalContext().getRequestMap().put("bean",
-                                                                   bean);
-        // create a dummy root for the tree.
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        root.setId("root");
-        root.setLocale(Locale.US);
-        getFacesContext().setViewRoot(root);
-
-        // test model type of boolean []
-        UISelectMany booleanv = new UISelectMany();
-        booleanv.setId("bool");
-        booleanv.setRendererType("javax.faces.Checkbox");
-        booleanv.setValueExpression("value",
-            (getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),  "#{bean.booleans}",
-            Boolean.class)));
-        root.getChildren().add(booleanv);
-        booleanv.getChildren().add(newUISelectItem(Boolean.TRUE));
-        booleanv.getChildren().add(newUISelectItem(Boolean.FALSE));
-        booleanv.decode(getFacesContext());
-        booleanv.validate(getFacesContext());
-        booleanv.updateModel(getFacesContext());
-        assertNotNull(bean.getBooleans());
-        assertTrue(bean.getBooleans()[0] == false);
-        assertTrue(bean.getBooleans()[1] == true);
-        assertTrue(bean.getBooleans()[2] == false);
-
-        // test model type of boolean []
-        booleanv = new UISelectMany();
-        booleanv.setId("bool2");
-        booleanv.setRendererType("javax.faces.Checkbox");
-        booleanv.setValueExpression("value",
-            (getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.booleans}",
-            Object.class)));
-        root.getChildren().add(booleanv);
-        booleanv.getChildren().add(newUISelectItem(Boolean.TRUE));
-        booleanv.getChildren().add(newUISelectItem(Boolean.FALSE));
-        booleanv.decode(getFacesContext());
-        booleanv.validate(getFacesContext());
-        booleanv.updateModel(getFacesContext());
-        assertNotNull(bean.getBooleans());
-        assertTrue(bean.getBooleans()[0] == false);
-        assertTrue(bean.getBooleans().length == 1);
-
-        // test model type of byte []
-        UISelectMany bytev = new UISelectMany();
-        bytev.setId("byte");
-        bytev.setRendererType("javax.faces.Checkbox");
-       
-        bytev.setValueExpression("value", 
-            getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(), "#{bean.bytes}", 
-            Object.class));
-        bytev.getChildren().add(newUISelectItem(new Byte(Byte.MIN_VALUE)));
-        bytev.getChildren().add(newUISelectItem(new Byte(Byte.MAX_VALUE)));
-        bytev.getChildren().add(newUISelectItem(new Byte((byte) 1)));
-        bytev.getChildren().add(newUISelectItem(new Byte((byte) -1)));
-        root.getChildren().add(bytev);
-        bytev.decode(getFacesContext());
-        bytev.validate(getFacesContext());
-        bytev.updateModel(getFacesContext());
-        assertNotNull(bean.getBytes());
-        assertTrue(bean.getBytes()[0] == Byte.MIN_VALUE);
-        assertTrue(bean.getBytes()[1] == Byte.MAX_VALUE);
-        assertTrue(bean.getBytes()[2] == 1);
-
-        // test model type of char []
-        UISelectMany charv = new UISelectMany();
-        charv.setId("char");
-        charv.setRendererType("javax.faces.Checkbox");
-        charv.setValueExpression("value",  
-            getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.chars}", 
-            Object.class));
-        root.getChildren().add(charv);
-        charv.getChildren().add(newUISelectItem(new Character('Q')));
-        charv.getChildren().add(newUISelectItem(new Character('A')));
-        charv.getChildren().add(newUISelectItem(new Character('Z')));
-        charv.getChildren().add(newUISelectItem(new Character('z')));
-        charv.decode(getFacesContext());
-        charv.validate(getFacesContext());
-        charv.updateModel(getFacesContext());
-        assertNotNull(bean.getChars());
-        assertTrue(bean.getChars()[0] == 'Q');
-        assertTrue(bean.getChars()[1] == 'A');
-        assertTrue(bean.getChars()[2] == 'z');
-
-        // test model type of short []
-        UISelectMany shortv = new UISelectMany();
-        shortv.setId("short");
-        shortv.setRendererType("javax.faces.Checkbox");
-        shortv.setValueExpression("value",  
-        getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.shorts}", Object.class));
-        root.getChildren().add(shortv);
-        shortv.getChildren().add(
-            newUISelectItem(new Short((short) (Byte.MAX_VALUE + 1))));
-        shortv.getChildren().add(newUISelectItem(new Short((short) 100)));
-        shortv.getChildren().add(newUISelectItem(new Short(Short.MIN_VALUE)));
-        shortv.getChildren().add(newUISelectItem(new Short(Short.MAX_VALUE)));
-        shortv.decode(getFacesContext());
-        shortv.validate(getFacesContext());
-        shortv.updateModel(getFacesContext());
-        assertNotNull(bean.getShorts());
-        assertTrue(bean.getShorts()[0] == Short.MIN_VALUE);
-        assertTrue(bean.getShorts()[1] == Short.MAX_VALUE);
-        assertTrue(bean.getShorts()[2] == Byte.MAX_VALUE + 1);
-
-        // test model type of int []
-        UISelectMany intv = new UISelectMany();
-        intv.setId("int");
-        intv.setRendererType("javax.faces.Checkbox");
-        intv.setValueExpression("value", 
-             getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.ints}",
-             Object.class));
-        root.getChildren().add(intv);
-        intv.getChildren().add(
-            newUISelectItem(new Integer(Short.MAX_VALUE + 1)));
-        intv.getChildren().add(newUISelectItem(new Integer(100)));
-        intv.getChildren().add(newUISelectItem(new Integer(Integer.MIN_VALUE)));
-        intv.getChildren().add(newUISelectItem(new Integer(Integer.MAX_VALUE)));
-        intv.decode(getFacesContext());
-        intv.validate(getFacesContext());
-        intv.updateModel(getFacesContext());
-        assertNotNull(bean.getInts());
-        assertTrue(bean.getInts()[0] == Integer.MIN_VALUE);
-        assertTrue(bean.getInts()[1] == Integer.MAX_VALUE);
-        assertTrue(bean.getInts()[2] == Short.MAX_VALUE + 1);
-
-        // test model type of float []
-        UISelectMany floatv = new UISelectMany();
-        floatv.setId("float");
-        floatv.setRendererType("javax.faces.Checkbox");
-        floatv.setValueExpression("value",  
-            getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.floats}", 
-            Object.class));
-        root.getChildren().add(floatv);
-        floatv.getChildren().add(
-            newUISelectItem(new Float(Integer.MAX_VALUE + 1)));
-        floatv.getChildren().add(newUISelectItem(new Float(100)));
-        floatv.getChildren().add(newUISelectItem(new Float(Float.MIN_VALUE)));
-        floatv.getChildren().add(newUISelectItem(new Float(Float.MAX_VALUE)));
-        floatv.decode(getFacesContext());
-        floatv.validate(getFacesContext());
-        floatv.updateModel(getFacesContext());
-        assertNotNull(bean.getFloats());
-        assertTrue(bean.getFloats()[0] == Float.MIN_VALUE);
-        assertTrue(bean.getFloats()[1] == Float.MAX_VALUE);
-        assertTrue(bean.getFloats()[2] == Integer.MAX_VALUE + 1);
-
-        // test model type of long []
-        UISelectMany longv = new UISelectMany();
-        longv.setId("long");
-        longv.setRendererType("javax.faces.Checkbox");
-        longv.setValueExpression("value",  
-            getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.longs}", 
-            Object.class));
-        root.getChildren().add(longv);
-        longv.getChildren().add(
-            newUISelectItem(new Long(Integer.MAX_VALUE + 1)));
-        longv.getChildren().add(newUISelectItem(new Long(100)));
-        longv.getChildren().add(newUISelectItem(new Long(Long.MIN_VALUE)));
-        longv.getChildren().add(newUISelectItem(new Long(Long.MAX_VALUE)));
-        longv.decode(getFacesContext());
-        longv.validate(getFacesContext());
-        longv.updateModel(getFacesContext());
-        assertNotNull(bean.getLongs());
-        assertTrue(bean.getLongs()[0] == Long.MIN_VALUE);
-        assertTrue(bean.getLongs()[1] == Long.MAX_VALUE);
-        assertTrue(bean.getLongs()[2] == Integer.MAX_VALUE + 1);
-
-        // test model type of double []
-        UISelectMany doublev = new UISelectMany();
-        doublev.setId("double");
-        doublev.setRendererType("javax.faces.Checkbox");
-        doublev.setValueExpression("value",
-            getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.doubles}", 
-            Object.class));
-        root.getChildren().add(doublev);
-        doublev.getChildren().add(
-            newUISelectItem(new Double(Long.MAX_VALUE + 1)));
-        doublev.getChildren().add(newUISelectItem(new Double(100)));
-        doublev.getChildren().add(
-            newUISelectItem(new Double(Double.MIN_VALUE)));
-        doublev.getChildren().add(
-            newUISelectItem(new Double(Double.MAX_VALUE)));
-        doublev.decode(getFacesContext());
-        doublev.validate(getFacesContext());
-        doublev.updateModel(getFacesContext());
-        assertNotNull(bean.getDoubles());
-        assertTrue(bean.getDoubles()[0] == Double.MIN_VALUE);
-        assertTrue(bean.getDoubles()[1] == Double.MAX_VALUE);
-        assertTrue(bean.getDoubles()[2] == Long.MAX_VALUE + 1);
-
-        // test model type of String []
-        UISelectMany str = new UISelectMany();
-        str.setId("str");
-        str.setRendererType("javax.faces.Checkbox");
-        str.setValueExpression("value", 
-             getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.strings}", 
-             Object.class));
-        root.getChildren().add(str);
-        str.getChildren().add(newUISelectItem("value1"));
-        str.getChildren().add(newUISelectItem("value2"));
-        str.getChildren().add(newUISelectItem("value3"));
-        str.getChildren().add(newUISelectItem("value4"));
-        str.decode(getFacesContext());
-        str.validate(getFacesContext());
-        str.updateModel(getFacesContext());
-        assertNotNull(bean.getStrings());
-        assertTrue("value1".equals(bean.getStrings()[0]));
-
-        // test model type of Date []
-        UISelectMany date = new UISelectMany();
-        Converter dateConv = Util.getConverterForIdentifer(
-            "javax.faces.DateTime", getFacesContext());
-        assertNotNull(dateConv);
-        date.setConverter(dateConv);
-        date.setId("date");
-        date.setRendererType("javax.faces.Checkbox");
-        date.setValueExpression("value",  
-            getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.dates}", 
-            Object.class));
-        root.getChildren().add(date);
-
-        try {
-            SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
-            df.setTimeZone(TimeZone.getTimeZone("GMT"));
-            date.getChildren().add(newUISelectItem(df.parse("19670101")));
-            date.getChildren().add(newUISelectItem(df.parse("20030526")));
-            date.getChildren().add(newUISelectItem(df.parse("19460819")));
-            date.getChildren().add(newUISelectItem(df.parse("17760704")));
-        } catch (ParseException e) {
-            assertTrue(e.getMessage(), false);
-        }
-
-        date.decode(getFacesContext());
-        date.validate(getFacesContext());
-        date.updateModel(getFacesContext());
-        assertNotNull(bean.getDates());
-        Object expected = null;
-        try {
-            SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
-            df.setTimeZone(TimeZone.getTimeZone("GMT"));
-            expected = df.parse("19460819");
-        } catch (ParseException e) {
-            assertTrue(e.getMessage(), false);
-        }
-        assertEquals("bean.getDates()[2] not as expected: ",
-                     expected, bean.getDates()[2]);
-
-        // test model type of Number []
-        UISelectMany number = new UISelectMany();
-        Converter numberConv = Util.getConverterForIdentifer(
-            "javax.faces.Number", getFacesContext());
-        assertNotNull(numberConv);
-        number.setConverter(numberConv);
-        number.setId("num");
-        number.setRendererType("javax.faces.Checkbox");
-        number.setValueExpression("value",
-            getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.numbers}", 
-            Object.class));
-        root.getChildren().add(number);
-        number.getChildren().add(newUISelectItem(new Double(3.14)));
-        number.getChildren().add(newUISelectItem(new Double(49.99)));
-        number.getChildren().add(newUISelectItem(new Long(12)));
-        number.getChildren().add(newUISelectItem(new Double(-145.5)));
-        number.decode(getFacesContext());
-        number.validate(getFacesContext());
-        number.updateModel(getFacesContext());
-        assertNotNull(bean.getNumbers());
-        try {
-            DecimalFormat df = new DecimalFormat("'$'##.##", new DecimalFormatSymbols(Locale.US));
-            expected = df.parse("$49.99");
-        } catch (ParseException e) {
-            assertTrue(e.getMessage(), false);
-        }
-        assertTrue(expected.equals(bean.getNumbers()[2]));
-
-        // test model type of List of Strings
-        UISelectMany stringList = new UISelectMany();
-        stringList.setId("stringList");
-        stringList.setRendererType("javax.faces.Checkbox");
-        stringList.setValueExpression("value",
-             getFacesContext().getApplication().getExpressionFactory().createValueExpression(getFacesContext().getELContext(),"#{bean.stringList}", 
-             Object.class));
-        root.getChildren().add(stringList);
-        stringList.getChildren().add(newUISelectItem("value1"));
-        stringList.getChildren().add(newUISelectItem("value2"));
-        stringList.getChildren().add(newUISelectItem("value3"));
-        stringList.getChildren().add(newUISelectItem("value4"));
-        stringList.decode(getFacesContext());
-        stringList.validate(getFacesContext());
-        stringList.updateModel(getFacesContext());
-        assertNotNull(bean.getStringList());
-        assertTrue(bean.getStringList().get(0).equals("value1"));
-        assertTrue(bean.getStringList().get(1).equals("value2"));
-        assertTrue(bean.getStringList().get(2).equals("value3"));
-
-    }
-    
-    //
-    // General Methods
-    //
-
-    public void testDateConverter(UIViewRoot root) throws ConverterException,
-        InstantiationException, IllegalAccessException, ClassNotFoundException {
-        System.out.println("Testing DateConverter");
-        UIInput text = new UIInput();
-        text.setId("my_input_date");
-        root.getChildren().add(text);
-
-        Converter converter = null;
-        converter = application.createConverter("javax.faces.DateTime");
-
-        // date
-        String stringToConvert = "Jan 1, 1967";
-        Object obj = converter.getAsObject(getFacesContext(), text,
-                                           stringToConvert);
-        assertTrue(obj instanceof java.util.Date);
-        String str = converter.getAsString(getFacesContext(), text, obj);
-        // make sure we end up with the same string we started with..
-        assertTrue(str.equals(stringToConvert));
-
-        // time
-        converter = application.createConverter("javax.faces.DateTime");
-        ((DateTimeConverter) converter).setType("time");
-        text = new UIInput();
-        text.setId("my_input_time");
-        stringToConvert = "10:10:10 AM";
-        obj = converter.getAsObject(getFacesContext(), text, stringToConvert);
-        assertTrue(obj instanceof java.util.Date);
-        str = converter.getAsString(getFacesContext(), text, obj);
-        // make sure we end up with the same string we started with..
-        assertTrue(str.equals(stringToConvert));
-
-        // datetime
-        converter = application.createConverter("javax.faces.DateTime");
-        ((DateTimeConverter) converter).setType("both");
-        text = new UIInput();
-        text.setId("my_input_datetime");
-        stringToConvert = "Jan 1, 1967 10:10:10 AM";
-        obj = converter.getAsObject(getFacesContext(), text, stringToConvert);
-        assertTrue(obj instanceof java.util.Date);
-        str = converter.getAsString(getFacesContext(), text, obj);
-        // make sure we end up with the same string we started with..
-        assertTrue(str.equals(stringToConvert));
-
-        // test bogus type....
-        boolean exceptionThrown = false;
-        try {
-            ((DateTimeConverter)converter).setType("foobar");
-            obj = converter.getAsObject(getFacesContext(), text, stringToConvert);
-        } catch (Exception e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        
-        // test NullPointerException (if either context or component arg is null)
-        exceptionThrown = false;
-        try {
-            obj = converter.getAsObject(null, text, stringToConvert);
-        } catch (NullPointerException npe) {
-            exceptionThrown= true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            obj = converter.getAsObject(getFacesContext(), null, stringToConvert);
-        } catch (NullPointerException npe) {
-            exceptionThrown= true;
-        }
-        assertTrue(exceptionThrown);
-       
-        exceptionThrown = false;
-        try {
-            str = converter.getAsString(null, text, obj);
-        } catch (NullPointerException npe) {
-            exceptionThrown= true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            str = converter.getAsString(getFacesContext(), null, obj);
-        } catch (NullPointerException npe) {
-            exceptionThrown= true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-    public void testDateTimeConverterGMTTimeZone() throws Exception {
-
-        UIInput input = new UIInput();
-        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.ENGLISH);
-        df.setTimeZone(TimeZone.getTimeZone("GMT"));
-        Date now = new Date();
-        String formatted = df.format(now);
-        Date parsed = df.parse(formatted);
-
-        // control setup, now test the converter.
-        Application app = getFacesContext().getApplication();
-        DateTimeConverter converter = (DateTimeConverter) app.createConverter("javax.faces.DateTime");
-        converter.setType("both");
-        assertNotNull(converter);
-        assertTrue(TimeZone.getTimeZone("GMT").toString(), TimeZone.getTimeZone("GMT").equals(converter.getTimeZone()));
-        assertTrue(formatted, formatted.equals(converter.getAsString(getFacesContext(), input, parsed)));
-        assertTrue(parsed.toString(), parsed.equals(converter.getAsObject(getFacesContext(), input, formatted)));
-
-        app.addConverter(java.util.Date.class, "javax.faces.convert.DateTimeConverter");
-        converter = (DateTimeConverter) app.createConverter(java.util.Date.class);
-        converter.setType("both");
-        assertNotNull(converter);
-        assertTrue(TimeZone.getTimeZone("GMT").toString(), TimeZone.getTimeZone("GMT").equals(converter.getTimeZone()));
-        assertTrue(formatted, formatted.equals(converter.getAsString(getFacesContext(), input, parsed)));
-        assertTrue(parsed.toString(), parsed.equals(converter.getAsObject(getFacesContext(), input, formatted)));
-    }
-
-
-    public void testDateTimeConverterDefaultTimeZone() throws Exception {
-        TestingUtil.setPrivateField("passDefaultTimeZone",
-                                    ApplicationImpl.class,
-                                    application,
-                                    Boolean.TRUE);
-        TestingUtil.setPrivateField("systemTimeZone",
-                                    ApplicationImpl.class,
-                                    application,
-                                    TimeZone.getDefault());
-        UIInput input = new UIInput();
-        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.ENGLISH);
-        df.setTimeZone(TimeZone.getDefault());
-        Date now = new Date();
-        String formatted = df.format(now);
-        Date parsed = df.parse(formatted);
-
-        // control setup, now test the converter.
-        Application app = getFacesContext().getApplication();
-        DateTimeConverter converter = (DateTimeConverter) app.createConverter("javax.faces.DateTime");
-        converter.setType("both");
-        assertNotNull(converter);
-        assertTrue(TimeZone.getDefault().toString(), TimeZone.getDefault().equals(converter.getTimeZone()));
-        assertTrue(formatted, formatted.equals(converter.getAsString(getFacesContext(), input, parsed)));
-        assertTrue(parsed.toString(), parsed.equals(converter.getAsObject(getFacesContext(), input, formatted)));
-
-        app.addConverter(java.util.Date.class, "javax.faces.convert.DateTimeConverter");
-        converter = (DateTimeConverter) app.createConverter(java.util.Date.class);
-        converter.setType("both");
-        assertNotNull(converter);
-        assertTrue(TimeZone.getDefault().toString(), TimeZone.getDefault().equals(converter.getTimeZone()));
-        assertTrue(formatted, formatted.equals(converter.getAsString(getFacesContext(), input, parsed)));
-        assertTrue(parsed.toString(), parsed.equals(converter.getAsObject(getFacesContext(), input, formatted)));
-        
-    }
-
-
-
-    public void testNumberConverter(UIViewRoot root) throws ConverterException,
-        InstantiationException, IllegalAccessException, ClassNotFoundException {
-        System.out.println("Tesing NumberConverter");
-        UIInput text = new UIInput();
-        text.setId("my_input_number");
-        root.getChildren().add(text);
-
-        Converter converter = application.createConverter("javax.faces.Number");
-
-        String stringToConvert = "99.9";
-        Object obj = converter.getAsObject(getFacesContext(), text,
-                                           stringToConvert);
-        assertTrue(obj instanceof java.lang.Number);
-        String str = converter.getAsString(getFacesContext(), text, obj);
-        assertTrue(str.equals(stringToConvert));
-
-    }
-
-    public void testNumberConverterSpacesNBSP() throws Exception {
-        UIInput text = new UIInput();
-        NumberConverter converter = (NumberConverter) application.createConverter("javax.faces.Number");
-        converter.setType("currency");
-        converter.setLocale(Locale.FRANCE);
-        String toConv = "12 345,68 " + '\u20aC';
-        Number number = (Number) converter.getAsObject(getFacesContext(),
-                                                       text,
-                                                       toConv);
-        assertTrue(number != null);
-
-        converter.setType("number");
-        toConv = "5" + "\u00a0" + "000" + "\u00a0" + "000,01";
-        number = (Number) converter.getAsObject(getFacesContext(),
-                                                text,
-                                                toConv);
-        assertTrue("Number was: " + number.toString() + ", expected 5000000.01",
-                   "5000000.01".equals(number.toString()));
-    }
-
-    public void testDoubleConverter(UIViewRoot root) throws ConverterException,
-        InstantiationException, IllegalAccessException, ClassNotFoundException {
-        System.out.println("Tesing DoubleConverter");
-        Converter converter = application.createConverter("javax.faces.Double");
-        assertNotNull(converter);
-    }
-
-
-    public void testBooleanConverter(UIViewRoot root)
-        throws ConverterException,
-        InstantiationException, IllegalAccessException, ClassNotFoundException {
-        System.out.println("Tesing BooleanConverter");
-        UIInput text = new UIInput();
-        text.setId("my_input_boolean");
-        root.getChildren().add(text);
-
-        Converter converter = application.createConverter(
-            java.lang.Boolean.class);
-
-        String stringToConvert = "true";
-        Object obj = converter.getAsObject(getFacesContext(), text,
-                                           stringToConvert);
-        assertTrue(obj instanceof java.lang.Boolean);
-
-        String str = converter.getAsString(getFacesContext(), text, obj);
-
-        assertTrue(str.equals(stringToConvert));
-
-    }
-
-
-    /**
-     * Test to verify that a class that registers itself is properly found
-     * using the search mechanism. The J2SE classes are used for their
-     * inheritance hierarchy to test that converters registered to
-     * interfaces and superclasses are properly found.
-     * <p/>
-     * This test is meant for inheritance lookup only.
-     */
-    public void testConverterInheritance(UIViewRoot root)
-        throws ConverterException,
-        InstantiationException, IllegalAccessException, ClassNotFoundException {
-        System.out.println("Testing ConverterInheritance");
-
-        Converter converter;
-        UIInput text = new UIInput();
-        text.setId("my_date_converter");
-        root.getChildren().add(text);
-
-        //java.lang.Integer extends java.lang.Number. 
-        //Test to show that the standard converter registered to 
-        //java.lang.Integer should chosen over the inherited 
-        //java.lang.Number converter
-        application.addConverter(java.lang.Number.class,
-                                 "javax.faces.convert.NumberConverter");
-        converter = application.createConverter(java.lang.Integer.class);
-        assertTrue(converter != null);
-        assertTrue(converter instanceof javax.faces.convert.IntegerConverter);
-
-
-        //java.sql.Date extends java.util.Date
-        //Test to find converter registered to java.util.Date
-        application.addConverter(java.util.Date.class,
-                                 "javax.faces.convert.DateTimeConverter");
-        converter = null;
-        converter = application.createConverter(java.sql.Date.class);
-        assertTrue(converter != null);
-
-        //java.util.HashSet is a subclass of java.util.AbstractSet which is
-        //a subclass of java.util.AbstractCollection 
-        //Test to find the converter registered to java.util.AbstractCollection
-        application.addConverter(java.util.AbstractCollection.class,
-                                 "javax.faces.convert.DateTimeConverter");
-        converter = null;
-        try {
-            converter = application.createConverter(java.util.HashSet.class);
-        } catch (javax.faces.FacesException fe) {
-            
-        }
-        assertTrue(converter != null);
-
-
-        //java.lang.String implements java.lang.CharSequence
-        //Test to find the converter registered to java.lang.CharSequence
-        application.addConverter(java.text.CharacterIterator.class,
-                                 "javax.faces.convert.CharacterConverter");
-        converter = null;
-        converter =
-            application.createConverter(
-                java.text.StringCharacterIterator.class);
-        assertTrue(converter != null);
-
-        //java.text.StringCharacterIterator implements 
-        //java.text.CharacterIterator which has a super-interface
-        //java.lang.Cloneable
-        //Test to find the converter registered to java.lang.Cloneable
-        application.addConverter(java.lang.Cloneable.class,
-                                 "javax.faces.convert.CharacterConverter");
-        converter = null;
-        converter =
-            application.createConverter(
-                java.text.StringCharacterIterator.class);
-        assertTrue(converter != null);
-    }
-
-
-    static private UISelectItem newUISelectItem(Object value) {
-        UISelectItem item = new UISelectItem();
-        item.setItemValue(value);
-        item.setItemLabel(value.toString());
-        return item;
-    }
-
-} // end of class TestConverters
diff --git a/jsf-ri/test/com/sun/faces/el/ElBean.java b/jsf-ri/test/com/sun/faces/el/ElBean.java
deleted file mode 100644
index c77f196..0000000
--- a/jsf-ri/test/com/sun/faces/el/ElBean.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-// JavaBean for simple expression evaluation tests
-
-public class ElBean {
-
-
-    public ElBean() {
-    }
-
-
-    public ElBean(String stringProperty) {
-        this.stringProperty = stringProperty;
-    }
-
-
-    private boolean booleanProperty = true;
-
-
-    public boolean getBooleanProperty() {
-        return (this.booleanProperty);
-    }
-
-
-    public void setBooleanProperty(boolean booleanProperty) {
-        this.booleanProperty = booleanProperty;
-    }
-
-
-    private byte byteProperty = 123;
-
-
-    public byte getByteProperty() {
-        return (this.byteProperty);
-    }
-
-
-    public void setByteProperty(byte byteProperty) {
-        this.byteProperty = byteProperty;
-    }
-    
-    private char characterProperty = 'c';
-    
-    public char getCharacterProperty()
-    {
-        return this.characterProperty;
-    }
-    
-    public void setCharacterProperty(char c)
-    {
-        this.characterProperty = c;
-    }
-
-
-    private double doubleProperty = 654.321;
-
-
-    public double getDoubleProperty() {
-        return (this.doubleProperty);
-    }
-
-
-    public void setDoubleProperty(double doubleProperty) {
-        this.doubleProperty = doubleProperty;
-    }
-
-
-    private float floatProperty = (float) 123.45;
-
-
-    public float getFloatProperty() {
-        return (this.floatProperty);
-    }
-
-
-    public void setFloatProperty(float floatProperty) {
-        this.floatProperty = floatProperty;
-    }
-
-
-    private int intArray[] = {1, 2, 3};
-
-
-    public int[] getIntArray() {
-        return (this.intArray);
-    }
-
-
-    public void setIntArray(int intArray[]) {
-        this.intArray = intArray;
-    }
-
-
-    private List intList = null;
-
-
-    public List getIntList() {
-        if (intList == null) {
-            intList = new ArrayList();
-            intList.add(new Integer(10));
-            intList.add(new Integer(20));
-            intList.add(new Integer(30));
-            intList.add(new Integer(40));
-            intList.add(new Integer(50));
-        }
-        return (intList);
-    }
-
-
-    public void setIntList(List intList) {
-        this.intList = intList;
-    }
-
-
-    private int intProperty = 1234;
-
-
-    public int getIntProperty() {
-        return (this.intProperty);
-    }
-
-
-    public void setIntProperty(int intProperty) {
-        this.intProperty = intProperty;
-    }
-
-
-    private long longProperty = 54321;
-
-
-    public long getLongProperty() {
-        return (this.longProperty);
-    }
-
-
-    public void setLongProperty(long longProperty) {
-        this.longProperty = longProperty;
-    }
-
-
-    private ElBean nestedArray[] = null;
-
-
-    public ElBean[] getNestedArray() {
-        if (nestedArray == null) {
-            nestedArray = new ElBean[2];
-            nestedArray[0] = new ElBean("Nested0");
-            nestedArray[1] = new ElBean("Nested1");
-        }
-        return (this.nestedArray);
-    }
-
-
-    public void setNestedArray(ElBean nestedArray[]) {
-        this.nestedArray = nestedArray;
-    }
-
-
-    private List nestedList = null;
-
-
-    public List getNestedList() {
-        if (nestedList == null) {
-            nestedList = new ArrayList();
-            nestedList.add(new ElBean("list0"));
-            nestedList.add(new ElBean("list1"));
-            nestedList.add(new ElBean("list2"));
-            nestedList.add(new ElBean("list3"));
-        }
-        return (this.nestedList);
-    }
-
-
-    public void setNestedList(List nestedList) {
-        this.nestedList = nestedList;
-    }
-
-
-    private Map nestedMap = null;
-
-
-    public Map getNestedMap() {
-        if (nestedMap == null) {
-            nestedMap = new HashMap();
-            nestedMap.put("map0", new ElBean("map0"));
-            nestedMap.put("map1", new ElBean("map1"));
-            nestedMap.put("map2", new ElBean("map2"));
-        }
-        return (this.nestedMap);
-    }
-
-
-    public void setNestedMap(Map nestedMap) {
-        this.nestedMap = nestedMap;
-    }
-
-
-    private ElBean nestedProperty = null;
-
-
-    public ElBean getNestedProperty() {
-        if (nestedProperty == null) {
-            nestedProperty = new ElBean();
-        }
-        return (this.nestedProperty);
-    }
-
-
-    public void setNestedProperty(ElBean nestedProperty) {
-        this.nestedProperty = nestedProperty;
-    }
-
-
-    private short shortProperty = 321;
-
-
-    public short getShortProperty() {
-        return (this.shortProperty);
-    }
-
-
-    public void setShortProperty(short shortProperty) {
-        this.shortProperty = shortProperty;
-    }
-
-
-    private String stringProperty = "This is a String";
-
-
-    public String getStringProperty() {
-        return (this.stringProperty);
-    }
-
-
-    public void setStringProperty(String stringProperty) {
-        this.stringProperty = stringProperty;
-    }
-
-
-    private String nullString = null;
-
-
-    public String getNullStringProperty() {
-        return ("String length is:" + nullString.length());
-    }
-
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/TestFacesResourceBundleELResolver.java b/jsf-ri/test/com/sun/faces/el/TestFacesResourceBundleELResolver.java
deleted file mode 100644
index 8dbdab2..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestFacesResourceBundleELResolver.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestFacesResourceBundleELResolver.java
-
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import javax.el.ELResolver;
-import javax.el.PropertyNotFoundException;
-import javax.el.PropertyNotWritableException;
-import javax.faces.component.UIViewRoot;
-
-
-public class TestFacesResourceBundleELResolver extends ServletFacesTestCase {
-    
-     public TestFacesResourceBundleELResolver()
-    {
-        super("TestFacesResourceBundleELResolver");
-    }
-
-    public TestFacesResourceBundleELResolver(String name)
-    {
-        super(name);
-    }
-    
-    private FacesResourceBundleELResolver resolver = null;
-    
-    public void setUp() {
-        super.setUp();
-        UIViewRoot root = new UIViewRoot();
-        root.setLocale(Locale.ENGLISH);
-        getFacesContext().setViewRoot(root);
-        resolver = new FacesResourceBundleELResolver();
-    }
-    
-    public void testGetValuePositive() throws Exception {        
-        ResourceBundle bundle1 = (ResourceBundle)
-            resolver.getValue(getFacesContext().getELContext(), null,
-                "testResourceBundle");
-        assertNotNull(bundle1);
-        String value = bundle1.getString("value2");
-        assertNotNull(value);
-        assertEquals("Bob", value);
-        
-        
-    }
-    
-    public void testGetValueNegative() throws Exception {
-        ResourceBundle bundle1 = (ResourceBundle)
-            resolver.getValue(getFacesContext().getELContext(), "hello",
-                "testResourceBundle");
-        assertNull(bundle1);
-        boolean exceptionThrown = false;
-        try {
-            bundle1 = (ResourceBundle)
-                resolver.getValue(getFacesContext().getELContext(), null, null);
-        }
-        catch (PropertyNotFoundException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        
-        bundle1 = (ResourceBundle)
-            resolver.getValue(getFacesContext().getELContext(), null,
-                "nonExistent");
-        
-        assertNull(bundle1);
-    }
-    
-    public void testGetTypePositive() throws Exception {
-        getFacesContext().getELContext().setPropertyResolved(false);
-        Class type = resolver.getType(getFacesContext().getELContext(), null, "testResourceBundle");
-        assertTrue(getFacesContext().getELContext().isPropertyResolved());
-        assertEquals(ResourceBundle.class, type);
-        
-    }
-    
-    public void testGetTypeNegative() throws Exception {
-        Class result = resolver.getType(getFacesContext().getELContext(), 
-                "non-null", "testResourceBundle");
-        assertTrue(null == result);
-        boolean exceptionThrown = false;
-        try {
-            resolver.getType(getFacesContext().getELContext(), null, null);
-        }
-        catch (PropertyNotFoundException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-    
-    public void testSetValeNegative() throws Exception {
-        boolean exceptionThrown = false;
-        try {
-            resolver.setValue(getFacesContext().getELContext(), null, null, null);
-        }
-        catch (PropertyNotFoundException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            resolver.setValue(getFacesContext().getELContext(), null, "testResourceBundle",
-                    "Value");
-        }
-        catch (PropertyNotWritableException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-            
-    }
- 
-    public void testIsReadOnlyPositive() throws Exception {
-        getFacesContext().getELContext().setPropertyResolved(false);
-        boolean result = resolver.isReadOnly(getFacesContext().getELContext(),
-                null, "testResourceBundle");
-        assertTrue(result);
-        assertTrue(getFacesContext().getELContext().isPropertyResolved());
-        
-    }
-    
-    public void testIsReadOnlyNegative() throws Exception {
-        boolean result = resolver.isReadOnly(getFacesContext().getELContext(), 
-                "non-null Base", null);
-        assertTrue(!result);
-        
-        getFacesContext().getELContext().setPropertyResolved(false);
-        boolean exceptionThrown = false;
-        try {
-            resolver.isReadOnly(getFacesContext().getELContext(), null, null);
-        }
-        catch (PropertyNotFoundException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        assertFalse(getFacesContext().getELContext().isPropertyResolved());
-        
-        
-    }
-    
-    public void testGetFeatureDescriptorsPositive() throws Exception {
-        Iterator iter = resolver.getFeatureDescriptors(getFacesContext().getELContext(), null);
-        
-        assertNotNull(iter);
-        FeatureDescriptor cur = null;
-        String 
-            displayName1 = "Testo Pesto",
-            displayName2 = "Second ResourceBundle";
-        String 
-            var1 = "testResourceBundle",
-            var2 = "testResourceBundle2";
-        boolean test = false;
-        while (iter.hasNext()) {
-            test = false;
-            cur = (FeatureDescriptor) iter.next();
-            assertEquals(Boolean.TRUE, cur.getValue(ELResolver.RESOLVABLE_AT_DESIGN_TIME));
-            assertEquals(ResourceBundle.class, cur.getValue(ELResolver.TYPE));
-            assertTrue(!cur.isExpert());
-            assertTrue(!cur.isHidden());
-            assertTrue(cur.isPreferred());
-            assertNotNull(cur.getDisplayName());
-            test = cur.getDisplayName().equals(displayName1) ||
-                   cur.getDisplayName().equals(displayName2);
-            assertTrue(test);
-            test = cur.getName().equals(var1) || cur.getName().equals(var2);
-            assertTrue(test);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/el/TestMethodExpressionImpl.java b/jsf-ri/test/com/sun/faces/el/TestMethodExpressionImpl.java
deleted file mode 100644
index 20fcc2c..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestMethodExpressionImpl.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestMethodRef.java
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import javax.el.MethodExpression;
-import javax.el.ELException;
-import javax.el.MethodNotFoundException;
-import javax.faces.el.PropertyNotFoundException;
-
-/**
- * <B>TestMethodRef </B> is a class ... <p/><B>Lifetime And Scope </B>
- * <P>
- * 
- */
-
-public class TestMethodExpressionImpl extends ServletFacesTestCase
-{
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers
-    //
-
-    public TestMethodExpressionImpl()
-    {
-        super("TestMethodExpression");
-    }
-
-    public TestMethodExpressionImpl(String name)
-    {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-    protected MethodExpression create(String ref, Class[] params) throws Exception
-    {
-        return (getFacesContext().getApplication().getExpressionFactory().
-            createMethodExpression(getFacesContext().getELContext(),ref, null, params));
-    }
-    
-    public void testNullReference() throws Exception
-    {
-        try
-        {
-            create(null, null);
-            fail();
-        }
-        catch (NullPointerException npe) {}
-        catch (Exception e) { fail("Should have thrown an NPE"); };
-    }
-    
-    public void testInvalidMethod() throws Exception
-    {
-        try
-        {
-            create("${foo > 1}", null);
-            fail();
-        }
-        catch (ELException ee) {
-            fail("Should have thrown a NullPointerException"); 
-        }
-        catch (NullPointerException npe) { }
-    }
-    
-    public void testLiteralReference() throws Exception
-    {
-        boolean exceptionThrown = false;
-        try
-        {
-            create("some.method", null);
-        }
-        catch (NullPointerException ee) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-    public void testInvalidTrailing() throws Exception
-    {
-        MethodExpression mb = this.create(
-                "#{NewCustomerFormHandler.redLectroidsMmmm}", new Class[0]);
-
-        boolean exceptionThrown = false;
-        try
-        {
-            mb.invoke(getFacesContext().getELContext(), new Object[0]);
-        }
-        catch (MethodNotFoundException me)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        mb = this.create("#{nonexistentBean.redLectroidsMmmm}", new Class[0]);
-       
-        exceptionThrown = false;
-        try
-        {
-            mb.invoke(getFacesContext().getELContext(), new Object[0]);
-        }
-        catch (PropertyNotFoundException ne)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-} // end of class TestMethodRef
diff --git a/jsf-ri/test/com/sun/faces/el/TestMethodRef.java b/jsf-ri/test/com/sun/faces/el/TestMethodRef.java
deleted file mode 100644
index 63cbe28..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestMethodRef.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestMethodRef.java
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import javax.faces.el.EvaluationException;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.MethodNotFoundException;
-import javax.faces.el.ReferenceSyntaxException;
-
-/**
- * <B>TestMethodRef </B> is a class ... <p/><B>Lifetime And Scope </B>
- * <P>
- * 
- */
-
-public class TestMethodRef extends ServletFacesTestCase
-{
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-
-    // Attribute Instance Variables
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers
-    //
-
-    public TestMethodRef()
-    {
-        super("TestMethodRef");
-    }
-
-    public TestMethodRef(String name)
-    {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // General Methods
-    //
-    protected MethodBinding create(String ref, Class[] params) throws Exception
-    {
-        return (getFacesContext().getApplication().createMethodBinding(ref, params));
-    }
-    
-    public void testNullReference() throws Exception
-    {
-        try
-        {
-            create(null, null);
-            fail();
-        }
-        catch (NullPointerException npe) {}
-        catch (Exception e) { fail("Should have thrown an NPE"); };
-    }
-    
-    public void testInvalidMethod() throws Exception
-    {
-        try
-        {
-            create("#{foo > 1}", null);
-            fail();
-        }
-        catch (ReferenceSyntaxException rse) {}
-        catch (Exception e) { fail("Should have thrown a ReferenceSyntaxException"); }
-    }
-    
-    public void testLiteralReference() throws Exception
-    {
-        try
-        {
-            create("some.method", null);
-            fail();
-        }
-        catch (ReferenceSyntaxException rse) {}
-        catch (Exception e) { fail("Should have thrown a ReferenceSyntaxException"); }
-    }
-
-    public void testInvalidTrailing() throws Exception
-    {
-        MethodBinding mb = this.create(
-                "#{NewCustomerFormHandler.redLectroidsMmmm}", new Class[0]);
-
-        boolean exceptionThrown = false;
-        try
-        {
-            mb.invoke(getFacesContext(), new Object[0]);
-        }
-        catch (MethodNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        mb = this.create("#{nonexistentBean.redLectroidsMmmm}", new Class[0]);
-        
-        // page 80 of the EL Spec, since nonexistentBean is null, the target
-        // method is never reached and should catch a PropertyNotFoundException
-        // and rethrow as a MethodNotFoundException
-        exceptionThrown = false;
-        try
-        {
-            mb.invoke(getFacesContext(), new Object[0]);
-        }
-        catch (MethodNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException e) {
-            //TODO remove once adaptor is fixed
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-} // end of class TestMethodRef
diff --git a/jsf-ri/test/com/sun/faces/el/TestNestedELResolver.java b/jsf-ri/test/com/sun/faces/el/TestNestedELResolver.java
deleted file mode 100644
index 42ac439..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestNestedELResolver.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.el;
-
-import java.beans.FeatureDescriptor;
-import java.lang.reflect.Field;
-import java.util.Collections;
-import java.util.Iterator;
-
-import javax.el.ELContext;
-import javax.el.ELResolver;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpSession;
-
-import junit.framework.TestCase;
-
-import com.sun.faces.RIConstants;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.application.ApplicationImpl;
-import com.sun.faces.mock.MockELContext;
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockHttpSession;
-import com.sun.faces.mock.MockServletContext;
-
-/**
- * Tests needs to be run with assertions enabled (-ea:com.sun.faces.el.ChainAwareVariableResolver)
- */
-public class TestNestedELResolver extends TestCase {
-
-    private static final String UNPREFIXED_VALUE = "unprefixedValue";
-
-    private static final String UNPREFIXED_KEY = "unprefixedKey";
-
-    private static final String PREFIXED_VALUE = "prefixedValue";
-
-    private static final String PREFIX = "test:";
-
-    private static final String PREFIXED_KEY = PREFIX + "value";
-
-    private ELContext elContext;
-
-    public void setUp() throws Exception {
-        FacesContext facesContext = createStubbedFacesContext();
-        this.elContext = facesContext.getELContext();
-        facesContext.getExternalContext().getApplicationMap()
-              .put(PREFIXED_KEY, PREFIXED_VALUE);
-        facesContext.getExternalContext().getApplicationMap()
-              .put(UNPREFIXED_KEY, UNPREFIXED_VALUE);
-    }
-
-    public void testShouldResolveVariableWhenNestedELResolverCallCanNotResolve()
-          throws Exception {
-        assertEquals(UNPREFIXED_VALUE,
-                     this.elContext.getELResolver().getValue(this.elContext,
-                                                             null,
-                                                             UNPREFIXED_KEY));
-    }
-
-    public void testShouldResolveVariableViaNestedELResolverCall()
-          throws Exception {
-        assertEquals(PREFIXED_VALUE,
-                     this.elContext.getELResolver().getValue(this.elContext,
-                                                             null,
-                                                             PREFIXED_KEY));
-    }
-
-    ///wish I could use FacesTester ;-)
-
-    private FacesContext createStubbedFacesContext() throws Exception {
-        ServletContext context = new MockServletContext();
-        ((MockServletContext) context).addInitParameter("javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER", "true");
-        HttpSession session = new MockHttpSession(context);
-        ServletRequest request = new MockHttpServletRequest(session);
-        ServletResponse response = new MockHttpServletResponse();
-        ExternalContext externalContect = new MockExternalContext(context,
-                                                                  request,
-                                                                  response);
-        MockFacesContext mockFacesContext = new MockFacesContext(externalContect);
-        mockFacesContext.setApplication(new ApplicationImpl());
-        ApplicationAssociate associate = getApplicationAssociate(
-              mockFacesContext);
-        associate
-              .setELResolversFromFacesConfig(Collections.<ELResolver>singletonList(
-                    new NestedELResolver(PREFIX)));
-        associate.setLegacyVariableResolver(new ChainAwareVariableResolver());
-        FacesCompositeELResolver facesCompositeELResolver = new FacesCompositeELResolver(
-              FacesCompositeELResolver.ELResolverChainType.Faces);
-        ELUtils.buildFacesResolver(facesCompositeELResolver, associate);
-        ELContext elContext = mockFacesContext.getELContext();
-        setELResolverOnElContext(facesCompositeELResolver, elContext);
-        return mockFacesContext;
-    }
-
-
-    private ApplicationAssociate getApplicationAssociate(MockFacesContext mockFacesContext) {
-        return (ApplicationAssociate) mockFacesContext.getExternalContext()
-              .getApplicationMap()
-              .get(RIConstants.FACES_PREFIX + "ApplicationAssociate");
-    }
-
-    //there should be a better way for doing this when using mocks/stubs
-    private void setELResolverOnElContext(FacesCompositeELResolver facesCompositeELResolver, ELContext elContext)
-          throws Exception {
-        Field field = elContext.getClass().getDeclaredField("resolver");
-        boolean accessible = field.isAccessible();
-        try {
-            field.setAccessible(true);
-            field.set(elContext, facesCompositeELResolver);
-        } finally {
-            field.setAccessible(accessible);
-        }
-    }
-
-    /*
-      * Uses ElContext.getElResolver().getValue() inside its own getValue()
-      */
-    public static class NestedELResolver extends ELResolver {
-
-        private final String prefix;
-
-        public NestedELResolver(String prefix) {
-            this.prefix = prefix;
-        }
-
-        @Override
-        public Class<?> getCommonPropertyType(ELContext arg0, Object arg1) {
-            return null;
-        }
-
-        @Override
-        public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext arg0, Object arg1) {
-            return null;
-        }
-
-        @Override
-        public Class<?> getType(ELContext arg0, Object arg1, Object arg2) {
-            return null;
-        }
-
-        @Override
-        public Object getValue(ELContext context, Object base, Object property) {
-            if (context.getContext(NestedELResolver.class) != Boolean.TRUE) {
-                context.putContext(NestedELResolver.class, Boolean.TRUE);
-                try {
-                    Object value = context.getELResolver()
-                          .getValue(context, base, this.prefix + property);
-                    context.setPropertyResolved(value != null);
-                    return value;
-                } finally {
-                    context.putContext(NestedELResolver.class, Boolean.FALSE);
-                }
-            }
-            return null;
-        }
-
-        @Override
-        public boolean isReadOnly(ELContext arg0, Object arg1, Object arg2) {
-            return false;
-        }
-
-        @Override
-        public void setValue(ELContext arg0, Object arg1, Object arg2, Object arg3) {
-
-        }
-
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/TestPropertyResolverImpl.java b/jsf-ri/test/com/sun/faces/el/TestPropertyResolverImpl.java
deleted file mode 100644
index b44afcd..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestPropertyResolverImpl.java
+++ /dev/null
@@ -1,779 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestPropertyResolverImpl.java
-
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.TestBean;
-import com.sun.faces.util.Util;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.PropertyResolver;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.List;
-
-
-/**
- * <B>TestPropertyResolverImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestPropertyResolverImpl extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-    private ElBean bean = null;
-    private PropertyResolver resolver = null;
-
-//
-// Constructors and Initializers    
-//
-
-    public TestPropertyResolverImpl() {
-        super("TestFacesContext");
-    }
-
-
-    public TestPropertyResolverImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-    public void setUp() {
-        super.setUp();
-        bean = new ElBean();
-        resolver = getFacesContext().getApplication().getPropertyResolver();
-    }
-
-
-    public void tearDown() {
-        resolver = null;
-        bean = null;
-        super.tearDown();
-    }
-
-//
-// General Methods
-//
-
-    // Negative getValue() tests on a JavaBean base object
-    public void testNegative() throws Exception {
-
-        Object value = null;
-
-
-        // ---------- Should Return Null ----------
-        value = resolver.getValue(bean, null);
-        assertNull(value);
-
-        value = resolver.getValue(null, "booleanProperty");
-        assertNull(value);
-
-        boolean exceptionThrown = false;
-        try {
-            value = resolver.getValue(null, null);
-        } catch (javax.faces.el.EvaluationException ee) {
-            exceptionThrown = true;  
-        }
-        exceptionThrown = false;
-        
-        try {
-            value = resolver.getValue(bean.getIntArray(), -1);
-        } catch (javax.faces.el.EvaluationException ee) {
-            exceptionThrown = true;  
-        }
-        exceptionThrown = false;
-        
-        try {
-            value = resolver.getValue(bean.getIntArray(), 3);
-        } catch (javax.faces.el.EvaluationException ee) {
-            exceptionThrown = true;  
-        }
-        exceptionThrown = false;
-        
-        try {
-            value = resolver.getValue(bean.getIntList(), -1);
-        } catch (javax.faces.el.EvaluationException ee) {
-            exceptionThrown = true;  
-        }
-        exceptionThrown = false;
-        
-        try {
-           value = resolver.getValue(bean.getIntList(), 5);
-        } catch (javax.faces.el.EvaluationException ee) {
-            exceptionThrown = true;  
-        }
-        exceptionThrown = false;
-            
-        // ---------- Should throw EvaluationException
-
-        try {
-            value = resolver.getValue(bean, "nullStringProperty");
-            fail("Should have thrown EvaluationException");
-        } catch (EvaluationException e) {
-            ; // Expected result
-        }
-
-        // ---------- Should Throw PropertyNotFoundException
-
-        try {
-            value = resolver.getValue(bean, "dontExist");
-            fail("Should have thrown EvaluationException");
-        } catch (EvaluationException e) {
-            ; // Expected result
-        }
-
-    }
-
-    public void testPristine() {
-
-        // PENDING - test pristine condition of a new instance
-
-    }
-
-
-    // -------------------------------------------------- Indexed Variant Tests
-
-
-    // Positive getValue() tests for the indexed variant against an array
-    public void testIndexedGetArray() throws Exception {
-
-        Object value = null;
-        int intArray[] = bean.getIntArray();
-        assertEquals(3, intArray.length);
-        
-        value = resolver.getValue(intArray, -1);
-        assertNull(value);
-        
-        value = resolver.getValue(null, 0);
-        assertNull(value);
-
-        value = resolver.getValue(intArray, 0);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(1, ((Integer) value).intValue());
-
-        value = resolver.getValue(intArray, 1);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(2, ((Integer) value).intValue());
-
-        value = resolver.getValue(intArray, 2);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(3, ((Integer) value).intValue());
-    }
-
-
-    // Positive getValue() tests for the indexed variant against a List
-    public void testIndexedGetList() throws Exception {
-
-        Object value = null;
-        List intList = bean.getIntList();
-        assertEquals(5, intList.size());
-        
-        value = resolver.getValue(intList, -1);
-        assertNull(value);
-        
-        value = resolver.getValue(null, 0);
-        assertNull(value);
-
-        value = resolver.getValue(intList, 0);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(10, ((Integer) value).intValue());
-
-        value = resolver.getValue(intList, 1);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(20, ((Integer) value).intValue());
-
-        value = resolver.getValue(intList, 2);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(30, ((Integer) value).intValue());
-
-        value = resolver.getValue(intList, 3);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(40, ((Integer) value).intValue());
-
-        value = resolver.getValue(intList, 4);
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals(50, ((Integer) value).intValue());
-
-    }
-
-
-    // Positive setValue() tests for the indexed variant against an array
-    public void testIndexedSetArray() throws Exception {
-
-        Object value = new Integer(300);
-        int intArray[] = bean.getIntArray();
-        assertEquals(3, intArray.length);
-        
-        resolver.setValue(intArray, 0, value);
-        assertEquals(300, intArray[0]);
-        
-        Object[] objArray = new Object[] {"val"};
-        resolver.setValue(objArray, 0, null);
-        assertNull(objArray[0]);
-        
-        try
-        {
-            resolver.setValue(null, 0, value);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            resolver.setValue(intArray, -1, value);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            resolver.setValue(intArray, 100, value);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-    }
-
-
-    // Positive setValue() tests for the indexed variant against a List
-    public void testIndexedSetList() throws Exception {
-
-        Object value = new Object();
-        List intList = bean.getIntList();
-        assertEquals(5, intList.size());
-        
-        resolver.setValue(intList, 0, value);
-        assertNotNull(intList.get(0));
-        
-        resolver.setValue(intList, 0, null);
-        assertNull(intList.get(0));
-        
-        try
-        {
-            resolver.setValue(null, 0, value);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            resolver.setValue(intList, -1, value);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            resolver.setValue(intList, 100, value);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-
-    }
-
-
-    // Positive getType() tests for the indexed variant against an array
-    public void testIndexedTypeArray() throws Exception {
-
-        Class type = null;
-        int intArray[] = bean.getIntArray();
-        assertEquals(3, intArray.length);
-        
-        type = resolver.getType(intArray, 0);
-        assertEquals(Integer.TYPE, type);
-        
-        try
-        {
-            resolver.getType(null, 0);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            resolver.getType(intArray, -1);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            // do we really need to check this?
-            resolver.getType(intArray, 100);
-            //fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-    }
-
-
-    // Positive getType() tests for the indexed variant against a List
-    public void testIndexedTypeList() throws Exception {
-
-        Class type = null;
-        List intList = bean.getIntList();
-        assertEquals(5, intList.size());
-        
-        type = resolver.getType(intList, 0);
-        assertEquals(Integer.class, type);
-        
-        try
-        {
-            resolver.getType(null, 0);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            resolver.getType(intList, -1);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-        
-        try
-        {
-            resolver.getType(intList, 100);
-            fail();
-        }
-        catch (PropertyNotFoundException pnfe) {}
-    }
-
-
-    // --------------------------------------------------- String Variant Tests
-
-
-    // Postitive getValue() tests on a JavaBean base object
-    public void testStringGetBean() throws Exception {
-
-        Object value = null;
-
-        value = resolver.getValue(bean, "booleanProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Boolean);
-        assertEquals(true, ((Boolean) value).booleanValue());
-
-        value = resolver.getValue(bean, "byteProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Byte);
-        assertEquals((byte) 123, ((Byte) value).byteValue());
-
-        value = resolver.getValue(bean, "doubleProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Double);
-        assertEquals((double) 654.321, ((Double) value).doubleValue(), 0.005);
-
-        value = resolver.getValue(bean, "floatProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Float);
-        assertEquals((float) 123.45, ((Float) value).floatValue(), 0.5);
-
-        value = resolver.getValue(bean, "intProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals((int) 1234, ((Integer) value).intValue());
-
-        value = resolver.getValue(bean, "longProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Long);
-        assertEquals((long) 54321, ((Long) value).longValue());
-
-        value = resolver.getValue(bean, "nestedProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof ElBean);
-        assertEquals("This is a String", ((ElBean) value).getStringProperty());
-
-        value = resolver.getValue(bean, "shortProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Short);
-        assertEquals((short) 321, ((Short) value).shortValue());
-
-        value = resolver.getValue(bean, "stringProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof String);
-        assertEquals("This is a String", (String) value);
-
-    }
-
-
-    // Positive getValue() tests on a Map base object
-    public void testStringGetMap() throws Exception {
-
-        getFacesContext().getExternalContext().getRequestMap().put("testValue",
-                                                                   this);
-        assertTrue(this == resolver.getValue(
-            getFacesContext().getExternalContext().getRequestMap(),
-            "testValue"));
-
-    }
-
-
-    // Postitive setValue() tests on a JavaBean base object
-    public void testStringSetBean() throws Exception {
-
-        Object value = null;
-
-        resolver.setValue(bean, "booleanProperty", Boolean.FALSE);
-        value = resolver.getValue(bean, "booleanProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Boolean);
-        assertEquals(false, ((Boolean) value).booleanValue());
-
-        resolver.setValue(bean, "byteProperty", new Byte((byte) 124));
-        value = resolver.getValue(bean, "byteProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Byte);
-        assertEquals((byte) 124, ((Byte) value).byteValue());
-
-        resolver.setValue(bean, "doubleProperty", new Double(333.333));
-        value = resolver.getValue(bean, "doubleProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Double);
-        assertEquals((double) 333.333, ((Double) value).doubleValue(), 0.005);
-
-        resolver.setValue(bean, "floatProperty", new Float(22.11));
-        value = resolver.getValue(bean, "floatProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Float);
-        assertEquals((float) 22.11, ((Float) value).floatValue(), 0.5);
-
-        resolver.setValue(bean, "intProperty", new Integer(4321));
-        value = resolver.getValue(bean, "intProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Integer);
-        assertEquals((int) 4321, ((Integer) value).intValue());
-
-        resolver.setValue(bean, "longProperty", new Long(12345));
-        value = resolver.getValue(bean, "longProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Long);
-        assertEquals((long) 12345, ((Long) value).longValue());
-
-        resolver.setValue(bean, "nestedProperty", new ElBean());
-        value = resolver.getValue(bean, "nestedProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof ElBean);
-
-        resolver.setValue(bean, "shortProperty", new Short((short) 123));
-        value = resolver.getValue(bean, "shortProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof Short);
-        assertEquals((short) 123, ((Short) value).shortValue());
-
-        resolver.setValue(bean, "stringProperty", "That was a STRING");
-        value = resolver.getValue(bean, "stringProperty");
-        assertNotNull(value);
-        assertTrue(value instanceof String);
-        assertEquals("That was a STRING", (String) value);
-
-    }
-
-
-    // Positive setValue() tests on a Map base object
-    public void testStringSetMap() throws Exception {
-
-        // PENDING - insert tests here
-
-    }
-
-
-    // Postitive getValue() tests on a JavaBean base object
-    public void testStringTypeBean() throws Exception {
-
-        Class value = null;
-
-        value = resolver.getType(bean, "booleanProperty");
-        assertNotNull(value);
-        assertEquals(Boolean.TYPE, value);
-
-        value = resolver.getType(bean, "byteProperty");
-        assertNotNull(value);
-        assertEquals(Byte.TYPE, value);
-
-        value = resolver.getType(bean, "doubleProperty");
-        assertNotNull(value);
-        assertEquals(Double.TYPE, value);
-
-        value = resolver.getType(bean, "floatProperty");
-        assertNotNull(value);
-        assertEquals(Float.TYPE, value);
-
-        value = resolver.getType(bean, "intProperty");
-        assertNotNull(value);
-        assertEquals(Integer.TYPE, value);
-
-        value = resolver.getType(bean, "longProperty");
-        assertNotNull(value);
-        assertEquals(Long.TYPE, value);
-
-        bean.setNestedProperty(new ElBean());
-        value = resolver.getType(bean, "nestedProperty");
-        assertNotNull(value);
-        assertEquals(ElBean.class, value);
-
-        value = resolver.getType(bean, "shortProperty");
-        assertNotNull(value);
-        assertEquals(Short.TYPE, value);
-
-        value = resolver.getType(bean, "stringProperty");
-        assertNotNull(value);
-        assertEquals(String.class, value);
-
-    }
-
-
-    // Positive getValue() tests on a Map base object
-    public void testStringTypeMap() throws Exception {
-
-        // PENDING - insert tests here
-
-    }
-
-
-    public void testReadOnlyObject() {
-        ExternalContext ec = getFacesContext().getExternalContext();
-
-        // these are mutable Maps
-       
-        assertTrue(!resolver.isReadOnly(ec.getApplicationMap(), "hello"));
-        assertTrue(!resolver.isReadOnly(ec.getSessionMap(), "hello"));
-        assertTrue(!resolver.isReadOnly(ec.getRequestMap(), "hello")); 
-
-        // these are immutable Maps
-        assertTrue(resolver.isReadOnly(ec.getRequestParameterMap(), "hello"));
-        assertTrue(resolver.isReadOnly(ec.getRequestParameterValuesMap(),
-                                       "hello"));
-        assertTrue(resolver.isReadOnly(ec.getRequestHeaderMap(), "hello"));
-        assertTrue(resolver.isReadOnly(ec.getRequestHeaderValuesMap(),
-                                       "hello"));
-        assertTrue(resolver.isReadOnly(ec.getRequestCookieMap(), "hello"));
-        assertTrue(resolver.isReadOnly(ec.getInitParameterMap(), "hello")); 
-
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        assertTrue(resolver.isReadOnly(root, "childCount"));
-
-        com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean) ec.getSessionMap().get("TestBean");
-        assertTrue(resolver.isReadOnly(testBean, "readOnly"));
-        assertTrue(!resolver.isReadOnly(testBean, "one"));
-    }
-
-
-    public void testReadOnlyIndex() {
-        // PENDING(edburns): implement readonly index tests.
-    }
-
-
-    public void testType() {
-        // PENDING(edburns): implement type tests
-    }
-    
-    public void testConversion() throws Exception
-    {
-         ElBean bean = new ElBean(); 
-       
-        this.conversionTest(bean, "booleanProperty", null, false);
-        this.conversionTest(bean, "booleanProperty", "5", false);
-        this.conversionTest(bean, "booleanProperty", new Character('c'), false);
-        this.conversionTest(bean, "booleanProperty", Boolean.TRUE, true);
-        this.conversionTest(bean, "booleanProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "booleanProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "booleanProperty", new Byte((byte) 5), false);
-        this.conversionTest(bean, "booleanProperty", new Short((short) 5), false);
-        this.conversionTest(bean, "booleanProperty", new Integer(5), false);
-        this.conversionTest(bean, "booleanProperty", new Long(5), false);
-        this.conversionTest(bean, "booleanProperty", new Float(5), false);
-        this.conversionTest(bean, "booleanProperty", new Double(5), false);
-        
-        this.conversionTest(bean, "byteProperty", null, false);       
-        this.conversionTest(bean, "byteProperty", "5", false);        
-        this.conversionTest(bean, "byteProperty", new Character('c'), false);
-        this.conversionTest(bean, "byteProperty", Boolean.TRUE, false);
-        this.conversionTest(bean, "byteProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "byteProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "byteProperty", new Byte((byte) 5), true);
-        this.conversionTest(bean, "byteProperty", new Short((short) 5), false);
-        this.conversionTest(bean, "byteProperty", new Integer(5), false);
-        this.conversionTest(bean, "byteProperty", new Long(5), false);
-        this.conversionTest(bean, "byteProperty", new Float(5), false);
-        this.conversionTest(bean, "byteProperty", new Double(5), false);
-        
-        this.conversionTest(bean, "characterProperty", null, false);
-        this.conversionTest(bean, "characterProperty", "5", false);
-        this.conversionTest(bean, "characterProperty", new Character('c'), true);
-        this.conversionTest(bean, "characterProperty", Boolean.TRUE, false);
-        this.conversionTest(bean, "characterProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "characterProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "characterProperty", new Byte((byte) 5), false);
-        this.conversionTest(bean, "characterProperty", new Short((short) 5), false);
-        this.conversionTest(bean, "characterProperty", new Integer(5), false);
-        this.conversionTest(bean, "characterProperty", new Long(5), false);
-        this.conversionTest(bean, "characterProperty", new Float(5), false);
-        this.conversionTest(bean, "characterProperty", new Double(5), false);
-        
-        this.conversionTest(bean, "doubleProperty", null, false);
-        this.conversionTest(bean, "doubleProperty", "5", false);        
-        this.conversionTest(bean, "doubleProperty", new Character('c'), true);
-        this.conversionTest(bean, "doubleProperty", Boolean.TRUE, false);
-        this.conversionTest(bean, "doubleProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "doubleProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "doubleProperty", new Byte((byte) 5), true);
-        this.conversionTest(bean, "doubleProperty", new Short((short) 5), true);
-        this.conversionTest(bean, "doubleProperty", new Integer(5), true);
-        this.conversionTest(bean, "doubleProperty", new Long(5), true);
-        this.conversionTest(bean, "doubleProperty", new Float(5), true);
-        this.conversionTest(bean, "doubleProperty", new Double(5), true);
-        
-        this.conversionTest(bean, "floatProperty", null, false);
-        this.conversionTest(bean, "floatProperty", "5", false);
-        this.conversionTest(bean, "floatProperty", new Character('c'), true);
-        this.conversionTest(bean, "floatProperty", Boolean.TRUE, false);
-        this.conversionTest(bean, "floatProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "floatProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "floatProperty", new Byte((byte) 5), true);
-        this.conversionTest(bean, "floatProperty", new Short((short) 5), true);
-        this.conversionTest(bean, "floatProperty", new Integer(5), true);
-        this.conversionTest(bean, "floatProperty", new Long(5), true);
-        this.conversionTest(bean, "floatProperty", new Float(5), true);
-        this.conversionTest(bean, "floatProperty", new Double(5), false);
-        
-        this.conversionTest(bean, "longProperty", null, false);
-        this.conversionTest(bean, "longProperty", "5", false);
-        this.conversionTest(bean, "longProperty", new Character('c'), true);
-        this.conversionTest(bean, "longProperty", Boolean.TRUE, false);
-        this.conversionTest(bean, "longProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "longProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "longProperty", new Byte((byte) 5), true);
-        this.conversionTest(bean, "longProperty", new Short((short) 5), true);
-        this.conversionTest(bean, "longProperty", new Integer(5), true);
-        this.conversionTest(bean, "longProperty", new Long(5), true);
-        this.conversionTest(bean, "longProperty", new Float(5), false);
-        this.conversionTest(bean, "longProperty", new Double(5), false);
-        
-        this.conversionTest(bean, "shortProperty", null, false);
-        this.conversionTest(bean, "shortProperty", "5", false);
-        this.conversionTest(bean, "shortProperty", new Character('c'), false);
-        this.conversionTest(bean, "shortProperty", Boolean.TRUE, false);
-        this.conversionTest(bean, "shortProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "shortProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "shortProperty", new Byte((byte) 5), true);
-        this.conversionTest(bean, "shortProperty", new Short((short) 5), true);
-        this.conversionTest(bean, "shortProperty", new Integer(5), false);
-        this.conversionTest(bean, "shortProperty", new Long(5), false);
-        this.conversionTest(bean, "shortProperty", new Float(5), false);
-        this.conversionTest(bean, "shortProperty", new Double(5), false);
-        
-        this.conversionTest(bean, "stringProperty", null, true);
-        this.conversionTest(bean, "stringProperty", "5", true);
-        this.conversionTest(bean, "stringProperty", new Character('c'), false);
-        this.conversionTest(bean, "stringProperty", Boolean.TRUE, false);
-        this.conversionTest(bean, "stringProperty", new BigInteger("5"), false);
-        this.conversionTest(bean, "stringProperty", new BigDecimal("5"), false);
-        this.conversionTest(bean, "stringProperty", new Byte((byte) 5), false);
-        this.conversionTest(bean, "stringProperty", new Short((short) 5), false);
-        this.conversionTest(bean, "stringProperty", new Integer(5), false);
-        this.conversionTest(bean, "stringProperty", new Long(5), false);
-        this.conversionTest(bean, "stringProperty", new Float(5), false);
-        this.conversionTest(bean, "stringProperty", new Double(5), false); 
-    } 
-    
-    protected void conversionTest(Object bean, String property, Object value, boolean valid) throws Exception
-    {
-        if (valid)
-        {
-            try
-            {
-                this.resolver.setValue(bean, property, value);
-            }
-            catch (Exception e)
-            {
-                
-                Class type = this.resolver.getType(bean, property);
-                throw e;
-               // throw new Exception("Conversion to "+type+" should not have failed for type "+((value != null) ? value.getClass() : null), e);
-            }
-        }
-        else
-        {
-            try
-            {
-                this.resolver.setValue(bean, property, value);
-                fail("Conversion to "+this.resolver.getType(bean, property)+" should have failed for type "+((value != null) ? value.getClass() : null));
-            }
-            catch (FacesException e)
-            {
-                // good, should have ended up here
-            }
-        }
-    }
-
-} // end of class TestPropertyResolverImpl
diff --git a/jsf-ri/test/com/sun/faces/el/TestResourceELResolver.java b/jsf-ri/test/com/sun/faces/el/TestResourceELResolver.java
deleted file mode 100644
index e496a20..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestResourceELResolver.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.el;
-
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.faces.application.Application;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.apache.cactus.WebRequest;
-
-/**
- * Test to validate com.sun.faces.el.ResourceELREsolver
- */
-public class TestResourceELResolver extends ServletFacesTestCase {
-
-    public TestResourceELResolver() {
-        super("TestResourceELResolver");
-    }
-
-
-    public TestResourceELResolver(String name) {
-        super(name);
-    }
-
-
-    @Override
-    public void setUp() {
-        super.setUp();
-    }
-
-
-    @Override
-    public void tearDown() {
-        super.tearDown();
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void beginGetValue(WebRequest req) {
-        req.setURL("localhost:8080", "/test", "/faces", "/foo.jsp", null);
-    }
-
-    public void testGetValue() throws Exception {
-
-        // non-library expression
-        Application app = getFacesContext().getApplication();
-        ValueExpression v = app.getExpressionFactory().createValueExpression(getFacesContext().getELContext(),
-                                                                             "#{resource['duke-nv.gif']}",
-                                                                             String.class);
-        String res = (String) v.getValue(getFacesContext().getELContext());
-        assertTrue(res != null);
-        assertTrue("/test/faces/javax.faces.resource/duke-nv.gif".equals(res));
-
-        // library expression
-        v = app.getExpressionFactory().createValueExpression(getFacesContext().getELContext(),
-                                                             "#{resource['nvLibrary:duke-nv.gif']}",
-                                                             String.class);
-        res = (String) v.getValue(getFacesContext().getELContext());
-        assertTrue(res != null);
-        assertTrue("/test/faces/javax.faces.resource/duke-nv.gif?ln=nvLibrary".equals(res));
-
-    }
-
-    public void testGetValueInvalidExpression() throws Exception {
-
-        Application app = getFacesContext().getApplication();
-        ValueExpression v = app.getExpressionFactory().createValueExpression(getFacesContext().getELContext(),
-                                                                             "#{resource['nvLibrary::duke-nv.gif']}",
-                                                                             String.class);
-        try {
-            v.getValue(getFacesContext().getELContext());
-            assertTrue(false);
-        } catch (Exception e) {
-            if (!(e instanceof ELException)) {
-                assertTrue(false);
-            }
-        }       
-
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/el/TestValueBindingImpl.java b/jsf-ri/test/com/sun/faces/el/TestValueBindingImpl.java
deleted file mode 100644
index 964b4c5..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestValueBindingImpl.java
+++ /dev/null
@@ -1,1141 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestValueBindingImpl.java
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.TestBean;
-import com.sun.faces.cactus.TestBean.Inner2Bean;
-import com.sun.faces.cactus.TestBean.InnerBean;
-import com.sun.faces.application.ApplicationImpl;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.FacesException;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.ValueBinding;
-import javax.servlet.http.HttpServletRequest;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Locale;
-
-/**
- * <B>TestValueBindingImpl </B> is a class ... <p/><B>Lifetime And Scope </B>
- * <P>
- */
-
-public class TestValueBindingImpl extends ServletFacesTestCase
-{
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-    protected ValueBinding valueBinding;
-
- //   protected ValueBindingFactory factory = new ValueBindingFactory();
-
-    // Attribute Instance Variables
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers
-    //
-
-    public TestValueBindingImpl()
-    {
-        super("TestValueBindingImpl");
-    }
-
-    public TestValueBindingImpl(String name)
-    {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // Methods from TestCase
-    //
-
-    //
-    // General Methods
-    //
-
-    protected ValueBinding create(String ref) throws Exception
-    {
-        return (getFacesContext().getApplication().createValueBinding("#{" + ref + "}"));
-    }
-
-    public void populateRequest(WebRequest theRequest)
-    {
-        theRequest.addHeader("ELHeader", "ELHeader");
-        theRequest.addHeader("multiheader", "1");
-        theRequest.addHeader("multiheader", "2");
-        theRequest.addParameter("ELParam", "ELParam");
-        theRequest.addParameter("multiparam", "one");
-        theRequest.addParameter("multiparam", "two");
-        theRequest.addCookie("cookie", "monster");
-    }
-
-    public void beginELGet(WebRequest theRequest)
-    {
-        populateRequest(theRequest);
-    }
-
-    public void testELGet() throws Exception
-    {
-        TestBean testBean = new TestBean();
-        InnerBean newInner, oldInner = new InnerBean();
-        testBean.setInner(oldInner);
-        Object result = null;
-        ExternalContext extContext = getFacesContext().getExternalContext();
-
-        Map myMap = new HashMap();
-        TestBean myBean = new TestBean();
-        myBean.setOne("one");
-        myMap.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        //
-        // Get tests
-        //
-
-        valueBinding = this.create("myMap.myBean.one");
-        result = valueBinding.getValue(getFacesContext());
-        assertEquals("one", result);
-
-        valueBinding = this.create("myMap[\"myBean\"].one");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue("one".equals(result));
-
-        valueBinding = this.create("myMap.myBean['one']");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue("one".equals(result));
-
-        // Simple tests, verify that bracket and dot operators work
-        valueBinding = this.create("TestBean.inner");
-        getFacesContext().getExternalContext().getSessionMap().put("TestBean",
-                testBean);
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result == oldInner);
-
-        valueBinding = this.create("TestBean[\"inner\"]");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result == oldInner);
-
-        valueBinding = this.create("TestBean[\"inner\"].customers[1]");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result instanceof String);
-        assertTrue(result.equals("Jerry"));
-
-        // try out the implicit objects
-        valueBinding = this.create("sessionScope.TestBean.inner");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result == oldInner);
-
-        valueBinding = this.create("header.ELHeader");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(requestsHaveSameAttributeSet(
-                (HttpServletRequest) getFacesContext().getExternalContext()
-                        .getRequest(), (HttpServletRequest) request));
-        assertTrue(request.getHeader("ELHeader").equals("ELHeader"));
-        assertTrue(result.equals("ELHeader"));
-
-        valueBinding = this.create("param.ELParam");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result.equals("ELParam"));
-
-        String multiparam[] = null;
-        valueBinding = this.create("paramValues.multiparam");
-        multiparam = (String[]) valueBinding.getValue(getFacesContext());
-        assertTrue(null != multiparam);
-        assertTrue(2 == multiparam.length);
-        assertTrue(multiparam[0].equals("one"));
-        assertTrue(multiparam[1].equals("two"));
-
-        valueBinding = this.create("headerValues.multiheader");
-        String[] multiHeader = (String[]) valueBinding
-                .getValue(getFacesContext());
-        assertTrue(null != multiHeader);
-        assertTrue(1 == multiHeader.length);
-        assertTrue(multiHeader[0].equals("1,2"));
-
-        valueBinding = this.create("initParam.testInitParam");
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(null != result);
-        assertTrue(result.equals("testInitParam"));
-
-        // PENDING(craigmcc) - Comment out this test because on my platform
-        // the getRequestCookies() call returns null
-        /*
-         * valueBinding.setRef("cookie.cookie"); result =
-         * valueBinding.getValue(getFacesContext()); assertTrue(null != result);
-         * assertTrue(result instanceof Cookie); assertTrue(((Cookie)
-         * result).getValue().equals("monster"));
-         */
-
-    }
-
-    public void beginELSet(WebRequest theRequest)
-    {
-        populateRequest(theRequest);
-    }
-
-    public void testELSet() throws Exception
-    {
-        TestBean testBean = new TestBean();
-        InnerBean newInner, oldInner = new InnerBean();
-        testBean.setInner(oldInner);
-        ValueBinding valueBinding = null;
-        Object result = null;
-        ExternalContext extContext = getFacesContext().getExternalContext();
-
-        Map myMap = new HashMap();
-        TestBean myBean = new TestBean();
-        myMap.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        //
-        // Set tests
-        //
-        valueBinding = this.create("myMap.myBean.one");
-        valueBinding.setValue(getFacesContext(), "one");
-        Map map = (Map) extContext.getRequestMap().get("myMap");
-        assertTrue("one".equals(((TestBean) map.get("myBean")).getOne()));
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        // test that we can set null as the value
-        valueBinding = this.create("myMap.myBean.prop");
-        valueBinding.setValue(getFacesContext(), null);
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertEquals(null, ((TestBean) map.get("myBean")).getOne());
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        valueBinding = this.create("myMap[\"myBean\"].one");
-        valueBinding.setValue(getFacesContext(), "one");
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertTrue("one".equals(((TestBean) map.get("myBean")).getOne()));
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        // test that we can set the property to null
-        valueBinding = this.create("myMap[\"myBean\"].prop");
-        valueBinding.setValue(getFacesContext(), null);
-        map = (Map) extContext.getRequestMap().get("myMap");
-        String msg = "Default Message";
-        if (((TestBean) map.get("myBean")).getProp() != null)
-        {
-            msg = ((TestBean) map.get("myBean")).getProp().getClass().getName();
-        }
-        assertEquals(msg, null, ((TestBean) map.get("myBean")).getProp());
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        valueBinding = this.create("myMap.myBean['one']");
-        valueBinding.setValue(getFacesContext(), "one");
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertTrue("one".equals(((TestBean) map.get("myBean")).getOne()));
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        // set the prop to null
-        valueBinding = this.create("myMap.myBean['prop']");
-        valueBinding.setValue(getFacesContext(), null);
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertEquals(null, ((TestBean) map.get("myBean")).getOne());
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        valueBinding = this.create("NonExist");
-        valueBinding.setValue(getFacesContext(), "value");
-        result = extContext.getRequestMap().get("NonExist");
-        assertTrue("value".equals(result));
-        extContext.getRequestMap().remove("NonExist");
-
-        extContext.getSessionMap().put("Key", "oldValue");
-        valueBinding = this.create("Key");
-        valueBinding.setValue(getFacesContext(), "newValue");
-        result = extContext.getSessionMap().get("Key");
-        assertTrue("newValue".equals(result));
-        extContext.getSessionMap().remove("Key");
-
-        newInner = new InnerBean();
-        valueBinding = this.create("TestBean.inner");
-        valueBinding.setValue(getFacesContext(), newInner);
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result == newInner);
-        assertTrue(oldInner != newInner);
-
-        oldInner = newInner;
-        newInner = new InnerBean();
-        valueBinding = this.create("TestBean[\"inner\"]");
-        valueBinding.setValue(getFacesContext(), newInner);
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result == newInner);
-        assertTrue(oldInner != newInner);
-
-        String oldCustomer0 = null, oldCustomer1 = null, customer0 = null, customer1 = null;
-
-        valueBinding = this.create("TestBean[\"inner\"].customers[0]");
-        oldCustomer0 = customer0 = (String) valueBinding
-                .getValue(getFacesContext());
-        valueBinding = this.create("TestBean[\"inner\"].customers[1]");
-        oldCustomer1 = customer1 = (String) valueBinding
-                .getValue(getFacesContext());
-
-        valueBinding = this.create("TestBean[\"inner\"].customers[0]");
-        valueBinding.setValue(getFacesContext(), "Jerry");
-        valueBinding = this.create("TestBean[\"inner\"].customers[1]");
-        valueBinding.setValue(getFacesContext(), "Mickey");
-
-        valueBinding = this.create("TestBean[\"inner\"].customers[0]");
-        customer0 = (String) valueBinding.getValue(getFacesContext());
-        valueBinding = this.create("TestBean[\"inner\"].customers[1]");
-        customer1 = (String) valueBinding.getValue(getFacesContext());
-        assertTrue(customer0.equals("Jerry"));
-        assertTrue(customer1.equals("Mickey"));
-
-        valueBinding = this.create("TestBean[\"inner\"].customers[0]");
-        assertTrue(valueBinding.getValue(getFacesContext()) != oldCustomer0);
-        valueBinding = this.create("TestBean[\"inner\"].customers[1]");
-        assertTrue(valueBinding.getValue(getFacesContext()) != oldCustomer1);
-
-        // put in a map to the customers Collection
-        Inner2Bean inner2 = new Inner2Bean();
-        assertTrue(null == inner2.getNicknames().get("foo"));
-        valueBinding = this.create("TestBean[\"inner\"].customers[2]");
-        valueBinding.setValue(getFacesContext(), inner2);
-        valueBinding = this.create("TestBean[\"inner\"].customers[2]");
-        assertTrue(valueBinding.getValue(getFacesContext()) == inner2);
-
-        valueBinding = this
-                .create("TestBean[\"inner\"].customers[2].nicknames.foo");
-        valueBinding.setValue(getFacesContext(), "bar");
-        assertTrue(((String) inner2.getNicknames().get("foo")).equals("bar"));
-    }
-    
-    public void testNullReference() throws Exception
-    {
-        try
-        {
-            getFacesContext().getApplication().createValueBinding(null);
-            fail();
-        }
-        catch (NullPointerException npe) {}
-        catch (Exception e) { fail("Should have thrown an NPE"); };
-    }
-
-    public void testLiterals() throws Exception
-    {
-        ValueBinding vb = null;
-        Object result = null;
-        ExternalContext extContext = getFacesContext().getExternalContext();
-        
-        vb = getFacesContext().getApplication().createValueBinding("test");
-        assertEquals("test", vb.getValue(getFacesContext()));
-        
-        assertEquals(String.class, vb.getType(getFacesContext()));
-        try
-        {
-            vb.setValue(getFacesContext(), "other");
-            fail("Literal's setValue(..) should have thrown a EvaluationException");
-        }
-        catch (javax.faces.el.EvaluationException ee) {}
-    }
-
-    public void testReadOnly_singleCase() throws Exception
-    {
-
-        // these are mutable Maps
-        /*
-         * properties on these maps are mutable, but not the object itself....
-         * see
-         */
-        valueBinding = this.create("applicationScope");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("sessionScope");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("requestScope");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-
-        // these are immutable Maps
-        valueBinding = this.create("param");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("paramValues");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("header");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("headerValues");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("cookie");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("initParam");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-    }
-
-    public void testReadOnly_multipleCase() throws Exception
-    {
-
-        // these are mutable Maps
-        valueBinding = this.create("applicationScope.value");
-        valueBinding.setValue(getFacesContext(), "value");
-        String value = (String) valueBinding.getValue(getFacesContext());
-        assertTrue(!valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("sessionScope.value");
-        assertTrue(!valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("requestScope.value");
-        assertTrue(!valueBinding.isReadOnly(getFacesContext()));
-
-        // these are immutable Maps
-        valueBinding = this.create("param.value");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("paramValues.value");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("header.value");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("headerValues.value");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("cookie.value");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("initParam.value");
-        assertTrue(valueBinding.isReadOnly(getFacesContext())); 
-
-        // tree
-        // create a dummy root for the tree.
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(
-                getFacesContext(), null);
-        page.setId("root");
-        page.setViewId("newTree");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-        valueBinding = this.create("view.childCount");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-
-        com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean) getFacesContext().getExternalContext()
-                .getSessionMap().get("TestBean");
-        assertTrue(null != testBean);
-        valueBinding = this.create("TestBean.readOnly");
-        assertTrue(valueBinding.isReadOnly(getFacesContext()));
-        valueBinding = this.create("TestBean.one");
-        assertTrue(!valueBinding.isReadOnly(getFacesContext()));
-
-        InnerBean inner = new InnerBean();
-        testBean.setInner(inner);
-        valueBinding = this.create("TestBean[\"inner\"].customers[1]");
-        assertTrue(!valueBinding.isReadOnly(getFacesContext()));
-
-    }
-
-    public void testGetType_singleCase() throws Exception
-    {
-
-        // these are mutable Maps
-        valueBinding = this.create("applicationScope");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-        valueBinding = this.create("sessionScope");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-        valueBinding = this.create("requestScope");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-
-        // these are immutable Maps
-        valueBinding = this.create("param");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-        valueBinding = this.create("paramValues");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-        valueBinding = this.create("header");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-        valueBinding = this.create("headerValues");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-        valueBinding = this.create("cookie");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-        valueBinding = this.create("initParam");
-        assertTrue(valueBinding.getType(getFacesContext()) == null);
-    }
-
-    public void beginGetType_multipleCase(WebRequest theRequest)
-    {
-        populateRequest(theRequest);
-    }
-
-    public void testGetType_multipleCase() throws Exception
-    {
-        String property = "testvalueBindingImpl_property";
-        getFacesContext().getExternalContext().getApplicationMap().put(
-                property, property);
-
-        getFacesContext().getExternalContext().getSessionMap().put(property,
-                property);
-
-        getFacesContext().getExternalContext().getRequestMap().put(property,
-                property);
-
-        // these are mutable Maps
-        valueBinding = this.create("applicationScope." + property);
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-        valueBinding = this.create("sessionScope." + property);
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-        valueBinding = this.create("requestScope." + property);
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-
-        // these are immutable Maps
-        valueBinding = this.create("param." + "ELParam");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-        valueBinding = this.create("paramValues.multiparam");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-
-        valueBinding = this.create("header.ELHeader");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-        valueBinding = this.create("headerValues.multiheader");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-       // assertTrue(java.util.Enumeration.class.isAssignableFrom(valueBinding
-       //         .getType(getFacesContext())));
-        // PENDING(craigmcc) - Comment out this test because on my platform
-        // the getRequestCookies() call returns null
-        /*
-         * valueBinding = this.create("cookie.cookie");
-         * assertTrue(valueBinding.getType(getFacesContext()).getName().equals("javax.servlet.http.Cookie"));
-         */
-        valueBinding = this
-                .create("initParam['javax.faces.STATE_SAVING_METHOD']");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));   
-
-        // tree
-        // create a dummy root for the tree.
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(
-                getFacesContext(), null);
-        page.setId("root");
-        page.setViewId("newTree");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-        valueBinding = this.create("view");
-        Class c = valueBinding.getType(getFacesContext());
-        assertTrue(c == null);
-
-        com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean) getFacesContext().getExternalContext()
-                .getSessionMap().get("TestBean");
-        assertTrue(null != testBean);
-        valueBinding = this.create("TestBean.readOnly");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.String"));
-        valueBinding = this.create("TestBean.one");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.String"));
-
-        InnerBean inner = new InnerBean();
-        testBean.setInner(inner);
-        valueBinding = this.create("TestBean[\"inner\"].customers[1]");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-
-        valueBinding = this.create("TestBean[\"inner\"]");
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "com.sun.faces.cactus.TestBean$InnerBean"));
-
-        int[] intArray =
-        { 1, 2, 3 };
-        getFacesContext().getExternalContext().getRequestMap().put("intArray",
-                intArray);
-        valueBinding = this.create("requestScope.intArray");
-       
-        assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-                "java.lang.Object"));
-       // assertTrue(valueBinding.getType(getFacesContext()).getName().equals(
-       //         "[I"));
-    }
-
-    public void testGetScopePositive() throws Exception
-    {
-        TestBean testBean = new TestBean();
-        getFacesContext().getExternalContext().getApplicationMap().put(
-                "TestApplicationBean", testBean);
-
-        valueBinding = this.create("TestApplicationBean");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope("TestApplicationBean", null));
-
-        valueBinding = this.create("TestApplicationBean.one");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope("TestApplicationBean.one",
-                null));
-
-        valueBinding = this.create("TestApplicationBean.inner.two");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope(
-                "TestApplicationBean.inner.two", null));
-
-        valueBinding = this.create("applicationScope.TestApplicationBean");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope(
-                "applicationScope.TestApplicationBean", null));
-        valueBinding = this
-                .create("applicationScope.TestApplicationBean.inner.two");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope(
-                "applicationScope.TestApplicationBean.inner.two", null));
-
-        getFacesContext().getExternalContext().getSessionMap().put(
-                "TestSessionBean", testBean);
-        valueBinding = this.create("TestSessionBean");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope("TestSessionBean", null));
-
-        valueBinding = this.create("TestSessionBean.one");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope("TestSessionBean.one", null));
-
-        valueBinding = this.create("TestSessionBean.inner.two");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils
-             .getScope("TestSessionBean.inner.two", null));
-
-        valueBinding = this.create("sessionScope.TestSessionBean");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope("sessionScope.TestSessionBean",
-                null));
-
-        valueBinding = this.create("sessionScope.TestSessionBean.inner.two");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope(
-                "sessionScope.TestSessionBean.inner.two", null));
-
-        getFacesContext().getExternalContext().getRequestMap().put(
-                "TestRequestBean", testBean);
-        valueBinding = this.create("TestRequestBean");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope("TestRequestBean", null));
-
-        valueBinding = this.create("TestRequestBean.one");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope("TestRequestBean.one", null));
-
-        valueBinding = this.create("TestRequestBean.inner.two");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils
-             .getScope("TestRequestBean.inner.two", null));
-
-        valueBinding = this.create("requestScope.TestRequestBean");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope("requestScope.TestRequestBean",
-                null));
-
-        valueBinding = this.create("requestScope.TestRequestBean.inner.two");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope(
-                "requestScope.TestRequestBean.inner.two", null));
-
-        valueBinding = this.create("TestNoneBean");
-        assertEquals(null, ELUtils.getScope("TestNoneBean", null));
-
-        valueBinding = this.create("TestNoneBean.one");
-        assertEquals(null, ELUtils.getScope("TestNoneBean.one", null));
-        valueBinding = this.create("TestNoneBean.inner.two");
-        assertEquals(null, ELUtils.getScope("TestNoneBean.inner.two", null));
-
-    }
-
-    public void testGetScopeNegative() throws Exception {
-        ValueBinding valueBinding = null;
-        String property = null;
-        /*
-        property = "[]";
-        valueBinding = this.factory.createValueBinding(property);
-        assertNull(Util.getScope(property, null));
-        property = "][";
-        assertNull(Util.getScope(property, null));
-        property = "";
-        assertNull(Util.getScope(property, null));
-        property = null;
-        assertNull(Util.getScope(property, null));
-        property = "foo.sessionScope";
-        assertNull(Util.getScope(property, null));        
-        */
-
-    }
-
-    // negative test for case when valueRef is merely
-    // one of the reserved scope names.
-    public void testReservedScopeIdentifiers() throws Exception
-    {
-        boolean exceptionThrown = false;
-
-        try
-        {
-            valueBinding = this.create("applicationScope");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("sessionScope");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("requestScope");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("facesContext");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("cookie");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("header");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("headerValues");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("initParam");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("param");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("paramValues");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("view");
-            valueBinding.setValue(getFacesContext(), "value");
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-    public void testInvalidExpression() throws Exception
-    {
-
-        boolean exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (FacesException e)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("!");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("..");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create(".foo");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("()");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("[]");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("applicationScope}");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(!exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("applicationScope >= sessionScope");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueBinding = this.create("foo applicationScope");
-            valueBinding.getValue(getFacesContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (EvaluationException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-
-    public void testStateHolderSmall() throws Exception
-    {
-        StateHolderSaver saver = null;
-        ValueBinding binding = getFacesContext().getApplication()
-                .createValueBinding("#{TestBean.indexProperties[0]}");
-
-        assertEquals("ValueBinding not expected value", "Justyna",
-                (String) binding.getValue(getFacesContext()));
-        saver = new StateHolderSaver(getFacesContext(), binding);
-        binding = null;
-        binding = (ValueBinding) saver.restore(getFacesContext());
-        assertEquals("ValueBinding not expected value", "Justyna",
-                (String) binding.getValue(getFacesContext()));
-    }
-
-    public void testStateHolderMedium() throws Exception
-    {
-        UIViewRoot root = null;
-        UIForm form = null;
-        UIInput input = null;
-        Object state = null;
-        getFacesContext().setViewRoot(
-                root = Util.getViewHandler(getFacesContext()).createView(
-                        getFacesContext(), null));
-        getFacesContext().getViewRoot().setLocale(Locale.US);
-        root.getChildren().add(form = new UIForm());
-        form.getChildren().add(input = new UIInput());
-        input.setValueBinding("buckaroo", getFacesContext().getApplication()
-                .createValueBinding("#{TestBean.indexProperties[0]}"));
-        state = root.processSaveState(getFacesContext());
-
-        // synthesize the tree structure
-        getFacesContext().setViewRoot(
-                root = Util.getViewHandler(getFacesContext()).createView(
-                        getFacesContext(), null));
-        getFacesContext().getViewRoot().setLocale(Locale.US);
-        root.getChildren().add(form = new UIForm());
-        form.getChildren().add(input = new UIInput());
-        root.processRestoreState(getFacesContext(), state);
-
-        assertEquals("ValueBinding not expected value", "Justyna",
-                (String) input.getValueBinding("buckaroo").getValue(
-                        getFacesContext()));
-
-    }
-
-    public void testGetExpressionString() throws Exception
-    {
-        ApplicationImpl app = (ApplicationImpl) getFacesContext()
-                .getApplication();
-        String ref = null;
-        ValueBinding vb = null;
-
-        ref = "#{NewCustomerFormHandler.minimumAge}";
-        vb = app.createValueBinding(ref);
-        assertEquals(ref, vb.getExpressionString());
-
-        ref = "minimum age is #{NewCustomerFormHandler.minimumAge}";
-        vb = app.createValueBinding(ref);
-        assertEquals(ref, vb.getExpressionString());
-    }
-
-    class StateHolderSaver extends Object implements Serializable
-    {
-
-        protected String className = null;
-
-        protected Object savedState = null;
-
-        public StateHolderSaver(FacesContext context, Object toSave)
-        {
-            className = toSave.getClass().getName();
-
-            if (toSave instanceof StateHolder)
-            {
-                // do not save an attached object that is marked transient.
-                if (!((StateHolder) toSave).isTransient())
-                {
-                    savedState = ((StateHolder) toSave).saveState(context);
-                }
-                else
-                {
-                    className = null;
-                }
-            }
-        }
-
-        /**
-         * @return the restored {@link StateHolder}instance.
-         */
-
-        public Object restore(FacesContext context)
-                throws IllegalStateException
-        {
-            Object result = null;
-            Class toRestoreClass = null;
-            if (className == null)
-            {
-                return null;
-            }
-
-            try
-            {
-                toRestoreClass = loadClass(className, this);
-            }
-            catch (ClassNotFoundException e)
-            {
-                throw new IllegalStateException(e.getMessage());
-            }
-
-            if (null != toRestoreClass)
-            {
-                try
-                {
-                    result = toRestoreClass.newInstance();
-                }
-                catch (InstantiationException e)
-                {
-                    throw new IllegalStateException(e.getMessage());
-                }
-                catch (IllegalAccessException a)
-                {
-                    throw new IllegalStateException(a.getMessage());
-                }
-            }
-
-            if (null != result && null != savedState
-                    && result instanceof StateHolder)
-            {
-                // don't need to check transient, since that was done on
-                // the saving side.
-                ((StateHolder) result).restoreState(context, savedState);
-            }
-            return result;
-        }
-
-        private Class loadClass(String name, Object fallbackClass)
-                throws ClassNotFoundException
-        {
-            ClassLoader loader = Thread.currentThread().getContextClassLoader();
-            if (loader == null)
-            {
-                loader = fallbackClass.getClass().getClassLoader();
-            }
-            return loader.loadClass(name);
-        }
-    }
-
-} // end of class TestValueBindingImpl
diff --git a/jsf-ri/test/com/sun/faces/el/TestValueBindingImpl_Model.java b/jsf-ri/test/com/sun/faces/el/TestValueBindingImpl_Model.java
deleted file mode 100644
index 8a2907c..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestValueBindingImpl_Model.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestValueBindingImpl_Model.java
-
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.TestBean;
-import com.sun.faces.cactus.TestBean.Inner2Bean;
-import com.sun.faces.cactus.TestBean.InnerBean;
-
-import javax.faces.context.FacesContext;
-import javax.faces.el.PropertyNotFoundException;
-import javax.faces.el.ValueBinding;
-
-/**
- * <B>TestValueBindingImpl_Model</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestValueBindingImpl_Model extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-    ValueBinding valueBinding = null;
-    
-//
-// Constructors and Initializers    
-//
-
-    public TestValueBindingImpl_Model() {
-        super("TestValueBindingImpl");
-    }
-
-
-    public TestValueBindingImpl_Model(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-//
-// General Methods
-//
-    public ValueBinding create(String ref) throws Exception {
-    	return (getFacesContext().getApplication().createValueBinding("#{" + ref + "}"));
-    }
-    
-    public void setUp() {
-        super.setUp();
-        valueBinding = null;
-    }
-
-
-    public void tearDown() {
-        valueBinding = null;
-        super.tearDown();
-    }
-
-
-    public void testSet() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println("Testing setValue() with model bean in session ");
-        TestBean testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean innerInner = new Inner2Bean();
-        Object result = null;
-
-        getFacesContext().getExternalContext().getSessionMap().put("TestBean",
-                                                                   testBean);
-        boolean exceptionThrown = false;
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("TestBean.one");
-        valueBinding.setValue(getFacesContext(), "one");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        InnerBean newInner = new InnerBean();
-        valueBinding = this.create("TestBean.inner");
-        valueBinding.setValue(getFacesContext(), newInner);
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result == newInner);
-        
-        // Test two levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("sessionScope.TestBean.inner.two");
-        valueBinding.setValue(getFacesContext(), "two");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        Inner2Bean newInner2 = new Inner2Bean();
-        valueBinding = this.create("TestBean.inner.inner2");
-        valueBinding.setValue(getFacesContext(), newInner2);
-        result = valueBinding.getValue(getFacesContext());
-        assertTrue(result == newInner2);
-        
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("sessionScope.TestBean.inner.inner2");
-        valueBinding.setValue(getFacesContext(), innerInner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        
-        // Test three levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("sessionScope.TestBean.inner.inner2.three");
-        valueBinding.setValue(getFacesContext(), "three");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-    }
-
-
-    public void testSetNull() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println(
-            "Testing setValue() with model bean in session with null rValues");
-        TestBean testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean innerInner = new Inner2Bean();
-
-        getFacesContext().getExternalContext().getSessionMap().put("TestBean",
-                                                                   testBean);
-
-        // Test one level of nesting
-        valueBinding = this.create("TestBean.one");
-        valueBinding.setValue(getFacesContext(), null);
-        assertTrue(testBean.getOne() == null);
-
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("sessionScope.TestBean.inner");
-        valueBinding.setValue(getFacesContext(), inner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        valueBinding = this.create("sessionScope.TestBean.inner");
-        valueBinding.setValue(getFacesContext(), null);
-        assertTrue(testBean.getInner() == null);
-
-        // Inner bean does not exist anymore. So this should result in an
-        // exception.
-        boolean exceptionThrown = false;
-        valueBinding = this.create("sessionScope.TestBean.inner.two");
-        try {
-            valueBinding.setValue(getFacesContext(), null);
-        } catch (javax.faces.el.EvaluationException ee) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-    public void testSetWithNoCurlyBraces() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println("Testing setValue() with model bean in request ");
-        TestBean testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean innerInner = new Inner2Bean();
-
-        facesContext.getExternalContext().getSessionMap().remove("TestBean");
-        facesContext.getExternalContext().getRequestMap().put("TestBean",
-                                                              testBean);
-
-        // Test implicit scopes direct access to some scope objects should
-        // throw an illegalArgumentException
-        boolean gotException = false;
-        try {
-            valueBinding = this.create("header.header-one");
-            valueBinding.setValue(getFacesContext(), testBean);
-        } catch (javax.faces.el.EvaluationException pnf) {
-            gotException = true;
-        }
-        assertTrue(gotException);
-
-        // Test one level of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("TestBean.one");
-        valueBinding.setValue(getFacesContext(), "one");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("requestScope.TestBean.inner");
-        valueBinding.setValue(getFacesContext(), inner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        // Test two levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("requestScope.TestBean.inner.two");
-        valueBinding.setValue(getFacesContext(), "two");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("requestScope.TestBean.inner.inner2");
-        valueBinding.setValue(getFacesContext(), innerInner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        // Test three levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueBinding = this.create("requestScope.TestBean.inner.inner2.three");
-        valueBinding.setValue(getFacesContext(), "three");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-    }
-
-
-    public void testGet() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println("Testing getValue() with model bean in context");
-        assertTrue(facesContext != null);
-        TestBean testBeanResult = null, testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean inner2 = new Inner2Bean();
-        String result;
-
-        // Init the beans
-        testBean.setOne("one");
-        inner.setTwo("two");
-        inner2.setThree("three");
-        inner.setInner2(inner2);
-        testBean.setInner(inner);
-
-        assertTrue(facesContext != null);
-        assertTrue(facesContext.getExternalContext().getSession(false) != null);
-
-        facesContext.getExternalContext().getRequestMap().remove("TestBean");
-        facesContext.getExternalContext().getSessionMap().remove("TestBean");
-        facesContext.getExternalContext().getApplicationMap().put("TestBean",
-                                                                  testBean);
-
-        // Test zero levels of nesting
-        valueBinding = this.create("applicationScope.TestBean");
-        testBeanResult = (TestBean) valueBinding.getValue(getFacesContext());
-        assertTrue(testBeanResult != null);
-        assertTrue(testBeanResult == testBean);
-
-        // Test one level of nesting
-        valueBinding = this.create("applicationScope.TestBean.one");
-        result = (String) valueBinding.getValue(getFacesContext());
-        assertTrue(result.equals("one"));
-
-        valueBinding = this.create("applicationScope.TestBean.inner");
-        inner = (InnerBean) valueBinding.getValue(getFacesContext());
-        assertTrue(null != inner);
-
-        // Test two levels of nesting
-        valueBinding = this.create("applicationScope.TestBean.inner.two");
-        result = (String) valueBinding.getValue(getFacesContext());
-        assertTrue(result.equals("two"));
-
-        valueBinding = this.create("applicationScope.TestBean.inner.inner2");
-        inner2 = (Inner2Bean)
-            valueBinding.getValue(getFacesContext());
-        assertTrue(null != inner2);
-
-        // Test three levels of nesting
-        valueBinding = this.create("applicationScope.TestBean.inner.inner2.three");
-        result = (String) valueBinding.getValue(getFacesContext());
-        assertTrue(result.equals("three"));
-
-    }
-
-
-    public void testModelType() {
-        /***************** PENDING(edburns):
-
-         // Test model type
-         System.out.println("Testing getModelType()");
-         Class classType = null;
-         String className = null;
-
-         // Test zero levels of nesting
-         classType = facesContext.getModelType("applicationScope.TestBean");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals(testBean.getClass().getName()));
-
-         classType = facesContext.getModelType("applicationScope.TestBean.inner.pin");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals("java.lang.Integer"));
-
-         classType = facesContext.getModelType("applicationScope.TestBean.inner.result");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals("java.lang.Boolean"));
-
-         classType = facesContext.getModelType("applicationScope.TestBean.one");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals("java.lang.String"));
-         *********************/
-    }
-
-} // end of class TestValueBindingImpl_Model
diff --git a/jsf-ri/test/com/sun/faces/el/TestValueExpressionImpl.java b/jsf-ri/test/com/sun/faces/el/TestValueExpressionImpl.java
deleted file mode 100644
index 3a217c6..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestValueExpressionImpl.java
+++ /dev/null
@@ -1,1177 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestValueExpressionImpl.java
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.TestBean;
-import com.sun.faces.CustomerBean;
-import com.sun.faces.cactus.TestBean.Inner2Bean;
-import com.sun.faces.cactus.TestBean.InnerBean;
-import com.sun.faces.application.ApplicationImpl;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.servlet.http.HttpServletRequest;
-
-import javax.el.ValueExpression;
-import javax.el.ELException;
-import javax.el.PropertyNotFoundException;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Locale;
-
-/**
- * <B>TestValueExpressionImpl </B> is a class ... <p/><B>Lifetime And Scope </B>
- * <P>
- */
-
-public class TestValueExpressionImpl extends ServletFacesTestCase
-{
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-    protected ValueExpression valueExpression;
-    
-    // Attribute Instance Variables
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers
-    //
-
-    public TestValueExpressionImpl()
-    {
-        super("TestValueExpressionImpl");
-    }
-
-    public TestValueExpressionImpl(String name)
-    {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // Methods from TestCase
-    //
-
-    //
-    // General Methods
-    //
-
-    protected ValueExpression create(String ref) throws Exception
-    {
-        return (getFacesContext().getApplication().getExpressionFactory().
-            createValueExpression(getFacesContext().getELContext(),("#{" + ref + "}"), Object.class));
-    }
-
-    public void populateRequest(WebRequest theRequest)
-    {
-        theRequest.addHeader("ELHeader", "ELHeader");
-        theRequest.addHeader("multiheader", "1");
-        theRequest.addHeader("multiheader", "2");
-        theRequest.addParameter("ELParam", "ELParam");
-        theRequest.addParameter("multiparam", "one");
-        theRequest.addParameter("multiparam", "two");
-        theRequest.addCookie("cookie", "monster");
-    }
-
-    public void beginELGet(WebRequest theRequest)
-    {
-        populateRequest(theRequest);
-    }
-
-    public void testELGet() throws Exception
-    {
-        TestBean testBean = new TestBean();
-        InnerBean newInner, oldInner = new InnerBean();
-        testBean.setInner(oldInner);
-        Object result = null;
-        ExternalContext extContext = getFacesContext().getExternalContext();
-
-        Map myMap = new HashMap();
-        TestBean myBean = new TestBean();
-        myBean.setOne("one");
-        myMap.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        //
-        // Get tests
-        //
-
-        valueExpression = this.create("myMap.myBean.one");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertEquals("one", result);
-
-        valueExpression = this.create("myMap[\"myBean\"].one");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue("one".equals(result));
-
-        valueExpression = this.create("myMap.myBean['one']");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue("one".equals(result));
-
-        // Simple tests, verify that bracket and dot operators work
-        valueExpression = this.create("TestBean.inner");
-        getFacesContext().getExternalContext().getSessionMap().put("TestBean",
-                testBean);
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result == oldInner);
-
-        valueExpression = this.create("TestBean[\"inner\"]");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result == oldInner);
-
-        valueExpression = this.create("TestBean[\"inner\"].customers[1]");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result instanceof String);
-        assertTrue(result.equals("Jerry"));
-
-        // try out the implicit objects
-        valueExpression = this.create("sessionScope.TestBean.inner");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result == oldInner);
-
-        valueExpression = this.create("header.ELHeader");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(requestsHaveSameAttributeSet(
-                (HttpServletRequest) getFacesContext().getExternalContext()
-                        .getRequest(), (HttpServletRequest) request));
-        assertTrue(request.getHeader("ELHeader").equals("ELHeader"));
-        assertTrue(result.equals("ELHeader"));
-
-        valueExpression = this.create("param.ELParam");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result.equals("ELParam"));
-
-        String multiparam[] = null;
-        valueExpression = this.create("paramValues.multiparam");
-        multiparam = (String[]) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(null != multiparam);
-        assertTrue(2 == multiparam.length);
-        assertTrue(multiparam[0].equals("one"));
-        assertTrue(multiparam[1].equals("two"));
-
-        valueExpression = this.create("headerValues.multiheader");
-        String[] multiHeader = (String[]) valueExpression
-                .getValue(getFacesContext().getELContext());
-        assertTrue(null != multiHeader);
-        assertTrue(1 == multiHeader.length);
-        assertTrue(multiHeader[0].equals("1,2"));
-
-        valueExpression = this.create("initParam.testInitParam");
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(null != result);
-        assertTrue(result.equals("testInitParam"));
-
-        // PENDING(craigmcc) - Comment out this test because on my platform
-        // the getRequestCookies() call returns null
-        /*
-         * valueExpression.setRef("cookie.cookie"); result =
-         * valueExpression.getValue(getFacesContext().getELContext()); assertTrue(null != result);
-         * assertTrue(result instanceof Cookie); assertTrue(((Cookie)
-         * result).getValue().equals("monster"));
-         */
-
-    }
-
-    public void beginELSet(WebRequest theRequest)
-    {
-        populateRequest(theRequest);
-    }
-
-    public void testELSet() throws Exception
-    {
-        TestBean testBean = new TestBean();
-        InnerBean newInner, oldInner = new InnerBean();
-        testBean.setInner(oldInner);
-        ValueExpression valueExpression = null;
-        Object result = null;
-        ExternalContext extContext = getFacesContext().getExternalContext();
-
-        Map myMap = new HashMap();
-        TestBean myBean = new TestBean();
-        myMap.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        //
-        // Set tests
-        //
-        valueExpression = this.create("myMap.myBean.one");
-        valueExpression.setValue(getFacesContext().getELContext(), "one");
-        Map map = (Map) extContext.getRequestMap().get("myMap");
-        assertTrue("one".equals(((TestBean) map.get("myBean")).getOne()));
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        // test that we can set null as the value
-        valueExpression = this.create("myMap.myBean.prop");
-        valueExpression.setValue(getFacesContext().getELContext(), null);
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertEquals(null, ((TestBean) map.get("myBean")).getOne());
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        valueExpression = this.create("myMap[\"myBean\"].one");
-        valueExpression.setValue(getFacesContext().getELContext(), "one");
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertTrue("one".equals(((TestBean) map.get("myBean")).getOne()));
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        // test that we can set the property to null
-        valueExpression = this.create("myMap[\"myBean\"].prop");
-        valueExpression.setValue(getFacesContext().getELContext(), null);
-        map = (Map) extContext.getRequestMap().get("myMap");
-        String msg = "Default Message";
-        if (((TestBean) map.get("myBean")).getProp() != null)
-        {
-            msg = ((TestBean) map.get("myBean")).getProp().getClass().getName();
-        }
-        assertEquals(msg, null, ((TestBean) map.get("myBean")).getProp());
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        valueExpression = this.create("myMap.myBean['one']");
-        valueExpression.setValue(getFacesContext().getELContext(), "one");
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertTrue("one".equals(((TestBean) map.get("myBean")).getOne()));
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        // set the prop to null
-        valueExpression = this.create("myMap.myBean['prop']");
-        valueExpression.setValue(getFacesContext().getELContext(), null);
-        map = (Map) extContext.getRequestMap().get("myMap");
-        assertEquals(null, ((TestBean) map.get("myBean")).getOne());
-        myBean = new TestBean();
-        map.put("myBean", myBean);
-        extContext.getRequestMap().put("myMap", myMap);
-
-        valueExpression = this.create("NonExist");
-        valueExpression.setValue(getFacesContext().getELContext(), "value");
-        result = extContext.getRequestMap().get("NonExist");
-        assertTrue("value".equals(result));
-        extContext.getRequestMap().remove("NonExist");
-
-        extContext.getSessionMap().put("Key", "oldValue");
-        valueExpression = this.create("Key");
-        valueExpression.setValue(getFacesContext().getELContext(), "newValue");
-        result = extContext.getSessionMap().get("Key");
-        assertTrue("newValue".equals(result));
-        extContext.getSessionMap().remove("Key");
-
-        newInner = new InnerBean();
-        valueExpression = this.create("TestBean.inner");
-        valueExpression.setValue(getFacesContext().getELContext(), newInner);
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result == newInner);
-        assertTrue(oldInner != newInner);
-
-        oldInner = newInner;
-        newInner = new InnerBean();
-        valueExpression = this.create("TestBean[\"inner\"]");
-        valueExpression.setValue(getFacesContext().getELContext(), newInner);
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result == newInner);
-        assertTrue(oldInner != newInner);
-
-        String oldCustomer0 = null, oldCustomer1 = null, customer0 = null, customer1 = null;
-
-        valueExpression = this.create("TestBean[\"inner\"].customers[0]");
-        oldCustomer0 = customer0 = (String) valueExpression
-                .getValue(getFacesContext().getELContext());
-        valueExpression = this.create("TestBean[\"inner\"].customers[1]");
-        oldCustomer1 = customer1 = (String) valueExpression
-                .getValue(getFacesContext().getELContext());
-
-        valueExpression = this.create("TestBean[\"inner\"].customers[0]");
-        valueExpression.setValue(getFacesContext().getELContext(), "Jerry");
-        valueExpression = this.create("TestBean[\"inner\"].customers[1]");
-        valueExpression.setValue(getFacesContext().getELContext(), "Mickey");
-
-        valueExpression = this.create("TestBean[\"inner\"].customers[0]");
-        customer0 = (String) valueExpression.getValue(getFacesContext().getELContext());
-        valueExpression = this.create("TestBean[\"inner\"].customers[1]");
-        customer1 = (String) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(customer0.equals("Jerry"));
-        assertTrue(customer1.equals("Mickey"));
-
-        valueExpression = this.create("TestBean[\"inner\"].customers[0]");
-        assertTrue(valueExpression.getValue(getFacesContext().getELContext()) != oldCustomer0);
-        valueExpression = this.create("TestBean[\"inner\"].customers[1]");
-        assertTrue(valueExpression.getValue(getFacesContext().getELContext()) != oldCustomer1);
-
-        // put in a map to the customers Collection
-        Inner2Bean inner2 = new Inner2Bean();
-        assertTrue(null == inner2.getNicknames().get("foo"));
-        valueExpression = this.create("TestBean[\"inner\"].customers[2]");
-        valueExpression.setValue(getFacesContext().getELContext(), inner2);
-        valueExpression = this.create("TestBean[\"inner\"].customers[2]");
-        assertTrue(valueExpression.getValue(getFacesContext().getELContext()) == inner2);
-
-        valueExpression = this
-                .create("TestBean[\"inner\"].customers[2].nicknames.foo");
-        valueExpression.setValue(getFacesContext().getELContext(), "bar");
-        assertTrue(((String) inner2.getNicknames().get("foo")).equals("bar"));
-
-        // ensure we can call setValue() successfully if the bean isn't already
-        // in scope at the time of invocation
-        Map<String,Object> sm = getFacesContext().getExternalContext().getSessionMap();
-        sm.remove("mixedBean");
-        valueExpression = this.create("mixedBean.prop");
-        valueExpression.setValue(getFacesContext().getELContext(), "passed");
-        assertTrue("passed".equals(valueExpression.getValue(getFacesContext().getELContext())));
-
-        request.removeAttribute("testBean2");
-        request.removeAttribute("customerBean");
-        valueExpression = this.create("testBean2.customerBean");
-        CustomerBean cb = new CustomerBean();
-        cb.setName("bill");
-        valueExpression.setValue(getFacesContext().getELContext(), cb);
-        testBean = (TestBean) request.getAttribute("testBean2");
-        assertNull(request.getAttribute("customerBean"));
-        assertNotNull(testBean);
-        cb = testBean.getCustomerBean();
-        assertEquals("bill", cb.getName());
-    }
-    
-    public void testNullReference() throws Exception
-    {
-        boolean exceptionThrown = false;
-        // no exception should be thrown as per the EL spec if expression is null.
-        try
-        {
-            getFacesContext().getApplication().getExpressionFactory().
-                createValueExpression(getFacesContext().getELContext(),null, Object.class);
-        }
-        catch (NullPointerException npe) {
-            exceptionThrown = false;
-        }
-        catch (ELException ee) { exceptionThrown= true; };
-        assertTrue(exceptionThrown);
-    }
-
-    public void testLiterals() throws Exception
-    {
-        ValueExpression vb = null;
-        Object result = null;
-        ExternalContext extContext = getFacesContext().getExternalContext();
-        
-        vb = getFacesContext().getApplication().getExpressionFactory().
-            createValueExpression(getFacesContext().getELContext(),"test", Object.class);
-        assertEquals("test", vb.getValue(getFacesContext().getELContext()));
-        
-        assertEquals(String.class, vb.getType(getFacesContext().getELContext()));
-        try
-        {
-            vb.setValue(getFacesContext().getELContext(), "other");
-            fail("Literal's setValue(..) should have thrown a EvaluationException");
-        }
-        catch (javax.el.ELException ee) {}
-    }
-
-    public void testReadOnly_singleCase() throws Exception
-    {
-
-        // these are mutable Maps
-        /*
-         * properties on these maps are mutable, but not the object itself....
-         * see
-         */
-        valueExpression = this.create("applicationScope");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("sessionScope");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("requestScope");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("viewScope");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-
-        // these are immutable Maps
-        valueExpression = this.create("param");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("paramValues");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("header");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("headerValues");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("cookie");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("initParam");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-    }
-
-    public void testReadOnly_multipleCase() throws Exception
-    {
-
-        // these are mutable Maps
-        valueExpression = this.create("applicationScope.value");
-        valueExpression.setValue(getFacesContext().getELContext(), "value");
-        String value = (String) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(!valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("sessionScope.value");
-        assertTrue(!valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("requestScope.value");
-        assertTrue(!valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("viewScope.value");
-        assertTrue(!valueExpression.isReadOnly(getFacesContext().getELContext()));
-
-        // these are immutable Maps
-        valueExpression = this.create("param.value");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("paramValues.value");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("header.value");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("headerValues.value");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("cookie.value");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("initParam.value");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext())); 
-
-        // tree
-        // create a dummy root for the tree.
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(
-                getFacesContext(), null);
-        page.setId("root");
-        page.setViewId("newTree");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-        valueExpression = this.create("view.childCount");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-
-        com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean) getFacesContext().getExternalContext()
-                .getSessionMap().get("TestBean");
-        assertTrue(null != testBean);
-        valueExpression = this.create("TestBean.readOnly");
-        assertTrue(valueExpression.isReadOnly(getFacesContext().getELContext()));
-        valueExpression = this.create("TestBean.one");
-        assertTrue(!valueExpression.isReadOnly(getFacesContext().getELContext()));
-
-        InnerBean inner = new InnerBean();
-        testBean.setInner(inner);
-        valueExpression = this.create("TestBean[\"inner\"].customers[1]");
-        assertTrue(!valueExpression.isReadOnly(getFacesContext().getELContext()));
-
-    }
-
-    public void testGetType_singleCase() throws Exception
-    {
-
-        // these are mutable Maps
-        valueExpression = this.create("applicationScope");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("sessionScope");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("requestScope");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("viewScope");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-
-        // these are immutable Maps
-        valueExpression = this.create("param");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("paramValues");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("header");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("headerValues");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("cookie");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-        valueExpression = this.create("initParam");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()) == null);
-    }
-
-    public void beginGetType_multipleCase(WebRequest theRequest)
-    {
-        populateRequest(theRequest);
-    }
-
-    public void testGetType_multipleCase() throws Exception
-    {
-        String property = "testValueExpressionImpl_property";
-        getFacesContext().getExternalContext().getApplicationMap().put(
-                property, property);
-
-        getFacesContext().getExternalContext().getSessionMap().put(property,
-                property);
-
-        getFacesContext().getExternalContext().getRequestMap().put(property,
-                property);
-
-        getFacesContext().getViewRoot().getViewMap().put(property, property);
-
-        // these are mutable Maps
-        valueExpression = this.create("applicationScope." + property);
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-        valueExpression = this.create("sessionScope." + property);
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-        valueExpression = this.create("requestScope." + property);
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-        valueExpression = this.create("viewScope." + property);
-        valueExpression.setValue(getFacesContext().getELContext(), property);
-        assertTrue(getFacesContext().getViewRoot().getViewMap().containsKey(property));
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-
-        // these are immutable Maps
-        valueExpression = this.create("param." + "ELParam");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-        valueExpression = this.create("paramValues.multiparam");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-
-        valueExpression = this.create("header.ELHeader");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-        valueExpression = this.create("headerValues.multiheader");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-       // assertTrue(java.util.Enumeration.class.isAssignableFrom(valueExpression
-       //         .getType(getFacesContext().getELContext())));
-        // PENDING(craigmcc) - Comment out this test because on my platform
-        // the getRequestCookies() call returns null
-        /*
-         * valueExpression = this.create("cookie.cookie");
-         * assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals("javax.servlet.http.Cookie"));
-         */
-        valueExpression = this
-                .create("initParam['javax.faces.STATE_SAVING_METHOD']");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));   
-
-        // tree
-        // create a dummy root for the tree.
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(
-                getFacesContext(), null);
-        page.setId("root");
-        page.setViewId("newTree");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-        valueExpression = this.create("view");
-        Class c = valueExpression.getType(getFacesContext().getELContext());
-        assertTrue(c == null);
-
-        com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean) getFacesContext().getExternalContext()
-                .getSessionMap().get("TestBean");
-        assertTrue(null != testBean);
-        valueExpression = this.create("TestBean.readOnly");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.String"));
-        valueExpression = this.create("TestBean.one");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.String"));
-
-        InnerBean inner = new InnerBean();
-        testBean.setInner(inner);
-        valueExpression = this.create("TestBean[\"inner\"].customers[1]");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-
-        valueExpression = this.create("TestBean[\"inner\"]");
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "com.sun.faces.cactus.TestBean$InnerBean"));
-
-        int[] intArray =
-        { 1, 2, 3 };
-        getFacesContext().getExternalContext().getRequestMap().put("intArray",
-                intArray);
-        valueExpression = this.create("requestScope.intArray");
-       
-        assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-                "java.lang.Object"));
-       // assertTrue(valueExpression.getType(getFacesContext().getELContext()).getName().equals(
-       //         "[I"));
-    }
-
-    public void testGetScopePositive() throws Exception
-    {
-        TestBean testBean = new TestBean();
-        getFacesContext().getExternalContext().getApplicationMap().put(
-                "TestApplicationBean", testBean);
-
-        valueExpression = this.create("TestApplicationBean");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope("TestApplicationBean", null));
-
-        valueExpression = this.create("TestApplicationBean.one");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope("TestApplicationBean.one",
-                null));
-
-        valueExpression = this.create("TestApplicationBean.inner.two");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope(
-                "TestApplicationBean.inner.two", null));
-
-        valueExpression = this.create("applicationScope.TestApplicationBean");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope(
-                "applicationScope.TestApplicationBean", null));
-        valueExpression = this
-                .create("applicationScope.TestApplicationBean.inner.two");
-        assertEquals(ELUtils.Scope.APPLICATION, ELUtils.getScope(
-                "applicationScope.TestApplicationBean.inner.two", null));
-
-        getFacesContext().getExternalContext().getSessionMap().put(
-                "TestSessionBean", testBean);
-        valueExpression = this.create("TestSessionBean");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope("TestSessionBean", null));
-
-        valueExpression = this.create("TestSessionBean.one");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope("TestSessionBean.one", null));
-
-        valueExpression = this.create("TestSessionBean.inner.two");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils
-             .getScope("TestSessionBean.inner.two", null));
-
-        valueExpression = this.create("sessionScope.TestSessionBean");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope("sessionScope.TestSessionBean",
-                null));
-
-        valueExpression = this.create("sessionScope.TestSessionBean.inner.two");
-        assertEquals(ELUtils.Scope.SESSION, ELUtils.getScope(
-                "sessionScope.TestSessionBean.inner.two", null));
-
-        getFacesContext().getExternalContext().getRequestMap().put(
-                "TestRequestBean", testBean);
-        valueExpression = this.create("TestRequestBean");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope("TestRequestBean", null));
-
-        valueExpression = this.create("TestRequestBean.one");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope("TestRequestBean.one", null));
-
-        valueExpression = this.create("TestRequestBean.inner.two");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils
-             .getScope("TestRequestBean.inner.two", null));
-
-        valueExpression = this.create("requestScope.TestRequestBean");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope("requestScope.TestRequestBean",
-                null));
-
-        valueExpression = this.create("requestScope.TestRequestBean.inner.two");
-        assertEquals(ELUtils.Scope.REQUEST, ELUtils.getScope(
-                "requestScope.TestRequestBean.inner.two", null));
-
-        assertEquals(ELUtils.Scope.VIEW, ELUtils.getScope("viewScope.foo", null));
-
-        valueExpression = this.create("TestNoneBean");
-        assertNull(ELUtils.getScope("TestNoneBean", null));
-
-        valueExpression = this.create("TestNoneBean.one");
-        assertNull(ELUtils.getScope("TestNoneBean.one", null));
-        valueExpression = this.create("TestNoneBean.inner.two");
-        assertNull(ELUtils.getScope("TestNoneBean.inner.two", null));
-
-    }
-
-    public void testGetScopeNegative() throws Exception {
-        ValueExpression valueExpression = null;
-        String property = null;
-        /*
-        property = "[]";
-        valueExpression = this.factory.createValueExpression(property);
-        assertNull(Util.getScope(property, null));
-        property = "][";
-        assertNull(Util.getScope(property, null));
-        property = "";
-        assertNull(Util.getScope(property, null));
-        property = null;
-        assertNull(Util.getScope(property, null));
-        property = "foo.sessionScope";
-        assertNull(Util.getScope(property, null));        
-        */
-
-    }
-
-    // negative test for case when valueRef is merely
-    // one of the reserved scope names.
-    public void testReservedScopeIdentifiers() throws Exception
-    {
-        boolean exceptionThrown = false;
-
-        try
-        {
-            valueExpression = this.create("applicationScope");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("sessionScope");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("requestScope");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("facesContext");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("cookie");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("header");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("headerValues");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("initParam");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("param");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("paramValues");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("view");
-            valueExpression.setValue(getFacesContext().getELContext(), "value");
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-    public void testInvalidExpression() throws Exception
-    {
-
-        boolean exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (ELException e)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("!");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("..");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create(".foo");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("()");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("[]");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("applicationScope}");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(!exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("applicationScope >= sessionScope");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try
-        {
-            valueExpression = this.create("foo applicationScope");
-            valueExpression.getValue(getFacesContext().getELContext());
-        }
-        catch (PropertyNotFoundException e)
-        {
-            exceptionThrown = true;
-        }
-        catch (ELException ee)
-        {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-    }
-
-   /* public void testStateHolderSmall() throws Exception
-    {
-        StateHolderSaver saver = null;
-        ValueExpression binding = getFacesContext().getApplication().getExpressionFactory().
-                createValueExpression("#{TestBean.indexProperties[0]}", Object.class, null);
-
-        assertEquals("ValueExpression not expected value", "Justyna",
-                (String) binding.getValue(getFacesContext().getELContext()));
-        saver = new StateHolderSaver(getFacesContext(), binding);
-        binding = null;
-        binding = (ValueExpression) saver.restore(getFacesContext());
-        assertEquals("ValueExpression not expected value", "Justyna",
-                (String) binding.getValue(getFacesContext().getELContext()));
-    }
-
-    public void testStateHolderMedium() throws Exception
-    {
-        UIViewRoot root = null;
-        UIForm form = null;
-        UIInput input = null;
-        Object state = null;
-        getFacesContext().setViewRoot(
-                root = Util.getViewHandler(getFacesContext()).createView(
-                        getFacesContext(), null));
-        root.getChildren().add(form = new UIForm());
-        form.getChildren().add(input = new UIInput());
-        input.setValueExpression("buckaroo", (getFacesContext().getApplication().getExpressionFactory().
-                createValueExpression("#{TestBean.indexProperties[0]}", Object.class, null)));
-        state = root.processSaveState(getFacesContext());
-
-        // synthesize the tree structure
-        getFacesContext().setViewRoot(
-                root = Util.getViewHandler(getFacesContext()).createView(
-                        getFacesContext(), null));
-        root.getChildren().add(form = new UIForm());
-        form.getChildren().add(input = new UIInput());
-        root.processRestoreState(getFacesContext(), state);
-
-        assertEquals("ValueExpression not expected value", "Justyna",
-                (String) input.createValueExpression("buckaroo").getValue(
-                        getFacesContext().getELContext()));
-
-    } */
-
-    public void testGetExpressionString() throws Exception
-    {
-        ApplicationImpl app = (ApplicationImpl) getFacesContext()
-                .getApplication();
-        String ref = null;
-        ValueExpression vb = null;
-
-        ref = "#{NewCustomerFormHandler.minimumAge}";
-        vb = app.getExpressionFactory().createValueExpression(getFacesContext().getELContext(),ref, Object.class);
-        assertEquals(ref, vb.getExpressionString());
-
-        ref = "minimum age is #{NewCustomerFormHandler.minimumAge}";
-        vb = app.getExpressionFactory().createValueExpression(getFacesContext().getELContext(),ref, Object.class);
-        assertEquals(ref, vb.getExpressionString());
-    }
-
-    class StateHolderSaver extends Object implements Serializable
-    {
-
-        protected String className = null;
-
-        protected Object savedState = null;
-
-        public StateHolderSaver(FacesContext context, Object toSave)
-        {
-            className = toSave.getClass().getName();
-
-            if (toSave instanceof StateHolder)
-            {
-                // do not save an attached object that is marked transient.
-                if (!((StateHolder) toSave).isTransient())
-                {
-                    savedState = ((StateHolder) toSave).saveState(context);
-                }
-                else
-                {
-                    className = null;
-                }
-            }
-        }
-
-        /**
-         * @return the restored {@link StateHolder}instance.
-         */
-
-        public Object restore(FacesContext context)
-                throws IllegalStateException
-        {
-            Object result = null;
-            Class toRestoreClass = null;
-            if (className == null)
-            {
-                return null;
-            }
-
-            try
-            {
-                toRestoreClass = loadClass(className, this);
-            }
-            catch (ClassNotFoundException e)
-            {
-                System.out.println("ClassNotFound Exception");
-                throw new IllegalStateException(e.getMessage());
-            }
-
-            if (null != toRestoreClass)
-            {
-                try
-                {
-                    result = toRestoreClass.newInstance();
-                }
-                catch (InstantiationException e)
-                {
-                    System.out.println("Instantiation Exception");
-                    e.printStackTrace();
-                    throw new IllegalStateException(e.getMessage());
-                }
-                catch (IllegalAccessException a)
-                {
-                    System.out.println("IleegalAccess Exception");
-                    throw new IllegalStateException(a.getMessage());
-                }
-            }
-
-            if (null != result && null != savedState
-                    && result instanceof StateHolder)
-            {
-                // don't need to check transient, since that was done on
-                // the saving side.
-                ((StateHolder) result).restoreState(context, savedState);
-            }
-            return result;
-        }
-
-        private Class loadClass(String name, Object fallbackClass)
-                throws ClassNotFoundException
-        {
-            ClassLoader loader = Thread.currentThread().getContextClassLoader();
-            if (loader == null)
-            {
-                loader = fallbackClass.getClass().getClassLoader();
-            }
-            return loader.loadClass(name);
-        }
-    }
-
-} // end of class TestValueExpressionImpl
diff --git a/jsf-ri/test/com/sun/faces/el/TestValueExpressionImpl_Model.java b/jsf-ri/test/com/sun/faces/el/TestValueExpressionImpl_Model.java
deleted file mode 100644
index 17bc1cd..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestValueExpressionImpl_Model.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestValueExpressionImpl_Model.java
-
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.TestBean;
-import com.sun.faces.cactus.TestBean.Inner2Bean;
-import com.sun.faces.cactus.TestBean.InnerBean;
-
-import javax.faces.context.FacesContext;
-import javax.el.ELException;
-import javax.el.ValueExpression;
-import javax.el.ELContext;
-
-/**
- * <B>TestValueExpressionImpl_Model</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestValueExpressionImpl_Model extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-    ValueExpression valueExpression = null;
-    
-//
-// Constructors and Initializers    
-//
-
-    public TestValueExpressionImpl_Model() {
-        super("TestValueExpressionImpl");
-    }
-
-
-    public TestValueExpressionImpl_Model(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-//
-// General Methods
-//
-    public ValueExpression create(String ref) throws Exception {
-    	return (getFacesContext().getApplication().getExpressionFactory().
-            createValueExpression(getFacesContext().getELContext(),("#{" + ref + "}"), Object.class));
-    }
-    
-    public void setUp() {
-        super.setUp();
-        valueExpression = null;
-    }
-
-
-    public void tearDown() {
-        valueExpression = null;
-        super.tearDown();
-    }
-
-
-    public void testSet() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println("Testing setValue() with model bean in session ");
-        TestBean testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean innerInner = new Inner2Bean();
-        Object result = null;
-
-        getFacesContext().getExternalContext().getSessionMap().put("TestBean",
-                                                                   testBean);
-        boolean exceptionThrown = false;
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("TestBean.one");
-        valueExpression.setValue(getFacesContext().getELContext(), "one");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        InnerBean newInner = new InnerBean();
-        valueExpression = this.create("TestBean.inner");
-        valueExpression.setValue(getFacesContext().getELContext(), newInner);
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result == newInner);
-        
-        // Test two levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("sessionScope.TestBean.inner.two");
-        valueExpression.setValue(getFacesContext().getELContext(), "two");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        Inner2Bean newInner2 = new Inner2Bean();
-        valueExpression = this.create("TestBean.inner.inner2");
-        valueExpression.setValue(getFacesContext().getELContext(), newInner2);
-        result = valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result == newInner2);
-        
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("sessionScope.TestBean.inner.inner2");
-        valueExpression.setValue(getFacesContext().getELContext(), innerInner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        
-        // Test three levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("sessionScope.TestBean.inner.inner2.three");
-        valueExpression.setValue(getFacesContext().getELContext(), "three");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-    }
-
-
-    public void testSetNull() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println(
-            "Testing setValue() with model bean in session with null rValues");
-        TestBean testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean innerInner = new Inner2Bean();
-
-        getFacesContext().getExternalContext().getSessionMap().put("TestBean",
-                                                                   testBean);
-
-        // Test one level of nesting
-        valueExpression = this.create("TestBean.one");
-        valueExpression.setValue(getFacesContext().getELContext(), null);
-        assertTrue(testBean.getOne() == null);
-
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("sessionScope.TestBean.inner");
-        valueExpression.setValue(getFacesContext().getELContext(), inner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        valueExpression = this.create("sessionScope.TestBean.inner");
-        valueExpression.setValue(getFacesContext().getELContext(), null);
-        assertTrue(testBean.getInner() == null);
-
-        // Inner bean does not exist anymore. So this should result in an
-        // exception.  Should throw a PropertyNotFoundException according
-        // to page 92 of the EL Spec
-        boolean exceptionThrown = false;
-        valueExpression = this.create("sessionScope.TestBean.inner.two");
-        try {
-            valueExpression.setValue(getFacesContext().getELContext(), null);
-        } catch (javax.el.PropertyNotFoundException ee) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-    public void testSetWithNoCurlyBraces() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println("Testing setValue() with model bean in request ");
-        TestBean testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean innerInner = new Inner2Bean();
-
-        facesContext.getExternalContext().getSessionMap().remove("TestBean");
-        facesContext.getExternalContext().getRequestMap().put("TestBean",
-                                                              testBean);
-
-        // Test implicit scopes direct access to some scope objects should
-        // throw an illegalArgumentException
-        boolean gotException = false;
-        try {
-            valueExpression = this.create("header.header-one");
-            valueExpression.setValue(getFacesContext().getELContext(), testBean);
-        } catch (javax.el.ELException pnf) {
-            gotException = true;
-        }
-        assertTrue(gotException);
-
-        // Test one level of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("TestBean.one");
-        valueExpression.setValue(getFacesContext().getELContext(), "one");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("requestScope.TestBean.inner");
-        valueExpression.setValue(getFacesContext().getELContext(), inner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        // Test two levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("requestScope.TestBean.inner.two");
-        valueExpression.setValue(getFacesContext().getELContext(), "two");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("requestScope.TestBean.inner.inner2");
-        valueExpression.setValue(getFacesContext().getELContext(), innerInner);
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-
-        // Test three levels of nesting
-        System.setProperty(TestBean.PROP, TestBean.FALSE);
-        valueExpression = this.create("requestScope.TestBean.inner.inner2.three");
-        valueExpression.setValue(getFacesContext().getELContext(), "three");
-        assertTrue(System.getProperty(TestBean.PROP).equals(TestBean.TRUE));
-    }
-
-
-    public void testGet() throws Exception {
-        FacesContext facesContext = getFacesContext();
-        System.out.println("Testing getValue() with model bean in context");
-        assertTrue(facesContext != null);
-        TestBean testBeanResult = null, testBean = new TestBean();
-        InnerBean inner = new InnerBean();
-        Inner2Bean inner2 = new Inner2Bean();
-        String result;
-
-        // Init the beans
-        testBean.setOne("one");
-        inner.setTwo("two");
-        inner2.setThree("three");
-        inner.setInner2(inner2);
-        testBean.setInner(inner);
-
-        assertTrue(facesContext != null);
-        assertTrue(facesContext.getExternalContext().getSession(false) != null);
-
-        facesContext.getExternalContext().getRequestMap().remove("TestBean");
-        facesContext.getExternalContext().getSessionMap().remove("TestBean");
-        facesContext.getExternalContext().getApplicationMap().put("TestBean",
-                                                                  testBean);
-
-        // Test zero levels of nesting
-        valueExpression = this.create("applicationScope.TestBean");
-        testBeanResult = (TestBean) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(testBeanResult != null);
-        assertTrue(testBeanResult == testBean);
-
-        // Test one level of nesting
-        valueExpression = this.create("applicationScope.TestBean.one");
-        result = (String) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result.equals("one"));
-
-        valueExpression = this.create("applicationScope.TestBean.inner");
-        inner = (InnerBean) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(null != inner);
-
-        // Test two levels of nesting
-        valueExpression = this.create("applicationScope.TestBean.inner.two");
-        result = (String) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result.equals("two"));
-
-        valueExpression = this.create("applicationScope.TestBean.inner.inner2");
-        inner2 = (Inner2Bean)
-            valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(null != inner2);
-
-        // Test three levels of nesting
-        valueExpression = this.create("applicationScope.TestBean.inner.inner2.three");
-        result = (String) valueExpression.getValue(getFacesContext().getELContext());
-        assertTrue(result.equals("three"));
-
-    }
-
-
-    public void testModelType() {
-        /***************** PENDING(edburns):
-
-         // Test model type
-         System.out.println("Testing getModelType()");
-         Class classType = null;
-         String className = null;
-
-         // Test zero levels of nesting
-         classType = facesContext.getModelType("applicationScope.TestBean");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals(testBean.getClass().getName()));
-
-         classType = facesContext.getModelType("applicationScope.TestBean.inner.pin");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals("java.lang.Integer"));
-
-         classType = facesContext.getModelType("applicationScope.TestBean.inner.result");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals("java.lang.Boolean"));
-
-         classType = facesContext.getModelType("applicationScope.TestBean.one");
-         assertTrue(classType != null);
-         className = classType.getName();
-         assertTrue(className.equals("java.lang.String"));
-         *********************/
-    }
-
-} // end of class TestValueExpressionImpl_Model
diff --git a/jsf-ri/test/com/sun/faces/el/TestVariableResolverImpl.java b/jsf-ri/test/com/sun/faces/el/TestVariableResolverImpl.java
deleted file mode 100644
index aad601d..0000000
--- a/jsf-ri/test/com/sun/faces/el/TestVariableResolverImpl.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestVariableResolverImpl.java
-
-package com.sun.faces.el;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.TestBean;
-import com.sun.faces.mgbean.ManagedBeanInfo;
-import com.sun.faces.mgbean.BeanManager;
-import com.sun.faces.cactus.TestBean.InnerBean;
-import com.sun.faces.application.ApplicationImpl;
-import com.sun.faces.application.ApplicationAssociate;
-import com.sun.faces.util.Util;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.UIViewRoot;
-import javax.faces.el.VariableResolver;
-import java.util.Locale;
-
-
-/**
- * <B>TestVariableResolverImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestVariableResolverImpl extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestVariableResolverImpl() {
-        super("TestFacesContext");
-    }
-
-
-    public TestVariableResolverImpl(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// Methods from TestCase
-//
-
-//
-// General Methods
-//
-
-    public void testScopedLookup() {
-        TestBean testBean = new TestBean();
-        InnerBean newInner, oldInner = new InnerBean();
-        testBean.setInner(oldInner);
-        VariableResolver variableResolver = 
-            getFacesContext().getApplication().getVariableResolver();
-        Object result = null;
-        getFacesContext().getExternalContext().getSessionMap().remove(
-            "TestBean");
-
-        //
-        // Get tests
-        //
-
-        // application
-        getFacesContext().getExternalContext().getApplicationMap().put(
-            "TestBean",
-            testBean);
-        result = variableResolver.resolveVariable(getFacesContext(),
-                                                  "TestBean");
-        assertTrue(result == testBean);
-        getFacesContext().getExternalContext().getApplicationMap().remove(
-            "TestBean");
-        // session
-        getFacesContext().getExternalContext().getSessionMap().put("TestBean",
-                                                                   testBean);
-        result = variableResolver.resolveVariable(getFacesContext(),
-                                                  "TestBean");
-        assertTrue(result == testBean);
-        getFacesContext().getExternalContext().getSessionMap().remove(
-            "TestBean");
-
-        // session
-        getFacesContext().getExternalContext().getRequestMap().put("TestBean",
-                                                                   testBean);
-
-        result = variableResolver.resolveVariable(getFacesContext(),
-                                                  "TestBean");
-        assertTrue(result == testBean);
-        getFacesContext().getExternalContext().getRequestMap().remove(
-            "TestBean");
-
-    }
-
-
-    public void testImplicitObjects() {
-        VariableResolver variableResolver = 
-            getFacesContext().getApplication().getVariableResolver();
-        Object result = null;
-
-        //
-        // test scope maps
-        //
-
-        // ApplicationMap
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "applicationScope") ==
-                   getFacesContext().getExternalContext().getApplicationMap());
-
-        // SessionMap
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "sessionScope") ==
-                   getFacesContext().getExternalContext().getSessionMap());
-
-        // RequestMap
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "requestScope") ==
-                   getFacesContext().getExternalContext().getRequestMap());
-
-        //
-        // test request objects
-        //
-
-        // cookie
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "cookie") ==
-                   getFacesContext().getExternalContext().getRequestCookieMap());
-
-        // header
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "header") ==
-                   getFacesContext().getExternalContext().getRequestHeaderMap());
-
-        // headerValues
-        assertTrue(
-            variableResolver.resolveVariable(getFacesContext(),
-                                             "headerValues") ==
-            getFacesContext().getExternalContext().getRequestHeaderValuesMap());
-
-        // parameter
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "param") ==
-                   getFacesContext().getExternalContext()
-                   .getRequestParameterMap());
-
-        // parameterValues
-        assertTrue(
-            variableResolver.resolveVariable(getFacesContext(),
-                                             "paramValues") ==
-            getFacesContext().getExternalContext()
-            .getRequestParameterValuesMap());
-
-        //
-        // misc
-        //
-
-        // initParameter
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "initParam") ==
-                   getFacesContext().getExternalContext().getInitParameterMap());
-
-
-        // facesContext
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "facesContext") ==
-                   getFacesContext());
-
-        // tree
-        // create a dummy root for the tree.
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setId("root");
-        page.setViewId("newTree");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-
-        assertTrue(variableResolver.resolveVariable(getFacesContext(),
-                                                    "view") ==
-                   getFacesContext().getViewRoot());
-
-
-    }
-
-
-    // Negative tests (should throw exceptions)
-    public void testNegative() throws Exception {
-        VariableResolver variableResolver = 
-            getFacesContext().getApplication().getVariableResolver();
-
-        Object value = null;
-
-        // ---------- NullPointerException Returns ----------
-
-        try {
-            value = variableResolver.resolveVariable(getFacesContext(), null);
-             fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        } 
-        
-        try {
-            value = variableResolver.resolveVariable(null, "foo");
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        } 
-
-        try {
-            value = variableResolver.resolveVariable(null, null);
-            fail("Should have thrown NullPointerException");
-        } catch (NullPointerException e) {
-            ; // Expected result
-        } 
-
-    }
-
-
-    /**
-     * This test verifies that if the variable resolver does not find a
-     * managed bean it tries to instantiate it if it was added to the
-     * application's managed bean factory list.
-     */
-    public void testManagedBean() throws Exception {
-        String beanName = "com.sun.faces.TestBean";
-
-        ManagedBeanInfo beanInfo = new ManagedBeanInfo(beanName,
-                                                       beanName,
-                                                       "session",
-                                                       null,
-                                                       null,
-                                                       null,
-                                                       null);
-
-        ApplicationFactory aFactory = (ApplicationFactory) FactoryFinder.getFactory(
-            FactoryFinder.APPLICATION_FACTORY);
-        ApplicationImpl application = (ApplicationImpl) aFactory.getApplication();
-        ApplicationAssociate associate = ApplicationAssociate.getCurrentInstance();
-        BeanManager manager = associate.getBeanManager();
-        manager.register(beanInfo);
-
-        VariableResolver variableResolver = application.getVariableResolver();
-
-        Object result = variableResolver.resolveVariable(getFacesContext(),
-                                                         beanName);
-
-        assertTrue(result instanceof TestBean);
-    }
-
-} // end of class TestVariableResolverImpl
diff --git a/jsf-ri/test/com/sun/faces/el/impl/Bean1.java b/jsf-ri/test/com/sun/faces/el/impl/Bean1.java
deleted file mode 100644
index 9a45199..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/Bean1.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * <p>This is a test bean with a set of properties
- *
- * @author Nathan Abramson - Art Technology Group
- */
-
-public class Bean1 {
-
-    //-------------------------------------
-    // Properties
-    //-------------------------------------
-    // property boolean1
-
-    boolean mBoolean1;
-
-
-    public boolean getBoolean1() {
-        return mBoolean1;
-    }
-
-
-    public void setBoolean1(boolean pBoolean1) {
-        mBoolean1 = pBoolean1;
-    }
-
-    //-------------------------------------
-    // property byte1
-
-    byte mByte1;
-
-
-    public byte getByte1() {
-        return mByte1;
-    }
-
-
-    public void setByte1(byte pByte1) {
-        mByte1 = pByte1;
-    }
-
-    //-------------------------------------
-    // property char1
-
-    char mChar1;
-
-
-    public char getChar1() {
-        return mChar1;
-    }
-
-
-    public void setChar1(char pChar1) {
-        mChar1 = pChar1;
-    }
-
-    //-------------------------------------
-    // property short1
-
-    short mShort1;
-
-
-    public short getShort1() {
-        return mShort1;
-    }
-
-
-    public void setShort1(short pShort1) {
-        mShort1 = pShort1;
-    }
-
-    //-------------------------------------
-    // property int1
-
-    int mInt1;
-
-
-    public int getInt1() {
-        return mInt1;
-    }
-
-
-    public void setInt1(int pInt1) {
-        mInt1 = pInt1;
-    }
-
-    //-------------------------------------
-    // property long1
-
-    long mLong1;
-
-
-    public long getLong1() {
-        return mLong1;
-    }
-
-
-    public void setLong1(long pLong1) {
-        mLong1 = pLong1;
-    }
-
-    //-------------------------------------
-    // property float1
-
-    float mFloat1;
-
-
-    public float getFloat1() {
-        return mFloat1;
-    }
-
-
-    public void setFloat1(float pFloat1) {
-        mFloat1 = pFloat1;
-    }
-
-    //-------------------------------------
-    // property double1
-
-    double mDouble1;
-
-
-    public double getDouble1() {
-        return mDouble1;
-    }
-
-
-    public void setDouble1(double pDouble1) {
-        mDouble1 = pDouble1;
-    }
-
-    //-------------------------------------
-    // property boolean2
-
-    Boolean mBoolean2;
-
-
-    public Boolean getBoolean2() {
-        return mBoolean2;
-    }
-
-
-    public void setBoolean2(Boolean pBoolean2) {
-        mBoolean2 = pBoolean2;
-    }
-
-    //-------------------------------------
-    // property byte2
-
-    Byte mByte2;
-
-
-    public Byte getByte2() {
-        return mByte2;
-    }
-
-
-    public void setByte2(Byte pByte2) {
-        mByte2 = pByte2;
-    }
-
-    //-------------------------------------
-    // property char2
-
-    Character mChar2;
-
-
-    public Character getChar2() {
-        return mChar2;
-    }
-
-
-    public void setChar2(Character pChar2) {
-        mChar2 = pChar2;
-    }
-
-    //-------------------------------------
-    // property short2
-
-    Short mShort2;
-
-
-    public Short getShort2() {
-        return mShort2;
-    }
-
-
-    public void setShort2(Short pShort2) {
-        mShort2 = pShort2;
-    }
-
-    //-------------------------------------
-    // property int2
-
-    Integer mInt2;
-
-
-    public Integer getInt2() {
-        return mInt2;
-    }
-
-
-    public void setInt2(Integer pInt2) {
-        mInt2 = pInt2;
-    }
-
-    //-------------------------------------
-    // property long2
-
-    Long mLong2;
-
-
-    public Long getLong2() {
-        return mLong2;
-    }
-
-
-    public void setLong2(Long pLong2) {
-        mLong2 = pLong2;
-    }
-
-    //-------------------------------------
-    // property float2
-
-    Float mFloat2;
-
-
-    public Float getFloat2() {
-        return mFloat2;
-    }
-
-
-    public void setFloat2(Float pFloat2) {
-        mFloat2 = pFloat2;
-    }
-
-    //-------------------------------------
-    // property double2
-
-    Double mDouble2;
-
-
-    public Double getDouble2() {
-        return mDouble2;
-    }
-
-
-    public void setDouble2(Double pDouble2) {
-        mDouble2 = pDouble2;
-    }
-
-    //-------------------------------------
-    // property string1
-
-    String mString1;
-
-
-    public String getString1() {
-        return mString1;
-    }
-
-
-    public void setString1(String pString1) {
-        mString1 = pString1;
-    }
-
-    //-------------------------------------
-    // property string2
-
-    String mString2;
-
-
-    public String getString2() {
-        return mString2;
-    }
-
-
-    public void setString2(String pString2) {
-        mString2 = pString2;
-    }
-
-    //-------------------------------------
-    // property bean1
-
-    Bean1 mBean1;
-
-
-    public Bean1 getBean1() {
-        return mBean1;
-    }
-
-
-    public void setBean1(Bean1 pBean1) {
-        mBean1 = pBean1;
-    }
-
-    //-------------------------------------
-    // property bean2
-
-    Bean1 mBean2;
-
-
-    public Bean1 getBean2() {
-        return mBean2;
-    }
-
-
-    public void setBean2(Bean1 pBean2) {
-        mBean2 = pBean2;
-    }
-
-    //-------------------------------------
-    // property noGetter
-
-    String mNoGetter;
-
-
-    public void setNoGetter(String pNoGetter) {
-        mNoGetter = pNoGetter;
-    }
-
-    //-------------------------------------
-    // property errorInGetter
-
-    String mErrorInGetter;
-
-
-    public String getErrorInGetter() {
-        throw new NullPointerException("Error!");
-    }
-
-    //-------------------------------------
-    // property stringArray1
-
-    String[] mStringArray1;
-
-
-    public String[] getStringArray1() {
-        return mStringArray1;
-    }
-
-
-    public void setStringArray1(String[] pStringArray1) {
-        mStringArray1 = pStringArray1;
-    }
-
-    //-------------------------------------
-    // property list1
-
-    List mList1;
-
-
-    public List getList1() {
-        return mList1;
-    }
-
-
-    public void setList1(List pList1) {
-        mList1 = pList1;
-    }
-
-    //-------------------------------------
-    // property map1
-
-    Map mMap1;
-
-
-    public Map getMap1() {
-        return mMap1;
-    }
-
-
-    public void setMap1(Map pMap1) {
-        mMap1 = pMap1;
-    }
-
-    //-------------------------------------
-    // property indexed1
-
-    public String getIndexed1(int pIndex) {
-        return mStringArray1[pIndex];
-    }
-
-    //-------------------------------------
-    // Member variables
-    //-------------------------------------
-
-    //-------------------------------------
-    /**
-     * Constructor
-     */
-    public Bean1() {
-    }
-
-    //-------------------------------------
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/Bean2.java b/jsf-ri/test/com/sun/faces/el/impl/Bean2.java
deleted file mode 100644
index 1d86510..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/Bean2.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl;
-
-/**
- * <p>This is a test bean that holds a single String
- *
- * @author Nathan Abramson - Art Technology Group
- * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: ofung $
- */
-
-public class Bean2 {
-
-    //-------------------------------------
-    // Properties
-    //-------------------------------------
-    // property value
-
-    String mValue;
-
-
-    public String getValue() {
-        return mValue;
-    }
-
-
-    public void setValue(String pValue) {
-        mValue = pValue;
-    }
-
-    //-------------------------------------
-    // Member variables
-    //-------------------------------------
-
-    //-------------------------------------
-    /**
-     * Constructor
-     */
-    public Bean2(String pValue) {
-        mValue = pValue;
-    }
-
-
-    //-------------------------------------
-    public String toString() {
-        return ("Bean2[" + mValue + "]");
-    }
-
-    //-------------------------------------
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/Bean2Editor.java b/jsf-ri/test/com/sun/faces/el/impl/Bean2Editor.java
deleted file mode 100644
index 59ed83d..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/Bean2Editor.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl;
-
-import java.beans.PropertyEditorSupport;
-
-/**
- * PropertyEditor for parsing Bean2
- *
- * @author Nathan Abramson - Art Technology Group
- */
-
-public class Bean2Editor
-    extends PropertyEditorSupport {
-
-    //-------------------------------------
-    public void setAsText(String pText)
-        throws IllegalArgumentException {
-        if ("badvalue".equals(pText)) {
-            throw new IllegalArgumentException("Bad value " + pText);
-        } else {
-            setValue(new Bean2(pText));
-        }
-    }
-
-    //-------------------------------------
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/PageContextImpl.jsp12 b/jsf-ri/test/com/sun/faces/el/impl/PageContextImpl.jsp12
deleted file mode 100644
index 1561018..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/PageContextImpl.jsp12
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.el.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.jsp.PageContext;
-import java.util.Enumeration;
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletRequest;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.http.HttpSession;
-import java.util.Collections;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletConfig;
-import javax.servlet.Servlet;
-
-/**
- *
- * <p>This is a "dummy" implementation of PageContext whose only
- * purpose is to serve the attribute getter/setter API's.
- * 
- * @author Nathan Abramson - Art Technology Group
- * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: eburns $
- **/
-
-public class PageContextImpl
-  extends PageContext
-{
-  //-------------------------------------
-  // Properties
-  //-------------------------------------
-
-  //-------------------------------------
-  // Member variables
-  //-------------------------------------
-
-  Map mPage = Collections.synchronizedMap (new HashMap ());
-  Map mRequest = Collections.synchronizedMap (new HashMap ());
-  Map mSession = Collections.synchronizedMap (new HashMap ());
-  Map mApp = Collections.synchronizedMap (new HashMap ());
-
-  //-------------------------------------
-  /**
-   *
-   * Constructor
-   **/
-  public PageContextImpl ()
-  {
-  }
-
-  //-------------------------------------
-  // PageContext methods
-  //-------------------------------------
-  public void initialize (Servlet servlet,
-			  ServletRequest request,
-			  ServletResponse response,
-			  String errorPageURL,
-			  boolean needSession,
-			  int bufferSize,
-			  boolean autoFlush)
-  {
-  }
-
-  //-------------------------------------
-  public void release ()
-  {
-  }
-
-  //-------------------------------------
-  public void setAttribute (String name,
-			    Object attribute)
-  {
-    mPage.put (name, attribute);
-  }
-
-  //-------------------------------------
-  public void setAttribute (String name,
-			    Object attribute,
-			    int scope)
-  {
-    switch (scope) {
-    case PAGE_SCOPE:
-      mPage.put (name, attribute);
-      break;
-    case REQUEST_SCOPE:
-      mRequest.put (name, attribute);
-      break;
-    case SESSION_SCOPE:
-      mSession.put (name, attribute);
-      break;
-    case APPLICATION_SCOPE:
-      mApp.put (name, attribute);
-      break;
-    default:
-      throw new IllegalArgumentException  ("Bad scope " + scope);
-    }
-  }
-
-  //-------------------------------------
-  public Object getAttribute (String name)
-  {
-    return mPage.get (name);
-  }
-
-  //-------------------------------------
-  public Object getAttribute (String name,
-			      int scope)
-  {
-    switch (scope) {
-    case PAGE_SCOPE:
-      return mPage.get (name);
-    case REQUEST_SCOPE:
-      return mRequest.get (name);
-    case SESSION_SCOPE:
-      return mSession.get (name);
-    case APPLICATION_SCOPE:
-      return mApp.get (name);
-    default:
-      throw new IllegalArgumentException  ("Bad scope " + scope);
-    }
-  }
-
-  //-------------------------------------
-  public Object findAttribute (String name)
-  {
-    if (mPage.containsKey (name)) {
-      return mPage.get (name);
-    }
-    else if (mRequest.containsKey (name)) {
-      return mRequest.get (name);
-    }
-    else if (mSession.containsKey (name)) {
-      return mSession.get (name);
-    }
-    else if (mApp.containsKey (name)) {
-      return mApp.get (name);
-    }
-    else {
-      return null;
-    }
-  }
-
-  //-------------------------------------
-  public void removeAttribute (String name)
-  {
-    if (mPage.containsKey (name)) {
-      mPage.remove (name);
-    }
-    else if (mRequest.containsKey (name)) {
-      mRequest.remove (name);
-    }
-    else if (mSession.containsKey (name)) {
-      mSession.remove (name);
-    }
-    else if (mApp.containsKey (name)) {
-      mApp.remove (name);
-    }
-  }
-
-  //-------------------------------------
-  public void removeAttribute (String name,
-			       int scope)
-  {
-    switch (scope) {
-    case PAGE_SCOPE:
-      mPage.remove (name);
-      break;
-    case REQUEST_SCOPE:
-      mRequest.remove (name);
-      break;
-    case SESSION_SCOPE:
-      mSession.remove (name);
-      break;
-    case APPLICATION_SCOPE:
-      mApp.remove (name);
-      break;
-    default:
-      throw new IllegalArgumentException  ("Bad scope " + scope);
-    }
-  }
-
-  //-------------------------------------
-  public int getAttributesScope (String name)
-  {
-    if (mPage.containsKey (name)) {
-      return PAGE_SCOPE;
-    }
-    else if (mRequest.containsKey (name)) {
-      return REQUEST_SCOPE;
-    }
-    else if (mSession.containsKey (name)) {
-      return SESSION_SCOPE;
-    }
-    else if (mApp.containsKey (name)) {
-      return APPLICATION_SCOPE;
-    }
-    else {
-      return 0;
-    }
-  }
-
-  //-------------------------------------
-  public Enumeration getAttributeNamesInScope (int scope)
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public JspWriter getOut ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public HttpSession getSession ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public Object getPage ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletRequest getRequest ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletResponse getResponse ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public Exception getException ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletConfig getServletConfig ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletContext getServletContext ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public void forward (String path)
-  {
-  }
-
-  //-------------------------------------
-  public void include (String path)
-  {
-  }
-
-  //-------------------------------------
-  public void handlePageException (Exception exc)
-  {
-  }
-
-  //-------------------------------------
-  public void handlePageException (Throwable exc)
-  {
-  }
-
-  //-------------------------------------
-  
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/PageContextImpl.jsp2 b/jsf-ri/test/com/sun/faces/el/impl/PageContextImpl.jsp2
deleted file mode 100644
index 66d03e7..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/PageContextImpl.jsp2
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.jsp.PageContext;
-import java.util.Enumeration;
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletRequest;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.el.ExpressionEvaluator;
-import javax.servlet.jsp.el.VariableResolver;
-import javax.servlet.http.HttpSession;
-import java.util.Collections;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletConfig;
-import javax.servlet.Servlet;
-
-/**
- *
- * <p>This is a "dummy" implementation of PageContext whose only
- * purpose is to serve the attribute getter/setter API's.
- * 
- * @author Nathan Abramson - Art Technology Group
- * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: eburns $
- **/
-
-public class PageContextImpl
-  extends PageContext
-{
-  //-------------------------------------
-  // Properties
-  //-------------------------------------
-
-  //-------------------------------------
-  // Member variables
-  //-------------------------------------
-
-  Map mPage = Collections.synchronizedMap (new HashMap ());
-  Map mRequest = Collections.synchronizedMap (new HashMap ());
-  Map mSession = Collections.synchronizedMap (new HashMap ());
-  Map mApp = Collections.synchronizedMap (new HashMap ());
-
-  //-------------------------------------
-  /**
-   *
-   * Constructor
-   **/
-  public PageContextImpl ()
-  {
-  }
-
-  //-------------------------------------
-  // PageContext methods
-  //-------------------------------------
-  public void initialize (Servlet servlet,
-			  ServletRequest request,
-			  ServletResponse response,
-			  String errorPageURL,
-			  boolean needSession,
-			  int bufferSize,
-			  boolean autoFlush)
-  {
-  }
-
-  //-------------------------------------
-  public void release ()
-  {
-  }
-
-  //-------------------------------------
-  public void setAttribute (String name,
-			    Object attribute)
-  {
-    mPage.put (name, attribute);
-  }
-
-  //-------------------------------------
-  public void setAttribute (String name,
-			    Object attribute,
-			    int scope)
-  {
-    switch (scope) {
-    case PAGE_SCOPE:
-      mPage.put (name, attribute);
-      break;
-    case REQUEST_SCOPE:
-      mRequest.put (name, attribute);
-      break;
-    case SESSION_SCOPE:
-      mSession.put (name, attribute);
-      break;
-    case APPLICATION_SCOPE:
-      mApp.put (name, attribute);
-      break;
-    default:
-      throw new IllegalArgumentException  ("Bad scope " + scope);
-    }
-  }
-
-  //-------------------------------------
-  public Object getAttribute (String name)
-  {
-    return mPage.get (name);
-  }
-
-  //-------------------------------------
-  public Object getAttribute (String name,
-			      int scope)
-  {
-    switch (scope) {
-    case PAGE_SCOPE:
-      return mPage.get (name);
-    case REQUEST_SCOPE:
-      return mRequest.get (name);
-    case SESSION_SCOPE:
-      return mSession.get (name);
-    case APPLICATION_SCOPE:
-      return mApp.get (name);
-    default:
-      throw new IllegalArgumentException  ("Bad scope " + scope);
-    }
-  }
-
-  //-------------------------------------
-  public Object findAttribute (String name)
-  {
-    if (mPage.containsKey (name)) {
-      return mPage.get (name);
-    }
-    else if (mRequest.containsKey (name)) {
-      return mRequest.get (name);
-    }
-    else if (mSession.containsKey (name)) {
-      return mSession.get (name);
-    }
-    else if (mApp.containsKey (name)) {
-      return mApp.get (name);
-    }
-    else {
-      return null;
-    }
-  }
-
-  //-------------------------------------
-  public void removeAttribute (String name)
-  {
-    if (mPage.containsKey (name)) {
-      mPage.remove (name);
-    }
-    else if (mRequest.containsKey (name)) {
-      mRequest.remove (name);
-    }
-    else if (mSession.containsKey (name)) {
-      mSession.remove (name);
-    }
-    else if (mApp.containsKey (name)) {
-      mApp.remove (name);
-    }
-  }
-
-  //-------------------------------------
-  public void removeAttribute (String name,
-			       int scope)
-  {
-    switch (scope) {
-    case PAGE_SCOPE:
-      mPage.remove (name);
-      break;
-    case REQUEST_SCOPE:
-      mRequest.remove (name);
-      break;
-    case SESSION_SCOPE:
-      mSession.remove (name);
-      break;
-    case APPLICATION_SCOPE:
-      mApp.remove (name);
-      break;
-    default:
-      throw new IllegalArgumentException  ("Bad scope " + scope);
-    }
-  }
-
-  //-------------------------------------
-  public int getAttributesScope (String name)
-  {
-    if (mPage.containsKey (name)) {
-      return PAGE_SCOPE;
-    }
-    else if (mRequest.containsKey (name)) {
-      return REQUEST_SCOPE;
-    }
-    else if (mSession.containsKey (name)) {
-      return SESSION_SCOPE;
-    }
-    else if (mApp.containsKey (name)) {
-      return APPLICATION_SCOPE;
-    }
-    else {
-      return 0;
-    }
-  }
-
-  //-------------------------------------
-  public Enumeration getAttributeNamesInScope (int scope)
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public JspWriter getOut ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public HttpSession getSession ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public Object getPage ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletRequest getRequest ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletResponse getResponse ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public Exception getException ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletConfig getServletConfig ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public ServletContext getServletContext ()
-  {
-    return null;
-  }
-
-  //-------------------------------------
-  public void forward (String path)
-  {
-  }
-
-  //-------------------------------------
-  public void include (String path)
-  {
-  }
-
-  //-------------------------------------
-  public void handlePageException (Exception exc)
-  {
-  }
-
-  //-------------------------------------
-  public void handlePageException (Throwable exc)
-  {
-  }
-
-  //-------------------------------------
-  
-  // Since JSP 2.0
-  public void include(java.lang.String relativeUrlPath, boolean flush) {}
-  public ExpressionEvaluator getExpressionEvaluator() { return null; }
-  public VariableResolver getVariableResolver() { return null; }  
-  
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/TestELImpl.java b/jsf-ri/test/com/sun/faces/el/impl/TestELImpl.java
deleted file mode 100644
index f365622..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/TestELImpl.java
+++ /dev/null
@@ -1,720 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- * 
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.context.ExternalContext;
-import javax.faces.el.ValueBinding;
-
-import com.sun.faces.el.impl.beans.Factory;
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-/**
- * @author jhook
- */
-public class TestELImpl extends ServletFacesTestCase
-{
-    /**
-     *  
-     */
-    public TestELImpl()
-    {
-        super();
-    }
-
-    /**
-     * @param name
-     */
-    public TestELImpl(String name)
-    {
-        super(name);
-    }
-
-    protected Object evaluate(String ref) throws Exception
-    {
-        ValueBinding vb = this.getFacesContext().getApplication().createValueBinding(ref);
-        return vb.getValue(this.getFacesContext());
-    }
-
-    public void testELEvaluation() throws Exception
-    {
-        /* setup our test date */
-        Bean1 b = this.createBean1();
-        getExternalContext().getRequestMap().put("bean1a", b);
-
-        getExternalContext().getSessionMap().put("val1c", "session-scoped1");
-        getExternalContext().getRequestMap().put("val1b", "request-scoped1");
-        getExternalContext().getApplicationMap().put("val1d", "app-scoped1");
-        
-        Map m = new HashMap();
-        m.put("emptyArray", new Object[0]);
-        m.put("nonemptyArray", new Object[]
-        { "abc" });
-        m.put("emptyList", new ArrayList());
-        {
-            List l = new ArrayList();
-            l.add("hello"); 
-            m.put("nonemptyList", l);
-        }
-        m.put("emptyMap", new HashMap());
-        {
-            Map m2 = new HashMap();
-            m2.put("a", "a");
-            m.put("nonemptyMap", m2);
-        }
-        m.put("emptySet", new HashSet());
-        {
-            Set s = new HashSet();
-            s.add("hello");
-            m.put("nonemptySet", s);
-        }
-        getExternalContext().getRequestMap().put("emptyTests", m);
-
-        getExternalContext().getRequestMap().put("pbean1",
-                Factory.createBean1());
-        getExternalContext().getRequestMap().put("pbean2",
-                Factory.createBean2());
-        getExternalContext().getRequestMap().put("pbean3",
-                Factory.createBean3());
-        getExternalContext().getRequestMap().put("pbean4",
-                Factory.createBean4());
-        getExternalContext().getRequestMap().put("pbean5",
-                Factory.createBean5());
-        getExternalContext().getRequestMap().put("pbean6",
-                Factory.createBean6());
-        getExternalContext().getRequestMap().put("pbean7",
-                Factory.createBean7());
-
-        /* testing mixture of strings and expressions */
-        evaluateTest("abc", "abc");
-        evaluateTest("#{ 3}", new Long(3));
-        evaluateTestFailure("a#{");
-        evaluateTest("a#{ 5 }", "a5");
-        evaluateTest("#{ 3 }b", "3b");
-        evaluateTest("#{ 1 }#{ 2 }", "12");
-        evaluateTest("abc #{ 1} #{ 2} def", "abc 1 2 def");
-
-        /* testing values that end with or contain "#" */
-        evaluateTest("#", "#");
-        
-        evaluateTest("\\#", "#");
-        evaluateTest("#  ", "#  ");
-        evaluateTest("test#", "test#");
-        evaluateTest("#test", "#test");
-        evaluateTest("test#test", "test#test");
-        evaluateTest("test###", "test###");
-        evaluateTest("test###{ 34 }", "test##34");
-        evaluateTest("test###{ 34 }##", "test##34##");
-        evaluateTest("test##{ 34 }", "test#34");
-        evaluateTest("##{ 34 }", "#34");
-        evaluateTest("##", "##");
-        evaluateTest("test##", "test##");
-        evaluateTest("test##test", "test##test");
-        evaluateTest("#{ 34 }##{ 34 }", "34#34");
-
-        /* basic literals */
-        evaluateTest("#{1}", new Long(1));
-        evaluateTest("#{-12}", new Long(-12));
-        evaluateTest("#{true}", Boolean.TRUE);
-        evaluateTest("#{false}", Boolean.FALSE);
-        evaluateTest("#{null}", null);
-        evaluateTest("#{4.2}", new Double(4.2));
-        evaluateTest("#{-21.3}", new Double(-21.3));
-        evaluateTest("#{4.}", new Double(4.0));
-        evaluateTest("#{.21}", new Double(0.21));
-        evaluateTest("#{3e-1}", new Double(0.3));
-        evaluateTest("#{.2222222222}", new Double(0.2222222222));
-
-        /* basic relationals between literals */
-        evaluateTest("#{1 < 2}", Boolean.TRUE);
-        evaluateTest("#{1 > 2}", Boolean.FALSE);
-        evaluateTest("#{1 >= 2}", Boolean.FALSE);
-        evaluateTest("#{1 <= 2}", Boolean.TRUE);
-        evaluateTest("#{1 == 2}", Boolean.FALSE);
-        evaluateTest("#{1 != 2}", Boolean.TRUE);
-        evaluateTest("#{3 >= 3}", Boolean.TRUE);
-        evaluateTest("#{3 <= 3}", Boolean.TRUE);
-        evaluateTest("#{3 == 3}", Boolean.TRUE);
-        evaluateTest("#{3 < 3}", Boolean.FALSE);
-        evaluateTest("#{3 > 3}", Boolean.FALSE);
-        evaluateTest("#{3 != 3}", Boolean.FALSE);
-
-        // PENDING (visvan) check with Kinman/Jacob
-        /* relationals between booleans         
-        evaluateTestFailure("#{false < true}");
-        evaluateTestFailure("#{false > true}");
-        evaluateTest("#{true >= true}", Boolean.TRUE);
-        evaluateTest("#{true <= true}", Boolean.TRUE);
-        evaluateTest("#{true == true}", Boolean.TRUE);
-        evaluateTest("#{true != true}", Boolean.FALSE); */
-
-        /* looking up objects in scopes */
-        evaluateTest("#{requestScope.val1b}", "request-scoped1");
-        evaluateTest("#{sessionScope.val1b}", null);
-        evaluateTest("#{applicationScope.val1b}", null);
-        evaluateTest("#{val1b}", "request-scoped1");
-
-        evaluateTest("#{requestScope.val1c}", null);
-        evaluateTest("#{sessionScope.val1c}", "session-scoped1");
-        evaluateTest("#{applicationScope.val1c}", null);
-        evaluateTest("#{val1c}", "session-scoped1");
-
-        evaluateTest("#{requestScope.val1d}", null);
-        evaluateTest("#{sessionScope.val1d}", null);
-        evaluateTest("#{applicationScope.val1d}", "app-scoped1");
-        evaluateTest("#{val1d}", "app-scoped1");
-
-        /* accessing properties */
-        evaluateTest("#{bean1a.int1}", new Integer(b.getInt1()));
-        evaluateTest("#{bean1a.boolean1}", Boolean.valueOf(b.getBoolean1()));
-        evaluateTest("#{bean1a.string1}", b.getString1());
-        evaluateTest("#{bean1a.bean1.int2}", b.getBean1().getInt2());
-        evaluateTest("#{bean1a.bean1.bean2.string2}", b.getBean1().getBean2()
-                .getString2());
-        evaluateTest("#{bean1a.byte1}", new Byte(b.getByte1()));
-        evaluateTest("#{bean1a.char1}", new Character(b.getChar1()));
-        evaluateTest("#{bean1a.short1}", new Short(b.getShort1()));
-        evaluateTest("#{bean1a.long1}", new Long(b.getLong1()));
-        evaluateTest("#{bean1a.float1}", new Float(b.getFloat1()));
-        evaluateTest("#{bean1a.double1}", new Double(b.getDouble1()));
-
-        /* test the entire relational comparison type promotion matrix */
-        evaluateTest("#{bean1a.byte1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.byte1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.byte1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.byte1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.byte1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.byte1 < bean1a.float1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.byte1 < bean1a.double1}", Boolean.TRUE);
-
-        evaluateTest("#{bean1a.char1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.char1 < bean1a.char1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.char1 < bean1a.short1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.char1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.char1 < bean1a.long1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.char1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.char1 < bean1a.double1}", Boolean.FALSE);
-
-        evaluateTest("#{bean1a.short1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.short1 < bean1a.char1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.short1 < bean1a.short1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.short1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.short1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.short1 < bean1a.long1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.short1 < bean1a.double1}", Boolean.FALSE);
-
-        evaluateTest("#{bean1a.int1 < bean1a.byte1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.int1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.int1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.int1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.int1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.int1 < bean1a.float1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.int1 < bean1a.double1}", Boolean.TRUE);
-
-        evaluateTest("#{bean1a.long1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.long1 < bean1a.char1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.long1 < bean1a.short1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.long1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.long1 < bean1a.long1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.long1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.long1 < bean1a.double1}", Boolean.FALSE);
-
-        evaluateTest("#{bean1a.float1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.float1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.float1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.float1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.float1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.float1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.float1 < bean1a.double1}", Boolean.TRUE);
-
-        evaluateTest("#{bean1a.double1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.double1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.double1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.double1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.double1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("#{bean1a.double1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("#{bean1a.double1 < bean1a.double1}", Boolean.FALSE);
-
-        /* test other relational comparison rules */
-        evaluateTest("#{null == null}", Boolean.TRUE);
-        evaluateTest("#{noSuchAttribute == noSuchAttribute}", Boolean.TRUE);
-        evaluateTest("#{noSuchAttribute == null}", Boolean.TRUE);
-        evaluateTest("#{null == noSuchAttribute}", Boolean.TRUE);
-        evaluateTest("#{bean1a == null}", Boolean.FALSE);
-        evaluateTest("#{null == bean1a}", Boolean.FALSE);
-        evaluateTest("#{bean1a == bean1a}", Boolean.TRUE);
-        // JSF1.2 BI: This test used to fail with JSF 1.1 EL. With unified EL
-        // the first portion of the expression is coerced to a string, so
-        // the expression evaluates to true.
-        evaluateTest("#{bean1a > \"hello\"}", Boolean.FALSE);
-        evaluateTestFailure("#{bean1a.bean1 < 14}");
-        evaluateTest("#{bean1a.bean1 == \"hello\"}", Boolean.FALSE);
-
-        /* test String comparisons */
-        evaluateTest("#{bean1a.string1 == \"hello\"}", Boolean.TRUE);
-        evaluateTest("#{bean1a.string1 != \"hello\"}", Boolean.FALSE);
-        evaluateTest("#{bean1a.string1 == \"goodbye\"}", Boolean.FALSE);
-        evaluateTest("#{bean1a.string1 != \"goodbye\"}", Boolean.TRUE);
-        evaluateTest("#{bean1a.string1 > \"goodbye\"}", Boolean.TRUE);
-        evaluateTest("#{\"hello\" == bean1a.string1}", Boolean.TRUE);
-        evaluateTest("#{\"goodbye\" > bean1a.string1}", Boolean.FALSE);
-
-        /* test errors in property traversal */
-        evaluateTest("#{noSuchAttribute.abc}", null);
-        evaluateTest("#{bean1a.bean2.byte1}", null);
-        evaluateTestFailure("#{bean1a.noProperty}");
-        evaluateTestFailure("#{bean1a.noGetter}");
-        evaluateTestFailure("#{bean1a.errorInGetter}");
-        evaluateTest("#{bean1a.bean2.string2}", null);
-
-        /* test accessing public properties from private classes */
-        evaluateTest("#{pbean1.value}", "got the value");
-        evaluateTest("#{pbean2.value}", "got the value");
-        evaluateTest("#{pbean3.value}", "got the value");
-        evaluateTest("#{pbean4.value}", "got the value");
-        evaluateTest("#{pbean5.value}", "got the value");
-        evaluateTest("#{pbean6.value}", "got the value");
-        evaluateTest("#{pbean7.value}", "got the value");
-
-        /* test reserved words as identifiers */
-        evaluateTestFailure("#{and}");
-        evaluateTestFailure("#{or}");
-        evaluateTestFailure("#{not}");
-        evaluateTestFailure("#{eq}");
-        evaluateTestFailure("#{ne}");
-        evaluateTestFailure("#{lt}");
-        evaluateTestFailure("#{gt}");
-        evaluateTestFailure("#{le}");
-        evaluateTestFailure("#{ge}");
-        evaluateTest("#{true}", Boolean.TRUE);
-        evaluateTest("#{false}", Boolean.FALSE);
-        evaluateTest("#{null}", null);
-
-        /* test reserved words as property names */
-        evaluateTestFailure("#{bean1a.and}");
-        evaluateTestFailure("#{bean1a.or}");
-        evaluateTestFailure("#{bean1a.not}"); 
-        evaluateTestFailure("#{bean1a.eq}");
-        evaluateTestFailure("#{bean1a.ne}");
-        evaluateTestFailure("#{bean1a.lt}");
-        evaluateTestFailure("#{bean1a.gt}");
-        evaluateTestFailure("#{bean1a.le}");
-        evaluateTestFailure("#{bean1a.ge}");
-        evaluateTestFailure("#{bean1a.instanceof}");
-        evaluateTestFailure("#{bean1a.page}");
-        evaluateTestFailure("#{bean1a.request}");
-        evaluateTestFailure("#{bean1a.session}");
-        evaluateTestFailure("#{bean1a.application}");
-        evaluateTestFailure("#{bean1a.true}");
-        evaluateTestFailure("#{bean1a.false}");
-        evaluateTestFailure("#{bean1a.null}");
-
-        /* test arithmetic */
-        evaluateTest("#{3+5}", new Long(8));
-        evaluateTest("#{3-5}", new Long(-2));
-        evaluateTest("#{3/5}", new Double(0.6));
-        evaluateTest("#{3*5}", new Long(15));
-        evaluateTest("#{3*5.0}", new Double(15.0));
-        evaluateTest("#{3.0*5}", new Double(15.0));
-        evaluateTest("#{3.0*5.0}", new Double(15.0));
-        evaluateTest("#{225 % 17}", new Long(4));
-        evaluateTest("#{ 1 + 2 + 3 * 5 + 6}", new Long(24));
-        evaluateTest("#{ 1 + (2 + 3) * 5 + 6}", new Long(32));
-
-        /* test logical operators */
-        evaluateTest("#{ true}", Boolean.TRUE);
-        evaluateTest("#{ not true}", Boolean.FALSE);
-        evaluateTest("#{ not false}", Boolean.TRUE);
-        evaluateTest("#{ not not true}", Boolean.TRUE);
-        evaluateTest("#{ not not false}", Boolean.FALSE);
-        evaluateTest("#{ true and false}", Boolean.FALSE);
-        evaluateTest("#{ true and true}", Boolean.TRUE);
-        evaluateTest("#{ false and true}", Boolean.FALSE);
-        evaluateTest("#{ false and false}", Boolean.FALSE);
-        evaluateTest("#{ true or false}", Boolean.TRUE);
-        evaluateTest("#{ true or true}", Boolean.TRUE);
-        evaluateTest("#{ false or true}", Boolean.TRUE);
-        evaluateTest("#{ false or false}", Boolean.FALSE);
-        evaluateTest("#{ false or false or false or true and false}",
-                Boolean.FALSE);
-        evaluateTest("#{ false or false or false or true and false or true}",
-                Boolean.TRUE);
-
-        /* test indexed access operator */
-        evaluateTest("#{ bean1a[\"double1\"] }", new Double(b.getDouble1()));
-        evaluateTest("#{ bean1a[\"double1\"].class }", Double.class);
-        evaluateTest("#{ bean1a.stringArray1[-1]}", null);
-        evaluateTest("#{ bean1a.stringArray1[0]}", b.getStringArray1()[0]);
-        evaluateTest("#{ bean1a.stringArray1[1]}", b.getStringArray1()[1]);
-        evaluateTest("#{ bean1a.stringArray1[2]}", b.getStringArray1()[2]);
-        evaluateTest("#{ bean1a.stringArray1[3]}", b.getStringArray1()[3]);
-        evaluateTest("#{ bean1a.stringArray1[4]}", null);
-
-        
-        /* Test as list accessor */
-        evaluateTest("#{ bean1a.list1 [0] }", b.getList1().get(0));
-        evaluateTest("#{ bean1a.list1 [1] }", b.getList1().get(1));
-        evaluateTest("#{ bean1a.list1 [2][2] }", "string3");
-
-        
-        /* Test as indexed property accessor */
-        evaluateTestFailure("#{ bean1a.indexed1[-1]}");
-        evaluateTestFailure("#{ bean1a.indexed1[0]}");
-        evaluateTestFailure("#{ bean1a.indexed1[1]}");
-        evaluateTestFailure("#{ bean1a.indexed1[2]}");
-        evaluateTestFailure("#{ bean1a.indexed1[3]}");
-        evaluateTestFailure("#{ bean1a.indexed1[4]}");
-
-        
-        /* Test as map accessor */
-        evaluateTest("#{ bean1a.map1.noKey }", null);
-        evaluateTest("#{ bean1a.map1.key1 }", b.getMap1().get("key1"));
-        evaluateTest("#{ bean1a.map1 [\"key1\"] }", b.getMap1().get("key1"));
-        evaluateTest("#{ bean1a.map1 [14] }", "value3");
-        evaluateTest("#{ bean1a.map1 [2 * 7] }", "value3");
-        evaluateTest("#{ bean1a.map1.recurse.list1[0] }", new Integer(14));
-
-        
-        /* Test UIComponent as bean
-        evaluateTest("#{view.rendered}", Boolean.TRUE);
-        evaluateTest("#{view.attributes.rendered}", Boolean.TRUE);
-        evaluateTest("#{view.children[0].value}", "inputValue");
-        evaluateTest("#{view.children[0].rendered}", Boolean.TRUE);
-         */
-        
-        /* test String concatenation */
-        evaluateTestFailure("#{ \"a\" + \"bcd\" }");
-        evaluateTestFailure("#{ \"a\" + (4*3) }");
-        evaluateTestFailure("#{ bean1a.map1 [\"key\" + (5-4)] }");
-
-        
-        /* test String comparisons */
-        evaluateTest("#{ \"30\" < \"4\" }", Boolean.TRUE);
-        evaluateTest("#{ 30 < \"4\" }", Boolean.FALSE);
-        evaluateTest("#{ 30 > \"4\" }", Boolean.TRUE);
-        evaluateTest("#{ \"0004\" == \"4\" }", Boolean.FALSE);
-        
-        
-        /* test relational comparison with alternate symbols */
-        evaluateTest("#{ 4 eq 3}", Boolean.FALSE);
-        evaluateTest("#{ 4 ne 3}", Boolean.TRUE);
-        evaluateTest("#{ 4 eq 4}", Boolean.TRUE);
-        evaluateTest("#{ 4 ne 4}", Boolean.FALSE);
-        evaluateTest("#{ 4 lt 3}", Boolean.FALSE);
-        evaluateTest("#{ 4 gt 3}", Boolean.TRUE);
-        evaluateTest("#{ 4 le 3}", Boolean.FALSE);
-        evaluateTest("#{ 4 ge 3}", Boolean.TRUE);
-        evaluateTest("#{ 4 le 4}", Boolean.TRUE);
-        evaluateTest("#{ 4 ge 4}", Boolean.TRUE);
-        
-        
-        /* test expressions on the left side of a value suffix */
-        evaluateTest("#{(3).class}", Long.class);
-        evaluateTest("#{(bean1a.map1)[\"key1\"]}", "value1");
-        
-        /* test String/boolean logical operators */
-        evaluateTest("#{'true' and false}", Boolean.FALSE);
-        evaluateTest("#{'true' or true}", Boolean.TRUE);
-        evaluateTest("#{false and 'true'}", Boolean.FALSE);
-        evaluateTest("#{false or 'true'}", Boolean.TRUE);
-        
-        
-        /* test empty operator */
-        evaluateTest("#{ empty \"A\"}", Boolean.FALSE);
-        evaluateTest("#{ empty \"\" }", Boolean.TRUE);
-        evaluateTest("#{ empty null }", Boolean.TRUE);
-        evaluateTest("#{ empty false}", Boolean.FALSE);
-        evaluateTest("#{ empty 0}", Boolean.FALSE);
-        evaluateTest("#{ not empty 0}", Boolean.TRUE);
-        evaluateTest("#{ not empty empty 0}", Boolean.TRUE);
-        evaluateTest("#{ empty emptyTests.emptyArray }", Boolean.TRUE);
-        evaluateTest("#{ empty emptyTests.nonemptyArray }", Boolean.FALSE);
-        evaluateTest("#{ empty emptyTests.emptyList }", Boolean.TRUE);
-        evaluateTest("#{ empty emptyTests.nonemptyList }", Boolean.FALSE);
-        evaluateTest("#{ empty emptyTests.emptyMap }", Boolean.TRUE);
-        evaluateTest("#{ empty emptyTests.nonemptyMap }", Boolean.FALSE);
-        evaluateTest("#{ empty emptyTests.emptySet }", Boolean.TRUE);
-        evaluateTest("#{ empty emptyTests.nonemptySet }", Boolean.FALSE);
-        
-        
-        /* test String arithmetic */
-        evaluateTest("#{ \"6\" / \"3\" }", new Double(2.0));
-        evaluateTest("#{ 3 + \"4\" }", new Long(7));
-        evaluateTest("#{ \"4\" + 3 }", new Long(7));
-        evaluateTest("#{ 3 + \"4.5\" }", new Double(7.5));
-        evaluateTest("#{ \"4.5\" + 3 }", new Double(7.5));
-        evaluateTest("#{ 3.0 + 6.0}", new Double(9.0));
-        evaluateTest("#{ 31121.0 * 61553.0 }", new Double(1.915590913E9));
-        evaluateTest("#{ 31121 * 61553 }", new Long(1915590913));
-        evaluateTest("#{ 65536 * 65536 * 65536 * 32759 }", new Long("9220838762064379904"));
-        evaluateTest("#{ 9220838762064379904.0 - 9220838762064379900.0 }", new Double(0.0));
-        evaluateTest("#{ 9220838762064379904 - 9220838762064379900 }", new Long(4));
-        
-        
-        /* test relational operators involving null */
-        evaluateTest("#{ null == null }", Boolean.TRUE);
-        evaluateTest("#{ null != null }", Boolean.FALSE);
-        evaluateTest("#{ null > null }", Boolean.FALSE);
-        evaluateTest("#{ null < null }", Boolean.FALSE);
-        evaluateTest("#{ null >= null }", Boolean.TRUE);
-        evaluateTest("#{ null <= null }", Boolean.TRUE);
-        evaluateTest("#{ null == 3 }", Boolean.FALSE);
-        evaluateTest("#{ null != 3 }", Boolean.TRUE);
-        evaluateTest("#{ null > 3 }", Boolean.FALSE);
-        evaluateTest("#{ null < 3 }", Boolean.FALSE);
-        evaluateTest("#{ null >= 3 }", Boolean.FALSE);
-        evaluateTest("#{ null <= 3 }", Boolean.FALSE);
-        evaluateTest("#{ 3 == null }", Boolean.FALSE);
-        evaluateTest("#{ 3 != null }", Boolean.TRUE);
-        evaluateTest("#{ 3 > null }", Boolean.FALSE);
-        evaluateTest("#{ 3 < null }", Boolean.FALSE);
-        evaluateTest("#{ 3 >= null }", Boolean.FALSE);
-        evaluateTest("#{ 3 <= null }", Boolean.FALSE);
-        evaluateTest("#{ null == \"\" }", Boolean.FALSE);
-        evaluateTest("#{ null != \"\" }", Boolean.TRUE);
-        evaluateTest("#{ \"\" == null }", Boolean.FALSE);
-        evaluateTest("#{ \"\" != null }", Boolean.TRUE);
-        
-        
-        /* arithmetic operators involving Strings */
-        evaluateTest("#{ 4 + 3 }", new Long(7));
-        evaluateTest("#{ 4.0 + 3 }", new Double(7.0));
-        evaluateTest("#{ 4 + 3.0 }", new Double(7.0));
-        evaluateTest("#{ 4.0 + 3.0 }", new Double(7.0));
-        evaluateTest("#{ \"4\" + 3 }", new Long(7));
-        evaluateTest("#{ \"4.0\" + 3 }", new Double(7.0));
-        evaluateTest("#{ \"4\" + 3.0 }", new Double(7.0));
-        evaluateTest("#{ \"4.0\" + 3.0 }", new Double(7.0));
-        evaluateTest("#{ 4 + \"3\" }", new Long(7));
-        evaluateTest("#{ 4.0 + \"3\" }", new Double(7.0));
-        evaluateTest("#{ 4 + \"3.0\" }", new Double(7.0));
-        evaluateTest("#{ 4.0 + \"3.0\" }", new Double(7.0));
-        evaluateTest("#{ \"4\" + \"3\" }", new Long(7));
-        evaluateTest("#{ \"4.0\" + \"3\" }", new Double(7.0));
-        evaluateTest("#{ \"4\" + \"3.0\" }", new Double(7.0));
-        evaluateTest("#{ \"4.0\" + \"3.0\" }", new Double(7.0));
-        
-        evaluateTest("#{ 4 - 3 }", new Long(1));
-        evaluateTest("#{ 4.0 - 3 }", new Double(1.0));
-        evaluateTest("#{ 4 - 3.0 }", new Double(1.0));
-        evaluateTest("#{ 4.0 - 3.0 }", new Double(1.0));
-        evaluateTest("#{ \"4\" - 3 }", new Long(1));
-        evaluateTest("#{ \"4.0\" - 3 }", new Double(1.0));
-        evaluateTest("#{ \"4\" - 3.0 }", new Double(1.0));
-        evaluateTest("#{ \"4.0\" - 3.0 }", new Double(1.0));
-        evaluateTest("#{ 4 - \"3\" }", new Long(1));
-        evaluateTest("#{ 4.0 - \"3\" }", new Double(1.0));
-        evaluateTest("#{ 4 - \"3.0\" }", new Double(1.0));
-        evaluateTest("#{ 4.0 - \"3.0\" }", new Double(1.0));
-        evaluateTest("#{ \"4\" - \"3\" }", new Long(1));
-        evaluateTest("#{ \"4.0\" - \"3\" }", new Double(1.0));
-        evaluateTest("#{ \"4\" - \"3.0\" }", new Double(1.0));
-        evaluateTest("#{ \"4.0\" - \"3.0\" }", new Double(1.0));
-        
-        evaluateTest("#{ 4 * 3 }", new Long(12));
-        evaluateTest("#{ 4.0 * 3 }", new Double(12.0));
-        evaluateTest("#{ 4 * 3.0 }", new Double(12.0));
-        evaluateTest("#{ 4.0 * 3.0 }", new Double(12.0));
-        evaluateTest("#{ \"4\" * 3 }", new Long(12));
-        evaluateTest("#{ \"4.0\" * 3 }", new Double(12.0));
-        evaluateTest("#{ \"4\" * 3.0 }", new Double(12.0));
-        evaluateTest("#{ \"4.0\" * 3.0 }", new Double(12.0));
-        evaluateTest("#{ 4 * \"3\" }", new Long(12));
-        evaluateTest("#{ 4.0 * \"3\" }", new Double(12.0));
-        evaluateTest("#{ 4 * \"3.0\" }", new Double(12.0));
-        evaluateTest("#{ 4.0 * \"3.0\" }", new Double(12.0));
-        evaluateTest("#{ \"4\" * \"3\" }", new Long(12));
-        evaluateTest("#{ \"4.0\" * \"3\" }", new Double(12.0));
-        evaluateTest("#{ \"4\" * \"3.0\" }", new Double(12.0));
-        evaluateTest("#{ \"4.0\" * \"3.0\" }", new Double(12.0));
-        
-        evaluateTest("#{ 4 / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ 4.0 / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ 4 / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ 4.0 / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4\" / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4.0\" / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4\" / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4.0\" / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("#{ 4 / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("#{ 4.0 / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("#{ 4 / \"3.0\" }", new Double(4.0 / 3.0));
-        evaluateTest("#{ 4.0 / \"3.0\" }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4\" / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4.0\" / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4\" / \"3.0\" }", new Double(4.0 / 3.0));
-        evaluateTest("#{ \"4.0\" / \"3.0\" }", new Double(4.0 / 3.0));
-        
-        evaluateTest("#{ 4 % 3 }", new Long(1));
-        evaluateTest("#{ 4.0 % 3 }", new Double(1.0));
-        evaluateTest("#{ 4 % 3.0 }", new Double(1.0));
-        evaluateTest("#{ 4.0 % 3.0 }", new Double(1.0));
-        evaluateTest("#{ \"4\" % 3 }", new Long(1));
-        evaluateTest("#{ \"4.0\" % 3 }", new Double(1.0));
-        evaluateTest("#{ \"4\" % 3.0 }", new Double(1.0));
-        evaluateTest("#{ \"4.0\" % 3.0 }", new Double(1.0));
-        evaluateTest("#{ 4 % \"3\" }", new Long(1));
-        evaluateTest("#{ 4.0 % \"3\" }", new Double(1.0));
-        evaluateTest("#{ 4 % \"3.0\" }", new Double(1.0));
-        evaluateTest("#{ 4.0 % \"3.0\" }", new Double(1.0));
-        evaluateTest("#{ \"4\" % \"3\" }", new Long(1));
-        evaluateTest("#{ \"4.0\" % \"3\" }", new Double(1.0));
-        evaluateTest("#{ \"4\" % \"3.0\" }", new Double(1.0));
-        evaluateTest("#{ \"4.0\" % \"3.0\" }", new Double(1.0));
-        
-        evaluateTest("#{ \"8\" / \"2\" }", new Double(4.0));
-        evaluateTest("#{ \"4e2\" + \"3\" }", new Double(403));
-        evaluateTest("#{ \"4\" + \"3e2\" }", new Double(304));
-        evaluateTest("#{ \"4e2\" + \"3e2\" }", new Double(700));
-        
-        
-        /* unary minus operator involving Strings */
-        evaluateTest("#{ -3 }", new Long(-3));
-        evaluateTest("#{ -3.0 }", new Double(-3.0));
-        evaluateTest("#{ -\"3\" }", new Long(-3));
-        evaluateTest("#{ -\"3.0\" }", new Double(-3));
-        evaluateTest("#{ -\"3e2\" }", new Double(-300));
-    }
-
-    protected Bean1 createBean1()
-    {
-        Bean1 b1 = new Bean1();
-        b1.setBoolean1(true);
-        b1.setByte1((byte) 12);
-        b1.setShort1((short) 98);
-        b1.setChar1('b');
-        b1.setInt1(4);
-        b1.setLong1(98);
-        b1.setFloat1((float) 12.4);
-        b1.setDouble1(89.224);
-        b1.setString1("hello");
-        b1.setStringArray1(new String[]
-        { "string1", "string2", "string3", "string4" });
-        {
-            List l = new ArrayList();
-            l.add(new Integer(14));
-            l.add("another value");
-            l.add(b1.getStringArray1());
-            b1.setList1(l);
-        }
-        {
-            Map m = new HashMap();
-            m.put("key1", "value1");
-            m.put(new Integer(14), "value2");
-            m.put(new Long(14), "value3");
-            m.put("recurse", b1);
-            b1.setMap1(m);
-        }
-
-        Bean1 b2 = new Bean1();
-        b2.setInt2(new Integer(-224));
-        b2.setString2("bean2's string");
-        b1.setBean1(b2);
-
-        Bean1 b3 = new Bean1();
-        b3.setDouble1(1422.332);
-        b3.setString2("bean3's string"); 
-        b2.setBean2(b3);
-
-        return b1;
-    }
-
-    public ExternalContext getExternalContext()
-    {
-        return getFacesContext().getExternalContext();
-    }
-
-    public void evaluateTestFailure(String ref) throws Exception
-    {
-        try
-        {
-            this.evaluate(ref);
-            fail("'" + ref + "' should have thrown an exception");
-        }
-        catch (Exception e)
-        {
-            // do nothing
-        }
-    }
-
-    public void evaluateTest(String ref, Object expectedValue) throws Exception
-    {
-        Object returnedValue = this.evaluate(ref);
-        if (returnedValue != null)
-        {
-            Class expectedType = expectedValue.getClass();
-            Class returnedType = returnedValue.getClass();
-            String msg = "'" + ref + "' expected [" + expectedValue
-                    + "] of type " + expectedType.getName()
-                    + ", but returned [" + returnedValue + "] of type "
-                    + returnedType.getName();
-            assertTrue(msg, expectedType.isAssignableFrom(returnedType));
-            assertEquals(msg, expectedValue, returnedValue);
-        }
-        else
-        {
-            String msg = "'" + ref + "' expected value [" + expectedValue
-                    + "], but returned [" + returnedValue + "]";
-            assertEquals(msg, expectedValue, returnedValue);
-        }
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/TestUnifiedELImpl.java b/jsf-ri/test/com/sun/faces/el/impl/TestUnifiedELImpl.java
deleted file mode 100644
index 8aed501..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/TestUnifiedELImpl.java
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- * 
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.context.ExternalContext;
-import javax.el.ValueExpression;
-
-import com.sun.faces.el.impl.beans.Factory;
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-/**
- * @author jhook
- */
-public class TestUnifiedELImpl extends ServletFacesTestCase
-{
-    /**
-     *  
-     */
-    public TestUnifiedELImpl()
-    {
-        super();
-    }
-
-    /**
-     * @param name
-     */
-    public TestUnifiedELImpl(String name)
-    {
-        super(name);
-    }
-
-    protected Object evaluate(String ref) throws Exception
-    {
-        ValueExpression ve = this.getFacesContext().getApplication().
-            getExpressionFactory().createValueExpression(getFacesContext().getELContext(),ref, Object.class);
-        return ve.getValue(this.getFacesContext().getELContext());
-    }
-
-    public void testELEvaluation() throws Exception
-    {
-        /* setup our test date */
-        Bean1 b = this.createBean1();
-        getExternalContext().getRequestMap().put("bean1a", b);
-
-        getExternalContext().getSessionMap().put("val1c", "session-scoped1");
-        getExternalContext().getRequestMap().put("val1b", "request-scoped1");
-        getExternalContext().getApplicationMap().put("val1d", "app-scoped1");
-        
-        Map m = new HashMap();
-        m.put("emptyArray", new Object[0]);
-        m.put("nonemptyArray", new Object[]
-        { "abc" });
-        m.put("emptyList", new ArrayList());
-        {
-            List l = new ArrayList();
-            l.add("hello"); 
-            m.put("nonemptyList", l);
-        }
-        m.put("emptyMap", new HashMap());
-        {
-            Map m2 = new HashMap();
-            m2.put("a", "a");
-            m.put("nonemptyMap", m2);
-        }
-        m.put("emptySet", new HashSet());
-        {
-            Set s = new HashSet();
-            s.add("hello");
-            m.put("nonemptySet", s);
-        }
-        getExternalContext().getRequestMap().put("emptyTests", m);
-
-        getExternalContext().getRequestMap().put("pbean1",
-                Factory.createBean1());
-        getExternalContext().getRequestMap().put("pbean2",
-                Factory.createBean2());
-        getExternalContext().getRequestMap().put("pbean3",
-                Factory.createBean3());
-        getExternalContext().getRequestMap().put("pbean4",
-                Factory.createBean4());
-        getExternalContext().getRequestMap().put("pbean5",
-                Factory.createBean5());
-        getExternalContext().getRequestMap().put("pbean6",
-                Factory.createBean6());
-        getExternalContext().getRequestMap().put("pbean7",
-                Factory.createBean7());
-
-        /* testing mixture of strings and expressions */
-        evaluateTest("abc", "abc");
-        evaluateTest("${ 3}", new Long(3));
-        evaluateTestFailure("a${");
-        evaluateTest("a${ 5 }", "a5");
-        evaluateTest("${ 3 }b", "3b");
-        evaluateTest("${ 1 }${ 2 }", "12");
-        evaluateTest("abc ${ 1} ${ 2} def", "abc 1 2 def");
-
-        /* testing values that end with or contain "$" */
-        evaluateTest("$", "$");
-        evaluateTest("\\$", "$");
-        evaluateTest("$  ", "$  ");
-        evaluateTest("test$", "test$");
-        evaluateTest("$test", "$test");
-        evaluateTest("test$test", "test$test");
-        evaluateTest("test$$$", "test$$$");
-        evaluateTest("test$$${ 34 }", "test$$34");
-        evaluateTest("test$$${ 34 }$$", "test$$34$$");
-        evaluateTest("test$${ 34 }", "test$34");
-        evaluateTest("$${ 34 }", "$34");
-        evaluateTest("$$", "$$");
-        evaluateTest("test$$", "test$$");
-        evaluateTest("test$$test", "test$$test");
-        evaluateTest("${ 34 }$${ 34 }", "34$34");
-
-        /* basic literals */
-        evaluateTest("${1}", new Long(1));
-        evaluateTest("${-12}", new Long(-12));
-        evaluateTest("${true}", Boolean.TRUE);
-        evaluateTest("${false}", Boolean.FALSE);
-        evaluateTest("${null}", null);
-        evaluateTest("${4.2}", new Double(4.2));
-        evaluateTest("${-21.3}", new Double(-21.3));
-        evaluateTest("${4.}", new Double(4.0));
-        evaluateTest("${.21}", new Double(0.21));
-        evaluateTest("${3e-1}", new Double(0.3));
-        evaluateTest("${.2222222222}", new Double(0.2222222222));
-
-        /* basic relationals between literals */
-        evaluateTest("${1 < 2}", Boolean.TRUE);
-        evaluateTest("${1 > 2}", Boolean.FALSE);
-        evaluateTest("${1 >= 2}", Boolean.FALSE);
-        evaluateTest("${1 <= 2}", Boolean.TRUE);
-        evaluateTest("${1 == 2}", Boolean.FALSE);
-        evaluateTest("${1 != 2}", Boolean.TRUE);
-        evaluateTest("${3 >= 3}", Boolean.TRUE);
-        evaluateTest("${3 <= 3}", Boolean.TRUE);
-        evaluateTest("${3 == 3}", Boolean.TRUE);
-        evaluateTest("${3 < 3}", Boolean.FALSE);
-        evaluateTest("${3 > 3}", Boolean.FALSE);
-        evaluateTest("${3 != 3}", Boolean.FALSE);
-
-        // PENDING (visvan) check with Kinman/Jacob
-        /* relationals between booleans 
-        evaluateTestFailure("${false < true}");
-        evaluateTestFailure("${false > true}");
-        evaluateTest("${true >= true}", Boolean.TRUE);
-        evaluateTest("${true <= true}", Boolean.TRUE);
-        evaluateTest("${true == true}", Boolean.TRUE);
-        evaluateTest("${true != true}", Boolean.FALSE); */
-
-        /* looking up objects in scopes */
-        evaluateTest("${requestScope.val1b}", "request-scoped1");
-        evaluateTest("${sessionScope.val1b}", null);
-        evaluateTest("${applicationScope.val1b}", null);
-        evaluateTest("${val1b}", "request-scoped1");
-
-        evaluateTest("${requestScope.val1c}", null);
-        evaluateTest("${sessionScope.val1c}", "session-scoped1");
-        evaluateTest("${applicationScope.val1c}", null);
-        evaluateTest("${val1c}", "session-scoped1");
-
-        evaluateTest("${requestScope.val1d}", null);
-        evaluateTest("${sessionScope.val1d}", null);
-        evaluateTest("${applicationScope.val1d}", "app-scoped1");
-        evaluateTest("${val1d}", "app-scoped1");
-
-        /* accessing properties */
-        evaluateTest("${bean1a.int1}", new Integer(b.getInt1()));
-        evaluateTest("${bean1a.boolean1}", Boolean.valueOf(b.getBoolean1()));
-        evaluateTest("${bean1a.string1}", b.getString1());
-        evaluateTest("${bean1a.bean1.int2}", b.getBean1().getInt2());
-        evaluateTest("${bean1a.bean1.bean2.string2}", b.getBean1().getBean2()
-                .getString2());
-        evaluateTest("${bean1a.byte1}", new Byte(b.getByte1()));
-        evaluateTest("${bean1a.char1}", new Character(b.getChar1()));
-        evaluateTest("${bean1a.short1}", new Short(b.getShort1()));
-        evaluateTest("${bean1a.long1}", new Long(b.getLong1()));
-        evaluateTest("${bean1a.float1}", new Float(b.getFloat1()));
-        evaluateTest("${bean1a.double1}", new Double(b.getDouble1()));
-
-        /* test the entire relational comparison type promotion matrix */
-        evaluateTest("${bean1a.byte1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("${bean1a.byte1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("${bean1a.byte1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("${bean1a.byte1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("${bean1a.byte1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("${bean1a.byte1 < bean1a.float1}", Boolean.TRUE);
-        evaluateTest("${bean1a.byte1 < bean1a.double1}", Boolean.TRUE);
-
-        evaluateTest("${bean1a.char1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("${bean1a.char1 < bean1a.char1}", Boolean.FALSE);
-        evaluateTest("${bean1a.char1 < bean1a.short1}", Boolean.FALSE);
-        evaluateTest("${bean1a.char1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("${bean1a.char1 < bean1a.long1}", Boolean.FALSE);
-        evaluateTest("${bean1a.char1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("${bean1a.char1 < bean1a.double1}", Boolean.FALSE);
-
-        evaluateTest("${bean1a.short1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("${bean1a.short1 < bean1a.char1}", Boolean.FALSE);
-        evaluateTest("${bean1a.short1 < bean1a.short1}", Boolean.FALSE);
-        evaluateTest("${bean1a.short1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("${bean1a.short1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("${bean1a.short1 < bean1a.long1}", Boolean.FALSE);
-        evaluateTest("${bean1a.short1 < bean1a.double1}", Boolean.FALSE);
-
-        evaluateTest("${bean1a.int1 < bean1a.byte1}", Boolean.TRUE);
-        evaluateTest("${bean1a.int1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("${bean1a.int1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("${bean1a.int1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("${bean1a.int1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("${bean1a.int1 < bean1a.float1}", Boolean.TRUE);
-        evaluateTest("${bean1a.int1 < bean1a.double1}", Boolean.TRUE);
-
-        evaluateTest("${bean1a.long1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("${bean1a.long1 < bean1a.char1}", Boolean.FALSE);
-        evaluateTest("${bean1a.long1 < bean1a.short1}", Boolean.FALSE);
-        evaluateTest("${bean1a.long1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("${bean1a.long1 < bean1a.long1}", Boolean.FALSE);
-        evaluateTest("${bean1a.long1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("${bean1a.long1 < bean1a.double1}", Boolean.FALSE);
-
-        evaluateTest("${bean1a.float1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("${bean1a.float1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("${bean1a.float1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("${bean1a.float1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("${bean1a.float1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("${bean1a.float1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("${bean1a.float1 < bean1a.double1}", Boolean.TRUE);
-
-        evaluateTest("${bean1a.double1 < bean1a.byte1}", Boolean.FALSE);
-        evaluateTest("${bean1a.double1 < bean1a.char1}", Boolean.TRUE);
-        evaluateTest("${bean1a.double1 < bean1a.short1}", Boolean.TRUE);
-        evaluateTest("${bean1a.double1 < bean1a.int1}", Boolean.FALSE);
-        evaluateTest("${bean1a.double1 < bean1a.long1}", Boolean.TRUE);
-        evaluateTest("${bean1a.double1 < bean1a.float1}", Boolean.FALSE);
-        evaluateTest("${bean1a.double1 < bean1a.double1}", Boolean.FALSE);
-
-        /* test other relational comparison rules */
-        evaluateTest("${null == null}", Boolean.TRUE);
-        evaluateTest("${noSuchAttribute == noSuchAttribute}", Boolean.TRUE);
-        evaluateTest("${noSuchAttribute == null}", Boolean.TRUE);
-        evaluateTest("${null == noSuchAttribute}", Boolean.TRUE);
-        evaluateTest("${bean1a == null}", Boolean.FALSE);
-        evaluateTest("${null == bean1a}", Boolean.FALSE);
-        evaluateTest("${bean1a == bean1a}", Boolean.TRUE);
-        evaluateTest("${bean1a > \"hello\"}", Boolean.FALSE);
-        evaluateTestFailure("${bean1a.bean1 < 14}");
-        evaluateTest("${bean1a.bean1 == \"hello\"}", Boolean.FALSE);
-
-        /* test String comparisons */
-        evaluateTest("${bean1a.string1 == \"hello\"}", Boolean.TRUE);
-        evaluateTest("${bean1a.string1 != \"hello\"}", Boolean.FALSE);
-        evaluateTest("${bean1a.string1 == \"goodbye\"}", Boolean.FALSE);
-        evaluateTest("${bean1a.string1 != \"goodbye\"}", Boolean.TRUE);
-        evaluateTest("${bean1a.string1 > \"goodbye\"}", Boolean.TRUE);
-        evaluateTest("${\"hello\" == bean1a.string1}", Boolean.TRUE);
-        evaluateTest("${\"goodbye\" > bean1a.string1}", Boolean.FALSE);
-
-        /* test errors in property traversal */
-        evaluateTest("${noSuchAttribute.abc}", null);
-        evaluateTest("${bean1a.bean2.byte1}", null);
-        evaluateTestFailure("${bean1a.noProperty}");
-        evaluateTestFailure("${bean1a.noGetter}");
-        evaluateTestFailure("${bean1a.errorInGetter}");
-        evaluateTest("${bean1a.bean2.string2}", null);
-
-        /* test accessing public properties from private classes */
-        evaluateTest("${pbean1.value}", "got the value");
-        evaluateTest("${pbean2.value}", "got the value");
-        evaluateTest("${pbean3.value}", "got the value");
-        evaluateTest("${pbean4.value}", "got the value");
-        evaluateTest("${pbean5.value}", "got the value");
-        evaluateTest("${pbean6.value}", "got the value");
-        evaluateTest("${pbean7.value}", "got the value");
-
-        /* test reserved words as identifiers */
-        evaluateTestFailure("${and}");
-        evaluateTestFailure("${or}");
-        evaluateTestFailure("${not}");
-        evaluateTestFailure("${eq}");
-        evaluateTestFailure("${ne}");
-        evaluateTestFailure("${lt}");
-        evaluateTestFailure("${gt}");
-        evaluateTestFailure("${le}");
-        evaluateTestFailure("${ge}");
-        evaluateTest("${true}", Boolean.TRUE);
-        evaluateTest("${false}", Boolean.FALSE);
-        evaluateTest("${null}", null);
-
-        /* test reserved words as property names */
-        evaluateTestFailure("${bean1a.and}");
-        evaluateTestFailure("${bean1a.or}");
-        evaluateTestFailure("${bean1a.not}"); 
-        evaluateTestFailure("${bean1a.eq}");
-        evaluateTestFailure("${bean1a.ne}");
-        evaluateTestFailure("${bean1a.lt}");
-        evaluateTestFailure("${bean1a.gt}");
-        evaluateTestFailure("${bean1a.le}");
-        evaluateTestFailure("${bean1a.ge}");
-        evaluateTestFailure("${bean1a.instanceof}");
-        evaluateTestFailure("${bean1a.page}");
-        evaluateTestFailure("${bean1a.request}");
-        evaluateTestFailure("${bean1a.session}");
-        evaluateTestFailure("${bean1a.application}");
-        evaluateTestFailure("${bean1a.true}");
-        evaluateTestFailure("${bean1a.false}");
-        evaluateTestFailure("${bean1a.null}");
-
-        /* test arithmetic */
-        evaluateTest("${3+5}", new Long(8));
-        evaluateTest("${3-5}", new Long(-2));
-        evaluateTest("${3/5}", new Double(0.6));
-        evaluateTest("${3*5}", new Long(15));
-        evaluateTest("${3*5.0}", new Double(15.0));
-        evaluateTest("${3.0*5}", new Double(15.0));
-        evaluateTest("${3.0*5.0}", new Double(15.0));
-        evaluateTest("${225 % 17}", new Long(4));
-        evaluateTest("${ 1 + 2 + 3 * 5 + 6}", new Long(24));
-        evaluateTest("${ 1 + (2 + 3) * 5 + 6}", new Long(32));
-
-        /* test logical operators */
-        evaluateTest("${ true}", Boolean.TRUE);
-        evaluateTest("${ not true}", Boolean.FALSE);
-        evaluateTest("${ not false}", Boolean.TRUE);
-        evaluateTest("${ not not true}", Boolean.TRUE);
-        evaluateTest("${ not not false}", Boolean.FALSE);
-        evaluateTest("${ true and false}", Boolean.FALSE);
-        evaluateTest("${ true and true}", Boolean.TRUE);
-        evaluateTest("${ false and true}", Boolean.FALSE);
-        evaluateTest("${ false and false}", Boolean.FALSE);
-        evaluateTest("${ true or false}", Boolean.TRUE);
-        evaluateTest("${ true or true}", Boolean.TRUE);
-        evaluateTest("${ false or true}", Boolean.TRUE);
-        evaluateTest("${ false or false}", Boolean.FALSE);
-        evaluateTest("${ false or false or false or true and false}",
-                Boolean.FALSE);
-        evaluateTest("${ false or false or false or true and false or true}",
-                Boolean.TRUE);
-
-        /* test indexed access operator */
-        evaluateTest("${ bean1a[\"double1\"] }", new Double(b.getDouble1()));
-        evaluateTest("${ bean1a[\"double1\"].class }", Double.class);
-        evaluateTest("${ bean1a.stringArray1[-1]}", null);
-        evaluateTest("${ bean1a.stringArray1[0]}", b.getStringArray1()[0]);
-        evaluateTest("${ bean1a.stringArray1[1]}", b.getStringArray1()[1]);
-        evaluateTest("${ bean1a.stringArray1[2]}", b.getStringArray1()[2]);
-        evaluateTest("${ bean1a.stringArray1[3]}", b.getStringArray1()[3]);
-        evaluateTest("${ bean1a.stringArray1[4]}", null);
-
-        
-        /* Test as list accessor */
-        evaluateTest("${ bean1a.list1 [0] }", b.getList1().get(0));
-        evaluateTest("${ bean1a.list1 [1] }", b.getList1().get(1));
-        evaluateTest("${ bean1a.list1 [2][2] }", "string3");
-
-        
-        /* Test as indexed property accessor */
-        evaluateTestFailure("${ bean1a.indexed1[-1]}");
-        evaluateTestFailure("${ bean1a.indexed1[0]}");
-        evaluateTestFailure("${ bean1a.indexed1[1]}");
-        evaluateTestFailure("${ bean1a.indexed1[2]}");
-        evaluateTestFailure("${ bean1a.indexed1[3]}");
-        evaluateTestFailure("${ bean1a.indexed1[4]}");
-
-        
-        /* Test as map accessor */
-        evaluateTest("${ bean1a.map1.noKey }", null);
-        evaluateTest("${ bean1a.map1.key1 }", b.getMap1().get("key1"));
-        evaluateTest("${ bean1a.map1 [\"key1\"] }", b.getMap1().get("key1"));
-        evaluateTest("${ bean1a.map1 [14] }", "value3");
-        evaluateTest("${ bean1a.map1 [2 * 7] }", "value3");
-        evaluateTest("${ bean1a.map1.recurse.list1[0] }", new Integer(14));
-
-        
-        /* Test UIComponent as bean
-        evaluateTest("${view.rendered}", Boolean.TRUE);
-        evaluateTest("${view.attributes.rendered}", Boolean.TRUE);
-        evaluateTest("${view.children[0].value}", "inputValue");
-        evaluateTest("${view.children[0].rendered}", Boolean.TRUE);
-         */
-        
-        /* test String concatenation */
-        evaluateTestFailure("${ \"a\" + \"bcd\" }");
-        evaluateTestFailure("${ \"a\" + (4*3) }");
-        evaluateTestFailure("${ bean1a.map1 [\"key\" + (5-4)] }");
-
-        
-        /* test String comparisons */
-        evaluateTest("${ \"30\" < \"4\" }", Boolean.TRUE);
-        evaluateTest("${ 30 < \"4\" }", Boolean.FALSE);
-        evaluateTest("${ 30 > \"4\" }", Boolean.TRUE);
-        evaluateTest("${ \"0004\" == \"4\" }", Boolean.FALSE);
-        
-        
-        /* test relational comparison with alternate symbols */
-        evaluateTest("${ 4 eq 3}", Boolean.FALSE);
-        evaluateTest("${ 4 ne 3}", Boolean.TRUE);
-        evaluateTest("${ 4 eq 4}", Boolean.TRUE);
-        evaluateTest("${ 4 ne 4}", Boolean.FALSE);
-        evaluateTest("${ 4 lt 3}", Boolean.FALSE);
-        evaluateTest("${ 4 gt 3}", Boolean.TRUE);
-        evaluateTest("${ 4 le 3}", Boolean.FALSE);
-        evaluateTest("${ 4 ge 3}", Boolean.TRUE);
-        evaluateTest("${ 4 le 4}", Boolean.TRUE);
-        evaluateTest("${ 4 ge 4}", Boolean.TRUE);
-        
-        
-        /* test expressions on the left side of a value suffix */
-        evaluateTest("${(3).class}", Long.class);
-        evaluateTest("${(bean1a.map1)[\"key1\"]}", "value1");
-        
-        /* test String/boolean logical operators */
-        evaluateTest("${'true' and false}", Boolean.FALSE);
-        evaluateTest("${'true' or true}", Boolean.TRUE);
-        evaluateTest("${false and 'true'}", Boolean.FALSE);
-        evaluateTest("${false or 'true'}", Boolean.TRUE);
-        
-        
-        /* test empty operator */
-        evaluateTest("${ empty \"A\"}", Boolean.FALSE);
-        evaluateTest("${ empty \"\" }", Boolean.TRUE);
-        evaluateTest("${ empty null }", Boolean.TRUE);
-        evaluateTest("${ empty false}", Boolean.FALSE);
-        evaluateTest("${ empty 0}", Boolean.FALSE);
-        evaluateTest("${ not empty 0}", Boolean.TRUE);
-        evaluateTest("${ not empty empty 0}", Boolean.TRUE);
-        evaluateTest("${ empty emptyTests.emptyArray }", Boolean.TRUE);
-        evaluateTest("${ empty emptyTests.nonemptyArray }", Boolean.FALSE);
-        evaluateTest("${ empty emptyTests.emptyList }", Boolean.TRUE);
-        evaluateTest("${ empty emptyTests.nonemptyList }", Boolean.FALSE);
-        evaluateTest("${ empty emptyTests.emptyMap }", Boolean.TRUE);
-        evaluateTest("${ empty emptyTests.nonemptyMap }", Boolean.FALSE);
-        evaluateTest("${ empty emptyTests.emptySet }", Boolean.TRUE);
-        evaluateTest("${ empty emptyTests.nonemptySet }", Boolean.FALSE);
-        
-        
-        /* test String arithmetic */
-        evaluateTest("${ \"6\" / \"3\" }", new Double(2.0));
-        evaluateTest("${ 3 + \"4\" }", new Long(7));
-        evaluateTest("${ \"4\" + 3 }", new Long(7));
-        evaluateTest("${ 3 + \"4.5\" }", new Double(7.5));
-        evaluateTest("${ \"4.5\" + 3 }", new Double(7.5));
-        evaluateTest("${ 3.0 + 6.0}", new Double(9.0));
-        evaluateTest("${ 31121.0 * 61553.0 }", new Double(1.915590913E9));
-        evaluateTest("${ 31121 * 61553 }", new Long(1915590913));
-        evaluateTest("${ 65536 * 65536 * 65536 * 32759 }", new Long("9220838762064379904"));
-        evaluateTest("${ 9220838762064379904.0 - 9220838762064379900.0 }", new Double(0.0));
-        evaluateTest("${ 9220838762064379904 - 9220838762064379900 }", new Long(4));
-        
-        
-        /* test relational operators involving null */
-        evaluateTest("${ null == null }", Boolean.TRUE);
-        evaluateTest("${ null != null }", Boolean.FALSE);
-        evaluateTest("${ null > null }", Boolean.FALSE);
-        evaluateTest("${ null < null }", Boolean.FALSE);
-        evaluateTest("${ null >= null }", Boolean.TRUE);
-        evaluateTest("${ null <= null }", Boolean.TRUE);
-        evaluateTest("${ null == 3 }", Boolean.FALSE);
-        evaluateTest("${ null != 3 }", Boolean.TRUE);
-        evaluateTest("${ null > 3 }", Boolean.FALSE);
-        evaluateTest("${ null < 3 }", Boolean.FALSE);
-        evaluateTest("${ null >= 3 }", Boolean.FALSE);
-        evaluateTest("${ null <= 3 }", Boolean.FALSE);
-        evaluateTest("${ 3 == null }", Boolean.FALSE);
-        evaluateTest("${ 3 != null }", Boolean.TRUE);
-        evaluateTest("${ 3 > null }", Boolean.FALSE);
-        evaluateTest("${ 3 < null }", Boolean.FALSE);
-        evaluateTest("${ 3 >= null }", Boolean.FALSE);
-        evaluateTest("${ 3 <= null }", Boolean.FALSE);
-        evaluateTest("${ null == \"\" }", Boolean.FALSE);
-        evaluateTest("${ null != \"\" }", Boolean.TRUE);
-        evaluateTest("${ \"\" == null }", Boolean.FALSE);
-        evaluateTest("${ \"\" != null }", Boolean.TRUE);
-        
-        
-        /* arithmetic operators involving Strings */
-        evaluateTest("${ 4 + 3 }", new Long(7));
-        evaluateTest("${ 4.0 + 3 }", new Double(7.0));
-        evaluateTest("${ 4 + 3.0 }", new Double(7.0));
-        evaluateTest("${ 4.0 + 3.0 }", new Double(7.0));
-        evaluateTest("${ \"4\" + 3 }", new Long(7));
-        evaluateTest("${ \"4.0\" + 3 }", new Double(7.0));
-        evaluateTest("${ \"4\" + 3.0 }", new Double(7.0));
-        evaluateTest("${ \"4.0\" + 3.0 }", new Double(7.0));
-        evaluateTest("${ 4 + \"3\" }", new Long(7));
-        evaluateTest("${ 4.0 + \"3\" }", new Double(7.0));
-        evaluateTest("${ 4 + \"3.0\" }", new Double(7.0));
-        evaluateTest("${ 4.0 + \"3.0\" }", new Double(7.0));
-        evaluateTest("${ \"4\" + \"3\" }", new Long(7));
-        evaluateTest("${ \"4.0\" + \"3\" }", new Double(7.0));
-        evaluateTest("${ \"4\" + \"3.0\" }", new Double(7.0));
-        evaluateTest("${ \"4.0\" + \"3.0\" }", new Double(7.0));
-        
-        evaluateTest("${ 4 - 3 }", new Long(1));
-        evaluateTest("${ 4.0 - 3 }", new Double(1.0));
-        evaluateTest("${ 4 - 3.0 }", new Double(1.0));
-        evaluateTest("${ 4.0 - 3.0 }", new Double(1.0));
-        evaluateTest("${ \"4\" - 3 }", new Long(1));
-        evaluateTest("${ \"4.0\" - 3 }", new Double(1.0));
-        evaluateTest("${ \"4\" - 3.0 }", new Double(1.0));
-        evaluateTest("${ \"4.0\" - 3.0 }", new Double(1.0));
-        evaluateTest("${ 4 - \"3\" }", new Long(1));
-        evaluateTest("${ 4.0 - \"3\" }", new Double(1.0));
-        evaluateTest("${ 4 - \"3.0\" }", new Double(1.0));
-        evaluateTest("${ 4.0 - \"3.0\" }", new Double(1.0));
-        evaluateTest("${ \"4\" - \"3\" }", new Long(1));
-        evaluateTest("${ \"4.0\" - \"3\" }", new Double(1.0));
-        evaluateTest("${ \"4\" - \"3.0\" }", new Double(1.0));
-        evaluateTest("${ \"4.0\" - \"3.0\" }", new Double(1.0));
-        
-        evaluateTest("${ 4 * 3 }", new Long(12));
-        evaluateTest("${ 4.0 * 3 }", new Double(12.0));
-        evaluateTest("${ 4 * 3.0 }", new Double(12.0));
-        evaluateTest("${ 4.0 * 3.0 }", new Double(12.0));
-        evaluateTest("${ \"4\" * 3 }", new Long(12));
-        evaluateTest("${ \"4.0\" * 3 }", new Double(12.0));
-        evaluateTest("${ \"4\" * 3.0 }", new Double(12.0));
-        evaluateTest("${ \"4.0\" * 3.0 }", new Double(12.0));
-        evaluateTest("${ 4 * \"3\" }", new Long(12));
-        evaluateTest("${ 4.0 * \"3\" }", new Double(12.0));
-        evaluateTest("${ 4 * \"3.0\" }", new Double(12.0));
-        evaluateTest("${ 4.0 * \"3.0\" }", new Double(12.0));
-        evaluateTest("${ \"4\" * \"3\" }", new Long(12));
-        evaluateTest("${ \"4.0\" * \"3\" }", new Double(12.0));
-        evaluateTest("${ \"4\" * \"3.0\" }", new Double(12.0));
-        evaluateTest("${ \"4.0\" * \"3.0\" }", new Double(12.0));
-        
-        evaluateTest("${ 4 / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("${ 4.0 / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("${ 4 / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("${ 4.0 / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4\" / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4.0\" / 3 }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4\" / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4.0\" / 3.0 }", new Double(4.0 / 3.0));
-        evaluateTest("${ 4 / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("${ 4.0 / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("${ 4 / \"3.0\" }", new Double(4.0 / 3.0));
-        evaluateTest("${ 4.0 / \"3.0\" }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4\" / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4.0\" / \"3\" }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4\" / \"3.0\" }", new Double(4.0 / 3.0));
-        evaluateTest("${ \"4.0\" / \"3.0\" }", new Double(4.0 / 3.0));
-        
-        evaluateTest("${ 4 % 3 }", new Long(1));
-        evaluateTest("${ 4.0 % 3 }", new Double(1.0));
-        evaluateTest("${ 4 % 3.0 }", new Double(1.0));
-        evaluateTest("${ 4.0 % 3.0 }", new Double(1.0));
-        evaluateTest("${ \"4\" % 3 }", new Long(1));
-        evaluateTest("${ \"4.0\" % 3 }", new Double(1.0));
-        evaluateTest("${ \"4\" % 3.0 }", new Double(1.0));
-        evaluateTest("${ \"4.0\" % 3.0 }", new Double(1.0));
-        evaluateTest("${ 4 % \"3\" }", new Long(1));
-        evaluateTest("${ 4.0 % \"3\" }", new Double(1.0));
-        evaluateTest("${ 4 % \"3.0\" }", new Double(1.0));
-        evaluateTest("${ 4.0 % \"3.0\" }", new Double(1.0));
-        evaluateTest("${ \"4\" % \"3\" }", new Long(1));
-        evaluateTest("${ \"4.0\" % \"3\" }", new Double(1.0));
-        evaluateTest("${ \"4\" % \"3.0\" }", new Double(1.0));
-        evaluateTest("${ \"4.0\" % \"3.0\" }", new Double(1.0));
-        
-        evaluateTest("${ \"8\" / \"2\" }", new Double(4.0));
-        evaluateTest("${ \"4e2\" + \"3\" }", new Double(403));
-        evaluateTest("${ \"4\" + \"3e2\" }", new Double(304));
-        evaluateTest("${ \"4e2\" + \"3e2\" }", new Double(700));
-        
-        
-        /* unary minus operator involving Strings */
-        evaluateTest("${ -3 }", new Long(-3));
-        evaluateTest("${ -3.0 }", new Double(-3.0));
-        evaluateTest("${ -\"3\" }", new Long(-3));
-        evaluateTest("${ -\"3.0\" }", new Double(-3));
-        evaluateTest("${ -\"3e2\" }", new Double(-300));
-    }
-
-    protected Bean1 createBean1()
-    {
-        Bean1 b1 = new Bean1();
-        b1.setBoolean1(true);
-        b1.setByte1((byte) 12);
-        b1.setShort1((short) 98);
-        b1.setChar1('b');
-        b1.setInt1(4);
-        b1.setLong1(98);
-        b1.setFloat1((float) 12.4);
-        b1.setDouble1(89.224);
-        b1.setString1("hello");
-        b1.setStringArray1(new String[]
-        { "string1", "string2", "string3", "string4" });
-        {
-            List l = new ArrayList();
-            l.add(new Integer(14));
-            l.add("another value");
-            l.add(b1.getStringArray1());
-            b1.setList1(l);
-        }
-        {
-            Map m = new HashMap();
-            m.put("key1", "value1");
-            m.put(new Integer(14), "value2");
-            m.put(new Long(14), "value3");
-            m.put("recurse", b1);
-            b1.setMap1(m);
-        }
-
-        Bean1 b2 = new Bean1();
-        b2.setInt2(new Integer(-224));
-        b2.setString2("bean2's string");
-        b1.setBean1(b2);
-
-        Bean1 b3 = new Bean1();
-        b3.setDouble1(1422.332);
-        b3.setString2("bean3's string"); 
-        b2.setBean2(b3);
-
-        return b1;
-    }
-
-    public ExternalContext getExternalContext()
-    {
-        return getFacesContext().getExternalContext();
-    }
-
-    public void evaluateTestFailure(String ref) throws Exception
-    {
-        try
-        {
-            this.evaluate(ref);
-            fail("'" + ref + "' should have thrown an exception");
-        }
-        catch (Exception e)
-        {
-            // do nothing
-        }
-    }
-
-    public void evaluateTest(String ref, Object expectedValue) throws Exception
-    {
-        Object returnedValue = this.evaluate(ref);
-        if (returnedValue != null)
-        {
-            Class expectedType = expectedValue.getClass();
-            Class returnedType = returnedValue.getClass();
-            String msg = "'" + ref + "' expected [" + expectedValue
-                    + "] of type " + expectedType.getName()
-                    + ", but returned [" + returnedValue + "] of type "
-                    + returnedType.getName();
-            assertTrue(msg, expectedType.isAssignableFrom(returnedType));
-            assertEquals(msg, expectedValue, returnedValue);
-        }
-        else
-        {
-            String msg = "'" + ref + "' expected value [" + expectedValue
-                    + "], but returned [" + returnedValue + "]";
-            assertEquals(msg, expectedValue, returnedValue);
-        }
-    }
-}
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/Factory.java b/jsf-ri/test/com/sun/faces/el/impl/beans/Factory.java
deleted file mode 100644
index 978e141..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/Factory.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- * 
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A factory for generating the various beans
- *
- * @author Nathan Abramson - Art Technology Group
- * @version $Change: 181181 $$DateTime: 2001/06/26 09:55:09 $$Author: ofung $
- */
-
-public class Factory {
-
-    public static PublicBean1 createBean1() {
-        return new PublicBean1();
-    }
-
-
-    public static PublicBean1 createBean2() {
-        return new PrivateBean1a();
-    }
-
-
-    public static PublicBean1 createBean3() {
-        return new PublicBean1b();
-    }
-
-
-    public static PublicInterface2 createBean4() {
-        return new PublicBean2a();
-    }
-
-
-    public static PublicInterface2 createBean5() {
-        return new PrivateBean2b();
-    }
-
-
-    public static PublicInterface2 createBean6() {
-        return new PrivateBean2c();
-    }
-
-
-    public static PublicInterface2 createBean7() {
-        return new PrivateBean2d();
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean1a.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean1a.java
deleted file mode 100644
index 968105f..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean1a.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- * 
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A private bean subclassing a public bean
- *
- * @author Nathan Abramson - Art Technology Group
- * @version $Change: 181181 $$DateTime: 2001/06/26 09:55:09 $$Author: ofung $
- */
-
-class PrivateBean1a
-    extends PublicBean1 {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2b.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2b.java
deleted file mode 100644
index d1a03d3..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2b.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A private implementation of a public interface
- *
- * @author Nathan Abramson - Art Technology Group
- */
-
-class PrivateBean2b
-    implements PublicInterface2 {
-
-    public Object getValue() {
-        return "got the value";
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2c.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2c.java
deleted file mode 100644
index a074c51..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2c.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- * 
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A private subclass of a public class impelementing a public
- * interface
- *
- * @author Nathan Abramson - Art Technology Group
- */
-
-class PrivateBean2c
-    extends PublicBean2a {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2d.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2d.java
deleted file mode 100644
index 20d58f1..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PrivateBean2d.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A private subclass of a private class impelementing a public
- * interface
- *
- * @author Nathan Abramson - Art Technology Group
- * @version $Change: 181181 $$DateTime: 2001/06/26 09:55:09 $$Author: ofung $
- */
-
-class PrivateBean2d
-    extends PrivateBean2b {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean1.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean1.java
deleted file mode 100644
index c213adc..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean1.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A publicly-accessible bean
- *
- * @author Nathan Abramson - Art Technology Group
- */
-
-public class PublicBean1 {
-
-    public Object getValue() {
-        return "got the value";
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean1b.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean1b.java
deleted file mode 100644
index d44ecca..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean1b.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A public bean subclassing a private bean subclassing a public
- * bean
- *
- * @author Nathan Abramson - Art Technology Group
- * @version $Change: 181181 $$DateTime: 2001/06/26 09:55:09 $$Author: ofung $
- */
-
-public class PublicBean1b
-    extends PrivateBean1a {
-
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean2a.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean2a.java
deleted file mode 100644
index e96b74e..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicBean2a.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A publicly-accessible implementation of a public interface
- *
- * @author Nathan Abramson - Art Technology Group
- */
-
-public class PublicBean2a
-    implements PublicInterface2 {
-
-    public Object getValue() {
-        return "got the value";
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicInterface2.java b/jsf-ri/test/com/sun/faces/el/impl/beans/PublicInterface2.java
deleted file mode 100644
index c5f42a6..0000000
--- a/jsf-ri/test/com/sun/faces/el/impl/beans/PublicInterface2.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.sun.faces.el.impl.beans;
-
-/**
- * <p>A publicly-accessible interface
- *
- * @author Nathan Abramson - Art Technology Group
- */
-
-public interface PublicInterface2 {
-
-    public Object getValue();
-}
diff --git a/jsf-ri/test/com/sun/faces/io/TestIO.java b/jsf-ri/test/com/sun/faces/io/TestIO.java
deleted file mode 100644
index 2ffa8c1..0000000
--- a/jsf-ri/test/com/sun/faces/io/TestIO.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.io;
-
-import com.sun.faces.application.ViewHandlerResponseWrapper;
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import javax.servlet.ServletOutputStream;
-
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-public class TestIO extends ServletFacesTestCase {
-    
-    public TestIO() {
-        super("TestIO");
-    }
-
-
-    public TestIO(String name) {
-        super(name);
-    }
-    
-    
-    // ------------------------------------------------------------ Test Methods
-    
-    
-    public void testBase64Streams() throws Exception {
-        // create a string over 2048 bytes in length
-        String testString = "This is a test String";
-        for (int i = testString.length(); i < 6000; i++) {
-            testString += 'a';
-        }
-        
-        StringWriter writer = new StringWriter();
-        Base64OutputStreamWriter sw = new Base64OutputStreamWriter(2048, writer);
-        ObjectOutputStream os = new ObjectOutputStream(sw);
-        os.writeObject(testString);
-        os.flush();
-        os.close();
-        sw.finish();
-        
-        String encodedString = writer.toString();
-        // no take the encodedString and reverse the operation
-        Base64InputStream bin = new Base64InputStream(encodedString);
-        ObjectInputStream input = new ObjectInputStream(bin);
-        
-        String result = (String) input.readObject();
-        input.close();
-        
-        assertTrue(result != null);
-        assertTrue(result.length() == testString.length());
-        assertTrue(testString.equals(result));
-                               
-    }
-
-
-    public void testViewHandlerResponseWrapperStreamIO() throws Exception {
-
-        ViewHandlerResponseWrapper w1 =
-              new ViewHandlerResponseWrapper(getResponse());
-        ServletOutputStream os = w1.getOutputStream();
-        os.write('1');
-        try {
-            w1.getWriter();
-            assertTrue(false);
-        } catch (IllegalStateException ise) {
-            // expected
-        }
-        os.flush();
-        os.close();
-        PrintWriter writer = null;
-        try {
-            writer = w1.getWriter();
-        } catch (IllegalStateException ise) {
-            assertTrue(false);
-        }
-
-        // we've closed the stream - and should have a fake
-        // writer.  Ensure writing to it doesn't impact the result;
-        writer.print("Some junk");
-        StringWriter buf = new StringWriter();
-        w1.flushToWriter(buf, "ISO-8859-1");
-        assertTrue(!buf.toString().contains("Some junk"));
-
-        // ensure that the content that was written to the stream is
-        // present
-        assertTrue("1".equals(buf.toString()));
-
-        w1 = new ViewHandlerResponseWrapper(getResponse());
-        os = w1.getOutputStream();
-        // flushBuffer should commit the response so getWriter()
-        // should throw no Exception
-        w1.flushBuffer();
-        try {
-            w1.getWriter();
-        } catch (IllegalStateException ise) {
-            assertTrue(false);
-        }
-
-    }
-
-    public void testViewHandlerResponseWrapperCharIO() throws Exception {
-
-        ViewHandlerResponseWrapper w1 =
-              new ViewHandlerResponseWrapper(getResponse());
-        PrintWriter pw = w1.getWriter();
-        pw.write("some stuff");
-        try {
-            w1.getOutputStream();
-            assertTrue(false);
-        } catch (IllegalStateException ise) {
-            // expected
-        }
-        pw.flush();
-        pw.close();
-        ServletOutputStream os = null;
-        try {
-            os = w1.getOutputStream();
-        } catch (IllegalStateException ise) {
-            assertTrue(false);
-        }
-
-        // we've closed the stream - and should have a fake
-        // writer.  Ensure writing to it doesn't impact the result;
-        os.write('1');
-        StringWriter buf = new StringWriter();
-        w1.flushToWriter(buf, "ISO-8859-1");
-        assertTrue(!buf.toString().contains("1"));
-
-        // ensure that the content that was written to the stream is
-        // present
-        assertTrue("some stuff".equals(buf.toString()));
-
-        w1 = new ViewHandlerResponseWrapper(getResponse());
-        pw = w1.getWriter();
-        // flushBuffer should commit the response so getWriter()
-        // should throw no Exception
-        w1.flushBuffer();
-        try {
-            w1.getOutputStream();
-        } catch (IllegalStateException ise) {
-            assertTrue(false);
-        }
-
-    }
-
-} // END TestIO
\ No newline at end of file
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestApplyRequestValuesPhase.java b/jsf-ri/test/com/sun/faces/lifecycle/TestApplyRequestValuesPhase.java
deleted file mode 100644
index ae06a63..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestApplyRequestValuesPhase.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestApplyRequestValuesPhase.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UICommand;
-
-/**
- * <B>TestApplyRequestValuesPhase</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestApplyRequestValuesPhase extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/components.jsp";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestApplyRequestValuesPhase() {
-        super("TestApplyRequestValuesPhase");
-    }
-
-
-    public TestApplyRequestValuesPhase(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void beginCallback(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-        theRequest.addParameter(
-            "basicForm" + NamingContainer.SEPARATOR_CHAR + "userName", "jerry");
-         theRequest.addParameter(
-            "basicForm" + NamingContainer.SEPARATOR_CHAR + "testCmd", "submit");
-          theRequest.addParameter(
-            "basicForm" + NamingContainer.SEPARATOR_CHAR + "testInt", "10");
-        theRequest.addParameter("basicForm", "basicForm");
-
-    }
-
-
-    public void testCallback() {
-        UIComponent root = null;
-        String value = null;
-        Phase
-            restoreView = new RestoreViewPhase(),
-            applyValues = new ApplyRequestValuesPhase();
-
-        // 1. Set the root of the view ...
-        //
-	root = getFacesContext().getApplication().getViewHandler().createView(getFacesContext(), TEST_URI);
-	getFacesContext().setViewRoot((UIViewRoot) root);
-	getFacesContext().renderResponse();
-
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-        assertTrue(null != getFacesContext().getViewRoot());
-
-        // 2. Add components to tree
-        //
-        root = getFacesContext().getViewRoot();
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-        userName.setId("userName");
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-
-        // 3. Apply values
-        //
-        applyValues.execute(getFacesContext());
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        root = getFacesContext().getViewRoot();
-        try {
-            userName = (UIInput) basicForm.findComponent("userName");
-        } catch (Throwable e) {
-            System.out.println(e.getMessage());
-            assertTrue("Can't find userName in tree", false);
-        }
-        assertTrue(null != userName);
-        assertTrue(null != (value = (String) userName.getSubmittedValue()));
-        assertTrue(value.equals("jerry"));
-        
-        testImmediate(basicForm);
-    }
-    
-    public void testImmediate(UIForm basicForm) {
-        
-        Phase
-            restoreView = new RestoreViewPhase(),
-            applyValues = new ApplyRequestValuesPhase();
-
-        
-         // add a UICommand with "immediate" attribute set
-        UICommand testCmd = new UICommand();
-        testCmd.setId("testCmd");
-        testCmd.setImmediate(true);
-        basicForm.getChildren().add(testCmd);
-        
-        //verify immediate attribute works correctly.
-        System.out.println("Testing 'immediate' attribute on UIInput and UICommand");
-        UIInput testInt = new UIInput();
-        testInt.setConverter(new javax.faces.convert.IntegerConverter());
-        testInt.setRequired(true);
-        testInt.setId("testInt");
-        testInt.setImmediate(true);
-        basicForm.getChildren().add(testInt); 
-        
-        // 3. Apply values
-        //
-        Integer testNumber = new Integer(10);
-        applyValues.execute(getFacesContext());
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        UIComponent root = getFacesContext().getViewRoot();
-        try {
-            testInt = (UIInput) basicForm.findComponent("testInt");
-        } catch (Throwable e) {
-            System.out.println(e.getMessage());
-            assertTrue("Can't find testInt in tree", false);
-        }
-        
-        //make sure the value is converted and validated after Apply request 
-        // values phase.
-        assertTrue(null != testInt);
-        assertTrue(null != testInt.getLocalValue());
-        assertTrue(testInt.isValid());
-        assertTrue(testNumber.equals((Integer) testInt.getValue()));
-        testInt.setValue(null);
-        
-        // immediate "false" on command button but set on UIInput
-        testCmd.setImmediate(false);
-        applyValues.execute(getFacesContext());
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        root = getFacesContext().getViewRoot();
-        try {
-            testInt = (UIInput) basicForm.findComponent("testInt");
-        } catch (Throwable e) {
-            System.out.println(e.getMessage());
-            assertTrue("Can't find testInt in tree", false);
-        }
-        
-        //make sure the value is converted and validated after Apply request 
-        // values phase.
-        assertTrue(null != testInt);
-        assertTrue(null != testInt.getLocalValue());
-        assertTrue(testInt.isValid());
-        assertTrue(testNumber.equals((Integer) testInt.getValue()));
-        testInt.setValue(null);
-        
-        // immediate "true" on command and not set on UIInput.
-        testInt.setImmediate(false);
-        testCmd.setImmediate(true);
-        applyValues.execute(getFacesContext());
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        root = getFacesContext().getViewRoot();
-        try {
-            testInt = (UIInput) basicForm.findComponent("testInt");
-        } catch (Throwable e) {
-            System.out.println(e.getMessage());
-            assertTrue("Can't find testInt in tree", false);
-        }
-        
-        //make sure the value is converted and validated after Apply request 
-        // values phase.
-        assertTrue(null != testInt);
-        assertTrue(null == testInt.getValue());
-        assertTrue(testInt.isValid());
-    }
-
-
-} // end of class TestApplyRequestValuesPhase
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestInvokeApplicationPhase.java b/jsf-ri/test/com/sun/faces/lifecycle/TestInvokeApplicationPhase.java
deleted file mode 100644
index 6c879ba..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestInvokeApplicationPhase.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestInvokeApplicationPhase.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import java.util.Locale;
-
-/**
- * <B>TestInvokeApplicationPhase</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestInvokeApplicationPhase extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String DID_COMMAND = "didCommand";
-    public static final String DID_FORM = "didForm";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestInvokeApplicationPhase() {
-        super("TestInvokeApplicationPhase");
-    }
-
-
-    public TestInvokeApplicationPhase(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testInvokeNormal() {
-    }
-
-
-    public void testInvokeNoOp() {
-        UIInput root = new UIInput();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setViewId("default.xul");
-        page.setLocale(Locale.US);
-        Phase invokeApplicationPhase = new InvokeApplicationPhase();
-        getFacesContext().setViewRoot(page);
-
-        invokeApplicationPhase.execute(getFacesContext());
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-    }
-
-} // end of class TestInvokeApplicationPhase
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleFactoryImpl.java b/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleFactoryImpl.java
deleted file mode 100644
index 1f0e968..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleFactoryImpl.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestLifecycleFactoryImpl.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.apache.cactus.ServletTestCase;
-
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-
-import java.util.Iterator;
-
-/**
- * <B>TestLifecycleFactoryImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestLifecycleFactoryImpl extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestLifecycleFactoryImpl() {
-        super("TestLifecycleFactoryImpl");
-    }
-
-
-    public TestLifecycleFactoryImpl(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testDefault() {
-        LifecycleFactoryImpl factory = new LifecycleFactoryImpl();
-        Lifecycle life = null, life2 = null;
-
-        assertTrue(factory != null);
-
-        // Make sure the default instance exists
-        life = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-        assertTrue(null != life);
-
-        // Make sure multiple requests for the same name give the same
-        // instance.
-        life2 = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
-        assertTrue(life == life2);
-    }
-
-
-    public void testIdIterator() {
-        LifecycleFactoryImpl factory = new LifecycleFactoryImpl();
-
-        String
-            l1 = "l1",
-            l2 = "l2",
-            l3 = "l3";
-        LifecycleImpl
-            life1 = new LifecycleImpl(),
-            life2 = new LifecycleImpl(),
-            life3 = new LifecycleImpl();
-        int i = 0;
-        Iterator iter = null;
-
-        factory.addLifecycle(l1, life1);
-        factory.addLifecycle(l2, life2);
-        factory.addLifecycle(l3, life3);
-
-        iter = factory.getLifecycleIds();
-        while (iter.hasNext()) {
-            iter.next();
-            i++;
-        }
-
-        assertTrue(4 == i);
-    }
-
-
-    public void testIllegalArgumentException() {
-        LifecycleFactoryImpl factory = new LifecycleFactoryImpl();
-        Lifecycle life = null;
-        assertTrue(factory != null);
-
-        boolean exceptionThrown = false;
-        // Try to get an IllegalArgumentException
-        try {
-            LifecycleImpl lifecycle = new LifecycleImpl();
-            factory.addLifecycle("bogusId", lifecycle);
-            factory.addLifecycle("bogusId", lifecycle);
-        } catch (IllegalArgumentException e) {
-            exceptionThrown = true;
-        } catch (UnsupportedOperationException e) {
-            assertTrue(false);
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-} // end of class TestLifecycleFactoryImpl
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleImpl.java b/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleImpl.java
deleted file mode 100644
index 59719d1..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleImpl.java
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestLifecycleImpl.java
-
-package com.sun.faces.lifecycle;
-
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ExceptionHandler;
-import javax.faces.context.ExceptionHandlerFactory;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.webapp.PreJsf2ExceptionHandlerFactory;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.util.Util;
-import com.sun.faces.context.ExceptionHandlerImpl;
-
-import org.apache.cactus.WebRequest;
-
-import java.util.Locale;
-
-/**
- * <B>TestLifecycleImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestLifecycleImpl extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/TestLifecycleImpl.html";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-    protected static LifecycleImpl sharedLifecycleImpl = null;
-    protected static PhaseListenerImpl sharedListener = null;
-
-//
-// Constructors and Initializers    
-//
-
-    public TestLifecycleImpl() {
-        super("TestLifecycleImpl");
-    }
-
-
-    public TestLifecycleImpl(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    protected LifecycleImpl getSharedLifecycleImpl() {
-        if (null == sharedLifecycleImpl) {
-            sharedLifecycleImpl = new LifecycleImpl();
-        }
-        return sharedLifecycleImpl;
-    }
-
-
-    protected PhaseListenerImpl getSharedPhaseListenerImpl() {
-        return sharedListener;
-    }
-
-
-    protected void initWebRequest(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-	theRequest.addParameter("javax.faces.ViewState",
-				"H4sIAAAAAAAAAFvzloG1hIElPjPFsAAAhLx/NgwAAAA=");
-    }
-
-
-    public void setUp() {
-        super.setUp();
-	FacesContext context = getFacesContext();
-        UIViewRoot root = Util.getViewHandler(context).createView(context, null);
-        root.setLocale(Locale.US);
-        root.setViewId(TEST_URI);
-	context.setViewRoot(root);
-	
-
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-
-        userName.setId("userName");
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-
-	// here we do what the StateManager does to save the state in
-	// the server.
-	Util.getStateManager(context).saveSerializedView(context);
-
-    }
-
-
-    public void beginAnyPhaseWithListenerAndValidationFailure(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-
-    public void testAnyPhaseWithListenerAndValidationFailure() {
-        LifecycleImpl life = getSharedLifecycleImpl();
-        final int[] phaseCalled = new
-            int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int i;
-        for (i = 1; i < phaseCalled.length; i++) {
-            phaseCalled[i] = 0;
-        }
-
-        sharedListener = new PhaseListenerImpl(phaseCalled, PhaseId.ANY_PHASE,
-                                               PhaseId.PROCESS_VALIDATIONS);
-        life.addPhaseListener(sharedListener);
-
-        try {
-            life.execute(getFacesContext());
-            life.render(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(e.getMessage(), false);
-        }
-
-        for (i = 1; i < phaseCalled.length; i++) {
-            // i is restore_view, apply_request, process_val, or render_resp
-            if (((1 <= i) && (i <= 3)) || (i == 6)) {
-                assertTrue(
-                    "Expected 2 for phase " + i + ", got " + phaseCalled[i] +
-                    ".",
-
-                    phaseCalled[i] == 2);
-            } else {
-                assertTrue("For phase: " + PhaseId.VALUES.get(i) +
-                           " expected no calls, got " + phaseCalled[i] + ".",
-                           phaseCalled[i] == 0);
-            }
-        }
-    }
-
-
-    public void beginAnyPhaseWithListener(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-
-    public void testAnyPhaseWithListener() {
-        LifecycleImpl life = getSharedLifecycleImpl();
-        final int[] phaseCalled = new
-            int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int i;
-        for (i = 1; i < phaseCalled.length; i++) {
-            phaseCalled[i] = 0;
-        }
-
-        life.removePhaseListener(sharedListener);
-        sharedListener = new PhaseListenerImpl(phaseCalled, PhaseId.ANY_PHASE,
-                                               null);
-        life.addPhaseListener(sharedListener);
-
-        try {
-            life.execute(getFacesContext());
-            life.render(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(e.getMessage(), false);
-        }
-
-        for (i = 1; i < phaseCalled.length; i++) {
-            assertTrue(phaseCalled[i] == 2);
-        }
-    }
-
-
-    public void beginAnyPhaseWithoutListener(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-
-    public void testAnyPhaseWithoutListener() {
-        assertTrue(null != sharedListener);
-
-        LifecycleImpl life = getSharedLifecycleImpl();
-        final int[] phaseCalled = sharedListener.getPhaseCalled();
-        int i;
-
-        life.removePhaseListener(sharedListener);
-
-        try {
-            life.execute(getFacesContext());
-            life.render(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(e.getMessage(), false);
-        }
-
-        // make sure the listener wasn't called
-        for (i = 1; i < phaseCalled.length; i++) {
-            assertTrue(phaseCalled[i] == 2);
-        }
-
-    }
-
-
-    public void beginValidateWithListener(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-
-    public void testValidateWithListener() {
-        LifecycleImpl life = getSharedLifecycleImpl();
-        final int[] phaseCalled = new
-            int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int i;
-        for (i = 1; i < phaseCalled.length; i++) {
-            phaseCalled[i] = 0;
-        }
-
-        sharedListener = new PhaseListenerImpl(phaseCalled,
-                                               PhaseId.PROCESS_VALIDATIONS,
-                                               null);
-        life.addPhaseListener(sharedListener);
-
-        try {
-            life.execute(getFacesContext());
-            life.render(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(e.getMessage(), false);
-        }
-
-        for (i = 1; i < phaseCalled.length; i++) {
-            if (PhaseId.PROCESS_VALIDATIONS.getOrdinal() == i) {
-                assertTrue(phaseCalled[i] == 2);
-            } else {
-                assertTrue(phaseCalled[i] == 0);
-            }
-        }
-    }
-
-
-    public void beginValidateWithoutListener(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-
-    public void testValidateWithoutListener() {
-        assertTrue(null != sharedListener);
-
-        LifecycleImpl life = getSharedLifecycleImpl();
-        final int[] phaseCalled = sharedListener.getPhaseCalled();
-        int i;
-
-        life.removePhaseListener(sharedListener);
-
-        try {
-            life.execute(getFacesContext());
-            life.render(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(e.getMessage(), false);
-        }
-
-        // make sure the listener wasn't called
-        for (i = 1; i < phaseCalled.length; i++) {
-            if (PhaseId.PROCESS_VALIDATIONS.getOrdinal() == i) {
-                assertTrue(phaseCalled[i] == 2);
-            } else {
-                assertTrue(phaseCalled[i] == 0);
-            }
-        }
-
-    }
-
-    public void beginBeforeListenerExceptionJsf12(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-    public void testBeforeListenerExceptionJsf12() {
-        ExceptionHandlerFactory f = new PreJsf2ExceptionHandlerFactory();
-        testBeforeListenerException(f.getExceptionHandler(), false);
-    }
-
-    public void beginBeforeListenerExceptionJsf20(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-    public void testBeforeListenerExceptionJsf20() {
-        testBeforeListenerException(new ExceptionHandlerImpl(), true);
-    }
-
-
-    public void testBeforeListenerException(ExceptionHandler handler, boolean expectException) {
-        assertTrue(null != sharedListener);
-        getFacesContext().setExceptionHandler(handler);
-        LifecycleImpl life = getSharedLifecycleImpl();
-        int[] phaseCalledA = new int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int[] phaseCalledB = new int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int[] phaseCalledC = new int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int i;
-        for (i = 1; i < phaseCalledA.length; i++) {
-            phaseCalledA[i] = 0;
-            phaseCalledB[i] = 0;
-            phaseCalledC[i] = 0;
-        }
-
-
-        life.removePhaseListener(sharedListener);
-
-        PhaseListenerImpl
-              a = new PhaseListenerImpl(phaseCalledA,
-                                        PhaseId.APPLY_REQUEST_VALUES,
-                                        PhaseId.PROCESS_VALIDATIONS),
-              b = new PhaseListenerImpl(phaseCalledB,
-                                        PhaseId.APPLY_REQUEST_VALUES,
-                                        PhaseId.PROCESS_VALIDATIONS),
-              c = new PhaseListenerImpl(phaseCalledC,
-                                        PhaseId.APPLY_REQUEST_VALUES,
-                                        PhaseId.PROCESS_VALIDATIONS);
-        b.setThrowExceptionOnBefore(true);
-        life.addPhaseListener(a);
-        life.addPhaseListener(b);
-        life.addPhaseListener(c);
-
-        try {
-            life.execute(getFacesContext());
-            life.render(getFacesContext());
-            if (expectException) {
-                assertTrue(false);
-            }
-        } catch (Throwable e) {
-            if (!expectException) {
-                assertTrue(false);
-                e.printStackTrace();
-            }
-        }
-
-        // verify before and after for "a" were called.
-        assertEquals(2,
-                     phaseCalledA[PhaseId.APPLY_REQUEST_VALUES.getOrdinal()]);
-        // verify before for "b" was called, but the after was not
-        assertEquals(1,
-                     phaseCalledB[PhaseId.APPLY_REQUEST_VALUES.getOrdinal()]);
-        // verify that neither before nor after for "c" were called
-        assertEquals(0,
-                     phaseCalledC[PhaseId.APPLY_REQUEST_VALUES.getOrdinal()]);
-
-        life.removePhaseListener(a);
-        life.removePhaseListener(b);
-        life.removePhaseListener(c);
-    }
-
-    public void beginAfterListenerExceptionJsf12(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-    public void testAfterListenerExceptionJsf12() {
-        ExceptionHandlerFactory f = new PreJsf2ExceptionHandlerFactory();
-        testAfterListenerException(f.getExceptionHandler(), false);
-    }
-
-    public void beginAfterListenerExceptionJsf20(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-    public void testAfterListenerExceptionJsf20() {
-        testAfterListenerException(new ExceptionHandlerImpl(), true);
-    }
-
-    public void testAfterListenerException(ExceptionHandler handler, boolean expectException) {
-        assertTrue(null != sharedListener);
-        getFacesContext().setExceptionHandler(handler);
-        LifecycleImpl life = getSharedLifecycleImpl();
-        int[] phaseCalledA = new int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int[] phaseCalledB = new int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int[] phaseCalledC = new int[PhaseId.RENDER_RESPONSE.getOrdinal() + 1];
-        int i;
-        for (i = 1; i < phaseCalledA.length; i++) {
-            phaseCalledA[i] = 0;
-            phaseCalledB[i] = 0;
-            phaseCalledC[i] = 0;
-        }
-
-
-        life.removePhaseListener(sharedListener);
-
-        PhaseListenerImpl
-              a = new PhaseListenerImpl(phaseCalledA,
-                                        PhaseId.APPLY_REQUEST_VALUES,
-                                        PhaseId.PROCESS_VALIDATIONS),
-              b = new PhaseListenerImpl(phaseCalledB,
-                                        PhaseId.APPLY_REQUEST_VALUES,
-                                        PhaseId.PROCESS_VALIDATIONS),
-              c = new PhaseListenerImpl(phaseCalledC,
-                                        PhaseId.APPLY_REQUEST_VALUES,
-                                        PhaseId.PROCESS_VALIDATIONS);
-        b.setThrowExceptionOnAfter(true);
-        life.addPhaseListener(a);
-        life.addPhaseListener(b);
-        life.addPhaseListener(c);
-
-        try {
-            life.execute(getFacesContext());
-            life.render(getFacesContext());
-            if (expectException) {
-                assertTrue(false);
-            }
-        } catch (Throwable e) {
-            if (!expectException) {
-                assertTrue(false);
-                e.printStackTrace();
-            }
-        }
-
-        // verify before and after for "a" were called.
-        assertEquals(1,
-                     phaseCalledA[PhaseId.APPLY_REQUEST_VALUES.getOrdinal()]);
-        // verify before for "b" was called, but the after was not
-        assertEquals(2,
-                     phaseCalledB[PhaseId.APPLY_REQUEST_VALUES.getOrdinal()]);
-        // verify that neither before nor after for "c" were called
-        assertEquals(2,
-                     phaseCalledC[PhaseId.APPLY_REQUEST_VALUES.getOrdinal()]);
-
-        life.removePhaseListener(a);
-        life.removePhaseListener(b);
-        life.removePhaseListener(c);
-    }
-
-
-    class PhaseListenerImpl implements PhaseListener {
-
-        int[] phaseCalled = null;
-        PhaseId phaseId = null;
-        PhaseId callRenderResponseBeforeThisPhase = null;
-
-
-        public int[] getPhaseCalled() {
-            return phaseCalled;
-        }
-
-	boolean throwExceptionOnBefore = false;
-	boolean throwExceptionOnAfter = false;
-
-	public void setThrowExceptionOnBefore(boolean newValue) {
-	    throwExceptionOnBefore = newValue;
-	}
-
-	public void setThrowExceptionOnAfter(boolean newValue) {
-	    throwExceptionOnAfter = newValue;
-	}
-	    
-
-
-        public PhaseListenerImpl(int[] newPhaseCalled, PhaseId newPhaseId, PhaseId yourCallRenderResponseBeforeThisPhase) {
-            phaseCalled = newPhaseCalled;
-            phaseId = newPhaseId;
-            callRenderResponseBeforeThisPhase =
-                yourCallRenderResponseBeforeThisPhase;
-        }
-
-        public void afterPhase(PhaseEvent event) {
-            phaseCalled[event.getPhaseId().getOrdinal()] =
-                phaseCalled[event.getPhaseId().getOrdinal()] + 1;
-	    if (throwExceptionOnAfter) {
-		throw new IllegalStateException("throwing exception on after " +
-						event.getPhaseId().toString());
-	    }
-        }
-
-        public void beforePhase(PhaseEvent event) {
-            phaseCalled[event.getPhaseId().getOrdinal()] =
-                phaseCalled[event.getPhaseId().getOrdinal()] + 1;
-            if (callRenderResponseBeforeThisPhase == event.getPhaseId()) {
-                FacesContext.getCurrentInstance().renderResponse();
-            }
-	    if (throwExceptionOnBefore) {
-		throw new IllegalStateException("throwing exception on before " +
-						event.getPhaseId().toString());
-	    }
-
-        }
-
-
-        public PhaseId getPhaseId() {
-            return phaseId;
-        }
-
-    }
-
-} // end of class TestLifecycleImpl
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleImpl_initial.java b/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleImpl_initial.java
deleted file mode 100644
index 2c452f7..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleImpl_initial.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestLifecycleImpl_initial.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.FacesException;
-import javax.faces.application.ViewHandler;
-
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * <B>TestLifecycleImpl_initial</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestLifecycleImpl_initial extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/greeting.jsp";
-
-
-    public String getExpectedOutputFilename() {
-        return "TestLifecycleImpl_initial_correct";
-    }
-
-
-    public static final String ignore[] = {
-    };
-
-
-    public String[] getLinesToIgnore() {
-        return ignore;
-    }
-
-
-    public boolean sendResponseToFile() {
-        return true;
-    }
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestLifecycleImpl_initial() {
-        super("TestLifecycleImpl_initial");
-    }
-
-
-    public TestLifecycleImpl_initial(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-
-    protected void initWebRequest(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-    }
-
-
-    public void beginExecuteInitial(WebRequest theRequest) {
-        initWebRequest(theRequest);
-    }
-
-
-    public void testExecuteInitial() {
-        boolean result = false;
-        LifecycleImpl life = new LifecycleImpl();
-
-	Object oldRequest = facesService.wrapRequestToHideParameters();
-        ViewHandler vh = getFacesContext().getApplication().getViewHandler();
-        getFacesContext().setViewRoot(vh.createView(getFacesContext(), "/greeting.jsp"));
-
-        try {
-            life.execute(getFacesContext());
-	    facesService.unwrapRequestToShowParameters(oldRequest);
-            life.render(getFacesContext());
-        } catch (FacesException e) {
-            System.err.println("Root Cause: " + e.getCause());
-            if (null != e.getCause()) {
-                e.getCause().printStackTrace();
-            } else {
-                e.printStackTrace();
-            }
-
-            assertTrue(e.getMessage(), false);
-        }
-
-        assertTrue(verifyExpectedOutput());
-
-    }
-
-
-} // end of class TestLifecycleImpl_initial
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestPhase.java b/jsf-ri/test/com/sun/faces/lifecycle/TestPhase.java
deleted file mode 100644
index 239bfd5..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestPhase.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestPhase.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import java.util.Locale;
-
-
-/**
- * <B>TestPhase</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestPhase extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/components.jsp";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestPhase() {
-        super("TestPhase");
-    }
-
-
-    public TestPhase(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void beginExecute(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-        theRequest.addParameter(
-            "basicForm" + NamingContainer.SEPARATOR_CHAR + "userName", "jerry");
-    }
-
-
-    public void testExecute() {
-
-        Phase restoreView = new RestoreViewPhase();
-	Object oldRequest = facesService.wrapRequestToHideParameters();
-	
-        try {
-            restoreView.execute(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-
-	facesService.unwrapRequestToShowParameters(oldRequest);
-
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-        assertTrue(null != getFacesContext().getViewRoot());
-
-        // 2. Add components to tree
-        //
-        UIComponent root = getFacesContext().getViewRoot();
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-        userName.setId("userName");
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.getChildren().add(basicForm);
-        page.setViewId("root");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-
-        Phase applyValues = new ApplyRequestValuesPhase();
-
-        try {
-            applyValues.execute(getFacesContext());
-        } catch (Throwable e) {
-            System.out.println("Throwable: " + e.getMessage());
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-    }
-
-} // end of class TestPhase
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestProcessEvents.java b/jsf-ri/test/com/sun/faces/lifecycle/TestProcessEvents.java
deleted file mode 100644
index 645ddac..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestProcessEvents.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestProcessEvents.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.UICommand;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.event.ActionEvent;
-import javax.faces.event.ActionListener;
-import javax.faces.event.ValueChangeEvent;
-import javax.faces.event.ValueChangeListener;
-
-import java.util.HashMap;
-import java.util.Locale;
-
-/**
- * <B>TestProcessEvents</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestProcessEvents extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String HANDLED_VALUEEVENT1 = "handledValueEvent1";
-    public static final String HANDLED_VALUEEVENT2 = "handledValueEvent2";
-    public static final String HANDLED_ACTIONEVENT1 = "handledActionEvent1";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// keeps track of total number of events processed
-// per event source component
-
-    public HashMap eventsProcessed = null;
-    public String limit = null;
-    public int eventLimit = 100; // some default;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestProcessEvents() {
-        super("TestProcessEvents");
-    }
-
-
-    public TestProcessEvents(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void setUp() {
-        super.setUp();
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        root.setLocale(Locale.US);
-        getFacesContext().setViewRoot(root);
-    }
-
-
-    public void tearDown() {        
-        super.tearDown();
-    }
-
-// tests one component - one value change listener
-
-    public void testSingleValueChange() {
-        // for keeping track of events processed limit..
-        //
-        eventsProcessed = new HashMap();
-
-        UIInput userName = new UIInput();
-        getFacesContext().getViewRoot().getChildren().add(userName);
-
-        // clear the property
-        System.setProperty(HANDLED_VALUEEVENT1, EMPTY);
-
-        // add valueChangeListener to the component
-
-        ValueChange1 valueChange1 = new ValueChange1();
-        userName.addValueChangeListener(valueChange1);
-
-        // add value change event (containing the component) to the queue
-
-        userName.queueEvent(new ValueChangeEvent(userName, "foo", "bar"));
-
-        getFacesContext().getViewRoot().processValidators(getFacesContext());
-
-        assertTrue(!System.getProperty(HANDLED_VALUEEVENT1).equals(EMPTY));
-    }
-
-// tests one component - multiple value change listeners
-
-    public void testMultipleValueChange() {
-        // for keeping track of events processed limit..
-        //
-        eventsProcessed = new HashMap();
-
-        UIInput userName = new UIInput();
-        getFacesContext().getViewRoot().getChildren().add(userName);
-
-        // clear the property
-        System.setProperty(HANDLED_VALUEEVENT1, EMPTY);
-        System.setProperty(HANDLED_VALUEEVENT2, EMPTY);
-
-        // add valueChangeListener to the component
-
-        ValueChange1 valueChange1 = new ValueChange1();
-        ValueChange2 valueChange2 = new ValueChange2();
-        userName.addValueChangeListener(valueChange1);
-        userName.addValueChangeListener(valueChange2);
-
-        // add value change event (containing the component) to the queue
-
-        userName.queueEvent(new ValueChangeEvent(userName, "foo", "bar"));
-
-        getFacesContext().getViewRoot().processValidators(getFacesContext());
-
-        assertTrue(!System.getProperty(HANDLED_VALUEEVENT1).equals(EMPTY));
-        assertTrue(!System.getProperty(HANDLED_VALUEEVENT2).equals(EMPTY));
-    }
-
-
-    /**
-     * ********************
-     * PENDING() perhaps reactivate this if the EG wants event loop detection.
-     * <p/>
-     * <p/>
-     * // tests event recursion - infinite loop
-     * // ValueChangeEvent will fire back the same event it received..
-     * <p/>
-     * public void testValueChangeRecursion()
-     * {
-     * // for keeping track of events processed limit..
-     * //
-     * eventsProcessed = new HashMap();
-     * <p/>
-     * UIInput userName = new UIInput();
-     * <p/>
-     * // add valueChangeListener to the component
-     * <p/>
-     * ValueChangeRecursion valueChange = new ValueChangeRecursion();
-     * userName.addValueChangeListener(valueChange);
-     * <p/>
-     * // add value change event (containing the component) to the queue
-     * <p/>
-     * userName.queueEvent(new ValueChangeEvent(
-     * userName, "foo", "bar"));
-     * <p/>
-     * PhaseId phaseId = PhaseId.PROCESS_VALIDATIONS;
-     * boolean exceptionthrown = false;
-     * try {
-     * processEvents(getFacesContext(), phaseId);
-     * } catch (Throwable e) {
-     * System.out.println(e.getMessage());
-     * exceptionthrown = true;
-     * }
-     * <p/>
-     * assertTrue(exceptionthrown);
-     * }
-     * ************************
-     */
-
-// tests one component - one action listener
-
-    public void beginSignleAction(WebRequest theRequest) {
-        theRequest.addParameter("button1", "button1");
-    }
-
-
-    public void testSingleAction() {
-        // for keeping track of events processed limit..
-        //
-        eventsProcessed = new HashMap();
-
-        UICommand button = new UICommand();
-        button.setId("button1");
-        getFacesContext().getViewRoot().getChildren().add(button);
-
-        // clear the property
-        System.setProperty(HANDLED_ACTIONEVENT1, EMPTY);
-
-        // add actionListener to the component
-
-        Action1 action1 = new Action1();
-        button.addActionListener(action1);
-        button.setImmediate(true);
-
-        // add action event (containing the component) to the queue
-
-        button.queueEvent(new ActionEvent(button));
-
-        getFacesContext().getViewRoot().processDecodes(getFacesContext());
-
-        assertTrue(!System.getProperty(HANDLED_ACTIONEVENT1).equals(EMPTY));
-    }
-
-
-    /**
-     * ***********************
-     * PENDING() perhaps reactivate this if the EG wants event loop detection.
-     * <p/>
-     * // tests event recursion - infinite loop
-     * // ActionEvent will fire back the same event it received..
-     * <p/>
-     * public void testActionRecursion()
-     * {
-     * // for keeping track of events processed limit..
-     * //
-     * eventsProcessed = new HashMap();
-     * <p/>
-     * UICommandSub button = new UICommandSub();
-     * // make sure we have no listeners.
-     * List[] listeners = button.getListeners();
-     * for (int i = 0, len = listeners.length; i < len; i++) {
-     * if (null != listeners[i]) {
-     * listeners[i].clear();
-     * }
-     * }
-     * <p/>
-     * // add actionListener to the component
-     * ActionRecursion action = new ActionRecursion();
-     * button.addActionListener(action);
-     * <p/>
-     * // add action event (containing the component) to the queue
-     * <p/>
-     * button.queueEvent(new ActionEvent(button));
-     * <p/>
-     * PhaseId phaseId = PhaseId.APPLY_REQUEST_VALUES;
-     * boolean exceptionthrown = false;
-     * try {
-     * processEvents(getFacesContext(), phaseId);
-     * } catch (Throwable t) {
-     * System.out.println("Action Exception:"+t.getMessage());
-     * exceptionthrown = true;
-     * }
-     * <p/>
-     * assertTrue(exceptionthrown);
-     * }
-     * <p/>
-     * private boolean limitReached(UIComponent source, HashMap eventsProcessed) {
-     * if (!eventsProcessed.containsKey(source)) {
-     * eventsProcessed.put(source, new Integer(1));
-     * return false;
-     * }
-     * <p/>
-     * int count = ((Integer)eventsProcessed.get(source)).intValue()+1;
-     * if (limit != null) {
-     * eventLimit = new Integer(limit).intValue();
-     * }
-     * if (count > eventLimit) {
-     * return true;
-     * }
-     * <p/>
-     * eventsProcessed.put(source, new Integer(count));
-     * return false;
-     * }
-     * ********************
-     */
-
-    public class ValueChange1 implements ValueChangeListener {
-
-        public void processValueChange(ValueChangeEvent event) {
-            System.setProperty(HANDLED_VALUEEVENT1, HANDLED_VALUEEVENT1);
-        }
-    }
-
-    public class ValueChange2 implements ValueChangeListener {
-
-        public void processValueChange(ValueChangeEvent event) {
-            System.setProperty(HANDLED_VALUEEVENT2, HANDLED_VALUEEVENT2);
-        }
-    }
-
-
-    /**
-     * ***********
-     * PENDING() perhaps reactivate this if the EG wants event loop detection.
-     * <p/>
-     * // event recursion case - fires same event it received..
-     * <p/>
-     * public class ValueChangeRecursion implements ValueChangeListener {
-     * public void processValueChange(ValueChangeEvent event) {
-     * getFacesContext().addFacesEvent(new ValueChangeEvent(
-     * event.getComponent(), "foo", "bar"));
-     * }
-     * }
-     * *************
-     */
-
-    public class Action1 implements ActionListener {
-
-        public void processAction(ActionEvent event) {
-            System.setProperty(HANDLED_ACTIONEVENT1, HANDLED_ACTIONEVENT1);
-        }
-    }
-
-
-    /**************
-     * PENDING() perhaps reactivate this if the EG wants event loop detection.
-
-     // event recursion case - fires same event it received..
-
-     public class ActionRecursion implements ActionListener {
-     public void processAction(ActionEvent event) {
-     getFacesContext().addFacesEvent(new ActionEvent(
-     event.getComponent()));
-     }
-     }
-
-     *****************/
-
-} // end of class TestProcessEvents
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestProcessValidationsPhase.java b/jsf-ri/test/com/sun/faces/lifecycle/TestProcessValidationsPhase.java
deleted file mode 100644
index 1e9e21a..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestProcessValidationsPhase.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestProcessValidationsPhase.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIInput;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.Validator;
-
-import java.util.Iterator;
-
-/**
- * <B>TestProcessValidationsPhase</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestProcessValidationsPhase extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/components.jsp";
-
-    public static final String DID_VALIDATE = "didValidate";
-    public static UIInput userName = null;
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestProcessValidationsPhase() {
-        super("TestProcessValidationsPhase");
-    }
-
-
-    public TestProcessValidationsPhase(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void beginCallback(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-        theRequest.addParameter(
-            "basicForm" + NamingContainer.SEPARATOR_CHAR + "userName", "jerry");
-        theRequest.addParameter("basicForm", "basicForm");
-    }
-
-
-    public void testCallback() {
-        UIComponent root = null;
-        userName = null;
-        String value = null;
-        Phase
-            applyValues = new ApplyRequestValuesPhase(),
-            processValidations = new ProcessValidationsPhase();
-
-	root = getFacesContext().getApplication().getViewHandler().createView(getFacesContext(), TEST_URI);
-	getFacesContext().setViewRoot((UIViewRoot) root);
-	getFacesContext().renderResponse();
-
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-        assertTrue(null != getFacesContext().getViewRoot());
-
-        root = getFacesContext().getViewRoot();
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName1 = new UIInput();
-        userName1.setId("userName");
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName1);
-
-        // clear the property
-        System.setProperty(DID_VALIDATE, EMPTY);
-
-        try {
-            userName =
-                (UIInput) root.findComponent(
-                    "basicForm" + NamingContainer.SEPARATOR_CHAR + "userName");
-        } catch (Throwable e) {
-            System.out.println(e.getMessage());
-            assertTrue("Can't find userName in tree", false);
-        }
-
-        // add the validator
-        Validator validator = new Validator() {
-            public Iterator getAttributeNames() {
-                return null;
-            }
-
-
-            public void validate(FacesContext context, UIComponent component, Object value) {
-                assertTrue(component == userName);
-                System.setProperty(DID_VALIDATE, DID_VALIDATE);
-                return;
-            }
-        };
-        userName.addValidator(validator);
-
-        assertTrue(userName.isValid());
-
-        applyValues.execute(getFacesContext());
-        assertTrue((getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        processValidations.execute(getFacesContext());
-        assertTrue(!System.getProperty(DID_VALIDATE).equals(EMPTY));
-        assertTrue(userName.isValid());
-        assertTrue(null == userName.getSubmittedValue());
-        assertTrue("jerry".equals(userName.getValue()));
-        System.setProperty(DID_VALIDATE, EMPTY);
-    }
-
-} // end of class TestProcessValidationsPhase
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestRenderResponsePhase.java b/jsf-ri/test/com/sun/faces/lifecycle/TestRenderResponsePhase.java
deleted file mode 100644
index 0efedb7..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestRenderResponsePhase.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestRenderResponsePhase.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.FileOutputResponseWrapper;
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.PreRenderViewEvent;
-import javax.faces.event.SystemEvent;
-import javax.faces.event.SystemEventListener;
-import java.io.File;
-import java.util.Locale;
-
-/**
- * <B>TestRenderResponsePhase</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestRenderResponsePhase extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/TestRenderResponsePhase.jsp";
-
-
-    public String getExpectedOutputFilename() {
-        return "RenderResponse_correct";
-    }
-
-
-    public static final String ignore[] = {
-    };
-
-
-    public String[] getLinesToIgnore() {
-        return ignore;
-    }
-
-
-    public boolean sendResponseToFile() {
-        return true;
-    }
-
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestRenderResponsePhase() {
-        super("TestRenderResponsePhase");
-    }
-
-
-    public TestRenderResponsePhase(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-
-    public void beginHtmlBasicRenderKit(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-    }
-
-
-    public void testHtmlBasicRenderKit() {
-
-        Phase renderResponse = new RenderResponsePhase();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setId("root");
-        page.setViewId(TEST_URI);
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-
-        try {
-            renderResponse.execute(getFacesContext());
-        } catch (FacesException fe) {
-            System.out.println(fe.getMessage());
-            if (null != fe.getCause()) {
-                fe.getCause().printStackTrace();
-            } else {
-                fe.printStackTrace();
-            }
-        }
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                !(getFacesContext().getResponseComplete()));
-
-        assertTrue(verifyExpectedOutput());
-    }
-
-    public void beginShortCircuitRenderResponse(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-    }
-
-    public void testShortCircuitRenderResponse() {
-
-        SystemEventListener listener = new TestListener(getFacesContext());
-        Application application = getFacesContext().getApplication();
-        application.subscribeToEvent(PreRenderViewEvent.class, listener);
-
-        Phase renderResponse = new RenderResponsePhase();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setId("root");
-        page.setViewId(TEST_URI);
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-
-        try {
-            renderResponse.execute(getFacesContext());
-        } catch (FacesException fe) {
-            System.out.println(fe.getMessage());
-            if (null != fe.getCause()) {
-                fe.getCause().printStackTrace();
-            } else {
-                fe.printStackTrace();
-            }
-        }
-
-        assertTrue(getFacesContext().getResponseComplete());
-        File renderedOutputFile = new File(FileOutputResponseWrapper.FACES_RESPONSE_FILENAME);
-        assertTrue(renderedOutputFile.length() == 0);
-    }
-
-    private static final class TestListener
-        implements SystemEventListener {
-
-        private FacesContext context = null;
-
-        private Class<?> sourceFor;
-        private Object passedSource;
-        private boolean forSourceInvoked;
-
-
-        public TestListener(FacesContext context) {
-            this.context = context;
-        }
-
-        public void processEvent(SystemEvent event)
-            throws AbortProcessingException {
-            context.responseComplete();
-        }
-
-        public boolean isListenerForSource(Object source) {
-            forSourceInvoked = true;
-            passedSource = source;
-            if (sourceFor == null) {
-                return (source != null);
-            } else {
-                return sourceFor.isInstance(source);
-            }
-        }
-
-    }
-
-} // end of class TestRenderResponsePhase
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestRestoreViewFromPage.java b/jsf-ri/test/com/sun/faces/lifecycle/TestRestoreViewFromPage.java
deleted file mode 100644
index 89087d1..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestRestoreViewFromPage.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestRestoreViewFromPage.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.CompareFiles;
-import com.sun.faces.cactus.FileOutputResponseWriter;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.render.RenderKitFactory;
-
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * <B>TestRestoreViewFromPage</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestRestoreViewFromPage extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    public static final String TEST_URI = "/greeting.jsp";
-    public static final String RESTORE_VIEW_OUTPUT_FILE = FileOutputResponseWriter.FACES_RESPONSE_ROOT +
-        "RestoreView_output";
-    public static final String RESTORE_VIEW_CORRECT_FILE = FileOutputResponseWriter.FACES_RESPONSE_ROOT +
-        "RestoreView_correct";
-
-    public static final String ignore[] = {
-        "value=[Ljava.lang.Object;@14a18d"
-    };
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestRestoreViewFromPage() {
-        super("TestRestoreViewFromPage");
-    }
-
-
-    public TestRestoreViewFromPage(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void beginRestoreViewFromPage(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-        theRequest.addParameter("javax.faces.ViewState",
-                                "rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAcHQAJmphdmF4LmZhY2VzLmNvbXBvbmVudC5iYXNlLlVJSW5wdXRCYXNlcHQABnVzZXJOb3NxAH4AAHB0AChqYXZheC5mYWNlcy5jb21wb25lbnQuYmFzZS5VSUNvbW1hbmRCYXN [...]
-    }
-
-
-    public void testRestoreViewFromPage() {
-        Phase restoreView = new RestoreViewPhase();
-
-        try {
-            restoreView.execute(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        assertTrue(null != getFacesContext().getViewRoot());
-        assertTrue(RenderKitFactory.HTML_BASIC_RENDER_KIT.equals(
-            getFacesContext().getViewRoot().getRenderKitId()));
-        assertTrue(
-            getFacesContext().getViewRoot().getLocale().equals(Locale.US));
-        CompareFiles cf = new CompareFiles();
-        try {
-            FileOutputStream os = new FileOutputStream(
-                RESTORE_VIEW_OUTPUT_FILE);
-            PrintStream ps = new PrintStream(os);
-            com.sun.faces.util.DebugUtil.printTree(
-                getFacesContext().getViewRoot(), ps);
-
-            List ignoreList = new ArrayList();
-            for (int i = 0; i < ignore.length; i++) {
-                ignoreList.add(ignore[i]);
-            }
-            boolean status = cf.filesIdentical(RESTORE_VIEW_OUTPUT_FILE,
-                                               RESTORE_VIEW_CORRECT_FILE,
-                                               ignoreList);
-            assertTrue(status);
-            // PENDING (visvan) test case to verify nothing is persisted if the root
-            // is marked transient for both client tand server case.
-        } catch (IOException e) {
-            System.out.println(e.getMessage());
-            e.printStackTrace();
-        }
-
-    }
-
-} // end of class TestRestoreViewFromPage
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestRestoreViewPhase.java b/jsf-ri/test/com/sun/faces/lifecycle/TestRestoreViewPhase.java
deleted file mode 100644
index d122fbd..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestRestoreViewPhase.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import com.sun.faces.renderkit.ServerSideStateHelper;
-
-import org.apache.cactus.WebRequest;
-
-import javax.faces.application.ViewExpiredException;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKitFactory;
-
-import javax.servlet.http.HttpSession;
-
-import java.util.Locale;
-
-
-/**
- * <B>TestReconstituteComponentTreePhase</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestRestoreViewPhase extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/components.jsp";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestRestoreViewPhase() {
-        super("TestRestoreViewPhase");
-    }
-
-
-    public TestRestoreViewPhase(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void beginReconstituteRequestSubmit(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-	theRequest.addParameter("javax.faces.ViewState",
-				"j_id1:j_id2");
-    }
-
-
-    public void beginRegisterListeners(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-	theRequest.addParameter("javax.faces.ViewState",
-				"j_id1:j_id2");
-    }
-
-    public void testReconstituteRequestSubmit() {
-
-        // precreate tree and set it in session and make sure the tree is
-        // restored from session.
-	
-	FacesContext context = getFacesContext();
-        UIViewRoot root = Util.getViewHandler(context).createView(context, 
-								  null);
-        root.setViewId(TEST_URI);
-        root.setLocale(Locale.US);
-    context.setViewRoot(root);
-	
-
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-
-        userName.setId("userName");
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-
-        Locale locale = new Locale("France", "french");
-        root.setLocale(locale);
-
-	// here we do what the StateManager does to save the state in
-	// the server.
-	Util.getStateManager(context).saveView(context);
-	//context.setViewRoot(null);
-
-        Phase restoreView = new RestoreViewPhase();
-
-        try {
-            restoreView.execute(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        assertTrue(null != getFacesContext().getViewRoot());
-        assertTrue(RenderKitFactory.HTML_BASIC_RENDER_KIT.equals(getFacesContext()
-              .getViewRoot().getRenderKitId()));
-
-        assertTrue(locale == getFacesContext().getViewRoot().getLocale());
-
-        assertTrue(
-            getFacesContext().getViewRoot().getViewId().equals(TEST_URI));
-        root = getFacesContext().getViewRoot();
-        // components should exist.
-        assertTrue(root.getChildCount() == 1);
-        assertTrue(basicForm.getId().equals(root.findComponent("basicForm").getId()));
-	assertTrue(userName.getId().equals(basicForm.findComponent("userName").getId()));
-        //getFacesContext().setViewRoot(null);
-    }
-
-    /**
-     * This method will test the <code>registerActionListeners</code> method.
-     * It will first create a simple tree consisting of a couple of <code>UICommand</code>
-     * components added to a facet;  Then the <code>ReconstituteComponentTree.execute</code>
-     * method is run;  And finally, an assertion is done to ensure that default action
-     * listeners have been registered on the <code>UICommand</code> components;
-     */
-    public void testRegisterListeners() {
-
-        // precreate tree and set it in session and make sure the tree is
-        // restored from session.
-	FacesContext context = getFacesContext();
-
-        UIViewRoot root = Util.getViewHandler(context).createView(context, 
-								  null);
-        root.setLocale(Locale.US);
-        root.setViewId(TEST_URI);
-	context.setViewRoot(root);
-
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        root.getChildren().add(basicForm);
-        UIPanel panel = new UIPanel();
-        basicForm.getChildren().add(panel);
-        UIPanel commandPanel = new UIPanel();
-        commandPanel.setId("commandPanel");
-        UICommand command1 = new UICommand();
-        UICommand command2 = new UICommand();
-        commandPanel.getChildren().add(command1);
-        commandPanel.getChildren().add(command2);
-        panel.getFacets().put("commandPanel", commandPanel);
-
-	// here we do what the StateManager does to save the state in
-	// the server.
-	Util.getStateManager(context).saveView(context);
-	//context.setViewRoot(null);
-
-        Phase restoreView = new RestoreViewPhase();
-
-        try {
-            restoreView.execute(context);
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        assertTrue(!(context.getRenderResponse()) &&
-                   !(context.getResponseComplete()));
-        assertTrue(context.getViewRoot() != null);
-
-        // Now test with no facets... Listeners should still be registered on UICommand
-        // components....
-        //
-        //context.setViewRoot(null);
-
-        root = Util.getViewHandler(context).createView(context, null);
-        root.setViewId(TEST_URI);
-        root.setLocale(Locale.US);
-    context.setViewRoot(root);
-
-        basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        root.getChildren().add(basicForm);
-        command1 = new UICommand();
-        command2 = new UICommand();
-        basicForm.getChildren().add(command1);
-        basicForm.getChildren().add(command2);
-
-	// here we do what the StateManager does to save the state in
-	// the server.
-	context.getExternalContext().getSessionMap().remove(ServerSideStateHelper.STATEMANAGED_SERIAL_ID_KEY);
-	Util.getStateManager(context).saveView(context);
-	//context.setViewRoot(null);
-
-        restoreView = new RestoreViewPhase();
-
-        try {
-            restoreView.execute(context);
-        } catch (Throwable e) {
-            assertTrue(false);
-        }
-        assertTrue(!(context.getRenderResponse()) &&
-                   !(context.getResponseComplete()));
-
-        //context.setViewRoot(null);
-    }
-
-    public void beginRestoreViewExpired(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-        theRequest.addParameter("javax.faces.ViewState",
-                                "j_id1:j_id2");
-    }
-
-    public void testRestoreViewExpired() {
-        // precreate tree and set it in session and make sure the tree is
-        // restored from session.
-                                                                                                                        
-        FacesContext context = getFacesContext();
-        UIViewRoot root = Util.getViewHandler(context).createView(context,
-                                                                  null);
-        root.setLocale(Locale.US);
-        root.setViewId(TEST_URI);
-        context.setViewRoot(root);
-                                                                                                                        
-                                                                                                                        
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-                                                                                                                        
-        userName.setId("userName");
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-                                                                                                                        
-        Locale locale = new Locale("France", "french");
-        root.setLocale(locale);
-                                                                                                                        
-        // here we do what the StateManager does to save the state in
-        // the server.
-        Util.getStateManager(context).saveView(context);
-        //context.setViewRoot(null);
-                                                                                                                        
-        // invalidate the session before we attempt to restore
-        ((HttpSession)context.getExternalContext().getSession(true)).invalidate();
-                                                                                                                        
-        Phase restoreView = new RestoreViewPhase();
-                                                                                                                        
-        boolean exceptionThrown = false;
-        try {
-            restoreView.execute(context);
-        } catch (ViewExpiredException e) {
-            exceptionThrown = true;
-            assertTrue(e.getViewId().equals(TEST_URI));
-            String expected = "viewId:"+e.getViewId()+" - View "+e.getViewId()+" could not be restored.";
-            assertTrue(e.getMessage().equals(expected));
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-
-} // end of class TestRestoreViewPhase
-
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestSaveStateInPage.java b/jsf-ri/test/com/sun/faces/lifecycle/TestSaveStateInPage.java
deleted file mode 100644
index 3409cf1..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestSaveStateInPage.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestSaveStateInPage.java
-
-package com.sun.faces.lifecycle;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIComponentBase;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Locale;
-
-import org.apache.cactus.WebRequest;
-
-import com.sun.faces.application.StateManagerImpl;
-import com.sun.faces.application.ViewHandlerImpl;
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.cactus.TestingUtil;
-import com.sun.faces.util.Util;
-
-
-/**
- * <B>TestSaveStateInPage</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestSaveStateInPage extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/greeting.jsp";
-
-
-    public String getExpectedOutputFilename() {
-        return "SaveState_correct";
-    }
-
-
-    public static final String ignore[] = {
-        "<form id=\"helloForm\" method=\"post\" action=\"/test/faces/greeting.jsp;jsessionid=09AF72F7E5EA209865AFFAB72D0F7B33\">"
-    };
-
-
-    public String[] getLinesToIgnore() {
-        return ignore;
-    }
-
-
-    public boolean sendResponseToFile() {
-        return true;
-    }
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestSaveStateInPage() {
-        super("TestRenderResponsePhase");
-    }
-
-
-    public TestSaveStateInPage(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-
-    public void beginSaveStateInPage(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-    }
-
-
-    public void testSaveStateInPage() {
-
-        boolean result = false;
-        UIComponentBase root = null;
-        String value = null;
-        Phase renderResponse = new RenderResponsePhase();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setId("root");
-        page.setLocale(Locale.US);
-        page.setViewId(TEST_URI);
-        getFacesContext().setViewRoot(page);
-
-        renderResponse.execute(getFacesContext());
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        assertTrue(verifyExpectedOutput());
-    }
-
-
-    public void testSaveStateInClient() {
-        // PENDING (visvan) add test case to make sure no state is saved when
-        // root is marked transient.
-        // precreate tree and set it in session and make sure the tree is
-        // restored from session.
-        //getFacesContext().setViewRoot(null);
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        root.setLocale(Locale.US);
-        root.setViewId(TEST_URI);
-
-        UIForm basicForm = new UIForm();
-        basicForm.setId("basicForm");
-        UIInput userName = new UIInput();
-
-        userName.setId("userName");
-        userName.setTransient(true);
-        root.getChildren().add(basicForm);
-        basicForm.getChildren().add(userName);
-
-        UIPanel panel1 = new UIPanel();
-        panel1.setId("panel1");
-        basicForm.getChildren().add(panel1);
-
-        UIInput userName1 = new UIInput();
-        userName1.setId("userName1");
-        userName1.setTransient(true);
-        panel1.getChildren().add(userName1);
-
-        UIInput userName2 = new UIInput();
-        userName2.setId("userName2");
-        panel1.getChildren().add(userName2);
-
-        UIInput userName3 = new UIInput();
-        userName3.setTransient(true);
-        panel1.getFacets().put("userName3", userName3);
-
-        UIInput userName4 = new UIInput();
-        panel1.getFacets().put("userName4", userName4);
-
-        getFacesContext().setViewRoot(root);
-
-        ViewHandlerImpl viewHandler = new ViewHandlerImpl();
-        StateManagerImpl stateManager = new StateManagerImpl();
-
-//        TreeStructure structRoot =
-//            new TreeStructure(((UIComponent) getFacesContext().getViewRoot()));
-//        stateManager.buildTreeStructureToSave(getFacesContext(),
-//                                              ((UIComponent) root),
-//                                              structRoot, null);
-//
-//        // make sure restored tree structure is correct
-//        UIViewRoot viewRoot = (UIViewRoot) structRoot.createComponent();
-//        assertTrue(null != viewRoot);
-//        stateManager.restoreComponentTreeStructure(structRoot,
-//                                                   ((UIComponent) viewRoot));
-
-        List structureList = new ArrayList();
-        TestingUtil.invokePrivateMethod("captureChild",
-                                        new Class[] {List.class, Integer.TYPE, UIComponent.class},
-                                        new Object[] { structureList, 0, root },
-                                        StateManagerImpl.class,
-                                        stateManager);
-        Object[] structArray = structureList.toArray();
-        UIViewRoot viewRoot = (UIViewRoot) TestingUtil.invokePrivateMethod("restoreTree",
-                                                                           new Class[] { Object[].class },
-                                                                           new Object[] { structArray },
-                                                                           StateManagerImpl.class,
-                                                                           stateManager);
-
-        UIComponent component = (UIComponent) viewRoot.getChildren().get(0);
-        assertTrue(component instanceof UIForm);
-        assertTrue(component.getId().equals("basicForm"));
-
-        UIForm uiform = (UIForm) component;
-        component = (UIComponent) uiform.getChildren().get(0);
-        assertTrue(component instanceof UIPanel);
-        assertTrue(component.getId().equals("panel1"));
-
-        UIPanel uipanel = (UIPanel) component;
-        component = (UIComponent) uipanel.getChildren().get(0);
-        assertTrue(component instanceof UIInput);
-        assertTrue(component.getId().equals("userName2"));
-
-        // make sure that the transient property is not persisted as well as the
-        // namespace is preserved.
-        basicForm = (UIForm) viewRoot.findComponent("basicForm");
-        assertTrue(basicForm != null);
-
-        userName = (UIInput) basicForm.findComponent("userName");
-        assertTrue(userName == null);
-
-        panel1 = (UIPanel) basicForm.findComponent("panel1");
-        assertTrue(panel1 != null);
-
-        userName1 = (UIInput) panel1.findComponent("userName1");
-        assertTrue(userName1 == null);
-
-        userName2 = (UIInput) panel1.findComponent("userName2");
-        assertTrue(userName2 != null);
-
-        // make sure facets work correctly when marked transient.
-        Map facetList = panel1.getFacets();
-        assertTrue(!(facetList.containsKey("userName3")));
-        assertTrue(facetList.containsKey("userName4"));
-    }
-
-
-} // end of class TestRenderResponsePhase
diff --git a/jsf-ri/test/com/sun/faces/lifecycle/TestUpdateModelValuesPhase.java b/jsf-ri/test/com/sun/faces/lifecycle/TestUpdateModelValuesPhase.java
deleted file mode 100644
index 771252f..0000000
--- a/jsf-ri/test/com/sun/faces/lifecycle/TestUpdateModelValuesPhase.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestUpdateModelValuesPhase.java
-
-package com.sun.faces.lifecycle;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.context.ExceptionHandlerImpl;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.util.Util;
-
-import javax.faces.component.UIForm;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import java.util.Locale;
-
-/**
- * <B>TestUpdateModelValuesPhase</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestUpdateModelValuesPhase extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestUpdateModelValuesPhase() {
-        super("TestUpdateModelValuesPhase");
-    }
-
-
-    public TestUpdateModelValuesPhase(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testUpdateNormal() {
-//DebugUtil.waitForDebugger();
-        UIForm form = null;
-        TestUIInput userName = null;
-        TestUIInput userName1 = null;
-        TestUIInput userName2 = null;
-        com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean)
-            (getFacesContext().getExternalContext().getSessionMap()).get(
-                "TestBean");
-        String value = null;
-        Phase updateModelValues = new UpdateModelValuesPhase();
-        form = new UIForm();
-        form.setId("form");
-        form.setSubmitted(true);
-        userName = new TestUIInput();
-        userName.setId("userName");
-        userName.setValue("one");
-        userName.setValueExpression("value",
-                                 ELUtils.createValueExpression("#{TestBean.one}"));
-        userName.testSetValid(true);
-        form.getChildren().add(userName);
-        userName1 = new TestUIInput();
-        userName1.setId("userName1");
-        userName1.setValue("one");
-        userName1.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.one}"));
-        userName1.testSetValid(true);
-        form.getChildren().add(userName1);
-        userName2 = new TestUIInput();
-        userName2.setId("userName2");
-        userName2.setValue("one");
-        userName2.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.one}"));
-        userName2.testSetValid(true);
-        form.getChildren().add(userName2);
-
-        UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        viewRoot.setLocale(Locale.US);
-        viewRoot.getChildren().add(form);
-        viewRoot.setViewId("updateModel.xul");
-        getFacesContext().setViewRoot(viewRoot);
-
-        try {
-            updateModelValues.execute(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-        Object localvalue = userName.getLocalValue();
-        assertTrue(localvalue == null);
-
-        assertTrue(testBean.getOne().equals("one"));
-        assertTrue(!getFacesContext().getMessages().hasNext());
-    }
-
-
-    public void testUpdateFailed() {
-        UIForm form = null;
-        TestUIInput userName = null;
-        TestUIInput userName1 = null;
-        TestUIInput userName2 = null;
-        TestUIInput userName3 = null;
-        String value = null;
-        Phase
-            updateModelValues = new UpdateModelValuesPhase();
-        form = new UIForm();
-        form.setId("form");
-        form.setSubmitted(true);
-        userName = new TestUIInput();
-        userName.setId("userName");
-        userName.setValue("one");
-        userName.testSetValid(true);
-        userName.setValueExpression("value",
-                                 ELUtils.createValueExpression("#{TestBean.two}"));
-        form.getChildren().add(userName);
-        userName1 = new TestUIInput();
-        userName1.setId("userName1");
-        userName1.setValue("one");
-        userName1.testSetValid(true);
-        userName1.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.one}"));
-        form.getChildren().add(userName1);
-        userName2 = new TestUIInput();
-        userName2.setId("userName2");
-        userName2.setValue("one");
-        userName2.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.one}"));
-        userName2.testSetValid(true);
-        form.getChildren().add(userName2);
-        userName3 = new TestUIInput();
-        userName3.setId("userName3");
-        userName3.setValue("four");
-        userName3.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.four}"));
-        userName3.testSetValid(true);
-        form.getChildren().add(userName3);
-
-        UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        viewRoot.setLocale(Locale.US);
-        viewRoot.getChildren().add(form);
-        viewRoot.setViewId("updateModel.xul");
-        getFacesContext().setViewRoot(viewRoot);
-
-        // This stage will go to render, since there was at least one error
-        // during component updates...
-        try {
-            updateModelValues.execute(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        getFacesContext().getExceptionHandler().handle();
-
-        assertTrue(getFacesContext().getRenderResponse());
-
-        assertTrue(true == (getFacesContext().getMessages().hasNext()));
-
-        //assertions for our default update failed message
-        assertTrue(true == (getFacesContext().getMessages("form:userName3").hasNext()));
-        java.util.Iterator iter = getFacesContext().getMessages("form:userName3");
-        javax.faces.application.FacesMessage msg = null;
-        javax.faces.application.FacesMessage expectedMsg = 
-            com.sun.faces.util.MessageFactory.getMessage(getFacesContext(), "javax.faces.component.UIInput.UPDATE",
-            new Object[] {com.sun.faces.util.MessageFactory.getLabel(getFacesContext(), userName3)}); 
-        while (iter.hasNext()) {
-            msg = (javax.faces.application.FacesMessage)iter.next();
-        }    
-        assertTrue(msg.getSummary().equals(expectedMsg.getSummary()));
-    }
-
-    public void testUpdateFailed2() {
-        UIForm form = null;
-        TestUIInput userName = null;
-        TestUIInput userName1 = null;
-        TestUIInput userName2 = null;
-        TestUIInput userName3 = null;
-        String value = null;
-        Phase
-            updateModelValues = new UpdateModelValuesPhase();
-        form = new UIForm();
-        form.setId("form");
-        form.setSubmitted(true);
-        userName = new TestUIInput();
-        userName.setId("userName");
-        userName.setValue("one");
-        userName.testSetValid(true);
-        userName.setValueExpression("value",
-                                 ELUtils.createValueExpression("#{TestBean.two}"));
-        form.getChildren().add(userName);
-        userName1 = new TestUIInput();
-        userName1.setId("userName1");
-        userName1.setValue("one");
-        userName1.testSetValid(true);
-        userName1.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.one}"));
-        form.getChildren().add(userName1);
-        userName2 = new TestUIInput();
-        userName2.setId("userName2");
-        userName2.setValue("one");
-        userName2.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.one}"));
-        userName2.testSetValid(true);
-        form.getChildren().add(userName2);
-        userName3 = new TestUIInput();
-        userName3.setId("userName3");
-        userName3.setValue("four");
-        userName3.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{TestBean.four}"));
-        userName3.testSetValid(true);
-        form.getChildren().add(userName3);
-
-        UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        viewRoot.setLocale(Locale.US);
-        viewRoot.getChildren().add(form);
-        viewRoot.setViewId("updateModel.xul");
-        getFacesContext().setViewRoot(viewRoot);
-
-        getFacesContext().setExceptionHandler(new ExceptionHandlerImpl());
-
-
-        // This stage will go to render, since there was at least one error
-        // during component updates...
-        try {
-            updateModelValues.execute(getFacesContext());
-        } catch (Throwable e) {
-            e.printStackTrace();
-            assertTrue(false);
-        }
-        
-        boolean exceptionThrown = false;
-        try {
-            getFacesContext().getExceptionHandler().handle();
-        } catch (Throwable t) {
-            exceptionThrown = true;
-        }
-
-        assertTrue(exceptionThrown);
-
-        assertTrue(false == (getFacesContext().getMessages().hasNext()));
-    }    
-
-    public static class TestUIInput extends UIInput {
-
-        public void testSetValid(boolean validState) {
-            this.setValid(validState);
-        }
-
-    }
-
-} // end of class TestUpdateModelValuesPhase
diff --git a/jsf-ri/test/com/sun/faces/mock/MockServletContext.java b/jsf-ri/test/com/sun/faces/mock/MockServletContext.java
deleted file mode 100644
index 1d74b38..0000000
--- a/jsf-ri/test/com/sun/faces/mock/MockServletContext.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.mock;
-
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRegistration;
-import javax.servlet.FilterRegistration;
-import javax.servlet.Filter;
-import javax.servlet.SessionCookieConfig;
-import javax.servlet.SessionTrackingMode;
-import javax.servlet.descriptor.JspConfigDescriptor;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Map;
-import java.util.EventListener;
-
-// Mock Object for ServletContext (Version 2.3)
-
-public class MockServletContext implements ServletContext {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    // Zero-args constructor for no associated directory
-    public MockServletContext() {
-        ;
-    }
-
-
-    // Constructor with File object for associated directory
-    public MockServletContext(File directory) {
-        setDirectory(directory);
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private Hashtable attributes = new Hashtable();
-    private Hashtable parameters = new Hashtable();
-    private String name = "MockServletContext";
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    // The directory that is the base of our application resources
-    private File directory = null;
-
-
-    public File getDirectory() {
-        return (this.directory);
-    }
-
-
-    public void setDirectory(File directory) {
-        if (!directory.exists() || !directory.isDirectory()) {
-            throw new IllegalArgumentException
-                (directory.getAbsolutePath() +
-                 " is not an existing directory");
-        }
-        this.directory = directory;
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    // Add a context innitialization parameter
-    public void addInitParameter(String name, String value) {
-        parameters.put(name, value);
-    }
-
-
-    // Set the servlet context name
-    public void setServletContextName(String name) {
-        this.name = name;
-    }
-
-
-    // -------------------------------------------------- ServletContext Methods
-
-
-    public Object getAttribute(String name) {
-        return (attributes.get(name));
-    }
-
-
-    public Enumeration getAttributeNames() {
-        return (attributes.keys());
-    }
-
-
-    public ServletContext getContext(String uripath) {
-        throw new UnsupportedOperationException();
-    }
-
-    public String getContextPath() {
-       return ('/' + name);
-    } 
-
-
-    public String getInitParameter(String name) {
-        return ((String) parameters.get(name));
-    }
-
-
-    public Enumeration getInitParameterNames() {
-        return (parameters.keys());
-    }
-
-
-    public int getMajorVersion() {
-        return (2);
-    }
-
-
-    public String getMimeType(String path) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public int getMinorVersion() {
-        return (5);
-    }
-
-
-    public RequestDispatcher getNamedDispatcher(String name) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public String getRealPath(String path) {
-        if (!path.startsWith("/") || (directory == null)) {
-            return (null);
-        }
-        File file = new File(directory, path.substring(1));
-        if (!file.exists() || !file.isFile()) {
-            return (null);
-        }
-        return (file.getAbsolutePath());
-    }
-
-
-    public RequestDispatcher getRequestDispatcher(String path) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public URL getResource(String path) throws MalformedURLException {
-        if (!path.startsWith("/") || (directory == null)) {
-            return (null);
-        }
-        File file = new File(directory, path.substring(1));
-        if (!file.exists() || !file.isFile()) {
-            return (null);
-        }
-        return (file.toURL());
-    }
-
-
-    public InputStream getResourceAsStream(String path) {
-        URL url = null;
-        try {
-            url = getResource(path);
-        } catch (MalformedURLException e) {
-            return (null);
-        }
-        if (url == null) {
-            return (null);
-        }
-        try {
-            return (url.openStream());
-        } catch (IOException e) {
-            return (null);
-        }
-    }
-
-
-    public Set getResourcePaths(String path) {
-        return Collections.emptySet();
-        // PENDING(craigmcc) - Flesh out the following implementation
-        /*
-        if (!path.startsWith("/") || (directory == null)) {
-            return (null);
-        }
-        File base = new File(directory, path.substring(1));
-        if (!base.exists() || !base.isDirectory()) {
-            return (false);
-        }
-        Set results = new HashSet();
-        // PENDING(craigmcc) recursive descent search
-        return (results);
-        */
-    }
-
-
-    public Servlet getServlet(String name) throws ServletException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public String getServletContextName() {
-        return (name);
-    }
-
-
-    public String getServerInfo() {
-        return ("MockServletContext");
-    }
-
-
-    public Enumeration getServlets() {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public Enumeration getServletNames() {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public void log(String message) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public void log(Exception exception, String message) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public void log(String message, Throwable exception) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    public void removeAttribute(String name) {
-        attributes.remove(name);
-    }
-
-
-    public void setAttribute(String name, Object value) {
-        attributes.put(name, value);
-    }
-
-
-    public int getEffectiveMajorVersion() {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public int getEffectiveMinorVersion() {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public boolean setInitParameter(String s, String s1) {
-        return false;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public ServletRegistration.Dynamic addServlet(String s, String s1) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public ServletRegistration.Dynamic addServlet(String s, Class<? extends Servlet> aClass) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public <T extends Servlet> T createServlet(Class<T> tClass)
-          throws ServletException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public ServletRegistration getServletRegistration(String s) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public Map<String, ? extends ServletRegistration> getServletRegistrations() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public FilterRegistration.Dynamic addFilter(String s, String s1) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public FilterRegistration.Dynamic addFilter(String s, Filter filter) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public FilterRegistration.Dynamic addFilter(String s, Class<? extends Filter> aClass) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public <T extends Filter> T createFilter(Class<T> tClass)
-          throws ServletException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public FilterRegistration getFilterRegistration(String s) {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public SessionCookieConfig getSessionCookieConfig() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public void addListener(String s) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public <T extends EventListener> void addListener(T t) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public void addListener(Class<? extends EventListener> aClass) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public <T extends EventListener> T createListener(Class<T> tClass)
-          throws ServletException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public JspConfigDescriptor getJspConfigDescriptor() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public ClassLoader getClassLoader() {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public void declareRoles(String... strings) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/renderkit/TestContentTypes.java b/jsf-ri/test/com/sun/faces/renderkit/TestContentTypes.java
deleted file mode 100644
index 9978c64..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/TestContentTypes.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import org.apache.cactus.WebRequest;
-
-public class TestContentTypes extends ServletFacesTestCase {
-
-//
-// Constructors and Initializers
-//
-                                                                                                                   
-    public TestContentTypes() {
-        super("TestContentTypes");
-    }
-                                                                                                                   
-    public TestContentTypes(String name) {
-        super(name);
-    }
-
-    /**
-     * quality test - "text/html" wins
-     */
-    public void beginAccept1(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c");
-    }
-    public void testAccept1() throws Exception {
-        String clientContentType = getFacesContext().getExternalContext().getRequestHeaderMap().get("Accept");
-        String serverSupportedContentTypes = "text/html, text/plain";
-        String contentType = RenderKitUtils.determineContentType(
-            clientContentType, serverSupportedContentTypes, null);
-        assertEquals(contentType, "text/html");
-    }
-
-    /**
-     * quality test - "text/x-dvi" wins
-     */
-    public void beginAccept2(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c");
-    }
-    public void testAccept2() throws Exception {
-        String clientContentType = getFacesContext().getExternalContext().getRequestHeaderMap().get("Accept");
-        String serverSupportedContentTypes = "text/x-dvi, text/plain";
-        String contentType = RenderKitUtils.determineContentType(
-            clientContentType, serverSupportedContentTypes, null);
-        assertEquals(contentType, "text/x-dvi");
-    }
-
-    /**
-     * "level" precedence test - "text/html;level=1" is higher than "text/html" 
-     */
-    public void beginAccept3(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/plain; q=0.5, text/html, text/html;level=1");
-    }
-    public void testAccept3() throws Exception {
-        String clientContentType = getFacesContext().getExternalContext().getRequestHeaderMap().get("Accept");
-        String serverSupportedContentTypes = "text/html, text/html;level=1";
-        String contentType = RenderKitUtils.determineContentType(
-            clientContentType, serverSupportedContentTypes, null);
-        assertEquals(contentType, "text/html;level=1");
-    }
- 
-    /**
-     * "level" precedence test - "text/html;level=2" is higher than "text/html;level=1"" 
-     */
-    public void beginAccept4(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/plain; q=0.5, text/html, text/html;level=1, text/html;level=2");
-    }
-                                                                                                                           
-    public void testAccept4() throws Exception {
-        String clientContentType = getFacesContext().getExternalContext().getRequestHeaderMap().get("Accept");
-        String serverSupportedContentTypes = "text/html, text/html;level=1, text/html;level=2";
-        String contentType = RenderKitUtils.determineContentType(
-            clientContentType, serverSupportedContentTypes, null);
-        assertEquals(contentType, "text/html;level=2");
-    }
-
-    public void beginAccept5(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/html, application/xhtml+xml");
-    }
-
-    public void testAccept5() throws Exception {
-        String clientContentType = getFacesContext().getExternalContext().getRequestHeaderMap().get("Accept");
-        String serverSupportedContentTypes = "text/html, application/xhtml+xml";
-        String contentType = RenderKitUtils.determineContentType(
-            clientContentType, serverSupportedContentTypes, "application/xhtml+xml");
-        assertEquals(contentType, "application/xhtml+xml");
-    }
-
-    public void beginAccept6(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/html, application/xhtml+xml; q=0.5");
-    }
-
-    public void testAccept6() throws Exception {
-        String clientContentType = getFacesContext().getExternalContext().getRequestHeaderMap().get("Accept");
-        String serverSupportedContentTypes = "text/html, application/xhtml+xml";
-        String contentType = RenderKitUtils.determineContentType(
-            clientContentType, serverSupportedContentTypes, "application/xhtml+xml");
-        assertEquals(contentType, "text/html");
-    }
-
-     public void testReallyLargeAcceptHeader() throws Exception {
-        String clientAcceptHeader = "application/octet-stream, application/smil, application/vnd.oma.drm.content,"
-                                    + "application/vnd.oma.drm.message, application/vnd.oma.drm.rights+wbxml,"
-                                    + "application/vnd.oma.drm.rights+xml, application/vnd.wap.connectivity-wbxml,"
-                                    + "application/vnd.wap.multipart.mixed, application/vnd.wap.multipart.related,"
-                                    + "application/vnd.wap.wmlscriptc, application/vnd.wap.xhtml+xml,"
-                                    + "application/xhtml+xml;profile=\"http://www.wapforum.org/xhtml\", image/bmp, image/gif,"
-                                    + "image/jpeg, image/png, image/vnd.wap.wbmp, multipart/mixed, multipart/related, text/html,"
-                                    + "text/plain, text/vnd.wap.connectivity-xml, text/vnd.wap.wml;type=4365, application/java,"
-                                    + "application/java-archive, image/wbmp, text/vcalendar, text/vcard, video/3gpp, video/mpeg,"
-                                    + "audio/amr, audio/xmf, audio/x-midi, audio/x-mid, audio/x-wav, audio/imelody, text/x-imelody,"
-                                    + "audio/mp3, audio/mpeg, audio/mpeg3, audio/mpg3, audio/aac, audio/amr-wb, audio/mp4,"
-                                    + "pv-pvx, application/sdp, image/svg+xml, text/vnd.sun.j2me.app-descriptor, \n"
-                                    + "video/x-application/vnd.oma.dd+xml,text/vnd.wap.wmlscript,text/vnd.wap.wml";
-       String serverSupportedContentTypes = "text/html, application/xhtml+xml";
-        String contentType =
-              RenderKitUtils.determineContentType(clientAcceptHeader,
-                                                  serverSupportedContentTypes,
-                                                  "text/html");
-        assertEquals(contentType, "text/html");
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java b/jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java
deleted file mode 100644
index bcd4103..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestRenderKit.java
-
-package com.sun.faces.renderkit;
-
-import com.sun.faces.cactus.FileOutputResponseWriter;
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.renderkit.html_basic.FormRenderer;
-import com.sun.faces.renderkit.html_basic.TextRenderer;
-import com.sun.faces.renderkit.html_basic.HiddenRenderer;
-import com.sun.faces.config.WebConfiguration;
-import com.sun.faces.config.ConfigManager;
-import com.sun.faces.config.DbfFactory;
-import com.sun.faces.config.DocumentInfo;
-import com.sun.faces.config.processor.ConfigProcessor;
-import com.sun.faces.config.processor.FactoryConfigProcessor;
-import com.sun.faces.config.processor.ApplicationConfigProcessor;
-import com.sun.faces.config.processor.RenderKitConfigProcessor;
-import com.sun.faces.util.Util;
-
-import javax.faces.FactoryFinder;
-import javax.faces.context.ResponseStream;
-import javax.faces.context.ResponseWriter;
-import javax.faces.context.FacesContext;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-import javax.faces.render.RenderKitWrapper;
-
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletContext;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Iterator;
-import java.net.URL;
-
-import org.apache.cactus.WebRequest;
-import org.w3c.dom.Document;
-
-/**
- * <B>TestRenderKit</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestRenderKit extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String OUTPUT_FILENAME =
-        FileOutputResponseWriter.FACES_RESPONSE_ROOT + "TestRenderKit_out";
-
-    public static final String CORRECT_OUTPUT_FILENAME =
-        FileOutputResponseWriter.FACES_RESPONSE_ROOT + "TestRenderKit_correct";
-
-
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private RenderKit renderKit = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestRenderKit() {
-        super("TestRenderKit");
-    }
-
-
-    public TestRenderKit(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testGetRenderer() {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                  RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        // 1. Verify "getRenderer()" returns a Renderer instance
-        //  
-        Renderer renderer = renderKit.getRenderer("javax.faces.Form",
-                                                  "javax.faces.Form");
-        assertTrue(renderer instanceof FormRenderer);
-
-        // 2. Verify "getRenderer()" returns null
-        //
-        renderer = renderKit.getRenderer("Foo", "Bar");
-        assertTrue(renderer == null);
-
-        // 3. Verify NPE
-        //
-        boolean exceptionThrown = false;
-        try {
-            renderer = renderKit.getRenderer(null, null);
-        } catch (NullPointerException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-    public void testAddRenderer() {
-        boolean bool = false;
-        FormRenderer formRenderer = new FormRenderer();
-        TextRenderer textRenderer = new TextRenderer();
-
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                  RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        // Test to see if addRenderer replaces the renderer if given
-        // the same rendererType.
-        //
-        renderKit.addRenderer("Form", "Form", formRenderer);
-        assertTrue(
-            renderKit.getRenderer("Form", "Form") instanceof FormRenderer);
-        renderKit.addRenderer("Form", "Form", textRenderer);
-        assertTrue(
-            renderKit.getRenderer("Form", "Form") instanceof TextRenderer);
-
-        bool = false;
-        try {
-            renderKit.addRenderer("BlahFamily", null, formRenderer);
-        } catch (NullPointerException e) {
-            bool = true;
-        }
-        assertTrue(bool);
-
-        bool = false;
-        try {
-            renderKit.addRenderer(null, "BlahRenderer", formRenderer);
-        } catch (NullPointerException e) {
-            bool = true;
-        }
-        assertTrue(bool);
-
-        bool = false;
-        try {
-            renderKit.addRenderer("BlahFamily", "BlahRenderer", null);
-        } catch (NullPointerException e) {
-            bool = true;
-        }
-        assertTrue(bool);
-
-    }
-
-
-    public void testCreateResponseStream() throws Exception {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                  RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ResponseStream stream = renderKit.createResponseStream(out);
-        stream.write('a');
-        stream.write((byte) 'b');
-        stream.write(new byte[]{(byte) 'c', (byte) 'd', (byte) 'e'}, 1, 2);
-        stream.flush();
-        String result = out.toString();
-        assertTrue(result.equals("abde"));
-        try {
-            stream.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-    }
-
-
-    public void testCreateResponseWriter() throws Exception {
-
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-	// use an invalid encoding
-        try {
-            renderKit.createResponseWriter(new StringWriter(), null, "foo");
-
-            fail("IllegalArgumentException Should Have Been Thrown!");
-
-        } catch (IllegalArgumentException iae) {
-        }
-	
-	ResponseWriter writer = null;
-
-	// see that the proper content type is picked up based on the
-	// contentTypeList param
-	writer = renderKit.createResponseWriter(new StringWriter(), 
-						"application/xhtml+xml,text/html", 
-						"ISO-8859-1");
-	assertEquals(writer.getContentType(), "application/xhtml+xml");
-	writer = renderKit.createResponseWriter(new StringWriter(), 
-						"text/html,application/xhtml+xml",
-						"ISO-8859-1");
-	assertEquals(writer.getContentType(), "text/html");
-
-	// see that IAE is thrown if the content type isn't known
-	try {
-	    writer = renderKit.createResponseWriter(new StringWriter(), 
-						    "application/pdf",
-						    "ISO-8859-1");
-	    
-            fail("IllegalArgumentException Should Have Been Thrown!");
-
-        } catch (IllegalArgumentException iae) {
-        }
-
-    }
-
-    public void beginCreateResponseWriterAllMedia(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "*/*");
-    }
-
-    public void testCreateResponseWriterAllMedia() throws Exception {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-
-        // see that the proper content type is picked up based on the
-        // accept header  
-        writer = renderKit.createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "text/html");
-        
-    	//Ensure we correctly support */* in content type ranges
-    	writer = renderKit.createResponseWriter(new StringWriter(), 
-    			"application/xhtml+xml,*/*", 
-    			"ISO-8859-1");
-    	assertEquals(writer.getContentType(), "application/xhtml+xml");
-
-    	writer = renderKit.createResponseWriter(new StringWriter(), 
-    			"text/css,*/*",
-    			"ISO-8859-1");
-    	assertEquals(writer.getContentType(), "text/html");
-
-    	writer = renderKit.createResponseWriter(new StringWriter(), 
-    			"*/*",
-    			"ISO-8859-1");
-    	assertEquals(writer.getContentType(), "text/html");
-    }
-
-    public void beginCreateResponseWriter1(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/html; q=0.2, application/xhtml+xml; q=0.8, application/xml; q=0.5, */*");
-    }
-
-    public void testCreateResponseWriter1() throws Exception {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-
-        // see that the proper content type is picked up based on the
-        // accept header  
-        writer = renderKit.createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "application/xhtml+xml");
-    }
-
-    public void beginCreateResponseWriter2(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/html; q=0.2, application/xhtml+xml; q=0.8, application/xml; q=0.9, */*");
-    }
-
-    public void testCreateResponseWriter2() throws Exception {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-                                                                                                                   
-        // see that the proper content type is picked up based on the
-        // accept header
-        writer = renderKit.createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "application/xhtml+xml");
-    }
-
-    public void beginCreateResponseWriter3(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/html, application/xhtml+xml; q=0.8, application/xml; q=0.9, */*");
-    }
-                                                                                                                   
-    public void testCreateResponseWriter3() throws Exception {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-                                                                                                                   
-        // see that the proper content type is picked up based on the
-        // accept header
-        writer = renderKit.createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "text/html");
-    }
-
-    public void beginCreateResponseWriter4(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*");
-        theRequest.addHeader("Accept", "text/html; level=1");
-    }
-                                                                                                                           
-    public void testCreateResponseWriter4() throws Exception {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-                                                                                                                           
-        // see that the proper content type is picked up based on the
-        // accept header
-        writer = renderKit.createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "text/html");
-    }
-
-    // Response has unsupported content type..
-    public void testCreateResponseWriter5() throws Exception {
-        ((ServletResponse)getFacesContext().getExternalContext().getResponse()).setContentType("image/png");
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-                                                                                                                         
-        // see that the proper content type is picked up based on the
-        // accept header
-        writer = renderKit.createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "text/html");
-    }
-
-    // Added for issue 807
-    public void beginCreateResponseWriter6(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "text/");
-    }
-
-    public void testCreateResponseWriter6() throws Exception {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-              FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-
-        // see that the proper content type is picked up based on the
-        // accept header
-        writer = renderKit
-              .createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "text/html");
-    }
-
-
-
-    public void testGetComponentFamilies() {
-
-        RenderKitImpl rk = new RenderKitImpl();
-        Iterator empty = rk.getComponentFamilies();
-        assertNotNull(empty);
-        assertTrue(!empty.hasNext());
-
-        rk.addRenderer("family", "rendererType", new HiddenRenderer());
-        Iterator notEmpty = rk.getComponentFamilies();
-        assertNotNull(notEmpty);
-        assertTrue(notEmpty.hasNext());
-
-    }
-
-
-    public void testGetRendererTypes() {
-
-        RenderKitImpl rk = new RenderKitImpl();
-        rk.addRenderer("family", "rendererType", new HiddenRenderer());
-
-        Iterator empty = rk.getRendererTypes("non-exist");
-        assertNotNull(empty);
-        assertTrue(!empty.hasNext());
-
-        Iterator notEmpty = rk.getRendererTypes("family");
-        assertNotNull(notEmpty);
-        assertTrue(notEmpty.hasNext());
-
-    }
-
-
-    // Added for issue 1106
-    public void beginCreateResponseWriter7(WebRequest theRequest) {
-        theRequest.addHeader("Accept", "*/*");
-    }
-
-    public void testCreateResponseWriter7() throws Exception {
-        WebConfiguration webConfig = WebConfiguration.getInstance();
-        webConfig.overrideContextInitParameter(WebConfiguration.BooleanWebContextInitParameter.PreferXHTMLContentType, true);
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                            RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        ResponseWriter writer = null;
-
-        // see that the proper content type is picked up based on the
-        // accept header
-        writer = renderKit.createResponseWriter(new StringWriter(), null, "ISO-8859-1");
-        assertEquals(writer.getContentType(), "application/xhtml+xml");
-        webConfig.overrideContextInitParameter(WebConfiguration.BooleanWebContextInitParameter.PreferXHTMLContentType, true);
-    }
-
-
-    public void testRenderKitDecoration() throws Exception {
-
-        FacesContext ctx = getFacesContext();
-        ServletContext servletContext = (ServletContext) ctx.getExternalContext().getContext();
-        FactoryFinder.releaseFactories();
-        servletContext.removeAttribute("com.sun.faces.ApplicationAssociate");
-        ConfigManager config = ConfigManager.getInstance();
-
-        DocumentBuilderFactory factory = DbfFactory.getFactory();
-        factory.setValidating(false);
-        DocumentBuilder builder = factory.newDocumentBuilder();
-        ClassLoader loader = Util.getCurrentLoader(this);
-        URL runtime = loader.getResource("com/sun/faces/jsf-ri-runtime.xml");
-        URL renderkit = servletContext.getResource("/WEB-INF/renderkit1.xml");
-        Document defaultDoc = builder.parse(loader.getResourceAsStream("com/sun/faces/jsf-ri-runtime.xml"));
-        Document renderKitDoc = builder.parse(servletContext.getResourceAsStream("/WEB-INF/renderkit1.xml"));
-
-        ConfigProcessor[] configProcessors = {
-             new FactoryConfigProcessor(),
-             new ApplicationConfigProcessor(),
-             new RenderKitConfigProcessor(),
-        };
-        for (int i = 0; i < configProcessors.length; i++) {
-            ConfigProcessor p = configProcessors[i];
-            if ((i + 1) < configProcessors.length) {
-                p.setNext(configProcessors[i + 1]);
-            }
-        }
-
-        configProcessors[0].process(servletContext, new DocumentInfo[] {
-                                           new DocumentInfo(defaultDoc, runtime),
-                                           new DocumentInfo(renderKitDoc, renderkit) });
-
-        RenderKitFactory rkf = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        RenderKit rk = rkf.getRenderKit(getFacesContext(), RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        assertEquals(rk.getClass().getName(), DecoratingRenderKit.class.getName());
-        assertEquals(RenderKitImpl.class.getName(), ((RenderKitWrapper) rk).getWrapped().getClass().getName());
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    public static class DecoratingRenderKit extends RenderKitWrapper {
-
-        private RenderKit delegate;
-
-        public DecoratingRenderKit(RenderKit delegate) {
-            this.delegate = delegate;
-        }
-
-        public RenderKit getWrapped() {
-            return delegate;
-        }
-    }
-
-
-} // end of class TestRenderKit
diff --git a/jsf-ri/test/com/sun/faces/renderkit/TestRenderKitFactory.java b/jsf-ri/test/com/sun/faces/renderkit/TestRenderKitFactory.java
deleted file mode 100644
index 703c8b8..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/TestRenderKitFactory.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestRenderKitFactory.java
-
-package com.sun.faces.renderkit;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import javax.faces.FactoryFinder;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-import java.util.Iterator;
-
-/**
- * <B>TestRenderKitFactory</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestRenderKitFactory extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private RenderKitFactoryImpl renderKitFactory = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestRenderKitFactory() {
-        super("TestRenderKitFactory");
-    }
-
-
-    public TestRenderKitFactory(String name) {
-        super(name);
-    }
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testFactory() {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-
-        // 1. Verify "getRenderKit" returns the same RenderKit instance
-        //    if called multiple times with the same identifier.
-        //  
-        RenderKit renderKit1 = renderKitFactory.getRenderKit(getFacesContext(),
-                                                             RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        RenderKit renderKit2 = renderKitFactory.getRenderKit(getFacesContext(),
-                                                             RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        assertTrue(renderKit1 == renderKit2);
-
-        // 2. Verify "addRenderKit" adds instances.. /
-        //
-        renderKitFactory.addRenderKit("Foo", renderKit1);
-        renderKitFactory.addRenderKit("Bar", renderKit2);
-
-        // Verify renderkit instance replaced with last identifier..
-        //
-        renderKitFactory.addRenderKit("BarBar", renderKit2);
-        RenderKit rkit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                       "BarBar");
-        assertTrue(rkit != null);
-        assertTrue(rkit == renderKit2);
-
-        // 3. Verify "getRenderKit" returns null if
-        //    RenderKit not found for renderkitid...
-        //
-        RenderKit renderKit4 = renderKitFactory.getRenderKit(getFacesContext(),
-                                                             "Gamma");
-        assertTrue(renderKit4 == null);
-    }
-
-
-    public void testDefaultExists() {
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-    
-        // 1. Verify "default" renderkit..
-        //
-        RenderKit renderKit;
-        String id = null;
-        Iterator iter = renderKitFactory.getRenderKitIds();
-        boolean exists = false;
-        while (iter.hasNext()) {
-            id = (String) iter.next();
-            if (id.equals(RenderKitFactory.HTML_BASIC_RENDER_KIT)) {
-                exists = true;
-                break;
-            }
-        }
-        assertTrue(exists);
-    }
-
-
-    public void testExceptions() {
-        renderKitFactory = new RenderKitFactoryImpl();
-        RenderKit rKit = null;
-
-        rKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                             RenderKitFactory.HTML_BASIC_RENDER_KIT);
-
-        // Verify NPE for "addRenderKit"
-        //
-        boolean exceptionThrown = false;
-        try {
-            renderKitFactory.addRenderKit(null, rKit);
-            exceptionThrown = false;
-        } catch (NullPointerException e) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            renderKitFactory.addRenderKit("foo", null);
-            exceptionThrown = false;
-        } catch (NullPointerException e1) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-	
-        // Verify null parameter exception for "getRenderKit"
-        //
-        exceptionThrown = false;
-        try {
-            rKit = renderKitFactory.getRenderKit(null, null);
-        } catch (NullPointerException e2) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-
-        exceptionThrown = false;
-        try {
-            rKit = renderKitFactory.getRenderKit(getFacesContext(), null);
-        } catch (NullPointerException e4) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-
-
-} // end of class TestRenderKitFactory
diff --git a/jsf-ri/test/com/sun/faces/renderkit/TestRenderKitUtils.java b/jsf-ri/test/com/sun/faces/renderkit/TestRenderKitUtils.java
deleted file mode 100644
index 1ea3d11..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/TestRenderKitUtils.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-
-import javax.faces.component.UICommand;
-import javax.faces.component.html.HtmlCommandLink;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import java.io.StringWriter;
-import java.util.Collections;
-
-public class TestRenderKitUtils extends ServletFacesTestCase {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public TestRenderKitUtils() {
-        super();    
-    }
-
-
-    public TestRenderKitUtils(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testOnClickBackslashEscaping() throws Exception {
-
-        String input = "return confirm('foo\\');";
-        String expectedResult ="return confirm(\\'foo\\\\\\');";
-        HtmlCommandLink link = new HtmlCommandLink();
-        link.setOnclick(input);
-        StringWriter capture = new StringWriter();
-        ResponseWriter current = getFacesContext().getResponseWriter();
-        if (current == null) {
-            RenderKit renderKit =
-                  RenderKitUtils.getCurrentRenderKit(getFacesContext());
-            current = renderKit.createResponseWriter(capture, null, null);
-            getFacesContext().setResponseWriter(current);
-        } else {
-            getFacesContext().setResponseWriter(current.cloneWithWriter(capture));
-        }
-
-        getFacesContext().getResponseWriter().startElement("link", link);
-        RenderKitUtils.renderOnclick(getFacesContext(),
-                                     link,
-                                     null,
-                                     "form",
-                                     true);
-        getFacesContext().getResponseWriter().endElement("link");
-
-        String actualResult = capture.toString();
-        assertTrue(actualResult.contains(expectedResult));
-
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/HtmlResponseWriterTest.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/HtmlResponseWriterTest.java
deleted file mode 100644
index 6dd8199..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/HtmlResponseWriterTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/*
- * HtmlResponseWriterTest.java
- * JUnit based test
- *
- * Created on November 16, 2006, 2:59 PM
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.io.StringWriter;
-import junit.framework.*;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-
-/**
- *
- * @author edburns
- */
-public class HtmlResponseWriterTest extends TestCase {
-    
-    public HtmlResponseWriterTest(String testName) {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception {
-    }
-
-    protected void tearDown() throws Exception {
-    }
-
-    public void testCDATAWithXHTML() throws Exception {
-        System.out.println("startElement");
-        
-        String name = null;
-        UIComponent componentForElement = new UIOutput();
-        
-        final String expected = "<script>\n//<![CDATA[\n\n function queueEvent() {\n  return false;\n}\n\n\n//]]>\n</script>";
- 
-        // Case 1 start is // end is //
-        StringWriter stringWriter = new StringWriter();
-        HtmlResponseWriter instance = new HtmlResponseWriter(stringWriter,
-                "application/xhtml+xml", "UTF-8");
-
-        instance.startElement("script", componentForElement);
-        instance.write("    // <![CDATA[\n function queueEvent() {\n  return false;\n}\n\n//   ]]>  \n");
-        instance.endElement("script");
-        
-        instance.flush();
-        assertEquals(expected, stringWriter.toString());
-
-        // Case 2 start is // end is /* */
-        stringWriter = new StringWriter();
-        instance = new HtmlResponseWriter(stringWriter,
-                "application/xhtml+xml", "UTF-8");
- 
-        instance.startElement("script", componentForElement);
-        instance.write("    // <![CDATA[\n function queueEvent() {\n  return false;\n}\n\n/*\n  ]]> \n*/ \n");
-        instance.endElement("script");
-        
-        instance.flush();
-        assertEquals(expected, stringWriter.toString());
-
-        // Case 3 start is /* */  end is /* */
-        stringWriter = new StringWriter();
-        instance = new HtmlResponseWriter(stringWriter,
-                "application/xhtml+xml", "UTF-8");
- 
-        instance.startElement("script", componentForElement);
-        instance.write("    /* \n <![CDATA[ \n*/\n function queueEvent() {\n  return false;\n}\n\n/*\n  ]]> \n*/ \n");
-        instance.endElement("script");
-        
-        instance.flush();
-        assertEquals(expected, stringWriter.toString());
-
-        // Case 4 start is /* */  end is //
-        stringWriter = new StringWriter();
-        instance = new HtmlResponseWriter(stringWriter,
-                "application/xhtml+xml", "UTF-8");
- 
-        instance.startElement("script", componentForElement);
-        instance.write("    /* \n <![CDATA[ \n*/\n function queueEvent() {\n  return false;\n}\n\n//\n  ]]>\n");
-        instance.endElement("script");
-        
-        instance.flush();
-        assertEquals(expected, stringWriter.toString());
-        
-        // Case 5 start is /* */  end is //
-        stringWriter = new StringWriter();
-        instance = new HtmlResponseWriter(stringWriter,
-                "application/xhtml+xml", "UTF-8");
- 
-        instance.startElement("script", componentForElement);
-        instance.write("    /* \n <![CDATA[ \n*/\n function queueEvent() {\n  return false;\n}\n\n//\n  ]]>\n");
-        instance.endElement("script");
-        
-        instance.flush();
-        assertEquals(expected, stringWriter.toString());
-        
-        
-    }
-
-    
-}
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/MenuRendererTestCase.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/MenuRendererTestCase.java
deleted file mode 100644
index 7d92497..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/MenuRendererTestCase.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.renderkit.html_basic;
-
-import java.util.Set;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.Queue;
-import java.util.LinkedList;
-import java.util.Date;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-import javax.faces.FacesException;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-
-public class MenuRendererTestCase extends ServletFacesTestCase {
-
-    // ----------------------------------------------------------- Setup Methods
-
-
-    public MenuRendererTestCase() {
-        super("MenuRendererTestCase.java");
-    }
-
-
-    public MenuRendererTestCase(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-
-    public void testCreateCollection() {
-
-        TestMenuRenderer r = new TestMenuRenderer();
-
-        // null instance using interface for the fallback should
-        // result in a null return
-        assertNull(r.createCollection(null, Set.class));
-
-        Collection c = r.createCollection(new HashSet(), ArrayList.class);
-        assertNotNull(c);
-        assertTrue(c instanceof HashSet);
-        assertTrue(c.isEmpty());
-
-    }
-
-
-    public void testCloneValue() {
-
-        TestMenuRenderer r = new TestMenuRenderer();
-
-        Collection<String> clonableCollection = new ArrayList<String>();
-        clonableCollection.add("foo");
-
-        Collection cloned = r.cloneValue(clonableCollection);
-        assertNotNull(cloned);
-        assertTrue(cloned.isEmpty());
-
-        Collection nonClonableCollection = new CopyOnWriteArraySet();
-        assertNull(r.cloneValue(nonClonableCollection));
-
-    }
-
-    public void testBestGuess() {
-
-        TestMenuRenderer r = new TestMenuRenderer();
-        assertTrue(r.bestGuess(Set.class,  1) instanceof HashSet);
-        assertTrue(r.bestGuess(List.class, 1) instanceof ArrayList);
-        assertTrue(r.bestGuess(SortedSet.class, 1) instanceof TreeSet);
-        assertTrue(r.bestGuess(Queue.class, 1) instanceof LinkedList);
-        assertTrue(r.bestGuess(Collection.class, 1) instanceof ArrayList);
-        
-    }
-
-    public void testCreateCollectionFromHint() {
-
-        TestMenuRenderer r = new TestMenuRenderer();
-
-        assertTrue(r.createCollectionFromHint("java.util.ArrayList") instanceof ArrayList);
-        assertTrue(r.createCollectionFromHint(LinkedList.class) instanceof LinkedList);
-        try {
-            r.createCollectionFromHint(java.util.Set.class);
-            assertTrue(false);
-        } catch (FacesException fe) {
-            // expected
-        }
-
-        try {
-            r.createCollectionFromHint(new Date());
-            assertTrue(false);
-        } catch (FacesException fe) {
-            // expected
-        }
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-    private static final class TestMenuRenderer extends MenuRenderer {
-
-        @Override
-        public Collection createCollection(Collection collection,
-                                              Class<? extends Collection> fallBackType) {
-            return super.createCollection(collection, fallBackType);
-        }
-
-        @Override
-        public Collection createCollectionFromHint(Object collectionTypeHint) {
-            return super.createCollectionFromHint(collectionTypeHint);
-        }
-
-        @Override
-        public Collection bestGuess(Class<? extends Collection> type,
-                                       int initialSize) {
-            return super.bestGuess(type, initialSize);
-        }
-
-        @Override
-        protected Collection cloneValue(Object value) {
-            return super.cloneValue(value);
-        }
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestComponentType.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestComponentType.java
deleted file mode 100644
index d25be73..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestComponentType.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestComponentType.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import junit.framework.TestCase;
-import org.apache.cactus.ServletTestCase;
-
-import javax.faces.component.UIOutput;
-import javax.faces.component.UISelectMany;
-
-/**
- * <B>TestComponentType.java</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestComponentType extends TestCase // ServletTestCase
-{
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestComponentType() {
-        super("TestComponentType.java");
-    }
-
-
-    public TestComponentType(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testComponentTypeCheck() {
-
-        MenuRenderer mr = new MenuRenderer();
-
-        // case 1: UISelectMany component
-        
-        UISelectMany many = new UISelectMany();
-        String multipleText = mr.getMultipleText(many);
-        assertTrue(multipleText.equals(" multiple "));
-
-        // case 2: UISelectMany subclass component
-
-        MyComponent myC = new MyComponent();
-        multipleText = mr.getMultipleText(myC);
-        assertTrue(multipleText.equals(" multiple "));
-
-        // case 3: UIOutput component
-
-        UIOutput output = new UIOutput();
-        multipleText = mr.getMultipleText(output);
-        assertTrue(!multipleText.equals(" multiple "));
-        assertTrue(multipleText.equals(""));
-    }
-
-
-    public class MyComponent extends UISelectMany {
-
-    }
-
-
-} // end of class TestComponentType
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestHtmlResponseWriter.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestHtmlResponseWriter.java
deleted file mode 100644
index 5fd4a5f..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestHtmlResponseWriter.java
+++ /dev/null
@@ -1,599 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestHtmlResponseWriter.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import javax.faces.FactoryFinder;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIOutput;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Arrays;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-/**
- * <B>TestHtmlResponseWriter.java</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestHtmlResponseWriter extends ServletFacesTestCase // ServletTestCase
-{
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-    private ResponseWriter writer = null;
-    private RenderKit renderKit = null;
-    private StringWriter sw = null;
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestHtmlResponseWriter() {
-        super("TestHtmlResponseWriter.java");
-    }
-
-
-    public TestHtmlResponseWriter(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-    public void setUp() {
-        super.setUp();
-        RenderKitFactory renderKitFactory = (RenderKitFactory)
-            FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-        renderKit = renderKitFactory.getRenderKit(getFacesContext(),
-                                                  RenderKitFactory.HTML_BASIC_RENDER_KIT);
-        sw = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-    }
-
-
-    public void testContentType() {
-        assertTrue(writer.getContentType().equals("text/html"));
-
-        // Test Invalid Encoding
-        try {
-            writer =
-                renderKit.createResponseWriter(sw, "foobar", "ISO-8859-1");
-            fail("IllegalArgumentException Should Have been Thrown!");
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-
-    public void testEncoding() {
-        assertTrue(writer.getCharacterEncoding().equals("ISO-8859-1"));
-
-        // Test Invalid Encoding
-        try {
-            writer = renderKit.createResponseWriter(sw, "text/html", "foobar");
-            fail("IllegalArgumentException Should Have been Thrown!");
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-
-    // Test "startElement method including the automatic closure of a
-    // previous "start element"
-    //
-    public void testStartElement() {
-        try {
-            writer.startElement("input", new UIInput());
-            assertTrue(sw.toString().equals("<input"));
-            writer.startElement("select", new UIInput());
-            assertTrue(sw.toString().equals("<input><select"));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-
-    // Test "endElement" method
-    // 
-    public void testEndElement() {
-        try {
-            writer.endElement("input");
-            assertTrue(sw.toString().equals("</input>"));
-            writer.startElement("frame", new UIInput());
-            writer.endElement("frame");
-            assertTrue(sw.toString().equals("</input><frame />"));
-            writer.endElement("frame");
-            assertTrue(sw.toString().equals("</input><frame /></frame>"));
-            sw = new StringWriter();
-            writer =
-                renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            writer.startElement("br", null);
-            writer.endElement("br");
-            assertTrue(sw.toString().equals("<br />"));
-
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-
-    // Test "writeAttribute" method
-    //
-    public void testWriteAttribute() {
-        try {
-            UIInput in = new UIInput();
-            writer.startElement("input", in);
-            writer.writeAttribute("type", "text", "type");
-            writer.writeAttribute("readonly", Boolean.TRUE, "readonly");
-            writer.writeAttribute("disabled", Boolean.FALSE, "disabled");
-            writer.writeAttribute("greaterthan", ">", "greaterthan");
-            writer.endElement("input");
-            assertTrue(sw.toString().equals("<input type=" + "\"text\"" +
-                                            " readonly=\"readonly\"" +
-                                            " greaterthan=" + "\">\" />"));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-
-    //
-    // Test "writeURIAttribute" method
-    //
-    public void testWriteURIAttribute() {
-        try {
-            writer.startElement("input", new UIInput());
-            writer.writeAttribute("type", "image", "type");
-            writer.writeURIAttribute("src", "/mygif/foo.gif", "src");
-            writer.endElement("input");
-            assertTrue(sw.toString().equals("<input type=" + "\"image\"" +
-                                            " src=" + "\"/mygif/foo.gif\"" + " />"));
-            //
-            // test URL encoding
-            //
-            sw = new StringWriter();
-            writer =
-                renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            writer.startElement("foo", new UIInput());
-            writer.writeURIAttribute("player", "Bobby Orr", "player");
-            writer.endElement("input");
-            assertTrue(sw.toString().equals("<foo player=" + "\"Bobby+Orr\" />"));
-            //
-            // test no URL encoding (javascript)
-            //
-            sw = new StringWriter();
-            writer =
-                renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            writer.startElement("foo", new UIInput());
-            writer.writeURIAttribute("player", "javascript:Bobby Orr", null);
-            writer.endElement("foo");
-            assertTrue(
-                sw.toString().equals("<foo player=" +
-                                     "\"javascript:Bobby Orr\"></foo>"));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-    
-    
-    public void testWriteCdata() {
-        sw = new StringWriter();
-        try {
-            writer = renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            writer.startElement("cdata", new UIOutput());
-            // should be ignored
-            writer.writeAttribute("id", "value", "id");
-            // should be ignored
-            writer.writeURIAttribute("id", "value", "id");
-            // should be ignored
-            writer.writeComment("comment");
-            // should be present in the StringWriter
-            writer.writeText("Text between the cdata section", null);            
-            writer.endElement("cdata");
-            assertTrue(
-                  sw.toString().equals("<![CDATA[Text between the cdata section]]>"));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-
-        // cdata with script
-        sw = new StringWriter();
-        try {
-            writer = renderKit.createResponseWriter(sw, "application/xhtml+xml", "UTF-8");
-            writer.startElement("cdata", new UIOutput());
-            writer.startElement("script", new UIOutput());
-            writer.writeText("alert('hello');", null);
-            writer.endElement("script");
-            writer.endElement("cdata");
-            assertTrue("<![CDATA[<script>alert('hello');</script>]]>".equals(sw.toString()));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-
-    public void testWriteComment() {
-        try {
-            writer.writeComment("This is a comment");
-            assertTrue(sw.toString().equals("<!--This is a comment-->"));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-    public void testWriteScriptElement() throws Exception {
-        StringWriter sw = new StringWriter();
-        StringWriter swx = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-        ResponseWriter xmlWriter = renderKit.createResponseWriter(swx, "application/xhtml+xml", "UTF-8");
-        UIOutput output = new UIOutput();
-        writer.startElement("script", output);
-        writer.writeURIAttribute("src", "http://foo.net/some.js", "src");
-        writer.writeAttribute("type", "text/javascript", "type");
-        writer.writeAttribute("language", "Javascript", "language");
-        writer.endElement("script");
-        String result = sw.toString();
-        System.out.println(result);
-        assertTrue((!result.contains("<!--") && !result.contains("-->")));
-
-        xmlWriter.startElement("script", output);
-        xmlWriter.writeAttribute("src", "http://foo.net/some.js", "src");
-        xmlWriter.writeAttribute("type", "text/javascript", "type");
-        xmlWriter.writeAttribute("language", "Javascript", "language");
-        xmlWriter.endElement("script");
-        result = swx.toString();
-        System.out.println(result);
-        assertTrue((!result.contains("<[CDATA[") && !result.contains("]]>")));
-
-        sw = new StringWriter();
-        swx = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-        xmlWriter = renderKit.createResponseWriter(swx, "application/xhtml+xml", "UTF-8");
-        output = new UIOutput();
-        writer.startElement("script", output);
-        writer.writeAttribute("type", "text/javascript", "type");
-        writer.writeAttribute("language", "Javascript", "language");
-        writer.writeText("<!-- alert('foo') //-->", null);
-        writer.endElement("script");
-        result = sw.toString();
-        String expected = "<script type=\"text/javascript\" language=\"Javascript\">\n" +
-             "<!--\n" +
-             " alert('foo') \n" +
-             "//-->\n" +
-             "</script>";
-        System.out.println("1:" + result);
-        assertTrue(expected.equals(result));
-        
-
-        xmlWriter.startElement("script", output);
-        xmlWriter.writeAttribute("type", "text/javascript", "type");
-        xmlWriter.writeAttribute("language", "Javascript", "language");
-        xmlWriter.writeText("//<![CDATA[ alert('foo') //]]>", null);
-        xmlWriter.endElement("script");
-        result = swx.toString();
-        expected = "<script type=\"text/javascript\" language=\"Javascript\">\n" +
-             "//<![CDATA[\n" +
-             " alert('foo') \n" +
-             "//]]>\n" +
-             "</script>";
-        System.out.println("2:" + result);
-        assertTrue(expected.equals(result));
-
-        swx = new StringWriter();
-        xmlWriter = renderKit.createResponseWriter(swx, "application/xhtml+xml", "UTF-8");
-        xmlWriter.startElement("ajax", output);
-        xmlWriter.startElement("cdata", output);
-        xmlWriter.startElement("script", output);
-        xmlWriter.writeAttribute("type", "text/javascript", "type");
-        xmlWriter.writeAttribute("language", "Javascript", "language");
-        xmlWriter.writeText("if (true && true) { alert('foo'); }", null);
-        xmlWriter.endElement("script");
-        xmlWriter.endElement("cdata");
-        xmlWriter.endElement("ajax");
-        result = swx.toString();
-        expected = "<ajax><![CDATA[<script type=\"text/javascript\" language=\"Javascript\">if (true && true) { alert('foo'); }</script>]]></ajax>";
-        System.out.println("3:" + result);
-        assertTrue(expected.equals(result));
-
-    }
-
-    public void testWriteStyleElement() throws Exception {
-        StringWriter sw = new StringWriter();
-        StringWriter swx = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-        ResponseWriter xmlWriter = renderKit.createResponseWriter(swx, "application/xhtml+xml", "UTF-8");
-        UIOutput output = new UIOutput();
-        writer.startElement("style", output);
-        writer.writeAttribute("src", "http://foo.net/some.css", "src");
-        writer.writeAttribute("type", "text/css", "type");
-        writer.endElement("style");
-        String result = sw.toString();
-        System.out.println(result);
-        assertTrue((!result.contains("<!--") && !result.contains("-->")));
-
-        xmlWriter.startElement("style", output);
-        xmlWriter.writeAttribute("src", "http://foo.net/some.css", "src");
-        xmlWriter.writeAttribute("type", "text/css", "type");
-        xmlWriter.endElement("style");
-        result = swx.toString();
-        System.out.println(result);
-        assertTrue((!result.contains("<![CDATA[") && !result.contains("]]>")));
-
-        sw = new StringWriter();
-        swx = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-        xmlWriter = renderKit.createResponseWriter(swx, "application/xhtml+xml", "UTF-8");
-        writer.startElement("style", output);
-        writer.writeAttribute("type", "text/css", "type");
-        writer.write(".h1 { color: red }");
-        writer.endElement("style");
-        result = sw.toString();
-        System.out.println(result);
-        assertTrue((result.contains("<!--") && result.contains("-->")));
-
-        xmlWriter.startElement("style", output);
-        xmlWriter.writeAttribute("type", "text/css", "type");
-        xmlWriter.write(".h1 { color: red }");
-        xmlWriter.endElement("style");
-        result = swx.toString();
-        System.out.println(result);
-        assertTrue((result.contains("<![CDATA[") && result.contains("]]>")));
-
-        sw = new StringWriter();
-        swx = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-        xmlWriter = renderKit.createResponseWriter(swx, "application/xhtml+xml", "UTF-8");
-        writer.startElement("style", output);
-        writer.writeAttribute("type", "text/css", "type");
-        writer.write("<!-- .h1 { color: red } //-->");
-        writer.endElement("style");
-        result = sw.toString();
-        System.out.println("3:" +result);
-        String expected = "<style type=\"text/css\">\n" +
-             "<!--\n" +
-             " .h1 { color: red } \n" +
-             "//-->\n" +
-             "</style>";
-        assertTrue(expected.equals(result));
-
-        xmlWriter.startElement("style", output);
-        xmlWriter.writeAttribute("type", "text/css", "type");
-        xmlWriter.write("<![CDATA[ .h1 { color: red } ]]>");
-        xmlWriter.endElement("style");
-        result = swx.toString();
-        System.out.println("4:" +result);
-        expected = "<style type=\"text/css\">\n" +
-             "<![CDATA[\n" +
-             " .h1 { color: red } \n" +
-             "]]>\n" +
-             "</style>";
-        assertTrue(expected.equals(result));
-    }
-
-
-    //
-    // Test variations of the writeText method..
-    //
-    public void testWriteText() {
-        try {
-            //----------------------------
-            // test Object param flavor...
-            //----------------------------
-            StringBuffer sb = new StringBuffer("Some & Text");
-            writer.writeText(sb, null);
-            assertTrue(sw.toString().equals("Some & Text"));
-            //-----------------------------------------
-            // test char[], offset, len param flavor...
-            //-----------------------------------------
-            sw = new StringWriter();
-            writer =
-                renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            char[] carr1 = {'a', 'b', 'c', 'd', 'e'};
-            writer.writeText(carr1, 0, 2);
-            assertTrue(sw.toString().equals("ab"));
-            sw = new StringWriter();
-            writer =
-                renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            writer.writeText(carr1, 0, 0);
-            assertTrue(sw.toString().equals(""));
-
-            boolean exceptionThrown = false;
-            try {
-                writer.writeText(carr1, -1, 3);
-            } catch (IndexOutOfBoundsException iob) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-            exceptionThrown = false;
-            try {
-                writer.writeText(carr1, 10, 3);
-            } catch (IndexOutOfBoundsException iob) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-            exceptionThrown = false;
-            try {
-                writer.writeText(carr1, 2, -1);
-            } catch (IndexOutOfBoundsException iob) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-            exceptionThrown = false;
-            try {
-                writer.writeText(carr1, 2, 10);
-            } catch (IndexOutOfBoundsException iob) {
-                exceptionThrown = true;
-            }
-            assertTrue(exceptionThrown);
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-    /**
-     * Added for issue 704.
-     */
-    public void testWriteDecRefRegressionTest() throws Exception {
-        Character c = '\u4300';
-        String test = c.toString();
-        sw = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "UTF-8");
-        writer.writeText(test, "value");
-        assertTrue("䌀", "䌀".equals(sw.toString()));
-    }
-
-
-    /**
-     * Added for issue 705.
-     */
-    public void testAttributesSumGreaterThan1024RegresssionTest() throws Exception {
-        StringBuilder value = new StringBuilder();
-        for (int i = 0; i < 2111; i++) {
-            value.append(i);
-        }
-        sw = new StringWriter();
-        writer = renderKit.createResponseWriter(sw, "text/html", "UTF-8");
-        writer.startElement("input", null);
-        writer.writeAttribute("onclick", value.toString(), "onclick");
-        writer.writeAttribute("onclick", value.toString(), "onclick");
-        writer.endElement("input");
-        StringBuilder control = new StringBuilder();
-        control.append("<input onclick=\"").append(value.toString()).append("\" onclick=\"").append(value.toString()).append("\" />");
-        assertTrue(sw.toString(), control.toString().trim().equals(sw.toString().trim()));
-
-    }
-
-    //
-    // Test Null Argument Exceptions
-    //
-    public void testNullArgExceptions() {
-        boolean exceptionThrown = false;
-        try {
-            writer.startElement(null, null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            writer.endElement(null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            writer.writeAttribute("foo", null, null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(!exceptionThrown);
-        exceptionThrown = false;
-        try {
-            writer.writeAttribute(null, "bar", null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            writer.writeURIAttribute("foo", null, null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            writer.writeURIAttribute(null, "bar", null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            writer.writeComment(null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-        exceptionThrown = false;
-        try {
-            writer.writeText(null, null);
-        } catch (IOException e) {
-            assertTrue(false);
-        } catch (NullPointerException npe) {
-            exceptionThrown = true;
-        }
-        assertTrue(exceptionThrown);
-    }
-} // end of class TestHtmlResponseWriter
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRendererConversions.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRendererConversions.java
deleted file mode 100644
index bece3f4..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRendererConversions.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestRendererConversions.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import java.util.Locale;
-
-
-/**
- * <B>TestRendererConversions</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestRendererConversions extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-    public static final String TEST_URI = "/components.jsp";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestRendererConversions() {
-        super("TestRendererConversions");
-    }
-
-
-    public TestRendererConversions(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void beginEmptyStrings(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-        theRequest.addParameter("number", "");
-        theRequest.addParameter("date", "");
-        theRequest.addParameter("text", "");
-        theRequest.addParameter("hidden", "");
-        theRequest.addParameter("secret", "");
-    }
-
-
-    public void setUp() {
-        super.setUp();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setViewId("viewId");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-    }
-
-
-    /**
-     * Test the built-in conversion for those renderers that have it.
-     */
-
-    public void testEmptyStrings() {
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        root.setLocale(Locale.US);
-        UIInput
-            text = new UIInput(),
-            hidden = new UIInput(),
-            secret = new UIInput();
-
-        text.setId("text");
-        hidden.setId("hidden");
-        secret.setId("secret");
-
-        text.setRendererType("Text");
-        hidden.setRendererType("Hidden");
-        secret.setRendererType("Secret");
-
-        root.getChildren().add(text);
-        root.getChildren().add(hidden);
-        root.getChildren().add(secret);
-        TextRenderer textRenderer = new TextRenderer();
-        HiddenRenderer hiddenRenderer = new HiddenRenderer();
-        SecretRenderer secretRenderer = new SecretRenderer();
-
-        try {
-            textRenderer.decode(getFacesContext(), text);
-            hiddenRenderer.decode(getFacesContext(), hidden);
-            secretRenderer.decode(getFacesContext(), secret);
-        } catch (Throwable e) {
-            assertTrue(false);
-        }
-        assertTrue(text.isValid());
-        assertTrue(hidden.isValid());
-        assertTrue(secret.isValid());
-    }
-
-
-    public void beginNulls(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-    }
-
-
-    public void testNulls() {
-        testEmptyStrings();
-    }
-
-
-    public void beginBadConversion(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-    }
-
-
-    public void testBadConversion() {
-        UIComponent root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-    }
-
-
-} // end of class TestRendererConversions
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_1.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_1.java
deleted file mode 100644
index 6142caf..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_1.java
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestRenderers_1.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.application.ViewHandlerImpl;
-import com.sun.faces.util.Util;
-
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
-import javax.faces.component.UIGraphic;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIParameter;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UISelectOne;
-import javax.faces.component.UIViewRoot;
-import javax.el.ValueExpression;
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Test encode and decode methods in Renderer classes.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestRenderers_1 extends JspFacesTestCase {
-
-    //
-    // Protected Constants
-    //
-
-    public static final String TEST_URI = "/faces/form/FormRenderer/";
-   
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-    
-    //
-    // Attribute Instance Variables
-    // Relationship Instance Variables
-    //
-    // Constructors and Initializers    
-    //
-
-    public TestRenderers_1() {
-        super("TestRenderers_1");
-    }
-
-
-    public TestRenderers_1(String name) {
-        super(name);
-    }
-   
-    //
-    // Class methods
-    //
-
-    //
-    // Methods from TestCase
-    
-    public void setUp() {
-        super.setUp();
-
-        UIViewRoot xmlView = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        xmlView.setViewId("viewId");
-        xmlView.setLocale(Locale.US);
-        getFacesContext().setViewRoot(xmlView);
-        assertTrue(getFacesContext().getResponseWriter() != null);
-        
-        // Spoof a loadBundle action...
-        ResourceBundle bundle = new Messages_en();
-        if (null == bundle) {
-            return;
-        }
-
-        HashMap toStore = new HashMap();
-        Enumeration keys = bundle.getKeys();
-        String key = null;
-        while (keys.hasMoreElements()) {
-            key = (String) keys.nextElement();
-            toStore.put(key, bundle.getString(key));
-        }
-        getFacesContext().getExternalContext().
-            getRequestMap().put("Messages", toStore);
-    }
-
-
-    // Methods from FacesTestCase
-    public boolean sendWriterToFile() {
-        return true;
-    }
-
-
-    public String getExpectedOutputFilename() {
-        return "CorrectRenderersResponse";
-    }
-
-
-    public static final String ignore[] = {
-    };
-
-
-    public String[] getLinesToIgnore() {
-        return ignore;
-    }
-
-
-    public void beginRenderers(WebRequest theRequest) {
-
-        theRequest.setURL("localhost:8080", null, null, TEST_URI, null);
-        // theRequest.addParameter("name", "FormRenderer");
-        //theRequest.addParameter("action", "form");
-        theRequest.addParameter("radioRenderer", "Two");
-        theRequest.addParameter("name", "ButtonRenderer");
-        theRequest.addParameter("name", "button");
-    }
-
-
-    //
-    // General Methods
-    //
-    public void testRenderers() throws Exception {
-//        com.sun.faces.util.DebugUtil.waitForDebugger();
-        
-        Map sessionMap = getFacesContext().getExternalContext().getSessionMap();
-       
-        // create a dummy root for the tree.
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);       
-        root.setId("root");
-        root.setViewId("/root");
-        root.setLocale(Locale.US);
-        ViewHandlerImpl viewHandler = new ViewHandlerImpl();
-        
-        getFacesContext().getApplication().setViewHandler(viewHandler);
-        getFacesContext().setViewRoot(root);
-     /*   Object view = 
-	    Util.getStateManager(getFacesContext()).saveSerializedView(getFacesContext());
-	getFacesContext().getExternalContext().getRequestMap().put(RIConstants.SAVED_STATE, view);*/
-        // Call this twice to test the multiple forms in a page logic.
-        getFacesContext().getResponseWriter().startDocument();
-        verifyFormRenderer(root, 0);
-        verifyFormRenderer(root, 1);
-        verifyRadioRenderer(root);
-        verifyButtonRenderer(root);
-        verifyLinkRenderer(root);
-        getFacesContext().getResponseWriter().endDocument();
-
-        assertTrue(verifyExpectedOutput());
-        sessionMap.remove("Messages");
-        String stringToCheck = "id=" + "\"" + "formRenderer0" + "\"";
-        assertTrue(verifyExpectedStringInOutput(stringToCheck));
-
-    }
-
-
-    public void verifyLinkRenderer(UIComponent root) throws IOException {
-        verifyOutputLinkRenderer(root);
-        verifyCommandLinkRenderer(root);
-    }
-
-
-    public void verifyOutputLinkRenderer(UIComponent root) throws IOException {
-        // Provide attributes for all possible lookups
-        // make sure that valueRef is returned and no others.
-        System.out.println("Testing Link Renderer...");
-        LinkRenderer linkRenderer = new OutputLinkRenderer();
-        UIOutput uiOutput = new UIOutput();
-        UIOutput output = new UIOutput();
-        uiOutput.setId("labelLink1");
-        uiOutput.setValue("hrefValue");
-        output.setValue("PASSED");
-        output.setValueExpression("value",
-                               ELUtils.createValueExpression("#{TestBean.modelLabel}"));
-        uiOutput.getChildren().add(output);
-        root.getChildren().add(uiOutput);
-        System.out.println("Testing label lookup from local value...");
-        linkRenderer.encodeBegin(getFacesContext(), uiOutput);
-        linkRenderer.encodeChildren(getFacesContext(), uiOutput);
-        linkRenderer.encodeEnd(getFacesContext(), uiOutput);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // No value this round, ensure the valueRef for the button label
-        // is pulled from the model
-        uiOutput = new UIOutput();
-        uiOutput.setId("labelLink2");
-        uiOutput.setValue("hrefValue");
-        output = new UIOutput();
-        output.setValueExpression("value",
-                               ELUtils.createValueExpression("#{TestBean.modelLabel}"));
-        uiOutput.getChildren().add(output);
-        root.getChildren().add(uiOutput);
-        System.out.println("Testing label lookup from model...");
-        linkRenderer.encodeBegin(getFacesContext(), uiOutput);
-        linkRenderer.encodeChildren(getFacesContext(), uiOutput);
-        linkRenderer.encodeEnd(getFacesContext(), uiOutput);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // No valueRef or explicit label.  Pull value from the
-        // specified ResourceBundle using the key
-        uiOutput = new UIOutput();
-        output = new UIOutput();
-        uiOutput.setId("labelLink3");
-        uiOutput.setValue("hrefValue");
-        ValueExpression vb = ELUtils.createValueExpression("#{Messages.passedkey}");
-        output.setValueExpression("value", vb);
-        uiOutput.getChildren().add(output);
-        root.getChildren().add(uiOutput);
-        System.out.println("Testing label lookup from ResourceBundle...");
-        linkRenderer.encodeBegin(getFacesContext(), uiOutput);
-        linkRenderer.encodeChildren(getFacesContext(), uiOutput);
-        linkRenderer.encodeEnd(getFacesContext(), uiOutput);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // All lookup methods fail, test of link should be empty
-        
-        uiOutput = new UIOutput();
-        output = new UIOutput();
-        uiOutput.setId("labelLink4");
-        uiOutput.setValue("hrefValue");
-        uiOutput.getAttributes().put("rel", "rel");
-        uiOutput.getAttributes().put("rev", "rev");
-        uiOutput.getAttributes().put("shape", "shape");
-        uiOutput.getAttributes().put("coords", "coords");
-        uiOutput.getAttributes().put("hreflang", "hreflang");
-        output.setValueExpression("value",
-                               ELUtils.createValueExpression("#{NonBean.label}"));
-        uiOutput.getChildren().add(output);
-        root.getChildren().add(uiOutput);
-        System.out.println("Testing empty label...");
-        linkRenderer.encodeBegin(getFacesContext(), uiOutput);
-        linkRenderer.encodeChildren(getFacesContext(), uiOutput);
-        linkRenderer.encodeEnd(getFacesContext(), uiOutput);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // Test link as image
-        uiOutput = new UIOutput();
-        UIGraphic graphic = new UIGraphic();
-        uiOutput.setId("linkImage");
-        uiOutput.setValue("hrefValue");
-        graphic.setValue("duke.gif");
-        uiOutput.getChildren().add(graphic);
-        root.getChildren().add(uiOutput);
-        System.out.println("Testing link as image");
-        linkRenderer.encodeBegin(getFacesContext(), uiOutput);
-        linkRenderer.encodeChildren(getFacesContext(), uiOutput);
-        linkRenderer.encodeEnd(getFacesContext(), uiOutput);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // Test link as image with image specified in resource bundle
-        uiOutput = new UIOutput();
-        graphic = new UIGraphic();
-        uiOutput.setId("linkImage2");
-        uiOutput.setValue("hrefValue");
-        vb = ELUtils.createValueExpression("#{Messages.imagekey}");
-        graphic.setValueExpression("value", vb);
-        uiOutput.getChildren().add(graphic);
-        root.getChildren().add(uiOutput);
-        System.out.println("Testing link image via resource lookup");
-        linkRenderer.encodeBegin(getFacesContext(), uiOutput);
-        linkRenderer.encodeChildren(getFacesContext(), uiOutput);
-        linkRenderer.encodeEnd(getFacesContext(), uiOutput);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // Test link with parameters
-        uiOutput = new UIOutput();
-        uiOutput.setId("paramLink");
-        uiOutput.setValue("hrefValue");
-        root.getChildren().add(uiOutput);
-        UIParameter parameter1 = new UIParameter();
-        UIParameter parameter2 = new UIParameter();
-        parameter1.setId("param1");
-        parameter1.setName("parameter1");
-        parameter1.setValue("param_value1");
-        parameter2.setId("param2");
-        parameter2.setName("parameter2");
-        parameter2.setValue("param_value2");
-        uiOutput.getChildren().add(parameter1);
-        uiOutput.getChildren().add(parameter2);
-        uiOutput.getChildren().add(graphic);
-        System.out.println("Testing link with UIParameters...");
-        linkRenderer.encodeBegin(getFacesContext(), uiOutput);
-        linkRenderer.encodeChildren(getFacesContext(), uiOutput);
-        linkRenderer.encodeEnd(getFacesContext(), uiOutput);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void verifyCommandLinkRenderer(UIComponent root) throws IOException {
-        // Provide attributes for all possible lookups
-        // make sure that valueRef is returned and no others.
-        System.out.println("Testing Link Renderer...");
-        LinkRenderer linkRenderer = new CommandLinkRenderer();
-        UICommand uiCommand = new UICommand();
-        UIOutput output = new UIOutput();
-        UIForm form = new UIForm();
-        uiCommand.setId("labelLink1");
-        output.setValue("PASSED");
-        output.setValueExpression("value",
-                               ELUtils.createValueExpression("#{TestBean.modelLabel}"));
-        uiCommand.getChildren().add(output);
-        form.getChildren().add(uiCommand);
-        root.getChildren().add(form);
-        System.out.println("Testing label lookup from local value...");
-        linkRenderer.encodeBegin(getFacesContext(), uiCommand);
-        linkRenderer.encodeChildren(getFacesContext(), uiCommand);
-        linkRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // No value this round, ensure the valueRef for the button label
-        // is pulled from the model
-        uiCommand = new UICommand();
-        uiCommand.setId("labelLink2");
-        output = new UIOutput();
-        output.setValueExpression("value",
-                               ELUtils.createValueExpression("#{TestBean.modelLabel}"));
-        uiCommand.getChildren().add(output);
-        form.getChildren().add(uiCommand);
-        System.out.println("Testing label lookup from model...");
-        linkRenderer.encodeBegin(getFacesContext(), uiCommand);
-        linkRenderer.encodeChildren(getFacesContext(), uiCommand);
-        linkRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // No valueRef or explicit label.  Pull value from the
-        // specified ResourceBundle using the key
-        uiCommand = new UICommand();
-        output = new UIOutput();
-        uiCommand.setId("labelLink3");
-        ValueExpression vb = ELUtils.createValueExpression("#{Messages.passedkey}");
-        output.setValueExpression("value", vb);
-        uiCommand.getChildren().add(output);
-        form.getChildren().add(uiCommand);
-        System.out.println("Testing label lookup from ResourceBundle...");
-        linkRenderer.encodeBegin(getFacesContext(), uiCommand);
-        linkRenderer.encodeChildren(getFacesContext(), uiCommand);
-        linkRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // All lookup methods fail, test of link should be empty
-        
-        uiCommand = new UICommand();
-        output = new UIOutput();
-        uiCommand.setId("labelLink4");
-        uiCommand.getAttributes().put("rel", "rel");
-        uiCommand.getAttributes().put("rev", "rev");
-        uiCommand.getAttributes().put("shape", "shape");
-        uiCommand.getAttributes().put("coords", "coords");
-        uiCommand.getAttributes().put("hreflang", "hreflang");
-        output.setValueExpression("value",
-                               ELUtils.createValueExpression("#{NonBean.label}"));
-        uiCommand.getChildren().add(output);
-        form.getChildren().add(uiCommand);
-        System.out.println("Testing empty label...");
-        linkRenderer.encodeBegin(getFacesContext(), uiCommand);
-        linkRenderer.encodeChildren(getFacesContext(), uiCommand);
-        linkRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // Test link as image
-        uiCommand = new UICommand();
-        UIGraphic graphic = new UIGraphic();
-        uiCommand.setId("linkImage");
-        graphic.setValue("duke.gif");
-        uiCommand.getChildren().add(graphic);
-        form.getChildren().add(uiCommand);
-        System.out.println("Testing link as image");
-        linkRenderer.encodeBegin(getFacesContext(), uiCommand);
-        linkRenderer.encodeChildren(getFacesContext(), uiCommand);
-        linkRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // Test link as image with image specified in resource bundle
-        uiCommand = new UICommand();
-        graphic = new UIGraphic();
-        uiCommand.setId("linkImage2");
-        vb = ELUtils.createValueExpression("#{Messages.imagekey}");
-        graphic.setValueExpression("value", vb);
-        uiCommand.getChildren().add(graphic);
-        form.getChildren().add(uiCommand);
-        System.out.println("Testing link image via resource lookup");
-        linkRenderer.encodeBegin(getFacesContext(), uiCommand);
-        linkRenderer.encodeChildren(getFacesContext(), uiCommand);
-        linkRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // Test link with parameters
-        uiCommand = new UICommand();
-        uiCommand.setId("paramLink");
-        uiCommand.setValue("link with parameters");
-        form.getChildren().add(uiCommand);
-        UIParameter parameter1 = new UIParameter();
-        UIParameter parameter2 = new UIParameter();
-        parameter1.setId("param1");
-        parameter1.setName("parameter1");
-        parameter1.setValue("param_value1");
-        parameter2.setId("param2");
-        parameter2.setName("parameter2");
-        parameter2.setValue("param_value2");
-        uiCommand.getChildren().add(parameter1);
-        uiCommand.getChildren().add(parameter2);
-        System.out.println("Testing link with UIParameters...");
-        linkRenderer.encodeBegin(getFacesContext(), uiCommand);
-        linkRenderer.encodeChildren(getFacesContext(), uiCommand);
-        linkRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void verifyFormRenderer(UIComponent root,
-                                   int expectedFormNumber) throws IOException {
-        boolean result = false;
-         
-        // Test FormRenderer.
-        System.out.println("Testing FormRenderer");
-        UIForm uiForm = new UIForm();
-        uiForm.setId("formRenderer" + expectedFormNumber);
-        //uiForm.setFormName("basicForm");
-        root.getChildren().add(uiForm);
-
-        FormRenderer formRenderer = new FormRenderer();
-        // test decode method
-        System.out.println("Testing decode method");
-
-        formRenderer.decode(getFacesContext(), uiForm);
-        
-        // make sure formEvent was queued.
-        System.out.println("Testing getApplicationEvent: ");
-       
-        // test encode method
-        System.out.println("Testing encode method");
-        formRenderer.encodeBegin(getFacesContext(), uiForm);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-        
-        // test encode method
-        System.out.println("Testing encodeEnd method");
-        formRenderer.encodeEnd(getFacesContext(), uiForm);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void verifyButtonRenderer(UIComponent root) throws IOException {
-        boolean result = false;
-         
-        // Test ButtonRenderer.
-        System.out.println("Testing ButtonRenderer");
-        UICommand uiCommand = new UICommand();
-        ButtonRenderer buttonRenderer = new ButtonRenderer();
-
-        // Test <Button> element rendering
-        uiCommand = new UICommand();
-        uiCommand.setId("imageButton");
-        uiCommand.getAttributes().put("image", "duke.gif");
-        uiCommand.getAttributes().put("type", "submit");
-        uiCommand.setValue("SHOUD NOT BE HERE");
-        root.getChildren().add(uiCommand);
-        System.out.println("Testing encode (<button> rendering) method");
-        getFacesContext().getResponseWriter().writeText("\n", null);
-        buttonRenderer.encodeBegin(getFacesContext(), uiCommand);
-        buttonRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // Test button as image with image specified in resource bundle
-        uiCommand = new UICommand();
-        uiCommand.setId("imageButton2");
-        ValueExpression vb = ELUtils.createValueExpression("#{Messages.imagekey}");
-        uiCommand.setValueExpression("image", vb);
-        root.getChildren().add(uiCommand);
-        System.out.println("Testing link image via resource lookup");
-        buttonRenderer.encodeBegin(getFacesContext(), uiCommand);
-        buttonRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-// ------------------  Test label determination ------------------------------
-        // Provide attributes for all possible lookups
-        // make sure that valueRef is returned and no others.
-        uiCommand = new UICommand();
-        uiCommand.setId("labelButton1");
-        uiCommand.getAttributes().put("type", "submit");
-        uiCommand.setValue("PASSED");
-        uiCommand.setValueExpression("value",
-                                  ELUtils.createValueExpression(
-                                      "#{TestBean.modelLabel}"));
-        root.getChildren().add(uiCommand);
-        System.out.println("Testing label lookup from local value...");
-        buttonRenderer.encodeBegin(getFacesContext(), uiCommand);
-        buttonRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // No value this round, ensure the valueRef for the button label
-        // is pulled from the model
-        uiCommand = new UICommand();
-        uiCommand.setId("labelButton2");
-        uiCommand.getAttributes().put("type", "reset");
-        uiCommand.setValueExpression("value",
-                                  ELUtils.createValueExpression(
-                                      "#{TestBean.modelLabel}"));
-        root.getChildren().add(uiCommand);
-        System.out.println("Testing label lookup from model...");
-        buttonRenderer.encodeBegin(getFacesContext(), uiCommand);
-        buttonRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // No valueRef or explicit label.  Pull value from the
-        // specified ResourceBundle using the key
-        uiCommand = new UICommand();
-        uiCommand.setId("labelButton3");
-        uiCommand.getAttributes().put("type", "submit");
-        vb = ELUtils.createValueExpression("#{Messages.passedkey}");
-        uiCommand.setValueExpression("value", vb);
-        root.getChildren().add(uiCommand);
-        System.out.println("Testing label lookup from ResourceBundle...");
-        buttonRenderer.encodeBegin(getFacesContext(), uiCommand);
-        buttonRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        // All lookup methods fail, the value attribute should be empty
-        uiCommand = new UICommand();
-        uiCommand.setId("labelButton4");
-        uiCommand.getAttributes().put("type", "reset");
-        uiCommand.setValueExpression("value",
-                                  ELUtils.createValueExpression("#{NonBean.label}"));
-        root.getChildren().add(uiCommand);
-        System.out.println("Testing empty label...");
-        buttonRenderer.encodeBegin(getFacesContext(), uiCommand);
-        buttonRenderer.encodeEnd(getFacesContext(), uiCommand);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void verifyRadioRenderer(UIComponent root) throws IOException {
-        boolean result = false;
-         
-
-        // Test RadioRenderer.
-        System.out.println("Testing RadioRenderer");
-        UISelectOne uiSelectOne = new UISelectOne();
-        uiSelectOne.getAttributes().put("enabledClass", "enabledClass");
-        uiSelectOne.getAttributes().put("disabledClass", "disabledClass");
-        uiSelectOne.getAttributes().put("styleClass", "styleClass");
-        uiSelectOne.getAttributes().put("tabindex", new Integer(5));
-        uiSelectOne.getAttributes().put("title", "title");
-        UISelectItems uiSelectItems = new UISelectItems();
-        uiSelectOne.setId("radioRenderer");
-        root.getChildren().add(uiSelectOne);
-
-        SelectItem item1 = new SelectItem("One", "One", null);
-        item1.setDisabled(true);
-        SelectItem item2 = new SelectItem("Two", "Two", null);
-        SelectItem item3 = new SelectItem("Three", "Three", null);
-
-        SelectItem item4 = new SelectItem("Four", "Four", null);
-        SelectItem item5 = new SelectItem("Five", "Five", null);
-        SelectItem[] itemsArray = {item4, item5};
-        SelectItemGroup itemGroup = new SelectItemGroup("group", null, true,
-                                                        itemsArray);
-        SelectItem[] items = {item1, item2, item3, itemGroup};
-        uiSelectItems.setValue(items);
-        uiSelectItems.setId("items");
-        uiSelectOne.getChildren().add(uiSelectItems);
-
-        UIParameter param = new UIParameter();
-        param.setName("foo");
-        param.setValue("foovalue");
-        uiSelectOne.getChildren().add(param);
-        
-
-        RadioRenderer radioRenderer = new RadioRenderer();
-        // test decode method
-        System.out.println("Testing decode method");
-        radioRenderer.decode(getFacesContext(), uiSelectOne);
-        assertTrue(((String) uiSelectOne.getSubmittedValue()).equals("Two"));
-
-        // test encode method
-        System.out.println("Testing encode method");
-        radioRenderer.encodeBegin(getFacesContext(), uiSelectOne);
-        radioRenderer.encodeEnd(getFacesContext(), uiSelectOne);
-
-    }
-
-} // end of class TestRenderers_1
-
-class Messages_en extends ListResourceBundle {
-
-    /**
-     * See class description.
-     */
-    protected Object[][] getContents() {
-        return new Object[][]{
-            {"failedkey", "RES-BUNDLE FAILED"},
-            {"passedkey", "RES-BUNDLE PASSED"},
-            {"imagekey", "resduke.gif"}
-        };
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_2.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_2.java
deleted file mode 100644
index 3a3e2fa..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_2.java
+++ /dev/null
@@ -1,1419 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestRenderers_2.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.RIConstants;
-import com.sun.faces.el.ELUtils;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIGraphic;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIMessage;
-import javax.faces.component.UIMessages;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIParameter;
-import javax.faces.component.UISelectBoolean;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UISelectOne;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.context.ResponseWriter;
-import javax.faces.convert.Converter;
-import javax.faces.model.SelectItem;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Locale;
-
-/**
- * Test encode and decode methods in Renderer classes.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestRenderers_2 extends JspFacesTestCase {
-
-    //
-    // Instance Variables
-    //
-    private Application application;
-
-    //
-    // Protected Constants
-    //
-
-    public static String DATE_STR = "Jan 12, 1952";
-    public static String DATE_STR_LONG = "Sat, Jan 12, 1952 AD at 12:31:31 PM";
-
-    public static String TIME_STR = "12:31:31 PM";
-    public static String NUMBER_STR = "47%";
-    public static String NUMBER_STR_PATTERN = "1999.8765432";
-
-
-    public boolean sendWriterToFile() {
-        return true;
-    }
-
-
-    public String getExpectedOutputFilename() {
-        return "CorrectRenderersResponse_2";
-    }
-
-
-     public static final String ignore[] = {
-     };  
- 
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-    private FacesContextFactory facesContextFactory = null;
-
-    // Attribute Instance Variables
-    // Relationship Instance Variables
-    //
-    // Constructors and Initializers    
-    //
-
-    public TestRenderers_2() {
-        super("TestRenderers_2");
-    }
-
-
-    public TestRenderers_2(String name) {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // Methods from TestCase
-    //
-    public void setUp() {
-        super.setUp();
-        ApplicationFactory aFactory =
-            (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = aFactory.getApplication();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setViewId("viewId");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-        Object view = 
-	    Util.getStateManager(getFacesContext()).saveSerializedView(getFacesContext());
-	getFacesContext().getExternalContext().getRequestMap().put(RIConstants.SAVED_STATE, view);
-        assertTrue(null != getFacesContext().getResponseWriter());
-    }
-
-
-    public void beginRenderers(WebRequest theRequest) {
-        // for CheckboxRenderer
-        theRequest.addParameter("myCheckboxOn", "on");
-        theRequest.addParameter("myCheckboxYes", "yes");
-        theRequest.addParameter("myCheckboxTrue", "true");
-  
-        // for LinkRenderer
-        theRequest.addParameter("action", "command");
-        theRequest.addParameter("myCommand", "LinkRenderer");
-        // for Listbox
-        theRequest.addParameter("myListbox", "100");
-        // for TextEntry_Secret
-        theRequest.addParameter("mySecret", "secret");
-        // for Text
-        theRequest.addParameter("myInputText", "text");
-
-        theRequest.addParameter("myOutputText", "text");
-
-        theRequest.addParameter("myTextarea", "TextareaRenderer");
-
-        theRequest.addParameter("myGraphicImage", "graphicimage");
-
-        theRequest.addParameter("myOutputMessage", "outputmessage");
-    }
-
-
-    public void testRenderers() throws Exception {
-
-        // create a dummy root for the tree.
-        UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        root.setId("root");
-        root.setLocale(Locale.US);
-        testCheckboxRenderer(root);
-        // PENDING (visvan) revisit this test case once HyperLinkRenderer
-        // is fixed.
-        // testLinkRenderer(root);
-        getFacesContext().getResponseWriter().startDocument();
-        testListboxRenderer(root);
-        testSecretRenderer(root);
-        testInputTextRenderer(root);
-        testOutputTextRenderer(root);
-        testTextareaRenderer(root);
-        testGraphicImageRenderer(root);
-        testOutputMessageRenderer(root);
-        testMessageRenderer(root);
-        testMessagesRenderer(root);
-        getFacesContext().getResponseWriter().endDocument();
-        assertTrue(verifyExpectedOutput());
-
-    }
-
-
-    //
-    // General Methods
-    //
-    public void testCheckboxRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing CheckboxRenderer");
-        UISelectBoolean selectBoolean = new UISelectBoolean();
-        selectBoolean.setValue(null);
-        selectBoolean.setId("myCheckbox");
-        root.getChildren().add(selectBoolean);
-
-        CheckboxRenderer checkboxRenderer = new CheckboxRenderer();
-
-        // First test no parameter coming in - (the checkbox
-        // is not checked)
-         
-        // test decode method
-
-        System.out.println("    Testing decode method - no parameter");
-        checkboxRenderer.decode(getFacesContext(), selectBoolean);
-        assertEquals("false", selectBoolean.getSubmittedValue().toString());
-        Object value = checkboxRenderer.getConvertedValue(getFacesContext(),
-                                                          selectBoolean,
-                                                          selectBoolean.getSubmittedValue());
-        assertEquals(Boolean.FALSE, value);
-
-        // Test parameter coming in - (the checkbox has been checked)
-
-        // test decode method
-
-        System.out.println("    Testing decode method - parameter (on)");
-        selectBoolean = new UISelectBoolean();
-        selectBoolean.setId("myCheckboxOn");
-        selectBoolean.setValue(null);
-        checkboxRenderer.decode(getFacesContext(), selectBoolean);
-        assertEquals("true", selectBoolean.getSubmittedValue().toString());
-        value = checkboxRenderer.getConvertedValue(getFacesContext(),
-                                                   selectBoolean,
-                                                   selectBoolean.getSubmittedValue());
-        assertEquals(Boolean.TRUE, value);
-        
-
-        // test decode method
-
-        System.out.println("    Testing decode method - parameter (yes)");
-        selectBoolean = new UISelectBoolean();
-        selectBoolean.setId("myCheckboxYes");
-        selectBoolean.setValue(null);
-        checkboxRenderer.decode(getFacesContext(), selectBoolean);
-        assertEquals("true", selectBoolean.getSubmittedValue().toString());
-        value = checkboxRenderer.getConvertedValue(getFacesContext(),
-                                                   selectBoolean,
-                                                   selectBoolean.getSubmittedValue());
-        assertEquals(Boolean.TRUE, value);
-       
-        // test decode method
-
-        System.out.println("    Testing decode method - parameter (true)");
-        selectBoolean = new UISelectBoolean();
-        selectBoolean.setId("myCheckboxTrue");
-        selectBoolean.setValue(null);
-        checkboxRenderer.decode(getFacesContext(), selectBoolean);
-        assertEquals("true", selectBoolean.getSubmittedValue().toString());
-        value = checkboxRenderer.getConvertedValue(getFacesContext(),
-                                                   selectBoolean,
-                                                   selectBoolean.getSubmittedValue());
-        assertEquals(Boolean.TRUE, value);
-        
-        // test decode method
-        
-        System.out.println("    Testing decode method - parameter (true)");
-        selectBoolean = new UISelectBoolean();
-        selectBoolean.setId("myCheckboxTrue");
-        selectBoolean.setValue(null);
-        checkboxRenderer.decode(getFacesContext(), selectBoolean);
-        assertEquals("true", selectBoolean.getSubmittedValue().toString());
-        value = checkboxRenderer.getConvertedValue(getFacesContext(),
-                                                   selectBoolean,
-                                                   selectBoolean.getSubmittedValue());
-        assertEquals(Boolean.TRUE, value);
-        
-         
-        // test decode method with checkbox disabled.
-        System.out.println("    Testing decode method - parameter (yes)");
-        selectBoolean = new UISelectBoolean();
-        selectBoolean.setId("mycheckboxDisabled");
-        selectBoolean.getAttributes().put("disabled", "true");
-        selectBoolean.setValue(Boolean.TRUE);
-        checkboxRenderer.decode(getFacesContext(), selectBoolean);
-        // make sure the value wasn't set to false. Bug id  4883159
-        assertTrue(!"false".equals(selectBoolean.getSubmittedValue()));
-        selectBoolean.getAttributes().remove("disabled");
-        
-        // test encode method
-        System.out.println("    Testing encode method - rendering checked");
-        selectBoolean = new UISelectBoolean();
-        selectBoolean.setId("myCheckbox");
-        selectBoolean.setSelected(true);
-        checkboxRenderer.encodeBegin(getFacesContext(), selectBoolean);
-        checkboxRenderer.encodeEnd(getFacesContext(), selectBoolean);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        System.out.println("    Testing encode method - rendering unchecked");
-        selectBoolean.setSelected(false);
-        checkboxRenderer.encodeBegin(getFacesContext(), selectBoolean);
-        checkboxRenderer.encodeEnd(getFacesContext(), selectBoolean);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-
-        System.out.println(
-            "    Testing encode method - rendering unchecked with label");
-        checkboxRenderer.encodeBegin(getFacesContext(), selectBoolean);
-        checkboxRenderer.encodeEnd(getFacesContext(), selectBoolean);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void testLinkRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing LinkRenderer");
-        UICommand command = new UICommand();
-        command.setId("myCommand");
-        command.setRendererType("Link");
-        root.getChildren().add(command);
-
-        LinkRenderer hyperlinkRenderer = new CommandLinkRenderer();
-
-        System.out.println("    Testing decode method...");
-        hyperlinkRenderer.decode(getFacesContext(), command);
-
-        // Verify command event was set for the application..
-        System.out.println(
-            "    Testing added application event (commandEvent)..");
-        // PENDING FIX
-        /*  Iterator iter = getFacesContext().getFacesEvents();
-          assertTrue(iter.hasNext()); */
-
-        // Test encode method
-
-        System.out.println("    Testing encode method...");
-        hyperlinkRenderer.encodeBegin(getFacesContext(), command);
-        hyperlinkRenderer.encodeEnd(getFacesContext(), command);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void testListboxRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing ListboxRenderer");
-        UISelectOne selectOne = new UISelectOne();
-        UISelectItems uiSelectItems = new UISelectItems();
-        selectOne.setValue(null);
-        selectOne.setId("myListbox");
-        SelectItem item1 = new SelectItem(new Long(100), "Long1", null);
-        SelectItem item2 = new SelectItem(new Long(101), "Long2", null);
-        SelectItem item3 = new SelectItem(new Long(102), "Long3", null);
-        SelectItem item4 = new SelectItem(new Long(103), "Long4", null);
-        SelectItem[] selectItems = {item1, item2, item3, item4};
-        uiSelectItems.setValue(selectItems);
-        uiSelectItems.setId("items");
-        Converter converter = application.createConverter("javax.faces.Number");
-        selectOne.setConverter(converter);
-        selectOne.getChildren().add(uiSelectItems);
-        root.getChildren().add(selectOne);
-
-        ListboxRenderer listboxRenderer = new ListboxRenderer();
-
-        // test decode method
-        System.out.println("    Testing decode method... ");
-        listboxRenderer.decode(getFacesContext(), selectOne);
-        assertTrue("100".equals(selectOne.getSubmittedValue()));
-                   
-        // test convert method
-        Object value = listboxRenderer.getConvertedValue(getFacesContext(),
-                                                         selectOne,
-                                                         selectOne.getSubmittedValue());
-        assertTrue(value.equals(new Long(100)));
-
-        // test encode method
-        System.out.println("    Testing encode method... ");
-        //selectOne.setId("myListbox");
-        listboxRenderer.encodeBegin(getFacesContext(), selectOne);
-        listboxRenderer.encodeEnd(getFacesContext(), selectOne);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void testSecretRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing SecretRenderer");
-        UIInput textEntry = new UIInput();
-        textEntry.setValue(null);
-        textEntry.setId("mySecret");
-        root.getChildren().add(textEntry);
-
-        SecretRenderer secretRenderer = new SecretRenderer();
-
-        // test decode method
-
-        System.out.println("    Testing decode method...");
-        secretRenderer.decode(getFacesContext(), textEntry);
-        assertTrue("secret".equals(textEntry.getSubmittedValue()));
-
-        // test convert method
-        Object value = secretRenderer.getConvertedValue(getFacesContext(),
-                                                        textEntry,
-                                                        textEntry.getSubmittedValue());
-        assertTrue("secret".equals(value));
-
-        // test encode method
-
-        System.out.println("    Testing encode method...");
-        secretRenderer.encodeBegin(getFacesContext(), textEntry);
-        secretRenderer.encodeEnd(getFacesContext(), textEntry);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-
-    public void testInputTextRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing InputTextRenderer");
-        UIInput text = new UIInput();
-        text.setValue(null);
-        text.setId("myInputText");
-        root.getChildren().add(text);
-
-        TextRenderer textRenderer = new TextRenderer();
-
-        // test decode method
-
-        System.out.println("    Testing decode method...");
-        textRenderer.decode(getFacesContext(), text);
-        assertTrue("text".equals(text.getSubmittedValue()));
-
-        // test convert method
-        Object value = textRenderer.getConvertedValue(getFacesContext(),
-                                                      text,
-                                                      text.getSubmittedValue());
-        assertTrue("text".equals(value));
-
-        // test encode method
-
-        System.out.println("    Testing encode method...");
-        textRenderer.encodeBegin(getFacesContext(), text);
-        textRenderer.encodeEnd(getFacesContext(), text);
-    }
-
-
-    public void testOutputTextRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing OutputTextRenderer");
-        UIOutput text = new UIOutput();
-        text.setValue(null);
-        text.setId("myOutputText");
-        root.getChildren().add(text);
-
-        TextRenderer textRenderer = new TextRenderer();
-
-        // test decode method
-
-        System.out.println("    Testing decode method...");
-        textRenderer.decode(getFacesContext(), text);
-
-        // test encode method
-
-        System.out.println("    Testing encode method...");
-        textRenderer.encodeBegin(getFacesContext(), text);
-        textRenderer.encodeEnd(getFacesContext(), text);
-    }
-
-
-    public void testGraphicImageRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing GraphicImageRenderer");
-        UIGraphic img = new UIGraphic();
-        img.setUrl("/nonModelReferenceImage.gif");
-        img.setId("myGraphicImage");
-        img.getAttributes().put("ismap", new Boolean(true));
-        img.getAttributes().put("usemap", "usemap");
-        root.getChildren().add(img);
-
-        ImageRenderer imageRenderer = new ImageRenderer();
-
-        // test decode method
-
-        System.out.println("    Testing decode method...");
-        imageRenderer.decode(getFacesContext(), img);
-
-        // test encode method
-
-        System.out.println("    Testing encode method...");
-        imageRenderer.encodeBegin(getFacesContext(), img);
-        imageRenderer.encodeEnd(getFacesContext(), img);
-
-        System.out.println("    Testing graphic support of modelReference...");
-        root.getChildren().remove(img);
-        img = new UIGraphic();
-        img.getAttributes().put("ismap", new Boolean(true));
-        img.getAttributes().put("usemap", "usemap");
-        root.getChildren().add(img);
-        com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean)
-            (ELUtils.createValueExpression("#{TestBean}")).getValue(getFacesContext().getELContext());
-        assertTrue(null != testBean); // set in FacesTestCaseService
-        testBean.setImagePath("/foo/modelReferenceImage.gif");
-        img.setValueExpression("value",
-                            ELUtils.createValueExpression("#{TestBean.imagePath}"));
-
-        imageRenderer.encodeBegin(getFacesContext(), img);
-        imageRenderer.encodeEnd(getFacesContext(), img);
-    }
-
-
-    public void testOutputMessageRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing OutputMessageRenderer");
-        UIOutput output = new UIOutput();
-        output.setId("myOutputMessage");
-        output.setValue("My name is {0} {1}");
-        UIParameter param1, param2 = null;
-        param1 = new UIParameter();
-        param1.setId("p1");
-        param2 = new UIParameter();
-        param2.setId("p2");
-        param1.setValue("Bobby");
-        param2.setValue("Orr");
-        output.getChildren().add(param1);
-        output.getChildren().add(param2);
-        root.getChildren().add(output);
-
-        OutputMessageRenderer outputMessageRenderer = new OutputMessageRenderer();
-        // test encode method
-
-        System.out.println("	Testing encode method...");
-
-        outputMessageRenderer.encodeBegin(getFacesContext(), output);
-        outputMessageRenderer.encodeEnd(getFacesContext(), output);
-    }
-
-
-    public void testMessageRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing MessageRenderer");
-        UIMessage message = new UIMessage();
-        message.setId("myMessage_0");
-        message.setFor("myMessage_0");
-        root.getChildren().add(message);
-
-        ResponseWriter originalWriter = getFacesContext().getResponseWriter();
-        UIViewRoot originalRoot = getFacesContext().getViewRoot();
-
-        getFacesContext().setViewRoot((UIViewRoot) root);
-
-        // setup a new HtmlResponseWriter using a StringWriter.
-        // This allows us to capture the output and check for
-        // correctness without using a goldenfile.
-        StringWriter writer = new StringWriter();
-        HtmlResponseWriter htmlWriter = new HtmlResponseWriter(writer,
-                                                               "text/html",
-                                                               "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        MessageRenderer messageRenderer = new MessageRenderer();
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_INFO,
-                                         "global message summary_0",
-                                         "global message detail_0"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        String result = writer.toString();
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_1");
-        message.setFor("myMessage_1");
-        message.getAttributes().put("warnClass", "warnClass");
-        message.getAttributes().put("errorClass", "errorClass");
-        message.getAttributes().put("infoClass", "infoClass");
-        message.getAttributes().put("fatalClass", "fatalClass");
-        message.setShowDetail(true);
-        message.setShowSummary(true);
-        root.getChildren().add(message);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //add a styleClass so span is rendered
-        message.getAttributes().put("styleClass", "styleClass");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_WARN,
-                                         "global message summary_1",
-                                         "global message detail_1"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-        //Span should have class attribute for styleClass
-        //Summary and detail should be in body of span separated by space
-        assertTrue(
-            result.indexOf(
-                "<span id=\"myMessage_1\" class=\"warnClass\">	global message summary_1 global message detail_1</span>") !=
-            -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_2");
-        message.setFor("myMessage_2");
-        message.getAttributes().put("warnClass", "warnClass");
-        message.getAttributes().put("errorClass", "errorClass");
-        message.getAttributes().put("infoClass", "infoClass");
-        message.getAttributes().put("fatalClass", "fatalClass");
-        message.setShowDetail(true);
-        message.setShowSummary(true);
-        root.getChildren().add(message);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //add a styleClass so span is rendered
-        message.getAttributes().put("style", "style");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_ERROR,
-                                         "global message summary_2",
-                                         "global message detail_2"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-        //Span should have style attribute
-        //Summary and detail should be in body of span separated by space
-        assertTrue(
-            result.indexOf(
-                "<span id=\"myMessage_2\" style=\"style\" class=\"errorClass\">	global message summary_2 global message detail_2</span>") !=
-            -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_3");
-        message.setFor("myMessage_3");
-        message.getAttributes().put("warnClass", "warnClass");
-        message.getAttributes().put("errorClass", "errorClass");
-        message.getAttributes().put("infoClass", "infoClass");
-        message.getAttributes().put("fatalClass", "fatalClass");
-        message.setShowDetail(true);
-        message.setShowSummary(true);
-        root.getChildren().add(message);
-
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //add a styleClass so span is rendered
-        message.getAttributes().put("styleClass", "styleClass");
-        message.getAttributes().put("style", "style");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_3",
-                                         "global message detail_3"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-
-        //Span should have class attribute for styleClass and style attribute
-        //Summary and detail should be in body of span separated by space
-        assertTrue(
-            result.indexOf(
-                "<span id=\"myMessage_3\" style=\"style\" class=\"fatalClass\">	global message summary_3 global message detail_3</span>") !=
-            -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_4");
-        message.setFor("myMessage_4");
-        root.getChildren().add(message);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //add a styleClass so span is rendered
-        message.getAttributes().put("styleClass", "styleClass");
-        message.getAttributes().put("style", "style");
-
-        //set tooltip criteria to true
-        message.getAttributes().put("tooltip", new Boolean(true));
-        message.setShowDetail(true);
-        message.setShowSummary(true);
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_4",
-                                         "global message detail_4"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-
-        //Span should containt class for styleClass, style, 
-        //  and title for tooltip attributes
-        //Summary should go in the title attribute and only the 
-        //  detail displayed in the body of the span
-        assertTrue(
-            result.indexOf(
-                "<span id=\"myMessage_4\" style=\"style\" class=\"styleClass\" title=\"global message summary_4\">	global message detail_4</span>") !=
-            -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_5");
-        message.setFor("myMessage_5");
-        root.getChildren().add(message);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //add a styleClass so span is rendered
-        message.getAttributes().put("styleClass", "styleClass");
-        message.getAttributes().put("style", "style");
-
-        //set tooltip criteria to true
-        message.getAttributes().put("tooltip", new Boolean(true));
-        message.setShowDetail(true);
-        message.setShowSummary(true);
-        message.getAttributes().put("warnClass", "warnClass");
-        message.getAttributes().put("errorClass", "errorClass");
-        message.getAttributes().put("infoClass", "infoClass");
-        message.getAttributes().put("fatalClass", "fatalClass");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_5",
-                                         "global message detail_5"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-        //Span should containt class for styleClass, style, 
-        //  and title for tooltip attributes
-        //Summary should go in the title attribute and only the 
-        //  detail displayed in the body of the span
-        //Should be wrapped in a table
-        assertTrue(
-            result.indexOf(
-                "<span id=\"myMessage_5\" style=\"style\" class=\"fatalClass\" title=\"global message summary_5\">	global message detail_5</span>") !=
-            -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        //
-        // test showSummary(false) works
-        //
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_6");
-        message.setFor("myMessage_6");
-        root.getChildren().add(message);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //set tooltip criteria to true
-        message.getAttributes().put("tooltip", new Boolean(true));
-        message.setShowDetail(true);
-        message.setShowSummary(false);
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_6",
-                                         "global message detail_6"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-
-        // should not contain summary.
-        assertTrue(-1 != result.indexOf("global message detail_6"));
-        assertEquals(-1, result.indexOf("global message summary_6"));
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        //
-        // test showDetail(false) works
-        //
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_6");
-        message.setFor("myMessage_6");
-        root.getChildren().add(message);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //set tooltip criteria to true
-        message.getAttributes().put("tooltip", new Boolean(true));
-        message.setShowDetail(false);
-        message.setShowSummary(true);
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_6",
-                                         "global message detail_6"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-
-        // should not contain detail.
-        assertEquals(-1, result.indexOf("global message detail_6"));
-        assertTrue(-1 != result.indexOf("global message summary_6"));
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        //
-        // test showDetail(false), showSummary(false) works
-        //
-
-        root.getChildren().remove(message);
-        message = new UIMessage();
-        message.setId("myMessage_6");
-        message.setFor("myMessage_6");
-        root.getChildren().add(message);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messageRenderer = new MessageRenderer();
-
-        //set tooltip criteria to true
-        message.getAttributes().put("tooltip", new Boolean(true));
-        message.setShowDetail(false);
-        message.setShowSummary(false);
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(message.getFor(),
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_6",
-                                         "global message detail_6"));
-
-        // test encode method
-
-        messageRenderer.encodeBegin(getFacesContext(), message);
-        messageRenderer.encodeEnd(getFacesContext(), message);
-
-        result = writer.toString();
-
-        // should not contain detail.
-        assertEquals(-1, result.indexOf("global message detail_6"));
-        assertEquals(-1, result.indexOf("global message summary_6"));
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        // restore the original ResponseWriter
-        getFacesContext().setResponseWriter(originalWriter);
-        getFacesContext().setViewRoot(originalRoot);
-    }
-
-
-    public void testMessagesRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing MessagesRenderer");
-        UIMessages messages = new UIMessages();
-        messages.setId("myMessage_0");
-        String myFor = "myMessage_0";
-        // messages.setFor("myMessage_0");
-        root.getChildren().add(messages);
-
-        ResponseWriter originalWriter = getFacesContext().getResponseWriter();
-        UIViewRoot originalRoot = getFacesContext().getViewRoot();
-
-        getFacesContext().setViewRoot((UIViewRoot) root);
-
-        // setup a new HtmlResponseWriter using a StringWriter.
-        // This allows us to capture the output and check for
-        // correctness without using a goldenfile.
-        StringWriter writer = new StringWriter();
-        HtmlResponseWriter htmlWriter = new HtmlResponseWriter(writer,
-                                                               "text/html",
-                                                               "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        MessagesRenderer messagesRenderer = new MessagesRenderer();
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_INFO,
-                                         "global message summary_0.0",
-                                         "global message detail_0.0"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_INFO,
-                                         "global message summary_0.1",
-                                         "global message detail_0.1"));
-
-        // test encode method
-
-        messagesRenderer.encodeBegin(getFacesContext(), messages);
-        messagesRenderer.encodeEnd(getFacesContext(), messages);
-
-        String result = writer.toString();
-
-        //no span should be rendered since none of the criteria was met
-        assertTrue(result.indexOf("span") == -1);
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(messages);
-        messages = new UIMessages();
-        messages.setId("myMessage_1");
-        myFor = "myMessage_1";
-        // messages.setFor("myMessage_1");
-        messages.setShowDetail(true);
-        messages.setShowSummary(true);
-        messages.getAttributes().put("warnClass", "warnClass");
-        messages.getAttributes().put("errorClass", "errorClass");
-        messages.getAttributes().put("infoClass", "infoClass");
-        messages.getAttributes().put("fatalClass", "fatalClass");
-        root.getChildren().add(messages);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messagesRenderer = new MessagesRenderer();
-
-        //add a styleClass so span is rendered
-        messages.getAttributes().put("styleClass", "styleClass");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_WARN,
-                                         "global message summary_1.0",
-                                         "global message detail_1.0"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_WARN,
-                                         "global message summary_1.1",
-                                         "global message detail_1.1"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_WARN,
-                                         "global message summary_1.1",
-                                         "global message detail_1.1"));
-
-        // test encode method
-
-        messagesRenderer.encodeBegin(getFacesContext(), messages);
-        messagesRenderer.encodeEnd(getFacesContext(), messages);
-
-        result = writer.toString();
-        //Verify Html list (<ul> with id/class
-        assertTrue(
-            result.indexOf("<ul id=\"myMessage_1\" class=\"styleClass\">")
-                != -1);
-        //Verify Html list items
-        assertTrue(
-            result.indexOf("<li class=\"infoClass\">") != -1);
-        assertTrue(
-            result.indexOf("<li class=\"warnClass\">") != -1);
-        assertTrue(
-            result.indexOf("<li class=\"fatalClass\">") != -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(messages);
-        messages = new UIMessages();
-        messages.setId("myMessage_2");
-        // messages.setFor("myMessage_2");
-        myFor = "myMessage_2";
-        messages.getAttributes().put("warnClass", "warnClass");
-        messages.getAttributes().put("errorClass", "errorClass");
-        messages.getAttributes().put("infoClass", "infoClass");
-        messages.getAttributes().put("fatalClass", "fatalClass");
-        messages.setShowDetail(true);
-        messages.setShowSummary(true);
-        root.getChildren().add(messages);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messagesRenderer = new MessagesRenderer();
-
-        //add a style
-        messages.getAttributes().put("style", "style");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_ERROR,
-                                         "global message summary_2.0",
-                                         "global message detail_2.0"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_ERROR,
-                                         "global message summary_2.1",
-                                         "global message detail_2.1"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_ERROR,
-                                         "global message summary_2.2",
-                                         "global message detail_2.2"));
-
-        // test encode method
-
-        messagesRenderer.encodeBegin(getFacesContext(), messages);
-        messagesRenderer.encodeEnd(getFacesContext(), messages);
-
-        result = writer.toString();
-
-        //Verify Html list (<ul> with id/style)
-        assertTrue(
-            result.indexOf("<ul id=\"myMessage_2\" style=\"style\">") != -1);
-
-        //Verify Html item (<li> with class)
-        assertTrue(
-            result.indexOf("<li class=\"errorClass\">") != -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(messages);
-        messages = new UIMessages();
-        messages.setId("myMessage_3");
-        // messages.setFor("myMessage_3");
-        myFor = "myMessage_3";
-        messages.getAttributes().put("warnClass", "warnClass");
-        messages.getAttributes().put("errorClass", "errorClass");
-        messages.getAttributes().put("infoClass", "infoClass");
-        messages.getAttributes().put("fatalClass", "fatalClass");
-        messages.setShowDetail(true);
-        messages.setShowSummary(true);
-        root.getChildren().add(messages);
-
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messagesRenderer = new MessagesRenderer();
-
-        //add a styleClass so span is rendered
-        messages.getAttributes().put("styleClass", "styleClass");
-        messages.getAttributes().put("style", "style");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_3.0",
-                                         "global message detail_3.0"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_3.1",
-                                         "global message detail_3.1"));
-
-        // test encode method
-
-        messagesRenderer.encodeBegin(getFacesContext(), messages);
-        messagesRenderer.encodeEnd(getFacesContext(), messages);
-
-        result = writer.toString();
-
-        //Verify Html list (<ul> with id/style/class)
-        assertTrue(
-            result.indexOf("<ul id=\"myMessage_3\" class=\"styleClass\" style=\"style\">") != -1);
-        //Verify Html item (<li> with class)
-        assertTrue(
-            result.indexOf("<li class=\"fatalClass\">") != -1);
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(messages);
-        messages = new UIMessages();
-        messages.setId("myMessage_4");
-        // messages.setFor("myMessage_4");
-        myFor = "myMessage_4";
-        messages.getAttributes().put("warnClass", "warnClass");
-        messages.getAttributes().put("errorClass", "errorClass");
-        messages.getAttributes().put("infoClass", "infoClass");
-        messages.getAttributes().put("fatalClass", "fatalClass");
-        root.getChildren().add(messages);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messagesRenderer = new MessagesRenderer();
-
-        //add a styleClass so span is rendered
-        messages.getAttributes().put("styleClass", "styleClass");
-        messages.getAttributes().put("style", "style");
-
-        //set tooltip criteria to true
-        messages.getAttributes().put("tooltip", new Boolean(true));
-        messages.setShowDetail(true);
-        messages.setShowSummary(true);
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_4.0",
-                                         "global message detail_4.0"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_4.1",
-                                         "global message detail_4.1"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_4.2",
-                                         "global message detail_4.2"));
-
-        // test encode method
-
-        messagesRenderer.encodeBegin(getFacesContext(), messages);
-        messagesRenderer.encodeEnd(getFacesContext(), messages);
-
-        result = writer.toString();
-
-        //Verify <ul> with id/style/class
-        //Verify <li> with class;span containing tool tip      
-        assertTrue(
-            result.indexOf("<ul id=\"myMessage_4\" class=\"styleClass\" style=\"style\"><li class=\"infoClass\"><span title=\"global message summary_0\">") != -1);
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(messages);
-        messages = new UIMessages();
-        messages.setId("myMessage_5");
-        // messages.setFor("myMessage_5");
-        myFor = "myMessage_5";
-        root.getChildren().add(messages);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messagesRenderer = new MessagesRenderer();
-
-        //add a styleClass
-        messages.getAttributes().put("styleClass", "styleClass");
-        messages.getAttributes().put("style", "style");
-
-        //set tooltip criteria to true
-        messages.getAttributes().put("tooltip", new Boolean(true));
-        messages.setShowDetail(true);
-        messages.setShowSummary(true);
-
-        //Set layout to table
-        messages.getAttributes().put("layout", "table");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_5.0",
-                                         "global message detail_5.0"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_5.1",
-                                         "global message detail_5.1"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_5.2",
-                                         "global message detail_5.2"));
-
-        // test encode method
-
-        messagesRenderer.encodeBegin(getFacesContext(), messages);
-        messagesRenderer.encodeEnd(getFacesContext(), messages);
-
-        result = writer.toString();
-
-        //Verify wrapped in <table>
-        assertTrue(
-            result.indexOf("<table id=\"myMessage_5\" class=\"styleClass\" style=\"style\">") != -1);
-        assertTrue(
-            result.indexOf("<tr><td><span title=\"global message summary_5.0\">") != -1);
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-        root.getChildren().remove(messages);
-        messages = new UIMessages();
-        messages.setId("myMessage_6");
-        // messages.setFor("myMessage_6");
-        myFor = "myMessage_6";
-        root.getChildren().add(messages);
-
-        writer = new StringWriter();
-        htmlWriter = new HtmlResponseWriter(writer, "text/html", "ISO-8859-1");
-        getFacesContext().setResponseWriter(htmlWriter);
-
-        messagesRenderer = new MessagesRenderer();
-
-        //add a styleClass 
-        messages.getAttributes().put("styleClass", "styleClass");
-        messages.getAttributes().put("style", "style");
-
-        //set tooltip criteria to false
-        messages.getAttributes().put("tooltip", new Boolean(false));
-        messages.setShowDetail(false);
-        messages.setShowSummary(true);
-
-        //Set layout to table
-        messages.getAttributes().put("layout", "table");
-
-        // populate facescontext with some errors
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_6.0",
-                                         "global message detail_6.0"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_6.1",
-                                         "global message detail_6.1"));
-        getFacesContext().addMessage(myFor,
-                                     new FacesMessage(
-                                         FacesMessage.SEVERITY_FATAL,
-                                         "global message summary_6.2",
-                                         "global message detail_6.2"));
-
-        // test encode method
-
-        messagesRenderer.encodeBegin(getFacesContext(), messages);
-        messagesRenderer.encodeEnd(getFacesContext(), messages);
-
-        result = writer.toString();
-
-        assertTrue(-1 == result.indexOf("detail"));
-        assertTrue(-1 != result.indexOf("summary"));
-
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            ; // ignore
-        }
-
-
-
-        // restore the original ResponseWriter
-        getFacesContext().setResponseWriter(originalWriter);
-        getFacesContext().setViewRoot(originalRoot);
-    }
-
-
-    public void testTextareaRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing TextareaRenderer");
-        UIInput textEntry = new UIInput();
-        textEntry.setValue(null);
-        textEntry.setId("myTextarea");
-        textEntry.getAttributes().put("style", "foo");
-        textEntry.getAttributes().put("styleClass", "bar");
-        root.getChildren().add(textEntry);
-
-        TextareaRenderer textAreaRenderer = new TextareaRenderer();
-
-        // test decode method
-
-        System.out.println("    Testing decode method...");
-        textAreaRenderer.decode(getFacesContext(), textEntry);
-        assertTrue("TextareaRenderer".equals(textEntry.getSubmittedValue()));
-
-        // test convert method
-        Object value = textAreaRenderer.getConvertedValue(getFacesContext(),
-                                                          textEntry,
-                                                          textEntry.getSubmittedValue());
-        assertTrue("TextareaRenderer".equals(value));
-
-        // test encode method
-
-        System.out.println("    Testing encode method...");
-        textAreaRenderer.encodeBegin(getFacesContext(), textEntry);
-        textAreaRenderer.encodeEnd(getFacesContext(), textEntry);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-    }
-
-} // end of class TestRenderers_2
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_3.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_3.java
deleted file mode 100644
index 0232902..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_3.java
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * (C) Copyright International Business Machines Corp., 2001,2002
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U. S. Copyright Office.
- */
-
-// TestRenderers_3.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.RIConstants;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UISelectOne;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.convert.Converter;
-import javax.faces.convert.NumberConverter;
-import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
-
-import java.io.IOException;
-import java.text.DateFormat;
-import java.text.NumberFormat;
-import java.util.Date;
-import java.util.TimeZone;
-import java.util.Locale;
-
-/**
- * Test encode and decode methods in Renderer classes.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestRenderers_3 extends JspFacesTestCase {
-    
-    //
-    // Instance Variables
-    //
-    private Application application;
-    
-    //
-    // Protected Constants
-    //
-    public static String DATE_STR = "Jan 12, 1952";
-    
-    public static String NUMBER_STR = "47%";
-    
-    
-    public boolean sendWriterToFile() {
-        return true;
-    }
-    
-    
-    public String getExpectedOutputFilename() {
-        return "CorrectRenderersResponse_3";
-    }
-    
-    //
-    // Class Variables
-    //
-    
-    //
-    // Instance Variables
-    //
-    private FacesContextFactory facesContextFactory = null;
-    
-    // Attribute Instance Variables
-    // Relationship Instance Variables
-    //
-    // Constructors and Initializers
-    //
-    
-    public TestRenderers_3() {
-        super("TestRenderers_3");
-    }
-    
-    
-    public TestRenderers_3(String name) {
-        super(name);
-    }
-    
-    //
-    // Class methods
-    //
-    
-    //
-    // Methods from TestCase
-    //
-    public void setUp() {
-        super.setUp();
-        ApplicationFactory aFactory =
-                (ApplicationFactory) FactoryFinder.getFactory(
-                FactoryFinder.APPLICATION_FACTORY);
-        application = aFactory.getApplication();
-        UIViewRoot xmlTree = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        xmlTree.setViewId("viewId");
-        xmlTree.setLocale(Locale.US);
-        xmlTree.getChildren().add(new UICommand());
-        getFacesContext().setViewRoot(xmlTree);
-        Object view =
-                Util.getStateManager(getFacesContext()).saveSerializedView(getFacesContext());
-        getFacesContext().getExternalContext().getRequestMap().put(RIConstants.SAVED_STATE, view);
-        assertTrue(null != getFacesContext().getResponseWriter());
-    }
-    
-    
-    public void beginRenderers(WebRequest theRequest) {
-        theRequest.addParameter("myMenu", "Blue");
-        theRequest.addParameter("myListbox", "Blue");
-        theRequest.addParameter("myCheckboxlist", "Blue");
-        theRequest.addParameter("myOnemenu", "Blue");
-        // parameters to test hidden renderer
-        theRequest.addParameter("myNumberHidden", NUMBER_STR);
-        theRequest.addParameter("myInputDateHidden", DATE_STR);
-        
-    }
-    
-    
-    public void testRenderers() {
-        
-        try {
-            // create a dummy root for the tree.
-            UIViewRoot root = getFacesContext().getViewRoot();
-            root.setId("root");
-            
-            testSelectManyMenuRenderer(root);
-            testSelectManyListboxRenderer(root);
-            testSelectManyCheckboxListRenderer(root);
-            testSelectOneMenuRenderer(root);
-            testHiddenRenderer(root);
-            assertTrue(verifyExpectedOutput());
-        } catch (Throwable t) {
-            t.printStackTrace();
-            assertTrue(false);
-            return;
-        }
-    }
-    
-    
-    public void testSelectManyListboxRenderer(UIComponent root)
-    throws IOException {
-        System.out.println("Testing SelectManyListboxRenderer");
-        UISelectMany selectMany = new UISelectMany();
-        UISelectItems uiSelectItems = new UISelectItems();
-        selectMany.setValue(null);
-        selectMany.setId("myListbox");
-        SelectItem item1 = new SelectItem("Red", "Red", null);
-        SelectItem item2 = new SelectItem("Blue", "Blue", null);
-        
-        SelectItem item3 = new SelectItem("Green", "Green", null);
-        SelectItem item4 = new SelectItem("Yellow", "Yellow", null);
-        SelectItem[] itemsArray = {item3, item4};
-        SelectItemGroup itemGroup = new SelectItemGroup("group", null, true,
-                itemsArray);
-        SelectItem[] selectItems = {item1, item2, itemGroup};
-        Object selectedValues[] = null;
-        uiSelectItems.setValue(selectItems);
-        uiSelectItems.setId("manyListitems");
-        selectMany.getChildren().add(uiSelectItems);
-        root.getChildren().add(selectMany);
-        
-        ListboxRenderer selectManyListboxRenderer =
-                new ListboxRenderer();
-        
-        // test decode method
-        System.out.println("    Testing decode method... ");
-        selectManyListboxRenderer.decode(getFacesContext(), selectMany);
-        selectedValues = (Object[]) selectMany.getSubmittedValue();
-        assertTrue(null != selectedValues);
-        assertTrue(1 == selectedValues.length);
-        assertTrue(((String) selectedValues[0]).equals("Blue"));
-        
-        // test convert method
-        Object[] convertedValues =
-                (Object[]) selectManyListboxRenderer.getConvertedValue(
-                getFacesContext(),
-                selectMany,
-                selectMany.getSubmittedValue());
-        assertTrue(null != convertedValues);
-        assertTrue(1 == convertedValues.length);
-        assertTrue(((String) convertedValues[0]).equals("Blue"));
-        
-        // test encode method
-        
-        System.out.println("    Testing encode method... ");
-        selectManyListboxRenderer.encodeBegin(getFacesContext(), selectMany);
-        selectManyListboxRenderer.encodeEnd(getFacesContext(), selectMany);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-        getFacesContext().getResponseWriter().flush();
-        
-    }
-    
-    
-    public void testSelectManyCheckboxListRenderer(UIComponent root)
-    throws IOException {
-        System.out.println("Testing SelectManyCheckboxListRenderer");
-        UISelectMany selectMany = new UISelectMany();
-        selectMany.getAttributes().put("enabledClass", "enabledClass");
-        selectMany.getAttributes().put("disabledClass", "disabledClass");
-        selectMany.getAttributes().put("styleClass", "styleClass");
-        selectMany.getAttributes().put("tabindex", new Integer(5));
-        selectMany.getAttributes().put("title", "title");
-        
-        UISelectItems uiSelectItems = new UISelectItems();
-        selectMany.setValue(null);
-        selectMany.setId("myCheckboxlist");
-        SelectItem item1 = new SelectItem("Red", "Red", null);
-        item1.setDisabled(true);
-        SelectItem item2 = new SelectItem("Blue", "Blue", null);
-        
-        SelectItem item3 = new SelectItem("Green", "Green", null);
-        SelectItem item4 = new SelectItem("Yellow", "Yellow", null);
-        SelectItem[] itemsArray = {item3, item4};
-        SelectItemGroup itemGroup = new SelectItemGroup("group", null, true,
-                itemsArray);
-        SelectItem[] selectItems = {item1, item2, itemGroup};
-        Object selectedValues[] = null;
-        uiSelectItems.setValue(selectItems);
-        selectMany.getChildren().add(uiSelectItems);
-        root.getChildren().add(selectMany);
-        
-        SelectManyCheckboxListRenderer selectManyCheckboxListRenderer =
-                new SelectManyCheckboxListRenderer();
-        
-        // test decode method
-        
-        System.out.println("    Testing decode method... ");
-        selectManyCheckboxListRenderer.decode(getFacesContext(), selectMany);
-        selectedValues = (Object[]) selectMany.getSubmittedValue();
-        assertTrue(null != selectedValues);
-        assertTrue(1 == selectedValues.length);
-        assertTrue(((String) selectedValues[0]).equals("Blue"));
-        
-        // test convert method
-        Object[] convertedValues =
-                (Object[]) selectManyCheckboxListRenderer.getConvertedValue(
-                getFacesContext(),
-                selectMany,
-                selectMany.getSubmittedValue());
-        assertTrue(null != convertedValues);
-        assertTrue(1 == convertedValues.length);
-        assertTrue(((String) convertedValues[0]).equals("Blue"));
-        
-        
-        // test encode method
-        System.out.println("    Testing encode method... ");
-        selectManyCheckboxListRenderer.encodeBegin(getFacesContext(),
-                selectMany);
-        selectManyCheckboxListRenderer.encodeEnd(getFacesContext(),
-                selectMany);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-        getFacesContext().getResponseWriter().flush();
-        
-    }
-    
-    
-    public void testSelectManyMenuRenderer(UIComponent root)
-    throws IOException {
-        System.out.println("Testing SelectManyMenuRenderer");
-        UISelectMany selectMany = new UISelectMany();
-        UISelectItems uiSelectItems = new UISelectItems();
-        selectMany.setValue(null);
-        selectMany.setId("myMenu");
-        SelectItem item1 = new SelectItem("Red", "Red", null);
-        SelectItem item2 = new SelectItem("Blue", "Blue", null);
-        SelectItem item3 = new SelectItem("Green", "Green", null);
-        SelectItem item4 = new SelectItem("Yellow", "Yellow", null);
-        SelectItem[] selectItems = {item1, item2, item3, item4};
-        Object selectedValues[] = null;
-        uiSelectItems.setValue(selectItems);
-        uiSelectItems.setId("manyMenuitems");
-        selectMany.getChildren().add(uiSelectItems);
-        root.getChildren().add(selectMany);
-        
-        MenuRenderer selectManyMenuRenderer =
-                new MenuRenderer();
-        
-        // test decode method
-        System.out.println("    Testing decode method... ");
-        selectManyMenuRenderer.decode(getFacesContext(), selectMany);
-        selectedValues = (Object[]) selectMany.getSubmittedValue();
-        assertTrue(null != selectedValues);
-        assertTrue(1 == selectedValues.length);
-        assertTrue(((String) selectedValues[0]).equals("Blue"));
-        
-        // test convert method
-        Object[] convertedValues =
-                (Object[]) selectManyMenuRenderer.getConvertedValue(
-                getFacesContext(),
-                selectMany,
-                selectMany.getSubmittedValue());
-        assertTrue(null != convertedValues);
-        assertTrue(1 == convertedValues.length);
-        assertTrue(((String) convertedValues[0]).equals("Blue"));
-        
-        // test encode method
-        System.out.println("    Testing encode method... ");
-        selectManyMenuRenderer.encodeBegin(getFacesContext(), selectMany);
-        selectManyMenuRenderer.encodeEnd(getFacesContext(), selectMany);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-        getFacesContext().getResponseWriter().flush();
-        
-    }
-    
-    
-    public void testSelectOneMenuRenderer(UIComponent root)
-    throws IOException {
-        System.out.println("Testing SelectOneMenuRenderer");
-        UISelectOne selectOne = new UISelectOne();
-        UISelectItems uiSelectItems = new UISelectItems();
-        selectOne.setValue(null);
-        selectOne.setId("myOnemenu");
-        SelectItem item1 = new SelectItem("Red", "Red", null);
-        SelectItem item2 = new SelectItem("Blue", "Blue", null);
-        SelectItem item3 = new SelectItem("Green", "Green", null);
-        SelectItem item4 = new SelectItem("Yellow", "Yellow", null);
-        SelectItem[] selectItems = {item1, item2, item3, item4};
-        String selectedValue = null;
-        uiSelectItems.setValue(selectItems);
-        uiSelectItems.setId("manySelectOneitems");
-        selectOne.getChildren().add(uiSelectItems);
-        root.getChildren().add(selectOne);
-        
-        MenuRenderer selectOneMenuRenderer =
-                new MenuRenderer();
-        
-        // test decode method
-        System.out.println("    Testing decode method... ");
-        selectOneMenuRenderer.decode(getFacesContext(), selectOne);
-        assertTrue("Blue".equals(selectOne.getSubmittedValue()));
-        
-        // test convert method
-        Object value = selectOneMenuRenderer.getConvertedValue(
-                getFacesContext(),
-                selectOne,
-                selectOne.getSubmittedValue());
-        assertTrue("Blue".equals(value));
-        
-        // test encode method
-        System.out.println("    Testing encode method... ");
-        selectOneMenuRenderer.encodeBegin(getFacesContext(), selectOne);
-        selectOneMenuRenderer.encodeEnd(getFacesContext(), selectOne);
-        getFacesContext().getResponseWriter().writeText("\n", null);
-        getFacesContext().getResponseWriter().flush();
-        
-    }
-    
-    
-    public void testHiddenRenderer(UIComponent root) throws IOException {
-        System.out.println("Testing Input_DateRenderer");
-        UIInput input1 = new UIInput();
-        input1.setValue(null);
-        input1.setId("myInputDateHidden");
-        Converter converter = application.createConverter(
-                "javax.faces.DateTime");
-        input1.setConverter(converter);
-        input1.getAttributes().put("dateStyle", "medium");
-        root.getChildren().add(input1);
-        HiddenRenderer hiddenRenderer = new HiddenRenderer();
-        
-        DateFormat dateformatter =
-                DateFormat.getDateInstance(DateFormat.MEDIUM,
-                getFacesContext().getViewRoot()
-                .getLocale());
-        dateformatter.setTimeZone(TimeZone.getTimeZone("GMT"));
-        // test hidden renderer with converter set to date
-        // test decode method
-        System.out.println("    Testing decode method...");
-        hiddenRenderer.decode(getFacesContext(), input1);
-        Date date = (Date) hiddenRenderer.getConvertedValue(getFacesContext(),
-                input1,
-                input1.getSubmittedValue());
-        assertTrue(null != date);
-        assertTrue(DATE_STR.equals(dateformatter.format(date)));
-        
-        // test encode method
-        System.out.println("    Testing encode method...");
-        hiddenRenderer.encodeBegin(getFacesContext(), input1);
-        hiddenRenderer.encodeEnd(getFacesContext(), input1);
-        getFacesContext().getResponseWriter().flush();
-        
-        // test hidden renderer with converter set to number
-        UIInput input2 = new UIInput();
-        input2.setValue(null);
-        input2.setId("myNumberHidden");
-        converter = application.createConverter("javax.faces.Number");
-        ((NumberConverter) converter).setType("percent");
-        input2.setConverter(converter);
-        root.getChildren().add(input2);
-        
-        NumberFormat numberformatter =
-                NumberFormat.getPercentInstance(getFacesContext().
-                getViewRoot().getLocale());
-        // test decode method
-        System.out.println("    Testing decode method...");
-        hiddenRenderer.decode(getFacesContext(), input2);
-        Number number = (Number) hiddenRenderer.getConvertedValue(
-                getFacesContext(),
-                input2,
-                input2.getSubmittedValue());
-        
-        assertTrue(null != number);
-        System.out.println("NUMBER_STR:" + NUMBER_STR);
-        System.out.println("NUMBERFORMATTER:" + numberformatter.format(number));
-        assertTrue(NUMBER_STR.equals(numberformatter.format(number)));
-        
-        // test encode method
-        System.out.println("    Testing encode method...");
-        hiddenRenderer.encodeBegin(getFacesContext(), input2);
-        hiddenRenderer.encodeEnd(getFacesContext(), input2);
-        getFacesContext().getResponseWriter().flush();
-        
-    }
-} // end of class TestRenderers_3
diff --git a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_4.java b/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_4.java
deleted file mode 100644
index 7c305db..0000000
--- a/jsf-ri/test/com/sun/faces/renderkit/html_basic/TestRenderers_4.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * (C) Copyright International Business Machines Corp., 2001,2002
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U. S. Copyright Office.   
- */
-
-// TestRenderers_4.java
-
-package com.sun.faces.renderkit.html_basic;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.RIConstants;
-import com.sun.faces.util.Util;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContextFactory;
-
-import java.io.IOException;
-import java.util.Locale;
-
-/**
- * Test encode and decode methods in Renderer classes.
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- */
-
-public class TestRenderers_4 extends JspFacesTestCase {
-
-    //
-    // Protected Constants
-    //
-
-    public boolean sendWriterToFile() {
-        return true;
-    }
-
-
-    public String getExpectedOutputFilename() {
-        return "CorrectRenderersResponse_4";
-    }
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
-    private FacesContextFactory facesContextFactory = null;
-
-    // Attribute Instance Variables
-    // Relationship Instance Variables
-    //
-    // Constructors and Initializers    
-    //
-
-    public TestRenderers_4() {
-        super("TestRenderers_4");
-    }
-
-
-    public TestRenderers_4(String name) {
-        super(name);
-    }
-
-    //
-    // Class methods
-    //
-
-    //
-    // Methods from TestCase
-    //
-    public void setUp() {
-        super.setUp();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setViewId("viewId");
-        page.setLocale(Locale.US);
-        getFacesContext().setViewRoot(page);
-        Object view = 
-	    Util.getStateManager(getFacesContext()).saveSerializedView(getFacesContext());
-	getFacesContext().getExternalContext().getRequestMap().put(RIConstants.SAVED_STATE, view);
-        assertTrue(null != getFacesContext().getResponseWriter());
-    }
-
-
-    public void beginRenderers(WebRequest theRequest) {
-
-    }
-
-
-    public void testRenderers() {
-
-        try {
-            // create a dummy root for the tree.
-            UIViewRoot root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-            root.setLocale(Locale.US);
-            root.setId("root");
-
-            testGridRenderer(root);
-
-            root = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-            root.setId("root");
-            root.setLocale(Locale.US);
-            testGridRendererWithNonRenderedChildren(root);
-
-            getFacesContext().getResponseWriter().close();
-            assertTrue(verifyExpectedOutput());
-        } catch (Throwable t) {
-            t.printStackTrace();
-            assertTrue(false);
-            return;
-        }
-    }
-
-
-    public void testGridRenderer(UIComponent root)
-        throws IOException {
-        System.out.println("Testing GridRenderer");
-        GridRenderer gridRenderer = null;
-        UIPanel
-            panel = null,
-            headerGroup = null,
-            footerGroup = null;
-        UIOutput
-            header1 = null,
-            header2 = null,
-            footer1 = null,
-            footer2 = null,
-            body1 = null,
-            body2 = null;
-
-        panel = new UIPanel();
-        root.getChildren().add(panel);
-
-        headerGroup = new UIPanel();
-        headerGroup.setId("header");
-        headerGroup.setRendererType("javax.faces.Group");
-        header1 = new UIOutput();
-        header1.setValue("header1 ");
-        headerGroup.getChildren().add(header1);
-        header2 = new UIOutput();
-        header2.setValue("header2 ");
-        headerGroup.getChildren().add(header2);
-        panel.getFacets().put("header", headerGroup);
-
-        footerGroup = new UIPanel();
-        footerGroup.setId("footer");
-        footerGroup.setRendererType("javax.faces.Group");
-        footer1 = new UIOutput();
-        footer1.setValue("footer1 ");
-        footerGroup.getChildren().add(footer1);
-        footer2 = new UIOutput();
-        footer2.setValue("footer2 ");
-        footerGroup.getChildren().add(footer2);
-        panel.getFacets().put("footer", footerGroup);
-
-        body1 = new UIOutput();
-        body1.setValue("body1");
-        panel.getChildren().add(body1);
-
-        body2 = new UIOutput();
-        body2.setValue("body2");
-        panel.getChildren().add(body2);
-
-        gridRenderer = new GridRenderer();
-
-        System.out.println("    Testing encodeBegin method... ");
-        gridRenderer.encodeBegin(getFacesContext(), panel);
-        gridRenderer.encodeChildren(getFacesContext(), panel);
-        gridRenderer.encodeEnd(getFacesContext(), panel);
-
-    }
-
-
-    public void testGridRendererWithNonRenderedChildren(UIComponent root)
-        throws IOException {
-        System.out.println("Testing GridRenderer");
-        GridRenderer gridRenderer = null;
-        UIPanel
-            panel = null,
-            headerGroup = null,
-            footerGroup = null;
-        UIOutput
-            header1 = null,
-            header2 = null,
-            footer1 = null,
-            footer2 = null,
-            body1 = null,
-            body2 = null;
-
-        panel = new UIPanel();
-        root.getChildren().add(panel);
-
-        // the header should not be rendered
-        headerGroup = new UIPanel();
-        headerGroup.setRendered(false);
-        headerGroup.setId("header");
-        headerGroup.setRendererType("javax.faces.Group");
-        header1 = new UIOutput();
-        header1.setValue("header1 ");
-        headerGroup.getChildren().add(header1);
-        header2 = new UIOutput();
-        header2.setValue("header2 ");
-        headerGroup.getChildren().add(header2);
-        panel.getFacets().put("header", headerGroup);
-
-        footerGroup = new UIPanel();
-        footerGroup.setId("footer");
-        footerGroup.setRendererType("javax.faces.Group");
-        footer1 = new UIOutput();
-        footer1.setValue("footer1 ");
-        footerGroup.getChildren().add(footer1);
-        footer2 = new UIOutput();
-        footer2.setValue("footer2 ");
-        footerGroup.getChildren().add(footer2);
-        panel.getFacets().put("footer", footerGroup);
-
-        // this child should not be rendered
-        body1 = new UIOutput();
-        body1.setRendered(false);
-        body1.setValue("body1");
-        panel.getChildren().add(body1);
-
-        body2 = new UIOutput();
-        body2.setValue("body2");
-        panel.getChildren().add(body2);
-
-        gridRenderer = new GridRenderer();
-
-        System.out.println("    Testing encodeBegin method... ");
-        gridRenderer.encodeBegin(getFacesContext(), panel);
-        gridRenderer.encodeChildren(getFacesContext(), panel);
-        gridRenderer.encodeEnd(getFacesContext(), panel);
-
-    }
-
-
-} // end of class TestRenderers_4
diff --git a/jsf-ri/test/com/sun/faces/scripting/groovy/MojarraGroovyClassLoaderTest.java b/jsf-ri/test/com/sun/faces/scripting/groovy/MojarraGroovyClassLoaderTest.java
deleted file mode 100644
index 1de2344..0000000
--- a/jsf-ri/test/com/sun/faces/scripting/groovy/MojarraGroovyClassLoaderTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.scripting.groovy;
-
-import com.sun.faces.scripting.groovy.GroovyHelperImpl;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import junit.framework.TestCase;
-
-import com.sun.faces.mock.MockExternalContext;
-import com.sun.faces.mock.MockFacesContext;
-import com.sun.faces.mock.MockHttpServletRequest;
-import com.sun.faces.mock.MockHttpServletResponse;
-import com.sun.faces.mock.MockServletContext;
-
-public class MojarraGroovyClassLoaderTest extends TestCase {
-
-    private ClassLoader originalClassLoader;
-    private MockFacesContext facesContext;
-
-    @Override
-    protected void setUp() throws Exception {
-        this.originalClassLoader = Thread.currentThread()
-              .getContextClassLoader();
-        this.facesContext = new MockFacesContext() {
-
-            @Override
-            public void release() {
-                super.release();
-                setCurrentInstance(null);
-            }
-        };
-
-        this.facesContext.setExternalContext(new MockExternalContext(
-                                                     new MockServletContext(),
-                                                     new MockHttpServletRequest(),
-                                                     new MockHttpServletResponse()) {
-                  @Override
-                  public URL getResource(String path) throws
-                        MalformedURLException { //avoid UnsupportedOperationException
-                      if ("/WEB-INF/groovy/".equals(path)) {
-                          return new File(".").toURI().toURL();
-                      }
-                      return null;
-                  }
-              });
-        new GroovyHelperImpl().setClassLoader();
-    }
-
-    public void testLoadingUnexistingClassResultsInClassNotFoundException()
-          throws Exception {
-        try {
-            Thread.currentThread().getContextClassLoader()
-                  .loadClass("com.sun.faces.UnexistingClass");
-            fail("Expected ClassNotFoundException");
-        } catch (ClassNotFoundException e) {
-            //expected
-        }
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        this.facesContext.release();
-        Thread.currentThread().setContextClassLoader(this.originalClassLoader);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/taglib/TestCoreValidator.java b/jsf-ri/test/com/sun/faces/taglib/TestCoreValidator.java
deleted file mode 100644
index e6bf784..0000000
--- a/jsf-ri/test/com/sun/faces/taglib/TestCoreValidator.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib;
-
-import com.sun.faces.taglib.jsf_core.CoreValidator;
-import org.xml.sax.helpers.DefaultHandler;
-
-
-public class TestCoreValidator extends CoreValidator {
-
-    public  DefaultHandler getSAXHandler() {
-        return super.getSAXHandler();
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/taglib/TestHtmlBasicValidator.java b/jsf-ri/test/com/sun/faces/taglib/TestHtmlBasicValidator.java
deleted file mode 100644
index 269ee76..0000000
--- a/jsf-ri/test/com/sun/faces/taglib/TestHtmlBasicValidator.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib;
-
-import com.sun.faces.taglib.html_basic.HtmlBasicValidator;
-import org.xml.sax.helpers.DefaultHandler;
-
-
-public class TestHtmlBasicValidator extends HtmlBasicValidator {
-
-    public  DefaultHandler getSAXHandler() {
-        return super.getSAXHandler();
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/taglib/TlvTestCase.java b/jsf-ri/test/com/sun/faces/taglib/TlvTestCase.java
deleted file mode 100644
index b59ae3e..0000000
--- a/jsf-ri/test/com/sun/faces/taglib/TlvTestCase.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib;
-
-
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class TlvTestCase extends TestCase {
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    public TlvTestCase(String name) {
-        super(name);
-    }
-
-
-    // ---------------------------------------------------- Overall Test Methods
-
-
-    // Set up instance variables required by this test case.
-    public void setUp() { }
-
-
-
-    // Return the tests included in this test case.
-    public static Test suite() {
-
-        return (new TestSuite(TlvTestCase.class));
-
-    }
-
-
-    // Tear down instance variables required by this test case.
-    public void tearDown() {
-
-    }
-
-
-    // ------------------------------------------------- Individual Test Methods
-
-
-    public void testDesignTime() {
-
-        java.beans.Beans.setDesignTime(true);
-        TestHtmlBasicValidator hbv = new TestHtmlBasicValidator();
-        org.xml.sax.helpers.DefaultHandler handler  =  hbv.getSAXHandler();
-        assertTrue(null == handler);
-
-        java.beans.Beans.setDesignTime(false);
-        handler =  hbv.getSAXHandler();
-        assertTrue(null != handler);
-
-        java.beans.Beans.setDesignTime(true);
-        TestCoreValidator cv = new TestCoreValidator();
-        handler  =  cv.getSAXHandler();
-        assertTrue(null == handler);
-
-        java.beans.Beans.setDesignTime(false);
-        handler  =  cv.getSAXHandler();
-        assertTrue(null != handler);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestCoreTagsVBEnabled.java b/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestCoreTagsVBEnabled.java
deleted file mode 100644
index af8906d..0000000
--- a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestCoreTagsVBEnabled.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.taglib.jsf_core;
-
-import java.util.Iterator;
-import java.util.Locale;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.lifecycle.ApplyRequestValuesPhase;
-import com.sun.faces.lifecycle.Phase;
-import com.sun.faces.lifecycle.ProcessValidationsPhase;
-import com.sun.faces.lifecycle.RenderResponsePhase;
-import com.sun.faces.util.Util;
-
-import org.apache.cactus.WebRequest;
-
-/**
- * <B>TestValidatorTags</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestCoreTagsVBEnabled extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/TestCoreTagVBEnabled.jsp";
-    public static final String LONGRANGE_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "longRange";
-    public static final String LONGRANGE_VALUE = "115";
-    public static final String INTRANGE_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "intRange";
-    public static final String INTRANGE_VALUE = "NorthAmerica";
-    public static final String DOUBLERANGE_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "doubleRange";
-    public static final String DOUBLERANGE_VALUE = "1500";
-
-
-    public boolean sendResponseToFile() {
-        return false;
-    }
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestCoreTagsVBEnabled() {
-        super("TestValidatorTags");
-    }
-
-
-    public TestCoreTagsVBEnabled(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-
-    public void beginValidators(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-        theRequest.addParameter(LONGRANGE_ID, LONGRANGE_VALUE);
-        theRequest.addParameter(INTRANGE_ID, INTRANGE_VALUE);
-        theRequest.addParameter(DOUBLERANGE_ID, DOUBLERANGE_VALUE);
-        theRequest.addParameter("validatorForm", "validatorForm");
-
-    }
-
-
-    public void setUp() {
-
-        super.setUp();
-        (getFacesContext().getExternalContext().getRequestMap()).put("intMin",
-                                                                     new Integer(
-                                                                         1));
-        (getFacesContext().getExternalContext().getRequestMap()).put("intMax",
-                                                                     new Integer(
-                                                                         10));
-        (getFacesContext().getExternalContext().getRequestMap()).put("longMin",
-                                                                     new Long(
-                                                                         100));
-        (getFacesContext().getExternalContext().getRequestMap()).put("longMax",
-                                                                     new Long(
-                                                                         110));
-        (getFacesContext().getExternalContext().getRequestMap()).put(
-            "doubleMin", new Double(1.0));
-        (getFacesContext().getExternalContext().getRequestMap()).put(
-            "doubleMax", new Double(10.0));
-    }
-
-
-    public void testValidators() {
-        System.out.println("Test VBEnabled attributes on core Validator tags");
-        // Verify the parmeters are as expected
-        String paramVal = (String) (getFacesContext().getExternalContext()
-            .getRequestParameterMap()).get(LONGRANGE_ID);
-        assertTrue(LONGRANGE_VALUE.equals(paramVal));
-
-        String paramVal1 = (String) (getFacesContext().getExternalContext()
-            .getRequestParameterMap()).get(DOUBLERANGE_ID);
-        assertTrue(DOUBLERANGE_VALUE.equals(paramVal1));
-
-        String paramVal2 = (String) (getFacesContext().getExternalContext()
-            .getRequestParameterMap()).get(INTRANGE_ID);
-        assertTrue(INTRANGE_VALUE.equals(paramVal2));
-
-        boolean result = false;
-        String value = null;
-        Phase
-            renderResponse = new RenderResponsePhase(),
-            processValidations = new ProcessValidationsPhase(),
-            applyRequestValues = new ApplyRequestValuesPhase();
-
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setLocale(Locale.US);
-        page.setViewId(TEST_URI);
-        getFacesContext().setViewRoot(page);
-
-        // This builds the tree, and usefaces saves it in the session
-        renderResponse.execute(getFacesContext());
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        // This causes the components to be set to valid
-        applyRequestValues.execute(getFacesContext());
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        // process the validations
-        processValidations.execute(getFacesContext());
-        // We know there are validation errors on the page
-        assertTrue(getFacesContext().getRenderResponse());
-
-        System.out.println("Verifying results...");
-        // verify the messages have been added correctly.
-        UIComponent comp = null;
-        Iterator messages = null;
-
-        assertTrue(null != (messages = getFacesContext().getMessages()));
-        assertTrue(messages.hasNext());
-
-        // check the messages for each component in the page
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(LONGRANGE_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(INTRANGE_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(
-                        DOUBLERANGE_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-    }
-
-
-} // end of class TestValidatorTags
diff --git a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestLoadBundleTag.java b/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestLoadBundleTag.java
deleted file mode 100644
index e1183d6..0000000
--- a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestLoadBundleTag.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestLoadBundleTag.java
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.util.Util;
-
-import javax.faces.component.UIViewRoot;
-import javax.faces.application.Application;
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-
-import java.util.Map;
-import java.util.Locale;
-
-public class TestLoadBundleTag extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestLoadBundleTag() {
-        super("TestLoadBundleTag.java");
-    }
-
-
-    public TestLoadBundleTag(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void testLoadBundle() throws Exception {
-        getFacesContext().setViewRoot(Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null));
-        getFacesContext().getViewRoot().setLocale(Locale.US);
-        LoadBundleTag tag = new LoadBundleTag();
-        ExpressionFactory factory =
-            getFacesContext().getApplication().getExpressionFactory();
-        ValueExpression expr =
-            factory.createValueExpression(getFacesContext().getELContext(),
-                "com.sun.faces.TestMessages",String.class);
-                                         
-        tag.setBasename(expr);
-        tag.setVar("messages");
-        tag.doStartTag();
-        assertEquals("Didn't get expected value",
-                     ((Map) getFacesContext().getExternalContext()
-                            .getRequestMap()
-                            .get("messages")).get("buckaroo"),
-                     "banzai");
-        assertEquals("Didn't get expected value",
-                     ((Map) getFacesContext().getExternalContext()
-                            .getRequestMap()
-                            .get("messages")).get("john"),
-                     "bigboote");
-        assertEquals("???notpresent???",
-                     ((Map) getFacesContext().getExternalContext()
-                            .getRequestMap()
-                            .get("messages")).get("notpresent"));
-
-    }
-
-
-    //test out full Map contract implementation of LoadBundleTag
-    public void testLoadBundleMap() throws Exception {
-        boolean gotException = false;
-        Object key = "buckaroo";
-        Object value = "banzai";
-        ExpressionFactory factory =
-            getFacesContext().getApplication().getExpressionFactory();
-        ValueExpression expr =
-            factory.createValueExpression(getFacesContext().getELContext(),
-                "com.sun.faces.TestMessages",String.class);
-                                          
-        getFacesContext().setViewRoot(Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null));
-        getFacesContext().getViewRoot().setLocale(Locale.US);
-        LoadBundleTag tag = new LoadBundleTag();
-        tag.setBasename(expr);
-        tag.setVar("messages");
-        tag.doStartTag();
-        Map testMap = (Map) getFacesContext().getExternalContext()
-            .getRequestMap()
-            .get("messages");
-
-        LoadBundleTag tag2 = new LoadBundleTag();
-        tag2.setBasename(expr);
-        tag2.setVar("messages2");
-        tag2.doStartTag();
-        Map testMap2 = (Map) getFacesContext().getExternalContext()
-            .getRequestMap()
-            .get("messages2");
-
-        try {
-            testMap.clear();
-        } catch (UnsupportedOperationException ex) {
-            gotException = true;
-        }
-        assertTrue("Map.clear() should not be supported for immutable Map",
-                   gotException);
-        gotException = false;
-
-        assertTrue("key not in Map", testMap.containsKey(key));
-        assertTrue("value not in Map", testMap.containsValue(value));
-        assertTrue("entrySet not correct for Map",
-                   testMap.entrySet().equals(testMap2.entrySet()));
-        assertTrue("Same maps are not equal", testMap.equals(testMap2));
-        assertEquals("value not in Map", testMap.get(key), value);
-        //two equal sets should have same hashcode
-        assertTrue("HashCode not valid",
-                   testMap.hashCode() == testMap2.hashCode());
-        assertFalse("Map should not be empty", testMap.isEmpty());
-        assertTrue("keySet not valid", testMap.keySet().contains(key));
-        try {
-            testMap.put(key, value);
-        } catch (UnsupportedOperationException ex) {
-            gotException = true;
-        }
-        assertTrue("Map.put() should not be supported for immutable Map",
-                   gotException);
-        gotException = false;
-
-        try {
-            testMap.putAll(new java.util.HashMap());
-        } catch (UnsupportedOperationException ex) {
-            gotException = true;
-        }
-        assertTrue("Map.putAll() should not be supported for immutable Map",
-                   gotException);
-        gotException = false;
-
-        try {
-            testMap.remove(key);
-        } catch (UnsupportedOperationException ex) {
-            gotException = true;
-        }
-        assertTrue("Map.remove() should not be supported for immutable Map",
-                   gotException);
-        gotException = false;
-
-        assertTrue("Map size incorrect", testMap.size() == 4);
-        assertTrue("values from Map incorrect",
-                   testMap.values().contains(value));
-
-    }
-
-} // end of class TestLoadBundleTag
diff --git a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestValidatorTags.java b/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestValidatorTags.java
deleted file mode 100644
index 6c92b32..0000000
--- a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestValidatorTags.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestValidatorTags.java
-
-package com.sun.faces.taglib.jsf_core;
-
-import java.util.Iterator;
-import java.util.Locale;
-
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.lifecycle.ApplyRequestValuesPhase;
-import com.sun.faces.lifecycle.Phase;
-import com.sun.faces.lifecycle.ProcessValidationsPhase;
-import com.sun.faces.lifecycle.RenderResponsePhase;
-import com.sun.faces.util.Util;
-
-import org.apache.cactus.WebRequest;
-
-/**
- * <B>TestValidatorTags</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestValidatorTags extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/TestValidatorTags.jsp";
-    public static final String OUTOFBOUNDS1_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "outOfBounds1";
-    public static final String OUTOFBOUNDS1_VALUE = "3.1415";
-    public static final String INBOUNDS1_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "inBounds1";
-    public static final String INBOUNDS1_VALUE = "10.25";
-    public static final String OUTOFBOUNDS2_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "outOfBounds2";
-    public static final String OUTOFBOUNDS2_VALUE = "fox";
-    public static final String INBOUNDS2_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "inBounds2";
-    public static final String INBOUNDS2_VALUE = "alligator22";
-    public static final String OUTOFBOUNDS3_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "outOfBounds3";
-    public static final String OUTOFBOUNDS3_VALUE = "30000";
-    public static final String INBOUNDS3_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "inBounds3";
-    public static final String INBOUNDS3_VALUE = "1100";
-    public static final String REQUIRED1_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "required1";
-    public static final String REQUIRED1_VALUE = "required";
-    public static final String REQUIRED2_ID = "validatorForm" +
-        NamingContainer.SEPARATOR_CHAR +
-        "required2";
-    public static final String REQUIRED2_VALUE = "required";
-
-
-    public boolean sendResponseToFile() {
-        return false;
-    }
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestValidatorTags() {
-        super("TestValidatorTags");
-    }
-
-
-    public TestValidatorTags(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-
-    public void beginValidators(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-        theRequest.addParameter(OUTOFBOUNDS1_ID, OUTOFBOUNDS1_VALUE);
-        theRequest.addParameter(INBOUNDS1_ID, INBOUNDS1_VALUE);
-        theRequest.addParameter(OUTOFBOUNDS2_ID, OUTOFBOUNDS2_VALUE);
-        theRequest.addParameter(INBOUNDS2_ID, INBOUNDS2_VALUE);
-        theRequest.addParameter(OUTOFBOUNDS3_ID, OUTOFBOUNDS3_VALUE);
-        theRequest.addParameter(INBOUNDS3_ID, INBOUNDS3_VALUE);
-        theRequest.addParameter(REQUIRED1_ID, "");
-        theRequest.addParameter(REQUIRED2_ID, "");
-        theRequest.addParameter("validatorForm", "validatorForm");
-
-    }
-
-
-    public void setUp() {
-        super.setUp();
-    }
-
-
-    public void testValidators() {
-        // Verify the parmeters are as expected
-        String paramVal = (String) (getFacesContext().getExternalContext()
-            .getRequestParameterMap()).get(OUTOFBOUNDS1_ID);
-        assertTrue(OUTOFBOUNDS1_VALUE.equals(paramVal));
-//    assertTrue(OUTOFBOUNDS1_VALUE.equals(getFacesContext().getServletRequest().getParameter(OUTOFBOUNDS1_ID)));
-
-        boolean result = false;
-        String value = null;
-        Phase
-            renderResponse = new RenderResponsePhase(),
-            processValidations = new ProcessValidationsPhase(),
-            applyRequestValues = new ApplyRequestValuesPhase();
-
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), TEST_URI);
-        page.setLocale(Locale.US);       
-        getFacesContext().setViewRoot(page);
-
-        // This builds the tree, and usefaces saves it in the session
-        renderResponse.execute(getFacesContext());
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        // This causes the components to be set to valid
-        applyRequestValues.execute(getFacesContext());
-        assertTrue(!(getFacesContext().getRenderResponse()) &&
-                   !(getFacesContext().getResponseComplete()));
-
-        // process the validations
-        processValidations.execute(getFacesContext());
-        // We know there are validation errors on the page
-        assertTrue(getFacesContext().getRenderResponse());
-
-        // verify the messages have been added correctly.
-        UIComponent comp = null;
-        Iterator messages = null;
-
-        assertTrue(null != (messages = getFacesContext().getMessages()));
-        assertTrue(messages.hasNext());
-
-        // check the messages for each component in the page
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(
-                        OUTOFBOUNDS1_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(INBOUNDS1_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(!messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(
-                        OUTOFBOUNDS2_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(INBOUNDS2_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(!messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(
-                        OUTOFBOUNDS3_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(INBOUNDS3_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(!messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(REQUIRED1_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-        assertTrue(null !=
-                   (comp =
-                    getFacesContext().getViewRoot().findComponent(REQUIRED2_ID)));
-        assertTrue(
-            null !=
-            (messages =
-             getFacesContext().getMessages(comp.getClientId(getFacesContext()))));
-        assertTrue(messages.hasNext());
-
-    }
-
-
-} // end of class TestValidatorTags
diff --git a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestViewTag.java b/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestViewTag.java
deleted file mode 100644
index 12eb7f8..0000000
--- a/jsf-ri/test/com/sun/faces/taglib/jsf_core/TestViewTag.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestViewTag.java
-
-package com.sun.faces.taglib.jsf_core;
-
-import com.sun.faces.cactus.JspFacesTestCase;
-import com.sun.faces.lifecycle.Phase;
-import com.sun.faces.lifecycle.RenderResponsePhase;
-import com.sun.faces.util.Util;
-import com.sun.faces.cactus.TestingUtil;
-
-import org.apache.cactus.JspTestCase;
-import org.apache.cactus.WebRequest;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIViewRoot;
-import javax.servlet.ServletRequest;
-import javax.servlet.jsp.jstl.core.Config;
-
-import java.util.Locale;
-
-/**
- * <B>TestViewTag</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestViewTag extends JspFacesTestCase {
-
-//
-// Protected Constants
-//
-
-    public static final String TEST_URI = "/TestViewTag.jsp";
-    public static final String TEST_URI2 = "/TestViewTag2.jsp";
-
-//
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestViewTag() {
-        super("TestViewTag");
-    }
-
-
-    public TestViewTag(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-    public void beginViewTag(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI, null);
-    }
-
-
-    public void testViewTag() {
-        boolean result = false;
-        String value = null;
-        Locale expectedLocale = new Locale("ps", "PS");
-        Phase renderResponse = new RenderResponsePhase();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setId("root");
-        page.setLocale(Locale.US);
-        page.setViewId(TEST_URI);
-        page.setLocale(Locale.CANADA_FRENCH);
-        getFacesContext().setViewRoot(page);
-
-        Config.set((ServletRequest)
-            getFacesContext().getExternalContext().getRequest(),
-                   Config.FMT_LOCALE, Locale.CANADA_FRENCH);
-
-        try {
-            renderResponse.execute(getFacesContext());
-        } catch (FacesException fe) {
-            System.out.println(fe.getMessage());
-            if (null != fe.getCause()) {
-                fe.getCause().printStackTrace();
-            } else {
-                fe.printStackTrace();
-            }
-        }
-        assertEquals("locale not as expected", expectedLocale,
-                     page.getLocale());
-        assertEquals("locale not as expected", expectedLocale,
-                     Config.get((ServletRequest)
-            getFacesContext().getExternalContext().
-            getRequest(),
-                                Config.FMT_LOCALE));
-    }
-
-
-    public void beginViewTagVB(WebRequest theRequest) {
-        theRequest.setURL("localhost:8080", "/test", "/faces", TEST_URI2, null);
-    }
-
-
-    public void testViewTagVB() {
-        boolean result = false;
-        String value = null;
-        Locale expectedLocale = new Locale("ps", "PS", "Traditional");
-        request.setAttribute("locale", expectedLocale);
-        Phase renderResponse = new RenderResponsePhase();
-        UIViewRoot page = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        page.setId("root");
-        page.setLocale(Locale.US);
-        page.setViewId(TEST_URI2);
-        getFacesContext().setViewRoot(page);
-
-        try {
-            renderResponse.execute(getFacesContext());
-        } catch (FacesException fe) {
-            System.out.println(fe.getMessage());
-            if (null != fe.getCause()) {
-                fe.getCause().printStackTrace();
-            } else {
-                fe.printStackTrace();
-            }
-        }
-        assertEquals("locale not as expected", expectedLocale,
-                     page.getLocale());
-    }
-
-
-    public void testGetLocaleFromString() {
-        ViewTag viewTag = new ViewTag();
-        Locale locale = (Locale) 
-            TestingUtil.invokePrivateMethod("getLocaleFromString",
-                                            new Class[] { String.class },
-                                            new Object[] { "fr-FR" },
-                                            ViewTag.class,
-                                            viewTag);        
-        assertTrue(locale.equals(new Locale("fr", "FR")));
-
-        
-        locale = (Locale)
-            TestingUtil.invokePrivateMethod("getLocaleFromString",
-                                            new Class[] { String.class },
-                                            new Object[] { "fr_FR" },
-                                            ViewTag.class,
-                                            viewTag);
-        assertTrue(locale.equals(new Locale("fr", "FR")));
-
-        
-        locale = (Locale)
-            TestingUtil.invokePrivateMethod("getLocaleFromString",
-                                            new Class[] {String.class},
-                                            new Object[] {"fr"},
-                                            ViewTag.class,
-                                            viewTag);
-        assertTrue(locale.equals(new Locale("fr", "")));
-
-       
-        locale = (Locale)
-            TestingUtil.invokePrivateMethod("getLocaleFromString",
-                                            new Class[] {String.class},
-                                            new Object[] {"testLocale"},
-                                            ViewTag.class,
-                                            viewTag);
-        assertTrue(locale.equals(Locale.getDefault()));
-    }
-
-} // end of class TestViewTag
diff --git a/jsf-ri/test/com/sun/faces/util/MultiThreadTestRunner.java b/jsf-ri/test/com/sun/faces/util/MultiThreadTestRunner.java
deleted file mode 100644
index 9a7e2e6..0000000
--- a/jsf-ri/test/com/sun/faces/util/MultiThreadTestRunner.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// MultiThreadTestRunner.java
-
-package com.sun.faces.util;
-
-import java.util.Random;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.BitSet;
-
-import java.io.PrintStream;
-
-/**
- * <B>MultiThreadTestRunner.java</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class MultiThreadTestRunner extends Object {
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-    private Thread [] threads;
-    private Object [] outcomes;
-
-//
-// Constructors and Initializers    
-//
-
-    public MultiThreadTestRunner(Thread [] yourThreads,
-				 Object [] yourOutcomes) {
-	threads = yourThreads;
-	outcomes = yourOutcomes;
-
-	if (null == threads || null == outcomes) {
-	    throw new IllegalArgumentException();
-	}
-    }
-
-    /**
-     * @return true iff one of the threads has failed.
-     */
-
-    public boolean runThreadsAndOutputResults(PrintStream out) throws Exception {
-	int i;
-
-	if (outcomes.length != threads.length) {
-	    throw new IllegalArgumentException();
-	}
-	
-	for (i = 0; i < threads.length; i++) {
-	    outcomes[i] = null;
-	}
-	for (i = 0; i < threads.length; i++) {
-	    threads[i].start();
-	}
-	
-	BitSet printed = new BitSet(threads.length);
-	boolean foundFailedThread = false;
-	// wait for all threads to complete
-	while (true) {
-	    boolean foundIncompleteThread = false;
-	    for (i = 0; i < threads.length; i++) {
-		if (null == outcomes[i]) {
-		    foundIncompleteThread = true;
-		    break;
-		}
-		else {
-		    // print out the outcome for this thread
-		    if (!printed.get(i)) {
-			printed.set(i);
-			out.print(threads[i].getName() + " outcome: ");
-			if (outcomes[i] instanceof Exception) {
-			    foundFailedThread = true;
-			    out.println("Exception: " + 
-					       outcomes[i] + " " + 
-					       ((Exception)outcomes[i]).getMessage());
-			}
-			else {
-			    out.println(outcomes[i].toString());
-			}
-			out.flush();
-		    }
-		}
-	    }
-	    if (!foundIncompleteThread) {
-		break;
-	    }
-	    Thread.sleep(1000);
-	}
-	
-	return foundFailedThread;
-    }
-
-} // end of class MultiThreadTestRunner
diff --git a/jsf-ri/test/com/sun/faces/util/TestHtmlUtils.java b/jsf-ri/test/com/sun/faces/util/TestHtmlUtils.java
deleted file mode 100644
index 1de3398..0000000
--- a/jsf-ri/test/com/sun/faces/util/TestHtmlUtils.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestHtmlUtils.java
-package com.sun.faces.util;
-
-import java.io.IOException;
-import java.io.StringWriter;
-
-
-import junit.framework.TestCase;
-
-/**
- * <B>TestHtmlUtils</B> is a class ...
- */
-public class TestHtmlUtils extends TestCase {
-
-    public void testWriteURL() throws IOException {
-        //Test url with no params
-        testURLEncoding("http://www.google.com",
-                        "http://www.google.com",
-                        "http://www.google.com");
-        //Test URL with one param
-        testURLEncoding("http://www.google.com?joe=10",
-                        "http://www.google.com?joe=10",
-                        "http://www.google.com?joe=10");
-        //Test URL with two params
-        testURLEncoding("http://www.google.com?joe=10&fred=20",
-                        "http://www.google.com?joe=10&fred=20",
-                        "http://www.google.com?joe=10&fred=20");
-        //Test URL with & entity encoded
-        testURLEncoding("/index.jsf?joe=10&fred=20",
-                        "/index.jsf?joe=10&fred=20",
-                        "/index.jsf?joe=10&fred=20");
-        //Test URL with two params and second & close to end of string
-        testURLEncoding("/index.jsf?joe=10&f=20",
-                        "/index.jsf?joe=10&f=20",
-                        "/index.jsf?joe=10&f=20");
-        //Test URL with misplaced & expected behavior but not necissarily right.
-        testURLEncoding("/index.jsf?joe=10&f=20&",
-                        "/index.jsf?joe=10&f=20&",
-                        "/index.jsf?joe=10&f=20&");
-        //Test URL with encoded entity at end of URL expected behavior but not necissarily right.
-        testURLEncoding("/index.jsf?joe=10&f=20&",
-                        "/index.jsf?joe=10&f=20&",
-                        "/index.jsf?joe=10&f=20&");
-    }
-
-
-    public void testControlCharacters() throws IOException {
-
-        final char[] controlCharacters = new char[32];
-        for (int i = 0; i < 32; i++) {
-            controlCharacters[i] = (char) i;
-        }
-
-        String[] stringValues = new String[32];
-        for (int i = 0; i < 32; i++) {
-            stringValues[i] = "b" + controlCharacters[i] + "b";
-        }
-
-        final String[] largeStringValues = new String[32];
-        for (int i = 0; i < 32; i++) {
-            largeStringValues[i] = (stringValues[i] + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
-        }
-
-        for (int i = 0; i < 32; i++) {
-            char[] textBuffer = new char[1024];
-            char[] buffer = new char[1024];
-            StringWriter writer = new StringWriter();
-            HtmlUtils.writeAttribute(writer, false, false, buffer, stringValues[i], textBuffer, false);
-            if (i == 9 || i == 10 || i == 12 || i == 13) {
-                assertTrue(writer.toString().length() == 3);
-            } else {
-                assertTrue(writer.toString().length() == 2);
-            }
-        }
-
-        for (int i = 0; i < 32; i++) {
-            char[] textBuffer = new char[1024];
-            char[] buffer = new char[1024];
-            StringWriter writer = new StringWriter();
-            HtmlUtils.writeAttribute(writer, false, false, buffer, largeStringValues[i], textBuffer, false);
-            if (i == 9 || i == 10 || i == 12 || i == 13) {
-                assertTrue(writer.toString().length() == 34);
-            } else {
-                assertTrue(writer.toString().length() == 33);
-            }
-        }
-
-
-        for (int i = 0; i < 32; i++) {
-            char[] textBuffer = new char[1024];
-            char[] buffer = new char[1024];
-            StringWriter writer = new StringWriter();
-            HtmlUtils.writeText(writer, false, false, buffer, stringValues[i], textBuffer);
-            if (i == 9 || i == 10 || i == 12 || i == 13) {
-                assertTrue(writer.toString().length() == 3);
-            } else {
-                assertTrue(writer.toString().length() == 2);
-            }
-        }
-
-        for (int i = 0; i < 32; i++) {
-            char[] textBuffer = new char[1024];
-            char[] buffer = new char[1024];
-            StringWriter writer = new StringWriter();
-            HtmlUtils.writeText(writer, false, false, buffer, largeStringValues[i], textBuffer);
-            if (i == 9 || i == 10 || i == 12 || i == 13) {
-                assertTrue(writer.toString().length() == 34);
-            } else {
-                assertTrue(writer.toString().length() == 33);
-            }
-        }
-
-    }
-
-    private void testURLEncoding(String urlToEncode, String expectedHTML, String expectedXML)
-    throws IOException {
-        char[] textBuffer = new char[1024];
-        StringWriter xmlWriter = new StringWriter();
-        HtmlUtils.writeURL(xmlWriter, urlToEncode, textBuffer, "UTF-8");
-        System.out.println("XML: " + xmlWriter.toString());
-        assertEquals(xmlWriter.toString(), expectedXML);
-        StringWriter htmlWriter = new StringWriter();
-        HtmlUtils.writeURL(htmlWriter, urlToEncode, textBuffer, "UTF-8");
-        System.out.println("HTML: " + htmlWriter.toString());
-        assertEquals(htmlWriter.toString(), expectedHTML);
-    }
-
-}
diff --git a/jsf-ri/test/com/sun/faces/util/TestLRUMap_local.java b/jsf-ri/test/com/sun/faces/util/TestLRUMap_local.java
deleted file mode 100644
index 6deaee7..0000000
--- a/jsf-ri/test/com/sun/faces/util/TestLRUMap_local.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Collections;
-
-import junit.framework.TestCase;
-
-/**
- * Validate LRU functionality of LRUMap
- */
-public class TestLRUMap_local extends TestCase {
-
-    // ------------------------------------------------------------ Constructors
-
-    public TestLRUMap_local() {
-        super("TestLRUMap_local");
-    }
-
-    public TestLRUMap_local(String name) {
-        super(name);
-    }
-
-    // ------------------------------------------------------------ Test Methods
-
-    /**
-     * Ensure that LRUMap works as advertised.
-     */
-    public void testLRUMap() {
-
-        LRUMap<String,String> map = new LRUMap<String,String>(5);
-        map.put("one", "one");
-        map.put("two", "two");
-        map.put("three", "three");
-
-        // order should be "three", "two", "one"
-        String[] control = {
-              "three", "two", "one"
-        };
-
-        int count = 3;
-        display(control.clone(), map);
-        for (String s : map.keySet()) {          
-            assertEquals(control[--count], s);
-        }
-
-        map.put("four", "four");
-        map.put("five", "five");
-        map.put("three", "three");
-        map.put("six", "six");
-        control = new String[] {
-              "six", "three", "five", "four", "two"
-        };
-        count = 5;
-        display(control.clone(), map);
-        for (String s: map.keySet()) {            
-            assertEquals(control[--count], s);
-        }
-    }
-    
-    // --------------------------------------------------------- Private Methods
-    
-    private static void display(String[] expected, LRUMap<String,String> actual) {
-        System.out.println("Expected order:");
-        List<String> revControl = Arrays.asList(expected);
-        Collections.reverse(revControl);
-        for (String s: revControl) {
-            System.out.print(s + ' ');
-        }
-        System.out.println('\n');
-        System.out.println("Actual order:");
-        for (String s: actual.keySet()) {
-            System.out.print(s + ' ');
-        }
-        System.out.println();
-    }
-}
diff --git a/jsf-ri/test/com/sun/faces/util/TestMessageFactoryImpl.java b/jsf-ri/test/com/sun/faces/util/TestMessageFactoryImpl.java
deleted file mode 100644
index 21c5bed..0000000
--- a/jsf-ri/test/com/sun/faces/util/TestMessageFactoryImpl.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestMessageFactoryImpl.java
-
-package com.sun.faces.util;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-import javax.faces.FacesException;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-
-import java.util.Locale;
-
-/**
- * <B>TestMessageFactoryImpl</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestMessageFactoryImpl extends ServletFacesTestCase {
-
-    //
-    // Protected Constants
-    //
-
-    //
-    // Class Variables
-    //
-
-    //
-    // Instance Variables
-    //
- 
-    // Attribute Instance Variables
-
-    // Relationship Instance Variables
-
-    //
-    // Constructors and Initializers    
-    //
-
-    public TestMessageFactoryImpl() {
-        super("TestMessageFactoryImpl");
-    }
-
-
-    public TestMessageFactoryImpl(String name) {
-        super(name);
-    }
-    //
-    // Class methods
-    //
-
-    //
-    // Methods from TestCase
-    //
-    public void setUp() {
-        super.setUp();
-        UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        viewRoot.setViewId("viewId");
-        viewRoot.setLocale(Locale.US);
-        getFacesContext().setViewRoot(viewRoot);
-    }
-    
-    //
-    // General Methods
-    //
-    
-    public void testGetMethods() {
-        boolean gotException = false;
-        FacesMessage msg = null;
-
-        FacesContext facesContext = getFacesContext();
-        assert (facesContext != null);
-
-        System.out.println("Testing get methods");
-        try {
-            msg = MessageFactory.getMessage((FacesContext) null, (String) null);
-        } catch (NullPointerException fe) {
-            gotException = true;
-        }
-        assertTrue(gotException);
-        gotException = false;
-        msg = null;
-        
-        // if msgId doesn't exist in the resource, null must be returned
-        try {
-            msg = MessageFactory.getMessage(facesContext, "MSG01", "param1");
-            assertTrue(null == msg);
-        } catch (FacesException fe) {
-            assertTrue(false);
-        }
-
-
-        Object[] params1 = {"JavaServerFaces"};
-        msg = MessageFactory.getMessage(facesContext, "MSG0001", params1);
-        assertTrue(msg != null);
-        assertTrue(
-            (msg.getSummary()).equals(
-                "'JavaServerFaces' is not a valid number."));
-
-        msg = MessageFactory.getMessage(facesContext, "MSG0003", "userId");
-        assertTrue(msg != null);
-        assertTrue(
-            (msg.getSummary()).equals("'userId' field cannot be empty."));
-
-        msg =
-            MessageFactory.getMessage(facesContext, "MSG0004", "userId",
-                                      "1000", "10000");
-        assertTrue(msg != null);
-        assertTrue(
-            (msg.getSummary()).equals(
-                "'userId' out of range. Value should be between '1000' and '10000'."));
-    }
-
-
-    public void testFindCatalog() {
-
-        boolean gotException = false;
-        FacesMessage msg = null;
-
-        // if no locale is set, it should use the fall back,
-        // JSFMessages.xml
-        msg = MessageFactory.getMessage(getFacesContext(), "MSG0003", "userId");
-        assertTrue(msg != null);
-        assertTrue(
-            (msg.getSummary()).equals("'userId' field cannot be empty."));
-
-        // passing an invalid locale should use fall back.
-        Locale en_locale = new Locale("eng", "us");
-        getFacesContext().getViewRoot().setLocale(en_locale);
-        System.out.println("Testing get methods");
-        try {
-            msg =
-                MessageFactory.getMessage(getFacesContext(), "MSG0003",
-                                          "userId");
-        } catch (Exception fe) {
-            gotException = true;
-        }
-        assertTrue(!gotException);
-        gotException = false;
-        msg = null;
-
-        en_locale = new Locale("en", "us");
-        getFacesContext().getViewRoot().setLocale(en_locale);
-        msg = MessageFactory.getMessage(getFacesContext(), "MSG0003", "userId");
-        assertTrue(msg != null);
-        assertTrue(
-            (msg.getSummary()).equals("'userId' field cannot be empty."));
-        msg = null;
-
-    }
-
-} // end of class TestMessageListImpl
diff --git a/jsf-ri/test/com/sun/faces/util/TestUtil.java b/jsf-ri/test/com/sun/faces/util/TestUtil.java
deleted file mode 100644
index 1d395b4..0000000
--- a/jsf-ri/test/com/sun/faces/util/TestUtil.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestUtil.java
-
-package com.sun.faces.util;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-import com.sun.faces.renderkit.Attribute;
-import com.sun.faces.renderkit.AttributeManager;
-import com.sun.faces.renderkit.RenderKitUtils;
-
-import javax.faces.FactoryFinder;
-import javax.faces.component.UIInput;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UISelectOne;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.html.HtmlInputText;
-import javax.faces.context.ResponseWriter;
-import javax.faces.context.FacesContext;
-import javax.faces.model.SelectItem;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.el.ValueExpression;
-import javax.el.ExpressionFactory;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.TreeSet;
-import java.util.List;
-import java.util.Arrays;
-
-/**
- * Currently tests RenderKitUtils.
- */
-
-public class TestUtil extends ServletFacesTestCase {
-
-
-    // -------------------------------------------------------------- Test Setup
-
-
-    public TestUtil() {
-        super("TestUtil");
-    }
-
-
-    public TestUtil(String name) {
-        super(name);
-    }
-
-
-    // ------------------------------------------------------------ Test Methods
-
-    
-    public void testRenderPassthruAttributes() {
-        try {
-            RenderKitFactory renderKitFactory = (RenderKitFactory)
-                FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-            RenderKit renderKit =
-                renderKitFactory.getRenderKit(getFacesContext(),
-                                              RenderKitFactory.HTML_BASIC_RENDER_KIT);
-            StringWriter sw = new StringWriter();
-            ResponseWriter writer = renderKit.createResponseWriter(sw,
-                                                                   "text/html",
-                                                                   "ISO-8859-1");
-            getFacesContext().setResponseWriter(writer);
-            Attribute[] attrs = AttributeManager.getAttributes(AttributeManager.Key.INPUTTEXT);
-            UIInput input = new UIInput();
-            input.setId("testRenderPassthruAttributes");
-            input.getAttributes().put("notPresent", "notPresent");
-            input.getAttributes().put("onblur", "javascript:f.blur()");
-            writer.startElement("input", input);
-            RenderKitUtils.renderPassThruAttributes(getFacesContext(),
-                  writer,
-                                                    input,
-                                                    attrs);
-            writer.endElement("input");
-            String expectedResult = " onblur=\"javascript:f.blur()\"";
-            assertTrue(sw.toString().contains(expectedResult));
-
-            // verify no passthru attributes returns empty string
-            sw = new StringWriter();
-            writer =
-                renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            getFacesContext().setResponseWriter(writer);
-            input.getAttributes().remove("onblur");
-            writer.startElement("input", input);
-            RenderKitUtils.renderPassThruAttributes(getFacesContext(),writer, input, attrs);
-            writer.endElement("input");
-            assertTrue(sw.toString().equals("<input />"));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-
-    public void testRenderPassthruAttributesFromConcreteHtmlComponent() {
-        try {
-            RenderKitFactory renderKitFactory = (RenderKitFactory)
-                FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-            RenderKit renderKit =
-                renderKitFactory.getRenderKit(getFacesContext(),
-                                              RenderKitFactory.HTML_BASIC_RENDER_KIT);
-            StringWriter sw = new StringWriter();
-            ResponseWriter writer = renderKit.createResponseWriter(sw,
-                                                                   "text/html",
-                                                                   "ISO-8859-1");
-            getFacesContext().setResponseWriter(writer);
-            Attribute[] attrs = AttributeManager.getAttributes(AttributeManager.Key.INPUTTEXT);
-            HtmlInputText input = new HtmlInputText();
-            input.setId("testRenderPassthruAttributes");
-            input.setSize(12);
-            writer.startElement("input", input);
-            RenderKitUtils.renderPassThruAttributes(getFacesContext(),writer, input, attrs);
-            writer.endElement("input");
-            String expectedResult = " size=\"12\"";
-            assertTrue(sw.toString().contains(expectedResult));
-
-            // test that setting the values to the default value causes
-            // the attributes to not be rendered.
-            sw = new StringWriter();
-            writer = renderKit.createResponseWriter(sw, "text/html",
-                                                    "ISO-8859-1");
-            input.setSize(Integer.MIN_VALUE);
-            writer.startElement("input", input);
-            RenderKitUtils.renderPassThruAttributes(getFacesContext(),writer, input, attrs);
-            writer.endElement("input");
-            expectedResult = "<input />";
-            assertEquals(expectedResult, sw.toString());
-
-            sw = new StringWriter();
-            writer = renderKit.createResponseWriter(sw, "text/html",
-                                                    "ISO-8859-1");
-            input.setReadonly(false);
-            writer.startElement("input", input);
-            RenderKitUtils.renderPassThruAttributes(getFacesContext(),
-                  writer,
-                                                    input,
-                                                    attrs);
-            writer.endElement("input");
-            assertEquals(expectedResult, sw.toString());
-
-
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-
-    public void testRenderBooleanPassthruAttributes() {
-        try {
-            RenderKitFactory renderKitFactory = (RenderKitFactory)
-                FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-            RenderKit renderKit =
-                renderKitFactory.getRenderKit(getFacesContext(),
-                                              RenderKitFactory.HTML_BASIC_RENDER_KIT);
-            StringWriter sw = new StringWriter();
-            ResponseWriter writer = renderKit.createResponseWriter(sw,
-                                                                   "text/html",
-                                                                   "ISO-8859-1");
-            getFacesContext().setResponseWriter(writer);
-
-            UIInput input = new UIInput();
-            input.setId("testBooleanRenderPassthruAttributes");
-            input.getAttributes().put("disabled", "true");
-            input.getAttributes().put("readonly", "false");
-            writer.startElement("input", input);
-            RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, input);
-            writer.endElement("input");
-            String expectedResult = " disabled=\"disabled\"";
-            assertTrue(sw.toString().contains(expectedResult));
-
-            // verify no passthru attributes returns empty string
-            sw = new StringWriter();
-            writer =
-                renderKit.createResponseWriter(sw, "text/html", "ISO-8859-1");
-            getFacesContext().setResponseWriter(writer);
-            input.getAttributes().remove("disabled");
-            input.getAttributes().remove("readonly");
-            writer.startElement("input", input);
-            RenderKitUtils.renderXHTMLStyleBooleanAttributes(writer, input);
-            writer.endElement("input");
-            assertTrue("<input />".equals(sw.toString()));
-        } catch (IOException e) {
-            assertTrue(false);
-        }
-    }
-
-    public void testGetSelectItems() {
-        SelectItem item1 = new SelectItem("value", "label");
-        SelectItem item2 = new SelectItem("value2", "label2");
-        SelectItem[] itemsArray = {
-              item1, item2
-        };
-        Collection<SelectItem> itemsCollection = new ArrayList<SelectItem>(2);
-        itemsCollection.add(item1);
-        itemsCollection.add(item2);
-        Map<String,String> selectItemMap = new LinkedHashMap<String,String>(2);
-        selectItemMap.put("label", "value");
-        selectItemMap.put("label2", "value2");
-
-        // test arrays
-        UISelectItems items = new UISelectItems();
-        items.setValue(itemsArray);
-        UISelectOne selectOne = new UISelectOne();
-        selectOne.getChildren().add(items);
-        Iterator iterator = RenderKitUtils.getSelectItems(getFacesContext(),
-                                                          selectOne);
-        assertTrue(item1.equals(iterator.next()));
-        assertTrue(item2.equals(iterator.next()));
-
-        items.setValue(itemsCollection);
-        iterator = RenderKitUtils.getSelectItems(getFacesContext(),
-                                                 selectOne);
-        assertTrue(item1.equals(iterator.next()));
-        assertTrue(item2.equals(iterator.next()));
-
-        items.setValue(selectItemMap);
-        iterator = RenderKitUtils.getSelectItems(getFacesContext(),
-                                                 selectOne);
-        SelectItem i = (SelectItem) iterator.next();
-        assertTrue(item1.getLabel().equals(i.getLabel()) 
-                    && item1.getValue().equals(i.getValue()));
-        i = (SelectItem) iterator.next();
-        assertTrue(item2.getLabel().equals(i.getLabel()) 
-                    && item2.getValue().equals(i.getValue()));
-    }
-
-
-    public void testGetSelectItemsFromCollection() {
-
-        UISelectMany many = new UISelectMany();
-        UISelectItems items = new UISelectItems();
-        FacesContext ctx = getFacesContext();
-        items.getAttributes().put("var", "item");
-        items.setValueExpression("itemValue",
-                                 createValueExpression(ctx,
-                                                       "#{item.id}",
-                                                       Integer.TYPE));
-        items.setValueExpression("itemLabel",
-                                 createValueExpression(ctx,
-                                                       "#{item.label}",
-                                                       String.class));
-        items.setValueExpression("itemDescription",
-                                 createValueExpression(ctx,
-                                                       "#{item.description}",
-                                                       String.class));
-        items.setValueExpression("itemLabelEscaped",
-                                 createValueExpression(ctx,
-                                                       "#{item.escaped}",
-                                                       Boolean.TYPE));
-        items.setValueExpression("itemDisabled",
-                                 createValueExpression(ctx,
-                                                       "#{item.disabled}",
-                                                       Boolean.TYPE));
-        many.getChildren().add(items);
-        Collection<ModelObject> c = new TreeSet<ModelObject>();
-        ModelObject[] models = {
-            new ModelObject(1, "item1", "Item One", false, false),
-            new ModelObject(2, "item2", "Item Two", true, false),
-            new ModelObject(3, "item3", "Item Three", false, true)
-        };
-
-        c.addAll(Arrays.asList(models));
-
-        items.setValue(c);
-
-
-        Iterator<SelectItem> selectItems = RenderKitUtils.getSelectItems(ctx, many);
-        int idx = 0;
-        while (selectItems.hasNext()) {
-            compare(models[idx], selectItems.next());
-            idx++;
-        }
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-    private void compare(ModelObject model, SelectItem item) {
-
-        assertEquals(model.getId(), item.getValue());
-        assertEquals(model.getLabel(), item.getLabel());
-        assertEquals(model.getDescription(), item.getDescription());
-        assertEquals(model.isEscaped(), item.isEscape());
-        assertEquals(model.isDisabled(), item.isDisabled());
-
-    }
-
-
-    private ValueExpression createValueExpression(FacesContext ctx,
-                                                  String expression,
-                                                  Class<?> expectedType) {
-
-        ExpressionFactory factory = ctx.getApplication().getExpressionFactory();
-        return (factory.createValueExpression(ctx.getELContext(),
-                                              expression,
-                                              expectedType));
-    }
-
-
-    // ---------------------------------------------------------- Nested Classes
-
-
-    public static class ModelObject implements Comparable {
-
-        private int id;
-        private String label;
-        private String description;
-        private boolean disabled;
-        private boolean escaped;
-
-        public ModelObject(int id,
-                           String label,
-                           String description,
-                           boolean disabled,
-                           boolean escaped) {
-
-            this.id = id;
-            this.label = label;
-            this.description = description;
-            this.disabled = disabled;
-            this.escaped = escaped;
-
-        }
-
-        public int getId() {
-            return id;
-        }
-
-        public String getLabel() {
-            return label;
-        }
-
-        public String getDescription() {
-            return description;
-        }
-
-        public boolean isDisabled() {
-            return disabled;
-        }
-
-        public boolean isEscaped() {
-            return escaped;
-        }
-
-
-        // --------------------------------------------- Methods from Comparable
-
-
-        public int compareTo(Object o) {
-            ModelObject provided = (ModelObject) o;
-            if (this.id < provided.id) {
-                return -1;
-            }
-            if (this.id == provided.id) {
-                return 0;
-            }
-            return 1;
-        }
-    }
-   
-
-
-} // end of class TestUtil
diff --git a/jsf-ri/test/com/sun/faces/util/TestUtil_local.java b/jsf-ri/test/com/sun/faces/util/TestUtil_local.java
deleted file mode 100644
index 3c9ceb7..0000000
--- a/jsf-ri/test/com/sun/faces/util/TestUtil_local.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestUtil_local.java
-
-package com.sun.faces.util;
-
-import junit.framework.TestCase;
-
-import java.util.Locale;
-
-/**
- * <B>TestUtil_local.java</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestUtil_local extends TestCase {
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestUtil_local() {
-        super("TestUtil_local.java");
-    }
-
-
-    public TestUtil_local(String name) {
-        super(name);
-    }
-
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-
-    public void testGetLocaleFromString() {
-        Locale result = null;
-
-        // positive tests
-        assertNotNull(result = Util.getLocaleFromString("ps"));
-        assertNotNull(result = Util.getLocaleFromString("tg_AF"));
-        assertNotNull(result = Util.getLocaleFromString("tk_IQ-Traditional"));
-        assertNotNull(result = Util.getLocaleFromString("tk-IQ_Traditional"));
-
-    }
-
-} // end of class TestUtil_local
diff --git a/jsf-ri/test/com/sun/faces/util/TestUtil_messages.java b/jsf-ri/test/com/sun/faces/util/TestUtil_messages.java
deleted file mode 100644
index c47970b..0000000
--- a/jsf-ri/test/com/sun/faces/util/TestUtil_messages.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-// TestUtil_messages.java
-
-package com.sun.faces.util;
-
-import javax.faces.component.UIViewRoot;
-
-import java.util.Locale;
-
-import com.sun.faces.cactus.ServletFacesTestCase;
-
-
-/**
- * <B>TestUtil_messages.java</B> is a class ...
- * <p/>
- * <B>Lifetime And Scope</B> <P>
- *
- */
-
-public class TestUtil_messages extends ServletFacesTestCase {
-
-//
-// Protected Constants
-//
-
-// Class Variables
-//
-
-//
-// Instance Variables
-//
-
-
-// README - Add message info to this array as {message key, "number of params"}
-// If message has no parameters entry should be {message key, "0"}
-
-    public String[][] messageInfo = {
-        {MessageUtils.CONVERSION_ERROR_MESSAGE_ID, "2"},
-        {MessageUtils.MODEL_UPDATE_ERROR_MESSAGE_ID, "2"},
-        {MessageUtils.FACES_CONTEXT_CONSTRUCTION_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_COMPONENT_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_REQUEST_VIEW_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_RESPONSE_VIEW_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.REQUEST_VIEW_ALREADY_SET_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_MESSAGE_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.NAMED_OBJECT_NOT_FOUND_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.NULL_RESPONSE_STREAM_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_RESPONSE_WRITER_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_EVENT_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_HANDLER_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_CONTEXT_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NULL_LOCALE_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.SUPPORTS_COMPONENT_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.MISSING_RESOURCE_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.MISSING_CLASS_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.COMPONENT_NOT_FOUND_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.LIFECYCLE_ID_ALREADY_ADDED_ID, "1"},
-        {MessageUtils.LIFECYCLE_ID_NOT_FOUND_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.PHASE_ID_OUT_OF_BOUNDS_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.CANT_CREATE_LIFECYCLE_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.ILLEGAL_MODEL_REFERENCE_ID, "1"},
-        {MessageUtils.ATTRIBUTE_NOT_SUPORTED_ERROR_MESSAGE_ID, "2"},
-        {MessageUtils.FILE_NOT_FOUND_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.CANT_PARSE_FILE_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.ILLEGAL_CHARACTERS_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NOT_NESTED_IN_FACES_TAG_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.NULL_BODY_CONTENT_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.SAVING_STATE_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.RENDERER_NOT_FOUND_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.MAXIMUM_EVENTS_REACHED_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.NULL_CONFIGURATION_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.ERROR_OPENING_FILE_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.ERROR_REGISTERING_DTD_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.INVALID_INIT_PARAM_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.ERROR_SETTING_BEAN_PROPERTY_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.ERROR_GETTING_VALUE_BINDING_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.ERROR_GETTING_VALUEREF_VALUE_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.CANT_INTROSPECT_CLASS_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.CANT_CONVERT_VALUE_ERROR_MESSAGE_ID, "2"},
-        {MessageUtils.INVALID_SCOPE_LIFESPAN_ERROR_MESSAGE_ID, "4"},
-        {MessageUtils.NAVIGATION_INVALID_QUERY_STRING_ID, "1"},
-        {MessageUtils.ENCODING_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.ILLEGAL_IDENTIFIER_LVALUE_MODE_ID, "1"},
-        {MessageUtils.VALIDATION_ID_ERROR_ID, "1"},
-        {MessageUtils.VALIDATION_EL_ERROR_ID, "1"},
-        {MessageUtils.VALIDATION_COMMAND_ERROR_ID, "1"},
-        {MessageUtils.CONTENT_TYPE_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.COMPONENT_NOT_FOUND_IN_VIEW_WARNING_ID, "1"},
-        {MessageUtils.ILLEGAL_ATTEMPT_SETTING_APPLICATION_ARTIFACT_ID, "1"},
-        {MessageUtils.INVALID_MESSAGE_SEVERITY_IN_CONFIG_ID, "1"},
-        {MessageUtils.CANT_CLOSE_INPUT_STREAM_ID, "0"},
-        {MessageUtils.DUPLICATE_COMPONENT_ID_ERROR_ID, "1"},
-        {MessageUtils.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED_ID, "1"},
-        {MessageUtils.ILLEGAL_VIEW_ID_ID, "1"},
-        {MessageUtils.INVALID_EXPRESSION_ID, "1"},
-        {MessageUtils.NULL_FORVALUE_ID, "1"},
-        {MessageUtils.EMPTY_PARAMETER_ID, "0"},
-        {MessageUtils.ASSERTION_FAILED_ID, "0"},
-        {MessageUtils.OBJECT_CREATION_ERROR_ID, "0"},
-        {MessageUtils.CYCLIC_REFERENCE_ERROR_ID, "2"},
-        {MessageUtils.NO_DTD_FOUND_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_CANNOT_SET_LIST_ARRAY_PROPERTY_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_EXISTING_VALUE_NOT_LIST_ID, "2"},        
-        {MessageUtils.MANAGED_BEAN_TYPE_CONVERSION_ERROR_ID, "4"},
-        {MessageUtils.APPLICATION_ASSOCIATE_CTOR_WRONG_CALLSTACK_ID, "0"},
-        {MessageUtils.APPLICATION_ASSOCIATE_EXISTS_ID, "0"},
-        {MessageUtils.OBJECT_IS_READONLY, "1"},
-        {MessageUtils.INCORRECT_JSP_VERSION_ID, "1"},
-        {MessageUtils.EL_OUT_OF_BOUNDS_ERROR_ID, "1"},
-        {MessageUtils.EL_PROPERTY_TYPE_ERROR_ID, "1"},
-        {MessageUtils.EL_SIZE_OUT_OF_BOUNDS_ERROR_ID,"2"},
-        {MessageUtils.EVAL_ATTR_UNEXPECTED_TYPE, "3"},
-        {MessageUtils.RESTORE_VIEW_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.VALUE_NOT_SELECT_ITEM_ID, "2"},
-        {MessageUtils.CHILD_NOT_OF_EXPECTED_TYPE_ID, "4"},
-        {MessageUtils.COMMAND_LINK_NO_FORM_MESSAGE_ID, "0"},
-        {MessageUtils.FACES_CONTEXT_NOT_FOUND_ID, "0"},
-        {MessageUtils.NOT_NESTED_IN_TYPE_TAG_ERROR_MESSAGE_ID, "2"},
-        {MessageUtils.CANT_WRITE_ID_ATTRIBUTE_ERROR_MESSAGE_ID, "1"},
-        {MessageUtils.NOT_NESTED_IN_UICOMPONENT_TAG_ERROR_MESSAGE_ID, "0"},
-        {MessageUtils.NO_COMPONENT_ASSOCIATED_WITH_UICOMPONENT_TAG_MESSAGE_ID, "0"},
-        {MessageUtils.FACES_SERVLET_MAPPING_INCORRECT_ID, "0"},
-        {MessageUtils.JS_RESOURCE_WRITING_ERROR_ID, "0"},
-        {MessageUtils.CANNOT_CONVERT_ID, "2"},
-        {MessageUtils.CANNOT_VALIDATE_ID, "2"},
-        {MessageUtils.ERROR_PROCESSING_CONFIG_ID, "0"},
-        {MessageUtils.MANAGED_BEAN_CLASS_NOT_FOUND_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_CLASS_DEPENDENCY_NOT_FOUND_ERROR_ID, "3"},
-        {MessageUtils.MANAGED_BEAN_CLASS_IS_NOT_PUBLIC_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_CLASS_IS_ABSTRACT_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_CLASS_NO_PUBLIC_NOARG_CTOR_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_INJECTION_ERROR_ID, "1"},
-        {MessageUtils.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_AS_LIST_CONFIG_ERROR_ID, "1"},
-        {MessageUtils.MANAGED_BEAN_AS_MAP_CONFIG_ERROR_ID, "1"},
-        {MessageUtils.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_SETTER_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_MAP_PROPERTY_INCORRECT_GETTER_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_DEFINED_PROPERTY_CLASS_NOT_COMPATIBLE_ERROR_ID, "3"},
-        {MessageUtils.MANAGED_BEAN_INTROSPECTION_ERROR_ID, "1"},
-        {MessageUtils.MANAGED_BEAN_PROPERTY_DOES_NOT_EXIST_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_PROPERTY_HAS_NO_SETTER_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_PROPERTY_INCORRECT_ARGS_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_LIST_SETTER_DOES_NOT_ACCEPT_LIST_OR_ARRAY_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_LIST_GETTER_DOES_NOT_RETURN_LIST_OR_ARRAY_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_LIST_GETTER_ARRAY_NO_SETTER_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_UNABLE_TO_SET_PROPERTY_ERROR_ID, "2"},
-        {MessageUtils.MANAGED_BEAN_PROBLEMS_ERROR_ID, "1"},
-        {MessageUtils.MANAGED_BEAN_PROBLEMS_STARTUP_ERROR_ID, "1"},
-        {MessageUtils.MANAGED_BEAN_UNKNOWN_PROCESSING_ERROR_ID, "1"},
-        {MessageUtils.MANAGED_BEAN_PROPERTY_UNKNOWN_PROCESSING_ERROR_ID, "1"},
-        {MessageUtils.VERIFIER_CLASS_MISSING_DEP_ID, "3"},
-        {MessageUtils.VERIFIER_CLASS_NOT_FOUND_ID, "2"},
-        {MessageUtils.VERIFIER_CTOR_NOT_PUBLIC_ID, "2"},
-        {MessageUtils.VERIFIER_NO_DEF_CTOR_ID, "2"},
-        {MessageUtils.VERIFIER_WRONG_TYPE_ID, "3"},
-        {MessageUtils.COMMAND_NOT_NESTED_WITHIN_FORM_ID, "0"},
-        {MessageUtils.NAVIGATION_NO_MATCHING_OUTCOME_ID, "2"},
-        {MessageUtils.NAVIGATION_NO_MATCHING_OUTCOME_ACTION_ID, "3"},
-        {MessageUtils.NO_RESOURCE_TARGET_AVAILABLE, "1"},
-        {MessageUtils.INVALID_RESOURCE_FORMAT_ERROR, "1"},
-        {MessageUtils.INVALID_RESOURCE_FORMAT_NO_LIBRARY_NAME_ERROR, "1"},
-        {MessageUtils.INVALID_RESOURCE_FORMAT_COLON_ERROR, "1"},
-        {MessageUtils.ARGUMENTS_NOT_LEGAL_CC_ATTRS_EXPR, "0"},
-        {MessageUtils.PARTIAL_STATE_ERROR_RESTORING_ID, "2"},
-        {MessageUtils.MISSING_COMPONENT_ATTRIBUTE_VALUE, "1"},
-        {MessageUtils.MISSING_COMPONENT_FACET, "1"},
-        {MessageUtils.MISSING_COMPONENT_METADATA, "1" }
-    };
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
-
-//
-// Constructors and Initializers    
-//
-
-    public TestUtil_messages() {
-        super("TestUtil_messages.java");
-    }
-
-
-    public TestUtil_messages(String name) {
-        super(name);
-    }
-
-    //
-    // Methods from TestCase
-    
-    public void setUp() {
-        super.setUp();
-        UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null);
-        viewRoot.setViewId("viewId");
-        viewRoot.setLocale(Locale.US);
-        getFacesContext().setViewRoot(viewRoot);
-
-    }
-    
-//
-// Class methods
-//
-
-//
-// General Methods
-//
-
-
-    public void testVerifyMessages() {
-
-        Locale[] localesToTest = new Locale[] {
-            new Locale("en", "US"),
-            new Locale("fr", ""),
-            new Locale("de", ""),
-            new Locale("es", ""),
-            new Locale("ja", ""),
-            new Locale("ko", ""),
-            new Locale("pt", "BR"),
-            new Locale("zh", "CN"),
-            new Locale("zh", "TW"),
-        };
-
-        for (Locale locale : localesToTest) {
-            System.out.println("Verifying messages for locale: " + locale.toString());
-            getFacesContext().getViewRoot().setLocale(locale);
-            verifyParamsInMessages(messageInfo);
-        }
-
-    }     
-
-    private void verifyParamsInMessages(String[][] messageInfo) {
-        int numParams = 0;
-
-        for (int i = 0; i < messageInfo.length; i++) {
-            System.out.println("Testing message: " + messageInfo[i][0]);
-            try {
-                numParams = Integer.parseInt(messageInfo[i][1]);
-            } catch (NumberFormatException e) {
-                System.out.println("Invalid param number specifier!");
-                assertTrue(false);
-            }
-            if (numParams == 0) {
-                String message = MessageUtils.getExceptionMessageString(messageInfo[i][0]);
-                assertTrue(messageInfo[i][0] + " was null", message != null);
-            } else if (numParams > 0) {
-                Object[] params = generateParams(numParams);
-                String message = MessageUtils.getExceptionMessageString(messageInfo[i][0],
-                                                          params);
-                assertTrue(message != null);
-                for (int j = 0; j < params.length; j++) {
-                    assertTrue(messageInfo[i][0] + " unable to finder marker for param " + j,message.indexOf((String) params[j]) != -1);
-                }
-            }
-        }
-    }
-
-
-    private Object[] generateParams(int numParams) {
-        Object[] params = new String[numParams];
-        for (int i = 0; i < numParams; i++) {
-            params[i] = "param_" + i;
-        }
-        return params;
-    }
-
-} // end of class TestUtil_messages
diff --git a/jsf-ri/test/com/sun/faces/util/TreeStructure.java b/jsf-ri/test/com/sun/faces/util/TreeStructure.java
deleted file mode 100644
index 8460733..0000000
--- a/jsf-ri/test/com/sun/faces/util/TreeStructure.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-
-/**
- * TreeStructure is a class that represents the structure of a UIComponent
- * instance. This class plays a key role in saving and restoring the structure
- * of the component tree.
- */
-public class TreeStructure implements java.io.Serializable {
-
-    private static final long serialVersionUID = 8320767450484935667L;
-
-    ArrayList<TreeStructure> children = null;
-    HashMap<String,TreeStructure> facets = null;
-    String className = null;
-    String id = null;
-
-
-    public TreeStructure() {
-    }
-
-
-    public TreeStructure(UIComponent component) {
-        Util.notNull("component", component);
-        this.id = component.getId();
-        className = component.getClass().getName();
-    }
-
-
-    /**
-     * Returns the className of the UIComponent that this TreeStructure
-     * represents.
-     */
-    public String getClazzName() {
-        return className;
-    }
-
-
-    /**
-     * Returns the iterator over className of the children that are attached to
-     * the UIComponent that this TreeStructure represents.
-     */
-    public Iterator getChildren() {
-        if (children != null) {
-            return (children.iterator());
-        } else {
-            return (Collections.EMPTY_LIST.iterator());
-        }
-    }
-
-
-    /**
-     * Returns the iterator over className of the facets that are attached to
-     * the UIComponent that this TreeStructure represents.
-     */
-    public Iterator getFacetNames() {
-        if (facets != null) {
-            return (facets.keySet().iterator());
-        } else {
-            return (Collections.EMPTY_LIST.iterator());
-        }
-    }
-
-
-    /**
-     * Adds treeStruct as a child of this TreeStructure instance.
-     */
-    public void addChild(TreeStructure treeStruct) {
-        Util.notNull("treeStruct", treeStruct);
-        if (children == null) {
-            children = new ArrayList<TreeStructure>();
-        }
-        children.add(treeStruct);
-    }
-
-
-    /**
-     * Adds treeStruct as a facet belonging to this TreeStructure instance.
-     */
-    public void addFacet(String facetName, TreeStructure treeStruct) {
-        Util.notNull("facetName", facetName);
-        Util.notNull("treeStruct", treeStruct);
-        if (facets == null) {
-            facets = new HashMap<String, TreeStructure>();
-        }
-        facets.put(facetName, treeStruct);
-    }
-
-
-    /**
-     * Returns a TreeStructure representing a facetName by looking up
-     * the facet list
-     */
-    public TreeStructure getTreeStructureForFacet(String facetName) {
-        Util.notNull("facetName", facetName);
-        if (facets != null) {
-            return ((facets.get(facetName)));
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     * Creates and returns the UIComponent that this TreeStructure
-     * represents using the structure information available.
-     */
-    public UIComponent createComponent() {
-        UIComponent component = null;
-        // create the UIComponent based on the className stored.
-        try {
-            Class clazz = Util.loadClass(className, this);
-            component = ((UIComponent) clazz.newInstance());
-        } catch (Exception e) {
-            Object params[] = {className};
-            throw new FacesException(MessageUtils.getExceptionMessageString(
-                MessageUtils.MISSING_CLASS_ERROR_MESSAGE_ID,
-                params));
-        }
-        assert (component != null);
-        component.setId(id);
-        return component;
-    }
-}
diff --git a/jsf-ri/test/debugrunner.bat b/jsf-ri/test/debugrunner.bat
deleted file mode 100644
index 93c0c0d..0000000
--- a/jsf-ri/test/debugrunner.bat
+++ /dev/null
@@ -1,73 +0,0 @@
-REM
-REM DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-REM 
-REM Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-REM 
-REM The contents of this file are subject to the terms of either the GNU
-REM General Public License Version 2 only ("GPL") or the Common Development
-REM and Distribution License("CDDL") (collectively, the "License").  You
-REM may not use this file except in compliance with the License. You can obtain
-REM a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
-REM or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
-REM language governing permissions and limitations under the License.
-REM 
-REM When distributing the software, include this License Header Notice in each
-REM file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
-REM Sun designates this particular file as subject to the "Classpath" exception
-REM as provided by Sun in the GPL Version 2 section of the License file that
-REM accompanied this code.  If applicable, add the following below the License
-REM Header, with the fields enclosed by brackets [] replaced by your own
-REM identifying information: "Portions Copyrighted [year]
-REM [name of copyright owner]"
-REM 
-REM Contributor(s):
-REM 
-REM If you wish your version of this file to be governed by only the CDDL or
-REM only the GPL Version 2, indicate your decision by adding "[Contributor]
-REM elects to include this software in this distribution under the [CDDL or GPL
-REM Version 2] license."  If you don't indicate a single choice of license, a
-REM recipient has the option to distribute your version of this file under
-REM either the CDDL, the GPL Version 2 or to extend the choice of license to
-REM its licensees as provided above.  However, if you add GPL Version 2 code
-REM and therefore, elected the GPL Version 2 license, then the option applies
-REM only if the new code is made subject to such option by the copyright
-REM holder.
-REM
-
- at if "%TOMCAT_HOME%" == "" goto printUsage
- at if "%JSF_RI_HOME%" == "" goto printUsage
- at if "%CACTUS_HOME%" == "" goto printUsage
- at if "%JUNIT_HOME%" == "" goto printUsage
- at if "%1" == "" goto printUsage
-
- at if not "%2" == "" goto setDebug
- at if "%2" == "" goto setCp
-
-:setDebug
-set DO_DEBUG=-Xdebug -Xrunjdwp:transport=dt_shmem,address=jdbconn,server=y,suspend=n
-
-:setCp
- at set CP=%TOMCAT_HOME%\common\lib\servlet.jar;%TOMCAT_HOME%\server\lib\catalina.jar;%TOMCAT_HOME%\bin\bootstrap.jar;%TOMCAT_HOME%\common\lib\naming-common.jar;%TOMCAT_HOME%\common\lib\naming-resources.jar;%TOMCAT_HOME%\common\lib\xerces.jar;%JSF_RI_HOME%\build\test\servers\tomcat40\webapps\test\WEB-INF\classes;%JSF_RI_HOME%\conf\test;%CACTUS_HOME%\lib\cactus.jar;%CACTUS_HOME%\lib\httpclient.jar;%JUNIT_HOME%\junit.jar;
-
- at cls
-java %DO_DEBUG% -classpath %CP% -Dcatalina.home=%TOMCAT_HOME% -Dserver.xml=%JSF_RI_HOME%\build\test\servers\tomcat40\conf\server.xml DebugRunner "%1%"                      
-goto doExit
-
-:printUsage
- at cls
- at echo Run a junit or cactus test class from the command line,
- at echo with the option of allowing a debugger to attach.
- at echo You must the have the following env vars set to the correct
- at echo values for your system: 
- at echo TOMCAT_HOME to your tomcat 4.0 installation
- at echo JSF_RI_HOME to the top level of your jsf-ri workarea
- at echo CACTUS_HOME to your cactus 23-1.3 installation
- at echo JUNIT_HOME to your junit 3.7 installation
- at echo usage:
- at echo      debugrunner.bat fully.qual.test.class [debug]
- at echo If you specify a debug argument, the vm will be started 
- at echo with arguments for attaching a debugger
-
-:doExit
- at set CP=
- at set DO_DEBUG=
diff --git a/jsf-ri/web/test/CorrectRenderersResponse b/jsf-ri/web/test/CorrectRenderersResponse
deleted file mode 100644
index e739a76..0000000
--- a/jsf-ri/web/test/CorrectRenderersResponse
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<form id="formRenderer0" name="formRenderer0" method="post" action="/test/JspRedirector/root;jsessionid=78a3afe94a84b6391596868b3797">
-<input type="hidden" name="formRenderer0" value="formRenderer0" />
-~com.sun.faces.saveStateFieldMarker~
-
-
-</form>
-
-<form id="formRenderer1" name="formRenderer1" method="post" action="/test/JspRedirector/root;jsessionid=78a3afe94a84b6391596868b3797">
-<input type="hidden" name="formRenderer1" value="formRenderer1" />
-~com.sun.faces.saveStateFieldMarker~
-
-
-</form>
-<table border="0" id="radioRenderer" class="styleClass">
-	<tr>
-<td>
-<input type="radio" name="radioRenderer" id="radioRenderer:0" value="One" disabled="disabled" tabindex="5" title="title" /><label for="radioRenderer:0" class="disabledClass"> One</label></td>
-<td>
-<input type="radio" checked="checked" name="radioRenderer" id="radioRenderer:1" value="Two" tabindex="5" title="title" /><label for="radioRenderer:1" class="enabledClass"> Two</label></td>
-<td>
-<input type="radio" name="radioRenderer" id="radioRenderer:2" value="Three" tabindex="5" title="title" /><label for="radioRenderer:2" class="enabledClass"> Three</label></td>
-<td>group</td><td>
-<table border="0">
-	<tr>
-<td>
-<input type="radio" name="radioRenderer" id="radioRenderer:0" value="Four" tabindex="5" title="title" /><label for="radioRenderer:0" class="enabledClass"> Four</label></td>
-<td>
-<input type="radio" name="radioRenderer" id="radioRenderer:1" value="Five" tabindex="5" title="title" /><label for="radioRenderer:1" class="enabledClass"> Five</label></td>
-	</tr>
-</table></td>	</tr>
-</table>
-<input id="imageButton" type="image" src="duke.gif;jsessionid=78a3afe94a84b6391596868b3797" name="imageButton" />
-<input id="imageButton2" type="image" src="resduke.gif;jsessionid=78a3afe94a84b6391596868b3797" name="imageButton2" />
-<input id="labelButton1" type="submit" name="labelButton1" value="PASSED" />
-<input id="labelButton2" type="reset" name="labelButton2" value="model label" />
-<input id="labelButton3" type="submit" name="labelButton3" value="RES-BUNDLE PASSED" />
-<input id="labelButton4" type="reset" name="labelButton4" value="" />
-<a id="labelLink1" name="labelLink1" href="hrefValue;jsessionid=78a3afe94a84b6391596868b3797">PASSED</a>
-<a id="labelLink2" name="labelLink2" href="hrefValue;jsessionid=78a3afe94a84b6391596868b3797">model label</a>
-<a id="labelLink3" name="labelLink3" href="hrefValue;jsessionid=78a3afe94a84b6391596868b3797">RES-BUNDLE PASSED</a>
-<a id="labelLink4" name="labelLink4" href="hrefValue;jsessionid=78a3afe94a84b6391596868b3797" coords="coords" hreflang="hreflang" rel="rel" rev="rev" shape="shape"></a>
-<a id="linkImage" name="linkImage" href="hrefValue;jsessionid=78a3afe94a84b6391596868b3797"><img src="duke.gif;jsessionid=78a3afe94a84b6391596868b3797" /></a>
-<a id="linkImage2" name="linkImage2" href="hrefValue;jsessionid=78a3afe94a84b6391596868b3797"><img src="resduke.gif;jsessionid=78a3afe94a84b6391596868b3797" /></a>
-<a id="paramLink" name="paramLink" href="hrefValue;jsessionid=78a3afe94a84b6391596868b3797?parameter1=param_value1&parameter2=param_value2"><img src="resduke.gif;jsessionid=78a3afe94a84b6391596868b3797" /></a>
-
-<script type="text/javascript" src="/test/JspRedirector/javax.faces.resource/jsf.js?ln=javax.faces&stage=UnitTest"></script>
-<a id="j_id2:labelLink1" href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id2'),{'j_id2:labelLink1':'j_id2:labelLink1'},'');return false">PASSED</a>
-<a id="j_id2:labelLink2" href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id2'),{'j_id2:labelLink2':'j_id2:labelLink2'},'');return false">model label</a>
-<a id="j_id2:labelLink3" href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id2'),{'j_id2:labelLink3':'j_id2:labelLink3'},'');return false">RES-BUNDLE PASSED</a>
-<a id="j_id2:labelLink4" href="#" coords="coords" hreflang="hreflang" rel="rel" rev="rev" shape="shape" onclick="mojarra.jsfcljs(document.getElementById('j_id2'),{'j_id2:labelLink4':'j_id2:labelLink4'},'');return false"></a>
-<a id="j_id2:linkImage" href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id2'),{'j_id2:linkImage':'j_id2:linkImage'},'');return false"><img src="duke.gif;jsessionid=78a3afe94a84b6391596868b3797" /></a>
-<a id="j_id2:linkImage2" href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id2'),{'j_id2:linkImage2':'j_id2:linkImage2'},'');return false"><img src="resduke.gif;jsessionid=78a3afe94a84b6391596868b3797" /></a>
-<a id="j_id2:paramLink" href="#" onclick="mojarra.jsfcljs(document.getElementById('j_id2'),{'j_id2:paramLink':'j_id2:paramLink','parameter1':'param_value1','parameter2':'param_value2'},'');return false">link with parameters</a>
diff --git a/jsf-ri/web/test/CorrectRenderersResponse_2 b/jsf-ri/web/test/CorrectRenderersResponse_2
deleted file mode 100644
index 598632e..0000000
--- a/jsf-ri/web/test/CorrectRenderersResponse_2
+++ /dev/null
@@ -1,11 +0,0 @@
-<input id="myCheckbox" type="checkbox" name="myCheckbox" checked="checked" />
-<input id="myCheckbox" type="checkbox" name="myCheckbox" />
-<input id="myCheckbox" type="checkbox" name="myCheckbox" />
-<select id="myListbox" name="myListbox" size="4">	<option value="100" selected="selected">Long1</option>
-	<option value="101">Long2</option>
-	<option value="102">Long3</option>
-	<option value="103">Long4</option>
-</select>
-<input id="mySecret" type="password" name="mySecret" value="" />
-<input id="myInputText" type="text" name="myInputText" value="text" /><span id="myOutputText"></span><textarea id="myTextarea" name="myTextarea" class="bar" style="foo">TextareaRenderer</textarea>
-<img id="myGraphicImage" src="/test/nonModelReferenceImage.gif;jsessionid=059BAE8BD400E6DD20A675D2ACEF8C75" usemap="usemap" ismap="ismap" /><img src="/test/foo/modelReferenceImage.gif;jsessionid=059BAE8BD400E6DD20A675D2ACEF8C75" usemap="usemap" ismap="ismap" /><span id="myOutputMessage">My name is Bobby Orr</span>
diff --git a/jsf-ri/web/test/CorrectRenderersResponse_3 b/jsf-ri/web/test/CorrectRenderersResponse_3
deleted file mode 100644
index d654629..0000000
--- a/jsf-ri/web/test/CorrectRenderersResponse_3
+++ /dev/null
@@ -1,32 +0,0 @@
-<select id="myMenu" name="myMenu" multiple="multiple" size="1">	<option value="Red">Red</option>
-	<option value="Blue" selected="selected">Blue</option>
-	<option value="Green">Green</option>
-	<option value="Yellow">Yellow</option>
-</select>
-<select id="myListbox" name="myListbox" multiple="multiple" size="5">	<option value="Red">Red</option>
-	<option value="Blue" selected="selected">Blue</option>
-<optgroup label="group" disabled="disabled">	<option value="Green">Green</option>
-	<option value="Yellow">Yellow</option>
-</optgroup></select>
-<table border="0" id="myCheckboxlist" class="styleClass">
-	<tr>
-<td>
-<input name="myCheckboxlist" id="myCheckboxlist:0" value="Red" type="checkbox" disabled="disabled" tabindex="5" title="title" /><label for="myCheckboxlist:0" class="disabledClass"> Red</label></td>
-<td>
-<input name="myCheckboxlist" id="myCheckboxlist:1" value="Blue" type="checkbox" checked="checked" tabindex="5" title="title" /><label for="myCheckboxlist:1" class="enabledClass"> Blue</label></td>
-<td>group</td><td>
-<table border="0">
-	<tr>
-<td>
-<input name="myCheckboxlist" id="myCheckboxlist:0" value="Green" type="checkbox" tabindex="5" title="title" /><label for="myCheckboxlist:0" class="enabledClass"> Green</label></td>
-<td>
-<input name="myCheckboxlist" id="myCheckboxlist:1" value="Yellow" type="checkbox" tabindex="5" title="title" /><label for="myCheckboxlist:1" class="enabledClass"> Yellow</label></td>
-	</tr>
-</table></td>	</tr>
-</table>
-<select id="myOnemenu" name="myOnemenu" size="1">	<option value="Red">Red</option>
-	<option value="Blue" selected="selected">Blue</option>
-	<option value="Green">Green</option>
-	<option value="Yellow">Yellow</option>
-</select>
-<input id="myInputDateHidden" type="hidden" name="myInputDateHidden" value="Jan 12, 1952" /><input id="myNumberHidden" type="hidden" name="myNumberHidden" value="47%" />
diff --git a/jsf-ri/web/test/CorrectRenderersResponse_4 b/jsf-ri/web/test/CorrectRenderersResponse_4
deleted file mode 100644
index 60bba87..0000000
--- a/jsf-ri/web/test/CorrectRenderersResponse_4
+++ /dev/null
@@ -1,24 +0,0 @@
-<table>
-<thead>
-<tr><th colspan="2" scope="colgroup"><span id="header">header1 header2 </span></th></tr>
-</thead>
-<tfoot>
-<tr><td colspan="2"><span id="footer">footer1 footer2 </span></td></tr>
-</tfoot>
-<tbody>
-<tr>
-<td>body1</td>
-<td>body2</td>
-</tr>
-</tbody>
-</table>
-<table>
-<tfoot>
-<tr><td colspan="2"><span id="footer">footer1 footer2 </span></td></tr>
-</tfoot>
-<tbody>
-<tr>
-<td>body2</td>
-</tr>
-</tbody>
-</table>
diff --git a/jsf-ri/web/test/Faces_Basic.jsf b/jsf-ri/web/test/Faces_Basic.jsf
deleted file mode 100644
index c75e67f..0000000
--- a/jsf-ri/web/test/Faces_Basic.jsf
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Non JSP Faces_Basic testcase</title>
-    <faces:tree src=Faces_Basic.jsp />
-  </head>
-
-  <body>
-    <h1>Non JSP Faces_Basic testcase</h1>
-
-    All of this content will be passed thru straight to the output.
-
-<faces:tag id=basicForm;rendererType=FormRenderer>
-
-    <table>
-    <tr>
-    <td><faces:tag id=userLabel;rendererType=TextRenderer>
-</faces:tag></td>
-
-    <td><faces:tag id=userName;rendererType=InputRenderer>
-</faces:tag> </td>
-    </tr>
-
-	<TR>
-
-	  <TD>
-	    
-	    <faces:tag id=pwdLabel;rendererType=TextRenderer>
-	    </faces:tag>	    
-
-	  </TD>
-
-	  <TD>
-
-	    <faces:tag id=password;rendererType=SecretRenderer>
-	    </faces:tag>
-
-	  </TD>
-
-	</TR>
-
-	<TR>
-
-	  <TD>
-
-	    <faces:tag id=login;rendererType=ButtonRenderer>
-	    </faces:tag>
-	    
-	  </TD>
-
-	</TR>
-
-    </table>
-
-</faces:tag>
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Mon Apr 29 15:45:04 Pacific Daylight Time 2002 -->
-<!-- hhmts start -->
-Last modified: Tue Apr 30 13:53:43 Pacific Daylight Time 2002
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/web/test/Faces_Basic.uiml b/jsf-ri/web/test/Faces_Basic.uiml
deleted file mode 100644
index 00d8201..0000000
--- a/jsf-ri/web/test/Faces_Basic.uiml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0"?>
-<!--
-<!DOCTYPE uiml PUBLIC
-        "-//UIT//DTD UIML 2.0 Draft//EN"
-        "UIML2_0d.dtd">
--->
-<uiml>
-
- <!-- describes a UI and user's interaction with UI, not the interaction
-       UI and the backend applicaton logic -->
- <interface>
- 
-   <!-- describes a virtual tree of parts with each part's associated
-         contant, behavior etc attached to it -->
-   <structure>
-   
-    <!-- represents an instance of class of UIWidget. Parts may be nested
-         to represent a hierarchy -->
-    <part id="basicForm" class="UIForm" >
-      <part id="userLabel" class="UIOutput">
-      
-        <!-- contains a list of properties and values that are used
-             to render the interface -->
-        <style>
-            <!-- associates a name and value pair with a part or event -->
-            <property name="value">UserName</property>
-        </style>    
-      </part>
-      
-      <part id="userName" class="UITextEntry">
-        <style>
-            <property name="text">Default</property>
-        </style>    
-      </part>
-      
-      <part id="pwdLabel" class="UIOutput">
-        <style>
-            <property name="value">Password</property>
-        </style>    
-      </part>
-      
-      <part id="password" class="UITextEntry">
-        <style>
-            <property name="size">20</property>
-            <property name="maxlength">26</property>
-        </style>    
-      </part>
-      
-      <part id="addrLabel" class="UIOutput">
-        <style>
-            <property name="value">Address</property>
-        </style>    
-      </part>
-      
-      <part id="address" class="UITextEntry">
-        <style>
-            <property name="cols">150</property>
-            <property name="rows">10</property>
-        </style>    
-      </part>
-      
-      <part id="validUser" class="UISelectBoolean">
-        <style>
-            <property name="value">Checker</property>
-            <property name="checked">true</property>
-            <property name="label">Check this</property>
-        </style>  
-      </part>    
-      
-      <part id="appleQuantity" class="UISelectOne">
-        <style>
-            <property name="valueRef">${UserBean.items}</property>
-            <property name="label">0</property>
-            <property name="value">0.00</property>
-            <property name="label">1</property>
-            <property name="value">1.00</property>
-            <property name="label">2</property>
-            <property name="value">2.00</property>
-            <property name="label">3</property>
-            <property name="value">3.00</property>
-            <property name="label">4</property>
-            <property name="value">4.00</property>
-            <property name="label">5</property>
-            <property name="value">5.00</property>
-            <property name="label">6</property>
-            <property name="value">6.00</property>
-            <property name="label">7</property>
-            <property name="value">7.00</property>
-            <property name="label">8</property>
-            <property name="value">8.00</property>
-            <property name="label">9</property>
-            <property name="value">9.00</property>
-        </style>  
-      </part>
-      
-      <part id="shipType" class="UISelectOne">
-        <style>
-            <property name="valueRef">${ShipTypeBean.shipType}</property>
-            <property name="label">Next Day</property>
-            <property name="value">nextDay"</property>
-            <property name="label">Next Week</property>
-            <property name="value">nextWeek"</property>
-            <property name="label">Next Month</property>
-            <property name="value">nextMonth"</property>
-        </style>
-      </part>    
-      
-      <part id="login" class="UICommand">
-        <style>
-            <property name="label">Login</property>
-        </style>    
-      </part>
-      
-      <part id="login2" class="UICommand">
-        <style>
-            <property name="image">duke.gif</property>
-        </style>    
-      </part>
-    </part>  
-  </structure>
-</interface>
-</uiml>      
-      
diff --git a/jsf-ri/web/test/Faces_Basic_correct_jsp b/jsf-ri/web/test/Faces_Basic_correct_jsp
deleted file mode 100644
index 3e7c87f..0000000
--- a/jsf-ri/web/test/Faces_Basic_correct_jsp
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Non JSP Faces_Basic testcase</title>
-  </head>
-
-  <body>
-    <h1>Non JSP Faces_Basic testcase</h1>
-
-    All of this content will be passed thru straight to the output.
-
-<FORM METHOD="POST" ACTION="/test/Faces_Basic.jsf" NAME="basicForm">
-
-    <table>
-    <tr>
-    <td>UserName
-</td>
-
-    <td><INPUT TYPE="text" NAME="userName" VALUE="default">
- </td>
-    </tr>
-
-	<TR>
-
-	  <TD>
-	    
-	    Password
-	    	    
-
-	  </TD>
-
-	  <TD>
-
-	    <INPUT TYPE="PASSWORD" NAME="password" SIZE="20" MAXLENGTH="26">
-	    
-	  </TD>
-
-	</TR>
-
-	<TR>
-
-	  <TD>
-
-	    <INPUT TYPE="SUBMIT" NAME="login" value="login">
-	    	    
-	  </TD>
-
-	</TR>
-
-    </table>
-
-
-<INPUT TYPE="HIDDEN" NAME="javax.faces.REQUEST_TOKEN" VALUE="a474bbe613e392826241822dd28c3ce">
-
-<INPUT TYPE="HIDDEN" NAME="faces.formId" VALUE="basicForm">
-</FORM>
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Mon Apr 29 15:45:04 Pacific Daylight Time 2002 -->
-<!-- hhmts start -->
-Last modified: Tue Apr 30 13:53:43 Pacific Daylight Time 2002
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/web/test/Faces_Basic_correct_uiml b/jsf-ri/web/test/Faces_Basic_correct_uiml
deleted file mode 100644
index 623c3ef..0000000
--- a/jsf-ri/web/test/Faces_Basic_correct_uiml
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Non JSP Faces_Basic testcase</title>
-  </head>
-
-  <body>
-    <h1>Non JSP Faces_Basic testcase</h1>
-
-    All of this content will be passed thru straight to the output.
-
-<FORM METHOD="POST" ACTION="/test/Faces_Basic_uiml.jsf" NAME="basicForm">
-
-    <table>
-    <tr>
-    <td>UserName
-</td>
-
-    <td><INPUT TYPE="text" NAME="userName" VALUE="Default">
- </td>
-    </tr>
-
-	<TR>
-
-	  <TD>
-	    
-	    Password
-	    	    
-
-	  </TD>
-
-	  <TD>
-
-	    <INPUT TYPE="PASSWORD" NAME="password" SIZE="20" MAXLENGTH="26">
-	    
-	  </TD>
-
-	</TR>
-
-	<TR>
-
-	  <TD>
-
-	    <INPUT TYPE="SUBMIT" NAME="login" value="Login">
-	    	    
-	  </TD>
-
-	</TR>
-
-    </table>
-
-
-<INPUT TYPE="HIDDEN" NAME="javax.faces.REQUEST_TOKEN" VALUE="cc9359a47cb877d585746f2faf823e78">
-
-<INPUT TYPE="HIDDEN" NAME="faces.formId" VALUE="basicForm">
-</FORM>
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Mon Apr 29 15:45:04 Pacific Daylight Time 2002 -->
-<!-- hhmts start -->
-Last modified: Tue Apr 30 13:53:43 Pacific Daylight Time 2002
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/web/test/Faces_Basic_correct_xul_tree b/jsf-ri/web/test/Faces_Basic_correct_xul_tree
deleted file mode 100644
index a1a6ddf..0000000
--- a/jsf-ri/web/test/Faces_Basic_correct_xul_tree
+++ /dev/null
@@ -1,97 +0,0 @@
-===>Type:Root
-id:root
-value=null
-attr=componentId : root
-  ===>Type:javax.faces.component.UIForm
-  id:basicForm
-  value=basicForm
-  attr=componentId : basicForm
-  attr=parent : com.sun.faces.tree.XmlTreeFactoryImpl
-  attr=value : basicForm
-    ===>Type:javax.faces.component.UIOutput
-    id:userLabel
-    value=UserName
-    attr=componentId : userLabel
-    attr=parent : javax.faces.component.UIForm
-    attr=value : UserName
-    ===>Type:javax.faces.component.UITextEntry
-    id:userName
-    value=default
-    attr=componentId : userName
-    attr=parent : javax.faces.component.UIForm
-    attr=value : default
-    ===>Type:javax.faces.component.UIOutput
-    id:pwdLabel
-    value=Password
-    attr=componentId : pwdLabel
-    attr=parent : javax.faces.component.UIForm
-    attr=value : Password
-    ===>Type:javax.faces.component.UITextEntry
-    id:password
-    value=null
-    attr=componentId : password
-    attr=parent : javax.faces.component.UIForm
-    attr=type : password
-    ===>Type:javax.faces.component.UIOutput
-    id:addrLabel
-    value=Address
-    attr=componentId : addrLabel
-    attr=parent : javax.faces.component.UIForm
-    attr=value : Address
-    ===>Type:javax.faces.component.UITextEntry
-    id:address
-    value=null
-    attr=multiline : true
-    attr=componentId : address
-    attr=parent : javax.faces.component.UIForm
-    ===>Type:javax.faces.component.UISelectBoolean
-    id:validUser
-    modelReference:${TestBean.boolProp}
-    value=false
-    attr=modelReference : 
-    attr=label : Checker
-    attr=componentId : validUser
-    attr=parent : javax.faces.component.UIForm
-    attr=value : false
-    ===>Type:javax.faces.component.UISelectOne
-    id:shipType
-    modelReference:${TestBean.prop}
-     {
-    	 value=nextDay label=Next Day description=null
-    	 value=nextWeek label=Next Week description=null
-    	 value=nextMonth label=Next Month description=null
-     }
-    ===>Type:javax.faces.component.UISelectOne
-    id:appleQuantity
-    modelReference:${TestBean.prop}
-     {
-    	 value=0 label=0.00 description=null
-    	 value=1 label=1.00 description=null
-    	 value=2 label=2.00 description=null
-    	 value=3 label=3.00 description=null
-    	 value=4 label=4.00 description=null
-    	 value=5 label=5.00 description=null
-    	 value=6 label=6.00 description=null
-    	 value=7 label=7.00 description=null
-    	 value=8 label=8.00 description=null
-    	 value=9 label=9.00 description=null
-     }
-    ===>Type:javax.faces.component.UICommand
-    id:mylink
-    value=null
-    attr=componentId : mylink
-    attr=parent : javax.faces.component.UIForm
-    attr=target : foo
-    attr=text : This is a hyperlink
-    ===>Type:javax.faces.component.UICommand
-    id:login
-    value=null
-    attr=label : Login
-    attr=componentId : login
-    attr=parent : javax.faces.component.UIForm
-    ===>Type:javax.faces.component.UICommand
-    id:login2
-    value=null
-    attr=componentId : login2
-    attr=parent : javax.faces.component.UIForm
-    attr=src : duke.gif
diff --git a/jsf-ri/web/test/Faces_Basic_uiml.jsf b/jsf-ri/web/test/Faces_Basic_uiml.jsf
deleted file mode 100644
index 49089c7..0000000
--- a/jsf-ri/web/test/Faces_Basic_uiml.jsf
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Non JSP Faces_Basic testcase</title>
-    <faces:tree src=Faces_Basic.uiml />
-  </head>
-
-  <body>
-    <h1>Non JSP Faces_Basic testcase</h1>
-
-    All of this content will be passed thru straight to the output.
-
-<faces:tag id=basicForm;rendererType=FormRenderer>
-
-    <table>
-    <tr>
-    <td><faces:tag id=userLabel;rendererType=TextRenderer>
-</faces:tag></td>
-
-    <td><faces:tag id=userName;rendererType=InputRenderer>
-</faces:tag> </td>
-    </tr>
-
-	<TR>
-
-	  <TD>
-	    
-	    <faces:tag id=pwdLabel;rendererType=TextRenderer>
-	    </faces:tag>	    
-
-	  </TD>
-
-	  <TD>
-
-	    <faces:tag id=password;rendererType=SecretRenderer>
-	    </faces:tag>
-
-	  </TD>
-
-	</TR>
-
-	<TR>
-
-	  <TD>
-
-	    <faces:tag id=login;rendererType=ButtonRenderer>
-	    </faces:tag>
-	    
-	  </TD>
-
-	</TR>
-
-    </table>
-
-</faces:tag>
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Mon Apr 29 15:45:04 Pacific Daylight Time 2002 -->
-<!-- hhmts start -->
-Last modified: Tue Apr 30 13:53:43 Pacific Daylight Time 2002
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/web/test/GenericPhase_correct b/jsf-ri/web/test/GenericPhase_correct
deleted file mode 100644
index 863bcd4..0000000
--- a/jsf-ri/web/test/GenericPhase_correct
+++ /dev/null
@@ -1,3 +0,0 @@
-GenericPhaseImpl: takeActionOnComponent: null
-GenericPhaseImpl: takeActionOnComponent: basicForm
-GenericPhaseImpl: takeActionOnComponent: userName
diff --git a/jsf-ri/web/test/RenderResponse_correct b/jsf-ri/web/test/RenderResponse_correct
deleted file mode 100644
index 4bb5b72..0000000
--- a/jsf-ri/web/test/RenderResponse_correct
+++ /dev/null
@@ -1,748 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Basic Components Test Page </TITLE> </HEAD>
-
-    
-    
-
-    <BODY>
-        <H3> JSF Basic Components Test Page </H3>
-
-
-<form id="basicForm" name="basicForm" method="post" action="/test/faces/TestRenderResponsePhase.jsp" class="formClass" accept-charset="some-charset" accept="html,wml" enctype="application/x-www-form-urlencoded" target="_self" title="basicForm">
-<input type="hidden" name="basicForm" value="basicForm" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" autocomplete="off" />
-
-
-  <TABLE BORDER="1">
-
-      <tr>
-         <td>
-                 <table id="basicForm:logonPanel1" border="1" cellpadding="3" cellspacing="3" summary="Grid with hardcoded data" title="Grid with hardcoded data">
-<tbody>
-<tr>
-<td><span id="basicForm:formHeader2"><span id="basicForm:A2">Logon </span><span id="basicForm:B2">Form</span></span></td>
-<td><span id="basicForm:text1">Username:</span></td>
-</tr>
-<tr>
-<td><input id="basicForm:username1" type="text" name="basicForm:username1" value="JavaServerFaces" class="inputClass" /></td>
-<td><input id="basicForm:username2" type="text" name="basicForm:username2" value="JavaServerFaces" class="inputClass" disabled="disabled" /></td>
-</tr>
-<tr>
-<td><span id="basicForm:text2" class="outputClass">Password:</span></td>
-<td><input id="basicForm:password1" type="password" name="basicForm:password1" value="" class="secretClass" /></td>
-</tr>
-<tr>
-<td><input id="basicForm:submit1" type="submit" name="basicForm:submit1" value="Login" class="commandClass" /></td>
-<td><input id="basicForm:reset1" type="reset" name="basicForm:reset1" value="Reset" /></td>
-</tr>
-</tbody>
-</table>
-
-             </td>
-           </tr>
-
-      <TR>
-
-	<TD>
-
-            <input id="basicForm:pushButton" type="image" src="duke.gif" name="basicForm:pushButton" style="someStyle" disabled="disabled" />
-	</TD>
-
-      </TR>
-
-
-      <TR>
-
-	<TD>
-
-            <input id="basicForm:imageOnlyButton" type="image" src="/test/duke.gif?title=LOGIN&color=red" name="basicForm:imageOnlyButton" />
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      
-<script type="text/javascript" src="/test/faces/javax.faces.resource/jsf.js?ln=javax.faces&stage=UnitTest"></script>
-<a id="basicForm:link" href="#" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:link':'basicForm:link'},'');return false" class="hyperlinkClass">link text with localized outputMessage with €</a>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <a id="basicForm:linkWithValue1" href="#" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:linkWithValue1':'basicForm:linkWithValue1'},'');return false" class="hyperlinkClass">link text</a>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <a id="basicForm:linkWithValue2" href="#" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:linkWithValue2':'basicForm:linkWithValue2'},'');return false" class="hyperlinkClass">link textwith some ~ text</a>   
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <a id="basicForm:imageLink" href="#" style="someStyle" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:imageLink':'basicForm:imageLink'},'');return false"><img src="duke.gif?title=LOGIN&color=red" /></a>
-
-	</TD>
-
-        <TD> 
-            <img id="basicForm:graphicImage" src="/test/duke.gif" style="someStyle" usemap="#map1" ismap="ismap" /> 
-        </TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:commandLink" href="#" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:commandLink':'basicForm:commandLink'},'');return false" class="hyperlinkClass">link text</a>
-       </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:commandParamLink" href="#" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:commandParamLink':'basicForm:commandParamLink','name':'horwat','value':'password'},'');return false" class="hyperlinkClass">link text</a>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:hrefLink" href="#" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:hrefLink':'basicForm:hrefLink'},'');return false"><img src="duke.gif"></a>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:hrefParamLink" href="#" onclick="mojarra.jsfcljs(document.getElementById('basicForm'),{'basicForm:hrefParamLink':'basicForm:hrefParamLink','name':'horwat','value':'password'},'_top');return false"><img src="duke.gif" /></a>
-        </TD>
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <a id="basicForm:outputLink" name="basicForm:outputLink" href="test.html" target="_blank" class="hyperlinkClass">output link text</a>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <a id="basicForm:output_imageLink" name="basicForm:output_imageLink" href="test.html" style="position: absolute; left: 96px; top: 168px"><img src="duke.gif" /></a>
-
-	</TD>
-
-        <TD> 
-            <img id="basicForm:output_graphicImage" src="/test/duke.gif" usemap="#map1" ismap="ismap" /> 
-        </TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:output_commandLink" name="basicForm:output_commandLink" href="test.html" style="position: absolute; left: 96px; top: 168px" class="hyperlinkClass">link text</a>
-       </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:output_commandParamLink" name="basicForm:output_commandParamLink" href="test.html?name=horwat&value=password&name_2=" class="hyperlinkClass">link text</a>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:output_hrefLink" name="basicForm:output_hrefLink" href="test.html"><img src="duke.gif"></a>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <a id="basicForm:output_hrefParamLink" name="basicForm:output_hrefParamLink" href="test.html?name=horwat&value=password"><img src="duke.gif" /></a>
-        </TD>
-      </TR>
-
-
-
-      <TR>
-
-	<TD>
-              
-             <span id="basicForm:outputText" style="someStyle">Output Text</span>
-            
-              
-              
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-            
-            <input id="basicForm:checkbox1" type="checkbox" name="basicForm:checkbox1" class="selectbooleanClass" /><label id="basicForm:labe11" for="basicForm:checkbox1" style="position: absolute; left: 96px; top: 168px">
-<span id="basicForm:outputlabel1">CheckboxAndLabelWithFor</span></label>
-             
-	</TD>
-        </TR>
-
-        <TR>
-        <TD>
-             <label id="basicForm:labe13" style="position: absolute; left: 96px; top: 168px">
-<span id="basicForm:outputlabel3">CheckboxAndLabelWithoutFor</span><input id="basicForm:checkbox3" type="checkbox" name="basicForm:checkbox3" class="selectbooleanClass" /></label>
-	</TD> 
-        </TR>
-        <TR>
-        <TD>
-             <label id="basicForm:labe14" style="position: absolute; left: 96px; top: 168px">
-<input id="basicForm:checkbox4" type="checkbox" name="basicForm:checkbox4" class="selectbooleanClass" /><span id="basicForm:outputlabel4">CheckboxAndLabelWithoutFor</span></label>
-	</TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-             <label id="basicForm:labe15" for="basicForm:checkbox5" style="position: absolute; left: 96px; top: 168px">
-<span id="basicForm:outputlabel5">LabelBeforeForComponent</span></label><input id="basicForm:checkbox5" type="checkbox" name="basicForm:checkbox5" class="selectbooleanClass" />
-              
-	</TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-             <label id="basicForm:labe16" for="basicForm:checkbox6">
-LabelWithValue</label><input id="basicForm:checkbox6" type="checkbox" name="basicForm:checkbox6" class="selectbooleanClass" />
-           
-              
-	</TD>
-
-      </TR>
-   
-      <TR>
-        <TD>
-             <label id="basicForm:labe17" for="basicForm:checkbox7">
-LabelWithValue<span id="basicForm:outputlabel7">andsometext</span></label><input id="basicForm:checkbox7" type="checkbox" name="basicForm:checkbox7" class="selectbooleanClass" />
-           
-              
-	</TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-             <label id="basicForm:labe18" for="basicForm:checkbox8">
-escape<p>this markup</p><span id="basicForm:outputlabel8">andsometext</span></label><input id="basicForm:checkbox8" type="checkbox" name="basicForm:checkbox8" class="selectbooleanClass" />
-           
-              
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	     <select name="basicForm:j_id_id306" class="selectoneClass" size="10" style="someStyle" tabindex="20" title="Select Quantity">	<option value="0" disabled="disabled" class="dclass">0</option>
-	<option value="1" class="eclass">1</option>
-	<option value="2" class="eclass">2</option>
-	<option value="3" class="eclass">3</option>
-	<option value="4" class="eclass">4</option>
-	<option value="5" class="eclass">5</option>
-	<option value="6" class="eclass">6</option>
-	<option value="7" class="eclass">7</option>
-	<option value="8" class="eclass">8</option>
-	<option value="9" class="eclass">9</option>
-</select>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>
-
-             <select name="basicForm:j_id_id333" class="selectoneClass" size="1" style="someStyle" tabindex="20" title="Select Quantity" disabled="disabled">	<option value="0" class="dclass">0</option>
-	<option value="&1&amp;" class="dclass">1</option>
-	<option value="2" class="dclass">2</option>
-	<option value="3" class="dclass">3</option>
-	<option value="4" class="dclass">4</option>
-	<option value="5" class="dclass">5</option>
-	<option value="6" class="dclass">6</option>
-	<option value="7" class="dclass">7</option>
-	<option value="8" class="dclass">8</option>
-	<option value="9" class="dclass">9</option>
-</select>
-
-        </TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	    <table id="basicForm:shipType" class="someStyleClass" style="someStyle">
-	<tr>
-<td>
-<input type="radio" name="basicForm:shipType" id="basicForm:shipType:0" value="nextDay&" accesskey="A" tabindex="3" disabled="disabled" /><label for="basicForm:shipType:0" class="disabledClass"> Next Day</label></td>
-<td>
-<input type="radio" name="basicForm:shipType" id="basicForm:shipType:1" value="nextWeek" accesskey="A" tabindex="3" disabled="disabled" /><label for="basicForm:shipType:1" class="disabledClass"> <Next Week></label></td>
-<td>
-<input type="radio" name="basicForm:shipType" id="basicForm:shipType:2" value="nextMonth" accesskey="A" tabindex="3" disabled="disabled" /><label for="basicForm:shipType:2" class="disabledClass"> <Next Month></label></td>
-	</tr>
-</table>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-            <table border="1" id="basicForm:verticalRadio">
-	<tr>
-<td>
-<input type="radio" name="basicForm:verticalRadio" id="basicForm:verticalRadio:0" value="nextDay" disabled="disabled" /><label for="basicForm:verticalRadio:0"> Next Day</label></td>
-	</tr>
-	<tr>
-<td>
-<input type="radio" name="basicForm:verticalRadio" id="basicForm:verticalRadio:1" value="nextWeek" disabled="disabled" /><label for="basicForm:verticalRadio:1"> Next Week</label></td>
-	</tr>
-	<tr>
-<td>
-<input type="radio" name="basicForm:verticalRadio" id="basicForm:verticalRadio:2" value="nextMonth" disabled="disabled" /><label for="basicForm:verticalRadio:2"> Next Month</label></td>
-	</tr>
-</table>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>Float: 
-        </TD>
-
-	<TD><input type="text" name="basicForm:j_id_id388" value="3.1415" style="someStyle" />
-	</TD>
-
-      </TR>
-
-
-
-      <TR>
-
-        <TD>Date: 
-        </TD>
-
-	<TD><input type="text" name="basicForm:j_id_id399" value="July 10, 1996" class="inputClass" />
-	</TD>
-
-      </TR>
-
-
-      <TR>
-
-        <TD>Disabled Date: 
-        </TD>
-
-	<TD><input id="basicForm:date2" type="text" name="basicForm:date2" value="July 11, 1996" accesskey="D" maxlength="20" size="3" tabindex="1" readonly="readonly" />
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>DateTime: 
-        </TD>
-
-	<TD><input id="basicForm:date3" type="text" name="basicForm:date3" value="Wed, Jul 10, 1996 AD at 12:31:31 PM" />
-	</TD>
-
-      </TR>
-
-
-      <tr>
-          <td>
-            <input id="basicForm:testPattern" type="text" name="basicForm:testPattern" value="10000" class="inputClass" accesskey="D" maxlength="20" size="3" tabindex="2" />
-              </td>
-
-      </tr>
-
-      <tr>
-          <td> <span id="basicForm:percentLabel" class="outputClass">OUTPUT-PERCENT</span> </td>
-              <td>
-                   <span id="basicForm:testPercent">45%</span>
-              </td>
-      </tr>
-
-      <TR>
-
-        <TD>OutputDate: 
-        </TD>
-
-	<TD><span id="basicForm:date4" class="outputClass">July 10, 1996</span>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>OutputDateTime: 
-        </TD>
-
-	<TD><span id="basicForm:date5">Wed, Jul 10, 1996 AD at 12:31:31 PM</span>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>InputTime: 
-        </TD>
-
-	<TD><input id="basicForm:date6" type="text" name="basicForm:date6" value="12:31:31 PM" />
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>OutputTime: 
-        </TD>
-
-	<TD><span id="basicForm:date7">12:31:31 PM</span>
-	</TD>
-
-      </TR>
-
-           <tr>
-
-             <td>
-
-               <input id="basicForm:inputDate1" type="text" name="basicForm:inputDate1" value="Jan 12, 1952" accesskey="D" alt="input_date medium readonly" maxlength="20" size="10" title="input_date medium readonly" readonly="readonly" />
-
-
-             </td>
-
-            </tr>
-
-           <tr>
-
-             <td>
-
-               <input id="basicForm:inputDate2" type="text" name="basicForm:inputDate2" value="Jan 12, 1952" alt="input_date medium" title="input_date medium" />
-
-             </td>
-
-            </tr>
-
-           <tr>
-
-             <td>
-
-               <input id="basicForm:inputDate3" type="text" name="basicForm:inputDate3" value="1/12/52" alt="input_date short" title="input_date short" />
-
-             </td>
-
-            </tr>
-
-           <tr>
-
-             <td>
-
-               <input id="basicForm:inputDate4" type="text" name="basicForm:inputDate4" value="January 12, 1952" accesskey="d" alt="input_date long" maxlength="40" size="20" title="input_date long" />
-
-
-             </td>
-
-            </tr>
-
-<tr>
-					<TD>Multi-select menu:</TD>
-					<TD><select id="basicForm:ManyApples" name="basicForm:ManyApples" class="selectmanyClass" multiple="multiple" size="1" style="someStyle">	<option value="0" class="eclass">zero</option>
-	<option value="1" class="eclass">one</option>
-	<option value="2" class="eclass">two</option>
-	<option value="3" class="eclass">three</option>
-	<option value="4" disabled="disabled" class="dclass">four</option>
-	<option value="5" class="eclass">five</option>
-	<option value="6" class="eclass">six</option>
-	<option value="7" class="eclass">seven</option>
-	<option value="8" class="eclass">eight</option>
-	<option value="9" class="eclass">nine</option>
-</select></TD>
-
-</tr>
-<td><input id="basicForm:iescape" type="text" name="basicForm:iescape" value="& a &amp;&" /></td>
-<tr>
-					<TD>Multi-select listbox:</TD>
-					<TD><select name="basicForm:j_id_id565" multiple="multiple" size="10" style="someStyle" disabled="disabled">	<option value="0" class="dclass">zero</option>
-	<option value="1" class="dclass">one</option>
-	<option value="2" class="dclass">two</option>
-	<option value="3" class="dclass">three</option>
-	<option value="4" class="dclass">four</option>
-	<option value="5" class="dclass">five</option>
-	<option value="6" class="dclass">six</option>
-	<option value="7" class="dclass">seven</option>
-	<option value="8" class="dclass">eight</option>
-	<option value="9" class="dclass">nine</option>
-</select></TD>
-</tr>
-
-<tr>
-					<TD>>
-						<table border="1" id="basicForm:ManyApples3" class="styleClass" style="someStyle">
-	<tr>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:0" value="0" type="checkbox" disabled="disabled" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:0" class="disabledClass"> zero</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:1" value="1" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:1" class="enabledClass"> one</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:2" value="2" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:2" class="enabledClass"> two</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:3" value="3" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:3" class="enabledClass"> three</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:4" value="4" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:4" class="enabledClass"> four</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:5" value="5" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:5" class="enabledClass"> five</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:6" value="6" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:6" class="enabledClass"> six</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:7" value="7" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:7" class="enabledClass"> seven</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:8" value="8" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:8" class="enabledClass"> eight</label></td>
-<td>
-<input name="basicForm:ManyApples3" id="basicForm:ManyApples3:9" value="9" type="checkbox" accesskey="A" tabindex="3" /><label for="basicForm:ManyApples3:9" class="enabledClass"> nine</label></td>
-	</tr>
-</table></TD>
-</tr>
-
-<tr>
-                                        <TD><table id="basicForm:checklistmodel">
-	<tr>
-<td>
-<input name="basicForm:checklistmodel" id="basicForm:checklistmodel:0" value="1" type="checkbox" disabled="disabled" /><label for="basicForm:checklistmodel:0" class="disabedClass"> <one></label></td>
-<td>
-<input name="basicForm:checklistmodel" id="basicForm:checklistmodel:1" value="2" type="checkbox" disabled="disabled" /><label for="basicForm:checklistmodel:1" class="disabedClass"> <two></label></td>
-<td>
-<input name="basicForm:checklistmodel" id="basicForm:checklistmodel:2" value="3" type="checkbox" disabled="disabled" /><label for="basicForm:checklistmodel:2" class="disabedClass"> three</label></td>
-	</tr>
-</table></TD>
-</tr>
-
-<tr>
-<td>
-<span class="walleye" style="color:red">style this text like a red walleye</span>
-</td>
-</tr>
-
-<tr>
-<td>
-<div class="walleye" style="color:red">style this text like a red walleye</div>
-</td>
-</tr>
-
-<input type="hidden" name="basicForm:j_id_id647" value="48%" />
-
-<tr><td>
-
-1. You should see the <i>angle brackets</i> on this
-text
-
-</td>
-</tr>
-
-<tr><td>
-
-2. You should not see the <i>angle brackets</i> on this
-text
-
-</td>
-</tr>
-
-<tr><td>
-
-3. You should not see the <i>angle
-brackets</i> on this text
-
-</td>
-</tr>
-
-<tr><td>
-
-4. You should see the <i>angle
-brackets</i> on this text
-
-</td>
-</tr>
-<tr><td>
-
-5. You should not see the
-<i>angle brackets</i> on this text
-
-</td>
-</tr>
-
-<tr><td>
-
-6. You should see the <i>angle
-brackets</i> on this text
-
-</td>
-</tr>
-
-<tr><td>
-
-<span id="basicForm:value7">7. & You should see the <i>angle brackets</i> on
-this text</span>
-
-</td>
-</tr>
-
-<tr><td>
-
-8. You should not see the <i>angle
-brackets</i> on this text
-
-</td>
-</tr>
-
-<tr><td>
-
-9. You should see
-the <i>angle brackets</i> on this text
-
-</td>
-</tr>
-
-<tr><td>
-
-10. You should not
-see the <i>angle brackets</i> on this text
-
-</td>
-</tr>
-
-<tr><td>
-
-<table>
-<tbody>
-<tr><td></td></tr></tbody>
-</table>
-
-
-</td></tr>
-
-<tr><td>
-
-<table>
-<tbody>
-<tr><td></td></tr></tbody>
-</table>
-
-
-</td></tr>
-
-<tr><td>
-
-<table>
-<tbody><tr><td></td></tr></tbody></table>
-<span title="output text with title">should be spanned</span><span id="basicForm:userMsg">Param 0: my param</span>
-
-
-
-
-
-
-
-
-
-
-</td></tr>
-
-<tr><td>
-
-<table>
-<thead>
-<tr><th class="table-header" colspan="2" scope="colgroup">Overall Table Header</th></tr>
-<tr>
-<th class="column-header" scope="col">Account Id</th>
-<th class="table-header" scope="col">Customer Name</th>
-</tr>
-</thead>
-<tfoot>
-<tr>
-<td class="column-footer">A.I. Footer</td>
-<td class="table-footer">C.N. Footer</td>
-</tr>
-<tr><td class="table-footer" colspan="2">Overall Table Footer</td></tr>
-</tfoot>
-<tbody>
-<tr><td></td></tr></tbody>
-</table>
-
-
-</td></tr>
-
-</table>
-
-
-</form>
-<form id="form2" name="form2" method="post" action="/test/faces/TestRenderResponsePhase.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form2" value="form2" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" autocomplete="off" />
-<input type="submit" name="form2:j_id_id827" value="form2 button1" />
-   <p />
-  <input type="submit" name="form2:j_id_id830" value="form2 button2" /> <p />
-
-</form>
-<form id="form3" name="form3" method="post" action="/test/faces/TestRenderResponsePhase.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form3" value="form3" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" autocomplete="off" />
-<input type="submit" name="form3:j_id_id836" value="form3 button1" />
-   <p />
-  <a href="#" onclick="mojarra.jsfcljs(document.getElementById('form3'),{'form3:j_id_id839':'form3:j_id_id839'},'');return false">form3 link1</a> <p />
-
-</form>
-<form id="form4" name="form4" method="post" action="/test/faces/TestRenderResponsePhase.jsp" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="form4" value="form4" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" autocomplete="off" />
-<a href="test.html">
-      Link Enabled
-  </a><span>
-      Link Disabled
-  </span><span class="myClass">
-      Link Disabled With Class
-  </span><span>
-      Command Link Disabled
-  </span><span class="myClass">
-      Command Link Disabled with Class
-  </span>
-</form>
-
-    </BODY>
-</HTML>
diff --git a/jsf-ri/web/test/RestoreView_correct b/jsf-ri/web/test/RestoreView_correct
deleted file mode 100644
index 45ab2cf..0000000
--- a/jsf-ri/web/test/RestoreView_correct
+++ /dev/null
@@ -1,11 +0,0 @@
-id:root
-value= null
-  id:helloForm
-  value= null
-  attr=com.sun.faces.FormNumber : 0
-  attr=name : helloForm
-    id:userNo
-    value= NUMBER
-    id:submit
-    value= Submit
-    attr=type : submit
diff --git a/jsf-ri/web/test/SaveState_correct b/jsf-ri/web/test/SaveState_correct
deleted file mode 100644
index 10e61cf..0000000
--- a/jsf-ri/web/test/SaveState_correct
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
- Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
- 
- Redistribution and use in source and binary forms, with or
- without modification, are permitted provided that the following
- conditions are met:
- 
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- 
- - Redistribution in binary form must reproduce the above
-   copyright notice, this list of conditions and the following
-   disclaimer in the documentation and/or other materials
-   provided with the distribution.
-    
- Neither the name of Sun Microsystems, Inc. or the names of
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-  
- This software is provided "AS IS," without a warranty of any
- kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
- WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
- EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
- DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
- RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
- ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
- FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
- SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
- CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
- THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
- BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-  
- You acknowledge that this software is not designed, licensed or
- intended for use in the design, construction, operation or
- maintenance of any nuclear facility.
--->
-
-<HTML>
-    <HEAD> <title>Hello</title> </HEAD>
-    
-    
-    <body bgcolor="white">
-    <h2>Hi. My name is Duke.  I'm thinking of a number from 0 to 10.
-    Can you guess it?</h2>
-    
-    <form id="helloForm" name="helloForm" method="post" action="/test/faces/greeting.jsp;jsessionid=09AF72F7E5EA209865AFFAB72D0F7B33">
-
-  	<input type="text" name="helloForm_userNo" value="NUMBER"> <BR>
-
-	 <input type="submit" name="helloForm_submit" value="Submit">
-     <input type="hidden" name="javax.faces.ViewState" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAcHQAJmphdmF4LmZhY2VzLmNvbXBvbmVudC5iYXNlLlVJSW5wdXRCYXNlcHQABnVzZXJOb3NxAH4AAHB0AChqYXZheC5mYWNlcy5jb21wb2 [...]
- </form>
-    
-</HTML>  
diff --git a/jsf-ri/web/test/TestCoreTagVBEnabled.jsp b/jsf-ri/web/test/TestCoreTagVBEnabled.jsp
deleted file mode 100644
index 5d71165..0000000
--- a/jsf-ri/web/test/TestCoreTagVBEnabled.jsp
+++ /dev/null
@@ -1,120 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Core Tags VB Enabling</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test Core Tags VB Enabling</h1>
-
-<f:view>
-<h:form id="validatorForm">
-
-<table>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="doubleRange" value="1000.0">
-                        <f:convertNumber type="number" integerOnly="false" 
-                           maxFractionDigits="2" maxIntegerDigits="5" locale="en"
-                           groupingUsed="true" />
-                       <f:validateDoubleRange minimum="#{doubleMin}" 
-                                             maximum="#{doubleMax}"/>
-                   </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-         <h:inputText id="longRange" value="1000">
-                     <f:convertNumber pattern="####" 
-                           minFractionDigits="0" minIntegerDigits="2" />
-                     <f:validateLongRange minimum="#{longMin}" 
-                                           maximum="#{longMax}"/>
-         </h:inputText>
-
-    </td>
-
-     <h:outputText id="outputNumber2" value="$123.45">
-                   <f:convertNumber type="currency" currencySymbol="$" />
-               </h:outputText>
-
-    <h:outputText id="outputDatetime3" value="7/10/96 12:31:31 PM PDT">
-       <f:convertDateTime type="both" timeStyle="full" dateStyle="short" 
-            locale="en"/>
-    </h:outputText>
-
-      
-
-  </tr>
-
-  <tr>
-
-    <td>
-            <h:inputText id="intRange" value="NorthAmerica">
-                  
-                     <f:validateLength minimum="#{intMin}" 
-                                       maximum="#{intMax}"/>
-             </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-</table>
-
-</h:form>
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/web/test/TestLifecycleImpl.html b/jsf-ri/web/test/TestLifecycleImpl.html
deleted file mode 100644
index 4361b4b..0000000
--- a/jsf-ri/web/test/TestLifecycleImpl.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>TestLifecycleImpl</title>
-  </head>
-
-  <body>
-    <h1>TestLifecycleImpl</h1>
-
-<p>No JSP Content necessary for this test.</p>
-
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Tue Jul 15 18:49:56 Eastern Daylight Time 2003 -->
-<!-- hhmts start -->
-Last modified: Tue Jul 15 18:50:05 Eastern Daylight Time 2003
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/web/test/TestLifecycleImpl_initial_correct b/jsf-ri/web/test/TestLifecycleImpl_initial_correct
deleted file mode 100644
index b3e815d..0000000
--- a/jsf-ri/web/test/TestLifecycleImpl_initial_correct
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <title>Hello</title> </HEAD>
-    
-    
-    <body bgcolor="white">
-    <h2>Hi. My name is Duke.  I'm thinking of a number from 0 to 10.
-    Can you guess it?</h2>
-    
-<form id="helloForm" name="helloForm" method="post" action="/test/faces/greeting.jsp;jsessionid=4978ef01d82f915eac9b1f0c49b1" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="helloForm" value="helloForm" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" autocomplete="off" />
-<input id="helloForm:userNo" type="text" name="helloForm:userNo" value="NUMBER" />
-  	 <BR>
-
-	 <input id="helloForm:submit" type="submit" name="helloForm:submit" value="Submit" />
-</form>
-</HTML>  
diff --git a/jsf-ri/web/test/TestRenderKit_correct b/jsf-ri/web/test/TestRenderKit_correct
deleted file mode 100644
index 279e5cb..0000000
--- a/jsf-ri/web/test/TestRenderKit_correct
+++ /dev/null
@@ -1,7 +0,0 @@
-javax.faces.component.UIForm
-javax.faces.component.UIOutput
-javax.faces.component.UICommand
-javax.faces.component.UISelectBoolean
-javax.faces.component.UITextEntry
-javax.faces.component.UISelectOne
-javax.faces.component.UISelectOne
diff --git a/jsf-ri/web/test/TestRenderResponsePhase.jsp b/jsf-ri/web/test/TestRenderResponsePhase.jsp
deleted file mode 100644
index 599f907..0000000
--- a/jsf-ri/web/test/TestRenderResponsePhase.jsp
+++ /dev/null
@@ -1,917 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Basic Components Test Page </TITLE> </HEAD>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-    <BODY>
-        <H3> JSF Basic Components Test Page </H3>
-
-<f:view>
-
-  <f:loadBundle basename="com.sun.faces.TestMessages" var="testMessages" />
-<h:form id="basicForm" title="basicForm" styleClass="formClass"
-      accept="html,wml" acceptcharset="some-charset" target="_self">
-
-  <TABLE BORDER="1">
-
-      <tr>
-         <td>
-                 <h:panelGrid id="logonPanel1" columns="2"
-                    border="1" cellpadding="3" cellspacing="3"
-                     summary="Grid with hardcoded data"
-                     title="Grid with hardcoded data" >
-
-                     <h:panelGroup id="formHeader2">
-                        <h:outputText id="A2" escape="false" value="Logon "/>
-                        <h:outputText id="B2" value="Form"/>
-                     </h:panelGroup>
-
-                   
-                    <h:outputText id="text1" value="Username:"/>
-                   
-                    <h:inputText id="username1" styleClass="inputClass" value="JavaServerFaces" />
-
-                    <h:inputText id="username2" styleClass="inputClass" value="JavaServerFaces" disabled="true" />
-
-                    <h:outputText id="text2" styleClass="outputClass" value="Password:"/>
-
-                    <h:inputSecret styleClass="secretClass" id="password1" />
-
-                    <h:commandButton id="submit1" type="submit"
-                        styleClass="commandClass" 
-                        value="Login" >
-                    </h:commandButton>
-
-                    <h:commandButton id="reset1" type="reset" 
-                        value="Reset">
-                    </h:commandButton>
-
-                </h:panelGrid>
-             </td>
-           </tr>
-
-      <TR>
-
-	<TD>
-
-            <h:commandButton id="pushButton" type="button" style="someStyle"
-                 disabled = "true" image="duke.gif">
-            </h:commandButton>
-	</TD>
-
-      </TR>
-
-
-      <TR>
-
-	<TD>
-
-            <h:commandButton id="imageOnlyButton" type="submit"
-                 image="/duke.gif?title=LOGIN&color=red" rendered="true"> 
-             </h:commandButton>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:commandLink id="link" styleClass="hyperlinkClass">
-                <f:verbatim>link text with localized output</f:verbatim> 
-                <h:outputText value="#{testMessages.euroMessage}" />
-              </h:commandLink>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:commandLink id="linkWithValue1" styleClass="hyperlinkClass"
-                  value="link text" />
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:commandLink id="linkWithValue2" styleClass="hyperlinkClass"
-                  value="link text">
-                  <h:outputText value="with some ~ text" />
-              </h:commandLink>   
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:commandLink id="imageLink" style="someStyle">
-                <h:graphicImage url="duke.gif?title=LOGIN&color=red"/>
-              </h:commandLink>
-
-	</TD>
-
-        <TD> 
-            <h:graphicImage id="graphicImage" style="someStyle" url="/duke.gif" ismap="true" usemap="#map1" /> 
-        </TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-            <h:commandLink id="commandLink" styleClass="hyperlinkClass"><f:verbatim>link text</f:verbatim>
-            </h:commandLink>
-       </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <h:commandLink id="commandParamLink" styleClass="hyperlinkClass">
-              <f:verbatim>link text</f:verbatim>
-              <f:param id="hlParam1" name="name" value="horwat"/>
-              <f:param id="hlParam2" name="value" value="password"/>
-            </h:commandLink>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <h:commandLink id="hrefLink"><f:verbatim escape="false"><img src="duke.gif"></f:verbatim></h:commandLink>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <h:commandLink id="hrefParamLink" target="_top">
-              <h:graphicImage url="duke.gif"/>
-              <f:param id="hlParam3" name="name" value="horwat"/>
-              <f:param id="hlParam4" name="value" value="password"/>
-            </h:commandLink>
-        </TD>
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:outputLink value="test.html" id="outputLink" styleClass="hyperlinkClass" target="_blank"><f:verbatim>output link text</f:verbatim></h:outputLink>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:outputLink value="test.html"id="output_imageLink" style="position: absolute; left: 96px; top: 168px">
-                <h:graphicImage url="duke.gif"/>
-              </h:outputLink>
-
-	</TD>
-
-        <TD> 
-            <h:graphicImage id="output_graphicImage" url="/duke.gif" ismap="true" usemap="#map1" /> 
-        </TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-            <h:outputLink value="test.html" id="output_commandLink" 
-                style="position: absolute; left: 96px; top: 168px" styleClass="hyperlinkClass"><f:verbatim>link text</f:verbatim>
-            </h:outputLink>
-       </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <h:outputLink value="test.html" id="output_commandParamLink" styleClass="hyperlinkClass">
-              <f:verbatim>link text</f:verbatim>
-              <f:param id="hlParam7_1" name="#{null}" value="should_not_be_present"/>
-              <f:param id="hlParam7" name="name" value="horwat"/>
-              <f:param id="hlParam8" name="value" value="password"/>
-              <f:param id="hlParam8_1" name="#{null}" value="should_not_be_present"/>
-              <f:param id="hlParam8_2" name="name_2" value="#{null}"/>
-            </h:outputLink>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <h:outputLink value="test.html" id="output_hrefLink"><f:verbatim escape="false"><img src="duke.gif"></f:verbatim></h:outputLink>
-        </TD>
-      </TR>
-
-      <TR>
-        <TD>
-            <h:outputLink value="test.html" id="output_hrefParamLink">
-              <h:graphicImage url="duke.gif"/>
-              <f:param id="hlParam5" name="name" value="horwat"/>
-              <f:param id="hlParam6" name="value" value="password"/>
-            </h:outputLink>
-        </TD>
-      </TR>
-
-
-
-      <TR>
-
-	<TD>
-              
-             <h:outputText id="outputText" value="Output Text" style="someStyle"/>
-            
-              <h:outputText id="testvisible1" value="This should not be visible"
-                               rendered="false" />
-              <h:graphicImage id="testvisible2" url="/duke.gif" rendered="false"  />
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-            
-            <h:selectBooleanCheckbox  id="checkbox1" rendered="true"
-                   styleClass="selectbooleanClass"/>
-             <h:outputLabel id="labe11" style="position: absolute; left: 96px; top: 168px" for="checkbox1">
-                 <h:outputText id="outputlabel1" value="CheckboxAndLabelWithFor"/>
-              </h:outputLabel>
-	</TD>
-        </TR>
-
-        <TR>
-        <TD>
-             <h:outputLabel id="labe13" style="position: absolute; left: 96px; top: 168px">
-                <h:outputText id="outputlabel3" value="CheckboxAndLabelWithoutFor"/>
-                 <h:selectBooleanCheckbox  id="checkbox3" rendered="true"
-                   styleClass="selectbooleanClass"/>
-              </h:outputLabel>
-	</TD> 
-        </TR>
-        <TR>
-        <TD>
-             <h:outputLabel id="labe14" style="position: absolute; left: 96px; top: 168px">
-                <h:selectBooleanCheckbox  id="checkbox4" rendered="true"
-                   styleClass="selectbooleanClass"/>
-                 <h:outputText id="outputlabel4" value="CheckboxAndLabelWithoutFor"/>
-              </h:outputLabel>
-	</TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-             <h:outputLabel id="labe15" for="checkbox5" style="position: absolute; left: 96px; top: 168px">
-                 <h:outputText id="outputlabel5" value="LabelBeforeForComponent"/>
-              </h:outputLabel>
-              <h:selectBooleanCheckbox  id="checkbox5" rendered="true"
-                   styleClass="selectbooleanClass" />
-	</TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-             <h:outputLabel id="labe16" for="checkbox6" value = "LabelWithValue" />
-           
-              <h:selectBooleanCheckbox  id="checkbox6" rendered="true"
-                   styleClass="selectbooleanClass" />
-	</TD>
-
-      </TR>
-   
-      <TR>
-        <TD>
-             <h:outputLabel id="labe17" for="checkbox7" value="LabelWithValue">
-                <h:outputText id="outputlabel7" value="andsometext"/>
-              </h:outputLabel>
-           
-              <h:selectBooleanCheckbox  id="checkbox7" rendered="true"
-                   styleClass="selectbooleanClass" />
-	</TD>
-
-      </TR>
-
-      <TR>
-        <TD>
-             <h:outputLabel id="labe18" for="checkbox8" escape="true" value="escape<p>this markup</p>">
-                <h:outputText id="outputlabel8" value="andsometext"/>
-              </h:outputLabel>
-           
-              <h:selectBooleanCheckbox  id="checkbox8" rendered="true"
-                   styleClass="selectbooleanClass" />
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	     <h:selectOneListbox styleClass="selectoneClass"
-                     title="Select Quantity" style="someStyle"
-                     tabindex="20" enabledClass="eclass" disabledClass="dclass">
-
-                <f:selectItem  itemDisabled="true" itemValue="0" itemLabel="0"/>
-                <f:selectItem  itemValue="1" itemLabel="1" itemDescription="First Item" />
-                <f:selectItem  itemValue="2" itemLabel="2" />
-                <f:selectItem  itemValue="3" itemLabel="3" />
-                <f:selectItem  itemValue="4" itemLabel="4" />
-                <f:selectItem  itemValue="5" itemLabel="5" />
-                <f:selectItem  itemValue="6" itemLabel="6" />
-                <f:selectItem  itemValue="7" itemLabel="7" />
-                <f:selectItem  itemValue="8" itemLabel="8" />
-                <f:selectItem  itemValue="9" itemLabel="9" />
-
-              </h:selectOneListbox>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>
-
-             <h:selectOneMenu styleClass="selectoneClass" disabled="true"
-                     title="Select Quantity" style="someStyle"
-                     tabindex="20" enabledClass="eclass" disabledClass="dclass">
-
-                <f:selectItem  itemDisabled="true" itemValue="0" itemLabel="0"/>
-                <f:selectItem  itemValue="&1&" itemLabel="1" itemDescription="First Item" />
-                <f:selectItem  itemValue="2" itemLabel="2" />
-                <f:selectItem  itemValue="3" itemLabel="3" itemDisabled="true"/>
-                <f:selectItem  itemValue="4" itemLabel="4" />
-                <f:selectItem  itemValue="5" itemLabel="5" />
-                <f:selectItem  itemValue="6" itemLabel="6" />
-                <f:selectItem  itemValue="7" itemLabel="7" />
-                <f:selectItem  itemValue="8" itemLabel="8" />
-                <f:selectItem  itemValue="9" itemLabel="9" />
-
-              </h:selectOneMenu>
-
-        </TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	    <h:selectOneRadio id="shipType" layout="LINE_DIRECTION" 
-                tabindex="3" disabledClass="disabledClass" 
-                enabledClass="enabledClass" accesskey="A" 
-                styleClass = "someStyleClass" style="someStyle" disabled="true">
-
-                <f:selectItem itemValue="nextDay&" itemLabel="Next Day" itemDisabled="true"/>
-                <f:selectItem itemValue="nextWeek" itemLabel="<Next Week>" />
-                <f:selectItem itemValue="nextMonth" itemLabel="<Next Month>" escape="false"/>
-                 
-              </h:selectOneRadio>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-            <h:selectOneRadio id="verticalRadio" disabled="true"
-                                            layout="pageDirection" border="1" >
-
-                <f:selectItem itemValue="nextDay" itemLabel="Next Day"
-                                   itemDisabled="true" />
-                <f:selectItem itemValue="nextWeek" itemLabel="Next Week"  
-                        itemDisabled="false"/>
-                <f:selectItem itemValue="nextMonth" itemLabel="Next Month" />
-
-           </h:selectOneRadio>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>Float: 
-        </TD>
-
-	<TD><h:inputText value="3.1415" style="someStyle">
-                <f:converter converterId="javax.faces.Float"/>
-            </h:inputText>
-	</TD>
-
-      </TR>
-
-
-
-      <TR>
-
-        <TD>Date: 
-        </TD>
-
-	<TD><h:inputText value="July 10, 1996"
-                              styleClass="inputClass">
-                <f:convertDateTime dateStyle="long"/>
-            </h:inputText>
-	</TD>
-
-      </TR>
-
-
-      <TR>
-
-        <TD>Disabled Date: 
-        </TD>
-
-	<TD><h:inputText id="date2" value="July 11, 1996"
-                         readonly="true"
-                        size="3" maxlength="20" tabindex="1" accesskey="D">
-                <f:convertDateTime dateStyle="long"/>
-            </h:inputText>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>DateTime: 
-        </TD>
-
-	<TD><h:inputText id="date3" 
-                          value="Wed, Jul 10, 1996 AD at 12:31:31 PM">
-                <f:convertDateTime pattern="EEE, MMM d, yyyy G 'at' hh:mm:ss a"/>
-            </h:inputText>
-	</TD>
-
-      </TR>
-
-
-      <tr>
-          <td>
-            <h:inputText id="testPattern" 
-                        value="9999.98765" size="3" maxlength="20" 
-                        styleClass="inputClass" 
-                        tabindex="2" accesskey="D">
-               <f:convertNumber pattern="####"/>
-            </h:inputText>
-              </td>
-
-      </tr>
-
-      <tr>
-          <td> <h:outputText styleClass="outputClass" id="percentLabel" value="OUTPUT-PERCENT" /> </td>
-              <td>
-                   <h:outputText id="testPercent" value="45%">
-                       <f:convertNumber type="number" pattern="#%"/>
-                   </h:outputText>
-              </td>
-      </tr>
-
-      <TR>
-
-        <TD>OutputDate: 
-        </TD>
-
-	<TD><h:outputText id="date4" value="July 10, 1996"
-                              styleClass="outputClass" >
-                <f:convertDateTime dateStyle="long"/>
-            </h:outputText>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>OutputDateTime: 
-        </TD>
-
-	<TD><h:outputText id="date5" 
-                          value="Wed, Jul 10, 1996 AD at 12:31:31 PM">
-                <f:convertDateTime pattern="EEE, MMM d, yyyy G 'at' hh:mm:ss a"/>
-            </h:outputText>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>InputTime: 
-        </TD>
-
-	<TD><h:inputText id="date6" 
-                          value="12:31:31 PM">
-                <f:convertDateTime timeStyle="medium"/>
-            </h:inputText>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-        <TD>OutputTime: 
-        </TD>
-
-	<TD><h:outputText id="date7" 
-                          value="12:31:31 PM">
-                <f:convertDateTime timeStyle="medium"/>
-            </h:outputText>
-	</TD>
-
-      </TR>
-
-           <tr>
-
-             <td>
-
-               <h:inputText id="inputDate1" 
-                                 value="Jan 12, 1952" 
-                                 readonly="true"
-                                 size="10" maxlength="20"
-                                 alt="input_date medium readonly"
-                                 accesskey="D" 
-                               title="input_date medium readonly">
-                   <f:convertDateTime dateStyle="medium"/>
-                </h:inputText>
-
-
-             </td>
-
-            </tr>
-
-           <tr>
-
-             <td>
-
-               <h:inputText id="inputDate2" 
-                                 value="Jan 12, 1952" 
-                                 alt="input_date medium"
-                                  title="input_date medium">
-                   <f:convertDateTime dateStyle="medium"/>
-                </h:inputText>
-
-             </td>
-
-            </tr>
-
-           <tr>
-
-             <td>
-
-               <h:inputText id="inputDate3" 
-                                 value="01/12/1952" 
-                                 alt="input_date short"
-                                  title="input_date short">
-                   
-                   <f:convertDateTime dateStyle="short"/>
-                </h:inputText>
-
-             </td>
-
-            </tr>
-
-           <tr>
-
-             <td>
-
-               <h:inputText id="inputDate4"  
-                                 value="January 12, 1952" 
-                                 size="20" maxlength="40"
-                                 alt="input_date long"
-                                 accesskey="d"
-                               title="input_date long">
-                   <f:convertDateTime dateStyle="long"/>
-                </h:inputText>
-
-
-             </td>
-
-            </tr>
-
-<tr>
-					<TD>Multi-select menu:</TD>
-					<TD><h:selectManyMenu id="ManyApples" styleClass="selectmanyClass" style="someStyle" enabledClass="eclass" disabledClass="dclass">
-						<f:selectItem itemValue="0" itemLabel="zero" />
-						<f:selectItem itemValue="1" itemLabel="one" />
-						<f:selectItem itemValue="2" itemLabel="two" />
-						<f:selectItem itemValue="3" itemLabel="three" />
-						<f:selectItem itemValue="4" itemLabel="four" itemDisabled="true"/>
-						<f:selectItem itemValue="5" itemLabel="five" />
-						<f:selectItem itemValue="6" itemLabel="six" />
-						<f:selectItem itemValue="7" itemLabel="seven" />
-						<f:selectItem itemValue="8" itemLabel="eight" />
-						<f:selectItem itemValue="9" itemLabel="nine" />
-					</h:selectManyMenu></TD>
-
-</tr>
-<td><h:inputText id="iescape" value="& a &&"/></td>
-<tr>
-					<TD>Multi-select listbox:</TD>
-					<TD><h:selectManyListbox style="someStyle" enabledClass="eclass"
-                                              disabledClass="dclass" disabled="true">
-						<f:selectItem itemValue="0" itemLabel="zero" />
-						<f:selectItem itemValue="1" itemLabel="one" />
-						<f:selectItem itemValue="2" itemLabel="two" />
-						<f:selectItem itemValue="3" itemLabel="three" itemDisabled="true"/>
-						<f:selectItem itemValue="4" itemLabel="four" />
-						<f:selectItem itemValue="5" itemLabel="five" />
-						<f:selectItem itemValue="6" itemLabel="six" />
-						<f:selectItem itemValue="7" itemLabel="seven" />
-						<f:selectItem itemValue="8" itemLabel="eight" />
-						<f:selectItem itemValue="9" itemLabel="nine" />
-					</h:selectManyListbox></TD>
-</tr>
-
-<tr>
-					<TD><h:selectManyCheckbox id="ManyApples3" border="1" 
-                                                tabindex="3" disabledClass="disabledClass" style="someStyle"
-                                                styleClass="styleClass" enabledClass="enabledClass" accesskey="A">>
-						<f:selectItem itemValue="0" itemLabel="zero" itemDisabled="true" />
-						<f:selectItem itemValue="1" itemLabel="one" />
-						<f:selectItem itemValue="2" itemLabel="two" />
-						<f:selectItem itemValue="3" itemLabel="three" itemDisabled="false"/>
-						<f:selectItem itemValue="4" itemLabel="four" />
-						<f:selectItem itemValue="5" itemLabel="five" />
-						<f:selectItem itemValue="6" itemLabel="six" />
-						<f:selectItem itemValue="7" itemLabel="seven" />
-						<f:selectItem itemValue="8" itemLabel="eight" />
-						<f:selectItem itemValue="9" itemLabel="nine" />
-					</h:selectManyCheckbox></TD>
-</tr>
-
-<tr>
-                                        <TD><h:selectManyCheckbox id="checklistmodel"
-                                               value="#{LoginBean.currentOptions}"
-                                               disabledClass="disabedClass"
-                                               enabledClass="enabledClass"
-                                               disabled="true">
-						<f:selectItem itemValue="1" itemLabel="<one>" />
-						<f:selectItem itemValue="2" itemLabel="<two>" escape="false"/>
-						<f:selectItem itemValue="3" itemLabel="three"/>
-                                            </h:selectManyCheckbox></TD>
-</tr>
-
-<tr>
-<td>
-<h:panelGroup style="color:red" styleClass="walleye">
-  <f:verbatim>style this text like a red walleye</f:verbatim>
-</h:panelGroup>
-</td>
-</tr>
-
-<tr>
-<td>
-<h:panelGroup layout="block" style="color:red" styleClass="walleye">
-  <f:verbatim>style this text like a red walleye</f:verbatim>
-</h:panelGroup>
-</td>
-</tr>
-
-<h:inputHidden value="48%" >
-    <f:convertNumber type="number" pattern="#%"/>
-</h:inputHidden>
-
-<tr><td>
-
-<f:verbatim escape="true">1. You should see the <i>angle brackets</i> on this
-text</f:verbatim>
-
-</td>
-</tr>
-
-<tr><td>
-
-<f:verbatim>2. You should not see the <i>angle brackets</i> on this
-text</f:verbatim>
-
-</td>
-</tr>
-
-<tr><td>
-
-<f:verbatim escape="false">3. You should not see the <i>angle
-brackets</i> on this text</f:verbatim>
-
-</td>
-</tr>
-
-<tr><td>
-
-<f:verbatim escape="#{SimpleBean.trueValue}">4. You should see the <i>angle
-brackets</i> on this text</f:verbatim>
-
-</td>
-</tr>
-<tr><td>
-
-<f:verbatim escape="#{SimpleBean.falseValue}">5. You should not see the
-<i>angle brackets</i> on this text</f:verbatim>
-
-</td>
-</tr>
-
-<tr><td>
-
-<h:outputText escape="true" value="6. You should see the <i>angle
-brackets</i> on this text"></h:outputText>
-
-</td>
-</tr>
-
-<tr><td>
-
-<h:outputText id="value7" value="7. & You should see the <i>angle brackets</i> on
-this text"></h:outputText>
-
-</td>
-</tr>
-
-<tr><td>
-
-<h:outputText escape="false" value="8. You should not see the <i>angle
-brackets</i> on this text"></h:outputText>
-
-</td>
-</tr>
-
-<tr><td>
-
-<h:outputText escape="#{SimpleBean.trueValue}" value="9. You should see
-the <i>angle brackets</i> on this text"></h:outputText>
-
-</td>
-</tr>
-
-<tr><td>
-
-<h:outputText escape="#{SimpleBean.falseValue}" value="10. You should not
-see the <i>angle brackets</i> on this text"></h:outputText>
-
-</td>
-</tr>
-
-<tr><td>
-
-<h:panelGrid>
-<f:subview id="subview1" rendered="false">
-   <h:outputText value="This should not be rendered" />
-</f:subview>
-</h:panelGrid>
-
-</td></tr>
-
-<tr><td>
-
-<h:panelGrid>
-<h:panelGroup rendered="false">
-   <h:outputText value="This should not be rendered" />
-</h:panelGroup>
-</h:panelGrid>
-
-</td></tr>
-
-<tr><td>
-
-<h:dataTable>
-<f:subview id="subview2" rendered="false">
-   <h:outputText value="This should not be rendered" />
-</f:subview>
-</h:dataTable>
-
-
-<h:outputLink value="test.html" rendered="false">
-    <h:graphicImage url="duke.gif"/>
-</h:outputLink>
-
-<h:commandLink rendered="false">
-      <h:outputText value="This should not be rendered" />
-</h:commandLink>
-
-<h:outputText title="output text with title" value="should be spanned" />
-
-<h:outputFormat id="userMsg" value="Param 0: {0}" >
-   <f:param value="my param"/>
-</h:outputFormat>
-
-</td></tr>
-
-<tr><td>
-
-<h:dataTable headerClass="table-header" footerClass="table-footer"
-   rows="1">
-   <f:facet             name="header">
-     <h:outputText    value="Overall Table Header"/>
-   </f:facet>
-                                                                               
-   <f:facet             name="footer">
-     <h:outputText    value="Overall Table Footer"/>
-   </f:facet>
-
-   <h:column headerClass="#{SimpleBean.headerClass}" footerClass="#{SimpleBean.footerClass}">
-      <f:facet           name="header">
-        <h:outputText  value="Account Id"/>
-      </f:facet>
-      <f:facet           name="footer">
-        <h:outputText  value="A.I. Footer"/>
-      </f:facet>
-   </h:column>
-
-   <h:column>
-      <f:facet           name="header">
-        <h:outputText  value="Customer Name"/>
-      </f:facet>
-      <f:facet           name="footer">
-        <h:outputText  value="C.N. Footer"/>
-      </f:facet>
-   </h:column>
-</h:dataTable>
-
-</td></tr>
-
-</table>
-
-</h:form>
-
-<h:form id="form2">
-  <h:commandButton value="form2 button1"/> <p />
-  <h:commandButton value="form2 button2"/> <p />
-</h:form>
-
-<h:form id="form3">
-  <h:commandButton value="form3 button1"/> <p />
-  <h:commandLink value="form3 link1"/> <p />
-</h:form>
-
-<h:form id="form4">
-  <h:outputLink value="test.html">
-      Link Enabled
-  </h:outputLink> 
-  <h:outputLink disabled="true">
-      Link Disabled
-  </h:outputLink> 
-  <h:outputLink disabled="true" styleClass="myClass">
-      Link Disabled With Class
-  </h:outputLink> 
-  <h:commandLink disabled="true">
-      Command Link Disabled
-  </h:commandLink> 
-  <h:commandLink disabled="true" styleClass="myClass">
-      Command Link Disabled with Class
-  </h:commandLink> 
-</h:form>
-
-</f:view>
-
-    </BODY>
-</HTML>
diff --git a/jsf-ri/web/test/TestRendererAttributes_correct b/jsf-ri/web/test/TestRendererAttributes_correct
deleted file mode 100644
index 507c21a..0000000
--- a/jsf-ri/web/test/TestRendererAttributes_correct
+++ /dev/null
@@ -1,6395 +0,0 @@
-Hyperlink
-Button
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	type
-
-		Button Type, could be submit or reset or button.
-
-		Button Type
-
-		type
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	commandClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		commandClass
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Form
-	method
-
-		HTTP method to submit form data set. Possible
-                             values get|post
-
-		Method
-
-		method
-
-		class java.lang.String
-
-	accept
-
-		Comma separated list of content types that a server
-                processing this form will handle correctly.
-
-		Accept
-
-		accept
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onreset
-
-		Execute this when the form is reset
-
-		On Reset
-
-		onreset
-
-		class java.lang.String
-
-	enctype
-
-		Content type used to submit form to the server
-
-		Enctype
-
-		enctype
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onsubmit
-
-		Execute this when the form is submitted.
-
-		On Submit
-
-		onsubmit
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	formClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		formClass
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	acceptcharset
-
-		Space and/or Comma separated list of character 
-                encodings for input data that must be accepted by the server
-                processing this form.
-
-		Accept Character Encoding
-
-		acceptcharset
-
-		class java.lang.String
-
-	action
-
-		Specify a form processing agent.
-
-		Action
-
-		action
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	target
-
-		Target Frame
-
-		Target
-
-		target
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Image
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	usemap
-
-		Image map associated with this element.
-
-		usemap
-
-		usemap
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	bundle
-
-		The name of the resource bundle in which to look up keys.
-
-		Resource Bundle Name
-
-		bundle
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	longdesc
-
-		link to long description (complements alt).
-
-		Long Description
-
-		longdesc
-
-		class java.lang.String
-
-	height
-
-		The height dimension for this component.
-
-		Image Height Override
-
-		height
-
-		class java.lang.Integer
-
-	width
-
-		The width dimension for this component.
-
-		Image Width Override
-
-		width
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	ismap
-
-		True if it is a server side Image map
-
-		Ismap
-
-		ismap
-
-		class java.lang.Boolean
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	key
-
-		The value of this attribute is used as the key to lookup a reference in the ResourceBundle.
-
-		Localization Key
-
-		key
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Hint to the user agent about the language for this component.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Secret
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Date
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	timezone
-
-		The timezone used to format and parse this date.  See java.text.DateFormat.  Default is null.
-
-		Timezone
-
-		timezone
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	dateStyle
-
-		The style to be used to format and parse this date.  See java.text.DateFormat.  Default is MEDIUM
-
-		Date Style
-
-		dateStyle
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-DateTime
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	formatPattern
-
-		The format pattern used to format and parse this date.  See java.text.SimpleDateFormat.
-
-		Format Pattern
-
-		formatPattern
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	timezone
-
-		The timezone used to format and parse this date.  See java.text.DateFormat.  Default is null.
-
-		Timezone
-
-		timezone
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	timeStlye
-
-		The style to be used to format and parse this datetime.  See java.text.DateFormat.  Default is MEDIUM
-
-		Time Style
-
-		timeStlye
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	dateStyle
-
-		The style to be used to format and parse this datetime.  See java.text.DateFormat.  Default is MEDIUM
-
-		Date Style
-
-		dateStyle
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Time
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	timeStyle
-
-		The style to be used to format and parse this dateTime.  See java.text.DateFormat.  Default is MEDIUM
-
-		Time Style
-
-		timeStyle
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	timezone
-
-		The timezone used to format and parse this date.  See java.text.DateFormat.  Default is null.
-
-		Timezone
-
-		timezone
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Textarea
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	cols
-
-		The number of columns displayed in the textarea
-
-		Columns
-
-		cols
-
-		class java.lang.Integer
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Hidden
-Text
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Number
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	formatPattern
-
-		The format pattern used to format and parse this number.  See java.text.DecimalFormat.
-
-		Format Pattern
-
-		formatPattern
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	numberStyle
-
-		The style to be used to format and parse this number.  See java.text.NumberFormat.  Default is NUMBER
-
-		Format Style
-
-		numberStyle
-
-		class java.lang.String
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Message
-	bundle
-
-		The name of the resource bundle in which to look up keys.
-
-		Resource Bundle Name
-
-		bundle
-
-		class java.lang.String
-
-	key
-
-		The value of this attribute is used as the key to lookup a reference in the ResourceBundle.
-
-		Localization Key
-
-		key
-
-		class java.lang.String
-
-Date
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	timezone
-
-		The timezone used to format and parse this date.  See java.text.DateFormat.  Default is null.
-
-		Timezone
-
-		timezone
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	dateStyle
-
-		The style to be used to format and parse this date.  See java.text.DateFormat.  Default is MEDIUM
-
-		Date Style
-
-		dateStyle
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-DateTime
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	formatPattern
-
-		The format pattern used to format and parse this date.  See java.text.SimpleDateFormat.
-
-		Format Pattern
-
-		formatPattern
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	timezone
-
-		The timezone used to format and parse this date.  See java.text.DateFormat.  Default is null.
-
-		Timezone
-
-		timezone
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	timeStlye
-
-		The style to be used to format and parse this datetime.  See java.text.DateFormat.  Default is MEDIUM
-
-		Time Style
-
-		timeStlye
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	dateStyle
-
-		The style to be used to format and parse this datetime.  See java.text.DateFormat.  Default is MEDIUM
-
-		Date Style
-
-		dateStyle
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Time
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	timeStyle
-
-		The style to be used to format and parse this dateTime.  See java.text.DateFormat.  Default is MEDIUM
-
-		Time Style
-
-		timeStyle
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	timezone
-
-		The timezone used to format and parse this date.  See java.text.DateFormat.  Default is null.
-
-		Timezone
-
-		timezone
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Label
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	for
-
-		The componentId to which this label
-                applies.  Either an absolute path, beginning with "/",
-                or a relative path, possibly containing "../.."
-                chars.
-
-		for
-
-		for
-
-		class java.lang.String
-
-Text
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Errors
-	clientId
-
-		An expression that identifies a component
-
-		Client Side Identifier
-
-		clientId
-
-		class java.lang.String
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	color
-
-		
-
-		Color
-
-		color
-
-		class java.lang.String
-
-Number
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	formatPattern
-
-		The format pattern used to format and parse this number.  See java.text.DecimalFormat.
-
-		Format Pattern
-
-		formatPattern
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of columns in this DateRenderer.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	maxlength
-
-		The maximum number of characters in this DateRenderer.
-
-		Max Length
-
-		maxlength
-
-		class java.lang.Integer
-
-	numberStyle
-
-		The style to be used to format and parse this number.  See java.text.NumberFormat.  Default is NUMBER
-
-		Format Style
-
-		numberStyle
-
-		class java.lang.String
-
-	outputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		outputClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Checkbox
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered
-                as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	checked
-
-		If true, this component should be rendered
-                as checked.
-
-		Checked
-
-		checked
-
-		class java.lang.Boolean
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	readonly
-
-		If true, this component should be rendered
-                as read only.
-
-		Read Only
-
-		readonly
-
-		class java.lang.Boolean
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	alt
-
-		The alt text for this component.
-
-		Alt Text
-
-		alt
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-List
-	bgcolor
-
-		Background color for the table.
-
-		Background color
-
-		bgcolor
-
-		class java.lang.String
-
-	cellspacing
-
-		Specifies how much space should be left side of the
-                table and left-hand side of the leftmost column, similarly for
-                right, top and bottom of the table.
-
-		Cell Spacing
-
-		cellspacing
-
-		class java.lang.Integer
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	headerClass
-
-		If present, this attribute indicates that the first child component
-                should be treated as a table header, rendered with the specified
-                CSS style, instead of being rendered as a normal grid cell.
-
-		Header Class
-
-		headerClass
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	rules
-
-		Specifies which rules will appear between cells 
-                within a table.
-
-		Rules
-
-		rules
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	frame
-
-		Specifes which sides of the frame that surrounds the table
-                will be visible.
-
-		Frame
-
-		frame
-
-		class java.lang.String
-
-	columnClasses
-
-		Comma-delimited list of the class names of the CSS styles to be
-                used for each column.  If the number of class names on this list
-                is less than the value specified for "columns", the pattern will
-                be repeated for the remaining columns of the current row; however,
-                the first column in each row will always use the first style listed.
-
-                Note that these styles are applied only to content rows, not to the
-                header or footer rows (if any).
-
-		Column Classes
-
-		columnClasses
-
-		class java.lang.String
-
-	footerClass
-
-		If present, this attribute indicates that the last child component
-                should be treated as a table footer, rendered with the specified
-                CSS style, instead of being rendered as a normal grid cell.
-
-		Footer Class
-
-		footerClass
-
-		class java.lang.String
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	width
-
-		Desired width of the entire table.
-
-		Width
-
-		width
-
-		class java.lang.Integer
-
-	border
-
-		Width of the frame around the table.
-
-		Border
-
-		border
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	cellpadding
-
-		Specifies the amount of space between the border of
-                the cell and its contents.
-
-		Cell Padding
-
-		cellpadding
-
-		class java.lang.Integer
-
-	rowClasses
-
-		Comma-delimited list of the class names of the CSS styles to be
-                used for each row.  These styles should specialize the style
-                specified by panelClass (if any), because CSS cascading is
-                performed.  If the number of class names on this list
-                is less than the actual number of rows over which the list is
-                iterating, the pattern will be repeated as many times as needed.
-
-                Note that these styles are applied only to content rows, not to the
-                header or footer rows (if any).
-
-		Row Classes
-
-		rowClasses
-
-		class java.lang.String
-
-	panelClass
-
-		Class name of the CSS style to be used for the entire panel.
-
-		Panel Class
-
-		panelClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Data
-	var
-
-		Name of a request scope attribute that should be used to expose
-                the current element of the data on each iteration through the
-                implicit loop being performed.  This name will typically be used
-                in model reference expressions on output components for the
-                individual properties.
-
-		Var
-
-		var
-
-		class java.lang.String
-
-Grid
-	bgcolor
-
-		Background color for the table.
-
-		Background color
-
-		bgcolor
-
-		class java.lang.String
-
-	cellspacing
-
-		Specifies how much space should be left side of the
-                table and left-hand side of the leftmost column, similarly for
-                right, top and bottom of the table.
-
-		Cell Spacing
-
-		cellspacing
-
-		class java.lang.Integer
-
-	columns
-
-		Number of columns per row to be rendered.  If not specified,
-                the default value is 2.
-
-		Columns
-
-		columns
-
-		class java.lang.Integer
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	headerClass
-
-		If present, this attribute indicates that the first child component
-                should be treated as a table header, rendered with the specified
-                CSS style, instead of being rendered as a normal grid cell.
-
-		Header Class
-
-		headerClass
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	rules
-
-		Specifies which rules will appear between cells 
-                within a table.
-
-		Rules
-
-		rules
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	frame
-
-		Specifes which sides of the frame that surrounds the table
-                will be visible.
-
-		Frame
-
-		frame
-
-		class java.lang.String
-
-	columnClasses
-
-		Comma-delimited list of the class names of the CSS styles to be
-                used for each column.  If the number of class names on this list
-                is less than the value specified for "columns", the pattern will
-                be repeated for the remaining columns of the current row; however,
-                the first column in each row will always use the first style listed.
-
-                Note that these styles are applied only to content rows, not to the
-                header or footer rows (if any).
-
-		Column Classes
-
-		columnClasses
-
-		class java.lang.String
-
-	footerClass
-
-		If present, this attribute indicates that the last child component
-                should be treated as a table footer, rendered with the specified
-                CSS style, instead of being rendered as a normal grid cell.
-
-		Footer Class
-
-		footerClass
-
-		class java.lang.String
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	width
-
-		Desired width of the entire table.
-
-		Width
-
-		width
-
-		class java.lang.Integer
-
-	border
-
-		Width of the frame around the table.
-
-		Border
-
-		border
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	cellpadding
-
-		Specifies the amount of space between the border of
-                the cell and its contents.
-
-		Cell Padding
-
-		cellpadding
-
-		class java.lang.Integer
-
-	rowClasses
-
-		Comma-delimited list of the class names of the CSS styles to be
-                used for each row.  These styles should specialize the style
-                specified by panelClass (if any), because CSS cascading is
-                performed.  If the number of class names on this list
-                is less than the actual number of rows over which the list is
-                iterating, the pattern will be repeated as many times as needed.
-
-                Note that these styles are applied only to content rows, not to the
-                header or footer rows (if any).
-
-		Row Classes
-
-		rowClasses
-
-		class java.lang.String
-
-	panelClass
-
-		Class name of the CSS style to be used for the entire panel.
-
-		Panel Class
-
-		panelClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-Group
-SelectManyCheckbox
-	modelreference
-
-		Reference to the model
-
-		Model Reference
-
-		modelreference
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		Number of rows displayed
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	dir
-
-		Direction of the text - LTR or RTL
-
-		Directionality
-
-		dir
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style-sheet information
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	selectmanyClass
-
-		Class name for this element
-
-		SelectMany Class
-
-		selectmanyClass
-
-		class java.lang.String
-
-	tabindex
-
-		The sequence of this component when tabbing through the page
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.String
-
-	labelAlign
-
-		List layout - PAGE_START|LINE_END
-
-		Label Alignment
-
-		labelAlign
-
-		class java.lang.String
-
-	lang
-
-		Component language
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-	name
-
-		Control name
-
-		Name
-
-		name
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Displayed text hint for this component
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-Listbox
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	selectoneClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		selectoneClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	selectmanyClass
-
-		Class name for this element
-
-		SelectMany Class
-
-		selectmanyClass
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-Menu
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of visible elements in this list.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	border
-
-		Width of frame around table
-
-		Border
-
-		border
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	layout
-
-		Possible values - VERTICAL or HORIZONTAL
-
-		Layout
-
-		layout
-
-		class java.lang.String
-
-	selectoneClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		selectoneClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	selectmanyClass
-
-		Class name for this element
-
-		SelectMany Class
-
-		selectmanyClass
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-SelectManyCheckbox
-	modelreference
-
-		Reference to the model
-
-		Model Reference
-
-		modelreference
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.String
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		Number of rows displayed
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	dir
-
-		Direction of the text - LTR or RTL
-
-		Directionality
-
-		dir
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style-sheet information
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	selectmanyClass
-
-		Class name for this element
-
-		SelectMany Class
-
-		selectmanyClass
-
-		class java.lang.String
-
-	tabindex
-
-		The sequence of this component when tabbing through the page
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.String
-
-	labelAlign
-
-		List layout - PAGE_START|LINE_END
-
-		Label Alignment
-
-		labelAlign
-
-		class java.lang.String
-
-	lang
-
-		Component language
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-	name
-
-		Control name
-
-		Name
-
-		name
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Displayed text hint for this component
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-Listbox
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	selectoneClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		selectoneClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	selectmanyClass
-
-		Class name for this element
-
-		SelectMany Class
-
-		selectmanyClass
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-Menu
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		The number of visible elements in this list.
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	border
-
-		Width of frame around table
-
-		Border
-
-		border
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	layout
-
-		Possible values - VERTICAL or HORIZONTAL
-
-		Layout
-
-		layout
-
-		class java.lang.String
-
-	selectoneClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		selectoneClass
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	selectmanyClass
-
-		Class name for this element
-
-		SelectMany Class
-
-		selectmanyClass
-
-		class java.lang.String
-
-	lang
-
-		Base language of element's attribute values and content.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-Radio
-	accesskey
-
-		Accessibility key character
-
-		Access Key
-
-		accesskey
-
-		class java.lang.String
-
-	onmousemove
-
-		Mouse was moved over this element.
-
-		On Mouse Move
-
-		onmousemove
-
-		class java.lang.String
-
-	disabled
-
-		If true, this component should be rendered as disabled.
-
-		Disabled
-
-		disabled
-
-		class java.lang.Boolean
-
-	onmouseout
-
-		Mouse was moved away from this element.
-
-		On Mouse Out
-
-		onmouseout
-
-		class java.lang.String
-
-	onblur
-
-		The element lost the focus.
-
-		On Blur
-
-		onblur
-
-		class java.lang.String
-
-	onkeypress
-
-		Key was pressed and released over this element
-
-		On Key Press
-
-		onkeypress
-
-		class java.lang.String
-
-	onmouseover
-
-		Mouse was moved into this element.
-
-		On Mouse Over
-
-		onmouseover
-
-		class java.lang.String
-
-	ondblclick
-
-		The element was double clicked.
-
-		On Double Click
-
-		ondblclick
-
-		class java.lang.String
-
-	onkeydown
-
-		Key was pressed down over this element.
-
-		On Key Down
-
-		onkeydown
-
-		class java.lang.String
-
-	onselect
-
-		Execute this when the component is selected.
-
-		On Select
-
-		onselect
-
-		class java.lang.String
-
-	onmouseup
-
-		Mouse was released over this element.
-
-		On Mouse Up
-
-		onmouseup
-
-		class java.lang.String
-
-	size
-
-		Initial width of the control
-
-		Size
-
-		size
-
-		class java.lang.Integer
-
-	dir
-
-		Text Direction. Possible values LTR|RTL
-
-		Direction
-
-		dir
-
-		class java.lang.String
-
-	border
-
-		Width of frame around table
-
-		Border
-
-		border
-
-		class java.lang.Integer
-
-	onkeyup
-
-		Key was released over this element.
-
-		On Key Up
-
-		onkeyup
-
-		class java.lang.String
-
-	inputClass
-
-		CSS Class Name for this element
-
-		CSS Class Name
-
-		inputClass
-
-		class java.lang.String
-
-	style
-
-		Style information for this element.
-
-		Style
-
-		style
-
-		class java.lang.String
-
-	layout
-
-		Possible values - PAGE_DIRECTION or LINE_DIRECTION
-
-		Layout
-
-		layout
-
-		class java.lang.String
-
-	onfocus
-
-		The element got the focus.
-
-		On Focus
-
-		onfocus
-
-		class java.lang.String
-
-	tabindex
-
-		Position of this element in the tabbing order.
-
-		Tab Index
-
-		tabindex
-
-		class java.lang.Integer
-
-	onclick
-
-		The element was clicked.
-
-		On Click
-
-		onclick
-
-		class java.lang.String
-
-	title
-
-		Tool Tip for this element
-
-		Title
-
-		title
-
-		class java.lang.String
-
-	onmousedown
-
-		Mouse was pressed over this element.
-
-		On Mouse Down
-
-		onmousedown
-
-		class java.lang.String
-
-	lang
-
-		Hint to the user agent about the language for this component.
-
-		Language
-
-		lang
-
-		class java.lang.String
-
diff --git a/jsf-ri/web/test/TestRenderersFromJsp.jsp b/jsf-ri/web/test/TestRenderersFromJsp.jsp
deleted file mode 100644
index b5d745c..0000000
--- a/jsf-ri/web/test/TestRenderersFromJsp.jsp
+++ /dev/null
@@ -1,79 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Basic Components Test Page </TITLE> </HEAD>
-
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-    <BODY>
-        <H3> JSF Basic Components Test Page </H3>
-
-
-       <f:view>
-        <h:form id="/basicForm">
-
-            <h:textentry_input id="userName" />
-
-            <h:commandButton id="login" />
-
-	    <!-- <h:commandLink id="/basicForm/login" /> -->
-
-            <h:outputText id="userLabel" />
-
-            <h:selectManyCheckbox id="validUser" />
-
-            <h:selectOneListbox id="appleQuantity" />
-
-            <h:selectOneRadio id="shipType" />
-
-            <h:textentry_secret id="password" />
-
-            <h:textentry_textarea id="address" />
-
-
-        </h:form>
-       </f:view>
-
-    </BODY>
-</HTML>
diff --git a/jsf-ri/web/test/TestRenderersFromJsp_correct b/jsf-ri/web/test/TestRenderersFromJsp_correct
deleted file mode 100644
index 5d89980..0000000
--- a/jsf-ri/web/test/TestRenderersFromJsp_correct
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Basic Components Test Page </TITLE> </HEAD>
-    
-    <BODY>
-        <H3> JSF Basic Components Test Page </H3>
-
-        <FORM METHOD="post" ACTION="/test/faces;jsessionid=D31568262822D1F579F1B4D228176342?action=form&name=basicForm&tree=/TestRenderersFromJsp.xul">
-
-            <INPUT TYPE="text" NAME="/basicForm/userName" VALUE="default">
-
-            <INPUT TYPE="SUBMIT" NAME="loginButton" VALUE="Login">
-
-	    <!-- <a href="/test/faces;jsessionid=D31568262822D1F579F1B4D228176342?action=command&name=loginButton&tree=/TestRenderersFromJsp.xul">loginButton</a> -->
-
-            UserName
-
-            <INPUT TYPE="CHECKBOX"  NAME="/basicForm/validUser"> Checker
-
-            <SELECT NAME="/basicForm/appleQuantity"><OPTION VALUE="0">0.00</OPTION><OPTION VALUE="1">1.00</OPTION><OPTION VALUE="2">2.00</OPTION><OPTION VALUE="3">3.00</OPTION><OPTION VALUE="4" selected="selected">4.00</OPTION><OPTION VALUE="5">5.00</OPTION><OPTION VALUE="6">6.00</OPTION><OPTION VALUE="7">7.00</OPTION><OPTION VALUE="8">8.00</OPTION><OPTION VALUE="9">9.00</OPTION></SELECT>
-
-            <INPUT TYPE="RADIO" NAME="/basicForm/shipType" VALUE="nextDay"> Next Day
-<INPUT TYPE="RADIO" CHECKED NAME="/basicForm/shipType" VALUE="nextWeek"> Next Week
-<INPUT TYPE="RADIO" NAME="/basicForm/shipType" VALUE="nextMonth"> Next Month
-
-
-            <INPUT TYPE="PASSWORD" NAME="/basicForm/password" VALUE="">
-
-            <TEXTAREA  NAME="/basicForm/address"></TEXTAREA>
-
-        </FORM>
-
-    </BODY>
-</HTML>
diff --git a/jsf-ri/web/test/TestSaveState.jsp b/jsf-ri/web/test/TestSaveState.jsp
deleted file mode 100644
index e20dd56..0000000
--- a/jsf-ri/web/test/TestSaveState.jsp
+++ /dev/null
@@ -1,119 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Basic Components Test Page </TITLE> </HEAD>
-
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-    <BODY>
-        <H3> JSF Basic Components Test Page </H3>
-
-<f:view>
-<h:form id="basicForm">
-
-  <TABLE BORDER="1">
-
-      <TR>
-      <td>
-                    <h:inputText id="userName" 
-                                     value="JavaServerFaces" >
-		     <f:validateLength minimum="6" maximum="10"/>
-		     <f:validateRequired/>
-                   </h:inputText>
-
-              </td>
-
-
-	<TD>
-
-	      <h:commandLink id="link" href="hello.html"
-                           styleClass="hyperlinkClass"
-				       value="link text"/>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-            <h:selectManyCheckbox id="validUser" 
-                   styleClass="selectbooleanClass"/>
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	     <h:selectOneListbox id="appleQuantity" 
-                     title="Select Quantity"
-                     accesskey="N" tabindex="20" >
-
-                <f:selectItem  disabled="true" itemValue="0" itemLabel="0"/>
-                <f:selectItem  itemValue="4" itemLabel="4" title="Four" selected="true"/>
-                <f:selectItem  itemValue="9" itemLabel="9" title="nine" />
-
-              </h:selectOneListbox>
-
-	</TD>
-
-      </TR>
-
-					<TD><h:selectManyMenu id="ManyApples">
-						<f:selectItem itemValue="4" itemLabel="four" selected="true" />
-						<f:selectItem itemValue="6" itemLabel="six" />
-						<f:selectItem itemValue="7" itemLabel="seven" selected="true" />
-					</h:selectManyMenu></TD>
-
-</tr>
-
-  </TABLE>
-
-</h:form>
-</f:view>
-
-    </BODY>
-</HTML>
diff --git a/jsf-ri/web/test/TestValidatorTags.jsp b/jsf-ri/web/test/TestValidatorTags.jsp
deleted file mode 100644
index 4d741da..0000000
--- a/jsf-ri/web/test/TestValidatorTags.jsp
+++ /dev/null
@@ -1,169 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Test Validator Tags</title>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-  </head>
-
-  <body>
-    <h1>Test Validator Tags</h1>
-
-<f:view>
-<h:form id="validatorForm">
-<table>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="outOfBounds1" value="3.1415">
-                       <f:convertNumber pattern="####"/>
-                       <f:validateDoubleRange minimum="10.0" 
-                                              maximum="10.5"/>
-                   </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="inBounds1" value="10.25">
-                     <f:convertNumber pattern="####"/>
-                     <f:validateDoubleRange minimum="10.0" 
-                                            maximum="10.5"/>
-                   </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="outOfBounds2" value="fox">
-                     <f:validateLength minimum="10" maximum="11"/>
-                   </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="inBounds2" value="alligator22">
-                     <f:validateLength minimum="10"  maximum="12"/>
-                   </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="outOfBounds3" value="30000">
-                     <f:convertNumber  />
-                     <f:validateLongRange minimum="100000" maximum="110000"/>
-                   </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="inBounds3" value="1100">
-                     <f:convertNumber  />
-                     <f:validateLongRange minimum="1000"  maximum="1200"/>
-                   </h:inputText>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="required1" value="required" 
-                                 required="true"/>
-
-    </td>
-
-
-  </tr>
-
-  <tr>
-
-    <td>
-
-                   <h:inputText id="required2" value="required" 
-                                 required="true"/>
-    </td>
-
-
-  </tr>
-
-</table>
-</h:form>
-</f:view>
-
-  </body>
-</html>
diff --git a/jsf-ri/web/test/TestViewHandlerImpl_correct b/jsf-ri/web/test/TestViewHandlerImpl_correct
deleted file mode 100644
index 581e7a5..0000000
--- a/jsf-ri/web/test/TestViewHandlerImpl_correct
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <title>Hello</title> </HEAD>
-    
-    
-    <body bgcolor="white">
-    <h2>Hi. My name is Duke.  I'm thinking of a number from 0 to 10.
-    Can you guess it?</h2>
-    
-<form id="helloForm" name="helloForm" method="post" action="/test/faces/greeting.jsp;jsessionid=4951f037ca7e00e9e210e7a846e7" enctype="application/x-www-form-urlencoded">
-<input type="hidden" name="helloForm" value="helloForm" />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" autocomplete="off" />
-<input id="helloForm:userNo" type="text" name="helloForm:userNo" value="NUMBER" />
-  	 <BR>
-
-	 <input id="helloForm:submit" type="submit" name="helloForm:submit" value="Submit" />
-</form>
-</HTML>  
diff --git a/jsf-ri/web/test/TestViewTag.jsp b/jsf-ri/web/test/TestViewTag.jsp
deleted file mode 100644
index a9e4c3d..0000000
--- a/jsf-ri/web/test/TestViewTag.jsp
+++ /dev/null
@@ -1,78 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>TestViewTag</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-  </head>
-
-  <body>
-    <h1>TestViewTag</h1>
-
-<f:loadBundle basename="com.sun.faces.TestMessages" var="testMessages" />
-<f:view locale="#{testMessages.localeFromBundle}">
-<h:form styleClass="formClass" accept="html">
-
-<table>
-
-<tr>
-<td>Name:</td>
-<td><h:inputText value="Gilligan"/></td>
-<td><h:commandButton value="submit"/></td>
-</tr>
-</table>
-
-</h:form>
-</f:view>
-
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Wed Oct 15 17:31:05 Eastern Daylight Time 2003 -->
-<!-- hhmts start -->
-Last modified: Sun Oct 19 10:33:56 EDT 2003
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/web/test/TestViewTag2.jsp b/jsf-ri/web/test/TestViewTag2.jsp
deleted file mode 100644
index c1afbe1..0000000
--- a/jsf-ri/web/test/TestViewTag2.jsp
+++ /dev/null
@@ -1,66 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>TestViewTag</title>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
-  </head>
-
-  <body>
-    <h1>TestViewTag</h1>
-
-<f:view locale="#{requestScope.locale}">
-  Test VB enabled locale.
-</f:view>
-
-
-    <hr>
-    <address><a href="mailto:Ed Burns <ed.burns at sun.com>"></a></address>
-<!-- Created: Wed Oct 15 17:31:05 Eastern Daylight Time 2003 -->
-<!-- hhmts start -->
-Last modified: Sun Oct 19 10:33:56 EDT 2003
-<!-- hhmts end -->
-  </body>
-</html>
diff --git a/jsf-ri/web/test/WEB-INF/config-lists-and-maps.xml b/jsf-ri/web/test/WEB-INF/config-lists-and-maps.xml
deleted file mode 100644
index 6e51a90..0000000
--- a/jsf-ri/web/test/WEB-INF/config-lists-and-maps.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>SimpleBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>Bobby Orr</value>
-    </managed-property>
-  </managed-bean>
-
-  <!-- bean that is a List of Integers -->
-  <managed-bean>
-    <managed-bean-name>simpleList</managed-bean-name>
-    <managed-bean-class>java.util.ArrayList</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <list-entries>
-      <value-class>java.lang.Integer</value-class>
-      <value>10</value>
-      <value>20</value>
-      <value>60</value>
-      <null-value/>
-    </list-entries>
-  </managed-bean>
-
-  <!-- bean that is a List of SimpleBeans -->
-  <managed-bean>
-    <managed-bean-name>objectList</managed-bean-name>
-    <managed-bean-class>java.util.ArrayList</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <list-entries>
-      <value-class>com.sun.faces.config.SimpleBean</value-class>
-      <value>#{SimpleBean}</value>
-      <value>#{SimpleBean}</value>
-      <value>#{SimpleBean}</value>
-      <null-value/>
-    </list-entries>
-  </managed-bean>
-
-  <!-- bean that is a Map of Maps of Float/SimpleBean pairs -->
-  <managed-bean>
-    <managed-bean-name>crazyMap</managed-bean-name>
-    <managed-bean-class>java.util.HashMap</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <map-entries>
-      <key-class>java.lang.String</key-class>
-      <value-class>java.util.Map</value-class>
-      <map-entry>
-        <key>one</key>
-        <value>#{floatMap}</value>
-      </map-entry>
-      <map-entry>
-        <key>two</key>
-        <value>#{floatMap}</value>
-      </map-entry>
-      <map-entry>
-        <key>three</key>
-        <null-value/>
-      </map-entry>
-    </map-entries>
-  </managed-bean>
-
-
-  <!-- bean that is a Map of SimpleBeans -->
-  <managed-bean>
-    <managed-bean-name>floatMap</managed-bean-name>
-    <managed-bean-class>java.util.HashMap</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <map-entries>
-      <key-class>java.lang.Float</key-class>
-      <value-class>com.sun.faces.config.SimpleBean</value-class>
-      <map-entry>
-        <key>3.1415</key>
-        <value>#{SimpleBean}</value>
-      </map-entry>
-      <map-entry>
-        <key>3.14</key>
-        <value>#{SimpleBean}</value>
-      </map-entry>
-      <map-entry>
-        <key>6.02</key>
-        <value>#{SimpleBean}</value>
-      </map-entry>
-      <map-entry>
-        <key>0.00001</key>
-        <null-value/>
-      </map-entry>
-    </map-entries>
-  </managed-bean>
-
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/embed-config.xml b/jsf-ri/web/test/WEB-INF/embed-config.xml
deleted file mode 100644
index b533432..0000000
--- a/jsf-ri/web/test/WEB-INF/embed-config.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!--
-     Extra "faces-config.xml" that should NOT be parsed unless
-     implicitly included as a web application class loader resource
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <component>
-    <component-type>EmbedComponent</component-type>
-    <component-class>com.sun.faces.config.TestComponent</component-class>
-  </component>
-
-  <converter>
-    <converter-id>EmbedConverter</converter-id>
-    <converter-class>com.sun.faces.config.TestConverter</converter-class>
-  </converter>
-
-  <validator>
-    <validator-id>EmbedValidator</validator-id>
-    <validator-class>com.sun.faces.config.TestValidator</validator-class>
-  </validator>
-
-  <render-kit>
-    <renderer>
-      <component-family>Test</component-family>
-      <renderer-type>EmbedRenderer</renderer-type>
-      <renderer-class>com.sun.faces.config.TestRenderer</renderer-class>
-    </renderer>
-  </render-kit>
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/extra-config.xml b/jsf-ri/web/test/WEB-INF/extra-config.xml
deleted file mode 100644
index ed4ebec..0000000
--- a/jsf-ri/web/test/WEB-INF/extra-config.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!--
-     Extra "faces-config.xml" that should NOT be parsed unless
-     explicitly listed in a context initialization parameter.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <component>
-    <component-type>ExtraComponent</component-type>
-    <component-class>com.sun.faces.config.TestComponent</component-class>
-  </component>
-
-  <converter>
-    <converter-id>ExtraConverter</converter-id>
-    <converter-class>com.sun.faces.config.TestConverter</converter-class>
-  </converter>
-
-  <validator>
-    <validator-id>ExtraValidator</validator-id>
-    <validator-class>com.sun.faces.config.TestValidator</validator-class>
-  </validator>
-
-  <render-kit>
-    <renderer>
-      <component-family>Test</component-family>
-      <renderer-type>ExtraRenderer</renderer-type>
-      <renderer-class>com.sun.faces.config.TestRenderer</renderer-class>
-    </renderer>
-  </render-kit>
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/faces-config-1.0.xml b/jsf-ri/web/test/WEB-INF/faces-config-1.0.xml
deleted file mode 100644
index ae8deb4..0000000
--- a/jsf-ri/web/test/WEB-INF/faces-config-1.0.xml
+++ /dev/null
@@ -1,422 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<!DOCTYPE faces-config PUBLIC
-  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
-  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
-
-<!-- =========== FULL CONFIGURATION FILE ================================== -->
-
-<faces-config>
-
-
-  <!-- Initial application element with partial values -->
-  <application>
-    <action-listener>com.sun.faces.TestActionListener</action-listener>
-    <message-bundle>com.sun.faces.TestMessages</message-bundle>
-    <variable-resolver>com.sun.faces.TestOldVariableResolver</variable-resolver>
-  </application>
-
-
-  <!-- Second validator -->
-  <validator>
-    <description>Second Validator Description</description>
-    <display-name>Second Validator Display Name</display-name>
-    <icon>
-      <small-icon>secondValidator.jpg</small-icon>
-      <large-icon>secondValidator.gif</large-icon>
-    </icon>
-    <validator-id>Second</validator-id>
-    <validator-class>com.sun.faces.TestSecondValidator</validator-class>
-    <property>
-      <description>Second Validator Property 1 Description</description>
-      <display-name>Second Validator Property 1 Display Name</display-name>
-      <property-name>prop1</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-  </validator>
-
-
-  <!-- First validator -->
-  <validator>
-    <description>First Validator Description</description>
-    <display-name>First Validator Display Name</display-name>
-    <icon>
-      <small-icon>firstValidator.jpg</small-icon>
-      <large-icon>firstValidator.gif</large-icon>
-    </icon>
-    <validator-id>First</validator-id>
-    <validator-class>com.sun.faces.TestFirstValidator</validator-class>
-    <attribute>
-      <description>First Validator Attribute 1 Description</description>
-      <display-name>First Validator Attribute 1 Display Name</display-name>
-      <attribute-name>attr1</attribute-name>
-      <attribute-class>java.lang.String</attribute-class>
-    </attribute>
-  </validator>
-
-
-  <!-- First component -->
-  <component>
-    <description>User Interface Command Component</description>
-    <display-name>User Interface Command</display-name>
-    <component-type>Command</component-type>
-    <component-class>javax.faces.component.UICommand</component-class>
-  </component>
-
-
-  <!-- First converter -->
-  <converter>
-    <description>First Converter Description</description>
-    <display-name>First Converter Display Name</display-name>
-    <icon>
-      <small-icon>firstConverter.jpg</small-icon>
-      <large-icon>firstConverter.gif</large-icon>
-    </icon>
-    <converter-id>First</converter-id>
-    <converter-class>com.sun.faces.TestFirstConverter</converter-class>
-    <attribute>
-      <description>First Converter Attribute 1 Description</description>
-      <display-name>First Converter Attribute 1 Display Name</display-name>
-      <attribute-name>attr1</attribute-name>
-      <attribute-class>java.lang.String</attribute-class>
-    </attribute>
-  </converter>
-
-
-  <!-- Second application element with overapping values -->
-  <application>
-    <navigation-handler>
-      com.sun.faces.TestNavigationHandler
-    </navigation-handler>
-    <property-resolver>com.sun.faces.TestPropertyResolver</property-resolver>
-    <variable-resolver>com.sun.faces.TestVariableResolver</variable-resolver>
-    <view-handler>com.sun.faces.TestViewHandler</view-handler>
-    
-    <locale-config>
-        <default-locale>en_US</default-locale>
-        <supported-locale>ps_PS</supported-locale>
-        <supported-locale>fr_FR</supported-locale>
-        <supported-locale>de_DE</supported-locale>
-        <supported-locale>en</supported-locale>
-    </locale-config>
-  </application>
-
-
-  <!-- Third application element with an adapter PropertyResolver -->
-  <application>
-    <property-resolver>com.sun.faces.AdapterPropertyResolver</property-resolver>
-  </application>
-
-  <!-- Second converter -->
-  <converter>
-    <description>Second Converter Description</description>
-    <display-name>Second Converter Display Name</display-name>
-    <icon>
-      <small-icon>secondConverter.jpg</small-icon>
-      <large-icon>secondConverter.gif</large-icon>
-    </icon>
-    <converter-id>Second</converter-id>
-    <converter-class>com.sun.faces.TestSecondConverter</converter-class>
-    <property>
-      <description>Second Converter Property 1 Description</description>
-      <display-name>Second Converter Property 1 Display Name</display-name>
-      <property-name>prop1</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-  </converter>
-
-
-  <!-- First navigation rule (global) -->
-  <navigation-rule>
-    <!-- Can also be omitted, since this is the default -->
-    <from-view-id> * </from-view-id>
-    <!-- Logout button on every page -->
-    <navigation-case>
-      <from-action>#{UserBean.Logout}</from-action>
-      <to-view-id>/logout.jsp</to-view-id>
-    </navigation-case>
-    <!-- Generic "not logged in" handler -->
-    <navigation-case>
-      <from-outcome>loginRequired</from-outcome>
-      <to-view-id>/must-login-first.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Second navigation rule (login page only) -->
-  <navigation-rule>
-    <from-view-id> /login.jsp </from-view-id>
-    <!-- Login action was invoked successfully -->
-    <navigation-case>
-      <from-action>#{UserBean.login}</from-action>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/home.jsp</to-view-id>
-    </navigation-case>
-    <!-- User registration required -->
-    <navigation-case>
-      <from-action>#{UserBean.register}</from-action>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/get-user-info.jsp</to-view-id>
-    </navigation-case>
-    <!-- User registration failed -->
-    <navigation-case>
-      <from-action>#{UserBean.register}</from-action>
-      <from-outcome>duplicate</from-outcome>
-      <to-view-id>/try-another-name.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Third navigation rule (more global stuff) -->
-  <navigation-rule>
-    <!-- Omit the request view id this time -->
-    <!-- General search form handling -->
-    <navigation-case>
-      <from-action>#{SearchForm.go}</from-action>
-      <to-view-id>/search-results.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Fourth navigation rule (special search handling) -->
-  <navigation-rule>
-    <!-- Search works differently for part of the app -->
-    <from-view-id>/movies/*</from-view-id>
-    <!-- Special search form handling -->
-    <navigation-case>
-      <from-action>#{SearchForm.go}</from-action>
-      <to-view-id>/movies/movie-search-results.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- First managed bean -->
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      Auto-creates the form handler for new customers into request scope
-      if it is not already present.
-    </description>
-    <display-name>New Customer Form Handler</display-name>
-    <managed-bean-name>NewCustomerFormHandler</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.config.NewCustomerFormHandler
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <!-- Managed property initializations -->
-    <managed-property>
-      <property-name>minimumAge</property-name>
-      <value>#{initParam.minimumCustomerAge}</value>
-    </managed-property>
-    <managed-property>
-      <property-name>maximumAge</property-name>
-      <value>65</value>
-    </managed-property>
-    <managed-property>
-      <property-name>nationality</property-name>
-      <null-value/>
-    </managed-property>
-    <managed-property>
-      <property-name>allowableValues</property-name>
-      <!-- Assume the type is java.util.List -->
-      <list-entries>
-        <value-class>java.lang.Integer</value-class>
-        <value>10</value>
-        <value>20</value>
-        <value>60</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <property-name>firstNames</property-name>
-      <!-- Assume the type is java.util.List or java.lang.String[] -->
-      <list-entries>
-        <value>Thomas</value>
-        <value>#{someOtherBean.someName}</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <description>
-        Map property with a description.
-      </description>
-      <display-name>Claim Amounts</display-name>
-      <property-name>claimAmounts</property-name>
-      <map-entries>
-        <key-class>java.lang.String</key-class> <!-- Default so redundant -->
-        <value-class>java.lang.Double</value-class>
-        <map-entry>
-          <key>fire</key>
-          <value>1000.00</value>
-        </map-entry>
-        <map-entry>
-          <key>water</key>
-          <value>#{claimConfiguration.waterDamageAmount}</value>
-        </map-entry>
-        <map-entry>
-          <key>earthquake</key>
-          <null-value/>
-        </map-entry>
-      </map-entries>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>mixedBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.TestBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>prop</property-name>
-      <value>mixed value #{SimpleBean.simpleProperty}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <description>
-      Will throw PropertyNotFoundException when accessed.
-    </description>
-    <managed-bean-name>threeBeanSaladNegative</managed-bean-name>
-    <managed-bean-class>com.sun.faces.TestBean</managed-bean-class>
-    <managed-bean-scope>application</managed-bean-scope>
-    <managed-property>
-      <property-name>prop</property-name>
-      <value>request #{tbsRequest.simpleProperty} session #{tbsSession.simpleProperty} none #{tbsNone.simpleProperty} </value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>threeBeanSaladPositive</managed-bean-name>
-    <managed-bean-class>com.sun.faces.TestBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>prop</property-name>
-      <value>request #{tbsRequest.simpleProperty} session #{tbsSession.simpleProperty} none #{tbsNone.simpleProperty} </value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>tbsRequest</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>request</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>tbsSession</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>session</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>tbsNone</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>none</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>SimpleBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>Bobby Orr</value>
-    </managed-property>
-  </managed-bean>
-
-
-  <!-- First referenced bean -->
-  <referenced-bean>
-    <description>
-      This element represents a JDBC DataSource that will be
-      initialized through some external means, and made available
-      in some scope (most likely application).
-    </description>
-    <display-name>Database Connection Pool</display-name>
-    <referenced-bean-name>connectionPool</referenced-bean-name>
-    <referenced-bean-class>javax.sql.DataSource</referenced-bean-class>
-  </referenced-bean>
-
-  <managed-bean>
-  <managed-bean-name>testBean</managed-bean-name>
-  <managed-bean-class>
-    com.sun.faces.TestBean
-  </managed-bean-class>
-  <managed-bean-scope>none</managed-bean-scope>
-  <managed-property>
-    <property-name>customerBean</property-name>
-    <value>#{customerBean}</value>
-  </managed-property>
-</managed-bean>
-
-<managed-bean>
-  <managed-bean-name>customerBean</managed-bean-name>
-  <managed-bean-class>
-    com.sun.faces.CustomerBean
-  </managed-bean-class>
-  <managed-bean-scope>none</managed-bean-scope>
-  <managed-property>
-    <property-name>name</property-name>
-    <value>Bobby</value>
-  </managed-property>
-  <managed-property>
-    <property-name>symbol</property-name>
-    <value>GDP</value>
-  </managed-property>
-</managed-bean>
-
-<managed-bean>
-  <managed-bean-name>exceptionBean</managed-bean-name>
-  <managed-bean-class>
-    com.sun.faces.TestExceptionBean
-  </managed-bean-class>
-  <managed-bean-scope>request</managed-bean-scope>
-</managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/faces-config-empty.xml b/jsf-ri/web/test/WEB-INF/faces-config-empty.xml
deleted file mode 100644
index 236ed21..0000000
--- a/jsf-ri/web/test/WEB-INF/faces-config-empty.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!-- ========== EMPTY CONFIGURATION FILE ================================== -->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2"/>
diff --git a/jsf-ri/web/test/WEB-INF/faces-config.xml b/jsf-ri/web/test/WEB-INF/faces-config.xml
deleted file mode 100644
index 6976a89..0000000
--- a/jsf-ri/web/test/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0"
-    metadata-complete="true">
-
-  <!-- Initial application element with partial values -->
-  <application>
-    <action-listener>com.sun.faces.TestActionListener</action-listener>
-    <message-bundle>com.sun.faces.TestMessages</message-bundle>
-    <variable-resolver>com.sun.faces.TestOldVariableResolver</variable-resolver>
-    <el-resolver>com.sun.faces.TestELResolver</el-resolver>
-    <resource-bundle>
-      <description>test ResourceBundle</description>
-      <display-name>Testo Pesto</display-name>
-      <base-name>com.sun.faces.TestResourceBundle</base-name>
-      <var>testResourceBundle</var>
-    </resource-bundle>
-    <resource-bundle>
-      <description>test ResourceBundle2</description>
-      <display-name>Second ResourceBundle</display-name>
-      <base-name>com.sun.faces.TestResourceBundle2</base-name>
-      <var>testResourceBundle2</var>
-    </resource-bundle>
-      <system-event-listener>
-          <system-event-listener-class>com.sun.faces.SystemEventListener1</system-event-listener-class>
-          <system-event-class>com.sun.faces.CustomSystemEvent</system-event-class>
-          <source-class>javax.faces.component.UIOutput</source-class>
-      </system-event-listener>
-      <system-event-listener>
-          <system-event-listener-class>com.sun.faces.SystemEventListener2</system-event-listener-class>
-          <system-event-class>com.sun.faces.CustomSystemEvent</system-event-class>
-      </system-event-listener>
-  </application>
-
-
-  <!-- Second validator -->
-  <validator>
-    <description>Second Validator Description</description>
-    <display-name>Second Validator Display Name</display-name>
-    <icon>
-      <small-icon>secondValidator.jpg</small-icon>
-      <large-icon>secondValidator.gif</large-icon>
-    </icon>
-    <validator-id>Second</validator-id>
-    <validator-class>com.sun.faces.TestSecondValidator</validator-class>
-    <property>
-      <description>Second Validator Property 1 Description</description>
-      <display-name>Second Validator Property 1 Display Name</display-name>
-      <property-name>prop1</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-  </validator>
-
-
-  <!-- First validator -->
-  <validator>
-    <description>First Validator Description</description>
-    <display-name>First Validator Display Name</display-name>
-    <icon>
-      <small-icon>firstValidator.jpg</small-icon>
-      <large-icon>firstValidator.gif</large-icon>
-    </icon>
-    <validator-id>First</validator-id>
-    <validator-class>com.sun.faces.TestFirstValidator</validator-class>
-    <attribute>
-      <description>First Validator Attribute 1 Description</description>
-      <display-name>First Validator Attribute 1 Display Name</display-name>
-      <attribute-name>attr1</attribute-name>
-      <attribute-class>java.lang.String</attribute-class>
-    </attribute>
-  </validator>
-
-
-  <!-- First component -->
-  <component>
-    <description>User Interface Command Component</description>
-    <display-name>User Interface Command</display-name>
-    <component-type>Command</component-type>
-    <component-class>javax.faces.component.UICommand</component-class>
-  </component>
-
-
-  <!-- First converter -->
-  <converter>
-    <description>First Converter Description</description>
-    <display-name>First Converter Display Name</display-name>
-    <icon>
-      <small-icon>firstConverter.jpg</small-icon>
-      <large-icon>firstConverter.gif</large-icon>
-    </icon>
-    <converter-id>First</converter-id>
-    <converter-class>com.sun.faces.TestFirstConverter</converter-class>
-    <attribute>
-      <description>First Converter Attribute 1 Description</description>
-      <display-name>First Converter Attribute 1 Display Name</display-name>
-      <attribute-name>attr1</attribute-name>
-      <attribute-class>java.lang.String</attribute-class>
-    </attribute>
-  </converter>
-
-
-  <!-- Second application element with overapping values -->
-  <application>
-    <navigation-handler>
-      com.sun.faces.TestNavigationHandler
-    </navigation-handler>
-    <property-resolver>com.sun.faces.TestPropertyResolver</property-resolver>
-    <property-resolver>com.sun.faces.application.PropertyResolverTestImpl</property-resolver>
-    <variable-resolver>com.sun.faces.TestVariableResolver</variable-resolver>
-    
-    
-    <locale-config>
-        <default-locale>en_US</default-locale>
-        <supported-locale>ps_PS</supported-locale>
-        <supported-locale>fr_FR</supported-locale>
-        <supported-locale>de_DE</supported-locale>
-        <supported-locale>en</supported-locale>
-    </locale-config>
-  </application>
-
-
-  <!-- Third application element with an adapter PropertyResolver -->
-  <application>
-    <property-resolver>com.sun.faces.AdapterPropertyResolver</property-resolver>
-  </application>
-
-  <!-- Second converter -->
-  <converter>
-    <description>Second Converter Description</description>
-    <display-name>Second Converter Display Name</display-name>
-    <icon>
-      <small-icon>secondConverter.jpg</small-icon>
-      <large-icon>secondConverter.gif</large-icon>
-    </icon>
-    <converter-id>Second</converter-id>
-    <converter-class>com.sun.faces.TestSecondConverter</converter-class>
-    <property>
-      <description>Second Converter Property 1 Description</description>
-      <display-name>Second Converter Property 1 Display Name</display-name>
-      <property-name>prop1</property-name>
-      <property-class>java.lang.String</property-class>
-    </property>
-  </converter>
-
-
-  <!-- First navigation rule (global) -->
-  <navigation-rule>
-    <!-- Can also be omitted, since this is the default -->
-    <from-view-id> * </from-view-id>
-    <!-- Logout button on every page -->
-    <navigation-case>
-      <from-action>#{UserBean.Logout}</from-action>
-      <to-view-id>/logout.jsp</to-view-id>
-    </navigation-case>
-    <!-- Generic "not logged in" handler -->
-    <navigation-case>
-      <from-outcome>loginRequired</from-outcome>
-      <to-view-id>/must-login-first.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Second navigation rule (login page only) -->
-  <navigation-rule>
-    <from-view-id> /login.jsp </from-view-id>
-    <!-- Login action was invoked successfully -->
-    <navigation-case>
-      <from-action>#{UserBean.login}</from-action>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/home.jsp</to-view-id>
-    </navigation-case>
-    <!-- User registration required -->
-    <navigation-case>
-      <from-action>#{UserBean.register}</from-action>
-      <from-outcome>success</from-outcome>
-      <to-view-id>/get-user-info.jsp</to-view-id>
-    </navigation-case>
-    <!-- User registration failed -->
-    <navigation-case>
-      <from-action>#{UserBean.register}</from-action>
-      <from-outcome>duplicate</from-outcome>
-      <to-view-id>/try-another-name.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Third navigation rule (more global stuff) -->
-  <navigation-rule>
-    <!-- Omit the request view id this time -->
-    <!-- General search form handling -->
-    <navigation-case>
-      <from-action>#{SearchForm.go}</from-action>
-      <to-view-id>/search-results.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- Fourth navigation rule (special search handling) -->
-  <navigation-rule>
-    <!-- Search works differently for part of the app -->
-    <from-view-id>/movies/*</from-view-id>
-    <!-- Special search form handling -->
-    <navigation-case>
-      <from-action>#{SearchForm.go}</from-action>
-      <to-view-id>/movies/movie-search-results.jsp</to-view-id>
-    </navigation-case>
-  </navigation-rule>
-
-
-  <!-- First managed bean -->
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      Auto-creates the form handler for new customers into request scope
-      if it is not already present.
-    </description>
-    <display-name>New Customer Form Handler</display-name>
-    <managed-bean-name>NewCustomerFormHandler</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.config.NewCustomerFormHandler
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <!-- Managed property initializations -->
-    <managed-property>
-      <property-name>minimumAge</property-name>
-      <value>#{initParam.minimumCustomerAge}</value>
-    </managed-property>
-    <managed-property>
-      <property-name>maximumAge</property-name>
-      <value>65</value>
-    </managed-property>
-    <managed-property>
-      <property-name>nationality</property-name>
-      <null-value/>
-    </managed-property>
-    <managed-property>
-      <property-name>allowableValues</property-name>
-      <!-- Assume the type is java.util.List -->
-      <list-entries>
-        <value-class>java.lang.Integer</value-class>
-        <value>10</value>
-        <value>20</value>
-        <value>60</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <property-name>firstNames</property-name>
-      <!-- Assume the type is java.util.List or java.lang.String[] -->
-      <list-entries>
-        <value>Thomas</value>
-        <value>#{someOtherBean.someName}</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <description>
-        Map property with a description.
-      </description>
-      <display-name>Claim Amounts</display-name>
-      <property-name>claimAmounts</property-name>
-      <map-entries>
-        <key-class>java.lang.String</key-class> <!-- Default so redundant -->
-        <value-class>java.lang.Double</value-class>
-        <map-entry>
-          <key>fire</key>
-          <value>1000.00</value>
-        </map-entry>
-        <map-entry>
-          <key>water</key>
-          <value>#{claimConfiguration.waterDamageAmount}</value>
-        </map-entry>
-        <map-entry>
-          <key>earthquake</key>
-          <null-value/>
-        </map-entry>
-      </map-entries>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>mixedBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.TestBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>prop</property-name>
-      <value>mixed value #{SimpleBean.simpleProperty}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <description>
-      Will throw PropertyNotFoundException when accessed.
-    </description>
-    <managed-bean-name>threeBeanSaladNegative</managed-bean-name>
-    <managed-bean-class>com.sun.faces.TestBean</managed-bean-class>
-    <managed-bean-scope>application</managed-bean-scope>
-    <managed-property>
-      <property-name>prop</property-name>
-      <value>request #{tbsRequest.simpleProperty} session #{tbsSession.simpleProperty} none #{tbsNone.simpleProperty} </value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>threeBeanSaladPositive</managed-bean-name>
-    <managed-bean-class>com.sun.faces.TestBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>prop</property-name>
-      <value>request #{tbsRequest.simpleProperty} session #{tbsSession.simpleProperty} none #{tbsNone.simpleProperty} </value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>tbsRequest</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>request</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>request</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>tbsSession</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>session</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>tbsNone</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>none</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>SimpleBean</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>Bobby " \  \" Orr</value>
-    </managed-property>
-    <managed-property>
-      <property-name>nonManagedBean</property-name>
-      <value>#{nonManagedBean}</value>
-    </managed-property>
-  </managed-bean>
-
-
-  <!-- First referenced bean -->
-  <referenced-bean>
-    <description>
-      This element represents a JDBC DataSource that will be
-      initialized through some external means, and made available
-      in some scope (most likely application).
-    </description>
-    <display-name>Database Connection Pool</display-name>
-    <referenced-bean-name>connectionPool</referenced-bean-name>
-    <referenced-bean-class>javax.sql.DataSource</referenced-bean-class>
-  </referenced-bean>
-
-    <managed-bean>
-        <managed-bean-name>testBean2</managed-bean-name>
-        <managed-bean-class>
-            com.sun.faces.TestBean
-        </managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-    </managed-bean>
-
-  <managed-bean>
-  <managed-bean-name>testBean</managed-bean-name>
-  <managed-bean-class>
-    com.sun.faces.TestBean
-  </managed-bean-class>
-  <managed-bean-scope>request</managed-bean-scope>
-  <managed-property>
-    <property-name>customerBean</property-name>
-    <value>#{customerBean}</value>
-  </managed-property>
-</managed-bean>
-
-<managed-bean>
-  <managed-bean-name>customerBean</managed-bean-name>
-  <managed-bean-class>
-    com.sun.faces.CustomerBean
-  </managed-bean-class>
-  <managed-bean-scope>request</managed-bean-scope>
-  <managed-property>
-    <property-name>name</property-name>
-    <value>Bobby</value>
-  </managed-property>
-  <managed-property>
-    <property-name>symbol</property-name>
-    <value>GDP</value>
-  </managed-property>
-</managed-bean>
-
-<managed-bean>
-  <managed-bean-name>exceptionBean</managed-bean-name>
-  <managed-bean-class>
-    com.sun.faces.TestExceptionBean
-  </managed-bean-class>
-  <managed-bean-scope>request</managed-bean-scope>
-</managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>customScopeBean</managed-bean-name>
-        <managed-bean-class>com.sun.faces.TestBean</managed-bean-class>
-        <managed-bean-scope>#{facesContext.externalContext.requestMap}</managed-bean-scope>
-    </managed-bean>
-
-     <component>
-    <component-type>DefaultComponent</component-type>
-    <component-class>com.sun.faces.config.TestComponent</component-class>
-  </component>
-
-  <converter>
-    <converter-id>DefaultConverter</converter-id>
-    <converter-class>com.sun.faces.config.TestConverter</converter-class>
-  </converter>
-
-  <validator>
-    <validator-id>DefaultValidator</validator-id>
-    <validator-class>com.sun.faces.config.TestValidator</validator-class>
-  </validator>
-
-  <render-kit>
-    <renderer>
-      <component-family>Test</component-family>
-      <renderer-type>DefaultRenderer</renderer-type>
-      <renderer-class>com.sun.faces.config.TestRenderer</renderer-class>
-    </renderer>
-  </render-kit>
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/faces-navigation-2.xml b/jsf-ri/web/test/WEB-INF/faces-navigation-2.xml
deleted file mode 100644
index ce12e5f..0000000
--- a/jsf-ri/web/test/WEB-INF/faces-navigation-2.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-        version="2.0">
-
-<navigation-rule>
-  <description>
-    LOGIN PAGE NAVIGATION HANDLING
-  </description>
-  <from-view-id>/login.jsp</from-view-id>
-  <navigation-case>
-    <description>
-      Handle case where login succeeded based on logical outcome.
-    </description>
-    <display-name>Successful Login</display-name>
-    <from-action>#{userBean.login}</from-action>
-    <from-outcome>success</from-outcome>
-    <to-view-id>/home.jsp</to-view-id>
-  </navigation-case>
-  <navigation-case>
-    <description>
-      Handle case where login succeeded based on contextual information.
-    </description>
-    <display-name>Successful Login</display-name>
-    <from-action>#{userBean.login}</from-action>
-    <if>#{true}</if>
-    <to-view-id>/home.jsp</to-view-id>
-  </navigation-case>
-
-  <navigation-case>
-    <description>
-      Handle case where login failed (disabled by condition).
-    </description>
-    <display-name>Failed Login</display-name>
-    <from-action>#{userBean.login2}</from-action>
-    <from-outcome>failure</from-outcome>
-    <if>#{false}</if>
-    <to-view-id>/shouldNotGetHere.jsp</to-view-id>
-  </navigation-case>
-  <navigation-case>
-    <description>
-      Handle case where login failed.
-    </description>
-    <display-name>Failed Login</display-name>
-    <from-action>#{userBean.login2}</from-action>
-    <to-view-id>/loginFailed.jsp</to-view-id>
-  </navigation-case>
-</navigation-rule>
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/faces-navigation.xml b/jsf-ri/web/test/WEB-INF/faces-navigation.xml
deleted file mode 100644
index 94cf71d..0000000
--- a/jsf-ri/web/test/WEB-INF/faces-navigation.xml
+++ /dev/null
@@ -1,319 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-              version="2.0">
-
-<navigation-rule> 
-  <description> 
-  APPLICATION WIDE NAVIGATION HANDLING 
-  </description> 
-  <from-view-id> * </from-view-id> 
-  <navigation-case> 
-    <description> 
-      Assume there is a Logout button on every page that 
-      invokes the logout Action. 
-    </description> 
-    <display-name>Generic Logout Button</display-name> 
-    <from-action>#{userBean.logout}</from-action> 
-    <to-view-id>/logout.jsp</to-view-id> 
-  </navigation-case> 
-<!-- Handle a generic error outcome from any Action --> 
-  <navigation-case> 
-    <description> 
-      Handle a generic error outcome that might be returned 
-      by any application Action. 
-    </description> 
-    <display-name>Generic Error Outcome</display-name> 
-    <from-action>#{newCustomer.loginRequired}</from-action> 
-    <to-view-id>/must-login-first.jsp</to-view-id> 
-  </navigation-case> 
-</navigation-rule> 
-
-<navigation-rule>
-  <description>
-    LOGIN PAGE NAVIGATION HANDLING
-  </description>
-  <from-view-id> /login.jsp </from-view-id>
-  <navigation-case>
-    <description>
-      Handle case where login succeeded.
-    </description>
-    <display-name>Successful Login</display-name>
-    <from-action>#{userBean.login}</from-action>
-    <from-outcome>success</from-outcome>
-    <to-view-id>/home.jsp</to-view-id>
-  </navigation-case>
-  <navigation-case>
-    <description>
-      User registration for a new user succeeded.
-    </description>
-    <display-name>Successful New User Registration</display-name>
-    <from-action>#{userBean.register}</from-action>
-    <from-outcome>success</from-outcome>
-    <to-view-id>/welcome.jsp</to-view-id>
-  </navigation-case>
-  <navigation-case>
-    <description>
-      User registration for a new user failed because of a
-      duplicate username.
-    </description>
-    <display-name>Failed New User Registration</display-name>
-    <from-action>#{userBean.register}</from-action>
-    <from-outcome>duplicateUserName</from-outcome>
-    <to-view-id>/try-another-name.jsp</to-view-id>
-  </navigation-case>
-</navigation-rule>
-
-<navigation-rule>
-  <description>
-    Assume there is a search form on every page. These navigation
-    cases get merged with the application-wide rules above because
-    they use the same from-view-id pattern. The same thing would
-    also happen if from-view-id was omitted here, because that is
-    equivalent to a matching pattern of *.
-  </description>
-  <from-view-id> * </from-view-id>
-  <navigation-case>
-    <display-name>Search Form Success</display-name>
-    <from-action>#{searchForm.go}</from-action>
-    <from-outcome>success</from-outcome>
-    <to-view-id>/search-results.jsp</to-view-id>
-  </navigation-case>
-  <navigation-case>
-    <display-name>Search Form Failure</display-name>
-    <from-action>#{searchForm.go}</from-action>
-    <to-view-id>/search-problem.jsp</to-view-id>
-  </navigation-case>
-</navigation-rule>
-
-<navigation-rule>
-  <description>
-    Searching works slightly differently in part of the site.
-  </description>
-  <from-view-id> /movies/* </from-view-id>
-  <navigation-case>
-    <display-name>Search Form Success</display-name>
-    <from-action>#{searchForm.go}</from-action>
-    <from-outcome>success</from-outcome>
-    <to-view-id>/movie-search-results.jsp</to-view-id>
-  </navigation-case>
-  <navigation-case>
-    <display-name>Search Form Failure</display-name>
-    <from-action>#{searchForm.go}</from-action>
-    <to-view-id>/search-problem.jsp</to-view-id>
-  </navigation-case>
-</navigation-rule>
-
-
-<navigation-rule>
-  <from-view-id>/dir3/*</from-view-id>
-  <navigation-case>
-    <from-outcome>home</from-outcome>
-    <to-view-id>/dir3/home.jsp</to-view-id>
-  </navigation-case>
-</navigation-rule>
-
-<navigation-rule>
-  <from-view-id>/dir1/dir2/dir3/*</from-view-id>
-  <navigation-case>
-    <from-outcome>home</from-outcome>
-    <to-view-id>/dir1/dir2/dir3/home.jsp</to-view-id>
-  </navigation-case>
-</navigation-rule>
-
-
-    <navigation-rule>
-        <from-view-id>/page1.xhtml</from-view-id>
-        <navigation-case>
-            <from-outcome>redirectOutcome1</from-outcome>
-            <to-view-id>/page2.xhtml</to-view-id>
-            <redirect include-view-params="true">
-                <view-param>
-                    <name>foo</name>
-                    <value>bar</value>
-                </view-param>
-                <view-param>
-                    <name>foo</name>
-                    <value>bar2</value>
-                </view-param>
-                <view-param>
-                    <name>foo2</name>
-                    <value>bar3</value>
-                </view-param>
-            </redirect>
-        </navigation-case>
-         <navigation-case>
-            <from-outcome>redirectOutcome2</from-outcome>
-            <to-view-id>/page2.xhtml</to-view-id>
-            <redirect />
-        </navigation-case>
-        <navigation-case>
-            <from-outcome>redirectOutcome3</from-outcome>
-            <to-view-id>/page2.xhtml</to-view-id>
-            <redirect>
-                <view-param>
-                    <name>param</name>
-                    <value>#{navbean.increment}</value>
-                </view-param>
-            </redirect>
-        </navigation-case>
-    </navigation-rule>
-
-
-
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      Auto-creates the form handler for new customers into request scope
-      if it is not already present.
-    </description>
-    <display-name>New Customer Form Handler</display-name>
-    <managed-bean-name>newCustomer</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.config.NewCustomerFormHandler
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <!-- Managed property initializations -->
-    <managed-property>
-      <property-name>minimumAge</property-name>
-      <value>#{initParam.minimumCustomerAge}</value>
-    </managed-property>
-    <managed-property>
-      <property-name>maximumAge</property-name>
-      <value>65</value>
-    </managed-property>
-    <managed-property>
-      <property-name>nationality</property-name>
-      <null-value/>
-    </managed-property>
-    <managed-property>
-      <property-name>allowableValues</property-name>
-      <!-- Assume the type is java.util.List -->
-      <list-entries>
-        <value-class>java.lang.Integer</value-class>
-        <value>10</value>
-        <value>20</value>
-        <value>60</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <property-name>firstNames</property-name>
-      <!-- Assume the type is java.util.List or java.lang.String[] -->
-      <list-entries>
-        <value>Thomas</value>
-        <value>#{jsfSimple.simpleProperty}</value>
-        <null-value/>
-      </list-entries>
-    </managed-property>
-    <managed-property>
-      <description>
-        Map property with a description.
-      </description>
-      <display-name>Claim Amounts</display-name>
-      <property-name>claimAmounts</property-name>
-      <map-entries>
-        <key-class>java.lang.String</key-class> <!-- Default so redundant -->
-        <value-class>java.lang.Double</value-class>
-        <map-entry>
-          <key>fire</key>
-          <value>1000.00</value>
-        </map-entry>
-        <map-entry>
-          <key>water</key>
-          <value>#{claimConfiguration.waterDamageAmount}</value>
-        </map-entry>
-        <map-entry>
-          <key>earthquake</key>
-          <null-value/>
-        </map-entry>
-      </map-entries>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      Pointed at from newCustomer.
-    </description>
-    <display-name>Claim Configuration</display-name>
-    <managed-bean-name>claimConfiguration</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.config.ClaimConfiguration
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <!-- Managed property initializations -->
-    <managed-property>
-      <property-name>waterDamageAmount</property-name>
-      <value>100.0</value>
-    </managed-property>
-
-  </managed-bean>
-
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      Pointed at from newCustomer.
-    </description>
-    <display-name>SimpleBean</display-name>
-    <managed-bean-name>jsfSimple</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.config.SimpleBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <!-- Managed property initializations -->
-    <managed-property>
-      <property-name>simpleProperty</property-name>
-      <value>Hello</value>
-    </managed-property>
-
-  </managed-bean>
-
-    <managed-bean>
-     <managed-bean-name>navbean</managed-bean-name>
-      <managed-bean-class>com.sun.faces.application.NavBean</managed-bean-class>
-      <managed-bean-scope>request</managed-bean-scope>
-  </managed-bean>
-
-
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/navigation-cases-2.xml b/jsf-ri/web/test/WEB-INF/navigation-cases-2.xml
deleted file mode 100644
index a78478b..0000000
--- a/jsf-ri/web/test/WEB-INF/navigation-cases-2.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!--
-     This document contains test scenarios for the implementation
-     of the default NavigationHandler implementation, as described
-     in Section 7.4.2 of the spec.  These rules assume that an
-     application configuration file including all of the example
-     navigation rules in Section 7.4.3 has been processed.
-
-     Each test scenario is represented by a "test" element with the
-     following attributes:
-
-     fromViewId                view id from the view currently
-                               being processed (required)
-
-     fromAction             Action reference of the action that
-                               was invoked (optional)
-
-     fromOutcome               Logical outcome from the
-                               action that was called (optional)
-
-     condition                 The condition which determines whether
-                               case is a match (optional)
-
-
-     toViewId                  view id of the view that should be
-                               selected next, which may be the same
-                               as the from view (required)
-
--->
-
-<tests>
-
-  <!-- ============ Tests From /login.jsp view Identifier ================= -->
-
-
-  <!-- Positive tests that should match specific rules -->
-
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.login}"
-    fromOutcome="success"
-          toViewId="/home.jsp"/>
-
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.login}"
-    fromOutcome="success"
-		     if="#{true}"
-          toViewId="/home.jsp"/>
-
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.login}"
-    fromOutcome="failure"
-		     if="#{false}"
-       toViewId="/loginFailed.jsp"/> <!-- pulled from next navigation case -->
-
-
-</tests>
diff --git a/jsf-ri/web/test/WEB-INF/navigation-cases.xml b/jsf-ri/web/test/WEB-INF/navigation-cases.xml
deleted file mode 100644
index c212ec4..0000000
--- a/jsf-ri/web/test/WEB-INF/navigation-cases.xml
+++ /dev/null
@@ -1,294 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<!--
-     This document contains test scenarios for the implementation
-     of the default NavigationHandler implementation, as described
-     in Section 7.4.2 of the spec.  These rules assume that an
-     application configuration file including all of the example
-     navigation rules in Section 7.4.3 has been processed.
-
-     Each test scenario is represented by a "test" element with the
-     following attributes:
-
-     fromViewId                view id from the view currently
-                               being processed (required)
-
-     fromAction             Action reference of the action that
-                               was invoked (optional)
-
-     fromOutcome               Logical outcome from the
-                               action that was called (optional)
-
-     toViewId                  view id of the view that should be
-                               selected next, which may be the same
-                               as the from view (required)
-
--->
-
-<tests>
-
-  <!-- ============ Tests From /login.jsp view Identifier ================= -->
-
-
-  <!-- Positive tests that should match specific rules -->
-
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.login}"
-       fromOutcome="success"
-          toViewId="/home.jsp"/>
-
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.register}"
-       fromOutcome="success"
-          toViewId="/welcome.jsp"/>
-
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.register}"
-       fromOutcome="duplicateUserName"
-          toViewId="/try-another-name.jsp"/>
-
-
-  <!-- Positive tests that should match application wide rules -->
-
-  <!-- Matches the generic logout rule #1 -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.logout}"
-          toViewId="/logout.jsp"/>
-
-  <!-- Matches the generic logout rule #2 -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.logout}"
-       fromOutcome="whatever"
-          toViewId="/logout.jsp"/>
-
-  <!-- Matches generic error outcome rule #1 -->
-  <test fromViewId="/login.jsp"
-       fromOutcome="loginRequired"
-          toViewId="/must-login-first.jsp"/>
-
-  <!-- Matches generic error outcome rule #2 -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{foo.bar}"
-       fromOutcome="loginRequired"
-          toViewId="/must-login-first.jsp"/>
-
-  <!-- Matches generic search results #1 -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{searchForm.go}"
-          toViewId="/search-problem.jsp"/>
-
-  <!-- Matches generic search results #2 -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{searchForm.go}"
-       fromOutcome="success"
-          toViewId="/search-results.jsp"/>
-
-
-  <!-- Negative tests that should not match any rules -->
-
-
-  <!-- Mismatched fromAction -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{foo.bar}"
-       fromOutcome="success"
-          toViewId="/login.jsp"/>
-
-  <!-- Mismatched fromOutcome -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.login}"
-       fromOutcome="foobar"
-          toViewId="/login.jsp"/>
-
-  <!-- Mismatched fromAction -->
-  <test fromViewId="/login.jsp"
-     fromAction="*"
-       fromOutcome="success"
-          toViewId="/login.jsp"/>
-
-  <!-- Mismatched fromOutcome -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.login}"
-       fromOutcome="*"
-          toViewId="/login.jsp"/>
-
-  <!-- Missing fromAction -->
-  <test fromViewId="/login.jsp"
-       fromOutcome="success"
-          toViewId="/login.jsp"/>
-
-  <!-- Missing fromOutcome -->
-  <test fromViewId="/login.jsp"
-     fromAction="#{userBean.login}"
-          toViewId="/login.jsp"/>
-
-
-  <!-- ============ Tests From /other.jsp view Identifier ================= -->
-
-
-  <!-- Positive tests that should match application wide rules -->
-
-
-  <!-- Matches the generic logout rule #1 -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{userBean.logout}"
-          toViewId="/logout.jsp"/>
-
-  <!-- Matches the generic logout rule #2 -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{userBean.logout}"
-       fromOutcome="whatever"
-          toViewId="/logout.jsp"/>
-
-  <!-- Matches generic error outcome rule #1 -->
-  <test fromViewId="/other.jsp"
-       fromOutcome="loginRequired"
-          toViewId="/must-login-first.jsp"/>
-
-  <!-- Matches generic error outcome rule #2 -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{foo.bar}"
-       fromOutcome="loginRequired"
-          toViewId="/must-login-first.jsp"/>
-
-  <!-- Matches generic search results #1 -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{searchForm.go}"
-          toViewId="/search-problem.jsp"/>
-
-  <!-- Matches generic search results #2 -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{searchForm.go}"
-       fromOutcome="success"
-          toViewId="/search-results.jsp"/>
-
-
-  <!-- Negative tests that should not match any rules -->
-
-
-  <!-- Mismatched fromAction -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{foo.bar}"
-       fromOutcome="success"
-          toViewId="/other.jsp"/>
-
-  <!-- Mismatched fromOutcome -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{userBean.login}"
-       fromOutcome="foobar"
-          toViewId="/other.jsp"/>
-
-  <!-- Missing fromAction -->
-  <test fromViewId="/other.jsp"
-       fromOutcome="success"
-          toViewId="/other.jsp"/>
-
-  <!-- Missing fromOutcome -->
-  <test fromViewId="/other.jsp"
-     fromAction="#{userBean.login}"
-          toViewId="/other.jsp"/>
-
-
-  <!-- ========= Tests From /movies/index.jsp View Identifier ============= -->
-
-
-  <!-- Positive tests that should match application wide rules -->
-
-
-  <!-- Matches the generic logout rule #1 -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{userBean.logout}"
-          toViewId="/logout.jsp"/>
-
-  <!-- Matches the generic logout rule #2 -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{userBean.logout}"
-       fromOutcome="whatever"
-          toViewId="/logout.jsp"/>
-
-  <!-- Matches generic error outcome rule #1 -->
-  <test fromViewId="/movies/index.jsp"
-       fromOutcome="loginRequired"
-          toViewId="/must-login-first.jsp"/>
-
-  <!-- Matches generic error outcome rule #2 -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{foo.bar}"
-       fromOutcome="loginRequired"
-          toViewId="/must-login-first.jsp"/>
-
-  <!-- Matches special search results #1 -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{searchForm.go}"
-          toViewId="/search-problem.jsp"/>
-
-  <!-- Matches special search results #2 -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{searchForm.go}"
-       fromOutcome="success"
-          toViewId="/movie-search-results.jsp"/>
-
-
-  <!-- Negative tests that should not match any rules -->
-
-
-  <!-- Mismatched fromAction -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{foo.bar}"
-       fromOutcome="success"
-          toViewId="/movies/index.jsp"/>
-
-  <!-- Mismatched fromOutcome -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{userBean.login}"
-       fromOutcome="foobar"
-          toViewId="/movies/index.jsp"/>
-
-  <!-- Missing fromAction -->
-  <test fromViewId="/movies/index.jsp"
-       fromOutcome="success"
-          toViewId="/movies/index.jsp"/>
-
-  <!-- Missing fromOutcome -->
-  <test fromViewId="/movies/index.jsp"
-     fromAction="#{userBean.login}"
-          toViewId="/movies/index.jsp"/>
-
-
-</tests>
diff --git a/jsf-ri/web/test/WEB-INF/none-scoped-beans.xml b/jsf-ri/web/test/WEB-INF/none-scoped-beans.xml
deleted file mode 100644
index 50baa0c..0000000
--- a/jsf-ri/web/test/WEB-INF/none-scoped-beans.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <managed-bean-name>outer</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.TestBean
-    </managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-    <managed-property>
-      <property-name>customerBean</property-name>
-      <value>#{customerBean}</value>
-    </managed-property>
-  </managed-bean>
-
-  <managed-bean>
-    <managed-bean-name>customerBean</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.CustomerBean
-    </managed-bean-class>
-    <managed-bean-scope>none</managed-bean-scope>
-    <managed-property>
-      <property-name>name</property-name>
-      <value>Bobby</value>
-    </managed-property>
-    <managed-property>
-      <property-name>symbol</property-name>
-      <value>GDP</value>
-    </managed-property>
-  </managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/renderkit1.xml b/jsf-ri/web/test/WEB-INF/renderkit1.xml
deleted file mode 100644
index 452b45a..0000000
--- a/jsf-ri/web/test/WEB-INF/renderkit1.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-        version="2.0">
-
-    <render-kit>
-        <render-kit-id>HTML_BASIC</render-kit-id>
-        <render-kit-class>com.sun.faces.renderkit.TestRenderKit$DecoratingRenderKit</render-kit-class>
-    </render-kit>
-
-</faces-config>
diff --git a/jsf-ri/web/test/WEB-INF/webinfAbsolute1.xml b/jsf-ri/web/test/WEB-INF/webinfAbsolute1.xml
deleted file mode 100644
index 5f7a08b..0000000
--- a/jsf-ri/web/test/WEB-INF/webinfAbsolute1.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0">
-
-    <absolute-ordering>
-        <name>a</name>
-        <name>b</name>
-        <name>c</name>
-    </absolute-ordering>
-</faces-config>
\ No newline at end of file
diff --git a/jsf-ri/web/test/WEB-INF/webinfAbsolute2.xml b/jsf-ri/web/test/WEB-INF/webinfAbsolute2.xml
deleted file mode 100644
index 46c0bf9..0000000
--- a/jsf-ri/web/test/WEB-INF/webinfAbsolute2.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-    version="2.0" metadata-complete="true">
-
-    <absolute-ordering>
-        <name>a</name>
-        <name>b</name>
-        <others/>
-        <name>c</name>
-    </absolute-ordering>
-</faces-config>
\ No newline at end of file
diff --git a/jsf-ri/web/test/WEB-INF/webinfAbsolute3.xml b/jsf-ri/web/test/WEB-INF/webinfAbsolute3.xml
deleted file mode 100644
index 3f1e7bf..0000000
--- a/jsf-ri/web/test/WEB-INF/webinfAbsolute3.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-</faces-config>
\ No newline at end of file
diff --git a/jsf-ri/web/test/components.jsp b/jsf-ri/web/test/components.jsp
deleted file mode 100644
index 84f5c7f..0000000
--- a/jsf-ri/web/test/components.jsp
+++ /dev/null
@@ -1,216 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Basic Components Test Page </TITLE> </HEAD>
-
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-    <BODY>
-        <H3> JSF Basic Components Test Page </H3>
-
-       <f:view>
-       <h:form id="basicForm">
-
-  <TABLE BORDER="1">
-
-
-      <TR>
-
-	<TD>
-
-	      <h:inputText id="userName" value="Default_username" />
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:inputSecret id="password" value="Default_password" />
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:commandButton id="login" value="Login" 
-				    action="login"/>
-
-	</TD>
-
-      </TR>
-
-
-      <TR>
-
-	<TD>
-
-	      <h:commandButton id="imageButton" image="duke.gif"
-				    action="login"/>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:commandLink id="link"
-				       value="link text"/>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:commandLink id="imageLink"
-
-                       value="duke.gif"/>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:outputText id="userLabel" value="Output Text" />
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:selectManyCheckbox id="validUser" label="Valid User"/>
-
-    </TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:selectOneListbox id="appleQuantity">
-
-		<f:selectItem  value="0" itemLabel="0"/>
-		<f:selectItem  value="1" itemLabel="1"/>
-		<f:selectItem  value="2" itemLabel="2"/>
-		<f:selectItem  value="3" itemLabel="3"/>
-		<f:selectItem  value="4" itemLabel="4"/>
-		<f:selectItem  value="5" itemLabel="5"/>
-		<f:selectItem  value="6" itemLabel="6"/>
-		<f:selectItem  value="7" itemLabel="7"/>
-		<f:selectItem  value="8" itemLabel="8"/>
-		<f:selectItem  value="9" itemLabel="9"/>
-
-	      </h:selectOneListbox>
-
-              Option List
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:selectOneRadio id="shipType">
-
-		<f:selectItem value="nextDay" itemLabel="Next Day" />
-		<f:selectItem value="nextWeek" itemLabel="Next Week" />
-		<f:selectItem value="nextMonth" itemLabel="Next Month" />
-
-              </h:selectOneRadio>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-		<h:selectOneRadio id="verticalRadio" border="1">
-
-            <f:selectItem value="nextDay" itemLabel="Next Day"/>
-		<f:selectItem value="nextWeek" itemLabel="Next Week"  />
-		<f:selectItem value="nextMonth" itemLabel="Next Month" />
-
-                </h:selectOneRadio>
-
-	</TD>
-
-      </TR>
-
-      <TR>
-
-	<TD>
-
-	      <h:inputTextarea id="address" value="Hi There"
-                                        rows="10" cols="10"/>
-
-	</TD>
-
-      </TR>
-
-  <TABLE>
-
-</h:form>
-</f:view>
-
-    </BODY>
-</HTML>
diff --git a/jsf-ri/web/test/config-with-failing-property-conversion.xml b/jsf-ri/web/test/config-with-failing-property-conversion.xml
deleted file mode 100644
index 3154398..0000000
--- a/jsf-ri/web/test/config-with-failing-property-conversion.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      A test bean 2.
-    </description>
-    <display-name>TestBean2</display-name>
-    <managed-bean-name>TestBean2</managed-bean-name>
-    <managed-bean-class>com.sun.faces.config.SimpleBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-    <managed-property>
-      <property-name>intProperty</property-name>
-      <property-class>java.lang.Integer</property-class>
-      <value>notAnInteger</value>
-    </managed-property>
-  </managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/web/test/config1.xml b/jsf-ri/web/test/config1.xml
deleted file mode 100644
index 482d995..0000000
--- a/jsf-ri/web/test/config1.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      A test bean.
-    </description>
-    <display-name>TestBean1</display-name>
-    <managed-bean-name>TestBean1</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.config.SimpleBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-   <component>
-     <component-type>tree</component-type>
-     <component-class>javax.faces.component.UICommand</component-class>
-   </component>
-   <render-kit>
-     <renderer>
-       <renderer-type>tree</renderer-type>
-       <renderer-class>com.sun.faces.renderkit.html_basic.CheckboxRenderer</renderer-class>
-     </renderer>
-   </render-kit> 
-
-   <lifecycle>
-     <phase-listener>com.sun.faces.config.SimplePhaseListener</phase-listener>
-   </lifecycle>
-
-
-</faces-config>
diff --git a/jsf-ri/web/test/config2.xml b/jsf-ri/web/test/config2.xml
deleted file mode 100644
index 3e40459..0000000
--- a/jsf-ri/web/test/config2.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <managed-bean>
-    <!-- Basic information about this bean -->
-    <description>
-      A test bean 2.
-    </description>
-    <display-name>TestBean2</display-name>
-    <managed-bean-name>TestBean2</managed-bean-name>
-    <managed-bean-class>
-      com.sun.faces.config.SimpleBean
-    </managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-</faces-config>
diff --git a/jsf-ri/web/test/duke.gif b/jsf-ri/web/test/duke.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/duke.gif and /dev/null differ
diff --git a/jsf-ri/web/test/evaluationTests.txt b/jsf-ri/web/test/evaluationTests.txt
deleted file mode 100644
index a895470..0000000
--- a/jsf-ri/web/test/evaluationTests.txt
+++ /dev/null
@@ -1,940 +0,0 @@
-* The set of evaluator tests
-* NOTE! Comment lines start with * instead of #, because # is used
-* as the first character in a JSF EL delimiter
-*######################################################
-* testing mixture of strings and expressions
-abc
-java.lang.String
-#{ 3}
-int
-a#{
-java.lang.String
-a#{ 5 }
-java.lang.String
-#{ 3 }b
-java.lang.String
-#{ 1 }#{ 2 }
-java.lang.String
-abc #{ 1} #{ 2} def
-java.lang.String
-
-* testing values that end with or contain "#"
-#
-java.lang.String
-\#
-java.lang.String
-  #  
-java.lang.String
-test#
-java.lang.String
-#test
-java.lang.String
-test#test
-java.lang.String
-test###
-java.lang.String
-test###{ 34 }
-java.lang.String
-test###{ 34 }##
-java.lang.String
-test##{ 34 }
-java.lang.String
-##{ 34 }
-java.lang.String
-##
-java.lang.String
-test##
-java.lang.String
-test##test
-java.lang.String
-#{ 34 }##{ 34 }
-java.lang.String
-
-
-*######################################################
-* basic literals
-#{1}
-int
-#{-12}
-int
-#{true}
-boolean
-#{false}
-boolean
-#{null}
-null
-#{4.2}
-double
-#{-21.3}
-double
-#{4.}
-double
-#{.21}
-double
-#{3e-1}
-double
-#{.2222222222}
-double
-
-
-*######################################################
-* basic relationals between literals
-
-#{1 < 2}
-boolean
-#{1 > 2}
-boolean
-#{1 >= 2}
-boolean
-#{1 <= 2}
-boolean
-#{1 == 2}
-boolean
-#{1 != 2}
-boolean
-#{3 >= 3}
-boolean
-#{3 <= 3}
-boolean
-#{3 == 3}
-boolean
-#{3 < 3}
-boolean
-#{3 > 3}
-boolean
-#{3 != 3}
-boolean
-
-
-*######################################################
-* relationals between booleans
-
-#{false < true}
-java.lang.Object
-#{false > true}
-java.lang.Object
-#{true >= true}
-java.lang.Object
-#{true <= true}
-java.lang.Object
-#{true == true}
-java.lang.Object
-#{true != true}
-java.lang.Object
-
-*######################################################
-* looking up objects in scopes
-
-* val1b - defined in request scope
-#{requestScope.val1b}
-java.lang.String
-#{sessionScope.val1b}
-java.lang.String
-#{applicationScope.val1b}
-java.lang.String
-#{val1b}
-java.lang.String
-
-* val1c - defined in session scope
-#{requestScope.val1c}
-java.lang.String
-#{sessionScope.val1c}
-java.lang.String
-#{applicationScope.val1c}
-java.lang.String
-#{val1c}
-java.lang.String
-
-* val1d - defined in application scope
-#{requestScope.val1d}
-java.lang.String
-#{sessionScope.val1d}
-java.lang.String
-#{applicationScope.val1d}
-java.lang.String
-#{val1d}
-java.lang.String
-
-*######################################################
-* accessing properties
-
-#{bean1a.int1}
-int
-#{bean1a.boolean1}
-boolean
-#{bean1a.string1}
-java.lang.String
-#{bean1a.bean1.int2}
-java.lang.Integer
-#{bean1a.bean1.bean2.string2}
-java.lang.String
-#{bean1a.byte1}
-byte
-#{bean1a.char1}
-char
-#{bean1a.short1}
-short
-#{bean1a.long1}
-long
-#{bean1a.float1}
-float
-#{bean1a.double1}
-double
-
-*######################################################
-* test the entire relational comparison type promotion matrix
-
-#{bean1a.byte1 < bean1a.byte1}
-boolean
-#{bean1a.byte1 < bean1a.char1}
-boolean
-#{bean1a.byte1 < bean1a.short1}
-boolean
-#{bean1a.byte1 < bean1a.int1}
-boolean
-#{bean1a.byte1 < bean1a.long1}
-boolean
-#{bean1a.byte1 < bean1a.float1}
-boolean
-#{bean1a.byte1 < bean1a.double1}
-boolean
-
-#{bean1a.char1 < bean1a.byte1}
-boolean
-#{bean1a.char1 < bean1a.char1}
-boolean
-#{bean1a.char1 < bean1a.short1}
-boolean
-#{bean1a.char1 < bean1a.int1}
-boolean
-#{bean1a.char1 < bean1a.long1}
-boolean
-#{bean1a.char1 < bean1a.float1}
-boolean
-#{bean1a.char1 < bean1a.double1}
-boolean
-
-#{bean1a.short1 < bean1a.byte1}
-boolean
-#{bean1a.short1 < bean1a.char1}
-boolean
-#{bean1a.short1 < bean1a.short1}
-boolean
-#{bean1a.short1 < bean1a.int1}
-boolean
-#{bean1a.short1 < bean1a.long1}
-boolean
-#{bean1a.short1 < bean1a.float1}
-boolean
-#{bean1a.short1 < bean1a.double1}
-boolean
-
-#{bean1a.int1 < bean1a.byte1}
-boolean
-#{bean1a.int1 < bean1a.char1}
-boolean
-#{bean1a.int1 < bean1a.short1}
-boolean
-#{bean1a.int1 < bean1a.int1}
-boolean
-#{bean1a.int1 < bean1a.long1}
-boolean
-#{bean1a.int1 < bean1a.float1}
-boolean
-#{bean1a.int1 < bean1a.double1}
-boolean
-
-#{bean1a.long1 < bean1a.byte1}
-boolean
-#{bean1a.long1 < bean1a.char1}
-boolean
-#{bean1a.long1 < bean1a.short1}
-boolean
-#{bean1a.long1 < bean1a.int1}
-boolean
-#{bean1a.long1 < bean1a.long1}
-boolean
-#{bean1a.long1 < bean1a.float1}
-boolean
-#{bean1a.long1 < bean1a.double1}
-boolean
-
-#{bean1a.float1 < bean1a.byte1}
-boolean
-#{bean1a.float1 < bean1a.char1}
-boolean
-#{bean1a.float1 < bean1a.short1}
-boolean
-#{bean1a.float1 < bean1a.int1}
-boolean
-#{bean1a.float1 < bean1a.long1}
-boolean
-#{bean1a.float1 < bean1a.float1}
-boolean
-#{bean1a.float1 < bean1a.double1}
-boolean
-
-#{bean1a.double1 < bean1a.byte1}
-boolean
-#{bean1a.double1 < bean1a.char1}
-boolean
-#{bean1a.double1 < bean1a.short1}
-boolean
-#{bean1a.double1 < bean1a.int1}
-boolean
-#{bean1a.double1 < bean1a.long1}
-boolean
-#{bean1a.double1 < bean1a.float1}
-boolean
-#{bean1a.double1 < bean1a.double1}
-boolean
-
-*######################################################
-* test other relational comparison rules
-
-#{null == null}
-boolean
-#{noSuchAttribute == noSuchAttribute}
-boolean
-#{noSuchAttribute == null}
-boolean
-#{null == noSuchAttribute}
-boolean
-#{bean1a == null}
-boolean
-#{null == bean1a}
-boolean
-#{bean1a == bean1a}
-boolean
-#{bean1a > "hello"}
-boolean
-#{bean1a.bean1 < 14}
-boolean
-#{bean1a.bean1 == "hello"}
-boolean
-
-*######################################################
-* test String comparisons
-
-#{bean1a.string1 == "hello"}
-boolean
-#{bean1a.string1 != "hello"}
-boolean
-#{bean1a.string1 == "goodbye"}
-boolean
-#{bean1a.string1 != "goodbye"}
-boolean
-#{bean1a.string1 > "goodbye"}
-boolean
-#{"hello" == bean1a.string1}
-boolean
-#{"goodbye" > bean1a.string1}
-boolean
-
-*######################################################
-* test errors in property traversal
-
-#{noSuchAttribute.abc}
-java.lang.Object
-#{bean1a.bean2.byte1}
-java.lang.Object
-#{bean1a.noProperty}
-java.lang.Object
-#{bean1a.noGetter}
-java.lang.Object
-#{bean1a.errorInGetter}
-java.lang.Object
-#{bean1a.bean2.string2}
-java.lang.Object
-
-*######################################################
-* test accessing public properties from private classes
-
-#{pbean1.value}
-java.lang.Object
-#{pbean2.value}
-java.lang.Object
-#{pbean3.value}
-java.lang.Object
-#{pbean4.value}
-java.lang.Object
-#{pbean5.value}
-java.lang.Object
-#{pbean6.value}
-java.lang.Object
-#{pbean7.value}
-java.lang.Object
-
-
-*######################################################
-* test reserved words as identifiers
-
-#{and}
-java.lang.Object
-#{or}
-java.lang.Object
-#{not}
-java.lang.Object
-#{eq}
-java.lang.Object
-#{ne}
-java.lang.Object
-#{lt}
-java.lang.Object
-#{gt}
-java.lang.Object
-#{le}
-java.lang.Object
-#{ge}
-java.lang.Object
-#{instanceof}
-java.lang.Object
-#{true}
-java.lang.Object
-#{false}
-java.lang.Object
-#{null}
-java.lang.Object
-
-
-*######################################################
-* test reserved words as property names
-
-#{bean1a.and}
-java.lang.Object
-#{bean1a.or}
-java.lang.Object
-#{bean1a.not}
-java.lang.Object
-#{bean1a.eq}
-java.lang.Object
-#{bean1a.ne}
-java.lang.Object
-#{bean1a.lt}
-java.lang.Object
-#{bean1a.gt}
-java.lang.Object
-#{bean1a.le}
-java.lang.Object
-#{bean1a.ge}
-java.lang.Object
-#{bean1a.instanceof}
-java.lang.Object
-#{bean1a.page}
-java.lang.Object
-#{bean1a.request}
-java.lang.Object
-#{bean1a.session}
-java.lang.Object
-#{bean1a.application}
-java.lang.Object
-#{bean1a.true}
-java.lang.Object
-#{bean1a.false}
-java.lang.Object
-#{bean1a.null}
-java.lang.Object
-
-*######################################################
-* test arithmetic
-
-#{3+5}
-java.lang.Object
-#{3-5}
-java.lang.Object
-#{3/5}
-java.lang.Object
-#{3*5}
-java.lang.Object
-#{3*5.0}
-java.lang.Object
-#{3.0*5}
-java.lang.Object
-#{3.0*5.0}
-java.lang.Object
-#{225 % 17}
-java.lang.Object
-
-#{ 1 + 2 + 3 * 5 + 6}
-java.lang.Object
-#{ 1 + (2 + 3) * 5 + 6}
-java.lang.Object
-
-*######################################################
-* test logical operators
-
-#{ true}
-java.lang.Object
-#{ not true}
-java.lang.Object
-#{ not false}
-java.lang.Object
-#{ not not true}
-java.lang.Object
-#{ not not false}
-java.lang.Object
-#{ true and false}
-java.lang.Object
-#{ true and true}
-java.lang.Object
-#{ false and true}
-java.lang.Object
-#{ false and false}
-java.lang.Object
-#{ true or false}
-java.lang.Object
-#{ true or true}
-java.lang.Object
-#{ false or true}
-java.lang.Object
-#{ false or false}
-java.lang.Object
-
-#{ false or false or false or true and false}
-java.lang.Object
-#{ false or false or false or true and false or true}
-java.lang.Object
-
-*######################################################
-* test indexed access operator
-
-* Test as equivalent to property accessor
-#{ bean1a["double1"] }
-java.lang.Object
-#{ bean1a["double1"].class }
-java.lang.Object
-
-* Test as array accessor
-#{ bean1a.stringArray1[-1]}
-java.lang.Object
-#{ bean1a.stringArray1[0]}
-java.lang.Object
-#{ bean1a.stringArray1[1]}
-java.lang.Object
-#{ bean1a.stringArray1[2]}
-java.lang.Object
-#{ bean1a.stringArray1[3]}
-java.lang.Object
-#{ bean1a.stringArray1[4]}
-java.lang.Object
-
-* Test as list accessor
-#{ bean1a.list1 [0] }
-java.lang.Object
-#{ bean1a.list1 [1] }
-java.lang.Object
-#{ bean1a.list1 [2][2] }
-java.lang.Object
-
-* Test as indexed property accessor
-#{ bean1a.indexed1[-1]}
-java.lang.Object
-#{ bean1a.indexed1[0]}
-java.lang.Object
-#{ bean1a.indexed1[1]}
-java.lang.Object
-#{ bean1a.indexed1[2]}
-java.lang.Object
-#{ bean1a.indexed1[3]}
-java.lang.Object
-#{ bean1a.indexed1[4]}
-java.lang.Object
-
-* Test as map accessor
-#{ bean1a.map1.noKey }
-java.lang.Object
-#{ bean1a.map1.key1 }
-java.lang.Object
-#{ bean1a.map1 ["key1"] }
-java.lang.Object
-#{ bean1a.map1 [14] }
-java.lang.Object
-#{ bean1a.map1 [2 * 7] }
-java.lang.Object
-#{ bean1a.map1.recurse.list1[0] }
-java.lang.Object
-
-* Test UIComponent as bean
-#{view.rendered}
-java.lang.Boolean
-#{view.attributes.rendered}
-java.lang.Boolean
-#{view.children[0].value}
-java.lang.String
-#{view.children[0].rendered}
-java.lang.Boolean
-
-*######################################################
-* test String concatenation
-
-#{ "a" + "bcd" }
-java.lang.Object
-#{ "a" + (4*3) }
-java.lang.Object
-#{ bean1a.map1 ["key" + (5-4)] }
-java.lang.Object
-
-*######################################################
-* test String comparisons
-
-#{ "30" < "4" }
-java.lang.Object
-#{ 30 < "4" }
-java.lang.Object
-#{ 30 > "4" }
-java.lang.Object
-#{ "0004" == "4" }
-java.lang.Object
-
-*######################################################
-* test relational comparison with alternate symbols
-
-#{ 4 eq 3}
-java.lang.Object
-#{ 4 ne 3}
-java.lang.Object
-#{ 4 eq 4}
-java.lang.Object
-#{ 4 ne 4}
-java.lang.Object
-#{ 4 lt 3}
-java.lang.Object
-#{ 4 gt 3}
-java.lang.Object
-#{ 4 le 3}
-java.lang.Object
-#{ 4 ge 3}
-java.lang.Object
-#{ 4 le 4}
-java.lang.Object
-#{ 4 ge 4}
-java.lang.Object
-
-*######################################################
-* test expressions on the left side of a value suffix
-
-#{(3).class}
-java.lang.Object
-#{(bean1a.map1)["key1"]}
-java.lang.Object
-
-
-*######################################################
-* test String/boolean logical operators
-
-#{'true' and false}
-java.lang.Object
-#{'true' or true}
-java.lang.Object
-#{false and 'true'}
-java.lang.Object
-#{false or 'true'}
-java.lang.Object
-
-*######################################################
-* test empty operator
-
-#{ empty "A"}
-java.lang.Object
-#{ empty "" }
-java.lang.Object
-#{ empty null }
-java.lang.Object
-#{ empty false}
-java.lang.Object
-#{ empty 0}
-java.lang.Object
-#{ not empty 0}
-java.lang.Object
-#{ not empty empty 0}
-java.lang.Object
-#{ empty emptyTests.emptyArray }
-java.lang.Object
-#{ empty emptyTests.nonemptyArray }
-java.lang.Object
-#{ empty emptyTests.emptyList }
-java.lang.Object
-#{ empty emptyTests.nonemptyList }
-java.lang.Object
-#{ empty emptyTests.emptyMap }
-java.lang.Object
-#{ empty emptyTests.nonemptyMap }
-java.lang.Object
-#{ empty emptyTests.emptySet }
-java.lang.Object
-#{ empty emptyTests.nonemptySet }
-java.lang.Object
-
-*######################################################
-* test String arithmetic
-
-#{ "6" / "3" }
-java.lang.Object
-#{ 3 + "4" }
-java.lang.Object
-#{ "4" + 3 }
-java.lang.Object
-#{ 3 + "4.5" }
-java.lang.Object
-#{ "4.5" + 3 }
-java.lang.Object
-#{ 3.0 + 6.0}
-java.lang.Object
-#{ 31121.0 * 61553.0 }
-java.lang.Object
-#{ 31121 * 61553 }
-java.lang.Object
-#{ 65536 * 65536 * 65536 * 32759 }
-java.lang.Object
-#{ 9220838762064379904.0 - 9220838762064379900.0 }
-java.lang.Object
-#{ 9220838762064379904 - 9220838762064379900 }
-java.lang.Object
-
-*######################################################
-* test relational operators involving null
-
-#{ null == null }
-java.lang.Object
-#{ null != null }
-java.lang.Object
-#{ null > null }
-java.lang.Object
-#{ null < null }
-java.lang.Object
-#{ null >= null }
-java.lang.Object
-#{ null <= null }
-java.lang.Object
-
-#{ null == 3 }
-java.lang.Object
-#{ null != 3 }
-java.lang.Object
-#{ null > 3 }
-java.lang.Object
-#{ null < 3 }
-java.lang.Object
-#{ null >= 3 }
-java.lang.Object
-#{ null <= 3 }
-java.lang.Object
-
-#{ 3 == null }
-java.lang.Object
-#{ 3 != null }
-java.lang.Object
-#{ 3 > null }
-java.lang.Object
-#{ 3 < null }
-java.lang.Object
-#{ 3 >= null }
-java.lang.Object
-#{ 3 <= null }
-java.lang.Object
-
-#{ null == "" }
-java.lang.Object
-#{ null != "" }
-java.lang.Object
-#{ "" == null }
-java.lang.Object
-#{ "" != null }
-java.lang.Object
-
-*######################################################
-* arithmetic operators involving Strings
-
-#{ 4 + 3 }
-java.lang.Object
-#{ 4.0 + 3 }
-java.lang.Object
-#{ 4 + 3.0 }
-java.lang.Object
-#{ 4.0 + 3.0 }
-java.lang.Object
-#{ "4" + 3 }
-java.lang.Object
-#{ "4.0" + 3 }
-java.lang.Object
-#{ "4" + 3.0 }
-java.lang.Object
-#{ "4.0" + 3.0 }
-java.lang.Object
-#{ 4 + "3" }
-java.lang.Object
-#{ 4.0 + "3" }
-java.lang.Object
-#{ 4 + "3.0" }
-java.lang.Object
-#{ 4.0 + "3.0" }
-java.lang.Object
-#{ "4" + "3" }
-java.lang.Object
-#{ "4.0" + "3" }
-java.lang.Object
-#{ "4" + "3.0" }
-java.lang.Object
-#{ "4.0" + "3.0" }
-java.lang.Object
-
-
-#{ 4 - 3 }
-java.lang.Object
-#{ 4.0 - 3 }
-java.lang.Object
-#{ 4 - 3.0 }
-java.lang.Object
-#{ 4.0 - 3.0 }
-java.lang.Object
-#{ "4" - 3 }
-java.lang.Object
-#{ "4.0" - 3 }
-java.lang.Object
-#{ "4" - 3.0 }
-java.lang.Object
-#{ "4.0" - 3.0 }
-java.lang.Object
-#{ 4 - "3" }
-java.lang.Object
-#{ 4.0 - "3" }
-java.lang.Object
-#{ 4 - "3.0" }
-java.lang.Object
-#{ 4.0 - "3.0" }
-java.lang.Object
-#{ "4" - "3" }
-java.lang.Object
-#{ "4.0" - "3" }
-java.lang.Object
-#{ "4" - "3.0" }
-java.lang.Object
-#{ "4.0" - "3.0" }
-java.lang.Object
-
-
-#{ 4 * 3 }
-java.lang.Object
-#{ 4.0 * 3 }
-java.lang.Object
-#{ 4 * 3.0 }
-java.lang.Object
-#{ 4.0 * 3.0 }
-java.lang.Object
-#{ "4" * 3 }
-java.lang.Object
-#{ "4.0" * 3 }
-java.lang.Object
-#{ "4" * 3.0 }
-java.lang.Object
-#{ "4.0" * 3.0 }
-java.lang.Object
-#{ 4 * "3" }
-java.lang.Object
-#{ 4.0 * "3" }
-java.lang.Object
-#{ 4 * "3.0" }
-java.lang.Object
-#{ 4.0 * "3.0" }
-java.lang.Object
-#{ "4" * "3" }
-java.lang.Object
-#{ "4.0" * "3" }
-java.lang.Object
-#{ "4" * "3.0" }
-java.lang.Object
-#{ "4.0" * "3.0" }
-java.lang.Object
-
-
-#{ 4 / 3 }
-java.lang.Object
-#{ 4.0 / 3 }
-java.lang.Object
-#{ 4 / 3.0 }
-java.lang.Object
-#{ 4.0 / 3.0 }
-java.lang.Object
-#{ "4" / 3 }
-java.lang.Object
-#{ "4.0" / 3 }
-java.lang.Object
-#{ "4" / 3.0 }
-java.lang.Object
-#{ "4.0" / 3.0 }
-java.lang.Object
-#{ 4 / "3" }
-java.lang.Object
-#{ 4.0 / "3" }
-java.lang.Object
-#{ 4 / "3.0" }
-java.lang.Object
-#{ 4.0 / "3.0" }
-java.lang.Object
-#{ "4" / "3" }
-java.lang.Object
-#{ "4.0" / "3" }
-java.lang.Object
-#{ "4" / "3.0" }
-java.lang.Object
-#{ "4.0" / "3.0" }
-java.lang.Object
-
-
-#{ 4 % 3 }
-java.lang.Object
-#{ 4.0 % 3 }
-java.lang.Object
-#{ 4 % 3.0 }
-java.lang.Object
-#{ 4.0 % 3.0 }
-java.lang.Object
-#{ "4" % 3 }
-java.lang.Object
-#{ "4.0" % 3 }
-java.lang.Object
-#{ "4" % 3.0 }
-java.lang.Object
-#{ "4.0" % 3.0 }
-java.lang.Object
-#{ 4 % "3" }
-java.lang.Object
-#{ 4.0 % "3" }
-java.lang.Object
-#{ 4 % "3.0" }
-java.lang.Object
-#{ 4.0 % "3.0" }
-java.lang.Object
-#{ "4" % "3" }
-java.lang.Object
-#{ "4.0" % "3" }
-java.lang.Object
-#{ "4" % "3.0" }
-java.lang.Object
-#{ "4.0" % "3.0" }
-java.lang.Object
-
-
-#{ "8" / "2" }
-java.lang.Object
-#{ "4e2" + "3" }
-java.lang.Object
-#{ "4" + "3e2" }
-java.lang.Object
-#{ "4e2" + "3e2" }
-java.lang.Object
-
-
-*######################################################
-* unary minus operator involving Strings
-
-#{ -3 }
-java.lang.Object
-#{ -3.0 }
-java.lang.Object
-#{ -"3" }
-java.lang.Object
-#{ -"3.0" }
-java.lang.Object
-#{ -"3e2" }
-java.lang.Object
diff --git a/jsf-ri/web/test/evaluationTestsOutput.txt b/jsf-ri/web/test/evaluationTestsOutput.txt
deleted file mode 100644
index 67b7a23..0000000
--- a/jsf-ri/web/test/evaluationTestsOutput.txt
+++ /dev/null
@@ -1,2028 +0,0 @@
-* The set of evaluator tests
-* NOTE! Comment lines start with * instead of #, because # is used
-* as the first character in a JSF EL delimiter
-*######################################################
-* testing mixture of strings and expressions
-Expression: abc
-ExpectedType: class java.lang.String
-Evaluates to: abc
-With type: class java.lang.String
-
-Expression: #{ 3}
-ExpectedType: int
-Evaluates to: 3
-With type: class java.lang.Long
-
-Expression: a#{
-ExpectedType: class java.lang.String
-Evaluates to: a#{
-With type: class java.lang.String
-
-Expression: a#{ 5 }
-ExpectedType: class java.lang.String
-Evaluates to: a5
-With type: class java.lang.String
-
-Expression: #{ 3 }b
-ExpectedType: class java.lang.String
-Evaluates to: 3b
-With type: class java.lang.String
-
-Expression: #{ 1 }#{ 2 }
-ExpectedType: class java.lang.String
-Evaluates to: 12
-With type: class java.lang.String
-
-Expression: abc #{ 1} #{ 2} def
-ExpectedType: class java.lang.String
-Evaluates to: abc 1 2 def
-With type: class java.lang.String
-
-
-* testing values that end with or contain "#"
-Expression: #
-ExpectedType: class java.lang.String
-Evaluates to: #
-With type: class java.lang.String
-
-Expression: \#
-ExpectedType: class java.lang.String
-Evaluates to: \#
-With type: class java.lang.String
-
-Expression:   #  
-ExpectedType: class java.lang.String
-Evaluates to:   #  
-With type: class java.lang.String
-
-Expression: test#
-ExpectedType: class java.lang.String
-Evaluates to: test#
-With type: class java.lang.String
-
-Expression: #test
-ExpectedType: class java.lang.String
-Evaluates to: #test
-With type: class java.lang.String
-
-Expression: test#test
-ExpectedType: class java.lang.String
-Evaluates to: test#test
-With type: class java.lang.String
-
-Expression: test###
-ExpectedType: class java.lang.String
-Evaluates to: test###
-With type: class java.lang.String
-
-Expression: test###{ 34 }
-ExpectedType: class java.lang.String
-Evaluates to: test##34
-With type: class java.lang.String
-
-Expression: test###{ 34 }##
-ExpectedType: class java.lang.String
-Evaluates to: test##34##
-With type: class java.lang.String
-
-Expression: test##{ 34 }
-ExpectedType: class java.lang.String
-Evaluates to: test#34
-With type: class java.lang.String
-
-Expression: ##{ 34 }
-ExpectedType: class java.lang.String
-Evaluates to: #34
-With type: class java.lang.String
-
-Expression: ##
-ExpectedType: class java.lang.String
-Evaluates to: ##
-With type: class java.lang.String
-
-Expression: test##
-ExpectedType: class java.lang.String
-Evaluates to: test##
-With type: class java.lang.String
-
-Expression: test##test
-ExpectedType: class java.lang.String
-Evaluates to: test##test
-With type: class java.lang.String
-
-Expression: #{ 34 }##{ 34 }
-ExpectedType: class java.lang.String
-Evaluates to: 34#34
-With type: class java.lang.String
-
-
-
-*######################################################
-* basic literals
-Expression: #{1}
-ExpectedType: int
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{-12}
-ExpectedType: int
-Evaluates to: -12
-With type: class java.lang.Long
-
-Expression: #{true}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{false}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{null}
-ExpectedType: null
-Evaluates to: null
-
-Expression: #{4.2}
-ExpectedType: double
-Evaluates to: 4.2
-With type: class java.lang.Double
-
-Expression: #{-21.3}
-ExpectedType: double
-Evaluates to: -21.3
-With type: class java.lang.Double
-
-Expression: #{4.}
-ExpectedType: double
-Evaluates to: 4.0
-With type: class java.lang.Double
-
-Expression: #{.21}
-ExpectedType: double
-Evaluates to: 0.21
-With type: class java.lang.Double
-
-Expression: #{3e-1}
-ExpectedType: double
-Evaluates to: 0.3
-With type: class java.lang.Double
-
-Expression: #{.2222222222}
-ExpectedType: double
-Evaluates to: 0.2222222222
-With type: class java.lang.Double
-
-
-
-*######################################################
-* basic relationals between literals
-
-Expression: #{1 < 2}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{1 > 2}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{1 >= 2}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{1 <= 2}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{1 == 2}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{1 != 2}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{3 >= 3}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{3 <= 3}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{3 == 3}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{3 < 3}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{3 > 3}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{3 != 3}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-
-*######################################################
-* relationals between booleans
-
-Expression: #{false < true}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.EvaluationException: com.sun.faces.el.impl.ElException: Attempt to apply operator "<" to arguments of type "java.lang.Boolean" and "java.lang.Boolean"
-Expression: #{false > true}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.EvaluationException: com.sun.faces.el.impl.ElException: Attempt to apply operator ">" to arguments of type "java.lang.Boolean" and "java.lang.Boolean"
-Expression: #{true >= true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{true <= true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{true == true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{true != true}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-*######################################################
-* looking up objects in scopes
-
-* val1b - defined in request scope
-Expression: #{requestScope.val1b}
-ExpectedType: class java.lang.String
-Evaluates to: request-scoped1
-With type: class java.lang.String
-
-Expression: #{sessionScope.val1b}
-ExpectedType: class java.lang.String
-Evaluates to: null
-
-Expression: #{applicationScope.val1b}
-ExpectedType: class java.lang.String
-Evaluates to: null
-
-Expression: #{val1b}
-ExpectedType: class java.lang.String
-Evaluates to: request-scoped1
-With type: class java.lang.String
-
-
-* val1c - defined in session scope
-Expression: #{requestScope.val1c}
-ExpectedType: class java.lang.String
-Evaluates to: null
-
-Expression: #{sessionScope.val1c}
-ExpectedType: class java.lang.String
-Evaluates to: session-scoped1
-With type: class java.lang.String
-
-Expression: #{applicationScope.val1c}
-ExpectedType: class java.lang.String
-Evaluates to: null
-
-Expression: #{val1c}
-ExpectedType: class java.lang.String
-Evaluates to: session-scoped1
-With type: class java.lang.String
-
-
-* val1d - defined in application scope
-Expression: #{requestScope.val1d}
-ExpectedType: class java.lang.String
-Evaluates to: null
-
-Expression: #{sessionScope.val1d}
-ExpectedType: class java.lang.String
-Evaluates to: null
-
-Expression: #{applicationScope.val1d}
-ExpectedType: class java.lang.String
-Evaluates to: app-scoped1
-With type: class java.lang.String
-
-Expression: #{val1d}
-ExpectedType: class java.lang.String
-Evaluates to: app-scoped1
-With type: class java.lang.String
-
-
-*######################################################
-* accessing properties
-
-Expression: #{bean1a.int1}
-ExpectedType: int
-Evaluates to: 4
-With type: class java.lang.Integer
-
-Expression: #{bean1a.boolean1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.string1}
-ExpectedType: class java.lang.String
-Evaluates to: hello
-With type: class java.lang.String
-
-Expression: #{bean1a.bean1.int2}
-ExpectedType: class java.lang.Integer
-Evaluates to: -224
-With type: class java.lang.Integer
-
-Expression: #{bean1a.bean1.bean2.string2}
-ExpectedType: class java.lang.String
-Evaluates to: bean3's string
-With type: class java.lang.String
-
-Expression: #{bean1a.byte1}
-ExpectedType: byte
-Evaluates to: 12
-With type: class java.lang.Byte
-
-Expression: #{bean1a.char1}
-ExpectedType: char
-Evaluates to: b
-With type: class java.lang.Character
-
-Expression: #{bean1a.short1}
-ExpectedType: short
-Evaluates to: 98
-With type: class java.lang.Short
-
-Expression: #{bean1a.long1}
-ExpectedType: long
-Evaluates to: 98
-With type: class java.lang.Long
-
-Expression: #{bean1a.float1}
-ExpectedType: float
-Evaluates to: 12.4
-With type: class java.lang.Float
-
-Expression: #{bean1a.double1}
-ExpectedType: double
-Evaluates to: 89.224
-With type: class java.lang.Double
-
-
-*######################################################
-* test the entire relational comparison type promotion matrix
-
-Expression: #{bean1a.byte1 < bean1a.byte1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.byte1 < bean1a.char1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.byte1 < bean1a.short1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.byte1 < bean1a.int1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.byte1 < bean1a.long1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.byte1 < bean1a.float1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.byte1 < bean1a.double1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-Expression: #{bean1a.char1 < bean1a.byte1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.char1 < bean1a.char1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.char1 < bean1a.short1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.char1 < bean1a.int1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.char1 < bean1a.long1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.char1 < bean1a.float1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.char1 < bean1a.double1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-Expression: #{bean1a.short1 < bean1a.byte1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.short1 < bean1a.char1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.short1 < bean1a.short1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.short1 < bean1a.int1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.short1 < bean1a.long1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.short1 < bean1a.float1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.short1 < bean1a.double1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-Expression: #{bean1a.int1 < bean1a.byte1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.int1 < bean1a.char1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.int1 < bean1a.short1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.int1 < bean1a.int1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.int1 < bean1a.long1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.int1 < bean1a.float1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.int1 < bean1a.double1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-Expression: #{bean1a.long1 < bean1a.byte1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.long1 < bean1a.char1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.long1 < bean1a.short1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.long1 < bean1a.int1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.long1 < bean1a.long1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.long1 < bean1a.float1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.long1 < bean1a.double1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-Expression: #{bean1a.float1 < bean1a.byte1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.float1 < bean1a.char1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.float1 < bean1a.short1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.float1 < bean1a.int1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.float1 < bean1a.long1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.float1 < bean1a.float1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.float1 < bean1a.double1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-Expression: #{bean1a.double1 < bean1a.byte1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.double1 < bean1a.char1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.double1 < bean1a.short1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.double1 < bean1a.int1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.double1 < bean1a.long1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.double1 < bean1a.float1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.double1 < bean1a.double1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test other relational comparison rules
-
-Expression: #{null == null}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{noSuchAttribute == noSuchAttribute}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{noSuchAttribute == null}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{null == noSuchAttribute}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a == null}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{null == bean1a}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a == bean1a}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a > "hello"}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.bean1 < 14}
-ExpectedType: boolean
-Causes an error: javax.faces.el.EvaluationException: com.sun.faces.el.impl.ElException: Attempt to coerce a value of type "com.sun.faces.el.impl.Bean1" to type "java.lang.Long"
-Expression: #{bean1a.bean1 == "hello"}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test String comparisons
-
-Expression: #{bean1a.string1 == "hello"}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.string1 != "hello"}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.string1 == "goodbye"}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.string1 != "goodbye"}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{bean1a.string1 > "goodbye"}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{"hello" == bean1a.string1}
-ExpectedType: boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{"goodbye" > bean1a.string1}
-ExpectedType: boolean
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test errors in property traversal
-
-Expression: #{noSuchAttribute.abc}
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-Expression: #{bean1a.bean2.byte1}
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-Expression: #{bean1a.noProperty}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'noProperty' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{bean1a.noGetter}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'noGetter' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{bean1a.errorInGetter}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.EvaluationException: javax.faces.el.EvaluationException: Error getting property 'errorInGetter' from bean of type com.sun.faces.el.impl.Bean1: java.lang.NullPointerException: Error!
-Expression: #{bean1a.bean2.string2}
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-
-*######################################################
-* test accessing public properties from private classes
-
-Expression: #{pbean1.value}
-ExpectedType: class java.lang.Object
-Evaluates to: got the value
-With type: class java.lang.String
-
-Expression: #{pbean2.value}
-ExpectedType: class java.lang.Object
-Evaluates to: got the value
-With type: class java.lang.String
-
-Expression: #{pbean3.value}
-ExpectedType: class java.lang.Object
-Evaluates to: got the value
-With type: class java.lang.String
-
-Expression: #{pbean4.value}
-ExpectedType: class java.lang.Object
-Evaluates to: got the value
-With type: class java.lang.String
-
-Expression: #{pbean5.value}
-ExpectedType: class java.lang.Object
-Evaluates to: got the value
-With type: class java.lang.String
-
-Expression: #{pbean6.value}
-ExpectedType: class java.lang.Object
-Evaluates to: got the value
-With type: class java.lang.String
-
-Expression: #{pbean7.value}
-ExpectedType: class java.lang.Object
-Evaluates to: got the value
-With type: class java.lang.String
-
-
-
-*######################################################
-* test reserved words as identifiers
-
-Expression: #{and}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: and
-Expression: #{or}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: or
-Expression: #{not}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: not
-Expression: #{eq}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: eq
-Expression: #{ne}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: ne
-Expression: #{lt}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: lt
-Expression: #{gt}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: gt
-Expression: #{le}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: le
-Expression: #{ge}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: ge
-Expression: #{instanceof}
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-Expression: #{true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{null}
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-
-
-*######################################################
-* test reserved words as property names
-
-Expression: #{bean1a.and}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.and
-Expression: #{bean1a.or}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.or
-Expression: #{bean1a.not}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.not
-Expression: #{bean1a.eq}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.eq
-Expression: #{bean1a.ne}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.ne
-Expression: #{bean1a.lt}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.lt
-Expression: #{bean1a.gt}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.gt
-Expression: #{bean1a.le}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.le
-Expression: #{bean1a.ge}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.ge
-Expression: #{bean1a.instanceof}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'instanceof' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{bean1a.page}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'page' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{bean1a.request}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'request' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{bean1a.session}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'session' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{bean1a.application}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'application' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{bean1a.true}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.true
-Expression: #{bean1a.false}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.false
-Expression: #{bean1a.null}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.ReferenceSyntaxException: bean1a.null
-
-*######################################################
-* test arithmetic
-
-Expression: #{3+5}
-ExpectedType: class java.lang.Object
-Evaluates to: 8
-With type: class java.lang.Long
-
-Expression: #{3-5}
-ExpectedType: class java.lang.Object
-Evaluates to: -2
-With type: class java.lang.Long
-
-Expression: #{3/5}
-ExpectedType: class java.lang.Object
-Evaluates to: 0.6
-With type: class java.lang.Double
-
-Expression: #{3*5}
-ExpectedType: class java.lang.Object
-Evaluates to: 15
-With type: class java.lang.Long
-
-Expression: #{3*5.0}
-ExpectedType: class java.lang.Object
-Evaluates to: 15.0
-With type: class java.lang.Double
-
-Expression: #{3.0*5}
-ExpectedType: class java.lang.Object
-Evaluates to: 15.0
-With type: class java.lang.Double
-
-Expression: #{3.0*5.0}
-ExpectedType: class java.lang.Object
-Evaluates to: 15.0
-With type: class java.lang.Double
-
-Expression: #{225 % 17}
-ExpectedType: class java.lang.Object
-Evaluates to: 4
-With type: class java.lang.Long
-
-
-Expression: #{ 1 + 2 + 3 * 5 + 6}
-ExpectedType: class java.lang.Object
-Evaluates to: 24
-With type: class java.lang.Long
-
-Expression: #{ 1 + (2 + 3) * 5 + 6}
-ExpectedType: class java.lang.Object
-Evaluates to: 32
-With type: class java.lang.Long
-
-
-*######################################################
-* test logical operators
-
-Expression: #{ true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ not true}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ not false}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ not not true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ not not false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ true and false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ true and true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ false and true}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ false and false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ true or false}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ true or true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ false or true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ false or false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-Expression: #{ false or false or false or true and false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ false or false or false or true and false or true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test indexed access operator
-
-* Test as equivalent to property accessor
-Expression: #{ bean1a["double1"] }
-ExpectedType: class java.lang.Object
-Evaluates to: 89.224
-With type: class java.lang.Double
-
-Expression: #{ bean1a["double1"].class }
-ExpectedType: class java.lang.Object
-Evaluates to: class java.lang.Double
-With type: class java.lang.Class
-
-
-* Test as array accessor
-Expression: #{ bean1a.stringArray1[-1]}
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-Expression: #{ bean1a.stringArray1[0]}
-ExpectedType: class java.lang.Object
-Evaluates to: string1
-With type: class java.lang.String
-
-Expression: #{ bean1a.stringArray1[1]}
-ExpectedType: class java.lang.Object
-Evaluates to: string2
-With type: class java.lang.String
-
-Expression: #{ bean1a.stringArray1[2]}
-ExpectedType: class java.lang.Object
-Evaluates to: string3
-With type: class java.lang.String
-
-Expression: #{ bean1a.stringArray1[3]}
-ExpectedType: class java.lang.Object
-Evaluates to: string4
-With type: class java.lang.String
-
-Expression: #{ bean1a.stringArray1[4]}
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-
-* Test as list accessor
-Expression: #{ bean1a.list1 [0] }
-ExpectedType: class java.lang.Object
-Evaluates to: 14
-With type: class java.lang.Integer
-
-Expression: #{ bean1a.list1 [1] }
-ExpectedType: class java.lang.Object
-Evaluates to: another value
-With type: class java.lang.String
-
-Expression: #{ bean1a.list1 [2][2] }
-ExpectedType: class java.lang.Object
-Evaluates to: string3
-With type: class java.lang.String
-
-
-* Test as indexed property accessor
-Expression: #{ bean1a.indexed1[-1]}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'indexed1' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{ bean1a.indexed1[0]}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'indexed1' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{ bean1a.indexed1[1]}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'indexed1' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{ bean1a.indexed1[2]}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'indexed1' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{ bean1a.indexed1[3]}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'indexed1' from bean of type com.sun.faces.el.impl.Bean1
-Expression: #{ bean1a.indexed1[4]}
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.PropertyNotFoundException: Error getting property 'indexed1' from bean of type com.sun.faces.el.impl.Bean1
-
-* Test as map accessor
-Expression: #{ bean1a.map1.noKey }
-ExpectedType: class java.lang.Object
-Evaluates to: null
-
-Expression: #{ bean1a.map1.key1 }
-ExpectedType: class java.lang.Object
-Evaluates to: value1
-With type: class java.lang.String
-
-Expression: #{ bean1a.map1 ["key1"] }
-ExpectedType: class java.lang.Object
-Evaluates to: value1
-With type: class java.lang.String
-
-Expression: #{ bean1a.map1 [14] }
-ExpectedType: class java.lang.Object
-Evaluates to: value3
-With type: class java.lang.String
-
-Expression: #{ bean1a.map1 [2 * 7] }
-ExpectedType: class java.lang.Object
-Evaluates to: value3
-With type: class java.lang.String
-
-Expression: #{ bean1a.map1.recurse.list1[0] }
-ExpectedType: class java.lang.Object
-Evaluates to: 14
-With type: class java.lang.Integer
-
-
-* Test UIComponent as bean
-Expression: #{view.rendered}
-ExpectedType: class java.lang.Boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{view.attributes.rendered}
-ExpectedType: class java.lang.Boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{view.children[0].value}
-ExpectedType: class java.lang.String
-Evaluates to: inputValue
-With type: class java.lang.String
-
-Expression: #{view.children[0].rendered}
-ExpectedType: class java.lang.Boolean
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test String concatenation
-
-Expression: #{ "a" + "bcd" }
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.EvaluationException: com.sun.faces.el.impl.ElException: An exception occured trying to convert String "a" to type "java.lang.Long"
-Expression: #{ "a" + (4*3) }
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.EvaluationException: com.sun.faces.el.impl.ElException: An exception occured trying to convert String "a" to type "java.lang.Long"
-Expression: #{ bean1a.map1 ["key" + (5-4)] }
-ExpectedType: class java.lang.Object
-Causes an error: javax.faces.el.EvaluationException: com.sun.faces.el.impl.ElException: An exception occured trying to convert String "key" to type "java.lang.Double"
-
-*######################################################
-* test String comparisons
-
-Expression: #{ "30" < "4" }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ 30 < "4" }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 30 > "4" }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ "0004" == "4" }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test relational comparison with alternate symbols
-
-Expression: #{ 4 eq 3}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 4 ne 3}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ 4 eq 4}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ 4 ne 4}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 4 lt 3}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 4 gt 3}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ 4 le 3}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 4 ge 3}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ 4 le 4}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ 4 ge 4}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test expressions on the left side of a value suffix
-
-Expression: #{(3).class}
-ExpectedType: class java.lang.Object
-Evaluates to: class java.lang.Long
-With type: class java.lang.Class
-
-Expression: #{(bean1a.map1)["key1"]}
-ExpectedType: class java.lang.Object
-Evaluates to: value1
-With type: class java.lang.String
-
-
-
-*######################################################
-* test String/boolean logical operators
-
-Expression: #{'true' and false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{'true' or true}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{false and 'true'}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{false or 'true'}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test empty operator
-
-Expression: #{ empty "A"}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ empty "" }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ empty null }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ empty false}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ empty 0}
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ not empty 0}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ not empty empty 0}
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.emptyArray }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.nonemptyArray }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.emptyList }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.nonemptyList }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.emptyMap }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.nonemptyMap }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.emptySet }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ empty emptyTests.nonemptySet }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-*######################################################
-* test String arithmetic
-
-Expression: #{ "6" / "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 2.0
-With type: class java.lang.Double
-
-Expression: #{ 3 + "4" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7
-With type: class java.lang.Long
-
-Expression: #{ "4" + 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7
-With type: class java.lang.Long
-
-Expression: #{ 3 + "4.5" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.5
-With type: class java.lang.Double
-
-Expression: #{ "4.5" + 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.5
-With type: class java.lang.Double
-
-Expression: #{ 3.0 + 6.0}
-ExpectedType: class java.lang.Object
-Evaluates to: 9.0
-With type: class java.lang.Double
-
-Expression: #{ 31121.0 * 61553.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.915590913E9
-With type: class java.lang.Double
-
-Expression: #{ 31121 * 61553 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1915590913
-With type: class java.lang.Long
-
-Expression: #{ 65536 * 65536 * 65536 * 32759 }
-ExpectedType: class java.lang.Object
-Evaluates to: 9220838762064379904
-With type: class java.lang.Long
-
-Expression: #{ 9220838762064379904.0 - 9220838762064379900.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 0.0
-With type: class java.lang.Double
-
-Expression: #{ 9220838762064379904 - 9220838762064379900 }
-ExpectedType: class java.lang.Object
-Evaluates to: 4
-With type: class java.lang.Long
-
-
-*######################################################
-* test relational operators involving null
-
-Expression: #{ null == null }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ null != null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null > null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null < null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null >= null }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ null <= null }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-Expression: #{ null == 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null != 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ null > 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null < 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null >= 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null <= 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-Expression: #{ 3 == null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 3 != null }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ 3 > null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 3 < null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 3 >= null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ 3 <= null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-
-Expression: #{ null == "" }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ null != "" }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-Expression: #{ "" == null }
-ExpectedType: class java.lang.Object
-Evaluates to: false
-With type: class java.lang.Boolean
-
-Expression: #{ "" != null }
-ExpectedType: class java.lang.Object
-Evaluates to: true
-With type: class java.lang.Boolean
-
-
-*######################################################
-* arithmetic operators involving Strings
-
-Expression: #{ 4 + 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7
-With type: class java.lang.Long
-
-Expression: #{ 4.0 + 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ 4 + 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 + 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ "4" + 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7
-With type: class java.lang.Long
-
-Expression: #{ "4.0" + 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ "4" + 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" + 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ 4 + "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7
-With type: class java.lang.Long
-
-Expression: #{ 4.0 + "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ 4 + "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 + "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ "4" + "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7
-With type: class java.lang.Long
-
-Expression: #{ "4.0" + "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ "4" + "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" + "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 7.0
-With type: class java.lang.Double
-
-
-
-Expression: #{ 4 - 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ 4.0 - 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4 - 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 - 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" - 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ "4.0" - 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" - 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" - 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4 - "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ 4.0 - "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4 - "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 - "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" - "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ "4.0" - "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" - "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" - "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-
-
-Expression: #{ 4 * 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12
-With type: class java.lang.Long
-
-Expression: #{ 4.0 * 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ 4 * 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 * 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ "4" * 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12
-With type: class java.lang.Long
-
-Expression: #{ "4.0" * 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ "4" * 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" * 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ 4 * "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12
-With type: class java.lang.Long
-
-Expression: #{ 4.0 * "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ 4 * "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 * "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ "4" * "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12
-With type: class java.lang.Long
-
-Expression: #{ "4.0" * "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ "4" * "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" * "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 12.0
-With type: class java.lang.Double
-
-
-
-Expression: #{ 4 / 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ 4.0 / 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ 4 / 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ 4.0 / 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4" / 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4.0" / 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4" / 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4.0" / 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ 4 / "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ 4.0 / "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ 4 / "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ 4.0 / "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4" / "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4.0" / "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4" / "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-Expression: #{ "4.0" / "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.3333333333333333
-With type: class java.lang.Double
-
-
-
-Expression: #{ 4 % 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ 4.0 % 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4 % 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 % 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" % 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ "4.0" % 3 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" % 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" % 3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4 % "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ 4.0 % "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4 % "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ 4.0 % "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" % "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1
-With type: class java.lang.Long
-
-Expression: #{ "4.0" % "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4" % "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-Expression: #{ "4.0" % "3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: 1.0
-With type: class java.lang.Double
-
-
-
-Expression: #{ "8" / "2" }
-ExpectedType: class java.lang.Object
-Evaluates to: 4.0
-With type: class java.lang.Double
-
-Expression: #{ "4e2" + "3" }
-ExpectedType: class java.lang.Object
-Evaluates to: 403.0
-With type: class java.lang.Double
-
-Expression: #{ "4" + "3e2" }
-ExpectedType: class java.lang.Object
-Evaluates to: 304.0
-With type: class java.lang.Double
-
-Expression: #{ "4e2" + "3e2" }
-ExpectedType: class java.lang.Object
-Evaluates to: 700.0
-With type: class java.lang.Double
-
-
-
-*######################################################
-* unary minus operator involving Strings
-
-Expression: #{ -3 }
-ExpectedType: class java.lang.Object
-Evaluates to: -3
-With type: class java.lang.Long
-
-Expression: #{ -3.0 }
-ExpectedType: class java.lang.Object
-Evaluates to: -3.0
-With type: class java.lang.Double
-
-Expression: #{ -"3" }
-ExpectedType: class java.lang.Object
-Evaluates to: -3
-With type: class java.lang.Long
-
-Expression: #{ -"3.0" }
-ExpectedType: class java.lang.Object
-Evaluates to: -3.0
-With type: class java.lang.Double
-
-Expression: #{ -"3e2" }
-ExpectedType: class java.lang.Object
-Evaluates to: -300.0
-With type: class java.lang.Double
-
diff --git a/jsf-ri/web/test/greeting.jsp b/jsf-ri/web/test/greeting.jsp
deleted file mode 100644
index fca90ed..0000000
--- a/jsf-ri/web/test/greeting.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <title>Hello</title> </HEAD>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <body bgcolor="white">
-    <h2>Hi. My name is Duke.  I'm thinking of a number from 0 to 10.
-    Can you guess it?</h2>
-    <f:view>
-    <h:form id="helloForm" >
-  	<h:inputText id="userNo"  value="NUMBER" /> <BR>
-
-	 <h:commandButton id="submit" value="Submit" />
-    </h:form>
-    </f:view>
-</HTML>  
diff --git a/jsf-ri/web/test/locale-config.xml b/jsf-ri/web/test/locale-config.xml
deleted file mode 100644
index 619a9b6..0000000
--- a/jsf-ri/web/test/locale-config.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <application>
-
-    <locale-config>
-      <default-locale>ps_PS</default-locale>
-        <supported-locale>ps_PS</supported-locale>
-        <supported-locale>tg-AF</supported-locale>
-        <supported-locale>tk_IQ</supported-locale>
-        <supported-locale>en_US</supported-locale>
-    </locale-config>
-
-  </application>
-
-</faces-config>
diff --git a/jsf-ri/web/test/locale-config1.xml b/jsf-ri/web/test/locale-config1.xml
deleted file mode 100644
index fb042e5..0000000
--- a/jsf-ri/web/test/locale-config1.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <application>
-
-    <locale-config>
-      <!-- no default-locale, should be the same as the system one -->
-      <supported-locale>ps_PS</supported-locale>
-      <supported-locale>tg-AF</supported-locale>
-      <supported-locale>tk_IQ-Traditional</supported-locale>
-      <supported-locale>en_US</supported-locale>
-    </locale-config>
-
-  </application>
-
-</faces-config>
diff --git a/jsf-ri/web/test/locale-config2.xml b/jsf-ri/web/test/locale-config2.xml
deleted file mode 100644
index 8ae93cc..0000000
--- a/jsf-ri/web/test/locale-config2.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <application>
-
-    <locale-config>
-      <default-locale>aoeuhoentuhtnhtnhoaenhnhu</default-locale>
-      <supported-locale>ps_PS-at-pq-wp</supported-locale> 
-      <supported-locale>tg-AF-oe-12</supported-locale> 
-      <supported-locale>12-34</supported-locale> 
-      <supported-locale>12-</supported-locale> 
-    </locale-config>
-
-  </application>
-
-</faces-config>
diff --git a/jsf-ri/web/test/parserTests.txt b/jsf-ri/web/test/parserTests.txt
deleted file mode 100644
index 4118529..0000000
--- a/jsf-ri/web/test/parserTests.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-# Note! The parser is a modified JSP 2.0 parser that uses the JSP
-# delimiters rather than the JSF delimiters. 
-#
-# Even though the JSP spec states that only a single expression must
-# be parsable, the Apache Jakarta Commons EL parser used by Jasper2
-# handles parsing and evaluation of mixed literal and expression values
-# as well. While the JSF RI uses a modified version of the Commons EL parser,
-# it's only used for single expressions; mixed literal/expression
-# values are handled by the MixedELValueBinding class instead.
-# Hence, all mixed literal/expression tests have been moved to
-# the evaluationTests test case for JSF
-
-# literal tests
-${1}
-${-12}
-${true}
-${false}
-${null}
-${4.2}
-${-21.3}
-${4.}
-${.21}
-${3e-1}
-${.2222222222}
-
-# string literals with "
-${"abc"}
-${""}
-${"a"}
-${"         "}
-${" some string ''' "}
-${" with escaping \\"}
-${" with escaping \""}
-${" with escaping \"\\\""}
-${" bad \ escaping"}
-${" bad \' escaping"}
-
-# string literals with '
-${'abc'}
-${''}
-${'a'}
-${'         '}
-${' some string """ '}
-${' with escaping \\'}
-${' with escaping \''}
-${' with escaping \'\\\''}
-${' bad \ escaping'}
-${' bad \" escaping'}
-
-# identifiers
-${abc}
-${abc123}
-${abc_123}
-${bad*identifier}
-
-# property accessors
-${a .b .c}
-${ abc . 'def.ghi' . ghi . "jkl \"" }
-
-# array accessors
-${ a[14] }
-${ abc [def]}
-${ def ["yesthisisallowed"]}
-
-# mixed property/array accessors
-${ a.b.c[d. e.  f]}
-${ a[14].b[32].c[24][ 261] [24]}
-${ a[b[c[d[e[f]]]].g] }
-
-# mixed operators
-${ 1 + 3 - 2 * 1 == 4}
-${ 1 + 3 - 2 * 1 == 4 / 1.2}
-${ 1 + 3 - 2 * 1 == 4 / 1.2 and abc}
-${ 1 + 3 - 2 * 1 == 4 / 1.2 and abc or def or ghi and true}
-
-# unary operators
-${ --not abc.def }
-
-# array accessors of non-integer types
-${  a ["hello"]."12" [17.5] }
-
-# making sure unicode escapes are not recognized
-\u0040
-"\u0040"
-
-# relational operators
-${ a > b }
-${ a gt b }
-${ a < b }
-${ a lt b }
-${ a >= b }
-${ a ge b }
-${ a <= b }
-${ a le b }
-${ a == b }
-${ a eq b }
-${ a != b }
-${ a ne b }
-
-# logical operators
-${ a and b}
-${ a && b}
-${ a or b}
-${ a || b}
-${ !a }
-${ not a }
-
-# empty operator
-${ empty "A"}
-${ empty "" }
-${ empty null }
-${ empty false}
-${ empty 0}
-${ not empty 0}
-${ not empty empty 0}
-${ empty }
-
diff --git a/jsf-ri/web/test/parserTestsOutput.txt b/jsf-ri/web/test/parserTestsOutput.txt
deleted file mode 100644
index a064eea..0000000
--- a/jsf-ri/web/test/parserTestsOutput.txt
+++ /dev/null
@@ -1,194 +0,0 @@
-# Note! The parser is a modified JSP 2.0 parser that uses the JSP
-# delimiters rather than the JSF delimiters. 
-#
-# Even though the JSP spec states that only a single expression must
-# be parsable, the Apache Jakarta Commons EL parser used by Jasper2
-# handles parsing and evaluation of mixed literal and expression values
-# as well. While the JSF RI uses a modified version of the Commons EL parser,
-# it's only used for single expressions; mixed literal/expression
-# values are handled by the MixedELValueBinding class instead.
-# Hence, all mixed literal/expression tests have been moved to
-# the evaluationTests test case for JSF
-
-# literal tests
-Attribute value: ${1}
-Parses to: ${1}
-Attribute value: ${-12}
-Parses to: ${(- 12)}
-Attribute value: ${true}
-Parses to: ${true}
-Attribute value: ${false}
-Parses to: ${false}
-Attribute value: ${null}
-Parses to: ${null}
-Attribute value: ${4.2}
-Parses to: ${4.2}
-Attribute value: ${-21.3}
-Parses to: ${(- 21.3)}
-Attribute value: ${4.}
-Parses to: ${4.0}
-Attribute value: ${.21}
-Parses to: ${0.21}
-Attribute value: ${3e-1}
-Parses to: ${0.3}
-Attribute value: ${.2222222222}
-Parses to: ${0.2222222222}
-
-# string literals with "
-Attribute value: ${"abc"}
-Parses to: ${"abc"}
-Attribute value: ${""}
-Parses to: ${""}
-Attribute value: ${"a"}
-Parses to: ${"a"}
-Attribute value: ${"         "}
-Parses to: ${"         "}
-Attribute value: ${" some string ''' "}
-Parses to: ${" some string ''' "}
-Attribute value: ${" with escaping \\"}
-Parses to: ${" with escaping \\"}
-Attribute value: ${" with escaping \""}
-Parses to: ${" with escaping \""}
-Attribute value: ${" with escaping \"\\\""}
-Parses to: ${" with escaping \"\\\""}
-Attribute value: ${" bad \ escaping"}
-Causes an error: Encountered "" bad \ ", expected one of [<INTEGER_LITERAL>, <FLOATING_POINT_LITERAL>, <STRING_LITERAL>, "true", "false", "null", "(", "-", "not", "!", "empty", <IDENTIFIER>]
-Attribute value: ${" bad \' escaping"}
-Causes an error: Encountered "" bad \'", expected one of [<INTEGER_LITERAL>, <FLOATING_POINT_LITERAL>, <STRING_LITERAL>, "true", "false", "null", "(", "-", "not", "!", "empty", <IDENTIFIER>]
-
-# string literals with '
-Attribute value: ${'abc'}
-Parses to: ${"abc"}
-Attribute value: ${''}
-Parses to: ${""}
-Attribute value: ${'a'}
-Parses to: ${"a"}
-Attribute value: ${'         '}
-Parses to: ${"         "}
-Attribute value: ${' some string """ '}
-Parses to: ${" some string \"\"\" "}
-Attribute value: ${' with escaping \\'}
-Parses to: ${" with escaping \\"}
-Attribute value: ${' with escaping \''}
-Parses to: ${" with escaping '"}
-Attribute value: ${' with escaping \'\\\''}
-Parses to: ${" with escaping '\\'"}
-Attribute value: ${' bad \ escaping'}
-Causes an error: Encountered "' bad \ ", expected one of [<INTEGER_LITERAL>, <FLOATING_POINT_LITERAL>, <STRING_LITERAL>, "true", "false", "null", "(", "-", "not", "!", "empty", <IDENTIFIER>]
-Attribute value: ${' bad \" escaping'}
-Causes an error: Encountered "' bad \"", expected one of [<INTEGER_LITERAL>, <FLOATING_POINT_LITERAL>, <STRING_LITERAL>, "true", "false", "null", "(", "-", "not", "!", "empty", <IDENTIFIER>]
-
-# identifiers
-Attribute value: ${abc}
-Parses to: ${abc}
-Attribute value: ${abc123}
-Parses to: ${abc123}
-Attribute value: ${abc_123}
-Parses to: ${abc_123}
-Attribute value: ${bad*identifier}
-Parses to: ${(bad * identifier)}
-
-# property accessors
-Attribute value: ${a .b .c}
-Parses to: ${a.b.c}
-Attribute value: ${ abc . 'def.ghi' . ghi . "jkl \"" }
-Causes an error: Encountered "'def.ghi'", expected one of [<IDENTIFIER>]
-
-# array accessors
-Attribute value: ${ a[14] }
-Parses to: ${a[14]}
-Attribute value: ${ abc [def]}
-Parses to: ${abc[def]}
-Attribute value: ${ def ["yesthisisallowed"]}
-Parses to: ${def["yesthisisallowed"]}
-
-# mixed property/array accessors
-Attribute value: ${ a.b.c[d. e.  f]}
-Parses to: ${a.b.c[d.e.f]}
-Attribute value: ${ a[14].b[32].c[24][ 261] [24]}
-Parses to: ${a[14].b[32].c[24][261][24]}
-Attribute value: ${ a[b[c[d[e[f]]]].g] }
-Parses to: ${a[b[c[d[e[f]]]].g]}
-
-# mixed operators
-Attribute value: ${ 1 + 3 - 2 * 1 == 4}
-Parses to: ${((1 + 3 - (2 * 1)) == 4)}
-Attribute value: ${ 1 + 3 - 2 * 1 == 4 / 1.2}
-Parses to: ${((1 + 3 - (2 * 1)) == (4 / 1.2))}
-Attribute value: ${ 1 + 3 - 2 * 1 == 4 / 1.2 and abc}
-Parses to: ${(((1 + 3 - (2 * 1)) == (4 / 1.2)) and abc)}
-Attribute value: ${ 1 + 3 - 2 * 1 == 4 / 1.2 and abc or def or ghi and true}
-Parses to: ${((((1 + 3 - (2 * 1)) == (4 / 1.2)) and abc) or def or (ghi and true))}
-
-# unary operators
-Attribute value: ${ --not abc.def }
-Parses to: ${(- - not abc.def)}
-
-# array accessors of non-integer types
-Attribute value: ${  a ["hello"]."12" [17.5] }
-Causes an error: Encountered ""12"", expected one of [<IDENTIFIER>]
-
-# making sure unicode escapes are not recognized
-Attribute value: \u0040
-Parses to: \u0040
-Attribute value: "\u0040"
-Parses to: "\u0040"
-
-# relational operators
-Attribute value: ${ a > b }
-Parses to: ${(a > b)}
-Attribute value: ${ a gt b }
-Parses to: ${(a > b)}
-Attribute value: ${ a < b }
-Parses to: ${(a < b)}
-Attribute value: ${ a lt b }
-Parses to: ${(a < b)}
-Attribute value: ${ a >= b }
-Parses to: ${(a >= b)}
-Attribute value: ${ a ge b }
-Parses to: ${(a >= b)}
-Attribute value: ${ a <= b }
-Parses to: ${(a <= b)}
-Attribute value: ${ a le b }
-Parses to: ${(a <= b)}
-Attribute value: ${ a == b }
-Parses to: ${(a == b)}
-Attribute value: ${ a eq b }
-Parses to: ${(a == b)}
-Attribute value: ${ a != b }
-Parses to: ${(a != b)}
-Attribute value: ${ a ne b }
-Parses to: ${(a != b)}
-
-# logical operators
-Attribute value: ${ a and b}
-Parses to: ${(a and b)}
-Attribute value: ${ a && b}
-Parses to: ${(a and b)}
-Attribute value: ${ a or b}
-Parses to: ${(a or b)}
-Attribute value: ${ a || b}
-Parses to: ${(a or b)}
-Attribute value: ${ !a }
-Parses to: ${(not a)}
-Attribute value: ${ not a }
-Parses to: ${(not a)}
-
-# empty operator
-Attribute value: ${ empty "A"}
-Parses to: ${(empty "A")}
-Attribute value: ${ empty "" }
-Parses to: ${(empty "")}
-Attribute value: ${ empty null }
-Parses to: ${(empty null)}
-Attribute value: ${ empty false}
-Parses to: ${(empty false)}
-Attribute value: ${ empty 0}
-Parses to: ${(empty 0)}
-Attribute value: ${ not empty 0}
-Parses to: ${(not empty 0)}
-Attribute value: ${ not empty empty 0}
-Parses to: ${(not empty empty 0)}
-Attribute value: ${ empty }
-Causes an error: Encountered "}", expected one of [<INTEGER_LITERAL>, <FLOATING_POINT_LITERAL>, <STRING_LITERAL>, "true", "false", "null", "(", "-", "not", "!", "empty", <IDENTIFIER>]
-
diff --git a/jsf-ri/web/test/resources/duke-nv.gif b/jsf-ri/web/test/resources/duke-nv.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/duke-nv.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/duke.gif/1_0.gif b/jsf-ri/web/test/resources/duke.gif/1_0.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/duke.gif/1_0.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/duke.gif/1_1.gif b/jsf-ri/web/test/resources/duke.gif/1_1.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/duke.gif/1_1.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/nvLibrary/duke-nv.gif b/jsf-ri/web/test/resources/nvLibrary/duke-nv.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/nvLibrary/duke-nv.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/nvLibrary/duke.gif/1_0.gif b/jsf-ri/web/test/resources/nvLibrary/duke.gif/1_0.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/nvLibrary/duke.gif/1_0.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/nvLibrary/duke.gif/1_1.gif b/jsf-ri/web/test/resources/nvLibrary/duke.gif/1_1.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/nvLibrary/duke.gif/1_1.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/nvLibrary/images/duke-nv.gif b/jsf-ri/web/test/resources/nvLibrary/images/duke-nv.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/nvLibrary/images/duke-nv.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/simple-with-el.css b/jsf-ri/web/test/resources/simple-with-el.css
deleted file mode 100644
index 4aed778..0000000
--- a/jsf-ri/web/test/resources/simple-with-el.css
+++ /dev/null
@@ -1,6 +0,0 @@
-# #{request.contextPath}
-# #{request.contextPath}
-
-h2 { color: red }
-
-# #{request.contextPath}}
\ No newline at end of file
diff --git a/jsf-ri/web/test/resources/simple.css b/jsf-ri/web/test/resources/simple.css
deleted file mode 100644
index 77c0bfc..0000000
--- a/jsf-ri/web/test/resources/simple.css
+++ /dev/null
@@ -1,2 +0,0 @@
-h2 { color: red }
-
diff --git a/jsf-ri/web/test/resources/simple.txt b/jsf-ri/web/test/resources/simple.txt
deleted file mode 100644
index f3a3485..0000000
--- a/jsf-ri/web/test/resources/simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-text
\ No newline at end of file
diff --git a/jsf-ri/web/test/resources/vLibrary/2_0/duke-nv.gif b/jsf-ri/web/test/resources/vLibrary/2_0/duke-nv.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/vLibrary/2_0/duke-nv.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/vLibrary/2_0/duke.gif/1_0.gif b/jsf-ri/web/test/resources/vLibrary/2_0/duke.gif/1_0.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/vLibrary/2_0/duke.gif/1_0.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/vLibrary/2_0/duke.gif/1_1.gif b/jsf-ri/web/test/resources/vLibrary/2_0/duke.gif/1_1.gif
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/vLibrary/2_0/duke.gif/1_1.gif and /dev/null differ
diff --git a/jsf-ri/web/test/resources/vLibrary/2_0/duke2.gif/1_1 b/jsf-ri/web/test/resources/vLibrary/2_0/duke2.gif/1_1
deleted file mode 100644
index 89411ab..0000000
Binary files a/jsf-ri/web/test/resources/vLibrary/2_0/duke2.gif/1_1 and /dev/null differ
diff --git a/jsf-ri/web/test/runtime-components.xml b/jsf-ri/web/test/runtime-components.xml
deleted file mode 100644
index 1d5b2ea..0000000
--- a/jsf-ri/web/test/runtime-components.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
--->
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
-    version="1.2">
-
-  <application>
-    <action-listener>com.sun.faces.application.ActionListenerTestImpl</action-listener>
-    <navigation-handler>com.sun.faces.application.NavigationHandlerTestImpl</navigation-handler>
-    <property-resolver>com.sun.faces.application.PropertyResolverTestImpl</property-resolver>
-    <variable-resolver>com.sun.faces.application.VariableResolverTestImpl</variable-resolver>
-    <view-handler>com.sun.faces.application.ViewHandlerTestImpl</view-handler>
-    <default-render-kit-id>WackyRenderKit</default-render-kit-id>
-  </application>
-
-</faces-config>
diff --git a/jsf-ri/web/test/test.xhtml b/jsf-ri/web/test/test.xhtml
deleted file mode 100644
index 0f09db4..0000000
--- a/jsf-ri/web/test/test.xhtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
-
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
-
--->
-<!DOCTYPE html
-      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title></title>
-</head>
-<body>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/jsf-ri/web/test/testWhile.jsp b/jsf-ri/web/test/testWhile.jsp
deleted file mode 100644
index 91d0ddc..0000000
--- a/jsf-ri/web/test/testWhile.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%--
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- 
- Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- 
- The contents of this file are subject to the terms of either the GNU
- General Public License Version 2 only ("GPL") or the Common Development
- and Distribution License("CDDL") (collectively, the "License").  You
- may not use this file except in compliance with the License. You can obtain
- a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- language governing permissions and limitations under the License.
- 
- When distributing the software, include this License Header Notice in each
- file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- Sun designates this particular file as subject to the "Classpath" exception
- as provided by Sun in the GPL Version 2 section of the License file that
- accompanied this code.  If applicable, add the following below the License
- Header, with the fields enclosed by brackets [] replaced by your own
- identifying information: "Portions Copyrighted [year]
- [name of copyright owner]"
- 
- Contributor(s):
- 
- If you wish your version of this file to be governed by only the CDDL or
- only the GPL Version 2, indicate your decision by adding "[Contributor]
- elects to include this software in this distribution under the [CDDL or GPL
- Version 2] license."  If you don't indicate a single choice of license, a
- recipient has the option to distribute your version of this file under
- either the CDDL, the GPL Version 2 or to extend the choice of license to
- its licensees as provided above.  However, if you add GPL Version 2 code
- and therefore, elected the GPL Version 2 license, then the option applies
- only if the new code is made subject to such option by the copyright
- holder.
---%>
-
-<!--
- Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
--->
-
-<HTML>
-    <HEAD> <TITLE> JSF Basic Components Test Page </TITLE> </HEAD>
-
-    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
-    <H3> JSF Tree Test </H3>
-    <hr>
-
-<P>This page shouldn't be actually loaded into faces.  It's just to test
-the tree navigation mechanism.  Test using getNextStart() inside while
-loop.</P>
-
-  <f:view>
-  <h:form id="1" >
-
-            <h:outputText id="5"  text="5" />
-  </h:form>
-</f:view>
-
-</HTML>
diff --git a/jsf-tools/COPYRIGHT b/jsf-tools/COPYRIGHT
deleted file mode 100644
index c10965e..0000000
--- a/jsf-tools/COPYRIGHT
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * $Id: COPYRIGHT,v 1.2 2004/01/27 20:13:27 eburns Exp $
- */
-
-/*
- * Copyright 2003-2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
diff --git a/jsf-tools/LICENSE.html b/jsf-tools/LICENSE.html
deleted file mode 100644
index b2f8812..0000000
--- a/jsf-tools/LICENSE.html
+++ /dev/null
@@ -1,195 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<HTML>
-<HEAD>
-	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
-	<TITLE></TITLE>
-	<META NAME="GENERATOR" CONTENT="StarOffice/5.2 (Solaris Sparc)">
-	<META NAME="AUTHOR" CONTENT="douglass hall">
-	<META NAME="CREATED" CONTENT="20010118;13260200">
-	<META NAME="CHANGEDBY" CONTENT=" ">
-	<META NAME="CHANGED" CONTENT="20020205;12531900">
-</HEAD>
-<BODY>
-<P ALIGN=CENTER><B><FONT SIZE=4>Pre-Release</FONT></B> <BR><B><FONT SIZE=4>Software
-Evaluation Agreement</FONT></B></P>
-<P>SUN MICROSYTEMS, INC. ("SUN") IS WILLING TO LICENSE THE
-JAVASERVER<FONT SIZE=2 STYLE="font-size: 9pt"><SUP>TM </SUP></FONT>FACES,
-VERSION 1.0 PRE-RELEASE SOFTWARE TO LICENSEE  ONLY UPON THE
-CONDITION THAT LICENSEE ACCEPTS ALL OF THE TERMS CONTAINED IN THIS
-LICENSE AGREEMENT ("AGREEMENT").  PLEASE READ THE
-TERMS AND CONDITIONS OF THIS AGREEMENT CAREFULLY.  BY
-INSTALLING  THIS SOFTWARE, LICENSEE ACCEPTS THE TERMS AND
-CONDITIONS OF THIS LICENSE AGREEMENT, INDICATE ACCEPTANCE BY
-SELECTING THE "ACCEPT" BUTTON AT THE BOTTOM OF THIS
-AGREMENT. IF LICENSEE IS NOT WILLING TO BE BOUND  BY ALL THE
-TERMS, SELECT THE "DECLINE" BUTTON AT THE BOTTOM  OF 
-THE AGREEMENT AND THE INSTALLATION PROCESS WILL NOT CONTINUE. 
-</P>
-<P><B>1.0 DEFINITIONS</B> <BR>"Licensed Software" means the
-JavaServer Faces, Version 1.0 Pre-release Softwa<FONT SIZE=3>re i<SPAN STYLE="font-weight: medium">n
-source form, any portions of the software code provided in binary
-form, and any user manuals, programming guides and other
-documentation provided to Licensee by Sun Microsystems, Inc. under
-this Agreement.</SPAN></FONT></P>
-<P><B>2.0 LIMITED LICENSE</B> <BR>Sun grants to Licensee, a
-non-exclusive, non-transferable, royalty-free and limited license to
-view Licensed Software internally for the purposes of evaluation
-only. No license is granted to Licensee for any other purpose.
-Licensee may not sell, rent, loan or otherwise encumber or transfer
-Licensed Software,  in whole or in part, to any third party. 
-</P>
-<P><B>3.0 LICENSE RESTRICTIONS</B> <BR>3.1 Licensee may not duplicate
-Licensed Software, except for one (1) copy of Licensed Software and
-only for archival purposes.  Licensee agrees to reproduce all
-copyright and any other proprietary right notices on any such copy.
-<BR>3.2 Except as otherwise provided by law, Licensee may not modify
-or create derivative works of the Licensed Software, reverse
-engineer, disassemble or decompile binary portions of the Licensed
-Software, or otherwise attempt to derive the source code from such
-portions. <BR>3.3 No right, title, or interest in or to Licensed
-Software, any trademarks, service marks, or trade names of Sun or
-Sun's licensors is granted under this Agreement. <BR>3.4 Licensed
-Software may only be used at the location identified above. <BR>3.5
-Licensee shall have no right to use the Licensed Software for
-productive or commercial use. 
-</P>
-<P><B>4.0 NO SUPPORT</B> <BR>Sun is under no obligation to support
-Licensed Software or to provide Licensee with updates or error
-corrections (collectively "Software Updates"). If Sun, at
-its sole option, supplies Software Updates to Licensee, the Software
-Updates will be considered part of Licensed Software, and subject to
-the terms of this Agreement. 
-</P>
-<P><B>5.0 LICENSEE DUTIES</B> <BR>Licensee agrees to evaluate the
-Licensed Software for use with Licensee's products and to provide
-feedback to Sun's email alias: <A HREF="mailto:JSFaces-feedback at sun.com">JSFaces-feedback at sun.com</A>. 
-Sun shall treat any oral or written feedback or results of Licensee's
-testing of the Licensed Software which Licensee provides to Sun as
-Sun's Confidential Information (defined in Section 7 below). 
-</P>
-<P><B>6.0 TERM AND TERMINATION OF AGREEMENT</B> <BR>6.1 This
-Agreement will commence on the date on which Licensee receives
-Licensed Software (the "Effective Date") and will expire
-ninety (90) days from the Effective Date, unless terminated earlier
-as provided herein. <BR>6.2 Either party may terminate this Agreement
-upon ten (10) days' written notice to the other party. However, Sun
-may terminate this Agreement immediately should any Licensed Software
-become, or in Sun's opinion be likely to become, the subject of a
-claim of infringement of a patent, trade secret or copyright. <BR>6.3
-Sun may terminate this Agreement immediately should Licensee
-materially breach any of its provisions or take any action in
-derogation of Sun's rights to the Confidential Information licensed
-to Licensee. <BR>6.4 Upon termination or expiration of this
-Agreement, Licensee will immediately cease use of and destroy
-Licensed Software, any copies thereof and provide to Sun  a
-written statement certifying that Licensee has complied with the
-foregoing obligations. <BR>6.5 Rights and obligations under this
-Agreement which by their nature should survive, will remain in effect
-after termination or expiration hereof. 
-</P>
-<P><B>7.0 CONFIDENTIAL INFORMATION</B> <BR>7.1 For purposes of this
-Agreement, "Confidential Information" means:  (i)
-business and technical information and any source code or binary
-code, which Sun discloses to Licensee related to Licensed Software;
-(ii) Licensee's feedback based on Licensed Software; and (iii) the
-terms, conditions, and existence of this Agreement.  Licensee
-may not disclose or use Confidential Information, except for the
-purposes specified in this Agreement.  Licensee will protect the
-Confidential Information with the same degree of care, but not less
-than a reasonable degree of care, as Licensee uses to protect its own
-Confidential Information. Licensee's obligations regarding
-Confidential Information will expire no less than five (5) years from
-the date of receipt of the Confidential Information, except for Sun
-source code which will be protected in perpetuity.  Licensee
-agrees that Licensed Software contains Sun trade secrets. <BR>7.2
-Notwithstanding any provisions contained in this Agreement concerning
-nondisclosure and non-use of the Confidential Information, the
-nondisclosure obligations of Section 7.1 will not apply to any
-portion of Confidential Information that Licensee can demonstrate in
-writing is:  (i) now, or hereafter through no act or failure to
-act on the part of Licensee becomes, generally known to the general
-public; (ii) known to Licensee at the time of receiving the
-Confidential Information without an obligation of confidentiality;
-(iii) hereafter rightfully furnished to Licensee by a third party
-without restriction on disclosure; or (iv) independently developed by
-Licensee without any use of the Confidential Information. <BR>7.3
-Licensee must restrict access to Confidential Information to its
-employees or contractors with a need for this access to perform their
-employment or contractual obligations and who have agreed in writing
-to be bound by a confidentiality obligation, which incorporates the
-protections and restrictions substantially as set forth in this
-Agreement. 
-</P>
-<P><B>8.0 DISCLAIMER OF WARRANTY</B> <BR>8.1 Licensee acknowledges
-that Licensed Software may contain errors and is not designed,
-licensed, or intended for use in the design, construction, operation
-or maintenance of any nuclear facility ("High Risk Activities").
-Sun disclaims any express or implied warranty of fitness for such
-uses.  Licensee represents and warrants to Sun that it will not
-use, distribute or license the Licensed Software for High Risk
-Activities. <BR>8.2 LICENSED SOFTWARE IS PROVIDED "AS IS".
-ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS, AND WARRANTIES,
-INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, SATISFACTORY
-QUALITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE
-DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE
-LEGALLY INVALID. 
-</P>
-<P><B>9.0 LIMITATION OF LIABILITY</B> <BR>9.1 Licensee acknowledges
-that the Licensed Software may be experimental and that the Licensed
-Software may have defects or deficiencies, which cannot or will not
-be corrected by Sun.  Licensee will hold Sun harmless from any
-claims based on Licensee's use of the Licensed Software for any
-purposes other than those of internal evaluation, and from any claims
-that later versions or releases of any Licensed Software furnished to
-Licensee are incompatible with the Licensed Software provided to
-Licensee under this Agreement. <BR>9.2 Except for breach of Sections
-2.0, 3.0, 7.0 or 8.1 and to the extent not prohibited by applicable
-law,  neither party will be liable for any indirect, punitive,
-special, incidental or consequential damage in connection with or
-arising out of this Agreement, including loss of business, revenue,
-profits, use, data or other economic advantage, however it arises,
-whether for breach or in tort, even if that party has been previously
-advised of the possibility of such damage. 
-</P>
-<P><B>10.0 U.S.  GOVERNMENT RESTRICTED RIGHTS</B> <BR>10.1 If
-this Software is being acquired by or on behalf of the U.S.
-Government or by a U.S. Government prime contractor or subcontractor
-(at any tier), then the Government's rights in the Software and
-accompanying documentation shall be only as set forth in this
-license; this is in accordance with 48 C.F.R. 227.7202-4 (for
-Department of Defense (DOD) acquisitions) and with 48 C.F.R. 2.101
-and 12.212 (for non-DOD acquisitions). 
-</P>
-<P><B>11.0 GENERAL TERMS</B> <BR>11.1 Any action relating to or
-arising out of this Agreement will be governed by California law and
-controlling U.S. federal law.  The U.N. Convention for the
-International Sale of Goods and the choice of law rules of any
-jurisdiction will not apply. <BR>11.2 Licensed Software and technical
-data delivered under this Agreement are subject to U.S. export
-control laws and may be subject to export or import regulations in
-other countries.  Licensee agrees to comply strictly with all
-such laws and regulations and acknowledges that it has the
-responsibility to obtain such licenses to export, re-export or import
-as may be required after delivery to Licensee. <BR>11.3 It is
-understood and agreed that, notwithstanding any other provision of
-this Agreement, Licensee's breach of the provisions of Section 7 of
-this Agreement will cause Sun irreparable damage for which recovery
-of money damages would be inadequate, and that Sun will therefore be
-entitled to seek timely injunctive relief to protect Sun's rights
-under this Agreement in addition to any and all remedies available at
-law. <BR>11.4 Neither party may assign or otherwise transfer any of
-its rights or obligations under this Agreement, without the prior
-written consent of the other party, except that Sun may assign this
-Agreement to an affiliated company. <BR>11.5 This Agreement is the
-parties' entire agreement relating to its subject matter.  It
-supersedes all prior or contemporaneous oral or written
-communications, proposals, conditions, representations and warranties
-and prevails over any conflicting or additional terms of any quote,
-order, acknowledgment, or other communication between the parties
-relating to its subject matter during the term of this Agreement. 
-No modification to this Agreement will be binding, unless in writing
-and signed by an authorized representative of each party.</P>
-<P><I>(LFI<FONT COLOR="#000000">#111207/F</FONT>orm ID#011801)</I></P>
-</BODY>
-</HTML>
-
diff --git a/jsf-tools/conf/FaceletsHtmlBasicTaglib21.properties b/jsf-tools/conf/FaceletsHtmlBasicTaglib21.properties
deleted file mode 100644
index b5c026b..0000000
--- a/jsf-tools/conf/FaceletsHtmlBasicTaglib21.properties
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
-#
-# Redistribution and use in source and binary forms, with or
-# without modification, are permitted provided that the following
-# conditions are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-#
-# - Redistribution in binary form must reproduce the above
-#   copyright notice, this list of conditions and the following
-#   disclaimer in the documentation and/or other materials
-#   provided with the distribution.
-#
-# Neither the name of Sun Microsystems, Inc. or the names of
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# This software is provided "AS IS," without a warranty of any
-# kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
-# WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
-# EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
-# DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
-# RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
-# ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
-# FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
-# SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
-# CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
-# THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
-# BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-# You acknowledge that this software is not designed, licensed or
-# intended for use in the design, construction, operation or
-# maintenance of any nuclear facility.
-#
-#
-#
-# PROPERTY DESCRIPTIONS
-#
-# base.output.dir - specifies the base directory in which to store
-#                   the generated output.  This must be a relative path.
-#                   If the directory does not exist, it will be created.
-#                   (REQUIRED)
-#
-# jsp.version - defines the version of JSP the minimum version of JSP
-#               this tag library will support.  Valid values are
-#               1.2 and 2.1. (REQUIRED)
-#
-#
-# renderkit.name - specifies the name of the Renderkit for which these tags
-#                  are being generated. (REQUIRED)
-#
-# taglib.shortname - specifies the shortname used to identifiy the tag library
-#                    by.  (REQUIRED)
-#
-# taglib.uri - The known URI of the generated tag library. (REQUIRED)
-#
-# taglib.description - A description of the tag library.  (OPTIONAL)
-#
-#
-# taglib.file.name - specifies the name of the generated TLD. (REQUIRED)
-#
-# taglib.include - specifies an optional tag definitions to be included
-#                  towards the end of the generated TLD.  If the path
-#                  doesn't start with a '/' (use '/' as the
-#                  path separator on Win32 platforms - e.g. c:/some/path/TAGDEF),
-#                  the path will be considered relative from the directory in
-#                  which the ant task is invoked. (OPTIONAL)
-#
-# target.package - specifies the target java package of the generated code.
-#                  (REQUIRED)
-#
-#
-# copyright = Copyright to be included in all generated files.
-#
-
-#
-#                        !!! IMPORTANT !!!
-# This is the properties file necessary to generate HtmlComponents and
-# tag libraries for the html basic renderkit.  
-# This values MUST be correct in order for the code generators to
-# generate the correct code/support files.
-#
-
-# REQUIRED PROPERTIES
-jsp.version=2.1
-taglib.shortname=h
-taglib.uri=http://java.sun.com/jsf/html
-taglib.file.name=facelets_html_basic.tld
-target.package=
-renderkit.id=HTML_BASIC
-base.output.dir=build/generate
-
-#OPTIONAL PROPERTIES
-taglib.include=build/TAG-DEF-21.txt
-taglib.description=This tag library contains JavaServer Faces component tags for all\n\
-                   UIComponent + HTML RenderKit Renderer combinations defined in the\n\
-                   JavaServer Faces Specification.
-copyright=DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\n\
-          \n\
-          Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.\n\
-          \n\
-          The contents of this file are subject to the terms of either the GNU\n\
-          General Public License Version 2 only ("GPL") or the Common Development\n\
-          and Distribution License("CDDL") (collectively, the "License").  You\n\
-          may not use this file except in compliance with the License. You can obtain\n\
-          a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html\n\
-          or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific\n\
-          language governing permissions and limitations under the License.\n\
-          \n\
-          When distributing the software, include this License Header Notice in each\n\
-          file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.\n\
-          Sun designates this particular file as subject to the "Classpath" exception\n\
-          as provided by Sun in the GPL Version 2 section of the License file that\n\
-          accompanied this code.  If applicable, add the following below the License\n\
-          Header, with the fields enclosed by brackets [] replaced by your own\n\
-          identifying information: "Portions Copyrighted [year]\n\
-          [name of copyright owner]"\n\
-          \n\
-          Contributor(s):\n\
-          \n\
-          If you wish your version of this file to be governed by only the CDDL or\n\
-          only the GPL Version 2, indicate your decision by adding "[Contributor]\n\
-          elects to include this software in this distribution under the [CDDL or GPL\n\
-          Version 2] license."  If you don't indicate a single choice of license, a\n\
-          recipient has the option to distribute your version of this file under\n\
-          either the CDDL, the GPL Version 2 or to extend the choice of license to\n\
-          its licensees as provided above.  However, if you add GPL Version 2 code\n\
-          and therefore, elected the GPL Version 2 license, then the option applies\n\
-          only if the new code is made subject to such option by the copyright\n\
-          holder.\n\
diff --git a/jsf-tools/conf/HtmlBasicTaglib12.properties b/jsf-tools/conf/HtmlBasicTaglib12.properties
deleted file mode 100644
index e625c55..0000000
--- a/jsf-tools/conf/HtmlBasicTaglib12.properties
+++ /dev/null
@@ -1,148 +0,0 @@
-#
-# Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
-#
-# Redistribution and use in source and binary forms, with or
-# without modification, are permitted provided that the following
-# conditions are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-#
-# - Redistribution in binary form must reproduce the above
-#   copyright notice, this list of conditions and the following
-#   disclaimer in the documentation and/or other materials
-#   provided with the distribution.
-#
-# Neither the name of Sun Microsystems, Inc. or the names of
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# This software is provided "AS IS," without a warranty of any
-# kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
-# WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
-# EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
-# DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
-# RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
-# ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
-# FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
-# SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
-# CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
-# THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
-# BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-# You acknowledge that this software is not designed, licensed or
-# intended for use in the design, construction, operation or
-# maintenance of any nuclear facility.
-#
-#
-#
-# PROPERTY DESCRIPTIONS
-#
-# base.output.dir - specifies the base directory in which to store
-#                   the generated output.  This must be a relative path.
-#                   If the directory does not exist, it will be created.
-#                   (REQUIRED)
-#
-# jsp.version - defines the version of JSP the minimum version of JSP
-#               this tag library will support.  Valid values are
-#               1.2 and 2.1. (REQUIRED)
-#
-# method.binding.properties - Pipe ('|') list of properties that accept
-#                             method bindings. (OPTIONAL)
-#
-# renderkit.name - specifies the name of the Renderkit for which these tags
-#                  are being generated. (REQUIRED)
-#
-# taglib.shortname - specifies the shortname used to identifiy the tag library
-#                    by.  (REQUIRED)
-#
-# taglib.uri - The known URI of the generated tag library. (REQUIRED)
-#
-# taglib.description - A description of the tag library.  (OPTIONAL)
-#
-# taglib.body.tags - Pipe ('|') delimited list of Tag names that are required to
-#                    be BodyTag instances.  (OPTIONAL)
-#
-# taglib.file.name - specifies the name of the generated TLD. (REQUIRED)
-#
-# taglib.include - specifies an optional tag definitions to be included
-#                  towards the end of the generated TLD.  If the path
-#                  doesn't start with a '/' (use '/' as the
-#                  path separator on Win32 platforms - e.g. c:/some/path/TAGDEF),
-#                  the path will be considered relative from the directory in
-#                  which the ant task is invoked. (OPTIONAL)
-#
-# target.package - specifies the target java package of the generated code.
-#                  (REQUIRED)
-#
-# value.binding.properties = Pipe ('|') list of properties that accept
-#                            value bindings. (OPTIONAL)
-#
-# value.holder.components = Pipe ('|') list of components that are
-#                           instances of ValueHolder or ConvertibleValueHolder.
-#                           (OPTIONAL)
-#
-# copyright = Copyright to be included in all generated files.
-#
-
-#
-#                        !!! IMPORTANT !!!
-# This is the properties file necessary to generate HtmlComponents and
-# tag libraries for the html basic renderkit.  
-# This values MUST be correct in order for the code generators to
-# generate the correct code/support files.
-#
-
-# REQUIRED PROPERTIES
-jsp.version=1.2
-taglib.shortname=h
-taglib.uri=http://java.sun.com/jsf/html
-taglib.file.name=html_basic.tld
-target.package=com.sun.faces.taglib.html_basic
-renderkit.id=HTML_BASIC
-base.output.dir=build/generate
-
-#OPTIONAL PROPERTIES
-taglib.include=build/TAG-DEF-12.txt
-taglib.description=This tag library contains JavaServer Faces component tags for all\n\
-                   UIComponent + HTML RenderKit Renderer combinations defined in the\n\
-                   JavaServer Faces Specification.
-taglib.body.tags=CommandLinkTag|OutputLinkTag
-value.holder.components=UIOutput|UIInput|UISelectOne|UISelectMany
-value.binding.properties=immediate|value|first|rows|rowIndex|required| \
-    for|showDetail|showSummary|globalOnly|converter|url|prependId
-method.binding.properties=action|actionListener|validator|valueChangeListener
-copyright=copyright=DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\n\
-          \n\
-          Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.\n\
-          \n\
-          The contents of this file are subject to the terms of either the GNU\n\
-          General Public License Version 2 only ("GPL") or the Common Development\n\
-          and Distribution License("CDDL") (collectively, the "License").  You\n\
-          may not use this file except in compliance with the License. You can obtain\n\
-          a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html\n\
-          or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific\n\
-          language governing permissions and limitations under the License.\n\
-          \n\
-          When distributing the software, include this License Header Notice in each\n\
-          file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.\n\
-          Sun designates this particular file as subject to the "Classpath" exception\n\
-          as provided by Sun in the GPL Version 2 section of the License file that\n\
-          accompanied this code.  If applicable, add the following below the License\n\
-          Header, with the fields enclosed by brackets [] replaced by your own\n\
-          identifying information: "Portions Copyrighted [year]\n\
-          [name of copyright owner]"\n\
-          \n\
-          Contributor(s):\n\
-          \n\
-          If you wish your version of this file to be governed by only the CDDL or\n\
-          only the GPL Version 2, indicate your decision by adding "[Contributor]\n\
-          elects to include this software in this distribution under the [CDDL or GPL\n\
-          Version 2] license."  If you don't indicate a single choice of license, a\n\
-          recipient has the option to distribute your version of this file under\n\
-          either the CDDL, the GPL Version 2 or to extend the choice of license to\n\
-          its licensees as provided above.  However, if you add GPL Version 2 code\n\
-          and therefore, elected the GPL Version 2 license, then the option applies\n\
-          only if the new code is made subject to such option by the copyright\n\
-          holder.\n\
diff --git a/jsf-tools/conf/HtmlBasicTaglib21.properties b/jsf-tools/conf/HtmlBasicTaglib21.properties
deleted file mode 100644
index 75e2d4b..0000000
--- a/jsf-tools/conf/HtmlBasicTaglib21.properties
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
-#
-# Redistribution and use in source and binary forms, with or
-# without modification, are permitted provided that the following
-# conditions are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-#
-# - Redistribution in binary form must reproduce the above
-#   copyright notice, this list of conditions and the following
-#   disclaimer in the documentation and/or other materials
-#   provided with the distribution.
-#
-# Neither the name of Sun Microsystems, Inc. or the names of
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# This software is provided "AS IS," without a warranty of any
-# kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
-# WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
-# EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
-# DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
-# RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
-# ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
-# FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
-# SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
-# CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
-# THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
-# BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-#
-# You acknowledge that this software is not designed, licensed or
-# intended for use in the design, construction, operation or
-# maintenance of any nuclear facility.
-#
-#
-#
-# PROPERTY DESCRIPTIONS
-#
-# base.output.dir - specifies the base directory in which to store
-#                   the generated output.  This must be a relative path.
-#                   If the directory does not exist, it will be created.
-#                   (REQUIRED)
-#
-# jsp.version - defines the version of JSP the minimum version of JSP
-#               this tag library will support.  Valid values are
-#               1.2 and 2.1. (REQUIRED)
-#
-#
-# renderkit.name - specifies the name of the Renderkit for which these tags
-#                  are being generated. (REQUIRED)
-#
-# taglib.shortname - specifies the shortname used to identifiy the tag library
-#                    by.  (REQUIRED)
-#
-# taglib.uri - The known URI of the generated tag library. (REQUIRED)
-#
-# taglib.description - A description of the tag library.  (OPTIONAL)
-#
-#
-# taglib.file.name - specifies the name of the generated TLD. (REQUIRED)
-#
-# taglib.include - specifies an optional tag definitions to be included
-#                  towards the end of the generated TLD.  If the path
-#                  doesn't start with a '/' (use '/' as the
-#                  path separator on Win32 platforms - e.g. c:/some/path/TAGDEF),
-#                  the path will be considered relative from the directory in
-#                  which the ant task is invoked. (OPTIONAL)
-#
-# target.package - specifies the target java package of the generated code.
-#                  (REQUIRED)
-#
-#
-# copyright = Copyright to be included in all generated files.
-#
-
-#
-#                        !!! IMPORTANT !!!
-# This is the properties file necessary to generate HtmlComponents and
-# tag libraries for the html basic renderkit.  
-# This values MUST be correct in order for the code generators to
-# generate the correct code/support files.
-#
-
-# REQUIRED PROPERTIES
-jsp.version=2.1
-taglib.shortname=h
-taglib.uri=http://java.sun.com/jsf/html
-taglib.file.name=html_basic.tld
-target.package=com.sun.faces.taglib.html_basic
-renderkit.id=HTML_BASIC
-base.output.dir=build/generate
-
-#OPTIONAL PROPERTIES
-taglib.include=build/TAG-DEF-21.txt
-taglib.description=This tag library contains JavaServer Faces component tags for all\n\
-                   UIComponent + HTML RenderKit Renderer combinations defined in the\n\
-                   JavaServer Faces Specification.
-copyright=DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\n\
-          \n\
-          Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.\n\
-          \n\
-          The contents of this file are subject to the terms of either the GNU\n\
-          General Public License Version 2 only ("GPL") or the Common Development\n\
-          and Distribution License("CDDL") (collectively, the "License").  You\n\
-          may not use this file except in compliance with the License. You can obtain\n\
-          a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html\n\
-          or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific\n\
-          language governing permissions and limitations under the License.\n\
-          \n\
-          When distributing the software, include this License Header Notice in each\n\
-          file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.\n\
-          Sun designates this particular file as subject to the "Classpath" exception\n\
-          as provided by Sun in the GPL Version 2 section of the License file that\n\
-          accompanied this code.  If applicable, add the following below the License\n\
-          Header, with the fields enclosed by brackets [] replaced by your own\n\
-          identifying information: "Portions Copyrighted [year]\n\
-          [name of copyright owner]"\n\
-          \n\
-          Contributor(s):\n\
-          \n\
-          If you wish your version of this file to be governed by only the CDDL or\n\
-          only the GPL Version 2, indicate your decision by adding "[Contributor]\n\
-          elects to include this software in this distribution under the [CDDL or GPL\n\
-          Version 2] license."  If you don't indicate a single choice of license, a\n\
-          recipient has the option to distribute your version of this file under\n\
-          either the CDDL, the GPL Version 2 or to extend the choice of license to\n\
-          its licensees as provided above.  However, if you add GPL Version 2 code\n\
-          and therefore, elected the GPL Version 2 license, then the option applies\n\
-          only if the new code is made subject to such option by the copyright\n\
-          holder.\n\
diff --git a/jsf-tools/conf/TAG-DEF-12.txt b/jsf-tools/conf/TAG-DEF-12.txt
deleted file mode 100644
index bb15590..0000000
--- a/jsf-tools/conf/TAG-DEF-12.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-  <tag>
-    <name>column</name>
-    <tag-class>com.sun.faces.taglib.html_basic.ColumnTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-      <![CDATA[<p>Renders a UIComponent that represents a single column of data within a parent <code>UIData</code> component.</p>]]>
-    </description>
-    <attribute>
-      <name>rendered</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-      <description>
-
-          Flag indicating whether or not this component should be rendered
-          (during Render Response Phase), or processed on any subsequent
-          form submit.
-      </description>
-    </attribute>
-    <attribute>
-      <name>binding</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-      <type>java.lang.String</type>
-      <description>
-        The value binding expression linking this component to a property in a backing bean 
-      </description>
-    </attribute>
-    <attribute>
-      <name>id</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-      <type>java.lang.String</type>
-      <description>
-        The component identifier for the associated component
-      </description>
-    </attribute>
-    <attribute>
-      <name>footerClass</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-      <type>java.lang.String</type>
-      <description>
-        Space-separated list of CSS style class(es) that will be applied to any column footer generated for this table.
-      </description>
-    </attribute>
-    <attribute>
-      <name>headerClass</name>
-      <required>false</required>
-      <rtexprvalue>false</rtexprvalue>
-      <type>java.lang.String</type>
-      <description>
-        Space-separated list of CSS style class(es) that will be applied to any column header generated for this table.
-      </description>
-    </attribute>
-  </tag>
diff --git a/jsf-tools/conf/TAG-DEF-21.txt b/jsf-tools/conf/TAG-DEF-21.txt
deleted file mode 100644
index 5928c82..0000000
--- a/jsf-tools/conf/TAG-DEF-21.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-    <tag>
-        <description>
-            <![CDATA[<p>Renders a UIComponent that represents a single column of data within a parent <code>UIData</code> component.</p>]]>
-        </description>
-        <name>
-            column
-        </name>
-        <tag-class>
-            com.sun.faces.taglib.html_basic.ColumnTag
-        </tag-class>
-        <body-content>
-            JSP
-        </body-content>
-        <attribute>
-            <description>
-                Flag indicating whether or not this component should be rendered
-                (during Render Response Phase), or processed on any subsequent
-                form submit.
-            </description>
-            <name>
-                rendered
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>java.lang.Boolean</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                The value binding expression linking this component to a property in a backing bean 
-            </description>
-            <name>
-                binding
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>javax.faces.component.UIComponent</type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                The component identifier for the associated component
-            </description>
-            <name>
-                id
-            </name>
-            <required>
-                false
-            </required>
-            <rtexprvalue>
-                false
-            </rtexprvalue>
-            <type>
-                java.lang.String
-            </type>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Space-separated list of CSS style class(es) that will be
-                applied to any column footer generated for this table.]]>
-            </description>
-            <name>
-                footerClass
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Space-separated list of CSS style class(es) that will be
-                applied to any column header generated for this table.]]>
-            </description>
-            <name>
-                headerClass
-            </name>
-            <required>
-                false
-            </required>
-            <deferred-value>
-                <type>
-                    java.lang.String
-                </type>
-            </deferred-value>
-        </attribute>
-        <attribute>
-            <description>
-                <![CDATA[Flag indicating that this column is a row header column and therefore cells in this column should be rendered with "th" instead of "td" and must have the 'scope="row"' attribute.]]>
-            </description>
-            <name>
-                rowHeader
-            </name>
-            <required>
-                 false
-             </required>
-             <deferred-value>
-                 <type>
-                     boolean
-                 </type>
-             </deferred-value>
-         </attribute>
-    </tag>
diff --git a/jsf-tools/doc/mockup/DEFAULT/CommandLink.html b/jsf-tools/doc/mockup/DEFAULT/CommandLink.html
deleted file mode 100644
index 36714a8..0000000
--- a/jsf-tools/doc/mockup/DEFAULT/CommandLink.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<!--NewPage-->
-<html>
-<head>
-<!-- Generated by javadoc on Sun Jan 11 13:14:24 EST 2004 -->
-<title>
-Link Renderer for Command Component (JavaServer Faces API (20040107))
-</title>
-<meta NAME="keywords" CONTENT="DEFAULT RenderKit, Command Component, Link Renderer">
-<link REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
-</head>
-<script>
-function asd()
-{
-parent.document.title="Link Renderer for Command Component (JavaServer Faces API (20040107))";
-}
-</SCRIPT>
-<body BGCOLOR="white" onload="asd();">
-
-<!-- ========== START OF NAVBAR ========== -->
-<!-- =========== END OF NAVBAR =========== -->
-
-<!-- ======== START OF CLASS DATA ======== -->
-<h2>
-<font SIZE="-1">
-DEFAULT render-kit</font>
-
-<br>
-</h2>
-<dl>
-<dt>Link Renderer for Command Component</dl>
-
-<h2>Description</h2>
-
-<p>
-<p>Render an HTML "a" anchor element.
-      Render "#" as the value of the
-      "href" attribute.  Render javascript that is functionaly
-      equivalent to the following as the value of the "onmousedown"
-      attribute:
-      "document.forms[FORM_NUMBER]['CLIENT_ID'].value='CLIENT_ID';
-      document.forms[0]['PARAM1_NAME'].value='PARAM1_VALUE';
-      document.forms[0]['PARAM2_NAME'].value='PARAM2_VALUE';
-      document.forms[FORM_NUMBER].submit()" where FORM_NUMBER is the
-      number, starting at 0 of the form in which this link resides,
-      CLIENT_ID is the clientId of the UICommand component, PARAM*_NAME
-      and PARAM*_VALUE are the names and values, respectively, of any
-      nested UIParameter children.  If the "styleClass" attribute is
-      specified, render its value as the value of the "class" attribute.
-      Render any non-UIParameter children as normal inside of the "a"
-      element.  These will appear as the link text.  Render an "input"
-      element of "type" "hidden" for each of the nested UIParameter
-      children, taking the name and value properties from each one in
-      turn.</p>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<a NAME="attributes"><!-- --></a>
-
-<h3>Note:</h3>
-
-<p>Attributes with a <code>pass-through</code> value of
-<code>true</code> are not interpreted by the renderer and are passed
-straight through to the rendered markup.  Attributes with a
-<code>pass-through</code> value of <code>false</code> are interpreted
-renderer.</p>
-
-<table BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<td COLSPAN="4"><font SIZE="+2">
-<b>Attributes</b></font></td>
-</tr>
-<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<th><b>attribute-name</b></th>
-<th><b>pass-through</b></th>
-<th><b>attribute-class</b></th>
-<th><b>description</b></th>
-</tr>
-<tr BGCOLOR="white" CLASS="TableRowColor">
-<td ALIGN="right" VALIGN="top" WIDTH="1%"><font SIZE="-1">
-<code> style</code></font></td>
-
-<td ALIGN="right" VALIGN="top">true</td>
-
-<td><code>java.lang.String</code></td>
-
-<td>          CSS style(s) to be applied when this component is rendered.
-</td>
-
-</tr>
-
-<tr BGCOLOR="white" CLASS="TableRowColor">
-<td ALIGN="right" VALIGN="top" WIDTH="1%"><font SIZE="-1">
-<code> styleClass</code></font></td>
-
-<td ALIGN="right" VALIGN="top">false</td>
-
-
-<td><code>java.lang.String</code></td>
-
-<td>          Space-separated list of CSS style class(es) to be applied when
-          this element is rendered.  This value must be passed through
-          as the "class" attribute on generated markup.
-
-</td>
-
-</tr>
-
-<tr BGCOLOR="white" CLASS="TableRowColor">
-<td ALIGN="right" VALIGN="top" WIDTH="1%"><font SIZE="-1">
-<code> title</code></font></td>
-
-<td ALIGN="right" VALIGN="top">true</td>
-
-
-<td><code>java.lang.String</code></td>
-
-<td>          Advisory title information about markup elements generated
-          for this component.
-
-</td>
-
-</tr>
-
-<tr BGCOLOR="white" CLASS="TableRowColor">
-<td ALIGN="right" VALIGN="top" WIDTH="1%"><font SIZE="-1">
-<code> onclick</code></font></td>
-
-<td ALIGN="right" VALIGN="top">true</td>
-
-
-<td><code>java.lang.String</code></td>
-
-<td>          Javascript code executed when a pointer button is
-          clicked over this element.
-
-
-</td>
-
-</tr>
-
-
-<tr BGCOLOR="white" CLASS="TableRowColor">
-<td ALIGN="right" VALIGN="top" WIDTH="1%"><font SIZE="-1">
-<code> ...</code></font></td>
-
-<td ALIGN="right" VALIGN="top">...</td>
-
-
-<td><code>...</code></td>
-
-<td>...
-
-</td>
-
-</tr>
-
-
-
-
-</table>
- 
-<p>
-
-
-<hr>
-Copyright � 2002-2004 Sun Microsystems, Inc. All Rights Reserved.
-</body>
-</html>
diff --git a/jsf-tools/doc/mockup/DEFAULT/renderkit-summary.html b/jsf-tools/doc/mockup/DEFAULT/renderkit-summary.html
deleted file mode 100644
index 08175cf..0000000
--- a/jsf-tools/doc/mockup/DEFAULT/renderkit-summary.html
+++ /dev/null
@@ -1,217 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Jan 11 13:14:20 EST 2004 -->
-<TITLE>
-DEFAULT RenderKit (JavaServer Faces API (20040107))
-</TITLE>
-<META NAME="keywords" CONTENT="DEFAULT RenderKit">
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<SCRIPT>
-function asd()
-{
-parent.document.title="DEFAULT RenderKit (JavaServer Faces API (20040107))";
-}
-</SCRIPT>
-<BODY BGCOLOR="white" onload="asd();">
-
-<H2>
-DEFAULT RenderKit
-</H2>
-The standard HTML RenderKit.
-<P>
-<B>See:</B>
-<BR>
-          <A HREF="#renderkit_description"><B>Description</B></A>
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN="3"><FONT SIZE="+2">
-<B>Renderer Summary</B></FONT></TD>
-
-<tr>
-<th>component-family</th>
-<th>renderer-type</th>
-<th>description</th>
-</tr>
-
-<tr>
-
-<td rowspan="2">Command</td> 
-<td><A HREF="CommandLink.html" TARGET="rendererFrame">Link</A></td>
-<td>Render an HTML "a" anchor element.</td>
-
-</tr>
-
-<tr><td><A HREF="OutputLink.html" TARGET="rendererFrame">Link</A></td>
-<td>Render an HTML "a" anchor element.</td>
-
-</tr>
-
-<tr>
-
-<td rowspan="1">Data</td> 
-<td><A HREF="DataTable.html" TARGET="rendererFrame">Table</A></td>
-<td> </td>
-</tr>
-
-<tr>
-
-<td rowspan="1">Form</td> 
-<td><A HREF="FormForm.html" TARGET="rendererFrame">Form</A></td>
-<td>Renders an HTML "form" element.</td>
-</tr>
-
-<tr>
-
-<td rowspan="1">Graphic</td>
-<td><A HREF="GraphicImage.html" TARGET="rendererFrame">Image</a><td>
-
-</tr>
-
-</tr>
-
-<td rowspan="3">Input</td>
-<td><A HREF="InputHidden.html" TARGET="rendererFrame">Hidden</a><td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="InputSecret.html" TARGET="rendererFrame">Secret</a><td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="InputTextarea.html" TARGET="rendererFrame">Textarea</a></td>
-
-</tr>
-
-<tr>
-
-<td rowspan="1">Message</td>
-<td><A HREF="MessageMessage.html" TARGET="rendererFrame">Message</a></td>
-
-</tr>
-
-<tr>
-
-<td rowspan="1">Messages</td>
-<td><A HREF="MessagesMessages.html" TARGET="rendererFrame">Messages</a></td>
-
-</tr>
-
-<tr>
-
-<td rowspan="4">Output</td>
-<td><A HREF="OutputLabel.html" TARGET="rendererFrame">Label</a></td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="OutputLink.html" TARGET="rendererFrame">Link</a></td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="OutputMessage.html" TARGET="rendererFrame">Message</a></td>
-
-</tr>
-</FONT></TD>
-<tr>
-
-<td><A HREF="OutputText.html" TARGET="rendererFrame">Text</a></td>
-
-</tr>
-<tr>
-
-<td rowspan="2">Panel</td>
-<td><A HREF="PanelGrid.html" TARGET="rendererFrame">Grid</a></td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="PanelGroup.html" TARGET="rendererFrame">Group</a></td>
-
-</tr>
-
-<tr>
-
-<td rowspan="1">SelectBoolean</td>
-<td><A HREF="SelectBooleanCheckbox.html" TARGET="rendererFrame">Checkbox</a></td>
-
-</tr>
-
-<tr>
-
-<td rowspan="3">SelectMany</td>
-<td><A HREF="SelectManyCheckboxList.html" TARGET="rendererFrame">CheckboxList</a></td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="SelectManyListbox.html" TARGET="rendererFrame">Listbox</a></td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="SelectManyMenu.html" TARGET="rendererFrame">Menu</a></td>
-
-</tr>
-
-<tr>
-
-<td rowspan="3">SelectOne</td>
-<td><A HREF="SelectOneListbox.html" TARGET="rendererFrame">Listbox</a></td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="SelectOneMenu.html" TARGET="rendererFrame">Menu</a></td>
-
-</tr>
-
-<tr>
-
-<td><A HREF="SelectOneRadio.html" TARGET="rendererFrame">Radio</a></td>
-
-</tr>
-
-
-</TR>
-
-
-</TABLE>
- 
-
-<P>
-<A NAME="renderkit_description"><!-- --></A><H2>
-DEFAULT RenderKit Description
-</H2>
-
-<P>
-The standard HTML RenderKit.  In the descriptions of
-    the renderers, when we say "the value is passed thru", we mean that
-    the name=value pair is rendered just as is.  For example, if the
-    Button renderer is rendering its UICommand component, and the
-    component has a "type" attribute, we take the value of that
-    attribute and render it as the right hand side of the "type"
-    attribute on the "input" element.  Passthru attributes are not
-    checked for validity.<P>
-
-<P>
-<HR>
-
-Copyright � 2002-2004 Sun Microsystems, Inc. All Rights Reserved.
-</BODY>
-</HTML>
diff --git a/jsf-tools/doc/mockup/allrenderers-frame.html b/jsf-tools/doc/mockup/allrenderers-frame.html
deleted file mode 100644
index 6b7088d..0000000
--- a/jsf-tools/doc/mockup/allrenderers-frame.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Jan 11 13:14:20 EST 2004 -->
-<TITLE>
-All Renderers (JavaServer Faces API (20040107))
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<SCRIPT>
-function asd()
-{
-parent.document.title="All Renderers (JavaServer Faces API (20040107))";
-}
-</SCRIPT>
-<BODY BGCOLOR="white" onload="asd();">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>DEFAULT RenderKit</B></FONT>
-<BR>
-
-<dl class="FrameItemFont">
-
-<dt>component-family: Command</dt>
-<dd><A HREF="DEFAULT/CommandLink.html" TARGET="rendererFrame">Link</A></dd>
-<dd><A HREF="DEFAULT/OutputLink.html" TARGET="rendererFrame">Link</A></dd>
-
-<dt>component-family: Data</dt> 
-<dd><A HREF="DEFAULT/DataTable.html" TARGET="rendererFrame">Table</A></dd>
-
-<dt>component-family: Graphic</dt>
-<dd><A HREF="DEFAULT/GraphicImage.html" TARGET="rendererFrame">Image</a><dd>
-
-<dt>component-family: Input</dt>
-<dd><A HREF="DEFAULT/InputHidden.html" TARGET="rendererFrame">Hidden</a><dd>
-<dd><A HREF="DEFAULT/InputSecret.html" TARGET="rendererFrame">Secret</a><dd>
-<dd><A HREF="DEFAULT/InputTextarea.html" TARGET="rendererFrame">Textarea</a></dd>
-
-<dt>component-family: Message</dt>
-<dd><A HREF="DEFAULT/MessageMessage.html" TARGET="rendererFrame">Message</a></dd>
-
-<dt>component-family: Messages</dt>
-<dd><A HREF="DEFAULT/MessagesMessages.html" TARGET="rendererFrame">Messages</a></dd>
-
-<dt>component-family: Output</dt>
-<dd><A HREF="DEFAULT/OutputLabel.html" TARGET="rendererFrame">Label</a></dd>
-
-<dt>component-family: Panel</dt>
-<dd><A HREF="DEFAULT/PanelGrid.html" TARGET="rendererFrame">Grid</a></dd>
-
-<dt>component-family: SelectBoolean</dt>
-<dd><A HREF="DEFAULT/SelectBooleanCheckbox.html" TARGET="rendererFrame">Checkbox</a></dd>
-
-
-
-
-</dl>
-
-
-</BODY>
-</HTML>
diff --git a/jsf-tools/doc/mockup/index.html b/jsf-tools/doc/mockup/index.html
deleted file mode 100644
index c925ef4..0000000
--- a/jsf-tools/doc/mockup/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<!--NewPage-->
-<html>
-<head>
-<!-- Generated by faces on Sun Jan 11 13:14:20 EST 2004-->
-<title>
-</title>
-</head>
-<frameset cols="22%,78%">
-<frameset>
-<frame src="allrenderers-frame.html" name="renderKitFrame">
-</frameset>
-<frame src="DEFAULT/renderkit-summary.html" name="rendererFrame">
-</frameset>
-<noframes>
-
-<h2>
-Frame Alert</h2>
-
-<p>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<br>
-Link to<a HREF="overview-summary.html">Non-frame version.</a></noframes>
-</html>
diff --git a/jsf-tools/doc/mockup/stylesheet.css b/jsf-tools/doc/mockup/stylesheet.css
deleted file mode 100644
index ab714da..0000000
--- a/jsf-tools/doc/mockup/stylesheet.css
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults */
-
-/* Page background color */
-body { background-color: #FFFFFF }
-
-/* Table colors */
-.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
-.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
-.TableRowColor         { background: #FFFFFF } /* White */
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont   { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
-.FrameHeadingFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
-.FrameItemFont    { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
-
-/* Example of smaller, sans-serif font in frames */
-/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
-
-/* Navigation bar fonts and colors */
-.NavBarCell1    { background-color:#EEEEFF;}/* Light mauve */
-.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */
-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
-
-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-
diff --git a/jsf-tools/doc/standard-html-components.xsl b/jsf-tools/doc/standard-html-components.xsl
deleted file mode 100644
index 6c8fce7..0000000
--- a/jsf-tools/doc/standard-html-components.xsl
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005-2010 Sun Microsystems Inc. All Rights Reserved
--->
-
-<!-- Content Stylesheet for Outstanding Issues Detail List -->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0">
-
-  <xsl:output method="text"/>
-
-  <xsl:template match="/">
-component-type,renderer-type,component class
-<xsl:apply-templates/>
-  </xsl:template>
-
-  <xsl:template match="renderer">
-<xsl:value-of select="supported-component-type/component-type" />,<xsl:value-of select="renderer-type" />,<xsl:value-of select="supported-component-class/component-class" />
-  </xsl:template>
-
-
-</xsl:stylesheet>
diff --git a/jsf-tools/doc/standard-html-renderkit-specification.xsl b/jsf-tools/doc/standard-html-renderkit-specification.xsl
deleted file mode 100644
index adcc82b..0000000
--- a/jsf-tools/doc/standard-html-renderkit-specification.xsl
+++ /dev/null
@@ -1,429 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- The contents of this file are subject to the terms
- of the Common Development and Distribution License
- (the License). You may not use this file except in
- compliance with the License.
- 
- You can obtain a copy of the License at
- https://javaserverfaces.dev.java.net/CDDL.html or
- legal/CDDLv1.0.txt. 
- See the License for the specific language governing
- permission and limitations under the License.
- 
- When distributing Covered Code, include this CDDL
- Header Notice in each file and include the License file
- at legal/CDDLv1.0.txt.    
- If applicable, add the following below the CDDL Header,
- with the fields enclosed by brackets [] replaced by
- your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
- 
- [Name of File] [ver.__] [Date]
- 
- Copyright 2005 Sun Microsystems Inc. All Rights Reserved
--->
-
-<xsl:stylesheet version="1.0"
-xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:output method="html"/>
-
-<xsl:template match="/">
-<html>
-
-<head>
-
-<title>JavaServer Faces 1.0 Standard HTML RenderKit Specification</title>
-
-<STYLE TYPE="text/css" MEDIA="screen">
-
-<xsl:comment>
-
-  TABLE  { border-width: medium; border-style: groove }
-
-  TD  { border-width: thin; border-style: groove }
-
-  TH { background-color: #dcdcdc }
-
-</xsl:comment>
-
-</STYLE>
-
-</head>
-
-<!-- Note that you need to modify the standard-html-renderkit.xml file
-to make it so that render-kit is the root XML element in order for this
-XSL file to work.  -->
-
-<body>
-
-  <h2>Passthru attributes</h2>
-
-  <p>The following attributes are passed thru without interpretation
-  directly to the rendered markup.</p>
-
-  <table>
-
-    <tr>
-
-      <th>attribute</th>
-
-      <th>renderers supporting that attribute</th>
-
-    </tr>
-
-    <tr>
-
-      <td>disabled</td>
-
-    </tr>
-
-    <tr>
-
-      <td>readonly</td>
-
-    </tr>
-
-    <tr>
-
-      <td>ismap</td>
-
-    </tr>
-
-    <tr>
-
-      <td>accesskey</td>
-
-    </tr>
-
-    <tr>
-
-      <td>alt</td>
-
-    </tr>
-
-    <tr>
-
-      <td>cols</td>
-
-    </tr>
-
-    <tr>
-
-      <td>height</td>
-
-    </tr>
-
-    <tr>
-
-      <td>lang</td>
-
-    </tr>
-
-    <tr>
-
-      <td>longdesc</td>
-
-    </tr>
-
-    <tr>
-
-      <td>maxlength</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onblur</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onchange</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onclick</td>
-
-    </tr>
-
-    <tr>
-
-      <td>ondblclick</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onfocus</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onkeydown</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onkeypress</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onkeyup</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onload</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onmousedown</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onmousemove</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onmouseout</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onmouseover</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onmouseup</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onreset</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onselect</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onsubmit</td>
-
-    </tr>
-
-    <tr>
-
-      <td>onunload</td>
-
-    </tr>
-
-    <tr>
-
-      <td>rows</td>
-
-    </tr>
-
-    <tr>
-
-      <td>size</td>
-
-    </tr>
-
-    <tr>
-
-      <td>tabindex</td>
-
-    </tr>
-
-    <tr>
-
-      <td>title</td>
-
-    </tr>
-
-    <tr>
-
-      <td>style</td>
-
-    </tr>
-
-    <tr>
-
-      <td>width</td>
-
-    </tr>
-
-    <tr>
-
-      <td>dir</td>
-
-    </tr>
-
-    <tr>
-
-      <td>rules</td>
-
-    </tr>
-
-    <tr>
-
-      <td>frame</td>
-
-    </tr>
-
-    <tr>
-
-      <td>border</td>
-
-    </tr>
-
-    <tr>
-
-      <td>cellspacing</td>
-
-    </tr>
-
-    <tr>
-
-      <td>cellpadding</td>
-
-    </tr>
-
-    <tr>
-
-      <td>summary</td>
-
-    </tr>
-
-    <tr>
-
-      <td>bgcolor</td>
-
-    </tr>
-
-    <tr>
-
-      <td>usemap</td>
-
-    </tr>
-
-    <tr>
-
-      <td>enctype </td>
-
-    </tr>
-
-    <tr>
-
-      <td>acceptcharset </td>
-
-    </tr>
-
-    <tr>
-
-      <td>accept </td>
-
-    </tr>
-
-    <tr>
-
-      <td>target </td>
-
-    </tr>
-
-    <tr>
-
-      <td>onreset</td>
-
-    </tr>
-
-    <tr>
-
-      <td>rel</td>
-
-    </tr>
-
-    <tr>
-
-      <td>rev</td>
-
-    </tr>
-
-    <tr>
-
-      <td>shape</td>
-
-    </tr>
-
-    <tr>
-
-      <td>coords</td>
-
-    </tr>
-
-    <tr>
-
-      <td>hreflang</td>
-
-    </tr>
-
-  </table>
-
-  <h2>Renderer Descriptions</h2>
-
-  <table>
-
-    <tr>
-
-      <th>renderer-type</th>
-
-      <th>description</th>
-
-    </tr>
-
-    <xsl:for-each select="render-kit/renderer">
-
-      <tr>
-
-	<td><xsl:value-of select="renderer-type"/></td>
-
-	<td><xsl:value-of select="description"/></td>
-
-      </tr>
-
-    </xsl:for-each>
-
-  </table>
-
-</body>
-
-</html>
-
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/jsf-tools/src/main/java/com/sun/faces/ant/AbstractGeneratorTask.java b/jsf-tools/src/main/java/com/sun/faces/ant/AbstractGeneratorTask.java
deleted file mode 100644
index 49d0840..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/ant/AbstractGeneratorTask.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ant;
-
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.BuildException;
-
-/**
- * <p>Base task for generators.</p>
- */
-public abstract class AbstractGeneratorTask extends Java {
-
-    /**
-     * <p>The fully qualified path to the properties file to drive the
-     * Generator.</p>
-     */
-    protected String generatorConfig;
-
-    /**
-     * <p>The fully qualified <code>Generator</code class.</p>
-     */
-    private String generatorClass;
-
-    /**
-     * <p>The fully qualified path to the faces-config.xml to serve
-     * as the model for the <code>Generator</code>.</p>
-     */
-    private String facesConfig;
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void setGeneratorConfig(String generatorConfig) {
-
-        this.generatorConfig = generatorConfig;
-
-    } // END setGeneratorConfig
-
-
-    public void setFacesConfig(String facesConfig) {
-
-        this.facesConfig = facesConfig;
-
-    } // END setFacesConfig
-
-
-    public void setGeneratorClass(String generatorClass) {
-
-        this.generatorClass = generatorClass;
-
-    } // END setGeneratorClass
-
-
-    public void execute() throws BuildException {
-
-        super.createArg().setValue(generatorConfig);
-        super.createArg().setValue(facesConfig);
-
-        super.setClassname(generatorClass);
-
-        super.execute();
-
-    } // END execute
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/ant/AttributeManagerGenTask.java b/jsf-tools/src/main/java/com/sun/faces/ant/AttributeManagerGenTask.java
deleted file mode 100644
index 3fe1579..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/ant/AttributeManagerGenTask.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ant;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Task wrapper for the AttributeManagerGenerator.
- */
-public class AttributeManagerGenTask extends AbstractGeneratorTask {
-
-    private static final String GENERATOR_CLASS =
-        "com.sun.faces.generate.AttributeManagerGenerator";
-
-    public void execute() throws BuildException {
-
-        setGeneratorClass(GENERATOR_CLASS);
-
-        super.execute();
-
-    } // END execute
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/ant/ComponentGenTask.java b/jsf-tools/src/main/java/com/sun/faces/ant/ComponentGenTask.java
deleted file mode 100644
index 43fe606..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/ant/ComponentGenTask.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ant;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * <p>Task to create HTML components.</p>
- */
-public class ComponentGenTask extends AbstractGeneratorTask {
-
-    private static final String GENERATOR_CLASS =
-        "com.sun.faces.generate.HtmlComponentGenerator";
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute() throws BuildException {
-
-        setGeneratorClass(GENERATOR_CLASS);
-
-        super.execute();
-
-    } // END execute
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/ant/FaceletsTLDGenTask.java b/jsf-tools/src/main/java/com/sun/faces/ant/FaceletsTLDGenTask.java
deleted file mode 100644
index 4af99dc..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/ant/FaceletsTLDGenTask.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ant;
-
-import org.apache.tools.ant.BuildException;
-
-
-public class FaceletsTLDGenTask extends AbstractGeneratorTask {
-
-
-    private static final String GENERATOR_CLASS =
-        "com.sun.faces.generate.JspToFaceletsTLD21Generator";
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute() throws BuildException {
-        
-        setGeneratorClass(GENERATOR_CLASS);
-        super.execute();
-
-    } // END execute
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/ant/RenderkitDocGenTask.java b/jsf-tools/src/main/java/com/sun/faces/ant/RenderkitDocGenTask.java
deleted file mode 100644
index 657fb0b..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/ant/RenderkitDocGenTask.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ant;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * <p>Task to create RenderKit documentation.</p>
- */
-public class RenderkitDocGenTask extends AbstractGeneratorTask {
-    
-    
-    private static final String GENERATOR_CLASS = 
-        "com.sun.faces.generate.RenderKitSpecificationGenerator";
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute() throws BuildException {
-
-        setGeneratorClass(GENERATOR_CLASS);
-
-        super.execute();
-
-
-    } // END execute
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/ant/TaglibGenTask.java b/jsf-tools/src/main/java/com/sun/faces/ant/TaglibGenTask.java
deleted file mode 100644
index 768d1f7..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/ant/TaglibGenTask.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ant;
-
-import org.apache.tools.ant.BuildException;
-
-import com.sun.faces.generate.PropertyManager;
-
-/**
- * <p>Task to create a JSP tags.</p>
- */
-public class TaglibGenTask extends AbstractGeneratorTask {
-
-    private static final String GENERATOR_12_CLASS =
-        "com.sun.faces.generate.HtmlTaglib12Generator";
-
-    private static final String GENERATOR_21_CLASS =
-        "com.sun.faces.generate.HtmlTaglib21Generator";
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void execute() throws BuildException {
-
-        PropertyManager manager = PropertyManager.newInstance(generatorConfig);
-        String jspVersion =
-              manager.getProperty(PropertyManager.JSP_VERSION_PROPERTY);
-        if ("2.1".equals(jspVersion)) {
-            setGeneratorClass(GENERATOR_21_CLASS);
-        } else if ("1.2".equals(jspVersion)) {
-            setGeneratorClass(GENERATOR_12_CLASS);
-        } else {
-            throw new BuildException("Unsupported JSP version '"
-                                     + jspVersion
-                                     + '\'');
-        }
-
-        super.execute();
-
-    } // END execute
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/ant/ValidateTask.java b/jsf-tools/src/main/java/com/sun/faces/ant/ValidateTask.java
deleted file mode 100644
index 8332986..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/ant/ValidateTask.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.ant;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.net.MalformedURLException;
-import java.text.MessageFormat;
-
-/**
- * <p>An <code>Ant</code> task to perform schema validation of the
- * <code>standard-html-renderkit.xml</code> document.  The optional task,
- * <code>xmlvalidate</code> is a hassel when it comes to schema.
- */
-public class ValidateTask extends Task {
-
-    private String schemaDir;
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    public void setSchemaDir(String schemaDir) {
-
-        this.schemaDir = schemaDir;
-
-    } // END setSchemaDir
-
-
-    // ------------------------------------------------------- Methods from Task
-
-
-    public void execute() throws BuildException {
-
-        File dir = new File(schemaDir);
-        if (!dir.isDirectory()) {
-            throw new BuildException("The schemaDir '" + schemaDir +
-                "' is not a directory");
-        }
-
-        if (!dir.canRead()) {
-            throw new BuildException("The schemaDir '" + schemaDir +
-                "' cannot be read");
-        }
-
-        SAXParser parser = getParser();
-        String file = schemaDir + File.separatorChar +
-            "standard-html-renderkit.xml";
-        try {
-            parser.parse(new File(file), new Resolver(schemaDir));
-            System.out.println("The document, standard-html-renderkit.xml, is valid.");
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-
-    } // END execute
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private SAXParser getParser() throws BuildException {
-
-        SAXParserFactory factory = SAXParserFactory.newInstance();
-        factory.setValidating(true);
-        factory.setNamespaceAware(true);
-        File schemaSource = new File(schemaDir + File.separatorChar +
-            "web-facesconfig_2_0.xsd");
-        try {
-            SAXParser parser = factory.newSAXParser();
-            parser.setProperty(
-                "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
-                "http://www.w3.org/2001/XMLSchema");
-            parser.setProperty(
-                "http://java.sun.com/xml/jaxp/properties/schemaSource",
-                schemaSource);
-            return parser;
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-
-    } // END getParser
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class Resolver extends DefaultHandler {
-
-        private String j2ee14;
-        private String webServices;
-        private String xml;
-        private String facesConfig;
-
-        private MessageFormat message =
-            new MessageFormat("({0}: {1}, {2}): {3}");
-
-
-        public Resolver(String schemaDir) {
-
-            String basePath = schemaDir + File.separatorChar;
-            j2ee14 = basePath + "j2ee_1_4.xsd";
-            webServices = basePath + "j2ee_web_services_client_1_1.xsd";
-            xml = basePath + "xml.xsd";
-            facesConfig = basePath + "web-facesconfig_1_2.xsd";
-
-        } // END Resolver
-
-
-        private String print(SAXParseException x) {
-
-            String msg = message.format(new Object[]
-            {
-                x.getSystemId(),
-                new Integer(x.getLineNumber()),
-                new Integer(x.getColumnNumber()),
-                x.getMessage()
-            });
-
-            return msg;
-
-        } // END print
-
-
-        public void warning(SAXParseException x) {
-
-            System.out.println("WARNING: " + print(x));
-
-        } // END warning
-
-
-        public void error(SAXParseException x) throws SAXParseException{
-
-            System.out.println("ERROR: " + print(x));
-            throw x;
-
-        } // END error
-
-
-        public void fatalError(SAXParseException x) throws SAXParseException {
-
-            System.out.println("FATAL: " + print(x));
-            throw x;
-
-        } // END fatalError
-
-
-        public InputSource resolveEntity(String publicId,
-                                         String systemId) {
-
-            InputSource source = null;
-            if (systemId.indexOf("j2ee_1_4") > 0) {
-                try {
-                    source =
-                    new InputSource(new FileInputStream(j2ee14));
-                    source.setSystemId(new File(j2ee14).toURL().toString());
-                } catch (FileNotFoundException e) {
-                    //
-                } catch (MalformedURLException e) {
-		    //
-		}
-            } else if (systemId.indexOf("webservice") > 0) {
-                try {
-                    source =
-                    new InputSource(new FileInputStream(webServices));
-                    source.setSystemId(
-                        new File(webServices).toURL().toString());
-                } catch (FileNotFoundException e) {
-                    //
-                } catch (MalformedURLException e) {
-		    //
-		}
-            } else if (systemId.indexOf("xml.xsd") > 0) {
-                try {
-                    source =
-                    new InputSource(new FileInputStream(xml));
-                    source.setSystemId(xml);
-                } catch (FileNotFoundException e) {
-                    //
-		}
-            } else if (systemId.indexOf("web-facesconfig_2_0.xsd") > 0) {
-                try {
-                    source =
-                    new InputSource(new FileInputStream(facesConfig));
-                    source.setSystemId(
-                        new File(facesConfig).toURL().toString());
-                } catch (FileNotFoundException e) {
-                    //
-                } catch (MalformedURLException e) {
-		    //
-		}
-            } else {
-                try {
-                    source = super.resolveEntity(publicId, systemId);
-                    if (source != null && publicId != null)
-                        source.setPublicId(publicId);
-                    if (source != null && systemId != null)
-                        source.setSystemId(systemId);
-                } catch (Exception e) {
-                    //
-                }
-            }
-
-            return source;
-
-        } // END resolveEntity
-
-    } // END Resolver
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/DigesterFactory.java b/jsf-tools/src/main/java/com/sun/faces/config/DigesterFactory.java
deleted file mode 100644
index d84f502..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/DigesterFactory.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.config;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import java.net.URL;
-import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.commons.digester.Digester;
-import org.apache.commons.logging.impl.NoOpLog;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXNotSupportedException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import com.sun.faces.util.ToolsUtil;
-import org.xml.sax.EntityResolver;
-
-/**
- * <p>A simple factory to hide <code>Digester</code> configuration
- * details.</p>
- */
-public class DigesterFactory {
-
-    private static final Logger logger = ToolsUtil.getLogger(ToolsUtil.FACES_LOGGER +
-            ToolsUtil.CONFIG_LOGGER);    
-    
-    /**
-     * <p><code>Xerces</code> specific feature to enable both
-     * DTD and Schema validation.</p>
-     */
-    private static final String XERCES_VALIDATION =
-        "http://xml.org/sax/features/validation";
-
-    /**
-     * <p><code>Xerces</code> specific feature to enable both
-     * DTD and Schema validation.</p>
-     */
-    private static final String XERCES_SCHEMA_VALIDATION =
-        "http://apache.org/xml/features/validation/schema";
-
-    /**
-     * <p><code>Xerces</code> specific feature to enabled constraint
-     * validation.</p>
-     */
-    private static final String XERCES_SCHEMA_CONSTRAINT_VALIDATION =
-        "http://apache.org/xml/features/validation/schema-full-checking";
-
-    /**
-     * <p>Custom <code>EntityResolver</code>.</p>
-     */
-    private static final JsfEntityResolver RESOLVER = new JsfEntityResolver();
-
-    /**
-     * <p>Custom <code>ErrorHandler</code>.</p>
-     */
-    private static final JsfErrorHandler ERROR_HANDLER = new JsfErrorHandler();
-
-    /**
-     * <p>Indicates whether or not document validation is
-     * requested or not.</p>
-     */
-    private boolean validating;
-    
-    /**
-     * <p>The <code>ThreadLocal</code> variable used to record the
-     * VersionListener instance for each processing thread.</p>
-     */
-    private static ThreadLocal versionListener = new ThreadLocal() {
-            protected Object initialValue() { return (null); }
-        };
-
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Creates a new DigesterFactory instance.</p>
-     * @param isValidating - <code>true</code> if the <code>Digester</code>
-     *  instance that is ultimately returned should be configured (if possible)
-     *  for document validation.  If validation is not desired, pass
-     *  <code>false</code>.
-     */
-    private DigesterFactory(boolean isValidating) {
-
-        validating = isValidating;
-    } // END DigesterFactory
-
-
-    // ---------------------------------------------------------- Public Methods
-    
-    /**
-     * <p>Returns a new <code>DigesterFactory</code> instance that will create
-     * a non-validating <code>Digester</code> instance.</p>
-     */
-    public static DigesterFactory newInstance() {
-
-        return DigesterFactory.newInstance(false);
-
-    } // END newInstance
-
-
-    /**
-     * <p>Creates a new <code>DigesterFactory</code> instance that will
-     * create a <code>Digester</code> instance where validation depends
-     * on the value of <code>isValidating</code>.</p>
-     * @param isValidating - <code>true</code> if the <code>Digester</code>
-     *  instance that is ultimately returned should be configured (if possible)
-     *  for document validation.  If validation is not desired, pass
-     *  <code>false</code>.
-     * @return a new <code>DigesterFactory</code> capable of creating
-     *  <code>Digester</code>instances
-     */
-    public static DigesterFactory newInstance(boolean isValidating) {
-        DigesterFactory result = new DigesterFactory(isValidating);
-        return result;
-
-    } // END newInstance
-
-    /**
-     * <p>Creates a new <code>DigesterFactory</code> instance that will
-     * create a <code>Digester</code> instance where validation depends
-     * on the value of <code>isValidating</code>.</p>
-     * @param isValidating - <code>true</code> if the <code>Digester</code>
-     *  instance that is ultimately returned should be configured (if possible)
-     *  for document validation.  If validation is not desired, pass
-     *  <code>false</code>.
-     * @param GrammarListener a GrammarListener instance
-     * @return a new <code>DigesterFactory</code> capable of creating
-     *  <code>Digester</code>instances
-     */
-    public static DigesterFactory newInstance(boolean isValidating,
-            VersionListener listener) {
-        DigesterFactory result = new DigesterFactory(isValidating);
-        if (null != listener) {
-            result.RESOLVER.setVersionListener(listener);
-            versionListener.set(listener);
-        }
-
-        return result;
-
-    } // END newInstance
-    
-    public static VersionListener getVersionListener() {
-        return ((VersionListener) versionListener.get());
-    }
-    
-    public static void releaseDigester(Digester toRelease) {
-	RESOLVER.setVersionListener(null);
-        versionListener.set(null);
-    }
-
-
-    /**
-     * <p>Creates a new <code>Digester</code> instance configured for use
-     * with JSF.</p>
-     */
-    public Digester createDigester() {
-
-        Digester digester = new Digester();
-        configureDigester(digester);
-
-        return digester;
-
-    } // END getDigester
-
-    /**
-     * <p>Implemented by a class that wants to be called as a 
-     * particular configuration file is parsed.</p>
-     *
-     * <p>This interface is implemented as an anonymous inner class
-     * inside ConfigureListener.digester().</p>
-     */ 
-    
-    public interface VersionListener {
-
-	/**
-	 * <p>Called from the EntityResolver when we know one of the
-	 * XML Grammar elements to which this config file conforms.</p>
-	 */
-        public void takeActionOnGrammar(String grammar);
-
-	/**
-	 * <p>Called from the individual digester beans to cause the
-	 * artifact to be associated with the current JSF spec level of
-	 * the file being parsed.</p>
-	 */
-        public void takeActionOnArtifact(String artifactName);
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Configures the provided <code>Digester</code> instance appropriate
-     * for use with JSF.</p>
-     * @param digester - the <code>Digester</code> instance to configure
-     */
-    private void configureDigester(Digester digester) {
-
-        digester.setNamespaceAware(true);
-        digester.setUseContextClassLoader(true);
-        digester.setEntityResolver(RESOLVER);
-        digester.setErrorHandler(ERROR_HANDLER);
-        // disable digester log messages
-        digester.setLogger(new NoOpLog());
-
-        if (validating) {
-
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE, "Attempting to configure Digester to perform" +
-                    " document validation.");
-            }
-
-            // In order to validate using *both* DTD and Schema, certain
-            // Xerces specific features are required.  Try to set these
-            // features.  If an exception is thrown trying to set these
-            // features, then disable validation.
-
-            try {
-                digester.setFeature(XERCES_VALIDATION, true);
-                digester.setFeature(XERCES_SCHEMA_VALIDATION, true);
-                digester.setFeature(XERCES_SCHEMA_CONSTRAINT_VALIDATION, true);
-                digester.setValidating(true);
-            } catch (SAXNotSupportedException e) {
-
-                if (logger.isLoggable(Level.WARNING)) {
-                    logger.log(Level.WARNING, "Attempt to set supported feature on XMLReader, " +
-                        "but the value provided was not accepted.  " +
-                        "Validation will be disabledb.");
-                }
-
-                digester.setValidating(false);
-
-            } catch (SAXNotRecognizedException e) {
-
-                if (logger.isLoggable(Level.WARNING)) {
-                    logger.log(Level.WARNING, "Attempt to set unsupported feature on XMLReader" +
-                        " necessary for validation.  Validation will be" +
-                        "disabled.");
-                }
-
-                digester.setValidating(false);
-
-            } catch (ParserConfigurationException e) {
-
-                if (logger.isLoggable(Level.WARNING)) {
-                    logger.log(Level.WARNING, "Digester unable to configure underlying parser." +
-                        "  Validation will be disabled.");
-                }
-
-                digester.setValidating(false);
-
-            }
-        } else {
-            digester.setValidating(false);
-        }
-
-    } // END configureDigester
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    private static class JsfEntityResolver extends DefaultHandler {
-
-        /**
-         * <p>Contains associations between grammar name and the physical
-         * resource.</p>
-         */
-        private static final String[][] DTD_SCHEMA_INFO = {
-            {
-                "web-facesconfig_1_0.dtd",
-                "/com/sun/faces/web-facesconfig_1_0.dtd"
-            },
-            {
-                "web-facesconfig_1_1.dtd",
-                "/com/sun/faces/web-facesconfig_1_1.dtd"
-            },
-            {
-                "web-facesconfig_1_2.xsd",
-                "/com/sun/faces/web-facesconfig_1_2.xsd"
-            },
-            {
-                "web-facesconfig_2_0.xsd",
-                "/com/sun/faces/web-facesconfig_2_0.xsd"
-            },
-            {
-                "javaee_5.xsd",
-                "/com/sun/faces/javaee_5.xsd"
-            },
-            {
-                "javaee_web_services_client_1_2.xsd",
-                "/com/sun/faces/javaee_web_services_client_1_2.xsd"
-            },
-            {
-                "xml.xsd",
-                "/com/sun/faces/xml.xsd"
-            }
-        };
-
-        /**
-         * <p>Contains mapping between grammar name and the local URL to the
-         * physical resource.</p>
-         */
-        private HashMap<String,String> entities = new HashMap<String, String>();
-        
-        // -------------------------------------------------------- Constructors
-
-
-        public JsfEntityResolver() {
-
-            // Add mappings between last segment of system ID and
-            // the expected local physical resource.  If the resource
-            // cannot be found, then rely on default entity resolution
-            // and hope a firewall isn't in the way or a proxy has
-            // been configured
-            for (String[] aDTD_SCHEMA_INFO : DTD_SCHEMA_INFO) {
-                URL url = this.getClass().getResource(aDTD_SCHEMA_INFO[1]);
-                if (url == null) {
-                    if (logger.isLoggable(Level.WARNING)) {
-                        logger.log(Level.WARNING,
-                                   "Unable to locate local resource '"
-                                   + aDTD_SCHEMA_INFO[1]
-                                   + "'.  Standard entity "
-                                   + "resolution will be used when request "
-                                   + "is present for '"
-                                   + aDTD_SCHEMA_INFO[0] + '\'');
-                    }
-                } else {
-                    entities.put(aDTD_SCHEMA_INFO[0], url.toString());
-                }
-            }
-            
-
-        } // END JsfEntityResolver
-        
-        private VersionListener versionListener;
-
-        public void setVersionListener(VersionListener listener) {
-            versionListener = listener;
-        }
-
-        public VersionListener getVersionListener() {
-            return versionListener;
-        }
-
-        // ----------------------------------------- Methods from DefaultHandler
-
-
-        /**
-         * <p>Resolves the physical resource using the last segment of
-         * the <code>systemId</code>
-         * (e.g. http://java.sun.com/dtds/web-facesconfig_1_1.dtd,
-         * the last segment would be web-facesconfig_1_1.dtd).  If a mapping
-         * cannot be found for the segment, then defer to the
-         * <code>DefaultHandler</code> for resolution.</p>
-         */
-        public InputSource resolveEntity(String publicId, String systemId)
-        throws SAXException {
-
-            // publicId is ignored.  Resolution performed using
-            // the systemId.
-
-            // If no system ID, defer to superclass
-            if (systemId == null) {
-                InputSource result;
-                try {
-                    result = super.resolveEntity(publicId, systemId);
-                }
-                catch (Exception e) {
-                    throw new SAXException(e);
-                }
-                return result;
-            }
-
-            String grammarName =
-                systemId.substring(systemId.lastIndexOf('/') + 1);
-            if (null != getVersionListener()) {
-                getVersionListener().takeActionOnGrammar(grammarName);
-            }
-
-            String entityURL = entities.get(grammarName);
-
-            InputSource source;
-            if (entityURL == null) {
-                // we don't have a registered mapping, so defer to our
-                // superclass for resolution
-
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE, "Unknown entity, deferring to superclass.");
-                }
-                try {
-                    source = super.resolveEntity(publicId, systemId);
-                }
-                catch (Exception e) {
-                    throw new SAXException(e);
-                }
-
-            } else {
-
-                try {
-                    source = new InputSource(new URL(entityURL).openStream());
-                } catch (Exception e) {
-                    if (logger.isLoggable(Level.WARNING)) {
-                        logger.log(Level.WARNING, "Unable to create InputSource for URL '" +
-                            entityURL + "'");
-                    }
-                   
-                    source = null;
-                }
-            }
-
-            // Set the System ID of the InputSource with the URL of the local
-            // resource - necessary to prevent parsing errors
-            if (source != null) {
-                source.setSystemId(entityURL);
-
-                if (publicId != null) {
-                    source.setPublicId(publicId);
-                }
-            }
-
-            return source;
-
-        } // END resolveEntity
-
-    } // END JsfEntityResolver
-    
-    private static class JsfErrorHandler implements ErrorHandler {
-        public void warning(SAXParseException exception) throws SAXException {
-            // do nothing
-        }
-
-        public void error(SAXParseException exception) throws SAXException {
-            throw exception;
-        }
-
-        public void fatalError(SAXParseException exception) throws SAXException {
-            throw exception;
-        }
-    }
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ApplicationBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ApplicationBean.java
deleted file mode 100644
index e2dd273..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ApplicationBean.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import com.sun.faces.config.DigesterFactory;
-import com.sun.faces.config.DigesterFactory.VersionListener;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * <p>Configuration bean for <code><application> element.</p>
- */
-
-// IMPLEMENTATION NOTE:  It is necessary to collect the class names of the
-// sub-elements representing pluggable components, so we can chain them together
-// if the implementation classes have appropriate constructors.
-
-public class ApplicationBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private LocaleConfigBean localeConfig;
-    public LocaleConfigBean getLocaleConfig() { return localeConfig; }
-    public void setLocaleConfig(LocaleConfigBean localeConfig)
-    { this.localeConfig = localeConfig; }
-
-
-    private String messageBundle;
-    public String getMessageBundle() { return messageBundle; }
-    public void setMessageBundle(String messageBundle)
-    { this.messageBundle = messageBundle; }
-
-    private String defaultRenderKitId;
-    public String getDefaultRenderKitId() { return defaultRenderKitId; }
-    public void setDefaultRenderKitId(String defaultRenderKitId)
-    { this.defaultRenderKitId = defaultRenderKitId; }
-
-    // -------------------------------------------- ActionListenerHolder Methods
-
-
-    private List<String> actionListeners = new ArrayList<String>();
-
-
-    public void addActionListener(String actionListener) {
-        if (!actionListeners.contains(actionListener)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(actionListener);
-            }
-            actionListeners.add(actionListener);
-        }
-    }
-
-
-    public String[] getActionListeners() {
-        String results[] = new String[actionListeners.size()];
-        return ((String[]) actionListeners.toArray(results));
-    }
-
-
-    public void removeActionListener(String actionListener) {
-        actionListeners.remove(actionListener);
-    }
-
-
-    // ----------------------------------------- NavigationHandlerHolder Methods
-
-
-    private List<String> navigationHandlers = new ArrayList<String>();
-
-
-    public void addNavigationHandler(String navigationHandler) {
-        if (!navigationHandlers.contains(navigationHandler)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(navigationHandler);
-            }
-            navigationHandlers.add(navigationHandler);
-        }
-    }
-
-
-    public String[] getNavigationHandlers() {
-        String results[] = new String[navigationHandlers.size()];
-        return ((String[]) navigationHandlers.toArray(results));
-    }
-
-
-    public void removeNavigationHandler(String navigationHandler) {
-        navigationHandlers.remove(navigationHandler);
-    }
-
-
-    // ------------------------------------------ PropertyResolverHolder Methods
-
-
-    private List<String> propertyResolvers = new ArrayList<String>();
-
-
-    public void addPropertyResolver(String propertyResolver) {
-        if (!propertyResolvers.contains(propertyResolver)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(propertyResolver);
-            }
-            propertyResolvers.add(propertyResolver);
-        }
-    }
-
-
-    public String[] getPropertyResolvers() {
-        String results[] = new String[propertyResolvers.size()];
-        return ((String[]) propertyResolvers.toArray(results));
-    }
-
-
-    public void removePropertyResolver(String propertyResolver) {
-        propertyResolvers.remove(propertyResolver);
-    }
-
-    // ---------------------------------------------- StateManagerHolder Methods
-
-    private Map<String,ResourceBundleBean> resourceBundles = new TreeMap<String, ResourceBundleBean>();
-
-
-    public void addResourceBundle(ResourceBundleBean descriptor) {
-        resourceBundles.put(descriptor.getVar(), descriptor);
-    }
-
-    public ResourceBundleBean getResourceBundle(String name) {
-        return (resourceBundles.get(name));
-    }
-
-
-    public ResourceBundleBean[] getResourceBundles() {
-        ResourceBundleBean results[] =
-            new ResourceBundleBean[resourceBundles.size()];
-        return ((ResourceBundleBean[]) resourceBundles.values().toArray(results));
-    }
-    
-    public void clearResourceBundles() {
-        resourceBundles.clear();
-    }
-    
-    public void removeResourceBundle(ResourceBundleBean descriptor) {
-        resourceBundles.remove(descriptor.getVar());
-    }
-
-    // ---------------------------------------------- StateManagerHolder Methods
-
-
-    private List<String> stateManagers = new ArrayList<String>();
-
-
-    public void addStateManager(String stateManager) {
-        if (!stateManagers.contains(stateManager)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(stateManager);
-            }
-            stateManagers.add(stateManager);
-        }
-    }
-
-
-    public String[] getStateManagers() {
-        String results[] = new String[stateManagers.size()];
-        return ((String[]) stateManagers.toArray(results));
-    }
-
-
-    public void removeStateManager(String stateManager) {
-        stateManagers.remove(stateManager);
-    }
-
-
-    // ------------------------------------------ VariableResolverHolder Methods
-
-
-    private List<String> variableResolvers = new ArrayList<String>();
-
-
-    public void addVariableResolver(String variableResolver) {
-        if (!variableResolvers.contains(variableResolver)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(variableResolver);
-            }
-            variableResolvers.add(variableResolver);
-        }
-    }
-
-
-    public String[] getVariableResolvers() {
-        String results[] = new String[variableResolvers.size()];
-        return ((String[]) variableResolvers.toArray(results));
-    }
-
-
-    public void removeVariableResolver(String variableResolver) {
-        variableResolvers.remove(variableResolver);
-    }
-    
-    // ------------------------------------------ ELResolver Holder Methods
-
-
-    private List<String> elResolvers = new ArrayList<String>();
-
-
-    public void addELResolver(String elResolver) {
-        if (!elResolvers.contains(elResolver)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(elResolver);
-            }
-            elResolvers.add(elResolver);
-        }
-    }
-
-
-    public String[] getELResolvers() {
-        String results[] = new String[elResolvers.size()];
-        return ((String[]) elResolvers.toArray(results));
-    }
-
-
-    public void removeELResolver(String elResolver) {
-        elResolvers.remove(elResolver);
-    }
-
-
-    // ------------------------------------------ ViewHandlerHolder Methods
-
-
-    private List<String> viewHandlers = new ArrayList<String>();
-
-
-    public void addViewHandler(String viewHandler) {
-        if (!viewHandlers.contains(viewHandler)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(viewHandler);
-            }
-            viewHandlers.add(viewHandler);
-        }
-    }
-
-
-    public String[] getViewHandlers() {
-        String results[] = new String[viewHandlers.size()];
-        return ((String[]) viewHandlers.toArray(results));
-    }
-
-
-    public void removeViewHandler(String viewHandler) {
-        viewHandlers.remove(viewHandler);
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/AttributeBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/AttributeBean.java
deleted file mode 100644
index 291b44b..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/AttributeBean.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Configuration bean for <code><attribute> element.</p>
- */
-
-public class AttributeBean extends FeatureBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String attributeClass;
-    public String getAttributeClass() { return attributeClass; }
-    public void setAttributeClass(String attributeClass)
-    { this.attributeClass = attributeClass; }
-
-
-    private String attributeName;
-    public String getAttributeName() { return attributeName; }
-    public void setAttributeName(String attributeName)
-    { this.attributeName = attributeName; }
-
-
-    private String suggestedValue;
-    public String getSuggestedValue() { return suggestedValue; }
-    public void setSuggestedValue(String suggestedValue)
-    { this.suggestedValue = suggestedValue; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // defaultValue == Non-standard default value (if any)
-    private String defaultValue = null;
-    public String getDefaultValue() { return defaultValue; }
-    public void setDefaultValue(String defaultValue)
-    { this.defaultValue = defaultValue; }
-
-    // passThrough == HTML attribute that passes through [default=false]
-    private boolean passThrough = false;
-    public boolean isPassThrough() { return passThrough; }
-    public void setPassThrough(boolean passThrough)
-    { this.passThrough = passThrough; }
-
-
-    // required == in TLD <attribute>, set required to true [default=false]
-    private boolean required = false;
-    public boolean isRequired() { return required; }
-    public void setRequired(boolean required)
-    { this.required = required; }
-
-
-    // tagAttribute == Generate TLD attribute [default=true]
-    private boolean tagAttribute = true;
-    public boolean isTagAttribute() { return tagAttribute; }
-    public void setTagAttribute(boolean tagAttribute)
-    { this.tagAttribute = tagAttribute; }
-
-    private boolean renderAttributeIgnore = false;
-    public boolean isAttributeIgnoredForRenderer() {
-        return renderAttributeIgnore;
-    }
-    public void setAttributeIgnoredForRenderer(boolean renderAttributeIgnore) {
-        this.renderAttributeIgnore = renderAttributeIgnore;
-    }
-
-
-    // Behavior attribute, [dafault=false]
-    private List<String> behaviors = null;
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @return the behaviorAttribute
-	 */
-	public List<String> getBehaviors() {
-		return behaviors;
-	}
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @param behaviorAttribute the behaviorAttribute to set
-	 */
-	public void addBehavior(String behavior) {
-		if(null == this.behaviors){
-			this.behaviors = new ArrayList<String>(5);
-		}
-		this.behaviors.add(behavior);
-	}
-	
-	public void addAllBehaviors(List<String>behaviors) {
-		if(null != behaviors){
-			if(null == this.behaviors){
-				this.behaviors = new ArrayList<String>(behaviors);
-			} else {
-				this.behaviors.addAll(behaviors);
-			}
-		}
-	}
-
-    private boolean defaultBehavior = false;
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @return the defaultBehavior
-	 */
-	public boolean isDefaultBehavior() {
-		return defaultBehavior;
-	}
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @param defaultBehavior the defaultBehavior to set
-	 */
-	public void setDefaultBehavior(boolean defaultBehavior) {
-		this.defaultBehavior = defaultBehavior;
-	}
-    
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/AttributeHolder.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/AttributeHolder.java
deleted file mode 100644
index fc8e134..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/AttributeHolder.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Interface denoting a configuration bean that stores a named collection
- * of attributes.</p>
- */
-
-public interface AttributeHolder {
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-    /**
-     * <p>Add the specified attribute descriptor, replacing any existing
-     * descriptor for this attribute name.</p>
-     *
-     * @param descriptor Descriptor to be added
-     */
-    public void addAttribute(AttributeBean descriptor);
-
-
-    /**
-     * <p>Return the attribute descriptor for the specified attribute name,
-     * if any; otherwise, return <code>null</code>.</p>
-     *
-     * @param name Name of the attribute for which to retrieve a descriptor
-     */
-    public AttributeBean getAttribute(String name);
-
-
-    /**
-     * <p>Return the descriptors of all attributes for which descriptors have
-     * been registered, or an empty array if none have been registered.</p>
-     */
-    public AttributeBean[] getAttributes();
-
-
-    /**
-     * <p>Deregister the specified attribute descriptor, if it is registered.
-     * </p>
-     *
-     * @param descriptor Descriptor to be removed
-     */
-    public void removeAttribute(AttributeBean descriptor);
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ComponentBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ComponentBean.java
deleted file mode 100644
index 3832f88..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ComponentBean.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * <p>Configuration bean for <code><attribute> element.</p>
- */
-
-public class ComponentBean extends FeatureBean
- implements AttributeHolder, PropertyHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String componentClass;
-    public String getComponentClass() { return componentClass; }
-    public void setComponentClass(String componentClass)
-    { this.componentClass = componentClass; }
-
-
-    private String componentType;
-    public String getComponentType() { return componentType; }
-    public void setComponentType(String componentType)
-    { this.componentType = componentType; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // baseComponentType == componentType of base class for this component class
-    // (extends UIComponentBase if not specified)
-    private String baseComponentType;
-    public String getBaseComponentType() { return baseComponentType; }
-    public void setBaseComponentType(String baseComponentType)
-    { this.baseComponentType = baseComponentType; }
-
-
-    // componentFamily == default componentFamily for this component class
-    // (inherited from baseComponentType if not specified)
-    private String componentFamily;
-    public String getComponentFamily() { return componentFamily; }
-    public void setComponentFamily(String componentFamily)
-    { this.componentFamily = componentFamily; }
-
-
-    // rendererType == default rendererType for this component class
-    // (set to null if not specified)
-    private String rendererType;
-    public String getRendererType() { return rendererType; }
-    public void setRendererType(String rendererType)
-    { this.rendererType = rendererType; }
-
-    private boolean ignore;
-    public boolean isIgnore() { return ignore; }
-    public void setIgnore(boolean ignore) { this.ignore = ignore; }
-
-
-    // ------------------------------------------------- AttributeHolder Methods
-
-
-    private Map<String,AttributeBean> attributes = new TreeMap<String, AttributeBean>();
-
-
-    public void addAttribute(AttributeBean descriptor) {
-        attributes.put(descriptor.getAttributeName(), descriptor);
-    }
-
-
-    public AttributeBean getAttribute(String name) {
-        return (attributes.get(name));
-    }
-
-
-    public AttributeBean[] getAttributes() {
-        AttributeBean results[] = new AttributeBean[attributes.size()];
-        return (attributes.values().toArray(results));
-    }
-
-
-    public void removeAttribute(AttributeBean descriptor) {
-        attributes.remove(descriptor.getAttributeName());
-    }
-
-
-    // ------------------------------------------------- PropertyHolder Methods
-
-
-    private Map<String,PropertyBean> properties = new TreeMap<String, PropertyBean>();
-
-
-    public void addProperty(PropertyBean descriptor) {
-        properties.put(descriptor.getPropertyName(), descriptor);
-    }
-
-
-    public PropertyBean getProperty(String name) {
-        return (properties.get(name));
-    }
-
-
-    public PropertyBean[] getProperties() {
-        PropertyBean results[] = new PropertyBean[properties.size()];
-        return (properties.values().toArray(results));
-    }
-
-
-    public void removeProperty(PropertyBean descriptor) {
-        properties.remove(descriptor.getPropertyName());
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ConverterBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ConverterBean.java
deleted file mode 100644
index 4e83ce9..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ConverterBean.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import com.sun.faces.util.ToolsUtil;
-
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * <p>Configuration bean for <code><attribute> element.</p>
- */
-
-public class ConverterBean extends FeatureBean
- implements AttributeHolder, PropertyHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String converterClass;
-    public String getConverterClass() { return converterClass; }
-    public void setConverterClass(String converterClass)
-    { this.converterClass = converterClass; }
-
-
-    private Class converterForClass;
-    public Class getConverterForClass() { return converterForClass; }
-    public void setConverterForClass(String converterForClass) {
-        try {
-            this.converterForClass = ToolsUtil.loadClass(converterForClass,
-                                                         this);
-        } catch (ClassNotFoundException cnfe) {
-            throw new RuntimeException(cnfe);
-        }
-    }
-    public void setConverterForClass(Class converterForClass) {
-            this.converterForClass = converterForClass;        
-    }
-
-
-    private String converterId;
-    public String getConverterId() { return converterId; }
-    public void setConverterId(String converterId)
-    { this.converterId = converterId; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ------------------------------------------------- AttributeHolder Methods
-
-
-    private Map<String,AttributeBean> attributes = new TreeMap<String, AttributeBean>();
-
-
-    public void addAttribute(AttributeBean descriptor) {
-        attributes.put(descriptor.getAttributeName(), descriptor);
-    }
-
-
-    public AttributeBean getAttribute(String name) {
-        return (attributes.get(name));
-    }
-
-
-    public AttributeBean[] getAttributes() {
-        AttributeBean results[] = new AttributeBean[attributes.size()];
-        return (attributes.values().toArray(results));
-    }
-
-
-    public void removeAttribute(AttributeBean descriptor) {
-        attributes.remove(descriptor.getAttributeName());
-    }
-
-
-    // ------------------------------------------------- PropertyHolder Methods
-
-
-    private Map<String,PropertyBean> properties = new TreeMap<String, PropertyBean>();
-
-
-    public void addProperty(PropertyBean descriptor) {
-        properties.put(descriptor.getPropertyName(), descriptor);
-    }
-
-
-    public PropertyBean getProperty(String name) {
-        return (properties.get(name));
-    }
-
-
-    public PropertyBean[] getProperties() {
-        PropertyBean results[] = new PropertyBean[properties.size()];
-        return (properties.values().toArray(results));
-    }
-
-
-    public void removeProperty(PropertyBean descriptor) {
-        properties.remove(descriptor.getPropertyName());
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/DescriptionBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/DescriptionBean.java
deleted file mode 100644
index 137f024..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/DescriptionBean.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><description> element.</p>
- */
-
-public class DescriptionBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String description;
-    public String getDescription() { return description; }
-    public void setDescription(String description)
-    { this.description = description; }
-
-
-    private String lang;
-    public String getLang() { return lang; }
-    public void setLang(String lang)
-    { this.lang = lang; }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/DisplayNameBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/DisplayNameBean.java
deleted file mode 100644
index 55db9fb..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/DisplayNameBean.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><display-name> element.</p>
- */
-
-public class DisplayNameBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String displayName;
-    public String getDisplayName() { return displayName; }
-    public void setDisplayName(String displayName)
-    { this.displayName = displayName; }
-
-
-    private String lang;
-    public String getLang() { return lang; }
-    public void setLang(String lang)
-    { this.lang = lang; }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/FacesConfigBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/FacesConfigBean.java
deleted file mode 100644
index 907cc88..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/FacesConfigBean.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-import com.sun.faces.config.DigesterFactory;
-import com.sun.faces.config.DigesterFactory.VersionListener;
-import com.sun.faces.util.ToolsUtil;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-
-/**
- * <p>Base configuration bean for JavaServer Faces Configuration Files.</p>
- */
-
-public class FacesConfigBean {
-
-
-    private static final Logger logger = ToolsUtil.getLogger(ToolsUtil.FACES_LOGGER +
-            ToolsUtil.BEANS_LOGGER);
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private ApplicationBean application;
-    public ApplicationBean getApplication() { return application; }
-    public void setApplication(ApplicationBean application)
-    { this.application = application; }
-
-
-    private FactoryBean factory;
-    public FactoryBean getFactory() { return factory; }
-    public void setFactory(FactoryBean factory)
-    { this.factory = factory; }
-
-
-    private LifecycleBean lifecycle;
-    public LifecycleBean getLifecycle() { return lifecycle; }
-    public void setLifecycle(LifecycleBean lifecycle)
-    { this.lifecycle = lifecycle; }
-
-
-    // ------------------------------------------------- ComponentHolder Methods
-
-
-    private Map<String,ComponentBean> components = new TreeMap<String, ComponentBean>();
-
-
-    public void addComponent(ComponentBean descriptor) {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "addComponent(" + descriptor.getComponentType() + ")");
-        }
-        components.put(descriptor.getComponentType(), descriptor);
-    }
-
-
-    public ComponentBean getComponent(String componentType) {
-        return (components.get(componentType));
-    }
-
-
-    public ComponentBean[] getComponents() {
-        ComponentBean results[] = new ComponentBean[components.size()];
-        return (components.values().toArray(results));
-    }
-
-
-    public void removeComponent(ComponentBean descriptor) {
-        components.remove(descriptor.getComponentType());
-    }
-
-
-    // ------------------------------------------------- ConverterHolder Methods
-
-
-    private Map<String,ConverterBean> convertersByClass = new TreeMap<String, ConverterBean>();
-    private Map<String,ConverterBean> convertersById = new TreeMap<String, ConverterBean>();
-
-
-    public void addConverter(ConverterBean descriptor) {
-        if (descriptor.getConverterId() != null) {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE, "addConverterById(" +
-                          descriptor.getConverterId() + ")");
-            }
-            convertersById.put(descriptor.getConverterId(), descriptor);
-        } else {
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE, "addConverterByClass(" +
-                          descriptor.getConverterForClass() + ")");
-            }
-            convertersByClass.put(descriptor.getConverterForClass().getName(),
-                                  descriptor);
-        }
-    }
-
-
-    public ConverterBean getConverterByClass(String converterForClass) {
-        return (convertersByClass.get(converterForClass));
-    }
-
-
-    public ConverterBean getConverterById(String converterId) {
-        return (convertersById.get(converterId));
-    }
-
-
-    public ConverterBean[] getConvertersByClass() {
-        ConverterBean results[] = new ConverterBean[convertersByClass.size()];
-        return (convertersByClass.values().toArray(results));
-    }
-
-
-    public ConverterBean[] getConvertersById() {
-        ConverterBean results[] = new ConverterBean[convertersById.size()];
-        return (convertersById.values().toArray(results));
-    }
-
-
-    public void removeConverter(ConverterBean descriptor) {
-        if (descriptor.getConverterId() != null) {
-            convertersById.remove(descriptor.getConverterId());
-        } else {
-            convertersByClass.remove(descriptor.getConverterForClass());
-        }
-    }
-
-
-    // ----------------------------------------------- ManagedBeanHolder Methods
-
-
-    private Map<String,ManagedBeanBean> managedBeans = new TreeMap<String, ManagedBeanBean>();
-
-
-    public void addManagedBean(ManagedBeanBean descriptor) {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "addManagedBean(" +
-                      descriptor.getManagedBeanName() + ")");
-        }
-        managedBeans.put(descriptor.getManagedBeanName(), descriptor);
-    }
-
-    public ManagedBeanBean getManagedBean(String name) {
-        return (managedBeans.get(name));
-    }
-
-
-    public ManagedBeanBean[] getManagedBeans() {
-        ManagedBeanBean results[] =
-            new ManagedBeanBean[managedBeans.size()];
-        return (managedBeans.values().toArray(results));
-    }
-
-
-    public void removeManagedBean(ManagedBeanBean descriptor) {
-        managedBeans.remove(descriptor.getManagedBeanName());
-    }
-
-
-    // -------------------------------------------- NavigationRuleHolder Methods
-
-
-    private Map<String,NavigationRuleBean> navigationRules = new TreeMap<String, NavigationRuleBean>();
-
-
-    public void addNavigationRule(NavigationRuleBean descriptor) {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "addNavigationRule(" + descriptor.getFromViewId() + ")");
-        }
-        navigationRules.put(descriptor.getFromViewId(), descriptor);
-    }
-
-
-    public NavigationRuleBean getNavigationRule(String fromViewId) {
-        return (navigationRules.get(fromViewId));
-    }
-
-
-    public NavigationRuleBean[] getNavigationRules() {
-        NavigationRuleBean results[] =
-            new NavigationRuleBean[navigationRules.size()];
-        return
-            (navigationRules.values().toArray(results));
-    }
-
-
-    public void removeNavigationRule(NavigationRuleBean descriptor) {
-        navigationRules.remove(descriptor.getFromViewId());
-    }
-
-
-    // -------------------------------------------- ReferencedBeanHolder Methods
-
-
-    private Map<String,ReferencedBeanBean> referencedBeans = new TreeMap<String, ReferencedBeanBean>();
-
-
-    public void addReferencedBean(ReferencedBeanBean descriptor) {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "addReferencedBean(" +
-                      descriptor.getReferencedBeanName() + ")");
-        }
-        referencedBeans.put(descriptor.getReferencedBeanName(), descriptor);
-    }
-
-    public ReferencedBeanBean getReferencedBean(String name) {
-        return (referencedBeans.get(name));
-    }
-
-
-    public ReferencedBeanBean[] getReferencedBeans() {
-        ReferencedBeanBean results[] =
-            new ReferencedBeanBean[referencedBeans.size()];
-        return (referencedBeans.values().toArray(results));
-    }
-
-
-    public void removeReferencedBean(ReferencedBeanBean descriptor) {
-        referencedBeans.remove(descriptor.getReferencedBeanName());
-    }
-
-
-    // ------------------------------------------------- RenderKitHolder Methods
-
-
-    private Map<String,RenderKitBean> renderKits = new TreeMap<String, RenderKitBean>();
-
-
-    public void addRenderKit(RenderKitBean descriptor) {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "addRenderKit(" + descriptor.getRenderKitId() + ")");
-        }
-        VersionListener listener = DigesterFactory.getVersionListener();
-        if (null != listener) {
-            listener.takeActionOnArtifact(descriptor.getRenderKitId());
-        }
-        renderKits.put(descriptor.getRenderKitId(), descriptor);
-    }
-
-    public RenderKitBean getRenderKit(String id) {
-        return (renderKits.get(id));
-    }
-
-
-    public RenderKitBean[] getRenderKits() {
-        RenderKitBean results[] =
-            new RenderKitBean[renderKits.size()];
-        return (renderKits.values().toArray(results));
-    }
-
-
-    public void removeRenderKit(RenderKitBean descriptor) {
-        renderKits.remove(descriptor.getRenderKitId());
-    }
-
-
-    // ------------------------------------------------- ValidatorHolder Methods
-
-
-    private Map<String,ValidatorBean> validators = new TreeMap<String, ValidatorBean>();
-
-
-    public void addValidator(ValidatorBean descriptor) {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "addValidator(" + descriptor.getValidatorId() + ")");
-        }
-        validators.put(descriptor.getValidatorId(), descriptor);
-    }
-
-
-    public ValidatorBean getValidator(String id) {
-        return (validators.get(id));
-    }
-
-
-    public ValidatorBean[] getValidators() {
-        ValidatorBean results[] = new ValidatorBean[validators.size()];
-        return (validators.values().toArray(results));
-    }
-
-
-    public void removeValidator(ValidatorBean descriptor) {
-        validators.remove(descriptor.getValidatorId());
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/FactoryBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/FactoryBean.java
deleted file mode 100644
index 0aa2293..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/FactoryBean.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-import com.sun.faces.config.DigesterFactory;
-import com.sun.faces.config.DigesterFactory.VersionListener;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Configuration bean for <code><factory> element.</p>
- */
-
-public class FactoryBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private List<String> applicationFactories = new ArrayList<String>();
-    public List<String> getApplicationFactories() { return applicationFactories; }
-    public void addApplicationFactory(String applicationFactory)
-    { 
-        VersionListener listener = DigesterFactory.getVersionListener();
-        if (null != listener) {
-            listener.takeActionOnArtifact(applicationFactory);
-        }
-        applicationFactories.add(applicationFactory); }
-
-
-    private List<String> facesContextFactories = new ArrayList<String>();
-    public List<String> getFacesContextFactories() { return facesContextFactories; }
-    public void addFacesContextFactory(String facesContextFactory)
-    { 
-        VersionListener listener = DigesterFactory.getVersionListener();
-        if (null != listener) {
-            listener.takeActionOnArtifact(facesContextFactory);
-        }
-        facesContextFactories.add(facesContextFactory); }
-
-
-    private List<String> lifecycleFactories = new ArrayList<String>();
-    public List<String> getLifecycleFactories() { return lifecycleFactories; }
-    public void addLifecycleFactory(String lifecycleFactory)
-    { 
-        VersionListener listener = DigesterFactory.getVersionListener();
-        if (null != listener) {
-            listener.takeActionOnArtifact(lifecycleFactory);
-        }
-        lifecycleFactories.add(lifecycleFactory); }
-
-
-    private List<String> renderKitFactories = new ArrayList<String>();
-    public List<String> getRenderKitFactories() { return renderKitFactories; }
-    public void addRenderKitFactory(String renderKitFactory)
-    { 
-        VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(renderKitFactory);
-            }
-        renderKitFactories.add(renderKitFactory); }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/FeatureBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/FeatureBean.java
deleted file mode 100644
index 260bd78..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/FeatureBean.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * <p>Base class for configuration beans for "features" such as
- * attributes and components.</p>
- */
-
-public abstract class FeatureBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-
-    // ----------------------------------------------- DescriptionHolder Methods
-
-
-    private Map<String,DescriptionBean> descriptions = new TreeMap<String, DescriptionBean>();
-
-
-    public void addDescription(DescriptionBean descriptor) {
-        descriptions.put(descriptor.getLang(), descriptor);
-    }
-
-
-    public DescriptionBean getDescription(String lang) {
-        return (descriptions.get(lang));
-    }
-
-
-    public DescriptionBean[] getDescriptions() {
-        DescriptionBean results[] = new DescriptionBean[descriptions.size()];
-        return (descriptions.values().toArray(results));
-    }
-
-
-    public void removeDescription(DescriptionBean descriptor) {
-        descriptions.remove(descriptor.getLang());
-    }
-
-
-    // ----------------------------------------------- DisplayNameHolder Methods
-
-
-    private Map<String,DisplayNameBean> displayNames = new TreeMap<String, DisplayNameBean>();
-
-
-    public void addDisplayName(DisplayNameBean descriptor) {
-        displayNames.put(descriptor.getLang(), descriptor);
-    }
-
-
-    public DisplayNameBean getDisplayName(String lang) {
-        return (displayNames.get(lang));
-    }
-
-
-    public DisplayNameBean[] getDisplayNames() {
-        DisplayNameBean results[] = new DisplayNameBean[displayNames.size()];
-        return (displayNames.values().toArray(results));
-    }
-
-
-    public void removeDisplayName(DisplayNameBean descriptor) {
-        displayNames.remove(descriptor.getLang());
-    }
-
-
-    // ------------------------------------------------------ IconHolder Methods
-
-
-    private Map<String,IconBean> icons = new TreeMap<String, IconBean>();
-
-
-    public void addIcon(IconBean descriptor) {
-        icons.put(descriptor.getLang(), descriptor);
-    }
-
-
-    public IconBean getIcon(String lang) {
-        return (icons.get(lang));
-    }
-
-
-    public IconBean[] getIcons() {
-        IconBean results[] = new IconBean[icons.size()];
-        return (icons.values().toArray(results));
-    }
-
-
-    public void removeIcon(IconBean descriptor) {
-        icons.remove(descriptor.getLang());
-    }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/IconBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/IconBean.java
deleted file mode 100644
index 9a659e5..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/IconBean.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><icon> element.</p>
- */
-
-public class IconBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String lang;
-    public String getLang() { return lang; }
-    public void setLang(String lang)
-    { this.lang = lang; }
-
-
-    private String largeIcon;
-    public String getLargeIcon() { return largeIcon; }
-    public void setLargeIcon(String largeIcon)
-    { this.largeIcon = largeIcon; }
-
-
-    private String smallIcon;
-    public String getSmallIcon() { return smallIcon; }
-    public void setSmallIcon(String smallIcon)
-    { this.smallIcon = smallIcon; }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/LifecycleBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/LifecycleBean.java
deleted file mode 100644
index 5b08a14..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/LifecycleBean.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import com.sun.faces.config.DigesterFactory;
-import com.sun.faces.config.DigesterFactory.VersionListener;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Configuration bean for <code><lifecycle> element.</p>
- */
-
-public class LifecycleBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    // --------------------------------------------- PhaseListenerHolder Methods
-
-
-    private List<String> phaseListeners = new ArrayList<String>();
-
-
-    public void addPhaseListener(String phaseListener) {
-        if (!phaseListeners.contains(phaseListener)) {
-            VersionListener listener = DigesterFactory.getVersionListener();
-            if (null != listener) {
-                listener.takeActionOnArtifact(phaseListener);
-            }
-            phaseListeners.add(phaseListener);
-        }
-    }
-
-
-    public String[] getPhaseListeners() {
-        String results[] = new String[phaseListeners.size()];
-        return (phaseListeners.toArray(results));
-    }
-
-
-    public void removePhaseListener(String phaseListener) {
-        phaseListeners.remove(phaseListener);
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntriesBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntriesBean.java
deleted file mode 100644
index ee9e5df..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntriesBean.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Configuration bean for <code><list-entries> element.</p>
- */
-
-public class ListEntriesBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String valueClass;
-    public String getValueClass() { return valueClass; }
-    public void setValueClass(String valueClass)
-    { this.valueClass = valueClass; }
-
-
-    // Set of unconverted String and/or null entries for the list
-    private List<String> values = new ArrayList<String>();
-    public String[] getValues() {
-        String results[] = new String[values.size()];
-        return (values.toArray(results));
-    }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-    public void addNullValue() {
-        values.add(null);
-    }
-
-
-    public void addValue(String value) {
-        values.add(value);
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntriesHolder.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntriesHolder.java
deleted file mode 100644
index 8fde98e..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntriesHolder.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Interface denoting a configuration bean that stores a
- * <code>listEntries</code> property.
- */
-
-public interface ListEntriesHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the current <code>listEntries</code> object
-     * for this configuration bean.</p>
-     */
-    public ListEntriesBean getListEntries();
-
-
-    /**
-     * <p>Set the current <code>listEntries</code> object
-     * for this configuration bean.</p>
-     *
-     * @param listEntries The new <code>listEntries</code> object
-     */
-    public void setListEntries(ListEntriesBean listEntries);
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntryBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntryBean.java
deleted file mode 100644
index fd152ea..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ListEntryBean.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><list-entry> element.</p>
- */
-
-public class ListEntryBean implements NullValueHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String value;
-    public String getValue() { return value; }
-    public void setValue(String value) { this.value = value; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ------------------------------------------------- NullValueHolder Methods
-
-    private boolean nullValue = false;
-    public boolean isNullValue() { return nullValue; }
-    public void setNullValue(boolean nullValue) { this.nullValue = nullValue; }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/LocaleConfigBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/LocaleConfigBean.java
deleted file mode 100644
index e30bb03..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/LocaleConfigBean.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.Set;
-import java.util.TreeSet;
-
-
-/**
- * <p>Configuration bean for <code><locale-config> element.</p>
- */
-
-public class LocaleConfigBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String defaultLocale;
-    public String getDefaultLocale() { return defaultLocale; }
-    public void setDefaultLocale(String defaultLocale)
-    { this.defaultLocale = defaultLocale; }
-
-
-    // ------------------------------------------- SupportedLocaleHolder Methods
-
-
-    private Set<String> supportedLocales = new TreeSet<String>();
-
-
-    public void addSupportedLocale(String supportedLocale) {
-        if (!supportedLocales.contains(supportedLocale)) {
-            supportedLocales.add(supportedLocale);
-        }
-    }
-
-
-    public String[] getSupportedLocales() {
-        String results[] = new String[supportedLocales.size()];
-        return (supportedLocales.toArray(results));
-    }
-
-
-    public void removeSupportedLocale(String supportedLocale) {
-        supportedLocales.remove(supportedLocale);
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ManagedBeanBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ManagedBeanBean.java
deleted file mode 100644
index e53dee2..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ManagedBeanBean.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-
-/**
- * <p>Configuration bean for <code><managed-bean> element.</p>
- */
-
-public class ManagedBeanBean extends FeatureBean
-    implements ListEntriesHolder, MapEntriesHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String managedBeanClass;
-    public String getManagedBeanClass() { return managedBeanClass; }
-    public void setManagedBeanClass(String managedBeanClass)
-    { this.managedBeanClass = managedBeanClass; }
-
-
-    private String managedBeanName;
-    public String getManagedBeanName() { return managedBeanName; }
-    public void setManagedBeanName(String managedBeanName)
-    { this.managedBeanName = managedBeanName; }
-
-
-    private String managedBeanScope;
-    public String getManagedBeanScope() { return managedBeanScope; }
-    public void setManagedBeanScope(String managedBeanScope)
-    { this.managedBeanScope = managedBeanScope; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------- ListEntriesHolder Methods
-
-    private ListEntriesBean listEntries;
-    public ListEntriesBean getListEntries() { return listEntries; }
-    public void setListEntries(ListEntriesBean listEntries)
-    { this.listEntries = listEntries; }
-
-
-    // ------------------------------------------- ManagedPropertyHolder Methods
-
-
-    private List<ManagedPropertyBean> managedProperties = new ArrayList<ManagedPropertyBean>();
-
-
-    public void addManagedProperty(ManagedPropertyBean descriptor) {
-        managedProperties.add(descriptor);
-    }
-
-
-    public ManagedPropertyBean getManagedProperty(String name) {
-	Iterator<ManagedPropertyBean> iter = managedProperties.iterator();
-	ManagedPropertyBean cur = null;
-	String  curName = null;
-	while (iter.hasNext()) {
-	    cur = iter.next();
-	    if (null == cur) {
-		continue;
-	    }
-	    curName = cur.getPropertyName();
-	    // if the name is null, and we're looking for null
-	    if (null == curName && null == name) {
-		return cur;
-	    }
-	    // not a match
-	    if (null == curName || null == name) {
-		continue;
-	    }
-	    // guaranteed that both are non-null
-	    if (curName.equals(name)) {
-		return cur;
-	    }
-	}
-	    
-        return null;
-    }
-
-
-    public ManagedPropertyBean[] getManagedProperties() {
-        ManagedPropertyBean results[] =
-            new ManagedPropertyBean[managedProperties.size()];
-        return (managedProperties.toArray(results));
-    }
-
-
-    public void removeManagedProperty(ManagedPropertyBean descriptor) {
-	if (null == descriptor) {
-	    return;
-	}
-	ManagedPropertyBean toRemove = 
-	    getManagedProperty(descriptor.getPropertyName());
-	if (null != toRemove) {
-	    managedProperties.remove(toRemove);
-	}
-    }
-
-    // ------------------------------------------------ MapEntriesHolder Methods
-
-    private MapEntriesBean mapEntries;
-    public MapEntriesBean getMapEntries() { return mapEntries; }
-    public void setMapEntries(MapEntriesBean mapEntries)
-    { this.mapEntries = mapEntries; }
-
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ManagedPropertyBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ManagedPropertyBean.java
deleted file mode 100644
index 7421abe..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ManagedPropertyBean.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><managed-property> element.</p>
- */
-
-public class ManagedPropertyBean extends FeatureBean
-    implements ListEntriesHolder, MapEntriesHolder, NullValueHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String propertyClass;
-    public String getPropertyClass() { return propertyClass; }
-    public void setPropertyClass(String propertyClass)
-    { this.propertyClass = propertyClass; }
-
-
-    private String propertyName;
-    public String getPropertyName() { return propertyName; }
-    public void setPropertyName(String propertyName)
-    { this.propertyName = propertyName; }
-
-
-    private String value;
-    public String getValue() { return value; }
-    public void setValue(String value) { this.value = value; }
-
-
-    // ----------------------------------------------- ListEntriesHolder Methods
-
-    private ListEntriesBean listEntries;
-    public ListEntriesBean getListEntries() { return listEntries; }
-    public void setListEntries(ListEntriesBean listEntries)
-    { this.listEntries = listEntries; }
-
-
-    // ------------------------------------------------ MapEntriesHolder Methods
-
-    private MapEntriesBean mapEntries;
-    public MapEntriesBean getMapEntries() { return mapEntries; }
-    public void setMapEntries(MapEntriesBean mapEntries)
-    { this.mapEntries = mapEntries; }
-
-
-    // ---------------------------------------------- NullValueHolder Properties
-
-
-    private boolean nullValue = false;
-    public boolean isNullValue() { return nullValue; }
-    public void setNullValue(boolean nullValue) { this.nullValue = nullValue; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntriesBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntriesBean.java
deleted file mode 100644
index 9bbf3a2..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntriesBean.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Configuration bean for <code><map-entries> element.</p>
- */
-
-public class MapEntriesBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String keyClass;
-    public String getKeyClass() { return keyClass; }
-    public void setKeyClass(String keyClass)
-    { this.keyClass = keyClass; }
-
-
-    private List<MapEntryBean> mapEntries = new ArrayList<MapEntryBean>();
-    public MapEntryBean[] getMapEntries() {
-        MapEntryBean results[] =
-            new MapEntryBean[mapEntries.size()];
-        return (mapEntries.toArray(results));
-    }
-
-
-    private String valueClass;
-    public String getValueClass() { return valueClass; }
-    public void setValueClass(String valueClass)
-    { this.valueClass = valueClass; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-    public void addMapEntry(MapEntryBean mapEntry) {
-        mapEntries.add(mapEntry);
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntriesHolder.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntriesHolder.java
deleted file mode 100644
index 30c89fb..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntriesHolder.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Interface denoting a configuration bean that stores a
- * <code>mapEntries</code> property.
- */
-
-public interface MapEntriesHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return the current <code>mapEntries</code> object
-     * for this configuration bean.</p>
-     */
-    public MapEntriesBean getMapEntries();
-
-
-    /**
-     * <p>Set the current <code>mapEntries</code> object
-     * for this configuration bean.</p>
-     *
-     * @param mapEntries The new <code>mapEntries</code> object
-     */
-    public void setMapEntries(MapEntriesBean mapEntries);
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntryBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntryBean.java
deleted file mode 100644
index c048039..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/MapEntryBean.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><map-entry> element.</p>
- */
-
-public class MapEntryBean implements NullValueHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String key;
-    public String getKey() { return key; }
-    public void setKey(String key) { this.key = key; }
-
-
-    private String value;
-    public String getValue() { return value; }
-    public void setValue(String value) { this.value = value; }
-
-
-    // ------------------------------------------------- NullValueHolder Methods
-
-    private boolean nullValue = false;
-    public boolean isNullValue() { return nullValue; }
-    public void setNullValue(boolean nullValue) { this.nullValue = nullValue; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/NavigationCaseBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/NavigationCaseBean.java
deleted file mode 100644
index b1637f7..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/NavigationCaseBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><navigation-case> element.</p>
- */
-
-public class NavigationCaseBean extends FeatureBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String fromAction = null;
-    public String getFromAction() { return fromAction; }
-    public void setFromAction(String fromAction)
-    { this.fromAction = fromAction; }
-
-
-    private String fromOutcome = null;
-    public String getFromOutcome() { return fromOutcome; }
-    public void setFromOutcome(String fromOutcome)
-    { this.fromOutcome = fromOutcome; }
-
-
-    private boolean redirect = false;
-    public boolean isRedirect() { return redirect; }
-    public void setRedirect(boolean redirect) { this.redirect = redirect; }
-    public void setRedirectTrue(String dummy) { this.redirect = true; }
-
-    private String toViewId = "*";
-    public String getToViewId() { return toViewId; }
-    public void setToViewId(String toViewId)
-    { this.toViewId = toViewId; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/NavigationRuleBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/NavigationRuleBean.java
deleted file mode 100644
index d280593..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/NavigationRuleBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Configuration bean for <code><navigation-case> element.</p>
- */
-
-public class NavigationRuleBean extends FeatureBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String fromViewId = "*";
-    public String getFromViewId() { return fromViewId; }
-    public void setFromViewId(String fromViewId)
-    { this.fromViewId = fromViewId; }
-
-
-    private List<NavigationCaseBean> navigationCases = new ArrayList<NavigationCaseBean>();
-    public NavigationCaseBean[] getNavigationCases() {
-        NavigationCaseBean results[] =
-            new NavigationCaseBean[navigationCases.size()];
-        return (navigationCases.toArray(results));
-    }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-    public void addNavigationCase(NavigationCaseBean navigationCase) {
-        navigationCases.add(navigationCase);
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/NullValueHolder.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/NullValueHolder.java
deleted file mode 100644
index 4783976..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/NullValueHolder.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Interface denoting a configuration bean that stores a
- * <code>nullValue</code> property.
- */
-
-public interface NullValueHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>Return a flag indicating that the value of the parent
-     * compoennt should be set to <code>null</code>.</p>
-     */
-    public boolean isNullValue();
-
-
-    /**
-     * <p>Set a flag indicating that the value of the parent
-     * component should be set to <code>null</code>.</p>
-     *
-     * @param nullValue The new null value flag
-     */
-    public void setNullValue(boolean nullValue);
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/PropertyBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/PropertyBean.java
deleted file mode 100644
index df3250d..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/PropertyBean.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * <p>Configuration bean for <code><property> element.</p>
- */
-
-public class PropertyBean extends FeatureBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String propertyClass;
-    public String getPropertyClass() { return propertyClass; }
-    public void setPropertyClass(String propertyClass)
-    { this.propertyClass = propertyClass; }
-
-
-    private String propertyName;
-    public String getPropertyName() { return propertyName; }
-    public void setPropertyName(String propertyName)
-    { this.propertyName = propertyName; }
-
-
-    private String suggestedValue;
-    public String getSuggestedValue() { return suggestedValue; }
-    public void setSuggestedValue(String suggestedValue)
-    { this.suggestedValue = suggestedValue; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // defaultValue == Non-standard default value (if any)
-    private String defaultValue = null;
-    public String getDefaultValue() { return defaultValue; }
-    public void setDefaultValue(String defaultValue)
-    { this.defaultValue = defaultValue; }
-
-    // passThrough == HTML attribute that passes through [default=false]
-    private boolean passThrough = false;
-    public boolean isPassThrough() { return passThrough; }
-    public void setPassThrough(boolean passThrough)
-    { this.passThrough = passThrough; }
-
-
-    // readOnly == Do not generate a property setter [default=false]
-    private boolean readOnly = false;
-    public boolean isReadOnly() { return readOnly; }
-    public void setReadOnly(boolean readOnly)
-    { this.readOnly = readOnly; }
-
-
-    // required == in TLD <attribute>, set required to true [default=false]
-    private boolean required = false;
-    public boolean isRequired() { return required; }
-    public void setRequired(boolean required)
-    { this.required = required; }
-
-
-    // tagAttribute == Generate TLD attribute [default=true]
-    private boolean tagAttribute = true;
-    public boolean isTagAttribute() { return tagAttribute; }
-    public void setTagAttribute(boolean tagAttribute)
-    { this.tagAttribute = tagAttribute; }
-
-    // Set to TRUE if property-extension contains method-signature element
-    // [default=false]
-    private boolean methodExpressionEnabled = false;
-    public boolean isMethodExpressionEnabled() {
-        return methodExpressionEnabled;
-    }
-    public void setMethodExpressionEnabled(boolean methodExpressionEnabled) {
-        this.methodExpressionEnabled = methodExpressionEnabled;
-    }
-
-    private String methodSignature;
-    public String getMethodSignature() { return methodSignature; }
-    public void setMethodSignature(String methodSignature) {
-        if (methodSignature != null) {
-            methodSignature = methodSignature.trim();
-            if (methodSignature.length() > 0) {
-                setMethodExpressionEnabled(true);
-                this.methodSignature = methodSignature.trim();
-            }
-        }
-    }
-
-    // value-expression-enabled - if the property can accept ValueExpressions
-    // [default=false]
-    private boolean valueExpressionEnabled = false;
-    public boolean isValueExpressionEnabled() {
-        return valueExpressionEnabled;
-    }
-    public void setValueExpressionEnabled(boolean valueExpressionEnabled) {
-        this.valueExpressionEnabled = valueExpressionEnabled;
-    }
-
-    // Behavior attribute, [dafault=false]
-    private List<String> behaviors = null;
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @return the behaviorAttribute
-	 */
-	public List<String> getBehaviors() {
-		return behaviors;
-	}
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @param behaviorAttribute the behaviorAttribute to set
-	 */
-	public void addBehavior(String behavior) {
-		if(null == this.behaviors){
-			this.behaviors = new ArrayList<String>(5);
-		}
-		this.behaviors.add(behavior);
-	}
-	
-	public void addAllBehaviors(List<String>behaviors) {
-		if(null != behaviors){
-//			if(null == this.behaviors){
-				this.behaviors = new ArrayList<String>(behaviors);
-//			} else {
-//				this.behaviors.addAll(behaviors);
-//			}
-		}
-	}
-
-    private boolean defaultBehavior = false;
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @return the defaultBehavior
-	 */
-	public boolean isDefaultBehavior() {
-		return defaultBehavior;
-	}
-	/**
-	 * <p class="changed_added_2_0"></p>
-	 * @param defaultBehavior the defaultBehavior to set
-	 */
-	public void setDefaultBehavior(boolean defaultBehavior) {
-		this.defaultBehavior = defaultBehavior;
-	}
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/PropertyHolder.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/PropertyHolder.java
deleted file mode 100644
index 85c9fc8..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/PropertyHolder.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Interface denoting a configuration bean that stores a named collection
- * of properties.</p>
- */
-
-public interface PropertyHolder {
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-    /**
-     * <p>Add the specified property descriptor, replacing any existing
-     * descriptor for this property name.</p>
-     *
-     * @param descriptor Descriptor to be added
-     */
-    public void addProperty(PropertyBean descriptor);
-
-
-    /**
-     * <p>Return the property descriptor for the specified property name,
-     * if any; otherwise, return <code>null</code>.</p>
-     *
-     * @param name Name of the property for which to retrieve a descriptor
-     */
-    public PropertyBean getProperty(String name);
-
-
-    /**
-     * <p>Return the descriptors of all properties for which descriptors have
-     * been registered, or an empty array if none have been registered.</p>
-     */
-    public PropertyBean[] getProperties();
-
-
-    /**
-     * <p>Deregister the specified property descriptor, if it is registered.
-     * </p>
-     *
-     * @param descriptor Descriptor to be removed
-     */
-    public void removeProperty(PropertyBean descriptor);
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ReferencedBeanBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ReferencedBeanBean.java
deleted file mode 100644
index 2166f74..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ReferencedBeanBean.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-/**
- * <p>Configuration bean for <code><referenced-bean> element.</p>
- */
-
-public class ReferencedBeanBean extends FeatureBean {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String referencedBeanClass;
-    public String getReferencedBeanClass() { return referencedBeanClass; }
-    public void setReferencedBeanClass(String referencedBeanClass)
-    { this.referencedBeanClass = referencedBeanClass; }
-
-
-    private String referencedBeanName;
-    public String getReferencedBeanName() { return referencedBeanName; }
-    public void setReferencedBeanName(String referencedBeanName)
-    { this.referencedBeanName = referencedBeanName; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/RenderKitBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/RenderKitBean.java
deleted file mode 100644
index 70b512b..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/RenderKitBean.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import com.sun.faces.util.ToolsUtil;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-
-/**
- * <p>Configuration bean for <code><render-kit> element.</p>
- */
-
-public class RenderKitBean extends FeatureBean {
-
-
-    private static final Logger logger = ToolsUtil.getLogger(ToolsUtil.FACES_LOGGER +
-            ToolsUtil.BEANS_LOGGER);
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String renderKitClass;
-    public String getRenderKitClass() { return renderKitClass; }
-    public void setRenderKitClass(String renderKitClass)
-    { this.renderKitClass = renderKitClass; }
-
-
-    private String renderKitId = "HTML_BASIC";
-    public String getRenderKitId() { return renderKitId; }
-    public void setRenderKitId(String renderKitId)
-    { this.renderKitId = renderKitId; }
-
-
-    // -------------------------------------------------- RendererHolder Methods
-
-
-    // Key is family + rendererType
-    private Map<String,RendererBean> renderers = new TreeMap<String, RendererBean>();
-
-
-    public void addRenderer(RendererBean descriptor) {
-        if (logger.isLoggable(Level.FINE)) {
-            logger.log(Level.FINE, "addRenderer(" +
-                      descriptor.getComponentFamily() + "," +
-                      descriptor.getRendererType() + ")");
-        }
-        renderers.put(descriptor.getComponentFamily() + "|" +
-                      descriptor.getRendererType(), descriptor);
-    }
-
-
-    public RendererBean getRenderer(String componentFamily,
-                                    String rendererType) {
-        return (renderers.get
-                (componentFamily + "|" + rendererType));
-    }
-
-
-    public RendererBean[] getRenderers() {
-        RendererBean results[] = new RendererBean[renderers.size()];
-        return (renderers.values().toArray(results));
-    }
-
-
-    public void removeRenderer(RendererBean descriptor) {
-        renderers.remove(descriptor.getComponentFamily() + "|" +
-                         descriptor.getRendererType());
-    }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/RendererBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/RendererBean.java
deleted file mode 100644
index 0846708..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/RendererBean.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * <p>Configuration bean for <code><renderer> element.</p>
- */
-
-public class RendererBean extends FeatureBean implements AttributeHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String componentFamily;
-    public String getComponentFamily() { return componentFamily; }
-    public void setComponentFamily(String componentFamily)
-    { this.componentFamily = componentFamily; }
-
-
-    private String rendererClass;
-    public String getRendererClass() { return rendererClass; }
-    public void setRendererClass(String rendererClass)
-    { this.rendererClass = rendererClass; }
-
-
-    private String rendererType;
-    public String getRendererType() { return rendererType; }
-    public void setRendererType(String rendererType)
-    { this.rendererType = rendererType; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // true == this Renderer returns true for getRendersChildren()
-    private boolean rendersChildren = false;
-    public boolean isRendersChildren() { return rendersChildren; }
-    public void setRendersChildren(boolean rendersChildren)
-    { this.rendersChildren = rendersChildren; }
-
-    private String excludeAttributes;
-    public String getExcludeAttributes() {
-        return excludeAttributes;
-    }
-    public void setExcludeAttributes(String newExcludeAttributes) {
-        excludeAttributes = newExcludeAttributes;
-    }
-
-    private boolean notForJsp = false;
-    public boolean isIgnoreForJsp() { return notForJsp; }
-    public void setIgnoreForJsp(boolean notForJsp)
-    { this.notForJsp = notForJsp; }
-
-    private boolean ignoreAll = false;
-    public boolean isIgnoreAll() { return ignoreAll; }
-    public void setIgnoreAll(boolean ignoreAll)
-    { this.ignoreAll = ignoreAll; }
-
-    // true if the tag handler for this renderer should be a BodyTag
-    // [default=false]
-    public boolean bodyTag = false;
-    public boolean isBodyTag() { return bodyTag; }
-    public void setBodyTag(boolean bodyTag) { this.bodyTag = bodyTag; }
-
-    // Tag name (if it doesn't follow the standard convention)
-    private String tagName;
-    public String getTagName() { return tagName; }
-    public void setTagName(String tagName) { this.tagName = tagName; }
-
-
-    // ------------------------------------------------- AttributeHolder Methods
-
-
-    private Map<String,AttributeBean> attributes = new TreeMap<String, AttributeBean>();
-
-
-    public void addAttribute(AttributeBean descriptor) {
-        attributes.put(descriptor.getAttributeName(), descriptor);
-    }
-
-
-    public AttributeBean getAttribute(String name) {
-        return (attributes.get(name));
-    }
-
-
-    public AttributeBean[] getAttributes() {
-        AttributeBean results[] = new AttributeBean[attributes.size()];
-        return (attributes.values().toArray(results));
-    }
-
-
-    public void removeAttribute(AttributeBean descriptor) {
-        attributes.remove(descriptor.getAttributeName());
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ResourceBundleBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ResourceBundleBean.java
deleted file mode 100644
index 4c745d1..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ResourceBundleBean.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * <p>Configuration bean for <code><attribute> element.</p>
- */
-
-public class ResourceBundleBean extends FeatureBean {
-    /**
-     * Holds value of property basename.
-     */
-    private String basename;
-
-    /**
-     * Getter for property basename.
-     * @return Value of property basename.
-     */
-    public String getBasename() {
-
-        return this.basename;
-    }
-
-    /**
-     * Setter for property basename.
-     * @param basename New value of property basename.
-     */
-    public void setBasename(String basename) {
-
-        this.basename = basename;
-    }
-
-    /**
-     * Holds value of property var.
-     */
-    private String var;
-
-    /**
-     * Getter for property var.
-     * @return Value of property var.
-     */
-    public String getVar() {
-
-        return this.var;
-    }
-
-    /**
-     * Setter for property var.
-     * @param var New value of property var.
-     */
-    public void setVar(String var) {
-
-        this.var = var;
-    }
-
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/beans/ValidatorBean.java b/jsf-tools/src/main/java/com/sun/faces/config/beans/ValidatorBean.java
deleted file mode 100644
index 3ff43fc..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/beans/ValidatorBean.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.beans;
-
-
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * <p>Configuration bean for <code><attribute> element.</p>
- */
-
-public class ValidatorBean extends FeatureBean
- implements AttributeHolder, PropertyHolder {
-
-
-    // -------------------------------------------------------------- Properties
-
-
-    private String validatorClass;
-    public String getValidatorClass() { return validatorClass; }
-    public void setValidatorClass(String validatorClass)
-    { this.validatorClass = validatorClass; }
-
-
-    private String validatorId;
-    public String getValidatorId() { return validatorId; }
-    public void setValidatorId(String validatorId)
-    { this.validatorId = validatorId; }
-
-
-    // -------------------------------------------------------------- Extensions
-
-
-    // ------------------------------------------------- AttributeHolder Methods
-
-
-    private Map<String,AttributeBean> attributes = new TreeMap<String, AttributeBean>();
-
-
-    public void addAttribute(AttributeBean descriptor) {
-        attributes.put(descriptor.getAttributeName(), descriptor);
-    }
-
-
-    public AttributeBean getAttribute(String name) {
-        return (attributes.get(name));
-    }
-
-
-    public AttributeBean[] getAttributes() {
-        AttributeBean results[] = new AttributeBean[attributes.size()];
-        return (attributes.values().toArray(results));
-    }
-
-
-    public void removeAttribute(AttributeBean descriptor) {
-        attributes.remove(descriptor.getAttributeName());
-    }
-
-
-    // ------------------------------------------------- PropertyHolder Methods
-
-
-    private Map<String,PropertyBean> properties = new TreeMap<String, PropertyBean>();
-
-
-    public void addProperty(PropertyBean descriptor) {
-        properties.put(descriptor.getPropertyName(), descriptor);
-    }
-
-
-    public PropertyBean getProperty(String name) {
-        return (properties.get(name));
-    }
-
-
-    public PropertyBean[] getProperties() {
-        PropertyBean results[] = new PropertyBean[properties.size()];
-        return (properties.values().toArray(results));
-    }
-
-
-    public void removeProperty(PropertyBean descriptor) {
-        properties.remove(descriptor.getPropertyName());
-    }
-
-
-    // ----------------------------------------------------------------- Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ApplicationRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ApplicationRule.java
deleted file mode 100644
index faeb2c9..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ApplicationRule.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.ApplicationBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><application></code> element.</p>
- */
-
-public class ApplicationRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ApplicationBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create or retrieve an instance of <code>ApplicationBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        FacesConfigBean fcb = null;
-        try {
-            fcb = (FacesConfigBean) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent FacesConfigBean on object stack");
-        }
-        ApplicationBean ab = fcb.getApplication();
-        if (ab == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ApplicationRule]{" +
-                                           digester.getMatch() +
-                                           "} New " + CLASS_NAME);
-            }
-            Class clazz =
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            ab = (ApplicationBean) clazz.newInstance();
-            fcb.setApplication(ab);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ApplicationRule]{" +
-                                           digester.getMatch() +
-                                           "} Old " + CLASS_NAME);
-            }
-        }
-        digester.push(ab);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ApplicationBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        Object top = digester.pop();
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ApplicationRule]{" +
-                                       digester.getMatch() +
-                                       "} Pop " + top.getClass());
-        }
-        if (!CLASS_NAME.equals(top.getClass().getName())) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ApplicationRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/AttributeRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/AttributeRule.java
deleted file mode 100644
index 35df7c5..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/AttributeRule.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.AttributeBean;
-import com.sun.faces.config.beans.AttributeHolder;
-
-
-/**
- * <p>Digester rule for the <code><attribute></code> element.</p>
- */
-
-public class AttributeRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.AttributeBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>AttributeBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek() instanceof AttributeHolder
-              : "Assertion Error: Expected AttributeHolder to be at the top of the stack";
-       
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[AttributeRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        AttributeBean ab = (AttributeBean) clazz.newInstance();
-        digester.push(ab);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>AttributeBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        AttributeBean top = null;
-        try {
-            top = (AttributeBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        AttributeHolder ah = (AttributeHolder) digester.peek();
-        AttributeBean old = ah.getAttribute(top.getAttributeName());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[AttributeRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getAttributeName() +
-                                           ")");
-            }
-            ah.addAttribute(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[AttributeRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getAttributeName() +
-                                          ")");
-            }
-            mergeAttribute(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("AttributeRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeAttribute(AttributeBean top, AttributeBean old) {
-
-        // Merge singleton properties
-        if (top.getAttributeClass() != null) {
-            old.setAttributeClass(top.getAttributeClass());
-        }
-        if (top.getSuggestedValue() != null) {
-            old.setSuggestedValue(top.getSuggestedValue());
-        }
-        if (top.getDefaultValue() != null) {
-            old.setDefaultValue(top.getDefaultValue());
-        }
-        if (top.isPassThrough()) {
-            old.setPassThrough(true);
-        }
-        if (top.isRequired()) {
-            old.setRequired(true);
-        }
-        if (!top.isTagAttribute()) {
-            old.setTagAttribute(false);
-        }
-        if(null != top.getBehaviors()){
-        	old.addAllBehaviors(top.getBehaviors());
-        }
-        if(top.isDefaultBehavior()){
-        	old.setDefaultBehavior(true);
-        }
-
-        // Merge common collections
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeAttributes(AttributeHolder top, AttributeHolder old) {
-
-        AttributeBean ab[] = top.getAttributes();
-        for (int i = 0; i < ab.length; i++) {
-            AttributeBean abo = old.getAttribute(ab[i].getAttributeName());
-            if (abo == null) {
-                old.addAttribute(ab[i]);
-            } else {
-                mergeAttribute(ab[i], abo);
-            }
-        }
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ComponentRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ComponentRule.java
deleted file mode 100644
index 83e1f98..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ComponentRule.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-
-
-/**
- * <p>Digester rule for the <code><component></code> element.</p>
- */
-
-public class ComponentRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ComponentBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ComponentBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek() instanceof FacesConfigBean
-              : "Assertion Error: Expected FacesConfigBean to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ComponentRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ComponentBean cb = (ComponentBean) clazz.newInstance();
-        digester.push(cb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ComponentBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ComponentBean top = null;
-        try {
-            top = (ComponentBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        FacesConfigBean fcb = (FacesConfigBean) digester.peek();
-        ComponentBean old = fcb.getComponent(top.getComponentType());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ComponentRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getComponentType() +
-                                           ")");
-            }
-            fcb.addComponent(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ComponentRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getComponentType() +
-                                          ")");
-            }
-            mergeComponent(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ComponentRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeComponent(ComponentBean top, ComponentBean old) {
-
-        // Merge singleton properties
-        if (top.getComponentClass() != null) {
-            old.setComponentClass(top.getComponentClass());
-        }
-        if (top.getBaseComponentType() != null) {
-            old.setBaseComponentType(top.getBaseComponentType());
-        }
-        if (top.getComponentFamily() != null) {
-            old.setComponentFamily(top.getComponentFamily());
-        }
-        if (top.getRendererType() != null) {
-            old.setRendererType(top.getRendererType());
-        }
-
-        // Merge common collections
-        AttributeRule.mergeAttributes(top, old);
-        mergeFeatures(top, old);
-        PropertyRule.mergeProperties(top, old);
-
-        // Merge unique collections
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ConverterRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ConverterRule.java
deleted file mode 100644
index af38236..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ConverterRule.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.ConverterBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-
-
-/**
- * <p>Digester rule for the <code><converter></code> element.</p>
- */
-
-public class ConverterRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ConverterBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ConverterBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-        
-        assert digester.peek() instanceof FacesConfigBean
-              : "Assertion Error: Expected FacesConfigBean to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ConverterRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ConverterBean cb = (ConverterBean) clazz.newInstance();
-        digester.push(cb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ConverterBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ConverterBean top = null;
-        try {
-            top = (ConverterBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        FacesConfigBean fcb = (FacesConfigBean) digester.peek();
-        ConverterBean old = null;
-        if (top.getConverterId() != null) {
-            old = fcb.getConverterById(top.getConverterId());
-        } else {
-            old = fcb.getConverterByClass(top.getConverterForClass().getName());
-        }
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ConverterRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getConverterId() +
-                                           "," +
-                                           top.getConverterForClass() +
-                                           ")");
-            }
-            fcb.addConverter(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ConverterRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getConverterId() +
-                                          "," +
-                                          top.getConverterForClass() +
-                                          ")");
-            }
-            mergeConverter(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ConverterRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeConverter(ConverterBean top, ConverterBean old) {
-
-        // Merge singleton properties
-        if (top.getConverterClass() != null) {
-            old.setConverterClass(top.getConverterClass());
-        }
-
-        // Merge common collections
-        AttributeRule.mergeAttributes(top, old);
-        mergeFeatures(top, old);
-        PropertyRule.mergeProperties(top, old);
-
-        // Merge unique collections
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/DescriptionRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/DescriptionRule.java
deleted file mode 100644
index 66ae257..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/DescriptionRule.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.FeatureBean;
-
-
-/**
- * <p>Digester rule for the <code><description></code> element.</p>
- */
-
-public class DescriptionRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.DescriptionBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create or retrieve an instance of <code>DescriptionBean</code>
-     * and push it on to the object statck.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FeatureBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        FeatureBean fb = null;
-        try {
-            fb = (FeatureBean) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent FeatureBean on object stack");
-        }
-        String lang = attributes.getValue("lang");
-        if (lang == null) {
-            lang = attributes.getValue("xml:lang"); // If digester not ns-aware
-        }
-        if (lang == null) {
-            lang = ""; // Avoid NPE errors on sorted map comparisons
-        }
-        DescriptionBean db = fb.getDescription(lang);
-        if (db == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[DescriptionRule]{" +
-                                           digester.getMatch() +
-                                           "} New (" + lang + ")");
-            }
-            Class clazz =
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            db = (DescriptionBean) clazz.newInstance();
-            db.setLang(lang);
-            fb.addDescription(db);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[DescriptionRule]{" +
-                                           digester.getMatch() +
-                                           "} Old " + lang + ")");
-            }
-        }
-        digester.push(db);
-
-    }
-
-
-    /**
-     * <p>No body processing is requlred.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>DescriptionBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        DescriptionBean top = null;
-        try {
-            top = (DescriptionBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[DescriptionRule]{" +
-                                       digester.getMatch() +
-                                       "} Pop (" + top.getLang() + ")");
-        }
-
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("DescriptionRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/DescriptionTextRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/DescriptionTextRule.java
deleted file mode 100644
index 52d00ac..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/DescriptionTextRule.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.DescriptionBean;
-import org.apache.commons.digester.NodeCreateRule;
-
-
-/**
- * <p>Digester rule for the <code><description></code> element,
- * used to absorb the body content of the matching element even if it
- * contains mixed markup and body content, and then save it as the
- * value of the <code>description</code> property of the corresponding
- * <code>DescriptionBean</code> instance..</p>
- */
-
-public class DescriptionTextRule extends NodeCreateRule {
-
-
-    // ------------------------------------------------------------- Constructor
-
-
-    /**
-     * <p>Construct a variant of <code>NodeCreateRule</code> that will
-     * create a <code>DocumentFragment</code> object.
-     */
-    public DescriptionTextRule() throws Exception {
-
-        super(Node.DOCUMENT_FRAGMENT_NODE);
-
-    }
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Ensure that the object at the top of the stack is a
-     * <code>DescriptionBean</code>, then perform the standard
-     * superclass processing.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FeatureBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-        
-        assert digester.peek() instanceof DescriptionBean
-              : "Assertion Error: Expected DescriptionBean to be at the top of the stack";
-
-        // Perform our standard superclass processing
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[DescriptionTextRule]{" +
-                                       digester.getMatch() +
-                                       "} Begin");
-        }
-        super.begin(namespace, name, attributes);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Serialize the resulting DOM into text, and use it to set the
-     * <code>description</code> property of the parent
-     * <code>DescriptionBean</code>.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[DescriptionTextRule]{" +
-                                       digester.getMatch() +
-                                       "} End (" + digester.peek() + ")");
-        }
-
-        // Pop the DOM object off the stack (works around a bug in
-        // NodeCreateRule that won't be fixed until version 1.6 of
-        // commons-digester is released)
-        Node root = (Node) digester.pop();        
-
-        // Serialize the child nodes into a StringBuffer
-        DescriptionBean db = (DescriptionBean) digester.peek();
-        StringBuffer sb = new StringBuffer();
-        NodeList kids = root.getChildNodes();
-        int n = kids.getLength();
-        for (int i = 0; i < n; i++) {
-            serialize(sb, kids.item(i));
-        }
-
-        // Use the StringBuffer to set the value of the description property
-        db.setDescription(sb.toString());
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("DescriptionTextRule[]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Append the serialized version of the specified node to the
-     * string buffer being accumulated.</p>
-     *
-     * @param sb StringBuffer to which serialized text is appended
-     * @param node Node to be serialized
-     *
-     * @exception Exception if any processing exception occurs
-     */
-    private void serialize(StringBuffer sb, Node node) throws Exception {
-
-        // Processing depends on the node type
-        switch (node.getNodeType()) {
-
-        case Node.ELEMENT_NODE:
-
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("  Processing element node '" +
-                                           node.getNodeName() + "'");
-            }
-
-            // Open the element and echo the attributes
-            sb.append("<");
-            sb.append(node.getNodeName());
-            NamedNodeMap attrs = node.getAttributes();
-            int n = attrs.getLength();
-            for (int i = 0; i < n; i++) {
-                Node attr = attrs.item(i);
-                sb.append(" ");
-                sb.append(attr.getNodeName());
-                sb.append("=\"");
-                sb.append(attr.getNodeValue());
-                sb.append("\"");
-            }
-
-            // Does this element have any children?
-            NodeList kids = node.getChildNodes();
-            int m = kids.getLength();
-            if (m > 0) {
-
-                // Yes -- serialize child elements and close parent element
-                sb.append(">");
-                for (int j = 0; j < m; j++) {
-                    serialize(sb, kids.item(j));
-                }
-                sb.append("</");
-                sb.append(node.getNodeName());
-                sb.append(">");
-
-            } else {
-
-                // No -- shorthand close of the parent element
-                sb.append(" />");
-
-            }
-            break;
-
-        case Node.TEXT_NODE:
-
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("  Processing text node '" +
-                                           node.getNodeValue() + "'");
-            }
-
-            // Append the text to our accumulating buffer
-            sb.append(node.getNodeValue());
-            break;
-
-        default:
-            throw new IllegalArgumentException("Cannot process node '" +
-                                               node.getNodeName() +
-                                               "' of type '" +
-                                               node.getNodeType());
-
-        }
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/DisplayNameRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/DisplayNameRule.java
deleted file mode 100644
index 12db24b..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/DisplayNameRule.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.DisplayNameBean;
-import com.sun.faces.config.beans.FeatureBean;
-
-
-/**
- * <p>Digester rule for the <code><display-name></code> element.</p>
- */
-
-public class DisplayNameRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.DisplayNameBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create or retrieve an instance of <code>DisplayNameBean</code>
-     * and push it on to the object statck.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FeatureBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        FeatureBean fb = null;
-        try {
-            fb = (FeatureBean) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent FeatureBean on object stack");
-        }
-        String lang = attributes.getValue("lang");
-        if (lang == null) {
-            lang = attributes.getValue("xml:lang"); // If digester not ns-aware
-        }
-        if (lang == null) {
-            lang = ""; // Avoid NPE errors on sorted map comparisons
-        }
-        DisplayNameBean dnb = fb.getDisplayName(lang);
-        if (dnb == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[DisplayNameRule]{" +
-                                           digester.getMatch() +
-                                           "} New (" + lang + ")");
-            }
-            Class clazz =
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            dnb = (DisplayNameBean) clazz.newInstance();
-            dnb.setLang(lang);
-            fb.addDisplayName(dnb);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[DisplayNameRule]{" +
-                                           digester.getMatch() +
-                                           "} Old (" + lang + ")");
-            }
-        }
-        digester.push(dnb);
-
-    }
-
-
-    /**
-     * <p>Save the body text of this element.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-
-        if (text == null) {
-            return;
-        }
-        DisplayNameBean dnb = (DisplayNameBean) digester.peek();
-        dnb.setDisplayName(text.trim());
-
-    }
-
-
-    /**
-     * <p>Pop the <code>DisplayNameBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        DisplayNameBean top = null;
-        try {
-            top = (DisplayNameBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[DisplayNameRule]{" +
-                                       digester.getMatch() +
-                                       "} Pop (" + top.getLang() + ")");
-        }
-
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("DisplayNameRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/FacesConfigRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/FacesConfigRule.java
deleted file mode 100644
index 9711e20..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/FacesConfigRule.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><faces-config></code> element.</p>
- */
-
-public class FacesConfigRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.FacesConfigBean";
-
-
-    private boolean pushed = false;
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an instance of <code>FacesConfigBean</code> and push it
-     * on to the object statck.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if there is anything already on the
-     *  object stack
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        try {
-            if ((FacesConfigBean) digester.peek() == null) {
-                pushed = true;
-};
-        } catch (Exception e) {
-            pushed = true;
-        }
-
-        if (pushed) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[FacesConfigRule]{" +
-                                           digester.getMatch() +
-                                           "} New " + CLASS_NAME);
-            }
-            Class clazz = 
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            Object instance = clazz.newInstance();
-            digester.push(instance);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[FacesConfigRule]{" +
-                                           digester.getMatch() +
-                                           "} Top " + CLASS_NAME);
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>FacesConfigBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        if (pushed) {
-            Object top = digester.pop();
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[FacesConfigRule]{" +
-                                           digester.getMatch() +
-                                           "} Pop " + top.getClass());
-            }
-            if (!CLASS_NAME.equals(top.getClass().getName())) {
-                throw new IllegalStateException("Popped object is not a " +
-                                                CLASS_NAME + " instance");
-            }
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[FacesConfigRule]{" +
-                                           digester.getMatch() +
-                                           "} Top " + CLASS_NAME);
-            }
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("FacesConfigRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/FacesConfigRuleSet.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/FacesConfigRuleSet.java
deleted file mode 100644
index da9b844..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/FacesConfigRuleSet.java
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.faces.util.ToolsUtil;
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.RuleSetBase;
-
-
-/**
- * <p>Digester <code>RuleSet</code> for parsing a JavaServer Faces
- * configuration file.  Varying levels of detail may be requested by
- * inclusion of the boolean flags passed to our constructor.  In all
- * cases, the basic structural rules will be included.</p>
- */
-
-public class FacesConfigRuleSet extends RuleSetBase {
-
-
-    // ------------------------------------------------------------- Constructor
-
-
-    /**
-     * <p>Construct a new instance that will incorporate rules for the profiles
-     * identified by our parameters.</p>
-     *
-     * @param design Include rules suitable for design time use in a tool
-     * @param generate Include rules suitable for generating component,
-     *  renderer, and tag classes
-     * @param runtime Include rules suitable for runtime execution of an
-     *  application
-     */
-    public FacesConfigRuleSet(boolean design, boolean generate,
-                              boolean runtime) {
-
-        this.design = design;
-        this.generate = generate;
-        this.runtime = runtime;
-
-    }
-
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    private static final Logger logger = ToolsUtil.getLogger(ToolsUtil.FACES_LOGGER +
-            ToolsUtil.RULES_LOGGER);    
-
-    private boolean design = false;
-    private boolean generate = false;
-    private boolean runtime = false;
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Add the set of Rule instances defined in this RuleSet to the
-     * specified <code>Digester</code> instance.</p>
-     *
-     * @param digester Digester instance for adding Rules
-     */
-    public void addRuleInstances(Digester digester) {
-
-        // faces-config
-        digester.addRule
-            ("faces-config", new FacesConfigRule());
-
-        // faces-config/application
-        if (runtime) {
-            digester.addRule
-                ("faces-config/application", new ApplicationRule());
-            digester.addCallMethod
-                ("faces-config/application/action-listener",
-                 "addActionListener", 0);
-            digester.addRule
-                ("faces-config/application/locale-config",
-                 new LocaleConfigRule());
-            digester.addCallMethod
-                ("faces-config/application/locale-config/default-locale",
-                 "setDefaultLocale", 0);
-            digester.addCallMethod
-                ("faces-config/application/locale-config/supported-locale",
-                 "addSupportedLocale", 0);
-            digester.addCallMethod
-                ("faces-config/application/message-bundle",
-                 "setMessageBundle", 0);
-            digester.addCallMethod
-                ("faces-config/application/navigation-handler",
-                 "addNavigationHandler", 0);
-            digester.addCallMethod
-                ("faces-config/application/property-resolver",
-                 "addPropertyResolver", 0);
-            digester.addCallMethod
-                ("faces-config/application/state-manager",
-                 "addStateManager", 0);
-            digester.addCallMethod
-                ("faces-config/application/variable-resolver",
-                 "addVariableResolver", 0);
-            digester.addCallMethod
-                ("faces-config/application/view-handler",
-                 "addViewHandler", 0);
-            digester.addCallMethod
-                ("faces-config/application/default-render-kit-id",
-                 "setDefaultRenderKitId", 0);
-            digester.addCallMethod
-                    ("faces-config/application/el-resolver",
-                    "addELResolver", 0);
-            // faces-config/application/resource-bundle
-            digester.addRule
-                    ("faces-config/application/resource-bundle", new ResourceBundleRule());
-            digester.addCallMethod
-                    ("faces-config/application/resource-bundle/base-name",
-                    "setBasename", 0);
-            digester.addCallMethod
-                    ("faces-config/application/resource-bundle/var",
-                    "setVar", 0);
-            addFeatureRules("faces-config/application/resource-bundle", digester);
-       }
-
-        // faces-config/component
-        digester.addRule
-            ("faces-config/component", new ComponentRule());
-        digester.addCallMethod
-            ("faces-config/component/component-class",
-             "setComponentClass", 0);
-        digester.addCallMethod
-            ("faces-config/component/component-type",
-             "setComponentType", 0);
-        if (design || generate) {
-            addAttributeRules("faces-config/component", digester);
-            addFeatureRules("faces-config/component", digester);
-            addPropertyRules("faces-config/component", digester);
-            digester.addCallMethod
-                ("faces-config/component/component-extension/base-component-type",
-                 "setBaseComponentType", 0);
-            digester.addCallMethod
-                ("faces-config/component/component-extension/renderer-type",
-                 "setRendererType", 0);
-            digester.addCallMethod
-                ("faces-config/component/component-extension/component-family",
-                 "setComponentFamily", 0);
-            digester.addCallMethod(
-                  "faces-config/component/component-extension/ignore",
-                  "setIgnore", 0, new String[] { "java.lang.Boolean" });
-        }
-
-        // faces-config/converter
-        if (design || runtime) {
-            digester.addRule
-                ("faces-config/converter", new ConverterRule());
-            digester.addCallMethod
-                ("faces-config/converter/converter-class",
-                 "setConverterClass", 0);
-            digester.addCallMethod
-                ("faces-config/converter/converter-for-class",
-                 "setConverterForClass", 0);
-            digester.addCallMethod
-                ("faces-config/converter/converter-id",
-                 "setConverterId", 0);
-            if (design) {
-                addAttributeRules("faces-config/converter", digester);
-                addFeatureRules("faces-config/converter", digester);
-                addPropertyRules("faces-config/converter", digester);
-            }
-        }
-
-        // faces-config/factory
-        if (runtime) {
-            digester.addRule
-                ("faces-config/factory", new FactoryRule());
-            digester.addCallMethod
-                ("faces-config/factory/application-factory",
-                 "addApplicationFactory", 0);
-            digester.addCallMethod
-                ("faces-config/factory/faces-context-factory",
-                 "addFacesContextFactory", 0);
-            digester.addCallMethod
-                ("faces-config/factory/lifecycle-factory",
-                 "addLifecycleFactory", 0);
-            digester.addCallMethod
-                ("faces-config/factory/render-kit-factory",
-                 "addRenderKitFactory", 0);
-        }
-
-        // faces-config/lifecycle
-        if (runtime) {
-            digester.addRule
-                ("faces-config/lifecycle", new LifecycleRule());
-            digester.addCallMethod
-                ("faces-config/lifecycle/phase-listener",
-                 "addPhaseListener", 0);
-        }
-
-        // faces-config/managed-bean
-        if (design || runtime) {
-            digester.addRule
-                ("faces-config/managed-bean", new ManagedBeanRule());
-            digester.addCallMethod
-                ("faces-config/managed-bean/managed-bean-class",
-                 "setManagedBeanClass", 0);
-            digester.addCallMethod
-                ("faces-config/managed-bean/managed-bean-name",
-                 "setManagedBeanName", 0);
-            digester.addCallMethod
-                ("faces-config/managed-bean/managed-bean-scope",
-                 "setManagedBeanScope", 0);
-            addFeatureRules("faces-config/managed-bean", digester);
-            addListEntriesRules("faces-config/managed-bean", digester);
-            addMapEntriesRules("faces-config/managed-bean", digester);
-        }
-
-        // faces-config/managed-bean/managed-property
-        if (design || runtime) {
-            digester.addRule
-                ("faces-config/managed-bean/managed-property",
-                 new ManagedPropertyRule());
-            digester.addCallMethod
-                ("faces-config/managed-bean/managed-property/property-class",
-                 "setPropertyClass", 0);
-            digester.addCallMethod
-                ("faces-config/managed-bean/managed-property/property-name",
-                 "setPropertyName", 0);
-            digester.addRule
-                ("faces-config/managed-bean/managed-property/null-value",
-                 new NullValueRule());
-            digester.addCallMethod
-                ("faces-config/managed-bean/managed-property/value",
-                 "setValue", 0);
-            addFeatureRules("faces-config/managed-bean/managed-property",
-                            digester);
-            addListEntriesRules("faces-config/managed-bean/managed-property",
-                                digester);
-            addMapEntriesRules("faces-config/managed-bean/managed-property",
-                               digester);
-        }
-
-        // faces-config/navigation-rule
-        if (design || runtime) {
-            digester.addRule
-                ("faces-config/navigation-rule", new NavigationRuleRule());
-            digester.addCallMethod
-                ("faces-config/navigation-rule/from-view-id",
-                 "setFromViewId", 0);
-            addFeatureRules("faces-config/navigation-rule", digester);
-        }
-
-        // faces-config/navigation-rule/navigation-case
-        if (design || runtime) {
-            digester.addRule
-                ("faces-config/navigation-rule/navigation-case",
-                 new NavigationCaseRule());
-            digester.addCallMethod
-                ("faces-config/navigation-rule/navigation-case/from-action",
-                 "setFromAction", 0);
-            digester.addCallMethod
-                ("faces-config/navigation-rule/navigation-case/from-outcome",
-                 "setFromOutcome", 0);
-            digester.addCallMethod
-                ("faces-config/navigation-rule/navigation-case/redirect",
-                 "setRedirectTrue", 0);
-            digester.addCallMethod
-                ("faces-config/navigation-rule/navigation-case/to-view-id",
-                 "setToViewId", 0);
-            addFeatureRules("faces-config/navigation-rule/navigation-case",
-                            digester);
-        }
-
-        // faces-config/referenced-bean
-        if (design) {
-            digester.addRule
-                ("faces-config/referenced-bean", new ReferencedBeanRule());
-            digester.addCallMethod
-                ("faces-config/referenced-bean/referenced-bean-class",
-                 "setReferencedBeanClass", 0);
-            digester.addCallMethod
-                ("faces-config/referenced-bean/referenced-bean-name",
-                 "setReferencedBeanName", 0);
-            addFeatureRules("faces-config/referenced-bean", digester);
-        }
-
-        // faces-config/render-kit
-        digester.addRule
-            ("faces-config/render-kit", new RenderKitRule());
-        digester.addCallMethod
-            ("faces-config/render-kit/render-kit-class",
-             "setRenderKitClass", 0);
-        digester.addCallMethod
-            ("faces-config/render-kit/render-kit-id",
-             "setRenderKitId", 0);
-        if (design || generate) {
-            addFeatureRules("faces-config/render-kit", digester);
-        }
-
-        // faces-config/render-kit/renderer
-        digester.addRule
-            ("faces-config/render-kit/renderer", new RendererRule());
-        digester.addCallMethod
-            ("faces-config/render-kit/renderer/component-family",
-             "setComponentFamily", 0);
-        digester.addCallMethod
-            ("faces-config/render-kit/renderer/renderer-class",
-             "setRendererClass", 0);
-        digester.addCallMethod
-            ("faces-config/render-kit/renderer/renderer-type",
-             "setRendererType", 0);
-        if (design || generate) {
-            addAttributeRules("faces-config/render-kit/renderer", digester);
-            addFeatureRules("faces-config/render-kit/renderer", digester);
-            digester.addCallMethod
-                ("faces-config/render-kit/renderer/renderer-extension/renders-children",
-                 "setRendersChildren", 0, new String[] { "java.lang.Boolean" });
-            digester.addCallMethod
-                ("faces-config/render-kit/renderer/renderer-extension/exclude-attributes",
-                 "setExcludeAttributes", 0);
-            digester.addCallMethod
-                  ("faces-config/render-kit/renderer/renderer-extension/jsp-ignore",
-                   "setIgnoreForJsp", 0, new String[] { "java.lang.Boolean" });
-             digester.addCallMethod
-                  ("faces-config/render-kit/renderer/renderer-extension/ignore-all",
-                   "setIgnoreAll", 0, new String[] { "java.lang.Boolean" });
-            digester.addCallMethod
-                ("faces-config/render-kit/renderer/renderer-extension/tag-name",
-                "setTagName", 0);
-
-            digester.addCallMethod
-                 ("faces-config/render-kit/renderer/renderer-extension/body-tag",
-                  "setBodyTag", 0, new String[] { "java.lang.Boolean" });
-        }
-
-        // faces-config/validator
-        if (design || runtime) {
-            digester.addRule
-                ("faces-config/validator", new ValidatorRule());
-            digester.addCallMethod
-                ("faces-config/validator/validator-class",
-                 "setValidatorClass", 0);
-            digester.addCallMethod
-                ("faces-config/validator/validator-id",
-                 "setValidatorId", 0);
-            if (design) {
-                addAttributeRules("faces-config/validator", digester);
-                addFeatureRules("faces-config/validator", digester);
-                addPropertyRules("faces-config/validator", digester);
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private void addAttributeRules(String prefix, Digester digester) {
-
-        digester.addRule
-            (prefix + "/attribute",
-             new AttributeRule());
-        addFeatureRules(prefix + "/attribute", digester);
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-name",
-             "setAttributeName", 0);
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-class",
-             "setAttributeClass", 0);
-        digester.addCallMethod
-            (prefix + "/attribute/suggested-value",
-             "setSuggestedValue", 0);
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-extension/default-value",
-             "setDefaultValue", 0);
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-extension/pass-through",
-             "setPassThrough", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-extension/required",
-             "setRequired", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-extension/read-only",
-             "setReadOnly", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-extension/tag-attribute",
-             "setTagAttribute", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/attribute/attribute-extension/renderer-attribute-ignore",
-             "setAttributeIgnoredForRenderer", 0, new String[] {"java.lang.Boolean"});
-        digester.addCallMethod
-        	(prefix + "/attribute/attribute-extension/behavior",
-        	"addBehavior", 0, new String[] {"java.lang.String"});
-        digester.addCallMethod
-        	(prefix + "/attribute/attribute-extension/default-behavior",
-        	"setDefaultBehavior", 0, new String[] {"java.lang.Boolean"});
-    }
-
-
-    private void addFeatureRules(String prefix, Digester digester) {
-
-        digester.addRule
-            (prefix + "/description",
-             new DescriptionRule());
-        try {
-            digester.addRule
-                (prefix + "/description",
-                 new DescriptionTextRule());
-        } catch (Exception e) {
-            logger.log(Level.SEVERE, "Cannot configure DescriptionTextRule for pattern '" +
-                      prefix + "/description" + "'", e);
-            throw new IllegalStateException
-                ("Cannot configure DescriptionTextRule for pattern '" +
-                 prefix + "/description" + "'");
-        }
-        digester.addRule
-            (prefix + "/display-name",
-             new DisplayNameRule());
-        digester.addRule
-            (prefix + "/icon",
-             new IconRule());
-        digester.addCallMethod
-            (prefix + "/icon/large-icon",
-             "setLargeIcon", 0);
-        digester.addCallMethod
-            (prefix + "/icon/small-icon",
-             "setSmallIcon", 0);
-
-    }
-
-
-    private void addListEntriesRules(String prefix, Digester digester) {
-
-        digester.addRule
-            (prefix + "/list-entries",
-             new ListEntriesRule());
-        digester.addCallMethod
-            (prefix + "/list-entries/null-value",
-             "addNullValue"); // No arguments
-        digester.addCallMethod
-            (prefix + "/list-entries/value",
-             "addValue", 0);
-        digester.addCallMethod
-            (prefix + "/list-entries/value-class",
-             "setValueClass", 0);
-
-    }
-
-
-    private void addMapEntriesRules(String prefix, Digester digester) {
-
-        digester.addRule
-            (prefix + "/map-entries",
-             new MapEntriesRule());
-        digester.addCallMethod
-            (prefix + "/map-entries/key-class",
-             "setKeyClass", 0);
-        digester.addCallMethod
-            (prefix + "/map-entries/value-class",
-             "setValueClass", 0);
-
-        digester.addRule
-            (prefix + "/map-entries/map-entry",
-             new MapEntryRule());
-        digester.addCallMethod
-            (prefix + "/map-entries/map-entry/key",
-             "setKey", 0);
-        digester.addRule
-            (prefix + "/map-entries/map-entry/null-value",
-             new NullValueRule()); // No arguments
-        digester.addCallMethod
-            (prefix + "/map-entries/map-entry/value",
-             "setValue", 0);
-
-    }
-
-
-    private void addPropertyRules(String prefix, Digester digester) {
-
-        digester.addRule
-            (prefix + "/property",
-             new PropertyRule());
-        addFeatureRules(prefix + "/property", digester);
-        digester.addCallMethod
-            (prefix + "/property/property-name",
-             "setPropertyName", 0);
-        digester.addCallMethod
-            (prefix + "/property/property-class",
-             "setPropertyClass", 0);
-        digester.addCallMethod
-            (prefix + "/property/suggested-value",
-             "setSuggestedValue", 0);
-        digester.addCallMethod
-            (prefix + "/property/property-extension/default-value",
-             "setDefaultValue", 0);
-        digester.addCallMethod
-            (prefix + "/property/property-extension/pass-through",
-             "setPassThrough", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/property/property-extension/read-only",
-             "setReadOnly", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/property/property-extension/required",
-             "setRequired", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/property/property-extension/tag-attribute",
-             "setTagAttribute", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-            (prefix + "/property/property-extension/method-signature",
-             "setMethodSignature", 0, new String[] { "java.lang.String" });
-        digester.addCallMethod
-            (prefix + "/property/property-extension/value-expression-enabled",
-            "setValueExpressionEnabled", 0, new String[] { "java.lang.Boolean" });
-        digester.addCallMethod
-    		(prefix + "/property/property-extension/behavior",
-    	    "addBehavior", 0, new String[] {"java.lang.String"});
-        digester.addCallMethod
-    		(prefix + "/property/property-extension/default-behavior",
-    		"setDefaultBehavior", 0, new String[] {"java.lang.Boolean"});
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/FactoryRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/FactoryRule.java
deleted file mode 100644
index b07cd8f..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/FactoryRule.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.FactoryBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><factory></code> element.</p>
- */
-
-public class FactoryRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.FactoryBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create or retrieve an instance of <code>FactoryBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        FacesConfigBean fcb = null;
-        try {
-            fcb = (FacesConfigBean) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent FacesConfigBean on object stack");
-        }
-        FactoryBean fb = fcb.getFactory();
-        if (fb == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[FactoryRule]{" +
-                                           digester.getMatch() +
-                                           "} New " + CLASS_NAME);
-            }
-            Class clazz =
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            fb = (FactoryBean) clazz.newInstance();
-            fcb.setFactory(fb);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[FactoryRule]{" +
-                                           digester.getMatch() +
-                                           "} Old " + CLASS_NAME);
-            }
-        }
-        digester.push(fb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>FactoryBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        Object top = digester.pop();
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[FactoryRule]{" +
-                                       digester.getMatch() +
-                                       "} Pop " + top.getClass());
-        }
-        if (!CLASS_NAME.equals(top.getClass().getName())) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("FactoryRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/FeatureRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/FeatureRule.java
deleted file mode 100644
index e845e02..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/FeatureRule.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.DisplayNameBean;
-import com.sun.faces.config.beans.FeatureBean;
-import com.sun.faces.config.beans.IconBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Base Digester rule for elements whose configuration bean
- * extends {@link FeatureBean}.</p>
- */
-
-public abstract class FeatureRule extends Rule {
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeDescription(DescriptionBean top, DescriptionBean old) {
-
-        if (top.getDescription() != null) {
-            old.setDescription(top.getDescription());
-        }
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeDisplayName(DisplayNameBean top, DisplayNameBean old) {
-
-        if (top.getDisplayName() != null) {
-            old.setDisplayName(top.getDisplayName());
-        }
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeFeatures(FeatureBean top, FeatureBean old) {
-
-        DescriptionBean db[] = top.getDescriptions();
-        for (int i = 0; i < db.length; i++) {
-            DescriptionBean dbo = old.getDescription(db[i].getLang());
-            if (dbo == null) {
-                old.addDescription(db[i]);
-            } else {
-                mergeDescription(db[i], dbo);
-            }
-        }
-
-        DisplayNameBean dnb[] = top.getDisplayNames();
-        for (int i = 0; i < dnb.length; i++) {
-            DisplayNameBean dnbo = old.getDisplayName(dnb[i].getLang());
-            if (dnbo == null) {
-                old.addDisplayName(dnb[i]);
-            } else {
-                mergeDisplayName(dnb[i], dnbo);
-            }
-        }
-
-        IconBean ib[] = top.getIcons();
-        for (int i = 0; i < ib.length; i++) {
-            IconBean ibo = old.getIcon(ib[i].getLang());
-            if (ibo == null) {
-                old.addIcon(ib[i]);
-            } else {
-                mergeIcon(ib[i], ibo);
-            }
-        }
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeIcon(IconBean top, IconBean old) {
-
-        if (top.getLargeIcon() != null) {
-            old.setLargeIcon(top.getLargeIcon());
-        }
-        if (top.getSmallIcon() != null) {
-            old.setSmallIcon(top.getSmallIcon());
-        }
-
-    }
-
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/IconRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/IconRule.java
deleted file mode 100644
index 404ae54..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/IconRule.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FeatureBean;
-import com.sun.faces.config.beans.IconBean;
-
-
-/**
- * <p>Digester rule for the <code><icon></code> element.</p>
- */
-
-public class IconRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.IconBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create or retrieve an instance of <code>IconBean</code>
-     * and push it on to the object statck.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FeatureBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        FeatureBean fb = null;
-        try {
-            fb = (FeatureBean) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent FeatureBean on object stack");
-        }
-        String lang = attributes.getValue("lang");
-        if (lang == null) {
-            lang = attributes.getValue("xml:lang"); // If digester not ns-aware
-        }
-        if (lang == null) {
-            lang = ""; // Avoid NPE errors on sorted map comparisons
-        }
-        IconBean ib = fb.getIcon(lang);
-        if (ib == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[IconRule]{" +
-                                           digester.getMatch() +
-                                           "} New (" + lang + ")");
-            }
-            Class clazz =
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            ib = (IconBean) clazz.newInstance();
-            ib.setLang(lang);
-            fb.addIcon(ib);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[IconRule]{" +
-                                           digester.getMatch() +
-                                           "} Old (" + lang + ")");
-            }
-        }
-        digester.push(ib);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>IconBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        IconBean top = null;
-        try {
-            top = (IconBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[IconRule]{" +
-                                       digester.getMatch() +
-                                       "} Pop (" + top.getLang() + ")");
-        }
-
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("IconRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/LifecycleRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/LifecycleRule.java
deleted file mode 100644
index 9007471..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/LifecycleRule.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.LifecycleBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><lifecycle></code> element.</p>
- */
-
-public class LifecycleRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.LifecycleBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create or retrieve an instance of <code>LifecycleBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        FacesConfigBean fcb = null;
-        try {
-            fcb = (FacesConfigBean) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent FacesConfigBean on object stack");
-        }
-        LifecycleBean lb = fcb.getLifecycle();
-        if (lb == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[LifecycleRule]{" +
-                                           digester.getMatch() +
-                                           "} New " + CLASS_NAME);
-            }
-            Class clazz =
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            lb = (LifecycleBean) clazz.newInstance();
-            fcb.setLifecycle(lb);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[LifecycleRule]{" +
-                                           digester.getMatch() +
-                                           "} Old " + CLASS_NAME);
-            }
-        }
-        digester.push(lb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>LifecycleBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        Object top = digester.pop();
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[LifecycleRule]{" +
-                                       digester.getMatch() +
-                                       "} Pop " + top.getClass());
-        }
-        if (!CLASS_NAME.equals(top.getClass().getName())) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("LifecycleRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ListEntriesRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ListEntriesRule.java
deleted file mode 100644
index b670461..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ListEntriesRule.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.ListEntriesBean;
-import com.sun.faces.config.beans.ListEntriesHolder;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><list-entries></code> element.</p>
- */
-
-public class ListEntriesRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ListEntriesBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ListEntriesBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type ListEntriesHolder
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek() instanceof ListEntriesHolder
-              : "Assertion Error: Expected ListEntriesHolder to be at the top of the stack";
-      
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ListEntriesRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ListEntriesBean leb = (ListEntriesBean) clazz.newInstance();
-        digester.push(leb);
-
-    }
-
-
-    /**
-     * <p>No body processing is requlred.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ListEntriesBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ListEntriesBean top = null;
-        try {
-            top = (ListEntriesBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        ListEntriesHolder leh = (ListEntriesHolder) digester.peek();
-        ListEntriesBean old = leh.getListEntries();
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ListEntriesRule]{" +
-                                           digester.getMatch() +
-                                           "} New");
-            }
-            leh.setListEntries(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ManagedBeanRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge");
-            }
-            mergeListEntries(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ListEntriesRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeListEntries(ListEntriesBean top, ListEntriesBean old) {
-
-        // Merge singleton properties
-        if (top.getValueClass() != null) {
-            old.setValueClass(top.getValueClass());
-        }
-
-        // Merge common collections
-
-        // Merge unique collections
-        String values[] = top.getValues();
-        for (int i = 0; i < values.length; i++) {
-            if (values[i] == null) {
-                old.addNullValue();
-            } else {
-                old.addValue(values[i]);
-            }
-        }
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeListEntries(ListEntriesHolder top, ListEntriesHolder old) {
-
-        ListEntriesBean lebt = top.getListEntries();
-        if (lebt != null) {
-            ListEntriesBean lebo = old.getListEntries();
-            if (lebo != null) {
-                mergeListEntries(lebt, lebo);
-            } else {
-                old.setListEntries(lebt);
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/LocaleConfigRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/LocaleConfigRule.java
deleted file mode 100644
index e87c4e6..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/LocaleConfigRule.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.ApplicationBean;
-import com.sun.faces.config.beans.LocaleConfigBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><locale-config></code> element.</p>
- */
-
-public class LocaleConfigRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.LocaleConfigBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create or retrieve an instance of <code>LocaleConfigBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        
-        ApplicationBean ab = null;
-        try {
-            ab = (ApplicationBean) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent ApplicationBean on object stack");
-        }
-        LocaleConfigBean lcb = ab.getLocaleConfig();
-        if (lcb == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[LocaleConfigRule]{" +
-                                           digester.getMatch() +
-                                           "} New " + CLASS_NAME);
-            }
-            Class clazz =
-                digester.getClassLoader().loadClass(CLASS_NAME);
-            lcb = (LocaleConfigBean) clazz.newInstance();
-            ab.setLocaleConfig(lcb);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[LocaleConfigRule]{" +
-                                           digester.getMatch() +
-                                           "} Old " + CLASS_NAME);
-            }
-        }
-        digester.push(lcb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>LocaleConfigBean</code> off the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        Object top = digester.pop();
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[LocaleConfigRule]{" +
-                                       digester.getMatch() +
-                                       "} Pop " + top.getClass());
-        }
-        if (!CLASS_NAME.equals(top.getClass().getName())) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("LocaleConfigRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ManagedBeanRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ManagedBeanRule.java
deleted file mode 100644
index d51a4f6..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ManagedBeanRule.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import java.util.Arrays;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.ManagedBeanBean;
-import com.sun.faces.util.ToolsUtil;
-
-
-/**
- * <p>Digester rule for the <code><managed-bean></code> element.</p>
- */
-
-public class ManagedBeanRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ManagedBeanBean";
-
-    private static final String[] SCOPES = {
-        "none", "application", "session", "request"
-    };
-
-    static {
-        Arrays.sort(SCOPES);
-    }
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ManagedBeanBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-        
-        assert digester.peek() instanceof FacesConfigBean
-              : "Assertion Error: Expected FacesConfigBean to be at the top of the stack";
-       
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ManagedBeanRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ManagedBeanBean mbb = (ManagedBeanBean) clazz.newInstance();
-        digester.push(mbb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ManagedBeanBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ManagedBeanBean top;
-        try {
-            top = (ManagedBeanBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-
-        validate(top);
-
-        FacesConfigBean fcb = (FacesConfigBean) digester.peek();
-        ManagedBeanBean old = fcb.getManagedBean(top.getManagedBeanName());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ManagedBeanRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getManagedBeanName() +
-                                           ")");
-            }
-            fcb.addManagedBean(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ManagedBeanRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getManagedBeanName() +
-                                          ")");
-            }
-            mergeManagedBean(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ManagedBeanRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeManagedBean(ManagedBeanBean top, ManagedBeanBean old) {
-
-        // Merge singleton properties
-        if (top.getManagedBeanClass() != null) {
-            old.setManagedBeanClass(top.getManagedBeanClass());
-        }
-        if (top.getManagedBeanScope() != null) {
-            old.setManagedBeanScope(top.getManagedBeanScope());
-        }
-
-        // Merge common collections
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-        ListEntriesRule.mergeListEntries(top, old);
-        ManagedPropertyRule.mergeManagedProperties(top, old);
-        MapEntriesRule.mergeMapEntries(top, old);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    /**
-     * <p>Provides simple sanity checks.</p>
-     * @param bean the <code>ManagedBeanBean</code> instance to validate
-     */
-    private void validate(ManagedBeanBean bean) {
-
-        String val = bean.getManagedBeanName();
-        if (val == null || val.length() == 0) {
-            Locator locator = digester.getDocumentLocator();
-            String documentName = "UNKNOWN";
-            String lineNumber = "UNKNWOWN";
-
-            if (locator != null) {
-                documentName = locator.getSystemId();
-                lineNumber = Integer.toString(locator.getLineNumber());
-            }
-
-            throw new IllegalStateException(ToolsUtil.getMessage(
-                ToolsUtil.MANAGED_BEAN_NO_MANAGED_BEAN_NAME_ID,
-                new Object[]{documentName, lineNumber}));
-        }
-
-        val = bean.getManagedBeanClass();
-        if (val == null || val.length() == 0) {
-            throw new IllegalStateException(ToolsUtil.getMessage(
-                ToolsUtil.MANAGED_BEAN_NO_MANAGED_BEAN_CLASS_ID,
-                new Object[]{ bean.getManagedBeanName() }));
-        }
-
-        val = bean.getManagedBeanScope();
-        if (val == null || val.length() == 0) {
-            throw new IllegalStateException(ToolsUtil.getMessage(
-                ToolsUtil.MANAGED_BEAN_NO_MANAGED_BEAN_SCOPE_ID,
-                new Object[]{ bean.getManagedBeanName() }));
-        }
-
-        if (Arrays.binarySearch(SCOPES, val) < 0) {
-            throw new IllegalStateException(ToolsUtil.getMessage(
-                ToolsUtil.MANAGED_BEAN_INVALID_SCOPE_ID,
-                new Object[]{ val, bean.getManagedBeanName() }));
-        }
-
-        // - if the managed bean is itself a List, make sure it has no
-        //   map entries or managed properties
-        // - if the managed bean is itself a Map, make sure it has no
-        //   managed properties
-        if (bean.getListEntries() != null) {
-            if (bean.getMapEntries() != null ||
-                bean.getManagedProperties().length != 0) {
-                throw new IllegalStateException (
-                    ToolsUtil.getMessage(
-                        ToolsUtil.MANAGED_BEAN_AS_LIST_CONFIG_ERROR_ID,
-                        new Object[]{ bean.getManagedBeanName() }));
-            }
-        } else if (bean.getMapEntries() != null) {
-            if (bean.getManagedProperties().length != 0) {
-                throw new IllegalStateException (
-                    ToolsUtil.getMessage(
-                        ToolsUtil.MANAGED_BEAN_AS_MAP_CONFIG_ERROR_ID,
-                        new Object[]{ bean.getManagedBeanName() }));
-            }
-        }
-
-    } // END validate
-
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ManagedPropertyRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ManagedPropertyRule.java
deleted file mode 100644
index 3a67296..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ManagedPropertyRule.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.ManagedBeanBean;
-import com.sun.faces.config.beans.ManagedPropertyBean;
-import com.sun.faces.util.ToolsUtil;
-
-
-/**
- * <p>Digester rule for the <code><managed-property></code> element.</p>
- */
-
-public class ManagedPropertyRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ManagedPropertyBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ManagedPropertyBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek() instanceof ManagedBeanBean
-              : "Assertion Error: Expected ManagedBeanBean to be at the top of the stack";
-       
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ManagedPropertyRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ManagedPropertyBean mpb = (ManagedPropertyBean) clazz.newInstance();
-        digester.push(mpb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ManagedPropertyBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ManagedPropertyBean top;
-        try {
-            top = (ManagedPropertyBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        ManagedBeanBean mbb = (ManagedBeanBean) digester.peek();
-
-        validate(mbb.getManagedBeanName(), top);
-
-        ManagedPropertyBean old =
-            mbb.getManagedProperty(top.getPropertyName());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ManagedPropertyRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getPropertyName() +
-                                           ")");
-            }
-            mbb.addManagedProperty(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ManagedPropertyRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getPropertyName() +
-                                          ")");
-            }
-            mergeManagedProperty(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ManagedPropertyRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeManagedProperty(ManagedPropertyBean top,
-                                     ManagedPropertyBean old) {
-
-        // Merge singleton properties
-        if (top.getPropertyClass() != null) {
-            old.setPropertyClass(top.getPropertyClass());
-        }
-        if (top.isNullValue()) {
-            old.setNullValue(true);
-        }
-        if (top.getValue() != null) {
-            old.setValue(top.getValue());
-        }
-
-        // Merge common collections
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-        ListEntriesRule.mergeListEntries(top, old);
-        MapEntriesRule.mergeMapEntries(top, old);
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeManagedProperties(ManagedBeanBean top,
-                                       ManagedBeanBean old) {
-
-        ManagedPropertyBean[] mpb = top.getManagedProperties();
-        for (int i = 0; i < mpb.length; i++) {
-            ManagedPropertyBean mpbo =
-                old.getManagedProperty(mpb[i].getPropertyName());
-            if (mpbo == null) {
-                old.addManagedProperty(mpb[i]);
-            } else {
-                mergeManagedProperty(mpb[i], mpbo);
-            }
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    private void validate(String managedBeanName,
-                          ManagedPropertyBean property) {
-
-        String managedPropertyName = property.getPropertyName();
-        if (managedPropertyName == null || managedPropertyName.length() == 0) {
-            throw new IllegalStateException(
-                ToolsUtil.getMessage(
-                    ToolsUtil.MANAGED_BEAN_NO_MANAGED_PROPERTY_NAME_ID,
-                    new Object[] { managedBeanName } ));
-        }
-
-        // managed-property instances that have list-entries must
-        // not have value or map-entries.  It is a configuration
-        // error if they do.
-        if (property.getListEntries() != null) {
-            if (property.getMapEntries() != null ||
-                property.getValue() != null || property.isNullValue()) {
-
-                throw new IllegalStateException (
-                    ToolsUtil.getMessage(
-                        ToolsUtil.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR_ID,
-                        new Object[] { managedBeanName,
-                                      managedPropertyName }));
-            }
-        }
-
-        // managed-property instances that have map-entries, must
-        // not have value or list-entries.  It is a configuration
-        // error if they do.
-        if (property.getMapEntries() != null) {
-            if (property.getValue() != null || property.isNullValue()) {
-                throw new IllegalStateException (
-                    ToolsUtil.getMessage(
-                        ToolsUtil.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR_ID,
-                        new Object[] { managedBeanName,
-                                      managedPropertyName }));
-            }
-        }
-
-        // If the managed property has no list or map entries, nor
-        // any defined value or configured as a null value, then an error
-        // will be raised
-        if (property.getListEntries() == null &&
-            property.getMapEntries() == null &&
-            property.getValue() == null && !property.isNullValue()) {
-           throw new IllegalStateException (
-                    ToolsUtil.getMessage(
-                        ToolsUtil.MANAGED_BEAN_PROPERTY_CONFIG_ERROR_ID,
-                        new Object[] { managedBeanName,
-                                      managedPropertyName }));
-        }
-
-    } // END validate
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/MapEntriesRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/MapEntriesRule.java
deleted file mode 100644
index a479453..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/MapEntriesRule.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.MapEntriesBean;
-import com.sun.faces.config.beans.MapEntriesHolder;
-import com.sun.faces.config.beans.MapEntryBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><map-entries></code> element.</p>
- */
-
-public class MapEntriesRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.MapEntriesBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>MapEntriesBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute map of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type MapEntriesHolder
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-      
-        assert digester.peek() instanceof MapEntriesHolder
-              : "Assertion Error: Expected MapEntriesHolder to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[MapEntriesRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        MapEntriesBean meb = (MapEntriesBean) clazz.newInstance();
-        digester.push(meb);
-
-    }
-
-
-    /**
-     * <p>No body processing is requlred.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>MapEntriesBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        MapEntriesBean top = null;
-        try {
-            top = (MapEntriesBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        MapEntriesHolder meh = (MapEntriesHolder) digester.peek();
-        MapEntriesBean old = meh.getMapEntries();
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[MapEntriesRule]{" +
-                                           digester.getMatch() +
-                                           "} New");
-            }
-            meh.setMapEntries(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ManagedBeanRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge");
-            }
-            mergeMapEntries(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("MapEntriesRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeMapEntries(MapEntriesBean top, MapEntriesBean old) {
-
-        // Merge singleton properties
-        if (top.getKeyClass() != null) {
-            old.setKeyClass(top.getKeyClass());
-        }
-        if (top.getValueClass() != null) {
-            old.setValueClass(top.getValueClass());
-        }
-
-        // Merge common collections
-
-        // Merge unique collections
-        MapEntryBean mapEntries[] = top.getMapEntries();
-        for (int i = 0; i < mapEntries.length; i++) {
-            old.addMapEntry(mapEntries[i]);
-        }
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeMapEntries(MapEntriesHolder top, MapEntriesHolder old) {
-
-        MapEntriesBean mebt = top.getMapEntries();
-        if (mebt != null) {
-            MapEntriesBean mebo = old.getMapEntries();
-            if (mebo != null) {
-                mergeMapEntries(mebt, mebo);
-            } else {
-                old.setMapEntries(mebt);
-            }
-        }
-
-    }
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/MapEntryRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/MapEntryRule.java
deleted file mode 100644
index f849e76..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/MapEntryRule.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.MapEntriesBean;
-import com.sun.faces.config.beans.MapEntryBean;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><map-entry></code> element.</p>
- */
-
-public class MapEntryRule extends Rule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.MapEntryBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>MapEntryBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type MapEntryHolder
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek() instanceof MapEntriesBean
-              : "Assertion Error: Expected MapEntriesBean to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[MapEntryRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        MapEntryBean meb = (MapEntryBean) clazz.newInstance();
-        digester.push(meb);
-
-    }
-
-
-    /**
-     * <p>No body processing is requlred.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>MapEntryBean</code> off the top of the stack,
-     * and add the new entry.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        MapEntryBean top = null;
-        try {
-            top = (MapEntryBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        MapEntriesBean mesb = (MapEntriesBean) digester.peek();
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[MapEntryRule]{" +
-                                       digester.getMatch() +
-                                       "} Add");
-        }
-        mesb.addMapEntry(top);
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("MapEntryRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/NavigationCaseRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/NavigationCaseRule.java
deleted file mode 100644
index 0e87ad1..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/NavigationCaseRule.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.NavigationCaseBean;
-import com.sun.faces.config.beans.NavigationRuleBean;
-
-
-/**
- * <p>Digester rule for the <code><navigation-case></code> element.
- * No merges occur at this level, because there is no primary key available.</p>
- */
-
-public class NavigationCaseRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.NavigationCaseBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>NavigationCaseBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type NavigationRuleBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek() instanceof NavigationRuleBean
-              : "Assertion Error: Expected NavigationRuleBean to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[NavigationCaseRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        NavigationCaseBean ncb = (NavigationCaseBean) clazz.newInstance();
-        digester.push(ncb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>NavigationCaseBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        NavigationCaseBean ncb = null;
-        try {
-            ncb = (NavigationCaseBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        NavigationRuleBean nrb = (NavigationRuleBean) digester.peek();
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[NavigationCaseRule]{" +
-                                       digester.getMatch() +
-                                       "} New Case");
-        }
-        nrb.addNavigationCase(ncb);
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("NavigationCaseRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/NavigationRuleRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/NavigationRuleRule.java
deleted file mode 100644
index fee85cd..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/NavigationRuleRule.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.NavigationCaseBean;
-import com.sun.faces.config.beans.NavigationRuleBean;
-
-
-/**
- * <p>Digester rule for the <code><navigation-rule></code> element.</p>
- */
-
-public class NavigationRuleRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.NavigationRuleBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>NavigationRuleBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-       
-        assert digester.peek() instanceof FacesConfigBean
-              : "Assertion Error: Expected FacesConfigBean to be at the top of the stack";
-       
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[NavigationRuleRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        NavigationRuleBean cb = (NavigationRuleBean) clazz.newInstance();
-        digester.push(cb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>NavigationRuleBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        NavigationRuleBean top = null;
-        try {
-            top = (NavigationRuleBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        FacesConfigBean fcb = (FacesConfigBean) digester.peek();
-        NavigationRuleBean old = fcb.getNavigationRule(top.getFromViewId());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[NavigationRuleRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getFromViewId() +
-                                           ")");
-            }
-            fcb.addNavigationRule(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[NavigationRuleRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getFromViewId() +
-                                          ")");
-            }
-            mergeNavigationRule(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("NavigationRuleRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeNavigationRule(NavigationRuleBean top, NavigationRuleBean old) {
-
-        // Merge singleton properties
-
-        // Merge common collections
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-        NavigationCaseBean navigationCases[] = top.getNavigationCases();
-        for (int i = 0; i < navigationCases.length; i++) {
-            old.addNavigationCase(navigationCases[i]);
-        }
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/NullValueRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/NullValueRule.java
deleted file mode 100644
index 07d7c43..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/NullValueRule.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.NullValueHolder;
-import org.apache.commons.digester.Rule;
-
-
-/**
- * <p>Digester rule for the <code><null-value></code> element.</p>
- */
-
-public class NullValueRule extends Rule {
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Set the <code>nullValue</code> property to null on the
-     * <code>NullValueHolder</code> at the top of the stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-       
-        NullValueHolder nvh = null;
-        try {
-            nvh = (NullValueHolder) digester.peek();
-        } catch (Exception e) {
-            throw new IllegalStateException
-                ("No parent NullValueHolder on object stack");
-        }
-        nvh.setNullValue(true);
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[NullValueRule]{" +
-                                       digester.getMatch() +
-                                       "} Set");
-        }
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>No end processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("NullValueRule[]");
-        return (sb.toString());
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/PropertyRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/PropertyRule.java
deleted file mode 100644
index b36e5f3..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/PropertyRule.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.PropertyBean;
-import com.sun.faces.config.beans.PropertyHolder;
-
-
-/**
- * <p>Digester rule for the <code><property></code> element.</p>
- */
-
-public class PropertyRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.PropertyBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>PropertyBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek() instanceof PropertyHolder
-              : "Assertion Error: Expected PropertyHolder to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[PropertyRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        PropertyBean pb = (PropertyBean) clazz.newInstance();
-        digester.push(pb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>PropertyBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        PropertyBean top = null;
-        try {
-            top = (PropertyBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        PropertyHolder ah = (PropertyHolder) digester.peek();
-        PropertyBean old = ah.getProperty(top.getPropertyName());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[PropertyRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getPropertyName() +
-                                           ")");
-            }
-            ah.addProperty(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[PropertyRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getPropertyName() +
-                                          ")");
-            }
-            mergeProperty(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("PropertyRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeProperty(PropertyBean top, PropertyBean old) {
-
-        // Merge singleton properties
-        if (top.getPropertyClass() != null) {
-            old.setPropertyClass(top.getPropertyClass());
-        }
-        if (top.getDefaultValue() != null) {
-            old.setDefaultValue(top.getDefaultValue());
-        }
-        if (top.getSuggestedValue() != null) {
-            old.setSuggestedValue(top.getSuggestedValue());
-        }
-        if (top.isPassThrough()) {
-            old.setPassThrough(true);
-        }
-        if (top.isReadOnly()) {
-            old.setReadOnly(true);
-        }
-        if (top.isRequired()) {
-            old.setRequired(true);
-        }
-        if (!top.isTagAttribute()) {
-            old.setTagAttribute(false);
-        }
-
-        if(null != top.getBehaviors()){
-        	old.addAllBehaviors(top.getBehaviors());
-        }
-        if(top.isDefaultBehavior()){
-        	old.setDefaultBehavior(true);
-        }
-        // Merge common collections
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeProperties(PropertyHolder top, PropertyHolder old) {
-
-        PropertyBean pb[] = top.getProperties();
-        for (int i = 0; i < pb.length; i++) {
-            PropertyBean pbo = old.getProperty(pb[i].getPropertyName());
-            if (pbo == null) {
-                old.addProperty(pb[i]);
-            } else {
-                mergeProperty(pb[i], pbo);
-            }
-        }
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ReferencedBeanRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ReferencedBeanRule.java
deleted file mode 100644
index 8df459a..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ReferencedBeanRule.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.ReferencedBeanBean;
-
-
-/**
- * <p>Digester rule for the <code><referenced-bean></code> element.</p>
- */
-
-public class ReferencedBeanRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ReferencedBeanBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ReferencedBeanBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-      
-        assert digester.peek() instanceof FacesConfigBean
-              : "Assertion Error: Expected FacesConfigBean to be at the top of the stack";
-                
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ReferencedBeanRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ReferencedBeanBean rbb = (ReferencedBeanBean) clazz.newInstance();
-        digester.push(rbb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ReferencedBeanBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ReferencedBeanBean top = null;
-        try {
-            top = (ReferencedBeanBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        FacesConfigBean fcb = (FacesConfigBean) digester.peek();
-        ReferencedBeanBean old = fcb.getReferencedBean(top.getReferencedBeanName());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ReferencedBeanRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getReferencedBeanName() +
-                                           ")");
-            }
-            fcb.addReferencedBean(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ReferencedBeanRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getReferencedBeanName() +
-                                          ")");
-            }
-            mergeReferencedBean(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ReferencedBeanRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeReferencedBean(ReferencedBeanBean top, ReferencedBeanBean old) {
-
-        // Merge singleton properties
-        if (top.getReferencedBeanClass() != null) {
-            old.setReferencedBeanClass(top.getReferencedBeanClass());
-        }
-
-        // Merge common collections
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/RenderKitRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/RenderKitRule.java
deleted file mode 100644
index 2ee7022..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/RenderKitRule.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.RenderKitBean;
-
-
-/**
- * <p>Digester rule for the <code><renderKit></code> element.</p>
- */
-
-public class RenderKitRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.RenderKitBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>RenderKitBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert (digester.peek() instanceof FacesConfigBean);
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[RenderKitRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        RenderKitBean rkb = (RenderKitBean) clazz.newInstance();
-        digester.push(rkb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>RenderKitBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        RenderKitBean top = null;
-        try {
-            top = (RenderKitBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        FacesConfigBean fcb = (FacesConfigBean) digester.peek();
-        RenderKitBean old = fcb.getRenderKit(top.getRenderKitId());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[RenderKitRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getRenderKitId() +
-                                           ")");
-            }
-            fcb.addRenderKit(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[RenderKitRule]{" +
-                                           digester.getMatch() +
-                                           "} Merge(" +
-                                           top.getRenderKitId() +
-                                           ")");
-            }
-            mergeRenderKit(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("RenderKitRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeRenderKit(RenderKitBean top, RenderKitBean old) {
-
-        // Merge singleton properties
-        if (top.getRenderKitClass() != null) {
-            old.setRenderKitClass(top.getRenderKitClass());
-        }
-
-        // Merge common collections
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-        RendererRule.mergeRenderers(top, old);
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/RendererRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/RendererRule.java
deleted file mode 100644
index b7f0a7f..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/RendererRule.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.RenderKitBean;
-import com.sun.faces.config.beans.RendererBean;
-
-
-/**
- * <p>Digester rule for the <code><renderer></code> element.</p>
- */
-
-public class RendererRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.RendererBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>RendererBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-        
-        assert digester.peek() instanceof RenderKitBean
-              : "Assertion Error: Expected RenderKitBean to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[RendererRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        RendererBean cb = (RendererBean) clazz.newInstance();
-        digester.push(cb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>RendererBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        RendererBean top = null;
-        try {
-            top = (RendererBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        RenderKitBean rkb = (RenderKitBean) digester.peek();
-        RendererBean old = rkb.getRenderer(top.getComponentFamily(),
-                                           top.getRendererType());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[RendererRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getComponentFamily() +
-                                           "," +
-                                           top.getRendererType() +
-                                           ")");
-            }
-            rkb.addRenderer(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[RendererRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getComponentFamily() +
-                                          "," +
-                                          top.getRendererType() +
-                                          ")");
-            }
-            mergeRenderer(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("RendererRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeRenderer(RendererBean top, RendererBean old) {
-
-        // Merge singleton properties
-        if (top.getRendererClass() != null) {
-            old.setRendererClass(top.getRendererClass());
-        }
-        if (top.isRendersChildren()) {
-            old.setRendersChildren(true);
-        }
-	if (top.getExcludeAttributes() != null) {
-	    old.setExcludeAttributes(top.getExcludeAttributes());
-	}
-	if (top.getTagName() != null) {
-	    old.setTagName(top.getTagName());
-	}
-
-        // Merge common collections
-        AttributeRule.mergeAttributes(top, old);
-        mergeFeatures(top, old);
-
-        // Merge unique collections
-
-    }
-
-
-    // Merge "top" into "old"
-    static void mergeRenderers(RenderKitBean top, RenderKitBean old) {
-
-        RendererBean rb[] = top.getRenderers();
-        for (int i = 0; i < rb.length; i++) {
-            RendererBean rbo = old.getRenderer(rb[i].getComponentFamily(),
-                                               rb[i].getRendererType());
-            if (rbo == null) {
-                old.addRenderer(rb[i]);
-            } else {
-                mergeRenderer(rb[i], rbo);
-            }
-        }
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ResourceBundleRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ResourceBundleRule.java
deleted file mode 100644
index 24aefe7..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ResourceBundleRule.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.ApplicationBean;
-import com.sun.faces.config.beans.ResourceBundleBean;
-
-
-/**
- * <p>Digester rule for the <code><ResourceBundle></code> element.</p>
- */
-
-public class ResourceBundleRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ResourceBundleBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ResourceBundleBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type ApplicationBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-
-        assert digester.peek()instanceof ApplicationBean 
-              : "Assertion Error: Expected ApplicationBean to be at the top of the stack";
-        
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ResourceBundleRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ResourceBundleBean cb = (ResourceBundleBean) clazz.newInstance();
-        digester.push(cb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ResourceBundleBean</code> off the top of the stack,
-     * and add it to FacesConfigBean.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ResourceBundleBean top = null;
-        try {
-            top = (ResourceBundleBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        ApplicationBean fcb = (ApplicationBean) digester.peek();
-        if (null != fcb.getResourceBundle(top.getVar())) {
-            throw new IllegalStateException("Multiple ResourceBundle definitions " +
-                    "with the same name: " + top.getVar() + ".");
-        }
-        fcb.addResourceBundle(top);
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ResourceBundleRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/config/rules/ValidatorRule.java b/jsf-tools/src/main/java/com/sun/faces/config/rules/ValidatorRule.java
deleted file mode 100644
index 97940c1..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/config/rules/ValidatorRule.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config.rules;
-
-
-import org.xml.sax.Attributes;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.ValidatorBean;
-
-
-/**
- * <p>Digester rule for the <code><validator></code> element.</p>
- */
-
-public class ValidatorRule extends FeatureRule {
-
-
-    private static final String CLASS_NAME =
-        "com.sun.faces.config.beans.ValidatorBean";
-
-
-    // ------------------------------------------------------------ Rule Methods
-
-
-    /**
-     * <p>Create an empty instance of <code>ValidatorBean</code>
-     * and push it on to the object stack.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param attributes The attribute list of this element
-     *
-     * @exception IllegalStateException if the parent stack element is not
-     *  of type FacesConfigBean
-     */
-    public void begin(String namespace, String name,
-                      Attributes attributes) throws Exception {
-       
-        assert digester.peek() instanceof FacesConfigBean
-              : "Assertion Error: Expected FacesConfigBean to be at the top of the stack";
-                
-        if (digester.getLogger().isDebugEnabled()) {
-            digester.getLogger().debug("[ValidatorRule]{" +
-                                       digester.getMatch() +
-                                       "} Push " + CLASS_NAME);
-        }
-        Class clazz =
-            digester.getClassLoader().loadClass(CLASS_NAME);
-        ValidatorBean vb = (ValidatorBean) clazz.newInstance();
-        digester.push(vb);
-
-    }
-
-
-    /**
-     * <p>No body processing is required.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     * @param text The text of the body of this element
-     */
-    public void body(String namespace, String name,
-                     String text) throws Exception {
-    }
-
-
-    /**
-     * <p>Pop the <code>ValidatorBean</code> off the top of the stack,
-     * and either add or merge it with previous information.</p>
-     *
-     * @param namespace the namespace URI of the matching element, or an 
-     *   empty string if the parser is not namespace aware or the element has
-     *   no namespace
-     * @param name the local name if the parser is namespace aware, or just 
-     *   the element name otherwise
-     *
-     * @exception IllegalStateException if the popped object is not
-     *  of the correct type
-     */
-    public void end(String namespace, String name) throws Exception {
-
-        ValidatorBean top = null;
-        try {
-            top = (ValidatorBean) digester.pop();
-        } catch (Exception e) {
-            throw new IllegalStateException("Popped object is not a " +
-                                            CLASS_NAME + " instance");
-        }
-        FacesConfigBean fcb = (FacesConfigBean) digester.peek();
-        ValidatorBean old = fcb.getValidator(top.getValidatorId());
-        if (old == null) {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ValidatorRule]{" +
-                                           digester.getMatch() +
-                                           "} New(" +
-                                           top.getValidatorId() +
-                                           ")");
-            }
-            fcb.addValidator(top);
-        } else {
-            if (digester.getLogger().isDebugEnabled()) {
-                digester.getLogger().debug("[ValidatorRule]{" +
-                                          digester.getMatch() +
-                                          "} Merge(" +
-                                          top.getValidatorId() +
-                                          ")");
-            }
-            mergeValidator(top, old);
-        }
-
-    }
-
-
-    /**
-     * <p>No finish processing is required.</p>
-     *
-     */
-    public void finish() throws Exception {
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public String toString() {
-
-        StringBuffer sb = new StringBuffer("ValidatorRule[className=");
-        sb.append(CLASS_NAME);
-        sb.append("]");
-        return (sb.toString());
-
-    }
-
-
-    // --------------------------------------------------------- Package Methods
-
-
-    // Merge "top" into "old"
-    static void mergeValidator(ValidatorBean top, ValidatorBean old) {
-
-        // Merge singleton properties
-        if (top.getValidatorClass() != null) {
-            old.setValidatorClass(top.getValidatorClass());
-        }
-
-        // Merge common collections
-        AttributeRule.mergeAttributes(top, old);
-        mergeFeatures(top, old);
-        PropertyRule.mergeProperties(top, old);
-
-        // Merge unique collections
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/AbstractGenerator.java b/jsf-tools/src/main/java/com/sun/faces/generate/AbstractGenerator.java
deleted file mode 100644
index b494667..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/AbstractGenerator.java
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
-
-/**
- * <p>Abstract base class for Java and TLD generators.</p>
- *
- * <p>The methods in this class presume the following command line option
- * names and corresponding values:</p>
- * <ul>
- * </ul>
- */
-
-public abstract class AbstractGenerator implements Generator {
-
-
-    // -------------------------------------------------------- Static Variables
-
-
-    // The set of default values for primitives, keyed by the primitive type
-    protected static final Map<String,String> TYPE_DEFAULTS = new HashMap<String, String>();
-    static {
-        TYPE_DEFAULTS.put("boolean", "false");
-        TYPE_DEFAULTS.put("byte", "Byte.MIN_VALUE");
-        TYPE_DEFAULTS.put("char", "Character.MIN_VALUE");
-        TYPE_DEFAULTS.put("double", "Double.MIN_VALUE");
-        TYPE_DEFAULTS.put("float", "Float.MIN_VALUE");
-        TYPE_DEFAULTS.put("int", "Integer.MIN_VALUE");
-        TYPE_DEFAULTS.put("long", "Long.MIN_VALUE");
-        TYPE_DEFAULTS.put("short", "Short.MIN_VALUE");
-    }
-
-
-    // The set of reserved keywords in the Java language
-    protected static final Set<String> JAVA_KEYWORDS = new HashSet<String>();
-    static {
-        JAVA_KEYWORDS.add("abstract");
-        JAVA_KEYWORDS.add("boolean");
-        JAVA_KEYWORDS.add("break");
-        JAVA_KEYWORDS.add("byte");
-        JAVA_KEYWORDS.add("case");
-        JAVA_KEYWORDS.add("cast");
-        JAVA_KEYWORDS.add("catch");
-        JAVA_KEYWORDS.add("char");
-        JAVA_KEYWORDS.add("class");
-        JAVA_KEYWORDS.add("const");
-        JAVA_KEYWORDS.add("continue");
-        JAVA_KEYWORDS.add("default");
-        JAVA_KEYWORDS.add("do");
-        JAVA_KEYWORDS.add("double");
-        JAVA_KEYWORDS.add("else");
-        JAVA_KEYWORDS.add("enum");
-        JAVA_KEYWORDS.add("extends");
-        JAVA_KEYWORDS.add("final");
-        JAVA_KEYWORDS.add("finally");
-        JAVA_KEYWORDS.add("float");
-        JAVA_KEYWORDS.add("for");
-        JAVA_KEYWORDS.add("future");
-        JAVA_KEYWORDS.add("generic");
-        JAVA_KEYWORDS.add("goto");
-        JAVA_KEYWORDS.add("if");
-        JAVA_KEYWORDS.add("implements");
-        JAVA_KEYWORDS.add("import");
-        JAVA_KEYWORDS.add("inner");
-        JAVA_KEYWORDS.add("instanceof");
-        JAVA_KEYWORDS.add("int");
-        JAVA_KEYWORDS.add("interface");
-        JAVA_KEYWORDS.add("long");
-        JAVA_KEYWORDS.add("native");
-        JAVA_KEYWORDS.add("new");
-        JAVA_KEYWORDS.add("null");
-        JAVA_KEYWORDS.add("operator");
-        JAVA_KEYWORDS.add("outer");
-        JAVA_KEYWORDS.add("package");
-        JAVA_KEYWORDS.add("private");
-        JAVA_KEYWORDS.add("protected");
-        JAVA_KEYWORDS.add("public");
-        JAVA_KEYWORDS.add("rest");
-        JAVA_KEYWORDS.add("return");
-        JAVA_KEYWORDS.add("short");
-        JAVA_KEYWORDS.add("static");
-        JAVA_KEYWORDS.add("strictfp");
-        JAVA_KEYWORDS.add("super");
-        JAVA_KEYWORDS.add("switch");
-        JAVA_KEYWORDS.add("synchronized");
-        JAVA_KEYWORDS.add("this");
-        JAVA_KEYWORDS.add("throw");
-        JAVA_KEYWORDS.add("throws");
-        JAVA_KEYWORDS.add("transient");
-        JAVA_KEYWORDS.add("try");
-        JAVA_KEYWORDS.add("var");
-        JAVA_KEYWORDS.add("void");
-        JAVA_KEYWORDS.add("volatile");
-        JAVA_KEYWORDS.add("while");
-    }
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Return the capitalized version of the specified property name.</p>
-     *
-     * @param name Uncapitalized property name
-     */
-    protected static String capitalize(String name) {
-
-        return (Character.toUpperCase(name.charAt(0)) + name.substring(1));
-
-    }    
-
-
-    /**
-     * <p>Return a mangled version of the specified name if it conflicts with
-     * a Java keyword; otherwise, return the specified name unchanged.</p>
-     *
-     * @param name Name to be potentially mangled
-     */
-    protected static String mangle(String name) {
-
-        if (JAVA_KEYWORDS.contains(name)) {
-            return ('_' + name);
-        } else {
-            return (name);
-        }
-
-    }
-
-
-    /**
-     * <p>Parse the command line options into a <code>Map</code>.</p>
-     *
-     * @param args Command line arguments passed to this program
-     *
-     * @exception IllegalArgumentException if an option flag does not start
-     *  with a '-' or is missing a corresponding value
-     */
-    protected static Map<String,String> options(String[] args) {
-
-        Map<String,String> options = new HashMap<String, String>();
-        int i = 0;
-        while (i < args.length) {
-            if (!args[i].startsWith("-")) {
-                throw new IllegalArgumentException
-                    ("Invalid option name '" + args[i] + '\'');
-            } else if ((i + 1) >= args.length) {
-                throw new IllegalArgumentException
-                    ("Missing value for option '" + args[i] + '\'');
-            }
-            options.put(args[i], args[i+1]);
-            i += 2;
-        }
-        return (options);
-
-    }
-
-
-    /**
-     * <p>Return <code>true</code> if the specified type is a primitive.</p>
-     *
-     * @param type Type to be tested
-     */
-    protected static boolean primitive(String type) {
-
-        return ((GeneratorUtil.convertToPrimitive(type) != null));
-
-    }
-
-
-    /**
-     * <p>Return the short class name from the specified (potentially fully
-     * qualified) class name.  If the specified name has no periods, the
-     * input value is returned unchanged.</p>
-     *
-     * @param className Class name that is optionally fully qualified
-     */
-    protected static String shortName(String className) {
-
-        int index = className.lastIndexOf('.');
-        if (index >= 0) {
-            return (className.substring(index + 1));
-        } else {
-            return (className);
-        }
-
-    }
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    protected static class CodeWriter extends BufferedWriter {
-
-        private final static String TAB = "    ";
-        private final int TAB_LENGTH = TAB.length();
-
-        private Stack<String> depth;
-        private String formatString = "";
-
-
-        // -------------------------------------------------------- Constructors
-
-        public CodeWriter(Writer writer) {
-
-            super(writer);
-            depth = new Stack<String>();
-
-        } // END CodeWriter
-
-
-        public void indent() {
-
-            depth.push(TAB);
-            updateFormatString(depth.size());
-
-
-        } // END indent
-
-        public void outdent() {
-
-            depth.pop();
-            updateFormatString(depth.size());
-
-        } // END outdent
-
-
-        public void fwrite(String str) throws IOException {
-
-            super.write(formatString + str);
-
-        } // END write
-
-
-        public void writePackage(String packageName) throws IOException {
-
-            fwrite(new StringBuffer("package ").append(packageName).
-                append(";\n").toString());
-
-        } // END writePackage
-
-
-        public void writeImport(String fullyQualifiedClassName)
-        throws IOException {
-
-            fwrite(new StringBuffer("import ").
-                append(fullyQualifiedClassName).append(";\n").
-                toString());
-
-        } // END writeImport
-        
-       
-        public void writePublicClassDeclaration(String className,
-                                                String extendsClass,
-                                                String[] implementsClasses,
-                                                boolean isAbstract,
-                                                boolean isFinal)
-        throws IOException {
-
-            if (isAbstract && isFinal) {
-                throw new IllegalArgumentException("Cannot have a class" +
-                    " declaration be both abstract and final.");
-            }
-
-            StringBuffer sb = new StringBuffer("public");
-            if (isAbstract) {
-                sb.append(" abstract");
-            }
-
-            if (isFinal) {
-                sb.append(" final");
-            }
-
-            sb.append(" class ").append(className);
-
-            if (extendsClass != null && extendsClass.length() > 0) {
-                sb.append(" extends ").append(extendsClass);
-            }
-
-            if (implementsClasses != null && implementsClasses.length > 0) {
-                sb.append(" implements ");
-                for (int i = 0; i < implementsClasses.length; i++) {
-                    sb.append(implementsClasses[i]);
-                    if (i < implementsClasses.length-1) {
-                        sb.append(", ");
-                    }
-                }
-            }
-
-            sb.append(" {\n\n");
-            fwrite(sb.toString());
-
-        } // END writePublicClassDeclaration
-
-
-        public void writeJavadocComment(String str) throws IOException {
-
-            fwrite("/**\n");
-            String[] tokens = str.split("\r|\n|\t");
-            for (int i = 0; i < tokens.length; i++) {
-                fwrite(" * ");
-                write(tokens[i].trim());
-                write('\n');
-            }
-            fwrite(" */\n");
-
-        } // END writeJavadocComment
-
-
-        public void writeLineComment(String str) throws IOException {
-
-            String[] tokens = str.split("\r|\n|\t");
-            for (int i = 0; i < tokens.length; i++) {
-                fwrite("// ");
-                write(tokens[i].trim());
-                write('\n');
-            }           
-
-        } // END writeLineComment
-
-
-        public void writeBlockComment(String str) throws IOException {
-
-            fwrite("/*\n");
-            String[] tokens = str.split("\r|\n|\t");
-            for (int i = 0; i < tokens.length; i++) {
-                fwrite(" * ");
-                write(tokens[i].trim());
-                write('\n');
-            }
-            fwrite(" */\n");
-
-        } // END writeBlockComment
-
-
-        public void writeReadWriteProperty(String propertyName, String type,
-                                           String defaultValue)
-        throws IOException {
-
-            String iVarName = mangle(propertyName);
-            String methodName = capitalize(propertyName);
-            writeLineComment("PROPERTY: " + propertyName);
-            fwrite("private " + type + ' ' + iVarName +
-                (defaultValue == null ? ";" : " = " + defaultValue) + '\n');
-            fwrite("public void set" + methodName +
-                '(' + type + ' ' + iVarName + ") {\n");
-            indent();
-            fwrite("this." + iVarName + " = " + iVarName +
-                ";\n");
-            outdent();
-            fwrite("}\n\n");
-            fwrite("public " + type + "get" + methodName + "() {\n");
-            indent();
-            fwrite("return this." + iVarName + ";\n");
-            outdent();
-            fwrite("}\n\n");
-
-        } // END writeReadWriteProperty
-
-
-        public void writeReadWriteProperty(String propertyName, String type)
-        throws IOException {
-
-            writeReadWriteProperty(propertyName, type, null);
-
-        } // END writeReadWriteProperty
-
-
-        public void writeReadOnlyProperty(String propertyName, String type,
-                                          String defaultValue)
-        throws IOException {
-
-            writeLineComment("PROPERTY: " + propertyName);
-            String iVarName = mangle(propertyName);
-            fwrite("private " + type + ' ' + iVarName +
-                (defaultValue == null ? ";" : " = " + defaultValue) + '\n');
-            fwrite("public " + type + "get" + capitalize(propertyName) +
-                "() {\n");
-            indent();
-            fwrite("return this." + iVarName + ";\n");
-            outdent();
-            fwrite("}\n\n");
-
-        } // END writeReadOnlyProperty
-
-
-        public void writeReadOnlyProperty(String propertyName, String type)
-        throws IOException {
-
-            writeReadOnlyProperty(propertyName, type, null);
-
-        } // END writeReadOnlyProperty
-
-
-        public void writeWriteOnlyProperty(String propertyName, String type,
-                                           String defaultValue)
-        throws IOException {
-
-            writeLineComment("PROPERTY: " + propertyName);
-            String iVarName = mangle(propertyName);
-            fwrite("private " + type + ' ' + iVarName +
-		   (defaultValue == null ? ";" : " = " + defaultValue + ";") 
-		   + '\n');
-            fwrite("public void set" + capitalize(propertyName) +
-                '(' + type + ' ' + iVarName + ") {\n");
-            indent();
-            fwrite("this." + iVarName + " = " + iVarName + ";\n");
-            outdent();
-            fwrite("}\n\n");
-
-        } // END writeWriteOnlyProperty
-
-
-        public void writeWriteOnlyProperty(String propertyName, String type)
-        throws IOException {
-
-            writeWriteOnlyProperty(propertyName, type, null);
-
-        } // END writeWriteOnlyProperty
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private void updateFormatString(int numTabs) {
-
-            if (numTabs == 0) {
-                formatString = "";
-            } else {
-                StringBuffer sb = new StringBuffer(numTabs * TAB_LENGTH);
-                for (int i = 0; i < numTabs; i++) {
-                    sb.append(TAB);
-                }
-                formatString = sb.toString();
-            }
-
-        } // END updateFormatString
-
-    }
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/AttributeManagerGenerator.java b/jsf-tools/src/main/java/com/sun/faces/generate/AttributeManagerGenerator.java
deleted file mode 100644
index 71c4a99..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/AttributeManagerGenerator.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.PropertyBean;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Iterator;
-
-/**
- * PENDING
- */
-public class AttributeManagerGenerator extends AbstractGenerator {
-
-    private static final String TARGET_PACKAGE =
-          "com.sun.faces.renderkit";
-    private static final String TARGET_CLASSNAME =
-          "AttributeManager";
-
-    private PropertyManager manager;
-    private List<String> imports;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public AttributeManagerGenerator(PropertyManager manager) {
-        this.manager = manager;
-    }
-
-    // ------------------------------------------ Methods from AbstractGenerator
-
-
-    public void generate(FacesConfigBean configBean) {
-        try {
-            CodeWriter writer = getCodeWriter();
-            writeCopyright(writer);
-            writePackage(writer);
-            writeImports(writer);
-            writeClassDocumentation(writer);
-            writeClassDeclaration(writer);
-            writeClassBody(writer, configBean);
-            writeClassEnd(writer);
-
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    }
-
-    // ------------------------------------------------------------- Main Method
-
-
-    public static void main(String[] args) throws Exception {
-
-        PropertyManager propManager = PropertyManager.newInstance(args[0]);
-        Generator generator = new AttributeManagerGenerator(propManager);
-        generator.generate(GeneratorUtil.getConfigBean(args[1]));
-
-    }
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private CodeWriter getCodeWriter() throws IOException {
-        FileWriter fWriter = new FileWriter(new File(getClassPackageDirectory(),
-                                                     TARGET_CLASSNAME
-                                                     + ".java"));
-        return new CodeWriter(fWriter);
-    }
-
-
-    private File getClassPackageDirectory() {
-
-        String packagePath = TARGET_PACKAGE.replace('.', File.separatorChar);
-        File packageDir = new File(getBaseOutputDirectory(),
-                                   packagePath);
-        if (!packageDir.exists()) {
-            packageDir.mkdirs();
-        }
-
-        return packageDir;
-
-    } // END getClassPackageDirectory
-
-
-    private File getBaseOutputDirectory() {
-
-        File outputDir = new File(System.getProperty("user.dir") +
-                                  File.separatorChar +
-                                  manager
-                                        .getProperty(PropertyManager.BASE_OUTPUT_DIR));
-
-        if (!outputDir.exists()) {
-            outputDir.mkdirs();
-        }
-
-        return outputDir;
-
-    } // END getBaseOutputDirectory
-
-
-    private void addImport(String fullyQualClassName) {
-
-        if (imports == null) {
-            imports = new ArrayList<String>();
-        }
-        imports.add(fullyQualClassName);
-
-    }
-
-    private void writeImports(CodeWriter writer) throws Exception {
-        addImport("java.util.Map");
-//        addImport("java.util.HashMap");
-//        addImport("java.util.Collections");
-        addImport("static com.sun.faces.util.CollectionsUtils.*");
-        addImport("com.sun.faces.util.CollectionsUtils");
-        addImport("static com.sun.faces.renderkit.Attribute.*");
-        addImport("com.sun.faces.renderkit.Attribute");
-        
-        Collections.sort(imports);
-
-        for (Iterator i = imports.iterator(); i.hasNext();) {
-            writer.writeImport((String) i.next());
-        }
-        writer.write('\n');
-
-    } // END writeImports
-
-
-    private void writeCopyright(CodeWriter writer) throws Exception {
-
-        writer.writeBlockComment(
-              manager.getProperty(PropertyManager.COPYRIGHT));
-        writer.write('\n');
-
-    } // END writeCopyright
-
-
-    private void writePackage(CodeWriter writer) throws Exception {
-
-        // Generate the package declaration
-        writer.writePackage(TARGET_PACKAGE);
-        writer.write('\n');
-
-    } // END writePackage
-
-
-    private void writeClassDocumentation(CodeWriter writer) throws Exception {
-
-        writer.writeJavadocComment("This class contains mappings between the standard components\n"
-                                   + "and the passthrough attributes associated with them.");
-
-    } // END writeClassDocumentation
-
-
-    private void writeClassDeclaration(CodeWriter writer) throws Exception {
-
-        // Generate the class declaration
-        writer.writePublicClassDeclaration(TARGET_CLASSNAME,
-                                           null,
-                                           null,
-                                           false,
-                                           false);
-
-    } // END writeClassDeclaration
-
-
-    private void writeClassBody(CodeWriter writer, FacesConfigBean bean)
-    throws Exception {
-        writer.indent();
-        writer.fwrite("private static Map<String,Attribute[]> ATTRIBUTE_LOOKUP=CollectionsUtils.<String,Attribute[]>map()\n");
-        writer.indent();
-
-        ComponentBean[] components = bean.getComponents();
-        List<String> keys = new ArrayList<String>();
-        for (int i = 0, len = components.length; i < len; i ++) {
-            ComponentBean comp = components[i];
-            if (!comp.getComponentClass().contains("Html")) {
-                continue;
-            }
-            String type = comp.getRendererType();
-            if (type != null) {
-                String family = comp.getBaseComponentType();
-                type = type.substring(type.lastIndexOf('.') + 1);
-                family = family.substring(family.lastIndexOf('.') + 1);
-                String key = family + type;
-                PropertyBean[] props = comp.getProperties();
-                boolean attributeWritten = false;
-                for (int ii = 0, llen = props.length; ii < llen; ii++) {
-                    PropertyBean aBean = props[ii];
-                    if (aBean.isPassThrough()) {
-                        if ((key.contains("Radio") || "SelectManyCheckbox".equals(key))
-                            && ("style".equals(aBean.getPropertyName())
-                                || ("border".equals(aBean.getPropertyName())))) {
-                            continue;
-                        }                        
-                        if (attributeWritten) {
-                            writer.fwrite(",attr(\"");
-                        } else {
-                            keys.add(key);
-                            writer.fwrite(".add(\"");
-                            writer.write(key);
-                            writer.write("\",ar(\n");
-                            writer.indent();
-                        	writer.fwrite("attr(\"");
-                        }
-                        writer.write(aBean.getPropertyName());
-                        writer.write("\"");
-                        if (aBean.getBehaviors() != null
-                             && !aBean.getBehaviors().isEmpty()) {
-                            for (String behavior : aBean.getBehaviors()) {
-                                writer.write(",\"");
-                                String behaviorName;
-                                if (0 == behavior.length()) {
-                                    behaviorName = aBean.getPropertyName();
-                                    // Strip leading "on" preffix.
-                                    if (behaviorName.length() > 2
-                                        && behaviorName.startsWith("on")) {
-                                        StringBuilder buffer = new StringBuilder(
-                                              behaviorName.substring(2, 3)
-                                                    .toLowerCase());
-                                        buffer.append(behaviorName.substring(3));
-                                        behaviorName = buffer.toString();
-                                    }
-                                } else {
-                                    behaviorName = behavior;
-                                }
-                                writer.write(behaviorName);
-                                writer.write("\"");
-                            }
-                        }
-                        writer.write(")\n");
-                        attributeWritten = true;
-                    }
-                    if (key.contains("Button") && "onclick".equals(aBean.getPropertyName())) {
-                        // reset to the original state
-                        aBean.setPassThrough(false);
-                    }
-
-                }
-                if (attributeWritten) {
-                    writer.outdent();
-                    writer.fwrite("))\n");
-                }
-            }
-        }
-        writer.fwrite(".fix();\n");
-
-//        writer.fwrite("ATTRIBUTE_LOOKUP = Collections.unmodifiableMap(map);\n");
-//        writer.outdent();
-//        writer.fwrite("}\n\n");
-        writer.outdent();
-        writer.fwrite("public enum Key {\n");
-        writer.indent();
-        for (int i = 0, len = keys.size(); i < len; i++) {
-            String key = keys.get(i);
-            writer.fwrite(key.toUpperCase() + "(\"" + key + "\")");
-            if (i == (len - 1)) {
-                writer.write(";\n");
-            } else {
-                writer.write(",\n");
-            }
-        }
-        writer.fwrite("private String key;\n");
-        writer.fwrite("Key(String key) {\n");
-        writer.indent();
-        writer.fwrite("this.key = key;\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.fwrite("public String value() {\n");
-        writer.indent();
-        writer.fwrite("return this.key;\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.write("\n\n");
-        writer.fwrite("public static Attribute[] getAttributes(Key key) {\n");
-        writer.indent();
-        writer.fwrite("return ATTRIBUTE_LOOKUP.get(key.value());\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-    }
-
-
-    private void writeClassEnd(CodeWriter writer) throws Exception {
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.flush();
-        writer.close();
-    }
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/Generator.java b/jsf-tools/src/main/java/com/sun/faces/generate/Generator.java
deleted file mode 100644
index ea49cce..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/Generator.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-
-/**
- * <p>Base interface for all <code>jsf-tools</code> generators.</p>
- */
-public interface Generator {
-
-    /**
-     * <p>Perform whatever generation tasks are necessary using
-     * the provided <code>FacesConfigBean</code> as the model.
-     *
-     * @param configBean model data
-     */
-    public void generate(FacesConfigBean configBean);
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/GeneratorUtil.java b/jsf-tools/src/main/java/com/sun/faces/generate/GeneratorUtil.java
deleted file mode 100644
index eb14519..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/GeneratorUtil.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.io.InputStream;
-import java.io.File;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.RenderKitBean;
-import com.sun.faces.config.beans.RendererBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.DigesterFactory;
-import com.sun.faces.config.rules.FacesConfigRuleSet;
-
-import org.xml.sax.InputSource;
-import org.apache.commons.digester.Digester;
-
-/**
- * <p>Utility methods that may be useful to all <code>Generators</code>.</p>
- */
-public class GeneratorUtil {
-
-    private static final String PREFIX = "javax.faces.";
-
-
-     // The set of unwrapper methods for primitives, keyed by the primitive type
-    private static Map<String,String> UNWRAPPERS = new HashMap<String, String>();
-    static {
-        UNWRAPPERS.put("boolean", "booleanValue");
-        UNWRAPPERS.put("byte", "byteValue");
-        UNWRAPPERS.put("char", "charValue");
-        UNWRAPPERS.put("double", "doubleValue");
-        UNWRAPPERS.put("float", "floatValue");
-        UNWRAPPERS.put("int", "intValue");
-        UNWRAPPERS.put("long", "longValue");
-        UNWRAPPERS.put("short", "shortValue");
-    }
-
-
-    // The set of wrapper classes for primitives, keyed by the primitive type
-    private static Map<String,String> WRAPPERS = new HashMap<String, String>();
-    static {
-        WRAPPERS.put("boolean", "java.lang.Boolean");
-        WRAPPERS.put("byte", "java.lang.Byte");
-        WRAPPERS.put("char", "java.lang.Character");
-        WRAPPERS.put("double", "java.lang.Double");
-        WRAPPERS.put("float", "java.lang.Float");
-        WRAPPERS.put("int", "java.lang.Integer");
-        WRAPPERS.put("long", "java.lang.Long");
-        WRAPPERS.put("short", "java.lang.Short");
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-    public static String convertToPrimitive(String objectType) {
-
-        return UNWRAPPERS.get(objectType);
-
-    }
-
-
-    public static String convertToObject(String primitiveType) {
-
-        return WRAPPERS.get(primitiveType);
-
-    }
-
-    /**
-     * Obtain an instance of JspTldGenerator based on the JSP version
-     * provided.
-     */
-    public static JspTLDGenerator getTldGenerator(PropertyManager propManager) {
-
-        String version =
-            propManager.getProperty(PropertyManager.JSP_VERSION_PROPERTY);
-        if ("1.2".equals(version)) {
-            return new JspTLD12Generator(propManager);
-        } else if ("2.1".equals(version)) {
-            return new JspTLD21Generator(propManager);
-        } else {
-            throw new IllegalArgumentException("Unsupported version of JSP '" +
-                version + '\'');
-        }
-    }
-
-    /**
-     * <p>Strip any "javax.faces." prefix from the beginning of the specified
-     * identifier, and return it.</p>
-     *
-     * @param identifier Identifier to be stripped
-     */
-    public static String stripJavaxFacesPrefix(String identifier) {
-
-        if (identifier.startsWith(PREFIX)) {
-            return (identifier.substring(PREFIX.length()));
-        } else {
-            return (identifier);
-        }
-
-    } // END stripJavaxFacesPrefix
-
-
-    /**
-     * Build the tag handler class name from componentFamily and rendererType.
-     *
-     * @param componentFamily the component family
-     * @param rendererType the renderer type
-     */
-    public static String makeTagClassName(String componentFamily,
-                                          String rendererType) {
-
-        if (componentFamily == null) {
-            return null;
-        }
-        String tagClassName = componentFamily;
-        if (rendererType != null) {
-            if (!componentFamily.equals(rendererType)) {
-                tagClassName = tagClassName + rendererType;
-            }
-        }
-        return tagClassName + "Tag";
-
-    } // END makeTagClassName
-
-
-    /**
-     * @return a SortedMap, where the keys are component-family String entries,
-     *         and the values are {@link com.sun.faces.config.beans.ComponentBean}
-     *         instances Only include components that do not have a base
-     *         component type.
-     */
-    public static Map<String,ComponentBean> getComponentFamilyComponentMap(
-        FacesConfigBean configBean) {
-
-        TreeMap<String,ComponentBean> result = new TreeMap<String, ComponentBean>();
-        ComponentBean component;
-        ComponentBean[] components = configBean.getComponents();
-        for (int i = 0, len = components.length; i < len; i++) {
-            component = components[i];
-            if (component == null) {
-                throw new IllegalStateException("No Components Found");
-            }
-            if (component.isIgnore()) {
-                continue;
-            }
-            if (component.getBaseComponentType() != null) {
-                continue;
-            }
-            String componentFamily = component.getComponentFamily();
-
-            result.put(componentFamily, component);
-        }
-
-        return result;
-
-    } // END getComponentFamilyComponentMap
-
-
-    public static Map<String,ArrayList<RendererBean>> getComponentFamilyRendererMap(FacesConfigBean configBean,
-                                                    String renderKitId) {
-
-        RenderKitBean renderKit = configBean.getRenderKit(renderKitId);
-        if (renderKit == null) {
-            throw new IllegalArgumentException("No RenderKit for id '" +
-                renderKitId + '\'');
-        }
-
-        RendererBean[] renderers = renderKit.getRenderers();
-        if (renderers == null) {
-            throw new IllegalStateException("No Renderers for RenderKit id" +
-                '"' + renderKitId + '"');
-        }
-
-        TreeMap<String,ArrayList<RendererBean>> result = new TreeMap<String, ArrayList<RendererBean>>();
-
-        for (int i = 0, len = renderers.length; i < len; i++) {
-            RendererBean renderer = renderers[i];
-
-            if (renderer == null) {
-                throw new IllegalStateException("no Renderer");
-            }
-
-            // if this is the first time we've encountered this
-            // componentFamily
-            String componentFamily = renderer.getComponentFamily();
-            ArrayList<RendererBean> list = result.get(componentFamily);
-            if (list == null) {
-                // create a list for it
-                list = new ArrayList<RendererBean>();
-                list.add(renderer);
-                result.put(componentFamily, list);
-            } else {
-                list.add(renderer);
-            }
-        }
-
-        return result;
-
-    } // END getComponentFamilyRendererMap
-    
-    public static String getFirstDivFromString(String toParse) {
-        String result = null;
-        
-        if (null == toParse) {
-            return result;
-        }
-        
-        int divStart, divEnd;
-        if (-1 != (divStart = toParse.indexOf("<div"))) {
-            if (-1 != (divEnd = toParse.indexOf(">", divStart))) {
-                result = toParse.substring(divStart, divEnd + 1);
-            }
-        }
-        
-        return result;
-    }
-
-    public static String getFirstSpanFromString(String toParse) {
-        String result = null;
-        
-        if (null == toParse) {
-            return result;
-        }
-        
-        int divStart, divEnd;
-        if (-1 != (divStart = toParse.indexOf("<span"))) {
-            if (-1 != (divEnd = toParse.indexOf(">", divStart))) {
-                result = toParse.substring(divStart, divEnd + 1);
-            }
-        }
-        
-        return result;
-    }
-    
-
-    public static FacesConfigBean getConfigBean(String facesConfig)
-    throws Exception {
-
-        FacesConfigBean fcb = null;
-        InputStream stream = null;
-        try {
-            File file = new File(facesConfig);
-            stream = new BufferedInputStream(new FileInputStream(file));
-            InputSource source = new InputSource(file.toURL().toString());
-            source.setByteStream(stream);
-            fcb = (FacesConfigBean)
-                createDigester(true, false, true).parse(source);
-        } finally {
-            if (stream != null) {
-                try {
-                    stream.close();
-                } catch (Exception e) {
-                    ;
-                }
-                stream = null;
-            }
-        }
-        return (fcb);
-
-    } // END getConfigBean
-
-    
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Configure and return a <code>Digester</code> instance suitable for
-     * use in the environment specified by our parameter flags.</p>
-     *
-     * @param design Include rules suitable for design time use in a tool
-     * @param generate Include rules suitable for generating component,
-     * renderer, and tag classes
-     * @param runtime Include rules suitable for runtime execution
-     */
-    private static Digester createDigester(boolean design,
-                                       boolean generate, boolean runtime) {
-
-        Digester digester = DigesterFactory.newInstance(true).createDigester();
-
-        // Configure parsing rules
-        digester.addRuleSet(new FacesConfigRuleSet(design, generate, runtime));
-
-        // Configure preregistered entities
-
-        return (digester);
-
-    } // END createDigester
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlComponentGenerator.java b/jsf-tools/src/main/java/com/sun/faces/generate/HtmlComponentGenerator.java
deleted file mode 100644
index 09ea9d3..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlComponentGenerator.java
+++ /dev/null
@@ -1,656 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-
-import java.io.File;
-import java.io.FileWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.PropertyBean;
-import com.sun.faces.util.ToolsUtil;
-
-
-/**
- * <p>Generate concrete HTML component classes.  Classes will be generated for
- * each <code><component></code> element in the specified configuration
- * file whose absolute class name is in package <code>javax.faces.component.html</code>.</p>
- * <p/>
- * <p>This application requires the following command line options:</p> <ul>
- * <li><strong>--config</strong> Absolute pathname to an input configuration
- * file that will be parsed by the <code>parse()</code> method.</li>
- * <li><strong>--copyright</strong> Absolute pathname to a file containing the
- * copyright material for the top of each Java source file.</li>
- * <li><strong>--dir</strong> Absolute pathname to the directory into which
- * generated Java source code will be created.</li> <li><strong>--dtd</strong>
- * Pipe delimited list of public identifiers and absolute pathnames to files
- * containing the DTDs used to validate the input configuration files.
- * PRECONDITION: The list is the sequence: <public id>|<dtd path>|<public
- * id>|<dtd path>...</li> </ul>
- */
-
-public class HtmlComponentGenerator extends AbstractGenerator {
-
-
-    // -------------------------------------------------------- Static Variables
-
-
-    private static final Logger logger = Logger.getLogger(ToolsUtil.FACES_LOGGER +
-            ToolsUtil.GENERATE_LOGGER, ToolsUtil.TOOLS_LOG_STRINGS);
-
-    // The component configuration bean for the component class to be generated
-    private ComponentBean cb;
-
-
-    // Base object of the configuration beans
-    private FacesConfigBean configBean;
-
-    // List of relevant properties for the component class to be generated
-    private List<PropertyBean> properties;
-
-    // The Writer for each component class to be generated
-    private CodeWriter writer;
-
-    private PropertyManager propManager;
-
-	private boolean useBehavior;
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public HtmlComponentGenerator(PropertyManager propManager) {
-
-        this.propManager = propManager;
-
-    }
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Generate the concrete HTML component class based on the current
-     * component configuration bean.</p>
-     */
-    public void generate(FacesConfigBean configBean) {
-
-        this.configBean = configBean;
-
-        try {
-            generateClasses();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    }
-
-
-    // ---------------------------------------------------------- Private Method
-
-    private void generateClasses() throws Exception {
-
-        final String compPackage = "javax.faces.component.html";
-
-        // Component generator doesn't use the TARGET_PACKAGE property
-        String packagePath = compPackage.replace('.', File.separatorChar);
-        File dir = new File(System.getProperty("user.dir") +
-            File.separatorChar +
-            propManager.getProperty(PropertyManager.BASE_OUTPUT_DIR) +
-            File.separatorChar + packagePath);
-        ComponentBean[] cbs = configBean.getComponents();
-        for (ComponentBean cb1 : cbs) {
-            if (cb1.isIgnore()) {
-                continue;
-            }
-            String componentClass = cb1.getComponentClass();
-            if (componentClass.startsWith(compPackage)) {
-                cb = cb1;
-
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE,
-                               "Generating concrete HTML component class " +
-                               cb.getComponentClass());
-                }
-
-                // Initialize all per-class static variables
-                properties = new ArrayList<PropertyBean>();
-
-                if (!dir.exists()) {
-                    dir.mkdirs();
-                }
-
-                String fileName = cb.getComponentClass();
-                fileName = fileName.substring(fileName.lastIndexOf('.') + 1) +
-                           ".java";
-                File file = new File(dir, fileName);
-                writer = new CodeWriter(new FileWriter(file));
-                useBehavior = false;
-                for (PropertyBean property : cb.getProperties()) {
-        			if(null != property.getBehaviors() && !property.getBehaviors().isEmpty()){
-        				useBehavior = true;
-        				break;
-        			}
-        		}
-                // Generate the various portions of each class
-                prefix();
-                properties();
-                suffix();
-
-                // Flush and close the Writer for this class
-                writer.flush();
-                writer.close();
-            }
-
-
-        }
-    }
-
-
-    /**
-     * <p>Generate the prefix for this component class, down to (and including)
-     * the class declaration.</p>
-     */
-    private void prefix() throws Exception {
-
-        // Acquire the config bean for our base component
-        ComponentBean base = configBean.getComponent(cb.getBaseComponentType());
-        if (base == null) {
-            throw new IllegalArgumentException("No base component type for '" +
-                cb.getComponentType() + "'");
-        }
-        // Generate the copyright information
-        writer.writeBlockComment(
-            propManager.getProperty(PropertyManager.COPYRIGHT));
-
-        // Generate the package declaration
-        writer.writePackage("javax.faces.component.html");
-
-        writer.write('\n');
-
-        // Generate the imports
-        writer.writeImport("java.io.IOException");
-        writer.writeImport("java.util.ArrayList");
-        writer.writeImport("java.util.Arrays");
-        if(useBehavior){
-            writer.writeImport("java.util.Collection");        	
-            writer.writeImport("java.util.Collections");        	
-        }
-        writer.writeImport("java.util.List");
-        writer.write('\n');
-        writer.writeImport("javax.faces.context.FacesContext");
-        if( useBehavior){
-        	writer.writeImport("javax.faces.component.behavior.ClientBehaviorHolder");
-        }
-        writer.writeImport("javax.el.MethodExpression");
-        writer.writeImport("javax.el.ValueExpression");
-        writer.write("\n\n");
-
-        writer.writeBlockComment("******* GENERATED CODE - DO NOT EDIT *******");
-        writer.write("\n\n");
-
-        // Generate the class JavaDocs (if any)
-        DescriptionBean db = cb.getDescription("");
-        String rendererType = cb.getRendererType();
-
-        String description = null;
-        if (db != null) {
-            description = db.getDescription().trim();
-        }
-
-        if (rendererType != null) {
-            if (description == null) {
-                description = "";
-            }
-            description +=
-            "\n<p>By default, the <code>rendererType</code> property must be set to \"<code>" +
-                rendererType +
-                "</code>\".\nThis value can be changed by calling the <code>setRendererType()</code> method.</p>\n";
-        }
-
-        if (description != null && description.length() > 0) {
-            writer.writeJavadocComment(description);
-        }
-
-        // Generate the class declaration
-        writer.writePublicClassDeclaration(shortName(cb.getComponentClass()),
-                                           base.getComponentClass(),
-                                           useBehavior?(new String[]{"ClientBehaviorHolder"}):null, false, false);
-
-        writer.write("\n\n");
-
-        writer.indent();
-
-        writer.fwrite("private static final String OPTIMIZED_PACKAGE = \"javax.faces.component.\";\n\n");
-
-        // Generate the constructor
-
-        writer.fwrite("public ");
-        writer.write(shortName(cb.getComponentClass()));
-        writer.write("() {\n");
-        writer.indent();
-        writer.fwrite("super();\n");
-        if (rendererType != null) {
-            writer.fwrite("setRendererType(\"");
-            writer.write(rendererType);
-            writer.write("\");\n");
-        }
-
-        PropertyBean[] pbs = cb.getProperties();
-        for (PropertyBean pb : pbs) {
-            if (pb.isPassThrough() && pb.getDefaultValue() != null) {
-                writer.fwrite("handleAttribute(\"");
-                writer.write(pb.getPropertyName());
-                writer.write("\", ");
-                writer.write(pb.getDefaultValue());
-                writer.write(");\n");
-
-            }
-        }
-
-        writer.outdent();
-        writer.fwrite("}\n\n\n");
-
-        // Generate the manifest constant for the component type
-        writer.writeJavadocComment(
-            "<p>The standard component type for this component.</p>\n");
-        writer.fwrite("public static final String COMPONENT_TYPE = \"");
-        writer.write(cb.getComponentType());
-        writer.write("\";\n\n\n");
-
-    }
-
-    /**
-     * <p>Generate the property instance variable, and getter and setter
-     * methods, for all non-duplicate properties of this component class.</p>
-     */
-    private void properties() throws Exception {
-
-        ComponentBean base = configBean.getComponent(cb.getBaseComponentType());
-        PropertyBean[] pbs = cb.getProperties();
-        writer.fwrite("protected enum PropertyKeys {\n");
-        writer.indent();
-
-        for (PropertyBean pb : pbs) {
-            if (base.getProperty(pb.getPropertyName()) != null) {
-                if (logger.isLoggable(Level.FINER)) {
-                    logger.log(Level.FINER, "Skipping base class property '" +
-                                            pb.getPropertyName() + "'");
-                }
-                continue;
-            }
-            if ("for".equals(pb.getPropertyName())) {
-                writer.fwrite(pb.getPropertyName());
-                writer.write("Val(\"for\")");
-            } else {
-                writer.fwrite(pb.getPropertyName());
-            }
-            writer.write(",\n");
-        }
-        writer.write(";\n");
-        writer.fwrite("String toString;\n");
-        writer.fwrite("PropertyKeys(String toString) { this.toString = toString; }\n");
-        writer.fwrite("PropertyKeys() { }\n");
-        writer.fwrite("public String toString() {\n");
-        writer.indent();
-        writer.fwrite("return ((toString != null) ? toString : super.toString());\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.outdent();
-        writer.write("}\n\n");
-
-        for (PropertyBean pb : pbs) {
-
-            // Should we generate this property?
-            if (base.getProperty(pb.getPropertyName()) != null) {
-                if (logger.isLoggable(Level.FINER)) {
-                    logger.log(Level.FINER, "Skipping base class property '" +
-                                            pb.getPropertyName() + "'");
-                }
-                continue;
-            }
-            if (logger.isLoggable(Level.FINE)) {
-                logger.log(Level.FINE,
-                           "Generating property variable/getter/setter for '" +
-                           pb.getPropertyName() + "'");
-            }
-            properties.add(pb);
-            String type = pb.getPropertyClass();
-            String var = mangle(pb.getPropertyName());
-
-            // Generate the instance variable
-            //writer.fwrite("private ");
-            //writer.write(primitive(type) ? GeneratorUtil.convertToObject(type) : type);
-            //writer.write(' ');
-            //writer.write(var);
-            //writer.write(";\n");
-
-            // Document getter method
-            String description = "<p>Return the value of the <code>" +
-                                 pb.getPropertyName() + "</code> property.</p>";
-            DescriptionBean db = pb.getDescription("");
-            if (db != null) {
-                String temp = db.getDescription().trim();
-                if (temp != null && temp.length() > 0) {
-                    description += '\n' + "<p>Contents: " + temp;
-                }
-            }
-            writer.writeJavadocComment(description.trim());
-
-            // Generate the getter method
-            writer.fwrite("public ");
-            writer.write(type);
-            if ("boolean".equals(type)) {
-                writer.write(" is");
-            } else {
-                writer.write(" get");
-            }
-            writer.write(capitalize(pb.getPropertyName()));
-            writer.write("() {\n");
-            writer.indent();
-            writer.fwrite("return (");
-            writer.write(primitive(type) ? GeneratorUtil.convertToObject(type) : type);
-            writer.write(") getStateHelper().eval(PropertyKeys.");
-            writer.write((pb.getPropertyName().equals("for")) ? pb
-                  .getPropertyName() + "Val" : pb.getPropertyName());
-             if (primitive(type) || (pb.getDefaultValue() != null)) {
-                writer.write(", ");
-                writer.write(pb.getDefaultValue() != null
-                             ? pb.getDefaultValue()
-                             : TYPE_DEFAULTS.get(type));
-            }
-            writer.write(");\n\n");
-            writer.outdent();
-            writer.fwrite("}\n\n");
-//            writer.fwrite("if (null != this.");
-//            writer.write(var);
-//            writer.write(") {\n");
-//            writer.indent();
-//            writer.fwrite("return this.");
-//            writer.write(var);
-//            writer.write(";\n");
-//            writer.outdent();
-//            writer.fwrite("}\n");
-//            writer.fwrite("ValueExpression _ve = getValueExpression(\"");
-//            writer.write(pb.getPropertyName());
-//            writer.write("\");\n");
-//            writer.fwrite("if (_ve != null) {\n");
-//            writer.indent();
-//            writer.fwrite("return (");
-//            writer.write(primitive(type)
-//                         ? GeneratorUtil.convertToObject(type)
-//                         : type);
-//            writer.write(
-//                  ") _ve.getValue(getFacesContext().getELContext());\n");
-//            writer.outdent();
-//            writer.fwrite("} else {\n");
-//            writer.indent();
-//            if (primitive(type) || (pb.getDefaultValue() != null)) {
-//                writer.fwrite("return ");
-//                writer.write(pb.getDefaultValue() != null
-//                             ? pb.getDefaultValue()
-//                             : TYPE_DEFAULTS.get(type));
-//                writer.write(";\n");
-//            } else {
-//                writer.fwrite("return null;\n");
-//            }
-            //writer.outdent();
-            //writer.fwrite("}\n");
-            //writer.outdent();
-            //writer.fwrite("}\n\n");
-
-            // Generate the setter method
-            writer.writeJavadocComment("<p>Set the value of the <code>"
-                                       +
-                                       pb.getPropertyName()
-                                       + "</code> property.</p>\n");
-
-            writer.fwrite("public void set");
-            writer.write(capitalize(pb.getPropertyName()));
-            writer.write("(");
-            writer.write(type);
-            writer.write(' ');
-            writer.write(var);
-            writer.write(") {\n");
-            writer.indent();
-            //writer.fwrite("this.");
-            //writer.write(var);
-            //writer.write(" = ");
-            //writer.write(var);
-            writer.fwrite("getStateHelper().put(PropertyKeys.");
-            writer.write((pb.getPropertyName().equals("for")) ? pb
-                  .getPropertyName() + "Val" : pb.getPropertyName());
-            writer.write(", ");
-            writer.write(var);
-            writer.write(");\n");
-           // writer.write(";\n");
-            if ((pb.isPassThrough() && pb.getDefaultValue() == null)
-                  || (cb.getComponentClass().contains("HtmlCommandButton")
-                        && "onclick".equals(pb.getPropertyName()))) {
-                writer.fwrite("handleAttribute(\"");
-                writer.write(pb.getPropertyName());
-                 writer.write("\", ");
-                writer.write(var);
-                writer.write(");\n");
-            }
-
-            writer.outdent();
-            writer.fwrite("}\n\n");
-
-            // Generate spacing between properties
-            writer.write("\n");
-
-        }
-
-    }
-
-
-    /**
-     * <p>Generate the suffix for this component class.</p>
-     */
-    private void suffix() throws Exception {
-        /*
-        writer.fwrite("private Object[] _values;\n\n");
-        // Generate the saveState() method
-        writer.fwrite("public Object saveState(FacesContext _context) {\n");
-        writer.indent();
-        writer.fwrite("if (_values == null) {\n");
-        writer.indent();
-        writer.fwrite("_values = new Object[");
-        writer.write(String.valueOf((properties.size() + 1)));
-        writer.write("];\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.fwrite("_values[0] = super.saveState(_context);\n");
-
-        int n = 1; // Index into values array
-        for (int i = 0; i < properties.size(); i++) {
-            PropertyBean pb = properties.get(i);
-            String name = mangle(pb.getPropertyName());
-            writer.fwrite("_values[");
-            writer.write(String.valueOf(n++));
-            writer.write("] = ");
-            writer.write(name);
-            writer.write(";\n");
-        }
-        writer.fwrite("return _values;\n");
-        writer.outdent();
-        writer.write("}\n\n\n");
-
-        // Generate the restoreState() method
-        writer.fwrite(
-            "public void restoreState(FacesContext _context, Object _state) {\n");
-        writer.indent();
-        writer.fwrite("_values = (Object[]) _state;\n");
-        writer.fwrite("super.restoreState(_context, _values[0]);\n");
-        n = 1;
-        for (int i = 0, size = properties.size(); i < size; i++) {
-            PropertyBean pb = properties.get(i);
-            String name = mangle(pb.getPropertyName());
-            String type = pb.getPropertyClass();
-            writer.fwrite("this.");
-            writer.write(name);
-            writer.write(" = ");
-
-            writer.write("(");
-            writer.write(primitive(type)
-                         ? GeneratorUtil.convertToObject(type)
-                         : type);
-            writer.write(") _values[");
-            writer.write(String.valueOf(n++));
-            writer.write("]");
-
-            writer.write(";\n");
-
-        }
-        writer.outdent();
-        writer.fwrite("}\n\n\n");
-        */
-        // ClientBehaviorHolder methods
-        if(useBehavior){
-        	writer.fwrite("private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList(");
-        	boolean first = true;
-        	String defaultEventName = null;
-        	for (PropertyBean property : cb.getProperties()) {
-				if (null != property.getBehaviors()
-						&& !property.getBehaviors().isEmpty()) {
-					String behaviorName = null;
-					for (String behavior : property.getBehaviors()) {
-						if (!first) {
-							writer.write(",");
-						} else {
-							first = false;
-						}
-						writer.write("\"");
-						if (0 == behavior.length()) {
-							behaviorName = property.getPropertyName();
-							// Strip leading "on" preffix.
-							if (behaviorName.length() > 2
-									&& behaviorName.startsWith("on")) {
-								StringBuilder buffer = new StringBuilder(
-										behaviorName.substring(2, 3)
-												.toLowerCase());
-								buffer.append(behaviorName.substring(3));
-								behaviorName = buffer.toString();
-							}
-						} else {
-							behaviorName = behavior;
-						}
-						writer.write(behaviorName);
-						writer.write("\"");
-					}
-					if (property.isDefaultBehavior()) {
-						defaultEventName = behaviorName;
-					}
-				}
-			}
-        	writer.write("));\n\n");
-            writer.fwrite("public Collection<String> getEventNames() {\n");
-            writer.indent();
-            writer.fwrite("return EVENT_NAMES;");
-            writer.outdent();
-            writer.fwrite("}\n\n\n");        	
-            writer.fwrite("public String getDefaultEventName() {\n");
-            writer.indent();
-            if(null == defaultEventName){
-                writer.fwrite("return null;");
-            } else {
-                writer.fwrite("return \""+defaultEventName+"\";");
-            }
-            writer.outdent();
-            writer.fwrite("}\n\n\n");        	
-        }
-        writer.fwrite( "private void handleAttribute(String name, Object value) {\n");
-        writer.indent();
-        writer.fwrite("List<String> setAttributes = (List<String>) this.getAttributes().get(\"javax.faces.component.UIComponentBase.attributesThatAreSet\");\n");
-        writer.fwrite("if (setAttributes == null) {\n");
-        writer.indent();
-        writer.fwrite("String cname = this.getClass().getName();\n");
-        writer.fwrite("if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) {\n");
-        writer.indent();
-        writer.fwrite("setAttributes = new ArrayList<String>(6);\n");
-        writer.fwrite("this.getAttributes().put(\"javax.faces.component.UIComponentBase.attributesThatAreSet\", setAttributes);\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.fwrite("if (setAttributes != null) {\n");
-        writer.indent();
-        writer.fwrite("if (value == null) {\n");
-        writer.indent();
-        writer.fwrite("ValueExpression ve = getValueExpression(name);\n");
-        writer.fwrite("if (ve == null) {\n");
-        writer.indent();
-        writer.fwrite("setAttributes.remove(name);\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.outdent();
-        writer.fwrite("} else if (!setAttributes.contains(name)) {\n");
-        writer.indent();
-        writer.fwrite("setAttributes.add(name);\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-
-        // Generate the ending of this class
-        writer.outdent();
-        writer.write("}\n");
-
-    }
-
-
-
-    // ------------------------------------------------------------- Main Method
-
-
-    public static void main(String[] args) throws Exception {
-        PropertyManager propManager = PropertyManager.newInstance(args[0]);
-        Generator generator = new HtmlComponentGenerator(propManager);
-        generator.generate(GeneratorUtil.getConfigBean(args[1]));
-    }
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib12Generator.java b/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib12Generator.java
deleted file mode 100644
index b44eea0..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib12Generator.java
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Collections;
-import java.util.ArrayList;
-
-import com.sun.faces.config.beans.AttributeBean;
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.PropertyBean;
-import com.sun.faces.config.beans.RendererBean;
-import com.sun.faces.util.ToolsUtil;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * This class generates tag handler class code that is special to the
- * "html_basic" package.
- */
-public class HtmlTaglib12Generator extends AbstractGenerator {
-
-    // -------------------------------------------------------- Static Variables
-    
-    // Log instance for this class
-    private static final Logger logger = Logger.getLogger(ToolsUtil.FACES_LOGGER +
-            ToolsUtil.GENERATE_LOGGER, ToolsUtil.TOOLS_LOG_STRINGS);    
-
-    // The Writer for each component class to be generated
-    protected CodeWriter writer;
-
-
-    // Maps used for generatng Tag Classes
-    protected ComponentBean component = null;
-    protected RendererBean renderer = null;
-
-    // Tag Handler Class Name
-    protected String tagClassName = null;
-    protected FacesConfigBean configBean;    
-    protected PropertyManager propManager;
-
-    private Generator tldGenerator;
-    private File outputDir;
-    private List<String> imports;
-
-
-
-    // ------------------------------------------------------------ Constructors
-
-    public HtmlTaglib12Generator(PropertyManager propManager) {
-
-        this.propManager = propManager;
-        
-        // initialize structures from the data in propManager
-
-        outputDir = getClassPackageDirectory();
-
-        setTldGenerator(GeneratorUtil.getTldGenerator(propManager));
-
-        addImport("com.sun.faces.util.Util");
-        addImport("java.io.IOException");
-        addImport("javax.faces.component.*");
-        addImport("javax.faces.context.*");
-        addImport("javax.faces.convert.*");
-        addImport("javax.faces.el.*");
-        addImport("javax.faces.webapp.*");
-        addImport("javax.servlet.jsp.JspException");
-
-    } // END HtmlTaglib12Generator
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void generate(FacesConfigBean configBean) {
-
-        this.configBean = configBean;
-        try {
-            generateTagClasses();
-            tldGenerator.generate(configBean);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    } // END generate
-
-
-    public static void main(String[] args) {
-
-        PropertyManager manager = PropertyManager.newInstance(args[0]);
-        try {
-            Generator generator = new HtmlTaglib12Generator(manager);
-            generator.generate(GeneratorUtil.getConfigBean(args[1]));
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    } // END main
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    /**
-     * <p>Set the <code>JspTLDGenerator</code> to be used by the taglib
-     * generator.</p>
-     * @param tldGenerator <code>JspTLDGenerator</code> instance
-     */
-    protected void setTldGenerator(JspTLDGenerator tldGenerator) {
-
-        this.tldGenerator = tldGenerator;
-
-    } // END setTldGenerator
-
-    protected void addImport(String fullyQualClassName) {
-
-        if (imports == null) {
-            imports = new ArrayList<String>();
-        }
-        imports.add(fullyQualClassName);
-
-    }
-
-    protected void writeImports() throws Exception {
-
-        Collections.sort(imports);
-
-        for (Iterator i = imports.iterator(); i.hasNext(); ) {
-            writer.writeImport((String) i.next());
-        }
-
-    } // END writeImports
-
-
-    protected void writeCopyright() throws Exception {
-
-        writer.writeBlockComment(
-            propManager.getProperty(PropertyManager.COPYRIGHT));
-
-    } // END writeCopyright
-
-
-    protected void writePackage() throws Exception {
-
-        // Generate the package declaration
-        writer.writePackage(
-            propManager.getProperty(PropertyManager.TARGET_PACKAGE));
-
-    } // END writePackage
-
-
-    protected void writeClassDocumentation() throws Exception {
-
-        // Generate the class JavaDocs (if any)
-        DescriptionBean db = component.getDescription("");
-        if (db != null) {
-            String description = db.getDescription();
-            if (description == null) {
-                description = "";
-            }
-            description = description.trim();
-            if (description.length() > 0) {
-                writer.writeJavadocComment(description);
-            }
-        }
-
-    } // END writeClassDocumentation
-
-
-    protected void writeClassDeclaration() throws Exception {
-
-        // Generate the class declaration
-        writer.writePublicClassDeclaration(tagClassName,
-                                           "UIComponentELTag",
-                                           null, false, true);
-
-    } // END writeClassDeclaration
-
-    /**
-     * Generate copyright, package declaration, import statements, class
-     * declaration.
-     */
-    protected void tagHandlerPrefix() throws Exception {
-
-
-        // Generate the copyright information
-        writeCopyright();
-
-        writer.write('\n');
-
-        // Generate the package declaration
-        writePackage();
-
-        writer.write('\n');
-
-        // Generate the imports
-        writeImports();
-
-        writer.write("\n\n");
-
-        writer.writeBlockComment("******* GENERATED CODE - DO NOT EDIT *******");
-        writer.write("\n\n");
-
-
-        // Generate the class JavaDocs (if any)
-        writeClassDocumentation();
-
-        // Generate the class declaration
-        writeClassDeclaration();
-
-        writer.write('\n');
-
-        writer.indent();
-
-    }
-
-
-    protected void tagHandlerReleaseMethod() throws Exception {
-
-        writer.writeLineComment("RELEASE");
-
-        writer.fwrite("public void release() {\n");
-        writer.indent();
-        writer.fwrite("super.release();\n\n");
-        writer.writeLineComment("component properties");
-
-        // Generate from component properties
-        //
-        PropertyBean[] properties = component.getProperties();
-        for (int i = 0, len = properties.length; i < len; i++) {
-            PropertyBean property = properties[i];
-            if (property == null) {
-                continue;
-            }
-
-            if (!property.isTagAttribute()) {
-                continue;
-            }
-
-            String propertyName = property.getPropertyName();
-            String propertyType = property.getPropertyClass();
-
-            // SPECIAL - Don't generate these properties
-            if ("binding".equals(propertyName)
-                || "id".equals(propertyName)
-                || "rendered".equals(propertyName)) {
-                continue;
-            }
-
-            String ivar = mangle(propertyName);
-            writer.fwrite("this." + ivar + " = ");
-            if (primitive(propertyType) && !(property.isValueExpressionEnabled()
-                || property.isMethodExpressionEnabled())) {
-                writer.write(TYPE_DEFAULTS.get(propertyType));
-            } else {
-                writer.write("null");
-            }
-            writer.write(";\n");
-        }
-
-        writer.write("\n");
-        writer.writeLineComment("rendered attributes");
-
-        // Generate from renderer attributes..
-        //
-        AttributeBean[] attributes = renderer.getAttributes();
-
-        for (int i = 0, len = attributes.length; i < len; i++) {
-            AttributeBean attribute = attributes[i];
-
-            if (attribute == null) {
-                continue;
-            }
-            if (!attribute.isTagAttribute()) {
-                continue;
-            }
-
-            String attributeName = attribute.getAttributeName();
-
-            writer.fwrite("this." + mangle(attributeName) + " = null;\n");
-        }
-
-        writer.outdent();
-        writer.fwrite("}\n\n");
-    }
-
-    /**
-     * Generate Tag Handler setter methods from component properties and
-     * renderer attributes.
-     */
-    protected void tagHandlerSetterMethods() throws Exception {
-
-        writer.writeLineComment("Setter Methods");
-
-        // Generate from component properties
-        //
-        PropertyBean[] properties = component.getProperties();
-
-        for (int i = 0, len = properties.length; i < len; i++) {
-            PropertyBean property = properties[i];
-
-            if (property == null) {
-                continue;
-            }
-            if (!property.isTagAttribute()) {
-                continue;
-            }
-
-            String propertyName = property.getPropertyName();
-            String propertyType = property.getPropertyClass();
-
-            // SPECIAL - Don't generate these properties
-            if ("binding".equals(propertyName)
-                || "id".equals(propertyName)
-                || "rendered".equals(propertyName)) {
-                continue;
-            }
-
-            if (property.isValueExpressionEnabled() ||
-                property.isMethodExpressionEnabled()) {
-                writer.writeWriteOnlyProperty(propertyName, "java.lang.String");
-            } else {
-                writer.writeWriteOnlyProperty(propertyName, propertyType);
-            }
-        }
-
-        // Generate from renderer attributes..
-        //
-        AttributeBean[] attributes = renderer.getAttributes();
-        for (int i = 0, len = attributes.length; i < len; i++) {
-            AttributeBean attribute = attributes[i];
-
-            if (attribute == null) {
-                continue;
-            }
-            if (!attribute.isTagAttribute()) {
-                continue;
-            }
-            String attributeName = attribute.getAttributeName();
-
-            writer.writeWriteOnlyProperty(attributeName,
-                "java.lang.String");
-
-        }
-        writer.write("\n");
-    }
-
-    protected void tagHanderSetPropertiesMethod() throws Exception {
-
-        String componentType = component.getComponentType();
-        String componentClass = component.getComponentClass();
-
-        writer.fwrite("protected void setProperties(UIComponent component) {\n");
-        writer.indent();
-        writer.fwrite("super.setProperties(component);\n");
-
-        String iVar =
-            GeneratorUtil.stripJavaxFacesPrefix(componentType).toLowerCase();
-
-        writer.fwrite(componentClass + ' ' + iVar + " = null;\n");
-
-        writer.fwrite("try {\n");
-        writer.indent();
-        writer.fwrite(iVar + " = (" + componentClass + ") component;\n");
-        writer.outdent();
-        writer.fwrite("} catch (ClassCastException cce) {\n");
-        writer.indent();
-        writer.fwrite("throw new IllegalStateException(\"Component \" + " +
-            "component.toString() + \" not expected type.  Expected: " +
-            componentClass +
-            ".  Perhaps you're missing a tag?\");\n");
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-        if (isValueHolder(componentClass)) {
-            writer.fwrite("if (converter != null) {\n");
-            writer.indent();
-            writer.fwrite("if (isValueReference(converter)) {\n");
-            writer.indent();
-            writer.fwrite("ValueBinding vb = Util.getValueBinding(converter);\n");
-            writer.fwrite(iVar + ".setValueBinding(\"converter\", vb);\n");
-            writer.outdent();
-            writer.fwrite("} else {\n");
-            writer.indent();
-            writer.fwrite("Converter _converter = FacesContext.getCurrent" +
-                "Instance().getApplication().createConverter(converter);\n");
-            writer.fwrite(iVar + ".setConverter(_converter);\n");
-            writer.outdent();
-            writer.fwrite("}\n");
-            writer.outdent();
-            writer.fwrite("}\n\n");
-        }
-
-        // Generate "setProperties" method contents from component properties
-        //
-        PropertyBean[] properties = component.getProperties();
-        for (int i = 0, len = properties.length; i < len; i++) {
-            PropertyBean property = properties[i];
-
-            if (property == null) {
-                continue;
-            }
-            if (!property.isTagAttribute()) {
-                continue;
-            }
-
-            String propertyName = property.getPropertyName();
-            String propertyType = property.getPropertyClass();
-
-            // SPECIAL - Don't generate these properties
-            if ("binding".equals(propertyName) ||
-                "id".equals(propertyName) ||
-                "rendered".equals(propertyName) ||
-                "converter".equals(propertyName)) {
-                continue;
-            }
-            String ivar = mangle(propertyName);
-            String vbKey = ivar;
-            String comp =
-                GeneratorUtil.stripJavaxFacesPrefix(componentType).toLowerCase();
-            String capPropName = capitalize(propertyName);
-
-            if (property.isValueExpressionEnabled()) {
-                writer.fwrite("if (" + ivar + " != null) {\n");
-                writer.indent();
-                writer.fwrite("if (isValueReference(" + ivar + ")) {\n");
-                writer.indent();
-                writer.fwrite("ValueBinding vb = Util.getValueBinding(" +
-                    ivar + ");\n");
-
-                writer.fwrite(comp + ".setValueBinding(\"" + vbKey + "\", vb);\n");
-                writer.outdent();
-                writer.fwrite("} else {\n");
-                writer.indent();
-                if (primitive(propertyType)) {
-                    writer.fwrite(comp + ".set" + capPropName +
-                        "(" + GeneratorUtil.convertToPrimitive(propertyType) +
-                        ".valueOf(" + ivar + ")." + propertyType +
-                        "Value());\n");
-                } else {
-                    writer.fwrite(comp + ".set" + capPropName + '(' + ivar +
-                        ");\n");
-                }
-                writer.outdent();
-                writer.fwrite("}\n");
-                writer.outdent();
-                writer.fwrite("}\n\n");
-            } else if (property.isMethodExpressionEnabled()) {
-                if ("action".equals(ivar)) {
-                    writer.fwrite("if (" + ivar + " != null) {\n");
-                    writer.indent();
-                    writer.fwrite("if (isValueReference(" + ivar + ")) {\n");
-                    writer.indent();
-                    writer.fwrite("MethodBinding vb = FacesContext.getCurrentInstance().");
-                    writer.write("getApplication().createMethodBinding(" +
-                        ivar + ", null);\n");
-                    writer.fwrite(comp + ".setAction(vb);\n");
-                    writer.outdent();
-                    writer.fwrite("} else {\n");
-                    writer.indent();
-                    writer.fwrite("final String outcome = " + ivar + ";\n");
-                    writer.fwrite("MethodBinding vb = Util.createConstantMethodBinding(" +
-                        ivar + ");\n");
-                    writer.fwrite(comp + ".setAction(vb);\n");
-                    writer.outdent();
-                    writer.fwrite("}\n");
-                    writer.outdent();
-                    writer.fwrite("}\n");
-                } else {
-                    HashMap<String,String> signatureMap = new HashMap<String, String>(3);
-                    signatureMap.put("actionListener",
-                        "Class args[] = { ActionEvent.class };");
-                    signatureMap.put("validator",
-                        "Class args[] = { FacesContext.class, UIComponent.class, Object.class };");
-                    signatureMap.put("valueChangeListener",
-                        "Class args[] = { ValueChangeEvent.class };");
-
-                    writer.fwrite("if (" + ivar + " != null) {\n");
-                    writer.indent();
-                    writer.fwrite("if (isValueReference(" + ivar + ")) {\n");
-                    writer.indent();
-                    writer.fwrite(signatureMap.get(ivar) + "\n");
-                    writer.fwrite("MethodBinding vb = FacesContext.getCurrentInstance().");
-                    writer.write("getApplication().createMethodBinding(" +
-                        ivar + ", args);\n");
-                    writer.fwrite(comp + ".set" + capitalize(ivar) + "(vb);\n");
-                    writer.outdent();
-                    writer.fwrite("} else {\n");
-                    writer.indent();
-                    writer.fwrite("Object params [] = {" + ivar + "};\n");
-                    writer.fwrite("throw new javax.faces.FacesException(Util." +
-                        "getExceptionMessageString(Util.INVALID_EXPRESSION_ID, " +
-                        "params));\n");
-                    writer.outdent();
-                    writer.fwrite("}\n");
-                    writer.outdent();
-                    writer.fwrite("}\n");
-                }
-            } else {
-                writer.fwrite(comp + ".set" + capPropName + "(" + ivar + ");\n");
-            }
-        }
-
-        // Generate "setProperties" method contents from renderer attributes
-        //
-        AttributeBean[] attributes = renderer.getAttributes();
-        for (int i = 0, len = attributes.length; i < len; i++) {
-            AttributeBean attribute = attributes[i];
-            if (attribute == null) {
-                continue;
-            }
-            if (!attribute.isTagAttribute()) {
-                continue;
-            }
-            String attributeName = attribute.getAttributeName();
-            String attributeType = attribute.getAttributeClass();
-
-            String ivar = mangle(attributeName);
-            String vbKey = ivar;
-            String comp =
-                GeneratorUtil.stripJavaxFacesPrefix(componentType).toLowerCase();
-
-            writer.fwrite("if (" + ivar + " != null) {\n");
-            writer.indent();
-            writer.fwrite("if (isValueReference(" + ivar + ")) {\n");
-            writer.indent();
-            writer.fwrite("ValueBinding vb = Util.getValueBinding(" + ivar +
-                ");\n");
-            writer.fwrite(comp);
-            if ("_for".equals(ivar)) {
-                writer.write(".setValueBinding(\"" + '_' + vbKey + "\", vb);\n");
-            } else {
-                writer.write(".setValueBinding(\"" + vbKey + "\", vb);\n");
-            }
-            writer.outdent();
-            writer.fwrite("} else {\n");
-            writer.indent();
-            if (primitive(attributeType)) {
-                writer.fwrite(comp + ".getAttributes().put(\"" + ivar +
-                    "\", ");
-                writer.write(GeneratorUtil.convertToPrimitive(attributeType) +
-                    ".valueOf(" + ivar + "));\n");
-            } else {
-                if ("bundle".equals(ivar)) {
-                    writer.fwrite(comp +
-                        ".getAttributes().put(com.sun.faces.RIConstants.BUNDLE_ATTR, ");
-                } else if ("_for".equals(ivar)) {
-                    writer.fwrite(comp +
-                        ".getAttributes().put(\"for\", ");
-                } else {
-                    writer.fwrite(comp +
-                        ".getAttributes().put(\"" + ivar + "\", ");
-                }
-                writer.write(ivar + ");\n");
-            }
-            writer.outdent();
-            writer.fwrite("}\n");
-            writer.outdent();
-            writer.fwrite("}\n");
-        }
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-    }
-
-
-    /**
-     * Generate Tag Handler general methods from component properties and
-     * renderer attributes.
-     */
-    protected void tagHandlerGeneralMethods() throws Exception {
-
-        writer.writeLineComment("General Methods");
-
-
-        String rendererType = renderer.getRendererType();
-        String componentType = component.getComponentType();
-
-        writer.fwrite("public String getRendererType() {\n");
-        writer.indent();
-        writer.fwrite("return ");
-        writer.write('\"' + rendererType + "\";\n");
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-        writer.fwrite("public String getComponentType() {\n");
-        writer.indent();
-        writer.fwrite("return ");
-        if (componentType.equals(rendererType)) {
-            writer.write(
-                "\"javax.faces.Html" +
-                GeneratorUtil.stripJavaxFacesPrefix(componentType) +
-                "\";\n");
-        } else {
-            writer.write(
-                "\"javax.faces.Html" +
-                GeneratorUtil.stripJavaxFacesPrefix(componentType) +
-                GeneratorUtil.stripJavaxFacesPrefix(rendererType) +
-                "\";\n");
-        }
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-
-    }
-
-
-     protected static boolean isValueHolder(String componentClass) {
-
-        try {
-            Class<?> clazz = Class.forName(componentClass);
-            Class<?> valueHolderClass =
-                Class.forName("javax.faces.component.ValueHolder");
-            return valueHolderClass.isAssignableFrom(clazz);
-        } catch (ClassNotFoundException cnfe) {
-            throw new IllegalStateException("Unable to find component class '" +
-                componentClass + "' : " + cnfe.toString());
-        }
-
-    } // END isValueHolder
-
-
-    /**
-     * Generate Tag Handler support methods
-     */
-    protected void tagHandlerClassicSupportMethods() throws Exception {
-
-        writer.writeLineComment("Methods From TagSupport");
-
-        writer.fwrite("public int doStartTag() throws JspException {\n");
-        writer.indent();
-        writeSuperTagCallBody("doStartTag", true);
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-        writer.fwrite("public int doEndTag() throws JspException {\n");
-        writer.indent();
-
-        writeSuperTagCallBody("doEndTag", true);
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-    }
-
-
-    /**
-     * <p>Convience method to generate code for a super call to
-     * a JSP tag lifecycle method.</p>
-     * @param method JSP tag lifecycle method name
-     * @throws IOException
-     */
-    protected void writeSuperTagCallBody(String method, boolean hasReturn)
-    throws IOException {
-        writer.fwrite("try {\n");
-        writer.indent();
-        writer.fwrite((hasReturn ? "return super." : "super."));
-        writer.write(method);
-        writer.write("();\n");
-        writer.outdent();
-        writer.fwrite("} catch (Exception e) {\n");
-        writer.indent();
-        writer.fwrite("Throwable root = e;\n");
-        writer.fwrite("while (root.getCause() != null) {\n");
-        writer.indent();
-        writer.fwrite("root = root.getCause();\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-        writer.fwrite("throw new JspException(root);\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-    }
-
-
-    /**
-     * Generate remaining Tag Handler methods
-     */
-    protected void tagHandlerSuffix() throws Exception {
-
-        // generate general purpose method used in logging.
-        //
-        writer.fwrite("public String getDebugString() {\n");
-        writer.indent();
-        writer.fwrite("return \"id: \" + this.getId() + \" class: \" + this.getClass().getName();\n");
-        writer.outdent();
-        writer.fwrite("}\n\n");
-        writer.outdent();
-        writer.fwrite("}\n");
-
-    }
-
-    //
-    // Helper methods
-    //
-    //
-
-    // --------------------------------------------------------- Private Methods
-
-    /**
-     * Generate the tag handler class files.
-     */
-    private void generateTagClasses() throws Exception {
-
-        Map<String,ArrayList<RendererBean>> renderersByComponentFamily =
-            GeneratorUtil.getComponentFamilyRendererMap(configBean,
-                propManager.getProperty(PropertyManager.RENDERKIT_ID));
-        Map<String,ComponentBean> componentsByComponentFamily =
-            GeneratorUtil.getComponentFamilyComponentMap(configBean);
-
-	for (Map.Entry entry : renderersByComponentFamily.entrySet()) {
-
-            String componentFamily = (String)entry.getKey();
-            List<RendererBean> renderers = (List<RendererBean>) entry.getValue();
-
-            component = componentsByComponentFamily.get(componentFamily);
-
-            for (Iterator<RendererBean> rendererIter = renderers.iterator();
-                 rendererIter.hasNext(); ) {
-
-                renderer = rendererIter.next();
-                if (renderer.isIgnoreForJsp() || renderer.isIgnoreAll()) {
-                    continue;
-                }
-                String rendererType = renderer.getRendererType();
-                tagClassName = GeneratorUtil.makeTagClassName(
-                         GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                         GeneratorUtil.stripJavaxFacesPrefix(rendererType));
-
-                if (tagClassName == null) {
-                    throw new IllegalStateException(
-                        "Could not determine tag class name");
-                }
-
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.log(Level.FINE, "Generating " + tagClassName + "...");
-                }
-
-
-                File file = new File(outputDir, tagClassName + ".java");
-                writer = new CodeWriter(new FileWriter(file));
-
-                tagHandlerPrefix();
-                tagHandlerSetterMethods();
-                tagHandlerGeneralMethods();
-                tagHanderSetPropertiesMethod();
-                tagHandlerClassicSupportMethods();
-                tagHandlerReleaseMethod();
-                tagHandlerSuffix();
-
-                // Flush and close the Writer
-                writer.flush();
-                writer.close();
-            }
-        }
-    }
-
-     private File getClassPackageDirectory() {
-
-        String packagePath =
-            propManager.getProperty(PropertyManager.TARGET_PACKAGE).
-            replace('.', File.separatorChar);
-        File packageDir = new File(getBaseOutputDirectory(),
-            packagePath);
-
-        if (!packageDir.exists()) {
-            packageDir.mkdirs();
-        }
-
-        return packageDir;
-
-    } // END getClassPackageDirectory
-
-
-    private File getBaseOutputDirectory() {
-
-        File outputDir = new File(System.getProperty("user.dir") +
-            File.separatorChar +
-            propManager.getProperty(PropertyManager.BASE_OUTPUT_DIR));
-
-        if (!outputDir.exists()) {
-            outputDir.mkdirs();
-        }
-
-        return outputDir;
-
-    } // END getBaseOutputDirectory
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib21Generator.java b/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib21Generator.java
deleted file mode 100644
index d1c18fd..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib21Generator.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import com.sun.faces.config.beans.AttributeBean;
-import com.sun.faces.config.beans.PropertyBean;
-
-/**
- * This class generates tag handler class code that is specifc to the
- * "html_basic" package and JSP 2.1.
- */
-public class HtmlTaglib21Generator extends HtmlTaglib12Generator {
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public HtmlTaglib21Generator(PropertyManager propManager) {
-
-        super(propManager);
-        addImport("javax.el.*");
-        addImport("javax.faces.validator.*");
-        addImport("javax.faces.event.*");
-        addImport("javax.faces.*");
-
-    } // END HtmlTaglib21Generator
-
-
-    public static void main(String[] args) {
-
-        PropertyManager manager = PropertyManager.newInstance(args[0]);
-        try {
-            Generator generator = new HtmlTaglib21Generator(manager);
-            generator.generate(GeneratorUtil.getConfigBean(args[1]));
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    } // END main
-
-
-    // ------------------------------------------------------- Protected Methods
-
-
-    protected void writeClassDeclaration() throws Exception {
-
-        // Generate the class declaration
-        writer.writePublicClassDeclaration(tagClassName,
-                                           "UIComponentELTag",
-                                           null, false, false);
-
-
-    } // END writeClassDeclaration
-
-
-    /*
-     * Override to take into account javax.el.ValueExpression and
-     * javax.el.MethodExpression types.
-     */
-    protected void tagHandlerSetterMethods() throws Exception {
-
-        writer.writeLineComment("Setter Methods");
-
-        // Generate from component properties
-        //
-        PropertyBean[] properties = component.getProperties();
-
-        for (int i = 0, len = properties.length; i < len; i++) {
-            PropertyBean property = properties[i];
-
-            if (property == null) {
-                continue;
-            }
-            if (!property.isTagAttribute()) {
-                continue;
-            }
-
-            String propertyName = property.getPropertyName();
-            String propertyType = property.getPropertyClass();
-
-            // SPECIAL - Don't generate these properties
-            if ("binding".equals(propertyName)
-                || "id".equals(propertyName)
-                || "rendered".equals(propertyName)) {
-                continue;
-            }
-
-            if (property.isMethodExpressionEnabled()) {
-                writer.writeWriteOnlyProperty(propertyName, "javax.el.MethodExpression");
-            } else if (property.isValueExpressionEnabled()) {
-                writer.writeWriteOnlyProperty(propertyName, "javax.el.ValueExpression");
-            } else {
-                writer.writeWriteOnlyProperty(propertyName, propertyType);
-            }
-        }
-
-        // Generate from renderer attributes..
-        //
-        AttributeBean[] attributes = renderer.getAttributes();
-        for (int i = 0, len = attributes.length; i < len; i++) {
-            AttributeBean attribute = attributes[i];
-
-            if (attribute == null) {
-                continue;
-            }
-            if (!attribute.isTagAttribute()) {
-                continue;
-            }
-            String attributeName = attribute.getAttributeName();
-
-            writer.writeWriteOnlyProperty(attributeName,
-                "javax.el.ValueExpression");
-
-        }
-        writer.write("\n");
-
-    } // END tagHandlerSetterMethods
-
-
-    /*
-     * Override to take into account javax.el.ValueExpression and
-     * javax.el.MethodExpression types.
-     */
-    protected void tagHanderSetPropertiesMethod() throws Exception {
-
-        String componentType = component.getComponentType();
-        String componentClass = component.getComponentClass();
-
-        writer.fwrite("protected void setProperties(UIComponent component) {\n");
-        writer.indent();
-        writer.fwrite("super.setProperties(component);\n");
-
-        String iVar =
-            GeneratorUtil.stripJavaxFacesPrefix(componentType).toLowerCase();
-
-        writer.fwrite(componentClass + ' ' + iVar + " = null;\n");
-
-        writer.fwrite("try {\n");
-        writer.indent();
-        writer.fwrite(iVar + " = (" + componentClass + ") component;\n");
-        writer.outdent();
-        writer.fwrite("} catch (ClassCastException cce) {\n");
-        writer.indent();
-        writer.fwrite("throw new IllegalStateException(\"Component \" + " +
-            "component.toString() + \" not expected type.  Expected: " +
-            componentClass +
-            ".  Perhaps you're missing a tag?\");\n");
-        writer.outdent();
-        writer.fwrite("}\n\n");
-
-        if (isValueHolder(componentClass)) {
-
-            writer.fwrite("if (converter != null) {\n");
-            writer.indent();
-            writer.fwrite("if (!converter.isLiteralText()) {\n");
-            writer.indent();
-            writer.fwrite(iVar +
-                ".setValueExpression(\"converter\", converter);\n");
-            writer.outdent();
-            writer.fwrite("} else {\n");
-            writer.indent();
-            writer.fwrite("Converter conv = FacesContext.getCurrentInstance().getApplication()." +
-                "createConverter(converter." +
-                "getExpressionString());\n");
-            writer.fwrite(iVar + ".setConverter(conv);\n");
-            writer.outdent();
-            writer.fwrite("}\n");
-            writer.outdent();
-            writer.fwrite("}\n\n");
-           
-        }
-
-        // Generate "setProperties" method contents from component properties
-        //
-        PropertyBean[] properties = component.getProperties();
-        for (int i = 0, len = properties.length; i < len; i++) {
-            PropertyBean property = properties[i];
-
-            if (property == null) {
-                continue;
-            }
-            if (!property.isTagAttribute()) {
-                continue;
-            }
-
-            String propertyName = property.getPropertyName();           
-
-            // SPECIAL - Don't generate these properties
-            if ("binding".equals(propertyName) ||
-                "id".equals(propertyName) ||
-                "rendered".equals(propertyName) ||
-                "converter".equals(propertyName)) {
-                continue;
-            }
-            String ivar = mangle(propertyName);           
-            String comp =
-                GeneratorUtil.stripJavaxFacesPrefix(componentType).toLowerCase();
-            String capPropName = capitalize(propertyName);
-
-            if (property.isValueExpressionEnabled()) {
-                writer.fwrite("if (" + ivar + " != null) {\n");
-                writer.indent();
-                writer.fwrite(comp);
-                if ("_for".equals(ivar)) {
-                    writer.write(".setValueExpression(\"for\", " +
-                                 ivar + ");\n");
-                } else {
-                    writer.write(".setValueExpression(\"" + ivar + "\", " +
-                                 ivar + ");\n");
-                }
-                writer.outdent();
-                writer.fwrite("}\n");
-            } else if (property.isMethodExpressionEnabled()) {
-                if ("action".equals(ivar)) {
-                    writer.fwrite("if (" + ivar + " != null) {\n");
-                    writer.indent();
-
-                    writer.fwrite(comp + ".setActionExpression(" + ivar +
-                        ");\n");
-                    
-                    writer.outdent();
-                    writer.fwrite("}\n");
-                } else {
-                    writer.fwrite("if (" + ivar + " != null) {\n");
-                    writer.indent();
-                    
-                    writer.fwrite(comp + ".add" + capitalize(ivar) +
-                        "(new MethodExpression" + capitalize(ivar) + '(' +
-                        ivar + "));\n");
-
-                    writer.outdent();
-                    writer.fwrite("}\n");
-                }
-            } else {
-                writer.fwrite("if (" + ivar + " != null) {\n");
-                writer.indent();
-                writer.fwrite(comp + ".set" + capPropName + "(" + ivar + ");\n");
-                writer.outdent();
-                writer.fwrite("}\n");
-            }
-        }
-
-
-        // Generate "setProperties" method contents from renderer attributes
-        //
-        AttributeBean[] attributes = renderer.getAttributes();
-        for (int i = 0, len = attributes.length; i < len; i++) {
-            AttributeBean attribute = attributes[i];
-            if (attribute == null) {
-                continue;
-            }
-            if (!attribute.isTagAttribute()) {
-                continue;
-            }
-            String attributeName = attribute.getAttributeName();           
-
-            String ivar = mangle(attributeName);
-            String comp =
-                GeneratorUtil.stripJavaxFacesPrefix(componentType).toLowerCase();
-
-            writer.fwrite("if (" + ivar + " != null) {\n");
-            writer.indent();
-           
-            writer.fwrite(comp);
-            if ("_for".equals(ivar)) {              
-                writer.write(".setValueExpression(\"for\", " +
-                    ivar + ");\n");
-            } else {
-                writer.write(".setValueExpression(\"" + ivar + "\", " +
-                    ivar + ");\n");
-            }
-            writer.outdent();          
-            writer.fwrite("}\n");
-        }
-
-
-
-        writer.outdent();
-        writer.fwrite("}\n");
-
-    }
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/JspTLD12Generator.java b/jsf-tools/src/main/java/com/sun/faces/generate/JspTLD12Generator.java
deleted file mode 100644
index 3558565..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/JspTLD12Generator.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-import java.io.IOException;
-
-import com.sun.faces.config.beans.AttributeBean;
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.PropertyBean;
-import com.sun.faces.config.beans.RendererBean;
-
-/**
- * <p>A <code>JspTldGenerator</code> specific for JSP 1.2 style TLDs.</p>
- */
-public class JspTLD12Generator extends JspTLDGenerator {
-
-    // 1.1 spec still says 1.0 for tlib-version
-    private static final String JSF_TLIB_VERSION = "1.0";
-    private static final String JSP_VERSION = "1.2";
-
-
-    // ------------------------------------------------------------ Constructors
-
-    public JspTLD12Generator(PropertyManager propManager) {
-
-        super(propManager);
-
-    }
-
-    // ------------------------------------------------------- Protected Methods
-
-    /**
-     * The XML header for the TLD file.
-     */
-    protected void writeProlog() throws IOException {
-        super.writeProlog();
-        writeDocType();
-    }
-
-
-    /**
-     * The description element for this TLD.
-     */
-    protected void writeTldDescription() throws IOException {
-
-        writer.startElement("taglib");
-        writer.writeComment(
-            "============== Tag Library Description Elements =============");
-
-        writer.startElement("tlib-version");
-        writer.writeText(JSF_TLIB_VERSION);
-        writer.closeElement();
-
-        writer.startElement("jsp-version");
-        writer.writeText(JSP_VERSION);
-        writer.closeElement();
-
-        writer.startElement("short-name");
-        writer.writeText(
-            propManager.getProperty(PropertyManager.TAGLIB_SHORT_NAME));
-        writer.closeElement();
-
-        writer.startElement("uri");
-        writer.writeText(propManager.getProperty(PropertyManager.TAGLIB_URI));
-        writer.closeElement();
-
-        String description =
-            propManager.getProperty(PropertyManager.TAGLIB_DESCRIPTION);
-        if (description != null && description.length() > 0) {
-            writer.startElement("description");
-            writer.writeText(description);
-            writer.closeElement();
-        }
-
-    } // end tldDescription
-
-
-    /**
-     * The tags for this TLD.
-     */
-    protected void writeTags() throws IOException {
-        writer.writeComment(
-            "===================== HTML 4.0 basic tags ======================");
-
-        Map<String,ComponentBean> componentsByComponentFamily =
-            GeneratorUtil.getComponentFamilyComponentMap(configBean);
-        Map<String, ArrayList<RendererBean>> renderersByComponentFamily =
-            GeneratorUtil.getComponentFamilyRendererMap(configBean,
-                propManager.getProperty(PropertyManager.RENDERKIT_ID));
-        String targetPackage =
-            propManager.getProperty(PropertyManager.TARGET_PACKAGE);
-
-	for (Map.Entry entry : renderersByComponentFamily.entrySet()) {
-
-            String componentFamily = (String)entry.getKey();
-            List<RendererBean> renderers = (List<RendererBean>)entry.getValue();
-            for (Iterator<RendererBean> rendererIter = renderers.iterator();
-                 rendererIter.hasNext();) {
-
-                RendererBean renderer = rendererIter.next();
-                String rendererType = renderer.getRendererType();
-                writer.startElement("tag");
-
-                String tagName = makeTldTagName(
-                    GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                    GeneratorUtil.stripJavaxFacesPrefix(rendererType));
-
-                if (tagName == null) {
-                    throw new IllegalStateException(
-                        "Could not determine tag name");
-                }
-
-                writer.startElement("name");
-                writer.writeText(tagName);
-                writer.closeElement();
-
-
-                if (GeneratorUtil.makeTagClassName(
-                    GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                    GeneratorUtil.stripJavaxFacesPrefix(rendererType)) ==
-                    null) {
-                    throw new IllegalStateException(
-                        "Could not determine tag class name");
-                }
-
-                writer.startElement("tag-class");
-                writer.writeText(targetPackage + '.' +
-                    GeneratorUtil.makeTagClassName(GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                        GeneratorUtil.stripJavaxFacesPrefix(rendererType)));
-                writer.closeElement();
-
-                writer.startElement("body-content");
-                writer.writeText(getBodyContent(tagName));
-                writer.closeElement();
-
-                DescriptionBean description = renderer.getDescription("");
-                if (description != null) {
-                    String descriptionText = description.getDescription().trim();
-
-                    if (descriptionText != null) {
-                        writer.startElement("description");
-                        StringBuffer sb = new StringBuffer();
-                        sb.append("<![CDATA[");
-                        sb.append(descriptionText);
-                        sb.append("]]>\n");
-                        writer.writeText(sb.toString());
-                        writer.closeElement();
-                    }
-                }
-
-
-                // Generate tag attributes
-                //
-
-                // Component Properties first...
-                //
-                ComponentBean component = componentsByComponentFamily.get(componentFamily);
-
-                PropertyBean[] properties = component.getProperties();
-                PropertyBean property;
-
-                for (int i = 0, len = properties.length; i < len; i++) {
-                    if (null == (property = properties[i])) {
-                        continue;
-                    }
-                    if (!property.isTagAttribute()) {
-                        continue;
-                    }
-
-                    writer.startElement("attribute");
-
-
-                    writer.startElement("name");
-                    writer.writeText(property.getPropertyName());
-                    writer.closeElement();
-
-                    writer.startElement("required");
-                    writer.writeText(property.isRequired() ?
-                                     Boolean.TRUE.toString() :
-                                     Boolean.FALSE.toString());
-                    writer.closeElement();
-
-                    writer.startElement("rtexprvalue");
-                    writer.writeText(getRtexprvalue(tagName,
-                        property.getPropertyName()));
-                    writer.closeElement();
-
-                    description = property.getDescription("");
-                    if (description != null) {
-                        String descriptionText =
-                        description.getDescription().trim();
-
-                        if (descriptionText != null) {
-                            writer.startElement("description");
-                            StringBuffer sb = new StringBuffer();
-                            sb.append("<![CDATA[");
-                            sb.append(descriptionText);
-                            sb.append("]]>\n");
-                            writer.writeText(sb.toString());
-                            writer.closeElement();
-                        }
-                    }
-
-                    writer.closeElement(); // closes attribute element above
-
-                } // END property FOR loop
-
-
-                // Renderer Attributes Next...
-                //
-                AttributeBean[] attributes = renderer.getAttributes();
-                AttributeBean attribute;
-                for (int i = 0, len = attributes.length; i < len; i++) {
-                    if (null == (attribute = attributes[i])) {
-                        continue;
-                    }
-                    if (!attribute.isTagAttribute()) {
-                        continue;
-                    }
-                    if (attributeShouldBeExcluded(renderer,
-                        attribute.getAttributeName())) {
-                        continue;
-                    }
-
-                    writer.startElement("attribute");
-
-                    writer.startElement("name");
-                    writer.writeText(attribute.getAttributeName());
-                    writer.closeElement();
-
-                    writer.startElement("required");
-                    writer.writeText(attribute.isRequired() ?
-                                     Boolean.TRUE.toString() :
-                                     Boolean.FALSE.toString());
-                    writer.closeElement();
-
-                    writer.startElement("rtexprvalue");
-                    writer.writeText(getRtexprvalue(tagName,
-                        attribute.getAttributeName()));
-                    writer.closeElement();
-
-                    description = attribute.getDescription("");
-                    if (description != null) {
-                        String descriptionText =
-                        description.getDescription().trim();
-
-                        if (descriptionText != null) {
-                            writer.startElement("description");
-                            StringBuffer sb = new StringBuffer();
-                            sb.append("<![CDATA[");
-                            sb.append(descriptionText);
-                            sb.append("]]>\n");
-                            writer.writeText(sb.toString());
-                            writer.closeElement();
-                        }
-                    }
-
-                    writer.closeElement(); // closes attribute element above
-
-                } // END attribute FOR loop
-
-                // SPECIAL: "Binding" needs to exist on every tag..
-                writer.startElement("attribute");
-
-                writer.startElement("name");
-                writer.writeText("binding");
-                writer.closeElement();
-
-                writer.startElement("required");
-                writer.writeText("false");
-                writer.closeElement();
-
-                writer.startElement("rtexprvalue");
-                writer.writeText("false");
-                writer.closeElement();
-
-                writer.startElement("description");
-                writer.writeText(
-                    "The value binding expression linking this component to a property in a backing bean");
-
-                // close the most recent description, attribute, and tag
-                // elements
-                writer.closeElement(3);
-
-            }
-        }
-
-        //Include any other tags defined in the optional tag definition file.
-        //These might be tags that were not picked up because they have no renderer
-        //- for example "column".
-        String tagDef = loadOptionalTags();
-        if (tagDef != null) {
-            writer.write(tagDef);
-        }
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-    /**
-     * TLD DOCTYPE
-     */
-    private void writeDocType() throws IOException {
-        writer.write("\n<!DOCTYPE taglib\n");
-        writer.write("PUBLIC \"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN\"\n");
-        writer.write("\"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd\">\n\n");
-    }
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/JspTLD21Generator.java b/jsf-tools/src/main/java/com/sun/faces/generate/JspTLD21Generator.java
deleted file mode 100644
index bcbcf19..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/JspTLD21Generator.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-
-import com.sun.faces.config.beans.AttributeBean;
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.PropertyBean;
-import com.sun.faces.config.beans.RendererBean;
-
-/**
- * <p>A <code>JspTldGenerator</code> specific for JSP 2.1 style TLDs.</p>
- */
-public class JspTLD21Generator extends JspTLDGenerator {
-
-    private static final String JSP_VERSION = "2.1";
-    private static final String JSF_TLIB_VERSION = "1.2";
-
-    /**
-     * <p>Schema related attributes.</p>
-     */
-    private static Map<String,String> TAG_LIB_SCHEMA_ATTRIBUTES = new HashMap<String, String>();
-    static {
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("xmlns",
-            "http://java.sun.com/xml/ns/javaee");
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("xmlns:xsi",
-            "http://www.w3.org/2001/XMLSchema-instance");
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("xsi:schemaLocation",
-            "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd");
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("version", JSP_VERSION);
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public JspTLD21Generator(PropertyManager propManager) {
-
-        super(propManager);
-
-    } // END JspTLD21Generator
-
-
-    // ------------------------------------------------------- Protected Methods
-
-    protected String getRtexprvalue(String tagName, String attributeName) {
-
-        if ("id".equals(attributeName)) {        
-            return "true";
-        } else {
-            return super.getRtexprvalue(tagName, attributeName);
-        }
-
-    } // END getRtexprvalue
-
-
-        /**
-     * The description element for this TLD.
-     */
-    protected void writeTldDescription() throws IOException {
-
-        writer.startElement("taglib", TAG_LIB_SCHEMA_ATTRIBUTES);
-        writer.writeComment(
-            "============== Tag Library Description Elements =============");
-
-        writer.startElement("description");
-        writer.writeText(
-            propManager.getProperty(PropertyManager.TAGLIB_DESCRIPTION));
-        writer.closeElement();
-
-        writer.startElement("tlib-version");
-        writer.writeText(JSF_TLIB_VERSION);
-        writer.closeElement();
-
-        writer.startElement("short-name");
-        writer.writeText(
-            propManager.getProperty(PropertyManager.TAGLIB_SHORT_NAME));
-        writer.closeElement();
-
-        writer.startElement("uri");
-        writer.writeText(propManager.getProperty(PropertyManager.TAGLIB_URI));
-        writer.closeElement();
-
-    } // end tldDescription
-
-
-    /**
-     * The tags for this TLD.
-     */
-    protected void writeTags() throws IOException {
-        writer.writeComment(
-            "===================== HTML 4.0 basic tags ======================");
-
-        Map<String,ComponentBean> componentsByComponentFamily =
-            GeneratorUtil.getComponentFamilyComponentMap(configBean);
-        Map<String, ArrayList<RendererBean>> renderersByComponentFamily =
-            GeneratorUtil.getComponentFamilyRendererMap(configBean,
-                propManager.getProperty(PropertyManager.RENDERKIT_ID));
-        String targetPackage =
-            propManager.getProperty(PropertyManager.TARGET_PACKAGE);
-
-	for (Map.Entry entry : renderersByComponentFamily.entrySet()) {
-
-            String componentFamily = (String)entry.getKey();
-            List<RendererBean> renderers = (List<RendererBean>) entry.getValue();
-            for (Iterator<RendererBean> rendererIter = renderers.iterator();
-                 rendererIter.hasNext();) {
-
-                RendererBean renderer = rendererIter.next();
-                if (renderer.isIgnoreForJsp() || renderer.isIgnoreAll()) {
-                    continue;
-                }
-                String rendererType = renderer.getRendererType();
-                writer.startElement("tag");
-
-                DescriptionBean description = renderer.getDescription("");
-                if (description != null) {
-                    String descriptionText = description.getDescription().trim();
-
-                    if (descriptionText != null) {
-                        writer.startElement("description");
-                        StringBuffer sb = new StringBuffer();
-                        sb.append("<![CDATA[");
-                        sb.append(descriptionText);
-                        sb.append("]]>\n");
-                        writer.writeText(sb.toString());
-                        writer.closeElement();
-                    }
-                }
-
-                String tagName = makeTldTagName(
-                    GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                    GeneratorUtil.stripJavaxFacesPrefix(rendererType));
-
-                if (tagName == null) {
-                    throw new IllegalStateException(
-                        "Could not determine tag name");
-                }
-
-                writer.startElement("name");
-                writer.writeText(tagName);
-                writer.closeElement();
-
-
-                if (GeneratorUtil.makeTagClassName(
-                    GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                    GeneratorUtil.stripJavaxFacesPrefix(rendererType)) ==
-                    null) {
-                    throw new IllegalStateException(
-                        "Could not determine tag class name");
-                }
-
-                writer.startElement("tag-class");
-                writer.writeText(targetPackage + '.' +
-                    GeneratorUtil.makeTagClassName(GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                        GeneratorUtil.stripJavaxFacesPrefix(rendererType)));
-                writer.closeElement();
-               
-                writer.startElement("body-content");
-                writer.writeText(getBodyContent(tagName));
-                writer.closeElement();
-
-
-                // Generate tag attributes
-                //
-
-                // Component Properties first...
-                //
-                ComponentBean component = componentsByComponentFamily.get(componentFamily);
-
-                PropertyBean[] properties = component.getProperties();
-                PropertyBean property;
-
-                for (int i = 0, len = properties.length; i < len; i++) {
-                    if (null == (property = properties[i])) {
-                        continue;
-                    }
-                    if (!property.isTagAttribute()) {
-                        continue;
-                    }
-
-                    writer.startElement("attribute");
-
-                    description = property.getDescription("");
-                    if (description != null) {
-                        String descriptionText =
-                        description.getDescription().trim();
-
-                        if (descriptionText != null) {
-                            writer.startElement("description");
-                            StringBuffer sb = new StringBuffer();
-                            sb.append("<![CDATA[");
-                            sb.append(descriptionText);
-                            sb.append("]]>\n");
-                            writer.writeText(sb.toString());
-                            writer.closeElement();
-                        }
-                    }
-
-                    String propertyName = property.getPropertyName();
-
-                    writer.startElement("name");
-                    writer.writeText(propertyName);
-                    writer.closeElement();
-
-                    writer.startElement("required");
-                    writer.writeText(property.isRequired() ?
-                                     Boolean.TRUE.toString() :
-                                     Boolean.FALSE.toString());
-                    writer.closeElement();
-
-                    if (!"id".equals(propertyName)) {
-
-                        if (property.isMethodExpressionEnabled()) {
-                            writer.startElement("deferred-method");
-                            writer.startElement("method-signature");
-                            writer.writeText(
-                                property.getMethodSignature());
-                            writer.closeElement(2);
-                        } else if (property.isValueExpressionEnabled()) {
-                            // PENDING FIX ME
-                            String type = property.getPropertyClass();
-//                            String wrapperType = (String)
-//                                GeneratorUtil.convertToPrimitive(type);
-//                            if (wrapperType != null) {
-//                                type = wrapperType;
-//                            }
-                            writer.startElement("deferred-value");
-                            writer.startElement("type");
-                            writer.writeText(type);
-                            writer.closeElement(2);
-                        } else {
-                            writer.startElement("rtexprvalue");
-                            writer.writeText(getRtexprvalue(tagName, propertyName));
-                            writer.closeElement();
-                        }
-                    } else {
-                        writer.startElement("rtexprvalue");
-                        writer.writeText(getRtexprvalue(tagName, propertyName));
-                        writer.closeElement();
-                    }
-
-                    writer.closeElement(); // closes attribute element above
-
-                } // END property FOR loop
-
-
-                // Renderer Attributes Next...
-                //
-                AttributeBean[] attributes = renderer.getAttributes();
-                AttributeBean attribute;
-                for (int i = 0, len = attributes.length; i < len; i++) {
-                    if (null == (attribute = attributes[i])) {
-                        continue;
-                    }
-                    if (!attribute.isTagAttribute()) {
-                        continue;
-                    }
-                    if (attributeShouldBeExcluded(renderer,
-                        attribute.getAttributeName())) {
-                        continue;
-                    }
-
-                    writer.startElement("attribute");
-
-                    description = attribute.getDescription("");
-                    if (description != null) {
-                        String descriptionText =
-                        description.getDescription().trim();
-
-                        if (descriptionText != null) {
-                            writer.startElement("description");
-                            StringBuffer sb = new StringBuffer();
-                            sb.append("<![CDATA[");
-                            sb.append(descriptionText);
-                            sb.append("]]>\n");
-                            writer.writeText(sb.toString());
-                            writer.closeElement();
-                        }
-                    }
-
-                    String attributeName = attribute.getAttributeName();
-
-                    writer.startElement("name");
-                    writer.writeText(attributeName);
-                    writer.closeElement();
-
-                    writer.startElement("required");
-                    writer.writeText(attribute.isRequired() ?
-                                     Boolean.TRUE.toString() :
-                                     Boolean.FALSE.toString());
-                    writer.closeElement();
-
-                    if (!"id".equals(attributeName)) {
-                        // PENDING FIX ME
-                        String type = attribute.getAttributeClass();
-                        //String wrapperType = (String)
-                        //  GeneratorUtil.convertToPrimitive(type);
-                        //if (wrapperType != null) {
-                        //    type = wrapperType;
-                        //}
-                        writer.startElement("deferred-value");
-                        writer.startElement("type");
-                        writer.writeText(type);
-                        writer.closeElement(2);
-
-                    } else {
-                        writer.startElement("rtexprvalue");
-                        writer.writeText(getRtexprvalue(tagName, attributeName));
-                        writer.closeElement();
-                    }
-
-                    writer.closeElement(); // closes attribute element above
-
-                } // END attribute FOR loop
-
-                // SPECIAL: "Binding" needs to exist on every tag..
-                writer.startElement("attribute");
-
-                writer.startElement("description");
-                writer.writeText(
-                    "The ValueExpression linking this component to a property in a backing bean");
-                writer.closeElement();
-
-                writer.startElement("name");
-                writer.writeText("binding");
-                writer.closeElement();
-
-                writer.startElement("required");
-                writer.writeText("false");
-                writer.closeElement();
-
-                writer.startElement("deferred-value");
-                writer.startElement("type");
-                writer.writeText("javax.faces.component.UIComponent");
-                writer.closeElement(2);
-
-                // close the most recent attribute, and tag
-                // elements
-                writer.closeElement(2);
-
-            }
-        }
-
-        //Include any other tags defined in the optional tag definition file.
-        //These might be tags that were not picked up because they have no renderer
-        //- for example "column".
-        String tagDef = loadOptionalTags();
-        if (tagDef != null) {
-            writer.write(tagDef);
-        }
-
-    } // END writeTags   
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/JspTLDGenerator.java b/jsf-tools/src/main/java/com/sun/faces/generate/JspTLDGenerator.java
deleted file mode 100644
index fb2dd4d..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/JspTLDGenerator.java
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.nio.charset.Charset;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Stack;
-import java.util.Arrays;
-
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.RendererBean;
-
-/**
- * <p>Base class for JSP TLD generation.</p>
- */
-public abstract class JspTLDGenerator implements Generator {
-
-    // Defaults
-    private static final String DEFAULT_BODY_CONTENT = "JSP";
-    private static final String DEFAULT_RTEXPRVALUE = "false";
-
-    protected XMLWriter writer;
-    protected FacesConfigBean configBean;
-    protected PropertyManager propManager;
-
-    private String outputFile;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public JspTLDGenerator(PropertyManager propManager) {
-
-        this.propManager = propManager;
-        
-        File outputDir =
-            new File(System.getProperty("user.dir") + File.separatorChar +
-            propManager.getProperty(PropertyManager.BASE_OUTPUT_DIR) +
-            File.separatorChar + "conf" + File.separatorChar + "share");
-
-        if (!outputDir.exists()) {
-            outputDir.mkdirs();
-        }
-
-        outputFile = outputDir.toString() + File.separatorChar +
-            propManager.getProperty(PropertyManager.TAGLIB_FILE_NAME);
-
-    }
-
-
-    // -------------------------------------------------- Methods from Generator
-
-
-    public void generate(FacesConfigBean configBean) {
-
-        this.configBean = configBean;
-        try {
-            initWriter();
-            writeDocument();
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-
-    } // END generate
-
-
-    // ------------------------------------------------------- Protected Methods
-
-    protected void writeDocument() throws IOException {
-
-        writeProlog();
-        writeTldDescription();
-        writeValidators();
-        writeTags();
-        endDocument();
-
-    } // END writeDocument
-
-
-    protected void writeProlog() throws IOException {
-
-        writer.writeProlog();
-
-    } // END writeProlog
-
-    protected abstract void writeTldDescription() throws IOException;
-
-    protected abstract void writeTags() throws IOException;
-
-    protected void endDocument() throws IOException {
-
-        writer.closeAllElements();
-        writer.flush();
-        writer.close();
-
-    } // END endDocument
-
-    protected void writeValidators() throws IOException {
-
-        // this one is common to both 1.2 and 2.1
-        writer.writeComment(
-            "============== Tag Library Validator =============");
-        writer.startElement("validator");
-        writer.startElement("validator-class");
-        writer.writeText("com.sun.faces.taglib.html_basic.HtmlBasicValidator");
-        writer.closeElement(2);
-
-    } // END tldValidator
-
-
-    protected void initWriter() throws IOException {
-
-        writer = new XMLWriter(new FileOutputStream(outputFile));
-
-    } // END initWriter
-
-
-    // --------------------------------------------------------- Utility Methods
-
-
-    /**
-     * Build the tag name from componentFamily and rendererType.  The name
-     * will be "camel case".
-     *
-     * @param componentFamily the component family
-     * @param rendererType the renderer type
-     */
-    protected String makeTldTagName(String componentFamily,
-                                    String rendererType) {
-
-        if (componentFamily == null) {
-            return null;
-        }
-        if (rendererType.startsWith("resource.")) {
-            rendererType = rendererType.split("\\.")[1];
-        }
-        String tagName =
-            Character.toLowerCase(componentFamily.charAt(0)) +
-            componentFamily.substring(1);
-
-        if (rendererType == null || componentFamily.equals(rendererType)) {
-            return tagName;
-        } else {
-            return (tagName + rendererType);
-        }
-
-    } // END makeTldTagName
-
-
-    /**
-     * @return true if this attribute is in the set of attributes to be excluded
-     *         by this renderer.
-     */
-    protected boolean attributeShouldBeExcluded(RendererBean renderer,
-                                                String attribute) {
-        String excludedAttributes = renderer.getExcludeAttributes();
-        boolean skip = false;
-
-        if (excludedAttributes != null) {
-            skip = (attribute != null &&
-                excludedAttributes.indexOf(attribute) != -1);
-        }
-
-        return skip;
-
-    } // END attributeShouldBeExcluded
-
-
-    /**
-     * Return the tag body content information (if any) for a given tag.
-     */
-    protected String getBodyContent(String tagName) {
-        return DEFAULT_BODY_CONTENT;
-    }
-
-    /**
-     * Return the "rtexprvalue" element value for the tag attribute.
-     */
-    protected String getRtexprvalue(String tagName, String attributeName) {
-        return DEFAULT_RTEXPRVALUE;
-    }
-
-
-    /**
-     * <p>Load any additional tag definitions from the specified file.  This
-     * file might include tags such as "column" which have no renderer, but need
-     * to be generated into the TLD file.</p>
-     */
-    protected String loadOptionalTags() throws IOException {
-
-        String path =
-            propManager.getProperty(PropertyManager.TAGLIB_INCLUDE);
-
-        if (path != null) {
-            if (path.charAt(0) == '/' || path.charAt(1) == ':') {
-                // absolute path
-                if (path.charAt(1) == ':') {
-                    // win32
-                    path = path.replace('/', File.separatorChar);
-                }
-            } else {
-                path = System.getProperty("user.dir") + File.separatorChar +
-                    path;
-                path = path.replace('/', File.separatorChar);
-            }
-
-            StringBuffer sb = new StringBuffer();
-            BufferedReader reader =
-                new BufferedReader(new FileReader(path));
-            int ch;
-            while ((ch = reader.read()) >= 0) {
-                sb.append((char) ch);
-            }
-            reader.close();
-
-            return sb.toString();
-
-        }
-
-        return null;
-
-    } // END loadOptionalTags
-
-
-    // ---------------------------------------------------------- PrivateMethods
-
-
-
-
-
-
-    // ----------------------------------------------------------- Inner Classes
-
-
-    /**
-     * </p>A simple class to handle the writing of XML documents.</p>
-     */
-    protected static class XMLWriter extends OutputStreamWriter {
-
-        private static final String XML_PROLOG =
-            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n";
-
-        private static final String TAB = "    ";
-        private static final int NUM_COMMENT_CHARS = 10;
-
-        private static final String START_COMMENT = "\n<!-- ";
-        private static final String END_COMMENT = " -->\n\n";
-
-        private static final Charset UTF8 = Charset.forName("UTF-8");
-
-        private Stack<String> elementStack = new Stack<String>();
-
-
-
-        // -------------------------------------------------------- Constructors
-
-
-        XMLWriter(OutputStream stream) {
-
-            super(stream, UTF8);
-
-        } // END XMLWriter
-
-
-        // ----------------------------------------------------- Public Methods
-
-
-        public void writeProlog() throws IOException {
-
-            super.write(XML_PROLOG);
-
-        } // END writeProlog
-
-
-        public void writeText(String value) throws IOException {
-
-            if (value == null) {
-                // aid in detecting issues
-                value = "NULL VALUE";
-            }
-
-            StringBuffer sb = new StringBuffer();
-            String[] tokens = value.split("\n");
-            for (int i = 0; i < tokens.length; i++) {
-                String val = tokens[i].trim();
-                for (int ii = 0, size = elementStack.size(); ii < size; ii++) {
-                    sb.append(TAB);
-                }
-                sb.append(val).append('\n');
-            }
-
-            super.write(sb.toString());
-
-        } // END writeText
-
-
-        public void startElement(String name,
-                          Map<String,String> attributes) throws IOException {
-
-            if (name == null) {
-                throw new IllegalArgumentException("Null element name");
-            }
-
-            StringBuffer sb = new StringBuffer();
-            for (int i = 0, size = elementStack.size(); i < size; i++) {
-                sb.append(TAB);
-            }
-
-            elementStack.push(name);
-
-            String attributesString = null;
-            if (attributes != null) {
-                attributesString = createAttributesString(attributes);
-            }
-
-
-            sb.append('<').append(name);
-            if (attributesString != null) {
-                sb.append(attributesString);
-            }
-            sb.append(">\n");
-
-
-            super.write(sb.toString());
-
-        } // END startElement
-
-
-        public void startElement(String name) throws IOException {
-
-            startElement(name, null);
-
-        } // END startElement
-
-
-        public void closeElement(int elementCount) throws IOException {
-
-            if (elementStack.size() == 0) {
-                throw new IllegalStateException("Cannot close element - " +
-                    "no elements on stack");
-            }
-
-            StringBuffer sb = new StringBuffer();
-            for (int count = 0; count < elementCount; count++) {
-                String elementName = elementStack.pop();
-
-                for (int i = 0, size = elementStack.size(); i < size; i++) {
-                    sb.append(TAB);
-                }
-
-                sb.append("</").append(elementName).append(">\n");
-            }
-
-            super.write(sb.toString());
-
-        } // END closeElement
-
-
-        public void closeElement() throws IOException {
-
-            closeElement(1);
-
-        } // END closeElement
-
-
-        public void closeAllElements() throws IOException {
-
-            closeElement(elementStack.size());
-
-        } // END closeAllElements()
-
-
-        public void writeComment(String value) throws IOException {
-
-            StringBuffer sb =
-                new StringBuffer(value.length() + NUM_COMMENT_CHARS);
-            sb.append(START_COMMENT).append(value).append(END_COMMENT);
-
-            super.write(sb.toString());
-
-        } // END writeComment
-
-
-        // ----------------------------------------------------- Private Methods
-
-
-        private String createAttributesString(Map<String,String> attributes) {
-
-            if (attributes == null) {
-                throw new IllegalArgumentException("Null attributes map");
-            }
-
-            StringBuffer sb = new StringBuffer();
-	    for (Map.Entry entry : attributes.entrySet()) {
-                String name = (String)entry.getKey();
-                sb.append(' ').append(name).append('=');
-                sb.append('"').append((String)entry.getValue()).append('"');
-            }
-
-            return sb.toString();
-
-        } // END createAttributesString
-
-    } // END XMLWriter
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/JspToFaceletsTLD21Generator.java b/jsf-tools/src/main/java/com/sun/faces/generate/JspToFaceletsTLD21Generator.java
deleted file mode 100644
index b6e1c7c..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/JspToFaceletsTLD21Generator.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import com.sun.faces.config.beans.AttributeBean;
-import com.sun.faces.config.beans.ComponentBean;
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.PropertyBean;
-import com.sun.faces.config.beans.RendererBean;
-
-
-public class JspToFaceletsTLD21Generator extends JspTLDGenerator {
-
-    private static final String JSP_VERSION = "2.1";
-    private static final String JSF_TLIB_VERSION = "1.2";
-
-    /**
-     * <p>Schema related attributes.</p>
-     */
-    private static Map<String,String> TAG_LIB_SCHEMA_ATTRIBUTES = new HashMap<String, String>();
-    static {
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("xmlns",
-            "http://java.sun.com/xml/ns/javaee");
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("xmlns:xsi",
-            "http://www.w3.org/2001/XMLSchema-instance");
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("xsi:schemaLocation",
-            "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd");
-        TAG_LIB_SCHEMA_ATTRIBUTES.put("version", JSP_VERSION);
-    }
-
-    private static Map<String,List<String>> COMPONENT_PROPERTY_EXCLUDES = new HashMap<String, List<String>>();
-    static {
-        COMPONENT_PROPERTY_EXCLUDES.put("body", 
-            Arrays.asList("converter","id","rendered","value"));
-        COMPONENT_PROPERTY_EXCLUDES.put("button", 
-	    Arrays.asList("converter","fragment"));
-        COMPONENT_PROPERTY_EXCLUDES.put("head", 
-            Arrays.asList("converter","id","rendered","value"));
-        COMPONENT_PROPERTY_EXCLUDES.put("link", 
-	    Arrays.asList("converter","fragment"));
-    }
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public JspToFaceletsTLD21Generator(PropertyManager propManager) {
-
-        super(propManager);
-
-    } // END JspTLD21Generator
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public static void main(String[] args) {
-
-        PropertyManager manager = PropertyManager.newInstance(args[0]);
-        try {
-            Generator generator = new JspToFaceletsTLD21Generator(manager);
-            generator.generate(GeneratorUtil.getConfigBean(args[1]));
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    } // END main
-
-    // ------------------------------------------------------- Protected Methods
-
-    protected String getRtexprvalue(String tagName, String attributeName) {
-
-        if ("id".equals(attributeName)) {
-            return "true";
-        } else {
-            return super.getRtexprvalue(tagName, attributeName);
-        }
-
-    } // END getRtexprvalue
-
-
-        /**
-     * The description element for this TLD.
-     */
-    protected void writeTldDescription() throws IOException {
-
-        writer.startElement("taglib", TAG_LIB_SCHEMA_ATTRIBUTES);
-        writer.writeComment(
-            "============== Tag Library Description Elements =============");
-
-        writer.startElement("description");
-        writer.writeText(
-            propManager.getProperty(PropertyManager.TAGLIB_DESCRIPTION));
-        writer.closeElement();
-
-        writer.startElement("tlib-version");
-        writer.writeText(JSF_TLIB_VERSION);
-        writer.closeElement();
-
-        writer.startElement("short-name");
-        writer.writeText(
-            propManager.getProperty(PropertyManager.TAGLIB_SHORT_NAME));
-        writer.closeElement();
-
-        writer.startElement("uri");
-        writer.writeText(propManager.getProperty(PropertyManager.TAGLIB_URI));
-        writer.closeElement();
-
-    } // end tldDescription
-
-
-    /**
-     * The tags for this TLD.
-     */
-    protected void writeTags() throws IOException {
-        writer.writeComment(
-            "===================== HTML 4.0 basic tags ======================");
-
-        Map<String,ComponentBean> componentsByComponentFamily =
-            GeneratorUtil.getComponentFamilyComponentMap(configBean);
-        Map<String, ArrayList<RendererBean>> renderersByComponentFamily =
-            GeneratorUtil.getComponentFamilyRendererMap(configBean,
-                propManager.getProperty(PropertyManager.RENDERKIT_ID));
-        String targetPackage =
-            propManager.getProperty(PropertyManager.TARGET_PACKAGE);
-
-	for (Map.Entry entry : renderersByComponentFamily.entrySet()) {
-
-            String componentFamily = (String)entry.getKey();
-            List<RendererBean> renderers = (List<RendererBean>) entry.getValue();
-            for (Iterator<RendererBean> rendererIter = renderers.iterator();
-                 rendererIter.hasNext();) {
-
-                RendererBean renderer = rendererIter.next();
-               
-                if (renderer.isIgnoreAll()) {
-                    continue;
-                }
-                String rendererType = renderer.getRendererType();
-                writer.startElement("tag");
-
-                DescriptionBean description = renderer.getDescription("");
-                if (description != null) {
-                    String descriptionText = description.getDescription().trim();
-
-                    if (descriptionText != null) {
-                        writer.startElement("description");
-                        StringBuffer sb = new StringBuffer();
-                        sb.append("<![CDATA[");
-                        sb.append(descriptionText);
-                        sb.append("]]>\n");
-                        writer.writeText(sb.toString());
-                        writer.closeElement();
-                    }
-                }
-
-                String tagName = renderer.getTagName();
-
-                if (tagName == null) {
-                    tagName = makeTldTagName(
-                        GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                        GeneratorUtil.stripJavaxFacesPrefix(rendererType));
-                }
-
-                if (tagName == null) {
-                    throw new IllegalStateException(
-                        "Could not determine tag name");
-                }
-
-                writer.startElement("name");
-                writer.writeText(tagName);
-                writer.closeElement();
-
-
-                if (GeneratorUtil.makeTagClassName(
-                    GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                    GeneratorUtil.stripJavaxFacesPrefix(rendererType)) ==
-                    null) {
-                    throw new IllegalStateException(
-                        "Could not determine tag class name");
-                }
-
-                writer.startElement("tag-class");
-                writer.writeText(targetPackage + '.' +
-                    GeneratorUtil.makeTagClassName(GeneratorUtil.stripJavaxFacesPrefix(componentFamily),
-                        GeneratorUtil.stripJavaxFacesPrefix(rendererType)));
-                writer.closeElement();
-
-                writer.startElement("body-content");
-                writer.writeText(getBodyContent(tagName));
-                writer.closeElement();
-
-                List excludeComponentProperties = COMPONENT_PROPERTY_EXCLUDES.get(tagName);
-
-                // Generate tag attributes
-                //
-
-                // Component Properties first...
-                //
-                ComponentBean component = componentsByComponentFamily.get(componentFamily);
-
-                PropertyBean[] properties = component.getProperties();
-                PropertyBean property;
-                    for (int i = 0, len = properties.length; i < len; i++) {
-                        if (null == (property = properties[i])) {
-                            continue;
-                        }
-                        if (!property.isTagAttribute()) {
-                            continue;
-                        }
-
-                        if (null != excludeComponentProperties && excludeComponentProperties.contains(
-                            property.getPropertyName())) {
-                            continue;
-                        }
-
-                        writer.startElement("attribute");
-
-                        description = property.getDescription("");
-                        if (description != null) {
-                            String descriptionText =
-                                  description.getDescription().trim();
-
-                            if (descriptionText != null) {
-                                writer.startElement("description");
-                                StringBuffer sb = new StringBuffer();
-                                sb.append("<![CDATA[");
-                                sb.append(descriptionText);
-                                sb.append("]]>\n");
-                                writer.writeText(sb.toString());
-                                writer.closeElement();
-                            }
-                        }
-
-                        String propertyName = property.getPropertyName();
-
-                        writer.startElement("name");
-                        writer.writeText(propertyName);
-                        writer.closeElement();
-
-                        writer.startElement("required");
-                        writer.writeText(property.isRequired() ?
-                                         Boolean.TRUE.toString() :
-                                         Boolean.FALSE.toString());
-                        writer.closeElement();
-
-                        if (!"id".equals(propertyName)) {
-
-                            if (property.isMethodExpressionEnabled()) {
-                                writer.startElement("deferred-method");
-                                writer.startElement("method-signature");
-                                writer.writeText(
-                                      property.getMethodSignature());
-                                writer.closeElement(2);
-                            } else if (property.isValueExpressionEnabled()) {
-                                // PENDING FIX ME
-                                String type = property.getPropertyClass();
-//                            String wrapperType = (String)
-//                                GeneratorUtil.convertToPrimitive(type);
-//                            if (wrapperType != null) {
-//                                type = wrapperType;
-//                            }
-                                writer.startElement("deferred-value");
-                                writer.startElement("type");
-                                writer.writeText(type);
-                                writer.closeElement(2);
-                            } else {
-                                writer.startElement("rtexprvalue");
-                                writer.writeText(getRtexprvalue(tagName,
-                                                                propertyName));
-                                writer.closeElement();
-                            }
-                        } else {
-                            writer.startElement("rtexprvalue");
-                            writer.writeText(getRtexprvalue(tagName,
-                                                            propertyName));
-                            writer.closeElement();
-                        }
-
-                        writer.closeElement(); // closes attribute element above
-
-                    } // END property FOR loop
-
-                // Renderer Attributes Next...
-                //
-                AttributeBean[] attributes = renderer.getAttributes();
-                AttributeBean attribute;
-                for (int i = 0, len = attributes.length; i < len; i++) {
-                    if (null == (attribute = attributes[i])) {
-                        continue;
-                    }
-                    if (!attribute.isTagAttribute()) {
-                        continue;
-                    }
-                    if (attributeShouldBeExcluded(renderer,
-                        attribute.getAttributeName())) {
-                        continue;
-                    }
-
-                    writer.startElement("attribute");
-
-                    description = attribute.getDescription("");
-                    if (description != null) {
-                        String descriptionText =
-                        description.getDescription().trim();
-
-                        if (descriptionText != null) {
-                            writer.startElement("description");
-                            StringBuffer sb = new StringBuffer();
-                            sb.append("<![CDATA[");
-                            sb.append(descriptionText);
-                            sb.append("]]>\n");
-                            writer.writeText(sb.toString());
-                            writer.closeElement();
-                        }
-                    }
-
-                    String attributeName = attribute.getAttributeName();
-
-                    writer.startElement("name");
-                    writer.writeText(attributeName);
-                    writer.closeElement();
-
-                    writer.startElement("required");
-                    writer.writeText(attribute.isRequired() ?
-                                     Boolean.TRUE.toString() :
-                                     Boolean.FALSE.toString());
-                    writer.closeElement();
-
-                    if (!"id".equals(attributeName)) {
-                        // PENDING FIX ME
-                        String type = attribute.getAttributeClass();
-                        //String wrapperType = (String)
-                        //  GeneratorUtil.convertToPrimitive(type);
-                        //if (wrapperType != null) {
-                        //    type = wrapperType;
-                        //}
-                        writer.startElement("deferred-value");
-                        writer.startElement("type");
-                        writer.writeText(type);
-                        writer.closeElement(2);
-
-                    } else {
-                        writer.startElement("rtexprvalue");
-                        writer.writeText(getRtexprvalue(tagName, attributeName));
-                        writer.closeElement();
-                    }
-
-                    writer.closeElement(); // closes attribute element above
-
-                } // END attribute FOR loop
-
-                // SPECIAL: "Binding" needs to exist on every tag..
-                writer.startElement("attribute");
-
-                writer.startElement("description");
-                writer.writeText(
-                    "The ValueExpression linking this component to a property in a backing bean");
-                writer.closeElement();
-
-                writer.startElement("name");
-                writer.writeText("binding");
-                writer.closeElement();
-
-                writer.startElement("required");
-                writer.writeText("false");
-                writer.closeElement();
-
-                writer.startElement("deferred-value");
-                writer.startElement("type");
-                writer.writeText("javax.faces.component.UIComponent");
-                writer.closeElement(2);
-
-                // close the most recent attribute, and tag
-                // elements
-                writer.closeElement(2);
-
-            }
-        }
-
-        //Include any other tags defined in the optional tag definition file.
-        //These might be tags that were not picked up because they have no renderer
-        //- for example "column".
-        String tagDef = loadOptionalTags();
-        if (tagDef != null) {
-            writer.write(tagDef);
-        }
-
-    } // END writeTags
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/PropertyManager.java b/jsf-tools/src/main/java/com/sun/faces/generate/PropertyManager.java
deleted file mode 100644
index 6d4b17f..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/PropertyManager.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintStream;
-import java.util.Arrays;
-import java.util.Properties;
-
-/**
- * <p>This class manages properties common to <code>jsf-tools</code>
- * generators.</p>
- */
-public class PropertyManager {
-
-    /**
-     * <p>The minimum required version of JSP.</p>
-     */
-    public static final String JSP_VERSION_PROPERTY = "jsp.version";
-
-    /**
-     * <p>The short-name of the generated tag library.</p>
-     */
-    public static final String TAGLIB_SHORT_NAME = "taglib.shortname";
-
-    /**
-     * <p>The URI by which the tag library will be known by.</p>
-     */
-    public static final String TAGLIB_URI = "taglib.uri";
-
-    /**
-     * <p>The description of the tag library (may be <code>null</code>).</p>
-     */
-    public static final String TAGLIB_DESCRIPTION = "taglib.description";    
-
-    /**
-     * <p>The file name of the generated tag library descriptor.</p>
-     */
-    public static final String TAGLIB_FILE_NAME = "taglib.file.name";
-
-    /**
-     * <p>The filename of a file to be included as part of the tag
-     * library generation process (may be <code>null</code>).</p>
-     */
-    public static final String TAGLIB_INCLUDE = "taglib.include";
-
-    /**
-     * <p>A copyright to be included at the beginning of any generated file
-     * (may be <code>null</code>).</p>
-     */
-    public static final String COPYRIGHT = "copyright";
-
-    /**
-     * <p>The ID of the <code>RenderKit</code> for which the generation is
-     * being performed.</p>
-     */
-    public static final String RENDERKIT_ID = "renderkit.id";
-
-    /**
-     * <p>The target package for any generated code.</p>
-     */
-    public static final String TARGET_PACKAGE = "target.package";
-
-    /**
-     * <p>The base directory in which all generated files are written to.</p>
-     */
-    public static final String BASE_OUTPUT_DIR = "base.output.dir";
-
-
-    /**
-     * <p>Known properties.</p>
-     */
-    private static final String[] VALID_PROPS = {
-        JSP_VERSION_PROPERTY,
-        TAGLIB_URI,
-        TAGLIB_DESCRIPTION,
-        TAGLIB_SHORT_NAME,
-        COPYRIGHT,
-        RENDERKIT_ID,
-        TARGET_PACKAGE,
-        TAGLIB_FILE_NAME,
-        TAGLIB_INCLUDE,
-        BASE_OUTPUT_DIR,
-    };
-
-    /**
-     * <p>Properties which may have no value.</p>
-     */
-    private static final String[] NULLABLE_PROPS = {
-        COPYRIGHT,
-        TAGLIB_DESCRIPTION,
-        TAGLIB_INCLUDE,
-    };
-
-    // Sort the arrays so we can use Arrays.binarySearch()
-    static {
-        Arrays.sort(VALID_PROPS);
-        Arrays.sort(NULLABLE_PROPS);
-    }
-
-
-    /**
-     * <p>The <code>Properties</code> object which backs this class.</p>
-     */
-    private Properties props;
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    /**
-     * <p>Constructs a new <code>PropertyManager</code> instance.</p>
-     * @param props - properties
-     */
-    private PropertyManager(Properties props) {
-
-        this.props = props;
-
-    } // END PropertyManager
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    /**
-     * <p>Obtain a new <code>PropertyManager</code> instance backed by the
-     * properies contained in the specified file.</p>
-     * @param propertyFile - property file
-     * @return a configured <code>PropertyManager</code> instance
-     */
-    public static PropertyManager newInstance(String propertyFile) {
-
-        Properties props = new Properties();
-        try {
-            props.load(
-                new BufferedInputStream(
-                    new FileInputStream(new File(propertyFile))));
-
-        } catch (Exception e) {
-            throw new IllegalStateException(e.toString());
-        }
-
-        return new PropertyManager(props);
-
-    } // END newInstance
-
-
-    /**
-     * <p>Return the property specified by <code>propertyName</code>.</p>
-     * @param propertyName - the property name
-     * @return the value of the property or <code>null</code> if no value
-     *  is defined
-     *
-     * @throws IllegalArgumentException of <code>propertyName</code> isn't
-     *  a known property
-     * @throws IllegalStateException if <code>propertyName</code> illegally
-     *  has no value
-     */
-    public String getProperty(String propertyName) {
-
-        if (Arrays.binarySearch(VALID_PROPS, propertyName) < 0) {
-            throw new IllegalArgumentException("Unknown Property '" +
-                propertyName + '\'');
-        }
-
-        String propValue = props.getProperty(propertyName);
-
-        if (propValue == null) {
-            if (Arrays.binarySearch(NULLABLE_PROPS, propertyName) >= 0) {
-                propValue = "";
-            } else {
-                throw new IllegalStateException("Property '" + propertyName +
-                    "' must be defined.");
-            }
-        }
-
-        return propValue.trim();
-
-    } // END getProperty
-
-
-    public String toString() {
-
-        ByteArrayOutputStream propsOutput = new ByteArrayOutputStream();
-        props.list(new PrintStream(propsOutput));
-        return propsOutput.toString();
-
-    } // END toString
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/RenderKitSpecificationGenerator.java b/jsf-tools/src/main/java/com/sun/faces/generate/RenderKitSpecificationGenerator.java
deleted file mode 100644
index b6e0a3c..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/generate/RenderKitSpecificationGenerator.java
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.generate;
-
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-
-import com.sun.faces.config.beans.AttributeBean;
-import com.sun.faces.config.beans.DescriptionBean;
-import com.sun.faces.config.beans.FacesConfigBean;
-import com.sun.faces.config.beans.RenderKitBean;
-import com.sun.faces.config.beans.RendererBean;
-import java.util.Locale;
-
-
-/**
- * <p>Generate javadoc style documenation about the render-kits defined in a
- * faces-config.xml file.</p>
- * <p/>
- */
-
-public class RenderKitSpecificationGenerator implements Generator {
-
-    public static String DOCTYPE =
-        "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\"http://www.w3.org/TR/REC-html40/loose.dtd\">";
-
-    
-    // -------------------------------------------------------- Static Variables
-
-
-    // The directory into which the HTML will be generated
-    private File baseDirectory;
-
-    // The directory into which the individual Renderer HTML will be generated
-    private File renderKitDirectory;
-
-    private String renderKitId;
-
-    private FacesConfigBean configBean;
-    
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    public RenderKitSpecificationGenerator(PropertyManager propManager) {
-
-        this.renderKitId =
-            propManager.getProperty(PropertyManager.RENDERKIT_ID);
-
-        baseDirectory =
-            new File(System.getProperty("user.dir") +
-            File.separatorChar +
-            propManager.getProperty(PropertyManager.BASE_OUTPUT_DIR) +
-            File.separatorChar + "facesdoc");
-
-        if (!baseDirectory.exists()) {
-            baseDirectory.mkdirs();
-        }
-
-        renderKitDirectory = new File(baseDirectory, renderKitId);        
-
-        if (!renderKitDirectory.exists()) {
-            renderKitDirectory.mkdirs();
-        }
-
-
-
-    } // END RenderKitSpecificationGenerator
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public void generate(FacesConfigBean configBean) {
-
-        this.configBean = configBean;
-
-        try {
-            // copy the static files to the output area
-            copyResourceToFile("com/sun/faces/generate/facesdoc/index.html",
-                new File(baseDirectory, "index.html"));
-            copyResourceToFile("com/sun/faces/generate/facesdoc/stylesheet.css",
-                new File(baseDirectory, "stylesheet.css"));
-
-            generateAllRenderersFrame();
-            generateRenderKitSummary();
-            generateRenderersDocs();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-    } // END generate
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    private static String getFirstSentance(String para) throws Exception {
-        int dot = para.indexOf('.');
-        return para.substring(0, dot + 1);
-    }
-
-
-    private static void copyResourceToFile(String resourceName, File file)
-        throws Exception {
-
-        byte[] bytes = new byte[1024];
-
-        FileOutputStream fos = new FileOutputStream(file);
-        URL url = getCurrentLoader(fos).getResource(resourceName);
-        URLConnection conn = url.openConnection();
-        conn.setUseCaches(false);
-        BufferedInputStream bis =
-            new BufferedInputStream(conn.getInputStream());
-        for (int len = bis.read(bytes, 0, 1024); len != -1;
-             len = bis.read(bytes, 0, 1024)) {
-            fos.write(bytes, 0, len);
-        }
-        fos.close();
-        bis.close();
-    }
-
-
-    private static void writeStringToFile(String toWrite,
-                                         File file) throws Exception {
-
-        FileOutputStream fos = new FileOutputStream(file);
-        byte[] bytes = toWrite.getBytes();
-        fos.write(bytes);
-        fos.close();
-    }
-
-
-    private static void appendResourceToStringBuffer(String resourceName,
-                                                     StringBuffer sb)
-    throws Exception {
-
-        char[] chars = new char[1024];
-
-        URL url = getCurrentLoader(sb).getResource(resourceName);
-        URLConnection conn = url.openConnection();
-        conn.setUseCaches(false);
-        InputStreamReader isr = new InputStreamReader(conn.getInputStream());
-        for (int len = isr.read(chars, 0, 1024); len != -1;
-             len = isr.read(chars, 0, 1024)) {
-            sb.append(chars, 0, len);
-        }
-        isr.close();
-    }
-
-
-    private void generateAllRenderersFrame() throws Exception {
-
-        // generate the allrenderers-frame.html
-        StringBuffer sb = new StringBuffer(2048);
-        appendResourceToStringBuffer(
-            "com/sun/faces/generate/facesdoc/allrenderers-frame.top",
-            sb);
-        sb.append("<FONT size=\"+1\" CLASS=\"FrameHeadingFont\">\n");
-        sb.append("<B>" + renderKitId + " RenderKit</B></FONT>\n");
-        sb.append("<BR>\n\n");
-        sb.append("<DL CLASS=\"FrameItemFont\">\n\n");
-
-        Map<String, ArrayList<RendererBean>> renderersByComponentFamily =
-            GeneratorUtil.getComponentFamilyRendererMap(configBean, renderKitId);
-
-	for (Map.Entry entry : renderersByComponentFamily.entrySet()) {
-
-            String curFamily = (String)entry.getKey();
-            sb.append("  <DT>" + curFamily + "</DT>\n");
-            List<RendererBean> renderers = (List<RendererBean>)entry.getValue();
-
-            for (Iterator<RendererBean> rendererIter = renderers.iterator();
-                 rendererIter.hasNext(); ) {
-
-                RendererBean renderer = rendererIter.next();
-                String curType = renderer.getRendererType();
-                DescriptionBean[] descriptions = renderer.getDescriptions();
-                String 
-                        enclosingDiv = null,
-                        enclosingSpan = null;
-                if (null != descriptions) {
-                    // Get the current operating locale
-                    String localeStr = Locale.getDefault().getCountry().toLowerCase();
-                    // iterate over the descriptions and try to find one that matches 
-                    // the country of the current locale
-                    for (DescriptionBean cur : descriptions) {
-                        if (null != cur.getLang() && 
-                            (-1 != localeStr.indexOf(cur.getLang().toLowerCase()))) {
-                            
-                            if (null == (enclosingDiv = 
-                                   GeneratorUtil.getFirstDivFromString(renderer.getDescription(cur.getLang()).getDescription()))) {
-                                enclosingSpan = GeneratorUtil.getFirstSpanFromString(renderer.getDescription(cur.getLang()).getDescription());
-                            }
-                            
-                            break;
-                        }
-                    }
-                    
-                }
-                if (null != enclosingDiv || null != enclosingSpan) {
-                    sb.append("  <DD>" + 
-                         (null != enclosingDiv ? enclosingDiv : enclosingSpan));
-                    sb.append("<A HREF=\"" + renderKitId + "/" +
-                    curFamily + curType +
-                    ".html\" TARGET=\"rendererFrame\">" + curType +
-                            "</A>");
-                    sb.append((null != enclosingDiv ? "</div>" : "</span>") + 
-                            "</DD>\n");
-                }
-                else {
-                    sb.append("  <DD><A HREF=\"" + renderKitId + "/" +
-                    curFamily + curType +
-                    ".html\" TARGET=\"rendererFrame\">" + curType +
-                            "</A></DD>\n");
-                }
-            }
-        }
-
-        sb.append("</dl>\n");
-
-        appendResourceToStringBuffer(
-            "com/sun/faces/generate/facesdoc/allrenderers-frame.bottom",
-            sb);
-        writeStringToFile(sb.toString(),
-            new File(baseDirectory,
-                "allrenderers-frame.html"));
-    }
-
-
-    private void generateRenderKitSummary() throws Exception {
-
-        // generate the renderkit-summary.html
-        StringBuffer sb = new StringBuffer(2048);
-        appendResourceToStringBuffer(
-            "com/sun/faces/generate/facesdoc/renderkit-summary.top",
-            sb);
-        sb.append("<H2>" + renderKitId + " RenderKit</H2>\n");
-        sb.append("<BR>\n\n");
-
-        RenderKitBean renderKit = configBean.getRenderKit(renderKitId);
-        if (renderKit == null) {
-            RenderKitBean[] kits = configBean.getRenderKits();
-            if (kits == null) {
-                throw new IllegalStateException("no RenderKits");
-            }
-
-            renderKit = kits[0];
-            if (renderKit == null) {
-                throw new IllegalStateException("no RenderKits");
-            }
-        }
-
-        DescriptionBean descBean = renderKit.getDescription("");
-        String description = (null == descBean) ?
-                             "" : descBean.getDescription();
-        sb.append("<P>" + description + "</P>\n");
-        sb.append("<P />");
-        sb.append(
-            "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\" WIDTH=\"100%\">");
-        sb.append("<TR BGCOLOR=\"#CCCCFF\" CLASS=\"TableHeadingColor\">\n");
-        sb.append("<TD COLSPAN=\"3\"><FONT SIZE=\"+2\">\n");
-        sb.append("<B>Renderer Summary</B></FONT></TD>\n");
-        sb.append("\n");
-        sb.append("<TR>\n");
-        sb.append("<TH>component-family</TH>\n");
-        sb.append("<TH>renderer-type</TH>\n");
-        sb.append("<TH>description</TH>\n");
-        sb.append("</TR>\n");
-
-        Map<String,ArrayList<RendererBean>> renderersByComponentFamily =
-            GeneratorUtil.getComponentFamilyRendererMap(configBean, renderKitId);
-
-	for (Map.Entry entry : renderersByComponentFamily.entrySet()) {
-            String curFamily = (String)entry.getKey();
-            List<RendererBean> renderers = (List<RendererBean>) entry.getValue();
-
-            sb.append("  <TR>\n");
-            sb.append("    <TD rowspan=\"" + renderers.size() + "\">" +
-                curFamily + "</TD>\n");
-            for (Iterator<RendererBean> rendererIter = renderers.iterator();
-                 rendererIter.hasNext(); ) {
-
-                RendererBean renderer = rendererIter.next();
-                String curType = renderer.getRendererType();
-                sb.append("    <TD><A HREF=\"" + curFamily + curType +
-                    ".html\" TARGET=\"rendererFrame\">" + curType +
-                    "</A></TD>\n");
-                descBean = renderer.getDescription("");
-                description = (null == descBean) ?
-                              "" : descBean.getDescription();
-                sb.append("    <TD>" + getFirstSentance(description) +
-                    "</TD>");
-                if (rendererIter.hasNext()) {
-                    sb.append("  </TR>\n");
-                    sb.append("  <TR>\n");
-                }
-            }
-            sb.append("  </TR>\n");
-        }
-
-        sb.append("</TABLE>\n\n");
-
-        appendResourceToStringBuffer(
-            "com/sun/faces/generate/facesdoc/renderkit-summary.bottom",
-            sb);
-        writeStringToFile(sb.toString(),
-            new File(renderKitDirectory,
-                "renderkit-summary.html"));
-    }
-
-
-    private void generateRenderersDocs() throws Exception {
-        StringBuffer sb;
-        RenderKitBean renderKit;
-        DescriptionBean descBean;
-
-        String description;
-        String rendererType;
-        String componentFamily;
-        String defaultValue;
-        String title;
-
-        // generate the docus for each renderer
-
-        if (null == (renderKit = configBean.getRenderKit(renderKitId))) {
-            RenderKitBean[] kits = configBean.getRenderKits();
-            if (kits == null) {
-                throw new IllegalStateException("no RenderKits");
-            }
-
-            renderKit = kits[0];
-            if (renderKit == null) {
-                throw new IllegalStateException("no RenderKits");
-            }
-        }
-        RendererBean[] renderers = renderKit.getRenderers();
-        AttributeBean[] attributes;
-        sb = new StringBuffer(2048);
-
-        for (int i = 0, len = renderers.length; i < len; i++) {
-            if (null == renderers[i]) {
-                throw new IllegalStateException("null Renderer at index: " + i);
-            }
-            attributes = renderers[i].getAttributes();
-
-            sb.append(DOCTYPE + "\n");
-            sb.append("<html>\n");
-            sb.append("<head>\n");
-            // PENDING timestamp
-            sb.append("<title>\n");
-            title = "<font size=\"-1\">component-family:</font> " +
-                (componentFamily = renderers[i].getComponentFamily()) +
-                " <font size=\"-1\">renderer-type:</font> " +
-                (rendererType = renderers[i].getRendererType());
-            sb.append(title + "\n");
-            sb.append("</title>\n");
-            // PENDING META tag
-            sb.append(
-                "<link REL =\"stylesheet\" TYPE=\"text/css\" HREF=\"../stylesheet.css\" TITLE=\"Style\">\n");
-            sb.append("</head>\n");
-            sb.append("<script>\n");
-            sb.append("function asd()\n");
-            sb.append("{\n");
-            sb.append("  parent.document.title=" + title + "\n");
-            sb.append("}\n");
-            sb.append("</SCRIPT>\n");
-            sb.append("<body BGCOLOR=\"white\" onload=\"asd();\">\n");
-            sb.append("\n");
-            sb.append("<H2><font size=\"-1\">" + renderKitId +
-                " render-kit</font>\n");
-            sb.append("<br />\n");
-            sb.append(title + "\n");
-            sb.append("</H2>\n");
-            sb.append("<HR />\n");
-            descBean = renderers[i].getDescription("");
-            description = (null == descBean) ? "" : descBean.getDescription();
-            sb.append("<P>" + description + "</P>\n");
-            // render our renders children status
-
-            if (renderers[i].isRendersChildren()) {
-                sb.append(
-                    "<P>This renderer is responsible for rendering its children.</P>");
-            } else {
-                sb.append(
-                    "<P>This renderer is not responsible for rendering its children.</P>");
-            }
-
-            // if we have attributes
-            if ((null == attributes) || (0 < attributes.length)) {
-                sb.append("<HR />\n");
-                sb.append("<a NAME=\"attributes\"><!-- --></a>\n");
-                sb.append("\n");
-                sb.append("<h3>Note:</h3>\n");
-                sb.append("\n");
-                sb.append(
-                    "<p>Attributes with a <code>pass-through</code> value of\n");
-                sb.append(
-                    "<code>true</code> are not interpreted by the renderer and are passed\n");
-                sb.append(
-                    "straight through to the rendered markup, without checking for validity.  Attributes with a\n");
-                sb.append(
-                    "<code>pass-through</code> value of <code>false</code> are interpreted\n");
-                sb.append(
-                    "by the renderer, and may or may not be checked for validity by the renderer.</p>\n");
-                sb.append("\n");
-                sb.append(
-                    "<table BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\" WIDTH=\"100%\">\n");
-                sb.append(
-                    "<tr BGCOLOR=\"#CCCCFF\" CLASS=\"TableHeadingColor\">\n");
-                sb.append("<td COLSPAN=\"5\"><font SIZE=\"+2\">\n");
-                sb.append("<b>Attributes</b></font></td>\n");
-                sb.append("</tr>\n");
-                sb.append(
-                    "<tr BGCOLOR=\"#CCCCFF\" CLASS=\"TableHeadingColor\">\n");
-                sb.append("<th><b>attribute-name</b></th>\n");
-                sb.append("<th><b>pass-through</b></th>\n");
-                sb.append("<th><b>attribute-class</b></th>\n");
-                sb.append("<th><b>description</b></th>\n");
-                sb.append("<th><b>default-value</b></th>\n");
-                sb.append("</tr>\n");
-                sb.append("	    \n");
-                // output each attribute
-		if (attributes != null) {
-                    for (int j = 0, attrLen = attributes.length; j < attrLen; j++) {
-                        if (attributes[j].isAttributeIgnoredForRenderer()) {
-                            continue;
-                        }
-                        sb.append(
-                            "<tr BGCOLOR=\"white\" CLASS=\"TableRowColor\">\n");
-                        sb.append(
-                            "<td ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><code>\n");
-                        sb.append(
-                            " " + attributes[j].getAttributeName() + "\n");
-                        sb.append("</td>\n");
-                        sb.append("<td ALIGN=\"right\" VALIGN=\"top\">" +
-                            attributes[j].isPassThrough() + "</td>\n");
-                        sb.append("<td><code>" + attributes[j].getAttributeClass() +
-                            "</code></td>\n");
-                        descBean = attributes[j].getDescription("");
-                        description = (null == descBean) ?
-                                      "" : descBean.getDescription();
-                        sb.append("<td>" + description + "</td>\n");
-                        if (null ==
-                            (defaultValue = attributes[j].getDefaultValue())) {
-                            defaultValue = "undefined";
-                        }
-                        sb.append("<td>" + defaultValue + "<td>\n");
-                        sb.append("</tr>\n");
-                    }
-		}
-                sb.append("</table>\n");
-            } else {
-                sb.append("<p>This renderer-type has no attributes</p>\n");
-            }
-            sb.append("<hr>\n");
-            sb.append(
-                "Copyright (c) 2003-2004 Sun Microsystems, Inc. All Rights Reserved.\n");
-            sb.append("</body>\n");
-            sb.append("</html>\n");
-            writeStringToFile(sb.toString(),
-                new File(renderKitDirectory,
-                    componentFamily + rendererType +
-                ".html"));
-            sb.delete(0, sb.length());
-        }
-    }
-
-
-    private static ClassLoader getCurrentLoader(Object fallbackClass) {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return loader;
-    }
-
-    // ------------------------------------------------------------- Main Method
-
-
-    public static void main(String[] args) throws Exception {
-        PropertyManager propManager = PropertyManager.newInstance(args[0]);
-
-        Generator generator =
-            new RenderKitSpecificationGenerator(propManager);
-
-        generator.generate(GeneratorUtil.getConfigBean(args[1]));
-
-    }
-
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/tools/GlassfishUpdater.java b/jsf-tools/src/main/java/com/sun/faces/tools/GlassfishUpdater.java
deleted file mode 100644
index fd7106d..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/tools/GlassfishUpdater.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.tools;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-import java.util.jar.JarOutputStream;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * This updater supports GFv1, v2, and v3.
- * @author edburns
- */
-public class GlassfishUpdater {
-
-    private enum Version {
-        GFv1orv2,
-        GFv3
-    }
-
-    private static final String ASADMIN_NAME = "asadmin";
-    private static final String BACKUP_SUFFIX = "jsfbak";
-
-    /** Creates a new instance of GlassfishUpdater */
-    protected GlassfishUpdater() {
-    }
-
-    protected static File libDir = null;
-    protected static File modulesDir = null;
-    protected static Version version = null;
-
-    public static void main(String args[]) throws IOException {
-        if (0 == args.length) {
-            printUsage();
-            return;
-
-        }
-        File testFile = null,
-             gfInstallDir = new File(args[0]);
-
-        // Have we been given a directory?
-        if (!gfInstallDir.isDirectory()) {
-            printUsage();
-            return;
-        }
-        // Is it a glassfish install directory?
-        testFile = new File(gfInstallDir,"bin");
-        File [] files = testFile.listFiles();
-        boolean foundAsdmin = false;
-        for (File cur : files) {
-            if (-1 != cur.getName().indexOf("asadmin")) {
-                foundAsdmin = true;
-                break;
-            }
-        }
-        if (!foundAsdmin) {
-            printUsage();
-            return;
-        }
-
-        // detect the GF version.  If GF_HOME/modules exists, this
-        // is a v3 installation we're updating.  We'll have to take different
-        // action.
-        modulesDir = new File(gfInstallDir, "modules");
-        if (modulesDir.exists() && modulesDir.isDirectory()) {
-            version = Version.GFv3;
-        } else {
-            version = Version.GFv1orv2;
-        }
-
-        // Get the glassfish lib directory
-        libDir = new File(gfInstallDir, "lib");
-        if (!libDir.isDirectory()) {
-            printUsage();
-            return;
-        }
-
-        if (licenseAccepted()) {
-            System.out.println("Updating glassfish at\n" + gfInstallDir.toString());
-            System.out.println("with new JSF jars.");
-            if (Version.GFv1orv2 == version) {
-                stripJsfFromJavaEEJar(libDir);
-                unpackJsfJarsToLib(libDir);
-            } else {
-                try {
-                    updateV3Jars();
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    System.exit(1);
-                }
-            }
-        }
-
-    }
-
-    public static boolean licenseAccepted() throws IOException {
-        boolean result = false;
-        InputStream is = Thread.currentThread().getContextClassLoader().
-                getResourceAsStream("BINARY_LICENSE.txt");
-        BufferedReader br = new BufferedReader(new InputStreamReader(is));
-        String line = null;
-        while (null != (line = br.readLine())) {
-            System.out.println(line);
-        }
-        System.out.print("Do you accept the above license terms? (type yes or no):");
-        br = new BufferedReader(new InputStreamReader(System.in));
-        line = br.readLine();
-        result = (null != line) && line.equals("yes");
-        return result;
-    }
-
-    protected static boolean printUsageCalled = false;
-
-    public static void printUsage() {
-        printUsageCalled = true;
-        System.err.println("Usage: java -jar glassfish-jsf-update.jar <glassfish install directory>");
-        System.err.println("\t<glassfish install directory> is the path to the\n\tglassfish binary install.");
-    }
-
-    public static void stripJsfFromJavaEEJar(File libDir) throws IOException {
-        if (!javaEEJarHasJsfClasses(libDir)) {
-            return;
-        }
-
-        File javaEEJarCopy = new File(libDir, "javaee.jar.copy"),
-            javaEEJar =  new File (libDir, "javaee.jar"),
-            javaEEJarOrig = new File(libDir, getBackupFilename(libDir,
-                "javaee.jar"));
-        javaEEJarCopy.delete();
-        JarInputStream origJarStream = new JarInputStream(new FileInputStream(javaEEJar));
-        JarOutputStream copyJarStream = new JarOutputStream(new FileOutputStream(javaEEJarCopy));
-        JarEntry newEntry = null, cur = null;
-        Pattern pat = Pattern.compile(".*javax.faces.*");
-        Matcher mat = null;
-        byte[] buf = new byte[1024];
-        int n = 0;
-        while (null != (cur = origJarStream.getNextJarEntry())) {
-            mat = pat.matcher(cur.getName());
-            // If the current entry does not include javax.faces...
-            if (!mat.matches()) {
-                // copy it to the newJar.
-                newEntry = new JarEntry(cur.getName());
-                copyJarStream.putNextEntry(newEntry);
-                while((n = origJarStream.read(buf, 0, buf.length)) != -1) {
-                    copyJarStream.write(buf, 0, n);
-                }
-            }
-        }
-        origJarStream.close();
-        copyJarStream.close();
-
-        javaEEJar.renameTo(javaEEJarOrig);
-        javaEEJarCopy.renameTo(javaEEJar);
-
-    }
-
-    public static boolean javaEEJarHasJsfClasses(File libDir) throws IOException {
-        boolean result = false;
-        File javaEEJar =  new File (libDir, "javaee.jar");
-        JarInputStream origJarStream = new JarInputStream(new FileInputStream(javaEEJar));
-        JarEntry cur = null;
-        Pattern pat = Pattern.compile(".*javax.faces.*");
-        Matcher mat = null;
-        cur = origJarStream.getNextJarEntry();
-        while (null != cur) {
-            mat = pat.matcher(cur.getName());
-            // If the current entry does not include javax.faces...
-            if (mat.matches()) {
-                result = true;
-            }
-            cur = origJarStream.getNextJarEntry();
-        }
-        origJarStream.close();
-        return result;
-    }
-
-    public static void unpackJsfJarsToLib(File libDir) throws IOException {
-        InputStream is = Thread.currentThread().getContextClassLoader().
-                getResourceAsStream("jsf-api.jar");
-        File
-             jsfApiCopy = new File(libDir, getBackupFilename(libDir,
-                "jsf-api.jar")),
-             jsfApi = new File(libDir, "jsf-api.jar"),
-             jsfImplCopy = new File(libDir, getBackupFilename(libDir,
-                "jsf-impl.jar")),
-             jsfImpl = new File(libDir, "jsf-impl.jar");
-        jsfApiCopy.delete();
-        jsfImplCopy.delete();
-        jsfApi.renameTo(jsfApiCopy);
-        jsfImpl.renameTo(jsfImplCopy);
-        FileOutputStream fos = new FileOutputStream(jsfApi);
-        int n = 0;
-        while (-1 != (n = is.read())) {
-            fos.write(n);
-        }
-        is.close();
-        fos.close();
-        is = Thread.currentThread().getContextClassLoader().
-               getResourceAsStream("jsf-impl.jar");
-        fos = new FileOutputStream(jsfImpl);
-        while (-1 != (n = is.read())) {
-            fos.write(n);
-        }
-        is.close();
-        fos.close();
-    }
-
-    protected static String getBackupFilename(File libDir, String filename) {
-       File [] files = libDir.listFiles();
-       Pattern pat = Pattern.compile(".*" + BACKUP_SUFFIX + "[0-9]*");
-       Matcher mat = null;
-       ArrayList<File> backupFiles = new ArrayList<File>();
-       for (File cur : files) {
-           mat = pat.matcher(cur.getName());
-           // If the current entry is a backup file...
-           if (mat.matches()) {
-               // add it to the list.
-               backupFiles.add(cur);
-           }
-       }
-       int i = 1;
-       int curInt = 0;
-       String curSuffix = null, curName = null;
-       if (0 < backupFiles.size()) {
-           // Find the highest backup number and go one more.
-           for (File cur : backupFiles) {
-               curName = cur.getName();
-               curSuffix = curName.substring(curName.indexOf(BACKUP_SUFFIX));
-               if (BACKUP_SUFFIX.length() < curSuffix.length()) {
-
-                   curInt = Integer.valueOf(curSuffix.
-                           substring(BACKUP_SUFFIX.length())).intValue();
-                   if (i == curInt) {
-                       i = curInt + 1;
-                   }
-                   else if (i < curInt) {
-                       i = curInt;
-                   }
-               }
-           }
-       }
-
-       return filename + BACKUP_SUFFIX + i;
-    }
-
-
-    // Methods for updating V3
-    private static Map<String,String> mapping = new HashMap<String,String>(2, 1.0f);
-    static {
-        mapping.put("javax.javaee", "jsf-api.jar");
-        mapping.put("jsf-connector", "jsf-impl.jar");
-    }
-
-    private static void updateV3Jars() throws Exception {
-        for (Map.Entry<String,String> entry : mapping.entrySet()) {
-            final String targetKey = entry.getKey();
-            File modulesDirTmp;
-            if ("jsf-connector".equals(targetKey)) {
-                modulesDirTmp = new File(modulesDir, "web");
-            } else {
-                modulesDirTmp = modulesDir;
-            }
-            String[] files = modulesDirTmp.list(new FilenameFilter() {
-                public boolean accept(File dir, String name) {
-                    return name.startsWith(targetKey) && name.endsWith(".jar");
-                }
-            });
-            if (files.length != 1) {
-                throw new RuntimeException("Multiple .jar files starting with " + targetKey + ".  Update cannot proceed");
-            }
-
-            File f = new File(modulesDirTmp, files[0]);
-            // we now have the jar we need to backup
-            String backupName = getBackupFilename(modulesDirTmp, files[0]);
-            File backup = new File(modulesDirTmp, backupName);
-            FileInputStream in = new FileInputStream(f);
-            FileOutputStream out = new FileOutputStream(backup);
-            byte[] buf = new byte[1024];
-            for (int total = in.read(buf); total != -1; total = in.read(buf)) {
-                out.write(buf, 0, total);
-            }
-            out.flush();
-            out.close();
-            in.close();
-
-            // backup created.  Now update the file by removing the
-            // javax.faces or com.sun.faces entries.
-            String jarSource = entry.getValue();
-            String pkg = ((jarSource.equals("jsf-api.jar") ? "javax/faces" : "com/sun/faces"));
-            f = new File(modulesDirTmp, files[0]);
-            String copyName = files[0] + ".copy";
-            File copy = new File(modulesDirTmp, copyName);
-            JarInputStream jarIn = new JarInputStream(new FileInputStream(f));
-            JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(copy), jarIn.getManifest());
-
-            JarEntry newEntry = null, cur = null;
-            Matcher mat = null;
-            int n;
-            while (null != (cur = jarIn.getNextJarEntry())) {
-
-                // If the current entry does not include javax.faces...
-                if (!cur.getName().startsWith(pkg)) {
-                    // copy it to the newJar.
-                    newEntry = new JarEntry(cur.getName());
-                    jarOut.putNextEntry(newEntry);
-                    while ((n = jarIn.read(buf, 0, buf.length)) != -1) {
-                        jarOut.write(buf, 0, n);
-                    }
-                }
-            }
-            jarIn.close();
-            jarOut.flush();
-            jarOut.close();
-
-            // ok, the copy is now without the javax.faces classes.
-            // read in from the packaged jsf-api.jar and add the entries
-            jarIn = new JarInputStream(Thread.currentThread()
-                  .getContextClassLoader().
-                  getResourceAsStream(jarSource));
-            JarInputStream jarInCopy = new JarInputStream(new FileInputStream(copy));
-            jarOut = new JarOutputStream(new FileOutputStream(f), jarInCopy.getManifest());
-            while (null != (cur = jarIn.getNextJarEntry())) {
-                if (cur.getName().contains("MANIFEST.MF") || cur.getName()
-                      .contains("com.sun.faces.spi.injectionprovider")) {
-                    continue;
-                }
-
-                // copy it to the newJar.
-                newEntry = new JarEntry(cur.getName());
-                jarOut.putNextEntry(newEntry);
-                while ((n = jarIn.read(buf, 0, buf.length)) != -1) {
-                    jarOut.write(buf, 0, n);
-                }
-
-            }
-            while (null != (cur = jarInCopy.getNextJarEntry())) {                
-
-                // copy it to the newJar.
-                newEntry = new JarEntry(cur.getName());
-                try {
-                jarOut.putNextEntry(newEntry);
-                } catch (Exception e) {
-                    continue;
-                }
-                while ((n = jarInCopy.read(buf, 0, buf.length)) != -1) {
-                    jarOut.write(buf, 0, n);
-                }
-
-            }
-            jarIn.close();
-            jarInCopy.close();
-            jarOut.flush();
-            jarOut.close();
-            copy.delete();
-            
-        }
-    }
-
-}
diff --git a/jsf-tools/src/main/java/com/sun/faces/util/ToolsUtil.java b/jsf-tools/src/main/java/com/sun/faces/util/ToolsUtil.java
deleted file mode 100644
index 408f894..0000000
--- a/jsf-tools/src/main/java/com/sun/faces/util/ToolsUtil.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-
-package com.sun.faces.util;
-
-import java.util.ResourceBundle;
-import java.util.Locale;
-import java.text.MessageFormat;
-import java.util.logging.Logger;
-
-/**
- * Various static utility methods. 
- */
-public class ToolsUtil {
-    
-    public static final String FACES_LOGGER = "javax.enterprise.resource.webcontainer.jsf";
-    
-    public static final String CONFIG_LOGGER = ".config";
-    
-    public static final String BEANS_LOGGER = ".config.beans";
-    
-    public static final String RULES_LOGGER = ".config.rules";
-    
-    public static final String GENERATE_LOGGER = ".config.generate";   
-    
-    public static final String FACES_LOG_STRINGS = 
-            "com.sun.faces.LogStrings";
-
-    public static final String TOOLS_LOG_STRINGS = 
-            "com.sun.faces.ToolsLogStrings";
-
-    private static final String RESOURCE_BUNDLE_BASE_NAME =
-        "com.sun.faces.resources.JsfToolsMessages";
-
-    // --------------------------------------------------- Message Key Constants
-
-
-    public static final String MANAGED_BEAN_NO_MANAGED_BEAN_NAME_ID =
-        "com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_NAME";
-    
-    public static final String MANAGED_BEAN_NO_MANAGED_BEAN_CLASS_ID =
-        "com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_CLASS";
-    
-    public static final String MANAGED_BEAN_NO_MANAGED_BEAN_SCOPE_ID =
-        "com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_SCOPE";
-    
-    public static final String MANAGED_BEAN_INVALID_SCOPE_ID =
-        "com.sun.faces.MANAGED_BEAN_INVALID_SCOPE";
-    
-    public static final String MANAGED_BEAN_AS_LIST_CONFIG_ERROR_ID =
-        "com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR";
-    
-    public static final String MANAGED_BEAN_AS_MAP_CONFIG_ERROR_ID = 
-        "com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR";
-    
-    public static final String MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR_ID =
-        "com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR";
-    
-    public static final String MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR_ID =
-        "com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR";
-    
-    public static final String MANAGED_BEAN_PROPERTY_CONFIG_ERROR_ID = 
-        "com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR";
-    
-    public static final String MANAGED_BEAN_NO_MANAGED_PROPERTY_NAME_ID =
-        "com.sun.faces.MANAGED_BEAN_NO_MANAGED_PROPERTY_NAME";
-
-
-    // ---------------------------------------------------------- Public Methods
-
-
-    public static String getMessage(String messageKey, Object[] params) {
-
-        ResourceBundle bundle =
-            ResourceBundle.getBundle(RESOURCE_BUNDLE_BASE_NAME,
-                Locale.getDefault(),
-                Thread.currentThread().getContextClassLoader());
-        return MessageFormat.format(bundle.getString(messageKey), params);
-
-    } // END getMessage
-
-
-    public static String getMessage(String messageKey) {
-
-        return getMessage(messageKey, null);
-
-    } // END getMessage
-    
-    public static Logger getLogger( String loggerName ) {
-        return Logger.getLogger(loggerName, FACES_LOG_STRINGS );
-    }
-
-    public static Class loadClass(String name,
-                                  Object fallbackClass)
-        throws ClassNotFoundException {
-        ClassLoader loader = ToolsUtil.getCurrentLoader(fallbackClass);
-        return Class.forName(name, false, loader);
-    }
-
-
-    public static ClassLoader getCurrentLoader(Object fallbackClass) {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return loader;
-    }
-    
-
-}
diff --git a/jsf-tools/src/main/resources/JsfToolsMessages.properties b/jsf-tools/src/main/resources/JsfToolsMessages.properties
deleted file mode 100644
index 8aa531f..0000000
--- a/jsf-tools/src/main/resources/JsfToolsMessages.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# The contents of this file are subject to the terms
-# of the Common Development and Distribution License
-# (the License). You may not use this file except in
-# compliance with the License.
-# 
-# You can obtain a copy of the License at
-# https://javaserverfaces.dev.java.net/CDDL.html or
-# legal/CDDLv1.0.txt. 
-# See the License for the specific language governing
-# permission and limitations under the License.
-# 
-# When distributing Covered Code, include this CDDL
-# Header Notice in each file and include the License file
-# at legal/CDDLv1.0.txt.    
-# If applicable, add the following below the CDDL Header,
-# with the fields enclosed by brackets [] replaced by
-# your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# [Name of File] [ver.__] [Date]
-# 
-# Copyright 2005 Sun Microsystems Inc. All Rights Reserved
-#
-
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with list entries, but also has illegally defined map entries and/or one or more managed properties.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with map entries, but also has illegally defined one or more managed properties.
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=Invalid managed-bean-scope ''{0}'' for managed bean ''{1}''.  Scope must be none, application, session, or request.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines list entries, but has illegally defined a value and/or map entries.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines map entries, but has illegally defined a value as well.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' containins no list or map entires, nor any value elements.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_NAME=Managed bean configuration error in document ''{0}'' (managed-bean definition ending at line number {1}) - no defined 'managed-bean-name'.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_CLASS=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-class.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_SCOPE=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-scope.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_PROPERTY_NAME=Incorrect configuration for managed bean ''{0}''.  Managed property with no defined managed-property-name.
\ No newline at end of file
diff --git a/jsf-tools/src/main/resources/JsfToolsMessages_de.properties b/jsf-tools/src/main/resources/JsfToolsMessages_de.properties
deleted file mode 100644
index 8aa531f..0000000
--- a/jsf-tools/src/main/resources/JsfToolsMessages_de.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# The contents of this file are subject to the terms
-# of the Common Development and Distribution License
-# (the License). You may not use this file except in
-# compliance with the License.
-# 
-# You can obtain a copy of the License at
-# https://javaserverfaces.dev.java.net/CDDL.html or
-# legal/CDDLv1.0.txt. 
-# See the License for the specific language governing
-# permission and limitations under the License.
-# 
-# When distributing Covered Code, include this CDDL
-# Header Notice in each file and include the License file
-# at legal/CDDLv1.0.txt.    
-# If applicable, add the following below the CDDL Header,
-# with the fields enclosed by brackets [] replaced by
-# your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# [Name of File] [ver.__] [Date]
-# 
-# Copyright 2005 Sun Microsystems Inc. All Rights Reserved
-#
-
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with list entries, but also has illegally defined map entries and/or one or more managed properties.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with map entries, but also has illegally defined one or more managed properties.
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=Invalid managed-bean-scope ''{0}'' for managed bean ''{1}''.  Scope must be none, application, session, or request.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines list entries, but has illegally defined a value and/or map entries.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines map entries, but has illegally defined a value as well.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' containins no list or map entires, nor any value elements.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_NAME=Managed bean configuration error in document ''{0}'' (managed-bean definition ending at line number {1}) - no defined 'managed-bean-name'.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_CLASS=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-class.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_SCOPE=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-scope.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_PROPERTY_NAME=Incorrect configuration for managed bean ''{0}''.  Managed property with no defined managed-property-name.
\ No newline at end of file
diff --git a/jsf-tools/src/main/resources/JsfToolsMessages_es.properties b/jsf-tools/src/main/resources/JsfToolsMessages_es.properties
deleted file mode 100644
index 8aa531f..0000000
--- a/jsf-tools/src/main/resources/JsfToolsMessages_es.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# The contents of this file are subject to the terms
-# of the Common Development and Distribution License
-# (the License). You may not use this file except in
-# compliance with the License.
-# 
-# You can obtain a copy of the License at
-# https://javaserverfaces.dev.java.net/CDDL.html or
-# legal/CDDLv1.0.txt. 
-# See the License for the specific language governing
-# permission and limitations under the License.
-# 
-# When distributing Covered Code, include this CDDL
-# Header Notice in each file and include the License file
-# at legal/CDDLv1.0.txt.    
-# If applicable, add the following below the CDDL Header,
-# with the fields enclosed by brackets [] replaced by
-# your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# [Name of File] [ver.__] [Date]
-# 
-# Copyright 2005 Sun Microsystems Inc. All Rights Reserved
-#
-
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with list entries, but also has illegally defined map entries and/or one or more managed properties.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with map entries, but also has illegally defined one or more managed properties.
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=Invalid managed-bean-scope ''{0}'' for managed bean ''{1}''.  Scope must be none, application, session, or request.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines list entries, but has illegally defined a value and/or map entries.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines map entries, but has illegally defined a value as well.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' containins no list or map entires, nor any value elements.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_NAME=Managed bean configuration error in document ''{0}'' (managed-bean definition ending at line number {1}) - no defined 'managed-bean-name'.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_CLASS=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-class.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_SCOPE=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-scope.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_PROPERTY_NAME=Incorrect configuration for managed bean ''{0}''.  Managed property with no defined managed-property-name.
\ No newline at end of file
diff --git a/jsf-tools/src/main/resources/JsfToolsMessages_fr.properties b/jsf-tools/src/main/resources/JsfToolsMessages_fr.properties
deleted file mode 100644
index 8aa531f..0000000
--- a/jsf-tools/src/main/resources/JsfToolsMessages_fr.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# The contents of this file are subject to the terms
-# of the Common Development and Distribution License
-# (the License). You may not use this file except in
-# compliance with the License.
-# 
-# You can obtain a copy of the License at
-# https://javaserverfaces.dev.java.net/CDDL.html or
-# legal/CDDLv1.0.txt. 
-# See the License for the specific language governing
-# permission and limitations under the License.
-# 
-# When distributing Covered Code, include this CDDL
-# Header Notice in each file and include the License file
-# at legal/CDDLv1.0.txt.    
-# If applicable, add the following below the CDDL Header,
-# with the fields enclosed by brackets [] replaced by
-# your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# [Name of File] [ver.__] [Date]
-# 
-# Copyright 2005 Sun Microsystems Inc. All Rights Reserved
-#
-
-com.sun.faces.MANAGED_BEAN_AS_LIST_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with list entries, but also has illegally defined map entries and/or one or more managed properties.
-com.sun.faces.MANAGED_BEAN_AS_MAP_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed bean configured with map entries, but also has illegally defined one or more managed properties.
-com.sun.faces.MANAGED_BEAN_INVALID_SCOPE=Invalid managed-bean-scope ''{0}'' for managed bean ''{1}''.  Scope must be none, application, session, or request.
-com.sun.faces.MANAGED_BEAN_LIST_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines list entries, but has illegally defined a value and/or map entries.
-com.sun.faces.MANAGED_BEAN_MAP_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' defines map entries, but has illegally defined a value as well.
-com.sun.faces.MANAGED_BEAN_PROPERTY_CONFIG_ERROR=Incorrect configuration for managed bean ''{0}''.  Managed property ''{1}'' containins no list or map entires, nor any value elements.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_NAME=Managed bean configuration error in document ''{0}'' (managed-bean definition ending at line number {1}) - no defined 'managed-bean-name'.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_CLASS=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-class.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_BEAN_SCOPE=Incorrect configuration for managed bean ''{0}''.  No defined managed-bean-scope.
-com.sun.faces.MANAGED_BEAN_NO_MANAGED_PROPERTY_NAME=Incorrect configuration for managed bean ''{0}''.  Managed property with no defined managed-property-name.
\ No newline at end of file
diff --git a/jsf-tools/src/main/resources/com/sun/faces/ToolsLogStrings.properties b/jsf-tools/src/main/resources/com/sun/faces/ToolsLogStrings.properties
deleted file mode 100644
index f264871..0000000
--- a/jsf-tools/src/main/resources/com/sun/faces/ToolsLogStrings.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# The contents of this file are subject to the terms
-# of the Common Development and Distribution License
-# (the License). You may not use this file except in
-# compliance with the License.
-# 
-# You can obtain a copy of the License at
-# https://javaserverfaces.dev.java.net/CDDL.html or
-# legal/CDDLv1.0.txt. 
-# See the License for the specific language governing
-# permission and limitations under the License.
-# 
-# When distributing Covered Code, include this CDDL
-# Header Notice in each file and include the License file
-# at legal/CDDLv1.0.txt.    
-# If applicable, add the following below the CDDL Header,
-# with the fields enclosed by brackets [] replaced by
-# your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# [Name of File] [ver.__] [Date]
-# 
-# Copyright 2005 Sun Microsystems Inc. All Rights Reserved
-#
-
-# placeholder.  
-
-name=value
diff --git a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/allrenderers-frame.bottom b/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/allrenderers-frame.bottom
deleted file mode 100644
index e04310f..0000000
--- a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/allrenderers-frame.bottom
+++ /dev/null
@@ -1,2 +0,0 @@
-</BODY>
-</HTML>
diff --git a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/allrenderers-frame.top b/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/allrenderers-frame.top
deleted file mode 100644
index 71c0555..0000000
--- a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/allrenderers-frame.top
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<TITLE>
-RenderKit Definition
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-</HEAD>
-<SCRIPT>
-function asd()
-{
-parent.document.title="Standard HTML RenderKit";
-}
-</SCRIPT>
-<BODY BGCOLOR="white" onload="asd();">
diff --git a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/index.html b/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/index.html
deleted file mode 100644
index 72a3733..0000000
--- a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<!--NewPage-->
-<html>
-<head>
-<!-- Generated by faces on Sun Jan 11 13:14:20 EST 2004-->
-<title>
-Standard HTML RenderKit
-</title>
-</head>
-<frameset cols="30%,70%">
-<frame src="allrenderers-frame.html" name="renderKitFrame">
-<frame src="HTML_BASIC/renderkit-summary.html" name="rendererFrame">
-</frameset>
-<noframes>
-
-<h2>
-Frame Alert</h2>
-
-<p>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<br>
-Link to<a HREF="overview-summary.html">Non-frame version.</a></noframes>
-</html>
diff --git a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/renderkit-summary.bottom b/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/renderkit-summary.bottom
deleted file mode 100644
index 7a7578b..0000000
--- a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/renderkit-summary.bottom
+++ /dev/null
@@ -1,5 +0,0 @@
-<HR>
-
-Copyright � 2002-2004 Sun Microsystems, Inc. All Rights Reserved.
-</BODY>
-</HTML>
diff --git a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/renderkit-summary.top b/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/renderkit-summary.top
deleted file mode 100644
index c777802..0000000
--- a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/renderkit-summary.top
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Jan 11 13:14:20 EST 2004 -->
-<TITLE>
-Faces RenderKit
-</TITLE>
-<META NAME="keywords" CONTENT="RenderKit">
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">
-</HEAD>
-<SCRIPT>
-function asd()
-{
-parent.document.title="Standard HTML RenderKit";
-}
-</SCRIPT>
-<BODY BGCOLOR="white" onload="asd();">
diff --git a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/stylesheet.css b/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/stylesheet.css
deleted file mode 100644
index 33c760c..0000000
--- a/jsf-tools/src/main/resources/com/sun/faces/generate/facesdoc/stylesheet.css
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults */
-
-/* Page background color */
-body { background-color: #FFFFFF }
-
-/* Table colors */
-.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
-.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
-.TableRowColor         { background: #FFFFFF } /* White */
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont   { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
-.FrameHeadingFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
-.FrameItemFont    { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
-
-/* Example of smaller, sans-serif font in frames */
-/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
-
-/* Navigation bar fonts and colors */
-.NavBarCell1    { background-color:#EEEEFF;}/* Light mauve */
-.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */
-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
-
-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-
-/* Change bars from http://www.geocities.com/hentaihelper/2atimlin.htm */
-
-/* put a red "change" bar in the left margin			*/
-/*
-   .changed_added_2_0 { cursor: url(changed_added_2_0_cursor.png), pointer;
-                 background: url(changed_added_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-   .changed_modified_2_0 { cursor: url(changed_modified_2_0_cursor.png), pointer;
-                 background: url(changed_modified_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:orange }
-
-   .changed_deleted_2_0 { cursor: url(changed_deleted_2_0_cursor.png), pointer;
-                 background: url(changed_deleted_2_0.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:red }
-*/
-
-   .changed_added_2_0_rev_a { cursor: url(changed_added_2_0_rev_a_cursor.cur), auto;
-                 background: url(changed_added_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:green }
-
-   .changed_modified_2_0_rev_a { cursor: url(changed_modified_2_0_rev_a_cursor.cur), auto;
-                 background: url(changed_modified_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:orange }
-
-   .changed_deleted_2_0_rev_a { cursor: url(changed_deleted_2_0_rev_a_cursor.cur), auto;
-                 background: url(changed_deleted_2_0_rev_a.png); 
-                 padding-left:0.2em; border-left:solid;
-                 border-left-width:thin; border-right:none;
-                 border-top:none; border-bottom:none; border-color:red;
-                 text-decoration: line-through; }
-
-
-
-.javadocSection { font-size: large; }
-
diff --git a/jsf-tools/template-src/MessageFactory.java b/jsf-tools/template-src/MessageFactory.java
deleted file mode 100644
index 4156180..0000000
--- a/jsf-tools/template-src/MessageFactory.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package @package@;
-
-import javax.el.ValueExpression;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * 
- * <p>supported filters: <code>package</code> and
- * <code>protection</code>.</p>
- */
-
- at protection@ class MessageFactory {
-
-    private static final String MOJARRA_RESOURCE_BASENAME =
-        "com.sun.faces.resources.Messages";
-
-    private MessageFactory() {
-    }
-
-    /**
-     * @see #getMessage(String, Object...)
-     * @param FacesMessage.Serverity set a custom severity
-     */
-    @protection@ static FacesMessage getMessage(String messageId,
-                                                FacesMessage.Severity severity,
-                                                Object... params) {
-        FacesMessage message = getMessage(messageId, params);
-        message.setSeverity(severity);
-        return message;
-    }
-
-
-    /**
-     * @see #getMessage(Locale, String, Object...)
-     * @param FacesMessage.Serverity set a custom severity
-     */
-    @protection@ static FacesMessage getMessage(Locale locale,
-                                                String messageId,
-                                                FacesMessage.Severity severity,
-                                                Object... params) {
-        FacesMessage message = getMessage(locale, messageId, params);
-        message.setSeverity(severity);
-        return message;
-    }
-
-
-    /**
-     * @see #getMessage(FacesContext, String, Object...)
-     * @param FacesMessage.Serverity set a custom severity
-     */
-    @protection@ static FacesMessage getMessage(FacesContext context,
-                                                String messageId,
-                                                FacesMessage.Severity severity,
-                                                Object... params) {
-        FacesMessage message = getMessage(context, messageId, params);
-        message.setSeverity(severity);
-        return message;
-    }
-
-   
-    /**
-     * <p>This version of getMessage() is used for localizing implementation
-     * specific messages.</p>
-     *
-     * @param messageId - the key of the message in the resource bundle
-     * @param params    - substittion parameters
-     *
-     * @return a localized <code>FacesMessage</code> with the severity
-     *  of FacesMessage.SEVERITY_ERROR
-     */
-     @protection@ static FacesMessage getMessage(String messageId, 
-                                                 Object... params) {
-        Locale locale = null;
-        FacesContext context = FacesContext.getCurrentInstance();
-        // context.getViewRoot() may not have been initialized at this point.
-        if (context != null && context.getViewRoot() != null) {
-            locale = context.getViewRoot().getLocale();
-            if (locale == null) {
-                locale = Locale.getDefault();
-            }
-        } else {
-            locale = Locale.getDefault();
-        }
-        
-        return getMessage(locale, messageId, params);
-    }
-
-     /**
-      * <p>Creates and returns a FacesMessage for the specified Locale.</p>
-      *
-      * @param locale    - the target <code>Locale</code>
-      * @param messageId - the key of the message in the resource bundle
-      * @param params    - substittion parameters
-      *
-      * @return a localized <code>FacesMessage</code> with the severity
-      *  of FacesMessage.SEVERITY_ERROR
-      */
-     @protection@ static FacesMessage getMessage(Locale locale, 
-                                                 String messageId, 
-                                                 Object... params) {       
-        String summary = null;
-        String detail = null;       
-        ResourceBundle bundle;
-        String bundleName;
-
-        // see if we have a user-provided bundle
-        if (null != (bundleName = getApplication().getMessageBundle())) {
-            if (null != 
-                (bundle = 
-                    ResourceBundle.getBundle(bundleName, locale,
-                      getCurrentLoader(bundleName)))) {
-                // see if we have a hit
-                try {
-                    summary = bundle.getString(messageId);
-                    detail = bundle.getString(messageId + "_detail");
-                }
-                catch (MissingResourceException e) {
-                    // ignore
-                }
-            }
-        }
-    
-        // we couldn't find a summary in the user-provided bundle
-        if (null == summary) {
-            // see if we have a summary in the app provided bundle
-            bundle = ResourceBundle.getBundle(FacesMessage.FACES_MESSAGES, 
-                                              locale,
-                                              getCurrentLoader(bundleName));
-            if (null == bundle) {
-                throw new NullPointerException();
-            }
-            // see if we have a hit
-            try {
-                summary = bundle.getString(messageId);
-                detail = bundle.getString(messageId + "_detail");
-            } catch (MissingResourceException e) {
-                // ignore
-            }
-        }
-
-        // no hit found in the standard javax.faces.Messages bundle.
-        // check the Mojarra resources
-        if (summary == null) {
-            // see if we have a summary in the app provided bundle
-            bundle = ResourceBundle.getBundle(MOJARRA_RESOURCE_BASENAME,
-                                              locale,
-                                              getCurrentLoader(bundleName));
-            if (null == bundle) {
-                throw new NullPointerException();
-            }
-            // see if we have a hit
-            try {
-                summary = bundle.getString(messageId);
-            } catch (MissingResourceException e) {
-                return null;
-            }
-        }
-
-        // At this point, we have a summary and a bundle.     
-        FacesMessage ret = new BindingFacesMessage(locale, summary, detail, params);
-        ret.setSeverity(FacesMessage.SEVERITY_ERROR);
-        return (ret);
-    }
-
-
-    /**
-     * <p>Creates and returns a FacesMessage for the specified Locale.</p>
-     *
-     * @param context   - the <code>FacesContext</code> for the current request
-     * @param messageId - the key of the message in the resource bundle
-     * @param params    - substittion parameters
-     *
-     * @return a localized <code>FacesMessage</code> with the severity
-     *  of FacesMessage.SEVERITY_ERROR
-     */
-    @protection@ static FacesMessage getMessage(FacesContext context, 
-                                                String messageId,
-                                                Object... params) {
-                                                
-        if (context == null || messageId == null ) {
-            throw new NullPointerException(" context " 
-                + context 
-                + " messageId " 
-                + messageId);
-        }
-        Locale locale;
-        // viewRoot may not have been initialized at this point.
-        if (context.getViewRoot() != null) {
-            locale = context.getViewRoot().getLocale();
-        } else {
-            locale = Locale.getDefault();
-        }
-        
-        if (null == locale) {
-            throw new NullPointerException(" locale is null ");
-        }
-        
-        FacesMessage message = getMessage(locale, messageId, params);
-        if (message != null) {
-            return message;
-        }
-        locale = Locale.getDefault();
-        return (getMessage(locale, messageId, params));
-    }  
-                       
-
-    /**
-     * <p>Returns the <code>label</code> property from the specified
-     * component.</p>
-     *
-     * @param context   - the <code>FacesContext</code> for the current request
-     * @param component - the component of interest
-     *
-     * @return the label, if any, of the component
-     */
-    @protection@ static Object getLabel(FacesContext context, 
-                                        UIComponent component) {
-                                        
-        Object o = component.getAttributes().get("label");
-        if (o == null || (o instanceof String && ((String) o).length() == 0)) {
-            o = component.getValueExpression("label");
-        }
-        // Use the "clientId" if there was no label specified.
-        if (o == null) {
-            o = component.getClientId(context);
-        }
-        return o;
-    }
-
-    protected static Application getApplication() {
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            return (FacesContext.getCurrentInstance().getApplication());
-        }
-        ApplicationFactory afactory = (ApplicationFactory)
-            FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-        return (afactory.getApplication());
-    }
-
-    protected static ClassLoader getCurrentLoader(Object fallbackClass) {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return loader;
-    }
-
-    /**
-     * This class overrides FacesMessage to provide the evaluation
-     * of binding expressions in addition to Strings.
-     * It is often the case, that a binding expression may reference
-     * a localized property value that would be used as a 
-     * substitution parameter in the message.  For example:
-     *  <code>#{bundle.userLabel}</code>
-     * "bundle" may not be available until the page is rendered.
-     * The "late" binding evaluation in <code>getSummary</code> and 
-     * <code>getDetail</code> allow the expression to be evaluated
-     * when that property is available.
-     */
-    static class BindingFacesMessage extends FacesMessage {
-        BindingFacesMessage(
-            Locale locale,
-            String messageFormat,
-            String detailMessageFormat,
-            // array of parameters, both Strings and ValueBindings
-            Object[] parameters) {
-
-            super(messageFormat, detailMessageFormat);
-            this.locale = locale;
-            this.parameters = parameters;
-            if (parameters != null) {
-                resolvedParameters = new Object[parameters.length];
-            }
-        }
-
-        public String getSummary() {
-            String pattern = super.getSummary();
-            resolveBindings();
-            return getFormattedString(pattern, resolvedParameters);
-        }
-
-        public String getDetail() {
-            String pattern = super.getDetail();
-            resolveBindings();
-            return getFormattedString(pattern, resolvedParameters);
-        }
-
-        private void resolveBindings() {
-            FacesContext context = null;
-            if (parameters != null) {
-                for (int i = 0; i < parameters.length; i++) {
-                    Object o = parameters[i];
-                    if (o instanceof ValueBinding) {
-                        if (context == null) {
-                            context = FacesContext.getCurrentInstance();
-                        }
-                        o = ((ValueBinding) o).getValue(context);
-                    }
-                    if (o instanceof ValueExpression) {
-                        if (context == null) {
-                            context = FacesContext.getCurrentInstance();
-                        }
-                        o = ((ValueExpression) o).getValue(context.getELContext());
-                    }
-                    // to avoid 'null' appearing in message
-                    if (o == null) {
-                        o = "";
-                    }
-                    resolvedParameters[i] = o;
-                }
-            }
-        }
-
-        private String getFormattedString(String msgtext, Object[] params) {
-            String localizedStr = null;
-                                                                                
-            if (params == null || msgtext == null ) {
-                return msgtext;
-            }
-            StringBuffer b = new StringBuffer(100);
-            MessageFormat mf = new MessageFormat(msgtext);
-            if (locale != null) {
-                mf.setLocale(locale);
-                b.append(mf.format(params));
-                localizedStr = b.toString();
-            }
-            return localizedStr;
-        }
-
-        private Locale locale;
-        private Object[] parameters;
-        private Object[] resolvedParameters;
-    }
-    
-} // end of class MessageFactory
diff --git a/jsf-tools/template-src/StateHolderSaver.java b/jsf-tools/template-src/StateHolderSaver.java
deleted file mode 100644
index 84298b5..0000000
--- a/jsf-tools/template-src/StateHolderSaver.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2010 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package @package@;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.StateHolder;
-
-import java.io.Serializable;
-
-/**
- * <p>Helper class for saving and restoring attached objects.</p>
- */
-class StateHolderSaver implements Serializable {
-
-    private static final long serialVersionUID = @serialVersionUID@;
-
-    private String className = null;
-    private Serializable savedState = null;
-
-    public StateHolderSaver(FacesContext context, Object toSave) {
-        className = toSave.getClass().getName();
-
-        if (toSave instanceof StateHolder) {
-            // do not save an attached object that is marked transient.
-            if (!((StateHolder) toSave).isTransient()) {
-                savedState =
-                      (Serializable) ((StateHolder) toSave).saveState(context);
-            } else {
-                className = null;
-            }
-        } else if (toSave instanceof Serializable) {
-            savedState = (Serializable) toSave;
-            className = null;
-        }
-    }
-
-    /**
-     *
-     * @return the restored {@link StateHolder} instance.
-     */
-
-    public Object restore(FacesContext context) throws IllegalStateException {
-        Object result = null;
-        Class toRestoreClass;
-
-        // if the Object to save implemented Serializable but not
-        // StateHolder
-        if (null == className && null != savedState) {
-            return savedState;
-        }
-
-        // if the Object to save did not implement Serializable or
-        // StateHolder
-        if (className == null) {
-            return null;
-        }
-
-        // else the object to save did implement StateHolder
-
-        try {
-            toRestoreClass = loadClass(className, this);
-        }
-        catch (ClassNotFoundException e) {
-            throw new IllegalStateException(e);
-        }
-
-        if (null != toRestoreClass) {
-            try {
-                result = toRestoreClass.newInstance();
-            }
-            catch (InstantiationException e) {
-                throw new IllegalStateException(e);
-            }
-            catch (IllegalAccessException a) {
-                throw new IllegalStateException(a);
-            }
-        }
-
-        if (null != result && null != savedState &&
-            result instanceof StateHolder) {
-            // don't need to check transient, since that was done on
-            // the saving side.
-            ((StateHolder) result).restoreState(context, savedState);
-        }
-        return result;
-    }
-
-
-    private static Class loadClass(String name, 
-            Object fallbackClass) throws ClassNotFoundException {
-        ClassLoader loader =
-            Thread.currentThread().getContextClassLoader();
-        if (loader == null) {
-            loader = fallbackClass.getClass().getClassLoader();
-        }
-        return Class.forName(name, false, loader);
-    }
-}
diff --git a/jsf-tools/template-src/TypedCollections.java b/jsf-tools/template-src/TypedCollections.java
deleted file mode 100644
index 0caf39e..0000000
--- a/jsf-tools/template-src/TypedCollections.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- * 
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- * 
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- * 
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- * 
- * Contributor(s):
- * 
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package @package@;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
- at protection@ class TypedCollections {
-
-    /**
-     * Dynamically check that the members of the collection are all
-     * instances of the given type (or null).
-     */
-    private static boolean checkCollectionMembers(Collection<?> c, Class<?> type) {
-        for (Object element : c) {
-            if (element != null && !type.isInstance(element)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Dynamically check that the members of the collection are all
-     * instances of the given type (or null), and that the collection
-     * itself is of the given collection type.
-     * 
-     * @param <E>
-     *                the collection's element type
-     * @param c
-     *                the collection to cast
-     * @param type
-     *                the class of the collection's element type.
-     * @return the dynamically-type checked collection.
-     * @throws java.lang.ClassCastException
-     */
-    @SuppressWarnings("unchecked")
-    @protection@ static <E,TypedC extends Collection<E>> TypedC dynamicallyCastCollection(Collection<?> c,
-                                                                                          Class<E> type, 
-                                                                                          Class<TypedC> collectionType) {
-        if (c == null)
-            return null;
-        if (!collectionType.isInstance(c))
-            throw new ClassCastException(c.getClass().getName());
-        assert checkCollectionMembers(c, type) :
-            "The collection contains members with a type other than " + type.getName();
-
-        return collectionType.cast(c);
-    }
-
-    /**
-     * Dynamically check that the members of the list are all instances of
-     * the given type (or null).
-     * 
-     * @param <E>
-     *                the list's element type
-     * @param list
-     *                the list to cast
-     * @param type
-     *                the class of the list's element type.
-     * @return the dynamically-type checked list.
-     * @throws java.lang.ClassCastException
-     */
-    @SuppressWarnings("unchecked")
-    @protection@ static <E> List<E> dynamicallyCastList(List<?> list, Class<E> type) {
-        return dynamicallyCastCollection(list, type, List.class);
-    }
-
-    /**
-     * Dynamically check that the members of the set are all instances of
-     * the given type (or null).
-     * 
-     * @param <E>
-     *                the set's element type
-     * @param set
-     *                the set to cast
-     * @param type
-     *                the class of the set's element type.
-     * @return the dynamically-type checked set.
-     * @throws java.lang.ClassCastException
-     */
-    @SuppressWarnings("unchecked")
-    @protection@ static <E> Set<E> dynamicallyCastSet(Set<?> set, 
-                                                      Class<E> type) {
-        return dynamicallyCastCollection(set, type, Set.class);
-    }
-
-    /**
-     * Dynamically check that the keys and values in the map are all
-     * instances of the correct types (or null).
-     * 
-     * @param <K>
-     *                the map's key type
-     * @param <V>
-     *                the map's value type
-     * @param map
-     *                the map to cast
-     * @param keyType
-     *                the class of the map's key type.
-     * @param keyType
-     *                the class of the map's key type.
-     * @return the dynamically-type checked map.
-     * @throws java.lang.ClassCastException
-     */
-    @SuppressWarnings("unchecked")
-    @protection@ static <K, V> Map<K, V> dynamicallyCastMap(Map<?, ?> map,
-                                                            Class<K> keyType, 
-                                                            Class<V> valueType) {
-        if (map == null) {
-            return null;                                                                     
-        }
-        assert checkCollectionMembers(map.keySet(), keyType) :
-            "The map contains keys with a type other than " + keyType.getName();
-        assert checkCollectionMembers(map.values(), valueType) :
-            "The map contains values with a type other than " + valueType.getName();
-
-        return (Map<K, V>) map;
-    }
-}
diff --git a/jsf-tools/tools.iml b/jsf-tools/tools.iml
deleted file mode 100644
index 4bb4bfc..0000000
--- a/jsf-tools/tools.iml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="mojarra-build" level="project" />
-  </component>
-</module>
-
diff --git a/last-taglib-generation b/last-taglib-generation
new file mode 100644
index 0000000..e69de29
diff --git a/legal/jsf-cddl/BINARY_LICENSE.txt b/legal/jsf-cddl/BINARY_LICENSE.txt
deleted file mode 100644
index 49238f7..0000000
--- a/legal/jsf-cddl/BINARY_LICENSE.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-SUN MICROSYSTEMS, INC. SOFTWARE LICENSE AGREEMENTS
-
-SUN MICROSYSTEMS, INC. ("SUN") IS WILLING TO LICENSE THE BELOW DEFINED SOFTWARE TO YOU ONLY UPON THE CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS SOFTWARE LICENSE AGREEMENT ("AGREEMENT").� PLEASE READ THE AGREEMENT CAREFULLY.� BY DOWNLOADING OR INSTALLING THIS SOFTWARE, YOU ACCEPT THE FULL TERMS OF THE AGREEMENT.
-
-1. Definitions. 
-
-"Software" means all the portions of the GlassFish distribution provided by Sun only in binary code form, and including any updates or error corrections or documentation provided by Sun under this Agreement.
-
-2. Permitted Uses.
-
-Subject to the terms and conditions of this Agreement and restrictions and exceptions set forth in the Software's documentation, Sun grants you a non-exclusive, non-transferable, limited license without fees to
-
-(a) reproduce and use internally the Software for the purposes of developing or running GlassFish or modified versions of GlassFish.
-
-(b) reproduce and distribute the Software (and also portions of Software identified as Redistributable in the documentation accompanying Software), provided that you (i) distribute the Software or Redistributables bundled as part of, and for the sole purpose of running, GlassFish or modified versions of GlassFish; (ii) do not remove or alter any proprietary legends or notices contained in or on the Software or Redistributables, (iii) only distribute the Software or Redistributables subje [...]
-
-3. Restrictions.
-
-(a) The copies of Software provided to you under this Agreement is licensed, not sold, to you by Sun. Sun reserves all rights not expressly granted. 
-
-(b) You may not modify Software. However if the documentation accompanying Software lists specific portions of Software, such as header files, class libraries, reference source code, and/or redistributable files, that may be handled differently, you may do so only as provided in the documentation. 
-
-(c) You may not rent, lease, lend or encumber Software. 
-
-(d) you do not remove or alter any proprietary legends or notices contained in the Software,
-
-(e) Unless enforcement is prohibited by applicable law, you may not decompile, or reverse engineer Software. 
-
-(f) The terms and conditions of this Agreement will apply to any Software updates, provided to you at Sun's discretion, that replace and/or supplement the original Software, unless such update contains a separate license. 
-
-(g) Software is confidential and copyrighted. 
-
-(h) Software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility and Sun and its licensors disclaim any express or implied warranty of fitness for such uses. 
-
-(i) No right, title or interest in or to any trademark, service mark, logo or trade name of Sun or its licensors is granted under this Agreement. 
-
-(j) If your Permitted Use in this Agreement permits the distribution Software or portions of the Software, you may only distribute the Software subject to a license agreement that protects Sun's interests consistent with the terms contained in this Agreement.
-
-4. Java Compatibility and Open Source.
-
-Software may contain Java technology. You may not create additional classes to, or modifications of, the Java technology, except under compatibility requirements available under a separate agreement available at www.java.net.
-
-Sun supports and benefits from the global community of open source developers, and thanks the community for its important contributions and open standards-based technology, which Sun has adopted into many of its products.
-
-Please note that portions of Software may be provided with notices and open source licenses from such communities and third parties that govern the use of those portions, and any licenses granted hereunder do not alter any rights and obligations you may have under such open source licenses, however, the disclaimer of warranty and limitation of liability provisions in this Agreement will apply to all Software in this distribution.
-
-5. Term and Termination. 
-
-The Agreement is effective on the Date you receive the Software and remains effective until terminated.  Your rights under this Agreement will terminate immediately without notice from Sun if you materially breach it or take any action in derogation of Sun's and/or its licensors' rights to Software. Sun may terminate this Agreement should any Software become, or in Sun's reasonable opinion likely to become, the subject of a claim of intellectual property infringement or trade secret misa [...]
-
-6. Limited Warranty. 
-
-Sun warrants to you that for a period of 90 days from the date of receipt, the media on which Software is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, Software is provided "AS IS". Your exclusive remedy and Sun's entire liability under this limited warranty will be at Sun's option to replace Software media or refund the fee paid for Software. Some states do not allow limitations on certain implied warranties, so the a [...]
-
-7. Disclaimer of Warranty. 
-
-UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. 
-
-8. Limitation of Liability. 
-
-TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will Sun's liability to you, whether in contract, tort (including negligence), or otherwise, ex [...]
-
-9. Export Regulations. 
-
-All Software, documents, technical data, and any other materials delivered under this Agreement are subject to U.S. export control laws and may be subject to export or import regulations in other countries. You agree to comply strictly with these laws and regulations and acknowledge that you have the responsibility to obtain any licenses to export, re-export, or import as may be required after delivery to you. 
-
-10. U.S. Government Restricted Rights. 
-
-If Software is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in Software and accompanying documentation will be only as set forth in this Agreement; this is in accordance with 48 CFR 227.7201 through 227.7202-4 (for Department of Defense (DOD) acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD acquisitions). 
-
-11. Governing Law. 
-
-Any action related to this Agreement will be governed by California law and controlling U.S. federal law. No choice of law rules of any jurisdiction will apply. 
-
-12. Severability. 
-
-If any provision of this Agreement is held to be unenforceable, this Agreement will remain in effect with the provision omitted, unless omission would frustrate the intent of the parties, in which case this Agreement will immediately terminate.
-
-13. Integration. 
-
-This Agreement is the entire agreement between you and Sun relating to its subject matter. It supersedes all prior or contemporaneous oral or written communications, proposals, representations and warranties and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter during the term of this Agreement. No modification of this Agreement will be binding, unless in writing and signed by a [...]
-
-
-
-
diff --git a/legal/jsf-cddl/CDDLGPLHeader.txt b/legal/jsf-cddl/CDDLGPLHeader.txt
deleted file mode 100644
index 36cd90b..0000000
--- a/legal/jsf-cddl/CDDLGPLHeader.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
diff --git a/legal/jsf-cddl/COPYRIGHT b/legal/jsf-cddl/COPYRIGHT
deleted file mode 100644
index 3b37f75..0000000
--- a/legal/jsf-cddl/COPYRIGHT
+++ /dev/null
@@ -1,80 +0,0 @@
-Copyright 2004-2005 Sun Microsystems, Inc., 4150 Network Circle, 
-Santa Clara, California 95054, U.S.A. All Rights Reserved.
-
-U.S. Government Rights - Commercial software.  Government users are subject 
-to the Sun Microsystems, Inc. standard license agreement and applicable 
-provisions of the FAR and its supplements.  
-
-Use is subject to license terms.
-
-This distribution may include materials developed by third parties.
-
-Parts of the product may be derived from Berkeley BSD systems, licensed from 
-the University of California. UNIX is a registered trademark in the U.S. and 
-in other countries, exclusively licensed through X/Open Company, Ltd.
-
-Sun, Sun Microsystems, the Sun logo, Java, Jini, J2EE, JavaServer Pages,
-JavaServer Faces, Enterprise JavaBeans, Java Naming and Directory
-Interface, EJB, J2SE, JSTL, JDBC, JavaMail, JAXP, SAAJ, JAXR and JAX RPC
-are trademarks or registered trademarks of Sun Microsystems, Inc. in the
-U.S. and other countries.
-
-The OPEN LOOK and Sun(TM) Graphical User Interface was developed by Sun
-Microsystems, Inc. for its users and licensees. Sun acknowledges the pioneering
-efforts of Xerox in researching and developing the concept of visual or
-graphical user interfaces for the computer industry. Sun holds a non-exclusive 
-license from Xerox to the Xerox Graphical User Interface, which license also 
-covers Sun's licensees who implement OPEN LOOK GUIs and otherwise comply with
-Sun's written license agreements.
-
-This product is covered and controlled by U.S. Export Control laws and may 
-be subject to the export or import laws in other countries.  Nuclear, missile, 
-chemical biological weapons or nuclear maritime end uses or end users,
-whether direct or indirect, are strictly prohibited.  Export or reexport to 
-countries subject to U.S. embargo or to entities identified on U.S. export 
-exclusion lists, including, but not limited to, the denied persons and 
-specially designated nationals lists is strictly prohibited.
-
-Copyright 2004-2005 Sun Microsystems, Inc., 4150 Network Circle,
-Santa Clara, California 95054, Etats-Unis. Tous Droits Reserves.
-
-L'utilisation est soumise aux termes du contrat de licence.
-
-Cette distribution peut comprendre des composants developpes par des 
-tierces parties.
-
-Des parties de ce produit pourront etre derivees des systemes Berkeley BSD 
-licencies par l'Universite de Californie. UNIX est une marque deposee aux 
-Etats-Unis et dans d'autres pays et licenciee exclusivement par X/Open 
-Company, Ltd.
-
-Sun, Sun Microsystems, le logo Sun, Java, Jini, J2EE, JavaServer Pages,
-JavaServer Faces, Enterprise JavaBeans, Java Naming and Directory
-Interface, EJB, J2SE, JSTL, JDBC, JavaMail, JAXP, SAAJ, JAXR et JAX RPC
-sont des marques de fabrique ou des marques deposees de Sun
-Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
-
-L'interface d'utilisation graphique OPEN LOOK et Sun(TM) a ete developpee par 
-Sun Microsystems, Inc. pour ses utilisateurs et licencies. Sun reconnaet les 
-efforts de pionniers de Xerox pour la recherche et le developpement du concept 
-des interfaces d'utilisation   visuelle ou graphique pour l'industrie de l'infor
-matique. Sun detient une license non exclusive de Xerox sur l'interface d'utilis
-ation graphique Xerox, cette licence couvrant egalement les licencies de Sun 
-qui mettent en place l'interface d'utilisation graphique OPEN LOOK et qui, en 
-outre, se conforment aux licences ecrites de Sun.
-
-Ce produit est soumis a la legislation americaine en matiere de contrele des 
-exportations et peut etre soumis a la reglementation en vigueur dans d'autres 
-pays dans le domaine des exportations et importations. Les utilisations, ou 
-utilisateurs finaux, pour des armes nucleaires,des missiles, des armes 
-biologiques et chimiques ou du nucleaire maritime, directement ou indirectement,
-sont strictement interdites. Les exportations ou reexportations vers les pays 
-sous embargo americain, ou vers des entites figurant sur les listes d'exclusion
-d'exportation americaines, y compris, mais de maniere non exhaustive, la 
-liste de personnes qui font objet d'un ordre de ne pas participer, d'une facon
-directe ou indirecte, aux exportations des produits ou des services qui sont 
-regis  par la legislation americaine en matiere de controle des exportations
-et la liste de ressortissants specifiquement designes, sont rigoureusement 
-interdites.
-
-
diff --git a/legal/jsf-cddl/LICENSE.txt b/legal/jsf-cddl/LICENSE.txt
deleted file mode 100644
index 4aea537..0000000
--- a/legal/jsf-cddl/LICENSE.txt
+++ /dev/null
@@ -1,263 +0,0 @@
-COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
-
-1. Definitions.
-
-   1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications.
-
-   1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
-
-   1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
-
-   1.4. Executable. means the Covered Software in any form other than Source Code.
-
-   1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License.
-
-   1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
-
-   1.7. License. means this document.
-
-   1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
-
-   1.9. Modifications. means the Source Code and Executable form of any of the following:
-
-        A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
-
-        B. Any new file that contains any part of the Original Software or previous Modification; or
-
-        C. Any new file that is contributed or otherwise made available under the terms of this License.
-
-   1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License.
-
-   1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
-
-   1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
-
-   1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outs [...]
-
-2. License Grants.
-
-      2.1. The Initial Developer Grant.
-
-      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
-
-         (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
-
-         (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
-
-        (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
-
-        (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
-
-    2.2. Contributor Grant.
-
-    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
-
-        (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
-
-        (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
-
-        (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-
-        (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that [...]
-
-3. Distribution Obligations.
-
-      3.1. Availability of Source Code.
-      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Soft [...]
-
-      3.2. Modifications.
-      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
-
-      3.3. Required Notices.
-      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
-
-      3.4. Application of Additional Terms.
-      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that an [...]
-
-      3.5. Distribution of Executable Versions.
-      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable  [...]
-
-      3.6. Larger Works.
-      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
-
-4. Versions of the License.
-
-      4.1. New Versions.
-      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
-
-      4.2. Effect of New Versions.
-      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under [...]
-
-      4.3. Modified Versions.
-      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
-
-5. DISCLAIMER OF WARRANTY.
-
-   COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME  [...]
-
-6. TERMINATION.
-
-      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
-
-      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rig [...]
-
-      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
-
-7. LIMITATION OF LIABILITY.
-
-   UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND AL [...]
-
-8. U.S. GOVERNMENT END USERS.
-
-   The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. � 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth [...]
-
-9. MISCELLANEOUS.
-
-   This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigati [...]
-
-10. RESPONSIBILITY FOR CLAIMS.
-
-   As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
-
-   NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-
-   The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
-
-
-The GNU General Public License (GPL) Version 2, June 1991
-
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library Genera [...]
-
-When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and modification follow.
-
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. ( [...]
-
-Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
-
-1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
-
-   a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
-
-   b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
-
-   c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself i [...]
-
-These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose p [...]
-
-Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
-
-3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
-
-   a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-   b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-   c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major co [...]
-
-If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
-
-4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
-
-5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works ba [...]
-
-6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
-
-7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not dist [...]
-
-If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/dono [...]
-
-This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
-
-9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
-
-10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  [...]
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO  [...]
-
-END OF TERMS AND CONDITIONS
-
-
-How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
-
-To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
-
-   One line to give the program's name and a brief idea of what it does.
-
-   Copyright (C)
-
-   This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
-
-   Gnomovision version 69, Copyright (C) year name of author
-   Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
-
-   Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-   signature of Ty Coon, 1 April 1989
-   Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
-
-
-"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
-
-Certain source files distributed by Sun Microsystems, Inc. are subject to the following clarification and special exception to the GPL Version 2, but only where Sun has expressly included in the particular source file's header the words
-
-"Sun designates this particular file as subject to the "Classpath" exception as provided by Sun in the License file that accompanied this code."
-
-Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination.
-
-As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.? An independent module is a module which is not derived from or based on th [...]
diff --git a/nbproject/project.xml b/nbproject/project.xml
deleted file mode 100644
index b04e290..0000000
--- a/nbproject/project.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.ant.freeform</type>
-    <configuration>
-        <general-data xmlns="http://www.netbeans.org/ns/freeform-project/1">
-            <name>mojarra-2.0.3-SNAPSHOT</name>
-        </general-data>
-        <general-data xmlns="http://www.netbeans.org/ns/freeform-project/2">
-            <!-- Do not use Project Properties customizer when editing this file manually. -->
-            <name>mojarra-2.0.3-SNAPSHOT</name>
-            <properties/>
-            <folders>
-                <source-folder>
-                    <label>Mojarra</label>
-                    <location>.</location>
-                    <encoding>MacRoman</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>jsf-api/src/main/java</label>
-                    <type>java</type>
-                    <location>jsf-api/src/main/java</location>
-                    <encoding>MacRoman</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>jsf-ri/src/main/java</label>
-                    <type>java</type>
-                    <location>jsf-ri/src/main/java</location>
-                    <encoding>MacRoman</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>jsf-ri/test</label>
-                    <type>java</type>
-                    <location>jsf-ri/test</location>
-                    <encoding>MacRoman</encoding>
-                </source-folder>
-            </folders>
-            <ide-actions>
-                <action name="build">
-                    <target>main</target>
-                </action>
-                <action name="clean">
-                    <target>clean</target>
-                </action>
-                <action name="javadoc">
-                    <target>build.javadocs.dist</target>
-                </action>
-                <action name="test">
-                    <target>test</target>
-                </action>
-                <action name="rebuild">
-                    <target>clean</target>
-                    <target>main</target>
-                </action>
-            </ide-actions>
-            <view>
-                <items>
-                    <source-folder style="packages">
-                        <label>jsf-api/src/main/java</label>
-                        <location>jsf-api/src/main/java</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>jsf-ri/src/main/java</label>
-                        <location>jsf-ri/src/main/java</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>jsf-ri/test</label>
-                        <location>jsf-ri/test</location>
-                    </source-folder>
-                    <source-file>
-                        <location>build.xml</location>
-                    </source-file>
-                </items>
-                <context-menu>
-                    <ide-action name="build"/>
-                    <ide-action name="rebuild"/>
-                    <ide-action name="clean"/>
-                    <ide-action name="javadoc"/>
-                    <ide-action name="test"/>
-                </context-menu>
-            </view>
-            <subprojects/>
-        </general-data>
-        <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2">
-            <compilation-unit>
-                <package-root>jsf-api/src/main/java</package-root>
-                <package-root>jsf-ri/src/main/java</package-root>
-                <package-root>jsf-ri/test</package-root>
-                <classpath mode="compile">dependencies/jars/el-api-1.0.jar:dependencies/jars/jsp-api-2.1.jar:dependencies/jars/jstl-1.2.jar:dependencies/jars/validation-api-1.0.0.GA.jar:dependencies/jars/servlet-api-3.0.20100224.jar:dependencies/jars/groovy-all-1.6.4.jar:dependencies/jars/junit-3.8.1.jar:lib/cactus-1.7.1-javaee5.jar:lib/jsf-extensions-test-time.jar</classpath>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-        </java-data>
-    </configuration>
-</project>
diff --git a/password.txt b/password.txt
deleted file mode 100644
index b3aec2d..0000000
--- a/password.txt
+++ /dev/null
@@ -1 +0,0 @@
-AS_ADMIN_PASSWORD=adminadmin

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/mojarra.git



More information about the pkg-java-commits mailing list